diff --git a/flake.lock b/flake.lock index 1f3980c..cd246d3 100644 --- a/flake.lock +++ b/flake.lock @@ -37,11 +37,11 @@ "base16-helix": { "flake": false, "locked": { - "lastModified": 1736852337, - "narHash": "sha256-esD42YdgLlEh7koBrSqcT7p2fsMctPAcGl/+2sYJa2o=", + "lastModified": 1748408240, + "narHash": "sha256-9M2b1rMyMzJK0eusea0x3lyh3mu5nMeEDSc4RZkGm+g=", "owner": "tinted-theming", "repo": "base16-helix", - "rev": "03860521c40b0b9c04818f2218d9cc9efc21e7a5", + "rev": "6c711ab1a9db6f51e2f6887cc3345530b33e152e", "type": "github" }, "original": { @@ -104,11 +104,11 @@ ] }, "locked": { - "lastModified": 1748225455, - "narHash": "sha256-AzlJCKaM4wbEyEpV3I/PUq5mHnib2ryEy32c+qfj6xk=", + "lastModified": 1749436314, + "narHash": "sha256-CqmqU5FRg5AadtIkxwu8ulDSOSoIisUMZRLlcED3Q5w=", "owner": "nix-community", "repo": "disko", - "rev": "a894f2811e1ee8d10c50560551e50d6ab3c392ba", + "rev": "dfa4d1b9c39c0342ef133795127a3af14598017a", "type": "github" }, "original": { @@ -125,11 +125,11 @@ }, "locked": { "dir": "pkgs/firefox-addons", - "lastModified": 1748318605, - "narHash": "sha256-rxxxdxFGX+C6xT0QPzMY5lDSBgigqtegQfVRRrZicHg=", + "lastModified": 1749441800, + "narHash": "sha256-bN4tccrmczfR4PUuepHpxNNmWG3cLZTFIt4BaD8YyvA=", "owner": "rycee", "repo": "nur-expressions", - "rev": "0497d706cb79a3eef1f35dbc45419850c0e01bf1", + "rev": "fe13e6abfe72b39ad8381595c3c404849330c3cb", "type": "gitlab" }, "original": { @@ -142,11 +142,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1744642301, - "narHash": "sha256-5A6LL7T0lttn1vrKsNOKUk9V0ittdW0VEqh6AtefxJ4=", + "lastModified": 1748383148, + "narHash": "sha256-pGvD/RGuuPf/4oogsfeRaeMm6ipUIznI2QSILKjKzeA=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "59e3de00f01e5adb851d824cf7911bd90c31083a", + "rev": "4eb2714fbed2b80e234312611a947d6cb7d70caf", "type": "github" }, "original": { @@ -158,11 +158,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -205,11 +205,11 @@ }, "flake-compat_4": { "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -225,11 +225,11 @@ ] }, "locked": { - "lastModified": 1743550720, - "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", + "lastModified": 1749398372, + "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "c621e8422220273271f52058f618c94e405bb0f5", + "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", "type": "github" }, "original": { @@ -243,11 +243,11 @@ "nixpkgs-lib": "nixpkgs-lib" }, "locked": { - "lastModified": 1743550720, - "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", + "lastModified": 1748821116, + "narHash": "sha256-F82+gS044J1APL0n4hH50GYdPRv/5JWm34oCJYmVKdE=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "c621e8422220273271f52058f618c94e405bb0f5", + "rev": "49f0870db23e8c1ca0b5259734a02cd9e1e371a1", "type": "github" }, "original": { @@ -326,11 +326,11 @@ ] }, "locked": { - "lastModified": 1733312601, - "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "lastModified": 1743550720, + "narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "rev": "c621e8422220273271f52058f618c94e405bb0f5", "type": "github" }, "original": { @@ -428,11 +428,11 @@ ] }, "locked": { - "lastModified": 1742649964, - "narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=", + "lastModified": 1747372754, + "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82", + "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", "type": "github" }, "original": { @@ -505,11 +505,11 @@ }, "hardware": { "locked": { - "lastModified": 1747900541, - "narHash": "sha256-dn64Pg9xLETjblwZs9Euu/SsjW80pd6lr5qSiyLY1pg=", + "lastModified": 1749195551, + "narHash": "sha256-W5GKQHgunda/OP9sbKENBZhMBDNu2QahoIPwnsF6CeM=", "owner": "nixos", "repo": "nixos-hardware", - "rev": "11f2d9ea49c3e964315215d6baa73a8d42672f06", + "rev": "4602f7e1d3f197b3cb540d5accf5669121629628", "type": "github" }, "original": { @@ -569,11 +569,11 @@ ] }, "locked": { - "lastModified": 1748227609, - "narHash": "sha256-SaSdslyo6UGDpPUlmrPA4dWOEuxCy2ihRN9K6BnqYsA=", + "lastModified": 1749400020, + "narHash": "sha256-0nTmHO8AYgRYk5v6zw5oZ3x9nh+feb+Isn7WNe318M0=", "owner": "nix-community", "repo": "home-manager", - "rev": "d23d20f55d49d8818ac1f1b2783671e8a6725022", + "rev": "2835e8ba0ad99ba86d4a5e497a962ec9fa35e48f", "type": "github" }, "original": { @@ -648,11 +648,11 @@ ] }, "locked": { - "lastModified": 1748281511, - "narHash": "sha256-feFNkno0UVfXWJln474OdHMBqH0grtXp6WDzXYxcvaQ=", + "lastModified": 1749348095, + "narHash": "sha256-4KaUocEPNoU6gpFE6WPLMvMK5tmvJyc0qf84Mp8Chlw=", "owner": "fufexan", "repo": "nix-gaming", - "rev": "aa4362cf3b4ec587bbe43132a7b8384934fb38af", + "rev": "4221d80488883c40003f0704af78699a583f0c9f", "type": "github" }, "original": { @@ -668,11 +668,11 @@ ] }, "locked": { - "lastModified": 1748145500, - "narHash": "sha256-t9fx0l61WOxtWxXCqlXPWSuG/0XMF9DtE2T7KXgMqJw=", + "lastModified": 1749355504, + "narHash": "sha256-L17CdJMD+/FCBOHjREQLXbe2VUnc3rjffenBbu2Kwpc=", "owner": "Mic92", "repo": "nix-index-database", - "rev": "a98adbf54d663395df0b9929f6481d4d80fc8927", + "rev": "40a6e15e44b11fbf8f2b1df9d64dbfc117625e94", "type": "github" }, "original": { @@ -690,11 +690,11 @@ ] }, "locked": { - "lastModified": 1748225187, - "narHash": "sha256-gpNN43fNJQoHhnK1Z+nms4lo6i/t9t2rfZMAxc165vQ=", + "lastModified": 1749435098, + "narHash": "sha256-8U85+jkZGjQs0YZ4ryuIvPEjIY905AueoTqm104lUSU=", "owner": "Infinidoge", "repo": "nix-minecraft", - "rev": "98c1bcaaa4dbd5980523a08a5b32e35d44e830e5", + "rev": "8f383663f62afaaa79aec68a076c092da80f706f", "type": "github" }, "original": { @@ -705,11 +705,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1748190013, - "narHash": "sha256-R5HJFflOfsP5FBtk+zE8FpL8uqE7n62jqOsADvVshhE=", + "lastModified": 1749285348, + "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "62b852f6c6742134ade1abdd2a21685fd617a291", + "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", "type": "github" }, "original": { @@ -721,11 +721,11 @@ }, "nixpkgs-lib": { "locked": { - "lastModified": 1743296961, - "narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=", + "lastModified": 1748740939, + "narHash": "sha256-rQaysilft1aVMwF14xIdGS3sj1yHlI6oKQNBRTF40cc=", "owner": "nix-community", "repo": "nixpkgs.lib", - "rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa", + "rev": "656a64127e9d791a334452c6b6606d17539476e2", "type": "github" }, "original": { @@ -762,11 +762,11 @@ "treefmt-nix": "treefmt-nix_2" }, "locked": { - "lastModified": 1746056780, - "narHash": "sha256-/emueQGaoT4vu0QjU9LDOG5roxRSfdY0K2KkxuzazcM=", + "lastModified": 1748730660, + "narHash": "sha256-5LKmRYKdPuhm8j5GFe3AfrJL8dd8o57BQ34AGjJl1R0=", "owner": "nix-community", "repo": "NUR", - "rev": "d476cd0972dd6242d76374fcc277e6735715c167", + "rev": "2c0bc52fe14681e9ef60e3553888c4f086e46ecb", "type": "github" }, "original": { @@ -783,11 +783,11 @@ ] }, "locked": { - "lastModified": 1748469046, - "narHash": "sha256-8bTCadTsn6GG+d4wtX+0lQlY5meGA3rdU6E9GpvJrFU=", + "lastModified": 1749544886, + "narHash": "sha256-O4WkML1B9yqe/WlZ4S3hI5h2RcsRwhEfiJeV2wPNLRE=", "owner": "xunuwu", "repo": "nvim-config", - "rev": "f2127a5caa6aba90b8dc3cf2a4d7ea2af9a73580", + "rev": "b193c5fc7bfa935e5e9086dc3062f1e893fd99cc", "type": "github" }, "original": { @@ -859,7 +859,6 @@ "sops-nix": "sops-nix", "stylix": "stylix", "vpn-confinement": "vpn-confinement", - "wallpaper": "wallpaper", "wayland-appusage": "wayland-appusage" } }, @@ -870,11 +869,11 @@ ] }, "locked": { - "lastModified": 1747050424, - "narHash": "sha256-+Z1eDiah8w3C+wZ3Rw4vWLYZEtEDp0Vo9bqJZEe6Pkw=", + "lastModified": 1750164640, + "narHash": "sha256-50JV0gzn64VaJJoXfl6qC9BXEst5PoVf3zxQD+hOAro=", "owner": "xunuwu", "repo": "sobercookie", - "rev": "171f7b4b490e0e6cba8f26631888ec4d48ada8d6", + "rev": "cb6cbee3faf89190788c60f936aac71e7490a3f1", "type": "github" }, "original": { @@ -929,11 +928,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1748376235, - "narHash": "sha256-LIQnskjlVHTJC5dW4xoWlMCtrKeWOPW7/8HYd8IruLA=", + "lastModified": 1749398498, + "narHash": "sha256-Usx6sGnT/D8ZnWiZg+J1OY3dp4ZssMQiN1XeXcsL/cs=", "owner": "danth", "repo": "stylix", - "rev": "e38a646e5cd3d000c8fffb14632f3bb8a45dd042", + "rev": "5869510e48e64d916dc6905dc664a02b0f85f1bd", "type": "github" }, "original": { @@ -1038,11 +1037,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1744974599, - "narHash": "sha256-Fg+rdGs5FAgfkYNCs74lnl8vkQmiZVdBsziyPhVqrlY=", + "lastModified": 1748180480, + "narHash": "sha256-7n0XiZiEHl2zRhDwZd/g+p38xwEoWtT0/aESwTMXWG4=", "owner": "tinted-theming", "repo": "schemes", - "rev": "28c26a621123ad4ebd5bbfb34ab39421c0144bdd", + "rev": "87d652edd26f5c0c99deda5ae13dfb8ece2ffe31", "type": "github" }, "original": { @@ -1054,11 +1053,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1745111349, - "narHash": "sha256-udV+nHdpqgkJI9D0mtvvAzbqubt9jdifS/KhTTbJ45w=", + "lastModified": 1748740859, + "narHash": "sha256-OEM12bg7F4N5WjZOcV7FHJbqRI6jtCqL6u8FtPrlZz4=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "e009f18a01182b63559fb28f1c786eb027c3dee9", + "rev": "57d5f9683ff9a3b590643beeaf0364da819aedda", "type": "github" }, "original": { @@ -1160,18 +1159,6 @@ "type": "github" } }, - "wallpaper": { - "flake": false, - "locked": { - "narHash": "sha256-/TKznBlLva2h7omNRZMoIIPyVXDFhVkpzWcz2p0N51M=", - "type": "file", - "url": "https://cdn.donmai.us/original/43/20/__kasane_teto_and_kasane_teto_utau_and_1_more_drawn_by_maguru_white__43204cf49ef8c071c34009553d1c0455.jpg" - }, - "original": { - "type": "file", - "url": "https://cdn.donmai.us/original/43/20/__kasane_teto_and_kasane_teto_utau_and_1_more_drawn_by_maguru_white__43204cf49ef8c071c34009553d1c0455.jpg" - } - }, "wayland-appusage": { "inputs": { "crane": "crane_2", diff --git a/flake.nix b/flake.nix index 3360a91..a8e522a 100644 --- a/flake.nix +++ b/flake.nix @@ -108,7 +108,5 @@ own-website.url = "github:xunuwu/xunuwu.xyz"; own-website.inputs.nixpkgs.follows = "nixpkgs"; - - wallpaper.url = "file+https://cdn.donmai.us/original/43/20/__kasane_teto_and_kasane_teto_utau_and_1_more_drawn_by_maguru_white__43204cf49ef8c071c34009553d1c0455.jpg"; }; } diff --git a/home/desktop/sway/__waybar.nix b/home/desktop/sway/__waybar.nix index 3a2958d..4e31ec5 100644 --- a/home/desktop/sway/__waybar.nix +++ b/home/desktop/sway/__waybar.nix @@ -1,4 +1,9 @@ -{pkgs, ...}: { +{ + pkgs, + lib, + self, + ... +}: { programs.waybar = { enable = true; package = pkgs.waybar.overrideAttrs (final: prev: { @@ -16,6 +21,7 @@ "sway/window" ]; modules-right = [ + "custom/keyboard-state" "tray" "clock" ]; @@ -25,6 +31,11 @@ "sway/window" = { max-length = 80; }; + "custom/keyboard-state" = { + return-type = "json"; + exec = "${lib.getExe self.packages.${pkgs.system}.keyboard-state}"; + restart-interval = "60"; + }; clock = { format = "{:%V|%d %a %H:%M}"; tooltip-format = "{:%a %Y-%m-%d %H:%M}\n{calendar}"; diff --git a/home/develop/langs/c.nix b/home/develop/langs/c.nix index 8dc2430..a5de208 100644 --- a/home/develop/langs/c.nix +++ b/home/develop/langs/c.nix @@ -1,3 +1,9 @@ {pkgs, ...}: { - home.packages = with pkgs; [clang-tools buckle gdb lldb]; + home.packages = with pkgs; [ + clang-tools + buckle + gdb + lldb + lld + ]; } diff --git a/hosts/nixdesk/home.nix b/hosts/nixdesk/home.nix index 8dafff6..63864d2 100644 --- a/hosts/nixdesk/home.nix +++ b/hosts/nixdesk/home.nix @@ -76,7 +76,7 @@ mode = "1920x1080@165Hz"; position = "1920 0"; # allow_tearing = "yes"; - bg = "${inputs.wallpaper.outPath} fill"; + # bg = "${inputs.wallpaper.outPath} fill"; }; "HDMI-A-1" = { position = "0 0"; @@ -152,6 +152,7 @@ heroic lutris ryubing # switch emu + rpcs3 # ps3 emu prismlauncher inputs.sobercookie.packages.${pkgs.system}.default self.packages.${pkgs.system}.krunker diff --git a/pkgs/default.nix b/pkgs/default.nix index a9a2057..5c6bfd0 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -4,5 +4,6 @@ krunker = pkgs.callPackage ./krunker {}; ida-pro = pkgs.callPackage ./ida-pro {}; cartograph-cf = pkgs.callPackage ./cartograph-cf {}; + keyboard-state = pkgs.callPackage ./keyboard-state {}; }; } diff --git a/pkgs/keyboard-state/default.nix b/pkgs/keyboard-state/default.nix new file mode 100644 index 0000000..db9f213 --- /dev/null +++ b/pkgs/keyboard-state/default.nix @@ -0,0 +1,17 @@ +{ + rustPlatform, + pkg-config, + udev, +}: +rustPlatform.buildRustPackage { + pname = "keyboard-state"; + version = "0.1.0"; + + src = ./source; + cargoLock.lockFile = ./source/Cargo.lock; + + nativeBuildInputs = [pkg-config]; + buildInputs = [udev]; + + meta.mainProgram = "keyboard-state"; +} diff --git a/pkgs/keyboard-state/source/.gitignore b/pkgs/keyboard-state/source/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/pkgs/keyboard-state/source/.gitignore @@ -0,0 +1 @@ +/target diff --git a/pkgs/keyboard-state/source/Cargo.lock b/pkgs/keyboard-state/source/Cargo.lock new file mode 100644 index 0000000..df3b8bb --- /dev/null +++ b/pkgs/keyboard-state/source/Cargo.lock @@ -0,0 +1,185 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "cc" +version = "1.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d487aa071b5f64da6f19a3e848e3578944b726ee5a4854b82172f02aa876bfdc" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "hidapi" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b876ecf37e86b359573c16c8366bc3eba52b689884a0fc42ba3f67203d2a8b" +dependencies = [ + "cc", + "cfg-if", + "libc", + "pkg-config", + "windows-sys", +] + +[[package]] +name = "keyboard-state" +version = "0.1.0" +dependencies = [ + "anyhow", + "enumflags2", + "hidapi", +] + +[[package]] +name = "libc" +version = "0.2.173" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8cfeafaffdbc32176b64fb251369d52ea9f0a8fbc6f8759edffef7b525d64bb" + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "syn" +version = "2.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" diff --git a/pkgs/keyboard-state/source/Cargo.toml b/pkgs/keyboard-state/source/Cargo.toml new file mode 100644 index 0000000..6d1773a --- /dev/null +++ b/pkgs/keyboard-state/source/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "keyboard-state" +version = "0.1.0" +edition = "2024" + +[dependencies] +anyhow = "1.0.98" +enumflags2 = "0.7.12" +hidapi = "2.6.3" diff --git a/pkgs/keyboard-state/source/src/main.rs b/pkgs/keyboard-state/source/src/main.rs new file mode 100644 index 0000000..76ea034 --- /dev/null +++ b/pkgs/keyboard-state/source/src/main.rs @@ -0,0 +1,95 @@ +use std::thread; +use std::time::Duration; + +use enumflags2::{BitFlag, bitflags}; +use hidapi::{HidApi, HidDevice, HidResult}; + +const VENDOR_ID: u16 = 0x594d; +const PRODUCT_ID: u16 = 0x0075; + +const USAGE_PAGE: u16 = 0xFF60; +const USAGE: u16 = 0x61; + +#[bitflags] +#[repr(u16)] +#[derive(Copy, Clone, Debug, PartialEq)] +enum Layer { + Base = 1 << 0, + Gaming = 1 << 1, + More = 1 << 2, + Extra = 1 << 3, +} + +fn main() -> anyhow::Result<()> { + let mut api = HidApi::new()?; + + let mut device: Option = None; + + loop { + match &device { + Some(d) => { + let mut data = [0u8; 32]; + if d.read(&mut data).is_err() { + eprintln!("Device disconnected. Searching for device..."); + device = None; + } else { + let layers = Layer::from_bits_truncate(u16::from_le_bytes([data[0], data[1]])); + + let short_layers: String = layers + .iter() + .map(|x| match x { + Layer::Base => "B", + Layer::Gaming => "G", + Layer::More => "m", + Layer::Extra => "e", + }) + .collect(); + + let long_layers: String = layers + .iter() + .map(|x| match x { + Layer::Base => "Base", + Layer::Gaming => "Gaming", + Layer::More => "more", + Layer::Extra => "extra", + }) + .flat_map(|elem| [", ", elem]) + .skip(1) + .collect(); + + println!( + r#"{{"text":"{short_layers}", "alt": "none", "tooltip": "{long_layers}", "class": "none"}}"# + ); + } + } + None => { + api.reset_devices()?; + api.add_devices(VENDOR_ID, PRODUCT_ID)?; + println!( + r#"{{"text":"N/A", "alt": "Unknown keyboard state", "tooltip": "none", "class": "none"}}"# + ); + + match api.device_list().find(|device| { + device.vendor_id() == VENDOR_ID + && device.product_id() == PRODUCT_ID + && device.usage_page() == USAGE_PAGE + && device.usage() == USAGE + }) { + Some(d) => match api.open_path(d.path()) { + Ok(d) => { + eprintln!("Device connected"); + device = Some(d) + } + Err(e) => { + eprintln!("Error connecting to device: {e}"); + thread::sleep(Duration::from_secs(2)); + } + }, + None => { + thread::sleep(Duration::from_secs(2)); + } + } + } + } + } +}