diff --git a/home/zsh/completion-styles.zsh b/home/zsh/completion-styles.zsh new file mode 100644 index 0000000..a0181a5 --- /dev/null +++ b/home/zsh/completion-styles.zsh @@ -0,0 +1,29 @@ +# Style the completion a bit +zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} +# Show a prompt on selection +zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s' +# Use arrow keys in completion list +zstyle ':completion:*' menu select +# Group results by category +zstyle ':completion:*' group-name '' +# Keep directories and files separated +zstyle ':completion:*' list-dirs-first true +# Add colors to processes for kill completion +zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31' + +# match uppercase from lowercase +zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' + +# Filename suffixes to ignore during completion (except after rm command) +zstyle ':completion:*:*:(^rm):*:*files' ignored-patterns '*?.o' '*?.c~' '*?.old' '*?.pro' + +# command for process lists, the local web server details and host completion +# on processes completion complete all user processes +zstyle ':completion:*:processes' command 'ps -au$USER' + +# Completion formatting and messages +zstyle ':completion:*' verbose yes +zstyle ':completion:*:descriptions' format '%B%d%b' +zstyle ':completion:*:messages' format '%d' +zstyle ':completion:*:warnings' format 'No matches for: %d' +zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b' diff --git a/home/zsh/default.nix b/home/zsh/default.nix index 1c0beff..7a65c5c 100644 --- a/home/zsh/default.nix +++ b/home/zsh/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, pkgs, lib, ... }: { programs.zsh = { enable = true; @@ -28,50 +28,10 @@ # Modal editing is life, but CLI benefits from emacs gymnastics defaultKeymap = "emacs"; - initExtra = '' - # Show an error when a globbing expansion doesn't find any match - setopt nomatch - # List on ambiguous completion and Insert first match immediately - setopt autolist menucomplete - # Use pushd when cd-ing around - setopt autopushd pushdminus pushdsilent - # Use single quotes in string without the weird escape tricks - setopt rcquotes - # Single word commands can resume an existing job - setopt autoresume - # Those options aren't wanted - unsetopt beep extendedglob notify - - # Style the completion a bit - zstyle ':completion:*' list-colors ''${(s.:.)LS_COLORS} - # Show a prompt on selection - zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s' - # Use arrow keys in completion list - zstyle ':completion:*' menu select - # Group results by category - zstyle ':completion:*' group-name "" - # Keep directories and files separated - zstyle ': completion:*' list-dirs-first true - # Add colors to processes for kill completion - zstyle ': completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31' - - # match uppercase from lowercase - zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' - - # Filename suffixes to ignore during completion (except after rm command) - zstyle ':completion:*:*:(^rm):*:*files' ignored-patterns '*?.o' '*?.c~' '*?.old' '*?.pro' - - # command for process lists, the local web server details and host completion - # on processes completion complete all user processes - zstyle ':completion:*:processes' command 'ps -au$USER' - - # Completion formatting and messages - zstyle ':completion:*' verbose yes - zstyle ':completion:*:descriptions' format '%B%d%b' - zstyle ':completion:*:messages' format '%d' - zstyle ':completion:*:warnings' format 'No matches for: %d' - zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b' - ''; + initExtra = lib.concatMapStrings builtins.readFile [ + ./completion-styles.zsh + ./options.zsh + ]; }; # Fuzzy-wuzzy diff --git a/home/zsh/options.zsh b/home/zsh/options.zsh new file mode 100644 index 0000000..b02ca54 --- /dev/null +++ b/home/zsh/options.zsh @@ -0,0 +1,12 @@ +# Show an error when a globbing expansion doesn't find any match +setopt nomatch +# List on ambiguous completion and Insert first match immediately +setopt autolist menucomplete +# Use pushd when cd-ing around +setopt autopushd pushdminus pushdsilent +# Use single quotes in string without the weird escape tricks +setopt rcquotes +# Single word commands can resume an existing job +setopt autoresume +# Those options aren't wanted +unsetopt beep extendedglob notify