feat: initial commit of Ela's Arch config. :)

This commit is contained in:
Philomena 2024-07-22 22:14:21 +02:00 committed by Philomena
commit 9ed00ff30c
59 changed files with 2769 additions and 0 deletions

4
zsh/.zsh.d/aliases.zsh Normal file
View file

@ -0,0 +1,4 @@
# Easier navigation
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

227
zsh/.zsh.d/functions.zsh Normal file
View file

@ -0,0 +1,227 @@
# Create a directory and enter it
mkcd() {
mkdir --parents "$@" && cd "$_" || exit
}
# cd into directory using fuzzy search
fcd() {
local dir
dir=$(fd --type d --follow | fzf --preview 'tree -l -L 1 {}' +m) &&
cd "$dir"
}
# Edit a directory or a file using fuzzy search
fe() {
local target fzf_cmd
fzf_cmd='fd --follow --hidden --no-ignore \
--exclude .git \
--exclude vendor \
--exclude node_modules \
--exclude .terraform \
--exclude target \
--exclude bin \
--exclude build \
--exclude dist \
--exclude coverage \
--exclude .DS_Store'
target=$(eval $fzf_cmd | fzf +m) &&
if [ -d "$target" ]; then
cd "$target" && "$EDITOR"
fi
if [ -f "$target" ]; then
"$EDITOR" "$target"
fi
}
# Checkout Git branches or tags using fuzzy search
fco() {
local tags branches target
tags=$(
git tag | awk '{print "\x1b[31;1mtag\x1b[m\t" $1}'
) || return
branches=$(
git branch --all | grep -v HEAD |
sed "s/.* //" | sed "s#remotes/[^/]*/##" |
sort -u | awk '{print "\x1b[34;1mbranch\x1b[m\t" $1}'
) || return
target=$(
(
echo "$tags"
echo "$branches"
) |
fzf-tmux -l30 -- --no-hscroll --ansi +m -d "\t" -n 2
) || return
git checkout "$(echo "$target" | awk '{print $2}')"
}
# Kill any process with fuzzy search
fkill() {
local pid
if [ "$UID" != "0" ]; then
pid=$(ps -f -u $UID | sed 1d | fzf -m | awk '{print $2}')
else
pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}')
fi
if [ "x$pid" != "x" ]; then
echo "$pid" | xargs kill "-${1:-9}"
fi
}
# Git commit browser with fuzzy search
fshow() {
git log --graph --color=always \
--format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" |
fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort \
--bind "ctrl-m:execute:
(grep -o '[a-f0-9]\{7\}' | head -1 |
xargs -I % sh -c 'git show --color=always % | less -R') << 'FZF-EOF'
{}
FZF-EOF"
}
# Open tmux and Vim in an IDE like layout
ide() {
if [ -n "$1" ]; then
cd "$1" || exit
fi
if [ -z "${TMUX}" ]; then
tmux new-session -A -s ide
fi
tmux split-window -vb -p 90
tmux select-pane -t 0
tmux send-keys 'nvim -c NvimTreeOpen' C-m
}
# Update project dependencies
depu() {
# Git submodules
if [ -e .gitmodules ]; then
printf "Updating Git submodules for %s...\n\n" "${PWD##*/}"
git submodule update --init --remote --rebase --recursive
fi
# npm
if [ -e package-lock.json ]; then
printf "Updating npm dependencies for %s...\n\n" "${PWD##*/}"
npm update
npm outdated
fi
# Go
if [ -e go.mod ]; then
printf "Updating Go dependencies for %s...\n\n" "${PWD##*/}"
go get -t -u ./...
go mod tidy
fi
# Rust
if [ -e Cargo.toml ]; then
printf "Updating Cargo dependencies for %s...\n\n" "${PWD##*/}"
cargo update
fi
# Python
if [ -e poetry.lock ]; then
printf "Updating Python dependencies for %s...\n\n" "${PWD##*/}"
poetry update
poetry show --outdated
fi
# Terraform
if [ -e .terraform.lock.hcl ]; then
printf "Updating Terraform dependencies for %s...\n\n" "${PWD##*/}"
terraform init -upgrade
fi
}
# System update
pacu() {
processes=()
# Dotfiles repo
printf '\e[1mUpdating dotfiles repo\e[0m\n'
(cd "${HOME}/dotfiles" && git pull)
case "$(uname)" in
'Linux')
# On Linux, use the respective package manager
if [ -x "$(command -v paru)" ]; then
printf '\e[1mUpdating Paru packages\e[0m\n'
paru -Syu --noconfirm
orphans=$(paru -Qtdq) || orphans=''
if [ -n "${orphans}" ]; then
printf '\e[1mRemoving orphan packages\e[0m\n'
paru -Rns $orphans --noconfirm
fi
paru -Sc --noconfirm
paru --clean --noconfirm
elif [ -x "$(command -v pacman)" ]; then
printf '\e[1mUpdating pacman packages\e[0m\n'
sudo pacman -Syu --noconfirm
orphans=$(sudo pacman -Qtdq) || orphans=''
if [ -n "${orphans}" ]; then
printf '\e[1mRemoving orphan packages\e[0m\n'
sudo pacman -Rns $orphans --noconfirm
fi
sudo pacman -Sc --noconfirm
fi
if [ -x "$(command -v pacmanfile)" ]; then
printf '\e[1mSyncing packages with pacmanfile\e[0m\n'
pacmanfile sync
fi
if [ -x "$(command -v pacdiff)" ]; then
printf '\e[1mChecking for Pacman maintenance issues\e[0m\n'
sudo DIFFPROG="${EDITOR} -d" pacdiff
fi
# Update status bar indicator for pending updates
pkill -SIGRTMIN+8 waybar
# Update firmwares
if [ -x "$(command -v fwupdmgr)" ]; then
printf '\e[1mUpdating firmwares\e[0m\n'
fwupdmgr refresh
fwupdmgr update
fi
;;
esac
# zprezto
if type zprezto-update 2>/dev/null | grep -q function; then
printf '\e[1mUpdating zprezto\e[0m\n'
zprezto-update &
processes+=("$!")
fi
# npm
if [ -x "$(command -v npm)" ]; then
printf '\e[1mUpdating globally installed npm packages\e[0m\n'
npm update -g
fi
# Yarn
if [ -x "$(command -v yarn)" ]; then
printf '\e[1mUpdating globally installed Yarn packages\e[0m\n'
(yarn global upgrade >/dev/null) &
processes+=("$!")
fi
# Neovim
if [ -x "$(command -v nvim)" ]; then
printf '\e[1mUpdating Neovim plugins\e[0m\n'
nvim --headless -c 'Lazy! sync' -c 'qa'
nvim --headless -c 'autocmd User MasonUpdateAllComplete quitall' -c 'MasonUpdateAll'
fi
# Wait for all processes to finish
for p in ${processes[*]}; do
wait "$p"
done
printf '\n\e[1mSystem update finished\e[0m\n'
}

