You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.1 KiB
Nix
72 lines
2.1 KiB
Nix
{
|
|
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;
|
|
};
|
|
|
|
}
|