summaryrefslogtreecommitdiff
path: root/.local
diff options
context:
space:
mode:
Diffstat (limited to '.local')
-rwxr-xr-x.local/bin/automountd12
-rwxr-xr-x.local/bin/backup33
-rwxr-xr-x.local/bin/clearx51
-rwxr-xr-x.local/bin/desktop/beautify102
-rwxr-xr-x.local/bin/desktop/brightness32
-rwxr-xr-x.local/bin/desktop/detect-keys3
-rwxr-xr-x.local/bin/desktop/dmenu-syncthing-devices25
-rwxr-xr-x.local/bin/desktop/dmenu-unicode11
-rwxr-xr-x.local/bin/desktop/dmenu-zeal27
-rwxr-xr-x.local/bin/desktop/edit-graphical-buffer17
-rwxr-xr-x.local/bin/desktop/i3exit54
-rwxr-xr-x.local/bin/desktop/i3exit-script18
-rwxr-xr-x.local/bin/desktop/librewolf-open39
-rwxr-xr-x.local/bin/desktop/mlock22
-rwxr-xr-x.local/bin/desktop/remap146
-rwxr-xr-x.local/bin/desktop/remapd6
-rwxr-xr-x.local/bin/desktop/setdp36
-rwxr-xr-x.local/bin/desktop/show-i3-keybindings11
-rwxr-xr-x.local/bin/desktop/toggle-xeyes7
-rwxr-xr-x.local/bin/desktop/torbrowser30
-rwxr-xr-x.local/bin/desktop/volctl50
-rwxr-xr-x.local/bin/development/dev179
-rwxr-xr-x.local/bin/development/getcomproot14
-rwxr-xr-x.local/bin/development/gitpush10
-rwxr-xr-x.local/bin/development/gitw18
-rwxr-xr-x.local/bin/development/ipy4
-rwxr-xr-x.local/bin/development/ipytest23
-rwxr-xr-x.local/bin/development/nx148
-rwxr-xr-x.local/bin/development/opout12
-rwxr-xr-x.local/bin/development/pipsearch4
-rwxr-xr-x.local/bin/development/py4
-rwxr-xr-x.local/bin/development/pyh12
-rwxr-xr-x.local/bin/development/texclear9
-rwxr-xr-x.local/bin/fcode23
-rwxr-xr-x.local/bin/fdict25
-rwxr-xr-x.local/bin/fgrp27
-rwxr-xr-x.local/bin/filter52
-rwxr-xr-x.local/bin/fm22
-rwxr-xr-x.local/bin/fmd26
-rwxr-xr-x.local/bin/fpm148
-rwxr-xr-x.local/bin/fsend47
-rwxr-xr-x.local/bin/fw10
-rwxr-xr-x.local/bin/help99
-rwxr-xr-x.local/bin/launch-gtypist101
-rwxr-xr-x.local/bin/lessopen.sh9
-rwxr-xr-x.local/bin/loop45
-rwxr-xr-x.local/bin/lsinputs12
-rwxr-xr-x.local/bin/mnt39
-rwxr-xr-x.local/bin/open48
-rwxr-xr-x.local/bin/preview59
-rwxr-xr-x.local/bin/search62
-rwxr-xr-x.local/bin/searchdb35
-rwxr-xr-x.local/bin/setbg18
-rwxr-xr-x.local/bin/shortcuts35
-rwxr-xr-x.local/bin/shorts/adbs3
-rwxr-xr-x.local/bin/shorts/append-to-history5
-rwxr-xr-x.local/bin/shorts/bs7
-rwxr-xr-x.local/bin/shorts/conv10
-rwxr-xr-x.local/bin/shorts/diffdirs6
-rwxr-xr-x.local/bin/shorts/font2svg3
-rwxr-xr-x.local/bin/shorts/preview-bat3
-rwxr-xr-x.local/bin/shorts/preview-highlight3
-rwxr-xr-x.local/bin/shorts/refcitx6
-rwxr-xr-x.local/bin/shorts/sc3
-rwxr-xr-x.local/bin/shorts/scrcpy-k8
-rwxr-xr-x.local/bin/shorts/ssha5
-rwxr-xr-x.local/bin/shorts/sync-server12
-rwxr-xr-x.local/bin/shorts/syncdrive3
-rwxr-xr-x.local/bin/shorts/synchs7
-rwxr-xr-x.local/bin/shorts/synctab19
-rwxr-xr-x.local/bin/shorts/xdg-terminal-exec3
-rwxr-xr-x.local/bin/shorts/xprint8
-rwxr-xr-x.local/bin/sshadd17
-rwxr-xr-x.local/bin/statusbar/cpu_usage55
-rwxr-xr-x.local/bin/statusbar/i3bandwidth105
-rwxr-xr-x.local/bin/statusbar/i3battery66
-rwxr-xr-x.local/bin/statusbar/i3cpu34
-rwxr-xr-x.local/bin/statusbar/i3cpubars44
-rwxr-xr-x.local/bin/statusbar/i3cpuload68
-rwxr-xr-x.local/bin/statusbar/i3memory33
-rwxr-xr-x.local/bin/statusbar/i3weather26
-rwxr-xr-x.local/bin/statusbar/i3wifi37
-rwxr-xr-x.local/bin/statusbar/memory_percent57
-rwxr-xr-x.local/bin/statusbar/memory_usage56
-rwxr-xr-x.local/bin/ttyl37
-rwxr-xr-x.local/bin/unix26
-rwxr-xr-x.local/bin/web/fpl39
-rwxr-xr-x.local/bin/web/savesite35
-rwxr-xr-x.local/bin/web/w3mman335
-rwxr-xr-x.local/bin/web/ytf10
-rwxr-xr-x.local/bin/web/ytplaylist34
-rwxr-xr-x.local/bin/web/ytv3
-rw-r--r--.local/share/applications/browser.desktop10
-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/mimeapps.list25
-rw-r--r--.local/share/applications/mimeinfo.cache153
-rw-r--r--.local/share/applications/pdf.desktop4
-rw-r--r--.local/share/applications/rss.desktop5
-rw-r--r--.local/share/applications/text.desktop5
-rw-r--r--.local/share/applications/torrent.desktop5
-rw-r--r--.local/share/applications/video.desktop4
-rw-r--r--.local/share/chars/emoji1630
-rw-r--r--.local/share/chars/font-awesome1456
-rw-r--r--.local/share/chars/unicodebin0 -> 2085040 bytes
106 files changed, 6651 insertions, 0 deletions
diff --git a/.local/bin/automountd b/.local/bin/automountd
new file mode 100755
index 0000000..f09871f
--- /dev/null
+++ b/.local/bin/automountd
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+pathtoname() {
+ udevadm info -p /sys/"$1" | awk -v FS== '/DEVNAME/ {print $2}'
+}
+
+stdbuf -oL -- udevadm monitor --udev -s block | while read -r -- _ _ event devpath _; do
+ if [ "$event" = add ]; then
+ devname=$(pathtoname "$devpath")
+ udisksctl mount --block-device "$devname" --no-user-interaction
+ fi
+done
diff --git a/.local/bin/backup b/.local/bin/backup
new file mode 100755
index 0000000..8f6e00d
--- /dev/null
+++ b/.local/bin/backup
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+sudo cryptsetup open /dev/sdb1 backup
+sudo mount --mkdir /dev/mapper/backup /mnt/backup
+backup="/mnt/backup/$(hostname)"
+[ -d "$backup" ] ||
+ { echo "$0: directory doesn't exist: $backup" >&2; exit 1; }
+
+cd ~ || exit
+rsync -Plru --delete \
+ .config \
+ .git \
+ .gnupg \
+ .local \
+ .librewolf \
+ .ssh \
+ bin \
+ DCIM \
+ Dev \
+ Documents \
+ Downloads \
+ GDrive \
+ Music \
+ Phone \
+ Pictures \
+ repos \
+ Videos \
+ "$backup/home/$USER/"
+
+find . -maxdepth 1 \( -type f -o -type l \) -exec rsync -Plu {} "$backup/home/$USER" \;
+
+echo "Backing up /etc directory..."
+sudo rsync -Plruq --delete /etc "$backup"
diff --git a/.local/bin/clearx b/.local/bin/clearx
new file mode 100755
index 0000000..225c208
--- /dev/null
+++ b/.local/bin/clearx
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+help() { echo "clearx - execute command in clear screen
+
+USAGE:
+ clearx [OPTION]... <command>
+
+OPTIONS:
+ -n no prompt when exiting
+ -h show this help message"; }
+
+err() { printf 'clearx: %s\n' "$@" >&2; exit 1; }
+while getopts 'nh' o; do case "$o" in
+ n) nflag=0 ;;
+ h) help >&2; exit ;;
+ *) err "invalid option -- '$OPTARG'" ;;
+esac done
+shift $((OPTIND - 1))
+
+[ "$#" -lt 1 ] && help >&2 && exit 1
+cmds="$*"
+[ "$nflag" = 0 ] ||
+ cmds="$cmds; printf '\n%s' 'Press <Enter> to continue: '; read -r arg"
+
+tmuxcmds="tmux set status off; $cmds; tmux set status on;"
+set_screen() {
+ [ -z "$TMUX" ] &&
+ err '$TMUX not set, only tmux is supported for screen program'
+ tmux new-window -n clearx "$tmuxcmds"
+}
+new_screen() { tmux new-session -s clearx "$tmuxcmds"; }
+
+terminal_emulator() {
+ [ -z "$DISPLAY" ] && return 1
+ #err 'clearx: terminal_emulator: $DISPLAY not set'
+ case "$TERMINAL" in
+ '') echo 'clearx: $TERMINAL not set' && exit 1 ;;
+ alacritty) export TERMINAL="alacritty" ;;
+ esac
+ wmctrl -r :ACTIVE: -b remove,fullscreen
+ $TERMINAL -e sh -c "sleep 0.2; $cmds" &
+ sleep 0.2 && wmctrl -r :ACTIVE: -b add,fullscreen
+}
+
+case "$TERM" in
+ '') err '$TERM not set' ;;
+ *screen*) set_screen ;;
+ *linux*) setfont ter-132n && new_screen ;;
+ *256*) terminal_emulator || new_screen ;;
+ *) err "no action for \$TERM: $TERM"
+esac
diff --git a/.local/bin/desktop/beautify b/.local/bin/desktop/beautify
new file mode 100755
index 0000000..e535129
--- /dev/null
+++ b/.local/bin/desktop/beautify
@@ -0,0 +1,102 @@
+#!/bin/sh
+
+## properties of script
+
+## set home screen and lock screen wallpaper
+HOMEWALL="${XDG_DATA_HOME:-$HOME/.local/share}/wallpapers/artix-wampire.png"
+LOCKWALL="${XDG_DATA_HOME:-$HOME/.local/share}/wallpapers/artix-wampire.png"
+
+## choose random wallpaper from a directory
+# WALLPAPERS="$HOME/.local/share/wallpapers"
+## requires 'setbg' script found in lukesmithxyz github repo
+setbg_link="https://github.com/LukeSmithxyz/voidrice/blob/master/.local/bin/setbg"
+## path to download script files like setbg
+BIN="$HOME/.local/bin"
+
+# Location to put lock screen wallpaper for lock program
+LOCKWALL_LOC="/tmp/lockWall"
+
+## list of programs to be installed/uninstalled
+PROGRAMS="eza dust conky picom xwallpaper cxxmatrix"
+## some additional programs that I think are essential are installed below
+## these will be not removed during uninstall
+
+
+help() { echo "beautify - beautify you desktop environment
+
+USAGE:
+ beautify [OPTION]...
+
+OPTIONS:
+ -h show this help message
+
+ -i install programs for beautification
+ -u uninstall beautification programs
+ -x clear beautifications
+
+ The above group of options are conflicting.
+ Passing any one of them will disable the others.
+
+This is very much a personal script and is meant to be configured directly.
+I have only made it work with arch linux and the pacman package manager."; }
+
+err() { printf 'beautify: %s\n' "$@" >&2; exit 1; }
+while getopts 'iuxh' o; do case "$o" in
+ i) opflag=0 ;;
+ u) opflag=1 ;;
+ x) opflag=2 ;;
+ h) help >&2; exit ;;
+ *) err "invalid option -- '$OPTARG'" ;;
+esac done
+shift $((OPTIND - 1))
+
+case "$opflag" in
+ 0)
+ PROGRAMS="$PROGRAMS neovim tmux dunst highlight starship"
+ sudo pacman -Syu --noconfirm
+ for pkg in $PROGRAMS; do
+ if ! pacman -Q "$pkg" >/dev/null; then
+ yay -S --noconfirm "$pkg"
+ fi
+ done
+
+ mkdir -pv ~/.local/bin
+ wget -c "$setbg_link" -o "${BIN}/setbg" && chmod +x "${BIN}/setbg"
+ ;;
+
+ 1)
+ for pkg in $PROGRAMS; do
+ if pacman -Q "$pkgs" >/dev/null; then
+ sudo pacman -Rns --noconfirm "$pkg"
+ fi
+ done
+ rm -f "$setbg"
+ ;;
+
+ 2)
+ i3-msg 'gaps inner all set 0'
+ xwallpaper --clear
+ rm -f "$LOCKWALL_LOC"
+ killall -q -o 1s conky picom beautify
+ ;;
+esac
+
+[ -n "$opflag" ] && exit
+
+if [ "${LOCKWALL%.png}" = "$LOCKWALL" ]; then
+ temp="/tmp/$(basename "${LOCKWALL%.*}.png")"
+ convert "$LOCKWALL" "$temp"
+ cp -f "$temp" "$LOCKWALL_LOC"
+ rm -f "$temp"
+else
+ cp -f "$LOCKWALL" "$LOCKWALL_LOC"
+fi
+
+i3-msg 'gaps inner all set 10'
+xwallpaper --zoom "$HOMEWALL"
+pidof -q conky || conky
+pidof -q picom || picom -b
+
+if [ -e "$WALLPAPERS" ]; then
+ while sleep 1m; do setbg "$WALLPAPERS"; done
+fi
diff --git a/.local/bin/desktop/brightness b/.local/bin/desktop/brightness
new file mode 100755
index 0000000..11733f4
--- /dev/null
+++ b/.local/bin/desktop/brightness
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+help() { echo "brightness - change screen brightness
+USAGE: brightness <up|down>"; }
+
+[ "$#" -lt 1 ] && help >&2 && exit 1
+
+brightness="$(brightnessctl --machine-readable | cut -d, -f4 | tr -d %)"
+step="$(( brightness / 10 + 1))"
+
+case "$1" in
+ up) brightnessctl --quiet set +${step}% ;;
+ down) brightnessctl --quiet set ${step}%- ;;
+ *) help >&2; exit 1 ;;
+esac
+
+brightness="$(brightnessctl --machine-readable | cut -d, -f4)"
+
+if [ -n "$TMUX" ]; then
+ tmux display "Brightness: $brightness"
+ exit
+fi
+
+notify() { [ -n "$DISPLAY" ] && notify-send -r 45234 "$1" "$2"; }
+case "${brightness%\%}" in
+ [0-9]) notify "๐Ÿ’ก Brightness: $brightness" ;;
+ [1-7][0-9]) notify "๐Ÿ”… Brightness: $brightness" ;;
+ [89][0-9]) notify "๐Ÿ”† Brightness: $brightness" ;;
+ 100) notify "๐Ÿ”† MAX Brightness: $brightness" ;;
+ *) notify "brightness" "can't determine brightness"
+esac
+exit 0
diff --git a/.local/bin/desktop/detect-keys b/.local/bin/desktop/detect-keys
new file mode 100755
index 0000000..da00dad
--- /dev/null
+++ b/.local/bin/desktop/detect-keys
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'
diff --git a/.local/bin/desktop/dmenu-syncthing-devices b/.local/bin/desktop/dmenu-syncthing-devices
new file mode 100755
index 0000000..bb93f6d
--- /dev/null
+++ b/.local/bin/desktop/dmenu-syncthing-devices
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+pidof -q syncthing || {
+ echo "ERROR: Syncthing is not running" >&2
+ exit 2
+}
+
+get_devices() {
+ for device_id in $(syncthing cli config devices list); do
+ printf '%-10s %s\n' \
+ "$(syncthing cli config devices "$device_id" name get)" \
+ "$device_id"
+ done | nl -w1 -s'. '
+}
+
+device="$(get_devices | dmenu -l 10 -p "Syncthing devices")"
+device_id="${device##* }"
+[ -z "$device_id" ] && exit 1
+
+if [ -n "$1" ]; then
+ xdotool type "$device_id"
+else
+ printf '%s\n' "$device_id" | xclip -selection clipboard
+ notify-send "๐Ÿ“‹ Copied to clipboard" "$device_id"
+fi
diff --git a/.local/bin/desktop/dmenu-unicode b/.local/bin/desktop/dmenu-unicode
new file mode 100755
index 0000000..16e1cfc
--- /dev/null
+++ b/.local/bin/desktop/dmenu-unicode
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+chosen=$(cat ~/.local/share/chars/* | dmenu -i -l 25 -fn :size=20)
+
+[ -z "$chosen" ] && exit
+
+if [ -n "$1" ]; then
+ printf "%s" "${chosen#* }" | cut -d\; -f1 | tr -d '\n' | xclip -selection clipboard
+else
+ printf "%s" "${chosen%% *}" | xclip -selection clipboard
+fi
diff --git a/.local/bin/desktop/dmenu-zeal b/.local/bin/desktop/dmenu-zeal
new file mode 100755
index 0000000..608be89
--- /dev/null
+++ b/.local/bin/desktop/dmenu-zeal
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+cd ~/.local/share/Zeal/Zeal || exit
+
+selection="$(echo "Shell
+C/C++
+Java
+Python
+$(find . -maxdepth 1 -type d ! -name 'docsets' |
+ tail +2 | cut -c3- | sed 's/^/ds:/')
+" | dmenu -i -p "Select docset group")"
+
+case "$selection" in
+ Shell) key="bash,zsh,linux" ;;
+ C/C++) key="c,cpp,linux" ;;
+ Java) key="java,javaspec" ;;
+ Python) key="python,numpy,matplotlib" ;;
+ ds:*)
+ ln -sfT "${selection#ds:}" docsets
+ killall -q zeal; zeal
+ exit
+ ;;
+ *) exit 2 ;;
+esac
+
+query="$(dmenu -p "Enter query")"
+zeal "$key:$query"
diff --git a/.local/bin/desktop/edit-graphical-buffer b/.local/bin/desktop/edit-graphical-buffer
new file mode 100755
index 0000000..10eac8f
--- /dev/null
+++ b/.local/bin/desktop/edit-graphical-buffer
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+sleep 0.5
+xdotool key --clearmodifiers ctrl+a ctrl+c
+content="$(xclip -o -sel clipboard)"
+
+tempfile=/tmp/scratch-buffer/$$.txt
+mkdir -pv /tmp/scratch-buffer
+echo "$content" | tee "$tempfile" > "$tempfile.bak"
+${TERMINAL:-xdg-terminal-exec} -c dropdown_buffer -e nvim "$tempfile"
+
+diff "$tempfile" "$tempfile.bak" >/dev/null || {
+ xclip -sel clipboard < "$tempfile"
+ xdotool key --clearmodifiers ctrl+a ctrl+v
+}
+
+rm -f "$tempfile" "$tempfile.bak"
diff --git a/.local/bin/desktop/i3exit b/.local/bin/desktop/i3exit
new file mode 100755
index 0000000..0be387c
--- /dev/null
+++ b/.local/bin/desktop/i3exit
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+# with openrc use loginctl
+[ "$(cat /proc/1/comm)" = "systemd" ] && logind=systemctl || logind=loginctl
+
+command="$1"
+system_control() {
+ if [ "$(loginctl show-session --property=NCurrentSessions --value)" -gt 2 ]; then
+ notify-send --replace-id=4252 \
+ "i3exit" "Multiple users are logged in\nCant't $command"
+ exit
+ fi
+ eval "$@"
+}
+
+lockWall="$HOME/.local/share/lockWall"
+lock_desktop() {
+ [ -f "$lockWall" ] &&
+ i3lock --tiling --image="$lockWall" ||
+ i3lock --color=001177
+ pkill ssh-agent
+}
+
+case "$command" in
+ lock)
+ lock_desktop
+ xset dpms force off
+ ;;
+ logout)
+ switch-session
+ i3-msg exit
+ ;;
+ switch_user)
+ dm-tool switch-to-greeter
+ ;;
+ suspend)
+ lock_desktop; $logind suspend
+ ;;
+ hibernate)
+ system_control lock_desktop && $logind hibernate
+ ;;
+ reboot)
+ system_control $logind reboot
+ ;;
+ shutdown)
+ system_control $logind poweroff
+ ;;
+ *)
+ echo "== ! i3exit: missing or invalid argument ! =="
+ echo "Try again with: lock | logout | switch_user | suspend | hibernate | reboot | shutdown"
+ exit 2
+esac
+
+exit 0
diff --git a/.local/bin/desktop/i3exit-script b/.local/bin/desktop/i3exit-script
new file mode 100755
index 0000000..b27f0f5
--- /dev/null
+++ b/.local/bin/desktop/i3exit-script
@@ -0,0 +1,18 @@
+#!/bin/bash
+# TODO: copy and configure the i3 script to take parametres
+# possibly make it as syst-power
+
+# snippet for blur effect on lock screen
+
+
+# DEPEDNDENCIES: i3lock imagemagic scrot
+
+PICTURE=/tmp/i3lock.png
+SCREENSHOT="scrot $PICTURE"
+
+BLUR="5x4"
+
+$SCREENSHOT
+convert $PICTURE -blur $BLUR $PICTURE
+i3lock -i $PICTURE
+rm $PICTURE
diff --git a/.local/bin/desktop/librewolf-open b/.local/bin/desktop/librewolf-open
new file mode 100755
index 0000000..4bb2d70
--- /dev/null
+++ b/.local/bin/desktop/librewolf-open
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+window="LibreWolf"
+running() { windows=$(wmctrl -l)
+ test "${windows#*"$window"}" != "$windows"; }
+press() { sleep 0.1; xdotool keyup Super
+ xdotool key --clearmodifiers "$@"; }
+
+if ! running; then
+ notify-send "Starting $window..."
+ start="$(date +%s.%3N)"
+ setsid -f librewolf -P "${FFPROFILE:-default-release}"
+ for _ in $(seq 1000); do sleep 0.1; running && break; done
+ end="$(date +%s.%3N)"
+ time="$(echo "$end - $start" | bc)"
+ notify-send "$window" "Started in ${time}s"
+ started=1
+fi
+
+wmctrl -a "$window" ||
+ { notify-send "ffbrowser" "ERROR: librewolf window not found"; exit 1; }
+[ "$started" = 1 ] || press ctrl+t
+
+query="$*"
+if [ "$query" != "${query#http*://}" ]; then
+ press ctrl+l
+elif [ -e "$query" ]; then
+ query="$(readlink -f "$query")"; press ctrl+l
+else
+ # workaround for ctrl+k not working at initial startup
+ [ "$started" = 1 ] && sleep 0.5
+ press ctrl+k
+fi
+
+if [ -n "$query" ]; then
+ xdotool type "$query"
+ press Return
+fi
+
diff --git a/.local/bin/desktop/mlock b/.local/bin/desktop/mlock
new file mode 100755
index 0000000..67da8a3
--- /dev/null
+++ b/.local/bin/desktop/mlock
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+command -v xtrlock || exit
+
+[ "$(xrandr --current | grep -c "\S* connected \S\+.* (")" -gt 1 ] && {
+ xtrlock -b -f
+ xset dpms force off
+ exit
+}
+
+TERMINAL="alacritty -t matrixlock"
+if command -v cxxmatrix; then
+ $TERMINAL -e cxxmatrix &
+elif command -v cmatrix; then
+ $TERMINAL -e sh -c 'sleep 0.5 && cmatrix' &
+else
+ xtrlock -b -f; exit
+fi
+
+xtrlock -f
+sleep 0.2
+wmctrl -r matrixlock -b add,fullscreen
diff --git a/.local/bin/desktop/remap b/.local/bin/desktop/remap
new file mode 100755
index 0000000..3635464
--- /dev/null
+++ b/.local/bin/desktop/remap
@@ -0,0 +1,146 @@
+#!/bin/sh
+
+# This script cannot run without the X server (GUI)
+# So exit if DISPLAY is not set
+[ -z "$DISPLAY" ] && {
+ notify-send remap "ERROR: DISPLAY not set"
+ exit
+}
+
+timeout="${KEY_RELEASE_TIMEOUT:-500}"
+
+help() { echo "remap - remap modifier keys for easy access
+
+USAGE:
+ remap [OPTION]...
+
+OPTIONS:
+ -x reset keys
+ -t toggle (remap/reset)
+ -s show remap status
+ -i show info of all key remaps
+ -h show this help message"; }
+
+key_info() { echo "
+ +-----------------+-----------------------------------+
+ | Before | After |
+ +-----------------+-----------------+-----------------+
+ | Key | On Hold | On Tap |
+ +-----------------+-----------------+-----------------+
+ | Tab | Super | Tab |
+ | Caps Lock | Ctrl | Esc |
+ | Space | Shift | Space |
+ | Left Ctrl | Ctrl | Caps Lock |
+ | Escape | Tab | Tab |
+ +-----------------+-----------------+-----------------+
+
+Note:
+ By default, 'On Tap' will timeout at 500 miliseconds. In other words,
+ if you release a key after timeout, the key will not be generated.
+ You can increase it's value by setting the \$KEY_RELEASE_TIMEOUT environment
+ variable. This is useful in case you don't have a fast typing speed.
+
+If you want to change more keys or want a different configuration, you
+can edit the remap_keys() function inside this script.
+ "; }
+
+while getopts 'rxtsih' o; do case "$o" in
+ x) action=x ;;
+ t) action=t ;;
+ s) action=s ;;
+ i) key_info >&2; exit ;;
+ h) help >&2; exit ;;
+ *) printf "remap: invalid argument -- '%s'\n" "$OPTARG" ;;
+esac; done
+
+status_file="/tmp/.remap.lock"
+keymap_file="/tmp/.xmodmap.defaults"
+[ -f "$keymap_file" ] || xmodmap -pke > "$keymap_file"
+
+msg() {
+ [ "$VERBOSE_REMAP" != 1 ] && return
+ printf "remap: %s\n" "$@"
+ # notify-send "remap" "$*"
+}
+
+remap_keys() {
+ msg "remapping keys..."
+ # Fast key repeats
+ xset r rate 300 50
+
+ # New key behaviour on Hold
+ # lines after ! are comments
+ xmodmap - <<-EOF
+ ! Hold Caps_Lock -> Control_R
+ remove lock = Caps_Lock
+ remove Control = Control_R
+ ! keysym Control_R = Caps_Lock
+ keysym Caps_Lock = Control_R
+ ! add lock = Caps_Lock
+ add Control = Control_R
+ keycode any = Caps_Lock
+
+ ! Hold space -> Shift_R
+ remove shift = Shift_R
+ keycode 65 = Shift_R
+ add shift = Shift_R
+ keycode any = space
+
+ ! Hold Tab -> Super_L
+ ! ! Escape -> Tab
+ remove mod4 = Super_L
+ keycode 23 = Super_L
+ keycode any = Tab ISO_Left_Tab Tab ISO_Left_Tab
+ ! keycode 133 = Tab ISO_Left_Tab Tab ISO_Left_Tab
+ add mod4 = Super_L
+ ! keycode 230 = Escape
+ ! keycode 9 = Tab ISO_Left_Tab Tab ISO_Left_Tab
+ EOF
+
+ # New key behaviour on Tap
+ killall xcape 2>/dev/null
+ xcape -t "$timeout" -e "Super_L=Tab"
+ xcape -t "$timeout" -e "Control_R=Escape"
+ xcape -t "$timeout" -e "Shift_L=Caps_Lock"
+ xcape -t "$timeout" -e "Shift_R=space"
+ date > "$status_file"
+ xset led 3
+ msg "keys remapped"
+}
+
+
+reset_keys() {
+ msg "resetting keys..."
+ xset r rate
+ killall xcape 2>/dev/null
+ setxkbmap -layout us
+ xmodmap "$keymap_file"
+
+ [ -f "$status_file" ] && rm "$status_file"
+ xset -led 3
+ msg "keys reset"
+}
+
+toggle_remap() {
+ if [ -f "$status_file" ]; then
+ reset_keys
+ else
+ remap_keys
+ fi
+}
+
+remap_status() {
+ if [ -f "$status_file" ]; then
+ printf "Keys are remapped since "
+ cat "$status_file"
+ else
+ echo "Keys are NOT remapped"
+ fi
+}
+
+case "$action" in
+ s) remap_status ;;
+ x) reset_keys ;;
+ t) toggle_remap ;;
+ *) remap_keys ;;
+esac
diff --git a/.local/bin/desktop/remapd b/.local/bin/desktop/remapd
new file mode 100755
index 0000000..851d7d2
--- /dev/null
+++ b/.local/bin/desktop/remapd
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+while :; do
+ remap
+ grep -qP -m1 '[^un]bind.+\/[^:]+\(usb\)' <(udevadm monitor -u -t seat -s input -s usb)
+done
diff --git a/.local/bin/desktop/setdp b/.local/bin/desktop/setdp
new file mode 100755
index 0000000..48c6a7a
--- /dev/null
+++ b/.local/bin/desktop/setdp
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+displays="$(xrandr | grep "^\S* connected" | cut -d\ -f1)"
+display_count="$(echo "$displays" | wc -l)"
+
+[ "$display_count" -gt 2 ] &&
+ { echo "Too many displays to configure" >&2; exit 1; }
+
+set --
+
+
+if [ "$display_count" = 2 ]; then
+
+ for display in $displays; do
+ case "$display" in
+ eDP*) export PRIMARY="$display"; set -- "$@" --output "$display" --mode 1920x1080 --primary --pos 0x270 ;;
+ HDMI*) set -- "$@" --output "$display" --mode 1920x1080 --pos 1920x0 --scale "1.25x1.25" ;;
+ esac
+ done
+
+else
+
+ for display in $displays; do
+ case "$display" in
+ eDP*) set -- "$@" --output "$display" --primary --mode 1920x1080 --scale "1.1x1.1" ;;
+ HDMI*) set -- "$@" --output "$display" --mode 1366x768 --scale "1.25x1.25" ;;
+ LVDS*) set -- "$@" --output "$display" --primary ;;
+ DP*) set -- "$@" --output "$display" --primary --scale "1.1x1.1" ;;
+ esac
+ done
+
+fi
+
+
+eval "xrandr --auto $*"
+
diff --git a/.local/bin/desktop/show-i3-keybindings b/.local/bin/desktop/show-i3-keybindings
new file mode 100755
index 0000000..45d0626
--- /dev/null
+++ b/.local/bin/desktop/show-i3-keybindings
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+if [ -n "$TERM" ]; then
+ grep '^bindsym' ~/.config/i3/config | sort |
+ sed 's/^bindsym \(\S*\)\s\+\(.*\)$/\1|\2/; s/\$super+/ ๏…บ /; s/Shift+/๏ฌต /; s/$alt+/Alt /; s/Ctrl+/Ctrl /' |
+ column --table --separator='|' | less -r
+else
+ grep '^bindsym' ~/.config/i3/config | sort |
+ sed 's/^bindsym \(\S*\)\s\+\(.*\)$/\1|\2/; s/\$super+/ ๏…บ /; s/Shift+/Shift /; s/$alt+/Alt /; s/Ctrl+/Ctrl /' |
+ column --table --separator='|' | yad --text-info
+fi
diff --git a/.local/bin/desktop/toggle-xeyes b/.local/bin/desktop/toggle-xeyes
new file mode 100755
index 0000000..af5c590
--- /dev/null
+++ b/.local/bin/desktop/toggle-xeyes
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if pidof -q xeyes; then
+ killall xeyes
+else
+ setsid -f xeyes
+fi
diff --git a/.local/bin/desktop/torbrowser b/.local/bin/desktop/torbrowser
new file mode 100755
index 0000000..27e365b
--- /dev/null
+++ b/.local/bin/desktop/torbrowser
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+help() { echo "torbrowser - open or search in tor browser
+USAGE: torbrowser <open|search> [query]"; }
+
+cmd="$1"
+case "$cmd" in
+ open) extra_cmds='' ;;
+ search) extra_cmds='press ctrl+k' ;;
+ *) help >&2; exit 1 ;;
+esac
+
+query="$2"
+window="Tor Browser"
+windows=$(wmctrl -l)
+if [ "${windows##*"$window"}" = "$windows" ]; then
+ # query="$(dmenu -p "search in tor browser")" || exit
+ torbrowser-launcher && sleep 3
+fi
+
+press() {
+ xdotool keyup ctrl shift alt super meta BackSpace Tab Escape Return
+ xdotool key "$1"
+}
+
+wmctrl -a "$window"
+press ctrl+t
+$extra_cmds
+xdotool type "$query"
+press Return
diff --git a/.local/bin/desktop/volctl b/.local/bin/desktop/volctl
new file mode 100755
index 0000000..7d0edb9
--- /dev/null
+++ b/.local/bin/desktop/volctl
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+help() { echo "volctl - change system volume
+USAGE: volctl <toggle|up|down>"; }
+
+[ "$#" -lt 1 ] && help >&2 && exit 1
+
+case "$1" in
+ toggle) wpctl set-mute @DEFAULT_SINK@ toggle ;;
+ up) wpctl set-volume @DEFAULT_SINK@ 5%+ ;;
+ down) wpctl set-volume @DEFAULT_SINK@ 5%- ;;
+ *) help >&2; exit 1 ;;
+esac
+
+vol="$(wpctl get-volume @DEFAULT_SINK@ | tr -d .)"
+vol="${vol#Volume: }"
+
+notify() {
+ if [ -n "$DISPLAY" ]; then
+ notify-send -t 3000 -r 93475 "$1"
+ else
+ printf 'volume : '
+ wpctl get-volume @DEFAULT_SINK@
+ fi
+}
+
+if [ "$vol" != "${vol% \[MUTED\]}" ]; then
+ vol="${vol% \[MUTED\]}"
+ muted=1
+else
+ muted=0
+fi
+
+vol="$(printf '%.0f' "$vol")"
+
+msg=""
+if [ "$vol" -gt "100" ]; then icon="๐Ÿ“ข"; msg=" Boosted"
+elif [ "$vol" = "100" ]; then icon="๐Ÿ”Š"; msg=" Maxed"
+elif [ "$vol" -gt "70" ]; then icon="๐Ÿ”Š"
+elif [ "$vol" -gt "30" ]; then icon="๐Ÿ”‰"
+elif [ "$vol" -gt "0" ]; then icon="๐Ÿ”ˆ"
+else icon="๐Ÿ”‡"
+fi
+
+if [ "$muted" -eq 1 ]; then
+ notify "๐Ÿ”‡ Volume Muted ($vol%)"
+else
+ notify "$icon Volume$msg: $vol%"
+fi
+
diff --git a/.local/bin/development/dev b/.local/bin/development/dev
new file mode 100755
index 0000000..76f1772
--- /dev/null
+++ b/.local/bin/development/dev
@@ -0,0 +1,179 @@
+#!/bin/sh
+
+err() { [ "$DEV_SUPRESS_ERRORS" = 1 ] ||
+ printf "dev: %s\n" "$@" >&2; exit 5; }
+
+[ "$#" -lt 2 ] && { err "dev - execute action based on file
+USAGE: dev <ACTION> <FILE> [ARGS...]"; }
+
+action="$1"
+file="$2"
+basename="${file##*/}"
+shift 2
+
+[ -e "$file" ] || err "$file: No such file or directory"
+
+# auxilary functions
+findweb() { find "$@" -or -name '*.html'; }
+
+
+
+### #################################################################
+### BEGIN TASKS
+### #################################################################
+
+sh_lint() { shellcheck -x "$file"; }
+sh_run() { $(sed -n '1s|^#!/.*/\(.*\)|\1|p' "$file") "$file" "$@"; }
+zsh_run() { zsh "$file" "$@"; }
+awk_run() { awk -f "$file" "$@"; }
+pl_run() { perl "$file" "$@"; }
+
+md_run() { glow --pager --style dark "$file"; }
+md_test() { pandoc -t pdf "$file" | zathura -; }
+tex_compile() { pdflatex -output-directory="$(dirname "$file")" "$file"; }
+tex_clean() { find "$(dirname "${1}")" -regex \
+ '.*\(_minted.*\|.*\.\(4tc\|xref\|tmp\|pyc\|pyg\|pyo\|fls\|vrb\|fdb_latexmk\|bak\|swp\|aux\|log\|synctex\(busy\)\|lof\|lot\|maf\|idx\|mtc\|mtc0\|nav\|out\|snm\|toc\|bcf\|run\.xml\|synctex\.gz\|blg\|bbl\)\)' -delete; }
+html_format() { tidy -q "$file" 2>/dev/null; }
+html_lint() { tidy -q "$file" >/dev/null; }
+html_run() { w3m "$file"; }
+js_test() { node "$file"; }
+json_format() { jq . "$file"; }
+php_run() { php "$file" "$@"; }
+
+c_compile() { make "${file%.c}"; }
+c_run() { "$(realpath "${file%.c}")" "$@"; }
+c_clean() { rm -v "${file%.c}"; }
+
+go_format() { gofmt "$file"; }
+go_lint() { gofmt -d "$file"; }
+go_compile() { go build "$file"; }
+go_run() { "$(realpath "${file%.go}")" "$@"; }
+go_test() { go run "$file" "$@"; }
+go_serve() { findweb . -name '*.go' | entr -r sh -c "printf '\n\n$ go run *.go\n'; go run *.go"; }
+
+c_test() {
+ out="${file%.c}"
+ # ARGS="$(sed -nE -e 's|.*#include\s*<(.*)>|-l\1|gp' "$file" |
+ # paste -d' ' -s)"
+ # echo "$ clang -o $out $file $ARGS"
+ # clang -o "$out" "$file" $ARGS && "$out" "$@"
+ make "$out" && echo && "$(realpath "$out")" "$@"
+}
+
+cpp_test() {
+ out="$(realpath "${file%.cpp}")"
+ if [ -f GNUmakefile ] || [ -f makefile ] || [ -f Makefile ]; then
+ make && "${out%/*}/main" "$@"
+ else
+ g++ -o "$out" "$file" && "$out" "$@"
+ fi
+}
+
+ino_test() {
+ [ -t 1 ] || set -- --no-color
+ if [ -c /dev/ttyACM0 ]; then
+ arduino-cli compile --fqbn arduino:avr:uno "$file" "$@"
+ arduino-cli upload --fqbn arduino:avr:uno --port /dev/ttyACM0 "$file" "$@"
+ if [ -t 1 ]; then
+ picocom /dev/ttyACM0
+ else
+ stty -F /dev/ttyACM0 raw 9600
+ cat /dev/ttyACM0
+ fi
+ else
+ arduino-cli compile --fqbn arduino:avr:uno --output-dir . "$file" "$@"
+ rm -- *.eep *.elf *.bin *.with_bootloader.hex
+ fi
+}
+
+java_test() {
+ if [ -f build.xml ]; then
+ ant
+ build="$(find . -name 'classes' -or -name 'build' | tail -1)"
+ class="$({ cd "$build" &&
+ find . -name "$(basename "$file" .java).class"; } |
+ tail -1 | cut -c 3- | sed 's|.class||g' | tr '/' '.')"
+ else
+ mkdir -pv build
+ build="$(dirname "$file")/build"
+ class="$(basename "$file" .java)"
+ javac -d "$build" "$file"
+ fi
+ java -cp "$build:lib/*" "$class"
+}
+
+kt_test() {
+ out="${file%.*}.jar"
+ bash /opt/android-studio/plugins/Kotlin/kotlinc/bin/kotlinc "$file" -include-runtime -d "$out"
+ java -jar "$out"
+ rm "$out"
+}
+
+py_serve() { findweb . -name '*.py' | entr -r python "$file"; }
+# py_lint() {
+# [ -t 1 ] && printf '\033[33m'
+# pycodestyle "$file" >&2
+# [ -t 1 ] && printf '\033[0;39m'
+# }
+
+py_run() {
+ python "$file" "$@"
+ # if [ -x "${XDG_DATA_HOME:-$HOME/.local/share}/virtualenvs/main/bin/python" ]; then
+ # "${XDG_DATA_HOME:-$HOME/.local/share}/virtualenvs/main/bin/python" "$file" "$@"
+ # else
+ # python "$file" "$@"
+ # fi
+}
+
+### #################################################################
+### END TASKS
+### #################################################################
+
+
+
+filetype=$(file --brief --mime-type "$file")
+case $filetype in
+ text/x-c) filetype_ext="c" ;;
+ text/x-script.python) filetype_ext="py" ;;
+ text/x-shellscript) filetype_ext="sh" ;;
+ text/html) filetype_ext="html" ;;
+ application/javascript) filetype_ext="js" ;;
+ text/x-php) filetype_ext="php" ;;
+ text/x-awk) filetype_ext="awk" ;;
+esac
+
+if [ "${basename#*.}" != "${basename}" ]; then
+ file_ext="${basename##*.}"
+else
+ [ -z "$filetype_ext" ] && err "no file type association for $filetype"
+ NO_BASENAME=1
+fi
+
+execute_task() {
+ [ "$NO_BASENAME" != 1 ] && {
+ file_task="${file_ext}_${action}"
+ [ "${tasks#*"[$file_task]"}" != "$tasks" ] &&
+ { $file_task; local ret=$?; local tasked=1; }
+ }
+ [ "$tasked" != 1 ] && {
+ filetype_task="${filetype_ext}_${action}"
+ [ "${tasks#*"[$filetype_task]"}" != "$tasks" ] &&
+ { $filetype_task; local ret=$?; local tasked=1; }
+ }
+ [ "$tasked" != 1 ] && return 1
+ [ "$ret" != 0 ] && printf "\nshell returned %s\n" "$ret" >&2
+ return 0
+}
+
+tasks="$(sed -n "/^### BEGIN TASKS$/,/^### END TASKS$/ s/\(^[a-zA-Z0-9_]\+\)().*/[\1]/p" "$0")"
+
+if [ "$action" = test ]; then
+ execute_task && exit
+ for action in lint compile run; do
+ execute_task && tested=1
+ done
+ [ "$tested" != 1 ] && err "no tests for .${file_ext:-$filetype_ext} file"
+ exit 0
+fi
+
+execute_task || err "no $action action for .${file_ext:-$filetype_ext} file"
diff --git a/.local/bin/development/getcomproot b/.local/bin/development/getcomproot
new file mode 100755
index 0000000..16e946a
--- /dev/null
+++ b/.local/bin/development/getcomproot
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# author: Luke Smith
+#
+# 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="$(grep -i "^.\+\s*root\s*=\s*\S\+" "$1")"
+texroot="${texroot##*=}"
+texroot="${texroot//[\"\' ]}"
+
+[ -f "$texroot" ] && readlink -f "$texroot" || exit 1
diff --git a/.local/bin/development/gitpush b/.local/bin/development/gitpush
new file mode 100755
index 0000000..97aa43b
--- /dev/null
+++ b/.local/bin/development/gitpush
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+case "$(git config --get remote.origin.url)" in
+ *csstudent41*) sshadd ~/.ssh/github.com_id_ed25519 ;;
+ *labstudent41*) sshadd ~/.ssh/labstudent41_id_ed25519 ;;
+esac
+
+git add --all
+git commit # --allow-empty-message
+git push -u origin
diff --git a/.local/bin/development/gitw b/.local/bin/development/gitw
new file mode 100755
index 0000000..881c81c
--- /dev/null
+++ b/.local/bin/development/gitw
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# git-web: open the url of current git repositary in a web browser.
+# USAGE: gitw [remote]
+# 'remote' is set to origin if not provided.
+
+err() { printf "gitw: %s\n" "$@" >&2; exit 1; }
+
+git rev-parse --is-inside-work-tree >/dev/null || exit
+
+remote="${1:-origin}"
+url="$(git remote get-url "$remote" |
+ sed "s|^git@\(\S\+\):|https://\1/|")" || exit
+
+[ -z "$url" ] || [ "$remote" = "$url" ] &&
+ err "remote has no url: $remote"
+
+xdg-open "$url"
diff --git a/.local/bin/development/ipy b/.local/bin/development/ipy
new file mode 100755
index 0000000..1f39550
--- /dev/null
+++ b/.local/bin/development/ipy
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+unset PYTHONSTARTUP
+"${XDG_DATA_HOME:-$HOME/.local/share}/virtualenvs/main/bin/ipython" "$@"
diff --git a/.local/bin/development/ipytest b/.local/bin/development/ipytest
new file mode 100755
index 0000000..17a5a55
--- /dev/null
+++ b/.local/bin/development/ipytest
@@ -0,0 +1,23 @@
+#!/bin/sh
+# create a 'dev' firefox profile and use it in selenium
+
+[ -z "$FF_DEV_PROFILE" ] && [ -d ~/.librewolf ] &&
+ FF_DEV_PROFILE="$(find ~/.librewolf/ -maxdepth 1 -type d -name '????????.dev')"
+
+[ -z "$FF_DEV_PROFILE" ] && [ -d ~/.librewolf ] &&
+ FF_DEV_PROFILE="$(find ~/.mozilla/ -maxdepth 1 -type d -name '????????.dev')"
+
+ipy -i -c "
+from selenium import webdriver
+from selenium.webdriver.common.by import By
+
+options = webdriver.FirefoxOptions()
+options.binary_location = '/usr/bin/librewolf'
+options.profile = webdriver.FirefoxProfile(\"$FF_DEV_PROFILE\")
+
+d = webdriver.Firefox(options=options)
+d.get(\"${1:-http://127.0.0.1}\")
+
+import atexit
+atexit.register(d.quit)
+"
diff --git a/.local/bin/development/nx b/.local/bin/development/nx
new file mode 100755
index 0000000..862be99
--- /dev/null
+++ b/.local/bin/development/nx
@@ -0,0 +1,148 @@
+#!/bin/sh
+
+help() {
+ echo "nx - create new script"
+ echo "USAGE: nx <script_name>"
+}
+
+err() { printf '%s: %s\n' "$0" "$@" >&2; exit 1; }
+warn() {
+ printf '%s: %s [Y/n] ' "$0" "$@" >&2; read -r arg
+ case "$arg" in ''|y|Y) ;; *) exit ;; esac
+}
+
+while getopts 'h' o; do case "$o" in
+ h) help >&2; exit ;;
+ *) err "invalid option -- '$OPTARG'" ;;
+esac done
+shift $((OPTIND - 1))
+
+[ "$#" -lt 1 ] && help && exit 1
+[ "$#" -gt 1 ] && err "too many arguments. Only one expected"
+
+
+new_script() {
+ cat << EOF > "$1"
+#!/bin/sh
+
+help() { echo "$1 -
+
+USAGE:
+ $1 [OPTION]...
+
+OPTIONS:
+ -h show this help message"; }
+
+err() { printf '$1: %s\n' "\$@" >&2; exit 1; }
+while getopts 'h' o; do case "\$o" in
+ h) help; exit ;;
+ *) err "invalid option -- '\$OPTARG'" ;;
+esac done
+shift \$((OPTIND - 1))
+
+[ "\$#" -lt 1 ] && help >&2 && exit 1
+
+EOF
+
+ chmod u+x -- "$1" || exit
+}
+
+
+new_c_file() {
+ cat << EOF > "$1"
+#include <stdio.h>
+
+int main()
+{
+ printf("Hello\n");
+
+ return 0;
+}
+EOF
+}
+
+
+new_cpp_file() {
+ cat << EOF > "$1"
+#include <iostream>
+
+using namespace std;
+
+int main()
+{
+ cout << "Hello" << endl;
+
+ cin.get();
+ return 0;
+}
+EOF
+}
+
+
+new_py_file() {
+ cat << EOF > "$1"
+import timeit
+
+print("Finished in %fs" % timeit.timeit())
+EOF
+}
+
+
+new_java_file() {
+ PATTERN="Scanner"
+ VIMCMDS="normal!2n\n noh"
+ cat << EOF > "$1"
+import java.util.Scanner;
+
+class ${1%.java} {
+ public static void main(String args[]) {
+ Scanner sc = new Scanner(System.in);
+
+ System.out.println("Finished!");
+ sc.close
+ }
+}
+EOF
+}
+
+
+file="$1"
+
+new_file() {
+ case "$file" in
+ *.c) new_c_file "$file" ;;
+ *.cpp) new_cpp_file "$file" ;;
+ *.py) new_py_file "$file" ;;
+ *.java) new_java_file "$file" ;;
+ *) new_script "$file" ;;
+ esac
+}
+
+if [ -f "$file" ]; then
+ [ ! -w "$file" ] && chmod u+rw "$file"
+ if [ -s "$file" ]; then
+ warn "'$file' already exists, edit existing file?" || exit
+ else
+ warn "an empty file '$file' already exists, fill and edit?" &&
+ new_file "$file"
+ fi
+elif [ -e "$file" ]; then
+ err "'$file' already exists and is a non-regular file"
+else
+ new_file "$file"
+fi
+
+ls -lF --color -- "$file"
+
+case "$EDITOR" in
+ '') echo "$0: \$EDITOR variable not set" >&2 && exit 1 ;;
+ vi|*vim*)
+ VIMCONF="$(mktemp)"; export VIMCONF
+ [ -n "$VIOPTS" ] && echo "set $VIOPTS" >> "$VIMCONF"
+ [ -n "$PATTERN" ] && echo "/$PATTERN" >> "$VIMCONF"
+ [ -n "$VIMCMDS" ] && echo "$VIMCMDS" >> "$VIMCONF"
+ $EDITOR -S "$VIMCONF" "$file"
+ rm -f "$VIMCONF"
+ ;;
+ *) $EDITOR "$file" ;;
+esac; exit
diff --git a/.local/bin/development/opout b/.local/bin/development/opout
new file mode 100755
index 0000000..3adc8fd
--- /dev/null
+++ b/.local/bin/development/opout
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+basename="${1%.*}"
+err() { printf "opout: %s\n" "$@" >&2; exit 1; }
+
+case "${*}" in
+ '') err "filename required" ;;
+ *.tex|*.sil|*.m[dse]|*.[rR]md|*.mom|*.[0-9]) target="$(getcomproot "$1" || echo "$1")" ; setsid -f "${OPENER:-xdg-open}" "${target%.*}".pdf >/dev/null 2>&1 ;;
+ *.html) setsid -f xdg-open "$basename".html >/dev/null 2>&1 ;;
+ *.sent) setsid -f sent "$1" >/dev/null 2>&1 ;;
+ *) err "file extension unmatched"
+esac
diff --git a/.local/bin/development/pipsearch b/.local/bin/development/pipsearch
new file mode 100755
index 0000000..0d1d495
--- /dev/null
+++ b/.local/bin/development/pipsearch
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+{ sleep 1 && tmux send-keys /search\ results Enter; } &
+tmux new w3m "http://pypi.org/search?q=$*"
diff --git a/.local/bin/development/py b/.local/bin/development/py
new file mode 100755
index 0000000..af32c95
--- /dev/null
+++ b/.local/bin/development/py
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+"${XDG_DATA_HOME:-$HOME/.local/share}/virtualenvs/main/bin/python" "$@"
+
diff --git a/.local/bin/development/pyh b/.local/bin/development/pyh
new file mode 100755
index 0000000..fdd524a
--- /dev/null
+++ b/.local/bin/development/pyh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# python-help: get help for keywords in python
+
+[ -x "${XDG_DATA_HOME:-$HOME/.local/share}/virtualenvs/main/bin/python" ] &&
+ alias python="${XDG_DATA_HOME:-$HOME/.local/share}/virtualenvs/main/bin/python"
+
+if [ "$#" -gt 0 ]; then
+ python -c "help('$*')"
+else
+ python -c "help()"
+fi
diff --git a/.local/bin/development/texclear b/.local/bin/development/texclear
new file mode 100755
index 0000000..6ad3c12
--- /dev/null
+++ b/.local/bin/development/texclear
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Clears the build files of a LaTeX/XeLaTeX build.
+# I have vim run this file whenever I exit a .tex file.
+
+[ "${1##*.}" = "tex" ] && {
+ find "$(dirname "${1}")" -regex '.*\(_minted.*\|.*\.\(4tc\|xref\|tmp\|pyc\|pyg\|pyo\|fls\|vrb\|fdb_latexmk\|bak\|swp\|aux\|log\|synctex\(busy\)\|lof\|lot\|maf\|idx\|mtc\|mtc0\|nav\|out\|snm\|toc\|bcf\|run\.xml\|synctex\.gz\|blg\|bbl\)\)' -delete
+} || printf "Provide a .tex file.\n"
+
diff --git a/.local/bin/fcode b/.local/bin/fcode
new file mode 100755
index 0000000..8da7a17
--- /dev/null
+++ b/.local/bin/fcode
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# fzf-unicode: get a list of emojis or unicode charecters using fzf
+# place your charecter files in plain text in ~/.local/share/chars/*
+
+FZF_HIST="$HOME/.local/share/fzf/unicode_history"
+mkdir -pv ~/.local/share/fzf
+
+if [ "$OPENFLAG" = 0 ]; then
+ notify-send fzf-unicode "$*"
+ chosen="$(printf '%s\n' "$@" | cut -d\ -f1 | tr -d '\n')"
+ echo "$chosen" | xclip -selection clipboard
+ notify-send "'$chosen' copied to clipboard."
+ exit
+fi
+
+cut -d ';' -f1 ~/.local/share/chars/* |
+ fzf -m --history="$FZF_HIST" \
+ --header="Copy Emojis to Clipboard" --header-first \
+ --preview 'printf "%s\n" {+} | cut -d\ -f1 | tr -d "\n"' \
+ --preview-window=nohidden,up,1 \
+ --bind 'ctrl-/:change-preview-window(down|up)' \
+ --bind 'enter:execute(echo {q} >> $FZF_HIST; OPENFLAG=0 fzf-unicode {+})'
diff --git a/.local/bin/fdict b/.local/bin/fdict
new file mode 100755
index 0000000..8a4ed61
--- /dev/null
+++ b/.local/bin/fdict
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# fzf-dict: get word definitions using sdcv
+
+mkdir -pv ~/.local/share/fzf
+export SDCV_PAGER="less -R"
+
+if [ "$OPENFLAG" = 0 ]; then
+ sdcv --color \
+ -u 'WordNetยฎ 3.0 (En-En)' \
+ -u 'American Heritage Dictionary 4th Ed. (En-En)' \
+ -u 'Urban Dictionary P1 (En-En)' \
+ -u 'Urban Dictionary P2 (En-En)' \
+ "$@"
+ sdcv -u 'Wikipedia English - Free Encyclopedia' "$@" | w3m -T text/html
+ exit
+fi
+
+grep -v \' "${PREFIX:-/usr}/share/dict/words" | fzf \
+ --history "$HOME/.local/share/fzf/word_history" \
+ --header "Startdict Dictionary" --header-first \
+ --preview='OPENFLAG=0 fzf-words {} | fold -sw "$FZF_PREVIEW_COLUMNS"' \
+ --preview-window='nohidden,75%' --tiebreak=begin --print-query \
+ --bind 'alt-enter:execute(OPENFLAG=0 fzf-words {q})' \
+ --bind 'enter:execute(OPENFLAG=0 fzf-words {})'
diff --git a/.local/bin/fgrp b/.local/bin/fgrp
new file mode 100755
index 0000000..ddf3448
--- /dev/null
+++ b/.local/bin/fgrp
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# fzf-grep: browse through grepped lines using fzf
+
+if [ "$OPENFLAG" = 0 ]; then
+ location="$(echo "$*" | sed 's/^\(.*\):\([0-9]\+\):.*$/\1|\2/')"
+ file="${location%|*}"; line="${location##*|}"
+ case "${OPENWITH:=$EDITOR}" in
+ ''|vi|*vim*) $OPENWITH +"$line" "$file" ;;
+ *) $OPENWITH "$file" ;;
+ esac; exit
+fi
+
+mkdir -pv "${XDG_DATA_HOME:=$HOME/.local/share}/fzf"
+export FZF_HIST="$XDG_DATA_HOME/fzf/grep_history"
+grep -Rnsi --exclude-dir=.git --exclude-dir=node_modules --color=always "$@" |
+ fzf --ansi \
+ --history="$FZF_HIST" \
+ --prompt="grep > " \
+ --preview='preview "$(echo {1} | cut -d: -f1)"' \
+ --preview-window="hidden" \
+ --bind 'ctrl-v:toggle-preview,ctrl-space:toggle-preview' \
+ --bind "ctrl-r:reload(grep -Rns --color=always $*)" \
+ --bind 'enter:execute(echo {} >> "$FZF_HIST"; OPENFLAG=0 fgrp {})' \
+ --bind 'alt-e:execute(echo {} >> "$FZF_HIST"; OPENFLAG=0 OPENWITH=${EDITOR:-vi} fgrp {})' \
+ --bind 'alt-o:execute(echo {} >> "$FZF_HIST"; OPENFLAG=0 OPENWITH=${OPENER:-xdg-open} fgrp {})' \
+ --bind 'alt-O:execute(echo {} >> "$FZF_HIST"; OPENFLAG=0 OPENWITH=${FILES:-lf} fgrp {})'
diff --git a/.local/bin/filter b/.local/bin/filter
new file mode 100755
index 0000000..9d3e5e3
--- /dev/null
+++ b/.local/bin/filter
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+help() { echo "filter - filter input based on given expression to evaluate
+
+USAGE:
+ filter [OPTION]... <FILTER_EXPRESSION> [FILES]...
+
+OPTIONS:
+ -i update files with filtered content
+ -h show this help message
+
+FILTER_EXPRESSION is a contains the command string that will be executed to test
+the input line. {} should be used as a placeholder that will be replaced to the
+double-quoted string of the input line. If the command evaluates to true, the
+line is printed to stdout.
+"; }
+
+err() { printf 'filter: %s\n' "$@" >&2; exit 1; }
+while getopts 'ih' o; do case "$o" in
+ i) iflag=1 ;;
+ h) help; exit ;;
+ *) err "invalid option -- '$OPTARG'" ;;
+esac done
+shift $((OPTIND - 1))
+
+[ "$#" -lt 1 ] && help >&2 && exit 1
+filter="$1"; shift
+
+evaluate() {
+ while IFS= read -r line; do
+ escaped_line="$(printf "%s\n" "$line" | sed "s|\"|\\\\\\\\\"|")"
+ cmd="$(printf "%s\n" "$filter" | sed "s|{}|\"$escaped_line\"|")"
+ eval "$cmd" && printf "%s\n" "$line"
+ done
+}
+
+if [ "$iflag" = 1 ]; then
+ for file in "$@"; do
+ [ -z "$1" ] && err "option -i requires file argument and none were passed"
+ tmp="$(mktemp "/tmp/$file.tmp-filter.XXXXXX")"
+ evaluate < "$file" > "$tmp"
+ mv "$tmp" "$file"
+ done
+ exit
+fi
+
+if [ -n "$1" ]; then
+ evaluate < "$@"
+else
+ evaluate
+fi
+
diff --git a/.local/bin/fm b/.local/bin/fm
new file mode 100755
index 0000000..2f4fbb8
--- /dev/null
+++ b/.local/bin/fm
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# fzf-man: fuzzy search manual pages
+
+if [ "$OPENFLAG" = 0 ]; then
+ input="$*"; page="${input%%)*}";
+ name="${page%%[ (]*}"; section="${page#*(}"
+ if [ "$name" = "$section" ]; then
+ man "$name"
+ else
+ man "$section" "$name"
+ fi; exit
+fi
+
+mkdir -pv "${XDG_DATA_HOME:=$HOME/.local/share}/fzf"
+export FZF_HIST="${XDG_DATA_HOME:=$HOME/.local/share}/fzf/manual_history"
+
+apropos -l "${@:-.}" | fzf --history="$FZF_HIST" --prompt="man: " \
+ --preview='MANWIDTH=$FZF_PREVIEW_COLUMNS OPENFLAG=0 fm {}' \
+ --preview-window="hidden" --tiebreak="begin" \
+ --bind 'ctrl-v:toggle-preview,ctrl-space:toggle-preview' \
+ --bind 'enter:execute(echo {1} >> "$FZF_HIST"; OPENFLAG=0 fm {})'
diff --git a/.local/bin/fmd b/.local/bin/fmd
new file mode 100755
index 0000000..0139d77
--- /dev/null
+++ b/.local/bin/fmd
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# fzf-media: fuzzy search media files
+# Useful when you want to look through a list of video without having to
+# bother with their individual supplementary files like subtitles.
+
+export PREVIEW="${PREVIEW:-"cat \"\$(dirname {})/.description/\${\$(basename {})%.*}.txt\" 2>/dev/null || preview {}"}"
+
+find "$@" -type f \
+ ! -path '*/.*' \
+ ! -name '*.srt' \
+ ! -name '*.vtt' \
+ ! -name '*.description' \
+ ! -wholename '.description/*' \
+ ! -name '*.info.json' \
+ ! -name '*.live_chat.json' \
+ ! -name '*.yt*' |
+ sort |
+ fzf --multi --reverse \
+ --history="${FZF_HIST:=$HOME/.local/share/fzf/media_history}" \
+ --header="${FZF_HEADER:-Browse Media Files}" --header-first \
+ --preview="$PREVIEW" --preview-window=hidden \
+ --bind 'alt-C:execute( ffbrowser "$(mediainfo --inform="General;%Comment%" {})" )' \
+ --bind 'ctrl-o:execute(append-to-history {q} "$FZF_HIST"; ${OPENER:-xdg-open} {})' \
+ --bind "alt-3:change-preview($PREVIEW)" \
+ --bind 'alt-#:execute($PREVIEW | less)'
diff --git a/.local/bin/fpm b/.local/bin/fpm
new file mode 100755
index 0000000..8da3d35
--- /dev/null
+++ b/.local/bin/fpm
@@ -0,0 +1,148 @@
+#!/bin/sh
+
+help() { echo "fzf-pm - fzf package manager
+
+USAGE:
+ fzf-pkgs [OPTION]... [QUERY]
+
+OPTIONS:
+ -g list global [all] packages
+ -l list local [instllaed] packages (default)
+ -i select and install packages (implies -g)
+ -u select and uninstall packages (implies -l)
+ -v show verbose output
+ -h show this help message
+
+ (for Arch linux only)
+ -a AUR_HELPER specify command for AUR helper
+
+ (special options)
+ -s PACKAGE print package info
+ -p print package manager
+
+ Note: passing global (-g) or local (-l) pkg list will cancel
+ any install (-i) or uninstall (-u) operations started previously.
+
+ENVIRONMENT VARIABLES:
+ AUR_HELPER set an AUR helper command for Arch linux
+
+Following package managers are supported:
+ apt, pkg, pacman and any pacman compatible AUR helper
+
+QUERY is mandatory when using an AUR Helper" ;}
+
+while getopts 's:gliuha:p' o; do case "$o" in
+ s) sflag=0; pkg="$OPTARG" ;;
+ g) operation=""; opmsg=""; list_all=0 ;;
+ l) operation=""; opmsg=""; list_all=1 ;;
+ i) operation="install_pkgs"; opmsg="to Install"; list_all=0 ;;
+ u) operation="uninstall_pkgs"; opmsg="to Uninstall"; list_all=1 ;;
+ h) help; exit ;;
+ a) export AUR_HELPER="$OPTARG" ;;
+ p) pflag=0 ;;
+ *) printf "fzf-pkgs: invalid option -- '%s'" "$OPTARG"; exit 1 ;;
+esac done
+shift $((OPTIND - 1))
+
+if command -v apt-get >> /dev/null; then
+ alias pkg_sort='sed -e "s/ - / => /"'
+
+ if [ "$list_all" = 0 ]; then
+ export pkg_info='apt-cache show'
+ alias list_pkgs='apt-cache search .'
+ alias search_pkg='apt-cache search'
+ else
+ export DPKG_COLOR='always'
+ export pkg_info='dpkg-query --status'
+ format='${Package} - ${Description}\n'
+ alias list_pkgs='dpkg-query --show --showformat "$format"'
+ alias search_pkg='dpkg-query --show --showformat "$format" | grep'
+ fi
+
+ if command -v pkg >> /dev/null; then
+ export PKGMAN="pkg"
+ alias install_pkgs='pkg install'
+ alias uninstall_pkgs='pkg uninstall'
+ else
+ export PKGMAN="apt"
+ alias install_pkgs='sudo apt-get install'
+ alias uninstall_pkgs='sudo apt-get remove'
+ fi
+
+elif command -v pacman >> /dev/null; then
+ alias pkg_sort='sed -e "N;s/\n\s*/ => /"'
+
+ if [ -n "$AUR_HELPER" ]; then
+ export PKGMAN="$AUR_HELPER"
+ if command -v "$PKGMAN" >/dev/null; then
+ alias install_pkgs='$PKGMAN -S'
+ alias uninstall_pkgs='$PKGMAN -Rns'
+ else
+ echo "fzf-pkgs: AUR Helper '$PKGMAN' command not found" >&2 &&
+ exit 1
+ fi
+ else
+ export PKGMAN='pacman'
+ alias install_pkgs='sudo $PKGMAN -S'
+ alias uninstall_pkgs='sudo $PKGMAN -Rns'
+ fi
+
+ if [ "$list_all" = 0 ]; then
+ export pkg_info="$PKGMAN --color=always -Si"
+ alias list_pkgs='$PKGMAN --color=always -Ss'
+ alias search_pkg='$PKGMAN --color=always -Ss'
+ else
+ export pkg_info="$PKGMAN --color=always -Qi"
+ alias list_pkgs='$PKGMAN --color=always -Qs'
+ alias search_pkg='$PKGMAN --color=always -Qs'
+ fi
+
+else
+ echo "fzf-pkgs: package manager not found" >&2
+ exit 1
+fi
+
+if [ "$pflag" = 0 ]; then
+ printf "%s\n" "$PKGMAN"
+ exit
+elif [ "$sflag" = 0 ]; then
+ printf "$ %s '%s'\n" "$pkg_info" "$pkg"
+ $pkg_info $pkg
+ exit
+fi
+
+query="$1"
+if [ -n "$AUR_HELPER" ] && [ -z "$query" ] && [ "$list_all" = 0 ]; then
+ echo "fzf-pkgs: providing QUERY is mandatory when using an AUR Helper"
+ exit 1
+ # printf "query: "; read -r query
+ # [ -z "$query" ] && exit 1
+fi
+
+if [ -n "$query" ]; then
+ prompt="searching '$query' "
+ get_pkgs() { search_pkg "$query"; }
+else
+ get_pkgs() { list_pkgs; }
+fi
+
+[ -z "$FZF_HIST_DIR" ] && export FZF_HIST_DIR="$HOME/.local/share/fzf"
+fzff() {
+ preview='
+ echo "selected packages:";
+ printf "\t%s\n" {+1} | tr " " "\n"
+ echo
+ eval "$pkg_info 2>/dev/null" {1}
+ '
+ fzf --ansi --multi \
+ --history="${FZF_HIST_DIR:-$HOME/.local/share}/package_history" \
+ --header="Select packages $opmsg" --header-first --prompt="$prompt> " \
+ --preview="$preview" --preview-window="hidden" --tiebreak='begin' \
+ --bind 'ctrl-v:toggle-preview,ctrl-space:toggle-preview'
+}
+
+pkgs="$(get_pkgs | pkg_sort | fzff | cut -d' ' -f1 | tr '\n' ' ')"
+[ -n "$pkgs" ] || exit 2
+echo "$pkgs"
+[ -n "$operation" ] && eval $operation $pkgs
+
diff --git a/.local/bin/fsend b/.local/bin/fsend
new file mode 100755
index 0000000..f75739d
--- /dev/null
+++ b/.local/bin/fsend
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+content="${1:-$(xprint | fzf -m --header "Select clipboard lines to send")}" || exit
+host="${2:-$(sed '/^Host \(.*\)/!d; s//\1/' ~/.ssh/config | fzf --header "Send to?")}" || exit
+sshadd "$(find ~/.ssh -name "${host}_id_*" | head -1)"
+[ -z "$NOTIFY" ] && command -V notify-send >/dev/null && NOTIFY=1
+
+notify() {
+ [ "$NOTIFY" = 1 ] && notify-send -r 8529 "$@"
+ printf "%s\n" "$@"
+}
+
+transferto() {
+ notify "Transfering files to $host:$1/" "$content"
+ rsync -PLru --progress "$content" "$host:$1/"
+}
+
+if [ -e "$content" ]; then
+ case "$content" in
+ *.txt|*.pdf) transferto "Documents" ;;
+ *)
+ case "$(file --brief --mime-type "$content")" in
+ text/*) transferto "Documents" ;;
+ image/*) transferto "Pictures" ;;
+ audio/*) transferto "Music" ;;
+ video/*) transferto "Videos" ;;
+ *) transferto "Downloads" ;;
+ esac
+ ;;
+ esac
+
+else
+ case "$content" in
+ http*) notify "Opening link in $host" "$content"
+ ssh "$host" "xdg-open \"$content\"" ;;
+ *) notify "Copying in $host's clipboard" "$content"
+ ssh "$host" "termux-clipboard-set \"$content\"" ;;
+ esac
+fi
+
+if [ $? = 0 ]; then
+ notify " ๏€Œ Done (fzf-send)"
+else
+ notify " โŒ Errors Occured (fzf-send)"
+ printf "\n%s" "Press Enter to continue..."
+ read -r
+fi
diff --git a/.local/bin/fw b/.local/bin/fw
new file mode 100755
index 0000000..ada20e8
--- /dev/null
+++ b/.local/bin/fw
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+export FZF_HIST="$HOME/.local/share/fzf/wiki_history"
+export FZF_HEADER="Search local wiki files"
+export FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS --delimiter='/' --with-nth=-1"
+fmd \
+ /mnt/storage/Media/Tech/ \
+ /mnt/storage/Library \
+ /usr/share/doc/arch-wiki/html/en \
+ "$@" ! -name '*.css'
diff --git a/.local/bin/help b/.local/bin/help
new file mode 100755
index 0000000..046b1cc
--- /dev/null
+++ b/.local/bin/help
@@ -0,0 +1,99 @@
+#!/bin/sh
+
+help() { echo "help - get help for shell commands or programs
+
+USAGE:
+ help [OPTION...] <QUERY>
+
+OPTIONS:
+ -a show all available help
+ -h show this help message
+ "; }
+
+while getopts 'avh' o; do case "$o" in
+ a) aflag=0;;
+ h) help; exit ;;
+ *) printf "help: invalid option -- '%s'" "$OPTARG" ;;
+esac done
+shift $((OPTIND - 1))
+
+[ "$#" -lt 1 ] && help >&2 && exit 2
+
+
+##############################################################
+### H E L P F U N C T I O N S I N O R D E R ###
+##############################################################
+
+man_query() {
+ man -w "$query" >/dev/null 2>&1 || return 2
+ man -a "$query"
+}
+
+info_query() {
+ # if command -v info
+ [ -n "$(info --where "$query")" ] || return 2
+ info --vi-keys --all "$query"
+}
+
+show_script() {
+ file="$(which "$query" 2>/dev/null)" || return 2
+ "${PAGER:-less}" "$file"
+}
+
+cmd_help() {
+ if content="$($query -h 2>/dev/null)"; then
+ printf "$ %s -h" "$query"
+ elif content="$($query --help 2>/dev/null)"; then
+ printf "$ %s --help" "$query"
+ else
+ return 2
+ fi
+ printf '\n%s\n' "$content" | "${PAGER:-less}" -X
+ echo
+}
+
+tldr_query() {
+ content="$(tldr --color=always "$query" 2>/dev/null)" || return 2
+ printf "\n$ tldr '%s'\n%s\n\n" "$query" "$content" | "${PAGER:-less}" -X
+}
+
+pkg_info() {
+ if command -v pacman >/dev/null; then
+ cmd="$ pacman -Si $query"
+ info="$(pacman -Si "$query" 2>/dev/null)" || return 2
+ elif command -v apt >/dev/null; then
+ cmd="$ apt show $query"
+ info="$(apt show "$query" 2>/dev/null)" || return 2
+ elif command -v pkg >/dev/null; then
+ cmd="$ pkg info $query"
+ info="$(pkg info "$query" 2>/dev/null)" || return 2
+ else
+ return
+ fi
+ [ -z "$info" ] && return 2
+ printf "\n%s\n%s\n\n" "$cmd" "$info" | "${PAGER:-less}" -X
+}
+
+##########################################################
+### E N D O F H E L P F U N C T I O N S ###
+##########################################################
+
+
+help_funcs="$(sed -ne "/^### H E L P/,/^### E N D/ s/^\([a-zA-Z0-9_]\+\)\(\).*/\1/p" "$0")"
+main() {
+ if [ "$aflag" = 0 ]; then
+ eval "$help_funcs"
+ else
+ eval "$(echo "$help_funcs" | sed -z 's/\n/||/g' | sed 's/||$//')"
+ fi
+}
+
+query="$*"
+[ -f "$query" ] && { "${PAGER:-less}" "$query"; exit 0; }
+[ -d "$query" ] &&
+ { ls -AlFh --color --group-directories-first -- "$query"; exit 0; }
+
+command -V "$query" 2>/dev/null && { echo; export HELP_FOUND=1; }
+
+main || [ "$HELP_FOUND" = 1 ] ||
+ { echo "No help found for '$query'" >&2; exit 2; }
diff --git a/.local/bin/launch-gtypist b/.local/bin/launch-gtypist
new file mode 100755
index 0000000..c5f452f
--- /dev/null
+++ b/.local/bin/launch-gtypist
@@ -0,0 +1,101 @@
+#!/bin/sh
+
+
+help() {
+ echo "launch-gtypist - launch gtypist in fullscreen
+
+USAGE:
+ launch-gtypist [OPTION]...
+
+OPTIONS:
+ -l LESSON start gtypist lesson
+ -f FILE load lesson from a file
+ -e % max error percentage
+ -v verbose output
+ -h show this help message
+
+LESSON can optionally be followed by the exercise number seprated by a colon.
+Example - Q2:3, which means 3rd execercise of lesson Q2.
+If LESSON is provided through the command line along with a file with -f
+option then the file will ignored"
+}
+
+
+while getopts 'l:f:e:vh' o; do case "$o" in
+ l) use_file=1; current="$OPTARG" ;;
+ f) use_file=0; file="$OPTARG" ;;
+ e) export GTYPIST_OPTS="$GTYPIST_OPTS --max-error=$OPTARG" ;;
+ v) vflag=0 ;;
+ h) help; exit ;;
+ *) echo "launch-gtypist: invalid option -- '${OPTARG}'"
+ echo 'Try `launch-gtypist -h` for more information.' >&2; exit 1 ;;
+esac done
+shift $((OPTIND - 1))
+
+msg() { [ "$vflag" = 0 ] && printf ':: %s\n' "$@" >&2; true; }
+notify() {
+ [ -n "$DISPLAY" ] && notify-send 'launch-gtypist' "$@"
+ printf '%s\n' "$@"
+}
+
+if [ "$use_file" = 0 ]; then
+ msg "Getting lesson from file: $file"
+ current="$(sed -En 's/^gtypist lesson\s*-\s*(.*)$/\1/p' "$file")" ||
+ exit 1
+ [ -z "$current" ] &&
+ printf 'launch-gtypist: current gtypist lesson not found in:\n\t%s\n' \
+ "$file" && exit 1
+fi
+
+[ -n "$1" ] && current="$1" && shift
+[ "${current#*:}" != "$current" ] && lesson="${current%:*}" &&
+ exercise="${current##*:}" || lesson="$current"
+[ -n "$lesson" ] && {
+ msg "Gtypist lesson name: $lesson"
+ export GTYPIST_OPTS="$GTYPIST_OPTS --start-label=$lesson"
+}
+
+tmuxx() { [ -z "$TMUX" ] && return 1; tmux "$@"; }
+
+
+shift_exercise() {
+ msg "Shifting to exercise $exercise"
+ sleep 1
+
+ keys() {
+ if [ -n "$TMUX" ]; then
+ for key in "$@"; do
+ tmux send-keys -t gtypist "$key";
+ done
+ else
+ xdotool key --clearmodifiers --delay 100 "$@"
+ fi
+ }
+
+ for i in $(seq "$((exercise-1))"); do
+ if [ "$i" -gt 1 ]; then
+ keys Escape n
+ else
+ keys space space space space space Escape Escape n
+ fi
+ done
+}
+
+
+msg "Switcing to default keymap"
+# kmonad-manage stop
+remap -x
+
+msg "Waiting for terminal columns to get more than 100..."
+while [ "$(tput cols)" -lt 100 ]; do sleep 0.5; done
+tmuxx rename-window gtypist
+[ -n "$exercise" ] && shift_exercise &
+msg " >>> Gtypist started."
+msg " gtypist $GTYPIST_OPTS $*"
+gtypist $GTYPIST_OPTS $@
+msg " <<< Gtypist exited."
+tmuxx set-window-option automatic-rename on
+
+msg "Switcing to user keymap"
+# kmonad-manage start
+remap
diff --git a/.local/bin/lessopen.sh b/.local/bin/lessopen.sh
new file mode 100755
index 0000000..df4a58e
--- /dev/null
+++ b/.local/bin/lessopen.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+[ -d "$1" ] && { tree -CL 3 "$1"; exit; }
+
+if command -V highlight >/dev/null; then
+ highlight --force --out-format=ansi -- "$1"
+else
+ cat "$1"
+fi
diff --git a/.local/bin/loop b/.local/bin/loop
new file mode 100755
index 0000000..d3dccc7
--- /dev/null
+++ b/.local/bin/loop
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+help() {
+ echo "loop - execute command in loop
+
+USAGE:
+ loop [OPTION]... <COMMAND>
+
+OPTIONS:
+ -n INTERVAL sleep for given INTERVAL time between loops
+ all arguments of \`sleep\` command are valid
+ -c COUNT maximum count of loops (default: 1000)
+ -s clear screen for every execution
+ -q quiet, redirect output to /dev/null
+ -h show this help message
+
+ENVIRONMENT VARIABLES:
+ LOOP_INTERVAL set INTERVAL time
+ MAX_LOOP_COUNT set loop COUNT"
+}
+
+err() { printf 'loop: %s\n' "$@" >&2; exit 1; }
+
+while getopts 'sc:n:qh' o; do case "$o" in
+ s) cflag=1 ;;
+ n) export LOOP_INTERVAL="$OPTARG" ;;
+ c) export MAX_LOOP_COUNT="$OPTARG" ;;
+ q) qflag=1 ;;
+ h) help; exit ;;
+ *) err "invalid option -- $OPTARG" ;;
+esac done
+shift $((OPTIND - 1))
+
+[ "$#" -lt 1 ] && err "no COMMAND given"
+cmds="$*"
+max_count="${MAX_LOOP_COUNT:-1000}"
+[ -n "$LOOP_INTERVAL" ] && cmds="$cmds; sleep '$LOOP_INTERVAL'"
+[ "$cflag" = 1 ] && cmds="clear; $cmds"
+[ "$qflag" = 1 ] && cmds="$cmds >/dev/null"
+
+for count in $(seq "$max_count"); do
+ eval "$cmds" || break
+done
+
+[ "$count" -ge "$max_count" ] && err "reached max loop COUNT: $max_count"
diff --git a/.local/bin/lsinputs b/.local/bin/lsinputs
new file mode 100755
index 0000000..8bb091f
--- /dev/null
+++ b/.local/bin/lsinputs
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do
+ (
+ syspath="${sysdevpath%/dev}"
+ devname="$(udevadm info -q name -p $syspath)"
+ [[ "$devname" == "bus/"* ]] && exit
+ eval "$(udevadm info -q property --export -p $syspath)"
+ [[ -z "$ID_SERIAL" ]] && exit
+ echo "/dev/$devname - $ID_SERIAL"
+ )
+done
diff --git a/.local/bin/mnt b/.local/bin/mnt
new file mode 100755
index 0000000..8470667
--- /dev/null
+++ b/.local/bin/mnt
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+sudo mkdir -p "${MOUNTPATH:=/run/media/$USER}"
+sudo chown "$USER:$USER" "$MOUNTPATH"
+
+makepath() {
+ [ -d "$path" ] && { rmdir "$path" || exit; }
+ mkdir -p "$path"
+}
+
+case "$1" in
+
+ mtp:*)
+ path="$MOUNTPATH/${1#mtp:}"
+ makepath
+ simple-mtpfs "$path"
+ ;;
+
+ *:|*:/*)
+ path="$MOUNTPATH/${1%%:*}"
+ makepath
+ if grep -q "^\[${1%:}\]$" "${XDG_CONFIG_HOME:-$HOME/.config}/rclone/rclone.conf"; then
+ rclone mount --daemon "$1" "$path"
+ else
+ sshfs "$1" "$path"
+ fi
+ ;;
+
+ *)
+ if sudo cryptsetup isLuks "$1"; then
+ uuid=$(sudo cryptsetup luksUUID "$1" | tr -d -)
+ test -b /dev/disk/by-id/dm-uuid-*$uuid* && exit
+ sudo cryptsetup open "$1" "crypt-$uuid"
+ udisksctl mount -b "/dev/mapper/crypt-$uuid"
+ exit
+ fi
+ udisksctl mount -b "$1"
+ ;;
+esac
diff --git a/.local/bin/open b/.local/bin/open
new file mode 100755
index 0000000..a996105
--- /dev/null
+++ b/.local/bin/open
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+[ -z "$1" ] && echo "USAGE: open <FILE>" >&2 && exit 1
+
+for file in "$@"; do
+ case "$file" in
+
+ *.pdf|*.djvu|*.epub) setsid -f zathura "$file" ;;
+ *.png|*.jpg|*.jpeg|*.webp) setsid -f nsxiv "$file" ;;
+ *.gif|*.mkv|*.mp3|*.mp4|*.webm|*.ogg) ${PLAYER:-mpv --sub-auto=fuzzy} "$file" ;;
+ *.html) ${BROWSER:-w3m} "$file" ;;
+ *.pl.txt) fpl "$file" ;;
+ *.txt|*.description) ${PAGER:-less} "$file" ;;
+ *.md) glow --pager "$file" ;;
+ *.css|*.json|*.ipynb|*.vim|*.lua|*.iso|*.zip) LESSOPEN="|preview %s" less -r "$file" ;;
+ *.srt) fzf-subtitles -o "$file" ;;
+ *.dig) setsid -f digital "$file" ;;
+ *.doc|*.docx|*.ppt|*.pptx) setsid -f libreoffice "$file" ;;
+ *.sc|*.xls|*.xlsx) sc-im "$file" ;;
+ *.sim1) simulide "$file" ;;
+ *.xz) ${EDITOR:-nvim} "$file" ;;
+
+ *)
+ filetype="$(file --dereference --brief --mime-type "$file")"
+ case "$filetype" in
+ inode/directory) ${FILES:-lf} "$file" ; exit ;;
+ text/html*) ${BROWSER:-w3m} "$file" ;;
+ *pdf|*djvu|*epub+zip|*oxps|*fictionbook) setsid -f zathura "$file" ;;
+ text/*|*json|*zip|*zstd) "${EDITOR:-nvim}" "$file" ;;
+ application/vnd.openxmlformats-officedocument.*) setsid -f libreoffice "$file" ;;
+ application/sc) sc-im "$file" ;;
+ application/x-executable) "$file" ;;
+ image/*) setsid -f nsxiv "$file" ;;
+ video/*|audio/*) ${PLAYER:- mpv --sub-auto=fuzzy} "$file" ;;
+ *)
+ xdg-open "$file" || exit
+ [ -n "$DISPLAY" ] && notify-send "โš ๏ธ open: unknown filetype" "$filetype"
+ echo "open: unknown filetype: $filetype" >&2
+ ;;
+ esac
+ ;;
+
+ esac
+
+ file="$(realpath "$file")"
+ sed -i "\|^$file$|d" "${XDG_DATA_HOME:-$HOME/.local/share}/openhist"
+ echo "$file" >> "${XDG_DATA_HOME:-$HOME/.local/share}/openhist"
+done
diff --git a/.local/bin/preview b/.local/bin/preview
new file mode 100755
index 0000000..f0cedb0
--- /dev/null
+++ b/.local/bin/preview
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+if [ -d "$1" ]; then
+ if [ -x /bin/eza ] || [ -x /usr/bin/eza ]; then
+ eza -alhF --group-directories-first --color=always --icons -- "$1"
+ else
+ ls -lhAF --group-directories-first --color -- "$1"
+ fi
+ readme="$(find "$1" -maxdepth 1 -name "README.*" | head -1)"
+ [ -n "$readme" ] && preview "$readme"
+ exit
+fi
+
+alias highlight='highlight --out-format=ansi'
+
+case "$1" in
+ '') echo "preview: file name required" >&2; exit 1 ;;
+ *.html) w3m -dump "$1" ;;
+ *.md) glow -s dark --width="${FZF_PREVIEW_COLUMNS:-"$(tput cols)"}" "$1" ;;
+ # *.vim) highlight --syntax=vim --replace-tabs=2 -- "$1" ;;
+ *.js|*.vim|*.lua) highlight -- "$1" ;;
+ *.txt|*.description|*.srt) cat -- "$1" ;;
+ *.png|*.jpg|*.jpeg|*.webp|*.mp3|*.ogg|*.mp4|*.mkv|*.webm) mediainfo -- "$1" ;;
+ *.info.json) jq -C . "$1" ;;
+ *.json|*.ipynb) highlight --syntax=json -- "$1" ;;
+ *.tgz|*.tar.gz) tar tzf "$1" ;;
+ *.tar.bz2|*.tbz2) tar tjf "$1" ;;
+ *.tar.txz|*.txz) xz --list "$1" ;;
+ *.tar) tar tf "$1" ;;
+ *.zip|*.jar|*.war|*.ear|*.oxt) unzip -l "$1" ;;
+ *.rar) unrar l "$1" ;;
+ *.7z) 7z l "$1" ;;
+ *.zst) zstdcat "$1" ;;
+ *.[1-8]) man "$1" | col -b ;;
+ *.o) nm "$1" ;;
+ *.torrent) transmission-show "$1" ;;
+ *.iso) iso-info --no-header -l "$1" ;;
+ *odt|*.ods|*.odp|*.sxw) odt2txt "$1" ;;
+ *.doc) catdoc "$1" ;;
+ *.docx) docx2txt "$1" - ;;
+ # *.csv) sed s/,/\\n/g "$1" ;;
+
+ *)
+ filetype=$(file --dereference --brief --mime-type "$1")
+ case $filetype in
+ *html) w3m -dump "$1" ;;
+ text/markdown) glow -s dark -w "$(tput cols)" "$1" ;;
+ application/json) highlight --syntax=json --replace-tabs=2 -- "$1" ;;
+ text/*) highlight --force -- "$1" ;;
+ audio/*|video/*|image/*) mediainfo -- "$1" ;;
+ *xz) xz --list "$1" ;;
+ *zip|*tar*|*7z*|*bzip2) atool --list -- "$1" ;;
+ *opendocument*) odt2txt "$1" ;;
+ application/pgp-encrypted) gpg -d -- "$1" ;;
+ *) file -b "$1" ;;
+ esac
+ ;;
+
+esac
diff --git a/.local/bin/search b/.local/bin/search
new file mode 100755
index 0000000..d9c1a3d
--- /dev/null
+++ b/.local/bin/search
@@ -0,0 +1,62 @@
+#!/bin/sh
+
+help() { echo "search - search tool for unix users
+
+USAGE:
+ search [OPTION]... <QUERY>
+
+OPTIONS:
+ -h show this help message"; }
+
+err() { printf 'search: %s\n' "$@" >&2; exit 1; }
+while getopts 'h' o; do case "$o" in
+ h) help >&2; exit ;;
+ *) err "invalid option -- '$OPTARG'" ;;
+esac done
+shift $((OPTIND - 1))
+
+if [ "$PREVIEWFLAG" = 0 ]; then
+ [ -z "$INDEX" ] && export INDEX="$(echo "$*" | cut -d: -f1)"
+ [ -z "$LINE" ] && export LINE="$(echo "$*" | cut -d: -f2-)"
+
+ case "$INDEX" in
+ wiki) "${FILE_HANDLER:-preview}" "/usr/share/doc/$LINE" ;;
+ docs) "${FILE_HANDLER:-preview}" "$HOME/.local/share/Zeal/Zeal/docsets/$LINE" ;;
+ media) "${FILE_HANDLER:-preview}" "/run/media/$USER/Storage/Media/$LINE" ;;
+ library) "${FILE_HANDLER:-preview}" "/run/media/$USER/Storage/Library/$LINE" ;;
+ tldr) tldr --color=always "$LINE" ;;
+ word) sdcv-dict "$LINE" ;;
+ man)
+ page="${LINE%%)*}"; name="${page%%[ (]*}"; section="${page#*(}"
+ if [ "$name" != "$section" ]; then
+ man "$section" "$name"
+ else
+ man "$name"
+ fi
+ ;;
+ pacman) pacman --color=always -Si "${LINE%% *}" ;;
+ esac
+ exit
+fi
+
+if [ "$OPENFLAG" = 0 ]; then
+ export INDEX="$(echo "$*" | cut -d: -f1)"
+ export LINE="$(echo "$*" | cut -d: -f2-)"
+ export FILE_HANDLER="open"
+
+ case "$INDEX" in
+ wiki|docs|web-docs|media|library|man) PREVIEWFLAG=0 search ;;
+ *) PREVIEWFLAG=0 search | less -r ;;
+ esac
+ exit
+fi
+
+[ "$#" -lt 1 ] && help >&2 && exit 1
+FZF_HIST="$HOME/.local/share/fzf/search_history"
+
+cd "${SEARCHDB:-$HOME/.cache/search}" || exit
+mkdir -pv ~/.local/share/fzf
+grep -Rsi --color=always "$@" | fzf --ansi \
+ --history="$FZF_HIST" \
+ --preview="PREVIEWFLAG=0 search {}" \
+ --bind 'enter:execute(echo {} >> $FZF_HIST; OPENFLAG=0 search {})'
diff --git a/.local/bin/searchdb b/.local/bin/searchdb
new file mode 100755
index 0000000..57e3fa8
--- /dev/null
+++ b/.local/bin/searchdb
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+help() {
+ echo "searchdb - update local search database
+
+USAGE:
+ searchdb [OPTION]...
+
+OPTIONS:
+ -x clear all databases
+ -h show this help message"
+}
+
+err() { printf 'searchdb: %s\n' "$@" >&2; exit 1; }
+while getopts 'xh' o; do case "$o" in
+ x) rm -rf ~/.cache/search; exit ;;
+ h) help >&2; exit ;;
+ *) err "invalid option -- '$OPTARG'" ;;
+esac done
+shift $((OPTIND - 1))
+
+rm -rf ~/.cache/search
+export SEARCHDB="$HOME/.cache/search"
+mkdir -p "$SEARCHDB" || exit
+ln -sf /usr/share/dict/words "$SEARCHDB/word"
+
+tldr --list > "$SEARCHDB/tldr"
+apropos . > "$SEARCHDB/man"
+pacman -Ss | sed -e "N;s/\n\s*/ => /" > "$SEARCHDB/pacman"
+
+list() { find -L "$@" ! -wholename '*/.git*' -printf "%P\n"; }
+list /usr/share/doc > "$SEARCHDB/wiki"
+list ~/.local/share/Zeal/Zeal/docsets > "$SEARCHDB/docs"
+list -L "/run/media/$USER/Storage/Media" > "$SEARCHDB/media"
+list "/run/media/$USER/Storage/Library" > "$SEARCHDB/library"
diff --git a/.local/bin/setbg b/.local/bin/setbg
new file mode 100755
index 0000000..b636a37
--- /dev/null
+++ b/.local/bin/setbg
@@ -0,0 +1,18 @@
+--2024-10-23 16:26:25-- https://github.com/LukeSmithxyz/voidrice/blob/master/.local/bin/setbg
+Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt'
+Resolving github.com (github.com)... 20.207.73.82
+Connecting to github.com (github.com)|20.207.73.82|:443... connected.
+HTTP request sent, awaiting response... 200 OK
+Length: unspecified [text/html]
+Saving to: โ€˜setbgโ€™
+
+ 0K .......... .......... .......... .......... .......... 3.47M
+ 50K .......... .......... .......... .......... .......... 9.00M
+ 100K .......... .......... .......... .......... .......... 10.7M
+ 150K .......... .......... .......... .......... .......... 10.7M
+ 200K .......... .......... .......... .......... .......... 10.9M
+ 250K .......... .......... .......... .......... .......... 11.2M
+ 300K .......... .......... .......... ....... 10.8M=0.04s
+
+2024-10-23 16:26:25 (8.07 MB/s) - โ€˜setbgโ€™ saved [345695]
+
diff --git a/.local/bin/shortcuts b/.local/bin/shortcuts
new file mode 100755
index 0000000..545799f
--- /dev/null
+++ b/.local/bin/shortcuts
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+config="${XDG_CONFIG_HOME:-$HOME/.config}"
+bmdirs="$config/shell/bm-dirs"
+bmfiles="$config/shell/bm-files"
+
+shell_shortcuts="$config/shell/shortcutrc"
+zsh_named_dirs="$config/zsh/zshnameddirrc"
+lf_shortcuts="$config/lf/shortcutrc"
+vim_shortcuts="$config/nvim/shortcuts.vim"
+
+rm -f "$zsh_named_dirs" "$lf_shortcuts" "$vim_shortcuts"
+printf "# vim: filetype=sh\n" > "$shell_shortcuts"
+
+eval "echo \"$(cat "$bmdirs")\"" |
+awk -F'\t' "
+ !/^\s*#/ && !/^\s*$/ {
+ gsub(\"\\\s*#.*$\", \"\");
+ printf(\"alias %s='cd %s && ls -A'\n\", \$1, \$2) >> \"$shell_shortcuts\"
+ printf(\"hash -d %s=%s\n\", \$1, \$2) >> \"$zsh_named_dirs\"
+ printf(\"map c%s :cd %s\n\", \$1, \$2) >> \"$lf_shortcuts\"
+ printf(\"cmap ;%s %s\n\", \$1, \$2) >> \"$vim_shortcuts\"
+ }
+ "
+
+eval "echo \"$(cat "$bmfiles")\"" |
+awk -F'\t' "
+ !/^\s*#/ && !/^\s*$/ {
+ gsub(\"\\\s*#.*$\", \"\");
+ printf(\"alias %s='\$EDITOR %s'\n\", \$1, \$2) >> \"$shell_shortcuts\"
+ printf(\"hash -d %s=%s\n\", \$1, \$2) >> \"$zsh_named_dirs\"
+ printf(\"map E%s $\$EDITOR %s\n\", \$1, \$2) >> \"$lf_shortcuts\"
+ printf(\"cmap ;%s %s\n\", \$1, \$2) >> \"$vim_shortcuts\"
+ }
+ "
diff --git a/.local/bin/shorts/adbs b/.local/bin/shorts/adbs
new file mode 100755
index 0000000..bca7733
--- /dev/null
+++ b/.local/bin/shorts/adbs
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+adb -s "${ADB_DEVICE}" shell "$@"
diff --git a/.local/bin/shorts/append-to-history b/.local/bin/shorts/append-to-history
new file mode 100755
index 0000000..7d23dc8
--- /dev/null
+++ b/.local/bin/shorts/append-to-history
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+[ -n "$1" ] || exit
+sed -i "\|^${1}$|d" "${2}"
+echo "$1" >> "$2"
diff --git a/.local/bin/shorts/bs b/.local/bin/shorts/bs
new file mode 100755
index 0000000..7e7ec0a
--- /dev/null
+++ b/.local/bin/shorts/bs
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# build site
+
+cd "${SITE_BASE_DIR:-$HOME/Dev/sites/vikas.rocks}" || exit
+rm -rf public/*
+hugo
diff --git a/.local/bin/shorts/conv b/.local/bin/shorts/conv
new file mode 100755
index 0000000..92379e8
--- /dev/null
+++ b/.local/bin/shorts/conv
@@ -0,0 +1,10 @@
+#!/bin/sed -nf
+
+p
+s/\([0-9]\+\)[0-9]\{3\}\([^A-Za-z0-9]\|$\)/\1K\2/gp
+s/\([0-9]\+\)[0-9]\{3\}K\([^A-Za-z0-9]\|$\)/\1M\2/gp
+s/\([0-9]\+\)[0-9]\{3\}M\([^A-Za-z0-9]\|$\)/\1G\2/gp
+s/\([0-9]\+\)[0-9]\{3\}G\([^A-Za-z0-9]\|$\)/\1T\2/gp
+s/\([0-9]\+\)[0-9]\{3\}T\([^A-Za-z0-9]\|$\)/\1P\2/gp
+s/\([0-9]\+\)[0-9]\{3\}P\([^A-Za-z0-9]\|$\)/\1Z\2/gp
+s/\([0-9]\+\)[0-9]\{3\}Z\([^A-Za-z0-9]\|$\)/\1Y\2/gp
diff --git a/.local/bin/shorts/diffdirs b/.local/bin/shorts/diffdirs
new file mode 100755
index 0000000..9585f9f
--- /dev/null
+++ b/.local/bin/shorts/diffdirs
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+tree --dirsfirst -aL 3 "$1" > "$PREFIX/tmp/dir1.tree.txt"
+tree --dirsfirst -aL 3 "$2" > "$PREFIX/tmp/dir2.tree.txt"
+nvim -d "$PREFIX/tmp/dir1.tree.txt" "$PREFIX/tmp/dir2.tree.txt"
+
diff --git a/.local/bin/shorts/font2svg b/.local/bin/shorts/font2svg
new file mode 100755
index 0000000..539972d
--- /dev/null
+++ b/.local/bin/shorts/font2svg
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+fontforge -c "import fontforge; fontforge.open('$1').generate('${1%.*}.svg')"
diff --git a/.local/bin/shorts/preview-bat b/.local/bin/shorts/preview-bat
new file mode 100755
index 0000000..43d1532
--- /dev/null
+++ b/.local/bin/shorts/preview-bat
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+bat --tabs=2 --style=plain --color=always "$@"
diff --git a/.local/bin/shorts/preview-highlight b/.local/bin/shorts/preview-highlight
new file mode 100755
index 0000000..0972538
--- /dev/null
+++ b/.local/bin/shorts/preview-highlight
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+highlight --force --stdout --replace-tabs=2 --out-format=ansi "$@"
diff --git a/.local/bin/shorts/refcitx b/.local/bin/shorts/refcitx
new file mode 100755
index 0000000..e99fcd3
--- /dev/null
+++ b/.local/bin/shorts/refcitx
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+fcitx
+sleep 0.1
+remap
+
diff --git a/.local/bin/shorts/sc b/.local/bin/shorts/sc
new file mode 100755
index 0000000..8760379
--- /dev/null
+++ b/.local/bin/shorts/sc
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+sc-im "$@"
diff --git a/.local/bin/shorts/scrcpy-k b/.local/bin/shorts/scrcpy-k
new file mode 100755
index 0000000..139732b
--- /dev/null
+++ b/.local/bin/shorts/scrcpy-k
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+remap -x
+adb connect blue:43896
+notify-send scrcpy-k "Starting scrcpy..."
+scrcpy -K --no-playback
+notify-send scrcpy-k "Connection closed..."
+remap
diff --git a/.local/bin/shorts/ssha b/.local/bin/shorts/ssha
new file mode 100755
index 0000000..3cbf87c
--- /dev/null
+++ b/.local/bin/shorts/ssha
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+[ "$TERM" != "${TERM#st-256color}" ] && export TERM=xterm-256color
+sshadd "$(find ~/.ssh -name "${1}_id_*" | head -1)"
+ssh "$@" -t "tmux attach -t $USER || tmux new -s $USER"
diff --git a/.local/bin/shorts/sync-server b/.local/bin/shorts/sync-server
new file mode 100755
index 0000000..641db9c
--- /dev/null
+++ b/.local/bin/shorts/sync-server
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+sshadd "$HOME/.ssh/${1}_id_ed25519"
+sync() { rsync -PRru --delete --exclude "*.git" "$@"; }
+
+sync \
+ "${XDG_CONFIG_HOME:-$HOME/.config}/./vim/vimrc" \
+ "${XDG_CONFIG_HOME:-$HOME/.config}/./tmux/tmux.conf" \
+ "${XDG_CONFIG_HOME:-$HOME/.config}/./shell/aliasrc" \
+ "${XDG_CONFIG_HOME:-$HOME/.config}/./shell/inputrc" \
+ "${XDG_CONFIG_HOME:-$HOME/.config}/./shell/server.profile" \
+ "${1}:.config"
diff --git a/.local/bin/shorts/syncdrive b/.local/bin/shorts/syncdrive
new file mode 100755
index 0000000..3d010cc
--- /dev/null
+++ b/.local/bin/shorts/syncdrive
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+rclone -v sync --delete-excluded --exclude=".git/**" ~/GDrive gdrive:
diff --git a/.local/bin/shorts/synchs b/.local/bin/shorts/synchs
new file mode 100755
index 0000000..244dd48
--- /dev/null
+++ b/.local/bin/shorts/synchs
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+sync-server rpi
+
+# rsync -u ~/.config/lf/lfrc /tmp/lfrc
+# sed -i '/set icons/d' /tmp/lfrc
+# rsync -Pu /tmp/lfrc rpi:.config/lf/
diff --git a/.local/bin/shorts/synctab b/.local/bin/shorts/synctab
new file mode 100755
index 0000000..1e44419
--- /dev/null
+++ b/.local/bin/shorts/synctab
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+sshadd ~/.ssh/tab_id_ed25519
+sync() { rsync -Pru --delete --exclude "*.git" "$@"; }
+
+sync ~/GDrive/ tab:GDrive/
+sync "${XDG_VIDEOS_DIR:-$HOME/Videos}" tab:Videos/
+
+sync -R \
+ "${XDG_DOCUMENTS_DIR:-$HOME/Documents}/./allreader" \
+ "${XDG_DOCUMENTS_DIR:-$HOME/Documents}/./latex" \
+ "${XDG_DOCUMENTS_DIR:-$HOME/Documents}/./Notes/bookmarks.txt" \
+ tab:Documents/
+
+sync \
+ "${XDG_MUSIC_DIR:-$HOME/Music}/Piano" \
+ "${XDG_MUSIC_DIR:-$HOME/Music}/Devotional" \
+ tab:Music/
+
diff --git a/.local/bin/shorts/xdg-terminal-exec b/.local/bin/shorts/xdg-terminal-exec
new file mode 100755
index 0000000..43ed65d
--- /dev/null
+++ b/.local/bin/shorts/xdg-terminal-exec
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+st -e "$@"
diff --git a/.local/bin/shorts/xprint b/.local/bin/shorts/xprint
new file mode 100755
index 0000000..12156f2
--- /dev/null
+++ b/.local/bin/shorts/xprint
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+[ -n "$TERMUX_VERSION" ] && { termux-clipboard-get; exit; }
+
+xclip -out -selection clipboard 2>/dev/null ||
+xclip -out -selection secondry 2>/dev/null ||
+xclip -out -selection primary 2>/dev/null ||
+notify-send "Selection and clipboard is empty"
diff --git a/.local/bin/sshadd b/.local/bin/sshadd
new file mode 100755
index 0000000..6fb3b18
--- /dev/null
+++ b/.local/bin/sshadd
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+[ -z "$SSH_AUTH_SOCK" ] && export SSH_AUTH_SOCK="$HOME/.ssh/ssh_auth_sock"
+msg=$(ssh-add -L 2>&1)
+if [ "$msg" = 'Could not open a connection to authentication agent.' ] ||
+ [ "$msg" = 'Error connecting to agent: No such file or directory' ] ||
+ [ "$msg" = 'Error connecting to agent: Connection refused' ]; then
+ rm -f "${SSH_AUTH_SOCK}"
+ ssh-agent -a "${SSH_AUTH_SOCK}" > /dev/null
+fi
+
+private_key="$1"
+content="$(cat "$1.pub")"
+if [ "$msg" = "The agent has no identities." ] ||
+ [ "${msg#*$content}" = "$msg" ]; then
+ ssh-add "$private_key"
+fi
diff --git a/.local/bin/statusbar/cpu_usage b/.local/bin/statusbar/cpu_usage
new file mode 100755
index 0000000..be729e2
--- /dev/null
+++ b/.local/bin/statusbar/cpu_usage
@@ -0,0 +1,55 @@
+#!/usr/bin/perl
+#
+# Copyright 2014 Pierre Mavro <deimos@deimos.fr>
+# Copyright 2014 Vivien Didelot <vivien@didelot.org>
+# Copyright 2014 Andreas Guldstrand <andreas.guldstrand@gmail.com>
+#
+# Licensed under the terms of the GNU GPL v3, or any later version.
+
+use strict;
+use warnings;
+use utf8;
+use Getopt::Long;
+
+# default values
+my $t_warn = 50;
+my $t_crit = 80;
+my $cpu_usage = -1;
+
+sub help {
+ print "Usage: cpu_usage [-w <warning>] [-c <critical>]\n";
+ print "-w <percent>: warning threshold to become yellow\n";
+ print "-c <percent>: critical threshold to become red\n";
+ exit 0;
+}
+
+GetOptions("help|h" => \&help,
+ "w=i" => \$t_warn,
+ "c=i" => \$t_crit);
+
+# Get CPU usage
+$ENV{LC_ALL}="en_US"; # if mpstat is not run under en_US locale, things may break, so make sure it is
+open (MPSTAT, 'mpstat 1 1 |') or die;
+while (<MPSTAT>) {
+ if (/^.*\s+(\d+\.\d+)\s+$/) {
+ $cpu_usage = 100 - $1; # 100% - %idle
+ last;
+ }
+}
+close(MPSTAT);
+
+$cpu_usage eq -1 and die 'Can\'t find CPU information';
+
+# Print short_text, full_text
+printf "%.1f%%\n", $cpu_usage;
+# printf "%.2f%%\n", $cpu_usage;
+
+# # Print color, if needed
+# if ($cpu_usage >= $t_crit) {
+# print "#FF0000\n";
+# exit 33;
+# } elsif ($cpu_usage >= $t_warn) {
+# print "#FFFC00\n";
+# }
+
+exit 0;
diff --git a/.local/bin/statusbar/i3bandwidth b/.local/bin/statusbar/i3bandwidth
new file mode 100755
index 0000000..8877d28
--- /dev/null
+++ b/.local/bin/statusbar/i3bandwidth
@@ -0,0 +1,105 @@
+#!/usr/bin/bash
+# Copyright (C) 2012 Stefan Breunig <stefan+measure-net-speed@mathphys.fsk.uni-heidelberg.de>
+# Copyright (C) 2014 kaueraal
+# Copyright (C) 2015 Thiago Perrotta <perrotta dot thiago at poli dot ufrj dot br>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+case "$BLOCK_BUTTON" in
+ 2) $TERMINAL -e nvim "$0" ;;
+esac
+
+# Use the provided interface, otherwise the device used for the default route.
+if [[ -n $BLOCK_INSTANCE ]]; then
+ INTERFACE=$BLOCK_INSTANCE
+else
+ INTERFACE=$(ip route | awk '/^default/ { print $5 ; exit }')
+fi
+
+[ -z "$INTERFACE" ] && echo && exit
+
+# Issue #36 compliant.
+if ! [ -e "/sys/class/net/${INTERFACE}/operstate" ] || ! [ "$(cat "/sys/class/net/${INTERFACE}/operstate")" = "up" ]
+then
+ # echo "$INTERFACE down"
+ # echo "$INTERFACE down"
+ # echo "#FF0000"
+ echo " "
+ exit 0
+fi
+
+# path to store the old results in
+path="/dev/shm/$(basename "$0")-${INTERFACE}"
+
+# grabbing data for each adapter.
+read -r rx < "/sys/class/net/${INTERFACE}/statistics/rx_bytes"
+read -r tx < "/sys/class/net/${INTERFACE}/statistics/tx_bytes"
+
+# get time
+time=$(date +%s)
+
+# write current data if file does not exist. Do not exit, this will cause
+# problems if this file is sourced instead of executed as another process.
+if ! [[ -f "${path}" ]]; then
+ echo "${time} ${rx} ${tx}" > "${path}"
+ chmod 0666 "${path}"
+fi
+
+# read previous state and update data storage
+read -r old < "${path}"
+echo "${time} ${rx} ${tx}" > "${path}"
+
+# parse old data and calc time passed
+old=(${old//;/ })
+time_diff=$(( time - old[0] ))
+
+# sanity check: has a positive amount of time passed
+[[ "${time_diff}" -gt 0 ]] || { echo " "; exit; }
+
+# calc bytes transferred, and their rate in byte/s
+rx_diff=$(( rx - old[1] ))
+tx_diff=$(( tx - old[2] ))
+rx_rate=$(( rx_diff / time_diff ))
+tx_rate=$(( tx_diff / time_diff ))
+
+# shift by 10 bytes to get KiB/s. If the value is larger than
+# 1024^2 = 1048576, then display MiB/s instead
+
+# incoming
+rx_kib=$(( rx_rate >> 10 ))
+if [ "$rx_kib" -gt 1 ]; then
+ # echo -n "๐Ÿ“ฅ "
+ echo -n "โ†“ "
+ if [[ "$rx_rate" -gt 1048576 ]]; then
+ printf '%sM' "$(echo "scale=1; $rx_kib / 1024" | bc)"
+ else
+ echo -n "${rx_kib}K"
+ fi
+fi
+
+# outgoing
+tx_kib=$(( tx_rate >> 10 ))
+if [ "$tx_kib" -gt 1 ]; then
+ # echo -n "๐Ÿ“ค "
+ echo -n " โ†‘ "
+ if [[ "$tx_rate" -gt 1048576 ]]; then
+ printf '%sM' "$(echo "scale=1; $tx_kib / 1024" | bc)"
+ else
+ echo -n "${tx_kib}K"
+ fi
+fi
+
+# echo
+# echo
+# echo "$BLOCK_COLOR_LEVEL1"
diff --git a/.local/bin/statusbar/i3battery b/.local/bin/statusbar/i3battery
new file mode 100755
index 0000000..5b2fb15
--- /dev/null
+++ b/.local/bin/statusbar/i3battery
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+case "$BLOCK_BUTTON" in
+ 1) notify-send Temprature "$(sensors --no-adapter coretemp-isa-0000 |
+ tail +2 | sed "s|(.*)||")" ;;
+ 2) $TERMINAL -e "$EDITOR" "$0" ;;
+ 3) $TERMINAL -e battop ;;
+ 4) brightness up ;;
+ 5) brightness down ;;
+esac;
+
+# Loop through all attached batteries and format the info
+for battery in /sys/class/power_supply/BAT?*; do
+ capacity="$(cat "$battery/capacity" 2>&1)"
+ # If non-first battery, print a space separator.
+ # [ -n "${capacity+x}" ] && printf " "
+ # Sets up the status and capacity
+ status="$(cat "$battery/status" 2>&1)"
+ case "$status" in
+ "Full") icon="๓ฐ‚„" ;;
+ "Discharging") case "$capacity" in
+ 9[0-9]) icon="๓ฐ‚‚" ;;
+ 8[0-9]) icon="๓ฐ‚" ;;
+ 7[0-9]) icon="๓ฐ‚€" ;;
+ 6[0-9]) icon="๓ฐฟ" ;;
+ 5[0-9]) icon="๓ฐพ" ;;
+ 4[0-9]) icon="๓ฐฝ" ;;
+ 3[0-9]) icon="๓ฐผ" ;;
+ 2[0-9]) icon="๓ฐป" ;;
+ 1[0-9]|[0-9]) icon="๓ฐบ" ;;
+ 100) icon="๓ฐน" ;;
+ esac ;;
+ "Charging") case "$capacity" in
+ 9[0-9]) icon="๓ฐ‚‹" ;;
+ 8[0-9]) icon="๓ฐขž" ;;
+ 7[0-9]) icon="๓ฐขž" ;;
+ 6[0-9]) icon="๓ฐ‚‰" ;;
+ 5[0-9]) icon="๓ฐข" ;;
+ 4[0-9]) icon="๓ฐ‚ˆ" ;;
+ 3[0-9]) icon="๓ฐ‚‡" ;;
+ 2[0-9]) icon="๓ฐ‚†" ;;
+ 1[0-9]|[0-9]) icon="๓ฐขœ" ;;
+ 100) icon="๓ฐ‚…" ;;
+ esac ;;
+ "Not charging") icon="๓ฑ‰" ;;
+ "Unknown") icon="๓ฐ‚‘" ;;
+ *) exit 1 ;;
+ esac
+ # Will make a warn variable if discharging and low
+ [ "$status" = "Discharging" ] && [ "$capacity" -le 25 ] && warn="โ—"
+ # Prints the info
+ printf "%s%s %d%%" "$warn" "$icon" "$capacity"; unset warn
+done && printf "\\n"
+
+echo
+if [ $capacity -ge 80 ]; then
+ echo "$BLOCK_COLOR_LEVEL1"
+elif [ $capacity -ge 40 ]; then
+ echo "$BLOCK_COLOR_LEVEL2"
+elif [ $capacity -ge 20 ]; then
+ echo "$BLOCK_COLOR_LEVEL3"
+elif [ $capacity -ge 10 ]; then
+ echo "$BLOCK_COLOR_LEVEL4"
+else
+ echo "$BLOCK_COLOR_LEVEL5"
+fi
diff --git a/.local/bin/statusbar/i3cpu b/.local/bin/statusbar/i3cpu
new file mode 100755
index 0000000..c5eeb68
--- /dev/null
+++ b/.local/bin/statusbar/i3cpu
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+case "$BLOCK_BUTTON" in
+ 1) $TERMINAL -e gotop ;;
+ 2) $TERMINAL -e nvim "$(which i3cpu)" ;;
+ 3) echo "top,$TERMINAL -e top
+ htop,$TERMINAL -e htop
+ gotop,$TERMINAL -e gotop
+ nvtop,$TERMINAL -e nvtop" | jgmenu --vsimple --at-pointer ;;
+esac;
+
+cpu_usage="$(cpu_usage)"
+cpu="${cpu_usage%.*}"
+printf "%s" "$cpu_usage"
+# printf " "
+# sb-cpubars
+
+echo
+echo
+# Print color, if needed
+if [ "$cpu" -ge 90 ]; then
+ echo "$BLOCK_COLOR_LEVEL5";
+ exit 33;
+elif [ "$cpu" -ge 70 ]; then
+ echo "$BLOCK_COLOR_LEVEL4"
+elif [ "$cpu" -ge 50 ]; then
+ echo "$BLOCK_COLOR_LEVEL3"
+elif [ "$cpu" -ge 20 ]; then
+ echo "$BLOCK_COLOR_LEVEL2"
+else
+ echo "$BLOCK_COLOR_LEVEL1"
+fi
+
+
diff --git a/.local/bin/statusbar/i3cpubars b/.local/bin/statusbar/i3cpubars
new file mode 100755
index 0000000..c4c18af
--- /dev/null
+++ b/.local/bin/statusbar/i3cpubars
@@ -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 htop ;;
+ 3) notify-send "๐Ÿชจ CPU load module" "Each bar represents
+one CPU core";;
+ 6) "$TERMINAL" -e "$EDITOR" "$0" ;;
+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=$(cat "$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/i3cpuload b/.local/bin/statusbar/i3cpuload
new file mode 100755
index 0000000..6c14ddd
--- /dev/null
+++ b/.local/bin/statusbar/i3cpuload
@@ -0,0 +1,68 @@
+#!/usr/bin/perl
+#
+# Copyright 2014 Pierre Mavro <deimos@deimos.fr>
+# Copyright 2014 Vivien Didelot <vivien@didelot.org>
+# Copyright 2014 Andreas Guldstrand <andreas.guldstrand@gmail.com>
+#
+# Licensed under the terms of the GNU GPL v3, or any later version.
+
+use strict;
+use warnings;
+use utf8;
+use Getopt::Long;
+
+# default values
+my $t_warn = $ENV{T_WARN} // 70; # default 50
+my $t_crit = $ENV{T_CRIT} // 90; # default 80
+my $cpu_usage = -1;
+my $decimals = $ENV{DECIMALS} // 2;
+my $label = $ENV{LABEL} // "";
+
+sub help {
+ print "Usage: cpu_usage [-w <warning>] [-c <critical>] [-d <decimals>]\n";
+ print "-w <percent>: warning threshold to become yellow\n";
+ print "-c <percent>: critical threshold to become red\n";
+ print "-d <decimals>: Use <decimals> decimals for percentage (default is $decimals) \n";
+ exit 0;
+}
+
+GetOptions("help|h" => \&help,
+ "w=i" => \$t_warn,
+ "c=i" => \$t_crit,
+ "d=i" => \$decimals,
+);
+
+# Get CPU usage
+$ENV{LC_ALL}="en_US"; # if mpstat is not run under en_US locale, things may break, so make sure it is
+open (MPSTAT, 'mpstat |') or die;
+while (<MPSTAT>) {
+ if (/^.*\s+(\d+\.\d+)[\s\x00]?$/) {
+ $cpu_usage = 100 - $1; # 100% - %idle
+ last;
+ }
+}
+close(MPSTAT);
+
+$cpu_usage eq -1 and die 'Can\'t find CPU information';
+
+# Print short_text, full_text
+print "${label}";
+printf "%.${decimals}f%%\n", $cpu_usage;
+
+
+# print "\n";
+# # Print color, if needed
+# if ($cpu_usage >= $t_crit) {
+# print "$ENV{BLOCK_COLOR_LEVEL5}\n";
+# exit 33;
+# } elsif ($cpu_usage >= $t_warn) {
+# print "$ENV{BLOCK_COLOR_LEVEL4}\n";
+# } elsif ($cpu_usage >= 50) {
+# print "$ENV{BLOCK_COLOR_LEVEL3}\n";
+# } elsif ($cpu_usage >= 20) {
+# print "$ENV{BLOCK_COLOR_LEVEL2}\n";
+# } else {
+# print "$ENV{BLOCK_COLOR_LEVEL1}\n";
+# }
+
+exit 0;
diff --git a/.local/bin/statusbar/i3memory b/.local/bin/statusbar/i3memory
new file mode 100755
index 0000000..edf9a73
--- /dev/null
+++ b/.local/bin/statusbar/i3memory
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+case "$BLOCK_BUTTON" in
+ 1) $TERMINAL -e gotop ;;
+ 2) $TERMINAL -e nvim "$(which i3cpu)" ;;
+ 3) echo "top,$TERMINAL -e top
+ htop,$TERMINAL -e htop
+ gotop,$TERMINAL -e gotop
+ nvtop,$TERMINAL -e nvtop" | jgmenu --vsimple --at-pointer ;;
+esac;
+
+memory="$(memory_percent)"
+printf "%s" "$(memory_usage)"
+# printf " "
+# sb-cpubars
+
+echo
+echo
+# Print color, if needed
+if [ "$memory" -ge 90 ]; then
+ echo "$BLOCK_COLOR_LEVEL5";
+ exit 33;
+elif [ "$memory" -ge 70 ]; then
+ echo "$BLOCK_COLOR_LEVEL4"
+elif [ "$memory" -ge 50 ]; then
+ echo "$BLOCK_COLOR_LEVEL3"
+elif [ "$memory" -ge 20 ]; then
+ echo "$BLOCK_COLOR_LEVEL2"
+else
+ echo "$BLOCK_COLOR_LEVEL1"
+fi
+
+
diff --git a/.local/bin/statusbar/i3weather b/.local/bin/statusbar/i3weather
new file mode 100755
index 0000000..2d34149
--- /dev/null
+++ b/.local/bin/statusbar/i3weather
@@ -0,0 +1,26 @@
+#!/bin/sh
+# i3block for displaying the current temperature, humidity and precipitation, if wttr.in i unavailable then WEATHER UNAVAILABLE will be displayed
+
+case "$BLOCK_BUTTON" in
+ '') ;;
+ 1)
+ $TERMINAL -e less -r ~/.cache/weather.txt & sleep 0.3
+ i3-msg 'move to workspace "12: Weather"; workspace "12: Weather"' >/dev/null 2>&1
+ ;;
+ 2) $TERMINAL -e nvim "$0" ;;
+ *) notify-send "โ›… Refreshing weather info..." ;;
+esac
+
+HTTP_WEATHER="https://wttr.in/Vasai"
+# weather="$(curl -s "$HTTP_WEATHER?format=%c%C++โ„๏ธ+%t++โ˜€๏ธ+%f++๐ŸŒฌ๏ธ+%w")"
+weather="$(curl -Ss "$HTTP_WEATHER?0&T&Q" | cut -c 16- | head -2 |
+ xargs echo "$(curl -s "$HTTP_WEATHER?format=%c")")"
+
+if [ "$(echo "$weather" | grep -Ec "(Unknown|curl|HTML)")" -gt 0 ]; then
+ echo "WEATHER UNAVAILABLE"
+else
+ echo "${weather:-โ›… -- }"
+fi
+
+curl -s "$HTTP_WEATHER" > ~/.cache/weather.txt
+
diff --git a/.local/bin/statusbar/i3wifi b/.local/bin/statusbar/i3wifi
new file mode 100755
index 0000000..689e3a2
--- /dev/null
+++ b/.local/bin/statusbar/i3wifi
@@ -0,0 +1,37 @@
+#!/bin/sh
+# i3block for the displaying the wifi connectivity level
+# If the wifi interface exists but no connection is active, "down" shall be displayed.
+
+case "$BLOCK_BUTTON" in
+ 1) $TERMINAL -e nmtui ;;
+ 2) $TERMINAL -e nvim "$0" ;;
+ 3) $TERMINAL -e nethogs ;;
+ # 3) echo "nethogs,$TERMINAL -e nethogs
+ # bmon,$TERMINAL -e bmon
+ # nmtui, $TERMINAL -e nmtui" | jgmenu --vsimple --at-pointer ;;
+esac
+
+iface="$(find /sys/class/net/ -maxdepth 1 -name "w*" -printf "%f\n")"
+if [ "$(cat "/sys/class/net/$iface/operstate")" = 'down' ]; then
+ icon="๓ฐคญ"; quality="down"; color="$BLOCK_COLOR_LEVEL5"
+else
+ quality=$(grep "$iface" /proc/net/wireless | awk '{ print int($3 * 100 / 70) }')
+ if [ "$quality" = 100 ]; then
+ icon="๓ฐคจ"; color="$BLOCK_COLOR_LEVEL1"
+ elif [ "$quality" -ge 80 ]; then
+ icon="๓ฐคฅ"; color="$BLOCK_COLOR_LEVEL1"
+ elif [ "$quality" -ge 60 ]; then
+ icon="๓ฐคข"; color="$BLOCK_COLOR_LEVEL2"
+ elif [ "$quality" -ge 40 ]; then
+ icon="๓ฐคŸ"; color="$BLOCK_COLOR_LEVEL3"
+ elif [ "$quality" -ge 20 ]; then
+ icon="๓ฐคŸ"; color="$BLOCK_COLOR_LEVEL4"
+ else
+ icon="๓ฐคฏ"; color="$BLOCK_COLOR_LEVEL5"
+ fi
+ [ -n "$quality" ] && quality="$quality%"
+fi
+
+echo "$icon $quality"
+echo
+echo "$color"
diff --git a/.local/bin/statusbar/memory_percent b/.local/bin/statusbar/memory_percent
new file mode 100755
index 0000000..2b8da66
--- /dev/null
+++ b/.local/bin/statusbar/memory_percent
@@ -0,0 +1,57 @@
+#!/bin/sh
+# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+TYPE="${BLOCK_INSTANCE:-mem}"
+
+awk -v type=$TYPE '
+/^MemTotal:/ {
+ mem_total=$2
+}
+/^MemFree:/ {
+ mem_free=$2
+}
+/^Buffers:/ {
+ mem_free+=$2
+}
+/^Cached:/ {
+ mem_free+=$2
+}
+/^SwapTotal:/ {
+ swap_total=$2
+}
+/^SwapFree:/ {
+ swap_free=$2
+}
+END {
+ if (type == "swap") {
+ free=swap_free/1024/1024
+ used=(swap_total-swap_free)/1024/1024
+ total=swap_total/1024/1024
+ } else {
+ free=mem_free/1024/1024
+ used=(mem_total-mem_free)/1024/1024
+ total=mem_total/1024/1024
+ }
+ pct=0
+ if (total > 0) {
+ pct=used/total*100
+ }
+ # full text
+ # printf("%.1fG/%.1fG", used, total)
+ # printf("%.1fG", used)
+ printf("%d", pct)
+}
+' /proc/meminfo
diff --git a/.local/bin/statusbar/memory_usage b/.local/bin/statusbar/memory_usage
new file mode 100755
index 0000000..8f0fee4
--- /dev/null
+++ b/.local/bin/statusbar/memory_usage
@@ -0,0 +1,56 @@
+#!/bin/sh
+# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+TYPE="${BLOCK_INSTANCE:-mem}"
+
+awk -v type=$TYPE '
+/^MemTotal:/ {
+ mem_total=$2
+}
+/^MemFree:/ {
+ mem_free=$2
+}
+/^Buffers:/ {
+ mem_free+=$2
+}
+/^Cached:/ {
+ mem_free+=$2
+}
+/^SwapTotal:/ {
+ swap_total=$2
+}
+/^SwapFree:/ {
+ swap_free=$2
+}
+END {
+ if (type == "swap") {
+ free=swap_free/1024/1024
+ used=(swap_total-swap_free)/1024/1024
+ total=swap_total/1024/1024
+ } else {
+ free=mem_free/1024/1024
+ used=(mem_total-mem_free)/1024/1024
+ total=mem_total/1024/1024
+ }
+ pct=0
+ if (total > 0) {
+ pct=used/total*100
+ }
+ # full text
+ # printf("%.1fG/%.1fG", used, total)
+ printf("%.1fG", used)
+}
+' /proc/meminfo
diff --git a/.local/bin/ttyl b/.local/bin/ttyl
new file mode 100755
index 0000000..fd71280
--- /dev/null
+++ b/.local/bin/ttyl
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+help() {
+ echo "ttyl - tty lock
+
+USAGE:
+ ttyl [OPTION]... [COMMAND]
+
+OPTIONS:
+ -a lock all TTYs
+ (default when no command is passed and terminal is a tty)
+ -c lock current TTY
+ -h show this help message"
+}
+
+err() { printf 'ttyl: %s\n' "$@" >&2; exit 1; }
+
+while getopts 'ach' o; do case "$o" in
+ a) lockall=0 ;;
+ c) lockall=1 ;;
+ h) help >&2; exit ;;
+ *) err "invalid option -- '$OPTARG'" ;;
+esac done
+shift $((OPTIND - 1))
+
+case "$lockall" in
+ 1) lock="vlock" ;;
+ 0) lock="vlock -a" ;;
+ *)
+ case "$(tty)" in
+ /dev/tty[1-7]) lock="vlock -a" ;;
+ *) lock="vlock" ;;
+ esac
+ ;;
+esac
+
+sleep 1 && $@ & $lock
diff --git a/.local/bin/unix b/.local/bin/unix
new file mode 100755
index 0000000..a9fb96e
--- /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
+
+cat << '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/web/fpl b/.local/bin/web/fpl
new file mode 100755
index 0000000..0398770
--- /dev/null
+++ b/.local/bin/web/fpl
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# You can pass any text file containing a list of video titles.
+# An fzf prompt will shown to select a video title.
+# The script will then try to find a video file whose name fuzzy matches the
+# selected title.
+
+[ -z "$1" ] && { echo "fzf-playlist: browse a list of video titles
+USAGE: fpl <PLAYLIST_FILE>" >&2; exit 1; }
+
+if [ "$OPENFLAG" = 1 ]; then
+
+ if [ -z "$OPENWITH" ]; then
+ files="$(find "${PWD%/*}")"
+ else
+ files="$(find "${PWD%/*}" -name '*.webm' -or -name '*.mkv' -or -name '*.mp4' -or \
+ -name '*.mp3' -or -name '*.ogg')"
+ fi
+
+ if [ -z "$OPENWITH" ]; then
+ for title in "$@"; do echo "$files" |
+ fzf --filter "$(printf '%s\n' "$title" | sed 's/[^A-Za-z0-9]*//g')"
+ echo; done
+ else
+ for title in "$@"; do $OPENWITH "$(echo "$files" |
+ fzf --filter "$(printf '%s\n' "$title" | sed 's/[^A-Za-z0-9]*//g')" |
+ head -1)"; echo; done
+ fi
+
+ exit
+fi
+
+file="$(readlink -f "$1")"
+cd "${file%/*}" || exit
+fzf --multi --reverse \
+ --header="Playlist: ${file##*/}" --header-first \
+ --bind 'enter:become(OPENFLAG=1 fpl {+})' \
+ --bind 'ctrl-o:execute(OPENFLAG=1 OPENWITH=mpv fpl {})' < "$file"
+
diff --git a/.local/bin/web/savesite b/.local/bin/web/savesite
new file mode 100755
index 0000000..206a633
--- /dev/null
+++ b/.local/bin/web/savesite
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+[ "$#" -lt 1 ] && { echo "savesite - save local copy of a website
+USAGE: savesite <URL> [DEST_DIR]"; exit 1; }
+
+url="$1"
+site="${2:-"$(echo "$url" | sed 's|\(https\?://\)\?\([A-Za-z0-9.-]*\)/.*|\2|')"}"
+WGETLOGS="${3:-.logs/$site.log}"
+started="$(date)"
+
+touch "$WGETLOGS" || exit
+printf ":: Downloading site: %s\n" "$site"
+printf ":: Logging to: %s\n" "$WGETLOGS"
+
+{
+ setsid wget \
+ --continue \
+ --recursive \
+ --no-clobber \
+ --page-requisites \
+ --html-extension \
+ --convert-links \
+ --restrict-file-names=windows \
+ --domains "$site" \
+ --no-parent \
+ --output-file "$WGETLOGS" \
+ "$url"
+
+ [ -n "$DISPLAY" ] && notify-send "savesite: finished downloading" "$site"
+ printf "%s\n" ":: Finished downloading site: $site" \
+ ":: Started at: $started" \
+ ":: Finished at: $(date)" >> "$WGETLOGS"
+} &
+
+tail -f "$WGETLOGS"
diff --git a/.local/bin/web/w3mman b/.local/bin/web/w3mman
new file mode 100755
index 0000000..5013fbd
--- /dev/null
+++ b/.local/bin/web/w3mman
@@ -0,0 +1,335 @@
+#!/bin/bash
+
+# w3m-man
+#
+# Use wget, w3m and less to download and view man pages.
+#
+# Homepage: https://github.com/sc0ttj/w3m-man
+#
+# Supports using $MANPAGER, $HTMLPAGER, $TERM_BROWSER, and
+# falls back to w3m and less if these are not set.
+#
+# How it works:
+#
+# - saves manpage from online sources to $HOME/.w3m-manpages/
+# - not proper man pages, just plain text output of websites
+# - prettifies them a bit (removes junk headers, links, messages)
+#
+# Usage:
+#
+# man <command> # view man page in plain text in $PAGER
+# man -H <command> # view man page as HTML in $BROWSER
+# man <command> --url # print the URL of the man page to STDOUT
+
+# TODO:
+#
+# - Display the path searched for manpages:
+#
+# man --path
+#
+# - Display the location of a manpage rather than the manpage itself:
+#
+# man -w command
+#
+# - Search for manpages containing a search string:
+#
+# man -k "search_string"
+#
+
+if [ "$1" = "--help" ];then
+
+ echo "# man (w3m-man)
+# Use wget, w3m and less to download and view man pages
+# See https://github.com/sc0ttj/w3m-man
+
+Usage:
+
+ man <command> # (download and) print the man page
+
+ man <command> --url # print the URL from which the man
+ # page was/would be downloaded
+
+ man --help # print this help info
+
+Where <command> is the command name you want to read about.
+
+Examples:
+
+ man diff # view 'diff' command (section 1)
+
+ man mount.8 # view 'mount' in section 8 (config stuff)
+
+ man 8 mount # same as above, but doesn't work with -H
+
+ man -H mount # view 'mount' man page as HTML using $BROWSER
+
+ man <command> --url # only print the URL from which the man page
+ # was/would be downloaded
+
+Man pages are divided into sections, as follows:
+
+ 1. User: most user commands and programs.
+
+ 2. System: calls by the Linux kernel.
+
+ 3. Library: documents provided by the standard C library.
+
+ 4. Devices: documents various devices, most of which reside in /dev.
+
+ 5. Files: describes various file formats and filesystems and proc(5).
+
+ 7. Overviews, conventions, and miscellaneous.
+
+ 8. Superuser and system administration commands.
+
+Checks the following URLs:
+
+the Ubuntu or Debian man pages, also:
+
+http://man.he.net/?topic=\${command}&section=\${section}
+http://manpages.org/\${command}/\${section}
+https://linux.die.net/man/\${section}/\${command}
+https://www.mankier.com/\${section}/\${command}
+https://man7.org/linux/man-pages/man\${section}/\${command}.\${section}.html
+http://manpages.org/\${command}
+http://man.he.net/?topic=\${command}&section=all
+https://ss64.com/bash/\${command}.html
+"
+ exit 0
+fi
+
+old_man="$(command -v man)"
+unset man
+
+command="$1"
+section="1"
+
+DISTRO_COMPAT_VERSION="latest"
+if [ -f /etc/DISTRO_SPECS ];then
+ source /etc/DISTRO_SPECS
+fi
+
+
+# support GNU man -H option (to view as HTML)
+if [ "$1" = "-H" ];then
+ command="$2"
+fi
+
+# support GNU man syntax `man 1 mount`
+re='^[1-8]+$'
+if [[ $1 =~ $re ]] ; then
+ command="${2}.$1"
+ section="$1"
+fi
+
+# support GNU man syntax `man mount.1`, `man mount.2`, etc
+section="${command//*\./}"
+command="${command//\.*/}"
+if [ "$command" = "$section" ];then
+ section=1
+fi
+
+manpage_file="$HOME/.w3m-manpages/$command.$section"
+
+# support env var $MANPAGER
+pager=${MANPAGER:-$PAGER}
+pager=${pager:-less -XR}
+w3m='w3m -o auto_image=false -o display_image=false'
+browser=${TERM_BROWSER:-$TERMBROWSER}
+browser=${browser:-$w3m}
+htmlpager=${HTMLPAGER:-w3m -dump}
+
+# Remove some junk from the plain text files generated by w3m,
+# such as headers, links to adverts, etc
+function prettifier {
+ url="$1"
+ case "$url" in
+
+ *'ubuntu.com'*|*'debian.org'*)
+ sed \
+ -e '1,5d' \
+ -e 's/ bug$//' \
+ -e 's/ / /g'
+ ;;
+
+ *'linux.die.net'*)
+ sed -e '1d' -e 's/\[INS::INS\]//g' -e 's/ \[ \]//g' \
+ -e 's/Site Search//g' 2>/dev/null | head -n -12
+ ;;
+
+ *mankier*)
+ grep -vEi ' โ€ข [A-Z]| โ–ก [A-Z]' | sed -e '1,7d' -e 's/tldr.sh//g' \
+ -e "s/$command /$command($section) /g"
+ ;;
+
+ *ss64*com*)
+ sed '1,5d' 2>/dev/null
+ ;;
+
+ *'man7.org'*)
+ sed -e '1,4d' -e '8,13d' -e 's/ top/ /g' \
+ | grep -vE 'StatCounter' | head -n -15
+ ;;
+
+ *manpages*org*)
+ sed -e '1,3d' \
+ | head -n -14
+ ;;
+
+ *man*he*net*) cat - ;;
+
+ *) cat - ;;
+ esac
+}
+
+# create the config dir, if needed
+[ ! -d $HOME/.w3m-manpages ] && mkdir -p $HOME/.w3m-manpages
+
+# if we already have a proper man page, just print it and exit
+if [ ! -z "$MANPATH" ] && [ "$(which groff)" != "" ] && [ "$1" != "-H" ] && [ "$2" != "--url" ];then
+ usegroff=false
+ groff_file=''
+ zipped=false
+ paths=$(echo "${MANPATH}" | tr ':' '\n')
+ # for each path
+ for dir in ./ $paths
+ do
+ zipped=false
+ # let's find the man page file
+ groff_file=$dir/man${section}/${command}.${section}
+ # it might be gzipped
+ [ ! -f $groff_file ] && groff_file=$dir/man${section}/${command}.${section}.gz && zipped=true
+ # it might be in the current directory
+ [ -f ./${command}.${section} ] && groff_file="./${command}.${section}"
+ [ -f ./${command}.${section}.gz ] && groff_file="./${command}.${section}.gz" && zipped=true
+ # if we found the file
+ if [ -f $groff_file ];then
+ # unpack it, if needed
+ [ $zipped = true ] && zcat $groff_file > /tmp/unzipped && groff_file=/tmp/unzipped
+ # now lets read the man page and exit
+ groff -T utf8 -man $groff_file | $pager && exit 0
+ fi
+ done
+fi
+
+# if we already have the man page as plain text, just print it and exit
+[ "$1" != "-H" ] && [ "$2" != "--url" ] && [ -f "$manpage_file" ] && cat "$manpage_file" | $pager && exit 0
+
+# set a list of urls to check:
+
+# these man pages cover the correct versions of the program you have installed,
+# for the OS you're actually using (if using an Ubuntu or Debian based pup)
+if [ "$DISTRO_BINARY_COMPAT" = "ubuntu" ];then
+ URLS="https://manpages.ubuntu.com/manpages/${DISTRO_COMPAT_VERSION}/man${section}/${command}.${section}.html"
+elif [ "$DISTRO_BINARY_COMPAT" = "debian" ];then
+ URLS="https://manpages.debian.org/${DISTRO_COMPAT_VERSION}/${command}/${command}.${section}.en.html"
+fi
+
+# add the rest
+URLS="$URLS
+http://man.he.net/?topic=${command}&section=${section}
+http://manpages.org/${command}/${section}
+https://linux.die.net/man/${section}/${command}
+https://www.mankier.com/${section}/${command}
+https://man7.org/linux/man-pages/man${section}/${command}.${section}.html
+http://manpages.org/${command}
+http://man.he.net/?topic=${command}&section=all
+https://ss64.com/bash/${command}.html
+"
+# for each url in the list
+for url in ${URLS}
+do
+ # skip any empty urls
+ [ "$url" != "" ] || continue
+ [ "$url" != " " ] || continue
+
+ # crawl the url
+ wget --timeout=2 --spider -S -o /tmp/"$command".html "$url"
+
+ # get the status code
+ grep -m1 'HTTP/[1-3].[0-9] [0-9][0-9][0-9]' /tmp/"$command".html | grep -E '200 OK' > /tmp/response
+
+ # if HTTP status not 200, skip this url
+ grep -q -m1 "200" /tmp/response || continue
+
+ # print the URL if --url given
+ [ "$2" = "--url" ] && echo "$url" && exit 0
+
+ # grab the URL contents as plain text, put it into a file
+ timeout 2 $htmlpager "$url" | prettifier "$url" > "$manpage_file"
+
+ # if file is empty, remove it, skip this url
+ [ ! -s "$manpage_file" ] && rm "$manpage_file" && continue
+
+ # check if we if we got a "not found" page
+ notfound=false
+ grep -qiE "^Couldn|Hmmm|Invalid characters|No matches for \"|t found manual page under category" "$manpage_file" && notfound=true
+
+ # if we DID get a "not found" page, delete the man page, skip this url
+ [ "$notfound" = true ] && rm "$manpage_file" && continue
+
+ # if man page not a file, skip this url
+ [ ! -f "$manpage_file" ] && continue
+
+ # if -H was given, print it out as HTML (like GNU man)
+ if [ "$1" = "-H" ] ;then
+ $browser "$url"
+ fi
+
+ #
+ # add a footer to the man page
+ #
+ echo >> "$manpage_file"
+ echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”" >> "$manpage_file"
+ echo >> "$manpage_file"
+ echo "Generated by https://github.com/sc0ttj/w3m-manpage" >> "$manpage_file"
+ echo >> "$manpage_file"
+ echo "Source URL $url" >> "$manpage_file"
+ echo >> "$manpage_file"
+
+ # man page created, dont need to do another url
+ break
+done
+
+# if we still did not _create_ a file, see if we have local
+# matching ones, in a different section
+if [ ! -f "$manpage_file" ];then
+ local_pages=$(ls $HOME/.w3m-manpages | grep "${command}.")
+ if [ "$local_pages" != "" ];then
+ if [ $(echo "$local_pages" | wc -l) = 1 ];then
+ echo
+ echo "Loading $local_pages" | tr -d '\n'
+ echo
+ sleep 2
+ manpage_file="$HOME/.w3m-manpages/$local_pages"
+ elif [ $(echo "$local_pages" | wc -l) -ge 2 ];then
+ echo
+ echo "Did you mean any of these?"
+ echo
+ echo "$local_pages"
+ exit 1
+ fi
+ fi
+fi
+
+# if we have a man page, and didnt already print the html, print it here
+[ "$1" != "-H" ] && [ -f "$manpage_file" ] \
+ && cat "$manpage_file" | $pager && exit 0
+
+# if _still_ nothing, try download it online from the next section
+if [ ! -f "$manpage_file" ];then
+ if [ -f /tmp/man_loopcount ] && [ $(wc -l /tmp/man_loopcount | cut -f1 -d' ') -ge 8 ];then
+ rm /tmp/man_loopcount
+ exit 1
+ fi
+ next_section=$(($section + 1))
+ [ $next_section -eq 9 ] && next_section=1
+ echo -n "."
+ echo "." >> /tmp/man_loopcount
+ exec $0 $next_section $command
+ retval=$?
+ [ $retval -eq 0 ] && rm /tmp/manprogress
+ echo
+fi
+
+man="$old_man"
diff --git a/.local/bin/web/ytf b/.local/bin/web/ytf
new file mode 100755
index 0000000..57b4af2
--- /dev/null
+++ b/.local/bin/web/ytf
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+case "$1" in
+ '') echo "ytf - download media using youtube config file\nUSAGE: ytf <FILE> [OPTION]..." >&2; exit 1 ;;
+ *.ytd) yt-dlp --config "$@" --config ~/.config/yt-dlp/videos.conf ;;
+ *.ytp) yt-dlp --config "$@" --config ~/.config/yt-dlp/playlist.conf ;;
+ *.ytps) yt-dlp --config "$@" --config ~/.config/yt-dlp/sequenced-playlist.conf ;;
+ *.ytc) yt-dlp --config "$@" --config ~/.config/yt-dlp/channel.conf ;;
+ *) echo "ytf: $1: config file not understood"; exit 1 ;;
+esac
diff --git a/.local/bin/web/ytplaylist b/.local/bin/web/ytplaylist
new file mode 100755
index 0000000..7bc9026
--- /dev/null
+++ b/.local/bin/web/ytplaylist
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# Useful when creating a directory of videos sequenced as per a youtube
+# playlist.
+# Run this script from from the root of a directory that contains all the media
+# and metadata files.
+# The playlist file is expected to be in 'playlist' directory within the root
+# with .pl.txt extension. (playlist/PLAYLIST_NAME.pl.txt)
+# The new playlist directory will be created in the current directory i.e. the
+# root if no other destination is passed as the second argument.
+
+case "$1" in
+ '') echo "ytplaylist - build a directory of sequenced videos using a playlist file\n
+USAGE:\n\tytplaylist <PLAYLIST_FILE> [DESTINATION_DIR] " >&2; exit ;;
+ playlist/*.pl.txt) ;;
+ *)
+ printf "%s" "Unconventional file path, contniue? [y/N] "
+ read -r ans
+ case "$ans" in y) ;; *) exit 1 ;; esac
+ ;;
+esac
+
+playlist="$(readlink -f $1)"
+i=1
+fpl "$playlist" | while read -r file; do
+ if [ -z "$file" ]; then
+ i=$(( $i + 1 ))
+ continue
+ fi
+ dir="$(dirname "$file")"
+ base="$(basename "$file")"
+ rsync -Pru --mkpath "$file" \
+ "${2:-$(basename "${playlist%.pl.txt}")}/${dir#$(readlink -f "$PWD")}/$(printf "%02d" "$i") $base"
+done
diff --git a/.local/bin/web/ytv b/.local/bin/web/ytv
new file mode 100755
index 0000000..c6e9eec
--- /dev/null
+++ b/.local/bin/web/ytv
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+yt-dlp "$@" --config ~/.config/yt-dlp/videos.conf
diff --git a/.local/share/applications/browser.desktop b/.local/share/applications/browser.desktop
new file mode 100644
index 0000000..3435c13
--- /dev/null
+++ b/.local/share/applications/browser.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Type=Application
+Name=Browser
+GenericName=Web Browser
+Icon=browser
+Exec=librewolf-open %u
+Actions=new-window;new-private-window;
+Categories=Network;WebBrowser;
+Keywords=Internet;WWW;Browser;Web;Explorer;
+StartupNotify=true
diff --git a/.local/share/applications/file.desktop b/.local/share/applications/file.desktop
new file mode 100644
index 0000000..369bdc0
--- /dev/null
+++ b/.local/share/applications/file.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Type=Application
+Name=File Manager
+Exec=/usr/local/bin/st -e lf %u
diff --git a/.local/share/applications/img.desktop b/.local/share/applications/img.desktop
new file mode 100644
index 0000000..5783107
--- /dev/null
+++ b/.local/share/applications/img.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Type=Application
+Name=Image viewer
+Exec=/usr/bin/nsxiv -a %f
diff --git a/.local/share/applications/mail.desktop b/.local/share/applications/mail.desktop
new file mode 100644
index 0000000..d24aea2
--- /dev/null
+++ b/.local/share/applications/mail.desktop
@@ -0,0 +1,4 @@
+[Desktop Entry]
+Type=Application
+Name=Mail
+Exec=/usr/local/bin/st -e neomutt %u
diff --git a/.local/share/applications/mimeapps.list b/.local/share/applications/mimeapps.list
new file mode 100644
index 0000000..5e5e662
--- /dev/null
+++ b/.local/share/applications/mimeapps.list
@@ -0,0 +1,25 @@
+[Default Applications]
+application/octet-stream=text.desktop
+application/pdf=pdf.desktop
+application/pdf=pdf.desktop
+application/x-gettext-translation=text.desktop
+application/xml=text.desktop
+application/x-wine-extension-ini=text.desktop
+image/gif=img.desktop
+image/gif=img.desktop
+image/jpeg=img.desktop
+image/png=img.desktop
+text/plain=text.desktop
+video/mp4=video.desktop
+video/ogg=video.desktop
+video/x-flv=video.desktop
+video/x-ms-wmv=video.desktop
+video/x-ogm+ogg=video.desktop
+video/x-theora+ogg=video.desktop
+inode/directory=file.desktop
+x-scheme-handler/http=browser.desktop
+x-scheme-handler/https=browser.desktop
+x-scheme-handler/etcher=balena-etcher-electron.desktop
+text/html=browser.desktop
+x-scheme-handler/about=browser.desktop
+x-scheme-handler/unknown=browser.desktop
diff --git a/.local/share/applications/mimeinfo.cache b/.local/share/applications/mimeinfo.cache
new file mode 100644
index 0000000..98f66ff
--- /dev/null
+++ b/.local/share/applications/mimeinfo.cache
@@ -0,0 +1,153 @@
+[MIME Cache]
+application/mxf=mpv.desktop;
+application/ogg=mpv.desktop;
+application/rdf+xml=offline-browser.desktop;torbrowser-open.desktop;
+application/rss+xml=offline-browser.desktop;torbrowser-open.desktop;
+application/sdp=mpv.desktop;
+application/smil=mpv.desktop;
+application/streamingmedia=mpv.desktop;
+application/vnd.apple.mpegurl=mpv.desktop;
+application/vnd.ms-asf=mpv.desktop;
+application/vnd.rn-realmedia=mpv.desktop;
+application/vnd.rn-realmedia-vbr=mpv.desktop;
+application/x-cue=mpv.desktop;
+application/x-extension-m4a=mpv.desktop;
+application/x-extension-mp4=mpv.desktop;
+application/x-matroska=mpv.desktop;
+application/x-mpegurl=mpv.desktop;
+application/x-ogg=mpv.desktop;
+application/x-ogm=mpv.desktop;
+application/x-ogm-audio=mpv.desktop;
+application/x-ogm-video=mpv.desktop;
+application/x-shellscript=nvim.desktop;
+application/x-shorten=mpv.desktop;
+application/x-smil=mpv.desktop;
+application/x-streamingmedia=mpv.desktop;
+application/x-xpinstall=offline-browser.desktop;torbrowser-open.desktop;
+application/xhtml+xml=offline-browser.desktop;torbrowser-open.desktop;
+application/xml=offline-browser.desktop;torbrowser-open.desktop;
+audio/3gpp=mpv.desktop;
+audio/3gpp2=mpv.desktop;
+audio/AMR=mpv.desktop;
+audio/aac=mpv.desktop;
+audio/ac3=mpv.desktop;
+audio/aiff=mpv.desktop;
+audio/amr-wb=mpv.desktop;
+audio/dv=mpv.desktop;
+audio/eac3=mpv.desktop;
+audio/flac=mpv.desktop;
+audio/m3u=mpv.desktop;
+audio/m4a=mpv.desktop;
+audio/mp1=mpv.desktop;
+audio/mp2=mpv.desktop;
+audio/mp3=mpv.desktop;
+audio/mp4=mpv.desktop;
+audio/mpeg=mpv.desktop;
+audio/mpeg2=mpv.desktop;
+audio/mpeg3=mpv.desktop;
+audio/mpegurl=mpv.desktop;
+audio/mpg=mpv.desktop;
+audio/musepack=mpv.desktop;
+audio/ogg=mpv.desktop;
+audio/opus=mpv.desktop;
+audio/rn-mpeg=mpv.desktop;
+audio/scpls=mpv.desktop;
+audio/vnd.dolby.heaac.1=mpv.desktop;
+audio/vnd.dolby.heaac.2=mpv.desktop;
+audio/vnd.dts=mpv.desktop;
+audio/vnd.dts.hd=mpv.desktop;
+audio/vnd.rn-realaudio=mpv.desktop;
+audio/vorbis=mpv.desktop;
+audio/wav=mpv.desktop;
+audio/webm=mpv.desktop;
+audio/x-aac=mpv.desktop;
+audio/x-adpcm=mpv.desktop;
+audio/x-aiff=mpv.desktop;
+audio/x-ape=mpv.desktop;
+audio/x-m4a=mpv.desktop;
+audio/x-matroska=mpv.desktop;
+audio/x-mp1=mpv.desktop;
+audio/x-mp2=mpv.desktop;
+audio/x-mp3=mpv.desktop;
+audio/x-mpegurl=mpv.desktop;
+audio/x-mpg=mpv.desktop;
+audio/x-ms-asf=mpv.desktop;
+audio/x-ms-wma=mpv.desktop;
+audio/x-musepack=mpv.desktop;
+audio/x-pls=mpv.desktop;
+audio/x-pn-au=mpv.desktop;
+audio/x-pn-realaudio=mpv.desktop;
+audio/x-pn-wav=mpv.desktop;
+audio/x-pn-windows-pcm=mpv.desktop;
+audio/x-realaudio=mpv.desktop;
+audio/x-scpls=mpv.desktop;
+audio/x-shorten=mpv.desktop;
+audio/x-tta=mpv.desktop;
+audio/x-vorbis=mpv.desktop;
+audio/x-vorbis+ogg=mpv.desktop;
+audio/x-wav=mpv.desktop;
+audio/x-wavpack=mpv.desktop;
+image/gif=offline-browser.desktop;torbrowser-open.desktop;
+image/jpeg=offline-browser.desktop;torbrowser-open.desktop;
+image/png=offline-browser.desktop;torbrowser-open.desktop;
+text/english=nvim.desktop;
+text/html=offline-browser.desktop;torbrowser-open.desktop;
+text/plain=nvim.desktop;
+text/x-c=nvim.desktop;
+text/x-c++=nvim.desktop;
+text/x-c++hdr=nvim.desktop;
+text/x-c++src=nvim.desktop;
+text/x-chdr=nvim.desktop;
+text/x-csrc=nvim.desktop;
+text/x-digital=digital-simulator.desktop;
+text/x-java=nvim.desktop;
+text/x-makefile=nvim.desktop;
+text/x-moc=nvim.desktop;
+text/x-pascal=nvim.desktop;
+text/x-tcl=nvim.desktop;
+text/x-tex=nvim.desktop;
+text/xml=offline-browser.desktop;torbrowser-open.desktop;
+video/3gp=mpv.desktop;
+video/3gpp=mpv.desktop;
+video/3gpp2=mpv.desktop;
+video/avi=mpv.desktop;
+video/divx=mpv.desktop;
+video/dv=mpv.desktop;
+video/fli=mpv.desktop;
+video/flv=mpv.desktop;
+video/mkv=mpv.desktop;
+video/mp2t=mpv.desktop;
+video/mp4=mpv.desktop;
+video/mp4v-es=mpv.desktop;
+video/mpeg=mpv.desktop;
+video/msvideo=mpv.desktop;
+video/ogg=mpv.desktop;
+video/quicktime=mpv.desktop;
+video/vnd.divx=mpv.desktop;
+video/vnd.mpegurl=mpv.desktop;
+video/vnd.rn-realvideo=mpv.desktop;
+video/webm=mpv.desktop;offline-browser.desktop;torbrowser-open.desktop;
+video/x-avi=mpv.desktop;
+video/x-flc=mpv.desktop;
+video/x-flic=mpv.desktop;
+video/x-flv=mpv.desktop;
+video/x-m4v=mpv.desktop;
+video/x-matroska=mpv.desktop;
+video/x-mpeg2=mpv.desktop;
+video/x-mpeg3=mpv.desktop;
+video/x-ms-afs=mpv.desktop;
+video/x-ms-asf=mpv.desktop;
+video/x-ms-wmv=mpv.desktop;
+video/x-ms-wmx=mpv.desktop;
+video/x-ms-wvxvideo=mpv.desktop;
+video/x-msvideo=mpv.desktop;
+video/x-ogm=mpv.desktop;
+video/x-ogm+ogg=mpv.desktop;
+video/x-theora=mpv.desktop;
+video/x-theora+ogg=mpv.desktop;
+x-scheme-handler/chrome=offline-browser.desktop;torbrowser-open.desktop;
+x-scheme-handler/etcher=appimagekit_1e61ab136866c084253c027d33a284e9-balenaEtcher.desktop;
+x-scheme-handler/ftp=offline-browser.desktop;torbrowser-open.desktop;
+x-scheme-handler/http=offline-browser.desktop;torbrowser-open.desktop;
+x-scheme-handler/https=offline-browser.desktop;torbrowser-open.desktop;
+x-scheme-handler/mailto=appimagekit_d9ccbe8820cf9667e998b3a64e89e45c-Tutanota_Desktop.desktop;
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..7180dcf
--- /dev/null
+++ b/.local/share/applications/rss.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Type=Application
+Name=RSS feed addition
+Exec=/usr/bin/env rssadd %U
+Icon=rssnow
diff --git a/.local/share/applications/text.desktop b/.local/share/applications/text.desktop
new file mode 100644
index 0000000..6ce6767
--- /dev/null
+++ b/.local/share/applications/text.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Type=Application
+Name=Text editor
+Exec=/usr/local/bin/st -e nvim %u
+Icon=text-editor
diff --git a/.local/share/applications/torrent.desktop b/.local/share/applications/torrent.desktop
new file mode 100644
index 0000000..313bca0
--- /dev/null
+++ b/.local/share/applications/torrent.desktop
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Type=Application
+Name=Torrent
+Exec=/usr/bin/env transadd %U
+Icon=torrents
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/chars/emoji b/.local/share/chars/emoji
new file mode 100644
index 0000000..40d7fc7
--- /dev/null
+++ b/.local/share/chars/emoji
@@ -0,0 +1,1630 @@
+๐Ÿ˜€ d83dde00; grinning face
+๐Ÿ˜ƒ d83dde03; grinning face with big eyes
+๐Ÿ˜„ d83dde04; grinning face with smiling eyes
+๐Ÿ˜ d83dde01; beaming face with smiling eyes
+๐Ÿ˜† d83dde06; grinning squinting face
+๐Ÿ˜… d83dde05; grinning face with sweat
+๐Ÿคฃ d83edd23; rolling on the floor laughing
+๐Ÿ˜‚ d83dde02; face with tears of joy
+๐Ÿ™‚ d83dde42; slightly smiling face
+๐Ÿ™ƒ d83dde43; upside-down face
+๐Ÿซ  d83edee0; melting face
+๐Ÿ˜‰ d83dde09; winking face
+๐Ÿ˜Š d83dde0a; smiling face with smiling eyes
+๐Ÿ˜‡ d83dde07; smiling face with halo
+๐Ÿฅฐ d83edd70; smiling face with hearts
+๐Ÿ˜ d83dde0d; smiling face with heart-eyes
+๐Ÿคฉ d83edd29; star-struck
+๐Ÿ˜˜ d83dde18; face blowing a kiss
+๐Ÿ˜— d83dde17; kissing face
+โ˜บ๏ธ 263a fe0f; smiling face
+๐Ÿ˜š d83dde1a; kissing face with closed eyes
+๐Ÿ˜™ d83dde19; kissing face with smiling eyes
+๐Ÿฅฒ d83edd72; smiling face with tear
+๐Ÿ˜‹ d83dde0b; face savoring food
+๐Ÿ˜› d83dde1b; face with tongue
+๐Ÿ˜œ d83dde1c; winking face with tongue
+๐Ÿคช d83edd2a; zany face
+๐Ÿ˜ d83dde1d; squinting face with tongue
+๐Ÿค‘ d83edd11; money-mouth face
+๐Ÿค— d83edd17; smiling face with open hands
+๐Ÿคญ d83edd2d; face with hand over mouth
+๐Ÿซข d83edee2; face with open eyes and hand over mouth
+๐Ÿซฃ d83edee3; face with peeking eye
+๐Ÿคซ d83edd2b; shushing face
+๐Ÿค” d83edd14; thinking face
+๐Ÿซก d83edee1; saluting face
+๐Ÿค d83edd10; zipper-mouth face
+๐Ÿคจ d83edd28; face with raised eyebrow
+๐Ÿ˜ d83dde10; neutral face
+๐Ÿ˜‘ d83dde11; expressionless face
+๐Ÿ˜ถ d83dde36; face without mouth
+๐Ÿซฅ d83edee5; dotted line face
+๐Ÿ˜ d83dde0f; smirking face
+๐Ÿ˜’ d83dde12; unamused face
+๐Ÿ™„ d83dde44; face with rolling eyes
+๐Ÿ˜ฌ d83dde2c; grimacing face
+๐Ÿคฅ d83edd25; lying face
+๐Ÿ˜Œ d83dde0c; relieved face
+๐Ÿ˜” d83dde14; pensive face
+๐Ÿ˜ช d83dde2a; sleepy face
+๐Ÿคค d83edd24; drooling face
+๐Ÿ˜ด d83dde34; sleeping face
+๐Ÿ˜ท d83dde37; face with medical mask
+๐Ÿค’ d83edd12; face with thermometer
+๐Ÿค• d83edd15; face with head-bandage
+๐Ÿคข d83edd22; nauseated face
+๐Ÿคฎ d83edd2e; face vomiting
+๐Ÿคง d83edd27; sneezing face
+๐Ÿฅต d83edd75; hot face
+๐Ÿฅถ d83edd76; cold face
+๐Ÿฅด d83edd74; woozy face
+๐Ÿ˜ต d83dde35; face with crossed-out eyes
+๐Ÿคฏ d83edd2f; exploding head
+๐Ÿค  d83edd20; cowboy hat face
+๐Ÿฅณ d83edd73; partying face
+๐Ÿฅธ d83edd78; disguised face
+๐Ÿ˜Ž d83dde0e; smiling face with sunglasses
+๐Ÿค“ d83edd13; nerd face
+๐Ÿง d83eddd0; face with monocle
+๐Ÿ˜• d83dde15; confused face
+๐Ÿซค d83edee4; face with diagonal mouth
+๐Ÿ˜Ÿ d83dde1f; worried face
+๐Ÿ™ d83dde41; slightly frowning face
+โ˜น๏ธ 2639 fe0f; frowning face
+๐Ÿ˜ฎ d83dde2e; face with open mouth
+๐Ÿ˜ฏ d83dde2f; hushed face
+๐Ÿ˜ฒ d83dde32; astonished face
+๐Ÿ˜ณ d83dde33; flushed face
+๐Ÿฅบ d83edd7a; pleading face
+๐Ÿฅน d83edd79; face holding back tears
+๐Ÿ˜ฆ d83dde26; frowning face with open mouth
+๐Ÿ˜ง d83dde27; anguished face
+๐Ÿ˜จ d83dde28; fearful face
+๐Ÿ˜ฐ d83dde30; anxious face with sweat
+๐Ÿ˜ฅ d83dde25; sad but relieved face
+๐Ÿ˜ข d83dde22; crying face
+๐Ÿ˜ญ d83dde2d; loudly crying face
+๐Ÿ˜ฑ d83dde31; face screaming in fear
+๐Ÿ˜– d83dde16; confounded face
+๐Ÿ˜ฃ d83dde23; persevering face
+๐Ÿ˜ž d83dde1e; disappointed face
+๐Ÿ˜“ d83dde13; downcast face with sweat
+๐Ÿ˜ฉ d83dde29; weary face
+๐Ÿ˜ซ d83dde2b; tired face
+๐Ÿฅฑ d83edd71; yawning face
+๐Ÿ˜ค d83dde24; face with steam from nose
+๐Ÿ˜ก d83dde21; pouting face
+๐Ÿ˜  d83dde20; angry face
+๐Ÿคฌ d83edd2c; face with symbols on mouth
+๐Ÿ˜ˆ d83dde08; smiling face with horns
+๐Ÿ‘ฟ d83ddc7f; angry face with horns
+๐Ÿ’€ d83ddc80; skull
+โ˜ ๏ธ 2620 fe0f; skull and crossbones
+๐Ÿ’ฉ d83ddca9; pile of poo
+๐Ÿคก d83edd21; clown face
+๐Ÿ‘น d83ddc79; ogre
+๐Ÿ‘บ d83ddc7a; goblin
+๐Ÿ‘ป d83ddc7b; ghost
+๐Ÿ‘ฝ d83ddc7d; alien
+๐Ÿ‘พ d83ddc7e; alien monster
+๐Ÿค– d83edd16; robot
+๐Ÿ˜บ d83dde3a; grinning cat
+๐Ÿ˜ธ d83dde38; grinning cat with smiling eyes
+๐Ÿ˜น d83dde39; cat with tears of joy
+๐Ÿ˜ป d83dde3b; smiling cat with heart-eyes
+๐Ÿ˜ผ d83dde3c; cat with wry smile
+๐Ÿ˜ฝ d83dde3d; kissing cat
+๐Ÿ™€ d83dde40; weary cat
+๐Ÿ˜ฟ d83dde3f; crying cat
+๐Ÿ˜พ d83dde3e; pouting cat
+๐Ÿ™ˆ d83dde48; see-no-evil monkey
+๐Ÿ™‰ d83dde49; hear-no-evil monkey
+๐Ÿ™Š d83dde4a; speak-no-evil monkey
+๐Ÿ’‹ d83ddc8b; kiss mark
+๐Ÿ’Œ d83ddc8c; love letter
+๐Ÿ’˜ d83ddc98; heart with arrow
+๐Ÿ’ d83ddc9d; heart with ribbon
+๐Ÿ’– d83ddc96; sparkling heart
+๐Ÿ’— d83ddc97; growing heart
+๐Ÿ’“ d83ddc93; beating heart
+๐Ÿ’ž d83ddc9e; revolving hearts
+๐Ÿ’• d83ddc95; two hearts
+๐Ÿ’Ÿ d83ddc9f; heart decoration
+โฃ๏ธ 2763 fe0f; heart exclamation
+๐Ÿ’” d83ddc94; broken heart
+โค๏ธ 2764 fe0f; red heart
+๐Ÿงก d83edde1; orange heart
+๐Ÿ’› d83ddc9b; yellow heart
+๐Ÿ’š d83ddc9a; green heart
+๐Ÿ’™ d83ddc99; blue heart
+๐Ÿ’œ d83ddc9c; purple heart
+๐ŸคŽ d83edd0e; brown heart
+๐Ÿ–ค d83ddda4; black heart
+๐Ÿค d83edd0d; white heart
+๐Ÿ’ฏ d83ddcaf; hundred points
+๐Ÿ’ข d83ddca2; anger symbol
+๐Ÿ’ฅ d83ddca5; collision
+๐Ÿ’ซ d83ddcab; dizzy
+๐Ÿ’ฆ d83ddca6; sweat droplets
+๐Ÿ’จ d83ddca8; dashing away
+๐Ÿ•ณ๏ธ d83ddd73 fe0f; hole
+๐Ÿ’ฃ d83ddca3; bomb
+๐Ÿ’ฌ d83ddcac; speech balloon
+๐Ÿ—จ๏ธ d83ddde8 fe0f; left speech bubble
+๐Ÿ—ฏ๏ธ d83dddef fe0f; right anger bubble
+๐Ÿ’ญ d83ddcad; thought balloon
+๐Ÿ’ค d83ddca4; zzz
+๐Ÿ‘‹ d83ddc4b; waving hand
+๐Ÿคš d83edd1a; raised back of hand
+๐Ÿ–๏ธ d83ddd90 fe0f; hand with fingers splayed
+โœ‹ 270b; raised hand
+๐Ÿ–– d83ddd96; vulcan salute
+๐Ÿซฑ d83edef1; rightwards hand
+๐Ÿซฒ d83edef2; leftwards hand
+๐Ÿซณ d83edef3; palm down hand
+๐Ÿซด d83edef4; palm up hand
+๐Ÿ‘Œ d83ddc4c; OK hand
+๐ŸคŒ d83edd0c; pinched fingers
+๐Ÿค d83edd0f; pinching hand
+โœŒ๏ธ 270c fe0f; victory hand
+๐Ÿคž d83edd1e; crossed fingers
+๐Ÿซฐ d83edef0; hand with index finger and thumb crossed
+๐ŸคŸ d83edd1f; love-you gesture
+๐Ÿค˜ d83edd18; sign of the horns
+๐Ÿค™ d83edd19; call me hand
+๐Ÿ‘ˆ d83ddc48; backhand index pointing left
+๐Ÿ‘‰ d83ddc49; backhand index pointing right
+๐Ÿ‘† d83ddc46; backhand index pointing up
+๐Ÿ–• d83ddd95; middle finger
+๐Ÿ‘‡ d83ddc47; backhand index pointing down
+โ˜๏ธ 261d fe0f; index pointing up
+๐Ÿซต d83edef5; index pointing at the viewer
+๐Ÿ‘ d83ddc4d; thumbs up
+๐Ÿ‘Ž d83ddc4e; thumbs down
+โœŠ 270a; raised fist
+๐Ÿ‘Š d83ddc4a; oncoming fist
+๐Ÿค› d83edd1b; left-facing fist
+๐Ÿคœ d83edd1c; right-facing fist
+๐Ÿ‘ d83ddc4f; clapping hands
+๐Ÿ™Œ d83dde4c; raising hands
+๐Ÿซถ d83edef6; heart hands
+๐Ÿ‘ d83ddc50; open hands
+๐Ÿคฒ d83edd32; palms up together
+๐Ÿค d83edd1d; handshake
+๐Ÿ™ d83dde4f; folded hands
+โœ๏ธ 270d fe0f; writing hand
+๐Ÿ’… d83ddc85; nail polish
+๐Ÿคณ d83edd33; selfie
+๐Ÿ’ช d83ddcaa; flexed biceps
+๐Ÿฆพ d83eddbe; mechanical arm
+๐Ÿฆฟ d83eddbf; mechanical leg
+๐Ÿฆต d83eddb5; leg
+๐Ÿฆถ d83eddb6; foot
+๐Ÿ‘‚ d83ddc42; ear
+๐Ÿฆป d83eddbb; ear with hearing aid
+๐Ÿ‘ƒ d83ddc43; nose
+๐Ÿง  d83edde0; brain
+๐Ÿซ€ d83edec0; anatomical heart
+๐Ÿซ d83edec1; lungs
+๐Ÿฆท d83eddb7; tooth
+๐Ÿฆด d83eddb4; bone
+๐Ÿ‘€ d83ddc40; eyes
+๐Ÿ‘๏ธ d83ddc41 fe0f; eye
+๐Ÿ‘… d83ddc45; tongue
+๐Ÿ‘„ d83ddc44; mouth
+๐Ÿซฆ d83edee6; biting lip
+๐Ÿ‘ถ d83ddc76; baby
+๐Ÿง’ d83eddd2; child
+๐Ÿ‘ฆ d83ddc66; boy
+๐Ÿ‘ง d83ddc67; girl
+๐Ÿง‘ d83eddd1; person
+๐Ÿ‘ฑ d83ddc71; person: blond hair
+๐Ÿ‘จ d83ddc68; man
+๐Ÿง” d83eddd4; person: beard
+๐Ÿ‘ฉ d83ddc69; woman
+๐Ÿง“ d83eddd3; older person
+๐Ÿ‘ด d83ddc74; old man
+๐Ÿ‘ต d83ddc75; old woman
+๐Ÿ™ d83dde4d; person frowning
+๐Ÿ™Ž d83dde4e; person pouting
+๐Ÿ™… d83dde45; person gesturing NO
+๐Ÿ™† d83dde46; person gesturing OK
+๐Ÿ’ d83ddc81; person tipping hand
+๐Ÿ™‹ d83dde4b; person raising hand
+๐Ÿง d83eddcf; deaf person
+๐Ÿ™‡ d83dde47; person bowing
+๐Ÿคฆ d83edd26; person facepalming
+๐Ÿคท d83edd37; person shrugging
+๐Ÿ‘ฎ d83ddc6e; police officer
+๐Ÿ•ต๏ธ d83ddd75 fe0f; detective
+๐Ÿ’‚ d83ddc82; guard
+๐Ÿฅท d83edd77; ninja
+๐Ÿ‘ท d83ddc77; construction worker
+๐Ÿซ… d83edec5; person with crown
+๐Ÿคด d83edd34; prince
+๐Ÿ‘ธ d83ddc78; princess
+๐Ÿ‘ณ d83ddc73; person wearing turban
+๐Ÿ‘ฒ d83ddc72; person with skullcap
+๐Ÿง• d83eddd5; woman with headscarf
+๐Ÿคต d83edd35; person in tuxedo
+๐Ÿ‘ฐ d83ddc70; person with veil
+๐Ÿคฐ d83edd30; pregnant woman
+๐Ÿซƒ d83edec3; pregnant man
+๐Ÿซ„ d83edec4; pregnant person
+๐Ÿคฑ d83edd31; breast-feeding
+๐Ÿ‘ผ d83ddc7c; baby angel
+๐ŸŽ… d83cdf85; Santa Claus
+๐Ÿคถ d83edd36; Mrs. Claus
+๐Ÿฆธ d83eddb8; superhero
+๐Ÿฆน d83eddb9; supervillain
+๐Ÿง™ d83eddd9; mage
+๐Ÿงš d83eddda; fairy
+๐Ÿง› d83edddb; vampire
+๐Ÿงœ d83edddc; merperson
+๐Ÿง d83edddd; elf
+๐Ÿงž d83eddde; genie
+๐ŸงŸ d83edddf; zombie
+๐ŸงŒ d83eddcc; troll
+๐Ÿ’† d83ddc86; person getting massage
+๐Ÿ’‡ d83ddc87; person getting haircut
+๐Ÿšถ d83ddeb6; person walking
+๐Ÿง d83eddcd; person standing
+๐ŸงŽ d83eddce; person kneeling
+๐Ÿƒ d83cdfc3; person running
+๐Ÿ’ƒ d83ddc83; woman dancing
+๐Ÿ•บ d83ddd7a; man dancing
+๐Ÿ•ด๏ธ d83ddd74 fe0f; person in suit levitating
+๐Ÿ‘ฏ d83ddc6f; people with bunny ears
+๐Ÿง– d83eddd6; person in steamy room
+๐Ÿง— d83eddd7; person climbing
+๐Ÿคบ d83edd3a; person fencing
+๐Ÿ‡ d83cdfc7; horse racing
+โ›ท๏ธ 26f7 fe0f; skier
+๐Ÿ‚ d83cdfc2; snowboarder
+๐ŸŒ๏ธ d83cdfcc fe0f; person golfing
+๐Ÿ„ d83cdfc4; person surfing
+๐Ÿšฃ d83ddea3; person rowing boat
+๐ŸŠ d83cdfca; person swimming
+โ›น๏ธ 26f9 fe0f; person bouncing ball
+๐Ÿ‹๏ธ d83cdfcb fe0f; person lifting weights
+๐Ÿšด d83ddeb4; person biking
+๐Ÿšต d83ddeb5; person mountain biking
+๐Ÿคธ d83edd38; person cartwheeling
+๐Ÿคผ d83edd3c; people wrestling
+๐Ÿคฝ d83edd3d; person playing water polo
+๐Ÿคพ d83edd3e; person playing handball
+๐Ÿคน d83edd39; person juggling
+๐Ÿง˜ d83eddd8; person in lotus position
+๐Ÿ›€ d83ddec0; person taking bath
+๐Ÿ›Œ d83ddecc; person in bed
+๐Ÿ‘ญ d83ddc6d; women holding hands
+๐Ÿ‘ซ d83ddc6b; woman and man holding hands
+๐Ÿ‘ฌ d83ddc6c; men holding hands
+๐Ÿ’ d83ddc8f; kiss
+๐Ÿ’‘ d83ddc91; couple with heart
+๐Ÿ‘ช d83ddc6a; family
+๐Ÿ—ฃ๏ธ d83ddde3 fe0f; speaking head
+๐Ÿ‘ค d83ddc64; bust in silhouette
+๐Ÿ‘ฅ d83ddc65; busts in silhouette
+๐Ÿซ‚ d83edec2; people hugging
+๐Ÿ‘ฃ d83ddc63; footprints
+๐Ÿต d83ddc35; monkey face
+๐Ÿ’ d83ddc12; monkey
+๐Ÿฆ d83edd8d; gorilla
+๐Ÿฆง d83edda7; orangutan
+๐Ÿถ d83ddc36; dog face
+๐Ÿ• d83ddc15; dog
+๐Ÿฆฎ d83eddae; guide dog
+๐Ÿฉ d83ddc29; poodle
+๐Ÿบ d83ddc3a; wolf
+๐ŸฆŠ d83edd8a; fox
+๐Ÿฆ d83edd9d; raccoon
+๐Ÿฑ d83ddc31; cat face
+๐Ÿˆ d83ddc08; cat
+๐Ÿฆ d83edd81; lion
+๐Ÿฏ d83ddc2f; tiger face
+๐Ÿ… d83ddc05; tiger
+๐Ÿ† d83ddc06; leopard
+๐Ÿด d83ddc34; horse face
+๐ŸŽ d83ddc0e; horse
+๐Ÿฆ„ d83edd84; unicorn
+๐Ÿฆ“ d83edd93; zebra
+๐ŸฆŒ d83edd8c; deer
+๐Ÿฆฌ d83eddac; bison
+๐Ÿฎ d83ddc2e; cow face
+๐Ÿ‚ d83ddc02; ox
+๐Ÿƒ d83ddc03; water buffalo
+๐Ÿ„ d83ddc04; cow
+๐Ÿท d83ddc37; pig face
+๐Ÿ– d83ddc16; pig
+๐Ÿ— d83ddc17; boar
+๐Ÿฝ d83ddc3d; pig nose
+๐Ÿ d83ddc0f; ram
+๐Ÿ‘ d83ddc11; ewe
+๐Ÿ d83ddc10; goat
+๐Ÿช d83ddc2a; camel
+๐Ÿซ d83ddc2b; two-hump camel
+๐Ÿฆ™ d83edd99; llama
+๐Ÿฆ’ d83edd92; giraffe
+๐Ÿ˜ d83ddc18; elephant
+๐Ÿฆฃ d83edda3; mammoth
+๐Ÿฆ d83edd8f; rhinoceros
+๐Ÿฆ› d83edd9b; hippopotamus
+๐Ÿญ d83ddc2d; mouse face
+๐Ÿ d83ddc01; mouse
+๐Ÿ€ d83ddc00; rat
+๐Ÿน d83ddc39; hamster
+๐Ÿฐ d83ddc30; rabbit face
+๐Ÿ‡ d83ddc07; rabbit
+๐Ÿฟ๏ธ d83ddc3f fe0f; chipmunk
+๐Ÿฆซ d83eddab; beaver
+๐Ÿฆ” d83edd94; hedgehog
+๐Ÿฆ‡ d83edd87; bat
+๐Ÿป d83ddc3b; bear
+๐Ÿจ d83ddc28; koala
+๐Ÿผ d83ddc3c; panda
+๐Ÿฆฅ d83edda5; sloth
+๐Ÿฆฆ d83edda6; otter
+๐Ÿฆจ d83edda8; skunk
+๐Ÿฆ˜ d83edd98; kangaroo
+๐Ÿฆก d83edda1; badger
+๐Ÿพ d83ddc3e; paw prints
+๐Ÿฆƒ d83edd83; turkey
+๐Ÿ” d83ddc14; chicken
+๐Ÿ“ d83ddc13; rooster
+๐Ÿฃ d83ddc23; hatching chick
+๐Ÿค d83ddc24; baby chick
+๐Ÿฅ d83ddc25; front-facing baby chick
+๐Ÿฆ d83ddc26; bird
+๐Ÿง d83ddc27; penguin
+๐Ÿ•Š๏ธ d83ddd4a fe0f; dove
+๐Ÿฆ… d83edd85; eagle
+๐Ÿฆ† d83edd86; duck
+๐Ÿฆข d83edda2; swan
+๐Ÿฆ‰ d83edd89; owl
+๐Ÿฆค d83edda4; dodo
+๐Ÿชถ d83edeb6; feather
+๐Ÿฆฉ d83edda9; flamingo
+๐Ÿฆš d83edd9a; peacock
+๐Ÿฆœ d83edd9c; parrot
+๐Ÿธ d83ddc38; frog
+๐ŸŠ d83ddc0a; crocodile
+๐Ÿข d83ddc22; turtle
+๐ŸฆŽ d83edd8e; lizard
+๐Ÿ d83ddc0d; snake
+๐Ÿฒ d83ddc32; dragon face
+๐Ÿ‰ d83ddc09; dragon
+๐Ÿฆ• d83edd95; sauropod
+๐Ÿฆ– d83edd96; T-Rex
+๐Ÿณ d83ddc33; spouting whale
+๐Ÿ‹ d83ddc0b; whale
+๐Ÿฌ d83ddc2c; dolphin
+๐Ÿฆญ d83eddad; seal
+๐ŸŸ d83ddc1f; fish
+๐Ÿ  d83ddc20; tropical fish
+๐Ÿก d83ddc21; blowfish
+๐Ÿฆˆ d83edd88; shark
+๐Ÿ™ d83ddc19; octopus
+๐Ÿš d83ddc1a; spiral shell
+๐Ÿชธ d83edeb8; coral
+๐ŸŒ d83ddc0c; snail
+๐Ÿฆ‹ d83edd8b; butterfly
+๐Ÿ› d83ddc1b; bug
+๐Ÿœ d83ddc1c; ant
+๐Ÿ d83ddc1d; honeybee
+๐Ÿชฒ d83edeb2; beetle
+๐Ÿž d83ddc1e; lady beetle
+๐Ÿฆ— d83edd97; cricket
+๐Ÿชณ d83edeb3; cockroach
+๐Ÿ•ท๏ธ d83ddd77 fe0f; spider
+๐Ÿ•ธ๏ธ d83ddd78 fe0f; spider web
+๐Ÿฆ‚ d83edd82; scorpion
+๐ŸฆŸ d83edd9f; mosquito
+๐Ÿชฐ d83edeb0; fly
+๐Ÿชฑ d83edeb1; worm
+๐Ÿฆ  d83edda0; microbe
+๐Ÿ’ d83ddc90; bouquet
+๐ŸŒธ d83cdf38; cherry blossom
+๐Ÿ’ฎ d83ddcae; white flower
+๐Ÿชท d83edeb7; lotus
+๐Ÿต๏ธ d83cdff5 fe0f; rosette
+๐ŸŒน d83cdf39; rose
+๐Ÿฅ€ d83edd40; wilted flower
+๐ŸŒบ d83cdf3a; hibiscus
+๐ŸŒป d83cdf3b; sunflower
+๐ŸŒผ d83cdf3c; blossom
+๐ŸŒท d83cdf37; tulip
+๐ŸŒฑ d83cdf31; seedling
+๐Ÿชด d83edeb4; potted plant
+๐ŸŒฒ d83cdf32; evergreen tree
+๐ŸŒณ d83cdf33; deciduous tree
+๐ŸŒด d83cdf34; palm tree
+๐ŸŒต d83cdf35; cactus
+๐ŸŒพ d83cdf3e; sheaf of rice
+๐ŸŒฟ d83cdf3f; herb
+โ˜˜๏ธ 2618 fe0f; shamrock
+๐Ÿ€ d83cdf40; four leaf clover
+๐Ÿ d83cdf41; maple leaf
+๐Ÿ‚ d83cdf42; fallen leaf
+๐Ÿƒ d83cdf43; leaf fluttering in wind
+๐Ÿชน d83edeb9; empty nest
+๐Ÿชบ d83edeba; nest with eggs
+๐Ÿ‡ d83cdf47; grapes
+๐Ÿˆ d83cdf48; melon
+๐Ÿ‰ d83cdf49; watermelon
+๐ŸŠ d83cdf4a; tangerine
+๐Ÿ‹ d83cdf4b; lemon
+๐ŸŒ d83cdf4c; banana
+๐Ÿ d83cdf4d; pineapple
+๐Ÿฅญ d83edd6d; mango
+๐ŸŽ d83cdf4e; red apple
+๐Ÿ d83cdf4f; green apple
+๐Ÿ d83cdf50; pear
+๐Ÿ‘ d83cdf51; peach
+๐Ÿ’ d83cdf52; cherries
+๐Ÿ“ d83cdf53; strawberry
+๐Ÿซ d83eded0; blueberries
+๐Ÿฅ d83edd5d; kiwi fruit
+๐Ÿ… d83cdf45; tomato
+๐Ÿซ’ d83eded2; olive
+๐Ÿฅฅ d83edd65; coconut
+๐Ÿฅ‘ d83edd51; avocado
+๐Ÿ† d83cdf46; eggplant
+๐Ÿฅ” d83edd54; potato
+๐Ÿฅ• d83edd55; carrot
+๐ŸŒฝ d83cdf3d; ear of corn
+๐ŸŒถ๏ธ d83cdf36 fe0f; hot pepper
+๐Ÿซ‘ d83eded1; bell pepper
+๐Ÿฅ’ d83edd52; cucumber
+๐Ÿฅฌ d83edd6c; leafy green
+๐Ÿฅฆ d83edd66; broccoli
+๐Ÿง„ d83eddc4; garlic
+๐Ÿง… d83eddc5; onion
+๐Ÿ„ d83cdf44; mushroom
+๐Ÿฅœ d83edd5c; peanuts
+๐Ÿซ˜ d83eded8; beans
+๐ŸŒฐ d83cdf30; chestnut
+๐Ÿž d83cdf5e; bread
+๐Ÿฅ d83edd50; croissant
+๐Ÿฅ– d83edd56; baguette bread
+๐Ÿซ“ d83eded3; flatbread
+๐Ÿฅจ d83edd68; pretzel
+๐Ÿฅฏ d83edd6f; bagel
+๐Ÿฅž d83edd5e; pancakes
+๐Ÿง‡ d83eddc7; waffle
+๐Ÿง€ d83eddc0; cheese wedge
+๐Ÿ– d83cdf56; meat on bone
+๐Ÿ— d83cdf57; poultry leg
+๐Ÿฅฉ d83edd69; cut of meat
+๐Ÿฅ“ d83edd53; bacon
+๐Ÿ” d83cdf54; hamburger
+๐ŸŸ d83cdf5f; french fries
+๐Ÿ• d83cdf55; pizza
+๐ŸŒญ d83cdf2d; hot dog
+๐Ÿฅช d83edd6a; sandwich
+๐ŸŒฎ d83cdf2e; taco
+๐ŸŒฏ d83cdf2f; burrito
+๐Ÿซ” d83eded4; tamale
+๐Ÿฅ™ d83edd59; stuffed flatbread
+๐Ÿง† d83eddc6; falafel
+๐Ÿฅš d83edd5a; egg
+๐Ÿณ d83cdf73; cooking
+๐Ÿฅ˜ d83edd58; shallow pan of food
+๐Ÿฒ d83cdf72; pot of food
+๐Ÿซ• d83eded5; fondue
+๐Ÿฅฃ d83edd63; bowl with spoon
+๐Ÿฅ— d83edd57; green salad
+๐Ÿฟ d83cdf7f; popcorn
+๐Ÿงˆ d83eddc8; butter
+๐Ÿง‚ d83eddc2; salt
+๐Ÿฅซ d83edd6b; canned food
+๐Ÿฑ d83cdf71; bento box
+๐Ÿ˜ d83cdf58; rice cracker
+๐Ÿ™ d83cdf59; rice ball
+๐Ÿš d83cdf5a; cooked rice
+๐Ÿ› d83cdf5b; curry rice
+๐Ÿœ d83cdf5c; steaming bowl
+๐Ÿ d83cdf5d; spaghetti
+๐Ÿ  d83cdf60; roasted sweet potato
+๐Ÿข d83cdf62; oden
+๐Ÿฃ d83cdf63; sushi
+๐Ÿค d83cdf64; fried shrimp
+๐Ÿฅ d83cdf65; fish cake with swirl
+๐Ÿฅฎ d83edd6e; moon cake
+๐Ÿก d83cdf61; dango
+๐ŸฅŸ d83edd5f; dumpling
+๐Ÿฅ  d83edd60; fortune cookie
+๐Ÿฅก d83edd61; takeout box
+๐Ÿฆ€ d83edd80; crab
+๐Ÿฆž d83edd9e; lobster
+๐Ÿฆ d83edd90; shrimp
+๐Ÿฆ‘ d83edd91; squid
+๐Ÿฆช d83eddaa; oyster
+๐Ÿฆ d83cdf66; soft ice cream
+๐Ÿง d83cdf67; shaved ice
+๐Ÿจ d83cdf68; ice cream
+๐Ÿฉ d83cdf69; doughnut
+๐Ÿช d83cdf6a; cookie
+๐ŸŽ‚ d83cdf82; birthday cake
+๐Ÿฐ d83cdf70; shortcake
+๐Ÿง d83eddc1; cupcake
+๐Ÿฅง d83edd67; pie
+๐Ÿซ d83cdf6b; chocolate bar
+๐Ÿฌ d83cdf6c; candy
+๐Ÿญ d83cdf6d; lollipop
+๐Ÿฎ d83cdf6e; custard
+๐Ÿฏ d83cdf6f; honey pot
+๐Ÿผ d83cdf7c; baby bottle
+๐Ÿฅ› d83edd5b; glass of milk
+โ˜• 2615; hot beverage
+๐Ÿซ– d83eded6; teapot
+๐Ÿต d83cdf75; teacup without handle
+๐Ÿถ d83cdf76; sake
+๐Ÿพ d83cdf7e; bottle with popping cork
+๐Ÿท d83cdf77; wine glass
+๐Ÿธ d83cdf78; cocktail glass
+๐Ÿน d83cdf79; tropical drink
+๐Ÿบ d83cdf7a; beer mug
+๐Ÿป d83cdf7b; clinking beer mugs
+๐Ÿฅ‚ d83edd42; clinking glasses
+๐Ÿฅƒ d83edd43; tumbler glass
+๐Ÿซ— d83eded7; pouring liquid
+๐Ÿฅค d83edd64; cup with straw
+๐Ÿง‹ d83eddcb; bubble tea
+๐Ÿงƒ d83eddc3; beverage box
+๐Ÿง‰ d83eddc9; mate
+๐ŸงŠ d83eddca; ice
+๐Ÿฅข d83edd62; chopsticks
+๐Ÿฝ๏ธ d83cdf7d fe0f; fork and knife with plate
+๐Ÿด d83cdf74; fork and knife
+๐Ÿฅ„ d83edd44; spoon
+๐Ÿ”ช d83ddd2a; kitchen knife
+๐Ÿซ™ d83eded9; jar
+๐Ÿบ d83cdffa; amphora
+๐ŸŒ d83cdf0d; globe showing Europe-Africa
+๐ŸŒŽ d83cdf0e; globe showing Americas
+๐ŸŒ d83cdf0f; globe showing Asia-Australia
+๐ŸŒ d83cdf10; globe with meridians
+๐Ÿ—บ๏ธ d83dddfa fe0f; world map
+๐Ÿ—พ d83dddfe; map of Japan
+๐Ÿงญ d83edded; compass
+๐Ÿ”๏ธ d83cdfd4 fe0f; snow-capped mountain
+โ›ฐ๏ธ 26f0 fe0f; mountain
+๐ŸŒ‹ d83cdf0b; volcano
+๐Ÿ—ป d83dddfb; mount fuji
+๐Ÿ•๏ธ d83cdfd5 fe0f; camping
+๐Ÿ–๏ธ d83cdfd6 fe0f; beach with umbrella
+๐Ÿœ๏ธ d83cdfdc fe0f; desert
+๐Ÿ๏ธ d83cdfdd fe0f; desert island
+๐Ÿž๏ธ d83cdfde fe0f; national park
+๐ŸŸ๏ธ d83cdfdf fe0f; stadium
+๐Ÿ›๏ธ d83cdfdb fe0f; classical building
+๐Ÿ—๏ธ d83cdfd7 fe0f; building construction
+๐Ÿงฑ d83eddf1; brick
+๐Ÿชจ d83edea8; rock
+๐Ÿชต d83edeb5; wood
+๐Ÿ›– d83dded6; hut
+๐Ÿ˜๏ธ d83cdfd8 fe0f; houses
+๐Ÿš๏ธ d83cdfda fe0f; derelict house
+๐Ÿ  d83cdfe0; house
+๐Ÿก d83cdfe1; house with garden
+๐Ÿข d83cdfe2; office building
+๐Ÿฃ d83cdfe3; Japanese post office
+๐Ÿค d83cdfe4; post office
+๐Ÿฅ d83cdfe5; hospital
+๐Ÿฆ d83cdfe6; bank
+๐Ÿจ d83cdfe8; hotel
+๐Ÿฉ d83cdfe9; love hotel
+๐Ÿช d83cdfea; convenience store
+๐Ÿซ d83cdfeb; school
+๐Ÿฌ d83cdfec; department store
+๐Ÿญ d83cdfed; factory
+๐Ÿฏ d83cdfef; Japanese castle
+๐Ÿฐ d83cdff0; castle
+๐Ÿ’’ d83ddc92; wedding
+๐Ÿ—ผ d83dddfc; Tokyo tower
+๐Ÿ—ฝ d83dddfd; Statue of Liberty
+โ›ช 26ea; church
+๐Ÿ•Œ d83ddd4c; mosque
+๐Ÿ›• d83dded5; hindu temple
+๐Ÿ• d83ddd4d; synagogue
+โ›ฉ๏ธ 26e9 fe0f; shinto shrine
+๐Ÿ•‹ d83ddd4b; kaaba
+โ›ฒ 26f2; fountain
+โ›บ 26fa; tent
+๐ŸŒ d83cdf01; foggy
+๐ŸŒƒ d83cdf03; night with stars
+๐Ÿ™๏ธ d83cdfd9 fe0f; cityscape
+๐ŸŒ„ d83cdf04; sunrise over mountains
+๐ŸŒ… d83cdf05; sunrise
+๐ŸŒ† d83cdf06; cityscape at dusk
+๐ŸŒ‡ d83cdf07; sunset
+๐ŸŒ‰ d83cdf09; bridge at night
+โ™จ๏ธ 2668 fe0f; hot springs
+๐ŸŽ  d83cdfa0; carousel horse
+๐Ÿ› d83ddedd; playground slide
+๐ŸŽก d83cdfa1; ferris wheel
+๐ŸŽข d83cdfa2; roller coaster
+๐Ÿ’ˆ d83ddc88; barber pole
+๐ŸŽช d83cdfaa; circus tent
+๐Ÿš‚ d83dde82; locomotive
+๐Ÿšƒ d83dde83; railway car
+๐Ÿš„ d83dde84; high-speed train
+๐Ÿš… d83dde85; bullet train
+๐Ÿš† d83dde86; train
+๐Ÿš‡ d83dde87; metro
+๐Ÿšˆ d83dde88; light rail
+๐Ÿš‰ d83dde89; station
+๐ŸšŠ d83dde8a; tram
+๐Ÿš d83dde9d; monorail
+๐Ÿšž d83dde9e; mountain railway
+๐Ÿš‹ d83dde8b; tram car
+๐ŸšŒ d83dde8c; bus
+๐Ÿš d83dde8d; oncoming bus
+๐ŸšŽ d83dde8e; trolleybus
+๐Ÿš d83dde90; minibus
+๐Ÿš‘ d83dde91; ambulance
+๐Ÿš’ d83dde92; fire engine
+๐Ÿš“ d83dde93; police car
+๐Ÿš” d83dde94; oncoming police car
+๐Ÿš• d83dde95; taxi
+๐Ÿš– d83dde96; oncoming taxi
+๐Ÿš— d83dde97; automobile
+๐Ÿš˜ d83dde98; oncoming automobile
+๐Ÿš™ d83dde99; sport utility vehicle
+๐Ÿ›ป d83ddefb; pickup truck
+๐Ÿšš d83dde9a; delivery truck
+๐Ÿš› d83dde9b; articulated lorry
+๐Ÿšœ d83dde9c; tractor
+๐ŸŽ๏ธ d83cdfce fe0f; racing car
+๐Ÿ๏ธ d83cdfcd fe0f; motorcycle
+๐Ÿ›ต d83ddef5; motor scooter
+๐Ÿฆฝ d83eddbd; manual wheelchair
+๐Ÿฆผ d83eddbc; motorized wheelchair
+๐Ÿ›บ d83ddefa; auto rickshaw
+๐Ÿšฒ d83ddeb2; bicycle
+๐Ÿ›ด d83ddef4; kick scooter
+๐Ÿ›น d83ddef9; skateboard
+๐Ÿ›ผ d83ddefc; roller skate
+๐Ÿš d83dde8f; bus stop
+๐Ÿ›ฃ๏ธ d83ddee3 fe0f; motorway
+๐Ÿ›ค๏ธ d83ddee4 fe0f; railway track
+๐Ÿ›ข๏ธ d83ddee2 fe0f; oil drum
+โ›ฝ 26fd; fuel pump
+๐Ÿ›ž d83ddede; wheel
+๐Ÿšจ d83ddea8; police car light
+๐Ÿšฅ d83ddea5; horizontal traffic light
+๐Ÿšฆ d83ddea6; vertical traffic light
+๐Ÿ›‘ d83dded1; stop sign
+๐Ÿšง d83ddea7; construction
+โš“ 2693; anchor
+๐Ÿ›Ÿ d83ddedf; ring buoy
+โ›ต 26f5; sailboat
+๐Ÿ›ถ d83ddef6; canoe
+๐Ÿšค d83ddea4; speedboat
+๐Ÿ›ณ๏ธ d83ddef3 fe0f; passenger ship
+โ›ด๏ธ 26f4 fe0f; ferry
+๐Ÿ›ฅ๏ธ d83ddee5 fe0f; motor boat
+๐Ÿšข d83ddea2; ship
+โœˆ๏ธ 2708 fe0f; airplane
+๐Ÿ›ฉ๏ธ d83ddee9 fe0f; small airplane
+๐Ÿ›ซ d83ddeeb; airplane departure
+๐Ÿ›ฌ d83ddeec; airplane arrival
+๐Ÿช‚ d83ede82; parachute
+๐Ÿ’บ d83ddcba; seat
+๐Ÿš d83dde81; helicopter
+๐ŸšŸ d83dde9f; suspension railway
+๐Ÿš  d83ddea0; mountain cableway
+๐Ÿšก d83ddea1; aerial tramway
+๐Ÿ›ฐ๏ธ d83ddef0 fe0f; satellite
+๐Ÿš€ d83dde80; rocket
+๐Ÿ›ธ d83ddef8; flying saucer
+๐Ÿ›Ž๏ธ d83ddece fe0f; bellhop bell
+๐Ÿงณ d83eddf3; luggage
+โŒ› 231b; hourglass done
+โณ 23f3; hourglass not done
+โŒš 231a; watch
+โฐ 23f0; alarm clock
+โฑ๏ธ 23f1 fe0f; stopwatch
+โฒ๏ธ 23f2 fe0f; timer clock
+๐Ÿ•ฐ๏ธ d83ddd70 fe0f; mantelpiece clock
+๐Ÿ•› d83ddd5b; twelve oโ€™clock
+๐Ÿ•ง d83ddd67; twelve-thirty
+๐Ÿ• d83ddd50; one oโ€™clock
+๐Ÿ•œ d83ddd5c; one-thirty
+๐Ÿ•‘ d83ddd51; two oโ€™clock
+๐Ÿ• d83ddd5d; two-thirty
+๐Ÿ•’ d83ddd52; three oโ€™clock
+๐Ÿ•ž d83ddd5e; three-thirty
+๐Ÿ•“ d83ddd53; four oโ€™clock
+๐Ÿ•Ÿ d83ddd5f; four-thirty
+๐Ÿ•” d83ddd54; five oโ€™clock
+๐Ÿ•  d83ddd60; five-thirty
+๐Ÿ•• d83ddd55; six oโ€™clock
+๐Ÿ•ก d83ddd61; six-thirty
+๐Ÿ•– d83ddd56; seven oโ€™clock
+๐Ÿ•ข d83ddd62; seven-thirty
+๐Ÿ•— d83ddd57; eight oโ€™clock
+๐Ÿ•ฃ d83ddd63; eight-thirty
+๐Ÿ•˜ d83ddd58; nine oโ€™clock
+๐Ÿ•ค d83ddd64; nine-thirty
+๐Ÿ•™ d83ddd59; ten oโ€™clock
+๐Ÿ•ฅ d83ddd65; ten-thirty
+๐Ÿ•š d83ddd5a; eleven oโ€™clock
+๐Ÿ•ฆ d83ddd66; eleven-thirty
+๐ŸŒ‘ d83cdf11; new moon
+๐ŸŒ’ d83cdf12; waxing crescent moon
+๐ŸŒ“ d83cdf13; first quarter moon
+๐ŸŒ” d83cdf14; waxing gibbous moon
+๐ŸŒ• d83cdf15; full moon
+๐ŸŒ– d83cdf16; waning gibbous moon
+๐ŸŒ— d83cdf17; last quarter moon
+๐ŸŒ˜ d83cdf18; waning crescent moon
+๐ŸŒ™ d83cdf19; crescent moon
+๐ŸŒš d83cdf1a; new moon face
+๐ŸŒ› d83cdf1b; first quarter moon face
+๐ŸŒœ d83cdf1c; last quarter moon face
+๐ŸŒก๏ธ d83cdf21 fe0f; thermometer
+โ˜€๏ธ 2600 fe0f; sun
+๐ŸŒ d83cdf1d; full moon face
+๐ŸŒž d83cdf1e; sun with face
+๐Ÿช d83ede90; ringed planet
+โญ 2b50; star
+๐ŸŒŸ d83cdf1f; glowing star
+๐ŸŒ  d83cdf20; shooting star
+๐ŸŒŒ d83cdf0c; milky way
+โ˜๏ธ 2601 fe0f; cloud
+โ›… 26c5; sun behind cloud
+โ›ˆ๏ธ 26c8 fe0f; cloud with lightning and rain
+๐ŸŒค๏ธ d83cdf24 fe0f; sun behind small cloud
+๐ŸŒฅ๏ธ d83cdf25 fe0f; sun behind large cloud
+๐ŸŒฆ๏ธ d83cdf26 fe0f; sun behind rain cloud
+๐ŸŒง๏ธ d83cdf27 fe0f; cloud with rain
+๐ŸŒจ๏ธ d83cdf28 fe0f; cloud with snow
+๐ŸŒฉ๏ธ d83cdf29 fe0f; cloud with lightning
+๐ŸŒช๏ธ d83cdf2a fe0f; tornado
+๐ŸŒซ๏ธ d83cdf2b fe0f; fog
+๐ŸŒฌ๏ธ d83cdf2c fe0f; wind face
+๐ŸŒ€ d83cdf00; cyclone
+๐ŸŒˆ d83cdf08; rainbow
+๐ŸŒ‚ d83cdf02; closed umbrella
+โ˜‚๏ธ 2602 fe0f; umbrella
+โ˜” 2614; umbrella with rain drops
+โ›ฑ๏ธ 26f1 fe0f; umbrella on ground
+โšก 26a1; high voltage
+โ„๏ธ 2744 fe0f; snowflake
+โ˜ƒ๏ธ 2603 fe0f; snowman
+โ›„ 26c4; snowman without snow
+โ˜„๏ธ 2604 fe0f; comet
+๐Ÿ”ฅ d83ddd25; fire
+๐Ÿ’ง d83ddca7; droplet
+๐ŸŒŠ d83cdf0a; water wave
+๐ŸŽƒ d83cdf83; jack-o-lantern
+๐ŸŽ„ d83cdf84; Christmas tree
+๐ŸŽ† d83cdf86; fireworks
+๐ŸŽ‡ d83cdf87; sparkler
+๐Ÿงจ d83edde8; firecracker
+โœจ 2728; sparkles
+๐ŸŽˆ d83cdf88; balloon
+๐ŸŽ‰ d83cdf89; party popper
+๐ŸŽŠ d83cdf8a; confetti ball
+๐ŸŽ‹ d83cdf8b; tanabata tree
+๐ŸŽ d83cdf8d; pine decoration
+๐ŸŽŽ d83cdf8e; Japanese dolls
+๐ŸŽ d83cdf8f; carp streamer
+๐ŸŽ d83cdf90; wind chime
+๐ŸŽ‘ d83cdf91; moon viewing ceremony
+๐Ÿงง d83edde7; red envelope
+๐ŸŽ€ d83cdf80; ribbon
+๐ŸŽ d83cdf81; wrapped gift
+๐ŸŽ—๏ธ d83cdf97 fe0f; reminder ribbon
+๐ŸŽŸ๏ธ d83cdf9f fe0f; admission tickets
+๐ŸŽซ d83cdfab; ticket
+๐ŸŽ–๏ธ d83cdf96 fe0f; military medal
+๐Ÿ† d83cdfc6; trophy
+๐Ÿ… d83cdfc5; sports medal
+๐Ÿฅ‡ d83edd47; 1st place medal
+๐Ÿฅˆ d83edd48; 2nd place medal
+๐Ÿฅ‰ d83edd49; 3rd place medal
+โšฝ 26bd; soccer ball
+โšพ 26be; baseball
+๐ŸฅŽ d83edd4e; softball
+๐Ÿ€ d83cdfc0; basketball
+๐Ÿ d83cdfd0; volleyball
+๐Ÿˆ d83cdfc8; american football
+๐Ÿ‰ d83cdfc9; rugby football
+๐ŸŽพ d83cdfbe; tennis
+๐Ÿฅ d83edd4f; flying disc
+๐ŸŽณ d83cdfb3; bowling
+๐Ÿ d83cdfcf; cricket game
+๐Ÿ‘ d83cdfd1; field hockey
+๐Ÿ’ d83cdfd2; ice hockey
+๐Ÿฅ d83edd4d; lacrosse
+๐Ÿ“ d83cdfd3; ping pong
+๐Ÿธ d83cdff8; badminton
+๐ŸฅŠ d83edd4a; boxing glove
+๐Ÿฅ‹ d83edd4b; martial arts uniform
+๐Ÿฅ… d83edd45; goal net
+โ›ณ 26f3; flag in hole
+โ›ธ๏ธ 26f8 fe0f; ice skate
+๐ŸŽฃ d83cdfa3; fishing pole
+๐Ÿคฟ d83edd3f; diving mask
+๐ŸŽฝ d83cdfbd; running shirt
+๐ŸŽฟ d83cdfbf; skis
+๐Ÿ›ท d83ddef7; sled
+๐ŸฅŒ d83edd4c; curling stone
+๐ŸŽฏ d83cdfaf; bullseye
+๐Ÿช€ d83ede80; yo-yo
+๐Ÿช d83ede81; kite
+๐ŸŽฑ d83cdfb1; pool 8 ball
+๐Ÿ”ฎ d83ddd2e; crystal ball
+๐Ÿช„ d83ede84; magic wand
+๐Ÿงฟ d83eddff; nazar amulet
+๐Ÿชฌ d83edeac; hamsa
+๐ŸŽฎ d83cdfae; video game
+๐Ÿ•น๏ธ d83ddd79 fe0f; joystick
+๐ŸŽฐ d83cdfb0; slot machine
+๐ŸŽฒ d83cdfb2; game die
+๐Ÿงฉ d83edde9; puzzle piece
+๐Ÿงธ d83eddf8; teddy bear
+๐Ÿช… d83ede85; piรฑata
+๐Ÿชฉ d83edea9; mirror ball
+๐Ÿช† d83ede86; nesting dolls
+โ™ ๏ธ 2660 fe0f; spade suit
+โ™ฅ๏ธ 2665 fe0f; heart suit
+โ™ฆ๏ธ 2666 fe0f; diamond suit
+โ™ฃ๏ธ 2663 fe0f; club suit
+โ™Ÿ๏ธ 265f fe0f; chess pawn
+๐Ÿƒ d83cdccf; joker
+๐Ÿ€„ d83cdc04; mahjong red dragon
+๐ŸŽด d83cdfb4; flower playing cards
+๐ŸŽญ d83cdfad; performing arts
+๐Ÿ–ผ๏ธ d83dddbc fe0f; framed picture
+๐ŸŽจ d83cdfa8; artist palette
+๐Ÿงต d83eddf5; thread
+๐Ÿชก d83edea1; sewing needle
+๐Ÿงถ d83eddf6; yarn
+๐Ÿชข d83edea2; knot
+๐Ÿ‘“ d83ddc53; glasses
+๐Ÿ•ถ๏ธ d83ddd76 fe0f; sunglasses
+๐Ÿฅฝ d83edd7d; goggles
+๐Ÿฅผ d83edd7c; lab coat
+๐Ÿฆบ d83eddba; safety vest
+๐Ÿ‘” d83ddc54; necktie
+๐Ÿ‘• d83ddc55; t-shirt
+๐Ÿ‘– d83ddc56; jeans
+๐Ÿงฃ d83edde3; scarf
+๐Ÿงค d83edde4; gloves
+๐Ÿงฅ d83edde5; coat
+๐Ÿงฆ d83edde6; socks
+๐Ÿ‘— d83ddc57; dress
+๐Ÿ‘˜ d83ddc58; kimono
+๐Ÿฅป d83edd7b; sari
+๐Ÿฉฑ d83ede71; one-piece swimsuit
+๐Ÿฉฒ d83ede72; briefs
+๐Ÿฉณ d83ede73; shorts
+๐Ÿ‘™ d83ddc59; bikini
+๐Ÿ‘š d83ddc5a; womanโ€™s clothes
+๐Ÿ‘› d83ddc5b; purse
+๐Ÿ‘œ d83ddc5c; handbag
+๐Ÿ‘ d83ddc5d; clutch bag
+๐Ÿ›๏ธ d83ddecd fe0f; shopping bags
+๐ŸŽ’ d83cdf92; backpack
+๐Ÿฉด d83ede74; thong sandal
+๐Ÿ‘ž d83ddc5e; manโ€™s shoe
+๐Ÿ‘Ÿ d83ddc5f; running shoe
+๐Ÿฅพ d83edd7e; hiking boot
+๐Ÿฅฟ d83edd7f; flat shoe
+๐Ÿ‘  d83ddc60; high-heeled shoe
+๐Ÿ‘ก d83ddc61; womanโ€™s sandal
+๐Ÿฉฐ d83ede70; ballet shoes
+๐Ÿ‘ข d83ddc62; womanโ€™s boot
+๐Ÿ‘‘ d83ddc51; crown
+๐Ÿ‘’ d83ddc52; womanโ€™s hat
+๐ŸŽฉ d83cdfa9; top hat
+๐ŸŽ“ d83cdf93; graduation cap
+๐Ÿงข d83edde2; billed cap
+๐Ÿช– d83ede96; military helmet
+โ›‘๏ธ 26d1 fe0f; rescue workerโ€™s helmet
+๐Ÿ“ฟ d83ddcff; prayer beads
+๐Ÿ’„ d83ddc84; lipstick
+๐Ÿ’ d83ddc8d; ring
+๐Ÿ’Ž d83ddc8e; gem stone
+๐Ÿ”‡ d83ddd07; muted speaker
+๐Ÿ”ˆ d83ddd08; speaker low volume
+๐Ÿ”‰ d83ddd09; speaker medium volume
+๐Ÿ”Š d83ddd0a; speaker high volume
+๐Ÿ“ข d83ddce2; loudspeaker
+๐Ÿ“ฃ d83ddce3; megaphone
+๐Ÿ“ฏ d83ddcef; postal horn
+๐Ÿ”” d83ddd14; bell
+๐Ÿ”• d83ddd15; bell with slash
+๐ŸŽผ d83cdfbc; musical score
+๐ŸŽต d83cdfb5; musical note
+๐ŸŽถ d83cdfb6; musical notes
+๐ŸŽ™๏ธ d83cdf99 fe0f; studio microphone
+๐ŸŽš๏ธ d83cdf9a fe0f; level slider
+๐ŸŽ›๏ธ d83cdf9b fe0f; control knobs
+๐ŸŽค d83cdfa4; microphone
+๐ŸŽง d83cdfa7; headphone
+๐Ÿ“ป d83ddcfb; radio
+๐ŸŽท d83cdfb7; saxophone
+๐Ÿช— d83ede97; accordion
+๐ŸŽธ d83cdfb8; guitar
+๐ŸŽน d83cdfb9; musical keyboard
+๐ŸŽบ d83cdfba; trumpet
+๐ŸŽป d83cdfbb; violin
+๐Ÿช• d83ede95; banjo
+๐Ÿฅ d83edd41; drum
+๐Ÿช˜ d83ede98; long drum
+๐Ÿ“ฑ d83ddcf1; mobile phone
+๐Ÿ“ฒ d83ddcf2; mobile phone with arrow
+โ˜Ž๏ธ 260e fe0f; telephone
+๐Ÿ“ž d83ddcde; telephone receiver
+๐Ÿ“Ÿ d83ddcdf; pager
+๐Ÿ“  d83ddce0; fax machine
+๐Ÿ”‹ d83ddd0b; battery
+๐Ÿชซ d83edeab; low battery
+๐Ÿ”Œ d83ddd0c; electric plug
+๐Ÿ’ป d83ddcbb; laptop
+๐Ÿ–ฅ๏ธ d83ddda5 fe0f; desktop computer
+๐Ÿ–จ๏ธ d83ddda8 fe0f; printer
+โŒจ๏ธ 2328 fe0f; keyboard
+๐Ÿ–ฑ๏ธ d83dddb1 fe0f; computer mouse
+๐Ÿ–ฒ๏ธ d83dddb2 fe0f; trackball
+๐Ÿ’ฝ d83ddcbd; computer disk
+๐Ÿ’พ d83ddcbe; floppy disk
+๐Ÿ’ฟ d83ddcbf; optical disk
+๐Ÿ“€ d83ddcc0; dvd
+๐Ÿงฎ d83eddee; abacus
+๐ŸŽฅ d83cdfa5; movie camera
+๐ŸŽž๏ธ d83cdf9e fe0f; film frames
+๐Ÿ“ฝ๏ธ d83ddcfd fe0f; film projector
+๐ŸŽฌ d83cdfac; clapper board
+๐Ÿ“บ d83ddcfa; television
+๐Ÿ“ท d83ddcf7; camera
+๐Ÿ“ธ d83ddcf8; camera with flash
+๐Ÿ“น d83ddcf9; video camera
+๐Ÿ“ผ d83ddcfc; videocassette
+๐Ÿ” d83ddd0d; magnifying glass tilted left
+๐Ÿ”Ž d83ddd0e; magnifying glass tilted right
+๐Ÿ•ฏ๏ธ d83ddd6f fe0f; candle
+๐Ÿ’ก d83ddca1; light bulb
+๐Ÿ”ฆ d83ddd26; flashlight
+๐Ÿฎ d83cdfee; red paper lantern
+๐Ÿช” d83ede94; diya lamp
+๐Ÿ“” d83ddcd4; notebook with decorative cover
+๐Ÿ“• d83ddcd5; closed book
+๐Ÿ“– d83ddcd6; open book
+๐Ÿ“— d83ddcd7; green book
+๐Ÿ“˜ d83ddcd8; blue book
+๐Ÿ“™ d83ddcd9; orange book
+๐Ÿ“š d83ddcda; books
+๐Ÿ““ d83ddcd3; notebook
+๐Ÿ“’ d83ddcd2; ledger
+๐Ÿ“ƒ d83ddcc3; page with curl
+๐Ÿ“œ d83ddcdc; scroll
+๐Ÿ“„ d83ddcc4; page facing up
+๐Ÿ“ฐ d83ddcf0; newspaper
+๐Ÿ—ž๏ธ d83dddde fe0f; rolled-up newspaper
+๐Ÿ“‘ d83ddcd1; bookmark tabs
+๐Ÿ”– d83ddd16; bookmark
+๐Ÿท๏ธ d83cdff7 fe0f; label
+๐Ÿ’ฐ d83ddcb0; money bag
+๐Ÿช™ d83ede99; coin
+๐Ÿ’ด d83ddcb4; yen banknote
+๐Ÿ’ต d83ddcb5; dollar banknote
+๐Ÿ’ถ d83ddcb6; euro banknote
+๐Ÿ’ท d83ddcb7; pound banknote
+๐Ÿ’ธ d83ddcb8; money with wings
+๐Ÿ’ณ d83ddcb3; credit card
+๐Ÿงพ d83eddfe; receipt
+๐Ÿ’น d83ddcb9; chart increasing with yen
+โœ‰๏ธ 2709 fe0f; envelope
+๐Ÿ“ง d83ddce7; e-mail
+๐Ÿ“จ d83ddce8; incoming envelope
+๐Ÿ“ฉ d83ddce9; envelope with arrow
+๐Ÿ“ค d83ddce4; outbox tray
+๐Ÿ“ฅ d83ddce5; inbox tray
+๐Ÿ“ฆ d83ddce6; package
+๐Ÿ“ซ d83ddceb; closed mailbox with raised flag
+๐Ÿ“ช d83ddcea; closed mailbox with lowered flag
+๐Ÿ“ฌ d83ddcec; open mailbox with raised flag
+๐Ÿ“ญ d83ddced; open mailbox with lowered flag
+๐Ÿ“ฎ d83ddcee; postbox
+๐Ÿ—ณ๏ธ d83dddf3 fe0f; ballot box with ballot
+โœ๏ธ 270f fe0f; pencil
+โœ’๏ธ 2712 fe0f; black nib
+๐Ÿ–‹๏ธ d83ddd8b fe0f; fountain pen
+๐Ÿ–Š๏ธ d83ddd8a fe0f; pen
+๐Ÿ–Œ๏ธ d83ddd8c fe0f; paintbrush
+๐Ÿ–๏ธ d83ddd8d fe0f; crayon
+๐Ÿ“ d83ddcdd; memo
+๐Ÿ’ผ d83ddcbc; briefcase
+๐Ÿ“ d83ddcc1; file folder
+๐Ÿ“‚ d83ddcc2; open file folder
+๐Ÿ—‚๏ธ d83dddc2 fe0f; card index dividers
+๐Ÿ“… d83ddcc5; calendar
+๐Ÿ“† d83ddcc6; tear-off calendar
+๐Ÿ—’๏ธ d83dddd2 fe0f; spiral notepad
+๐Ÿ—“๏ธ d83dddd3 fe0f; spiral calendar
+๐Ÿ“‡ d83ddcc7; card index
+๐Ÿ“ˆ d83ddcc8; chart increasing
+๐Ÿ“‰ d83ddcc9; chart decreasing
+๐Ÿ“Š d83ddcca; bar chart
+๐Ÿ“‹ d83ddccb; clipboard
+๐Ÿ“Œ d83ddccc; pushpin
+๐Ÿ“ d83ddccd; round pushpin
+๐Ÿ“Ž d83ddcce; paperclip
+๐Ÿ–‡๏ธ d83ddd87 fe0f; linked paperclips
+๐Ÿ“ d83ddccf; straight ruler
+๐Ÿ“ d83ddcd0; triangular ruler
+โœ‚๏ธ 2702 fe0f; scissors
+๐Ÿ—ƒ๏ธ d83dddc3 fe0f; card file box
+๐Ÿ—„๏ธ d83dddc4 fe0f; file cabinet
+๐Ÿ—‘๏ธ d83dddd1 fe0f; wastebasket
+๐Ÿ”’ d83ddd12; locked
+๐Ÿ”“ d83ddd13; unlocked
+๐Ÿ” d83ddd0f; locked with pen
+๐Ÿ” d83ddd10; locked with key
+๐Ÿ”‘ d83ddd11; key
+๐Ÿ—๏ธ d83ddddd fe0f; old key
+๐Ÿ”จ d83ddd28; hammer
+๐Ÿช“ d83ede93; axe
+โ›๏ธ 26cf fe0f; pick
+โš’๏ธ 2692 fe0f; hammer and pick
+๐Ÿ› ๏ธ d83ddee0 fe0f; hammer and wrench
+๐Ÿ—ก๏ธ d83ddde1 fe0f; dagger
+โš”๏ธ 2694 fe0f; crossed swords
+๐Ÿ”ซ d83ddd2b; water pistol
+๐Ÿชƒ d83ede83; boomerang
+๐Ÿน d83cdff9; bow and arrow
+๐Ÿ›ก๏ธ d83ddee1 fe0f; shield
+๐Ÿชš d83ede9a; carpentry saw
+๐Ÿ”ง d83ddd27; wrench
+๐Ÿช› d83ede9b; screwdriver
+๐Ÿ”ฉ d83ddd29; nut and bolt
+โš™๏ธ 2699 fe0f; gear
+๐Ÿ—œ๏ธ d83ddddc fe0f; clamp
+โš–๏ธ 2696 fe0f; balance scale
+๐Ÿฆฏ d83eddaf; white cane
+๐Ÿ”— d83ddd17; link
+โ›“๏ธ 26d3 fe0f; chains
+๐Ÿช d83ede9d; hook
+๐Ÿงฐ d83eddf0; toolbox
+๐Ÿงฒ d83eddf2; magnet
+๐Ÿชœ d83ede9c; ladder
+โš—๏ธ 2697 fe0f; alembic
+๐Ÿงช d83eddea; test tube
+๐Ÿงซ d83eddeb; petri dish
+๐Ÿงฌ d83eddec; dna
+๐Ÿ”ฌ d83ddd2c; microscope
+๐Ÿ”ญ d83ddd2d; telescope
+๐Ÿ“ก d83ddce1; satellite antenna
+๐Ÿ’‰ d83ddc89; syringe
+๐Ÿฉธ d83ede78; drop of blood
+๐Ÿ’Š d83ddc8a; pill
+๐Ÿฉน d83ede79; adhesive bandage
+๐Ÿฉผ d83ede7c; crutch
+๐Ÿฉบ d83ede7a; stethoscope
+๐Ÿฉป d83ede7b; x-ray
+๐Ÿšช d83ddeaa; door
+๐Ÿ›— d83dded7; elevator
+๐Ÿชž d83ede9e; mirror
+๐ŸชŸ d83ede9f; window
+๐Ÿ›๏ธ d83ddecf fe0f; bed
+๐Ÿ›‹๏ธ d83ddecb fe0f; couch and lamp
+๐Ÿช‘ d83ede91; chair
+๐Ÿšฝ d83ddebd; toilet
+๐Ÿช  d83edea0; plunger
+๐Ÿšฟ d83ddebf; shower
+๐Ÿ› d83ddec1; bathtub
+๐Ÿชค d83edea4; mouse trap
+๐Ÿช’ d83ede92; razor
+๐Ÿงด d83eddf4; lotion bottle
+๐Ÿงท d83eddf7; safety pin
+๐Ÿงน d83eddf9; broom
+๐Ÿงบ d83eddfa; basket
+๐Ÿงป d83eddfb; roll of paper
+๐Ÿชฃ d83edea3; bucket
+๐Ÿงผ d83eddfc; soap
+๐Ÿซง d83edee7; bubbles
+๐Ÿชฅ d83edea5; toothbrush
+๐Ÿงฝ d83eddfd; sponge
+๐Ÿงฏ d83eddef; fire extinguisher
+๐Ÿ›’ d83dded2; shopping cart
+๐Ÿšฌ d83ddeac; cigarette
+โšฐ๏ธ 26b0 fe0f; coffin
+๐Ÿชฆ d83edea6; headstone
+โšฑ๏ธ 26b1 fe0f; funeral urn
+๐Ÿ—ฟ d83dddff; moai
+๐Ÿชง d83edea7; placard
+๐Ÿชช d83edeaa; identification card
+๐Ÿง d83cdfe7; ATM sign
+๐Ÿšฎ d83ddeae; litter in bin sign
+๐Ÿšฐ d83ddeb0; potable water
+โ™ฟ 267f; wheelchair symbol
+๐Ÿšน d83ddeb9; menโ€™s room
+๐Ÿšบ d83ddeba; womenโ€™s room
+๐Ÿšป d83ddebb; restroom
+๐Ÿšผ d83ddebc; baby symbol
+๐Ÿšพ d83ddebe; water closet
+๐Ÿ›‚ d83ddec2; passport control
+๐Ÿ›ƒ d83ddec3; customs
+๐Ÿ›„ d83ddec4; baggage claim
+๐Ÿ›… d83ddec5; left luggage
+โš ๏ธ 26a0 fe0f; warning
+๐Ÿšธ d83ddeb8; children crossing
+โ›” 26d4; no entry
+๐Ÿšซ d83ddeab; prohibited
+๐Ÿšณ d83ddeb3; no bicycles
+๐Ÿšญ d83ddead; no smoking
+๐Ÿšฏ d83ddeaf; no littering
+๐Ÿšฑ d83ddeb1; non-potable water
+๐Ÿšท d83ddeb7; no pedestrians
+๐Ÿ“ต d83ddcf5; no mobile phones
+๐Ÿ”ž d83ddd1e; no one under eighteen
+โ˜ข๏ธ 2622 fe0f; radioactive
+โ˜ฃ๏ธ 2623 fe0f; biohazard
+โฌ†๏ธ 2b06 fe0f; up arrow
+โ†—๏ธ 2197 fe0f; up-right arrow
+โžก๏ธ 27a1 fe0f; right arrow
+โ†˜๏ธ 2198 fe0f; down-right arrow
+โฌ‡๏ธ 2b07 fe0f; down arrow
+โ†™๏ธ 2199 fe0f; down-left arrow
+โฌ…๏ธ 2b05 fe0f; left arrow
+โ†–๏ธ 2196 fe0f; up-left arrow
+โ†•๏ธ 2195 fe0f; up-down arrow
+โ†”๏ธ 2194 fe0f; left-right arrow
+โ†ฉ๏ธ 21a9 fe0f; right arrow curving left
+โ†ช๏ธ 21aa fe0f; left arrow curving right
+โคด๏ธ 2934 fe0f; right arrow curving up
+โคต๏ธ 2935 fe0f; right arrow curving down
+๐Ÿ”ƒ d83ddd03; clockwise vertical arrows
+๐Ÿ”„ d83ddd04; counterclockwise arrows button
+๐Ÿ”™ d83ddd19; BACK arrow
+๐Ÿ”š d83ddd1a; END arrow
+๐Ÿ”› d83ddd1b; ON! arrow
+๐Ÿ”œ d83ddd1c; SOON arrow
+๐Ÿ” d83ddd1d; TOP arrow
+๐Ÿ› d83dded0; place of worship
+โš›๏ธ 269b fe0f; atom symbol
+๐Ÿ•‰๏ธ d83ddd49 fe0f; om
+โœก๏ธ 2721 fe0f; star of David
+โ˜ธ๏ธ 2638 fe0f; wheel of dharma
+โ˜ฏ๏ธ 262f fe0f; yin yang
+โœ๏ธ 271d fe0f; latin cross
+โ˜ฆ๏ธ 2626 fe0f; orthodox cross
+โ˜ช๏ธ 262a fe0f; star and crescent
+โ˜ฎ๏ธ 262e fe0f; peace symbol
+๐Ÿ•Ž d83ddd4e; menorah
+๐Ÿ”ฏ d83ddd2f; dotted six-pointed star
+โ™ˆ 2648; Aries
+โ™‰ 2649; Taurus
+โ™Š 264a; Gemini
+โ™‹ 264b; Cancer
+โ™Œ 264c; Leo
+โ™ 264d; Virgo
+โ™Ž 264e; Libra
+โ™ 264f; Scorpio
+โ™ 2650; Sagittarius
+โ™‘ 2651; Capricorn
+โ™’ 2652; Aquarius
+โ™“ 2653; Pisces
+โ›Ž 26ce; Ophiuchus
+๐Ÿ”€ d83ddd00; shuffle tracks button
+๐Ÿ” d83ddd01; repeat button
+๐Ÿ”‚ d83ddd02; repeat single button
+โ–ถ๏ธ 25b6 fe0f; play button
+โฉ 23e9; fast-forward button
+โญ๏ธ 23ed fe0f; next track button
+โฏ๏ธ 23ef fe0f; play or pause button
+โ—€๏ธ 25c0 fe0f; reverse button
+โช 23ea; fast reverse button
+โฎ๏ธ 23ee fe0f; last track button
+๐Ÿ”ผ d83ddd3c; upwards button
+โซ 23eb; fast up button
+๐Ÿ”ฝ d83ddd3d; downwards button
+โฌ 23ec; fast down button
+โธ๏ธ 23f8 fe0f; pause button
+โน๏ธ 23f9 fe0f; stop button
+โบ๏ธ 23fa fe0f; record button
+โ๏ธ 23cf fe0f; eject button
+๐ŸŽฆ d83cdfa6; cinema
+๐Ÿ”… d83ddd05; dim button
+๐Ÿ”† d83ddd06; bright button
+๐Ÿ“ถ d83ddcf6; antenna bars
+๐Ÿ“ณ d83ddcf3; vibration mode
+๐Ÿ“ด d83ddcf4; mobile phone off
+โ™€๏ธ 2640 fe0f; female sign
+โ™‚๏ธ 2642 fe0f; male sign
+โšง๏ธ 26a7 fe0f; transgender symbol
+โœ–๏ธ 2716 fe0f; multiply
+โž• 2795; plus
+โž– 2796; minus
+โž— 2797; divide
+๐ŸŸฐ d83ddff0; heavy equals sign
+โ™พ๏ธ 267e fe0f; infinity
+โ€ผ๏ธ 203c fe0f; double exclamation mark
+โ‰๏ธ 2049 fe0f; exclamation question mark
+โ“ 2753; red question mark
+โ” 2754; white question mark
+โ• 2755; white exclamation mark
+โ— 2757; red exclamation mark
+ใ€ฐ๏ธ 3030 fe0f; wavy dash
+๐Ÿ’ฑ d83ddcb1; currency exchange
+๐Ÿ’ฒ d83ddcb2; heavy dollar sign
+โš•๏ธ 2695 fe0f; medical symbol
+โ™ป๏ธ 267b fe0f; recycling symbol
+โšœ๏ธ 269c fe0f; fleur-de-lis
+๐Ÿ”ฑ d83ddd31; trident emblem
+๐Ÿ“› d83ddcdb; name badge
+๐Ÿ”ฐ d83ddd30; Japanese symbol for beginner
+โญ• 2b55; hollow red circle
+โœ… 2705; check mark button
+โ˜‘๏ธ 2611 fe0f; check box with check
+โœ”๏ธ 2714 fe0f; check mark
+โŒ 274c; cross mark
+โŽ 274e; cross mark button
+โžฐ 27b0; curly loop
+โžฟ 27bf; double curly loop
+ใ€ฝ๏ธ 303d fe0f; part alternation mark
+โœณ๏ธ 2733 fe0f; eight-spoked asterisk
+โœด๏ธ 2734 fe0f; eight-pointed star
+โ‡๏ธ 2747 fe0f; sparkle
+ยฉ๏ธ 00a9 fe0f; copyright
+ยฎ๏ธ 00ae fe0f; registered
+โ„ข๏ธ 2122 fe0f; trade mark
+#๏ธโƒฃ 0023 fe0f 20e3; keycap: #
+*๏ธโƒฃ 002a fe0f 20e3; keycap: *
+0๏ธโƒฃ 0030 fe0f 20e3; keycap: 0
+1๏ธโƒฃ 0031 fe0f 20e3; keycap: 1
+2๏ธโƒฃ 0032 fe0f 20e3; keycap: 2
+3๏ธโƒฃ 0033 fe0f 20e3; keycap: 3
+4๏ธโƒฃ 0034 fe0f 20e3; keycap: 4
+5๏ธโƒฃ 0035 fe0f 20e3; keycap: 5
+6๏ธโƒฃ 0036 fe0f 20e3; keycap: 6
+7๏ธโƒฃ 0037 fe0f 20e3; keycap: 7
+8๏ธโƒฃ 0038 fe0f 20e3; keycap: 8
+9๏ธโƒฃ 0039 fe0f 20e3; keycap: 9
+๐Ÿ”Ÿ d83ddd1f; keycap: 10
+๐Ÿ”  d83ddd20; input latin uppercase
+๐Ÿ”ก d83ddd21; input latin lowercase
+๐Ÿ”ข d83ddd22; input numbers
+๐Ÿ”ฃ d83ddd23; input symbols
+๐Ÿ”ค d83ddd24; input latin letters
+๐Ÿ…ฐ๏ธ d83cdd70 fe0f; A button (blood type)
+๐Ÿ†Ž d83cdd8e; AB button (blood type)
+๐Ÿ…ฑ๏ธ d83cdd71 fe0f; B button (blood type)
+๐Ÿ†‘ d83cdd91; CL button
+๐Ÿ†’ d83cdd92; COOL button
+๐Ÿ†“ d83cdd93; FREE button
+โ„น๏ธ 2139 fe0f; information
+๐Ÿ†” d83cdd94; ID button
+โ“‚๏ธ 24c2 fe0f; circled M
+๐Ÿ†• d83cdd95; NEW button
+๐Ÿ†– d83cdd96; NG button
+๐Ÿ…พ๏ธ d83cdd7e fe0f; O button (blood type)
+๐Ÿ†— d83cdd97; OK button
+๐Ÿ…ฟ๏ธ d83cdd7f fe0f; P button
+๐Ÿ†˜ d83cdd98; SOS button
+๐Ÿ†™ d83cdd99; UP! button
+๐Ÿ†š d83cdd9a; VS button
+๐Ÿˆ d83cde01; Japanese โ€œhereโ€ button
+๐Ÿˆ‚๏ธ d83cde02 fe0f; Japanese โ€œservice chargeโ€ button
+๐Ÿˆท๏ธ d83cde37 fe0f; Japanese โ€œmonthly amountโ€ button
+๐Ÿˆถ d83cde36; Japanese โ€œnot free of chargeโ€ button
+๐Ÿˆฏ d83cde2f; Japanese โ€œreservedโ€ button
+๐Ÿ‰ d83cde50; Japanese โ€œbargainโ€ button
+๐Ÿˆน d83cde39; Japanese โ€œdiscountโ€ button
+๐Ÿˆš d83cde1a; Japanese โ€œfree of chargeโ€ button
+๐Ÿˆฒ d83cde32; Japanese โ€œprohibitedโ€ button
+๐Ÿ‰‘ d83cde51; Japanese โ€œacceptableโ€ button
+๐Ÿˆธ d83cde38; Japanese โ€œapplicationโ€ button
+๐Ÿˆด d83cde34; Japanese โ€œpassing gradeโ€ button
+๐Ÿˆณ d83cde33; Japanese โ€œvacancyโ€ button
+ใŠ—๏ธ 3297 fe0f; Japanese โ€œcongratulationsโ€ button
+ใŠ™๏ธ 3299 fe0f; Japanese โ€œsecretโ€ button
+๐Ÿˆบ d83cde3a; Japanese โ€œopen for businessโ€ button
+๐Ÿˆต d83cde35; Japanese โ€œno vacancyโ€ button
+๐Ÿ”ด d83ddd34; red circle
+๐ŸŸ  d83ddfe0; orange circle
+๐ŸŸก d83ddfe1; yellow circle
+๐ŸŸข d83ddfe2; green circle
+๐Ÿ”ต d83ddd35; blue circle
+๐ŸŸฃ d83ddfe3; purple circle
+๐ŸŸค d83ddfe4; brown circle
+โšซ 26ab; black circle
+โšช 26aa; white circle
+๐ŸŸฅ d83ddfe5; red square
+๐ŸŸง d83ddfe7; orange square
+๐ŸŸจ d83ddfe8; yellow square
+๐ŸŸฉ d83ddfe9; green square
+๐ŸŸฆ d83ddfe6; blue square
+๐ŸŸช d83ddfea; purple square
+๐ŸŸซ d83ddfeb; brown square
+โฌ› 2b1b; black large square
+โฌœ 2b1c; white large square
+โ—ผ๏ธ 25fc fe0f; black medium square
+โ—ป๏ธ 25fb fe0f; white medium square
+โ—พ 25fe; black medium-small square
+โ—ฝ 25fd; white medium-small square
+โ–ช๏ธ 25aa fe0f; black small square
+โ–ซ๏ธ 25ab fe0f; white small square
+๐Ÿ”ถ d83ddd36; large orange diamond
+๐Ÿ”ท d83ddd37; large blue diamond
+๐Ÿ”ธ d83ddd38; small orange diamond
+๐Ÿ”น d83ddd39; small blue diamond
+๐Ÿ”บ d83ddd3a; red triangle pointed up
+๐Ÿ”ป d83ddd3b; red triangle pointed down
+๐Ÿ’  d83ddca0; diamond with a dot
+๐Ÿ”˜ d83ddd18; radio button
+๐Ÿ”ณ d83ddd33; white square button
+๐Ÿ”ฒ d83ddd32; black square button
+๐Ÿ d83cdfc1; chequered flag
+๐Ÿšฉ d83ddea9; triangular flag
+๐ŸŽŒ d83cdf8c; crossed flags
+๐Ÿด d83cdff4; black flag
+๐Ÿณ๏ธ d83cdff3 fe0f; white flag
+๐Ÿ‡ฆ๐Ÿ‡จ d83cdde6 d83cdde8; flag: Ascension Island
+๐Ÿ‡ฆ๐Ÿ‡ฉ d83cdde6 d83cdde9; flag: Andorra
+๐Ÿ‡ฆ๐Ÿ‡ช d83cdde6 d83cddea; flag: United Arab Emirates
+๐Ÿ‡ฆ๐Ÿ‡ซ d83cdde6 d83cddeb; flag: Afghanistan
+๐Ÿ‡ฆ๐Ÿ‡ฌ d83cdde6 d83cddec; flag: Antigua & Barbuda
+๐Ÿ‡ฆ๐Ÿ‡ฎ d83cdde6 d83cddee; flag: Anguilla
+๐Ÿ‡ฆ๐Ÿ‡ฑ d83cdde6 d83cddf1; flag: Albania
+๐Ÿ‡ฆ๐Ÿ‡ฒ d83cdde6 d83cddf2; flag: Armenia
+๐Ÿ‡ฆ๐Ÿ‡ด d83cdde6 d83cddf4; flag: Angola
+๐Ÿ‡ฆ๐Ÿ‡ถ d83cdde6 d83cddf6; flag: Antarctica
+๐Ÿ‡ฆ๐Ÿ‡ท d83cdde6 d83cddf7; flag: Argentina
+๐Ÿ‡ฆ๐Ÿ‡ธ d83cdde6 d83cddf8; flag: American Samoa
+๐Ÿ‡ฆ๐Ÿ‡น d83cdde6 d83cddf9; flag: Austria
+๐Ÿ‡ฆ๐Ÿ‡บ d83cdde6 d83cddfa; flag: Australia
+๐Ÿ‡ฆ๐Ÿ‡ผ d83cdde6 d83cddfc; flag: Aruba
+๐Ÿ‡ฆ๐Ÿ‡ฝ d83cdde6 d83cddfd; flag: ร…land Islands
+๐Ÿ‡ฆ๐Ÿ‡ฟ d83cdde6 d83cddff; flag: Azerbaijan
+๐Ÿ‡ง๐Ÿ‡ฆ d83cdde7 d83cdde6; flag: Bosnia & Herzegovina
+๐Ÿ‡ง๐Ÿ‡ง d83cdde7 d83cdde7; flag: Barbados
+๐Ÿ‡ง๐Ÿ‡ฉ d83cdde7 d83cdde9; flag: Bangladesh
+๐Ÿ‡ง๐Ÿ‡ช d83cdde7 d83cddea; flag: Belgium
+๐Ÿ‡ง๐Ÿ‡ซ d83cdde7 d83cddeb; flag: Burkina Faso
+๐Ÿ‡ง๐Ÿ‡ฌ d83cdde7 d83cddec; flag: Bulgaria
+๐Ÿ‡ง๐Ÿ‡ญ d83cdde7 d83cdded; flag: Bahrain
+๐Ÿ‡ง๐Ÿ‡ฎ d83cdde7 d83cddee; flag: Burundi
+๐Ÿ‡ง๐Ÿ‡ฏ d83cdde7 d83cddef; flag: Benin
+๐Ÿ‡ง๐Ÿ‡ฑ d83cdde7 d83cddf1; flag: St. Barthรฉlemy
+๐Ÿ‡ง๐Ÿ‡ฒ d83cdde7 d83cddf2; flag: Bermuda
+๐Ÿ‡ง๐Ÿ‡ณ d83cdde7 d83cddf3; flag: Brunei
+๐Ÿ‡ง๐Ÿ‡ด d83cdde7 d83cddf4; flag: Bolivia
+๐Ÿ‡ง๐Ÿ‡ถ d83cdde7 d83cddf6; flag: Caribbean Netherlands
+๐Ÿ‡ง๐Ÿ‡ท d83cdde7 d83cddf7; flag: Brazil
+๐Ÿ‡ง๐Ÿ‡ธ d83cdde7 d83cddf8; flag: Bahamas
+๐Ÿ‡ง๐Ÿ‡น d83cdde7 d83cddf9; flag: Bhutan
+๐Ÿ‡ง๐Ÿ‡ป d83cdde7 d83cddfb; flag: Bouvet Island
+๐Ÿ‡ง๐Ÿ‡ผ d83cdde7 d83cddfc; flag: Botswana
+๐Ÿ‡ง๐Ÿ‡พ d83cdde7 d83cddfe; flag: Belarus
+๐Ÿ‡ง๐Ÿ‡ฟ d83cdde7 d83cddff; flag: Belize
+๐Ÿ‡จ๐Ÿ‡ฆ d83cdde8 d83cdde6; flag: Canada
+๐Ÿ‡จ๐Ÿ‡จ d83cdde8 d83cdde8; flag: Cocos (Keeling) Islands
+๐Ÿ‡จ๐Ÿ‡ฉ d83cdde8 d83cdde9; flag: Congo - Kinshasa
+๐Ÿ‡จ๐Ÿ‡ซ d83cdde8 d83cddeb; flag: Central African Republic
+๐Ÿ‡จ๐Ÿ‡ฌ d83cdde8 d83cddec; flag: Congo - Brazzaville
+๐Ÿ‡จ๐Ÿ‡ญ d83cdde8 d83cdded; flag: Switzerland
+๐Ÿ‡จ๐Ÿ‡ฎ d83cdde8 d83cddee; flag: Cรดte dโ€™Ivoire
+๐Ÿ‡จ๐Ÿ‡ฐ d83cdde8 d83cddf0; flag: Cook Islands
+๐Ÿ‡จ๐Ÿ‡ฑ d83cdde8 d83cddf1; flag: Chile
+๐Ÿ‡จ๐Ÿ‡ฒ d83cdde8 d83cddf2; flag: Cameroon
+๐Ÿ‡จ๐Ÿ‡ณ d83cdde8 d83cddf3; flag: China
+๐Ÿ‡จ๐Ÿ‡ด d83cdde8 d83cddf4; flag: Colombia
+๐Ÿ‡จ๐Ÿ‡ต d83cdde8 d83cddf5; flag: Clipperton Island
+๐Ÿ‡จ๐Ÿ‡ท d83cdde8 d83cddf7; flag: Costa Rica
+๐Ÿ‡จ๐Ÿ‡บ d83cdde8 d83cddfa; flag: Cuba
+๐Ÿ‡จ๐Ÿ‡ป d83cdde8 d83cddfb; flag: Cape Verde
+๐Ÿ‡จ๐Ÿ‡ผ d83cdde8 d83cddfc; flag: Curaรงao
+๐Ÿ‡จ๐Ÿ‡ฝ d83cdde8 d83cddfd; flag: Christmas Island
+๐Ÿ‡จ๐Ÿ‡พ d83cdde8 d83cddfe; flag: Cyprus
+๐Ÿ‡จ๐Ÿ‡ฟ d83cdde8 d83cddff; flag: Czechia
+๐Ÿ‡ฉ๐Ÿ‡ช d83cdde9 d83cddea; flag: Germany
+๐Ÿ‡ฉ๐Ÿ‡ฌ d83cdde9 d83cddec; flag: Diego Garcia
+๐Ÿ‡ฉ๐Ÿ‡ฏ d83cdde9 d83cddef; flag: Djibouti
+๐Ÿ‡ฉ๐Ÿ‡ฐ d83cdde9 d83cddf0; flag: Denmark
+๐Ÿ‡ฉ๐Ÿ‡ฒ d83cdde9 d83cddf2; flag: Dominica
+๐Ÿ‡ฉ๐Ÿ‡ด d83cdde9 d83cddf4; flag: Dominican Republic
+๐Ÿ‡ฉ๐Ÿ‡ฟ d83cdde9 d83cddff; flag: Algeria
+๐Ÿ‡ช๐Ÿ‡ฆ d83cddea d83cdde6; flag: Ceuta & Melilla
+๐Ÿ‡ช๐Ÿ‡จ d83cddea d83cdde8; flag: Ecuador
+๐Ÿ‡ช๐Ÿ‡ช d83cddea d83cddea; flag: Estonia
+๐Ÿ‡ช๐Ÿ‡ฌ d83cddea d83cddec; flag: Egypt
+๐Ÿ‡ช๐Ÿ‡ญ d83cddea d83cdded; flag: Western Sahara
+๐Ÿ‡ช๐Ÿ‡ท d83cddea d83cddf7; flag: Eritrea
+๐Ÿ‡ช๐Ÿ‡ธ d83cddea d83cddf8; flag: Spain
+๐Ÿ‡ช๐Ÿ‡น d83cddea d83cddf9; flag: Ethiopia
+๐Ÿ‡ช๐Ÿ‡บ d83cddea d83cddfa; flag: European Union
+๐Ÿ‡ซ๐Ÿ‡ฎ d83cddeb d83cddee; flag: Finland
+๐Ÿ‡ซ๐Ÿ‡ฏ d83cddeb d83cddef; flag: Fiji
+๐Ÿ‡ซ๐Ÿ‡ฐ d83cddeb d83cddf0; flag: Falkland Islands
+๐Ÿ‡ซ๐Ÿ‡ฒ d83cddeb d83cddf2; flag: Micronesia
+๐Ÿ‡ซ๐Ÿ‡ด d83cddeb d83cddf4; flag: Faroe Islands
+๐Ÿ‡ซ๐Ÿ‡ท d83cddeb d83cddf7; flag: France
+๐Ÿ‡ฌ๐Ÿ‡ฆ d83cddec d83cdde6; flag: Gabon
+๐Ÿ‡ฌ๐Ÿ‡ง d83cddec d83cdde7; flag: United Kingdom
+๐Ÿ‡ฌ๐Ÿ‡ฉ d83cddec d83cdde9; flag: Grenada
+๐Ÿ‡ฌ๐Ÿ‡ช d83cddec d83cddea; flag: Georgia
+๐Ÿ‡ฌ๐Ÿ‡ซ d83cddec d83cddeb; flag: French Guiana
+๐Ÿ‡ฌ๐Ÿ‡ฌ d83cddec d83cddec; flag: Guernsey
+๐Ÿ‡ฌ๐Ÿ‡ญ d83cddec d83cdded; flag: Ghana
+๐Ÿ‡ฌ๐Ÿ‡ฎ d83cddec d83cddee; flag: Gibraltar
+๐Ÿ‡ฌ๐Ÿ‡ฑ d83cddec d83cddf1; flag: Greenland
+๐Ÿ‡ฌ๐Ÿ‡ฒ d83cddec d83cddf2; flag: Gambia
+๐Ÿ‡ฌ๐Ÿ‡ณ d83cddec d83cddf3; flag: Guinea
+๐Ÿ‡ฌ๐Ÿ‡ต d83cddec d83cddf5; flag: Guadeloupe
+๐Ÿ‡ฌ๐Ÿ‡ถ d83cddec d83cddf6; flag: Equatorial Guinea
+๐Ÿ‡ฌ๐Ÿ‡ท d83cddec d83cddf7; flag: Greece
+๐Ÿ‡ฌ๐Ÿ‡ธ d83cddec d83cddf8; flag: South Georgia & South Sandwich Islands
+๐Ÿ‡ฌ๐Ÿ‡น d83cddec d83cddf9; flag: Guatemala
+๐Ÿ‡ฌ๐Ÿ‡บ d83cddec d83cddfa; flag: Guam
+๐Ÿ‡ฌ๐Ÿ‡ผ d83cddec d83cddfc; flag: Guinea-Bissau
+๐Ÿ‡ฌ๐Ÿ‡พ d83cddec d83cddfe; flag: Guyana
+๐Ÿ‡ญ๐Ÿ‡ฐ d83cdded d83cddf0; flag: Hong Kong SAR China
+๐Ÿ‡ญ๐Ÿ‡ฒ d83cdded d83cddf2; flag: Heard & McDonald Islands
+๐Ÿ‡ญ๐Ÿ‡ณ d83cdded d83cddf3; flag: Honduras
+๐Ÿ‡ญ๐Ÿ‡ท d83cdded d83cddf7; flag: Croatia
+๐Ÿ‡ญ๐Ÿ‡น d83cdded d83cddf9; flag: Haiti
+๐Ÿ‡ญ๐Ÿ‡บ d83cdded d83cddfa; flag: Hungary
+๐Ÿ‡ฎ๐Ÿ‡จ d83cddee d83cdde8; flag: Canary Islands
+๐Ÿ‡ฎ๐Ÿ‡ฉ d83cddee d83cdde9; flag: Indonesia
+๐Ÿ‡ฎ๐Ÿ‡ช d83cddee d83cddea; flag: Ireland
+๐Ÿ‡ฎ๐Ÿ‡ฑ d83cddee d83cddf1; flag: Israel
+๐Ÿ‡ฎ๐Ÿ‡ฒ d83cddee d83cddf2; flag: Isle of Man
+๐Ÿ‡ฎ๐Ÿ‡ณ d83cddee d83cddf3; flag: India
+๐Ÿ‡ฎ๐Ÿ‡ด d83cddee d83cddf4; flag: British Indian Ocean Territory
+๐Ÿ‡ฎ๐Ÿ‡ถ d83cddee d83cddf6; flag: Iraq
+๐Ÿ‡ฎ๐Ÿ‡ท d83cddee d83cddf7; flag: Iran
+๐Ÿ‡ฎ๐Ÿ‡ธ d83cddee d83cddf8; flag: Iceland
+๐Ÿ‡ฎ๐Ÿ‡น d83cddee d83cddf9; flag: Italy
+๐Ÿ‡ฏ๐Ÿ‡ช d83cddef d83cddea; flag: Jersey
+๐Ÿ‡ฏ๐Ÿ‡ฒ d83cddef d83cddf2; flag: Jamaica
+๐Ÿ‡ฏ๐Ÿ‡ด d83cddef d83cddf4; flag: Jordan
+๐Ÿ‡ฏ๐Ÿ‡ต d83cddef d83cddf5; flag: Japan
+๐Ÿ‡ฐ๐Ÿ‡ช d83cddf0 d83cddea; flag: Kenya
+๐Ÿ‡ฐ๐Ÿ‡ฌ d83cddf0 d83cddec; flag: Kyrgyzstan
+๐Ÿ‡ฐ๐Ÿ‡ญ d83cddf0 d83cdded; flag: Cambodia
+๐Ÿ‡ฐ๐Ÿ‡ฎ d83cddf0 d83cddee; flag: Kiribati
+๐Ÿ‡ฐ๐Ÿ‡ฒ d83cddf0 d83cddf2; flag: Comoros
+๐Ÿ‡ฐ๐Ÿ‡ณ d83cddf0 d83cddf3; flag: St. Kitts & Nevis
+๐Ÿ‡ฐ๐Ÿ‡ต d83cddf0 d83cddf5; flag: North Korea
+๐Ÿ‡ฐ๐Ÿ‡ท d83cddf0 d83cddf7; flag: South Korea
+๐Ÿ‡ฐ๐Ÿ‡ผ d83cddf0 d83cddfc; flag: Kuwait
+๐Ÿ‡ฐ๐Ÿ‡พ d83cddf0 d83cddfe; flag: Cayman Islands
+๐Ÿ‡ฐ๐Ÿ‡ฟ d83cddf0 d83cddff; flag: Kazakhstan
+๐Ÿ‡ฑ๐Ÿ‡ฆ d83cddf1 d83cdde6; flag: Laos
+๐Ÿ‡ฑ๐Ÿ‡ง d83cddf1 d83cdde7; flag: Lebanon
+๐Ÿ‡ฑ๐Ÿ‡จ d83cddf1 d83cdde8; flag: St. Lucia
+๐Ÿ‡ฑ๐Ÿ‡ฎ d83cddf1 d83cddee; flag: Liechtenstein
+๐Ÿ‡ฑ๐Ÿ‡ฐ d83cddf1 d83cddf0; flag: Sri Lanka
+๐Ÿ‡ฑ๐Ÿ‡ท d83cddf1 d83cddf7; flag: Liberia
+๐Ÿ‡ฑ๐Ÿ‡ธ d83cddf1 d83cddf8; flag: Lesotho
+๐Ÿ‡ฑ๐Ÿ‡น d83cddf1 d83cddf9; flag: Lithuania
+๐Ÿ‡ฑ๐Ÿ‡บ d83cddf1 d83cddfa; flag: Luxembourg
+๐Ÿ‡ฑ๐Ÿ‡ป d83cddf1 d83cddfb; flag: Latvia
+๐Ÿ‡ฑ๐Ÿ‡พ d83cddf1 d83cddfe; flag: Libya
+๐Ÿ‡ฒ๐Ÿ‡ฆ d83cddf2 d83cdde6; flag: Morocco
+๐Ÿ‡ฒ๐Ÿ‡จ d83cddf2 d83cdde8; flag: Monaco
+๐Ÿ‡ฒ๐Ÿ‡ฉ d83cddf2 d83cdde9; flag: Moldova
+๐Ÿ‡ฒ๐Ÿ‡ช d83cddf2 d83cddea; flag: Montenegro
+๐Ÿ‡ฒ๐Ÿ‡ซ d83cddf2 d83cddeb; flag: St. Martin
+๐Ÿ‡ฒ๐Ÿ‡ฌ d83cddf2 d83cddec; flag: Madagascar
+๐Ÿ‡ฒ๐Ÿ‡ญ d83cddf2 d83cdded; flag: Marshall Islands
+๐Ÿ‡ฒ๐Ÿ‡ฐ d83cddf2 d83cddf0; flag: North Macedonia
+๐Ÿ‡ฒ๐Ÿ‡ฑ d83cddf2 d83cddf1; flag: Mali
+๐Ÿ‡ฒ๐Ÿ‡ฒ d83cddf2 d83cddf2; flag: Myanmar (Burma)
+๐Ÿ‡ฒ๐Ÿ‡ณ d83cddf2 d83cddf3; flag: Mongolia
+๐Ÿ‡ฒ๐Ÿ‡ด d83cddf2 d83cddf4; flag: Macao SAR China
+๐Ÿ‡ฒ๐Ÿ‡ต d83cddf2 d83cddf5; flag: Northern Mariana Islands
+๐Ÿ‡ฒ๐Ÿ‡ถ d83cddf2 d83cddf6; flag: Martinique
+๐Ÿ‡ฒ๐Ÿ‡ท d83cddf2 d83cddf7; flag: Mauritania
+๐Ÿ‡ฒ๐Ÿ‡ธ d83cddf2 d83cddf8; flag: Montserrat
+๐Ÿ‡ฒ๐Ÿ‡น d83cddf2 d83cddf9; flag: Malta
+๐Ÿ‡ฒ๐Ÿ‡บ d83cddf2 d83cddfa; flag: Mauritius
+๐Ÿ‡ฒ๐Ÿ‡ป d83cddf2 d83cddfb; flag: Maldives
+๐Ÿ‡ฒ๐Ÿ‡ผ d83cddf2 d83cddfc; flag: Malawi
+๐Ÿ‡ฒ๐Ÿ‡ฝ d83cddf2 d83cddfd; flag: Mexico
+๐Ÿ‡ฒ๐Ÿ‡พ d83cddf2 d83cddfe; flag: Malaysia
+๐Ÿ‡ฒ๐Ÿ‡ฟ d83cddf2 d83cddff; flag: Mozambique
+๐Ÿ‡ณ๐Ÿ‡ฆ d83cddf3 d83cdde6; flag: Namibia
+๐Ÿ‡ณ๐Ÿ‡จ d83cddf3 d83cdde8; flag: New Caledonia
+๐Ÿ‡ณ๐Ÿ‡ช d83cddf3 d83cddea; flag: Niger
+๐Ÿ‡ณ๐Ÿ‡ซ d83cddf3 d83cddeb; flag: Norfolk Island
+๐Ÿ‡ณ๐Ÿ‡ฌ d83cddf3 d83cddec; flag: Nigeria
+๐Ÿ‡ณ๐Ÿ‡ฎ d83cddf3 d83cddee; flag: Nicaragua
+๐Ÿ‡ณ๐Ÿ‡ฑ d83cddf3 d83cddf1; flag: Netherlands
+๐Ÿ‡ณ๐Ÿ‡ด d83cddf3 d83cddf4; flag: Norway
+๐Ÿ‡ณ๐Ÿ‡ต d83cddf3 d83cddf5; flag: Nepal
+๐Ÿ‡ณ๐Ÿ‡ท d83cddf3 d83cddf7; flag: Nauru
+๐Ÿ‡ณ๐Ÿ‡บ d83cddf3 d83cddfa; flag: Niue
+๐Ÿ‡ณ๐Ÿ‡ฟ d83cddf3 d83cddff; flag: New Zealand
+๐Ÿ‡ด๐Ÿ‡ฒ d83cddf4 d83cddf2; flag: Oman
+๐Ÿ‡ต๐Ÿ‡ฆ d83cddf5 d83cdde6; flag: Panama
+๐Ÿ‡ต๐Ÿ‡ช d83cddf5 d83cddea; flag: Peru
+๐Ÿ‡ต๐Ÿ‡ซ d83cddf5 d83cddeb; flag: French Polynesia
+๐Ÿ‡ต๐Ÿ‡ฌ d83cddf5 d83cddec; flag: Papua New Guinea
+๐Ÿ‡ต๐Ÿ‡ญ d83cddf5 d83cdded; flag: Philippines
+๐Ÿ‡ต๐Ÿ‡ฐ d83cddf5 d83cddf0; flag: Pakistan
+๐Ÿ‡ต๐Ÿ‡ฑ d83cddf5 d83cddf1; flag: Poland
+๐Ÿ‡ต๐Ÿ‡ฒ d83cddf5 d83cddf2; flag: St. Pierre & Miquelon
+๐Ÿ‡ต๐Ÿ‡ณ d83cddf5 d83cddf3; flag: Pitcairn Islands
+๐Ÿ‡ต๐Ÿ‡ท d83cddf5 d83cddf7; flag: Puerto Rico
+๐Ÿ‡ต๐Ÿ‡ธ d83cddf5 d83cddf8; flag: Palestinian Territories
+๐Ÿ‡ต๐Ÿ‡น d83cddf5 d83cddf9; flag: Portugal
+๐Ÿ‡ต๐Ÿ‡ผ d83cddf5 d83cddfc; flag: Palau
+๐Ÿ‡ต๐Ÿ‡พ d83cddf5 d83cddfe; flag: Paraguay
+๐Ÿ‡ถ๐Ÿ‡ฆ d83cddf6 d83cdde6; flag: Qatar
+๐Ÿ‡ท๐Ÿ‡ช d83cddf7 d83cddea; flag: Rรฉunion
+๐Ÿ‡ท๐Ÿ‡ด d83cddf7 d83cddf4; flag: Romania
+๐Ÿ‡ท๐Ÿ‡ธ d83cddf7 d83cddf8; flag: Serbia
+๐Ÿ‡ท๐Ÿ‡บ d83cddf7 d83cddfa; flag: Russia
+๐Ÿ‡ท๐Ÿ‡ผ d83cddf7 d83cddfc; flag: Rwanda
+๐Ÿ‡ธ๐Ÿ‡ฆ d83cddf8 d83cdde6; flag: Saudi Arabia
+๐Ÿ‡ธ๐Ÿ‡ง d83cddf8 d83cdde7; flag: Solomon Islands
+๐Ÿ‡ธ๐Ÿ‡จ d83cddf8 d83cdde8; flag: Seychelles
+๐Ÿ‡ธ๐Ÿ‡ฉ d83cddf8 d83cdde9; flag: Sudan
+๐Ÿ‡ธ๐Ÿ‡ช d83cddf8 d83cddea; flag: Sweden
+๐Ÿ‡ธ๐Ÿ‡ฌ d83cddf8 d83cddec; flag: Singapore
+๐Ÿ‡ธ๐Ÿ‡ญ d83cddf8 d83cdded; flag: St. Helena
+๐Ÿ‡ธ๐Ÿ‡ฎ d83cddf8 d83cddee; flag: Slovenia
+๐Ÿ‡ธ๐Ÿ‡ฏ d83cddf8 d83cddef; flag: Svalbard & Jan Mayen
+๐Ÿ‡ธ๐Ÿ‡ฐ d83cddf8 d83cddf0; flag: Slovakia
+๐Ÿ‡ธ๐Ÿ‡ฑ d83cddf8 d83cddf1; flag: Sierra Leone
+๐Ÿ‡ธ๐Ÿ‡ฒ d83cddf8 d83cddf2; flag: San Marino
+๐Ÿ‡ธ๐Ÿ‡ณ d83cddf8 d83cddf3; flag: Senegal
+๐Ÿ‡ธ๐Ÿ‡ด d83cddf8 d83cddf4; flag: Somalia
+๐Ÿ‡ธ๐Ÿ‡ท d83cddf8 d83cddf7; flag: Suriname
+๐Ÿ‡ธ๐Ÿ‡ธ d83cddf8 d83cddf8; flag: South Sudan
+๐Ÿ‡ธ๐Ÿ‡น d83cddf8 d83cddf9; flag: Sรฃo Tomรฉ & Prรญncipe
+๐Ÿ‡ธ๐Ÿ‡ป d83cddf8 d83cddfb; flag: El Salvador
+๐Ÿ‡ธ๐Ÿ‡ฝ d83cddf8 d83cddfd; flag: Sint Maarten
+๐Ÿ‡ธ๐Ÿ‡พ d83cddf8 d83cddfe; flag: Syria
+๐Ÿ‡ธ๐Ÿ‡ฟ d83cddf8 d83cddff; flag: Eswatini
+๐Ÿ‡น๐Ÿ‡ฆ d83cddf9 d83cdde6; flag: Tristan da Cunha
+๐Ÿ‡น๐Ÿ‡จ d83cddf9 d83cdde8; flag: Turks & Caicos Islands
+๐Ÿ‡น๐Ÿ‡ฉ d83cddf9 d83cdde9; flag: Chad
+๐Ÿ‡น๐Ÿ‡ซ d83cddf9 d83cddeb; flag: French Southern Territories
+๐Ÿ‡น๐Ÿ‡ฌ d83cddf9 d83cddec; flag: Togo
+๐Ÿ‡น๐Ÿ‡ญ d83cddf9 d83cdded; flag: Thailand
+๐Ÿ‡น๐Ÿ‡ฏ d83cddf9 d83cddef; flag: Tajikistan
+๐Ÿ‡น๐Ÿ‡ฐ d83cddf9 d83cddf0; flag: Tokelau
+๐Ÿ‡น๐Ÿ‡ฑ d83cddf9 d83cddf1; flag: Timor-Leste
+๐Ÿ‡น๐Ÿ‡ฒ d83cddf9 d83cddf2; flag: Turkmenistan
+๐Ÿ‡น๐Ÿ‡ณ d83cddf9 d83cddf3; flag: Tunisia
+๐Ÿ‡น๐Ÿ‡ด d83cddf9 d83cddf4; flag: Tonga
+๐Ÿ‡น๐Ÿ‡ท d83cddf9 d83cddf7; flag: Turkey
+๐Ÿ‡น๐Ÿ‡น d83cddf9 d83cddf9; flag: Trinidad & Tobago
+๐Ÿ‡น๐Ÿ‡ป d83cddf9 d83cddfb; flag: Tuvalu
+๐Ÿ‡น๐Ÿ‡ผ d83cddf9 d83cddfc; flag: Taiwan
+๐Ÿ‡น๐Ÿ‡ฟ d83cddf9 d83cddff; flag: Tanzania
+๐Ÿ‡บ๐Ÿ‡ฆ d83cddfa d83cdde6; flag: Ukraine
+๐Ÿ‡บ๐Ÿ‡ฌ d83cddfa d83cddec; flag: Uganda
+๐Ÿ‡บ๐Ÿ‡ฒ d83cddfa d83cddf2; flag: U.S. Outlying Islands
+๐Ÿ‡บ๐Ÿ‡ณ d83cddfa d83cddf3; flag: United Nations
+๐Ÿ‡บ๐Ÿ‡ธ d83cddfa d83cddf8; flag: United States
+๐Ÿ‡บ๐Ÿ‡พ d83cddfa d83cddfe; flag: Uruguay
+๐Ÿ‡บ๐Ÿ‡ฟ d83cddfa d83cddff; flag: Uzbekistan
+๐Ÿ‡ป๐Ÿ‡ฆ d83cddfb d83cdde6; flag: Vatican City
+๐Ÿ‡ป๐Ÿ‡จ d83cddfb d83cdde8; flag: St. Vincent & Grenadines
+๐Ÿ‡ป๐Ÿ‡ช d83cddfb d83cddea; flag: Venezuela
+๐Ÿ‡ป๐Ÿ‡ฌ d83cddfb d83cddec; flag: British Virgin Islands
+๐Ÿ‡ป๐Ÿ‡ฎ d83cddfb d83cddee; flag: U.S. Virgin Islands
+๐Ÿ‡ป๐Ÿ‡ณ d83cddfb d83cddf3; flag: Vietnam
+๐Ÿ‡ป๐Ÿ‡บ d83cddfb d83cddfa; flag: Vanuatu
+๐Ÿ‡ผ๐Ÿ‡ซ d83cddfc d83cddeb; flag: Wallis & Futuna
+๐Ÿ‡ผ๐Ÿ‡ธ d83cddfc d83cddf8; flag: Samoa
+๐Ÿ‡ฝ๐Ÿ‡ฐ d83cddfd d83cddf0; flag: Kosovo
+๐Ÿ‡พ๐Ÿ‡ช d83cddfe d83cddea; flag: Yemen
+๐Ÿ‡พ๐Ÿ‡น d83cddfe d83cddf9; flag: Mayotte
+๐Ÿ‡ฟ๐Ÿ‡ฆ d83cddff d83cdde6; flag: South Africa
+๐Ÿ‡ฟ๐Ÿ‡ฒ d83cddff d83cddf2; flag: Zambia
+๐Ÿ‡ฟ๐Ÿ‡ผ d83cddff d83cddfc; flag: Zimbabwe
+๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ d83cdff4 db40dc67 db40dc62 db40dc65 db40dc6e db40dc67 db40dc7f; flag: England
+๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ d83cdff4 db40dc67 db40dc62 db40dc73 db40dc63 db40dc74 db40dc7f; flag: Scotland
+๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ d83cdff4 db40dc67 db40dc62 db40dc77 db40dc6c db40dc73 db40dc7f; flag: Wales
diff --git a/.local/share/chars/font-awesome b/.local/share/chars/font-awesome
new file mode 100644
index 0000000..882068e
--- /dev/null
+++ b/.local/share/chars/font-awesome
@@ -0,0 +1,1456 @@
+๏‰ฎ f26e; 500px
+๏จ f368; accessible-icon
+๏ฉ f369; accusoft
+๏šฏ f6af; acquisitions-incorporated
+๏™ f641; ad
+๏Šน f2b9; address-book
+๏Šป f2bb; address-card
+๏‚ f042; adjust
+๏…ฐ f170; adn
+๏ช f36a; adversal
+๏ซ f36b; affiliatetheme
+๏— f5d0; air-freshener
+๏ ด f834; airbnb
+๏ฌ f36c; algolia
+๏€ท f037; align-center
+๏€น f039; align-justify
+๏€ถ f036; align-left
+๏€ธ f038; align-right
+๏™‚ f642; alipay
+๏‘ก f461; allergies
+๏‰ฐ f270; amazon
+๏ฌ f42c; amazon-pay
+๏ƒน f0f9; ambulance
+๏Šฃ f2a3; american-sign-language-interpreting
+๏ญ f36d; amilia
+๏„ฝ f13d; anchor
+๏…ป f17b; android
+๏ˆ‰ f209; angellist
+๏„ƒ f103; angle-double-down
+๏„€ f100; angle-double-left
+๏„ f101; angle-double-right
+๏„‚ f102; angle-double-up
+๏„‡ f107; angle-down
+๏„„ f104; angle-left
+๏„… f105; angle-right
+๏„† f106; angle-up
+๏•– f556; angry
+๏ฎ f36e; angrycreative
+๏  f420; angular
+๏™„ f644; ankh
+๏ฏ f36f; app-store
+๏ฐ f370; app-store-ios
+๏ฑ f371; apper
+๏…น f179; apple
+๏—‘ f5d1; apple-alt
+๏• f415; apple-pay
+๏†‡ f187; archive
+๏•— f557; archway
+๏˜ f358; arrow-alt-circle-down
+๏™ f359; arrow-alt-circle-left
+๏š f35a; arrow-alt-circle-right
+๏› f35b; arrow-alt-circle-up
+๏‚ซ f0ab; arrow-circle-down
+๏‚จ f0a8; arrow-circle-left
+๏‚ฉ f0a9; arrow-circle-right
+๏‚ช f0aa; arrow-circle-up
+๏ฃ f063; arrow-down
+๏  f060; arrow-left
+๏ก f061; arrow-right
+๏ข f062; arrow-up
+๏‚ฒ f0b2; arrows-alt
+๏Œท f337; arrows-alt-h
+๏Œธ f338; arrows-alt-v
+๏บ f77a; artstation
+๏Šข f2a2; assistive-listening-systems
+๏ฉ f069; asterisk
+๏ฒ f372; asymmetrik
+๏‡บ f1fa; at
+๏•˜ f558; atlas
+๏ป f77b; atlassian
+๏—’ f5d2; atom
+๏ณ f373; audible
+๏Šž f29e; audio-description
+๏œ f41c; autoprefixer
+๏ด f374; avianex
+๏ก f421; aviato
+๏•™ f559; award
+๏ต f375; aws
+๏ผ f77c; baby
+๏ฝ f77d; baby-carriage
+๏•š f55a; backspace
+๏Š f04a; backward
+๏Ÿฅ f7e5; bacon
+๎™ e059; bacteri
+๎š e05a; bacteriu
+๏™ฆ f666; bahai
+๏‰Ž f24e; balance-scale
+๏”• f515; balance-scale-left
+๏”– f516; balance-scale-right
+๏ž f05e; ban
+๏‘ข f462; band-aid
+๏‹• f2d5; bandcamp
+๏€ช f02a; barcode
+๏ƒ‰ f0c9; bars
+๏ณ f433; baseball-ball
+๏ด f434; basketball-ball
+๏‹ f2cd; bath
+๏‰„ f244; battery-empty
+๏‰€ f240; battery-full
+๏‰‚ f242; battery-half
+๏‰ƒ f243; battery-quarter
+๏‰ f241; battery-three-quarters
+๏ ต f835; battle-net
+๏ˆถ f236; bed
+๏ƒผ f0fc; beer
+๏†ด f1b4; behance
+๏†ต f1b5; behance-square
+๏ƒณ f0f3; bell
+๏‡ถ f1f6; bell-slash
+๏•› f55b; bezier-curve
+๏™‡ f647; bible
+๏ˆ† f206; bicycle
+๏กŠ f84a; biking
+๏ธ f378; bimobject
+๏‡ฅ f1e5; binoculars
+๏ž€ f780; biohazard
+๏‡ฝ f1fd; birthday-cake
+๏…ฑ f171; bitbucket
+๏น f379; bitcoin
+๏บ f37a; bity
+๏‰พ f27e; black-tie
+๏ป f37b; blackberry
+๏”— f517; blender
+๏šถ f6b6; blender-phone
+๏Š f29d; blind
+๏ž f781; blog
+๏ผ f37c; blogger
+๏ฝ f37d; blogger-b
+๏Š“ f293; bluetooth
+๏Š” f294; bluetooth-b
+๏€ฒ f032; bold
+๏ƒง f0e7; bolt
+๏‡ข f1e2; bomb
+๏—— f5d7; bone
+๏•œ f55c; bong
+๏€ญ f02d; book
+๏šท f6b7; book-dead
+๏Ÿฆ f7e6; book-medical
+๏”˜ f518; book-open
+๏—š f5da; book-reader
+๏€ฎ f02e; bookmark
+๏ ถ f836; bootstrap
+๏กŒ f84c; border-all
+๏ก f850; border-none
+๏ก“ f853; border-style
+๏ถ f436; bowling-ball
+๏‘ฆ f466; box
+๏’ž f49e; box-open
+๎› e05b; box-tissu
+๏‘จ f468; boxes
+๏Šก f2a1; braille
+๏—œ f5dc; brain
+๏Ÿฌ f7ec; bread-slice
+๏‚ฑ f0b1; briefcase
+๏‘ฉ f469; briefcase-medical
+๏”™ f519; broadcast-tower
+๏”š f51a; broom
+๏• f55d; brush
+๏…š f15a; btc
+๏ ท f837; buffer
+๏†ˆ f188; bug
+๏†ญ f1ad; building
+๏‚ก f0a1; bullhorn
+๏…€ f140; bullseye
+๏‘ช f46a; burn
+๏ฟ f37f; buromobelexperte
+๏ˆ‡ f207; bus
+๏•ž f55e; bus-alt
+๏™Š f64a; business-time
+๏ขฆ f8a6; buy-n-large
+๏‡ฌ f1ec; calculator
+๏„ณ f133; calendar
+๏ณ f073; calendar-alt
+๏‰ด f274; calendar-check
+๏žƒ f783; calendar-day
+๏‰ฒ f272; calendar-minus
+๏‰ฑ f271; calendar-plus
+๏‰ณ f273; calendar-times
+๏ž„ f784; calendar-week
+๏€ฐ f030; camera
+๏‚ƒ f083; camera-retro
+๏šป f6bb; campground
+๏ž… f785; canadian-maple-leaf
+๏ž† f786; candy-cane
+๏•Ÿ f55f; cannabis
+๏‘ซ f46b; capsules
+๏†น f1b9; car
+๏—ž f5de; car-alt
+๏—Ÿ f5df; car-battery
+๏—ก f5e1; car-crash
+๏—ค f5e4; car-side
+๏ฃฟ f8ff; caravan
+๏ƒ— f0d7; caret-down
+๏ƒ™ f0d9; caret-left
+๏ƒš f0da; caret-right
+๏… f150; caret-square-down
+๏†‘ f191; caret-square-left
+๏…’ f152; caret-square-right
+๏…‘ f151; caret-square-up
+๏ƒ˜ f0d8; caret-up
+๏ž‡ f787; carrot
+๏ˆ˜ f218; cart-arrow-down
+๏ˆ— f217; cart-plus
+๏žˆ f788; cash-register
+๏šพ f6be; cat
+๏ญ f42d; cc-amazon-pay
+๏‡ณ f1f3; cc-amex
+๏– f416; cc-apple-pay
+๏‰Œ f24c; cc-diners-club
+๏‡ฒ f1f2; cc-discover
+๏‰‹ f24b; cc-jcb
+๏‡ฑ f1f1; cc-mastercard
+๏‡ด f1f4; cc-paypal
+๏‡ต f1f5; cc-stripe
+๏‡ฐ f1f0; cc-visa
+๏Ž€ f380; centercode
+๏ž‰ f789; centos
+๏‚ฃ f0a3; certificate
+๏›€ f6c0; chair
+๏”› f51b; chalkboard
+๏”œ f51c; chalkboard-teacher
+๏—ง f5e7; charging-station
+๏‡พ f1fe; chart-area
+๏‚€ f080; chart-bar
+๏ˆ f201; chart-line
+๏ˆ€ f200; chart-pie
+๏€Œ f00c; check
+๏˜ f058; check-circle
+๏•  f560; check-double
+๏…Š f14a; check-square
+๏Ÿฏ f7ef; cheese
+๏น f439; chess
+๏บ f43a; chess-bishop
+๏ผ f43c; chess-board
+๏ฟ f43f; chess-king
+๏‘ f441; chess-knight
+๏‘ƒ f443; chess-pawn
+๏‘… f445; chess-queen
+๏‘‡ f447; chess-rook
+๏„บ f13a; chevron-circle-down
+๏„ท f137; chevron-circle-left
+๏„ธ f138; chevron-circle-right
+๏„น f139; chevron-circle-up
+๏ธ f078; chevron-down
+๏“ f053; chevron-left
+๏” f054; chevron-right
+๏ท f077; chevron-up
+๏†ฎ f1ae; child
+๏‰จ f268; chrome
+๏ ธ f838; chromecast
+๏” f51d; church
+๏„‘ f111; circle
+๏‡Ž f1ce; circle-notch
+๏™ f64f; city
+๏Ÿฒ f7f2; clinic-medical
+๏Œจ f328; clipboard
+๏‘ฌ f46c; clipboard-check
+๏‘ญ f46d; clipboard-list
+๏€— f017; clock
+๏‰ f24d; clone
+๏ˆŠ f20a; closed-captioning
+๏ƒ‚ f0c2; cloud
+๏ށ f381; cloud-download-alt
+๏œป f73b; cloud-meatball
+๏›ƒ f6c3; cloud-moon
+๏œผ f73c; cloud-moon-rain
+๏œฝ f73d; cloud-rain
+๏€ f740; cloud-showers-heavy
+๏›„ f6c4; cloud-sun
+๏ƒ f743; cloud-sun-rain
+๏Ž‚ f382; cloud-upload-alt
+๎ฝ e07d; cloudflar
+๏Žƒ f383; cloudscale
+๏Ž„ f384; cloudsmith
+๏Ž… f385; cloudversify
+๏•ก f561; cocktail
+๏„ก f121; code
+๏„ฆ f126; code-branch
+๏‡‹ f1cb; codepen
+๏Š„ f284; codiepie
+๏ƒด f0f4; coffee
+๏€“ f013; cog
+๏‚… f085; cogs
+๏”ž f51e; coins
+๏ƒ› f0db; columns
+๏ต f075; comment
+๏‰บ f27a; comment-alt
+๏™‘ f651; comment-dollar
+๏’ญ f4ad; comment-dots
+๏Ÿต f7f5; comment-medical
+๏’ณ f4b3; comment-slash
+๏‚† f086; comments
+๏™“ f653; comments-dollar
+๏”Ÿ f51f; compact-disc
+๏…Ž f14e; compass
+๏ฆ f066; compress
+๏ข f422; compress-alt
+๏žŒ f78c; compress-arrows-alt
+๏•ข f562; concierge-bell
+๏ž f78d; confluence
+๏ˆŽ f20e; connectdevelop
+๏‰ญ f26d; contao
+๏•ฃ f563; cookie
+๏•ค f564; cookie-bite
+๏ƒ… f0c5; copy
+๏‡น f1f9; copyright
+๏ขž f89e; cotton-bureau
+๏’ธ f4b8; couch
+๏Žˆ f388; cpanel
+๏‰ž f25e; creative-commons
+๏“ง f4e7; creative-commons-by
+๏“จ f4e8; creative-commons-nc
+๏“ฉ f4e9; creative-commons-nc-eu
+๏“ช f4ea; creative-commons-nc-jp
+๏“ซ f4eb; creative-commons-nd
+๏“ฌ f4ec; creative-commons-pd
+๏“ญ f4ed; creative-commons-pd-alt
+๏“ฎ f4ee; creative-commons-remix
+๏“ฏ f4ef; creative-commons-sa
+๏“ฐ f4f0; creative-commons-sampling
+๏“ฑ f4f1; creative-commons-sampling-plus
+๏“ฒ f4f2; creative-commons-share
+๏“ณ f4f3; creative-commons-zero
+๏‚ f09d; credit-card
+๏›‰ f6c9; critical-role
+๏„ฅ f125; crop
+๏•ฅ f565; crop-alt
+๏™” f654; cross
+๏› f05b; crosshairs
+๏”  f520; crow
+๏”ก f521; crown
+๏Ÿท f7f7; crutch
+๏„ผ f13c; css3
+๏Ž‹ f38b; css3-alt
+๏†ฒ f1b2; cube
+๏†ณ f1b3; cubes
+๏ƒ„ f0c4; cut
+๏ŽŒ f38c; cuttlefish
+๏Ž f38d; d-and-d
+๏›Š f6ca; d-and-d-beyond
+๎’ e052; dailymotio
+๏ˆ f210; dashcube
+๏‡€ f1c0; database
+๏Šค f2a4; deaf
+๎ท e077; deeze
+๏†ฅ f1a5; delicious
+๏‡ f747; democrat
+๏ŽŽ f38e; deploydog
+๏Ž f38f; deskpro
+๏„ˆ f108; desktop
+๏›Œ f6cc; dev
+๏†ฝ f1bd; deviantart
+๏™• f655; dharmachakra
+๏ž f790; dhl
+๏‘ฐ f470; diagnoses
+๏ž‘ f791; diaspora
+๏”ข f522; dice
+๏› f6cf; dice-d20
+๏›‘ f6d1; dice-d6
+๏”ฃ f523; dice-five
+๏”ค f524; dice-four
+๏”ฅ f525; dice-one
+๏”ฆ f526; dice-six
+๏”ง f527; dice-three
+๏”จ f528; dice-two
+๏†ฆ f1a6; digg
+๏Ž‘ f391; digital-ocean
+๏•ฆ f566; digital-tachograph
+๏—ซ f5eb; directions
+๏Ž’ f392; discord
+๏Ž“ f393; discourse
+๏Ÿบ f7fa; disease
+๏”ฉ f529; divide
+๏•ง f567; dizzy
+๏‘ฑ f471; dna
+๏Ž” f394; dochub
+๏Ž• f395; docker
+๏›“ f6d3; dog
+๏…• f155; dollar-sign
+๏‘ฒ f472; dolly
+๏‘ด f474; dolly-flatbed
+๏’น f4b9; donate
+๏”ช f52a; door-closed
+๏”ซ f52b; door-open
+๏†’ f192; dot-circle
+๏’บ f4ba; dove
+๏€™ f019; download
+๏Ž– f396; draft2digital
+๏•จ f568; drafting-compass
+๏›• f6d5; dragon
+๏—ฎ f5ee; draw-polygon
+๏…ฝ f17d; dribbble
+๏Ž— f397; dribbble-square
+๏…ซ f16b; dropbox
+๏•ฉ f569; drum
+๏•ช f56a; drum-steelpan
+๏›— f6d7; drumstick-bite
+๏†ฉ f1a9; drupal
+๏‘‹ f44b; dumbbell
+๏ž“ f793; dumpster
+๏ž” f794; dumpster-fire
+๏›™ f6d9; dungeon
+๏Ž™ f399; dyalog
+๏Žš f39a; earlybirds
+๏“ด f4f4; ebay
+๏Š‚ f282; edge
+๎ธ e078; edge-legac
+๏„ f044; edit
+๏Ÿป f7fb; egg
+๏’ f052; eject
+๏ฐ f430; elementor
+๏… f141; ellipsis-h
+๏…‚ f142; ellipsis-v
+๏—ฑ f5f1; ello
+๏ฃ f423; ember
+๏‡‘ f1d1; empire
+๏ƒ  f0e0; envelope
+๏Šถ f2b6; envelope-open
+๏™˜ f658; envelope-open-text
+๏†™ f199; envelope-square
+๏Š™ f299; envira
+๏”ฌ f52c; equals
+๏„ญ f12d; eraser
+๏Ž f39d; erlang
+๏ฎ f42e; ethereum
+๏ž– f796; ethernet
+๏‹— f2d7; etsy
+๏…“ f153; euro-sign
+๏ น f839; evernote
+๏ข f362; exchange-alt
+๏„ช f12a; exclamation
+๏ช f06a; exclamation-circle
+๏ฑ f071; exclamation-triangle
+๏ฅ f065; expand
+๏ค f424; expand-alt
+๏Œž f31e; expand-arrows-alt
+๏ˆพ f23e; expeditedssl
+๏ f35d; external-link-alt
+๏  f360; external-link-square-alt
+๏ฎ f06e; eye
+๏‡ป f1fb; eye-dropper
+๏ฐ f070; eye-slash
+๏‚š f09a;; facebook
+๏Žž f39e;; facebook-f
+๏ŽŸ f39f;; facebook-messenger
+๏‚‚ f082;; facebook-square
+๏กฃ f863;; fan
+๏›œ f6dc;; fantasy-flight-games
+๏‰ f049;; fast-backward
+๏ f050;; fast-forward
+๎€… e005;; fauce
+๏†ฌ f1ac;; fax
+๏”ญ f52d;; feather
+๏•ซ f56b;; feather-alt
+๏ž— f797;; fedex
+๏ž˜ f798;; fedora
+๏†‚ f182;; female
+๏ƒป f0fb;; fighter-jet
+๏ž™ f799;; figma
+๏…› f15b;; file
+๏…œ f15c;; file-alt
+๏‡† f1c6;; file-archive
+๏‡‡ f1c7;; file-audio
+๏‡‰ f1c9;; file-code
+๏•ฌ f56c;; file-contract
+๏› f6dd;; file-csv
+๏•ญ f56d;; file-download
+๏‡ƒ f1c3;; file-excel
+๏•ฎ f56e;; file-export
+๏‡… f1c5;; file-image
+๏•ฏ f56f;; file-import
+๏•ฐ f570;; file-invoice
+๏•ฑ f571;; file-invoice-dollar
+๏‘ท f477;; file-medical
+๏‘ธ f478;; file-medical-alt
+๏‡ f1c1;; file-pdf
+๏‡„ f1c4;; file-powerpoint
+๏•ฒ f572;; file-prescription
+๏•ณ f573;; file-signature
+๏•ด f574;; file-upload
+๏‡ˆ f1c8;; file-video
+๏‡‚ f1c2;; file-word
+๏•ต f575;; fill
+๏•ถ f576;; fill-drip
+๏€ˆ f008;; film
+๏‚ฐ f0b0;; filter
+๏•ท f577;; fingerprint
+๏ญ f06d;; fire
+๏Ÿค f7e4;; fire-alt
+๏„ด f134;; fire-extinguisher
+๏‰ฉ f269;; firefox
+๎€‡ e007;; firefox-browse
+๏‘น f479;; first-aid
+๏Šฐ f2b0;; first-order
+๏”Š f50a;; first-order-alt
+๏Žก f3a1;; firstdraft
+๏•ธ f578;; fish
+๏›ž f6de;; fist-raised
+๏€ค f024;; flag
+๏„ž f11e;; flag-checkered
+๏ f74d;; flag-usa
+๏ƒƒ f0c3;; flask
+๏…ฎ f16e;; flickr
+๏‘ f44d;; flipboard
+๏•น f579;; flushed
+๏— f417;; fly
+๏ป f07b;; folder
+๏™ f65d;; folder-minus
+๏ผ f07c;; folder-open
+๏™ž f65e;; folder-plus
+๏€ฑ f031;; font
+๏Šด f2b4;; font-awesome
+๏œ f35c;; font-awesome-alt
+๏ฅ f425;; font-awesome-flag
+๏Š€ f280;; fonticons
+๏Žข f3a2;; fonticons-fi
+๏‘Ž f44e;; football-ball
+๏І f286;; fort-awesome
+๏Žฃ f3a3;; fort-awesome-alt
+๏ˆ‘ f211;; forumbee
+๏Ž f04e;; forward
+๏†€ f180;; foursquare
+๏‹… f2c5;; free-code-camp
+๏Žค f3a4;; freebsd
+๏”ฎ f52e;; frog
+๏„™ f119;; frown
+๏•บ f57a;; frown-open
+๏”‹ f50b;; fulcrum
+๏™ข f662;; funnel-dollar
+๏‡ฃ f1e3;; futbol
+๏”Œ f50c; galactic-republic
+๏” f50d; galactic-senate
+๏„› f11b; gamepad
+๏”ฏ f52f; gas-pump
+๏ƒฃ f0e3; gavel
+๏Žฅ f3a5; gem
+๏ˆญ f22d; genderless
+๏‰ฅ f265; get-pocket
+๏‰  f260; gg
+๏‰ก f261; gg-circle
+๏›ข f6e2; ghost
+๏ซ f06b; gift
+๏žœ f79c; gifts
+๏‡“ f1d3; git
+๏ก f841; git-alt
+๏‡’ f1d2; git-square
+๏‚› f09b; github
+๏„“ f113; github-alt
+๏‚’ f092; github-square
+๏Žฆ f3a6; gitkraken
+๏Š– f296; gitlab
+๏ฆ f426; gitter
+๏žŸ f79f; glass-cheers
+๏€€ f000; glass-martini
+๏•ป f57b; glass-martini-alt
+๏ž  f7a0; glass-whiskey
+๏”ฐ f530; glasses
+๏Šฅ f2a5; glide
+๏Šฆ f2a6; glide-g
+๏‚ฌ f0ac; globe
+๏•ผ f57c; globe-africa
+๏•ฝ f57d; globe-americas
+๏•พ f57e; globe-asia
+๏žข f7a2; globe-europe
+๏Žง f3a7; gofore
+๏‘ f450; golf-ball
+๏Žจ f3a8; goodreads
+๏Žฉ f3a9; goodreads-g
+๏†  f1a0; google
+๏Žช f3aa; google-drive
+๎น e079; google-pa
+๏Žซ f3ab; google-play
+๏Šณ f2b3; google-plus
+๏ƒ• f0d5; google-plus-g
+๏ƒ” f0d4; google-plus-square
+๏‡ฎ f1ee; google-wallet
+๏™ค f664; gopuram
+๏† f19d; graduation-cap
+๏†„ f184; gratipay
+๏‹– f2d6; grav
+๏”ฑ f531; greater-than
+๏”ฒ f532; greater-than-equal
+๏•ฟ f57f; grimace
+๏–€ f580; grin
+๏– f581; grin-alt
+๏–‚ f582; grin-beam
+๏–ƒ f583; grin-beam-sweat
+๏–„ f584; grin-hearts
+๏–… f585; grin-squint
+๏–† f586; grin-squint-tears
+๏–‡ f587; grin-stars
+๏–ˆ f588; grin-tears
+๏–‰ f589; grin-tongue
+๏–Š f58a; grin-tongue-squint
+๏–‹ f58b; grin-tongue-wink
+๏–Œ f58c; grin-wink
+๏– f58d; grip-horizontal
+๏žค f7a4; grip-lines
+๏žฅ f7a5; grip-lines-vertical
+๏–Ž f58e; grip-vertical
+๏Žฌ f3ac; gripfire
+๏Žญ f3ad; grunt
+๎พ e07e; guilde
+๏žฆ f7a6; guitar
+๏Žฎ f3ae; gulp
+๏ƒฝ f0fd; h-square
+๏‡” f1d4; hacker-news
+๏Žฏ f3af; hacker-news-square
+๏—ท f5f7; hackerrank
+๏ … f805; hamburger
+๏›ฃ f6e3; hammer
+๏™ฅ f665; hamsa
+๏’ฝ f4bd; hand-holding
+๏’พ f4be; hand-holding-heart
+๎œ e05c; hand-holding-medica
+๏“€ f4c0; hand-holding-usd
+๏“ f4c1; hand-holding-water
+๏‰˜ f258; hand-lizard
+๏ † f806; hand-middle-finger
+๏‰– f256; hand-paper
+๏‰› f25b; hand-peace
+๏‚ง f0a7; hand-point-down
+๏‚ฅ f0a5; hand-point-left
+๏‚ค f0a4; hand-point-right
+๏‚ฆ f0a6; hand-point-up
+๏‰š f25a; hand-pointer
+๏‰• f255; hand-rock
+๏‰— f257; hand-scissors
+๎ e05d; hand-sparkle
+๏‰™ f259; hand-spock
+๏“‚ f4c2; hands
+๏“„ f4c4; hands-helping
+๎ž e05e; hands-was
+๏Šต f2b5; handshake
+๎Ÿ e05f; handshake-alt-slas
+๎  e060; handshake-slas
+๏›ฆ f6e6; hanukiah
+๏ ‡ f807; hard-hat
+๏Š’ f292; hashtag
+๏ฃ€ f8c0; hat-cowboy
+๏ฃ f8c1; hat-cowboy-side
+๏›จ f6e8; hat-wizard
+๏‚  f0a0; hdd
+๎ก e061; head-side-coug
+๎ข e062; head-side-cough-slas
+๎ฃ e063; head-side-mas
+๎ค e064; head-side-viru
+๏‡œ f1dc; heading
+๏€ฅ f025; headphones
+๏– f58f; headphones-alt
+๏– f590; headset
+๏€„ f004; heart
+๏žฉ f7a9; heart-broken
+๏ˆž f21e; heartbeat
+๏”ณ f533; helicopter
+๏–‘ f591; highlighter
+๏›ฌ f6ec; hiking
+๏›ญ f6ed; hippo
+๏‘’ f452; hips
+๏Žฐ f3b0; hire-a-helper
+๏‡š f1da; history
+๎ฟ e07f; hiv
+๏‘“ f453; hockey-puck
+๏žช f7aa; holly-berry
+๏€• f015; home
+๏ง f427; hooli
+๏–’ f592; hornbill
+๏›ฐ f6f0; horse
+๏žซ f7ab; horse-head
+๏ƒธ f0f8; hospital
+๏‘ฝ f47d; hospital-alt
+๏‘พ f47e; hospital-symbol
+๏  f80d; hospital-user
+๏–“ f593; hot-tub
+๏  f80f; hotdog
+๏–” f594; hotel
+๏Žฑ f3b1; hotjar
+๏‰” f254; hourglass
+๏‰“ f253; hourglass-end
+๏‰’ f252; hourglass-half
+๏‰‘ f251; hourglass-start
+๏›ฑ f6f1; house-damage
+๎ฅ e065; house-use
+๏‰ผ f27c; houzz
+๏›ฒ f6f2; hryvnia
+๏„ป f13b; html5
+๏Žฒ f3b2; hubspot
+๏‰† f246; i-cursor
+๏  f810; ice-cream
+๏žญ f7ad; icicles
+๏กญ f86d; icons
+๏‹ f2c1; id-badge
+๏‹‚ f2c2; id-card
+๏‘ฟ f47f; id-card-alt
+๎€“ e013; idea
+๏žฎ f7ae; igloo
+๏€พ f03e; image
+๏Œ‚ f302; images
+๏‹˜ f2d8; imdb
+๏€œ f01c; inbox
+๏€ผ f03c; indent
+๏‰ต f275; industry
+๏”ด f534; infinity
+๏„ฉ f129; info
+๏š f05a; info-circle
+๎‚€ e080; innosof
+๏…ญ f16d; instagram
+๎• e055; instagram-squar
+๎‚ e081; instalo
+๏žฏ f7af; intercom
+๏‰ซ f26b; internet-explorer
+๏žฐ f7b0; invision
+๏ˆˆ f208; ioxhost
+๏€ณ f033; italic
+๏ บ f83a; itch-io
+๏Žด f3b4; itunes
+๏Žต f3b5; itunes-note
+๏“ค f4e4; java
+๏™ฉ f669; jedi
+๏”Ž f50e; jedi-order
+๏Žถ f3b6; jenkins
+๏žฑ f7b1; jira
+๏Žท f3b7; joget
+๏–• f595; joint
+๏†ช f1aa; joomla
+๏™ช f66a; journal-whills
+๏Žธ f3b8; js
+๏Žน f3b9; js-square
+๏‡Œ f1cc; jsfiddle
+๏™ซ f66b; kaaba
+๏—บ f5fa; kaggle
+๏‚„ f084; key
+๏“ต f4f5; keybase
+๏„œ f11c; keyboard
+๏Žบ f3ba; keycdn
+๏™ญ f66d; khanda
+๏Žป f3bb; kickstarter
+๏Žผ f3bc; kickstarter-k
+๏–– f596; kiss
+๏–— f597; kiss-beam
+๏–˜ f598; kiss-wink-heart
+๏”ต f535; kiwi-bird
+๏ฏ f42f; korvue
+๏™ฏ f66f; landmark
+๏†ซ f1ab; language
+๏„‰ f109; laptop
+๏—ผ f5fc; laptop-code
+๎ฆ e066; laptop-hous
+๏ ’ f812; laptop-medical
+๏Žฝ f3bd; laravel
+๏ˆ‚ f202; lastfm
+๏ˆƒ f203; lastfm-square
+๏–™ f599; laugh
+๏–š f59a; laugh-beam
+๏–› f59b; laugh-squint
+๏–œ f59c; laugh-wink
+๏—ฝ f5fd; layer-group
+๏ฌ f06c; leaf
+๏ˆ’ f212; leanpub
+๏‚” f094; lemon
+๏ f41d; less
+๏”ถ f536; less-than
+๏”ท f537; less-than-equal
+๏Žพ f3be; level-down-alt
+๏Žฟ f3bf; level-up-alt
+๏‡ f1cd; life-ring
+๏ƒซ f0eb; lightbulb
+๏€ f3c0; line
+๏ƒ f0c1; link
+๏‚Œ f08c; linkedin
+๏ƒก f0e1; linkedin-in
+๏Šธ f2b8; linode
+๏…ผ f17c; linux
+๏†• f195; lira-sign
+๏€บ f03a; list
+๏€ข f022; list-alt
+๏ƒ‹ f0cb; list-ol
+๏ƒŠ f0ca; list-ul
+๏„ค f124; location-arrow
+๏€ฃ f023; lock
+๏ f3c1; lock-open
+๏Œ‰ f309; long-arrow-alt-down
+๏ŒŠ f30a; long-arrow-alt-left
+๏Œ‹ f30b; long-arrow-alt-right
+๏ŒŒ f30c; long-arrow-alt-up
+๏Šจ f2a8; low-vision
+๏– f59d; luggage-cart
+๏˜„ f604; lungs
+๎ง e067; lungs-viru
+๏ƒ f3c3; lyft
+๏„ f3c4; magento
+๏ƒ f0d0; magic
+๏ถ f076; magnet
+๏™ด f674; mail-bulk
+๏–ž f59e; mailchimp
+๏†ƒ f183; male
+๏” f50f; mandalorian
+๏‰น f279; map
+๏–Ÿ f59f; map-marked
+๏–  f5a0; map-marked-alt
+๏ f041; map-marker
+๏… f3c5; map-marker-alt
+๏‰ถ f276; map-pin
+๏‰ท f277; map-signs
+๏˜ f60f; markdown
+๏–ก f5a1; marker
+๏ˆข f222; mars
+๏ˆง f227; mars-double
+๏ˆฉ f229; mars-stroke
+๏ˆซ f22b; mars-stroke-h
+๏ˆช f22a; mars-stroke-v
+๏›บ f6fa; mask
+๏“ถ f4f6; mastodon
+๏„ถ f136; maxcdn
+๏ฃŠ f8ca; mdb
+๏–ข f5a2; medal
+๏† f3c6; medapps
+๏ˆบ f23a; medium
+๏‡ f3c7; medium-m
+๏ƒบ f0fa; medkit
+๏ˆ f3c8; medrt
+๏‹  f2e0; meetup
+๏–ฃ f5a3; megaport
+๏„š f11a; meh
+๏–ค f5a4; meh-blank
+๏–ฅ f5a5; meh-rolling-eyes
+๏”ธ f538; memory
+๏žณ f7b3; mendeley
+๏™ถ f676; menorah
+๏ˆฃ f223; mercury
+๏“ f753; meteor
+๎€š e01a; microblo
+๏‹› f2db; microchip
+๏„ฐ f130; microphone
+๏‰ f3c9; microphone-alt
+๏”น f539; microphone-alt-slash
+๏„ฑ f131; microphone-slash
+๏˜ f610; microscope
+๏Š f3ca; microsoft
+๏จ f068; minus
+๏– f056; minus-circle
+๏…† f146; minus-square
+๏žต f7b5; mitten
+๏‹ f3cb; mix
+๏Љ f289; mixcloud
+๎– e056; mixe
+๏Œ f3cc; mizuni
+๏„‹ f10b; mobile
+๏ f3cd; mobile-alt
+๏Š… f285; modx
+๏ f3d0; monero
+๏ƒ– f0d6; money-bill
+๏‘ f3d1; money-bill-alt
+๏”บ f53a; money-bill-wave
+๏”ป f53b; money-bill-wave-alt
+๏”ผ f53c; money-check
+๏”ฝ f53d; money-check-alt
+๏–ฆ f5a6; monument
+๏†† f186; moon
+๏–ง f5a7; mortar-pestle
+๏™ธ f678; mosque
+๏ˆœ f21c; motorcycle
+๏›ผ f6fc; mountain
+๏ฃŒ f8cc; mouse
+๏‰… f245; mouse-pointer
+๏žถ f7b6; mug-hot
+๏€ f001; music
+๏’ f3d2; napster
+๏˜’ f612; neos
+๏›ฟ f6ff; network-wired
+๏ˆฌ f22c; neuter
+๏‡ช f1ea; newspaper
+๏–จ f5a8; nimblr
+๏™ f419; node
+๏“ f3d3; node-js
+๏”พ f53e; not-equal
+๏’ f481; notes-medical
+๏” f3d4; npm
+๏• f3d5; ns8
+๏– f3d6; nutritionix
+๏‰‡ f247; object-group
+๏‰ˆ f248; object-ungroup
+๎‚‚ e082; octopus-deplo
+๏‰ฃ f263; odnoklassniki
+๏‰ค f264; odnoklassniki-square
+๏˜“ f613; oil-can
+๏” f510; old-republic
+๏™น f679; om
+๏ˆฝ f23d; opencart
+๏†› f19b; openid
+๏‰ช f26a; opera
+๏ˆผ f23c; optin-monster
+๏ฃ’ f8d2; orcid
+๏š f41a; osi
+๏œ€ f700; otter
+๏€ป f03b; outdent
+๏— f3d7; page4
+๏†Œ f18c; pagelines
+๏ • f815; pager
+๏‡ผ f1fc; paint-brush
+๏–ช f5aa; paint-roller
+๏”ฟ f53f; palette
+๏˜ f3d8; palfed
+๏’‚ f482; pallet
+๏‡˜ f1d8; paper-plane
+๏ƒ† f0c6; paperclip
+๏“ f4cd; parachute-box
+๏‡ f1dd; paragraph
+๏•€ f540; parking
+๏–ซ f5ab; passport
+๏™ป f67b; pastafarianism
+๏ƒช f0ea; paste
+๏™ f3d9; patreon
+๏Œ f04c; pause
+๏Š‹ f28b; pause-circle
+๏†ฐ f1b0; paw
+๏‡ญ f1ed; paypal
+๏™ผ f67c; peace
+๏Œ„ f304; pen
+๏Œ… f305; pen-alt
+๏–ฌ f5ac; pen-fancy
+๏–ญ f5ad; pen-nib
+๏…‹ f14b; pen-square
+๏Œƒ f303; pencil-alt
+๏–ฎ f5ae; pencil-ruler
+๏œ„ f704; penny-arcade
+๎จ e068; people-arrow
+๏“Ž f4ce; people-carry
+๏ – f816; pepper-hot
+๎‚ƒ e083; perbyt
+๏Š• f295; percent
+๏• f541; percentage
+๏š f3da; periscope
+๏– f756; person-booth
+๏› f3db; phabricator
+๏œ f3dc; phoenix-framework
+๏”‘ f511; phoenix-squadron
+๏‚• f095; phone
+๏กน f879; phone-alt
+๏ f3dd; phone-slash
+๏‚˜ f098; phone-square
+๏กป f87b; phone-square-alt
+๏Š  f2a0; phone-volume
+๏กผ f87c; photo-video
+๏‘— f457; php
+๏Šฎ f2ae; pied-piper
+๏†จ f1a8; pied-piper-alt
+๏“ฅ f4e5; pied-piper-hat
+๏†ง f1a7; pied-piper-pp
+๎€ž e01e; pied-piper-squar
+๏““ f4d3; piggy-bank
+๏’„ f484; pills
+๏ƒ’ f0d2; pinterest
+๏ˆฑ f231; pinterest-p
+๏ƒ“ f0d3; pinterest-square
+๏ ˜ f818; pizza-slice
+๏™ฟ f67f; place-of-worship
+๏ฒ f072; plane
+๏–ฏ f5af; plane-arrival
+๏–ฐ f5b0; plane-departure
+๎ฉ e069; plane-slas
+๏‹ f04b; play
+๏…„ f144; play-circle
+๏Ÿ f3df; playstation
+๏‡ฆ f1e6; plug
+๏ง f067; plus
+๏• f055; plus-circle
+๏ƒพ f0fe; plus-square
+๏‹Ž f2ce; podcast
+๏š f681; poll
+๏š‚ f682; poll-h
+๏‹พ f2fe; poo
+๏š f75a; poo-storm
+๏˜™ f619; poop
+๏  f3e0; portrait
+๏…” f154; pound-sign
+๏€‘ f011; power-off
+๏šƒ f683; pray
+๏š„ f684; praying-hands
+๏–ฑ f5b1; prescription
+๏’… f485; prescription-bottle
+๏’† f486; prescription-bottle-alt
+๏€ฏ f02f; print
+๏’‡ f487; procedures
+๏Šˆ f288; product-hunt
+๏•‚ f542; project-diagram
+๎ช e06a; pump-medica
+๎ซ e06b; pump-soa
+๏ก f3e1; pushed
+๏„ฎ f12e; puzzle-piece
+๏ข f3e2; python
+๏‡– f1d6; qq
+๏€ฉ f029; qrcode
+๏„จ f128; question
+๏™ f059; question-circle
+๏‘˜ f458; quidditch
+๏‘™ f459; quinscape
+๏‹„ f2c4; quora
+๏„ f10d; quote-left
+๏„Ž f10e; quote-right
+๏š‡ f687; quran
+๏“ท f4f7; r-project
+๏žน f7b9; radiation
+๏žบ f7ba; radiation-alt
+๏› f75b; rainbow
+๏ด f074; random
+๏žป f7bb; raspberry-pi
+๏‹™ f2d9; ravelry
+๏› f41b; react
+๏ f75d; reacteurope
+๏“• f4d5; readme
+๏‡ f1d0; rebel
+๏•ƒ f543; receipt
+๏ฃ™ f8d9; record-vinyl
+๏†ธ f1b8; recycle
+๏ฃ f3e3; red-river
+๏†ก f1a1; reddit
+๏Ё f281; reddit-alien
+๏†ข f1a2; reddit-square
+๏žผ f7bc; redhat
+๏€ž f01e; redo
+๏‹น f2f9; redo-alt
+๏‰ f25d; registered
+๏กฝ f87d; remove-format
+๏†‹ f18b; renren
+๏ฅ f3e5; reply
+๏„ข f122; reply-all
+๏ฆ f3e6; replyd
+๏ž f75e; republican
+๏“ธ f4f8; researchgate
+๏ง f3e7; resolving
+๏žฝ f7bd; restroom
+๏น f079; retweet
+๏–ฒ f5b2; rev
+๏“– f4d6; ribbon
+๏œ‹ f70b; ring
+๏€˜ f018; road
+๏•„ f544; robot
+๏„ต f135; rocket
+๏จ f3e8; rocketchat
+๏ฉ f3e9; rockrms
+๏“— f4d7; route
+๏‚ž f09e; rss
+๏…ƒ f143; rss-square
+๏…˜ f158; ruble-sign
+๏•… f545; ruler
+๏•† f546; ruler-combined
+๏•‡ f547; ruler-horizontal
+๏•ˆ f548; ruler-vertical
+๏œŒ f70c; running
+๏…– f156; rupee-sign
+๎บ e07a; rus
+๏–ณ f5b3; sad-cry
+๏–ด f5b4; sad-tear
+๏‰ง f267; safari
+๏ ป f83b; salesforce
+๏ž f41e; sass
+๏žฟ f7bf; satellite
+๏Ÿ€ f7c0; satellite-dish
+๏ƒ‡ f0c7; save
+๏ช f3ea; schlix
+๏•‰ f549; school
+๏•Š f54a; screwdriver
+๏ŠŠ f28a; scribd
+๏œŽ f70e; scroll
+๏Ÿ‚ f7c2; sd-card
+๏€‚ f002; search
+๏šˆ f688; search-dollar
+๏š‰ f689; search-location
+๏€ f010; search-minus
+๏€Ž f00e; search-plus
+๏ซ f3eb; searchengin
+๏“˜ f4d8; seedling
+๏‹š f2da; sellcast
+๏ˆ“ f213; sellsy
+๏ˆณ f233; server
+๏ฌ f3ec; servicestack
+๏˜Ÿ f61f; shapes
+๏ค f064; share
+๏‡  f1e0; share-alt
+๏‡ก f1e1; share-alt-square
+๏… f14d; share-square
+๏ˆ‹ f20b; shekel-sign
+๏ญ f3ed; shield-alt
+๎ฌ e06c; shield-viru
+๏ˆš f21a; ship
+๏’‹ f48b; shipping-fast
+๏ˆ” f214; shirtsinbulk
+๏•‹ f54b; shoe-prints
+๎— e057; shopif
+๏А f290; shopping-bag
+๏Š‘ f291; shopping-basket
+๏บ f07a; shopping-cart
+๏–ต f5b5; shopware
+๏‹Œ f2cc; shower
+๏–ถ f5b6; shuttle-van
+๏“™ f4d9; sign
+๏‹ถ f2f6; sign-in-alt
+๏Šง f2a7; sign-language
+๏‹ต f2f5; sign-out-alt
+๏€’ f012; signal
+๏–ท f5b7; signature
+๏Ÿ„ f7c4; sim-card
+๏ˆ• f215; simplybuilt
+๎ญ e06d; sin
+๏ฎ f3ee; sistrix
+๏ƒจ f0e8; sitemap
+๏”’ f512; sith
+๏Ÿ… f7c5; skating
+๏Ÿ† f7c6; sketch
+๏Ÿ‰ f7c9; skiing
+๏ŸŠ f7ca; skiing-nordic
+๏•Œ f54c; skull
+๏œ” f714; skull-crossbones
+๏ˆ– f216; skyatlas
+๏…พ f17e; skype
+๏†˜ f198; slack
+๏ฏ f3ef; slack-hash
+๏œ• f715; slash
+๏ŸŒ f7cc; sleigh
+๏‡ž f1de; sliders-h
+๏‡ง f1e7; slideshare
+๏„˜ f118; smile
+๏–ธ f5b8; smile-beam
+๏“š f4da; smile-wink
+๏Ÿ f75f; smog
+๏’ f48d; smoking
+๏• f54d; smoking-ban
+๏Ÿ f7cd; sms
+๏Šซ f2ab; snapchat
+๏Šฌ f2ac; snapchat-ghost
+๏Šญ f2ad; snapchat-square
+๏ŸŽ f7ce; snowboarding
+๏‹œ f2dc; snowflake
+๏Ÿ f7d0; snowman
+๏Ÿ’ f7d2; snowplow
+๎ฎ e06e; soa
+๏š– f696; socks
+๏–บ f5ba; solar-panel
+๏ƒœ f0dc; sort
+๏… f15d; sort-alpha-down
+๏ข f881; sort-alpha-down-alt
+๏…ž f15e; sort-alpha-up
+๏ข‚ f882; sort-alpha-up-alt
+๏…  f160; sort-amount-down
+๏ข„ f884; sort-amount-down-alt
+๏…ก f161; sort-amount-up
+๏ข… f885; sort-amount-up-alt
+๏ƒ f0dd; sort-down
+๏…ข f162; sort-numeric-down
+๏ข† f886; sort-numeric-down-alt
+๏…ฃ f163; sort-numeric-up
+๏ข‡ f887; sort-numeric-up-alt
+๏ƒž f0de; sort-up
+๏†พ f1be; soundcloud
+๏Ÿ“ f7d3; sourcetree
+๏–ป f5bb; spa
+๏†— f197; space-shuttle
+๏ณ f3f3; speakap
+๏ ผ f83c; speaker-deck
+๏ข‘ f891; spell-check
+๏œ— f717; spider
+๏„ f110; spinner
+๏–ผ f5bc; splotch
+๏†ผ f1bc; spotify
+๏–ฝ f5bd; spray-can
+๏ƒˆ f0c8; square
+๏‘œ f45c; square-full
+๏š˜ f698; square-root-alt
+๏–พ f5be; squarespace
+๏† f18d; stack-exchange
+๏…ฌ f16c; stack-overflow
+๏ก‚ f842; stackpath
+๏–ฟ f5bf; stamp
+๏€… f005; star
+๏š™ f699; star-and-crescent
+๏‚‰ f089; star-half
+๏—€ f5c0; star-half-alt
+๏šš f69a; star-of-david
+๏˜ก f621; star-of-life
+๏ต f3f5; staylinked
+๏†ถ f1b6; steam
+๏†ท f1b7; steam-square
+๏ถ f3f6; steam-symbol
+๏ˆ f048; step-backward
+๏‘ f051; step-forward
+๏ƒฑ f0f1; stethoscope
+๏ท f3f7; sticker-mule
+๏‰‰ f249; sticky-note
+๏ f04d; stop
+๏Š f28d; stop-circle
+๏‹ฒ f2f2; stopwatch
+๎ฏ e06f; stopwatch-2
+๏•Ž f54e; store
+๏• f54f; store-alt
+๎ฐ e070; store-alt-slas
+๎ฑ e071; store-slas
+๏จ f428; strava
+๏• f550; stream
+๏ˆ f21d; street-view
+๏ƒŒ f0cc; strikethrough
+๏ฉ f429; stripe
+๏ช f42a; stripe-s
+๏•‘ f551; stroopwafel
+๏ธ f3f8; studiovinari
+๏†ค f1a4; stumbleupon
+๏†ฃ f1a3; stumbleupon-circle
+๏„ฌ f12c; subscript
+๏ˆน f239; subway
+๏ƒฒ f0f2; suitcase
+๏— f5c1; suitcase-rolling
+๏†… f185; sun
+๏‹ f2dd; superpowers
+๏„ซ f12b; superscript
+๏น f3f9; supple
+๏—‚ f5c2; surprise
+๏Ÿ– f7d6; suse
+๏—ƒ f5c3; swatchbook
+๏ฃก f8e1; swift
+๏—„ f5c4; swimmer
+๏—… f5c5; swimming-pool
+๏ ฝ f83d; symfony
+๏š› f69b; synagogue
+๏€ก f021; sync
+๏‹ฑ f2f1; sync-alt
+๏’Ž f48e; syringe
+๏ƒŽ f0ce; table
+๏‘ f45d; table-tennis
+๏„Š f10a; tablet
+๏บ f3fa; tablet-alt
+๏’ f490; tablets
+๏ฝ f3fd; tachometer-alt
+๏€ซ f02b; tag
+๏€ฌ f02c; tags
+๏“› f4db; tape
+๏‚ฎ f0ae; tasks
+๏†บ f1ba; taxi
+๏“น f4f9; teamspeak
+๏˜ฎ f62e; teeth
+๏˜ฏ f62f; teeth-open
+๏‹† f2c6; telegram
+๏พ f3fe; telegram-plane
+๏ฉ f769; temperature-high
+๏ซ f76b; temperature-low
+๏‡• f1d5; tencent-weibo
+๏Ÿ— f7d7; tenge
+๏„  f120; terminal
+๏€ด f034; text-height
+๏€ต f035; text-width
+๏€Š f00a; th
+๏€‰ f009; th-large
+๏€‹ f00b; th-list
+๏š f69d; the-red-yeti
+๏˜ฐ f630; theater-masks
+๏—† f5c6; themeco
+๏Šฒ f2b2; themeisle
+๏’‘ f491; thermometer
+๏‹‹ f2cb; thermometer-empty
+๏‹‡ f2c7; thermometer-full
+๏‹‰ f2c9; thermometer-half
+๏‹Š f2ca; thermometer-quarter
+๏‹ˆ f2c8; thermometer-three-quarters
+๏œฑ f731; think-peaks
+๏…ฅ f165; thumbs-down
+๏…ค f164; thumbs-up
+๏‚ f08d; thumbtack
+๏ฟ f3ff; ticket-alt
+๎ป e07b; tikto
+๏€ f00d; times
+๏— f057; times-circle
+๏ƒ f043; tint
+๏—‡ f5c7; tint-slash
+๏—ˆ f5c8; tired
+๏ˆ„ f204; toggle-off
+๏ˆ… f205; toggle-on
+๏Ÿ˜ f7d8; toilet
+๏œž f71e; toilet-paper
+๎ฒ e072; toilet-paper-slas
+๏•’ f552; toolbox
+๏Ÿ™ f7d9; tools
+๏—‰ f5c9; tooth
+๏š  f6a0; torah
+๏šก f6a1; torii-gate
+๏œข f722; tractor
+๏”“ f513; trade-federation
+๏‰œ f25c; trademark
+๏˜ท f637; traffic-light
+๎ e041; traile
+๏ˆธ f238; train
+๏Ÿš f7da; tram
+๏ˆค f224; transgender
+๏ˆฅ f225; transgender-alt
+๏‡ธ f1f8; trash
+๏‹ญ f2ed; trash-alt
+๏ ฉ f829; trash-restore
+๏ ช f82a; trash-restore-alt
+๏†ป f1bb; tree
+๏† f181; trello
+๏‚‘ f091; trophy
+๏ƒ‘ f0d1; truck
+๏“ž f4de; truck-loading
+๏˜ป f63b; truck-monster
+๏“Ÿ f4df; truck-moving
+๏˜ผ f63c; truck-pickup
+๏•“ f553; tshirt
+๏‡ค f1e4; tty
+๏…ณ f173; tumblr
+๏…ด f174; tumblr-square
+๏‰ฌ f26c; tv
+๏‡จ f1e8; twitch
+๏‚™ f099; twitter
+๏‚ f081; twitter-square
+๏ซ f42b; typo3
+๏‚ f402; uber
+๏ŸŸ f7df; ubuntu
+๏ƒ f403; uikit
+๏ฃจ f8e8; umbraco
+๏ƒฉ f0e9; umbrella
+๏—Š f5ca; umbrella-beach
+๎‚„ e084; uncharte
+๏ƒ f0cd; underline
+๏ƒข f0e2; undo
+๏‹ช f2ea; undo-alt
+๏„ f404; uniregistry
+๎‰ e049; unit
+๏Šš f29a; universal-access
+๏†œ f19c; university
+๏„ง f127; unlink
+๏‚œ f09c; unlock
+๏„พ f13e; unlock-alt
+๎ผ e07c; unsplas
+๏… f405; untappd
+๏‚“ f093; upload
+๏Ÿ  f7e0; ups
+๏Ї f287; usb
+๏€‡ f007; user
+๏† f406; user-alt
+๏“บ f4fa; user-alt-slash
+๏“ป f4fb; user-astronaut
+๏“ผ f4fc; user-check
+๏Šฝ f2bd; user-circle
+๏“ฝ f4fd; user-clock
+๏“พ f4fe; user-cog
+๏“ฟ f4ff; user-edit
+๏”€ f500; user-friends
+๏” f501; user-graduate
+๏œจ f728; user-injured
+๏”‚ f502; user-lock
+๏ƒฐ f0f0; user-md
+๏”ƒ f503; user-minus
+๏”„ f504; user-ninja
+๏ ฏ f82f; user-nurse
+๏ˆด f234; user-plus
+๏ˆ› f21b; user-secret
+๏”… f505; user-shield
+๏”† f506; user-slash
+๏”‡ f507; user-tag
+๏”ˆ f508; user-tie
+๏ˆต f235; user-times
+๏ƒ€ f0c0; users
+๏”‰ f509; users-cog
+๎ณ e073; users-slas
+๏Ÿก f7e1; usps
+๏‡ f407; ussunnah
+๏‹ฅ f2e5; utensil-spoon
+๏‹ง f2e7; utensils
+๏ˆ f408; vaadin
+๏—‹ f5cb; vector-square
+๏ˆก f221; venus
+๏ˆฆ f226; venus-double
+๏ˆจ f228; venus-mars
+๎‚… e085; ves
+๎‚† e086; vest-patche
+๏ˆท f237; viacoin
+๏Šฉ f2a9; viadeo
+๏Šช f2aa; viadeo-square
+๏’’ f492; vial
+๏’“ f493; vials
+๏‰ f409; viber
+๏€ฝ f03d; video
+๏“ข f4e2; video-slash
+๏šง f6a7; vihara
+๏Š f40a; vimeo
+๏†” f194; vimeo-square
+๏‰ฝ f27d; vimeo-v
+๏‡Š f1ca; vine
+๎ด e074; viru
+๎ต e075; virus-slas
+๎ถ e076; viruse
+๏†‰ f189; vk
+๏‹ f40b; vnv
+๏ข— f897; voicemail
+๏‘Ÿ f45f; volleyball-ball
+๏€ง f027; volume-down
+๏šฉ f6a9; volume-mute
+๏€ฆ f026; volume-off
+๏€จ f028; volume-up
+๏ฒ f772; vote-yea
+๏œฉ f729; vr-cardboard
+๏Ÿ f41f; vuejs
+๏•” f554; walking
+๏•• f555; wallet
+๏’” f494; warehouse
+๎‚‡ e087; watchman-monitorin
+๏ณ f773; water
+๏ พ f83e; wave-square
+๏ ฟ f83f; waze
+๏—Œ f5cc; weebly
+๏†Š f18a; weibo
+๏’– f496; weight
+๏— f5cd; weight-hanging
+๏‡— f1d7; weixin
+๏ˆฒ f232; whatsapp
+๏Œ f40c; whatsapp-square
+๏†“ f193; wheelchair
+๏ f40d; whmcs
+๏‡ซ f1eb; wifi
+๏‰ฆ f266; wikipedia-w
+๏œฎ f72e; wind
+๏ f410; window-close
+๏‹ f2d0; window-maximize
+๏‹‘ f2d1; window-minimize
+๏‹’ f2d2; window-restore
+๏…บ f17a; windows
+๏œฏ f72f; wine-bottle
+๏“ฃ f4e3; wine-glass
+๏—Ž f5ce; wine-glass-alt
+๏— f5cf; wix
+๏œฐ f730; wizards-of-the-coast
+๎‚ˆ e088; wod
+๏”” f514; wolf-pack-battalion
+๏…™ f159; won-sign
+๏†š f19a; wordpress
+๏‘ f411; wordpress-simple
+๏Š— f297; wpbeginner
+๏‹ž f2de; wpexplorer
+๏Š˜ f298; wpforms
+๏ค f3e4; wpressr
+๏‚ญ f0ad; wrench
+๏’— f497; x-ray
+๏’ f412; xbox
+๏…จ f168; xing
+๏…ฉ f169; xing-square
+๏ˆป f23b; y-combinator
+๏†ž f19e; yahoo
+๏ก€ f840; yammer
+๏“ f413; yandex
+๏” f414; yandex-international
+๏Ÿฃ f7e3; yarn
+๏‡ฉ f1e9; yelp
+๏…— f157; yen-sign
+๏šญ f6ad; yin-yang
+๏Šฑ f2b1; yoast
+๏…ง f167; youtube
+๏ฑ f431; youtube-square
+๏˜ฟ f63f; zhihu
diff --git a/.local/share/chars/unicode b/.local/share/chars/unicode
new file mode 100644
index 0000000..dfbc814
--- /dev/null
+++ b/.local/share/chars/unicode
Binary files differ