From 708056676a639f58c508c34fe986d3c73f11488f Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Sun, 29 Jun 2025 11:52:52 +0200 Subject: {modules/river,pkgs/river-mk-keymap}: Support keymap descriptions That just avoids the visual clutter, caused by the nix store paths. --- modules/by-name/ri/river/keymap.nix | 93 ++++++++++++---------- pkgs/by-name/ri/river-mk-keymap/contrib/init.json | 5 +- pkgs/by-name/ri/river-mk-keymap/src/key_map/mod.rs | 10 ++- 3 files changed, 64 insertions(+), 44 deletions(-) diff --git a/modules/by-name/ri/river/keymap.nix b/modules/by-name/ri/river/keymap.nix index 420db61a..a80534a7 100644 --- a/modules/by-name/ri/river/keymap.nix +++ b/modules/by-name/ri/river/keymap.nix @@ -7,7 +7,16 @@ }: let index2tag = input: builtins.toString (libraries.base.pow 2 (input - 1)); - mkCommand = name: index: [name (index2tag index)]; + mkTagCommand = name: index: [name (index2tag index)]; + mkSpawn' = pkg: binaryName: args: { + command = [ + "spawn" + "${lib.getExe' pkgs binaryName} ${args}" + ]; + + description = "${binaryName} ${args}"; + }; + mkSpawn = pkg: args: (mkSpawn' pkg pkg.meta.mainProgram args); cfg = config.soispha.programs.river; in { @@ -23,11 +32,11 @@ in { # 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}"]; + "a" = mkSpawn pkgs.alacritty ""; + "b" = mkSpawn pkgs.tskm "open select"; + "k" = mkSpawn pkgs.keepassxc ""; + "s" = mkSpawn pkgs.signal-desktop ""; + "p" = mkSpawn pkgs.screenshot_persistent ""; }; # Client changes @@ -44,14 +53,14 @@ in { # River compositor control. "x" = { "q" = ["exit"]; - "l" = ["spawn" "${lib.getExe pkgs.lock}"]; + "l" = mkSpawn 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"]; + "r" = mkSpawn' pkgs.wireplumber "wpctl" "set-volume @DEFAULT_SINK@ 5%+"; + "l" = mkSpawn' pkgs.wireplumber "wpctl" "set-volume @DEFAULT_SINK@ 5%-"; + "m" = mkSpawn pkgs.mpp "toggle"; }; # Select tags to view. @@ -59,27 +68,27 @@ in { "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; + "1" = mkTagCommand "set-view-tags" 1; + "2" = mkTagCommand "set-view-tags" 2; + "3" = mkTagCommand "set-view-tags" 3; + "4" = mkTagCommand "set-view-tags" 4; + "5" = mkTagCommand "set-view-tags" 5; + "6" = mkTagCommand "set-view-tags" 6; + "7" = mkTagCommand "set-view-tags" 7; + "8" = mkTagCommand "set-view-tags" 8; + "9" = mkTagCommand "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; + "1" = mkTagCommand "toggle-view-tags" 1; + "2" = mkTagCommand "toggle-view-tags" 2; + "3" = mkTagCommand "toggle-view-tags" 3; + "4" = mkTagCommand "toggle-view-tags" 4; + "5" = mkTagCommand "toggle-view-tags" 5; + "6" = mkTagCommand "toggle-view-tags" 6; + "7" = mkTagCommand "toggle-view-tags" 7; + "8" = mkTagCommand "toggle-view-tags" 8; + "9" = mkTagCommand "toggle-view-tags" 9; }; }; @@ -88,29 +97,29 @@ in { "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; + "1" = mkTagCommand "set-focused-tags" 1; + "2" = mkTagCommand "set-focused-tags" 2; + "3" = mkTagCommand "set-focused-tags" 3; + "4" = mkTagCommand "set-focused-tags" 4; + "5" = mkTagCommand "set-focused-tags" 5; + "6" = mkTagCommand "set-focused-tags" 6; + "7" = mkTagCommand "set-focused-tags" 7; + "8" = mkTagCommand "set-focused-tags" 8; + "9" = mkTagCommand "set-focused-tags" 9; }; }; # Audio "" = { - command = ["spawn" "${lib.getExe' pkgs.wireplumber "wpctl"} set-volume @DEFAULT_SINK@ 5%+"]; + command = mkSpawn' pkgs.wireplumber "wpctl" "set-volume @DEFAULT_SINK@ 5%+"; allow_locked = true; }; "" = { - command = ["spawn" "${lib.getExe' pkgs.wireplumber "wpctl"} set-volume @DEFAULT_SINK@ 5%-"]; + command = mkSpawn' pkgs.wireplumber "wpctl" "set-volume @DEFAULT_SINK@ 5%-"; allow_locked = true; }; "" = { - command = ["spawn" "${lib.getExe pkgs.mpp} toggle"]; + command = mkSpawn pkgs.mpp "toggle"; allow_locked = true; }; @@ -119,9 +128,9 @@ in { ">" = ["resize-view"]; # Lock screen. - "" = ["spawn" "${lib.getExe pkgs.lock}"]; + "" = mkSpawn pkgs.lock ""; # Screenshot - "" = ["spawn" "${lib.getExe pkgs.screenshot_persistent}"]; + "" = mkSpawn pkgs.screenshot_persistent ""; }; } diff --git a/pkgs/by-name/ri/river-mk-keymap/contrib/init.json b/pkgs/by-name/ri/river-mk-keymap/contrib/init.json index 7faaeb43..a5f24307 100644 --- a/pkgs/by-name/ri/river-mk-keymap/contrib/init.json +++ b/pkgs/by-name/ri/river-mk-keymap/contrib/init.json @@ -113,10 +113,13 @@ ] }, "m": { - "l": [ + "l": { + "command": [ "spawn", "/nix/store/7h9w2sycqj3i2lp61nibgv7qhvwy3pi9-wireplumber-0.5.10/bin/wpctl set-volume @DEFAULT_SINK@ 5%-" ], + "description": "wpctl set-volume @DEFAULT_SINK@ 5%-" + }, "m": [ "spawn", "/nix/store/08bgv5x7gfhkczf0lgrpim1rw51jlxvn-mpp/bin/mpp toggle" diff --git a/pkgs/by-name/ri/river-mk-keymap/src/key_map/mod.rs b/pkgs/by-name/ri/river-mk-keymap/src/key_map/mod.rs index 60ed41b8..5c89c2e2 100644 --- a/pkgs/by-name/ri/river-mk-keymap/src/key_map/mod.rs +++ b/pkgs/by-name/ri/river-mk-keymap/src/key_map/mod.rs @@ -29,6 +29,9 @@ pub struct KeyConfig { /// Whether to allow this key mapping in the “locked” mode. #[serde(default)] allow_locked: bool, + + /// Use a different description to display this command, instead of the `command`. + description: Option, } impl FromStr for KeyMap { @@ -48,6 +51,7 @@ impl FromStr for KeyMap { .collect::>() .ok_or(anyhow!("A array contained a non-string value: {value:#?}"))?, allow_locked: false, + description: None, } } else if let Some(object) = value.as_object() { if object.contains_key("command") { @@ -100,7 +104,11 @@ impl FromStr for KeyMap { } impl Display for KeyConfig { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.write_str(self.command.join(" ").as_str()) + if let Some(desc) = &self.description { + f.write_str(desc) + } else { + f.write_str(self.command.join(" ").as_str()) + } } } -- cgit 1.4.1