Files
dotfiles/.zprezto/abra/functions.zsh
2018-10-28 01:02:03 +04:00

322 lines
5.6 KiB
Bash

function myfacl {
FUNCTION_PRELUDE
if [[ ( -z $1 ) || ( -z $2 ) ]]; then
echo ':('
return 1
fi
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 is_local {
local HOSTNAME="$(hostname)"
[[ "$HOSTNAME" =~ '^abra0' || "$HOSTNAME" == "svxf2-osx" ]]
}
function mount_sshfs {
FUNCTION_PRELUDE
if [[ ( -z $1 ) || ( -z $2 ) ]]; then
echo ':('
return 1
fi
local MOUNT_PATH="/Users/$USER/mount/$1"
mkdir -p "$MOUNT_PATH"
if mount | grep "$MOUNT_PATH"; then
umount "$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 \
"$1:$2" "$MOUNT_PATH"
local REMOTE_COMMAND_PIPE_PATH="/projects/subl_remote/fifo"
local LOCAL_COMMAND_PIPE_PATH="/Users/$USER/mount/$1/$REMOTE_COMMAND_PIPE_PATH"
if [[ ! -e "$LOCAL_COMMAND_PIPE_PATH" ]]; then
echo "Can't find the command pipe"
return
fi
echo "Starting remote command pipe..."
ssh $1 -- tail -f "$REMOTE_COMMAND_PIPE_PATH" | zsh -x
}
function sublr {
FUNCTION_PRELUDE
local HOSTNAME=$(hostname)
local FULL_PATH=$(realpath $1)
echo "subl /Users/abra/mount/$HOSTNAME/$FULL_PATH" > /projects/subl_remote/fifo
}
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'
}