#!/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