From b56a79c1a6b8659acb7f803be17096f5dc5acba8 Mon Sep 17 00:00:00 2001 From: Michael Thomas Date: Sat, 12 Jul 2025 16:11:02 -0400 Subject: [PATCH] pkgs: add nvf config --- pkgs/default.nix | 1 + pkgs/nvf/config.nix | 263 +++++++++++++++++++++++++++++++++++++++++++ pkgs/nvf/default.nix | 25 ++++ 3 files changed, 289 insertions(+) create mode 100644 pkgs/nvf/config.nix create mode 100644 pkgs/nvf/default.nix diff --git a/pkgs/default.nix b/pkgs/default.nix index 054fd6e..7ff820a 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -2,5 +2,6 @@ homer = pkgs.callPackage ./homer {}; keycloak-theme-keywind = pkgs.callPackage ./keywind {}; nvim-custom = import ./nvim/default.nix args; + nvim-nvf = import ./nvf/default.nix args; sbarlua = pkgs.callPackage ./sbarlua {}; } diff --git a/pkgs/nvf/config.nix b/pkgs/nvf/config.nix new file mode 100644 index 0000000..c57c7dd --- /dev/null +++ b/pkgs/nvf/config.nix @@ -0,0 +1,263 @@ +{lib, ...}: let + inherit (lib.nvim.binds) mkKeymap; + theme = "gruvbox"; +in { + config.vim = { + viAlias = true; + vimAlias = true; + debugMode = { + enable = false; + level = 16; + logFile = "/tmp/nvim.log"; + }; + + # Keymaps for built-in functionality + keymaps = [ + # Diagnostics + (mkKeymap "n" "cd" "vim.diagnostic.open_float" {desc = "Line Diagnostics";}) + ]; + + spellcheck = { + enable = true; + }; + + lsp = { + # This must be enabled for the language modules to hook into + # the LSP API. + enable = true; + + formatOnSave = true; + lspkind.enable = false; + lightbulb.enable = true; + # lspsaga.enable = false; + trouble.enable = true; + lspSignature.enable = true; # conflicts with blink + # # otter-nvim.enable = isMaximal; + # # nvim-docs-view.enable = isMaximal; + }; + + debugger = { + nvim-dap = { + enable = true; + ui.enable = true; + }; + }; + + # This section does not include a comprehensive list of available language modules. + # To list all available language module options, please visit the nvf manual. + languages = { + enableFormat = true; # + enableTreesitter = true; + enableExtraDiagnostics = true; + + astro.enable = true; + bash.enable = true; + clang.enable = true; + # csharp.enable = true; + css.enable = true; + gleam.enable = true; + go.enable = true; + html.enable = true; + java.enable = true; + kotlin.enable = true; + lua.enable = true; + markdown.enable = true; + nix.enable = true; + nu.enable = true; + python.enable = true; + r.enable = true; + rust = { + enable = true; + crates.enable = true; + }; + sql.enable = true; + svelte.enable = true; + tailwind.enable = true; + ts.enable = true; + typst.enable = true; + zig.enable = true; + }; + + visuals = { + nvim-scrollbar.enable = true; + nvim-web-devicons.enable = true; + nvim-cursorline.enable = true; + cinnamon-nvim.enable = true; + fidget-nvim.enable = true; + + highlight-undo.enable = true; + indent-blankline.enable = true; + + # Fun + cellular-automaton.enable = false; + }; + + statusline = { + lualine = { + enable = true; + inherit theme; + }; + }; + + theme = { + enable = true; + name = theme; + style = "dark"; + transparent = false; + }; + + autopairs.nvim-autopairs.enable = true; + + # nvf provides various autocomplete options. The tried and tested nvim-cmp + # is enabled in default package, because it does not trigger a build. We + # enable blink-cmp in maximal because it needs to build its rust fuzzy + # matcher library. + autocomplete = { + # nvim-cmp.enable = !isMaximal; + # # blink-cmp.enable = isMaximal; + }; + + snippets.luasnip.enable = true; + + filetree = { + neo-tree = { + enable = true; + }; + }; + + tabline = { + nvimBufferline.enable = true; + }; + + treesitter.context.enable = true; + + binds = { + whichKey.enable = true; + cheatsheet.enable = true; + # hardtime-nvim.enable = isMaximal; + }; + + telescope = { + enable = true; + mappings = { + findFiles = ""; + liveGrep = "/"; + lspDefinitions = "gd"; + lspReferences = "gr"; + lspImplementations = "gI"; + lspTypeDefinitions = "gt"; + }; + }; + + git = { + enable = true; + gitsigns.enable = true; + gitsigns.codeActions.enable = false; # throws an annoying debug message + }; + + minimap = { + minimap-vim.enable = false; + # codewindow.enable = isMaximal; # lighter, faster, and uses lua for configuration + }; + + dashboard = { + dashboard-nvim.enable = false; + alpha.enable = true; + }; + + notify = { + nvim-notify.enable = true; + }; + + projects = { + # project-nvim.enable = isMaximal; + }; + + utility = { + ccc.enable = false; + vim-wakatime.enable = false; + diffview-nvim.enable = true; + yanky-nvim.enable = false; + # icon-picker.enable = isMaximal; + # surround.enable = isMaximal; + # leetcode-nvim.enable = isMaximal; + # multicursors.enable = isMaximal; + + motion = { + hop.enable = true; + leap.enable = true; + # precognition.enable = isMaximal; + }; + images = { + image-nvim.enable = false; + # img-clip.enable = isMaximal; + }; + }; + + notes = { + # obsidian.enable = false; + # neorg.enable = false; + # orgmode.enable = false; + # mind-nvim.enable = isMaximal; + todo-comments.enable = true; + }; + + terminal = { + toggleterm = { + enable = true; + lazygit.enable = true; + mappings = { + open = ""; + }; + }; + }; + + ui = { + borders.enable = true; + noice.enable = true; + colorizer.enable = true; + modes-nvim.enable = false; # the theme looks terrible with catppuccin + illuminate.enable = true; + breadcrumbs = { + # enable = isMaximal; + # navbuddy.enable = isMaximal; + }; + smartcolumn = { + enable = true; + setupOpts.custom_colorcolumn = { + # this is a freeform module, it's `buftype = int;` for configuring column position + nix = "110"; + ruby = "120"; + java = "130"; + go = ["90" "130"]; + }; + }; + fastaction.enable = true; + }; + + # assistant = { + # chatgpt.enable = false; + # copilot = { + # enable = false; + # # cmp.enable = isMaximal; + # }; + # codecompanion-nvim.enable = false; + # }; + + session = { + nvim-session-manager.enable = false; + }; + + gestures = { + gesture-nvim.enable = false; + }; + + comments = { + comment-nvim.enable = true; + }; + + presence = { + neocord.enable = false; + }; + }; +} diff --git a/pkgs/nvf/default.nix b/pkgs/nvf/default.nix new file mode 100644 index 0000000..450926a --- /dev/null +++ b/pkgs/nvf/default.nix @@ -0,0 +1,25 @@ +{ + inputs, + pkgs, + ... +}: +(inputs.nvf.lib.neovimConfiguration { + pkgs = pkgs.unstable; + modules = [ + (import ./config.nix) + # { + # config.vim = { + # # Enable custom theming options + # theme.enable = true; + # + # # Enable Treesitter + # treesitter.enable = true; + # + # # Other options will go here. Refer to the config + # # reference in Appendix B of the nvf manual. + # # ... + # }; + # } + ]; +}) +.neovim