mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-31 19:12:38 +00:00 
			
		
		
		
	feat: rename nvimtree.lua option and conform to new configuration format
This commit is contained in:
		
					parent
					
						
							
								9a956161b3
							
						
					
				
			
			
				commit
				
					
						5c7546a8fa
					
				
			
		
					 6 changed files with 1452 additions and 574 deletions
				
			
		|  | @ -1,5 +1,5 @@ | |||
| _: { | ||||
|   imports = [ | ||||
|     ./nvimtree-lua | ||||
|     ./nvimtree | ||||
|   ]; | ||||
| } | ||||
|  |  | |||
|  | @ -1,145 +0,0 @@ | |||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| with lib; | ||||
| with builtins; let | ||||
|   cfg = config.vim.filetree.nvimTreeLua; | ||||
|   self = import ./nvimtree-lua.nix { | ||||
|     inherit pkgs; | ||||
|     lib = lib; | ||||
|   }; | ||||
|   mappings = self.options.vim.filetree.nvimTreeLua.mappings; | ||||
| in { | ||||
|   config = mkIf cfg.enable { | ||||
|     vim.startPlugins = ["nvim-tree-lua"]; | ||||
| 
 | ||||
|     vim.maps.normal = mkMerge [ | ||||
|       (mkBinding cfg.mappings.toggle ":NvimTreeToggle<cr>" mappings.toggle.description) | ||||
|       (mkBinding cfg.mappings.refresh ":NvimTreeRefresh<cr>" mappings.refresh.description) | ||||
|       (mkBinding cfg.mappings.findFile ":NvimTreeFindFile<cr>" mappings.findFile.description) | ||||
|       (mkBinding cfg.mappings.focus ":NvimTreeFocus<cr>" mappings.focus.description) | ||||
|     ]; | ||||
| 
 | ||||
|     vim.luaConfigRC.nvimtreelua = nvim.dag.entryAnywhere '' | ||||
|         local function open_nvim_tree(data) | ||||
|             local IGNORED_FT = { | ||||
|                 "markdown", | ||||
|             } | ||||
| 
 | ||||
|             -- buffer is a real file on the disk | ||||
|             local real_file = vim.fn.filereadable(data.file) == 1 | ||||
| 
 | ||||
|             -- buffer is a [No Name] | ||||
|              local no_name = data.file == "" and vim.bo[data.buf].buftype == "" | ||||
| 
 | ||||
|             -- &ft | ||||
|             local filetype = vim.bo[data.buf].ft | ||||
| 
 | ||||
|             -- only files please | ||||
|             if not real_file and not no_name then | ||||
|                 return | ||||
|             end | ||||
| 
 | ||||
|             -- skip ignored filetypes | ||||
|             if vim.tbl_contains(IGNORED_FT, filetype) then | ||||
|                 return | ||||
|             end | ||||
| 
 | ||||
|             -- open the tree but don't focus it | ||||
|             require("nvim-tree.api").tree.toggle({ focus = false }) | ||||
|         end | ||||
|         -- Open on startup has been deprecated | ||||
|         -- see https://github.com/nvim-tree/nvim-tree.lua/wiki/Open-At-Startup | ||||
|         -- use a nix eval to dynamically insert the open on startup function | ||||
|         ${ | ||||
|         # FIXME: this function is actually obslete due to the existence of the dashboard, I need to find an alternative logic | ||||
|         if (cfg.openOnSetup) | ||||
|         then '' | ||||
|           vim.api.nvim_create_autocmd({ "VimEnter" }, { callback = open_nvim_tree }) | ||||
|         '' | ||||
|         else "" | ||||
|       } | ||||
| 
 | ||||
|       require'nvim-tree'.setup({ | ||||
|         sort_by = ${"'" + cfg.sortBy + "'"}, | ||||
|         disable_netrw = ${boolToString cfg.disableNetRW}, | ||||
|         hijack_netrw = ${boolToString cfg.hijackNetRW}, | ||||
|         hijack_cursor = ${boolToString cfg.hijackCursor}, | ||||
|         open_on_tab = ${boolToString cfg.openTreeOnNewTab}, | ||||
|         sync_root_with_cwd = ${boolToString cfg.syncRootWithCwd}, | ||||
|         update_focused_file = { | ||||
|           enable = ${boolToString cfg.updateFocusedFile.enable}, | ||||
|           update_cwd = ${boolToString cfg.updateFocusedFile.update_cwd}, | ||||
|         }, | ||||
| 
 | ||||
|         view  = { | ||||
|           width = ${toString cfg.view.width}, | ||||
|           side = ${"'" + cfg.view.side + "'"}, | ||||
|           adaptive_size = ${boolToString cfg.view.adaptiveSize}, | ||||
|           cursorline = ${boolToString cfg.view.cursorline} | ||||
|         }, | ||||
| 
 | ||||
|         git = { | ||||
|           enable = ${boolToString cfg.git.enable}, | ||||
|           ignore = ${boolToString cfg.git.ignore}, | ||||
|         }, | ||||
| 
 | ||||
|         filesystem_watchers = { | ||||
|           enable = ${boolToString cfg.filesystemWatchers.enable}, | ||||
|         }, | ||||
| 
 | ||||
|         actions = { | ||||
|           change_dir = { | ||||
|             global = ${boolToString cfg.actions.changeDir.global}, | ||||
|           }, | ||||
|           open_file = { | ||||
|             quit_on_open = ${boolToString cfg.actions.openFile.quitOnOpen}, | ||||
|             resize_window = ${boolToString cfg.actions.openFile.resizeWindow}, | ||||
|             window_picker = { | ||||
|                 enable = ${boolToString cfg.actions.openFile.windowPicker.enable}, | ||||
|                 chars = ${toString cfg.actions.openFile.windowPicker.chars}, | ||||
|             }, | ||||
|           }, | ||||
|           expand_all = { | ||||
|             exclude = { | ||||
|               ${builtins.concatStringsSep "\n" (builtins.map (s: "\"" + s + "\",") cfg.actions.expandAll.exclude)} | ||||
|             }, | ||||
|           } | ||||
|         }, | ||||
| 
 | ||||
|         renderer = { | ||||
|           highlight_git = ${boolToString cfg.renderer.higlightGit}, | ||||
|           highlight_opened_files = ${"'" + cfg.renderer.highlightOpenedFiles + "'"}, | ||||
|           indent_markers = { | ||||
|             enable = ${boolToString cfg.renderer.indentMarkers}, | ||||
|           }, | ||||
|           -- TODO: those two | ||||
|           add_trailing = ${boolToString cfg.renderer.trailingSlash}, | ||||
|           group_empty = ${boolToString cfg.renderer.groupEmptyFolders}, | ||||
| 
 | ||||
|           root_folder_label = ${ | ||||
|         if cfg.renderer.rootFolderLabel == null | ||||
|         then "false" | ||||
|         else "''${toString cfg.rootFolderLabel}''" | ||||
|       }, | ||||
|         }, | ||||
| 
 | ||||
|         system_open = { | ||||
|           cmd = ${"'" + cfg.systemOpenCmd + "'"}, | ||||
|         }, | ||||
|         diagnostics = { | ||||
|           enable = ${boolToString cfg.lspDiagnostics}, | ||||
|         }, | ||||
|         filters = { | ||||
|           dotfiles = ${boolToString cfg.hideDotFiles}, | ||||
|           custom = { | ||||
|             ${builtins.concatStringsSep "\n" (builtins.map (s: "\"" + s + "\",") cfg.hideFiles)} | ||||
|           }, | ||||
|         }, | ||||
|       }) | ||||
|     ''; | ||||
|   }; | ||||
| } | ||||
|  | @ -1,427 +0,0 @@ | |||
| { | ||||
|   pkgs, | ||||
|   lib, | ||||
|   ... | ||||
| }: | ||||
| with lib; | ||||
| with builtins; { | ||||
|   options.vim.filetree.nvimTreeLua = { | ||||
|     enable = mkEnableOption "filetree via nvim-tree-lua" // {default = false;}; | ||||
| 
 | ||||
|     mappings = { | ||||
|       toggle = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "<C-n>"; | ||||
|         description = "Toggle NvimTree"; | ||||
|       }; | ||||
|       refresh = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "<leader>tr"; | ||||
|         description = "Refresh NvimTree"; | ||||
|       }; | ||||
|       findFile = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "<leader>tg"; | ||||
|         description = "Find file in NvimTree"; | ||||
|       }; | ||||
|       focus = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = "<leader>tf"; | ||||
|         description = "Focus NvimTree"; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     sortBy = mkOption { | ||||
|       default = "name"; | ||||
|       description = "Sort by name or extension"; | ||||
|       type = types.enum ["name" "extension" "modification_time" "case_sensitive"]; | ||||
|     }; | ||||
| 
 | ||||
