mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-31 11:02:37 +00:00 
			
		
		
		
	modules/neovim: move all mapping options to
This commit is contained in:
		
					parent
					
						
							
								7647353c40
							
						
					
				
			
			
				commit
				
					
						eb8d75a4ae
					
				
			
		
					 3 changed files with 103 additions and 100 deletions
				
			
		|  | @ -1,6 +1,6 @@ | ||||||
| { | { | ||||||
|   imports = [ |   imports = [ | ||||||
|     ./config.nix |     ./config.nix | ||||||
|     #./options.nix |     ./options.nix | ||||||
|   ]; |   ]; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -0,0 +1,101 @@ | ||||||
|  | {lib, ...}: let | ||||||
|  |   inherit (lib.options) mkOption; | ||||||
|  |   inherit (lib.types) bool str attrsOf nullOr submodule; | ||||||
|  |   inherit (lib.nvim.config) mkBool; | ||||||
|  |   # Most of the keybindings code is highly inspired by pta2002/nixvim. | ||||||
|  |   # Thank you! | ||||||
|  |   mapConfigOptions = { | ||||||
|  |     silent = | ||||||
|  |       mkBool false | ||||||
|  |       "Whether this mapping should be silent. Equivalent to adding <silent> to a map."; | ||||||
|  | 
 | ||||||
|  |     nowait = | ||||||
|  |       mkBool false | ||||||
|  |       "Whether to wait for extra input on ambiguous mappings. Equivalent to adding <nowait> to a map."; | ||||||
|  | 
 | ||||||
|  |     script = | ||||||
|  |       mkBool false | ||||||
|  |       "Equivalent to adding <script> to a map."; | ||||||
|  | 
 | ||||||
|  |     expr = | ||||||
|  |       mkBool false | ||||||
|  |       "Means that the action is actually an expression. Equivalent to adding <expr> to a map."; | ||||||
|  | 
 | ||||||
|  |     unique = | ||||||
|  |       mkBool false | ||||||
|  |       "Whether to fail if the map is already defined. Equivalent to adding <unique> to a map."; | ||||||
|  | 
 | ||||||
|  |     noremap = | ||||||
|  |       mkBool true | ||||||
|  |       "Whether to use the 'noremap' variant of the command, ignoring any custom mappings on the defined action. It is highly advised to keep this on, which is the default."; | ||||||
|  | 
 | ||||||
|  |     desc = mkOption { | ||||||
|  |       type = nullOr str; | ||||||
|  |       default = null; | ||||||
|  |       description = "A description of this keybind, to be shown in which-key, if you have it enabled."; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   mapOption = submodule { | ||||||
|  |     options = | ||||||
|  |       mapConfigOptions | ||||||
|  |       // { | ||||||
|  |         action = mkOption { | ||||||
|  |           type = str; | ||||||
|  |           description = "The action to execute."; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         lua = mkOption { | ||||||
|  |           type = bool; | ||||||
|  |           description = '' | ||||||
|  |             If true, `action` is considered to be lua code. | ||||||
|  |             Thus, it will not be wrapped in `""`. | ||||||
|  |           ''; | ||||||
|  |           default = false; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   mapOptions = mode: | ||||||
|  |     mkOption { | ||||||
|  |       description = "Mappings for ${mode} mode"; | ||||||
|  |       type = attrsOf mapOption; | ||||||
|  |       default = {}; | ||||||
|  |     }; | ||||||
|  | in { | ||||||
|  |   options.vim = { | ||||||
|  |     maps = mkOption { | ||||||
|  |       type = submodule { | ||||||
|  |         options = { | ||||||
|  |           normal = mapOptions "normal"; | ||||||
|  |           insert = mapOptions "insert"; | ||||||
|  |           select = mapOptions "select"; | ||||||
|  |           visual = mapOptions "visual and select"; | ||||||
|  |           terminal = mapOptions "terminal"; | ||||||
|  |           normalVisualOp = mapOptions "normal, visual, select and operator-pending (same as plain 'map')"; | ||||||
|  | 
 | ||||||
|  |           visualOnly = mapOptions "visual only"; | ||||||
|  |           operator = mapOptions "operator-pending"; | ||||||
|  |           insertCommand = mapOptions "insert and command-line"; | ||||||
|  |           lang = mapOptions "insert, command-line and lang-arg"; | ||||||
|  |           command = mapOptions "command-line"; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |       default = {}; | ||||||
|  |       description = '' | ||||||
|  |         Custom keybindings for any mode. | ||||||
|  | 
 | ||||||
|  |         For plain maps (e.g. just 'map' or 'remap') use `maps.normalVisualOp`. | ||||||
|  |       ''; | ||||||
|  | 
 | ||||||
|  |       example = '' | ||||||
|  |         maps = { | ||||||
|  |           normal."<leader>m" = { | ||||||
|  |             silent = true; | ||||||
|  |             action = "<cmd>make<CR>"; | ||||||
|  |           }; # Same as nnoremap <leader>m <silent> <cmd>make<CR> | ||||||
|  |         }; | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | @ -1,77 +1,13 @@ | ||||||
| { | { | ||||||
|   config, |   config, | ||||||
|   pkgs, |  | ||||||
|   lib, |   lib, | ||||||
|   ... |   ... | ||||||
| }: let | }: let | ||||||
|   inherit (lib.options) mkOption mkEnableOption literalMD literalExpression; |   inherit (lib.options) mkOption mkEnableOption literalMD literalExpression; | ||||||
|   inherit (lib.strings) optionalString; |   inherit (lib.strings) optionalString; | ||||||
|   inherit (lib.types) bool str oneOf attrsOf nullOr attrs submodule lines listOf either path; |   inherit (lib.types) str oneOf attrs lines listOf either path; | ||||||
|   inherit (lib.nvim.types) dagOf; |   inherit (lib.nvim.types) dagOf; | ||||||
|   inherit (lib.nvim.lua) listToLuaTable; |   inherit (lib.nvim.lua) listToLuaTable; | ||||||
|   inherit (lib.nvim.config) mkBool; |  | ||||||
| 
 |  | ||||||
|   # Most of the keybindings code is highly inspired by pta2002/nixvim. |  | ||||||
|   # Thank you! |  | ||||||
|   mapConfigOptions = { |  | ||||||
|     silent = |  | ||||||
|       mkBool false |  | ||||||
|       "Whether this mapping should be silent. Equivalent to adding <silent> to a map."; |  | ||||||
| 
 |  | ||||||
|     nowait = |  | ||||||
|       mkBool false |  | ||||||
|       "Whether to wait for extra input on ambiguous mappings. Equivalent to adding <nowait> to a map."; |  | ||||||
| 
 |  | ||||||
|     script = |  | ||||||
|       mkBool false |  | ||||||
|       "Equivalent to adding <script> to a map."; |  | ||||||
| 
 |  | ||||||
|     expr = |  | ||||||
|       mkBool false |  | ||||||
|       "Means that the action is actually an expression. Equivalent to adding <expr> to a map."; |  | ||||||
| 
 |  | ||||||
|     unique = |  | ||||||
|       mkBool false |  | ||||||
|       "Whether to fail if the map is already defined. Equivalent to adding <unique> to a map."; |  | ||||||
| 
 |  | ||||||
|     noremap = |  | ||||||
|       mkBool true |  | ||||||
|       "Whether to use the 'noremap' variant of the command, ignoring any custom mappings on the defined action. It is highly advised to keep this on, which is the default."; |  | ||||||
| 
 |  | ||||||
|     desc = mkOption { |  | ||||||
|       type = nullOr str; |  | ||||||
|       default = null; |  | ||||||
|       description = "A description of this keybind, to be shown in which-key, if you have it enabled."; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   mapOption = submodule { |  | ||||||
|     options = |  | ||||||
|       mapConfigOptions |  | ||||||
|       // { |  | ||||||
|         action = mkOption { |  | ||||||
|           type = str; |  | ||||||
|           description = "The action to execute."; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         lua = mkOption { |  | ||||||
|           type = bool; |  | ||||||
|           description = '' |  | ||||||
|             If true, `action` is considered to be lua code. |  | ||||||
|             Thus, it will not be wrapped in `""`. |  | ||||||
|           ''; |  | ||||||
|           default = false; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   mapOptions = mode: |  | ||||||
|     mkOption { |  | ||||||
|       description = "Mappings for ${mode} mode"; |  | ||||||
|       type = attrsOf mapOption; |  | ||||||
|       default = {}; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|   cfg = config.vim; |   cfg = config.vim; | ||||||
| in { | in { | ||||||
|   options.vim = { |   options.vim = { | ||||||
|  | @ -109,40 +45,6 @@ in { | ||||||
|       description = "Set containing global variable values"; |       description = "Set containing global variable values"; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     maps = mkOption { |  | ||||||
|       type = submodule { |  | ||||||
|         options = { |  | ||||||
|           normal = mapOptions "normal"; |  | ||||||
|           insert = mapOptions "insert"; |  | ||||||
|           select = mapOptions "select"; |  | ||||||
|           visual = mapOptions "visual and select"; |  | ||||||
|           terminal = mapOptions "terminal"; |  | ||||||
|           normalVisualOp = mapOptions "normal, visual, select and operator-pending (same as plain 'map')"; |  | ||||||
| 
 |  | ||||||
|           visualOnly = mapOptions "visual only"; |  | ||||||
|           operator = mapOptions "operator-pending"; |  | ||||||
|           insertCommand = mapOptions "insert and command-line"; |  | ||||||
|           lang = mapOptions "insert, command-line and lang-arg"; |  | ||||||
|           command = mapOptions "command-line"; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|       default = {}; |  | ||||||
|       description = '' |  | ||||||
|         Custom keybindings for any mode. |  | ||||||
| 
 |  | ||||||
|         For plain maps (e.g. just 'map' or 'remap') use `maps.normalVisualOp`. |  | ||||||
|       ''; |  | ||||||
| 
 |  | ||||||
|       example = '' |  | ||||||
|         maps = { |  | ||||||
|           normal."<leader>m" = { |  | ||||||
|             silent = true; |  | ||||||
|             action = "<cmd>make<CR>"; |  | ||||||
|           }; # Same as nnoremap <leader>m <silent> <cmd>make<CR> |  | ||||||
|         }; |  | ||||||
|       ''; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     configRC = mkOption { |     configRC = mkOption { | ||||||
|       type = oneOf [(dagOf lines) str]; |       type = oneOf [(dagOf lines) str]; | ||||||
|       default = {}; |       default = {}; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue