function reset_facl { FUNCTION_PRELUDE : "${1:?user?}" : "${2:?dirs?}" chown -R "${1}:${1}" "${@:2}" chmod -R u=rwX,g=rwX,o= "${@:2}" setfacl -Rb "${@:2}" setfacl -Rm "\ user:${1}:rwX,\ default:user:${1}:rwX,\ group:${1}:rwX,\ default:group:${1}:rwX,\ other::0,\ default:other::0\ " "${@:2}" } function add_facl { FUNCTION_PRELUDE : "${1:?user?}" : "${2:?dirs?}" setfacl -Rm "\ user:${1}:rwX,\ default:user:${1}:rwX,\ group:${1}:rwX,\ default:group:${1}:rwX,\ " "${@:2}" } function is_local { local HOSTNAME="$(hostname)" [[ "$HOSTNAME" =~ '^abra0' || "$HOSTNAME" == "svxf2-osx" ]] } function mount_sshfs { FUNCTION_PRELUDE : "${1:?destination name?}" local DESTINATION="$1" local LOCAL_MOUNT_PATH="/Users/$USER/mount/$1" mkdir -p "$LOCAL_MOUNT_PATH" if mount | grep "$LOCAL_MOUNT_PATH"; then umount "$LOCAL_MOUNT_PATH"; fi sshfs \ -o allow_other \ -o kernel_cache \ -o direct_io \ -o auto_cache \ -o defer_permissions \ -o noappledouble \ -o cache=yes \ -o Compression=yes \ -o reconnect \ -o workaround=rename \ "$DESTINATION:$REMOTE_MOUNT_PATH" "$LOCAL_MOUNT_PATH" # if [[ ! -e "$LOCAL_COMMAND_PIPE_PATH" ]]; then # echo "Can't find the command pipe" # return # fi echo "Starting remote command pipe..." ssh $DESTINATION \ << EOF set -euxo pipefail if [[ -e /tmp/sshfs_command_pipe ]]; then rm /tmp/sshfs_command_pipe fi mkfifo /tmp/sshfs_command_pipe tail -f /tmp/sshfs_command_pipe | zsh -lx EOF } function sublr { FUNCTION_PRELUDE local HOSTNAME=$(hostname) local FULL_PATH=$(realpath $1) echo "subl /Users/abra/mount/$HOSTNAME/$FULL_PATH" > /tmp/sshfs_command_pipe } function cdtmp { FUNCTION_PRELUDE local DATESTR="$(date +%Y-%m-%d_%H:%M:%S)" local DIR_PATH="${HOME}/tmp/auto_${DATESTR}" if [[ -n "$1" ]]; then local DIR_PATH="${DIR_PATH}_$1" fi if [[ -e "${DIR_PATH}" ]]; then echo "${DIR_PATH} already exists" return 1 fi mkcd "${DIR_PATH}" echo "${DIR_PATH}" } function mkcd { FUNCTION_PRELUDE_NO_XTRACE if [[ -z $1 ]]; then echo ':(' return 1 fi if [[ -e $1 ]]; then echo "file exists" return 1 fi mkdir $1 cd $1 } function publish { FUNCTION_PRELUDE rsync2 "$@" "dedi:/var/www/abra.me/list/" } function twitch { FUNCTION_PRELUDE livestreamer "http://www.twitch.tv/${1}" "${${@:2}:-best}" } function save_stream { FUNCTION_PRELUDE local NAME=$1 if [[ ! -d $NAME ]]; then echo ':(' return 1 fi while true; do local CURDATE=$(date +"%Y-%m-%d-%H:%M:%S") livestreamer "https://twitch.tv/$NAME" -o "$NAME/$CURDATE.mp4" || true sleep 30 done } function dcp { FUNCTION_PRELUDE git add --all :/ git commit -m "${*:-$(whoami) at $(date)}" git push } function .dcp { FUNCTION_PRELUDE .g add -u .g commit -m "${*:-$(whoami) at $(date)}" .g push } function strip-tags { FUNCTION_PRELUDE find . -type f -name '*.mp3' \ | tr '\n' '\0' \ | xargs -0 -n1 mid3v2 --delete-frames=TXXX,USLT,TIPL,UFID,APIC,TBPM,TCMP,TDOR,TDRC,TLAN,TMED,TPOS,TPUB,TRCK,TCON } function levi_beet { FUNCTION_PRELUDE ssh levi -- sudo BEETSDIR=/projects/config/beets -u torrent beet "$@" } function beet_comments { FUNCTION_PRELUDE : "${1:?who?}" : "${2:?what?}" levi_beet modify \'"comments=$2"\' \'"albumartist::$1"\' } function rsync2 { rsync \ --info=PROGRESS2 \ --progress \ --recursive \ --compress \ --human-readable \ --update \ --times \ --no-whole-file \ --itemize-changes \ --stats \ --verbose \ --links \ --no-perms \ --chmod=ugo=rwX \ "${(@)@}" } function sync-music { FUNCTION_PRELUDE # if ! is_local; then # echo "Should be local" # return 1 # fi local MUSIC_DIR="$HOME/music/library" mkdir -p "$MUSIC_DIR" rsync2 \ --delete \ "levi:/projects/music/" \ "$MUSIC_DIR/" } # function .g-init() { # git init --bare $HOME/.dotgit # .g config --local status.showUntrackedFiles no # .g remote add origin ssh://dedi/root/.dotgit # git config --global user.name "Your Name" # git config --global user.email you@example.com # .g remote add origin ssh://dedi/var/www/git.abra.me/dot.git # } # make_user() { # FUNCTION_PRELUDE # if is_local; then # echo "You're local" # return 1 # fi # adduser --system --shell /bin/zsh --disabled-password $1 || return 1 # # wget abra.me/.dotfiles.tar.gz -O /home/$1/.dotfiles.tar.gz # # tar xf /home/$1/.dotfiles.tar.gz -C /home/$1 # # chown $1:nogroup -R /home/$1/ # } # function latest() { # echo -n ("${(@f)$(ls *(om[1,$1]))}") # } function testo { local A="${@[2,3]}" ./t.py ${(t)A} "$A" ${A[@]} unset A local A=("$@[2,3]") ./t.py ${(t)A} "$A" ${A[@]} unset A ./t.py "$@[2,3]" } # testo 1 "2 3" 4 # shit shit shit s hist h is htisthsi 2018-06-30 function ffmpeg_timelapse { FUNCTION_PRELUDE local DATE="$1" ls "/mnt/a/snaps/$DATE" | wc -l ffmpeg \ -framerate 60 \ -pattern_type glob -i "/mnt/a/snaps/$DATE/*.jpg" \ "${@:2}" \ -y "/mnt/a/tmp/$DATE.mp4" mv "/mnt/a/tmp/$DATE.mp4" "/mnt/a/$DATE.mp4" rm -rf "/mnt/a/snaps/$DATE" } function ffmpeg_timelapse_today { local TODAY="$(date '+%Y-%m-%d')" ffmpeg_timelapse "$TODAY" -preset ultrafast -crf 20 } function update_.g { if [[ ! -d "$HOME/.dotgit" ]]; then # no git to update return fi # force updating origin to new server .g remote set-url origin https://gitea.abra.me/svxf/dotfiles.git local RES="$(.g pull --no-stat 2>&1)" if [[ $? != 0 ]]; then # something went wrong return fi # no verbose :( # if [[ ! $RES =~ "Already up.to.date" ]]; then # echo "Updated .g" # echo $RES # echo "======" # echo # zshreload # fi } function .sh_setup { echo 'wget abra.me/.sh && chmod +x .sh && ./.sh' }