|     hideFiles = mkOption { | ||||
|       default = ["node_modules" ".cache"]; | ||||
|       description = "Files to hide in the file view by default."; | ||||
|       type = with types; listOf str; | ||||
|     }; | ||||
| 
 | ||||
|     openOnSetup = mkOption { | ||||
|       default = true; | ||||
|       description = "Open when vim is started on a directory"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     closeOnLastWindow = mkOption { | ||||
|       default = true; | ||||
|       description = "Close when tree is last window open"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     ignoreFileTypes = mkOption { | ||||
|       default = []; | ||||
|       description = "Ignore file types"; | ||||
|       type = with types; listOf str; | ||||
|     }; | ||||
| 
 | ||||
|     followBufferFile = mkOption { | ||||
|       default = true; | ||||
|       description = "Follow file that is in current buffer on tree"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     indentMarkers = mkOption { | ||||
|       default = true; | ||||
|       description = "Show indent markers"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     hideDotFiles = mkOption { | ||||
|       default = false; | ||||
|       description = "Hide dotfiles"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     openTreeOnNewTab = mkOption { | ||||
|       default = true; | ||||
|       description = "Opens the tree view when opening a new tab"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     disableNetRW = mkOption { | ||||
|       default = false; | ||||
|       description = "Disables netrw and replaces it with tree"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     hijackNetRW = mkOption { | ||||
|       default = true; | ||||
|       description = "Prevents netrw from automatically opening when opening directories"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     trailingSlash = mkOption { | ||||
|       default = true; | ||||
|       description = "Add a trailing slash to all folders"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     groupEmptyFolders = mkOption { | ||||
|       default = true; | ||||
|       description = "Compact empty folders trees into a single item"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     lspDiagnostics = mkOption { | ||||
|       default = true; | ||||
|       description = "Shows lsp diagnostics in the tree"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     systemOpenCmd = mkOption { | ||||
|       default = "${pkgs.xdg-utils}/bin/xdg-open"; | ||||
|       description = "The command used to open a file with the associated default program"; | ||||
|       type = types.str; | ||||
|     }; | ||||
| 
 | ||||
|     updateCwd = mkOption { | ||||
|       # updateCwd has been deprecated in favor of syncRootWithCwd | ||||
|       # this option is kept for backwards compatibility | ||||
|       default = true; | ||||
|       description = "Updates the tree when changing nvim's directory (DirChanged event)."; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     ignore_ft_on_setup = mkOption { | ||||
|       default = []; | ||||
|       description = "Ignore file types on setup"; | ||||
|       type = with types; listOf str; | ||||
|     }; | ||||
| 
 | ||||
|     hijackCursor = mkOption { | ||||
|       default = false; | ||||
|       description = "Hijack the cursor in the tree to put it at the start of the filename"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     hijackUnnamedBufferWhenOpening = mkOption { | ||||
|       default = false; | ||||
|       description = "Open nvimtree in place of the unnamed buffer if it's empty."; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     syncRootWithCwd = mkOption { | ||||
|       default = true; | ||||
|       description = "Changes the tree root directory on `DirChanged` and refreshes the tree"; | ||||
|       type = types.bool; | ||||
|     }; | ||||
| 
 | ||||
|     updateFocusedFile = mkOption { | ||||
|       default = { | ||||
|         enable = true; | ||||
|         update_cwd = true; | ||||
|       }; | ||||
|       description = "Updates the tree when changing nvim's directory (DirChanged event)."; | ||||
|       type = with types; attrsOf (either bool (attrsOf bool)); | ||||
|     }; | ||||
| 
 | ||||
|     view = { | ||||
|       adaptiveSize = mkOption { | ||||
|         default = true; | ||||
|         description = "Resize the tree when the window is resized"; | ||||
|         type = types.bool; | ||||
|       }; | ||||
|       side = mkOption { | ||||
|         default = "left"; | ||||
|         description = "Side the tree will appear on left or right"; | ||||
|         type = types.enum ["left" "right"]; | ||||
|       }; | ||||
|       width = mkOption { | ||||
|         default = 35; | ||||
|         description = "Width of the tree in charecters"; | ||||
|         type = types.int; | ||||
|       }; | ||||
|       cursorline = mkOption { | ||||
|         default = false; | ||||
|         description = "Whether to display the cursor line in NvimTree"; | ||||
|         type = types.bool; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     git = { | ||||
|       enable = mkEnableOption "Git integration"; | ||||
|       ignore = mkOption { | ||||
|         default = false; | ||||
|         description = "Ignore files in git"; | ||||
|         type = types.bool; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     filesystemWatchers = { | ||||
|       enable = mkOption { | ||||
|         default = true; | ||||
|         description = "Enable filesystem watchers"; | ||||
|         type = types.bool; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     actions = { | ||||
|       changeDir = { | ||||
|         global = mkOption { | ||||
|           default = true; | ||||
|           description = "Change directory when changing nvim's directory (DirChanged event)."; | ||||
|           type = types.bool; | ||||
|         }; | ||||
|       }; | ||||
|       openFile = { | ||||
|         resizeWindow = mkOption { | ||||
|           default = true; | ||||
|           description = "Resize the tree when opening a file"; | ||||
|           type = types.bool; | ||||
|         }; | ||||
|         quitOnOpen = mkOption { | ||||
|           default = false; | ||||
|           description = "Quit the tree when opening a file"; | ||||
|           type = types.bool; | ||||
|         }; | ||||
|         windowPicker = { | ||||
|           enable = mkEnableOption "Window picker"; | ||||
| 
 | ||||
|           chars = mkOption { | ||||
|             default = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; | ||||
|             description = "A string of chars used as identifiers by the window picker"; | ||||
|             type = types.str; | ||||
|           }; | ||||
| 
 | ||||
|           /* | ||||
|           # FIXME: Can't get this to place the list items in a lua table | ||||
|           exclude = { | ||||
|             fileType = mkOption { | ||||
|               default = ["notify" "packer" "qf" "diff" "fugitive" "fugitiveblame"]; | ||||
|               description = "File types to exclude from window picker"; | ||||
|               type = with types; listOf str; | ||||
|             }; | ||||
|             buftype = mkOption { | ||||
|               default = ["nofile" "terminal" "help"]; | ||||
|               description = "Buffer types to exclude from window picker"; | ||||
|               type = with types; listOf str; | ||||
|             }; | ||||
|           }; | ||||
|           */ | ||||
|         }; | ||||
|       }; | ||||
|       expandAll = { | ||||
|         exclude = mkOption { | ||||
|           default = []; | ||||
|           description = "Exclude files from expand all"; | ||||
|           type = with types; listOf str; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     renderer = { | ||||
|       higlightGit = mkOption { | ||||
|         default = false; | ||||
|         description = "Highlight git related files"; | ||||
|         type = types.bool; | ||||
|       }; | ||||
| 
 | ||||
|       highlightOpenedFiles = mkOption { | ||||
|         default = "none"; | ||||
|         description = "Highlight opened files"; | ||||
|         type = types.enum ["none" "icon" "name" "all"]; | ||||
|       }; | ||||
| 
 | ||||
|       indentMarkers = mkOption { | ||||
|         default = false; | ||||
|         description = "Show indent markers"; | ||||
|         type = types.bool; | ||||
|       }; | ||||
| 
 | ||||
|       showHiddenFiles = mkOption { | ||||
|         default = true; | ||||
|         description = "Show hidden files"; | ||||
|         type = types.bool; | ||||
|       }; | ||||
| 
 | ||||
|       trailingSlash = mkOption { | ||||
|         default = false; | ||||
|         description = "Add a trailing slash to all folders"; | ||||
|         type = types.bool; | ||||
|       }; | ||||
| 
 | ||||
|       showParentFolder = mkOption { | ||||
|         default = false; | ||||
|         description = "Show parent folder"; | ||||
|         type = types.bool; | ||||
|       }; | ||||
| 
 | ||||
|       groupEmptyFolders = mkOption { | ||||
|         default = false; | ||||
|         description = "Compact empty folders trees into a single item"; | ||||
|         type = types.bool; | ||||
|       }; | ||||
| 
 | ||||
|       rootFolderLabel = mkOption { | ||||
|         default = null; | ||||
|         description = "Root folder label. Set null to disable"; | ||||
|         type = with types; nullOr str; | ||||
|       }; | ||||
| 
 | ||||
|       icons = { | ||||
|         show = { | ||||
|           file = mkOption { | ||||
|             default = true; | ||||
|             description = "Show file icons"; | ||||
|             type = types.bool; | ||||
|           }; | ||||
|           folder = mkOption { | ||||
|             default = true; | ||||
|             description = "Show folder icons"; | ||||
|             type = types.bool; | ||||
|           }; | ||||
|           folderArrow = mkOption { | ||||
|             default = true; | ||||
|             description = "Show folder arrow icons"; | ||||
|             type = types.bool; | ||||
|           }; | ||||
|           git = mkOption { | ||||
|             default = false; | ||||
|             description = "Show git icons"; | ||||
|             type = types.bool; | ||||
|           }; | ||||
|         }; | ||||
|         glyphs = { | ||||
|           default = mkOption { | ||||
|             default = ""; | ||||
|             description = "Default icon"; | ||||
|             type = types.str; | ||||
|           }; | ||||
|           symlink = mkOption { | ||||
|             default = ""; | ||||
|             description = "Symlink icon"; | ||||
|             type = types.str; | ||||
|           }; | ||||
| 
 | ||||
|           folder = { | ||||
|             default = mkOption { | ||||
|               default = ""; | ||||
|               description = "Default folder icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             open = mkOption { | ||||
|               default = ""; | ||||
|               description = "Open folder icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             empty = mkOption { | ||||
|               default = ""; | ||||
|               description = "Empty folder icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             emptyOpen = mkOption { | ||||
|               default = ""; | ||||
|               description = "Empty open folder icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             symlink = mkOption { | ||||
|               default = ""; | ||||
|               description = "Symlink folder icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             symlinkOpen = mkOption { | ||||
|               default = ""; | ||||
|               description = "Symlink open folder icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             arrowOpen = mkOption { | ||||
|               default = ""; | ||||
|               description = "Open folder arrow icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             arrowClosed = mkOption { | ||||
|               default = ""; | ||||
|               description = "Closed folder arrow icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|           }; | ||||
| 
 | ||||
|           git = { | ||||
|             unstaged = mkOption { | ||||
|               default = "✗"; | ||||
|               description = "Unstaged git icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             staged = mkOption { | ||||
|               default = "✓"; | ||||
|               description = "Staged git icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             unmerged = mkOption { | ||||
|               default = ""; | ||||
|               description = "Unmerged git icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             renamed = mkOption { | ||||
|               default = "➜"; | ||||
|               description = "Renamed git icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             untracked = mkOption { | ||||
|               default = "★"; | ||||
|               description = "Untracked git icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             deleted = mkOption { | ||||
|               default = ""; | ||||
|               description = "Deleted git icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|             ignored = mkOption { | ||||
|               default = "◌"; | ||||
|               description = "Ignored git icon"; | ||||
|               type = types.str; | ||||
|             }; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										293
									
								
								modules/filetree/nvimtree/config.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										293
									
								
								modules/filetree/nvimtree/config.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,293 @@ | |||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| with lib; | ||||
| with builtins; let | ||||
|   cfg = config.vim.filetree.nvimTree; | ||||
|   self = import ./nvimtree.nix { | ||||
|     inherit pkgs; | ||||
|     lib = lib; | ||||
|   }; | ||||
|   mappings = self.options.vim.filetree.nvimTree.mappings; | ||||
| in { | ||||
|   config = mkIf cfg.enable { | ||||
|     vim.startPlugins = ["nvim-tree-lua"]; | ||||
| 
 | ||||
|     vim.maps.normal = mkMerge [ | ||||
|       (mkBinding cfg.mappings.toggle ":NvimTreeToggle<cr>" mappings.toggle.description) | ||||
|       (mkBinding cfg.mappings.refresh ":NvimTreeRefresh<cr>" mappings.refresh.description) | ||||
|       (mkBinding cfg.mappings.findFile ":NvimTreeFindFile<cr>" mappings.findFile.description) | ||||
|       (mkBinding cfg.mappings.focus ":NvimTreeFocus<cr>" mappings.focus.description) | ||||
|     ]; | ||||
| 
 | ||||
|     vim.luaConfigRC.nvimtreelua = nvim.dag.entryAnywhere '' | ||||
|           ${ | ||||
|         lib.optionalString (cfg.openOnSetup) '' | ||||
|             -- Open on startup has been deprecated | ||||
|             -- see https://github.com/nvim-tree/nvim-tree.lua/wiki/Open-At-Startup | ||||
| 
 | ||||
|             -- use a nix eval to dynamically insert the open on startup function | ||||
|             local function open_nvim_tree(data) | ||||
|               local IGNORED_FT = { | ||||
|                   "markdown", | ||||
|               } | ||||
| 
 | ||||
|               -- buffer is a real file on the disk | ||||
|               local real_file = vim.fn.filereadable(data.file) == 1 | ||||
| 
 | ||||
|               -- buffer is a [No Name] | ||||
|                local no_name = data.file == "" and vim.bo[data.buf].buftype == "" | ||||
| 
 | ||||
|               -- &ft | ||||
|               local filetype = vim.bo[data.buf].ft | ||||
| 
 | ||||
|               -- only files please | ||||
|               if not real_file and not no_name then | ||||
|                   return | ||||
|               end | ||||
| 
 | ||||
|               -- skip ignored filetypes | ||||
|               if vim.tbl_contains(IGNORED_FT, filetype) then | ||||
|                   return | ||||
|               end | ||||
| 
 | ||||
|               -- open the tree but don't focus it | ||||
|               require("nvim-tree.api").tree.toggle({ focus = false }) | ||||
|           end | ||||
| 
 | ||||
|           -- function to automatically open the tree on VimEnter | ||||
|           vim.api.nvim_create_autocmd({ "VimEnter" }, { callback = open_nvim_tree }) | ||||
|         '' | ||||
|       } | ||||
| 
 | ||||
|           ${ | ||||
|         lib.optionalString (cfg.disableNetrw) '' | ||||
|           vim.g.loaded_netrw = 1 | ||||
|           vim.g.loaded_netrwPlugin = 1 | ||||
|         '' | ||||
|       } | ||||
| 
 | ||||
|           require'nvim-tree'.setup({ | ||||
|             disable_netrw = ${boolToString cfg.disableNetrw}, | ||||
|             hijack_netrw = ${boolToString cfg.hijackNetrw}, | ||||
|             auto_reload_on_write = ${boolToString cfg.autoreloadOnWrite}, | ||||
|        | ||||
|             sort = { | ||||
|               sorter = "${cfg.sort.sorter}", | ||||
|               folders_first = ${boolToString cfg.sort.foldersFirst}, | ||||
|             }, | ||||
| 
 | ||||
|             hijack_unnamed_buffer_when_opening = ${boolToString cfg.hijackUnnamedBufferWhenOpening}, | ||||
|             hijack_cursor = ${boolToString cfg.hijackCursor}, | ||||
|             root_dirs = ${nvim.lua.listToLuaTable cfg.rootDirs}, | ||||
|             prefer_startup_root = ${boolToString cfg.preferStartupRoot}, | ||||
|             sync_root_with_cwd = ${boolToString cfg.syncRootWithCwd}, | ||||
|             reload_on_bufenter = ${boolToString cfg.reloadOnBufEnter}, | ||||
|             respect_buf_cwd = ${boolToString cfg.respectBufCwd}, | ||||
|        | ||||
|             hijack_directories = { | ||||
|               enable = ${boolToString cfg.hijackDirectories.enable}, | ||||
|               auto_open = ${boolToString cfg.hijackDirectories.autoOpen}, | ||||
|             }, | ||||
| 
 | ||||
|             update_focused_file = { | ||||
|               enable = ${boolToString cfg.updateFocusedFile.enable}, | ||||
|               update_root = ${boolToString cfg.updateFocusedFile.updateRoot}, | ||||
|               ignore_list = ${nvim.lua.listToLuaTable cfg.updateFocusedFile.ignoreList}, | ||||
|             }, | ||||
| 
 | ||||
|             system_open = { | ||||
|               cmd = "${cfg.systemOpen.cmd}", | ||||
|               args = ${nvim.lua.listToLuaTable cfg.systemOpen.args}, | ||||
|             }, | ||||
| 
 | ||||
|             diagnostics = { | ||||
|               enable = ${boolToString cfg.diagnostics.enable}, | ||||
|               icons = { | ||||
|                 hint = "${cfg.diagnostics.icons.hint}", | ||||
|                 info = "${cfg.diagnostics.icons.info}", | ||||
|                 warning = "${cfg.diagnostics.icons.warning}", | ||||
|                 error = "${cfg.diagnostics.icons.error}", | ||||
|               }, | ||||
| 
 | ||||
|               severity = { | ||||
|                 min = "vim.diagnostic.severity.${cfg.diagnostics.severity.min}", | ||||
|                 max = "vim.diagnostic.severity.${cfg.diagnostics.severity.max}", | ||||
|               }, | ||||
|             }, | ||||
| 
 | ||||
|             git = { | ||||
|               enable = ${boolToString cfg.git.enable}, | ||||
|               show_on_dirs = ${boolToString cfg.git.showOnDirs}, | ||||
|               show_on_open_dirs = ${boolToString cfg.git.showOnOpenDirs}, | ||||
|               disable_for_dirs = ${nvim.lua.listToLuaTable cfg.git.disableForDirs}, | ||||
|               timeout = ${toString cfg.git.timeOut}, | ||||
|             }, | ||||
| 
 | ||||
|             modified = { | ||||
|               enable = ${boolToString cfg.modified.enable}, | ||||
|               show_on_dirs = ${boolToString cfg.modified.showOnDirs}, | ||||
|               show_on_open_dirs = ${boolToString cfg.modified.showOnOpenDirs}, | ||||
|             }, | ||||
| 
 | ||||
|             filesystem_watchers = { | ||||
|               enable = ${boolToString cfg.filesystemWatchers.enable}, | ||||
|               debounce_delay = ${toString cfg.filesystemWatchers.debounceDelay}, | ||||
|               ignore_dirs = ${nvim.lua.listToLuaTable cfg.filesystemWatchers.ignoreDirs}, | ||||
|             }, | ||||
| 
 | ||||
|             select_prompts = ${boolToString cfg.selectPrompts}, | ||||
|        | ||||
|             view = { | ||||
|               width = ${nvim.lua.expToLua cfg.view.width},   | ||||
|               centralize_selection = ${boolToString cfg.view.centralizeSelection}, | ||||
|               cursorline = ${boolToString cfg.view.cursorline}, | ||||
|               debounce_delay = ${toString cfg.view.debounceDelay}, | ||||
|               side = "${cfg.view.side}", | ||||
|               preserve_window_proportions = ${boolToString cfg.view.preserveWindowProportions}, | ||||
|               number = ${boolToString cfg.view.number}, | ||||
|               relativenumber = ${boolToString cfg.view.relativeNumber}, | ||||
|               signcolumn = ${cfg.view.signcolumn}, | ||||
| 
 | ||||
|               float = { | ||||
|                 enable = ${boolToString cfg.view.float.enable}, | ||||
|                 quit_on_focus_loss = ${boolToString cfg.view.float.quitOnFocusLoss}, | ||||
|                 open_win_config = ${nvim.lua.expToLua cfg.view.float.openWinConfig}, | ||||
|               }, | ||||
|             }, | ||||
| 
 | ||||
|           renderer = { | ||||
|             add_trailing = ${boolToString cfg.renderer.addTrailing}, | ||||
|             group_empty = ${boolToString cfg.renderer.groupEmpty}, | ||||
|             full_name = ${boolToString cfg.renderer.fullName}, | ||||
|             highlight_git = ${boolToString cfg.renderer.highlightGit}, | ||||
|             highlight_opened_files = ${cfg.renderer.highlightOpenedFiles}, | ||||
|             highlight_modified = ${cfg.renderer.highlightModified}, | ||||
|             root_folder_label = ${nvim.lua.expToLua cfg.renderer.rootFolderLabel}, | ||||
|             indent_width = ${toString cfg.renderer.indentWidth}, | ||||
|             indent_markers = { | ||||
|               enable = ${boolToString cfg.renderer.indentMarkers.enable}, | ||||
|               inline_arrows = ${boolToString cfg.renderer.indentMarkers.inlineArrows}, | ||||
|               icons = ${nvim.lua.expToLua cfg.renderer.indentMarkers.icons}, | ||||
|             }, | ||||
| 
 | ||||
|             icons = { | ||||
|               webdev_colors = ${boolToString cfg.renderer.icons.webdevColors}, | ||||
|               git_placement = "${cfg.renderer.icons.gitPlacement}", | ||||
|               modified_placement = "${cfg.renderer.icons.modifiedPlacement}", | ||||
|               padding = "${cfg.renderer.icons.padding}", | ||||
|               symlink_arrow = "${cfg.renderer.icons.symlinkArrow}", | ||||
|        | ||||
|               show = { | ||||
|                 git = ${boolToString cfg.renderer.icons.show.git}, | ||||
|                 folder = ${boolToString cfg.renderer.icons.show.folder}, | ||||
|                 folder_arrow = ${boolToString cfg.renderer.icons.show.folderArrow}, | ||||
|                 file = ${boolToString cfg.renderer.icons.show.file}, | ||||
|                 modified = ${boolToString cfg.renderer.icons.show.modified}, | ||||
|               }, | ||||
|          | ||||
|              glyphs = { | ||||
|               default = "${cfg.renderer.icons.glyphs.default}", | ||||
|               symlink = "${cfg.renderer.icons.glyphs.symlink}", | ||||
|               modified = "${cfg.renderer.icons.glyphs.modified}", | ||||
|            | ||||
|               folder = { | ||||
|                 default = "${cfg.renderer.icons.glyphs.folder.default}", | ||||
|                 open = "${cfg.renderer.icons.glyphs.folder.open}", | ||||
|                 arrow_open = "${cfg.renderer.icons.glyphs.folder.arrowOpen}", | ||||
|                 arrow_closed = "${cfg.renderer.icons.glyphs.folder.arrowClosed}", | ||||
|                 empty = "${cfg.renderer.icons.glyphs.folder.empty}", | ||||
|                 empty_open = "${cfg.renderer.icons.glyphs.folder.emptyOpen}", | ||||
|                 symlink = "${cfg.renderer.icons.glyphs.folder.symlink}", | ||||
|                 symlink_open = "${cfg.renderer.icons.glyphs.folder.symlinkOpen}", | ||||
|               }, | ||||
| 
 | ||||
|               git = { | ||||
|                 unstaged = "${cfg.renderer.icons.glyphs.git.unstaged}", | ||||
|                 staged = "${cfg.renderer.icons.glyphs.git.staged}", | ||||
|                 unmerged = "${cfg.renderer.icons.glyphs.git.unmerged}", | ||||
|                 renamed = "${cfg.renderer.icons.glyphs.git.renamed}", | ||||
|                 untracked = "${cfg.renderer.icons.glyphs.git.untracked}", | ||||
|                 deleted = "${cfg.renderer.icons.glyphs.git.deleted}", | ||||
|                 ignored = "${cfg.renderer.icons.glyphs.git.ignored}", | ||||
|               }, | ||||
|             }, | ||||
|           }, | ||||
|           special_files = ${nvim.lua.listToLuaTable cfg.renderer.specialFiles}, | ||||
|           symlink_destination = ${boolToString cfg.renderer.symlinkDestination}, | ||||
|         }, | ||||
|         filters = { | ||||
|           git_ignored = ${boolToString cfg.filters.gitIgnored}, | ||||
|           dotfiles = ${boolToString cfg.filters.dotfiles}, | ||||
|           git_clean = ${boolToString cfg.filters.gitClean}, | ||||
|           no_buffer = ${boolToString cfg.filters.noBuffer}, | ||||
|           exclude = ${nvim.lua.listToLuaTable cfg.filters.exclude}, | ||||
|         }, | ||||
|         trash = { | ||||
|           cmd = "${cfg.trash.cmd}", | ||||
|         }, | ||||
|         actions = { | ||||
|           use_system_clipboard = ${boolToString cfg.actions.useSystemClipboard}, | ||||
|           change_dir = { | ||||
|             enable = ${boolToString cfg.actions.changeDir.enable}, | ||||
|             global = ${boolToString cfg.actions.changeDir.global}, | ||||
|             restrict_above_cwd = ${boolToString cfg.actions.changeDir.restrictAboveCwd}, | ||||
|           }, | ||||
| 
 | ||||
|           expand_all = { | ||||
|             max_folder_discovery = ${toString cfg.actions.expandAll.maxFolderDiscovery}, | ||||
|             exclude = ${nvim.lua.listToLuaTable cfg.actions.expandAll.exclude}, | ||||
|           }, | ||||
|          | ||||
|           file_popup = { | ||||
|             open_win_config = ${nvim.lua.expToLua cfg.actions.filePopup.openWinConfig}, | ||||
|           }, | ||||
|          | ||||
|           open_file = { | ||||
|             quit_on_open = ${boolToString cfg.actions.openFile.quitOnOpen}, | ||||
|             eject = ${boolToString cfg.actions.openFile.eject}, | ||||
|             resize_window = ${boolToString cfg.actions.openFile.resizeWindow}, | ||||
|             window_picker = { | ||||
|               enable = ${boolToString cfg.actions.openFile.windowPicker.enable}, | ||||
|               picker = "${cfg.actions.openFile.windowPicker.picker}", | ||||
|               chars = "${cfg.actions.openFile.windowPicker.chars}", | ||||
|               exclude = { | ||||
|                 filetype = ${nvim.lua.listToLuaTable cfg.actions.openFile.windowPicker.exclude.filetype}, | ||||
|                 buftype = ${nvim.lua.listToLuaTable cfg.actions.openFile.windowPicker.exclude.buftype}, | ||||
|               }, | ||||
|             }, | ||||
|           }, | ||||
|          | ||||
|           remove_file = { | ||||
|             close_window = ${boolToString cfg.actions.removeFile.closeWindow}, | ||||
|           }, | ||||
|         }, | ||||
|          | ||||
|         live_filter = { | ||||
|           prefix = "${cfg.liveFilter.prefix}", | ||||
|           always_show_folders = ${boolToString cfg.liveFilter.alwaysShowFolders}, | ||||
|         }, | ||||
|          | ||||
|         tab = { | ||||
|           sync = { | ||||
|             open = ${boolToString cfg.tab.sync.open}, | ||||
|             close = ${boolToString cfg.tab.sync.close}, | ||||
|             ignore = ${nvim.lua.listToLuaTable cfg.tab.sync.ignore}, | ||||
|           }, | ||||
|         }, | ||||
|         notify = { | ||||
|           threshold = vim.log.levels.${cfg.notify.threshold}, | ||||
|           absolute_path = ${boolToString cfg.notify.absolutePath}, | ||||
|         }, | ||||
|         ui = { | ||||
|           confirm = { | ||||
|             remove = ${boolToString cfg.ui.confirm.remove}, | ||||
|             trash = ${boolToString cfg.ui.confirm.trash}, | ||||
|           }, | ||||
|         }, | ||||
|       })''; | ||||
|   }; | ||||
| } | ||||
|  | @ -1,6 +1,6 @@ | |||
| _: { | ||||
|   imports = [ | ||||
|     ./config.nix | ||||
|     ./nvimtree-lua.nix | ||||
|     ./nvimtree.nix | ||||
|   ]; | ||||
| } | ||||
							
								
								
									
										1157
									
								
								modules/filetree/nvimtree/nvimtree.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1157
									
								
								modules/filetree/nvimtree/nvimtree.nix
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue