Compare commits

..

16 commits

Author SHA1 Message Date
raf
a6ca5b7876
Merge 8f1b38ee81 into 250b503ef5 2024-11-17 18:00:42 +00:00
diniamo
250b503ef5 flake: update mnw 2024-11-17 17:00:29 +01:00
diniamo
8a827f92c9
Merge pull request #453 from diniamo/fix-trouble-binds
trouble: fix binds
2024-11-16 21:34:06 +01:00
diniamo
c99afe12c3 trouble: fix binds 2024-11-16 21:31:59 +01:00
diniamo
2bce0d957b
telescope: add missing mappings, cleanup (#469) 2024-11-15 08:17:54 +01:00
Ching Pei Yang
8099b9c821 lib/binds: update lzn bind functions 2024-11-15 09:40:06 +03:00
Ching Pei Yang
2df52f6ec4 lazy: remove unused imports 2024-11-15 09:40:06 +03:00
Ching Pei Yang
a79827f1f3 lazy: add key.mode example 2024-11-15 09:40:06 +03:00
Ching Pei Yang
22cfec78db lazy: re-order options for consistency 2024-11-15 09:40:06 +03:00
Ching Pei Yang
0b0bbfd348 lazy: add missing load() wrapper 2024-11-15 09:40:06 +03:00
Ching Pei Yang
2aad0fb838 lazy: remove defaults for keys 2024-11-15 09:40:06 +03:00
diniamo
7a5c75b865 nvim-cmp: fix use of mkDefault for borders 2024-11-13 20:46:33 +03:00
diniamo
1df720f86c nvim-cmp: use border style 2024-11-13 20:28:45 +03:00
diniamo
e39d469da9 nvim-cmp: allow passing null to format
Not adding special cases to where it's used shouldn't break anything.
2024-11-13 20:28:45 +03:00
diniamo
947cf90878 flake: provide dev package 2024-11-13 20:28:45 +03:00
Charlie Root
a07e113f3a theme/supported-themes.nix: fix themes
Make all themes work by adding `...` to every theme attrset.
2024-11-12 13:16:35 +03:00
15 changed files with 138 additions and 102 deletions

View file

@ -38,11 +38,11 @@
}, },
"mnw": { "mnw": {
"locked": { "locked": {
"lastModified": 1731182209, "lastModified": 1731821965,
"narHash": "sha256-yftvwv8bHEKjmSKREdkGLWTDhf7vA2Ssvl/XMpykigg=", "narHash": "sha256-QiGi/HBQRnIRGY4gQPuH7T3hr7NznOpEO7qNpF5ldmE=",
"owner": "Gerg-L", "owner": "Gerg-L",
"repo": "mnw", "repo": "mnw",
"rev": "0a5e50286ca9f1b70eb4fa29ce84304cad657700", "rev": "5fe5c41975ed0af55f55dc37cd28ba906a5d015e",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -21,6 +21,7 @@
./flake/legacyPackages.nix ./flake/legacyPackages.nix
./flake/overlays.nix ./flake/overlays.nix
./flake/packages.nix ./flake/packages.nix
./flake/develop.nix
]; ];
flake = { flake = {
@ -52,20 +53,7 @@
}; };
}; };
perSystem = { perSystem = {pkgs, ...}: {
self',
config,
pkgs,
...
}: {
devShells = {
default = self'.devShells.lsp;
nvim-nix = pkgs.mkShell {packages = [config.packages.nix];};
lsp = pkgs.mkShell {
packages = with pkgs; [nil statix deadnix alejandra];
};
};
# Provide the default formatter. `nix fmt` in project root # Provide the default formatter. `nix fmt` in project root
# will format available files with the correct formatter. # will format available files with the correct formatter.
# P.S: Please do not format with nixfmt! It messes with many # P.S: Please do not format with nixfmt! It messes with many

30
flake/develop.nix Normal file
View file

@ -0,0 +1,30 @@
{lib, ...}: {
perSystem = {
pkgs,
config,
self',
...
}: {
devShells = {
default = self'.devShells.lsp;
nvim-nix = pkgs.mkShellNoCC {packages = [config.packages.nix];};
lsp = pkgs.mkShellNoCC {
packages = with pkgs; [nil statix deadnix alejandra];
};
};
# This package exists to make development easier by providing the place and
# boilerplate to build a test nvf configuration. Feel free to use this for
# testing, but make sure to discard the changes before creating a pull
# request.
packages.dev = let
configuration = {};
customNeovim = lib.nvim.neovimConfiguration {
inherit pkgs;
modules = [configuration];
};
in
customNeovim.neovim;
};
}

View file

@ -79,14 +79,14 @@
expr = true; expr = true;
}; };
mkSetLznBinding = binding: action: { mkSetLznBinding = mode: binding: action: {
inherit action; inherit action mode;
key = binding.value; key = binding.value;
desc = binding.description; desc = binding.description;
}; };
mkSetLuaLznBinding = binding: action: { mkSetLuaLznBinding = mode: binding: action: {
inherit action; inherit action mode;
key = binding.value; key = binding.value;
lua = true; lua = true;
desc = binding.description; desc = binding.description;

View file

@ -54,5 +54,10 @@ in {
Nvf now uses $NVIM_APP_NAME so there is no longer the problem of Nvf now uses $NVIM_APP_NAME so there is no longer the problem of
(accidental) leaking of user configuration. (accidental) leaking of user configuration.
'') '')
(mkRemovedOptionModule ["vim" "lsp" "trouble" "mappings" "toggle"] ''
With Trouble having so many different modes, and breaking changes
upstream, it no longer makes sense, nor works, to toggle only Trouble.
'')
]; ];
} }

View file

@ -10,6 +10,8 @@
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
inherit (builtins) attrNames typeOf tryEval concatStringsSep; inherit (builtins) attrNames typeOf tryEval concatStringsSep;
borders = config.vim.ui.borders.plugins.nvim-cmp;
cfg = config.vim.autocomplete.nvim-cmp; cfg = config.vim.autocomplete.nvim-cmp;
luasnipEnable = config.vim.snippets.luasnip.enable; luasnipEnable = config.vim.snippets.luasnip.enable;
getPluginName = plugin: getPluginName = plugin:
@ -81,10 +83,9 @@ in {
setupOpts = { setupOpts = {
sources = map (s: {name = s;}) (attrNames cfg.sources); sources = map (s: {name = s;}) (attrNames cfg.sources);
# TODO: try to get nvim-cmp to follow global border style window = mkIf borders.enable {
window = mkIf config.vim.ui.borders.enable { completion.border = borders.style;
completion = mkLuaInline "cmp.config.window.bordered()"; documentation.border = borders.style;
documentation = mkLuaInline "cmp.config.window.bordered()";
}; };
formatting.format = cfg.format; formatting.format = cfg.format;

View file

@ -72,7 +72,7 @@ in {
}; };
format = mkOption { format = mkOption {
type = luaInline; type = nullOr luaInline;
default = mkLuaInline '' default = mkLuaInline ''
function(entry, vim_item) function(entry, vim_item)
vim_item.menu = (${toLuaObject cfg.sources})[entry.source.name] vim_item.menu = (${toLuaObject cfg.sources})[entry.source.name]

View file

@ -60,7 +60,7 @@ in {
inherit (cfg.ui) setupOpts; inherit (cfg.ui) setupOpts;
keys = [ keys = [
(mkSetLuaLznBinding mappings.toggleDapUI "function() require('dapui').toggle() end") (mkSetLuaLznBinding "n" mappings.toggleDapUI "function() require('dapui').toggle() end")
]; ];
}; };

View file

@ -21,19 +21,18 @@ in {
cmd = "Trouble"; cmd = "Trouble";
keys = [ keys = [
(mkSetLznBinding mappings.toggle "<cmd>TroubleToggle<CR>") (mkSetLznBinding "n" mappings.workspaceDiagnostics "<cmd>Trouble toggle diagnostics<CR>")
(mkSetLznBinding mappings.workspaceDiagnostics "<cmd>TroubleToggle workspace_diagnostics<CR>") (mkSetLznBinding "n" mappings.documentDiagnostics "<cmd>Trouble toggle diagnostics filter.buf=0<CR>")
(mkSetLznBinding mappings.documentDiagnostics "<cmd>TroubleToggle document_diagnostics<CR>") (mkSetLznBinding "n" mappings.lspReferences "<cmd>Trouble toggle lsp_references<CR>")
(mkSetLznBinding mappings.lspReferences "<cmd>TroubleToggle lsp_references<CR>") (mkSetLznBinding "n" mappings.quickfix "<cmd>Trouble toggle quickfix<CR>")
(mkSetLznBinding mappings.quickfix "<cmd>TroubleToggle quickfix<CR>") (mkSetLznBinding "n" mappings.locList "<cmd>Trouble toggle loclist<CR>")
(mkSetLznBinding mappings.locList "<cmd>TroubleToggle loclist<CR>") (mkSetLznBinding "n" mappings.symbols "<cmd>Trouble toggle symbols<CR>")
]; ];
}; };
binds.whichKey.register = pushDownDefault { binds.whichKey.register = pushDownDefault {
"<leader>l" = "Trouble";
"<leader>x" = "+Trouble"; "<leader>x" = "+Trouble";
"<leader>lw" = "Workspace"; "<leader>lw" = "+Workspace";
}; };
}; };
}; };

View file

@ -10,12 +10,12 @@ in {
setupOpts = mkPluginSetupOption "Trouble" {}; setupOpts = mkPluginSetupOption "Trouble" {};
mappings = { mappings = {
toggle = mkMappingOption "Toggle trouble [trouble]" "<leader>xx";
workspaceDiagnostics = mkMappingOption "Workspace diagnostics [trouble]" "<leader>lwd"; workspaceDiagnostics = mkMappingOption "Workspace diagnostics [trouble]" "<leader>lwd";
documentDiagnostics = mkMappingOption "Document diagnostics [trouble]" "<leader>ld"; documentDiagnostics = mkMappingOption "Document diagnostics [trouble]" "<leader>ld";
lspReferences = mkMappingOption "LSP References [trouble]" "<leader>lr"; lspReferences = mkMappingOption "LSP References [trouble]" "<leader>lr";
quickfix = mkMappingOption "QuickFix [trouble]" "<leader>xq"; quickfix = mkMappingOption "QuickFix [trouble]" "<leader>xq";
locList = mkMappingOption "LOCList [trouble]" "<leader>xl"; locList = mkMappingOption "LOCList [trouble]" "<leader>xl";
symbols = mkMappingOption "Symbols [trouble]" "<leader>xs";
}; };
}; };
}; };

View file

