180 lines
4.8 KiB
Nix
180 lines
4.8 KiB
Nix
{
|
|
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",
|
|
["<C-y>"] = { "select_and_accept", "snippet_forward", "fallback" },
|
|
["<C-S-y>"] = { "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", "<leader>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", "<leader>o", "<cmd>Oil<cr>", { 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", "<leader>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")
|
|
'';
|
|
};
|
|
};
|
|
}
|