dotfiles/bin/uu

120 lines
3.5 KiB
Plaintext
Raw Normal View History

2024-02-19 20:37:09 +01:00
#!/usr/bin/env bash
set -eo pipefail
this="${0##*/}"
version="2022-07-27"
config_file="$HOME/.config/${this}rc"
[ ! -t 0 ] && exo-open --launch TerminalEmulator -- -e "$this $*" && exit 0
arg=${1:---help}
if [[ "$arg" = "--completion-bash" ]]; then
echo "_${this}_completion(){
local cur=\"\${COMP_WORDS[COMP_CWORD]}\"
local com_basic=\"--alias --help --version --tips\"
local com_urls=\"cht.sh wttr.in rate.sx qrenco.de ifconfig.co\"
if [[ \$COMP_CWORD != 1 ]]; then
local com_web=\"\"
case \"\${COMP_WORDS[1]}\" in
--raw)
COMPREPLY=( \$(compgen -W \"\$com_urls \$com_basic\" -- \"\$cur\" ) )
return 0;
;;
--alias)
COMPREPLY=( \$(compgen -W \"? + -\" -- \"\$cur\" ) )
return 0;
;;
wttr.in)
local com_web+=\"moon m u M 0 1 2 A F n q Q T\"
;;
ifconfig.co)
local com_web+=\"json\"
;;
cht.sh)
local com_web+=\"\$(compgen -c)\"
;;
esac
COMPREPLY=( \$(compgen -W \":help \$com_web\" -- \"\$cur\" ) )
return 0;
fi
COMPREPLY=( \$(compgen -W \"--raw \$com_urls \$com_basic\" -- \"\$cur\" ) )
}
complete -o bashdefault -o default -F _${this}_completion ${this}
"
exit 0;
fi
_echo(){ [[ $is_raw == 1 ]] && echo -e "$1" || echo "$1" | less -R -S; }
[[ "$arg" = "--raw" ]] && is_raw=1 && command shift && arg=${1:---help} || is_raw=0
if [[ "$arg" = "--help" ]]; then
_echo "\
$this@v$version URL UTILS
This is helper around \`curl\` to run web-based commands such as 'wttr.in', 'cht.sh', …
Usage:
$this [--raw] BASE_URL [PARAMS]
$this [--raw] --[help|version|tips]
$this [--raw] --alias NAME +|-|? FULL_URL
Options:
--raw no output using \`less\`
--alias you can also use vars '\\\$1', …
PARAMS parameters to be concatenated with BASE_URL with '/' or '?'/'&' when parameter starts with '?' … se below
Examples:
$this cht.sh/less $this cht.sh less
$this wttr.in/prague?M&n $this wttr.in prague ?M ?n
$this --raw ident.me/json | jq
Config file:
$config_file
"
exit 0
fi
[[ "$arg" = "--version" ]] && echo "$version" && exit 0
if [[ "$arg" = "--tips" ]]; then
_echo "\
cht.sh The only cheat sheet you need Unified access to the best community driven documentation repositories of the world.
wttr.in Weather report
rate.sx show exchange rates for cryptocurrencies
qrenco.de
ifconfig.co
https://github.com/chubin/awesome-console-services/tree/65e8e897c9c5a2ec013747dd9f1acc03c8573fe7
"
exit 0
fi
command shift
if [[ "$arg" == "--alias" ]]; then
alias_name="${1:-[^_]*}"
[[ $alias_name == *.* ]] && echo "Alias should not contains '.'" && exit 1
case "$2" in
"+")
out=$(grep -v -e "uu_${alias_name}_alias=" -e "uu_${alias_name}_is_raw=" $config_file)
out="$out\nuu_${alias_name}_alias=\"$3\""
out="$out\nuu_${alias_name}_is_raw=$is_raw"
echo -e "$out" > $config_file
exit 0
;;
"-") echo -e "$(grep -v -e "uu_${alias_name}_alias=" -e "uu_${alias_name}_is_raw=" $config_file)" > $config_file || echo "No aliases yet"; exit 0;;
*) grep -e "uu_${alias_name}_alias=" -e "uu_${alias_name}_is_raw=" $config_file || echo "No aliases yet"; exit 0;;
esac
exit 1
fi
args=""
if [[ $arg != *.* ]]; then
. $config_file
is_raw_name=uu_${arg}_is_raw
is_raw=${!is_raw_name}
[[ -z $is_raw ]] && echo "No alias '$arg' found." && exit 1
arg_name=uu_${arg}_alias
arg=${!arg_name}
else
for p in "$@"; do
[[ $p == "?"* ]] \
&& args+=" --data-urlencode ${p:1} " \
|| arg+="/$p"
done
fi
out=$(curl -fGsS -H 'Accept-Language: cs' $args --compressed $arg || echo 'Curl error, see terminal error output.')
_echo "$out"