@ -22,6 +22,7 @@ in {
[(mkLznBinding ["n"] cfg.mappings.open "<Cmd>execute v:count . \"ToggleTerm\"<CR>" "Toggle terminal")] [(mkLznBinding ["n"] cfg.mappings.open "<Cmd>execute v:count . \"ToggleTerm\"<CR>" "Toggle terminal")]
++ optional cfg.lazygit.enable { ++ optional cfg.lazygit.enable {
key = cfg.lazygit.mappings.open; key = cfg.lazygit.mappings.open;
mode = "n";
desc = lazygitMapDesc; desc = lazygitMapDesc;
}; };

View file

@ -93,6 +93,7 @@ in {
setup = { setup = {
style ? "dark", style ? "dark",
transparent ? false, transparent ? false,
...
}: let }: let
style' = style' =
warnIf (style == "light") "oxocarbon: light theme is not well-supported" style; warnIf (style == "light") "oxocarbon: light theme is not well-supported" style;
@ -117,6 +118,7 @@ in {
setup = { setup = {
style ? "dark", style ? "dark",
transparent ? false, transparent ? false,
...
}: '' }: ''
-- Gruvbox theme -- Gruvbox theme
require("gruvbox").setup({ require("gruvbox").setup({
@ -152,6 +154,7 @@ in {
setup = { setup = {
style ? "main", style ? "main",
transparent ? false, transparent ? false,
...
}: '' }: ''
require("rose-pine").setup({ require("rose-pine").setup({
dark_variant = "${style}", -- main, moon, or dawn dark_variant = "${style}", -- main, moon, or dawn

View file

@ -34,36 +34,37 @@ in {
keys = keys =
[ [
(mkSetLznBinding mappings.findFiles "<cmd> Telescope find_files<CR>") (mkSetLznBinding "n" mappings.findFiles "<cmd>Telescope find_files<CR>")
(mkSetLznBinding mappings.liveGrep "<cmd> Telescope live_grep<CR>") (mkSetLznBinding "n" mappings.liveGrep "<cmd>Telescope live_grep<CR>")
(mkSetLznBinding mappings.buffers "<cmd> Telescope buffers<CR>") (mkSetLznBinding "n" mappings.buffers "<cmd>Telescope buffers<CR>")
(mkSetLznBinding mappings.helpTags "<cmd> Telescope help_tags<CR>") (mkSetLznBinding "n" mappings.helpTags "<cmd>Telescope help_tags<CR>")
(mkSetLznBinding mappings.open "<cmd> Telescope<CR>") (mkSetLznBinding "n" mappings.open "<cmd>Telescope<CR>")
(mkSetLznBinding "n" mappings.resume "<cmd>Telescope resume<CR>")
(mkSetLznBinding mappings.gitCommits "<cmd> Telescope git_commits<CR>") (mkSetLznBinding "n" mappings.gitCommits "<cmd>Telescope git_commits<CR>")
(mkSetLznBinding mappings.gitBufferCommits "<cmd> Telescope git_bcommits<CR>") (mkSetLznBinding "n" mappings.gitBufferCommits "<cmd>Telescope git_bcommits<CR>")
(mkSetLznBinding mappings.gitBranches "<cmd> Telescope git_branches<CR>") (mkSetLznBinding "n" mappings.gitBranches "<cmd>Telescope git_branches<CR>")
(mkSetLznBinding mappings.gitStatus "<cmd> Telescope git_status<CR>") (mkSetLznBinding "n" mappings.gitStatus "<cmd>Telescope git_status<CR>")
(mkSetLznBinding mappings.gitStash "<cmd> Telescope git_stash<CR>") (mkSetLznBinding "n" mappings.gitStash "<cmd>Telescope git_stash<CR>")
] ]
++ (optionals config.vim.lsp.enable [ ++ (optionals config.vim.lsp.enable [
(mkSetLznBinding mappings.lspDocumentSymbols "<cmd> Telescope lsp_document_symbols<CR>") (mkSetLznBinding "n" mappings.lspDocumentSymbols "<cmd>Telescope lsp_document_symbols<CR>")
(mkSetLznBinding mappings.lspWorkspaceSymbols "<cmd> Telescope lsp_workspace_symbols<CR>") (mkSetLznBinding "n" mappings.lspWorkspaceSymbols "<cmd>Telescope lsp_workspace_symbols<CR>")
(mkSetLznBinding mappings.lspReferences "<cmd> Telescope lsp_references<CR>") (mkSetLznBinding "n" mappings.lspReferences "<cmd>Telescope lsp_references<CR>")
(mkSetLznBinding mappings.lspImplementations "<cmd> Telescope lsp_implementations<CR>") (mkSetLznBinding "n" mappings.lspImplementations "<cmd>Telescope lsp_implementations<CR>")
(mkSetLznBinding mappings.lspDefinitions "<cmd> Telescope lsp_definitions<CR>") (mkSetLznBinding "n" mappings.lspDefinitions "<cmd>Telescope lsp_definitions<CR>")
(mkSetLznBinding mappings.lspTypeDefinitions "<cmd> Telescope lsp_type_definitions<CR>") (mkSetLznBinding "n" mappings.lspTypeDefinitions "<cmd>Telescope lsp_type_definitions<CR>")
(mkSetLznBinding mappings.diagnostics "<cmd> Telescope diagnostics<CR>") (mkSetLznBinding "n" mappings.diagnostics "<cmd>Telescope diagnostics<CR>")
]) ])
++ ( ++ (
optionals config.vim.treesitter.enable [ optionals config.vim.treesitter.enable [
(mkSetLznBinding mappings.treesitter "<cmd> Telescope treesitter<CR>") (mkSetLznBinding "n" mappings.treesitter "<cmd>Telescope treesitter<CR>")
] ]
) )
++ ( ++ (
optionals config.vim.projects.project-nvim.enable [ optionals config.vim.projects.project-nvim.enable [
(mkSetLznBinding mappings.findProjects "<cmd Telescope projects<CR>") (mkSetLznBinding "n" mappings.findProjects "<cmd>Telescope projects<CR>")
] ]
); );
}; };

View file

@ -9,7 +9,6 @@
inherit (lib.generators) mkLuaInline; inherit (lib.generators) mkLuaInline;
inherit (lib.strings) optionalString; inherit (lib.strings) optionalString;
inherit (lib.nvim.lua) toLuaObject; inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.dag) entryBefore entryAfter;
cfg = config.vim.lazy; cfg = config.vim.lazy;
toLuaLznKeySpec = keySpec: toLuaLznKeySpec = keySpec:
@ -50,6 +49,16 @@
end end
''; '';
load =
if spec.load != null
then
mkLuaInline ''
funcion()
${spec.load}
end
''
else null;
keys = keys =
if typeOf spec.keys == "list" && length spec.keys > 0 && typeOf (head spec.keys) == "set" if typeOf spec.keys == "list" && length spec.keys > 0 && typeOf (head spec.keys) == "set"
then map toLuaLznKeySpec (filter (keySpec: keySpec.key != null) spec.keys) then map toLuaLznKeySpec (filter (keySpec: keySpec.key != null) spec.keys)

View file

@ -22,21 +22,21 @@
''; '';
desc = mkOption { desc = mkOption {
description = "Description of the key map";
type = nullOr str; type = nullOr str;
default = null; default = null;
description = "Description of the key map";
}; };
ft = mkOption { ft = mkOption {
description = "TBD";
type = nullOr (listOf str); type = nullOr (listOf str);
default = null; default = null;
description = "TBD";
}; };
mode = mkOption { mode = mkOption {
description = "Modes to bind in";
type = either str (listOf str); type = either str (listOf str);
default = ["n" "x" "s" "o"]; example = ["n" "x" "o"];
description = "Modes to bind in";
}; };
silent = mkBool true "Whether this mapping should be silent. Equivalent to adding <silent> to a map."; silent = mkBool true "Whether this mapping should be silent. Equivalent to adding <silent> to a map.";
@ -48,6 +48,21 @@
}; };
}; };
lznEvent = submodule {
options = {
event = mkOption {
type = nullOr (either str (listOf str));
example = "BufEnter";
description = "Exact event name";
};
pattern = mkOption {
type = nullOr (either str (listOf str));
example = "BufEnter *.lua";
description = "Event pattern";
};
};
};
lznPluginType = submodule { lznPluginType = submodule {
options = { options = {
package = mkOption { package = mkOption {
@ -57,84 +72,67 @@
setupModule = mkOption { setupModule = mkOption {
type = nullOr str; type = nullOr str;
description = "Lua module to run setup function on.";
default = null; default = null;
description = "Lua module to run setup function on.";
}; };
setupOpts = mkOption { setupOpts = mkOption {
type = attrsOf anything; type = attrsOf anything;
description = "Options to pass to the setup function";
default = {}; default = {};
description = "Options to pass to the setup function";
}; };
# lz.n options # lz.n options
enabled = mkOption { enabled = mkOption {
type = nullOr (either bool str); type = nullOr (either bool str);
description = "When false, or if the lua function returns false, this plugin will not be included in the spec";
default = null; default = null;
description = "When false, or if the lua function returns false, this plugin will not be included in the spec";
}; };
beforeAll = mkOption { beforeAll = mkOption {
type = nullOr lines; type = nullOr lines;
description = "Lua code to run before any plugins are loaded. This will be wrapped in a function.";
default = null; default = null;
description = "Lua code to run before any plugins are loaded. This will be wrapped in a function.";
}; };
before = mkOption { before = mkOption {
type = nullOr lines; type = nullOr lines;
description = "Lua code to run before plugin is loaded. This will be wrapped in a function.";
default = null; default = null;
description = "Lua code to run before plugin is loaded. This will be wrapped in a function.";
}; };
after = mkOption { after = mkOption {
type = nullOr lines; type = nullOr lines;
default = null;
description = '' description = ''
Lua code to run after plugin is loaded. This will be wrapped in a function. Lua code to run after plugin is loaded. This will be wrapped in a function.
If [](#opt-vim.lazy.plugins._name_.setupModule) is provided, the setup will be ran before `after`. If [](#opt-vim.lazy.plugins._name_.setupModule) is provided, the setup will be ran before `after`.
''; '';
default = null;
}; };
event = mkOption { event = mkOption {
description = "Lazy-load on event"; type = nullOr (oneOf [str (listOf str) lznEvent]);
default = null; default = null;
type = let description = "Lazy-load on event";
event = submodule {
options = {
event = mkOption {
type = nullOr (either str (listOf str));
description = "Exact event name";
example = "BufEnter";
};
pattern = mkOption {
type = nullOr (either str (listOf str));
description = "Event pattern";
example = "BufEnter *.lua";
};
};
};
in
nullOr (oneOf [str (listOf str) event]);
}; };
cmd = mkOption { cmd = mkOption {
description = "Lazy-load on command";
default = null;
type = nullOr (either str (listOf str)); type = nullOr (either str (listOf str));
default = null;
description = "Lazy-load on command";
}; };
ft = mkOption { ft = mkOption {
description = "Lazy-load on filetype";
default = null;
type = nullOr (either str (listOf str)); type = nullOr (either str (listOf str));
default = null;
description = "Lazy-load on filetype";
}; };
keys = mkOption { keys = mkOption {
description = "Lazy-load on key mapping";
default = null;
type = nullOr (oneOf [str (listOf lznKeysSpec) (listOf str)]); type = nullOr (oneOf [str (listOf lznKeysSpec) (listOf str)]);
default = null;
example = '' example = ''
keys = [ keys = [
{ {
@ -152,20 +150,21 @@
} }
] ]
''; '';
description = "Lazy-load on key mapping";
}; };
colorscheme = mkOption { colorscheme = mkOption {
description = "Lazy-load on colorscheme.";
type = nullOr (either str (listOf str)); type = nullOr (either str (listOf str));
default = null; default = null;
description = "Lazy-load on colorscheme.";
}; };
lazy = mkBool false "Lazy-load manually, e.g. using `trigger_load`."; lazy = mkBool false "Lazy-load manually, e.g. using `trigger_load`.";
priority = mkOption { priority = mkOption {
type = nullOr int; type = nullOr int;
description = "Only useful for stat plugins (not lazy-loaded) to force loading certain plugins first.";
default = null; default = null;
description = "Only useful for stat plugins (not lazy-loaded) to force loading certain plugins first.";
}; };
load = mkOption { load = mkOption {
@ -183,20 +182,14 @@ in {
options.vim.lazy = { options.vim.lazy = {
enable = mkEnableOption "plugin lazy-loading via lz.n and lzn-auto-require" // {default = true;}; enable = mkEnableOption "plugin lazy-loading via lz.n and lzn-auto-require" // {default = true;};
loader = mkOption { loader = mkOption {
description = "Lazy loader to use";
type = enum ["lz.n"]; type = enum ["lz.n"];
default = "lz.n"; default = "lz.n";
description = "Lazy loader to use";
}; };
plugins = mkOption { plugins = mkOption {
default = {};
type = attrsOf lznPluginType; type = attrsOf lznPluginType;
description = '' default = {};
Plugins to lazy load.
The attribute key is used as the plugin name: for the default `vim.g.lz_n.load`
function this should be either the `package.pname` or `package.name`.
'';
example = '' example = ''
{ {
toggleterm-nvim = { toggleterm-nvim = {
@ -214,15 +207,21 @@ in {
}; };
} }
''; '';
description = ''
Plugins to lazy load.
The attribute key is used as the plugin name: for the default `vim.g.lz_n.load`
function this should be either the `package.pname` or `package.name`.
'';
}; };
enableLznAutoRequire = mkOption { enableLznAutoRequire = mkOption {
type = bool;
default = true;
description = '' description = ''
Enable lzn-auto-require. Since builtin plugins rely on this, only turn Enable lzn-auto-require. Since builtin plugins rely on this, only turn
off for debugging. off for debugging.
''; '';
type = bool;
default = true;
}; };
builtLazyConfig = mkOption { builtLazyConfig = mkOption {