diff options
| author | Arpit Chakladar <arpitchakladar+git@gmail.com> | 2026-07-15 20:02:29 +0530 |
|---|---|---|
| committer | Arpit Chakladar <arpitchakladar+git@gmail.com> | 2026-07-15 20:03:04 +0530 |
| commit | 01aaa7ad39c1fe8af6ffbca31abbab27dbfefc95 (patch) | |
| tree | 88560b79fa71e3b83d9d9aca6d1bb40673a1a170 /modules/development/nixvim/plugins | |
| parent | 2c573bb0c437b83fe629a9a5b818c976d2dfd796 (diff) | |
| download | home-manager-config-01aaa7ad39c1fe8af6ffbca31abbab27dbfefc95.tar.gz home-manager-config-01aaa7ad39c1fe8af6ffbca31abbab27dbfefc95.zip | |
refactor: organized the modules into better categories
Instead of lumping everything in modules/programs we are separating them
into separate directories in modules/
Diffstat (limited to 'modules/development/nixvim/plugins')
| -rw-r--r-- | modules/development/nixvim/plugins/cmp.nix | 37 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/comment.nix | 23 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/default.nix | 20 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/gitsigns.nix | 8 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/indent-blankline.nix | 14 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/lsp.nix | 234 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/lualine.nix | 90 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/luasnip.nix | 8 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/noice.nix | 8 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/nvim-tree.nix | 44 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/telescope.nix | 85 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/treesitter.nix | 19 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/web-devicons.nix | 8 | ||||
| -rw-r--r-- | modules/development/nixvim/plugins/which-key.nix | 21 |
14 files changed, 619 insertions, 0 deletions
diff --git a/modules/development/nixvim/plugins/cmp.nix b/modules/development/nixvim/plugins/cmp.nix new file mode 100644 index 0000000..683e0d3 --- /dev/null +++ b/modules/development/nixvim/plugins/cmp.nix @@ -0,0 +1,37 @@ +{ config, lib, ... }: + +# Cmp - Completion plugin (nvim-cmp) for auto-completion +{ + config.programs.nixvim.plugins.cmp = lib.mkIf config.programs.nixvim.enable { + enable = true; + autoEnableSources = true; + settings = { + snippet.expand = "function(args) require('luasnip').lsp_expand(args.body) end"; + mapping = { + "<C-Space>" = "cmp.mapping.complete()"; + "<CR>" = "cmp.mapping.confirm({ select = true })"; + "<Tab>" = "cmp.mapping.select_next_item()"; + "<S-Tab>" = "cmp.mapping.select_prev_item()"; + "<Down>" = "cmp.mapping.select_next_item()"; + "<Up>" = "cmp.mapping.select_prev_item()"; + "<C-u>" = "cmp.mapping.scroll_docs(-4)"; # scroll docs up + "<C-d>" = "cmp.mapping.scroll_docs(4)"; # scroll docs down + + "<Escape>" = '' + cmp.mapping(function(fallback) + if cmp.visible() then + cmp.abort() + else + fallback() + end + end, { "i" }) + ''; + }; + sources = [ + { name = "nvim_lsp"; } + { name = "path"; } + { name = "buffer"; } + ]; + }; + }; +} diff --git a/modules/development/nixvim/plugins/comment.nix b/modules/development/nixvim/plugins/comment.nix new file mode 100644 index 0000000..cc1b9cb --- /dev/null +++ b/modules/development/nixvim/plugins/comment.nix @@ -0,0 +1,23 @@ +{ config, lib, ... }: + +# Comment - Comment toggling plugin (comment.nvim) +{ + config.programs.nixvim.plugins.comment = lib.mkIf config.programs.nixvim.enable { + enable = true; + settings = { + toggler = { + line = "gcc"; # toggle line comment + block = "gbc"; # toggle block comment + }; + opleader = { + line = "gc"; # line comment operator (gc + motion) + block = "gb"; # block comment operator (gb + motion) + }; + extra = { + above = "gcO"; # add comment line above + below = "gco"; # add comment line below + eol = "gcA"; # add comment at end of line + }; + }; + }; +} diff --git a/modules/development/nixvim/plugins/default.nix b/modules/development/nixvim/plugins/default.nix new file mode 100644 index 0000000..a263c51 --- /dev/null +++ b/modules/development/nixvim/plugins/default.nix @@ -0,0 +1,20 @@ +{ ... }: + +# Plugins - Collection of nixvim plugin configurations +{ + imports = [ + ./cmp.nix + ./comment.nix + ./gitsigns.nix + ./indent-blankline.nix + ./lsp.nix + ./lualine.nix + ./luasnip.nix + ./noice.nix + ./nvim-tree.nix + ./telescope.nix + ./treesitter.nix + ./web-devicons.nix + ./which-key.nix + ]; +} diff --git a/modules/development/nixvim/plugins/gitsigns.nix b/modules/development/nixvim/plugins/gitsigns.nix new file mode 100644 index 0000000..ea99eba --- /dev/null +++ b/modules/development/nixvim/plugins/gitsigns.nix @@ -0,0 +1,8 @@ +{ config, lib, ... }: + +# Gitsigns - Git status in the sign column (gitsigns.nvim) +{ + config.programs.nixvim.plugins.gitsigns = lib.mkIf config.programs.nixvim.enable { + enable = true; + }; +} diff --git a/modules/development/nixvim/plugins/indent-blankline.nix b/modules/development/nixvim/plugins/indent-blankline.nix new file mode 100644 index 0000000..eb2674a --- /dev/null +++ b/modules/development/nixvim/plugins/indent-blankline.nix @@ -0,0 +1,14 @@ +{ config, lib, ... }: + +# Indent-blankline - Visual indentation guides (indent-blankline.nvim) +{ + config.programs.nixvim.plugins.indent-blankline = lib.mkIf config.programs.nixvim.enable { + enable = true; + settings = { + indent = { + char = "┊"; + tab_char = "│"; + }; + }; + }; +} diff --git a/modules/development/nixvim/plugins/lsp.nix b/modules/development/nixvim/plugins/lsp.nix new file mode 100644 index 0000000..7fc3ddd --- /dev/null +++ b/modules/development/nixvim/plugins/lsp.nix @@ -0,0 +1,234 @@ +{ config, lib, ... }: + +# LSP - Language Server Protocol configuration (nvim-lspconfig) +{ + config.programs.nixvim.plugins.lsp = lib.mkIf config.programs.nixvim.enable { + enable = true; + inlayHints = true; + autoLoad = true; + + keymaps.lspBuf = { + K = "hover"; + gD = "references"; + gd = "definition"; + gi = "implementation"; + gt = "type_definition"; + }; + + servers = { + # -- System & Configuration -- + nixd = { + enable = true; + package = null; + }; # Nix + bashls = { + enable = true; + package = null; + }; # Bash/Shell + taplo = { + enable = true; + package = null; + }; # TOML + yamlls = { + enable = true; + package = null; + }; # YAML + jsonls = { + enable = true; + package = null; + }; # JSON + marksman = { + enable = true; + package = null; + }; # Markdown + + # -- Web Development (HTML/CSS/JS/TS) -- + html = { + enable = true; + package = null; + }; # HTML + cssls = { + enable = true; + package = null; + }; # CSS/SCSS/LESS + tailwindcss = { + enable = true; + package = null; + }; # Tailwind CSS + vtsls = { + # JS/TS (Modern fast wrapper for tsserver) + enable = true; + package = null; + settings = { + # Optional but recommended: stops huge generic types from taking over your screen + vtsls.experimental.maxInlayHintLength = 30; + + # TypeScript type inferences + typescript.inlayHints = { + parameterNames.enabled = "all"; + parameterTypes.enabled = true; + variableTypes.enabled = true; + propertyDeclarationTypes.enabled = true; + functionLikeReturnTypes.enabled = true; + enumMemberValues.enabled = true; + }; + + # JavaScript type inferences (via JSDoc) + javascript.inlayHints = { + parameterNames.enabled = "all"; + parameterTypes.enabled = true; + variableTypes.enabled = true; + propertyDeclarationTypes.enabled = true; + functionLikeReturnTypes.enabled = true; + enumMemberValues.enabled = true; + }; + }; + }; + eslint = { + enable = true; + package = null; + }; # ESLint diagnostics/formatting + + # -- Web Frameworks -- + volar = { + # Vue + enable = true; + package = null; + tslsIntegration = false; + }; + svelte = { + enable = true; + package = null; + }; # Svelte + astro = { + enable = true; + package = null; + }; # Astro + + # -- Scripting & High-Level Languages -- + basedpyright = { + # Python (Modern, faster fork of Pyright) + enable = true; + package = null; + settings.basedpyright.analysis.inlayHints = { + variableTypes = true; + callArgumentNames = true; + functionReturnTypes = true; + genericTypes = false; # can get noisy, opt-in + }; + }; + ruff = { + enable = true; + package = null; + }; # Python (Ultra-fast linter/formatter) + ruby_lsp = { + enable = true; + package = null; + }; # Ruby (Shopify's modern standard) + lua_ls = { + # Lua + enable = true; + package = null; + settings.Lua.hint = { + enable = true; + arrayIndex = "Auto"; + setType = true; + paramName = "All"; + paramType = true; + }; + }; + intelephense = { + enable = true; + package = null; + }; # PHP + elixirls = { + enable = true; + package = null; + }; # Elixir + + # -- Systems, Compiled, & Enterprise -- + clangd = { + enable = true; + package = null; + }; # C/C++ (inlay hints on by default) + rust_analyzer = { + # Rust (inlay hints on by default) + enable = true; + package = null; + installCargo = false; + installRustc = false; + }; + gopls = { + # Go + enable = true; + package = null; + settings.gopls.hints = { + assignVariableTypes = true; + compositeLiteralFields = true; + compositeLiteralTypes = true; + constantValues = true; + functionTypeParameters = true; + parameterNames = true; + rangeVariableTypes = true; + }; + }; + zls = { + enable = true; + package = null; + }; # Zig (inlay hints on by default) + jdtls = { + # Java + enable = true; + package = null; + settings.java.inlayHints.parameterNames.enabled = "all"; + }; + kotlin_language_server = { + enable = true; + package = null; + }; # Kotlin + csharp_ls = { + enable = true; + package = null; + }; # C# (.NET) — no inlay hint support + hls = { + # Haskell + enable = true; + package = null; + installGhc = false; + settings.haskell.plugin."inlay-hints".globalOn = true; + }; + ocamllsp = { + enable = true; + package = null; + }; # OCaml + + # -- Infrastructure & DevOps -- + dockerls = { + enable = true; + package = null; + }; # Dockerfile + docker_compose_language_service = { + enable = true; + package = null; + }; # Docker Compose + terraformls = { + enable = true; + package = null; + }; # Terraform/HCL + + # -- Data & APIs -- + sqlls = { + enable = true; + package = null; + }; # SQL + graphql = { + enable = true; + package = null; + }; # GraphQL + prismals = { + enable = true; + package = null; + }; # Prisma ORM + }; + }; +} diff --git a/modules/development/nixvim/plugins/lualine.nix b/modules/development/nixvim/plugins/lualine.nix new file mode 100644 index 0000000..72f34be --- /dev/null +++ b/modules/development/nixvim/plugins/lualine.nix @@ -0,0 +1,90 @@ +{ config, lib, ... }: + +# Lualine - Statusline configuration (lualine.nvim) +{ + config.programs.nixvim.plugins.lualine = lib.mkIf config.programs.nixvim.enable { + enable = true; + settings = { + options = { + theme = with config.scheme.withHashtag; { + normal = { + a = { + fg = base00; + bg = base0D; + gui = "bold"; + }; + b = { + fg = base05; + bg = base01; + }; + c = { + fg = base05; + bg = base00; + }; + }; + insert = { + a = { + fg = base00; + bg = base0B; + gui = "bold"; + }; + b = { + fg = base05; + bg = base01; + }; + c = { + fg = base05; + bg = base00; + }; + }; + visual = { + a = { + fg = base00; + bg = base0A; + gui = "bold"; + }; + b = { + fg = base05; + bg = base01; + }; + c = { + fg = base05; + bg = base00; + }; + }; + replace = { + a = { + fg = base00; + bg = base08; + gui = "bold"; + }; + b = { + fg = base05; + bg = base01; + }; + c = { + fg = base05; + bg = base00; + }; + }; + inactive = { + a = { + fg = base04; + bg = base00; + gui = "bold"; + }; + b = { + fg = base04; + bg = base00; + }; + c = { + fg = base04; + bg = base00; + }; + }; + }; + icons_enabled = true; + }; + }; + }; +} diff --git a/modules/development/nixvim/plugins/luasnip.nix b/modules/development/nixvim/plugins/luasnip.nix new file mode 100644 index 0000000..60571e9 --- /dev/null +++ b/modules/development/nixvim/plugins/luasnip.nix @@ -0,0 +1,8 @@ +{ config, lib, ... }: + +# Luasnip - Snippet engine for Neovim (Lua-based) +{ + config.programs.nixvim.plugins.luasnip = lib.mkIf config.programs.nixvim.enable { + enable = true; + }; +} diff --git a/modules/development/nixvim/plugins/noice.nix b/modules/development/nixvim/plugins/noice.nix new file mode 100644 index 0000000..d466506 --- /dev/null +++ b/modules/development/nixvim/plugins/noice.nix @@ -0,0 +1,8 @@ +{ config, lib, ... }: + +# Noice - Modern UI for Neovim (cmdline, popupmenu, messages) +{ + config.programs.nixvim.plugins.noice = lib.mkIf config.programs.nixvim.enable { + enable = true; + }; +} diff --git a/modules/development/nixvim/plugins/nvim-tree.nix b/modules/development/nixvim/plugins/nvim-tree.nix new file mode 100644 index 0000000..2ad6570 --- /dev/null +++ b/modules/development/nixvim/plugins/nvim-tree.nix @@ -0,0 +1,44 @@ +{ config, lib, ... }: + +# Nvim-tree - File explorer sidebar (nvim-tree.lua) +{ + config.programs.nixvim.plugins.nvim-tree = lib.mkIf config.programs.nixvim.enable { + enable = true; + settings = { + filters = { + dotfiles = false; + git_clean = false; + no_buffer = false; + custom = { }; + }; + git = { + enable = true; + ignore = false; + }; + view = { + width = 30; + }; + renderer = { + indent_markers = { + enable = true; + inline_arrows = false; + icons = { + corner = "└"; + edge = "│"; + item = "├"; + bottom = "─"; + none = " "; + }; + }; + icons = { + show = { + folder = true; + folder_arrow = false; + file = true; + git = true; + }; + }; + }; + }; + }; +} diff --git a/modules/development/nixvim/plugins/telescope.nix b/modules/development/nixvim/plugins/telescope.nix new file mode 100644 index 0000000..b9678fc --- /dev/null +++ b/modules/development/nixvim/plugins/telescope.nix @@ -0,0 +1,85 @@ +{ config, lib, ... }: + +# Telescope - Fuzzy finder +{ + config.programs.nixvim.plugins.telescope = lib.mkIf config.programs.nixvim.enable { + enable = true; + extensions = { + fzf-native.enable = true; # faster fuzzy sorting + ui-select.enable = true; # use telescope for vim.ui.select (code actions etc.) + }; + settings = { + defaults = { + layout_strategy = "horizontal"; + layout_config = { + horizontal = { + preview_width = 0.55; + results_width = 0.45; + }; + width = 0.87; + height = 0.80; + }; + mappings = { + i = { + "<C-k>".__raw = "require('telescope.actions').move_selection_previous"; + "<C-j>".__raw = "require('telescope.actions').move_selection_next"; + "<Escape>".__raw = "require('telescope.actions').close"; + }; + }; + }; + }; + keymaps = { + # Files + "<leader>ff" = { + action = "find_files"; + options.desc = "Find files"; + }; + "<leader>fg" = { + action = "live_grep"; + options.desc = "Live grep"; + }; + "<leader>fb" = { + action = "buffers"; + options.desc = "Find buffers"; + }; + "<leader>fr" = { + action = "oldfiles"; + options.desc = "Recent files"; + }; + + # LSP + "<leader>fd" = { + action = "diagnostics"; + options.desc = "Diagnostics"; + }; + "<leader>fs" = { + action = "lsp_document_symbols"; + options.desc = "Document symbols"; + }; + + # Git + "<leader>gc" = { + action = "git_commits"; + options.desc = "Git commits"; + }; + "<leader>gb" = { + action = "git_branches"; + options.desc = "Git branches"; + }; + + # Misc + "<leader>fh" = { + action = "help_tags"; + options.desc = "Help tags"; + }; + "<leader>fc" = { + action = "commands"; + options.desc = "Commands"; + }; + "<leader>fk" = { + action = "keymaps"; + options.desc = "Find keymaps"; + }; + }; + }; +} diff --git a/modules/development/nixvim/plugins/treesitter.nix b/modules/development/nixvim/plugins/treesitter.nix new file mode 100644 index 0000000..035ac7a --- /dev/null +++ b/modules/development/nixvim/plugins/treesitter.nix @@ -0,0 +1,19 @@ +{ config, lib, ... }: + +# Treesitter - Syntax highlighting and parsing (nvim-treesitter) +{ + config.programs.nixvim.plugins.treesitter = lib.mkIf config.programs.nixvim.enable { + enable = true; + folding = { + enable = true; + }; + settings = { + highlight = { + enable = true; + }; + indent = { + enable = true; + }; + }; + }; +} diff --git a/modules/development/nixvim/plugins/web-devicons.nix b/modules/development/nixvim/plugins/web-devicons.nix new file mode 100644 index 0000000..3c6ad86 --- /dev/null +++ b/modules/development/nixvim/plugins/web-devicons.nix @@ -0,0 +1,8 @@ +{ config, lib, ... }: + +# Web-devicons - File icons for various file types (nvim-web-devicons) +{ + config.programs.nixvim.plugins.web-devicons = lib.mkIf config.programs.nixvim.enable { + enable = true; + }; +} diff --git a/modules/development/nixvim/plugins/which-key.nix b/modules/development/nixvim/plugins/which-key.nix new file mode 100644 index 0000000..18018e7 --- /dev/null +++ b/modules/development/nixvim/plugins/which-key.nix @@ -0,0 +1,21 @@ +{ config, lib, ... }: + +# Which-key - Popup for keybindings (which-key.nvim) +{ + config.programs.nixvim.plugins.which-key = lib.mkIf config.programs.nixvim.enable { + enable = true; + settings = { + plugins = { + marks = true; + registers = true; + spelling = { + enabled = true; + suggestions = 20; + }; + }; + win = { + border = "single"; + }; + }; + }; +} |
