about summary refs log tree commit diff stats
path: root/modules/by-name/ri/river/keymap.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/by-name/ri/river/keymap.nix')
-rw-r--r--modules/by-name/ri/river/keymap.nix127
1 files changed, 127 insertions, 0 deletions
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}"];
+  };
+}