mirror of
https://github.com/nix-community/home-manager.git
synced 2025-11-08 19:46:05 +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
|
|
@ -0,0 +1,57 @@
|
|||
typeset -U path cdpath fpath manpath
|
||||
for profile in ${(z)NIX_PROFILES}; do
|
||||
fpath+=($profile/share/zsh/site-functions $profile/share/zsh/$ZSH_VERSION/functions $profile/share/zsh/vendor-completions)
|
||||
done
|
||||
|
||||
HELPDIR="@zsh@/share/zsh/$ZSH_VERSION/help"
|
||||
|
||||
autoload -U compinit && compinit
|
||||
# History options should be set in .zshrc and after oh-my-zsh sourcing.
|
||||
# See https://github.com/nix-community/home-manager/issues/177.
|
||||
HISTSIZE="10000"
|
||||
SAVEHIST="10000"
|
||||
|
||||
HISTFILE="/home/hm-user/.zsh_history"
|
||||
mkdir -p "$(dirname "$HISTFILE")"
|
||||
|
||||
setopt HIST_FCNTL_LOCK
|
||||
|
||||
# Enabled history options
|
||||
enabled_opts=(
|
||||
HIST_IGNORE_DUPS HIST_IGNORE_SPACE SHARE_HISTORY
|
||||
)
|
||||
for opt in "${enabled_opts[@]}"; do
|
||||
setopt "$opt"
|
||||
done
|
||||
unset opt enabled_opts
|
||||
|
||||
# Disabled history options
|
||||
disabled_opts=(
|
||||
APPEND_HISTORY EXTENDED_HISTORY HIST_EXPIRE_DUPS_FIRST HIST_FIND_NO_DUPS
|
||||
HIST_IGNORE_ALL_DUPS HIST_SAVE_NO_DUPS
|
||||
)
|
||||
for opt in "${disabled_opts[@]}"; do
|
||||
unsetopt "$opt"
|
||||
done
|
||||
unset opt disabled_opts
|
||||
|
||||
source @zsh-history-substring-search@/share/zsh-history-substring-search/zsh-history-substring-search.zsh
|
||||
|
||||
# Bind search up keys
|
||||
search_up_keys=(
|
||||
'^[[A' '\eOA'
|
||||
)
|
||||
for key in "${search_up_keys[@]}"; do
|
||||
bindkey "$key" history-substring-search-up
|
||||
done
|
||||
unset key search_up_keys
|
||||
|
||||
# Bind search down keys
|
||||
search_down_keys=(
|
||||
'^[[B'
|
||||
)
|
||||
for key in "${search_down_keys[@]}"; do
|
||||
bindkey "$key" history-substring-search-down
|
||||
done
|
||||
unset key search_down_keys
|
||||
|
||||
|
|
@ -11,10 +11,8 @@
|
|||
};
|
||||
};
|
||||
|
||||
# Written with regex to ensure we don't end up missing newlines in the future
|
||||
nmt.script = ''
|
||||
assertFileRegex home-files/.zshrc "^bindkey \"\^\[\[B\" history-substring-search-down$"
|
||||
assertFileRegex home-files/.zshrc "^bindkey \"\^\[\[A\" history-substring-search-up$"
|
||||
assertFileRegex home-files/.zshrc "^bindkey \"\\\\eOA\" history-substring-search-up$"
|
||||
assertFileExists home-files/.zshrc
|
||||
assertFileContent $(normalizeStorePaths home-files/.zshrc) ${./history-substring-search-expected.zshrc}
|
||||
'';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,9 +23,29 @@ in
|
|||
test.stubs.zsh = { };
|
||||
|
||||
nmt.script = ''
|
||||
assertFileRegex home-files/.zshrc '^path+="/home/hm-user/.zsh/plugins/mockPlugin"$'
|
||||
assertFileRegex home-files/.zshrc '^fpath+="/home/hm-user/.zsh/plugins/mockPlugin"$'
|
||||
assertFileRegex home-files/.zshrc '^fpath+=("/home/hm-user/.zsh/plugins/mockPlugin/share/zsh/site-functions" "/home/hm-user/.zsh/plugins/mockPlugin/share/zsh/vendor-completions")$'
|
||||
# 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"'
|
||||
|
||||
# Test the completion paths loop structure
|
||||
assertFileContains home-files/.zshrc '# Add completion paths to fpath'
|
||||
assertFileContains home-files/.zshrc 'completion_paths=('
|
||||
assertFileContains home-files/.zshrc 'mockPlugin/share/zsh/site-functions'
|
||||
assertFileContains home-files/.zshrc 'mockPlugin/share/zsh/vendor-completions'
|
||||
assertFileContains home-files/.zshrc 'for completion_path in "''${completion_paths[@]}"; do'
|
||||
assertFileContains home-files/.zshrc 'fpath+="/home/hm-user/.zsh/plugins/$completion_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"'
|
||||
assertFileContains home-files/.zshrc 'done'
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue