diff --git a/modules/home-manager/tmux.nix b/modules/home-manager/tmux.nix index 8e402c1..fffa489 100644 --- a/modules/home-manager/tmux.nix +++ b/modules/home-manager/tmux.nix @@ -5,7 +5,7 @@ let # # Written as escapes rather than literal glyphs. These are Private Use Area # codepoints: they render only with a patched font, they survive copy/paste - # badly, and when they get stripped the loss is invisible -- the config still + # badly, and when they get stripped the loss is invisible, the config still # parses, the status bar just quietly loses its separators. Nix has no \u # escape of its own, but fromJSON does. sep = builtins.fromJSON '' @@ -19,28 +19,27 @@ let in { programs.tmux = { + # defaults enable = true; prefix = "C-a"; keyMode = "vi"; mouse = true; # tmux-256color gives truecolor, italics and undercurl in nvim. - # screen-256color has none of them. No terminfo gymnastics needed here -- - # unlike macOS, NixOS ships a current ncurses that has the entry. terminal = "tmux-256color"; - # Default is 500ms. That is the lag you feel leaving insert mode in nvim, + # Default is 500ms. Causes lag you feel when leaving insert mode in nvim, # because tmux is waiting to see whether Esc starts an escape sequence. escapeTime = 10; - # nvim autoread / :checktime react to focus. home-manager defaults to false. + # nvim autoread / :checktime react to focus. focusEvents = true; - # Default is 2000. + # History limit. historyLimit = 50000; - # Window numbers matching the number row. Behaviour change, so opt in. - # baseIndex = 1; + # Window numbers matching the number row. + baseIndex = 1; extraConfig = '' # Status keys @@ -49,16 +48,15 @@ in # Tell tmux the outer terminal can do 24-bit colour (tmux >= 3.2). set -sa terminal-features ",*:RGB" - # --- Shift+Enter / extended keys ----------------------------------- - # Still the open topic; uncommenting these makes tmux forward CSI-u - # sequences unconditionally. Needs tmux >= 3.5 for the format option, - # and a `tmux kill-server` afterwards -- a config reload is not enough. - #set -s extended-keys always - #set -s extended-keys-format csi-u - #set -as terminal-features '*:extkeys' + # Shift+Enter / extended keys + # These make tmux forward CSI-u sequences unconditionally. + # Needs tmux >= 3.5 for the format option, + set -s extended-keys always + set -s extended-keys-format csi-u + set -as terminal-features '*:extkeys' # Status bar options - set -g status-interval 5 # was 1; the clock only has minute resolution + set -g status-interval 5 set -g status-justify left # Clock mode @@ -69,11 +67,9 @@ in set -g status-fg white # Key bindings - # Reload configuration. tmux.conf is a read-only symlink into the nix - # store, so this only picks up changes after `home-manager switch`. bind r source-file ~/.config/tmux/tmux.conf \; display-message "tmux.conf reloaded" - # Panel split and selection -- new panes/windows inherit the cwd + # Panel split and selection, new panes/windows inherit the cwd unbind % unbind '"' bind v split-window -v -c "#{pane_current_path}" @@ -88,7 +84,7 @@ in bind k select-pane -U bind l select-pane -R - # Resize panes -- -r makes them repeatable, hold instead of re-prefixing + # Resize panes bind -r H resize-pane -L 5 bind -r J resize-pane -D 5 bind -r K resize-pane -U 5 @@ -96,7 +92,6 @@ in # Wayland clipboard integration # Copy selection to both clipboard (Ctrl+V / Shift+Insert) and primary (middle-click) - # v/C-v added: you had no way to *start* a selection from the keyboard. bind -T copy-mode-vi v send-keys -X begin-selection bind -T copy-mode-vi C-v send-keys -X rectangle-toggle bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy && wl-copy --primary" @@ -107,7 +102,6 @@ in #set -g set-clipboard on # Kill commands - # Drop the `confirm-before -p "..."` part for the old single keystroke. bind q confirm-before -p "kill window #W? (y/n)" kill-window bind Q confirm-before -p "kill session #S? (y/n)" kill-session