utils
This commit is contained in:
@@ -17,8 +17,9 @@ stow -v git -D
|
|||||||
|
|
||||||
Target (`-t`) defaults to the parent of `pwd`, so if you clone this repo not in `$HOME` then you MUST explicitly provide `-t ~` or `-t $HOME` every time.
|
Target (`-t`) defaults to the parent of `pwd`, so if you clone this repo not in `$HOME` then you MUST explicitly provide `-t ~` or `-t $HOME` every time.
|
||||||
|
|
||||||
## Documentation
|
## Documentation and sources
|
||||||
|
|
||||||
* <https://www.gnu.org/software/stow/manual/stow.html>
|
* <https://www.gnu.org/software/stow/manual/stow.html>
|
||||||
* <https://tamerlan.dev/how-i-manage-my-dotfiles-using-gnu-stow/>
|
* <https://tamerlan.dev/how-i-manage-my-dotfiles-using-gnu-stow/>
|
||||||
* <https://gist.github.com/andreibosco/cb8506780d0942a712fc>
|
* <https://gist.github.com/andreibosco/cb8506780d0942a712fc>
|
||||||
|
* https://github.com/jimeh/git-aware-stow
|
||||||
|
|||||||
3
utils/.local/bin/clock
Executable file
3
utils/.local/bin/clock
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
watch -tn 1 date '+%l:%M:%S%p'
|
||||||
18
utils/.local/bin/copy
Executable file
18
utils/.local/bin/copy
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
|
||||||
|
if hash pbcopy 2>/dev/null; then
|
||||||
|
exec pbcopy
|
||||||
|
elif hash xclip 2>/dev/null; then
|
||||||
|
exec xclip -selection clipboard
|
||||||
|
elif hash putclip 2>/dev/null; then
|
||||||
|
exec putclip
|
||||||
|
else
|
||||||
|
rm -f /tmp/clipboard 2> /dev/null
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
cat > /tmp/clipboard
|
||||||
|
else
|
||||||
|
cat "$1" > /tmp/clipboard
|
||||||
|
fi
|
||||||
|
fi
|
||||||
26
utils/.local/bin/dc
Executable file
26
utils/.local/bin/dc
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
CONTAINER="my-container" # the name of the container in which to 'exec' something
|
||||||
|
CONFIG="$(dirname $([ -L $0 ] && readlink -f $0 || echo $0))/docker-compose.yml" # path to compose yml file
|
||||||
|
CMD="docker-compose -f $CONFIG" # docker-compose command
|
||||||
|
APP_URL='http://localhost:8000/'
|
||||||
|
|
||||||
|
open_browser() {
|
||||||
|
if which xdg-open > /dev/null; then
|
||||||
|
xdg-open "$1" </dev/null >/dev/null 2>&1 & disown
|
||||||
|
elif which gnome-open > /dev/null; then
|
||||||
|
gnome-open "$1" </dev/null >/dev/null 2>&1 & disown
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
'' | 'help' ) echo -e "Provide one of operations: \t start, stop, up, down, restart, rebuild, open";
|
||||||
|
echo "Otherwise all args will be passed to 'docker exec -ti $CONTAINER ...'" ;;
|
||||||
|
'open' ) open_browser $APP_URL ;;
|
||||||
|
'up' ) $CMD up -d --build ;; # build and start containers
|
||||||
|
'down' ) $CMD down --remove-orphans ;; # stop and remove containers
|
||||||
|
'start' ) $CMD start ;; # start containers
|
||||||
|
'stop' ) $CMD stop ;; # stop containers
|
||||||
|
'restart' ) $CMD stop && $CMD start ;; # restart containers
|
||||||
|
'rebuild' ) $CMD down --remove-orphans && $CMD up -d --build ;; # rebuild containers
|
||||||
|
* ) docker exec -ti $CONTAINER $@ # exec anything in container
|
||||||
|
esac
|
||||||
22
utils/.local/bin/extract
Executable file
22
utils/.local/bin/extract
Executable file
@@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
if [ -f "$1" ]; then
|
||||||
|
case "$1" in
|
||||||
|
*.tar.bz2) tar -jxvf "$1" ;;
|
||||||
|
*.tar.gz) tar -zxvf "$1" ;;
|
||||||
|
*.bz2) bunzip2 "$1" ;;
|
||||||
|
*.dmg) hdiutil mount "$1" ;;
|
||||||
|
*.gz) gunzip "$1" ;;
|
||||||
|
*.tar) tar -xvf "$1" ;;
|
||||||
|
*.tbz2) tar -jxvf "$1" ;;
|
||||||
|
*.tgz) tar -zxvf "$1" ;;
|
||||||
|
*.zip) unzip "$1" ;;
|
||||||
|
*.ZIP) unzip "$1" ;;
|
||||||
|
*.pax) cat "$1" | pax -r ;;
|
||||||
|
*.pax.Z) uncompress "$1" --stdout | pax -r ;;
|
||||||
|
*.rar) unrar x "$1" ;;
|
||||||
|
*.Z) uncompress "$1" ;;
|
||||||
|
*) echo "'$1' cannot be extracted/mounted via extract()" ;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
echo "'$1' is not a valid file"
|
||||||
|
fi
|
||||||
3
utils/.local/bin/flushdns
Executable file
3
utils/.local/bin/flushdns
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
sudo resolvectl flush-caches
|
||||||
69
utils/.local/bin/httpcode
Executable file
69
utils/.local/bin/httpcode
Executable file
@@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
|
||||||
|
statuses="100 Continue
|
||||||
|
101 Switching Protocols
|
||||||
|
102 Processing
|
||||||
|
200 OK
|
||||||
|
201 Created
|
||||||
|
202 Accepted
|
||||||
|
203 Non-Authoritative Information
|
||||||
|
204 No Content
|
||||||
|
205 Reset Content
|
||||||
|
206 Partial Content
|
||||||
|
207 Multi-Status
|
||||||
|
208 Already Reported
|
||||||
|
300 Multiple Choices
|
||||||
|
301 Moved Permanently
|
||||||
|
302 Found
|
||||||
|
303 See Other
|
||||||
|
304 Not Modified
|
||||||
|
305 Use Proxy
|
||||||
|
307 Temporary Redirect
|
||||||
|
400 Bad Request
|
||||||
|
401 Unauthorized
|
||||||
|
402 Payment Required
|
||||||
|
403 Forbidden
|
||||||
|
404 Not Found
|
||||||
|
405 Method Not Allowed
|
||||||
|
406 Not Acceptable
|
||||||
|
407 Proxy Authentication Required
|
||||||
|
408 Request Timeout
|
||||||
|
409 Conflict
|
||||||
|
410 Gone
|
||||||
|
411 Length Required
|
||||||
|
412 Precondition Failed
|
||||||
|
413 Request Entity Too Large
|
||||||
|
414 Request-URI Too Large
|
||||||
|
415 Unsupported Media Type
|
||||||
|
416 Request Range Not Satisfiable
|
||||||
|
417 Expectation Failed
|
||||||
|
418 I'm a teapot
|
||||||
|
420 Blaze it
|
||||||
|
422 Unprocessable Entity
|
||||||
|
423 Locked
|
||||||
|
424 Failed Dependency
|
||||||
|
425 No code
|
||||||
|
426 Upgrade Required
|
||||||
|
428 Precondition Required
|
||||||
|
429 Too Many Requests
|
||||||
|
431 Request Header Fields Too Large
|
||||||
|
449 Retry with
|
||||||
|
500 Internal Server Error
|
||||||
|
501 Not Implemented
|
||||||
|
502 Bad Gateway
|
||||||
|
503 Service Unavailable
|
||||||
|
504 Gateway Timeout
|
||||||
|
505 HTTP Version Not Supported
|
||||||
|
506 Variant Also Negotiates
|
||||||
|
507 Insufficient Storage
|
||||||
|
509 Bandwidth Limit Exceeded
|
||||||
|
510 Not Extended
|
||||||
|
511 Network Authentication Required"
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo "$statuses"
|
||||||
|
else
|
||||||
|
echo "$statuses" | grep -i --color=never "$@"
|
||||||
|
fi
|
||||||
5
utils/.local/bin/len
Executable file
5
utils/.local/bin/len
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
|
||||||
|
echo -n "$@" | wc -c | awk '{print $1}'
|
||||||
6
utils/.local/bin/line
Executable file
6
utils/.local/bin/line
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
|
||||||
|
lineno="$1"; shift
|
||||||
|
sed -n "${lineno}p" -- "$@"
|
||||||
23
utils/.local/bin/mksh
Executable file
23
utils/.local/bin/mksh
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
if [ ! $# -eq 1 ]; then
|
||||||
|
echo 'mksh takes one argument' 1>&2
|
||||||
|
exit 1
|
||||||
|
elif [ -e "$1" ]; then
|
||||||
|
echo "$1 already exists" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo '#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
' > "$1"
|
||||||
|
|
||||||
|
chmod u+x "$1"
|
||||||
|
|
||||||
|
nano "$1"
|
||||||
3
utils/.local/bin/now
Executable file
3
utils/.local/bin/now
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
date '+%d.%m.%Y %H:%M:%S'
|
||||||
13
utils/.local/bin/pasta
Executable file
13
utils/.local/bin/pasta
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
|
||||||
|
if hash pbpaste 2>/dev/null; then
|
||||||
|
exec pbpaste
|
||||||
|
elif hash xclip 2>/dev/null; then
|
||||||
|
exec xclip -selection clipboard -o
|
||||||
|
elif [[ -e /tmp/clipboard ]]; then
|
||||||
|
exec cat /tmp/clipboard
|
||||||
|
else
|
||||||
|
echo ''
|
||||||
|
fi
|
||||||
6
utils/.local/bin/perm
Executable file
6
utils/.local/bin/perm
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# TODO permissions via arguments
|
||||||
|
|
||||||
|
find . -type f -exec chmod 0664 {} +
|
||||||
|
find . -type d -exec chmod 0775 {} +
|
||||||
13
utils/.local/bin/running
Executable file
13
utils/.local/bin/running
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
|
||||||
|
process_list="$(ps -eo 'pid command')"
|
||||||
|
if [[ $# != 0 ]]; then
|
||||||
|
process_list="$(echo "$process_list" | grep -Fiw "$@")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$process_list" |
|
||||||
|
grep -Fv "${BASH_SOURCE[0]}" |
|
||||||
|
grep -Fv grep |
|
||||||
|
GREP_COLORS='mt=00;35' grep -E --colour=auto '^\s*[[:digit:]]+'
|
||||||
8
utils/.local/bin/scratch
Executable file
8
utils/.local/bin/scratch
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
file="$(mktemp)"
|
||||||
|
echo "Editing $file"
|
||||||
|
exec "$EDITOR" "$file"
|
||||||
25
utils/.local/bin/serve
Executable file
25
utils/.local/bin/serve
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
port='8888'
|
||||||
|
if [ $# -eq 1 ]; then
|
||||||
|
port="$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if hash php 2>/dev/null; then
|
||||||
|
exec php -S "localhost:$port"
|
||||||
|
elif hash python3 2>/dev/null; then
|
||||||
|
exec python3 -m http.server "$port"
|
||||||
|
elif hash python 2>/dev/null; then
|
||||||
|
major_version="$(python -c 'import platform as p;print(p.python_version_tuple()[0])')"
|
||||||
|
if [[ "$major_version" == '3' ]]; then
|
||||||
|
exec python -m http.server "$port"
|
||||||
|
else
|
||||||
|
exec python -m SimpleHTTPServer "$port"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo 'unable to start HTTP server' 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
11
utils/.local/bin/timer
Executable file
11
utils/.local/bin/timer
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
sleep "$1"
|
||||||
|
notify-send 'Timer complete!' \
|
||||||
|
-u normal \
|
||||||
|
-t 10000 \
|
||||||
|
-i clock \
|
||||||
|
-a 'Timer script'
|
||||||
6
utils/.local/bin/trash
Executable file
6
utils/.local/bin/trash
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
gio trash "$@"
|
||||||
8
utils/.local/bin/tryna
Executable file
8
utils/.local/bin/tryna
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -u
|
||||||
|
|
||||||
|
"$@"
|
||||||
|
while [[ "$?" -eq 0 ]]; do
|
||||||
|
sleep 0.5
|
||||||
|
"$@"
|
||||||
|
done
|
||||||
8
utils/.local/bin/trynafail
Executable file
8
utils/.local/bin/trynafail
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -u
|
||||||
|
|
||||||
|
"$@"
|
||||||
|
while [[ "$?" -ne 0 ]]; do
|
||||||
|
sleep 0.5
|
||||||
|
"$@"
|
||||||
|
done
|
||||||
14
utils/.local/bin/url2md
Executable file
14
utils/.local/bin/url2md
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
curl "https://r.jina.ai/$1" \
|
||||||
|
-sS \
|
||||||
|
-H "DNT: 1" \
|
||||||
|
-H "X-Base: final" \
|
||||||
|
-H "X-Engine: direct" \
|
||||||
|
-H "X-Md-Em-Delimiter: *" \
|
||||||
|
-H "X-Md-Heading-Style: setext" \
|
||||||
|
-H "X-Md-Link-Reference-Style: collapsed" \
|
||||||
|
-H "X-Md-Link-Style: referenced"
|
||||||
13
utils/.local/bin/waitfor
Executable file
13
utils/.local/bin/waitfor
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
if hash systemd-inhibit 2>/dev/null; then
|
||||||
|
systemd-inhibit \
|
||||||
|
--who=waitfor \
|
||||||
|
--why="Awaiting PID $1" \
|
||||||
|
tail --pid="$1" -f /dev/null
|
||||||
|
else
|
||||||
|
tail --pid="$1" -f /dev/null
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user