mirror of
https://github.com/nix-community/home-manager.git
synced 2026-01-11 17:39:37 +08:00
zsh: option to define autoloadable site-functions (#7611)
Add an option to the Zsh module that allows defining autoloadable site functions.
This commit is contained in:
@@ -325,6 +325,23 @@ in
|
||||
To unset an option, prefix it with "NO_".
|
||||
'';
|
||||
};
|
||||
|
||||
siteFunctions = mkOption {
|
||||
type = types.attrsOf types.lines;
|
||||
default = { };
|
||||
description = ''
|
||||
Functions that are added to the Zsh environment and are subject to
|
||||
{command}`autoload`ing. The key is the name and the value is the body of
|
||||
the function to be autoloaded.
|
||||
|
||||
They are also already marked for autoloading through `autoload -Uz`.
|
||||
'';
|
||||
example = {
|
||||
mkcd = ''
|
||||
mkdir --parents "$1" && cd "$1"
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -409,6 +426,15 @@ in
|
||||
'';
|
||||
})
|
||||
|
||||
(lib.mkIf (cfg.siteFunctions != { }) {
|
||||
home.packages = lib.mapAttrsToList (
|
||||
name: pkgs.writeTextDir "share/zsh/site-functions/${name}"
|
||||
) cfg.siteFunctions;
|
||||
programs.zsh.initContent = concatStringsSep " " (
|
||||
[ "autoload -Uz" ] ++ lib.attrNames cfg.siteFunctions
|
||||
);
|
||||
})
|
||||
|
||||
{
|
||||
home.file."${dotDirRel}/.zshenv".text = ''
|
||||
# Environment variables
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
zsh-history-path-xdg-variable = import ./history-path.nix "xdg-variable";
|
||||
zsh-history-path-zdotdir-variable = import ./history-path.nix "zdotdir-variable";
|
||||
zsh-history-substring-search = ./history-substring-search.nix;
|
||||
zsh-siteFunctions-mkcd = ./siteFunctions-mkcd.nix;
|
||||
zsh-plugins = ./plugins.nix;
|
||||
zsh-prezto = ./prezto.nix;
|
||||
zsh-session-variables = ./session-variables.nix;
|
||||
|
||||
17
tests/modules/programs/zsh/siteFunctions-mkcd.nix
Normal file
17
tests/modules/programs/zsh/siteFunctions-mkcd.nix
Normal file
@@ -0,0 +1,17 @@
|
||||
let
|
||||
body = ''
|
||||
mkdir --parents "$1" && cd "$1"
|
||||
'';
|
||||
in
|
||||
{
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
siteFunctions.mkcd = body;
|
||||
};
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-path/share/zsh/site-functions/mkcd
|
||||
assertFileContent home-path/share/zsh/site-functions/mkcd ${builtins.toFile "mkcd" body}
|
||||
assertFileContains home-files/.zshrc "autoload -Uz mkcd"
|
||||
'';
|
||||
}
|
||||
Reference in New Issue
Block a user