diff --git a/flake.lock b/flake.lock index b674c9e..91aa6cf 100644 --- a/flake.lock +++ b/flake.lock @@ -246,11 +246,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1725761443, - "narHash": "sha256-RX3qnLYaFxlvOAYL6WsM5nGjNnMZQIgKIpIxigPmiAU=", + "lastModified": 1727658705, + "narHash": "sha256-OEoMO7bvKyRFyoAR4DIGoWWEJ1OlWveUAICRHhWasTs=", "owner": "Mic92", "repo": "buildbot-nix", - "rev": "ade5f42d7e56c8298d729aa0e804c8062e7a77ac", + "rev": "d2dd93e4d12be7a05ef7640c7375c58739263d8d", "type": "github" }, "original": { @@ -410,11 +410,11 @@ ] }, "locked": { - "lastModified": 1725234343, - "narHash": "sha256-+ebgonl3NbiKD2UD0x4BszCZQ6sTfL4xioaM49o5B3Y=", + "lastModified": 1726153070, + "narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "567b938d64d4b4112ee253b9274472dc3a346eb6", + "rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a", "type": "github" }, "original": { @@ -1077,11 +1077,11 @@ }, "nixpkgs-unstable_2": { "locked": { - "lastModified": 1727809170, - "narHash": "sha256-VxZqTR6OSK2K8iMyxl85DWG0rnJWQQgMoMuDmTxCa2I=", + "lastModified": 1730039421, + "narHash": "sha256-XSK5b6NHcNXlt7Lv2fghSzBHI5rmv/CTZOm3yrSM/+Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c998d65c768cc65a006ecd1a1cb193b66fc88ad3", + "rev": "79c36a6798b500f47dcea460ce898ebe524f49f4", "type": "github" }, "original": { @@ -1215,11 +1215,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1727672256, - "narHash": "sha256-9/79hjQc9+xyH+QxeMcRsA6hDyw6Z9Eo1/oxjvwirLk=", + "lastModified": 1729973466, + "narHash": "sha256-knnVBGfTCZlQgxY1SgH0vn2OyehH9ykfF8geZgS95bk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1719f27dd95fd4206afb9cec9f415b539978827e", + "rev": "cd3e8833d70618c4eea8df06f95b364b016d4950", "type": "github" }, "original": { @@ -1231,11 +1231,11 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1725634671, - "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", + "lastModified": 1727802920, + "narHash": "sha256-HP89HZOT0ReIbI7IJZJQoJgxvB2Tn28V6XS3MNKnfLs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", + "rev": "27e30d177e57d912d614c88c622dcfdb2e6e6515", "type": "github" }, "original": { @@ -1358,11 +1358,11 @@ }, "nur_2": { "locked": { - "lastModified": 1727808630, - "narHash": "sha256-kY2COV32KqzauYHnmzMT6MRf1zV2YJFuZY0PTTsI8UY=", + "lastModified": 1730034236, + "narHash": "sha256-wbx0m55mucFcmJBGyJZ0GmW0H5QOV6cB4ZiBuUD5LnA=", "owner": "nix-community", "repo": "NUR", - "rev": "c4f890b65647f729b180a554f71e773c255ec1e4", + "rev": "b801cebe7a16a554e6b09919588ecaac023c2dfa", "type": "github" }, "original": { @@ -1532,11 +1532,11 @@ ] }, "locked": { - "lastModified": 1727749966, - "narHash": "sha256-DUS8ehzqB1DQzfZ4bRXVSollJhu+y7cvh1DJ9mbWebE=", + "lastModified": 1729996302, + "narHash": "sha256-QEU1NQq1+7s1na69Chig9K0iDDTKN0O4Zreo9A9rccA=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "00decf1b4f9886d25030b9ee4aed7bfddccb5f66", + "rev": "a1b337569f334ff0a01b57627f17b201d746d24c", "type": "github" }, "original": { @@ -1610,11 +1610,11 @@ "nixpkgs": "nixpkgs_9" }, "locked": { - "lastModified": 1727278138, - "narHash": "sha256-RvwuIt4mGaSomnmC3/MXAJhWeZ2dj/FV4kncwSVPrq0=", + "lastModified": 1728927830, + "narHash": "sha256-FTN+sYTvdQ/BI4cl13DuOozHQY3XTybPxE314Z8/Zn8=", "owner": "krebs", "repo": "stockholm", - "rev": "ceccc167d2d0e6c535b769e80254d86381f5c7de", + "rev": "9af8bb1b1e29af42a4a3a992bbaff47109490762", "type": "github" }, "original": { @@ -1851,11 +1851,11 @@ ] }, "locked": { - "lastModified": 1725271838, - "narHash": "sha256-VcqxWT0O/gMaeWTTjf1r4MOyG49NaNxW4GHTO3xuThE=", + "lastModified": 1727431250, + "narHash": "sha256-uGRlRT47ecicF9iLD1G3g43jn2e+b5KaMptb59LHnvM=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "9fb342d14b69aefdf46187f6bb80a4a0d97007cd", + "rev": "879b29ae9a0378904fbbefe0dadaed43c8905754", "type": "github" }, "original": { @@ -1883,11 +1883,11 @@ "voidrice_2": { "flake": false, "locked": { - "lastModified": 1721065602, - "narHash": "sha256-fL95gTBGpn36IuImoIA5wr4zOGhAQktkkwXzImZ2/10=", + "lastModified": 1729622861, + "narHash": "sha256-7J2RlIzJ9BTL6+tqrYDXC16j3HLWklA5CPgVuw4e8nU=", "owner": "Lukesmithxyz", "repo": "voidrice", - "rev": "628ed4dc995f3c09e33c24a01c817c18b1a268af", + "rev": "c43f390f07098c42db5efce654b07870951b512a", "type": "github" }, "original": { diff --git a/lib/keyboards/farsi b/lib/keyboards/farsi new file mode 100644 index 0000000..39f3d7b --- /dev/null +++ b/lib/keyboards/farsi @@ -0,0 +1,114 @@ +// https://github.com/gpuminingir/Farsi-Phonetic-Keyboard-Linux +// by @gpuminingir + +partial alphanumeric_keys +xkb_symbols "qwerty" { + // Classic Finnish keyboard layout without dead keys and {[]} on asdf + AltG + name[Group1]="Persian (QWERTY)"; + include "ir(pesq_part_basic)" + include "ir(pesq_part_ext)" + include "ir(pesq_part_keypad)" + include "nbsp(zwnj2nb3nnb4)" + include "level3(ralt_switch)" +}; + +hidden partial alphanumeric_keys +xkb_symbols "pesq_part_basic" { + // Persian digits + key { [ Arabic_1, exclam, exclam ] }; // ١ ! ! + key { [ Arabic_2, at, at ] }; // ٢ @ @ + key { [ Arabic_3, numbersign, numbersign ] }; // ٣ # # + key { [ Farsi_4, dollar, dollar ] }; // ۴ $ $ + key { [ Farsi_5, percent, percent ] }; // ۵ % % + key { [ Farsi_6, asciicircum, asciicircum ] }; // ۶ ^ ^ + key { [ Arabic_7, ampersand, ampersand ] }; // ٧ & & + key { [ Arabic_8, KP_Multiply, KP_Multiply ] }; // ٨ * * + key { [ Arabic_9, Armenian_parenright, Armenian_parenright, Armenian_parenleft ] }; // ٩ ) ) ( + key { [ Farsi_0, Armenian_parenleft, Armenian_parenleft ] }; // ۰ ( ( + key { [ underbar, KP_Subtract, KP_Subtract ] }; // _ – – + key { [ KP_Equal, KP_Add, KP_Add ] }; // = + + + + // Persian letters and symbols + key { [ Arabic_qaf, Arabic_ghain ] }; // ق غ + key { [ Arabic_sheen ] }; // ش + key { [ Arabic_ain ] }; // ع + key { [ Arabic_ra ] }; // ر + key { [ Arabic_teh, Arabic_tah ] }; // ت ط + key { [ Farsi_yeh ] }; // ى + key { [ Arabic_waw ] }; // و + key { [ Farsi_yeh ] }; // ى + key { [ Arabic_waw ] }; // و + key { [ Arabic_peh ] }; // پ + key { [ bracketright, braceleft ] }; // ] } { + key { [ bracketleft, braceright ] }; // [ { } + + key { [ Arabic_alef, Arabic_maddaonalef, Arabic_maddaonalef ] }; // ا آ آ + key { [ Arabic_seen, Arabic_sad, Arabic_sheen, Arabic_sheen ] }; // س ص ش + key { [ Arabic_dal, Arabic_thal ] }; // د ذ ذ + key { [ Arabic_feh ] }; // ف + key { [ Arabic_gaf, Arabic_ghain ] }; // گ + key { [ Arabic_heh, Arabic_hah ] }; // ە ح ه + key { [ Arabic_jeem, Arabic_jeh ] }; // ج ژ ژ + key { [ Arabic_keheh ] }; // ک + key { [ Arabic_lam ] }; // ل + key { [ Arabic_semicolon, colon ] }; // ؛ : ։ + key { [ Arabic_comma, quotedbl, quotedbl ] }; // ، ” ” + + key { [ Arabic_zain, Arabic_dad, Arabic_zah, Arabic_zah ] }; // ض ض ز خ + key { [ Arabic_khah, Arabic_zah ] }; // ظ خ + key { [ Arabic_theh, Arabic_tcheh ] }; // چ ث + key { [ Arabic_hamza, Arabic_waw ] }; // و + key { [ Arabic_beh ] }; // ب + key { [ Arabic_noon ] }; // ن + key { [ Arabic_meem ] }; // م + key { [ Arabic_comma, rightcaret, leftcaret ] }; // , > < + key { [ period, leftcaret, rightcaret ] }; // . < > + key { [ slash, Arabic_question_mark, question ] }; // / ? + + key { [ minus, underscore ] }; + key { [ equal, plus, 0x1002212 ] }; + key { [ backslash, bar, 0x1002010 ] }; + key { [ U02DC, UFDFC, UFDF2 ] }; // ˜ ﷼ ﷲ +}; + +hidden partial alphanumeric_keys +xkb_symbols "pesq_part_ext" { + // Persian and ASCII digits + key { [ Farsi_1, exclam, grave, 1 ] }; + key { [ Farsi_2, 0x100066c, at, 2 ] }; + key { [ Farsi_3, 0x100066b, numbersign, 3 ] }; + key { [ Farsi_4, 0x100fdfc, dollar, 4 ] }; + key { [ Farsi_5, 0x100066a, percent, 5 ] }; + key { [ Farsi_6, multiply, asciicircum, 6 ] }; + key { [ Farsi_7, Arabic_comma, ampersand, 7 ] }; + key { [ Farsi_8, asterisk, enfilledcircbullet, 8 ] }; + key { [ Farsi_9, parenright, 0x100200e, 9 ] }; + key { [ Farsi_0, parenleft, 0x100200f, 0 ] }; +}; + +hidden partial alphanumeric_keys +xkb_symbols "pesq_part_keypad" { + // Persian digits and Mathematical operators + key { [ division, XF86_Ungrab ] }; + key { [ multiply, XF86_ClearGrab ] }; + key { [ 0x1002212, XF86_Prev_VMode ] }; + key { [ plus, XF86_Next_VMode ] }; + + key { [ KP_Enter ] }; + key { [ equal ] }; + + key { [ KP_Home, Farsi_7 ] }; + key { [ KP_Up, Farsi_8 ] }; + key { [ KP_Prior, Farsi_9 ] }; + + key { [ KP_Left, Farsi_4 ] }; + key { [ KP_Begin, Farsi_5 ] }; + key { [ KP_Right, Farsi_6 ] }; + + key { [ KP_End, Farsi_1 ] }; + key { [ KP_Down, Farsi_2 ] }; + key { [ KP_Next, Farsi_3 ] }; + + key { [ KP_Insert, Farsi_0 ] }; + key { [ KP_Delete, 0x100066b ] }; +};