{lib}: with lib; let # Plugin must be same as input name from flake.nix availablePlugins = [ # TODO: sort by category "nvim-treesitter-context" "gitsigns-nvim" "plenary-nvim" "nvim-lspconfig" "nvim-treesitter" "lspsaga" "lspkind" "nvim-lightbulb" "lsp-signature" "nvim-tree-lua" "nvim-bufferline-lua" "lualine" "nvim-compe" "nvim-autopairs" "nvim-ts-autotag" "nvim-web-devicons" "tokyonight" "bufdelete-nvim" "nvim-cmp" "cmp-nvim-lsp" "cmp-buffer" "cmp-vsnip" "cmp-path" "cmp-treesitter" "crates-nvim" "vim-vsnip" "nvim-code-action-menu" "trouble" "null-ls" "which-key" "indent-blankline" "nvim-cursorline" "sqls-nvim" "glow-nvim" "telescope" "rust-tools" "onedark" "catppuccin" "minimap-vim" "dashboard-nvim" "alpha-nvim" "scrollbar-nvim" "codewindow-nvim" "nvim-notify" "cinnamon-nvim" "cheatsheet-nvim" "colorizer" "venn-nvim" "cellular-automaton" "presence-nvim" "icon-picker-nvim" "dressing-nvim" "orgmode-nvim" "obsidian-nvim" "vim-markdown" "tabular" "toggleterm-nvim" ]; # You can either use the name of the plugin or a package. pluginsType = with types; listOf (nullOr (either (enum availablePlugins) package)); in { pluginsOpt = { description, default ? [], }: mkOption { inherit description default; type = pluginsType; }; }