mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-31 19:12:38 +00:00 
			
		
		
		
	statusline/lualine: extensible sections
This adds extraActiveSection and extraInactiveSection to the lualine options to make it possible to easily extend the defaults with additional sections. We're also changing the exposed type of the *activeSection attributes from `str` to `listOf str`.
This commit is contained in:
		
					parent
					
						
							
								2b48b6d844
							
						
					
				
			
			
				commit
				
					
						11a974a111
					
				
			
		
					 2 changed files with 140 additions and 65 deletions
				
			
		|  | @ -5,6 +5,7 @@ | ||||||
| }: | }: | ||||||
| with lib; let | with lib; let | ||||||
|   cfg = config.vim.statusline.lualine; |   cfg = config.vim.statusline.lualine; | ||||||
|  |   luaTable = items: ''{${builtins.concatStringsSep "," items}}''; | ||||||
| in { | in { | ||||||
|   config = (mkIf cfg.enable) { |   config = (mkIf cfg.enable) { | ||||||
|     vim.startPlugins = [ |     vim.startPlugins = [ | ||||||
|  | @ -32,21 +33,21 @@ in { | ||||||
|         }, |         }, | ||||||
|         -- active sections |         -- active sections | ||||||
|         sections = { |         sections = { | ||||||
|           lualine_a = ${cfg.activeSection.a}, |           lualine_a = ${luaTable (cfg.activeSection.a ++ cfg.extraActiveSection.a)}, | ||||||
|           lualine_b = ${cfg.activeSection.b}, |           lualine_b = ${luaTable (cfg.activeSection.b ++ cfg.extraActiveSection.b)}, | ||||||
|           lualine_c = ${cfg.activeSection.c}, |           lualine_c = ${luaTable (cfg.activeSection.c ++ cfg.extraActiveSection.c)}, | ||||||
|           lualine_x = ${cfg.activeSection.x}, |           lualine_x = ${luaTable (cfg.activeSection.x ++ cfg.extraActiveSection.x)}, | ||||||
|           lualine_y = ${cfg.activeSection.y}, |           lualine_y = ${luaTable (cfg.activeSection.y ++ cfg.extraActiveSection.y)}, | ||||||
|           lualine_z = ${cfg.activeSection.z}, |           lualine_z = ${luaTable (cfg.activeSection.z ++ cfg.extraActiveSection.z)}, | ||||||
|         }, |         }, | ||||||
|         -- |         -- | ||||||
|         inactive_sections = { |         inactive_sections = { | ||||||
|           lualine_a = ${cfg.inactiveSection.a}, |           lualine_a = ${luaTable (cfg.inactiveSection.a ++ cfg.extraInactiveSection.a)}, | ||||||
|           lualine_b = ${cfg.inactiveSection.b}, |           lualine_b = ${luaTable (cfg.inactiveSection.b ++ cfg.extraInactiveSection.b)}, | ||||||
|           lualine_c = ${cfg.inactiveSection.c}, |           lualine_c = ${luaTable (cfg.inactiveSection.c ++ cfg.extraInactiveSection.c)}, | ||||||
|           lualine_x = ${cfg.inactiveSection.x}, |           lualine_x = ${luaTable (cfg.inactiveSection.x ++ cfg.extraInactiveSection.x)}, | ||||||
|           lualine_y = ${cfg.inactiveSection.y}, |           lualine_y = ${luaTable (cfg.inactiveSection.y ++ cfg.extraInactiveSection.y)}, | ||||||
|           lualine_z = ${cfg.inactiveSection.z}, |           lualine_z = ${luaTable (cfg.inactiveSection.z ++ cfg.extraInactiveSection.z)}, | ||||||
|         }, |         }, | ||||||
|         tabline = {}, |         tabline = {}, | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -117,10 +117,10 @@ in { | ||||||
| 
 | 
 | ||||||
|     activeSection = { |     activeSection = { | ||||||
|       a = mkOption { |       a = mkOption { | ||||||
|         type = types.str; |         type = types.listOf types.str; | ||||||
|         description = "active config for: | (A) | B | C       X | Y | Z |"; |         description = "active config for: | (A) | B | C       X | Y | Z |"; | ||||||
|         default = '' |         default = [ | ||||||
|           { |           '' | ||||||
|             { |             { | ||||||
|               "mode", |               "mode", | ||||||
|               icons_enabled = true, |               icons_enabled = true, | ||||||
|  | @ -128,37 +128,39 @@ in { | ||||||
|                 left = '▎', |                 left = '▎', | ||||||
|                 right = '' |                 right = '' | ||||||
|               }, |               }, | ||||||
|             }, |             } | ||||||
|           } |           '' | ||||||
|         ''; |         ]; | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       b = mkOption { |       b = mkOption { | ||||||
|         type = types.str; |         type = types.listOf types.str; | ||||||
|         description = "active config for: | A | (B) | C       X | Y | Z |"; |         description = "active config for: | A | (B) | C       X | Y | Z |"; | ||||||
|         default = '' |         default = [ | ||||||
|           { |           '' | ||||||
|             { |             { | ||||||
|               "filetype", |               "filetype", | ||||||
|               colored = true, |               colored = true, | ||||||
|               icon_only = true, |               icon_only = true, | ||||||
|               icon = { align = 'left' }, |               icon = { align = 'left' }, | ||||||
|               color = {bg='${colorPuccin}', fg='lavender'}, |               color = {bg='${colorPuccin}', fg='lavender'}, | ||||||
|             }, |             } | ||||||
|  |           '' | ||||||
|  |           '' | ||||||
|             { |             { | ||||||
|               "filename", |               "filename", | ||||||
|               color = {bg='${colorPuccin}'}, |               color = {bg='${colorPuccin}'}, | ||||||
|               symbols = {modified = '', readonly = ''}, |               symbols = {modified = '', readonly = ''}, | ||||||
|             }, |             } | ||||||
|           } |           '' | ||||||
|         ''; |         ]; | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       c = mkOption { |       c = mkOption { | ||||||
|         type = types.str; |         type = types.listOf types.str; | ||||||
|         description = "active config for: | A | B | (C)       X | Y | Z |"; |         description = "active config for: | A | B | (C)       X | Y | Z |"; | ||||||
|         default = '' |         default = [ | ||||||
|           { |           '' | ||||||
|             { |             { | ||||||
|               "diff", |               "diff", | ||||||
|               colored = false, |               colored = false, | ||||||
|  | @ -173,16 +175,16 @@ in { | ||||||
|                 bg='${colorPuccin}', |                 bg='${colorPuccin}', | ||||||
|                 fg='lavender' |                 fg='lavender' | ||||||
|               }, |               }, | ||||||
|             }, |             } | ||||||
|           } |           '' | ||||||
|         ''; |         ]; | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       x = mkOption { |       x = mkOption { | ||||||
|         type = types.str; |         type = types.listOf types.str; | ||||||
|         description = "active config for: | A | B | C       (X) | Y | Z |"; |         description = "active config for: | A | B | C       (X) | Y | Z |"; | ||||||
|         default = '' |         default = [ | ||||||
|           { |           '' | ||||||
|             { |             { | ||||||
|               -- Lsp server name |               -- Lsp server name | ||||||
|               function() |               function() | ||||||
|  | @ -218,7 +220,9 @@ in { | ||||||
|               end, |               end, | ||||||
|               icon = ' ', |               icon = ' ', | ||||||
|               color = {bg='${colorPuccin}', fg='lavender'}, |               color = {bg='${colorPuccin}', fg='lavender'}, | ||||||
|             }, |             } | ||||||
|  |           '' | ||||||
|  |           '' | ||||||
|             { |             { | ||||||
|               "diagnostics", |               "diagnostics", | ||||||
|               sources = {'nvim_lsp', 'nvim_diagnostic', 'coc'}, |               sources = {'nvim_lsp', 'nvim_diagnostic', 'coc'}, | ||||||
|  | @ -229,45 +233,51 @@ in { | ||||||
|                 color_warn = { fg = 'yellow' }, |                 color_warn = { fg = 'yellow' }, | ||||||
|                 color_info = { fg = 'cyan' }, |                 color_info = { fg = 'cyan' }, | ||||||
|               }, |               }, | ||||||
|             }, |             } | ||||||
|           } |           '' | ||||||
|         ''; |         ]; | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       y = mkOption { |       y = mkOption { | ||||||
|         type = types.str; |         type = types.listOf types.str; | ||||||
|         description = "active config for: | A | B | C       X | (Y) | Z |"; |         description = "active config for: | A | B | C       X | (Y) | Z |"; | ||||||
|         default = '' |         default = [ | ||||||
|           { |           '' | ||||||
|             { |             { | ||||||
|               'searchcount', |               'searchcount', | ||||||
|               maxcount = 999, |               maxcount = 999, | ||||||
|               timeout = 120, |               timeout = 120, | ||||||
|               color = {bg='${colorPuccin}', fg='lavender'} |               color = {bg='${colorPuccin}', fg='lavender'} | ||||||
|             }, |             } | ||||||
|  |           '' | ||||||
|  |           '' | ||||||
|             { |             { | ||||||
|               "branch", |               "branch", | ||||||
|               icon = ' •', |               icon = ' •', | ||||||
|               color = {bg='${colorPuccin}', fg='lavender'}, |               color = {bg='${colorPuccin}', fg='lavender'}, | ||||||
|             }, |             } | ||||||
|           } |           '' | ||||||
|         ''; |         ]; | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       z = mkOption { |       z = mkOption { | ||||||
|         type = types.str; |         type = types.listOf types.str; | ||||||
|         description = "active config for: | A | B | C       X | Y | (Z) |"; |         description = "active config for: | A | B | C       X | Y | (Z) |"; | ||||||
|         default = '' |         default = [ | ||||||
|           { |           '' | ||||||
|             { |             { | ||||||
|               "progress", |               "progress", | ||||||
|               separator = { |               separator = { | ||||||
|                 left = '', |                 left = '', | ||||||
|               }, |               }, | ||||||
|             }, |             } | ||||||
|  |           '' | ||||||
|  |           '' | ||||||
|             { |             { | ||||||
|               "location", |               "location", | ||||||
|             }, |             } | ||||||
|  |           '' | ||||||
|  |           '' | ||||||
|             { |             { | ||||||
|               "fileformat", |               "fileformat", | ||||||
|               color = {fg='black'}, |               color = {fg='black'}, | ||||||
|  | @ -276,47 +286,111 @@ in { | ||||||
|                 dos = '',  -- e70f |                 dos = '',  -- e70f | ||||||
|                 mac = '',  -- e711 |                 mac = '',  -- e711 | ||||||
|               }, |               }, | ||||||
|             }, |             } | ||||||
|           } |           '' | ||||||
|         ''; |         ]; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |     extraActiveSection = { | ||||||
|  |       a = mkOption { | ||||||
|  |         type = types.listOf types.str; | ||||||
|  |         description = "Extra entries for activeSection.a"; | ||||||
|  |         default = []; | ||||||
|  |       }; | ||||||
|  |       b = mkOption { | ||||||
|  |         type = types.listOf types.str; | ||||||
|  |         description = "Extra entries for activeSection.b"; | ||||||
|  |         default = []; | ||||||
|  |       }; | ||||||
|  |       c = mkOption { | ||||||
|  |         type = types.listOf types.str; | ||||||
|  |         description = "Extra entries for activeSection.c"; | ||||||
|  |         default = []; | ||||||
|  |       }; | ||||||
|  |       x = mkOption { | ||||||
|  |         type = types.listOf types.str; | ||||||
|  |         description = "Extra entries for activeSection.x"; | ||||||
|  |         default = []; | ||||||
|  |       }; | ||||||
|  |       y = mkOption { | ||||||
|  |         type = types.listOf types.str; | ||||||
|  |         description = "Extra entries for activeSection.y"; | ||||||
|  |         default = []; | ||||||
|  |       }; | ||||||
|  |       z = mkOption { | ||||||
|  |         type = types.listOf types.str; | ||||||
|  |         description = "Extra entries for activeSection.z"; | ||||||
|  |         default = []; | ||||||
|       }; |       }; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     inactiveSection = { |     inactiveSection = { | ||||||
|       a = mkOption { |       a = mkOption { | ||||||
|         type = types.str; |         type = types.listOf types.str; | ||||||
|         description = "inactive config for: | (A) | B | C       X | Y | Z |"; |         description = "inactive config for: | (A) | B | C       X | Y | Z |"; | ||||||
|         default = "{}"; |         default = []; | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       b = mkOption { |       b = mkOption { | ||||||
|         type = types.str; |         type = types.listOf types.str; | ||||||
|         description = "inactive config for: | A | (B) | C       X | Y | Z |"; |         description = "inactive config for: | A | (B) | C       X | Y | Z |"; | ||||||
|         default = "{}"; |         default = []; | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       c = mkOption { |       c = mkOption { | ||||||
|         type = types.str; |         type = types.listOf types.str; | ||||||
|         description = "inactive config for: | A | B | (C)       X | Y | Z |"; |         description = "inactive config for: | A | B | (C)       X | Y | Z |"; | ||||||
|         default = "{'filename'}"; |         default = ["'filename'"]; | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       x = mkOption { |       x = mkOption { | ||||||
|         type = types.str; |         type = types.listOf types.str; | ||||||
|         description = "inactive config for: | A | B | C       (X) | Y | Z |"; |         description = "inactive config for: | A | B | C       (X) | Y | Z |"; | ||||||
|         default = "{'location'}"; |         default = ["'location'"]; | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       y = mkOption { |       y = mkOption { | ||||||
|         type = types.str; |         type = types.listOf types.str; | ||||||
|         description = "inactive config for: | A | B | C       X | (Y) | Z |"; |         description = "inactive config for: | A | B | C       X | (Y) | Z |"; | ||||||
|         default = "{}"; |         default = []; | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       z = mkOption { |       z = mkOption { | ||||||
|         type = types.str; |         type = types.listOf types.str; | ||||||
|         description = "inactive config for: | A | B | C       X | Y | (Z) |"; |         description = "inactive config for: | A | B | C       X | Y | (Z) |"; | ||||||
|         default = "{}"; |         default = []; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |     extraInactiveSection = { | ||||||
|  |       a = mkOption { | ||||||
|  |         type = types.listOf types.str; | ||||||
|  |         description = "Extra entries for inactiveSection.a"; | ||||||
|  |         default = []; | ||||||
|  |       }; | ||||||
|  |       b = mkOption { | ||||||
|  |         type = types.listOf types.str; | ||||||
|  |         description = "Extra entries for inactiveSection.b"; | ||||||
|  |         default = []; | ||||||
|  |       }; | ||||||
|  |       c = mkOption { | ||||||
|  |         type = types.listOf types.str; | ||||||
|  |         description = "Extra entries for inactiveSection.c"; | ||||||
|  |         default = []; | ||||||
|  |       }; | ||||||
|  |       x = mkOption { | ||||||
|  |         type = types.listOf types.str; | ||||||
|  |         description = "Extra entries for inactiveSection.x"; | ||||||
|  |         default = []; | ||||||
|  |       }; | ||||||
|  |       y = mkOption { | ||||||
|  |         type = types.listOf types.str; | ||||||
|  |         description = "Extra entries for inactiveSection.y"; | ||||||
|  |         default = []; | ||||||
|  |       }; | ||||||
|  |       z = mkOption { | ||||||
|  |         type = types.listOf types.str; | ||||||
|  |         description = "Extra entries for inactiveSection.z"; | ||||||
|  |         default = []; | ||||||
|       }; |       }; | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Kalle Jepsen
				Kalle Jepsen