hmMods/extends: add vscode.keybindingsNext option
parent
eb58a9d89d
commit
6924bcefa2
@ -0,0 +1,71 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.programs.vscode;
|
||||
in
|
||||
{
|
||||
|
||||
options.programs.vscode = {
|
||||
keybindingsNext = lib.mkOption {
|
||||
description = ''
|
||||
More expressive and ordered way to set {option}`programs.vscode.keybindings`.
|
||||
Both options can be used simultaneously.
|
||||
|
||||
- key bindings are grouped by their key combination
|
||||
- you can shortcut commands without further options (see example)
|
||||
'';
|
||||
type =
|
||||
let
|
||||
bindsType = options.programs.vscode.keybindings.type;
|
||||
bindModule = bindsType.nestedTypes.elemType;
|
||||
bindOpts = bindModule.getSubOptions;
|
||||
inhOpts =
|
||||
prefix:
|
||||
builtins.removeAttrs (bindOpts prefix) [
|
||||
"_module"
|
||||
"key"
|
||||
];
|
||||
inhMod = lib.types.submodule { options = inhOpts [ ]; };
|
||||
commType = (bindOpts [ ]).command.type;
|
||||
bindsNextType = lib.types.either inhMod commType;
|
||||
bindsListNext = lib.types.listOf bindsNextType;
|
||||
in
|
||||
lib.types.attrsOf bindsListNext;
|
||||
default = { };
|
||||
example = {
|
||||
"ctrl+tab" = [
|
||||
{
|
||||
command = "-workbench.action.quickOpenNavigateNextInEditorPicker";
|
||||
when = "inEditorsPicker && inQuickOpen";
|
||||
}
|
||||
"-workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup"
|
||||
"workbench.action.nextEditor"
|
||||
];
|
||||
"ctrl+shift+tab" = [
|
||||
{
|
||||
command = "-workbench.action.quickOpenNavigatePreviousInEditorPicker";
|
||||
when = "inEditorsPicker && inQuickOpen";
|
||||
}
|
||||
"-workbench.action.quickOpenLeastRecentlyUsedEditorInGroup"
|
||||
"workbench.action.previousEditor"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config.programs.vscode = {
|
||||
keybindings =
|
||||
let
|
||||
expandEntry = opts: if builtins.isAttrs opts then opts else { command = opts; };
|
||||
transEntry = key: opts: (expandEntry opts) // { inherit key; };
|
||||
transKey = key: opts: map (transEntry key) opts;
|
||||
transAttr = attr: lib.flatten (lib.mapAttrsToList transKey attr);
|
||||
in
|
||||
transAttr config.programs.vscode.keybindingsNext;
|
||||
};
|
||||
|
||||
}
|
Loading…
Reference in New Issue