Scripts
Table of Contents
Wallpapers
while true; do nitrogen --set-zoom-fill --random ".wallpapers" sleep 10m done
TODO LockScreen
[ ]
Does not work well with multiple screen
First, turn off dunst
killall -SIGUSR1 dunst && echo "off" > /tmp/dunststatus;
Turn off the music if it is playing.
MPC_STATE=$(mpc | sed -n '2p' | cut -d "[" -f2 | cut -d "]" -f1) if [[ $MPC_STATE == "playing" ]]; then mpc pause fi
Then take a screenshot and process it.
temp_file="/tmp/screen.png" rm -f $temp_file maim $temp_file convert $temp_file -scale 10% -scale 1000% $temp_file
Finally, lock the screen using i3lock
.
i3lock -e -n -i $temp_file && killall -SIGUSR2 dunst && echo "on" > /tmp/dunststatus
revert() { xset dpms 0 0 0 } trap revert HUP INT TERM # turn off screen after 5 seconds xset +dpms dpms 5 5 5 # Parameters temp_file="/tmp/screen.png" icon="$HOME/Pictures/Evil_Rick_Sprite.png" width=1920 height=1080 blur_factor=6 lock_blur_factor=0 # Take the screen shot, blur the image and add the icon ffmpeg -f x11grab -video_size "${width}x${height}" -y -i $DISPLAY -i $icon -filter_complex "boxblur=$blur_factor:$blur_factor,overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2,boxblur=$lock_blur_factor:$lock_blur_factor" -vframes 1 $temp_file # Alternative # maim -d 1 $temp_file # convert -blur 0x8 $temp_file $temp_file # convert -composite $temp_file $icon -gravity South -geometry -20x1200 $temp_file # Lock the screen with the image i3lock --no-unlock-indicator --ignore-empty-password --show-failed-attempts --nofork --image=$temp_file # Remove the screenshot rm $temp_file # Don't turn off screen when back from lock revert
Delete first page of PDF
The requirement is to have pdftk
or stapler
installed.
if [[ -f $1 && $1 == *.pdf ]]; then # Argument if a file if type stapler > /dev/null; then stapler del "$1" 1 /tmp/pdftk_out.pdf && mv /tmp/pdftk_out.pdf "$1" elif type pdftk > /dev/null; then pdftk "$1" cat 2-end output /tmp/pdftk_out.pdf && mv /tmp/pdftk_out.pdf "$1" else echo "Neither pdftk nor stapler are installed" fi fi
Lock / Exit / Suspend / …
option=$(echo -e "Lock\nExit\nLogout\nSuspend\nHibernate\nReboot\nShutdown" | rofi -i -dmenu) case "$option" in "Lock") i3exit lock ;; "Exit") i3exit switch_user ;; "Logout") i3exit logout ;; "Suspend") i3exit suspend ;; "Hibernate") i3exit hibernate ;; "Reboot") i3exit reboot ;; "Shutdown") i3exit shutdown ;; esac
TODO Copy Figures
Things to do:
[ ]
Display all the figures at once and ask for confirmation to copy them all[ ]
Display the not found figures
latexpath="$HOME/Cloud/thesis/latex/ressources/Figures"; figures=`awk 'match($0, /(fig.*\.(png|svg|pdf))/, a) {print a[1];}' $1 \ | awk '{ print gensub(/\s*\]\]\s*\|\s*\[\[\s*\.?\/?/, "\n", "g") }'`; for figure in $figures do figurename=`echo $figure | awk 'match($0, /(fig.*\/)(.*\.(png|svg|pdf))/, a) {print a[2];}'`; if [ -f $latexpath/$figurename ] then figurepath=`echo $figure | awk 'match($0, /(fig.*)\/(.*\.(png|svg|pdf))/, a) {print a[1];}'`; # echo $latexpath/$figurename # echo $figurepath/$figurename cp $latexpath/$figurename $figurepath/$figurename # read -r -p "Are You Sure? [Y/n] " input # case $input in # [yY][eE][sS]|[yY]) # cp $latexpath/$figurename $figurepath/$figurename # ;; # [nN][oO]|[nN]) # exit 1 # ;; # *) # echo "Invalid input..." # exit 1 # ;; # esac fi done
NAS
Mount
if [ $1 == "mount" ]; then if sudo -A mount 192.168.1.2:/volume1/Downloads/ /mnt/NAS/; then dunstify --replace=58249 'NAS' 'Successfully mounted' else dunstify --replace=58249 'NAS' 'Error while mounted' fi elif [ $1 == "umount" ]; then if sudo -A umount /mnt/NAS/; then dunstify --replace=58249 'NAS' 'Successfully unmounted' else dunstify --replace=58249 'NAS' 'Error while unmounted' fi fi
Buku Git Push
cd ~/.local/share/buku/ if [[ ! -z $(git status -s bookmarks.db) ]] then git add bookmarks.db git commit -m "Changed bookmarks - $(date +%F)" git push dunstify --replace=79248 "Buku Git" "Updated" exit fi
Icons Unicode
command -v xclip >/dev/null 2>&1 || { echo >&2 "I require xclip but it's not installed. Aborting."; exit 1; } chosen=$(grep -v "#" ~/.config/emoji | dmenu -i -l 20) [ "$chosen" != "" ] || exit c=$(echo "$chosen" | sed "s/ .*//") echo "$c" | tr -d '\n' | xclip -selection clipboard dunstify --replace=05896 "'$c' copied to clipboard." &
Make GIF
http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html
palette="/tmp/palette.png" filters="fps=15,scale=320:-1:flags=lanczos" ffmpeg -v warning -i $1 -vf "$filters,palettegen" -y $palette ffmpeg -v warning -i $1 -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y $2
Org-Capture
xclip -o -selection primary | xclip -o -selection clipboard -i emacsclient -ne '(org-capture "" "Q")' && dunstify "Emacs" "Text Successfully Captured"
Download-Audio
if [ $TMUX ]; then tmux split -v -l 1 "cd ~/Downloads/ && youtube-dl --add-metadata -xic -f bestaudio/best $1" && tmux select-pane -U else cd ~/Downloads/; setsid nohup youtube-dl --add-metadata -xic -f bestaudio/best $1 &> /dev/null & fi
Download-Video
if [ $TMUX ]; then tmux split -v -l 1 "cd ~/Downloads/ && youtube-dl --add-metadata -ic $1" && tmux select-pane -U else cd ~/Downloads/; setsid nohup youtube-dl --add-metadata -ic $1 &> /dev/null & fi
Org-Protocol-Capture-HTML
Defaults
heading="link" template="pu" url="https://google.com/"
Functions
function debug { if [[ -n $debug ]] then function debug { echo "DEBUG: $@" >&2 } debug "$@" else function debug { true } fi } function die { echo "$@" >&2 exit 1 } function urlencode { python -c " from __future__ import print_function try: from urllib import quote # Python 2 except ImportError: from urllib.parse import quote # Python 3 import sys print(quote(sys.stdin.read()[:-1], safe=''))" }
Documentation
function usage { cat <<EOF $0 [OPTIONS] [HTML] html | $0 [OPTIONS] Send HTML to Emacs through org-protocol, passing it through Pandoc to convert HTML to Org-mode. HTML may be passed as an argument or through STDIN. If only URL is given, it will be downloaded and its contents used. Options: -h, --heading HEADING Heading -t, --template TEMPLATE org-capture template key (default: pu) -u, --url URL URL --debug Print debug info --help I need somebody! EOF }
Arguments
args=$(getopt -n "$0" -o dh:rt:u: -l debug,help,heading:,template:,url: -- "$@") \ || die "Unable to parse args. Is getopt installed?" eval set -- "$args" while true do case "$1" in -d|--debug) debug=true debug "Debugging on" ;; --help) usage exit ;; -h|--heading) shift heading="$1" ;; -t|--template) shift template="$1" ;; -u|--url) shift url="$1" ;; --) # Remaining args shift rest=("$@") break ;; esac shift done debug "ARGS: $args" debug "Remaining args: ${rest[@]}"
Get HTML
if [[ -n $@ ]] then debug "Text from args" body="$@" fi
URL-encode
heading=$(urlencode <<<"$heading") || die "Unable to urlencode heading." url=$(urlencode <<<"$url") || die "Unable to urlencode URL." body=$(urlencode <<<"$body") || die "Unable to urlencode text."
Send to Emacs
emacsclient "org-protocol://capture?template=$template&url=$url&title=$heading&body=$body"
Pdf Shrink
shrink () { gs \ -q -dNOPAUSE -dBATCH -dSAFER \ -sDEVICE=pdfwrite \ -dCompatibilityLevel=1.3 \ -dPDFSETTINGS=/screen \ -dEmbedAllFonts=true \ -dSubsetFonts=true \ -dAutoRotatePages=/None \ -dColorImageDownsampleType=/Bicubic \ -dColorImageResolution=$3 \ -dGrayImageDownsampleType=/Bicubic \ -dGrayImageResolution=$3 \ -dMonoImageDownsampleType=/Subsample \ -dMonoImageResolution=$3 \ -sOutputFile="$2" \ "$1" } check_smaller () { # If $1 and $2 are regular files, we can compare file sizes to # see if we succeeded in shrinking. If not, we copy $1 over $2: if [ ! -f "$1" -o ! -f "$2" ]; then return 0; fi ISIZE="$(echo $(wc -c "$1") | cut -f1 -d\ )" OSIZE="$(echo $(wc -c "$2") | cut -f1 -d\ )" if [ "$ISIZE" -lt "$OSIZE" ]; then echo "Input smaller than output, doing straight copy" >&2 cp "$1" "$2" fi } usage () { echo "Reduces PDF filesize by lossy recompressing with Ghostscript." echo "Not guaranteed to succeed, but usually works." echo " Usage: $1 infile [outfile] [resolution_in_dpi]" } IFILE="$1" # Need an input file: if [ -z "$IFILE" ]; then usage "$0" exit 1 fi # Output filename defaults to "-" (stdout) unless given: if [ ! -z "$2" ]; then OFILE="$2" else OFILE="-" fi # Output resolution defaults to 72 unless given: if [ ! -z "$3" ]; then res="$3" else res="90" fi shrink "$IFILE" "$OFILE" "$res" || exit $? check_smaller "$IFILE" "$OFILE"