{ 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} # ''; 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 = lib.options luasnip.enable { name = "cmp-luasnip" }; }; # 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"; # # # wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ # { # plugin = vimwiki; # type = "lua"; # config = '' # vim.g.vimwiki_list = { # { # path = '${config.xdg.userDirs.documents}/wiki', # links_space_char = '_', # ext = '.md', # syntax = 'markdown', # } # } # ''; # } # ]); } # extraPackages = with pkgs; [ # (lib.mkIf config.neovim.languages.c.enable libclang) # (lib.mkIf config.neovim.languages.go.enable gopls) # (lib.mkIf config.neovim.languages.nix.enable nil) # (lib.mkIf config.neovim.languages.rust.enable rust-analyzer) # ]; # # # Additional packages are added through imports # plugins = let # lopts = lib.lists.optionals; # cfgp = config.neovim.plugins; # cfgl = config.neovim.languages; # cfgt = config.neovim.themes; # # nix-pkg = lopts cfgl.nix.enable (with pkgs.vimPlugins; [ # vim-nix # ]); # # rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [ # { # plugin = rustaceanvim; # type = "lua"; # config = '' # vim.g.rust_recommended_style = 0 # ''; # } # ]); # # go-pkg = lopts cfgl.go.enable (with pkgs.vimPlugins; [ # go-nvim # ]); # # typescript-pkg = lopts cfgl.typescript.enable (with pkgs.vimPlugins; [ # { # plugin = typescript-tools-nvim; # type = "lua"; # config = '' # require("typescript-tools").setup {} # ''; # } # ]); # }; }; }