{ config, lib, pkgs, ... }: { options.tmux.enable = lib.mkEnableOption "tmux"; config = lib.mkIf config.tmux.enable { home.packages = with pkgs; [ tmuxp reptyr ]; programs.tmux = { enable = true; historyLimit = 100000; aggressiveResize = true; escapeTime = 0; keyMode = "vi"; # 1-based indexing makes most sense for keyboard layouts (where number row start at 1) baseIndex = 1; terminal = "tmux-256color"; extraConfig = '' # statusbar setw -g monitor-activity on set -g visual-activity on set -g default-command "''${SHELL}" # keybindings # NOTE: I intend to use defaults whenever feasible # - my prefix key is still C-b # - however, I do use vi mode bind r source-file ~/.config/tmux/tmux.conf # reload tmux conf # Splits unbind v unbind s unbind % # vsplit unbind '"' # hsplit bind v split-window -h -c "#{pane_current_path}" bind s split-window -v -c "#{pane_current_path}" bind -r h select-pane -L bind -r j select-pane -D bind -r k select-pane -U bind -r l select-pane -R bind -r H resize-pane -L 4 bind -r J resize-pane -D 4 bind -r K resize-pane -U 4 bind -r L resize-pane -R 4 bind-key -T root F1 select-window -t 1 bind-key -T root F2 select-window -t 2 bind-key -T root F3 select-window -t 3 bind-key -T root F4 select-window -t 4 bind-key -T root F5 select-window -t 5 bind-key -T root F6 select-window -t 6 bind-key -T root F7 select-window -t 7 bind-key -T root F8 select-window -t 8 bind-key -T root F9 select-window -t 9 # bind-key j command-prompt -p "join pane from:" "join-pane -s '%%'" # bind-key s command-prompt -p "send pane to:" "join-pane -t '%%'" bind-key -T root S-F1 join-pane -s :1 bind-key -T root S-F2 join-pane -s :2 bind-key -T root S-F3 join-pane -s :3 bind-key -T root S-F4 join-pane -s :4 bind-key -T root S-F5 join-pane -s :5 bind-key -T root S-F6 join-pane -s :6 bind-key -T root S-F7 join-pane -s :7 bind-key -T root S-F8 join-pane -s :8 bind-key -T root S-F9 join-pane -s :9 # statusbar set -g status-position top set -g status-left-length 20 set -g window-status-separator "" %if "#{==:#{host},desktop-arch}" set -g status-left "#[bg=colour235,fg=colour255] #S #[fg=colour235,bg=default] " set -g status-right "" %else set -g status-left '#h ' set -g status-right '#(uptime | cut -f 4-5 -d " " | cut -f 1 -d ",") %a %l:%M:%S %p %Y-%m-%d' %endif # Vi copypaste mode if-shell "test '\( #{$TMUX_VERSION_MAJOR} -eq 2 -a #{$TMUX_VERSION_MINOR} -ge 4 \)'" 'bind-key -Tcopy-mode-vi v send -X begin-selection; bind-key -Tcopy-mode-vi y send -X copy-selection-and-cancel' if-shell '\( #{$TMUX_VERSION_MAJOR} -eq 2 -a #{$TMUX_VERSION_MINOR} -lt 4\) -o #{$TMUX_VERSION_MAJOR} -le 1' 'bind-key -t vi-copy v begin-selection; bind-key -t vi-copy y copy-selection' if-shell '\( #{$TMUX_VERSION_MAJOR} -eq 2 -a #{$TMUX_VERSION_MINOR} -lt 2\) -o #{$TMUX_VERSION_MAJOR} -le 1' 'set-option -g status-utf8 on' set -g allow-passthrough on set -s extended-keys on set -as terminal-features 'xterm*:extkeys' ''; }; }; }