View file

@ -0,0 +1,49 @@
# vim: ft=zsh
function prompt_elatella_precmd {
if (( $+functions[git-info] )); then
git-info
fi
}
function prompt_elatella_setup {
setopt LOCAL_OPTIONS
unsetopt XTRACE KSH_ARRAYS
prompt_opts=(cr percent sp subst)
# Load required functions
autoload -Uz add-zsh-hook
# Add hook for calling git-info before each command
add-zsh-hook precmd prompt_elatella_precmd
# Tell prezto we can manage this prompt
zstyle ':prezto:module:prompt' managed 'yes'
# Set git-info parameters
zstyle ':prezto:module:git:info' verbose 'yes'
zstyle ':prezto:module:git:info:branch' format '%b'
zstyle ':prezto:module:git:info:position' format '%p'
zstyle ':prezto:module:git:info:commit' format '%.7c'
zstyle ':prezto:module:git:info:action' format '%F{yellow}[%s]%f'
zstyle ':prezto:module:git:info:deleted' format '%F{yellow}●%f'
zstyle ':prezto:module:git:info:modified' format '%F{yellow}●%f'
zstyle ':prezto:module:git:info:untracked' format '%F{yellow}●%f'
zstyle ':prezto:module:git:info:renamed' format '%F{green}●%f'
zstyle ':prezto:module:git:info:added' format '%F{green}●%f'
zstyle ':prezto:module:git:info:ahead' format '%F{yellow} ⬆%f'
zstyle ':prezto:module:git:info:behind' format '%F{yellow} ⬇%f'
zstyle ':prezto:module:git:info:stashed' format '%F{yellow} ★%f'
zstyle ':prezto:module:git:info:keys' format \
'prompt' ' %F{cyan}[$(coalesce "%b" "%p" "%c")%f${(e)git_info[status]}%F{cyan}]%f%s' \
'status' '$(coalesce "%a" "%r")$(coalesce "%d" "%m" "%u")%A%B%S' \
# Define prompts
PROMPT='%F{magenta}%c%f${(e)git_info[prompt]} '
}
function prompt_elatella_help {
echo 'This prompt is as minimalist as possible and cannot be customized.'
}
prompt_elatella_setup "$@"