mirror of
https://codeberg.org/vlw/dotfiles.git
synced 2026-01-11 21:36:00 +01:00
279 lines
7.1 KiB
Bash
279 lines
7.1 KiB
Bash
# I'm lazy
|
|
alias e="exit"
|
|
alias n="nano"
|
|
|
|
# Change PHP CLI binary
|
|
alias phpa="sudo update-alternatives --config php"
|
|
# Restart all code-server processes. Sometimes it hangs on first startup
|
|
alias restart_vscode="sudo systemctl restart code-server@vlw.service"
|
|
|
|
# +-------------------+
|
|
# | Directory & Files |
|
|
# +-------------------+
|
|
|
|
# Preview contents of a file or list the contents of a directory
|
|
l () {
|
|
# Set target to argument or default to current working directory
|
|
local target="${1:-$(pwd)}"
|
|
|
|
if [ -f $target ] ; then
|
|
# Target is not a text file
|
|
if [ -L $target ] || grep -q -P "[^\x00-\x7F]" $target; then
|
|
ls -lah $target
|
|
|
|
# Target is not a symlink, so it must be binary
|
|
if [ ! -L $target ]; then
|
|
echo ""
|
|
echo -e "\033[96mBinary file. Run 'll $target' to preview anyways.\e[0m"
|
|
fi
|
|
|
|
return
|
|
fi
|
|
|
|
less $target
|
|
return
|
|
fi
|
|
|
|
# List current directory contents and bail out if target does not exist
|
|
if [ ! -d $target ]; then
|
|
l $(dirname $target)
|
|
echo ""
|
|
echo -e "\e[0;91mNo such file or directory '$target'\e[0m"
|
|
|
|
return 1
|
|
fi
|
|
|
|
# Current directory is the user home directory
|
|
if [ $target == "$HOME" ]; then
|
|
# Ignore these files when running the "l" command from the home directory
|
|
local BLACKLIST=("Makefile")
|
|
|
|
local pattern
|
|
local pattern_ignore
|
|
|
|
for pattern in "${BLACKLIST[@]}"; do
|
|
pattern_ignore+="-I \"$pattern\" "
|
|
done
|
|
|
|
eval ls -lh $pattern_ignore
|
|
return 0
|
|
fi
|
|
|
|
ls -lh $target
|
|
}
|
|
|
|
# Preview the contents of a file or list the contents of a directory with hidden files shown
|
|
ll () {
|
|
# Set target to argument or default to current working directory
|
|
local target="${1:-$(pwd)}"
|
|
|
|
if [ -f $target ] ; then
|
|
less $target
|
|
return
|
|
fi
|
|
|
|
# List current directory contents and bail out if target does not exist
|
|
if [ ! -d $target ]; then
|
|
ll $(dirname $target)
|
|
echo ""
|
|
echo -e "\e[0;91mNo such file or directory '$target'\e[0m"
|
|
|
|
return 1
|
|
fi
|
|
|
|
ls -lah $target
|
|
}
|
|
|
|
# Edit the contents of a file or list the contents of a directory (piped to less, with hidden files shown) if that file is not found
|
|
lll () {
|
|
# Set target to argument or default to current working directory
|
|
local target="${1:-$(pwd)}"
|
|
|
|
if [ -f $target ] ; then
|
|
nano $target
|
|
return
|
|
fi
|
|
|
|
# List current directory contents and bail out if target does not exist
|
|
if [ ! -d $target ]; then
|
|
lll $(dirname $target)
|
|
echo ""
|
|
echo -e "\e[0;91mNo such file or directory '$target'\e[0m"
|
|
|
|
return 1
|
|
fi
|
|
|
|
ls -lah --color=always $target | less -R
|
|
}
|
|
|
|
.. () {
|
|
# Count the number of dots in the first argument
|
|
local count=$(echo "$1" | grep -o "\." | wc -l)
|
|
|
|
# Check if count is greater than zero
|
|
if [ "$count" -gt 0 ]; then
|
|
# Construct the path to go up n directories
|
|
local path="$(printf '../%.0s' $(seq 1 $count))"
|
|
|
|
# Change the directory
|
|
cd $path || echo "Failed to change directory."
|
|
l
|
|
return
|
|
fi
|
|
|
|
cd .. && l
|
|
}
|
|
|
|
cdl () {
|
|
# Cdl to home if no args provided
|
|
if [ $# -eq 0 ]; then
|
|
cdl $HOME
|
|
return
|
|
fi
|
|
|
|
cd -P -- "$1" && l
|
|
}
|
|
|
|
cdll () {
|
|
# Cdll to home if no args provided
|
|
if [ $# -eq 0 ]; then
|
|
cdll $HOME
|
|
return
|
|
fi
|
|
|
|
cd -P -- "$1" && ll
|
|
}
|
|
|
|
# Make a new directory and cd into it, also list contents in case it already exists
|
|
mkd () {
|
|
mkdir -p -- "$1" && cd -P -- "$1" && l
|
|
}
|
|
|
|
# +-----+
|
|
# | Git |
|
|
# +-----+
|
|
|
|
# Short-hands for various git functions
|
|
gitf () {
|
|
case "$1" in
|
|
# Stage and list changes to be committed
|
|
"a")
|
|
git add $2
|
|
gitf
|
|
;;
|
|
|
|
# Checkout a git branch (defaults to "master")
|
|
"b")
|
|
local branch="${2:-master}"
|
|
|
|
if ! git show-ref --verify --quiet refs/heads/"$branch"; then
|
|
gitf
|
|
echo ""
|
|
echo -e "\e[0;91mNo such branch '$branch'\e[0m"
|
|
return 0
|
|
fi
|
|
|
|
git checkout $branch
|
|
gitf
|
|
;;
|
|
|
|
# Checkout [and create] a git branch (defaults to "master")
|
|
"cb")
|
|
local branch="${2:-master}"
|
|
|
|
# Checkout existing branch
|
|
if git show-ref --verify --quiet refs/heads/"$branch"; then
|
|
gitf b $branch
|
|
return 0
|
|
fi
|
|
|
|
git checkout -b $branch
|
|
gitf b $branch
|
|
;;
|
|
|
|
# Pull current branch from a remote (defaults to "origin"). "d" for download.
|
|
"d")
|
|
local remote="${2:-origin}"
|
|
|
|
git pull "$remote" $(git rev-parse --abbrev-ref HEAD)
|
|
git submodule update --recursive
|
|
|
|
# Delete local branches that used to be tracked on the remote but are now gone (deleted from remote)
|
|
git fetch -p && git branch -vv | awk '/: gone]/{print $1}' | xargs git branch -D
|
|
;;
|
|
|
|
# Update all git submodules in this repo. "sd" for submodule download.
|
|
"sd")
|
|
# Only supports "master" as branch for now. This could cause unexpected results if a tracked submodule has a different branch or location name
|
|
git submodule foreach "(git checkout master; git pull)"
|
|
;;
|
|
|
|
# Push commited changes (current branch) to a remote (defaults to "origin"). "u" for upload.
|
|
"u")
|
|
local remote="${2:-origin}"
|
|
|
|
git push --set-upstream "$remote" $(git rev-parse --abbrev-ref HEAD)
|
|
;;
|
|
|
|
# Create a git "Work in Progress" commit with timestamps
|
|
"w")
|
|
git commit -m "wip: $(date +%Y-%m-%dT%H:%M:%S%z) ($(date +%s))"
|
|
;;
|
|
|
|
*)
|
|
git remote -v
|
|
echo ""
|
|
git branch -v
|
|
echo ""
|
|
git status
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# +-----+
|
|
# | SSH |
|
|
# +-----+
|
|
|
|
# SSH to machine in debug mode at local.vlw.se
|
|
sshl () {
|
|
# Set login name from first argument or default to current user
|
|
local user="${1:-$(whoami)}"
|
|
|
|
ssh -p 2222 "$user"@local.vlw.se
|
|
}
|
|
|
|
# +------+
|
|
# | Tmux |
|
|
# +------+
|
|
|
|
# Tmux split commands, "q" for fast access, "w" for horizontal (right of q), "a" for vertical (below q)
|
|
alias qw="tmux split-window -h"
|
|
alias qa="tmux split-window -v"
|
|
|
|
# Create or attach tmux sessions
|
|
tmx() {
|
|
local session_name="$1"
|
|
|
|
# Attach to the first available tmux session
|
|
if [[ -z "$session_name" ]]; then
|
|
# Check if any tmux sessions exist
|
|
if tmux has-session 2>/dev/null; then
|
|
# Attach to the first existing session
|
|
tmux attach-session -d -t $(tmux ls | head -n 1 | awk '{print $1}' | tr -d :)
|
|
|
|
return 0
|
|
fi
|
|
|
|
# Create a new session if none exists
|
|
tmux new-session -s default
|
|
return 0
|
|
fi
|
|
|
|
# Create a new named tmux session
|
|
if ! tmux has-session -t "$session_name" 2>/dev/null; then
|
|
tmux new-session -s "$session_name" -d
|
|
fi
|
|
|
|
# Attach to named tmux session
|
|
tmux attach -t "$session_name"
|
|
}
|