mirror of
https://github.com/nix-community/home-manager.git
synced 2025-11-08 19:46:05 +01:00
fish: added completions option (#8127)
This commit is contained in:
parent
8929c5f3bc
commit
ba15db2a15
3 changed files with 93 additions and 0 deletions
|
|
@ -153,6 +153,17 @@ let
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
completionModule = types.submodule {
|
||||||
|
options = {
|
||||||
|
body = mkOption {
|
||||||
|
type = types.lines;
|
||||||
|
description = ''
|
||||||
|
The completion file's body.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
abbrModule = types.submodule {
|
abbrModule = types.submodule {
|
||||||
options = {
|
options = {
|
||||||
expansion = mkOption {
|
expansion = mkOption {
|
||||||
|
|
@ -556,6 +567,28 @@ in
|
||||||
<https://fishshell.com/docs/current/cmds/function.html>.
|
<https://fishshell.com/docs/current/cmds/function.html>.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
programs.fish.completions = mkOption {
|
||||||
|
type = with types; attrsOf (either lines completionModule);
|
||||||
|
default = { };
|
||||||
|
example = literalExpression ''
|
||||||
|
{
|
||||||
|
my-prog = '''
|
||||||
|
complete -c myprog -s o -l output
|
||||||
|
''';
|
||||||
|
|
||||||
|
my-app = {
|
||||||
|
body = '''
|
||||||
|
complete -c myapp -s -v
|
||||||
|
''';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
Custom fish completions. For more information see
|
||||||
|
<https://fishshell.com/docs/current/completions.html>.
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable (
|
config = mkIf cfg.enable (
|
||||||
|
|
@ -734,6 +767,20 @@ in
|
||||||
};
|
};
|
||||||
}) cfg.functions;
|
}) cfg.functions;
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
xdg.configFile = lib.mapAttrs' (name: def: {
|
||||||
|
name = "fish/completions/${name}.fish";
|
||||||
|
value = {
|
||||||
|
source =
|
||||||
|
let
|
||||||
|
body = if isAttrs def then def.body else def;
|
||||||
|
in
|
||||||
|
fishIndent "${name}.fish" ''
|
||||||
|
${lib.strings.removeSuffix "\n" body}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}) cfg.completions;
|
||||||
|
}
|
||||||
|
|
||||||
# Each plugin gets a corresponding conf.d/plugin-NAME.fish file to load
|
# Each plugin gets a corresponding conf.d/plugin-NAME.fish file to load
|
||||||
# in the paths and any initialization scripts.
|
# in the paths and any initialization scripts.
|
||||||
|
|
|
||||||
45
tests/modules/programs/fish/completions.nix
Normal file
45
tests/modules/programs/fish/completions.nix
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
{ lib, pkgs, ... }:
|
||||||
|
let
|
||||||
|
myProg = pkgs.writeText "my-prog.fish" ''
|
||||||
|
complete -c myprog -s o -l output
|
||||||
|
'';
|
||||||
|
|
||||||
|
myApp = pkgs.writeText "my-app.fish" ''
|
||||||
|
complete -c myapp -s -v
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
programs.fish = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
completions = {
|
||||||
|
my-prog = ''
|
||||||
|
complete -c myprog -s o -l output
|
||||||
|
'';
|
||||||
|
my-app = {
|
||||||
|
body = ''
|
||||||
|
complete -c myapp -s -v
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.dataFile."fish/home-manager_generated_completions".source = lib.mkForce (
|
||||||
|
builtins.toFile "empty" ""
|
||||||
|
);
|
||||||
|
|
||||||
|
nmt = {
|
||||||
|
description = "if fish.completions is set, check file exists and contents match";
|
||||||
|
script = ''
|
||||||
|
assertFileExists home-files/.config/fish/completions/my-prog.fish
|
||||||
|
echo ${myProg}
|
||||||
|
assertFileContent home-files/.config/fish/completions/my-prog.fish ${myProg}
|
||||||
|
|
||||||
|
assertFileExists home-files/.config/fish/completions/my-app.fish
|
||||||
|
echo ${myApp}
|
||||||
|
assertFileContent home-files/.config/fish/completions/my-app.fish ${myApp}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
fish-abbrs = ./abbrs.nix;
|
fish-abbrs = ./abbrs.nix;
|
||||||
fish-format-scripts = ./format-scripts.nix;
|
fish-format-scripts = ./format-scripts.nix;
|
||||||
fish-functions = ./functions.nix;
|
fish-functions = ./functions.nix;
|
||||||
|
fish-completions = ./completions.nix;
|
||||||
fish-no-functions = ./no-functions.nix;
|
fish-no-functions = ./no-functions.nix;
|
||||||
fish-plugins = ./plugins.nix;
|
fish-plugins = ./plugins.nix;
|
||||||
fish-manpage = ./manpage.nix;
|
fish-manpage = ./manpage.nix;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue