modules: add augroups, lspconfig
This commit is contained in:
parent
8628fb2ed8
commit
a2a49ca722
4 changed files with 186 additions and 3 deletions
|
@ -5,18 +5,20 @@
|
||||||
|
|
||||||
./modules/vim/opts.nix
|
./modules/vim/opts.nix
|
||||||
./modules/vim/keymap.nix
|
./modules/vim/keymap.nix
|
||||||
|
./modules/vim/augroup.nix
|
||||||
|
|
||||||
./modules/filetype.nix
|
./modules/filetype.nix
|
||||||
./modules/input.nix
|
./modules/input.nix
|
||||||
./modules/plugin.nix
|
./modules/plugin.nix
|
||||||
./modules/fn.nix
|
./modules/fn.nix
|
||||||
|
|
||||||
./modules/plugins/theme/catppuccin.nix
|
./modules/plugins/language-server/lspconfig.nix
|
||||||
./modules/plugins/style/neoformat.nix
|
|
||||||
./modules/plugins/style/nvim-treesitter.nix
|
|
||||||
./modules/plugins/navigation/hop-nvim.nix
|
./modules/plugins/navigation/hop-nvim.nix
|
||||||
./modules/plugins/navigation/telescope.nix
|
./modules/plugins/navigation/telescope.nix
|
||||||
./modules/plugins/navigation/nvim-tree.nix
|
./modules/plugins/navigation/nvim-tree.nix
|
||||||
|
./modules/plugins/style/neoformat.nix
|
||||||
|
./modules/plugins/style/nvim-treesitter.nix
|
||||||
|
./modules/plugins/theme/catppuccin.nix
|
||||||
./modules/plugins/gitsigns.nix
|
./modules/plugins/gitsigns.nix
|
||||||
|
|
||||||
##################################################
|
##################################################
|
||||||
|
|
|
@ -40,6 +40,8 @@ in
|
||||||
(map (v: v.genConfig) (filter (v: !v.isDependency) (attrValues config.plugin)))
|
(map (v: v.genConfig) (filter (v: !v.isDependency) (attrValues config.plugin)))
|
||||||
# Cmd
|
# Cmd
|
||||||
(lib.optional (config.vim.cmd != "") (call "vim.cmd" config.vim.cmd))
|
(lib.optional (config.vim.cmd != "") (call "vim.cmd" config.vim.cmd))
|
||||||
|
# Autocommands
|
||||||
|
(lib.flip lib.mapAttrsToList config.vim.augroup (k: v: v.genConfig))
|
||||||
# Keymaps
|
# Keymaps
|
||||||
(lib.flip map config.vim.keymap.set ({ mode, lhs, rhs, ... } @ vars:
|
(lib.flip map config.vim.keymap.set ({ mode, lhs, rhs, ... } @ vars:
|
||||||
let
|
let
|
||||||
|
|
51
modules/plugins/language-server/lspconfig.nix
Normal file
51
modules/plugins/language-server/lspconfig.nix
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.plugins.language-server.lspconfig;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.plugins.language-server.lspconfig = with lib; {
|
||||||
|
enable = mkEnableOption "lspconfig";
|
||||||
|
|
||||||
|
package = mkPackageOption pkgs.vimPlugins "nvim-lspconfig" { };
|
||||||
|
|
||||||
|
serverSettings = mkOption {
|
||||||
|
type = with types; attrsOf attrs;
|
||||||
|
default = { };
|
||||||
|
};
|
||||||
|
|
||||||
|
keymap.set = mkOption {
|
||||||
|
type = with types; listOf keymap;
|
||||||
|
default = [ ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
fn.lspconfig-on-attach = {
|
||||||
|
args = [ "event" ];
|
||||||
|
content = with lib.nix2lua; { event }: {
|
||||||
|
vim.keymap.set = map
|
||||||
|
(attrs: attrs // { buffer = pipe1 event (var "buf"); })
|
||||||
|
cfg.keymap.set;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vim.augroup.user-lsp-config = {
|
||||||
|
event = "LspAttach";
|
||||||
|
callback = config.fn.lspconfig-on-attach.lambda;
|
||||||
|
};
|
||||||
|
|
||||||
|
plugin.nvim-lspconfig = {
|
||||||
|
name = "lspconfig";
|
||||||
|
afterSetup = with lib.nix2lua; lib.mapAttrsToList
|
||||||
|
(ls: lsSettings:
|
||||||
|
pipe [
|
||||||
|
(var "lspconfig")
|
||||||
|
(var ls)
|
||||||
|
(call "setup" lsSettings)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
cfg.serverSettings;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
128
modules/vim/augroup.nix
Normal file
128
modules/vim/augroup.nix
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
|
||||||
|
let
|
||||||
|
augroupsCfg = config.vim.augroup;
|
||||||
|
|
||||||
|
autocmd = { name, config, ... }: {
|
||||||
|
options = with lib; {
|
||||||
|
group = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = ''
|
||||||
|
autocommand group name.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
event = mkOption {
|
||||||
|
type = with types; either str (listOf str);
|
||||||
|
description = ''
|
||||||
|
Event(s) that will trigger the handler (`callback` or `command`).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
pattern = mkOption {
|
||||||
|
type = with types; nullOr (either str (listOf str));
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
pattern(s) to match literally.
|
||||||
|
`:help autocmd-pattern
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
buffer = mkOption {
|
||||||
|
type = with types; nullOr attrs;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
buffer number for buffer-local autocommands.
|
||||||
|
Cannot be used with `pattern`.
|
||||||
|
|
||||||
|
`:help autocmd-buflocal`
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
desc = mkOption {
|
||||||
|
type = with types; nullOr str;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
description (for documentation and troubleshooting).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
callback = mkOption {
|
||||||
|
type = with types; nullOr attrs;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Lua function (or Vimscript function name) called when the event(s) is triggered.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
command = mkOption {
|
||||||
|
type = with types; nullOr str;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Vim command to execute on event. Cannot be used with `callback`.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
once = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Run the autocommand only once.
|
||||||
|
|
||||||
|
`:help autocmd-once`
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
nested = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Run nested autocommands.
|
||||||
|
|
||||||
|
`:help autocmd-nested`
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
genConfig = mkOption {
|
||||||
|
type = types.attrs;
|
||||||
|
internal = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
group = lib.mkDefault name;
|
||||||
|
|
||||||
|
genConfig = with lib.nix2lua; call "vim.api.nvim_create_autocmd" [
|
||||||
|
config.event
|
||||||
|
{
|
||||||
|
inherit (config) pattern buffer desc callback command once nested;
|
||||||
|
group = call "vim.api.nvim_create_augroup" config.group;
|
||||||
|
}
|
||||||
|
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
options.vim.augroup = with lib; mkOption {
|
||||||
|
type = with types; attrsOf (submodule autocmd);
|
||||||
|
default = { };
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf (augroupsCfg != { }) {
|
||||||
|
assertions = lib.flatten (lib.mapAttrsToList
|
||||||
|
(k: { pattern, buffer, command, callback, ... }: [
|
||||||
|
{
|
||||||
|
assertion = (buffer != null -> pattern == null)
|
||||||
|
|| (pattern != null -> buffer == null);
|
||||||
|
message = "vim.augroup.${k}: `buffer` cannot be used with `pattern`";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
assertion = callback != null || command != null;
|
||||||
|
message = "vim.augroup.${k}: either `command` or `callback` is required";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
assertion = (callback != null -> command == null)
|
||||||
|
|| (command != null -> callback == null);
|
||||||
|
message = "vim.augroup.${k}: `command` cannot be used with `callback`";
|
||||||
|
}
|
||||||
|
])
|
||||||
|
augroupsCfg
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue