From 45548c8f5fbf74b94b754e4fd3ef3cdaf4393063 Mon Sep 17 00:00:00 2001 From: Roel de Cort Date: Tue, 23 Apr 2024 21:58:57 +0200 Subject: [PATCH] add some more plugins --- config/default.nix | 15 +++- config/plugins/cmp/cmp-copilot.nix | 17 ++++ config/plugins/cmp/cmp.nix | 122 +++++++++++++++++++++++++++ config/plugins/cmp/lspkind.nix | 12 +++ config/plugins/editor/illuminate.nix | 13 +++ config/plugins/editor/undotree.nix | 20 +++++ config/plugins/lsp/fidget.nix | 99 ++++++++++++++++++++++ config/plugins/snippets/luasnip.nix | 16 ++++ config/plugins/ui/lualine.nix | 103 ++++++++++++++++++++++ config/plugins/utils/whichkey.nix | 5 ++ flake.lock | 42 ++++----- 11 files changed, 440 insertions(+), 24 deletions(-) create mode 100644 config/plugins/cmp/cmp-copilot.nix create mode 100644 config/plugins/cmp/cmp.nix create mode 100644 config/plugins/cmp/lspkind.nix create mode 100644 config/plugins/editor/illuminate.nix create mode 100644 config/plugins/editor/undotree.nix create mode 100644 config/plugins/lsp/fidget.nix create mode 100644 config/plugins/snippets/luasnip.nix create mode 100644 config/plugins/ui/lualine.nix create mode 100644 config/plugins/utils/whichkey.nix diff --git a/config/default.nix b/config/default.nix index c5c75ac..69754f6 100644 --- a/config/default.nix +++ b/config/default.nix @@ -1,29 +1,38 @@ -{ config, lib, ...}: { - +_: { imports = [ # General Configuration ./settings.nix ./keymaps.nix - + # Themes ./plugins/themes/default.nix + # Completion + ./plugins/cmp/cmp.nix + ./plugins/cmp/cmp-copilot.nix + ./plugins/cmp/lspkind.nix + # Editor plugins and configurations ./plugins/editor/neo-tree.nix ./plugins/editor/treesitter.nix + ./plugins/editor/undotree.nix + ./plugins/editor/illuminate.nix # UI plugins ./plugins/ui/bufferline.nix + ./plugins/ui/lualine.nix # LSP ./plugins/lsp/lsp.nix ./plugins/lsp/conform.nix ./plugins/lsp/none-ls.nix + ./plugins/lsp/fidget.nix # Git ./plugins/git/lazygit.nix # Utils ./plugins/utils/telescope.nix + ./plugins/utils/whichkey.nix ]; } diff --git a/config/plugins/cmp/cmp-copilot.nix b/config/plugins/cmp/cmp-copilot.nix new file mode 100644 index 0000000..f595b09 --- /dev/null +++ b/config/plugins/cmp/cmp-copilot.nix @@ -0,0 +1,17 @@ +{ + plugins.copilot-cmp = { + enable = true; + }; + plugins.copilot-lua = { + enable = true; + suggestion = {enabled = false;}; + panel = {enabled = false;}; + }; + + extraConfigLua = '' + require("copilot").setup({ + suggestion = { enabled = false }, + panel = { enabled = false }, + }) + ''; +} diff --git a/config/plugins/cmp/cmp.nix b/config/plugins/cmp/cmp.nix new file mode 100644 index 0000000..2affabd --- /dev/null +++ b/config/plugins/cmp/cmp.nix @@ -0,0 +1,122 @@ +{ + plugins = { + cmp-emoji = {enable = true;}; + cmp = { + enable = true; + settings = { + autoEnableSources = true; + experimental = {ghost_text = true;}; + performance = { + debounce = 60; + fetchingTimeout = 200; + maxViewEntries = 30; + }; + snippet = {expand = "luasnip";}; + formatting = {fields = ["kind" "abbr" "menu"];}; + sources = [ + {name = "git";} + {name = "nvim_lsp";} + {name = "emoji";} + { + name = "buffer"; # text within current buffer + option.get_bufnrs.__raw = "vim.api.nvim_list_bufs"; + keywordLength = 3; + } + {name = "copilot";} + { + name = "path"; # file system paths + keywordLength = 3; + } + { + name = "luasnip"; # snippets + keywordLength = 3; + } + ]; + + window = { + completion = {border = "solid";}; + documentation = {border = "solid";}; + }; + + mapping = { + "" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; + "" = "cmp.mapping.select_next_item()"; + "" = "cmp.mapping.select_prev_item()"; + "" = "cmp.mapping.abort()"; + "" = "cmp.mapping.scroll_docs(-4)"; + "" = "cmp.mapping.scroll_docs(4)"; + "" = "cmp.mapping.complete()"; + "" = "cmp.mapping.confirm({ select = true })"; + "" = "cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true })"; + }; + }; + }; + cmp-nvim-lsp = {enable = true;}; # lsp + cmp-buffer = {enable = true;}; + cmp-path = {enable = true;}; # file system paths + cmp_luasnip = {enable = true;}; # snippets + cmp-cmdline = {enable = false;}; # autocomplete for cmdline + }; + extraConfigLua = '' + luasnip = require("luasnip") + kind_icons = { + Text = "󰊄", + Method = "", + Function = "󰡱", + Constructor = "", + Field = "", + Variable = "󱀍", + Class = "", + Interface = "", + Module = "󰕳", + Property = "", + Unit = "", + Value = "", + Enum = "", + Keyword = "", + Snippet = "", + Color = "", + File = "", + Reference = "", + Folder = "", + EnumMember = "", + Constant = "", + Struct = "", + Event = "", + Operator = "", + TypeParameter = "", + } + + local cmp = require'cmp' + + -- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore). + cmp.setup.cmdline({'/', "?" }, { + sources = { + { name = 'buffer' } + } + }) + + -- Set configuration for specific filetype. + cmp.setup.filetype('gitcommit', { + sources = cmp.config.sources({ + { name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it. + }, { + { name = 'buffer' }, + }) + }) + + -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). + cmp.setup.cmdline(':', { + sources = cmp.config.sources({ + { name = 'path' } + }, { + { name = 'cmdline' } + }), + -- formatting = { + -- format = function(_, vim_item) + -- vim_item.kind = cmdIcons[vim_item.kind] or "FOO" + -- return vim_item + -- end + -- } + }) ''; +} diff --git a/config/plugins/cmp/lspkind.nix b/config/plugins/cmp/lspkind.nix new file mode 100644 index 0000000..69e8f78 --- /dev/null +++ b/config/plugins/cmp/lspkind.nix @@ -0,0 +1,12 @@ +{ + plugins.lspkind = { + enable = true; + symbolMap = { + Copilot = ""; + }; + extraOptions = { + maxwidth = 50; + ellipsis_char = "..."; + }; + }; +} diff --git a/config/plugins/editor/illuminate.nix b/config/plugins/editor/illuminate.nix new file mode 100644 index 0000000..7bfedb7 --- /dev/null +++ b/config/plugins/editor/illuminate.nix @@ -0,0 +1,13 @@ +{ + plugins.illuminate = { + enable = true; + underCursor = false; + filetypesDenylist = [ + "Outline" + "TelescopePrompt" + "alpha" + "harpoon" + "reason" + ]; + }; +} diff --git a/config/plugins/editor/undotree.nix b/config/plugins/editor/undotree.nix new file mode 100644 index 0000000..1d6923c --- /dev/null +++ b/config/plugins/editor/undotree.nix @@ -0,0 +1,20 @@ +{ + plugins.undotree = { + enable = true; + settings = { + autoOpenDiff = true; + focusOnToggle = true; + }; + }; + keymaps = [ + { + mode = "n"; + key = "ut"; + action = "UndotreeToggle"; + options = { + silent = true; + desc = "Undotree"; + }; + } + ]; +} diff --git a/config/plugins/lsp/fidget.nix b/config/plugins/lsp/fidget.nix new file mode 100644 index 0000000..868f386 --- /dev/null +++ b/config/plugins/lsp/fidget.nix @@ -0,0 +1,99 @@ +{ + plugins.fidget = { + enable = true; + logger = { + level = "warn"; # “off”, “error”, “warn”, “info”, “debug”, “trace” + floatPrecision = 0.01; # Limit the number of decimals displayed for floats + }; + progress = { + pollRate = 0; # How and when to poll for progress messages + suppressOnInsert = true; # Suppress new messages while in insert mode + ignoreDoneAlready = false; # Ignore new tasks that are already complete + ignoreEmptyMessage = false; # Ignore new tasks that don't contain a message + clearOnDetach = + # Clear notification group when LSP server detaches + '' + function(client_id) + local client = vim.lsp.get_client_by_id(client_id) + return client and client.name or nil + end + ''; + notificationGroup = + # How to get a progress message's notification group key + '' + function(msg) return msg.lsp_client.name end + ''; + ignore = []; # List of LSP servers to ignore + lsp = { + progressRingbufSize = 0; # Configure the nvim's LSP progress ring buffer size + }; + display = { + renderLimit = 16; # How many LSP messages to show at once + doneTtl = 3; # How long a message should persist after completion + doneIcon = "✔"; # Icon shown when all LSP progress tasks are complete + doneStyle = "Constant"; # Highlight group for completed LSP tasks + progressTtl = "math.huge"; # How long a message should persist when in progress + progressIcon = { + pattern = "dots"; + period = 1; + }; # Icon shown when LSP progress tasks are in progress + progressStyle = "WarningMsg"; # Highlight group for in-progress LSP tasks + groupStyle = "Title"; # Highlight group for group name (LSP server name) + iconStyle = "Question"; # Highlight group for group icons + priority = 30; # Ordering priority for LSP notification group + skipHistory = true; # Whether progress notifications should be omitted from history + formatMessage = '' + require ("fidget.progress.display").default_format_message + ''; # How to format a progress message + formatAnnote = '' + function (msg) return msg.title end + ''; # How to format a progress annotation + formatGroupName = '' + function (group) return tostring (group) end + ''; # How to format a progress notification group's name + overrides = { + rust_analyzer = { + name = "rust-analyzer"; + }; + }; # Override options from the default notification config + }; + }; + notification = { + pollRate = 10; # How frequently to update and render notifications + filter = "info"; # “off”, “error”, “warn”, “info”, “debug”, “trace” + historySize = 128; # Number of removed messages to retain in history + overrideVimNotify = true; + redirect = '' + function(msg, level, opts) + if opts and opts.on_open then + return require("fidget.integration.nvim-notify").delegate(msg, level, opts) + end + end + ''; + configs = { + default = "require('fidget.notification').default_config"; + }; + + window = { + normalHl = "Comment"; + winblend = 0; + border = "none"; # none, single, double, rounded, solid, shadow + zindex = 45; + maxWidth = 0; + maxHeight = 0; + xPadding = 1; + yPadding = 0; + align = "bottom"; + relative = "editor"; + }; + view = { + stackUpwards = true; # Display notification items from bottom to top + iconSeparator = " "; # Separator between group name and icon + groupSeparator = "---"; # Separator between notification groups + groupSeparatorHl = + # Highlight group used for group separator + "Comment"; + }; + }; + }; +} diff --git a/config/plugins/snippets/luasnip.nix b/config/plugins/snippets/luasnip.nix new file mode 100644 index 0000000..c448195 --- /dev/null +++ b/config/plugins/snippets/luasnip.nix @@ -0,0 +1,16 @@ +#TODO: Find out why we get an error when we have luasnip enabled, disabled for now! +{pkgs, ...}: { + plugins.luasnip = { + enable = false; + extraConfig = { + enable_autosnippets = true; + store_selection_keys = ""; + }; + fromVscode = [ + { + lazyLoad = true; + paths = "${pkgs.vimPlugins.friendly-snippets}"; + } + ]; + }; +} diff --git a/config/plugins/ui/lualine.nix b/config/plugins/ui/lualine.nix new file mode 100644 index 0000000..bfcef27 --- /dev/null +++ b/config/plugins/ui/lualine.nix @@ -0,0 +1,103 @@ +_: { + plugins.lualine = { + enable = true; + globalstatus = true; + disabledFiletypes = { + statusline = ["dashboard" "alpha"]; + }; + theme = { + normal = { + a = { + bg = "#b4befe"; + fg = "#1c1d21"; + }; + b = { + bg = "nil"; + }; + c = { + bg = "nil"; + }; + z = { + bg = "nil"; + }; + y = { + bg = "nil"; + }; + }; + }; + sections = { + lualine_a = [ + { + name = "mode"; + fmt = "string.lower"; + color = { + fg = "none"; + bg = "none"; + }; + } + ]; + lualine_b = [ + { + name = "branch"; + icon = ""; + color = { + fg = "none"; + bg = "none"; + }; + } + "diff" + ]; + lualine_c = [ + { + name = "diagnostic"; + extraConfig = { + symbols = { + error = " "; + warn = " "; + info = " "; + hint = "󰝶 "; + }; + }; + color = { + fg = "none"; + bg = "none"; + }; + } + ]; + lualine_x = [ + { + name = "filetype"; + extraConfig = { + icon_only = true; + }; + } + ]; + lualine_y = [ + { + name = "filename"; + extraConfig = { + symbols = { + modified = ""; + readonly = ""; + unnamed = ""; + }; + }; + color = { + fg = "none"; + bg = "none"; + }; + separator.left = ""; + } + ]; + lualine_z = [ + { + name = "location"; + color = { + fg = "none"; + bg = "none"; + }; + } + ]; + }; + }; +} diff --git a/config/plugins/utils/whichkey.nix b/config/plugins/utils/whichkey.nix new file mode 100644 index 0000000..f075fae --- /dev/null +++ b/config/plugins/utils/whichkey.nix @@ -0,0 +1,5 @@ +{ + plugins.which-key = { + enable = true; + }; +} diff --git a/flake.lock b/flake.lock index aeba10b..18fd3e0 100644 --- a/flake.lock +++ b/flake.lock @@ -9,11 +9,11 @@ ] }, "locked": { - "lastModified": 1711099426, - "narHash": "sha256-HzpgM/wc3aqpnHJJ2oDqPBkNsqWbW0WfWUO8lKu8nGk=", + "lastModified": 1713532798, + "narHash": "sha256-wtBhsdMJA3Wa32Wtm1eeo84GejtI43pMrFrmwLXrsEc=", "owner": "numtide", "repo": "devshell", - "rev": "2d45b54ca4a183f2fdcf4b19c895b64fbf620ee8", + "rev": "12e914740a25ea1891ec619bb53cf5e6ca922e40", "type": "github" }, "original": { @@ -212,11 +212,11 @@ ] }, "locked": { - "lastModified": 1712759992, - "narHash": "sha256-2APpO3ZW4idlgtlb8hB04u/rmIcKA8O7pYqxF66xbNY=", + "lastModified": 1713732794, + "narHash": "sha256-AYCofb8Zu4Mbc1lHDtju/uxeARawRijmOueAqEMEfMU=", "owner": "nix-community", "repo": "home-manager", - "rev": "31357486b0ef6f4e161e002b6893eeb4fafc3ca9", + "rev": "670d9ecc3e46a6e3265c203c2d136031a3d3548e", "type": "github" }, "original": { @@ -233,11 +233,11 @@ ] }, "locked": { - "lastModified": 1711763326, - "narHash": "sha256-sXcesZWKXFlEQ8oyGHnfk4xc9f2Ip0X/+YZOq3sKviI=", + "lastModified": 1713543876, + "narHash": "sha256-olEWxacm1xZhAtpq+ZkEyQgR4zgfE7ddpNtZNvubi3g=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "36524adc31566655f2f4d55ad6b875fb5c1a4083", + "rev": "9e7c20ffd056e406ddd0276ee9d89f09c5e5f4ed", "type": "github" }, "original": { @@ -248,11 +248,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1712791164, - "narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=", + "lastModified": 1713714899, + "narHash": "sha256-+z/XjO3QJs5rLE5UOf015gdVauVRQd2vZtsFkaXBq2Y=", "owner": "nixos", "repo": "nixpkgs", - "rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5", + "rev": "6143fc5eeb9c4f00163267708e26191d1e918932", "type": "github" }, "original": { @@ -309,11 +309,11 @@ "pre-commit-hooks": "pre-commit-hooks" }, "locked": { - "lastModified": 1713008785, - "narHash": "sha256-fblaj6/83OQYrD1UHBjLapxjGQaC4edouX4g2X8CVhk=", + "lastModified": 1713856119, + "narHash": "sha256-TfNc8vxF7IaRhTlMgOeUN01y7QoBx50MYmGU1sSU6Vw=", "owner": "nix-community", "repo": "nixvim", - "rev": "21c233919d747d3375e3a173b65f7f26ccf01256", + "rev": "c826d146c65bfa8164f31931cf54278b99f5a3a0", "type": "github" }, "original": { @@ -337,11 +337,11 @@ ] }, "locked": { - "lastModified": 1712897695, - "narHash": "sha256-nMirxrGteNAl9sWiOhoN5tIHyjBbVi5e2tgZUgZlK3Y=", + "lastModified": 1713775815, + "narHash": "sha256-Wu9cdYTnGQQwtT20QQMg7jzkANKQjwBD9iccfGKkfls=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "40e6053ecb65fcbf12863338a6dcefb3f55f1bf8", + "rev": "2ac4dcbf55ed43f3be0bae15e181f08a57af24a4", "type": "github" }, "original": { @@ -361,11 +361,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1712897695, - "narHash": "sha256-nMirxrGteNAl9sWiOhoN5tIHyjBbVi5e2tgZUgZlK3Y=", + "lastModified": 1713775815, + "narHash": "sha256-Wu9cdYTnGQQwtT20QQMg7jzkANKQjwBD9iccfGKkfls=", "owner": "cachix", "repo": "pre-commit-hooks.nix", - "rev": "40e6053ecb65fcbf12863338a6dcefb3f55f1bf8", + "rev": "2ac4dcbf55ed43f3be0bae15e181f08a57af24a4", "type": "github" }, "original": {