From 2aff2a28ff859771b68fcec9a83e4d67fccd565d Mon Sep 17 00:00:00 2001
From: Oliver Davies <oliver@oliverdavies.uk>
Date: Tue, 1 Nov 2022 20:20:48 +0000
Subject: [PATCH] feat: re-add vim-tmux-navigator

---
 nixpkgs/home-manager/modules/common.nix |  1 +
 nixpkgs/home-manager/modules/tmux.nix   | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/nixpkgs/home-manager/modules/common.nix b/nixpkgs/home-manager/modules/common.nix
index baec0a1b..233b2305 100644
--- a/nixpkgs/home-manager/modules/common.nix
+++ b/nixpkgs/home-manager/modules/common.nix
@@ -72,6 +72,7 @@
       vimPlugins.vim-repeat
       vimPlugins.vim-surround
       vimPlugins.vim-test
+      vimPlugins.vim-tmux-navigator
 
       # Debugging
       vimPlugins.nvim-dap
diff --git a/nixpkgs/home-manager/modules/tmux.nix b/nixpkgs/home-manager/modules/tmux.nix
index 29094f1a..d034696b 100644
--- a/nixpkgs/home-manager/modules/tmux.nix
+++ b/nixpkgs/home-manager/modules/tmux.nix
@@ -65,10 +65,28 @@
 
       # Remove delay when switching Vim modes.
       set -sg escape-time 0
+
+      # Smart pane switching with awareness of Vim splits.
+      # See: https://github.com/christoomey/vim-tmux-navigator
+      is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
+        | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
+
+      bind-key -n 'C-\\' if-shell "$is_vim" 'send-keys C-\\\\' 'select-pane -l'
+      bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
+      bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
+      bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
+      bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'
+
+      bind-key -T copy-mode-vi 'C-h' select-pane -L
+      bind-key -T copy-mode-vi 'C-j' select-pane -D
+      bind-key -T copy-mode-vi 'C-k' select-pane -U
+      bind-key -T copy-mode-vi 'C-l' select-pane -R
+      bind-key -T copy-mode-vi 'C-\' select-pane -l
     '';
 
     plugins = with pkgs; [
       tmuxPlugins.resurrect
+      tmuxPlugins.vim-tmux-navigator
       tmuxPlugins.yank
     ];
   };