tools -> scripts
This commit is contained in:
@@ -6,6 +6,6 @@
|
|||||||
|
|
||||||
# Wayland KDE: https://www.reddit.com/r/kde/comments/11vrbwc/how_do_i_rotate_the_screen_on_kde_with_wayland/
|
# Wayland KDE: https://www.reddit.com/r/kde/comments/11vrbwc/how_do_i_rotate_the_screen_on_kde_with_wayland/
|
||||||
# kscreen-doctor --outputs
|
# kscreen-doctor --outputs
|
||||||
OUTPUT='HDMI-0'
|
OUTPUT='HDMI-A-1'
|
||||||
DIRECTION="$1" # (left|right|normal|inverted)
|
[ "$1" ] && DIRECTION="$1" || DIRECTION="normal" # (left|right|normal|inverted)
|
||||||
kscreen-doctor "output.$OUTPUT.rotation.$DIRECTION"
|
kscreen-doctor "output.$OUTPUT.rotation.$DIRECTION"
|
||||||
6
scripts/utils/clock
Executable file
6
scripts/utils/clock
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
exec watch -tn 1 date '+%l:%M:%S%p'
|
||||||
18
scripts/utils/copy
Executable file
18
scripts/utils/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
|
||||||
0
tools/dc → scripts/utils/dc
Normal file → Executable file
0
tools/dc → scripts/utils/dc
Normal file → Executable file
69
scripts/utils/httpcode
Executable file
69
scripts/utils/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
scripts/utils/len
Executable file
5
scripts/utils/len
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
|
||||||
|
echo -n "$@" | wc -c | awk '{print $1}'
|
||||||
6
scripts/utils/line
Executable file
6
scripts/utils/line
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
|
||||||
|
lineno="$1"; shift
|
||||||
|
sed -n "${lineno}p" -- "$@"
|
||||||
23
scripts/utils/mksh
Executable file
23
scripts/utils/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"
|
||||||
|
|
||||||
|
"$EDITOR" "$1"
|
||||||
73
scripts/utils/note
Executable file
73
scripts/utils/note
Executable file
@@ -0,0 +1,73 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Note taking tool
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# note [name] - Create a new note with optional name (defaults to "New note")
|
||||||
|
# note -e|--edit [name] - Edit an existing note by name
|
||||||
|
#
|
||||||
|
# Arguments explanation:
|
||||||
|
# [name] - Note filename (without extension) and title
|
||||||
|
# -e, --edit [name] - Edit existing note by name
|
||||||
|
#
|
||||||
|
# Detailed usage:
|
||||||
|
# note - Creates "New note" with current timestamp
|
||||||
|
# note my-idea - Creates note titled "my-idea"
|
||||||
|
# note my-idea "My Great Idea" - Creates note file "my-idea" but titled "My Great Idea"
|
||||||
|
# note -e my-idea - Edits existing note with name "my-idea"
|
||||||
|
#
|
||||||
|
# Notes are stored as markdown files in ~/notes/ with timestamps
|
||||||
|
# When multiple notes have the same name, you'll be prompted to select which one to edit
|
||||||
|
|
||||||
|
arg1="$1"
|
||||||
|
arg2="$2"
|
||||||
|
path="$HOME/notes"
|
||||||
|
[[ ! -d "$path" ]] && mkdir -p "$path"
|
||||||
|
|
||||||
|
shopt -s nullglob
|
||||||
|
files=("$path"/*.md)
|
||||||
|
shopt -u nullglob
|
||||||
|
|
||||||
|
case "$arg1" in
|
||||||
|
-e|--edit)
|
||||||
|
[[ -z "$arg2" ]] && {
|
||||||
|
echo "Note name is required"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# shellcheck disable=SC2207
|
||||||
|
found=($(echo "${files[@]}" | grep -P "[0-9]{10}-$arg2.md"))
|
||||||
|
[[ ${#found[@]} -eq 0 ]] && {
|
||||||
|
echo "Note with name '$arg2' not found."
|
||||||
|
echo "Create it with using 'note $arg2'"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ ${#found[@]} -eq 1 ]] && {
|
||||||
|
nano "${found[0]}"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
PS3="Select a note to edit: "
|
||||||
|
select selection in "${found[@]}" "Exit"; do
|
||||||
|
[[ "$selection" == "Exit" ]] && exit
|
||||||
|
[[ -f "$selection" ]] && {
|
||||||
|
nano "$selection"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
[[ -z "$arg2" ]] && arg2="${arg1:-New note}"
|
||||||
|
file="$path/$(date +%s)-$arg1.md"
|
||||||
|
cat <<EOF > "$file"
|
||||||
|
# $arg2
|
||||||
|
|
||||||
|
Note taken: $(date '+%d.%m.%Y %H:%M:%S')
|
||||||
|
|
||||||
|
EOF
|
||||||
|
nano "$file"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
45
scripts/utils/notes
Executable file
45
scripts/utils/notes
Executable file
@@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
# Notes listing tool
|
||||||
|
#
|
||||||
|
# Purpose:
|
||||||
|
# Lists all markdown notes stored in ~/notes/ directory
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# notes - Display all available notes
|
||||||
|
#
|
||||||
|
# Output:
|
||||||
|
# - Shows filenames of all .md files in ~/notes/
|
||||||
|
# - If no notes exist or directory is empty, displays "Empty"
|
||||||
|
# - Provides hint to use 'note -e' for editing
|
||||||
|
#
|
||||||
|
# Example output:
|
||||||
|
# 1703123456-my-idea.md
|
||||||
|
# 1703123789-shopping-list.md
|
||||||
|
# 1703124012-project-notes.md
|
||||||
|
#
|
||||||
|
# Use 'note -e' to edit existing notes
|
||||||
|
|
||||||
|
path="$HOME/notes"
|
||||||
|
|
||||||
|
[[ ! -d "$path" ]] && {
|
||||||
|
echo "Empty"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
shopt -s nullglob
|
||||||
|
files=("$path"/*.md)
|
||||||
|
shopt -u nullglob
|
||||||
|
|
||||||
|
[[ "${#files}" -eq 0 ]] && {
|
||||||
|
echo "Empty"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
for file in "${files[@]}"; do
|
||||||
|
echo "${file/$path\//}"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Use 'note -e' to edit existing notes"
|
||||||
3
scripts/utils/now
Executable file
3
scripts/utils/now
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
date '+%d.%m.%Y %H:%M:%S'
|
||||||
13
scripts/utils/pasta
Executable file
13
scripts/utils/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
|
||||||
13
scripts/utils/running
Executable file
13
scripts/utils/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
scripts/utils/scratch
Executable file
8
scripts/utils/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
scripts/utils/serve
Executable file
25
scripts/utils/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
scripts/utils/timer
Executable file
11
scripts/utils/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
scripts/utils/trash
Executable file
6
scripts/utils/trash
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
gio trash "$@"
|
||||||
8
scripts/utils/tryna
Executable file
8
scripts/utils/tryna
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -u
|
||||||
|
|
||||||
|
"$@"
|
||||||
|
while [[ ! "$?" -eq 0 ]]; do
|
||||||
|
sleep 0.5
|
||||||
|
"$@"
|
||||||
|
done
|
||||||
8
scripts/utils/trynafail
Executable file
8
scripts/utils/trynafail
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -u
|
||||||
|
|
||||||
|
"$@"
|
||||||
|
while [[ "$?" -eq 0 ]]; do
|
||||||
|
sleep 0.5
|
||||||
|
"$@"
|
||||||
|
done
|
||||||
14
scripts/utils/url2md
Executable file
14
scripts/utils/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
scripts/utils/waitfor
Executable file
13
scripts/utils/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