nix-conf/system/modules/tmux.nix
2025-05-05 13:37:38 +08:00

107 lines
2.9 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ pkgs, config, ... }:
let
getIconScript = pkgs.writeShellScriptBin "get-icon" (
builtins.readFile ../../home/config/scripts/getIcons.sh
);
prefixKey = "C-Space";
tmuxConfigPath = "/etc/tmux.conf";
in
{
environment.variables = {
TMUXINATOR_CONFIG = "/etc/tmuxinator";
};
environment.etc = {
"tmuxinator/tmux.yaml" = {
source = ../../home/config/tmux.yaml;
mode = "0444";
};
};
environment.systemPackages = with pkgs; [
tmuxinator
];
programs = {
tmux = {
enable = true;
escapeTime = 0;
plugins = with pkgs; [
tmuxPlugins.vim-tmux-navigator
tmuxPlugins.resurrect
tmuxPlugins.continuum
tmuxPlugins.catppuccin
tmuxPlugins.yank
];
extraConfig = ''
set -g allow-passthrough on
set -s set-clipboard on
set-option -s set-clipboard on
set -g status "on"
set -g status-style fg=default,bg=default
set -g status-position top
set -g status-justify "left"
set -g status-left "#[fg=#84977f,bg=default,bold] session: #S"
set -g status-right " #[fg=#828bb8,bg=default,bold]${config.networking.hostName} "
setw -g window-status-format "#[fg=#171616,bg=default] #[fg=#495361,bg=default]#(${getIconScript}/get-icon #I)#W"
setw -g window-status-current-format "#[fg=#7e93a9,bg=default] #[fg=#7e93a9,bg=default,bold]#(${getIconScript}/get-icon #I) #W"
set -g default-terminal "xterm-256color"
set -ga terminal-overrides ",*256col*:Tc"
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q'
set-environment -g COLORTERM "truecolor"
unbind C-b
set -g prefix ${prefixKey}
bind-key ${prefixKey} send-prefix
# Set Window start at 1
set -g base-index 1
set -g pane-base-index 1
set-window-option -g pane-base-index 1
set-option -g renumber-windows on
# Switch Windows (Shift + Alt + h/l)
bind -n M-H previous-window
bind -n M-L next-window
unbind %
bind | split-window -h -c "#{pane_current_path}"
unbind '"'
bind - split-window -v -c "#{pane_current_path}"
unbind r
bind r source-file ${tmuxConfigPath}
bind -r j resize-pane -D 5
bind -r k resize-pane -U 5
bind -r l resize-pane -R 5
bind -r h resize-pane -L 5
bind -r m resize-pane -Z
set -g mouse on
set-window-option -g mode-keys vi
bind-key -T copy-mode-vi 'v' send -X begin-selection
bind-key -T copy-mode-vi 'y' send -X copy-selection
unbind -T copy-mode-vi MouseDragEnd1Pane
unbind f
bind-key -r f run-shell "tmux neww tmux-sessionizer"
set -g @resurrect-capture-pane-contents 'on'
set -g @continuum-restore 'on'
set -g @catppuccin-flavour 'macchiato'
'';
};
};
}