aboutsummaryrefslogtreecommitdiffstats
path: root/modules/by-name/ri
diff options
context:
space:
mode:
Diffstat (limited to 'modules/by-name/ri')
-rw-r--r--modules/by-name/ri/river/keymap.nix127
-rw-r--r--modules/by-name/ri/river/module.nix17
2 files changed, 143 insertions, 1 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}"];
+ };
+}
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];