mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-31 19:12:38 +00:00 
			
		
		
		
	visuals/fidget: migrate to newer configuration with custom setup options
This commit is contained in:
		
					parent
					
						
							
								868f808709
							
						
					
				
			
			
				commit
				
					
						042af02955
					
				
			
		
					 6 changed files with 411 additions and 34 deletions
				
			
		|  | @ -113,24 +113,9 @@ in { | ||||||
|       ''; |       ''; | ||||||
|     }) |     }) | ||||||
| 
 | 
 | ||||||
|     (mkIf cfg.fidget-nvim.enable { |  | ||||||
|       vim.startPlugins = ["fidget-nvim"]; |  | ||||||
|       vim.luaConfigRC.fidget-nvim = nvim.dag.entryAnywhere '' |  | ||||||
|         require"fidget".setup{ |  | ||||||
|           align = { |  | ||||||
|             bottom = ${boolToString cfg.fidget-nvim.align.bottom}, |  | ||||||
|             right = ${boolToString cfg.fidget-nvim.align.right}, |  | ||||||
|           }, |  | ||||||
|           window = { |  | ||||||
|             blend = 0, |  | ||||||
|           }, |  | ||||||
|         } |  | ||||||
|       ''; |  | ||||||
|     }) |  | ||||||
| 
 |  | ||||||
