diff options
| author | Akshay Nair <phenax5@gmail.com> | 2020-12-24 00:06:27 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2020-12-24 00:06:27 +0530 |
| commit | 865728068c965e066d0f8971c5b5ba26e12e7dce (patch) | |
| tree | c16195f0a04cf7d004fe5b396255734f4d60bb00 | |
| parent | 649ef5f225039e498358c3d056dfd7fcbc56f014 (diff) | |
| download | nixos-config-865728068c965e066d0f8971c5b5ba26e12e7dce.tar.gz nixos-config-865728068c965e066d0f8971c5b5ba26e12e7dce.zip | |
Adds scripts and links scripts and wallpapers
94 files changed, 6887 insertions, 2 deletions
@@ -19,13 +19,15 @@ in { home.file = { ".config/zsh".source = ./config/zsh; - ".config/dunst".source = ./config/dunst; - ".config/lf".source = ./config/lf; ".config/nvim".source = ./config/nvim; ".config/qutebrowser".source = ./config/qutebrowser; ".local/share/qutebrowser/userscripts".source = ./config/qutebrowser/userscripts; ".local/share/qutebrowser/greasemonkey".source = ./config/qutebrowser/greasemonkey; # ".local/share/qutebrowser/sessions".source = ./private-config/qutebrowser/sessions; + ".config/dunst".source = ./config/dunst; + ".config/lf".source = ./config/lf; + "Pictures/wallpapers".source = ./extras/wallpapers; + "scripts".source = ./scripts; }; services.picom = { diff --git a/scripts/artemis.sh b/scripts/artemis.sh new file mode 100755 index 0000000..8546a89 --- /dev/null +++ b/scripts/artemis.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +host="192.168.0.10" +port=6543 + +run() { ssh "$host" -p $port -tt "$@"; } +run_x() { ssh -X "$host" -p $port; } + +run_git() { + local cmd="$1"; shift 1; + case "$cmd" in + ls) run ls -1 /fagit ;; + esac; +} + +run_cloud() { + local cmd="$1"; shift 1; + case "$cmd" in + ls) run ls -la "~/storage/public/$1" ;; + esac; +} + +run_media() { + local cmd="$1"; shift 1; + case "$cmd" in + play) run mpc play ;; + pause) run mpc pause ;; + play-pause) run mpc toggle ;; + esac; +} + +run_webui() { + local cmd="$1"; shift 1; + case "$cmd" in + pihole) ~/.bin/open "http://$host:9292/admin" ;; + sync) ~/.bin/open "http://$host:9191" ;; + esac; +} + +cmd="$1"; shift 1; +case "$cmd" in + shell) run bash ;; + web) run_webui "$@" ;; + top) run ytop ;; + update) run yay -Syyu ;; + git) run_git "$@" ;; + media) run_media "$@" ;; + cloud) run_cloud "$@" ;; + run) run "$@" ;; + x) run_x ;; +esac + diff --git a/scripts/battery-watch.sh b/scripts/battery-watch.sh new file mode 100755 index 0000000..dfff1cd --- /dev/null +++ b/scripts/battery-watch.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +PID_PATH="$HOME/.cache/my-battery-watcher.pid"; +[[ ! -f "$PID_PATH" ]] && touch $PID_PATH; + +battery_component() { cat "/sys/class/power_supply/BAT0/$1"; } + +get_level() { battery_component capacity; } +get_state() { battery_component status; } + +LOW_BATTERY="30"; +CRITICAL_BATTERY="10"; + +DELAY=1; +LOW_DELAY=240; +CRITICAL_DELAY=60; + +oldpid=$(cat $PID_PATH); +cmd=${1:-"start"}; + +if [[ ! -z "$oldpid" ]] || [[ "$cmd" == "stop" ]]; then + kill $oldpid; +fi; + +# :: Min -> Max -> Number -> Bool +between() { test "$3" -gt "$1" && test "$3" -le "$2"; } + +if [[ "$cmd" == "start" ]]; then + while true; do + battery_level=$(get_level); + state=$(get_state); + + if [[ "$state" == "Discharging" ]]; then + if (between $CRITICAL_BATTERY $LOW_BATTERY $battery_level); then + notify-send "Please charge this shit. Battery is at $battery_level%" -u normal; + sleep $LOW_DELAY; + fi + + if (between 0 $CRITICAL_BATTERY $battery_level); then + notify-send "HOLY SHIT DUDE. I'M DYING. Battery is at $battery_level%" -u critical; + sleep $CRITICAL_DELAY; + fi + fi + + sleep $DELAY; + done & + + echo $! > $PID_PATH; +fi; diff --git a/scripts/bin/color-pick b/scripts/bin/color-pick new file mode 100755 index 0000000..249a20c --- /dev/null +++ b/scripts/bin/color-pick @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +notify_content() { + echo "Copied $1 to clipboard"; + sleep 1; +} + +show_color() { + notify_content "$1" | popcorn --bg "$1" --fg "#ffffff"; +} + +color=$(grabc); + +echo "$color" | xclip -selection clipboard -i; + +show_color "$color" & disown; + diff --git a/scripts/bin/dsudo b/scripts/bin/dsudo new file mode 100755 index 0000000..f4d19dc --- /dev/null +++ b/scripts/bin/dsudo @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +SUDO_ASKPASS="$HOME/scripts/password_prompt.sh" sudo -A "$@"; + diff --git a/scripts/bin/ecmd b/scripts/bin/ecmd new file mode 100755 index 0000000..bc04a6d --- /dev/null +++ b/scripts/bin/ecmd @@ -0,0 +1,28 @@ +#!/usr/bin/env zsh + +source ~/.config/zshconf/paths.zsh; + +cd $COMMANDS_DIR; + +selected=`fzf +i --print-query -e`; +[[ -z "$selected" ]] && exit 0; + +query=`echo -e "$selected" | head -n 1`; +selected=`echo -e "$selected" | tail -n 1`; + +if [[ "$1" == "rm" ]]; then + [[ ! -f $selected ]] && echo "Cant remove $selected. File not found" && exit 1; + # TODO: Add confirmation here maybe + rm $selected; + echo "Removed $selected"; + exit 0; +fi; + +if (echo "$query" | grep -e '^:') && [[ ! -f "$query" ]]; then + escript "$COMMANDS_DIR/$query"; + echo "Added new command $query"; +else + escript "$COMMANDS_DIR/$selected" || echo "$selected command not found"; + echo "Edited command $query"; +fi; + diff --git a/scripts/bin/escript b/scripts/bin/escript new file mode 100755 index 0000000..a0373dd --- /dev/null +++ b/scripts/bin/escript @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +dir=""; +[[ -z "$1" ]] && return 1; +if [[ ! -f "$1" ]]; then + dir=$(dirname "$1"); + [[ ! -d "$dir" ]] && mkdir -p "$dir"; + + touch "$1"; + echo -e "#!/usr/bin/env bash\n" > "$1"; +fi; + +chmod u+x "$1"; + +sensible-editor "$1"; + diff --git a/scripts/bin/extract-urls b/scripts/bin/extract-urls new file mode 100755 index 0000000..b925e86 --- /dev/null +++ b/scripts/bin/extract-urls @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +REGEX="(https?://|www\\.)[\.A-Za-z0-9\-]+\\.[a-zA-Z]{2,4}(/[^ ]*)?" + +while read line; do echo "$line"; done | \ + egrep -o "$REGEX" | \ + awk '!seen[$0]++'; + diff --git a/scripts/bin/file-manager b/scripts/bin/file-manager new file mode 100755 index 0000000..467d346 --- /dev/null +++ b/scripts/bin/file-manager @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +sensible-terminal -d "$1" -e lf diff --git a/scripts/bin/help b/scripts/bin/help new file mode 120000 index 0000000..1fb83de --- /dev/null +++ b/scripts/bin/help @@ -0,0 +1 @@ +vman
\ No newline at end of file diff --git a/scripts/bin/macho b/scripts/bin/macho new file mode 100755 index 0000000..93b8f8f --- /dev/null +++ b/scripts/bin/macho @@ -0,0 +1,26 @@ +#!/bin/sh + +export FZF_DEFAULT_OPTS=' +--height=30% +--layout=reverse +--prompt="Manual: " +--preview="echo {1} | sed -E \"s/^\((.+)\)/\1/\" | xargs -I{S} man -Pcat {S} {2} 2>/dev/null"'; + +while getopts ":s:" opt; do + case $opt in + s ) SECTION=$OPTARG; shift; shift;; + \?) echo "Invalid option: -$OPTARG" >&2; exit 1;; + : ) echo "Option -$OPTARG requires an argument" >&2; exit 1;; + esac; +done; + +manual=$(apropos -s ${SECTION:-''} ${@:-.} | \ + grep -v -E '^.+ \(0\)' |\ + awk '{print $2 " " $1}' | \ + sort | \ + fzf | \ + sed -E 's/^\((.+)\)/\1/'); + +[ -z "$manual" ] && exit 0; +man $manual; + diff --git a/scripts/bin/open b/scripts/bin/open new file mode 100755 index 0000000..9daa34a --- /dev/null +++ b/scripts/bin/open @@ -0,0 +1,70 @@ +#!/usr/bin/env bash + +srun() { setsid -f "$@"; } +run() { srun "$@" > /dev/null 2> /dev/null; } +run_async() { run "$@" & disown; } + +open_by_mimetype() { + local file="$1"; + local mime=`file "$file" --mime-type -bL`; + + local is_opened=1; + + echo "Opening $file ($mime)..."; + + case "$mime" in + inode/directory) lf "$file" ;; + + application/x-bittorrent) ~/scripts/torrent.sh torrent "$file" ;; + + text/*) sensible-editor "$file" ;; + application/javascript) sensible-editor "$file" ;; + application/json) sensible-editor "$file" ;; + application/xml) sensible-editor "$file" ;; + application/x-*) sensible-editor "$file" ;; + *pdf) run_async zathura "$file" ;; + + video/*|image/gif) run_async mpv "$file" ;; + image/*) run_async sxiv "$file" ;; + audio/*) + mpc insert "file://$(readlink -e "$file")" && mpc play && \ + echo "Adding song to queue"; + ;; + + *) is_opened=0 ;; + esac; + + [[ "$is_opened" == 1 ]] && exit 0; +} + +open_by_path() { + local file="$1"; + + # Magnet torrent url + if [[ "$file" =~ ^magnet: ]]; then + echo "opening magnet link..."; + ~/scripts/torrent.sh magnet "$file"; + exit 0; + fi; + + # Https? and file urls + if [[ "$file" =~ ^https?:// ]] || [[ "$file" =~ ^file?:// ]]; then + echo "opening url $file..."; + run_async sensible-browser "$file"; + exit 0; + fi; +} + + +filepath="$1"; +[[ -z "$filepath" ]] && exit 1; + +open() { + open_by_path "$filepath"; + open_by_mimetype "$filepath"; + + # If it doesn't exit out, it couldn't open the file + echo "Couldn't open file. Add rule to opener."; exit 1; +} +open; + diff --git a/scripts/bin/search b/scripts/bin/search new file mode 100755 index 0000000..b443ad8 --- /dev/null +++ b/scripts/bin/search @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +AG_PREFIX="ag --noheading --color --smart-case " + +export FZF_DEFAULT_COMMAND="$AG_PREFIX '.'"; + +# TODO: Add preview +filename=$(fzf --bind "change:reload:$AG_PREFIX {q} || true" --ansi --phony | cut -d':' -f1); + +[[ ! -z "$filename" ]] && [[ -f "$filename" ]] && \ + open "$filename"; + diff --git a/scripts/bin/swallow b/scripts/bin/swallow new file mode 100755 index 0000000..0d10523 --- /dev/null +++ b/scripts/bin/swallow @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +wid=$(xdo id); + +xdo hide && "$@"; + +xdo show "$wid"; diff --git a/scripts/bin/tmpmail b/scripts/bin/tmpmail new file mode 100755 index 0000000..27b474a --- /dev/null +++ b/scripts/bin/tmpmail @@ -0,0 +1,293 @@ +#!/usr/bin/env bash +# +# by Siddharth Dushantha 2020 +# +# Dependencies: jq, curl, w3m +# + +export LC_CTYPE=C +export LANG=C + +VERSION=1.0.0 + +# By default 'tmpmail' uses 'w3m' as it's web browser to render +# the HTML of the email +BROWSER="w3m" + +# If the value is set to 'true' tmpmail will convert the HTML email +# to raw text and send that to stdout +RAW_TEXT=false + +# Everything related to 'tmpmail' will be stored in /tmp/tmpmail +# so that the old emails and email addresses get cleared after +# restarting the computer +TMPMAIL_DIR="/tmp/tmpmail/" + +# TMPMAIL_EMAIL_ADDRESS is where we store the temporary email address +# that gets generated. This prevents the user from providing +# the email address everytime they run tmpmail +TMPMAIL_EMAIL_ADDRESS="$TMPMAIL_DIR/email_address" +TMPMAIL_HTML_EMAIL="$TMPMAIL_DIR/tmpmail.html" + + +usage(){ + # Using 'cat << EOF' we can easily output a multiline text. This is much + # better than using 'echo' for each line or using '\n' to create a new line. + cat << EOF +usage: tmpmail [-h] [--generate] [--browser BROWSER] [--recent] ID + +optional arguments: +-h, --help Show this help message + --version Print version +-g, --generate Generate a new email address +-r, --recent View the most recent email +-t, --text View the email as raw text, where all the HTML tags are removed +-b, --browser Change the browser that is used to render the HTML of the email (default: w3m) +EOF +} + + +generate_email_address(){ + # There are 2 ways which this function is called in this script. + # [1] The user wants to generate a new email and runs 'tmpmail --generate' + # [2] The user runs 'tmpmail' to check the inbox , but /tmp/tmpmail/email_address + # is empty or nonexistant. Therefore a new email gets automatically + # generated before showing the inbox. But of course the inbox will + # be empty as the newly generated email address has not been + # sent any emails. + # + # When the function 'generate_email()' is called with the arguement + # 'true', it means that the function was called because the user + # ran 'tmpmail --generate'. + # + # We need this variable so we can know whether or not we need to show the user + # what the email was. <-- More about this can be found further down in this function. + EXTERNALLY=${1:-false} + + # Generate a random email address. + # This function is called whenever the user wants to generate a new email + # address by running 'tmpmail --generate' or when the user runs 'tmpmail' + # but /tmp/tmpmail/email_address is empty or nonexistent. + # + # We create a random username by taking the first 10 lines from /dev/random + # and delete all the characters which are *not* lower case letters from A to Z. + # So charcters such as dashes, periods, underscore, and numbers are all deleted, + # giving us a text which only contains lower case letters form A to Z. We then take + # the first 10 characters, which will be the username of the email address + USERNAME=$(head /dev/urandom | tr -dc a-z | cut -c1-11) + + # This is an array of the valid TLDS which 1secmail provides. + TLDS=(com net org) + + # Randomly pick one of the TLDS mentiond above. + # This is done by first echoing all the TLDS into 'tr' which then + # replaces the white spaces with a new line. This is done because we use + # 'sort' to put the TLDS in a random order, but 'sort' requires the TLDS to + # be on seperate lines. After the randomizing is done we take the first line + # which is one of the TLDS + TLD=$(echo "${TLDS[@]}" | tr " " "\n" | sort -R | head -n 1) + + # Save the generated email address to the $TMPMAIL_EMAIL_ADDRESS file + # so that it can be whenever 'tmpmail' is run + echo "$USERNAME@1secmail.$TLD" > "$TMPMAIL_EMAIL_ADDRESS" + + # If this function was called because the user wanted to generate a new + # email address, show them the email address + [ "$EXTERNALLY" = true ] && cat "$TMPMAIL_EMAIL_ADDRESS" +} + + +get_email_address(){ + # This function is only called once and that is when this script + # get executed. The output of this function gets stored in $EMAIL_ADDRESS + # + # If the file that contains the email address is empty, + # that means we do not have an email address, so generate one. + [ ! -s "$TMPMAIL_EMAIL_ADDRESS" ] && generate_email_address + + # Output the email address by getting the first line of $TMPMAIL_EMAIL + head -n 1 "$TMPMAIL_EMAIL_ADDRESS" +} + + +list_emails(){ + # List all the received emails in a nicely formatted order + # + # Fetch the email data using 1secmail's API + DATA=$(curl -sL "http://1secmail.$TLD/api/v1/?action=getMessages&login=$USERNAME&domain=1secmail.$TLD") + + # Using 'jq' we get the length of the JSON data. From this we can determine whether or not + # the email address has gotten any emails + DATA_LENGTH=$(jq length <<< "$DATA") + + # We are showing what email address is currently being used + # in case the user has forgotten what the email address was. + echo -e "[ Inbox for $EMAIL_ADDRESS ]\n" + + # If the length of the data we got is 0, that means the email address + # has not received any emails yet. + [ "$DATA_LENGTH" -eq 0 ] && echo "No new mail" && exit + + # This is where we store all of our emails, which is then + # displayed using 'column' + INBOX="" + + # This for loop goes through each mail that have been received. + # + # Since we need to go through all the data, we need to tell our for loop + # to loop from 1 to X, where X is legnth of the $DATA which contains all + # the emails. + # + # Normally to loop from 1 to 5, we would use shell expansion and write: + # for index in {1..5}; do + # do_something + # done + # + # But we a minor issue. We dont know what the final number is, and we are not allowed + # use to variables in shell expansions like this: + # {1..$X} + # + # where $X is the length of the $DATA. + # + # To fix this issue, we can use 'seq' which will allow us to create a sequence + # from X to Y. + # Example: + # $ seq 1 5 + # 1 + # 2 + # 3 + # 4 + # 5 + # + # We can then put those results into the foor loop + for index in $(seq 1 "$DATA_LENGTH"); do + # Since arrays in JSON data start at 0, we must subtract + # the value of $index by 1 so that we dont miss one of the + # emails in the array + MAIL_DATA=$(jq -r ".[$index-1]" <<< "$DATA") + + ID=$(jq -r ".id" <<< "$MAIL_DATA") + FROM=$(jq -r ".from" <<< "$MAIL_DATA") + SUBJECT=$(jq -r ".subject" <<< "$MAIL_DATA") + + # The '||' are used as a divideder for 'column'. 'column' will use this divider as + # a point of reference to create the division. By default 'column' uses a blank space + # but that would not work in our case as the email subject could have multiple white spaces + # and 'column' would split the words that are seperated by white space, in different columns. + # + # Yes, there a double quote all by it self on the line under this one. + # This serves as a new line. So that the 'column' command works properly. + # I know I could have used '\n' but 'column' does not intepret it as a new line. + INBOX+="$ID ||$FROM ||$SUBJECT +" + done + + # Show the emails cleanly + column -t -s "||" <<< "$INBOX" +} + + +view_email(){ + # View an email by providing it's ID + # + # The first argument provided to this function will be the ID of the email + # that has been received + EMAIL_ID="$1" + DATA=$(curl -sL "http://www.1secmail.$TLD/api/v1/?action=readMessage&login=$USERNAME&domain=1secmail.$TLD&id=$EMAIL_ID") + + # After the data is retrieved using the API, we have to check if we got any emails. + # Luckly 1secmail's API is not complicated and returns 'Message not found' as plain text + # if our email address as not received any emails. + # If we the error message from the API just quit because there is nothing to do + [[ "$DATA" == "Message not found" ]] && echo "Message not found" && exit 1 + + # We pass the $DATA to 'jq' which extracts the values + FROM=$(jq -r ".from" <<< "$DATA") + SUBJECT=$(jq -r ".subject" <<< "$DATA") + HTML_BODY=$(jq -r ".htmlBody" <<< "$DATA") + + # Create the HTML with all the information that is relevant and then + # assigning that HTML to the variable HTML_MAIL. This is the best method + # to create a multiline variable + read -r -d '' HTML_MAIL << EOF +<pre><b>To: </b>$EMAIL_ADDRESS +<b>From: </b>$FROM +<b>Subject: </b>$SUBJECT</pre> +$HTML_BODY +EOF + # Save the $HTML_MAIL into $TMPMAIL_HTML_EMAIL + echo "$HTML_MAIL" > "$TMPMAIL_HTML_EMAIL" + + # If the '--text' flag is used, then use 'w3m' to convert the HTML of + # the email to pure text by removing all the HTML tags + [ "$RAW_TEXT" = true ] && w3m -dump "$TMPMAIL_HTML_EMAIL" && exit + + # Open up the HTML file using $BROWSER. By default, + # this will be 'w3m'. + $BROWSER "$TMPMAIL_HTML_EMAIL" + +} + + +view_recent_email(){ + # View the most recent email. + # + # This is done by listing all the received email like you + # normally see on the terminal when running 'tmpmail'. + # We then use 'awk' to grab the ID of the most recent + # email, which the first line. + MAIL_ID=$(list_emails | awk 'NR==3{print $1}') + view_email "$MAIL_ID" +} + + +main(){ + # Iterate of the array of dependencies and check if the user has them installed + dependencies=(jq w3m curl) + for dependency in "${dependencies[@]}"; do + type -p "$dependency" &>/dev/null || { + echo "error: Could not find '${dependency}', is it installed?" >&2 + exit 1 + } + done + + # Create the $TMPMAIL_DIR directory and dont throw any errors + # if it already exists + mkdir -p "$TMPMAIL_DIR" + + # Get the email address and save the value to the EMAIL_ADDRESS variable + EMAIL_ADDRESS="$(get_email_address)" + + # ${VAR#PATTERN} Removes shortest match of pattern from start of a string. + # In this case, it takes the EMAIL_ADDRESS and removed everything after + # the '@' symbol which gives us the username. + USERNAME=${EMAIL_ADDRESS%@*} + + # ${VAR%PATTERN} Remove shortest match of pattern from end of a string. + # In this case, it takes the EMAIL_ADDRESS and removes everything until the + # period '.' which gives us the TLD + TLD=${EMAIL_ADDRESS#*.} + + # If no arguments are provided just the emails + [[ $# -eq 0 ]] && list_emails && exit + + while [[ "$1" ]]; do + case "$1" in + --help|-h) usage && exit ;; + --generate|-g) generate_email_address true && exit;; + --browser|-b) BROWSER="$2" ;; + --text|-t) RAW_TEXT=true ;; + --version) echo "$VERSION" && exit;; + --recent|-r) view_recent_email && exit;; + # If the user provides number as an argument, + # assume its the ID of an email and try getting + # the email that belongs to the ID + *[0-9]*) view_email "$1" && exit;; + -*) echo "error: option $1 does not exist" + esac + shift + done +} + + +main "$@" diff --git a/scripts/bin/torque b/scripts/bin/torque new file mode 100755 index 0000000..b63b594 --- /dev/null +++ b/scripts/bin/torque @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# +# Torque - minimal tui for transmission-daemon. + +refresh() { + printf '\e[?7l\e[?25l\e[2J\e[H' + shopt -s checkwinsize; (:;:) + [[ -z "$LINES" ]] && read -r LINES COLUMNS < <(stty size) + ((j=(LINES-2)/3)) +} + +status() { + printf '\e[2m\e[%s;H%s\e[m' "$((LINES-1))" "$1" +} + +get_torrents() { + IFS=$'\n' read -d "" -ra t < <(transmission-remote -l) + unset 't[0]' 't[-1]' 2>/dev/null + + t=("${t[@]//[0-9] [a-z][a-z][a-z]?/.}") + t=("${t[@]//Up & Down/Active}") + t=("${t[@]//Downloading/Active}") + t=("${t[@]// None/0 MB}") + + for((i=${k:=0};i<(j=j>${#t[@]}?${#t[@]}:j);i++));{ t_print "${t[i]/n\/a/0}";} + status "[s]tart [p]ause [r]emove [o]pen [j/k] [q]uit scroll ($j/${#t[@]})"$'\e[H' +} + +t_print() { + IFS=" %" read -r num perc have unit _ up down _ stat name <<< "$1" + + ((size=perc!=0?${have/.*}*100/perc:0,c=perc==100?33271340:31000000)) + + printf '\e[K\e[2m%s\e[m \e[1m\e[%s%b%s\e[m\n' \ + "$num:" "${c:0:2}m" "\\u${c:2:4}\\${c:6}" "$name" + printf '\e[K\e7%s\e8\e[14C%s\e8\e[32C%s\e8\e[42C%s\e8\e[52C%s\n\e[K\n' \ + " $stat: " "$have / $size $unit" "(${perc}%)" "⇣ $down" "⇡ $up" +} + +prompt() { + send() { transmission-remote "$@" >/dev/null; } + status $'\e[B\e[?25h' + + case "$1" in + s) read -rp "start torrent: #"; send -t "$REPLY" -s ;; + p) read -rp "pause torrent: #"; send -t "$REPLY" -S ;; + r) read -rp "remove torrent: #"; send -t "$REPLY" -r; k=0 ;; + o) read -rp "load magnet: "; send -a "$REPLY"; k=0 ;; + j) ((j==${#t[@]}))||((k=k>=j?k:++k,j=j<${#t[@]}?++j:j)) ;; + k) ((k==0))||((k=k<=j?k>0?--k:0:j,j=j>0?--j:j)) ;; + q) exit 0 ;; + esac + + [[ "$1" =~ (j|k) ]] || refresh && printf '\e[?25l\e[H' +} + +main() { + refresh + + trap $'printf \e[?25h\e[?7h\e[999B' EXIT + trap 'refresh; k=0' SIGWINCH + + for ((;;)); { get_torrents; read -rsN1 -t1 && prompt "$REPLY"; } +} + +main diff --git a/scripts/bin/tst b/scripts/bin/tst new file mode 100755 index 0000000..bf2778d --- /dev/null +++ b/scripts/bin/tst @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +tabbed -c -r 2 st -w '' "$@"; diff --git a/scripts/bin/upload-file b/scripts/bin/upload-file new file mode 100755 index 0000000..c095e51 --- /dev/null +++ b/scripts/bin/upload-file @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +if [ $# -eq 0 ]; then + echo -e "No arguments specified. Usage:\necho transfer /tmp/test.md\ncat /tmp/test.md | transfer test.md"; + return 1; +fi + +tmpfile=$( mktemp -t transferXXX ); + +if tty -s; then + basefile=$(basename "$1" | sed -e 's/[^a-zA-Z0-9._-]/-/g'); + curl --progress-bar --upload-file "$1" "https://transfer.sh/$basefile" >> $tmpfile; +else + curl --progress-bar --upload-file "-" "https://transfer.sh/$1" >> $tmpfile ; +fi; + +cat $tmpfile; +rm -f $tmpfile; + diff --git a/scripts/bin/vimv b/scripts/bin/vimv new file mode 100755 index 0000000..3c78afb --- /dev/null +++ b/scripts/bin/vimv @@ -0,0 +1,38 @@ +#!/bin/bash + +# Lists the current directory's files in Vim, so you can edit it and save to rename them +# USAGE: vimv [file1 file2] +# https://github.com/thameera/vimv + +declare -r FILENAMES_FILE="$(mktemp --tmpdir vimv.XXX)" + +trap '{ rm -f "${FILENAMES_FILE}" ; }' EXIT + +if [ $# -ne 0 ]; then + src=( "$@" ) +else + IFS=$'\r\n' GLOBIGNORE='*' command eval 'src=($(ls))' +fi + +for ((i=0;i<${#src[@]};++i)); do + echo "${src[i]}" >> "${FILENAMES_FILE}" +done + +${EDITOR:-vi} "${FILENAMES_FILE}" + +IFS=$'\r\n' GLOBIGNORE='*' command eval 'dest=($(cat "${FILENAMES_FILE}"))' + +count=0 +for ((i=0;i<${#src[@]};++i)); do + if [ "${src[i]}" != "${dest[i]}" ]; then + mkdir -p "`dirname "${dest[i]}"`" + if git ls-files --error-unmatch "${src[i]}" > /dev/null 2>&1; then + git mv "${src[i]}" "${dest[i]}" + else + mv "${src[i]}" "${dest[i]}" + fi + ((count++)) + fi +done + +echo "$count" files renamed. diff --git a/scripts/bin/vman b/scripts/bin/vman new file mode 100755 index 0000000..cb78e4d --- /dev/null +++ b/scripts/bin/vman @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +man -f "$@" >/dev/null 2>&1 && nvim -R +":set ft=man" <(man "$@"); diff --git a/scripts/bin/web b/scripts/bin/web new file mode 100755 index 0000000..958e844 --- /dev/null +++ b/scripts/bin/web @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +w3m -o imgdisplay=/usr/lib/w3m/w3mimgdisplay "$@"; + diff --git a/scripts/bin/with_zsh b/scripts/bin/with_zsh new file mode 100755 index 0000000..0da2d95 --- /dev/null +++ b/scripts/bin/with_zsh @@ -0,0 +1,4 @@ +#!/bin/sh + +zsh -c "source ~/.zshrc && $@"; + diff --git a/scripts/brightness.sh b/scripts/brightness.sh new file mode 100755 index 0000000..71432d6 --- /dev/null +++ b/scripts/brightness.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +read_brightness() { xbacklight -get; } + +get_brightness() { printf "%.0f%s" "$(read_brightness)" "%"; } + +set_brightness() { xbacklight -set $1; } + +increment() { xbacklight -inc $1; } +decrement() { xbacklight -dec $1; } + +case $1 in + get) get_brightness ;; + set) set_brightness $2 ;; + inc) increment $2 ;; + dec) decrement $2 ;; + *) echo "For tools to work, you need to know how to use them" ;; +esac + +#~/scripts/statusbar/statusbar.sh update brightness; +update-dwmblock brightness; + diff --git a/scripts/change-tagname.sh b/scripts/change-tagname.sh new file mode 100755 index 0000000..227d509 --- /dev/null +++ b/scripts/change-tagname.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +name=$(echo -n "" | dmenu -p "tag name ::"); + +[[ ! -z "$name" ]] && dwmc settagname "$name"; + diff --git a/scripts/commands/:break b/scripts/commands/:break new file mode 100755 index 0000000..e6bde66 --- /dev/null +++ b/scripts/commands/:break @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +reason=`echo -n "" | dmenu -p "Reason for break ::"`; + +operation=`[[ "$reason" =~ ^- ]] && echo "stop" || echo "start"`; + +reason=`echo $reason | sed 's/^-//g'`; +([[ -z "$reason" ]]) && exit 1; + +if (ponos "$operation" "$reason"); then + notify-send "Break ${operation}ed"; +else + notify-send -u critical "Something went wrong"; +fi; diff --git a/scripts/commands/:brightness b/scripts/commands/:brightness new file mode 100755 index 0000000..cb36d70 --- /dev/null +++ b/scripts/commands/:brightness @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +~/scripts/brightness.sh set $1; diff --git a/scripts/commands/:cal b/scripts/commands/:cal new file mode 100755 index 0000000..3fbd0ef --- /dev/null +++ b/scripts/commands/:cal @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +sensible-terminal -e nvim +Calendar diff --git a/scripts/commands/:calc b/scripts/commands/:calc new file mode 100755 index 0000000..8f804ba --- /dev/null +++ b/scripts/commands/:calc @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +sensible-terminal -e node; diff --git a/scripts/commands/:camera-off b/scripts/commands/:camera-off new file mode 100755 index 0000000..ba1429e --- /dev/null +++ b/scripts/commands/:camera-off @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +dsudo modprobe -r uvcvideo && notify-send "Camera turned off" || notify-send "Something went wrong" diff --git a/scripts/commands/:camera-on b/scripts/commands/:camera-on new file mode 100755 index 0000000..e6d8924 --- /dev/null +++ b/scripts/commands/:camera-on @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +dsudo modprobe uvcvideo && notify-send "Camera turned on" || notify-send "Something went wrong" diff --git a/scripts/commands/:cheat b/scripts/commands/:cheat new file mode 100755 index 0000000..850557f --- /dev/null +++ b/scripts/commands/:cheat @@ -0,0 +1,5 @@ +#!/usr/bin/env sh + +[[ ! -z "$1" ]] && file=$1 || file=Cheatsheets; + +sensible-terminal -e sensible-editor ~/.config/vimwiki/$file.md; diff --git a/scripts/commands/:codi b/scripts/commands/:codi new file mode 100755 index 0000000..09fb11b --- /dev/null +++ b/scripts/commands/:codi @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +filetype=${1:-javascript} +tmpfile=$(mktemp /tmp/interpreter.XXXXXXX) + +sensible-terminal -e sh -c "~/.bin/with_zsh 'codi $filetype $tmpfile'"; + +rm $tmpfile; + diff --git a/scripts/commands/:color-pick b/scripts/commands/:color-pick new file mode 100755 index 0000000..7d7850a --- /dev/null +++ b/scripts/commands/:color-pick @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +~/.bin/color-pick; + diff --git a/scripts/commands/:day b/scripts/commands/:day new file mode 100755 index 0000000..e090f5b --- /dev/null +++ b/scripts/commands/:day @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +~/scripts/brightness.sh set 100; + +:gamma 0.91 0.94 0.93; + +xgamma -gamma 1; + diff --git a/scripts/commands/:email b/scripts/commands/:email new file mode 100755 index 0000000..0b7b63f --- /dev/null +++ b/scripts/commands/:email @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +sensible-terminal -e neomutt + diff --git a/scripts/commands/:files b/scripts/commands/:files new file mode 100755 index 0000000..7ee64ce --- /dev/null +++ b/scripts/commands/:files @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +file-manager; diff --git a/scripts/commands/:gamma b/scripts/commands/:gamma new file mode 100755 index 0000000..2b2a1f8 --- /dev/null +++ b/scripts/commands/:gamma @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +if [[ $# == 1 ]]; then + r=$1; g=$1; b=$1; +else + r=${1:-'1'}; g=${2:-'1'}; b=${3:-'1'}; +fi; + +notify-send "Setting gamma to ($r, $g, $b)"; +xrandr --output eDP-1 --brightness 1 --gamma $r:$g:$b + diff --git a/scripts/commands/:install b/scripts/commands/:install new file mode 100755 index 0000000..20d602b --- /dev/null +++ b/scripts/commands/:install @@ -0,0 +1,2 @@ +#!/usr/bin/env bash + diff --git a/scripts/commands/:mic b/scripts/commands/:mic new file mode 100755 index 0000000..4815d3d --- /dev/null +++ b/scripts/commands/:mic @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +~/scripts/sound.sh mute-mic; diff --git a/scripts/commands/:music b/scripts/commands/:music new file mode 100755 index 0000000..8ac1653 --- /dev/null +++ b/scripts/commands/:music @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +sensible-terminal -e ncmpcpp diff --git a/scripts/commands/:night b/scripts/commands/:night new file mode 100755 index 0000000..b97c90b --- /dev/null +++ b/scripts/commands/:night @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +~/scripts/brightness.sh set 2; + diff --git a/scripts/commands/:notes b/scripts/commands/:notes new file mode 100755 index 0000000..cf5a8cc --- /dev/null +++ b/scripts/commands/:notes @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +sensible-terminal -e sensible-editor ~/.config/vimwiki/index.md; diff --git a/scripts/commands/:play-next b/scripts/commands/:play-next new file mode 100755 index 0000000..255fb9f --- /dev/null +++ b/scripts/commands/:play-next @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +musicdir=$HOME/Downloads/music; + +ls_songs() { + cd $musicdir; + find -follow | while read l; do [[ -f "$l" ]] && echo "$l"; done | sed 's/^\.\///'; +} + +song=$(ls_songs | sort | dmenu -p "Song :: "); + +[[ -z "$song" ]] && exit 1; + +mpc insert "file://$musicdir/$song"; + +[[ "$(~/scripts/music/player.sh get_play_state)" == "Stopped" ]] && mpc play; +update-dwmblock music; diff --git a/scripts/commands/:power b/scripts/commands/:power new file mode 100755 index 0000000..735e6bd --- /dev/null +++ b/scripts/commands/:power @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +~/scripts/powercontrol.sh menu diff --git a/scripts/commands/:scratchpad b/scripts/commands/:scratchpad new file mode 100755 index 0000000..69f0971 --- /dev/null +++ b/scripts/commands/:scratchpad @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +sensible-terminal -e sensible-editor ~/.config/vimwiki/scratchpad.md; + diff --git a/scripts/commands/:standup b/scripts/commands/:standup new file mode 120000 index 0000000..970efd7 --- /dev/null +++ b/scripts/commands/:standup @@ -0,0 +1 @@ +/home/imsohexy/.work-config/commands/:standup
\ No newline at end of file diff --git a/scripts/commands/:system-monitor b/scripts/commands/:system-monitor new file mode 100755 index 0000000..5c8e784 --- /dev/null +++ b/scripts/commands/:system-monitor @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +sensible-terminal -e ytop diff --git a/scripts/commands/:tasks b/scripts/commands/:tasks new file mode 100755 index 0000000..d020ddf --- /dev/null +++ b/scripts/commands/:tasks @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +sensible-terminal -e sensible-editor ~/.config/vimwiki/Work.md; + diff --git a/scripts/commands/:time b/scripts/commands/:time new file mode 100755 index 0000000..0970ef9 --- /dev/null +++ b/scripts/commands/:time @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +sensible-terminal -e tty-clock -t -b -c diff --git a/scripts/commands/:today b/scripts/commands/:today new file mode 100755 index 0000000..ec7b295 --- /dev/null +++ b/scripts/commands/:today @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +sensible-terminal -e sensible-editor ~/.config/vimwiki/Today.md; + diff --git a/scripts/commands/:tord b/scripts/commands/:tord new file mode 100755 index 0000000..83207fa --- /dev/null +++ b/scripts/commands/:tord @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +~/.bin/dsudo chown -R an:an /var/lib/tor; + +tor --runasdaemon 1 -f ~/.config/tor/torrc & disown; + diff --git a/scripts/commands/:torrent b/scripts/commands/:torrent new file mode 100755 index 0000000..b3f1849 --- /dev/null +++ b/scripts/commands/:torrent @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +sensible-terminal -e bash -c 'tremc'; + diff --git a/scripts/commands/:type b/scripts/commands/:type new file mode 100755 index 0000000..5a95508 --- /dev/null +++ b/scripts/commands/:type @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +xdotool type "$1" + diff --git a/scripts/commands/:weather b/scripts/commands/:weather new file mode 100755 index 0000000..e9006e7 --- /dev/null +++ b/scripts/commands/:weather @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +sensible-terminal -e bash -c 'curl wttr.in/Virar && read' diff --git a/scripts/commands/:wiki b/scripts/commands/:wiki new file mode 100755 index 0000000..3a26283 --- /dev/null +++ b/scripts/commands/:wiki @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +~/scripts/wiki.sh; diff --git a/scripts/commands/:work-start b/scripts/commands/:work-start new file mode 100755 index 0000000..5603a8b --- /dev/null +++ b/scripts/commands/:work-start @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +if (ponos start work); then + notify-send "Started 'work' block"; +else + notify-send -u critical "Something went wrong"; +fi; diff --git a/scripts/commands/:work-stop b/scripts/commands/:work-stop new file mode 100755 index 0000000..e02ccd0 --- /dev/null +++ b/scripts/commands/:work-stop @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +if (ponos stop work); then + notify-send "Stopped 'work' block"; +else + notify-send -u critical "Something went wrong"; +fi; diff --git a/scripts/dotfiles.sh b/scripts/dotfiles.sh new file mode 100755 index 0000000..6f70d7b --- /dev/null +++ b/scripts/dotfiles.sh @@ -0,0 +1,93 @@ +#!/usr/bin/env bash + +add() { yadm add "$@"; } +add-public-config() { + # Base config + add ~/README.md; + add ~/.work-config; + add ~/.gitmodules ~/.config/git-config; + add ~/.config/linkedconf; + #add ~/.config/vimwiki; + #add ~/.config/password-store; + add ~/.config/sitesettings; + add ~/.config/crontab; + add ~/.config/gnupg/gpg-agent.conf; + + # X and DM + add ~/.config/{bspwm,sxhkd} + add ~/.config/compton.conf; + add ~/.config/sx; + add ~/.config/xresources-schemes; + add ~/.config/dunst; + add ~/.config/xconfig; + add ~/.config/autostart.sh; + + # Other config + add ~/.config/{gtk-3.0,mimeapps.list}; + + # Terminal and shell + add ~/.bashrc ~/.profile; + add ~/.zshrc ~/.zprofile ~/.config/{zshconf,zshplugins}; + + # Dev + add ~/scripts ~/.bin; + add ~/.config/nvim; + + # Applications + add ~/.config/suckless; + add ~/.config/qutebrowser; + add ~/.config/{lf,mpv,sxiv,zathura,newsboat,neofetch}; + add ~/.config/transmission-daemon/settings.json; + add ~/.config/{transmission-remote-cli,stig,tremc,udiskie}; + add ~/.config/{calcurse,pet,shell-macros}; + add ~/.config/neomutt; + add ~/.config/{ncmpcpp,mopidy,mpd}; + + # Wallpapers + add ~/.fehbg; + add ~/Pictures/wallpapers; +} + +should_run() { [[ -z "$2" ]] || [[ "$2" == _ ]] || [[ "$1" == "$2" ]]; } # Should run command +should_push() { [[ -z "$1" ]]; } # Should sync with remote + +commit-push-all() { + local oldir=$(pwd); + cd "$1"; + git add .; + git commit -m "$2"; + should_push "$3" && git push; + cd $oldir; +} + +# Sync dotfiles to github (uses yadm) +update-dotfiles() { + # Passwords push + if (should_run pass "$1"); then + echo -e "\n\n##### Pushing passwords"; + should_push "$2" && pass git push; + fi; + + # Vim wiki push + if (should_run notes "$1"); then + echo -e "\n\n##### Pushing vimwiki"; + commit-push-all ~/.config/vimwiki "Notes updated" "$2"; + fi; + + # Push private config + if (should_run work "$1"); then + echo -e "\n\n##### Pushing private config"; + commit-push-all ~/.work-config "Updated private config" "$2"; + fi; + + # Dotfiles + if (should_run dot "$1"); then + echo -e "\n\n##### Pushing public dotfiles"; + yadm status; + add-public-config; + yadm commit -m "Updates dotfiles" && \ + should_push "$2" && yadm push -u origin master; + fi; +} + +update-dotfiles "$@"; diff --git a/scripts/fontawesome-menu/.gitignore b/scripts/fontawesome-menu/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/scripts/fontawesome-menu/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/scripts/fontawesome-menu/fa-menu.sh b/scripts/fontawesome-menu/fa-menu.sh new file mode 100755 index 0000000..48be093 --- /dev/null +++ b/scripts/fontawesome-menu/fa-menu.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +source "$HOME/scripts/modules/utils.sh"; +source "$HOME/scripts/modules/rofi-menu.sh"; + +DIR="$HOME/scripts/fontawesome-menu"; +FONTS_DIR="$DIR/icons"; +SCRIPT_FILE="$DIR/fa-menu.sh"; + +get_fonts() { cat $FONTS_DIR/$1; } + +show_menu() { + local icon=$(get_fonts icons-list | open-menu -p "Emoji :: " | awk '{print $1}'); + if [[ ! -z "$icon" ]]; then + copy_str "$icon"; + notify-send "Emoji ($icon) copied to clipboard"; + fi; +} + +case "$1" in + menu) show_menu ;; +esac + diff --git a/scripts/fontawesome-menu/icons/brands b/scripts/fontawesome-menu/icons/brands new file mode 100644 index 0000000..2883965 --- /dev/null +++ b/scripts/fontawesome-menu/icons/brands @@ -0,0 +1,438 @@ +|500px +|accessible-icon +|accusoft +|acquisitions-incorporated +|adn +|adobe +|adversal +|affiliatetheme +|airbnb +|algolia +|alipay +|amazon +|amazon-pay +|amilia +|android +|angellist +|angrycreative +|angular +|app-store +|app-store-ios +|apper +|apple +|apple-pay +|artstation +|asymmetrik +|atlassian +|audible +|autoprefixer +|avianex +|aviato +|aws +|bandcamp +|battle-net +|behance +|behance-square +|bimobject +|bitbucket +|bitcoin +|bity +|black-tie +|blackberry +|blogger +|blogger-b +|bluetooth +|bluetooth-b +|bootstrap +|btc +|buffer +|buromobelexperte +|buy-n-large +|buysellads +|canadian-maple-leaf +|cc-amazon-pay +|cc-amex +|cc-apple-pay +|cc-diners-club +|cc-discover +|cc-jcb +|cc-mastercard +|cc-paypal +|cc-stripe +|cc-visa +|centercode +|centos +|chrome +|chromecast +|cloudscale +|cloudsmith +|cloudversify +|codepen +|codiepie +|confluence +|connectdevelop +|contao +|cotton-bureau +|cpanel +|creative-commons +|creative-commons-by +|creative-commons-nc +|creative-commons-nc-eu +|creative-commons-nc-jp +|creative-commons-nd +|creative-commons-pd +|creative-commons-pd-alt +|creative-commons-remix +|creative-commons-sa +|creative-commons-sampling +|creative-commons-sampling-plus +|creative-commons-share +|creative-commons-zero +|critical-role +|css3 +|css3-alt +|cuttlefish +|d-and-d +|d-and-d-beyond +|dashcube +|delicious +|deploydog +|deskpro +|dev +|deviantart +|dhl +|diaspora +|digg +|digital-ocean +|discord +|discourse +|dochub +|docker +|draft2digital +|dribbble +|dribbble-square +|dropbox +|drupal +|dyalog +|earlybirds +|ebay +|edge +|elementor +|ello +|ember +|empire +|envira +|erlang +|ethereum +|etsy +|evernote +|expeditedssl +|facebook +|facebook-f +|facebook-messenger +|facebook-square +|fantasy-flight-games +|fedex +|fedora +|figma +|firefox +龜|firefox-browser +|first-order +|first-order-alt +|firstdraft +|flickr +|flipboard +|fly +|font-awesome +|font-awesome-alt +|font-awesome-flag +|fonticons +|fonticons-fi +|fort-awesome +|fort-awesome-alt +|forumbee +|foursquare +|free-code-camp +|freebsd +|fulcrum +|galactic-republic +|galactic-senate +|get-pocket +|gg +|gg-circle +|git +|git-alt +|git-square +|github +|github-alt +|github-square +|gitkraken +|gitlab +|gitter +|glide +|glide-g +|gofore +|goodreads +|goodreads-g +|google +|google-drive +|google-play +|google-plus +|google-plus-g +|google-plus-square +|google-wallet +|gratipay +|grav +|gripfire +|grunt +|gulp +|hacker-news +|hacker-news-square +|hackerrank +|hips +|hire-a-helper +|hooli +|hornbill +|hotjar +|houzz +|html5 +|hubspot +邏|ideal +|imdb +|instagram +|intercom +|internet-explorer +|invision +|ioxhost +|itch-io +|itunes +|itunes-note +|java +|jedi-order +|jenkins +|jira +|joget +|joomla +|js +|js-square +|jsfiddle +|kaggle +|keybase +|keycdn +|kickstarter +|kickstarter-k +|korvue +|laravel +|lastfm +|lastfm-square +|leanpub +|less +|line +|linkedin +|linkedin-in +|linode +|linux +|lyft +|magento +|mailchimp +|mandalorian +|markdown +|mastodon +|maxcdn +|mdb +|medapps +|medium +|medium-m +|medrt +|meetup +|megaport +|mendeley +駱|microblog +|microsoft +|mix +|mixcloud +|mizuni +|modx +|monero +|napster +|neos +|nimblr +|node +|node-js +|npm +|ns8 +|nutritionix +|odnoklassniki +|odnoklassniki-square +|old-republic +|opencart +|openid +|opera +|optin-monster +|orcid +|osi +|page4 +|pagelines +|palfed +|patreon +|paypal +|penny-arcade +|periscope +|phabricator +|phoenix-framework +|phoenix-squadron +|php +|pied-piper +|pied-piper-alt +|pied-piper-hat +|pied-piper-pp +爛|pied-piper-square +|pinterest +|pinterest-p +|pinterest-square +|playstation +|product-hunt +|pushed +|python +|qq +|quinscape +|quora +|r-project +|raspberry-pi +|ravelry +|react +|reacteurope +|readme +|rebel +|red-river +|reddit +|reddit-alien +|reddit-square +|redhat +|renren +|replyd +|researchgate +|resolving +|rev +|rocketchat +|rockrms +|safari +|salesforce +|sass +|schlix +|scribd +|searchengin +|sellcast +|sellsy +|servicestack +|shirtsinbulk +|shopware +|simplybuilt +|sistrix +|sith +|sketch +|skyatlas +|skype +|slack +|slack-hash +|slideshare +|snapchat +|snapchat-ghost +|snapchat-square +|soundcloud +|sourcetree +|speakap +|speaker-deck +|spotify +|squarespace +|stack-exchange +|stack-overflow +|stackpath +|staylinked +|steam +|steam-square +|steam-symbol +|sticker-mule +|strava +|stripe +|stripe-s +|studiovinari +|stumbleupon +|stumbleupon-circle +|superpowers +|supple +|suse +|swift +|symfony +|teamspeak +|telegram +|telegram-plane +|tencent-weibo +|the-red-yeti +|themeco +|themeisle +|think-peaks +|trade-federation +|trello +|tripadvisor +|tumblr +|tumblr-square +|twitch +|twitter +|twitter-square +|typo3 +|uber +|ubuntu +|uikit +|umbraco +|uniregistry +雷|unity +|untappd +|ups +|usb +|usps +|ussunnah +|vaadin +|viacoin +|viadeo +|viadeo-square +|viber +|vimeo +|vimeo-square +|vimeo-v +|vine +|vk +|vnv +|vuejs +|waze +|weebly +|weibo +|weixin +|whatsapp +|whatsapp-square +|whmcs +|wikipedia-w +|windows +|wix +|wizards-of-the-coast +|wolf-pack-battalion +|wordpress +|wordpress-simple +|wpbeginner +|wpexplorer +|wpforms +|wpressr +|xbox +|xing +|xing-square +|y-combinator +|yahoo +|yammer +|yandex +|yandex-international +|yarn +|yelp +|yoast +|youtube +|youtube-square +|zhihu
\ No newline at end of file diff --git a/scripts/fontawesome-menu/icons/icons-list b/scripts/fontawesome-menu/icons/icons-list new file mode 100644 index 0000000..37607a6 --- /dev/null +++ b/scripts/fontawesome-menu/icons/icons-list @@ -0,0 +1,3127 @@ +😀 grinning face; U+1F600 +😃 grinning face with big eyes; U+1F603 +😄 grinning face with smiling eyes; U+1F604 +😁 beaming face with smiling eyes; U+1F601 +😆 grinning squinting face; U+1F606 +😅 grinning face with sweat; U+1F605 +🤣 rolling on the floor laughing; U+1F923 +😂 face with tears of joy; U+1F602 +🙂 slightly smiling face; U+1F642 +🙃 upside-down face; U+1F643 +😉 winking face; U+1F609 +😊 smiling face with smiling eyes; U+1F60A +😇 smiling face with halo; U+1F607 +🥰 smiling face with 3 hearts; U+1F970 +😍 smiling face with heart-eyes; U+1F60D +🤩 star-struck; U+1F929 +😘 face blowing a kiss; U+1F618 +😗 kissing face; U+1F617 +☺ smiling face; U+263A +😚 kissing face with closed eyes; U+1F61A +😙 kissing face with smiling eyes; U+1F619 +😋 face savoring food; U+1F60B +😛 face with tongue; U+1F61B +😜 winking face with tongue; U+1F61C +🤪 zany face; U+1F92A +😝 squinting face with tongue; U+1F61D +🤑 money-mouth face; U+1F911 +🤗 hugging face; U+1F917 +🤭 face with hand over mouth; U+1F92D +🤫 shushing face; U+1F92B +🤔 thinking face; U+1F914 +🤐 zipper-mouth face; U+1F910 +🤨 face with raised eyebrow; U+1F928 +😐 neutral face; U+1F610 +😑 expressionless face; U+1F611 +😶 face without mouth; U+1F636 +😏 smirking face; U+1F60F +😒 unamused face; U+1F612 +🙄 face with rolling eyes; U+1F644 +😬 grimacing face; U+1F62C +🤥 lying face; U+1F925 +😌 relieved face; U+1F60C +😔 pensive face; U+1F614 +😪 sleepy face; U+1F62A +🤤 drooling face; U+1F924 +😴 sleeping face; U+1F634 +😷 face with medical mask; U+1F637 +🤒 face with thermometer; U+1F912 +🤕 face with head-bandage; U+1F915 +🤢 nauseated face; U+1F922 +🤮 face vomiting; U+1F92E +🤧 sneezing face; U+1F927 +🥵 hot face; U+1F975 +🥶 cold face; U+1F976 +🥴 woozy face; U+1F974 +😵 dizzy face; U+1F635 +🤯 exploding head; U+1F92F +🤠 cowboy hat face; U+1F920 +🥳 partying face; U+1F973 +😎 smiling face with sunglasses; U+1F60E +🤓 nerd face; U+1F913 +🧐 face with monocle; U+1F9D0 +😕 confused face; U+1F615 +😟 worried face; U+1F61F +🙁 slightly frowning face; U+1F641 +☹ frowning face; U+2639 +😮 face with open mouth; U+1F62E +😯 hushed face; U+1F62F +😲 astonished face; U+1F632 +😳 flushed face; U+1F633 +🥺 pleading face; U+1F97A +😦 frowning face with open mouth; U+1F626 +😧 anguished face; U+1F627 +😨 fearful face; U+1F628 +😰 anxious face with sweat; U+1F630 +😥 sad but relieved face; U+1F625 +😢 crying face; U+1F622 +😭 loudly crying face; U+1F62D +😱 face screaming in fear; U+1F631 +😖 confounded face; U+1F616 +😣 persevering face; U+1F623 +😞 disappointed face; U+1F61E +😓 downcast face with sweat; U+1F613 +😩 weary face; U+1F629 +😫 tired face; U+1F62B +😤 face with steam from nose; U+1F624 +😡 pouting face; U+1F621 +😠 angry face; U+1F620 +🤬 face with symbols on mouth; U+1F92C +😈 smiling face with horns; U+1F608 +👿 angry face with horns; U+1F47F +💀 skull; U+1F480 +☠ skull and crossbones; U+2620 +💩 pile of poo; U+1F4A9 +🤡 clown face; U+1F921 +👹 ogre; U+1F479 +👺 goblin; U+1F47A +👻 ghost; U+1F47B +👽 alien; U+1F47D +👾 alien monster; U+1F47E +🤖 robot face; U+1F916 +😺 grinning cat face; U+1F63A +😸 grinning cat face with smiling eyes; U+1F638 +😹 cat face with tears of joy; U+1F639 +😻 smiling cat face with heart-eyes; U+1F63B +😼 cat face with wry smile; U+1F63C +😽 kissing cat face; U+1F63D +🙀 weary cat face; U+1F640 +😿 crying cat face; U+1F63F +😾 pouting cat face; U+1F63E +🙈 see-no-evil monkey; U+1F648 +🙉 hear-no-evil monkey; U+1F649 +🙊 speak-no-evil monkey; U+1F64A +💋 kiss mark; U+1F48B +💌 love letter; U+1F48C +💘 heart with arrow; U+1F498 +💝 heart with ribbon; U+1F49D +💖 sparkling heart; U+1F496 +💗 growing heart; U+1F497 +💓 beating heart; U+1F493 +💞 revolving hearts; U+1F49E +💕 two hearts; U+1F495 +💟 heart decoration; U+1F49F +❣ heavy heart exclamation; U+2763 +💔 broken heart; U+1F494 +❤ red heart; U+2764 +🧡 orange heart; U+1F9E1 +💛 yellow heart; U+1F49B +💚 green heart; U+1F49A +💙 blue heart; U+1F499 +💜 purple heart; U+1F49C +🖤 black heart; U+1F5A4 +💯 hundred points; U+1F4AF +💢 anger symbol; U+1F4A2 +💥 collision; U+1F4A5 +💫 dizzy; U+1F4AB +💦 sweat droplets; U+1F4A6 +💨 dashing away; U+1F4A8 +🕳 hole; U+1F573 +💣 bomb; U+1F4A3 +💬 speech balloon; U+1F4AC +👁️🗨️ eye in speech bubble; U+1F441 U+FE0F U+200D U+1F5E8 U+FE0F +🗨 left speech bubble; U+1F5E8 +🗯 right anger bubble; U+1F5EF +💭 thought balloon; U+1F4AD +💤 zzz; U+1F4A4 +👋 waving hand; U+1F44B +🤚 raised back of hand; U+1F91A +🖐 hand with fingers splayed; U+1F590 +✋ raised hand; U+270B +🖖 vulcan salute; U+1F596 +👌 OK hand; U+1F44C +✌ victory hand; U+270C +🤞 crossed fingers; U+1F91E +🤟 love-you gesture; U+1F91F +🤘 sign of the horns; U+1F918 +🤙 call me hand; U+1F919 +👈 backhand index pointing left; U+1F448 +👉 backhand index pointing right; U+1F449 +👆 backhand index pointing up; U+1F446 +🖕 middle finger; U+1F595 +👇 backhand index pointing down; U+1F447 +☝ index pointing up; U+261D +👍 thumbs up; U+1F44D +👎 thumbs down; U+1F44E +✊ raised fist; U+270A +👊 oncoming fist; U+1F44A +🤛 left-facing fist; U+1F91B +🤜 right-facing fist; U+1F91C +👏 clapping hands; U+1F44F +🙌 raising hands; U+1F64C +👐 open hands; U+1F450 +🤲 palms up together; U+1F932 +🤝 handshake; U+1F91D +🙏 folded hands; U+1F64F +✍ writing hand; U+270D +💅 nail polish; U+1F485 +🤳 selfie; U+1F933 +💪 flexed biceps; U+1F4AA +🦵 leg; U+1F9B5 +🦶 foot; U+1F9B6 +👂 ear; U+1F442 +👃 nose; U+1F443 +🧠 brain; U+1F9E0 +🦷 tooth; U+1F9B7 +🦴 bone; U+1F9B4 +👀 eyes; U+1F440 +👁 eye; U+1F441 +👅 tongue; U+1F445 +👄 mouth; U+1F444 +👶 baby; U+1F476 +🧒 child; U+1F9D2 +👦 boy; U+1F466 +👧 girl; U+1F467 +🧑 person; U+1F9D1 +👱 person: blond hair; U+1F471 +👨 man; U+1F468 +👱♂️ man: blond hair; U+1F471 U+200D U+2642 U+FE0F +👨🦰 man: red hair; U+1F468 U+200D U+1F9B0 +👨🦱 man: curly hair; U+1F468 U+200D U+1F9B1 +👨🦳 man: white hair; U+1F468 U+200D U+1F9B3 +👨🦲 man: bald; U+1F468 U+200D U+1F9B2 +🧔 man: beard; U+1F9D4 +👩 woman; U+1F469 +👱♀️ woman: blond hair; U+1F471 U+200D U+2640 U+FE0F +👩🦰 woman: red hair; U+1F469 U+200D U+1F9B0 +👩🦱 woman: curly hair; U+1F469 U+200D U+1F9B1 +👩🦳 woman: white hair; U+1F469 U+200D U+1F9B3 +👩🦲 woman: bald; U+1F469 U+200D U+1F9B2 +🧓 older person; U+1F9D3 +👴 old man; U+1F474 +👵 old woman; U+1F475 +🙍 person frowning; U+1F64D +🙍♂️ man frowning; U+1F64D U+200D U+2642 U+FE0F +🙍♀️ woman frowning; U+1F64D U+200D U+2640 U+FE0F +🙎 person pouting; U+1F64E +🙎♂️ man pouting; U+1F64E U+200D U+2642 U+FE0F +🙎♀️ woman pouting; U+1F64E U+200D U+2640 U+FE0F +🙅 person gesturing NO; U+1F645 +🙅♂️ man gesturing NO; U+1F645 U+200D U+2642 U+FE0F +🙅♀️ woman gesturing NO; U+1F645 U+200D U+2640 U+FE0F +🙆 person gesturing OK; U+1F646 +🙆♂️ man gesturing OK; U+1F646 U+200D U+2642 U+FE0F +🙆♀️ woman gesturing OK; U+1F646 U+200D U+2640 U+FE0F +💁 person tipping hand; U+1F481 +💁♂️ man tipping hand; U+1F481 U+200D U+2642 U+FE0F +💁♀️ woman tipping hand; U+1F481 U+200D U+2640 U+FE0F +🙋 person raising hand; U+1F64B +🙋♂️ man raising hand; U+1F64B U+200D U+2642 U+FE0F +🙋♀️ woman raising hand; U+1F64B U+200D U+2640 U+FE0F +🙇 person bowing; U+1F647 +🙇♂️ man bowing; U+1F647 U+200D U+2642 U+FE0F +🙇♀️ woman bowing; U+1F647 U+200D U+2640 U+FE0F +🤦 person facepalming; U+1F926 +🤦♂️ man facepalming; U+1F926 U+200D U+2642 U+FE0F +🤦♀️ woman facepalming; U+1F926 U+200D U+2640 U+FE0F +🤷 person shrugging; U+1F937 +🤷♂️ man shrugging; U+1F937 U+200D U+2642 U+FE0F +🤷♀️ woman shrugging; U+1F937 U+200D U+2640 U+FE0F +👨⚕️ man health worker; U+1F468 U+200D U+2695 U+FE0F +👩⚕️ woman health worker; U+1F469 U+200D U+2695 U+FE0F +👨🎓 man student; U+1F468 U+200D U+1F393 +👩🎓 woman student; U+1F469 U+200D U+1F393 +👨🏫 man teacher; U+1F468 U+200D U+1F3EB +👩🏫 woman teacher; U+1F469 U+200D U+1F3EB +👨⚖️ man judge; U+1F468 U+200D U+2696 U+FE0F +👩⚖️ woman judge; U+1F469 U+200D U+2696 U+FE0F +👨🌾 man farmer; U+1F468 U+200D U+1F33E +👩🌾 woman farmer; U+1F469 U+200D U+1F33E +👨🍳 man cook; U+1F468 U+200D U+1F373 +👩🍳 woman cook; U+1F469 U+200D U+1F373 +👨🔧 man mechanic; U+1F468 U+200D U+1F527 +👩🔧 woman mechanic; U+1F469 U+200D U+1F527 +👨🏭 man factory worker; U+1F468 U+200D U+1F3ED +👩🏭 woman factory worker; U+1F469 U+200D U+1F3ED +👨💼 man office worker; U+1F468 U+200D U+1F4BC +👩💼 woman office worker; U+1F469 U+200D U+1F4BC +👨🔬 man scientist; U+1F468 U+200D U+1F52C +👩🔬 woman scientist; U+1F469 U+200D U+1F52C +👨💻 man technologist; U+1F468 U+200D U+1F4BB +👩💻 woman technologist; U+1F469 U+200D U+1F4BB +👨🎤 man singer; U+1F468 U+200D U+1F3A4 +👩🎤 woman singer; U+1F469 U+200D U+1F3A4 +👨🎨 man artist; U+1F468 U+200D U+1F3A8 +👩🎨 woman artist; U+1F469 U+200D U+1F3A8 +👨✈️ man pilot; U+1F468 U+200D U+2708 U+FE0F +👩✈️ woman pilot; U+1F469 U+200D U+2708 U+FE0F +👨🚀 man astronaut; U+1F468 U+200D U+1F680 +👩🚀 woman astronaut; U+1F469 U+200D U+1F680 +👨🚒 man firefighter; U+1F468 U+200D U+1F692 +👩🚒 woman firefighter; U+1F469 U+200D U+1F692 +👮 police officer; U+1F46E +👮♂️ man police officer; U+1F46E U+200D U+2642 U+FE0F +👮♀️ woman police officer; U+1F46E U+200D U+2640 U+FE0F +🕵 detective; U+1F575 +🕵️♂️ man detective; U+1F575 U+FE0F U+200D U+2642 U+FE0F +🕵️♀️ woman detective; U+1F575 U+FE0F U+200D U+2640 U+FE0F +💂 guard; U+1F482 +💂♂️ man guard; U+1F482 U+200D U+2642 U+FE0F +💂♀️ woman guard; U+1F482 U+200D U+2640 U+FE0F +👷 construction worker; U+1F477 +👷♂️ man construction worker; U+1F477 U+200D U+2642 U+FE0F +👷♀️ woman construction worker; U+1F477 U+200D U+2640 U+FE0F +🤴 prince; U+1F934 +👸 princess; U+1F478 +👳 person wearing turban; U+1F473 +👳♂️ man wearing turban; U+1F473 U+200D U+2642 U+FE0F +👳♀️ woman wearing turban; U+1F473 U+200D U+2640 U+FE0F +👲 man with Chinese cap; U+1F472 +🧕 woman with headscarf; U+1F9D5 +🤵 man in tuxedo; U+1F935 +👰 bride with veil; U+1F470 +🤰 pregnant woman; U+1F930 +🤱 breast-feeding; U+1F931 +👼 baby angel; U+1F47C +🎅 Santa Claus; U+1F385 +🤶 Mrs. Claus; U+1F936 +🦸 superhero; U+1F9B8 +🦸♂️ man superhero; U+1F9B8 U+200D U+2642 U+FE0F +🦸♀️ woman superhero; U+1F9B8 U+200D U+2640 U+FE0F +🦹 supervillain; U+1F9B9 +🦹♂️ man supervillain; U+1F9B9 U+200D U+2642 U+FE0F +🦹♀️ woman supervillain; U+1F9B9 U+200D U+2640 U+FE0F +🧙 mage; U+1F9D9 +🧙♂️ man mage; U+1F9D9 U+200D U+2642 U+FE0F +🧙♀️ woman mage; U+1F9D9 U+200D U+2640 U+FE0F +🧚 fairy; U+1F9DA +🧚♂️ man fairy; U+1F9DA U+200D U+2642 U+FE0F +🧚♀️ woman fairy; U+1F9DA U+200D U+2640 U+FE0F +🧛 vampire; U+1F9DB +🧛♂️ man vampire; U+1F9DB U+200D U+2642 U+FE0F +🧛♀️ woman vampire; U+1F9DB U+200D U+2640 U+FE0F +🧜 merperson; U+1F9DC +🧜♂️ merman; U+1F9DC U+200D U+2642 U+FE0F +🧜♀️ mermaid; U+1F9DC U+200D U+2640 U+FE0F +🧝 elf; U+1F9DD +🧝♂️ man elf; U+1F9DD U+200D U+2642 U+FE0F +🧝♀️ woman elf; U+1F9DD U+200D U+2640 U+FE0F +🧞 genie; U+1F9DE +🧞♂️ man genie; U+1F9DE U+200D U+2642 U+FE0F +🧞♀️ woman genie; U+1F9DE U+200D U+2640 U+FE0F +🧟 zombie; U+1F9DF +🧟♂️ man zombie; U+1F9DF U+200D U+2642 U+FE0F +🧟♀️ woman zombie; U+1F9DF U+200D U+2640 U+FE0F +💆 person getting massage; U+1F486 +💆♂️ man getting massage; U+1F486 U+200D U+2642 U+FE0F +💆♀️ woman getting massage; U+1F486 U+200D U+2640 U+FE0F +💇 person getting haircut; U+1F487 +💇♂️ man getting haircut; U+1F487 U+200D U+2642 U+FE0F +💇♀️ woman getting haircut; U+1F487 U+200D U+2640 U+FE0F +🚶 person walking; U+1F6B6 +🚶♂️ man walking; U+1F6B6 U+200D U+2642 U+FE0F +🚶♀️ woman walking; U+1F6B6 U+200D U+2640 U+FE0F +🏃 person running; U+1F3C3 +🏃♂️ man running; U+1F3C3 U+200D U+2642 U+FE0F +🏃♀️ woman running; U+1F3C3 U+200D U+2640 U+FE0F +💃 woman dancing; U+1F483 +🕺 man dancing; U+1F57A +🕴 man in suit levitating; U+1F574 +👯 people with bunny ears; U+1F46F +👯♂️ men with bunny ears; U+1F46F U+200D U+2642 U+FE0F +👯♀️ women with bunny ears; U+1F46F U+200D U+2640 U+FE0F +🧖 person in steamy room; U+1F9D6 +🧖♂️ man in steamy room; U+1F9D6 U+200D U+2642 U+FE0F +🧖♀️ woman in steamy room; U+1F9D6 U+200D U+2640 U+FE0F +🧗 person climbing; U+1F9D7 +🧗♂️ man climbing; U+1F9D7 U+200D U+2642 U+FE0F +🧗♀️ woman climbing; U+1F9D7 U+200D U+2640 U+FE0F +🤺 person fencing; U+1F93A +🏇 horse racing; U+1F3C7 +⛷ skier; U+26F7 +🏂 snowboarder; U+1F3C2 +🏌 person golfing; U+1F3CC +🏌️♂️ man golfing; U+1F3CC U+FE0F U+200D U+2642 U+FE0F +🏌️♀️ woman golfing; U+1F3CC U+FE0F U+200D U+2640 U+FE0F +🏄 person surfing; U+1F3C4 +🏄♂️ man surfing; U+1F3C4 U+200D U+2642 U+FE0F +🏄♀️ woman surfing; U+1F3C4 U+200D U+2640 U+FE0F +🚣 person rowing boat; U+1F6A3 +🚣♂️ man rowing boat; U+1F6A3 U+200D U+2642 U+FE0F +🚣♀️ woman rowing boat; U+1F6A3 U+200D U+2640 U+FE0F +🏊 person swimming; U+1F3CA +🏊♂️ man swimming; U+1F3CA U+200D U+2642 U+FE0F +🏊♀️ woman swimming; U+1F3CA U+200D U+2640 U+FE0F +⛹ person bouncing ball; U+26F9 +⛹️♂️ man bouncing ball; U+26F9 U+FE0F U+200D U+2642 U+FE0F +⛹️♀️ woman bouncing ball; U+26F9 U+FE0F U+200D U+2640 U+FE0F +🏋 person lifting weights; U+1F3CB +🏋️♂️ man lifting weights; U+1F3CB U+FE0F U+200D U+2642 U+FE0F +🏋️♀️ woman lifting weights; U+1F3CB U+FE0F U+200D U+2640 U+FE0F +🚴 person biking; U+1F6B4 +🚴♂️ man biking; U+1F6B4 U+200D U+2642 U+FE0F +🚴♀️ woman biking; U+1F6B4 U+200D U+2640 U+FE0F +🚵 person mountain biking; U+1F6B5 +🚵♂️ man mountain biking; U+1F6B5 U+200D U+2642 U+FE0F +🚵♀️ woman mountain biking; U+1F6B5 U+200D U+2640 U+FE0F +🤸 person cartwheeling; U+1F938 +🤸♂️ man cartwheeling; U+1F938 U+200D U+2642 U+FE0F +🤸♀️ woman cartwheeling; U+1F938 U+200D U+2640 U+FE0F +🤼 people wrestling; U+1F93C +🤼♂️ men wrestling; U+1F93C U+200D U+2642 U+FE0F +🤼♀️ women wrestling; U+1F93C U+200D U+2640 U+FE0F +🤽 person playing water polo; U+1F93D +🤽♂️ man playing water polo; U+1F93D U+200D U+2642 U+FE0F +🤽♀️ woman playing water polo; U+1F93D U+200D U+2640 U+FE0F +🤾 person playing handball; U+1F93E +🤾♂️ man playing handball; U+1F93E U+200D U+2642 U+FE0F +🤾♀️ woman playing handball; U+1F93E U+200D U+2640 U+FE0F +🤹 person juggling; U+1F939 +🤹♂️ man juggling; U+1F939 U+200D U+2642 U+FE0F +🤹♀️ woman juggling; U+1F939 U+200D U+2640 U+FE0F +🧘 person in lotus position; U+1F9D8 +🧘♂️ man in lotus position; U+1F9D8 U+200D U+2642 U+FE0F +🧘♀️ woman in lotus position; U+1F9D8 U+200D U+2640 U+FE0F +🛀 person taking bath; U+1F6C0 +🛌 person in bed; U+1F6CC +👭 women holding hands; U+1F46D +👫 woman and man holding hands; U+1F46B +👬 men holding hands; U+1F46C +💏 kiss; U+1F48F +👩❤️💋👨 kiss: woman, man; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468 +👨❤️💋👨 kiss: man, man; U+1F468 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F468 +👩❤️💋👩 kiss: woman, woman; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F48B U+200D U+1F469 +💑 couple with heart; U+1F491 +👩❤️👨 couple with heart: woman, man; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F468 +👨❤️👨 couple with heart: man, man; U+1F468 U+200D U+2764 U+FE0F U+200D U+1F468 +👩❤️👩 couple with heart: woman, woman; U+1F469 U+200D U+2764 U+FE0F U+200D U+1F469 +👪 family; U+1F46A +👨👩👦 family: man, woman, boy; U+1F468 U+200D U+1F469 U+200D U+1F466 +👨👩👧 family: man, woman, girl; U+1F468 U+200D U+1F469 U+200D U+1F467 +👨👩👧👦 family: man, woman, girl, boy; U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466 +👨👩👦👦 family: man, woman, boy, boy; U+1F468 U+200D U+1F469 U+200D U+1F466 U+200D U+1F466 +👨👩👧👧 family: man, woman, girl, girl; U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F467 +👨👨👦 family: man, man, boy; U+1F468 U+200D U+1F468 U+200D U+1F466 +👨👨👧 family: man, man, girl; U+1F468 U+200D U+1F468 U+200D U+1F467 +👨👨👧👦 family: man, man, girl, boy; U+1F468 U+200D U+1F468 U+200D U+1F467 U+200D U+1F466 +👨👨👦👦 family: man, man, boy, boy; U+1F468 U+200D U+1F468 U+200D U+1F466 U+200D U+1F466 +👨👨👧👧 family: man, man, girl, girl; U+1F468 U+200D U+1F468 U+200D U+1F467 U+200D U+1F467 +👩👩👦 family: woman, woman, boy; U+1F469 U+200D U+1F469 U+200D U+1F466 +👩👩👧 family: woman, woman, girl; U+1F469 U+200D U+1F469 U+200D U+1F467 +👩👩👧👦 family: woman, woman, girl, boy; U+1F469 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466 +👩👩👦👦 family: woman, woman, boy, boy; U+1F469 U+200D U+1F469 U+200D U+1F466 U+200D U+1F466 +👩👩👧👧 family: woman, woman, girl, girl; U+1F469 U+200D U+1F469 U+200D U+1F467 U+200D U+1F467 +👨👦 family: man, boy; U+1F468 U+200D U+1F466 +👨👦👦 family: man, boy, boy; U+1F468 U+200D U+1F466 U+200D U+1F466 +👨👧 family: man, girl; U+1F468 U+200D U+1F467 +👨👧👦 family: man, girl, boy; U+1F468 U+200D U+1F467 U+200D U+1F466 +👨👧👧 family: man, girl, girl; U+1F468 U+200D U+1F467 U+200D U+1F467 +👩👦 family: woman, boy; U+1F469 U+200D U+1F466 +👩👦👦 family: woman, boy, boy; U+1F469 U+200D U+1F466 U+200D U+1F466 +👩👧 family: woman, girl; U+1F469 U+200D U+1F467 +👩👧👦 family: woman, girl, boy; U+1F469 U+200D U+1F467 U+200D U+1F466 +👩👧👧 family: woman, girl, girl; U+1F469 U+200D U+1F467 U+200D U+1F467 +🗣 speaking head; U+1F5E3 +👤 bust in silhouette; U+1F464 +👥 busts in silhouette; U+1F465 +👣 footprints; U+1F463 +🦰 red hair; U+1F9B0 +🦱 curly hair; U+1F9B1 +🦳 white hair; U+1F9B3 +🦲 bald; U+1F9B2 +🐵 monkey face; U+1F435 +🐒 monkey; U+1F412 +🦍 gorilla; U+1F98D +🐶 dog face; U+1F436 +🐕 dog; U+1F415 +🐩 poodle; U+1F429 +🐺 wolf face; U+1F43A +🦊 fox face; U+1F98A +🦝 raccoon; U+1F99D +🐱 cat face; U+1F431 +🐈 cat; U+1F408 +🦁 lion face; U+1F981 +🐯 tiger face; U+1F42F +🐅 tiger; U+1F405 +🐆 leopard; U+1F406 +🐴 horse face; U+1F434 +🐎 horse; U+1F40E +🦄 unicorn face; U+1F984 +🦓 zebra; U+1F993 +🦌 deer; U+1F98C +🐮 cow face; U+1F42E +🐂 ox; U+1F402 +🐃 water buffalo; U+1F403 +🐄 cow; U+1F404 +🐷 pig face; U+1F437 +🐖 pig; U+1F416 +🐗 boar; U+1F417 +🐽 pig nose; U+1F43D +🐏 ram; U+1F40F +🐑 ewe; U+1F411 +🐐 goat; U+1F410 +🐪 camel; U+1F42A +🐫 two-hump camel; U+1F42B +🦙 llama; U+1F999 +🦒 giraffe; U+1F992 +🐘 elephant; U+1F418 +🦏 rhinoceros; U+1F98F +🦛 hippopotamus; U+1F99B +🐭 mouse face; U+1F42D +🐁 mouse; U+1F401 +🐀 rat; U+1F400 +🐹 hamster face; U+1F439 +🐰 rabbit face; U+1F430 +🐇 rabbit; U+1F407 +🐿 chipmunk; U+1F43F +🦔 hedgehog; U+1F994 +🦇 bat; U+1F987 +🐻 bear face; U+1F43B +🐨 koala; U+1F428 +🐼 panda face; U+1F43C +🦘 kangaroo; U+1F998 +🦡 badger; U+1F9A1 +🐾 paw prints; U+1F43E +🦃 turkey; U+1F983 +🐔 chicken; U+1F414 +🐓 rooster; U+1F413 +🐣 hatching chick; U+1F423 +🐤 baby chick; U+1F424 +🐥 front-facing baby chick; U+1F425 +🐦 bird; U+1F426 +🐧 penguin; U+1F427 +🕊 dove; U+1F54A +🦅 eagle; U+1F985 +🦆 duck; U+1F986 +🦢 swan; U+1F9A2 +🦉 owl; U+1F989 +🦚 peacock; U+1F99A +🦜 parrot; U+1F99C +🐸 frog face; U+1F438 +🐊 crocodile; U+1F40A +🐢 turtle; U+1F422 +🦎 lizard; U+1F98E +🐍 snake; U+1F40D +🐲 dragon face; U+1F432 +🐉 dragon; U+1F409 +🦕 sauropod; U+1F995 +🦖 T-Rex; U+1F996 +🐳 spouting whale; U+1F433 +🐋 whale; U+1F40B +🐬 dolphin; U+1F42C +🐟 fish; U+1F41F +🐠 tropical fish; U+1F420 +🐡 blowfish; U+1F421 +🦈 shark; U+1F988 +🐙 octopus; U+1F419 +🐚 spiral shell; U+1F41A +🐌 snail; U+1F40C +🦋 butterfly; U+1F98B +🐛 bug; U+1F41B +🐜 ant; U+1F41C +🐝 honeybee; U+1F41D +🐞 lady beetle; U+1F41E +🦗 cricket; U+1F997 +🕷 spider; U+1F577 +🕸 spider web; U+1F578 +🦂 scorpion; U+1F982 +🦟 mosquito; U+1F99F +🦠 microbe; U+1F9A0 +💐 bouquet; U+1F490 +🌸 cherry blossom; U+1F338 +💮 white flower; U+1F4AE +🏵 rosette; U+1F3F5 +🌹 rose; U+1F339 +🥀 wilted flower; U+1F940 +🌺 hibiscus; U+1F33A +🌻 sunflower; U+1F33B +🌼 blossom; U+1F33C +🌷 tulip; U+1F337 +🌱 seedling; U+1F331 +🌲 evergreen tree; U+1F332 +🌳 deciduous tree; U+1F333 +🌴 palm tree; U+1F334 +🌵 cactus; U+1F335 +🌾 sheaf of rice; U+1F33E +🌿 herb; U+1F33F +☘ shamrock; U+2618 +🍀 four leaf clover; U+1F340 +🍁 maple leaf; U+1F341 +🍂 fallen leaf; U+1F342 +🍃 leaf fluttering in wind; U+1F343 +🍇 grapes; U+1F347 +🍈 melon; U+1F348 +🍉 watermelon; U+1F349 +🍊 tangerine; U+1F34A +🍋 lemon; U+1F34B +🍌 banana; U+1F34C +🍍 pineapple; U+1F34D +🥭 mango; U+1F96D +🍎 red apple; U+1F34E +🍏 green apple; U+1F34F +🍐 pear; U+1F350 +🍑 peach; U+1F351 +🍒 cherries; U+1F352 +🍓 strawberry; U+1F353 +🥝 kiwi fruit; U+1F95D +🍅 tomato; U+1F345 +🥥 coconut; U+1F965 +🥑 avocado; U+1F951 +🍆 eggplant; U+1F346 +🥔 potato; U+1F954 +🥕 carrot; U+1F955 +🌽 ear of corn; U+1F33D +🌶 hot pepper; U+1F336 +🥒 cucumber; U+1F952 +🥬 leafy green; U+1F96C +🥦 broccoli; U+1F966 +🍄 mushroom; U+1F344 +🥜 peanuts; U+1F95C +🌰 chestnut; U+1F330 +🍞 bread; U+1F35E +🥐 croissant; U+1F950 +🥖 baguette bread; U+1F956 +🥨 pretzel; U+1F968 +🥯 bagel; U+1F96F +🥞 pancakes; U+1F95E +🧀 cheese wedge; U+1F9C0 +🍖 meat on bone; U+1F356 +🍗 poultry leg; U+1F357 +🥩 cut of meat; U+1F969 +🥓 bacon; U+1F953 +🍔 hamburger; U+1F354 +🍟 french fries; U+1F35F +🍕 pizza; U+1F355 +🌭 hot dog; U+1F32D +🥪 sandwich; U+1F96A +🌮 taco; U+1F32E +🌯 burrito; U+1F32F +🥙 stuffed flatbread; U+1F959 +🥚 egg; U+1F95A +🍳 cooking; U+1F373 +🥘 shallow pan of food; U+1F958 +🍲 pot of food; U+1F372 +🥣 bowl with spoon; U+1F963 +🥗 green salad; U+1F957 +🍿 popcorn; U+1F37F +🧂 salt; U+1F9C2 +🥫 canned food; U+1F96B +🍱 bento box; U+1F371 +🍘 rice cracker; U+1F358 +🍙 rice ball; U+1F359 +🍚 cooked rice; U+1F35A +🍛 curry rice; U+1F35B +🍜 steaming bowl; U+1F35C +🍝 spaghetti; U+1F35D +🍠 roasted sweet potato; U+1F360 +🍢 oden; U+1F362 +🍣 sushi; U+1F363 +🍤 fried shrimp; U+1F364 +🍥 fish cake with swirl; U+1F365 +🥮 moon cake; U+1F96E +🍡 dango; U+1F361 +🥟 dumpling; U+1F95F +🥠 fortune cookie; U+1F960 +🥡 takeout box; U+1F961 +🦀 crab; U+1F980 +🦞 lobster; U+1F99E +🦐 shrimp; U+1F990 +🦑 squid; U+1F991 +🍦 soft ice cream; U+1F366 +🍧 shaved ice; U+1F367 +🍨 ice cream; U+1F368 +🍩 doughnut; U+1F369 +🍪 cookie; U+1F36A +🎂 birthday cake; U+1F382 +🍰 shortcake; U+1F370 +🧁 cupcake; U+1F9C1 +🥧 pie; U+1F967 +🍫 chocolate bar; U+1F36B +🍬 candy; U+1F36C +🍭 lollipop; U+1F36D +🍮 custard; U+1F36E +🍯 honey pot; U+1F36F +🍼 baby bottle; U+1F37C +🥛 glass of milk; U+1F95B +☕ hot beverage; U+2615 +🍵 teacup without handle; U+1F375 +🍶 sake; U+1F376 +🍾 bottle with popping cork; U+1F37E +🍷 wine glass; U+1F377 +🍸 cocktail glass; U+1F378 +🍹 tropical drink; U+1F379 +🍺 beer mug; U+1F37A +🍻 clinking beer mugs; U+1F37B +🥂 clinking glasses; U+1F942 +🥃 tumbler glass; U+1F943 +🥤 cup with straw; U+1F964 +🥢 chopsticks; U+1F962 +🍽 fork and knife with plate; U+1F37D +🍴 fork and knife; U+1F374 +🥄 spoon; U+1F944 +🔪 kitchen knife; U+1F52A +🏺 amphora; U+1F3FA +🌍 globe showing Europe-Africa; U+1F30D +🌎 globe showing Americas; U+1F30E +🌏 globe showing Asia-Australia; U+1F30F +🌐 globe with meridians; U+1F310 +🗺 world map; U+1F5FA +🗾 map of Japan; U+1F5FE +🧭 compass; U+1F9ED +🏔 snow-capped mountain; U+1F3D4 +⛰ mountain; U+26F0 +🌋 volcano; U+1F30B +🗻 mount fuji; U+1F5FB +🏕 camping; U+1F3D5 +🏖 beach with umbrella; U+1F3D6 +🏜 desert; U+1F3DC +🏝 desert island; U+1F3DD +🏞 national park; U+1F3DE +🏟 stadium; U+1F3DF +🏛 classical building; U+1F3DB +🏗 building construction; U+1F3D7 +🧱 brick; U+1F9F1 +🏘 houses; U+1F3D8 +🏚 derelict house; U+1F3DA +🏠 house; U+1F3E0 +🏡 house with garden; U+1F3E1 +🏢 office building; U+1F3E2 +🏣 Japanese post office; U+1F3E3 +🏤 post office; U+1F3E4 +🏥 hospital; U+1F3E5 +🏦 bank; U+1F3E6 +🏨 hotel; U+1F3E8 +🏩 love hotel; U+1F3E9 +🏪 convenience store; U+1F3EA +🏫 school; U+1F3EB +🏬 department store; U+1F3EC +🏭 factory; U+1F3ED +🏯 Japanese castle; U+1F3EF +🏰 castle; U+1F3F0 +💒 wedding; U+1F492 +🗼 Tokyo tower; U+1F5FC +🗽 Statue of Liberty; U+1F5FD +⛪ church; U+26EA +🕌 mosque; U+1F54C +🕍 synagogue; U+1F54D +⛩ shinto shrine; U+26E9 +🕋 kaaba; U+1F54B +⛲ fountain; U+26F2 +⛺ tent; U+26FA +🌁 foggy; U+1F301 +🌃 night with stars; U+1F303 +🏙 cityscape; U+1F3D9 +🌄 sunrise over mountains; U+1F304 +🌅 sunrise; U+1F305 +🌆 cityscape at dusk; U+1F306 +🌇 sunset; U+1F307 +🌉 bridge at night; U+1F309 +♨ hot springs; U+2668 +🌌 milky way; U+1F30C +🎠 carousel horse; U+1F3A0 +🎡 ferris wheel; U+1F3A1 +🎢 roller coaster; U+1F3A2 +💈 barber pole; U+1F488 +🎪 circus tent; U+1F3AA +🚂 locomotive; U+1F682 +🚃 railway car; U+1F683 +🚄 high-speed train; U+1F684 +🚅 bullet train; U+1F685 +🚆 train; U+1F686 +🚇 metro; U+1F687 +🚈 light rail; U+1F688 +🚉 station; U+1F689 +🚊 tram; U+1F68A +🚝 monorail; U+1F69D +🚞 mountain railway; U+1F69E +🚋 tram car; U+1F68B +🚌 bus; U+1F68C +🚍 oncoming bus; U+1F68D +🚎 trolleybus; U+1F68E +🚐 minibus; U+1F690 +🚑 ambulance; U+1F691 +🚒 fire engine; U+1F692 +🚓 police car; U+1F693 +🚔 oncoming police car; U+1F694 +🚕 taxi; U+1F695 +🚖 oncoming taxi; U+1F696 +🚗 automobile; U+1F697 +🚘 oncoming automobile; U+1F698 +🚙 sport utility vehicle; U+1F699 +🚚 delivery truck; U+1F69A +🚛 articulated lorry; U+1F69B +🚜 tractor; U+1F69C +🏎 racing car; U+1F3CE +🏍 motorcycle; U+1F3CD +🛵 motor scooter; U+1F6F5 +🚲 bicycle; U+1F6B2 +🛴 kick scooter; U+1F6F4 +🛹 skateboard; U+1F6F9 +🚏 bus stop; U+1F68F +🛣 motorway; U+1F6E3 +🛤 railway track; U+1F6E4 +🛢 oil drum; U+1F6E2 +⛽ fuel pump; U+26FD +🚨 police car light; U+1F6A8 +🚥 horizontal traffic light; U+1F6A5 +🚦 vertical traffic light; U+1F6A6 +🛑 stop sign; U+1F6D1 +🚧 construction; U+1F6A7 +⚓ anchor; U+2693 +⛵ sailboat; U+26F5 +🛶 canoe; U+1F6F6 +🚤 speedboat; U+1F6A4 +🛳 passenger ship; U+1F6F3 +⛴ ferry; U+26F4 +🛥 motor boat; U+1F6E5 +🚢 ship; U+1F6A2 +✈ airplane; U+2708 +🛩 small airplane; U+1F6E9 +🛫 airplane departure; U+1F6EB +🛬 airplane arrival; U+1F6EC +💺 seat; U+1F4BA +🚁 helicopter; U+1F681 +🚟 suspension railway; U+1F69F +🚠 mountain cableway; U+1F6A0 +🚡 aerial tramway; U+1F6A1 +🛰 satellite; U+1F6F0 +🚀 rocket; U+1F680 +🛸 flying saucer; U+1F6F8 +🛎 bellhop bell; U+1F6CE +🧳 luggage; U+1F9F3 +⌛ hourglass done; U+231B +⏳ hourglass not done; U+23F3 +⌚ watch; U+231A +⏰ alarm clock; U+23F0 +⏱ stopwatch; U+23F1 +⏲ timer clock; U+23F2 +🕰 mantelpiece clock; U+1F570 +🕛 twelve o’clock; U+1F55B +🕧 twelve-thirty; U+1F567 +🕐 one o’clock; U+1F550 +🕜 one-thirty; U+1F55C +🕑 two o’clock; U+1F551 +🕝 two-thirty; U+1F55D +🕒 three o’clock; U+1F552 +🕞 three-thirty; U+1F55E +🕓 four o’clock; U+1F553 +🕟 four-thirty; U+1F55F +🕔 five o’clock; U+1F554 +🕠 five-thirty; U+1F560 +🕕 six o’clock; U+1F555 +🕡 six-thirty; U+1F561 +🕖 seven o’clock; U+1F556 +🕢 seven-thirty; U+1F562 +🕗 eight o’clock; U+1F557 +🕣 eight-thirty; U+1F563 +🕘 nine o’clock; U+1F558 +🕤 nine-thirty; U+1F564 +🕙 ten o’clock; U+1F559 +🕥 ten-thirty; U+1F565 +🕚 eleven o’clock; U+1F55A +🕦 eleven-thirty; U+1F566 +🌑 new moon; U+1F311 +🌒 waxing crescent moon; U+1F312 +🌓 first quarter moon; U+1F313 +🌔 waxing gibbous moon; U+1F314 +🌕 full moon; U+1F315 +🌖 waning gibbous moon; U+1F316 +🌗 last quarter moon; U+1F317 +🌘 waning crescent moon; U+1F318 +🌙 crescent moon; U+1F319 +🌚 new moon face; U+1F31A +🌛 first quarter moon face; U+1F31B +🌜 last quarter moon face; U+1F31C +🌡 thermometer; U+1F321 +☀ sun; U+2600 +🌝 full moon face; U+1F31D +🌞 sun with face; U+1F31E +⭐ star; U+2B50 +🌟 glowing star; U+1F31F +🌠 shooting star; U+1F320 +☁ cloud; U+2601 +⛅ sun behind cloud; U+26C5 +⛈ cloud with lightning and rain; U+26C8 +🌤 sun behind small cloud; U+1F324 +🌥 sun behind large cloud; U+1F325 +🌦 sun behind rain cloud; U+1F326 +🌧 cloud with rain; U+1F327 +🌨 cloud with snow; U+1F328 +🌩 cloud with lightning; U+1F329 +🌪 tornado; U+1F32A +🌫 fog; U+1F32B +🌬 wind face; U+1F32C +🌀 cyclone; U+1F300 +🌈 rainbow; U+1F308 +🌂 closed umbrella; U+1F302 +☂ umbrella; U+2602 +☔ umbrella with rain drops; U+2614 +⛱ umbrella on ground; U+26F1 +⚡ high voltage; U+26A1 +❄ snowflake; U+2744 +☃ snowman; U+2603 +⛄ snowman without snow; U+26C4 +☄ comet; U+2604 +🔥 fire; U+1F525 +💧 droplet; U+1F4A7 +🌊 water wave; U+1F30A +🎃 jack-o-lantern; U+1F383 +🎄 Christmas tree; U+1F384 +🎆 fireworks; U+1F386 +🎇 sparkler; U+1F387 +🧨 firecracker; U+1F9E8 +✨ sparkles; U+2728 +🎈 balloon; U+1F388 +🎉 party popper; U+1F389 +🎊 confetti ball; U+1F38A +🎋 tanabata tree; U+1F38B +🎍 pine decoration; U+1F38D +🎎 Japanese dolls; U+1F38E +🎏 carp streamer; U+1F38F +🎐 wind chime; U+1F390 +🎑 moon viewing ceremony; U+1F391 +🧧 red envelope; U+1F9E7 +🎀 ribbon; U+1F380 +🎁 wrapped gift; U+1F381 +🎗 reminder ribbon; U+1F397 +🎟 admission tickets; U+1F39F +🎫 ticket; U+1F3AB +🎖 military medal; U+1F396 +🏆 trophy; U+1F3C6 +🏅 sports medal; U+1F3C5 +1st place medal; U+1F947 🥇 +2nd place medal; U+1F948 🥈 +3rd place medal; U+1F949 🥉 +⚽ soccer ball; U+26BD +⚾ baseball; U+26BE +🥎 softball; U+1F94E +🏀 basketball; U+1F3C0 +🏐 volleyball; U+1F3D0 +🏈 american football; U+1F3C8 +🏉 rugby football; U+1F3C9 +🎾 tennis; U+1F3BE +🥏 flying disc; U+1F94F +🎳 bowling; U+1F3B3 +🏏 cricket game; U+1F3CF +🏑 field hockey; U+1F3D1 +🏒 ice hockey; U+1F3D2 +🥍 lacrosse; U+1F94D +🏓 ping pong; U+1F3D3 +🏸 badminton; U+1F3F8 +🥊 boxing glove; U+1F94A +🥋 martial arts uniform; U+1F94B +🥅 goal net; U+1F945 +⛳ flag in hole; U+26F3 +⛸ ice skate; U+26F8 +🎣 fishing pole; U+1F3A3 +🎽 running shirt; U+1F3BD +🎿 skis; U+1F3BF +🛷 sled; U+1F6F7 +🥌 curling stone; U+1F94C +🎯 direct hit; U+1F3AF +🎱 pool 8 ball; U+1F3B1 +🔮 crystal ball; U+1F52E +🧿 nazar amulet; U+1F9FF +🎮 video game; U+1F3AE +🕹 joystick; U+1F579 +🎰 slot machine; U+1F3B0 +🎲 game die; U+1F3B2 +🧩 jigsaw; U+1F9E9 +🧸 teddy bear; U+1F9F8 +♠ spade suit; U+2660 +♥ heart suit; U+2665 +♦ diamond suit; U+2666 +♣ club suit; U+2663 +♟ chess pawn; U+265F +🃏 joker; U+1F0CF +🀄 mahjong red dragon; U+1F004 +🎴 flower playing cards; U+1F3B4 +🎭 performing arts; U+1F3AD +🖼 framed picture; U+1F5BC +🎨 artist palette; U+1F3A8 +🧵 thread; U+1F9F5 +🧶 yarn; U+1F9F6 +👓 glasses; U+1F453 +🕶 sunglasses; U+1F576 +🥽 goggles; U+1F97D +🥼 lab coat; U+1F97C +👔 necktie; U+1F454 +👕 t-shirt; U+1F455 +👖 jeans; U+1F456 +🧣 scarf; U+1F9E3 +🧤 gloves; U+1F9E4 +🧥 coat; U+1F9E5 +🧦 socks; U+1F9E6 +👗 dress; U+1F457 +👘 kimono; U+1F458 +👙 bikini; U+1F459 +👚 woman’s clothes; U+1F45A +👛 purse; U+1F45B +👜 handbag; U+1F45C +👝 clutch bag; U+1F45D +🛍 shopping bags; U+1F6CD +🎒 backpack; U+1F392 +👞 man’s shoe; U+1F45E +👟 running shoe; U+1F45F +🥾 hiking boot; U+1F97E +🥿 flat shoe; U+1F97F +👠 high-heeled shoe; U+1F460 +👡 woman’s sandal; U+1F461 +👢 woman’s boot; U+1F462 +👑 crown; U+1F451 +👒 woman’s hat; U+1F452 +🎩 top hat; U+1F3A9 +🎓 graduation cap; U+1F393 +🧢 billed cap; U+1F9E2 +⛑ rescue worker’s helmet; U+26D1 +📿 prayer beads; U+1F4FF +💄 lipstick; U+1F484 +💍 ring; U+1F48D +💎 gem stone; U+1F48E +🔇 muted speaker; U+1F507 +🔈 speaker low volume; U+1F508 +🔉 speaker medium volume; U+1F509 +🔊 speaker high volume; U+1F50A +📢 loudspeaker; U+1F4E2 +📣 megaphone; U+1F4E3 +📯 postal horn; U+1F4EF +🔔 bell; U+1F514 +🔕 bell with slash; U+1F515 +🎼 musical score; U+1F3BC +🎵 musical note; U+1F3B5 +🎶 musical notes; U+1F3B6 +🎙 studio microphone; U+1F399 +🎚 level slider; U+1F39A +🎛 control knobs; U+1F39B +🎤 microphone; U+1F3A4 +🎧 headphone; U+1F3A7 +📻 radio; U+1F4FB +🎷 saxophone; U+1F3B7 +🎸 guitar; U+1F3B8 +🎹 musical keyboard; U+1F3B9 +🎺 trumpet; U+1F3BA +🎻 violin; U+1F3BB +🥁 drum; U+1F941 +📱 mobile phone; U+1F4F1 +📲 mobile phone with arrow; U+1F4F2 +☎ telephone; U+260E +📞 telephone receiver; U+1F4DE +📟 pager; U+1F4DF +📠 fax machine; U+1F4E0 +🔋 battery; U+1F50B +🔌 electric plug; U+1F50C +💻 laptop computer; U+1F4BB +🖥 desktop computer; U+1F5A5 +🖨 printer; U+1F5A8 +⌨ keyboard; U+2328 +🖱 computer mouse; U+1F5B1 +🖲 trackball; U+1F5B2 +💽 computer disk; U+1F4BD +💾 floppy disk; U+1F4BE +💿 optical disk; U+1F4BF +📀 dvd; U+1F4C0 +🧮 abacus; U+1F9EE +🎥 movie camera; U+1F3A5 +🎞 film frames; U+1F39E +📽 film projector; U+1F4FD +🎬 clapper board; U+1F3AC +📺 television; U+1F4FA +📷 camera; U+1F4F7 +📸 camera with flash; U+1F4F8 +📹 video camera; U+1F4F9 +📼 videocassette; U+1F4FC +🔍 magnifying glass tilted left; U+1F50D +🔎 magnifying glass tilted right; U+1F50E +🕯 candle; U+1F56F +💡 light bulb; U+1F4A1 +🔦 flashlight; U+1F526 +🏮 red paper lantern; U+1F3EE +📔 notebook with decorative cover; U+1F4D4 +📕 closed book; U+1F4D5 +📖 open book; U+1F4D6 +📗 green book; U+1F4D7 +📘 blue book; U+1F4D8 +📙 orange book; U+1F4D9 +📚 books; U+1F4DA +📓 notebook; U+1F4D3 +📒 ledger; U+1F4D2 +📃 page with curl; U+1F4C3 +📜 scroll; U+1F4DC +📄 page facing up; U+1F4C4 +📰 newspaper; U+1F4F0 +🗞 rolled-up newspaper; U+1F5DE +📑 bookmark tabs; U+1F4D1 +🔖 bookmark; U+1F516 +🏷 label; U+1F3F7 +💰 money bag; U+1F4B0 +💴 yen banknote; U+1F4B4 +💵 dollar banknote; U+1F4B5 +💶 euro banknote; U+1F4B6 +💷 pound banknote; U+1F4B7 +💸 money with wings; U+1F4B8 +💳 credit card; U+1F4B3 +🧾 receipt; U+1F9FE +💹 chart increasing with yen; U+1F4B9 +💱 currency exchange; U+1F4B1 +💲 heavy dollar sign; U+1F4B2 +✉ envelope; U+2709 +📧 e-mail; U+1F4E7 +📨 incoming envelope; U+1F4E8 +📩 envelope with arrow; U+1F4E9 +📤 outbox tray; U+1F4E4 +📥 inbox tray; U+1F4E5 +📦 package; U+1F4E6 +📫 closed mailbox with raised flag; U+1F4EB +📪 closed mailbox with lowered flag; U+1F4EA +📬 open mailbox with raised flag; U+1F4EC +📭 open mailbox with lowered flag; U+1F4ED +📮 postbox; U+1F4EE +🗳 ballot box with ballot; U+1F5F3 +✏ pencil; U+270F +✒ black nib; U+2712 +🖋 fountain pen; U+1F58B +🖊 pen; U+1F58A +🖌 paintbrush; U+1F58C +🖍 crayon; U+1F58D +📝 memo; U+1F4DD +💼 briefcase; U+1F4BC +📁 file folder; U+1F4C1 +📂 open file folder; U+1F4C2 +🗂 card index dividers; U+1F5C2 +📅 calendar; U+1F4C5 +📆 tear-off calendar; U+1F4C6 +🗒 spiral notepad; U+1F5D2 +🗓 spiral calendar; U+1F5D3 +📇 card index; U+1F4C7 +📈 chart increasing; U+1F4C8 +📉 chart decreasing; U+1F4C9 +📊 bar chart; U+1F4CA +📋 clipboard; U+1F4CB +📌 pushpin; U+1F4CC +📍 round pushpin; U+1F4CD +📎 paperclip; U+1F4CE +🖇 linked paperclips; U+1F587 +📏 straight ruler; U+1F4CF +📐 triangular ruler; U+1F4D0 +✂ scissors; U+2702 +🗃 card file box; U+1F5C3 +🗄 file cabinet; U+1F5C4 +🗑 wastebasket; U+1F5D1 +🔒 locked; U+1F512 +🔓 unlocked; U+1F513 +🔏 locked with pen; U+1F50F +🔐 locked with key; U+1F510 +🔑 key; U+1F511 +🗝 old key; U+1F5DD +🔨 hammer; U+1F528 +⛏ pick; U+26CF +⚒ hammer and pick; U+2692 +🛠 hammer and wrench; U+1F6E0 +🗡 dagger; U+1F5E1 +⚔ crossed swords; U+2694 +🔫 pistol; U+1F52B +🏹 bow and arrow; U+1F3F9 +🛡 shield; U+1F6E1 +🔧 wrench; U+1F527 +🔩 nut and bolt; U+1F529 +⚙ gear; U+2699 +🗜 clamp; U+1F5DC +⚖ balance scale; U+2696 +🔗 link; U+1F517 +⛓ chains; U+26D3 +🧰 toolbox; U+1F9F0 +🧲 magnet; U+1F9F2 +⚗ alembic; U+2697 +🧪 test tube; U+1F9EA +🧫 petri dish; U+1F9EB +🧬 dna; U+1F9EC +🔬 microscope; U+1F52C +🔭 telescope; U+1F52D +📡 satellite antenna; U+1F4E1 +💉 syringe; U+1F489 +💊 pill; U+1F48A +🚪 door; U+1F6AA +🛏 bed; U+1F6CF +🛋 couch and lamp; U+1F6CB +🚽 toilet; U+1F6BD +🚿 shower; U+1F6BF +🛁 bathtub; U+1F6C1 +🧴 lotion bottle; U+1F9F4 +🧷 safety pin; U+1F9F7 +🧹 broom; U+1F9F9 +🧺 basket; U+1F9FA +🧻 roll of paper; U+1F9FB +🧼 soap; U+1F9FC +🧽 sponge; U+1F9FD +🧯 fire extinguisher; U+1F9EF +🛒 shopping cart; U+1F6D2 +🚬 cigarette; U+1F6AC +⚰ coffin; U+26B0 +⚱ funeral urn; U+26B1 +🗿 moai; U+1F5FF +🏧 ATM sign; U+1F3E7 +🚮 litter in bin sign; U+1F6AE +🚰 potable water; U+1F6B0 +♿ wheelchair symbol; U+267F +🚹 men’s room; U+1F6B9 +🚺 women’s room; U+1F6BA +🚻 restroom; U+1F6BB +🚼 baby symbol; U+1F6BC +🚾 water closet; U+1F6BE +🛂 passport control; U+1F6C2 +🛃 customs; U+1F6C3 +🛄 baggage claim; U+1F6C4 +🛅 left luggage; U+1F6C5 +⚠ warning; U+26A0 +🚸 children crossing; U+1F6B8 +⛔ no entry; U+26D4 +🚫 prohibited; U+1F6AB +🚳 no bicycles; U+1F6B3 +🚭 no smoking; U+1F6AD +🚯 no littering; U+1F6AF +🚱 non-potable water; U+1F6B1 +🚷 no pedestrians; U+1F6B7 +📵 no mobile phones; U+1F4F5 +🔞 no one under eighteen; U+1F51E +☢ radioactive; U+2622 +☣ biohazard; U+2623 +⬆ up arrow; U+2B06 +↗ up-right arrow; U+2197 +➡ right arrow; U+27A1 +↘ down-right arrow; U+2198 +⬇ down arrow; U+2B07 +↙ down-left arrow; U+2199 +⬅ left arrow; U+2B05 +↖ up-left arrow; U+2196 +↕ up-down arrow; U+2195 +↔ left-right arrow; U+2194 +↩ right arrow curving left; U+21A9 +↪ left arrow curving right; U+21AA +⤴ right arrow curving up; U+2934 +⤵ right arrow curving down; U+2935 +🔃 clockwise vertical arrows; U+1F503 +🔄 counterclockwise arrows button; U+1F504 +🔙 BACK arrow; U+1F519 +🔚 END arrow; U+1F51A +🔛 ON! arrow; U+1F51B +🔜 SOON arrow; U+1F51C +🔝 TOP arrow; U+1F51D +🛐 place of worship; U+1F6D0 +⚛ atom symbol; U+269B +🕉 om; U+1F549 +✡ star of David; U+2721 +☸ wheel of dharma; U+2638 +☯ yin yang; U+262F +✝ latin cross; U+271D +☦ orthodox cross; U+2626 +☪ star and crescent; U+262A +☮ peace symbol; U+262E +🕎 menorah; U+1F54E +🔯 dotted six-pointed star; U+1F52F +♈ Aries; U+2648 +♉ Taurus; U+2649 +♊ Gemini; U+264A +♋ Cancer; U+264B +♌ Leo; U+264C +♍ Virgo; U+264D +♎ Libra; U+264E +♏ Scorpio; U+264F +♐ Sagittarius; U+2650 +♑ Capricorn; U+2651 +♒ Aquarius; U+2652 +♓ Pisces; U+2653 +⛎ Ophiuchus; U+26CE +🔀 shuffle tracks button; U+1F500 +🔁 repeat button; U+1F501 +🔂 repeat single button; U+1F502 +▶ play button; U+25B6 +⏩ fast-forward button; U+23E9 +⏭ next track button; U+23ED +⏯ play or pause button; U+23EF +◀ reverse button; U+25C0 +⏪ fast reverse button; U+23EA +⏮ last track button; U+23EE +🔼 upwards button; U+1F53C +⏫ fast up button; U+23EB +🔽 downwards button; U+1F53D +⏬ fast down button; U+23EC +⏸ pause button; U+23F8 +⏹ stop button; U+23F9 +⏺ record button; U+23FA +⏏ eject button; U+23CF +🎦 cinema; U+1F3A6 +🔅 dim button; U+1F505 +🔆 bright button; U+1F506 +📶 antenna bars; U+1F4F6 +📳 vibration mode; U+1F4F3 +📴 mobile phone off; U+1F4F4 +♀ female sign; U+2640 +♂ male sign; U+2642 +⚕ medical symbol; U+2695 +♾ infinity; U+267E +♻ recycling symbol; U+267B +⚜ fleur-de-lis; U+269C +🔱 trident emblem; U+1F531 +📛 name badge; U+1F4DB +🔰 Japanese symbol for beginner; U+1F530 +⭕ heavy large circle; U+2B55 +✅ white heavy check mark; U+2705 +☑ ballot box with check; U+2611 +✔ heavy check mark; U+2714 +✖ heavy multiplication x; U+2716 +❌ cross mark; U+274C +❎ cross mark button; U+274E +➕ heavy plus sign; U+2795 +➖ heavy minus sign; U+2796 +➗ heavy division sign; U+2797 +➰ curly loop; U+27B0 +➿ double curly loop; U+27BF +〽 part alternation mark; U+303D +✳ eight-spoked asterisk; U+2733 +✴ eight-pointed star; U+2734 +❇ sparkle; U+2747 +‼ double exclamation mark; U+203C +⁉ exclamation question mark; U+2049 +❓ question mark; U+2753 +❔ white question mark; U+2754 +❕ white exclamation mark; U+2755 +❗ exclamation mark; U+2757 +〰 wavy dash; U+3030 +© copyright; U+00A9 +® registered; U+00AE +™ trade mark; U+2122 +#️⃣ keycap: #; U+0023 U+FE0F U+20E3 +*️⃣ keycap: *; U+002A U+FE0F U+20E3 +0️⃣ keycap: 0; U+0030 U+FE0F U+20E3 +1️⃣ keycap: 1; U+0031 U+FE0F U+20E3 +2️⃣ keycap: 2; U+0032 U+FE0F U+20E3 +3️⃣ keycap: 3; U+0033 U+FE0F U+20E3 +4️⃣ keycap: 4; U+0034 U+FE0F U+20E3 +5️⃣ keycap: 5; U+0035 U+FE0F U+20E3 +6️⃣ keycap: 6; U+0036 U+FE0F U+20E3 +7️⃣ keycap: 7; U+0037 U+FE0F U+20E3 +8️⃣ keycap: 8; U+0038 U+FE0F U+20E3 +9️⃣ keycap: 9; U+0039 U+FE0F U+20E3 +🔟 keycap: 10; U+1F51F +🔠 input latin uppercase; U+1F520 +🔡 input latin lowercase; U+1F521 +🔢 input numbers; U+1F522 +🔣 input symbols; U+1F523 +🔤 input latin letters; U+1F524 +🅰 A button (blood type); U+1F170 +🆎 AB button (blood type); U+1F18E +🅱 B button (blood type); U+1F171 +🆑 CL button; U+1F191 +🆒 COOL button; U+1F192 +🆓 FREE button; U+1F193 +ℹ information; U+2139 +🆔 ID button; U+1F194 +Ⓜ circled M; U+24C2 +🆕 NEW button; U+1F195 +🆖 NG button; U+1F196 +🅾 O button (blood type); U+1F17E +🆗 OK button; U+1F197 +🅿 P button; U+1F17F +🆘 SOS button; U+1F198 +🆙 UP! button; U+1F199 +🆚 VS button; U+1F19A +🈁 Japanese “here” button; U+1F201 +🈂 Japanese “service charge” button; U+1F202 +🈷 Japanese “monthly amount” button; U+1F237 +🈶 Japanese “not free of charge” button; U+1F236 +🈯 Japanese “reserved” button; U+1F22F +🉐 Japanese “bargain” button; U+1F250 +🈹 Japanese “discount” button; U+1F239 +🈚 Japanese “free of charge” button; U+1F21A +🈲 Japanese “prohibited” button; U+1F232 +🉑 Japanese “acceptable” button; U+1F251 +🈸 Japanese “application” button; U+1F238 +🈴 Japanese “passing grade” button; U+1F234 +🈳 Japanese “vacancy” button; U+1F233 +㊗ Japanese “congratulations” button; U+3297 +㊙ Japanese “secret” button; U+3299 +🈺 Japanese “open for business” button; U+1F23A +🈵 Japanese “no vacancy” button; U+1F235 +🔴 red circle; U+1F534 +🔵 blue circle; U+1F535 +⚪ white circle; U+26AA +⚫ black circle; U+26AB +⬜ white large square; U+2B1C +⬛ black large square; U+2B1B +◼ black medium square; U+25FC +◻ white medium square; U+25FB +◽ white medium-small square; U+25FD +◾ black medium-small square; U+25FE +▫ white small square; U+25AB +▪ black small square; U+25AA +🔶 large orange diamond; U+1F536 +🔷 large blue diamond; U+1F537 +🔸 small orange diamond; U+1F538 +🔹 small blue diamond; U+1F539 +🔺 red triangle pointed up; U+1F53A +🔻 red triangle pointed down; U+1F53B +💠 diamond with a dot; U+1F4A0 +🔘 radio button; U+1F518 +🔲 black square button; U+1F532 +🔳 white square button; U+1F533 +🏁 chequered flag; U+1F3C1 +🚩 triangular flag; U+1F6A9 +🎌 crossed flags; U+1F38C +🏴 black flag; U+1F3F4 +🏳 white flag; U+1F3F3 +🏳️🌈 rainbow flag; U+1F3F3 U+FE0F U+200D U+1F308 +🏴☠️ pirate flag; U+1F3F4 U+200D U+2620 U+FE0F +🇦🇨 flag: Ascension Island; U+1F1E6 U+1F1E8 +🇦🇩 flag: Andorra; U+1F1E6 U+1F1E9 +🇦🇪 flag: United Arab Emirates; U+1F1E6 U+1F1EA +🇦🇫 flag: Afghanistan; U+1F1E6 U+1F1EB +🇦🇬 flag: Antigua & Barbuda; U+1F1E6 U+1F1EC +🇦🇮 flag: Anguilla; U+1F1E6 U+1F1EE +🇦🇱 flag: Albania; U+1F1E6 U+1F1F1 +🇦🇲 flag: Armenia; U+1F1E6 U+1F1F2 +🇦🇴 flag: Angola; U+1F1E6 U+1F1F4 +🇦🇶 flag: Antarctica; U+1F1E6 U+1F1F6 +🇦🇷 flag: Argentina; U+1F1E6 U+1F1F7 +🇦🇸 flag: American Samoa; U+1F1E6 U+1F1F8 +🇦🇹 flag: Austria; U+1F1E6 U+1F1F9 +🇦🇺 flag: Australia; U+1F1E6 U+1F1FA +🇦🇼 flag: Aruba; U+1F1E6 U+1F1FC +🇦🇽 flag: Åland Islands; U+1F1E6 U+1F1FD +🇦🇿 flag: Azerbaijan; U+1F1E6 U+1F1FF +🇧🇦 flag: Bosnia & Herzegovina; U+1F1E7 U+1F1E6 +🇧🇧 flag: Barbados; U+1F1E7 U+1F1E7 +🇧🇩 flag: Bangladesh; U+1F1E7 U+1F1E9 +🇧🇪 flag: Belgium; U+1F1E7 U+1F1EA +🇧🇫 flag: Burkina Faso; U+1F1E7 U+1F1EB +🇧🇬 flag: Bulgaria; U+1F1E7 U+1F1EC +🇧🇭 flag: Bahrain; U+1F1E7 U+1F1ED +🇧🇮 flag: Burundi; U+1F1E7 U+1F1EE +🇧🇯 flag: Benin; U+1F1E7 U+1F1EF +🇧🇱 flag: St. Barthélemy; U+1F1E7 U+1F1F1 +🇧🇲 flag: Bermuda; U+1F1E7 U+1F1F2 +🇧🇳 flag: Brunei; U+1F1E7 U+1F1F3 +🇧🇴 flag: Bolivia; U+1F1E7 U+1F1F4 +🇧🇶 flag: Caribbean Netherlands; U+1F1E7 U+1F1F6 +🇧🇷 flag: Brazil; U+1F1E7 U+1F1F7 +🇧🇸 flag: Bahamas; U+1F1E7 U+1F1F8 +🇧🇹 flag: Bhutan; U+1F1E7 U+1F1F9 +🇧🇻 flag: Bouvet Island; U+1F1E7 U+1F1FB +🇧🇼 flag: Botswana; U+1F1E7 U+1F1FC +🇧🇾 flag: Belarus; U+1F1E7 U+1F1FE +🇧🇿 flag: Belize; U+1F1E7 U+1F1FF +🇨🇦 flag: Canada; U+1F1E8 U+1F1E6 +🇨🇨 flag: Cocos (Keeling) Islands; U+1F1E8 U+1F1E8 +🇨🇩 flag: Congo - Kinshasa; U+1F1E8 U+1F1E9 +🇨🇫 flag: Central African Republic; U+1F1E8 U+1F1EB +🇨🇬 flag: Congo - Brazzaville; U+1F1E8 U+1F1EC +🇨🇭 flag: Switzerland; U+1F1E8 U+1F1ED +🇨🇮 flag: Côte d’Ivoire; U+1F1E8 U+1F1EE +🇨🇰 flag: Cook Islands; U+1F1E8 U+1F1F0 +🇨🇱 flag: Chile; U+1F1E8 U+1F1F1 +🇨🇲 flag: Cameroon; U+1F1E8 U+1F1F2 +🇨🇳 flag: China; U+1F1E8 U+1F1F3 +🇨🇴 flag: Colombia; U+1F1E8 U+1F1F4 +🇨🇵 flag: Clipperton Island; U+1F1E8 U+1F1F5 +🇨🇷 flag: Costa Rica; U+1F1E8 U+1F1F7 +🇨🇺 flag: Cuba; U+1F1E8 U+1F1FA +🇨🇻 flag: Cape Verde; U+1F1E8 U+1F1FB +🇨🇼 flag: Curaçao; U+1F1E8 U+1F1FC +🇨🇽 flag: Christmas Island; U+1F1E8 U+1F1FD +🇨🇾 flag: Cyprus; U+1F1E8 U+1F1FE +🇨🇿 flag: Czechia; U+1F1E8 U+1F1FF +🇩🇪 flag: Germany; U+1F1E9 U+1F1EA +🇩🇬 flag: Diego Garcia; U+1F1E9 U+1F1EC +🇩🇯 flag: Djibouti; U+1F1E9 U+1F1EF +🇩🇰 flag: Denmark; U+1F1E9 U+1F1F0 +🇩🇲 flag: Dominica; U+1F1E9 U+1F1F2 +🇩🇴 flag: Dominican Republic; U+1F1E9 U+1F1F4 +🇩🇿 flag: Algeria; U+1F1E9 U+1F1FF +🇪🇦 flag: Ceuta & Melilla; U+1F1EA U+1F1E6 +🇪🇨 flag: Ecuador; U+1F1EA U+1F1E8 +🇪🇪 flag: Estonia; U+1F1EA U+1F1EA +🇪🇬 flag: Egypt; U+1F1EA U+1F1EC +🇪🇭 flag: Western Sahara; U+1F1EA U+1F1ED +🇪🇷 flag: Eritrea; U+1F1EA U+1F1F7 +🇪🇸 flag: Spain; U+1F1EA U+1F1F8 +🇪🇹 flag: Ethiopia; U+1F1EA U+1F1F9 +🇪🇺 flag: European Union; U+1F1EA U+1F1FA +🇫🇮 flag: Finland; U+1F1EB U+1F1EE +🇫🇯 flag: Fiji; U+1F1EB U+1F1EF +🇫🇰 flag: Falkland Islands; U+1F1EB U+1F1F0 +🇫🇲 flag: Micronesia; U+1F1EB U+1F1F2 +🇫🇴 flag: Faroe Islands; U+1F1EB U+1F1F4 +🇫🇷 flag: France; U+1F1EB U+1F1F7 +🇬🇦 flag: Gabon; U+1F1EC U+1F1E6 +🇬🇧 flag: United Kingdom; U+1F1EC U+1F1E7 +🇬🇩 flag: Grenada; U+1F1EC U+1F1E9 +🇬🇪 flag: Georgia; U+1F1EC U+1F1EA +🇬🇫 flag: French Guiana; U+1F1EC U+1F1EB +🇬🇬 flag: Guernsey; U+1F1EC U+1F1EC +🇬🇭 flag: Ghana; U+1F1EC U+1F1ED +🇬🇮 flag: Gibraltar; U+1F1EC U+1F1EE +🇬🇱 flag: Greenland; U+1F1EC U+1F1F1 +🇬🇲 flag: Gambia; U+1F1EC U+1F1F2 +🇬🇳 flag: Guinea; U+1F1EC U+1F1F3 +🇬🇵 flag: Guadeloupe; U+1F1EC U+1F1F5 +🇬🇶 flag: Equatorial Guinea; U+1F1EC U+1F1F6 +🇬🇷 flag: Greece; U+1F1EC U+1F1F7 +🇬🇸 flag: South Georgia & South Sandwich Islands; U+1F1EC U+1F1F8 +🇬🇹 flag: Guatemala; U+1F1EC U+1F1F9 +🇬🇺 flag: Guam; U+1F1EC U+1F1FA +🇬🇼 flag: Guinea-Bissau; U+1F1EC U+1F1FC +🇬🇾 flag: Guyana; U+1F1EC U+1F1FE +🇭🇰 flag: Hong Kong SAR China; U+1F1ED U+1F1F0 +🇭🇲 flag: Heard & McDonald Islands; U+1F1ED U+1F1F2 +🇭🇳 flag: Honduras; U+1F1ED U+1F1F3 +🇭🇷 flag: Croatia; U+1F1ED U+1F1F7 +🇭🇹 flag: Haiti; U+1F1ED U+1F1F9 +🇭🇺 flag: Hungary; U+1F1ED U+1F1FA +🇮🇨 flag: Canary Islands; U+1F1EE U+1F1E8 +🇮🇩 flag: Indonesia; U+1F1EE U+1F1E9 +🇮🇪 flag: Ireland; U+1F1EE U+1F1EA +🇮🇱 flag: Israel; U+1F1EE U+1F1F1 +🇮🇲 flag: Isle of Man; U+1F1EE U+1F1F2 +🇮🇳 flag: India; U+1F1EE U+1F1F3 +🇮🇴 flag: British Indian Ocean Territory; U+1F1EE U+1F1F4 +🇮🇶 flag: Iraq; U+1F1EE U+1F1F6 +🇮🇷 flag: Iran; U+1F1EE U+1F1F7 +🇮🇸 flag: Iceland; U+1F1EE U+1F1F8 +🇮🇹 flag: Italy; U+1F1EE U+1F1F9 +🇯🇪 flag: Jersey; U+1F1EF U+1F1EA +🇯🇲 flag: Jamaica; U+1F1EF U+1F1F2 +🇯🇴 flag: Jordan; U+1F1EF U+1F1F4 +🇯🇵 flag: Japan; U+1F1EF U+1F1F5 +🇰🇪 flag: Kenya; U+1F1F0 U+1F1EA +🇰🇬 flag: Kyrgyzstan; U+1F1F0 U+1F1EC +🇰🇭 flag: Cambodia; U+1F1F0 U+1F1ED +🇰🇮 flag: Kiribati; U+1F1F0 U+1F1EE +🇰🇲 flag: Comoros; U+1F1F0 U+1F1F2 +🇰🇳 flag: St. Kitts & Nevis; U+1F1F0 U+1F1F3 +🇰🇵 flag: North Korea; U+1F1F0 U+1F1F5 +🇰🇷 flag: South Korea; U+1F1F0 U+1F1F7 +🇰🇼 flag: Kuwait; U+1F1F0 U+1F1FC +🇰🇾 flag: Cayman Islands; U+1F1F0 U+1F1FE +🇰🇿 flag: Kazakhstan; U+1F1F0 U+1F1FF +🇱🇦 flag: Laos; U+1F1F1 U+1F1E6 +🇱🇧 flag: Lebanon; U+1F1F1 U+1F1E7 +🇱🇨 flag: St. Lucia; U+1F1F1 U+1F1E8 +🇱🇮 flag: Liechtenstein; U+1F1F1 U+1F1EE +🇱🇰 flag: Sri Lanka; U+1F1F1 U+1F1F0 +🇱🇷 flag: Liberia; U+1F1F1 U+1F1F7 +🇱🇸 flag: Lesotho; U+1F1F1 U+1F1F8 +🇱🇹 flag: Lithuania; U+1F1F1 U+1F1F9 +🇱🇺 flag: Luxembourg; U+1F1F1 U+1F1FA +🇱🇻 flag: Latvia; U+1F1F1 U+1F1FB +🇱🇾 flag: Libya; U+1F1F1 U+1F1FE +🇲🇦 flag: Morocco; U+1F1F2 U+1F1E6 +🇲🇨 flag: Monaco; U+1F1F2 U+1F1E8 +🇲🇩 flag: Moldova; U+1F1F2 U+1F1E9 +🇲🇪 flag: Montenegro; U+1F1F2 U+1F1EA +🇲🇫 flag: St. Martin; U+1F1F2 U+1F1EB +🇲🇬 flag: Madagascar; U+1F1F2 U+1F1EC +🇲🇭 flag: Marshall Islands; U+1F1F2 U+1F1ED +🇲🇰 flag: Macedonia; U+1F1F2 U+1F1F0 +🇲🇱 flag: Mali; U+1F1F2 U+1F1F1 +🇲🇲 flag: Myanmar (Burma); U+1F1F2 U+1F1F2 +🇲🇳 flag: Mongolia; U+1F1F2 U+1F1F3 +🇲🇴 flag: Macau SAR China; U+1F1F2 U+1F1F4 +🇲🇵 flag: Northern Mariana Islands; U+1F1F2 U+1F1F5 +🇲🇶 flag: Martinique; U+1F1F2 U+1F1F6 +🇲🇷 flag: Mauritania; U+1F1F2 U+1F1F7 +🇲🇸 flag: Montserrat; U+1F1F2 U+1F1F8 +🇲🇹 flag: Malta; U+1F1F2 U+1F1F9 +🇲🇺 flag: Mauritius; U+1F1F2 U+1F1FA +🇲🇻 flag: Maldives; U+1F1F2 U+1F1FB +🇲🇼 flag: Malawi; U+1F1F2 U+1F1FC +🇲🇽 flag: Mexico; U+1F1F2 U+1F1FD +🇲🇾 flag: Malaysia; U+1F1F2 U+1F1FE +🇲🇿 flag: Mozambique; U+1F1F2 U+1F1FF +🇳🇦 flag: Namibia; U+1F1F3 U+1F1E6 +🇳🇨 flag: New Caledonia; U+1F1F3 U+1F1E8 +🇳🇪 flag: Niger; U+1F1F3 U+1F1EA +🇳🇫 flag: Norfolk Island; U+1F1F3 U+1F1EB +🇳🇬 flag: Nigeria; U+1F1F3 U+1F1EC +🇳🇮 flag: Nicaragua; U+1F1F3 U+1F1EE +🇳🇱 flag: Netherlands; U+1F1F3 U+1F1F1 +🇳🇴 flag: Norway; U+1F1F3 U+1F1F4 +🇳🇵 flag: Nepal; U+1F1F3 U+1F1F5 +🇳🇷 flag: Nauru; U+1F1F3 U+1F1F7 +🇳🇺 flag: Niue; U+1F1F3 U+1F1FA +🇳🇿 flag: New Zealand; U+1F1F3 U+1F1FF +🇴🇲 flag: Oman; U+1F1F4 U+1F1F2 +🇵🇦 flag: Panama; U+1F1F5 U+1F1E6 +🇵🇪 flag: Peru; U+1F1F5 U+1F1EA +🇵🇫 flag: French Polynesia; U+1F1F5 U+1F1EB +🇵🇬 flag: Papua New Guinea; U+1F1F5 U+1F1EC +🇵🇭 flag: Philippines; U+1F1F5 U+1F1ED +🇵🇰 flag: Pakistan; U+1F1F5 U+1F1F0 +🇵🇱 flag: Poland; U+1F1F5 U+1F1F1 +🇵🇲 flag: St. Pierre & Miquelon; U+1F1F5 U+1F1F2 +🇵🇳 flag: Pitcairn Islands; U+1F1F5 U+1F1F3 +🇵🇷 flag: Puerto Rico; U+1F1F5 U+1F1F7 +🇵🇸 flag: Palestinian Territories; U+1F1F5 U+1F1F8 +🇵🇹 flag: Portugal; U+1F1F5 U+1F1F9 +🇵🇼 flag: Palau; U+1F1F5 U+1F1FC +🇵🇾 flag: Paraguay; U+1F1F5 U+1F1FE +🇶🇦 flag: Qatar; U+1F1F6 U+1F1E6 +🇷🇪 flag: Réunion; U+1F1F7 U+1F1EA +🇷🇴 flag: Romania; U+1F1F7 U+1F1F4 +🇷🇸 flag: Serbia; U+1F1F7 U+1F1F8 +🇷🇺 flag: Russia; U+1F1F7 U+1F1FA +🇷🇼 flag: Rwanda; U+1F1F7 U+1F1FC +🇸🇦 flag: Saudi Arabia; U+1F1F8 U+1F1E6 +🇸🇧 flag: Solomon Islands; U+1F1F8 U+1F1E7 +🇸🇨 flag: Seychelles; U+1F1F8 U+1F1E8 +🇸🇩 flag: Sudan; U+1F1F8 U+1F1E9 +🇸🇪 flag: Sweden; U+1F1F8 U+1F1EA +🇸🇬 flag: Singapore; U+1F1F8 U+1F1EC +🇸🇭 flag: St. Helena; U+1F1F8 U+1F1ED +🇸🇮 flag: Slovenia; U+1F1F8 U+1F1EE +🇸🇯 flag: Svalbard & Jan Mayen; U+1F1F8 U+1F1EF +🇸🇰 flag: Slovakia; U+1F1F8 U+1F1F0 +🇸🇱 flag: Sierra Leone; U+1F1F8 U+1F1F1 +🇸🇲 flag: San Marino; U+1F1F8 U+1F1F2 +🇸🇳 flag: Senegal; U+1F1F8 U+1F1F3 +🇸🇴 flag: Somalia; U+1F1F8 U+1F1F4 +🇸🇷 flag: Suriname; U+1F1F8 U+1F1F7 +🇸🇸 flag: South Sudan; U+1F1F8 U+1F1F8 +🇸🇹 flag: São Tomé & Príncipe; U+1F1F8 U+1F1F9 +🇸🇻 flag: El Salvador; U+1F1F8 U+1F1FB +🇸🇽 flag: Sint Maarten; U+1F1F8 U+1F1FD +🇸🇾 flag: Syria; U+1F1F8 U+1F1FE +🇸🇿 flag: Swaziland; U+1F1F8 U+1F1FF +🇹🇦 flag: Tristan da Cunha; U+1F1F9 U+1F1E6 +🇹🇨 flag: Turks & Caicos Islands; U+1F1F9 U+1F1E8 +🇹🇩 flag: Chad; U+1F1F9 U+1F1E9 +🇹🇫 flag: French Southern Territories; U+1F1F9 U+1F1EB +🇹🇬 flag: Togo; U+1F1F9 U+1F1EC +🇹🇭 flag: Thailand; U+1F1F9 U+1F1ED +🇹🇯 flag: Tajikistan; U+1F1F9 U+1F1EF +🇹🇰 flag: Tokelau; U+1F1F9 U+1F1F0 +🇹🇱 flag: Timor-Leste; U+1F1F9 U+1F1F1 +🇹🇲 flag: Turkmenistan; U+1F1F9 U+1F1F2 +🇹🇳 flag: Tunisia; U+1F1F9 U+1F1F3 +🇹🇴 flag: Tonga; U+1F1F9 U+1F1F4 +🇹🇷 flag: Turkey; U+1F1F9 U+1F1F7 +🇹🇹 flag: Trinidad & Tobago; U+1F1F9 U+1F1F9 +🇹🇻 flag: Tuvalu; U+1F1F9 U+1F1FB +🇹🇼 flag: Taiwan; U+1F1F9 U+1F1FC +🇹🇿 flag: Tanzania; U+1F1F9 U+1F1FF +🇺🇦 flag: Ukraine; U+1F1FA U+1F1E6 +🇺🇬 flag: Uganda; U+1F1FA U+1F1EC +🇺🇲 flag: U.S. Outlying Islands; U+1F1FA U+1F1F2 +🇺🇳 flag: United Nations; U+1F1FA U+1F1F3 +🇺🇸 flag: United States; U+1F1FA U+1F1F8 +🇺🇾 flag: Uruguay; U+1F1FA U+1F1FE +🇺🇿 flag: Uzbekistan; U+1F1FA U+1F1FF +🇻🇦 flag: Vatican City; U+1F1FB U+1F1E6 +🇻🇨 flag: St. Vincent & Grenadines; U+1F1FB U+1F1E8 +🇻🇪 flag: Venezuela; U+1F1FB U+1F1EA +🇻🇬 flag: British Virgin Islands; U+1F1FB U+1F1EC +🇻🇮 flag: U.S. Virgin Islands; U+1F1FB U+1F1EE +🇻🇳 flag: Vietnam; U+1F1FB U+1F1F3 +🇻🇺 flag: Vanuatu; U+1F1FB U+1F1FA +🇼🇫 flag: Wallis & Futuna; U+1F1FC U+1F1EB +🇼🇸 flag: Samoa; U+1F1FC U+1F1F8 +🇽🇰 flag: Kosovo; U+1F1FD U+1F1F0 +🇾🇪 flag: Yemen; U+1F1FE U+1F1EA +🇾🇹 flag: Mayotte; U+1F1FE U+1F1F9 +🇿🇦 flag: South Africa; U+1F1FF U+1F1E6 +🇿🇲 flag: Zambia; U+1F1FF U+1F1F2 +🇿🇼 flag: Zimbabwe; U+1F1FF U+1F1FC +🏴 flag: England; U+1F3F4 U+E0067 U+E0062 U+E0065 U+E006E U+E0067 U+E007F +🏴 flag: Scotland; U+1F3F4 U+E0067 U+E0062 U+E0073 U+E0063 U+E0074 U+E007F +🏴 flag: Wales; U+1F3F4 U+E0067 U+E0062 U+E0077 U+E006C U+E0073 U+E007F + fa-ad; U+F641 + fa-address-book; U+F2B9 + fa-address-card; U+F2BB + fa-adjust; U+F042 + fa-air-freshener; U+F5D0 + fa-align-center; U+F037 + fa-align-justify; U+F039 + fa-align-left; U+F036 + fa-align-right; U+F038 + fa-allergies; U+F461 + fa-ambulance; U+F0F9 + fa-american-sign-language-interpreting; U+F2A3 + fa-anchor; U+F13D + fa-angle-double-down; U+F103 + fa-angle-double-left; U+F100 + fa-angle-double-right; U+F101 + fa-angle-double-up; U+F102 + fa-angle-down; U+F107 + fa-angle-left; U+F104 + fa-angle-right; U+F105 + fa-angle-up; U+F106 + fa-angry; U+F556 + fa-ankh; U+F644 + fa-apple-alt; U+F5D1 + fa-archive; U+F187 + fa-archway; U+F557 + fa-arrow-alt-circle-down; U+F358 + fa-arrow-alt-circle-left; U+F359 + fa-arrow-alt-circle-right; U+F35A + fa-arrow-alt-circle-up; U+F35B + fa-arrow-circle-down; U+F0AB + fa-arrow-circle-left; U+F0A8 + fa-arrow-circle-right; U+F0A9 + fa-arrow-circle-up; U+F0AA + fa-arrow-down; U+F063 + fa-arrow-left; U+F060 + fa-arrow-right; U+F061 + fa-arrow-up; U+F062 + fa-arrows-alt; U+F0B2 + fa-arrows-alt-h; U+F337 + fa-arrows-alt-v; U+F338 + fa-assistive-listening-systems; U+F2A2 + fa-asterisk; U+F069 + fa-at; U+F1FA + fa-atlas; U+F558 + fa-atom; U+F5D2 + fa-audio-description; U+F29E + fa-award; U+F559 + fa-baby; U+F77C + fa-baby-carriage; U+F77D + fa-backspace; U+F55A + fa-backward; U+F04A + fa-balance-scale; U+F24E + fa-ban; U+F05E + fa-band-aid; U+F462 + fa-barcode; U+F02A + fa-bars; U+F0C9 + fa-baseball-ball; U+F433 + fa-basketball-ball; U+F434 + fa-bath; U+F2CD + fa-battery-empty; U+F244 + fa-battery-full; U+F240 + fa-battery-half; U+F242 + fa-battery-quarter; U+F243 + fa-battery-three-quarters; U+F241 + fa-bed; U+F236 + fa-beer; U+F0FC + fa-bell; U+F0F3 + fa-bell-slash; U+F1F6 + fa-bezier-curve; U+F55B + fa-bible; U+F647 + fa-bicycle; U+F206 + fa-binoculars; U+F1E5 + fa-biohazard; U+F780 + fa-birthday-cake; U+F1FD + fa-blender; U+F517 + fa-blender-phone; U+F6B6 + fa-blind; U+F29D + fa-blog; U+F781 + fa-bold; U+F032 + fa-bolt; U+F0E7 + fa-bomb; U+F1E2 + fa-bone; U+F5D7 + fa-bong; U+F55C + fa-book; U+F02D + fa-book-dead; U+F6B7 + fa-book-open; U+F518 + fa-book-reader; U+F5DA + fa-bookmark; U+F02E + fa-bowling-ball; U+F436 + fa-box; U+F466 + fa-box-open; U+F49E + fa-boxes; U+F468 + fa-braille; U+F2A1 + fa-brain; U+F5DC + fa-briefcase; U+F0B1 + fa-briefcase-medical; U+F469 + fa-broadcast-tower; U+F519 + fa-broom; U+F51A + fa-brush; U+F55D + fa-bug; U+F188 + fa-building; U+F1AD + fa-bullhorn; U+F0A1 + fa-bullseye; U+F140 + fa-burn; U+F46A + fa-bus; U+F207 + fa-bus-alt; U+F55E + fa-business-time; U+F64A + fa-calculator; U+F1EC + fa-calendar; U+F133 + fa-calendar-alt; U+F073 + fa-calendar-check; U+F274 + fa-calendar-day; U+F783 + fa-calendar-minus; U+F272 + fa-calendar-plus; U+F271 + fa-calendar-times; U+F273 + fa-calendar-week; U+F784 + fa-camera; U+F030 + fa-camera-retro; U+F083 + fa-campground; U+F6BB + fa-candy-cane; U+F786 + fa-cannabis; U+F55F + fa-capsules; U+F46B + fa-car; U+F1B9 + fa-car-alt; U+F5DE + fa-car-battery; U+F5DF + fa-car-crash; U+F5E1 + fa-car-side; U+F5E4 + fa-caret-down; U+F0D7 + fa-caret-left; U+F0D9 + fa-caret-right; U+F0DA + fa-caret-square-down; U+F150 + fa-caret-square-left; U+F191 + fa-caret-square-right; U+F152 + fa-caret-square-up; U+F151 + fa-caret-up; U+F0D8 + fa-carrot; U+F787 + fa-cart-arrow-down; U+F218 + fa-cart-plus; U+F217 + fa-cash-register; U+F788 + fa-cat; U+F6BE + fa-certificate; U+F0A3 + fa-chair; U+F6C0 + fa-chalkboard; U+F51B + fa-chalkboard-teacher; U+F51C + fa-charging-station; U+F5E7 + fa-chart-area; U+F1FE + fa-chart-bar; U+F080 + fa-chart-line; U+F201 + fa-chart-pie; U+F200 + fa-check; U+F00C + fa-check-circle; U+F058 + fa-check-double; U+F560 + fa-check-square; U+F14A + fa-chess; U+F439 + fa-chess-bishop; U+F43A + fa-chess-board; U+F43C + fa-chess-king; U+F43F + fa-chess-knight; U+F441 + fa-chess-pawn; U+F443 + fa-chess-queen; U+F445 + fa-chess-rook; U+F447 + fa-chevron-circle-down; U+F13A + fa-chevron-circle-left; U+F137 + fa-chevron-circle-right; U+F138 + fa-chevron-circle-up; U+F139 + fa-chevron-down; U+F078 + fa-chevron-left; U+F053 + fa-chevron-right; U+F054 + fa-chevron-up; U+F077 + fa-child; U+F1AE + fa-church; U+F51D + fa-circle; U+F111 + fa-circle-notch; U+F1CE + fa-city; U+F64F + fa-clipboard; U+F328 + fa-clipboard-check; U+F46C + fa-clipboard-list; U+F46D + fa-clock; U+F017 + fa-clone; U+F24D + fa-closed-captioning; U+F20A + fa-cloud; U+F0C2 + fa-cloud-download-alt; U+F381 + fa-cloud-meatball; U+F73B + fa-cloud-moon; U+F6C3 + fa-cloud-moon-rain; U+F73C + fa-cloud-rain; U+F73D + fa-cloud-showers-heavy; U+F740 + fa-cloud-sun; U+F6C4 + fa-cloud-sun-rain; U+F743 + fa-cloud-upload-alt; U+F382 + fa-cocktail; U+F561 + fa-code; U+F121 + fa-code-branch; U+F126 + fa-coffee; U+F0F4 + fa-cog; U+F013 + fa-cogs; U+F085 + fa-coins; U+F51E + fa-columns; U+F0DB + fa-comment; U+F075 + fa-comment-alt; U+F27A + fa-comment-dollar; U+F651 + fa-comment-dots; U+F4AD + fa-comment-slash; U+F4B3 + fa-comments; U+F086 + fa-comments-dollar; U+F653 + fa-compact-disc; U+F51F + fa-compass; U+F14E + fa-compress; U+F066 + fa-compress-arrows-alt; U+F78C + fa-concierge-bell; U+F562 + fa-cookie; U+F563 + fa-cookie-bite; U+F564 + fa-copy; U+F0C5 + fa-copyright; U+F1F9 + fa-couch; U+F4B8 + fa-credit-card; U+F09D + fa-crop; U+F125 + fa-crop-alt; U+F565 + fa-cross; U+F654 + fa-crosshairs; U+F05B + fa-crow; U+F520 + fa-crown; U+F521 + fa-cube; U+F1B2 + fa-cubes; U+F1B3 + fa-cut; U+F0C4 + fa-database; U+F1C0 + fa-deaf; U+F2A4 + fa-democrat; U+F747 + fa-desktop; U+F108 + fa-dharmachakra; U+F655 + fa-diagnoses; U+F470 + fa-dice; U+F522 + fa-dice-d20; U+F6CF + fa-dice-d6; U+F6D1 + fa-dice-five; U+F523 + fa-dice-four; U+F524 + fa-dice-one; U+F525 + fa-dice-six; U+F526 + fa-dice-three; U+F527 + fa-dice-two; U+F528 + fa-digital-tachograph; U+F566 + fa-directions; U+F5EB + fa-divide; U+F529 + fa-dizzy; U+F567 + fa-dna; U+F471 + fa-dog; U+F6D3 + fa-dollar-sign; U+F155 + fa-dolly; U+F472 + fa-dolly-flatbed; U+F474 + fa-donate; U+F4B9 + fa-door-closed; U+F52A + fa-door-open; U+F52B + fa-dot-circle; U+F192 + fa-dove; U+F4BA + fa-download; U+F019 + fa-drafting-compass; U+F568 + fa-dragon; U+F6D5 + fa-draw-polygon; U+F5EE + fa-drum; U+F569 + fa-drum-steelpan; U+F56A + fa-drumstick-bite; U+F6D7 + fa-dumbbell; U+F44B + fa-dumpster; U+F793 + fa-dumpster-fire; U+F794 + fa-dungeon; U+F6D9 + fa-edit; U+F044 + fa-eject; U+F052 + fa-ellipsis-h; U+F141 + fa-ellipsis-v; U+F142 + fa-envelope; U+F0E0 + fa-envelope-open; U+F2B6 + fa-envelope-open-text; U+F658 + fa-envelope-square; U+F199 + fa-equals; U+F52C + fa-eraser; U+F12D + fa-ethernet; U+F796 + fa-euro-sign; U+F153 + fa-exchange-alt; U+F362 + fa-exclamation; U+F12A + fa-exclamation-circle; U+F06A + fa-exclamation-triangle; U+F071 + fa-expand; U+F065 + fa-expand-arrows-alt; U+F31E + fa-external-link-alt; U+F35D + fa-external-link-square-alt; U+F360 + fa-eye; U+F06E + fa-eye-dropper; U+F1FB + fa-eye-slash; U+F070 + fa-fast-backward; U+F049 + fa-fast-forward; U+F050 + fa-fax; U+F1AC + fa-feather; U+F52D + fa-feather-alt; U+F56B + fa-female; U+F182 + fa-fighter-jet; U+F0FB + fa-file; U+F15B + fa-file-alt; U+F15C + fa-file-archive; U+F1C6 + fa-file-audio; U+F1C7 + fa-file-code; U+F1C9 + fa-file-contract; U+F56C + fa-file-csv; U+F6DD + fa-file-download; U+F56D + fa-file-excel; U+F1C3 + fa-file-export; U+F56E + fa-file-image; U+F1C5 + fa-file-import; U+F56F + fa-file-invoice; U+F570 + fa-file-invoice-dollar; U+F571 + fa-file-medical; U+F477 + fa-file-medical-alt; U+F478 + fa-file-pdf; U+F1C1 + fa-file-powerpoint; U+F1C4 + fa-file-prescription; U+F572 + fa-file-signature; U+F573 + fa-file-upload; U+F574 + fa-file-video; U+F1C8 + fa-file-word; U+F1C2 + fa-fill; U+F575 + fa-fill-drip; U+F576 + fa-film; U+F008 + fa-filter; U+F0B0 + fa-fingerprint; U+F577 + fa-fire; U+F06D + fa-fire-alt; U+F7E4 + fa-fire-extinguisher; U+F134 + fa-first-aid; U+F479 + fa-fish; U+F578 + fa-fist-raised; U+F6DE + fa-flag; U+F024 + fa-flag-checkered; U+F11E + fa-flag-usa; U+F74D + fa-flask; U+F0C3 + fa-flushed; U+F579 + fa-folder; U+F07B + fa-folder-minus; U+F65D + fa-folder-open; U+F07C + fa-folder-plus; U+F65E + fa-font; U+F031 + fa-font-awesome-logo-full; U+F4E6 + fa-football-ball; U+F44E + fa-forward; U+F04E + fa-frog; U+F52E + fa-frown; U+F119 + fa-frown-open; U+F57A + fa-funnel-dollar; U+F662 + fa-futbol; U+F1E3 + fa-gamepad; U+F11B + fa-gas-pump; U+F52F + fa-gavel; U+F0E3 + fa-gem; U+F3A5 + fa-genderless; U+F22D + fa-ghost; U+F6E2 + fa-gift; U+F06B + fa-gifts; U+F79C + fa-glass-cheers; U+F79F + fa-glass-martini; U+F000 + fa-glass-martini-alt; U+F57B + fa-glass-whiskey; U+F7A0 + fa-glasses; U+F530 + fa-globe; U+F0AC + fa-globe-africa; U+F57C + fa-globe-americas; U+F57D + fa-globe-asia; U+F57E + fa-globe-europe; U+F7A2 + fa-golf-ball; U+F450 + fa-gopuram; U+F664 + fa-graduation-cap; U+F19D + fa-greater-than; U+F531 + fa-greater-than-equal; U+F532 + fa-grimace; U+F57F + fa-grin; U+F580 + fa-grin-alt; U+F581 + fa-grin-beam; U+F582 + fa-grin-beam-sweat; U+F583 + fa-grin-hearts; U+F584 + fa-grin-squint; U+F585 + fa-grin-squint-tears; U+F586 + fa-grin-stars; U+F587 + fa-grin-tears; U+F588 + fa-grin-tongue; U+F589 + fa-grin-tongue-squint; U+F58A + fa-grin-tongue-wink; U+F58B + fa-grin-wink; U+F58C + fa-grip-horizontal; U+F58D + fa-grip-lines; U+F7A4 + fa-grip-lines-vertical; U+F7A5 + fa-grip-vertical; U+F58E + fa-guitar; U+F7A6 + fa-h-square; U+F0FD + fa-hammer; U+F6E3 + fa-hamsa; U+F665 + fa-hand-holding; U+F4BD + fa-hand-holding-heart; U+F4BE + fa-hand-holding-usd; U+F4C0 + fa-hand-lizard; U+F258 + fa-hand-paper; U+F256 + fa-hand-peace; U+F25B + fa-hand-point-down; U+F0A7 + fa-hand-point-left; U+F0A5 + fa-hand-point-right; U+F0A4 + fa-hand-point-up; U+F0A6 + fa-hand-pointer; U+F25A + fa-hand-rock; U+F255 + fa-hand-scissors; U+F257 + fa-hand-spock; U+F259 + fa-hands; U+F4C2 + fa-hands-helping; U+F4C4 + fa-handshake; U+F2B5 + fa-hanukiah; U+F6E6 + fa-hashtag; U+F292 + fa-hat-wizard; U+F6E8 + fa-haykal; U+F666 + fa-hdd; U+F0A0 + fa-heading; U+F1DC + fa-headphones; U+F025 + fa-headphones-alt; U+F58F + fa-headset; U+F590 + fa-heart; U+F004 + fa-heart-broken; U+F7A9 + fa-heartbeat; U+F21E + fa-helicopter; U+F533 + fa-highlighter; U+F591 + fa-hiking; U+F6EC + fa-hippo; U+F6ED + fa-history; U+F1DA + fa-hockey-puck; U+F453 + fa-holly-berry; U+F7AA + fa-home; U+F015 + fa-horse; U+F6F0 + fa-horse-head; U+F7AB + fa-hospital; U+F0F8 + fa-hospital-alt; U+F47D + fa-hospital-symbol; U+F47E + fa-hot-tub; U+F593 + fa-hotel; U+F594 + fa-hourglass; U+F254 + fa-hourglass-end; U+F253 + fa-hourglass-half; U+F252 + fa-hourglass-start; U+F251 + fa-house-damage; U+F6F1 + fa-hryvnia; U+F6F2 + fa-i-cursor; U+F246 + fa-icicles; U+F7AD + fa-id-badge; U+F2C1 + fa-id-card; U+F2C2 + fa-id-card-alt; U+F47F + fa-igloo; U+F7AE + fa-image; U+F03E + fa-images; U+F302 + fa-inbox; U+F01C + fa-indent; U+F03C + fa-industry; U+F275 + fa-infinity; U+F534 + fa-info; U+F129 + fa-info-circle; U+F05A + fa-italic; U+F033 + fa-jedi; U+F669 + fa-joint; U+F595 + fa-journal-whills; U+F66A + fa-kaaba; U+F66B + fa-key; U+F084 + fa-keyboard; U+F11C + fa-khanda; U+F66D + fa-kiss; U+F596 + fa-kiss-beam; U+F597 + fa-kiss-wink-heart; U+F598 + fa-kiwi-bird; U+F535 + fa-landmark; U+F66F + fa-language; U+F1AB + fa-laptop; U+F109 + fa-laptop-code; U+F5FC + fa-laugh; U+F599 + fa-laugh-beam; U+F59A + fa-laugh-squint; U+F59B + fa-laugh-wink; U+F59C + fa-layer-group; U+F5FD + fa-leaf; U+F06C + fa-lemon; U+F094 + fa-less-than; U+F536 + fa-less-than-equal; U+F537 + fa-level-down-alt; U+F3BE + fa-level-up-alt; U+F3BF + fa-life-ring; U+F1CD + fa-lightbulb; U+F0EB + fa-link; U+F0C1 + fa-lira-sign; U+F195 + fa-list; U+F03A + fa-list-alt; U+F022 + fa-list-ol; U+F0CB + fa-list-ul; U+F0CA + fa-location-arrow; U+F124 + fa-lock; U+F023 + fa-lock-open; U+F3C1 + fa-long-arrow-alt-down; U+F309 + fa-long-arrow-alt-left; U+F30A + fa-long-arrow-alt-right; U+F30B + fa-long-arrow-alt-up; U+F30C + fa-low-vision; U+F2A8 + fa-luggage-cart; U+F59D + fa-magic; U+F0D0 + fa-magnet; U+F076 + fa-mail-bulk; U+F674 + fa-male; U+F183 + fa-map; U+F279 + fa-map-marked; U+F59F + fa-map-marked-alt; U+F5A0 + fa-map-marker; U+F041 + fa-map-marker-alt; U+F3C5 + fa-map-pin; U+F276 + fa-map-signs; U+F277 + fa-marker; U+F5A1 + fa-mars; U+F222 + fa-mars-double; U+F227 + fa-mars-stroke; U+F229 + fa-mars-stroke-h; U+F22B + fa-mars-stroke-v; U+F22A + fa-mask; U+F6FA + fa-medal; U+F5A2 + fa-medkit; U+F0FA + fa-meh; U+F11A + fa-meh-blank; U+F5A4 + fa-meh-rolling-eyes; U+F5A5 + fa-memory; U+F538 + fa-menorah; U+F676 + fa-mercury; U+F223 + fa-meteor; U+F753 + fa-microchip; U+F2DB + fa-microphone; U+F130 + fa-microphone-alt; U+F3C9 + fa-microphone-alt-slash; U+F539 + fa-microphone-slash; U+F131 + fa-microscope; U+F610 + fa-minus; U+F068 + fa-minus-circle; U+F056 + fa-minus-square; U+F146 + fa-mitten; U+F7B5 + fa-mobile; U+F10B + fa-mobile-alt; U+F3CD + fa-money-bill; U+F0D6 + fa-money-bill-alt; U+F3D1 + fa-money-bill-wave; U+F53A + fa-money-bill-wave-alt; U+F53B + fa-money-check; U+F53C + fa-money-check-alt; U+F53D + fa-monument; U+F5A6 + fa-moon; U+F186 + fa-mortar-pestle; U+F5A7 + fa-mosque; U+F678 + fa-motorcycle; U+F21C + fa-mountain; U+F6FC + fa-mouse-pointer; U+F245 + fa-mug-hot; U+F7B6 + fa-music; U+F001 + fa-network-wired; U+F6FF + fa-neuter; U+F22C + fa-newspaper; U+F1EA + fa-not-equal; U+F53E + fa-notes-medical; U+F481 + fa-object-group; U+F247 + fa-object-ungroup; U+F248 + fa-oil-can; U+F613 + fa-om; U+F679 + fa-otter; U+F700 + fa-outdent; U+F03B + fa-paint-brush; U+F1FC + fa-paint-roller; U+F5AA + fa-palette; U+F53F + fa-pallet; U+F482 + fa-paper-plane; U+F1D8 + fa-paperclip; U+F0C6 + fa-parachute-box; U+F4CD + fa-paragraph; U+F1DD + fa-parking; U+F540 + fa-passport; U+F5AB + fa-pastafarianism; U+F67B + fa-paste; U+F0EA + fa-pause; U+F04C + fa-pause-circle; U+F28B + fa-paw; U+F1B0 + fa-peace; U+F67C + fa-pen; U+F304 + fa-pen-alt; U+F305 + fa-pen-fancy; U+F5AC + fa-pen-nib; U+F5AD + fa-pen-square; U+F14B + fa-pencil-alt; U+F303 + fa-pencil-ruler; U+F5AE + fa-people-carry; U+F4CE + fa-percent; U+F295 + fa-percentage; U+F541 + fa-person-booth; U+F756 + fa-phone; U+F095 + fa-phone-slash; U+F3DD + fa-phone-square; U+F098 + fa-phone-volume; U+F2A0 + fa-piggy-bank; U+F4D3 + fa-pills; U+F484 + fa-place-of-worship; U+F67F + fa-plane; U+F072 + fa-plane-arrival; U+F5AF + fa-plane-departure; U+F5B0 + fa-play; U+F04B + fa-play-circle; U+F144 + fa-plug; U+F1E6 + fa-plus; U+F067 + fa-plus-circle; U+F055 + fa-plus-square; U+F0FE + fa-podcast; U+F2CE + fa-poll; U+F681 + fa-poll-h; U+F682 + fa-poo; U+F2FE + fa-poo-storm; U+F75A + fa-poop; U+F619 + fa-portrait; U+F3E0 + fa-pound-sign; U+F154 + fa-power-off; U+F011 + fa-pray; U+F683 + fa-praying-hands; U+F684 + fa-prescription; U+F5B1 + fa-prescription-bottle; U+F485 + fa-prescription-bottle-alt; U+F486 + fa-print; U+F02F + fa-procedures; U+F487 + fa-project-diagram; U+F542 + fa-puzzle-piece; U+F12E + fa-qrcode; U+F029 + fa-question; U+F128 + fa-question-circle; U+F059 + fa-quidditch; U+F458 + fa-quote-left; U+F10D + fa-quote-right; U+F10E + fa-quran; U+F687 + fa-radiation; U+F7B9 + fa-radiation-alt; U+F7BA + fa-rainbow; U+F75B + fa-random; U+F074 + fa-receipt; U+F543 + fa-recycle; U+F1B8 + fa-redo; U+F01E + fa-redo-alt; U+F2F9 + fa-registered; U+F25D + fa-reply; U+F3E5 + fa-reply-all; U+F122 + fa-republican; U+F75E + fa-restroom; U+F7BD + fa-retweet; U+F079 + fa-ribbon; U+F4D6 + fa-ring; U+F70B + fa-road; U+F018 + fa-robot; U+F544 + fa-rocket; U+F135 + fa-route; U+F4D7 + fa-rss; U+F09E + fa-rss-square; U+F143 + fa-ruble-sign; U+F158 + fa-ruler; U+F545 + fa-ruler-combined; U+F546 + fa-ruler-horizontal; U+F547 + fa-ruler-vertical; U+F548 + fa-running; U+F70C + fa-rupee-sign; U+F156 + fa-sad-cry; U+F5B3 + fa-sad-tear; U+F5B4 + fa-satellite; U+F7BF + fa-satellite-dish; U+F7C0 + fa-save; U+F0C7 + fa-school; U+F549 + fa-screwdriver; U+F54A + fa-scroll; U+F70E + fa-sd-card; U+F7C2 + fa-search; U+F002 + fa-search-dollar; U+F688 + fa-search-location; U+F689 + fa-search-minus; U+F010 + fa-search-plus; U+F00E + fa-seedling; U+F4D8 + fa-server; U+F233 + fa-shapes; U+F61F + fa-share; U+F064 + fa-share-alt; U+F1E0 + fa-share-alt-square; U+F1E1 + fa-share-square; U+F14D + fa-shekel-sign; U+F20B + fa-shield-alt; U+F3ED + fa-ship; U+F21A + fa-shipping-fast; U+F48B + fa-shoe-prints; U+F54B + fa-shopping-bag; U+F290 + fa-shopping-basket; U+F291 + fa-shopping-cart; U+F07A + fa-shower; U+F2CC + fa-shuttle-van; U+F5B6 + fa-sign; U+F4D9 + fa-sign-in-alt; U+F2F6 + fa-sign-language; U+F2A7 + fa-sign-out-alt; U+F2F5 + fa-signal; U+F012 + fa-signature; U+F5B7 + fa-sim-card; U+F7C4 + fa-sitemap; U+F0E8 + fa-skating; U+F7C5 + fa-skiing; U+F7C9 + fa-skiing-nordic; U+F7CA + fa-skull; U+F54C + fa-skull-crossbones; U+F714 + fa-slash; U+F715 + fa-sleigh; U+F7CC + fa-sliders-h; U+F1DE + fa-smile; U+F118 + fa-smile-beam; U+F5B8 + fa-smile-wink; U+F4DA + fa-smog; U+F75F + fa-smoking; U+F48D + fa-smoking-ban; U+F54D + fa-sms; U+F7CD + fa-snowboarding; U+F7CE + fa-snowflake; U+F2DC + fa-snowman; U+F7D0 + fa-snowplow; U+F7D2 + fa-socks; U+F696 + fa-solar-panel; U+F5BA + fa-sort; U+F0DC + fa-sort-alpha-down; U+F15D + fa-sort-alpha-up; U+F15E + fa-sort-amount-down; U+F160 + fa-sort-amount-up; U+F161 + fa-sort-down; U+F0DD + fa-sort-numeric-down; U+F162 + fa-sort-numeric-up; U+F163 + fa-sort-up; U+F0DE + fa-spa; U+F5BB + fa-space-shuttle; U+F197 + fa-spider; U+F717 + fa-spinner; U+F110 + fa-splotch; U+F5BC + fa-spray-can; U+F5BD + fa-square; U+F0C8 + fa-square-full; U+F45C + fa-square-root-alt; U+F698 + fa-stamp; U+F5BF + fa-star; U+F005 + fa-star-and-crescent; U+F699 + fa-star-half; U+F089 + fa-star-half-alt; U+F5C0 + fa-star-of-david; U+F69A + fa-star-of-life; U+F621 + fa-step-backward; U+F048 + fa-step-forward; U+F051 + fa-stethoscope; U+F0F1 + fa-sticky-note; U+F249 + fa-stop; U+F04D + fa-stop-circle; U+F28D + fa-stopwatch; U+F2F2 + fa-store; U+F54E + fa-store-alt; U+F54F + fa-stream; U+F550 + fa-street-view; U+F21D + fa-strikethrough; U+F0CC + fa-stroopwafel; U+F551 + fa-subscript; U+F12C + fa-subway; U+F239 + fa-suitcase; U+F0F2 + fa-suitcase-rolling; U+F5C1 + fa-sun; U+F185 + fa-superscript; U+F12B + fa-surprise; U+F5C2 + fa-swatchbook; U+F5C3 + fa-swimmer; U+F5C4 + fa-swimming-pool; U+F5C5 + fa-synagogue; U+F69B + fa-sync; U+F021 + fa-sync-alt; U+F2F1 + fa-syringe; U+F48E + fa-table; U+F0CE + fa-table-tennis; U+F45D + fa-tablet; U+F10A + fa-tablet-alt; U+F3FA + fa-tablets; U+F490 + fa-tachometer-alt; U+F3FD + fa-tag; U+F02B + fa-tags; U+F02C + fa-tape; U+F4DB + fa-tasks; U+F0AE + fa-taxi; U+F1BA + fa-teeth; U+F62E + fa-teeth-open; U+F62F + fa-temperature-high; U+F769 + fa-temperature-low; U+F76B + fa-tenge; U+F7D7 + fa-terminal; U+F120 + fa-text-height; U+F034 + fa-text-width; U+F035 + fa-th; U+F00A + fa-th-large; U+F009 + fa-th-list; U+F00B + fa-theater-masks; U+F630 + fa-thermometer; U+F491 + fa-thermometer-empty; U+F2CB + fa-thermometer-full; U+F2C7 + fa-thermometer-half; U+F2C9 + fa-thermometer-quarter; U+F2CA + fa-thermometer-three-quarters; U+F2C8 + fa-thumbs-down; U+F165 + fa-thumbs-up; U+F164 + fa-thumbtack; U+F08D + fa-ticket-alt; U+F3FF + fa-times; U+F00D + fa-times-circle; U+F057 + fa-tint; U+F043 + fa-tint-slash; U+F5C7 + fa-tired; U+F5C8 + fa-toggle-off; U+F204 + fa-toggle-on; U+F205 + fa-toilet; U+F7D8 + fa-toilet-paper; U+F71E + fa-toolbox; U+F552 + fa-tools; U+F7D9 + fa-tooth; U+F5C9 + fa-torah; U+F6A0 + fa-torii-gate; U+F6A1 + fa-tractor; U+F722 + fa-trademark; U+F25C + fa-traffic-light; U+F637 + fa-train; U+F238 + fa-tram; U+F7DA + fa-transgender; U+F224 + fa-transgender-alt; U+F225 + fa-trash; U+F1F8 + fa-trash-alt; U+F2ED + fa-tree; U+F1BB + fa-trophy; U+F091 + fa-truck; U+F0D1 + fa-truck-loading; U+F4DE + fa-truck-monster; U+F63B + fa-truck-moving; U+F4DF + fa-truck-pickup; U+F63C + fa-tshirt; U+F553 + fa-tty; U+F1E4 + fa-tv; U+F26C + fa-umbrella; U+F0E9 + fa-umbrella-beach; U+F5CA + fa-underline; U+F0CD + fa-undo; U+F0E2 + fa-undo-alt; U+F2EA + fa-universal-access; U+F29A + fa-university; U+F19C + fa-unlink; U+F127 + fa-unlock; U+F09C + fa-unlock-alt; U+F13E + fa-upload; U+F093 + fa-user; U+F007 + fa-user-alt; U+F406 + fa-user-alt-slash; U+F4FA + fa-user-astronaut; U+F4FB + fa-user-check; U+F4FC + fa-user-circle; U+F2BD + fa-user-clock; U+F4FD + fa-user-cog; U+F4FE + fa-user-edit; U+F4FF + fa-user-friends; U+F500 + fa-user-graduate; U+F501 + fa-user-injured; U+F728 + fa-user-lock; U+F502 + fa-user-md; U+F0F0 + fa-user-minus; U+F503 + fa-user-ninja; U+F504 + fa-user-plus; U+F234 + fa-user-secret; U+F21B + fa-user-shield; U+F505 + fa-user-slash; U+F506 + fa-user-tag; U+F507 + fa-user-tie; U+F508 + fa-user-times; U+F235 + fa-users; U+F0C0 + fa-users-cog; U+F509 + fa-utensil-spoon; U+F2E5 + fa-utensils; U+F2E7 + fa-vector-square; U+F5CB + fa-venus; U+F221 + fa-venus-double; U+F226 + fa-venus-mars; U+F228 + fa-vial; U+F492 + fa-vials; U+F493 + fa-video; U+F03D + fa-video-slash; U+F4E2 + fa-vihara; U+F6A7 + fa-volleyball-ball; U+F45F + fa-volume-down; U+F027 + fa-volume-mute; U+F6A9 + fa-volume-off; U+F026 + fa-volume-up; U+F028 + fa-vote-yea; U+F772 + fa-vr-cardboard; U+F729 + fa-walking; U+F554 + fa-wallet; U+F555 + fa-warehouse; U+F494 + fa-water; U+F773 + fa-weight; U+F496 + fa-weight-hanging; U+F5CD + fa-wheelchair; U+F193 + fa-wifi; U+F1EB + fa-wind; U+F72E + fa-window-close; U+F410 + fa-window-maximize; U+F2D0 + fa-window-minimize; U+F2D1 + fa-window-restore; U+F2D2 + fa-wine-bottle; U+F72F + fa-wine-glass; U+F4E3 + fa-wine-glass-alt; U+F5CE + fa-won-sign; U+F159 + fa-wrench; U+F0AD + fa-x-ray; U+F497 + fa-yen-sign; U+F157 + fa-yin-yang; U+F6AD + fa-address-book; U+F2B9 + fa-address-card; U+F2BB + fa-angry; U+F556 + fa-arrow-alt-circle-down; U+F358 + fa-arrow-alt-circle-left; U+F359 + fa-arrow-alt-circle-right; U+F35A + fa-arrow-alt-circle-up; U+F35B + fa-bell; U+F0F3 + fa-bell-slash; U+F1F6 + fa-bookmark; U+F02E + fa-building; U+F1AD + fa-calendar; U+F133 + fa-calendar-alt; U+F073 + fa-calendar-check; U+F274 + fa-calendar-minus; U+F272 + fa-calendar-plus; U+F271 + fa-calendar-times; U+F273 + fa-caret-square-down; U+F150 + fa-caret-square-left; U+F191 + fa-caret-square-right; U+F152 + fa-caret-square-up; U+F151 + fa-chart-bar; U+F080 + fa-check-circle; U+F058 + fa-check-square; U+F14A + fa-circle; U+F111 + fa-clipboard; U+F328 + fa-clock; U+F017 + fa-clone; U+F24D + fa-closed-captioning; U+F20A + fa-comment; U+F075 + fa-comment-alt; U+F27A + fa-comment-dots; U+F4AD + fa-comments; U+F086 + fa-compass; U+F14E + fa-copy; U+F0C5 + fa-copyright; U+F1F9 + fa-credit-card; U+F09D + fa-dizzy; U+F567 + fa-dot-circle; U+F192 + fa-edit; U+F044 + fa-envelope; U+F0E0 + fa-envelope-open; U+F2B6 + fa-eye; U+F06E + fa-eye-slash; U+F070 + fa-file; U+F15B + fa-file-alt; U+F15C + fa-file-archive; U+F1C6 + fa-file-audio; U+F1C7 + fa-file-code; U+F1C9 + fa-file-excel; U+F1C3 + fa-file-image; U+F1C5 + fa-file-pdf; U+F1C1 + fa-file-powerpoint; U+F1C4 + fa-file-video; U+F1C8 + fa-file-word; U+F1C2 + fa-flag; U+F024 + fa-flushed; U+F579 + fa-folder; U+F07B + fa-folder-open; U+F07C + fa-font-awesome-logo-full; U+F4E6 + fa-frown; U+F119 + fa-frown-open; U+F57A + fa-futbol; U+F1E3 + fa-gem; U+F3A5 + fa-grimace; U+F57F + fa-grin; U+F580 + fa-grin-alt; U+F581 + fa-grin-beam; U+F582 + fa-grin-beam-sweat; U+F583 + fa-grin-hearts; U+F584 + fa-grin-squint; U+F585 + fa-grin-squint-tears; U+F586 + fa-grin-stars; U+F587 + fa-grin-tears; U+F588 + fa-grin-tongue; U+F589 + fa-grin-tongue-squint; U+F58A + fa-grin-tongue-wink; U+F58B + fa-grin-wink; U+F58C + fa-hand-lizard; U+F258 + fa-hand-paper; U+F256 + fa-hand-peace; U+F25B + fa-hand-point-down; U+F0A7 + fa-hand-point-left; U+F0A5 + fa-hand-point-right; U+F0A4 + fa-hand-point-up; U+F0A6 + fa-hand-pointer; U+F25A + fa-hand-rock; U+F255 + fa-hand-scissors; U+F257 + fa-hand-spock; U+F259 + fa-handshake; U+F2B5 + fa-hdd; U+F0A0 + fa-heart; U+F004 + fa-hospital; U+F0F8 + fa-hourglass; U+F254 + fa-id-badge; U+F2C1 + fa-id-card; U+F2C2 + fa-image; U+F03E + fa-images; U+F302 + fa-keyboard; U+F11C + fa-kiss; U+F596 + fa-kiss-beam; U+F597 + fa-kiss-wink-heart; U+F598 + fa-laugh; U+F599 + fa-laugh-beam; U+F59A + fa-laugh-squint; U+F59B + fa-laugh-wink; U+F59C + fa-lemon; U+F094 + fa-life-ring; U+F1CD + fa-lightbulb; U+F0EB + fa-list-alt; U+F022 + fa-map; U+F279 + fa-meh; U+F11A + fa-meh-blank; U+F5A4 + fa-meh-rolling-eyes; U+F5A5 + fa-minus-square; U+F146 + fa-money-bill-alt; U+F3D1 + fa-moon; U+F186 + fa-newspaper; U+F1EA + fa-object-group; U+F247 + fa-object-ungroup; U+F248 + fa-paper-plane; U+F1D8 + fa-pause-circle; U+F28B + fa-play-circle; U+F144 + fa-plus-square; U+F0FE + fa-question-circle; U+F059 + fa-registered; U+F25D + fa-sad-cry; U+F5B3 + fa-sad-tear; U+F5B4 + fa-save; U+F0C7 + fa-share-square; U+F14D + fa-smile; U+F118 + fa-smile-beam; U+F5B8 + fa-smile-wink; U+F4DA + fa-snowflake; U+F2DC + fa-square; U+F0C8 + fa-star; U+F005 + fa-star-half; U+F089 + fa-sticky-note; U+F249 + fa-stop-circle; U+F28D + fa-sun; U+F185 + fa-surprise; U+F5C2 + fa-thumbs-down; U+F165 + fa-thumbs-up; U+F164 + fa-times-circle; U+F057 + fa-tired; U+F5C8 + fa-trash-alt; U+F2ED + fa-user; U+F007 + fa-user-circle; U+F2BD + fa-window-close; U+F410 + fa-window-maximize; U+F2D0 + fa-window-minimize; U+F2D1 + fa-window-restore; U+F2D2 + fa-500px; U+F26E + fa-accessible-icon; U+F368 + fa-accusoft; U+F369 + fa-acquisitions-incorporated; U+F6AF + fa-adn; U+F170 + fa-adobe; U+F778 + fa-adversal; U+F36A + fa-affiliatetheme; U+F36B + fa-algolia; U+F36C + fa-alipay; U+F642 + fa-amazon; U+F270 + fa-amazon-pay; U+F42C + fa-amilia; U+F36D + fa-android; U+F17B + fa-angellist; U+F209 + fa-angrycreative; U+F36E + fa-angular; U+F420 + fa-app-store; U+F36F + fa-app-store-ios; U+F370 + fa-apper; U+F371 + fa-apple; U+F179 + fa-apple-pay; U+F415 + fa-artstation; U+F77A + fa-asymmetrik; U+F372 + fa-atlassian; U+F77B + fa-audible; U+F373 + fa-autoprefixer; U+F41C + fa-avianex; U+F374 + fa-aviato; U+F421 + fa-aws; U+F375 + fa-bandcamp; U+F2D5 + fa-behance; U+F1B4 + fa-behance-square; U+F1B5 + fa-bimobject; U+F378 + fa-bitbucket; U+F171 + fa-bitcoin; U+F379 + fa-bity; U+F37A + fa-black-tie; U+F27E + fa-blackberry; U+F37B + fa-blogger; U+F37C + fa-blogger-b; U+F37D + fa-bluetooth; U+F293 + fa-bluetooth-b; U+F294 + fa-btc; U+F15A + fa-buromobelexperte; U+F37F + fa-buysellads; U+F20D + fa-canadian-maple-leaf; U+F785 + fa-cc-amazon-pay; U+F42D + fa-cc-amex; U+F1F3 + fa-cc-apple-pay; U+F416 + fa-cc-diners-club; U+F24C + fa-cc-discover; U+F1F2 + fa-cc-jcb; U+F24B + fa-cc-mastercard; U+F1F1 + fa-cc-paypal; U+F1F4 + fa-cc-stripe; U+F1F5 + fa-cc-visa; U+F1F0 + fa-centercode; U+F380 + fa-centos; U+F789 + fa-chrome; U+F268 + fa-cloudscale; U+F383 + fa-cloudsmith; U+F384 + fa-cloudversify; U+F385 + fa-codepen; U+F1CB + fa-codiepie; U+F284 + fa-confluence; U+F78D + fa-connectdevelop; U+F20E + fa-contao; U+F26D + fa-cpanel; U+F388 + fa-creative-commons; U+F25E + fa-creative-commons-by; U+F4E7 + fa-creative-commons-nc; U+F4E8 + fa-creative-commons-nc-eu; U+F4E9 + fa-creative-commons-nc-jp; U+F4EA + fa-creative-commons-nd; U+F4EB + fa-creative-commons-pd; U+F4EC + fa-creative-commons-pd-alt; U+F4ED + fa-creative-commons-remix; U+F4EE + fa-creative-commons-sa; U+F4EF + fa-creative-commons-sampling; U+F4F0 + fa-creative-commons-sampling-plus; U+F4F1 + fa-creative-commons-share; U+F4F2 + fa-creative-commons-zero; U+F4F3 + fa-critical-role; U+F6C9 + fa-css3; U+F13C + fa-css3-alt; U+F38B + fa-cuttlefish; U+F38C + fa-d-and-d; U+F38D + fa-d-and-d-beyond; U+F6CA + fa-dashcube; U+F210 + fa-delicious; U+F1A5 + fa-deploydog; U+F38E + fa-deskpro; U+F38F + fa-dev; U+F6CC + fa-deviantart; U+F1BD + fa-dhl; U+F790 + fa-diaspora; U+F791 + fa-digg; U+F1A6 + fa-digital-ocean; U+F391 + fa-discord; U+F392 + fa-discourse; U+F393 + fa-dochub; U+F394 + fa-docker; U+F395 + fa-draft2digital; U+F396 + fa-dribbble; U+F17D + fa-dribbble-square; U+F397 + fa-dropbox; U+F16B + fa-drupal; U+F1A9 + fa-dyalog; U+F399 + fa-earlybirds; U+F39A + fa-ebay; U+F4F4 + fa-edge; U+F282 + fa-elementor; U+F430 + fa-ello; U+F5F1 + fa-ember; U+F423 + fa-empire; U+F1D1 + fa-envira; U+F299 + fa-erlang; U+F39D + fa-ethereum; U+F42E + fa-etsy; U+F2D7 + fa-expeditedssl; U+F23E + fa-facebook; U+F09A + fa-facebook-f; U+F39E + fa-facebook-messenger; U+F39F + fa-facebook-square; U+F082 + fa-fantasy-flight-games; U+F6DC + fa-fedex; U+F797 + fa-fedora; U+F798 + fa-figma; U+F799 + fa-firefox; U+F269 + fa-first-order; U+F2B0 + fa-first-order-alt; U+F50A + fa-firstdraft; U+F3A1 + fa-flickr; U+F16E + fa-flipboard; U+F44D + fa-fly; U+F417 + fa-font-awesome; U+F2B4 + fa-font-awesome-alt; U+F35C + fa-font-awesome-flag; U+F425 + fa-font-awesome-logo-full; U+F4E6 + fa-fonticons; U+F280 + fa-fonticons-fi; U+F3A2 + fa-fort-awesome; U+F286 + fa-fort-awesome-alt; U+F3A3 + fa-forumbee; U+F211 + fa-foursquare; U+F180 + fa-free-code-camp; U+F2C5 + fa-freebsd; U+F3A4 + fa-fulcrum; U+F50B + fa-galactic-republic; U+F50C + fa-galactic-senate; U+F50D + fa-get-pocket; U+F265 + fa-gg; U+F260 + fa-gg-circle; U+F261 + fa-git; U+F1D3 + fa-git-square; U+F1D2 + fa-github; U+F09B + fa-github-alt; U+F113 + fa-github-square; U+F092 + fa-gitkraken; U+F3A6 + fa-gitlab; U+F296 + fa-gitter; U+F426 + fa-glide; U+F2A5 + fa-glide-g; U+F2A6 + fa-gofore; U+F3A7 + fa-goodreads; U+F3A8 + fa-goodreads-g; U+F3A9 + fa-google; U+F1A0 + fa-google-drive; U+F3AA + fa-google-play; U+F3AB + fa-google-plus; U+F2B3 + fa-google-plus-g; U+F0D5 + fa-google-plus-square; U+F0D4 + fa-google-wallet; U+F1EE + fa-gratipay; U+F184 + fa-grav; U+F2D6 + fa-gripfire; U+F3AC + fa-grunt; U+F3AD + fa-gulp; U+F3AE + fa-hacker-news; U+F1D4 + fa-hacker-news-square; U+F3AF + fa-hackerrank; U+F5F7 + fa-hips; U+F452 + fa-hire-a-helper; U+F3B0 + fa-hooli; U+F427 + fa-hornbill; U+F592 + fa-hotjar; U+F3B1 + fa-houzz; U+F27C + fa-html5; U+F13B + fa-hubspot; U+F3B2 + fa-imdb; U+F2D8 + fa-instagram; U+F16D + fa-intercom; U+F7AF + fa-internet-explorer; U+F26B + fa-invision; U+F7B0 + fa-ioxhost; U+F208 + fa-itunes; U+F3B4 + fa-itunes-note; U+F3B5 + fa-java; U+F4E4 + fa-jedi-order; U+F50E + fa-jenkins; U+F3B6 + fa-jira; U+F7B1 + fa-joget; U+F3B7 + fa-joomla; U+F1AA + fa-js; U+F3B8 + fa-js-square; U+F3B9 + fa-jsfiddle; U+F1CC + fa-kaggle; U+F5FA + fa-keybase; U+F4F5 + fa-keycdn; U+F3BA + fa-kickstarter; U+F3BB + fa-kickstarter-k; U+F3BC + fa-korvue; U+F42F + fa-laravel; U+F3BD + fa-lastfm; U+F202 + fa-lastfm-square; U+F203 + fa-leanpub; U+F212 + fa-less; U+F41D + fa-line; U+F3C0 + fa-linkedin; U+F08C + fa-linkedin-in; U+F0E1 + fa-linode; U+F2B8 + fa-linux; U+F17C + fa-lyft; U+F3C3 + fa-magento; U+F3C4 + fa-mailchimp; U+F59E + fa-mandalorian; U+F50F + fa-markdown; U+F60F + fa-mastodon; U+F4F6 + fa-maxcdn; U+F136 + fa-medapps; U+F3C6 + fa-medium; U+F23A + fa-medium-m; U+F3C7 + fa-medrt; U+F3C8 + fa-meetup; U+F2E0 + fa-megaport; U+F5A3 + fa-mendeley; U+F7B3 + fa-microsoft; U+F3CA + fa-mix; U+F3CB + fa-mixcloud; U+F289 + fa-mizuni; U+F3CC + fa-modx; U+F285 + fa-monero; U+F3D0 + fa-napster; U+F3D2 + fa-neos; U+F612 + fa-nimblr; U+F5A8 + fa-nintendo-switch; U+F418 + fa-node; U+F419 + fa-node-js; U+F3D3 + fa-npm; U+F3D4 + fa-ns8; U+F3D5 + fa-nutritionix; U+F3D6 + fa-odnoklassniki; U+F263 + fa-odnoklassniki-square; U+F264 + fa-old-republic; U+F510 + fa-opencart; U+F23D + fa-openid; U+F19B + fa-opera; U+F26A + fa-optin-monster; U+F23C + fa-osi; U+F41A + fa-page4; U+F3D7 + fa-pagelines; U+F18C + fa-palfed; U+F3D8 + fa-patreon; U+F3D9 + fa-paypal; U+F1ED + fa-penny-arcade; U+F704 + fa-periscope; U+F3DA + fa-phabricator; U+F3DB + fa-phoenix-framework; U+F3DC + fa-phoenix-squadron; U+F511 + fa-php; U+F457 + fa-pied-piper; U+F2AE + fa-pied-piper-alt; U+F1A8 + fa-pied-piper-hat; U+F4E5 + fa-pied-piper-pp; U+F1A7 + fa-pinterest; U+F0D2 + fa-pinterest-p; U+F231 + fa-pinterest-square; U+F0D3 + fa-playstation; U+F3DF + fa-product-hunt; U+F288 + fa-pushed; U+F3E1 + fa-python; U+F3E2 + fa-qq; U+F1D6 + fa-quinscape; U+F459 + fa-quora; U+F2C4 + fa-r-project; U+F4F7 + fa-raspberry-pi; U+F7BB + fa-ravelry; U+F2D9 + fa-react; U+F41B + fa-reacteurope; U+F75D + fa-readme; U+F4D5 + fa-rebel; U+F1D0 + fa-red-river; U+F3E3 + fa-reddit; U+F1A1 + fa-reddit-alien; U+F281 + fa-reddit-square; U+F1A2 + fa-redhat; U+F7BC + fa-renren; U+F18B + fa-replyd; U+F3E6 + fa-researchgate; U+F4F8 + fa-resolving; U+F3E7 + fa-rev; U+F5B2 + fa-rocketchat; U+F3E8 + fa-rockrms; U+F3E9 + fa-safari; U+F267 + fa-sass; U+F41E + fa-schlix; U+F3EA + fa-scribd; U+F28A + fa-searchengin; U+F3EB + fa-sellcast; U+F2DA + fa-sellsy; U+F213 + fa-servicestack; U+F3EC + fa-shirtsinbulk; U+F214 + fa-shopware; U+F5B5 + fa-simplybuilt; U+F215 + fa-sistrix; U+F3EE + fa-sith; U+F512 + fa-sketch; U+F7C6 + fa-skyatlas; U+F216 + fa-skype; U+F17E + fa-slack; U+F198 + fa-slack-hash; U+F3EF + fa-slideshare; U+F1E7 + fa-snapchat; U+F2AB + fa-snapchat-ghost; U+F2AC + fa-snapchat-square; U+F2AD + fa-soundcloud; U+F1BE + fa-sourcetree; U+F7D3 + fa-speakap; U+F3F3 + fa-spotify; U+F1BC + fa-squarespace; U+F5BE + fa-stack-exchange; U+F18D + fa-stack-overflow; U+F16C + fa-staylinked; U+F3F5 + fa-steam; U+F1B6 + fa-steam-square; U+F1B7 + fa-steam-symbol; U+F3F6 + fa-sticker-mule; U+F3F7 + fa-strava; U+F428 + fa-stripe; U+F429 + fa-stripe-s; U+F42A + fa-studiovinari; U+F3F8 + fa-stumbleupon; U+F1A4 + fa-stumbleupon-circle; U+F1A3 + fa-superpowers; U+F2DD + fa-supple; U+F3F9 + fa-suse; U+F7D6 + fa-teamspeak; U+F4F9 + fa-telegram; U+F2C6 + fa-telegram-plane; U+F3FE + fa-tencent-weibo; U+F1D5 + fa-the-red-yeti; U+F69D + fa-themeco; U+F5C6 + fa-themeisle; U+F2B2 + fa-think-peaks; U+F731 + fa-trade-federation; U+F513 + fa-trello; U+F181 + fa-tripadvisor; U+F262 + fa-tumblr; U+F173 + fa-tumblr-square; U+F174 + fa-twitch; U+F1E8 + fa-twitter; U+F099 + fa-twitter-square; U+F081 + fa-typo3; U+F42B + fa-uber; U+F402 + fa-ubuntu; U+F7DF + fa-uikit; U+F403 + fa-uniregistry; U+F404 + fa-untappd; U+F405 + fa-ups; U+F7E0 + fa-usb; U+F287 + fa-usps; U+F7E1 + fa-ussunnah; U+F407 + fa-vaadin; U+F408 + fa-viacoin; U+F237 + fa-viadeo; U+F2A9 + fa-viadeo-square; U+F2AA + fa-viber; U+F409 + fa-vimeo; U+F40A + fa-vimeo-square; U+F194 + fa-vimeo-v; U+F27D + fa-vine; U+F1CA + fa-vk; U+F189 + fa-vnv; U+F40B + fa-vuejs; U+F41F + fa-weebly; U+F5CC + fa-weibo; U+F18A + fa-weixin; U+F1D7 + fa-whatsapp; U+F232 + fa-whatsapp-square; U+F40C + fa-whmcs; U+F40D + fa-wikipedia-w; U+F266 + fa-windows; U+F17A + fa-wix; U+F5CF + fa-wizards-of-the-coast; U+F730 + fa-wolf-pack-battalion; U+F514 + fa-wordpress; U+F19A + fa-wordpress-simple; U+F411 + fa-wpbeginner; U+F297 + fa-wpexplorer; U+F2DE + fa-wpforms; U+F298 + fa-wpressr; U+F3E4 + fa-xbox; U+F412 + fa-xing; U+F168 + fa-xing-square; U+F169 + fa-y-combinator; U+F23B + fa-yahoo; U+F19E + fa-yandex; U+F413 + fa-yandex-international; U+F414 + fa-yarn; U+F7E3 + fa-yelp; U+F1E9 + fa-yoast; U+F2B1 + fa-youtube; U+F167 + fa-youtube-square; U+F431 + fa-zhihu; U+F63F diff --git a/scripts/fontawesome-menu/icons/regular b/scripts/fontawesome-menu/icons/regular new file mode 100644 index 0000000..86f31b2 --- /dev/null +++ b/scripts/fontawesome-menu/icons/regular @@ -0,0 +1,151 @@ +|address-book +|address-card +|angry +|arrow-alt-circle-down +|arrow-alt-circle-left +|arrow-alt-circle-right +|arrow-alt-circle-up +|bell +|bell-slash +|bookmark +|building +|calendar +|calendar-alt +|calendar-check +|calendar-minus +|calendar-plus +|calendar-times +|caret-square-down +|caret-square-left +|caret-square-right +|caret-square-up +|chart-bar +|check-circle +|check-square +|circle +|clipboard +|clock +|clone +|closed-captioning +|comment +|comment-alt +|comment-dots +|comments +|compass +|copy +|copyright +|credit-card +|dizzy +|dot-circle +|edit +|envelope +|envelope-open +|eye +|eye-slash +|file +|file-alt +|file-archive +|file-audio +|file-code +|file-excel +|file-image +|file-pdf +|file-powerpoint +|file-video +|file-word +|flag +|flushed +|folder +|folder-open +|frown +|frown-open +|futbol +|gem +|grimace +|grin +|grin-alt +|grin-beam +|grin-beam-sweat +|grin-hearts +|grin-squint +|grin-squint-tears +|grin-stars +|grin-tears +|grin-tongue +|grin-tongue-squint +|grin-tongue-wink +|grin-wink +|hand-lizard +|hand-paper +|hand-peace +|hand-point-down +|hand-point-left +|hand-point-right +|hand-point-up +|hand-pointer +|hand-rock +|hand-scissors +|hand-spock +|handshake +|hdd +|heart +|hospital +|hourglass +|id-badge +|id-card +|image +|images +|keyboard +|kiss +|kiss-beam +|kiss-wink-heart +|laugh +|laugh-beam +|laugh-squint +|laugh-wink +|lemon +|life-ring +|lightbulb +|list-alt +|map +|meh +|meh-blank +|meh-rolling-eyes +|minus-square +|money-bill-alt +|moon +|newspaper +|object-group +|object-ungroup +|paper-plane +|pause-circle +|play-circle +|plus-square +|question-circle +|registered +|sad-cry +|sad-tear +|save +|share-square +|smile +|smile-beam +|smile-wink +|snowflake +|square +|star +|star-half +|sticky-note +|stop-circle +|sun +|surprise +|thumbs-down +|thumbs-up +|times-circle +|tired +|trash-alt +|user +|user-circle +|window-close +|window-maximize +|window-minimize +|window-restore
\ No newline at end of file diff --git a/scripts/fontawesome-menu/icons/solid b/scripts/fontawesome-menu/icons/solid new file mode 100644 index 0000000..b77889d --- /dev/null +++ b/scripts/fontawesome-menu/icons/solid @@ -0,0 +1,964 @@ +|ad +|address-book +|address-card +|adjust +|air-freshener +|align-center +|align-justify +|align-left +|align-right +|allergies +|ambulance +|american-sign-language-interpreting +|anchor +|angle-double-down +|angle-double-left +|angle-double-right +|angle-double-up +|angle-down +|angle-left +|angle-right +|angle-up +|angry +|ankh +|apple-alt +|archive +|archway +|arrow-alt-circle-down +|arrow-alt-circle-left +|arrow-alt-circle-right +|arrow-alt-circle-up +|arrow-circle-down +|arrow-circle-left +|arrow-circle-right +|arrow-circle-up +|arrow-down +|arrow-left +|arrow-right +|arrow-up +|arrows-alt +|arrows-alt-h +|arrows-alt-v +|assistive-listening-systems +|asterisk +|at +|atlas +|atom +|audio-description +|award +|baby +|baby-carriage +|backspace +|backward +|bacon +|bahai +|balance-scale +|balance-scale-left +|balance-scale-right +|ban +|band-aid +|barcode +|bars +|baseball-ball +|basketball-ball +|bath +|battery-empty +|battery-full +|battery-half +|battery-quarter +|battery-three-quarters +|bed +|beer +|bell +|bell-slash +|bezier-curve +|bible +|bicycle +|biking +|binoculars +|biohazard +|birthday-cake +|blender +|blender-phone +|blind +|blog +|bold +|bolt +|bomb +|bone +|bong +|book +|book-dead +|book-medical +|book-open +|book-reader +|bookmark +|border-all +|border-none +|border-style +|bowling-ball +|box +|box-open +|boxes +|braille +|brain +|bread-slice +|briefcase +|briefcase-medical +|broadcast-tower +|broom +|brush +|bug +|building +|bullhorn +|bullseye +|burn +|bus +|bus-alt +|business-time +|calculator +|calendar +|calendar-alt +|calendar-check +|calendar-day +|calendar-minus +|calendar-plus +|calendar-times +|calendar-week +|camera +|camera-retro +|campground +|candy-cane +|cannabis +|capsules +|car +|car-alt +|car-battery +|car-crash +|car-side +|caravan +|caret-down +|caret-left +|caret-right +|caret-square-down +|caret-square-left +|caret-square-right +|caret-square-up +|caret-up +|carrot +|cart-arrow-down +|cart-plus +|cash-register +|cat +|certificate +|chair +|chalkboard +|chalkboard-teacher +|charging-station +|chart-area +|chart-bar +|chart-line +|chart-pie +|check +|check-circle +|check-double +|check-square +|cheese +|chess +|chess-bishop +|chess-board +|chess-king +|chess-knight +|chess-pawn +|chess-queen +|chess-rook +|chevron-circle-down +|chevron-circle-left +|chevron-circle-right +|chevron-circle-up +|chevron-down +|chevron-left +|chevron-right +|chevron-up +|child +|church +|circle +|circle-notch +|city +|clinic-medical +|clipboard +|clipboard-check +|clipboard-list +|clock +|clone +|closed-captioning +|cloud +|cloud-download-alt +|cloud-meatball +|cloud-moon +|cloud-moon-rain +|cloud-rain +|cloud-showers-heavy +|cloud-sun +|cloud-sun-rain +|cloud-upload-alt +|cocktail +|code +|code-branch +|coffee +|cog +|cogs +|coins +|columns +|comment +|comment-alt +|comment-dollar +|comment-dots +|comment-medical +|comment-slash +|comments +|comments-dollar +|compact-disc +|compass +|compress +|compress-alt +|compress-arrows-alt +|concierge-bell +|cookie +|cookie-bite +|copy +|copyright +|couch +|credit-card +|crop +|crop-alt +|cross +|crosshairs +|crow +|crown +|crutch +|cube +|cubes +|cut +|database +|deaf +|democrat +|desktop +|dharmachakra +|diagnoses +|dice +|dice-d20 +|dice-d6 +|dice-five +|dice-four +|dice-one +|dice-six +|dice-three +|dice-two +|digital-tachograph +|directions +|divide +|dizzy +|dna +|dog +|dollar-sign +|dolly +|dolly-flatbed +|donate +|door-closed +|door-open +|dot-circle +|dove +|download +|drafting-compass +|dragon +|draw-polygon +|drum +|drum-steelpan +|drumstick-bite +|dumbbell +|dumpster +|dumpster-fire +|dungeon +|edit +|egg +|eject +|ellipsis-h +|ellipsis-v +|envelope +|envelope-open +|envelope-open-text +|envelope-square +|equals +|eraser +|ethernet +|euro-sign +|exchange-alt +|exclamation +|exclamation-circle +|exclamation-triangle +|expand +|expand-alt +|expand-arrows-alt +|external-link-alt +|external-link-square-alt +|eye +|eye-dropper +|eye-slash +|fan +|fast-backward +|fast-forward +|fax +|feather +|feather-alt +|female +|fighter-jet +|file +|file-alt +|file-archive +|file-audio +|file-code +|file-contract +|file-csv +|file-download +|file-excel +|file-export +|file-image +|file-import +|file-invoice +|file-invoice-dollar +|file-medical +|file-medical-alt +|file-pdf +|file-powerpoint +|file-prescription +|file-signature +|file-upload +|file-video +|file-word +|fill +|fill-drip +|film +|filter +|fingerprint +|fire +|fire-alt +|fire-extinguisher +|first-aid +|fish +|fist-raised +|flag +|flag-checkered +|flag-usa +|flask +|flushed +|folder +|folder-minus +|folder-open +|folder-plus +|font +|football-ball +|forward +|frog +|frown +|frown-open +|funnel-dollar +|futbol +|gamepad +|gas-pump +|gavel +|gem +|genderless +|ghost +|gift +|gifts +|glass-cheers +|glass-martini +|glass-martini-alt +|glass-whiskey +|glasses +|globe +|globe-africa +|globe-americas +|globe-asia +|globe-europe +|golf-ball +|gopuram +|graduation-cap +|greater-than +|greater-than-equal +|grimace +|grin +|grin-alt +|grin-beam +|grin-beam-sweat +|grin-hearts +|grin-squint +|grin-squint-tears +|grin-stars +|grin-tears +|grin-tongue +|grin-tongue-squint +|grin-tongue-wink +|grin-wink +|grip-horizontal +|grip-lines +|grip-lines-vertical +|grip-vertical +|guitar +|h-square +|hamburger +|hammer +|hamsa +|hand-holding +|hand-holding-heart +|hand-holding-usd +|hand-lizard +|hand-middle-finger +|hand-paper +|hand-peace +|hand-point-down +|hand-point-left +|hand-point-right +|hand-point-up +|hand-pointer +|hand-rock +|hand-scissors +|hand-spock +|hands +|hands-helping +|handshake +|hanukiah +|hard-hat +|hashtag +|hat-cowboy +|hat-cowboy-side +|hat-wizard +|hdd +|heading +|headphones +|headphones-alt +|headset +|heart +|heart-broken +|heartbeat +|helicopter +|highlighter +|hiking +|hippo +|history +|hockey-puck +|holly-berry +|home +|horse +|horse-head +|hospital +|hospital-alt +|hospital-symbol +|hot-tub +|hotdog +|hotel +|hourglass +|hourglass-end +|hourglass-half +|hourglass-start +|house-damage +|hryvnia +|i-cursor +|ice-cream +|icicles +|icons +|id-badge +|id-card +|id-card-alt +|igloo +|image +|images +|inbox +|indent +|industry +|infinity +|info +|info-circle +|italic +|jedi +|joint +|journal-whills +|kaaba +|key +|keyboard +|khanda +|kiss +|kiss-beam +|kiss-wink-heart +|kiwi-bird +|landmark +|language +|laptop +|laptop-code +|laptop-medical +|laugh +|laugh-beam +|laugh-squint +|laugh-wink +|layer-group +|leaf +|lemon +|less-than +|less-than-equal +|level-down-alt +|level-up-alt +|life-ring +|lightbulb +|link +|lira-sign +|list +|list-alt +|list-ol +|list-ul +|location-arrow +|lock +|lock-open +|long-arrow-alt-down +|long-arrow-alt-left +|long-arrow-alt-right +|long-arrow-alt-up +|low-vision +|luggage-cart +|magic +|magnet +|mail-bulk +|male +|map +|map-marked +|map-marked-alt +|map-marker +|map-marker-alt +|map-pin +|map-signs +|marker +|mars +|mars-double +|mars-stroke +|mars-stroke-h +|mars-stroke-v +|mask +|medal +|medkit +|meh +|meh-blank +|meh-rolling-eyes +|memory +|menorah +|mercury +|meteor +|microchip +|microphone +|microphone-alt +|microphone-alt-slash +|microphone-slash +|microscope +|minus +|minus-circle +|minus-square +|mitten +|mobile +|mobile-alt +|money-bill +|money-bill-alt +|money-bill-wave +|money-bill-wave-alt +|money-check +|money-check-alt +|monument +|moon +|mortar-pestle +|mosque +|motorcycle +|mountain +|mouse +|mouse-pointer +|mug-hot +|music +|network-wired +|neuter +|newspaper +|not-equal +|notes-medical +|object-group +|object-ungroup +|oil-can +|om +|otter +|outdent +|pager +|paint-brush +|paint-roller +|palette +|pallet +|paper-plane +|paperclip +|parachute-box +|paragraph +|parking +|passport +|pastafarianism +|paste +|pause +|pause-circle +|paw +|peace +|pen +|pen-alt +|pen-fancy +|pen-nib +|pen-square +|pencil-alt +|pencil-ruler +|people-carry +|pepper-hot +|percent +|percentage +|person-booth +|phone +|phone-alt +|phone-slash +|phone-square +|phone-square-alt +|phone-volume +|photo-video +|piggy-bank +|pills +|pizza-slice +|place-of-worship +|plane +|plane-arrival +|plane-departure +|play +|play-circle +|plug +|plus +|plus-circle +|plus-square +|podcast +|poll +|poll-h +|poo +|poo-storm +|poop +|portrait +|pound-sign +|power-off +|pray +|praying-hands +|prescription +|prescription-bottle +|prescription-bottle-alt +|print +|procedures +|project-diagram +|puzzle-piece +|qrcode +|question +|question-circle +|quidditch +|quote-left +|quote-right +|quran +|radiation +|radiation-alt +|rainbow +|random +|receipt +|record-vinyl +|recycle +|redo +|redo-alt +|registered +|remove-format +|reply +|reply-all +|republican +|restroom +|retweet +|ribbon +|ring +|road +|robot +|rocket +|route +|rss +|rss-square +|ruble-sign +|ruler +|ruler-combined +|ruler-horizontal +|ruler-vertical +|running +|rupee-sign +|sad-cry +|sad-tear +|satellite +|satellite-dish +|save +|school +|screwdriver +|scroll +|sd-card +|search +|search-dollar +|search-location +|search-minus +|search-plus +|seedling +|server +|shapes +|share +|share-alt +|share-alt-square +|share-square +|shekel-sign +|shield-alt +|ship +|shipping-fast +|shoe-prints +|shopping-bag +|shopping-basket +|shopping-cart +|shower +|shuttle-van +|sign +|sign-in-alt +|sign-language +|sign-out-alt +|signal +|signature +|sim-card +|sitemap +|skating +|skiing +|skiing-nordic +|skull +|skull-crossbones +|slash +|sleigh +|sliders-h +|smile +|smile-beam +|smile-wink +|smog +|smoking +|smoking-ban +|sms +|snowboarding +|snowflake +|snowman +|snowplow +|socks +|solar-panel +|sort +|sort-alpha-down +|sort-alpha-down-alt +|sort-alpha-up +|sort-alpha-up-alt +|sort-amount-down +|sort-amount-down-alt +|sort-amount-up +|sort-amount-up-alt +|sort-down +|sort-numeric-down +|sort-numeric-down-alt +|sort-numeric-up +|sort-numeric-up-alt +|sort-up +|spa +|space-shuttle +|spell-check +|spider +|spinner +|splotch +|spray-can +|square +|square-full +|square-root-alt +|stamp +|star +|star-and-crescent +|star-half +|star-half-alt +|star-of-david +|star-of-life +|step-backward +|step-forward +|stethoscope +|sticky-note +|stop +|stop-circle +|stopwatch +|store +|store-alt +|stream +|street-view +|strikethrough +|stroopwafel +|subscript +|subway +|suitcase +|suitcase-rolling +|sun +|superscript +|surprise +|swatchbook +|swimmer +|swimming-pool +|synagogue +|sync +|sync-alt +|syringe +|table +|table-tennis +|tablet +|tablet-alt +|tablets +|tachometer-alt +|tag +|tags +|tape +|tasks +|taxi +|teeth +|teeth-open +|temperature-high +|temperature-low +|tenge +|terminal +|text-height +|text-width +|th +|th-large +|th-list +|theater-masks +|thermometer +|thermometer-empty +|thermometer-full +|thermometer-half +|thermometer-quarter +|thermometer-three-quarters +|thumbs-down +|thumbs-up +|thumbtack +|ticket-alt +|times +|times-circle +|tint +|tint-slash +|tired +|toggle-off +|toggle-on +|toilet +|toilet-paper +|toolbox +|tools +|tooth +|torah +|torii-gate +|tractor +|trademark +|traffic-light +論|trailer +|train +|tram +|transgender +|transgender-alt +|trash +|trash-alt +|trash-restore +|trash-restore-alt +|tree +|trophy +|truck +|truck-loading +|truck-monster +|truck-moving +|truck-pickup +|tshirt +|tty +|tv +|umbrella +|umbrella-beach +|underline +|undo +|undo-alt +|universal-access +|university +|unlink +|unlock +|unlock-alt +|upload +|user +|user-alt +|user-alt-slash +|user-astronaut +|user-check +|user-circle +|user-clock +|user-cog +|user-edit +|user-friends +|user-graduate +|user-injured +|user-lock +|user-md +|user-minus +|user-ninja +|user-nurse +|user-plus +|user-secret +|user-shield +|user-slash +|user-tag +|user-tie +|user-times +|users +|users-cog +|utensil-spoon +|utensils +|vector-square +|venus +|venus-double +|venus-mars +|vial +|vials +|video +|video-slash +|vihara +|voicemail +|volleyball-ball +|volume-down +|volume-mute +|volume-off +|volume-up +|vote-yea +|vr-cardboard +|walking +|wallet +|warehouse +|water +|wave-square +|weight +|weight-hanging +|wheelchair +|wifi +|wind +|window-close +|window-maximize +|window-minimize +|window-restore +|wine-bottle +|wine-glass +|wine-glass-alt +|won-sign +|wrench +|x-ray +|yen-sign +|yin-yang
\ No newline at end of file diff --git a/scripts/fontawesome-menu/package-lock.json b/scripts/fontawesome-menu/package-lock.json new file mode 100644 index 0000000..5fcb473 --- /dev/null +++ b/scripts/fontawesome-menu/package-lock.json @@ -0,0 +1,317 @@ +{ + "name": "fontawesome-menu", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "~1.2.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "https-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", + "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" + }, + "puppeteer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.0.0.tgz", + "integrity": "sha512-t3MmTWzQxPRP71teU6l0jX47PHXlc4Z52sQv4LJQSZLq1ttkKS2yGM3gaI57uQwZkNaoGd0+HPPMELZkcyhlqA==", + "requires": { + "debug": "^4.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^3.0.0", + "mime": "^2.0.3", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^6.1.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "requires": { + "fd-slicer": "~1.0.1" + } + } + } +} diff --git a/scripts/fontawesome-menu/package.json b/scripts/fontawesome-menu/package.json new file mode 100644 index 0000000..470b65c --- /dev/null +++ b/scripts/fontawesome-menu/package.json @@ -0,0 +1,21 @@ +{ + "name": "fontawesome-menu", + "version": "0.0.0", + "description": "__", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "__" + }, + "keywords": [ + "__" + ], + "author": "Akshay Nair", + "license": "MIT", + "dependencies": { + "puppeteer": "^2.0.0" + } +} diff --git a/scripts/fontawesome-menu/populate-fontsheet.js b/scripts/fontawesome-menu/populate-fontsheet.js new file mode 100644 index 0000000..c41f7ad --- /dev/null +++ b/scripts/fontawesome-menu/populate-fontsheet.js @@ -0,0 +1,54 @@ +const puppeteer = require('puppeteer'); +const fs = require('fs'); +const path = require('path'); + +const getTabBtnSelector = type => `[href="/cheatsheet/free/${type}"]`; + + +const types = ['solid', 'regular', 'brands']; + +async function start() { + const b = await puppeteer.launch({ headless: true }); + + const p = await b.newPage(); + + console.log('Downloading...'); + await p.goto('https://fontawesome.com/cheatsheet/free/solid'); + + const icons = {}; + + for (const type of types) { + await p.click(getTabBtnSelector(type)); + + const data = await p.evaluate((type) => { + const getClass = type => ({ + solid: '.fas', + regular: '.far', + brands: '.fab', + })[type]; + + return [...document.querySelectorAll(`section article`)] + .map($el => ({ + label: $el.id, + icon: $el.querySelector(getClass(type)).textContent, + // group: type, + })); + }, type); + + icons[type] = data; + } + + b.close(); + + console.log('Saving to icons...'); + Object.entries(icons).forEach(([type, icons]) => { + const iconsContent = icons + .map(({ label, icon, group }) => `${icon}|${label}`) + .join('\n'); + + fs.writeFileSync(path.resolve(__dirname, `icons/${type}`), iconsContent); + }); +} + +start(); + diff --git a/scripts/image.sh b/scripts/image.sh new file mode 100755 index 0000000..66031ec --- /dev/null +++ b/scripts/image.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +source "`ueberzug library`"; + +readonly ID_PREVIEW="preview"; + +#case "$1" in + #"clear") ImageLayer 0< <( + #ImageLayer::remove [identifier]="$ID_PREVIEW" + #) ;; + #"draw") ImageLayer 0< <( + #ImageLayer::add \ + #[identifier]="$ID_PREVIEW" \ + #[x]="$3" [y]="$4" \ + #[max_width]="$5" [max_height]="$6" \ + #[path]="$2"; + #read -ern 1; + #) ;; + #"*") echo "Unknown command: '$1'" ;; +#esac + +LAST_IMAGE=$([[ -f "$LAST_IMAGE_F" ]] && cat $LAST_IMAGE_F); + +clear_img() { + echo "" > $FIFO_UEBERZUG; + + if [[ ! -z "$LAST_IMAGE" ]]; then + declare -p -A cmd=([action]=remove [identifier]="$LAST_IMAGE") \ + > "$FIFO_UEBERZUG"; + fi; +} + +clear_img; + +case "$1" in + "clear") clear_img ;; + "draw") + LAST_IMAGE="preview-$2"; + declare -p -A cmd=([action]=add [identifier]="$LAST_IMAGE" \ + [x]="$3" [y]="$4" [max_width]="$5" [max_height]="$6" \ + [path]="$2") > "$FIFO_UEBERZUG"; + echo -e "$LAST_IMAGE" > $LAST_IMAGE_F; + ;; + "*") echo "Unknown command: '$1', '$2'" ;; +esac + diff --git a/scripts/menuitems.sh b/scripts/menuitems.sh new file mode 100755 index 0000000..92e24d4 --- /dev/null +++ b/scripts/menuitems.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash + +volume_component() { amixer get Master | awk -F'[][]' '/dB/ {print $C}' C="$1"; } +mic_component() { amixer get Capture | awk -F'[][]' '/dB/ {print $C}' C="$1" | head -n 1; } + +playerctl_icon() { + local playstate="$(~/scripts/music/player.sh get_play_state)"; + case "$playstate" in + Paused) echo "" ;; + Playing) echo "" ;; + Stopped) echo "" ;; + *) ;; + esac +} + +network_state() { + local state=$(nmcli dev show wlp5s0); + local ssid=$(echo -e "$state" | grep '^GENERAL.CONNECTION:' | sed 's/^GENERAL.CONNECTION:\s*//g'); + + [[ "$ssid" == "--" ]] && ssid=""; + + echo "$([[ -z "$ssid" ]] && echo "offline" || echo "online") ${ssid:0:12}..."; +} + +volume_icon() { volume_component 6 | sed 's/on//; s/off/🔇/'; } +mic_icon() { mic_component 6 | sed 's/on//; s/off/✖/'; } + +icon() { + case "$1" in + date) echo "" ;; + battery) echo "" ;; + music) playerctl_icon ;; + volume) echo -n "[$(mic_icon)] $(volume_icon)" ;; + brightness) echo "" ;; + network) network_state | sed 's/online//; s/idle//; s/offline/❌/' ;; + *) ;; + esac +} + +date_module() { + echo "$(icon date) $(date +"%A, %e %b - %I:%M %p")"; +} + +battery_module() { + local capacity=$(cat "/sys/class/power_supply/BAT0/capacity"); + echo "$(icon battery) $capacity%"; +} + +music_module() { + local label=$(~/scripts/music/player.sh get_label); + echo "$(icon music) $label"; +} + +brightness_module() { + echo "$(icon brightness) $(printf "%.0f%s" "$(xbacklight -get)" "%")" +} + +volume_module() { + echo "$(icon volume) $(volume_component 2)"; +} + +keymode_module() { + echo "$(~/scripts/shotkey.sh mode)"; +} + +network_module() { + echo "$(icon network)"; +} + + +get_module() { + case "$1" in + date) date_module ;; + battery) battery_module ;; + volume) volume_module ;; + music) music_module ;; + brightness) brightness_module ;; + keymode) keymode_module ;; + network) network_module ;; + esac; +} + +padding=" "; + +echo "$padding$(get_module $1)$padding"; diff --git a/scripts/modules/rofi-menu.sh b/scripts/modules/rofi-menu.sh new file mode 100644 index 0000000..adff2d9 --- /dev/null +++ b/scripts/modules/rofi-menu.sh @@ -0,0 +1,6 @@ + +ROFI_BLOCK_THEME="$HOME/.config/rofi-themes/phenax-block-theme.rasi" + +open-menu() { dmenu "$@"; } +open-block-menu() { rofi -i -dmenu -theme "$ROFI_BLOCK_THEME" "$@"; } + diff --git a/scripts/modules/utils.sh b/scripts/modules/utils.sh new file mode 100644 index 0000000..0cb43b0 --- /dev/null +++ b/scripts/modules/utils.sh @@ -0,0 +1,10 @@ + +trim() { sed '/^$/ d'; } +trim_line() { sed -e 's/^\s*//' -e 's/\s*$//'; } + +clipboard() { xclip -selection clipboard "$@"; } + +copy() { clipboard -i; } +read_clipboard() { clipboard -o; } + +copy_str() { echo -n "$@" | copy; } diff --git a/scripts/monitor.sh b/scripts/monitor.sh new file mode 100755 index 0000000..93a0282 --- /dev/null +++ b/scripts/monitor.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +source "$HOME/scripts/modules/rofi-menu.sh"; + +PRIMARY="eDP1"; + +list-monitors() { xrandr --listmonitors | grep -v 'Monitors:' | awk '{print $4 " (" $3 ")"}'; } + +monitor-off() { xrandr --output ${1:-"HDMI-1"} --off; }; + +monitor-on() { + xrandr --output ${2:-"HDMI-1"} --auto --${1:-"right-of"} $PRIMARY; +} + +show-menu() { + list-monitors | open-menu -p "Monitors"; +} + +case $1 in + ls) list-monitors ;; + on) monitor-on "$2" "$3" ;; + off) monitor-off "$2" ;; + menu) show-menu ;; + *) echo "Fuck off" ;; +esac; + diff --git a/scripts/mounter.sh b/scripts/mounter.sh new file mode 100755 index 0000000..972b329 --- /dev/null +++ b/scripts/mounter.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +host="192.168.0.10"; +mount_dir=~/Downloads/shared; + +user=artemis; +pass=$(pass show Artemis/smb.artemis); + +sudo mount -t cifs //$host/public $mount_dir -o rw,username=$user,password=$pass; + diff --git a/scripts/mouse.sh b/scripts/mouse.sh new file mode 100755 index 0000000..271f1a0 --- /dev/null +++ b/scripts/mouse.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +MOVE_DEFAULT=20; + +click() { xdotool click 1; } +rclick() { xdotool click 3; } + +move() { + case "$1" in + left) xdotool mousemove_relative -- -$2 0 ;; + right) xdotool mousemove_relative -- $2 0 ;; + up) xdotool mousemove_relative -- 0 -$2 ;; + down) xdotool mousemove_relative -- 0 $2 ;; + *) exit 1 ;; + esac +} + +case "$1" in + move) move "$2" "${3:-$MOVE_DEFAULT}" ;; + #divide) divide "$2" ;; + click) click ;; + rclick) rclick ;; + *) echo "no"; exit 1; ;; +esac + diff --git a/scripts/music/player.sh b/scripts/music/player.sh new file mode 100755 index 0000000..76f4988 --- /dev/null +++ b/scripts/music/player.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +player() { playerctl --player=mopidy "$@"; } + +# Get player state +#get_play_state() { player metadata --format '{{status}}' || echo 'Stopped'; } +get_play_state() { + local state=$(mpc status | awk '/\[\w*\]/ {print $1}'); + case "$state" in + '[playing]') echo "Playing" ;; + '[paused]') echo "Paused" ;; + *) echo "Stopped" ;; + esac; +} + +# Get title - artist (song label) +#get_label() { player metadata --format '{{title}} - {{artist}}' || echo '...'; } +get_label() { + echo -n "$(mpc current | cut -c1-20)"; + echo "..."; +} + +# Play/Pause toggle: +play_pause() { + #player play-pause; + mpc toggle; + update-dwmblock music; +} + +# Next/Prev +next() { + #player next; + mpc next; + update-dwmblock music; +} +prev() { + #player previous; + mpc prev; + update-dwmblock music; +} + +notify() { + update-dwmblock music; +} + +case "$1" in + play_pause|pp) play_pause ;; + next|n) next ;; + prev|p) prev ;; + dump_metadata) get_metadata ;; + get_label) get_label ;; + get_play_state) get_play_state ;; + notify) notify ;; + *) echo "Learn how to use shit before you use them" ;; +esac + diff --git a/scripts/music/split-album.sh b/scripts/music/split-album.sh new file mode 100755 index 0000000..d7a23a4 --- /dev/null +++ b/scripts/music/split-album.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash + +MUSIC_DIR="$HOME/Downloads/music"; +EXT=opus; + +AUDIO_FILE="$1"; +TIMESTAMPS_FILE="$2"; + +ALBUM_ARTIST=$(echo "$TIMESTAMPS_FILE" | sed -e 's/^.*\///g' -e 's/\.splits$//'); + +ARTIST="$(echo $ALBUM_ARTIST | awk -F' - ' '{print $1}')"; +ALBUM="$(echo $ALBUM_ARTIST | awk -F' - ' '{print $2}')"; + +OUT_DIR="$MUSIC_DIR/$ARTIST/$ALBUM"; +[[ ! -d "$OUT_DIR" ]] && mkdir -p "$OUT_DIR"; + +AUDIOINFO=$(mediainfo "$AUDIO_FILE" --Output=JSON); +DURATION=$(echo -e "$AUDIOINFO" | jq -r '.media.track[0].Duration'); + +TOTAL_TRACKS=$(cat "$TIMESTAMPS_FILE" | wc -l); + +add_tags() { ~/scripts/music/tag.sh "$@"; } + +padd() { printf "%0${2:-2}d" $(echo $1 | cut -d'.' -f1); } + +to_timestamp() { + local duration=$1; + local hours=$(echo "$duration / 3600" | bc); + duration=$(echo "$duration % 3600" | bc); + local mins=$(echo "$duration / 60" | bc); + local secs=$(echo "$duration % 60" | bc); + echo "$(padd $hours):$(padd $mins):$(padd $secs)"; +} + +starttime=""; +music=""; +index=0; + +(cat "$TIMESTAMPS_FILE"; echo "<<END") | while read split; do + if [[ ! -z "$split" ]]; then + if [[ "$split" == "<<END" ]]; then + endtime=$(to_timestamp $DURATION); + else + endtime="$(echo $split | cut -d' ' -f1)"; + nextmusic="$(echo $split | cut -d' ' -f 2-)"; + fi; + + if [[ ! -z "$music" ]]; then + output="$OUT_DIR/$(padd $index) - $music.$EXT"; + echo "$starttime - $endtime ($output)"; + ffmpeg \ + -nostdin -y \ + -loglevel -8 \ + -i "$AUDIO_FILE" \ + -ss "$starttime" \ + -to "$endtime" \ + -vn "$output" && \ + add_tags \ + -a "$ARTIST" \ + -A "$ALBUM" \ + -t "$music" \ + -n "$music" \ + -N "$TOTAL_TRACKS" \ + "$output" \ + ; + fi; + + music=$nextmusic; + starttime=$endtime; + index=$((index + 1)); + fi; +done; diff --git a/scripts/music/tag-bulk.sh b/scripts/music/tag-bulk.sh new file mode 100755 index 0000000..bd93205 --- /dev/null +++ b/scripts/music/tag-bulk.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +artist=$1; +album=$2; + +ext=${3:-'opus'}; + +file=${4:-'taginfo'}; + +total=$(cat $file | wc -l); + +cat $file | while read n song; do + song_file="$song.$ext"; + if [[ -f "$song_file" ]]; then + ~/scripts/music/tag.sh \ + -a "$artist" \ + -A "$album" \ + -t "$song" \ + -n "$n" \ + -N "$total" \ + "$song_file"; + else + echo "File $song_file not found"; + fi; +done; + diff --git a/scripts/music/tag.sh b/scripts/music/tag.sh new file mode 100755 index 0000000..325dec3 --- /dev/null +++ b/scripts/music/tag.sh @@ -0,0 +1,59 @@ +#!/bin/sh + +err() { echo "Usage: + tag [OPTIONS] file +Options: + -a: artist + -t: song + -A: album + -n: track + -N: total number of tracks + -d: year of publication + -g: genre + -c: comment +You will be prompted for title, artist, album and track if not given." && exit 1 ;} + +while getopts "a:t:A:n:N:d:g:c:f:" o; do case "${o}" in + a) artist="${OPTARG}" ;; + t) title="${OPTARG}" ;; + A) album="${OPTARG}" ;; + n) track="${OPTARG}" ;; + N) total="${OPTARG}" ;; + d) date="${OPTARG}" ;; + g) genre="${OPTARG}" ;; + c) comment="${OPTARG}" ;; + f) file="${OPTARG}" ;; + *) printf "Invalid option: -%s\\n" "$OPTARG" && err ;; +esac; done; + +shift $((OPTIND - 1)); + +file="$1" + +[ ! -f "$file" ] && echo "Provide file to tag." && err + +[ -z "$title" ] && echo "Enter a title." && read -r title +[ -z "$artist" ] && echo "Enter an artist." && read -r artist +[ -z "$album" ] && echo "Enter an album." && read -r album +[ -z "$track" ] && echo "Enter a track number." && read -r track + +case "$file" in + *.ogg) echo "Title=$title +Artist=$artist +Album=$album +Track=$track +Total=$total +Date=$date +Genre=$genre +Comment=$comment" | vorbiscomment -w "$file" ;; + *.opus) echo "Title=$title +Artist=$artist +Album=$album +Track=$track +Total=$total +Date=$date +Genre=$genre +Comment=$comment" | opustags -i -S "$file" ;; + *.mp3) eyeD3 -Q --remove-all -a "$artist" -A "$album" -t "$title" -n "$track" -N "$total" -Y "$date" "$file" ;; + *) echo "File type not implemented yet." ;; +esac diff --git a/scripts/notify.sh b/scripts/notify.sh new file mode 100755 index 0000000..5111b87 --- /dev/null +++ b/scripts/notify.sh @@ -0,0 +1,8 @@ +#!/bin/bash +# All the wrapping wierdness to add support for cron +# https://wiki.archlinux.org/index.php/Desktop_notifications#Usage_in_programming + +user=$(whoami); + +sudo -u $user DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u $user)/dbus-1 notify-send "$@"; + diff --git a/scripts/open-project.sh b/scripts/open-project.sh new file mode 100755 index 0000000..d452655 --- /dev/null +++ b/scripts/open-project.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +PROJECTS_DIR="$HOME/dev/projects"; +SUCKLESS_DIR="$HOME/.config/suckless"; + +get_projects() { + ls -t "$PROJECTS_DIR" | sed 's/^/dev:/g'; + ls -t "$SUCKLESS_DIR" | sed 's/^/suckless:/g'; +} + +project=$(get_projects | dmenu -p "Project name :: "); + +if [ -z "$project" ]; then + exit 1; +fi; + +projtype=$(echo "$project" | cut -d: -f1); +projdir=$(echo "$project" | cut -d: -f2-); + +fulldir=""; + +case "$projtype" in + dev) fulldir="$PROJECTS_DIR/$projdir" ;; + suckless) fulldir="$SUCKLESS_DIR/$projdir" ;; +esac + +[ ! -z "$fulldir" ] && [ -d "$fulldir" ] && ~/scripts/sessions/project.sh "$fulldir"; + diff --git a/scripts/pass-migrate.sh b/scripts/pass-migrate.sh new file mode 100755 index 0000000..01adab9 --- /dev/null +++ b/scripts/pass-migrate.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +[[ $# != 2 ]] && echo "Usage: pass-migrate.sh <pass_dir> <key_file>" && exit 1; + +PASS_DIR="$1"; +KEY_FILE="$2"; + +to_passnames() { sed -e 's/^[./]*//g' -e 's/\.gpg$//g'; } + +get_gpg_files() { + cd "$PASS_DIR" 2> /dev/null; + find . -regex '.*\.gpg'; +} + +get_gpg_files | to_passnames | while read key; do + pass=$(pass show "$key"); + echo "$pass"; +done; + diff --git a/scripts/password_prompt.sh b/scripts/password_prompt.sh new file mode 100755 index 0000000..439db6c --- /dev/null +++ b/scripts/password_prompt.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +echo -n '' | dmenu -P -p "Password :: "; + diff --git a/scripts/powercontrol.sh b/scripts/powercontrol.sh new file mode 100755 index 0000000..90304d0 --- /dev/null +++ b/scripts/powercontrol.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +source "$HOME/scripts/modules/rofi-menu.sh"; +source "$HOME/scripts/modules/utils.sh"; + +optn_poweroff="[] off"; +optn_reboot="[] reboot"; +optn_suspend="[] suspend"; +optn_logout="[] logout"; +optn_lock="[] lock"; +optn_cancel="[] cancel"; + +OPTIONS=$(echo -e " +$optn_poweroff +$optn_reboot +$optn_suspend +$optn_logout +$optn_lock +$optn_cancel +" | trim); + +lock() { bslock; } +logout_() { ~/.config/autostart.sh kill; killall dwm; } +poweroff_() { systemctl shutdown; } +reboot_() { systemctl reboot; } +suspend_() { lock & disown; sleep 0.3; sudo zzz; } + +menu() { + result=$(echo -e "$OPTIONS" | open-menu -l 0 -p "Power button"); + case "$result" in + "$optn_lock") lock ;; + "$optn_logout") logout_ ;; + "$optn_poweroff") poweroff_ ;; + "$optn_reboot") reboot_ ;; + "$optn_suspend") suspend_ ;; + esac +} + +case "$1" in + menu) menu ;; + lock) lock ;; + poweroff) poweroff_ ;; + reboot) reboot_ ;; + *) exit 1 ;; +esac + diff --git a/scripts/qutebrowser/session-box.sh b/scripts/qutebrowser/session-box.sh new file mode 100755 index 0000000..76d32c2 --- /dev/null +++ b/scripts/qutebrowser/session-box.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +session_dir=$(mktemp -d /tmp/qb-sessionbox.XXXXX); + +data=$session_dir/data; +config=$session_dir/config; + +mkdir -p $config; +cp -r ~/.config/qutebrowser/* $config; + +mkdir -p $data; +cp -r ~/.local/share/qutebrowser/* $data; + +rm $data/sessions/default.yml +rm -rf $data/webengine; + +qutebrowser --basedir $session_dir; + +rm -rf $session_dir; diff --git a/scripts/recording/camscreen.sh b/scripts/recording/camscreen.sh new file mode 100755 index 0000000..4b2b594 --- /dev/null +++ b/scripts/recording/camscreen.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +outfile=${1:-"$HOME/Pictures/recordings/video-cs-$(date -Iminutes).mp4"}; + +[[ -f "$outfile" ]] && echo "[File already exists]: $outfile" && exit 1; + +ffplay /dev/video0 -s 300x200 -an & + +ffmpeg -f x11grab -s 1920x1080 -i :0.0 -f alsa -i hw:0,0 $outfile; + diff --git a/scripts/recording/screenrecord.sh b/scripts/recording/screenrecord.sh new file mode 100755 index 0000000..bc5d6a3 --- /dev/null +++ b/scripts/recording/screenrecord.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +prefix=${2:-"video"}; + +outfile=${1:-"$HOME/Pictures/recordings/$prefix-screen-$(date -Iminutes).mp4"}; + +ffmpeg -f x11grab -s 1920x1080 -i :0.0 -f alsa -i hw:0,0 $outfile; diff --git a/scripts/recording/webcam.sh b/scripts/recording/webcam.sh new file mode 100755 index 0000000..2bc47e1 --- /dev/null +++ b/scripts/recording/webcam.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +outfile=${1:-"$HOME/Pictures/recordings/video-webcam-$(date -Iminutes).mp4"}; + +[[ -f "$outfile" ]] && echo "[File already exists]: $outfile" && exit 1; + +# ffmpeg -i /dev/video0 out.mkv +ffmpeg -i /dev/video0 -f alsa -i default $outfile; diff --git a/scripts/scheduler.sh b/scripts/scheduler.sh new file mode 100755 index 0000000..2ea1dc2 --- /dev/null +++ b/scripts/scheduler.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash + +source "$HOME/scripts/modules/utils.sh"; + +SCH_PATH="$HOME/.config/vimwiki/schedule/"; +SCH_TAG="SCH_AUTO_GENERATED"; +CRON_PATH="$HOME/.config/crontab/crontab"; + +get_schedule_files() { + ls "$SCH_PATH" | sed -e '/index.md$/d' | awk "{print \"$SCH_PATH\" \$0}"; +} + +get_time() { awk -F'|' '{print $2}' | trim_line; } +get_label() { awk -F'|' '{print $3}' | trim_line; } +get_level() { + local l=$(awk -F'|' '{print $4}' | trim_line); + case $l in + 1) echo "critical" ;; + 2) echo "normal" ;; + 3) echo "low" ;; + *) echo "" ;; + esac +} + +parse_schedule() { + local days="$1"; + + sed -e '/^#/d' -e '/^\s*$/d' | while read line; do + local time=$(echo "$line" | get_time); + local level=$(echo "$line" | get_level); + + if [[ ! $time == "-" ]] && [[ ! $level == "" ]]; then + local label=$(echo "$line" | get_label); + local time_cron=$(echo $time | awk '{print $2 " " $1}'); + # TODO: Use notify sub command + local command="notify-send '$label' -u $level -a Schedule -t 10000"; + + echo "$time_cron $days $command ##$SCH_TAG"; + fi; + done; +} + +generate_crontab() { + get_schedule_files | while read file; do + days=$(cat $file | awk -F'#' '/^# / {print $2}' | head -n 1 | trim_line) + parse_schedule "$days" < $file; + done +} + +update_crontab() { + cat $CRON_PATH | sed -e "/##$CRON_TAG/d"; + generate_crontab; +} + +# TODO: Make generate and notify sub commands +# case "$1" in + # *) ;; +# esac + +tmpfile=$(mktemp /tmp/crontemp.XXX); +update_crontab > $tmpfile; +cat $tmpfile > $CRON_PATH; +rm $tmpfile; + diff --git a/scripts/screenshot.sh b/scripts/screenshot.sh new file mode 100755 index 0000000..59770dd --- /dev/null +++ b/scripts/screenshot.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +SCREENSHOTS=$HOME/Pictures/screenshots; + +notify() { notify-send "$@"; } + +scrsht() { + local type=$1; + local window=$([ -z "$2" ] && echo "" || echo "-window $2"); + magick import $window "$SCREENSHOTS/$type-$(date '+%Y_%m_%d_%H_%M_%S').jpg"; + notify "Screenshot ($type) captured"; +} + +full_screenshot() { scrsht full root; } +part_screenshot() { sleep 0.2; scrsht part & disown; } +window_screenshot() { scrsht window "${1:-"$(xdo id)"}"; } + +case $1 in + full) full_screenshot ;; + part) part_screenshot ;; + window) window_screenshot "$2" ;; + *) echo "no"; exit 1 ;; +esac + diff --git a/scripts/sessions/project.sh b/scripts/sessions/project.sh new file mode 100755 index 0000000..ffe9cc9 --- /dev/null +++ b/scripts/sessions/project.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +dir="$1"; + +sensible-terminal -d "$dir" -e sensible-editor . & +sleep 0.1; +sensible-terminal -d "$dir" & +sensible-terminal -d "$dir" & + +disown; + diff --git a/scripts/shotkey.sh b/scripts/shotkey.sh new file mode 100755 index 0000000..8a638d4 --- /dev/null +++ b/scripts/shotkey.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +STATE_DIR=$HOME/.local/share/shotkey; +[[ ! -d "$STATE_DIR" ]] && mkdir $STATE_DIR; + +MODE_FILE=$STATE_DIR/mode; + +NORMAL_MODE="-"; + +get_mode() { + local mode=$(cat $MODE_FILE); + echo "${mode:-$NORMAL_MODE}"; +} + +save_mode() { + local mode_label=$SHOTKEY_MODE_LABEL; + echo "${mode_label:-$NORMAL_MODE}" > $MODE_FILE; + update-dwmblock keymode; +} + +case $1 in + on-mode-change) save_mode ;; + mode) get_mode ;; + *) echo "no"; exit 1; ;; +esac + diff --git a/scripts/sound.sh b/scripts/sound.sh new file mode 100755 index 0000000..090a805 --- /dev/null +++ b/scripts/sound.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +mic_keep_on() { + while true; do + local audio_state=$(amixer get Capture | awk "/: Capture.*\[/ {print \$7}" | head -n 1); + [[ "$audio_state" != "[on]" ]] && amixer set Capture cap; + sleep 1; + done; +} + +case "$1" in + mute-mic) amixer set Capture toggle ;; + mic-keep-on) mic_keep_on ;; + mic-vol) case "$2" in + up) amixer sset 'Mic Boost' '1%+' && amixer sset 'Internal Mic Boost' '1%+' ;; + down) amixer sset 'Mic Boost' '1%-' && amixer sset 'Internal Mic Boost' '1%-' ;; + full) amixer sset 'Mic Boost' '100%' && amixer sset 'Internal Mic Boost' '100%' ;; + esac ;; + + mute) amixer set Master toggle ;; + volume) case "$2" in + up) amixer sset Master '5%+' ;; + down) amixer sset Master '5%-' ;; + esac ;; + *) echo "Wrong command" ;; +esac + +#~/scripts/statusbar/statusbar.sh update volume; +update-dwmblock volume; diff --git a/scripts/torrent.sh b/scripts/torrent.sh new file mode 100755 index 0000000..12804a8 --- /dev/null +++ b/scripts/torrent.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +source "$HOME/scripts/modules/utils.sh"; + +DOWNLOAD_LOCATION=$HOME/Downloads/dl; + +is_magnet() { echo "$1" | grep '^magnet:'; } + +add_magnet_link() { + is_magnet "$1" && \ + transmission-remote -a "$1" && \ + notify-send "Torrent" "Added torrent for downloading"; +} + +add_from_clipboard() { + add_torrent "$(read_clipboard)"; +} + +add_torrent() { + transmission-remote -a "$1" && \ + notify-send "Torrent" "Added torrent for downloading"; + #local name=$(btinfo "$1" | awk -F': ' '/Name:/ {print $2}'); + #btcli add -d "$DOWNLOAD_LOCATION/$name" "$1"; +} + +case "$1" in + add) add_magnet_link "$2" ;; + magnet) add_magnet_link "$2" ;; + torrent) add_torrent "$2" ;; + add_from_clipboard) add_from_clipboard ;; +esac; + diff --git a/scripts/write-bootentry.sh b/scripts/write-bootentry.sh new file mode 100755 index 0000000..ffa57ed --- /dev/null +++ b/scripts/write-bootentry.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +boot_device=/dev/nvme0n1; +root_device=/dev/nvme0n1p2; + +linux_params="i8042.nopnp=1 pci=nocrs i915.enable_dpcd_backlight=1 acpi_backlight=vendor loglevel=3"; +# rd.udev.log-priority=3 +# acpi_backlight=video acpi_backlight=vendor acpi_backlight=native +# acpi=off + +uuid=$(sudo blkid -s UUID -o value "$root_device"); + +params=$(printf "%s " \ + "root=UUID=$uuid rw" \ + "initrd=\intel-ucode.img initrd=\initramfs-linux.img" \ + "$linux_params" \ +); + +echo -e "----------------------------"; +echo "UUID: $uuid"; +echo "PARAMS: $params"; +echo -e "----------------------------\n"; + +sudo efibootmgr -d "$boot_device" -p 1 \ + -c -L "Artix Linux" \ + -l /vmlinuz-linux \ + -u "$params" \ + --verbose; |
