{ pkgs, ... }: { programs.nixvim = { enable = true; #TODO floaterm # a snippet engine plugins.luasnip = { enable = true; }; # TODO lsp_signature idk if it exists #plugins.lsp_signature = { # enable = true; #}; plugins.none-ls = { enable = true; sources = { code_actions = { statix.enable = true; gitsigns.enable = true; }; diagnostics = { statix.enable = true; deadnix.enable = true; pylint.enable = true; checkstyle.enable = true; }; formatting = { alejandra.enable = true; stylua.enable = true; shfmt.enable = true; nixpkgs_fmt.enable = true; google_java_format.enable = false; prettier = { enable = true; disableTsServerFormatter = true; }; }; completion = { luasnip.enable = true; spell.enable = true; }; }; }; plugins.lsp = { enable = true; servers = { # Average webdev LSPs tsserver.enable = true; # TS/JS cssls.enable = true; # CSS tailwindcss.enable = true; # TailwindCSS html.enable = true; # HTML astro.enable = true; # AstroJS phpactor.enable = true; # PHP svelte.enable = false; # Svelte vuels.enable = false; # Vue pyright.enable = true; # Python marksman.enable = true; # Markdown nil-ls.enable = true; # Nix dockerls.enable = true; # Docker bashls.enable = true; # Bash clangd.enable = true; # C/C++ csharp-ls.enable = true; # C# yamlls.enable = true; # YAML lua-ls = { # Lua enable = true; settings.telemetry.enable = false; }; # Rust rust-analyzer = { enable = true; installRustc = false; # disabled so devshells work installCargo = false; # disabled so devsellsh work }; }; }; # Highlight word under cursor plugins.illuminate = { enable = true; underCursor = false; filetypesDenylist = [ "Outline" "TelescopePrompt" "alpha" "harpoon" "reason" ]; }; # Dashboard plugins.alpha = { enable = true; theme = "dashboard"; iconsEnabled = true; }; plugins.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 = "nvim_lsp"; } { name = "emoji"; } { name = "buffer"; # text within current buffer option.get_bufnrs.__raw = "vim.api.nvim_list_bufs"; keywordLength = 3; } # { name = "copilot"; } # enable/disable 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 })"; }; }; }; plugins.cmp-nvim-lsp = { enable = true; # LSP }; plugins.cmp-buffer = { enable = true; }; plugins.cmp-path = { enable = true; # file system paths }; plugins.cmp_luasnip = { enable = true; # snippets }; # TODO gen.nvim not in nixvim # highlites colors (like #FFF) plugins.nvim-colorizer = { enable = true; }; # todo-comments plugins.todo-comments.enable = true; # TODO feline-nvim and theme for it # inline git blame plugins.gitsigns = { enable = true; settings = { current_line_blame = true; trouble = true; }; }; # inline error display plugins.trouble = { enable = true; }; #plugins.nvimtree.enable = true; # when adding " or any letter the selected word gets wrapped in it plugins.surround.enable = true; # file explorer plugins.chadtree = { enable = true; }; # status bar plugins.lualine = { enable = true; }; # a cool summary searcher plugins.navbuddy.enable = true; # a completion engine using LSP # languages plugins.rustaceanvim.enable = true; plugins.nix.enable = true; keymaps = [ { key = "v"; action = "CHADopen --always-focus"; } { key = "e"; action = "CHADopen"; } ]; opts = { number = true; relativenumber = true; }; globals.mapleader = " "; # TODO shades of purple colorscheme #extraPlugins = [ pkgs.vimPlugins.gruvbox ]; #colorscheme = "gruvbox"; # extraPlugins = [ # pkgs.vimUtils.buildVimPlugin # { # pname = "shades-of-purple"; # version = "1.1.1"; # src = pkgs.fetchFromGitHub { # owner = "Rigellute"; # repo = "shades-of-purple.vim"; # rev = "e806d38190a6a2e8b9244824c2953d6567f141f3"; # hash = "sha256-iiGASgVlIXnnUNBlp9viKgDBfHiOP5P/yJx9XyELT9g="; # }; # buildScript = ":"; # } # ]; }; }