From 52e42f959abb15e425b34ffbd31d7f32a6129636 Mon Sep 17 00:00:00 2001 From: Franck Cuny Date: Sun, 15 May 2022 14:53:30 -0700 Subject: zsh: switch to zsh as the default shell `zsh' is available everywhere and is compatible with bash. When using `fish' I need to remember how to do things. While the completion style is nicer, I don't care about the rest. I prefer to have a consistent experience in the shell, no matter where am I. This is an initial configuration, I might need to make a few changes as I go. --- home/zsh/completion-style.zsh | 34 ++++++++++++++++++++++++++++++++++ home/zsh/default.nix | 42 ++++++++++++++++++++++++++++++++++++++++++ home/zsh/options.zsh | 23 +++++++++++++++++++++++ home/zsh/prompt.zsh | 4 ++++ 4 files changed, 103 insertions(+) create mode 100644 home/zsh/completion-style.zsh create mode 100644 home/zsh/default.nix create mode 100644 home/zsh/options.zsh create mode 100644 home/zsh/prompt.zsh (limited to 'home/zsh') 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..cc19579 --- /dev/null +++ b/home/zsh/default.nix @@ -0,0 +1,42 @@ +{ 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; + path = "${config.xdg.dataHome}/zsh/zsh_history"; + }; + + localVariables = { + # Print timing statistics for everything which takes longer than 5 seconds of + # user + system time. + REPORTTIME = 5; + }; + + defaultKeymap = "emacs"; + initExtra = lib.concatMapStrings builtins.readFile [ + ./completion-style.zsh + ./options.zsh + ./prompt.zsh + ]; + + }; + programs.dircolors = { enable = true; }; + }; +} diff --git a/home/zsh/options.zsh b/home/zsh/options.zsh new file mode 100644 index 0000000..84ae8da --- /dev/null +++ b/home/zsh/options.zsh @@ -0,0 +1,23 @@ +# 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 diff --git a/home/zsh/prompt.zsh b/home/zsh/prompt.zsh new file mode 100644 index 0000000..1f92aa3 --- /dev/null +++ b/home/zsh/prompt.zsh @@ -0,0 +1,4 @@ +fg_green=$'%{\e[1;32m%}' +fg_no_colour=$'%{\e[0m%}' + +PROMPT="%K{cyan}%F{black}%m%k%f ${fg_green}%~${fg_no_colour} %% " -- cgit 1.4.1