Add modular ZSH configuration

This commit is contained in:
Hans Goor 2024-08-02 00:08:16 +02:00
parent e897d1f9a1
commit 2da1d30e9e
Signed by: eyedevelop
SSH key fingerprint: SHA256:Td89veptDEwCV8J3fjqnknNk7SbwzedYhauyC2nFBYg
4 changed files with 77 additions and 2 deletions

View file

@ -105,5 +105,9 @@ zstyle ':completion:*:manuals' separate-sections true
zstyle ':completion:*:manuals.*' insert-sections true
zstyle ':completion:*:man:*' menu yes select
alias vim='nvim'
alias devspace='podman run -it -v "$(pwd):/workspace" -e PUID="$(id -u)" -e PGID="$(id -g)" --uidmap="$(id -u)":0:1 --uidmap=0:1:"$(id -u)" --gidmap="$(id -g)":0:1 --gidmap=0:1:"$(id -g)"'
# Load all files from the .zshrc.d folder.
if [[ -d "${HOME}/.zshrc.d" ]]; then
for ext in "${HOME}"/.zshrc.d/*.sh; do
source "${ext}"
done
fi

View file

@ -0,0 +1,7 @@
#!/bin/bash
export SPACES_DIR="${HOME}/spaces"
export WORKSPACE_DIR="${SPACES_DIR}/workspace"
mkdir -p "${SPACES_DIR}"

View file

@ -0,0 +1,4 @@
#!/bin/bash
alias vi="nvim"
alias vim="nvim"

View file

@ -0,0 +1,60 @@
#!/bin/bash
alias cdw="cd ${WORKSPACE_DIR}"
function _get_projects() {
( cd -- "${WORKSPACE_DIR}" && find . -mindepth 3 -maxdepth 3 -type d | sed 's|^\./||' )
}
function cdp() {
if command -v fzf &>/dev/null; then
cd -- "${WORKSPACE_DIR}/$(_get_projects | fzf --query "$*")"
return
fi
local projects=( "${(@f)$( _get_projects )}" )
if [[ "$#" -gt 0 ]]; then
projects=( "${(@Mb)projects:#*${1}*}" )
fi
select project in "${projects[@]}"; do
cd -- "${WORKSPACE_DIR}/${project}"
break
done
}
function _cdp_comp() {
local projects=( "${(@f)$( _get_projects )}" )
compset -P '*\/'
_describe "${projects[@]}"
}
compdef _cdp_comp cdp
function clone() {
if [[ "$#" -lt 1 ]]; then
echo "[!] Missing URL to clone!" >&2
return 1
fi
local url="$1"
local forge owner repo
if [[ "${url}" =~ ^ssh:\/\/[a-zA-Z0-9_]+@([a-zA-Z0-9_.]+):[0-9]+/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)(.git)?$ ]]; then
forge="${match[1]:l}"
owner="${match[2]:l}"
repo="${match[3]:l}"
elif [[ "${url}" =~ ^[a-zA-Z0-9_]+@([a-zA-Z0-9_.]+):([a-zA-Z0-9_]+)\/([a-zA-Z0-9_]+)(.git)?$ ]]; then
forge="${match[1]:l}"
owner="${match[2]:l}"
repo="${match[3]:l}"
elif [[ "${url}" =~ ^https?:\/\/([a-zA-Z0-9_.]+)(:[0-9]+)?\/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)(.git)?$ ]]; then
forge="${match[1]:l}"
owner="${match[3]:l}"
repo="${match[4]:l}"
else
echo "[!] Do not know how to handle ${url}!" >&2
return 1
fi
git clone "${url}" "${WORKSPACE_DIR}/${forge}/${owner}/${repo}"
}