{ config, pkgs, lib, ... }: { options.neovim = { enable = lib.mkEnableOption "Enables neovim"; languages = { c.enable = lib.mkEnableOption "Enables c support"; go.enable = lib.mkEnableOption "Enables go support"; nix.enable = lib.mkEnableOption "Enables nix support"; rust.enable = lib.mkEnableOption "Enables rust support"; typescript.enable = lib.mkEnableOption "Enables typescript support"; }; themes = { catppuccin.enable = lib.mkEnableOption "Enables catppuccin theme"; }; plugins = { comments.enable = lib.mkEnableOption "Enables nvim-comment"; fugitive.enable = lib.mkEnableOption "Enables git-fugitive"; lualine.enable = lib.mkEnableOption "Enables lualine"; luasnip.enable = lib.mkEnableOption "Enables luasnip snippets"; nvimcmp.enable = lib.mkEnableOption "Enables nvim completion"; telescope = { enable = lib.mkEnableOption "Enables telescope"; fzf.enable = lib.mkEnableOption "Enables telescope-fzf"; }; treesitter.enable = lib.mkEnableOption "Enables treesitter"; wiki.enable = lib.mkEnableOption "Enables a wiki"; }; }; # imports = [ # ./plugin/lsp.nix # ./plugin/nvimcmp.nix # ./plugin/telescope.nix # ./plugin/treesitter.nix # ]; config = lib.mkIf config.neovim.enable { home.sessionVariables = { EDITOR = "nvim"; VISUAL = "nvim"; }; programs.nixvim = { enable = true; viAlias = true; vimAlias = true; vimdiffAlias = true; }; # extraLuaConfig = '' # ${builtins.readFile ./options.lua} # ''; # vim.g.rust_recommended_style = 0 programs.nixvim.colorschemes = with config.neovim.themes; { catppuccin = lib.mkIf catppuccin.enable { enable = true; flavour = "mocha"; integrations.vimwiki = lib.mkIf wiki.enable true; } }; programs.nixvim.plugins = with config.neovim.plugins; { comment.enable = comments.enable; fugitive.enable = fugitive.enable; lualine = lib.mkIf lualine.enable { enable = true; icons_enabled = true; }; web-devicons.enable = lualine.enable; luasnip.enable = luasnip.enable; friendly-snippets.enable = luasnip.enable; cmp = { enable = nvimcmp.enable; autoEnableSources = true; settings.sources = [ { name = "nvim_lsp"; } { name = "path"; } { name = "buffer"; } ] + lib.options luasnip.enable { name = "cmp-luasnip" }; }; telescope.enable = telescope.enable; # telescope.fzf.enable = lib.mkEnableOption "Enables telescope-fzf"; treesitter.enable = treesiter.enable; vimwiki = { enable = wiki.enable; list = [ { path = "${config.xdg.userDirs.documents}/wiki"; links_space_char = "_"; ext = ".md"; syntax = "markdown"; } ]; }; }; programs.nixvim.plugins = with config.neovim.languages; { nix.enable = nix.enable; rustaceanvim.enable = rust.enable; typsecript-tools.enable = typescript.enable; }; programs.nixvim.lsp = { enable = true; servers = with config.neovim.languages; { clangd.enable = c.enable; gopls.enable = go.enable; nil_ls.enable = nix.enable; rust_analyzer.enable = rust.enable; tsserver.enable = typescript.enable; }; }; }; }