dotfiles/home/.config/shell/extra
2022-11-20 03:14:18 +01:00

246 lines
8.8 KiB
Bash
Executable file

#!/usr/bin/env zsh
# ----------------------------------------------------------------
# Additional aliases
alias cfextra='vim ~/.config/shell/extra'
alias cflvim='lvim ~/.config/lvim/config.lua'
alias cfgit='vim ~/.config/git/config'
alias cfhypr="vim ~/.config/hypr/hyprland.conf"
alias cfwaybar='vim ~/.config/waybar/config-hypr'
alias dotsync='git checkout arch && git push && git checkout gentoo && git merge --ff arch && git push && git checkout arch'
alias kbsk='setxkbmap sk qwerty'
alias kbus='setxkbmap us'
alias update-webpage='ssh webpage "cd /var/www/itsdrike.com; git pull; ./scripts/build.sh"'
alias octave='octave --quiet'
alias savekern='cp /proc/vmcore /root/crash.dump'
alias discord-bump='sleep $((2*60*60)) && notify-send "Bump" "Bump time expired"'
alias svim='nvim'
alias vim='lvim'
alias vpn-home='sudo systemctl stop wg-quick@wgivpn && sudo systemctl start wg-quick@wg0'
alias vpn-ivpn='sudo systemctl stop wg-quick@wg0 && sudo systemctl start wg-quick@wgivpn'
alias vpn-wg0='vpn-home'
alias vpn-wgivpn='vpn-ivpn'
alias vpn-off='sudo systemctl stop wg-quick@wg0 && sudo systemctl stop wg-quick@wgivpn'
alias spotify-adblock='env LD_PRELOAD=/usr/lib/spotify-adblock.so spotify'
alias mono-on='pacmd load-module module-remap-sink sink_name=mono master=2 channels=1'
alias mono-off='pacmd unload-module module-remap-sink'
# ----------------------------------------------------------------
# Additional functions
git-uni() {
git config --local commit.gpgsign false
git config --local user.email "p_vacho@utb.cz"
git config --local user.name "Peter Vacho"
}
dot-sync() {
target="$(realpath -s "$1")"
if [[ "$target" == "$HOME/"* ]]; then
rel_path="$(realpath --relative-to="$HOME" "$target")"
dot_target="$dothome/$rel_path"
else
rel_path="$(realpath --relative-to="/" "$target")"
dot_target="$dotroot/$rel_path"
fi
>&2 echo "Would copy $target -> $dot_target"
if [[ -d "$target" ]]; then
rsync -av --delete "${@:2}" "$target/" "$dot_target"
else
rsync -av "${@:2}" "$target" "$dot_target"
fi
}
pytemp() {
dir="$(mktemp --tmpdir=/tmp -d "tmp.pytemp.XXXXXX")"
pushd "$dir" >/dev/null
yes "" | poetry init
cp ~/Personal/Programming/Python/Templates/GitHub/.flake8 .
sed -i 's/project_name/src/' ./.flake8
poetry add --dev flake8 black isort pyright # also performs install
mkdir ./src
touch ./src/__init__.py
echo "def main():\n ...\n\n" > ./src/__main__.py
echo "if __name__ == \"__main__\":\n main()" >> ./src/__main__.py
poetry run lvim +2 -c 'execute "normal $ciw" | startinsert!' ./src/__main__.py
popd
rm -rf "$dir"
}
setuppy(){
cp -r "/home/itsdrike/Personal/Programming/Python/Templates/GitHub" "$1"
cd "$1"
git init
poetry update
poetry install
echo "TODO" >> .gitignore_local
poetry shell
# Show all places where we used "project_name", these are expected to be renamed
grep -RHIni --exclude-dir=.venv project_name
}
webpage-put(){
scp $@ webpage:/var/www/itsdrike.com/etc
}
webpage-remove(){
sftp webpage:/var/www/itsdrike.com/etc <<< "rm $@"
}
vidtrim(){
if [ $# -ne 3 ]; then
echo "Invalid number of parameters passed!"
echo "Usage: vidtrim [file name] [start time] [end time]"
return 1
fi
no_ext_name=$1:r
ext=$1:e
i=1
while true; do
new_name="${no_ext_name}-trimmed-${i}.${ext}"
if [ -e "$new_name" ]; then
i=$((i + 1))
else
break
fi
done
ffmpeg -ss "$2" -i "$1" -to "$3" -c copy -copyts "$new_name"
}
vidmerge(){
if [ $# -lt 3 ]; then
echo "Invalid number of parameters passed!"
echo "Usage: vidmerge [input path 1] [input path 2] [optionally more inputs ...] [output name]"
echo "Example: vidmerge . REC-2020-05-.*.mp4 output.mp4"
return 1
fi
# Parse the input
first_file="$1"
files="$2"
out="$3"
shift; shift; shift
# Process extra filenames, in case there's more than 2 to merge
while [ $# -gt 0 ]; do
files="$files\n$out"
out="$1"
shift
done
# Prefer MP4Box over ffmpeg if installed
# this is benefitial because merging with ffmpeg results in files with
# messed up timeline (the file will be a merge product of all given files,
# but the timeline will suddenly skip i.e. from 10s to 50s seemlessly, resulting
# in proper merge, but with weird timeline info)
if ! command -v MP4Box >/dev/null 2>&1; then
files="$first_file\n$files"
# Create file with all of the file paths to concat for ffmpeg
substring="'"
if test "${files#*$substring}" != "$files"; then
echo "Can't handle files with $substring in their names!"
return 1
fi
loc="files.txt"
echo "$files" | while IFS= read -r line; do
printf "file '%s'\n" "$line" >> "$loc"
done
if ffmpeg -f concat -safe 0 -i "$loc" -c copy "$out"; then
rm "$loc"
else
echo "Ffmpeg failed, check '$loc' file, containing the files passed to ffmpeg"
fi
else
cat_list="$(echo "$files" | xargs -d '\n' printf -- '-cat "%s" ')"
cmd="MP4Box -add \"$first_file\" $cat_list \"$out\""
echo "$cmd"
if eval "$cmd"; then
echo "Video merge complete, generated output: $out"
else
echo "MP4Box failed, used cmd: $cmd"
fi
fi
}
vidrot(){
if [ $# -ne 2 ]; then
echo "Invalid number of parameters passed!"
echo "Usage: vidrot [video file] [rotation (0/1/2/3)]"
echo "0: cclock_flip (90° counterclockwise and vertical flip)"
echo "1: clock (90° clockwise)"
echo "2: cclock (90° counterclockwise)"
echo "3: clock_flip (90° clockwise and vertical flip)"
return 1
fi
name="$1"
rotation="$2"
no_ext_name=$name:r
ext=$name:e
editname="${no_ext_name}-rot.${ext}"
ffmpeg -i "$name" -vf "transpose=$rotation" "$editname"
}
# ----------------------------------------------------------------
# Additional exports
export dothome="$HOME/Personal/dotfiles/home"
export dotroot="$HOME/Personal/dotfiles/root"
export dotvim="$dothome/.config/nvim"
# ----------------------------------------------------------------
# Pacman/Emerge
if command -v pacman > /dev/null; then
alias pkg-info='pacman -Si' # Info about a package in sync index
alias pkg-info-local='pacman -Qi' # Same as above, but for locally installed pkgs
alias pkg-file-owner='pacman -F' # Show package that owns given file in sync index
alias pkg-file-owner-regex='pacman -Fx' # Same as above, but works with partial names/regex
alias pkg-file-owner-local='pacman -Qo' # Same as above, but for locally installed pkgs
alias pkg-owned-files='pacman -Fl' # Show all files owned by given package in sync index
alias pkg-owned-files-local='pacman -Ql' # Same as above 2, but for locally installed pkgs
alias pkg-group-list='pacman -Sg' # List all pkgs that will be installed with a group
alias pkg-group-list-local='pacman -Qg' # Same as above, but from locally installed pkgs
alias pkg-orphans='pacman -Qtdq'
alias pkg-get-upgrades='pacman -Syyuw' # Download new pkgs, but don't upgrade them
alias pkg-extract='pacman -Syw --cachedir .' # Download given pkg to current directory
alias pkg-clean-cache='pacman -Sc' # Remove old packages in pacman cache
alias pkg-vuln-upgrade="pacman -Sy \"\$(arch-audit --upgradable --quiet | awk '{sub(/>=.+/, \"\"); print}' | paste -s -d ' ')\"" # Upgrade all vulnerable packages, with released fixes
alias vuln='arch-audit' # Show vulnerable packages that can be upgraded (Arch Linux)
# Get fastest mirrors (using reflector)
alias mirror="sudo reflector -f 30 -l 30 --number 10 --verbose --save /etc/pacman.d/mirrorlist"
alias mirrord="sudo reflector --latest 50 --number 20 --sort delay --save /etc/pacman.d/mirrorlist"
alias mirrors="sudo reflector --latest 50 --number 20 --sort score --save /etc/pacman.d/mirrorlist"
alias mirrora="sudo reflector --latest 50 --number 20 --sort age --save /etc/pacman.d/mirrorlist"
fi
if command -v emerge > /dev/null; then
if command -v eix > /dev/null; then
alias pkg-sync='eix-sync'
alias pkg-search='eix'
else
alias pkg-sync='emerge --sync --quiet=n'
alias pkg-search='emerge -s'
fi
alias pkg-update='emerge --update --deep @world'
alias pkg-upgrade='pkg-sync && pkg-update'
alias pkg-changed-use='pkg-update --changed-use'
alias pkg-recompile-all='emerge -e @world'
alias pkg-which='equery which'
alias pkg-size='equery size'
alias pkg-depgraph='equery depgraph'
alias pkg-depends='equery depends'
alias pkg-check='equery check'
alias pkg-uses='equery uses'
alias pkg-keywords='equery keywords'
alias update-conf='dispatch-conf'
fi