From 25a4a6076cae99cbb8b53737dbf0f5418d64a0d9 Mon Sep 17 00:00:00 2001 From: whiteman808 Date: Fri, 13 Feb 2026 10:19:45 +0100 Subject: [PATCH] refactor code and add fallback prompt to zsh --- install | 95 ++++++++----------- profiles/base/.bash/conf.d/03-emacs.bash | 3 +- profiles/base/.bash/conf.d/04-env.bash | 6 +- .../.bash/conf.d/06-tool-integrations.bash | 40 ++------ profiles/base/.bash/conf.d/07-aliases.bash | 34 +++---- profiles/base/.local/bin/check_ip | 26 +++-- profiles/base/.tmux.conf | 3 + profiles/base/.zsh/conf.d/00-base.zsh | 4 +- profiles/base/.zsh/conf.d/01-prompt.zsh | 13 --- ...-keybindings.zsh => 01-vi-keybindings.zsh} | 10 +- profiles/base/.zsh/conf.d/02-prompt.zsh | 19 ++++ profiles/base/.zsh/conf.d/03-plugins.zsh | 7 +- profiles/base/.zsh/conf.d/04-emacs.zsh | 3 +- profiles/base/.zsh/conf.d/05-env.zsh | 6 +- profiles/base/.zsh/conf.d/06-color-output.zsh | 2 +- .../base/.zsh/conf.d/07-tool-integrations.zsh | 56 ++++------- profiles/base/.zsh/conf.d/08-aliases.zsh | 2 +- profiles/base/.zsh/conf.d/09-functions.zsh | 2 +- profiles/base/.zsh/prompt/fallback.zsh | 8 ++ 19 files changed, 150 insertions(+), 189 deletions(-) delete mode 100644 profiles/base/.zsh/conf.d/01-prompt.zsh rename profiles/base/.zsh/conf.d/{02-vi-keybindings.zsh => 01-vi-keybindings.zsh} (83%) create mode 100644 profiles/base/.zsh/conf.d/02-prompt.zsh create mode 100644 profiles/base/.zsh/prompt/fallback.zsh diff --git a/install b/install index ca208a3..2b86d0b 100755 --- a/install +++ b/install @@ -1,30 +1,25 @@ #!/usr/bin/env bash -set -o errexit -set -o pipefail -set -o nounset - -SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" \ - || exit 1 +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd) readonly SCRIPT_DIR -readonly PROFILES_DIR="${SCRIPT_DIR}/profiles" -readonly -a STOW_ARGS=("--no-folding" "--adopt" "--dir" "${PROFILES_DIR}" "--target" "${HOME}") -readonly SCRIPT_NAME="${0##*/}" +readonly PROFILES_DIR=${SCRIPT_DIR}/profiles +readonly -a STOW_ARGS=(--no-folding --adopt --dir "${PROFILES_DIR}" --target "${HOME}") +readonly SCRIPT_NAME=${0##*/} print_opt() { - local -r option="$1" - local -r description="$2" + local -r option=$1 + local -r description=$2 printf " %-22s %s\n" "${option}" "${description}" } shell_quote() { - local -r string="$1" + local -r string=$1 printf "'%s'" "${string//'/'\\''}" } array_contains() { - local -r target_item="$1"; shift - local -a -r array=( "$@" ) + local -r target_item=$1; shift + local -a -r array=("$@") local item for item in "${array[@]}"; do if [[ ${item} == "${target_item}" ]]; then @@ -35,13 +30,13 @@ array_contains() { } die() { - local -r message="$1" + local -r message=$1 printf "%s: %b\n" "${SCRIPT_NAME}" "${message}" >&2 exit 1 } invalid_option() { - local -r option="$1" + local -r option=$1 die "invalid option $(shell_quote "${option}")\nTry '${SCRIPT_NAME} --help' for usage." } @@ -69,7 +64,7 @@ EOF } require_profiles_dir() { - if [[ ! -d "${PROFILES_DIR}" ]]; then + if [[ ! -d ${PROFILES_DIR} ]]; then cat >&2 < 0 )); do - case "$1" in + case $1 in -h) show_general_help exit 0 ;; --help) - if (( $# >= 2 )) && [[ -n $2 ]] && [[ $2 != -* ]]; then + if (( $# >= 2 )) && [[ $2 ]] && [[ $2 != -* ]]; then show_help_topic "$2" else show_general_help @@ -108,17 +99,17 @@ parse_args() { exit 0 ;; --help=*) - local -r topic="${1#*=}" + local -r topic=${1#*=} [[ -z ${topic} ]] && show_general_help && exit 0 show_help_topic "${topic}" exit 0 ;; - -l|--list-profiles) list_profiles="true"; shift ;; - -P|--prune-symlinks) prune_symlinks="true"; shift ;; - -v|--verbose) verbose="true"; shift ;; + -l|--list-profiles) list_profiles=true; shift ;; + -P|--prune-symlinks) prune_symlinks=true; shift ;; + -v|--verbose) verbose=true; shift ;; -p|--profile) ( (( $# < 2 )) || [[ -z "$2" ]] ) && die "--profile requires an argument" - profile="$2" + profile=$2 shift 2 ;; *) invalid_option "$1" ;; @@ -131,7 +122,7 @@ validate_args() { die "options '--list-profiles' and others cannot be used together" fi - if [[ -n ${profile} ]] && ! array_contains "${profile}" "${PROFILES[@]}"; then + if [[ ${profile} ]] && ! array_contains "${profile}" "${PROFILES[@]}"; then die "profile $(shell_quote "${profile}") cannot be found" fi } @@ -157,8 +148,8 @@ show_general_help() { } show_help_topic() { - local topic="$1" - case "${topic}" in + local topic=$1 + case ${topic} in profile) cat </dev/null + pushd "${HOME}" >/dev/null || exit 1 local common_files - local -r target_profile="$1" + local -r target_profile=$1 mapfile -t common_files < <(comm -12 <(find "${HOME}" -type l -printf '%P\n' 2>/dev/null | sort) \ <(find "${PROFILES_DIR}/${target_profile}" -type f -printf '%P\n' | sort)) local target_file for target_file in "${common_files[@]}"; do - local -a rm_args=( "--force" ) - [[ ${verbose} ]] && rm_args+=( "--verbose" ) - rm "${rm_args[@]}" "${target_file}" + local -a rm_args=(--force) + [[ ${verbose} ]] && rm_args+=(--verbose) + rm "${rm_args[@]}" -- "${target_file}" done - popd >/dev/null + popd >/dev/null || exit 1 echo "OK" } stow_profile() { - local -r target_profile="$1" - local error_log - error_log="$(stow "${STOW_ARGS[@]}" "${target_profile}" 2>&1)" - if (( $? == 0 )); then + local -r target_profile=$1 + if stow "${STOW_ARGS[@]}" "${target_profile}" 2>&1; then echo "Profile ${target_profile} has been stowed" else echo "Failed to create symlinks pointing to dotfiles in profile ${target_profile}" - echo "Executed command: stow ${STOW_ARGS[*]} ${target_profile}" - fi - if [[ -n "${error_log}" ]]; then - echo "${error_log}" > /tmp/stow-error.log - [[ ${verbose} ]] && echo "${error_log}" - echo "Error log has been saved into /tmp/stow-error.log" fi } fetch_parents() { - local -r target_profile="$1" - if [[ -s "${PROFILES_DIR}/${target_profile}/parent" ]]; then + local -r target_profile=$1 + if [[ -s ${PROFILES_DIR}/${target_profile}/parent ]]; then local parent parent=$(cat "${PROFILES_DIR}/${target_profile}/parent") - if [[ -s "${PROFILES_DIR}/${parent}/parent" ]]; then + if [[ -s ${PROFILES_DIR}/${parent}/parent ]]; then fetch_parents "${parent}" fi echo "${parent}" @@ -251,7 +234,7 @@ fetch_parents() { } build_deptree() { - local -r target_profile="$1" + local -r target_profile=$1 fetch_parents "${target_profile}" echo "${target_profile}" } @@ -272,7 +255,7 @@ main() { require_profiles_dir (( $# == 0 )) && show_general_help && exit 1 validate_args - [[ -n ${list_profiles} ]] && echo "${PROFILES[@]}" && exit 0 + [[ ${list_profiles} ]] && echo "${PROFILES[@]}" && exit 0 install_dotfiles } diff --git a/profiles/base/.bash/conf.d/03-emacs.bash b/profiles/base/.bash/conf.d/03-emacs.bash index b0bb7cc..35f9677 100644 --- a/profiles/base/.bash/conf.d/03-emacs.bash +++ b/profiles/base/.bash/conf.d/03-emacs.bash @@ -1,5 +1,4 @@ # emacs specific stuff # shellcheck source=/dev/null -[[ -n "${EAT_SHELL_INTEGRATION_DIR}" ]] && \ - source "${EAT_SHELL_INTEGRATION_DIR}/bash" +[[ ${EAT_SHELL_INTEGRATION_DIR} ]] && . "${EAT_SHELL_INTEGRATION_DIR}/bash" diff --git a/profiles/base/.bash/conf.d/04-env.bash b/profiles/base/.bash/conf.d/04-env.bash index f497931..0d47173 100644 --- a/profiles/base/.bash/conf.d/04-env.bash +++ b/profiles/base/.bash/conf.d/04-env.bash @@ -1,5 +1,5 @@ # Set environment variables -if command -v nvim &> /dev/null; then +if command -v nvim >/dev/null 2>&1; then export EDITOR="nvim" else export EDITOR="vim" @@ -21,7 +21,7 @@ export GPGKEY="4A45503BBE575E3D4DAF28E27264AFFDC98D52BB" # gpg-agent unset SSH_AGENT_PID -if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then - SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket 2>/dev/null)" +if [[ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne "$$" ]]; then + SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket 2>/dev/null) export SSH_AUTH_SOCK fi diff --git a/profiles/base/.bash/conf.d/06-tool-integrations.bash b/profiles/base/.bash/conf.d/06-tool-integrations.bash index 50bdd17..026da22 100644 --- a/profiles/base/.bash/conf.d/06-tool-integrations.bash +++ b/profiles/base/.bash/conf.d/06-tool-integrations.bash @@ -1,13 +1,13 @@ # better ls -if type "eza" > /dev/null; then - alias ll='eza -bghHlS' +if command -v eza >/dev/null 2>&1; then + alias ll="eza -bghHlS" else - alias ll='exa -bghHlS' + alias ll="exa -bghHlS" fi # bat (debian) -if type "batcat" >/dev/null 2>&1; then - alias bat='batcat' +if command -v batcat >/dev/null 2>&1; then + alias bat=batcat fi # HSTR configuration - add this to ~/.bashrc @@ -18,7 +18,7 @@ export HISTCONTROL=ignorespace # leading space hides commands from history export HISTFILESIZE=10000 # increase history file size (default is 500) export HISTSIZE=${HISTFILESIZE} # increase history size (default is 500) # ensure synchronization between bash memory and history file -export PROMPT_COMMAND=( "history -a; history -n;" "${PROMPT_COMMAND[@]}" ) +export PROMPT_COMMAND=("history -a; history -n;" "${PROMPT_COMMAND[@]}") function hstrnotiocsti { { READLINE_LINE="$( { &1 1>&3 3>&- )"; } 3>&1; READLINE_POINT=${#READLINE_LINE} @@ -27,31 +27,11 @@ function hstrnotiocsti { if [[ $- =~ .*i.* ]]; then bind -x '"\C-r": "hstrnotiocsti"'; fi export HSTR_TIOCSTI=n -# lf -lfwrapper() { - command lf "$@" - - # cleanup - awk '$1 == "archivemount" { print $2 }' /etc/mtab | while read -r mntdir; do - sanitized_input="$(printf "${mntdir}")" # /etc/mtab uses octal representation of spaces (possible other symbols too), printf would convert octal representation, so that it can be used in the umount & rmdir commands. - umount "${sanitized_input}" - rmdir "${sanitized_input}" - done -} - -lfcd() { - dir="$(lfwrapper -print-last-dir "$@")" - while ! cd "${dir}" 2>/dev/null; do - dir="$(dirname -- "${dir}")" - done -} -alias lf=lfcd - # ranger ranger_cd() { - temp_file="$(mktemp -t "ranger_cd.XXXXXXXXXX")" + temp_file=$(mktemp -t "ranger_cd.XXXXXXXXXX") ranger --choosedir="${temp_file}" -- "${@:-${PWD}}" - if chosen_dir="$(cat -- "${temp_file}")" && [ -n "${chosen_dir}" ] && [ "${chosen_dir}" != "${PWD}" ]; then + if chosen_dir="$(cat -- "${temp_file}")" && [[ "${chosen_dir}" ]] && [[ "${chosen_dir}" != "${PWD}" ]]; then cd -- "${chosen_dir}" || exit 1 fi rm -f -- "${temp_file}" @@ -61,8 +41,8 @@ alias ranger=ranger_cd # mc # shellcheck source=/dev/null -[[ -f "/usr/libexec/mc/mc.sh" ]] && source "/usr/libexec/mc/mc.sh" -[[ -f "/usr/lib/mc/mc.sh" ]] && source "/usr/lib/mc/mc.sh" +[[ -f /usr/libexec/mc/mc.sh ]] && . /usr/libexec/mc/mc.sh +[[ -f /usr/lib/mc/mc.sh ]] && . /usr/lib/mc/mc.sh # inside tmux, we don't know if Sway got restarted if [[ -v TMUX ]]; then diff --git a/profiles/base/.bash/conf.d/07-aliases.bash b/profiles/base/.bash/conf.d/07-aliases.bash index c2286df..80633a1 100644 --- a/profiles/base/.bash/conf.d/07-aliases.bash +++ b/profiles/base/.bash/conf.d/07-aliases.bash @@ -1,18 +1,18 @@ # useful commands -alias ncmpcpp='ncmpcpp -b ~/.config/ncmpcpp/bindings' -alias tb='nc termbin.com 9999' -alias mux='tmuxinator' -alias tm='tmuxinator start misc' -alias tq='tmuxinator start quake' -alias sudo='sudo ' -alias rsync_copy='rsync -aAXUHvh --partial-dir=.rsync-partial --progress' -alias rsync_copy_ssh='rsync_copy -e ssh' -alias rsync_backup='rsync_copy --numeric-ids --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"}' -alias rsync_backup_ssh='rsync_backup -e ssh' -alias rsync_restore='rsync_copy --numeric-ids --delete --exclude="lost+found"' -alias rsync_restore_ssh='rsync_restore -e ssh' -alias glog='git log --oneline' -alias emerge_world='emerge --ask --verbose --deep --newuse --update @world' -alias sync_repo='rsync_copy_ssh --delete ~/arch_paczuchy/* vps.paraboletancza.org:/srv/http/arch.paraboletancza.org' -alias aur_sync='aur sync --sign --chroot' -alias aur_build='aur build --sign --chroot' +alias ncmpcpp="ncmpcpp -b ~/.config/ncmpcpp/bindings" +alias tb="nc termbin.com 9999" +alias mux="tmuxinator" +alias tm="tmuxinator start misc" +alias tq="tmuxinator start quake" +alias sudo="sudo " +alias rsync_copy="rsync -aAXUHvh --partial-dir=.rsync-partial --progress" +alias rsync_copy_ssh="rsync_copy -e ssh" +alias rsync_backup="rsync_copy --numeric-ids --delete --exclude={'/dev/*','/proc/*','/sys/*','/tmp/*','/run/*','/mnt/*','/media/*','/lost+found'}" +alias rsync_backup_ssh="rsync_backup -e ssh" +alias rsync_restore="rsync_copy --numeric-ids --delete --exclude='lost+found'" +alias rsync_restore_ssh="rsync_restore -e ssh" +alias glog="git log --oneline" +alias emerge_world="emerge --ask --verbose --deep --newuse --update @world" +alias sync_repo="rsync_copy_ssh --delete ~/arch_paczuchy/* vps.paraboletancza.org:/srv/http/arch.paraboletancza.org" +alias aur_sync="aur sync --sign --chroot" +alias aur_build="aur build --sign --chroot" diff --git a/profiles/base/.local/bin/check_ip b/profiles/base/.local/bin/check_ip index 2387f6d..7546645 100755 --- a/profiles/base/.local/bin/check_ip +++ b/profiles/base/.local/bin/check_ip @@ -1,13 +1,9 @@ #!/usr/bin/env bash -set -o errexit -set -o pipefail -set -o nounset - -readonly SCRIPT_NAME="${0##*/}" +readonly SCRIPT_NAME=${0##*/} check_deps() { - command -v "curl" >/dev/null 2>&1 || die "curl: command not found" + command -v curl >/dev/null 2>&1 || die "curl: command not found" } usage() { @@ -26,18 +22,18 @@ EOF } shell_quote() { - local -r string="$1" + local -r string=$1 printf "'%s'" "${string//'/'\\''}" } die() { - local -r message="$1" + local -r message=$1 printf "%s: %b\n" "${SCRIPT_NAME}" "${message}" >&2 exit 1 } invalid_option() { - local -r option="$1" + local -r option=$1 die "invalid option $(shell_quote "${option}")\nTry '${SCRIPT_NAME} --help' for usage." } @@ -48,11 +44,11 @@ parse_args() { -h|--help) usage; exit 0 ;; --family) ( (( $# < 2 )) || [[ -z "$2" ]] ) && die "--family requires an argument (auto, 4 or 6)" - family="$2" + family=$2 shift 2 ;; --family=*) - family="${1#*=}" + family=${1#*=} [[ -z "${family}" ]] && die "--family requires an argument (auto, 4 or 6)" shift ;; @@ -63,7 +59,7 @@ parse_args() { } validate_args() { - case "${family}" in + case ${family} in auto|4|6) ;; *) die "invalid value for family: '${family}' (expected auto, 4 or 6)" esac @@ -71,9 +67,9 @@ validate_args() { show_ip() { local -a curl_args=() - [[ ${family} == "4" ]] && curl_args=( "-4" ) - [[ ${family} == "6" ]] && curl_args=( "-6" ) - curl "${curl_args[@]}" "zx2c4.com/ip" + [[ ${family} == "4" ]] && curl_args=("-4") + [[ ${family} == "6" ]] && curl_args=("-6") + curl "${curl_args[@]}" zx2c4.com/ip } main() { diff --git a/profiles/base/.tmux.conf b/profiles/base/.tmux.conf index c46c4dd..34d80fe 100644 --- a/profiles/base/.tmux.conf +++ b/profiles/base/.tmux.conf @@ -1,5 +1,8 @@ ## user experience related stuff +# preserve some environment variables +set-option -g update-environment "REAL_TERM" + # fix delay between switching modes in vim set -sg escape-time 20 diff --git a/profiles/base/.zsh/conf.d/00-base.zsh b/profiles/base/.zsh/conf.d/00-base.zsh index 9291114..23935e9 100644 --- a/profiles/base/.zsh/conf.d/00-base.zsh +++ b/profiles/base/.zsh/conf.d/00-base.zsh @@ -1,10 +1,10 @@ # Set PATH environment variable typeset -U path PATH -path=("${HOME}/.local/bin" "/usr/local/sbin" "/usr/local/bin" "/usr/sbin" "/sbin" "${path[@]}") +path=("${HOME}/.local/bin" /usr/local/sbin /usr/local/bin /usr/sbin /sbin "${path[@]}") export PATH # Configure shell history behavior -HISTFILE="${HOME}/.zsh_history" +HISTFILE=${HOME}/.zsh_history HISTSIZE=10000 SAVEHIST=10000 setopt appendhistory diff --git a/profiles/base/.zsh/conf.d/01-prompt.zsh b/profiles/base/.zsh/conf.d/01-prompt.zsh deleted file mode 100644 index edbc8dc..0000000 --- a/profiles/base/.zsh/conf.d/01-prompt.zsh +++ /dev/null @@ -1,13 +0,0 @@ -# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. -# Initialization code that may require console input (password prompts, [y/n] -# confirmations, etc.) must go above this block; everything else may go below. -if [[ -r "${XDG_CACHE_HOME:-${HOME}/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then - source "${XDG_CACHE_HOME:-${HOME}/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" -fi - -# plugins -source "${HOME}/.zsh/plugins/powerlevel10k/powerlevel10k.zsh-theme" -source "${HOME}/.zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh" - -# To customize prompt, run `p10k configure` or edit ~/.zsh/prompt/p10k.zsh. -[[ -f "${HOME}/.zsh/prompt/p10k.zsh" ]] && source "${HOME}/.zsh/prompt/p10k.zsh" diff --git a/profiles/base/.zsh/conf.d/02-vi-keybindings.zsh b/profiles/base/.zsh/conf.d/01-vi-keybindings.zsh similarity index 83% rename from profiles/base/.zsh/conf.d/02-vi-keybindings.zsh rename to profiles/base/.zsh/conf.d/01-vi-keybindings.zsh index 6b645a2..913f93b 100644 --- a/profiles/base/.zsh/conf.d/02-vi-keybindings.zsh +++ b/profiles/base/.zsh/conf.d/01-vi-keybindings.zsh @@ -14,19 +14,23 @@ bindkey '^U' backward-kill-line # Change cursor shape for different vi modes zle-keymap-select() { if [[ ${KEYMAP} == vicmd ]] || - [[ $1 = "block" ]]; then + [[ $1 == block ]]; then echo -ne '\e[4 q' + psvar[1]="(cmd) " elif [[ ${KEYMAP} == main ]] || [[ ${KEYMAP} == viins ]] || - [[ ${KEYMAP} == "" ]] || - [[ $1 == "beam" ]]; then + [[ -z ${KEYMAP} ]] || + [[ $1 == beam ]]; then echo -ne '\e[6 q' + psvar[1]="(ins) " fi + zle reset-prompt } 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[6 q' + psvar[1]="(ins) " } zle -N zle-line-init echo -ne '\e[6 q' # Use beam shape cursor on startup diff --git a/profiles/base/.zsh/conf.d/02-prompt.zsh b/profiles/base/.zsh/conf.d/02-prompt.zsh new file mode 100644 index 0000000..59686f3 --- /dev/null +++ b/profiles/base/.zsh/conf.d/02-prompt.zsh @@ -0,0 +1,19 @@ +if [[ -z ${TMUX} ]]; then + export REAL_TERM=${TERM} +fi + +if [[ ${REAL_TERM} != "linux" ]]; then + # To customize prompt, run `p10k configure` or edit ~/.zsh/prompt/p10k.zsh. + . "${HOME}/.zsh/plugins/powerlevel10k/powerlevel10k.zsh-theme" + + # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. + # Initialization code that may require console input (password prompts, [y/n] + # confirmations, etc.) must go above this block; everything else may go below. + if [[ -r "${XDG_CACHE_HOME:-${HOME}/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + . "${XDG_CACHE_HOME:-${HOME}/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" + fi + + [[ -f ${HOME}/.zsh/prompt/p10k.zsh ]] && . "${HOME}/.zsh/prompt/p10k.zsh" +else + . "${HOME}/.zsh/prompt/fallback.zsh" +fi diff --git a/profiles/base/.zsh/conf.d/03-plugins.zsh b/profiles/base/.zsh/conf.d/03-plugins.zsh index f9b757b..3b9bf09 100644 --- a/profiles/base/.zsh/conf.d/03-plugins.zsh +++ b/profiles/base/.zsh/conf.d/03-plugins.zsh @@ -1,14 +1,17 @@ ## Plugins configuration +# Automatic suggestions +. "${HOME}/.zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh" + # Completions fpath=("${HOME}/.zsh/plugins/zsh-completions/src" "${fpath[@]}") autoload -U compinit promptinit compinit promptinit -[[ -f "/etc/gentoo-release" ]] && prompt gentoo +[[ -f /etc/gentoo-release ]] && prompt gentoo # Enable cache for completions zstyle ":completion::complete:*" use-cache 1 # Syntax highlighting in zsh prompt -source "${HOME}/.zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" +. "${HOME}/.zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" diff --git a/profiles/base/.zsh/conf.d/04-emacs.zsh b/profiles/base/.zsh/conf.d/04-emacs.zsh index 4ea28c4..a9f1118 100644 --- a/profiles/base/.zsh/conf.d/04-emacs.zsh +++ b/profiles/base/.zsh/conf.d/04-emacs.zsh @@ -1,3 +1,2 @@ # emacs specific stuff -[ -n "${EAT_SHELL_INTEGRATION_DIR}" ] && \ - source "${EAT_SHELL_INTEGRATION_DIR}/zsh" +[[ ${EAT_SHELL_INTEGRATION_DIR} ]] && . "${EAT_SHELL_INTEGRATION_DIR}/zsh" diff --git a/profiles/base/.zsh/conf.d/05-env.zsh b/profiles/base/.zsh/conf.d/05-env.zsh index 387b93a..91a4ebb 100644 --- a/profiles/base/.zsh/conf.d/05-env.zsh +++ b/profiles/base/.zsh/conf.d/05-env.zsh @@ -1,5 +1,5 @@ # Set environment variables -if command -v nvim &> /dev/null; then +if command -v nvim >/dev/null 2>&1; then export EDITOR="nvim" else export EDITOR="vim" @@ -21,6 +21,6 @@ export GPGKEY="4A45503BBE575E3D4DAF28E27264AFFDC98D52BB" # gpg-agent unset SSH_AGENT_PID -if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then - export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket 2>/dev/null)" +if [[ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]]; then + export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket 2>/dev/null) fi diff --git a/profiles/base/.zsh/conf.d/06-color-output.zsh b/profiles/base/.zsh/conf.d/06-color-output.zsh index 29044df..0cd2317 100644 --- a/profiles/base/.zsh/conf.d/06-color-output.zsh +++ b/profiles/base/.zsh/conf.d/06-color-output.zsh @@ -18,5 +18,5 @@ pty() { } ptyless() { - pty $@ | less + pty "$@" | less } diff --git a/profiles/base/.zsh/conf.d/07-tool-integrations.zsh b/profiles/base/.zsh/conf.d/07-tool-integrations.zsh index 20e65ef..f2a5734 100644 --- a/profiles/base/.zsh/conf.d/07-tool-integrations.zsh +++ b/profiles/base/.zsh/conf.d/07-tool-integrations.zsh @@ -1,12 +1,12 @@ # HSTR configuration - add this to ~/.zshrc -if type "hstr" >/dev/null; then +if command -v hstr >/dev/null 2>&1; then alias hh=hstr # hh to be alias for hstr setopt histignorespace # skip cmds w/ leading space from history export HSTR_CONFIG=hicolor # get more colors hstr_no_tiocsti() { zle -I { HSTR_OUT="$( { &1 1>&3 3>&- )"; } 3>&1; - BUFFER="${HSTR_OUT}" + BUFFER=${HSTR_OUT} CURSOR=${#BUFFER} zle redisplay } @@ -18,42 +18,22 @@ else fi # better ls -if command -v "eza" >/dev/null 2>&1; then +if command -v eza >/dev/null 2>&1; then alias ll="eza -bghHlS" else alias ll="exa -bghHlS" fi # bat (debian) -if command -v "batcat" >/dev/null 2>&1; then - alias bat="batcat" +if command -v batcat >/dev/null 2>&1; then + alias bat=batcat fi -# lf -lfwrapper() { - command lf "$@" - - # cleanup - awk '$1 == "archivemount" { print $2 }' /etc/mtab | while read -r mntdir; do - sanitized_input="$(printf "${mntdir}")" # /etc/mtab uses octal representation of spaces (possible other symbols too), printf would convert octal representation, so that it can be used in the umount & rmdir commands. - umount "${sanitized_input}" - rmdir "${sanitized_input}" - done -} - -lfcd() { - dir="$(lfwrapper -print-last-dir "$@")" - while ! cd "${dir}" 2>/dev/null; do - dir="$(dirname -- "${dir}")" - done -} -alias lf=lfcd - # ranger ranger_cd() { - temp_file="$(mktemp -t "ranger_cd.XXXXXXXXXX")" + temp_file=$(mktemp -t "ranger_cd.XXXXXXXXXX") ranger --choosedir="${temp_file}" -- "${@:-${PWD}}" - if chosen_dir="$(cat -- "${temp_file}")" && [ -n "${chosen_dir}" ] && [ "${chosen_dir}" != "${PWD}" ]; then + if chosen_dir=$(cat -- "${temp_file}") && [ -n ${chosen_dir} ] && [ ${chosen_dir} != "${PWD}" ]; then cd -- "${chosen_dir}" fi rm -f -- "${temp_file}" @@ -61,31 +41,31 @@ ranger_cd() { alias ranger=ranger_cd # mc -if [ -f "/usr/libexec/mc/mc.sh" ]; then - source "/usr/libexec/mc/mc.sh" +if [[ -f /usr/libexec/mc/mc.sh ]]; then + . /usr/libexec/mc/mc.sh fi # nix package manager -if [ -e "${HOME}/.nix-profile/etc/profile.d/nix.sh" ]; then - source "${HOME}/.nix-profile/etc/profile.d/nix.sh" -fi # added by Nix installer +if [[ -e "${HOME}/.nix-profile/etc/profile.d/nix.sh" ]]; then + . "${HOME}/.nix-profile/etc/profile.d/nix.sh" +fi # nix shell if command -v nix-your-shell >/dev/null 2>&1; then - nix-your-shell zsh | source /dev/stdin + nix-your-shell zsh | . /dev/stdin fi # node.js export NVM_DIR="${HOME}/.nvm" -[ -s "${NVM_DIR}/nvm.sh" ] && source "${NVM_DIR}/nvm.sh" # This loads nvm -[ -s "${NVM_DIR}/bash_completion" ] && source "${NVM_DIR}/bash_completion" # This loads nvm bash_completion +[[ -s ${NVM_DIR}/nvm.sh ]] && . "${NVM_DIR}/nvm.sh" # This loads nvm +[[ -s ${NVM_DIR}/bash_completion ]] && . "${NVM_DIR}/bash_completion" # This loads nvm bash_completion # rvm -[ -s "${HOME}/.rvm/scripts/rvm" ] && source "${HOME}/.rvm/scripts/rvm" +[[ -s ${HOME}/.rvm/scripts/rvm ]] && . "${HOME}/.rvm/scripts/rvm" # pyenv -export PYENV_ROOT="${HOME}/.pyenv" -if [[ -d "${PYENV_ROOT}/bin" ]]; then +export PYENV_ROOT=${HOME}/.pyenv +if [[ -d ${PYENV_ROOT}/bin ]]; then path=("${PYENV_ROOT}/bin" "${path[@]}") export PATH eval "$(pyenv init - zsh)" diff --git a/profiles/base/.zsh/conf.d/08-aliases.zsh b/profiles/base/.zsh/conf.d/08-aliases.zsh index b5d84f6..a4f7e41 100644 --- a/profiles/base/.zsh/conf.d/08-aliases.zsh +++ b/profiles/base/.zsh/conf.d/08-aliases.zsh @@ -1,4 +1,4 @@ -alias ncmpcpp="ncmpcpp -b ${HOME}/.config/ncmpcpp/bindings" +alias ncmpcpp="ncmpcpp -b ~/.config/ncmpcpp/bindings" alias tb="nc termbin.com 9999" alias mux="tmuxinator" alias tm="tmuxinator start misc" diff --git a/profiles/base/.zsh/conf.d/09-functions.zsh b/profiles/base/.zsh/conf.d/09-functions.zsh index fa0baa0..0708b93 100644 --- a/profiles/base/.zsh/conf.d/09-functions.zsh +++ b/profiles/base/.zsh/conf.d/09-functions.zsh @@ -1,5 +1,5 @@ take() { - local -r directory="$1" + local -r directory=$1 mkdir -p "${directory}" cd "${directory}" } diff --git a/profiles/base/.zsh/prompt/fallback.zsh b/profiles/base/.zsh/prompt/fallback.zsh new file mode 100644 index 0000000..7bcd274 --- /dev/null +++ b/profiles/base/.zsh/prompt/fallback.zsh @@ -0,0 +1,8 @@ +if (( EUID == 0 )); then + # If root, omit the username and print the hostname in red. + PS1='%1v%B%F\h %(?..%? )%F{blue}%~ # %f%b' +else + # Otherwise, print the username and hostname in green. + PS1='%1v%B%F{green}%n@%m%F{blue} %(?..%F{red}%? %F{blue})%~ $ %f%b' +fi +RPROMPT=$(date '+%H:%m:%S')