Port cd() wrapper (auto eza listing on directory change) and extract() function (universal archive extraction) from active user config into moonarch defaults.
164 lines
5.0 KiB
Bash
164 lines
5.0 KiB
Bash
# ABOUTME: Moonarch default zsh configuration with Catppuccin-themed prompt.
|
|
# ABOUTME: Sources user overrides from ~/.zshrc.d/ and ~/.zshrc.local
|
|
|
|
# --- History ---
|
|
HISTFILE=~/.histfile
|
|
HISTSIZE=1000
|
|
SAVEHIST=1000
|
|
setopt autocd nomatch notify appendhistory sharehistory hist_ignore_space hist_ignore_all_dups hist_save_no_dups hist_find_no_dups
|
|
unsetopt beep extendedglob
|
|
bindkey -e
|
|
|
|
# --- Completion ---
|
|
zstyle :compinstall filename "$HOME/.zshrc"
|
|
autoload -Uz compinit
|
|
compinit
|
|
|
|
# --- Window title ---
|
|
autoload -Uz add-zsh-hook
|
|
|
|
_precmd_title() {
|
|
print -Pn "\e]0;%~\a"
|
|
}
|
|
|
|
_preexec_title() {
|
|
print -Pn "\e]0;$2\a"
|
|
}
|
|
|
|
add-zsh-hook precmd _precmd_title
|
|
add-zsh-hook preexec _preexec_title
|
|
|
|
# --- Prompt (Catppuccin Mocha) ---
|
|
parse_git_branch() {
|
|
local branch=""
|
|
branch=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
|
|
local git_status=$(git status --porcelain 2>/dev/null)
|
|
local color=green
|
|
if echo "$git_status" | grep -q "^ M"; then
|
|
color=yellow
|
|
branch="${branch}*"
|
|
fi
|
|
if echo "$git_status" | grep -qE "^ A|^\?\?"; then
|
|
color=yellow
|
|
branch="${branch}+"
|
|
fi
|
|
if echo "$git_status" | grep -q "^ D"; then
|
|
color=yellow
|
|
branch="${branch}-"
|
|
fi
|
|
if [[ -n "$branch" ]]; then
|
|
branch=[%F{${color}}${branch}%F{reset}]
|
|
fi
|
|
echo " $branch"
|
|
}
|
|
|
|
precmd() {
|
|
print ""
|
|
print -rP "%F{#b4befe}%B%n@%M%b %2~%F{#f5e0dc}$(parse_git_branch)%f"
|
|
}
|
|
|
|
PROMPT="%B%F{#b4befe}$%f%b "
|
|
RPROMPT="%F{241}%B%T%b%f"
|
|
|
|
# --- PATH ---
|
|
if [ -d "$HOME/.local/bin" ]; then
|
|
PATH="$HOME/.local/bin:$PATH"
|
|
fi
|
|
|
|
# --- cd with auto-listing ---
|
|
function cd() {
|
|
new_directory="$*";
|
|
if [ $# -eq 0 ]; then
|
|
new_directory=${HOME};
|
|
fi;
|
|
builtin cd "${new_directory}" && eza -lF --icons --color=always --group-directories-first
|
|
}
|
|
|
|
# --- Key bindings ---
|
|
bindkey "^[[3~" delete-char
|
|
bindkey "^[[H" beginning-of-line
|
|
bindkey "^[[F" end-of-line
|
|
bindkey "^[[1;5C" forward-word
|
|
bindkey "^[[1;5D" backward-word
|
|
|
|
# --- Aliases ---
|
|
alias ssh="TERM=xterm-256color ssh"
|
|
alias orphans='[[ -n $(pacman -Qdt) ]] && sudo pacman -Rs $(pacman -Qdtq) || echo "no orphans to remove"'
|
|
alias ls='eza --icons --color=always --group-directories-first'
|
|
alias ll='eza -lF --icons --color=always --group-directories-first'
|
|
alias la='eza -a --icons --color=always --group-directories-first'
|
|
alias l='eza -F --icons --color=always --group-directories-first'
|
|
alias vim='nvim'
|
|
alias uninstall='sudo pacman -Rsn'
|
|
|
|
# --- Extract archives ---
|
|
function extract() {
|
|
if [ -f "$1" ]; then
|
|
case "$1" in
|
|
*.tar.bz2) tar xjvf "$1" ;;
|
|
*.tar.gz) tar xzvf "$1" ;;
|
|
*.tar.xz) tar xvf "$1" ;;
|
|
*.bz2) bzip2 -d "$1" ;;
|
|
*.rar) unrar2dir "$1" ;;
|
|
*.gz) gunzip "$1" ;;
|
|
*.tar) tar xf "$1" ;;
|
|
*.tbz2) tar xjf "$1" ;;
|
|
*.tgz) tar xzf "$1" ;;
|
|
*.zip) unzip2dir "$1" ;;
|
|
*.Z) uncompress "$1" ;;
|
|
*.7z) 7z x "$1" ;;
|
|
*.ace) unace x "$1" ;;
|
|
*) echo "'$1' cannot be extracted via extract()" ;;
|
|
esac
|
|
else
|
|
echo "'$1' is not a valid file"
|
|
fi
|
|
}
|
|
|
|
# --- FZF ---
|
|
if command -v fzf &>/dev/null; then
|
|
eval "$(fzf --zsh)"
|
|
export FZF_DEFAULT_COMMAND="fd --hidden --strip-cwd-prefix --exclude .git"
|
|
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
|
|
export FZF_ALT_C_COMMAND="fd --type=d --hidden --strip-cwd-prefix --exclude .git"
|
|
export FZF_DEFAULT_OPTS="--height 50% --layout=default --border --color=hl:#2dd4bf"
|
|
export FZF_CTRL_T_OPTS="--preview 'bat --color=always -n --line-range :500 {}'"
|
|
export FZF_ALT_C_OPTS="--preview 'eza --tree --color=always {} | head -200'"
|
|
fi
|
|
|
|
# --- Plugins (oh-my-zsh) ---
|
|
if [[ -d "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting" ]]; then
|
|
source "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
|
|
fi
|
|
if [[ -d "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions" ]]; then
|
|
source "${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh"
|
|
ZSH_AUTOSUGGEST_STRATEGY=(history completion)
|
|
fi
|
|
|
|
# --- Wayland environment ---
|
|
export TERMINAL="footclient"
|
|
export GDK_BACKEND="wayland,x11,*"
|
|
export QT_QPA_PLATFORM="wayland;xcb"
|
|
export QT_QPA_PLATFORMTHEME="qt6ct"
|
|
export QT_AUTO_SCREEN_SCALE_FACTOR="1"
|
|
export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
|
|
export SDL_VIDEODRIVER="wayland"
|
|
export CLUTTER_BACKEND="wayland"
|
|
export XDG_CURRENT_DESKTOP="niri"
|
|
export XDG_SESSION_DESKTOP="niri"
|
|
export XDG_SESSION_TYPE="wayland"
|
|
export EDITOR="nvim"
|
|
export SUDO_EDITOR="nvim"
|
|
export MOZ_ENABLE_WAYLAND="1"
|
|
|
|
# --- User override scripts ---
|
|
# Drop custom config snippets into ~/.zshrc.d/*.zsh
|
|
if [[ -d "$HOME/.zshrc.d" ]]; then
|
|
for f in "$HOME/.zshrc.d"/*.zsh(N); do
|
|
source "$f"
|
|
done
|
|
fi
|
|
|
|
# Single-file user override (for simple additions)
|
|
[[ -f "$HOME/.zshrc.local" ]] && source "$HOME/.zshrc.local"
|