nix-dotfiles/hmModules/apps/neovim/app.nix

170 lines
4.9 KiB
Nix
Raw Normal View History

2024-04-14 05:40:02 -07:00
{ config, pkgs, lib, ... }:
{
options.neovim = {
enable = lib.mkEnableOption "Enables neovim";
languages = {
2024-04-17 20:59:21 -07:00
c.enable = lib.mkEnableOption "Enables c support";
go.enable = lib.mkEnableOption "Enables go support";
2024-04-23 23:17:10 -07:00
nix.enable = lib.mkEnableOption "Enables nix support";
rust.enable = lib.mkEnableOption "Enables rust support";
2025-07-01 10:44:39 -07:00
typescript.enable = lib.mkEnableOption "Enables typescript support";
};
2025-01-09 10:04:32 -08:00
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";
2024-04-18 00:57:36 -07:00
wiki.enable = lib.mkEnableOption "Enables a wiki";
};
2024-04-14 05:40:02 -07:00
};
imports = [
./plugin/lsp.nix
./plugin/nvimcmp.nix
./plugin/telescope.nix
./plugin/treesitter.nix
];
2024-04-14 05:40:02 -07:00
config = lib.mkIf config.neovim.enable {
home.sessionVariables = {
EDITOR = "nvim";
VISUAL = "nvim";
};
2024-04-14 05:40:02 -07:00
programs.neovim = {
enable = true;
viAlias = true;
vimAlias = true;
vimdiffAlias = true;
2024-04-14 05:40:02 -07:00
extraLuaConfig = ''
${builtins.readFile ./options.lua}
'';
2024-04-14 05:40:02 -07:00
extraPackages = with pkgs; [
2024-04-17 20:59:21 -07:00
(lib.mkIf config.neovim.languages.c.enable libclang)
(lib.mkIf config.neovim.languages.go.enable gopls)
2024-04-23 23:17:10 -07:00
(lib.mkIf config.neovim.languages.nix.enable nil)
(lib.mkIf config.neovim.languages.rust.enable rust-analyzer)
2024-04-14 05:40:02 -07:00
];
# Additional packages are added through imports
plugins = let
lopts = lib.lists.optionals;
cfgp = config.neovim.plugins;
cfgl = config.neovim.languages;
2025-01-09 10:04:32 -08:00
cfgt = config.neovim.themes;
comments = lopts cfgp.comments.enable (with pkgs.vimPlugins; [
{
plugin = comment-nvim;
type = "lua";
config = "require(\"Comment\").setup()";
}
]);
fugitive = lopts cfgp.fugitive.enable (with pkgs.vimPlugins; [
vim-fugitive
]);
luasnip-pkg = lopts cfgp.luasnip.enable (with pkgs.vimPlugins; [
luasnip
friendly-snippets
(lib.mkIf cfgp.nvimcmp.enable cmp_luasnip)
]);
lualine = lopts cfgp.lualine.enable (with pkgs.vimPlugins; [
{
plugin = lualine-nvim;
type = "lua";
config = ''
2025-01-09 10:04:32 -08:00
require("lualine").setup {
options = {
icons_enabled = true,
'' + lib.strings.optionalString cfgt.catppuccin.enable ''
theme = "catppuccin"
'' + ''
}
}
'';
}
nvim-web-devicons
]);
nix-pkg = lopts cfgl.nix.enable (with pkgs.vimPlugins; [
vim-nix
]);
2024-04-18 00:57:36 -07:00
2024-04-23 23:17:10 -07:00
rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [
{
plugin = rustaceanvim;
type = "lua";
config = ''
vim.g.rust_recommended_style = 0
'';
}
2024-04-23 23:17:10 -07:00
]);
go-pkg = lopts cfgl.go.enable (with pkgs.vimPlugins; [
go-nvim
]);
2024-04-23 23:17:10 -07:00
2025-07-01 10:44:39 -07:00
typescript-pkg = lopts cfgl.typescript.enable (with pkgs.vimPlugins; [
{
plugin = typescript-tools-nvim;
type = "lua";
config = ''
require("typescript-tools").setup {}
'';
}
]);
2025-01-09 10:04:32 -08:00
catppuccin-pkg = lopts cfgt.catppuccin.enable (with pkgs.vimPlugins; [
{
plugin = catppuccin-nvim;
type = "lua";
config = ''
vim.cmd.colorscheme "catppuccin-mocha"
require('catppuccin').setup({
integrations = {
'' + lib.strings.optionalString cfgp.wiki.enable ''
vimwiki = true
'' + ''
}
})
'';
}
]);
2024-04-18 00:57:36 -07:00
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',
}
}
'';
}
]);
2025-07-01 10:44:39 -07:00
in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg ++ rust-pkg
++ go-pkg ++ wiki ++ catppuccin-pkg ++ typescript-pkg;
2024-04-14 05:40:02 -07:00
};
};
}