diff options
author | Vikas Kushwaha <dev@vikas.rocks> | 2024-11-21 13:30:52 +0530 |
---|---|---|
committer | Vikas Kushwaha <dev@vikas.rocks> | 2024-11-21 13:30:52 +0530 |
commit | 5c916d69d457101326803eb076a746060e3618cf (patch) | |
tree | d6fce3256eede1c1bf78fb6a1be75b9cc4b84cee /.local |
Moved from github
Diffstat (limited to '.local')
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' + [38;5;255m,_ ,_==โโ[0m + [38;5;255m, โโโโโ
โ
[48;5;240mโ
[48;5;20mโ[48;5;240mโ
ยพ[0m. [38;5;199m/ [38;5;20m/[0m + [38;5;255m[48;5;20mโ[0m[38;5;255m[48;5;199mโ[38;5;16m[48;5;255m<ยด [38;5;32m"[38;5;34mยป[38;5;255mโโ[48;5;32mโ[48;5;240m%[0m\ [38;5;199m/ [38;5;20m/ [38;5;45m/ [38;5;118m/[0m + [38;5;255m,[38;5;255m[48;5;240mโ
[38;5;16m[48;5;255m7" [38;5;160mยด[38;5;34m>[38;5;255m[48;5;39mโโ[38;5;199m[48;5;255mโ[0m[38;5;255m% [38;5;20m/ [38;5;118m/ [38;5;199m> [38;5;118m/ [38;5;199m>[38;5;255m/[38;5;45m%[0m + [38;5;255mโ[48;5;240m[38;5;255mยถ[48;5;240m[38;5;255mโ[48;5;255m [38;5;196m,[38;5;34mยป[48;5;201m[38;5;255mโโ[0m[38;5;255mยพยด[0m [38;5;199m/[38;5;255m> %[38;5;199m/[38;5;118m%[38;5;255m/[38;5;199m/ [38;5;45m/ [38;5;199m/[0m + [38;5;255m[48;5;240mโ[48;5;255m[38;5;16mโ[48;5;16m[38;5;255mโ
โ
[38;5;16m[48;5;255mโ
โ,,[38;5;32mโ[38;5;16mโ
[38;5;255m[48;5;16mโ
โ
[38;5;255m[48;5;20mร[0m[38;5;255m\[0m[38;5;20m/[38;5;118m/[38;5;255m /[38;5;118m/[38;5;199m/[38;5;255m>[38;5;45m// [38;5;255m/[38;5;118m>[38;5;199m/ [38;5;20m/[0m + [48;5;20m[38;5;255mV[48;5;255m[38;5;16mโ[48;5;20m[38;5;255mยซ[0m[38;5;255mยผ.;[48;5;240m[38;5;255mโ[48;5;255m[38;5;16m โ[0m[38;5;255m<ยซ.,[48;5;25m[38;5;255m`[48;5;240m=[0m[38;5;20m/[38;5;199m/ [38;5;255m/>[38;5;45m/[38;5;118m/[38;5;255m%/[38;5;199m% / [38;5;20m/[0m + [38;5;20m//[48;5;255m[38;5;16mโ <ยด -ยฒ,)[48;5;16m[38;5;255m(โ[48;5;255m[38;5;16m~"-[38;5;199mโ/[0m[38;5;255mยพ[0m[38;5;199m/ [38;5;118m%[38;5;255m/[38;5;118m>[38;5;45m/ [38;5;118m/[38;5;199m>[0m + [38;5;20m/ / [38;5;118m/ [48;5;20m[38;5;255mโ[48;5;240m[38;5;16m%[48;5;255m -./โโโ[48;5;16m[38;5;255mโ
[48;5;255m[38;5;16mโ[48;5;255m[38;5;16m, [38;5;199m/[48;5;199m[38;5;255m7[0m[38;5;20m/[38;5;199m/[38;5;255m;/[38;5;199m/[38;5;118m% [38;5;20m/ /[0m + [38;5;20m/ [38;5;199m/[38;5;255m/[38;5;45m/[38;5;118m/[38;5;255m[48;5;240m`[48;5;20m[38;5;255mโ[48;5;20m[38;5;255mโ[48;5;255m[38;5;16m %z[0m[38;5;255mWv xX[48;5;20m[38;5;255mโ[48;5;34m[38;5;255mโ[48;5;199m[38;255mโ[0m[38;5;20m/[38;5;199m/[38;5;255m&;[38;5;20m% [38;5;199m/ [38;5;20m/[0m + [38;5;20m/ / [38;5;255m/ [38;5;118m%[38;5;199m/[38;5;255m/%/[48;5;240m[38;5;255mยพ[48;5;255m[38;5;16mยฝยด[38;5;255m[48;5;16mโ[0m[38;5;246mโโ[38;5;255mโโ[38;5;246mโโโ[0m[48;5;16m[38;5;255mโ[38;5;255m[48;5;199mยถ[48;5;20m[38;5;255m\[0m[38;5;20m/[0m[48;5;255m[38;5;240m&[0m [38;5;20m/[0m + [38;5;199m<[38;5;118m/ [38;5;45m/[38;5;255m</[38;5;118m%[38;5;255m/[38;5;45m/[38;5;255m`[48;5;16mโ[48;5;255m[38;5;16m![48;5;240m[38;5;255m%[48;5;16m[38;5;255mโ[0m[38;5;255m%[48;5;240m[38;5;255mโฃ[48;5;240m[38;5;255;โฃ[0m[38;5;255mW[0m[38;5;250mY<Y)[48;5;255m[38;5;16my&[0m[38;5;255m/`[48;5;240m\[0m + [38;5;20m/ [38;5;199m/ [38;5;199m%[38;5;255m/%[38;5;118m/[38;5;45m/[38;5;255m<[38;5;118m/[38;5;199m%[38;5;45m/[38;5;20m/[48;5;240m[38;5;255m\[38;5;16m[48;5;255mi7; โ N[0m[38;5;246m>[38;5;255m)VY>[48;5;240m[38;5;255m7[0m[38;5;255m; [38;5;255m[48;5;240m\[0m[38;5;255m_[0m [38;5;255mUNIX IS VERY SIMPLE [38;5;45mIT JUST NEEDS A[0m + [38;5;20m/ [38;5;255m/[38;5;118m<[38;5;255m/ [38;5;45m/[38;5;255m/<[38;5;199m/[38;5;20m/[38;5;199m/[38;5;20m<[38;5;255m_/%\[38;5;255m[48;5;16mโ[48;5;255m[38;5;16m V[0m[38;5;255m%[48;5;255m[38;5;16mW[0m[38;5;255m%ยฃ)XY[0m [38;5;240m_/%[38;5;255mโพ\_,[0m [38;5;45mGENIUS TO UNDERSTAND ITS SIMPLICITY[38;5;255m[0m + [38;5;199m/ [38;5;255m/ [38;5;199m/[38;5;255m/[38;5;118m%[38;5;199m/[48;5;240m[38;5;255m_,=-[48;5;20m-^[0m[38;5;255m/%/%%[48;5;255m[38;5;16m\ยพ%[0m[38;5;255mยถ[0m[48;5;255m[38;5;16m%[0m[38;5;255m%}[0m [38;5;240m/%%%[38;5;20m%%[38;5;240m%;\,[0m + [38;5;45m%[38;5;20m/[38;5;199m< [38;5;20m/[48;5;20m[38;5;255m_/[48;5;240m [0m[38;5;255m%%%[38;5;240m%%[38;5;20m;[38;5;255mX[38;5;240m%[38;5;20m%[38;5;255m\%[38;5;240m%;, _/%%%;[38;5;20m,[38;5;240m \[0m + [38;5;118m/ [38;5;20m/ [38;5;240m%[38;5;20m%%%%[38;5;240m%;, [38;5;255m\[38;5;240m%[38;5;20m%[38;5;255ml[38;5;240m%%;// _/[38;5;20m%;,[0m [38;5;234mdmr[0m + [38;5;20m/ [38;5;240m%[38;5;20m%%;,[0m [38;5;255m<[38;5;20m;[38;5;240m\-=-/ /[0m + [38;5;20m;,[0m [38;5;240ml[0m +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}§ion=\${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}§ion=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}§ion=${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}§ion=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 Binary files differnew file mode 100644 index 0000000..dfbc814 --- /dev/null +++ b/.local/share/chars/unicode |