aboutsummaryrefslogtreecommitdiffstats
path: root/modules/programs/nixvim/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'modules/programs/nixvim/plugins')
-rw-r--r--modules/programs/nixvim/plugins/cmp.nix37
-rw-r--r--modules/programs/nixvim/plugins/comment.nix23
-rw-r--r--modules/programs/nixvim/plugins/default.nix20
-rw-r--r--modules/programs/nixvim/plugins/gitsigns.nix8
-rw-r--r--modules/programs/nixvim/plugins/indent-blankline.nix14
-rw-r--r--modules/programs/nixvim/plugins/lsp.nix91
-rw-r--r--modules/programs/nixvim/plugins/lualine.nix90
-rw-r--r--modules/programs/nixvim/plugins/luasnip.nix8
-rw-r--r--modules/programs/nixvim/plugins/noice.nix19
-rw-r--r--modules/programs/nixvim/plugins/nvim-tree.nix44
-rw-r--r--modules/programs/nixvim/plugins/telescope.nix85
-rw-r--r--modules/programs/nixvim/plugins/treesitter.nix19
-rw-r--r--modules/programs/nixvim/plugins/web-devicons.nix8
-rw-r--r--modules/programs/nixvim/plugins/which-key.nix21
14 files changed, 487 insertions, 0 deletions
diff --git a/modules/programs/nixvim/plugins/cmp.nix b/modules/programs/nixvim/plugins/cmp.nix
new file mode 100644
index 0000000..683e0d3
--- /dev/null
+++ b/modules/programs/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/programs/nixvim/plugins/comment.nix b/modules/programs/nixvim/plugins/comment.nix
new file mode 100644
index 0000000..cc1b9cb
--- /dev/null
+++ b/modules/programs/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/programs/nixvim/plugins/default.nix b/modules/programs/nixvim/plugins/default.nix
new file mode 100644
index 0000000..a263c51
--- /dev/null
+++ b/modules/programs/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/programs/nixvim/plugins/gitsigns.nix b/modules/programs/nixvim/plugins/gitsigns.nix
new file mode 100644
index 0000000..ea99eba
--- /dev/null
+++ b/modules/programs/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/programs/nixvim/plugins/indent-blankline.nix b/modules/programs/nixvim/plugins/indent-blankline.nix
new file mode 100644
index 0000000..eb2674a
--- /dev/null
+++ b/modules/programs/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/programs/nixvim/plugins/lsp.nix b/modules/programs/nixvim/plugins/lsp.nix
new file mode 100644
index 0000000..dbe66a8
--- /dev/null
+++ b/modules/programs/nixvim/plugins/lsp.nix
@@ -0,0 +1,91 @@
+{ config, lib, ... }:
+
+# LSP - Language Server Protocol configuration (nvim-lspconfig)
+{
+ config.programs.nixvim = lib.mkIf config.programs.nixvim.enable {
+ plugins.lsp = {
+ enable = true;
+ inlayHints = true;
+ autoLoad = true;
+ keymaps.lspBuf = {
+ K = "hover";
+ gD = "references";
+ gd = "definition";
+ gi = "implementation";
+ gt = "type_definition";
+ };
+ servers = {
+ nil_ls = {
+ enable = true;
+ };
+ lua_ls = {
+ enable = true;
+ package = null;
+ };
+ nixd = {
+ enable = true;
+ package = null;
+ };
+ pyright = {
+ enable = true;
+ package = null;
+ };
+ ts_ls = {
+ enable = true;
+ package = null;
+ };
+ clangd = {
+ enable = true;
+ package = null;
+ };
+ jsonls = {
+ enable = true;
+ package = null;
+ };
+ yamlls = {
+ enable = true;
+ package = null;
+ };
+ bash-language-server = {
+ enable = true;
+ package = null;
+ };
+ gopls = {
+ enable = true;
+ package = null;
+ };
+ };
+ };
+
+ diagnostic = {
+ settings = {
+ virtual_text = false;
+ signs = true;
+ underline = true;
+ update_in_insert = false;
+ float = {
+ border = "rounded";
+ source = true; # Show which LSP the diagnostic is from
+ header = "";
+ prefix = "";
+ };
+ };
+ };
+
+ # Show diagnostics float on cursor hold
+ autoCmd = [
+ {
+ event = [ "CursorHold" ];
+ pattern = "*";
+ callback.__raw = ''
+ function()
+ vim.diagnostic.open_float(nil, { focus = false })
+ end
+ '';
+ }
+ ];
+
+ # How long before CursorHold fires (in ms)
+ opts.updatetime = 500;
+ };
+}
diff --git a/modules/programs/nixvim/plugins/lualine.nix b/modules/programs/nixvim/plugins/lualine.nix
new file mode 100644
index 0000000..72f34be
--- /dev/null
+++ b/modules/programs/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/programs/nixvim/plugins/luasnip.nix b/modules/programs/nixvim/plugins/luasnip.nix
new file mode 100644
index 0000000..60571e9
--- /dev/null
+++ b/modules/programs/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/programs/nixvim/plugins/noice.nix b/modules/programs/nixvim/plugins/noice.nix
new file mode 100644
index 0000000..61acf2a
--- /dev/null
+++ b/modules/programs/nixvim/plugins/noice.nix
@@ -0,0 +1,19 @@
+{ config, lib, ... }:
+
+# Noice - Modern UI for Neovim (cmdline, popupmenu, messages)
+{
+ config.programs.nixvim.plugins.noice = lib.mkIf config.programs.nixvim.enable {
+ enable = true;
+ cmdline = {
+ enabled = true;
+ view = "cmdline_popup";
+ };
+ popupmenu = {
+ enabled = true;
+ backend = "cmp";
+ };
+ presets = {
+ command_palette = true;
+ };
+ };
+}
diff --git a/modules/programs/nixvim/plugins/nvim-tree.nix b/modules/programs/nixvim/plugins/nvim-tree.nix
new file mode 100644
index 0000000..2ad6570
--- /dev/null
+++ b/modules/programs/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/programs/nixvim/plugins/telescope.nix b/modules/programs/nixvim/plugins/telescope.nix
new file mode 100644
index 0000000..b9678fc
--- /dev/null
+++ b/modules/programs/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/programs/nixvim/plugins/treesitter.nix b/modules/programs/nixvim/plugins/treesitter.nix
new file mode 100644
index 0000000..035ac7a
--- /dev/null
+++ b/modules/programs/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/programs/nixvim/plugins/web-devicons.nix b/modules/programs/nixvim/plugins/web-devicons.nix
new file mode 100644
index 0000000..3c6ad86
--- /dev/null
+++ b/modules/programs/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/programs/nixvim/plugins/which-key.nix b/modules/programs/nixvim/plugins/which-key.nix
new file mode 100644
index 0000000..18018e7
--- /dev/null
+++ b/modules/programs/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";
+ };
+ };
+ };
+}