{ config, pkgs, lib, ... }: with lib; let cfg = config.custom.neovim; in { options.custom.neovim = { enable = mkEnableOption "Custom Neovim"; colorscheme = mkOption { type = types.str; default = "unokai"; }; hostname = mkOption { type = types.str; }; }; config = mkIf cfg.enable { programs.neovim = { enable = true; defaultEditor = true; viAlias = true; vimAlias = false; vimdiffAlias = true; plugins = with pkgs.vimPlugins; [ { plugin = blink-cmp; type = "lua"; config = '' require("blink.cmp").setup({ keymap = { preset = "default", [""] = { "select_and_accept", "snippet_forward", "fallback" }, [""] = { "snippet_backward", "fallback" }, }, }) ''; } { plugin = conform-nvim; type = "lua"; config = '' require("conform").setup({ formatters_by_ft = { lua = { "stylua" }, javascript = { "prettierd" }, nix = { "nixfmt" }, python = { "black" }, php = { "php_cs_fixer" }, zig = { "zigfmt" }, css = { "prettierd" }, scss = { "prettierd" }, less = { "prettierd" }, blade = { "blade-formatter" }, go = { "go fmt" }, }, }) vim.api.nvim_create_autocmd("BufWritePre", { pattern = "*", callback = function(args) require("conform").format({ bufnr = args.buf }) end, }) vim.keymap.set("n", "c", function() require("conform").format({ lsp_fallback = true, async = true, timeout_ms = 500, }) end, { desc = "conform format" }) ''; } # (codecompanion-nvim.overrideAttrs (_: { # src = pkgs.fetchFromGitHub { # owner = "olimorris"; # repo = "codecompanion.nvim"; # tag = "v18.2.1"; # sha256 = "sha256-94uX1Ie+BiKSPGCYcUwoZ6DZwSz8tUxaNsa+xTv1ejw="; # }; # })) kanagawa-nvim leap-nvim { plugin = mini-icons; type = "lua"; config = ''require("mini.icons").setup()''; } { plugin = nvim-treesitter.withAllGrammars; type = "lua"; config = '' require("nvim-treesitter").setup({ highlight = { enable = true, additional_vim_regex_highlighting = false, }, indent = { enable = true }, refactor = { highlight_definitions = { enable = true }, }, }) ''; } { plugin = nvim-treesitter-context; type = "lua"; config = ''require("treesitter-context").setup()''; } { plugin = nvim-treesitter-textobjects; # type = "lua"; # config = '' # vim.g.no_plugin_maps = true # require("treesitter-textobjects").setup() # ''; } nvim-lspconfig { plugin = nvim-surround; type = "lua"; config = ''require("nvim-surround").setup()''; } { plugin = nvim-web-devicons; type = "lua"; config = ''require("nvim-web-devicons").setup()''; } { plugin = oil-nvim; type = "lua"; config = '' require("oil").setup() vim.keymap.set("n", "o", "Oil", { desc = "Oil" }) ''; } phpactor { plugin = render-markdown-nvim; type = "lua"; config = ''require("render-markdown").setup()''; } snacks-nvim tokyonight-nvim { plugin = undotree; type = "lua"; config = ''vim.keymap.set("n", "u", vim.cmd.UndotreeToggle, { desc = "undotree" })''; } { plugin = vimtex; type = "lua"; config = '' vim.g.vimtex_view_method = "zathura" vim.g.vimtex_compiler_method = "latexmk" ''; } { plugin = which-key-nvim; type = "lua"; config = ''require("which-key").setup()''; } ]; extraConfig = '' colorscheme ${cfg.colorscheme} ''; extraLuaConfig = '' ${builtins.readFile ./settings.lua} ${builtins.replaceStrings [ "@HOSTNAME@" ] [ cfg.hostname ] (builtins.readFile ./plugins.lua)} require("custom") ''; }; }; }