(bash) refactor
This commit is contained in:
parent
0230fb27fc
commit
52ca330c12
1 changed files with 190 additions and 195 deletions
371
bash/bashrc
371
bash/bashrc
|
|
@ -1,16 +1,11 @@
|
||||||
# -------------- Aliases
|
# -------------- Aliases
|
||||||
alias gs="git status"
|
alias gs="git status"
|
||||||
|
alias gp="git pull"
|
||||||
|
alias gP="git push"
|
||||||
|
alias lg='lazygit'
|
||||||
|
|
||||||
alias ls='lsd'
|
alias ls='lsd'
|
||||||
|
|
||||||
# ll alias breakdown
|
|
||||||
# -A includes hidden files but excludes . and ..
|
|
||||||
# -l displays the listing in long format, showing file attributes such as permissions
|
|
||||||
# -F appends a character to each entry in the listing to indicate the file type (e.g '/' for directories and '*' for executables)
|
|
||||||
alias ll="lsd -AlF"
|
alias ll="lsd -AlF"
|
||||||
|
|
||||||
# la alias breakdown
|
|
||||||
# -A list all entries without ./ and ../
|
|
||||||
alias la="lsd -A"
|
alias la="lsd -A"
|
||||||
|
|
||||||
# Add an "alert" alias for long running commands. Use like so:
|
# Add an "alert" alias for long running commands. Use like so:
|
||||||
|
|
@ -30,220 +25,220 @@ INFO=$'\033[39;44mINFO:\033[0m'
|
||||||
# fuzzy cd into specific folders from anywhere
|
# fuzzy cd into specific folders from anywhere
|
||||||
# Deeply searches through commonly used directory trees
|
# Deeply searches through commonly used directory trees
|
||||||
fcd() {
|
fcd() {
|
||||||
local selected_dir=""
|
local selected_dir=""
|
||||||
|
|
||||||
# Common directories to exclude
|
# Common directories to exclude
|
||||||
local exclude_args=(
|
local exclude_args=(
|
||||||
"-E" ".git"
|
"-E" ".git"
|
||||||
"-E" "node_modules"
|
"-E" "node_modules"
|
||||||
"-E" "vendor"
|
"-E" "vendor"
|
||||||
"-E" ".cache"
|
"-E" ".cache"
|
||||||
"-E" "dist"
|
"-E" "dist"
|
||||||
"-E" "build"
|
"-E" "build"
|
||||||
"-E" "target"
|
"-E" "target"
|
||||||
"-E" ".next"
|
"-E" ".next"
|
||||||
"-E" ".nuxt"
|
"-E" ".nuxt"
|
||||||
"-E" "__pycache__"
|
"-E" "__pycache__"
|
||||||
"-E" ".pytest_cache"
|
"-E" ".pytest_cache"
|
||||||
"-E" ".venv"
|
"-E" ".venv"
|
||||||
"-E" "venv"
|
"-E" "venv"
|
||||||
"-E" "env"
|
"-E" "env"
|
||||||
"-E" ".env"
|
"-E" ".env"
|
||||||
"-E" "coverage"
|
"-E" "coverage"
|
||||||
"-E" ".nyc_output"
|
"-E" ".nyc_output"
|
||||||
"-E" ".sass-cache"
|
"-E" ".sass-cache"
|
||||||
"-E" "bower_components"
|
"-E" "bower_components"
|
||||||
"-E" ".idea"
|
"-E" ".idea"
|
||||||
"-E" ".vscode"
|
"-E" ".vscode"
|
||||||
"-E" ".vs"
|
"-E" ".vs"
|
||||||
"-E" "*.egg-info"
|
"-E" "*.egg-info"
|
||||||
"-E" ".tox"
|
"-E" ".tox"
|
||||||
"-E" ".mypy_cache"
|
"-E" ".mypy_cache"
|
||||||
"-E" ".ruff_cache"
|
"-E" ".ruff_cache"
|
||||||
"-E" ".turbo"
|
"-E" ".turbo"
|
||||||
"-E" "out"
|
"-E" "out"
|
||||||
"-E" "tmp"
|
"-E" "tmp"
|
||||||
"-E" ".svn"
|
"-E" ".svn"
|
||||||
"-E" ".hg"
|
"-E" ".hg"
|
||||||
"-E" ".bzr"
|
"-E" ".bzr"
|
||||||
)
|
)
|
||||||
|
|
||||||
if [ $# -eq 1 ]; then
|
if [ $# -eq 1 ]; then
|
||||||
selected_dir=$({
|
selected_dir=$({
|
||||||
# Deep search in .config (but not too deep to avoid noise)
|
# Deep search in .config (but not too deep to avoid noise)
|
||||||
fd -t d -t l --max-depth 3 "${exclude_args[@]}" . "$HOME/.config" 2>/dev/null
|
fd -t d -t l --max-depth 3 "${exclude_args[@]}" . "$HOME/.config" 2>/dev/null
|
||||||
|
|
||||||
# Shallow search in .cache (usually don't need deep access here)
|
# Shallow search in .cache (usually don't need deep access here)
|
||||||
fd -t d --max-depth 1 "${exclude_args[@]}" . "$HOME/.cache" 2>/dev/null
|
fd -t d --max-depth 1 "${exclude_args[@]}" . "$HOME/.cache" 2>/dev/null
|
||||||
|
|
||||||
# Search in ghq projects (your git repositories)
|
# Search in ghq projects (your git repositories)
|
||||||
fd -t d "${exclude_args[@]}" . "$HOME/ghq" 2>/dev/null
|
fd -t d "${exclude_args[@]}" . "$HOME/ghq" 2>/dev/null
|
||||||
|
|
||||||
# Search home directories (excluding common unnecessary ones)
|
# Search home directories (excluding common unnecessary ones)
|
||||||
fd -t d --max-depth 3 "${exclude_args[@]}" \
|
fd -t d --max-depth 3 "${exclude_args[@]}" \
|
||||||
-E "Library" \
|
-E "Library" \
|
||||||
-E "Applications" \
|
-E "Applications" \
|
||||||
-E ".Trash" \
|
-E ".Trash" \
|
||||||
-E ".local" \
|
-E ".local" \
|
||||||
-E ".npm" \
|
-E ".npm" \
|
||||||
-E ".cargo" \
|
-E ".cargo" \
|
||||||
-E ".rustup" \
|
-E ".rustup" \
|
||||||
-E ".gem" \
|
-E ".gem" \
|
||||||
-E ".rbenv" \
|
-E ".rbenv" \
|
||||||
-E ".pyenv" \
|
-E ".pyenv" \
|
||||||
-E ".nvm" \
|
-E ".nvm" \
|
||||||
-E ".docker" \
|
-E ".docker" \
|
||||||
-E ".vagrant" \
|
-E ".vagrant" \
|
||||||
-E ".m2" \
|
-E ".m2" \
|
||||||
-E ".gradle" \
|
-E ".gradle" \
|
||||||
-E ".android" \
|
-E ".android" \
|
||||||
-E ".wine" \
|
-E ".wine" \
|
||||||
-E "snap" \
|
-E "snap" \
|
||||||
. "$HOME" 2>/dev/null
|
. "$HOME" 2>/dev/null
|
||||||
} | sort -u | fzf --filter="$1" --select-1 --exit-0 | head -1)
|
} | sort -u | fzf --filter="$1" --select-1 --exit-0 | head -1)
|
||||||
else
|
else
|
||||||
selected_dir=$({
|
selected_dir=$({
|
||||||
# Deep search in .config (but not too deep to avoid noise)
|
# Deep search in .config (but not too deep to avoid noise)
|
||||||
fd -t d -t l --max-depth 3 "${exclude_args[@]}" . "$HOME/.config" 2>/dev/null
|
fd -t d -t l --max-depth 3 "${exclude_args[@]}" . "$HOME/.config" 2>/dev/null
|
||||||
|
|
||||||
# Shallow search in .cache (usually don't need deep access here)
|
# Shallow search in .cache (usually don't need deep access here)
|
||||||
fd -t d --max-depth 1 "${exclude_args[@]}" . "$HOME/.cache" 2>/dev/null
|
fd -t d --max-depth 1 "${exclude_args[@]}" . "$HOME/.cache" 2>/dev/null
|
||||||
|
|
||||||
# Search in ghq projects (your git repositories)
|
# Search in ghq projects (your git repositories)
|
||||||
fd -t d "${exclude_args[@]}" . "$HOME/ghq" 2>/dev/null
|
fd -t d "${exclude_args[@]}" . "$HOME/ghq" 2>/dev/null
|
||||||
|
|
||||||
# Search home directories (excluding common unnecessary ones)
|
# Search home directories (excluding common unnecessary ones)
|
||||||
fd -t d --max-depth 3 "${exclude_args[@]}" \
|
fd -t d --max-depth 3 "${exclude_args[@]}" \
|
||||||
-E "Library" \
|
-E "Library" \
|
||||||
-E "Applications" \
|
-E "Applications" \
|
||||||
-E ".Trash" \
|
-E ".Trash" \
|
||||||
-E ".local" \
|
-E ".local" \
|
||||||
-E ".npm" \
|
-E ".npm" \
|
||||||
-E ".cargo" \
|
-E ".cargo" \
|
||||||
-E ".rustup" \
|
-E ".rustup" \
|
||||||
-E ".gem" \
|
-E ".gem" \
|
||||||
-E ".rbenv" \
|
-E ".rbenv" \
|
||||||
-E ".pyenv" \
|
-E ".pyenv" \
|
||||||
-E ".nvm" \
|
-E ".nvm" \
|
||||||
-E ".docker" \
|
-E ".docker" \
|
||||||
-E ".vagrant" \
|
-E ".vagrant" \
|
||||||
-E ".m2" \
|
-E ".m2" \
|
||||||
-E ".gradle" \
|
-E ".gradle" \
|
||||||
-E ".android" \
|
-E ".android" \
|
||||||
-E ".wine" \
|
-E ".wine" \
|
||||||
-E "snap" \
|
-E "snap" \
|
||||||
. "$HOME" 2>/dev/null
|
. "$HOME" 2>/dev/null
|
||||||
} | sort -u | fzf)
|
} | sort -u | fzf)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$selected_dir" ]; then
|
if [ -n "$selected_dir" ]; then
|
||||||
cd "$selected_dir"
|
cd "$selected_dir"
|
||||||
if [[ -f .nvmrc ]]; then
|
if [[ -f .nvmrc ]]; then
|
||||||
NVMRC_VERSION=$(cat .nvmrc)
|
NVMRC_VERSION=$(cat .nvmrc)
|
||||||
CURRENT_VERSION=$(nvm current)
|
CURRENT_VERSION=$(nvm current)
|
||||||
if [ "$NVMRC_VERSION" != "$CURRENT_VERSION" ]; then
|
if [ "$NVMRC_VERSION" != "$CURRENT_VERSION" ]; then
|
||||||
nvm use
|
nvm use
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo -e "$ERROR No selection made."
|
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo -e "$ERROR No selection made."
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# clone repository
|
# clone repository
|
||||||
cl() {
|
cl() {
|
||||||
if [[ $# -eq 0 ]]; then
|
if [[ $# -eq 0 ]]; then
|
||||||
# help text
|
# help text
|
||||||
echo "Usage: cl REPOSITORY_NAME"
|
echo "Usage: cl REPOSITORY_NAME"
|
||||||
echo "Usage: cl REPOSITORY_URL"
|
echo "Usage: cl REPOSITORY_URL"
|
||||||
echo "Usage: cl (hub|lab) REPOSITORY_NAME"
|
echo "Usage: cl (hub|lab) REPOSITORY_NAME"
|
||||||
echo "Usage: cl (hub|lab) NAMESPACE REPOSITORY_NAME"
|
echo "Usage: cl (hub|lab) NAMESPACE REPOSITORY_NAME"
|
||||||
return 0
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local url=$1
|
||||||
|
local ghq_dir="$HOME/ghq"
|
||||||
|
local namespace=""
|
||||||
|
local repository_name=""
|
||||||
|
|
||||||
|
# extract project name
|
||||||
|
if [[ $url =~ git@git(lab|hub)\.com:([^/]+)/([^/]+)\.git ]]; then
|
||||||
|
local namespace="${BASH_REMATCH[2]}"
|
||||||
|
local repository_name="${BASH_REMATCH[3]}"
|
||||||
|
elif [[ $url =~ https://git(lab|hub)\.com/([^/]+)/([^/]+)\.git ]]; then
|
||||||
|
local namespace="${BASH_REMATCH[2]}"
|
||||||
|
local repository_name="${BASH_REMATCH[3]}"
|
||||||
|
elif [[ $# -ne 0 ]]; then
|
||||||
|
repository_name=$1
|
||||||
|
namespace="juancwu"
|
||||||
|
# default domain to github
|
||||||
|
local domain="hub"
|
||||||
|
# possible domain given
|
||||||
|
if [[ $# -eq 2 ]]; then
|
||||||
|
domain=$1
|
||||||
|
repository_name=$2
|
||||||
fi
|
fi
|
||||||
|
if [[ $# -eq 3 ]]; then
|
||||||
local url=$1
|
# it has been given a domain, namespace and repository name
|
||||||
local ghq_dir="$HOME/ghq"
|
domain=$1
|
||||||
local namespace=""
|
namespace=$2
|
||||||
local repository_name=""
|
repository_name=$3
|
||||||
|
|
||||||
# extract project name
|
|
||||||
if [[ $url =~ git@git(lab|hub)\.com:([^/]+)/([^/]+)\.git ]]; then
|
|
||||||
local namespace="${BASH_REMATCH[2]}"
|
|
||||||
local repository_name="${BASH_REMATCH[3]}"
|
|
||||||
elif [[ $url =~ https://git(lab|hub)\.com/([^/]+)/([^/]+)\.git ]]; then
|
|
||||||
local namespace="${BASH_REMATCH[2]}"
|
|
||||||
local repository_name="${BASH_REMATCH[3]}"
|
|
||||||
elif [[ $# -ne 0 ]]; then
|
|
||||||
repository_name=$1
|
|
||||||
namespace="juancwu"
|
|
||||||
# default domain to github
|
|
||||||
local domain="hub"
|
|
||||||
# possible domain given
|
|
||||||
if [[ $# -eq 2 ]]; then
|
|
||||||
domain=$1
|
|
||||||
repository_name=$2
|
|
||||||
fi
|
|
||||||
if [[ $# -eq 3 ]]; then
|
|
||||||
# it has been given a domain, namespace and repository name
|
|
||||||
domain=$1
|
|
||||||
namespace=$2
|
|
||||||
repository_name=$3
|
|
||||||
fi
|
|
||||||
url="git@git$domain.com:$namespace/$repository_name.git"
|
|
||||||
else
|
|
||||||
echo -e "$ERROR Invalid URL format"
|
|
||||||
return 1
|
|
||||||
fi
|
fi
|
||||||
|
url="git@git$domain.com:$namespace/$repository_name.git"
|
||||||
|
else
|
||||||
|
echo -e "$ERROR Invalid URL format"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
# check if directory for project exists or not
|
# check if directory for project exists or not
|
||||||
local repository_dir="${ghq_dir}/${namespace}/${repository_name}"
|
local repository_dir="${ghq_dir}/${namespace}/${repository_name}"
|
||||||
if [[ ! -d $repository_dir ]]; then
|
if [[ ! -d $repository_dir ]]; then
|
||||||
mkdir -p $repository_dir
|
mkdir -p $repository_dir
|
||||||
fi
|
fi
|
||||||
|
|
||||||
git clone $url $repository_dir
|
git clone $url $repository_dir
|
||||||
}
|
}
|
||||||
|
|
||||||
# delete local branches that don't exists in remote repository
|
# delete local branches that don't exists in remote repository
|
||||||
git-prune() {
|
git-prune() {
|
||||||
git fetch --prune
|
git fetch --prune
|
||||||
git branch -vv | grep '\[origin/.*: gone\]' | awk '{print $1}' | xargs git branch -d
|
git branch -vv | grep '\[origin/.*: gone\]' | awk '{print $1}' | xargs git branch -d
|
||||||
}
|
}
|
||||||
|
|
||||||
# fuzzy find branches and switch to selected branch
|
# fuzzy find branches and switch to selected branch
|
||||||
gc() {
|
gc() {
|
||||||
if [ $# -eq 1 ]; then
|
if [ $# -eq 1 ]; then
|
||||||
local selected_branch=$(git branch | fzf --filter="$1" --select-1 --exit-0 | head -1 | sed 's/^[ \*]*//')
|
local selected_branch=$(git branch | fzf --filter="$1" --select-1 --exit-0 | head -1 | sed 's/^[ \*]*//')
|
||||||
git checkout "$selected_branch"
|
git checkout "$selected_branch"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local selected_branch=$(git branch | fzf | sed 's/^[ \*]*//')
|
local selected_branch=$(git branch | fzf | sed 's/^[ \*]*//')
|
||||||
|
|
||||||
if [ -n "$selected_branch" ]; then
|
if [ -n "$selected_branch" ]; then
|
||||||
git checkout "$selected_branch"
|
git checkout "$selected_branch"
|
||||||
else
|
else
|
||||||
echo "No branch selected"
|
echo "No branch selected"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# fuzzy find remote branches and switch to selected branch
|
# fuzzy find remote branches and switch to selected branch
|
||||||
gcr() {
|
gcr() {
|
||||||
git fetch
|
git fetch
|
||||||
|
|
||||||
if [ $# -eq 1 ]; then
|
if [ $# -eq 1 ]; then
|
||||||
local selected_branch=$(git branch -r | fzf --filter="$1" --select-1 --exit-0 | head -1 | sed -E 's/^([ \*]*origin\/[\ *]*)*//')
|
local selected_branch=$(git branch -r | fzf --filter="$1" --select-1 --exit-0 | head -1 | sed -E 's/^([ \*]*origin\/[\ *]*)*//')
|
||||||
git checkout "$selected_branch"
|
git checkout "$selected_branch"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local selected_branch=$(git branch -r | fzf | sed -E 's/^([ \*]*origin\/[\ *]*)*//')
|
local selected_branch=$(git branch -r | fzf | sed -E 's/^([ \*]*origin\/[\ *]*)*//')
|
||||||
|
|
||||||
if [ -n "$selected_branch" ]; then
|
if [ -n "$selected_branch" ]; then
|
||||||
git checkout "$selected_branch"
|
git checkout "$selected_branch"
|
||||||
else
|
else
|
||||||
echo "No branch selected"
|
echo "No branch selected"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
export GOPATH=$HOME/go
|
export GOPATH=$HOME/go
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue