diff --git a/dotfiles/binaries-private.org b/dotfiles/binaries-private.org new file mode 100644 index 0000000..99213d6 --- /dev/null +++ b/dotfiles/binaries-private.org @@ -0,0 +1,111 @@ +#+TITLE: My own specific binaries +:DRAWER: +#+STARTUP: overview + +#+LANGUAGE: en +#+EMAIL: dehaeze.thomas@gmail.com +#+AUTHOR: Dehaeze Thomas + +#+HTML_LINK_HOME: ./index.html +#+HTML_LINK_UP: ./index.html + +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: + +#+PROPERTY: header-args:bash :comments both :mkdirp yes +#+PROPERTY: header-args:bash+ :shebang "#!/usr/bin/env bash" +:END: + +* =remote-desktop= - Remote Desktop Connect + +#+begin_src bash :tangle ~/.local/bin/remote-desktop + computer=$(echo -e 'RNICE\nPCMEL1\nPCNASS1\nPCMEG01' | dmenu -p 'Computer:' -l 20); + + case $computer in + PCMEL1) + rdesktop -a 16 -P -z -x m -r sound:off -g "80%" -u "ESRF\OPPEL" -p $(pass esrf/PCMEL1/OPPEL | sed -n 1p) pcmel1 + ;; + PCMEG01) + rdesktop -a 16 -P -z -x m -r sound:off -g "80%" -u "ESRF\DEHAEZE" -p $(pass ssl.esrf.fr/dehaeze | sed -n 1p) pcmeg01 + ;; + PCNASS1) + rdesktop -a 16 -P -z -x m -r sound:off -g "80%" -u "ESRF\DEHAEZE" -p $(pass ssl.esrf.fr/dehaeze | sed -n 1p) pcnass1 + ;; + RNICE) + echo "Not yet implemented" + ;; + ,*) + echo "Not existing" + ;; + esac +#+end_src + +* =print-rnice= - Print on Rnice + +#+begin_src bash :tangle ~/.local/bin/print-rnice + nbpage=$(echo -e '1\n2\n4' | dmenu -p 'Number of pages per sheet' -l 20); + sides=$(echo -e 'one-sided\ntwo-sided-long-edge\ntwo-sided-short-edge' | dmenu -p 'Two Sided:' -l 20); + + # First copy the file to Rnice + if sshpass -p "$(pass ssl.esrf.fr/dehaeze | sed -n 1p)" scp $1 dehaeze@rnice:~/Downloads/; then + # Then print on Rnice + sshpass -p "$(pass ssl.esrf.fr/dehaeze | sed -n 1p)" ssh dehaeze@rnice "lpr -o media=A4 -o sides=$sides -o number-up=$nbpage -P ctb110c1u ~/Downloads/$1"; + # Finally, delete the file + else + echo "Command Failed" + fi +#+end_src + +* =tmp14= - Mount/Umount tmp_14_days folder +#+begin_src bash :tangle ~/.local/bin/tmp_14_days + if [ $1 == "mount" ]; then + if sshfs -o allow_other,default_permissions -p 5022 dehaeze@firewall.esrf.fr:/tmp_14_days/ ~/mnt/ESRF; then + dunstify --replace=58249 'ESRF TMP ' 'Successfully mounted' + else + dunstify --replace=58249 --urgency=critical 'ESRF TMP ' 'Error while mounted' + fi + elif [ $1 == "umount" ]; then + if umount /home/thomas/mnt/ESRF/; then + dunstify --replace=58249 'ESRF TMP ' 'Successfully unmounted' + else + dunstify --replace=58249 --urgency=critical 'ESRF TMP ' 'Error while unmounted' + fi + fi +#+end_src + + +* =nas= - Interact with the NAS + +As an alternative, =sshfs= can be used: +#+begin_src bash :tangle no + sshfs -o allow_other,default_permissions nas:/Data ~/mnt/NAS +#+end_src + +#+begin_src bash :tangle ~/.local/bin/nas + if [ $1 == "mount" ]; then + if mount /home/thomas/mnt/NAS/; then + dunstify --replace=58249 'NAS ' 'Successfully mounted' + else + dunstify --replace=58249 --urgency=critical 'NAS ' 'Error while mounted' + fi + elif [ $1 == "umount" ]; then + if umount /home/thomas/mnt/NAS/; then + dunstify --replace=58249 'NAS ' 'Successfully unmounted' + else + dunstify --replace=58249 --urgency=critical 'NAS ' 'Error while unmounted' + fi + fi +#+end_src + +* =torrent-add= - Download Torrent + +#+begin_src bash :tangle ~/.local/bin/torrent-add + transmission-remote ***REMOVED***:9091 --auth tdehaeze:$(pass nas/transmission | sed -n 1p) -a $1 && \ + dunstify 'Torrent' 'Successfully added' || \ + dunstify 'Torrent' 'Error' + +#+end_src diff --git a/dotfiles/binaries.org b/dotfiles/binaries.org index 1bb8f86..72792bc 100644 --- a/dotfiles/binaries.org +++ b/dotfiles/binaries.org @@ -92,24 +92,6 @@ Script taken from Luke Smith. pgrep -x dunst >/dev/null && killall dunst && setsid dunst & # Restart dunst to ensure proper location on screen #+end_src -* TODO =getbib= - -#+begin_src bash :tangle ~/.local/bin/getbib - [ -z "$1" ] && echo "Give either a pdf file or a DOI as an argument." && exit - - if [ -f "$1" ]; then - # Try to get DOI from pdfinfo or pdftotext output. - doi=$(pdfinfo "$1" | grep -io "doi:.*") || - doi=$(pdftotext "$1" 2>/dev/null - | grep -io "doi:.*" -m 1) || - exit 1 - else - doi="$1" - fi - - # Check crossref.org for the bib citation. - curl -s "http://api.crossref.org/works/$doi/transform/application/x-bibtex" -w "\\n" -#+end_src - * =vpntoggle= - Connect to VPN using NordVPN #+begin_src bash :tangle ~/.local/bin/vpntoggle @@ -125,388 +107,374 @@ Script taken from Luke Smith. * =bukurun= - Open link from Buku #+begin_src bash :tangle ~/.local/bin/bukurun -_rofi () { - rofi -dmenu -i -no-levenshtein-sort -width 1000 "$@" -} + _rofi () { + rofi -dmenu -i -no-levenshtein-sort -width 1000 "$@" + } -# display settings -display_type=1 -max_str_width=80 + # display settings + display_type=1 + max_str_width=80 -# keybindings -switch_view="Alt+Tab" -new_bookmark="Alt+n" -actions="Alt+a" -edit="Alt+e" -delete="Alt+d" + # keybindings + switch_view="Alt+Tab" + new_bookmark="Alt+n" + actions="Alt+a" + edit="Alt+e" + delete="Alt+d" -# colors -help_color="#334433" + # colors + help_color="#334433" -# source global config -if [[ -f /etc/buku_run.config ]] -then - source /etc/buku_run.config -fi - -# source local config: -if [[ -z $XDG_CONFIG_DIR ]] -then - if [[ -f $HOME/.config/buku_run/config ]] + # source global config + if [[ -f /etc/buku_run.config ]] then - source $HOME/.config/buku_run/config - else - echo "User config file \'~/.config/buku_run/config\' not found. using global config" + source /etc/buku_run.config fi -else - if [[ -f "${XDG_CONFIG_DIR}/buku_run/config" ]] + + # source local config: + if [[ -z $XDG_CONFIG_DIR ]] then - source "${XDG_CONFIG_DIR}/buku_run/config" - else - echo "User config file \'~/.config/buku_run/config\' not found. using global config" - fi -fi - - -main () { - HELP="Welcome to Buku. Use ${new_bookmark} to add a new Bookmark -Use ${switch_view} to switch View. ${actions} for actions" - if [[ $mode == "bookmarks" ]]; then - content=$(parseBuku) - menu=$(echo "${content}" | _rofi -p '> ' -filter "${filter}" -mesg "${HELP}" -kb-custom-1 "${new_bookmark}" -kb-custom-2 "${switch_view}" -kb-custom-3 "${actions}" -kb-custom-4 "${edit}" -kb-custom-5 "${delete}") - elif [[ $mode == "tags" ]]; then - menu=$(buku --np --st | awk '{$NF=""; print $0}' | cut -d ' ' -f2- | _rofi -p '> ' -mesg "${HELP}" -kb-custom-1 "${new_bookmark}" -kb-custom-2 "${switch_view}" -kb-custom-3 "${actions}" -kb-custom-4 "${edit}" -kb-custom-5 "${delete}") - fi - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 12 ]]; then - optionsMenu - elif [[ $val -eq 10 ]]; then - addMark - elif [[ $val -eq 14 ]]; then - deleteMenu - elif [[ $val -eq 13 ]]; then - editMenu - elif [[ $val -eq 11 ]]; then - if [[ $mode == "bookmarks" ]]; then - export mode="tags" - mode=tags main - elif [[ $mode == "tags" ]]; then - export mode="bookmarks" - mode=bookmarks main - fi - elif [[ $val -eq 0 ]]; then - if [[ $mode == "bookmarks" ]]; then - id=$(getId "$content" "$menu") - for bm in ${id}; do - buku -o "${bm}" - done - elif [[ $mode == "tags" ]]; then - filter="${menu}" mode="bookmarks" main - fi - fi -} - -optionsMenu () { - if [[ $mode == "bookmarks" ]]; then - askmenu=$(echo -e "< Return\n---\n1. Edit\n2. Delete" | _rofi -p '> ' -mesg "Choose Action for bookmark") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $askmenu == "< Return" ]]; then - export mode=bookmarks - main - elif [[ $askmenu == "1. Edit" ]]; then - editMenu - elif [[ $askmenu == "2. Delete" ]]; then - deleteMenu - fi - fi - elif [[ $mode == "tags" ]]; then - askmenu=$(echo -e "< Return\n---\n1. Replace Tag\n2. Delete Tag" | _rofi -p '> ' -mesg "Choose Action for tag \"${menu}\"") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $askmenu == "< Return" ]]; then - export mode=tags - main - elif [[ $askmenu == "1. Replace Tag" ]]; then - newtag=$(echo | _rofi -p '> ' -mesg "Enter new tag name for tag \"${menu}\"") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $newtag == "" ]]; then - mode=tags main - else - buku -r "${menu}" "${newtag}" - mode=tags main - fi - fi - elif [[ $askmenu == "2. Delete Tag" ]]; then - delask=$(echo -e "1. Yes\n2. No" | _rofi -p '> ' -mesg "Really delete tag?") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $delask == "1. Yes" ]]; then - buku -r "${menu}" - mode=tags main - elif [[ $delask == "2. No" ]]; then - mode=tags main - fi - fi - fi - fi - fi -} - -deleteMenu () { - id=$(getId "$content" "$menu") - delask=$(echo -e "1. Yes\n2. No" | _rofi -p '> ' -mesg "Really delete bookmark?") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $delask == "1. Yes" ]]; then - buku -d ${id} --tacit - mode=bookmarks main - elif [[ $delask == "2. No" ]]; then - optionsMenu - fi - fi -} - -editMenu () { - id=$(getId "$content" "$menu") - title="$(getTitleFromId $id)" - bookmark="$(getUrlFromId $id)" - tags="$(getTagsFromId $id)" - content=$(echo -e "1. title: $title\n2. url: $bookmark\n3. tags: $tags") - editmenu=$(echo -e "< Return\n---\n${content}" | _rofi -p '> ') - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $editmenu == "< Return" ]]; then - main - elif [[ $editmenu == "tags: NOTAG" ]]; then - addTags --update - elif [[ $editmenu =~ tags:* ]]; then - tags="${tags}" editTags - elif [[ $editmenu =~ url:* ]]; then - editBookmark - elif [[ $editmenu =~ title:* ]]; then - editTitle - fi - fi -} - -editTags () { - edittagsmenu=$(echo | _rofi -filter "${tags}" -p '> ' -mesg "Edit Tags and hit Enter") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - buku -u ${id} --tag "${edittagsmenu}" - fi - mode=bookmarks main -} - -editBookmark () { - bmarkmenu=$(echo "" | _rofi -p "> " -filter "${bookmark}" -mesg "Edit Bookmark and hit Enter") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $bmarkmenu == "http"* ]]; then - buku -u "${id}" --url "${bmarkmenu}" - else - echo "" | rofi -e "Not a valid URI, Make sure URLs start with http" - editBookmark - fi - fi - mode=bookmarks main -} - -editTitle () { - titlemenu=$(echo "" | _rofi -p "> " -filter "${title}" -mesg "Edit Title and hit Enter") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - buku -u "${id}" --title "${titlemenu}" - fi - mode=bookmarks main -} - -addMark () { - inserturl=$(echo -e "$(xclip -o)" | _rofi -p '> ' -mesg "Use URL below or type manually") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - addTags - fi -} - -addTags () { - inserttags=$(buku --np --st | awk '{$NF=""; print $0}' | cut -d ' ' -f2- | _rofi -p '> ' -mesg "Add some tags. Separate tags with ', '") - val=$? - if [[ $val -eq 1 ]]; then - exit - elif [[ $val -eq 0 ]]; then - if [[ $(echo "${inserttags}" | wc -l) -gt 1 ]]; then - taglist=$(echo "${inserttags}" | tr '\n' ',') - tags=() - for tag in $taglist; do - tags+=("$tag") - done - else - tags=${inserttags} - fi - if [[ $1 == "--update" ]]; then - buku -u "${id}" --tag ${tags} - else - buku -a ${inserturl} ${tags} - fi - fi -} - -parseBuku () { - echo "$(buku --nc -p | gawk -v max="$max_str_width" -v type="$display_type" ' -BEGIN { - RS="" - FS="\n" -} -{ - if ($3 == "") - $3 = " # NOTAG" - id = gensub(/([0-9]+)\.(.*)/, "\\1", "g", $1) - url = substr(gensub(/\s+> (.*)/, "\\1", "g", $2),0,max) - tags = gensub(/\s+# (.*)/, "\\1", "g", $3) - title = substr(gensub(/[0-9]+\.\s*(.*)/, "\\1", "g", $1),0,max) - - if (type == 1) - print id "\t" url "\t" tags - else - print id "\t" title "\t" tags - if (type == 3) - print " \t" url "\t " - print "" -} -' | column -t -s $'\t')" -} - -getId () { - id=$(echo "${2%% *}") - if [ -z "$id" ]; then - prev="" - IFS=$'\n' - for line in $1; do - if [ "$2" = "$line" ]; then - id=$(echo "${prev%% *}") - break + if [[ -f $HOME/.config/buku_run/config ]] + then + source $HOME/.config/buku_run/config else - prev="$line" + echo "User config file \'~/.config/buku_run/config\' not found. using global config" + fi + else + if [[ -f "${XDG_CONFIG_DIR}/buku_run/config" ]] + then + source "${XDG_CONFIG_DIR}/buku_run/config" + else + echo "User config file \'~/.config/buku_run/config\' not found. using global config" fi - done fi - echo $id -} -getTitleFromId () { - echo "$(buku --nc -p $1 | gawk ' + + main () { + HELP="Welcome to Buku. Use ${new_bookmark} to add a new Bookmark + Use ${switch_view} to switch View. ${actions} for actions" + if [[ $mode == "bookmarks" ]]; then + content=$(parseBuku) + menu=$(echo "${content}" | _rofi -p '> ' -filter "${filter}" -mesg "${HELP}" -kb-custom-1 "${new_bookmark}" -kb-custom-2 "${switch_view}" -kb-custom-3 "${actions}" -kb-custom-4 "${edit}" -kb-custom-5 "${delete}") + elif [[ $mode == "tags" ]]; then + menu=$(buku --np --st | awk '{$NF=""; print $0}' | cut -d ' ' -f2- | _rofi -p '> ' -mesg "${HELP}" -kb-custom-1 "${new_bookmark}" -kb-custom-2 "${switch_view}" -kb-custom-3 "${actions}" -kb-custom-4 "${edit}" -kb-custom-5 "${delete}") + fi + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 12 ]]; then + optionsMenu + elif [[ $val -eq 10 ]]; then + addMark + elif [[ $val -eq 14 ]]; then + deleteMenu + elif [[ $val -eq 13 ]]; then + editMenu + elif [[ $val -eq 11 ]]; then + if [[ $mode == "bookmarks" ]]; then + export mode="tags" + mode=tags main + elif [[ $mode == "tags" ]]; then + export mode="bookmarks" + mode=bookmarks main + fi + elif [[ $val -eq 0 ]]; then + if [[ $mode == "bookmarks" ]]; then + id=$(getId "$content" "$menu") + for bm in ${id}; do + buku -o "${bm}" + done + elif [[ $mode == "tags" ]]; then + filter="${menu}" mode="bookmarks" main + fi + fi + } + + optionsMenu () { + if [[ $mode == "bookmarks" ]]; then + askmenu=$(echo -e "< Return\n---\n1. Edit\n2. Delete" | _rofi -p '> ' -mesg "Choose Action for bookmark") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $askmenu == "< Return" ]]; then + export mode=bookmarks + main + elif [[ $askmenu == "1. Edit" ]]; then + editMenu + elif [[ $askmenu == "2. Delete" ]]; then + deleteMenu + fi + fi + elif [[ $mode == "tags" ]]; then + askmenu=$(echo -e "< Return\n---\n1. Replace Tag\n2. Delete Tag" | _rofi -p '> ' -mesg "Choose Action for tag \"${menu}\"") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $askmenu == "< Return" ]]; then + export mode=tags + main + elif [[ $askmenu == "1. Replace Tag" ]]; then + newtag=$(echo | _rofi -p '> ' -mesg "Enter new tag name for tag \"${menu}\"") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $newtag == "" ]]; then + mode=tags main + else + buku -r "${menu}" "${newtag}" + mode=tags main + fi + fi + elif [[ $askmenu == "2. Delete Tag" ]]; then + delask=$(echo -e "1. Yes\n2. No" | _rofi -p '> ' -mesg "Really delete tag?") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $delask == "1. Yes" ]]; then + buku -r "${menu}" + mode=tags main + elif [[ $delask == "2. No" ]]; then + mode=tags main + fi + fi + fi + fi + fi + } + + deleteMenu () { + id=$(getId "$content" "$menu") + delask=$(echo -e "1. Yes\n2. No" | _rofi -p '> ' -mesg "Really delete bookmark?") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $delask == "1. Yes" ]]; then + buku -d ${id} --tacit + mode=bookmarks main + elif [[ $delask == "2. No" ]]; then + optionsMenu + fi + fi + } + + editMenu () { + id=$(getId "$content" "$menu") + title="$(getTitleFromId $id)" + bookmark="$(getUrlFromId $id)" + tags="$(getTagsFromId $id)" + content=$(echo -e "1. title: $title\n2. url: $bookmark\n3. tags: $tags") + editmenu=$(echo -e "< Return\n---\n${content}" | _rofi -p '> ') + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $editmenu == "< Return" ]]; then + main + elif [[ $editmenu == "tags: NOTAG" ]]; then + addTags --update + elif [[ $editmenu =~ tags:* ]]; then + tags="${tags}" editTags + elif [[ $editmenu =~ url:* ]]; then + editBookmark + elif [[ $editmenu =~ title:* ]]; then + editTitle + fi + fi + } + + editTags () { + edittagsmenu=$(echo | _rofi -filter "${tags}" -p '> ' -mesg "Edit Tags and hit Enter") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + buku -u ${id} --tag "${edittagsmenu}" + fi + mode=bookmarks main + } + + editBookmark () { + bmarkmenu=$(echo "" | _rofi -p "> " -filter "${bookmark}" -mesg "Edit Bookmark and hit Enter") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $bmarkmenu == "http"* ]]; then + buku -u "${id}" --url "${bmarkmenu}" + else + echo "" | rofi -e "Not a valid URI, Make sure URLs start with http" + editBookmark + fi + fi + mode=bookmarks main + } + + editTitle () { + titlemenu=$(echo "" | _rofi -p "> " -filter "${title}" -mesg "Edit Title and hit Enter") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + buku -u "${id}" --title "${titlemenu}" + fi + mode=bookmarks main + } + + addMark () { + inserturl=$(echo -e "$(xclip -o)" | _rofi -p '> ' -mesg "Use URL below or type manually") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + addTags + fi + } + + addTags () { + inserttags=$(buku --np --st | awk '{$NF=""; print $0}' | cut -d ' ' -f2- | _rofi -p '> ' -mesg "Add some tags. Separate tags with ', '") + val=$? + if [[ $val -eq 1 ]]; then + exit + elif [[ $val -eq 0 ]]; then + if [[ $(echo "${inserttags}" | wc -l) -gt 1 ]]; then + taglist=$(echo "${inserttags}" | tr '\n' ',') + tags=() + for tag in $taglist; do + tags+=("$tag") + done + else + tags=${inserttags} + fi + if [[ $1 == "--update" ]]; then + buku -u "${id}" --tag ${tags} + else + buku -a ${inserturl} ${tags} + fi + fi + } + + parseBuku () { + echo "$(buku --nc -p | gawk -v max="$max_str_width" -v type="$display_type" ' BEGIN { RS="" FS="\n" } { - print gensub(/[0-9]+\.\s*(.*)/, "\\1", "g", $1) - } - ')" -} + if ($3 == "") + $3 = " # NOTAG" + id = gensub(/([0-9]+)\.(.*)/, "\\1", "g", $1) + url = substr(gensub(/\s+> (.*)/, "\\1", "g", $2),0,max) + tags = gensub(/\s+# (.*)/, "\\1", "g", $3) + title = substr(gensub(/[0-9]+\.\s*(.*)/, "\\1", "g", $1),0,max) -getUrlFromId () { - echo "$(buku --nc -p $1 | gawk ' - BEGIN { - RS="" - FS="\n" + if (type == 1) + print id "\t" url "\t" tags + else + print id "\t" title "\t" tags + if (type == 3) + print " \t" url "\t " + print "" } - { - print gensub(/\s+> (.*)/, "\\1", "g", $2) + ' | column -t -s $'\t')" } - ')" -} -getTagsFromId () { - echo "$(buku --nc -p $1 | gawk ' - BEGIN { - RS="" - FS="\n" + getId () { + id=$(echo "${2%% *}") + if [ -z "$id" ]; then + prev="" + IFS=$'\n' + for line in $1; do + if [ "$2" = "$line" ]; then + id=$(echo "${prev%% *}") + break + else + prev="$line" + fi + done + fi + echo $id } - { - print gensub(/\s+# (.*)/, "\\1", "g", $3) - } - ')" -} -mode=bookmarks main + getTitleFromId () { + echo "$(buku --nc -p $1 | gawk ' + BEGIN { + RS="" + FS="\n" + } + { + print gensub(/[0-9]+\.\s*(.*)/, "\\1", "g", $1) + } + ')" + } + + getUrlFromId () { + echo "$(buku --nc -p $1 | gawk ' + BEGIN { + RS="" + FS="\n" + } + { + print gensub(/\s+> (.*)/, "\\1", "g", $2) + } + ')" + } + + getTagsFromId () { + echo "$(buku --nc -p $1 | gawk ' + BEGIN { + RS="" + FS="\n" + } + { + print gensub(/\s+# (.*)/, "\\1", "g", $3) + } + ')" + } + + mode=bookmarks main #+end_src * =i3exit= - Manage lock, suspend, reboot, ... #+begin_src bash :tangle ~/.local/bin/i3exit - # with openrc use loginctl - case "$1" in - lock) + option=$(echo -e "Lock\nExit\nLogout\nSuspend\nHibernate\nReboot\nShutdown" | rofi -i -dmenu) + + case "$option" in + "Lock") ~/.local/bin/lockscreen ;; - logout) - loginctl terminate-session `loginctl session-status | head -n 1 | awk '{print $1}'` - ;; - switch_user) + "Exit") dm-tool switch-to-greeter ;; - suspend) + "Logout") + loginctl terminate-session `loginctl session-status | head -n 1 | awk '{print $1}'` + ;; + "Suspend") systemctl suspend && ~/.local/bin/lockscreen ;; - hibernate) + "Hibernate") systemctl hibernate && ~/.local/bin/lockscreen ;; - reboot) + "Reboot") systemctl reboot ;; - shutdown) + "Shutdown") systemctl poweroff ;; ,*) echo "== ! i3exit: missing or invalid argument ! ==" - echo "Try again with: lock | logout | switch_user | suspend | hibernate | reboot | shutdown" exit 2 esac exit 0 #+end_src -* =readbib= - Open Bibliography File - -#+begin_src bash :tangle ~/.local/bin/readbib - cd ~/Cloud/thesis/ressources/pdfs/ && ls | rofi -dmenu -lines 20 | xargs -I {} zathura {} -#+end_src - -* =readnotes= - Open Note File - -#+begin_src bash :tangle ~/.local/bin/readnotes - cd ~/Cloud/thesis/ressources/notes/pdfs/ && ls *.pdf | rofi -dmenu -lines 20 | xargs -I {} zathura {} -#+end_src - -* TODO =askpass-rofi= - askpass -- [ ] Should be a script - +* =askpass-rofi= - GUI prompt for passwords Take password prompt from STDIN, print password to STDOUT. The sed piece just removes the colon from the provided prompt: =rofi -p= already gives us a colon #+BEGIN_SRC bash :tangle ~/.local/bin/askpass-rofi @@ -547,30 +515,6 @@ The sed piece just removes the colon from the provided prompt: =rofi -p= already esac #+end_src -* =remote-desktop= - Remote Desktop Connect - -#+begin_src bash :tangle ~/.local/bin/remote-desktop - computer=$(echo -e 'RNICE\nPCMEL1\nPCNASS1\nPCMEG01' | dmenu -p 'Computer:' -l 20); - - case $computer in - PCMEL1) - rdesktop -a 16 -P -z -x m -r sound:off -g "80%" -u "ESRF\OPPEL" -p $(pass esrf/PCMEL1/OPPEL | sed -n 1p) pcmel1 - ;; - PCMEG01) - rdesktop -a 16 -P -z -x m -r sound:off -g "80%" -u "ESRF\DEHAEZE" -p $(pass ssl.esrf.fr/dehaeze | sed -n 1p) pcmeg01 - ;; - PCNASS1) - rdesktop -a 16 -P -z -x m -r sound:off -g "80%" -u "ESRF\DEHAEZE" -p $(pass ssl.esrf.fr/dehaeze | sed -n 1p) pcnass1 - ;; - RNICE) - echo "Not yet implemented" - ;; - ,*) - echo "Not existing" - ;; - esac -#+end_src - * =network-toggle= - Toggle Network #+begin_src bash :tangle ~/.local/bin/network-toggle @@ -586,32 +530,7 @@ The sed piece just removes the colon from the provided prompt: =rofi -p= already fi #+end_src -* =print-rnice= - Print on Rnice - -#+begin_src bash :tangle ~/.local/bin/print-rnice - nbpage=$(echo -e '1\n2\n4' | dmenu -p 'Number of pages per sheet' -l 20); - sides=$(echo -e 'one-sided\ntwo-sided-long-edge\ntwo-sided-short-edge' | dmenu -p 'Two Sided:' -l 20); - - # First copy the file to Rnice - if sshpass -p "$(pass ssl.esrf.fr/dehaeze | sed -n 1p)" scp $1 dehaeze@rnice:~/Downloads/; then - # Then print on Rnice - sshpass -p "$(pass ssl.esrf.fr/dehaeze | sed -n 1p)" ssh dehaeze@rnice "lpr -o media=A4 -o sides=$sides -o number-up=$nbpage -P ctb110c1u ~/Downloads/$1"; - # Finally, delete the file - else - echo "Command Failed" - fi -#+end_src - -* TODO =mnt_tmp_14_days= - Mount TMP14DAYS -- [ ] Put that as a script? - -#+begin_src bash :tangle ~/.local/bin/mnt_tmp_14_days - sudo -A mkdir ~/tmp_14_days; - sudo -A mount -o rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=160.103.232.103,mountvers=3,mountport=597,mountproto=tcp,local_lock=none,addr=160.103.232.103 rnice:/hz/tmp_14_days ~/tmp_14_days; -#+end_src - * =make-gif= - Make GIF -http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html #+begin_src bash :tangle ~/.local/bin/make-gif palette="/tmp/palette.png" @@ -621,6 +540,7 @@ http://blog.pkh.me/p/21-high-quality-gif-with-ffmpeg.html 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 #+end_src + * =yt-audio= - Download-Audio from youtube #+begin_src bash :tangle ~/.local/bin/yt-audio @@ -642,77 +562,6 @@ else setsid nohup youtube-dl --add-metadata -ic $1 &> /dev/null & fi #+end_src -* =pdf-shrink= Pdf Shrink - -#+begin_src bash :tangle ~/.local/bin/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" -#+end_src * =setbg= - Set Background #+begin_src bash :tangle ~/.local/bin/setbg @@ -730,7 +579,7 @@ fi # Must have xclip installed to even show menu. xclip -h 2>/dev/null || exit 1 - chosen=$(cut -d ';' -f1 ~/.local/data/emoji | rofi -dmenu -i -l 20 | sed "s/ .*//") + chosen=$(cut -d ';' -f1 ~/.local/data/emojis | rofi -dmenu -i -l 20 | sed "s/ .*//") [ "$chosen" != "" ] || exit @@ -762,29 +611,6 @@ fi fi #+end_src -* =nas= - Interact with the NAS - -As an alternative, =sshfs= can be used: -#+begin_src bash :tangle no - sshfs -o allow_other,default_permissions nas:/Data ~/mnt/NAS -#+end_src - -#+begin_src bash :tangle ~/.local/bin/nas - if [ $1 == "mount" ]; then - if mount /home/thomas/mnt/NAS/; then - dunstify --replace=58249 'NAS ' 'Successfully mounted' - else - dunstify --replace=58249 --urgency=critical 'NAS ' 'Error while mounted' - fi - elif [ $1 == "umount" ]; then - if umount /home/thomas/mnt/NAS/; then - dunstify --replace=58249 'NAS ' 'Successfully unmounted' - else - dunstify --replace=58249 --urgency=critical 'NAS ' 'Error while unmounted' - fi - fi -#+end_src - * =linkhandler= - Open with Default application Inspired from =linkhandler= https://github.com/LukeSmithxyz/voidrice/ This is used in =newsboat= to handle links @@ -871,40 +697,6 @@ Finally, lock the screen using =i3lock=. revert #+end_src -* TODO =quit= - Lock / Exit / Suspend / ... -- [ ] Seems duplicated with [[file:binaries.org::*=i3exit= - Manage lock, suspend, reboot, ...][=i3exit= - Manage lock, suspend, reboot, ...]] -- [ ] Also change the binary name - -#+begin_src bash :tangle ~/.local/bin/quit - 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 -#+end_src - -* =torrent-add= - Download Torrent - -#+begin_src bash :tangle ~/.local/bin/torrent-add - transmission-remote ***REMOVED***:9091 --auth tdehaeze:$(pass nas/transmission | sed -n 1p) -a $1 && \ - dunstify 'Torrent' 'Successfully added' || \ - dunstify 'Torrent' 'Error' - -#+end_src - * =mopidy-restart= - Restart Mopidy #+begin_src bash :tangle ~/.local/bin/mopidy-restart pids=( $(pgrep -f mopidy) ) @@ -920,3 +712,182 @@ Finally, lock the screen using =i3lock=. mopidy --config ~/.config/mopidy/mopidy.conf >/dev/null 2>&1 & echo "Done" #+end_src + +* =upload= - Upload Script +#+begin_src bash :tangle ~/.local/bin/upload + if [ $TMUX ]; then + tmux split -v -l 1 "curl --progress-bar -F\"file=@$1\" https://0x0.st | xsel -ib;" && tmux select-pane -U + else + curl --progress-bar -F"file=@$1" https://0x0.st | xsel -ib && \ + dunstify 'Upload' 'Successful' || \ + dunstify --urgency=critical 'Upload' 'Failed' + fi +#+end_src + +* =weather= - Display Weather in terminal +#+begin_src bash :tangle ~/.local/bin/weather + if [ -n "$*" ]; then + address="wttr.in/" + address+=$* + else + address="wttr.in/" + fi + + if type sxiv > /dev/null 2>&1; then + address+=".png" + + wget -qO- "$address" > /tmp/weather.png && \ + sxiv -b /tmp/weather.png + elif type feh > /dev/null 2>&1; then + address+=".png" + + wget -qO- "$address" | feh - + else + curl "$address" + fi +#+end_src +* =readbib= - Open Bibliography File + +#+begin_src bash :tangle ~/.local/bin/readbib + cd ~/Cloud/pdfs/ && ls | rofi -dmenu -lines 20 | xargs -I {} zathura {} +#+end_src + +* =readnotes= - Open Note File + +#+begin_src bash :tangle ~/.local/bin/readnotes + cd ~/Cloud/thesis/ressources/notes/pdfs/ && ls *.pdf | rofi -dmenu -lines 20 | xargs -I {} zathura {} +#+end_src + +* =pdf2bib= - Extract bibtex entry from PDF file +#+begin_src bash :tangle ~/.local/bin/pdf2bib + pdf2doi () { + pdfinfo "$1" | grep -io "doi:.*" | grep -Poi "10.\d+/[^\s]+" || \ + pdftotext "$1" 2>/dev/null - | grep -io "doi:.*" -m 1 | grep -Poi "10.\d+/[^\s]+" || \ + pdftotext "$1" 2>/dev/null - | grep -Poi "10.\d+/[^\s]+" + } + + doi2bib () { + # curl -LHs "Accept: application/x-bibtex" http://dx.doi.org/$1 -w "\\n" + curl -s "http://api.crossref.org/works/$1/transform/application/x-bibtex" -w "\\n" + } + + # If a file is specified, try to extract DOI from the file + if [ -f "$1" ]; then + doi=$(pdf2doi "$1") + fi + + if hash rofi 2>/dev/null; then + doi=$(echo "$doi" | rofi -i -dmenu -p "DOI") + else + doi=$(echo "$doi" | dmenu -i -p "DOI") + fi + + if [ -n "$1" ]; then + doi2bib $doi | xsel -ib && \ + dunstify 'BibTeX' 'Copied to Clipboard' || \ + dunstify --urgency=critical 'BibTeX' 'Failed' + fi +#+end_src + +* =pdf2png= - Convert a PDF to PNG +#+begin_src bash :tangle ~/.local/bin/pdf2png + if [[ -f $1 && $1 == *.pdf ]]; then + pdftoppm -png $1 > $(echo $1 | cut -f 1 -d '.' | sed 's/$/.png/') + fi +#+end_src +* =pdf-shrink= - Pdf Shrink + +#+begin_src bash :tangle ~/.local/bin/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" +#+end_src +* =pdf-delete-annotations= - Delete Annotations from PDFs +From: https://gist.github.com/stefanschmidt/5248592 + +#+begin_src bash :tangle ~/.local/bin/pdf-delete-annotations + pdftk $1 output /tmp/uncompressed.pdf uncompress + LANG=C sed -n '/^\/Annots/!p' /tmp/uncompressed.pdf > /tmp/stripped.pdf + pdftk /tmp/stripped.pdf output $1 compress +#+end_src + +* =pdf-delete-first-page= - Delete first page of PDF +The requirement is to have =pdftk= or =stapler= installed. + +#+begin_src bash :tangle ~/.local/bin/pdf-delete-first-page + if [[ -f $1 && $1 == *.pdf ]]; then + # Argument if a file + if type stapler > /dev/null 2>&1; then + stapler del "$1" 1 /tmp/pdftk_out.pdf && mv /tmp/pdftk_out.pdf "$1" + elif type pdftk > /dev/null 2>&1; 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 +#+end_src +