From 3b2a78935fd6550521f719a10e5b0fceb1ddb350 Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Wed, 15 Feb 2023 16:31:56 +0100 Subject: Not really but, First commit! --- bin/common/ask | 28 + bin/common/autofetch | 13 + bin/common/fzfdir | 2 + bin/common/fzfdirfile | 2 + bin/common/fzffile | 2 + bin/common/gign | 2 + bin/common/hextorgb | 7 + bin/common/wt | 10 + bin/dmscripts/dmapimg | 6 + bin/dmscripts/dmclip | 83 +++ bin/dmscripts/dmdsktp | 12 + bin/dmscripts/dmemoji | 1423 +++++++++++++++++++++++++++++++++++++++++++++++ bin/dmscripts/dmfm | 17 + bin/dmscripts/dmhelp | 26 + bin/dmscripts/dminw | 4 + bin/dmscripts/dmlang | 7 + bin/dmscripts/dmpass | 11 + bin/dmscripts/dmpassgen | 20 + bin/dmscripts/dmpdf | 21 + bin/dmscripts/dmpower | 3 + bin/dmscripts/dmpsbm | 2 + bin/dmscripts/dmpsclip | 3 + bin/dmscripts/dmvid | 17 + bin/dmscripts/dmyt-not | 6 + bin/extra/arr_hjkl | 17 + bin/extra/cht.sh | 796 ++++++++++++++++++++++++++ bin/extra/colorscript | 40 ++ bin/extra/cycleKB | 11 + bin/extra/ehbtodl | 9 + bin/extra/keyboards.txt | 2 + bin/extra/vimastp | 12 + 31 files changed, 2614 insertions(+) create mode 100755 bin/common/ask create mode 100755 bin/common/autofetch create mode 100755 bin/common/fzfdir create mode 100755 bin/common/fzfdirfile create mode 100755 bin/common/fzffile create mode 100755 bin/common/gign create mode 100755 bin/common/hextorgb create mode 100755 bin/common/wt create mode 100755 bin/dmscripts/dmapimg create mode 100755 bin/dmscripts/dmclip create mode 100755 bin/dmscripts/dmdsktp create mode 100755 bin/dmscripts/dmemoji create mode 100755 bin/dmscripts/dmfm create mode 100755 bin/dmscripts/dmhelp create mode 100755 bin/dmscripts/dminw create mode 100755 bin/dmscripts/dmlang create mode 100755 bin/dmscripts/dmpass create mode 100755 bin/dmscripts/dmpassgen create mode 100755 bin/dmscripts/dmpdf create mode 100755 bin/dmscripts/dmpower create mode 100755 bin/dmscripts/dmpsbm create mode 100755 bin/dmscripts/dmpsclip create mode 100755 bin/dmscripts/dmvid create mode 100755 bin/dmscripts/dmyt-not create mode 100755 bin/extra/arr_hjkl create mode 100755 bin/extra/cht.sh create mode 100755 bin/extra/colorscript create mode 100755 bin/extra/cycleKB create mode 100755 bin/extra/ehbtodl create mode 100644 bin/extra/keyboards.txt create mode 100755 bin/extra/vimastp (limited to 'bin') diff --git a/bin/common/ask b/bin/common/ask new file mode 100755 index 0000000..85b5f9e --- /dev/null +++ b/bin/common/ask @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# Depends on passmenu +if [ -z "$1" ] +then + echo -n ">" + read prompt +else + prompt="$@" +fi + +API_KEY="$(pass tokens/openai-api)" + +data=$(echo \ +'{ + "prompt": "'"$prompt"'", + "model": "text-davinci-003", + "max_tokens": 1024, + "temperature": 0 +}') + +output=$(curl -s -X POST \ + -H 'Content-Type: application/json' \ + -H "Authorization: Bearer $API_KEY" \ + -d "$data" \ + https://api.openai.com/v1/completions \ + | jq -r '.choices[0].text') + +echo "${output:1}" diff --git a/bin/common/autofetch b/bin/common/autofetch new file mode 100755 index 0000000..3dcdc15 --- /dev/null +++ b/bin/common/autofetch @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +GREEN='\033[0;32m' +NC='\033[0m' +# Fetches for git repos, meant to run at startup +for directory in "." "installdrier" ".config" ".password-store" +do + if cd ~/$directory + then + echo -ne "Fetching in ${GREEN}'~/${directory}'${NC}" + git fetch origin || exit 1 + echo ", done." + fi +done diff --git a/bin/common/fzfdir b/bin/common/fzfdir new file mode 100755 index 0000000..6ae8f6a --- /dev/null +++ b/bin/common/fzfdir @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +find "${1:-$HOME}" -type \d 2> /dev/null | fzf diff --git a/bin/common/fzfdirfile b/bin/common/fzfdirfile new file mode 100755 index 0000000..df0e51a --- /dev/null +++ b/bin/common/fzfdirfile @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +dirname "$(find "${1:-$HOME}" -type f 2> /dev/null | fzf)" diff --git a/bin/common/fzffile b/bin/common/fzffile new file mode 100755 index 0000000..03e39be --- /dev/null +++ b/bin/common/fzffile @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +find "${1:-$HOME}" -type f 2> /dev/null | fzf diff --git a/bin/common/gign b/bin/common/gign new file mode 100755 index 0000000..e3ba12a --- /dev/null +++ b/bin/common/gign @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +git status --porcelain=v1 | grep "^??" | cut -d' ' -f2- | sed -r 's/^["](.*)["]$/\1/' >> .gitignore diff --git a/bin/common/hextorgb b/bin/common/hextorgb new file mode 100755 index 0000000..b268db5 --- /dev/null +++ b/bin/common/hextorgb @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +cat /dev/stdin \ + | tr -d '#' | tr '[:lower:]' '[:upper:]' \ + | sed -r 's/([0-9A-F]{2})/\1\n/g ; i ibase=16' \ + | bc \ + | tr '\n' ',' \ + | sed 's/.$// ; s/.*/rgb(&)/' diff --git a/bin/common/wt b/bin/common/wt new file mode 100755 index 0000000..81081c8 --- /dev/null +++ b/bin/common/wt @@ -0,0 +1,10 @@ +#!/bin/bash + +echo "$@" > /tmp/truewhile.tmp +while true +do + bash /tmp/truewhile.tmp + sleep 1 + clear +done +rm /tmp/truewhile.tmp diff --git a/bin/dmscripts/dmapimg b/bin/dmscripts/dmapimg new file mode 100755 index 0000000..25c414b --- /dev/null +++ b/bin/dmscripts/dmapimg @@ -0,0 +1,6 @@ +#!/bin/bash +appimage="$(\ + find ~/.local/share/appimages -type f -printf "%f\n" \ + | sed 's/\.[Aa]pp[Ii]mage$//g' \ + | dmenu -x -l 10 -g 1 -p "AppImage:")" +setsid ~/AppImages/"${appimage:-NOSEL}"* diff --git a/bin/dmscripts/dmclip b/bin/dmscripts/dmclip new file mode 100755 index 0000000..5282b35 --- /dev/null +++ b/bin/dmscripts/dmclip @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +NotImage () { + echo -n "" | dmenu -p "NOT AN IMAGE" + exit +} + +# Display clipboard max length + +selection="$(echo -e "primary\nclipboard\nswap" | dmenu -l 1 -g 3 -p "selection:")" +if [[ "${selection}" == "swap" ]] +then + clipboard="$(xclip -o)" + xclip -o | xclip -sel c + echo -n "${clipboard}" | xclip -sel c + exit +elif [[ "${selection}" == "" ]] +then + exit 1 +fi +if "${selection}" == "primary" ]] +then + selection2="clipboard" +else + selection2="primary" +fi + + +clipboard="$(xclip -out -sel "${selection}" -r)" + +DICL_LEN=48 +if [[ "$(xclip -sel ${selection} -o | head -n1 | cut -c 2-4)" == "PNG" ]] +then + disp_clip="IMAGE" +else + disp_clip="$(echo -n "${clipboard}" | tr -d '\n' | cut -c -"${DICL_LEN}")" +fi + +menu_option="$(\ + echo -e "save\nload\nimage\nreplace" \ + | dmenu -l 1 -g 4 -p "'${disp_clip}'" \ +)" +[[ "${menu_option}" ]] || exit + +case "${menu_option}" in + + replace) + replace_text="$(echo -n "" | dmenu -l 0 -p "replace:")" + [[ "${replace_text}" ]] || exit + replace_by_text="$(echo -n "" | dmenu -l 0 -p "by:")" + [[ "${replace_by_text}" ]] || exit + echo "${clipboard}" \ + | sed "s/${replace_text}/${replace_by_text}/g" \ + | xclip -r -sel "${selection}" + ;; + + save) + echo "${clipboard}" >> /tmp/tmpclip.txt + ;; + load) + choice="$(\ + sort /tmp/tmpclip.txt \ + | uniq \ + | dmenu -g 1 -l 5 || exit \ + )" + echo -n "${choice}" | xclip -sel "${selection}" + ;; + + image) + # Menu + # 1: line from paragraph + # 2: param + # + file_name="tmp_xclip" + xclip -o -sel c > "/tmp/${file_name}.png" + file "/tmp/${file_name}.png" \ + | cut -d ':' -f 2 \ + | grep "image" || NotImage + # sed so that dmenu doesn't skip if one line + tesseract "/tmp/${file_name}.png" stdout > "/tmp/${file_name}" + sed "1i\ " "/tmp/${file_name}" | dmenu -l 10 -g 1 -p "PREVIEW:" -l 20 || exit + xclip -sel "${selection}" -in "/tmp/${file_name}" + ;; +esac diff --git a/bin/dmscripts/dmdsktp b/bin/dmscripts/dmdsktp new file mode 100755 index 0000000..2e0ef24 --- /dev/null +++ b/bin/dmscripts/dmdsktp @@ -0,0 +1,12 @@ +#!/bin/bash +# Searches through .desktop files and prompt to launch them via dmenu +gtk-launch \ + "$(\ + find ~/.local/share/applications \ + -maxdepth 1 \ + -type f \ + -not -iname "wine-extension*" -a -iname "*.desktop" \ + -printf "%f\n" \ + | cut -d. -f1 \ + | dmenu -i -p "app:" -g 1 \ + )" diff --git a/bin/dmscripts/dmemoji b/bin/dmscripts/dmemoji new file mode 100755 index 0000000..6211463 --- /dev/null +++ b/bin/dmscripts/dmemoji @@ -0,0 +1,1423 @@ +#!/bin/bash +# This files comes from: +# https://github.com/porras/dmenu-emoji +# +# If this file includes emojis below "__DATA__" it is generated. +# This file was generated: 2022-04-21 12:38:03+00:00 + +set -e + +case "$1" in + "list") + data=$(sed '0,/^__DATA__$/d' "$0") + echo "$data" + ;; + "copy") + input=$(tee) + if [ ! -z "$input" ]; then + emoji=${input: -1} + echo -n "$emoji" | xclip -selection c + dunstify "dmemoji" "$emoji copied!" + fi + ;; + "") + bash $0 list | dmenu -p 'Emoji: ' | bash $0 copy + ;; +esac + +exit + +__DATA__ +grinning face ๐Ÿ˜€ +grinning face with big eyes ๐Ÿ˜ƒ +grinning face with smiling eyes ๐Ÿ˜„ +beaming face with smiling eyes ๐Ÿ˜ +grinning squinting face ๐Ÿ˜† +grinning face with sweat ๐Ÿ˜… +rolling on the floor laughing ๐Ÿคฃ +face with tears of joy ๐Ÿ˜‚ +slightly smiling face ๐Ÿ™‚ +upside-down face ๐Ÿ™ƒ +melting face ๐Ÿซ  +winking face ๐Ÿ˜‰ +smiling face with smiling eyes ๐Ÿ˜Š +smiling face with halo ๐Ÿ˜‡ +smiling face with hearts ๐Ÿฅฐ +smiling face with heart-eyes ๐Ÿ˜ +star-struck ๐Ÿคฉ +face blowing a kiss ๐Ÿ˜˜ +kissing face ๐Ÿ˜— +smiling face โ˜บ +kissing face with closed eyes ๐Ÿ˜š +kissing face with smiling eyes ๐Ÿ˜™ +smiling face with tear ๐Ÿฅฒ +face savoring food ๐Ÿ˜‹ +face with tongue ๐Ÿ˜› +winking face with tongue ๐Ÿ˜œ +zany face ๐Ÿคช +squinting face with tongue ๐Ÿ˜ +money-mouth face ๐Ÿค‘ +smiling face with open hands ๐Ÿค— +face with hand over mouth ๐Ÿคญ +face with open eyes and hand over mouth ๐Ÿซข +face with peeking eye ๐Ÿซฃ +shushing face ๐Ÿคซ +thinking face ๐Ÿค” +saluting face ๐Ÿซก +zipper-mouth face ๐Ÿค +face with raised eyebrow ๐Ÿคจ +neutral face ๐Ÿ˜ +expressionless face ๐Ÿ˜‘ +face without mouth ๐Ÿ˜ถ +dotted line face ๐Ÿซฅ +smirking face ๐Ÿ˜ +unamused face ๐Ÿ˜’ +face with rolling eyes ๐Ÿ™„ +grimacing face ๐Ÿ˜ฌ +lying face ๐Ÿคฅ +relieved face ๐Ÿ˜Œ +pensive face ๐Ÿ˜” +sleepy face ๐Ÿ˜ช +drooling face ๐Ÿคค +sleeping face ๐Ÿ˜ด +face with medical mask ๐Ÿ˜ท +face with thermometer ๐Ÿค’ +face with head-bandage ๐Ÿค• +nauseated face ๐Ÿคข +face vomiting ๐Ÿคฎ +sneezing face ๐Ÿคง +hot face ๐Ÿฅต +cold face ๐Ÿฅถ +woozy face ๐Ÿฅด +face with crossed-out eyes ๐Ÿ˜ต +exploding head ๐Ÿคฏ +cowboy hat face ๐Ÿค  +partying face ๐Ÿฅณ +disguised face ๐Ÿฅธ +smiling face with sunglasses ๐Ÿ˜Ž +nerd face ๐Ÿค“ +face with monocle ๐Ÿง +confused face ๐Ÿ˜• +face with diagonal mouth ๐Ÿซค +worried face ๐Ÿ˜Ÿ +slightly frowning face ๐Ÿ™ +frowning face โ˜น +face with open mouth ๐Ÿ˜ฎ +hushed face ๐Ÿ˜ฏ +astonished face ๐Ÿ˜ฒ +flushed face ๐Ÿ˜ณ +pleading face ๐Ÿฅบ +face holding back tears ๐Ÿฅน +frowning face with open mouth ๐Ÿ˜ฆ +anguished face ๐Ÿ˜ง +fearful face ๐Ÿ˜จ +anxious face with sweat ๐Ÿ˜ฐ +sad but relieved face ๐Ÿ˜ฅ +crying face ๐Ÿ˜ข +loudly crying face ๐Ÿ˜ญ +face screaming in fear ๐Ÿ˜ฑ +confounded face ๐Ÿ˜– +persevering face ๐Ÿ˜ฃ +disappointed face ๐Ÿ˜ž +downcast face with sweat ๐Ÿ˜“ +weary face ๐Ÿ˜ฉ +tired face ๐Ÿ˜ซ +yawning face ๐Ÿฅฑ +face with steam from nose ๐Ÿ˜ค +pouting face ๐Ÿ˜ก +angry face ๐Ÿ˜  +face with symbols on mouth ๐Ÿคฌ +smiling face with horns ๐Ÿ˜ˆ +angry face with horns ๐Ÿ‘ฟ +skull ๐Ÿ’€ +skull and crossbones โ˜  +pile of poo ๐Ÿ’ฉ +clown face ๐Ÿคก +ogre ๐Ÿ‘น +goblin ๐Ÿ‘บ +ghost ๐Ÿ‘ป +alien ๐Ÿ‘ฝ +alien monster ๐Ÿ‘พ +robot ๐Ÿค– +grinning cat ๐Ÿ˜บ +grinning cat with smiling eyes ๐Ÿ˜ธ +cat with tears of joy ๐Ÿ˜น +smiling cat with heart-eyes ๐Ÿ˜ป +cat with wry smile ๐Ÿ˜ผ +kissing cat ๐Ÿ˜ฝ +weary cat ๐Ÿ™€ +crying cat ๐Ÿ˜ฟ +pouting cat ๐Ÿ˜พ +see-no-evil monkey ๐Ÿ™ˆ +hear-no-evil monkey ๐Ÿ™‰ +speak-no-evil monkey ๐Ÿ™Š +kiss mark ๐Ÿ’‹ +love letter ๐Ÿ’Œ +heart with arrow ๐Ÿ’˜ +heart with ribbon ๐Ÿ’ +sparkling heart ๐Ÿ’– +growing heart ๐Ÿ’— +beating heart ๐Ÿ’“ +revolving hearts ๐Ÿ’ž +two hearts ๐Ÿ’• +heart decoration ๐Ÿ’Ÿ +heart exclamation โฃ +broken heart ๐Ÿ’” +red heart โค +orange heart ๐Ÿงก +yellow heart ๐Ÿ’› +green heart ๐Ÿ’š +blue heart ๐Ÿ’™ +purple heart ๐Ÿ’œ +brown heart ๐ŸคŽ +black heart ๐Ÿ–ค +white heart ๐Ÿค +hundred points ๐Ÿ’ฏ +anger symbol ๐Ÿ’ข +collision ๐Ÿ’ฅ +dizzy ๐Ÿ’ซ +sweat droplets ๐Ÿ’ฆ +dashing away ๐Ÿ’จ +hole ๐Ÿ•ณ +bomb ๐Ÿ’ฃ +speech balloon ๐Ÿ’ฌ +left speech bubble ๐Ÿ—จ +right anger bubble ๐Ÿ—ฏ +thought balloon ๐Ÿ’ญ +zzz ๐Ÿ’ค +waving hand ๐Ÿ‘‹ +raised back of hand ๐Ÿคš +hand with fingers splayed ๐Ÿ– +raised hand โœ‹ +vulcan salute ๐Ÿ–– +rightwards hand ๐Ÿซฑ +leftwards hand ๐Ÿซฒ +palm down hand ๐Ÿซณ +palm up hand ๐Ÿซด +OK hand ๐Ÿ‘Œ +pinched fingers ๐ŸคŒ +pinching hand ๐Ÿค +victory hand โœŒ +crossed fingers ๐Ÿคž +hand with index finger and thumb crossed ๐Ÿซฐ +love-you gesture ๐ŸคŸ +sign of the horns ๐Ÿค˜ +call me hand ๐Ÿค™ +backhand index pointing left ๐Ÿ‘ˆ +backhand index pointing right ๐Ÿ‘‰ +backhand index pointing up ๐Ÿ‘† +middle finger ๐Ÿ–• +backhand index pointing down ๐Ÿ‘‡ +index pointing up โ˜ +index pointing at the viewer ๐Ÿซต +thumbs up ๐Ÿ‘ +thumbs down ๐Ÿ‘Ž +raised fist โœŠ +oncoming fist ๐Ÿ‘Š +left-facing fist ๐Ÿค› +right-facing fist ๐Ÿคœ +clapping hands ๐Ÿ‘ +raising hands ๐Ÿ™Œ +heart hands ๐Ÿซถ +open hands ๐Ÿ‘ +palms up together ๐Ÿคฒ +handshake ๐Ÿค +folded hands ๐Ÿ™ +writing hand โœ +nail polish ๐Ÿ’… +selfie ๐Ÿคณ +flexed biceps ๐Ÿ’ช +mechanical arm ๐Ÿฆพ +mechanical leg ๐Ÿฆฟ +leg ๐Ÿฆต +foot ๐Ÿฆถ +ear ๐Ÿ‘‚ +ear with hearing aid ๐Ÿฆป +nose ๐Ÿ‘ƒ +brain ๐Ÿง  +anatomical heart ๐Ÿซ€ +lungs ๐Ÿซ +tooth ๐Ÿฆท +bone ๐Ÿฆด +eyes ๐Ÿ‘€ +eye ๐Ÿ‘ +tongue ๐Ÿ‘… +mouth ๐Ÿ‘„ +biting lip ๐Ÿซฆ +baby ๐Ÿ‘ถ +child ๐Ÿง’ +boy ๐Ÿ‘ฆ +girl ๐Ÿ‘ง +person ๐Ÿง‘ +person: blond hair ๐Ÿ‘ฑ +man ๐Ÿ‘จ +person: beard ๐Ÿง” +woman ๐Ÿ‘ฉ +older person ๐Ÿง“ +old man ๐Ÿ‘ด +old woman ๐Ÿ‘ต +person frowning ๐Ÿ™ +person pouting ๐Ÿ™Ž +person gesturing NO ๐Ÿ™… +deaf person ๐Ÿง +person bowing ๐Ÿ™‡ +person facepalming ๐Ÿคฆ +person shrugging ๐Ÿคท +police officer ๐Ÿ‘ฎ +detective ๐Ÿ•ต +guard ๐Ÿ’‚ +ninja ๐Ÿฅท +construction worker ๐Ÿ‘ท +person with crown ๐Ÿซ… +prince ๐Ÿคด +princess ๐Ÿ‘ธ +person wearing turban ๐Ÿ‘ณ +person with skullcap ๐Ÿ‘ฒ +woman with headscarf ๐Ÿง• +person in tuxedo ๐Ÿคต +person with veil ๐Ÿ‘ฐ +pregnant woman ๐Ÿคฐ +pregnant man ๐Ÿซƒ +pregnant person ๐Ÿซ„ +breast-feeding ๐Ÿคฑ +baby angel ๐Ÿ‘ผ +Santa Claus ๐ŸŽ… +Mrs. Claus ๐Ÿคถ +superhero ๐Ÿฆธ +supervillain ๐Ÿฆน +mage ๐Ÿง™ +fairy ๐Ÿงš +vampire ๐Ÿง› +merperson ๐Ÿงœ +elf ๐Ÿง +genie ๐Ÿงž +zombie ๐ŸงŸ +troll ๐ŸงŒ +person getting massage ๐Ÿ’† +person getting haircut ๐Ÿ’‡ +person walking ๐Ÿšถ +person standing ๐Ÿง +person kneeling ๐ŸงŽ +person running ๐Ÿƒ +woman dancing ๐Ÿ’ƒ +man dancing ๐Ÿ•บ +person in suit levitating ๐Ÿ•ด +people with bunny ears ๐Ÿ‘ฏ +person in steamy room ๐Ÿง– +person climbing ๐Ÿง— +person fencing ๐Ÿคบ +horse racing ๐Ÿ‡ +skier โ›ท +snowboarder ๐Ÿ‚ +person golfing ๐ŸŒ +person surfing ๐Ÿ„ +person rowing boat ๐Ÿšฃ +person swimming ๐ŸŠ +person bouncing ball โ›น +person lifting weights ๐Ÿ‹ +person biking ๐Ÿšด +person mountain biking ๐Ÿšต +person cartwheeling ๐Ÿคธ +people wrestling ๐Ÿคผ +person playing water polo ๐Ÿคฝ +person playing handball ๐Ÿคพ +person juggling ๐Ÿคน +person in lotus position ๐Ÿง˜ +person taking bath ๐Ÿ›€ +person in bed ๐Ÿ›Œ +women holding hands ๐Ÿ‘ญ +woman and man holding hands ๐Ÿ‘ซ +men holding hands ๐Ÿ‘ฌ +kiss ๐Ÿ’ +couple with heart ๐Ÿ’‘ +family ๐Ÿ‘ช +speaking head ๐Ÿ—ฃ +bust in silhouette ๐Ÿ‘ค +busts in silhouette ๐Ÿ‘ฅ +people hugging ๐Ÿซ‚ +footprints ๐Ÿ‘ฃ +red hair ๐Ÿฆฐ +curly hair ๐Ÿฆฑ +white hair ๐Ÿฆณ +bald ๐Ÿฆฒ +monkey face ๐Ÿต +monkey ๐Ÿ’ +gorilla ๐Ÿฆ +orangutan ๐Ÿฆง +dog face ๐Ÿถ +dog ๐Ÿ• +guide dog ๐Ÿฆฎ +poodle ๐Ÿฉ +wolf ๐Ÿบ +fox ๐ŸฆŠ +raccoon ๐Ÿฆ +cat face ๐Ÿฑ +cat ๐Ÿˆ +lion ๐Ÿฆ +tiger face ๐Ÿฏ +tiger ๐Ÿ… +leopard ๐Ÿ† +horse face ๐Ÿด +horse ๐ŸŽ +unicorn ๐Ÿฆ„ +zebra ๐Ÿฆ“ +deer ๐ŸฆŒ +bison ๐Ÿฆฌ +cow face ๐Ÿฎ +ox ๐Ÿ‚ +water buffalo ๐Ÿƒ +cow ๐Ÿ„ +pig face ๐Ÿท +pig ๐Ÿ– +boar ๐Ÿ— +pig nose ๐Ÿฝ +ram ๐Ÿ +ewe ๐Ÿ‘ +goat ๐Ÿ +camel ๐Ÿช +two-hump camel ๐Ÿซ +llama ๐Ÿฆ™ +giraffe ๐Ÿฆ’ +elephant ๐Ÿ˜ +mammoth ๐Ÿฆฃ +rhinoceros ๐Ÿฆ +hippopotamus ๐Ÿฆ› +mouse face ๐Ÿญ +mouse ๐Ÿ +rat ๐Ÿ€ +hamster ๐Ÿน +rabbit face ๐Ÿฐ +rabbit ๐Ÿ‡ +chipmunk ๐Ÿฟ +beaver ๐Ÿฆซ +hedgehog ๐Ÿฆ” +bat ๐Ÿฆ‡ +bear ๐Ÿป +koala ๐Ÿจ +panda ๐Ÿผ +sloth ๐Ÿฆฅ +otter ๐Ÿฆฆ +skunk ๐Ÿฆจ +kangaroo ๐Ÿฆ˜ +badger ๐Ÿฆก +paw prints ๐Ÿพ +turkey ๐Ÿฆƒ +chicken ๐Ÿ” +rooster ๐Ÿ“ +hatching chick ๐Ÿฃ +baby chick ๐Ÿค +front-facing baby chick ๐Ÿฅ +bird ๐Ÿฆ +penguin ๐Ÿง +dove ๐Ÿ•Š +eagle ๐Ÿฆ… +duck ๐Ÿฆ† +swan ๐Ÿฆข +owl ๐Ÿฆ‰ +dodo ๐Ÿฆค +feather ๐Ÿชถ +flamingo ๐Ÿฆฉ +peacock ๐Ÿฆš +parrot ๐Ÿฆœ +frog ๐Ÿธ +crocodile ๐ŸŠ +turtle ๐Ÿข +lizard ๐ŸฆŽ +snake ๐Ÿ +dragon face ๐Ÿฒ +dragon ๐Ÿ‰ +sauropod ๐Ÿฆ• +T-Rex ๐Ÿฆ– +spouting whale ๐Ÿณ +whale ๐Ÿ‹ +dolphin ๐Ÿฌ +seal ๐Ÿฆญ +fish ๐ŸŸ +tropical fish ๐Ÿ  +blowfish ๐Ÿก +shark ๐Ÿฆˆ +octopus ๐Ÿ™ +spiral shell ๐Ÿš +coral ๐Ÿชธ +snail ๐ŸŒ +butterfly ๐Ÿฆ‹ +bug ๐Ÿ› +ant ๐Ÿœ +honeybee ๐Ÿ +beetle ๐Ÿชฒ +lady beetle ๐Ÿž +cricket ๐Ÿฆ— +cockroach ๐Ÿชณ +spider ๐Ÿ•ท +spider web ๐Ÿ•ธ +scorpion ๐Ÿฆ‚ +mosquito ๐ŸฆŸ +fly ๐Ÿชฐ +worm ๐Ÿชฑ +microbe ๐Ÿฆ  +bouquet ๐Ÿ’ +cherry blossom ๐ŸŒธ +white flower ๐Ÿ’ฎ +lotus ๐Ÿชท +rosette ๐Ÿต +rose ๐ŸŒน +wilted flower ๐Ÿฅ€ +hibiscus ๐ŸŒบ +sunflower ๐ŸŒป +blossom ๐ŸŒผ +tulip ๐ŸŒท +seedling ๐ŸŒฑ +potted plant ๐Ÿชด +evergreen tree ๐ŸŒฒ +deciduous tree ๐ŸŒณ +palm tree ๐ŸŒด +cactus ๐ŸŒต +sheaf of rice ๐ŸŒพ +herb ๐ŸŒฟ +shamrock โ˜˜ +four leaf clover ๐Ÿ€ +maple leaf ๐Ÿ +fallen leaf ๐Ÿ‚ +leaf fluttering in wind ๐Ÿƒ +empty nest ๐Ÿชน +nest with eggs ๐Ÿชบ +grapes ๐Ÿ‡ +melon ๐Ÿˆ +watermelon ๐Ÿ‰ +tangerine ๐ŸŠ +lemon ๐Ÿ‹ +banana ๐ŸŒ +pineapple ๐Ÿ +mango ๐Ÿฅญ +red apple ๐ŸŽ +green apple ๐Ÿ +pear ๐Ÿ +peach ๐Ÿ‘ +cherries ๐Ÿ’ +strawberry ๐Ÿ“ +blueberries ๐Ÿซ +kiwi fruit ๐Ÿฅ +tomato ๐Ÿ… +olive ๐Ÿซ’ +coconut ๐Ÿฅฅ +avocado ๐Ÿฅ‘ +eggplant ๐Ÿ† +potato ๐Ÿฅ” +carrot ๐Ÿฅ• +ear of corn ๐ŸŒฝ +hot pepper ๐ŸŒถ +bell pepper ๐Ÿซ‘ +cucumber ๐Ÿฅ’ +leafy green ๐Ÿฅฌ +broccoli ๐Ÿฅฆ +garlic ๐Ÿง„ +onion ๐Ÿง… +mushroom ๐Ÿ„ +peanuts ๐Ÿฅœ +beans ๐Ÿซ˜ +chestnut ๐ŸŒฐ +bread ๐Ÿž +croissant ๐Ÿฅ +baguette bread ๐Ÿฅ– +flatbread ๐Ÿซ“ +pretzel ๐Ÿฅจ +bagel ๐Ÿฅฏ +pancakes ๐Ÿฅž +waffle ๐Ÿง‡ +cheese wedge ๐Ÿง€ +meat on bone ๐Ÿ– +poultry leg ๐Ÿ— +cut of meat ๐Ÿฅฉ +bacon ๐Ÿฅ“ +hamburger ๐Ÿ” +french fries ๐ŸŸ +pizza ๐Ÿ• +hot dog ๐ŸŒญ +sandwich ๐Ÿฅช +taco ๐ŸŒฎ +burrito ๐ŸŒฏ +tamale ๐Ÿซ” +stuffed flatbread ๐Ÿฅ™ +falafel ๐Ÿง† +egg ๐Ÿฅš +cooking ๐Ÿณ +shallow pan of food ๐Ÿฅ˜ +pot of food ๐Ÿฒ +fondue ๐Ÿซ• +bowl with spoon ๐Ÿฅฃ +green salad ๐Ÿฅ— +popcorn ๐Ÿฟ +butter ๐Ÿงˆ +salt ๐Ÿง‚ +canned food ๐Ÿฅซ +bento box ๐Ÿฑ +rice cracker ๐Ÿ˜ +rice ball ๐Ÿ™ +cooked rice ๐Ÿš +curry rice ๐Ÿ› +steaming bowl ๐Ÿœ +spaghetti ๐Ÿ +roasted sweet potato ๐Ÿ  +oden ๐Ÿข +sushi ๐Ÿฃ +fried shrimp ๐Ÿค +fish cake with swirl ๐Ÿฅ +moon cake ๐Ÿฅฎ +dango ๐Ÿก +dumpling ๐ŸฅŸ +fortune cookie ๐Ÿฅ  +takeout box ๐Ÿฅก +crab ๐Ÿฆ€ +lobster ๐Ÿฆž +shrimp ๐Ÿฆ +squid ๐Ÿฆ‘ +oyster ๐Ÿฆช +soft ice cream ๐Ÿฆ +shaved ice ๐Ÿง +ice cream ๐Ÿจ +doughnut ๐Ÿฉ +cookie ๐Ÿช +birthday cake ๐ŸŽ‚ +shortcake ๐Ÿฐ +cupcake ๐Ÿง +pie ๐Ÿฅง +chocolate bar ๐Ÿซ +candy ๐Ÿฌ +lollipop ๐Ÿญ +custard ๐Ÿฎ +honey pot ๐Ÿฏ +baby bottle ๐Ÿผ +glass of milk ๐Ÿฅ› +hot beverage โ˜• +teapot ๐Ÿซ– +teacup without handle ๐Ÿต +sake ๐Ÿถ +bottle with popping cork ๐Ÿพ +wine glass ๐Ÿท +cocktail glass ๐Ÿธ +tropical drink ๐Ÿน +beer mug ๐Ÿบ +clinking beer mugs ๐Ÿป +clinking glasses ๐Ÿฅ‚ +tumbler glass ๐Ÿฅƒ +pouring liquid ๐Ÿซ— +cup with straw ๐Ÿฅค +bubble tea ๐Ÿง‹ +beverage box ๐Ÿงƒ +mate ๐Ÿง‰ +ice ๐ŸงŠ +chopsticks ๐Ÿฅข +fork and knife with plate ๐Ÿฝ +fork and knife ๐Ÿด +spoon ๐Ÿฅ„ +kitchen knife ๐Ÿ”ช +jar ๐Ÿซ™ +amphora ๐Ÿบ +globe showing Europe-Africa ๐ŸŒ +globe showing Americas ๐ŸŒŽ +globe showing Asia-Australia ๐ŸŒ +globe with meridians ๐ŸŒ +world map ๐Ÿ—บ +map of Japan ๐Ÿ—พ +compass ๐Ÿงญ +snow-capped mountain ๐Ÿ” +mountain โ›ฐ +volcano ๐ŸŒ‹ +mount fuji ๐Ÿ—ป +camping ๐Ÿ• +beach with umbrella ๐Ÿ– +desert ๐Ÿœ +desert island ๐Ÿ +national park ๐Ÿž +stadium ๐ŸŸ +classical building ๐Ÿ› +building construction ๐Ÿ— +brick ๐Ÿงฑ +rock ๐Ÿชจ +wood ๐Ÿชต +hut ๐Ÿ›– +houses ๐Ÿ˜ +derelict house ๐Ÿš +house ๐Ÿ  +house with garden ๐Ÿก +office building ๐Ÿข +Japanese post office ๐Ÿฃ +post office ๐Ÿค +hospital ๐Ÿฅ +bank ๐Ÿฆ +hotel ๐Ÿจ +love hotel ๐Ÿฉ +convenience store ๐Ÿช +school ๐Ÿซ +department store ๐Ÿฌ +factory ๐Ÿญ +Japanese castle ๐Ÿฏ +castle ๐Ÿฐ +wedding ๐Ÿ’’ +Tokyo tower ๐Ÿ—ผ +Statue of Liberty ๐Ÿ—ฝ +church โ›ช +mosque ๐Ÿ•Œ +hindu temple ๐Ÿ›• +synagogue ๐Ÿ• +shinto shrine โ›ฉ +kaaba ๐Ÿ•‹ +fountain โ›ฒ +tent โ›บ +foggy ๐ŸŒ +night with stars ๐ŸŒƒ +cityscape ๐Ÿ™ +sunrise over mountains ๐ŸŒ„ +sunrise ๐ŸŒ… +cityscape at dusk ๐ŸŒ† +sunset ๐ŸŒ‡ +bridge at night ๐ŸŒ‰ +hot springs โ™จ +carousel horse ๐ŸŽ  +playground slide ๐Ÿ› +ferris wheel ๐ŸŽก +roller coaster ๐ŸŽข +barber pole ๐Ÿ’ˆ +circus tent ๐ŸŽช +locomotive ๐Ÿš‚ +railway car ๐Ÿšƒ +high-speed train ๐Ÿš„ +bullet train ๐Ÿš… +train ๐Ÿš† +metro ๐Ÿš‡ +light rail ๐Ÿšˆ +station ๐Ÿš‰ +tram ๐ŸšŠ +monorail ๐Ÿš +mountain railway ๐Ÿšž +tram car ๐Ÿš‹ +bus ๐ŸšŒ +oncoming bus ๐Ÿš +trolleybus ๐ŸšŽ +minibus ๐Ÿš +ambulance ๐Ÿš‘ +fire engine ๐Ÿš’ +police car ๐Ÿš“ +oncoming police car ๐Ÿš” +taxi ๐Ÿš• +oncoming taxi ๐Ÿš– +automobile ๐Ÿš— +oncoming automobile ๐Ÿš˜ +sport utility vehicle ๐Ÿš™ +pickup truck ๐Ÿ›ป +delivery truck ๐Ÿšš +articulated lorry ๐Ÿš› +tractor ๐Ÿšœ +racing car ๐ŸŽ +motorcycle ๐Ÿ +motor scooter ๐Ÿ›ต +manual wheelchair ๐Ÿฆฝ +motorized wheelchair ๐Ÿฆผ +auto rickshaw ๐Ÿ›บ +bicycle ๐Ÿšฒ +kick scooter ๐Ÿ›ด +skateboard ๐Ÿ›น +roller skate ๐Ÿ›ผ +bus stop ๐Ÿš +motorway ๐Ÿ›ฃ +railway track ๐Ÿ›ค +oil drum ๐Ÿ›ข +fuel pump โ›ฝ +wheel ๐Ÿ›ž +police car light ๐Ÿšจ +horizontal traffic light ๐Ÿšฅ +vertical traffic light ๐Ÿšฆ +stop sign ๐Ÿ›‘ +construction ๐Ÿšง +anchor โš“ +ring buoy ๐Ÿ›Ÿ +sailboat โ›ต +canoe ๐Ÿ›ถ +speedboat ๐Ÿšค +passenger ship ๐Ÿ›ณ +ferry โ›ด +motor boat ๐Ÿ›ฅ +ship ๐Ÿšข +airplane โœˆ +small airplane ๐Ÿ›ฉ +airplane departure ๐Ÿ›ซ +airplane arrival ๐Ÿ›ฌ +parachute ๐Ÿช‚ +seat ๐Ÿ’บ +helicopter ๐Ÿš +suspension railway ๐ŸšŸ +mountain cableway ๐Ÿš  +aerial tramway ๐Ÿšก +satellite ๐Ÿ›ฐ +rocket ๐Ÿš€ +flying saucer ๐Ÿ›ธ +bellhop bell ๐Ÿ›Ž +luggage ๐Ÿงณ +hourglass done โŒ› +hourglass not done โณ +watch โŒš +alarm clock โฐ +stopwatch โฑ +timer clock โฒ +mantelpiece clock ๐Ÿ•ฐ +twelve oโ€™clock ๐Ÿ•› +twelve-thirty ๐Ÿ•ง +one oโ€™clock ๐Ÿ• +one-thirty ๐Ÿ•œ +two oโ€™clock ๐Ÿ•‘ +two-thirty ๐Ÿ• +three oโ€™clock ๐Ÿ•’ +three-thirty ๐Ÿ•ž +four oโ€™clock ๐Ÿ•“ +four-thirty ๐Ÿ•Ÿ +five oโ€™clock ๐Ÿ•” +five-thirty ๐Ÿ•  +six oโ€™clock ๐Ÿ•• +six-thirty ๐Ÿ•ก +seven oโ€™clock ๐Ÿ•– +seven-thirty ๐Ÿ•ข +eight oโ€™clock ๐Ÿ•— +eight-thirty ๐Ÿ•ฃ +nine oโ€™clock ๐Ÿ•˜ +nine-thirty ๐Ÿ•ค +ten oโ€™clock ๐Ÿ•™ +ten-thirty ๐Ÿ•ฅ +eleven oโ€™clock ๐Ÿ•š +eleven-thirty ๐Ÿ•ฆ +new moon ๐ŸŒ‘ +waxing crescent moon ๐ŸŒ’ +first quarter moon ๐ŸŒ“ +waxing gibbous moon ๐ŸŒ” +full moon ๐ŸŒ• +waning gibbous moon ๐ŸŒ– +last quarter moon ๐ŸŒ— +waning crescent moon ๐ŸŒ˜ +crescent moon ๐ŸŒ™ +new moon face ๐ŸŒš +first quarter moon face ๐ŸŒ› +last quarter moon face ๐ŸŒœ +thermometer ๐ŸŒก +sun โ˜€ +full moon face ๐ŸŒ +sun with face ๐ŸŒž +ringed planet ๐Ÿช +star โญ +glowing star ๐ŸŒŸ +shooting star ๐ŸŒ  +milky way ๐ŸŒŒ +cloud โ˜ +sun behind cloud โ›… +cloud with lightning and rain โ›ˆ +sun behind small cloud ๐ŸŒค +sun behind large cloud ๐ŸŒฅ +sun behind rain cloud ๐ŸŒฆ +cloud with rain ๐ŸŒง +cloud with snow ๐ŸŒจ +cloud with lightning ๐ŸŒฉ +tornado ๐ŸŒช +fog ๐ŸŒซ +wind face ๐ŸŒฌ +cyclone ๐ŸŒ€ +rainbow ๐ŸŒˆ +closed umbrella ๐ŸŒ‚ +umbrella โ˜‚ +umbrella with rain drops โ˜” +umbrella on ground โ›ฑ +high voltage โšก +snowflake โ„ +snowman โ˜ƒ +snowman without snow โ›„ +comet โ˜„ +fire ๐Ÿ”ฅ +droplet ๐Ÿ’ง +water wave ๐ŸŒŠ +jack-o-lantern ๐ŸŽƒ +Christmas tree ๐ŸŽ„ +fireworks ๐ŸŽ† +sparkler ๐ŸŽ‡ +firecracker ๐Ÿงจ +sparkles โœจ +balloon ๐ŸŽˆ +party popper ๐ŸŽ‰ +confetti ball ๐ŸŽŠ +tanabata tree ๐ŸŽ‹ +pine decoration ๐ŸŽ +Japanese dolls ๐ŸŽŽ +carp streamer ๐ŸŽ +wind chime ๐ŸŽ +moon viewing ceremony ๐ŸŽ‘ +red envelope ๐Ÿงง +ribbon ๐ŸŽ€ +wrapped gift ๐ŸŽ +reminder ribbon ๐ŸŽ— +admission tickets ๐ŸŽŸ +ticket ๐ŸŽซ +military medal ๐ŸŽ– +trophy ๐Ÿ† +sports medal ๐Ÿ… +1st place medal ๐Ÿฅ‡ +2nd place medal ๐Ÿฅˆ +3rd place medal ๐Ÿฅ‰ +soccer ball โšฝ +baseball โšพ +softball ๐ŸฅŽ +basketball ๐Ÿ€ +volleyball ๐Ÿ +american football ๐Ÿˆ +rugby football ๐Ÿ‰ +tennis ๐ŸŽพ +flying disc ๐Ÿฅ +bowling ๐ŸŽณ +cricket game ๐Ÿ +field hockey ๐Ÿ‘ +ice hockey ๐Ÿ’ +lacrosse ๐Ÿฅ +ping pong ๐Ÿ“ +badminton ๐Ÿธ +boxing glove ๐ŸฅŠ +martial arts uniform ๐Ÿฅ‹ +goal net ๐Ÿฅ… +flag in hole โ›ณ +ice skate โ›ธ +fishing pole ๐ŸŽฃ +diving mask ๐Ÿคฟ +running shirt ๐ŸŽฝ +skis ๐ŸŽฟ +sled ๐Ÿ›ท +curling stone ๐ŸฅŒ +bullseye ๐ŸŽฏ +yo-yo ๐Ÿช€ +kite ๐Ÿช +pool 8 ball ๐ŸŽฑ +crystal ball ๐Ÿ”ฎ +magic wand ๐Ÿช„ +nazar amulet ๐Ÿงฟ +hamsa ๐Ÿชฌ +video game ๐ŸŽฎ +joystick ๐Ÿ•น +slot machine ๐ŸŽฐ +game die ๐ŸŽฒ +puzzle piece ๐Ÿงฉ +teddy bear ๐Ÿงธ +piรฑata ๐Ÿช… +mirror ball ๐Ÿชฉ +nesting dolls ๐Ÿช† +spade suit โ™  +heart suit โ™ฅ +diamond suit โ™ฆ +club suit โ™ฃ +chess pawn โ™Ÿ +joker ๐Ÿƒ +mahjong red dragon ๐Ÿ€„ +flower playing cards ๐ŸŽด +performing arts ๐ŸŽญ +framed picture ๐Ÿ–ผ +artist palette ๐ŸŽจ +thread ๐Ÿงต +sewing needle ๐Ÿชก +yarn ๐Ÿงถ +knot ๐Ÿชข +glasses ๐Ÿ‘“ +sunglasses ๐Ÿ•ถ +goggles ๐Ÿฅฝ +lab coat ๐Ÿฅผ +safety vest ๐Ÿฆบ +necktie ๐Ÿ‘” +t-shirt ๐Ÿ‘• +jeans ๐Ÿ‘– +scarf ๐Ÿงฃ +gloves ๐Ÿงค +coat ๐Ÿงฅ +socks ๐Ÿงฆ +dress ๐Ÿ‘— +kimono ๐Ÿ‘˜ +sari ๐Ÿฅป +one-piece swimsuit ๐Ÿฉฑ +briefs ๐Ÿฉฒ +shorts ๐Ÿฉณ +bikini ๐Ÿ‘™ +womanโ€™s clothes ๐Ÿ‘š +purse ๐Ÿ‘› +handbag ๐Ÿ‘œ +clutch bag ๐Ÿ‘ +shopping bags ๐Ÿ› +backpack ๐ŸŽ’ +thong sandal ๐Ÿฉด +manโ€™s shoe ๐Ÿ‘ž +running shoe ๐Ÿ‘Ÿ +hiking boot ๐Ÿฅพ +flat shoe ๐Ÿฅฟ +high-heeled shoe ๐Ÿ‘  +womanโ€™s sandal ๐Ÿ‘ก +ballet shoes ๐Ÿฉฐ +womanโ€™s boot ๐Ÿ‘ข +crown ๐Ÿ‘‘ +womanโ€™s hat ๐Ÿ‘’ +top hat ๐ŸŽฉ +graduation cap ๐ŸŽ“ +billed cap ๐Ÿงข +military helmet ๐Ÿช– +rescue workerโ€™s helmet โ›‘ +prayer beads ๐Ÿ“ฟ +lipstick ๐Ÿ’„ +ring ๐Ÿ’ +gem stone ๐Ÿ’Ž +muted speaker ๐Ÿ”‡ +speaker low volume ๐Ÿ”ˆ +speaker medium volume ๐Ÿ”‰ +speaker high volume ๐Ÿ”Š +loudspeaker ๐Ÿ“ข +megaphone ๐Ÿ“ฃ +postal horn ๐Ÿ“ฏ +bell ๐Ÿ”” +bell with slash ๐Ÿ”• +musical score ๐ŸŽผ +musical note ๐ŸŽต +musical notes ๐ŸŽถ +studio microphone ๐ŸŽ™ +level slider ๐ŸŽš +control knobs ๐ŸŽ› +microphone ๐ŸŽค +headphone ๐ŸŽง +radio ๐Ÿ“ป +saxophone ๐ŸŽท +accordion ๐Ÿช— +guitar ๐ŸŽธ +musical keyboard ๐ŸŽน +trumpet ๐ŸŽบ +violin ๐ŸŽป +banjo ๐Ÿช• +drum ๐Ÿฅ +long drum ๐Ÿช˜ +mobile phone ๐Ÿ“ฑ +mobile phone with arrow ๐Ÿ“ฒ +telephone โ˜Ž +telephone receiver ๐Ÿ“ž +pager ๐Ÿ“Ÿ +fax machine ๐Ÿ“  +battery ๐Ÿ”‹ +low battery ๐Ÿชซ +electric plug ๐Ÿ”Œ +laptop ๐Ÿ’ป +desktop computer ๐Ÿ–ฅ +printer ๐Ÿ–จ +keyboard โŒจ +computer mouse ๐Ÿ–ฑ +trackball ๐Ÿ–ฒ +computer disk ๐Ÿ’ฝ +floppy disk ๐Ÿ’พ +optical disk ๐Ÿ’ฟ +dvd ๐Ÿ“€ +abacus ๐Ÿงฎ +movie camera ๐ŸŽฅ +film frames ๐ŸŽž +film projector ๐Ÿ“ฝ +clapper board ๐ŸŽฌ +television ๐Ÿ“บ +camera ๐Ÿ“ท +camera with flash ๐Ÿ“ธ +video camera ๐Ÿ“น +videocassette ๐Ÿ“ผ +magnifying glass tilted left ๐Ÿ” +magnifying glass tilted right ๐Ÿ”Ž +candle ๐Ÿ•ฏ +light bulb ๐Ÿ’ก +flashlight ๐Ÿ”ฆ +red paper lantern ๐Ÿฎ +diya lamp ๐Ÿช” +notebook with decorative cover ๐Ÿ“” +closed book ๐Ÿ“• +open book ๐Ÿ“– +green book ๐Ÿ“— +blue book ๐Ÿ“˜ +orange book ๐Ÿ“™ +books ๐Ÿ“š +notebook ๐Ÿ““ +ledger ๐Ÿ“’ +page with curl ๐Ÿ“ƒ +scroll ๐Ÿ“œ +page facing up ๐Ÿ“„ +newspaper ๐Ÿ“ฐ +rolled-up newspaper ๐Ÿ—ž +bookmark tabs ๐Ÿ“‘ +bookmark ๐Ÿ”– +label ๐Ÿท +money bag ๐Ÿ’ฐ +coin ๐Ÿช™ +yen banknote ๐Ÿ’ด +dollar banknote ๐Ÿ’ต +euro banknote ๐Ÿ’ถ +pound banknote ๐Ÿ’ท +money with wings ๐Ÿ’ธ +credit card ๐Ÿ’ณ +receipt ๐Ÿงพ +chart increasing with yen ๐Ÿ’น +envelope โœ‰ +e-mail ๐Ÿ“ง +incoming envelope ๐Ÿ“จ +envelope with arrow ๐Ÿ“ฉ +outbox tray ๐Ÿ“ค +inbox tray ๐Ÿ“ฅ +package ๐Ÿ“ฆ +closed mailbox with raised flag ๐Ÿ“ซ +closed mailbox with lowered flag ๐Ÿ“ช +open mailbox with raised flag ๐Ÿ“ฌ +open mailbox with lowered flag ๐Ÿ“ญ +postbox ๐Ÿ“ฎ +ballot box with ballot ๐Ÿ—ณ +pencil โœ +black nib โœ’ +fountain pen ๐Ÿ–‹ +pen ๐Ÿ–Š +paintbrush ๐Ÿ–Œ +crayon ๐Ÿ– +memo ๐Ÿ“ +briefcase ๐Ÿ’ผ +file folder ๐Ÿ“ +open file folder ๐Ÿ“‚ +card index dividers ๐Ÿ—‚ +calendar ๐Ÿ“… +tear-off calendar ๐Ÿ“† +spiral notepad ๐Ÿ—’ +spiral calendar ๐Ÿ—“ +card index ๐Ÿ“‡ +chart increasing ๐Ÿ“ˆ +chart decreasing ๐Ÿ“‰ +bar chart ๐Ÿ“Š +clipboard ๐Ÿ“‹ +pushpin ๐Ÿ“Œ +round pushpin ๐Ÿ“ +paperclip ๐Ÿ“Ž +linked paperclips ๐Ÿ–‡ +straight ruler ๐Ÿ“ +triangular ruler ๐Ÿ“ +scissors โœ‚ +card file box ๐Ÿ—ƒ +file cabinet ๐Ÿ—„ +wastebasket ๐Ÿ—‘ +locked ๐Ÿ”’ +unlocked ๐Ÿ”“ +locked with pen ๐Ÿ” +locked with key ๐Ÿ” +key ๐Ÿ”‘ +old key ๐Ÿ— +hammer ๐Ÿ”จ +axe ๐Ÿช“ +pick โ› +hammer and pick โš’ +hammer and wrench ๐Ÿ›  +dagger ๐Ÿ—ก +crossed swords โš” +water pistol ๐Ÿ”ซ +boomerang ๐Ÿชƒ +bow and arrow ๐Ÿน +shield ๐Ÿ›ก +carpentry saw ๐Ÿชš +wrench ๐Ÿ”ง +screwdriver ๐Ÿช› +nut and bolt ๐Ÿ”ฉ +gear โš™ +clamp ๐Ÿ—œ +balance scale โš– +white cane ๐Ÿฆฏ +link ๐Ÿ”— +chains โ›“ +hook ๐Ÿช +toolbox ๐Ÿงฐ +magnet ๐Ÿงฒ +ladder ๐Ÿชœ +alembic โš— +test tube ๐Ÿงช +petri dish ๐Ÿงซ +dna ๐Ÿงฌ +microscope ๐Ÿ”ฌ +telescope ๐Ÿ”ญ +satellite antenna ๐Ÿ“ก +syringe ๐Ÿ’‰ +drop of blood ๐Ÿฉธ +pill ๐Ÿ’Š +adhesive bandage ๐Ÿฉน +crutch ๐Ÿฉผ +stethoscope ๐Ÿฉบ +x-ray ๐Ÿฉป +door ๐Ÿšช +elevator ๐Ÿ›— +mirror ๐Ÿชž +window ๐ŸชŸ +bed ๐Ÿ› +couch and lamp ๐Ÿ›‹ +chair ๐Ÿช‘ +toilet ๐Ÿšฝ +plunger ๐Ÿช  +shower ๐Ÿšฟ +bathtub ๐Ÿ› +mouse trap ๐Ÿชค +razor ๐Ÿช’ +lotion bottle ๐Ÿงด +safety pin ๐Ÿงท +broom ๐Ÿงน +basket ๐Ÿงบ +roll of paper ๐Ÿงป +bucket ๐Ÿชฃ +soap ๐Ÿงผ +bubbles ๐Ÿซง +toothbrush ๐Ÿชฅ +sponge ๐Ÿงฝ +fire extinguisher ๐Ÿงฏ +shopping cart ๐Ÿ›’ +cigarette ๐Ÿšฌ +coffin โšฐ +headstone ๐Ÿชฆ +funeral urn โšฑ +moai ๐Ÿ—ฟ +placard ๐Ÿชง +identification card ๐Ÿชช +ATM sign ๐Ÿง +litter in bin sign ๐Ÿšฎ +potable water ๐Ÿšฐ +wheelchair symbol โ™ฟ +menโ€™s room ๐Ÿšน +womenโ€™s room ๐Ÿšบ +restroom ๐Ÿšป +baby symbol ๐Ÿšผ +water closet ๐Ÿšพ +passport control ๐Ÿ›‚ +customs ๐Ÿ›ƒ +baggage claim ๐Ÿ›„ +left luggage ๐Ÿ›… +warning โš  +children crossing ๐Ÿšธ +no entry โ›” +prohibited ๐Ÿšซ +no bicycles ๐Ÿšณ +no smoking ๐Ÿšญ +no littering ๐Ÿšฏ +non-potable water ๐Ÿšฑ +no pedestrians ๐Ÿšท +no mobile phones ๐Ÿ“ต +no one under eighteen ๐Ÿ”ž +radioactive โ˜ข +biohazard โ˜ฃ +up arrow โฌ† +up-right arrow โ†— +right arrow โžก +down-right arrow โ†˜ +down arrow โฌ‡ +down-left arrow โ†™ +left arrow โฌ… +up-left arrow โ†– +up-down arrow โ†• +left-right arrow โ†” +right arrow curving left โ†ฉ +left arrow curving right โ†ช +right arrow curving up โคด +right arrow curving down โคต +clockwise vertical arrows ๐Ÿ”ƒ +counterclockwise arrows button ๐Ÿ”„ +BACK arrow ๐Ÿ”™ +END arrow ๐Ÿ”š +ON! arrow ๐Ÿ”› +SOON arrow ๐Ÿ”œ +TOP arrow ๐Ÿ” +place of worship ๐Ÿ› +atom symbol โš› +om ๐Ÿ•‰ +star of David โœก +wheel of dharma โ˜ธ +yin yang โ˜ฏ +latin cross โœ +orthodox cross โ˜ฆ +star and crescent โ˜ช +peace symbol โ˜ฎ +menorah ๐Ÿ•Ž +dotted six-pointed star ๐Ÿ”ฏ +Aries โ™ˆ +Taurus โ™‰ +Gemini โ™Š +Cancer โ™‹ +Leo โ™Œ +Virgo โ™ +Libra โ™Ž +Scorpio โ™ +Sagittarius โ™ +Capricorn โ™‘ +Aquarius โ™’ +Pisces โ™“ +Ophiuchus โ›Ž +shuffle tracks button ๐Ÿ”€ +repeat button ๐Ÿ” +repeat single button ๐Ÿ”‚ +play button โ–ถ +fast-forward button โฉ +next track button โญ +play or pause button โฏ +reverse button โ—€ +fast reverse button โช +last track button โฎ +upwards button ๐Ÿ”ผ +fast up button โซ +downwards button ๐Ÿ”ฝ +fast down button โฌ +pause button โธ +stop button โน +record button โบ +eject button โ +cinema ๐ŸŽฆ +dim button ๐Ÿ”… +bright button ๐Ÿ”† +antenna bars ๐Ÿ“ถ +vibration mode ๐Ÿ“ณ +mobile phone off ๐Ÿ“ด +female sign โ™€ +male sign โ™‚ +transgender symbol โšง +multiply โœ– +plus โž• +minus โž– +divide โž— +heavy equals sign ๐ŸŸฐ +infinity โ™พ +double exclamation mark โ€ผ +exclamation question mark โ‰ +red question mark โ“ +white question mark โ” +white exclamation mark โ• +red exclamation mark โ— +wavy dash ใ€ฐ +currency exchange ๐Ÿ’ฑ +heavy dollar sign ๐Ÿ’ฒ +medical symbol โš• +recycling symbol โ™ป +fleur-de-lis โšœ +trident emblem ๐Ÿ”ฑ +name badge ๐Ÿ“› +Japanese symbol for beginner ๐Ÿ”ฐ +hollow red circle โญ• +check mark button โœ… +check box with check โ˜‘ +check mark โœ” +cross mark โŒ +cross mark button โŽ +curly loop โžฐ +double curly loop โžฟ +part alternation mark ใ€ฝ +eight-spoked asterisk โœณ +eight-pointed star โœด +sparkle โ‡ +copyright ยฉ +registered ยฎ +trade mark โ„ข +keycap: # #๏ธโƒฃ +keycap: * *๏ธโƒฃ +keycap: 0 0๏ธโƒฃ +keycap: 1 1๏ธโƒฃ +keycap: 2 2๏ธโƒฃ +keycap: 3 3๏ธโƒฃ +keycap: 4 4๏ธโƒฃ +keycap: 5 5๏ธโƒฃ +keycap: 6 6๏ธโƒฃ +keycap: 7 7๏ธโƒฃ +keycap: 8 8๏ธโƒฃ +keycap: 9 9๏ธโƒฃ +keycap: 10 ๐Ÿ”Ÿ +input latin uppercase ๐Ÿ”  +input latin lowercase ๐Ÿ”ก +input numbers ๐Ÿ”ข +input symbols ๐Ÿ”ฃ +input latin letters ๐Ÿ”ค +A button (blood type) ๐Ÿ…ฐ +AB button (blood type) ๐Ÿ†Ž +B button (blood type) ๐Ÿ…ฑ +CL button ๐Ÿ†‘ +COOL button ๐Ÿ†’ +FREE button ๐Ÿ†“ +information โ„น +ID button ๐Ÿ†” +circled M โ“‚ +NEW button ๐Ÿ†• +NG button ๐Ÿ†– +O button (blood type) ๐Ÿ…พ +OK button ๐Ÿ†— +P button ๐Ÿ…ฟ +SOS button ๐Ÿ†˜ +UP! button ๐Ÿ†™ +VS button ๐Ÿ†š +Japanese โ€œhereโ€ button ๐Ÿˆ +Japanese โ€œservice chargeโ€ button ๐Ÿˆ‚ +Japanese โ€œmonthly amountโ€ button ๐Ÿˆท +Japanese โ€œnot free of chargeโ€ button ๐Ÿˆถ +Japanese โ€œreservedโ€ button ๐Ÿˆฏ +Japanese โ€œbargainโ€ button ๐Ÿ‰ +Japanese โ€œdiscountโ€ button ๐Ÿˆน +Japanese โ€œfree of chargeโ€ button ๐Ÿˆš +Japanese โ€œprohibitedโ€ button ๐Ÿˆฒ +Japanese โ€œacceptableโ€ button ๐Ÿ‰‘ +Japanese โ€œapplicationโ€ button ๐Ÿˆธ +Japanese โ€œpassing gradeโ€ button ๐Ÿˆด +Japanese โ€œvacancyโ€ button ๐Ÿˆณ +Japanese โ€œcongratulationsโ€ button ใŠ— +Japanese โ€œsecretโ€ button ใŠ™ +Japanese โ€œopen for businessโ€ button ๐Ÿˆบ +Japanese โ€œno vacancyโ€ button ๐Ÿˆต +red circle ๐Ÿ”ด +orange circle ๐ŸŸ  +yellow circle ๐ŸŸก +green circle ๐ŸŸข +blue circle ๐Ÿ”ต +purple circle ๐ŸŸฃ +brown circle ๐ŸŸค +black circle โšซ +white circle โšช +red square ๐ŸŸฅ +orange square ๐ŸŸง +yellow square ๐ŸŸจ +green square ๐ŸŸฉ +blue square ๐ŸŸฆ +purple square ๐ŸŸช +brown square ๐ŸŸซ +black large square โฌ› +white large square โฌœ +black medium square โ—ผ +white medium square โ—ป +black medium-small square โ—พ +white medium-small square โ—ฝ +black small square โ–ช +white small square โ–ซ +large orange diamond ๐Ÿ”ถ +large blue diamond ๐Ÿ”ท +small orange diamond ๐Ÿ”ธ +small blue diamond ๐Ÿ”น +red triangle pointed up ๐Ÿ”บ +red triangle pointed down ๐Ÿ”ป +diamond with a dot ๐Ÿ’  +radio button ๐Ÿ”˜ +white square button ๐Ÿ”ณ +black square button ๐Ÿ”ฒ +chequered flag ๐Ÿ +triangular flag ๐Ÿšฉ +crossed flags ๐ŸŽŒ +black flag ๐Ÿด +white flag ๐Ÿณ +letter a ๐Ÿ‡ฆ +letter b ๐Ÿ‡ง +letter c ๐Ÿ‡จ +letter d ๐Ÿ‡ฉ +letter e ๐Ÿ‡ช +letter f ๐Ÿ‡ซ +letter g ๐Ÿ‡ฌ +letter h ๐Ÿ‡ญ +letter i ๐Ÿ‡ฎ +letter j ๐Ÿ‡ฏ +letter k ๐Ÿ‡ฐ +letter l ๐Ÿ‡ฑ +letter m ๐Ÿ‡ฒ +letter n ๐Ÿ‡ณ +letter o ๐Ÿ‡ด +letter p ๐Ÿ‡ต +letter r ๐Ÿ‡ท +letter s ๐Ÿ‡ธ +letter t ๐Ÿ‡น +letter u ๐Ÿ‡บ +letter v ๐Ÿ‡ป +letter y ๐Ÿ‡พ +letter z ๐Ÿ‡ฟ diff --git a/bin/dmscripts/dmfm b/bin/dmscripts/dmfm new file mode 100755 index 0000000..34a9e2c --- /dev/null +++ b/bin/dmscripts/dmfm @@ -0,0 +1,17 @@ +#!/bin/bash + +file=1 +while [ "$file" ]; do + file=$(ls -1 --group-directories-first | dmenu -i -l 8 -g 1 -p "$(basename $(pwd)):") + if [ -e "$file" ]; then + owd=$(pwd) + if [ -d "$file" ]; then + cd "$file" + else [ -f "$file" ] + if which xdg-open &> /dev/null; then + exec xdg-open "$owd/$file" & + unset file + fi + fi + fi +done diff --git a/bin/dmscripts/dmhelp b/bin/dmscripts/dmhelp new file mode 100755 index 0000000..653fa1f --- /dev/null +++ b/bin/dmscripts/dmhelp @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +program="${1:-$(dmenu_path | dmenu -l 4 -g 5)}" +opfil="/tmp/dmh_options.txt" +test -z "${program}" && exit 1 + +if ${program} --help > "${opfil}" +then + option="$(\ + grep -E "^ *-[-a-Z]* " "${opfil}" \ + | tr -s ' ' \ + | sort | uniq \ + | column -l 2 -t \ + | dmenu -x -l 20 -g 1 -p "${program}" \ + | awk '{print $1}' \ + )" +elif man $program > "${opfil}" +then + echo lesgo +else + echo "No options found for '${program}'" > /dev/stderr + exit 1 +fi +test -z "${option}" && exit 1 + +rm -f "${opfil}" +${program} ${option} diff --git a/bin/dmscripts/dminw b/bin/dmscripts/dminw new file mode 100755 index 0000000..2ff32a1 --- /dev/null +++ b/bin/dmscripts/dminw @@ -0,0 +1,4 @@ +#!/bin/bash +WINDOWID=${1:-$(xdotool getwindowfocus)} +WIDTH=$(xdotool getwindowgeometry -s ${WINDOWID} | grep WIDTH | cut -d ' ' -f 2) +dmenu_run -w ${1:-$(xdotool getwindowfocus)} -z ${WIDTH} diff --git a/bin/dmscripts/dmlang b/bin/dmscripts/dmlang new file mode 100755 index 0000000..0009704 --- /dev/null +++ b/bin/dmscripts/dmlang @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +choice="$(\ + echo -e "us\ngb\nbe" \ + | dmenu \ + -p "($(setxkbmap -query | awk 'NR==3 {print $2}'))" \ +)" +setxkbmap "${choice:-us}" diff --git a/bin/dmscripts/dmpass b/bin/dmscripts/dmpass new file mode 100755 index 0000000..2af798b --- /dev/null +++ b/bin/dmscripts/dmpass @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +store="$HOME/.password-store" +lscmd="ls --group-directories-first" +dmenucmd="dmenu -l 4 -g 2" +while [ -d "${store}/${file}" ] +do + choice="$($lscmd "${store}/${file}" | awk -F'.gpg' '{print $1}' | $dmenucmd)" + [ "$choice" ] || break + file="${file}/${choice}" +done +pass show -c "${file}" diff --git a/bin/dmscripts/dmpassgen b/bin/dmscripts/dmpassgen new file mode 100755 index 0000000..c627a1d --- /dev/null +++ b/bin/dmscripts/dmpassgen @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +choice="$(echo -ne "multiline\nsingle" | dmenu -l 1 -g 2)" +test -z "${choice}" && exit 1 + +password="$(echo -n "" | dmenu -p "name:")" +test -z "${password}" && exit 1 + +if [[ "${choice}" == "multiline" ]] +then + logins="$(ls -1 ~/.password-store/e-mails | awk -F '.gpg' '{print $1}')" + login="$(echo "$logins" | dmenu -g 1 -l 8 -p "login:")" + test -z "${login}" && exit 1 + url="$(echo -n "" | dmenu -p "url:")" + test -z "${url}" && exit 1 + echo -e "${password}\nlogin: ${login}\nurl: ${url}" | pass insert -mf "${password}" + pass generate -ci "${password}" +else + pass generate -cf "${password}" +fi + diff --git a/bin/dmscripts/dmpdf b/bin/dmscripts/dmpdf new file mode 100755 index 0000000..6137e1a --- /dev/null +++ b/bin/dmscripts/dmpdf @@ -0,0 +1,21 @@ +#!/bin/bash +directory="${1:-$PWD}" +choice="$(\ + find "${directory}" \ + -type f \ + -iname "*.pdf" \ + -printf "%p\n" \ + | awk -F '/' '{print $(NF - 1) "/" $NF}' \ + | sort \ + | uniq \ + | dmenu -i -x -p "pdf:" -l 10 -g 2 \ + | awk -F '/' '{print $2}' \ +)" + +# find matching file +file="$(\ + find "$directory" -name "*$choice*" \ +)" + +[[ -f "$file" ]] || exit 1 +evince "$file" & diff --git a/bin/dmscripts/dmpower b/bin/dmscripts/dmpower new file mode 100755 index 0000000..bd847d6 --- /dev/null +++ b/bin/dmscripts/dmpower @@ -0,0 +1,3 @@ +#!/bin/sh +choice="$(echo -e "poweroff\nreboot\nhibernate" | dmenu -l 1 -g 3)" +test -z "$choice" || systemctl "$choice" diff --git a/bin/dmscripts/dmpsbm b/bin/dmscripts/dmpsbm new file mode 100755 index 0000000..3b00b2c --- /dev/null +++ b/bin/dmscripts/dmpsbm @@ -0,0 +1,2 @@ +#!/bin/sh +grep -v '^#' ~/.local/share/bookmarks | dmenu -c -x -g 1 -l 10 | cut -f1 -d' ' | xclip -sel c && xdotool key Ctrl+Shift+v diff --git a/bin/dmscripts/dmpsclip b/bin/dmscripts/dmpsclip new file mode 100755 index 0000000..8577e91 --- /dev/null +++ b/bin/dmscripts/dmpsclip @@ -0,0 +1,3 @@ +#!/bin/sh +dmenu -l 10 -g 1 -c -x < /tmp/tmpclip.txt | xclip -sel c +xdotool key Ctrl+Shift+v diff --git a/bin/dmscripts/dmvid b/bin/dmscripts/dmvid new file mode 100755 index 0000000..08dbb6b --- /dev/null +++ b/bin/dmscripts/dmvid @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +find ${1:-~/movies ~/Downloads} 2> /dev/null | grep -E ".+\.(webm|mp4|mpeg|mkv)$" | sort > /tmp/dmvids +choice="$(\ + sed 's|^/home/aluc|\~| ; s|\([^/]\)[^/]*/|\1/|g' /tmp/dmvids \ + | tr '\n' '\0' \ + | xargs -0 -I {} echo "๏€ฝ {}" \ + | tr '\0' '\n' \ + | awk '{printf "%-3s %s\n", NR ":", $0}' \ + | dmenu -l 10 -g 1 -x -i \ + | grep -zoE "^[0-9]+:" \ +)" +if [ -z "$choice" ]; then + exit +fi +vid="$(sed -n "${choice::-1}p" /tmp/dmvids)" +mpv "$vid" diff --git a/bin/dmscripts/dmyt-not b/bin/dmscripts/dmyt-not new file mode 100755 index 0000000..4783a8d --- /dev/null +++ b/bin/dmscripts/dmyt-not @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +# Open a video from channels.yt-not by selecting the channel +channel="$(awk '{print $2}' ~/.local/share/yt-not/channels.yt-not | dmenu -l 2 -g 4)" +video_id="$(awk "/$channel/ {print \$3}" ~/.local/share/yt-not/channels.yt-not )" +video="https://youtube.com/watch?v=${video_id}" +mpv $video diff --git a/bin/extra/arr_hjkl b/bin/extra/arr_hjkl new file mode 100755 index 0000000..0ef542e --- /dev/null +++ b/bin/extra/arr_hjkl @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ "$(xmodmap -pke | grep ' = h')" ] +then + xmodmap -e 'keycode 43 = Left' + xmodmap -e 'keycode 44 = Down Return' + xmodmap -e 'keycode 45 = Up' + xmodmap -e 'keycode 46 = Right' + dunstify "arr hjkl" "arrows on" +else + export ARRKEYMODE="hjkl" + xmodmap -e 'keycode 43 = h' + xmodmap -e 'keycode 44 = j' + xmodmap -e 'keycode 45 = k' + xmodmap -e 'keycode 46 = l' + dunstify "arr hjkl" "arrows off" +fi diff --git a/bin/extra/cht.sh b/bin/extra/cht.sh new file mode 100755 index 0000000..7cd4892 --- /dev/null +++ b/bin/extra/cht.sh @@ -0,0 +1,796 @@ +#!/bin/bash +# shellcheck disable=SC1117,SC2001 +# +# [X] open section +# [X] one shot mode +# [X] usage info +# [X] dependencies check +# [X] help +# [X] yank/y/copy/c +# [X] Y/C +# [X] eof problem +# [X] more +# [X] stealth mode +# +# here are several examples for the stealth mode: +# +# zip lists +# list permutation +# random list element +# reverse a list +# read json from file +# append string to a file +# run process in background +# count words in text counter +# group elements list + +__CHTSH_VERSION=0.0.4 +__CHTSH_DATETIME="2021-04-25 12:30:30 +0200" + +# cht.sh configuration loading +# +# configuration is stored in ~/.cht.sh/ (can be overridden with CHTSH env var.) +# +CHTSH_HOME=${CHTSH:-"$HOME"/.cht.sh} +[ -z "$CHTSH_CONF" ] && CHTSH_CONF=$CHTSH_HOME/cht.sh.conf +# shellcheck disable=SC1090,SC2002 +[ -e "$CHTSH_CONF" ] && source "$CHTSH_CONF" +[ -z "$CHTSH_URL" ] && CHTSH_URL=https://cht.sh + +# currently we support only two modes: +# * lite = access the server using curl +# * auto = try standalone usage first +CHTSH_MODE="$(cat "$CHTSH_HOME"/mode 2> /dev/null)" +[ "$CHTSH_MODE" != lite ] && CHTSH_MODE=auto +CHEATSH_INSTALLATION="$(cat "$CHTSH_HOME/standalone" 2> /dev/null)" + + +export LESSSECURE=1 +STEALTH_MAX_SELECTION_LENGTH=5 + +case "$(uname -s)" in + Darwin) is_macos=yes ;; + *) is_macos=no ;; +esac + +# for KSH93 +# shellcheck disable=SC2034,SC2039,SC2168 +if echo "$KSH_VERSION" | grep -q ' 93' && ! local foo 2>/dev/null; then + alias local=typeset +fi + +fatal() +{ + echo "ERROR: $*" >&2 + exit 1 +} + +_say_what_i_do() +{ + [ -n "$LOG" ] && echo "$(date '+[%Y-%m-%d %H:%M%S]') $*" >> "$LOG" + + local this_prompt="\033[0;1;4;32m>>\033[0m" + printf "\n${this_prompt}%s\033[0m\n" " $* " +} + +cheatsh_standalone_install() +{ + # the function installs cheat.sh with the upstream repositories + # in the standalone mode + local installdir; installdir="$1" + local default_installdir="$HOME/.cheat.sh" + + [ -z "$installdir" ] && installdir=${default_installdir} + + if [ "$installdir" = help ]; then + cat </dev/null || \ + { echo "DEPENDENCY: \"$dep\" is needed to install cheat.sh in the standalone mode" >&2; _exit_code=1; } + done + [ "$_exit_code" -ne 0 ] && return "$_exit_code" + + while true; do + local _installdir + echo -n "Where should cheat.sh be installed [$installdir]? "; read -r _installdir + [ -n "$_installdir" ] && installdir=$_installdir + + if [ "$installdir" = y ] \ + || [ "$installdir" = Y ] \ + || [ "$(echo "$installdir" | tr "[:upper:]" "[:lower:]")" = yes ] + then + echo Please enter the directory name + echo If it was the directory name already, please prepend it with \"./\": "./$installdir" + else + break + fi + done + + if [ -e "$installdir" ]; then + echo "ERROR: Installation directory [$installdir] exists already" + echo "Please remove it first before continuing" + return 1 + fi + + if ! mkdir -p "$installdir"; then + echo "ERROR: Could not create the installation directory \"$installdir\"" + echo "ERROR: Please check the permissions and start the script again" + return 1 + fi + + local space_needed=700 + local space_available; space_available=$(($(df -k "$installdir" | awk '{print $4}' | tail -1)/1024)) + + if [ "$space_available" -lt "$space_needed" ]; then + echo "ERROR: Installation directory has no enough space (needed: ${space_needed}M, available: ${space_available}M" + echo "ERROR: Please clean up and start the script again" + rmdir "$installdir" + return 1 + fi + + _say_what_i_do Cloning cheat.sh locally + local url=https://github.com/chubin/cheat.sh + rmdir "$installdir" + git clone "$url" "$installdir" || fatal Could not clone "$url" with git into "$installdir" + cd "$installdir" || fatal "Cannot cd into $installdir" + + # after the repository cloned, we may have the log directory + # and we can write our installation log into it + mkdir -p "log/" + LOG="$PWD/log/install.log" + + # we use tee everywhere so we should set -o pipefail + set -o pipefail + + # currently the script uses python 2, + # but cheat.sh supports python 3 too + # if you want to switch it to python 3 + # set PYTHON2 to NO: + # PYTHON2=NO + # + PYTHON2=NO + if [[ $PYTHON2 = YES ]]; then + python="python2" + pip="pip" + virtualenv_python3_option=() + else + python="python3" + pip="pip3" + virtualenv_python3_option=(-p python3) + fi + + _say_what_i_do Creating virtual environment + virtualenv "${virtualenv_python3_option[@]}" ve \ + || fatal "Could not create virtual environment with 'virtualenv ve'" + + export CHEATSH_PATH_WORKDIR=$PWD + + # rapidfuzz does not support Python 2, + # so if we are using Python 2, install fuzzywuzzy instead + if [[ $PYTHON2 = YES ]]; then + sed -i s/rapidfuzz/fuzzywuzzy/ requirements.txt + echo "python-Levenshtein" >> requirements.txt + fi + + _say_what_i_do Installing python requirements into the virtual environment + ve/bin/"$pip" install -r requirements.txt > "$LOG" \ + || { + + echo "ERROR:" + echo "---" + tail -n 10 "$LOG" + echo "---" + echo "See $LOG for more" + fatal Could not install python dependencies into the virtual environment + } + echo "$(ve/bin/"$pip" freeze | wc -l) dependencies were successfully installed" + + _say_what_i_do Fetching the upstream cheat sheets repositories + ve/bin/python lib/fetch.py fetch-all | tee -a "$LOG" + + _say_what_i_do Running self-tests + ( + cd tests || exit + + if CHEATSH_TEST_STANDALONE=YES \ + CHEATSH_TEST_SKIP_ONLINE=NO \ + CHEATSH_TEST_SHOW_DETAILS=NO \ + PYTHON=../ve/bin/python bash run-tests.sh | tee -a "$LOG" + then + printf "\033[0;32m%s\033[0m\n" "SUCCESS" + else + printf "\033[0;31m%s\033[0m\n" "FAILED" + echo "Some tests were failed. Run the tests manually for further investigation:" + echo " cd $PWD; bash run-tests.sh)" + fi + ) + + mkdir -p "$CHTSH_HOME" + echo "$installdir" > "$CHTSH_HOME/standalone" + echo auto > "$CHTSH_HOME/mode" + + _say_what_i_do Done + + local v1; v1=$(printf "\033[0;1;32m") + local v2; v2=$(printf "\033[0m") + + cat < "$CHTSH_HOME/mode" + echo "Configured mode: $mode" + fi + else + echo "Unknown mode: $mode" + echo Supported modes: + echo " auto use the standalone installation first" + echo " lite use the cheat sheets server directly" + fi +} + +get_query_options() +{ + local query="$*" + if [ -n "$CHTSH_QUERY_OPTIONS" ]; then + case $query in + *\?*) query="$query&${CHTSH_QUERY_OPTIONS}";; + *) query="$query?${CHTSH_QUERY_OPTIONS}";; + esac + fi + printf "%s" "$query" +} + +do_query() +{ + local query="$*" + local b_opts= + local uri="${CHTSH_URL}/\"\$(get_query_options $query)\"" + + if [ -e "$CHTSH_HOME/id" ]; then + b_opts="-b \"\$CHTSH_HOME/id\"" + fi + + eval curl "$b_opts" -s "$uri" > "$TMP1" + + if [ -z "$lines" ] || [ "$(wc -l "$TMP1" | awk '{print $1}')" -lt "$lines" ]; then + cat "$TMP1" + else + ${PAGER:-$defpager} "$TMP1" + fi +} + +prepare_query() +{ + local section="$1"; shift + local input="$1"; shift + local arguments="$1" + + local query + if [ -z "$section" ] || [ x"${input}" != x"${input#/}" ]; then + query=$(printf %s "$input" | sed 's@ @/@; s@ @+@g') + else + query=$(printf %s "$section/$input" | sed 's@ @+@g') + fi + + [ -n "$arguments" ] && arguments="?$arguments" + printf %s "$query$arguments" +} + +get_list_of_sections() +{ + curl -s "${CHTSH_URL}"/:list | grep -v '/.*/' | grep '/$' | xargs +} + +gen_random_str() +( + len=$1 + if command -v openssl >/dev/null; then + openssl rand -base64 $((len*3/4)) | awk -v ORS='' // + else + rdev=/dev/urandom + for d in /dev/{srandom,random,arandom}; do + test -r "$d" && rdev=$d + done + if command -v hexdump >/dev/null; then + hexdump -vn $((len/2)) -e '1/1 "%02X" 1 ""' "$rdev" + elif command -v xxd >/dev/null; then + xxd -l $((len/2)) -ps "$rdev" | awk -v ORS='' // + else + cd /tmp || { echo Cannot cd into /tmp >&2; exit 1; } + s= + # shellcheck disable=SC2000 + while [ "$(echo "$s" | wc -c)" -lt "$len" ]; do + s="$s$(mktemp -u XXXXXXXXXX)" + done + printf "%.${len}s" "$s" + fi + fi +) + +if [ "$CHTSH_MODE" = auto ] && [ -d "$CHEATSH_INSTALLATION" ]; then + curl() { + # ignoring all options + # currently the standalone.py does not support them anyway + local opt + while getopts "b:s" opt; do + : + done + shift $((OPTIND - 1)) + + local url; url="$1"; shift + PYTHONIOENCODING=UTF-8 "$CHEATSH_INSTALLATION/ve/bin/python" "$CHEATSH_INSTALLATION/lib/standalone.py" "${url#"$CHTSH_URL"}" "$@" + } +elif [ "$(uname -s)" = OpenBSD ] && [ -x /usr/bin/ftp ]; then + # any better test not involving either OS matching or actual query? + curl() { + local opt args="-o -" + while getopts "b:s" opt; do + case $opt in + b) args="$args -c $OPTARG";; + s) args="$args -M -V";; + *) echo "internal error: unsupported cURL option '$opt'" >&2; exit 1;; + esac + done + shift $((OPTIND - 1)) + /usr/bin/ftp "$args" "$@" + } +else + command -v curl >/dev/null || { echo 'DEPENDENCY: install "curl" to use cht.sh' >&2; exit 1; } + _CURL=$(command -v curl) + if [ x"$CHTSH_CURL_OPTIONS" != x ]; then + curl() { + $_CURL "${CHTSH_CURL_OPTIONS}" "$@" + } + fi +fi + +if [ "$1" = --read ]; then + read -r a || a="exit" + printf "%s\n" "$a" + exit 0 +elif [ x"$1" = x--help ] || [ -z "$1" ]; then + + n=${0##*/} + s=$(echo "$n" | sed "s/./ /"g) + + cat </dev/null || echo 'DEPENDENCY: please install "wl-copy" for "copy"' >&2 + else + command -v xclip >/dev/null || echo 'DEPENDENCY: please install "xclip" for "copy"' >&2 + fi +fi +command -v rlwrap >/dev/null || { echo 'DEPENDENCY: install "rlwrap" to use cht.sh in the shell mode' >&2; exit 1; } + +mkdir -p "$CHTSH_HOME/" +lines=$(tput lines) + +if command -v less >/dev/null; then + defpager="less -R" +elif command -v more >/dev/null; then + defpager="more" +else + defpager="cat" +fi + +cmd_cd() { + if [ $# -eq 0 ]; then + section="" + else + new_section=$(echo "$input" | sed 's/cd *//; s@/*$@@; s@^/*@@') + if [ -z "$new_section" ] || [ ".." = "$new_section" ]; then + section="" + else + valid_sections=$(get_list_of_sections) + valid=no; for q in $valid_sections; do [ "$q" = "$new_section/" ] && { valid=yes; break; }; done + if [ "$valid" = no ]; then + echo "Invalid section: $new_section" + echo "Valid sections:" + echo "$valid_sections" \ + | xargs printf "%-10s\n" \ + | tr ' ' . \ + | xargs -n 10 \ + | sed 's/\./ /g; s/^/ /' + else + section="$new_section" + fi + fi + fi +} + +cmd_copy() { + if [ -z "$DISPLAY" ]; then + echo copy: supported only in the Desktop version + elif [ -z "$input" ]; then + echo copy: Make at least one query first. + else + curl -s "${CHTSH_URL}"/"$(get_query_options "$query"?T)" > "$TMP1" + if [ "$is_macos" != yes ]; then + if [ "$XDG_SESSION_TYPE" = wayland ]; then + wl-copy < "$TMP1" + else + xclip -sel c -i < "$TMP1" + fi + else + pbcopy < "$TMP1" + fi + echo "copy: $(wc -l "$TMP1" | awk '{print $1}') lines copied to the selection" + fi +} + +cmd_ccopy() { + if [ -z "$DISPLAY" ]; then + echo copy: supported only in the Desktop version + elif [ -z "$input" ]; then + echo copy: Make at least one query first. + else + curl -s "${CHTSH_URL}"/"$(get_query_options "$query"?TQ)" > "$TMP1" + if [ "$is_macos" != yes ]; then + if [ "$XDG_SESSION_TYPE" = wayland ]; then + wl-copy < "$TMP1" + else + xclip -sel c -i < "$TMP1" + fi + else + pbcopy < "$TMP1" + fi + echo "copy: $(wc -l "$TMP1" | awk '{print $1}') lines copied to the selection" + fi +} + +cmd_exit() { + exit 0 +} + +cmd_help() { + cat < python zip list + cht.sh/python> zip list + cht.sh/go> /python zip list +EOF +} + +cmd_hush() { + mkdir -p "$CHTSH_HOME/" && touch "$CHTSH_HOME/.hushlogin" && echo "Initial 'use help' message was disabled" +} + +cmd_id() { + id_file="$CHTSH_HOME/id" + + if [ id = "$input" ]; then + new_id="" + else + new_id=$(echo "$input" | sed 's/id *//; s/ *$//; s/ /+/g') + fi + if [ "$new_id" = remove ]; then + if [ -e "$id_file" ]; then + rm -f -- "$id_file" && echo "id is removed" + else + echo "id was not set, so you can't remove it" + fi + return + fi + if [ -n "$new_id" ] && [ reset != "$new_id" ] && [ "$(/bin/echo -n "$new_id" | wc -c)" -lt 16 ]; then + echo "ERROR: $new_id: Too short id. Minimal id length is 16. Use 'id reset' for a random id" + return + fi + if [ -z "$new_id" ]; then + # if new_id is not specified check if we have some id already + # if yes, just show it + # if not, generate a new id + if [ -e "$id_file" ]; then + awk '$6 == "id" {print $NF}' <"$id_file" | tail -n 1 + return + else + new_id=reset + fi + fi + if [ "$new_id" = reset ]; then + new_id=$(gen_random_str 12) + else + echo WARNING: if someone gueses your id, he can read your cht.sh search history + fi + if [ -e "$id_file" ] && grep -q '\tid\t[^\t][^\t]*$' "$id_file" 2> /dev/null; then + sed -i 's/\tid\t[^\t][^\t]*$/ id '"$new_id"'/' "$id_file" + else + if ! [ -e "$id_file" ]; then + printf '#\n\n' > "$id_file" + fi + printf ".cht.sh\tTRUE\t/\tTRUE\t0\tid\t$new_id\n" >> "$id_file" + fi + echo "$new_id" +} + +cmd_query() { + query=$(prepare_query "$section" "$input") + do_query "$query" +} + +cmd_stealth() { + if [ "$input" != stealth ]; then + arguments=$(echo "$input" | sed 's/stealth //; s/ /\&/') + fi + trap break INT + if [ "$is_macos" = yes ]; then + past=$(pbpaste) + else + if [ "$XDG_SESSION_TYPE" = wayland ]; then + past=$(wl-paste -p) + else + past=$(xclip -sel c -o) + fi + fi + printf "\033[0;31mstealth:\033[0m you are in the stealth mode; select any text in any window for a query\n" + printf "\033[0;31mstealth:\033[0m selections longer than $STEALTH_MAX_SELECTION_LENGTH words are ignored\n" + if [ -n "$arguments" ]; then + printf "\033[0;31mstealth:\033[0m query arguments: ?$arguments\n" + fi + printf "\033[0;31mstealth:\033[0m use ^C to leave this mode\n" + while true; do + if [ "$is_macos" = yes ]; then + current=$(pbpaste) + else + if [ "$XDG_SESSION_TYPE" = wayland ]; then + current=$(wl-paste -p) + else + current=$(xclip -sel c -o) + fi + fi + if [ "$past" != "$current" ]; then + past=$current + current_text="$(echo $current | tr -c '[a-zA-Z0-9]' ' ')" + if [ "$(echo "$current_text" | wc -w)" -gt "$STEALTH_MAX_SELECTION_LENGTH" ]; then + printf "\033[0;31mstealth:\033[0m selection length is longer than $STEALTH_MAX_SELECTION_LENGTH words; ignoring\n" + continue + else + printf "\n\033[0;31mstealth: \033[7m $current_text\033[0m\n" + query=$(prepare_query "$section" "$current_text" "$arguments") + do_query "$query" + fi + fi + sleep 1; + done + trap - INT +} + +cmd_update() { + [ -w "$0" ] || { echo "The script is readonly; please update manually: curl -s ${CHTSH_URL}/:cht.sh | sudo tee $0"; return; } + TMP2=$(mktemp /tmp/cht.sh.XXXXXXXXXXXXX) + curl -s "${CHTSH_URL}"/:cht.sh > "$TMP2" + if ! cmp "$0" "$TMP2" > /dev/null 2>&1; then + if grep -q ^__CHTSH_VERSION= "$TMP2"; then + # section was vaildated by us already + args=(--shell "$section") + cp "$TMP2" "$0" && echo "Updated. Restarting..." && rm "$TMP2" && CHEATSH_RESTART=1 exec "$0" "${args[@]}" + else + echo "Something went wrong. Please update manually" + fi + else + echo "cht.sh is up to date. No update needed" + fi + rm -f "$TMP2" > /dev/null 2>&1 +} + +cmd_version() { + insttime=$(ls -l -- "$0" | sed 's/ */ /g' | cut -d ' ' -f 6-8) + echo "cht.sh version $__CHTSH_VERSION of $__CHTSH_DATETIME; installed at: $insttime" + TMP2=$(mktemp /tmp/cht.sh.XXXXXXXXXXXXX) + if curl -s "${CHTSH_URL}"/:cht.sh > "$TMP2"; then + if ! cmp "$0" "$TMP2" > /dev/null 2>&1; then + echo "Update needed (type 'update' for that)". + else + echo "Up to date. No update needed" + fi + fi + rm -f "$TMP2" > /dev/null 2>&1 +} + +TMP1=$(mktemp /tmp/cht.sh.XXXXXXXXXXXXX) +trap 'rm -f $TMP1 $TMP2' EXIT +trap 'true' INT + +if ! [ -e "$CHTSH_HOME/.hushlogin" ] && [ -z "$this_query" ]; then + echo "type 'help' for the cht.sh shell help" +fi + +while true; do + if [ "$section" != "" ]; then + full_prompt="$prompt/$section> " + else + full_prompt="$prompt> " + fi + + input=$( + rlwrap -H "$CHTSH_HOME/history" -pgreen -C cht.sh -S "$full_prompt" bash "$0" --read | sed 's/ *#.*//' + ) + + cmd_name=${input%% *} + cmd_args=${input#* } + case $cmd_name in + "") continue;; # skip empty input lines + '?'|h|help) cmd_name=help;; + hush) cmd_name=hush;; + cd) cmd_name="cd";; + exit|quit) cmd_name="exit";; + copy|yank|c|y) cmd_name=copy;; + ccopy|cc|C|Y) cmd_name=ccopy;; + id) cmd_name=id;; + stealth) cmd_name=stealth;; + update) cmd_name=update;; + version) cmd_name=version;; + *) cmd_name="query"; cmd_args="$input";; + esac + "cmd_$cmd_name" $cmd_args +done diff --git a/bin/extra/colorscript b/bin/extra/colorscript new file mode 100755 index 0000000..90dacb1 --- /dev/null +++ b/bin/extra/colorscript @@ -0,0 +1,40 @@ +#!/bin/bash + +counter=0 +var1="$(seq 30 38)" +var2="$(seq 39 47)" +var3="$(seq 0 5) $(seq 7 9)" + + +echo +echo " ________________________________________________________" +echo " |" +echo -n " | " + +for j in $var2 +do + echo -ne "\e[0;37;${j}m ${j} \e[0m" +done + +echo +echo " |" +echo -n " |" + +for j in $var1 +do + echo -n " $j " +done + +echo +echo -n " |________________________________________________________" + +for k in $var3 +do + echo + echo -n "$k| " + for i in $var1 + do + echo -ne " \e[${k};${i}m[${i}]\e[0m " + done +done +echo diff --git a/bin/extra/cycleKB b/bin/extra/cycleKB new file mode 100755 index 0000000..5674786 --- /dev/null +++ b/bin/extra/cycleKB @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +keyboards_file="/home/aluc/bin/keyboards.txt" +cur_keyboard="$(setxkbmap -print | grep "xkb_symbols" | cut -f 2 -d "+")" +# Get line number of match +line="$(awk "/${cur_keyboard}/ {print NR}" "${keyboards_file}")" +lines="$(wc -l "${keyboards_file}" | cut -f 1 -d ' ')" +# cycle back to first line +[[ "$line" == "$lines" ]] && line=1 || ((line++)) +new_keyboard="$(sed -n "${line}p" "${keyboards_file}")" +setxkbmap "${new_keyboard}" +dunstify "cycleKB" "keyboard: ${new_keyboard}" diff --git a/bin/extra/ehbtodl b/bin/extra/ehbtodl new file mode 100755 index 0000000..39d8621 --- /dev/null +++ b/bin/extra/ehbtodl @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +echo "$1" | sed 's/-H/\\\n\t&/g' | sed '/gzip/d' > /tmp/curlcommand.sh +sh /tmp/curlcommand.sh > /tmp/ehbso.html +vids="$(grep -oE "youtube\.com/embed/.{11}" /tmp/ehbso.html | cut -d'/' -f 3 | tr '\n' ' ')" +for i in $vids +do + echo "https://www.youtube.com/watch?v=$i" +done > /tmp/todownload +# yt-dlp -P "$HOME/Downloads/vids" -o "%(title)s" -a /tmp/todownload diff --git a/bin/extra/keyboards.txt b/bin/extra/keyboards.txt new file mode 100644 index 0000000..03ec74b --- /dev/null +++ b/bin/extra/keyboards.txt @@ -0,0 +1,2 @@ +be +us diff --git a/bin/extra/vimastp b/bin/extra/vimastp new file mode 100755 index 0000000..f4ae6b5 --- /dev/null +++ b/bin/extra/vimastp @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +for var in name vcpus memory cdrom disk_size osinfo +do + read -p "${var}:" "$var" +done +echo "virt-install --name=$name \ +--vcpus ${vcpus:-4} \ +--memory ${memory:-4096} \ +--cdrom ${cdrom} \ +--disk size=${disk_size-30},pool=VMs \ +--osinfo ${osinfo:-detect=on}\ +--boot cdrom,hd,network" -- cgit v1.2.3