From 845d6253e6ab36b2743c8376fe8e59d6c40a45c2 Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Tue, 8 Sep 2020 09:57:10 +0200 Subject: [PATCH] Improve nix support. --- .gitmodules | 3 ++ zsh/.config/zsh/.zshrc | 55 +++++++++++++++++++-- zsh/.config/zsh/plugins/nix-zsh-completions | 1 + 3 files changed, 55 insertions(+), 4 deletions(-) create mode 160000 zsh/.config/zsh/plugins/nix-zsh-completions diff --git a/.gitmodules b/.gitmodules index 4dfcaa1..54b23bc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -40,3 +40,6 @@ [submodule "zsh/.config/zsh/plugins/zsh-you-should-use"] path = zsh/.config/zsh/plugins/zsh-you-should-use url = https://github.com/MichaelAquilina/zsh-you-should-use.git +[submodule "zsh/.config/zsh/plugins/nix-zsh-completions"] + path = zsh/.config/zsh/plugins/nix-zsh-completions + url = https://github.com/spwhitt/nix-zsh-completions.git diff --git a/zsh/.config/zsh/.zshrc b/zsh/.config/zsh/.zshrc index ce3bdc0..2587851 100644 --- a/zsh/.config/zsh/.zshrc +++ b/zsh/.config/zsh/.zshrc @@ -45,6 +45,7 @@ unset keyfile plugins=( zsh-autosuggestions/zsh-autosuggestions.zsh zsh-you-should-use/you-should-use.plugin.zsh + nix-zsh-completions/nix-zsh-completions.plugin.zsh ) for plugin in "${plugins[@]}"; do @@ -53,6 +54,8 @@ for plugin in "${plugins[@]}"; do fi done +fpath+=("$ZDOTDIR/plugins/nix-zsh-completions") + ## Autosuggest plugin configuration # Consider autocomplete in completion @@ -74,6 +77,7 @@ alias :q='exit' alias wget="wget --hsts-file=\"$XDG_CACHE_HOME/wget-hsts\"" alias makej="make -j$(nproc)" alias sdc='sudo docker-compose' +alias nrc='nix run -c' # Not an alias but useful nonetheless. function pasters() { @@ -130,10 +134,28 @@ zle -N history-incremental-search-backward-end history-search-end [[ -n "${key[PageDown]}" ]] && bindkey "${key[PageDown]}" history-beginning-search-forward bindkey '^R' history-incremental-search-backward-end -# Syntax highlighting, if available. -if [[ -f /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]]; then - source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -fi +# Load optional plugins if installed on the host system. +find_system_plugin() { + local plugin=$1 + local plugin_dirs=( + /usr/share/zsh/plugins + /usr/share + ) + local dir + + for dir in "${plugin_dirs[@]}"; do + if [[ -f "$dir/$plugin/$plugin.zsh" ]]; then + echo "$dir/$plugin/$plugin.zsh" + return + fi + done + + # Safe placeholder + echo /dev/null +} + + +source $(find_system_plugin zsh-syntax-highlighting) # Home and end keys working bindkey "${key[Home]}" beginning-of-line @@ -235,3 +257,28 @@ add-zsh-hook chpwd chpwd_recent_dirs if (( $+commands[lesspipe] )); then eval "$(lesspipe)" fi + +############################ +# Special SSH key handling # +############################ + +if [[ -f ~/.ssh/id_ed25519 ]]; then + # gnome-keyring doesn't handle ed25519 keys properly; try setting up an alternative agent. + export SSH_ENV="$HOME/.ssh/environment" + + start_agent() { + echo "Initialising new SSH agent..." + /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" + echo Succeeded + chmod 600 "${SSH_ENV}" + . "${SSH_ENV}" > /dev/null + /usr/bin/ssh-add ~/.ssh/google_compute_engine >/dev/null 2>&1 + } + + if [ -f "${SSH_ENV}" ]; then + . "${SSH_ENV}" > /dev/null + kill -0 "$SSH_AGENT_PID" 2>/dev/null || { start_agent; } + else + start_agent + fi +fi diff --git a/zsh/.config/zsh/plugins/nix-zsh-completions b/zsh/.config/zsh/plugins/nix-zsh-completions new file mode 160000 index 0000000..d9f48b9 --- /dev/null +++ b/zsh/.config/zsh/plugins/nix-zsh-completions @@ -0,0 +1 @@ +Subproject commit d9f48b9be5d7ef8b0cfb43e08f9dd820d9e125ac