├── .envrc ├── .github ├── FUNDING.yml ├── dependabot.yml ├── typos.toml ├── CODEOWNERS └── workflows │ ├── labeler.yml │ └── cleanup.yml ├── docs ├── man │ ├── footer.5 │ └── header.5 ├── manual │ ├── release-notes │ │ └── rl-0.9.md │ ├── installation │ │ └── modules.md │ ├── release-notes.md │ ├── tips.md │ ├── tips │ │ ├── offline-docs.md │ │ └── debugging-nvf.md │ ├── configuring.md │ └── configuring │ │ ├── custom-plugins │ │ └── non-lazy-method.md │ │ └── languages │ │ └── lsp.md ├── static │ └── script │ │ └── anchor-use.js └── html-open-tool.nix ├── modules ├── plugins │ ├── diagnostics │ │ ├── default.nix │ │ └── nvim-lint │ │ │ └── default.nix │ ├── formatter │ │ ├── default.nix │ │ └── conform-nvim │ │ │ ├── default.nix │ │ │ └── config.nix │ ├── repl │ │ ├── default.nix │ │ └── conjure │ │ │ ├── default.nix │ │ │ └── conjure.nix │ ├── runner │ │ ├── default.nix │ │ └── run-nvim │ │ │ ├── default.nix │ │ │ ├── run-nvim.nix │ │ │ └── config.nix │ ├── snippets │ │ ├── default.nix │ │ └── luasnip │ │ │ └── default.nix │ ├── comments │ │ ├── default.nix │ │ └── comment-nvim │ │ │ ├── default.nix │ │ │ └── comment-nvim.nix │ ├── debugger │ │ ├── default.nix │ │ └── nvim-dap │ │ │ └── default.nix │ ├── projects │ │ ├── default.nix │ │ └── project-nvim │ │ │ ├── default.nix │ │ │ └── config.nix │ ├── rich-presence │ │ ├── default.nix │ │ └── neocord │ │ │ ├── default.nix │ │ │ └── config.nix │ ├── statusline │ │ ├── default.nix │ │ └── lualine │ │ │ ├── default.nix │ │ │ └── supported_themes.nix │ ├── terminal │ │ ├── default.nix │ │ └── toggleterm │ │ │ └── default.nix │ ├── autopairs │ │ ├── default.nix │ │ └── nvim-autopairs │ │ │ ├── default.nix │ │ │ ├── config.nix │ │ │ └── nvim-autopairs.nix │ ├── spellcheck │ │ ├── default.nix │ │ └── vim-dirtytalk │ │ │ ├── default.nix │ │ │ ├── vim-dirtytalk.nix │ │ │ └── config.nix │ ├── tabline │ │ ├── default.nix │ │ └── nvim-bufferline │ │ │ └── default.nix │ ├── ui │ │ ├── borders │ │ │ └── default.nix │ │ ├── notifications │ │ │ ├── default.nix │ │ │ └── nvim-notify │ │ │ │ ├── default.nix │ │ │ │ └── config.nix │ │ ├── modes │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── noice │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── nvim-ufo │ │ │ ├── default.nix │ │ │ ├── nvim-ufo.nix │ │ │ └── config.nix │ │ ├── breadcrumbs │ │ │ └── default.nix │ │ ├── colorizer │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── illuminate │ │ │ ├── default.nix │ │ │ ├── config.nix │ │ │ └── illuminate.nix │ │ ├── smartcolumn │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── fastaction │ │ │ ├── default.nix │ │ │ ├── fastaction-nvim.nix │ │ │ └── config.nix │ │ ├── colorful-menu-nvim │ │ │ ├── default.nix │ │ │ ├── colorful-menu-nvim.nix │ │ │ └── config.nix │ │ ├── nvim-highlight-colors │ │ │ ├── default.nix │ │ │ └── config.nix │ │ └── default.nix │ ├── session │ │ ├── default.nix │ │ └── nvim-session-manager │ │ │ └── default.nix │ ├── utility │ │ ├── outline │ │ │ ├── default.nix │ │ │ └── aerial-nvim │ │ │ │ ├── default.nix │ │ │ │ ├── aerial-nvim.nix │ │ │ │ └── config.nix │ │ ├── gestures │ │ │ ├── default.nix │ │ │ └── gesture-nvim │ │ │ │ ├── default.nix │ │ │ │ └── gesture-nvim.nix │ │ ├── ccc │ │ │ ├── default.nix │ │ │ └── ccc.nix │ │ ├── direnv │ │ │ ├── default.nix │ │ │ ├── direnv.nix │ │ │ └── config.nix │ │ ├── images │ │ │ ├── default.nix │ │ │ ├── image-nvim │ │ │ │ ├── default.nix │ │ │ │ └── config.nix │ │ │ └── img-clip │ │ │ │ ├── default.nix │ │ │ │ ├── img-clip.nix │ │ │ │ └── config.nix │ │ ├── mkdir │ │ │ ├── default.nix │ │ │ ├── config.nix │ │ │ └── mkdir.nix │ │ ├── sleuth │ │ │ ├── default.nix │ │ │ ├── config.nix │ │ │ └── sleuth.nix │ │ ├── fzf-lua │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── harpoon │ │ │ └── default.nix │ │ ├── motion │ │ │ ├── flash │ │ │ │ ├── default.nix │ │ │ │ └── flash.nix │ │ │ ├── hop │ │ │ │ ├── default.nix │ │ │ │ ├── hop.nix │ │ │ │ └── config.nix │ │ │ ├── leap │ │ │ │ ├── default.nix │ │ │ │ └── leap.nix │ │ │ ├── precognition │ │ │ │ ├── default.nix │ │ │ │ └── config.nix │ │ │ └── default.nix │ │ ├── oil-nvim │ │ │ ├── default.nix │ │ │ └── oil-nvim.nix │ │ ├── preview │ │ │ ├── default.nix │ │ │ ├── glow │ │ │ │ ├── default.nix │ │ │ │ ├── glow.nix │ │ │ │ └── config.nix │ │ │ └── markdown-preview │ │ │ │ ├── default.nix │ │ │ │ └── config.nix │ │ ├── qmk-nvim │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── undotree │ │ │ ├── default.nix │ │ │ ├── undotree.nix │ │ │ └── config.nix │ │ ├── binds │ │ │ ├── hardtime │ │ │ │ ├── default.nix │ │ │ │ ├── hardtime.nix │ │ │ │ └── config.nix │ │ │ ├── which-key │ │ │ │ ├── default.nix │ │ │ │ └── config.nix │ │ │ ├── cheatsheet │ │ │ │ ├── default.nix │ │ │ │ ├── cheatsheet.nix │ │ │ │ └── config.nix │ │ │ └── default.nix │ │ ├── diffview │ │ │ ├── default.nix │ │ │ ├── diffview.nix │ │ │ └── config.nix │ │ ├── nix-develop │ │ │ ├── default.nix │ │ │ ├── nix-develop.nix │ │ │ └── config.nix │ │ ├── snacks-nvim │ │ │ ├── default.nix │ │ │ ├── snacks-nvim.nix │ │ │ └── config.nix │ │ ├── surround │ │ │ └── default.nix │ │ ├── telescope │ │ │ └── default.nix │ │ ├── wakatime │ │ │ ├── default.nix │ │ │ ├── config.nix │ │ │ └── vim-wakatime.nix │ │ ├── yanky-nvim │ │ │ ├── default.nix │ │ │ └── yanky-nvim.nix │ │ ├── yazi-nvim │ │ │ ├── default.nix │ │ │ ├── yazi-nvim.nix │ │ │ └── config.nix │ │ ├── icon-picker │ │ │ ├── default.nix │ │ │ ├── icon-picker.nix │ │ │ └── config.nix │ │ ├── leetcode-nvim │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── multicursors │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── nvim-biscuits │ │ │ ├── default.nix │ │ │ ├── nvim-biscuits.nix │ │ │ └── config.nix │ │ ├── smart-splits │ │ │ └── default.nix │ │ ├── new-file-template │ │ │ ├── default.nix │ │ │ └── config.nix │ │ └── default.nix │ ├── filetree │ │ ├── default.nix │ │ ├── neo-tree │ │ │ └── default.nix │ │ └── nvimtree │ │ │ └── default.nix │ ├── hydra │ │ ├── default.nix │ │ ├── hydra.nix │ │ └── config.nix │ ├── mini │ │ ├── ai │ │ │ ├── default.nix │ │ │ ├── ai.nix │ │ │ └── config.nix │ │ ├── align │ │ │ ├── default.nix │ │ │ ├── align.nix │ │ │ └── config.nix │ │ ├── clue │ │ │ ├── default.nix │ │ │ ├── clue.nix │ │ │ └── config.nix │ │ ├── diff │ │ │ ├── default.nix │ │ │ ├── diff.nix │ │ │ └── config.nix │ │ ├── doc │ │ │ ├── default.nix │ │ │ ├── doc.nix │ │ │ └── config.nix │ │ ├── extra │ │ │ ├── default.nix │ │ │ ├── extra.nix │ │ │ └── config.nix │ │ ├── files │ │ │ ├── default.nix │ │ │ ├── files.nix │ │ │ └── config.nix │ │ ├── fuzzy │ │ │ ├── default.nix │ │ │ ├── fuzzy.nix │ │ │ └── config.nix │ │ ├── git │ │ │ ├── default.nix │ │ │ ├── git.nix │ │ │ └── config.nix │ │ ├── hues │ │ │ ├── default.nix │ │ │ ├── config.nix │ │ │ └── hues.nix │ │ ├── icons │ │ │ ├── default.nix │ │ │ ├── icons.nix │ │ │ └── config.nix │ │ ├── jump │ │ │ ├── default.nix │ │ │ ├── jump.nix │ │ │ └── config.nix │ │ ├── map │ │ │ ├── default.nix │ │ │ ├── map.nix │ │ │ └── config.nix │ │ ├── misc │ │ │ ├── default.nix │ │ │ ├── misc.nix │ │ │ └── config.nix │ │ ├── move │ │ │ ├── default.nix │ │ │ ├── move.nix │ │ │ └── config.nix │ │ ├── pairs │ │ │ ├── default.nix │ │ │ ├── pairs.nix │ │ │ └── config.nix │ │ ├── pick │ │ │ ├── default.nix │ │ │ ├── pick.nix │ │ │ └── config.nix │ │ ├── test │ │ │ ├── default.nix │ │ │ ├── test.nix │ │ │ └── config.nix │ │ ├── animate │ │ │ ├── default.nix │ │ │ ├── animate.nix │ │ │ └── config.nix │ │ ├── basics │ │ │ ├── default.nix │ │ │ ├── basics.nix │ │ │ └── config.nix │ │ ├── colors │ │ │ ├── default.nix │ │ │ ├── colors.nix │ │ │ └── config.nix │ │ ├── comment │ │ │ ├── default.nix │ │ │ ├── comment.nix │ │ │ └── config.nix │ │ ├── jump2d │ │ │ ├── default.nix │ │ │ ├── jump2d.nix │ │ │ └── config.nix │ │ ├── notify │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── starter │ │ │ ├── default.nix │ │ │ ├── starter.nix │ │ │ └── config.nix │ │ ├── tabline │ │ │ ├── default.nix │ │ │ ├── tabline.nix │ │ │ └── config.nix │ │ ├── visits │ │ │ ├── default.nix │ │ │ ├── visits.nix │ │ │ └── config.nix │ │ ├── bracketed │ │ │ ├── default.nix │ │ │ ├── bracketed.nix │ │ │ └── config.nix │ │ ├── bufremove │ │ │ ├── default.nix │ │ │ ├── bufremove.nix │ │ │ └── config.nix │ │ ├── completion │ │ │ ├── default.nix │ │ │ ├── completion.nix │ │ │ └── config.nix │ │ ├── cursorword │ │ │ ├── default.nix │ │ │ ├── cursorword.nix │ │ │ └── config.nix │ │ ├── hipatterns │ │ │ ├── default.nix │ │ │ ├── hipatterns.nix │ │ │ └── config.nix │ │ ├── operators │ │ │ ├── default.nix │ │ │ ├── operators.nix │ │ │ └── config.nix │ │ ├── sessions │ │ │ ├── default.nix │ │ │ ├── sessions.nix │ │ │ └── config.nix │ │ ├── snippets │ │ │ ├── default.nix │ │ │ ├── snippets.nix │ │ │ └── config.nix │ │ ├── splitjoin │ │ │ ├── default.nix │ │ │ ├── splitjoin.nix │ │ │ └── config.nix │ │ ├── statusline │ │ │ ├── default.nix │ │ │ ├── statusline.nix │ │ │ └── config.nix │ │ ├── surround │ │ │ ├── default.nix │ │ │ ├── surround.nix │ │ │ └── config.nix │ │ ├── trailspace │ │ │ ├── default.nix │ │ │ ├── trailspace.nix │ │ │ └── config.nix │ │ ├── indentscope │ │ │ ├── default.nix │ │ │ ├── indentscope.nix │ │ │ └── config.nix │ │ └── default.nix │ ├── theme │ │ ├── default.nix │ │ └── config.nix │ ├── lsp │ │ ├── otter │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── lspkind │ │ │ ├── default.nix │ │ │ └── lspkind.nix │ │ ├── lspsaga │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── null-ls │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── trouble │ │ │ ├── default.nix │ │ │ └── trouble.nix │ │ ├── harper-ls │ │ │ ├── default.nix │ │ │ ├── config.nix │ │ │ └── harper-ls.nix │ │ ├── lightbulb │ │ │ ├── default.nix │ │ │ └── lightbulb.nix │ │ ├── lspconfig │ │ │ ├── default.nix │ │ │ ├── lspconfig.nix │ │ │ └── config.nix │ │ ├── lsp-signature │ │ │ ├── default.nix │ │ │ ├── lsp-signature.nix │ │ │ └── config.nix │ │ ├── nvim-docs-view │ │ │ ├── default.nix │ │ │ └── config.nix │ │ └── default.nix │ ├── minimap │ │ ├── default.nix │ │ ├── codewindow │ │ │ ├── default.nix │ │ │ └── codewindow.nix │ │ └── minimap-vim │ │ │ ├── default.nix │ │ │ ├── minimap-vim.nix │ │ │ └── config.nix │ ├── dashboard │ │ ├── alpha │ │ │ ├── default.nix │ │ │ ├── alpha.nix │ │ │ └── config.nix │ │ ├── startify │ │ │ └── default.nix │ │ ├── default.nix │ │ └── dashboard-nvim │ │ │ ├── default.nix │ │ │ ├── dashboard-nvim.nix │ │ │ └── config.nix │ ├── git │ │ ├── gitsigns │ │ │ └── default.nix │ │ ├── neogit │ │ │ ├── default.nix │ │ │ ├── neogit.nix │ │ │ └── config.nix │ │ ├── hunk-nvim │ │ │ ├── default.nix │ │ │ ├── hunk-nvim.nix │ │ │ └── config.nix │ │ ├── git-conflict │ │ │ ├── default.nix │ │ │ └── git-conflict.nix │ │ ├── vim-fugitive │ │ │ ├── default.nix │ │ │ ├── config.nix │ │ │ └── vim-fugitive.nix │ │ ├── gitlinker-nvim │ │ │ ├── default.nix │ │ │ ├── gitlinker-nvim.nix │ │ │ └── config.nix │ │ └── default.nix │ ├── notes │ │ ├── neorg │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── orgmode │ │ │ └── default.nix │ │ ├── mind-nvim │ │ │ ├── default.nix │ │ │ ├── mind-nvim.nix │ │ │ └── config.nix │ │ ├── obsidian │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── todo-comments │ │ │ ├── default.nix │ │ │ └── config.nix │ │ └── default.nix │ ├── assistant │ │ ├── chatgpt │ │ │ └── default.nix │ │ ├── copilot │ │ │ └── default.nix │ │ ├── avante │ │ │ └── default.nix │ │ ├── neocodeium │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── supermaven-nvim │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── codecompanion │ │ │ └── default.nix │ │ └── default.nix │ ├── visuals │ │ ├── fidget-nvim │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── cinnamon-nvim │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── highlight-undo │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── indent-blankline │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── nvim-cursorline │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── nvim-scrollbar │ │ │ ├── default.nix │ │ │ ├── config.nix │ │ │ └── scrollbar-nvim.nix │ │ ├── cellular-automaton │ │ │ └── default.nix │ │ ├── nvim-web-devicons │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── rainbow-delimiters │ │ │ ├── default.nix │ │ │ ├── rainbow-delimiters.nix │ │ │ └── config.nix │ │ ├── tiny-devicons-auto-colors │ │ │ ├── default.nix │ │ │ └── config.nix │ │ └── default.nix │ ├── completion │ │ ├── blink-cmp │ │ │ └── default.nix │ │ ├── nvim-cmp │ │ │ └── default.nix │ │ ├── default.nix │ │ ├── module.nix │ │ └── config.nix │ ├── treesitter │ │ ├── ts-context │ │ │ ├── default.nix │ │ │ └── config.nix │ │ ├── ts-textobjects │ │ │ ├── default.nix │ │ │ ├── textobjects.nix │ │ │ └── config.nix │ │ └── default.nix │ └── languages │ │ └── cue.nix ├── wrapper │ ├── lazy │ │ └── default.nix │ ├── rc │ │ └── default.nix │ ├── build │ │ ├── default.nix │ │ └── options.nix │ ├── environment │ │ ├── default.nix │ │ └── config.nix │ └── warnings │ │ └── default.nix └── neovim │ ├── mappings │ ├── default.nix │ └── config.nix │ └── init │ └── default.nix ├── release.json ├── lib ├── attrsets.nix ├── default.nix ├── types │ ├── default.nix │ └── languages.nix ├── lists.nix └── stdlib-extended.nix ├── .gitignore ├── flake ├── apps.nix ├── pkgs │ └── by-name │ │ ├── prettier-plugin-svelte │ │ └── package.nix │ │ └── prettier-plugin-astro │ │ └── package.nix ├── templates │ └── default.nix └── develop.nix ├── shell.nix ├── default.nix ├── .editorconfig └── LICENSE /.envrc: -------------------------------------------------------------------------------- 1 | use flake 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: NotAShelf 2 | -------------------------------------------------------------------------------- /docs/man/footer.5: -------------------------------------------------------------------------------- 1 | .SH "AUTHORS" 2 | .PP 3 | nvf contributors 4 | -------------------------------------------------------------------------------- /modules/plugins/diagnostics/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [./nvim-lint]; 3 | } 4 | -------------------------------------------------------------------------------- /modules/plugins/formatter/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [./conform-nvim]; 3 | } 4 | -------------------------------------------------------------------------------- /release.json: -------------------------------------------------------------------------------- 1 | { 2 | "release": "v0.9", 3 | "isReleaseBranch": false 4 | } 5 | -------------------------------------------------------------------------------- /modules/plugins/repl/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./conjure 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/runner/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./run-nvim 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/snippets/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./luasnip 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/comments/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./comment-nvim 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/debugger/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./nvim-dap 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/projects/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./project-nvim 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/rich-presence/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./neocord 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/statusline/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./lualine 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/terminal/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./toggleterm 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/autopairs/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./nvim-autopairs 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/repl/conjure/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./conjure.nix 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/spellcheck/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./vim-dirtytalk 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/tabline/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./nvim-bufferline 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/ui/borders/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./borders.nix 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/session/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./nvim-session-manager 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/ui/notifications/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./nvim-notify 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/utility/outline/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./aerial-nvim 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/filetree/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./nvimtree 4 | ./neo-tree 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/hydra/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./hydra.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/ai/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./ai.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/theme/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./theme.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/gestures/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./gesture-nvim 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /modules/wrapper/lazy/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./lazy.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/wrapper/rc/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./options.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/neovim/mappings/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./options.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/lsp/otter/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./otter.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/align/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./align.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/clue/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./clue.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/diff/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./diff.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/doc/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./doc.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/extra/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./extra.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/files/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./files.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/fuzzy/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./fuzzy.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/git/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./git.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/hues/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./hues.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/icons/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./icons.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/jump/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./jump.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/map/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./map.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/misc/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./misc.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/move/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./move.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/pairs/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./pairs.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/pick/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./pick.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/test/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./test.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/minimap/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./minimap-vim 4 | ./codewindow 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/ui/modes/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./modes.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/ui/noice/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./noice.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/wrapper/build/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./options.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/dashboard/alpha/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./alpha.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/git/gitsigns/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./gitsigns.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/git/neogit/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./neogit.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/lsp/lspkind/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./lspkind.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/lsp/lspsaga/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./lspsaga.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/lsp/null-ls/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./null-ls.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/lsp/trouble/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./trouble.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/animate/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./animate.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/basics/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./basics.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/colors/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./colors.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/comment/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./comment.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/jump2d/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./jump2d.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/notify/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./notify.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/starter/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./starter.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/tabline/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./tabline.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/visits/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./visits.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/notes/neorg/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./neorg.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/notes/orgmode/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./orgmode.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/ui/nvim-ufo/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./nvim-ufo.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/ccc/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./ccc.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/direnv/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./direnv.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/images/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./image-nvim 4 | ./img-clip 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/mkdir/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./mkdir.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/sleuth/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./sleuth.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/wrapper/environment/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./options.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/assistant/chatgpt/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./chatgpt.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/assistant/copilot/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./copilot.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/debugger/nvim-dap/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./nvim-dap.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/filetree/neo-tree/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./neo-tree.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/filetree/nvimtree/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./nvimtree.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/git/hunk-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./hunk-nvim.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/lsp/harper-ls/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./harper-ls.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/lsp/lightbulb/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./lightbulb.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/lsp/lspconfig/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./lspconfig.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/bracketed/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./bracketed.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/bufremove/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./bufremove.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/completion/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./completion.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/cursorword/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./cursorword.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/hipatterns/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./hipatterns.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/operators/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./operators.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/sessions/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./sessions.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/snippets/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./snippets.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/splitjoin/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./splitjoin.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/statusline/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./statusline.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/surround/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./surround.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/trailspace/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./trailspace.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/notes/mind-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./mind-nvim.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/notes/obsidian/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./obsidian.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/runner/run-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./run-nvim.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/snippets/luasnip/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./luasnip.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/statusline/lualine/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./lualine.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/ui/breadcrumbs/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./breadcrumbs.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/ui/colorizer/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./colorizer.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/ui/illuminate/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./illuminate.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/ui/smartcolumn/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./smartcolumn.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/fzf-lua/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./fzf-lua.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/harpoon/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./harpoon.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/motion/flash/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./flash.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/motion/hop/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./hop.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/oil-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./oil-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/preview/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./markdown-preview 4 | ./glow 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/preview/glow/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./glow.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/qmk-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./qmk-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/undotree/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./undotree.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/visuals/fidget-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./fidget.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/assistant/avante/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./avante-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/assistant/neocodeium/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./neocodeium.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/completion/blink-cmp/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./blink-cmp.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/completion/nvim-cmp/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./nvim-cmp.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/dashboard/startify/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./startify.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/diagnostics/nvim-lint/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./nvim-lint.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/git/git-conflict/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./git-conflict.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/git/vim-fugitive/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./vim-fugitive.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/lsp/lsp-signature/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./lsp-signature.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/mini/indentscope/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./indentscope.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/minimap/codewindow/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./codewindow.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/minimap/minimap-vim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./minimap-vim.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/rich-presence/neocord/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./neocord.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/terminal/toggleterm/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./toggleterm.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/treesitter/ts-context/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./context.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/ui/fastaction/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./fastaction-nvim.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/binds/hardtime/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./hardtime.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/diffview/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./config.nix 4 | ./diffview.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/motion/leap/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./leap.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/nix-develop/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./nix-develop.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/snacks-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./snacks-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/surround/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./config.nix 4 | ./surround.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/telescope/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./telescope.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/wakatime/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./vim-wakatime.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/yanky-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./yanky-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/yazi-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./yazi-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/comments/comment-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./comment-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/dashboard/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./alpha 4 | ./dashboard-nvim 5 | ./startify 6 | ]; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/formatter/conform-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./conform-nvim.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/git/gitlinker-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./gitlinker-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/lsp/nvim-docs-view/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./nvim-docs-view.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/notes/todo-comments/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./todo-comments.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/projects/project-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./project-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/binds/which-key/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./which-key.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/icon-picker/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./icon-picker.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/images/image-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./image-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/images/img-clip/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./img-clip.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/leetcode-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./leetcode-nvim.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/multicursors/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./multicursors.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/nvim-biscuits/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./nvim-biscuits.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/smart-splits/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./smart-splits.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/visuals/cinnamon-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./cinnamon-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /lib/attrsets.nix: -------------------------------------------------------------------------------- 1 | {lib}: let 2 | inherit (builtins) listToAttrs; 3 | in { 4 | mapListToAttrs = f: list: listToAttrs (map f list); 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/assistant/supermaven-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./supermaven-nvim.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/autopairs/nvim-autopairs/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./nvim-autopairs.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/dashboard/dashboard-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./dashboard-nvim.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/spellcheck/vim-dirtytalk/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./vim-dirtytalk.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/tabline/nvim-bufferline/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./nvim-bufferline.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/treesitter/ts-textobjects/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./textobjects.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/ui/colorful-menu-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./colorful-menu-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/ui/notifications/nvim-notify/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./nvim-notify.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/binds/cheatsheet/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./cheatsheet.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/binds/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./which-key 4 | ./cheatsheet 5 | ./hardtime 6 | ]; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/utility/motion/precognition/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./precognition.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/outline/aerial-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./aerial-nvim.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/visuals/highlight-undo/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./highlight-undo.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/visuals/indent-blankline/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./indent-blankline.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/visuals/nvim-cursorline/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./nvim-cursorline.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/visuals/nvim-scrollbar/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./scrollbar-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/assistant/codecompanion/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./codecompanion-nvim.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/ui/nvim-highlight-colors/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./nvim-highlight-colors.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/gestures/gesture-nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./gesture-nvim.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/new-file-template/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./new-file-template.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/visuals/cellular-automaton/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./cellular-automaton.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/visuals/nvim-web-devicons/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./nvim-web-devicons.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/visuals/rainbow-delimiters/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./rainbow-delimiters.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/session/nvim-session-manager/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./nvim-session-manager.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/utility/motion/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./flash 4 | ./hop 5 | ./leap 6 | ./precognition 7 | ]; 8 | } 9 | -------------------------------------------------------------------------------- /modules/plugins/utility/preview/markdown-preview/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./markdown-preview.nix 4 | ./config.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/visuals/tiny-devicons-auto-colors/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./config.nix 4 | ./tiny-devicons-auto-colors.nix 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /modules/plugins/completion/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./module.nix 4 | ./config.nix 5 | 6 | ./nvim-cmp 7 | ./blink-cmp 8 | ]; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/notes/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./obsidian 4 | ./orgmode 5 | ./neorg 6 | ./mind-nvim 7 | ./todo-comments 8 | ]; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/statusline/lualine/supported_themes.nix: -------------------------------------------------------------------------------- 1 | [ 2 | "tokyonight" 3 | "onedark" 4 | "catppuccin" 5 | "oxocarbon" 6 | "gruvbox" 7 | "nord" 8 | "mellow" 9 | ] 10 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: github-actions 4 | open-pull-requests-limit: 15 5 | directory: "/" 6 | schedule: 7 | interval: daily 8 | -------------------------------------------------------------------------------- /modules/plugins/mini/extra/extra.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.mini.extra = { 5 | enable = mkEnableOption "mini.extra"; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/mini/colors/colors.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.mini.colors = { 5 | enable = mkEnableOption "mini.colors"; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/assistant/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./chatgpt 4 | ./copilot 5 | ./codecompanion 6 | ./supermaven-nvim 7 | ./avante 8 | ./neocodeium 9 | ]; 10 | } 11 | -------------------------------------------------------------------------------- /modules/plugins/treesitter/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | # treesitter extras 4 | ./ts-context 5 | ./ts-textobjects 6 | 7 | ./treesitter.nix 8 | ./config.nix 9 | ]; 10 | } 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore nix artifacts 2 | result 3 | result/ 4 | .direnv 5 | 6 | # Ignore files generated by common IDEs 7 | .vscode/* 8 | .idea/* 9 | 10 | # Ignore log files generated by my debuggers 11 | *.log 12 | *.log.* 13 | -------------------------------------------------------------------------------- /modules/plugins/minimap/minimap-vim/minimap-vim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.minimap.minimap-vim = { 5 | enable = mkEnableOption "minimap view [minimap-vim]"; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/utility/direnv/direnv.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.utility.direnv.enable = mkEnableOption "syncing nvim shell environment with direnv's using `direnv.vim`"; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/utility/icon-picker/icon-picker.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.utility.icon-picker = { 5 | enable = mkEnableOption "nerdfonts icon picker for nvim"; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/completion/module.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.autocomplete = { 5 | enableSharedCmpSources = mkEnableOption "sources shared by blink.cmp and nvim-cmp"; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/notes/mind-nvim/mind-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.notes.mind-nvim = { 5 | enable = mkEnableOption "note organizer tool for Neovim [mind-nvim]"; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/utility/sleuth/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | cfg = config.vim.utility.sleuth; 8 | in { 9 | vim.startPlugins = mkIf cfg.enable ["vim-sleuth"]; 10 | } 11 | -------------------------------------------------------------------------------- /modules/plugins/utility/undotree/undotree.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.utility.undotree = { 5 | enable = mkEnableOption "undo history visualizer for Vim [undotree]"; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/hydra/hydra.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.utility.hydra = { 5 | enable = mkEnableOption "utility for creating custom submodes and menus [nvimtools/hydra.nvim]"; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/utility/nix-develop/nix-develop.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.utility.nix-develop.enable = mkEnableOption "in-neovim `nix develop`, `nix shell`, and more using `nix-develop.nvim`"; 5 | } 6 | -------------------------------------------------------------------------------- /modules/plugins/utility/mkdir/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | cfg = config.vim.utility.mkdir; 8 | in { 9 | vim = mkIf cfg.enable { 10 | startPlugins = ["mkdir-nvim"]; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /modules/plugins/utility/direnv/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | 8 | cfg = config.vim.utility.direnv; 9 | in { 10 | vim = mkIf cfg.enable { 11 | startPlugins = ["direnv-vim"]; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /modules/neovim/init/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./autocmds.nix 4 | ./basic.nix 5 | ./clipboard.nix 6 | ./debug.nix 7 | ./diagnostics.nix 8 | ./highlight.nix 9 | ./lsp.nix 10 | ./spellcheck.nix 11 | ./util.nix 12 | ]; 13 | } 14 | -------------------------------------------------------------------------------- /modules/plugins/utility/binds/cheatsheet/cheatsheet.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.binds.cheatsheet = { 5 | enable = mkEnableOption "cheatsheet-nvim: searchable cheatsheet for nvim using telescope"; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/utility/mkdir/mkdir.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.utility.mkdir.enable = mkEnableOption '' 5 | parent directory creation when editing a nested path that does not exist using `mkdir.nvim` 6 | ''; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/utility/nix-develop/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | cfg = config.vim.utility.nix-develop; 8 | in { 9 | vim = mkIf cfg.enable { 10 | startPlugins = ["nix-develop-nvim"]; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /modules/plugins/utility/sleuth/sleuth.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | options.vim.utility.sleuth.enable = mkEnableOption '' 5 | automatically adjusting options such as `shiftwidth` or `expandtab`, using `vim-sleuth` 6 | ''; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/git/vim-fugitive/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | 8 | cfg = config.vim.git.vim-fugitive; 9 | in { 10 | config = mkIf cfg.enable { 11 | vim.startPlugins = ["vim-fugitive"]; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /modules/wrapper/environment/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.attrsets) attrValues; 7 | 8 | cfg = config.vim; 9 | in { 10 | config = { 11 | vim.startPlugins = map (x: x.package) (attrValues cfg.extraPlugins); 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /docs/manual/release-notes/rl-0.9.md: -------------------------------------------------------------------------------- 1 | # Release 0.9 {#sec-release-0-9} 2 | 3 | ## Changelog {#sec-release-0-9-changelog} 4 | 5 | [suimong](https://github.com/suimong): 6 | 7 | - Fix `vim.tabline.nvimBufferline` where `setupOpts.options.hover` requires 8 | `vim.opt.mousemoveevent` to be set. 9 | -------------------------------------------------------------------------------- /modules/plugins/spellcheck/vim-dirtytalk/vim-dirtytalk.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.modules) mkAliasOptionModule; 3 | in { 4 | imports = [ 5 | (mkAliasOptionModule ["vim" "spellcheck" "vim-dirtytalk" "enable"] ["vim" "spellcheck" "programmingWordlist" "enable"]) 6 | ]; 7 | } 8 | -------------------------------------------------------------------------------- /modules/plugins/mini/ai/ai.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.ai = { 6 | enable = mkEnableOption "mini.ai"; 7 | setupOpts = mkPluginSetupOption "mini.ai" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/doc/doc.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.doc = { 6 | enable = mkEnableOption "mini.doc"; 7 | setupOpts = mkPluginSetupOption "mini.doc" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/git/git.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.git = { 6 | enable = mkEnableOption "mini.git"; 7 | setupOpts = mkPluginSetupOption "mini.git" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/map/map.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.map = { 6 | enable = mkEnableOption "mini.map"; 7 | setupOpts = mkPluginSetupOption "mini.map" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /.github/typos.toml: -------------------------------------------------------------------------------- 1 | 2 | files.extend-exclude = ["npins/sources.json"] 3 | default.extend-ignore-words-re = [ 4 | "(?i)(noice)", 5 | "befores", 6 | "annote", 7 | "viw", 8 | "typ", 9 | "edn", 10 | "esy", 11 | "BA", # somehow "BANanaD3V" is valid, but BA is not... 12 | "Emac" 13 | ] 14 | 15 | -------------------------------------------------------------------------------- /flake/apps.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.meta) getExe; 3 | in { 4 | perSystem = {config, ...}: { 5 | apps = { 6 | nix.program = getExe config.packages.nix; 7 | maximal.program = getExe config.packages.maximal; 8 | default = config.apps.nix; 9 | }; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /modules/plugins/mini/clue/clue.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.clue = { 6 | enable = mkEnableOption "mini.clue"; 7 | setupOpts = mkPluginSetupOption "mini.clue" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/diff/diff.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.diff = { 6 | enable = mkEnableOption "mini.diff"; 7 | setupOpts = mkPluginSetupOption "mini.diff" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/jump/jump.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.jump = { 6 | enable = mkEnableOption "mini.jump"; 7 | setupOpts = mkPluginSetupOption "mini.jump" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/misc/misc.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.misc = { 6 | enable = mkEnableOption "mini.misc"; 7 | setupOpts = mkPluginSetupOption "mini.misc" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/move/move.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.move = { 6 | enable = mkEnableOption "mini.move"; 7 | setupOpts = mkPluginSetupOption "mini.move" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/pick/pick.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.pick = { 6 | enable = mkEnableOption "mini.pick"; 7 | setupOpts = mkPluginSetupOption "mini.pick" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/test/test.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.test = { 6 | enable = mkEnableOption "mini.test"; 7 | setupOpts = mkPluginSetupOption "mini.test" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/align/align.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.align = { 6 | enable = mkEnableOption "mini.align"; 7 | setupOpts = mkPluginSetupOption "mini.align" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/files/files.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.files = { 6 | enable = mkEnableOption "mini.files"; 7 | setupOpts = mkPluginSetupOption "mini.files" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/fuzzy/fuzzy.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.fuzzy = { 6 | enable = mkEnableOption "mini.fuzzy"; 7 | setupOpts = mkPluginSetupOption "mini.fuzzy" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/icons/icons.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.icons = { 6 | enable = mkEnableOption "mini.icons"; 7 | setupOpts = mkPluginSetupOption "mini.icons" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/pairs/pairs.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.pairs = { 6 | enable = mkEnableOption "mini.pairs"; 7 | setupOpts = mkPluginSetupOption "mini.pairs" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/ui/nvim-ufo/nvim-ufo.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.ui.nvim-ufo = { 6 | enable = mkEnableOption "nvim-ufo"; 7 | setupOpts = mkPluginSetupOption "nvim-ufo" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Codeowners should be used to distinguish the maintainers of the project 2 | # and not contributors of specific modules to nvf. While adding a new module 3 | # please consider adding yourself to 'meta.maintainers' in the module instead 4 | # of CODEOWNERS here. 5 | * @NotAShelf @horriblename @Soliprem 6 | -------------------------------------------------------------------------------- /modules/plugins/mini/basics/basics.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.basics = { 6 | enable = mkEnableOption "mini.basics"; 7 | setupOpts = mkPluginSetupOption "mini.basics" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/jump2d/jump2d.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.jump2d = { 6 | enable = mkEnableOption "mini.jump2d"; 7 | setupOpts = mkPluginSetupOption "mini.jump2d" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/visits/visits.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.visits = { 6 | enable = mkEnableOption "mini.visits"; 7 | setupOpts = mkPluginSetupOption "mini.visits" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/animate/animate.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.animate = { 6 | enable = mkEnableOption "mini.animate"; 7 | setupOpts = mkPluginSetupOption "mini.animate" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/comment/comment.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.comment = { 6 | enable = mkEnableOption "mini.comment"; 7 | setupOpts = mkPluginSetupOption "mini.comment" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/starter/starter.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.starter = { 6 | enable = mkEnableOption "mini.starter"; 7 | setupOpts = mkPluginSetupOption "mini.starter" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/tabline/tabline.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.tabline = { 6 | enable = mkEnableOption "mini.tabline"; 7 | setupOpts = mkPluginSetupOption "mini.tabline" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/sessions/sessions.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.sessions = { 6 | enable = mkEnableOption "mini.sessions"; 7 | setupOpts = mkPluginSetupOption "mini.sessions" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/snippets/snippets.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.snippets = { 6 | enable = mkEnableOption "mini.snippets"; 7 | setupOpts = mkPluginSetupOption "mini.snippets" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/surround/surround.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.surround = { 6 | enable = mkEnableOption "mini.surround"; 7 | setupOpts = mkPluginSetupOption "mini.surround" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/wrapper/build/options.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.types) package; 3 | inherit (lib.options) mkOption; 4 | in { 5 | options.vim.build = { 6 | finalPackage = mkOption { 7 | type = package; 8 | readOnly = true; 9 | description = "final output package"; 10 | }; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /modules/plugins/mini/bracketed/bracketed.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.bracketed = { 6 | enable = mkEnableOption "mini.bracketed"; 7 | setupOpts = mkPluginSetupOption "mini.bracketed" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/bufremove/bufremove.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.bufremove = { 6 | enable = mkEnableOption "mini.bufremove"; 7 | setupOpts = mkPluginSetupOption "mini.bufremove" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/operators/operators.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.operators = { 6 | enable = mkEnableOption "mini.operators"; 7 | setupOpts = mkPluginSetupOption "mini.operators" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/splitjoin/splitjoin.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.splitjoin = { 6 | enable = mkEnableOption "mini.splitjoin"; 7 | setupOpts = mkPluginSetupOption "mini.splitjoin" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/completion/completion.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.completion = { 6 | enable = mkEnableOption "mini.completion"; 7 | setupOpts = mkPluginSetupOption "mini.completion" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/cursorword/cursorword.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.cursorword = { 6 | enable = mkEnableOption "mini.cursorword"; 7 | setupOpts = mkPluginSetupOption "mini.cursorword" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/hipatterns/hipatterns.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.hipatterns = { 6 | enable = mkEnableOption "mini.hipatterns"; 7 | setupOpts = mkPluginSetupOption "mini.hipatterns" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/statusline/statusline.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.statusline = { 6 | enable = mkEnableOption "mini.statusline"; 7 | setupOpts = mkPluginSetupOption "mini.statusline" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/trailspace/trailspace.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.mini.trailspace = { 6 | enable = mkEnableOption "mini.trailspace"; 7 | setupOpts = mkPluginSetupOption "mini.trailspace" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/ui/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./borders 4 | ./breadcrumbs 5 | ./colorful-menu-nvim 6 | ./nvim-highlight-colors 7 | ./colorizer 8 | ./fastaction 9 | ./illuminate 10 | ./modes 11 | ./noice 12 | ./notifications 13 | ./nvim-ufo 14 | ./smartcolumn 15 | ]; 16 | } 17 | -------------------------------------------------------------------------------- /shell.nix: -------------------------------------------------------------------------------- 1 | # Make the behaviour of `nix-shell` consistent with the one of `nix develop` 2 | # by returning the default devShell output from the flake. This is useful when 3 | # I do not want to work with direnv, or simply need backwards compatibility. 4 | {system ? builtins.currentSystem}: let 5 | nvf = import ./.; 6 | in 7 | nvf.devShells.${system}.default 8 | -------------------------------------------------------------------------------- /modules/plugins/theme/config.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.modules) mkDefault; 3 | in { 4 | config = { 5 | vim.theme = { 6 | enable = mkDefault false; 7 | name = mkDefault "onedark"; 8 | style = mkDefault "darker"; 9 | transparent = mkDefault false; 10 | extraConfig = mkDefault ""; 11 | }; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /modules/plugins/ui/fastaction/fastaction-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.ui.fastaction = { 6 | enable = mkEnableOption "overriding vim.ui.select with fastaction.nvim"; 7 | setupOpts = mkPluginSetupOption "fastaction" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/utility/binds/hardtime/hardtime.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.binds.hardtime-nvim = { 6 | enable = mkEnableOption "hardtime helper for no repeat keybinds"; 7 | 8 | setupOpts = mkPluginSetupOption "hardtime-nvim" {}; 9 | }; 10 | } 11 | -------------------------------------------------------------------------------- /modules/plugins/visuals/rainbow-delimiters/rainbow-delimiters.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.visuals.rainbow-delimiters = { 6 | enable = mkEnableOption "rainbow-delimiters"; 7 | setupOpts = mkPluginSetupOption "rainbow-delimiters" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/lsp/lsp-signature/lsp-signature.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.lsp = { 6 | lspSignature = { 7 | enable = mkEnableOption "lsp signature viewer"; 8 | setupOpts = mkPluginSetupOption "lsp-signature" {}; 9 | }; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /docs/manual/installation/modules.md: -------------------------------------------------------------------------------- 1 | # Module Installation {#ch-module-installation} 2 | 3 | The below chapters will describe installing nvf as NixOS and Home-Manager 4 | modules. Note that those methods are mutually exclusive, and will likely cause 5 | path collisions if used simultaneously. 6 | 7 | ```{=include=} chapters 8 | modules/nixos.md 9 | modules/home-manager.md 10 | ``` 11 | -------------------------------------------------------------------------------- /modules/plugins/git/vim-fugitive/vim-fugitive.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.options) mkEnableOption; 7 | in { 8 | options.vim.git.vim-fugitive = { 9 | enable = mkEnableOption "vim-fugitive" // {default = config.vim.git.enable;}; 10 | 11 | # TODO: sane default keybinds for vim-fugitive 12 | # mappings = {}; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /modules/plugins/utility/diffview/diffview.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.utility.diffview-nvim = { 6 | enable = mkEnableOption "diffview-nvim: cycle through diffs for all modified files for any git rev"; 7 | setupOpts = mkPluginSetupOption "Fidget" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/utility/images/img-clip/img-clip.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | 4 | inherit (lib.nvim.types) mkPluginSetupOption; 5 | in { 6 | options.vim.utility.images.img-clip = { 7 | enable = mkEnableOption "img-clip to paste images into any markup language"; 8 | 9 | setupOpts = mkPluginSetupOption "img-clip" {}; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /modules/plugins/utility/nvim-biscuits/nvim-biscuits.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.utility.nvim-biscuits = { 6 | enable = mkEnableOption "a Neovim port of Assorted Biscuits [nvim-biscuits]"; 7 | 8 | setupOpts = mkPluginSetupOption "nvim-biscuits" {}; 9 | }; 10 | } 11 | -------------------------------------------------------------------------------- /modules/plugins/lsp/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | # nvim lsp support 4 | ./config.nix 5 | ./module.nix 6 | 7 | ./lspconfig 8 | ./lspsaga 9 | ./null-ls 10 | ./harper-ls 11 | 12 | # lsp plugins 13 | ./lspsaga 14 | ./trouble 15 | ./lsp-signature 16 | ./lightbulb 17 | ./otter 18 | ./lspkind 19 | ./nvim-docs-view 20 | ]; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/utility/fzf-lua/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | 8 | cfg = config.vim.fzf-lua; 9 | in { 10 | vim.lazy.plugins."fzf-lua" = mkIf cfg.enable { 11 | package = "fzf-lua"; 12 | cmd = ["FzfLua"]; 13 | setupModule = "fzf-lua"; 14 | setupOpts = cfg.setupOpts // {"@1" = cfg.profile;}; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /modules/plugins/utility/motion/hop/hop.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.binds) mkMappingOption; 4 | in { 5 | options.vim.utility.motion.hop = { 6 | mappings = { 7 | hop = mkMappingOption "Jump to occurrences [hop.nvim]" "h"; 8 | }; 9 | 10 | enable = mkEnableOption "Hop.nvim plugin (easy motion)"; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /modules/plugins/ui/colorful-menu-nvim/colorful-menu-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.ui.colorful-menu-nvim = { 6 | enable = mkEnableOption "treesitter highlighted completion menus [colorful-menu.nvim]"; 7 | setupOpts = mkPluginSetupOption "colorful-menu-nvim" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/utility/snacks-nvim/snacks-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.utility.snacks-nvim = { 6 | enable = mkEnableOption '' 7 | collection of QoL plugins for Neovim [snacks-nvim] 8 | ''; 9 | 10 | setupOpts = mkPluginSetupOption "snacks-nvim" {}; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /modules/plugins/dashboard/dashboard-nvim/dashboard-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.dashboard.dashboard-nvim = { 6 | enable = mkEnableOption "Fancy and Blazing Fast start screen plugin of neovim [dashboard.nvim]"; 7 | setupOpts = mkPluginSetupOption "dashboard.nvim" {}; 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /modules/plugins/mini/extra/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | 9 | cfg = config.vim.mini.extra; 10 | in { 11 | vim = mkIf cfg.enable { 12 | startPlugins = ["mini-extra"]; 13 | 14 | pluginRC.mini-extra = entryAnywhere '' 15 | require("mini.extra").setup() 16 | ''; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /modules/plugins/mini/colors/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | 9 | cfg = config.vim.mini.colors; 10 | in { 11 | vim = mkIf cfg.enable { 12 | startPlugins = ["mini-colors"]; 13 | 14 | pluginRC.mini-colors = entryAnywhere '' 15 | require("mini.colors").setup() 16 | ''; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /modules/plugins/git/gitlinker-nvim/gitlinker-nvim.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.options) mkEnableOption; 7 | inherit (lib.nvim.types) mkPluginSetupOption; 8 | in { 9 | options.vim.git.gitlinker-nvim = { 10 | enable = mkEnableOption "gitlinker-nvim" // {default = config.vim.git.enable;}; 11 | setupOpts = mkPluginSetupOption "gitlinker-nvim" {}; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /modules/plugins/assistant/supermaven-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | cfg = config.vim.assistant.supermaven-nvim; 7 | in { 8 | config = lib.mkIf cfg.enable { 9 | vim.lazy.plugins = { 10 | supermaven-nvim = { 11 | package = "supermaven-nvim"; 12 | setupModule = "supermaven-nvim"; 13 | inherit (cfg) setupOpts; 14 | }; 15 | }; 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /modules/plugins/git/hunk-nvim/hunk-nvim.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.options) mkEnableOption; 7 | inherit (lib.nvim.types) mkPluginSetupOption; 8 | in { 9 | options.vim.git.hunk-nvim = { 10 | enable = mkEnableOption "tool for splitting diffs in Neovim [hunk-nvim]" // {default = config.vim.git.enable;}; 11 | setupOpts = mkPluginSetupOption "hunk-nvim" {}; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /modules/plugins/repl/conjure/conjure.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | pkgs, 4 | lib, 5 | ... 6 | }: let 7 | inherit (lib.options) mkEnableOption; 8 | inherit (lib.modules) mkIf; 9 | 10 | cfg = config.vim.repl.conjure; 11 | in { 12 | options.vim.repl.conjure = { 13 | enable = mkEnableOption "Conjure"; 14 | }; 15 | 16 | config = mkIf cfg.enable { 17 | vim.startPlugins = [pkgs.vimPlugins.conjure]; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/visuals/fidget-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | 8 | cfg = config.vim.visuals.fidget-nvim; 9 | in { 10 | config = mkIf cfg.enable { 11 | vim.lazy.plugins.fidget-nvim = { 12 | package = "fidget-nvim"; 13 | setupModule = "fidget"; 14 | event = "LspAttach"; 15 | inherit (cfg) setupOpts; 16 | }; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /default.nix: -------------------------------------------------------------------------------- 1 | (import ( 2 | let 3 | lock = builtins.fromJSON (builtins.readFile ./flake.lock); 4 | inherit (lock.nodes.flake-compat.locked) url rev narHash; 5 | in 6 | builtins.fetchTarball { 7 | url = "${url}/archive/${rev}.tar.gz"; 8 | sha256 = narHash; 9 | } 10 | ) { 11 | src = ./.; 12 | copySourceTreeToStore = false; 13 | useBuiltinsFetchTree = true; 14 | }) 15 | .defaultNix 16 | -------------------------------------------------------------------------------- /modules/plugins/lsp/lspconfig/lspconfig.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption mkOption; 3 | inherit (lib.types) attrsOf str; 4 | in { 5 | options.vim.lsp.lspconfig = { 6 | enable = mkEnableOption "nvim-lspconfig, also enabled automatically"; 7 | 8 | sources = mkOption { 9 | description = "nvim-lspconfig sources"; 10 | type = attrsOf str; 11 | default = {}; 12 | }; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /modules/plugins/ui/nvim-ufo/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | config, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | 8 | cfg = config.vim.ui.nvim-ufo; 9 | in { 10 | config = mkIf cfg.enable { 11 | vim = { 12 | startPlugins = ["promise-async"]; 13 | lazy.plugins.nvim-ufo = { 14 | package = "nvim-ufo"; 15 | setupModule = "ufo"; 16 | inherit (cfg) setupOpts; 17 | }; 18 | }; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /modules/plugins/mini/ai/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.ai; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-ai"]; 14 | 15 | pluginRC.mini-ai = entryAnywhere '' 16 | require("mini.ai").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/doc/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.doc; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-doc"]; 14 | 15 | pluginRC.mini-doc = entryAnywhere '' 16 | require("mini.doc").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/git/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.git; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-git"]; 14 | 15 | pluginRC.mini-git = entryAnywhere '' 16 | require("mini.git").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/map/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.map; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-map"]; 14 | 15 | pluginRC.mini-map = entryAnywhere '' 16 | require("mini.map").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/clue/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.clue; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-clue"]; 14 | 15 | pluginRC.mini-clue = entryAnywhere '' 16 | require("mini.clue").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/diff/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.diff; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-diff"]; 14 | 15 | pluginRC.mini-diff = entryAnywhere '' 16 | require("mini.diff").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/hues/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.hues; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-hues"]; 14 | 15 | pluginRC.mini-hues = entryAnywhere '' 16 | require("mini.hues").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/jump/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.jump; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-jump"]; 14 | 15 | pluginRC.mini-jump = entryAnywhere '' 16 | require("mini.jump").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/misc/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.misc; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-misc"]; 14 | 15 | pluginRC.mini-misc = entryAnywhere '' 16 | require("mini.misc").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/move/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.move; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-move"]; 14 | 15 | pluginRC.mini-move = entryAnywhere '' 16 | require("mini.move").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/pick/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.pick; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-pick"]; 14 | 15 | pluginRC.mini-pick = entryAnywhere '' 16 | require("mini.pick").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/test/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.test; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-test"]; 14 | 15 | pluginRC.mini-test = entryAnywhere '' 16 | require("mini.test").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/align/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.align; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-align"]; 14 | 15 | pluginRC.mini-align = entryAnywhere '' 16 | require("mini.align").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/files/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.files; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-files"]; 14 | 15 | pluginRC.mini-files = entryAnywhere '' 16 | require("mini.files").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/fuzzy/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.fuzzy; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-fuzzy"]; 14 | 15 | pluginRC.mini-fuzzy = entryAnywhere '' 16 | require("mini.fuzzy").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/icons/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.icons; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-icons"]; 14 | 15 | pluginRC.mini-icons = entryAnywhere '' 16 | require("mini.icons").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/pairs/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.pairs; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-pairs"]; 14 | 15 | pluginRC.mini-pairs = entryAnywhere '' 16 | require("mini.pairs").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /docs/manual/release-notes.md: -------------------------------------------------------------------------------- 1 | # Release Notes {#ch-release-notes} 2 | 3 | This section lists the release notes for tagged version of **nvf** and the 4 | current main current main branch 5 | 6 | ```{=include=} chapters 7 | release-notes/rl-0.1.md 8 | release-notes/rl-0.2.md 9 | release-notes/rl-0.3.md 10 | release-notes/rl-0.4.md 11 | release-notes/rl-0.5.md 12 | release-notes/rl-0.6.md 13 | release-notes/rl-0.7.md 14 | release-notes/rl-0.8.md 15 | release-notes/rl-0.9.md 16 | ``` 17 | -------------------------------------------------------------------------------- /modules/plugins/lsp/harper-ls/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | pkgs, 5 | ... 6 | }: let 7 | inherit (lib.modules) mkIf; 8 | inherit (lib.meta) getExe; 9 | 10 | cfg = config.vim.lsp; 11 | in { 12 | config = mkIf (cfg.enable && cfg.harper-ls.enable) { 13 | vim.lsp.servers.harper-ls = { 14 | root_markers = [".git"]; 15 | cmd = [(getExe pkgs.harper) "--stdio"]; 16 | settings = {harper-ls = cfg.harper-ls.settings;}; 17 | }; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/basics/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.basics; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-basics"]; 14 | 15 | pluginRC.mini-basics = entryAnywhere '' 16 | require("mini.basics").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/jump2d/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.jump2d; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-jump2d"]; 14 | 15 | pluginRC.mini-jump2d = entryAnywhere '' 16 | require("mini.jump2d").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/visits/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.visits; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-visits"]; 14 | 15 | pluginRC.mini-visits = entryAnywhere '' 16 | require("mini.visits").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/animate/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.animate; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-animate"]; 14 | 15 | pluginRC.mini-animate = entryAnywhere '' 16 | require("mini.animate").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/comment/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.comment; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-comment"]; 14 | 15 | pluginRC.mini-comment = entryAnywhere '' 16 | require("mini.comment").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/starter/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.starter; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-starter"]; 14 | 15 | pluginRC.mini-starter = entryAnywhere '' 16 | require("mini.starter").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/tabline/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.tabline; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-tabline"]; 14 | 15 | pluginRC.mini-tabline = entryAnywhere '' 16 | require("mini.tabline").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/cursorword/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.cursorword; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-cursorword"]; 14 | 15 | pluginRC.mini-ai = entryAnywhere '' 16 | require("mini.cursorword").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/sessions/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.sessions; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-sessions"]; 14 | 15 | pluginRC.mini-sessions = entryAnywhere '' 16 | require("mini.sessions").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/snippets/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.snippets; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-snippets"]; 14 | 15 | pluginRC.mini-snippets = entryAnywhere '' 16 | require("mini.snippets").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/surround/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.surround; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-surround"]; 14 | 15 | pluginRC.mini-surround = entryAnywhere '' 16 | require("mini.surround").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/utility/undotree/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | config, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | 8 | cfg = config.vim.utility.undotree; 9 | in { 10 | config = mkIf cfg.enable { 11 | vim.lazy.plugins.undotree = { 12 | package = "undotree"; 13 | cmd = [ 14 | "UndotreeToggle" 15 | "UndotreeShow" 16 | "UndotreeHide" 17 | "UndotreePersistUndo" 18 | "UndotreeFocus" 19 | ]; 20 | }; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /modules/plugins/mini/bracketed/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.bracketed; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-bracketed"]; 14 | 15 | pluginRC.mini-bracketed = entryAnywhere '' 16 | require("mini.bracketed").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/bufremove/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.bufremove; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-bufremove"]; 14 | 15 | pluginRC.mini-bufremove = entryAnywhere '' 16 | require("mini.bufremove").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/operators/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.operators; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-operators"]; 14 | 15 | pluginRC.mini-operators = entryAnywhere '' 16 | require("mini.operators").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/splitjoin/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.splitjoin; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-splitjoin"]; 14 | 15 | pluginRC.mini-splitjoin = entryAnywhere '' 16 | require("mini.splitjoin").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/utility/motion/precognition/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | 8 | cfg = config.vim.utility.motion.precognition; 9 | in { 10 | config = mkIf cfg.enable { 11 | vim = { 12 | startPlugins = ["precognition-nvim"]; 13 | luaConfigRC.precognition = lib.nvim.dag.entryAnywhere '' 14 | require('precognition').setup(${lib.nvim.lua.toLuaObject cfg.setupOpts}) 15 | ''; 16 | }; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /modules/plugins/utility/outline/aerial-nvim/aerial-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | inherit (lib.nvim.binds) mkMappingOption; 5 | in { 6 | options.vim.utility.outline.aerial-nvim = { 7 | enable = mkEnableOption "Aerial.nvim"; 8 | setupOpts = mkPluginSetupOption "aerial.nvim" {}; 9 | 10 | mappings = { 11 | toggle = mkMappingOption "Toggle aerial window" "gO"; 12 | }; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /modules/plugins/mini/completion/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.completion; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-completion"]; 14 | 15 | pluginRC.mini-completion = entryAnywhere '' 16 | require("mini.completion").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/hipatterns/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.hipatterns; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-hipatterns"]; 14 | 15 | pluginRC.mini-hipatterns = entryAnywhere '' 16 | require("mini.hipatterns").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/statusline/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.statusline; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-statusline"]; 14 | 15 | pluginRC.mini-statusline = entryAnywhere '' 16 | require("mini.statusline").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/mini/trailspace/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.trailspace; 11 | in { 12 | vim = mkIf cfg.enable { 13 | startPlugins = ["mini-trailspace"]; 14 | 15 | pluginRC.mini-trailspace = entryAnywhere '' 16 | require("mini.trailspace").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /modules/plugins/ui/modes/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.ui.modes-nvim; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim.startPlugins = [ 14 | "modes-nvim" 15 | ]; 16 | 17 | vim.pluginRC.modes-nvim = entryAnywhere '' 18 | require('modes').setup(${toLuaObject cfg.setupOpts}) 19 | ''; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/utility/gestures/gesture-nvim/gesture-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.binds) mkMappingOption; 4 | in { 5 | options.vim.gestures.gesture-nvim = { 6 | enable = mkEnableOption "gesture-nvim: mouse gestures"; 7 | 8 | mappings = { 9 | draw = mkMappingOption "Start drawing [gesture.nvim]" ""; 10 | finish = mkMappingOption "Finish drawing [gesture.nvim]" ""; 11 | }; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /modules/plugins/git/gitlinker-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | 8 | cfg = config.vim.git.gitlinker-nvim; 9 | in { 10 | config = mkIf cfg.enable { 11 | vim = { 12 | lazy.plugins = { 13 | "gitlinker-nvim" = { 14 | package = "gitlinker-nvim"; 15 | setupModule = "gitlinker"; 16 | inherit (cfg) setupOpts; 17 | cmd = ["GitLink"]; 18 | }; 19 | }; 20 | }; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /modules/plugins/ui/colorizer/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.ui.colorizer; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim.startPlugins = [ 14 | "nvim-colorizer-lua" 15 | ]; 16 | 17 | vim.pluginRC.colorizer = entryAnywhere '' 18 | require('colorizer').setup(${toLuaObject cfg.setupOpts}) 19 | ''; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/visuals/rainbow-delimiters/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | cfg = config.vim.visuals.rainbow-delimiters; 10 | in { 11 | vim = mkIf cfg.enable { 12 | startPlugins = ["rainbow-delimiters-nvim"]; 13 | 14 | pluginRC.rainbow-delimiters = entryAnywhere '' 15 | vim.g.rainbow_delimiters = ${toLuaObject cfg.setupOpts} 16 | ''; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /modules/plugins/minimap/minimap-vim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | pkgs, 4 | lib, 5 | ... 6 | }: let 7 | inherit (lib.modules) mkIf; 8 | inherit (lib.nvim.binds) pushDownDefault; 9 | 10 | cfg = config.vim.minimap.minimap-vim; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["minimap-vim"]; 15 | extraPackages = [pkgs.code-minimap]; 16 | 17 | binds.whichKey.register = pushDownDefault { 18 | "m" = "+Minimap"; 19 | }; 20 | }; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /modules/plugins/utility/snacks-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAnywhere; 9 | 10 | cfg = config.vim.utility.snacks-nvim; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["snacks-nvim"]; 15 | pluginRC.snacks-nvim = entryAnywhere '' 16 | require("snacks").setup(${toLuaObject cfg.setupOpts}); 17 | ''; 18 | }; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /modules/plugins/formatter/conform-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.formatter.conform-nvim; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["conform-nvim"]; 15 | pluginRC.conform-nvim = entryAnywhere '' 16 | require("conform").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /modules/plugins/ui/smartcolumn/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.ui.smartcolumn; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["smartcolumn-nvim"]; 15 | 16 | pluginRC.smartcolumn = entryAnywhere '' 17 | require("smartcolumn").setup(${toLuaObject cfg.setupOpts}) 18 | ''; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /docs/manual/tips.md: -------------------------------------------------------------------------------- 1 | # Helpful Tips {#ch-helpful-tips} 2 | 3 | This section provides helpful tips that may be considered "unorthodox" or "too 4 | advanced" for some users. We will cover basic debugging steps, offline 5 | documentation, configuring **nvf** with pure Lua and using custom plugin sources 6 | in **nvf** in this section. For general configuration tips, please see previous 7 | chapters. 8 | 9 | ```{=include=} 10 | tips/debugging-nvf.md 11 | tips/offline-docs.md 12 | tips/pure-lua-config.md 13 | tips/plugin-sources.md 14 | ``` 15 | -------------------------------------------------------------------------------- /modules/plugins/projects/project-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.projects.project-nvim; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim.startPlugins = [ 14 | "project-nvim" 15 | ]; 16 | 17 | vim.pluginRC.project-nvim = entryAnywhere '' 18 | require('project_nvim').setup(${toLuaObject cfg.setupOpts}) 19 | ''; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/utility/binds/hardtime/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAnywhere; 9 | 10 | cfg = config.vim.binds.hardtime-nvim; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["hardtime-nvim"]; 15 | 16 | pluginRC.hardtime = entryAnywhere '' 17 | require("hardtime").setup(${toLuaObject cfg.setupOpts}) 18 | ''; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/visuals/cinnamon-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAnywhere; 9 | 10 | cfg = config.vim.visuals.cinnamon-nvim; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["cinnamon-nvim"]; 15 | 16 | pluginRC.cursorline = entryAnywhere '' 17 | require("cinnamon").setup(${toLuaObject cfg.setupOpts}) 18 | ''; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/autopairs/nvim-autopairs/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.autopairs.nvim-autopairs; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["nvim-autopairs"]; 15 | pluginRC.autopairs = entryAnywhere '' 16 | require('nvim-autopairs').setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /modules/plugins/autopairs/nvim-autopairs/nvim-autopairs.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib) mkRemovedOptionModule; 3 | inherit (lib.options) mkEnableOption; 4 | inherit (lib.nvim.types) mkPluginSetupOption; 5 | in { 6 | imports = [ 7 | (mkRemovedOptionModule ["vim" "autopairs" "nvim-compe"] "nvim-compe is deprecated and no longer supported.") 8 | ]; 9 | 10 | options.vim.autopairs.nvim-autopairs = { 11 | enable = mkEnableOption "autopairs"; 12 | setupOpts = mkPluginSetupOption "nvim-autopairs" {}; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /modules/plugins/utility/nvim-biscuits/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | cfg = config.vim.utility.nvim-biscuits; 10 | in { 11 | config = mkIf cfg.enable { 12 | vim = { 13 | startPlugins = ["nvim-biscuits"]; 14 | 15 | pluginRC.nvim-biscuits = entryAnywhere '' 16 | require('nvim-biscuits').setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /modules/plugins/visuals/nvim-scrollbar/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAnywhere; 9 | 10 | cfg = config.vim.visuals.nvim-scrollbar; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["nvim-scrollbar"]; 15 | pluginRC.nvim-scrollbar = entryAnywhere '' 16 | require("scrollbar").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /docs/manual/tips/offline-docs.md: -------------------------------------------------------------------------------- 1 | # Offline Documentation {#sec-offline-documentation} 2 | 3 | [https://notashelf.github.io/nvf/options.html]: https://notashelf.github.io/nvf/options.html 4 | 5 | The manpages provided by nvf contains an offline version of the option search 6 | normally available at [https://notashelf.github.io/nvf/options.html]. You may 7 | use the `man 5 nvf` command to view option documentation from the comfort of 8 | your terminal. 9 | 10 | Note that this is only available for NixOS and Home-Manager module 11 | installations. 12 | -------------------------------------------------------------------------------- /flake/pkgs/by-name/prettier-plugin-svelte/package.nix: -------------------------------------------------------------------------------- 1 | { 2 | buildNpmPackage, 3 | fetchFromGitHub, 4 | pins, 5 | }: let 6 | pin = pins.prettier-plugin-svelte; 7 | in 8 | buildNpmPackage (finalAttrs: { 9 | pname = "prettier-plugin-svelte"; 10 | version = pin.version or pin.revision; 11 | 12 | src = fetchFromGitHub { 13 | inherit (pin.repository) owner repo; 14 | rev = finalAttrs.version; 15 | sha256 = pin.hash; 16 | }; 17 | 18 | npmDepsHash = "sha256-D+gDdKiIG38jV+M/BqTKf0yYj1KXpbIodtQFdzocpn8="; 19 | }) 20 | -------------------------------------------------------------------------------- /modules/plugins/dashboard/dashboard-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.dashboard.dashboard-nvim; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["dashboard-nvim"]; 15 | 16 | pluginRC.dashboard-nvim = entryAnywhere '' 17 | require("dashboard").setup(${toLuaObject cfg.setupOpts}) 18 | ''; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/ui/colorful-menu-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.ui.colorful-menu-nvim; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["colorful-menu-nvim"]; 15 | pluginRC.colorful-menu-nvim = entryAnywhere '' 16 | require("colorful-menu").setup(${toLuaObject cfg.setupOpts}) 17 | ''; 18 | }; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /modules/plugins/visuals/indent-blankline/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAnywhere; 9 | 10 | cfg = config.vim.visuals.indent-blankline; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["indent-blankline-nvim"]; 15 | 16 | pluginRC.indent-blankline = entryAnywhere '' 17 | require("ibl").setup(${toLuaObject cfg.setupOpts}) 18 | ''; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /lib/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | self, 3 | inputs, 4 | lib, 5 | ... 6 | }: { 7 | types = import ./types {inherit lib self;}; 8 | config = import ./config.nix {inherit lib;}; 9 | binds = import ./binds.nix {inherit lib;}; 10 | dag = import ./dag.nix {inherit lib;}; 11 | languages = import ./languages.nix {inherit lib;}; 12 | lists = import ./lists.nix {inherit lib;}; 13 | attrsets = import ./attrsets.nix {inherit lib;}; 14 | lua = import ./lua.nix {inherit lib;}; 15 | neovimConfiguration = import ../modules {inherit self inputs lib;}; 16 | } 17 | -------------------------------------------------------------------------------- /modules/plugins/visuals/highlight-undo/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAnywhere; 9 | 10 | cfg = config.vim.visuals.highlight-undo; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["highlight-undo-nvim"]; 15 | 16 | pluginRC.highlight-undo = entryAnywhere '' 17 | require("highlight-undo").setup(${toLuaObject cfg.setupOpts}) 18 | ''; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/visuals/nvim-cursorline/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAnywhere; 9 | 10 | cfg = config.vim.visuals.nvim-cursorline; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["nvim-cursorline"]; 15 | 16 | pluginRC.nvim-cursorline = entryAnywhere '' 17 | require("nvim-cursorline").setup(${toLuaObject cfg.setupOpts}) 18 | ''; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/hydra/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | cfg = config.vim.hydra; 8 | in { 9 | config = mkIf cfg.enable { 10 | vim = { 11 | startPlugins = []; 12 | lazy.plugins.hydra = { 13 | package = "hydra.nvim"; 14 | setupModule = "hydra"; 15 | inherit (cfg) setupOpts; 16 | 17 | event = ["DeferredUIEnter"]; 18 | cmd = ["MCstart" "MCvisual" "MCclear" "MCpattern" "MCvisualPattern" "MCunderCursor"]; 19 | }; 20 | }; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /modules/plugins/utility/images/img-clip/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.utility.images.img-clip; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = [ 15 | "img-clip" 16 | ]; 17 | 18 | pluginRC.image-nvim = entryAnywhere '' 19 | require("img-clip").setup(${toLuaObject cfg.setupOpts}) 20 | ''; 21 | }; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /modules/plugins/utility/wakatime/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | pkgs, 4 | lib, 5 | ... 6 | }: let 7 | inherit (lib.modules) mkIf; 8 | inherit (lib.meta) getExe; 9 | 10 | cfg = config.vim.utility.vim-wakatime; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = [pkgs.vimPlugins.vim-wakatime]; 15 | 16 | # Wakatime configuration is stored as vim globals. 17 | globals = { 18 | "wakatime_CLIPath" = mkIf (cfg.cli-package != null) "${getExe cfg.cli-package}"; 19 | }; 20 | }; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /modules/plugins/visuals/nvim-web-devicons/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAnywhere; 9 | 10 | cfg = config.vim.visuals.nvim-web-devicons; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["nvim-web-devicons"]; 15 | 16 | pluginRC.nvim-web-devicons = entryAnywhere '' 17 | require("nvim-web-devicons").setup(${toLuaObject cfg.setupOpts}) 18 | ''; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /.github/workflows/labeler.yml: -------------------------------------------------------------------------------- 1 | name: "Label PR" 2 | 3 | on: 4 | pull_request_target: 5 | types: [edited, opened, synchronize, reopened] 6 | 7 | permissions: 8 | contents: read 9 | pull-requests: write 10 | 11 | jobs: 12 | labels: 13 | name: "Label PR" 14 | runs-on: ubuntu-latest 15 | if: "!contains(github.event.pull_request.title, '[skip ci]')" 16 | steps: 17 | - uses: actions/labeler@v6 18 | with: 19 | repo-token: ${{ secrets.GITHUB_TOKEN }} 20 | configuration-path: .github/labels.yml 21 | sync-labels: true 22 | -------------------------------------------------------------------------------- /lib/types/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | self, 4 | }: let 5 | typesDag = import ./dag.nix {inherit lib;}; 6 | typesPlugin = import ./plugins.nix {inherit lib self;}; 7 | typesLanguage = import ./languages.nix {inherit lib;}; 8 | customTypes = import ./custom.nix {inherit lib;}; 9 | in { 10 | inherit (typesDag) dagOf; 11 | inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType; 12 | inherit (typesLanguage) diagnostics mkGrammarOption; 13 | inherit (customTypes) char hexColor mergelessListOf deprecatedSingleOrListOf; 14 | } 15 | -------------------------------------------------------------------------------- /modules/plugins/utility/ccc/ccc.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.binds) mkMappingOption; 4 | in { 5 | options.vim.utility.ccc = { 6 | enable = mkEnableOption "ccc color picker for neovim"; 7 | 8 | mappings = { 9 | quit = mkMappingOption "Cancel and close the UI without replace or insert" ""; 10 | increase10 = mkMappingOption "Increase the value times delta of the slider" ""; 11 | decrease10 = mkMappingOption "Decrease the value times delta of the slider" ""; 12 | }; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /modules/plugins/git/default.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | in { 4 | imports = [ 5 | ./gitsigns 6 | ./hunk-nvim 7 | ./vim-fugitive 8 | ./git-conflict 9 | ./gitlinker-nvim 10 | ./neogit 11 | ]; 12 | 13 | options.vim.git = { 14 | enable = mkEnableOption '' 15 | git integration suite. 16 | 17 | Enabling this option will enable the following plugins: 18 | 19 | * gitsigns 20 | * hunk-nvim 21 | * vim-fugitive 22 | * git-conflict 23 | * gitlinker-nvim 24 | ''; 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /modules/plugins/rich-presence/neocord/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.presence.neocord; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim.startPlugins = ["neocord"]; 14 | 15 | vim.pluginRC.neocord = entryAnywhere '' 16 | -- Description of each option can be found in https://github.com/IogaMaster/neocord#lua 17 | require("neocord").setup(${toLuaObject cfg.setupOpts}) 18 | ''; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /modules/plugins/utility/icon-picker/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | 8 | cfg = config.vim.utility.icon-picker; 9 | in { 10 | config = mkIf cfg.enable { 11 | vim.startPlugins = ["dressing-nvim"]; 12 | 13 | vim.lazy.plugins.icon-picker-nvim = { 14 | package = "icon-picker-nvim"; 15 | setupModule = "icon-picker"; 16 | setupOpts = { 17 | disable_legacy_commands = true; 18 | }; 19 | 20 | cmd = ["IconPickerInsert" "IconPickerNormal" "IconPickerYank"]; 21 | }; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /modules/plugins/utility/leetcode-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | 8 | cfg = config.vim.utility.leetcode-nvim; 9 | in { 10 | config = mkIf cfg.enable { 11 | vim = { 12 | startPlugins = [ 13 | "leetcode-nvim" 14 | "plenary-nvim" 15 | "fzf-lua" 16 | "nui-nvim" 17 | ]; 18 | 19 | lazy.plugins.leetcode-nvim = { 20 | package = "leetcode-nvim"; 21 | setupModule = "leetcode"; 22 | inherit (cfg) setupOpts; 23 | }; 24 | }; 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /modules/plugins/utility/new-file-template/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.utility.new-file-template; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = [ 15 | "new-file-template-nvim" 16 | ]; 17 | 18 | pluginRC.new-file-template = entryAnywhere '' 19 | require('new-file-template').setup(${toLuaObject cfg.setupOpts}) 20 | ''; 21 | }; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /modules/plugins/utility/binds/cheatsheet/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.strings) optionalString; 8 | 9 | cfg = config.vim.binds.cheatsheet; 10 | in { 11 | config = mkIf cfg.enable { 12 | vim.lazy.plugins.cheatsheet-nvim = { 13 | package = "cheatsheet-nvim"; 14 | setupModule = "cheatsheet"; 15 | setupOpts = {}; 16 | cmd = ["Cheatsheet" "CheatsheetEdit"]; 17 | 18 | before = optionalString config.vim.lazy.enable "require('lz.n').trigger_load('telescope')"; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/utility/preview/glow/glow.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.modules) mkRenamedOptionModule; 3 | inherit (lib.options) mkEnableOption; 4 | inherit (lib.nvim.binds) mkMappingOption; 5 | in { 6 | imports = [ 7 | (mkRenamedOptionModule ["vim" "languages" "markdown" "glow" "enable"] ["vim" "utility" "preview" "glow" "enable"]) 8 | ]; 9 | 10 | options.vim.utility.preview = { 11 | glow = { 12 | enable = mkEnableOption "markdown preview in neovim with glow"; 13 | mappings.openPreview = mkMappingOption "Open preview" "p"; 14 | }; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /modules/plugins/git/hunk-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | 8 | cfg = config.vim.git.hunk-nvim; 9 | in { 10 | config = mkIf cfg.enable { 11 | vim = { 12 | startPlugins = [ 13 | # dependencies 14 | "nui-nvim" # ui library 15 | "nvim-web-devicons" # glyphs 16 | ]; 17 | 18 | lazy.plugins = { 19 | "hunk-nvim" = { 20 | package = "hunk-nvim"; 21 | setupModule = "hunk"; 22 | inherit (cfg) setupOpts; 23 | }; 24 | }; 25 | }; 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /modules/plugins/ui/notifications/nvim-notify/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.notify.nvim-notify; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["nvim-notify"]; 15 | 16 | pluginRC.nvim-notify = entryAnywhere '' 17 | local notify = require("notify") 18 | notify.setup(${toLuaObject cfg.setupOpts}) 19 | vim.notify = notify.notify 20 | ''; 21 | }; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /flake/templates/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | flake.templates = { 3 | standalone = { 4 | path = ./standalone; 5 | description = "Standalone flake template for nvf"; 6 | welcomeText = '' 7 | Template flake.nix has been created in flake.nix! 8 | 9 | Note that this is a very basic example to bootstrap nvf for you. Please edit your 10 | configuration as described in the nvf manual before using this template. The 11 | configured packages will be ran with 'nix run .' or 'nix run .#neovimConfigured' 12 | 13 | Happy editing! 14 | ''; 15 | }; 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /modules/plugins/mini/indentscope/indentscope.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkOption mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | inherit (lib.types) str listOf; 5 | in { 6 | options.vim.mini.indentscope = { 7 | enable = mkEnableOption "mini.indentscope"; 8 | setupOpts = mkPluginSetupOption "mini.indentscope" { 9 | ignore_filetypes = mkOption { 10 | type = listOf str; 11 | default = ["help" "neo-tree" "notify" "NvimTree" "TelescopePrompt"]; 12 | description = "File types to ignore for illuminate"; 13 | }; 14 | }; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /modules/plugins/utility/diffview/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | 8 | cfg = config.vim.utility.diffview-nvim; 9 | in { 10 | config = mkIf cfg.enable { 11 | vim = { 12 | startPlugins = ["plenary-nvim"]; 13 | lazy.plugins.diffview-nvim = { 14 | package = "diffview-nvim"; 15 | cmd = ["DiffviewClose" "DiffviewFileHistory" "DiffviewFocusFiles" "DiffviewLog" "DiffviewOpen" "DiffviewRefresh" "DiffviewToggleFiles"]; 16 | setupModule = "diffview"; 17 | inherit (cfg) setupOpts; 18 | }; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/utility/oil-nvim/oil-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.utility.oil-nvim = { 6 | enable = mkEnableOption '' 7 | Neovim file explorer: edit your filesystem like a buffer [oil-nvim] 8 | ''; 9 | 10 | setupOpts = mkPluginSetupOption "oil-nvim" {}; 11 | 12 | gitStatus = { 13 | enable = mkEnableOption '' 14 | Git status on [oil-nvim] directory listings 15 | ''; 16 | 17 | setupOpts = mkPluginSetupOption "oil-git-status-nvim" {}; 18 | }; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /modules/plugins/visuals/default.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.modules) mkRemovedOptionModule; 3 | in { 4 | imports = [ 5 | (mkRemovedOptionModule ["vim" "visuals" "enable"] '' 6 | As top-level toggles are being deprecated, you are encouraged to handle plugin 7 | toggles under individual options. 8 | '') 9 | 10 | ./cellular-automaton 11 | ./cinnamon-nvim 12 | ./fidget-nvim 13 | ./highlight-undo 14 | ./indent-blankline 15 | ./nvim-cursorline 16 | ./nvim-scrollbar 17 | ./nvim-web-devicons 18 | ./rainbow-delimiters 19 | ./tiny-devicons-auto-colors 20 | ]; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/visuals/tiny-devicons-auto-colors/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAnywhere; 9 | 10 | cfg = config.vim.visuals.tiny-devicons-auto-colors; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["tiny-devicons-auto-colors-nvim" "nvim-web-devicons"]; 15 | 16 | pluginRC.tiny-devicons-auto-colors = entryAnywhere '' 17 | require("tiny-devicons-auto-colors").setup(${toLuaObject cfg.setupOpts}) 18 | ''; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /docs/static/script/anchor-use.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('DOMContentLoaded', function(event) { 2 | anchors.add('h1[id]:not(div.note h1, div.warning h1, div.tip h1, div.caution h1, div.important h1), h2[id]:not(div.note h2, div.warning h2, div.tip h2, div.caution h2, div.important h2), h3[id]:not(div.note h3, div.warning h3, div.tip h3, div.caution h3, div.important h3), h4[id]:not(div.note h4, div.warning h4, div.tip h4, div.caution h4, div.important h4), h5[id]:not(div.note h5, div.warning h5, div.tip h5, div.caution h5, div.important h5), h6[id]:not(div.note h6, div.warning h6, div.tip h6, div.caution h6, div.important h6)'); 3 | }); 4 | 5 | -------------------------------------------------------------------------------- /modules/plugins/runner/run-nvim/run-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | inherit (lib.nvim.binds) mkMappingOption; 5 | in { 6 | options = { 7 | vim.runner.run-nvim = { 8 | enable = mkEnableOption "run.nvim"; 9 | setupOpts = mkPluginSetupOption "run.nvim" {}; 10 | 11 | mappings = { 12 | run = mkMappingOption "Run cached" "ri"; 13 | runOverride = mkMappingOption "Run and override" "ro"; 14 | runCommand = mkMappingOption "Run prompt" "rc"; 15 | }; 16 | }; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /modules/plugins/treesitter/ts-textobjects/textobjects.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | in { 5 | options.vim.treesitter.textobjects = { 6 | enable = mkEnableOption "Treesitter textobjects"; 7 | setupOpts = 8 | mkPluginSetupOption "treesitter-textobjects" {} 9 | // { 10 | example = { 11 | select = { 12 | enable = true; 13 | lookahead = true; 14 | keymaps = { 15 | af = "@function.outer"; 16 | }; 17 | }; 18 | }; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/minimap/codewindow/codewindow.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.binds) mkMappingOption; 4 | in { 5 | options.vim.minimap.codewindow = { 6 | enable = mkEnableOption "codewindow plugin for minimap view"; 7 | 8 | mappings = { 9 | open = mkMappingOption "Open minimap [codewindow]" "mo"; 10 | close = mkMappingOption "Close minimap [codewindow]" "mc"; 11 | toggle = mkMappingOption "Toggle minimap [codewindow]" "mm"; 12 | toggleFocus = mkMappingOption "Toggle minimap focus [codewindow]" "mf"; 13 | }; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /modules/plugins/utility/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./binds 4 | ./ccc 5 | ./diffview 6 | ./direnv 7 | ./fzf-lua 8 | ./gestures 9 | ./harpoon 10 | ./icon-picker 11 | ./images 12 | ./leetcode-nvim 13 | ./mkdir 14 | ./motion 15 | ./multicursors 16 | ./new-file-template 17 | ./nix-develop 18 | ./nvim-biscuits 19 | ./oil-nvim 20 | ./outline 21 | ./preview 22 | ./qmk-nvim 23 | ./sleuth 24 | ./smart-splits 25 | ./snacks-nvim 26 | ./surround 27 | ./telescope 28 | ./wakatime 29 | ./yanky-nvim 30 | ./yazi-nvim 31 | ./undotree 32 | ]; 33 | } 34 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_style = tab 7 | indent_size = 4 8 | insert_final_newline = true 9 | tab_width = 4 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | indent_style = space 14 | indent_size = 2 15 | trim_trailing_whitespace = false 16 | 17 | [*.{js,json,nix,yml,yaml,toml}] 18 | indent_style = space 19 | indent_size = 2 20 | tab_width = 2 21 | 22 | [*.{diff,patch,lock}] 23 | end_of_line = unset 24 | insert_final_newline = unset 25 | trim_trailing_whitespace = unset 26 | 27 | [npins/sources.json] 28 | indent_style = unset 29 | indent_size = unset 30 | trim_trailing_whitespace = unset 31 | -------------------------------------------------------------------------------- /modules/plugins/mini/notify/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf mkAssert; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.mini.notify; 11 | in { 12 | vim = mkIf cfg.enable (mkAssert (!config.vim.notify.nvim-notify.enable) "Mini.notify is incompatible with nvim-notify!" { 13 | startPlugins = ["mini-notify"]; 14 | 15 | pluginRC.mini-notify = entryAnywhere '' 16 | require("mini.notify").setup(${toLuaObject cfg.setupOpts}) 17 | vim.notify = MiniNotify.make_notify(${toLuaObject cfg.notifyOpts}) 18 | ''; 19 | }); 20 | } 21 | -------------------------------------------------------------------------------- /modules/plugins/utility/images/image-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.utility.images.image-nvim; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = [ 15 | "image-nvim" 16 | ]; 17 | 18 | luaPackages = [ 19 | "magick" 20 | ]; 21 | 22 | pluginRC.image-nvim = entryAnywhere '' 23 | require("image").setup( 24 | ${toLuaObject cfg.setupOpts} 25 | ) 26 | ''; 27 | }; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /modules/plugins/ui/illuminate/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAnywhere; 9 | 10 | cfg = config.vim.ui.illuminate; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["vim-illuminate"]; 15 | 16 | # vim-illuminate does not have a setup function. It is instead called 'configure' 17 | # and does what you expect from a setup function. Wild. 18 | pluginRC.vim-illuminate = entryAnywhere '' 19 | require('illuminate').configure(${toLuaObject cfg.setupOpts}) 20 | ''; 21 | }; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /modules/plugins/git/neogit/neogit.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.binds) mkMappingOption; 4 | inherit (lib.nvim.types) mkPluginSetupOption; 5 | in { 6 | options.vim.git.neogit = { 7 | enable = mkEnableOption "An Interactive and powerful Git interface [Neogit]"; 8 | setupOpts = mkPluginSetupOption "neogit" {}; 9 | 10 | mappings = { 11 | open = mkMappingOption "Git Status [Neogit]" "gs"; 12 | commit = mkMappingOption "Git Commit [Neogit]" "gc"; 13 | pull = mkMappingOption "Git pull [Neogit]" "gp"; 14 | push = mkMappingOption "Git push [Neogit]" "gP"; 15 | }; 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /modules/plugins/lsp/lspsaga/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf mkDefault; 7 | 8 | cfg = config.vim.lsp; 9 | in { 10 | config = mkIf (cfg.enable && cfg.lspsaga.enable) { 11 | vim = { 12 | lazy.plugins.lspsaga-nvim = { 13 | package = "lspsaga-nvim"; 14 | setupModule = "lspsaga"; 15 | inherit (cfg.lspsaga) setupOpts; 16 | 17 | event = ["LspAttach"]; 18 | }; 19 | 20 | # Optional dependencies, pretty useful to enhance default functionality of 21 | # Lspsaga. 22 | treesitter.enable = mkDefault true; 23 | visuals.nvim-web-devicons.enable = mkDefault true; 24 | }; 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /docs/man/header.5: -------------------------------------------------------------------------------- 1 | .TH "nvf" "5" "January 1, 1980" "nvf" 2 | .\" disable hyphenation 3 | .nh 4 | .\" disable justification (adjust text to left margin only) 5 | .ad l 6 | .\" enable line breaks after slashes 7 | .cflags 4 / 8 | 9 | .SH "NAME" 10 | nvf \- Configuration specification for the nvf. 11 | 12 | .SH "DESCRIPTION" 13 | The nvf configuration specification provides a declarative structure for configuring Neovim using Nix with few 14 | lines of Nix. This document outlines the available options and their usage to create modular, reusable, and 15 | reproducible configurations using nvf's module system options. For tips, tricks and possible quirks with available 16 | plugins please visit https://notashelf.github.io/nvf/ 17 | -------------------------------------------------------------------------------- /modules/plugins/mini/hues/hues.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption mkOption; 3 | inherit (lib.nvim.types) mkPluginSetupOption; 4 | inherit (lib.nvim.types) hexColor; 5 | in { 6 | options.vim.mini.hues = { 7 | enable = mkEnableOption "mini.hues"; 8 | setupOpts = mkPluginSetupOption "mini.hues" { 9 | background = mkOption { 10 | description = "The hex color for the background color of the color scheme, prefixed with #"; 11 | type = hexColor; 12 | }; 13 | 14 | foreground = mkOption { 15 | description = "The hex color for the foreground color of the color scheme, prefixed with #"; 16 | type = hexColor; 17 | }; 18 | }; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /modules/plugins/ui/fastaction/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf mkDefault; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.ui.fastaction; 11 | borderCfg = config.vim.ui.borders.plugins.fastaction; 12 | in { 13 | config = mkIf cfg.enable { 14 | vim = { 15 | ui.fastaction.setupOpts = { 16 | register_ui_select = mkDefault true; 17 | popup.border = mkIf borderCfg.enable borderCfg.style; 18 | }; 19 | 20 | startPlugins = ["fastaction-nvim"]; 21 | pluginRC.fastaction = entryAnywhere "require('fastaction').setup(${toLuaObject cfg.setupOpts})"; 22 | }; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /modules/plugins/utility/wakatime/vim-wakatime.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.options) mkEnableOption mkOption; 7 | inherit (lib.types) nullOr package; 8 | in { 9 | options.vim.utility.vim-wakatime = { 10 | enable = mkEnableOption '' 11 | automatic time tracking and metrics generated from your programming activity [vim-wakatime] 12 | ''; 13 | 14 | cli-package = mkOption { 15 | type = nullOr package; 16 | default = pkgs.wakatime-cli; 17 | example = null; 18 | description = '' 19 | The package that should be used for wakatime-cli. 20 | Set as null to use the default path in {env}`$XDG_DATA_HOME` 21 | ''; 22 | }; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /modules/plugins/utility/motion/hop/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | options, 5 | ... 6 | }: let 7 | inherit (lib.modules) mkIf; 8 | inherit (lib.nvim.binds) addDescriptionsToMappings mkSetBinding; 9 | inherit (lib.nvim.dag) entryAnywhere; 10 | 11 | cfg = config.vim.utility.motion.hop; 12 | 13 | mappingDefinitions = options.vim.utility.motion.hop.mappings; 14 | mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; 15 | in { 16 | config = mkIf cfg.enable { 17 | vim.startPlugins = ["hop.nvim"]; 18 | 19 | vim.maps.normal = mkSetBinding mappings.hop " HopPattern"; 20 | 21 | vim.pluginRC.hop-nvim = entryAnywhere '' 22 | require('hop').setup() 23 | ''; 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /modules/plugins/treesitter/ts-textobjects/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAfter; 9 | 10 | inherit (config.vim) treesitter; 11 | cfg = treesitter.textobjects; 12 | in { 13 | config = mkIf (treesitter.enable && cfg.enable) { 14 | vim = { 15 | startPlugins = ["nvim-treesitter-textobjects"]; 16 | 17 | # set up treesitter-textobjects after Treesitter, whose config we're adding to. 18 | pluginRC.treesitter-textobjects = entryAfter ["treesitter"] '' 19 | require("nvim-treesitter.configs").setup({textobjects = ${toLuaObject cfg.setupOpts}}) 20 | ''; 21 | }; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /modules/plugins/utility/preview/markdown-preview/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | lib, 5 | ... 6 | }: let 7 | inherit (lib.modules) mkIf; 8 | 9 | cfg = config.vim.utility.preview.markdownPreview; 10 | in { 11 | config = mkIf cfg.enable { 12 | vim.startPlugins = [pkgs.vimPlugins.markdown-preview-nvim]; 13 | 14 | vim.globals = { 15 | mkdp_auto_start = cfg.autoStart; 16 | mkdp_auto_close = cfg.autoClose; 17 | mkdp_refresh_slow = cfg.lazyRefresh; 18 | mkdp_filetypes = cfg.filetypes; 19 | mkdp_command_for_global = cfg.alwaysAllowPreview; 20 | mkdp_open_to_the_world = cfg.broadcastServer; 21 | mkdp_open_ip = cfg.customIP; 22 | mkdp_port = cfg.customPort; 23 | }; 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /modules/plugins/notes/obsidian/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.binds) pushDownDefault; 9 | inherit (lib.nvim.lua) toLuaObject; 10 | 11 | cfg = config.vim.notes.obsidian; 12 | in { 13 | config = mkIf cfg.enable { 14 | vim = { 15 | startPlugins = [ 16 | "obsidian-nvim" 17 | "vim-markdown" 18 | "tabular" 19 | ]; 20 | 21 | binds.whichKey.register = pushDownDefault { 22 | "o" = "+Notes"; 23 | }; 24 | 25 | pluginRC.obsidian = entryAnywhere '' 26 | require("obsidian").setup(${toLuaObject cfg.setupOpts}) 27 | ''; 28 | }; 29 | }; 30 | } 31 | -------------------------------------------------------------------------------- /modules/plugins/treesitter/ts-context/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAfter; 9 | 10 | inherit (config.vim) treesitter; 11 | cfg = treesitter.context; 12 | in { 13 | config = mkIf (treesitter.enable && cfg.enable) { 14 | vim = { 15 | startPlugins = ["nvim-treesitter-context"]; 16 | 17 | # set up treesitter-context after Treesitter. The ordering 18 | # should not matter, but there is no harm in doing this 19 | pluginRC.treesitter-context = entryAfter ["treesitter"] '' 20 | require("treesitter-context").setup(${toLuaObject cfg.setupOpts}) 21 | ''; 22 | }; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /modules/plugins/ui/illuminate/illuminate.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkOption mkEnableOption; 3 | inherit (lib.types) listOf str; 4 | inherit (lib.nvim.types) mkPluginSetupOption; 5 | in { 6 | options.vim.ui.illuminate = { 7 | enable = mkEnableOption '' 8 | automatically highlight other uses of the word under the cursor [vim-illuminate] 9 | ''; 10 | 11 | setupOpts = mkPluginSetupOption "vim-illuminate" { 12 | filetypes_denylist = mkOption { 13 | type = listOf str; 14 | default = ["dirvish" "fugitive" "help" "neo-tree" "notify" "NvimTree" "TelescopePrompt"]; 15 | description = "Filetypes to not illuminate, this overrides `filetypes_allowlist`"; 16 | }; 17 | }; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /.github/workflows/cleanup.yml: -------------------------------------------------------------------------------- 1 | name: Delete Stale Branches 2 | permissions: 3 | contents: write 4 | 5 | on: 6 | workflow_dispatch: 7 | schedule: 8 | - cron: "0 4 1 * *" # 4AM on 1st of every month 9 | - cron: "0 4 15 * *" # 4AM on the 15th of every month 10 | 11 | jobs: 12 | branches: 13 | name: Cleanup old branches 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: "Checkout" 17 | uses: actions/checkout@v6 18 | 19 | - name: "Delete old branches" 20 | uses: beatlabs/delete-old-branches-action@v0.0.11 21 | with: 22 | repo_token: "${{ secrets.GITHUB_TOKEN }}" 23 | date: "1 months ago" 24 | dry_run: false 25 | delete_tags: false 26 | exclude_open_pr_branches: true 27 | -------------------------------------------------------------------------------- /modules/plugins/lsp/null-ls/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf mkMerge; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAfter; 9 | 10 | cfg = config.vim.lsp.null-ls; 11 | in { 12 | config = mkIf cfg.enable (mkMerge [ 13 | { 14 | vim = { 15 | startPlugins = [ 16 | "none-ls-nvim" 17 | "plenary-nvim" 18 | ]; 19 | 20 | # null-ls implies that LSP is already being set up 21 | # as it will hook into LSPs to receive information. 22 | lsp.enable = true; 23 | 24 | pluginRC.null_ls = entryAfter ["lsp-setup"] '' 25 | require('null-ls').setup(${toLuaObject cfg.setupOpts}) 26 | ''; 27 | }; 28 | } 29 | ]); 30 | } 31 | -------------------------------------------------------------------------------- /modules/plugins/utility/binds/which-key/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.attrsets) mapAttrsToList; 9 | inherit (lib.generators) mkLuaInline; 10 | inherit (lib.nvim.dag) entryAnywhere; 11 | 12 | cfg = config.vim.binds.whichKey; 13 | register = mapAttrsToList (n: v: lib.lists.optional (v != null) (mkLuaInline "{ '${n}', desc = '${v}' }")) cfg.register; 14 | in { 15 | config = mkIf cfg.enable { 16 | vim = { 17 | startPlugins = ["which-key-nvim"]; 18 | 19 | pluginRC.whichkey = entryAnywhere '' 20 | local wk = require("which-key") 21 | wk.setup (${toLuaObject cfg.setupOpts}) 22 | wk.add(${toLuaObject register}) 23 | ''; 24 | }; 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /modules/plugins/dashboard/alpha/alpha.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption mkOption; 3 | inherit (lib.types) listOf attrsOf anything nullOr enum; 4 | in { 5 | options.vim.dashboard.alpha = { 6 | enable = mkEnableOption "fast and fully programmable greeter for neovim [alpha.nvim]"; 7 | theme = mkOption { 8 | type = nullOr (enum ["dashboard" "startify" "theta"]); 9 | default = "dashboard"; 10 | description = "Alpha default theme to use"; 11 | }; 12 | layout = mkOption { 13 | type = listOf (attrsOf anything); 14 | default = []; 15 | description = "Alpha dashboard layout"; 16 | }; 17 | opts = mkOption { 18 | type = attrsOf anything; 19 | default = {}; 20 | description = "Optional global options"; 21 | }; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /modules/plugins/ui/nvim-highlight-colors/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.ui.nvim-highlight-colors; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = [ 15 | "nvim-highlight-colors" 16 | ]; 17 | 18 | # enable display of 24-bit RGB colors in neovim 19 | # via the terminal. This is required for nvim-highlight-colors 20 | # to display arbitrary RGB highlights. 21 | options.termguicolors = true; 22 | 23 | pluginRC.nvim-highlight-colors = entryAnywhere '' 24 | require('nvim-highlight-colors').setup(${toLuaObject cfg.setupOpts}) 25 | ''; 26 | }; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /modules/plugins/mini/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | imports = [ 3 | ./ai 4 | ./align 5 | ./animate 6 | # ./base16 # NOTE: configured in theme/ 7 | ./basics 8 | ./bracketed 9 | ./bufremove 10 | ./clue 11 | ./colors 12 | ./comment 13 | ./completion 14 | ./cursorword 15 | ./diff 16 | ./doc 17 | ./extra 18 | ./files 19 | ./fuzzy 20 | ./git 21 | ./hipatterns 22 | ./hues 23 | ./icons 24 | ./indentscope 25 | ./jump 26 | ./jump2d 27 | ./map 28 | ./misc 29 | ./move 30 | ./notify 31 | ./operators 32 | ./pairs 33 | ./pick 34 | ./sessions 35 | ./snippets 36 | ./splitjoin 37 | ./starter 38 | ./statusline 39 | ./surround 40 | ./tabline 41 | ./test 42 | ./trailspace 43 | ./visits 44 | ]; 45 | } 46 | -------------------------------------------------------------------------------- /modules/plugins/lsp/lspkind/lspkind.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption mkOption; 3 | inherit (lib.types) enum nullOr; 4 | inherit (lib.nvim.types) mkPluginSetupOption luaInline; 5 | in { 6 | options.vim.lsp.lspkind = { 7 | enable = mkEnableOption "vscode-like pictograms for lsp [lspkind]"; 8 | setupOpts = mkPluginSetupOption "lspkind.nvim" { 9 | mode = mkOption { 10 | description = "Defines how annotations are shown"; 11 | type = enum ["text" "text_symbol" "symbol_text" "symbol"]; 12 | default = "symbol_text"; 13 | }; 14 | 15 | before = mkOption { 16 | description = "The function that will be called before lspkind's modifications are applied"; 17 | type = nullOr luaInline; 18 | default = null; 19 | }; 20 | }; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /modules/plugins/ui/noice/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | pkgs, 4 | lib, 5 | ... 6 | }: let 7 | inherit (lib.modules) mkIf; 8 | inherit (lib.lists) optionals; 9 | inherit (lib.nvim.lua) toLuaObject; 10 | inherit (lib.nvim.dag) entryAnywhere; 11 | 12 | cfg = config.vim.ui.noice; 13 | tscfg = config.vim.treesitter; 14 | 15 | defaultGrammars = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [vim regex lua bash markdown]; 16 | in { 17 | config = mkIf cfg.enable { 18 | vim = { 19 | startPlugins = [ 20 | "noice-nvim" 21 | "nui-nvim" 22 | ]; 23 | 24 | treesitter.grammars = optionals tscfg.addDefaultGrammars defaultGrammars; 25 | 26 | pluginRC.noice-nvim = entryAnywhere '' 27 | require("noice").setup(${toLuaObject cfg.setupOpts}) 28 | ''; 29 | }; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /modules/plugins/notes/mind-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.binds) pushDownDefault; 9 | 10 | cfg = config.vim.notes.mind-nvim; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = [ 15 | "mind-nvim" 16 | ]; 17 | 18 | maps.normal = { 19 | "om" = {action = ":MindOpenMain";}; 20 | "op" = {action = ":MindOpenProject";}; 21 | "oc" = {action = ":MindClose";}; 22 | }; 23 | 24 | binds.whichKey.register = pushDownDefault { 25 | "o" = "+Notes"; 26 | }; 27 | 28 | pluginRC.mind-nvim = entryAnywhere '' 29 | require'mind'.setup() 30 | ''; 31 | }; 32 | }; 33 | } 34 | -------------------------------------------------------------------------------- /lib/lists.nix: -------------------------------------------------------------------------------- 1 | {lib}: let 2 | inherit (lib.lists) elem all; 3 | in { 4 | /* 5 | Checks if all values are present in the list. 6 | 7 | Type: 8 | listContainsValues :: { list :: [a], values :: [a] } -> Bool 9 | 10 | Arguments: 11 | list - A list of elements. 12 | values - A list of values to check for presence in the list. 13 | 14 | Returns: 15 | True if all values are present in the list, otherwise False. 16 | 17 | Example: 18 | ```nix 19 | listContainsValues { list = [1 2 3]; values = [2 3]; } 20 | => True 21 | 22 | listContainsValues { list = [1 2 3]; values = [2 4]; } 23 | => False 24 | ``` 25 | */ 26 | listContainsValues = { 27 | list, 28 | values, 29 | }: let 30 | # Check if all values are present in the list 31 | containsValue = value: elem value list; 32 | in 33 | all containsValue values; 34 | } 35 | -------------------------------------------------------------------------------- /modules/plugins/visuals/nvim-scrollbar/scrollbar-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.modules) mkRenamedOptionModule; 3 | inherit (lib.options) mkOption mkEnableOption; 4 | inherit (lib.types) listOf str; 5 | inherit (lib.nvim.types) mkPluginSetupOption; 6 | in { 7 | imports = [ 8 | (mkRenamedOptionModule ["vim" "visuals" "scrollBar"] ["vim" "visuals" "nvim-scrollbar"]) 9 | ]; 10 | 11 | options.vim.visuals.nvim-scrollbar = { 12 | enable = mkEnableOption "extensible Neovim Scrollbar [nvim-scrollbar]"; 13 | setupOpts = mkPluginSetupOption "scrollbar-nvim" { 14 | excluded_filetypes = mkOption { 15 | type = listOf str; 16 | default = ["prompt" "TelescopePrompt" "noice" "NvimTree" "neo-tree" "alpha" "notify" "Navbuddy" "fastaction_popup"]; 17 | description = "Filetypes to hide the scrollbar on"; 18 | }; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /modules/plugins/utility/preview/glow/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | lib, 5 | options, 6 | ... 7 | }: let 8 | inherit (lib.modules) mkIf mkMerge; 9 | inherit (lib.nvim.binds) mkBinding pushDownDefault; 10 | inherit (lib.nvim.dag) entryAnywhere; 11 | 12 | cfg = config.vim.utility.preview.glow; 13 | inherit (options.vim.utility.preview.glow) mappings; 14 | in { 15 | config = mkIf cfg.enable { 16 | vim.startPlugins = ["glow-nvim"]; 17 | 18 | vim.maps.normal = mkMerge [ 19 | (mkBinding cfg.mappings.openPreview ":Glow" mappings.openPreview.description) 20 | ]; 21 | 22 | vim.binds.whichKey.register = pushDownDefault { 23 | "pm" = "+Preview Markdown"; 24 | }; 25 | 26 | vim.pluginRC.glow = entryAnywhere '' 27 | require('glow').setup({ 28 | glow_path = "${pkgs.glow}/bin/glow" 29 | }); 30 | ''; 31 | }; 32 | } 33 | -------------------------------------------------------------------------------- /docs/manual/configuring.md: -------------------------------------------------------------------------------- 1 | # Configuring nvf {#ch-configuring} 2 | 3 | [helpful tips section]: ./tips.html#ch-helpful-tips 4 | [options reference]: ./options.html 5 | 6 | nvf allows for _very_ extensive configuration in Neovim through the Nix module 7 | interface. The below chapters describe several of the options exposed in nvf for 8 | your convenience. You might also be interested in the [helpful tips section] for 9 | more advanced or unusual configuration options supported by nvf. 10 | 11 | Note that this section does not cover module _options_. For an overview of all 12 | module options provided by nvf, please visit the [options reference] 13 | 14 | ```{=include=} chapters 15 | configuring/custom-package.md 16 | configuring/custom-plugins.md 17 | configuring/overriding-plugins.md 18 | configuring/languages.md 19 | configuring/dags.md 20 | configuring/dag-entries.md 21 | configuring/autocmds.md 22 | ``` 23 | -------------------------------------------------------------------------------- /flake/develop.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: { 2 | perSystem = { 3 | pkgs, 4 | config, 5 | self', 6 | ... 7 | }: { 8 | devShells = { 9 | default = self'.devShells.lsp; 10 | nvim-nix = pkgs.mkShellNoCC {packages = [config.packages.nix];}; 11 | lsp = pkgs.mkShellNoCC { 12 | packages = with pkgs; [nil statix deadnix alejandra npins]; 13 | }; 14 | }; 15 | 16 | # This package exists to make development easier by providing the place and 17 | # boilerplate to build a test nvf configuration. Feel free to use this for 18 | # testing, but make sure to discard the changes before creating a pull 19 | # request. 20 | packages.dev = let 21 | configuration = {}; 22 | 23 | customNeovim = lib.nvim.neovimConfiguration { 24 | inherit pkgs; 25 | modules = [configuration]; 26 | }; 27 | in 28 | customNeovim.neovim; 29 | }; 30 | } 31 | -------------------------------------------------------------------------------- /modules/wrapper/warnings/default.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkOption literalExpression; 3 | inherit (lib.types) listOf str unspecified; 4 | in { 5 | options = { 6 | assertions = mkOption { 7 | type = listOf unspecified; 8 | internal = true; 9 | default = []; 10 | example = literalExpression '' 11 | [ 12 | { 13 | assertion = false; 14 | message = "you can't enable this for that reason"; 15 | } 16 | ] 17 | ''; 18 | }; 19 | 20 | warnings = mkOption { 21 | internal = true; 22 | default = []; 23 | type = listOf str; 24 | example = ["The `foo' service is deprecated and will go away soon!"]; 25 | description = '' 26 | This option allows modules to show warnings to users during 27 | the evaluation of the system configuration. 28 | ''; 29 | }; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /modules/plugins/lsp/trouble/trouble.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.binds) mkMappingOption; 4 | inherit (lib.nvim.types) mkPluginSetupOption; 5 | in { 6 | options.vim.lsp = { 7 | trouble = { 8 | enable = mkEnableOption "trouble diagnostics viewer"; 9 | 10 | setupOpts = mkPluginSetupOption "Trouble" {}; 11 | 12 | mappings = { 13 | workspaceDiagnostics = mkMappingOption "Workspace diagnostics [trouble]" "lwd"; 14 | documentDiagnostics = mkMappingOption "Document diagnostics [trouble]" "ld"; 15 | lspReferences = mkMappingOption "LSP References [trouble]" "lr"; 16 | quickfix = mkMappingOption "QuickFix [trouble]" "xq"; 17 | locList = mkMappingOption "LOCList [trouble]" "xl"; 18 | symbols = mkMappingOption "Symbols [trouble]" "xs"; 19 | }; 20 | }; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /docs/manual/configuring/custom-plugins/non-lazy-method.md: -------------------------------------------------------------------------------- 1 | # Non-lazy Method {#sec-non-lazy-method} 2 | 3 | As of version **0.5**, we have a more extensive API for configuring plugins that 4 | should be preferred over the legacy method. This API is available as 5 | {option}`vim.extraPlugins`. Instead of using DAGs exposed by the library 6 | _directly_, you may use the extra plugin module as follows: 7 | 8 | ```nix 9 | {pkgs, ...}: { 10 | config.vim.extraPlugins = { 11 | aerial = { 12 | package = pkgs.vimPlugins.aerial-nvim; 13 | setup = '' 14 | require('aerial').setup { 15 | -- some lua configuration here 16 | } 17 | ''; 18 | }; 19 | 20 | harpoon = { 21 | package = pkgs.vimPlugins.harpoon; 22 | setup = "require('harpoon').setup {}"; 23 | after = ["aerial"]; 24 | }; 25 | }; 26 | } 27 | ``` 28 | 29 | This provides a level of abstraction over the DAG system for faster iteration. 30 | -------------------------------------------------------------------------------- /modules/plugins/git/git-conflict/git-conflict.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.options) mkEnableOption; 7 | inherit (lib.nvim.binds) mkMappingOption; 8 | inherit (lib.nvim.types) mkPluginSetupOption; 9 | in { 10 | options.vim.git.git-conflict = { 11 | enable = mkEnableOption "git-conflict" // {default = config.vim.git.enable;}; 12 | setupOpts = mkPluginSetupOption "git-conflict" {}; 13 | 14 | mappings = { 15 | ours = mkMappingOption "Choose Ours [Git-Conflict]" "co"; 16 | theirs = mkMappingOption "Choose Theirs [Git-Conflict]" "ct"; 17 | both = mkMappingOption "Choose Both [Git-Conflict]" "cb"; 18 | none = mkMappingOption "Choose None [Git-Conflict]" "c0"; 19 | prevConflict = mkMappingOption "Go to the previous Conflict [Git-Conflict]" "]x"; 20 | nextConflict = mkMappingOption "Go to the next Conflict [Git-Conflict]" "[x"; 21 | }; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /modules/plugins/lsp/otter/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | options, 5 | ... 6 | }: let 7 | inherit (lib.modules) mkIf mkMerge; 8 | inherit (lib.nvim.dag) entryAnywhere; 9 | inherit (lib.nvim.lua) toLuaObject; 10 | inherit (lib.nvim.binds) addDescriptionsToMappings mkSetBinding; 11 | 12 | cfg = config.vim.lsp; 13 | 14 | mappingDefinitions = options.vim.lsp.otter-nvim.mappings; 15 | mappings = addDescriptionsToMappings cfg.otter-nvim.mappings mappingDefinitions; 16 | in { 17 | config = mkIf (cfg.enable && cfg.otter-nvim.enable) { 18 | vim = { 19 | startPlugins = ["otter-nvim"]; 20 | 21 | maps.normal = mkMerge [ 22 | (mkSetBinding mappings.toggle "lua require'otter'.activate()") 23 | ]; 24 | 25 | pluginRC.otter-nvim = entryAnywhere '' 26 | -- Enable otter diagnostics viewer 27 | require("otter").setup(${toLuaObject cfg.otter-nvim.setupOpts}) 28 | ''; 29 | }; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /modules/plugins/runner/run-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | config, 4 | options, 5 | ... 6 | }: let 7 | inherit (lib.modules) mkIf mkDefault; 8 | inherit (lib.nvim.binds) mkKeymap; 9 | 10 | cfg = config.vim.runner.run-nvim; 11 | inherit (options.vim.runner.run-nvim) mappings; 12 | in { 13 | config = mkIf cfg.enable { 14 | vim = { 15 | lazy.plugins.run-nvim = { 16 | package = "run-nvim"; 17 | setupModule = "run"; 18 | inherit (cfg) setupOpts; 19 | 20 | cmd = "Run"; 21 | 22 | keys = [ 23 | (mkKeymap "n" cfg.mappings.run "Run" {desc = mappings.run.description;}) 24 | (mkKeymap "n" cfg.mappings.runOverride "Run!" {desc = mappings.runOverride.description;}) 25 | (mkKeymap "n" cfg.mappings.runCommand "RunPrompt" {desc = mappings.run.description;}) 26 | ]; 27 | }; 28 | 29 | binds.whichKey.register."r" = mkDefault "+Run"; 30 | }; 31 | }; 32 | } 33 | -------------------------------------------------------------------------------- /lib/stdlib-extended.nix: -------------------------------------------------------------------------------- 1 | # Convenience function that returns the given Nixpkgs standard library 2 | # extended with our functions using `lib.extend`. 3 | {inputs, ...} @ args: 4 | inputs.nixpkgs.lib.extend (self: super: { 5 | # WARNING: New functions should not be added here, but to files 6 | # imported by `./default.nix` under their own categories. If your 7 | # function does not fit to any of the existing categories, create 8 | # a new file and import it in `./default.nix.` 9 | 10 | # Makes our custom functions available under `lib.nvim` where stdlib-extended.nix is imported 11 | # with the appropriate arguments. For end-users, a `lib` output will be accessible from the flake. 12 | # E.g. for an input called `nvf`, `inputs.nvf.lib.nvim` will return the set 13 | # below. 14 | nvim = import ./. { 15 | inherit (args) inputs self; 16 | lib = self; 17 | }; 18 | 19 | # For forward compatibility. 20 | literalExpression = super.literalExpression or super.literalExample; 21 | }) 22 | -------------------------------------------------------------------------------- /modules/plugins/lsp/lspconfig/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf mkMerge; 7 | inherit (lib.strings) optionalString; 8 | inherit (lib.attrsets) mapAttrs; 9 | inherit (lib.nvim.dag) entryAfter; 10 | inherit (lib.nvim.lua) toLuaObject; 11 | 12 | cfg = config.vim.lsp; 13 | in { 14 | config = mkIf cfg.lspconfig.enable (mkMerge [ 15 | { 16 | vim = { 17 | startPlugins = ["nvim-lspconfig"]; 18 | 19 | pluginRC.lspconfig = entryAfter ["lsp-setup"] '' 20 | local lspconfig = require('lspconfig') 21 | 22 | ${ 23 | optionalString config.vim.ui.borders.enable '' 24 | require('lspconfig.ui.windows').default_options.border = ${toLuaObject config.vim.ui.borders.globalStyle} 25 | '' 26 | } 27 | ''; 28 | }; 29 | } 30 | { 31 | vim.pluginRC = mapAttrs (_: v: (entryAfter ["lspconfig"] v)) cfg.lspconfig.sources; 32 | } 33 | ]); 34 | } 35 | -------------------------------------------------------------------------------- /modules/plugins/lsp/nvim-docs-view/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | options, 5 | ... 6 | }: let 7 | inherit (lib.modules) mkIf mkMerge; 8 | inherit (lib.nvim.binds) addDescriptionsToMappings mkSetBinding; 9 | inherit (lib.nvim.dag) entryAnywhere; 10 | inherit (lib.nvim.lua) toLuaObject; 11 | 12 | cfg = config.vim.lsp.nvim-docs-view; 13 | 14 | mappingDefinitions = options.vim.lsp.nvim-docs-view.mappings; 15 | mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; 16 | in { 17 | config = mkIf cfg.enable { 18 | vim = { 19 | lsp.enable = true; 20 | startPlugins = ["nvim-docs-view"]; 21 | 22 | pluginRC.nvim-docs-view = entryAnywhere '' 23 | require("docs-view").setup ${toLuaObject cfg.setupOpts} 24 | ''; 25 | 26 | maps.normal = mkMerge [ 27 | (mkSetBinding mappings.viewToggle "DocsViewToggle") 28 | (mkSetBinding mappings.viewUpdate "DocsViewUpdate") 29 | ]; 30 | }; 31 | }; 32 | } 33 | -------------------------------------------------------------------------------- /docs/manual/tips/debugging-nvf.md: -------------------------------------------------------------------------------- 1 | # Debugging nvf {#sec-debugging-nvf} 2 | 3 | There may be instances where the your Nix configuration evaluates to invalid 4 | Lua, or times when you will be asked to provide your built Lua configuration for 5 | easier debugging by nvf maintainers. nvf provides two helpful utilities out of 6 | the box. 7 | 8 | **nvf-print-config** and **nvf-print-config-path** will be bundled with nvf as 9 | lightweight utilities to help you view or share your built configuration when 10 | necessary. 11 | 12 | To view your configuration with syntax highlighting, you may use the 13 | [bat pager](https://github.com/sharkdp/bat). 14 | 15 | ```bash 16 | nvf-print-config | bat --language=lua 17 | ``` 18 | 19 | Alternatively, `cat` or `less` may also be used. 20 | 21 | ## Accessing `neovimConfig` {#sec-accessing-config} 22 | 23 | It is also possible to access the configuration for the wrapped package. The 24 | _built_ Neovim package will contain a `neovimConfig` attribute in its 25 | `passthru`. 26 | -------------------------------------------------------------------------------- /modules/plugins/assistant/neocodeium/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | options, 5 | ... 6 | }: let 7 | inherit (lib.nvim.binds) mkKeymap; 8 | cfg = config.vim.assistant.neocodeium; 9 | 10 | inherit (options.vim.assistant.neocodeium) keymaps; 11 | mkNeoCodeiumKey = act: (mkKeymap "i" cfg.keymaps.${act} "function() require('neocodeium').${act}() end" { 12 | lua = true; 13 | desc = keymaps.${act}.description; 14 | }); 15 | in { 16 | config = lib.mkIf cfg.enable { 17 | vim = { 18 | lazy.plugins.neocodeium = { 19 | package = "neocodeium"; 20 | setupModule = "neocodeium"; 21 | inherit (cfg) setupOpts; 22 | }; 23 | keymaps = [ 24 | (mkNeoCodeiumKey "accept") 25 | (mkNeoCodeiumKey "accept_word") 26 | (mkNeoCodeiumKey "accept_line") 27 | (mkNeoCodeiumKey "cycle_or_complete") 28 | (mkNeoCodeiumKey "cycle_or_complete_reverse") 29 | (mkNeoCodeiumKey "clear") 30 | ]; 31 | }; 32 | }; 33 | } 34 | -------------------------------------------------------------------------------- /modules/plugins/utility/yazi-nvim/yazi-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption mkOption; 3 | inherit (lib.types) bool; 4 | inherit (lib.nvim.types) mkPluginSetupOption; 5 | inherit (lib.nvim.binds) mkMappingOption; 6 | in { 7 | options.vim.utility.yazi-nvim = { 8 | enable = mkEnableOption '' 9 | companion plugin for the yazi terminal file manager [yazi-nvim] 10 | ''; 11 | 12 | mappings = { 13 | openYazi = mkMappingOption "Open yazi at the current file [yazi.nvim]" "-"; 14 | openYaziDir = mkMappingOption "Open the file manager in nvim's working directory [yazi.nvim]" "cw"; 15 | yaziToggle = mkMappingOption "Resume the last yazi session [yazi.nvim]" ""; 16 | }; 17 | 18 | setupOpts = mkPluginSetupOption "yazi-nvim" { 19 | open_for_directories = mkOption { 20 | type = bool; 21 | default = false; 22 | description = "Whether to open Yazi instead of netrw"; 23 | }; 24 | }; 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /modules/plugins/completion/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | config, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.attrsets) mapListToAttrs; 8 | inherit (builtins) typeOf tryEval; 9 | 10 | cfg = config.vim.autocomplete; 11 | getPluginName = plugin: 12 | if typeOf plugin == "string" 13 | then plugin 14 | else if (plugin ? pname && (tryEval plugin.pname).success) 15 | then plugin.pname 16 | else plugin.name; 17 | in { 18 | config.vim = mkIf cfg.enableSharedCmpSources { 19 | startPlugins = ["rtp-nvim"]; 20 | lazy.plugins = 21 | mapListToAttrs (package: { 22 | name = getPluginName package; 23 | value = { 24 | inherit package; 25 | lazy = true; 26 | after = '' 27 | local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/${getPluginName package}') 28 | require("rtp_nvim").source_after_plugin_dir(path) 29 | ''; 30 | }; 31 | }) 32 | cfg.nvim-cmp.sourcePlugins; 33 | }; 34 | } 35 | -------------------------------------------------------------------------------- /modules/plugins/utility/yazi-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | options, 3 | config, 4 | pkgs, 5 | lib, 6 | ... 7 | }: let 8 | inherit (lib.modules) mkIf; 9 | inherit (lib.nvim.binds) mkKeymap; 10 | 11 | cfg = config.vim.utility.yazi-nvim; 12 | keys = cfg.mappings; 13 | 14 | inherit (options.vim.utility.yazi-nvim) mappings; 15 | in { 16 | config = mkIf cfg.enable { 17 | vim = { 18 | startPlugins = ["snacks-nvim"]; 19 | lazy.plugins."yazi.nvim" = { 20 | package = pkgs.vimPlugins.yazi-nvim; 21 | setupModule = "yazi"; 22 | inherit (cfg) setupOpts; 23 | event = ["BufAdd" "VimEnter"]; 24 | 25 | keys = [ 26 | (mkKeymap "n" keys.openYazi "Yazi" {desc = mappings.openYazi.description;}) 27 | (mkKeymap "n" keys.openYaziDir "Yazi cwd" {desc = mappings.openYaziDir.description;}) 28 | (mkKeymap "n" keys.yaziToggle "Yazi toggle" {desc = mappings.yaziToggle.description;}) 29 | ]; 30 | }; 31 | }; 32 | }; 33 | } 34 | -------------------------------------------------------------------------------- /modules/plugins/mini/indentscope/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.generators) mkLuaInline; 7 | inherit (lib.modules) mkIf; 8 | inherit (lib.nvim.dag) entryAnywhere; 9 | inherit (lib.nvim.lua) toLuaObject; 10 | 11 | cfg = config.vim.mini.indentscope; 12 | in { 13 | vim = mkIf cfg.enable { 14 | autocmds = [ 15 | { 16 | callback = mkLuaInline '' 17 | function() 18 | local ignore_filetypes = ${toLuaObject cfg.setupOpts.ignore_filetypes} 19 | if vim.tbl_contains(ignore_filetypes, vim.bo.filetype) then 20 | vim.b.miniindentscope_disable = true 21 | end 22 | end 23 | ''; 24 | desc = "Disable indentscope for certain filetypes"; 25 | event = ["FileType"]; 26 | } 27 | ]; 28 | 29 | startPlugins = ["mini-indentscope"]; 30 | 31 | pluginRC.mini-indentscope = entryAnywhere '' 32 | require("mini.indentscope").setup(${toLuaObject cfg.setupOpts}) 33 | ''; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /modules/plugins/notes/todo-comments/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | options, 5 | ... 6 | }: let 7 | inherit (lib.modules) mkMerge mkIf; 8 | inherit (lib.nvim.binds) mkBinding; 9 | inherit (lib.nvim.lua) toLuaObject; 10 | 11 | cfg = config.vim.notes.todo-comments; 12 | inherit (options.vim.notes.todo-comments) mappings; 13 | in { 14 | config = mkIf cfg.enable { 15 | vim = { 16 | startPlugins = [ 17 | "todo-comments-nvim" 18 | ]; 19 | 20 | maps.normal = mkMerge [ 21 | (mkBinding cfg.mappings.quickFix ":TodoQuickFix" mappings.quickFix.description) 22 | (mkIf config.vim.telescope.enable (mkBinding cfg.mappings.telescope ":TodoTelescope" mappings.telescope.description)) 23 | (mkIf config.vim.lsp.trouble.enable (mkBinding cfg.mappings.trouble ":TodoTrouble" mappings.trouble.description)) 24 | ]; 25 | 26 | pluginRC.todo-comments = '' 27 | require('todo-comments').setup(${toLuaObject cfg.setupOpts}) 28 | ''; 29 | }; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /docs/manual/configuring/languages/lsp.md: -------------------------------------------------------------------------------- 1 | # LSP Custom Packages/Command {#sec-languages-custom-lsp-packages} 2 | 3 | One of the strengths of **nvf** is convenient aliases to quickly configure LSP 4 | servers through the Nix module system. By default the LSP packages for relevant 5 | language modules will be pulled into the closure. If this is not desirable, you 6 | may provide **a custom LSP package** (e.g., a Bash script that calls a command) 7 | or **a list of strings** to be interpreted as the command to launch the language 8 | server. By using a list of strings, you can use this to skip automatic 9 | installation of a language server, and instead use the one found in your `$PATH` 10 | during runtime, for example: 11 | 12 | ```nix 13 | vim.languages.java = { 14 | lsp = { 15 | enable = true; 16 | 17 | # This expects 'jdt-language-server' to be in your PATH or in 18 | # 'vim.extraPackages.' There are no additional checks performed to see 19 | # if the command provided is valid. 20 | package = ["jdt-language-server" "-data" "~/.cache/jdtls/workspace"]; 21 | }; 22 | } 23 | ``` 24 | -------------------------------------------------------------------------------- /modules/plugins/lsp/harper-ls/harper-ls.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkOption mkEnableOption; 3 | inherit (lib.types) anything attrsOf; 4 | in { 5 | options.vim.lsp.harper-ls = { 6 | enable = mkEnableOption "Harper grammar checking LSP"; 7 | settings = mkOption { 8 | type = attrsOf anything; 9 | default = {}; 10 | example = { 11 | userDictPath = ""; 12 | workspaceDictPath = ""; 13 | fileDictPath = ""; 14 | linters = { 15 | BoringWords = true; 16 | PossessiveNoun = true; 17 | SentenceCapitalization = false; 18 | SpellCheck = false; 19 | }; 20 | codeActions = { 21 | ForceStable = false; 22 | }; 23 | markdown = { 24 | IgnoreLinkTitle = false; 25 | }; 26 | diagnosticSeverity = "hint"; 27 | isolateEnglish = false; 28 | dialect = "American"; 29 | maxFileLength = 120000; 30 | ignoredLintsPath = {}; 31 | }; 32 | description = "Settings to pass to harper-ls"; 33 | }; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /modules/plugins/lsp/lightbulb/lightbulb.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkOption mkEnableOption; 3 | inherit (lib.types) listOf str either; 4 | inherit (lib.nvim.types) mkPluginSetupOption luaInline; 5 | in { 6 | options.vim.lsp = { 7 | lightbulb = { 8 | enable = mkEnableOption "Lightbulb for code actions. Requires an emoji font"; 9 | setupOpts = mkPluginSetupOption "nvim-lightbulb" {}; 10 | autocmd = { 11 | enable = mkEnableOption "updating lightbulb glyph automatically" // {default = true;}; 12 | events = mkOption { 13 | type = listOf str; 14 | default = ["CursorHold" "CursorHoldI"]; 15 | description = "Events on which to update nvim-lightbulb glyphs"; 16 | }; 17 | 18 | pattern = mkOption { 19 | type = either str luaInline; 20 | default = "*"; 21 | description = '' 22 | File patterns or buffer names to match, determining which files or buffers trigger 23 | glyph updates. 24 | ''; 25 | }; 26 | }; 27 | }; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /modules/plugins/notes/neorg/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf mkMerge; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.binds) pushDownDefault; 9 | inherit (lib.nvim.lua) toLuaObject; 10 | 11 | cfg = config.vim.notes.neorg; 12 | in { 13 | config = mkIf cfg.enable (mkMerge [ 14 | { 15 | vim = { 16 | startPlugins = [ 17 | "lua-utils-nvim" 18 | "nui-nvim" 19 | "nvim-nio" 20 | "pathlib-nvim" 21 | "plenary-nvim" 22 | "neorg" 23 | "neorg-telescope" 24 | ]; 25 | 26 | binds.whichKey.register = pushDownDefault { 27 | "o" = "+Notes"; 28 | }; 29 | 30 | pluginRC.neorg = entryAnywhere '' 31 | require('neorg').setup(${toLuaObject cfg.setupOpts}) 32 | ''; 33 | }; 34 | } 35 | 36 | (mkIf cfg.treesitter.enable { 37 | vim.treesitter.enable = true; 38 | vim.treesitter.grammars = [cfg.treesitter.norgPackage cfg.treesitter.norgMetaPackage]; 39 | }) 40 | ]); 41 | } 42 | -------------------------------------------------------------------------------- /modules/plugins/comments/comment-nvim/comment-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption; 3 | inherit (lib.nvim.binds) mkMappingOption; 4 | inherit (lib.nvim.types) mkPluginSetupOption; 5 | in { 6 | options.vim.comments.comment-nvim = { 7 | enable = mkEnableOption "smart and powerful comment plugin for neovim comment-nvim"; 8 | 9 | mappings = { 10 | toggleCurrentLine = mkMappingOption "Toggle current line comment" "gcc"; 11 | toggleCurrentBlock = mkMappingOption "Toggle current block comment" "gbc"; 12 | 13 | toggleOpLeaderLine = mkMappingOption "Toggle line comment" "gc"; 14 | toggleOpLeaderBlock = mkMappingOption "Toggle block comment" "gb"; 15 | 16 | toggleSelectedLine = mkMappingOption "Toggle selected comment" "gc"; 17 | toggleSelectedBlock = mkMappingOption "Toggle selected block" "gb"; 18 | }; 19 | 20 | setupOpts = mkPluginSetupOption "Comment-nvim" { 21 | mappings = { 22 | basic = mkEnableOption "basic mappings"; 23 | extra = mkEnableOption "extra mappings"; 24 | }; 25 | }; 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /modules/plugins/utility/outline/aerial-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | options, 3 | config, 4 | lib, 5 | ... 6 | }: let 7 | inherit (lib.modules) mkIf; 8 | inherit (lib.nvim.binds) mkKeymap; 9 | 10 | cfg = config.vim.utility.outline.aerial-nvim; 11 | inherit (options.vim.utility.outline.aerial-nvim) mappings; 12 | in { 13 | config = mkIf cfg.enable { 14 | vim = { 15 | lazy.plugins.aerial-nvim = { 16 | package = "aerial-nvim"; 17 | 18 | setupModule = "aerial"; 19 | inherit (cfg) setupOpts; 20 | 21 | cmd = [ 22 | "AerialClose" 23 | "AerialCloseAll" 24 | "AerialGo" 25 | "AerialInfo" 26 | "AerialNavClose" 27 | "AerialNavOpen" 28 | "AerialNavToggle" 29 | "AerialNext" 30 | "AerialOpen" 31 | "AerialOpenAll" 32 | "AerialPrev" 33 | "AerialToggle" 34 | ]; 35 | 36 | keys = [ 37 | (mkKeymap "n" cfg.mappings.toggle ":AerialToggle" {desc = mappings.toggle.description;}) 38 | ]; 39 | }; 40 | }; 41 | }; 42 | } 43 | -------------------------------------------------------------------------------- /flake/pkgs/by-name/prettier-plugin-astro/package.nix: -------------------------------------------------------------------------------- 1 | { 2 | stdenv, 3 | fetchFromGitHub, 4 | nodejs, 5 | pnpm_9, 6 | pins, 7 | }: let 8 | pin = pins.prettier-plugin-astro; 9 | in 10 | stdenv.mkDerivation (finalAttrs: { 11 | pname = "prettier-plugin-astro"; 12 | version = pin.version or pin.revision; 13 | 14 | src = fetchFromGitHub { 15 | inherit (pin.repository) owner repo; 16 | rev = finalAttrs.version; 17 | sha256 = pin.hash; 18 | }; 19 | 20 | pnpmDeps = pnpm_9.fetchDeps { 21 | inherit (finalAttrs) pname src; 22 | fetcherVersion = 2; 23 | hash = "sha256-K7pIWLkIIbUKDIcysfEtcf/eVMX9ZgyFHdqcuycHCNE="; 24 | }; 25 | 26 | nativeBuildInputs = [ 27 | nodejs 28 | pnpm_9.configHook 29 | ]; 30 | 31 | buildPhase = '' 32 | runHook preBuild 33 | 34 | pnpm run build 35 | 36 | runHook postBuild 37 | ''; 38 | 39 | installPhase = '' 40 | runHook preInstall 41 | 42 | # mkdir -p $out/dist 43 | cp -r dist/ $out 44 | cp -r node_modules $out 45 | 46 | runHook postInstall 47 | ''; 48 | }) 49 | -------------------------------------------------------------------------------- /modules/plugins/utility/qmk-nvim/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | inherit (lib.nvim.dag) entryAfter; 9 | 10 | cfg = config.vim.utility.qmk-nvim; 11 | in { 12 | config = mkIf cfg.enable { 13 | vim = { 14 | startPlugins = ["qmk-nvim"]; 15 | 16 | pluginRC.qmk-nvim = entryAfter ["nvim-notify"] '' 17 | require('qmk').setup(${toLuaObject cfg.setupOpts}) 18 | ''; 19 | }; 20 | 21 | assertions = [ 22 | { 23 | assertion = cfg.setupOpts.variant == "qmk" && cfg.setupOpts.comment_preview.position != "inside"; 24 | message = "comment_preview.position can only be set to inside when using the qmk layoyt"; 25 | } 26 | { 27 | assertion = cfg.setupOpts.name != null; 28 | message = "qmk-nvim requires 'vim.utility.qmk.setupOpts.name' to be set."; 29 | } 30 | { 31 | assertion = cfg.setupOpts.layout != null; 32 | message = "qmk-nvim requires 'vim.utility.qmk.setupOpts.layout' to be set."; 33 | } 34 | ]; 35 | }; 36 | } 37 | -------------------------------------------------------------------------------- /docs/html-open-tool.nix: -------------------------------------------------------------------------------- 1 | { 2 | writeShellScriptBin, 3 | makeDesktopItem, 4 | symlinkJoin, 5 | html, 6 | }: let 7 | helpScript = writeShellScriptBin "nvf-help" '' 8 | set -euo pipefail 9 | 10 | if [[ ! -v BROWSER || -z $BROWSER ]]; then 11 | for candidate in xdg-open open w3m; do 12 | BROWSER="$(type -P $candidate || true)" 13 | if [[ -x $BROWSER ]]; then 14 | break; 15 | fi 16 | done 17 | fi 18 | 19 | if [[ ! -v BROWSER || -z $BROWSER ]]; then 20 | echo "$0: unable to start a web browser; please set \$BROWSER" 21 | exit 1 22 | else 23 | exec "$BROWSER" "${html}/share/doc/nvf/index.xhtml" 24 | fi 25 | ''; 26 | 27 | desktopItem = makeDesktopItem { 28 | name = "nvf-manual"; 29 | desktopName = "nvf Manual"; 30 | genericName = "View nvf documentation in a web browser"; 31 | icon = "nix-snowflake"; 32 | exec = "${helpScript}/bin/nvf-help"; 33 | categories = ["System"]; 34 | }; 35 | in 36 | symlinkJoin { 37 | name = "nvf-help"; 38 | paths = [ 39 | helpScript 40 | desktopItem 41 | ]; 42 | } 43 | -------------------------------------------------------------------------------- /modules/plugins/utility/motion/leap/leap.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption mkOption; 3 | inherit (lib.types) nullOr str; 4 | in { 5 | options.vim.utility.motion.leap = { 6 | enable = mkEnableOption "leap.nvim plugin (easy motion)"; 7 | 8 | mappings = { 9 | leapForwardTo = mkOption { 10 | type = nullOr str; 11 | description = "Leap forward to"; 12 | default = "ss"; 13 | }; 14 | leapBackwardTo = mkOption { 15 | type = nullOr str; 16 | description = "Leap backward to"; 17 | default = "sS"; 18 | }; 19 | leapForwardTill = mkOption { 20 | type = nullOr str; 21 | description = "Leap forward till"; 22 | default = "sx"; 23 | }; 24 | leapBackwardTill = mkOption { 25 | type = nullOr str; 26 | description = "Leap backward till"; 27 | default = "sX"; 28 | }; 29 | leapFromWindow = mkOption { 30 | type = nullOr str; 31 | description = "Leap from window"; 32 | default = "gs"; 33 | }; 34 | }; 35 | }; 36 | } 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023-2024 NotAShelf 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /modules/plugins/utility/multicursors/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | cfg = config.vim.utility.multicursors; 8 | in { 9 | config = mkIf cfg.enable { 10 | vim = { 11 | startPlugins = ["hydra-nvim"]; 12 | lazy.plugins."multicursors-nvim" = { 13 | package = "multicursors-nvim"; 14 | setupModule = "multicursors"; 15 | inherit (cfg) setupOpts; 16 | 17 | event = ["DeferredUIEnter"]; 18 | cmd = ["MCstart" "MCvisual" "MCclear" "MCpattern" "MCvisualPattern" "MCunderCursor"]; 19 | keys = [ 20 | { 21 | mode = ["v" "n"]; 22 | key = "mcs"; 23 | action = ":MCstart"; 24 | desc = "Create a selection for selected text or word under the cursor [multicursors.nvim]"; 25 | } 26 | { 27 | mode = ["v" "n"]; 28 | key = "mcp"; 29 | action = ":MCpattern"; 30 | desc = "Create a selection for pattern entered [multicursors.nvim]"; 31 | } 32 | ]; 33 | }; 34 | }; 35 | }; 36 | } 37 | -------------------------------------------------------------------------------- /modules/neovim/mappings/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkMerge; 7 | inherit (lib.trivial) pipe; 8 | inherit (lib.attrsets) mapAttrsToList; 9 | inherit (lib.lists) flatten; 10 | 11 | legacyMapModes = { 12 | normal = ["n"]; 13 | insert = ["i"]; 14 | select = ["s"]; 15 | visual = ["v"]; 16 | terminal = ["t"]; 17 | normalVisualOp = ["n" "v" "o"]; 18 | visualOnly = ["n" "x"]; 19 | operator = ["o"]; 20 | insertCommand = ["i" "c"]; 21 | lang = ["l"]; 22 | command = ["c"]; 23 | }; 24 | 25 | cfg = config.vim; 26 | in { 27 | config = { 28 | vim.keymaps = mkMerge [ 29 | ( 30 | pipe cfg.maps 31 | [ 32 | (mapAttrsToList ( 33 | oldMode: keybinds: 34 | mapAttrsToList ( 35 | key: bind: 36 | bind 37 | // { 38 | inherit key; 39 | mode = legacyMapModes.${oldMode}; 40 | } 41 | ) 42 | keybinds 43 | )) 44 | flatten 45 | ] 46 | ) 47 | ]; 48 | }; 49 | } 50 | -------------------------------------------------------------------------------- /modules/plugins/git/neogit/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | options, 3 | config, 4 | lib, 5 | ... 6 | }: let 7 | inherit (lib.modules) mkIf; 8 | inherit (lib.nvim.binds) pushDownDefault mkKeymap; 9 | 10 | cfg = config.vim.git.neogit; 11 | 12 | keys = cfg.mappings; 13 | inherit (options.vim.git.neogit) mappings; 14 | in { 15 | config = mkIf cfg.enable { 16 | vim = { 17 | startPlugins = ["plenary-nvim"]; 18 | 19 | lazy.plugins.neogit = { 20 | package = "neogit"; 21 | setupModule = "neogit"; 22 | inherit (cfg) setupOpts; 23 | 24 | cmd = ["Neogit"]; 25 | 26 | keys = [ 27 | (mkKeymap "n" keys.open "Neogit" {desc = mappings.open.description;}) 28 | (mkKeymap "n" keys.commit "Neogit commit" {desc = mappings.commit.description;}) 29 | (mkKeymap "n" keys.pull "Neogit pull" {desc = mappings.pull.description;}) 30 | (mkKeymap "n" keys.push "Neogit push" {desc = mappings.push.description;}) 31 | ]; 32 | }; 33 | 34 | binds.whichKey.register = pushDownDefault { 35 | "g" = "+Git"; 36 | }; 37 | }; 38 | }; 39 | } 40 | -------------------------------------------------------------------------------- /modules/plugins/utility/yanky-nvim/yanky-nvim.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkOption mkEnableOption; 3 | inherit (lib.types) enum; 4 | inherit (lib.nvim.types) mkPluginSetupOption; 5 | in { 6 | options.vim.utility.yanky-nvim = { 7 | enable = mkEnableOption '' 8 | improved Yank and Put functionalities for Neovim [yanky-nvim] 9 | ''; 10 | 11 | setupOpts = mkPluginSetupOption "yanky-nvim" { 12 | ring.storage = mkOption { 13 | type = enum ["shada" "sqlite" "memory"]; 14 | default = "shada"; 15 | example = "sqlite"; 16 | description = '' 17 | storage mode for ring values. 18 | 19 | - **shada**: this will save pesistantly using Neovim ShaDa feature. 20 | This means that history will be persisted between each session of Neovim. 21 | - **memory**: each Neovim instance will have his own history and it will be 22 | lost between sessions. 23 | - **sqlite**: more reliable than `shada`, requires `sqlite.lua` as a dependency. 24 | nvf will add this dependency to `PATH` automatically. 25 | ''; 26 | }; 27 | }; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /lib/types/languages.nix: -------------------------------------------------------------------------------- 1 | {lib}: let 2 | inherit (lib.options) mkOption mkPackageOption; 3 | inherit (lib.attrsets) attrNames; 4 | inherit (lib.types) listOf either enum submodule package; 5 | 6 | diagnosticSubmodule = _: { 7 | options = { 8 | type = mkOption { 9 | description = "Type of diagnostic to enable"; 10 | type = attrNames diagnostics; 11 | }; 12 | 13 | package = mkOption { 14 | type = package; 15 | description = "Diagnostics package"; 16 | }; 17 | }; 18 | }; 19 | 20 | diagnostics = { 21 | langDesc, 22 | diagnosticsProviders, 23 | defaultDiagnosticsProvider, 24 | }: 25 | mkOption { 26 | type = listOf (either (enum (attrNames diagnosticsProviders)) (submodule diagnosticSubmodule)); 27 | default = defaultDiagnosticsProvider; 28 | description = "List of ${langDesc} diagnostics to enable"; 29 | }; 30 | 31 | mkGrammarOption = pkgs: grammar: 32 | mkPackageOption pkgs ["${grammar} treesitter"] { 33 | default = ["vimPlugins" "nvim-treesitter" "builtGrammars" grammar]; 34 | }; 35 | in { 36 | inherit diagnostics diagnosticSubmodule mkGrammarOption; 37 | } 38 | -------------------------------------------------------------------------------- /modules/plugins/utility/motion/flash/flash.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (lib.options) mkEnableOption mkOption; 3 | inherit (lib.types) nullOr str; 4 | inherit (lib.nvim.types) mkPluginSetupOption; 5 | in { 6 | options.vim.utility.motion.flash-nvim = { 7 | enable = mkEnableOption "enhanced code navigation with flash.nvim"; 8 | setupOpts = mkPluginSetupOption "flash-nvim" {}; 9 | 10 | mappings = { 11 | jump = mkOption { 12 | type = nullOr str; 13 | default = "s"; 14 | description = "Jump"; 15 | }; 16 | treesitter = mkOption { 17 | type = nullOr str; 18 | default = "S"; 19 | description = "Treesitter"; 20 | }; 21 | remote = mkOption { 22 | type = nullOr str; 23 | default = "r"; 24 | description = "Remote Flash"; 25 | }; 26 | treesitter_search = mkOption { 27 | type = nullOr str; 28 | default = "R"; 29 | description = "Treesitter Search"; 30 | }; 31 | toggle = mkOption { 32 | type = nullOr str; 33 | default = ""; 34 | description = "Toggle Flash Search"; 35 | }; 36 | }; 37 | }; 38 | } 39 | -------------------------------------------------------------------------------- /modules/plugins/languages/cue.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | lib, 5 | ... 6 | }: let 7 | inherit (lib.options) mkEnableOption; 8 | inherit (lib.meta) getExe; 9 | inherit (lib.modules) mkIf mkMerge; 10 | inherit (lib.nvim.types) mkGrammarOption; 11 | 12 | lspOptions = { 13 | cmd = [(getExe pkgs.cue) "lsp"]; 14 | filetypes = ["cue"]; 15 | root_markers = ["cue.mod" ".git"]; 16 | }; 17 | 18 | cfg = config.vim.languages.cue; 19 | in { 20 | options.vim.languages.cue = { 21 | enable = mkEnableOption "CUE language support"; 22 | 23 | treesitter = { 24 | enable = mkEnableOption "CUE treesitter" // {default = config.vim.languages.enableTreesitter;}; 25 | 26 | package = mkGrammarOption pkgs "cue"; 27 | }; 28 | 29 | lsp = { 30 | enable = mkEnableOption "CUE LSP support" // {default = config.vim.lsp.enable;}; 31 | }; 32 | }; 33 | 34 | config = mkIf cfg.enable (mkMerge [ 35 | (mkIf cfg.treesitter.enable { 36 | vim.treesitter.enable = true; 37 | vim.treesitter.grammars = [cfg.treesitter.package]; 38 | }) 39 | 40 | (mkIf cfg.lsp.enable { 41 | vim.lsp.servers.cue = lspOptions; 42 | }) 43 | ]); 44 | } 45 | -------------------------------------------------------------------------------- /modules/plugins/lsp/lsp-signature/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAnywhere; 8 | inherit (lib.nvim.lua) toLuaObject; 9 | 10 | cfg = config.vim.lsp; 11 | in { 12 | config = mkIf (cfg.enable && cfg.lspSignature.enable) { 13 | assertions = [ 14 | { 15 | assertion = !config.vim.autocomplete.blink-cmp.enable; 16 | message = '' 17 | lsp-signature does not work with blink.cmp. Please use blink.cmp's builtin signature feature: 18 | 19 | vim.autocomplete.blink-cmp.setupOpts.signature.enabled = true; 20 | ''; 21 | } 22 | ]; 23 | vim = { 24 | startPlugins = [ 25 | "lsp-signature-nvim" 26 | ]; 27 | 28 | lsp.lspSignature.setupOpts = { 29 | bind = config.vim.ui.borders.plugins.lsp-signature.enable; 30 | handler_opts.border = config.vim.ui.borders.plugins.lsp-signature.style; 31 | }; 32 | 33 | pluginRC.lsp-signature = entryAnywhere '' 34 | -- Enable lsp signature viewer 35 | require("lsp_signature").setup(${toLuaObject cfg.lspSignature.setupOpts}) 36 | ''; 37 | }; 38 | }; 39 | } 40 | -------------------------------------------------------------------------------- /modules/plugins/dashboard/alpha/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.lua) toLuaObject; 8 | 9 | cfg = config.vim.dashboard.alpha; 10 | themeDefined = cfg.theme != null; 11 | layoutDefined = cfg.layout != []; 12 | in { 13 | config = mkIf cfg.enable { 14 | vim.startPlugins = [ 15 | "alpha-nvim" 16 | "nvim-web-devicons" 17 | ]; 18 | 19 | vim.pluginRC.alpha = let 20 | setupOpts = 21 | if themeDefined 22 | then lib.generators.mkLuaInline "require'alpha.themes.${cfg.theme}'.config" 23 | else { 24 | inherit (cfg) layout opts; 25 | }; 26 | in '' 27 | require('alpha').setup(${toLuaObject setupOpts}) 28 | ''; 29 | 30 | assertions = [ 31 | { 32 | assertion = themeDefined || layoutDefined; 33 | message = '' 34 | One of 'theme' or 'layout' should be defined in Alpha configuration. 35 | ''; 36 | } 37 | { 38 | assertion = !(themeDefined && layoutDefined); 39 | message = '' 40 | 'theme' and 'layout' cannot be defined at the same time. 41 | ''; 42 | } 43 | ]; 44 | }; 45 | } 46 | -------------------------------------------------------------------------------- /modules/plugins/spellcheck/vim-dirtytalk/config.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | ... 5 | }: let 6 | inherit (lib.modules) mkIf; 7 | inherit (lib.nvim.dag) entryAfter; 8 | cfg = config.vim.spellcheck; 9 | in { 10 | config = mkIf cfg.programmingWordlist.enable { 11 | vim = { 12 | startPlugins = ["vim-dirtytalk"]; 13 | 14 | spellcheck.enable = true; 15 | 16 | # vim-dirtytalk doesn't have any setup but we would 17 | # like to append programming to spelllangs as soon as 18 | # possible while the plugin is enabled and the state 19 | # directory can be found. 20 | luaConfigRC.vim-dirtytalk = entryAfter ["spellcheck"] '' 21 | -- If Neovim can find (or access) the state directory 22 | -- then append "programming" wordlist from vim-dirtytalk 23 | -- to spelllang table. If path cannot be found, display 24 | -- an error and avoid appending the programming words 25 | if vim.fn.isdirectory(vim.fn.stdpath('state')) == 1 then 26 | vim.opt.spelllang:append("programming") 27 | else 28 | vim.notify("State path does not exist: " .. state_path, vim.log.levels.ERROR) 29 | end 30 | ''; 31 | }; 32 | }; 33 | } 34 | --------------------------------------------------------------------------------