diff --git a/config/karabiner/karabiner.json b/config/karabiner/karabiner.json index 70de962..dce9c2c 100644 --- a/config/karabiner/karabiner.json +++ b/config/karabiner/karabiner.json @@ -11,7 +11,7 @@ "key_code": "6", "modifiers": { "mandatory": [ - "left_control" + "option" ] } }, @@ -32,7 +32,7 @@ "key_code": "5", "modifiers": { "mandatory": [ - "left_control" + "option" ] } }, @@ -79,7 +79,7 @@ "key_code": "1", "modifiers": { "mandatory": [ - "left_control" + "option" ] } }, @@ -100,7 +100,7 @@ "key_code": "2", "modifiers": { "mandatory": [ - "left_control" + "option" ] } }, @@ -121,7 +121,7 @@ "key_code": "3", "modifiers": { "mandatory": [ - "left_control" + "option" ] } }, @@ -142,7 +142,7 @@ "key_code": "4", "modifiers": { "mandatory": [ - "left_control" + "option" ] } }, @@ -163,7 +163,7 @@ "key_code": "h", "modifiers": { "mandatory": [ - "left_control" + "option" ] } }, @@ -184,7 +184,7 @@ "key_code": "j", "modifiers": { "mandatory": [ - "left_control" + "option" ] } }, @@ -207,7 +207,7 @@ "key_code": "k", "modifiers": { "mandatory": [ - "left_control" + "option" ] } }, @@ -230,7 +230,7 @@ "key_code": "l", "modifiers": { "mandatory": [ - "left_control" + "option" ] } }, diff --git a/home/karabiner.nix b/home/karabiner.nix index d6fea5e..ac4f3c3 100644 --- a/home/karabiner.nix +++ b/home/karabiner.nix @@ -1,4 +1,15 @@ -{...}: { - xdg.configFile."karabiner/karabiner.json".source = - ../config/karabiner/karabiner.json; +{ + config, + lib, + ... +}: { + # Karabiner-Elements destroys symlinks (unlink + rewrite), so we cannot use + # xdg.configFile. Instead, copy the file on every activation so Karabiner + # sees a real mutable file whose contents match our nix-managed source. + home.activation.karabinerConfig = lib.hm.dag.entryAfter ["writeBoundary"] '' + karabiner_dir="${config.home.homeDirectory}/.config/karabiner" + mkdir -p "$karabiner_dir" + cp -f "${../config/karabiner/karabiner.json}" "$karabiner_dir/karabiner.json" + chmod 600 "$karabiner_dir/karabiner.json" + ''; }