summaryrefslogtreecommitdiffstats
path: root/common/nixvim.nix
diff options
context:
space:
mode:
authorMinijackson <minijackson@riseup.net>2024-05-15 22:46:01 +0200
committerMinijackson <minijackson@riseup.net>2024-05-15 22:46:01 +0200
commit9450dca78f73c920fd668cd3c9150ae397608816 (patch)
tree7da7daad43a3c1493e3f0c40551ff61beaa121a5 /common/nixvim.nix
parenta2a82bf228bf2efbe7ca4861dc9b400b04ba407d (diff)
downloadnixos-config-reborn-9450dca78f73c920fd668cd3c9150ae397608816.tar.gz
nixos-config-reborn-9450dca78f73c920fd668cd3c9150ae397608816.zip
nixvim: add unimpaired-style option toggle keymaps
Diffstat (limited to 'common/nixvim.nix')
-rw-r--r--common/nixvim.nix236
1 files changed, 139 insertions, 97 deletions
diff --git a/common/nixvim.nix b/common/nixvim.nix
index 526e55d..29e8add 100644
--- a/common/nixvim.nix
+++ b/common/nixvim.nix
@@ -96,87 +96,123 @@ in
96 TSDefinitionUsage.link = "GruvboxAquaSign"; 96 TSDefinitionUsage.link = "GruvboxAquaSign";
97 }; 97 };
98 98
99 keymaps = [ 99 keymaps =
100 { 100 let
101 key = "<leader>fu"; 101 toggle = key: option: {
102 action = "require('telescope').extensions.undo.undo"; 102 key = "yo${key}";
103 lua = true; 103 action = "<Cmd>setlocal ${option}! ${option}?<CR>";
104 options = { 104 options.desc = "Toggle ${option}";
105 silent = true;
106 desc = "Telescope undo";
107 }; 105 };
108 } 106 in
109 107 [
110 { 108 {
111 key = "-"; 109 key = "<leader>fu";
112 action = "require('oil').open"; 110 action = "require('telescope').extensions.undo.undo";
113 lua = true; 111 lua = true;
114 options.desc = "Open parent directory"; 112 options = {
115 } 113 silent = true;
116 114 desc = "Telescope undo";
117 # TODO: add "] " and "[ " 115 };
118 116 }
119 # Gitsigns 117
120 118 {
121 # TODO: that was not exactly that 119 key = "-";
122 # { 120 action = "require('oil').open";
123 # key = "]g"; 121 lua = true;
124 # action = "require('gitsigns').next_hunk"; 122 options.desc = "Open parent directory";
125 # lua = true; 123 }
126 # } 124
127 125 # TODO: add "] " and "[ "
128 # TODO: noremap? buffer local? silent? 126
129 { 127 # Gitsigns
130 key = "<leader>gs"; 128
131 action = "require('gitsigns').stage_hunk"; 129 # TODO: that was not exactly that
132 lua = true; 130 # {
133 options.desc = "Stage hunk"; 131 # key = "]g";
134 } 132 # action = "require('gitsigns').next_hunk";
135 133 # lua = true;
136 { 134 # }
137 key = "<leader>gr"; 135
138 action = "require('gitsigns').reset_hunk"; 136 # TODO: noremap? buffer local? silent?
139 lua = true; 137 {
140 options.desc = "Reset hunk"; 138 key = "<leader>gs";
141 } 139 action = "require('gitsigns').stage_hunk";
142 140 lua = true;
143 # TODO: visual stage/reset 141 options.desc = "Stage hunk";
144 142 }
145 { 143
146 key = "<leader>gS"; 144 {
147 action = "require('gitsigns').stage_buffer"; 145 key = "<leader>gr";
148 lua = true; 146 action = "require('gitsigns').reset_hunk";
149 options.desc = "Stage buffer"; 147 lua = true;
150 } 148 options.desc = "Reset hunk";
151 149 }
152 { 150
153 key = "<leader>gR"; 151 # TODO: visual stage/reset
154 action = "require('gitsigns').reset_buffer"; 152
155 lua = true; 153 {
156 options.desc = "Stage buffer"; 154 key = "<leader>gS";
157 } 155 action = "require('gitsigns').stage_buffer";
158 156 lua = true;
159 { 157 options.desc = "Stage buffer";
160 key = "<leader>gu"; 158 }
161 action = "require('gitsigns').undo_stage_hunk"; 159
162 lua = true; 160 {
163 options.desc = "Undo stage hunk"; 161 key = "<leader>gR";
164 } 162 action = "require('gitsigns').reset_buffer";
165 163 lua = true;
166 { 164 options.desc = "Stage buffer";
167 key = "<leader>gp"; 165 }
168 action = "require('gitsigns').preview_hunk_inline"; 166
169 lua = true; 167 {
170 options.desc = "Preview hunk"; 168 key = "<leader>gu";
171 } 169 action = "require('gitsigns').undo_stage_hunk";
172 170 lua = true;
173 { 171 options.desc = "Undo stage hunk";
174 key = "<leader>gb"; 172 }
175 action = "function() require('gitsigns').blame_line { full = true } end"; 173
176 lua = true; 174 {
177 options.desc = "Blame line"; 175 key = "<leader>gp";
178 } 176 action = "require('gitsigns').preview_hunk_inline";
179 ]; 177 lua = true;
178 options.desc = "Preview hunk";
179 }
180
181 {
182 key = "<leader>gb";
183 action = "function() require('gitsigns').blame_line { full = true } end";
184 lua = true;
185 options.desc = "Blame line";
186 }
187
188 # Toggle options
189 (toggle "c" "cursorline")
190 (toggle "C" "cursorcolumn")
191 (toggle "h" "hlsearch")
192 (toggle "i" "ignorecase")
193 (toggle "l" "list")
194 (toggle "n" "number")
195 (toggle "r" "relativenumber")
196 (toggle "s" "spell")
197 (toggle "w" "wrap")
198
199 {
200 key = "yod";
201 action = ''
202 function()
203 if vim.wo.diff then
204 vim.cmd.diffoff()
205 print('diffoff')
206 else
207 vim.cmd.diffthis()
208 print('diffthis')
209 end
210 end
211 '';
212 lua = true;
213 options.desc = "Toggle diff";
214 }
215 ];
180 216
181 # TODO: 217 # TODO:
182 # extraPlugins = with pkgs.unstable.vimPlugins; [ 218 # extraPlugins = with pkgs.unstable.vimPlugins; [
@@ -308,6 +344,10 @@ in
308 triggers = [ 344 triggers = [
309 { 345 {
310 mode = "n"; 346 mode = "n";
347 keys = "yo";
348 }
349 {
350 mode = "n";
311 keys = "["; 351 keys = "[";
312 } 352 }
313 { 353 {
@@ -461,23 +501,25 @@ in
461 enable = true; 501 enable = true;
462 lookahead = true; 502 lookahead = true;
463 # selectionModes = "V"; 503 # selectionModes = "V";
464 keymaps = let 504 keymaps =
465 keymap = object: type: { 505 let
466 query = "@${object}.${type}"; 506 keymap = object: type: {
467 desc = "Select ${type} ${object}"; 507 query = "@${object}.${type}";
508 desc = "Select ${type} ${object}";
509 };
510 in
511 {
512 "af" = keymap "function" "outer";
513 "if" = keymap "function" "inner";
514 "aF" = keymap "call" "outer";
515 "iF" = keymap "call" "inner";
516 "aC" = keymap "comment" "outer";
517 "iC" = keymap "comment" "inner";
518 "ab" = keymap "block" "outer";
519 "ib" = keymap "block" "inner";
520 "aa" = keymap "parameter" "outer";
521 "ia" = keymap "parameter" "inner";
468 }; 522 };
469 in {
470 "af" = keymap "function" "outer";
471 "if" = keymap "function" "inner";
472 "aF" = keymap "call" "outer";
473 "iF" = keymap "call" "inner";
474 "aC" = keymap "comment" "outer";
475 "iC" = keymap "comment" "inner";
476 "ab" = keymap "block" "outer";
477 "ib" = keymap "block" "inner";
478 "aa" = keymap "parameter" "outer";
479 "ia" = keymap "parameter" "inner";
480 };
481 }; 523 };
482 }; 524 };
483 }; 525 };
@@ -506,5 +548,5 @@ in
506 ''; 548 '';
507 }; 549 };
508 550
509 config.environment.systemPackages = [config.programs.nixvim.finalPackage]; 551 config.environment.systemPackages = [ config.programs.nixvim.finalPackage ];
510} 552}