Merge pull request #235 from FrothyMarrow/which-key-categories

utility/binds/which-key: allow configurable category labels
This commit is contained in:
raf 2024-02-27 18:28:42 +00:00 committed by GitHub
commit 37645ff116
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 95 additions and 110 deletions

View file

@ -56,3 +56,5 @@ Release notes for release 0.6
- Rewrote the entire `fidget.nvim` module to include extensive configuration options. Option `vim.fidget-nvim.align.bottom` has - Rewrote the entire `fidget.nvim` module to include extensive configuration options. Option `vim.fidget-nvim.align.bottom` has
been removed in favor of [vim.fidget-nvim.notification.window.align](vim.fidget-nvim.notification.window.align), which now supports been removed in favor of [vim.fidget-nvim.notification.window.align](vim.fidget-nvim.notification.window.align), which now supports
`top` and `bottom` values. `vim.fidget-nvim.align.right` has no longer any equivalent and also has been removed. `top` and `bottom` values. `vim.fidget-nvim.align.right` has no longer any equivalent and also has been removed.
- `which-key.nvim` categories can now be customized through [vim.binds.whichKey.register](vim.binds.whichKey.register).

View file

@ -68,6 +68,8 @@ in
mkSetLuaBinding = binding: action: mkSetLuaBinding = binding: action:
mkLuaBinding binding.value action binding.description; mkLuaBinding binding.value action binding.description;
pushDownDefault = attr: self.mapAttrs (name: value: self.mkDefault value) attr;
# For forward compatibility. # For forward compatibility.
literalExpression = super.literalExpression or super.literalExample; literalExpression = super.literalExpression or super.literalExample;
}) })

View file

@ -10,6 +10,8 @@
inherit (lib.nvim.binds) mkBinding; inherit (lib.nvim.binds) mkBinding;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
inherit (lib.nvim.lua) listToLuaTable expToLua; inherit (lib.nvim.lua) listToLuaTable expToLua;
# TODO: move this to its own module
inherit (lib) pushDownDefault;
cfg = config.vim.filetree.nvimTree; cfg = config.vim.filetree.nvimTree;
self = import ./nvimtree.nix {inherit pkgs lib;}; self = import ./nvimtree.nix {inherit pkgs lib;};
@ -25,6 +27,10 @@ in {
(mkBinding cfg.mappings.focus ":NvimTreeFocus<cr>" mappings.focus.description) (mkBinding cfg.mappings.focus ":NvimTreeFocus<cr>" mappings.focus.description)
]; ];
vim.binds.whichKey.register = pushDownDefault {
"<leader>t" = "+NvimTree";
};
vim.luaConfigRC.nvimtreelua = entryAnywhere '' vim.luaConfigRC.nvimtreelua = entryAnywhere ''
${ ${
lib.optionalString cfg.disableNetrw '' lib.optionalString cfg.disableNetrw ''

View file

@ -7,6 +7,8 @@
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.nvim.binds) addDescriptionsToMappings mkSetExprBinding mkSetLuaBinding; inherit (lib.nvim.binds) addDescriptionsToMappings mkSetExprBinding mkSetLuaBinding;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
# TODO: move this to its own module
inherit (lib) pushDownDefault;
cfg = config.vim.git; cfg = config.vim.git;
@ -63,6 +65,10 @@ in {
(mkSetLuaBinding gsMappings.resetHunk "function() package.loaded.gitsigns.reset_hunk {vim.fn.line('.'), vim.fn.line('v')} end") (mkSetLuaBinding gsMappings.resetHunk "function() package.loaded.gitsigns.reset_hunk {vim.fn.line('.'), vim.fn.line('v')} end")
]; ];
vim.binds.whichKey.register = pushDownDefault {
"<leader>g" = "+Gitsigns";
};
vim.luaConfigRC.gitsigns = entryAnywhere '' vim.luaConfigRC.gitsigns = entryAnywhere ''
require('gitsigns').setup{} require('gitsigns').setup{}
''; '';

View file

@ -3,7 +3,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib) addDescriptionsToMappings mkIf mkSetBinding nvim; inherit (lib) addDescriptionsToMappings mkIf mkSetBinding nvim pushDownDefault;
cfg = config.vim.lsp; cfg = config.vim.lsp;
@ -17,6 +17,10 @@ in {
vim.maps.normal = mkSetBinding mappings.open ":CodeActionMenu<CR>"; vim.maps.normal = mkSetBinding mappings.open ":CodeActionMenu<CR>";
vim.binds.whichKey.register = pushDownDefault {
"<leader>c" = "+CodeAction";
};
vim.luaConfigRC.code-action-menu = nvim.dag.entryAnywhere '' vim.luaConfigRC.code-action-menu = nvim.dag.entryAnywhere ''
-- border configuration -- border configuration
vim.g.code_action_menu_window_border = '${config.vim.ui.borders.plugins.code-action-menu.style}' vim.g.code_action_menu_window_border = '${config.vim.ui.borders.plugins.code-action-menu.style}'

View file

@ -3,7 +3,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib) addDescriptionsToMappings mkIf mkMerge mkSetBinding nvim; inherit (lib) addDescriptionsToMappings mkIf mkMerge mkSetBinding nvim pushDownDefault;
cfg = config.vim.lsp; cfg = config.vim.lsp;
@ -24,6 +24,12 @@ in {
(mkSetBinding mappings.locList "<cmd>TroubleToggle loclist<CR>") (mkSetBinding mappings.locList "<cmd>TroubleToggle loclist<CR>")
]; ];
vim.binds.whichKey.register = pushDownDefault {
"<leader>l" = "Trouble";
"<leader>x" = "+Trouble";
"<leader>lw" = "Workspace";
};
vim.luaConfigRC.trouble = nvim.dag.entryAnywhere '' vim.luaConfigRC.trouble = nvim.dag.entryAnywhere ''
-- Enable trouble diagnostics viewer -- Enable trouble diagnostics viewer
require("trouble").setup {} require("trouble").setup {}

View file

@ -3,7 +3,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib) addDescriptionsToMappings mkIf mkMerge mkSetLuaBinding nvim; inherit (lib) addDescriptionsToMappings mkIf mkMerge mkSetLuaBinding nvim pushDownDefault;
cfg = config.vim.minimap.codewindow; cfg = config.vim.minimap.codewindow;
@ -24,6 +24,10 @@ in {
(mkSetLuaBinding mappings.toggleFocus "require('codewindow').toggle_focus") (mkSetLuaBinding mappings.toggleFocus "require('codewindow').toggle_focus")
]; ];
vim.binds.whichKey.register = pushDownDefault {
"<leader>m" = "+Minimap";
};
vim.luaConfigRC.codewindow = nvim.dag.entryAnywhere '' vim.luaConfigRC.codewindow = nvim.dag.entryAnywhere ''
local codewindow = require('codewindow') local codewindow = require('codewindow')
codewindow.setup({ codewindow.setup({

View file

@ -4,7 +4,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib) mkIf; inherit (lib) mkIf pushDownDefault;
cfg = config.vim.minimap.minimap-vim; cfg = config.vim.minimap.minimap-vim;
in { in {
@ -13,5 +13,9 @@ in {
pkgs.code-minimap pkgs.code-minimap
"minimap-vim" "minimap-vim"
]; ];
vim.binds.whichKey.register = pushDownDefault {
"<leader>m" = "+Minimap";
};
}; };
} }

View file

@ -3,7 +3,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib) mkIf nvim; inherit (lib) mkIf nvim pushDownDefault;
cfg = config.vim.notes.mind-nvim; cfg = config.vim.notes.mind-nvim;
in { in {
@ -18,6 +18,10 @@ in {
"<leader>oc" = {action = ":MindClose<CR>";}; "<leader>oc" = {action = ":MindClose<CR>";};
}; };
vim.binds.whichKey.register = pushDownDefault {
"<leader>o" = "+Notes";
};
vim.luaConfigRC.mind-nvim = nvim.dag.entryAnywhere '' vim.luaConfigRC.mind-nvim = nvim.dag.entryAnywhere ''
require'mind'.setup() require'mind'.setup()
''; '';

View file

@ -3,7 +3,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib) mkIf nvim; inherit (lib) mkIf nvim pushDownDefault;
cfg = config.vim.notes.obsidian; cfg = config.vim.notes.obsidian;
auto = config.vim.autocomplete; auto = config.vim.autocomplete;
@ -15,6 +15,10 @@ in {
"tabular" "tabular"
]; ];
vim.binds.whichKey.register = pushDownDefault {
"<leader>o" = "+Notes";
};
vim.luaConfigRC.obsidian = nvim.dag.entryAnywhere '' vim.luaConfigRC.obsidian = nvim.dag.entryAnywhere ''
require("obsidian").setup({ require("obsidian").setup({
dir = "${cfg.dir}", dir = "${cfg.dir}",

View file

@ -3,7 +3,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib) mkIf mkMerge nvim; inherit (lib) mkIf mkMerge nvim pushDownDefault;
cfg = config.vim.notes.orgmode; cfg = config.vim.notes.orgmode;
in { in {
@ -13,6 +13,10 @@ in {
"orgmode-nvim" "orgmode-nvim"
]; ];
vim.binds.whichKey.register = pushDownDefault {
"<leader>o" = "+Notes";
};
vim.luaConfigRC.orgmode = nvim.dag.entryAnywhere '' vim.luaConfigRC.orgmode = nvim.dag.entryAnywhere ''
-- Load custom treesitter grammar for org filetype -- Load custom treesitter grammar for org filetype
require('orgmode').setup_ts_grammar() require('orgmode').setup_ts_grammar()

View file

@ -3,7 +3,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib) mkIf mkMerge mkLuaBinding mkBinding nvim; inherit (lib) mkIf mkMerge mkLuaBinding mkBinding nvim pushDownDefault;
cfg = config.vim.tabline.nvimBufferline; cfg = config.vim.tabline.nvimBufferline;
self = import ./nvim-bufferline.nix { self = import ./nvim-bufferline.nix {
@ -40,6 +40,13 @@ in {
(mkBinding cfg.mappings.movePrevious ":BufferLineMovePrev<CR>" mappings.movePrevious.description) (mkBinding cfg.mappings.movePrevious ":BufferLineMovePrev<CR>" mappings.movePrevious.description)
]; ];
vim.binds.whichKey.register = pushDownDefault {
"<leader>b" = "+Buffer";
"<leader>bm" = "BufferLineMove";
"<leader>bs" = "BufferLineSort";
"<leader>bsi" = "BufferLineSortById";
};
vim.luaConfigRC.nvimBufferline = nvim.dag.entryAnywhere '' vim.luaConfigRC.nvimBufferline = nvim.dag.entryAnywhere ''
require("bufferline").setup{ require("bufferline").setup{
options = { options = {

View file

@ -3,14 +3,17 @@
lib, lib,
... ...
}: let }: let
inherit (lib) mkIf nvim; inherit (lib.modules) mkIf;
inherit (lib.strings) optionalString;
inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.dag) entryAnywhere;
cfg = config.vim.binds.whichKey; cfg = config.vim.binds.whichKey;
in { in {
config = mkIf (cfg.enable) { config = mkIf (cfg.enable) {
vim.startPlugins = ["which-key"]; vim.startPlugins = ["which-key"];
vim.luaConfigRC.whichkey = nvim.dag.entryAnywhere '' vim.luaConfigRC.whichkey = entryAnywhere ''
local wk = require("which-key") local wk = require("which-key")
wk.setup ({ wk.setup ({
key_labels = { key_labels = {
@ -20,108 +23,14 @@ in {
["<tab>"] = "TAB", ["<tab>"] = "TAB",
}, },
${lib.optionalString (config.vim.ui.borders.plugins.which-key.enable) '' ${optionalString (config.vim.ui.borders.plugins.which-key.enable) ''
window = { window = {
border = "${config.vim.ui.borders.plugins.which-key.style}", border = "${config.vim.ui.borders.plugins.which-key.style}",
}, },
''} ''}
}) })
wk.register({ wk.register(${toLuaObject cfg.register})
${
if config.vim.tabline.nvimBufferline.enable
then ''
-- Buffer
["<leader>b"] = { name = "+Buffer" },
["<leader>bm"] = { name = "BufferLineMove" },
["<leader>bs"] = { name = "BufferLineSort" },
["<leader>bsi"] = { name = "BufferLineSortById" },
''
else ""
}
${
if config.vim.telescope.enable
then ''
["<leader>f"] = { name = "+Telescope" },
-- Telescope
["<leader>fl"] = { name = "Telescope LSP" },
["<leader>fm"] = { name = "Cellular Automaton" }, -- TODO: mvoe this to its own parent group
["<leader>fv"] = { name = "Telescope Git" },
["<leader>fvc"] = { name = "Commits" },
''
else ""
}
${
if config.vim.lsp.trouble.enable
then ''
-- Trouble
["<leader>lw"] = { name = "Workspace" },
["<leader>x"] = { name = "+Trouble" }, -- TODO: move all trouble binds to the same parent group
["<leader>l"] = { name = "+Trouble" },
''
else ""
}
${
if config.vim.lsp.nvimCodeActionMenu.enable
then ''
-- Parent Groups
["<leader>c"] = { name = "+CodeAction" },
''
else ""
}
${
if config.vim.minimap.codewindow.enable || config.vim.minimap.minimap-vim.enable
then ''
-- Minimap
["<leader>m"] = { name = "+Minimap" }, -- TODO: remap both minimap plugins' keys to be the same
''
else ""
}
${
if config.vim.notes.mind-nvim.enable || config.vim.notes.obsidian.enable || config.vim.notes.orgmode.enable
then ''
-- Notes
["<leader>o"] = { name = "+Notes" },
-- TODO: options for other note taking plugins and their individual binds
-- TODO: move all note-taker binds under leader + o
''
else ""
}
${
# TODO: This probably will need to be reworked for custom-keybinds
if config.vim.filetree.nvimTree.enable
then ''
-- NvimTree
["<leader>t"] = { name = "+NvimTree" },
''
else ""
}
${
if config.vim.git.gitsigns.enable
then ''
-- Git
["<leader>g"] = { name = "+Gitsigns" },
''
else ""
}
${
if config.vim.utility.preview.glow.enable
then ''
-- Markdown
["<leader>pm"] = { name = "+Preview Markdown" },
''
else ""
}
})
''; '';
}; };
} }

View file

@ -1,7 +1,18 @@
{lib, ...}: let {
inherit (lib) mkEnableOption; config,
lib,
...
}: let
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) attrsOf str;
in { in {
options.vim.binds.whichKey = { options.vim.binds.whichKey = {
enable = mkEnableOption "which-key keybind helper menu"; enable = mkEnableOption "which-key keybind helper menu";
register = mkOption {
description = "Register label for which-key keybind helper menu";
type = attrsOf str;
default = {};
};
}; };
} }

View file

@ -4,7 +4,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib) nvim mkIf mkMerge mkBinding; inherit (lib) nvim mkIf mkMerge mkBinding pushDownDefault;
cfg = config.vim.utility.preview.glow; cfg = config.vim.utility.preview.glow;
self = import ./glow.nix { self = import ./glow.nix {
@ -19,6 +19,10 @@ in {
(mkBinding cfg.mappings.openPreview ":Glow<CR>" mappings.openPreview.description) (mkBinding cfg.mappings.openPreview ":Glow<CR>" mappings.openPreview.description)
]; ];
vim.binds.whichKey.register = pushDownDefault {
"<leader>pm" = "+Preview Markdown";
};
vim.luaConfigRC.glow = nvim.dag.entryAnywhere '' vim.luaConfigRC.glow = nvim.dag.entryAnywhere ''
require('glow').setup({ require('glow').setup({
glow_path = "${pkgs.glow}/bin/glow" glow_path = "${pkgs.glow}/bin/glow"

View file

@ -4,7 +4,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib) addDescriptionsToMappings mkIf mkMerge mkSetBinding nvim; inherit (lib) addDescriptionsToMappings mkIf mkMerge mkSetBinding nvim pushDownDefault;
cfg = config.vim.telescope; cfg = config.vim.telescope;
self = import ./telescope.nix {inherit lib;}; self = import ./telescope.nix {inherit lib;};
@ -52,6 +52,14 @@ in {
) )
]; ];
vim.binds.whichKey.register = pushDownDefault {
"<leader>f" = "+Telescope";
"<leader>fl" = "Telescope LSP";
"<leader>fm" = "Cellular Automaton";
"<leader>fv" = "Telescope Git";
"<leader>fvc" = "Commits";
};
vim.luaConfigRC.telescope = nvim.dag.entryAnywhere '' vim.luaConfigRC.telescope = nvim.dag.entryAnywhere ''
local telescope = require('telescope') local telescope = require('telescope')
telescope.setup { telescope.setup {