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:
parent
bd81c11eb3
commit
c26a2ac2e4
4 changed files with 116 additions and 29 deletions
|
|
@ -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
|
||||
''
|
||||
))
|
||||
];
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue