diff --git a/modules/programs/tmux.nix b/modules/programs/tmux.nix index e28145da125..295df490a36 100644 --- a/modules/programs/tmux.nix +++ b/modules/programs/tmux.nix @@ -68,13 +68,21 @@ let bind -r L resize-pane -R ${toString cfg.resizeAmount} ''} - ${optionalString (cfg.shortcut != defaultShortcut) '' - # rebind main key: C-${cfg.shortcut} - unbind C-${defaultShortcut} - set -g prefix C-${cfg.shortcut} - bind ${cfg.shortcut} send-prefix - bind C-${cfg.shortcut} last-window - ''} + ${if cfg.prefix != null + then '' + # rebind main key: ${cfg.prefix} + unbind C-${defaultShortcut} + set -g prefix ${cfg.prefix} + bind ${cfg.prefix} send-prefix + '' + else optionalString (cfg.shortcut != defaultShortcut) '' + # rebind main key: C-${cfg.shortcut} + unbind C-${defaultShortcut} + set -g prefix C-${cfg.shortcut} + bind ${cfg.shortcut} send-prefix + bind C-${cfg.shortcut} last-window + '' + } ${optionalString cfg.disableConfirmationPrompt '' bind-key & kill-window @@ -238,6 +246,15 @@ in ''; }; + prefix = mkOption { + default = null; + example = "C-a"; + type = types.nullOr types.str; + description = '' + Set the prefix key. Overrules the "shortcut" option when set. + ''; + }; + shortcut = mkOption { default = defaultShortcut; example = "a"; diff --git a/tests/modules/programs/tmux/default.nix b/tests/modules/programs/tmux/default.nix index f0a997b7e73..be78c2620a4 100644 --- a/tests/modules/programs/tmux/default.nix +++ b/tests/modules/programs/tmux/default.nix @@ -5,4 +5,6 @@ tmux-secure-socket-enabled = ./secure-socket-enabled.nix; tmux-disable-confirmation-prompt = ./disable-confirmation-prompt.nix; tmux-default-shell = ./default-shell.nix; + tmux-shortcut-without-prefix = ./shortcut-without-prefix.nix; + tmux-prefix = ./prefix.nix; } diff --git a/tests/modules/programs/tmux/prefix.conf b/tests/modules/programs/tmux/prefix.conf new file mode 100644 index 00000000000..31880300236 --- /dev/null +++ b/tests/modules/programs/tmux/prefix.conf @@ -0,0 +1,32 @@ +# ============================================= # +# Start with defaults from the Sensible plugin # +# --------------------------------------------- # +run-shell @sensible_rtp@ +# ============================================= # + +set -g default-terminal "screen" +set -g base-index 0 +setw -g pane-base-index 0 + + + + + +set -g status-keys emacs +set -g mode-keys emacs + + + +# rebind main key: C-a +unbind C-b +set -g prefix C-a +bind C-a send-prefix + + + + +setw -g aggressive-resize off +setw -g clock-mode-style 12 +set -s escape-time 500 +set -g history-limit 2000 + diff --git a/tests/modules/programs/tmux/prefix.nix b/tests/modules/programs/tmux/prefix.nix new file mode 100644 index 00000000000..80ed6964075 --- /dev/null +++ b/tests/modules/programs/tmux/prefix.nix @@ -0,0 +1,26 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + config = { + programs.tmux = { + enable = true; + prefix = "C-a"; + }; + + nixpkgs.overlays = [ + (self: super: { + tmuxPlugins = super.tmuxPlugins // { + sensible = super.tmuxPlugins.sensible // { rtp = "@sensible_rtp@"; }; + }; + }) + ]; + + nmt.script = '' + assertFileExists home-files/.tmux.conf + assertFileContent home-files/.tmux.conf \ + ${./prefix.conf} + ''; + }; +} diff --git a/tests/modules/programs/tmux/shortcut-without-prefix.conf b/tests/modules/programs/tmux/shortcut-without-prefix.conf new file mode 100644 index 00000000000..a8bc59cbb83 --- /dev/null +++ b/tests/modules/programs/tmux/shortcut-without-prefix.conf @@ -0,0 +1,33 @@ +# ============================================= # +# Start with defaults from the Sensible plugin # +# --------------------------------------------- # +run-shell @sensible_rtp@ +# ============================================= # + +set -g default-terminal "screen" +set -g base-index 0 +setw -g pane-base-index 0 + + + + + +set -g status-keys emacs +set -g mode-keys emacs + + + +# rebind main key: C-a +unbind C-b +set -g prefix C-a +bind a send-prefix +bind C-a last-window + + + + +setw -g aggressive-resize off +setw -g clock-mode-style 12 +set -s escape-time 500 +set -g history-limit 2000 + diff --git a/tests/modules/programs/tmux/shortcut-without-prefix.nix b/tests/modules/programs/tmux/shortcut-without-prefix.nix new file mode 100644 index 00000000000..52290c4fc42 --- /dev/null +++ b/tests/modules/programs/tmux/shortcut-without-prefix.nix @@ -0,0 +1,27 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + config = { + programs.tmux = { + enable = true; + shortcut = "a"; + prefix = null; + }; + + nixpkgs.overlays = [ + (self: super: { + tmuxPlugins = super.tmuxPlugins // { + sensible = super.tmuxPlugins.sensible // { rtp = "@sensible_rtp@"; }; + }; + }) + ]; + + nmt.script = '' + assertFileExists home-files/.tmux.conf + assertFileContent home-files/.tmux.conf \ + ${./shortcut-without-prefix.conf} + ''; + }; +}