Ready for release, mostly

This commit is contained in:
Joe Scotto
2026-06-23 19:13:00 -04:00
parent 51a38bb03a
commit 7228bdd9cb
30 changed files with 33175 additions and 283 deletions
-7
View File
@@ -1,7 +0,0 @@
# Scotto48 (PCB Edition) - Case
To assemble the case, you'll need the following:
- 4 M2x4mm Standoffs
- 10 M2 Nuts
- 10 M2x5mm Screws
File diff suppressed because it is too large Load Diff
Binary file not shown.
@@ -0,0 +1,501 @@
ISO-10303-21;
HEADER;
/* File generated by Shapr3D Version 26.110.0.11116 */
FILE_DESCRIPTION(('HOOPS Exchange Step'),'2;1');
FILE_NAME('/Users/jscotto/Library/Containers/com.shapr3d.shapr/Data/tmp/export/temp_export',
'2026-06-23T18:32:28-04:00',
('jscotto'),
('Shapr3D Limited'),
'HOOPS Exchange 2026.3',
'Shapr3D',
'Authorized');
FILE_SCHEMA( ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF {1 0 10303 442 1 1 4}') );
ENDSEC;
DATA;
#3=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));
#4=PLANE_ANGLE_MEASURE_WITH_UNIT(PLANE_ANGLE_MEASURE(0.0174532925),#3);
#5=(CONVERSION_BASED_UNIT('DEGREE',#4)NAMED_UNIT(#6)PLANE_ANGLE_UNIT());
#6=DIMENSIONAL_EXPONENTS(0.,0.,0.,0.,0.,0.,0.);
#7=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());
#8=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.));
#9=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.000000E-05),#8,'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
#10=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#9))GLOBAL_UNIT_ASSIGNED_CONTEXT((#8,#5,#7))REPRESENTATION_CONTEXT('','LED Diffuser'));
#12=CARTESIAN_POINT('',(0.,0.,0.));
#13=DIRECTION('',(0.,0.,1.));
#14=DIRECTION('',(1.,0.,0.));
#15=AXIS2_PLACEMENT_3D('TS3D_PRODUCT_CSYS',#12,#13,#14);
#27=CARTESIAN_POINT('',(-0.,-21.825,8.05));
#28=DIRECTION('',(0.,1.,0.));
#29=DIRECTION('',(0.,0.,1.));
#30=AXIS2_PLACEMENT_3D('',#27,#28,#29);
#31=PLANE('',#30);
#32=CARTESIAN_POINT('',(-2.575,-21.825,6.45));
#33=VERTEX_POINT('',#32);
#34=CARTESIAN_POINT('',(2.575,-21.825,6.45));
#35=VERTEX_POINT('',#34);
#36=CARTESIAN_POINT('',(-2.575,-21.825,6.45));
#37=DIRECTION('',(1.,0.,-0.));
#38=VECTOR('',#37,5.15);
#39=LINE('',#36,#38);
#40=EDGE_CURVE('',#33,#35,#39,.T.);
#41=ORIENTED_EDGE('',*,*,#40,.F.);
#42=CARTESIAN_POINT('',(-2.575,-21.825,8.05));
#43=VERTEX_POINT('',#42);
#44=CARTESIAN_POINT('',(-2.575,-21.825,8.05));
#45=DIRECTION('',(0.,0.,-1.));
#46=VECTOR('',#45,1.6);
#47=LINE('',#44,#46);
#48=EDGE_CURVE('',#43,#33,#47,.T.);
#49=ORIENTED_EDGE('',*,*,#48,.F.);
#50=CARTESIAN_POINT('',(2.575,-21.825,8.05));
#51=VERTEX_POINT('',#50);
#52=CARTESIAN_POINT('',(-2.575,-21.825,8.05));
#53=DIRECTION('',(1.,0.,-0.));
#54=VECTOR('',#53,5.15);
#55=LINE('',#52,#54);
#56=EDGE_CURVE('',#43,#51,#55,.T.);
#57=ORIENTED_EDGE('',*,*,#56,.T.);
#58=CARTESIAN_POINT('',(2.575,-21.825,8.05));
#59=DIRECTION('',(0.,0.,-1.));
#60=VECTOR('',#59,1.6);
#61=LINE('',#58,#60);
#62=EDGE_CURVE('',#51,#35,#61,.T.);
#63=ORIENTED_EDGE('',*,*,#62,.T.);
#64=EDGE_LOOP('',(#41,#49,#57,#63));
#65=FACE_BOUND('',#64,.T.);
#66=ADVANCED_FACE('',(#65),#31,.T.);
#67=CARTESIAN_POINT('',(2.575,-19.25,8.05));
#68=DIRECTION('',(-1.,0.,0.));
#69=DIRECTION('',(0.,0.,1.));
#70=AXIS2_PLACEMENT_3D('',#67,#68,#69);
#71=PLANE('',#70);
#72=CARTESIAN_POINT('',(2.575,-16.675,6.45));
#73=VERTEX_POINT('',#72);
#74=CARTESIAN_POINT('',(2.575,-21.825,6.45));
#75=DIRECTION('',(0.,1.,0.));
#76=VECTOR('',#75,5.15);
#77=LINE('',#74,#76);
#78=EDGE_CURVE('',#35,#73,#77,.T.);
#79=ORIENTED_EDGE('',*,*,#78,.F.);
#80=ORIENTED_EDGE('',*,*,#62,.F.);
#81=CARTESIAN_POINT('',(2.575,-16.675,8.05));
#82=VERTEX_POINT('',#81);
#83=CARTESIAN_POINT('',(2.575,-21.825,8.05));
#84=DIRECTION('',(0.,1.,0.));
#85=VECTOR('',#84,5.15);
#86=LINE('',#83,#85);
#87=EDGE_CURVE('',#51,#82,#86,.T.);
#88=ORIENTED_EDGE('',*,*,#87,.T.);
#89=CARTESIAN_POINT('',(2.575,-16.675,8.05));
#90=DIRECTION('',(0.,0.,-1.));
#91=VECTOR('',#90,1.6);
#92=LINE('',#89,#91);
#93=EDGE_CURVE('',#82,#73,#92,.T.);
#94=ORIENTED_EDGE('',*,*,#93,.T.);
#95=EDGE_LOOP('',(#79,#80,#88,#94));
#96=FACE_BOUND('',#95,.T.);
#97=ADVANCED_FACE('',(#96),#71,.T.);
#98=CARTESIAN_POINT('',(-0.,-16.675,8.05));
#99=DIRECTION('',(0.,-1.,0.));
#100=DIRECTION('',(0.,0.,-1.));
#101=AXIS2_PLACEMENT_3D('',#98,#99,#100);
#102=PLANE('',#101);
#103=CARTESIAN_POINT('',(-2.575,-16.675,6.45));
#104=VERTEX_POINT('',#103);
#105=CARTESIAN_POINT('',(2.575,-16.675,6.45));
#106=DIRECTION('',(-1.,0.,0.));
#107=VECTOR('',#106,5.15);
#108=LINE('',#105,#107);
#109=EDGE_CURVE('',#73,#104,#108,.T.);
#110=ORIENTED_EDGE('',*,*,#109,.F.);
#111=ORIENTED_EDGE('',*,*,#93,.F.);
#112=CARTESIAN_POINT('',(-2.575,-16.675,8.05));
#113=VERTEX_POINT('',#112);
#114=CARTESIAN_POINT('',(2.575,-16.675,8.05));
#115=DIRECTION('',(-1.,0.,0.));
#116=VECTOR('',#115,5.15);
#117=LINE('',#114,#116);
#118=EDGE_CURVE('',#82,#113,#117,.T.);
#119=ORIENTED_EDGE('',*,*,#118,.T.);
#120=CARTESIAN_POINT('',(-2.575,-16.675,8.05));
#121=DIRECTION('',(0.,0.,-1.));
#122=VECTOR('',#121,1.6);
#123=LINE('',#120,#122);
#124=EDGE_CURVE('',#113,#104,#123,.T.);
#125=ORIENTED_EDGE('',*,*,#124,.T.);
#126=EDGE_LOOP('',(#110,#111,#119,#125));
#127=FACE_BOUND('',#126,.T.);
#128=ADVANCED_FACE('',(#127),#102,.T.);
#129=CARTESIAN_POINT('',(3.375,-19.25,8.05));
#130=DIRECTION('',(-1.,0.,0.));
#131=DIRECTION('',(0.,0.,1.));
#132=AXIS2_PLACEMENT_3D('',#129,#130,#131);
#133=PLANE('',#132);
#134=CARTESIAN_POINT('',(3.375,-21.375,6.45));
#135=VERTEX_POINT('',#134);
#136=CARTESIAN_POINT('',(3.375,-17.125,6.45));
#137=VERTEX_POINT('',#136);
#138=CARTESIAN_POINT('',(3.375,-21.375,6.45));
#139=DIRECTION('',(0.,1.,0.));
#140=VECTOR('',#139,4.25);
#141=LINE('',#138,#140);
#142=EDGE_CURVE('',#135,#137,#141,.T.);
#143=ORIENTED_EDGE('',*,*,#142,.T.);
#144=CARTESIAN_POINT('',(3.375,-17.125,8.85));
#145=VERTEX_POINT('',#144);
#146=CARTESIAN_POINT('',(3.375,-17.125,6.45));
#147=DIRECTION('',(-0.,-0.,1.));
#148=VECTOR('',#147,2.4);
#149=LINE('',#146,#148);
#150=EDGE_CURVE('',#137,#145,#149,.T.);
#151=ORIENTED_EDGE('',*,*,#150,.T.);
#152=CARTESIAN_POINT('',(3.375,-21.375,8.85));
#153=VERTEX_POINT('',#152);
#154=CARTESIAN_POINT('',(3.375,-21.375,8.85));
#155=DIRECTION('',(0.,1.,0.));
#156=VECTOR('',#155,4.25);
#157=LINE('',#154,#156);
#158=EDGE_CURVE('',#153,#145,#157,.T.);
#159=ORIENTED_EDGE('',*,*,#158,.F.);
#160=CARTESIAN_POINT('',(3.375,-21.375,8.85));
#161=DIRECTION('',(0.,0.,-1.));
#162=VECTOR('',#161,2.4);
#163=LINE('',#160,#162);
#164=EDGE_CURVE('',#153,#135,#163,.T.);
#165=ORIENTED_EDGE('',*,*,#164,.T.);
#166=EDGE_LOOP('',(#143,#151,#159,#165));
#167=FACE_BOUND('',#166,.T.);
#168=ADVANCED_FACE('',(#167),#133,.F.);
#169=CARTESIAN_POINT('',(-0.,-22.625,8.05));
#170=DIRECTION('',(0.,1.,0.));
#171=DIRECTION('',(0.,0.,1.));
#172=AXIS2_PLACEMENT_3D('',#169,#170,#171);
#173=PLANE('',#172);
#174=CARTESIAN_POINT('',(-2.125,-22.625,8.85));
#175=VERTEX_POINT('',#174);
#176=CARTESIAN_POINT('',(2.125,-22.625,8.85));
#177=VERTEX_POINT('',#176);
#178=CARTESIAN_POINT('',(-2.125,-22.625,8.85));
#179=DIRECTION('',(1.,0.,-0.));
#180=VECTOR('',#179,4.25);
#181=LINE('',#178,#180);
#182=EDGE_CURVE('',#175,#177,#181,.T.);
#183=ORIENTED_EDGE('',*,*,#182,.F.);
#184=CARTESIAN_POINT('',(-2.125,-22.625,6.45));
#185=VERTEX_POINT('',#184);
#186=CARTESIAN_POINT('',(-2.125,-22.625,8.85));
#187=DIRECTION('',(0.,0.,-1.));
#188=VECTOR('',#187,2.4);
#189=LINE('',#186,#188);
#190=EDGE_CURVE('',#175,#185,#189,.T.);
#191=ORIENTED_EDGE('',*,*,#190,.T.);
#192=CARTESIAN_POINT('',(2.125,-22.625,6.45));
#193=VERTEX_POINT('',#192);
#194=CARTESIAN_POINT('',(-2.125,-22.625,6.45));
#195=DIRECTION('',(1.,0.,-0.));
#196=VECTOR('',#195,4.25);
#197=LINE('',#194,#196);
#198=EDGE_CURVE('',#185,#193,#197,.T.);
#199=ORIENTED_EDGE('',*,*,#198,.T.);
#200=CARTESIAN_POINT('',(2.125,-22.625,6.45));
#201=DIRECTION('',(-0.,-0.,1.));
#202=VECTOR('',#201,2.4);
#203=LINE('',#200,#202);
#204=EDGE_CURVE('',#193,#177,#203,.T.);
#205=ORIENTED_EDGE('',*,*,#204,.T.);
#206=EDGE_LOOP('',(#183,#191,#199,#205));
#207=FACE_BOUND('',#206,.T.);
#208=ADVANCED_FACE('',(#207),#173,.F.);
#209=CARTESIAN_POINT('',(-3.375,-19.25,8.05));
#210=DIRECTION('',(1.,0.,0.));
#211=DIRECTION('',(0.,0.,-1.));
#212=AXIS2_PLACEMENT_3D('',#209,#210,#211);
#213=PLANE('',#212);
#214=CARTESIAN_POINT('',(-3.375,-17.125,8.85));
#215=VERTEX_POINT('',#214);
#216=CARTESIAN_POINT('',(-3.375,-21.375,8.85));
#217=VERTEX_POINT('',#216);
#218=CARTESIAN_POINT('',(-3.375,-17.125,8.85));
#219=DIRECTION('',(0.,-1.,0.));
#220=VECTOR('',#219,4.25);
#221=LINE('',#218,#220);
#222=EDGE_CURVE('',#215,#217,#221,.T.);
#223=ORIENTED_EDGE('',*,*,#222,.F.);
#224=CARTESIAN_POINT('',(-3.375,-17.125,6.45));
#225=VERTEX_POINT('',#224);
#226=CARTESIAN_POINT('',(-3.375,-17.125,8.85));
#227=DIRECTION('',(0.,0.,-1.));
#228=VECTOR('',#227,2.4);
#229=LINE('',#226,#228);
#230=EDGE_CURVE('',#215,#225,#229,.T.);
#231=ORIENTED_EDGE('',*,*,#230,.T.);
#232=CARTESIAN_POINT('',(-3.375,-21.375,6.45));
#233=VERTEX_POINT('',#232);
#234=CARTESIAN_POINT('',(-3.375,-17.125,6.45));
#235=DIRECTION('',(0.,-1.,0.));
#236=VECTOR('',#235,4.25);
#237=LINE('',#234,#236);
#238=EDGE_CURVE('',#225,#233,#237,.T.);
#239=ORIENTED_EDGE('',*,*,#238,.T.);
#240=CARTESIAN_POINT('',(-3.375,-21.375,6.45));
#241=DIRECTION('',(-0.,-0.,1.));
#242=VECTOR('',#241,2.4);
#243=LINE('',#240,#242);
#244=EDGE_CURVE('',#233,#217,#243,.T.);
#245=ORIENTED_EDGE('',*,*,#244,.T.);
#246=EDGE_LOOP('',(#223,#231,#239,#245));
#247=FACE_BOUND('',#246,.T.);
#248=ADVANCED_FACE('',(#247),#213,.F.);
#249=CARTESIAN_POINT('',(-0.,-15.875,8.05));
#250=DIRECTION('',(0.,-1.,0.));
#251=DIRECTION('',(0.,0.,-1.));
#252=AXIS2_PLACEMENT_3D('',#249,#250,#251);
#253=PLANE('',#252);
#254=CARTESIAN_POINT('',(2.125,-15.875,8.85));
#255=VERTEX_POINT('',#254);
#256=CARTESIAN_POINT('',(-2.125,-15.875,8.85));
#257=VERTEX_POINT('',#256);
#258=CARTESIAN_POINT('',(2.125,-15.875,8.85));
#259=DIRECTION('',(-1.,0.,0.));
#260=VECTOR('',#259,4.25);
#261=LINE('',#258,#260);
#262=EDGE_CURVE('',#255,#257,#261,.T.);
#263=ORIENTED_EDGE('',*,*,#262,.F.);
#264=CARTESIAN_POINT('',(2.125,-15.875,6.45));
#265=VERTEX_POINT('',#264);
#266=CARTESIAN_POINT('',(2.125,-15.875,8.85));
#267=DIRECTION('',(0.,0.,-1.));
#268=VECTOR('',#267,2.4);
#269=LINE('',#266,#268);
#270=EDGE_CURVE('',#255,#265,#269,.T.);
#271=ORIENTED_EDGE('',*,*,#270,.T.);
#272=CARTESIAN_POINT('',(-2.125,-15.875,6.45));
#273=VERTEX_POINT('',#272);
#274=CARTESIAN_POINT('',(2.125,-15.875,6.45));
#275=DIRECTION('',(-1.,0.,0.));
#276=VECTOR('',#275,4.25);
#277=LINE('',#274,#276);
#278=EDGE_CURVE('',#265,#273,#277,.T.);
#279=ORIENTED_EDGE('',*,*,#278,.T.);
#280=CARTESIAN_POINT('',(-2.125,-15.875,6.45));
#281=DIRECTION('',(-0.,-0.,1.));
#282=VECTOR('',#281,2.4);
#283=LINE('',#280,#282);
#284=EDGE_CURVE('',#273,#257,#283,.T.);
#285=ORIENTED_EDGE('',*,*,#284,.T.);
#286=EDGE_LOOP('',(#263,#271,#279,#285));
#287=FACE_BOUND('',#286,.T.);
#288=ADVANCED_FACE('',(#287),#253,.F.);
#289=CARTESIAN_POINT('',(-2.575,-19.25,8.05));
#290=DIRECTION('',(1.,0.,0.));
#291=DIRECTION('',(0.,0.,-1.));
#292=AXIS2_PLACEMENT_3D('',#289,#290,#291);
#293=PLANE('',#292);
#294=CARTESIAN_POINT('',(-2.575,-16.675,6.45));
#295=DIRECTION('',(0.,-1.,0.));
#296=VECTOR('',#295,5.15);
#297=LINE('',#294,#296);
#298=EDGE_CURVE('',#104,#33,#297,.T.);
#299=ORIENTED_EDGE('',*,*,#298,.F.);
#300=ORIENTED_EDGE('',*,*,#124,.F.);
#301=CARTESIAN_POINT('',(-2.575,-16.675,8.05));
#302=DIRECTION('',(0.,-1.,0.));
#303=VECTOR('',#302,5.15);
#304=LINE('',#301,#303);
#305=EDGE_CURVE('',#113,#43,#304,.T.);
#306=ORIENTED_EDGE('',*,*,#305,.T.);
#307=ORIENTED_EDGE('',*,*,#48,.T.);
#308=EDGE_LOOP('',(#299,#300,#306,#307));
#309=FACE_BOUND('',#308,.T.);
#310=ADVANCED_FACE('',(#309),#293,.T.);
#311=CARTESIAN_POINT('',(-0.,-19.25,6.45));
#312=DIRECTION('',(0.,0.,-1.));
#313=DIRECTION('',(1.,0.,0.));
#314=AXIS2_PLACEMENT_3D('',#311,#312,#313);
#315=PLANE('',#314);
#316=ORIENTED_EDGE('',*,*,#278,.F.);
#317=CARTESIAN_POINT('',(2.125,-17.125,6.45));
#318=DIRECTION('',(0.,0.,-1.));
#319=DIRECTION('',(-1.,0.,0.));
#320=AXIS2_PLACEMENT_3D('',#317,#318,#319);
#321=CIRCLE('',#320,1.25);
#322=EDGE_CURVE('',#265,#137,#321,.T.);
#323=ORIENTED_EDGE('',*,*,#322,.T.);
#324=ORIENTED_EDGE('',*,*,#142,.F.);
#325=CARTESIAN_POINT('',(2.125,-21.375,6.45));
#326=DIRECTION('',(0.,0.,-1.));
#327=DIRECTION('',(-1.,0.,0.));
#328=AXIS2_PLACEMENT_3D('',#325,#326,#327);
#329=CIRCLE('',#328,1.25);
#330=EDGE_CURVE('',#135,#193,#329,.T.);
#331=ORIENTED_EDGE('',*,*,#330,.T.);
#332=ORIENTED_EDGE('',*,*,#198,.F.);
#333=CARTESIAN_POINT('',(-2.125,-21.375,6.45));
#334=DIRECTION('',(0.,0.,-1.));
#335=DIRECTION('',(-1.,0.,0.));
#336=AXIS2_PLACEMENT_3D('',#333,#334,#335);
#337=CIRCLE('',#336,1.25);
#338=EDGE_CURVE('',#185,#233,#337,.T.);
#339=ORIENTED_EDGE('',*,*,#338,.T.);
#340=ORIENTED_EDGE('',*,*,#238,.F.);
#341=CARTESIAN_POINT('',(-2.125,-17.125,6.45));
#342=DIRECTION('',(0.,0.,-1.));
#343=DIRECTION('',(-1.,0.,0.));
#344=AXIS2_PLACEMENT_3D('',#341,#342,#343);
#345=CIRCLE('',#344,1.25);
#346=EDGE_CURVE('',#225,#273,#345,.T.);
#347=ORIENTED_EDGE('',*,*,#346,.T.);
#348=EDGE_LOOP('',(#316,#323,#324,#331,#332,#339,#340,#347));
#349=FACE_BOUND('',#348,.T.);
#350=ORIENTED_EDGE('',*,*,#40,.T.);
#351=ORIENTED_EDGE('',*,*,#78,.T.);
#352=ORIENTED_EDGE('',*,*,#109,.T.);
#353=ORIENTED_EDGE('',*,*,#298,.T.);
#354=EDGE_LOOP('',(#350,#351,#352,#353));
#355=FACE_BOUND('',#354,.T.);
#356=ADVANCED_FACE('',(#349,#355),#315,.T.);
#357=CARTESIAN_POINT('',(-0.,-19.25,8.05));
#358=DIRECTION('',(0.,0.,1.));
#359=DIRECTION('',(-1.,0.,0.));
#360=AXIS2_PLACEMENT_3D('',#357,#358,#359);
#361=PLANE('',#360);
#362=ORIENTED_EDGE('',*,*,#56,.F.);
#363=ORIENTED_EDGE('',*,*,#305,.F.);
#364=ORIENTED_EDGE('',*,*,#118,.F.);
#365=ORIENTED_EDGE('',*,*,#87,.F.);
#366=EDGE_LOOP('',(#362,#363,#364,#365));
#367=FACE_BOUND('',#366,.T.);
#368=ADVANCED_FACE('',(#367),#361,.F.);
#369=CARTESIAN_POINT('',(-0.,-19.25,8.85));
#370=DIRECTION('',(0.,0.,1.));
#371=DIRECTION('',(-1.,0.,0.));
#372=AXIS2_PLACEMENT_3D('',#369,#370,#371);
#373=PLANE('',#372);
#374=ORIENTED_EDGE('',*,*,#158,.T.);
#375=CARTESIAN_POINT('',(2.125,-17.125,8.85));
#376=DIRECTION('',(0.,0.,1.));
#377=DIRECTION('',(1.,0.,-0.));
#378=AXIS2_PLACEMENT_3D('',#375,#376,#377);
#379=CIRCLE('',#378,1.25);
#380=EDGE_CURVE('',#145,#255,#379,.T.);
#381=ORIENTED_EDGE('',*,*,#380,.T.);
#382=ORIENTED_EDGE('',*,*,#262,.T.);
#383=CARTESIAN_POINT('',(-2.125,-17.125,8.85));
#384=DIRECTION('',(0.,0.,1.));
#385=DIRECTION('',(1.,0.,-0.));
#386=AXIS2_PLACEMENT_3D('',#383,#384,#385);
#387=CIRCLE('',#386,1.25);
#388=EDGE_CURVE('',#257,#215,#387,.T.);
#389=ORIENTED_EDGE('',*,*,#388,.T.);
#390=ORIENTED_EDGE('',*,*,#222,.T.);
#391=CARTESIAN_POINT('',(-2.125,-21.375,8.85));
#392=DIRECTION('',(0.,0.,1.));
#393=DIRECTION('',(1.,0.,-0.));
#394=AXIS2_PLACEMENT_3D('',#391,#392,#393);
#395=CIRCLE('',#394,1.25);
#396=EDGE_CURVE('',#217,#175,#395,.T.);
#397=ORIENTED_EDGE('',*,*,#396,.T.);
#398=ORIENTED_EDGE('',*,*,#182,.T.);
#399=CARTESIAN_POINT('',(2.125,-21.375,8.85));
#400=DIRECTION('',(0.,0.,1.));
#401=DIRECTION('',(1.,0.,-0.));
#402=AXIS2_PLACEMENT_3D('',#399,#400,#401);
#403=CIRCLE('',#402,1.25);
#404=EDGE_CURVE('',#177,#153,#403,.T.);
#405=ORIENTED_EDGE('',*,*,#404,.T.);
#406=EDGE_LOOP('',(#374,#381,#382,#389,#390,#397,#398,#405));
#407=FACE_BOUND('',#406,.T.);
#408=ADVANCED_FACE('',(#407),#373,.T.);
#409=CARTESIAN_POINT('',(2.125,-17.125,8.05));
#410=DIRECTION('',(0.,0.,-1.));
#411=DIRECTION('',(-1.,0.,0.));
#412=AXIS2_PLACEMENT_3D('',#409,#410,#411);
#413=CYLINDRICAL_SURFACE('',#412,1.25);
#414=ORIENTED_EDGE('',*,*,#380,.F.);
#415=ORIENTED_EDGE('',*,*,#150,.F.);
#416=ORIENTED_EDGE('',*,*,#322,.F.);
#417=ORIENTED_EDGE('',*,*,#270,.F.);
#418=EDGE_LOOP('',(#414,#415,#416,#417));
#419=FACE_BOUND('',#418,.T.);
#420=ADVANCED_FACE('',(#419),#413,.T.);
#421=CARTESIAN_POINT('',(-2.125,-17.125,8.05));
#422=DIRECTION('',(0.,0.,-1.));
#423=DIRECTION('',(-1.,0.,0.));
#424=AXIS2_PLACEMENT_3D('',#421,#422,#423);
#425=CYLINDRICAL_SURFACE('',#424,1.25);
#426=ORIENTED_EDGE('',*,*,#388,.F.);
#427=ORIENTED_EDGE('',*,*,#284,.F.);
#428=ORIENTED_EDGE('',*,*,#346,.F.);
#429=ORIENTED_EDGE('',*,*,#230,.F.);
#430=EDGE_LOOP('',(#426,#427,#428,#429));
#431=FACE_BOUND('',#430,.T.);
#432=ADVANCED_FACE('',(#431),#425,.T.);
#433=CARTESIAN_POINT('',(-2.125,-21.375,8.05));
#434=DIRECTION('',(0.,0.,-1.));
#435=DIRECTION('',(-1.,0.,0.));
#436=AXIS2_PLACEMENT_3D('',#433,#434,#435);
#437=CYLINDRICAL_SURFACE('',#436,1.25);
#438=ORIENTED_EDGE('',*,*,#396,.F.);
#439=ORIENTED_EDGE('',*,*,#244,.F.);
#440=ORIENTED_EDGE('',*,*,#338,.F.);
#441=ORIENTED_EDGE('',*,*,#190,.F.);
#442=EDGE_LOOP('',(#438,#439,#440,#441));
#443=FACE_BOUND('',#442,.T.);
#444=ADVANCED_FACE('',(#443),#437,.T.);
#445=CARTESIAN_POINT('',(2.125,-21.375,8.05));
#446=DIRECTION('',(0.,0.,-1.));
#447=DIRECTION('',(-1.,0.,0.));
#448=AXIS2_PLACEMENT_3D('',#445,#446,#447);
#449=CYLINDRICAL_SURFACE('',#448,1.25);
#450=ORIENTED_EDGE('',*,*,#404,.F.);
#451=ORIENTED_EDGE('',*,*,#204,.F.);
#452=ORIENTED_EDGE('',*,*,#330,.F.);
#453=ORIENTED_EDGE('',*,*,#164,.F.);
#454=EDGE_LOOP('',(#450,#451,#452,#453));
#455=FACE_BOUND('',#454,.T.);
#456=ADVANCED_FACE('',(#455),#449,.T.);
#457=CLOSED_SHELL('',(#66,#97,#128,#168,#208,#248,#288,#310,#356,#368,#408,#420,#432,#444,#456));
#458=MANIFOLD_SOLID_BREP('LED Diffuser',#457);
#459=COLOUR_RGB('',0.870588243,0.870588243,0.870588243);
#460=FILL_AREA_STYLE_COLOUR('',#459);
#461=FILL_AREA_STYLE('',(#460));
#462=SURFACE_STYLE_FILL_AREA(#461);
#463=SURFACE_SIDE_STYLE('',(#462));
#464=SURFACE_STYLE_USAGE(.BOTH.,#463);
#465=PRESENTATION_STYLE_ASSIGNMENT((#464));
#26=STYLED_ITEM('',(#465),#458);
#16=SHAPE_REPRESENTATION('LED Diffuser',(#15),#10);
#17=ADVANCED_BREP_SHAPE_REPRESENTATION('LED Diffuser',(#458),#10);
#473=SHAPE_REPRESENTATION_RELATIONSHIP('','',#16,#17);
#474=CARTESIAN_POINT('',(0.,0.,0.));
#475=DIRECTION('',(0.,0.,1.));
#476=DIRECTION('',(1.,0.,0.));
#477=AXIS2_PLACEMENT_3D('',#474,#475,#476);
#479=MAPPED_ITEM('',#478,#477);
#478=REPRESENTATION_MAP(#477,#16);
#480=APPLICATION_CONTEXT('Managed model based 3d engineering');
#481=APPLICATION_PROTOCOL_DEFINITION('international standard','ap242_managed_model_based_3d_engineering',2014,#480);
#482=PRODUCT_CONTEXT('',#480,'mechanical');
#483=PRODUCT_DEFINITION_CONTEXT('part definition',#480,'design');
#24=PRODUCT('LED Diffuser','LED Diffuser','',(#482));
#484=PRODUCT_RELATED_PRODUCT_CATEGORY('part','',(#24));
#485=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#24,.NOT_KNOWN.);
#25=PRODUCT_DEFINITION('design','',#485,#483);
#23=PRODUCT_DEFINITION_SHAPE('','',#25);
#486=SHAPE_DEFINITION_REPRESENTATION(#23,#16);
#11=DRAUGHTING_MODEL('',(#479),#10);
#487=DESCRIPTIVE_REPRESENTATION_ITEM('KEY','/Users/jscotto/Library/Containers/com.shapr3d.shapr/Data/tmp/388235A9-EDE5-46DC-8512-9627575555EF.tmp');
#488=PROPERTY_DEFINITION('KEY','',#25);
#489=REPRESENTATION('',(#487),#10);
#490=PROPERTY_DEFINITION_REPRESENTATION(#488,#489);
#491=GENERAL_PROPERTY('','KEY','');
#492=GENERAL_PROPERTY_ASSOCIATION('','',#491,#488);
#1=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#26),#10);
ENDSEC;
END-ISO-10303-21;
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+27 -27
View File
@@ -1,6 +1,6 @@
{
"manufacturer": "ScottoKeebs",
"keyboard_name": "Scotto34",
"keyboard_name": "Scotto48 (PCB Edition)",
"maintainer": "joe-scotto",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
@@ -34,7 +34,7 @@
"url": "https://scottokeebs.com",
"usb": {
"device_version": "1.0.0",
"pid": "0x0013",
"pid": "0x0044",
"vid": "0x534B"
},
"ws2812": {
@@ -45,7 +45,7 @@
"led_count": 1
},
"layouts": {
"LAYOUT_split_3x6_2": {
"LAYOUT_ortho_4x12": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
@@ -53,48 +53,48 @@
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [0, 6], "x": 6, "y": 0 },
{ "matrix": [0, 7], "x": 7, "y": 0 },
{ "matrix": [0, 8], "x": 8, "y": 0 },
{ "matrix": [0, 9], "x": 9, "y": 0 },
{ "matrix": [0, 10], "x": 10, "y": 0 },
{ "matrix": [0, 11], "x": 11, "y": 0 },
{ "matrix": [0, 6], "x": 8, "y": 0 },
{ "matrix": [0, 7], "x": 9, "y": 0 },
{ "matrix": [0, 8], "x": 10, "y": 0 },
{ "matrix": [0, 9], "x": 11, "y": 0 },
{ "matrix": [0, 10], "x": 12, "y": 0 },
{ "matrix": [0, 11], "x": 13, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1 },
{ "matrix": [1, 1], "x": 1, "y": 1 },
{ "matrix": [1, 2], "x": 2, "y": 1 },
{ "matrix": [1, 3], "x": 3, "y": 1 },
{ "matrix": [1, 4], "x": 4, "y": 1 },
{ "matrix": [1, 5], "x": 5, "y": 1 },
{ "matrix": [1, 6], "x": 6, "y": 1 },
{ "matrix": [1, 7], "x": 7, "y": 1 },
{ "matrix": [1, 8], "x": 8, "y": 1 },
{ "matrix": [1, 9], "x": 9, "y": 1 },
{ "matrix": [1, 10], "x": 10, "y": 1 },
{ "matrix": [1, 11], "x": 11, "y": 1 },
{ "matrix": [1, 6], "x": 8, "y": 1 },
{ "matrix": [1, 7], "x": 9, "y": 1 },
{ "matrix": [1, 8], "x": 10, "y": 1 },
{ "matrix": [1, 9], "x": 11, "y": 1 },
{ "matrix": [1, 10], "x": 12, "y": 1 },
{ "matrix": [1, 11], "x": 13, "y": 1 },
{ "matrix": [2, 0], "x": 0, "y": 2 },
{ "matrix": [2, 1], "x": 1, "y": 2 },
{ "matrix": [2, 2], "x": 2, "y": 2 },
{ "matrix": [2, 3], "x": 3, "y": 2 },
{ "matrix": [2, 4], "x": 4, "y": 2 },
{ "matrix": [2, 5], "x": 5, "y": 2 },
{ "matrix": [2, 6], "x": 6, "y": 2 },
{ "matrix": [2, 7], "x": 7, "y": 2 },
{ "matrix": [2, 8], "x": 8, "y": 2 },
{ "matrix": [2, 9], "x": 9, "y": 2 },
{ "matrix": [2, 10], "x": 10, "y": 2 },
{ "matrix": [2, 11], "x": 11, "y": 2 },
{ "matrix": [2, 6], "x": 8, "y": 2 },
{ "matrix": [2, 7], "x": 9, "y": 2 },
{ "matrix": [2, 8], "x": 10, "y": 2 },
{ "matrix": [2, 9], "x": 11, "y": 2 },
{ "matrix": [2, 10], "x": 12, "y": 2 },
{ "matrix": [2, 11], "x": 13, "y": 2 },
{ "matrix": [3, 0], "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 1, "y": 3 },
{ "matrix": [3, 2], "x": 2, "y": 3 },
{ "matrix": [3, 3], "x": 3, "y": 3 },
{ "matrix": [3, 4], "x": 4, "y": 3 },
{ "matrix": [3, 5], "x": 5, "y": 3 },
{ "matrix": [3, 6], "x": 6, "y": 3 },
{ "matrix": [3, 7], "x": 7, "y": 3 },
{ "matrix": [3, 8], "x": 8, "y": 3 },
{ "matrix": [3, 9], "x": 9, "y": 3 },
{ "matrix": [3, 10], "x": 10, "y": 3 },
{ "matrix": [3, 11], "x": 11, "y": 3 }
{ "matrix": [3, 6], "x": 8, "y": 3 },
{ "matrix": [3, 7], "x": 9, "y": 3 },
{ "matrix": [3, 8], "x": 10, "y": 3 },
{ "matrix": [3, 9], "x": 11, "y": 3 },
{ "matrix": [3, 10], "x": 12, "y": 3 },
{ "matrix": [3, 11], "x": 13, "y": 3 }
]
}
}
-23
View File
@@ -1,23 +0,0 @@
/*
Copyright 2023 Joe Scotto
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
// Define options
#define TAPPING_TERM 135
#define PERMISSIVE_HOLD
#define TAPPING_TERM_PER_KEY
-45
View File
@@ -1,45 +0,0 @@
/*
Copyright 2023 Joe Scotto
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_3x5_2(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
),
[1] = LAYOUT_split_3x5_2(
KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT_split_3x5_2(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT_split_3x5_2(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
+26 -23
View File
@@ -2,31 +2,34 @@
#include QMK_KEYBOARD_H
// Define combos
const uint16_t PROGMEM tab_combo[] = {KC_Y, KC_BSPC, COMBO_END};
const uint16_t PROGMEM tab_number_combo[] = {KC_CAPS, KC_BSPC, COMBO_END};
const uint16_t PROGMEM tab_code_combo[] = {KC_MFFD, KC_DEL, COMBO_END};
const uint16_t PROGMEM enter_combo[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM enter_number_combo[] = {KC_EXLM, KC_AT, COMBO_END};
const uint16_t PROGMEM enter_code_combo[] = {KC_UNDS, KC_MINS, COMBO_END};
const uint16_t PROGMEM number_combo[] = {KC_W, KC_Y, COMBO_END};
const uint16_t PROGMEM number_code_combo[] = {KC_EXLM, KC_BSPC, COMBO_END};
const uint16_t PROGMEM number_default_combo[] = {KC_AT, KC_CAPS, COMBO_END};
const uint16_t PROGMEM tab_combo[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM enter_combo[] = {KC_Y, KC_BSPC, COMBO_END};
const uint16_t PROGMEM space_combo[] = {KC_V, KC_B, COMBO_END};
const uint16_t PROGMEM middle_click_combo[] = {LT(1, KC_TAB), LT(2, KC_ENT), COMBO_END};
const uint16_t PROGMEM default_combo[] = {KC_G, KC_J, COMBO_END};
const uint16_t PROGMEM code_combo[] = {KC_Q, KC_BSPC, COMBO_END};
const uint16_t PROGMEM code_number_combo[] = {KC_MINS, KC_MFFD, COMBO_END};
const uint16_t PROGMEM code_default_combo[] = {KC_UNDS, KC_DEL, COMBO_END};
const uint16_t PROGMEM number_combo[] = {KC_W, KC_Y, COMBO_END};
const uint16_t PROGMEM function_combo[] = {KC_F, KC_U, COMBO_END};
const uint16_t PROGMEM mouse_combo[] = {KC_P, KC_L, COMBO_END};
// Create combos
combo_t key_combos[] = {
COMBO(tab_combo, KC_TAB),
COMBO(tab_number_combo, KC_TAB),
COMBO(tab_code_combo, KC_TAB),
COMBO(enter_combo, KC_ENT),
COMBO(enter_number_combo, KC_ENT),
COMBO(enter_code_combo, KC_ENT),
COMBO(number_combo, TO_NUMBER),
COMBO(number_code_combo, TO_CODE),
COMBO(number_default_combo, TO_DEFAULT),
COMBO(code_combo, TO_CODE),
COMBO(code_number_combo, TO_NUMBER),
COMBO(code_default_combo, TO_DEFAULT),
[TAB_COMBO] = COMBO(tab_combo, KC_TAB),
[ENTER_COMBO] = COMBO(enter_combo, KC_ENT),
[SPACE_COMBO] = COMBO(space_combo, KC_SPC),
[MIDDLE_CLICK_COMBO] = COMBO(middle_click_combo, MS_BTN3),
[DEFAULT_COMBO] = COMBO(default_combo, TO_DEFAULT),
[CODE_COMBO] = COMBO(code_combo, TO_CODE),
[NUMBER_COMBO] = COMBO(number_combo, TO_NUMBER),
[FUNCTION_COMBO] = COMBO(function_combo, TO_FUNCTION),
[MOUSE_COMBO] = COMBO(mouse_combo, TO_MOUSE),
};
// Lock combos to layers
bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record) {
if (combo_index == MIDDLE_CLICK_COMBO) {
return layer_state_is(4);
}
return true;
}
+11 -3
View File
@@ -4,6 +4,14 @@
#define TAPPING_TERM 135
#define PERMISSIVE_HOLD
#define TAPPING_TERM_PER_KEY
#define SOLENOID_PIN GP28
#define SOLENOID_DEFAULT_BUZZ 1
#define NO_HAPTIC_MOD
#define RGB_BRIGHTNESS 8
#define COMBO_TERM 20
#define COMBO_ONLY_FROM_LAYER 0
#define COMBO_SHOULD_TRIGGER
// Mouse keys
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_INTERVAL 16
#define MOUSEKEY_WHEEL_DELAY 0
#define MOUSEKEY_MAX_SPEED 7
#define MOUSEKEY_TIME_TO_MAX 40
+60 -43
View File
@@ -2,6 +2,7 @@
#include "keys.c"
#include "keys.h"
#include "tapdance.c"
#include "rgb.c"
#include QMK_KEYBOARD_H
// Custom tapping term for multi function keys
@@ -21,20 +22,20 @@ uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ┌──────┬───────────┬───────────────┬────┬──────────────┬─────────────┐ ┌────────────┬────────────┬────┬───────────┬───────────┬──────┐
// │ tab │ q │ w │ f │ p │ g │ │ j │ l │ u │ y │ bspc │ bspc
// ├──────┼───────────┼───────────────┼────┼──────────────┼─────────────┤ ├────────────┼────────────┼────┼───────────┼───────────┼──────┤
// │ ent │ a │ r │ s │ t │ d │ │ h │ n │ e │ i │ o │ '
// ├──────┼───────────┼───────────────┼────┼──────────────┼─────────────┤ ├────────────┼────────────┼────┼───────────┼───────────┼──────┤
// │ lsft │ LSFT_T(z) │ TD(TD_MODS_X) │ c │ v │ b │ │ k │ m │ , │ RGUI_T(.) │ RSFT_T(/) │ rsft │
// ├──────┼───────────┼───────────────┼────┼──────────────┼─────────────┤ ├────────────┼────────────┼────┼───────────┼───────────┼──────┤
// │ no no no │ no │ TD(TD_MULTI) │ LGUI_T(spc) │ │ LT(1, tab) │ LT(2, ent) │ nono no no
// └──────┴───────────┴───────────────┴────┴──────────────┴─────────────┘ └────────────┴────────────┴────┴───────────┴───────────┴──────┘
[0] = LAYOUT_split_3x6_2(
KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_G , KC_J , KC_L , KC_U , KC_Y , KC_BSPC , KC_BSPC,
KC_ENT , KC_A , KC_R , KC_S , KC_T , KC_D , KC_H , KC_N , KC_E , KC_I , KC_O , KC_QUOT,
KC_LSFT , LSFT_T(KC_Z) , TD(TD_MODS_X) , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMMA , RGUI_T(KC_DOT) , RSFT_T(KC_SLSH) , KC_RSFT,
KC_NO , KC_NO , KC_NO , KC_NO , TD(TD_MULTI) , LGUI_T(KC_SPC) , LT(1, KC_TAB) , LT(2, KC_ENT) , KC_NO , KC_NO , KC_NO , KC_NO
// ┌──────┬───────────┬───────────────┬──────┬──────────────┬─────────────┐ ┌────────────┬────────────┬──────┬───────────┬───────────┬──────┐
// │ tab │ q │ w │ f │ p │ g │ │ j │ l │ u │ y │ bspc │ bACK
// ├──────┼───────────┼───────────────┼──────┼──────────────┼─────────────┤ ├────────────┼────────────┼──────┼───────────┼───────────┼──────┤
// │ caps │ a │ r │ s │ t │ d │ │ h │ n │ e │ i │ o │ ent
// ├──────┼───────────┼───────────────┼──────┼──────────────┼─────────────┤ ├────────────┼────────────┼──────┼───────────┼───────────┼──────┤
// │ rsft │ RSFT_T(z) │ TD(TD_MODS_X) │ c │ v │ b │ │ k │ m │ , │ RGUI_T(.) │ RSFT_T(/) │ rsft │
// ├──────┼───────────┼───────────────┼──────┼──────────────┼─────────────┤ ├────────────┼────────────┼──────┼───────────┼───────────┼──────┤
// │ escrguiralt │ rctl │ TD(TD_MULTI) │ LGUI_T(spc) │ │ LT(1, tab) │ LT(2, ent) │ leftupdownrght
// └──────┴───────────┴───────────────┴──────┴──────────────┴─────────────┘ └────────────┴────────────┴──────┴───────────┴───────────┴──────┘
[0] = LAYOUT_ortho_4x12(
KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_G , KC_J , KC_L , KC_U , KC_Y , KC_BSPC , KC_BACK ,
KC_CAPS , KC_A , KC_R , KC_S , KC_T , KC_D , KC_H , KC_N , KC_E , KC_I , KC_O , KC_ENTER,
KC_RSFT , RSFT_T(KC_Z) , TD(TD_MODS_X) , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMMA , RGUI_T(KC_DOT) , RSFT_T(KC_SLSH) , KC_RSFT ,
KC_ESC , KC_RGUI , KC_RALT , KC_RCTL , TD(TD_MULTI) , LGUI_T(KC_SPC) , LT(1, KC_TAB) , LT(2, KC_ENT) , KC_LEFT , KC_UP , KC_DOWN , KC_RIGHT
),
// ┌─────┬───────────┬──────────────────┬─────┬─────┬─────┐ ┌─────┬──────┬──────┬──────────────┬───────────┬─────┐
@@ -42,47 +43,63 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ├─────┼───────────┼──────────────────┼─────┼─────┼─────┤ ├─────┼──────┼──────┼──────────────┼───────────┼─────┤
// │ │ { │ ( │ ) │ } │ | │ │ esc │ left │ up │ down │ rght │ │
// ├─────┼───────────┼──────────────────┼─────┼─────┼─────┤ ├─────┼──────┼──────┼──────────────┼───────────┼─────┤
// │ │ LSFT_T([) │ TD(TD_MODS_QUOT) │ " │ ] │ ; │ │ ~ │ vold │ mute │ RGUI_T(volu) │ RSFT_T(\) │ │
// │ │ RSFT_T([) │ TD(TD_MODS_QUOT) │ " │ ] │ ; │ │ ~ │ vold │ mute │ RGUI_T(volu) │ RSFT_T(\) │ │
// ├─────┼───────────┼──────────────────┼─────┼─────┼─────┤ ├─────┼──────┼──────┼──────────────┼───────────┼─────┤
// │ │ │ │ │ │ │ │ │ │ │ │ │ │
// └─────┴───────────┴──────────────────┴─────┴─────┴─────┘ └─────┴──────┴──────┴──────────────┴───────────┴─────┘
[1] = LAYOUT_split_3x6_2(
[1] = LAYOUT_ortho_4x12(
KC_TRNS , KC_UNDS , KC_MINS , KC_PLUS , KC_EQL , KC_COLN , KC_GRV , KC_MRWD , KC_MPLY , KC_MFFD , KC_DEL , KC_TRNS,
KC_TRNS , KC_LCBR , KC_LPRN , KC_RPRN , KC_RCBR , KC_PIPE , KC_ESC , KC_LEFT , KC_UP , KC_DOWN , KC_RGHT , KC_TRNS,
KC_TRNS , LSFT_T(KC_LBRC) , TD(TD_MODS_QUOT) , KC_DQUO , KC_RBRC , KC_SCLN , KC_TILDE , KC_VOLD , KC_MUTE , RGUI_T(KC_VOLU) , RSFT_T(KC_BSLS) , KC_TRNS,
KC_TRNS , RSFT_T(KC_LBRC) , TD(TD_MODS_QUOT) , KC_DQUO , KC_RBRC , KC_SCLN , KC_TILDE , KC_VOLD , KC_MUTE , RGUI_T(KC_VOLU) , RSFT_T(KC_BSLS) , KC_TRNS,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
),
// ┌─────┬──────┬─────┬─────┬─────┬───────┐ ┌─────┬─────┬─────┬──────┬───────────┬─────┐
// │ │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ caps │ bspc │ │
// ├─────┼──────┼─────┼─────┼─────┼───────┤ ├─────┼─────┼─────┼──────┼───────────┼─────┤
// │ │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ │
// ├─────┼──────┼─────┼─────┼─────┼───────┤ ├─────┼─────┼─────┼──────┼───────────┼─────┤
// │ │ lsft │ no │ no │ MO(3) │ │ no │ no │ , │ │ RSFT_T(/) │ │
// ├─────┼──────┼─────┼─────┼─────┼───────┤ ├─────┼─────┼─────┼──────┼───────────┼─────┤
// │ │ │ │ │ │ │ │ │ │ │ │ │ │
// └─────┴──────┴─────┴─────┴─────┴───────┘ └─────┴─────┴─────┴──────┴───────────┴─────┘
[2] = LAYOUT_split_3x6_2(
KC_TRNS , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , KC_CIRC , KC_AMPR , KC_ASTR , KC_CAPS , KC_BSPC , KC_TRNS,
// ┌─────┬──────┬─────┬───────┬─────┬───────┐ ┌─────┬─────┬─────┬──────┬───────────┬─────┐
// │ │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ caps │ bACK │ │
// ├─────┼──────┼─────┼───────┼─────┼───────┤ ├─────┼─────┼─────┼──────┼───────────┼─────┤
// │ │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ │
// ├─────┼──────┼─────┼───────┼─────┼───────┤ ├─────┼─────┼─────┼──────┼───────────┼─────┤
// │ │ rsft │ noMO(4) │ no │ MO(3) │ │ no │ no │ , │ . │ RSFT_T(/) │ │
// ├─────┼──────┼─────┼───────┼─────┼───────┤ ├─────┼─────┼─────┼──────┼───────────┼─────┤
// │ │ │ │ │ │ │ │ │ │ │ │ │ │
// └─────┴──────┴─────┴───────┴─────┴───────┘ └─────┴─────┴─────┴──────┴───────────┴─────┘
[2] = LAYOUT_ortho_4x12(
KC_TRNS , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , KC_CIRC , KC_AMPR , KC_ASTR , KC_CAPS , KC_BACK , KC_TRNS,
KC_TRNS , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_TRNS,
KC_TRNS , KC_LSFT , KC_TRNS , KC_NO , KC_NO , MO(3) , KC_NO , KC_NO , KC_COMMA , KC_TRNS , RSFT_T(KC_SLSH) , KC_TRNS,
KC_TRNS , KC_RSFT , KC_NO , MO(4) , KC_NO , MO(3) , KC_NO , KC_NO , KC_COMMA , KC_DOT , RSFT_T(KC_SLSH) , KC_TRNS,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
),
// ┌─────┬─────────────┬────────────┬─────┬───────────┬─────┐ ┌──────────────────┬───────────────────────┬───────────────────────────┬─────────────┬───────────┬─────┐
// │ │ LAYOUT_SWAP │ MODE_CHECK │ no │ no │ no │ │ no │ no │ no │ GAME_TOGGLE │ OS_TOGGLE │ │
// ├─────┼─────────────┼────────────┼─────┼───────────┼─────┤ ├──────────────────┼───────────────────────┼───────────────────────────┼─────────────┼───────────┼─────┤
// │ │ f1 │ f2 │ f3 │ f4 │ f5 │ │ f6 │ f7 │ f8 │ f9 │ f10 │ │
// ├─────┼─────────────┼────────────┼─────┼───────────┼─────┤ ├──────────────────┼───────────────────────┼───────────────────────────┼─────────────┼───────────┼─────┤
// │ │ f11 │ no │ HARD_BOOT │ no │ │ QK_HAPTIC_TOGGLE │ QK_HAPTIC_BUZZ_TOGGLE │ QK_HAPTIC_FEEDBACK_TOGGLE │ f12 │ │
// ├─────┼─────────────┼────────────┼─────┼───────────┼─────┤ ├──────────────────┼───────────────────────┼───────────────────────────┼─────────────┼───────────┼─────┤
// │ │ │ │ │ │ │ │ │ │ │ │ │ │
// └─────┴─────────────┴────────────┴─────┴───────────┴─────┘ └──────────────────┴───────────────────────┴───────────────────────────┴─────────────┴───────────┴─────┘
[3] = LAYOUT_split_3x6_2(
KC_TRNS , LAYOUT_SWAP , MODE_CHECK , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , GAME_TOGGLE , OS_TOGGLE , KC_TRNS,
KC_TRNS , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_TRNS,
KC_TRNS , KC_F11 , KC_TRNS , KC_NO , HARD_BOOT , KC_NO , QK_HAPTIC_TOGGLE , QK_HAPTIC_BUZZ_TOGGLE , QK_HAPTIC_FEEDBACK_TOGGLE , KC_TRNS , KC_F12 , KC_TRNS,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
// ┌─────┬─────────────┬────────────┬─────┬───────────┬─────┐ ┌─────┬─────┬─────┬─────────────┬─────────────┬─────┐
// │ │ LAYOUT_SWAP │ MODE_CHECK │ no │ no │ no │ │ no │ no │ no │ GAME_TOGGLE │ OS_TOGGLE │ │
// ├─────┼─────────────┼────────────┼─────┼───────────┼─────┤ ├─────┼─────┼─────┼─────────────┼─────────────┼─────┤
// │ │ f1 │ f2 │ f3 │ f4 │ f5 │ │ f6 │ f7 │ f8 │ f9 │ f10 │ │
// ├─────┼─────────────┼────────────┼─────┼───────────┼─────┤ ├─────┼─────┼─────┼─────────────┼─────────────┼─────┤
// │ │ RSFT_T(f11)no │ no │ HARD_BOOT │ no │ │ no │ no │ no noRSFT_T(f12) │ │
// ├─────┼─────────────┼────────────┼─────┼───────────┼─────┤ ├─────┼─────┼─────┼─────────────┼─────────────┼─────┤
// │ │ │ │ │ │ │ │ │ │ │ │ │ │
// └─────┴─────────────┴────────────┴─────┴───────────┴─────┘ └─────┴─────┴─────┴─────────────┴─────────────┴─────┘
[3] = LAYOUT_ortho_4x12(
KC_TRNS , LAYOUT_SWAP , MODE_CHECK , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , GAME_TOGGLE , OS_TOGGLE , KC_TRNS,
KC_TRNS , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_TRNS,
KC_TRNS , RSFT_T(KC_F11) , KC_NO , KC_NO , HARD_BOOT , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , RSFT_T(KC_F12) , KC_TRNS,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
),
// ┌─────┬──────┬─────┬─────┬─────┬─────┐ ┌─────────┬────────────┬─────────┬─────────┬────────────┬─────┐
// │ │ no │ no │ no │ no │ no │ │ no │ RGUI(left) │ no │ no │ RGUI(rght) │ │
// ├─────┼──────┼─────┼─────┼─────┼─────┤ ├─────────┼────────────┼─────────┼─────────┼────────────┼─────┤
// │ │ no │ no │ no │ no │ no │ │ no │ MS_LEFT │ MS_UP │ MS_DOWN │ MS_RGHT │ │
// ├─────┼──────┼─────┼─────┼─────┼─────┤ ├─────────┼────────────┼─────────┼─────────┼────────────┼─────┤
// │ │ rsft │ no │ no │ no │ no │ │ no │ MS_WHLL │ MS_WHLU │ MS_WHLD │ MS_WHLR │ │
// ├─────┼──────┼─────┼─────┼─────┼─────┤ ├─────────┼────────────┼─────────┼─────────┼────────────┼─────┤
// │ │ │ │ │ │ │ │ MS_BTN1 │ MS_BTN2 │ │ │ │ │
// └─────┴──────┴─────┴─────┴─────┴─────┘ └─────────┴────────────┴─────────┴─────────┴────────────┴─────┘
[4] = LAYOUT_ortho_4x12(
KC_TRNS , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , RGUI(KC_LEFT) , KC_NO , KC_NO , RGUI(KC_RIGHT) , KC_TRNS,
KC_TRNS , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , MS_LEFT , MS_UP , MS_DOWN , MS_RGHT , KC_TRNS,
KC_TRNS , KC_RSFT , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , MS_WHLL , MS_WHLU , MS_WHLD , MS_WHLR , KC_TRNS,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , MS_BTN1 , MS_BTN2 , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
)
};
// clang-format on
+14 -2
View File
@@ -79,7 +79,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (user_config.is_game_mode) {
switch (keycode) {
case LSFT_T(KC_Z):
case RSFT_T(KC_Z):
remapped_keycode = KC_Z;
break;
case RSFT_T(KC_SLSH):
@@ -126,7 +126,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
layer_move(0);
return false;
case TO_CODE:
layer_move(1);
layer_move(get_highest_layer(layer_state) == 1 ? 0 : 1);
return false;
case TO_NUMBER:
layer_move(get_highest_layer(layer_state) == 2 ? 0 : 2);
return false;
case TO_FUNCTION:
layer_move(get_highest_layer(layer_state) == 3 ? 0 : 3);
return false;
case TO_MOUSE:
layer_move(get_highest_layer(layer_state) == 4 ? 0 : 4);
return false;
case OS_TOGGLE:
user_config.is_windows = !user_config.is_windows;
@@ -145,6 +154,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
eeconfig_init_user();
reset_keyboard();
return false;
case KC_BACK:
tap_code(KC_BSPC);
return false;
}
}
+20 -1
View File
@@ -17,9 +17,12 @@ enum custom_keycodes {
MODE_CHECK,
LAYOUT_SWAP,
HARD_BOOT,
TO_DEFAULT,
TO_CODE,
TO_NUMBER,
TO_DEFAULT
TO_FUNCTION,
TO_MOUSE,
KC_BACK
};
enum tap_dance_keycodes {
@@ -27,3 +30,19 @@ enum tap_dance_keycodes {
TD_MODS_QUOT,
TD_MULTI,
};
enum combos {
TAB_COMBO,
ENTER_COMBO,
SPACE_COMBO,
MIDDLE_CLICK_COMBO,
WHEEL_UP_COMBO,
WHEEL_DOWN_COMBO,
WHEEL_LEFT_COMBO,
WHEEL_RIGHT_COMBO,
DEFAULT_COMBO,
CODE_COMBO,
NUMBER_COMBO,
FUNCTION_COMBO,
MOUSE_COMBO
};
+45
View File
@@ -0,0 +1,45 @@
#include QMK_KEYBOARD_H
#include "keys.h"
#define SCALE(x) ((x * RGB_BRIGHTNESS) / 255)
void housekeeping_task_user(void) {
uint8_t layer = get_highest_layer(layer_state | default_layer_state);
static bool init = false;
if (!init) {
gpio_set_pin_output(GP25);
gpio_write_pin_low(GP25);
init = true;
}
// Caps lock LED
gpio_write_pin(GP25, host_keyboard_led_state().caps_lock);
// Layer colors
switch (layer) {
case 1:
rgblight_setrgb(SCALE(255), SCALE(255), 0); // Yellow
return;
case 2:
rgblight_setrgb(0, 0, SCALE(255)); // Blue
return;
case 3:
rgblight_setrgb(SCALE(255), SCALE(64), 0); // Orange
return;
case 4:
rgblight_setrgb(SCALE(128), 0, SCALE(255)); // Purple
return;
}
if (user_config.is_game_mode) {
rgblight_setrgb(SCALE(255), 0, 0); // Red
} else if (user_config.is_windows) {
rgblight_setrgb(0, SCALE(255), 0); // Green
} else {
rgblight_setrgb(SCALE(255), SCALE(255), SCALE(255)); // White
}
}
+14 -17
View File
@@ -20,23 +20,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Define options
#define TAPPING_TERM 135
#define PERMISSIVE_HOLD
#define IGNORE_MOD_TAP_INTERRUPT
#define RGB_BRIGHTNESS 8
#define COMBO_TERM 20
#define COMBO_ONLY_FROM_LAYER 0
#define COMBO_SHOULD_TRIGGER
// Vial
#define VIAL_KEYBOARD_UID {0x8A, 0x72, 0x89, 0xE0, 0xE3, 0xAD, 0x7A, 0x6E}
#define VIAL_UNLOCK_COMBO_ROWS { 3, 3 }
#define VIAL_UNLOCK_COMBO_COLS { 4, 5 }
#define VIAL_KEYBOARD_UID {0x62, 0x11, 0x1A, 0xB9, 0x84, 0x37, 0x7A, 0xF4}
#define VIAL_UNLOCK_COMBO_ROWS {3, 3}
#define VIAL_UNLOCK_COMBO_COLS {0, 11}
#define DYNAMIC_KEYMAP_LAYER_COUNT 5
// RGB
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_TWINKLE
#define RGBLIGHT_LIMIT_VAL 64
#define RGB_DI_PIN 23
// Mouse keys
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_INTERVAL 16
#define MOUSEKEY_WHEEL_DELAY 0
#define MOUSEKEY_MAX_SPEED 7
#define MOUSEKEY_TIME_TO_MAX 40
+85 -42
View File
@@ -1,45 +1,88 @@
/*
Copyright 2023 Joe Scotto
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "keys.c"
#include "keys.h"
#include "rgb.c"
#include QMK_KEYBOARD_H
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_split_3x5_2(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC,
LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH),
KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
),
[1] = LAYOUT_split_3x5_2(
KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL,
KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT_split_3x5_2(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC,
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT_split_3x5_2(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
// ┌──────┬───────────┬──────┬──────┬──────┬─────────────┐ ┌────────────┬────────────┬──────┬───────────┬───────────┬──────┐
// │ tab │ q │ w │ f │ p │ g │ │ j │ l │ u │ y │ bspc │ bACK │
// ├──────┼───────────┼──────┼──────┼──────┼─────────────┤ ├────────────┼────────────┼──────┼───────────┼───────────┼──────┤
// │ caps │ a │ r │ s │ t │ d │ │ h │ n │ e │ i │ o │ ent │
// ├──────┼───────────┼──────┼──────┼──────┼─────────────┤ ├────────────┼────────────┼──────┼───────────┼───────────┼──────┤
// │ rsft │ RSFT_T(z) │ x │ c │ v │ b │ │ k │ m │ , │ RGUI_T(.) │ RSFT_T(/) │ rsft │
// ├──────┼───────────┼──────┼──────┼──────┼─────────────┤ ├────────────┼────────────┼──────┼───────────┼───────────┼──────┤
// │ esc │ rgui │ ralt │ rctl │ lalt │ LGUI_T(spc) │ │ LT(1, tab) │ LT(2, ent) │ left │ up │ down │ rght │
// └──────┴───────────┴──────┴──────┴──────┴─────────────┘ └────────────┴────────────┴──────┴───────────┴───────────┴──────┘
[0] = LAYOUT_ortho_4x12(
KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_G , KC_J , KC_L , KC_U , KC_Y , KC_BSPC , KC_BACK ,
KC_CAPS , KC_A , KC_R , KC_S , KC_T , KC_D , KC_H , KC_N , KC_E , KC_I , KC_O , KC_ENTER,
KC_RSFT , RSFT_T(KC_Z) , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMMA , RGUI_T(KC_DOT) , RSFT_T(KC_SLSH) , KC_RSFT ,
KC_ESC , KC_RGUI , KC_RALT , KC_RCTL , KC_LALT , LGUI_T(KC_SPC) , LT(1, KC_TAB) , LT(2, KC_ENT) , KC_LEFT , KC_UP , KC_DOWN , KC_RIGHT
),
// ┌─────┬───────────┬─────┬─────┬─────┬─────┐ ┌─────┬──────┬──────┬──────────────┬───────────┬─────┐
// │ │ _ │ - │ + │ = │ : │ │ ` │ mrwd │ mply │ mffd │ del │ │
// ├─────┼───────────┼─────┼─────┼─────┼─────┤ ├─────┼──────┼──────┼──────────────┼───────────┼─────┤
// │ │ { │ ( │ ) │ } │ | │ │ esc │ left │ up │ down │ rght │ │
// ├─────┼───────────┼─────┼─────┼─────┼─────┤ ├─────┼──────┼──────┼──────────────┼───────────┼─────┤
// │ │ RSFT_T([) │ ' │ " │ ] │ ; │ │ ~ │ vold │ mute │ RGUI_T(volu) │ RSFT_T(\) │ │
// ├─────┼───────────┼─────┼─────┼─────┼─────┤ ├─────┼──────┼──────┼──────────────┼───────────┼─────┤
// │ │ │ │ │ │ │ │ │ │ │ │ │ │
// └─────┴───────────┴─────┴─────┴─────┴─────┘ └─────┴──────┴──────┴──────────────┴───────────┴─────┘
[1] = LAYOUT_ortho_4x12(
KC_TRNS , KC_UNDS , KC_MINS , KC_PLUS , KC_EQL , KC_COLN , KC_GRV , KC_MRWD , KC_MPLY , KC_MFFD , KC_DEL , KC_TRNS,
KC_TRNS , KC_LCBR , KC_LPRN , KC_RPRN , KC_RCBR , KC_PIPE , KC_ESC , KC_LEFT , KC_UP , KC_DOWN , KC_RGHT , KC_TRNS,
KC_TRNS , RSFT_T(KC_LBRC) , KC_QUOT , KC_DQUO , KC_RBRC , KC_SCLN , KC_TILDE , KC_VOLD , KC_MUTE , RGUI_T(KC_VOLU) , RSFT_T(KC_BSLS) , KC_TRNS,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
),
// ┌─────┬──────┬─────┬───────┬─────┬───────┐ ┌─────┬─────┬─────┬──────┬───────────┬─────┐
// │ │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ caps │ bACK │ │
// ├─────┼──────┼─────┼───────┼─────┼───────┤ ├─────┼─────┼─────┼──────┼───────────┼─────┤
// │ │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ │
// ├─────┼──────┼─────┼───────┼─────┼───────┤ ├─────┼─────┼─────┼──────┼───────────┼─────┤
// │ │ rsft │ no │ MO(4) │ no │ MO(3) │ │ no │ no │ , │ . │ RSFT_T(/) │ │
// ├─────┼──────┼─────┼───────┼─────┼───────┤ ├─────┼─────┼─────┼──────┼───────────┼─────┤
// │ │ │ │ │ │ │ │ │ │ │ │ │ │
// └─────┴──────┴─────┴───────┴─────┴───────┘ └─────┴─────┴─────┴──────┴───────────┴─────┘
[2] = LAYOUT_ortho_4x12(
KC_TRNS , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , KC_CIRC , KC_AMPR , KC_ASTR , KC_CAPS , KC_BACK , KC_TRNS,
KC_TRNS , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_TRNS,
KC_TRNS , KC_RSFT , KC_NO , MO(4) , KC_NO , MO(3) , KC_NO , KC_NO , KC_COMMA , KC_DOT , RSFT_T(KC_SLSH) , KC_TRNS,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
),
// ┌─────┬─────────────┬────────────┬─────┬───────────┬─────┐ ┌─────┬─────┬─────┬─────────────┬─────────────┬─────┐
// │ │ LAYOUT_SWAP │ MODE_CHECK │ no │ no │ no │ │ no │ no │ no │ GAME_TOGGLE │ OS_TOGGLE │ │
// ├─────┼─────────────┼────────────┼─────┼───────────┼─────┤ ├─────┼─────┼─────┼─────────────┼─────────────┼─────┤
// │ │ f1 │ f2 │ f3 │ f4 │ f5 │ │ f6 │ f7 │ f8 │ f9 │ f10 │ │
// ├─────┼─────────────┼────────────┼─────┼───────────┼─────┤ ├─────┼─────┼─────┼─────────────┼─────────────┼─────┤
// │ │ RSFT_T(f11) │ no │ no │ HARD_BOOT │ no │ │ no │ no │ no │ no │ RSFT_T(f12) │ │
// ├─────┼─────────────┼────────────┼─────┼───────────┼─────┤ ├─────┼─────┼─────┼─────────────┼─────────────┼─────┤
// │ │ │ │ │ │ │ │ │ │ │ │ │ │
// └─────┴─────────────┴────────────┴─────┴───────────┴─────┘ └─────┴─────┴─────┴─────────────┴─────────────┴─────┘
[3] = LAYOUT_ortho_4x12(
KC_TRNS , LAYOUT_SWAP , MODE_CHECK , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , GAME_TOGGLE , OS_TOGGLE , KC_TRNS,
KC_TRNS , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_TRNS,
KC_TRNS , RSFT_T(KC_F11) , KC_NO , KC_NO , HARD_BOOT , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , RSFT_T(KC_F12) , KC_TRNS,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
),
// ┌─────┬──────┬─────┬─────┬─────┬─────┐ ┌─────────┬────────────┬─────────┬─────────┬────────────┬─────┐
// │ │ no │ no │ no │ no │ no │ │ no │ RGUI(left) │ no │ no │ RGUI(rght) │ │
// ├─────┼──────┼─────┼─────┼─────┼─────┤ ├─────────┼────────────┼─────────┼─────────┼────────────┼─────┤
// │ │ no │ no │ no │ no │ no │ │ no │ MS_LEFT │ MS_UP │ MS_DOWN │ MS_RGHT │ │
// ├─────┼──────┼─────┼─────┼─────┼─────┤ ├─────────┼────────────┼─────────┼─────────┼────────────┼─────┤
// │ │ rsft │ no │ no │ no │ no │ │ no │ MS_WHLL │ MS_WHLU │ MS_WHLD │ MS_WHLR │ │
// ├─────┼──────┼─────┼─────┼─────┼─────┤ ├─────────┼────────────┼─────────┼─────────┼────────────┼─────┤
// │ │ │ │ │ │ │ │ MS_BTN1 │ MS_BTN2 │ │ │ │ │
// └─────┴──────┴─────┴─────┴─────┴─────┘ └─────────┴────────────┴─────────┴─────────┴────────────┴─────┘
[4] = LAYOUT_ortho_4x12(
KC_TRNS , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , RGUI(KC_LEFT) , KC_NO , KC_NO , RGUI(KC_RIGHT) , KC_TRNS,
KC_TRNS , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , MS_LEFT , MS_UP , MS_DOWN , MS_RGHT , KC_TRNS,
KC_TRNS , KC_RSFT , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , MS_WHLL , MS_WHLU , MS_WHLD , MS_WHLR , KC_TRNS,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , MS_BTN1 , MS_BTN2 , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS
)
};
// clang-format on
+164
View File
@@ -0,0 +1,164 @@
#include "keys.h"
#include QMK_KEYBOARD_H
// Mode check
char mode_string[32];
char *os;
char *mode;
char *layout;
void eeconfig_init_user(void) {
user_config.raw = 0;
eeconfig_update_user(user_config.raw);
}
void keyboard_post_init_user(void) {
user_config.raw = eeconfig_read_user();
keymap_config.swap_lctl_lgui = user_config.is_windows;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
uint16_t remapped_keycode = KC_NO;
if (user_config.is_qwerty) {
switch (keycode) {
// Top row
case KC_F:
remapped_keycode = KC_E;
break;
case KC_P:
remapped_keycode = KC_R;
break;
case KC_G:
remapped_keycode = KC_T;
break;
case KC_J:
remapped_keycode = KC_Y;
break;
case KC_L:
remapped_keycode = KC_U;
break;
case KC_U:
remapped_keycode = KC_I;
break;
case KC_Y:
remapped_keycode = KC_O;
break;
case KC_BSPC:
remapped_keycode = KC_P;
break;
case KC_R:
remapped_keycode = KC_S;
break;
case KC_S:
remapped_keycode = KC_D;
break;
case KC_T:
remapped_keycode = KC_F;
break;
case KC_D:
remapped_keycode = KC_G;
break;
case KC_N:
remapped_keycode = KC_J;
break;
case KC_E:
remapped_keycode = KC_K;
break;
case KC_I:
remapped_keycode = KC_L;
break;
case KC_O:
remapped_keycode = KC_BSPC;
break;
case KC_K:
remapped_keycode = KC_N;
break;
}
}
if (user_config.is_game_mode) {
switch (keycode) {
case RSFT_T(KC_Z):
remapped_keycode = KC_Z;
break;
case RSFT_T(KC_SLSH):
remapped_keycode = KC_SLSH;
break;
case TD(TD_MODS_X):
remapped_keycode = KC_X;
break;
case RGUI_T(KC_DOT):
remapped_keycode = KC_DOT;
break;
case TD(TD_MULTI):
remapped_keycode = KC_LCTL;
break;
case LGUI_T(KC_SPC):
remapped_keycode = KC_SPC;
break;
}
}
if (remapped_keycode != KC_NO) {
record->event.pressed ? register_code(remapped_keycode) : unregister_code(remapped_keycode);
return false;
}
if (keycode == MODE_CHECK) {
os = user_config.is_windows ? "Windows" : "Mac";
mode = user_config.is_game_mode ? " (Game)" : "";
layout = user_config.is_qwerty ? " (QWERTY)" : " (Colemak)";
sprintf(mode_string, "Mode: %s%s%s", os, mode, layout);
if (record->event.pressed) {
send_string(mode_string);
} else {
for (size_t i = 0; i < strlen(mode_string); i++)
tap_code16(KC_BSPC);
}
return false;
}
if (!record->event.pressed) {
switch (keycode) {
case TO_DEFAULT:
layer_move(0);
return false;
case TO_CODE:
layer_move(get_highest_layer(layer_state) == 1 ? 0 : 1);
return false;
case TO_NUMBER:
layer_move(get_highest_layer(layer_state) == 2 ? 0 : 2);
return false;
case TO_FUNCTION:
layer_move(get_highest_layer(layer_state) == 3 ? 0 : 3);
return false;
case TO_MOUSE:
layer_move(get_highest_layer(layer_state) == 4 ? 0 : 4);
return false;
case OS_TOGGLE:
user_config.is_windows = !user_config.is_windows;
keymap_config.swap_lctl_lgui = user_config.is_windows ? true : false;
eeconfig_update_user(user_config.raw);
return false;
case GAME_TOGGLE:
user_config.is_game_mode = !user_config.is_game_mode;
eeconfig_update_user(user_config.raw);
return false;
case LAYOUT_SWAP:
user_config.is_qwerty = !user_config.is_qwerty;
eeconfig_update_user(user_config.raw);
return false;
case HARD_BOOT:
eeconfig_init_user();
reset_keyboard();
return false;
case KC_BACK:
tap_code(KC_BSPC);
return false;
}
}
return true;
}
+48
View File
@@ -0,0 +1,48 @@
#pragma once
#include QMK_KEYBOARD_H
typedef union {
uint32_t raw;
struct {
bool is_windows;
bool is_game_mode;
bool is_qwerty;
};
} user_config_t;
user_config_t user_config;
enum custom_keycodes {
OS_TOGGLE = SAFE_RANGE,
GAME_TOGGLE,
MODE_CHECK,
LAYOUT_SWAP,
HARD_BOOT,
TO_DEFAULT,
TO_CODE,
TO_NUMBER,
TO_FUNCTION,
TO_MOUSE,
KC_BACK
};
enum tap_dance_keycodes {
TD_MODS_X,
TD_MODS_QUOT,
TD_MULTI,
};
enum combos {
TAB_COMBO,
ENTER_COMBO,
SPACE_COMBO,
MIDDLE_CLICK_COMBO,
WHEEL_UP_COMBO,
WHEEL_DOWN_COMBO,
WHEEL_LEFT_COMBO,
WHEEL_RIGHT_COMBO,
DEFAULT_COMBO,
CODE_COMBO,
NUMBER_COMBO,
FUNCTION_COMBO,
MOUSE_COMBO
};
+45
View File
@@ -0,0 +1,45 @@
#include QMK_KEYBOARD_H
#include "keys.h"
#define SCALE(x) ((x * RGB_BRIGHTNESS) / 255)
void housekeeping_task_user(void) {
uint8_t layer = get_highest_layer(layer_state | default_layer_state);
static bool init = false;
if (!init) {
gpio_set_pin_output(GP25);
gpio_write_pin_low(GP25);
init = true;
}
// Caps lock LED
gpio_write_pin(GP25, host_keyboard_led_state().caps_lock);
// Layer colors
switch (layer) {
case 1:
rgblight_setrgb(SCALE(255), SCALE(255), 0); // Yellow
return;
case 2:
rgblight_setrgb(0, 0, SCALE(255)); // Blue
return;
case 3:
rgblight_setrgb(SCALE(255), SCALE(64), 0); // Orange
return;
case 4:
rgblight_setrgb(SCALE(128), 0, SCALE(255)); // Purple
return;
}
if (user_config.is_game_mode) {
rgblight_setrgb(SCALE(255), 0, 0); // Red
} else if (user_config.is_windows) {
rgblight_setrgb(0, SCALE(255), 0); // Green
} else {
rgblight_setrgb(SCALE(255), SCALE(255), SCALE(255)); // White
}
}
+1 -1
View File
@@ -1,3 +1,3 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
WS2812_DRIVER = vendor
WS2812_DRIVER = vendor
+64 -49
View File
@@ -1,51 +1,66 @@
{
"lighting": "qmk_rgblight",
"matrix": {
"rows": 4,
"cols": 10
},
"layouts": {
"keymap": [
[
"0,0",
"0,1",
"0,2",
"0,3",
"0,4",
{ "x": 2 },
"0,5",
"0,6",
"0,7",
"0,8",
"0,9"
],
[
"1,0",
"1,1",
"1,2",
"1,3",
"1,4",
{ "x": 2 },
"1,5",
"1,6",
"1,7",
"1,8",
"1,9"
],
[
"2,0",
"2,1",
"2,2",
"2,3",
"2,4",
{ "x": 2 },
"2,5",
"2,6",
"2,7",
"2,8",
"2,9"
],
[{ "x": 3 }, "3,3", "3,4", { "x": 2 }, "3,5", "3,6"]
]
}
"matrix": {
"rows": 4,
"cols": 12
},
"layouts": {
"keymap": [
[
"0,0",
"0,1",
"0,2",
"0,3",
"0,4",
"0,5",
"0,6",
"0,7",
"0,8",
"0,9",
"0,10",
"0,11"
],
[
"1,0",
"1,1",
"1,2",
"1,3",
"1,4",
"1,5",
"1,6",
"1,7",
"1,8",
"1,9",
"1,10",
"1,11"
],
[
"2,0",
"2,1",
"2,2",
"2,3",
"2,4",
"2,5",
"2,6",
"2,7",
"2,8",
"2,9",
"2,10",
"2,11"
],
[
"3,0",
"3,1",
"3,2",
"3,3",
"3,4",
"3,5",
"3,6",
"3,7",
"3,8",
"3,9",
"3,10",
"3,11"
]
]
}
}