feat: initial commit of Ela's Arch config. :)
This commit is contained in:
commit
9ed00ff30c
59 changed files with 2769 additions and 0 deletions
4
zsh/.zsh.d/aliases.zsh
Normal file
4
zsh/.zsh.d/aliases.zsh
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
# Easier navigation
|
||||
alias ..='cd ..'
|
||||
alias ...='cd ../..'
|
||||
alias ....='cd ../../..'
|
||||
227
zsh/.zsh.d/functions.zsh
Normal file
227
zsh/.zsh.d/functions.zsh
Normal 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'
|
||||
}
|
||||
49
zsh/.zsh.d/themes/prompt_elatella_setup
Normal file
49
zsh/.zsh.d/themes/prompt_elatella_setup
Normal 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 "$@"
|
||||
Loading…
Add table
Add a link
Reference in a new issue