mirror of
				https://github.com/nmasur/dotfiles
				synced 2025-11-04 01:13:15 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			138 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  config,
 | 
						|
  pkgs,
 | 
						|
  lib,
 | 
						|
  ...
 | 
						|
}:
 | 
						|
{
 | 
						|
 | 
						|
  options.tmux.enable = lib.mkEnableOption "Tmux terminal multiplexer";
 | 
						|
 | 
						|
  config = lib.mkIf config.tmux.enable {
 | 
						|
 | 
						|
    programs.tmux = {
 | 
						|
      enable = true;
 | 
						|
      baseIndex = 1; # Start windows and panes at 1
 | 
						|
      escapeTime = 0; # Wait time after escape is input
 | 
						|
      historyLimit = 100000;
 | 
						|
      keyMode = "vi";
 | 
						|
      newSession = true; # Automatically spawn new session
 | 
						|
      plugins = [ ];
 | 
						|
      resizeAmount = 10;
 | 
						|
      shell = "${pkgs.fish}/bin/fish";
 | 
						|
      terminal = "screen-256color";
 | 
						|
      extraConfig = ''
 | 
						|
        # Horizontal and vertical splits
 | 
						|
        bind \\ split-window -h -c '#{pane_current_path}'
 | 
						|
        bind - split-window -v -c '#{pane_current_path}'
 | 
						|
 | 
						|
        # Move between panes with vi keys
 | 
						|
        bind h select-pane -L
 | 
						|
        bind j select-pane -D
 | 
						|
        bind K select-pane -U
 | 
						|
        bind l select-pane -R
 | 
						|
 | 
						|
        # Split out pane
 | 
						|
        bind b break-pane
 | 
						|
 | 
						|
        # Synchronize panes
 | 
						|
        bind S set-window-option synchronize-panes
 | 
						|
 | 
						|
        # Copy mode works as Vim
 | 
						|
        bind Escape copy-mode
 | 
						|
        bind k copy-mode
 | 
						|
        bind C-[ copy-mode
 | 
						|
 | 
						|
        # Use v to trigger selection
 | 
						|
        bind-key -T copy-mode-vi v send-keys -X begin-selection
 | 
						|
 | 
						|
        # Use y to yank current selection
 | 
						|
        bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
 | 
						|
 | 
						|
        # Enable mouse mode
 | 
						|
        set -g mouse on
 | 
						|
 | 
						|
        # Status bar
 | 
						|
        set -g status-interval 60                # Seconds between refreshes
 | 
						|
        set -g renumber-windows on
 | 
						|
        set-option -g status-position bottom
 | 
						|
 | 
						|
        ## COLORSCHEME: gruvbox dark
 | 
						|
        set-option -g status "on"
 | 
						|
 | 
						|
        # Default statusbar color
 | 
						|
        set-option -g status-style bg=colour237,fg=colour223 # bg=bg1, fg=fg1
 | 
						|
 | 
						|
        # Default window title colors
 | 
						|
        set-window-option -g window-status-style bg=colour214,fg=colour237 # bg=yellow, fg=bg1
 | 
						|
 | 
						|
        # Default window with an activity alert
 | 
						|
        set-window-option -g window-status-activity-style bg=colour237,fg=colour248 # bg=bg1, fg=fg3
 | 
						|
 | 
						|
        # Active window title colors
 | 
						|
        set-window-option -g window-status-current-style bg=red,fg=colour237 # fg=bg1
 | 
						|
 | 
						|
        # Pane border
 | 
						|
        set-option -g pane-active-border-style fg=colour250 #fg2
 | 
						|
        set-option -g pane-border-style fg=colour237 #bg1
 | 
						|
 | 
						|
        # Message infos
 | 
						|
        set-option -g message-style bg=colour239,fg=colour223 # bg=bg2, fg=fg1
 | 
						|
 | 
						|
        # Writing commands inactive
 | 
						|
        set-option -g message-command-style bg=colour239,fg=colour223 # bg=fg3, fg=bg1
 | 
						|
 | 
						|
        # Pane number display
 | 
						|
        set-option -g display-panes-active-colour colour250 #fg2
 | 
						|
        set-option -g display-panes-colour colour237 #bg1
 | 
						|
 | 
						|
        # Clock
 | 
						|
        set-window-option -g clock-mode-colour colour109 #blue
 | 
						|
 | 
						|
        # Bell
 | 
						|
        set-window-option -g window-status-bell-style bg=colour167,fg=colour235 # bg=red, fg=bg
 | 
						|
 | 
						|
        # Theme settings mixed with colors (unfortunately, but there is no cleaner way)
 | 
						|
        set-option -g status-justify "left"
 | 
						|
        set-option -g status-left-style none
 | 
						|
        set-option -g status-left-length "80"
 | 
						|
        set-option -g status-right-style none
 | 
						|
        set-option -g status-right-length "80"
 | 
						|
        set-window-option -g window-status-separator ""
 | 
						|
 | 
						|
        set-option -g status-left "#[fg=colour248, bg=colour241] #S #[fg=colour241, bg=colour237, nobold, noitalics, nounderscore]"
 | 
						|
        set-option -g status-right "#[fg=colour239, bg=colour237, nobold, nounderscore, noitalics]#[fg=colour246,bg=colour239] %Y-%m-%d  %H:%M #[fg=colour248, bg=colour239, nobold, noitalics, nounderscore]"
 | 
						|
 | 
						|
        set-window-option -g window-status-current-format "#[fg=colour237, bg=colour214, nobold, noitalics, nounderscore]#[fg=colour239, bg=colour214] #I #[fg=colour239, bg=colour214, bold] #W #[fg=colour214, bg=colour237, nobold, noitalics, nounderscore]"
 | 
						|
        set-window-option -g window-status-format "#[fg=colour237,bg=colour239,noitalics]#[fg=colour223,bg=colour239] #I #[fg=colour223, bg=colour239] #W #[fg=colour239, bg=colour237, noitalics]"
 | 
						|
      '';
 | 
						|
    };
 | 
						|
 | 
						|
    programs.alacritty.settings = {
 | 
						|
      # shell.args = [
 | 
						|
      #   "--login"
 | 
						|
      #   "--init-command"
 | 
						|
      #   "tmux attach-session -t noah || tmux new-session -s noah"
 | 
						|
      # ];
 | 
						|
      key_bindings = [
 | 
						|
        {
 | 
						|
          key = "H";
 | 
						|
          mods = "Super|Shift";
 | 
						|
          chars = "\\x02p"; # Previous tmux window
 | 
						|
        }
 | 
						|
        {
 | 
						|
          key = "L";
 | 
						|
          mods = "Super|Shift";
 | 
						|
          chars = "\\x02n"; # Next tmux window
 | 
						|
        }
 | 
						|
      ];
 | 
						|
    };
 | 
						|
 | 
						|
    programs.fish.shellAbbrs = {
 | 
						|
      ta = "tmux attach-session";
 | 
						|
      tan = "tmux attach-session -t noah";
 | 
						|
      tnn = "tmux new-session -s noah";
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |