From f6aa3ad52f6fb2cedcbf9174c1c008be563248c6 Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Thu, 30 May 2024 23:00:39 +0200 Subject: trl: decide languages after The languages I want to use vary too much so it was too cumbersome, instead I chose the approach where I put in the word and decide the languages after. --- bin/extra/trl | 101 +++++++++++++--------------------------------------------- 1 file changed, 22 insertions(+), 79 deletions(-) (limited to 'bin/extra') diff --git a/bin/extra/trl b/bin/extra/trl index ee42040..bd4c2c5 100755 --- a/bin/extra/trl +++ b/bin/extra/trl @@ -1,20 +1,8 @@ #!/bin/sh -# prints on stderr -log () { >&2 echo "$@"; } +# Translate words using http://context.reverso.net and scraping the answers +# with 'pup' and 'curl'. -help () -{ - >&2 cat <<-EOF - h help - l clear output - q quit - - i invert languages - p select primary - s select secondary - EOF -} # returns available languages languages () { cat <<-EOF @@ -46,70 +34,25 @@ languages () { EOF } -# translates a word -# $1: primary language -# $2: secondary language -# $3: word to translate -translate () -{ - curl -s "https://context.reverso.net/translation/$1-$2/$3" \ - --compressed \ - -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0' \ - -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' \ - -H 'Accept-Language: en-US,en;q=0.5' \ - -H 'Accept-Encoding: gzip, deflate, br' | - pup 'a.link_highlighted em text{}' | - sed 's/.*/\L&/' | - sort | uniq | sed 's/.*/ &/' -} - -# prints the current language -current_language () -{ - log " current: $primary-$secondary" -} - -select_language () -{ - tmp="$(languages | fzf)" - [ "$tmp" ] && [ "$tmp" != "$primary" ] && [ "$tmp" != "$secondary" ] && - eval "$1=\"$tmp\"" - current_language -} - -# set default languages -primary=french -secondary=dutch - - -main () -{ - current_language - while true - do - log -n '>' - read -r prompt - test $? -eq 1 && exit 0 # quit on ctrl-d - case "$prompt" in - q) break ;; - l) clear ;; - i) tmp="$secondary"; secondary="$primary"; primary="$tmp" - current_language ;; - h) help ;; # TODO - p) select_language primary ;; - s) select_language secondary ;; - '') ;; - *) translate "$primary" "$secondary" "$prompt" ;; - esac - done -} - - -if [ "$1" = "--help" ] || [ "$1" = "-h" ] +if [ -z "${word:=$1}" ] then - log "usage: trl" - help - exit + >&2 printf '>' + word="$(head -n1)" fi - -main +[ "$word" ] || exit 1 + +primary="$(languages | fzf)" +[ "$primary" ] || exit 1 + +secondary="$(languages | fzf)" +[ "$secondary" ] || exit 1 + +curl -s "https://context.reverso.net/translation/$primary-$secondary/$word" \ + --compressed \ + -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0' \ + -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' \ + -H 'Accept-Language: en-US,en;q=0.5' \ + -H 'Accept-Encoding: gzip, deflate, br' | + pup 'a.link_highlighted em text{}' | + sed 's/.*/\L&/' | + sort | uniq | sed 's/.*/ &/' -- cgit v1.2.3 From dccc861f61115477deaec687e0eeb237576d41da Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Mon, 3 Jun 2024 16:08:07 +0200 Subject: fix: notify when ytplay --- bin/extra/ytplay | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'bin/extra') diff --git a/bin/extra/ytplay b/bin/extra/ytplay index b5c1a8c..66204c4 100755 --- a/bin/extra/ytplay +++ b/bin/extra/ytplay @@ -1,2 +1,4 @@ #!/bin/sh -yt-dlp -o - "$(ytlink)" | mpv - +url="$(ytlink)" +notify-send "playing: $url" & +yt-dlp -o - "$url" | mpv - -- cgit v1.2.3 From e29fa5ad48e10322f972d82939f74c503892613e Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Tue, 4 Jun 2024 23:11:14 +0200 Subject: checkpoint --- bin/extra/udict | 12 ++++++++++++ bin/menuscripts/mmedia | 2 +- config/essentials/shell/aliases.sh | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100755 bin/extra/udict (limited to 'bin/extra') diff --git a/bin/extra/udict b/bin/extra/udict new file mode 100755 index 0000000..77f9747 --- /dev/null +++ b/bin/extra/udict @@ -0,0 +1,12 @@ +#!/bin/sh + +[ $# -eq 0 ] && printf '%s\n' "Usage: + udict some term" && exit 1 + +term="$@" + +term="$(printf '%s\n' "${term}" | sed 's/ /\\/g' )" + +curl -s "https://api.urbandictionary.com/v0/define?term=${term}" | + jq -r '.list[0] | .word, .definition' | + sed -e 's/\[/\o033[1m/g' -e 's/\]/\o033[0m/g' -e '1s/^.*$/\o033[1;4;34m&\o033[0m/' diff --git a/bin/menuscripts/mmedia b/bin/menuscripts/mmedia index 63d3f7b..43a8aca 100755 --- a/bin/menuscripts/mmedia +++ b/bin/menuscripts/mmedia @@ -51,7 +51,7 @@ choice="$( grep "$regex" | sort | tee "$tmp" | concat_path | - dmenu -px -c -n -x -l 10 -g 1 -F)" + dmenu -px -c -i -l 10 -g 1 -F)" file="$(sed -n "${choice}p" "$tmp")" [ -r "$file" ] || exit 1 diff --git a/config/essentials/shell/aliases.sh b/config/essentials/shell/aliases.sh index 77c7684..876c5d0 100644 --- a/config/essentials/shell/aliases.sh +++ b/config/essentials/shell/aliases.sh @@ -195,7 +195,7 @@ alias gdate='date +%y_%m_%d-%T' alias tpid='tail -f /dev/null --pid' alias pwdcp='pwd | clipp' alias gw="grep -ri" -alias srcsupd='echo ~/src/{installdrier,dotfiles,password-store} ~/proj/suckless/*/ ~/proj/personal/scripts/*/ ~/.config/emacs ~/.config/nvim | supd' +alias srcsupd='echo ~/src/{installdrier,dotfiles,password-store} ~/proj/suckless/*/ ~/.config/emacs ~/.config/nvim | supd' # systemctl aliases alias smc='systemctl' -- cgit v1.2.3 From 02da333eb51cc5f7cfc28e194681db0e5f59d485 Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Sun, 9 Jun 2024 18:21:35 +0200 Subject: checkpoint --- bin/common/ytlink | 20 +++++++++++++------- bin/extra/qrclip | 12 ++++++++++++ bin/guiscripts/clipo | 4 ++-- bin/guiscripts/clipp | 6 +++--- config/essentials/git/config | 2 ++ config/essentials/shell/functions.sh | 2 +- config/essentials/zsh/.zshrc | 5 ----- config/essentials/zsh/comp.zsh | 6 ++++-- config/extra/qrclip | 29 ----------------------------- 9 files changed, 37 insertions(+), 49 deletions(-) create mode 100755 bin/extra/qrclip delete mode 100755 config/extra/qrclip (limited to 'bin/extra') diff --git a/bin/common/ytlink b/bin/common/ytlink index 48be9cf..215c164 100755 --- a/bin/common/ytlink +++ b/bin/common/ytlink @@ -2,15 +2,21 @@ # convert to youtube.com/path url # works for: -# - 'youtu.be/watch?v=xxxxxx' +# - 'youtu.be/xxxxxx' # - 'https://piped.video/watch?v=xxxxx' +# - https://youtube.com/watch?v=xxxx -inp="$1" -[ "${inp:=$(clipo)}" ] || inp="$(cat /dev/stdin)" +# get from $1 or clipboard if empty +vid="${1:-$(clipo)}" +# The following subsitutions will try to grab the video id # if link is http://127.0.0.1:9010/https://www.youtube.com/watch?v=7KpxsqwNF0o -inp="${inp#*/https://}" +vid="${vid#*/https://}" # remove util scheme -inp="${inp#*//}" -inp="https://youtube.com/${inp#*/}" -printf "%s" "$inp" +vid="${vid#*//}" +# remove domain +vid="${vid#*/}" +# remove query string +vid="${vid#watch?v=}" + +printf "https://youtube.com/watch?v=%s\n" "$vid" diff --git a/bin/extra/qrclip b/bin/extra/qrclip new file mode 100755 index 0000000..f9dc92e --- /dev/null +++ b/bin/extra/qrclip @@ -0,0 +1,12 @@ +#!/bin/sh +case $1 in + '-o') + qrencode -s 16 "$(clipo)" -o - | + imv -w "imv - $(clipo)" - ;; + '-s') + qrencode -s 16 "https://duckduckgo.com/$(clipo)" -o - | + imv -w "imv - search $(clipo)" - ;; + *) + >&2 printf 'qrclip [-s | -o]\n' + exit 1 +esac diff --git a/bin/guiscripts/clipo b/bin/guiscripts/clipo index 078cc13..ebc9a25 100755 --- a/bin/guiscripts/clipo +++ b/bin/guiscripts/clipo @@ -1,6 +1,6 @@ #!/bin/sh -[ "$1" = "-p" ] && arg='primary' +[ "$1" = "-p" ] && i='primary' j="-b" if [ "$WAYLAND_DISPLAY" ] then wl-paste -n "$1" -else xclip -o -selection "${arg:-clipboard}" -r +else xsel -o $j fi diff --git a/bin/guiscripts/clipp b/bin/guiscripts/clipp index c9e4f51..d545087 100755 --- a/bin/guiscripts/clipp +++ b/bin/guiscripts/clipp @@ -1,6 +1,6 @@ #!/bin/sh -[ "$1" = "-p" ] && arg='primary' +[ "$1" = "-p" ] && i='primary' j='-b' if [ "$WAYLAND_DISPLAY" ] -then wl-copy -n $1 -else xclip -selection "${arg:-clipboard}" -r +then wl-copy -n $i +else xsel $j fi diff --git a/config/essentials/git/config b/config/essentials/git/config index ba81b18..99cf21e 100644 --- a/config/essentials/git/config +++ b/config/essentials/git/config @@ -12,3 +12,5 @@ ff = false [alias] change-commits = "!f() { VAR1=$1; VAR='$'$1; OLD=$2; NEW=$3; echo \"Are you sure for replace $VAR $OLD => $NEW ?(Y/N)\";read OK;if [ \"$OK\" = 'Y' ] ; then shift 3; git filter-branch --env-filter \"if [ \\\"${VAR}\\\" = '$OLD' ]; then export $VAR1='$NEW';echo 'to $NEW'; fi\" $@; fi;}; f " +[commit] + gpgsign = true diff --git a/config/essentials/shell/functions.sh b/config/essentials/shell/functions.sh index 9f7f4ce..b69b775 100644 --- a/config/essentials/shell/functions.sh +++ b/config/essentials/shell/functions.sh @@ -109,7 +109,7 @@ clip() { then echo -n "$@" | wl-copy else - echo -n "$@" | xclip -selection clipboard -rmlastnl + echo -n "$@" | xsel -b fi } diff --git a/config/essentials/zsh/.zshrc b/config/essentials/zsh/.zshrc index 91a1618..545f9cc 100644 --- a/config/essentials/zsh/.zshrc +++ b/config/essentials/zsh/.zshrc @@ -31,17 +31,12 @@ eval "$(zoxide init zsh)" ### Plugins [ -f "$HOME/.local/share/zap/zap.zsh" ] && source "$HOME/.local/share/zap/zap.zsh" -plug "MichaelAquilina/zsh-you-should-use" plug "chivalryq/git-alias" -plug "kutsan/zsh-system-clipboard" # plug "marlonrichert/zsh-autocomplete" -plug "xPMo/zsh-toggle-command-prefix" plug "zap-zsh/fzf" -plug "zap-zsh/vim" plug "zdharma-continuum/fast-syntax-highlighting" plug "zsh-users/zsh-autosuggestions" plug "zsh-users/zsh-completions" -plug "zsh-users/zsh-history-substring-search" plug "MichaelAquilina/zsh-auto-notify" export AUTO_NOTIFY_TITLE="zsh" diff --git a/config/essentials/zsh/comp.zsh b/config/essentials/zsh/comp.zsh index 4836111..076882d 100644 --- a/config/essentials/zsh/comp.zsh +++ b/config/essentials/zsh/comp.zsh @@ -2,11 +2,10 @@ # Find most of the stuff at https://github.com/zap-zsh/completions zmodload zsh/complist -autoload -Uz compinit; compinit zstyle ':compinstall' filename '/home/aluc/.zshrc' # cache -zstyle ':completion:*' use-cache on zstyle ':completion:*' cache-path "$ZDOTDIR/zcompcache" +zstyle ':completion:*' use-cache on # completers zstyle ':completion:*' completer _extensions _complete @@ -37,6 +36,9 @@ zstyle ':completion:*' keep-prefix true # ui zstyle ':completion:*' menu select +ZSH_COMPDUMP="$ZDOTDIR"/zcompcache +autoload -Uz compinit; compinit -d "$ZSH_COMPDUMP" + _dotnet_zsh_complete() { local completions=("$(dotnet complete "$words")") diff --git a/config/extra/qrclip b/config/extra/qrclip deleted file mode 100755 index 2f5da5c..0000000 --- a/config/extra/qrclip +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -if [ "$WAYLAND_DISPLAY" ] -then - which wl-copy > /dev/null || exit 1 - clipp () { - wl-copy - } - clipo () { - wl-paste - } -else - which xclip > /dev/null || exit 1 - clipp () { - xclip -selection clipboard -r - } - clipo () { - xclip -o -selection clipboard -r - } -fi - -case $1 in - '-o') - qrencode -s 16 "$(clipo)" -o - | - imv -w "imv - $(clipo)" - ;; - '-s') - qrencode -s 16 "https://duckduckgo.com/$(clipo)" -o - | - imv -w "imv - search $(clipo)" - ;; -esac -- cgit v1.2.3 From 485c2d2ebaf238eb37a5650d364cb0031854774a Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Thu, 13 Jun 2024 23:19:23 +0200 Subject: checkpoint --- bin/extra/curszip | 12 ++++++++---- bin/guiscripts/clipo | 4 ++-- bin/guiscripts/clipp | 4 ++-- bin/guiscripts/cps | 4 ---- bin/guiscripts/swclip | 4 ++++ bin/menuscripts/mmedia | 2 +- bin/menuscripts/tsh | 29 ++++++++++++++++++++--------- config/common/tmux/tmux.conf | 15 +++++++-------- config/essentials/shell/aliases.sh | 4 ++-- 9 files changed, 46 insertions(+), 32 deletions(-) delete mode 100755 bin/guiscripts/cps create mode 100755 bin/guiscripts/swclip (limited to 'bin/extra') diff --git a/bin/extra/curszip b/bin/extra/curszip index 64abdb6..0de772f 100755 --- a/bin/extra/curszip +++ b/bin/extra/curszip @@ -1,13 +1,17 @@ #!/bin/sh -list1() { find "$1" -mindepth 1 -maxdepth 1 -type "${2:-d}" -printf '%f\n'; } +# $1: dir +# $2: type +list1() { find "$1" -mindepth 1 -maxdepth 1 -type "$2" -printf '%f\n'; } -curs="$(list1 ~/docs/school/Vakken | commander -c)" +curs="$(list1 ~/docs/school/Vakken d | dmenu -c)" [ "$curs" ] || exit 1 -zip="$(list1 ~/dl f | fzf -f "$curs" | grep '\.zip$')" >&2 printf "curs: %s\n" "$curs" -[ "$zip" ] || exit 1 +dldir="$(which xdg-user-dir > /dev/null 2>&1 && xdg-user-dir 'DOWNLOAD' || echo '~/dl')" + +zip="$(list1 "$dldir" f | fzf -f "$curs" | grep '\.zip$')" +[ "$zip" ] || exit 1 >&2 printf "zip: %s\n" "$zip" cd -- ~/docs/school/Vakken/"$curs" || exit 1 diff --git a/bin/guiscripts/clipo b/bin/guiscripts/clipo index ebc9a25..e554c24 100755 --- a/bin/guiscripts/clipo +++ b/bin/guiscripts/clipo @@ -1,6 +1,6 @@ #!/bin/sh -[ "$1" = "-p" ] && i='primary' j="-b" +[ "$1" = "-p" ] && i='primary' j="-p" if [ "$WAYLAND_DISPLAY" ] then wl-paste -n "$1" -else xsel -o $j +else xsel -o ${j:--b} fi diff --git a/bin/guiscripts/clipp b/bin/guiscripts/clipp index d545087..c3ee8f2 100755 --- a/bin/guiscripts/clipp +++ b/bin/guiscripts/clipp @@ -1,6 +1,6 @@ #!/bin/sh -[ "$1" = "-p" ] && i='primary' j='-b' +[ "$1" = "-p" ] && i='primary' j='-p' if [ "$WAYLAND_DISPLAY" ] then wl-copy -n $i -else xsel $j +else xsel ${j:--b} fi diff --git a/bin/guiscripts/cps b/bin/guiscripts/cps deleted file mode 100755 index 1cae135..0000000 --- a/bin/guiscripts/cps +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -paste="$(clipo)" -clipo -p | clipp -printf '%s' "$paste" | clipp -p diff --git a/bin/guiscripts/swclip b/bin/guiscripts/swclip new file mode 100755 index 0000000..1cae135 --- /dev/null +++ b/bin/guiscripts/swclip @@ -0,0 +1,4 @@ +#!/bin/sh +paste="$(clipo)" +clipo -p | clipp +printf '%s' "$paste" | clipp -p diff --git a/bin/menuscripts/mmedia b/bin/menuscripts/mmedia index 43a8aca..3141c3b 100755 --- a/bin/menuscripts/mmedia +++ b/bin/menuscripts/mmedia @@ -51,7 +51,7 @@ choice="$( grep "$regex" | sort | tee "$tmp" | concat_path | - dmenu -px -c -i -l 10 -g 1 -F)" + dmenu -px -c -i -l 10 -g 1 -x)" file="$(sed -n "${choice}p" "$tmp")" [ -r "$file" ] || exit 1 diff --git a/bin/menuscripts/tsh b/bin/menuscripts/tsh index eac0c3e..aac27ee 100755 --- a/bin/menuscripts/tsh +++ b/bin/menuscripts/tsh @@ -19,7 +19,7 @@ done export results="$tmp/results" export links="$tmp/links" -types="music anime movies shows other software games isos books" +categories="music anime movies shows other software games isos books" if [ "$WAYLAND_DISPLAY" ] then @@ -42,6 +42,9 @@ help () Available options: seeds, size, name -m MODULE Select a module, if MODULE is 'list', lists out available modules + -c CATEGORY Select category + -f Do not list files + -d Download without confirming EOF } @@ -121,7 +124,7 @@ show_files() # Select a type after having displayed them with 'show_types' select_type() { - for type in $types + for type in $categories do printf "%s\n" "$type" done | fzf } @@ -131,10 +134,17 @@ trap "cleanup" EXIT ## OPTIONS skip=0 -while getopts ":hm:rs:" opt +while getopts ":hm:rs:c:fd" opt do case $opt in h) help && exit ;; + c) + [ "$OPTARG" = "list" ] && >&2 printf '%s\n' "$categories" && exit + category="$(printf '%s\n' "$categories" | tr ' ' '\n' | grep -m 1 "^$OPTARG")" + [ -z "$category" ] && die "No valid category for '$OPTARG'" + logn "category: $category" ;; + f) noaskfiles="1" ;; + d) noaskdownload="1" ;; m) [ "$OPTARG" = "list" ] && list_modules && exit module="$(list_modules | grep -m 1 "^$OPTARG")" @@ -185,17 +195,18 @@ getfunctions=1 . "$LIBPFX/$module" # select result from "$results" for choice in $(select_result | xargs) do - printf 'choice: %s\n' "$choice" + printf 'choice: %s\n' "$(sed -n "${choice}p" "$results" | cut -f 3-)" magnet="$(get_magnet "$choice")" [ "$magnet" ] || exit 1 - confirm 'files?' && show_files "$magnet" + if [ -z "$noaskfiles" ] && confirm 'files?'; then + show_files "$magnet" + fi - if confirm 'download?' + if [ "$noaskdownload" ] || confirm 'download?' then - type="$(select_type)" - [ "$type" ] || exit 1 - transmission-remote debuc.com -a "$magnet" -w "/downloads/$type" + [ "${category:-$(select_type)}" ] || exit 1 + transmission-remote debuc.com -a "$magnet" -w "/downloads/$category" elif confirm "copy?" then echo "$magnet" | clipp diff --git a/config/common/tmux/tmux.conf b/config/common/tmux/tmux.conf index d8a4969..9300c97 100755 --- a/config/common/tmux/tmux.conf +++ b/config/common/tmux/tmux.conf @@ -43,11 +43,11 @@ bind X confirm -p "Kill Window?" kill-window bind M-x confirm -p "Kill Session?" kill-session bind M-X confirm -p "Kill Server?" kill-server # Restart pane -bind k run -C "respawn-pane -k; send-keys !! 'C-j'" -bind K respawn-pane -k +bind C-r run -C "respawn-pane -k; send-keys !! 'C-j'" +bind C-R respawn-pane -k # Splitting bind v split-window -h -c "#{pane_current_path}" -bind h split-window -v -c "#{pane_current_path}" +bind s split-window -v -c "#{pane_current_path}" # Swapping left and right a la vim bind -n M-H swap-pane -U bind -n M-L swap-pane -D @@ -64,8 +64,10 @@ bind b break-pane -t : # Reset length and shit bind z select-layout main-vertical - - +bind-key h select-pane -L +bind-key j select-pane -D +bind-key k select-pane -U +bind-key l select-pane -R # Pane navigating with h|j|k|l a la vim # Smart pane switching with awareness of Vim splits. @@ -88,9 +90,6 @@ bind-key -T copy-mode-vi 'M-k' select-pane -U bind-key -T copy-mode-vi 'M-l' select-pane -R bind-key -T copy-mode-vi 'M-\' select-pane -l - - - bind -n M-u previous-window bind -n M-i next-window # Session navigeting with S-M-u|i diff --git a/config/essentials/shell/aliases.sh b/config/essentials/shell/aliases.sh index 876c5d0..a8b9036 100644 --- a/config/essentials/shell/aliases.sh +++ b/config/essentials/shell/aliases.sh @@ -2,7 +2,7 @@ # s/alias \([^-]\)/alias -g \1 # The most important one -alias vi='nvim' +alias vi='vis' alias cd='z' # Zsh specific aliases @@ -81,7 +81,7 @@ alias lst2='ls --tree -L2' alias lst3='ls --tree -L3' alias ls.='ls -dl .*' which eza >/dev/null 2>&1 && - alias ls='eza --sort extension --group-directories-first --no-time --git' || + alias ls='eza --sort extension --group-directories-first --git' || alias ls='ls --color --group-directories-first --sort=extension' # pacman aliases -- cgit v1.2.3 From 2a9d0908651ac236855fa515e14a83bada3ad7f9 Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Fri, 14 Jun 2024 22:22:03 +0200 Subject: use custom colemak keymap --- bin/extra/keyboards.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin/extra') diff --git a/bin/extra/keyboards.txt b/bin/extra/keyboards.txt index db004ce..d6e9b8a 100644 --- a/bin/extra/keyboards.txt +++ b/bin/extra/keyboards.txt @@ -1,2 +1,2 @@ us -us -option ctrl:swapcaps,altwin:menu_win -variant colemak +colemak -option ctrl:swapcaps,altwin:menu_win -- cgit v1.2.3 From 2dab2233ef9cb54a3878e0120016d542045c7ee8 Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Sun, 16 Jun 2024 16:16:11 +0200 Subject: checkpoint --- bin/extra/trl | 4 +- bin/guiscripts/mega.sh | 67 +++++++++++++++++++++ bin/guiscripts/osurf | 2 + bin/guiscripts/osurf-fill | 113 +++++++++++++++++++++++++++++++++++ bin/guiscripts/osurfls | 8 +++ bin/guiscripts/osurftabs | 12 ++++ bin/guiscripts/osurftxt | 22 +++++++ bin/guiscripts/record | 86 ++++++++++++++++++++++++++ bin/guiscripts/setbg | 5 ++ bin/guiscripts/yt | 4 ++ bin/menuscripts/tsh | 10 ++-- config/X/x11/xinitrc | 2 +- config/common/mpv/mpv.conf | 5 +- config/essentials/shell/aliases.sh | 1 + config/essentials/shell/functions.sh | 7 +++ config/essentials/zsh/.zshrc | 2 +- 16 files changed, 339 insertions(+), 11 deletions(-) create mode 100644 bin/guiscripts/mega.sh create mode 100755 bin/guiscripts/osurf create mode 100755 bin/guiscripts/osurf-fill create mode 100755 bin/guiscripts/osurfls create mode 100755 bin/guiscripts/osurftabs create mode 100755 bin/guiscripts/osurftxt create mode 100755 bin/guiscripts/record create mode 100755 bin/guiscripts/setbg create mode 100755 bin/guiscripts/yt (limited to 'bin/extra') diff --git a/bin/extra/trl b/bin/extra/trl index bd4c2c5..55d65ee 100755 --- a/bin/extra/trl +++ b/bin/extra/trl @@ -41,10 +41,10 @@ then fi [ "$word" ] || exit 1 -primary="$(languages | fzf)" +primary="$(languages | fzf --prompt="from:")" [ "$primary" ] || exit 1 -secondary="$(languages | fzf)" +secondary="$(languages | fzf --prompt="to:")" [ "$secondary" ] || exit 1 curl -s "https://context.reverso.net/translation/$primary-$secondary/$word" \ diff --git a/bin/guiscripts/mega.sh b/bin/guiscripts/mega.sh new file mode 100644 index 0000000..cafca0a --- /dev/null +++ b/bin/guiscripts/mega.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +URL="" + +if [[ $1 =~ ^https?:\/\/mega(\.co)?\.nz ]]; then + URL="$1" +fi + +if [[ ! $URL ]]; then + echo "Usage: ${0##*/} url" >&2 + exit 1 +fi + +CURL="curl -Y 1 -y 10" + +missing=false +for cmd in openssl; do + if [[ ! $(command -v "$cmd" 2>&1) ]]; then + missing=true + echo "${0##*/}: $cmd: command not found" >&2 + fi +done +if $missing; then + exit 1 +fi + +if [[ $URL =~ .*/file/[^#]*#[^#]* ]]; then + id="${URL#*file/}"; id="${id%%#*}" + key="${URL##*file/}"; key="${key##*#}" +else + id="${URL#*!}"; id="${id%%!*}" + key="${URL##*!}" +fi + +raw_hex=$(echo "${key}=" | tr '\-_' '+/' | tr -d ',' | base64 -d -i 2>/dev/null | od -v -An -t x1 | tr -d '\n ') +hex=$(printf "%016x" \ + $(( 0x${raw_hex:0:16} ^ 0x${raw_hex:32:16} )) \ + $(( 0x${raw_hex:16:16} ^ 0x${raw_hex:48:16} )) +) + +json=$($CURL -s -H 'Content-Type: application/json' -d '[{"a":"g", "g":"1", "p":"'"$id"'"}]' 'https://g.api.mega.co.nz/cs?id=&ak=') || exit 1; json="${json#"[{"}"; json="${json%"}]"}" +file_url="${json##*'"g":'}"; file_url="${file_url%%,*}"; file_url="${file_url//'"'/}" + +json=$($CURL -s -H 'Content-Type: application/json' -d '[{"a":"g", "p":"'"$id"'"}]' 'https://g.api.mega.co.nz/cs?id=&ak=') || exit 1 +at="${json##*'"at":'}"; at="${at%%,*}"; at="${at//'"'/}" + +json=$(echo "${at}==" | tr '\-_' '+/' | tr -d ',' | openssl enc -a -A -d -aes-128-cbc -K "$hex" -iv "00000000000000000000000000000000" -nopad | tr -d '\0'); json="${json#"MEGA{"}"; json="${json%"}"}" +file_name="${json##*'"n":'}" +if [[ $file_name == *,* ]]; then + file_name="${file_name%%,*}" +fi +file_name="${file_name//'"'/}" + +aria2c -x 15 -o "$file_name" "$file_url" +cat "$file_name" | openssl enc -d -aes-128-ctr -K "$hex" -iv "${raw_hex:32:16}0000000000000000" > "temp.new" +mv -f temp.new "$file_name" + +echo "$file_url" +echo "$file_name" +echo "$hex" +echo "${raw_hex:32:16}0000000000000000" +sleep 5 +echo "Downloading... (press Ctrl + C to Cancel)" + +aria2c -x 16 -s 16 -o "$file_name" "$file_url" +cat "$file_name" | openssl enc -d -aes-128-ctr -K "$hex" -iv "${raw_hex:32:16}0000000000000000" > "temp.new" +mv -f temp.new "$file_name" diff --git a/bin/guiscripts/osurf b/bin/guiscripts/osurf new file mode 100755 index 0000000..6923848 --- /dev/null +++ b/bin/guiscripts/osurf @@ -0,0 +1,2 @@ +#!/bin/sh +tabbed -c -dn tabbed-surf -r 2 surf -e '' "$1" diff --git a/bin/guiscripts/osurf-fill b/bin/guiscripts/osurf-fill new file mode 100755 index 0000000..311c273 --- /dev/null +++ b/bin/guiscripts/osurf-fill @@ -0,0 +1,113 @@ +#!/bin/sh +# bitwarden dmenu script - based off of the autofill userscript from qutebrowser +# requires the fifo patch +# $1: winid + +fifodir="$HOME/.config/surf/fifo" +if [ -z "${winid:=$1}" ] +then + winid="$(osurfls | dmenu -c -F -i | cut -f1 -d' ')" +fi +[ "$winid" ] || exit 1 +fifo="$fifodir/$winid" +[ -p "$fifo" ] || exit 2 + +url="$(xprop -id "$winid" _SURF_URI | + cut -f 2 -d'"' | + sed 's,^.*://\([^/]*\)/.*,\1,' | + sed -r -e 's/^([^.]+)\.([^.]+)\.([^.]+)$/\2.\3/')" +[ "$url" ] || exit 3 +>&2 printf 'url: %s\n' "$url" + + +pass="$({ find $PASSWORD_STORE_DIR/websites/ -type f -name '*.gpg' | + grep "$url/" || echo; } | head -n 1 | + sed "s,$PASSWORD_STORE_DIR/,,;s/\.gpg$//" | + dmenu -c)" +[ $? -gt 0 ] && exit 4 + +if [ -z "$pass" ] +then + store="${PASSWORD_STORE_DIR:-$HOME/.password-store}" + while [ -d "$store/$file" ] + do + choice="$(find "$store/$file" \ + -maxdepth 1 -mindepth 1 \ + -not -name '.*' -type d -printf "%y\t%f\n" -o \ + -not -name '.*' -not -type d -printf "%y\t%f\n" | + sort -k1 -k2 | + cut -f 2 | sed 's/\.gpg$//' | + dmenu -c)" + [ "$choice" ] || exit 1 + [ -z "$file" ] && file="$choice" || file="$file/$choice" + done + pass="$file" +fi +>&2 printf 'pass: %s\n' "$pass" + +herbe "filling ${pass#websites/}" & + +# Get password and username in variables with only one call to 'pass' +eval "$(pass show "$pass" | + sed -n "1s/'/'\\\\''/g;1s/.*/password='&'/p;s/^login: \?\(.\+\)/username='\1'/p")" +printf '%s : %s\n' "$username" "$password" + +javascript_escape() { + printf '%s' "$1" | sed -s 's,['\''"\\\\],\\\\&,g' +} + +js() { +cat < 0 && elem.offsetHeight > 0; + }; + function hasPasswordField(form) { + var inputs = form.getElementsByTagName("input"); + for (var j = 0; j < inputs.length; j++) { + var input = inputs[j]; + if (input.type == "password" || input.autocomplete == "password" || input.name == "password") { + return true; + } + } + return false; + }; + function loadData2Form (form) { + var inputs = form.getElementsByTagName("input"); + for (var j = 0; j < inputs.length; j++) { + var input = inputs[j]; + if (isVisible(input) && (input.type == "text" || input.type == "email")) { + input.focus(); + input.value = "$(javascript_escape "$username")"; + input.blur(); + console.log("user: $(javascript_escape "$username")") + } + if (input.type == "password" || input.name == "password" || input.autocomplete == "password" || input.id == "password" ) { + input.focus(); + input.value = "$(javascript_escape "$password")"; + input.blur(); + console.log("password: $(javascript_escape "$password")") + } + console.log(input) + } + }; + var forms = document.getElementsByTagName("form"); + for (i = 0; i < forms.length; i++) { + if (hasPasswordField(forms[i])) { + loadData2Form(forms[i]); + // forms[i].submit(); + } + } +EOF +} + +printjs() { + js | sed 's,//.*$,,' | tr '\n' ' ' +} + +echo "inject $(printjs)" >> "$fifo" diff --git a/bin/guiscripts/osurfls b/bin/guiscripts/osurfls new file mode 100755 index 0000000..0abdd35 --- /dev/null +++ b/bin/guiscripts/osurfls @@ -0,0 +1,8 @@ +#!/bin/sh +find "$HOME/.config/surf/fifo" -type p -printf '%f\n' | +while read -r winid +do + title="$(xprop -id "$winid" 2> /dev/null | awk -F'"' '/^_NET_WM_NAME/ {print $2}')" + [ "$title" ] || continue + printf '%s %s\n' "$winid" "$title" +done \ No newline at end of file diff --git a/bin/guiscripts/osurftabs b/bin/guiscripts/osurftabs new file mode 100755 index 0000000..d41424b --- /dev/null +++ b/bin/guiscripts/osurftabs @@ -0,0 +1,12 @@ +#!/bin/sh + +# list surf tabbed windows + +# dependencies: lsw, dmenu, xprop +# expects the tabbed windows to be named 'tabbed-surf' +lsw | cut -f1 -d' ' | + while read -r winid + do + [ "tabbed-surf" = "$(xprop -id "$winid" WM_CLASS | cut -f2 -d'"')" ] && + printf '%s %s\n' "$winid" "$(xprop -id "$winid" WM_NAME | cut -f2 -d'"')" + done diff --git a/bin/guiscripts/osurftxt b/bin/guiscripts/osurftxt new file mode 100755 index 0000000..ef60166 --- /dev/null +++ b/bin/guiscripts/osurftxt @@ -0,0 +1,22 @@ +#!/bin/sh + +# open all links in txt file into one tabbed surf + +# dependencies: surf, osurf, dmenu + +# $1: file path for non interactive use +if [ -z "$1" ] +then + d="$HOME/dl/txtabs" + f="$(find "$d" -type f -printf '%f\n' | dmenu)" + [ "$f" ] || exit 1 + f="$d"/"$f" +else + [ -f "$1" ] || exit 1 + f="$1" +fi + +winid="$(osurf "$(head -n 1 "$f")")" +tail -n +2 "$f" | while read -r url; + do surf -e "$winid" "$url" & + done diff --git a/bin/guiscripts/record b/bin/guiscripts/record new file mode 100755 index 0000000..778e02e --- /dev/null +++ b/bin/guiscripts/record @@ -0,0 +1,86 @@ +#!/bin/sh + +# record - record an area of the screen + +lock="/tmp/record.lock" + +# dependencies: ffmpeg, hacksaw (part), xwininfo & lsw (window), xdotool (active) +# optional: +# - hacksaw: part +# - xwininfo, lsw, commander: window +# - xdotool: active +# - xdg-user-dir + +# $1: width +# $2: height +# $3: x +# $4: y +# $5: output dir +# $6: output name +record_cmd() +{ + if [ -f "$lock" ] + then + >&2 printf 'already recording, please stop recording first\n' + exit 1 + else + touch "$lock" + fi + + herbe "started recording." & + w=$(($3 + $3 % 2)) + h=$(($4 + $4 % 2)) + ffmpeg \ + -v 16 \ + -r 30 \ + -f pulse -ac 2 -i default \ + -f x11grab \ + -s "${w}x${h}" \ + -i ":0.0+$1,$2" \ + -preset slow \ + -c:v h264 \ + -pix_fmt yuv420p \ + -crf 20 \ + "$5/$6.mp4" + printf '%s\n' "$5/$6.mp4" + rm -f "$lock" + herbe "stopped recording." & +} + +if [ -d "$1" ] +then + dir="$1" + shift +else + dir="$(which xdg-user-dir > /dev/null 2>&1 && xdg-user-dir VIDEOS)" + [ "$dir" ] && dir="$dir/records" || dir="$HOME/vids/records" +fi +mkdir -p "$dir" + +current=$(date +%F_%H-%M-%S) + +[ "$1" ] && option="$1" || option="$(printf 'active\nwindow\npart\nstop\nfull\n' | commander -c)" +case "$option" in + active) + record_cmd $(xwininfo -id "$(xdotool getactivewindow)" | + sed -e '/Absolute\|Width:\|Height:/!d;s/.*:\s*//' | tr '\n' ' ') $dir $current + ;; + + window) + winid="$(lsw | commander -cxl | cut -d' ' -f1)" + [ "$winid" ] || exit 1 + values="$(xwininfo -id "$winid" | sed -e '/Absolute\|Width:\|Height:/!d;s/.*:\s*//' | tr '\n' ' ')" + [ "$values" ] || exit 1 + record_cmd $values $dir $current + ;; + + part) + hacksaw | { + IFS=+x read -r w h x y + record_cmd $w $h $x $y $dir $current + } + ;; + stop) kill "$(pgrep ffmpeg | xargs ps | grep 'x11grab' | awk '{print $1}')"; rm -f "$lock" ;; + full) record_cmd 0 0 1920 1080 $dir $current ;; + help|*) >&2 printf 'record [dir] (active|window|part|stop|full)\n' ;; +esac diff --git a/bin/guiscripts/setbg b/bin/guiscripts/setbg new file mode 100755 index 0000000..a4109ab --- /dev/null +++ b/bin/guiscripts/setbg @@ -0,0 +1,5 @@ +#!/bin/sh +cd "$HOME/pics/wallpapers" || exit 1 +bg="$(find . -type f -printf '%f\n' | sed 's@^\./@@' | dmenu -c -x)" +[ "$bg" ] || exit 1 +feh --no-fehbg --bg-scale "$bg" diff --git a/bin/guiscripts/yt b/bin/guiscripts/yt new file mode 100755 index 0000000..72f6e92 --- /dev/null +++ b/bin/guiscripts/yt @@ -0,0 +1,4 @@ +#!/bin/sh +link="$(ytfzf -D -I l)" +[ "$link" ] || exit 1 +yt-dlp $@ -o - "$link" | mpv - diff --git a/bin/menuscripts/tsh b/bin/menuscripts/tsh index aac27ee..70e7ca8 100755 --- a/bin/menuscripts/tsh +++ b/bin/menuscripts/tsh @@ -5,8 +5,8 @@ PROG="$(basename "$0")" # copy command and deps variable deps="pup curl $MENUCMD" -LIBPFX=/home/aluc/.local/share/tsh -module='1337x.sh' # default module +MODULES_PATH=$HOME/.local/share/tsh +module='nyaa.sh' # default module # Files export tmp="/tmp/$PROG" @@ -83,7 +83,7 @@ cleanup () done } -list_modules () { find -L "$LIBPFX" -type f -printf "%f\n"; } +list_modules () { find -L "$MODULES_PATH" -type f -printf "%f\n"; } # get a query from user based on MENUCMD get_query () @@ -179,7 +179,7 @@ then # Get results rm -f "$results" "$links" # shellcheck source=/usr/local/lib/$PROG/nyaa.sh disable=SC1091 - . "$LIBPFX/$module" + . "$MODULES_PATH/$module" [ -f "$results" ] || die "No results." # Save which module was used @@ -190,7 +190,7 @@ fi # acquire get_magnet function # shellcheck source=/usr/local/lib/$PROG/nyaa.sh disable=SC1091 -getfunctions=1 . "$LIBPFX/$module" +getfunctions=1 . "$MODULES_PATH/$module" # select result from "$results" for choice in $(select_result | xargs) diff --git a/config/X/x11/xinitrc b/config/X/x11/xinitrc index bc1824a..8b3cf2b 100755 --- a/config/X/x11/xinitrc +++ b/config/X/x11/xinitrc @@ -22,7 +22,7 @@ export MENUCMD="dmenu" export IMAGE="feh" xcompmgr & feh --no-fehbg --bg-scale ~/pics/wallpaper -setxkbmap us -option ctrl:swapcaps,altwin:menu_win -variant colemak +setxkbmap colemak -option ctrl:swapcaps,altwin:menu_win # xautolock -locker slock & gammastep -m randr & # dunst & diff --git a/config/common/mpv/mpv.conf b/config/common/mpv/mpv.conf index 1fd96da..2e7318e 100755 --- a/config/common/mpv/mpv.conf +++ b/config/common/mpv/mpv.conf @@ -17,10 +17,11 @@ ytdl-raw-options=extractor-args="youtube:player-client=android" # Default demuxer is 150/75 MB, note that this uses RAM so set a reasonable amount. # 150MB, Max pre-load for network streams (1 MiB = 1048576 Bytes). -demuxer-max-bytes=150000000 +demuxer-max-bytes=150MiB +demuxer-readahead-secs=20 # 75MB, Max loaded video kept after playback. -demuxer-max-back-bytes=75000000 +demuxer-max-back-bytes=75MiB # Force stream to be seekable even if disabled. force-seekable=yes diff --git a/config/essentials/shell/aliases.sh b/config/essentials/shell/aliases.sh index a8b9036..be35a6c 100644 --- a/config/essentials/shell/aliases.sh +++ b/config/essentials/shell/aliases.sh @@ -339,6 +339,7 @@ alias ddeps='pactree -r -d 1' alias update-mirrors='reflector -p https | rankmirrors -n 10 -p -w - | doas tee /etc/pacman.d/mirrorlist' alias tmpd='cd $(mktemp -d)' +alias tmpf='$EDITOR $(mktemp)' alias brs='$BROWSER' which bat > /dev/null 2>&1 && alias cat="bat -p" diff --git a/config/essentials/shell/functions.sh b/config/essentials/shell/functions.sh index b69b775..945b716 100644 --- a/config/essentials/shell/functions.sh +++ b/config/essentials/shell/functions.sh @@ -241,6 +241,7 @@ pacsize() mime-default () { + mime= [ "${mime:=$1}" ] || mime="$(find /usr/share/applications/ -iname '*.desktop' -printf '%f\n' | sed 's/\.desktop$//' | @@ -364,3 +365,9 @@ ssh_port() ssh -f -N -L 0.0.0.0:"$3":localhost:"$1" "$2" >&2 printf "Forwarded port '%s' on '%s' to '%s'.\n" "$1" "$2" "$3" } +ffconcat () { + tmp=$(mktemp -p . ffconcat.XXXXX) + sed 's/.*/file &/' > "$tmp" + ffmpeg -y -f concat -safe 0 -i $tmp -c copy "$1" + rm $tmp +} diff --git a/config/essentials/zsh/.zshrc b/config/essentials/zsh/.zshrc index 545f9cc..6bd948a 100644 --- a/config/essentials/zsh/.zshrc +++ b/config/essentials/zsh/.zshrc @@ -58,7 +58,7 @@ fi # Add nnn shell level to prompt -[ -n "$NNNLVL" ] && PS1="N$NNNLVL $PS1" +[ -n "$NNNLVL" ] && PS1="N$NNNLVL$PS1" # cd on nnn quiting nnn_cd () -- cgit v1.2.3 From 05e1216b45340702f82a4946002015a05cebe9b1 Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Tue, 18 Jun 2024 16:12:01 +0200 Subject: checkpoint --- bin/extra/clock | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ bin/extra/ddsurf | 4 ++++ bin/extra/igdl | 21 +++++++++++++++++ bin/extra/mtr | 23 +++++++++++++++++++ bin/extra/muz-sync | 10 ++++++++ bin/extra/myalscore.sh | 7 ++++++ bin/extra/spschedule | 2 ++ bin/extra/trmv | 13 +++++++++++ 8 files changed, 142 insertions(+) create mode 100755 bin/extra/clock create mode 100755 bin/extra/ddsurf create mode 100755 bin/extra/igdl create mode 100755 bin/extra/mtr create mode 100755 bin/extra/muz-sync create mode 100755 bin/extra/myalscore.sh create mode 100755 bin/extra/spschedule create mode 100755 bin/extra/trmv (limited to 'bin/extra') diff --git a/bin/extra/clock b/bin/extra/clock new file mode 100755 index 0000000..fdffae0 --- /dev/null +++ b/bin/extra/clock @@ -0,0 +1,62 @@ +#!/bin/sh + +clocks="${XDG_DATA_HOME:-$HOME}"/clocks.csv + +if [ ! -f "$clocks" ] +then + printf 'start,end,message\n' > "$clocks" +fi + +if [ "$1" = "-c" ] +then + # empty + [ "$(wc -l < "$clocks")" -eq 1 ] && exit + + timefmt="%y%m%d-%T" + IFS="," + # skip csv header + tail -n +2 "$clocks" | + while read -r start end message + do + printf "%s - %s | %s\n" "$(date -d "@$start" +"$timefmt" )" "$(date -d "@$end" +"$timefmt")" "$message" + done + exit +fi + +if [ "$1" = "-e" ] +then + $EDITOR "$clocks" + exit +fi + +trap 'exit 0' INT # The proper way to exit + +while true +do + >&2 printf ' > ' + message="$(head -n 1)" + + [ "$message" ] || exit 1 + printf '\033[1A' # move cursor up once: https://en.wikipedia.org/wiki/ANSI_escape_code + + start_time="$(date +%s)" + start_time_pretty="$(date -d "@$start_time" +%R)" + >&2 printf -- '\r%s- > %s' "$start_time_pretty" "$message" + + # Wait for EOF + cat > /dev/null 2>&1 + + end_time="$(date +%s)" + end_time_pretty="$(date -d "@$end_time" +%R)" + >&2 printf -- '\r%s-%s > %s\n' "$start_time_pretty" "$end_time_pretty" "$message" + + if printf '%s' "$message" | grep ',' > /dev/null + then + # escape potential double quotes + message="$(printf '%s' "$message" | sed -e 's/"/""/g')" + message="\"$message\"" + fi + + # save clocked time and message + printf '%s,%s,%s\n' "$start_time" "$end_time" "$message" >> "$clocks" +done diff --git a/bin/extra/ddsurf b/bin/extra/ddsurf new file mode 100755 index 0000000..a3ae0d1 --- /dev/null +++ b/bin/extra/ddsurf @@ -0,0 +1,4 @@ +#!/bin/sh +f="$(mktemp)" +awk '!x[$2]++' ~/.config/surf/history.txt > "$f" +mv "$f" ~/.config/surf/history.txt diff --git a/bin/extra/igdl b/bin/extra/igdl new file mode 100755 index 0000000..1973187 --- /dev/null +++ b/bin/extra/igdl @@ -0,0 +1,21 @@ +#!/bin/sh +lock="/tmp/igdl.lock" + +if [ -f "$lock" ] +then + herbe "already downloading." + exit 1 +fi + + +url="$(clipo)" +out="/tmp/igdl.mp4" + +touch "$lock" +herbe "igdl" "downloading: $url" & +yt-dlp "$url" -o "$out" || rm "$lock" + +printf '%s' "$out" | clipp +herbe "igdl" "copied path." + +rm "$lock" diff --git a/bin/extra/mtr b/bin/extra/mtr new file mode 100755 index 0000000..486a9b8 --- /dev/null +++ b/bin/extra/mtr @@ -0,0 +1,23 @@ +#!/bin/sh + +list_categories() +{ + cat <$category" diff --git a/bin/extra/muz-sync b/bin/extra/muz-sync new file mode 100755 index 0000000..a81ef74 --- /dev/null +++ b/bin/extra/muz-sync @@ -0,0 +1,10 @@ +#!/bin/sh +trap "exit 1" INT + +music="$(xdg-user-dir MUSIC)" +>&2 printf "music: %s\n" "$music" + +# recursive, links, fuzzy, partial, progress +while ! rsync -rlyP --size-only db:/media/basilisk/music/sorted/ "$music" +do : +done diff --git a/bin/extra/myalscore.sh b/bin/extra/myalscore.sh new file mode 100755 index 0000000..ef68bcc --- /dev/null +++ b/bin/extra/myalscore.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +[ "$1" ] || exit 1 +query="$(printf '%s' "$*" | sed 's/\s/%20/g')" +curl -s "https://myanimelist.net/search/prefix.json?type=all&keyword=$query&v=1" \ + -H 'Accept: application/json, text/javascript, */*; q=0.01' | + jq -r '.categories[].items[] | [.payload.score, .name] | join(" ")' diff --git a/bin/extra/spschedule b/bin/extra/spschedule new file mode 100755 index 0000000..b0dd70a --- /dev/null +++ b/bin/extra/spschedule @@ -0,0 +1,2 @@ +#!/bin/sh +curl -s 'https://subsplease.org/api/?f=schedule&tz=UTC' | jq -r ".schedule.$(date +%A).[] | [.time, .title] | join(\" \")" diff --git a/bin/extra/trmv b/bin/extra/trmv new file mode 100755 index 0000000..22d9e48 --- /dev/null +++ b/bin/extra/trmv @@ -0,0 +1,13 @@ +#!/bin/sh + +trr() { transmission-remote 192.168.178.79 "$@"; } + +id="$(trr -t all -l | tail -n +2 | head -n -1 | fzf | awk '{print $1}')" +[ "$id" ] || exit 1 +name="$(trr -t "$id" -i | grep '^\s*Name:' | cut -f 4- -d ' ')" +location="$(trr -t "$id" -i | grep '^\s*Location:' | cut -f 4- -d ' ')" + +>&2 printf '#%s\n' "$id" +>&2 printf "old name: %s\n" "$name" +>&2 printf 'new name: ' +trr -t "$id" --path "$name" --rename "$(head -n 1)" -- cgit v1.2.3