{ config, inputs, lib, pkgs, ... }: let cfg = config.myOptions.programs.neovim; inherit (config.myOptions.other.system) username; inherit (lib) mkEnableOption mkIf; in { options.myOptions.programs.neovim.enable = mkEnableOption "neovim"; config = mkIf cfg.enable { environment.sessionVariables = { EDITOR = "nvim"; }; home-manager.users.${username} = { imports = [ inputs.nvf.homeManagerModules.default ]; programs.nvf = { enable = true; settings.vim = { package = inputs.neovim-nightly-overlay.packages.${pkgs.system}.neovim; viAlias = false; vimAlias = false; enableLuaLoader = true; scrollOffset = 7; preventJunkFiles = true; tabWidth = 4; autoIndent = false; cmdHeight = 1; useSystemClipboard = false; theme = { enable = true; name = "catppuccin"; style = "mocha"; transparent = true; }; maps = { normal = { "v" = { action = "Neotree toggle"; silent = true; }; "m" = { action = "MarkdownPreviewToggle"; silent = true; }; }; terminal = { # get out of terminal mode in toggleterm "" = { action = ""; silent = true; }; }; }; filetree.neo-tree = { enable = true; }; statusline.lualine = { enable = true; theme = "catppuccin"; }; extraPlugins = with pkgs.vimPlugins; { zen-mode.package = zen-mode-nvim; }; treesitter = { enable = true; fold = true; context.enable = true; }; autocomplete = { enable = true; alwaysComplete = false; }; # TODO neo-tree terminal.toggleterm = { enable = true; setupOpts.direction = "tab"; mappings.open = ""; # TODO shading_factor # TODO shade_terminals # TODO size }; git = { enable = true; gitsigns = { enable = true; # TODO enable / disable all the settings }; }; lsp = { enable = true; lspSignature.enable = true; lspconfig.enable = true; mappings = { addWorkspaceFolder = "wa"; codeAction = "a"; format = ""; goToDeclaration = "gD"; goToDefinition = "gd"; hover = "K"; listImplementations = "gi"; listReferences = "gr"; listWorkspaceFolders = "wl"; nextDiagnostic = "k"; previousDiagnostic = "j"; openDiagnosticFloat = "e"; removeWorkspaceFolder = "wr"; renameSymbol = "r"; signatureHelp = ""; }; }; languages = { enableDAP = true; enableExtraDiagnostics = true; enableFormat = true; enableLSP = true; enableTreesitter = true; bash.enable = true; clang = { enable = true; cHeader = true; }; java.enable = true; markdown.enable = true; nix.enable = true; rust = { enable = true; crates.enable = true; }; }; utility = { motion.leap.enable = true; preview.markdownPreview.enable = true; # TODO settings.theme = "dark"; }; visuals.fidget-nvim.enable = true; # TODO laytan/cloak.nvim telescope.enable = true; comments.comment-nvim.enable = true; # TODO learn and add harpoon }; }; }; }; }