Files
home-manager/tests/modules/programs/zsh/plugins.nix
Austin Horstman c7e4087b4d zsh: rename plugin completions to functions
The option appended directories to fpath, but fpath is zsh's lookup path for all autoloadable functions, not just completion functions.

Rename the option to functions with mkRenamedOptionModule so existing completions users are migrated through the standard Home Manager deprecation path.

Link: https://github.com/nix-community/home-manager/discussions/8701#discussioncomment-16966141
2026-06-01 21:22:13 -05:00

54 lines
2.3 KiB
Nix

{ pkgs, ... }:
let
mockZshPluginSrc = pkgs.writeText "mockZshPluginSrc" "echo example";
in
{
config = {
programs.zsh = {
enable = true;
plugins = [
{
name = "mockPlugin";
file = "share/mockPlugin/mockPlugin.plugin.zsh";
src = mockZshPluginSrc;
functions = [
"share/zsh/site-functions"
"share/zsh/vendor-completions"
];
}
];
};
test.stubs.zsh = { };
nmt.script = ''
# Test the plugin directories loop structure
assertFileContains home-files/.zshrc '# Add plugin directories to PATH and fpath'
assertFileContains home-files/.zshrc 'plugin_dirs=('
assertFileContains home-files/.zshrc 'mockPlugin'
assertFileContains home-files/.zshrc 'for plugin_dir in "''${plugin_dirs[@]}"; do'
assertFileContains home-files/.zshrc 'path+="/home/hm-user/.zsh/plugins/$plugin_dir"'
assertFileContains home-files/.zshrc 'fpath+="/home/hm-user/.zsh/plugins/$plugin_dir"'
assertFileContains home-files/.zshrc '$plugin_dir/share/zsh/plugins/$plugin_dir'
assertFileContains home-files/.zshrc '$plugin_dir/share/zsh/site-functions'
assertFileContains home-files/.zshrc '$plugin_dir/share/zsh/vendor-completions'
# Test the completion paths loop structure
assertFileContains home-files/.zshrc '# Add additional function paths to fpath'
assertFileContains home-files/.zshrc 'function_paths=('
assertFileContains home-files/.zshrc 'mockPlugin/share/zsh/site-functions'
assertFileContains home-files/.zshrc 'mockPlugin/share/zsh/vendor-completions'
assertFileContains home-files/.zshrc 'for function_path in "''${function_paths[@]}"; do'
assertFileContains home-files/.zshrc 'fpath+="/home/hm-user/.zsh/plugins/$function_path"'
# Test the plugin loading structure
assertFileContains home-files/.zshrc '# Source plugins'
assertFileContains home-files/.zshrc 'plugins=('
assertFileContains home-files/.zshrc 'mockPlugin/share/mockPlugin/mockPlugin.plugin.zsh'
assertFileContains home-files/.zshrc 'for plugin in "''${plugins[@]}"; do'
assertFileContains home-files/.zshrc '[[ -f "/home/hm-user/.zsh/plugins/$plugin" ]] && source "/home/hm-user/.zsh/plugins/$plugin"'
'';
};
}