diff --git a/include/kanata.kbd b/include/kanata.kbd new file mode 100644 index 0000000..e9bec07 --- /dev/null +++ b/include/kanata.kbd @@ -0,0 +1,22 @@ +(defcfg + process-unmapped-keys yes +) + +(defsrc + esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 + grv 1 2 3 4 5 6 7 8 9 0 - = bspc + tab q w e r t y u i o p [ ] + caps a s d f g h j k l ; ' \ ret + lsft 102d z x c v b n m , . / rsft + lctl lmet lalt spc ralt f13 rctl +) + +;; Swap CapsLock with ESC +(deflayer base + caps f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 + grv 1 2 3 4 5 6 7 8 9 0 - = bspc + tab q w e r t y u i o p [ ] + esc a s d f g h j k l ; ' \ ret + lsft 102d z x c v b n m , . / rsft + lctl lmet lalt spc ralt f13 rctl +) diff --git a/nix/modules/darwin/kanata.nix b/nix/modules/darwin/kanata.nix new file mode 100644 index 0000000..693284b --- /dev/null +++ b/nix/modules/darwin/kanata.nix @@ -0,0 +1,25 @@ +{ user }: + +{ pkgs, ... }: + +{ + launchd.user.agents.kanata = { + command = "/usr/bin/sudo ${pkgs.kanata}/bin/kanata -c ${../../../include/kanata.kbd} -n"; + serviceConfig = { + UserName = user; + RunAtLoad = true; + KeepAlive = { + SuccessfulExit = false; + Crashed = true; + }; + StandardErrorPath = "/Users/${user}/.logs/kanata.err.log"; + StandardOutPath = "/Users/${user}/.logs/kanata.out.log"; + ProcessType = "Interactive"; + Nice = -30; + }; + }; + + security.sudo.extraConfig = '' + ${user} ALL=(ALL) NOPASSWD: ${pkgs.kanata}/bin/kanata + ''; +} diff --git a/nix/overlays/darwin/kanata.nix b/nix/overlays/darwin/kanata.nix new file mode 100644 index 0000000..7182b98 --- /dev/null +++ b/nix/overlays/darwin/kanata.nix @@ -0,0 +1,29 @@ +# Because building from source is broken due to `sw_vers` usage +# +# REF: https://github.com/NixOS/nixpkgs/pull/306546#issuecomment-2284484876 +# REF: https://github.com/jtroo/kanata/issues/1209 +final: prev: + +{ + kanata = final.stdenv.mkDerivation rec { + name = "kanata"; + version = "v1.7.0"; + + src = final.fetchurl { + url = "https://github.com/jtroo/kanata/releases/download/${version}/kanata_macos_" + + (if final.stdenv.hostPlatform.isAarch64 then "arm64" else "x86_64"); + sha256 = + if final.stdenv.hostPlatform.isAarch64 then + "83ad80fbaf8c7b0ec0e17052a02ca0b3057cbbeaf8a023a61541f1514a936b43" + else + "e3f0d99e512a84c5cae1f63e71c07ecdbff66dc89b053aba0abb4f9dee0cadc0"; + }; + + phases = ["installPhase" "patchPhase"]; + installPhase = '' + mkdir -p $out/bin + cp $src $out/bin/kanata + chmod +x $out/bin/kanata + ''; + }; +} diff --git a/nix/systems/darwin/configuration.nix b/nix/systems/darwin/configuration.nix index b3d4466..f6f8582 100644 --- a/nix/systems/darwin/configuration.nix +++ b/nix/systems/darwin/configuration.nix @@ -58,6 +58,8 @@ in { pkgs.lf pkgs.yazi # lf replacement, need further testing + + pkgs.kanata ]; environment.extraSetup = '' ln -sv ${pkgs.path} $out/nixpkgs diff --git a/nix/systems/darwin/default.nix b/nix/systems/darwin/default.nix index f01b150..35a31e0 100644 --- a/nix/systems/darwin/default.nix +++ b/nix/systems/darwin/default.nix @@ -4,6 +4,10 @@ let mkCommon = import ../../lib/mkCommon.nix; mkSystem = import ../../lib/mkSystem.nix; mkBrew = import ../../overlays/darwin/brew.nix; + + kanataModules = [ + (import ../../modules/darwin/kanata.nix { user = "ziro"; }) + ]; in { # Host list @@ -24,6 +28,7 @@ in inputs.firefox-darwin.overlay (mkBrew { inherit system brew-api; nixpkgs = nixpkgs-stable; }) (import ../../overlays/darwin/heliport.nix) + (import ../../overlays/darwin/kanata.nix) ]; nur = nur; } @@ -37,7 +42,7 @@ in modules = [ inputs.spicetify-nix.nixosModules.default # Also works on nix-darwin thanks to it being nixosConfiguration replacement for macOS ./configuration.nix - ]; + ] ++ kanataModules; }; # Imaginary M1, just for reference @@ -52,6 +57,7 @@ in extraOverlays = [ inputs.firefox-darwin.overlay (mkBrew { inherit system brew-api; nixpkgs = nixpkgs-stable; }) + (import ../../overlays/darwin/kanata.nix) ]; nur = nur; } @@ -65,6 +71,6 @@ in modules = [ inputs.spicetify-nix.nixosModules.default ./configuration.nix - ]; + ] ++ kanataModules; }; } diff --git a/nix/users/default.nix b/nix/users/default.nix index 606a9e1..e6e3284 100644 --- a/nix/users/default.nix +++ b/nix/users/default.nix @@ -28,6 +28,7 @@ in extraOverlays = [ inputs.firefox-darwin.overlay (mkBrew { inherit system; inherit (inputs) brew-api; nixpkgs = nixpkgs-stable; }) + (import ../overlays/darwin/kanata.nix) ]; nur = nur; } diff --git a/nix/users/ziro/darwin.nix b/nix/users/ziro/darwin.nix index 2ca0314..159b21a 100644 --- a/nix/users/ziro/darwin.nix +++ b/nix/users/ziro/darwin.nix @@ -15,18 +15,18 @@ home.file."Library/Application Support/Floorp/native-messaging-hosts/passff.json".source = "${pkgs.passff-host}/share/passff-host/passff.json"; # Swap CapsLock with Esc for better vi-mode experience. - launchd.agents.CapsEscSwap = { - enable = true; - config = { - ProgramArguments = [ - "/usr/bin/hidutil" - "property" - "--set" - ''{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x700000029},{"HIDKeyboardModifierMappingSrc":0x700000029,"HIDKeyboardModifierMappingDst":0x700000039}]}'' - ]; - RunAtLoad = true; - }; - }; + # launchd.agents.CapsEscSwap = { + # enable = true; + # config = { + # ProgramArguments = [ + # "/usr/bin/hidutil" + # "property" + # "--set" + # ''{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x700000029},{"HIDKeyboardModifierMappingSrc":0x700000029,"HIDKeyboardModifierMappingDst":0x700000039}]}'' + # ]; + # RunAtLoad = true; + # }; + # }; home.sessionVariables.MOZ_LEGACY_PROFILES = 1;