diff options
author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-06-29 10:59:57 +0200 |
---|---|---|
committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-06-29 10:59:57 +0200 |
commit | 00a9fb7587b76b3f86c6515d6bea138a78eac096 (patch) | |
tree | aea91c4bba0b67f204bd26b0f109f958576ba1c2 | |
parent | pkgs/river-mk-keymap: Don't emit duplicate key mappings (diff) | |
download | nixos-config-00a9fb7587b76b3f86c6515d6bea138a78eac096.zip |
modules/river: Use the same keymap for both tiamat and apzu
This avoids bit-rot in apzu's key mappings and maybe helps me to actually learn all the possible key mappings.
Diffstat (limited to '')
-rw-r--r-- | hosts/by-name/apzu/configuration.nix | 72 | ||||
-rw-r--r-- | hosts/by-name/tiamat/configuration.nix | 92 | ||||
-rw-r--r-- | modules/by-name/ri/river/keymap.nix | 127 | ||||
-rw-r--r-- | modules/by-name/ri/river/module.nix | 17 |
4 files changed, 150 insertions, 158 deletions
diff --git a/hosts/by-name/apzu/configuration.nix b/hosts/by-name/apzu/configuration.nix index d4aad0f9..4464011e 100644 --- a/hosts/by-name/apzu/configuration.nix +++ b/hosts/by-name/apzu/configuration.nix @@ -39,78 +39,6 @@ river.init = { mappings = { layout = "dvorak-modified"; - keymap = - { - # Focus change - "<Meta-T>" = {command = ["focus-view" "next"];}; - "<Meta-N>" = {command = ["focus-view" "previous"];}; - "<Meta+Ctrl-T>" = {command = ["focus-output" "next"];}; - "<Meta+Ctrl-N>" = {command = ["focus-output" "previous"];}; - - # Standard programs - "<Meta-<ENTER>>" = {command = ["spawn" "${lib.getExe pkgs.alacritty}"];}; - "<Meta+Shift-q>" = {command = ["exit"];}; - "<Meta-L>" = {command = ["spawn" "${lib.getExe pkgs.lock}"];}; - - # Screenshot - "<PRINTSCREEN>" = {command = ["spawn" "${lib.getExe pkgs.screenshot_persistent}"];}; - - # Audio - "<MEDIA_RAISEVOLUME>" = { - command = ["spawn" "${lib.getExe' pkgs.wireplumber "wpctl"} set-volume @DEFAULT_SINK@ 5%+"]; - modes = ["normal" "locked"]; - }; - "<MEDIA_LOWERVOLUME>" = { - command = ["spawn" "${lib.getExe' pkgs.wireplumber "wpctl"} set-volume @DEFAULT_SINK@ 5%-"]; - modes = ["normal" "locked"]; - }; - "<MEDIA_MUTEVOLUME>" = { - command = ["spawn" "${lib.getExe pkgs.mpp} toggle"]; - modes = ["normal" "locked"]; - }; - - # Launcher - "<Meta-R>" = {command = ["spawn" "${lib.getExe pkgs.rofi} -show combi -modes combi -combi-modes 'window, drun, run' -show-icons"];}; - "<Meta-<F1>>" = {command = ["spawn" "${lib.getExe pkgs.tskm} open select"];}; - "<Meta-<F2>>" = {command = ["spawn" "${lib.getExe pkgs.keepassxc}"];}; - "<Meta-<F3>>" = {command = ["spawn" "${lib.getExe pkgs.signal-desktop}"];}; - # "<Meta-<F4>>" = {command = ["spawn" "${lib.getExe pkgs.steam}"];}; - - # Client - "<Meta-f>" = {command = ["toggle-fullscreen"];}; - "<Meta+Shift-c>" = {command = ["close"];}; - "<Meta+Ctrl- >" = {command = ["toggle-float"];}; - "<Meta+Ctrl-<ENTER>>" = {command = ["zoom"];}; - "<Meta-o>" = {command = ["send-to-output" "next"];}; - "<Meta+Shift-T>" = {command = ["swap" "next"];}; - "<Meta+Shift-N>" = {command = ["swap" "previous"];}; - - # Toggle all tags - "<Meta-0>" = {command = ["set-focused-tags" (builtins.toString ((baseLib.pow 2 32) - 1))];}; - "<Meta+Shift-0>" = {command = ["set-view-tags" (builtins.toString ((baseLib.pow 2 32) - 1))];}; - - # Mouse - "<Meta-<MOUSE_LEFT>>" = { - command = ["move-view"]; - map_mode = "MapMouse"; - }; - "<Meta-<MOUSE_RIGHT>>" = { - command = ["resize-view"]; - map_mode = "MapMouse"; - }; - } - // ( - builtins.foldl' (acc: elem: acc // elem) {} ( - builtins.map (index: let - num = builtins.toString index; - index2tag = input: builtins.toString (baseLib.pow 2 (input - 1)); - in { - "<Meta-${num}>" = {command = ["set-focused-tags" (index2tag index)];}; - "<Meta+Shift-${num}>" = {command = ["set-view-tags" (index2tag index)];}; - "<Meta+Shift+Ctrl-${num}>" = {command = ["toggle-view-tags" (index2tag index)];}; - }) (builtins.genList (i: i + 1) 9) - ) - ); }; screenSetupCode = {}; }; diff --git a/hosts/by-name/tiamat/configuration.nix b/hosts/by-name/tiamat/configuration.nix index efb77b96..18393543 100644 --- a/hosts/by-name/tiamat/configuration.nix +++ b/hosts/by-name/tiamat/configuration.nix @@ -46,91 +46,13 @@ init = { mappings = { layout = "us"; - keymap = let - map = key: "<Alt+Ctrl+Meta+Shift-${key}>"; - in - (lib.mapAttrs' (name: value: lib.nameValuePair (map name) value) { - # Movement - "A" = {command = ["exit"];}; - "B" = {command = ["close"];}; - - "C" = {command = ["focus-view" "previous"];}; - "D" = {command = ["focus-view" "next"];}; - - "E" = {command = ["swap" "previous"];}; - "F" = {command = ["swap" "next"];}; - - "G" = {command = ["zoom"];}; - - "H" = {command = ["toggle-fullscreen"];}; - "I" = {command = ["toggle-float"];}; - - "J" = {command = ["send-to-output" "next"];}; - - "K" = {command = ["spawn" "${lib.getExe pkgs.alacritty}"];}; - "L" = {command = ["spawn" "${lib.getExe pkgs.screenshot_persistent}"];}; - - # Audio - # "M" = {command = ["spawn" "video-pause toggle"]; modes = ["normal" "locked"]; }; - "N" = { - command = ["spawn" "${lib.getExe pkgs.mpp} toggle"]; - modes = ["normal" "locked"]; - }; - - # Launcher - "O" = {command = ["spawn" "${lib.getExe pkgs.rofi} -show combi -modes combi -combi-modes 'window,drun,run' -show-icons"];}; - "P" = {command = ["spawn" "${lib.getExe pkgs.tskm} open select"];}; - "Q" = {command = ["spawn" "${lib.getExe pkgs.keepassxc}"];}; - # "R" = {command = ["spawn" "nheko"];}; - "S" = {command = ["spawn" "${lib.getExe pkgs.signal-desktop}"];}; - "T" = {command = ["spawn" "${lib.getExe pkgs.lock}"];}; - - "U" = {command = ["focus-output" "next"];}; - "V" = {command = ["focus-previous-tags"];}; - "W" = {command = ["send-to-previous-tags"];}; - # "X" = {command = ["spawn" "bemenu-run"];}; - # "Y" = {command = ["spawn" "bemenu-run"];}; - - # Toggle all tags - "0" = {command = ["set-focused-tags" "${builtins.toString ((libraries.base.pow 2 32) - 1)}"];}; - - # Support Unicode input - "Z" = {command = ["spawn" "${lib.getExe externalBinaries.qmk_firmware.packages.${system}.qmk_unicode_type} 106 65377"];}; - }) - // ({ - # TODO: add toggle-focus mapping - - # Toggle all tags - "<Alt+Ctrl+Shift-0>" = { - command = [ - "set-view-tags" - "${builtins.toString - ((libraries.base.pow 2 32) - 1)}" - ]; - }; - - # Mouse - "<Meta-<MOUSE_LEFT>>" = { - command = ["move-view"]; - map_mode = "MapMouse"; - }; - "<Meta-<MOUSE_RIGHT>>" = { - command = ["resize-view"]; - map_mode = "MapMouse"; - }; - } - // ( - builtins.foldl' (acc: elem: acc // elem) {} ( - builtins.map (index: let - num = builtins.toString index; - index2tag = input: builtins.toString (libraries.base.pow 2 (input - 1)); - in { - "${map num}" = {command = ["set-focused-tags" (index2tag index)];}; - "<Alt+Ctrl+Shift-${num}>" = {command = ["set-view-tags" (index2tag index)];}; - # "<Super+Shift+Ctrl-${num}>" = {command = ["toggle-view-tags" (index2tag index)];}; - }) (builtins.genList (i: i + 1) 9) - ) - )); + keymap = { + # Support Unicode input + "<Alt+Ctrl+Meta+Shift-Z>" = [ + "spawn" + "${lib.getExe externalBinaries.qmk_firmware.packages.${system}.qmk_unicode_type} 106 65377" + ]; + }; }; screenSetupCode = { "DP-2" = {pos = "2560,0";}; diff --git a/modules/by-name/ri/river/keymap.nix b/modules/by-name/ri/river/keymap.nix new file mode 100644 index 00000000..420db61a --- /dev/null +++ b/modules/by-name/ri/river/keymap.nix @@ -0,0 +1,127 @@ +{ + lib, + pkgs, + libraries, + config, + ... +}: let + index2tag = input: builtins.toString (libraries.base.pow 2 (input - 1)); + + mkCommand = name: index: [name (index2tag index)]; + + cfg = config.soispha.programs.river; +in { + soispha.programs.river.init.mappings.keymap = lib.mkIf cfg.enable { + "<SUPER_LEFT>" = { + # Change focus + "f" = { + "t" = ["focus-view" "next"]; + "n" = ["focus-view" "previous"]; + "<Ctrl-t>" = ["focus-output" "next"]; + "<Ctrl-n>" = ["focus-output" "previous"]; + }; + + # Spawn standard programs + "r" = { + "a" = ["spawn" "${lib.getExe pkgs.alacritty}"]; + "b" = ["spawn" "${lib.getExe pkgs.tskm} open select"]; + "k" = ["spawn" "${lib.getExe pkgs.keepassxc}"]; + "s" = ["spawn" "${lib.getExe pkgs.signal-desktop}"]; + "p" = ["spawn" "${lib.getExe pkgs.screenshot_persistent}"]; + }; + + # Client changes + "c" = { + "f" = ["toggle-fullscreen"]; + "c" = ["close"]; + "<SPACE>" = ["toggle-float"]; + "<ENTER>" = ["zoom"]; + "o" = ["send-to-output" "next"]; + "t" = ["swap" "next"]; + "n" = ["swap" "previous"]; + }; + + # River compositor control. + "x" = { + "q" = ["exit"]; + "l" = ["spawn" "${lib.getExe pkgs.lock}"]; + }; + + # Media control + "m" = { + "r" = ["spawn" "${lib.getExe' pkgs.wireplumber "wpctl"} set-volume @DEFAULT_SINK@ 5%+"]; + "l" = ["spawn" "${lib.getExe' pkgs.wireplumber "wpctl"} set-volume @DEFAULT_SINK@ 5%-"]; + "m" = ["spawn" "${lib.getExe pkgs.mpp} toggle"]; + }; + + # Select tags to view. + "v" = { + "0" = ["set-view-tags" (builtins.toString ((libraries.base.pow 2 32) - 1))]; + "p" = ["send-to-previous-tags"]; + + "1" = mkCommand "set-view-tags" 1; + "2" = mkCommand "set-view-tags" 2; + "3" = mkCommand "set-view-tags" 3; + "4" = mkCommand "set-view-tags" 4; + "5" = mkCommand "set-view-tags" 5; + "6" = mkCommand "set-view-tags" 6; + "7" = mkCommand "set-view-tags" 7; + "8" = mkCommand "set-view-tags" 8; + "9" = mkCommand "set-view-tags" 9; + + # Add tags to view. + "a" = { + "1" = mkCommand "toggle-view-tags" 1; + "2" = mkCommand "toggle-view-tags" 2; + "3" = mkCommand "toggle-view-tags" 3; + "4" = mkCommand "toggle-view-tags" 4; + "5" = mkCommand "toggle-view-tags" 5; + "6" = mkCommand "toggle-view-tags" 6; + "7" = mkCommand "toggle-view-tags" 7; + "8" = mkCommand "toggle-view-tags" 8; + "9" = mkCommand "toggle-view-tags" 9; + }; + }; + + # Select tags to focus. + "f" = { + "0" = ["set-focused-tags" (builtins.toString ((libraries.base.pow 2 32) - 1))]; + "p" = ["focus-previous-tags"]; + + "1" = mkCommand "set-focused-tags" 1; + "2" = mkCommand "set-focused-tags" 2; + "3" = mkCommand "set-focused-tags" 3; + "4" = mkCommand "set-focused-tags" 4; + "5" = mkCommand "set-focused-tags" 5; + "6" = mkCommand "set-focused-tags" 6; + "7" = mkCommand "set-focused-tags" 7; + "8" = mkCommand "set-focused-tags" 8; + "9" = mkCommand "set-focused-tags" 9; + }; + }; + + # Audio + "<MEDIA_RAISEVOLUME>" = { + command = ["spawn" "${lib.getExe' pkgs.wireplumber "wpctl"} set-volume @DEFAULT_SINK@ 5%+"]; + allow_locked = true; + }; + "<MEDIA_LOWERVOLUME>" = { + command = ["spawn" "${lib.getExe' pkgs.wireplumber "wpctl"} set-volume @DEFAULT_SINK@ 5%-"]; + allow_locked = true; + }; + "<MEDIA_MUTEVOLUME>" = { + command = ["spawn" "${lib.getExe pkgs.mpp} toggle"]; + allow_locked = true; + }; + + # Mouse + "<Meta-<MOUSE_LEFT>>" = ["move-view"]; + "<Meta-<MOUSE_RIGHT>>" = ["resize-view"]; + + # Lock screen. + "<Meta-L>" = ["spawn" "${lib.getExe pkgs.lock}"]; + + # Screenshot + "<PRINTSCREEN>" = ["spawn" "${lib.getExe pkgs.screenshot_persistent}"]; + }; +} diff --git a/modules/by-name/ri/river/module.nix b/modules/by-name/ri/river/module.nix index 38d4bdef..ed7eb363 100644 --- a/modules/by-name/ri/river/module.nix +++ b/modules/by-name/ri/river/module.nix @@ -36,10 +36,21 @@ longRunningPrograms = builtins.concatStringsSep "\n" (builtins.map mkLrProgram cfg.init.backgroundStart); keymapFormat = pkgs.formats.json {}; + keymapGenerate = name: value: + pkgs.runCommandLocal "mk-${name}-and-check" { + nativeBuildInputs = [pkgs.river-mk-keymap]; + preferLocalBuild = true; + + env = { + JSON_FILE = keymapFormat.generate name value; + }; + } '' + river-mk-keymap --keymap "$JSON_FILE" init --dry-run + ''; keymappings = '' err_fail ${riverctl} keyboard-layout ${esa cfg.init.mappings.layout} - err_fail ${lib.getExe pkgs.river-mk-keymap} ${keymapFormat.generate "keys.json" cfg.init.mappings.keymap} + err_fail ${lib.getExe pkgs.river-mk-keymap} ${keymapGenerate "keys.json" cfg.init.mappings.keymap} ''; mkRule = { @@ -175,6 +186,10 @@ in { }; }; + imports = [ + ./keymap.nix + ]; + config = lib.mkIf cfg.enable { services.udev.packages = lib.mkIf cfg.unicodeInput.enable [externalBinaries.qmk_firmware.packages.${system}.qmk_unicode_type]; |