summaryrefslogtreecommitdiffstats
path: root/tmux.nix
blob: 9ed3ffd0ad8a266b886c269bd488b8ef3ec4e096 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
{
  config,
  pkgs,
  ...
}:
{
  programs.tmux = {
    enable = true;
    shell = "${pkgs.fish}/bin/fish";
    terminal = "xterm-ghostty";
    historyLimit = 10000;
    baseIndex = 1;
    clock24 = true;
    disableConfirmationPrompt = true;
    mouse = true;
    newSession = true;
    plugins = with pkgs.tmuxPlugins; [
      sensible
      vim-tmux-navigator
    ];

    extraConfig = ''
      unbind %
      unbind '"'
      bind -n M-\\ split-window -h -c "#{pane_current_path}"
      bind -n M-- split-window -v -c "#{pane_current_path}"

      bind -n M-c new-window -c "#{pane_current_path}"
      bind -n M-q kill-window
      bind -n M-w kill-pane
      bind -n M-r command-prompt -I "#W" "rename-window '%%'"
      bind -n M-Space display-popup -E "\
      tmux list-sessions -F '#{session_name}' 2>/dev/null | \
      fzf --reverse \
      --header='Alt+Space → Switch or Mreate Session' \
      --border=rounded \
      --height=40% \
      --print-query \
      --preview='tmux capture-pane -p -t {} 2>/dev/null || echo \"(new session)\"' | \
      tail -1 | \
      xargs -I {} sh -c '\
      if tmux has-session -t \"{}\" 2>/dev/null; then \
      tmux switch-client -t \"{}\"; \
      else \
      tmux new-session -d -s \"{}\" && tmux switch-client -t \"{}\"; \
      fi' \
      set -g escape-time 0
      set -sg repeat-time 1000
      bind r source-file ~/.config/tmux/tmux.conf \; display "Monfig reloaded!"


      bind -n M-1 select-window -t 1
      bind -n M-2 select-window -t 2
      bind -n M-3 select-window -t 3
      bind -n M-4 select-window -t 4
      bind -n M-5 select-window -t 5
      bind -n M-6 select-window -t 6
      bind -n M-7 select-window -t 7
      bind -n M-8 select-window -t 8
      bind -n M-9 select-window -t 9

      bind -n M-h select-pane -L
      bind -n M-j select-pane -D
      bind -n M-k select-pane -U
      bind -n M-l select-pane -R

      bind -n M-H swap-pane -U
      bind -n M-J swap-pane -D
      bind -n M-K swap-pane -U
      bind -n M-L swap-pane -D

    '';
  };

  home.packages = with pkgs; [
    tmux
  ];
}