97 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| {
 | |
|   config,
 | |
|   lib,
 | |
|   pkgs,
 | |
|   ...
 | |
| }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let
 | |
|   cfg = config.features.cli.tmux;
 | |
| in
 | |
| {
 | |
|   options.features.cli.tmux.enable = mkEnableOption "Enable tmux";
 | |
| 
 | |
|   config = mkIf cfg.enable {
 | |
|     programs.tmux = {
 | |
|       enable = true;
 | |
| 
 | |
|       terminal = "tmux-256color";
 | |
| 
 | |
|       extraConfig = ''
 | |
|         set-option -g status-keys "vi"
 | |
|         set-option -sa terminal-features "''${TERM}:RGB"
 | |
| 
 | |
|         bind -n S-Left resize-pane -L 2
 | |
|         bind -n S-Right resize-pane -R 2
 | |
|         bind -n S-Down resize-pane -D 1
 | |
|         bind -n S-Up resize-pane -U 1
 | |
| 
 | |
|         bind -n C-Left resize-pane -L 10
 | |
|         bind -n C-Right resize-pane -R 10
 | |
|         bind -n C-Down resize-pane -D 5
 | |
|         bind -n C-Up resize-pane -U 5
 | |
| 
 | |
|         # Status line customisation
 | |
|         set-option -g status-left ""
 | |
|         set-option -g status-right " #{session_name}"
 | |
|         set-option -g status-right-length 100
 | |
|         set-option -g status-style "fg=#7C7D83 bg=default"
 | |
|         set-option -g window-status-activity-style none
 | |
|         set-option -g window-status-current-style "fg=#E9E9EA"
 | |
| 
 | |
|         bind c new-window -c "#{pane_current_path}"
 | |
| 
 | |
|         set -g base-index 1
 | |
|         set -g pane-base-index 1
 | |
|         set -g renumber-windows on
 | |
| 
 | |
|         # Break a pane into a new window.
 | |
|         bind-key b break-pane -d
 | |
|         bind-key J command-prompt -p "join pane from: "  "join-pane -h -s '%%'"
 | |
| 
 | |
|         bind-key C-j choose-tree
 | |
| 
 | |
|         set-window-option -g mode-keys vi
 | |
|         bind -T copy-mode-vi v send-keys -X begin-selection
 | |
|         bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'
 | |
| 
 | |
|         bind C-j split-window -v "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t"
 | |
| 
 | |
|         bind-key K run-shell 'tmux switch-client -n \; kill-session -t "$(tmux display-message -p "#S")" || tmux kill-session'
 | |
| 
 | |
|         # Allow clearing screen with ctrl-l by using <prefix> C-l
 | |
|         bind C-l send-keys "C-l"
 | |
|         bind C-k send-keys "C-k"
 | |
| 
 | |
|         # Enable mouse support.
 | |
|         setw -g mouse on
 | |
| 
 | |
|         # Remove delay when switching Vim modes.
 | |
|         set -sg escape-time 0
 | |
| 
 | |
|         set-option -g pane-active-border-style "fg=#1f2335"
 | |
|         set-option -g pane-border-style "fg=#1f2335"
 | |
| 
 | |
|         # Vim-like pane navigation.
 | |
|         bind ^ last-window
 | |
|         bind h select-pane -L
 | |
|         bind j select-pane -D
 | |
|         bind k select-pane -U
 | |
|         bind l select-pane -R
 | |
| 
 | |
|         bind-key -r f run-shell "tmux new-window tmux-sessionizer"
 | |
| 
 | |
|         bind-key -r D new-window -c "#{pane_current_path}" "[[ -e TODO.md ]] && nvim TODO.md || nvim ~/Documents/wiki/todo.txt"
 | |
|         bind-key -r N new-window "notes"
 | |
|         bind-key -r W split-window -h -c ~/Documents/wiki "nvim '+Telescope find_files'"
 | |
|       '';
 | |
| 
 | |
|       plugins = with pkgs.tmuxPlugins; [
 | |
|         resurrect
 | |
|         yank
 | |
|       ];
 | |
|     };
 | |
|   };
 | |
| }
 |