|     (mkIf cfg.highlight-undo.enable { |     (mkIf cfg.highlight-undo.enable { | ||||||
|       vim.startPlugins = ["highlight-undo"]; |       vim.startPlugins = ["highlight-undo"]; | ||||||
|       vim.luaConfigRC.fidget-nvim = nvim.dag.entryAnywhere '' |       vim.luaConfigRC.highlight-undo = nvim.dag.entryAnywhere '' | ||||||
|         require('highlight-undo').setup({ |         require('highlight-undo').setup({ | ||||||
|           duration = ${toString cfg.highlight-undo.duration}, |           duration = ${toString cfg.highlight-undo.duration}, | ||||||
|           highlight_for_count = ${boolToString cfg.highlight-undo.highlightForCount}, |           highlight_for_count = ${boolToString cfg.highlight-undo.highlightForCount}, | ||||||
|  |  | ||||||
|  | @ -2,5 +2,6 @@ | ||||||
|   imports = [ |   imports = [ | ||||||
|     ./config.nix |     ./config.nix | ||||||
|     ./visuals.nix |     ./visuals.nix | ||||||
|  |     ./fidget | ||||||
|   ]; |   ]; | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								modules/visuals/fidget/config.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								modules/visuals/fidget/config.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   lib, | ||||||
|  |   ... | ||||||
|  | }: let | ||||||
|  |   inherit (lib) mkIf nvim; | ||||||
|  |   cfg = config.vim.visuals.fidget-nvim; | ||||||
|  | in { | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     vim.startPlugins = ["fidget-nvim"]; | ||||||
|  | 
 | ||||||
|  |     vim.luaConfigRC.fidget-nvim = nvim.dag.entryAnywhere '' | ||||||
|  |       require'fidget'.setup(${nvim.lua.toLuaObject cfg.setupOpts}) | ||||||
|  |     ''; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								modules/visuals/fidget/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								modules/visuals/fidget/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | { | ||||||
|  |   imports = [ | ||||||
|  |     ./config.nix | ||||||
|  |     ./fidget.nix | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										387
									
								
								modules/visuals/fidget/fidget.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										387
									
								
								modules/visuals/fidget/fidget.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,387 @@ | ||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   lib, | ||||||
|  |   ... | ||||||
|  | }: let | ||||||
|  |   inherit (lib) mkEnableOption mkOption mapAttrs toUpper nvim types; | ||||||
|  |   rawLua = lua: {__raw = lua;}; | ||||||
|  | in { | ||||||
|  |   options.vim.visuals.fidget-nvim = { | ||||||
|  |     enable = mkEnableOption "nvim LSP UI element [fidget-nvim]"; | ||||||
|  | 
 | ||||||
|  |     setupOpts = nvim.types.mkPluginSetupOption "Nvim Tree" { | ||||||
|  |       progress = { | ||||||
|  |         poll_rate = mkOption { | ||||||
|  |           description = "How frequently to poll for LSP progress messages"; | ||||||
|  |           type = types.int; | ||||||
|  |           default = 0; | ||||||
|  |         }; | ||||||
|  |         suppress_on_insert = mkOption { | ||||||
|  |           description = "Suppress new messages when in insert mode"; | ||||||
|  |           type = types.bool; | ||||||
|  |           default = false; | ||||||
|  |         }; | ||||||
|  |         ignore_done_already = mkOption { | ||||||
|  |           description = "Ignore new tasks that are already done"; | ||||||
|  |           type = types.bool; | ||||||
|  |           default = false; | ||||||
|  |         }; | ||||||
|  |         ignore_empty_message = mkOption { | ||||||
|  |           description = "Ignore new tasks with empty messages"; | ||||||
|  |           type = types.bool; | ||||||
|  |           default = false; | ||||||
|  |         }; | ||||||
|  |         clear_on_detach = mkOption { | ||||||
|  |           description = "Clear notification group when LSP server detaches"; | ||||||
|  |           type = types.bool; | ||||||
|  |           default = true; | ||||||
|  |           apply = clear: | ||||||
|  |             if clear | ||||||
|  |             then | ||||||
|  |               rawLua '' | ||||||
|  |                 function(client_id) | ||||||
|  |                   local client = vim.lsp.get_client_by_id(client_id) | ||||||
|  |                   return client and client.name or nil | ||||||
|  |                 end | ||||||
|  |               '' | ||||||
|  |             else null; | ||||||
|  |         }; | ||||||
|  |         notification_group = mkOption { | ||||||
|  |           description = "How to get a progress message's notification group key"; | ||||||
|  |           type = types.str; | ||||||
|  |           default = '' | ||||||
|  |             function(msg) | ||||||
|  |               return msg.lsp_client.name | ||||||
|  |             end | ||||||
|  |           ''; | ||||||
|  |           apply = rawLua; | ||||||
|  |         }; | ||||||
|  |         ignore = mkOption { | ||||||
|  |           description = "Ignore LSP servers by name"; | ||||||
|  |           type = types.listOf types.str; | ||||||
|  |           default = []; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         display = { | ||||||
|  |           render_limit = mkOption { | ||||||
|  |             description = "Maximum number of messages to render"; | ||||||
|  |             type = types.int; | ||||||
|  |             default = 16; | ||||||
|  |           }; | ||||||
|  |           done_ttl = mkOption { | ||||||
|  |             description = "How long a message should persist when complete"; | ||||||
|  |             type = types.int; | ||||||
|  |             default = 3; | ||||||
|  |           }; | ||||||
|  |           done_icon = mkOption { | ||||||
|  |             description = "Icon shown when LSP progress tasks are completed"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = "✓"; | ||||||
|  |           }; | ||||||
|  |           done_style = mkOption { | ||||||
|  |             description = "Highlight group for completed LSP tasks"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = "Constant"; | ||||||
|  |           }; | ||||||
|  |           progress_ttl = mkOption { | ||||||
|  |             description = "How long a message should persist when in progress"; | ||||||
|  |             type = types.int; | ||||||
|  |             default = 99999; | ||||||
|  |           }; | ||||||
|  |           progress_icon = { | ||||||
|  |             pattern = mkOption { | ||||||
|  |               description = "Pattern shown when LSP progress tasks are in progress"; | ||||||
|  |               type = types.enum [ | ||||||
|  |                 "dots" | ||||||
|  |                 "dots_negative" | ||||||
|  |                 "dots_snake" | ||||||
|  |                 "dots_footsteps" | ||||||
|  |                 "dots_hop" | ||||||
|  |                 "line" | ||||||
|  |                 "pipe" | ||||||
|  |                 "dots_ellipsis" | ||||||
|  |                 "dots_scrolling" | ||||||
|  |                 "star" | ||||||
|  |                 "flip" | ||||||
|  |                 "hamburger" | ||||||
|  |                 "grow_vertical" | ||||||
|  |                 "grow_horizontal" | ||||||
|  |                 "noise" | ||||||
|  |                 "dots_bounce" | ||||||
|  |                 "triangle" | ||||||
|  |                 "arc" | ||||||
|  |                 "circle" | ||||||
|  |                 "square_corners" | ||||||
|  |                 "circle_quarters" | ||||||
|  |                 "circle_halves" | ||||||
|  |                 "dots_toggle" | ||||||
|  |                 "box_toggle" | ||||||
|  |                 "arrow" | ||||||
|  |                 "zip" | ||||||
|  |                 "bouncing_bar" | ||||||
|  |                 "bouncing_ball" | ||||||
|  |                 "clock" | ||||||
|  |                 "earth" | ||||||
|  |                 "moon" | ||||||
|  |                 "dots_pulse" | ||||||
|  |                 "meter" | ||||||
|  |               ]; | ||||||
|  |               default = "dots"; | ||||||
|  |             }; | ||||||
|  |             period = mkOption { | ||||||
|  |               description = "Period of the pattern"; | ||||||
|  |               type = types.int; | ||||||
|  |               default = 1; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |           progress_style = mkOption { | ||||||
|  |             description = "Highlight group for in-progress LSP tasks"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = "WarningMsg"; | ||||||
|  |           }; | ||||||
|  |           group_style = mkOption { | ||||||
|  |             description = "Highlight group for group name (LSP server name)"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = "Title"; | ||||||
|  |           }; | ||||||
|  |           icon_style = mkOption { | ||||||
|  |             description = "Highlight group for group icons"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = "Question"; | ||||||
|  |           }; | ||||||
|  |           priority = mkOption { | ||||||
|  |             description = "Priority of the progress notification"; | ||||||
|  |             type = types.int; | ||||||
|  |             default = 30; | ||||||
|  |           }; | ||||||
|  |           skip_history = mkOption { | ||||||
|  |             description = "Skip adding messages to history"; | ||||||
|  |             type = types.bool; | ||||||
|  |             default = true; | ||||||
|  |           }; | ||||||
|  |           format_message = mkOption { | ||||||
|  |             description = "How to format a progress message"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = '' | ||||||
|  |               require("fidget.progress.display").default_format_message | ||||||
|  |             ''; | ||||||
|  |             apply = rawLua; | ||||||
|  |           }; | ||||||
|  |           format_annote = mkOption { | ||||||
|  |             description = "How to format a progress annotation"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = '' | ||||||
|  |               function(msg) return msg.title end | ||||||
|  |             ''; | ||||||
|  |             apply = rawLua; | ||||||
|  |           }; | ||||||
|  |           format_group_name = mkOption { | ||||||
|  |             description = "How to format a progress notification group's name"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = '' | ||||||
|  |               function(group) return tostring(group) end | ||||||
|  |             ''; | ||||||
|  |             apply = rawLua; | ||||||
|  |           }; | ||||||
|  |           overrides = mkOption { | ||||||
|  |             description = "Override options from the default notification config"; | ||||||
|  |             type = types.attrsOf types.str; | ||||||
|  |             default = {rust_analyzer = "{ name = 'rust-analyzer' }";}; | ||||||
|  |             apply = mapAttrs (key: lua: rawLua lua); | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         lsp = { | ||||||
|  |           progress_ringbuf_size = mkOption { | ||||||
|  |             description = "Nvim's LSP client ring buffer size"; | ||||||
|  |             type = types.int; | ||||||
|  |             default = 100; | ||||||
|  |           }; | ||||||
|  |           log_handler = mkOption { | ||||||
|  |             description = "Log `$/progress` handler invocations"; | ||||||
|  |             type = types.bool; | ||||||
|  |             default = false; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       notification = { | ||||||
|  |         poll_rate = mkOption { | ||||||
|  |           description = "How frequently to update and render notifications"; | ||||||
|  |           type = types.int; | ||||||
|  |           default = 10; | ||||||
|  |         }; | ||||||
|  |         filter = mkOption { | ||||||
|  |           description = "Minimum notifications level"; | ||||||
|  |           type = types.enum ["debug" "info" "warn" "error"]; | ||||||
|  |           default = "info"; | ||||||
|  |           apply = filter: rawLua "vim.log.levels.${toUpper filter}"; | ||||||
|  |         }; | ||||||
|  |         history_size = mkOption { | ||||||
|  |           description = "Number of removed messages to retain in history"; | ||||||
|  |           type = types.int; | ||||||
|  |           default = 128; | ||||||
|  |         }; | ||||||
|  |         override_vim_notify = mkOption { | ||||||
|  |           description = "Automatically override vim.notify() with Fidget"; | ||||||
|  |           type = types.bool; | ||||||
|  |           default = false; | ||||||
|  |         }; | ||||||
|  |         configs = mkOption { | ||||||
|  |           description = "How to configure notification groups when instantiated"; | ||||||
|  |           type = types.attrsOf types.str; | ||||||
|  |           default = {default = "require('fidget.notification').default_config";}; | ||||||
|  |           apply = mapAttrs (key: lua: rawLua lua); | ||||||
|  |         }; | ||||||
|  |         redirect = mkOption { | ||||||
|  |           description = "Conditionally redirect notifications to another backend"; | ||||||
|  |           type = types.str; | ||||||
|  |           default = '' | ||||||
|  |             function(msg, level, opts) | ||||||
|  |               if opts and opts.on_open then | ||||||
|  |                 return require("fidget.integration.nvim-notify").delegate(msg, level, opts) | ||||||
|  |               end | ||||||
|  |             end | ||||||
|  |           ''; | ||||||
|  |           apply = rawLua; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         view = { | ||||||
|  |           stack_upwards = mkOption { | ||||||
|  |             description = "Display notification items from bottom to top"; | ||||||
|  |             type = types.bool; | ||||||
|  |             default = true; | ||||||
|  |           }; | ||||||
|  |           icon_separator = mkOption { | ||||||
|  |             description = "Separator between group name and icon"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = " "; | ||||||
|  |           }; | ||||||
|  |           group_separator = mkOption { | ||||||
|  |             description = "Separator between notification groups"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = "---"; | ||||||
|  |           }; | ||||||
|  |           group_separator_hl = mkOption { | ||||||
|  |             description = "Highlight group used for group separator"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = "Comment"; | ||||||
|  |           }; | ||||||
|  |           render_message = mkOption { | ||||||
|  |             description = "How to render notification messages"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = '' | ||||||
|  |               function(msg, cnt) | ||||||
|  |                 return cnt == 1 and msg or string.format("(%dx) %s", cnt, msg) | ||||||
|  |               end | ||||||
|  |             ''; | ||||||
|  |             apply = rawLua; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         window = { | ||||||
|  |           normal_hl = mkOption { | ||||||
|  |             description = "Base highlight group in the notification window"; | ||||||
|  |             type = types.str; | ||||||
|  |             default = "Comment"; | ||||||
|  |           }; | ||||||
|  |           winblend = mkOption { | ||||||
|  |             description = "Background color opacity in the notification window"; | ||||||
|  |             type = types.int; | ||||||
|  |             default = 100; | ||||||
|  |           }; | ||||||
|  |           border = mkOption { | ||||||
|  |             description = "Border style of the notification window"; | ||||||
|  |             type = types.enum ["none" "single" "double" "rounded" "solid" "shadow"]; | ||||||
|  |             default = | ||||||
|  |               if config.vim.ui.borders.enable | ||||||
|  |               then config.vim.ui.borders.globalStyle | ||||||
|  |               else "none"; | ||||||
|  |           }; | ||||||
|  |           zindex = mkOption { | ||||||
|  |             description = "Stacking priority of the notification window"; | ||||||
|  |             type = types.int; | ||||||
|  |             default = 45; | ||||||
|  |           }; | ||||||
|  |           max_width = mkOption { | ||||||
|  |             description = "Maximum width of the notification window"; | ||||||
|  |             type = types.int; | ||||||
|  |             default = 0; | ||||||
|  |           }; | ||||||
|  |           max_height = mkOption { | ||||||
|  |             description = "Maximum height of the notification window"; | ||||||
|  |             type = types.int; | ||||||
|  |             default = 0; | ||||||
|  |           }; | ||||||
|  |           x_padding = mkOption { | ||||||
|  |             description = "Padding from right edge of window boundary"; | ||||||
|  |             type = types.int; | ||||||
|  |             default = 1; | ||||||
|  |           }; | ||||||
|  |           y_padding = mkOption { | ||||||
|  |             description = "Padding from bottom edge of window boundary"; | ||||||
|  |             type = types.int; | ||||||
|  |             default = 0; | ||||||
|  |           }; | ||||||
|  |           align = mkOption { | ||||||
|  |             description = "How to align the notification window"; | ||||||
|  |             type = types.enum ["top" "bottom"]; | ||||||
|  |             default = "bottom"; | ||||||
|  |           }; | ||||||
|  |           relative = mkOption { | ||||||
|  |             description = "What the notification window position is relative to"; | ||||||
|  |             type = types.enum ["editor" "win"]; | ||||||
|  |             default = "editor"; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       integration = { | ||||||
|  |         nvim-tree = { | ||||||
|  |           enable = mkOption { | ||||||
|  |             description = "Integrate with nvim-tree/nvim-tree.lua (if enabled)"; | ||||||
|  |             type = types.bool; | ||||||
|  |             default = | ||||||
|  |               if config.vim.filetree.nvimTree.enable | ||||||
|  |               then true | ||||||
|  |               else false; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |         xcodebuild-nvim = { | ||||||
|  |           enable = mkOption { | ||||||
|  |             description = "Integrate with wojciech-kulik/xcodebuild.nvim (if enabled)"; | ||||||
|  |             type = types.bool; | ||||||
|  |             default = true; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       logger = { | ||||||
|  |         level = mkOption { | ||||||
|  |           description = "Minimum logging level"; | ||||||
|  |           type = types.enum ["debug" "error" "info" "trace" "warn" "off"]; | ||||||
|  |           default = "warn"; | ||||||
|  |           apply = logLevel: rawLua "vim.log.levels.${toUpper logLevel}"; | ||||||
|  |         }; | ||||||
|  |         max_size = mkOption { | ||||||
|  |           description = "Maximum log file size, in KB"; | ||||||
|  |           type = types.int; | ||||||
|  |           default = 10000; | ||||||
|  |         }; | ||||||
|  |         float_precision = mkOption { | ||||||
|  |           description = "Limit the number of decimals displayed for floats"; | ||||||
|  |           type = types.float; | ||||||
|  |           default = 0.01; | ||||||
|  |         }; | ||||||
|  |         path = mkOption { | ||||||
|  |           description = "Where Fidget writes its logs to"; | ||||||
|  |           type = types.str; | ||||||
|  |           default = '' | ||||||
|  |             string.format("%s/fidget.nvim.log", vim.fn.stdpath("cache")) | ||||||
|  |           ''; | ||||||
|  |           apply = rawLua; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | @ -30,24 +30,6 @@ in { | ||||||
|       }; |       }; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     fidget-nvim = { |  | ||||||
|       enable = mkEnableOption "nvim LSP UI element [fidget-nvim]"; |  | ||||||
| 
 |  | ||||||
|       align = { |  | ||||||
|         bottom = mkOption { |  | ||||||
|           type = types.bool; |  | ||||||
|           description = "Align to bottom"; |  | ||||||
|           default = true; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         right = mkOption { |  | ||||||
|           type = types.bool; |  | ||||||
|           description = "Align to right"; |  | ||||||
|           default = true; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     cursorline = { |     cursorline = { | ||||||
|       enable = mkEnableOption "line hightlighting on the cursor [nvim-cursorline]"; |       enable = mkEnableOption "line hightlighting on the cursor [nvim-cursorline]"; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Frothy
				Frothy