{ config, pkgs, lib, ... }: let cfg = config.dot.tmux; in { options.dot.tmux = { workMode = lib.mkEnableOption "work-specific tmux configuration"; }; config = { programs.tmux = { enable = true; shortcut = "a"; mouse = true; keyMode = "vi"; escapeTime = 0; terminal = "screen-256color"; tmuxp.enable = true; extraConfig = '' set -g display-time 1500 unbind S bind S command-prompt "switch -t %1" # Check if we are in vim is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'" bind-key -n M-K if-shell "$is_vim" "send-keys M-K" "if -F \"#{pane_at_top}\" \"switch-client -p\" \"select-pane -U\"" bind-key -n M-J if-shell "$is_vim" "send-keys M-J" "if -F \"#{pane_at_bottom}\" \"switch-client -n\" \"select-pane -D\"" bind-key -n M-L if-shell "$is_vim" "send-keys M-L" "if -F \"#{pane_at_right}\" \"next-window\" \"select-pane -R\"" bind-key -n M-H if-shell "$is_vim" "send-keys M-H" "if -F \"#{pane_at_left}\" \"previous-window\" \"select-pane -L\"" bind '"' split-window -c "#{pane_current_path}" bind % split-window -h -c "#{pane_current_path}" bind c new-window -a -c "#{pane_current_path}" bind C-g display-popup -E -d "#{pane_current_path}" -xC -yC -w 95% -h 95% "lazygit" bind C-t display-popup -E -xC -yC -w 95% -h 95% "tasksquire" ${lib.optionalString cfg.workMode '' bind C-s display-popup -E "zsh ~/bin/tmuxp_selector.sh" bind C-n display-popup -E -xC -yC -w 95% -h 95% -d "~/Documents/notes/Work/" "vim quick_notes.md" bind C-p display-popup -E -xC -yC -w 95% -h 95% -d "~/Documents/notes/Work/development/" "vim mbpr.md" ''} ####################################### # status line ####################################### set -g status-justify centre set -g status-left "#[bg=#808080,fg=#ffffff,bold] #S #[default]#[bg=#BCBCBC] #{-30:pane_title} " set -g status-left-length 40 set -g status-right "#[bg=#BCBCBC] %H:%M #[bg=#808080,fg=#ffffff] %d.%m.%y " # setw -g window-status-format " #W#F " # setw -g window-status-current-format " #W#F " setw -g window-status-format " #W " setw -g window-status-current-format " #W " setw -g window-status-separator "" ####################################### # colors, taken from vim-lucius ####################################### set -g status-style "bg=#DADADA,fg=#000000" setw -g window-status-style "bg=#BCBCBC,fg=#000000" setw -g window-status-current-style "bg=#808080,fg=#ffffff" setw -g window-status-activity-style "bg=#AFD7AF,fg=#000000" setw -g window-status-bell-style "bg=#AFD7AF,fg=#000000" #setw -g window-status-content-style "bg=#AFD7AF,fg=#000000" set -g pane-active-border-style "bg=#eeeeee,fg=#006699" set -g pane-border-style "bg=#eeeeee,fg=#999999" ''; }; home.shellAliases = { "o" = "tmuxp"; "ol" = "tmuxp load"; }; }; }