aboutsummaryrefslogtreecommitdiff
path: root/.local
diff options
context:
space:
mode:
Diffstat (limited to '.local')
-rwxr-xr-x.local/bin/bookmarks142
-rwxr-xr-x.local/bin/booksplit43
-rwxr-xr-x.local/bin/cleanup2
-rwxr-xr-x.local/bin/compiler42
-rw-r--r--.local/bin/cron/README.md14
-rwxr-xr-x.local/bin/cron/checkup17
-rwxr-xr-x.local/bin/cron/crontog6
-rwxr-xr-x.local/bin/cron/mailup9
-rwxr-xr-x.local/bin/cron/newsup18
-rwxr-xr-x.local/bin/define37
-rwxr-xr-x.local/bin/displayselect82
-rwxr-xr-x.local/bin/dmenuhandler21
-rwxr-xr-x.local/bin/dmenumountcifs19
-rwxr-xr-x.local/bin/dmenupass6
-rwxr-xr-x.local/bin/dmenurecord113
-rwxr-xr-x.local/bin/dmenuunicode20
-rwxr-xr-x.local/bin/doas_askpass47
-rwxr-xr-x.local/bin/getbib71
-rwxr-xr-x.local/bin/getcomproot9
-rwxr-xr-x.local/bin/ifinstalled12
-rwxr-xr-x.local/bin/linkhandler32
-rwxr-xr-x.local/bin/maimpick37
-rwxr-xr-x.local/bin/mounter114
-rwxr-xr-x.local/bin/noisereduce81
-rwxr-xr-x.local/bin/opout13
-rwxr-xr-x.local/bin/pauseallmpv10
-rwxr-xr-x.local/bin/peertubetorrent9
-rwxr-xr-x.local/bin/podentr7
-rwxr-xr-x.local/bin/portal5
-rwxr-xr-x.local/bin/qndl12
-rwxr-xr-x.local/bin/queueandnotify14
-rwxr-xr-x.local/bin/randombg21
-rwxr-xr-x.local/bin/rssadd18
-rwxr-xr-x.local/bin/rssget115
-rwxr-xr-x.local/bin/sd22
-rwxr-xr-x.local/bin/setbg42
-rwxr-xr-x.local/bin/shortcuts59
-rwxr-xr-x.local/bin/singboxwrap32
-rwxr-xr-x.local/bin/slider126
-rwxr-xr-x.local/bin/start-pipewire5
-rwxr-xr-x.local/bin/statusbar/sb-battery37
-rwxr-xr-x.local/bin/statusbar/sb-brightness23
-rwxr-xr-x.local/bin/statusbar/sb-clock29
-rwxr-xr-x.local/bin/statusbar/sb-cpu12
-rwxr-xr-x.local/bin/statusbar/sb-cpubars44
-rwxr-xr-x.local/bin/statusbar/sb-disk23
-rwxr-xr-x.local/bin/statusbar/sb-doppler241
-rwxr-xr-x.local/bin/statusbar/sb-forecast65
-rwxr-xr-x.local/bin/statusbar/sb-internet35
-rwxr-xr-x.local/bin/statusbar/sb-iplocate15
-rwxr-xr-x.local/bin/statusbar/sb-kbselect26
-rwxr-xr-x.local/bin/statusbar/sb-mailbox24
-rwxr-xr-x.local/bin/statusbar/sb-memory12
-rwxr-xr-x.local/bin/statusbar/sb-microphone39
-rwxr-xr-x.local/bin/statusbar/sb-moonphase37
-rwxr-xr-x.local/bin/statusbar/sb-mpdup8
-rwxr-xr-x.local/bin/statusbar/sb-music19
-rwxr-xr-x.local/bin/statusbar/sb-nettraf28
-rwxr-xr-x.local/bin/statusbar/sb-news17
-rwxr-xr-x.local/bin/statusbar/sb-pacpackages29
-rwxr-xr-x.local/bin/statusbar/sb-popupgrade9
-rwxr-xr-x.local/bin/statusbar/sb-price59
-rwxr-xr-x.local/bin/statusbar/sb-tasks20
-rwxr-xr-x.local/bin/statusbar/sb-ticker49
-rwxr-xr-x.local/bin/statusbar/sb-torrent27
-rwxr-xr-x.local/bin/statusbar/sb-volume39
-rwxr-xr-x.local/bin/sysact36
-rwxr-xr-x.local/bin/tag49
-rwxr-xr-x.local/bin/td-toggle12
-rwxr-xr-x.local/bin/torwrap7
-rwxr-xr-x.local/bin/transadd9
-rwxr-xr-x.local/bin/unix26
-rwxr-xr-x.local/bin/unmounter25
-rwxr-xr-x.local/bin/weath25
-rwxr-xr-x.local/bin/xdg-terminal-exec3
-rw-r--r--.local/share/applications/file.desktop4
-rw-r--r--.local/share/applications/img.desktop4
-rw-r--r--.local/share/applications/mail.desktop4
-rw-r--r--.local/share/applications/pdf.desktop4
-rw-r--r--.local/share/applications/rss.desktop4
-rw-r--r--.local/share/applications/text.desktop4
-rw-r--r--.local/share/applications/torrent.desktop4
-rw-r--r--.local/share/applications/video.desktop4
l---------.local/share/bg1
-rw-r--r--.local/share/larbs/chars/emoji1630
-rw-r--r--.local/share/larbs/chars/font-awesome1456
-rw-r--r--.local/share/larbs/emoji1630
-rw-r--r--.local/share/thiemeyer_road_to_samarkand.jpgbin0 -> 403799 bytes
88 files changed, 7411 insertions, 0 deletions
diff --git a/.local/bin/bookmarks b/.local/bin/bookmarks
new file mode 100755
index 0000000..a04a403
--- /dev/null
+++ b/.local/bin/bookmarks
@@ -0,0 +1,142 @@
+#!/bin/dash
+
+URLQUERY_FILE="${HOME}/.local/share/urlquery"
+ACTION_MENU="@@"
+
+CLIPBOARD() {
+ wl-paste
+}
+
+DMENU() {
+ mew -i -l "${1}" -p "${2}"
+}
+
+error_notify() {
+ notify-send "${1}"
+ exit "1"
+}
+
+ensure_file_exists() {
+ [ -f "${URLQUERY_FILE}" ] || {
+ notify-send "${URLQUERY_FILE} does not exist. Creating it now."
+ printf "SearXNG=https://searx.tiekoetter.com/search?q=\n" > "${URLQUERY_FILE}"
+ }
+}
+
+get_selection() {
+ cut -d= -f1 "${URLQUERY_FILE}" | DMENU "${LINE_COUNT}" "Bookmarks"
+}
+
+update_file() {
+ pattern="${1}"
+ replacement="${2}"
+
+ sed "/${pattern}/c\\${replacement}" "${URLQUERY_FILE}" > "${URLQUERY_FILE}.tmp" &&
+ mv "${URLQUERY_FILE}.tmp" "${URLQUERY_FILE}" ||
+ error_notify "Failed to update the file."
+}
+
+is_valid_url() {
+ printf "%s\n" "${1}" | rg -q "^https?://[^[:space:]/?#][^[:space:]]+$"
+}
+
+add_bookmark() {
+ URL="$(CLIPBOARD)"
+
+ is_valid_url "${URL}" || error_notify "The clipboard content is not a valid URL."
+
+ rg -q "=${URL}$" "${URLQUERY_FILE}" &&
+ notify-send "The URL is already in the list." && return
+
+ NAME="$(printf "" | DMENU "0" "Name")"
+
+ [ -n "${NAME}" ] && printf "%s\n" "${NAME}=${URL}" >> "${URLQUERY_FILE}" &&
+ notify-send "'${NAME}' is bookmarked."
+}
+
+delete_bookmark() {
+ NAME="$(get_selection)"
+
+ [ -z "${NAME}" ] && error_notify "Failed to delete the bookmark." && return
+
+ sed "/^${NAME}=/d" "${URLQUERY_FILE}" > "${URLQUERY_FILE}.tmp"
+ mv "${URLQUERY_FILE}.tmp" "${URLQUERY_FILE}"
+
+ [ -s "${URLQUERY_FILE}" ] && rg -q "\S" "${URLQUERY_FILE}" || rm "${URLQUERY_FILE}"
+
+ notify-send "'${NAME}' is deleted."
+}
+
+edit_name() {
+ OLD_NAME="${1}"
+ NEW_NAME="$(printf "" | DMENU "0" "New Name")"
+
+ [ -z "${NEW_NAME}" ] && return
+
+ URL="$(rg "^${OLD_NAME}=" "${URLQUERY_FILE}" | cut -d= -f2)"
+
+ update_file "^${OLD_NAME}=" "${NEW_NAME}=${URL}"
+}
+
+edit_url() {
+ NAME="${1}"
+ NEW_URL="$(echo "" | DMENU "0" "New URL")"
+
+ [ -z "${NEW_URL}" ] && return
+
+ update_file "^${NAME}=.*" "${NAME}=${NEW_URL}"
+}
+
+edit_bookmark() {
+ NAME="$(get_selection)"
+
+ [ -z "${NAME}" ] && error_notify "Failed to edit the bookmark." && return
+
+ FIELD="$(printf "Name\nURL\n" | DMENU "2" "Edit")"
+
+ case "${FIELD}" in
+ "Name")edit_name "${NAME}";;
+ "URL")edit_url "${NAME}"
+ esac
+
+ notify-send "'${NAME}' is updated."
+}
+
+open_bookmark() {
+ URL="$(rg "^${SELECTION}=" "${URLQUERY_FILE}" | cut -d= -f2-)"
+
+ [ -z "${URL}" ] && notify-send "Bookmark not found." && exit "1"
+
+ case "${URL}" in
+ *"search"* | *"wiki"* | *"packages"* | *"chatgpt"*) QUERY="$(echo "" | DMENU "0" "Search")"
+ URL="${URL}${QUERY}"
+ ;;
+ esac
+
+ "${BROWSER}" "${URL}" || notify-send "Failed to open the URL."
+}
+
+ensure_file_exists
+
+LINE_COUNT="$(wc -l < "${URLQUERY_FILE}")"
+
+[ "${LINE_COUNT}" -ge "15" ] && LINE_COUNT="15"
+
+SELECTION="$(get_selection)"
+
+[ -z "${SELECTION}" ] && exit
+
+case "${SELECTION}" in
+ "${ACTION_MENU}")
+ ACTION="$(printf "Add\nDelete\nEdit\n" | DMENU "3" "Action")"
+
+ case "${ACTION}" in
+ "Add") add_bookmark ;;
+ "Delete") delete_bookmark ;;
+ "Edit") edit_bookmark ;;
+ esac
+ ;;
+ *)
+ open_bookmark
+ ;;
+esac
diff --git a/.local/bin/booksplit b/.local/bin/booksplit
new file mode 100755
index 0000000..079d85f
--- /dev/null
+++ b/.local/bin/booksplit
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# Requires ffmpeg
+
+[ ! -f "$2" ] && printf "The first file should be the audio, the second should be the timecodes.\\n" && exit
+
+echo "Enter the album/book title:"; read -r booktitle
+echo "Enter the artist/author:"; read -r author
+echo "Enter the publication year:"; read -r year
+
+inputaudio="$1"
+ext="${1##*.}"
+
+# Get a safe file name from the book.
+escbook="$(echo "$booktitle" | iconv -c -f UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g")"
+
+! mkdir -p "$escbook" &&
+ echo "Do you have write access in this directory?" &&
+ exit 1
+
+# Get the total number of tracks from the number of lines.
+total="$(wc -l < "$2")"
+
+cmd="ffmpeg -i \"$inputaudio\" -nostdin -y"
+
+while read -r x;
+do
+ end="$(echo "$x" | cut -d' ' -f1)"
+ file="$escbook/$(printf "%.2d" "$track")-$esctitle.$ext"
+ if [ -n "$start" ]; then
+ cmd="$cmd -metadata artist=\"$author\" -metadata title=\"$title\" -metadata album=\"$booktitle\" -metadata year=\"$year\" -metadata track=\"$track\" -metadata total=\"$total\" -ss \"$start\" -to \"$end\" -vn -c:a copy \"$file\" "
+ fi
+ title="$(echo "$x" | cut -d' ' -f2-)"
+ esctitle="$(echo "$title" | iconv -c -f UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g")"
+ track="$((track+1))"
+ start="$end"
+done < "$2"
+
+# Last track must be added out of the loop.
+file="$escbook/$(printf "%.2d" "$track")-$esctitle.$ext"
+cmd="$cmd -metadata artist=\"$author\" -metadata title=\"$title\" -metadata album=\"$booktitle\" -metadata year=\"$year\" -metadata track=\"$track\" -ss \"$start\" -vn -c copy \"$file\""
+
+eval "$cmd"
diff --git a/.local/bin/cleanup b/.local/bin/cleanup
new file mode 100755
index 0000000..4f0bee1
--- /dev/null
+++ b/.local/bin/cleanup
@@ -0,0 +1,2 @@
+#!/bin/sh
+yes | paru -Scc
diff --git a/.local/bin/compiler b/.local/bin/compiler
new file mode 100755
index 0000000..5c02164
--- /dev/null
+++ b/.local/bin/compiler
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# This script will compile or run another finishing operation on a document. I
+# have this script run via vim.
+
+# Compiles .tex. groff (.mom, .ms), .rmd, .md, .org. Opens .sent files as sent
+# presentations. Runs scripts based on extension or shebang.
+
+file="${1}"
+ext="${file##*.}"
+dir=${file%/*}
+base="${file%.*}"
+
+cd "${dir}" || exit "1"
+
+case "${ext}" in
+ [0-9]) preconv "${file}" | refer -PS -e | groff -mandoc -T pdf > "${base}.pdf" ;;
+ mom|ms) preconv "${file}" | refer -PS -e | groff -T pdf -m"${ext}" > "${base}.pdf" ;;
+ c) cc "${file}" -o "${base}" && "${base}" ;;
+ cob) cobc -x -o "$base" "$file" && "$base" ;;
+ cpp|cc) g++ "${file}" -o "${base}" && "${base}" ;;
+ cs) mcs "${file}" && mono "${base}.exe" ;;
+ go) go run "${file}" ;;
+ h) doas make install ;;
+ java) javac -d classes "${file}" && java -cp classes "${base}" ;;
+ m) octave "${file}" ;;
+ md) [ -x "$(command -v lowdown)" ] && \
+ lowdown --parse-no-intraemph "${file}" -Tms | groff -mpdfmark -ms -kept -T pdf > "${base}.pdf" || \
+ [ -x "$(command -v groffdown)" ] && \
+ groffdown -i "${file}" | groff -T pdf > "${base}.pdf" || \
+ pandoc -t ms --highlight-style="kate" -s -o "${base}.pdf" "${file}" ;;
+ org) emacs "${file}" --batch -u "${USER}" -f org-latex-export-to-pdf ;;
+ py) python "${file}" ;;
+ rink) rink -f "${file}" ;;
+ [rR]md) Rscript -e "rmarkdown::render('${file}', quiet=TRUE)" ;;
+ rs) cargo build && cargo run --quiet ;;
+ sass) sassc -a "${file}" "${base}.css" ;;
+ scad) openscad -o "${base}.stl" "${file}" ;;
+ sent) setsid -f sent "${file}" 2> "/dev/null" ;;
+ tex) latexmk ;;
+ *) sed -n '/^#!/s/^#!//p; q' "${file}" | xargs -r -I % "${file}" ;;
+esac
diff --git a/.local/bin/cron/README.md b/.local/bin/cron/README.md
new file mode 100644
index 0000000..e314296
--- /dev/null
+++ b/.local/bin/cron/README.md
@@ -0,0 +1,14 @@
+# Important Note
+
+These cronjobs have components that require information about your current display to display notifications correctly.
+
+When you add them as cronjobs, I recommend you precede the command with commands as those below:
+
+```
+export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u $USER)/bus; export WAYLAND_DISPLAY=wayland-1; . $HOME/.zprofile; then_command_goes_here
+```
+
+This ensures that notifications will display, wtype/wlrctl commands will function and environmental variables will work as well.
+
+# Also important
+DBUS_SESSION_BUS_ADDRESS variable will always have a random address in the /tmp directory when you are using dinit as your init system.
diff --git a/.local/bin/cron/checkup b/.local/bin/cron/checkup
new file mode 100755
index 0000000..fbe8e0f
--- /dev/null
+++ b/.local/bin/cron/checkup
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Syncs repositories and downloads updates, meant to be run as a cronjob.
+
+notify-send "๐Ÿ“ฆ Repository Sync" "Checking for package updates..."
+
+doas pacman -Syyuw --noconfirm || notify-send "Error downloading updates.
+
+Check your internet connection, if pacman is already running, or run update manually to see errors."
+pkill -RTMIN+8 "${STATUSBAR:-waybar}"
+
+if pacman -Qu | rg -v "\[ignored\]"
+then
+ notify-send "๐ŸŽ Repository Sync" "Updates available. Click statusbar icon (๐Ÿ“ฆ) for update."
+else
+ notify-send "๐Ÿ“ฆ Repository Sync" "Sync complete. No new packages for update."
+fi
diff --git a/.local/bin/cron/crontog b/.local/bin/cron/crontog
new file mode 100755
index 0000000..c9a640f
--- /dev/null
+++ b/.local/bin/cron/crontog
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# Toggles all cronjobs off/on.
+# Stores disabled crontabs in ~/.config/cronsaved until restored.
+
+([ -f "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved ] && crontab - < "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && rm "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && notify-send "๐Ÿ•“ Cronjobs re-enabled.") || ( crontab -l > "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && crontab -r && notify-send "๐Ÿ•“ Cronjobs saved and disabled.")
diff --git a/.local/bin/cron/mailup b/.local/bin/cron/mailup
new file mode 100755
index 0000000..0b2ab2d
--- /dev/null
+++ b/.local/bin/cron/mailup
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+pgrep -f mailsync && exit
+
+echo ๐Ÿ”ƒ > /tmp/mailupdate
+pkill -RTMIN+12 "${STATUSBAR:-waybar}"
+/usr/local/bin/mailsync
+rm -f /tmp/mailupdate
+pkill -RTMIN+12 "${STATUSBAR:-waybar}"
diff --git a/.local/bin/cron/newsup b/.local/bin/cron/newsup
new file mode 100755
index 0000000..efdf4ae
--- /dev/null
+++ b/.local/bin/cron/newsup
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Set as a cron job to check for new RSS entries for newsboat.
+# If newsboat is open, sends it an "R" key to refresh.
+
+export XDG_RUNTIME_DIR=/run/user/1000
+export WAYLAND_DISPLAY=wayland-1
+
+/usr/bin/notify-send "๐Ÿ“ฐ Updating RSS feeds..."
+
+pgrep -f newsboat$ && /usr/bin/wlrctl window focus title:newsboat && /usr/bin/wlrctl keyboard type R && exit
+
+echo ๐Ÿ”ƒ > /tmp/newsupdate
+pkill -RTMIN+6 "${STATUSBAR:-waybar}"
+/usr/bin/newsboat -x reload
+rm -f /tmp/newsupdate
+pkill -RTMIN+6 "${STATUSBAR:-waybar}"
+/usr/bin/notify-send "๐Ÿ“ฐ RSS feed update complete."
diff --git a/.local/bin/define b/.local/bin/define
new file mode 100755
index 0000000..8452671
--- /dev/null
+++ b/.local/bin/define
@@ -0,0 +1,37 @@
+#!/usr/bin/env bash
+
+word=${1:-$(xclip -o -selection primary 2>/dev/null || wl-paste 2>/dev/null)}
+
+# Check for empty word or special characters
+[[ -z "$word" || "$word" =~ [\/] ]] && notify-send -h string:bgcolor:#bf616a -t 3000 "Invalid input." && exit 0
+
+query=$(curl -s --connect-timeout 5 --max-time 10 "https://api.dictionaryapi.dev/api/v2/entries/en_US/$word")
+
+# Check for connection error (curl exit status stored in $?)
+[ $? -ne 0 ] && notify-send -h string:bgcolor:#bf616a -t 3000 "Connection error." && exit 1
+
+# Check for invalid word response
+[[ "$query" == *"No Definitions Found"* ]] && notify-send -h string:bgcolor:#bf616a -t 3000 "Invalid word." && exit 0
+
+# Show only first 3 definitions
+def=$(echo "$query" | jq -r '[.[].meanings[] | {pos: .partOfSpeech, def: .definitions[].definition}] | .[:3].[] | "\n\(.pos). \(.def)"')
+
+# Requires a notification daemon to be installed
+notify-send -t 60000 "$word -" "$def"
+
+
+### MORE OPTIONS :)
+
+# Show first definition for each part of speech (thanks @morgengabe1 on youtube)
+# def=$(echo "$query" | jq -r '.[0].meanings[] | "\(.partOfSpeech): \(.definitions[0].definition)\n"')
+
+# Show all definitions
+# def=$(echo "$query" | jq -r '.[].meanings[] | "\n\(.partOfSpeech). \(.definitions[].definition)"')
+
+# Regex + rg for just definition, if anyone prefers that to jq
+# def=$(rg -Po '"definition":"\K(.*?)(?=")' <<< "$query")
+
+# bold=$(tput bold) # Print text bold with echo, for visual clarity
+# normal=$(tput sgr0) # Reset text to normal
+# echo "${bold}Definition of $word"
+# echo "${normal}$def"
diff --git a/.local/bin/displayselect b/.local/bin/displayselect
new file mode 100755
index 0000000..4744dd3
--- /dev/null
+++ b/.local/bin/displayselect
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+# A UI for detecting and selecting all displays. Probes xrandr for connected
+# displays and lets user select one to use. User may also select "manual
+# selection" which opens arandr.
+
+twoscreen() { # If multi-monitor is selected and there are two screens.
+
+ mirror=$(printf "no\\nyes" | dmenu -i -p "Mirror displays?")
+ # Mirror displays using native resolution of external display and a scaled
+ # version for the internal display
+ if [ "$mirror" = "yes" ]; then
+ external=$(echo "$screens" | dmenu -i -p "Optimize resolution for:")
+ internal=$(echo "$screens" | rg -v "$external")
+
+ res_external=$(xrandr --query | sed -n "/^$external/,/\+/p" | \
+ tail -n 1 | awk '{print $1}')
+ res_internal=$(xrandr --query | sed -n "/^$internal/,/\+/p" | \
+ tail -n 1 | awk '{print $1}')
+
+ res_ext_x=$(echo "$res_external" | sed 's/x.*//')
+ res_ext_y=$(echo "$res_external" | sed 's/.*x//')
+ res_int_x=$(echo "$res_internal" | sed 's/x.*//')
+ res_int_y=$(echo "$res_internal" | sed 's/.*x//')
+
+ scale_x=$(echo "$res_ext_x / $res_int_x" | bc -l)
+ scale_y=$(echo "$res_ext_y / $res_int_y" | bc -l)
+
+ xrandr --output "$external" --auto --scale 1.0x1.0 \
+ --output "$internal" --auto --same-as "$external" \
+ --scale "$scale_x"x"$scale_y"
+ else
+
+ primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
+ secondary=$(echo "$screens" | rg -v ^"$primary"$)
+ direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
+ xrandr --output "$primary" --auto --scale 1.0x1.0 --output "$secondary" --"$direction"-of "$primary" --auto --scale 1.0x1.0
+ fi
+ }
+
+morescreen() { # If multi-monitor is selected and there are more than two screens.
+ primary=$(echo "$screens" | dmenu -i -p "Select primary display:")
+ secondary=$(echo "$screens" | rg -v ^"$primary"$ | dmenu -i -p "Select secondary display:")
+ direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?")
+ tertiary=$(echo "$screens" | rg -v ^"$primary"$ | rg -v ^"$secondary"$ | dmenu -i -p "Select third display:")
+ xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | rg -v "$direction")"-of "$primary" --auto
+ }
+
+multimon() { # Multi-monitor handler.
+ case "$(echo "$screens" | wc -l)" in
+ 2) twoscreen ;;
+ *) morescreen ;;
+ esac ;}
+
+onescreen() { # If only one output available or chosen.
+ xrandr --output "$1" --auto --scale 1.0x1.0 $(echo "$allposs" | rg -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -)
+ }
+
+postrun() { # Stuff to run to clean up.
+ setbg # Fix background if screen size/arangement has changed.
+ { killall dunst ; setsid -f dunst ;} >/dev/null 2>&1 # Restart dunst to ensure proper location on screen
+ }
+
+# Get all possible displays
+allposs=$(xrandr -q | rg "connected")
+
+# Get all connected screens.
+screens=$(echo "$allposs" | awk '/ connected/ {print $1}')
+
+# If there's only one screen
+[ "$(echo "$screens" | wc -l)" -lt 2 ] &&
+ { onescreen "$screens"; postrun; notify-send "๐Ÿ’ป Only one screen detected." "Using it in its optimal settings..."; exit ;}
+
+# Get user choice including multi-monitor and manual selection:
+chosen=$(printf "%s\\nmulti-monitor\\nmanual selection" "$screens" | dmenu -i -p "Select display arangement:") &&
+case "$chosen" in
+ "manual selection") arandr ; exit ;;
+ "multi-monitor") multimon ;;
+ *) onescreen "$chosen" ;;
+esac
+
+postrun
diff --git a/.local/bin/dmenuhandler b/.local/bin/dmenuhandler
new file mode 100755
index 0000000..875bbc2
--- /dev/null
+++ b/.local/bin/dmenuhandler
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# Feed this script a link and it will give mew
+# some choice programs to use to open it.
+feed="${1:-$(true | mew -p 'Paste URL or file path')}"
+
+case "$(printf "copy url\\nswayimg\\nsetbg\\nPDF\\nbrowser\\nlynx\\nvim\\nmpv\\nmpv loop\\nmpv float\\nqueue download\\nqueue yt-dlp\\nqueue yt-dlp audio" | mew -i -p "Open it with?")" in
+ "copy url") echo "$feed" | wl-copy ;;
+ mpv) setsid -f mpv -quiet "$feed" >/dev/null 2>&1 ;;
+ "mpv loop") setsid -f mpv -quiet --loop "$feed" >/dev/null 2>&1 ;;
+ "mpv float") setsid -f "$TERMINAL" -e mpv --geometry=+0-0 --autofit=30% --title="mpvfloat" "$feed" >/dev/null 2>&1 ;;
+ "queue yt-dlp") qndl "$feed" >/dev/null 2>&1 ;;
+ "queue yt-dlp audio") qndl "$feed" 'yt-dlp -o "%(title)s.%(ext)s" -f bestaudio --embed-metadata --restrict-filenames' ;;
+ "queue download") qndl "$feed" 'curl -LO' >/dev/null 2>&1 ;;
+ PDF) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && zathura "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" >/dev/null 2>&1 ;;
+ swayimg) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && swayimg "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" >/dev/null 2>&1 ;;
+ vim) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && setsid -f "$TERMINAL" -e "$EDITOR" "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" >/dev/null 2>&1 ;;
+ setbg) curl -L "$feed" > $XDG_CACHE_HOME/pic ; swaybg -i $XDG_CACHE_HOME/pic -m fill & >/dev/null 2>&1 ;;
+ browser) setsid -f "$BROWSER" "$feed" >/dev/null 2>&1 ;;
+ lynx) lynx "$feed" >/dev/null 2>&1 ;;
+esac
diff --git a/.local/bin/dmenumountcifs b/.local/bin/dmenumountcifs
new file mode 100755
index 0000000..4832213
--- /dev/null
+++ b/.local/bin/dmenumountcifs
@@ -0,0 +1,19 @@
+#!/bin/sh
+# Gives a mew prompt to mount unmounted local NAS shares for read/write.
+# Requirements - "%wheel ALL=(ALL) NOPASSWD: ALL"
+#
+# Browse for mDNS/DNS-SD services using the Avahi daemon...
+srvname=$(avahi-browse _smb._tcp -t | awk '{print $4}' | mew -i -p "Which NAS?") || exit 1
+notify-send "Searching for network shares..." "Please wait..."
+# Choose share disk...
+share=$(smbclient -L "$srvname" -N | rg Disk | awk '{print $1}' | mew -i -p "Mount which share?") || exit 1
+# Format URL...
+share2mnt=//"$srvname".local/"$share"
+
+sharemount() {
+ mounted=$(mount -v | rg "$share2mnt") || ([ ! -d /mnt/"$share" ] && doas mkdir /mnt/"$share")
+ [ -z "$mounted" ] && doas mount -t cifs "$share2mnt" -o user=nobody,password="",noperm /mnt/"$share" && notify-send "Netshare $share mounted" && exit 0
+ notify-send "Netshare $share already mounted"; exit 1
+}
+
+sharemount
diff --git a/.local/bin/dmenupass b/.local/bin/dmenupass
new file mode 100755
index 0000000..bea2ad9
--- /dev/null
+++ b/.local/bin/dmenupass
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# This script is the SUDO_ASKPASS variable, meaning that it will be used as a
+# password prompt if needed.
+
+mew -P -p "password:" <&-
diff --git a/.local/bin/dmenurecord b/.local/bin/dmenurecord
new file mode 100755
index 0000000..6f51f5f
--- /dev/null
+++ b/.local/bin/dmenurecord
@@ -0,0 +1,113 @@
+#!/bin/sh
+
+# Usage:
+# `$0`: Ask for recording type via mew
+# `$0 screencast`: Record both audio and screen
+# `$0 video`: Record only screen
+# `$0 audio`: Record only audio
+# `$0 kill`: Kill existing recording
+#
+# If there is already a running instance, user will be prompted to end it.
+
+getdim() {
+ screens=$(hyprctl monitors | grep Monitor | cut -d' ' -f2)
+ choice=$(printf "$screens\nExit\n" | mew)
+ [ "${choice}" != "Exit" ] || [ -z "${choice}" ] || exit &&
+ echo $choice
+}
+
+updateicon() { \
+ echo "$1" > /tmp/recordingicon
+ pkill -RTMIN+9 "${STATUSBAR:-waybar}"
+}
+
+killrecording() {
+ recpid="$(bat /tmp/recordingpid)"
+ echo $recpid
+ kill -2 "$recpid"
+ rm -f /tmp/recordingpid
+ updateicon ""
+ pkill -RTMIN+9 "${STATUSBAR:-waybar}"
+}
+
+screencast() { gpu-screen-recorder \
+ -w "$(getdim)" \
+ -f 60 \
+ -a default_output \
+ -a default_input \
+ -o "$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mp4" &
+ echo $! > /tmp/recordingpid
+ updateicon "โบ๏ธ๐ŸŽ™๏ธ"
+}
+
+video() { gpu-screen-recorder \
+ -w "$(getdim)" \
+ -f 60 \
+ -o "$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" &
+ echo $! > /tmp/recordingpid
+ updateicon "โบ๏ธ"
+}
+
+webcamhidef() { ffmpeg \
+ -f v4l2 \
+ -i /dev/video0 \
+ -video_size 1920x1080 \
+ "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
+ echo $! > /tmp/recordingpid
+ updateicon "๐ŸŽฅ"
+}
+
+webcam() { ffmpeg \
+ -f v4l2 \
+ -i /dev/video0 \
+ -video_size 640x480 \
+ "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" &
+ echo $! > /tmp/recordingpid
+ updateicon "๐ŸŽฅ"
+}
+
+
+audio() { \
+ ffmpeg \
+ -f alsa -i default \
+ -c:a flac \
+ "$HOME/audio-$(date '+%y%m%d-%H%M-%S').flac" &
+ echo $! > /tmp/recordingpid
+ updateicon "๐ŸŽ™๏ธ"
+}
+
+askrecording() { \
+ choice=$(printf "screencast\\nvideo\\nvideo selected\\naudio\\nwebcam\\nwebcam (hi-def)" | mew -i -p "Select recording style:")
+ case "$choice" in
+ screencast) screencast;;
+ audio) audio;;
+ video) video;;
+ *selected) videoselected;;
+ webcam) webcam;;
+ "webcam (hi-def)") webcamhidef;;
+ esac
+}
+
+asktoend() { \
+ response=$(printf "No\\nYes" | mew -i -p "Recording still active. End recording?") &&
+ [ "$response" = "Yes" ] && killrecording
+}
+
+videoselected()
+{
+ gpu-screen-recorder \
+ -w region -region $(slurp -f "%wx%h+%x+%y") \
+ -f 60 \
+ -o "$HOME/box-$(date '+%y%m%d-%H%M-%S').mkv" &
+ echo $! > /tmp/recordingpid
+ updateicon "โบ๏ธ"
+}
+
+case "$1" in
+ screencast) screencast;;
+ audio) audio;;
+ video) video;;
+ *selected) videoselected;;
+ kill) killrecording;;
+ *) ([ -f /tmp/recordingpid ] && asktoend && exit) || askrecording;;
+esac
diff --git a/.local/bin/dmenuunicode b/.local/bin/dmenuunicode
new file mode 100755
index 0000000..2c09c80
--- /dev/null
+++ b/.local/bin/dmenuunicode
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# The famous "get a menu of emojis to copy" script.
+
+# Get user selection via mew from emoji file.
+chosen=$(cut -d ';' -f1 ~/.local/share/larbs/chars/* | mew -i -l 30 | sed "s/ .*//")
+
+# Exit if none chosen.
+[ -z "$chosen" ] && exit
+
+# If you run this command with an argument, it will automatically insert the
+# character. Otherwise, show a message that the emoji has been copied.
+if [ -n "$1" ]; then
+ # currently only ascii supported in wlrctl
+ # wlrctl keyboard type"$chosen"
+ wtype "$chosen"
+else
+ printf "%s" "$chosen" | wl-copy
+ notify-send "'$chosen' copied to clipboard." &
+fi
diff --git a/.local/bin/doas_askpass b/.local/bin/doas_askpass
new file mode 100755
index 0000000..f5d61ef
--- /dev/null
+++ b/.local/bin/doas_askpass
@@ -0,0 +1,47 @@
+#!/usr/bin/expect --
+
+# askpass implementation for doas
+# example usage: DOAS_ASKPASS="mew -P -p password:" doas_askpass echo working
+
+# don't mind the man behind the curtain
+log_user 0
+
+# no command, then nothing to do
+if { $argc == 0 } { exit 0 }
+
+# treat all arguments as command input
+set cmd [lrange $argv 0 end];
+
+# read askpass from env or fallback to dmenu_pass ()
+if {[info exists ::env(DOAS_ASKPASS)]} {
+ set askpass "$::env(DOAS_ASKPASS)"
+} else {
+ set askpass "dmenu_pass password:"
+}
+
+# read password from user
+set pwd [exec {*}$askpass]
+
+# spawn doas operation
+spawn doas {*}$cmd
+
+# send password and execute command
+expect "doas*password:" {
+ send -- "$pwd\r"
+ expect \r
+ log_user 1
+ expect eof
+}
+
+# get the exit status of the spawned doas command
+set status [wait]
+
+# check exit code (4th element of wait result)
+set exit_code [lindex $status 3]
+
+# exit with 1 if doas failed, else 0
+if { $exit_code != 0 } {
+ exit 1
+} else {
+ exit 0
+}
diff --git a/.local/bin/getbib b/.local/bin/getbib
new file mode 100755
index 0000000..2c3f026
--- /dev/null
+++ b/.local/bin/getbib
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+BIB_FILE="${HOME}/latex/uni.bib"
+[ -f "${BIB_FILE}" ] || BIB_FILE="${2:-$(find "${HOME}" -path "${HOME}/.*" \
+ -prune -o -type "f" -name "*.bib" -print -quit)}"
+
+{ [ -f "${BIB_FILE}" ] || [ "${2}" ]; } || {
+ printf "%s\n" "Create a .bib file or provide as \$2." && exit "1"
+}
+
+filter() {
+ sed -n -E 's/.*((DOI|doi)((\.(org))?\/?|:? *))([^: ]+[^ .]).*/\6/p; T; q'
+}
+
+fpdf() {
+ pdf="${1}"
+ doi="$(pdfinfo "${pdf}" 2> "/dev/null" | filter)"
+
+ [ "${doi}" ] || doi="$(pdftotext -q -l "2" "${pdf}" - 2> "/dev/null" | filter)"
+
+ [ "${doi}" ] || printf "%s\n" "No DOI found for PDF: ${pdf}" >&2
+
+ printf "%s\n" "${doi}"
+}
+
+arrange() {
+ sed 's/\}, /\},\n /g
+ s/, /,\n /
+ s/ }/\n}/
+ s/,\s*pages=/,\n\tpages=/' |
+ sed '1s/^ *//
+ 1s/[0-9]*\([0-9]\{2\}\)/\1/
+ 1s/_//
+ 1s/.*/\L&/
+ s/.*=/\L&/
+ s/=/ = /'
+}
+
+doi2bib() {
+ doi="${1#doi:}"
+ url="https://api.crossref.org/works/${doi}/transform/application/x-bibtex"
+ entry="$(curl -kLsS --no-fail "${url}" | arrange)"
+ red='\033[0;31m'
+ reset='\033[0m'
+
+ printf "${red}%s${reset}\n" "${entry}"
+
+ [ "${entry%"${entry#?}"}" != "@" ] && {
+ printf "%s\n" "Failed to fetch bibtex entry for DOI: ${doi}"
+ return "1"
+ }
+
+ rg -iFq "doi = {${doi}}" "${BIB_FILE}" 2> "/dev/null" && {
+ printf "%s\n" "Bibtex entry for DOI: ${doi} already exists in the file."
+ } || {
+ [ -s "${BIB_FILE}" ] && printf "\n" >> "${BIB_FILE}"
+ printf "%s\n" "${entry}" >> "${BIB_FILE}"
+ printf "%s\n" "Added bibtex entry for DOI: ${doi}"
+ }
+}
+
+[ "${1}" ] || {
+ printf "%s\n" "Give either a pdf file or a DOI or a directory path that has PDFs as an argument."
+ exit "1"
+}
+
+[ -f "${1}" ] && doi="$(fpdf "${1}")" && doi2bib "${doi}" && exit "0"
+
+[ -d "${1}" ] && for i in "${1}"/*.pdf; do doi="$(fpdf "${i}")" && doi2bib "${doi}"; done && exit "0"
+
+doi="$(printf "%s\n" "${1}" | filter)" && doi2bib "${doi}"
diff --git a/.local/bin/getcomproot b/.local/bin/getcomproot
new file mode 100755
index 0000000..dbee348
--- /dev/null
+++ b/.local/bin/getcomproot
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# A helper script for LaTeX/groff files used by `compiler` and `opout`.
+# The user can add the root file of a larger project as a comment as below:
+# % root = mainfile.tex
+# And the compiler script will run on that instead of the opened file.
+
+texroot="$(sed -n 's/^\s*%.*root\s*=\s*\(\S\+\).*/\1/p' "${1}")"
+[ -f "${texroot}" ] && readlink -f "${texroot}" || exit "1"
diff --git a/.local/bin/ifinstalled b/.local/bin/ifinstalled
new file mode 100755
index 0000000..c192eba
--- /dev/null
+++ b/.local/bin/ifinstalled
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# Some optional functions in LARBS require programs not installed by default. I
+# use this little script to check to see if a command exists and if it doesn't
+# it informs the user that they need that command to continue. This is used in
+# various other scripts for clarity's sake.
+
+for x in "$@"; do
+ if ! which "$x" >/dev/null 2>&1 && ! pacman -Qq "$x" >/dev/null 2>&1; then
+ notify-send "๐Ÿ“ฆ $x" "must be installed for this function." && exit 1 ;
+ fi
+done
diff --git a/.local/bin/linkhandler b/.local/bin/linkhandler
new file mode 100755
index 0000000..cb12bf9
--- /dev/null
+++ b/.local/bin/linkhandler
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+# Feed script a url or file location.
+# If an image, it will view in swayimg,
+# if a video or gif, it will view in mpv
+# if a music file or pdf, it will download,
+# otherwise it opens link in browser.
+
+if [ -z "$1" ]; then
+ url="$(wl-paste)"
+else
+ url="$1"
+fi
+
+# Check if the URL is from inv.nadeko.net and adjust it for YouTube
+echo "$url" | rg -q 'inv.nadeko.net/watch'
+if [ $? -eq 0 ]; then
+ url="https://www.youtube.com/watch?v=$(echo "$url" | sed 's/.*inv\.nadeko\.net\/watch?v=\([^&]*\)/\1/')"
+fi
+
+case "$url" in
+ *mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtube.com/v/*|*youtube.com/shorts*|*youtu.be*|*hooktube.com*|*bitchute.com*|*videos.lukesmith.xyz*|*odysee.com*)
+ setsid -f mpv -quiet "$url" >/dev/null 2>&1 ;;
+ *png|*jpg|*jpe|*jpeg|*gif|*webp)
+ curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && swayimg "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;;
+ *pdf|*cbz|*cbr)
+ curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && zathura "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;;
+ *mp3|*flac|*opus|*mp3?source*)
+ qndl "$url" 'curl -LO' >/dev/null 2>&1 ;;
+ *)
+ [ -f "$url" ] && setsid -f "$TERMINAL" -e "$EDITOR" "$url" >/dev/null 2>&1 || setsid -f "$BROWSER" "$url" >/dev/null 2>&1
+esac
diff --git a/.local/bin/maimpick b/.local/bin/maimpick
new file mode 100755
index 0000000..29cf327
--- /dev/null
+++ b/.local/bin/maimpick
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+# This is bound to Shift+PrintScreen by default, requires grim (also optionally tesseract and swappy). It lets you
+# choose the kind of screenshot to take, including copying the image or even
+# highlighting an area to copy.
+
+# variables
+output="$(date '+%y%m%d-%H%M-%S').png"
+wclip_cmd="wl-copy -t image/png"
+ocr_cmd="wl-copy"
+
+get_active_window() {
+ hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
+}
+
+case "$(printf "a selected area\\ncurrent window\\nfull screen\\na selected area (copy)\\ncurrent window (copy)\\nfull screen (copy)\\na selected area (swappy)\\ncurrent window (swappy)\\nfull screen (swappy)\\ncopy selected image to text" | mew -l 10 -i -p "Screenshot which area?")" in
+ "a selected area") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" pic-selected-"${output}" && notify-send "๐Ÿ“ธ maimpick" "Screenshot saved as pic-selected-$output." ;;
+ "current window")
+ geometry=$(get_active_window)
+ sleep 0.2
+ grim -g "$geometry" pic-window-"${output}" && notify-send "๐Ÿ“ธ maimpick" "Screenshot saved as pic-window-$output." ;;
+ "full screen") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" pic-full-"${output}" && notify-send "๐Ÿ“ธ maimpick" "Screenshot saved as pic-full-$output." ;;
+ "a selected area (copy)") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" - | ${wclip_cmd} && notify-send "๐Ÿ“ธ maimpick" "Selected area screenshot copied to clipboard." ;;
+ "current window (copy)")
+ geometry=$(get_active_window)
+ sleep 0.2
+ grim -g "$geometry" - | ${wclip_cmd} && notify-send "๐Ÿ“ธ maimpick" "Window screenshot copied to clipboard." ;;
+ "full screen (copy)") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" - | ${wclip_cmd} && notify-send "๐Ÿ“ธ maimpick" "Full screen screenshot copied to clipboard.";;
+ "a selected area (swappy)") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" - | swappy -f - ;;
+ "current window (swappy)")
+ geometry=$(get_active_window)
+ sleep 0.2
+ grim -g "$geometry" - | swappy -f - ;;
+ "full screen (swappy)") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" - | swappy -f - ;;
+ "copy selected image to text") tmpfile=$(mktemp /tmp/ocr-XXXXXX.png) && slurp | grim -g - - > "$tmpfile" && tesseract "$tmpfile" - -l eng | ${ocr_cmd} && rm "$tmpfile" && notify-send "๐Ÿ“ธ maimpick" "Detected text copied to clipboard.\n$(wl-paste)" ;;
+ *) notify-send "๐Ÿ“ธ maimpick" "Wrong option."
+esac
diff --git a/.local/bin/mounter b/.local/bin/mounter
new file mode 100755
index 0000000..6d65c2c
--- /dev/null
+++ b/.local/bin/mounter
@@ -0,0 +1,114 @@
+#!/bin/bash
+
+IFS='
+'
+# Function for escaping cell-phone names.
+escape(){ echo "$@" | iconv -cf UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g" ;}
+
+# Check for phones.
+phones="$(simple-mtpfs -l 2>/dev/null | sed "s/^/๐Ÿ“ฑ/")"
+mountedphones="$(rg "simple-mtpfs" /etc/mtab)"
+# If there are already mounted phones, remove them from the list of mountables.
+[ -n "$mountedphones" ] && phones="$(for phone in $phones; do
+ for mounted in $mountedphones; do
+ escphone="$(escape "$phone")"
+ [[ "$mounted" =~ "$escphone" ]] && break 1
+ done && continue 1
+ echo "$phone"
+done)"
+
+# Check for drives.
+lsblkoutput="$(doas lsblk -rpo "uuid,name,type,size,label,mountpoint,fstype")"
+# Get all LUKS drives
+allluks="$(echo "$lsblkoutput" | rg crypto_LUKS)"
+# Get a list of the LUKS drive UUIDs already decrypted.
+decrypted="$(find /dev/disk/by-id/dm-uuid-CRYPT-LUKS2-* | sed "s|.*LUKS2-||;s|-.*||")"
+# Functioning for formatting drives correctly for mew:
+filter() { sed "s/ /:/g" | awk -F':' '$7==""{printf "%s%s (%s) %s\n",$1,$3,$5,$6}' ; }
+
+# Get only LUKS drives that are not decrypted.
+unopenedluks="$(for drive in $allluks; do
+ uuid="${drive%% *}"
+ uuid="${uuid//-}" # This is a bashism.
+ [ -n "$decrypted" ] && for open in $decrypted; do
+ [ "$uuid" = "$open" ] && break 1
+ done && continue 1
+ echo "๐Ÿ”’ $drive"
+done | filter)"
+
+# Get all normal, non-encrypted or decrypted partitions that are not mounted.
+normalparts="$(echo "$lsblkoutput"| rg -v crypto_LUKS | rg 'part|rom|crypt' | sed "s/^/๐Ÿ’พ /" | filter )"
+
+# Add all to one variable. If no mountable drives found, exit.
+alldrives="$(echo "$phones
+$unopenedluks
+$normalparts" | sed "/^$/d;s/ *$//")"
+
+# Quit the script if a sequential command fails.
+set -e
+
+test -n "$alldrives"
+
+# Feed all found drives to mew and get user choice.
+chosen="$(echo "$alldrives" | mew -p "Mount which drive?" -i)"
+
+# Function for prompting user for a mountpoint.
+getmount(){
+ mp="$(find /mnt /media /mount /home -maxdepth 1 -type d 2>/dev/null | mew -i -p "Mount this drive where?")"
+ test -n "$mp"
+ if [ ! -d "$mp" ]; then
+ mkdiryn=$(printf "No\\nYes" | mew -i -p "$mp does not exist. Create it?")
+ [ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || doas_askpass mkdir -p "$mp")
+ fi
+}
+
+attemptmount(){
+ # Attempt to mount without a mountpoint, to see if drive is in fstab.
+ doas mount "$chosen" || return 1
+ notify-send "๐Ÿ’พDrive Mounted." "$chosen mounted."
+ exit
+}
+
+case "$chosen" in
+ ๐Ÿ’พ*)
+ chosen="${chosen%% *}"
+ chosen="${chosen:1}" # This is a bashism.
+ parttype="$(echo "$lsblkoutput" | rg "$chosen" | awk '{print $NF}' | tr -d '[:space:]\r\n')"
+ attemptmount || getmount
+ case "${parttype##* }" in
+ vfat) doas mount -t vfat "$chosen" "$mp" -o rw,umask=0000 ;;
+ btrfs) doas mount "$chosen" "$mp" ;;
+ ntfs) doas mount -t ntfs3 "$chosen" "$mp" ;;
+ *) doas mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)" ;;
+ esac
+ notify-send "๐Ÿ’พDrive Mounted." "$chosen mounted to $mp."
+ ;;
+
+ ๐Ÿ”’*)
+ chosen="${chosen%% *}"
+ chosen="${chosen:1}" # This is a bashism.
+ # Number the drive.
+ while true; do
+ [ -f "/dev/mapper/usb$num" ] || break
+ num="$(printf "%02d" "$((num +1))")"
+ done
+
+ # Decrypt in a terminal window
+ ${TERMINAL:-st} -a termfloat -e doas cryptsetup open "$chosen" "usb$num"
+ # Check if now decrypted.
+ test -b "/dev/mapper/usb$num"
+
+ attemptmount || getmount
+ doas mount "/dev/mapper/usb$num" "$mp"
+ notify-send "๐Ÿ”“Decrypted drive Mounted." "$chosen decrypted and mounted to $mp."
+ ;;
+
+ ๐Ÿ“ฑ*)
+ notify-send "โ—Note" "Remember to allow file access on your phone now."
+ getmount
+ number="${chosen%%:*}"
+ number="${chosen:1}" # This is a bashism.
+ doas_askpass simple-mtpfs -o allow_other -o fsname="simple-mtpfs-$(escape "$chosen")" --device "$number" "$mp"
+ notify-send "๐Ÿค– Android Mounted." "Android device mounted to $mp."
+ ;;
+esac
diff --git a/.local/bin/noisereduce b/.local/bin/noisereduce
new file mode 100755
index 0000000..13f2a0d
--- /dev/null
+++ b/.local/bin/noisereduce
@@ -0,0 +1,81 @@
+#!/usr/bin/sh
+
+usage ()
+{
+ printf "Usage : noisereduce <input video file> <output video file>\n"
+ exit
+}
+
+# Tests for requirements
+ifinstalled ffmpeg || { echo >&2 "We require 'ffmpeg' but it's not installed."; exit 1; }
+ifinstalled sox || { echo >&2 "We require 'ffmpeg' but it's not installed."; exit 1; }
+
+if [ "$#" -ne 2 ]
+then
+ usage
+fi
+
+if [ ! -e "$1" ]
+then
+ printf "File not found: %s\n" "$1"
+ exit
+fi
+
+if [ -e "$2" ]
+then
+ printf "File %s already exists, overwrite? [y/N]\n: " "$2"
+ read -r yn
+ case $yn in
+ [Yy]* ) ;;
+ * ) exit;;
+ esac
+fi
+
+inBasename=$(basename "$1")
+inExt="${inBasename##*.}"
+
+isVideoStr=$(ffprobe -v warning -show_streams "$1" | rg codec_type=video)
+if [ -n "$isVideoStr" ]
+then
+ isVideo=1
+ printf "Detected %s as a video file\n" "$inBasename"
+else
+ isVideo=0
+ printf "Detected %s as an audio file\n" "$inBasename"
+fi
+
+printf "Sample noise start time [00:00:00]: "
+read -r sampleStart
+if [ -z "$sampleStart" ] ; then sampleStart="00:00:00"; fi
+printf "Sample noise end time [00:00:00.900]: "
+read -r sampleEnd
+if [ -z "$sampleEnd" ] ; then sampleEnd="00:00:00.900"; fi
+printf "Noise reduction amount [0.21]: "
+read -r sensitivity
+if [ -z "$sensitivity" ] ; then sensitivity="0.21"; fi
+
+
+tmpVidFile="/tmp/noiseclean_tmpvid.$inExt"
+tmpAudFile="/tmp/noiseclean_tmpaud.wav"
+noiseAudFile="/tmp/noiseclean_noiseaud.wav"
+noiseProfFile="/tmp/noiseclean_noise.prof"
+tmpAudCleanFile="/tmp/noiseclean_tmpaud-clean.wav"
+
+printf "Cleaning noise on %s...\n" "$1"
+
+if [ $isVideo -eq "1" ]; then
+ ffmpeg -v warning -y -i "$1" -qscale:v 0 -vcodec copy -an "$tmpVidFile"
+ ffmpeg -v warning -y -i "$1" -qscale:a 0 "$tmpAudFile"
+else
+ cp "$1" "$tmpAudFile"
+fi
+ffmpeg -v warning -y -i "$1" -vn -ss "$sampleStart" -t "$sampleEnd" "$noiseAudFile"
+sox "$noiseAudFile" -n noiseprof "$noiseProfFile"
+sox "$tmpAudFile" "$tmpAudCleanFile" noisered "$noiseProfFile" "$sensitivity"
+if [ $isVideo -eq "1" ]; then
+ ffmpeg -v warning -y -i "$tmpAudCleanFile" -i "$tmpVidFile" -vcodec copy -qscale:v 0 -qscale:a 0 "$2"
+else
+ cp "$tmpAudCleanFile" "$2"
+fi
+
+printf "Done"
diff --git a/.local/bin/opout b/.local/bin/opout
new file mode 100755
index 0000000..d2b447a
--- /dev/null
+++ b/.local/bin/opout
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+# opout: "open output": A general handler for opening a file's intended output,
+# usually the pdf of a compiled document. I find this useful especially
+# running from vim.
+
+basename="${1%.*}"
+
+case "${*}" in
+ *.tex|*.sil|*.m[dse]|*.[rR]md|*.mom|*.[0-9]) target="$(getcomproot "$1" || echo "$1")" ; setsid -f xdg-open "${target%.*}".pdf >/dev/null 2>&1 ;;
+ *.html) setsid -f "$BROWSER" "$basename".html >/dev/null 2>&1 ;;
+ *.sent) setsid -f sent "$1" >/dev/null 2>&1 ;;
+esac
diff --git a/.local/bin/pauseallmpv b/.local/bin/pauseallmpv
new file mode 100755
index 0000000..d69a414
--- /dev/null
+++ b/.local/bin/pauseallmpv
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# You might notice all mpv commands are aliased to have this input-ipc-server
+# thing. That's just for this particular command, which allows us to pause
+# every single one of them with one command! This is bound to super + shift + p
+# (with other things) by default and is used in some other places.
+
+for i in $(ls /tmp/mpvSockets/*); do
+ echo '{ "command": ["set_property", "pause", true] }' | socat - "$i";
+done
diff --git a/.local/bin/peertubetorrent b/.local/bin/peertubetorrent
new file mode 100755
index 0000000..6821a40
--- /dev/null
+++ b/.local/bin/peertubetorrent
@@ -0,0 +1,9 @@
+#!/bin/sh
+# torrent peertube videos, requires the transadd script
+# first argument is the video link, second is the quality (360, 480 or 1080)
+# 13/07/20 - Arthur Bais
+
+instance=$(echo "$1" | sed "s|/w.\+||")
+vidid=$(echo "$1" | sed "s|.\+/||")
+link=$(curl -s "$instance/api/v1/videos/$vidid" | rg -o "$instance/download/torrents/.\{37\}$2.torrent")
+transadd "$link"
diff --git a/.local/bin/podentr b/.local/bin/podentr
new file mode 100755
index 0000000..9454b07
--- /dev/null
+++ b/.local/bin/podentr
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# entr command to run `queueandnotify` when newsboat queue is changed
+
+[ "$(pgrep -x "$(basename "$0")" | wc -l)" -gt 2 ] && exit
+
+echo "${XDG_DATA_HOME:-$HOME/.local/share}"/newsboat/queue | entr -p queueandnotify 2>/dev/null
diff --git a/.local/bin/portal b/.local/bin/portal
new file mode 100755
index 0000000..b0afa23
--- /dev/null
+++ b/.local/bin/portal
@@ -0,0 +1,5 @@
+#!/bin/sh
+sleep 1
+killall xdg-desktop-portal-wlr
+killall xdg-desktop-portal
+/lib/xdg-desktop-portal-wlr &
diff --git a/.local/bin/qndl b/.local/bin/qndl
new file mode 100755
index 0000000..48bc61e
--- /dev/null
+++ b/.local/bin/qndl
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# $1 is a url; $2 is a command
+[ -z "$1" ] && exit
+base="$(basename "$1")"
+notify-send "โณ Queuing $base..."
+cmd="$2"
+[ -z "$cmd" ] && cmd="yt-dlp --embed-metadata -ic"
+idnum="$(tsp $cmd "$1")"
+realname="$(echo "$base" | sed "s/?\(source\|dest\).*//;s/%20/ /g")"
+tsp -D "$idnum" mv "$base" "$realname"
+tsp -D "$idnum" notify-send "๐Ÿ‘ $realname done."
diff --git a/.local/bin/queueandnotify b/.local/bin/queueandnotify
new file mode 100755
index 0000000..1c3025c
--- /dev/null
+++ b/.local/bin/queueandnotify
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# Podboat sucks. This script replaces it.
+# It reads the newsboat queue, queuing downloads with taskspooler.
+# It also removes the junk from extensions.
+queuefile="${XDG_DATA_HOME:-$HOME/.local/share}/newsboat/queue"
+
+while read -r line; do
+ [ -z "$line" ] && continue
+ url="${line%%[ ]*}"
+ qndl "$url" "curl -LO"
+done < "$queuefile"
+
+echo > "$queuefile"
diff --git a/.local/bin/randombg b/.local/bin/randombg
new file mode 100755
index 0000000..6e386ef
--- /dev/null
+++ b/.local/bin/randombg
@@ -0,0 +1,21 @@
+#!/bin/sh
+killall swaybg
+PIDFILE="/tmp/randombg.pid"
+# Check if the PID file exists and if the process is running
+if [ -e "$PIDFILE" ] && kill -0 "$(bat "$PIDFILE")"; then
+ echo "Another instance of the script is already running."
+ kill -9 "$(bat $PIDFILE)" # Forcefully kill the old process
+fi
+echo $$ > "$PIDFILE"
+trap 'rm -f "$PIDFILE"; exit' INT TERM EXIT
+
+swaybg -i $(fd . /mnt/ssd/papes -t f | shuf -n1) -m fill &
+OLD_PID=$!
+while true; do
+ sleep 300
+ swaybg -i $(fd . /mnt/ssd/papes -t f | shuf -n1) -m fill &
+ NEXT_PID=$!
+ sleep 5
+ kill $OLD_PID
+ OLD_PID=$NEXT_PID
+done
diff --git a/.local/bin/rssadd b/.local/bin/rssadd
new file mode 100755
index 0000000..13a525f
--- /dev/null
+++ b/.local/bin/rssadd
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+if echo "$1" | rg -q "https*://\S\+\.[A-Za-z]\+\S*" ; then
+ url="$1"
+else
+ url="$(rg -Eom1 '<[^>]+(rel="self"|application/[a-z]+\+xml)[^>]+>' "$1" |
+ rg -o "https?://[^\" ]")"
+
+ echo "$url" | rg -q "https*://\S\+\.[A-Za-z]\+\S*" ||
+ notify-send "That doesn't look like a full URL." && exit 1
+fi
+
+RSSFILE="${XDG_CONFIG_HOME:-$HOME/.config}/newsboat/urls"
+if awk '{print $1}' "$RSSFILE" | rg "^$url$" >/dev/null; then
+ notify-send "You already have this RSS feed."
+else
+ echo "$url" >> "$RSSFILE" && notify-send "RSS feed added."
+fi
diff --git a/.local/bin/rssget b/.local/bin/rssget
new file mode 100755
index 0000000..45064b7
--- /dev/null
+++ b/.local/bin/rssget
@@ -0,0 +1,115 @@
+#!/bin/bash
+
+# Searches the website for RSS feeds and adds them to newsboat url list. Can
+# also find hidden RSS feeds on various websites, namely Youtube, Reddit,
+# Vimeo, Github, Gitlab and Medium. Gets site url as $1 or (if not present)
+# from X clipboard. Gets tags as $2. If it finds more than one feed, calls
+# mew for the user to choose which one to add. I have bound it to a keyboard
+# shortcut so i copy a site link and easily add its feed to the reader.
+
+# Inspired by and based on the logic of this extension:
+# https://github.com/shevabam/get-rss-feed-url-extension
+
+# This script requires rssadd to add feeds to the list.
+
+getlink () {
+ local url="$1"
+ feeds="$(curl -s "$url" | rg -x '.*type=.*(rss|rdf|atom).*' | sed 's/ //g')"
+ url="$(echo $url | sed 's|^\(https://[^/]*/\).*|\1|')"
+
+ for rsspath in $feeds; do
+ rsspath="$(echo $rsspath | sed -n "s|.*href=['\"]\([^'\"]*\)['\"].*|\1|p")"
+ if echo "$rsspath" | rg "http" > /dev/null; then
+ link="$rsspath"
+ elif echo "$rsspath" | rg "^/" > /dev/null; then
+ link="$url$(echo $rsspath | sed 's|^/||')"
+ else
+ link="$url$rsspath"
+ fi
+ echo $link
+ done
+}
+
+getRedditRss() {
+ echo "${1%/}.rss"
+}
+
+getYoutubeRss() {
+ local url="$1"
+ path=$(echo "$url" | sed -e 's|^http[s]*://||')
+ case "$path" in
+ *"/channel/"*) channel_id="$(echo $path | sed -r 's|.*channel/([^/]*).*|\1|')" && feed="https://www.youtube.com/feeds/videos.xml?channel_id=${channel_id}" ;;
+ *"/c/"*|*"/user/"*)
+ feed=$(wget -q "$url" -O tmp_rssget_yt \
+ && sed -n 's|.*\("rssUrl":"[^"]*\).*|\1|; p' tmp_rssget_yt \
+ | rg rssUrl \
+ | sed 's|"rssUrl":"||') ;;
+ esac
+ echo "$feed"
+}
+
+getVimeoRss() {
+ local url="$1"
+ if echo "$url" | rg -q "/videos$"; then
+ feed_url=$(echo "$url" | sed 's/\/videos$//' | sed 's/\/$/\/rss/')
+ else
+ feed_url="${url}/videos/rss"
+ fi
+ echo "$feed_url"
+}
+
+getGithubRss () {
+ local url="${1%/}"
+ if echo $url | rg "github.com/[^/]*/[a-zA-Z0-9].*" >/dev/null ; then
+ echo "${url}/commits.atom"
+ echo "${url}/releases.atom"
+ echo "${url}/tags.atom"
+ elif echo $url | rg "github.com/[^/]*(/)" >/dev/null ; then
+ echo "${url}.atom"
+ fi
+}
+
+getGitlabRss () {
+ local url="${1%/}"
+ echo "${url}.atom"
+}
+
+getMediumRss () {
+ echo $1 | sed 's|/tag/|/feed/|'
+}
+
+
+if [ -n "$1" ] ; then
+ url="$1"
+else
+ url="$(wl-paste)"
+ [ -z "$url" ] && echo "usage: $0 url 'tag1 tag2 tag3'" && exit 1
+fi
+
+declare -a list=()
+
+yt_regex="^(http(s)?://)?((w){3}\.)?(youtube\.com|invidio\.us|invidious\.flokinet\.to|invidious\.materialio\.us|iv\.datura\.network|invidious\.perennialte\.ch|invidious\.fdn\.fr|invidious\.private\.coffee|invidious\.protokolla\.fi|invidious\.privacyredirect\.com|yt\.artemislena\.eu|yt\.drgnz\.club|invidious\.incogniweb\.net|yewtu\.be|inv\.tux\.pizza|invidious\.reallyaweso\.me|iv\.melmac\.space|inv\.us\.projectsegfau\.lt|inv\.nadeko\.net|invidious\.darkness\.services|invidious\.jing\.rocks|invidious\.privacydev\.net|inv\.in\.projectsegfau\.lt|invidious\.drgns\.space)/(channel|user|c).+"
+reddit_regex="^(http(s)?://)?((w){3}\.)?reddit\.com.*"
+vimeo_regex="^(http(s)?://)?((w){3}.)?vimeo\.com.*"
+if echo $url | rg -x "$yt_regex" >/dev/null ; then
+ list="$(getYoutubeRss "$url")"
+elif echo $url | rg -x "$reddit_regex" >/dev/null ; then
+ list="$(getRedditRss "$url")"
+# vimeo actually works with getlink
+elif echo $url | rg "$vimeo_regex" >/dev/null ; then
+ list="$(getVimeoRss "$url")"
+elif echo $url | rg "github.com" >/dev/null ; then
+ list="$(getGithubRss "$url")"
+# gitlab also works with getlink
+elif echo $url | rg "gitlab.com/[a-zA-Z0-9].*" >/dev/null ; then
+ list="$(getGitlabRss "$url")"
+elif echo $url | rg "medium.com/tag" >/dev/null ; then
+ list="$(getMediumRss "$url")"
+else
+ list="$(getlink "$url")"
+fi
+
+[ "$(echo "$list" | wc -l)" -eq 1 ] && chosen_link="$list" || chosen_link=$(printf '%s\n' "${list[@]}" | mew -p "Choose a feed:")
+tags="$2"
+ifinstalled rssadd && rssadd "$chosen_link" "$tags"
+echo "$chosen_link" "$tags"
diff --git a/.local/bin/sd b/.local/bin/sd
new file mode 100755
index 0000000..6ac08a6
--- /dev/null
+++ b/.local/bin/sd
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# Open a terminal window in the same directory as the currently active window.
+
+windowPID=$(hyprctl activewindow | rg -oP '^\s*pid:\s*\K.*\S.*')
+PIDlist=$(pstree -lpATna "$windowPID" | sed -En 's/.*,([0-9]+).*/\1/p' | tac)
+for PID in $PIDlist; do
+ cmdline=$(ps -o args= -p "$PID")
+ process_group_leader=$(ps -o comm= -p "$(ps -o pgid= -p "$PID" | tr -d ' ')")
+ cwd=$(readlink /proc/"$PID"/cwd)
+ # zsh and yazi won't be ignored even if it shows ~ or /
+ case "$cmdline" in
+ 'Yazi') continue ;;
+ "${SHELL##*/}"|'yazi'|'yazi '*) break ;;
+ esac
+ # git (and its sub-processes) will show the root of a repository instead of the actual cwd, so they're ignored
+ [ "$process_group_leader" = 'git' ] || [ ! -d "$cwd" ] && continue
+ # This is to ignore programs that show ~ or / instead of the actual working directory
+ [ "$cwd" != "$HOME" ] && [ "$cwd" != '/' ] && break
+done
+[ "$PWD" != "$cwd" ] && [ -d "$cwd" ] && { cd "$cwd" || exit 1; }
+"$TERMINAL"
diff --git a/.local/bin/setbg b/.local/bin/setbg
new file mode 100755
index 0000000..e6d4d01
--- /dev/null
+++ b/.local/bin/setbg
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# This script does the following:
+# Run by itself, set the wallpaper (at X start).
+# If given a file, set that as the new wallpaper.
+# If given a directory, choose random file in it.
+# If wal is installed, also generates a colorscheme.
+
+# Location of link to wallpaper link.
+bgloc="${XDG_DATA_HOME:-$HOME/.local/share}/bg"
+
+# Configuration files of applications that have their themes changed by pywal.
+dunstconf="${XDG_CONFIG_HOME:-$HOME/.config}/dunst/dunstrc"
+zathuraconf="${XDG_CONFIG_HOME:-$HOME/.config}/zathura/zathurarc"
+
+# Give -s as parameter to make notifications silent.
+while getopts "s" o; do case "${o}" in
+ s) silent='1' ;;
+esac done
+
+shift $((OPTIND - 1))
+
+trueloc="$(readlink -f "$1")" &&
+case "$(file --mime-type -b "$trueloc")" in
+ image/* ) ln -sf "$trueloc" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Changing wallpaper..." ;;
+ inode/directory ) ln -sf "$(find "$trueloc" -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Random Wallpaper chosen." ;;
+ *) [ -z "$silent" ] && notify-send "๐Ÿ–ผ๏ธ Error" "Not a valid image or directory." ; exit 1;;
+esac
+
+# If pywal is installed, use it.
+if command -v wal >/dev/null 2>&1 ; then
+ wal -n -i "$(readlink -f $bgloc)" -o "${XDG_CONFIG_HOME:-$HOME/.config}/wal/postrun" >/dev/null 2>&1
+# If pywal is removed, return config files to normal.
+else
+ [ -f "$dunstconf.bak" ] && unlink "$dunstconf" && mv "$dunstconf.bak" "$dunstconf"
+ [ -f "$zathuraconf.bak" ] && unlink "$zathuraconf" && mv "$zathuraconf.bak" "$zathuraconf"
+fi
+
+killall swaybg
+swaybg -i "$bgloc" -m fill &
+# If running, dwm hit the key to refresh the color scheme.
+# pidof dwm >/dev/null && xdotool key super+F5
diff --git a/.local/bin/shortcuts b/.local/bin/shortcuts
new file mode 100755
index 0000000..bc2fb9e
--- /dev/null
+++ b/.local/bin/shortcuts
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+bmdirs="${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs"
+bmfiles="${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-files"
+
+# Output locations. Unactivated progs should go to /dev/null.
+shell_shortcuts="${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc"
+shell_env_shortcuts="${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutenvrc"
+zsh_named_dirs="${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc"
+lf_shortcuts="/dev/null"
+vim_shortcuts="/dev/null"
+qute_shortcuts="/dev/null"
+fish_shortcuts="/dev/null"
+vifm_shortcuts="/dev/null"
+yazi_shortcuts="${XDG_CONFIG_HOME:-$HOME/.config}/yazi/keymap.toml"
+
+# Remove, prepare files
+rm -f "$lf_shortcuts" "$qute_shortcuts" "$zsh_named_dirs" "$vim_shortcuts" "$yazi_shortcuts" 2>/dev/null
+printf "# vim: filetype=sh\\n" > "$fish_shortcuts"
+printf "# vim: filetype=sh\\nalias " > "$shell_shortcuts"
+printf "# vim: filetype=sh\\n" > "$shell_env_shortcuts"
+printf "\" vim: filetype=vim\\n" > "$vifm_shortcuts"
+
+# Format the `directories` file in the correct syntax and sent it to all three configs.
+eval "echo \"$(bat "$bmdirs")\"" | \
+awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\");
+ printf(\"%s=\42cd %s && ls -A\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ;
+ printf(\"[ -n \42%s\42 ] && export %s=\42%s\42 \n\",\$1,\$1,\$2) >> \"$shell_env_shortcuts\" ;
+ printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\" ;
+ printf(\"abbr %s \42cd %s; and ls -A\42\n\",\$1,\$2) >> \"$fish_shortcuts\" ;
+ printf(\"map g%s :cd %s<CR>\nmap t%s <tab>:cd %s<CR><tab>\nmap M%s <tab>:cd %s<CR><tab>:mo<CR>\nmap Y%s <tab>:cd %s<CR><tab>:co<CR> \n\",\$1,\$2, \$1, \$2, \$1, \$2, \$1, \$2) >> \"$vifm_shortcuts\" ;
+ printf(\"config.bind(';%s', \42set downloads.location.directory %s ;; hint links download\42) \n\",\$1,\$2) >> \"$qute_shortcuts\" ;
+ printf(\"map C%s cd \42%s\42 \n\",\$1,\$2) >> \"$lf_shortcuts\" ;
+ printf(\"cmap ;%s %s\n\",\$1,\$2) >> \"$vim_shortcuts\" ;
+ split(\$1, a, \"\")
+ chars = \"\"
+ for (i = 1; i <= length(a); i++) {
+ chars = chars sprintf(\"\\\"%s\\\"\", a[i])
+ if (i < length(a)) chars = chars \", \"
+ }
+ printf(\"[[mgr.prepend_keymap]]\\non = [\\\"g\\\", %s]\\nrun = \\\"cd %s\\\"\\n\\n\", chars, \$2) >> \"$yazi_shortcuts\" }"
+
+# Format the `files` file in the correct syntax and sent it to both configs.
+eval "echo \"$(bat "$bmfiles")\"" | \
+awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\");
+ printf(\"%s=\42\$EDITOR %s\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ;
+ printf(\"[ -n \42%s\42 ] && export %s=\42%s\42 \n\",\$1,\$1,\$2) >> \"$shell_env_shortcuts\" ;
+ printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\" ;
+ printf(\"abbr %s \42\$EDITOR %s\42 \n\",\$1,\$2) >> \"$fish_shortcuts\" ;
+ printf(\"map %s :e %s<CR> \n\",\$1,\$2) >> \"$vifm_shortcuts\" ;
+ printf(\"map E%s \$\$EDITOR \42%s\42 \n\",\$1,\$2) >> \"$lf_shortcuts\" ;
+ printf(\"cmap ;%s %s\n\",\$1,\$2) >> \"$vim_shortcuts\" ;
+ split(\$1, a, \"\")
+ chars = \"\"
+ for (i = 1; i <= length(a); i++) {
+ chars = chars sprintf(\"\\\"%s\\\"\", a[i])
+ if (i < length(a)) chars = chars \", \"
+ }
+ printf(\"[[mgr.prepend_keymap]]\\non = [\\\"e\\\", %s]\\nrun = 'shell --block \\\"\$EDITOR %s\\\"'\\n\\n\", chars, \$2) >> \"$yazi_shortcuts\" }"
diff --git a/.local/bin/singboxwrap b/.local/bin/singboxwrap
new file mode 100755
index 0000000..e52db36
--- /dev/null
+++ b/.local/bin/singboxwrap
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+config_dir="/mnt/ssd/settings/sing-box"
+default_path="${XDG_DATA_HOME:-$HOME/.local/share}/singboxcfg"
+
+input=$1
+
+run_singbox () {
+ sing-box check -c "$1" && {
+ pidof sing-box >/dev/null && killall sing-box
+ setsid -f sing-box -c "$1" run
+ if [ "$input" = menu ]; then
+ notify-send "sing-box with $(readlink "$1") is running now"
+ fi
+ } || notify-send "Config check has failed. Check your configuration at $(readlink $1)" & exit 1
+}
+
+choose_menu () {
+ choose="$(fd . $config_dir -d 1 -t f | mew -p "Config to use")"
+ [ -n "$choose" ] || exit 1
+ ln -sf "$choose" "$default_path"
+ echo "$default_path"
+}
+
+if [ ! -f "$default_path" ]; then
+ input="menu"
+fi
+
+case $input in
+ menu) run_singbox $(choose_menu) ;;
+ *) run_singbox $default_path ;;
+esac
diff --git a/.local/bin/slider b/.local/bin/slider
new file mode 100755
index 0000000..a7615f7
--- /dev/null
+++ b/.local/bin/slider
@@ -0,0 +1,126 @@
+#!/bin/sh
+
+# Give a file with images and timecodes and creates a video slideshow of them.
+#
+# Timecodes must be in format 00:00:00.
+#
+# Imagemagick and ffmpeg required.
+
+# Application cache if not stated elsewhere.
+cache="${XDG_CACHE_HOME:-$HOME/.cache}/slider"
+
+while getopts "hvrpi:c:a:o:d:f:t:e:x:s:" o; do case "${o}" in
+ c) bgc="$OPTARG" ;;
+ t) fgc="$OPTARG" ;;
+ f) font="$OPTARG" ;;
+ i) file="$OPTARG" ;;
+ a) audio="$OPTARG" ;;
+ o) outfile="$OPTARG" ;;
+ d) prepdir="$OPTARG" ;;
+ r) redo="$OPTARG" ;;
+ s) ppt="$OPTARG" ;;
+ e) endtime="$OPTARG" ;;
+ x) res="$OPTARG"
+ echo "$res" | rg -qv "^[0-9]\+x[0-9]\+$" &&
+ echo "Resolution must be dimensions separated by a 'x': 1280x720, etc." &&
+ exit 1 ;;
+ p) echo "Purge old build files in $cache? [y/N]"
+ read -r confirm
+ echo "$confirm" | rg -iq "^y$" && rm -rf "$cache" && echo "Done."
+ exit ;;
+ v) verbose=True ;;
+ *) echo "$(basename "$0") usage:
+ -i input timecode list (required)
+ -a audio file
+ -c color of background (use html names, black is default)
+ -t text color for text slides (white is default)
+ -s text font size for text slides (150 is default)
+ -f text font for text slides (sans serif is default)
+ -o output video file
+ -e if no audio given, the time in seconds that the last slide will be shown (5 is default)
+ -x resolution (1920x1080 is default)
+ -d tmp directory
+ -r rerun imagemagick commands even if done previously (in case files or background has changed)
+ -p purge old build files instead of running
+ -v be verbose" && exit 1
+
+esac done
+
+# Check that the input file looks like it should.
+{ head -n 1 "$file" 2>/dev/null | rg -q "^00:00:00 " ;} || {
+ echo "Give an input file with -i." &&
+ echo "The file should look as this example:
+
+00:00:00 first_image.jpg
+00:00:03 otherdirectory/next_image.jpg
+00:00:09 this_image_starts_at_9_seconds.jpg
+etc...
+
+Timecodes and filenames must be separated by Tabs." &&
+ exit 1
+ }
+
+if [ -n "${audio+x}" ]; then
+ # Check that the audio file looks like an actual audio file.
+ case "$(file --dereference --brief --mime-type -- "$audio")" in
+ audio/*) ;;
+ *) echo "That doesn't look like an audio file."; exit 1 ;;
+ esac
+ totseconds="$(date '+%s' -d $(ffmpeg -i "$audio" 2>&1 | awk '/Duration/ {print $2}' | sed s/,//))"
+fi
+
+prepdir="${prepdir:-$cache/$file}"
+outfile="${outfile:-$file.mp4}"
+prepfile="$prepdir/$file.prep"
+
+[ -n "${verbose+x}" ] && echo "Preparing images... May take a while depending on the number of files."
+mkdir -p "$prepdir"
+
+{
+while read -r x;
+do
+ # Get the time from the first column.
+ time="${x%% *}"
+ seconds="$(date '+%s' -d "$time")"
+ # Duration is not used on the first looped item.
+ duration="$((seconds - prevseconds))"
+
+ # Get the filename/text content from the rest.
+ content="${x#* }"
+ base="$(basename "$content")"
+ base="${base%.*}.jpg"
+
+ if [ -f "$content" ]; then
+ # If images have already been made in a previous run, do not recreate
+ # them unless -r was given.
+ { [ ! -f "$prepdir/$base" ] || [ -n "${redo+x}" ] ;} &&
+ magick -size "${res:-1920x1080}" canvas:"${bgc:-black}" -gravity center "$content" -resize 1920x1080 -composite "$prepdir/$base"
+ else
+ { [ ! -f "$prepdir/$base" ] || [ -n "${redo+x}" ] ;} &&
+ magick -size "${res:-1920x1080}" -background "${bgc:-black}" -fill "${fgc:-white}" -font "${font:-Sans}" -pointsize "${ppt:-150}" -gravity center label:"$content" "$prepdir/$base"
+ fi
+
+ # If the first line, do not write yet.
+ [ "$time" = "00:00:00" ] || echo "file '$prevbase'
+duration $duration"
+
+ # Keep the information required for the next file.
+ prevbase="$base"
+ prevtime="$time"
+ prevseconds="$(date '+%s' -d "$prevtime")"
+done < "$file"
+# Do last file which must be given twice as follows
+endtime="$((totseconds-seconds))"
+echo "file '$base'
+duration ${endtime:-5}
+file '$base'"
+} > "$prepfile"
+if [ -n "${audio+x}" ]; then
+ ffmpeg -hide_banner -y -f concat -safe 0 -i "$prepfile" -i "$audio" -c:a aac -vsync vfr -c:v libx264 -pix_fmt yuv420p "$outfile"
+else
+ ffmpeg -hide_banner -y -f concat -safe 0 -i "$prepfile" -vsync vfr -c:v libx264 -pix_fmt yuv420p "$outfile"
+fi
+
+# Might also try:
+# -vf "fps=${fps:-24},format=yuv420p" "$outfile"
+# but has given some problems.
diff --git a/.local/bin/start-pipewire b/.local/bin/start-pipewire
new file mode 100755
index 0000000..63fc043
--- /dev/null
+++ b/.local/bin/start-pipewire
@@ -0,0 +1,5 @@
+#!/bin/sh
+killall pipewire
+killall pipewire-pulse
+killall wireplumber
+setsid -f pipewire
diff --git a/.local/bin/statusbar/sb-battery b/.local/bin/statusbar/sb-battery
new file mode 100755
index 0000000..0e25e72
--- /dev/null
+++ b/.local/bin/statusbar/sb-battery
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+# Prints all batteries, their percentage remaining and an emoji corresponding
+# to charge status (๐Ÿ”Œ for plugged up, ๐Ÿ”‹ for discharging on battery, etc.).
+
+case $BLOCK_BUTTON in
+ 3) notify-send "๐Ÿ”‹ Battery module" "๐Ÿ”‹: discharging
+ ๐Ÿ›‘: not charging
+ โ™ป: stagnant charge
+ ๐Ÿ”Œ: charging
+ โšก: charged
+ โ—: battery very low!
+ - Scroll to change adjust xbacklight." ;;
+ 4) xbacklight -inc 10 ;;
+ 5) xbacklight -dec 10 ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+# Loop through all attached batteries and format the info
+for battery in /sys/class/power_supply/BAT?*; do
+ # If non-first battery, print a space separator.
+ [ -n "${capacity+x}" ] && printf " "
+ # Sets up the status and capacity
+ case "$(bat "$battery/status" 2>&1)" in
+ "Full") status="โšก" ;;
+ "Discharging") status="๐Ÿ”‹" ;;
+ "Charging") status="๐Ÿ”Œ" ;;
+ "Not charging") status="๐Ÿ›‘" ;;
+ "Unknown") status="โ™ป๏ธ" ;;
+ *) exit 1 ;;
+ esac
+ capacity="$(bat "$battery/capacity" 2>&1)"
+ # Will make a warn variable if discharging and low
+ [ "$status" = "๐Ÿ”‹" ] && [ "$capacity" -le 25 ] && warn="โ—"
+ # Prints the info
+ printf "%s%s%d%%" "$status" "$warn" "$capacity"; unset warn
+done && printf "\\n"
diff --git a/.local/bin/statusbar/sb-brightness b/.local/bin/statusbar/sb-brightness
new file mode 100755
index 0000000..30fe76b
--- /dev/null
+++ b/.local/bin/statusbar/sb-brightness
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# current brightness
+curr_brightness=$(bat /sys/class/backlight/*/brightness)
+
+# max_brightness
+max_brightness=$(bat /sys/class/backlight/*/max_brightness)
+
+# brightness percentage
+brightness_per=$((100 * curr_brightness / max_brightness))
+
+case $BLOCK_BUTTON in
+ 1)
+ ;;
+ 3)
+ notify-send "๐Ÿ’ก Brightness module" "\- Shows current brightness level โ˜€๏ธ."
+ ;;
+ 8)
+ setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1
+ ;;
+esac
+
+echo "๐Ÿ’ก ${brightness_per}%"
diff --git a/.local/bin/statusbar/sb-clock b/.local/bin/statusbar/sb-clock
new file mode 100755
index 0000000..d23af8d
--- /dev/null
+++ b/.local/bin/statusbar/sb-clock
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+clock=$(date '+%I')
+
+case "$clock" in
+ "00") icon="๐Ÿ•›" ;;
+ "01") icon="๐Ÿ•" ;;
+ "02") icon="๐Ÿ•‘" ;;
+ "03") icon="๐Ÿ•’" ;;
+ "04") icon="๐Ÿ•“" ;;
+ "05") icon="๐Ÿ•”" ;;
+ "06") icon="๐Ÿ••" ;;
+ "07") icon="๐Ÿ•–" ;;
+ "08") icon="๐Ÿ•—" ;;
+ "09") icon="๐Ÿ•˜" ;;
+ "10") icon="๐Ÿ•™" ;;
+ "11") icon="๐Ÿ•š" ;;
+ "12") icon="๐Ÿ•›" ;;
+esac
+
+case $BLOCK_BUTTON in
+ 1) notify-send "This Month" "$(cal | sed "s/\<$(date +'%e'|tr -d ' ')\>/<b><span color='red'>&<\/span><\/b>/")" && notify-send "Appointments" "$(calcurse -d3)" ;;
+ 2) setsid -f "$TERMINAL" -e calcurse >/dev/null 2>&1 ;;
+ 3) notify-send "๐Ÿ“… Time/date module" "\- Left click to show upcoming appointments for the next three days via \`calcurse -d3\` and show the month via \`cal\`
+- Middle click opens calcurse if installed" ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+date "+%Y %b %d (%a) $icon%H:%M"
diff --git a/.local/bin/statusbar/sb-cpu b/.local/bin/statusbar/sb-cpu
new file mode 100755
index 0000000..e9c9cae
--- /dev/null
+++ b/.local/bin/statusbar/sb-cpu
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+case $BLOCK_BUTTON in
+ 1) notify-send "๐Ÿ–ฅ CPU hogs" "$(ps axch -o cmd,%cpu | awk '{cmd[$1]+=$2} END {for (i in cmd) print i, cmd[i]}' | sort -nrk2 | head)\\n(100% per core)" ;;
+ 2) setsid -f "$TERMINAL" -e btop >/dev/null 2>&1 ;;
+ 3) notify-send "๐Ÿ–ฅ CPU module " "\- Shows CPU temperature.
+- Click to show intensive processes.
+- Middle click to open btop." ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+sensors | awk '/Core 0/ {print "๐ŸŒก" $3}'
diff --git a/.local/bin/statusbar/sb-cpubars b/.local/bin/statusbar/sb-cpubars
new file mode 100755
index 0000000..a0d5dce
--- /dev/null
+++ b/.local/bin/statusbar/sb-cpubars
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+# Module showing CPU load as a changing bars.
+# Just like in polybar.
+# Each bar represents amount of load on one core since
+# last run.
+
+# Cache in tmpfs to improve speed and reduce SSD load
+cache=/tmp/cpubarscache
+
+case $BLOCK_BUTTON in
+ 2) setsid -f "$TERMINAL" -e btop >/dev/null 2>&1 ;;
+ 3) notify-send "๐Ÿชจ CPU load module" "Each bar represents
+one CPU core";;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+# id total idle
+stats=$(awk '/cpu[0-9]+/ {printf "%d %d %d\n", substr($1,4), ($2 + $3 + $4 + $5), $5 }' /proc/stat)
+[ ! -f $cache ] && echo "$stats" > "$cache"
+old=$(bat "$cache")
+printf "๐Ÿชจ"
+echo "$stats" | while read -r row; do
+ id=${row%% *}
+ rest=${row#* }
+ total=${rest%% *}
+ idle=${rest##* }
+
+ case "$(echo "$old" | awk '{if ($1 == id)
+ printf "%d\n", (1 - (idle - $3) / (total - $2))*100 /12.5}' \
+ id="$id" total="$total" idle="$idle")" in
+
+ "0") printf "โ–";;
+ "1") printf "โ–‚";;
+ "2") printf "โ–ƒ";;
+ "3") printf "โ–„";;
+ "4") printf "โ–…";;
+ "5") printf "โ–†";;
+ "6") printf "โ–‡";;
+ "7") printf "โ–ˆ";;
+ "8") printf "โ–ˆ";;
+ esac
+done; printf "\\n"
+echo "$stats" > "$cache"
diff --git a/.local/bin/statusbar/sb-disk b/.local/bin/statusbar/sb-disk
new file mode 100755
index 0000000..adfa0e3
--- /dev/null
+++ b/.local/bin/statusbar/sb-disk
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Status bar module for disk space
+# $1 should be drive mountpoint, otherwise assumed /.
+
+location=${1:-/}
+
+[ -d "$location" ] || exit
+
+case $BLOCK_BUTTON in
+ 1) notify-send "๐Ÿ’ฝ Disk space" "$(df -h --output=target,used,size)" ;;
+ 3) notify-send "๐Ÿ’ฝ Disk module" "\- Shows used hard drive space.
+- Click to show all disk info." ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+case "$location" in
+ "/home"* ) icon="๐Ÿ " ;;
+ "/mnt"* ) icon="๐Ÿ’พ" ;;
+ *) icon="๐Ÿ–ฅ";;
+esac
+
+printf "%s: %s\n" "$icon" "$(df -h "$location" | awk ' /[0-9]/ {print $3 "/" $2}')"
diff --git a/.local/bin/statusbar/sb-doppler b/.local/bin/statusbar/sb-doppler
new file mode 100755
index 0000000..1930752
--- /dev/null
+++ b/.local/bin/statusbar/sb-doppler
@@ -0,0 +1,241 @@
+#!/bin/sh
+
+# Show a Doppler RADAR of a user's preferred location.
+
+secs=600 # Download a new doppler radar if one hasn't been downloaded in $secs seconds.
+radarloc="${XDG_CACHE_HOME:-$HOME/.cache}/radar"
+doppler="${XDG_CACHE_HOME:-$HOME/.cache}/doppler.gif"
+
+pickloc() { chosen="$(echo "US: CONUS: Continental United States
+US: Northeast
+US: Southeast
+US: PacNorthWest
+US: PacSouthWest
+US: UpperMissVly
+US: SouthMissVly
+US: SouthPlains
+US: NorthRockies
+US: SouthRockies
+US: Alaska
+US: Carib
+US: Hawaii
+US: CentGrLakes
+US: Conus-Large
+US: KABR: Aberdeen, SD
+US: KBIS: Bismarck, ND
+US: KFTG: Denver/Boulder, CO
+US: KDMX: Des Moines, IA
+US: KDTX: Detroit, MI
+US: KDDC: Dodge City, KS
+US: KDLH: Duluth, MN
+US: KCYS: Cheyenne, WY
+US: KLOT: Chicago, IL
+US: KGLD: Goodland, KS
+US: KUEX: Hastings, NE
+US: KGJX: Grand Junction, CO
+US: KGRR: Grand Rapids, MI
+US: KMVX: Fargo/Grand Forks, ND
+US: KGRB: Green Bay, WI
+US: KIND: Indianapolis, IN
+US: KJKL: Jackson, KY
+US: KARX: La Crosse, WI
+US: KILX: Lincoln/Central Illinois, IL
+US: KLVX: Louisville, KY
+US: KMQT: Marquette
+US: KMKX: Milwaukee, WI
+US: KMPX: Minneapolis, MN
+US: KAPX: Gaylord/Alpena, MI
+US: KLNX: North Platte, NE
+US: KIWX: N. Webster/Northern, IN
+US: KOAX: Omaha, NE
+US: KPAH: Paducah, KY
+US: KEAX: Pleasant Hill, MO
+US: KPUX: Pueblo, CO
+US: KDVN: Quad Cities, IA
+US: KUDX: Rapid City, SD
+US: KRIW: Riverton, WY
+US: KSGF: Springfield, MO
+US: KLSX: St. LOUIS, MO
+US: KFSD: Sioux Falls, SD
+US: KTWX: Topeka, KS
+US: KICT: Wichita, KS
+US: KVWX: Paducah, KY
+US: ICAO: Responsible Wfo
+US: KLTX: WILMINGTON, NC
+US: KCCX: State College/Central, PA
+US: KLWX: Sterling, VA
+US: KFCX: Blacksburg/Roanoke, VA
+US: KRAX: Raleigh/Durham, NC
+US: KGYX: Portland, ME
+US: KDIX: Mt Holly/Philadelphia, PA
+US: KPBZ: Pittsburgh, PA
+US: KAKQ: Wakefield, VA
+US: KMHX: Morehead City, NC
+US: KGSP: Greer/Greenville/Sprtbg, SC
+US: KILN: Wilmington/Cincinnati, OH
+US: KCLE: Cleveland, OH
+US: KCAE: Columbia, SC
+US: KBGM: Binghamton, NY
+US: KENX: Albany, NY
+US: KBUF: Buffalo, NY
+US: KCXX: Burlington, VT
+US: KCBW: Caribou, ME
+US: KBOX: Boston /Taunton, MA
+US: KOKX: New York City, NY
+US: KCLX: Charleston, SC
+US: KRLX: Charleston, WV
+US: ICAO: Responsible WFO
+US: KBRO: Brownsville, TX
+US: KABX: Albuquerque, NM
+US: KAMA: Amarillo, TX
+US: KFFC: Peachtree City/Atlanta, GA
+US: KEWX: Austin/Sanantonio, TX
+US: KBMX: Birmingham, AL
+US: KCRP: Corpus Christi, TX
+US: KFWS: Dallas / Ft. Worth, TX
+US: KEPZ: El Paso, TX
+US: KHGX: Houston/ Galveston, TX
+US: KJAX: Jacksonville, FL
+US: KBYX: Key West, FL
+US: KMRX: Morristown/knoxville, TN
+US: KLBB: Lubbock, TX
+US: KLZK: Little Rock, AR
+US: KLCH: Lake Charles, LA
+US: KOHX: Nashville, TN
+US: KMLB: Melbourne, FL
+US: KNQA: Memphis, TN
+US: KAMX: Miami, FL
+US: KMAF: Midland/odessa, TX
+US: KTLX: Norman, OK
+US: KHTX: Huntsville, AL
+US: KMOB: Mobile, AL
+US: KTLH: Tallahassee, FL
+US: KTBW: Tampa Bay Area, FL
+US: KSJT: San Angelo, TX
+US: KINX: Tulsa, OK
+US: KSRX: Tulsa, OK
+US: KLIX: New Orleans/slidell, LA
+US: KDGX: Jackson, MS
+US: KSHV: Shreveport, LA
+US: ICAO: Responsible WFO
+US: KLGX: Seattle / Tacoma, WA
+US: KOTX: Spokane, WA
+US: KEMX: Tucson, AZ
+US: KYUX: Phoenix, AZ
+US: KNKX: San Diego, CA
+US: KMUX: Monterey/san Francisco, CA
+US: KHNX: San Joaquin/hanford, CA
+US: KSOX: San Diego, CA
+US: KATX: Seattle / Tacoma, WA
+US: KIWA: Phoenix, AZ
+US: KRTX: Portland, OR
+US: KSFX: Pocatello, ID
+US: KRGX: Reno, NV
+US: KDAX: Sacramento, CA
+US: KMTX: Salt Lake City, UT
+US: KPDT: Pendleton, OR
+US: KMSX: Missoula, MT
+US: KESX: Las Vegas, NV
+US: KVTX: Los Angeles, CA
+US: KMAX: Medford, OR
+US: KFSX: Flagstaff, AZ
+US: KGGW: Glasgow, MT
+US: KLRX: Elko, NV
+US: KBHX: Eureka, CA
+US: KTFX: Great Falls, MT
+US: KCBX: Boise, ID
+US: KBLX: Billings, MT
+US: KICX: Salt Lake City, UT
+US: ICAO: Responsible Wfo W/ MSCF
+US: PABC: Anchorage, AK
+US: PAPD: Fairbanks, AK
+US: PHKM: Honolulu, HI
+US: PAHG: Anchorage, AK
+US: PAKC: Anchorage, AK
+US: PAIH: Anchorage, AK
+US: PHMO: Honolulu, HI
+US: PAEC: Fairbanks, AK
+US: TJUA: San Juan, PR
+US: PACG: Juneau, AK
+US: PHKI: Honolulu, HI
+US: PHWA: Honolulu, HI
+US: ICAO: Responsible Wfo W/ MSCF
+US: KFDR: Norman, OK
+US: PGUA: Guam
+US: KBBX: Sacramento, CA
+US: KFDX: Albuquerque, NM
+US: KGWX: Jackson, MS
+US: KDOX: Wakefield, VA
+US: KDYX: San Angelo, TX
+US: KEYX: Las Vegas, NV
+US: KEVX: Mobile, AL
+US: KHPX: Paducah, KY
+US: KTYX: Burlington, VT
+US: KGRK: Dallas / Ft. Worth, TX
+US: KPOE: Lake Charles, LA
+US: KEOX: Tallahassee, FL
+US: KHDX: El Paso, TX
+US: KDFX: San Antonio, TX
+US: KMXX: Birmingham, AL
+US: KMBX: Bismarck, ND
+US: KVAX: Jacksonville, FL
+US: KJGX: Peachtree City/atlanta, GA
+US: KVNX: Norman, OK
+US: KVBX: Vandenberg Afb: Orcutt, CA
+DE: BAW: Baden-Wรผrttemberg
+DE: BAY: Bavaria
+DE: BBB: Berlin
+DE: BBB: Brandenburg
+DE: HES: Hesse
+DE: MVP: Mecklenburg-Western Pomerania
+DE: NIB: Lower Saxony
+DE: NIB: Bremen
+DE: NRW: North Rhine-Westphalia
+DE: RPS: Rhineland-Palatinate
+DE: RPS: Saarland
+DE: SAC: Saxony
+DE: SAA: Saxony-Anhalt
+DE: SHH: Schleswig-Holstein
+DE: SHH: Hamburg
+DE: THU: Thuringia
+NL: The Netherlands
+RU: Russian Federation" | mew -i -l 50 -p "Select a radar to use as default:")"
+
+# Ensure user did not escape.
+[ -z "$chosen" ] && exit 1
+
+# Set country code and radar code.
+countrycode=${chosen%%:*}
+radarcode=${chosen#* } radarcode=${radarcode%:*}
+
+# Print codes to $radarloc file.
+ printf "%s,%s\\n" "$countrycode" "$radarcode" > "$radarloc" ;}
+
+getdoppler() {
+ country=$(cut -c -2 "$radarloc")
+ province=$(cut -c 4- "$radarloc")
+ notify-send "๐ŸŒฆ๏ธ Doppler RADAR" "Pulling most recent Doppler RADAR for $province."
+ case "$country" in
+ "US") province="$(echo "$province" | tr "[:lower:]" "[:upper:]")"
+ curl -sL "https://radar.weather.gov/ridge/standard/${province}_loop.gif" > "$doppler" ;;
+ "DE") province="$(echo "$province" | tr "[:upper:]" "[:lower:]")"
+ curl -sL "https://www.dwd.de/DWD/wetter/radar/radfilm_${province}_akt.gif" > "$doppler" ;;
+ "NL") curl -sL "https://cdn.knmi.nl/knmi/map/general/weather-map.gif" > "$doppler" ;;
+ "RU") curl -sL "https://meteoinfo.ru/hmc-output/rmap/phenomena.gif" > "$doppler" ;;
+ esac
+}
+
+showdoppler() { setsid -f mpv --no-osc --loop=inf --no-terminal "$doppler" >/dev/null 2>&1 ;}
+
+case $BLOCK_BUTTON in
+ 1) [ ! -f "$radarloc" ] && pickloc && getdoppler
+ [ $(($(date '+%s') - $(stat -c %Y "$doppler"))) -gt "$secs" ] && getdoppler
+ showdoppler ;;
+ 2) pickloc && getdoppler && showdoppler ;;
+ 3) notify-send "๐Ÿ—บ๏ธ Doppler RADAR module" "\- Left click for local Doppler RADAR.
+- Middle click to update RADAR location.
+After $secs seconds, new clicks will also automatically update the doppler RADAR." ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+echo ๐ŸŒ…
diff --git a/.local/bin/statusbar/sb-forecast b/.local/bin/statusbar/sb-forecast
new file mode 100755
index 0000000..eb07dfe
--- /dev/null
+++ b/.local/bin/statusbar/sb-forecast
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+# Displays today's precipication chance (โ˜”), and daily low (๐Ÿฅถ) and high (๐ŸŒž).
+# Usually intended for the statusbar.
+
+url="${WTTRURL:-wttr.in}"
+weatherreport="${XDG_CACHE_HOME:-$HOME/.cache}/weatherreport"
+
+# Get a weather report from 'wttr.in' and save it locally.
+getforecast() { { rg -q -m1 '^up$' /sys/class/net/w*/operstate || rg -q -m1 '^up$' /sys/class/net/e*/operstate; } &&
+ curl -sf "$url/$LOCATION" --output "$weatherreport" && touch "$weatherreport"
+}
+
+# Forecast should be updated only once a day.
+checkforecast() {
+ [ "$(stat -c %y "$weatherreport" 2>/dev/null |
+ cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ]
+}
+
+getprecipchance() {
+ echo "$weatherdata" | sed '16q;d' | # Extract line 16 from file
+ rg -wo "[0-9]*%" | # Find a sequence of digits followed by '%'
+ sort -rn | # Sort in descending order
+ head -1q # Extract first line
+}
+
+getdailyhighlow() {
+ echo "$weatherdata" | sed '13q;d' | # Extract line 13 from file
+ rg -o "m[-+]?[0-9]+" | # Find temperatures in the format "m<signed number>"
+ sed 's/[+m]//g' | # Remove '+' and 'm'
+ sort -g | # Sort in ascending order
+ sed -e 1b -e '$!d' # Extract the first and last lines
+}
+
+readfile() { weatherdata="$(bat "$weatherreport")" ;}
+
+showweather() {
+ readfile
+ # shellcheck disable=SC2046,SC2183
+ printf "โ˜”%s โ„๏ธ%sยฐ ๐ŸŒž%sยฐ\n" "$(getprecipchance)" $(getdailyhighlow)
+}
+
+case $BLOCK_BUTTON in
+ 1) setsid -f "$TERMINAL" -e less -Sf "$weatherreport" >/dev/null 2>&1 ;;
+ 2) getforecast && showweather ;;
+ 3) notify-send "๐ŸŒˆ Weather module" "\- Left click for full forecast.
+- Middle click to update forecast.
+โ˜”: Chance of rain/snow
+โ„๏ธ: Daily low
+๐ŸŒž: Daily high" ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+# shellcheck disable=SC2015
+checkforecast && showweather ||
+ ( flock -n 9 &&
+ ( tries=0; while [ $tries -ne 100 ]; do
+ getforecast && break ||
+ { tries=$((tries+1)); sleep .1; }
+ done
+ ! checkforecast &&
+ until getforecast; do sleep 60; done
+ pkill -RTMIN+5 "${STATUSBAR:-waybar}"
+ ) &
+ echo ) 9>"${XDG_RUNTIME_DIR}/sb-forecast.lock"
diff --git a/.local/bin/statusbar/sb-internet b/.local/bin/statusbar/sb-internet
new file mode 100755
index 0000000..2c7fd96
--- /dev/null
+++ b/.local/bin/statusbar/sb-internet
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+# Show wifi ๐Ÿ“ถ and percent strength or ๐Ÿ“ก if none.
+# Show ๐ŸŒŽ if connected to ethernet or โŽ if none.
+# Show ๐Ÿ”’ if a vpn connection is active
+
+case $BLOCK_BUTTON in
+ 1) setsid -f "$TERMINAL" -e nmtui >/dev/null 2>&1 ; pkill -RTMIN+4 waybar ;;
+ 3) notify-send "๐ŸŒŽ Internet module" "\- Click to connect
+โŒ: wifi disabled
+๐Ÿ“ก: no wifi connection
+๐Ÿ“ถ: wifi connection with quality
+โŽ: no ethernet
+๐ŸŒŽ: ethernet working
+๐Ÿงญ: vpn is active (routing)
+๐Ÿ”’: vpn is active
+ " ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+# Wifi
+if [ "$(bat /sys/class/net/w*/operstate 2>/dev/null)" = 'up' ] ; then
+ wifiicon="$(awk '/^\s*w/ { print "๐Ÿ“ถ", int($3 * 100 / 70) "% " }' /proc/net/wireless)"
+elif [ "$(bat /sys/class/net/w*/operstate 2>/dev/null)" = 'down' ] ; then
+ [ "$(bat /sys/class/net/w*/flags 2>/dev/null)" = '0x1003' ] && wifiicon="๐Ÿ“ก " || wifiicon="โŒ "
+fi
+
+# Ethernet
+[ "$(bat /sys/class/net/e*/operstate 2>/dev/null)" = 'up' ] && ethericon="๐ŸŒŽ" || ethericon="โŽ"
+
+# TUN
+[ -n "$(bat /sys/class/net/tun*/operstate 2>/dev/null)" ] && tunicon=" ๐Ÿ”’"
+[ -n "$(bat /sys/class/net/route*/operstate 2>/dev/null)" ] && tunicon=" ๐Ÿงญ"
+
+printf "%s%s%s\n" "$wifiicon" "$ethericon" "$tunicon"
diff --git a/.local/bin/statusbar/sb-iplocate b/.local/bin/statusbar/sb-iplocate
new file mode 100755
index 0000000..83a37e9
--- /dev/null
+++ b/.local/bin/statusbar/sb-iplocate
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+# Gets your public ip address checks which country you are in and
+# displays that information in the statusbar
+#
+# https://www.maketecheasier.com/ip-address-geolocation-lookups-linux/
+
+set -e
+
+ifinstalled "geoip"
+addr="$(geoiplookup "$(curl -sfm 1 ifconfig.me 2>/dev/null)")"
+name="${addr##*, }"
+flag="$(rg "flag: $name" "${XDG_DATA_HOME:-$HOME/.local/share}/larbs/emoji")"
+flag="${flag%% *}"
+printf "%s %s\\n" "$flag" "$name"
diff --git a/.local/bin/statusbar/sb-kbselect b/.local/bin/statusbar/sb-kbselect
new file mode 100755
index 0000000..f4d3e9e
--- /dev/null
+++ b/.local/bin/statusbar/sb-kbselect
@@ -0,0 +1,26 @@
+#!/bin/sh
+# works on any init system
+# requirements: mew
+
+kbquery()
+{
+ kblayout=$(swaymsg --raw -t get_inputs | jq -r '.[] | select(.type == "keyboard") | .xkb_active_layout_name' | sort -u) || exit 1
+ kblayout=$(echo "$kblayout" | sed 's/(/\\(/g; s/)/\\)/g') || exit 1
+ kblayout=$(rg -oP "^\s*\K\w+(?=\s+$kblayout)" /usr/share/X11/xkb/rules/base.lst) || exit 1
+ echo $kblayout
+}
+
+kb=$(kbquery)
+
+case $BLOCK_BUTTON in
+ 1) kb_choice="$(awk '/! layout/{flag=1; next} /! variant/{flag=0} flag {print $2, "- " $1}' /usr/share/X11/xkb/rules/base.lst | mew -l 15)"
+ [ -z "$kb_choice" ] && exit 0
+ kb="$(echo "$kb_choice" | awk '{print $3}')"
+ swaymsg input "type:keyboard" xkb_layout "$kb" >/dev/null 2>&1
+ pkill -RTMIN+30 "${STATUSBAR:-waybar}";;
+ 3) notify-send "โŒจ Keyboard/language module" "$(printf "%s" "\- Current layout: $(kbquery)")
+- Left click to change keyboard.";;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+echo "$kb"
diff --git a/.local/bin/statusbar/sb-mailbox b/.local/bin/statusbar/sb-mailbox
new file mode 100755
index 0000000..13ded2b
--- /dev/null
+++ b/.local/bin/statusbar/sb-mailbox
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+# Displays number of unread mail and an loading icon if updating.
+# When clicked, brings up `neomutt`.
+
+case $BLOCK_BUTTON in
+ 1) setsid -w -f "$TERMINAL" -e neomutt ; pkill -RTMIN+12 "${STATUSBAR:-waybar}" ;;
+ 2) setsid -f mailup >/dev/null && exit ;;
+ 3) notify-send "๐Ÿ“ฌ Mail module" "\- Shows unread mail
+- Shows ๐Ÿ”ƒ if syncing mail
+- Left click opens neomutt
+- Middle click syncs mail" ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+unread="$(fd . "${XDG_DATA_HOME:-$HOME/.local/share}"/mail/*/[Ii][Nn][Bb][Oo][Xx]/new/ -t f | wc -l 2>/dev/null)"
+
+icon=$(bat /tmp/mailupdate 2>/dev/null)
+
+if [ "$unread" -eq 0 ]; then
+ [ -n "$icon" ] && echo "๐Ÿ“ฌ$icon" || exit 0
+else
+ echo "๐Ÿ“ฌ$unread$icon"
+fi
diff --git a/.local/bin/statusbar/sb-memory b/.local/bin/statusbar/sb-memory
new file mode 100755
index 0000000..a37f1ca
--- /dev/null
+++ b/.local/bin/statusbar/sb-memory
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+case $BLOCK_BUTTON in
+ 1) notify-send "๐Ÿง  Memory hogs" "$(ps axch -o cmd,%mem | awk '{cmd[$1]+=$2} END {for (i in cmd) print i, cmd[i]}' | sort -nrk2 | head)" ;;
+ 2) setsid -f "$TERMINAL" -e btop >/dev/null 2>&1 ;;
+ 3) notify-send "๐Ÿง  Memory module" "\- Shows Memory Used/Total.
+- Click to show memory hogs.
+- Middle click to open btop." ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+free --mebi | sed -n '2{p;q}' | awk '{printf ("๐Ÿง %sMB\n", ($3))}'
diff --git a/.local/bin/statusbar/sb-microphone b/.local/bin/statusbar/sb-microphone
new file mode 100755
index 0000000..fc1c07a
--- /dev/null
+++ b/.local/bin/statusbar/sb-microphone
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# Prints the current microphone volume or ๏„ฑ if muted.
+
+case $BLOCK_BUTTON in
+ 1) setsid -w -f "$TERMINAL" -e pulsemixer; pkill -RTMIN+23 "${STATUSBAR:-waybar}" ;;
+ 2) wpctl set-mute @DEFAULT_SOURCE@ toggle ;;
+ 4) wpctl set-volume @DEFAULT_SOURCE@ 1%+ ;;
+ 5) wpctl set-volume @DEFAULT_SOURCE@ 1%- ;;
+ 3) notify-send "๐ŸŽค Microphone volume module" "\- Shows volume ๐ŸŽ™๏ธ, ๏„ฑ if muted.
+- Middle click to mute.
+- Scroll to change." ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+vol="$(wpctl get-volume @DEFAULT_AUDIO_SOURCE@)"
+
+# If muted, print ๏„ฑ and exit.
+[ "$vol" != "${vol%\[MUTED\]}" ] && echo ๏„ฑ && exit
+
+vol="${vol#Volume: }"
+
+split() {
+ # For ommiting the . without calling and external program.
+ IFS=$2
+ set -- $1
+ printf '%s' "$@"
+}
+
+vol="$(printf "%.0f" "$(split "$vol" ".")")"
+
+case 1 in
+ $((vol >= 70)) ) icon="๐ŸŽ™๏ธ" ;;
+ $((vol >= 30)) ) icon="๐ŸŽ™๏ธ" ;;
+ $((vol >= 1)) ) icon="๐ŸŽ™๏ธ" ;;
+ * ) echo ๏„ฑ && exit ;;
+esac
+
+echo "$icon$vol%"
diff --git a/.local/bin/statusbar/sb-moonphase b/.local/bin/statusbar/sb-moonphase
new file mode 100755
index 0000000..f91a751
--- /dev/null
+++ b/.local/bin/statusbar/sb-moonphase
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+# Shows the current moon phase.
+
+moonfile="${XDG_DATA_HOME:-$HOME/.local/share}/moonphase"
+
+[ -s "$moonfile" ] && [ "$(stat -c %y "$moonfile" 2>/dev/null | cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ] ||
+ { curl -sf "wttr.in/?format=%m" > "$moonfile" || exit 1 ;}
+
+icon="$(bat "$moonfile")"
+
+case "$icon" in
+ ๐ŸŒ‘) name="New" ;;
+ ๐ŸŒ’) name="Waxing Crescent" ;;
+ ๐ŸŒ“) name="First Quarter" ;;
+ ๐ŸŒ”) name="Waxing Gibbous" ;;
+ ๐ŸŒ•) name="Full" ;;
+ ๐ŸŒ–) name="Waning Gibbous" ;;
+ ๐ŸŒ—) name="Last Quarter" ;;
+ ๐ŸŒ˜) name="Waning Crescent" ;;
+ *) exit 1 ;;
+esac
+
+echo "${icon-?}"
+
+case $BLOCK_BUTTON in
+ 3) notify-send "๐ŸŒœ Moon phase module" "Displays current moon phase.
+- ๐ŸŒ‘: New
+- ๐ŸŒ’: Waxing Crescent
+- ๐ŸŒ“: First Quarter
+- ๐ŸŒ”: Waxing Gibbous
+- ๐ŸŒ•: Full
+- ๐ŸŒ–: Waning Gibbous
+- ๐ŸŒ—: Last Quarter
+- ๐ŸŒ˜: Waning Crescent" ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
diff --git a/.local/bin/statusbar/sb-mpdup b/.local/bin/statusbar/sb-mpdup
new file mode 100755
index 0000000..42bd737
--- /dev/null
+++ b/.local/bin/statusbar/sb-mpdup
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# This loop will update the mpd statusbar module whenever a command changes the
+# music player's status. mpd must be running on X's start for this to work.
+
+while : ; do
+ mpc idle >/dev/null && kill -45 "$(pidof "waybar")" || break
+done
diff --git a/.local/bin/statusbar/sb-music b/.local/bin/statusbar/sb-music
new file mode 100755
index 0000000..8b0ae77
--- /dev/null
+++ b/.local/bin/statusbar/sb-music
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+filter() { sed "/^volume:/d;s/\\[paused\\].*/โธ/g;/\\[playing\\].*/d;/^ERROR/Q" | paste -sd ' ' -;}
+
+pidof -x sb-mpdup >/dev/null 2>&1 || sb-mpdup >/dev/null 2>&1 &
+
+case $BLOCK_BUTTON in
+ 1) mpc status | filter ; setsid -f "$TERMINAL" -e rmpc >/dev/null 2>&1 < /dev/null;; # right click, pause/unpause
+ 2) mpc toggle | filter ;; # right click, pause/unpause
+ 3) mpc status | filter ; notify-send "๐ŸŽต Music module" "\- Shows mpd song playing.
+- โธ when paused.
+- Left click opens rmpc.
+- Middle click pauses.
+- Scroll changes track.";; # right click, pause/unpause
+ 4) mpc prev | filter ;; # scroll up, previous
+ 5) mpc next | filter ;; # scroll down, next
+ 8) mpc status | filter ; setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 < /dev/null ;;
+ *) mpc status | filter ;;
+esac
diff --git a/.local/bin/statusbar/sb-nettraf b/.local/bin/statusbar/sb-nettraf
new file mode 100755
index 0000000..8921123
--- /dev/null
+++ b/.local/bin/statusbar/sb-nettraf
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+# Module showing network traffic. Shows how much data has been received (RX) or
+# transmitted (TX) since the previous time this script ran. So if run every
+# second, gives network traffic per second.
+
+case $BLOCK_BUTTON in
+ 3) notify-send "๐ŸŒ Network traffic module" "๐Ÿ”ป: Traffic received
+๐Ÿ”บ: Traffic transmitted" ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+update() {
+ sum=0
+ for arg; do
+ read -r i < "$arg"
+ sum=$(( sum + i ))
+ done
+ cache=/tmp/${1##*/}
+ [ -f "$cache" ] && read -r old < "$cache" || old=0
+ printf %d\\n "$sum" > "$cache"
+ printf %d\\n $(( sum - old ))
+}
+
+rx=$(update /sys/class/net/[ew]*/statistics/rx_bytes)
+tx=$(update /sys/class/net/[ew]*/statistics/tx_bytes)
+
+printf "๐Ÿ”ป%4sB ๐Ÿ”บ%4sB\\n" $(numfmt --to=iec $rx $tx)
diff --git a/.local/bin/statusbar/sb-news b/.local/bin/statusbar/sb-news
new file mode 100755
index 0000000..440de7c
--- /dev/null
+++ b/.local/bin/statusbar/sb-news
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Displays number of unread news items and an loading icon if updating.
+# When clicked, brings up `newsboat`.
+
+case $BLOCK_BUTTON in
+ 1) setsid "$TERMINAL" -T newsboat -e newsboat >/dev/null 2>&1 ;;
+ 2) setsid -f newsup >/dev/null && exit ;;
+ 3) notify-send "๐Ÿ“ฐ News module" "\- Shows unread news items
+- Shows ๐Ÿ”ƒ if updating with \`newsup\`
+- Left click opens newsboat
+- Middle click syncs RSS feeds
+<b>Note:</b> Only one instance of newsboat (including updates) may be running at a time." ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+ bat /tmp/newsupdate 2>/dev/null || echo "$(newsboat -x print-unread | awk '{ if($1>0) print "๐Ÿ“ฐ" $1}')$(bat "${XDG_CONFIG_HOME:-$HOME/.config}"/newsboat/.update 2>/dev/null)"
diff --git a/.local/bin/statusbar/sb-pacpackages b/.local/bin/statusbar/sb-pacpackages
new file mode 100755
index 0000000..08b4235
--- /dev/null
+++ b/.local/bin/statusbar/sb-pacpackages
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+# Displays number of upgradeable packages.
+# For this to work, have a `pacman -Sy` command run in the background as a
+# cronjob every so often as root. This script will then read those packages.
+# When clicked, it will run an upgrade via pacman.
+#
+# Add the following text as a file in /usr/share/libalpm/hooks/statusbar.hook:
+#
+# [Trigger]
+# Operation = Upgrade
+# Type = Package
+# Target = *
+#
+# [Action]
+# Description = Updating statusbar...
+# When = PostTransaction
+# Exec = /usr/bin/pkill -RTMIN+8 dwmblocks # Or waybar if using sway/hyprland.
+
+case $BLOCK_BUTTON in
+ 1) setsid -f "$TERMINAL" -e sb-popupgrade >/dev/null 2>&1 ;;
+ 2) notify-send "$(/usr/bin/pacman -Qu)" ;;
+ 3) notify-send "๐ŸŽ Upgrade module" "๐Ÿ“ฆ: number of upgradable packages
+- Left click to upgrade packages
+- Middle click to show upgradable packages" ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+pacman -Qu | rg -Fcv "[ignored]" | sed "s/^/๐Ÿ“ฆ/;s/^๐Ÿ“ฆ0$//g"
diff --git a/.local/bin/statusbar/sb-popupgrade b/.local/bin/statusbar/sb-popupgrade
new file mode 100755
index 0000000..94279c8
--- /dev/null
+++ b/.local/bin/statusbar/sb-popupgrade
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+printf "Beginning upgrade.\\n"
+
+paru
+pkill -RTMIN+8 "${STATUSBAR:-waybar}"
+
+printf "\\nUpgrade complete.\\nPress <Enter> to exit window.\\n\\n"
+read -r _
diff --git a/.local/bin/statusbar/sb-price b/.local/bin/statusbar/sb-price
new file mode 100755
index 0000000..d320511
--- /dev/null
+++ b/.local/bin/statusbar/sb-price
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+# Usage:
+# price <currency-base currency> <name of currency> <icon> <signal>
+# price bat-btc "Basic Attention Token" ๐Ÿฆ 24
+# This will give the price of BAT denominated in BTC and will update on
+# signal 24.
+# When the name of the currency is multi-word, put it in quotes.
+
+[ -z "$1" ] && exit 1
+
+url="${CRYPTOURL:-rate.sx}"
+target="${1%%-*}"
+denom="${1##*-}"
+name="${2:-$1}"
+icon="${3:-๐Ÿ’ฐ}"
+case "$denom" in
+ "$target"|usd) denom="usd"; symb="$" ;;
+ gbp) symb="ยฃ" ;;
+ eur) symb="โ‚ฌ" ;;
+ rub) symb="โ‚ฝ" ;;
+ btc) symb="๏…š" ;;
+esac
+interval="@14d" # History contained in chart preceded by '@' (7d = 7 days)
+dir="${XDG_CACHE_HOME:-$HOME/.cache}/crypto-prices"
+pricefile="$dir/$target-$denom"
+chartfile="$dir/$target-$denom-chart"
+filestat="$(stat -c %y "$pricefile" 2>/dev/null)"
+
+[ -d "$dir" ] || mkdir -p "$dir"
+
+updateprice() { curl -sf \
+ --fail-early "${denom}.${url}/1${target}" "${denom}.${url}/${target}${interval}" \
+ --output "$pricefile" --output "$chartfile" ||
+ rm -f "$pricefile" "$chartfile" ;}
+
+[ "${filestat%% *}" != "$(date '+%Y-%m-%d')" ] &&
+ updateme="1"
+
+case $BLOCK_BUTTON in
+ 1) setsid -f "$TERMINAL" -e less -Srf "$chartfile" >/dev/null ;;
+ 2) notify-send -u low "$icon Updating..." "Updating $name price..." ; updateme="1" ; showupdate="1" ;;
+ 3) uptime="$(date -d "$filestat" '+%D at %T' | sed "s|$(date '+%D')|Today|")"
+ notify-send "$icon $name module" "\- <b>Exact price: $symb$(bat "$pricefile")</b>
+- Left click for chart of changes.
+- Middle click to update.
+- Shows ๐Ÿ”ƒ if updating prices.
+- <b>Last updated:
+$uptime</b>" ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null ;;
+esac
+
+[ -n "$updateme" ] &&
+ updateprice "$target" &&
+ [ -n "$showupdate" ] &&
+ notify-send "$icon Update complete." "$name price is now
+$symb$(bat "$pricefile")"
+
+[ -f "$pricefile" ] && printf "%s%s%0.2f\n" "$icon" "$symb" "$(bat "$pricefile")"
diff --git a/.local/bin/statusbar/sb-tasks b/.local/bin/statusbar/sb-tasks
new file mode 100755
index 0000000..14778a2
--- /dev/null
+++ b/.local/bin/statusbar/sb-tasks
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# Originally by Andr3as07 <https://github.com/Andr3as07>
+# Some changes by Luke
+# Rebuild by Tenyun
+
+# This block displays the number running background tasks. Requires tsp.
+
+num=$(tsp -l | awk -v numr=0 -v numq=0 '{if (/running/)numr++; if (/queued/)numq++} END{print numr+numq"("numq")"}')
+
+# Handle mouse clicks
+case $BLOCK_BUTTON in
+ 1) setsid -f "$TERMINAL" -e tsp -l >/dev/null 2>&1 ;;
+ 3) notify-send "Tasks module" "๐Ÿค–: number of running/queued background tasks
+- Left click opens tsp" ;; # Right click
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+[ "$num" != "0(0)" ] &&
+ echo "๐Ÿค–$num"
diff --git a/.local/bin/statusbar/sb-ticker b/.local/bin/statusbar/sb-ticker
new file mode 100755
index 0000000..5b26160
--- /dev/null
+++ b/.local/bin/statusbar/sb-ticker
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+# Usage
+# sb-ticker
+# Sample output
+# ^DJI: 0.09%
+# CL=F: -1.88%
+# Description
+# displays/retrieves the latest percent-change in stock market quotes listed in $XDG_CONFIG_HOME/tickers.
+# defaults to S&P 500, Dow Jones Industrial, and the Nasdaq
+#
+# intended to be used in the statusbar, which will display the first quote price in the output
+
+url="terminal-stocks.dev"
+pricefile="${XDG_CACHE_HOME:-$HOME/.cache}/stock-prices"
+tickerfile="${XDG_CONFIG_HOME:-$HOME/.config}/tickers"
+
+[ -f "$tickerfile" ] && tickers="$(bat "$tickerfile")" || tickers="^GSPC,^DJI,^IXIC";
+
+checkprice() {
+ [ -s "$pricefile" ] && [ "$(stat -c %y "$pricefile" 2>/dev/null |
+ cut -d':' -f1)" != "$(date '+%Y-%m-%d %H')" ]
+}
+
+getchange() {
+ mapfile -t changes < <(sed -e 's/ / /g' "$pricefile" | rg -oe '[m-]\+[0-9]\+\.[0-9]\+' | sed 's/[m ]/;/g')
+ IFS=',' read -ra TICKER <<< "$tickers"
+ for idx in "${!TICKER[@]}"; do
+ printf "%s: %s%%\n" "${TICKER[$idx]}" "${changes[$idx]//;/}"
+ done
+}
+
+updateprice() { curl -sfm 10 "$url/$tickers" --output "$pricefile" || rm -f "$pricefile" ; }
+
+case $BLOCK_BUTTON in
+ 1) setsid "$TERMINAL" -e less -Srf "$pricefile" >/dev/null 2>&1 ;;
+ 2) notify-send -u low "Updating..." "Updating prices" ; updateme="1" ;;
+ 3) notify-send "Current prices:" "Current stock prices:\n<b>$(getchange)</b>
+- Left click to show price file
+- Middle click to update stock prices
+- Right click to get stock overview" ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+[ -n "$updateme" ] && updateprice
+
+[ -f "$pricefile" ] && getchange
+
+checkprice && updateprice
diff --git a/.local/bin/statusbar/sb-torrent b/.local/bin/statusbar/sb-torrent
new file mode 100755
index 0000000..868b3aa
--- /dev/null
+++ b/.local/bin/statusbar/sb-torrent
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+transmission-remote -l | rg % |
+ sed " # The letters are for sorting and will not appear.
+s/.*Stopped.*/A ๐Ÿ›‘/;
+s/.*Seeding.*/Z ๐ŸŒฑ/;
+s/.*100%.*/N โœ…/;
+s/.*Idle.*/B ๐Ÿ•ฐ๏ธ/;
+s/.*Uploading.*/L โฌ†๏ธ/;
+s/.*%.*/M โฌ‡๏ธ/" |
+ sort -h | uniq -c | awk '{print $3 $1}' | paste -sd ' ' -
+
+case $BLOCK_BUTTON in
+ 1) setsid -f "$TERMINAL" -e stig >/dev/null 2>&1 ;;
+ 2) td-toggle ;;
+ 3) notify-send "๐ŸŒฑ Torrent module" "\- Left click to open stig.
+- Middle click to toggle transmission.
+- Shift click to edit script.
+Module shows number of torrents:
+๐Ÿ›‘: paused
+๐Ÿ•ฐ: idle (seeds needed)
+๐Ÿ”ผ: uploading (unfinished)
+๐Ÿ”ฝ: downloading
+โœ…: done
+๐ŸŒฑ: done and seeding" ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
diff --git a/.local/bin/statusbar/sb-volume b/.local/bin/statusbar/sb-volume
new file mode 100755
index 0000000..6742bf5
--- /dev/null
+++ b/.local/bin/statusbar/sb-volume
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# Prints the current volume or ๐Ÿ”‡ if muted.
+
+case $BLOCK_BUTTON in
+ 1) setsid -w -f "$TERMINAL" -e pulsemixer; pkill -RTMIN+10 "${STATUSBAR:-waybar}" ;;
+ 2) wpctl set-mute @DEFAULT_SINK@ toggle ;;
+ 4) wpctl set-volume @DEFAULT_SINK@ 1%+ ;;
+ 5) wpctl set-volume @DEFAULT_SINK@ 1%- ;;
+ 3) notify-send "๐Ÿ“ข Volume module" "\- Shows volume ๐Ÿ”Š, ๐Ÿ”‡ if muted.
+- Middle click to mute.
+- Scroll to change." ;;
+ 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
+esac
+
+vol="$(wpctl get-volume @DEFAULT_AUDIO_SINK@)"
+
+# If muted, print ๐Ÿ”‡ and exit.
+[ "$vol" != "${vol%\[MUTED\]}" ] && echo ๐Ÿ”‡ && exit
+
+vol="${vol#Volume: }"
+
+split() {
+ # For ommiting the . without calling and external program.
+ IFS=$2
+ set -- $1
+ printf '%s' "$@"
+}
+
+vol="$(printf "%.0f" "$(split "$vol" ".")")"
+
+case 1 in
+ $((vol >= 70)) ) icon="๐Ÿ”Š" ;;
+ $((vol >= 30)) ) icon="๐Ÿ”‰" ;;
+ $((vol >= 1)) ) icon="๐Ÿ”ˆ" ;;
+ * ) echo ๐Ÿ”‡ && exit ;;
+esac
+
+echo "$icon$vol%"
diff --git a/.local/bin/sysact b/.local/bin/sysact
new file mode 100755
index 0000000..44a3868
--- /dev/null
+++ b/.local/bin/sysact
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# A mew wrapper script for system functions.
+export WM="Hyprland"
+case "$(readlink -f /sbin/init)" in
+ *systemd*) ctl='systemctl' ;;
+ *) ctl='loginctl' ;;
+esac
+
+wmpid(){ # This function is needed if there are multiple instances of the window manager.
+ tree="$(pstree -ps $$)"
+ tree="${tree#*$WM(}"
+ echo "${tree%%)*}"
+}
+
+lock(){
+ mpc pause
+ pauseallmpv
+ wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
+ kill -44 $(pidof waybar)
+ swaylock
+ wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
+ kill -44 $(pidof waybar)
+}
+
+case "$(printf "๐Ÿ”’ lock\n๐Ÿšช leave $WM\nโ™ป๏ธ renew $WM\n๐Ÿป hibernate\n๐Ÿ”ƒ reboot\n๐Ÿ–ฅ shutdown\n๐Ÿ’ค sleep\n๐Ÿ“บ display off" | mew -i -p 'Action: ')" in
+ '๐Ÿ”’ lock') lock ;;
+ "๐Ÿšช leave $WM") hyprctl dispatch exit ;;
+ "โ™ป๏ธ renew $WM") hyprctl reload ;;
+ '๐Ÿป hibernate') $ctl hibernate -i ;;
+ '๐Ÿ’ค sleep') $ctl suspend -i ;;
+ '๐Ÿ”ƒ reboot') $ctl reboot -i ;;
+ '๐Ÿ–ฅ๏ธshutdown') $ctl poweroff -i ;;
+ '๐Ÿ“บ display off') xset dpms force off ;;
+ *) exit 1 ;;
+esac
diff --git a/.local/bin/tag b/.local/bin/tag
new file mode 100755
index 0000000..92d6323
--- /dev/null
+++ b/.local/bin/tag
@@ -0,0 +1,49 @@
+#!/bin/sh
+
+err() { echo "Usage:
+ tag [OPTIONS] file
+Options:
+ -a: artist/author
+ -t: song/chapter title
+ -A: album/book title
+ -n: track/chapter number
+ -N: total number of tracks/chapters
+ -d: year of publication
+ -g: genre
+ -c: comment
+You will be prompted for title, artist, album and track if not given." && exit 1 ;}
+
+while getopts "a:t:A:n:N:d:g:c:" o; do case "${o}" in
+ a) artist="${OPTARG}" ;;
+ t) title="${OPTARG}" ;;
+ A) album="${OPTARG}" ;;
+ n) track="${OPTARG}" ;;
+ N) total="${OPTARG}" ;;
+ d) date="${OPTARG}" ;;
+ g) genre="${OPTARG}" ;;
+ c) comment="${OPTARG}" ;;
+ *) printf "Invalid option: -%s\\n" "$OPTARG" && err ;;
+esac done
+
+shift $((OPTIND - 1))
+
+file="$1"
+
+temp="$(mktemp -p "$(dirname "$file")")"
+trap 'rm -f $temp' HUP INT QUIT TERM PWR EXIT
+
+[ ! -f "$file" ] && echo 'Provide file to tag.' && err
+
+[ -z "$title" ] && echo 'Enter a title.' && read -r title
+[ -z "$artist" ] && echo 'Enter an artist.' && read -r artist
+[ -z "$album" ] && echo 'Enter an album.' && read -r album
+[ -z "$track" ] && echo 'Enter a track number.' && read -r track
+
+cp -f "$file" "$temp" && ffmpeg -i "$temp" -map 0 -y -codec copy \
+ -metadata title="$title" \
+ -metadata album="$album" \
+ -metadata artist="$artist" \
+ -metadata track="${track}${total:+/"$total"}" \
+ ${date:+-metadata date="$date"} \
+ ${genre:+-metadata genre="$genre"} \
+ ${comment:+-metadata comment="$comment"} "$file"
diff --git a/.local/bin/td-toggle b/.local/bin/td-toggle
new file mode 100755
index 0000000..977cc56
--- /dev/null
+++ b/.local/bin/td-toggle
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# If transmission-daemon is running, will ask to kill, else will ask to start.
+
+if pidof transmission-daemon >/dev/null ;
+then
+ [ "$(printf "No\\nYes" | mew -i -p "Turn off transmission-daemon?")" = "Yes" ] && killall transmission-daemon && notify-send "transmission-daemon disabled."
+else
+ ifinstalled transmission-cli || exit
+ [ "$(printf "No\\nYes" | mew -i -p "Turn on transmission daemon?")" = "Yes" ] && transmission-daemon && notify-send "transmission-daemon enabled."
+fi
+sleep 3 && pkill -RTMIN+7 "${STATUSBAR:-waybar}"
diff --git a/.local/bin/torwrap b/.local/bin/torwrap
new file mode 100755
index 0000000..4bbeb35
--- /dev/null
+++ b/.local/bin/torwrap
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+ifinstalled stig transmission-cli || exit 1
+
+! pidof transmission-daemon >/dev/null && transmission-daemon && notify-send "Starting torrent daemon..."
+
+$TERMINAL -e stig; pkill -RTMIN+7 "${STATUSBAR:-waybar}"
diff --git a/.local/bin/transadd b/.local/bin/transadd
new file mode 100755
index 0000000..ee7e162
--- /dev/null
+++ b/.local/bin/transadd
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Mimeapp script for adding torrent to transmission-daemon, but will also start the daemon first if not running.
+
+# transmission-daemon sometimes fails to take remote requests in its first moments, hence the sleep.
+
+pidof transmission-daemon >/dev/null || (transmission-daemon && notify-send "Starting transmission daemon..." && sleep 3 && pkill -RTMIN+7 "${STATUSBAR:-waybar}")
+
+transmission-remote -a "$@" && notify-send "๐Ÿ”ฝ Torrent added."
diff --git a/.local/bin/unix b/.local/bin/unix
new file mode 100755
index 0000000..fd15826
--- /dev/null
+++ b/.local/bin/unix
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+#original artwork by http://www.sanderfocus.nl/#/portfolio/tech-heroes
+#converted to shell by #nixers @ irc.unix.chat
+
+bat << 'eof'
+ ,_ ,_==โ–„โ–‚
+ , โ–‚โ–ƒโ–„โ–„โ–…โ–…โ–…โ–‚โ–…ยพ. / /
+ โ–„โ–†<ยด "ยปโ–“โ–“โ–“%\ / / / /
+ ,โ–…7" ยด>โ–“โ–“โ–“% / / > / >/%
+ โ–ยถโ–“ ,ยปโ–“โ–“ยพยด /> %/%// / /
+ โ–“โ–ƒโ–…โ–…โ–…โ–ƒ,,โ–„โ–…โ–…โ–…ร†\// ///>// />/ /
+ Vโ•‘ยซยผ.;โ†’ โ•‘<ยซ.,`=// />//%/% / /
+ //โ• <ยด -ยฒ,)(โ–“~"-โ•/ยพ/ %/>/ />
+ / / / โ–% -./โ–„โ–ƒโ–„โ–…โ–, /7//;//% / /
+ / ////`โ–Œโ– %zWv xXโ–“โ–‡โ–Œ//&;% / /
+ / / / %//%/ยพยฝยดโ–Œโ–ƒโ–„โ–„โ–„โ–„โ–ƒโ–ƒโ–ยถ\/& /
+ </ /</%//`โ–“!%โ–“%โ•ฃ[38;5;255;โ•ฃWY<Y)y&/`\
+ / / %/%//</%//\i7; โ• N>)VY>7; \_ UNIX IS VERY SIMPLE IT JUST NEEDS A
+ / /</ //<///<_/%\โ–“ V%W%ยฃ)XY _/%โ€พ\_, GENIUS TO UNDERSTAND ITS SIMPLICITY
+ / / //%/_,=--^/%/%%\ยพ%ยถ%%} /%%%%%%;\,
+ %/< /_/ %%%%%;X%%\%%;, _/%%%;, \
+ / / %%%%%%;, \%%l%%;// _/%;, dmr
+ / %%%;, <;\-=-/ /
+ ;, l
+eof
diff --git a/.local/bin/unmounter b/.local/bin/unmounter
new file mode 100755
index 0000000..fe1d01a
--- /dev/null
+++ b/.local/bin/unmounter
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+set -e
+
+mounteddroids="$(rg simple-mtpfs /etc/mtab | awk '{print "๐Ÿ“ฑ" $2}')"
+lsblkoutput="$(lsblk -nrpo "name,type,size,mountpoint")"
+mounteddrives="$(echo "$lsblkoutput" | awk '($2=="part"||$2="crypt")&&$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "๐Ÿ’พ%s (%s)\n",$4,$3}')"
+
+allunmountable="$(echo "$mounteddroids
+$mounteddrives" | sed "/^$/d;s/ *$//")"
+test -n "$allunmountable"
+
+chosen="$(echo "$allunmountable" | mew -i -p "Unmount which drive?")"
+chosen="${chosen%% *}"
+test -n "$chosen"
+
+doas umount -l "/${chosen#*/}"
+notify-send "Device unmounted." "$chosen has been unmounted."
+
+# Close the chosen drive if decrypted.
+cryptid="$(echo "$lsblkoutput" | rg "/${chosen#*/}$")"
+cryptid="${cryptid%% *}"
+test -b /dev/mapper/"${cryptid##*/}"
+doas_askpass cryptsetup close "$cryptid"
+notify-send "๐Ÿ”’Device decryption closed." "Drive is now securely locked again."
diff --git a/.local/bin/weath b/.local/bin/weath
new file mode 100755
index 0000000..ed23534
--- /dev/null
+++ b/.local/bin/weath
@@ -0,0 +1,25 @@
+#!/bin/sh
+#
+# Get the weather on the terminal. You can pass an alternative location as a parameter,
+# and/or use the 'cp' option to copy the forecast as plaintext to the clipboard.
+
+report="${XDG_CACHE_HOME:-$HOME/.cache}/weatherreport"
+
+if [ "$1" = 'cp' ]; then
+ # shellcheck disable=SC2015
+ [ -z "$2" ] && sed 's/\x1b\[[^m]*m//g' "$report" | wl-copy &&
+ notify-send "Weather forecast for '${LOCATION:-$(head -n 1 "$report" | cut -d' ' -f3-)}' copied to clipboard." ||
+ { data="$(curl -sfm 5 "${WTTRURL:-wttr.in}/$2?T")" &&
+ notify-send "Weather forecast for '$2' copied to clipboard." &&
+ echo "$data" | wl-copy ||
+ notify-send 'Failed to get weather forecast!' 'Check your internet connection and the supplied location.'; }
+else
+ [ -n "$2" ] &&
+ notify-send "Invalid option '$1'! The only valid option is 'cp'." &&
+ exit 1
+
+ # shellcheck disable=SC2015
+ [ -z "$1" ] && less -S "$report" ||
+ data="$(curl -sfm 5 "${WTTRURL:-wttr.in}/$1")" && echo "$data" | less -S ||
+ notify-send 'Failed to get weather forecast!' 'Check your internet connection and the supplied location.'
+fi
diff --git a/.local/bin/xdg-terminal-exec b/.local/bin/xdg-terminal-exec
new file mode 100755
index 0000000..12b18ff
--- /dev/null
+++ b/.local/bin/xdg-terminal-exec
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+"$TERMINAL" -e "$@"
diff --git a/.local/share/applications/file.desktop b/.local/share/applications/file.desktop
new file mode 100644
index 0000000..dcdf465
--- /dev/null
+++ b/.local/share/applications/file.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Type=Application
+Name=File Manager
+Exec=/usr/bin/footclient -e yazi %u
diff --git a/.local/share/applications/img.desktop b/.local/share/applications/img.desktop
new file mode 100644
index 0000000..a20b4f2
--- /dev/null
+++ b/.local/share/applications/img.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Type=Application
+Name=Image viewer
+Exec=/usr/bin/swayimg %f
diff --git a/.local/share/applications/mail.desktop b/.local/share/applications/mail.desktop
new file mode 100644
index 0000000..e7e16ae
--- /dev/null
+++ b/.local/share/applications/mail.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Type=Application
+Name=Mail
+Exec=/usr/bin/footclient -e neomutt %u
diff --git a/.local/share/applications/pdf.desktop b/.local/share/applications/pdf.desktop
new file mode 100644
index 0000000..8c38677
--- /dev/null
+++ b/.local/share/applications/pdf.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Type=Application
+Name=PDF reader
+Exec=/usr/bin/zathura %u
diff --git a/.local/share/applications/rss.desktop b/.local/share/applications/rss.desktop
new file mode 100644
index 0000000..6fafc4f
--- /dev/null
+++ b/.local/share/applications/rss.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Type=Application
+Name=RSS feed addition
+Exec=/usr/bin/env rssadd %U
diff --git a/.local/share/applications/text.desktop b/.local/share/applications/text.desktop
new file mode 100644
index 0000000..ac53b06
--- /dev/null
+++ b/.local/share/applications/text.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Type=Application
+Name=Text editor
+Exec=/usr/bin/footclient -e nvim %u
diff --git a/.local/share/applications/torrent.desktop b/.local/share/applications/torrent.desktop
new file mode 100644
index 0000000..f6d28d9
--- /dev/null
+++ b/.local/share/applications/torrent.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Type=Application
+Name=Torrent
+Exec=/usr/bin/env transadd %U
diff --git a/.local/share/applications/video.desktop b/.local/share/applications/video.desktop
new file mode 100644
index 0000000..a29a0b1
--- /dev/null
+++ b/.local/share/applications/video.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Type=Application
+Name=Video viewer
+Exec=/usr/bin/mpv -quiet %f
diff --git a/.local/share/bg b/.local/share/bg
new file mode 120000
index 0000000..b41641d
--- /dev/null
+++ b/.local/share/bg
@@ -0,0 +1 @@
+thiemeyer_road_to_samarkand.jpg \ No newline at end of file
diff --git a/.local/share/larbs/chars/emoji b/.local/share/larbs/chars/emoji
new file mode 100644
index 0000000..6803731
--- /dev/null
+++ b/.local/share/larbs/chars/emoji
@@ -0,0 +1,1630 @@
+๐Ÿ˜€ grinning face
+๐Ÿ˜ƒ grinning face with big eyes
+๐Ÿ˜„ grinning face with smiling eyes
+๐Ÿ˜ beaming face with smiling eyes
+๐Ÿ˜† grinning squinting face
+๐Ÿ˜… grinning face with sweat
+๐Ÿคฃ rolling on the floor laughing
+๐Ÿ˜‚ face with tears of joy
+๐Ÿ™‚ slightly smiling face
+๐Ÿ™ƒ upside-down face
+๐Ÿซ  melting face
+๐Ÿ˜‰ winking face
+๐Ÿ˜Š smiling face with smiling eyes
+๐Ÿ˜‡ smiling face with halo
+๐Ÿฅฐ smiling face with hearts
+๐Ÿ˜ smiling face with heart-eyes
+๐Ÿคฉ star-struck
+๐Ÿ˜˜ face blowing a kiss
+๐Ÿ˜— kissing face
+โ˜บ๏ธ smiling face
+๐Ÿ˜š kissing face with closed eyes
+๐Ÿ˜™ kissing face with smiling eyes
+๐Ÿฅฒ smiling face with tear
+๐Ÿ˜‹ face savoring food
+๐Ÿ˜› face with tongue
+๐Ÿ˜œ winking face with tongue
+๐Ÿคช zany face
+๐Ÿ˜ squinting face with tongue
+๐Ÿค‘ money-mouth face
+๐Ÿค— smiling face with open hands
+๐Ÿคญ face with hand over mouth
+๐Ÿซข face with open eyes and hand over mouth
+๐Ÿซฃ face with peeking eye
+๐Ÿคซ shushing face
+๐Ÿค” thinking face
+๐Ÿซก saluting face
+๐Ÿค zipper-mouth face
+๐Ÿคจ face with raised eyebrow
+๐Ÿ˜ neutral face
+๐Ÿ˜‘ expressionless face
+๐Ÿ˜ถ face without mouth
+๐Ÿซฅ dotted line face
+๐Ÿ˜ smirking face
+๐Ÿ˜’ unamused face
+๐Ÿ™„ face with rolling eyes
+๐Ÿ˜ฌ grimacing face
+๐Ÿคฅ lying face
+๐Ÿ˜Œ relieved face
+๐Ÿ˜” pensive face
+๐Ÿ˜ช sleepy face
+๐Ÿคค drooling face
+๐Ÿ˜ด sleeping face
+๐Ÿ˜ท face with medical mask
+๐Ÿค’ face with thermometer
+๐Ÿค• face with head-bandage
+๐Ÿคข nauseated face
+๐Ÿคฎ face vomiting
+๐Ÿคง sneezing face
+๐Ÿฅต hot face
+๐Ÿฅถ cold face
+๐Ÿฅด woozy face
+๐Ÿ˜ต face with crossed-out eyes
+๐Ÿคฏ exploding head
+๐Ÿค  cowboy hat face
+๐Ÿฅณ partying face
+๐Ÿฅธ disguised face
+๐Ÿ˜Ž smiling face with sunglasses
+๐Ÿค“ nerd face
+๐Ÿง face with monocle
+๐Ÿ˜• confused face
+๐Ÿซค face with diagonal mouth
+๐Ÿ˜Ÿ worried face
+๐Ÿ™ slightly frowning face
+โ˜น๏ธ frowning face
+๐Ÿ˜ฎ face with open mouth
+๐Ÿ˜ฏ hushed face
+๐Ÿ˜ฒ astonished face
+๐Ÿ˜ณ flushed face
+๐Ÿฅบ pleading face
+๐Ÿฅน face holding back tears
+๐Ÿ˜ฆ frowning face with open mouth
+๐Ÿ˜ง anguished face
+๐Ÿ˜จ fearful face
+๐Ÿ˜ฐ anxious face with sweat
+๐Ÿ˜ฅ sad but relieved face
+๐Ÿ˜ข crying face
+๐Ÿ˜ญ loudly crying face
+๐Ÿ˜ฑ face screaming in fear
+๐Ÿ˜– confounded face
+๐Ÿ˜ฃ persevering face
+๐Ÿ˜ž disappointed face
+๐Ÿ˜“ downcast face with sweat
+๐Ÿ˜ฉ weary face
+๐Ÿ˜ซ tired face
+๐Ÿฅฑ yawning face
+๐Ÿ˜ค face with steam from nose
+๐Ÿ˜ก pouting face
+๐Ÿ˜  angry face
+๐Ÿคฌ face with symbols on mouth
+๐Ÿ˜ˆ smiling face with horns
+๐Ÿ‘ฟ angry face with horns
+๐Ÿ’€ skull
+โ˜ ๏ธ skull and crossbones
+๐Ÿ’ฉ pile of poo
+๐Ÿคก clown face
+๐Ÿ‘น ogre
+๐Ÿ‘บ goblin
+๐Ÿ‘ป ghost
+๐Ÿ‘ฝ alien
+๐Ÿ‘พ alien monster
+๐Ÿค– robot
+๐Ÿ˜บ grinning cat
+๐Ÿ˜ธ grinning cat with smiling eyes
+๐Ÿ˜น cat with tears of joy
+๐Ÿ˜ป smiling cat with heart-eyes
+๐Ÿ˜ผ cat with wry smile
+๐Ÿ˜ฝ kissing cat
+๐Ÿ™€ weary cat
+๐Ÿ˜ฟ crying cat
+๐Ÿ˜พ pouting cat
+๐Ÿ™ˆ see-no-evil monkey
+๐Ÿ™‰ hear-no-evil monkey
+๐Ÿ™Š speak-no-evil monkey
+๐Ÿ’‹ kiss mark
+๐Ÿ’Œ love letter
+๐Ÿ’˜ heart with arrow
+๐Ÿ’ heart with ribbon
+๐Ÿ’– sparkling heart
+๐Ÿ’— growing heart
+๐Ÿ’“ beating heart
+๐Ÿ’ž revolving hearts
+๐Ÿ’• two hearts
+๐Ÿ’Ÿ heart decoration
+โฃ๏ธ heart exclamation
+๐Ÿ’” broken heart
+โค๏ธ red heart
+๐Ÿงก orange heart
+๐Ÿ’› yellow heart
+๐Ÿ’š green heart
+๐Ÿ’™ blue heart
+๐Ÿ’œ purple heart
+๐ŸคŽ brown heart
+๐Ÿ–ค black heart
+๐Ÿค white heart
+๐Ÿ’ฏ hundred points
+๐Ÿ’ข anger symbol
+๐Ÿ’ฅ collision
+๐Ÿ’ซ dizzy
+๐Ÿ’ฆ sweat droplets
+๐Ÿ’จ dashing away
+๐Ÿ•ณ๏ธ hole
+๐Ÿ’ฃ bomb
+๐Ÿ’ฌ speech balloon
+๐Ÿ—จ๏ธ left speech bubble
+๐Ÿ—ฏ๏ธ right anger bubble
+๐Ÿ’ญ thought balloon
+๐Ÿ’ค zzz
+๐Ÿ‘‹ waving hand
+๐Ÿคš raised back of hand
+๐Ÿ–๏ธ hand with fingers splayed
+โœ‹ raised hand
+๐Ÿ–– vulcan salute
+๐Ÿซฑ rightwards hand
+๐Ÿซฒ leftwards hand
+๐Ÿซณ palm down hand
+๐Ÿซด palm up hand
+๐Ÿ‘Œ OK hand
+๐ŸคŒ pinched fingers
+๐Ÿค pinching hand
+โœŒ๏ธ victory hand
+๐Ÿคž crossed fingers
+๐Ÿซฐ hand with index finger and thumb crossed
+๐ŸคŸ love-you gesture
+๐Ÿค˜ sign of the horns
+๐Ÿค™ call me hand
+๐Ÿ‘ˆ backhand index pointing left
+๐Ÿ‘‰ backhand index pointing right
+๐Ÿ‘† backhand index pointing up
+๐Ÿ–• middle finger
+๐Ÿ‘‡ backhand index pointing down
+โ˜๏ธ index pointing up
+๐Ÿซต index pointing at the viewer
+๐Ÿ‘ thumbs up
+๐Ÿ‘Ž thumbs down
+โœŠ raised fist
+๐Ÿ‘Š oncoming fist
+๐Ÿค› left-facing fist
+๐Ÿคœ right-facing fist
+๐Ÿ‘ clapping hands
+๐Ÿ™Œ raising hands
+๐Ÿซถ heart hands
+๐Ÿ‘ open hands
+๐Ÿคฒ palms up together
+๐Ÿค handshake
+๐Ÿ™ folded hands
+โœ๏ธ writing hand
+๐Ÿ’… nail polish
+๐Ÿคณ selfie
+๐Ÿ’ช flexed biceps
+๐Ÿฆพ mechanical arm
+๐Ÿฆฟ mechanical leg
+๐Ÿฆต leg
+๐Ÿฆถ foot
+๐Ÿ‘‚ ear
+๐Ÿฆป ear with hearing aid
+๐Ÿ‘ƒ nose
+๐Ÿง  brain
+๐Ÿซ€ anatomical heart
+๐Ÿซ lungs
+๐Ÿฆท tooth
+๐Ÿฆด bone
+๐Ÿ‘€ eyes
+๐Ÿ‘๏ธ eye
+๐Ÿ‘… tongue
+๐Ÿ‘„ mouth
+๐Ÿซฆ biting lip
+๐Ÿ‘ถ baby
+๐Ÿง’ child
+๐Ÿ‘ฆ boy
+๐Ÿ‘ง girl
+๐Ÿง‘ person
+๐Ÿ‘ฑ person: blond hair
+๐Ÿ‘จ man
+๐Ÿง” person: beard
+๐Ÿ‘ฉ woman
+๐Ÿง“ older person
+๐Ÿ‘ด old man
+๐Ÿ‘ต old woman
+๐Ÿ™ person frowning
+๐Ÿ™Ž person pouting
+๐Ÿ™… person gesturing NO
+๐Ÿ™† person gesturing OK
+๐Ÿ’ person tipping hand
+๐Ÿ™‹ person raising hand
+๐Ÿง deaf person
+๐Ÿ™‡ person bowing
+๐Ÿคฆ person facepalming
+๐Ÿคท person shrugging
+๐Ÿ‘ฎ police officer
+๐Ÿ•ต๏ธ detective
+๐Ÿ’‚ guard
+๐Ÿฅท ninja
+๐Ÿ‘ท construction worker
+๐Ÿซ… person with crown
+๐Ÿคด prince
+๐Ÿ‘ธ princess
+๐Ÿ‘ณ person wearing turban
+๐Ÿ‘ฒ person with skullcap
+๐Ÿง• woman with headscarf
+๐Ÿคต person in tuxedo
+๐Ÿ‘ฐ person with veil
+๐Ÿคฐ pregnant woman
+๐Ÿซƒ pregnant man
+๐Ÿซ„ pregnant person
+๐Ÿคฑ breast-feeding
+๐Ÿ‘ผ baby angel
+๐ŸŽ… Santa Claus
+๐Ÿคถ Mrs. Claus
+๐Ÿฆธ superhero
+๐Ÿฆน supervillain
+๐Ÿง™ mage
+๐Ÿงš fairy
+๐Ÿง› vampire
+๐Ÿงœ merperson
+๐Ÿง elf
+๐Ÿงž genie
+๐ŸงŸ zombie
+๐ŸงŒ troll
+๐Ÿ’† person getting massage
+๐Ÿ’‡ person getting haircut
+๐Ÿšถ person walking
+๐Ÿง person standing
+๐ŸงŽ person kneeling
+๐Ÿƒ person running
+๐Ÿ’ƒ woman dancing
+๐Ÿ•บ man dancing
+๐Ÿ•ด๏ธ person in suit levitating
+๐Ÿ‘ฏ people with bunny ears
+๐Ÿง– person in steamy room
+๐Ÿง— person climbing
+๐Ÿคบ person fencing
+๐Ÿ‡ horse racing
+โ›ท๏ธ skier
+๐Ÿ‚ snowboarder
+๐ŸŒ๏ธ person golfing
+๐Ÿ„ person surfing
+๐Ÿšฃ person rowing boat
+๐ŸŠ person swimming
+โ›น๏ธ person bouncing ball
+๐Ÿ‹๏ธ person lifting weights
+๐Ÿšด person biking
+๐Ÿšต person mountain biking
+๐Ÿคธ person cartwheeling
+๐Ÿคผ people wrestling
+๐Ÿคฝ person playing water polo
+๐Ÿคพ person playing handball
+๐Ÿคน person juggling
+๐Ÿง˜ person in lotus position
+๐Ÿ›€ person taking bath
+๐Ÿ›Œ person in bed
+๐Ÿ‘ญ women holding hands
+๐Ÿ‘ซ woman and man holding hands
+๐Ÿ‘ฌ men holding hands
+๐Ÿ’ kiss
+๐Ÿ’‘ couple with heart
+๐Ÿ‘ช family
+๐Ÿ—ฃ๏ธ speaking head
+๐Ÿ‘ค bust in silhouette
+๐Ÿ‘ฅ busts in silhouette
+๐Ÿซ‚ people hugging
+๐Ÿ‘ฃ footprints
+๐Ÿต monkey face
+๐Ÿ’ monkey
+๐Ÿฆ gorilla
+๐Ÿฆง orangutan
+๐Ÿถ dog face
+๐Ÿ• dog
+๐Ÿฆฎ guide dog
+๐Ÿฉ poodle
+๐Ÿบ wolf
+๐ŸฆŠ fox
+๐Ÿฆ raccoon
+๐Ÿฑ cat face
+๐Ÿˆ cat
+๐Ÿฆ lion
+๐Ÿฏ tiger face
+๐Ÿ… tiger
+๐Ÿ† leopard
+๐Ÿด horse face
+๐ŸŽ horse
+๐Ÿฆ„ unicorn
+๐Ÿฆ“ zebra
+๐ŸฆŒ deer
+๐Ÿฆฌ bison
+๐Ÿฎ cow face
+๐Ÿ‚ ox
+๐Ÿƒ water buffalo
+๐Ÿ„ cow
+๐Ÿท pig face
+๐Ÿ– pig
+๐Ÿ— boar
+๐Ÿฝ pig nose
+๐Ÿ ram
+๐Ÿ‘ ewe
+๐Ÿ goat
+๐Ÿช camel
+๐Ÿซ two-hump camel
+๐Ÿฆ™ llama
+๐Ÿฆ’ giraffe
+๐Ÿ˜ elephant
+๐Ÿฆฃ mammoth
+๐Ÿฆ rhinoceros
+๐Ÿฆ› hippopotamus
+๐Ÿญ mouse face
+๐Ÿ mouse
+๐Ÿ€ rat
+๐Ÿน hamster
+๐Ÿฐ rabbit face
+๐Ÿ‡ rabbit
+๐Ÿฟ๏ธ chipmunk
+๐Ÿฆซ beaver
+๐Ÿฆ” hedgehog
+๐Ÿฆ‡ bat
+๐Ÿป bear
+๐Ÿจ koala
+๐Ÿผ panda
+๐Ÿฆฅ sloth
+๐Ÿฆฆ otter
+๐Ÿฆจ skunk
+๐Ÿฆ˜ kangaroo
+๐Ÿฆก badger
+๐Ÿพ paw prints
+๐Ÿฆƒ turkey
+๐Ÿ” chicken
+๐Ÿ“ rooster
+๐Ÿฃ hatching chick
+๐Ÿค baby chick
+๐Ÿฅ front-facing baby chick
+๐Ÿฆ bird
+๐Ÿง penguin
+๐Ÿ•Š๏ธ dove
+๐Ÿฆ… eagle
+๐Ÿฆ† duck
+๐Ÿฆข swan
+๐Ÿฆ‰ owl
+๐Ÿฆค dodo
+๐Ÿชถ feather
+๐Ÿฆฉ flamingo
+๐Ÿฆš peacock
+๐Ÿฆœ parrot
+๐Ÿธ frog
+๐ŸŠ crocodile
+๐Ÿข turtle
+๐ŸฆŽ lizard
+๐Ÿ snake
+๐Ÿฒ dragon face
+๐Ÿ‰ dragon
+๐Ÿฆ• sauropod
+๐Ÿฆ– T-Rex
+๐Ÿณ spouting whale
+๐Ÿ‹ whale
+๐Ÿฌ dolphin
+๐Ÿฆญ seal
+๐ŸŸ fish
+๐Ÿ  tropical fish
+๐Ÿก blowfish
+๐Ÿฆˆ shark
+๐Ÿ™ octopus
+๐Ÿš spiral shell
+๐Ÿชธ coral
+๐ŸŒ snail
+๐Ÿฆ‹ butterfly
+๐Ÿ› bug
+๐Ÿœ ant
+๐Ÿ honeybee
+๐Ÿชฒ beetle
+๐Ÿž lady beetle
+๐Ÿฆ— cricket
+๐Ÿชณ cockroach
+๐Ÿ•ท๏ธ spider
+๐Ÿ•ธ๏ธ spider web
+๐Ÿฆ‚ scorpion
+๐ŸฆŸ mosquito
+๐Ÿชฐ fly
+๐Ÿชฑ worm
+๐Ÿฆ  microbe
+๐Ÿ’ bouquet
+๐ŸŒธ cherry blossom
+๐Ÿ’ฎ white flower
+๐Ÿชท lotus
+๐Ÿต๏ธ rosette
+๐ŸŒน rose
+๐Ÿฅ€ wilted flower
+๐ŸŒบ hibiscus
+๐ŸŒป sunflower
+๐ŸŒผ blossom
+๐ŸŒท tulip
+๐ŸŒฑ seedling
+๐Ÿชด potted plant
+๐ŸŒฒ evergreen tree
+๐ŸŒณ deciduous tree
+๐ŸŒด palm tree
+๐ŸŒต cactus
+๐ŸŒพ sheaf of rice
+๐ŸŒฟ herb
+โ˜˜๏ธ shamrock
+๐Ÿ€ four leaf clover
+๐Ÿ maple leaf
+๐Ÿ‚ fallen leaf
+๐Ÿƒ leaf fluttering in wind
+๐Ÿชน empty nest
+๐Ÿชบ nest with eggs
+๐Ÿ‡ grapes
+๐Ÿˆ melon
+๐Ÿ‰ watermelon
+๐ŸŠ tangerine
+๐Ÿ‹ lemon
+๐ŸŒ banana
+๐Ÿ pineapple
+๐Ÿฅญ mango
+๐ŸŽ red apple
+๐Ÿ green apple
+๐Ÿ pear
+๐Ÿ‘ peach
+๐Ÿ’ cherries
+๐Ÿ“ strawberry
+๐Ÿซ blueberries
+๐Ÿฅ kiwi fruit
+๐Ÿ… tomato
+๐Ÿซ’ olive
+๐Ÿฅฅ coconut
+๐Ÿฅ‘ avocado
+๐Ÿ† eggplant
+๐Ÿฅ” potato
+๐Ÿฅ• carrot
+๐ŸŒฝ ear of corn
+๐ŸŒถ๏ธ hot pepper
+๐Ÿซ‘ bell pepper
+๐Ÿฅ’ cucumber
+๐Ÿฅฌ leafy green
+๐Ÿฅฆ broccoli
+๐Ÿง„ garlic
+๐Ÿง… onion
+๐Ÿ„ mushroom
+๐Ÿฅœ peanuts
+๐Ÿซ˜ beans
+๐ŸŒฐ chestnut
+๐Ÿž bread
+๐Ÿฅ croissant
+๐Ÿฅ– baguette bread
+๐Ÿซ“ flatbread
+๐Ÿฅจ pretzel
+๐Ÿฅฏ bagel
+๐Ÿฅž pancakes
+๐Ÿง‡ waffle
+๐Ÿง€ cheese wedge
+๐Ÿ– meat on bone
+๐Ÿ— poultry leg
+๐Ÿฅฉ cut of meat
+๐Ÿฅ“ bacon
+๐Ÿ” hamburger
+๐ŸŸ french fries
+๐Ÿ• pizza
+๐ŸŒญ hot dog
+๐Ÿฅช sandwich
+๐ŸŒฎ taco
+๐ŸŒฏ burrito
+๐Ÿซ” tamale
+๐Ÿฅ™ stuffed flatbread
+๐Ÿง† falafel
+๐Ÿฅš egg
+๐Ÿณ cooking
+๐Ÿฅ˜ shallow pan of food
+๐Ÿฒ pot of food
+๐Ÿซ• fondue
+๐Ÿฅฃ bowl with spoon
+๐Ÿฅ— green salad
+๐Ÿฟ popcorn
+๐Ÿงˆ butter
+๐Ÿง‚ salt
+๐Ÿฅซ canned food
+๐Ÿฑ bento box
+๐Ÿ˜ rice cracker
+๐Ÿ™ rice ball
+๐Ÿš cooked rice
+๐Ÿ› curry rice
+๐Ÿœ steaming bowl
+๐Ÿ spaghetti
+๐Ÿ  roasted sweet potato
+๐Ÿข oden
+๐Ÿฃ sushi
+๐Ÿค fried shrimp
+๐Ÿฅ fish cake with swirl
+๐Ÿฅฎ moon cake
+๐Ÿก dango
+๐ŸฅŸ dumpling
+๐Ÿฅ  fortune cookie
+๐Ÿฅก takeout box
+๐Ÿฆ€ crab
+๐Ÿฆž lobster
+๐Ÿฆ shrimp
+๐Ÿฆ‘ squid
+๐Ÿฆช oyster
+๐Ÿฆ soft ice cream
+๐Ÿง shaved ice
+๐Ÿจ ice cream
+๐Ÿฉ doughnut
+๐Ÿช cookie
+๐ŸŽ‚ birthday cake
+๐Ÿฐ shortcake
+๐Ÿง cupcake
+๐Ÿฅง pie
+๐Ÿซ chocolate bar
+๐Ÿฌ candy
+๐Ÿญ lollipop
+๐Ÿฎ custard
+๐Ÿฏ honey pot
+๐Ÿผ baby bottle
+๐Ÿฅ› glass of milk
+โ˜• hot beverage
+๐Ÿซ– teapot
+๐Ÿต teacup without handle
+๐Ÿถ sake
+๐Ÿพ bottle with popping cork
+๐Ÿท wine glass
+๐Ÿธ cocktail glass
+๐Ÿน tropical drink
+๐Ÿบ beer mug
+๐Ÿป clinking beer mugs
+๐Ÿฅ‚ clinking glasses
+๐Ÿฅƒ tumbler glass
+๐Ÿซ— pouring liquid
+๐Ÿฅค cup with straw
+๐Ÿง‹ bubble tea
+๐Ÿงƒ beverage box
+๐Ÿง‰ mate
+๐ŸงŠ ice
+๐Ÿฅข chopsticks
+๐Ÿฝ๏ธ fork and knife with plate
+๐Ÿด fork and knife
+๐Ÿฅ„ spoon
+๐Ÿ”ช kitchen knife
+๐Ÿซ™ jar
+๐Ÿบ amphora
+๐ŸŒ globe showing Europe-Africa
+๐ŸŒŽ globe showing Americas
+๐ŸŒ globe showing Asia-Australia
+๐ŸŒ globe with meridians
+๐Ÿ—บ๏ธ world map
+๐Ÿ—พ map of Japan
+๐Ÿงญ compass
+๐Ÿ”๏ธ snow-capped mountain
+โ›ฐ๏ธ mountain
+๐ŸŒ‹ volcano
+๐Ÿ—ป mount fuji
+๐Ÿ•๏ธ camping
+๐Ÿ–๏ธ beach with umbrella
+๐Ÿœ๏ธ desert
+๐Ÿ๏ธ desert island
+๐Ÿž๏ธ national park
+๐ŸŸ๏ธ stadium
+๐Ÿ›๏ธ classical building
+๐Ÿ—๏ธ building construction
+๐Ÿงฑ brick
+๐Ÿชจ rock
+๐Ÿชต wood
+๐Ÿ›– hut
+๐Ÿ˜๏ธ houses
+๐Ÿš๏ธ derelict house
+๐Ÿ  house
+๐Ÿก house with garden
+๐Ÿข office building
+๐Ÿฃ Japanese post office
+๐Ÿค post office
+๐Ÿฅ hospital
+๐Ÿฆ bank
+๐Ÿจ hotel
+๐Ÿฉ love hotel
+๐Ÿช convenience store
+๐Ÿซ school
+๐Ÿฌ department store
+๐Ÿญ factory
+๐Ÿฏ Japanese castle
+๐Ÿฐ castle
+๐Ÿ’’ wedding
+๐Ÿ—ผ Tokyo tower
+๐Ÿ—ฝ Statue of Liberty
+โ›ช church
+๐Ÿ•Œ mosque
+๐Ÿ›• hindu temple
+๐Ÿ• synagogue
+โ›ฉ๏ธ shinto shrine
+๐Ÿ•‹ kaaba
+โ›ฒ fountain
+โ›บ tent
+๐ŸŒ foggy
+๐ŸŒƒ night with stars
+๐Ÿ™๏ธ cityscape
+๐ŸŒ„ sunrise over mountains
+๐ŸŒ… sunrise
+๐ŸŒ† cityscape at dusk
+๐ŸŒ‡ sunset
+๐ŸŒ‰ bridge at night
+โ™จ๏ธ hot springs
+๐ŸŽ  carousel horse
+๐Ÿ› playground slide
+๐ŸŽก ferris wheel
+๐ŸŽข roller coaster
+๐Ÿ’ˆ barber pole
+๐ŸŽช circus tent
+๐Ÿš‚ locomotive
+๐Ÿšƒ railway car
+๐Ÿš„ high-speed train
+๐Ÿš… bullet train
+๐Ÿš† train
+๐Ÿš‡ metro
+๐Ÿšˆ light rail
+๐Ÿš‰ station
+๐ŸšŠ tram
+๐Ÿš monorail
+๐Ÿšž mountain railway
+๐Ÿš‹ tram car
+๐ŸšŒ bus
+๐Ÿš oncoming bus
+๐ŸšŽ trolleybus
+๐Ÿš minibus
+๐Ÿš‘ ambulance
+๐Ÿš’ fire engine
+๐Ÿš“ police car
+๐Ÿš” oncoming police car
+๐Ÿš• taxi
+๐Ÿš– oncoming taxi
+๐Ÿš— automobile
+๐Ÿš˜ oncoming automobile
+๐Ÿš™ sport utility vehicle
+๐Ÿ›ป pickup truck
+๐Ÿšš delivery truck
+๐Ÿš› articulated lorry
+๐Ÿšœ tractor
+๐ŸŽ๏ธ racing car
+๐Ÿ๏ธ motorcycle
+๐Ÿ›ต motor scooter
+๐Ÿฆฝ manual wheelchair
+๐Ÿฆผ motorized wheelchair
+๐Ÿ›บ auto rickshaw
+๐Ÿšฒ bicycle
+๐Ÿ›ด kick scooter
+๐Ÿ›น skateboard
+๐Ÿ›ผ roller skate
+๐Ÿš bus stop
+๐Ÿ›ฃ๏ธ motorway
+๐Ÿ›ค๏ธ railway track
+๐Ÿ›ข๏ธ oil drum
+โ›ฝ fuel pump
+๐Ÿ›ž wheel
+๐Ÿšจ police car light
+๐Ÿšฅ horizontal traffic light
+๐Ÿšฆ vertical traffic light
+๐Ÿ›‘ stop sign
+๐Ÿšง construction
+โš“ anchor
+๐Ÿ›Ÿ ring buoy
+โ›ต sailboat
+๐Ÿ›ถ canoe
+๐Ÿšค speedboat
+๐Ÿ›ณ๏ธ passenger ship
+โ›ด๏ธ ferry
+๐Ÿ›ฅ๏ธ motor boat
+๐Ÿšข ship
+โœˆ๏ธ airplane
+๐Ÿ›ฉ๏ธ small airplane
+๐Ÿ›ซ airplane departure
+๐Ÿ›ฌ airplane arrival
+๐Ÿช‚ parachute
+๐Ÿ’บ seat
+๐Ÿš helicopter
+๐ŸšŸ suspension railway
+๐Ÿš  mountain cableway
+๐Ÿšก aerial tramway
+๐Ÿ›ฐ๏ธ satellite
+๐Ÿš€ rocket
+๐Ÿ›ธ flying saucer
+๐Ÿ›Ž๏ธ bellhop bell
+๐Ÿงณ luggage
+โŒ› hourglass done
+โณ hourglass not done
+โŒš watch
+โฐ alarm clock
+โฑ๏ธ stopwatch
+โฒ๏ธ timer clock
+๐Ÿ•ฐ๏ธ mantelpiece clock
+๐Ÿ•› twelve oโ€™clock
+๐Ÿ•ง twelve-thirty
+๐Ÿ• one oโ€™clock
+๐Ÿ•œ one-thirty
+๐Ÿ•‘ two oโ€™clock
+๐Ÿ• two-thirty
+๐Ÿ•’ three oโ€™clock
+๐Ÿ•ž three-thirty
+๐Ÿ•“ four oโ€™clock
+๐Ÿ•Ÿ four-thirty
+๐Ÿ•” five oโ€™clock
+๐Ÿ•  five-thirty
+๐Ÿ•• six oโ€™clock
+๐Ÿ•ก six-thirty
+๐Ÿ•– seven oโ€™clock
+๐Ÿ•ข seven-thirty
+๐Ÿ•— eight oโ€™clock
+๐Ÿ•ฃ eight-thirty
+๐Ÿ•˜ nine oโ€™clock
+๐Ÿ•ค nine-thirty
+๐Ÿ•™ ten oโ€™clock
+๐Ÿ•ฅ ten-thirty
+๐Ÿ•š eleven oโ€™clock
+๐Ÿ•ฆ eleven-thirty
+๐ŸŒ‘ new moon
+๐ŸŒ’ waxing crescent moon
+๐ŸŒ“ first quarter moon
+๐ŸŒ” waxing gibbous moon
+๐ŸŒ• full moon
+๐ŸŒ– waning gibbous moon
+๐ŸŒ— last quarter moon
+๐ŸŒ˜ waning crescent moon
+๐ŸŒ™ crescent moon
+๐ŸŒš new moon face
+๐ŸŒ› first quarter moon face
+๐ŸŒœ last quarter moon face
+๐ŸŒก๏ธ thermometer
+โ˜€๏ธ sun
+๐ŸŒ full moon face
+๐ŸŒž sun with face
+๐Ÿช ringed planet
+โญ star
+๐ŸŒŸ glowing star
+๐ŸŒ  shooting star
+๐ŸŒŒ milky way
+โ˜๏ธ cloud
+โ›… sun behind cloud
+โ›ˆ๏ธ cloud with lightning and rain
+๐ŸŒค๏ธ sun behind small cloud
+๐ŸŒฅ๏ธ sun behind large cloud
+๐ŸŒฆ๏ธ sun behind rain cloud
+๐ŸŒง๏ธ cloud with rain
+๐ŸŒจ๏ธ cloud with snow
+๐ŸŒฉ๏ธ cloud with lightning
+๐ŸŒช๏ธ tornado
+๐ŸŒซ๏ธ fog
+๐ŸŒฌ๏ธ wind face
+๐ŸŒ€ cyclone
+๐ŸŒˆ rainbow
+๐ŸŒ‚ closed umbrella
+โ˜‚๏ธ umbrella
+โ˜” umbrella with rain drops
+โ›ฑ๏ธ umbrella on ground
+โšก high voltage
+โ„๏ธ snowflake
+โ˜ƒ๏ธ snowman
+โ›„ snowman without snow
+โ˜„๏ธ comet
+๐Ÿ”ฅ fire
+๐Ÿ’ง droplet
+๐ŸŒŠ water wave
+๐ŸŽƒ jack-o-lantern
+๐ŸŽ„ Christmas tree
+๐ŸŽ† fireworks
+๐ŸŽ‡ sparkler
+๐Ÿงจ firecracker
+โœจ sparkles
+๐ŸŽˆ balloon
+๐ŸŽ‰ party popper
+๐ŸŽŠ confetti ball
+๐ŸŽ‹ tanabata tree
+๐ŸŽ pine decoration
+๐ŸŽŽ Japanese dolls
+๐ŸŽ carp streamer
+๐ŸŽ wind chime
+๐ŸŽ‘ moon viewing ceremony
+๐Ÿงง red envelope
+๐ŸŽ€ ribbon
+๐ŸŽ wrapped gift
+๐ŸŽ—๏ธ reminder ribbon
+๐ŸŽŸ๏ธ admission tickets
+๐ŸŽซ ticket
+๐ŸŽ–๏ธ military medal
+๐Ÿ† trophy
+๐Ÿ… sports medal
+๐Ÿฅ‡ 1st place medal
+๐Ÿฅˆ 2nd place medal
+๐Ÿฅ‰ 3rd place medal
+โšฝ soccer ball
+โšพ baseball
+๐ŸฅŽ softball
+๐Ÿ€ basketball
+๐Ÿ volleyball
+๐Ÿˆ american football
+๐Ÿ‰ rugby football
+๐ŸŽพ tennis
+๐Ÿฅ flying disc
+๐ŸŽณ bowling
+๐Ÿ cricket game
+๐Ÿ‘ field hockey
+๐Ÿ’ ice hockey
+๐Ÿฅ lacrosse
+๐Ÿ“ ping pong
+๐Ÿธ badminton
+๐ŸฅŠ boxing glove
+๐Ÿฅ‹ martial arts uniform
+๐Ÿฅ… goal net
+โ›ณ flag in hole
+โ›ธ๏ธ ice skate
+๐ŸŽฃ fishing pole
+๐Ÿคฟ diving mask
+๐ŸŽฝ running shirt
+๐ŸŽฟ skis
+๐Ÿ›ท sled
+๐ŸฅŒ curling stone
+๐ŸŽฏ bullseye
+๐Ÿช€ yo-yo
+๐Ÿช kite
+๐ŸŽฑ pool 8 ball
+๐Ÿ”ฎ crystal ball
+๐Ÿช„ magic wand
+๐Ÿงฟ nazar amulet
+๐Ÿชฌ hamsa
+๐ŸŽฎ video game
+๐Ÿ•น๏ธ joystick
+๐ŸŽฐ slot machine
+๐ŸŽฒ game die
+๐Ÿงฉ puzzle piece
+๐Ÿงธ teddy bear
+๐Ÿช… piรฑata
+๐Ÿชฉ mirror ball
+๐Ÿช† nesting dolls
+โ™ ๏ธ spade suit
+โ™ฅ๏ธ heart suit
+โ™ฆ๏ธ diamond suit
+โ™ฃ๏ธ club suit
+โ™Ÿ๏ธ chess pawn
+๐Ÿƒ joker
+๐Ÿ€„ mahjong red dragon
+๐ŸŽด flower playing cards
+๐ŸŽญ performing arts
+๐Ÿ–ผ๏ธ framed picture
+๐ŸŽจ artist palette
+๐Ÿงต thread
+๐Ÿชก sewing needle
+๐Ÿงถ yarn
+๐Ÿชข knot
+๐Ÿ‘“ glasses
+๐Ÿ•ถ๏ธ sunglasses
+๐Ÿฅฝ goggles
+๐Ÿฅผ lab coat
+๐Ÿฆบ safety vest
+๐Ÿ‘” necktie
+๐Ÿ‘• t-shirt
+๐Ÿ‘– jeans
+๐Ÿงฃ scarf
+๐Ÿงค gloves
+๐Ÿงฅ coat
+๐Ÿงฆ socks
+๐Ÿ‘— dress
+๐Ÿ‘˜ kimono
+๐Ÿฅป sari
+๐Ÿฉฑ one-piece swimsuit
+๐Ÿฉฒ briefs
+๐Ÿฉณ shorts
+๐Ÿ‘™ bikini
+๐Ÿ‘š womanโ€™s clothes
+๐Ÿ‘› purse
+๐Ÿ‘œ handbag
+๐Ÿ‘ clutch bag
+๐Ÿ›๏ธ shopping bags
+๐ŸŽ’ backpack
+๐Ÿฉด thong sandal
+๐Ÿ‘ž manโ€™s shoe
+๐Ÿ‘Ÿ running shoe
+๐Ÿฅพ hiking boot
+๐Ÿฅฟ flat shoe
+๐Ÿ‘  high-heeled shoe
+๐Ÿ‘ก womanโ€™s sandal
+๐Ÿฉฐ ballet shoes
+๐Ÿ‘ข womanโ€™s boot
+๐Ÿ‘‘ crown
+๐Ÿ‘’ womanโ€™s hat
+๐ŸŽฉ top hat
+๐ŸŽ“ graduation cap
+๐Ÿงข billed cap
+๐Ÿช– military helmet
+โ›‘๏ธ rescue workerโ€™s helmet
+๐Ÿ“ฟ prayer beads
+๐Ÿ’„ lipstick
+๐Ÿ’ ring
+๐Ÿ’Ž gem stone
+๐Ÿ”‡ muted speaker
+๐Ÿ”ˆ speaker low volume
+๐Ÿ”‰ speaker medium volume
+๐Ÿ”Š speaker high volume
+๐Ÿ“ข loudspeaker
+๐Ÿ“ฃ megaphone
+๐Ÿ“ฏ postal horn
+๐Ÿ”” bell
+๐Ÿ”• bell with slash
+๐ŸŽผ musical score
+๐ŸŽต musical note
+๐ŸŽถ musical notes
+๐ŸŽ™๏ธ studio microphone
+๐ŸŽš๏ธ level slider
+๐ŸŽ›๏ธ control knobs
+๐ŸŽค microphone
+๐ŸŽง headphone
+๐Ÿ“ป radio
+๐ŸŽท saxophone
+๐Ÿช— accordion
+๐ŸŽธ guitar
+๐ŸŽน musical keyboard
+๐ŸŽบ trumpet
+๐ŸŽป violin
+๐Ÿช• banjo
+๐Ÿฅ drum
+๐Ÿช˜ long drum
+๐Ÿ“ฑ mobile phone
+๐Ÿ“ฒ mobile phone with arrow
+โ˜Ž๏ธ telephone
+๐Ÿ“ž telephone receiver
+๐Ÿ“Ÿ pager
+๐Ÿ“  fax machine
+๐Ÿ”‹ battery
+๐Ÿชซ low battery
+๐Ÿ”Œ electric plug
+๐Ÿ’ป laptop
+๐Ÿ–ฅ๏ธ desktop computer
+๐Ÿ–จ๏ธ printer
+โŒจ๏ธ keyboard
+๐Ÿ–ฑ๏ธ computer mouse
+๐Ÿ–ฒ๏ธ trackball
+๐Ÿ’ฝ computer disk
+๐Ÿ’พ floppy disk
+๐Ÿ’ฟ optical disk
+๐Ÿ“€ dvd
+๐Ÿงฎ abacus
+๐ŸŽฅ movie camera
+๐ŸŽž๏ธ film frames
+๐Ÿ“ฝ๏ธ film projector
+๐ŸŽฌ clapper board
+๐Ÿ“บ television
+๐Ÿ“ท camera
+๐Ÿ“ธ camera with flash
+๐Ÿ“น video camera
+๐Ÿ“ผ videocassette
+๐Ÿ” magnifying glass tilted left
+๐Ÿ”Ž magnifying glass tilted right
+๐Ÿ•ฏ๏ธ candle
+๐Ÿ’ก light bulb
+๐Ÿ”ฆ flashlight
+๐Ÿฎ red paper lantern
+๐Ÿช” diya lamp
+๐Ÿ“” notebook with decorative cover
+๐Ÿ“• closed book
+๐Ÿ“– open book
+๐Ÿ“— green book
+๐Ÿ“˜ blue book
+๐Ÿ“™ orange book
+๐Ÿ“š books
+๐Ÿ““ notebook
+๐Ÿ“’ ledger
+๐Ÿ“ƒ page with curl
+๐Ÿ“œ scroll
+๐Ÿ“„ page facing up
+๐Ÿ“ฐ newspaper
+๐Ÿ—ž๏ธ rolled-up newspaper
+๐Ÿ“‘ bookmark tabs
+๐Ÿ”– bookmark
+๐Ÿท๏ธ label
+๐Ÿ’ฐ money bag
+๐Ÿช™ coin
+๐Ÿ’ด yen banknote
+๐Ÿ’ต dollar banknote
+๐Ÿ’ถ euro banknote
+๐Ÿ’ท pound banknote
+๐Ÿ’ธ money with wings
+๐Ÿ’ณ credit card
+๐Ÿงพ receipt
+๐Ÿ’น chart increasing with yen
+โœ‰๏ธ envelope
+๐Ÿ“ง e-mail
+๐Ÿ“จ incoming envelope
+๐Ÿ“ฉ envelope with arrow
+๐Ÿ“ค outbox tray
+๐Ÿ“ฅ inbox tray
+๐Ÿ“ฆ package
+๐Ÿ“ซ closed mailbox with raised flag
+๐Ÿ“ช closed mailbox with lowered flag
+๐Ÿ“ฌ open mailbox with raised flag
+๐Ÿ“ญ open mailbox with lowered flag
+๐Ÿ“ฎ postbox
+๐Ÿ—ณ๏ธ ballot box with ballot
+โœ๏ธ pencil
+โœ’๏ธ black nib
+๐Ÿ–‹๏ธ fountain pen
+๐Ÿ–Š๏ธ pen
+๐Ÿ–Œ๏ธ paintbrush
+๐Ÿ–๏ธ crayon
+๐Ÿ“ memo
+๐Ÿ’ผ briefcase
+๐Ÿ“ file folder
+๐Ÿ“‚ open file folder
+๐Ÿ—‚๏ธ card index dividers
+๐Ÿ“… calendar
+๐Ÿ“† tear-off calendar
+๐Ÿ—’๏ธ spiral notepad
+๐Ÿ—“๏ธ spiral calendar
+๐Ÿ“‡ card index
+๐Ÿ“ˆ chart increasing
+๐Ÿ“‰ chart decreasing
+๐Ÿ“Š bar chart
+๐Ÿ“‹ clipboard
+๐Ÿ“Œ pushpin
+๐Ÿ“ round pushpin
+๐Ÿ“Ž paperclip
+๐Ÿ–‡๏ธ linked paperclips
+๐Ÿ“ straight ruler
+๐Ÿ“ triangular ruler
+โœ‚๏ธ scissors
+๐Ÿ—ƒ๏ธ card file box
+๐Ÿ—„๏ธ file cabinet
+๐Ÿ—‘๏ธ wastebasket
+๐Ÿ”’ locked
+๐Ÿ”“ unlocked
+๐Ÿ” locked with pen
+๐Ÿ” locked with key
+๐Ÿ”‘ key
+๐Ÿ—๏ธ old key
+๐Ÿ”จ hammer
+๐Ÿช“ axe
+โ›๏ธ pick
+โš’๏ธ hammer and pick
+๐Ÿ› ๏ธ hammer and wrench
+๐Ÿ—ก๏ธ dagger
+โš”๏ธ crossed swords
+๐Ÿ”ซ water pistol
+๐Ÿชƒ boomerang
+๐Ÿน bow and arrow
+๐Ÿ›ก๏ธ shield
+๐Ÿชš carpentry saw
+๐Ÿ”ง wrench
+๐Ÿช› screwdriver
+๐Ÿ”ฉ nut and bolt
+โš™๏ธ gear
+๐Ÿ—œ๏ธ clamp
+โš–๏ธ balance scale
+๐Ÿฆฏ white cane
+๐Ÿ”— link
+โ›“๏ธ chains
+๐Ÿช hook
+๐Ÿงฐ toolbox
+๐Ÿงฒ magnet
+๐Ÿชœ ladder
+โš—๏ธ alembic
+๐Ÿงช test tube
+๐Ÿงซ petri dish
+๐Ÿงฌ dna
+๐Ÿ”ฌ microscope
+๐Ÿ”ญ telescope
+๐Ÿ“ก satellite antenna
+๐Ÿ’‰ syringe
+๐Ÿฉธ drop of blood
+๐Ÿ’Š pill
+๐Ÿฉน adhesive bandage
+๐Ÿฉผ crutch
+๐Ÿฉบ stethoscope
+๐Ÿฉป x-ray
+๐Ÿšช door
+๐Ÿ›— elevator
+๐Ÿชž mirror
+๐ŸชŸ window
+๐Ÿ›๏ธ bed
+๐Ÿ›‹๏ธ couch and lamp
+๐Ÿช‘ chair
+๐Ÿšฝ toilet
+๐Ÿช  plunger
+๐Ÿšฟ shower
+๐Ÿ› bathtub
+๐Ÿชค mouse trap
+๐Ÿช’ razor
+๐Ÿงด lotion bottle
+๐Ÿงท safety pin
+๐Ÿงน broom
+๐Ÿงบ basket
+๐Ÿงป roll of paper
+๐Ÿชฃ bucket
+๐Ÿงผ soap
+๐Ÿซง bubbles
+๐Ÿชฅ toothbrush
+๐Ÿงฝ sponge
+๐Ÿงฏ fire extinguisher
+๐Ÿ›’ shopping cart
+๐Ÿšฌ cigarette
+โšฐ๏ธ coffin
+๐Ÿชฆ headstone
+โšฑ๏ธ funeral urn
+๐Ÿ—ฟ moai
+๐Ÿชง placard
+๐Ÿชช identification card
+๐Ÿง ATM sign
+๐Ÿšฎ litter in bin sign
+๐Ÿšฐ potable water
+โ™ฟ wheelchair symbol
+๐Ÿšน menโ€™s room
+๐Ÿšบ womenโ€™s room
+๐Ÿšป restroom
+๐Ÿšผ baby symbol
+๐Ÿšพ water closet
+๐Ÿ›‚ passport control
+๐Ÿ›ƒ customs
+๐Ÿ›„ baggage claim
+๐Ÿ›… left luggage
+โš ๏ธ warning
+๐Ÿšธ children crossing
+โ›” no entry
+๐Ÿšซ prohibited
+๐Ÿšณ no bicycles
+๐Ÿšญ no smoking
+๐Ÿšฏ no littering
+๐Ÿšฑ non-potable water
+๐Ÿšท no pedestrians
+๐Ÿ“ต no mobile phones
+๐Ÿ”ž no one under eighteen
+โ˜ข๏ธ radioactive
+โ˜ฃ๏ธ biohazard
+โฌ†๏ธ up arrow
+โ†—๏ธ up-right arrow
+โžก๏ธ right arrow
+โ†˜๏ธ down-right arrow
+โฌ‡๏ธ down arrow
+โ†™๏ธ down-left arrow
+โฌ…๏ธ left arrow
+โ†–๏ธ up-left arrow
+โ†•๏ธ up-down arrow
+โ†”๏ธ left-right arrow
+โ†ฉ๏ธ right arrow curving left
+โ†ช๏ธ left arrow curving right
+โคด๏ธ right arrow curving up
+โคต๏ธ right arrow curving down
+๐Ÿ”ƒ clockwise vertical arrows
+๐Ÿ”„ counterclockwise arrows button
+๐Ÿ”™ BACK arrow
+๐Ÿ”š END arrow
+๐Ÿ”› ON! arrow
+๐Ÿ”œ SOON arrow
+๐Ÿ” TOP arrow
+๐Ÿ› place of worship
+โš›๏ธ atom symbol
+๐Ÿ•‰๏ธ om
+โœก๏ธ star of David
+โ˜ธ๏ธ wheel of dharma
+โ˜ฏ๏ธ yin yang
+โœ๏ธ latin cross
+โ˜ฆ๏ธ orthodox cross
+โ˜ช๏ธ star and crescent
+โ˜ฎ๏ธ peace symbol
+๐Ÿ•Ž menorah
+๐Ÿ”ฏ dotted six-pointed star
+โ™ˆ Aries
+โ™‰ Taurus
+โ™Š Gemini
+โ™‹ Cancer
+โ™Œ Leo
+โ™ Virgo
+โ™Ž Libra
+โ™ Scorpio
+โ™ Sagittarius
+โ™‘ Capricorn
+โ™’ Aquarius
+โ™“ Pisces
+โ›Ž Ophiuchus
+๐Ÿ”€ shuffle tracks button
+๐Ÿ” repeat button
+๐Ÿ”‚ repeat single button
+โ–ถ๏ธ play button
+โฉ fast-forward button
+โญ๏ธ next track button
+โฏ๏ธ play or pause button
+โ—€๏ธ reverse button
+โช fast reverse button
+โฎ๏ธ last track button
+๐Ÿ”ผ upwards button
+โซ fast up button
+๐Ÿ”ฝ downwards button
+โฌ fast down button
+โธ๏ธ pause button
+โน๏ธ stop button
+โบ๏ธ record button
+โ๏ธ eject button
+๐ŸŽฆ cinema
+๐Ÿ”… dim button
+๐Ÿ”† bright button
+๐Ÿ“ถ antenna bars
+๐Ÿ“ณ vibration mode
+๐Ÿ“ด mobile phone off
+โ™€๏ธ female sign
+โ™‚๏ธ male sign
+โšง๏ธ transgender symbol
+โœ–๏ธ multiply
+โž• plus
+โž– minus
+โž— divide
+๐ŸŸฐ heavy equals sign
+โ™พ๏ธ infinity
+โ€ผ๏ธ double exclamation mark
+โ‰๏ธ exclamation question mark
+โ“ red question mark
+โ” white question mark
+โ• white exclamation mark
+โ— red exclamation mark
+ใ€ฐ๏ธ wavy dash
+๐Ÿ’ฑ currency exchange
+๐Ÿ’ฒ heavy dollar sign
+โš•๏ธ medical symbol
+โ™ป๏ธ recycling symbol
+โšœ๏ธ fleur-de-lis
+๐Ÿ”ฑ trident emblem
+๐Ÿ“› name badge
+๐Ÿ”ฐ Japanese symbol for beginner
+โญ• hollow red circle
+โœ… check mark button
+โ˜‘๏ธ check box with check
+โœ”๏ธ check mark
+โŒ cross mark
+โŽ cross mark button
+โžฐ curly loop
+โžฟ double curly loop
+ใ€ฝ๏ธ part alternation mark
+โœณ๏ธ eight-spoked asterisk
+โœด๏ธ eight-pointed star
+โ‡๏ธ sparkle
+ยฉ๏ธ copyright
+ยฎ๏ธ registered
+โ„ข๏ธ trade mark
+#๏ธโƒฃ keycap: #
+*๏ธโƒฃ keycap: *
+0๏ธโƒฃ keycap: 0
+1๏ธโƒฃ keycap: 1
+2๏ธโƒฃ keycap: 2
+3๏ธโƒฃ keycap: 3
+4๏ธโƒฃ keycap: 4
+5๏ธโƒฃ keycap: 5
+6๏ธโƒฃ keycap: 6
+7๏ธโƒฃ keycap: 7
+8๏ธโƒฃ keycap: 8
+9๏ธโƒฃ keycap: 9
+๐Ÿ”Ÿ keycap: 10
+๐Ÿ”  input latin uppercase
+๐Ÿ”ก input latin lowercase
+๐Ÿ”ข input numbers
+๐Ÿ”ฃ input symbols
+๐Ÿ”ค input latin letters
+๐Ÿ…ฐ๏ธ A button (blood type)
+๐Ÿ†Ž AB button (blood type)
+๐Ÿ…ฑ๏ธ B button (blood type)
+๐Ÿ†‘ CL button
+๐Ÿ†’ COOL button
+๐Ÿ†“ FREE button
+โ„น๏ธ information
+๐Ÿ†” ID button
+โ“‚๏ธ circled M
+๐Ÿ†• NEW button
+๐Ÿ†– NG button
+๐Ÿ…พ๏ธ O button (blood type)
+๐Ÿ†— OK button
+๐Ÿ…ฟ๏ธ P button
+๐Ÿ†˜ SOS button
+๐Ÿ†™ UP! button
+๐Ÿ†š VS button
+๐Ÿˆ Japanese โ€œhereโ€ button
+๐Ÿˆ‚๏ธ Japanese โ€œservice chargeโ€ button
+๐Ÿˆท๏ธ Japanese โ€œmonthly amountโ€ button
+๐Ÿˆถ Japanese โ€œnot free of chargeโ€ button
+๐Ÿˆฏ Japanese โ€œreservedโ€ button
+๐Ÿ‰ Japanese โ€œbargainโ€ button
+๐Ÿˆน Japanese โ€œdiscountโ€ button
+๐Ÿˆš Japanese โ€œfree of chargeโ€ button
+๐Ÿˆฒ Japanese โ€œprohibitedโ€ button
+๐Ÿ‰‘ Japanese โ€œacceptableโ€ button
+๐Ÿˆธ Japanese โ€œapplicationโ€ button
+๐Ÿˆด Japanese โ€œpassing gradeโ€ button
+๐Ÿˆณ Japanese โ€œvacancyโ€ button
+ใŠ—๏ธ Japanese โ€œcongratulationsโ€ button
+ใŠ™๏ธ Japanese โ€œsecretโ€ button
+๐Ÿˆบ Japanese โ€œopen for businessโ€ button
+๐Ÿˆต Japanese โ€œno vacancyโ€ button
+๐Ÿ”ด red circle
+๐ŸŸ  orange circle
+๐ŸŸก yellow circle
+๐ŸŸข green circle
+๐Ÿ”ต blue circle
+๐ŸŸฃ purple circle
+๐ŸŸค brown circle
+โšซ black circle
+โšช white circle
+๐ŸŸฅ red square
+๐ŸŸง orange square
+๐ŸŸจ yellow square
+๐ŸŸฉ green square
+๐ŸŸฆ blue square
+๐ŸŸช purple square
+๐ŸŸซ brown square
+โฌ› black large square
+โฌœ white large square
+โ—ผ๏ธ black medium square
+โ—ป๏ธ white medium square
+โ—พ black medium-small square
+โ—ฝ white medium-small square
+โ–ช๏ธ black small square
+โ–ซ๏ธ white small square
+๐Ÿ”ถ large orange diamond
+๐Ÿ”ท large blue diamond
+๐Ÿ”ธ small orange diamond
+๐Ÿ”น small blue diamond
+๐Ÿ”บ red triangle pointed up
+๐Ÿ”ป red triangle pointed down
+๐Ÿ’  diamond with a dot
+๐Ÿ”˜ radio button
+๐Ÿ”ณ white square button
+๐Ÿ”ฒ black square button
+๐Ÿ chequered flag
+๐Ÿšฉ triangular flag
+๐ŸŽŒ crossed flags
+๐Ÿด black flag
+๐Ÿณ๏ธ white flag
+๐Ÿ‡ฆ๐Ÿ‡จ flag: Ascension Island
+๐Ÿ‡ฆ๐Ÿ‡ฉ flag: Andorra
+๐Ÿ‡ฆ๐Ÿ‡ช flag: United Arab Emirates
+๐Ÿ‡ฆ๐Ÿ‡ซ flag: Afghanistan
+๐Ÿ‡ฆ๐Ÿ‡ฌ flag: Antigua & Barbuda
+๐Ÿ‡ฆ๐Ÿ‡ฎ flag: Anguilla
+๐Ÿ‡ฆ๐Ÿ‡ฑ flag: Albania
+๐Ÿ‡ฆ๐Ÿ‡ฒ flag: Armenia
+๐Ÿ‡ฆ๐Ÿ‡ด flag: Angola
+๐Ÿ‡ฆ๐Ÿ‡ถ flag: Antarctica
+๐Ÿ‡ฆ๐Ÿ‡ท flag: Argentina
+๐Ÿ‡ฆ๐Ÿ‡ธ flag: American Samoa
+๐Ÿ‡ฆ๐Ÿ‡น flag: Austria
+๐Ÿ‡ฆ๐Ÿ‡บ flag: Australia
+๐Ÿ‡ฆ๐Ÿ‡ผ flag: Aruba
+๐Ÿ‡ฆ๐Ÿ‡ฝ flag: ร…land Islands
+๐Ÿ‡ฆ๐Ÿ‡ฟ flag: Azerbaijan
+๐Ÿ‡ง๐Ÿ‡ฆ flag: Bosnia & Herzegovina
+๐Ÿ‡ง๐Ÿ‡ง flag: Barbados
+๐Ÿ‡ง๐Ÿ‡ฉ flag: Bangladesh
+๐Ÿ‡ง๐Ÿ‡ช flag: Belgium
+๐Ÿ‡ง๐Ÿ‡ซ flag: Burkina Faso
+๐Ÿ‡ง๐Ÿ‡ฌ flag: Bulgaria
+๐Ÿ‡ง๐Ÿ‡ญ flag: Bahrain
+๐Ÿ‡ง๐Ÿ‡ฎ flag: Burundi
+๐Ÿ‡ง๐Ÿ‡ฏ flag: Benin
+๐Ÿ‡ง๐Ÿ‡ฑ flag: St. Barthรฉlemy
+๐Ÿ‡ง๐Ÿ‡ฒ flag: Bermuda
+๐Ÿ‡ง๐Ÿ‡ณ flag: Brunei
+๐Ÿ‡ง๐Ÿ‡ด flag: Bolivia
+๐Ÿ‡ง๐Ÿ‡ถ flag: Caribbean Netherlands
+๐Ÿ‡ง๐Ÿ‡ท flag: Brazil
+๐Ÿ‡ง๐Ÿ‡ธ flag: Bahamas
+๐Ÿ‡ง๐Ÿ‡น flag: Bhutan
+๐Ÿ‡ง๐Ÿ‡ป flag: Bouvet Island
+๐Ÿ‡ง๐Ÿ‡ผ flag: Botswana
+๐Ÿ‡ง๐Ÿ‡พ flag: Belarus
+๐Ÿ‡ง๐Ÿ‡ฟ flag: Belize
+๐Ÿ‡จ๐Ÿ‡ฆ flag: Canada
+๐Ÿ‡จ๐Ÿ‡จ flag: Cocos (Keeling) Islands
+๐Ÿ‡จ๐Ÿ‡ฉ flag: Congo - Kinshasa
+๐Ÿ‡จ๐Ÿ‡ซ flag: Central African Republic
+๐Ÿ‡จ๐Ÿ‡ฌ flag: Congo - Brazzaville
+๐Ÿ‡จ๐Ÿ‡ญ flag: Switzerland
+๐Ÿ‡จ๐Ÿ‡ฎ flag: Cรดte dโ€™Ivoire
+๐Ÿ‡จ๐Ÿ‡ฐ flag: Cook Islands
+๐Ÿ‡จ๐Ÿ‡ฑ flag: Chile
+๐Ÿ‡จ๐Ÿ‡ฒ flag: Cameroon
+๐Ÿ‡จ๐Ÿ‡ณ flag: China
+๐Ÿ‡จ๐Ÿ‡ด flag: Colombia
+๐Ÿ‡จ๐Ÿ‡ต flag: Clipperton Island
+๐Ÿ‡จ๐Ÿ‡ท flag: Costa Rica
+๐Ÿ‡จ๐Ÿ‡บ flag: Cuba
+๐Ÿ‡จ๐Ÿ‡ป flag: Cape Verde
+๐Ÿ‡จ๐Ÿ‡ผ flag: Curaรงao
+๐Ÿ‡จ๐Ÿ‡ฝ flag: Christmas Island
+๐Ÿ‡จ๐Ÿ‡พ flag: Cyprus
+๐Ÿ‡จ๐Ÿ‡ฟ flag: Czechia
+๐Ÿ‡ฉ๐Ÿ‡ช flag: Germany
+๐Ÿ‡ฉ๐Ÿ‡ฌ flag: Diego Garcia
+๐Ÿ‡ฉ๐Ÿ‡ฏ flag: Djibouti
+๐Ÿ‡ฉ๐Ÿ‡ฐ flag: Denmark
+๐Ÿ‡ฉ๐Ÿ‡ฒ flag: Dominica
+๐Ÿ‡ฉ๐Ÿ‡ด flag: Dominican Republic
+๐Ÿ‡ฉ๐Ÿ‡ฟ flag: Algeria
+๐Ÿ‡ช๐Ÿ‡ฆ flag: Ceuta & Melilla
+๐Ÿ‡ช๐Ÿ‡จ flag: Ecuador
+๐Ÿ‡ช๐Ÿ‡ช flag: Estonia
+๐Ÿ‡ช๐Ÿ‡ฌ flag: Egypt
+๐Ÿ‡ช๐Ÿ‡ญ flag: Western Sahara
+๐Ÿ‡ช๐Ÿ‡ท flag: Eritrea
+๐Ÿ‡ช๐Ÿ‡ธ flag: Spain
+๐Ÿ‡ช๐Ÿ‡น flag: Ethiopia
+๐Ÿ‡ช๐Ÿ‡บ flag: European Union
+๐Ÿ‡ซ๐Ÿ‡ฎ flag: Finland
+๐Ÿ‡ซ๐Ÿ‡ฏ flag: Fiji
+๐Ÿ‡ซ๐Ÿ‡ฐ flag: Falkland Islands
+๐Ÿ‡ซ๐Ÿ‡ฒ flag: Micronesia
+๐Ÿ‡ซ๐Ÿ‡ด flag: Faroe Islands
+๐Ÿ‡ซ๐Ÿ‡ท flag: France
+๐Ÿ‡ฌ๐Ÿ‡ฆ flag: Gabon
+๐Ÿ‡ฌ๐Ÿ‡ง flag: United Kingdom
+๐Ÿ‡ฌ๐Ÿ‡ฉ flag: Grenada
+๐Ÿ‡ฌ๐Ÿ‡ช flag: Georgia
+๐Ÿ‡ฌ๐Ÿ‡ซ flag: French Guiana
+๐Ÿ‡ฌ๐Ÿ‡ฌ flag: Guernsey
+๐Ÿ‡ฌ๐Ÿ‡ญ flag: Ghana
+๐Ÿ‡ฌ๐Ÿ‡ฎ flag: Gibraltar
+๐Ÿ‡ฌ๐Ÿ‡ฑ flag: Greenland
+๐Ÿ‡ฌ๐Ÿ‡ฒ flag: Gambia
+๐Ÿ‡ฌ๐Ÿ‡ณ flag: Guinea
+๐Ÿ‡ฌ๐Ÿ‡ต flag: Guadeloupe
+๐Ÿ‡ฌ๐Ÿ‡ถ flag: Equatorial Guinea
+๐Ÿ‡ฌ๐Ÿ‡ท flag: Greece
+๐Ÿ‡ฌ๐Ÿ‡ธ flag: South Georgia & South Sandwich Islands
+๐Ÿ‡ฌ๐Ÿ‡น flag: Guatemala
+๐Ÿ‡ฌ๐Ÿ‡บ flag: Guam
+๐Ÿ‡ฌ๐Ÿ‡ผ flag: Guinea-Bissau
+๐Ÿ‡ฌ๐Ÿ‡พ flag: Guyana
+๐Ÿ‡ญ๐Ÿ‡ฐ flag: Hong Kong SAR China
+๐Ÿ‡ญ๐Ÿ‡ฒ flag: Heard & McDonald Islands
+๐Ÿ‡ญ๐Ÿ‡ณ flag: Honduras
+๐Ÿ‡ญ๐Ÿ‡ท flag: Croatia
+๐Ÿ‡ญ๐Ÿ‡น flag: Haiti
+๐Ÿ‡ญ๐Ÿ‡บ flag: Hungary
+๐Ÿ‡ฎ๐Ÿ‡จ flag: Canary Islands
+๐Ÿ‡ฎ๐Ÿ‡ฉ flag: Indonesia
+๐Ÿ‡ฎ๐Ÿ‡ช flag: Ireland
+๐Ÿ‡ฎ๐Ÿ‡ฑ flag: Israel
+๐Ÿ‡ฎ๐Ÿ‡ฒ flag: Isle of Man
+๐Ÿ‡ฎ๐Ÿ‡ณ flag: India
+๐Ÿ‡ฎ๐Ÿ‡ด flag: British Indian Ocean Territory
+๐Ÿ‡ฎ๐Ÿ‡ถ flag: Iraq
+๐Ÿ‡ฎ๐Ÿ‡ท flag: Iran
+๐Ÿ‡ฎ๐Ÿ‡ธ flag: Iceland
+๐Ÿ‡ฎ๐Ÿ‡น flag: Italy
+๐Ÿ‡ฏ๐Ÿ‡ช flag: Jersey
+๐Ÿ‡ฏ๐Ÿ‡ฒ flag: Jamaica
+๐Ÿ‡ฏ๐Ÿ‡ด flag: Jordan
+๐Ÿ‡ฏ๐Ÿ‡ต flag: Japan
+๐Ÿ‡ฐ๐Ÿ‡ช flag: Kenya
+๐Ÿ‡ฐ๐Ÿ‡ฌ flag: Kyrgyzstan
+๐Ÿ‡ฐ๐Ÿ‡ญ flag: Cambodia
+๐Ÿ‡ฐ๐Ÿ‡ฎ flag: Kiribati
+๐Ÿ‡ฐ๐Ÿ‡ฒ flag: Comoros
+๐Ÿ‡ฐ๐Ÿ‡ณ flag: St. Kitts & Nevis
+๐Ÿ‡ฐ๐Ÿ‡ต flag: North Korea
+๐Ÿ‡ฐ๐Ÿ‡ท flag: South Korea
+๐Ÿ‡ฐ๐Ÿ‡ผ flag: Kuwait
+๐Ÿ‡ฐ๐Ÿ‡พ flag: Cayman Islands
+๐Ÿ‡ฐ๐Ÿ‡ฟ flag: Kazakhstan
+๐Ÿ‡ฑ๐Ÿ‡ฆ flag: Laos
+๐Ÿ‡ฑ๐Ÿ‡ง flag: Lebanon
+๐Ÿ‡ฑ๐Ÿ‡จ flag: St. Lucia
+๐Ÿ‡ฑ๐Ÿ‡ฎ flag: Liechtenstein
+๐Ÿ‡ฑ๐Ÿ‡ฐ flag: Sri Lanka
+๐Ÿ‡ฑ๐Ÿ‡ท flag: Liberia
+๐Ÿ‡ฑ๐Ÿ‡ธ flag: Lesotho
+๐Ÿ‡ฑ๐Ÿ‡น flag: Lithuania
+๐Ÿ‡ฑ๐Ÿ‡บ flag: Luxembourg
+๐Ÿ‡ฑ๐Ÿ‡ป flag: Latvia
+๐Ÿ‡ฑ๐Ÿ‡พ flag: Libya
+๐Ÿ‡ฒ๐Ÿ‡ฆ flag: Morocco
+๐Ÿ‡ฒ๐Ÿ‡จ flag: Monaco
+๐Ÿ‡ฒ๐Ÿ‡ฉ flag: Moldova
+๐Ÿ‡ฒ๐Ÿ‡ช flag: Montenegro
+๐Ÿ‡ฒ๐Ÿ‡ซ flag: St. Martin
+๐Ÿ‡ฒ๐Ÿ‡ฌ flag: Madagascar
+๐Ÿ‡ฒ๐Ÿ‡ญ flag: Marshall Islands
+๐Ÿ‡ฒ๐Ÿ‡ฐ flag: North Macedonia
+๐Ÿ‡ฒ๐Ÿ‡ฑ flag: Mali
+๐Ÿ‡ฒ๐Ÿ‡ฒ flag: Myanmar (Burma)
+๐Ÿ‡ฒ๐Ÿ‡ณ flag: Mongolia
+๐Ÿ‡ฒ๐Ÿ‡ด flag: Macao SAR China
+๐Ÿ‡ฒ๐Ÿ‡ต flag: Northern Mariana Islands
+๐Ÿ‡ฒ๐Ÿ‡ถ flag: Martinique
+๐Ÿ‡ฒ๐Ÿ‡ท flag: Mauritania
+๐Ÿ‡ฒ๐Ÿ‡ธ flag: Montserrat
+๐Ÿ‡ฒ๐Ÿ‡น flag: Malta
+๐Ÿ‡ฒ๐Ÿ‡บ flag: Mauritius
+๐Ÿ‡ฒ๐Ÿ‡ป flag: Maldives
+๐Ÿ‡ฒ๐Ÿ‡ผ flag: Malawi
+๐Ÿ‡ฒ๐Ÿ‡ฝ flag: Mexico
+๐Ÿ‡ฒ๐Ÿ‡พ flag: Malaysia
+๐Ÿ‡ฒ๐Ÿ‡ฟ flag: Mozambique
+๐Ÿ‡ณ๐Ÿ‡ฆ flag: Namibia
+๐Ÿ‡ณ๐Ÿ‡จ flag: New Caledonia
+๐Ÿ‡ณ๐Ÿ‡ช flag: Niger
+๐Ÿ‡ณ๐Ÿ‡ซ flag: Norfolk Island
+๐Ÿ‡ณ๐Ÿ‡ฌ flag: Nigeria
+๐Ÿ‡ณ๐Ÿ‡ฎ flag: Nicaragua
+๐Ÿ‡ณ๐Ÿ‡ฑ flag: Netherlands
+๐Ÿ‡ณ๐Ÿ‡ด flag: Norway
+๐Ÿ‡ณ๐Ÿ‡ต flag: Nepal
+๐Ÿ‡ณ๐Ÿ‡ท flag: Nauru
+๐Ÿ‡ณ๐Ÿ‡บ flag: Niue
+๐Ÿ‡ณ๐Ÿ‡ฟ flag: New Zealand
+๐Ÿ‡ด๐Ÿ‡ฒ flag: Oman
+๐Ÿ‡ต๐Ÿ‡ฆ flag: Panama
+๐Ÿ‡ต๐Ÿ‡ช flag: Peru
+๐Ÿ‡ต๐Ÿ‡ซ flag: French Polynesia
+๐Ÿ‡ต๐Ÿ‡ฌ flag: Papua New Guinea
+๐Ÿ‡ต๐Ÿ‡ญ flag: Philippines
+๐Ÿ‡ต๐Ÿ‡ฐ flag: Pakistan
+๐Ÿ‡ต๐Ÿ‡ฑ flag: Poland
+๐Ÿ‡ต๐Ÿ‡ฒ flag: St. Pierre & Miquelon
+๐Ÿ‡ต๐Ÿ‡ณ flag: Pitcairn Islands
+๐Ÿ‡ต๐Ÿ‡ท flag: Puerto Rico
+๐Ÿ‡ต๐Ÿ‡ธ flag: Palestinian Territories
+๐Ÿ‡ต๐Ÿ‡น flag: Portugal
+๐Ÿ‡ต๐Ÿ‡ผ flag: Palau
+๐Ÿ‡ต๐Ÿ‡พ flag: Paraguay
+๐Ÿ‡ถ๐Ÿ‡ฆ flag: Qatar
+๐Ÿ‡ท๐Ÿ‡ช flag: Rรฉunion
+๐Ÿ‡ท๐Ÿ‡ด flag: Romania
+๐Ÿ‡ท๐Ÿ‡ธ flag: Serbia
+๐Ÿ‡ท๐Ÿ‡บ flag: Russia
+๐Ÿ‡ท๐Ÿ‡ผ flag: Rwanda
+๐Ÿ‡ธ๐Ÿ‡ฆ flag: Saudi Arabia
+๐Ÿ‡ธ๐Ÿ‡ง flag: Solomon Islands
+๐Ÿ‡ธ๐Ÿ‡จ flag: Seychelles
+๐Ÿ‡ธ๐Ÿ‡ฉ flag: Sudan
+๐Ÿ‡ธ๐Ÿ‡ช flag: Sweden
+๐Ÿ‡ธ๐Ÿ‡ฌ flag: Singapore
+๐Ÿ‡ธ๐Ÿ‡ญ flag: St. Helena
+๐Ÿ‡ธ๐Ÿ‡ฎ flag: Slovenia
+๐Ÿ‡ธ๐Ÿ‡ฏ flag: Svalbard & Jan Mayen
+๐Ÿ‡ธ๐Ÿ‡ฐ flag: Slovakia
+๐Ÿ‡ธ๐Ÿ‡ฑ flag: Sierra Leone
+๐Ÿ‡ธ๐Ÿ‡ฒ flag: San Marino
+๐Ÿ‡ธ๐Ÿ‡ณ flag: Senegal
+๐Ÿ‡ธ๐Ÿ‡ด flag: Somalia
+๐Ÿ‡ธ๐Ÿ‡ท flag: Suriname
+๐Ÿ‡ธ๐Ÿ‡ธ flag: South Sudan
+๐Ÿ‡ธ๐Ÿ‡น flag: Sรฃo Tomรฉ & Prรญncipe
+๐Ÿ‡ธ๐Ÿ‡ป flag: El Salvador
+๐Ÿ‡ธ๐Ÿ‡ฝ flag: Sint Maarten
+๐Ÿ‡ธ๐Ÿ‡พ flag: Syria
+๐Ÿ‡ธ๐Ÿ‡ฟ flag: Eswatini
+๐Ÿ‡น๐Ÿ‡ฆ flag: Tristan da Cunha
+๐Ÿ‡น๐Ÿ‡จ flag: Turks & Caicos Islands
+๐Ÿ‡น๐Ÿ‡ฉ flag: Chad
+๐Ÿ‡น๐Ÿ‡ซ flag: French Southern Territories
+๐Ÿ‡น๐Ÿ‡ฌ flag: Togo
+๐Ÿ‡น๐Ÿ‡ญ flag: Thailand
+๐Ÿ‡น๐Ÿ‡ฏ flag: Tajikistan
+๐Ÿ‡น๐Ÿ‡ฐ flag: Tokelau
+๐Ÿ‡น๐Ÿ‡ฑ flag: Timor-Leste
+๐Ÿ‡น๐Ÿ‡ฒ flag: Turkmenistan
+๐Ÿ‡น๐Ÿ‡ณ flag: Tunisia
+๐Ÿ‡น๐Ÿ‡ด flag: Tonga
+๐Ÿ‡น๐Ÿ‡ท flag: Turkey
+๐Ÿ‡น๐Ÿ‡น flag: Trinidad & Tobago
+๐Ÿ‡น๐Ÿ‡ป flag: Tuvalu
+๐Ÿ‡น๐Ÿ‡ผ flag: Taiwan
+๐Ÿ‡น๐Ÿ‡ฟ flag: Tanzania
+๐Ÿ‡บ๐Ÿ‡ฆ flag: Ukraine
+๐Ÿ‡บ๐Ÿ‡ฌ flag: Uganda
+๐Ÿ‡บ๐Ÿ‡ฒ flag: U.S. Outlying Islands
+๐Ÿ‡บ๐Ÿ‡ณ flag: United Nations
+๐Ÿ‡บ๐Ÿ‡ธ flag: United States
+๐Ÿ‡บ๐Ÿ‡พ flag: Uruguay
+๐Ÿ‡บ๐Ÿ‡ฟ flag: Uzbekistan
+๐Ÿ‡ป๐Ÿ‡ฆ flag: Vatican City
+๐Ÿ‡ป๐Ÿ‡จ flag: St. Vincent & Grenadines
+๐Ÿ‡ป๐Ÿ‡ช flag: Venezuela
+๐Ÿ‡ป๐Ÿ‡ฌ flag: British Virgin Islands
+๐Ÿ‡ป๐Ÿ‡ฎ flag: U.S. Virgin Islands
+๐Ÿ‡ป๐Ÿ‡ณ flag: Vietnam
+๐Ÿ‡ป๐Ÿ‡บ flag: Vanuatu
+๐Ÿ‡ผ๐Ÿ‡ซ flag: Wallis & Futuna
+๐Ÿ‡ผ๐Ÿ‡ธ flag: Samoa
+๐Ÿ‡ฝ๐Ÿ‡ฐ flag: Kosovo
+๐Ÿ‡พ๐Ÿ‡ช flag: Yemen
+๐Ÿ‡พ๐Ÿ‡น flag: Mayotte
+๐Ÿ‡ฟ๐Ÿ‡ฆ flag: South Africa
+๐Ÿ‡ฟ๐Ÿ‡ฒ flag: Zambia
+๐Ÿ‡ฟ๐Ÿ‡ผ flag: Zimbabwe
+๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ flag: England
+๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ flag: Scotland
+๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ flag: Wales
diff --git a/.local/share/larbs/chars/font-awesome b/.local/share/larbs/chars/font-awesome
new file mode 100644
index 0000000..3283be3
--- /dev/null
+++ b/.local/share/larbs/chars/font-awesome
@@ -0,0 +1,1456 @@
+๏‰ฎ 500px; f26e
+๏จ accessible-icon; f368
+๏ฉ accusoft; f369
+๏šฏ acquisitions-incorporated; f6af
+๏™ ad; f641
+๏Šน address-book; f2b9
+๏Šป address-card; f2bb
+๏‚ adjust; f042
+๏…ฐ adn; f170
+๏ช adversal; f36a
+๏ซ affiliatetheme; f36b
+๏— air-freshener; f5d0
+๏ ด airbnb; f834
+๏ฌ algolia; f36c
+๏€ท align-center; f037
+๏€น align-justify; f039
+๏€ถ align-left; f036
+๏€ธ align-right; f038
+๏™‚ alipay; f642
+๏‘ก allergies; f461
+๏‰ฐ amazon; f270
+๏ฌ amazon-pay; f42c
+๏ƒน ambulance; f0f9
+๏Šฃ american-sign-language-interpreting; f2a3
+๏ญ amilia; f36d
+๏„ฝ anchor; f13d
+๏…ป android; f17b
+๏ˆ‰ angellist; f209
+๏„ƒ angle-double-down; f103
+๏„€ angle-double-left; f100
+๏„ angle-double-right; f101
+๏„‚ angle-double-up; f102
+๏„‡ angle-down; f107
+๏„„ angle-left; f104
+๏„… angle-right; f105
+๏„† angle-up; f106
+๏•– angry; f556
+๏ฎ angrycreative; f36e
+๏  angular; f420
+๏™„ ankh; f644
+๏ฏ app-store; f36f
+๏ฐ app-store-ios; f370
+๏ฑ apper; f371
+๏…น apple; f179
+๏—‘ apple-alt; f5d1
+๏• apple-pay; f415
+๏†‡ archive; f187
+๏•— archway; f557
+๏˜ arrow-alt-circle-down; f358
+๏™ arrow-alt-circle-left; f359
+๏š arrow-alt-circle-right; f35a
+๏› arrow-alt-circle-up; f35b
+๏‚ซ arrow-circle-down; f0ab
+๏‚จ arrow-circle-left; f0a8
+๏‚ฉ arrow-circle-right; f0a9
+๏‚ช arrow-circle-up; f0aa
+๏ฃ arrow-down; f063
+๏  arrow-left; f060
+๏ก arrow-right; f061
+๏ข arrow-up; f062
+๏‚ฒ arrows-alt; f0b2
+๏Œท arrows-alt-h; f337
+๏Œธ arrows-alt-v; f338
+๏บ artstation; f77a
+๏Šข assistive-listening-systems; f2a2
+๏ฉ asterisk; f069
+๏ฒ asymmetrik; f372
+๏‡บ at; f1fa
+๏•˜ atlas; f558
+๏ป atlassian; f77b
+๏—’ atom; f5d2
+๏ณ audible; f373
+๏Šž audio-description; f29e
+๏œ autoprefixer; f41c
+๏ด avianex; f374
+๏ก aviato; f421
+๏•™ award; f559
+๏ต aws; f375
+๏ผ baby; f77c
+๏ฝ baby-carriage; f77d
+๏•š backspace; f55a
+๏Š backward; f04a
+๏Ÿฅ bacon; f7e5
+๎™ bacteria e059
+๎š bacterium e05a
+๏™ฆ bahai; f666
+๏‰Ž balance-scale; f24e
+๏”• balance-scale-left; f515
+๏”– balance-scale-right; f516
+๏ž ban; f05e
+๏‘ข band-aid; f462
+๏‹• bandcamp; f2d5
+๏€ช barcode; f02a
+๏ƒ‰ bars; f0c9
+๏ณ baseball-ball; f433
+๏ด basketball-ball; f434
+๏‹ bath; f2cd
+๏‰„ battery-empty; f244
+๏‰€ battery-full; f240
+๏‰‚ battery-half; f242
+๏‰ƒ battery-quarter; f243
+๏‰ battery-three-quarters; f241
+๏ ต battle-net; f835
+๏ˆถ bed; f236
+๏ƒผ beer; f0fc
+๏†ด behance; f1b4
+๏†ต behance-square; f1b5
+๏ƒณ bell; f0f3
+๏‡ถ bell-slash; f1f6
+๏•› bezier-curve; f55b
+๏™‡ bible; f647
+๏ˆ† bicycle; f206
+๏กŠ biking; f84a
+๏ธ bimobject; f378
+๏‡ฅ binoculars; f1e5
+๏ž€ biohazard; f780
+๏‡ฝ birthday-cake; f1fd
+๏…ฑ bitbucket; f171
+๏น bitcoin; f379
+๏บ bity; f37a
+๏‰พ black-tie; f27e
+๏ป blackberry; f37b
+๏”— blender; f517
+๏šถ blender-phone; f6b6
+๏Š blind; f29d
+๏ž blog; f781
+๏ผ blogger; f37c
+๏ฝ blogger-b; f37d
+๏Š“ bluetooth; f293
+๏Š” bluetooth-b; f294
+๏€ฒ bold; f032
+๏ƒง bolt; f0e7
+๏‡ข bomb; f1e2
+๏—— bone; f5d7
+๏•œ bong; f55c
+๏€ญ book; f02d
+๏šท book-dead; f6b7
+๏Ÿฆ book-medical; f7e6
+๏”˜ book-open; f518
+๏—š book-reader; f5da
+๏€ฎ bookmark; f02e
+๏ ถ bootstrap; f836
+๏กŒ border-all; f84c
+๏ก border-none; f850
+๏ก“ border-style; f853
+๏ถ bowling-ball; f436
+๏‘ฆ box; f466
+๏’ž box-open; f49e
+๎› box-tissue e05b
+๏‘จ boxes; f468
+๏Šก braille; f2a1
+๏—œ brain; f5dc
+๏Ÿฌ bread-slice; f7ec
+๏‚ฑ briefcase; f0b1
+๏‘ฉ briefcase-medical; f469
+๏”™ broadcast-tower; f519
+๏”š broom; f51a
+๏• brush; f55d
+๏…š btc; f15a
+๏ ท buffer; f837
+๏†ˆ bug; f188
+๏†ญ building; f1ad
+๏‚ก bullhorn; f0a1
+๏…€ bullseye; f140
+๏‘ช burn; f46a
+๏ฟ buromobelexperte; f37f
+๏ˆ‡ bus; f207
+๏•ž bus-alt; f55e
+๏™Š business-time; f64a
+๏ขฆ buy-n-large; f8a6
+๏‡ฌ calculator; f1ec
+๏„ณ calendar; f133
+๏ณ calendar-alt; f073
+๏‰ด calendar-check; f274
+๏žƒ calendar-day; f783
+๏‰ฒ calendar-minus; f272
+๏‰ฑ calendar-plus; f271
+๏‰ณ calendar-times; f273
+๏ž„ calendar-week; f784
+๏€ฐ camera; f030
+๏‚ƒ camera-retro; f083
+๏šป campground; f6bb
+๏ž… canadian-maple-leaf; f785
+๏ž† candy-cane; f786
+๏•Ÿ cannabis; f55f
+๏‘ซ capsules; f46b
+๏†น car; f1b9
+๏—ž car-alt; f5de
+๏—Ÿ car-battery; f5df
+๏—ก car-crash; f5e1
+๏—ค car-side; f5e4
+๏ฃฟ caravan; f8ff
+๏ƒ— caret-down; f0d7
+๏ƒ™ caret-left; f0d9
+๏ƒš caret-right; f0da
+๏… caret-square-down; f150
+๏†‘ caret-square-left; f191
+๏…’ caret-square-right; f152
+๏…‘ caret-square-up; f151
+๏ƒ˜ caret-up; f0d8
+๏ž‡ carrot; f787
+๏ˆ˜ cart-arrow-down; f218
+๏ˆ— cart-plus; f217
+๏žˆ cash-register; f788
+๏šพ cat; f6be
+๏ญ cc-amazon-pay; f42d
+๏‡ณ cc-amex; f1f3
+๏– cc-apple-pay; f416
+๏‰Œ cc-diners-club; f24c
+๏‡ฒ cc-discover; f1f2
+๏‰‹ cc-jcb; f24b
+๏‡ฑ cc-mastercard; f1f1
+๏‡ด cc-paypal; f1f4
+๏‡ต cc-stripe; f1f5
+๏‡ฐ cc-visa; f1f0
+๏Ž€ centercode; f380
+๏ž‰ centos; f789
+๏‚ฃ certificate; f0a3
+๏›€ chair; f6c0
+๏”› chalkboard; f51b
+๏”œ chalkboard-teacher; f51c
+๏—ง charging-station; f5e7
+๏‡พ chart-area; f1fe
+๏‚€ chart-bar; f080
+๏ˆ chart-line; f201
+๏ˆ€ chart-pie; f200
+๏€Œ check; f00c
+๏˜ check-circle; f058
+๏•  check-double; f560
+๏…Š check-square; f14a
+๏Ÿฏ cheese; f7ef
+๏น chess; f439
+๏บ chess-bishop; f43a
+๏ผ chess-board; f43c
+๏ฟ chess-king; f43f
+๏‘ chess-knight; f441
+๏‘ƒ chess-pawn; f443
+๏‘… chess-queen; f445
+๏‘‡ chess-rook; f447
+๏„บ chevron-circle-down; f13a
+๏„ท chevron-circle-left; f137
+๏„ธ chevron-circle-right; f138
+๏„น chevron-circle-up; f139
+๏ธ chevron-down; f078
+๏“ chevron-left; f053
+๏” chevron-right; f054
+๏ท chevron-up; f077
+๏†ฎ child; f1ae
+๏‰จ chrome; f268
+๏ ธ chromecast; f838
+๏” church; f51d
+๏„‘ circle; f111
+๏‡Ž circle-notch; f1ce
+๏™ city; f64f
+๏Ÿฒ clinic-medical; f7f2
+๏Œจ clipboard; f328
+๏‘ฌ clipboard-check; f46c
+๏‘ญ clipboard-list; f46d
+๏€— clock; f017
+๏‰ clone; f24d
+๏ˆŠ closed-captioning; f20a
+๏ƒ‚ cloud; f0c2
+๏ށ cloud-download-alt; f381
+๏œป cloud-meatball; f73b
+๏›ƒ cloud-moon; f6c3
+๏œผ cloud-moon-rain; f73c
+๏œฝ cloud-rain; f73d
+๏€ cloud-showers-heavy; f740
+๏›„ cloud-sun; f6c4
+๏ƒ cloud-sun-rain; f743
+๏Ž‚ cloud-upload-alt; f382
+๎ฝ cloudflare e07d
+๏Žƒ cloudscale; f383
+๏Ž„ cloudsmith; f384
+๏Ž… cloudversify; f385
+๏•ก cocktail; f561
+๏„ก code; f121
+๏„ฆ code-branch; f126
+๏‡‹ codepen; f1cb
+๏Š„ codiepie; f284
+๏ƒด coffee; f0f4
+๏€“ cog; f013
+๏‚… cogs; f085
+๏”ž coins; f51e
+๏ƒ› columns; f0db
+๏ต comment; f075
+๏‰บ comment-alt; f27a
+๏™‘ comment-dollar; f651
+๏’ญ comment-dots; f4ad
+๏Ÿต comment-medical; f7f5
+๏’ณ comment-slash; f4b3
+๏‚† comments; f086
+๏™“ comments-dollar; f653
+๏”Ÿ compact-disc; f51f
+๏…Ž compass; f14e
+๏ฆ compress; f066
+๏ข compress-alt; f422
+๏žŒ compress-arrows-alt; f78c
+๏•ข concierge-bell; f562
+๏ž confluence; f78d
+๏ˆŽ connectdevelop; f20e
+๏‰ญ contao; f26d
+๏•ฃ cookie; f563
+๏•ค cookie-bite; f564
+๏ƒ… copy; f0c5
+๏‡น copyright; f1f9
+๏ขž cotton-bureau; f89e
+๏’ธ couch; f4b8
+๏Žˆ cpanel; f388
+๏‰ž creative-commons; f25e
+๏“ง creative-commons-by; f4e7
+๏“จ creative-commons-nc; f4e8
+๏“ฉ creative-commons-nc-eu; f4e9
+๏“ช creative-commons-nc-jp; f4ea
+๏“ซ creative-commons-nd; f4eb
+๏“ฌ creative-commons-pd; f4ec
+๏“ญ creative-commons-pd-alt; f4ed
+๏“ฎ creative-commons-remix; f4ee
+๏“ฏ creative-commons-sa; f4ef
+๏“ฐ creative-commons-sampling; f4f0
+๏“ฑ creative-commons-sampling-plus; f4f1
+๏“ฒ creative-commons-share; f4f2
+๏“ณ creative-commons-zero; f4f3
+๏‚ credit-card; f09d
+๏›‰ critical-role; f6c9
+๏„ฅ crop; f125
+๏•ฅ crop-alt; f565
+๏™” cross; f654
+๏› crosshairs; f05b
+๏”  crow; f520
+๏”ก crown; f521
+๏Ÿท crutch; f7f7
+๏„ผ css3; f13c
+๏Ž‹ css3-alt; f38b
+๏†ฒ cube; f1b2
+๏†ณ cubes; f1b3
+๏ƒ„ cut; f0c4
+๏ŽŒ cuttlefish; f38c
+๏Ž d-and-d; f38d
+๏›Š d-and-d-beyond; f6ca
+๎’ dailymotion e052
+๏ˆ dashcube; f210
+๏‡€ database; f1c0
+๏Šค deaf; f2a4
+๎ท deezer e077
+๏†ฅ delicious; f1a5
+๏‡ democrat; f747
+๏ŽŽ deploydog; f38e
+๏Ž deskpro; f38f
+๏„ˆ desktop; f108
+๏›Œ dev; f6cc
+๏†ฝ deviantart; f1bd
+๏™• dharmachakra; f655
+๏ž dhl; f790
+๏‘ฐ diagnoses; f470
+๏ž‘ diaspora; f791
+๏”ข dice; f522
+๏› dice-d20; f6cf
+๏›‘ dice-d6; f6d1
+๏”ฃ dice-five; f523
+๏”ค dice-four; f524
+๏”ฅ dice-one; f525
+๏”ฆ dice-six; f526
+๏”ง dice-three; f527
+๏”จ dice-two; f528
+๏†ฆ digg; f1a6
+๏Ž‘ digital-ocean; f391
+๏•ฆ digital-tachograph; f566
+๏—ซ directions; f5eb
+๏Ž’ discord; f392
+๏Ž“ discourse; f393
+๏Ÿบ disease; f7fa
+๏”ฉ divide; f529
+๏•ง dizzy; f567
+๏‘ฑ dna; f471
+๏Ž” dochub; f394
+๏Ž• docker; f395
+๏›“ dog; f6d3
+๏…• dollar-sign; f155
+๏‘ฒ dolly; f472
+๏‘ด dolly-flatbed; f474
+๏’น donate; f4b9
+๏”ช door-closed; f52a
+๏”ซ door-open; f52b
+๏†’ dot-circle; f192
+๏’บ dove; f4ba
+๏€™ download; f019
+๏Ž– draft2digital; f396
+๏•จ drafting-compass; f568
+๏›• dragon; f6d5
+๏—ฎ draw-polygon; f5ee
+๏…ฝ dribbble; f17d
+๏Ž— dribbble-square; f397
+๏…ซ dropbox; f16b
+๏•ฉ drum; f569
+๏•ช drum-steelpan; f56a
+๏›— drumstick-bite; f6d7
+๏†ฉ drupal; f1a9
+๏‘‹ dumbbell; f44b
+๏ž“ dumpster; f793
+๏ž” dumpster-fire; f794
+๏›™ dungeon; f6d9
+๏Ž™ dyalog; f399
+๏Žš earlybirds; f39a
+๏“ด ebay; f4f4
+๏Š‚ edge; f282
+๎ธ edge-legacy e078
+๏„ edit; f044
+๏Ÿป egg; f7fb
+๏’ eject; f052
+๏ฐ elementor; f430
+๏… ellipsis-h; f141
+๏…‚ ellipsis-v; f142
+๏—ฑ ello; f5f1
+๏ฃ ember; f423
+๏‡‘ empire; f1d1
+๏ƒ  envelope; f0e0
+๏Šถ envelope-open; f2b6
+๏™˜ envelope-open-text; f658
+๏†™ envelope-square; f199
+๏Š™ envira; f299
+๏”ฌ equals; f52c
+๏„ญ eraser; f12d
+๏Ž erlang; f39d
+๏ฎ ethereum; f42e
+๏ž– ethernet; f796
+๏‹— etsy; f2d7
+๏…“ euro-sign; f153
+๏ น evernote; f839
+๏ข exchange-alt; f362
+๏„ช exclamation; f12a
+๏ช exclamation-circle; f06a
+๏ฑ exclamation-triangle; f071
+๏ฅ expand; f065
+๏ค expand-alt; f424
+๏Œž expand-arrows-alt; f31e
+๏ˆพ expeditedssl; f23e
+๏ external-link-alt; f35d
+๏  external-link-square-alt; f360
+๏ฎ eye; f06e
+๏‡ป eye-dropper; f1fb
+๏ฐ eye-slash; f070
+๏‚š ; facebook; f09a
+๏Žž ; facebook-f; f39e
+๏ŽŸ ; facebook-messenger; f39f
+๏‚‚ ; facebook-square; f082
+๏กฃ ; fan; f863
+๏›œ ; fantasy-flight-games; f6dc
+๏‰ ; fast-backward; f049
+๏ ; fast-forward; f050
+๎€… ; faucet e005
+๏†ฌ ; fax; f1ac
+๏”ญ ; feather; f52d
+๏•ซ ; feather-alt; f56b
+๏ž— ; fedex; f797
+๏ž˜ ; fedora; f798
+๏†‚ ; female; f182
+๏ƒป ; fighter-jet; f0fb
+๏ž™ ; figma; f799
+๏…› ; file; f15b
+๏…œ ; file-alt; f15c
+๏‡† ; file-archive; f1c6
+๏‡‡ ; file-audio; f1c7
+๏‡‰ ; file-code; f1c9
+๏•ฌ ; file-contract; f56c
+๏› ; file-csv; f6dd
+๏•ญ ; file-download; f56d
+๏‡ƒ ; file-excel; f1c3
+๏•ฎ ; file-export; f56e
+๏‡… ; file-image; f1c5
+๏•ฏ ; file-import; f56f
+๏•ฐ ; file-invoice; f570
+๏•ฑ ; file-invoice-dollar; f571
+๏‘ท ; file-medical; f477
+๏‘ธ ; file-medical-alt; f478
+๏‡ ; file-pdf; f1c1
+๏‡„ ; file-powerpoint; f1c4
+๏•ฒ ; file-prescription; f572
+๏•ณ ; file-signature; f573
+๏•ด ; file-upload; f574
+๏‡ˆ ; file-video; f1c8
+๏‡‚ ; file-word; f1c2
+๏•ต ; fill; f575
+๏•ถ ; fill-drip; f576
+๏€ˆ ; film; f008
+๏‚ฐ ; filter; f0b0
+๏•ท ; fingerprint; f577
+๏ญ ; fire; f06d
+๏Ÿค ; fire-alt; f7e4
+๏„ด ; fire-extinguisher; f134
+๏‰ฉ ; firefox; f269
+๎€‡ ; firefox-browser e007
+๏‘น ; first-aid; f479
+๏Šฐ ; first-order; f2b0
+๏”Š ; first-order-alt; f50a
+๏Žก ; firstdraft; f3a1
+๏•ธ ; fish; f578
+๏›ž ; fist-raised; f6de
+๏€ค ; flag; f024
+๏„ž ; flag-checkered; f11e
+๏ ; flag-usa; f74d
+๏ƒƒ ; flask; f0c3
+๏…ฎ ; flickr; f16e
+๏‘ ; flipboard; f44d
+๏•น ; flushed; f579
+๏— ; fly; f417
+๏ป ; folder; f07b
+๏™ ; folder-minus; f65d
+๏ผ ; folder-open; f07c
+๏™ž ; folder-plus; f65e
+๏€ฑ ; font; f031
+๏Šด ; font-awesome; f2b4
+๏œ ; font-awesome-alt; f35c
+๏ฅ ; font-awesome-flag; f425
+๏Š€ ; fonticons; f280
+๏Žข ; fonticons-fi; f3a2
+๏‘Ž ; football-ball; f44e
+๏І ; fort-awesome; f286
+๏Žฃ ; fort-awesome-alt; f3a3
+๏ˆ‘ ; forumbee; f211
+๏Ž ; forward; f04e
+๏†€ ; foursquare; f180
+๏‹… ; free-code-camp; f2c5
+๏Žค ; freebsd; f3a4
+๏”ฎ ; frog; f52e
+๏„™ ; frown; f119
+๏•บ ; frown-open; f57a
+๏”‹ ; fulcrum; f50b
+๏™ข ; funnel-dollar; f662
+๏‡ฃ ; futbol; f1e3
+๏”Œ galactic-republic; f50c
+๏” galactic-senate; f50d
+๏„› gamepad; f11b
+๏”ฏ gas-pump; f52f
+๏ƒฃ gavel; f0e3
+๏Žฅ gem; f3a5
+๏ˆญ genderless; f22d
+๏‰ฅ get-pocket; f265
+๏‰  gg; f260
+๏‰ก gg-circle; f261
+๏›ข ghost; f6e2
+๏ซ gift; f06b
+๏žœ gifts; f79c
+๏‡“ git; f1d3
+๏ก git-alt; f841
+๏‡’ git-square; f1d2
+๏‚› github; f09b
+๏„“ github-alt; f113
+๏‚’ github-square; f092
+๏Žฆ gitkraken; f3a6
+๏Š– gitlab; f296
+๏ฆ gitter; f426
+๏žŸ glass-cheers; f79f
+๏€€ glass-martini; f000
+๏•ป glass-martini-alt; f57b
+๏ž  glass-whiskey; f7a0
+๏”ฐ glasses; f530
+๏Šฅ glide; f2a5
+๏Šฆ glide-g; f2a6
+๏‚ฌ globe; f0ac
+๏•ผ globe-africa; f57c
+๏•ฝ globe-americas; f57d
+๏•พ globe-asia; f57e
+๏žข globe-europe; f7a2
+๏Žง gofore; f3a7
+๏‘ golf-ball; f450
+๏Žจ goodreads; f3a8
+๏Žฉ goodreads-g; f3a9
+๏†  google; f1a0
+๏Žช google-drive; f3aa
+๎น google-pay e079
+๏Žซ google-play; f3ab
+๏Šณ google-plus; f2b3
+๏ƒ• google-plus-g; f0d5
+๏ƒ” google-plus-square; f0d4
+๏‡ฎ google-wallet; f1ee
+๏™ค gopuram; f664
+๏† graduation-cap; f19d
+๏†„ gratipay; f184
+๏‹– grav; f2d6
+๏”ฑ greater-than; f531
+๏”ฒ greater-than-equal; f532
+๏•ฟ grimace; f57f
+๏–€ grin; f580
+๏– grin-alt; f581
+๏–‚ grin-beam; f582
+๏–ƒ grin-beam-sweat; f583
+๏–„ grin-hearts; f584
+๏–… grin-squint; f585
+๏–† grin-squint-tears; f586
+๏–‡ grin-stars; f587
+๏–ˆ grin-tears; f588
+๏–‰ grin-tongue; f589
+๏–Š grin-tongue-squint; f58a
+๏–‹ grin-tongue-wink; f58b
+๏–Œ grin-wink; f58c
+๏– grip-horizontal; f58d
+๏žค grip-lines; f7a4
+๏žฅ grip-lines-vertical; f7a5
+๏–Ž grip-vertical; f58e
+๏Žฌ gripfire; f3ac
+๏Žญ grunt; f3ad
+๎พ guilded e07e
+๏žฆ guitar; f7a6
+๏Žฎ gulp; f3ae
+๏ƒฝ h-square; f0fd
+๏‡” hacker-news; f1d4
+๏Žฏ hacker-news-square; f3af
+๏—ท hackerrank; f5f7
+๏ … hamburger; f805
+๏›ฃ hammer; f6e3
+๏™ฅ hamsa; f665
+๏’ฝ hand-holding; f4bd
+๏’พ hand-holding-heart; f4be
+๎œ hand-holding-medical e05c
+๏“€ hand-holding-usd; f4c0
+๏“ hand-holding-water; f4c1
+๏‰˜ hand-lizard; f258
+๏ † hand-middle-finger; f806
+๏‰– hand-paper; f256
+๏‰› hand-peace; f25b
+๏‚ง hand-point-down; f0a7
+๏‚ฅ hand-point-left; f0a5
+๏‚ค hand-point-right; f0a4
+๏‚ฆ hand-point-up; f0a6
+๏‰š hand-pointer; f25a
+๏‰• hand-rock; f255
+๏‰— hand-scissors; f257
+๎ hand-sparkles e05d
+๏‰™ hand-spock; f259
+๏“‚ hands; f4c2
+๏“„ hands-helping; f4c4
+๎ž hands-wash e05e
+๏Šต handshake; f2b5
+๎Ÿ handshake-alt-slash e05f
+๎  handshake-slash e060
+๏›ฆ hanukiah; f6e6
+๏ ‡ hard-hat; f807
+๏Š’ hashtag; f292
+๏ฃ€ hat-cowboy; f8c0
+๏ฃ hat-cowboy-side; f8c1
+๏›จ hat-wizard; f6e8
+๏‚  hdd; f0a0
+๎ก head-side-cough e061
+๎ข head-side-cough-slash e062
+๎ฃ head-side-mask e063
+๎ค head-side-virus e064
+๏‡œ heading; f1dc
+๏€ฅ headphones; f025
+๏– headphones-alt; f58f
+๏– headset; f590
+๏€„ heart; f004
+๏žฉ heart-broken; f7a9
+๏ˆž heartbeat; f21e
+๏”ณ helicopter; f533
+๏–‘ highlighter; f591
+๏›ฌ hiking; f6ec
+๏›ญ hippo; f6ed
+๏‘’ hips; f452
+๏Žฐ hire-a-helper; f3b0
+๏‡š history; f1da
+๎ฟ hive e07f
+๏‘“ hockey-puck; f453
+๏žช holly-berry; f7aa
+๏€• home; f015
+๏ง hooli; f427
+๏–’ hornbill; f592
+๏›ฐ horse; f6f0
+๏žซ horse-head; f7ab
+๏ƒธ hospital; f0f8
+๏‘ฝ hospital-alt; f47d
+๏‘พ hospital-symbol; f47e
+๏  hospital-user; f80d
+๏–“ hot-tub; f593
+๏  hotdog; f80f
+๏–” hotel; f594
+๏Žฑ hotjar; f3b1
+๏‰” hourglass; f254
+๏‰“ hourglass-end; f253
+๏‰’ hourglass-half; f252
+๏‰‘ hourglass-start; f251
+๏›ฑ house-damage; f6f1
+๎ฅ house-user e065
+๏‰ผ houzz; f27c
+๏›ฒ hryvnia; f6f2
+๏„ป html5; f13b
+๏Žฒ hubspot; f3b2
+๏‰† i-cursor; f246
+๏  ice-cream; f810
+๏žญ icicles; f7ad
+๏กญ icons; f86d
+๏‹ id-badge; f2c1
+๏‹‚ id-card; f2c2
+๏‘ฟ id-card-alt; f47f
+๎€“ ideal e013
+๏žฎ igloo; f7ae
+๏€พ image; f03e
+๏Œ‚ images; f302
+๏‹˜ imdb; f2d8
+๏€œ inbox; f01c
+๏€ผ indent; f03c
+๏‰ต industry; f275
+๏”ด infinity; f534
+๏„ฉ info; f129
+๏š info-circle; f05a
+๎‚€ innosoft e080
+๏…ญ instagram; f16d
+๎• instagram-square e055
+๎‚ instalod e081
+๏žฏ intercom; f7af
+๏‰ซ internet-explorer; f26b
+๏žฐ invision; f7b0
+๏ˆˆ ioxhost; f208
+๏€ณ italic; f033
+๏ บ itch-io; f83a
+๏Žด itunes; f3b4
+๏Žต itunes-note; f3b5
+๏“ค java; f4e4
+๏™ฉ jedi; f669
+๏”Ž jedi-order; f50e
+๏Žถ jenkins; f3b6
+๏žฑ jira; f7b1
+๏Žท joget; f3b7
+๏–• joint; f595
+๏†ช joomla; f1aa
+๏™ช journal-whills; f66a
+๏Žธ js; f3b8
+๏Žน js-square; f3b9
+๏‡Œ jsfiddle; f1cc
+๏™ซ kaaba; f66b
+๏—บ kaggle; f5fa
+๏‚„ key; f084
+๏“ต keybase; f4f5
+๏„œ keyboard; f11c
+๏Žบ keycdn; f3ba
+๏™ญ khanda; f66d
+๏Žป kickstarter; f3bb
+๏Žผ kickstarter-k; f3bc
+๏–– kiss; f596
+๏–— kiss-beam; f597
+๏–˜ kiss-wink-heart; f598
+๏”ต kiwi-bird; f535
+๏ฏ korvue; f42f
+๏™ฏ landmark; f66f
+๏†ซ language; f1ab
+๏„‰ laptop; f109
+๏—ผ laptop-code; f5fc
+๎ฆ laptop-house e066
+๏ ’ laptop-medical; f812
+๏Žฝ laravel; f3bd
+๏ˆ‚ lastfm; f202
+๏ˆƒ lastfm-square; f203
+๏–™ laugh; f599
+๏–š laugh-beam; f59a
+๏–› laugh-squint; f59b
+๏–œ laugh-wink; f59c
+๏—ฝ layer-group; f5fd
+๏ฌ leaf; f06c
+๏ˆ’ leanpub; f212
+๏‚” lemon; f094
+๏ less; f41d
+๏”ถ less-than; f536
+๏”ท less-than-equal; f537
+๏Žพ level-down-alt; f3be
+๏Žฟ level-up-alt; f3bf
+๏‡ life-ring; f1cd
+๏ƒซ lightbulb; f0eb
+๏€ line; f3c0
+๏ƒ link; f0c1
+๏‚Œ linkedin; f08c
+๏ƒก linkedin-in; f0e1
+๏Šธ linode; f2b8
+๏…ผ linux; f17c
+๏†• lira-sign; f195
+๏€บ list; f03a
+๏€ข list-alt; f022
+๏ƒ‹ list-ol; f0cb
+๏ƒŠ list-ul; f0ca
+๏„ค location-arrow; f124
+๏€ฃ lock; f023
+๏ lock-open; f3c1
+๏Œ‰ long-arrow-alt-down; f309
+๏ŒŠ long-arrow-alt-left; f30a
+๏Œ‹ long-arrow-alt-right; f30b
+๏ŒŒ long-arrow-alt-up; f30c
+๏Šจ low-vision; f2a8
+๏– luggage-cart; f59d
+๏˜„ lungs; f604
+๎ง lungs-virus e067
+๏ƒ lyft; f3c3
+๏„ magento; f3c4
+๏ƒ magic; f0d0
+๏ถ magnet; f076
+๏™ด mail-bulk; f674
+๏–ž mailchimp; f59e
+๏†ƒ male; f183
+๏” mandalorian; f50f
+๏‰น map; f279
+๏–Ÿ map-marked; f59f
+๏–  map-marked-alt; f5a0
+๏ map-marker; f041
+๏… map-marker-alt; f3c5
+๏‰ถ map-pin; f276
+๏‰ท map-signs; f277
+๏˜ markdown; f60f
+๏–ก marker; f5a1
+๏ˆข mars; f222
+๏ˆง mars-double; f227
+๏ˆฉ mars-stroke; f229
+๏ˆซ mars-stroke-h; f22b
+๏ˆช mars-stroke-v; f22a
+๏›บ mask; f6fa
+๏“ถ mastodon; f4f6
+๏„ถ maxcdn; f136
+๏ฃŠ mdb; f8ca
+๏–ข medal; f5a2
+๏† medapps; f3c6
+๏ˆบ medium; f23a
+๏‡ medium-m; f3c7
+๏ƒบ medkit; f0fa
+๏ˆ medrt; f3c8
+๏‹  meetup; f2e0
+๏–ฃ megaport; f5a3
+๏„š meh; f11a
+๏–ค meh-blank; f5a4
+๏–ฅ meh-rolling-eyes; f5a5
+๏”ธ memory; f538
+๏žณ mendeley; f7b3
+๏™ถ menorah; f676
+๏ˆฃ mercury; f223
+๏“ meteor; f753
+๎€š microblog e01a
+๏‹› microchip; f2db
+๏„ฐ microphone; f130
+๏‰ microphone-alt; f3c9
+๏”น microphone-alt-slash; f539
+๏„ฑ microphone-slash; f131
+๏˜ microscope; f610
+๏Š microsoft; f3ca
+๏จ minus; f068
+๏– minus-circle; f056
+๏…† minus-square; f146
+๏žต mitten; f7b5
+๏‹ mix; f3cb
+๏Љ mixcloud; f289
+๎– mixer e056
+๏Œ mizuni; f3cc
+๏„‹ mobile; f10b
+๏ mobile-alt; f3cd
+๏Š… modx; f285
+๏ monero; f3d0
+๏ƒ– money-bill; f0d6
+๏‘ money-bill-alt; f3d1
+๏”บ money-bill-wave; f53a
+๏”ป money-bill-wave-alt; f53b
+๏”ผ money-check; f53c
+๏”ฝ money-check-alt; f53d
+๏–ฆ monument; f5a6
+๏†† moon; f186
+๏–ง mortar-pestle; f5a7
+๏™ธ mosque; f678
+๏ˆœ motorcycle; f21c
+๏›ผ mountain; f6fc
+๏ฃŒ mouse; f8cc
+๏‰… mouse-pointer; f245
+๏žถ mug-hot; f7b6
+๏€ music; f001
+๏’ napster; f3d2
+๏˜’ neos; f612
+๏›ฟ network-wired; f6ff
+๏ˆฌ neuter; f22c
+๏‡ช newspaper; f1ea
+๏–จ nimblr; f5a8
+๏™ node; f419
+๏“ node-js; f3d3
+๏”พ not-equal; f53e
+๏’ notes-medical; f481
+๏” npm; f3d4
+๏• ns8; f3d5
+๏– nutritionix; f3d6
+๏‰‡ object-group; f247
+๏‰ˆ object-ungroup; f248
+๎‚‚ octopus-deploy e082
+๏‰ฃ odnoklassniki; f263
+๏‰ค odnoklassniki-square; f264
+๏˜“ oil-can; f613
+๏” old-republic; f510
+๏™น om; f679
+๏ˆฝ opencart; f23d
+๏†› openid; f19b
+๏‰ช opera; f26a
+๏ˆผ optin-monster; f23c
+๏ฃ’ orcid; f8d2
+๏š osi; f41a
+๏œ€ otter; f700
+๏€ป outdent; f03b
+๏— page4; f3d7
+๏†Œ pagelines; f18c
+๏ • pager; f815
+๏‡ผ paint-brush; f1fc
+๏–ช paint-roller; f5aa
+๏”ฟ palette; f53f
+๏˜ palfed; f3d8
+๏’‚ pallet; f482
+๏‡˜ paper-plane; f1d8
+๏ƒ† paperclip; f0c6
+๏“ parachute-box; f4cd
+๏‡ paragraph; f1dd
+๏•€ parking; f540
+๏–ซ passport; f5ab
+๏™ป pastafarianism; f67b
+๏ƒช paste; f0ea
+๏™ patreon; f3d9
+๏Œ pause; f04c
+๏Š‹ pause-circle; f28b
+๏†ฐ paw; f1b0
+๏‡ญ paypal; f1ed
+๏™ผ peace; f67c
+๏Œ„ pen; f304
+๏Œ… pen-alt; f305
+๏–ฌ pen-fancy; f5ac
+๏–ญ pen-nib; f5ad
+๏…‹ pen-square; f14b
+๏Œƒ pencil-alt; f303
+๏–ฎ pencil-ruler; f5ae
+๏œ„ penny-arcade; f704
+๎จ people-arrows e068
+๏“Ž people-carry; f4ce
+๏ – pepper-hot; f816
+๎‚ƒ perbyte e083
+๏Š• percent; f295
+๏• percentage; f541
+๏š periscope; f3da
+๏– person-booth; f756
+๏› phabricator; f3db
+๏œ phoenix-framework; f3dc
+๏”‘ phoenix-squadron; f511
+๏‚• phone; f095
+๏กน phone-alt; f879
+๏ phone-slash; f3dd
+๏‚˜ phone-square; f098
+๏กป phone-square-alt; f87b
+๏Š  phone-volume; f2a0
+๏กผ photo-video; f87c
+๏‘— php; f457
+๏Šฎ pied-piper; f2ae
+๏†จ pied-piper-alt; f1a8
+๏“ฅ pied-piper-hat; f4e5
+๏†ง pied-piper-pp; f1a7
+๎€ž pied-piper-square e01e
+๏““ piggy-bank; f4d3
+๏’„ pills; f484
+๏ƒ’ pinterest; f0d2
+๏ˆฑ pinterest-p; f231
+๏ƒ“ pinterest-square; f0d3
+๏ ˜ pizza-slice; f818
+๏™ฟ place-of-worship; f67f
+๏ฒ plane; f072
+๏–ฏ plane-arrival; f5af
+๏–ฐ plane-departure; f5b0
+๎ฉ plane-slash e069
+๏‹ play; f04b
+๏…„ play-circle; f144
+๏Ÿ playstation; f3df
+๏‡ฆ plug; f1e6
+๏ง plus; f067
+๏• plus-circle; f055
+๏ƒพ plus-square; f0fe
+๏‹Ž podcast; f2ce
+๏š poll; f681
+๏š‚ poll-h; f682
+๏‹พ poo; f2fe
+๏š poo-storm; f75a
+๏˜™ poop; f619
+๏  portrait; f3e0
+๏…” pound-sign; f154
+๏€‘ power-off; f011
+๏šƒ pray; f683
+๏š„ praying-hands; f684
+๏–ฑ prescription; f5b1
+๏’… prescription-bottle; f485
+๏’† prescription-bottle-alt; f486
+๏€ฏ print; f02f
+๏’‡ procedures; f487
+๏Šˆ product-hunt; f288
+๏•‚ project-diagram; f542
+๎ช pump-medical e06a
+๎ซ pump-soap e06b
+๏ก pushed; f3e1
+๏„ฎ puzzle-piece; f12e
+๏ข python; f3e2
+๏‡– qq; f1d6
+๏€ฉ qrcode; f029
+๏„จ question; f128
+๏™ question-circle; f059
+๏‘˜ quidditch; f458
+๏‘™ quinscape; f459
+๏‹„ quora; f2c4
+๏„ quote-left; f10d
+๏„Ž quote-right; f10e
+๏š‡ quran; f687
+๏“ท r-project; f4f7
+๏žน radiation; f7b9
+๏žบ radiation-alt; f7ba
+๏› rainbow; f75b
+๏ด random; f074
+๏žป raspberry-pi; f7bb
+๏‹™ ravelry; f2d9
+๏› react; f41b
+๏ reacteurope; f75d
+๏“• readme; f4d5
+๏‡ rebel; f1d0
+๏•ƒ receipt; f543
+๏ฃ™ record-vinyl; f8d9
+๏†ธ recycle; f1b8
+๏ฃ red-river; f3e3
+๏†ก reddit; f1a1
+๏Ё reddit-alien; f281
+๏†ข reddit-square; f1a2
+๏žผ redhat; f7bc
+๏€ž redo; f01e
+๏‹น redo-alt; f2f9
+๏‰ registered; f25d
+๏กฝ remove-format; f87d
+๏†‹ renren; f18b
+๏ฅ reply; f3e5
+๏„ข reply-all; f122
+๏ฆ replyd; f3e6
+๏ž republican; f75e
+๏“ธ researchgate; f4f8
+๏ง resolving; f3e7
+๏žฝ restroom; f7bd
+๏น retweet; f079
+๏–ฒ rev; f5b2
+๏“– ribbon; f4d6
+๏œ‹ ring; f70b
+๏€˜ road; f018
+๏•„ robot; f544
+๏„ต rocket; f135
+๏จ rocketchat; f3e8
+๏ฉ rockrms; f3e9
+๏“— route; f4d7
+๏‚ž rss; f09e
+๏…ƒ rss-square; f143
+๏…˜ ruble-sign; f158
+๏•… ruler; f545
+๏•† ruler-combined; f546
+๏•‡ ruler-horizontal; f547
+๏•ˆ ruler-vertical; f548
+๏œŒ running; f70c
+๏…– rupee-sign; f156
+๎บ rust e07a
+๏–ณ sad-cry; f5b3
+๏–ด sad-tear; f5b4
+๏‰ง safari; f267
+๏ ป salesforce; f83b
+๏ž sass; f41e
+๏žฟ satellite; f7bf
+๏Ÿ€ satellite-dish; f7c0
+๏ƒ‡ save; f0c7
+๏ช schlix; f3ea
+๏•‰ school; f549
+๏•Š screwdriver; f54a
+๏ŠŠ scribd; f28a
+๏œŽ scroll; f70e
+๏Ÿ‚ sd-card; f7c2
+๏€‚ search; f002
+๏šˆ search-dollar; f688
+๏š‰ search-location; f689
+๏€ search-minus; f010
+๏€Ž search-plus; f00e
+๏ซ searchengin; f3eb
+๏“˜ seedling; f4d8
+๏‹š sellcast; f2da
+๏ˆ“ sellsy; f213
+๏ˆณ server; f233
+๏ฌ servicestack; f3ec
+๏˜Ÿ shapes; f61f
+๏ค share; f064
+๏‡  share-alt; f1e0
+๏‡ก share-alt-square; f1e1
+๏… share-square; f14d
+๏ˆ‹ shekel-sign; f20b
+๏ญ shield-alt; f3ed
+๎ฌ shield-virus e06c
+๏ˆš ship; f21a
+๏’‹ shipping-fast; f48b
+๏ˆ” shirtsinbulk; f214
+๏•‹ shoe-prints; f54b
+๎— shopify e057
+๏А shopping-bag; f290
+๏Š‘ shopping-basket; f291
+๏บ shopping-cart; f07a
+๏–ต shopware; f5b5
+๏‹Œ shower; f2cc
+๏–ถ shuttle-van; f5b6
+๏“™ sign; f4d9
+๏‹ถ sign-in-alt; f2f6
+๏Šง sign-language; f2a7
+๏‹ต sign-out-alt; f2f5
+๏€’ signal; f012
+๏–ท signature; f5b7
+๏Ÿ„ sim-card; f7c4
+๏ˆ• simplybuilt; f215
+๎ญ sink e06d
+๏ฎ sistrix; f3ee
+๏ƒจ sitemap; f0e8
+๏”’ sith; f512
+๏Ÿ… skating; f7c5
+๏Ÿ† sketch; f7c6
+๏Ÿ‰ skiing; f7c9
+๏ŸŠ skiing-nordic; f7ca
+๏•Œ skull; f54c
+๏œ” skull-crossbones; f714
+๏ˆ– skyatlas; f216
+๏…พ skype; f17e
+๏†˜ slack; f198
+๏ฏ slack-hash; f3ef
+๏œ• slash; f715
+๏ŸŒ sleigh; f7cc
+๏‡ž sliders-h; f1de
+๏‡ง slideshare; f1e7
+๏„˜ smile; f118
+๏–ธ smile-beam; f5b8
+๏“š smile-wink; f4da
+๏Ÿ smog; f75f
+๏’ smoking; f48d
+๏• smoking-ban; f54d
+๏Ÿ sms; f7cd
+๏Šซ snapchat; f2ab
+๏Šฌ snapchat-ghost; f2ac
+๏Šญ snapchat-square; f2ad
+๏ŸŽ snowboarding; f7ce
+๏‹œ snowflake; f2dc
+๏Ÿ snowman; f7d0
+๏Ÿ’ snowplow; f7d2
+๎ฎ soap e06e
+๏š– socks; f696
+๏–บ solar-panel; f5ba
+๏ƒœ sort; f0dc
+๏… sort-alpha-down; f15d
+๏ข sort-alpha-down-alt; f881
+๏…ž sort-alpha-up; f15e
+๏ข‚ sort-alpha-up-alt; f882
+๏…  sort-amount-down; f160
+๏ข„ sort-amount-down-alt; f884
+๏…ก sort-amount-up; f161
+๏ข… sort-amount-up-alt; f885
+๏ƒ sort-down; f0dd
+๏…ข sort-numeric-down; f162
+๏ข† sort-numeric-down-alt; f886
+๏…ฃ sort-numeric-up; f163
+๏ข‡ sort-numeric-up-alt; f887
+๏ƒž sort-up; f0de
+๏†พ soundcloud; f1be
+๏Ÿ“ sourcetree; f7d3
+๏–ป spa; f5bb
+๏†— space-shuttle; f197
+๏ณ speakap; f3f3
+๏ ผ speaker-deck; f83c
+๏ข‘ spell-check; f891
+๏œ— spider; f717
+๏„ spinner; f110
+๏–ผ splotch; f5bc
+๏†ผ spotify; f1bc
+๏–ฝ spray-can; f5bd
+๏ƒˆ square; f0c8
+๏‘œ square-full; f45c
+๏š˜ square-root-alt; f698
+๏–พ squarespace; f5be
+๏† stack-exchange; f18d
+๏…ฌ stack-overflow; f16c
+๏ก‚ stackpath; f842
+๏–ฟ stamp; f5bf
+๏€… star; f005
+๏š™ star-and-crescent; f699
+๏‚‰ star-half; f089
+๏—€ star-half-alt; f5c0
+๏šš star-of-david; f69a
+๏˜ก star-of-life; f621
+๏ต staylinked; f3f5
+๏†ถ steam; f1b6
+๏†ท steam-square; f1b7
+๏ถ steam-symbol; f3f6
+๏ˆ step-backward; f048
+๏‘ step-forward; f051
+๏ƒฑ stethoscope; f0f1
+๏ท sticker-mule; f3f7
+๏‰‰ sticky-note; f249
+๏ stop; f04d
+๏Š stop-circle; f28d
+๏‹ฒ stopwatch; f2f2
+๎ฏ stopwatch-20 e06f
+๏•Ž store; f54e
+๏• store-alt; f54f
+๎ฐ store-alt-slash e070
+๎ฑ store-slash e071
+๏จ strava; f428
+๏• stream; f550
+๏ˆ street-view; f21d
+๏ƒŒ strikethrough; f0cc
+๏ฉ stripe; f429
+๏ช stripe-s; f42a
+๏•‘ stroopwafel; f551
+๏ธ studiovinari; f3f8
+๏†ค stumbleupon; f1a4
+๏†ฃ stumbleupon-circle; f1a3
+๏„ฌ subscript; f12c
+๏ˆน subway; f239
+๏ƒฒ suitcase; f0f2
+๏— suitcase-rolling; f5c1
+๏†… sun; f185
+๏‹ superpowers; f2dd
+๏„ซ superscript; f12b
+๏น supple; f3f9
+๏—‚ surprise; f5c2
+๏Ÿ– suse; f7d6
+๏—ƒ swatchbook; f5c3
+๏ฃก swift; f8e1
+๏—„ swimmer; f5c4
+๏—… swimming-pool; f5c5
+๏ ฝ symfony; f83d
+๏š› synagogue; f69b
+๏€ก sync; f021
+๏‹ฑ sync-alt; f2f1
+๏’Ž syringe; f48e
+๏ƒŽ table; f0ce
+๏‘ table-tennis; f45d
+๏„Š tablet; f10a
+๏บ tablet-alt; f3fa
+๏’ tablets; f490
+๏ฝ tachometer-alt; f3fd
+๏€ซ tag; f02b
+๏€ฌ tags; f02c
+๏“› tape; f4db
+๏‚ฎ tasks; f0ae
+๏†บ taxi; f1ba
+๏“น teamspeak; f4f9
+๏˜ฎ teeth; f62e
+๏˜ฏ teeth-open; f62f
+๏‹† telegram; f2c6
+๏พ telegram-plane; f3fe
+๏ฉ temperature-high; f769
+๏ซ temperature-low; f76b
+๏‡• tencent-weibo; f1d5
+๏Ÿ— tenge; f7d7
+๏„  terminal; f120
+๏€ด text-height; f034
+๏€ต text-width; f035
+๏€Š th; f00a
+๏€‰ th-large; f009
+๏€‹ th-list; f00b
+๏š the-red-yeti; f69d
+๏˜ฐ theater-masks; f630
+๏—† themeco; f5c6
+๏Šฒ themeisle; f2b2
+๏’‘ thermometer; f491
+๏‹‹ thermometer-empty; f2cb
+๏‹‡ thermometer-full; f2c7
+๏‹‰ thermometer-half; f2c9
+๏‹Š thermometer-quarter; f2ca
+๏‹ˆ thermometer-three-quarters; f2c8
+๏œฑ think-peaks; f731
+๏…ฅ thumbs-down; f165
+๏…ค thumbs-up; f164
+๏‚ thumbtack; f08d
+๏ฟ ticket-alt; f3ff
+๎ป tiktok e07b
+๏€ times; f00d
+๏— times-circle; f057
+๏ƒ tint; f043
+๏—‡ tint-slash; f5c7
+๏—ˆ tired; f5c8
+๏ˆ„ toggle-off; f204
+๏ˆ… toggle-on; f205
+๏Ÿ˜ toilet; f7d8
+๏œž toilet-paper; f71e
+๎ฒ toilet-paper-slash e072
+๏•’ toolbox; f552
+๏Ÿ™ tools; f7d9
+๏—‰ tooth; f5c9
+๏š  torah; f6a0
+๏šก torii-gate; f6a1
+๏œข tractor; f722
+๏”“ trade-federation; f513
+๏‰œ trademark; f25c
+๏˜ท traffic-light; f637
+๎ trailer e041
+๏ˆธ train; f238
+๏Ÿš tram; f7da
+๏ˆค transgender; f224
+๏ˆฅ transgender-alt; f225
+๏‡ธ trash; f1f8
+๏‹ญ trash-alt; f2ed
+๏ ฉ trash-restore; f829
+๏ ช trash-restore-alt; f82a
+๏†ป tree; f1bb
+๏† trello; f181
+๏‚‘ trophy; f091
+๏ƒ‘ truck; f0d1
+๏“ž truck-loading; f4de
+๏˜ป truck-monster; f63b
+๏“Ÿ truck-moving; f4df
+๏˜ผ truck-pickup; f63c
+๏•“ tshirt; f553
+๏‡ค tty; f1e4
+๏…ณ tumblr; f173
+๏…ด tumblr-square; f174
+๏‰ฌ tv; f26c
+๏‡จ twitch; f1e8
+๏‚™ twitter; f099
+๏‚ twitter-square; f081
+๏ซ typo3; f42b
+๏‚ uber; f402
+๏ŸŸ ubuntu; f7df
+๏ƒ uikit; f403
+๏ฃจ umbraco; f8e8
+๏ƒฉ umbrella; f0e9
+๏—Š umbrella-beach; f5ca
+๎‚„ uncharted e084
+๏ƒ underline; f0cd
+๏ƒข undo; f0e2
+๏‹ช undo-alt; f2ea
+๏„ uniregistry; f404
+๎‰ unity e049
+๏Šš universal-access; f29a
+๏†œ university; f19c
+๏„ง unlink; f127
+๏‚œ unlock; f09c
+๏„พ unlock-alt; f13e
+๎ผ unsplash e07c
+๏… untappd; f405
+๏‚“ upload; f093
+๏Ÿ  ups; f7e0
+๏Ї usb; f287
+๏€‡ user; f007
+๏† user-alt; f406
+๏“บ user-alt-slash; f4fa
+๏“ป user-astronaut; f4fb
+๏“ผ user-check; f4fc
+๏Šฝ user-circle; f2bd
+๏“ฝ user-clock; f4fd
+๏“พ user-cog; f4fe
+๏“ฟ user-edit; f4ff
+๏”€ user-friends; f500
+๏” user-graduate; f501
+๏œจ user-injured; f728
+๏”‚ user-lock; f502
+๏ƒฐ user-md; f0f0
+๏”ƒ user-minus; f503
+๏”„ user-ninja; f504
+๏ ฏ user-nurse; f82f
+๏ˆด user-plus; f234
+๏ˆ› user-secret; f21b
+๏”… user-shield; f505
+๏”† user-slash; f506
+๏”‡ user-tag; f507
+๏”ˆ user-tie; f508
+๏ˆต user-times; f235
+๏ƒ€ users; f0c0
+๏”‰ users-cog; f509
+๎ณ users-slash e073
+๏Ÿก usps; f7e1
+๏‡ ussunnah; f407
+๏‹ฅ utensil-spoon; f2e5
+๏‹ง utensils; f2e7
+๏ˆ vaadin; f408
+๏—‹ vector-square; f5cb
+๏ˆก venus; f221
+๏ˆฆ venus-double; f226
+๏ˆจ venus-mars; f228
+๎‚… vest e085
+๎‚† vest-patches e086
+๏ˆท viacoin; f237
+๏Šฉ viadeo; f2a9
+๏Šช viadeo-square; f2aa
+๏’’ vial; f492
+๏’“ vials; f493
+๏‰ viber; f409
+๏€ฝ video; f03d
+๏“ข video-slash; f4e2
+๏šง vihara; f6a7
+๏Š vimeo; f40a
+๏†” vimeo-square; f194
+๏‰ฝ vimeo-v; f27d
+๏‡Š vine; f1ca
+๎ด virus e074
+๎ต virus-slash e075
+๎ถ viruses e076
+๏†‰ vk; f189
+๏‹ vnv; f40b
+๏ข— voicemail; f897
+๏‘Ÿ volleyball-ball; f45f
+๏€ง volume-down; f027
+๏šฉ volume-mute; f6a9
+๏€ฆ volume-off; f026
+๏€จ volume-up; f028
+๏ฒ vote-yea; f772
+๏œฉ vr-cardboard; f729
+๏Ÿ vuejs; f41f
+๏•” walking; f554
+๏•• wallet; f555
+๏’” warehouse; f494
+๎‚‡ watchman-monitoring e087
+๏ณ water; f773
+๏ พ wave-square; f83e
+๏ ฟ waze; f83f
+๏—Œ weebly; f5cc
+๏†Š weibo; f18a
+๏’– weight; f496
+๏— weight-hanging; f5cd
+๏‡— weixin; f1d7
+๏ˆฒ whatsapp; f232
+๏Œ whatsapp-square; f40c
+๏†“ wheelchair; f193
+๏ whmcs; f40d
+๏‡ซ wifi; f1eb
+๏‰ฆ wikipedia-w; f266
+๏œฎ wind; f72e
+๏ window-close; f410
+๏‹ window-maximize; f2d0
+๏‹‘ window-minimize; f2d1
+๏‹’ window-restore; f2d2
+๏…บ windows; f17a
+๏œฏ wine-bottle; f72f
+๏“ฃ wine-glass; f4e3
+๏—Ž wine-glass-alt; f5ce
+๏— wix; f5cf
+๏œฐ wizards-of-the-coast; f730
+๎‚ˆ wodu e088
+๏”” wolf-pack-battalion; f514
+๏…™ won-sign; f159
+๏†š wordpress; f19a
+๏‘ wordpress-simple; f411
+๏Š— wpbeginner; f297
+๏‹ž wpexplorer; f2de
+๏Š˜ wpforms; f298
+๏ค wpressr; f3e4
+๏‚ญ wrench; f0ad
+๏’— x-ray; f497
+๏’ xbox; f412
+๏…จ xing; f168
+๏…ฉ xing-square; f169
+๏ˆป y-combinator; f23b
+๏†ž yahoo; f19e
+๏ก€ yammer; f840
+๏“ yandex; f413
+๏” yandex-international; f414
+๏Ÿฃ yarn; f7e3
+๏‡ฉ yelp; f1e9
+๏…— yen-sign; f157
+๏šญ yin-yang; f6ad
+๏Šฑ yoast; f2b1
+๏…ง youtube; f167
+๏ฑ youtube-square; f431
+๏˜ฟ zhihu; f63f
diff --git a/.local/share/larbs/emoji b/.local/share/larbs/emoji
new file mode 100644
index 0000000..6803731
--- /dev/null
+++ b/.local/share/larbs/emoji
@@ -0,0 +1,1630 @@
+๐Ÿ˜€ grinning face
+๐Ÿ˜ƒ grinning face with big eyes
+๐Ÿ˜„ grinning face with smiling eyes
+๐Ÿ˜ beaming face with smiling eyes
+๐Ÿ˜† grinning squinting face
+๐Ÿ˜… grinning face with sweat
+๐Ÿคฃ rolling on the floor laughing
+๐Ÿ˜‚ face with tears of joy
+๐Ÿ™‚ slightly smiling face
+๐Ÿ™ƒ upside-down face
+๐Ÿซ  melting face
+๐Ÿ˜‰ winking face
+๐Ÿ˜Š smiling face with smiling eyes
+๐Ÿ˜‡ smiling face with halo
+๐Ÿฅฐ smiling face with hearts
+๐Ÿ˜ smiling face with heart-eyes
+๐Ÿคฉ star-struck
+๐Ÿ˜˜ face blowing a kiss
+๐Ÿ˜— kissing face
+โ˜บ๏ธ smiling face
+๐Ÿ˜š kissing face with closed eyes
+๐Ÿ˜™ kissing face with smiling eyes
+๐Ÿฅฒ smiling face with tear
+๐Ÿ˜‹ face savoring food
+๐Ÿ˜› face with tongue
+๐Ÿ˜œ winking face with tongue
+๐Ÿคช zany face
+๐Ÿ˜ squinting face with tongue
+๐Ÿค‘ money-mouth face
+๐Ÿค— smiling face with open hands
+๐Ÿคญ face with hand over mouth
+๐Ÿซข face with open eyes and hand over mouth
+๐Ÿซฃ face with peeking eye
+๐Ÿคซ shushing face
+๐Ÿค” thinking face
+๐Ÿซก saluting face
+๐Ÿค zipper-mouth face
+๐Ÿคจ face with raised eyebrow
+๐Ÿ˜ neutral face
+๐Ÿ˜‘ expressionless face
+๐Ÿ˜ถ face without mouth
+๐Ÿซฅ dotted line face
+๐Ÿ˜ smirking face
+๐Ÿ˜’ unamused face
+๐Ÿ™„ face with rolling eyes
+๐Ÿ˜ฌ grimacing face
+๐Ÿคฅ lying face
+๐Ÿ˜Œ relieved face
+๐Ÿ˜” pensive face
+๐Ÿ˜ช sleepy face
+๐Ÿคค drooling face
+๐Ÿ˜ด sleeping face
+๐Ÿ˜ท face with medical mask
+๐Ÿค’ face with thermometer
+๐Ÿค• face with head-bandage
+๐Ÿคข nauseated face
+๐Ÿคฎ face vomiting
+๐Ÿคง sneezing face
+๐Ÿฅต hot face
+๐Ÿฅถ cold face
+๐Ÿฅด woozy face
+๐Ÿ˜ต face with crossed-out eyes
+๐Ÿคฏ exploding head
+๐Ÿค  cowboy hat face
+๐Ÿฅณ partying face
+๐Ÿฅธ disguised face
+๐Ÿ˜Ž smiling face with sunglasses
+๐Ÿค“ nerd face
+๐Ÿง face with monocle
+๐Ÿ˜• confused face
+๐Ÿซค face with diagonal mouth
+๐Ÿ˜Ÿ worried face
+๐Ÿ™ slightly frowning face
+โ˜น๏ธ frowning face
+๐Ÿ˜ฎ face with open mouth
+๐Ÿ˜ฏ hushed face
+๐Ÿ˜ฒ astonished face
+๐Ÿ˜ณ flushed face
+๐Ÿฅบ pleading face
+๐Ÿฅน face holding back tears
+๐Ÿ˜ฆ frowning face with open mouth
+๐Ÿ˜ง anguished face
+๐Ÿ˜จ fearful face
+๐Ÿ˜ฐ anxious face with sweat
+๐Ÿ˜ฅ sad but relieved face
+๐Ÿ˜ข crying face
+๐Ÿ˜ญ loudly crying face
+๐Ÿ˜ฑ face screaming in fear
+๐Ÿ˜– confounded face
+๐Ÿ˜ฃ persevering face
+๐Ÿ˜ž disappointed face
+๐Ÿ˜“ downcast face with sweat
+๐Ÿ˜ฉ weary face
+๐Ÿ˜ซ tired face
+๐Ÿฅฑ yawning face
+๐Ÿ˜ค face with steam from nose
+๐Ÿ˜ก pouting face
+๐Ÿ˜  angry face
+๐Ÿคฌ face with symbols on mouth
+๐Ÿ˜ˆ smiling face with horns
+๐Ÿ‘ฟ angry face with horns
+๐Ÿ’€ skull
+โ˜ ๏ธ skull and crossbones
+๐Ÿ’ฉ pile of poo
+๐Ÿคก clown face
+๐Ÿ‘น ogre
+๐Ÿ‘บ goblin
+๐Ÿ‘ป ghost
+๐Ÿ‘ฝ alien
+๐Ÿ‘พ alien monster
+๐Ÿค– robot
+๐Ÿ˜บ grinning cat
+๐Ÿ˜ธ grinning cat with smiling eyes
+๐Ÿ˜น cat with tears of joy
+๐Ÿ˜ป smiling cat with heart-eyes
+๐Ÿ˜ผ cat with wry smile
+๐Ÿ˜ฝ kissing cat
+๐Ÿ™€ weary cat
+๐Ÿ˜ฟ crying cat
+๐Ÿ˜พ pouting cat
+๐Ÿ™ˆ see-no-evil monkey
+๐Ÿ™‰ hear-no-evil monkey
+๐Ÿ™Š speak-no-evil monkey
+๐Ÿ’‹ kiss mark
+๐Ÿ’Œ love letter
+๐Ÿ’˜ heart with arrow
+๐Ÿ’ heart with ribbon
+๐Ÿ’– sparkling heart
+๐Ÿ’— growing heart
+๐Ÿ’“ beating heart
+๐Ÿ’ž revolving hearts
+๐Ÿ’• two hearts
+๐Ÿ’Ÿ heart decoration
+โฃ๏ธ heart exclamation
+๐Ÿ’” broken heart
+โค๏ธ red heart
+๐Ÿงก orange heart
+๐Ÿ’› yellow heart
+๐Ÿ’š green heart
+๐Ÿ’™ blue heart
+๐Ÿ’œ purple heart
+๐ŸคŽ brown heart
+๐Ÿ–ค black heart
+๐Ÿค white heart
+๐Ÿ’ฏ hundred points
+๐Ÿ’ข anger symbol
+๐Ÿ’ฅ collision
+๐Ÿ’ซ dizzy
+๐Ÿ’ฆ sweat droplets
+๐Ÿ’จ dashing away
+๐Ÿ•ณ๏ธ hole
+๐Ÿ’ฃ bomb
+๐Ÿ’ฌ speech balloon
+๐Ÿ—จ๏ธ left speech bubble
+๐Ÿ—ฏ๏ธ right anger bubble
+๐Ÿ’ญ thought balloon
+๐Ÿ’ค zzz
+๐Ÿ‘‹ waving hand
+๐Ÿคš raised back of hand
+๐Ÿ–๏ธ hand with fingers splayed
+โœ‹ raised hand
+๐Ÿ–– vulcan salute
+๐Ÿซฑ rightwards hand
+๐Ÿซฒ leftwards hand
+๐Ÿซณ palm down hand
+๐Ÿซด palm up hand
+๐Ÿ‘Œ OK hand
+๐ŸคŒ pinched fingers
+๐Ÿค pinching hand
+โœŒ๏ธ victory hand
+๐Ÿคž crossed fingers
+๐Ÿซฐ hand with index finger and thumb crossed
+๐ŸคŸ love-you gesture
+๐Ÿค˜ sign of the horns
+๐Ÿค™ call me hand
+๐Ÿ‘ˆ backhand index pointing left
+๐Ÿ‘‰ backhand index pointing right
+๐Ÿ‘† backhand index pointing up
+๐Ÿ–• middle finger
+๐Ÿ‘‡ backhand index pointing down
+โ˜๏ธ index pointing up
+๐Ÿซต index pointing at the viewer
+๐Ÿ‘ thumbs up
+๐Ÿ‘Ž thumbs down
+โœŠ raised fist
+๐Ÿ‘Š oncoming fist
+๐Ÿค› left-facing fist
+๐Ÿคœ right-facing fist
+๐Ÿ‘ clapping hands
+๐Ÿ™Œ raising hands
+๐Ÿซถ heart hands
+๐Ÿ‘ open hands
+๐Ÿคฒ palms up together
+๐Ÿค handshake
+๐Ÿ™ folded hands
+โœ๏ธ writing hand
+๐Ÿ’… nail polish
+๐Ÿคณ selfie
+๐Ÿ’ช flexed biceps
+๐Ÿฆพ mechanical arm
+๐Ÿฆฟ mechanical leg
+๐Ÿฆต leg
+๐Ÿฆถ foot
+๐Ÿ‘‚ ear
+๐Ÿฆป ear with hearing aid
+๐Ÿ‘ƒ nose
+๐Ÿง  brain
+๐Ÿซ€ anatomical heart
+๐Ÿซ lungs
+๐Ÿฆท tooth
+๐Ÿฆด bone
+๐Ÿ‘€ eyes
+๐Ÿ‘๏ธ eye
+๐Ÿ‘… tongue
+๐Ÿ‘„ mouth
+๐Ÿซฆ biting lip
+๐Ÿ‘ถ baby
+๐Ÿง’ child
+๐Ÿ‘ฆ boy
+๐Ÿ‘ง girl
+๐Ÿง‘ person
+๐Ÿ‘ฑ person: blond hair
+๐Ÿ‘จ man
+๐Ÿง” person: beard
+๐Ÿ‘ฉ woman
+๐Ÿง“ older person
+๐Ÿ‘ด old man
+๐Ÿ‘ต old woman
+๐Ÿ™ person frowning
+๐Ÿ™Ž person pouting
+๐Ÿ™… person gesturing NO
+๐Ÿ™† person gesturing OK
+๐Ÿ’ person tipping hand
+๐Ÿ™‹ person raising hand
+๐Ÿง deaf person
+๐Ÿ™‡ person bowing
+๐Ÿคฆ person facepalming
+๐Ÿคท person shrugging
+๐Ÿ‘ฎ police officer
+๐Ÿ•ต๏ธ detective
+๐Ÿ’‚ guard
+๐Ÿฅท ninja
+๐Ÿ‘ท construction worker
+๐Ÿซ… person with crown
+๐Ÿคด prince
+๐Ÿ‘ธ princess
+๐Ÿ‘ณ person wearing turban
+๐Ÿ‘ฒ person with skullcap
+๐Ÿง• woman with headscarf
+๐Ÿคต person in tuxedo
+๐Ÿ‘ฐ person with veil
+๐Ÿคฐ pregnant woman
+๐Ÿซƒ pregnant man
+๐Ÿซ„ pregnant person
+๐Ÿคฑ breast-feeding
+๐Ÿ‘ผ baby angel
+๐ŸŽ… Santa Claus
+๐Ÿคถ Mrs. Claus
+๐Ÿฆธ superhero
+๐Ÿฆน supervillain
+๐Ÿง™ mage
+๐Ÿงš fairy
+๐Ÿง› vampire
+๐Ÿงœ merperson
+๐Ÿง elf
+๐Ÿงž genie
+๐ŸงŸ zombie
+๐ŸงŒ troll
+๐Ÿ’† person getting massage
+๐Ÿ’‡ person getting haircut
+๐Ÿšถ person walking
+๐Ÿง person standing
+๐ŸงŽ person kneeling
+๐Ÿƒ person running
+๐Ÿ’ƒ woman dancing
+๐Ÿ•บ man dancing
+๐Ÿ•ด๏ธ person in suit levitating
+๐Ÿ‘ฏ people with bunny ears
+๐Ÿง– person in steamy room
+๐Ÿง— person climbing
+๐Ÿคบ person fencing
+๐Ÿ‡ horse racing
+โ›ท๏ธ skier
+๐Ÿ‚ snowboarder
+๐ŸŒ๏ธ person golfing
+๐Ÿ„ person surfing
+๐Ÿšฃ person rowing boat
+๐ŸŠ person swimming
+โ›น๏ธ person bouncing ball
+๐Ÿ‹๏ธ person lifting weights
+๐Ÿšด person biking
+๐Ÿšต person mountain biking
+๐Ÿคธ person cartwheeling
+๐Ÿคผ people wrestling
+๐Ÿคฝ person playing water polo
+๐Ÿคพ person playing handball
+๐Ÿคน person juggling
+๐Ÿง˜ person in lotus position
+๐Ÿ›€ person taking bath
+๐Ÿ›Œ person in bed
+๐Ÿ‘ญ women holding hands
+๐Ÿ‘ซ woman and man holding hands
+๐Ÿ‘ฌ men holding hands
+๐Ÿ’ kiss
+๐Ÿ’‘ couple with heart
+๐Ÿ‘ช family
+๐Ÿ—ฃ๏ธ speaking head
+๐Ÿ‘ค bust in silhouette
+๐Ÿ‘ฅ busts in silhouette
+๐Ÿซ‚ people hugging
+๐Ÿ‘ฃ footprints
+๐Ÿต monkey face
+๐Ÿ’ monkey
+๐Ÿฆ gorilla
+๐Ÿฆง orangutan
+๐Ÿถ dog face
+๐Ÿ• dog
+๐Ÿฆฎ guide dog
+๐Ÿฉ poodle
+๐Ÿบ wolf
+๐ŸฆŠ fox
+๐Ÿฆ raccoon
+๐Ÿฑ cat face
+๐Ÿˆ cat
+๐Ÿฆ lion
+๐Ÿฏ tiger face
+๐Ÿ… tiger
+๐Ÿ† leopard
+๐Ÿด horse face
+๐ŸŽ horse
+๐Ÿฆ„ unicorn
+๐Ÿฆ“ zebra
+๐ŸฆŒ deer
+๐Ÿฆฌ bison
+๐Ÿฎ cow face
+๐Ÿ‚ ox
+๐Ÿƒ water buffalo
+๐Ÿ„ cow
+๐Ÿท pig face
+๐Ÿ– pig
+๐Ÿ— boar
+๐Ÿฝ pig nose
+๐Ÿ ram
+๐Ÿ‘ ewe
+๐Ÿ goat
+๐Ÿช camel
+๐Ÿซ two-hump camel
+๐Ÿฆ™ llama
+๐Ÿฆ’ giraffe
+๐Ÿ˜ elephant
+๐Ÿฆฃ mammoth
+๐Ÿฆ rhinoceros
+๐Ÿฆ› hippopotamus
+๐Ÿญ mouse face
+๐Ÿ mouse
+๐Ÿ€ rat
+๐Ÿน hamster
+๐Ÿฐ rabbit face
+๐Ÿ‡ rabbit
+๐Ÿฟ๏ธ chipmunk
+๐Ÿฆซ beaver
+๐Ÿฆ” hedgehog
+๐Ÿฆ‡ bat
+๐Ÿป bear
+๐Ÿจ koala
+๐Ÿผ panda
+๐Ÿฆฅ sloth
+๐Ÿฆฆ otter
+๐Ÿฆจ skunk
+๐Ÿฆ˜ kangaroo
+๐Ÿฆก badger
+๐Ÿพ paw prints
+๐Ÿฆƒ turkey
+๐Ÿ” chicken
+๐Ÿ“ rooster
+๐Ÿฃ hatching chick
+๐Ÿค baby chick
+๐Ÿฅ front-facing baby chick
+๐Ÿฆ bird
+๐Ÿง penguin
+๐Ÿ•Š๏ธ dove
+๐Ÿฆ… eagle
+๐Ÿฆ† duck
+๐Ÿฆข swan
+๐Ÿฆ‰ owl
+๐Ÿฆค dodo
+๐Ÿชถ feather
+๐Ÿฆฉ flamingo
+๐Ÿฆš peacock
+๐Ÿฆœ parrot
+๐Ÿธ frog
+๐ŸŠ crocodile
+๐Ÿข turtle
+๐ŸฆŽ lizard
+๐Ÿ snake
+๐Ÿฒ dragon face
+๐Ÿ‰ dragon
+๐Ÿฆ• sauropod
+๐Ÿฆ– T-Rex
+๐Ÿณ spouting whale
+๐Ÿ‹ whale
+๐Ÿฌ dolphin
+๐Ÿฆญ seal
+๐ŸŸ fish
+๐Ÿ  tropical fish
+๐Ÿก blowfish
+๐Ÿฆˆ shark
+๐Ÿ™ octopus
+๐Ÿš spiral shell
+๐Ÿชธ coral
+๐ŸŒ snail
+๐Ÿฆ‹ butterfly
+๐Ÿ› bug
+๐Ÿœ ant
+๐Ÿ honeybee
+๐Ÿชฒ beetle
+๐Ÿž lady beetle
+๐Ÿฆ— cricket
+๐Ÿชณ cockroach
+๐Ÿ•ท๏ธ spider
+๐Ÿ•ธ๏ธ spider web
+๐Ÿฆ‚ scorpion
+๐ŸฆŸ mosquito
+๐Ÿชฐ fly
+๐Ÿชฑ worm
+๐Ÿฆ  microbe
+๐Ÿ’ bouquet
+๐ŸŒธ cherry blossom
+๐Ÿ’ฎ white flower
+๐Ÿชท lotus
+๐Ÿต๏ธ rosette
+๐ŸŒน rose
+๐Ÿฅ€ wilted flower
+๐ŸŒบ hibiscus
+๐ŸŒป sunflower
+๐ŸŒผ blossom
+๐ŸŒท tulip
+๐ŸŒฑ seedling
+๐Ÿชด potted plant
+๐ŸŒฒ evergreen tree
+๐ŸŒณ deciduous tree
+๐ŸŒด palm tree
+๐ŸŒต cactus
+๐ŸŒพ sheaf of rice
+๐ŸŒฟ herb
+โ˜˜๏ธ shamrock
+๐Ÿ€ four leaf clover
+๐Ÿ maple leaf
+๐Ÿ‚ fallen leaf
+๐Ÿƒ leaf fluttering in wind
+๐Ÿชน empty nest
+๐Ÿชบ nest with eggs
+๐Ÿ‡ grapes
+๐Ÿˆ melon
+๐Ÿ‰ watermelon
+๐ŸŠ tangerine
+๐Ÿ‹ lemon
+๐ŸŒ banana
+๐Ÿ pineapple
+๐Ÿฅญ mango
+๐ŸŽ red apple
+๐Ÿ green apple
+๐Ÿ pear
+๐Ÿ‘ peach
+๐Ÿ’ cherries
+๐Ÿ“ strawberry
+๐Ÿซ blueberries
+๐Ÿฅ kiwi fruit
+๐Ÿ… tomato
+๐Ÿซ’ olive
+๐Ÿฅฅ coconut
+๐Ÿฅ‘ avocado
+๐Ÿ† eggplant
+๐Ÿฅ” potato
+๐Ÿฅ• carrot
+๐ŸŒฝ ear of corn
+๐ŸŒถ๏ธ hot pepper
+๐Ÿซ‘ bell pepper
+๐Ÿฅ’ cucumber
+๐Ÿฅฌ leafy green
+๐Ÿฅฆ broccoli
+๐Ÿง„ garlic
+๐Ÿง… onion
+๐Ÿ„ mushroom
+๐Ÿฅœ peanuts
+๐Ÿซ˜ beans
+๐ŸŒฐ chestnut
+๐Ÿž bread
+๐Ÿฅ croissant
+๐Ÿฅ– baguette bread
+๐Ÿซ“ flatbread
+๐Ÿฅจ pretzel
+๐Ÿฅฏ bagel
+๐Ÿฅž pancakes
+๐Ÿง‡ waffle
+๐Ÿง€ cheese wedge
+๐Ÿ– meat on bone
+๐Ÿ— poultry leg
+๐Ÿฅฉ cut of meat
+๐Ÿฅ“ bacon
+๐Ÿ” hamburger
+๐ŸŸ french fries
+๐Ÿ• pizza
+๐ŸŒญ hot dog
+๐Ÿฅช sandwich
+๐ŸŒฎ taco
+๐ŸŒฏ burrito
+๐Ÿซ” tamale
+๐Ÿฅ™ stuffed flatbread
+๐Ÿง† falafel
+๐Ÿฅš egg
+๐Ÿณ cooking
+๐Ÿฅ˜ shallow pan of food
+๐Ÿฒ pot of food
+๐Ÿซ• fondue
+๐Ÿฅฃ bowl with spoon
+๐Ÿฅ— green salad
+๐Ÿฟ popcorn
+๐Ÿงˆ butter
+๐Ÿง‚ salt
+๐Ÿฅซ canned food
+๐Ÿฑ bento box
+๐Ÿ˜ rice cracker
+๐Ÿ™ rice ball
+๐Ÿš cooked rice
+๐Ÿ› curry rice
+๐Ÿœ steaming bowl
+๐Ÿ spaghetti
+๐Ÿ  roasted sweet potato
+๐Ÿข oden
+๐Ÿฃ sushi
+๐Ÿค fried shrimp
+๐Ÿฅ fish cake with swirl
+๐Ÿฅฎ moon cake
+๐Ÿก dango
+๐ŸฅŸ dumpling
+๐Ÿฅ  fortune cookie
+๐Ÿฅก takeout box
+๐Ÿฆ€ crab
+๐Ÿฆž lobster
+๐Ÿฆ shrimp
+๐Ÿฆ‘ squid
+๐Ÿฆช oyster
+๐Ÿฆ soft ice cream
+๐Ÿง shaved ice
+๐Ÿจ ice cream
+๐Ÿฉ doughnut
+๐Ÿช cookie
+๐ŸŽ‚ birthday cake
+๐Ÿฐ shortcake
+๐Ÿง cupcake
+๐Ÿฅง pie
+๐Ÿซ chocolate bar
+๐Ÿฌ candy
+๐Ÿญ lollipop
+๐Ÿฎ custard
+๐Ÿฏ honey pot
+๐Ÿผ baby bottle
+๐Ÿฅ› glass of milk
+โ˜• hot beverage
+๐Ÿซ– teapot
+๐Ÿต teacup without handle
+๐Ÿถ sake
+๐Ÿพ bottle with popping cork
+๐Ÿท wine glass
+๐Ÿธ cocktail glass
+๐Ÿน tropical drink
+๐Ÿบ beer mug
+๐Ÿป clinking beer mugs
+๐Ÿฅ‚ clinking glasses
+๐Ÿฅƒ tumbler glass
+๐Ÿซ— pouring liquid
+๐Ÿฅค cup with straw
+๐Ÿง‹ bubble tea
+๐Ÿงƒ beverage box
+๐Ÿง‰ mate
+๐ŸงŠ ice
+๐Ÿฅข chopsticks
+๐Ÿฝ๏ธ fork and knife with plate
+๐Ÿด fork and knife
+๐Ÿฅ„ spoon
+๐Ÿ”ช kitchen knife
+๐Ÿซ™ jar
+๐Ÿบ amphora
+๐ŸŒ globe showing Europe-Africa
+๐ŸŒŽ globe showing Americas
+๐ŸŒ globe showing Asia-Australia
+๐ŸŒ globe with meridians
+๐Ÿ—บ๏ธ world map
+๐Ÿ—พ map of Japan
+๐Ÿงญ compass
+๐Ÿ”๏ธ snow-capped mountain
+โ›ฐ๏ธ mountain
+๐ŸŒ‹ volcano
+๐Ÿ—ป mount fuji
+๐Ÿ•๏ธ camping
+๐Ÿ–๏ธ beach with umbrella
+๐Ÿœ๏ธ desert
+๐Ÿ๏ธ desert island
+๐Ÿž๏ธ national park
+๐ŸŸ๏ธ stadium
+๐Ÿ›๏ธ classical building
+๐Ÿ—๏ธ building construction
+๐Ÿงฑ brick
+๐Ÿชจ rock
+๐Ÿชต wood
+๐Ÿ›– hut
+๐Ÿ˜๏ธ houses
+๐Ÿš๏ธ derelict house
+๐Ÿ  house
+๐Ÿก house with garden
+๐Ÿข office building
+๐Ÿฃ Japanese post office
+๐Ÿค post office
+๐Ÿฅ hospital
+๐Ÿฆ bank
+๐Ÿจ hotel
+๐Ÿฉ love hotel
+๐Ÿช convenience store
+๐Ÿซ school
+๐Ÿฌ department store
+๐Ÿญ factory
+๐Ÿฏ Japanese castle
+๐Ÿฐ castle
+๐Ÿ’’ wedding
+๐Ÿ—ผ Tokyo tower
+๐Ÿ—ฝ Statue of Liberty
+โ›ช church
+๐Ÿ•Œ mosque
+๐Ÿ›• hindu temple
+๐Ÿ• synagogue
+โ›ฉ๏ธ shinto shrine
+๐Ÿ•‹ kaaba
+โ›ฒ fountain
+โ›บ tent
+๐ŸŒ foggy
+๐ŸŒƒ night with stars
+๐Ÿ™๏ธ cityscape
+๐ŸŒ„ sunrise over mountains
+๐ŸŒ… sunrise
+๐ŸŒ† cityscape at dusk
+๐ŸŒ‡ sunset
+๐ŸŒ‰ bridge at night
+โ™จ๏ธ hot springs
+๐ŸŽ  carousel horse
+๐Ÿ› playground slide
+๐ŸŽก ferris wheel
+๐ŸŽข roller coaster
+๐Ÿ’ˆ barber pole
+๐ŸŽช circus tent
+๐Ÿš‚ locomotive
+๐Ÿšƒ railway car
+๐Ÿš„ high-speed train
+๐Ÿš… bullet train
+๐Ÿš† train
+๐Ÿš‡ metro
+๐Ÿšˆ light rail
+๐Ÿš‰ station
+๐ŸšŠ tram
+๐Ÿš monorail
+๐Ÿšž mountain railway
+๐Ÿš‹ tram car
+๐ŸšŒ bus
+๐Ÿš oncoming bus
+๐ŸšŽ trolleybus
+๐Ÿš minibus
+๐Ÿš‘ ambulance
+๐Ÿš’ fire engine
+๐Ÿš“ police car
+๐Ÿš” oncoming police car
+๐Ÿš• taxi
+๐Ÿš– oncoming taxi
+๐Ÿš— automobile
+๐Ÿš˜ oncoming automobile
+๐Ÿš™ sport utility vehicle
+๐Ÿ›ป pickup truck
+๐Ÿšš delivery truck
+๐Ÿš› articulated lorry
+๐Ÿšœ tractor
+๐ŸŽ๏ธ racing car
+๐Ÿ๏ธ motorcycle
+๐Ÿ›ต motor scooter
+๐Ÿฆฝ manual wheelchair
+๐Ÿฆผ motorized wheelchair
+๐Ÿ›บ auto rickshaw
+๐Ÿšฒ bicycle
+๐Ÿ›ด kick scooter
+๐Ÿ›น skateboard
+๐Ÿ›ผ roller skate
+๐Ÿš bus stop
+๐Ÿ›ฃ๏ธ motorway
+๐Ÿ›ค๏ธ railway track
+๐Ÿ›ข๏ธ oil drum
+โ›ฝ fuel pump
+๐Ÿ›ž wheel
+๐Ÿšจ police car light
+๐Ÿšฅ horizontal traffic light
+๐Ÿšฆ vertical traffic light
+๐Ÿ›‘ stop sign
+๐Ÿšง construction
+โš“ anchor
+๐Ÿ›Ÿ ring buoy
+โ›ต sailboat
+๐Ÿ›ถ canoe
+๐Ÿšค speedboat
+๐Ÿ›ณ๏ธ passenger ship
+โ›ด๏ธ ferry
+๐Ÿ›ฅ๏ธ motor boat
+๐Ÿšข ship
+โœˆ๏ธ airplane
+๐Ÿ›ฉ๏ธ small airplane
+๐Ÿ›ซ airplane departure
+๐Ÿ›ฌ airplane arrival
+๐Ÿช‚ parachute
+๐Ÿ’บ seat
+๐Ÿš helicopter
+๐ŸšŸ suspension railway
+๐Ÿš  mountain cableway
+๐Ÿšก aerial tramway
+๐Ÿ›ฐ๏ธ satellite
+๐Ÿš€ rocket
+๐Ÿ›ธ flying saucer
+๐Ÿ›Ž๏ธ bellhop bell
+๐Ÿงณ luggage
+โŒ› hourglass done
+โณ hourglass not done
+โŒš watch
+โฐ alarm clock
+โฑ๏ธ stopwatch
+โฒ๏ธ timer clock
+๐Ÿ•ฐ๏ธ mantelpiece clock
+๐Ÿ•› twelve oโ€™clock
+๐Ÿ•ง twelve-thirty
+๐Ÿ• one oโ€™clock
+๐Ÿ•œ one-thirty
+๐Ÿ•‘ two oโ€™clock
+๐Ÿ• two-thirty
+๐Ÿ•’ three oโ€™clock
+๐Ÿ•ž three-thirty
+๐Ÿ•“ four oโ€™clock
+๐Ÿ•Ÿ four-thirty
+๐Ÿ•” five oโ€™clock
+๐Ÿ•  five-thirty
+๐Ÿ•• six oโ€™clock
+๐Ÿ•ก six-thirty
+๐Ÿ•– seven oโ€™clock
+๐Ÿ•ข seven-thirty
+๐Ÿ•— eight oโ€™clock
+๐Ÿ•ฃ eight-thirty
+๐Ÿ•˜ nine oโ€™clock
+๐Ÿ•ค nine-thirty
+๐Ÿ•™ ten oโ€™clock
+๐Ÿ•ฅ ten-thirty
+๐Ÿ•š eleven oโ€™clock
+๐Ÿ•ฆ eleven-thirty
+๐ŸŒ‘ new moon
+๐ŸŒ’ waxing crescent moon
+๐ŸŒ“ first quarter moon
+๐ŸŒ” waxing gibbous moon
+๐ŸŒ• full moon
+๐ŸŒ– waning gibbous moon
+๐ŸŒ— last quarter moon
+๐ŸŒ˜ waning crescent moon
+๐ŸŒ™ crescent moon
+๐ŸŒš new moon face
+๐ŸŒ› first quarter moon face
+๐ŸŒœ last quarter moon face
+๐ŸŒก๏ธ thermometer
+โ˜€๏ธ sun
+๐ŸŒ full moon face
+๐ŸŒž sun with face
+๐Ÿช ringed planet
+โญ star
+๐ŸŒŸ glowing star
+๐ŸŒ  shooting star
+๐ŸŒŒ milky way
+โ˜๏ธ cloud
+โ›… sun behind cloud
+โ›ˆ๏ธ cloud with lightning and rain
+๐ŸŒค๏ธ sun behind small cloud
+๐ŸŒฅ๏ธ sun behind large cloud
+๐ŸŒฆ๏ธ sun behind rain cloud
+๐ŸŒง๏ธ cloud with rain
+๐ŸŒจ๏ธ cloud with snow
+๐ŸŒฉ๏ธ cloud with lightning
+๐ŸŒช๏ธ tornado
+๐ŸŒซ๏ธ fog
+๐ŸŒฌ๏ธ wind face
+๐ŸŒ€ cyclone
+๐ŸŒˆ rainbow
+๐ŸŒ‚ closed umbrella
+โ˜‚๏ธ umbrella
+โ˜” umbrella with rain drops
+โ›ฑ๏ธ umbrella on ground
+โšก high voltage
+โ„๏ธ snowflake
+โ˜ƒ๏ธ snowman
+โ›„ snowman without snow
+โ˜„๏ธ comet
+๐Ÿ”ฅ fire
+๐Ÿ’ง droplet
+๐ŸŒŠ water wave
+๐ŸŽƒ jack-o-lantern
+๐ŸŽ„ Christmas tree
+๐ŸŽ† fireworks
+๐ŸŽ‡ sparkler
+๐Ÿงจ firecracker
+โœจ sparkles
+๐ŸŽˆ balloon
+๐ŸŽ‰ party popper
+๐ŸŽŠ confetti ball
+๐ŸŽ‹ tanabata tree
+๐ŸŽ pine decoration
+๐ŸŽŽ Japanese dolls
+๐ŸŽ carp streamer
+๐ŸŽ wind chime
+๐ŸŽ‘ moon viewing ceremony
+๐Ÿงง red envelope
+๐ŸŽ€ ribbon
+๐ŸŽ wrapped gift
+๐ŸŽ—๏ธ reminder ribbon
+๐ŸŽŸ๏ธ admission tickets
+๐ŸŽซ ticket
+๐ŸŽ–๏ธ military medal
+๐Ÿ† trophy
+๐Ÿ… sports medal
+๐Ÿฅ‡ 1st place medal
+๐Ÿฅˆ 2nd place medal
+๐Ÿฅ‰ 3rd place medal
+โšฝ soccer ball
+โšพ baseball
+๐ŸฅŽ softball
+๐Ÿ€ basketball
+๐Ÿ volleyball
+๐Ÿˆ american football
+๐Ÿ‰ rugby football
+๐ŸŽพ tennis
+๐Ÿฅ flying disc
+๐ŸŽณ bowling
+๐Ÿ cricket game
+๐Ÿ‘ field hockey
+๐Ÿ’ ice hockey
+๐Ÿฅ lacrosse
+๐Ÿ“ ping pong
+๐Ÿธ badminton
+๐ŸฅŠ boxing glove
+๐Ÿฅ‹ martial arts uniform
+๐Ÿฅ… goal net
+โ›ณ flag in hole
+โ›ธ๏ธ ice skate
+๐ŸŽฃ fishing pole
+๐Ÿคฟ diving mask
+๐ŸŽฝ running shirt
+๐ŸŽฟ skis
+๐Ÿ›ท sled
+๐ŸฅŒ curling stone
+๐ŸŽฏ bullseye
+๐Ÿช€ yo-yo
+๐Ÿช kite
+๐ŸŽฑ pool 8 ball
+๐Ÿ”ฎ crystal ball
+๐Ÿช„ magic wand
+๐Ÿงฟ nazar amulet
+๐Ÿชฌ hamsa
+๐ŸŽฎ video game
+๐Ÿ•น๏ธ joystick
+๐ŸŽฐ slot machine
+๐ŸŽฒ game die
+๐Ÿงฉ puzzle piece
+๐Ÿงธ teddy bear
+๐Ÿช… piรฑata
+๐Ÿชฉ mirror ball
+๐Ÿช† nesting dolls
+โ™ ๏ธ spade suit
+โ™ฅ๏ธ heart suit
+โ™ฆ๏ธ diamond suit
+โ™ฃ๏ธ club suit
+โ™Ÿ๏ธ chess pawn
+๐Ÿƒ joker
+๐Ÿ€„ mahjong red dragon
+๐ŸŽด flower playing cards
+๐ŸŽญ performing arts
+๐Ÿ–ผ๏ธ framed picture
+๐ŸŽจ artist palette
+๐Ÿงต thread
+๐Ÿชก sewing needle
+๐Ÿงถ yarn
+๐Ÿชข knot
+๐Ÿ‘“ glasses
+๐Ÿ•ถ๏ธ sunglasses
+๐Ÿฅฝ goggles
+๐Ÿฅผ lab coat
+๐Ÿฆบ safety vest
+๐Ÿ‘” necktie
+๐Ÿ‘• t-shirt
+๐Ÿ‘– jeans
+๐Ÿงฃ scarf
+๐Ÿงค gloves
+๐Ÿงฅ coat
+๐Ÿงฆ socks
+๐Ÿ‘— dress
+๐Ÿ‘˜ kimono
+๐Ÿฅป sari
+๐Ÿฉฑ one-piece swimsuit
+๐Ÿฉฒ briefs
+๐Ÿฉณ shorts
+๐Ÿ‘™ bikini
+๐Ÿ‘š womanโ€™s clothes
+๐Ÿ‘› purse
+๐Ÿ‘œ handbag
+๐Ÿ‘ clutch bag
+๐Ÿ›๏ธ shopping bags
+๐ŸŽ’ backpack
+๐Ÿฉด thong sandal
+๐Ÿ‘ž manโ€™s shoe
+๐Ÿ‘Ÿ running shoe
+๐Ÿฅพ hiking boot
+๐Ÿฅฟ flat shoe
+๐Ÿ‘  high-heeled shoe
+๐Ÿ‘ก womanโ€™s sandal
+๐Ÿฉฐ ballet shoes
+๐Ÿ‘ข womanโ€™s boot
+๐Ÿ‘‘ crown
+๐Ÿ‘’ womanโ€™s hat
+๐ŸŽฉ top hat
+๐ŸŽ“ graduation cap
+๐Ÿงข billed cap
+๐Ÿช– military helmet
+โ›‘๏ธ rescue workerโ€™s helmet
+๐Ÿ“ฟ prayer beads
+๐Ÿ’„ lipstick
+๐Ÿ’ ring
+๐Ÿ’Ž gem stone
+๐Ÿ”‡ muted speaker
+๐Ÿ”ˆ speaker low volume
+๐Ÿ”‰ speaker medium volume
+๐Ÿ”Š speaker high volume
+๐Ÿ“ข loudspeaker
+๐Ÿ“ฃ megaphone
+๐Ÿ“ฏ postal horn
+๐Ÿ”” bell
+๐Ÿ”• bell with slash
+๐ŸŽผ musical score
+๐ŸŽต musical note
+๐ŸŽถ musical notes
+๐ŸŽ™๏ธ studio microphone
+๐ŸŽš๏ธ level slider
+๐ŸŽ›๏ธ control knobs
+๐ŸŽค microphone
+๐ŸŽง headphone
+๐Ÿ“ป radio
+๐ŸŽท saxophone
+๐Ÿช— accordion
+๐ŸŽธ guitar
+๐ŸŽน musical keyboard
+๐ŸŽบ trumpet
+๐ŸŽป violin
+๐Ÿช• banjo
+๐Ÿฅ drum
+๐Ÿช˜ long drum
+๐Ÿ“ฑ mobile phone
+๐Ÿ“ฒ mobile phone with arrow
+โ˜Ž๏ธ telephone
+๐Ÿ“ž telephone receiver
+๐Ÿ“Ÿ pager
+๐Ÿ“  fax machine
+๐Ÿ”‹ battery
+๐Ÿชซ low battery
+๐Ÿ”Œ electric plug
+๐Ÿ’ป laptop
+๐Ÿ–ฅ๏ธ desktop computer
+๐Ÿ–จ๏ธ printer
+โŒจ๏ธ keyboard
+๐Ÿ–ฑ๏ธ computer mouse
+๐Ÿ–ฒ๏ธ trackball
+๐Ÿ’ฝ computer disk
+๐Ÿ’พ floppy disk
+๐Ÿ’ฟ optical disk
+๐Ÿ“€ dvd
+๐Ÿงฎ abacus
+๐ŸŽฅ movie camera
+๐ŸŽž๏ธ film frames
+๐Ÿ“ฝ๏ธ film projector
+๐ŸŽฌ clapper board
+๐Ÿ“บ television
+๐Ÿ“ท camera
+๐Ÿ“ธ camera with flash
+๐Ÿ“น video camera
+๐Ÿ“ผ videocassette
+๐Ÿ” magnifying glass tilted left
+๐Ÿ”Ž magnifying glass tilted right
+๐Ÿ•ฏ๏ธ candle
+๐Ÿ’ก light bulb
+๐Ÿ”ฆ flashlight
+๐Ÿฎ red paper lantern
+๐Ÿช” diya lamp
+๐Ÿ“” notebook with decorative cover
+๐Ÿ“• closed book
+๐Ÿ“– open book
+๐Ÿ“— green book
+๐Ÿ“˜ blue book
+๐Ÿ“™ orange book
+๐Ÿ“š books
+๐Ÿ““ notebook
+๐Ÿ“’ ledger
+๐Ÿ“ƒ page with curl
+๐Ÿ“œ scroll
+๐Ÿ“„ page facing up
+๐Ÿ“ฐ newspaper
+๐Ÿ—ž๏ธ rolled-up newspaper
+๐Ÿ“‘ bookmark tabs
+๐Ÿ”– bookmark
+๐Ÿท๏ธ label
+๐Ÿ’ฐ money bag
+๐Ÿช™ coin
+๐Ÿ’ด yen banknote
+๐Ÿ’ต dollar banknote
+๐Ÿ’ถ euro banknote
+๐Ÿ’ท pound banknote
+๐Ÿ’ธ money with wings
+๐Ÿ’ณ credit card
+๐Ÿงพ receipt
+๐Ÿ’น chart increasing with yen
+โœ‰๏ธ envelope
+๐Ÿ“ง e-mail
+๐Ÿ“จ incoming envelope
+๐Ÿ“ฉ envelope with arrow
+๐Ÿ“ค outbox tray
+๐Ÿ“ฅ inbox tray
+๐Ÿ“ฆ package
+๐Ÿ“ซ closed mailbox with raised flag
+๐Ÿ“ช closed mailbox with lowered flag
+๐Ÿ“ฌ open mailbox with raised flag
+๐Ÿ“ญ open mailbox with lowered flag
+๐Ÿ“ฎ postbox
+๐Ÿ—ณ๏ธ ballot box with ballot
+โœ๏ธ pencil
+โœ’๏ธ black nib
+๐Ÿ–‹๏ธ fountain pen
+๐Ÿ–Š๏ธ pen
+๐Ÿ–Œ๏ธ paintbrush
+๐Ÿ–๏ธ crayon
+๐Ÿ“ memo
+๐Ÿ’ผ briefcase
+๐Ÿ“ file folder
+๐Ÿ“‚ open file folder
+๐Ÿ—‚๏ธ card index dividers
+๐Ÿ“… calendar
+๐Ÿ“† tear-off calendar
+๐Ÿ—’๏ธ spiral notepad
+๐Ÿ—“๏ธ spiral calendar
+๐Ÿ“‡ card index
+๐Ÿ“ˆ chart increasing
+๐Ÿ“‰ chart decreasing
+๐Ÿ“Š bar chart
+๐Ÿ“‹ clipboard
+๐Ÿ“Œ pushpin
+๐Ÿ“ round pushpin
+๐Ÿ“Ž paperclip
+๐Ÿ–‡๏ธ linked paperclips
+๐Ÿ“ straight ruler
+๐Ÿ“ triangular ruler
+โœ‚๏ธ scissors
+๐Ÿ—ƒ๏ธ card file box
+๐Ÿ—„๏ธ file cabinet
+๐Ÿ—‘๏ธ wastebasket
+๐Ÿ”’ locked
+๐Ÿ”“ unlocked
+๐Ÿ” locked with pen
+๐Ÿ” locked with key
+๐Ÿ”‘ key
+๐Ÿ—๏ธ old key
+๐Ÿ”จ hammer
+๐Ÿช“ axe
+โ›๏ธ pick
+โš’๏ธ hammer and pick
+๐Ÿ› ๏ธ hammer and wrench
+๐Ÿ—ก๏ธ dagger
+โš”๏ธ crossed swords
+๐Ÿ”ซ water pistol
+๐Ÿชƒ boomerang
+๐Ÿน bow and arrow
+๐Ÿ›ก๏ธ shield
+๐Ÿชš carpentry saw
+๐Ÿ”ง wrench
+๐Ÿช› screwdriver
+๐Ÿ”ฉ nut and bolt
+โš™๏ธ gear
+๐Ÿ—œ๏ธ clamp
+โš–๏ธ balance scale
+๐Ÿฆฏ white cane
+๐Ÿ”— link
+โ›“๏ธ chains
+๐Ÿช hook
+๐Ÿงฐ toolbox
+๐Ÿงฒ magnet
+๐Ÿชœ ladder
+โš—๏ธ alembic
+๐Ÿงช test tube
+๐Ÿงซ petri dish
+๐Ÿงฌ dna
+๐Ÿ”ฌ microscope
+๐Ÿ”ญ telescope
+๐Ÿ“ก satellite antenna
+๐Ÿ’‰ syringe
+๐Ÿฉธ drop of blood
+๐Ÿ’Š pill
+๐Ÿฉน adhesive bandage
+๐Ÿฉผ crutch
+๐Ÿฉบ stethoscope
+๐Ÿฉป x-ray
+๐Ÿšช door
+๐Ÿ›— elevator
+๐Ÿชž mirror
+๐ŸชŸ window
+๐Ÿ›๏ธ bed
+๐Ÿ›‹๏ธ couch and lamp
+๐Ÿช‘ chair
+๐Ÿšฝ toilet
+๐Ÿช  plunger
+๐Ÿšฟ shower
+๐Ÿ› bathtub
+๐Ÿชค mouse trap
+๐Ÿช’ razor
+๐Ÿงด lotion bottle
+๐Ÿงท safety pin
+๐Ÿงน broom
+๐Ÿงบ basket
+๐Ÿงป roll of paper
+๐Ÿชฃ bucket
+๐Ÿงผ soap
+๐Ÿซง bubbles
+๐Ÿชฅ toothbrush
+๐Ÿงฝ sponge
+๐Ÿงฏ fire extinguisher
+๐Ÿ›’ shopping cart
+๐Ÿšฌ cigarette
+โšฐ๏ธ coffin
+๐Ÿชฆ headstone
+โšฑ๏ธ funeral urn
+๐Ÿ—ฟ moai
+๐Ÿชง placard
+๐Ÿชช identification card
+๐Ÿง ATM sign
+๐Ÿšฎ litter in bin sign
+๐Ÿšฐ potable water
+โ™ฟ wheelchair symbol
+๐Ÿšน menโ€™s room
+๐Ÿšบ womenโ€™s room
+๐Ÿšป restroom
+๐Ÿšผ baby symbol
+๐Ÿšพ water closet
+๐Ÿ›‚ passport control
+๐Ÿ›ƒ customs
+๐Ÿ›„ baggage claim
+๐Ÿ›… left luggage
+โš ๏ธ warning
+๐Ÿšธ children crossing
+โ›” no entry
+๐Ÿšซ prohibited
+๐Ÿšณ no bicycles
+๐Ÿšญ no smoking
+๐Ÿšฏ no littering
+๐Ÿšฑ non-potable water
+๐Ÿšท no pedestrians
+๐Ÿ“ต no mobile phones
+๐Ÿ”ž no one under eighteen
+โ˜ข๏ธ radioactive
+โ˜ฃ๏ธ biohazard
+โฌ†๏ธ up arrow
+โ†—๏ธ up-right arrow
+โžก๏ธ right arrow
+โ†˜๏ธ down-right arrow
+โฌ‡๏ธ down arrow
+โ†™๏ธ down-left arrow
+โฌ…๏ธ left arrow
+โ†–๏ธ up-left arrow
+โ†•๏ธ up-down arrow
+โ†”๏ธ left-right arrow
+โ†ฉ๏ธ right arrow curving left
+โ†ช๏ธ left arrow curving right
+โคด๏ธ right arrow curving up
+โคต๏ธ right arrow curving down
+๐Ÿ”ƒ clockwise vertical arrows
+๐Ÿ”„ counterclockwise arrows button
+๐Ÿ”™ BACK arrow
+๐Ÿ”š END arrow
+๐Ÿ”› ON! arrow
+๐Ÿ”œ SOON arrow
+๐Ÿ” TOP arrow
+๐Ÿ› place of worship
+โš›๏ธ atom symbol
+๐Ÿ•‰๏ธ om
+โœก๏ธ star of David
+โ˜ธ๏ธ wheel of dharma
+โ˜ฏ๏ธ yin yang
+โœ๏ธ latin cross
+โ˜ฆ๏ธ orthodox cross
+โ˜ช๏ธ star and crescent
+โ˜ฎ๏ธ peace symbol
+๐Ÿ•Ž menorah
+๐Ÿ”ฏ dotted six-pointed star
+โ™ˆ Aries
+โ™‰ Taurus
+โ™Š Gemini
+โ™‹ Cancer
+โ™Œ Leo
+โ™ Virgo
+โ™Ž Libra
+โ™ Scorpio
+โ™ Sagittarius
+โ™‘ Capricorn
+โ™’ Aquarius
+โ™“ Pisces
+โ›Ž Ophiuchus
+๐Ÿ”€ shuffle tracks button
+๐Ÿ” repeat button
+๐Ÿ”‚ repeat single button
+โ–ถ๏ธ play button
+โฉ fast-forward button
+โญ๏ธ next track button
+โฏ๏ธ play or pause button
+โ—€๏ธ reverse button
+โช fast reverse button
+โฎ๏ธ last track button
+๐Ÿ”ผ upwards button
+โซ fast up button
+๐Ÿ”ฝ downwards button
+โฌ fast down button
+โธ๏ธ pause button
+โน๏ธ stop button
+โบ๏ธ record button
+โ๏ธ eject button
+๐ŸŽฆ cinema
+๐Ÿ”… dim button
+๐Ÿ”† bright button
+๐Ÿ“ถ antenna bars
+๐Ÿ“ณ vibration mode
+๐Ÿ“ด mobile phone off
+โ™€๏ธ female sign
+โ™‚๏ธ male sign
+โšง๏ธ transgender symbol
+โœ–๏ธ multiply
+โž• plus
+โž– minus
+โž— divide
+๐ŸŸฐ heavy equals sign
+โ™พ๏ธ infinity
+โ€ผ๏ธ double exclamation mark
+โ‰๏ธ exclamation question mark
+โ“ red question mark
+โ” white question mark
+โ• white exclamation mark
+โ— red exclamation mark
+ใ€ฐ๏ธ wavy dash
+๐Ÿ’ฑ currency exchange
+๐Ÿ’ฒ heavy dollar sign
+โš•๏ธ medical symbol
+โ™ป๏ธ recycling symbol
+โšœ๏ธ fleur-de-lis
+๐Ÿ”ฑ trident emblem
+๐Ÿ“› name badge
+๐Ÿ”ฐ Japanese symbol for beginner
+โญ• hollow red circle
+โœ… check mark button
+โ˜‘๏ธ check box with check
+โœ”๏ธ check mark
+โŒ cross mark
+โŽ cross mark button
+โžฐ curly loop
+โžฟ double curly loop
+ใ€ฝ๏ธ part alternation mark
+โœณ๏ธ eight-spoked asterisk
+โœด๏ธ eight-pointed star
+โ‡๏ธ sparkle
+ยฉ๏ธ copyright
+ยฎ๏ธ registered
+โ„ข๏ธ trade mark
+#๏ธโƒฃ keycap: #
+*๏ธโƒฃ keycap: *
+0๏ธโƒฃ keycap: 0
+1๏ธโƒฃ keycap: 1
+2๏ธโƒฃ keycap: 2
+3๏ธโƒฃ keycap: 3
+4๏ธโƒฃ keycap: 4
+5๏ธโƒฃ keycap: 5
+6๏ธโƒฃ keycap: 6
+7๏ธโƒฃ keycap: 7
+8๏ธโƒฃ keycap: 8
+9๏ธโƒฃ keycap: 9
+๐Ÿ”Ÿ keycap: 10
+๐Ÿ”  input latin uppercase
+๐Ÿ”ก input latin lowercase
+๐Ÿ”ข input numbers
+๐Ÿ”ฃ input symbols
+๐Ÿ”ค input latin letters
+๐Ÿ…ฐ๏ธ A button (blood type)
+๐Ÿ†Ž AB button (blood type)
+๐Ÿ…ฑ๏ธ B button (blood type)
+๐Ÿ†‘ CL button
+๐Ÿ†’ COOL button
+๐Ÿ†“ FREE button
+โ„น๏ธ information
+๐Ÿ†” ID button
+โ“‚๏ธ circled M
+๐Ÿ†• NEW button
+๐Ÿ†– NG button
+๐Ÿ…พ๏ธ O button (blood type)
+๐Ÿ†— OK button
+๐Ÿ…ฟ๏ธ P button
+๐Ÿ†˜ SOS button
+๐Ÿ†™ UP! button
+๐Ÿ†š VS button
+๐Ÿˆ Japanese โ€œhereโ€ button
+๐Ÿˆ‚๏ธ Japanese โ€œservice chargeโ€ button
+๐Ÿˆท๏ธ Japanese โ€œmonthly amountโ€ button
+๐Ÿˆถ Japanese โ€œnot free of chargeโ€ button
+๐Ÿˆฏ Japanese โ€œreservedโ€ button
+๐Ÿ‰ Japanese โ€œbargainโ€ button
+๐Ÿˆน Japanese โ€œdiscountโ€ button
+๐Ÿˆš Japanese โ€œfree of chargeโ€ button
+๐Ÿˆฒ Japanese โ€œprohibitedโ€ button
+๐Ÿ‰‘ Japanese โ€œacceptableโ€ button
+๐Ÿˆธ Japanese โ€œapplicationโ€ button
+๐Ÿˆด Japanese โ€œpassing gradeโ€ button
+๐Ÿˆณ Japanese โ€œvacancyโ€ button
+ใŠ—๏ธ Japanese โ€œcongratulationsโ€ button
+ใŠ™๏ธ Japanese โ€œsecretโ€ button
+๐Ÿˆบ Japanese โ€œopen for businessโ€ button
+๐Ÿˆต Japanese โ€œno vacancyโ€ button
+๐Ÿ”ด red circle
+๐ŸŸ  orange circle
+๐ŸŸก yellow circle
+๐ŸŸข green circle
+๐Ÿ”ต blue circle
+๐ŸŸฃ purple circle
+๐ŸŸค brown circle
+โšซ black circle
+โšช white circle
+๐ŸŸฅ red square
+๐ŸŸง orange square
+๐ŸŸจ yellow square
+๐ŸŸฉ green square
+๐ŸŸฆ blue square
+๐ŸŸช purple square
+๐ŸŸซ brown square
+โฌ› black large square
+โฌœ white large square
+โ—ผ๏ธ black medium square
+โ—ป๏ธ white medium square
+โ—พ black medium-small square
+โ—ฝ white medium-small square
+โ–ช๏ธ black small square
+โ–ซ๏ธ white small square
+๐Ÿ”ถ large orange diamond
+๐Ÿ”ท large blue diamond
+๐Ÿ”ธ small orange diamond
+๐Ÿ”น small blue diamond
+๐Ÿ”บ red triangle pointed up
+๐Ÿ”ป red triangle pointed down
+๐Ÿ’  diamond with a dot
+๐Ÿ”˜ radio button
+๐Ÿ”ณ white square button
+๐Ÿ”ฒ black square button
+๐Ÿ chequered flag
+๐Ÿšฉ triangular flag
+๐ŸŽŒ crossed flags
+๐Ÿด black flag
+๐Ÿณ๏ธ white flag
+๐Ÿ‡ฆ๐Ÿ‡จ flag: Ascension Island
+๐Ÿ‡ฆ๐Ÿ‡ฉ flag: Andorra
+๐Ÿ‡ฆ๐Ÿ‡ช flag: United Arab Emirates
+๐Ÿ‡ฆ๐Ÿ‡ซ flag: Afghanistan
+๐Ÿ‡ฆ๐Ÿ‡ฌ flag: Antigua & Barbuda
+๐Ÿ‡ฆ๐Ÿ‡ฎ flag: Anguilla
+๐Ÿ‡ฆ๐Ÿ‡ฑ flag: Albania
+๐Ÿ‡ฆ๐Ÿ‡ฒ flag: Armenia
+๐Ÿ‡ฆ๐Ÿ‡ด flag: Angola
+๐Ÿ‡ฆ๐Ÿ‡ถ flag: Antarctica
+๐Ÿ‡ฆ๐Ÿ‡ท flag: Argentina
+๐Ÿ‡ฆ๐Ÿ‡ธ flag: American Samoa
+๐Ÿ‡ฆ๐Ÿ‡น flag: Austria
+๐Ÿ‡ฆ๐Ÿ‡บ flag: Australia
+๐Ÿ‡ฆ๐Ÿ‡ผ flag: Aruba
+๐Ÿ‡ฆ๐Ÿ‡ฝ flag: ร…land Islands
+๐Ÿ‡ฆ๐Ÿ‡ฟ flag: Azerbaijan
+๐Ÿ‡ง๐Ÿ‡ฆ flag: Bosnia & Herzegovina
+๐Ÿ‡ง๐Ÿ‡ง flag: Barbados
+๐Ÿ‡ง๐Ÿ‡ฉ flag: Bangladesh
+๐Ÿ‡ง๐Ÿ‡ช flag: Belgium
+๐Ÿ‡ง๐Ÿ‡ซ flag: Burkina Faso
+๐Ÿ‡ง๐Ÿ‡ฌ flag: Bulgaria
+๐Ÿ‡ง๐Ÿ‡ญ flag: Bahrain
+๐Ÿ‡ง๐Ÿ‡ฎ flag: Burundi
+๐Ÿ‡ง๐Ÿ‡ฏ flag: Benin
+๐Ÿ‡ง๐Ÿ‡ฑ flag: St. Barthรฉlemy
+๐Ÿ‡ง๐Ÿ‡ฒ flag: Bermuda
+๐Ÿ‡ง๐Ÿ‡ณ flag: Brunei
+๐Ÿ‡ง๐Ÿ‡ด flag: Bolivia
+๐Ÿ‡ง๐Ÿ‡ถ flag: Caribbean Netherlands
+๐Ÿ‡ง๐Ÿ‡ท flag: Brazil
+๐Ÿ‡ง๐Ÿ‡ธ flag: Bahamas
+๐Ÿ‡ง๐Ÿ‡น flag: Bhutan
+๐Ÿ‡ง๐Ÿ‡ป flag: Bouvet Island
+๐Ÿ‡ง๐Ÿ‡ผ flag: Botswana
+๐Ÿ‡ง๐Ÿ‡พ flag: Belarus
+๐Ÿ‡ง๐Ÿ‡ฟ flag: Belize
+๐Ÿ‡จ๐Ÿ‡ฆ flag: Canada
+๐Ÿ‡จ๐Ÿ‡จ flag: Cocos (Keeling) Islands
+๐Ÿ‡จ๐Ÿ‡ฉ flag: Congo - Kinshasa
+๐Ÿ‡จ๐Ÿ‡ซ flag: Central African Republic
+๐Ÿ‡จ๐Ÿ‡ฌ flag: Congo - Brazzaville
+๐Ÿ‡จ๐Ÿ‡ญ flag: Switzerland
+๐Ÿ‡จ๐Ÿ‡ฎ flag: Cรดte dโ€™Ivoire
+๐Ÿ‡จ๐Ÿ‡ฐ flag: Cook Islands
+๐Ÿ‡จ๐Ÿ‡ฑ flag: Chile
+๐Ÿ‡จ๐Ÿ‡ฒ flag: Cameroon
+๐Ÿ‡จ๐Ÿ‡ณ flag: China
+๐Ÿ‡จ๐Ÿ‡ด flag: Colombia
+๐Ÿ‡จ๐Ÿ‡ต flag: Clipperton Island
+๐Ÿ‡จ๐Ÿ‡ท flag: Costa Rica
+๐Ÿ‡จ๐Ÿ‡บ flag: Cuba
+๐Ÿ‡จ๐Ÿ‡ป flag: Cape Verde
+๐Ÿ‡จ๐Ÿ‡ผ flag: Curaรงao
+๐Ÿ‡จ๐Ÿ‡ฝ flag: Christmas Island
+๐Ÿ‡จ๐Ÿ‡พ flag: Cyprus
+๐Ÿ‡จ๐Ÿ‡ฟ flag: Czechia
+๐Ÿ‡ฉ๐Ÿ‡ช flag: Germany
+๐Ÿ‡ฉ๐Ÿ‡ฌ flag: Diego Garcia
+๐Ÿ‡ฉ๐Ÿ‡ฏ flag: Djibouti
+๐Ÿ‡ฉ๐Ÿ‡ฐ flag: Denmark
+๐Ÿ‡ฉ๐Ÿ‡ฒ flag: Dominica
+๐Ÿ‡ฉ๐Ÿ‡ด flag: Dominican Republic
+๐Ÿ‡ฉ๐Ÿ‡ฟ flag: Algeria
+๐Ÿ‡ช๐Ÿ‡ฆ flag: Ceuta & Melilla
+๐Ÿ‡ช๐Ÿ‡จ flag: Ecuador
+๐Ÿ‡ช๐Ÿ‡ช flag: Estonia
+๐Ÿ‡ช๐Ÿ‡ฌ flag: Egypt
+๐Ÿ‡ช๐Ÿ‡ญ flag: Western Sahara
+๐Ÿ‡ช๐Ÿ‡ท flag: Eritrea
+๐Ÿ‡ช๐Ÿ‡ธ flag: Spain
+๐Ÿ‡ช๐Ÿ‡น flag: Ethiopia
+๐Ÿ‡ช๐Ÿ‡บ flag: European Union
+๐Ÿ‡ซ๐Ÿ‡ฎ flag: Finland
+๐Ÿ‡ซ๐Ÿ‡ฏ flag: Fiji
+๐Ÿ‡ซ๐Ÿ‡ฐ flag: Falkland Islands
+๐Ÿ‡ซ๐Ÿ‡ฒ flag: Micronesia
+๐Ÿ‡ซ๐Ÿ‡ด flag: Faroe Islands
+๐Ÿ‡ซ๐Ÿ‡ท flag: France
+๐Ÿ‡ฌ๐Ÿ‡ฆ flag: Gabon
+๐Ÿ‡ฌ๐Ÿ‡ง flag: United Kingdom
+๐Ÿ‡ฌ๐Ÿ‡ฉ flag: Grenada
+๐Ÿ‡ฌ๐Ÿ‡ช flag: Georgia
+๐Ÿ‡ฌ๐Ÿ‡ซ flag: French Guiana
+๐Ÿ‡ฌ๐Ÿ‡ฌ flag: Guernsey
+๐Ÿ‡ฌ๐Ÿ‡ญ flag: Ghana
+๐Ÿ‡ฌ๐Ÿ‡ฎ flag: Gibraltar
+๐Ÿ‡ฌ๐Ÿ‡ฑ flag: Greenland
+๐Ÿ‡ฌ๐Ÿ‡ฒ flag: Gambia
+๐Ÿ‡ฌ๐Ÿ‡ณ flag: Guinea
+๐Ÿ‡ฌ๐Ÿ‡ต flag: Guadeloupe
+๐Ÿ‡ฌ๐Ÿ‡ถ flag: Equatorial Guinea
+๐Ÿ‡ฌ๐Ÿ‡ท flag: Greece
+๐Ÿ‡ฌ๐Ÿ‡ธ flag: South Georgia & South Sandwich Islands
+๐Ÿ‡ฌ๐Ÿ‡น flag: Guatemala
+๐Ÿ‡ฌ๐Ÿ‡บ flag: Guam
+๐Ÿ‡ฌ๐Ÿ‡ผ flag: Guinea-Bissau
+๐Ÿ‡ฌ๐Ÿ‡พ flag: Guyana
+๐Ÿ‡ญ๐Ÿ‡ฐ flag: Hong Kong SAR China
+๐Ÿ‡ญ๐Ÿ‡ฒ flag: Heard & McDonald Islands
+๐Ÿ‡ญ๐Ÿ‡ณ flag: Honduras
+๐Ÿ‡ญ๐Ÿ‡ท flag: Croatia
+๐Ÿ‡ญ๐Ÿ‡น flag: Haiti
+๐Ÿ‡ญ๐Ÿ‡บ flag: Hungary
+๐Ÿ‡ฎ๐Ÿ‡จ flag: Canary Islands
+๐Ÿ‡ฎ๐Ÿ‡ฉ flag: Indonesia
+๐Ÿ‡ฎ๐Ÿ‡ช flag: Ireland
+๐Ÿ‡ฎ๐Ÿ‡ฑ flag: Israel
+๐Ÿ‡ฎ๐Ÿ‡ฒ flag: Isle of Man
+๐Ÿ‡ฎ๐Ÿ‡ณ flag: India
+๐Ÿ‡ฎ๐Ÿ‡ด flag: British Indian Ocean Territory
+๐Ÿ‡ฎ๐Ÿ‡ถ flag: Iraq
+๐Ÿ‡ฎ๐Ÿ‡ท flag: Iran
+๐Ÿ‡ฎ๐Ÿ‡ธ flag: Iceland
+๐Ÿ‡ฎ๐Ÿ‡น flag: Italy
+๐Ÿ‡ฏ๐Ÿ‡ช flag: Jersey
+๐Ÿ‡ฏ๐Ÿ‡ฒ flag: Jamaica
+๐Ÿ‡ฏ๐Ÿ‡ด flag: Jordan
+๐Ÿ‡ฏ๐Ÿ‡ต flag: Japan
+๐Ÿ‡ฐ๐Ÿ‡ช flag: Kenya
+๐Ÿ‡ฐ๐Ÿ‡ฌ flag: Kyrgyzstan
+๐Ÿ‡ฐ๐Ÿ‡ญ flag: Cambodia
+๐Ÿ‡ฐ๐Ÿ‡ฎ flag: Kiribati
+๐Ÿ‡ฐ๐Ÿ‡ฒ flag: Comoros
+๐Ÿ‡ฐ๐Ÿ‡ณ flag: St. Kitts & Nevis
+๐Ÿ‡ฐ๐Ÿ‡ต flag: North Korea
+๐Ÿ‡ฐ๐Ÿ‡ท flag: South Korea
+๐Ÿ‡ฐ๐Ÿ‡ผ flag: Kuwait
+๐Ÿ‡ฐ๐Ÿ‡พ flag: Cayman Islands
+๐Ÿ‡ฐ๐Ÿ‡ฟ flag: Kazakhstan
+๐Ÿ‡ฑ๐Ÿ‡ฆ flag: Laos
+๐Ÿ‡ฑ๐Ÿ‡ง flag: Lebanon
+๐Ÿ‡ฑ๐Ÿ‡จ flag: St. Lucia
+๐Ÿ‡ฑ๐Ÿ‡ฎ flag: Liechtenstein
+๐Ÿ‡ฑ๐Ÿ‡ฐ flag: Sri Lanka
+๐Ÿ‡ฑ๐Ÿ‡ท flag: Liberia
+๐Ÿ‡ฑ๐Ÿ‡ธ flag: Lesotho
+๐Ÿ‡ฑ๐Ÿ‡น flag: Lithuania
+๐Ÿ‡ฑ๐Ÿ‡บ flag: Luxembourg
+๐Ÿ‡ฑ๐Ÿ‡ป flag: Latvia
+๐Ÿ‡ฑ๐Ÿ‡พ flag: Libya
+๐Ÿ‡ฒ๐Ÿ‡ฆ flag: Morocco
+๐Ÿ‡ฒ๐Ÿ‡จ flag: Monaco
+๐Ÿ‡ฒ๐Ÿ‡ฉ flag: Moldova
+๐Ÿ‡ฒ๐Ÿ‡ช flag: Montenegro
+๐Ÿ‡ฒ๐Ÿ‡ซ flag: St. Martin
+๐Ÿ‡ฒ๐Ÿ‡ฌ flag: Madagascar
+๐Ÿ‡ฒ๐Ÿ‡ญ flag: Marshall Islands
+๐Ÿ‡ฒ๐Ÿ‡ฐ flag: North Macedonia
+๐Ÿ‡ฒ๐Ÿ‡ฑ flag: Mali
+๐Ÿ‡ฒ๐Ÿ‡ฒ flag: Myanmar (Burma)
+๐Ÿ‡ฒ๐Ÿ‡ณ flag: Mongolia
+๐Ÿ‡ฒ๐Ÿ‡ด flag: Macao SAR China
+๐Ÿ‡ฒ๐Ÿ‡ต flag: Northern Mariana Islands
+๐Ÿ‡ฒ๐Ÿ‡ถ flag: Martinique
+๐Ÿ‡ฒ๐Ÿ‡ท flag: Mauritania
+๐Ÿ‡ฒ๐Ÿ‡ธ flag: Montserrat
+๐Ÿ‡ฒ๐Ÿ‡น flag: Malta
+๐Ÿ‡ฒ๐Ÿ‡บ flag: Mauritius
+๐Ÿ‡ฒ๐Ÿ‡ป flag: Maldives
+๐Ÿ‡ฒ๐Ÿ‡ผ flag: Malawi
+๐Ÿ‡ฒ๐Ÿ‡ฝ flag: Mexico
+๐Ÿ‡ฒ๐Ÿ‡พ flag: Malaysia
+๐Ÿ‡ฒ๐Ÿ‡ฟ flag: Mozambique
+๐Ÿ‡ณ๐Ÿ‡ฆ flag: Namibia
+๐Ÿ‡ณ๐Ÿ‡จ flag: New Caledonia
+๐Ÿ‡ณ๐Ÿ‡ช flag: Niger
+๐Ÿ‡ณ๐Ÿ‡ซ flag: Norfolk Island
+๐Ÿ‡ณ๐Ÿ‡ฌ flag: Nigeria
+๐Ÿ‡ณ๐Ÿ‡ฎ flag: Nicaragua
+๐Ÿ‡ณ๐Ÿ‡ฑ flag: Netherlands
+๐Ÿ‡ณ๐Ÿ‡ด flag: Norway
+๐Ÿ‡ณ๐Ÿ‡ต flag: Nepal
+๐Ÿ‡ณ๐Ÿ‡ท flag: Nauru
+๐Ÿ‡ณ๐Ÿ‡บ flag: Niue
+๐Ÿ‡ณ๐Ÿ‡ฟ flag: New Zealand
+๐Ÿ‡ด๐Ÿ‡ฒ flag: Oman
+๐Ÿ‡ต๐Ÿ‡ฆ flag: Panama
+๐Ÿ‡ต๐Ÿ‡ช flag: Peru
+๐Ÿ‡ต๐Ÿ‡ซ flag: French Polynesia
+๐Ÿ‡ต๐Ÿ‡ฌ flag: Papua New Guinea
+๐Ÿ‡ต๐Ÿ‡ญ flag: Philippines
+๐Ÿ‡ต๐Ÿ‡ฐ flag: Pakistan
+๐Ÿ‡ต๐Ÿ‡ฑ flag: Poland
+๐Ÿ‡ต๐Ÿ‡ฒ flag: St. Pierre & Miquelon
+๐Ÿ‡ต๐Ÿ‡ณ flag: Pitcairn Islands
+๐Ÿ‡ต๐Ÿ‡ท flag: Puerto Rico
+๐Ÿ‡ต๐Ÿ‡ธ flag: Palestinian Territories
+๐Ÿ‡ต๐Ÿ‡น flag: Portugal
+๐Ÿ‡ต๐Ÿ‡ผ flag: Palau
+๐Ÿ‡ต๐Ÿ‡พ flag: Paraguay
+๐Ÿ‡ถ๐Ÿ‡ฆ flag: Qatar
+๐Ÿ‡ท๐Ÿ‡ช flag: Rรฉunion
+๐Ÿ‡ท๐Ÿ‡ด flag: Romania
+๐Ÿ‡ท๐Ÿ‡ธ flag: Serbia
+๐Ÿ‡ท๐Ÿ‡บ flag: Russia
+๐Ÿ‡ท๐Ÿ‡ผ flag: Rwanda
+๐Ÿ‡ธ๐Ÿ‡ฆ flag: Saudi Arabia
+๐Ÿ‡ธ๐Ÿ‡ง flag: Solomon Islands
+๐Ÿ‡ธ๐Ÿ‡จ flag: Seychelles
+๐Ÿ‡ธ๐Ÿ‡ฉ flag: Sudan
+๐Ÿ‡ธ๐Ÿ‡ช flag: Sweden
+๐Ÿ‡ธ๐Ÿ‡ฌ flag: Singapore
+๐Ÿ‡ธ๐Ÿ‡ญ flag: St. Helena
+๐Ÿ‡ธ๐Ÿ‡ฎ flag: Slovenia
+๐Ÿ‡ธ๐Ÿ‡ฏ flag: Svalbard & Jan Mayen
+๐Ÿ‡ธ๐Ÿ‡ฐ flag: Slovakia
+๐Ÿ‡ธ๐Ÿ‡ฑ flag: Sierra Leone
+๐Ÿ‡ธ๐Ÿ‡ฒ flag: San Marino
+๐Ÿ‡ธ๐Ÿ‡ณ flag: Senegal
+๐Ÿ‡ธ๐Ÿ‡ด flag: Somalia
+๐Ÿ‡ธ๐Ÿ‡ท flag: Suriname
+๐Ÿ‡ธ๐Ÿ‡ธ flag: South Sudan
+๐Ÿ‡ธ๐Ÿ‡น flag: Sรฃo Tomรฉ & Prรญncipe
+๐Ÿ‡ธ๐Ÿ‡ป flag: El Salvador
+๐Ÿ‡ธ๐Ÿ‡ฝ flag: Sint Maarten
+๐Ÿ‡ธ๐Ÿ‡พ flag: Syria
+๐Ÿ‡ธ๐Ÿ‡ฟ flag: Eswatini
+๐Ÿ‡น๐Ÿ‡ฆ flag: Tristan da Cunha
+๐Ÿ‡น๐Ÿ‡จ flag: Turks & Caicos Islands
+๐Ÿ‡น๐Ÿ‡ฉ flag: Chad
+๐Ÿ‡น๐Ÿ‡ซ flag: French Southern Territories
+๐Ÿ‡น๐Ÿ‡ฌ flag: Togo
+๐Ÿ‡น๐Ÿ‡ญ flag: Thailand
+๐Ÿ‡น๐Ÿ‡ฏ flag: Tajikistan
+๐Ÿ‡น๐Ÿ‡ฐ flag: Tokelau
+๐Ÿ‡น๐Ÿ‡ฑ flag: Timor-Leste
+๐Ÿ‡น๐Ÿ‡ฒ flag: Turkmenistan
+๐Ÿ‡น๐Ÿ‡ณ flag: Tunisia
+๐Ÿ‡น๐Ÿ‡ด flag: Tonga
+๐Ÿ‡น๐Ÿ‡ท flag: Turkey
+๐Ÿ‡น๐Ÿ‡น flag: Trinidad & Tobago
+๐Ÿ‡น๐Ÿ‡ป flag: Tuvalu
+๐Ÿ‡น๐Ÿ‡ผ flag: Taiwan
+๐Ÿ‡น๐Ÿ‡ฟ flag: Tanzania
+๐Ÿ‡บ๐Ÿ‡ฆ flag: Ukraine
+๐Ÿ‡บ๐Ÿ‡ฌ flag: Uganda
+๐Ÿ‡บ๐Ÿ‡ฒ flag: U.S. Outlying Islands
+๐Ÿ‡บ๐Ÿ‡ณ flag: United Nations
+๐Ÿ‡บ๐Ÿ‡ธ flag: United States
+๐Ÿ‡บ๐Ÿ‡พ flag: Uruguay
+๐Ÿ‡บ๐Ÿ‡ฟ flag: Uzbekistan
+๐Ÿ‡ป๐Ÿ‡ฆ flag: Vatican City
+๐Ÿ‡ป๐Ÿ‡จ flag: St. Vincent & Grenadines
+๐Ÿ‡ป๐Ÿ‡ช flag: Venezuela
+๐Ÿ‡ป๐Ÿ‡ฌ flag: British Virgin Islands
+๐Ÿ‡ป๐Ÿ‡ฎ flag: U.S. Virgin Islands
+๐Ÿ‡ป๐Ÿ‡ณ flag: Vietnam
+๐Ÿ‡ป๐Ÿ‡บ flag: Vanuatu
+๐Ÿ‡ผ๐Ÿ‡ซ flag: Wallis & Futuna
+๐Ÿ‡ผ๐Ÿ‡ธ flag: Samoa
+๐Ÿ‡ฝ๐Ÿ‡ฐ flag: Kosovo
+๐Ÿ‡พ๐Ÿ‡ช flag: Yemen
+๐Ÿ‡พ๐Ÿ‡น flag: Mayotte
+๐Ÿ‡ฟ๐Ÿ‡ฆ flag: South Africa
+๐Ÿ‡ฟ๐Ÿ‡ฒ flag: Zambia
+๐Ÿ‡ฟ๐Ÿ‡ผ flag: Zimbabwe
+๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ flag: England
+๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ flag: Scotland
+๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ flag: Wales
diff --git a/.local/share/thiemeyer_road_to_samarkand.jpg b/.local/share/thiemeyer_road_to_samarkand.jpg
new file mode 100644
index 0000000..6a30adb
--- /dev/null
+++ b/.local/share/thiemeyer_road_to_samarkand.jpg
Binary files differ