{ 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 { "" = { # Change focus "f" = { "t" = ["focus-view" "next"]; "n" = ["focus-view" "previous"]; "" = ["focus-output" "next"]; "" = ["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"]; "" = ["toggle-float"]; "" = ["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 "" = { command = ["spawn" "${lib.getExe' pkgs.wireplumber "wpctl"} set-volume @DEFAULT_SINK@ 5%+"]; allow_locked = true; }; "" = { command = ["spawn" "${lib.getExe' pkgs.wireplumber "wpctl"} set-volume @DEFAULT_SINK@ 5%-"]; allow_locked = true; }; "" = { command = ["spawn" "${lib.getExe pkgs.mpp} toggle"]; allow_locked = true; }; # Mouse ">" = ["move-view"]; ">" = ["resize-view"]; # Lock screen. "" = ["spawn" "${lib.getExe pkgs.lock}"]; # Screenshot "" = ["spawn" "${lib.getExe pkgs.screenshot_persistent}"]; }; }