From 2c628011e1a4389948491e0ed8903e03bdf45c31 Mon Sep 17 00:00:00 2001 From: Patryk Niedźwiedziński Date: Mon, 14 Dec 2020 08:59:26 +0100 Subject: Add zsh config --- machines/base.nix | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) (limited to 'machines/base.nix') diff --git a/machines/base.nix b/machines/base.nix index e56c663..0d204b3 100755 --- a/machines/base.nix +++ b/machines/base.nix @@ -1,11 +1,12 @@ ## Base setup, absolute minimum -{ pkgs, ... }: +{ pkgs, config, ... }: { imports = [ ../modules/nur.nix ../users/pn.nix + ../modules/internet.nix ]; boot.cleanTmpDir = true; @@ -18,6 +19,14 @@ console.font = "${pkgs.terminus_font}/share/consolefonts/ter-v22n"; + environment.shellAliases = { + gs = "git status"; + gc = "git commit"; + ga = "git add"; + gl = "git log"; + gd = "git diff"; + }; + ## === XDG === environment.variables = { XDG_CONFIG_HOME = "$HOME/.config"; @@ -52,6 +61,91 @@ histFile = "$XDG_DATA_HOME/zsh/history"; syntaxHighlighting.enable = true; + + promptInit = '' + autoload -U colors && colors + PS1="%B%{$fg[red]%}[%{$fg[yellow]%}%n%{$fg[green]%}@%{$fg[blue]%}%M %{$fg[magenta]%}%~%{$fg[red]%}]%{$reset_color%}$%b " + ''; + + interactiveShellInit = '' + setopt autocd # Automatically cd into typed directory. + stty stop undef # Disable ctrl-s to freeze terminal. + setopt interactive_comments + + # History in cache directory: + HISTSIZE=10000000 + SAVEHIST=10000000 + + # Load aliases and shortcuts if existent. + [ -f "''\${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc" ] && source "''\${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc" + [ -f "''\${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc" ] && source "''\${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc" + [ -f "''\${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" ] && source "''\${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" + + # Basic auto/tab complete: + autoload -U compinit + zstyle ':completion:*' menu select + zmodload zsh/complist + compinit + _comp_options+=(globdots) # Include hidden files. + + # vi mode + bindkey -v + export KEYTIMEOUT=1 + + # Use vim keys in tab complete menu: + bindkey -M menuselect 'h' vi-backward-char + bindkey -M menuselect 'k' vi-up-line-or-history + bindkey -M menuselect 'l' vi-forward-char + bindkey -M menuselect 'j' vi-down-line-or-history + bindkey '^R' history-incremental-search-backward + bindkey -v '^?' backward-delete-char + + # Change cursor shape for different vi modes. + function zle-keymap-select { + if [[ ''\${KEYMAP} == vicmd ]] || + [[ $1 = 'block' ]]; then + echo -ne '\e[1 q' + elif [[ ''\${KEYMAP} == main ]] || + [[ ''\${KEYMAP} == viins ]] || + [[ ''\${KEYMAP} = "" ]] || + [[ $1 = 'beam' ]]; then + echo -ne '\e[5 q' + fi + } + zle -N zle-keymap-select + zle-line-init() { + zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere) + echo -ne "\e[5 q" + } + zle -N zle-line-init + echo -ne '\e[5 q' # Use beam shape cursor on startup. + preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt. + + # Use lf to switch directories and bind it to ctrl-o + lfcd () { + tmp="$(mktemp)" + lf -last-dir-path="$tmp" "$@" + if [ -f "$tmp" ]; then + dir="$(cat "$tmp")" + rm -f "$tmp" >/dev/null + [ -d "$dir" ] && [ "$dir" != "$(pwd)" ] && cd "$dir" + fi + } + bindkey -s '^o' 'lfcd\n' + + bindkey -s '^a' 'bc -lq\n' + + bindkey -s '^f' 'cd "$(dirname "$(fzf)")"\n' + + bindkey '^[[P' delete-char + + # Edit line in vim with ctrl-e: + autoload edit-command-line; zle -N edit-command-line + bindkey '^e' edit-command-line + ''; + + + }; } -- cgit 1.4.1