mirror of
https://github.com/nix-community/home-manager.git
synced 2025-11-08 11:36: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 {
|
||||
options = {
|
||||
expansion = mkOption {
|
||||
|
|
@ -556,6 +567,28 @@ in
|
|||
<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 (
|
||||
|
|
@ -734,6 +767,20 @@ in
|
|||
};
|
||||
}) 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
|
||||
# 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-format-scripts = ./format-scripts.nix;
|
||||
fish-functions = ./functions.nix;
|
||||
fish-completions = ./completions.nix;
|
||||
fish-no-functions = ./no-functions.nix;
|
||||
fish-plugins = ./plugins.nix;
|
||||
fish-manpage = ./manpage.nix;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue