1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-12-02 23:21:02 +01:00

zsh/plugins: optimize plugin loading with array-based loops

Replace individual plugin PATH/fpath statements and conditional sourcing with
efficient array-based loops. Use lib.hm.zsh.define for consistent array
formatting and add unset statements to clean up temporary variables.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This commit is contained in:
Austin Horstman 2025-09-26 16:45:37 -05:00
parent bd81c11eb3
commit c26a2ac2e4
4 changed files with 116 additions and 29 deletions

View file

@ -102,31 +102,43 @@ in
initContent = lib.mkMerge [
(lib.mkOrder 560 (
lib.concatStrings (
map (plugin: ''
path+="${pluginsDir}/${plugin.name}"
fpath+="${pluginsDir}/${plugin.name}"
${
(lib.optionalString (plugin.completions != [ ]) ''
fpath+=(${
lib.concatMapStringsSep " " (
completion: "\"${pluginsDir}/${plugin.name}/${completion}\""
) plugin.completions
})
'')
}
'') cfg.plugins
)
let
pluginNames = map (plugin: plugin.name) cfg.plugins;
completionPaths = lib.flatten (
map (plugin: map (completion: "${plugin.name}/${completion}") plugin.completions) cfg.plugins
);
in
''
# Add plugin directories to PATH and fpath
${lib.hm.zsh.define "plugin_dirs" pluginNames}
for plugin_dir in "''${plugin_dirs[@]}"; do
path+="${pluginsDir}/$plugin_dir"
fpath+="${pluginsDir}/$plugin_dir"
done
unset plugin_dir plugin_dirs
${lib.optionalString (completionPaths != [ ]) ''
# Add completion paths to fpath
${lib.hm.zsh.define "completion_paths" completionPaths}
for completion_path in "''${completion_paths[@]}"; do
fpath+="${pluginsDir}/$completion_path"
done
unset completion_path completion_paths
''}
''
))
(lib.mkOrder 900 (
lib.concatStrings (
map (plugin: ''
if [[ -f "${pluginsDir}/${plugin.name}/${plugin.file}" ]]; then
source "${pluginsDir}/${plugin.name}/${plugin.file}"
fi
'') cfg.plugins
)
let
pluginPaths = map (plugin: "${plugin.name}/${plugin.file}") cfg.plugins;
in
''
# Source plugins
${lib.hm.zsh.define "plugins" pluginPaths}
for plugin in "''${plugins[@]}"; do
[[ -f "${pluginsDir}/$plugin" ]] && source "${pluginsDir}/$plugin"
done
unset plugin plugins
''
))
];
};