diff options
Diffstat (limited to 'home/zsh')
-rw-r--r-- | home/zsh/completion-style.zsh | 34 | ||||
-rw-r--r-- | home/zsh/default.nix | 56 | ||||
-rw-r--r-- | home/zsh/options.zsh | 27 | ||||
-rw-r--r-- | home/zsh/prompt.zsh | 11 | ||||
-rw-r--r-- | home/zsh/tmux.zsh | 3 |
5 files changed, 131 insertions, 0 deletions
diff --git a/home/zsh/completion-style.zsh b/home/zsh/completion-style.zsh new file mode 100644 index 0000000..32bd6f4 --- /dev/null +++ b/home/zsh/completion-style.zsh @@ -0,0 +1,34 @@ +# 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 '*?.old' + +# 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 new file mode 100644 index 0000000..0ee9e43 --- /dev/null +++ b/home/zsh/default.nix @@ -0,0 +1,56 @@ +{ config, pkgs, lib, ... }: +let cfg = config.my.home.zsh; +in { + options.my.home.zsh = with lib; { + enable = mkEnableOption "zsh configuration"; + }; + + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ zsh-completions ]; + + programs.zsh = { + enable = true; + dotDir = ".config/zsh"; + enableCompletion = true; + + history = { + size = 500000; + save = 500000; + extended = false; + ignoreSpace = true; + ignoreDups = true; + share = false; + # see + # https://github.com/nix-community/home-manager/blob/32a7da69dc53c9eb5ad0675eb7fdc58f7fe35272/modules/programs/zsh.nix#L537 + path = ".local/share/zsh/zsh_history"; + }; + + localVariables = { + # Print timing statistics for everything which takes longer than 5 seconds of + # user + system time. + REPORTTIME = 5; + }; + + shellAliases = { + ll = "ls -l --color=auto"; + lt = "ls -ltrh --color=auto"; + drone = "DRONE_TOKEN=$(pass api/drone.fcuny.xyz) drone"; + }; + + defaultKeymap = "emacs"; + + initExtraFirst = '' + if [ -z $DISPLAY ] && [ "$(tty)" = "/dev/tty1" ]; then + exec sway + fi + ''; + + initExtra = lib.concatMapStrings builtins.readFile [ + ./completion-style.zsh + ./options.zsh + ./prompt.zsh + ./tmux.zsh + ]; + }; + }; +} diff --git a/home/zsh/options.zsh b/home/zsh/options.zsh new file mode 100644 index 0000000..6d39bc1 --- /dev/null +++ b/home/zsh/options.zsh @@ -0,0 +1,27 @@ +# 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 + +# Append commands to history as they are exectuted +setopt inc_append_history_time + +# Remove useless whitespace from commands +setopt hist_reduce_blanks + +# Those options aren't wanted +unsetopt beep extendedglob notify + +# word select works like in bash +autoload -U select-word-style +select-word-style bash diff --git a/home/zsh/prompt.zsh b/home/zsh/prompt.zsh new file mode 100644 index 0000000..1c21d4b --- /dev/null +++ b/home/zsh/prompt.zsh @@ -0,0 +1,11 @@ +setopt prompt_subst + +PROMPT='%K{cyan}%F{black}%m%k%f %~ %% ' + +# For tramp (emacs). +if [ "$TERM" = "dumb" ]; then + unset PROMPT + PS1='$ ' + unsetopt zle +fi + diff --git a/home/zsh/tmux.zsh b/home/zsh/tmux.zsh new file mode 100644 index 0000000..4120512 --- /dev/null +++ b/home/zsh/tmux.zsh @@ -0,0 +1,3 @@ +if command -v tmux &> /dev/null && [ -z "$TMUX" ]; then + tmux attach -t default || tmux new -s default +fi |