hyprdots

my dotfiles for hyprland
git clone https://git.awy.one/hyprdots.git
Log | Files | Refs | README | LICENSE

commit 01b4fdce614811ede534bafbc1e7d884a327bbb1
Author: awy <awy@awy.one>
Date:   Sun, 16 Mar 2025 19:33:19 +0300

update

Diffstat:
A.config/btop/btop.conf | 5+++++
A.config/cmus/nord.theme | 71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/cmus/rc | 1+
A.config/dunst/dunstrc | 28++++++++++++++++++++++++++++
A.config/fastfetch/config.jsonc | 39+++++++++++++++++++++++++++++++++++++++
A.config/fontconfig/fonts.conf | 40++++++++++++++++++++++++++++++++++++++++
A.config/foot/foot.ini | 45+++++++++++++++++++++++++++++++++++++++++++++
A.config/hypr/hyprland.conf | 225+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/mimeapps.list | 20++++++++++++++++++++
A.config/mpv/input.conf | 5+++++
A.config/mpv/mpv.conf | 10++++++++++
A.config/newsboat/config | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/paru/paru.conf | 2++
A.config/pipewire/pipewire.conf.d/pipewire.conf | 14++++++++++++++
A.config/pipewire/pipewire.conf.d/user-session.conf | 4++++
A.config/python/pythonrc | 2++
A.config/shell/aliasrc | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/shell/bm-dirs | 14++++++++++++++
A.config/shell/bm-files | 23+++++++++++++++++++++++
A.config/shell/inputrc | 19+++++++++++++++++++
A.config/shell/profile | 98+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/user-dirs.dirs | 1+
A.config/vesktop/themes/nord.css | 14++++++++++++++
A.config/waybar/config | 166+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/waybar/style.css | 36++++++++++++++++++++++++++++++++++++
A.config/wget/wgetrc | 1+
A.config/yazi/yazi.toml | 2++
A.config/zathura/zathurarc | 25+++++++++++++++++++++++++
A.config/zsh/.zshrc | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/bookmarks | 142+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/booksplit | 43+++++++++++++++++++++++++++++++++++++++++++
A.local/bin/compiler | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/cron/README.md | 11+++++++++++
A.local/bin/cron/checkup | 21+++++++++++++++++++++
A.local/bin/cron/crontog | 6++++++
A.local/bin/cron/newsup | 18++++++++++++++++++
A.local/bin/displayselect | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/dmenuhandler | 21+++++++++++++++++++++
A.local/bin/dmenumountcifs | 19+++++++++++++++++++
A.local/bin/dmenupass | 6++++++
A.local/bin/dmenurecord | 113+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/dmenuunicode | 18++++++++++++++++++
A.local/bin/getbib | 14++++++++++++++
A.local/bin/getcomproot | 9+++++++++
A.local/bin/getkeys | 5+++++
A.local/bin/ifinstalled | 12++++++++++++
A.local/bin/linkhandler | 26++++++++++++++++++++++++++
A.local/bin/maimpick | 24++++++++++++++++++++++++
A.local/bin/mounter | 119+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/noisereduce | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/opout | 13+++++++++++++
A.local/bin/pauseallmpv | 10++++++++++
A.local/bin/peertubetorrent | 9+++++++++
A.local/bin/podentr | 7+++++++
A.local/bin/portal | 7+++++++
A.local/bin/qndl | 12++++++++++++
A.local/bin/queueandnotify | 14++++++++++++++
A.local/bin/remapd | 8++++++++
A.local/bin/remaps | 11+++++++++++
A.local/bin/rotdir | 12++++++++++++
A.local/bin/rssadd | 18++++++++++++++++++
A.local/bin/sd | 22++++++++++++++++++++++
A.local/bin/setbg | 43+++++++++++++++++++++++++++++++++++++++++++
A.local/bin/shortcuts | 45+++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/singboxwrap | 30++++++++++++++++++++++++++++++
A.local/bin/slider | 126+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/start-pipewire | 5+++++
A.local/bin/statusbar/sb-battery | 37+++++++++++++++++++++++++++++++++++++
A.local/bin/statusbar/sb-brightness | 23+++++++++++++++++++++++
A.local/bin/statusbar/sb-clock | 29+++++++++++++++++++++++++++++
A.local/bin/statusbar/sb-cpu | 12++++++++++++
A.local/bin/statusbar/sb-cpubars | 44++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/statusbar/sb-disk | 23+++++++++++++++++++++++
A.local/bin/statusbar/sb-doppler | 280+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/statusbar/sb-forecast | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/statusbar/sb-internet | 33+++++++++++++++++++++++++++++++++
A.local/bin/statusbar/sb-iplocate | 15+++++++++++++++
A.local/bin/statusbar/sb-kbselect | 17+++++++++++++++++
A.local/bin/statusbar/sb-mailbox | 20++++++++++++++++++++
A.local/bin/statusbar/sb-memory | 12++++++++++++
A.local/bin/statusbar/sb-microphone | 39+++++++++++++++++++++++++++++++++++++++
A.local/bin/statusbar/sb-moonphase | 37+++++++++++++++++++++++++++++++++++++
A.local/bin/statusbar/sb-mpdup | 8++++++++
A.local/bin/statusbar/sb-music | 19+++++++++++++++++++
A.local/bin/statusbar/sb-nettraf | 29+++++++++++++++++++++++++++++
A.local/bin/statusbar/sb-news | 17+++++++++++++++++
A.local/bin/statusbar/sb-pacpackages | 29+++++++++++++++++++++++++++++
A.local/bin/statusbar/sb-popupgrade | 9+++++++++
A.local/bin/statusbar/sb-price | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/statusbar/sb-tasks | 20++++++++++++++++++++
A.local/bin/statusbar/sb-torrent | 27+++++++++++++++++++++++++++
A.local/bin/statusbar/sb-volume | 39+++++++++++++++++++++++++++++++++++++++
A.local/bin/sysact | 26++++++++++++++++++++++++++
A.local/bin/tag | 49+++++++++++++++++++++++++++++++++++++++++++++++++
A.local/bin/td-toggle | 12++++++++++++
A.local/bin/texclear | 9+++++++++
A.local/bin/torwrap | 7+++++++
A.local/bin/transadd | 9+++++++++
A.local/bin/unix | 26++++++++++++++++++++++++++
A.local/bin/unmounter | 28++++++++++++++++++++++++++++
A.local/bin/weath | 25+++++++++++++++++++++++++
A.local/bin/xdg-terminal-exec | 3+++
A.local/share/applications/file.desktop | 4++++
A.local/share/applications/img.desktop | 4++++
A.local/share/applications/mail.desktop | 4++++
A.local/share/applications/pdf.desktop | 4++++
A.local/share/applications/rss.desktop | 4++++
A.local/share/applications/text.desktop | 4++++
A.local/share/applications/torrent.desktop | 4++++
A.local/share/applications/video.desktop | 4++++
A.local/share/bg | 2++
A.local/share/larbs/chars/emoji | 1630+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/share/larbs/chars/font-awesome | 1456+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/share/larbs/emoji | 1630+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.local/share/larbs/getkeys/calcurse | 10++++++++++
A.local/share/larbs/getkeys/mutt | 34++++++++++++++++++++++++++++++++++
A.local/share/larbs/getkeys/ncmpcpp | 21+++++++++++++++++++++
A.local/share/larbs/getkeys/newsboat | 22++++++++++++++++++++++
A.local/share/larbs/getkeys/nsxiv | 14++++++++++++++
A.local/share/larbs/getkeys/zathura | 19+++++++++++++++++++
A.local/share/larbs/ttymaps.kmap | 2++
A.local/share/thiemeyer_road_to_samarkand.jpg | 0
A.zprofile | 2++
AREADME.md | 4++++
Aaurdeps.txt | 6++++++
Adependencies.txt | 86+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Arice.sh | 178+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
127 files changed, 8621 insertions(+), 0 deletions(-)

diff --git a/.config/btop/btop.conf b/.config/btop/btop.conf @@ -0,0 +1,5 @@ +color_theme = "/usr/share/btop/themes/nord.theme" +theme_background = False +vim_keys = True +rounded_corners = False +proc_sorting = "memory" diff --git a/.config/cmus/nord.theme b/.config/cmus/nord.theme @@ -0,0 +1,71 @@ +# --- for a chart of the 255 available colors see: -- # +# +# https://unix.stackexchange.com/questions/105568/how-can-i-list-the-available-color-names +# +# whichever variable is set to 130 is something that I don't know much about +# and didn't seem to have an effect on the outcome +# +# --- with love by: ShrekhavingabadDay -- # + +### colors +### {{{ + +# where you type your commands +set color_cmdline_fg=253 +set color_cmdline_bg=232 + +# the vertical line on the main window +set color_separator=232 + +# this displays how much time there is left from the song +set color_statusline_bg=232 +set color_statusline_fg=6 + +# the songs title is displayed here +set color_titleline_bg=232 +set color_titleline_fg=4 + +# the colors of the main window +set color_win_bg=default +set color_win_fg=130 + +# color of the active entries when not selected +set color_win_cur=white + +# maybe sets the colors of a different layout? +set color_win_dir=130 + +# color of the inactive songnames +set color_win_fg=4 + +### ---- settings for the INACTIVE window ---- ### + +# the played entries colors when selected +set color_win_inactive_cur_sel_bg=235 +set color_win_inactive_cur_sel_fg=white + +# the inactive entries colors when selected +set color_win_inactive_sel_bg=235 +set color_win_inactive_sel_fg=250 + +### ---- settings for the ACTIVE window ---- ### + +# the played entries color when selected +set color_win_cur_sel_bg=232 +set color_win_cur_sel_fg=white + +# the inactive entries color when selected +set color_win_sel_bg=232 +set color_win_sel_fg=250 + +# --- END -- # + +# these set the colors of the titlebar at the top of the window +set color_win_title_bg=232 +set color_win_title_fg=4 + +# textcolor in commandbar (error(red) and info(green)) +set color_error=52 +set color_info=29 + +### }}} diff --git a/.config/cmus/rc b/.config/cmus/rc @@ -0,0 +1 @@ +colorscheme nord diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc @@ -0,0 +1,28 @@ +[global] + monitor = 0 + follow = keyboard + width = 400 + height = 400 + offset = 10x10 + padding = 2 + horizontal_padding = 2 + transparency = 25 + font = monospace 14 + format = "<b>%s</b>\n%b" + +[urgency_low] + background = "#2e3440" + foreground = "#d8dee9" + timeout = 3 + +[urgency_normal] + background = "#2e3440" + foreground = "#d8dee9" + frame_color = "#5e81ac" + timeout = 5 + +[urgency_critical] + background = "#2e3440" + foreground = "#d8dee9" + frame_color = "#5e81ac" + timeout = 10 diff --git a/.config/fastfetch/config.jsonc b/.config/fastfetch/config.jsonc @@ -0,0 +1,39 @@ +{ + "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json", + "logo": { + "type": "small" + }, + "modules": [ + { + "type": "os", + "key": "os", + "keyColor": "red" + }, + { + "type": "kernel", + "key": "kernel", + "keyColor": "yellow" + }, + { + "type": "shell", + "key": "shell", + "keyColor": "green" + }, + { + "type": "packages", + "key": "packages", + "keyColor": "cyan" + }, + { + "type": "wm", + "key": "wm", + "keyColor": "blue" + }, + { + "type": "memory", + "key": "memory", + "keyColor": "magenta" + }, + "break" + ] +} diff --git a/.config/fontconfig/fonts.conf b/.config/fontconfig/fonts.conf @@ -0,0 +1,40 @@ +<?xml version='1.0'?> +<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'> +<fontconfig> + <alias> + <family>serif</family> + <prefer> + <family>SourceSerif</family> + <family>Noto Color Emoji</family> + <family>FontAwesome</family> + <family>SymbolsNerdFont</family> + </prefer> + </alias> + <alias> + <family>sans-serif</family> + <prefer> + <family>SourceSans</family> + <family>Noto Color Emoji</family> + <family>FontAwesome</family> + <family>SymbolsNerdFont</family> + </prefer> + </alias> + <alias> + <family>sans</family> + <prefer> + <family>SourceSans</family> + <family>Noto Color Emoji</family> + <family>FontAwesome</family> + <family>SymbolsNerdFont</family> + </prefer> + </alias> + <alias> + <family>monospace</family> + <prefer> + <family>SauceCodePro Nerd Font Propo</family> + <family>FontAwesome</family> + <family>SymbolsNerdFont</family> + <family>Noto Color Emoji</family> + </prefer> + </alias> +</fontconfig> diff --git a/.config/foot/foot.ini b/.config/foot/foot.ini @@ -0,0 +1,45 @@ +font=monospace:size=14 +font-size-adjustment=3 + +[cursor] +style=beam +color = 2e3440 d8dee9 + +[colors] +alpha = 0.8 +foreground = d8dee9 +background = 2e3440 + +# selection-foreground = d8dee9 +# selection-background = 4c566a + +regular0 = 3b4252 +regular1 = bf616a +regular2 = a3be8c +regular3 = ebcb8b +regular4 = 81a1c1 +regular5 = b48ead +regular6 = 88c0d0 +regular7 = e5e9f0 + +bright0 = 4c566a +bright1 = bf616a +bright2 = a3be8c +bright3 = ebcb8b +bright4 = 81a1c1 +bright5 = b48ead +bright6 = 8fbcbb +bright7 = eceff4 + +dim0 = 373e4d +dim1 = 94545d +dim2 = 809575 +dim3 = b29e75 +dim4 = 68809a +dim5 = 8c738c +dim6 = 6d96a5 +dim7 = aeb3bb + +#[key-bindings] +#clipboard-copy=alt+c +#clipboard-paste=alt+v diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf @@ -0,0 +1,225 @@ +monitor=,preferred,auto,auto +monitor = DP-3, 3840x2160@165, 0x0, 1, bitdepth, 10 +# monitor = DP-3, 3840x2160@165, 0x0, 1 +monitor = DP-2, 2560x1440@165, -2560x720, 1 + +$terminal = foot + +exec-once = dbus-update-activation-environment --all +exec-once = start-pipewire +exec-once = portal +exec-once = singboxwrap +exec-once = dunst +exec-once = gpg-agent --daemon +exec-once = gnome-keyring-daemon --start --components=secrets +exec-once = foot --server +exec-once = setbg /mnt/ssd/papes/ +exec-once = waybar + +env = XCURSOR_SIZE,24 +env = HYPRCURSOR_SIZE,24 +env = ENABLE_HDR_WSI,1 + +general { + gaps_in = 5 + gaps_out = 10 + + border_size = 3 + + col.active_border = rgb(5e81ac) + col.inactive_border = rgba(595959aa) + + resize_on_border = false + + allow_tearing = false + + layout = dwindle +} + +decoration { + rounding = 0 + rounding_power = 2 + + + active_opacity = 1.0 + inactive_opacity = 1.0 + + shadow { + enabled = false + range = 4 + render_power = 3 + color = rgba(1a1a1aee) + } + + + blur { + enabled = false + size = 3 + passes = 1 + + vibrancy = 0.1696 + } +} + + +animations { + enabled = false + bezier = easeOutQuint,0.23,1,0.32,1 + bezier = easeInOutCubic,0.65,0.05,0.36,1 + bezier = linear,0,0,1,1 + bezier = almostLinear,0.5,0.5,0.75,1.0 + bezier = quick,0.15,0,0.1,1 + animation = global, 1, 10, default + animation = border, 1, 5.39, easeOutQuint + animation = windows, 1, 4.79, easeOutQuint + animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% + animation = windowsOut, 1, 1.49, linear, popin 87% + animation = fadeIn, 1, 1.73, almostLinear + animation = fadeOut, 1, 1.46, almostLinear + animation = fade, 1, 3.03, quick + animation = layers, 1, 3.81, easeOutQuint + animation = layersIn, 1, 4, default, popin 87% + animation = layersOut, 1, 1.5, linear, fade + animation = fadeLayersIn, 1, 1.79, almostLinear + animation = fadeLayersOut, 1, 1.39, almostLinear + animation = workspaces, 1, 4, quick, slidevert +} + +dwindle { + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # You probably want this +} + +master { + new_status = master +} + +misc { + force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( + enable_swallow = 1 + swallow_regex = ^(foot)$ +} + +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + force_no_accel = 1 + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + repeat_rate=45 + repeat_delay=300 + + touchpad { + natural_scroll = false + } +} + +gestures { + workspace_swipe = false +} + +$mainMod = SUPER # Sets "Windows" key as main modifier + +bind = $mainMod, Return, exec, $terminal +bind = $mainMod, Q, killactive, +bind = $mainMod, W, exec, librewolf +bind = $mainMod, R, exec, $terminal -e yazi +bind = $mainMod SHIFT, D, exec, tessen +bind = $mainMod, V, togglefloating, +bind = $mainMod, D, exec, bemenu-run +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, Grave, exec, bookmarks +bind = $mainMod SHIFT, J, togglesplit, # dwindle +bind = $mainMod, F, fullscreen, +bind = $mainMod SHIFT, Return, swapnext +bind = , Print, exec, grim pic-full-$(date '+%y%m%d-%H%M-%S').png +bind = SHIFT, Print, exec, maimpick +bind = $mainMod, Print, exec, dmenurecord +bind = $mainMod SHIFT, Print, exec, dmenurecord kill +bind = $mainMod, E, exec, $terminal neomutt; pkill -RTMIN+12 waybar +bind = $mainMod SHIFT, N, exec, $terminal newsboat; pkill -RTMIN+6 waybar +bind = $mainMod SHIFT, R, exec, $terminal -e btop +bind = $mainMod, M, exec, $terminal -e cmus +bind =,XF86AudioPlay, exec, playerctl play-pause +bind =,XF86AudioPrev, exec, playerctl previous +bind =,XF86AudioNext, exec, playerctl next +bind =,mouse:276, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle && pkill -RTMIN+23 waybar +bind = $mainMod, minus, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-; pkill -RTMIN+10 waybar +bind = $mainMod SHIFT, minus, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 15%-; pkill -RTMIN+10 waybar +bind = $mainMod, equal, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+; pkill -RTMIN+10 waybar +bind = $mainMod SHIFT, equal, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 15%+; pkill -RTMIN+10 waybar +bind = $mainMod SHIFT, M, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle; pkill -RTMIN+10 waybar + +bind = $mainMod, F1, exec, singboxwrap menu +bind = $mainMod, F4, exec, $terminal -e pulsemixer; pkill -RTMIN+10 waybar; pkill -RTMIN+23 waybar +bind = $mainMod, F6, exec, torwrap +bind = $mainMod, F7, exec, td-toggle +bind = $mainMod, F8, exec, mailsync; pkill -RTMIN+12 waybar +bind = $mainMod, F9, exec, mounter +bind = $mainMod, F10, exec, unmounter + +bind = $mainMod SHIFT, Q, exec, sysact + +bind = $mainMod, L, resizeactive, 100 0 +bind = $mainMod, H, resizeactive, -100 0 + +bind = $mainMod, J, cyclenext, prev +bind = $mainMod, K, cyclenext + +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +#bind = $mainMod, S, togglespecialworkspace, magic +#bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +windowrulev2 = suppressevent maximize, class:.* + +windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 + +workspace = 1, monitor:DP-2 +workspace = 2, monitor:DP-2 +workspace = 3, monitor:DP-3 +workspace = 4, monitor:DP-3 + +experimental { + xx_color_management_v4 = true +} + +xwayland { + force_zero_scaling = true +} + +ecosystem { + no_update_news = true +} diff --git a/.config/mimeapps.list b/.config/mimeapps.list @@ -0,0 +1,20 @@ +[Default Applications] + +# xdg-open will use these settings to determine how to open filetypes. +# These .desktop entries can also be seen and changed in ~/.local/share/applications/ + +text/x-shellscript=text.desktop; +x-scheme-handler/magnet=torrent.desktop; +application/x-bittorrent=torrent.desktop; +x-scheme-handler/mailto=mail.desktop; +text/plain=text.desktop; +application/postscript=pdf.desktop; +application/pdf=pdf.desktop; +image/png=img.desktop; +image/jpeg=img.desktop; +image/gif=img.desktop; +application/rss+xml=rss.desktop +video/x-matroska=video.desktop +video/mp4=video.desktop +x-scheme-handler/lbry=lbry.desktop +inode/directory=file.desktop diff --git a/.config/mpv/input.conf b/.config/mpv/input.conf @@ -0,0 +1,5 @@ +l seek 5 +h seek -5 +j seek -60 +k seek 60 +S cycle sub diff --git a/.config/mpv/mpv.conf b/.config/mpv/mpv.conf @@ -0,0 +1,10 @@ +# optimizations +vo=gpu-next +gpu-api=vulkan +gpu-context=waylandvk +hwdec=auto +target-colorspace-hint=yes + +# uosc +osd-bar=no +border=no diff --git a/.config/newsboat/config b/.config/newsboat/config @@ -0,0 +1,55 @@ +#show-read-feeds no +auto-reload yes + +external-url-viewer "urlscan -dc -r 'linkhandler {}'" + +bind-key j down +bind-key k up +bind-key j next articlelist +bind-key k prev articlelist +bind-key J next-feed articlelist +bind-key K prev-feed articlelist +bind-key G end +bind-key g home +bind-key d pagedown +bind-key u pageup +bind-key l open +bind-key h quit +bind-key a toggle-article-read +bind-key n next-unread +bind-key N prev-unread +bind-key D pb-download +bind-key U show-urls +bind-key x pb-delete + +color listnormal cyan default +color listfocus black yellow standout bold +color listnormal_unread blue default +color listfocus_unread yellow default bold +color info red black bold +color article white default bold + +browser linkhandler +macro , open-in-browser +macro t set browser "qndl" ; open-in-browser ; set browser linkhandler +macro a set browser "tsp yt-dlp --embed-metadata -xic -f bestaudio/best --restrict-filenames" ; open-in-browser ; set browser linkhandler +macro v set browser "setsid -f mpv" ; open-in-browser ; set browser linkhandler +macro w set browser "lynx" ; open-in-browser ; set browser linkhandler +macro d set browser "dmenuhandler" ; open-in-browser ; set browser linkhandler +macro c set browser "echo %u | xclip -r -sel c" ; open-in-browser ; set browser linkhandler +macro C set browser "youtube-viewer --comments=%u" ; open-in-browser ; set browser linkhandler +macro p set browser "peertubetorrent %u 480" ; open-in-browser ; set browser linkhandler +macro P set browser "peertubetorrent %u 1080" ; open-in-browser ; set browser linkhandler + +highlight all "---.*---" yellow +highlight feedlist ".*(0/0))" black +highlight article "(^Feed:.*|^Title:.*|^Author:.*)" cyan default bold +highlight article "(^Link:.*|^Date:.*)" default default +highlight article "https?://[^ ]+" green default +highlight article "^(Title):.*$" blue default +highlight article "\\[[0-9][0-9]*\\]" magenta default bold +highlight article "\\[image\\ [0-9]+\\]" green default bold +highlight article "\\[embedded flash: [0-9][0-9]*\\]" green default bold +highlight article ":.*\\(link\\)$" cyan default +highlight article ":.*\\(image\\)$" blue default +highlight article ":.*\\(embedded flash\\)$" magenta default diff --git a/.config/paru/paru.conf b/.config/paru/paru.conf @@ -0,0 +1,2 @@ +[bin] +Sudo = /bin/doas diff --git a/.config/pipewire/pipewire.conf.d/pipewire.conf b/.config/pipewire/pipewire.conf.d/pipewire.conf @@ -0,0 +1,14 @@ +context.properties = { + link.max-buffers = 16 # version < 3 clients can't handle more + + + core.daemon = true # listening for socket connections + core.name = pipewire-0 # core name and socket name + + default.clock.rate = 192000 + default.clock.allowed-rates = [ 48000 192000 ] + + module.x11.bell = true + module.access = true + module.jackdbus-detect = true +} diff --git a/.config/pipewire/pipewire.conf.d/user-session.conf b/.config/pipewire/pipewire.conf.d/user-session.conf @@ -0,0 +1,4 @@ +context.exec = [ + { path = "/usr/bin/wireplumber" args = "" condition = [ { exec.session-manager = null } { exec.session-manager = true } ] } + { path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" condition = [ { exec.pipewire-pulse = null } { exec.pipewire-pulse = true } ] } +] diff --git a/.config/python/pythonrc b/.config/python/pythonrc @@ -0,0 +1,2 @@ +import readline +readline.write_history_file = lambda *args: None diff --git a/.config/shell/aliasrc b/.config/shell/aliasrc @@ -0,0 +1,57 @@ +#!/bin/sh + +# Use neovim for vim if present. +[ -x "$(command -v nvim)" ] && alias vim="nvim" vimdiff="nvim -d" + +# Use $XINITRC variable if file exists. +[ -f "$XINITRC" ] && alias startx="startx $XINITRC" + +[ -f "$MBSYNCRC" ] && alias mbsync="mbsync -c $MBSYNCRC" + +# doas not required for some system commands +for command in mount umount dinitctl pacman updatedb su shutdown poweroff reboot ; do + alias $command="doas $command" +done; unset command + +se() { + choice="$(find ~/.local/bin -mindepth 1 -printf '%P\n' | fzf)" + [ -f "$HOME/.local/bin/$choice" ] && $EDITOR "$HOME/.local/bin/$choice" + } + +# Verbosity and settings that you pretty much just always are going to want. +alias \ + cp="cp -iv" \ + mv="mv -iv" \ + rm="rm -vI" \ + bc="bc -ql" \ + rsync="rsync -vrPlu" \ + mkd="mkdir -pv" \ + yt="yt-dlp --embed-metadata -i" \ + yta="yt -x -f bestaudio/best" \ + ytt="yt --skip-download --write-thumbnail" \ + ffmpeg="ffmpeg -hide_banner" + +# Colorize commands when possible. +alias \ + ls="ls -hN --color=auto --group-directories-first" \ + grep="grep --color=auto" \ + diff="diff --color=auto" \ + ccat="highlight --out-format=ansi" \ + ip="ip -color=auto" + +# These common commands are just too long! Abbreviate them. +alias \ + ka="killall" \ + g="git" \ + trem="transmission-remote" \ + YT="youtube-viewer" \ + sdn="shutdown -h now" \ + e="$EDITOR" \ + v="$EDITOR" \ + p="pacman" \ + z="zathura" + +alias \ + lf="lfub" \ + magit="nvim -c MagitOnly" \ + ref="shortcuts >/dev/null; source ${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc ; source ${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutenvrc ; source ${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" diff --git a/.config/shell/bm-dirs b/.config/shell/bm-dirs @@ -0,0 +1,14 @@ +# You can add comments to these files with # +cac ${XDG_CACHE_HOME:-$HOME/.cache} +cf ${XDG_CONFIG_HOME:-$HOME/.config} +D ${XDG_DOWNLOAD_DIR:-$HOME/Downloads} +d ${XDG_DOCUMENTS_DIR:-$HOME/Documents} +dt ${XDG_DATA_HOME:-$HOME/.local/share} +rr $HOME/.local/src +h $HOME +m ${XDG_MUSIC_DIR:-$HOME/Music} +mn /mnt +pp ${XDG_PICTURES_DIR:-$HOME/Pictures} +sc $HOME/.local/bin +src $HOME/.local/src +vv ${XDG_VIDEOS_DIR:-$HOME/Videos} diff --git a/.config/shell/bm-files b/.config/shell/bm-files @@ -0,0 +1,23 @@ +# These files automatically update when edited/saved in vim: + +# keys filename description +bf ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-files # This file, a list of bookmarked files +bd ${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs # A list of bookmarked directories similar to this file +cfx ${XDG_CONFIG_HOME:-$HOME/.config}/x11/xresources # Colors, themes and variables for X11 +cfb ~/.local/src/dwmblocks/config.h # dwmblocks: the status bar for dwm + + +# These do not update automatically, but on the next new instance of a program: + +cfv ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/init.vim # vim/neovim config +cfz $ZDOTDIR/.zshrc # zsh (shell) config +cfa ${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc # aliases used by zsh (and potentially other shells) +cfp ${XDG_CONFIG_HOME:-$HOME/.config}/shell/profile # profile file for login settings for zsh +cfm ${XDG_CONFIG_HOME:-$HOME/.config}/mutt/muttrc # mutt (email client) config +cfn ${XDG_CONFIG_HOME:-$HOME/.config}/newsboat/config # newsboat (RSS reader) +cfu ${XDG_CONFIG_HOME:-$HOME/.config}/newsboat/urls # RSS urls for newsboat +cfmb ${XDG_CONFIG_HOME:-$HOME/.config}/ncmpcpp/bindings # ncmpcpp (music player) keybinds file +cfmc ${XDG_CONFIG_HOME:-$HOME/.config}/ncmpcpp/config # ncmpcpp (music player) config +cfl ${XDG_CONFIG_HOME:-$HOME/.config}/lf/lfrc # lf (file browser) config +cfL ${XDG_CONFIG_HOME:-$HOME/.config}/lf/scope # lf's scope/preview file +cfX ${XDG_CONFIG_HOME:-$HOME/.config}/nsxiv/exec/key-handler # nsxiv (image viewer) key/script handler diff --git a/.config/shell/inputrc b/.config/shell/inputrc @@ -0,0 +1,19 @@ +$include /etc/inputrc +set editing-mode vi +$if mode=vi + +set show-mode-in-prompt on +set vi-ins-mode-string \1\e[6 q\2 +set vi-cmd-mode-string \1\e[2 q\2 + +set keymap vi-command +# these are for vi-command mode +Control-l: clear-screen +Control-a: beginning-of-line + +set keymap vi-insert +# these are for vi-insert mode +Control-l: clear-screen +Control-a: beginning-of-line + +$endif diff --git a/.config/shell/profile b/.config/shell/profile @@ -0,0 +1,98 @@ +#!/bin/sh +# shellcheck disable=SC2155 + +# Profile file, runs on login. Environmental variables are set here. + +# Add all directories in `~/.local/bin` to $PATH +export PATH="$PATH:$(find ~/.local/bin -type d | paste -sd ':' -)" + +unsetopt PROMPT_SP 2>/dev/null + +# Default programs: +export EDITOR="nvim" +export MANPAGER='nvim +Man!' +export TERMINAL="foot" +export TERMINAL_PROG="foot" +export BROWSER="librewolf" + +unset SSH_AGENT_PID +if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then + export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" +fi + +# Change the default crypto/weather monitor sites. +# export CRYPTOURL="rate.sx" +# export WTTRURL="wttr.in" + +# ~/ Clean-up: +export XDG_CONFIG_HOME="$HOME/.config" +export XDG_DATA_HOME="$HOME/.local/share" +export XDG_CACHE_HOME="$HOME/.cache" +export XDG_STATE_HOME="$HOME/.local/state" +export NOTMUCH_CONFIG="$XDG_CONFIG_HOME/notmuch-config" +export WGETRC="$XDG_CONFIG_HOME/wget/wgetrc" +export INPUTRC="$XDG_CONFIG_HOME/shell/inputrc" +export ZDOTDIR="$XDG_CONFIG_HOME/zsh" +#export GNUPGHOME="$XDG_DATA_HOME/gnupg" +export WINEPREFIX="$XDG_DATA_HOME/wineprefixes/default" +export KODI_DATA="$XDG_DATA_HOME/kodi" +export PASSWORD_STORE_DIR="$XDG_DATA_HOME/password-store" +export TMUX_TMPDIR="$XDG_RUNTIME_DIR" +export ANDROID_SDK_HOME="$XDG_CONFIG_HOME/android" +export CARGO_HOME="$XDG_DATA_HOME/cargo" +export GOPATH="$XDG_DATA_HOME/go" +export GOMODCACHE="$XDG_CACHE_HOME/go/mod" +export ANSIBLE_CONFIG="$XDG_CONFIG_HOME/ansible/ansible.cfg" +export UNISON="$XDG_DATA_HOME/unison" +export HISTFILE="$XDG_DATA_HOME/history" +export MBSYNCRC="$XDG_CONFIG_HOME/mbsync/config" +export ELECTRUMDIR="$XDG_DATA_HOME/electrum" +export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc" +export SQLITE_HISTORY="$XDG_DATA_HOME/sqlite_history" +export GIT_CONFIG="$XDG_CONFIG_HOME/git/config" +export NPM_CONFIG_USERCONFIG="$XDG_CONFIG_HOME/npm/npmrc" +export CUDA_CACHE_PATH="$XDG_CACHE_HOME/nv" +export KUBECONFIG="$XDG_CONFIG_HOME/kube" +export KUBECACHEDIR="$XDG_CACHE_HOME/kube" +export DOCKER_CONFIG="$XDG_CONFIG_HOME/docker" +export PASSWORD_STORE_CLIP_TIME=5 + +# Other program settings: +export DICS="/usr/share/stardict/dic/" +export SUDO_ASKPASS="$HOME/.local/bin/dmenupass" +export LESS="R" +export LESS_TERMCAP_mb="$(printf '%b' '')" +export LESS_TERMCAP_md="$(printf '%b' '')" +export LESS_TERMCAP_me="$(printf '%b' '')" +export LESS_TERMCAP_so="$(printf '%b' '')" +export LESS_TERMCAP_se="$(printf '%b' '')" +export LESS_TERMCAP_us="$(printf '%b' '')" +export LESS_TERMCAP_ue="$(printf '%b' '')" +export LESSOPEN="| /usr/bin/highlight -O ansi %s 2>/dev/null" +export QT_QPA_PLATFORMTHEME="gtk3" # Have QT use gtk3 theme. +export MOZ_USE_XINPUT2=1 # Mozilla smooth scrolling/touchpads. +export AWT_TOOLKIT="MToolkit wmname LG3D" # May have to install wmname +export _JAVA_AWT_WM_NONREPARENTING=1 # Fix for Java applications in dwm +export LIBVA_DRIVER_NAME=nvidia +export __GLX_VENDOR_LIBRARY_NAME=nvidia +export MOZ_DISABLE_RDD_SANDBOX=1 # For HW in Firefox on nvidia gpu +export __GL_THREADED_OPTIMIZATIONS=0 # Minecraft GLFW fix on nvidia gpu +export ELECTRON_OZONE_PLATFORM_HINT=auto # Electron fix +export QT_WAYLAND_DISABLE_WINDOWDECORATION=1 # Disables decorations for QT applications +export BEMENU_OPTS=\ +"--fb \"#2e3440\" --ff \"#d8dee9\" --nb \"#2e3440\" \ +--nf \"#d8dee9\" --tb \"#2e3440\" --hb \"#2e3440\" \ +--tf \"#bf616a\" --hf \"#ebcb8b\" --af \"d8dee9\" \ +--ab \"#2e3440\" --fn \"monospace 14\"" +export FZF_DEFAULT_OPTS=\ +"--layout=reverse --height 40% \ +--color=fg:#e5e9f0,bg:-1,hl:#81a1c1 \ +--color=fg+:#e5e9f0,bg+:#3b4252,hl+:#81a1c1 \ +--color=info:#eacb8a,prompt:#bf6069,pointer:#b48dac \ +--color=marker:#a3be8b,spinner:#b48dac,header:#a3be8b" +export YT_X_FZF_OPTS="$FZF_DEFAULT_OPTS" + +[ ! -f "$XDG_CONFIG_HOME/shell/shortcutrc" ] && setsid -f shortcuts >/dev/null 2>&1 + +# Start graphical server on user's current tty if not already running. +[ "$(tty)" = "/dev/tty1" ] && ! pidof -s Hyprland >/dev/null 2>&1 && exec dbus-launch --exit-with-session Hyprland diff --git a/.config/user-dirs.dirs b/.config/user-dirs.dirs @@ -0,0 +1 @@ +XDG_DESKTOP_DIR="$HOME/" diff --git a/.config/vesktop/themes/nord.css b/.config/vesktop/themes/nord.css @@ -0,0 +1,14 @@ + :root{--nord-dark1-hsl:220deg calc(var(--saturation-factor, 1) * 16.36%) 21.57%;--nord-dark1:hsl(var(--nord-dark1-hsl) / 1);--nord-dark2-hsl:221.74deg calc(var(--saturation-factor, 1) * 16.31%) 27.65%;--nord-dark2:hsl(var(--nord-dark2-hsl) / 1);--nord-dark3-hsl:220deg calc(var(--saturation-factor, 1) * 16.77%) 31.57%;--nord-dark3:hsl(var(--nord-dark3-hsl) / 1);--nord-dark4-hsl:220deg calc(var(--saturation-factor, 1) * 16.48%) 35.69%;--nord-dark4:hsl(var(--nord-dark4-hsl) / 1);--nord-light1-hsl:218.82deg calc(var(--saturation-factor, 1) * 27.87%) 88.04%;--nord-light1:hsl(var(--nord-light1-hsl) / 1);--nord-light2-hsl:218.18deg calc(var(--saturation-factor, 1) * 26.83%) 91.96%;--nord-light2:hsl(var(--nord-light2-hsl) / 1);--nord-light3-hsl:217.5deg calc(var(--saturation-factor, 1) * 26.67%) 94.12%;--nord-light3:hsl(var(--nord-light3-hsl) / 1);--nord-green-blue-hsl:178.67deg calc(var(--saturation-factor, 1) * 25.14%) 64.9%;--nord-green-blue:hsl(var(--nord-green-blue-hsl) / 1);--nord-turquoise-hsl:193.33deg calc(var(--saturation-factor, 1) * 43.37%) 67.45%;--nord-turquoise:hsl(var(--nord-turquoise-hsl) / 1);--nord-cyan-hsl:210deg calc(var(--saturation-factor, 1) * 34.04%) 63.14%;--nord-cyan:hsl(var(--nord-cyan-hsl) / 1);--nord-blue-hsl:213.08deg calc(var(--saturation-factor, 1) * 31.97%) 52.16%;--nord-blue:hsl(var(--nord-blue-hsl) / 1);--nord-red-hsl:354.26deg calc(var(--saturation-factor, 1) * 42.34%) 56.47%;--nord-red:hsl(var(--nord-red-hsl) / 1);--nord-orange-hsl:14.38deg calc(var(--saturation-factor, 1) * 50.53%) 62.75%;--nord-orange:hsl(var(--nord-orange-hsl) / 1);--nord-yellow-hsl:40deg calc(var(--saturation-factor, 1) * 70.59%) 73.33%;--nord-yellow:hsl(var(--nord-yellow-hsl) / 1);--nord-green-hsl:92.4deg calc(var(--saturation-factor, 1) * 27.78%) 64.71%;--nord-green:hsl(var(--nord-green-hsl) / 1);--nord-pink-hsl:311.05deg calc(var(--saturation-factor, 1) * 20.21%) 63.14%;--nord-pink:hsl(var(--nord-pink-hsl) / 1);--primary-130-hsl:240deg calc(var(--saturation-factor, 1) * 20%) 99.02%;--primary-160-hsl:var(--primary-130-hsl);--primary-200-hsl:var(--nord-light1-hsl);--primary-230-hsl:var(--primary-200-hsl);--primary-260-hsl:222.86deg calc(var(--saturation-factor, 1) * 18.42%) 85.1%;--primary-300-hsl:221.05deg calc(var(--saturation-factor, 1) * 14.96%) 75.1%;--primary-330-hsl:219.31deg calc(var(--saturation-factor, 1) * 16.2%) 64.9%;--primary-360-hsl:var(--primary-330-hsl);--primary-400-hsl:218.92deg calc(var(--saturation-factor, 1) * 16.16%) 55.1%;--primary-430-hsl:218.92deg calc(var(--saturation-factor, 1) * 16.16%) 44.9%;--primary-460-hsl:var(--nord-dark4-hsl);--primary-500-hsl:var(--nord-dark3-hsl);--primary-530-hsl:var(--primary-500-hsl);--primary-560-hsl:221.54deg calc(var(--saturation-factor, 1) * 16.46%) 30.98%;--primary-600-hsl:var(--nord-dark2-hsl);--primary-630-hsl:var(--nord-dark1-hsl);--primary-660-hsl:221.25deg calc(var(--saturation-factor, 1) * 15.69%) 20%;--primary-700-hsl:220deg calc(var(--saturation-factor, 1) * 15.79%) 14.9%;--primary-800-hsl:220deg calc(var(--saturation-factor, 1) * 17.65%) 10%;--green-230-hsl:var(--green-500-hsl);--green-330-hsl:var(--green-500-hsl);--green-360-hsl:var(--green-500-hsl);--green-400-hsl:var(--green-500-hsl);--green-430-hsl:var(--green-500-hsl);--green-500-hsl:var(--nord-green-hsl);--green-560-hsl:var(--green-500-hsl);--green-600-hsl:var(--green-500-hsl);--green-660-hsl:var(--green-500-hsl);--green-730-hsl:92.61deg calc(var(--saturation-factor, 1) * 21.7%) 58.43%;--green-760-hsl:92.86deg calc(var(--saturation-factor, 1) * 17.07%) 51.76%;--red-360-hsl:var(--red-500-hsl);--red-345-hsl:var(--red-500-hsl);--red-400-hsl:var(--red-500-hsl);--red-430-hsl:var(--red-500-hsl);--red-500-hsl:var(--nord-red-hsl);--red-530-hsl:var(--red-500-hsl);--red-560-hsl:353.57deg calc(var(--saturation-factor, 1) * 33.6%) 50.98%;--red-600-hsl:var(--red-560-hsl);--red-630-hsl:354.93deg calc(var(--saturation-factor, 1) * 30.74%) 45.29%;--yellow-260-hsl:var(--yellow-400-hsl);--yellow-300-hsl:var(--yellow-400-hsl);--yellow-360-hsl:var(--yellow-400-hsl);--yellow-400-hsl:var(--nord-yellow-hsl);--yellow-430-hsl:var(--yellow-400-hsl);--yellow-500-hsl:var(--yellow-400-hsl);--yellow-560-hsl:var(--yellow-400-hsl);--yellow-630-hsl:var(--orange-500-hsl);--yellow-660-hsl:var(--orange-500-hsl);--orange-345-hsl:var(--orange-500-hsl);--orange-360-hsl:var(--orange-500-hsl);--orange-500-hsl:var(--nord-orange-hsl);--white-500-hsl:var(--nord-light2-hsl);--black-500-hsl:var(--primary-660-hsl);--blue-330-hsl:var(--nord-blue-hsl);--blue-345-hsl:213.12deg calc(var(--saturation-factor, 1) * 75.49%) 60%;--brand-100-hsl:180deg calc(var(--saturation-factor, 1) * 15.38%) 94.9%;--brand-200-hsl:180deg calc(var(--saturation-factor, 1) * 23.81%) 87.65%;--brand-260-hsl:var(--brand-200-hsl);--brand-360-hsl:var(--brand-500-hsl);--brand-400-hsl:178.13deg calc(var(--saturation-factor, 1) * 25%) 74.9%;--brand-430-hsl:var(--brand-400-hsl);--brand-460-hsl:var(--brand-400-hsl);--brand-500-hsl:var(--nord-green-blue-hsl);--brand-530-hsl:180deg calc(var(--saturation-factor, 1) * 19.82%) 57.45%;--brand-560-hsl:var(--brand-530-hsl);--brand-600-hsl:180deg calc(var(--saturation-factor, 1) * 14.4%) 50.98%;--brand-800-hsl:180deg calc(var(--saturation-factor, 1) * 13.97%) 35.1%;--premium-tier-2-pink-hsl:var(--nord-pink-hsl);--premium-tier-2-pink-for-gradients-hsl:var(--premium-tier-2-pink-hsl);--premium-tier-2-pink-for-gradients-2-hsl:var( --premium-tier-2-pink-for-gradients-hsl );--premium-tier-2-purple-hsl:var(--premium-tier-2-pink-hsl);--premium-tier-2-purple-for-gradients-hsl:var( --premium-tier-2-pink-for-gradients-hsl );--premium-tier-2-purple-for-gradients-2-hsl:var( --premium-tier-2-pink-for-gradients-hsl );--premium-tier-0-blue-hsl:var(--nord-blue-hsl);--premium-tier-0-blue-for-gradients:hsl(var(--premium-tier-0-blue-hsl));--premium-tier-0-purple-hsl:var(--premium-tier-2-pink-hsl);--premium-tier-0-purple-for-gradients-hsl:var(--premium-tier-2-pink-hsl);--premium-tier-0-header-gradient-1-hsl:var(--premium-tier-0-blue-hsl);--premium-tier-0-header-gradient-2-hsl:var(--premium-tier-0-blue-hsl);--premium-tier-0-header-gradient-3-hsl:var(--premium-tier-0-purple-hsl);--premium-tier-0-header-gradient-4-hsl:var(--premium-tier-0-purple-hsl);--premium-tier-0-header-gradient-5-hsl:var(--premium-tier-0-purple-hsl);--custom-premium-colors-premium-gradient-tier-0:linear-gradient( to right, var(--premium-tier-0-blue-for-gradients), var(--premium-tier-0-blue-for-gradients) );--guild-boosting-pink-hsl:var(--premium-tier-2-pink-hsl);--guild-boosting-purple-hsl:var(--premium-tier-2-pink-hsl);--guild-boosting-blue-hsl:var(--premium-tier-0-blue-hsl);--guild-boosting-blue-for-gradients-hsl:var(--premium-tier-0-blue-hsl);--guild-boosting-purple-for-gradients-hsl:var( --premium-tier-2-purple-for-gradients-hsl );--premium-perk-purple-hsl:var(--premium-tier-2-pink-hsl);--premium-perk-pink-hsl:var(--premium-tier-2-pink-hsl);--premium-perk-green-hsl:var(--green-560-hsl);--premium-perk-yellow-hsl:var(--nord-yellow-hsl);--premium-perk-dark-blue-hsl:var(--nord-blue-hsl);--premium-perk-light-blue-hsl:var(--nord-turquoise-hsl);--premium-perk-blue-hsl:var(--nord-cyan-hsl);--premium-perk-orange-hsl:var(--yellow-500-hsl);--premium-perk-gold-hsl:var(--yellow-500-hsl);--partner-hsl:var(--nord-blue-hsl);--twitch-hsl:var(--nord-pink-hsl);--application-subscription-start-hsl:var(--nord-blue-hsl);--application-subscription-end-hsl:var(--nord-cyan-hsl);--button-danger-background-hover:var(--red-560);--button-danger-background-active:var(--red-630);--button-outline-danger-background-active:var(--red-560);--input-placeholder-text-dark-hsl:var(--primary-dark-360-hsl);--home-background:var(--background-secondary-alt)}.theme-dark,.theme-light{--status-positive-text:var(--black-500);--search-popout-date-picker-hint-value-text:var(--black-500);--button-positive-background-hover:var(--green-730);--button-positive-background-active:var(--green-760)}.theme-dark{--header-secondary:var(--primary-300);--text-muted:var(--primary-300);--interactive-muted:var(--primary-430);--background-mentioned:hsl(var(--brand-500-hsl) / 0.18);--background-mentioned-hover:hsl(var(--brand-500-hsl) / 0.15);--mention-background:hsl(var(--brand-500-hsl) / 0.25);--search-popout-option-fade-hover:linear-gradient( 90deg, hsl(var(--primary-530-hsl) / 0), hsl(var(--primary-530-hsl) / 0.2) 50% );--bg-mod-faint:color-mix( in oklab, var(--primary-530) 100%, hsl(var(--theme-base-color-hsl, 0 0% 0%)) var(--theme-base-color-amount, 0%) );--background-modifier-hover:color-mix( in oklab, var(--primary-560) 100%, hsl(var(--theme-base-color-hsl, 0 0% 0%) / 0.3) var(--theme-base-color-amount, 0%) );--background-modifier-selected:hsl(var(--primary-460-hsl) / 0.6);--channel-text-area-placeholder:var(--primary-400);--channeltextarea-background:var(--primary-500);--scrollbar-thin-thumb:var(--primary-500);--scrollbar-auto-thumb:var(--primary-500)}.theme-light{--header-secondary:var(--primary-600);--interactive-muted:var(--primary-360);--background-message-hover:hsl(var(--primary-260-hsl) / 0.3);--background-mentioned:hsl(var(--brand-500-hsl) / 0.5);--background-mentioned-hover:hsl(var(--brand-500-hsl) / 0.4);--mention-foreground:var(--black-500);--mention-background:hsl(var(--brand-600-hsl) / 0.4);--scrollbar-thin-thumb:var(--primary-260);--scrollbar-auto-thumb:var(--primary-260);--scrollbar-auto-track:var(--background-message-hover);--search-popout-option-fade-hover:linear-gradient( 90deg, hsl(var(--primary-260-hsl) / 0), var(--primary-260) 50% );--background-primary:var(--nord-light3);--background-secondary:var(--nord-light2);--background-secondary-alt:var(--primary-200);--background-tertiary:var(--primary-260)}:root{--user-status-online-hsl:var(--green-560-hsl);--user-status-online:hsl(var(--user-status-online-hsl) / 1);--user-status-idle-hsl:var(--orange-500-hsl);--user-status-idle:hsl(var(--user-status-idle-hsl) / 1);--user-status-dnd-hsl:var(--red-500-hsl);--user-status-dnd:hsl(var(--user-status-dnd-hsl) / 1);--user-status-invisible-hsl:var(--primary-430-hsl);--user-status-invisible:hsl(var(--user-status-invisible-hsl) / 1);--user-status-twitch-hsl:var(--nord-pink-hsl);--user-status-twitch:hsl(var(--user-status-twitch-hsl) / 1)}::selection{background-color:hsl(var(--blue-345-hsl)/.25)}.colorStreamerMode_be03aa,.notice_dd5a33{border-radius:0}.colorStreamerMode_be03aa,.notice_dd5a33>.header_dd5a33,.notice_dd5a33>.lookOutlined_dd4f85.colorWhite_dd4f85{color:var(--black-500)}.notice_dd5a33>.lookOutlined_dd4f85.colorWhite_dd4f85{border-color:currentColor}.colorStreamerMode_be03aa .button_be03aa{border-color:currentColor!important}.colorStreamerMode_be03aa .button_be03aa:not(:hover){color:currentColor!important}.colorStreamerMode_be03aa .button_be03aa:hover{background-color:currentColor!important}.slider_cebd1c rect[fill=white]{fill:var(--white-500)}.container_cebd1c[style*="background-color: rgb(35, 165, 90)"]{background-color:var(--green-560)!important}.slider_cebd1c path[fill^="rgba(35, 165, 90"]{fill:var(--green-760)}.container_cebd1c[style*="background-color: rgb(128, 132, 142)"]{background-color:var(--primary-500)!important}.slider_cebd1c path[fill^="rgba(128, 132, 142"]{fill:var(--primary-500)}.checkboxSelected_b97e9a path[fill="var(--white-500)"],.checkbox_f6cde8[style*="background-color: var(--brand-500)"] path[fill="var(--white-500)"]{fill:var(--black-500)}.categoryItem_c72b37.selectedCategoryItem_c72b37,.categoryItem_f75d68.selectedCategoryItem_f75d68,.colorBrand_dd4f85 .defaultColor__30336,.focused_e1268c .userMenuUsername_e1268c .userMenuDiscriminator_e1268c,.focused_e1268c .userMenuUsername_e1268c .userMenuText_e1268c,.lookFilled_dd4f85.colorBrand_dd4f85:not(.button_adcaac),.lookOutlined_dd4f85.colorBrand_dd4f85:hover{color:var(--black-500)}.activeButton_b48941,.colorBrand_dd4f85 .button__3e450[style*="color: rgb(255, 255, 255)"]{color:var(--black-500)!important}.addButton_f11cbf,.allow_e3c4bb.selected_e3c4bb,.button_adcaac .buttonColor_adcaac.buttonActive_adcaac,.button_adcaac.buttonColor_adcaac.buttonActive_adcaac,.colorDefault_d90b3d .check_d90b3d,.lookFilled_dd4f85.colorGreen_dd4f85{color:var(--black-500)}.tooltipBrand_b6c360,.tooltipGreen_b6c360{color:var(--black-500)!important}.button_adcaac.buttonColor_adcaac.buttonActive_adcaac .lottieIcon_f73ef7{--__lottieIconColor:currentcolor!important}.colorDefault_d90b3d.focused_d90b3d:not(.colorDanger_d90b3d):not(.menuItemFocused_ad5fac),.colorDefault_d90b3d.focused_d90b3d:not(.colorDanger_d90b3d):not(.menuItemFocused_ad5fac) .caret_d90b3d,.colorDefault_d90b3d.focused_d90b3d:not(.colorDanger_d90b3d):not(.menuItemFocused_ad5fac) .checkbox_d90b3d,.colorDefault_d90b3d.focused_d90b3d:not(.colorDanger_d90b3d):not(.menuItemFocused_ad5fac) .radioSelection_d90b3d,.colorDefault_d90b3d.focused_d90b3d:not(.colorDanger_d90b3d):not(.menuItemFocused_ad5fac) .subtext_d90b3d{color:var(--black-500)}.colorDefault_d90b3d.focused_d90b3d:not(.colorDanger_d90b3d):not(.menuItemFocused_ad5fac) path{fill:currentColor}.activeIcon_e1268c circle[fill="var(--white-500)"],.activeIcon_e1268c path[fill="var(--white-500)"],.answerSelectionIcon_cf2c85 circle[fill="var(--white-500)"],.checkIcon_bd5e1f path[fill="var(--white-500)"],.checkbox_f6cde8[style*="background-color: rgb(35, 165, 90)"] path[fill="var(--white-500)"],.checklistIcon_ccd405 circle[fill="var(--white-500)"],.checkmarkCircle_cb7c27 circle[fill="var(--white-500)"],.descriptionSection_c38f8d:first-child .descriptionIcon_c38f8d circle[fill="var(--white-500)"],.icon_eff583 circle[fill="var(--white-100)"]{fill:var(--black-500)}.activeCircle_a1879c,.calendarPicker_be05cd .react-datepicker__day.react-datepicker__day--keyboard-selected,.calendarPicker_be05cd .react-datepicker__day.react-datepicker__day--selected:hover,.calendarPicker_be05cd .react-datepicker__day:hover,.checkmark_f9902b,.uploadDropModal_f82cc7 .inner_f82cc7 .instructions_f82cc7,.uploadDropModal_f82cc7 .inner_f82cc7 .title_f82cc7,.uploadDropModal_f82cc7 .inner_f82cc7 .title_f82cc7 strong{color:var(--black-500)}.content_ed23b8 a{color:var(--text-link)}.streamerModeEnabledBtn_c50c8b:hover{background-color:#a3759b}.searchAnswer_b0fa94,.searchFilter_b0fa94{background-color:var(--background-primary)!important;color:var(--text-normal)}.icon_f82cc7.two_f82cc7{filter:drop-shadow(0 0 48px hsla(var(--brand-500-hsl)/.5))}.icon_f82cc7.video_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/video.svg)}.icon_f82cc7.acrobat_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/acrobat.svg)}.icon_f82cc7.ae_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/ae.svg)}.icon_f82cc7.sketch_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/sketch.svg)}.icon_f82cc7.ai_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/ai.svg)}.icon_f82cc7.archive_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/archive.svg)}.icon_f82cc7.code_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/code.svg)}.icon_f82cc7.document_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/document.svg)}.icon_f82cc7.photoshop_f82cc7,.icon_f82cc7.ps_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/ps.svg)}.icon_f82cc7.spreadsheet_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/spreadsheet.svg)}.icon_f82cc7.image_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/image.svg)}.icon_f82cc7.webcode_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/webcode.svg)}.icon_f82cc7.audio_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/audio.svg)}.icon_f82cc7.unknown_f82cc7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/global/upload/unknown.svg)}.wrapper_fea3ef{background-color:var(--background-secondary-alt)!important}.panels_a4d4d9{border-left:1px solid var(--background-modifier-accent)}.expandedFolderBackground_bc7085,.folder_bc7085:not(.hover_bc7085){background-color:var(--background-primary)!important}.theme-dark .folder_bc7085.hover_bc7085,.theme-dark .wrapper_bc7085 .wrapper_f90abb:not(.selected_f90abb) .childWrapper_f90abb{background-color:var(--primary-500)}.theme-light .folder_bc7085.hover_bc7085,.theme-light .wrapper_bc7085 .wrapper_f90abb:not(.selected_f90abb) .childWrapper_f90abb{background-color:var(--primary-160)}.footer_d71945{background:0 0}.circleIconButton_db6521.selected_db6521,.iconBadge_c96c45.isCurrentUserConnected_c96c45,.wrapper_f90abb.selected_f90abb .childWrapper_f90abb,.wrapper_f90abb:hover .childWrapper_f90abb{color:var(--black-500)}.container_e85446 div[style*="background-color: rgb(35, 165, 90)"]{background-color:var(--user-status-online)!important}.iconContainer_a2aef9 circle[fill="#5865f2"i]{fill:var(--brand-500)}.iconContainer_a2aef9 circle[fill="#5865f2"i]+path[fill=white]{fill:var(--black-500)}.hljs-ansi-background-cyan,.hljs-ansi-background-green,.hljs-ansi-background-magenta,.hljs-ansi-background-white,.hljs-ansi-background-yellow,.hljs-ansi-foreground-black .hljs-ansi-background-black,.hljs-ansi-foreground-black .hljs-ansi-background-blue,.hljs-ansi-foreground-black .hljs-ansi-background-cyan,.hljs-ansi-foreground-black .hljs-ansi-background-green,.hljs-ansi-foreground-black .hljs-ansi-background-magenta,.hljs-ansi-foreground-black .hljs-ansi-background-red,.hljs-ansi-foreground-black .hljs-ansi-background-white,.hljs-ansi-foreground-black .hljs-ansi-background-yellow{color:var(--primary-800)}.hljs-ansi-foreground-black{color:var(--primary-430)}.hljs-ansi-foreground-red{color:var(--nord-red)}.hljs-ansi-foreground-green{color:var(--nord-green)}.hljs-ansi-foreground-yellow{color:var(--nord-yellow)}.hljs-ansi-foreground-blue{color:var(--nord-blue)}.hljs-ansi-foreground-magenta{color:var(--nord-pink)}.hljs-ansi-foreground-cyan{color:var(--nord-cyan)}.hljs-ansi-background-blue,.hljs-ansi-background-red,.hljs-ansi-foreground-white .hljs-ansi-background-black,.hljs-ansi-foreground-white .hljs-ansi-background-blue,.hljs-ansi-foreground-white .hljs-ansi-background-cyan,.hljs-ansi-foreground-white .hljs-ansi-background-green,.hljs-ansi-foreground-white .hljs-ansi-background-magenta,.hljs-ansi-foreground-white .hljs-ansi-background-red,.hljs-ansi-foreground-white .hljs-ansi-background-white,.hljs-ansi-foreground-white .hljs-ansi-background-yellow{color:var(--primary-160)}.hljs-ansi-background-black{background-color:var(--primary-700)}.hljs-ansi-background-red{background-color:var(--nord-orange)}.hljs-ansi-background-green{background-color:var(--nord-green)}.hljs-ansi-background-yellow{background-color:var(--nord-yellow)}.hljs-ansi-background-blue{background-color:var(--nord-blue)}.hljs-ansi-background-magenta{background-color:var(--nord-pink)}.hljs-ansi-background-cyan{background-color:var(--nord-cyan)}.hljs-ansi-background-white{background-color:var(--nord-light3)}.hljs-attribute,.hljs-params,.hljs-subst,.hljs-template-variable,.hljs-variable{color:var(--header-secondary)!important}.hljs-comment,.hljs-quote{color:var(--primary-430)!important}.theme-light .hljs-emphasis{color:var(--primary-600)}.theme-dark .hljs-emphasis{color:var(--primary-400)}.hljs-link{color:inherit}.hljs-builtin-name,.hljs-bullet,.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-operator,.hljs-selector-tag,.hljs-symbol,.hljs-tag{color:var(--nord-cyan)!important}.hljs-selector-id{font-weight:700}.hljs-attr,.hljs-built_in,.hljs-class,.hljs-code,.hljs-formula,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-title,.hljs-type{color:var(--nord-green-blue)!important}.hljs-function,.hljs-function>.hljs-title,.hljs-section,.hljs-selector-pseudo{color:var(--nord-turquoise)!important}.hljs-number{color:var(--nord-pink)!important}.hljs-regexp{color:var(--nord-yellow)!important}.hljs-meta-string,.hljs-string{color:var(--nord-green)!important}.hljs-link{text-decoration:underline}.hljs-meta-keyword,.hljs-template-tag{color:var(--nord-blue)!important}.hljs-meta{color:var(--nord-orange)!important}.hljs-addition,.hljs-deletion{color:var(--white-100)!important;background-color:hsl(var(--red-500-hsl)/.45)!important}.hljs-addition{background-color:hsl(var(--green-500-hsl)/.45)!important}.hljs-title~.hljs-title{font-weight:700}.abnf .hljs-attribute,.apache .hljs-attribute,.arduino .hljs-built_in,.aspectj>.hljs-title,.clojure .hljs-name,.coq .hljs-built_in,.css .hljs-built_in,.glsl .hljs-built_in,.julia .hljs-meta,.lisp .hljs-name,.lua .hljs-built_in,.moonscript .hljs-built_in,.nginx .hljs-attribute,.pf .hljs-built_in,.processing .hljs-built_in,.rb .hljs-subst,.ruby .hljs-subst,.swift .hljs-subst,.vim .hljs-built_in{color:var(--nord-turquoise)!important}.abnf .hljs-symbol,.clojure .hljs-symbol,.css .hljs-attribute,.less .hljs-attribute,.scss .hljs-attribute{color:var(--nord-yellow)!important}.apache .hljs-section,.bash .hljs-variable,.ini .hljs-variable,.makefile .hljs-variable,.powershell .hljs-operator,.powershell .hljs-type,.ps1 .hljs-operator,.ps1 .hljs-type,.rb .hljs-variable,.ruby .hljs-variable{color:var(--nord-cyan)!important}.aspectj .hljs-meta,.css .hljs-keyword,.groovy .hljs-meta:not(:first-child),.haxe .hljs-meta,.java .hljs-meta,.swift .hljs-meta,.yaml .hljs-meta{color:var(--nord-orange)!important}.bnf .hljs-attribute,.cpp .hljs-meta-string,.diff .hljs-meta,.ebnf .hljs-attribute,.ldif .hljs-attribute{color:var(--nord-green-blue)!important}.nginx .hljs-section{color:var(--nord-blue)!important}.vim .hljs-built_in{font-style:italic}.handlebars .hljs-template-tag{color:var(--header-secondary)!important}.markdown .hljs-string,.md .hljs-string{color:var(--nord-turquoise)!important}.ini .hljs-attr{color:var(--nord-cyan)!important}.icon_aef5fd path[fill="var(--white)"],.selectedIcon_f6639d circle[fill=white]{fill:var(--black-500)}.subscriberCountValue_adff39>div,.whatsNewSectionBackground_a8b566 .heading_d1d9c7[style="color: var(--header-primary);"],.whatsNewSectionBackground_a8b566 .subtitle_d1d9c7[style="color: var(--header-primary);"]{color:var(--white-100)!important}.badge_e5a42d[src*="6bdc42827a38498929a4920da12695d9.png"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/profile/badge-active-developer.svg)}.badge_e5a42d[src*="6f9e37f9029ff57aef81db857890005e.png"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/profile/badge-commands.svg)}.badge_e5a42d[src="/assets/fee1624003e2fee35cb398e125dc479b.png"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/profile/badge-certified-moderator.svg)}.badge_e5a42d[src*="bf01d1073931f921909045f3a39fd264.png"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/profile/badge-hypesquad.svg)}.badge_e5a42d[src="/assets/8a88d63823d8a71cd5e390baa45efa02.png"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/profile/badge-hypesquad-house-1.svg)}.badge_e5a42d[src="/assets/011940fd013da3f7fb926e4a1cd2e618.png"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/profile/badge-hypesquad-house-2.svg)}.badge_e5a42d[src*="3aa41de486fa12454c3761e8e223442e.png"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/profile/badge-hypesquad-house-3.svg)}.badge_e5a42d[src*="3f9748e53446a137a052f3454e2de41e.png"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/profile/badge-partner.svg)}.badge_e5a42d[src="/assets/5e74e9b61934fc1f67c65515d1f7e60d.png"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/profile/badge-staff.svg)}.badge_e5a42d[src="/assets/6df5892e0f35b051f8b61eace34f4967.png"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/profile/badge-verified-developer.svg)}.badge_e5a42d[src="/assets/6de6d34650760ba5551a79732e98ed60.png"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/profile/badge-originaly-know-as.png)}.botTagRegular_a9e77f:not(.botTagOP_a9e77f){color:var(--black-500)}.botTagRegular_a9e77f:not(.botTagOP_a9e77f) path[fill="var(--white)"]{fill:currentColor}.mask_c51b4e rect[fill="#23a55a"]{fill:var(--user-status-online)}.mask_c51b4e rect[fill="#f0b232"]{fill:var(--user-status-idle)}.mask_c51b4e rect[fill="#f23f43"]{fill:var(--user-status-dnd)}.mask_c51b4e rect[fill="#593695"]{fill:var(--user-status-twitch)}.mask_c51b4e rect[fill="#80848e"]{fill:var(--user-status-invisible)}.status_c7d26b[style="background-color: rgb(35, 165, 90);"]{background-color:var(--user-status-online)!important}.status_c7d26b[style="background-color: rgb(240, 178, 50);"]{background-color:var(--user-status-idle)!important}.status_c7d26b[style="background-color: rgb(242, 63, 67);"]{background-color:var(--user-status-dnd)!important}.status_c7d26b[style="background-color: rgb(128, 132, 142);"]{background-color:var(--user-status-invisible)!important}.icon_d76df7[style*='background-image: url("/assets/617505e363f7f7cf9492.svg")']{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/dm-channel/call-incoming.svg)!important}.icon_d76df7[style*='background-image: url("/assets/22ff731ec050e3214b69.svg")']{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/dm-channel/call-missed.svg)!important}.selected_ae3c77,.textBadge_df8943[style*="background-color: var(--brand-500)"]{color:var(--black-500)}.selected_ae3c77 path[fill="url(#paint0_linear_6413_12612)"]{fill:currentColor}.lockIcon_ad4a7c[src="/assets/12e739083a6d997cba7b.svg"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/settings/general/lock.svg)}.uploadIcon_f2f431{color:var(--primary-460-hsl)}.upsellTextContainer_eb49af>div[style*="color: white"]{color:var(--black-500)!important}.permissionCheckmark_f0135d{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/settings/general/checkmark.svg)}.giftButton_b105e9:hover:not(:active){color:var(--black-500)!important}.settingsTextContainer_f26610>[style*="color: white"]{color:var(--header-primary)!important}.lookFilled_dd4f85.colorBrandInverted_dd4f85,.upsellButton_bb33d5{color:var(--brand-800)}.premiumCards_c87d73 .display-md_dc00ef[style*="color: white"],.premiumCards_c87d73 .pricePerInterval_af8f09[style*="color: white"],.premiumCards_c87d73 .text-sm\/normal_dc00ef[style*="color: white"],.tier2_c87d73 .display-md_dc00ef[style*="color: white"],.tier2_c87d73 .pricePerInterval_af8f09[style*="color: white"],.tier2_c87d73 .text-md\/normal_dc00ef[style*="color: white"],.tier2_c87d73 .text-sm\/normal_dc00ef[style*="color: white"]{color:currentColor!important}.mostPopularText_b1bbf4,.tier2_c87d73{color:var(--primary-660)}.planOptionDiscount_bd3462[style*="color: white"]{color:var(--black-500)!important}.noItemsIcon_a206c7,.noItemsIcon_e70817{background:var(--primary-460-hsl)!important}.theme-light .bar_c7a159,.theme-light .markDash_c7a159,.theme-light .progress_e5cdf3{background-color:var(--background-secondary-alt)}.theme-light .notches_e5cdf3{color:var(--background-primary)}.key_c90023{border-color:var(--background-tertiary);box-shadow:inset 0-4px 0 var(--background-secondary)}.theme-light .nowPlayingAdd_fd966d{color:var(--text-normal)}.nowPlaying_fd966d .gameName_fd966d,.nowPlaying_fd966d .lastPlayed_fd966d{color:var(--black-500)!important}.default_a467ac{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/user/settings/activity/cross.svg)}.theme-light .game_fd966d{box-shadow:0 1px 0 0 var(--background-tertiary)}.theme-light .card_ffe375:before{background-color:var(--background-secondary)}.flowerStarContainer_c91f7d .childContainer_c91f7d path[fill="var(--white-400)"],.gameVerifiedIcon_fd966d .childContainer_c91f7d path[fill="var(--white-500)"]{fill:var(--black-500)}.container_cbd271 .membersWrap_cbd271{flex-grow:1}.theme-light .users_a5bc92{background-color:var(--primary-100)}.newBadgeText_d6a475,.newBadge_c6b11b,.newBadge_f1fd9c,.newChannel_ecb303,.titleBadge_f04d06,.title_a33974 .textBadge_df8943[style="background-color: var(--bg-brand);"]{color:var(--brand-900)}.eventStatusContainer_d6a475 path[fill="#949cf7"]{fill:var(--brand-360)}.container_b6cd66[style*="background-color: rgb(17, 18, 20)"]{background-color:var(--background-floating)!important}.upsellTooltipWrapper_dafa63 .upsellTooltipHeader_dafa63,.upsellTooltipWrapper_dafa63 .upsellTooltipText_dafa63{color:var(--black-500)!important}.badgeLabel_c3120f>.newlyAddedBadgeIcon_c3120f,.badgeLabel_c3120f>.text-sm\/semibold_dc00ef[style*="color: white"]{color:currentColor!important}.topGuildEmojiBadge_c3120f{background:linear-gradient(268.26deg,var(--red-500) 0%,var(--orange-500) 102.45%);color:var(--black-900)}.newlyAddedHighlight_fbfedd{border-color:var(--green-500)}.newlyAddedBadge_fbfedd{background-color:var(--green-500)}.newlyAddedBadge_fbfedd .newlyAddedBadgeStar_fbfedd,.newlyAddedBadge_fbfedd .text-xs\/semibold_dc00ef[style*="color: white"]{color:var(--black-500)!important}.newlyAddedHighlightContainer_fbfedd:hover .newlyAddedHighlight_fbfedd{border-color:var(--button-positive-background-hover)}.newlyAddedHighlightContainer_fbfedd:hover .newlyAddedBadge_fbfedd{background-color:var(--button-positive-background-hover)}.newlyAddedBadge_c3120f{background:linear-gradient(268.26deg,var(--blue-330) 0%,var(--green-500) 102.45%)}.nitroTopDividerLockCircle_e8f337 path[fill=white]{fill:var(--black-500)}.upsellButton_a3bc57{color:var(--primary-660)!important}.header_a50853{background:center 15%/90%auto url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/boost/sparks.svg)no-repeat,linear-gradient(359.37deg,rgba(0,0,0,.5) 12.68%,hsla(0deg,0%,100%,0) 50.4%),linear-gradient(159.15deg,var(--premium-tier-0-header-gradient-1) 8.49%,var(--premium-tier-0-header-gradient-2) 32.21%,var(--premium-tier-0-header-gradient-3) 62.9%,var(--premium-tier-0-header-gradient-4) 86.06%,var(--premium-tier-0-header-gradient-5) 91.4%)}.header_a50853 .guildName_cbe7a3,.header_a50853 .heading_a50853{color:var(--white-500)!important}.guildBoostCountWrapper_cbe7a3{color:var(--white-100)}.guildBoostCtaBoostContent_cbe7a3{color:var(--brand-800)}.progressBarMarkerUnlocked_c29408 .boostedTierIcon_c29408{color:var(--black-500)}.recommendedTierHighlightTag_ebd3d3,.tierCardCurrentTier_e3ebb9{background:var(--guild-boosting-purple);color:var(--black-500)!important}.tierCardNewFeatureBadge_e3ebb9{background:var(--white-500);color:var(--black-500)}.tierCardBoostRequirement_e3ebb9{color:var(--primary-800)!important}.tierCardHeading_e3ebb9,.tierCardListItem_e3ebb9{color:var(--primary-700)!important}.tierCardListIcon_e3ebb9 path[fill="var(--interactive-normal)"]{fill:currentColor}.premiumIcon_a1eac2[src="/assets/45485d7fb82075646f32.svg"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/app-directory/dollar.svg)}.scopeIcon_cf14a8 .icon_cf14a8{color:var(--black-500)}.headerSuccess_e1a4cf{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/app-directory/success.svg)}.checkbox_f6cde8[style*="background-color: rgba(35, 165, 90, 0.15)"]{border-color:hsl(var(--green-360-hsl)/.15)!important;background-color:hsl(var(--green-360-hsl)/.15)!important}.checkbox_f6cde8 path[fill="#23a55a"]{fill:var(--green-360)}.checkbox_f6cde8[style*="background-color: rgb(35, 165, 90)"]{border-color:var(--green-360)!important;background-color:var(--green-360)!important}.serverBoostTabItem_f7189e[aria-selected=true]{color:var(--black-500)!important}.serverBoostTabItem_f7189e[aria-selected=true] .icon_f7189e{fill:var(--black-500)!important}.icon_f7189e[fill="#ff73fa"i]{fill:var(--guild-boosting-pink)}.upsellDescription_bb33d5,.upsellHeader_bb33d5{color:var(--white-100)}.currentTierIcon_a4fd01,.subscriberCountText_adff39>div{color:var(--black-500)!important}.divider_abe1fa,.safetyStepRow_abe1fa .button_dd4f85:hover{background-color:var(--background-secondary-alt)}.safetyStepRow_abe1fa .button_dd4f85{border-color:var(--background-secondary-alt)}.safetyStepRow_abe1fa .button_dd4f85:hover{border-color:var(--c-background-secondary-alt2)}.automodText_a7a160{color:currentColor}.typeCreate_eebd33:after{background:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/settings/moderation/type-create.svg)}.typeUpdate_eebd33:after{background:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/settings/moderation/type-update.svg)}.typeDelete_eebd33:after{background:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/settings/moderation/type-delete.svg)}.sparkles_b1a8d5[src="/assets/bdefc176ff9ab24ba5bc.svg"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/settings/community/stars.svg)}.overviewSidebar_d65fcf{background:linear-gradient(180deg,var(--brand-500) 6.65%,var(--brand-600) 69.44%,var(--brand-800) 106.24%)}.header_d65fcf,.selected_d65fcf .stepTitle_d65fcf,.stepIndex_d65fcf,.stepTitle_d65fcf{color:var(--black-500)}.selected_d65fcf .stepIndex_d65fcf{color:var(--brand-900)}.content_ccd405 img[src="/assets/311b25874ac56fabe7df.svg"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/settings/community/shield.svg)}.content_ccd405 img[src="/assets/f3b668d24838c7031ba4.svg"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/settings/community/wrench.svg)}.content_ccd405 img[src="/assets/e7681bff22fc3aa4a4bd.svg"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/settings/community/check.svg)}.colorPrimary_dd4f85 .button_b5926e[style*="color: rgb(255, 255, 255)"]{color:var(--white-500)!important}.sparkles_d6d7a8[src="/assets/70184499038113a82481.svg"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/settings/community/discovery-stars.svg)}.earningsPreviewContainer_da92c3[style*="background-color: rgb(46, 54, 56)"]{background-color:hsl(var(--green-760-hsl)/.1)!important}.subscriberCountValue_adff39{background-color:var(--brand-800)}.subscriberCountText_adff39 path[fill="var(--white)"]{fill:var(--black-500)}.container_c2efea,.container_f1fd9c,.emptyPage_c6b11b,.header_f1fd9c,.scrollerContainer_c6b11b{background-color:var(--background-secondary-alt)!important}.innerHeader_f1fd9c:after{background:linear-gradient(180deg,rgba(var(--background-primary-rgb),0)0,var(--background-primary)) linear-gradient(180deg,rgba(var(--background-primary-rgb),0)0,var(--background-primary))!important}.theme-dark .optionButtonWrapper_bd5e1f:not(.selected_bd5e1f){border-color:var(--primary-460)}.theme-dark .optionButtonWrapper_bd5e1f:not(.selected_bd5e1f):hover{border-color:var(--interactive-normal)}.channelRow_f04d06:hover:not(.disabled__556e5){background-color:var(--background-modifier-hover)}.emptyIcon_c6b11b path[fill="#58F287"]{fill:var(--green-500)}.emptyIcon_c6b11b path[fill="#FFD01A"]{fill:var(--yellow-500)}.interactive:hover,.newMessagesBar_cf58b5 .barButtonBase_cf58b5,.playIcon_d6cb89{color:var(--black-500)}.icon_f9902b[style*='background-image: url("/assets/fea1d92557530364cefd.svg")']{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/channel/text/invite.svg)!important}.icon_f9902b[style*='background-image: url("/assets/b8566c6e8b65576532c0.svg")']{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/channel/text/customize.svg)!important}.icon_f9902b[style*='background-image: url("/assets/cf6b9f0ee7c5cee7fb45.svg")']{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/channel/text/chat.svg)!important}.icon_f9902b[style*='background-image: url("/assets/9db0c99df4cb2d4dfa87.svg")']{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/channel/text/first-app.svg)!important}.icon_d76df7[style*='background-image: url("/assets/db0473de8224a02f3a88.svg")']{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/channel/text/join.svg)!important}.userJoinSystemMessageIcon_f9f2ca path[fill="#3ba55c"]{fill:hsl(var(--user-status-online-hsl))}.mentioned_d5deea:before{background-color:var(--brand-500)}.theme-light .embedFull_ad0b71,.theme-light .reaction_ec6b19{background-color:var(--primary-160)}.playing_d6cb89 .playButtonContainer_d6cb89{background:var(--black-500)}.playing_d6cb89 .duration_d6cb89,.playing_d6cb89 .volumeButtonIcon_d6cb89{color:var(--black-500)}.theme-dark .header_a3e381{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/channel/announcement/follow-bg.svg)}.theme-light .header_a3e381{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/channel/announcement/follow-bg-light.svg)}.botTagOP_a9e77f,.newBadge_a57509[style*="background-color: var(--brand-260)"],.newBadge_d331f1[style*="background-color: var(--brand-260)"]{color:var(--brand-900)}.countText_a6d69a,.countText_ae4f46,.discordIcon_ad4d4c,.selectorButton_a78967.selectorButtonSelected_a78967 .selectorText_a78967,.selectorButton_a78967:hover .selectorText_a78967,.stepStatus_a039eb[style*="background-color: var(--status-positive-background)"]{color:var(--black-500)}.emptyStateStars_b767ed path[fill="#ADF3FF"],.stars_a03b48 path[fill="#ADF3FF"]{fill:var(--nord-cyan)}.emptyStateStars_b767ed path[fill="#FFD01A"],.stars_a03b48 path[fill="#FFD01A"]{fill:var(--nord-yellow)}.inline_ad4d4c img[src="/assets/db8dd898bbfa31caea78.svg"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/channel/forum/guide.svg)}.theme-dark .matchingPostsRow_a6d69a{background-color:var(--background-modifier-hover)}.container_f80572 rect[fill="var(--white-500)"]+path,.iconContainer_f11cbf path[fill="var(--white)"],.pinIcon_f451cd path[fill=white]{fill:var(--black-500)}.gradientContainer_dd069c{--color-rgb:var(--primary-700-hsl);background-image:linear-gradient(hsl(var(--color-rgb)),hsl(var(--color-rgb)/.738) 19%,hsl(var(--color-rgb)/.541) 34%,hsl(var(--color-rgb)/.382) 47%,hsl(var(--color-rgb)/.278) 56.5%,hsl(var(--color-rgb)/.194) 65%,hsl(var(--color-rgb)/.126) 73%,hsl(var(--color-rgb)/.075) 80.2%,hsl(var(--color-rgb)/.042) 86.1%,hsl(var(--color-rgb)/.021) 91%,hsl(var(--color-rgb)/.008) 95.2%,hsl(var(--color-rgb)/.002) 98.2%,transparent)}.enhancedSelectorNitroText_a78967{color:hsl(var(--premium-perk-pink-hsl))!important}.emojiPickerHeader_bdea70 img[src="/assets/96098492389840cbb20f.svg"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/channel/voice-emoji-nitro.svg)}.icon_dc3fc4[style*="background-color: var(--brand-500)"],.icon_dc3fc4[style*="background-color: var(--green-360)"]{color:var(--black-500)}.sparkleIcon_c5e69b[src="/assets/9d5696b9d1f0b77fd074.svg"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/channel/stage/star.svg)}.sparkleIcon_c5e69b[src="/assets/8447e4e321cc04bd6a4c.svg"]{content:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/server/channel/stage/cross.svg)}.theme-dark .gradient_b97772{background:radial-gradient(130.66% 324.98%at -3.95% 0%,var(--blue-330) 0%,hsl(var(--primary-600-hsl)/0%) 100%),var(--primary-600)!important}.theme-light .gradient_b97772{background:radial-gradient(130.66% 324.98%at -3.95% 0%,var(--blue-330) 0%,hsl(var(--nord-light1-hsl)/0%) 100%),var(--nord-light1)!important}.guildBadge_c73cee .icon_d082f7{color:var(--black-500)}.icon_f38045{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/discover/hub.svg)} +.iconApple_d572b7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/web/apple.svg)}.iconAndroid_d572b7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/web/android.svg)}.iconWindows_d572b7{background-image:url(https://raw.githubusercontent.com/orblazer/discord-nordic/v4.10.20/assets/web/windows.svg)}.button_be03aa{color:currentColor!important}.button_be03aa:not(:hover){border-color:currentColor!important} + + /** + * CUSTOMIZATION + * Add '!important' non hsl discord colors, like 'primary-dark-200' + */ + :root { + } + .theme-dark { + } + .theme-light { + } +} diff --git a/.config/waybar/config b/.config/waybar/config @@ -0,0 +1,166 @@ +{ + "layer": "top", + "position": "top", + "output": "DP-2", + "spacing": 20, + "reload_style_on_change": true, + "modules-left": ["hyprland/workspaces"], + "modules-center": [], + "modules-right": ["custom/packages", "custom/news", "custom/torrent","custom/memory", "custom/forecast","custom/mailbox","custom/nettraf","custom/microphone","custom/volume","custom/clock","custom/internet","tray"], + + "hyprland/workspaces": { + "disable-scroll": true, + "all-outputs": true, + "on-click": "activate", + "format": "{icon}", + }, + + "custom/packages" : { + "tooltip": false, + "format": "{}", + "signal": 8, + "exec" : "sb-pacpackages", + "on-click": "sb-pacpackages 1", + "on-click-right": "sb-pacpackages 3", + "on-click-middle": "sb-pacpackages 2", + "on-click-backward": "sb-pacpackages 8", + }, + + "custom/news" : { + "tooltip": false, + "format": "{}", + "signal": 6, + "exec" : "sb-news", + "on-click": "sb-news 1; pkill -RTMIN+6 waybar", + "on-click-right": "sb-news 3", + "on-click-middle": "sb-news 2", + "on-click-backward": "sb-news 8", + }, + + "custom/torrent" : { + "tooltip": false, + "format": "{}", + "signal": 7, + "interval": 20, + "exec" : "sb-torrent", + "on-click": "sb-torrent 1", + "on-click-right": "sb-torrent 3", + "on-click-middle": "sb-torrent 2", + "on-click-backward": "sb-torrent 8", + }, + + "custom/memory" : { + "tooltip": false, + "format": "{}", + "signal": 14, + "exec" : "sb-memory", + "interval": 10, + "on-click": "sb-memory 1", + "on-click-right": "sb-memory 3", + "on-click-middle": "sb-memory 2", + "on-click-backward": "sb-memory 8", + }, + + "custom/doppler" : { + "tooltip": false, + "format": "{}", + "signal": 13, + "interval": 650, + "exec" : "sb-doppler", + "on-click": "sb-doppler 1", + "on-click-right": "sb-doppler 3", + "on-click-middle": "sb-doppler 2", + "on-click-backward": "sb-doppler 8" + }, + + "custom/forecast" : { + "tooltip": false, + "format": "{}", + "signal": 5, + "exec" : "sb-forecast", + "interval" : 18000, + "on-click": "sb-forecast 1", + "on-click-right": "sb-forecast 3", + "on-click-middle": "sb-forecast 2", + "on-click-backward": "sb-forecast 8" + }, + + "custom/mailbox" : { + "tooltip": false, + "format": "{}", + "signal": 12, + "exec" : "sb-mailbox", + "interval" : 180, + "on-click": "sb-mailbox 1", + "on-click-right": "sb-mailbox 3", + "on-click-middle": "sb-mailbox 2", + "on-click-backward": "sb-mailbox 8" + }, + + "custom/nettraf" : { + "tooltip": false, + "format": "{}", + "signal": 16, + "exec" : "sb-nettraf", + "interval" : 1, + "on-click": "sb-nettraf 1", + "on-click-right": "sb-nettraf 3", + "on-click-backward": "sb-nettraf 8" + }, + + "custom/microphone" : { + "tooltip": false, + "format": "{}", + "signal": 23, + "exec" : "sb-microphone", + "interval": 10, + "on-click": "sb-microphone 1", + "on-click-middle": "sb-microphone 2", + "on-scroll-up": "sb-microphone 4", + "on-scroll-down": "sb-microphone 5", + "on-click-right": "sb-microphone 3", + "on-click-backward": "sb-microphone 8" + }, + + "custom/volume" : { + "tooltip": false, + "format": "{}", + "signal": 10, + "exec" : "sb-volume", + "interval": 10, + "on-click": "sb-volume 1", + "on-click-middle": "sb-volume 2", + "on-scroll-up": "sb-volume 4", + "on-scroll-down": "sb-volume 5", + "on-click-right": "sb-volume 3", + "on-click-backward": "sb-volume 8" + }, + + "custom/clock" : { + "tooltip": false, + "format": "{}", + "signal": 1, + "exec" : "sb-clock", + "interval" : 60, + "on-click": "sb-clock 1", + "on-click-middle": "sb-clock 2", + "on-click-right": "sb-clock 3", + "on-click-backward": "sb-clock 8", + }, + + "custom/internet" : { + "tooltip": false, + "format": "{}", + "signal": 4, + "exec" : "sb-internet", + "interval": 10, + "on-click": "sb-internet 1; pkill -RTMIN+4 waybar", + "on-click-right": "sb-internet 3; pkill -RTMIN+4 waybar", + "on-click-middle": "pkill -RTMIN+4 waybar", + "on-click-backward": "sb-internet 8" + }, + + "tray" : { + "spacing": 10 + } +} diff --git a/.config/waybar/style.css b/.config/waybar/style.css @@ -0,0 +1,36 @@ +* { + border: none; + border-radius: 0; + font-family: SauceCodePro Nerd Font Propo; + font-size: 14px; +} + +#waybar { + color: #d8dee9; + background: #2e3440; +} + +tooltip { + background: rgba(0,0,0,0.2); +} + +#workspaces { + margin-left: 1px; +} + +#workspaces button { + color: #3b4252; + padding-right: 0px; +} + +#workspaces button.active { + color: #d8dee9; +} + +#custom-nettraf { + min-width: 120px; +} + +#tray { + margin-right: 15px; +} diff --git a/.config/wget/wgetrc b/.config/wget/wgetrc @@ -0,0 +1 @@ +hsts-file=~/.cache/wget-hsts diff --git a/.config/yazi/yazi.toml b/.config/yazi/yazi.toml @@ -0,0 +1,2 @@ +[manager] +show_hidden = true diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc @@ -0,0 +1,25 @@ +set sandbox none +set statusbar-h-padding 0 +set statusbar-v-padding 0 +set page-padding 1 +set selection-clipboard clipboard +map u scroll half-up +map d scroll half-down +map D toggle_page_mode +map r reload +map R rotate +map K zoom in +map J zoom out +map i recolor +map p print +map g goto top +map [fullscreen] u scroll half-up +map [fullscreen] d scroll half-down +map [fullscreen] D toggle_page_mode +map [fullscreen] r reload +map [fullscreen] R rotate +map [fullscreen] K zoom in +map [fullscreen] J zoom out +map [fullscreen] i recolor +map [fullscreen] p print +map [fullscreen] g goto top diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc @@ -0,0 +1,82 @@ +# Luke's config for the Zoomer Shell + +# Enable colors and change prompt: +autoload -U colors && colors # Load colors +PS1="%B%{$fg[red]%}[%{$fg[yellow]%}%n%{$fg[green]%}@%{$fg[blue]%}%M %{$fg[magenta]%}%~%{$fg[red]%}]%{$reset_color%}$%b " +setopt autocd # Automatically cd into typed directory. +stty stop undef # Disable ctrl-s to freeze terminal. +setopt interactive_comments + +# History in cache directory: +HISTSIZE=10000000 +SAVEHIST=10000000 +HISTFILE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh/history" +setopt inc_append_history + +# Load aliases and shortcuts if existent. +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc" +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutenvrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutenvrc" +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/aliasrc" +[ -f "${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" + +# Basic auto/tab complete: +autoload -U compinit +zstyle ':completion:*' menu select +zmodload zsh/complist +compinit +_comp_options+=(globdots) # Include hidden files. + +# vi mode +bindkey -v +export KEYTIMEOUT=1 + +# Use vim keys in tab complete menu: +bindkey -M menuselect 'h' vi-backward-char +bindkey -M menuselect 'k' vi-up-line-or-history +bindkey -M menuselect 'l' vi-forward-char +bindkey -M menuselect 'j' vi-down-line-or-history +bindkey -v '^?' backward-delete-char + +# Change cursor shape for different vi modes. +function zle-keymap-select () { + case $KEYMAP in + vicmd) echo -ne '\e[1 q';; # block + viins|main) echo -ne '\033[0 q';; # beam + esac +} +zle -N zle-keymap-select +zle-line-init() { + zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere) + echo -ne '\033[0 q' +} +zle -N zle-line-init +echo -ne '\033[0 q' # Use beam shape cursor on startup. +preexec() { echo -ne '\033[0 q' ;} # Use beam shape cursor for each new prompt. + +# Use lf to switch directories and bind it to ctrl-o +function y() { + local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd + yazi "$@" --cwd-file="$tmp" + if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then + builtin cd -- "$cwd" + fi + rm -f -- "$tmp" > /dev/null +} +bindkey -s '^o' '^uy\n' + +bindkey -s '^a' '^ubc -lq\n' + +bindkey -s '^f' '^ucd "$(dirname "$(fzf)")"\n' + +bindkey '^[[P' delete-char + +# Edit line in vim with ctrl-e: +autoload edit-command-line; zle -N edit-command-line +bindkey '^e' edit-command-line +bindkey -M vicmd '^[[P' vi-delete-char +bindkey -M vicmd '^e' edit-command-line +bindkey -M visual '^[[P' vi-delete + +source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh +# Load syntax highlighting; should be last. +source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh 2>/dev/null diff --git a/.local/bin/bookmarks b/.local/bin/bookmarks @@ -0,0 +1,142 @@ +#!/bin/dash + +URLQUERY_FILE="${HOME}/.local/share/urlquery" +ACTION_MENU="@@" + +CLIPBOARD() { + wl-paste +} + +DMENU() { + bemenu -i -l "${1}" -p "${2}" +} + +error_notify() { + notify-send "${1}" + exit "1" +} + +ensure_file_exists() { + [ -f "${URLQUERY_FILE}" ] || { + notify-send "${URLQUERY_FILE} does not exist. Creating it now." + printf "SearXNG=https://searx.tiekoetter.com/search?q=\n" > "${URLQUERY_FILE}" + } +} + +get_selection() { + cut -d= -f1 "${URLQUERY_FILE}" | DMENU "${LINE_COUNT}" "Bookmarks" +} + +update_file() { + pattern="${1}" + replacement="${2}" + + sed "/${pattern}/c\\${replacement}" "${URLQUERY_FILE}" > "${URLQUERY_FILE}.tmp" && + mv "${URLQUERY_FILE}.tmp" "${URLQUERY_FILE}" || + error_notify "Failed to update the file." +} + +is_valid_url() { + printf "%s\n" "${1}" | grep -qE "^https?://[^[:space:]/?#][^[:space:]]+$" +} + +add_bookmark() { + URL="$(CLIPBOARD)" + + is_valid_url "${URL}" || error_notify "The clipboard content is not a valid URL." + + grep -q "=${URL}$" "${URLQUERY_FILE}" && + notify-send "The URL is already in the list." && return + + NAME="$(printf "" | DMENU "0" "Name")" + + [ -n "${NAME}" ] && printf "%s\n" "${NAME}=${URL}" >> "${URLQUERY_FILE}" && + notify-send "'${NAME}' is bookmarked." +} + +delete_bookmark() { + NAME="$(get_selection)" + + [ -z "${NAME}" ] && error_notify "Failed to delete the bookmark." && return + + sed "/^${NAME}=/d" "${URLQUERY_FILE}" > "${URLQUERY_FILE}.tmp" + mv "${URLQUERY_FILE}.tmp" "${URLQUERY_FILE}" + + [ -s "${URLQUERY_FILE}" ] && grep -qE "\S" "${URLQUERY_FILE}" || rm "${URLQUERY_FILE}" + + notify-send "'${NAME}' is deleted." +} + +edit_name() { + OLD_NAME="${1}" + NEW_NAME="$(printf "" | DMENU "0" "New Name")" + + [ -z "${NEW_NAME}" ] && return + + URL="$(grep "^${OLD_NAME}=" "${URLQUERY_FILE}" | cut -d= -f2)" + + update_file "^${OLD_NAME}=" "${NEW_NAME}=${URL}" +} + +edit_url() { + NAME="${1}" + NEW_URL="$(echo "" | DMENU "0" "New URL")" + + [ -z "${NEW_URL}" ] && return + + update_file "^${NAME}=.*" "${NAME}=${NEW_URL}" +} + +edit_bookmark() { + NAME="$(get_selection)" + + [ -z "${NAME}" ] && error_notify "Failed to edit the bookmark." && return + + FIELD="$(printf "Name\nURL\n" | DMENU "2" "Edit")" + + case "${FIELD}" in + "Name")edit_name "${NAME}";; + "URL")edit_url "${NAME}" + esac + + notify-send "'${NAME}' is updated." +} + +open_bookmark() { + URL="$(grep "^${SELECTION}=" "${URLQUERY_FILE}" | cut -d= -f2-)" + + [ -z "${URL}" ] && notify-send "Bookmark not found." && exit "1" + + case "${URL}" in + *"search"* | *"wiki"* | *"packages"* | *"chatgpt"*) QUERY="$(echo "" | DMENU "0" "Search")" + URL="${URL}${QUERY}" + ;; + esac + + "${BROWSER}" "${URL}" || notify-send "Failed to open the URL." +} + +ensure_file_exists + +LINE_COUNT="$(wc -l < "${URLQUERY_FILE}")" + +[ "${LINE_COUNT}" -ge "15" ] && LINE_COUNT="15" + +SELECTION="$(get_selection)" + +[ -z "${SELECTION}" ] && exit + +case "${SELECTION}" in + "${ACTION_MENU}") + ACTION="$(printf "Add\nDelete\nEdit\n" | DMENU "3" "Action")" + + case "${ACTION}" in + "Add") add_bookmark ;; + "Delete") delete_bookmark ;; + "Edit") edit_bookmark ;; + esac + ;; + *) + open_bookmark + ;; +esac diff --git a/.local/bin/booksplit b/.local/bin/booksplit @@ -0,0 +1,43 @@ +#!/bin/sh + +# Requires ffmpeg + +[ ! -f "$2" ] && printf "The first file should be the audio, the second should be the timecodes.\\n" && exit + +echo "Enter the album/book title:"; read -r booktitle +echo "Enter the artist/author:"; read -r author +echo "Enter the publication year:"; read -r year + +inputaudio="$1" +ext="${1##*.}" + +# Get a safe file name from the book. +escbook="$(echo "$booktitle" | iconv -c -f UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g")" + +! mkdir -p "$escbook" && + echo "Do you have write access in this directory?" && + exit 1 + +# Get the total number of tracks from the number of lines. +total="$(wc -l < "$2")" + +cmd="ffmpeg -i \"$inputaudio\" -nostdin -y" + +while read -r x; +do + end="$(echo "$x" | cut -d' ' -f1)" + file="$escbook/$(printf "%.2d" "$track")-$esctitle.$ext" + if [ -n "$start" ]; then + cmd="$cmd -metadata artist=\"$author\" -metadata title=\"$title\" -metadata album=\"$booktitle\" -metadata year=\"$year\" -metadata track=\"$track\" -metadata total=\"$total\" -ss \"$start\" -to \"$end\" -vn -c:a copy \"$file\" " + fi + title="$(echo "$x" | cut -d' ' -f2-)" + esctitle="$(echo "$title" | iconv -c -f UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g")" + track="$((track+1))" + start="$end" +done < "$2" + +# Last track must be added out of the loop. +file="$escbook/$(printf "%.2d" "$track")-$esctitle.$ext" +cmd="$cmd -metadata artist=\"$author\" -metadata title=\"$title\" -metadata album=\"$booktitle\" -metadata year=\"$year\" -metadata track=\"$track\" -ss \"$start\" -vn -c copy \"$file\"" + +eval "$cmd" diff --git a/.local/bin/compiler b/.local/bin/compiler @@ -0,0 +1,52 @@ +#!/bin/sh + +# This script will compile or run another finishing operation on a document. I +# have this script run via vim. + +# Compiles .tex. groff (.mom, .ms), .rmd, .md, .org. Opens .sent files as sent +# presentations. Runs scripts based on extension or shebang. + +# Note that .tex files which you wish to compile with XeLaTeX should have the +# string "xelatex" somewhere in a comment/command in the first 5 lines. + +file="${1}" +ext="${file##*.}" +dir=${file%/*} +base="${file%.*}" + +cd "${dir}" || exit "1" + +case "${ext}" in + [0-9]) preconv "${file}" | refer -PS -e | groff -mandoc -T pdf > "${base}.pdf" ;; + mom|ms) preconv "${file}" | refer -PS -e | groff -T pdf -m"${ext}" > "${base}.pdf" ;; + c) cc "${file}" -o "${base}" && "./${base}" ;; + cpp) g++ "${file}" -o "${base}" && "./${base}" ;; + cs) mcs "${file}" && mono "${base}.exe" ;; + go) go run "${file}" ;; + h) sudo make install ;; + java) javac -d classes "${file}" && java -cp classes "${base}" ;; + m) octave "${file}" ;; + md) [ -x "$(command -v lowdown)" ] && \ + lowdown --parse-no-intraemph "${file}" -Tms | groff -mpdfmark -ms -kept -T pdf > "${base}.pdf" || \ + [ -x "$(command -v groffdown)" ] && \ + groffdown -i "${file}" | groff -T pdf > "${base}.pdf" || \ + pandoc -t ms --highlight-style="kate" -s -o "${base}.pdf" "${file}" ;; + org) emacs "${file}" --batch -u "${USER}" -f org-latex-export-to-pdf ;; + py) python "${file}" ;; + [rR]md) Rscript -e "rmarkdown::render('${file}', quiet=TRUE)" ;; + rs) cargo build ;; + sass) sassc -a "${file}" "${base}.css" ;; + scad) openscad -o "${base}.stl" "${file}" ;; + sent) setsid -f sent "${file}" 2> "/dev/null" ;; + tex) + textarget="$(getcomproot "${file}" || echo "${file}")" + command="pdflatex" + head -n5 "${textarget}" | grep -qi "xelatex" && command="xelatex" + ${command} --output-directory="${textarget%/*}" "${textarget%.*}" && + grep -qi addbibresource "${textarget}" && + biber --input-directory "${textarget%/*}" "${textarget%.*}" && + ${command} --output-directory="${textarget%/*}" "${textarget%.*}" && + ${command} --output-directory="${textarget%/*}" "${textarget%.*}" + ;; + *) sed -n '/^#!/s/^#!//p; q' "${file}" | xargs -r -I % "${file}" ;; +esac diff --git a/.local/bin/cron/README.md b/.local/bin/cron/README.md @@ -0,0 +1,11 @@ +# Important Note + +These cronjobs have components that require information about your current display to display notifications correctly. + +When you add them as cronjobs, I recommend you precede the command with commands as those below: + +``` +export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u $USER)/bus; export DISPLAY=:0; . $HOME/.zprofile; then_command_goes_here +``` + +This ensures that notifications will display, xdotool commands will function and environmental variables will work as well. diff --git a/.local/bin/cron/checkup b/.local/bin/cron/checkup @@ -0,0 +1,21 @@ +#!/bin/sh + +# Syncs repositories and downloads updates, meant to be run as a cronjob. + +pid=$(pgrep -x Hyprland) +var="DBUS_SESSION_BUS_ADDRESS" +export DBUS_SESSION_BUS_ADDRESS=$(doas grep -E -z "$var" "/proc/$pid/environ" | sed 's/DBUS_SESSION_BUS_ADDRESS=//') + +notify-send "๐Ÿ“ฆ Repository Sync" "Checking for package updates..." + +doas pacman -Syyuw --noconfirm || notify-send "Error downloading updates. + +Check your internet connection, if pacman is already running, or run update manually to see errors." +pkill -RTMIN+8 "${STATUSBAR:-waybar}" + +if pacman -Qu | grep -v "\[ignored\]" +then + notify-send "๐ŸŽ Repository Sync" "Updates available. Click statusbar icon (๐Ÿ“ฆ) for update." +else + notify-send "๐Ÿ“ฆ Repository Sync" "Sync complete. No new packages for update." +fi diff --git a/.local/bin/cron/crontog b/.local/bin/cron/crontog @@ -0,0 +1,6 @@ +#!/bin/sh + +# Toggles all cronjobs off/on. +# Stores disabled crontabs in ~/.config/cronsaved until restored. + +([ -f "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved ] && crontab - < "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && rm "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && notify-send "๐Ÿ•“ Cronjobs re-enabled.") || ( crontab -l > "${XDG_CONFIG_HOME:-$HOME/.config}"/cronsaved && crontab -r && notify-send "๐Ÿ•“ Cronjobs saved and disabled.") diff --git a/.local/bin/cron/newsup b/.local/bin/cron/newsup @@ -0,0 +1,18 @@ +#!/bin/sh + +# Set as a cron job to check for new RSS entries for newsboat. +# If newsboat is open, sends it an "R" key to refresh. +pid=$(pgrep -x Hyprland) +var="DBUS_SESSION_BUS_ADDRESS" +export DBUS_SESSION_BUS_ADDRESS=$(doas grep -E -z "$var" "/proc/$pid/environ" | sed 's/DBUS_SESSION_BUS_ADDRESS=//') + +/usr/bin/notify-send "๐Ÿ“ฐ Updating RSS feeds..." + +pgrep -f newsboat$ && /usr/bin/xdotool key --window "$(/usr/bin/xdotool search --name "^newsboat$")" R && exit + +echo ๐Ÿ”ƒ > /tmp/newsupdate +pkill -RTMIN+6 "${STATUSBAR:-waybar}" +/usr/bin/newsboat -x reload +rm -f /tmp/newsupdate +pkill -RTMIN+6 "${STATUSBAR:-waybar}" +/usr/bin/notify-send "๐Ÿ“ฐ RSS feed update complete." diff --git a/.local/bin/displayselect b/.local/bin/displayselect @@ -0,0 +1,82 @@ +#!/bin/sh + +# A UI for detecting and selecting all displays. Probes xrandr for connected +# displays and lets user select one to use. User may also select "manual +# selection" which opens arandr. + +twoscreen() { # If multi-monitor is selected and there are two screens. + + mirror=$(printf "no\\nyes" | dmenu -i -p "Mirror displays?") + # Mirror displays using native resolution of external display and a scaled + # version for the internal display + if [ "$mirror" = "yes" ]; then + external=$(echo "$screens" | dmenu -i -p "Optimize resolution for:") + internal=$(echo "$screens" | grep -v "$external") + + res_external=$(xrandr --query | sed -n "/^$external/,/\+/p" | \ + tail -n 1 | awk '{print $1}') + res_internal=$(xrandr --query | sed -n "/^$internal/,/\+/p" | \ + tail -n 1 | awk '{print $1}') + + res_ext_x=$(echo "$res_external" | sed 's/x.*//') + res_ext_y=$(echo "$res_external" | sed 's/.*x//') + res_int_x=$(echo "$res_internal" | sed 's/x.*//') + res_int_y=$(echo "$res_internal" | sed 's/.*x//') + + scale_x=$(echo "$res_ext_x / $res_int_x" | bc -l) + scale_y=$(echo "$res_ext_y / $res_int_y" | bc -l) + + xrandr --output "$external" --auto --scale 1.0x1.0 \ + --output "$internal" --auto --same-as "$external" \ + --scale "$scale_x"x"$scale_y" + else + + primary=$(echo "$screens" | dmenu -i -p "Select primary display:") + secondary=$(echo "$screens" | grep -v ^"$primary"$) + direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?") + xrandr --output "$primary" --auto --scale 1.0x1.0 --output "$secondary" --"$direction"-of "$primary" --auto --scale 1.0x1.0 + fi + } + +morescreen() { # If multi-monitor is selected and there are more than two screens. + primary=$(echo "$screens" | dmenu -i -p "Select primary display:") + secondary=$(echo "$screens" | grep -v ^"$primary"$ | dmenu -i -p "Select secondary display:") + direction=$(printf "left\\nright" | dmenu -i -p "What side of $primary should $secondary be on?") + tertiary=$(echo "$screens" | grep -v ^"$primary"$ | grep -v ^"$secondary"$ | dmenu -i -p "Select third display:") + xrandr --output "$primary" --auto --output "$secondary" --"$direction"-of "$primary" --auto --output "$tertiary" --"$(printf "left\\nright" | grep -v "$direction")"-of "$primary" --auto + } + +multimon() { # Multi-monitor handler. + case "$(echo "$screens" | wc -l)" in + 2) twoscreen ;; + *) morescreen ;; + esac ;} + +onescreen() { # If only one output available or chosen. + xrandr --output "$1" --auto --scale 1.0x1.0 $(echo "$allposs" | grep -v "\b$1" | awk '{print "--output", $1, "--off"}' | paste -sd ' ' -) + } + +postrun() { # Stuff to run to clean up. + setbg # Fix background if screen size/arangement has changed. + { killall dunst ; setsid -f dunst ;} >/dev/null 2>&1 # Restart dunst to ensure proper location on screen + } + +# Get all possible displays +allposs=$(xrandr -q | grep "connected") + +# Get all connected screens. +screens=$(echo "$allposs" | awk '/ connected/ {print $1}') + +# If there's only one screen +[ "$(echo "$screens" | wc -l)" -lt 2 ] && + { onescreen "$screens"; postrun; notify-send "๐Ÿ’ป Only one screen detected." "Using it in its optimal settings..."; exit ;} + +# Get user choice including multi-monitor and manual selection: +chosen=$(printf "%s\\nmulti-monitor\\nmanual selection" "$screens" | dmenu -i -p "Select display arangement:") && +case "$chosen" in + "manual selection") arandr ; exit ;; + "multi-monitor") multimon ;; + *) onescreen "$chosen" ;; +esac + +postrun diff --git a/.local/bin/dmenuhandler b/.local/bin/dmenuhandler @@ -0,0 +1,21 @@ +#!/bin/sh + +# Feed this script a link and it will give dmenu +# some choice programs to use to open it. +feed="${1:-$(true | dmenu -p 'Paste URL or file path')}" + +case "$(printf "copy url\\nnsxiv\\nsetbg\\nPDF\\nbrowser\\nlynx\\nvim\\nmpv\\nmpv loop\\nmpv float\\nqueue download\\nqueue yt-dlp\\nqueue yt-dlp audio" | dmenu -i -p "Open it with?")" in + "copy url") echo "$feed" | xclip -selection clipboard ;; + mpv) setsid -f mpv -quiet "$feed" >/dev/null 2>&1 ;; + "mpv loop") setsid -f mpv -quiet --loop "$feed" >/dev/null 2>&1 ;; + "mpv float") setsid -f "$TERMINAL" -e mpv --geometry=+0-0 --autofit=30% --title="mpvfloat" "$feed" >/dev/null 2>&1 ;; + "queue yt-dlp") qndl "$feed" >/dev/null 2>&1 ;; + "queue yt-dlp audio") qndl "$feed" 'yt-dlp -o "%(title)s.%(ext)s" -f bestaudio --embed-metadata --restrict-filenames' ;; + "queue download") qndl "$feed" 'curl -LO' >/dev/null 2>&1 ;; + PDF) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && zathura "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" >/dev/null 2>&1 ;; + nsxiv) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && nsxiv -a "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" >/dev/null 2>&1 ;; + vim) curl -sL "$feed" > "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" && setsid -f "$TERMINAL" -e "$EDITOR" "/tmp/$(echo "$feed" | sed "s|.*/||;s/%20/ /g")" >/dev/null 2>&1 ;; + setbg) curl -L "$feed" > $XDG_CACHE_HOME/pic ; xwallpaper --zoom $XDG_CACHE_HOME/pic >/dev/null 2>&1 ;; + browser) setsid -f "$BROWSER" "$feed" >/dev/null 2>&1 ;; + lynx) lynx "$feed" >/dev/null 2>&1 ;; +esac diff --git a/.local/bin/dmenumountcifs b/.local/bin/dmenumountcifs @@ -0,0 +1,19 @@ +#!/bin/sh +# Gives a dmenu prompt to mount unmounted local NAS shares for read/write. +# Requirements - "%wheel ALL=(ALL) NOPASSWD: ALL" +# +# Browse for mDNS/DNS-SD services using the Avahi daemon... +srvname=$(avahi-browse _smb._tcp -t | awk '{print $4}' | dmenu -i -p "Which NAS?") || exit 1 +notify-send "Searching for network shares..." "Please wait..." +# Choose share disk... +share=$(smbclient -L "$srvname" -N | grep Disk | awk '{print $1}' | dmenu -i -p "Mount which share?") || exit 1 +# Format URL... +share2mnt=//"$srvname".local/"$share" + +sharemount() { + mounted=$(mount -v | grep "$share2mnt") || ([ ! -d /mnt/"$share" ] && sudo mkdir /mnt/"$share") + [ -z "$mounted" ] && sudo mount -t cifs "$share2mnt" -o user=nobody,password="",noperm /mnt/"$share" && notify-send "Netshare $share mounted" && exit 0 + notify-send "Netshare $share already mounted"; exit 1 +} + +sharemount diff --git a/.local/bin/dmenupass b/.local/bin/dmenupass @@ -0,0 +1,6 @@ +#!/bin/sh + +# This script is the SUDO_ASKPASS variable, meaning that it will be used as a +# password prompt if needed. + +dmenu -fn Monospace-18 -P -p "$1" <&- && echo diff --git a/.local/bin/dmenurecord b/.local/bin/dmenurecord @@ -0,0 +1,113 @@ +#!/bin/sh + +# Usage: +# `$0`: Ask for recording type via dmenu +# `$0 screencast`: Record both audio and screen +# `$0 video`: Record only screen +# `$0 audio`: Record only audio +# `$0 kill`: Kill existing recording +# +# If there is already a running instance, user will be prompted to end it. + +getdim() { + screens=$(swaymsg -t get_outputs | grep name | awk -F'"' '{print $4}') + choice=$(printf "$screens\nExit\n" | bemenu) + [ "${choice}" != "Exit" ] || [ -z "${choice}" ] || exit && + echo $choice +} + +updateicon() { \ + echo "$1" > /tmp/recordingicon + pkill -RTMIN+9 "${STATUSBAR:-i3blocks}" +} + +killrecording() { + recpid="$(cat /tmp/recordingpid)" + echo $recpid + kill -2 "$recpid" + rm -f /tmp/recordingpid + updateicon "" + pkill -RTMIN+9 "${STATUSBAR:-i3blocks}" +} + +screencast() { gpu-screen-recorder \ + -w "$(getdim)" \ + -f 60 \ + -a default_output \ + -a default_input \ + -o "$HOME/screencast-$(date '+%y%m%d-%H%M-%S').mp4" & + echo $! > /tmp/recordingpid + updateicon "โบ๏ธ๐ŸŽ™๏ธ" +} + +video() { gpu-screen-recorder \ + -w "$(getdim)" \ + -f 60 \ + -o "$HOME/video-$(date '+%y%m%d-%H%M-%S').mkv" & + echo $! > /tmp/recordingpid + updateicon "โบ๏ธ" +} + +webcamhidef() { ffmpeg \ + -f v4l2 \ + -i /dev/video0 \ + -video_size 1920x1080 \ + "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" & + echo $! > /tmp/recordingpid + updateicon "๐ŸŽฅ" +} + +webcam() { ffmpeg \ + -f v4l2 \ + -i /dev/video0 \ + -video_size 640x480 \ + "$HOME/webcam-$(date '+%y%m%d-%H%M-%S').mkv" & + echo $! > /tmp/recordingpid + updateicon "๐ŸŽฅ" +} + + +audio() { \ + ffmpeg \ + -f alsa -i default \ + -c:a flac \ + "$HOME/audio-$(date '+%y%m%d-%H%M-%S').flac" & + echo $! > /tmp/recordingpid + updateicon "๐ŸŽ™๏ธ" +} + +askrecording() { \ + choice=$(printf "screencast\\nvideo\\nvideo selected\\naudio\\nwebcam\\nwebcam (hi-def)" | bemenu -i -p "Select recording style:") + case "$choice" in + screencast) screencast;; + audio) audio;; + video) video;; + *selected) videoselected;; + webcam) webcam;; + "webcam (hi-def)") webcamhidef;; + esac +} + +asktoend() { \ + response=$(printf "No\\nYes" | bemenu -i -p "Recording still active. End recording?") && + [ "$response" = "Yes" ] && killrecording +} + +videoselected() +{ + slurp -f "%x %y %w %h" > /tmp/slurp + read -r X Y W H < /tmp/slurp + rm /tmp/slurp + wf-recorder -g "$X,$Y ${W}x${H}" -r 60 -f "$HOME/box-$(date '+%y%m%d-%H%M-%S').mkv" & + echo $! > /tmp/recordingpid + updateicon "โบ๏ธ" +} + +case "$1" in + screencast) screencast;; + audio) audio;; + video) video;; + *selected) videoselected;; + kill) killrecording;; + *) ([ -f /tmp/recordingpid ] && asktoend && exit) || askrecording;; +esac diff --git a/.local/bin/dmenuunicode b/.local/bin/dmenuunicode @@ -0,0 +1,18 @@ +#!/bin/sh + +# The famous "get a menu of emojis to copy" script. + +# Get user selection via bemenu from emoji file. +chosen=$(cut -d ';' -f1 ~/.local/share/larbs/chars/* | bemenu -i -l 30 | sed "s/ .*//") + +# Exit if none chosen. +[ -z "$chosen" ] && exit + +# If you run this command with an argument, it will automatically insert the +# character. Otherwise, show a message that the emoji has been copied. +if [ -n "$1" ]; then + xdotool type "$chosen" +else + printf "%s" "$chosen" | wl-copy + notify-send "'$chosen' copied to clipboard." & +fi diff --git a/.local/bin/getbib b/.local/bin/getbib @@ -0,0 +1,14 @@ +#!/bin/sh +[ -z "$1" ] && echo "Give either a pdf file or a DOI as an argument." && exit + +if [ -f "$1" ]; then + # Try to get DOI from pdfinfo or pdftotext output. + doi=$(pdfinfo "$1" | grep -io "doi:.*") || + doi=$(pdftotext "$1" 2>/dev/null - | sed -n '/[dD][oO][iI]:/{s/.*[dD][oO][iI]:\s*\(\S\+[[:alnum:]]\).*/\1/p;q}') || + exit 1 +else + doi="$1" +fi + +# Check crossref.org for the bib citation. +curl -s "https://api.crossref.org/works/$doi/transform/application/x-bibtex" -w "\\n" diff --git a/.local/bin/getcomproot b/.local/bin/getcomproot @@ -0,0 +1,9 @@ +#!/bin/sh + +# A helper script for LaTeX/groff files used by `compiler` and `opout`. +# The user can add the root file of a larger project as a comment as below: +# % root = mainfile.tex +# And the compiler script will run on that instead of the opened file. + +texroot="$(sed -n 's/^\s*%.*root\s*=\s*\(\S\+\).*/\1/p' "${1}")" +[ -f "${texroot}" ] && readlink -f "${texroot}" || exit "1" diff --git a/.local/bin/getkeys b/.local/bin/getkeys @@ -0,0 +1,5 @@ +#!/bin/sh + +cat "${XDG_DATA_HOME:-$HOME/.local/share}"/larbs/getkeys/"$1" 2>/dev/null && exit +echo "Run command with one of the following arguments for info about that program:" +ls "${XDG_DATA_HOME:-$HOME/.local/share}"/larbs/getkeys diff --git a/.local/bin/ifinstalled b/.local/bin/ifinstalled @@ -0,0 +1,12 @@ +#!/bin/sh + +# Some optional functions in LARBS require programs not installed by default. I +# use this little script to check to see if a command exists and if it doesn't +# it informs the user that they need that command to continue. This is used in +# various other scripts for clarity's sake. + +for x in "$@"; do + if ! which "$x" >/dev/null 2>&1 && ! pacman -Qq "$x" >/dev/null 2>&1; then + notify-send "๐Ÿ“ฆ $x" "must be installed for this function." && exit 1 ; + fi +done diff --git a/.local/bin/linkhandler b/.local/bin/linkhandler @@ -0,0 +1,26 @@ +#!/bin/sh + +# Feed script a url or file location. +# If an image, it will view in nsxiv, +# if a video or gif, it will view in mpv +# if a music file or pdf, it will download, +# otherwise it opens link in browser. + +if [ -z "$1" ]; then + url="$(wl-paste)" +else + url="$1" +fi + +case "$url" in + *mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtube.com/v/*|*youtube.com/shorts*|*youtu.be*|*inv.nadeko.net/watch*|*hooktube.com*|*bitchute.com*|*videos.lukesmith.xyz*|*odysee.com*) + setsid -f mpv -quiet "$url" >/dev/null 2>&1 ;; + *png|*jpg|*jpe|*jpeg|*gif|*webp) + curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && swayimg "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;; + *pdf|*cbz|*cbr) + curl -sL "$url" > "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" && zathura "/tmp/$(echo "$url" | sed "s/.*\///;s/%20/ /g")" >/dev/null 2>&1 & ;; + *mp3|*flac|*opus|*mp3?source*) + qndl "$url" 'curl -LO' >/dev/null 2>&1 ;; + *) + [ -f "$url" ] && setsid -f "$TERMINAL" -e "$EDITOR" "$url" >/dev/null 2>&1 || setsid -f "$BROWSER" "$url" >/dev/null 2>&1 +esac diff --git a/.local/bin/maimpick b/.local/bin/maimpick @@ -0,0 +1,24 @@ +#!/bin/sh + +# This is bound to Shift+PrintScreen by default, requires maim. It lets you +# choose the kind of screenshot to take, including copying the image or even +# highlighting an area to copy. scrotcucks on suicidewatch right now. + +# variables +output="$(date '+%y%m%d-%H%M-%S').png" +wclip_cmd="wl-copy -t image/png" +ocr_cmd="wl-copy" + +get_active_window() { + hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' +} + +case "$(printf "a selected area\\ncurrent window\\nfull screen\\na selected area (copy)\\ncurrent window (copy)\\nfull screen (copy)\\ncopy selected image to text" | bemenu -l 7 -i -p "Screenshot which area?")" in + "a selected area") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" pic-selected-"${output}" ;; + "current window") geometry=$(get_active_window) && sleep 0.2 && grim -g "$geometry" pic-window-"${output}" ;; + "full screen") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" pic-full-"${output}" ;; + "a selected area (copy)") geometry=$(slurp) && sleep 0.2 && grim -g "$geometry" - | ${wclip_cmd} ;; + "current window (copy)") geometry=$(get_active_window) && sleep 0.2 && grim -g "$geometry" - | ${wclip_cmd} ;; + "full screen (copy)") geometry=$(slurp -o) && sleep 0.2 && grim -g "$geometry" - | ${wclip_cmd} ;; + "copy selected image to text") tmpfile=$(mktemp /tmp/ocr-XXXXXX.png) && slurp | grim -g - - > "$tmpfile" && tesseract "$tmpfile" - -l eng | ${ocr_cmd} && rm "$tmpfile" ;; +esac diff --git a/.local/bin/mounter b/.local/bin/mounter @@ -0,0 +1,119 @@ +#!/bin/bash + +# Mounts Android Phones and USB drives (encrypted or not). This script will +# replace the older `dmenumount` which had extra steps and couldn't handle +# encrypted drives. +# TODO: Try decrypt for drives in crtypttab +# TODO: Add some support for connecting iPhones (although they are annoying). + +IFS=' +' +# Function for escaping cell-phone names. +escape(){ echo "$@" | iconv -cf UTF-8 -t ASCII//TRANSLIT | tr -d '[:punct:]' | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed "s/-\+/-/g;s/\(^-\|-\$\)//g" ;} + +# Check for phones. +phones="$(simple-mtpfs -l 2>/dev/null | sed "s/^/๐Ÿ“ฑ/")" +mountedphones="$(grep "simple-mtpfs" /etc/mtab)" +# If there are already mounted phones, remove them from the list of mountables. +[ -n "$mountedphones" ] && phones="$(for phone in $phones; do + for mounted in $mountedphones; do + escphone="$(escape "$phone")" + [[ "$mounted" =~ "$escphone" ]] && break 1 + done && continue 1 + echo "$phone" +done)" + +# Check for drives. +lsblkoutput="$(lsblk -rpo "uuid,name,type,size,label,mountpoint,fstype")" +# Get all LUKS drives +allluks="$(echo "$lsblkoutput" | grep crypto_LUKS)" +# Get a list of the LUKS drive UUIDs already decrypted. +decrypted="$(find /dev/disk/by-id/dm-uuid-CRYPT-LUKS2-* | sed "s|.*LUKS2-||;s|-.*||")" +# Functioning for formatting drives correctly for bemenu: +filter() { sed "s/ /:/g" | awk -F':' '$7==""{printf "%s%s (%s) %s\n",$1,$3,$5,$6}' ; } + +# Get only LUKS drives that are not decrypted. +unopenedluks="$(for drive in $allluks; do + uuid="${drive%% *}" + uuid="${uuid//-}" # This is a bashism. + [ -n "$decrypted" ] && for open in $decrypted; do + [ "$uuid" = "$open" ] && break 1 + done && continue 1 + echo "๐Ÿ”’ $drive" +done | filter)" + +# Get all normal, non-encrypted or decrypted partitions that are not mounted. +normalparts="$(echo "$lsblkoutput"| grep -v crypto_LUKS | grep 'part\|rom\|crypt' | sed "s/^/๐Ÿ’พ /" | filter )" + +# Add all to one variable. If no mountable drives found, exit. +alldrives="$(echo "$phones +$unopenedluks +$normalparts" | sed "/^$/d;s/ *$//")" + +# Quit the script if a sequential command fails. +set -e + +test -n "$alldrives" + +# Feed all found drives to bemenu and get user choice. +chosen="$(echo "$alldrives" | bemenu -p "Mount which drive?" -i)" + +# Function for prompting user for a mountpoint. +getmount(){ + mp="$(find /mnt /media /mount /home -maxdepth 1 -type d 2>/dev/null | bemenu -i -p "Mount this drive where?")" + test -n "$mp" + if [ ! -d "$mp" ]; then + mkdiryn=$(printf "No\\nYes" | bemenu -i -p "$mp does not exist. Create it?") + [ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || doas mkdir -p "$mp") + fi +} + +attemptmount(){ + # Attempt to mount without a mountpoint, to see if drive is in fstab. + doas mount "$chosen" || return 1 + notify-send "๐Ÿ’พDrive Mounted." "$chosen mounted." + exit +} + +case "$chosen" in + ๐Ÿ’พ*) + chosen="${chosen%% *}" + chosen="${chosen:1}" # This is a bashism. + parttype="$(echo "$lsblkoutput" | grep "$chosen")" + attemptmount || getmount + case "${parttype##* }" in + vfat) doas mount -t vfat "$chosen" "$mp" -o rw,umask=0000 ;; + btrfs) doas mount "$chosen" "$mp" ;; + *) doas mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)" ;; + esac + notify-send "๐Ÿ’พDrive Mounted." "$chosen mounted to $mp." + ;; + + ๐Ÿ”’*) + chosen="${chosen%% *}" + chosen="${chosen:1}" # This is a bashism. + # Number the drive. + while true; do + [ -f "/dev/mapper/usb$num" ] || break + num="$(printf "%02d" "$((num +1))")" + done + + # Decrypt in a terminal window + ${TERMINAL:-st} -n floatterm -g 60x1 -e doas cryptsetup open "$chosen" "usb$num" + # Check if now decrypted. + test -b "/dev/mapper/usb$num" + + attemptmount || getmount + doas mount "/dev/mapper/usb$num" "$mp" -o uid="$(id -u)",gid="$(id -g)" + notify-send "๐Ÿ”“Decrypted drive Mounted." "$chosen decrypted and mounted to $mp." + ;; + + ๐Ÿ“ฑ*) + notify-send "โ—Note" "Remember to allow file access on your phone now." + getmount + number="${chosen%%:*}" + number="${chosen:1}" # This is a bashism. + doas simple-mtpfs -o allow_other -o fsname="simple-mtpfs-$(escape "$chosen")" --device "$number" "$mp" + notify-send "๐Ÿค– Android Mounted." "Android device mounted to $mp." + ;; +esac diff --git a/.local/bin/noisereduce b/.local/bin/noisereduce @@ -0,0 +1,81 @@ +#!/usr/bin/sh + +usage () +{ + printf "Usage : noisereduce <input video file> <output video file>\n" + exit +} + +# Tests for requirements +ifinstalled ffmpeg || { echo >&2 "We require 'ffmpeg' but it's not installed."; exit 1; } +ifinstalled sox || { echo >&2 "We require 'ffmpeg' but it's not installed."; exit 1; } + +if [ "$#" -ne 2 ] +then + usage +fi + +if [ ! -e "$1" ] +then + printf "File not found: %s\n" "$1" + exit +fi + +if [ -e "$2" ] +then + printf "File %s already exists, overwrite? [y/N]\n: " "$2" + read -r yn + case $yn in + [Yy]* ) ;; + * ) exit;; + esac +fi + +inBasename=$(basename "$1") +inExt="${inBasename##*.}" + +isVideoStr=$(ffprobe -v warning -show_streams "$1" | grep codec_type=video) +if [ -n "$isVideoStr" ] +then + isVideo=1 + printf "Detected %s as a video file\n" "$inBasename" +else + isVideo=0 + printf "Detected %s as an audio file\n" "$inBasename" +fi + +printf "Sample noise start time [00:00:00]: " +read -r sampleStart +if [ -z "$sampleStart" ] ; then sampleStart="00:00:00"; fi +printf "Sample noise end time [00:00:00.900]: " +read -r sampleEnd +if [ -z "$sampleEnd" ] ; then sampleEnd="00:00:00.900"; fi +printf "Noise reduction amount [0.21]: " +read -r sensitivity +if [ -z "$sensitivity" ] ; then sensitivity="0.21"; fi + + +tmpVidFile="/tmp/noiseclean_tmpvid.$inExt" +tmpAudFile="/tmp/noiseclean_tmpaud.wav" +noiseAudFile="/tmp/noiseclean_noiseaud.wav" +noiseProfFile="/tmp/noiseclean_noise.prof" +tmpAudCleanFile="/tmp/noiseclean_tmpaud-clean.wav" + +printf "Cleaning noise on %s...\n" "$1" + +if [ $isVideo -eq "1" ]; then + ffmpeg -v warning -y -i "$1" -qscale:v 0 -vcodec copy -an "$tmpVidFile" + ffmpeg -v warning -y -i "$1" -qscale:a 0 "$tmpAudFile" +else + cp "$1" "$tmpAudFile" +fi +ffmpeg -v warning -y -i "$1" -vn -ss "$sampleStart" -t "$sampleEnd" "$noiseAudFile" +sox "$noiseAudFile" -n noiseprof "$noiseProfFile" +sox "$tmpAudFile" "$tmpAudCleanFile" noisered "$noiseProfFile" "$sensitivity" +if [ $isVideo -eq "1" ]; then + ffmpeg -v warning -y -i "$tmpAudCleanFile" -i "$tmpVidFile" -vcodec copy -qscale:v 0 -qscale:a 0 "$2" +else + cp "$tmpAudCleanFile" "$2" +fi + +printf "Done" diff --git a/.local/bin/opout b/.local/bin/opout @@ -0,0 +1,13 @@ +#!/bin/sh + +# opout: "open output": A general handler for opening a file's intended output, +# usually the pdf of a compiled document. I find this useful especially +# running from vim. + +basename="${1%.*}" + +case "${*}" in + *.tex|*.sil|*.m[dse]|*.[rR]md|*.mom|*.[0-9]) target="$(getcomproot "$1" || echo "$1")" ; setsid -f xdg-open "${target%.*}".pdf >/dev/null 2>&1 ;; + *.html) setsid -f "$BROWSER" "$basename".html >/dev/null 2>&1 ;; + *.sent) setsid -f sent "$1" >/dev/null 2>&1 ;; +esac diff --git a/.local/bin/pauseallmpv b/.local/bin/pauseallmpv @@ -0,0 +1,10 @@ +#!/bin/sh + +# You might notice all mpv commands are aliased to have this input-ipc-server +# thing. That's just for this particular command, which allows us to pause +# every single one of them with one command! This is bound to super + shift + p +# (with other things) by default and is used in some other places. + +for i in $(ls /tmp/mpvSockets/*); do + echo '{ "command": ["set_property", "pause", true] }' | socat - "$i"; +done diff --git a/.local/bin/peertubetorrent b/.local/bin/peertubetorrent @@ -0,0 +1,9 @@ +#!/bin/sh +# torrent peertube videos, requires the transadd script +# first argument is the video link, second is the quality (360, 480 or 1080) +# 13/07/20 - Arthur Bais + +instance=$(echo "$1" | sed "s|/w.\+||") +vidid=$(echo "$1" | sed "s|.\+/||") +link=$(curl -s "$instance/api/v1/videos/$vidid" | grep -o "$instance/download/torrents/.\{37\}$2.torrent") +transadd "$link" diff --git a/.local/bin/podentr b/.local/bin/podentr @@ -0,0 +1,7 @@ +#!/bin/sh + +# entr command to run `queueandnotify` when newsboat queue is changed + +[ "$(pgrep -x "$(basename "$0")" | wc -l)" -gt 2 ] && exit + +echo "${XDG_DATA_HOME:-$HOME/.local/share}"/newsboat/queue | entr -p queueandnotify 2>/dev/null diff --git a/.local/bin/portal b/.local/bin/portal @@ -0,0 +1,7 @@ +#!/bin/sh +sleep 1 +killall xdg-desktop-portal-hyprland +killall xdg-desktop-portal-wlr +killall xdg-desktop-portal +/lib/xdg-desktop-portal-hyprland & + diff --git a/.local/bin/qndl b/.local/bin/qndl @@ -0,0 +1,12 @@ +#!/bin/sh + +# $1 is a url; $2 is a command +[ -z "$1" ] && exit +base="$(basename "$1")" +notify-send "โณ Queuing $base..." +cmd="$2" +[ -z "$cmd" ] && cmd="yt-dlp --embed-metadata -ic" +idnum="$(tsp $cmd "$1")" +realname="$(echo "$base" | sed "s/?\(source\|dest\).*//;s/%20/ /g")" +tsp -D "$idnum" mv "$base" "$realname" +tsp -D "$idnum" notify-send "๐Ÿ‘ $realname done." diff --git a/.local/bin/queueandnotify b/.local/bin/queueandnotify @@ -0,0 +1,14 @@ +#!/bin/sh + +# Podboat sucks. This script replaces it. +# It reads the newsboat queue, queuing downloads with taskspooler. +# It also removes the junk from extensions. +queuefile="${XDG_DATA_HOME:-$HOME/.local/share}/newsboat/queue" + +while read -r line; do + [ -z "$line" ] && continue + url="${line%%[ ]*}" + qndl "$url" "curl -LO" +done < "$queuefile" + +echo > "$queuefile" diff --git a/.local/bin/remapd b/.local/bin/remapd @@ -0,0 +1,8 @@ +#!/bin/bash + +# Rerun the remaps script whenever a new input device is added. + +while :; do + remaps + grep -qP -m1 '[^un]bind.+\/[^:]+\(usb\)' <(udevadm monitor -u -t seat -s input -s usb) +done diff --git a/.local/bin/remaps b/.local/bin/remaps @@ -0,0 +1,11 @@ +#!/bin/sh + +# This script is called on startup to remap keys. +# Decrease key repeat delay to 300ms and increase key repeat rate to 50 per second. +xset r rate 300 50 +# Map the caps lock key to super, and map the menu key to right super. +setxkbmap -option caps:super,altwin:menu_win +# When caps lock is pressed only once, treat it as escape. +killall xcape 2>/dev/null ; xcape -e 'Super_L=Escape' +# Turn off caps lock if on since there is no longer a key for it. +xset -q | grep -q "Caps Lock:\s*on" && xdotool key Caps_Lock diff --git a/.local/bin/rotdir b/.local/bin/rotdir @@ -0,0 +1,12 @@ +#!/bin/sh + +# When I open an image from the file manager in nsxiv (the image viewer), I want +# to be able to press the next/previous keys to key through the rest of the +# images in the same directory. This script "rotates" the content of a +# directory based on the first chosen file, so that if I open the 15th image, +# if I press next, it will go to the 16th etc. Autistic, I know, but this is +# one of the reasons that nsxiv is great for being able to read standard input. + +[ -z "$1" ] && echo "usage: rotdir regex 2>&1" && exit 1 +base="$(basename "$1")" +ls "$PWD" | awk -v BASE="$base" 'BEGIN { lines = ""; m = 0; } { if ($0 == BASE) { m = 1; } } { if (!m) { if (lines) { lines = lines"\n"; } lines = lines""$0; } else { print $0; } } END { print lines; }' diff --git a/.local/bin/rssadd b/.local/bin/rssadd @@ -0,0 +1,18 @@ +#!/bin/sh + +if echo "$1" | grep -q "https*://\S\+\.[A-Za-z]\+\S*" ; then + url="$1" +else + url="$(grep -Eom1 '<[^>]+(rel="self"|application/[a-z]+\+xml)[^>]+>' "$1" | + grep -o "https?://[^\" ]")" + + echo "$url" | grep -q "https*://\S\+\.[A-Za-z]\+\S*" || + notify-send "That doesn't look like a full URL." && exit 1 +fi + +RSSFILE="${XDG_CONFIG_HOME:-$HOME/.config}/newsboat/urls" +if awk '{print $1}' "$RSSFILE" | grep "^$url$" >/dev/null; then + notify-send "You already have this RSS feed." +else + echo "$url" >> "$RSSFILE" && notify-send "RSS feed added." +fi diff --git a/.local/bin/sd b/.local/bin/sd @@ -0,0 +1,22 @@ +#!/bin/sh + +# Open a terminal window in the same directory as the currently active window. + +windowPID=$(xprop -id "$(xprop -root | sed -n "/_NET_ACTIVE_WINDOW/ s/^.*# // p")" | sed -n "/PID/ s/^.*= // p") +PIDlist=$(pstree -lpATna "$windowPID" | sed -En 's/.*,([0-9]+).*/\1/p' | tac) +for PID in $PIDlist; do + cmdline=$(ps -o args= -p "$PID") + process_group_leader=$(ps -o comm= -p "$(ps -o pgid= -p "$PID" | tr -d ' ')") + cwd=$(readlink /proc/"$PID"/cwd) + # zsh and lf won't be ignored even if it shows ~ or / + case "$cmdline" in + 'lf -server') continue ;; + "${SHELL##*/}"|'lf'|'lf '*) break ;; + esac + # git (and its sub-processes) will show the root of a repository instead of the actual cwd, so they're ignored + [ "$process_group_leader" = 'git' ] || [ ! -d "$cwd" ] && continue + # This is to ignore programs that show ~ or / instead of the actual working directory + [ "$cwd" != "$HOME" ] && [ "$cwd" != '/' ] && break +done +[ "$PWD" != "$cwd" ] && [ -d "$cwd" ] && { cd "$cwd" || exit 1; } +"$TERMINAL" diff --git a/.local/bin/setbg b/.local/bin/setbg @@ -0,0 +1,43 @@ +#!/bin/sh + +# This script does the following: +# Run by itself, set the wallpaper (at X start). +# If given a file, set that as the new wallpaper. +# If given a directory, choose random file in it. +# If wal is installed, also generates a colorscheme. + +# Location of link to wallpaper link. +bgloc="${XDG_DATA_HOME:-$HOME/.local/share}/bg" + +# Configuration files of applications that have their themes changed by pywal. +dunstconf="${XDG_CONFIG_HOME:-$HOME/.config}/dunst/dunstrc" +zathuraconf="${XDG_CONFIG_HOME:-$HOME/.config}/zathura/zathurarc" + +# Give -s as parameter to make notifications silent. +while getopts "s" o; do case "${o}" in + s) silent='1' ;; +esac done + +shift $((OPTIND - 1)) + +trueloc="$(readlink -f "$1")" && +case "$(file --mime-type -b "$trueloc")" in + image/* ) ln -sf "$trueloc" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Changing wallpaper..." ;; + inode/directory ) ln -sf "$(find "$trueloc" -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Random Wallpaper chosen." ;; + *) [ -z "$silent" ] && notify-send "๐Ÿ–ผ๏ธ Error" "Not a valid image or directory." ; exit 1;; +esac + +# If pywal is installed, use it. +if command -v wal >/dev/null 2>&1 ; then + wal -n -i "$(readlink -f $bgloc)" -o "${XDG_CONFIG_HOME:-$HOME/.config}/wal/postrun" >/dev/null 2>&1 +# If pywal is removed, return config files to normal. +else + [ -f "$dunstconf.bak" ] && unlink "$dunstconf" && mv "$dunstconf.bak" "$dunstconf" + [ -f "$zathuraconf.bak" ] && unlink "$zathuraconf" && mv "$zathuraconf.bak" "$zathuraconf" +fi + +#xwallpaper --zoom "$bgloc" +killall swaybg +swaybg -i "$bgloc" -m fill & +# If running, dwm hit the key to refresh the color scheme. +# pidof dwm >/dev/null && xdotool key super+F5 diff --git a/.local/bin/shortcuts b/.local/bin/shortcuts @@ -0,0 +1,45 @@ +#!/bin/sh + +bmdirs="${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-dirs" +bmfiles="${XDG_CONFIG_HOME:-$HOME/.config}/shell/bm-files" + +# Output locations. Unactivated progs should go to /dev/null. +shell_shortcuts="${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutrc" +shell_env_shortcuts="${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutenvrc" +zsh_named_dirs="${XDG_CONFIG_HOME:-$HOME/.config}/shell/zshnameddirrc" +lf_shortcuts="/dev/null" +vim_shortcuts="/dev/null" +qute_shortcuts="/dev/null" +fish_shortcuts="/dev/null" +vifm_shortcuts="/dev/null" + +# Remove, prepare files +rm -f "$lf_shortcuts" "$qute_shortcuts" "$zsh_named_dirs" "$vim_shortcuts" 2>/dev/null +printf "# vim: filetype=sh\\n" > "$fish_shortcuts" +printf "# vim: filetype=sh\\nalias " > "$shell_shortcuts" +printf "# vim: filetype=sh\\n" > "$shell_env_shortcuts" +printf "\" vim: filetype=vim\\n" > "$vifm_shortcuts" + +# Format the `directories` file in the correct syntax and sent it to all three configs. +eval "echo \"$(cat "$bmdirs")\"" | \ +awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\"); + printf(\"%s=\42cd %s && ls -A\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ; + printf(\"[ -n \42%s\42 ] && export %s=\42%s\42 \n\",\$1,\$1,\$2) >> \"$shell_env_shortcuts\" ; + printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\" ; + printf(\"abbr %s \42cd %s; and ls -A\42\n\",\$1,\$2) >> \"$fish_shortcuts\" ; + printf(\"map g%s :cd %s<CR>\nmap t%s <tab>:cd %s<CR><tab>\nmap M%s <tab>:cd %s<CR><tab>:mo<CR>\nmap Y%s <tab>:cd %s<CR><tab>:co<CR> \n\",\$1,\$2, \$1, \$2, \$1, \$2, \$1, \$2) >> \"$vifm_shortcuts\" ; + printf(\"config.bind(';%s', \42set downloads.location.directory %s ;; hint links download\42) \n\",\$1,\$2) >> \"$qute_shortcuts\" ; + printf(\"map C%s cd \42%s\42 \n\",\$1,\$2) >> \"$lf_shortcuts\" ; + printf(\"cmap ;%s %s\n\",\$1,\$2) >> \"$vim_shortcuts\" }" + +# Format the `files` file in the correct syntax and sent it to both configs. +eval "echo \"$(cat "$bmfiles")\"" | \ +awk "!/^\s*#/ && !/^\s*\$/ {gsub(\"\\\s*#.*$\",\"\"); + printf(\"%s=\42\$EDITOR %s\42 \\\\\n\",\$1,\$2) >> \"$shell_shortcuts\" ; + printf(\"[ -n \42%s\42 ] && export %s=\42%s\42 \n\",\$1,\$1,\$2) >> \"$shell_env_shortcuts\" ; + printf(\"hash -d %s=%s \n\",\$1,\$2) >> \"$zsh_named_dirs\" ; + printf(\"abbr %s \42\$EDITOR %s\42 \n\",\$1,\$2) >> \"$fish_shortcuts\" ; + printf(\"map %s :e %s<CR> \n\",\$1,\$2) >> \"$vifm_shortcuts\" ; + printf(\"map E%s \$\$EDITOR \42%s\42 \n\",\$1,\$2) >> \"$lf_shortcuts\" ; + printf(\"cmap ;%s %s\n\",\$1,\$2) >> \"$vim_shortcuts\" }" + diff --git a/.local/bin/singboxwrap b/.local/bin/singboxwrap @@ -0,0 +1,30 @@ +#!/bin/sh + +config_dir="/mnt/ssd/settings/sing-box" +default_path="${XDG_DATA_HOME:-$HOME/.local/share}/singboxcfg" + +input=$1 + +run_singbox () { + sing-box check -c "$1" && { + pidof sing-box >/dev/null && killall sing-box + setsid -f sing-box -c "$1" run + notify-send "sing-box with $(readlink "$1") is running now" + } || notify-send "Config check has failed. Check your configuration at $(readlink $1)" & exit 1 +} + +choose_menu () { + choose="$(ls $config_dir | bemenu -p "Config to use")" + [ -n "$choose" ] || exit 1 + ln -sf "$config_dir/$choose" "$default_path" + echo "$default_path" +} + +if [ ! -f "$default_path" ]; then + input="menu" +fi + +case $input in + menu) run_singbox $(choose_menu) ;; + *) run_singbox $default_path ;; +esac diff --git a/.local/bin/slider b/.local/bin/slider @@ -0,0 +1,126 @@ +#!/bin/sh + +# Give a file with images and timecodes and creates a video slideshow of them. +# +# Timecodes must be in format 00:00:00. +# +# Imagemagick and ffmpeg required. + +# Application cache if not stated elsewhere. +cache="${XDG_CACHE_HOME:-$HOME/.cache}/slider" + +while getopts "hvrpi:c:a:o:d:f:t:e:x:s:" o; do case "${o}" in + c) bgc="$OPTARG" ;; + t) fgc="$OPTARG" ;; + f) font="$OPTARG" ;; + i) file="$OPTARG" ;; + a) audio="$OPTARG" ;; + o) outfile="$OPTARG" ;; + d) prepdir="$OPTARG" ;; + r) redo="$OPTARG" ;; + s) ppt="$OPTARG" ;; + e) endtime="$OPTARG" ;; + x) res="$OPTARG" + echo "$res" | grep -qv "^[0-9]\+x[0-9]\+$" && + echo "Resolution must be dimensions separated by a 'x': 1280x720, etc." && + exit 1 ;; + p) echo "Purge old build files in $cache? [y/N]" + read -r confirm + echo "$confirm" | grep -iq "^y$" && rm -rf "$cache" && echo "Done." + exit ;; + v) verbose=True ;; + *) echo "$(basename "$0") usage: + -i input timecode list (required) + -a audio file + -c color of background (use html names, black is default) + -t text color for text slides (white is default) + -s text font size for text slides (150 is default) + -f text font for text slides (sans serif is default) + -o output video file + -e if no audio given, the time in seconds that the last slide will be shown (5 is default) + -x resolution (1920x1080 is default) + -d tmp directory + -r rerun imagemagick commands even if done previously (in case files or background has changed) + -p purge old build files instead of running + -v be verbose" && exit 1 + +esac done + +# Check that the input file looks like it should. +{ head -n 1 "$file" 2>/dev/null | grep -q "^00:00:00 " ;} || { + echo "Give an input file with -i." && + echo "The file should look as this example: + +00:00:00 first_image.jpg +00:00:03 otherdirectory/next_image.jpg +00:00:09 this_image_starts_at_9_seconds.jpg +etc... + +Timecodes and filenames must be separated by Tabs." && + exit 1 + } + +if [ -n "${audio+x}" ]; then + # Check that the audio file looks like an actual audio file. + case "$(file --dereference --brief --mime-type -- "$audio")" in + audio/*) ;; + *) echo "That doesn't look like an audio file."; exit 1 ;; + esac + totseconds="$(date '+%s' -d $(ffmpeg -i "$audio" 2>&1 | awk '/Duration/ {print $2}' | sed s/,//))" +fi + +prepdir="${prepdir:-$cache/$file}" +outfile="${outfile:-$file.mp4}" +prepfile="$prepdir/$file.prep" + +[ -n "${verbose+x}" ] && echo "Preparing images... May take a while depending on the number of files." +mkdir -p "$prepdir" + +{ +while read -r x; +do + # Get the time from the first column. + time="${x%% *}" + seconds="$(date '+%s' -d "$time")" + # Duration is not used on the first looped item. + duration="$((seconds - prevseconds))" + + # Get the filename/text content from the rest. + content="${x#* }" + base="$(basename "$content")" + base="${base%.*}.jpg" + + if [ -f "$content" ]; then + # If images have already been made in a previous run, do not recreate + # them unless -r was given. + { [ ! -f "$prepdir/$base" ] || [ -n "${redo+x}" ] ;} && + magick -size "${res:-1920x1080}" canvas:"${bgc:-black}" -gravity center "$content" -resize 1920x1080 -composite "$prepdir/$base" + else + { [ ! -f "$prepdir/$base" ] || [ -n "${redo+x}" ] ;} && + magick -size "${res:-1920x1080}" -background "${bgc:-black}" -fill "${fgc:-white}" -font "${font:-Sans}" -pointsize "${ppt:-150}" -gravity center label:"$content" "$prepdir/$base" + fi + + # If the first line, do not write yet. + [ "$time" = "00:00:00" ] || echo "file '$prevbase' +duration $duration" + + # Keep the information required for the next file. + prevbase="$base" + prevtime="$time" + prevseconds="$(date '+%s' -d "$prevtime")" +done < "$file" +# Do last file which must be given twice as follows +endtime="$((totseconds-seconds))" +echo "file '$base' +duration ${endtime:-5} +file '$base'" +} > "$prepfile" +if [ -n "${audio+x}" ]; then + ffmpeg -hide_banner -y -f concat -safe 0 -i "$prepfile" -i "$audio" -c:a aac -vsync vfr -c:v libx264 -pix_fmt yuv420p "$outfile" +else + ffmpeg -hide_banner -y -f concat -safe 0 -i "$prepfile" -vsync vfr -c:v libx264 -pix_fmt yuv420p "$outfile" +fi + +# Might also try: +# -vf "fps=${fps:-24},format=yuv420p" "$outfile" +# but has given some problems. diff --git a/.local/bin/start-pipewire b/.local/bin/start-pipewire @@ -0,0 +1,5 @@ +#!/bin/sh +killall pipewire +killall pipewire-pulse +killall wireplumber +setsid -f pipewire diff --git a/.local/bin/statusbar/sb-battery b/.local/bin/statusbar/sb-battery @@ -0,0 +1,37 @@ +#!/bin/sh + +# Prints all batteries, their percentage remaining and an emoji corresponding +# to charge status (๐Ÿ”Œ for plugged up, ๐Ÿ”‹ for discharging on battery, etc.). + +case $1 in + 3) notify-send "๐Ÿ”‹ Battery module" "๐Ÿ”‹: discharging +๐Ÿ›‘: not charging +โ™ป: stagnant charge +๐Ÿ”Œ: charging +โšก: charged +โ—: battery very low! +- Scroll to change adjust xbacklight." ;; + 4) xbacklight -inc 10 ;; + 5) xbacklight -dec 10 ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +# Loop through all attached batteries and format the info +for battery in /sys/class/power_supply/BAT?*; do + # If non-first battery, print a space separator. + [ -n "${capacity+x}" ] && printf " " + # Sets up the status and capacity + case "$(cat "$battery/status" 2>&1)" in + "Full") status="โšก" ;; + "Discharging") status="๐Ÿ”‹" ;; + "Charging") status="๐Ÿ”Œ" ;; + "Not charging") status="๐Ÿ›‘" ;; + "Unknown") status="โ™ป๏ธ" ;; + *) exit 1 ;; + esac + capacity="$(cat "$battery/capacity" 2>&1)" + # Will make a warn variable if discharging and low + [ "$status" = "๐Ÿ”‹" ] && [ "$capacity" -le 25 ] && warn="โ—" + # Prints the info + printf "%s%s%d%%" "$status" "$warn" "$capacity"; unset warn +done && printf "\\n" diff --git a/.local/bin/statusbar/sb-brightness b/.local/bin/statusbar/sb-brightness @@ -0,0 +1,23 @@ +#!/bin/sh + +# current brightness +curr_brightness=$(cat /sys/class/backlight/*/brightness) + +# max_brightness +max_brightness=$(cat /sys/class/backlight/*/max_brightness) + +# brightness percentage +brightness_per=$((100 * curr_brightness / max_brightness)) + +case $1 in + 1) + ;; + 3) + notify-send "๐Ÿ’ก Brightness module" "\- Shows current brightness level โ˜€๏ธ." + ;; + 8) + setsid -f "$TERMINAL" -e "$EDITOR" "$0" + ;; +esac + +echo "๐Ÿ’ก ${brightness_per}%" diff --git a/.local/bin/statusbar/sb-clock b/.local/bin/statusbar/sb-clock @@ -0,0 +1,29 @@ +#!/bin/sh + +clock=$(date '+%I') + +case "$clock" in + "00") icon="๐Ÿ•›" ;; + "01") icon="๐Ÿ•" ;; + "02") icon="๐Ÿ•‘" ;; + "03") icon="๐Ÿ•’" ;; + "04") icon="๐Ÿ•“" ;; + "05") icon="๐Ÿ•”" ;; + "06") icon="๐Ÿ••" ;; + "07") icon="๐Ÿ•–" ;; + "08") icon="๐Ÿ•—" ;; + "09") icon="๐Ÿ•˜" ;; + "10") icon="๐Ÿ•™" ;; + "11") icon="๐Ÿ•š" ;; + "12") icon="๐Ÿ•›" ;; +esac + +case $1 in + 1) notify-send "This Month" "$(cal | sed "s/\<$(date +'%e'|tr -d ' ')\>/<b><span color='red'>&<\/span><\/b>/")" && notify-send "Appointments" "$(calcurse -d3)" ;; + 2) setsid -f "$TERMINAL" -e calcurse ;; + 3) notify-send "๐Ÿ“… Time/date module" "\- Left click to show upcoming appointments for the next three days via \`calcurse -d3\` and show the month via \`cal\` +- Middle click opens calcurse if installed" ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +date "+%Y %b %d (%a) $icon%I:%M%p" diff --git a/.local/bin/statusbar/sb-cpu b/.local/bin/statusbar/sb-cpu @@ -0,0 +1,12 @@ +#!/bin/sh + +case $1 in + 1) notify-send "๐Ÿ–ฅ CPU hogs" "$(ps axch -o cmd:15,%cpu --sort=-%cpu | head)\\n(100% per core)" ;; + 2) setsid -f "$TERMINAL" -e htop ;; + 3) notify-send "๐Ÿ–ฅ CPU module " "\- Shows CPU temperature. +- Click to show intensive processes. +- Middle click to open htop." ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +sensors | awk '/Core 0/ {print "๐ŸŒก" $3}' diff --git a/.local/bin/statusbar/sb-cpubars b/.local/bin/statusbar/sb-cpubars @@ -0,0 +1,44 @@ +#!/bin/sh + +# Module showing CPU load as a changing bars. +# Just like in polybar. +# Each bar represents amount of load on one core since +# last run. + +# Cache in tmpfs to improve speed and reduce SSD load +cache=/tmp/cpubarscache + +case $1 in + 2) setsid -f "$TERMINAL" -e htop ;; + 3) notify-send "๐Ÿชจ CPU load module" "Each bar represents +one CPU core";; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +# id total idle +stats=$(awk '/cpu[0-9]+/ {printf "%d %d %d\n", substr($1,4), ($2 + $3 + $4 + $5), $5 }' /proc/stat) +[ ! -f $cache ] && echo "$stats" > "$cache" +old=$(cat "$cache") +printf "๐Ÿชจ" +echo "$stats" | while read -r row; do + id=${row%% *} + rest=${row#* } + total=${rest%% *} + idle=${rest##* } + + case "$(echo "$old" | awk '{if ($1 == id) + printf "%d\n", (1 - (idle - $3) / (total - $2))*100 /12.5}' \ + id="$id" total="$total" idle="$idle")" in + + "0") printf "โ–";; + "1") printf "โ–‚";; + "2") printf "โ–ƒ";; + "3") printf "โ–„";; + "4") printf "โ–…";; + "5") printf "โ–†";; + "6") printf "โ–‡";; + "7") printf "โ–ˆ";; + "8") printf "โ–ˆ";; + esac +done; printf "\\n" +echo "$stats" > "$cache" diff --git a/.local/bin/statusbar/sb-disk b/.local/bin/statusbar/sb-disk @@ -0,0 +1,23 @@ +#!/bin/sh + +# Status bar module for disk space +# $1 should be drive mountpoint, otherwise assumed /. + +location=${1:-/} + +[ -d "$location" ] || exit + +case $1 in + 1) notify-send "๐Ÿ’ฝ Disk space" "$(df -h --output=target,used,size)" ;; + 3) notify-send "๐Ÿ’ฝ Disk module" "\- Shows used hard drive space. +- Click to show all disk info." ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +case "$location" in + "/home"* ) icon="๐Ÿ " ;; + "/mnt"* ) icon="๐Ÿ’พ" ;; + *) icon="๐Ÿ–ฅ";; +esac + +printf "%s: %s\n" "$icon" "$(df -h "$location" | awk ' /[0-9]/ {print $3 "/" $2}')" diff --git a/.local/bin/statusbar/sb-doppler b/.local/bin/statusbar/sb-doppler @@ -0,0 +1,280 @@ +#!/bin/sh + +# Show a Doppler RADAR of a user's preferred location. + +secs=600 # Download a new doppler radar if one hasn't been downloaded in $secs seconds. +radarloc="${XDG_CACHE_HOME:-$HOME/.cache}/radar" +doppler="${XDG_CACHE_HOME:-$HOME/.cache}/doppler.gif" + +pickloc() { chosen="$(echo "US: CONUS: Continental United States +US: Northeast +US: Southeast +US: PacNorthWest +US: PacSouthWest +US: UpperMissVly +US: SouthMissVly +US: SouthPlains +US: NorthRockies +US: SouthRockies +US: Alaska +US: Carib +US: Hawaii +US: CentGrLakes +US: Conus-Large +US: KABR: Aberdeen, SD +US: KBIS: Bismarck, ND +US: KFTG: Denver/Boulder, CO +US: KDMX: Des Moines, IA +US: KDTX: Detroit, MI +US: KDDC: Dodge City, KS +US: KDLH: Duluth, MN +US: KCYS: Cheyenne, WY +US: KLOT: Chicago, IL +US: KGLD: Goodland, KS +US: KUEX: Hastings, NE +US: KGJX: Grand Junction, CO +US: KGRR: Grand Rapids, MI +US: KMVX: Fargo/Grand Forks, ND +US: KGRB: Green Bay, WI +US: KIND: Indianapolis, IN +US: KJKL: Jackson, KY +US: KARX: La Crosse, WI +US: KILX: Lincoln/Central Illinois, IL +US: KLVX: Louisville, KY +US: KMQT: Marquette +US: KMKX: Milwaukee, WI +US: KMPX: Minneapolis, MN +US: KAPX: Gaylord/Alpena, MI +US: KLNX: North Platte, NE +US: KIWX: N. Webster/Northern, IN +US: KOAX: Omaha, NE +US: KPAH: Paducah, KY +US: KEAX: Pleasant Hill, MO +US: KPUX: Pueblo, CO +US: KDVN: Quad Cities, IA +US: KUDX: Rapid City, SD +US: KRIW: Riverton, WY +US: KSGF: Springfield, MO +US: KLSX: St. LOUIS, MO +US: KFSD: Sioux Falls, SD +US: KTWX: Topeka, KS +US: KICT: Wichita, KS +US: KVWX: Paducah, KY +US: ICAO: Responsible Wfo +US: KLTX: WILMINGTON, NC +US: KCCX: State College/Central, PA +US: KLWX: Sterling, VA +US: KFCX: Blacksburg/Roanoke, VA +US: KRAX: Raleigh/Durham, NC +US: KGYX: Portland, ME +US: KDIX: Mt Holly/Philadelphia, PA +US: KPBZ: Pittsburgh, PA +US: KAKQ: Wakefield, VA +US: KMHX: Morehead City, NC +US: KGSP: Greer/Greenville/Sprtbg, SC +US: KILN: Wilmington/Cincinnati, OH +US: KCLE: Cleveland, OH +US: KCAE: Columbia, SC +US: KBGM: Binghamton, NY +US: KENX: Albany, NY +US: KBUF: Buffalo, NY +US: KCXX: Burlington, VT +US: KCBW: Caribou, ME +US: KBOX: Boston /Taunton, MA +US: KOKX: New York City, NY +US: KCLX: Charleston, SC +US: KRLX: Charleston, WV +US: ICAO: Responsible WFO +US: KBRO: Brownsville, TX +US: KABX: Albuquerque, NM +US: KAMA: Amarillo, TX +US: KFFC: Peachtree City/Atlanta, GA +US: KEWX: Austin/Sanantonio, TX +US: KBMX: Birmingham, AL +US: KCRP: Corpus Christi, TX +US: KFWS: Dallas / Ft. Worth, TX +US: KEPZ: El Paso, TX +US: KHGX: Houston/ Galveston, TX +US: KJAX: Jacksonville, FL +US: KBYX: Key West, FL +US: KMRX: Morristown/knoxville, TN +US: KLBB: Lubbock, TX +US: KLZK: Little Rock, AR +US: KLCH: Lake Charles, LA +US: KOHX: Nashville, TN +US: KMLB: Melbourne, FL +US: KNQA: Memphis, TN +US: KAMX: Miami, FL +US: KMAF: Midland/odessa, TX +US: KTLX: Norman, OK +US: KHTX: Huntsville, AL +US: KMOB: Mobile, AL +US: KTLH: Tallahassee, FL +US: KTBW: Tampa Bay Area, FL +US: KSJT: San Angelo, TX +US: KINX: Tulsa, OK +US: KSRX: Tulsa, OK +US: KLIX: New Orleans/slidell, LA +US: KDGX: Jackson, MS +US: KSHV: Shreveport, LA +US: ICAO: Responsible WFO +US: KLGX: Seattle / Tacoma, WA +US: KOTX: Spokane, WA +US: KEMX: Tucson, AZ +US: KYUX: Phoenix, AZ +US: KNKX: San Diego, CA +US: KMUX: Monterey/san Francisco, CA +US: KHNX: San Joaquin/hanford, CA +US: KSOX: San Diego, CA +US: KATX: Seattle / Tacoma, WA +US: KIWA: Phoenix, AZ +US: KRTX: Portland, OR +US: KSFX: Pocatello, ID +US: KRGX: Reno, NV +US: KDAX: Sacramento, CA +US: KMTX: Salt Lake City, UT +US: KPDT: Pendleton, OR +US: KMSX: Missoula, MT +US: KESX: Las Vegas, NV +US: KVTX: Los Angeles, CA +US: KMAX: Medford, OR +US: KFSX: Flagstaff, AZ +US: KGGW: Glasgow, MT +US: KLRX: Elko, NV +US: KBHX: Eureka, CA +US: KTFX: Great Falls, MT +US: KCBX: Boise, ID +US: KBLX: Billings, MT +US: KICX: Salt Lake City, UT +US: ICAO: Responsible Wfo W/ MSCF +US: PABC: Anchorage, AK +US: PAPD: Fairbanks, AK +US: PHKM: Honolulu, HI +US: PAHG: Anchorage, AK +US: PAKC: Anchorage, AK +US: PAIH: Anchorage, AK +US: PHMO: Honolulu, HI +US: PAEC: Fairbanks, AK +US: TJUA: San Juan, PR +US: PACG: Juneau, AK +US: PHKI: Honolulu, HI +US: PHWA: Honolulu, HI +US: ICAO: Responsible Wfo W/ MSCF +US: KFDR: Norman, OK +US: PGUA: Guam +US: KBBX: Sacramento, CA +US: KFDX: Albuquerque, NM +US: KGWX: Jackson, MS +US: KDOX: Wakefield, VA +US: KDYX: San Angelo, TX +US: KEYX: Las Vegas, NV +US: KEVX: Mobile, AL +US: KHPX: Paducah, KY +US: KTYX: Burlington, VT +US: KGRK: Dallas / Ft. Worth, TX +US: KPOE: Lake Charles, LA +US: KEOX: Tallahassee, FL +US: KHDX: El Paso, TX +US: KDFX: San Antonio, TX +US: KMXX: Birmingham, AL +US: KMBX: Bismarck, ND +US: KVAX: Jacksonville, FL +US: KJGX: Peachtree City/atlanta, GA +US: KVNX: Norman, OK +US: KVBX: Vandenberg Afb: Orcutt, CA +EU: Europe +EU: GB: Great Brittain +EU: SCAN: Scandinavia. Norway, Sweden And Denmark +EU: ALPS: The Alps +EU: NL: The Netherlands +EU: DE: Germany +EU: SP: Spain +EU: FR: France +EU: IT: Italy +EU: PL: Poland +EU: GR: Greece +EU: TU: Turkey +EU: RU: Russia +EU: BA: Bahrain +EU: BC: Botswana +EU: SE: Republic of Seychelles +EU: HU: Hungary +EU: UK: Ukraine +AF: AF: Africa +AF: WA: West Africa +AF: ZA: South Africa +AF: DZ: Algeria +AF: CE: Canary Islands +AF: NG: Nigeria +AF: TD: Chad +AF: CG: Democratic Republic of Congo +AF: EG: Egypt +AF: ET: Ethiopia +AF: CM: Cameroon +AF: IS: Israel +AF: LY: Libya +AF: MG: Madagascar +AF: MO: Morocco +AF: BW: Namibia +AF: SA: Saudi Arabia +AF: SO: Somalia +AF: SD: Sudan +AF: TZ: Tanzania +AF: TN: Tunisia +AF: ZM: Zambia +AF: KE: Kenya +AF: AO: Angola +DE: BAW: Baden-Wรผrttemberg +DE: BAY: Bavaria +DE: BBB: Berlin +DE: BBB: Brandenburg +DE: HES: Hesse +DE: MVP: Mecklenburg-Western Pomerania +DE: NIB: Lower Saxony +DE: NIB: Bremen +DE: NRW: North Rhine-Westphalia +DE: RPS: Rhineland-Palatinate +DE: RPS: Saarland +DE: SAC: Saxony +DE: SAA: Saxony-Anhalt +DE: SHH: Schleswig-Holstein +DE: SHH: Hamburg +DE: THU: Thuringia" | dmenu -r -i -l 50 -p "Select a radar to use as default:" | tr "[:lower:]" "[:upper:]")" + +# Ensure user did not escape. +[ -z "$chosen" ] && exit 1 + +# Set continent code and radar code. +continentcode=${chosen%%:*} +radarcode=${chosen#* } radarcode=${radarcode%:*} + +# Print codes to $radarloc file. + printf "%s,%s\\n" "$continentcode" "$radarcode" > "$radarloc" ;} + +getdoppler() { + cont=$(cut -c -2 "$radarloc") + loc=$(cut -c 4- "$radarloc") + notify-send "๐ŸŒฆ๏ธ Doppler RADAR" "Pulling most recent Doppler RADAR for $loc." + case "$cont" in + "US") curl -sL "https://radar.weather.gov/ridge/standard/${loc}_loop.gif" > "$doppler" ;; + "EU") curl -sL "https://api.sat24.com/animated/${loc}/rainTMC/2/" > "$doppler" ;; + "AF") curl -sL "https://api.sat24.com/animated/${loc}/rain/2/" > "$doppler" ;; + "DE") loc="$(echo "$loc" | tr "[:upper:]" "[:lower:]")" + curl -sL "https://www.dwd.de/DWD/wetter/radar/radfilm_${loc}_akt.gif" > "$doppler" ;; + esac +} + +showdoppler() { setsid -f mpv --no-osc --loop=inf --no-terminal "$doppler" ;} + +case $1 in + 1) [ ! -f "$radarloc" ] && pickloc && getdoppler + [ $(($(date '+%s') - $(stat -c %Y "$doppler"))) -gt "$secs" ] && getdoppler + showdoppler ;; + 2) pickloc && getdoppler && showdoppler ;; + 3) notify-send "๐Ÿ—บ๏ธ Doppler RADAR module" "\- Left click for local Doppler RADAR. +- Middle click to update RADAR location. +After $secs seconds, new clicks will also automatically update the doppler RADAR." ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +echo ๐ŸŒ… diff --git a/.local/bin/statusbar/sb-forecast b/.local/bin/statusbar/sb-forecast @@ -0,0 +1,65 @@ +#!/bin/sh + +# Displays today's precipication chance (โ˜”), and daily low (๐Ÿฅถ) and high (๐ŸŒž). +# Usually intended for the statusbar. + +url="${WTTRURL:-wttr.in}" +weatherreport="${XDG_CACHE_HOME:-$HOME/.cache}/weatherreport" + +# Get a weather report from 'wttr.in' and save it locally. +getforecast() { { grep -q -m1 '^up$' /sys/class/net/w*/operstate || grep -q -m1 '^up$' /sys/class/net/e*/operstate; } && + curl -sf "$url/$LOCATION" --output "$weatherreport" && touch "$weatherreport" +} + +# Forecast should be updated only once a day. +checkforecast() { + [ "$(stat -c %y "$weatherreport" 2>/dev/null | + cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ] +} + +getprecipchance() { + echo "$weatherdata" | sed '16q;d' | # Extract line 16 from file + grep -wo "[0-9]*%" | # Find a sequence of digits followed by '%' + sort -rn | # Sort in descending order + head -1q # Extract first line +} + +getdailyhighlow() { + echo "$weatherdata" | sed '13q;d' | # Extract line 13 from file + grep -o "m\\([-+]\\)*[0-9]\\+" | # Find temperatures in the format "m<signed number>" + sed 's/[+m]//g' | # Remove '+' and 'm' + sort -g | # Sort in ascending order + sed -e 1b -e '$!d' # Extract the first and last lines +} + +readfile() { weatherdata="$(cat "$weatherreport")" ;} + +showweather() { + readfile + # shellcheck disable=SC2046,SC2183 + printf "โ˜”%s ๐Ÿฅถ%sยฐ ๐ŸŒž%sยฐ\n" "$(getprecipchance)" $(getdailyhighlow) +} + +case $1 in + 1) setsid -f "$TERMINAL" -e less -Sf "$weatherreport" ;; + 2) getforecast && showweather ;; + 3) notify-send "๐ŸŒˆ Weather module" "\- Left click for full forecast. +- Middle click to update forecast. +โ˜”: Chance of rain/snow +๐Ÿฅถ: Daily low +๐ŸŒž: Daily high" ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +# shellcheck disable=SC2015 +checkforecast && showweather || + ( flock -n 9 && + ( tries=0; while [ $tries -ne 100 ]; do + getforecast && break || + { tries=$((tries+1)); sleep .1; } + done + ! checkforecast && + until getforecast; do sleep 60; done + pkill -RTMIN+"${1:-5}" "${STATUSBAR:-waybar}" + ) & + echo ) 9>"${XDG_RUNTIME_DIR}/sb-forecast.lock" diff --git a/.local/bin/statusbar/sb-internet b/.local/bin/statusbar/sb-internet @@ -0,0 +1,33 @@ +#!/bin/sh + +# Show wifi ๐Ÿ“ถ and percent strength or ๐Ÿ“ก if none. +# Show ๐ŸŒ if connected to ethernet or โŽ if none. +# Show ๐Ÿ”’ if a vpn connection is active + +case $1 in + 1) "$TERMINAL" -e nmtui; pkill -RTMIN+4 waybar ;; + 3) notify-send "๐ŸŒ Internet module" "\- Click to connect +โŒ: wifi disabled +๐Ÿ“ก: no wifi connection +๐Ÿ“ถ: wifi connection with quality +โŽ: no ethernet +๐ŸŒ: ethernet working +๐Ÿ”’: vpn is active +" ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +# Wifi +if [ "$(cat /sys/class/net/w*/operstate 2>/dev/null)" = 'up' ] ; then + wifiicon="$(awk '/^\s*w/ { print "๐Ÿ“ถ", int($3 * 100 / 70) "% " }' /proc/net/wireless)" +elif [ "$(cat /sys/class/net/w*/operstate 2>/dev/null)" = 'down' ] ; then + [ "$(cat /sys/class/net/w*/flags 2>/dev/null)" = '0x1003' ] && wifiicon="๐Ÿ“ก " || wifiicon="โŒ " +fi + +# Ethernet +[ "$(cat /sys/class/net/e*/operstate 2>/dev/null)" = 'up' ] && ethericon="๐ŸŒ" || ethericon="โŽ" + +# TUN +[ -n "$(cat /sys/class/net/libre*/operstate 2>/dev/null)" ] && tunicon=" ๐Ÿ”’" + +printf "%s%s%s\n" "$wifiicon" "$ethericon" "$tunicon" diff --git a/.local/bin/statusbar/sb-iplocate b/.local/bin/statusbar/sb-iplocate @@ -0,0 +1,15 @@ +#!/bin/sh + +# Gets your public ip address checks which country you are in and +# displays that information in the statusbar +# +# https://www.maketecheasier.com/ip-address-geolocation-lookups-linux/ + +set -e + +ifinstalled "geoip" +addr="$(geoiplookup "$(curl -sfm 1 ifconfig.me 2>/dev/null)")" +name="${addr##*, }" +flag="$(grep "flag: $name" "${XDG_DATA_HOME:-$HOME/.local/share}/larbs/emoji")" +flag="${flag%% *}" +printf "%s %s\\n" "$flag" "$name" diff --git a/.local/bin/statusbar/sb-kbselect b/.local/bin/statusbar/sb-kbselect @@ -0,0 +1,17 @@ +#!/bin/sh +# works on any init system +# requirements: dmenu, xorg-setxkbmap +kb="$(setxkbmap -query | grep -oP 'layout:\s*\K\w+')" || exit 1 + +case $1 in + 1) kb_choice="$(awk '/! layout/{flag=1; next} /! variant/{flag=0} flag {print $2, "- " $1}' /usr/share/X11/xkb/rules/base.lst | dmenu -l 15)" + [ -z "$kb_choice" ] && exit 0 + kb="$(echo "$kb_choice" | awk '{print $3}')" + setxkbmap "$kb" + pkill -RTMIN+30 "${STATUSBAR:-waybar}";; + 3) notify-send "โŒจ Keyboard/language module" "$(printf "%s" "\- Current layout: $(setxkbmap -query | grep -oP 'layout:\s*\K\w+')") +- Left click to change keyboard.";; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +echo "$kb" diff --git a/.local/bin/statusbar/sb-mailbox b/.local/bin/statusbar/sb-mailbox @@ -0,0 +1,20 @@ +#!/bin/sh + +# Displays number of unread mail and an loading icon if updating. +# When clicked, brings up `neomutt`. + +case $1 in + 1) setsid -w -f "$TERMINAL" -e neomutt; pkill -RTMIN+12 "${STATUSBAR:-waybar}" ;; + 2) setsid -f mailsync >/dev/null ;; + 3) notify-send "๐Ÿ“ฌ Mail module" "\- Shows unread mail +- Shows ๐Ÿ”ƒ if syncing mail +- Left click opens neomutt +- Middle click syncs mail" ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +unread="$(find "${XDG_DATA_HOME:-$HOME/.local/share}"/mail/*/[Ii][Nn][Bb][Oo][Xx]/new/* -type f | wc -l 2>/dev/null)" + +pidof mailsync >/dev/null 2>&1 && icon="๐Ÿ”ƒ" + +[ "$unread" = "0" ] && [ "$icon" = "" ] || echo "๐Ÿ“ฌ$unread$icon" diff --git a/.local/bin/statusbar/sb-memory b/.local/bin/statusbar/sb-memory @@ -0,0 +1,12 @@ +#!/bin/sh + +case $1 in + 1) notify-send "๐Ÿง  Memory hogs" "$(ps axch -o cmd:15,%mem --sort=-%mem | head)" ;; + 2) setsid -f "$TERMINAL" -e btop ;; + 3) notify-send "๐Ÿง  Memory module" "\- Shows Memory Used/Total. +- Click to show memory hogs. +- Middle click to open htop." ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +free --mebi | sed -n '2{p;q}' | awk '{printf ("๐Ÿง %sMB\n", ($3))}' diff --git a/.local/bin/statusbar/sb-microphone b/.local/bin/statusbar/sb-microphone @@ -0,0 +1,39 @@ +#!/bin/sh + +# Prints the current microphone volume or ๏„ฑ if muted. + +case $1 in + 1) setsid -w -f "$TERMINAL" -e pulsemixer; pkill -RTMIN+23 "${STATUSBAR:-waybar}" ;; + 2) wpctl set-mute @DEFAULT_SOURCE@ toggle ;; + 4) wpctl set-volume @DEFAULT_SOURCE@ 1%+ ;; + 5) wpctl set-volume @DEFAULT_SOURCE@ 1%- ;; + 3) notify-send "๐ŸŽค Microphone volume module" "\- Shows volume ๐ŸŽ™๏ธ, ๏„ฑ if muted. +- Middle click to mute. +- Scroll to change." ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +vol="$(wpctl get-volume @DEFAULT_AUDIO_SOURCE@)" + +# If muted, print ๏„ฑ and exit. +[ "$vol" != "${vol%\[MUTED\]}" ] && echo ๏„ฑ && exit + +vol="${vol#Volume: }" + +split() { + # For ommiting the . without calling and external program. + IFS=$2 + set -- $1 + printf '%s' "$@" +} + +vol="$(printf "%.0f" "$(split "$vol" ".")")" + +case 1 in + $((vol >= 70)) ) icon="๐ŸŽ™๏ธ" ;; + $((vol >= 30)) ) icon="๐ŸŽ™๏ธ" ;; + $((vol >= 1)) ) icon="๐ŸŽ™๏ธ" ;; + * ) echo ๏„ฑ && exit ;; +esac + +echo "$icon$vol%" diff --git a/.local/bin/statusbar/sb-moonphase b/.local/bin/statusbar/sb-moonphase @@ -0,0 +1,37 @@ +#!/bin/sh + +# Shows the current moon phase. + +moonfile="${XDG_DATA_HOME:-$HOME/.local/share}/moonphase" + +[ -s "$moonfile" ] && [ "$(stat -c %y "$moonfile" 2>/dev/null | cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ] || + { curl -sf "wttr.in/?format=%m" > "$moonfile" || exit 1 ;} + +icon="$(cat "$moonfile")" + +case "$icon" in + ๐ŸŒ‘) name="New" ;; + ๐ŸŒ’) name="Waxing Crescent" ;; + ๐ŸŒ“) name="First Quarter" ;; + ๐ŸŒ”) name="Waxing Gibbous" ;; + ๐ŸŒ•) name="Full" ;; + ๐ŸŒ–) name="Waning Gibbous" ;; + ๐ŸŒ—) name="Last Quarter" ;; + ๐ŸŒ˜) name="Waning Crescent" ;; + *) exit 1 ;; +esac + +echo "${icon-?}" + +case $1 in + 3) notify-send "๐ŸŒœ Moon phase module" "Displays current moon phase. +- ๐ŸŒ‘: New +- ๐ŸŒ’: Waxing Crescent +- ๐ŸŒ“: First Quarter +- ๐ŸŒ”: Waxing Gibbous +- ๐ŸŒ•: Full +- ๐ŸŒ–: Waning Gibbous +- ๐ŸŒ—: Last Quarter +- ๐ŸŒ˜: Waning Crescent" ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac diff --git a/.local/bin/statusbar/sb-mpdup b/.local/bin/statusbar/sb-mpdup @@ -0,0 +1,8 @@ +#!/bin/sh + +# This loop will update the mpd statusbar module whenever a command changes the +# music player's status. mpd must be running on X's start for this to work. + +while : ; do + mpc idle >/dev/null && kill -45 "$(pidof "${STATUSBAR:-waybar}")" || break +done diff --git a/.local/bin/statusbar/sb-music b/.local/bin/statusbar/sb-music @@ -0,0 +1,19 @@ +#!/bin/sh + +filter() { sed "/^volume:/d;s/\\[paused\\].*/โธ/g;/\\[playing\\].*/d;/^ERROR/Q" | paste -sd ' ' -;} + +pidof -x sb-mpdup >/dev/null 2>&1 || sb-mpdup >/dev/null 2>&1 & + +case $1 in + 1) mpc status | filter ; setsid -f "$TERMINAL" -e ncmpcpp ;; # right click, pause/unpause + 2) mpc toggle | filter ;; # right click, pause/unpause + 3) mpc status | filter ; notify-send "๐ŸŽต Music module" "\- Shows mpd song playing. +- โธ when paused. +- Left click opens ncmpcpp. +- Middle click pauses. +- Scroll changes track.";; # right click, pause/unpause + 4) mpc prev | filter ;; # scroll up, previous + 5) mpc next | filter ;; # scroll down, next + 6) mpc status | filter ; setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; + *) mpc status | filter ;; +esac diff --git a/.local/bin/statusbar/sb-nettraf b/.local/bin/statusbar/sb-nettraf @@ -0,0 +1,29 @@ +#!/bin/sh + +# Module showing network traffic. Shows how much data has been received (RX) or +# transmitted (TX) since the previous time this script ran. So if run every +# second, gives network traffic per second. + +case $1 in + 1) setsid -f "$TERMINAL" -e doas bandwhich ;; + 3) notify-send "๐ŸŒ Network traffic module" "๐Ÿ”ป: Traffic received +๐Ÿ”บ: Traffic transmitted" ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +update() { + sum=0 + for arg; do + read -r i < "$arg" + sum=$(( sum + i )) + done + cache=/tmp/${1##*/} + [ -f "$cache" ] && read -r old < "$cache" || old=0 + printf %d\\n "$sum" > "$cache" + printf %d\\n $(( sum - old )) +} + +rx=$(update /sys/class/net/[ew]*/statistics/rx_bytes) +tx=$(update /sys/class/net/[ew]*/statistics/tx_bytes) + +printf "๐Ÿ”ป%4sB ๐Ÿ”บ%4sB\\n" $(numfmt --to=iec $rx $tx) diff --git a/.local/bin/statusbar/sb-news b/.local/bin/statusbar/sb-news @@ -0,0 +1,17 @@ +#!/bin/sh + +# Displays number of unread news items and an loading icon if updating. +# When clicked, brings up `newsboat`. + +case $1 in + 1) setsid "$TERMINAL" -e newsboat ;; + 2) setsid -f newsup >/dev/null && exit ;; + 3) notify-send "๐Ÿ“ฐ News module" "\- Shows unread news items +- Shows ๐Ÿ”ƒ if updating with \`newsup\` +- Left click opens newsboat +- Middle click syncs RSS feeds +<b>Note:</b> Only one instance of newsboat (including updates) may be running at a time." ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + + cat /tmp/newsupdate 2>/dev/null || echo "$(newsboat -x print-unread | awk '{ if($1>0) print "๐Ÿ“ฐ" $1}')$(cat "${XDG_CONFIG_HOME:-$HOME/.config}"/newsboat/.update 2>/dev/null)" diff --git a/.local/bin/statusbar/sb-pacpackages b/.local/bin/statusbar/sb-pacpackages @@ -0,0 +1,29 @@ +#!/bin/sh + +# Displays number of upgradeable packages. +# For this to work, have a `pacman -Sy` command run in the background as a +# cronjob every so often as root. This script will then read those packages. +# When clicked, it will run an upgrade via pacman. +# +# Add the following text as a file in /usr/share/libalpm/hooks/statusbar.hook: +# +# [Trigger] +# Operation = Upgrade +# Type = Package +# Target = * +# +# [Action] +# Description = Updating statusbar... +# When = PostTransaction +# Exec = /usr/bin/pkill -RTMIN+8 dwmblocks # Or i3blocks if using i3. + +case $1 in + 1) setsid -f "$TERMINAL" -e sb-popupgrade ;; + 2) notify-send "$(/usr/bin/pacman -Qu)" ;; + 3) notify-send "๐ŸŽ Upgrade module" "๐Ÿ“ฆ: number of upgradable packages +- Left click to upgrade packages +- Middle click to show upgradable packages" ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +pacman -Qu | grep -Fcv "[ignored]" | sed "s/^/๐Ÿ“ฆ/;s/^๐Ÿ“ฆ0$//g" diff --git a/.local/bin/statusbar/sb-popupgrade b/.local/bin/statusbar/sb-popupgrade @@ -0,0 +1,9 @@ +#!/bin/sh + +printf "Beginning upgrade.\\n" + +paru -Syu +pkill -RTMIN+8 "${STATUSBAR:-waybar}" + +printf "\\nUpgrade complete.\\nPress <Enter> to exit window.\\n\\n" +read -r _ diff --git a/.local/bin/statusbar/sb-price b/.local/bin/statusbar/sb-price @@ -0,0 +1,58 @@ +#!/bin/sh + +# Usage: +# price <currency-base currency> <name of currency> <icon> <signal> +# price bat-btc "Basic Attention Token" ๐Ÿฆ 24 +# This will give the price of BAT denominated in BTC and will update on +# signal 24. +# When the name of the currency is multi-word, put it in quotes. + +[ -z "$1" ] && exit 1 + +url="${CRYPTOURL:-rate.sx}" +target="${1%%-*}" +denom="${1##*-}" +name="${2:-$1}" +icon="${3:-๐Ÿ’ฐ}" +case "$denom" in + "$target"|usd) denom="usd"; symb="$" ;; + gbp) symb="ยฃ" ;; + eur) symb="โ‚ฌ" ;; + btc) symb="๏…š" ;; +esac +interval="@14d" # History contained in chart preceded by '@' (7d = 7 days) +dir="${XDG_CACHE_HOME:-$HOME/.cache}/crypto-prices" +pricefile="$dir/$target-$denom" +chartfile="$dir/$target-$denom-chart" +filestat="$(stat -c %x "$pricefile" 2>/dev/null)" + +[ -d "$dir" ] || mkdir -p "$dir" + +updateprice() { curl -sf \ + --fail-early "${denom}.${url}/1${target}" "${denom}.${url}/${target}${interval}" \ + --output "$pricefile" --output "$chartfile" || + rm -f "$pricefile" "$chartfile" ;} + +[ "${filestat%% *}" != "$(date '+%Y-%m-%d')" ] && + updateme="1" + +case $1 in + 1) setsid "$TERMINAL" -e less -Srf "$chartfile" ;; + 2) notify-send -u low "$icon Updating..." "Updating $name price..." ; updateme="1" ; showupdate="1" ;; + 3) uptime="$(date -d "$filestat" '+%D at %T' | sed "s|$(date '+%D')|Today|")" + notify-send "$icon $name module" "\- <b>Exact price: \$$(cat "$pricefile")</b> +- Left click for chart of changes. +- Middle click to update. +- Shows ๐Ÿ”ƒ if updating prices. +- <b>Last updated: + $uptime</b>" ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +[ -n "$updateme" ] && + updateprice "$target" && + [ -n "$showupdate" ] && + notify-send "$icon Update complete." "$name price is now +\$$(cat "$pricefile")" + +[ -f "$pricefile" ] && printf "%s%s%0.2f" "$icon" "$symb" "$(cat "$pricefile")" diff --git a/.local/bin/statusbar/sb-tasks b/.local/bin/statusbar/sb-tasks @@ -0,0 +1,20 @@ +#!/bin/sh + +# Originally by Andr3as07 <https://github.com/Andr3as07> +# Some changes by Luke +# Rebuild by Tenyun + +# This block displays the number running background tasks. Requires tsp. + +num=$(tsp -l | awk -v numr=0 -v numq=0 '{if (/running/)numr++; if (/queued/)numq++} END{print numr+numq"("numq")"}') + +# Handle mouse clicks +case $1 in + 1) setsid -f "$TERMINAL" -e tsp -l ;; + 3) notify-send "Tasks module" "๐Ÿค–: number of running/queued background tasks +- Left click opens tsp" ;; # Right click + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +[ "$num" != "0(0)" ] && + echo "๐Ÿค–$num" diff --git a/.local/bin/statusbar/sb-torrent b/.local/bin/statusbar/sb-torrent @@ -0,0 +1,27 @@ +#!/bin/sh + +transmission-remote -l | grep % | + sed " # The letters are for sorting and will not appear. + s/.*Stopped.*/A ๐Ÿ›‘/; + s/.*Seeding.*/Z ๐ŸŒฑ/; + s/.*100%.*/N โœ…/; + s/.*Idle.*/B ๐Ÿ•ฐ๏ธ/; + s/.*Uploading.*/L โฌ†๏ธ/; + s/.*%.*/M โฌ‡๏ธ/" | + sort -h | uniq -c | awk '{print $3 $1}' | paste -sd ' ' - + +case $1 in + 1) setsid -f "$TERMINAL" -e stig ;; + 2) td-toggle ;; + 3) notify-send "๐ŸŒฑ Torrent module" "\- Left click to open stig. +- Middle click to toggle transmission. +- Shift click to edit script. +Module shows number of torrents: +๐Ÿ›‘: paused +๐Ÿ•ฐ: idle (seeds needed) +๐Ÿ”ผ: uploading (unfinished) +๐Ÿ”ฝ: downloading +โœ…: done +๐ŸŒฑ: done and seeding" ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac diff --git a/.local/bin/statusbar/sb-volume b/.local/bin/statusbar/sb-volume @@ -0,0 +1,39 @@ +#!/bin/sh + +# Prints the current volume or ๐Ÿ”‡ if muted. + +case $1 in + 1) setsid -w -f "$TERMINAL" -e pulsemixer; pkill -RTMIN+10 "${STATUSBAR:-waybar}" ;; + 2) wpctl set-mute @DEFAULT_SINK@ toggle ;; + 4) wpctl set-volume @DEFAULT_SINK@ 1%+ ;; + 5) wpctl set-volume @DEFAULT_SINK@ 1%- ;; + 3) notify-send "๐Ÿ“ข Volume module" "\- Shows volume ๐Ÿ”Š, ๐Ÿ”‡ if muted. +- Middle click to mute. +- Scroll to change." ;; + 8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;; +esac + +vol="$(wpctl get-volume @DEFAULT_AUDIO_SINK@)" + +# If muted, print ๐Ÿ”‡ and exit. +[ "$vol" != "${vol%\[MUTED\]}" ] && echo ๐Ÿ”‡ && exit + +vol="${vol#Volume: }" + +split() { + # For ommiting the . without calling and external program. + IFS=$2 + set -- $1 + printf '%s' "$@" +} + +vol="$(printf "%.0f" "$(split "$vol" ".")")" + +case 1 in + $((vol >= 70)) ) icon="๐Ÿ”Š" ;; + $((vol >= 30)) ) icon="๐Ÿ”‰" ;; + $((vol >= 1)) ) icon="๐Ÿ”ˆ" ;; + * ) echo ๐Ÿ”‡ && exit ;; +esac + +echo "$icon$vol%" diff --git a/.local/bin/sysact b/.local/bin/sysact @@ -0,0 +1,26 @@ +#!/bin/sh + +# A dmenu wrapper script for system functions. +export WM="Hyprland" +case "$(readlink -f /sbin/init)" in + *systemd*) ctl='systemctl' ;; + *) ctl='loginctl' ;; +esac + +wmpid(){ # This function is needed if there are multiple instances of the window manager. + tree="$(pstree -ps $$)" + tree="${tree#*$WM(}" + echo "${tree%%)*}" +} + +case "$(printf "๐Ÿ”’ lock\n๐Ÿšช leave $WM\nโ™ป๏ธ renew $WM\n๐Ÿป hibernate\n๐Ÿ”ƒ reboot\n๐Ÿ–ฅ๏ธshutdown\n๐Ÿ’ค sleep\n๐Ÿ“บ display off" | bemenu -i -p 'Action: ')" in + '๐Ÿ”’ lock') slock ;; + "๐Ÿšช leave $WM") hyprctl dispatch exit ;; + "โ™ป๏ธ renew $WM") hyprctl reload ;; + '๐Ÿป hibernate') slock $ctl hibernate -i ;; + '๐Ÿ’ค sleep') slock $ctl suspend -i ;; + '๐Ÿ”ƒ reboot') $ctl reboot -i ;; + '๐Ÿ–ฅ๏ธshutdown') $ctl poweroff -i ;; + '๐Ÿ“บ display off') xset dpms force off ;; + *) exit 1 ;; +esac diff --git a/.local/bin/tag b/.local/bin/tag @@ -0,0 +1,49 @@ +#!/bin/sh + +err() { echo "Usage: + tag [OPTIONS] file +Options: + -a: artist/author + -t: song/chapter title + -A: album/book title + -n: track/chapter number + -N: total number of tracks/chapters + -d: year of publication + -g: genre + -c: comment +You will be prompted for title, artist, album and track if not given." && exit 1 ;} + +while getopts "a:t:A:n:N:d:g:c:" o; do case "${o}" in + a) artist="${OPTARG}" ;; + t) title="${OPTARG}" ;; + A) album="${OPTARG}" ;; + n) track="${OPTARG}" ;; + N) total="${OPTARG}" ;; + d) date="${OPTARG}" ;; + g) genre="${OPTARG}" ;; + c) comment="${OPTARG}" ;; + *) printf "Invalid option: -%s\\n" "$OPTARG" && err ;; +esac done + +shift $((OPTIND - 1)) + +file="$1" + +temp="$(mktemp -p "$(dirname "$file")")" +trap 'rm -f $temp' HUP INT QUIT TERM PWR EXIT + +[ ! -f "$file" ] && echo 'Provide file to tag.' && err + +[ -z "$title" ] && echo 'Enter a title.' && read -r title +[ -z "$artist" ] && echo 'Enter an artist.' && read -r artist +[ -z "$album" ] && echo 'Enter an album.' && read -r album +[ -z "$track" ] && echo 'Enter a track number.' && read -r track + +cp -f "$file" "$temp" && ffmpeg -i "$temp" -map 0 -y -codec copy \ + -metadata title="$title" \ + -metadata album="$album" \ + -metadata artist="$artist" \ + -metadata track="${track}${total:+/"$total"}" \ + ${date:+-metadata date="$date"} \ + ${genre:+-metadata genre="$genre"} \ + ${comment:+-metadata comment="$comment"} "$file" diff --git a/.local/bin/td-toggle b/.local/bin/td-toggle @@ -0,0 +1,12 @@ +#!/bin/sh + +# If transmission-daemon is running, will ask to kill, else will ask to start. + +if pidof transmission-daemon >/dev/null ; +then + [ "$(printf "No\\nYes" | bemenu -i -p "Turn off transmission-daemon?")" = "Yes" ] && killall transmission-daemon && notify-send "transmission-daemon disabled." +else + ifinstalled transmission-cli || exit + [ "$(printf "No\\nYes" | bemenu -i -p "Turn on transmission daemon?")" = "Yes" ] && transmission-daemon && notify-send "transmission-daemon enabled." +fi +sleep 3 && pkill -RTMIN+7 "${STATUSBAR:-i3blocks}" diff --git a/.local/bin/texclear b/.local/bin/texclear @@ -0,0 +1,9 @@ +#!/bin/sh + +# Clears the build files of a LaTeX/XeLaTeX build. +# I have vim run this file whenever I exit a .tex file. + +[ "${1##*.}" = "tex" ] && { + find "$(dirname "${1}")" -regex '.*\(_minted.*\|.*\.\(4tc\|xref\|tmp\|pyc\|pyg\|pyo\|fls\|vrb\|fdb_latexmk\|bak\|swp\|aux\|log\|synctex\(busy\)\|lof\|lot\|maf\|idx\|mtc\|mtc0\|nav\|out\|snm\|toc\|bcf\|run\.xml\|synctex\.gz\|blg\|bbl\)\)' -delete +} || printf "Provide a .tex file.\n" + diff --git a/.local/bin/torwrap b/.local/bin/torwrap @@ -0,0 +1,7 @@ +#!/bin/sh + +ifinstalled stig transmission-cli || exit 1 + +! pidof transmission-daemon >/dev/null && transmission-daemon && notify-send "Starting torrent daemon..." + +$TERMINAL -e stig; pkill -RTMIN+7 "${STATUSBAR:-i3blocks}" diff --git a/.local/bin/transadd b/.local/bin/transadd @@ -0,0 +1,9 @@ +#!/bin/sh + +# Mimeapp script for adding torrent to transmission-daemon, but will also start the daemon first if not running. + +# transmission-daemon sometimes fails to take remote requests in its first moments, hence the sleep. + +pidof transmission-daemon >/dev/null || (transmission-daemon && notify-send "Starting transmission daemon..." && sleep 3 && pkill -RTMIN+7 "${STATUSBAR:-i3blocks}") + +transmission-remote -a "$@" && notify-send "๐Ÿ”ฝ Torrent added." diff --git a/.local/bin/unix b/.local/bin/unix @@ -0,0 +1,26 @@ +#!/bin/sh + +#original artwork by http://www.sanderfocus.nl/#/portfolio/tech-heroes +#converted to shell by #nixers @ irc.unix.chat + +cat << 'eof' + ,_ ,_==โ–„โ–‚ + , โ–‚โ–ƒโ–„โ–„โ–…โ–…โ–…โ–‚โ–…ยพ. / / + โ–„โ–†<ยด "ยปโ–“โ–“โ–“%\ / / / / + ,โ–…7" ยด>โ–“โ–“โ–“% / / > / >/% + โ–ยถโ–“ ,ยปโ–“โ–“ยพยด /> %/%// / / + โ–“โ–ƒโ–…โ–…โ–…โ–ƒ,,โ–„โ–…โ–…โ–…ร†\// ///>// />/ / + Vโ•‘ยซยผ.;โ†’ โ•‘<ยซ.,`=// />//%/% / / + //โ• <ยด -ยฒ,)(โ–“~"-โ•/ยพ/ %/>/ /> + / / / โ–% -./โ–„โ–ƒโ–„โ–…โ–, /7//;//% / / + / ////`โ–Œโ– %zWv xXโ–“โ–‡โ–Œ//&;% / / + / / / %//%/ยพยฝยดโ–Œโ–ƒโ–„โ–„โ–„โ–„โ–ƒโ–ƒโ–ยถ\/& / + </ /</%//`โ–“!%โ–“%โ•ฃ[38;5;255;โ•ฃWY<Y)y&/`\ + / / %/%//</%//\i7; โ• N>)VY>7; \_ UNIX IS VERY SIMPLE IT JUST NEEDS A + / /</ //<///<_/%\โ–“ V%W%ยฃ)XY _/%โ€พ\_, GENIUS TO UNDERSTAND ITS SIMPLICITY + / / //%/_,=--^/%/%%\ยพ%ยถ%%} /%%%%%%;\, + %/< /_/ %%%%%;X%%\%%;, _/%%%;, \ + / / %%%%%%;, \%%l%%;// _/%;, dmr + / %%%;, <;\-=-/ / + ;, l +eof diff --git a/.local/bin/unmounter b/.local/bin/unmounter @@ -0,0 +1,28 @@ +#!/bin/sh + +# Unmount USB drives or Android phones. Replaces the older `dmenuumount`. Fewer +# prompt and also de-decrypts LUKS drives that are unmounted. + +set -e + +mounteddroids="$(grep simple-mtpfs /etc/mtab | awk '{print "๐Ÿ“ฑ" $2}')" +lsblkoutput="$(lsblk -nrpo "name,type,size,mountpoint")" +mounteddrives="$(echo "$lsblkoutput" | awk '($2=="part"||$2="crypt")&&$4!~/\/boot|\/home$|SWAP/&&length($4)>1{printf "๐Ÿ’พ%s (%s)\n",$4,$3}')" + +allunmountable="$(echo "$mounteddroids +$mounteddrives" | sed "/^$/d;s/ *$//")" +test -n "$allunmountable" + +chosen="$(echo "$allunmountable" | bemenu -i -p "Unmount which drive?")" +chosen="${chosen%% *}" +test -n "$chosen" + +doas umount -l "/${chosen#*/}" +notify-send "Device unmounted." "$chosen has been unmounted." + +# Close the chosen drive if decrypted. +cryptid="$(echo "$lsblkoutput" | grep "/${chosen#*/}$")" +cryptid="${cryptid%% *}" +test -b /dev/mapper/"${cryptid##*/}" +doas cryptsetup close "$cryptid" +notify-send "๐Ÿ”’Device dencryption closed." "Drive is now securely locked again." diff --git a/.local/bin/weath b/.local/bin/weath @@ -0,0 +1,25 @@ +#!/bin/sh +# +# Get the weather on the terminal. You can pass an alternative location as a parameter, +# and/or use the 'cp' option to copy the forecast as plaintext to the clipboard. + +report="${XDG_CACHE_HOME:-$HOME/.cache}/weatherreport" + +if [ "$1" = 'cp' ]; then + # shellcheck disable=SC2015 + [ -z "$2" ] && sed 's/\x1b\[[^m]*m//g' "$report" | xclip -selection clipboard && + notify-send "Weather forecast for '${LOCATION:-$(head -n 1 "$report" | cut -d' ' -f3-)}' copied to clipboard." || + { data="$(curl -sfm 5 "${WTTRURL:-wttr.in}/$2?T")" && + notify-send "Weather forecast for '$2' copied to clipboard." && + echo "$data" | xclip -selection clipboard || + notify-send 'Failed to get weather forecast!' 'Check your internet connection and the supplied location.'; } +else + [ -n "$2" ] && + notify-send "Invalid option '$1'! The only valid option is 'cp'." && + exit 1 + + # shellcheck disable=SC2015 + [ -z "$1" ] && less -S "$report" || + data="$(curl -sfm 5 "${WTTRURL:-wttr.in}/$1")" && echo "$data" | less -S || + notify-send 'Failed to get weather forecast!' 'Check your internet connection and the supplied location.' +fi diff --git a/.local/bin/xdg-terminal-exec b/.local/bin/xdg-terminal-exec @@ -0,0 +1,3 @@ +#!/bin/sh + +"$TERMINAL" -e "$@" diff --git a/.local/share/applications/file.desktop b/.local/share/applications/file.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=File Manager +Exec=/usr/bin/foot -e yazi %u diff --git a/.local/share/applications/img.desktop b/.local/share/applications/img.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=Image viewer +Exec=/usr/bin/imv %f diff --git a/.local/share/applications/mail.desktop b/.local/share/applications/mail.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=Mail +Exec=/usr/bin/foot -e neomutt %u diff --git a/.local/share/applications/pdf.desktop b/.local/share/applications/pdf.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=PDF reader +Exec=/usr/bin/zathura %u diff --git a/.local/share/applications/rss.desktop b/.local/share/applications/rss.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=RSS feed addition +Exec=/usr/bin/env rssadd %U diff --git a/.local/share/applications/text.desktop b/.local/share/applications/text.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=Text editor +Exec=/usr/bin/foot -e nvim %u diff --git a/.local/share/applications/torrent.desktop b/.local/share/applications/torrent.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=Torrent +Exec=/usr/bin/env transadd %U diff --git a/.local/share/applications/video.desktop b/.local/share/applications/video.desktop @@ -0,0 +1,4 @@ +[Desktop Entry] +Type=Application +Name=Video viewer +Exec=/usr/bin/mpv -quiet %f diff --git a/.local/share/bg b/.local/share/bg @@ -0,0 +1 @@ +thiemeyer_road_to_samarkand.jpg +\ No newline at end of file diff --git a/.local/share/larbs/chars/emoji b/.local/share/larbs/chars/emoji @@ -0,0 +1,1630 @@ +๐Ÿ˜€ grinning face +๐Ÿ˜ƒ grinning face with big eyes +๐Ÿ˜„ grinning face with smiling eyes +๐Ÿ˜ beaming face with smiling eyes +๐Ÿ˜† grinning squinting face +๐Ÿ˜… grinning face with sweat +๐Ÿคฃ rolling on the floor laughing +๐Ÿ˜‚ face with tears of joy +๐Ÿ™‚ slightly smiling face +๐Ÿ™ƒ upside-down face +๐Ÿซ  melting face +๐Ÿ˜‰ winking face +๐Ÿ˜Š smiling face with smiling eyes +๐Ÿ˜‡ smiling face with halo +๐Ÿฅฐ smiling face with hearts +๐Ÿ˜ smiling face with heart-eyes +๐Ÿคฉ star-struck +๐Ÿ˜˜ face blowing a kiss +๐Ÿ˜— kissing face +โ˜บ๏ธ smiling face +๐Ÿ˜š kissing face with closed eyes +๐Ÿ˜™ kissing face with smiling eyes +๐Ÿฅฒ smiling face with tear +๐Ÿ˜‹ face savoring food +๐Ÿ˜› face with tongue +๐Ÿ˜œ winking face with tongue +๐Ÿคช zany face +๐Ÿ˜ squinting face with tongue +๐Ÿค‘ money-mouth face +๐Ÿค— smiling face with open hands +๐Ÿคญ face with hand over mouth +๐Ÿซข face with open eyes and hand over mouth +๐Ÿซฃ face with peeking eye +๐Ÿคซ shushing face +๐Ÿค” thinking face +๐Ÿซก saluting face +๐Ÿค zipper-mouth face +๐Ÿคจ face with raised eyebrow +๐Ÿ˜ neutral face +๐Ÿ˜‘ expressionless face +๐Ÿ˜ถ face without mouth +๐Ÿซฅ dotted line face +๐Ÿ˜ smirking face +๐Ÿ˜’ unamused face +๐Ÿ™„ face with rolling eyes +๐Ÿ˜ฌ grimacing face +๐Ÿคฅ lying face +๐Ÿ˜Œ relieved face +๐Ÿ˜” pensive face +๐Ÿ˜ช sleepy face +๐Ÿคค drooling face +๐Ÿ˜ด sleeping face +๐Ÿ˜ท face with medical mask +๐Ÿค’ face with thermometer +๐Ÿค• face with head-bandage +๐Ÿคข nauseated face +๐Ÿคฎ face vomiting +๐Ÿคง sneezing face +๐Ÿฅต hot face +๐Ÿฅถ cold face +๐Ÿฅด woozy face +๐Ÿ˜ต face with crossed-out eyes +๐Ÿคฏ exploding head +๐Ÿค  cowboy hat face +๐Ÿฅณ partying face +๐Ÿฅธ disguised face +๐Ÿ˜Ž smiling face with sunglasses +๐Ÿค“ nerd face +๐Ÿง face with monocle +๐Ÿ˜• confused face +๐Ÿซค face with diagonal mouth +๐Ÿ˜Ÿ worried face +๐Ÿ™ slightly frowning face +โ˜น๏ธ frowning face +๐Ÿ˜ฎ face with open mouth +๐Ÿ˜ฏ hushed face +๐Ÿ˜ฒ astonished face +๐Ÿ˜ณ flushed face +๐Ÿฅบ pleading face +๐Ÿฅน face holding back tears +๐Ÿ˜ฆ frowning face with open mouth +๐Ÿ˜ง anguished face +๐Ÿ˜จ fearful face +๐Ÿ˜ฐ anxious face with sweat +๐Ÿ˜ฅ sad but relieved face +๐Ÿ˜ข crying face +๐Ÿ˜ญ loudly crying face +๐Ÿ˜ฑ face screaming in fear +๐Ÿ˜– confounded face +๐Ÿ˜ฃ persevering face +๐Ÿ˜ž disappointed face +๐Ÿ˜“ downcast face with sweat +๐Ÿ˜ฉ weary face +๐Ÿ˜ซ tired face +๐Ÿฅฑ yawning face +๐Ÿ˜ค face with steam from nose +๐Ÿ˜ก pouting face +๐Ÿ˜  angry face +๐Ÿคฌ face with symbols on mouth +๐Ÿ˜ˆ smiling face with horns +๐Ÿ‘ฟ angry face with horns +๐Ÿ’€ skull +โ˜ ๏ธ skull and crossbones +๐Ÿ’ฉ pile of poo +๐Ÿคก clown face +๐Ÿ‘น ogre +๐Ÿ‘บ goblin +๐Ÿ‘ป ghost +๐Ÿ‘ฝ alien +๐Ÿ‘พ alien monster +๐Ÿค– robot +๐Ÿ˜บ grinning cat +๐Ÿ˜ธ grinning cat with smiling eyes +๐Ÿ˜น cat with tears of joy +๐Ÿ˜ป smiling cat with heart-eyes +๐Ÿ˜ผ cat with wry smile +๐Ÿ˜ฝ kissing cat +๐Ÿ™€ weary cat +๐Ÿ˜ฟ crying cat +๐Ÿ˜พ pouting cat +๐Ÿ™ˆ see-no-evil monkey +๐Ÿ™‰ hear-no-evil monkey +๐Ÿ™Š speak-no-evil monkey +๐Ÿ’‹ kiss mark +๐Ÿ’Œ love letter +๐Ÿ’˜ heart with arrow +๐Ÿ’ heart with ribbon +๐Ÿ’– sparkling heart +๐Ÿ’— growing heart +๐Ÿ’“ beating heart +๐Ÿ’ž revolving hearts +๐Ÿ’• two hearts +๐Ÿ’Ÿ heart decoration +โฃ๏ธ heart exclamation +๐Ÿ’” broken heart +โค๏ธ red heart +๐Ÿงก orange heart +๐Ÿ’› yellow heart +๐Ÿ’š green heart +๐Ÿ’™ blue heart +๐Ÿ’œ purple heart +๐ŸคŽ brown heart +๐Ÿ–ค black heart +๐Ÿค white heart +๐Ÿ’ฏ hundred points +๐Ÿ’ข anger symbol +๐Ÿ’ฅ collision +๐Ÿ’ซ dizzy +๐Ÿ’ฆ sweat droplets +๐Ÿ’จ dashing away +๐Ÿ•ณ๏ธ hole +๐Ÿ’ฃ bomb +๐Ÿ’ฌ speech balloon +๐Ÿ—จ๏ธ left speech bubble +๐Ÿ—ฏ๏ธ right anger bubble +๐Ÿ’ญ thought balloon +๐Ÿ’ค zzz +๐Ÿ‘‹ waving hand +๐Ÿคš raised back of hand +๐Ÿ–๏ธ hand with fingers splayed +โœ‹ raised hand +๐Ÿ–– vulcan salute +๐Ÿซฑ rightwards hand +๐Ÿซฒ leftwards hand +๐Ÿซณ palm down hand +๐Ÿซด palm up hand +๐Ÿ‘Œ OK hand +๐ŸคŒ pinched fingers +๐Ÿค pinching hand +โœŒ๏ธ victory hand +๐Ÿคž crossed fingers +๐Ÿซฐ hand with index finger and thumb crossed +๐ŸคŸ love-you gesture +๐Ÿค˜ sign of the horns +๐Ÿค™ call me hand +๐Ÿ‘ˆ backhand index pointing left +๐Ÿ‘‰ backhand index pointing right +๐Ÿ‘† backhand index pointing up +๐Ÿ–• middle finger +๐Ÿ‘‡ backhand index pointing down +โ˜๏ธ index pointing up +๐Ÿซต index pointing at the viewer +๐Ÿ‘ thumbs up +๐Ÿ‘Ž thumbs down +โœŠ raised fist +๐Ÿ‘Š oncoming fist +๐Ÿค› left-facing fist +๐Ÿคœ right-facing fist +๐Ÿ‘ clapping hands +๐Ÿ™Œ raising hands +๐Ÿซถ heart hands +๐Ÿ‘ open hands +๐Ÿคฒ palms up together +๐Ÿค handshake +๐Ÿ™ folded hands +โœ๏ธ writing hand +๐Ÿ’… nail polish +๐Ÿคณ selfie +๐Ÿ’ช flexed biceps +๐Ÿฆพ mechanical arm +๐Ÿฆฟ mechanical leg +๐Ÿฆต leg +๐Ÿฆถ foot +๐Ÿ‘‚ ear +๐Ÿฆป ear with hearing aid +๐Ÿ‘ƒ nose +๐Ÿง  brain +๐Ÿซ€ anatomical heart +๐Ÿซ lungs +๐Ÿฆท tooth +๐Ÿฆด bone +๐Ÿ‘€ eyes +๐Ÿ‘๏ธ eye +๐Ÿ‘… tongue +๐Ÿ‘„ mouth +๐Ÿซฆ biting lip +๐Ÿ‘ถ baby +๐Ÿง’ child +๐Ÿ‘ฆ boy +๐Ÿ‘ง girl +๐Ÿง‘ person +๐Ÿ‘ฑ person: blond hair +๐Ÿ‘จ man +๐Ÿง” person: beard +๐Ÿ‘ฉ woman +๐Ÿง“ older person +๐Ÿ‘ด old man +๐Ÿ‘ต old woman +๐Ÿ™ person frowning +๐Ÿ™Ž person pouting +๐Ÿ™… person gesturing NO +๐Ÿ™† person gesturing OK +๐Ÿ’ person tipping hand +๐Ÿ™‹ person raising hand +๐Ÿง deaf person +๐Ÿ™‡ person bowing +๐Ÿคฆ person facepalming +๐Ÿคท person shrugging +๐Ÿ‘ฎ police officer +๐Ÿ•ต๏ธ detective +๐Ÿ’‚ guard +๐Ÿฅท ninja +๐Ÿ‘ท construction worker +๐Ÿซ… person with crown +๐Ÿคด prince +๐Ÿ‘ธ princess +๐Ÿ‘ณ person wearing turban +๐Ÿ‘ฒ person with skullcap +๐Ÿง• woman with headscarf +๐Ÿคต person in tuxedo +๐Ÿ‘ฐ person with veil +๐Ÿคฐ pregnant woman +๐Ÿซƒ pregnant man +๐Ÿซ„ pregnant person +๐Ÿคฑ breast-feeding +๐Ÿ‘ผ baby angel +๐ŸŽ… Santa Claus +๐Ÿคถ Mrs. Claus +๐Ÿฆธ superhero +๐Ÿฆน supervillain +๐Ÿง™ mage +๐Ÿงš fairy +๐Ÿง› vampire +๐Ÿงœ merperson +๐Ÿง elf +๐Ÿงž genie +๐ŸงŸ zombie +๐ŸงŒ troll +๐Ÿ’† person getting massage +๐Ÿ’‡ person getting haircut +๐Ÿšถ person walking +๐Ÿง person standing +๐ŸงŽ person kneeling +๐Ÿƒ person running +๐Ÿ’ƒ woman dancing +๐Ÿ•บ man dancing +๐Ÿ•ด๏ธ person in suit levitating +๐Ÿ‘ฏ people with bunny ears +๐Ÿง– person in steamy room +๐Ÿง— person climbing +๐Ÿคบ person fencing +๐Ÿ‡ horse racing +โ›ท๏ธ skier +๐Ÿ‚ snowboarder +๐ŸŒ๏ธ person golfing +๐Ÿ„ person surfing +๐Ÿšฃ person rowing boat +๐ŸŠ person swimming +โ›น๏ธ person bouncing ball +๐Ÿ‹๏ธ person lifting weights +๐Ÿšด person biking +๐Ÿšต person mountain biking +๐Ÿคธ person cartwheeling +๐Ÿคผ people wrestling +๐Ÿคฝ person playing water polo +๐Ÿคพ person playing handball +๐Ÿคน person juggling +๐Ÿง˜ person in lotus position +๐Ÿ›€ person taking bath +๐Ÿ›Œ person in bed +๐Ÿ‘ญ women holding hands +๐Ÿ‘ซ woman and man holding hands +๐Ÿ‘ฌ men holding hands +๐Ÿ’ kiss +๐Ÿ’‘ couple with heart +๐Ÿ‘ช family +๐Ÿ—ฃ๏ธ speaking head +๐Ÿ‘ค bust in silhouette +๐Ÿ‘ฅ busts in silhouette +๐Ÿซ‚ people hugging +๐Ÿ‘ฃ footprints +๐Ÿต monkey face +๐Ÿ’ monkey +๐Ÿฆ gorilla +๐Ÿฆง orangutan +๐Ÿถ dog face +๐Ÿ• dog +๐Ÿฆฎ guide dog +๐Ÿฉ poodle +๐Ÿบ wolf +๐ŸฆŠ fox +๐Ÿฆ raccoon +๐Ÿฑ cat face +๐Ÿˆ cat +๐Ÿฆ lion +๐Ÿฏ tiger face +๐Ÿ… tiger +๐Ÿ† leopard +๐Ÿด horse face +๐ŸŽ horse +๐Ÿฆ„ unicorn +๐Ÿฆ“ zebra +๐ŸฆŒ deer +๐Ÿฆฌ bison +๐Ÿฎ cow face +๐Ÿ‚ ox +๐Ÿƒ water buffalo +๐Ÿ„ cow +๐Ÿท pig face +๐Ÿ– pig +๐Ÿ— boar +๐Ÿฝ pig nose +๐Ÿ ram +๐Ÿ‘ ewe +๐Ÿ goat +๐Ÿช camel +๐Ÿซ two-hump camel +๐Ÿฆ™ llama +๐Ÿฆ’ giraffe +๐Ÿ˜ elephant +๐Ÿฆฃ mammoth +๐Ÿฆ rhinoceros +๐Ÿฆ› hippopotamus +๐Ÿญ mouse face +๐Ÿ mouse +๐Ÿ€ rat +๐Ÿน hamster +๐Ÿฐ rabbit face +๐Ÿ‡ rabbit +๐Ÿฟ๏ธ chipmunk +๐Ÿฆซ beaver +๐Ÿฆ” hedgehog +๐Ÿฆ‡ bat +๐Ÿป bear +๐Ÿจ koala +๐Ÿผ panda +๐Ÿฆฅ sloth +๐Ÿฆฆ otter +๐Ÿฆจ skunk +๐Ÿฆ˜ kangaroo +๐Ÿฆก badger +๐Ÿพ paw prints +๐Ÿฆƒ turkey +๐Ÿ” chicken +๐Ÿ“ rooster +๐Ÿฃ hatching chick +๐Ÿค baby chick +๐Ÿฅ front-facing baby chick +๐Ÿฆ bird +๐Ÿง penguin +๐Ÿ•Š๏ธ dove +๐Ÿฆ… eagle +๐Ÿฆ† duck +๐Ÿฆข swan +๐Ÿฆ‰ owl +๐Ÿฆค dodo +๐Ÿชถ feather +๐Ÿฆฉ flamingo +๐Ÿฆš peacock +๐Ÿฆœ parrot +๐Ÿธ frog +๐ŸŠ crocodile +๐Ÿข turtle +๐ŸฆŽ lizard +๐Ÿ snake +๐Ÿฒ dragon face +๐Ÿ‰ dragon +๐Ÿฆ• sauropod +๐Ÿฆ– T-Rex +๐Ÿณ spouting whale +๐Ÿ‹ whale +๐Ÿฌ dolphin +๐Ÿฆญ seal +๐ŸŸ fish +๐Ÿ  tropical fish +๐Ÿก blowfish +๐Ÿฆˆ shark +๐Ÿ™ octopus +๐Ÿš spiral shell +๐Ÿชธ coral +๐ŸŒ snail +๐Ÿฆ‹ butterfly +๐Ÿ› bug +๐Ÿœ ant +๐Ÿ honeybee +๐Ÿชฒ beetle +๐Ÿž lady beetle +๐Ÿฆ— cricket +๐Ÿชณ cockroach +๐Ÿ•ท๏ธ spider +๐Ÿ•ธ๏ธ spider web +๐Ÿฆ‚ scorpion +๐ŸฆŸ mosquito +๐Ÿชฐ fly +๐Ÿชฑ worm +๐Ÿฆ  microbe +๐Ÿ’ bouquet +๐ŸŒธ cherry blossom +๐Ÿ’ฎ white flower +๐Ÿชท lotus +๐Ÿต๏ธ rosette +๐ŸŒน rose +๐Ÿฅ€ wilted flower +๐ŸŒบ hibiscus +๐ŸŒป sunflower +๐ŸŒผ blossom +๐ŸŒท tulip +๐ŸŒฑ seedling +๐Ÿชด potted plant +๐ŸŒฒ evergreen tree +๐ŸŒณ deciduous tree +๐ŸŒด palm tree +๐ŸŒต cactus +๐ŸŒพ sheaf of rice +๐ŸŒฟ herb +โ˜˜๏ธ shamrock +๐Ÿ€ four leaf clover +๐Ÿ maple leaf +๐Ÿ‚ fallen leaf +๐Ÿƒ leaf fluttering in wind +๐Ÿชน empty nest +๐Ÿชบ nest with eggs +๐Ÿ‡ grapes +๐Ÿˆ melon +๐Ÿ‰ watermelon +๐ŸŠ tangerine +๐Ÿ‹ lemon +๐ŸŒ banana +๐Ÿ pineapple +๐Ÿฅญ mango +๐ŸŽ red apple +๐Ÿ green apple +๐Ÿ pear +๐Ÿ‘ peach +๐Ÿ’ cherries +๐Ÿ“ strawberry +๐Ÿซ blueberries +๐Ÿฅ kiwi fruit +๐Ÿ… tomato +๐Ÿซ’ olive +๐Ÿฅฅ coconut +๐Ÿฅ‘ avocado +๐Ÿ† eggplant +๐Ÿฅ” potato +๐Ÿฅ• carrot +๐ŸŒฝ ear of corn +๐ŸŒถ๏ธ hot pepper +๐Ÿซ‘ bell pepper +๐Ÿฅ’ cucumber +๐Ÿฅฌ leafy green +๐Ÿฅฆ broccoli +๐Ÿง„ garlic +๐Ÿง… onion +๐Ÿ„ mushroom +๐Ÿฅœ peanuts +๐Ÿซ˜ beans +๐ŸŒฐ chestnut +๐Ÿž bread +๐Ÿฅ croissant +๐Ÿฅ– baguette bread +๐Ÿซ“ flatbread +๐Ÿฅจ pretzel +๐Ÿฅฏ bagel +๐Ÿฅž pancakes +๐Ÿง‡ waffle +๐Ÿง€ cheese wedge +๐Ÿ– meat on bone +๐Ÿ— poultry leg +๐Ÿฅฉ cut of meat +๐Ÿฅ“ bacon +๐Ÿ” hamburger +๐ŸŸ french fries +๐Ÿ• pizza +๐ŸŒญ hot dog +๐Ÿฅช sandwich +๐ŸŒฎ taco +๐ŸŒฏ burrito +๐Ÿซ” tamale +๐Ÿฅ™ stuffed flatbread +๐Ÿง† falafel +๐Ÿฅš egg +๐Ÿณ cooking +๐Ÿฅ˜ shallow pan of food +๐Ÿฒ pot of food +๐Ÿซ• fondue +๐Ÿฅฃ bowl with spoon +๐Ÿฅ— green salad +๐Ÿฟ popcorn +๐Ÿงˆ butter +๐Ÿง‚ salt +๐Ÿฅซ canned food +๐Ÿฑ bento box +๐Ÿ˜ rice cracker +๐Ÿ™ rice ball +๐Ÿš cooked rice +๐Ÿ› curry rice +๐Ÿœ steaming bowl +๐Ÿ spaghetti +๐Ÿ  roasted sweet potato +๐Ÿข oden +๐Ÿฃ sushi +๐Ÿค fried shrimp +๐Ÿฅ fish cake with swirl +๐Ÿฅฎ moon cake +๐Ÿก dango +๐ŸฅŸ dumpling +๐Ÿฅ  fortune cookie +๐Ÿฅก takeout box +๐Ÿฆ€ crab +๐Ÿฆž lobster +๐Ÿฆ shrimp +๐Ÿฆ‘ squid +๐Ÿฆช oyster +๐Ÿฆ soft ice cream +๐Ÿง shaved ice +๐Ÿจ ice cream +๐Ÿฉ doughnut +๐Ÿช cookie +๐ŸŽ‚ birthday cake +๐Ÿฐ shortcake +๐Ÿง cupcake +๐Ÿฅง pie +๐Ÿซ chocolate bar +๐Ÿฌ candy +๐Ÿญ lollipop +๐Ÿฎ custard +๐Ÿฏ honey pot +๐Ÿผ baby bottle +๐Ÿฅ› glass of milk +โ˜• hot beverage +๐Ÿซ– teapot +๐Ÿต teacup without handle +๐Ÿถ sake +๐Ÿพ bottle with popping cork +๐Ÿท wine glass +๐Ÿธ cocktail glass +๐Ÿน tropical drink +๐Ÿบ beer mug +๐Ÿป clinking beer mugs +๐Ÿฅ‚ clinking glasses +๐Ÿฅƒ tumbler glass +๐Ÿซ— pouring liquid +๐Ÿฅค cup with straw +๐Ÿง‹ bubble tea +๐Ÿงƒ beverage box +๐Ÿง‰ mate +๐ŸงŠ ice +๐Ÿฅข chopsticks +๐Ÿฝ๏ธ fork and knife with plate +๐Ÿด fork and knife +๐Ÿฅ„ spoon +๐Ÿ”ช kitchen knife +๐Ÿซ™ jar +๐Ÿบ amphora +๐ŸŒ globe showing Europe-Africa +๐ŸŒŽ globe showing Americas +๐ŸŒ globe showing Asia-Australia +๐ŸŒ globe with meridians +๐Ÿ—บ๏ธ world map +๐Ÿ—พ map of Japan +๐Ÿงญ compass +๐Ÿ”๏ธ snow-capped mountain +โ›ฐ๏ธ mountain +๐ŸŒ‹ volcano +๐Ÿ—ป mount fuji +๐Ÿ•๏ธ camping +๐Ÿ–๏ธ beach with umbrella +๐Ÿœ๏ธ desert +๐Ÿ๏ธ desert island +๐Ÿž๏ธ national park +๐ŸŸ๏ธ stadium +๐Ÿ›๏ธ classical building +๐Ÿ—๏ธ building construction +๐Ÿงฑ brick +๐Ÿชจ rock +๐Ÿชต wood +๐Ÿ›– hut +๐Ÿ˜๏ธ houses +๐Ÿš๏ธ derelict house +๐Ÿ  house +๐Ÿก house with garden +๐Ÿข office building +๐Ÿฃ Japanese post office +๐Ÿค post office +๐Ÿฅ hospital +๐Ÿฆ bank +๐Ÿจ hotel +๐Ÿฉ love hotel +๐Ÿช convenience store +๐Ÿซ school +๐Ÿฌ department store +๐Ÿญ factory +๐Ÿฏ Japanese castle +๐Ÿฐ castle +๐Ÿ’’ wedding +๐Ÿ—ผ Tokyo tower +๐Ÿ—ฝ Statue of Liberty +โ›ช church +๐Ÿ•Œ mosque +๐Ÿ›• hindu temple +๐Ÿ• synagogue +โ›ฉ๏ธ shinto shrine +๐Ÿ•‹ kaaba +โ›ฒ fountain +โ›บ tent +๐ŸŒ foggy +๐ŸŒƒ night with stars +๐Ÿ™๏ธ cityscape +๐ŸŒ„ sunrise over mountains +๐ŸŒ… sunrise +๐ŸŒ† cityscape at dusk +๐ŸŒ‡ sunset +๐ŸŒ‰ bridge at night +โ™จ๏ธ hot springs +๐ŸŽ  carousel horse +๐Ÿ› playground slide +๐ŸŽก ferris wheel +๐ŸŽข roller coaster +๐Ÿ’ˆ barber pole +๐ŸŽช circus tent +๐Ÿš‚ locomotive +๐Ÿšƒ railway car +๐Ÿš„ high-speed train +๐Ÿš… bullet train +๐Ÿš† train +๐Ÿš‡ metro +๐Ÿšˆ light rail +๐Ÿš‰ station +๐ŸšŠ tram +๐Ÿš monorail +๐Ÿšž mountain railway +๐Ÿš‹ tram car +๐ŸšŒ bus +๐Ÿš oncoming bus +๐ŸšŽ trolleybus +๐Ÿš minibus +๐Ÿš‘ ambulance +๐Ÿš’ fire engine +๐Ÿš“ police car +๐Ÿš” oncoming police car +๐Ÿš• taxi +๐Ÿš– oncoming taxi +๐Ÿš— automobile +๐Ÿš˜ oncoming automobile +๐Ÿš™ sport utility vehicle +๐Ÿ›ป pickup truck +๐Ÿšš delivery truck +๐Ÿš› articulated lorry +๐Ÿšœ tractor +๐ŸŽ๏ธ racing car +๐Ÿ๏ธ motorcycle +๐Ÿ›ต motor scooter +๐Ÿฆฝ manual wheelchair +๐Ÿฆผ motorized wheelchair +๐Ÿ›บ auto rickshaw +๐Ÿšฒ bicycle +๐Ÿ›ด kick scooter +๐Ÿ›น skateboard +๐Ÿ›ผ roller skate +๐Ÿš bus stop +๐Ÿ›ฃ๏ธ motorway +๐Ÿ›ค๏ธ railway track +๐Ÿ›ข๏ธ oil drum +โ›ฝ fuel pump +๐Ÿ›ž wheel +๐Ÿšจ police car light +๐Ÿšฅ horizontal traffic light +๐Ÿšฆ vertical traffic light +๐Ÿ›‘ stop sign +๐Ÿšง construction +โš“ anchor +๐Ÿ›Ÿ ring buoy +โ›ต sailboat +๐Ÿ›ถ canoe +๐Ÿšค speedboat +๐Ÿ›ณ๏ธ passenger ship +โ›ด๏ธ ferry +๐Ÿ›ฅ๏ธ motor boat +๐Ÿšข ship +โœˆ๏ธ airplane +๐Ÿ›ฉ๏ธ small airplane +๐Ÿ›ซ airplane departure +๐Ÿ›ฌ airplane arrival +๐Ÿช‚ parachute +๐Ÿ’บ seat +๐Ÿš helicopter +๐ŸšŸ suspension railway +๐Ÿš  mountain cableway +๐Ÿšก aerial tramway +๐Ÿ›ฐ๏ธ satellite +๐Ÿš€ rocket +๐Ÿ›ธ flying saucer +๐Ÿ›Ž๏ธ bellhop bell +๐Ÿงณ luggage +โŒ› hourglass done +โณ hourglass not done +โŒš watch +โฐ alarm clock +โฑ๏ธ stopwatch +โฒ๏ธ timer clock +๐Ÿ•ฐ๏ธ mantelpiece clock +๐Ÿ•› twelve oโ€™clock +๐Ÿ•ง twelve-thirty +๐Ÿ• one oโ€™clock +๐Ÿ•œ one-thirty +๐Ÿ•‘ two oโ€™clock +๐Ÿ• two-thirty +๐Ÿ•’ three oโ€™clock +๐Ÿ•ž three-thirty +๐Ÿ•“ four oโ€™clock +๐Ÿ•Ÿ four-thirty +๐Ÿ•” five oโ€™clock +๐Ÿ•  five-thirty +๐Ÿ•• six oโ€™clock +๐Ÿ•ก six-thirty +๐Ÿ•– seven oโ€™clock +๐Ÿ•ข seven-thirty +๐Ÿ•— eight oโ€™clock +๐Ÿ•ฃ eight-thirty +๐Ÿ•˜ nine oโ€™clock +๐Ÿ•ค nine-thirty +๐Ÿ•™ ten oโ€™clock +๐Ÿ•ฅ ten-thirty +๐Ÿ•š eleven oโ€™clock +๐Ÿ•ฆ eleven-thirty +๐ŸŒ‘ new moon +๐ŸŒ’ waxing crescent moon +๐ŸŒ“ first quarter moon +๐ŸŒ” waxing gibbous moon +๐ŸŒ• full moon +๐ŸŒ– waning gibbous moon +๐ŸŒ— last quarter moon +๐ŸŒ˜ waning crescent moon +๐ŸŒ™ crescent moon +๐ŸŒš new moon face +๐ŸŒ› first quarter moon face +๐ŸŒœ last quarter moon face +๐ŸŒก๏ธ thermometer +โ˜€๏ธ sun +๐ŸŒ full moon face +๐ŸŒž sun with face +๐Ÿช ringed planet +โญ star +๐ŸŒŸ glowing star +๐ŸŒ  shooting star +๐ŸŒŒ milky way +โ˜๏ธ cloud +โ›… sun behind cloud +โ›ˆ๏ธ cloud with lightning and rain +๐ŸŒค๏ธ sun behind small cloud +๐ŸŒฅ๏ธ sun behind large cloud +๐ŸŒฆ๏ธ sun behind rain cloud +๐ŸŒง๏ธ cloud with rain +๐ŸŒจ๏ธ cloud with snow +๐ŸŒฉ๏ธ cloud with lightning +๐ŸŒช๏ธ tornado +๐ŸŒซ๏ธ fog +๐ŸŒฌ๏ธ wind face +๐ŸŒ€ cyclone +๐ŸŒˆ rainbow +๐ŸŒ‚ closed umbrella +โ˜‚๏ธ umbrella +โ˜” umbrella with rain drops +โ›ฑ๏ธ umbrella on ground +โšก high voltage +โ„๏ธ snowflake +โ˜ƒ๏ธ snowman +โ›„ snowman without snow +โ˜„๏ธ comet +๐Ÿ”ฅ fire +๐Ÿ’ง droplet +๐ŸŒŠ water wave +๐ŸŽƒ jack-o-lantern +๐ŸŽ„ Christmas tree +๐ŸŽ† fireworks +๐ŸŽ‡ sparkler +๐Ÿงจ firecracker +โœจ sparkles +๐ŸŽˆ balloon +๐ŸŽ‰ party popper +๐ŸŽŠ confetti ball +๐ŸŽ‹ tanabata tree +๐ŸŽ pine decoration +๐ŸŽŽ Japanese dolls +๐ŸŽ carp streamer +๐ŸŽ wind chime +๐ŸŽ‘ moon viewing ceremony +๐Ÿงง red envelope +๐ŸŽ€ ribbon +๐ŸŽ wrapped gift +๐ŸŽ—๏ธ reminder ribbon +๐ŸŽŸ๏ธ admission tickets +๐ŸŽซ ticket +๐ŸŽ–๏ธ military medal +๐Ÿ† trophy +๐Ÿ… sports medal +๐Ÿฅ‡ 1st place medal +๐Ÿฅˆ 2nd place medal +๐Ÿฅ‰ 3rd place medal +โšฝ soccer ball +โšพ baseball +๐ŸฅŽ softball +๐Ÿ€ basketball +๐Ÿ volleyball +๐Ÿˆ american football +๐Ÿ‰ rugby football +๐ŸŽพ tennis +๐Ÿฅ flying disc +๐ŸŽณ bowling +๐Ÿ cricket game +๐Ÿ‘ field hockey +๐Ÿ’ ice hockey +๐Ÿฅ lacrosse +๐Ÿ“ ping pong +๐Ÿธ badminton +๐ŸฅŠ boxing glove +๐Ÿฅ‹ martial arts uniform +๐Ÿฅ… goal net +โ›ณ flag in hole +โ›ธ๏ธ ice skate +๐ŸŽฃ fishing pole +๐Ÿคฟ diving mask +๐ŸŽฝ running shirt +๐ŸŽฟ skis +๐Ÿ›ท sled +๐ŸฅŒ curling stone +๐ŸŽฏ bullseye +๐Ÿช€ yo-yo +๐Ÿช kite +๐ŸŽฑ pool 8 ball +๐Ÿ”ฎ crystal ball +๐Ÿช„ magic wand +๐Ÿงฟ nazar amulet +๐Ÿชฌ hamsa +๐ŸŽฎ video game +๐Ÿ•น๏ธ joystick +๐ŸŽฐ slot machine +๐ŸŽฒ game die +๐Ÿงฉ puzzle piece +๐Ÿงธ teddy bear +๐Ÿช… piรฑata +๐Ÿชฉ mirror ball +๐Ÿช† nesting dolls +โ™ ๏ธ spade suit +โ™ฅ๏ธ heart suit +โ™ฆ๏ธ diamond suit +โ™ฃ๏ธ club suit +โ™Ÿ๏ธ chess pawn +๐Ÿƒ joker +๐Ÿ€„ mahjong red dragon +๐ŸŽด flower playing cards +๐ŸŽญ performing arts +๐Ÿ–ผ๏ธ framed picture +๐ŸŽจ artist palette +๐Ÿงต thread +๐Ÿชก sewing needle +๐Ÿงถ yarn +๐Ÿชข knot +๐Ÿ‘“ glasses +๐Ÿ•ถ๏ธ sunglasses +๐Ÿฅฝ goggles +๐Ÿฅผ lab coat +๐Ÿฆบ safety vest +๐Ÿ‘” necktie +๐Ÿ‘• t-shirt +๐Ÿ‘– jeans +๐Ÿงฃ scarf +๐Ÿงค gloves +๐Ÿงฅ coat +๐Ÿงฆ socks +๐Ÿ‘— dress +๐Ÿ‘˜ kimono +๐Ÿฅป sari +๐Ÿฉฑ one-piece swimsuit +๐Ÿฉฒ briefs +๐Ÿฉณ shorts +๐Ÿ‘™ bikini +๐Ÿ‘š womanโ€™s clothes +๐Ÿ‘› purse +๐Ÿ‘œ handbag +๐Ÿ‘ clutch bag +๐Ÿ›๏ธ shopping bags +๐ŸŽ’ backpack +๐Ÿฉด thong sandal +๐Ÿ‘ž manโ€™s shoe +๐Ÿ‘Ÿ running shoe +๐Ÿฅพ hiking boot +๐Ÿฅฟ flat shoe +๐Ÿ‘  high-heeled shoe +๐Ÿ‘ก womanโ€™s sandal +๐Ÿฉฐ ballet shoes +๐Ÿ‘ข womanโ€™s boot +๐Ÿ‘‘ crown +๐Ÿ‘’ womanโ€™s hat +๐ŸŽฉ top hat +๐ŸŽ“ graduation cap +๐Ÿงข billed cap +๐Ÿช– military helmet +โ›‘๏ธ rescue workerโ€™s helmet +๐Ÿ“ฟ prayer beads +๐Ÿ’„ lipstick +๐Ÿ’ ring +๐Ÿ’Ž gem stone +๐Ÿ”‡ muted speaker +๐Ÿ”ˆ speaker low volume +๐Ÿ”‰ speaker medium volume +๐Ÿ”Š speaker high volume +๐Ÿ“ข loudspeaker +๐Ÿ“ฃ megaphone +๐Ÿ“ฏ postal horn +๐Ÿ”” bell +๐Ÿ”• bell with slash +๐ŸŽผ musical score +๐ŸŽต musical note +๐ŸŽถ musical notes +๐ŸŽ™๏ธ studio microphone +๐ŸŽš๏ธ level slider +๐ŸŽ›๏ธ control knobs +๐ŸŽค microphone +๐ŸŽง headphone +๐Ÿ“ป radio +๐ŸŽท saxophone +๐Ÿช— accordion +๐ŸŽธ guitar +๐ŸŽน musical keyboard +๐ŸŽบ trumpet +๐ŸŽป violin +๐Ÿช• banjo +๐Ÿฅ drum +๐Ÿช˜ long drum +๐Ÿ“ฑ mobile phone +๐Ÿ“ฒ mobile phone with arrow +โ˜Ž๏ธ telephone +๐Ÿ“ž telephone receiver +๐Ÿ“Ÿ pager +๐Ÿ“  fax machine +๐Ÿ”‹ battery +๐Ÿชซ low battery +๐Ÿ”Œ electric plug +๐Ÿ’ป laptop +๐Ÿ–ฅ๏ธ desktop computer +๐Ÿ–จ๏ธ printer +โŒจ๏ธ keyboard +๐Ÿ–ฑ๏ธ computer mouse +๐Ÿ–ฒ๏ธ trackball +๐Ÿ’ฝ computer disk +๐Ÿ’พ floppy disk +๐Ÿ’ฟ optical disk +๐Ÿ“€ dvd +๐Ÿงฎ abacus +๐ŸŽฅ movie camera +๐ŸŽž๏ธ film frames +๐Ÿ“ฝ๏ธ film projector +๐ŸŽฌ clapper board +๐Ÿ“บ television +๐Ÿ“ท camera +๐Ÿ“ธ camera with flash +๐Ÿ“น video camera +๐Ÿ“ผ videocassette +๐Ÿ” magnifying glass tilted left +๐Ÿ”Ž magnifying glass tilted right +๐Ÿ•ฏ๏ธ candle +๐Ÿ’ก light bulb +๐Ÿ”ฆ flashlight +๐Ÿฎ red paper lantern +๐Ÿช” diya lamp +๐Ÿ“” notebook with decorative cover +๐Ÿ“• closed book +๐Ÿ“– open book +๐Ÿ“— green book +๐Ÿ“˜ blue book +๐Ÿ“™ orange book +๐Ÿ“š books +๐Ÿ““ notebook +๐Ÿ“’ ledger +๐Ÿ“ƒ page with curl +๐Ÿ“œ scroll +๐Ÿ“„ page facing up +๐Ÿ“ฐ newspaper +๐Ÿ—ž๏ธ rolled-up newspaper +๐Ÿ“‘ bookmark tabs +๐Ÿ”– bookmark +๐Ÿท๏ธ label +๐Ÿ’ฐ money bag +๐Ÿช™ coin +๐Ÿ’ด yen banknote +๐Ÿ’ต dollar banknote +๐Ÿ’ถ euro banknote +๐Ÿ’ท pound banknote +๐Ÿ’ธ money with wings +๐Ÿ’ณ credit card +๐Ÿงพ receipt +๐Ÿ’น chart increasing with yen +โœ‰๏ธ envelope +๐Ÿ“ง e-mail +๐Ÿ“จ incoming envelope +๐Ÿ“ฉ envelope with arrow +๐Ÿ“ค outbox tray +๐Ÿ“ฅ inbox tray +๐Ÿ“ฆ package +๐Ÿ“ซ closed mailbox with raised flag +๐Ÿ“ช closed mailbox with lowered flag +๐Ÿ“ฌ open mailbox with raised flag +๐Ÿ“ญ open mailbox with lowered flag +๐Ÿ“ฎ postbox +๐Ÿ—ณ๏ธ ballot box with ballot +โœ๏ธ pencil +โœ’๏ธ black nib +๐Ÿ–‹๏ธ fountain pen +๐Ÿ–Š๏ธ pen +๐Ÿ–Œ๏ธ paintbrush +๐Ÿ–๏ธ crayon +๐Ÿ“ memo +๐Ÿ’ผ briefcase +๐Ÿ“ file folder +๐Ÿ“‚ open file folder +๐Ÿ—‚๏ธ card index dividers +๐Ÿ“… calendar +๐Ÿ“† tear-off calendar +๐Ÿ—’๏ธ spiral notepad +๐Ÿ—“๏ธ spiral calendar +๐Ÿ“‡ card index +๐Ÿ“ˆ chart increasing +๐Ÿ“‰ chart decreasing +๐Ÿ“Š bar chart +๐Ÿ“‹ clipboard +๐Ÿ“Œ pushpin +๐Ÿ“ round pushpin +๐Ÿ“Ž paperclip +๐Ÿ–‡๏ธ linked paperclips +๐Ÿ“ straight ruler +๐Ÿ“ triangular ruler +โœ‚๏ธ scissors +๐Ÿ—ƒ๏ธ card file box +๐Ÿ—„๏ธ file cabinet +๐Ÿ—‘๏ธ wastebasket +๐Ÿ”’ locked +๐Ÿ”“ unlocked +๐Ÿ” locked with pen +๐Ÿ” locked with key +๐Ÿ”‘ key +๐Ÿ—๏ธ old key +๐Ÿ”จ hammer +๐Ÿช“ axe +โ›๏ธ pick +โš’๏ธ hammer and pick +๐Ÿ› ๏ธ hammer and wrench +๐Ÿ—ก๏ธ dagger +โš”๏ธ crossed swords +๐Ÿ”ซ water pistol +๐Ÿชƒ boomerang +๐Ÿน bow and arrow +๐Ÿ›ก๏ธ shield +๐Ÿชš carpentry saw +๐Ÿ”ง wrench +๐Ÿช› screwdriver +๐Ÿ”ฉ nut and bolt +โš™๏ธ gear +๐Ÿ—œ๏ธ clamp +โš–๏ธ balance scale +๐Ÿฆฏ white cane +๐Ÿ”— link +โ›“๏ธ chains +๐Ÿช hook +๐Ÿงฐ toolbox +๐Ÿงฒ magnet +๐Ÿชœ ladder +โš—๏ธ alembic +๐Ÿงช test tube +๐Ÿงซ petri dish +๐Ÿงฌ dna +๐Ÿ”ฌ microscope +๐Ÿ”ญ telescope +๐Ÿ“ก satellite antenna +๐Ÿ’‰ syringe +๐Ÿฉธ drop of blood +๐Ÿ’Š pill +๐Ÿฉน adhesive bandage +๐Ÿฉผ crutch +๐Ÿฉบ stethoscope +๐Ÿฉป x-ray +๐Ÿšช door +๐Ÿ›— elevator +๐Ÿชž mirror +๐ŸชŸ window +๐Ÿ›๏ธ bed +๐Ÿ›‹๏ธ couch and lamp +๐Ÿช‘ chair +๐Ÿšฝ toilet +๐Ÿช  plunger +๐Ÿšฟ shower +๐Ÿ› bathtub +๐Ÿชค mouse trap +๐Ÿช’ razor +๐Ÿงด lotion bottle +๐Ÿงท safety pin +๐Ÿงน broom +๐Ÿงบ basket +๐Ÿงป roll of paper +๐Ÿชฃ bucket +๐Ÿงผ soap +๐Ÿซง bubbles +๐Ÿชฅ toothbrush +๐Ÿงฝ sponge +๐Ÿงฏ fire extinguisher +๐Ÿ›’ shopping cart +๐Ÿšฌ cigarette +โšฐ๏ธ coffin +๐Ÿชฆ headstone +โšฑ๏ธ funeral urn +๐Ÿ—ฟ moai +๐Ÿชง placard +๐Ÿชช identification card +๐Ÿง ATM sign +๐Ÿšฎ litter in bin sign +๐Ÿšฐ potable water +โ™ฟ wheelchair symbol +๐Ÿšน menโ€™s room +๐Ÿšบ womenโ€™s room +๐Ÿšป restroom +๐Ÿšผ baby symbol +๐Ÿšพ water closet +๐Ÿ›‚ passport control +๐Ÿ›ƒ customs +๐Ÿ›„ baggage claim +๐Ÿ›… left luggage +โš ๏ธ warning +๐Ÿšธ children crossing +โ›” no entry +๐Ÿšซ prohibited +๐Ÿšณ no bicycles +๐Ÿšญ no smoking +๐Ÿšฏ no littering +๐Ÿšฑ non-potable water +๐Ÿšท no pedestrians +๐Ÿ“ต no mobile phones +๐Ÿ”ž no one under eighteen +โ˜ข๏ธ radioactive +โ˜ฃ๏ธ biohazard +โฌ†๏ธ up arrow +โ†—๏ธ up-right arrow +โžก๏ธ right arrow +โ†˜๏ธ down-right arrow +โฌ‡๏ธ down arrow +โ†™๏ธ down-left arrow +โฌ…๏ธ left arrow +โ†–๏ธ up-left arrow +โ†•๏ธ up-down arrow +โ†”๏ธ left-right arrow +โ†ฉ๏ธ right arrow curving left +โ†ช๏ธ left arrow curving right +โคด๏ธ right arrow curving up +โคต๏ธ right arrow curving down +๐Ÿ”ƒ clockwise vertical arrows +๐Ÿ”„ counterclockwise arrows button +๐Ÿ”™ BACK arrow +๐Ÿ”š END arrow +๐Ÿ”› ON! arrow +๐Ÿ”œ SOON arrow +๐Ÿ” TOP arrow +๐Ÿ› place of worship +โš›๏ธ atom symbol +๐Ÿ•‰๏ธ om +โœก๏ธ star of David +โ˜ธ๏ธ wheel of dharma +โ˜ฏ๏ธ yin yang +โœ๏ธ latin cross +โ˜ฆ๏ธ orthodox cross +โ˜ช๏ธ star and crescent +โ˜ฎ๏ธ peace symbol +๐Ÿ•Ž menorah +๐Ÿ”ฏ dotted six-pointed star +โ™ˆ Aries +โ™‰ Taurus +โ™Š Gemini +โ™‹ Cancer +โ™Œ Leo +โ™ Virgo +โ™Ž Libra +โ™ Scorpio +โ™ Sagittarius +โ™‘ Capricorn +โ™’ Aquarius +โ™“ Pisces +โ›Ž Ophiuchus +๐Ÿ”€ shuffle tracks button +๐Ÿ” repeat button +๐Ÿ”‚ repeat single button +โ–ถ๏ธ play button +โฉ fast-forward button +โญ๏ธ next track button +โฏ๏ธ play or pause button +โ—€๏ธ reverse button +โช fast reverse button +โฎ๏ธ last track button +๐Ÿ”ผ upwards button +โซ fast up button +๐Ÿ”ฝ downwards button +โฌ fast down button +โธ๏ธ pause button +โน๏ธ stop button +โบ๏ธ record button +โ๏ธ eject button +๐ŸŽฆ cinema +๐Ÿ”… dim button +๐Ÿ”† bright button +๐Ÿ“ถ antenna bars +๐Ÿ“ณ vibration mode +๐Ÿ“ด mobile phone off +โ™€๏ธ female sign +โ™‚๏ธ male sign +โšง๏ธ transgender symbol +โœ–๏ธ multiply +โž• plus +โž– minus +โž— divide +๐ŸŸฐ heavy equals sign +โ™พ๏ธ infinity +โ€ผ๏ธ double exclamation mark +โ‰๏ธ exclamation question mark +โ“ red question mark +โ” white question mark +โ• white exclamation mark +โ— red exclamation mark +ใ€ฐ๏ธ wavy dash +๐Ÿ’ฑ currency exchange +๐Ÿ’ฒ heavy dollar sign +โš•๏ธ medical symbol +โ™ป๏ธ recycling symbol +โšœ๏ธ fleur-de-lis +๐Ÿ”ฑ trident emblem +๐Ÿ“› name badge +๐Ÿ”ฐ Japanese symbol for beginner +โญ• hollow red circle +โœ… check mark button +โ˜‘๏ธ check box with check +โœ”๏ธ check mark +โŒ cross mark +โŽ cross mark button +โžฐ curly loop +โžฟ double curly loop +ใ€ฝ๏ธ part alternation mark +โœณ๏ธ eight-spoked asterisk +โœด๏ธ eight-pointed star +โ‡๏ธ sparkle +ยฉ๏ธ copyright +ยฎ๏ธ registered +โ„ข๏ธ trade mark +#๏ธโƒฃ keycap: # +*๏ธโƒฃ keycap: * +0๏ธโƒฃ keycap: 0 +1๏ธโƒฃ keycap: 1 +2๏ธโƒฃ keycap: 2 +3๏ธโƒฃ keycap: 3 +4๏ธโƒฃ keycap: 4 +5๏ธโƒฃ keycap: 5 +6๏ธโƒฃ keycap: 6 +7๏ธโƒฃ keycap: 7 +8๏ธโƒฃ keycap: 8 +9๏ธโƒฃ keycap: 9 +๐Ÿ”Ÿ keycap: 10 +๐Ÿ”  input latin uppercase +๐Ÿ”ก input latin lowercase +๐Ÿ”ข input numbers +๐Ÿ”ฃ input symbols +๐Ÿ”ค input latin letters +๐Ÿ…ฐ๏ธ A button (blood type) +๐Ÿ†Ž AB button (blood type) +๐Ÿ…ฑ๏ธ B button (blood type) +๐Ÿ†‘ CL button +๐Ÿ†’ COOL button +๐Ÿ†“ FREE button +โ„น๏ธ information +๐Ÿ†” ID button +โ“‚๏ธ circled M +๐Ÿ†• NEW button +๐Ÿ†– NG button +๐Ÿ…พ๏ธ O button (blood type) +๐Ÿ†— OK button +๐Ÿ…ฟ๏ธ P button +๐Ÿ†˜ SOS button +๐Ÿ†™ UP! button +๐Ÿ†š VS button +๐Ÿˆ Japanese โ€œhereโ€ button +๐Ÿˆ‚๏ธ Japanese โ€œservice chargeโ€ button +๐Ÿˆท๏ธ Japanese โ€œmonthly amountโ€ button +๐Ÿˆถ Japanese โ€œnot free of chargeโ€ button +๐Ÿˆฏ Japanese โ€œreservedโ€ button +๐Ÿ‰ Japanese โ€œbargainโ€ button +๐Ÿˆน Japanese โ€œdiscountโ€ button +๐Ÿˆš Japanese โ€œfree of chargeโ€ button +๐Ÿˆฒ Japanese โ€œprohibitedโ€ button +๐Ÿ‰‘ Japanese โ€œacceptableโ€ button +๐Ÿˆธ Japanese โ€œapplicationโ€ button +๐Ÿˆด Japanese โ€œpassing gradeโ€ button +๐Ÿˆณ Japanese โ€œvacancyโ€ button +ใŠ—๏ธ Japanese โ€œcongratulationsโ€ button +ใŠ™๏ธ Japanese โ€œsecretโ€ button +๐Ÿˆบ Japanese โ€œopen for businessโ€ button +๐Ÿˆต Japanese โ€œno vacancyโ€ button +๐Ÿ”ด red circle +๐ŸŸ  orange circle +๐ŸŸก yellow circle +๐ŸŸข green circle +๐Ÿ”ต blue circle +๐ŸŸฃ purple circle +๐ŸŸค brown circle +โšซ black circle +โšช white circle +๐ŸŸฅ red square +๐ŸŸง orange square +๐ŸŸจ yellow square +๐ŸŸฉ green square +๐ŸŸฆ blue square +๐ŸŸช purple square +๐ŸŸซ brown square +โฌ› black large square +โฌœ white large square +โ—ผ๏ธ black medium square +โ—ป๏ธ white medium square +โ—พ black medium-small square +โ—ฝ white medium-small square +โ–ช๏ธ black small square +โ–ซ๏ธ white small square +๐Ÿ”ถ large orange diamond +๐Ÿ”ท large blue diamond +๐Ÿ”ธ small orange diamond +๐Ÿ”น small blue diamond +๐Ÿ”บ red triangle pointed up +๐Ÿ”ป red triangle pointed down +๐Ÿ’  diamond with a dot +๐Ÿ”˜ radio button +๐Ÿ”ณ white square button +๐Ÿ”ฒ black square button +๐Ÿ chequered flag +๐Ÿšฉ triangular flag +๐ŸŽŒ crossed flags +๐Ÿด black flag +๐Ÿณ๏ธ white flag +๐Ÿ‡ฆ๐Ÿ‡จ flag: Ascension Island +๐Ÿ‡ฆ๐Ÿ‡ฉ flag: Andorra +๐Ÿ‡ฆ๐Ÿ‡ช flag: United Arab Emirates +๐Ÿ‡ฆ๐Ÿ‡ซ flag: Afghanistan +๐Ÿ‡ฆ๐Ÿ‡ฌ flag: Antigua & Barbuda +๐Ÿ‡ฆ๐Ÿ‡ฎ flag: Anguilla +๐Ÿ‡ฆ๐Ÿ‡ฑ flag: Albania +๐Ÿ‡ฆ๐Ÿ‡ฒ flag: Armenia +๐Ÿ‡ฆ๐Ÿ‡ด flag: Angola +๐Ÿ‡ฆ๐Ÿ‡ถ flag: Antarctica +๐Ÿ‡ฆ๐Ÿ‡ท flag: Argentina +๐Ÿ‡ฆ๐Ÿ‡ธ flag: American Samoa +๐Ÿ‡ฆ๐Ÿ‡น flag: Austria +๐Ÿ‡ฆ๐Ÿ‡บ flag: Australia +๐Ÿ‡ฆ๐Ÿ‡ผ flag: Aruba +๐Ÿ‡ฆ๐Ÿ‡ฝ flag: ร…land Islands +๐Ÿ‡ฆ๐Ÿ‡ฟ flag: Azerbaijan +๐Ÿ‡ง๐Ÿ‡ฆ flag: Bosnia & Herzegovina +๐Ÿ‡ง๐Ÿ‡ง flag: Barbados +๐Ÿ‡ง๐Ÿ‡ฉ flag: Bangladesh +๐Ÿ‡ง๐Ÿ‡ช flag: Belgium +๐Ÿ‡ง๐Ÿ‡ซ flag: Burkina Faso +๐Ÿ‡ง๐Ÿ‡ฌ flag: Bulgaria +๐Ÿ‡ง๐Ÿ‡ญ flag: Bahrain +๐Ÿ‡ง๐Ÿ‡ฎ flag: Burundi +๐Ÿ‡ง๐Ÿ‡ฏ flag: Benin +๐Ÿ‡ง๐Ÿ‡ฑ flag: St. Barthรฉlemy +๐Ÿ‡ง๐Ÿ‡ฒ flag: Bermuda +๐Ÿ‡ง๐Ÿ‡ณ flag: Brunei +๐Ÿ‡ง๐Ÿ‡ด flag: Bolivia +๐Ÿ‡ง๐Ÿ‡ถ flag: Caribbean Netherlands +๐Ÿ‡ง๐Ÿ‡ท flag: Brazil +๐Ÿ‡ง๐Ÿ‡ธ flag: Bahamas +๐Ÿ‡ง๐Ÿ‡น flag: Bhutan +๐Ÿ‡ง๐Ÿ‡ป flag: Bouvet Island +๐Ÿ‡ง๐Ÿ‡ผ flag: Botswana +๐Ÿ‡ง๐Ÿ‡พ flag: Belarus +๐Ÿ‡ง๐Ÿ‡ฟ flag: Belize +๐Ÿ‡จ๐Ÿ‡ฆ flag: Canada +๐Ÿ‡จ๐Ÿ‡จ flag: Cocos (Keeling) Islands +๐Ÿ‡จ๐Ÿ‡ฉ flag: Congo - Kinshasa +๐Ÿ‡จ๐Ÿ‡ซ flag: Central African Republic +๐Ÿ‡จ๐Ÿ‡ฌ flag: Congo - Brazzaville +๐Ÿ‡จ๐Ÿ‡ญ flag: Switzerland +๐Ÿ‡จ๐Ÿ‡ฎ flag: Cรดte dโ€™Ivoire +๐Ÿ‡จ๐Ÿ‡ฐ flag: Cook Islands +๐Ÿ‡จ๐Ÿ‡ฑ flag: Chile +๐Ÿ‡จ๐Ÿ‡ฒ flag: Cameroon +๐Ÿ‡จ๐Ÿ‡ณ flag: China +๐Ÿ‡จ๐Ÿ‡ด flag: Colombia +๐Ÿ‡จ๐Ÿ‡ต flag: Clipperton Island +๐Ÿ‡จ๐Ÿ‡ท flag: Costa Rica +๐Ÿ‡จ๐Ÿ‡บ flag: Cuba +๐Ÿ‡จ๐Ÿ‡ป flag: Cape Verde +๐Ÿ‡จ๐Ÿ‡ผ flag: Curaรงao +๐Ÿ‡จ๐Ÿ‡ฝ flag: Christmas Island +๐Ÿ‡จ๐Ÿ‡พ flag: Cyprus +๐Ÿ‡จ๐Ÿ‡ฟ flag: Czechia +๐Ÿ‡ฉ๐Ÿ‡ช flag: Germany +๐Ÿ‡ฉ๐Ÿ‡ฌ flag: Diego Garcia +๐Ÿ‡ฉ๐Ÿ‡ฏ flag: Djibouti +๐Ÿ‡ฉ๐Ÿ‡ฐ flag: Denmark +๐Ÿ‡ฉ๐Ÿ‡ฒ flag: Dominica +๐Ÿ‡ฉ๐Ÿ‡ด flag: Dominican Republic +๐Ÿ‡ฉ๐Ÿ‡ฟ flag: Algeria +๐Ÿ‡ช๐Ÿ‡ฆ flag: Ceuta & Melilla +๐Ÿ‡ช๐Ÿ‡จ flag: Ecuador +๐Ÿ‡ช๐Ÿ‡ช flag: Estonia +๐Ÿ‡ช๐Ÿ‡ฌ flag: Egypt +๐Ÿ‡ช๐Ÿ‡ญ flag: Western Sahara +๐Ÿ‡ช๐Ÿ‡ท flag: Eritrea +๐Ÿ‡ช๐Ÿ‡ธ flag: Spain +๐Ÿ‡ช๐Ÿ‡น flag: Ethiopia +๐Ÿ‡ช๐Ÿ‡บ flag: European Union +๐Ÿ‡ซ๐Ÿ‡ฎ flag: Finland +๐Ÿ‡ซ๐Ÿ‡ฏ flag: Fiji +๐Ÿ‡ซ๐Ÿ‡ฐ flag: Falkland Islands +๐Ÿ‡ซ๐Ÿ‡ฒ flag: Micronesia +๐Ÿ‡ซ๐Ÿ‡ด flag: Faroe Islands +๐Ÿ‡ซ๐Ÿ‡ท flag: France +๐Ÿ‡ฌ๐Ÿ‡ฆ flag: Gabon +๐Ÿ‡ฌ๐Ÿ‡ง flag: United Kingdom +๐Ÿ‡ฌ๐Ÿ‡ฉ flag: Grenada +๐Ÿ‡ฌ๐Ÿ‡ช flag: Georgia +๐Ÿ‡ฌ๐Ÿ‡ซ flag: French Guiana +๐Ÿ‡ฌ๐Ÿ‡ฌ flag: Guernsey +๐Ÿ‡ฌ๐Ÿ‡ญ flag: Ghana +๐Ÿ‡ฌ๐Ÿ‡ฎ flag: Gibraltar +๐Ÿ‡ฌ๐Ÿ‡ฑ flag: Greenland +๐Ÿ‡ฌ๐Ÿ‡ฒ flag: Gambia +๐Ÿ‡ฌ๐Ÿ‡ณ flag: Guinea +๐Ÿ‡ฌ๐Ÿ‡ต flag: Guadeloupe +๐Ÿ‡ฌ๐Ÿ‡ถ flag: Equatorial Guinea +๐Ÿ‡ฌ๐Ÿ‡ท flag: Greece +๐Ÿ‡ฌ๐Ÿ‡ธ flag: South Georgia & South Sandwich Islands +๐Ÿ‡ฌ๐Ÿ‡น flag: Guatemala +๐Ÿ‡ฌ๐Ÿ‡บ flag: Guam +๐Ÿ‡ฌ๐Ÿ‡ผ flag: Guinea-Bissau +๐Ÿ‡ฌ๐Ÿ‡พ flag: Guyana +๐Ÿ‡ญ๐Ÿ‡ฐ flag: Hong Kong SAR China +๐Ÿ‡ญ๐Ÿ‡ฒ flag: Heard & McDonald Islands +๐Ÿ‡ญ๐Ÿ‡ณ flag: Honduras +๐Ÿ‡ญ๐Ÿ‡ท flag: Croatia +๐Ÿ‡ญ๐Ÿ‡น flag: Haiti +๐Ÿ‡ญ๐Ÿ‡บ flag: Hungary +๐Ÿ‡ฎ๐Ÿ‡จ flag: Canary Islands +๐Ÿ‡ฎ๐Ÿ‡ฉ flag: Indonesia +๐Ÿ‡ฎ๐Ÿ‡ช flag: Ireland +๐Ÿ‡ฎ๐Ÿ‡ฑ flag: Israel +๐Ÿ‡ฎ๐Ÿ‡ฒ flag: Isle of Man +๐Ÿ‡ฎ๐Ÿ‡ณ flag: India +๐Ÿ‡ฎ๐Ÿ‡ด flag: British Indian Ocean Territory +๐Ÿ‡ฎ๐Ÿ‡ถ flag: Iraq +๐Ÿ‡ฎ๐Ÿ‡ท flag: Iran +๐Ÿ‡ฎ๐Ÿ‡ธ flag: Iceland +๐Ÿ‡ฎ๐Ÿ‡น flag: Italy +๐Ÿ‡ฏ๐Ÿ‡ช flag: Jersey +๐Ÿ‡ฏ๐Ÿ‡ฒ flag: Jamaica +๐Ÿ‡ฏ๐Ÿ‡ด flag: Jordan +๐Ÿ‡ฏ๐Ÿ‡ต flag: Japan +๐Ÿ‡ฐ๐Ÿ‡ช flag: Kenya +๐Ÿ‡ฐ๐Ÿ‡ฌ flag: Kyrgyzstan +๐Ÿ‡ฐ๐Ÿ‡ญ flag: Cambodia +๐Ÿ‡ฐ๐Ÿ‡ฎ flag: Kiribati +๐Ÿ‡ฐ๐Ÿ‡ฒ flag: Comoros +๐Ÿ‡ฐ๐Ÿ‡ณ flag: St. Kitts & Nevis +๐Ÿ‡ฐ๐Ÿ‡ต flag: North Korea +๐Ÿ‡ฐ๐Ÿ‡ท flag: South Korea +๐Ÿ‡ฐ๐Ÿ‡ผ flag: Kuwait +๐Ÿ‡ฐ๐Ÿ‡พ flag: Cayman Islands +๐Ÿ‡ฐ๐Ÿ‡ฟ flag: Kazakhstan +๐Ÿ‡ฑ๐Ÿ‡ฆ flag: Laos +๐Ÿ‡ฑ๐Ÿ‡ง flag: Lebanon +๐Ÿ‡ฑ๐Ÿ‡จ flag: St. Lucia +๐Ÿ‡ฑ๐Ÿ‡ฎ flag: Liechtenstein +๐Ÿ‡ฑ๐Ÿ‡ฐ flag: Sri Lanka +๐Ÿ‡ฑ๐Ÿ‡ท flag: Liberia +๐Ÿ‡ฑ๐Ÿ‡ธ flag: Lesotho +๐Ÿ‡ฑ๐Ÿ‡น flag: Lithuania +๐Ÿ‡ฑ๐Ÿ‡บ flag: Luxembourg +๐Ÿ‡ฑ๐Ÿ‡ป flag: Latvia +๐Ÿ‡ฑ๐Ÿ‡พ flag: Libya +๐Ÿ‡ฒ๐Ÿ‡ฆ flag: Morocco +๐Ÿ‡ฒ๐Ÿ‡จ flag: Monaco +๐Ÿ‡ฒ๐Ÿ‡ฉ flag: Moldova +๐Ÿ‡ฒ๐Ÿ‡ช flag: Montenegro +๐Ÿ‡ฒ๐Ÿ‡ซ flag: St. Martin +๐Ÿ‡ฒ๐Ÿ‡ฌ flag: Madagascar +๐Ÿ‡ฒ๐Ÿ‡ญ flag: Marshall Islands +๐Ÿ‡ฒ๐Ÿ‡ฐ flag: North Macedonia +๐Ÿ‡ฒ๐Ÿ‡ฑ flag: Mali +๐Ÿ‡ฒ๐Ÿ‡ฒ flag: Myanmar (Burma) +๐Ÿ‡ฒ๐Ÿ‡ณ flag: Mongolia +๐Ÿ‡ฒ๐Ÿ‡ด flag: Macao SAR China +๐Ÿ‡ฒ๐Ÿ‡ต flag: Northern Mariana Islands +๐Ÿ‡ฒ๐Ÿ‡ถ flag: Martinique +๐Ÿ‡ฒ๐Ÿ‡ท flag: Mauritania +๐Ÿ‡ฒ๐Ÿ‡ธ flag: Montserrat +๐Ÿ‡ฒ๐Ÿ‡น flag: Malta +๐Ÿ‡ฒ๐Ÿ‡บ flag: Mauritius +๐Ÿ‡ฒ๐Ÿ‡ป flag: Maldives +๐Ÿ‡ฒ๐Ÿ‡ผ flag: Malawi +๐Ÿ‡ฒ๐Ÿ‡ฝ flag: Mexico +๐Ÿ‡ฒ๐Ÿ‡พ flag: Malaysia +๐Ÿ‡ฒ๐Ÿ‡ฟ flag: Mozambique +๐Ÿ‡ณ๐Ÿ‡ฆ flag: Namibia +๐Ÿ‡ณ๐Ÿ‡จ flag: New Caledonia +๐Ÿ‡ณ๐Ÿ‡ช flag: Niger +๐Ÿ‡ณ๐Ÿ‡ซ flag: Norfolk Island +๐Ÿ‡ณ๐Ÿ‡ฌ flag: Nigeria +๐Ÿ‡ณ๐Ÿ‡ฎ flag: Nicaragua +๐Ÿ‡ณ๐Ÿ‡ฑ flag: Netherlands +๐Ÿ‡ณ๐Ÿ‡ด flag: Norway +๐Ÿ‡ณ๐Ÿ‡ต flag: Nepal +๐Ÿ‡ณ๐Ÿ‡ท flag: Nauru +๐Ÿ‡ณ๐Ÿ‡บ flag: Niue +๐Ÿ‡ณ๐Ÿ‡ฟ flag: New Zealand +๐Ÿ‡ด๐Ÿ‡ฒ flag: Oman +๐Ÿ‡ต๐Ÿ‡ฆ flag: Panama +๐Ÿ‡ต๐Ÿ‡ช flag: Peru +๐Ÿ‡ต๐Ÿ‡ซ flag: French Polynesia +๐Ÿ‡ต๐Ÿ‡ฌ flag: Papua New Guinea +๐Ÿ‡ต๐Ÿ‡ญ flag: Philippines +๐Ÿ‡ต๐Ÿ‡ฐ flag: Pakistan +๐Ÿ‡ต๐Ÿ‡ฑ flag: Poland +๐Ÿ‡ต๐Ÿ‡ฒ flag: St. Pierre & Miquelon +๐Ÿ‡ต๐Ÿ‡ณ flag: Pitcairn Islands +๐Ÿ‡ต๐Ÿ‡ท flag: Puerto Rico +๐Ÿ‡ต๐Ÿ‡ธ flag: Palestinian Territories +๐Ÿ‡ต๐Ÿ‡น flag: Portugal +๐Ÿ‡ต๐Ÿ‡ผ flag: Palau +๐Ÿ‡ต๐Ÿ‡พ flag: Paraguay +๐Ÿ‡ถ๐Ÿ‡ฆ flag: Qatar +๐Ÿ‡ท๐Ÿ‡ช flag: Rรฉunion +๐Ÿ‡ท๐Ÿ‡ด flag: Romania +๐Ÿ‡ท๐Ÿ‡ธ flag: Serbia +๐Ÿ‡ท๐Ÿ‡บ flag: Russia +๐Ÿ‡ท๐Ÿ‡ผ flag: Rwanda +๐Ÿ‡ธ๐Ÿ‡ฆ flag: Saudi Arabia +๐Ÿ‡ธ๐Ÿ‡ง flag: Solomon Islands +๐Ÿ‡ธ๐Ÿ‡จ flag: Seychelles +๐Ÿ‡ธ๐Ÿ‡ฉ flag: Sudan +๐Ÿ‡ธ๐Ÿ‡ช flag: Sweden +๐Ÿ‡ธ๐Ÿ‡ฌ flag: Singapore +๐Ÿ‡ธ๐Ÿ‡ญ flag: St. Helena +๐Ÿ‡ธ๐Ÿ‡ฎ flag: Slovenia +๐Ÿ‡ธ๐Ÿ‡ฏ flag: Svalbard & Jan Mayen +๐Ÿ‡ธ๐Ÿ‡ฐ flag: Slovakia +๐Ÿ‡ธ๐Ÿ‡ฑ flag: Sierra Leone +๐Ÿ‡ธ๐Ÿ‡ฒ flag: San Marino +๐Ÿ‡ธ๐Ÿ‡ณ flag: Senegal +๐Ÿ‡ธ๐Ÿ‡ด flag: Somalia +๐Ÿ‡ธ๐Ÿ‡ท flag: Suriname +๐Ÿ‡ธ๐Ÿ‡ธ flag: South Sudan +๐Ÿ‡ธ๐Ÿ‡น flag: Sรฃo Tomรฉ & Prรญncipe +๐Ÿ‡ธ๐Ÿ‡ป flag: El Salvador +๐Ÿ‡ธ๐Ÿ‡ฝ flag: Sint Maarten +๐Ÿ‡ธ๐Ÿ‡พ flag: Syria +๐Ÿ‡ธ๐Ÿ‡ฟ flag: Eswatini +๐Ÿ‡น๐Ÿ‡ฆ flag: Tristan da Cunha +๐Ÿ‡น๐Ÿ‡จ flag: Turks & Caicos Islands +๐Ÿ‡น๐Ÿ‡ฉ flag: Chad +๐Ÿ‡น๐Ÿ‡ซ flag: French Southern Territories +๐Ÿ‡น๐Ÿ‡ฌ flag: Togo +๐Ÿ‡น๐Ÿ‡ญ flag: Thailand +๐Ÿ‡น๐Ÿ‡ฏ flag: Tajikistan +๐Ÿ‡น๐Ÿ‡ฐ flag: Tokelau +๐Ÿ‡น๐Ÿ‡ฑ flag: Timor-Leste +๐Ÿ‡น๐Ÿ‡ฒ flag: Turkmenistan +๐Ÿ‡น๐Ÿ‡ณ flag: Tunisia +๐Ÿ‡น๐Ÿ‡ด flag: Tonga +๐Ÿ‡น๐Ÿ‡ท flag: Turkey +๐Ÿ‡น๐Ÿ‡น flag: Trinidad & Tobago +๐Ÿ‡น๐Ÿ‡ป flag: Tuvalu +๐Ÿ‡น๐Ÿ‡ผ flag: Taiwan +๐Ÿ‡น๐Ÿ‡ฟ flag: Tanzania +๐Ÿ‡บ๐Ÿ‡ฆ flag: Ukraine +๐Ÿ‡บ๐Ÿ‡ฌ flag: Uganda +๐Ÿ‡บ๐Ÿ‡ฒ flag: U.S. Outlying Islands +๐Ÿ‡บ๐Ÿ‡ณ flag: United Nations +๐Ÿ‡บ๐Ÿ‡ธ flag: United States +๐Ÿ‡บ๐Ÿ‡พ flag: Uruguay +๐Ÿ‡บ๐Ÿ‡ฟ flag: Uzbekistan +๐Ÿ‡ป๐Ÿ‡ฆ flag: Vatican City +๐Ÿ‡ป๐Ÿ‡จ flag: St. Vincent & Grenadines +๐Ÿ‡ป๐Ÿ‡ช flag: Venezuela +๐Ÿ‡ป๐Ÿ‡ฌ flag: British Virgin Islands +๐Ÿ‡ป๐Ÿ‡ฎ flag: U.S. Virgin Islands +๐Ÿ‡ป๐Ÿ‡ณ flag: Vietnam +๐Ÿ‡ป๐Ÿ‡บ flag: Vanuatu +๐Ÿ‡ผ๐Ÿ‡ซ flag: Wallis & Futuna +๐Ÿ‡ผ๐Ÿ‡ธ flag: Samoa +๐Ÿ‡ฝ๐Ÿ‡ฐ flag: Kosovo +๐Ÿ‡พ๐Ÿ‡ช flag: Yemen +๐Ÿ‡พ๐Ÿ‡น flag: Mayotte +๐Ÿ‡ฟ๐Ÿ‡ฆ flag: South Africa +๐Ÿ‡ฟ๐Ÿ‡ฒ flag: Zambia +๐Ÿ‡ฟ๐Ÿ‡ผ flag: Zimbabwe +๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ flag: England +๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ flag: Scotland +๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ flag: Wales diff --git a/.local/share/larbs/chars/font-awesome b/.local/share/larbs/chars/font-awesome @@ -0,0 +1,1456 @@ +๏‰ฎ 500px; f26e +๏จ accessible-icon; f368 +๏ฉ accusoft; f369 +๏šฏ acquisitions-incorporated; f6af +๏™ ad; f641 +๏Šน address-book; f2b9 +๏Šป address-card; f2bb +๏‚ adjust; f042 +๏…ฐ adn; f170 +๏ช adversal; f36a +๏ซ affiliatetheme; f36b +๏— air-freshener; f5d0 +๏ ด airbnb; f834 +๏ฌ algolia; f36c +๏€ท align-center; f037 +๏€น align-justify; f039 +๏€ถ align-left; f036 +๏€ธ align-right; f038 +๏™‚ alipay; f642 +๏‘ก allergies; f461 +๏‰ฐ amazon; f270 +๏ฌ amazon-pay; f42c +๏ƒน ambulance; f0f9 +๏Šฃ american-sign-language-interpreting; f2a3 +๏ญ amilia; f36d +๏„ฝ anchor; f13d +๏…ป android; f17b +๏ˆ‰ angellist; f209 +๏„ƒ angle-double-down; f103 +๏„€ angle-double-left; f100 +๏„ angle-double-right; f101 +๏„‚ angle-double-up; f102 +๏„‡ angle-down; f107 +๏„„ angle-left; f104 +๏„… angle-right; f105 +๏„† angle-up; f106 +๏•– angry; f556 +๏ฎ angrycreative; f36e +๏  angular; f420 +๏™„ ankh; f644 +๏ฏ app-store; f36f +๏ฐ app-store-ios; f370 +๏ฑ apper; f371 +๏…น apple; f179 +๏—‘ apple-alt; f5d1 +๏• apple-pay; f415 +๏†‡ archive; f187 +๏•— archway; f557 +๏˜ arrow-alt-circle-down; f358 +๏™ arrow-alt-circle-left; f359 +๏š arrow-alt-circle-right; f35a +๏› arrow-alt-circle-up; f35b +๏‚ซ arrow-circle-down; f0ab +๏‚จ arrow-circle-left; f0a8 +๏‚ฉ arrow-circle-right; f0a9 +๏‚ช arrow-circle-up; f0aa +๏ฃ arrow-down; f063 +๏  arrow-left; f060 +๏ก arrow-right; f061 +๏ข arrow-up; f062 +๏‚ฒ arrows-alt; f0b2 +๏Œท arrows-alt-h; f337 +๏Œธ arrows-alt-v; f338 +๏บ artstation; f77a +๏Šข assistive-listening-systems; f2a2 +๏ฉ asterisk; f069 +๏ฒ asymmetrik; f372 +๏‡บ at; f1fa +๏•˜ atlas; f558 +๏ป atlassian; f77b +๏—’ atom; f5d2 +๏ณ audible; f373 +๏Šž audio-description; f29e +๏œ autoprefixer; f41c +๏ด avianex; f374 +๏ก aviato; f421 +๏•™ award; f559 +๏ต aws; f375 +๏ผ baby; f77c +๏ฝ baby-carriage; f77d +๏•š backspace; f55a +๏Š backward; f04a +๏Ÿฅ bacon; f7e5 +๎™ bacteria e059 +๎š bacterium e05a +๏™ฆ bahai; f666 +๏‰Ž balance-scale; f24e +๏”• balance-scale-left; f515 +๏”– balance-scale-right; f516 +๏ž ban; f05e +๏‘ข band-aid; f462 +๏‹• bandcamp; f2d5 +๏€ช barcode; f02a +๏ƒ‰ bars; f0c9 +๏ณ baseball-ball; f433 +๏ด basketball-ball; f434 +๏‹ bath; f2cd +๏‰„ battery-empty; f244 +๏‰€ battery-full; f240 +๏‰‚ battery-half; f242 +๏‰ƒ battery-quarter; f243 +๏‰ battery-three-quarters; f241 +๏ ต battle-net; f835 +๏ˆถ bed; f236 +๏ƒผ beer; f0fc +๏†ด behance; f1b4 +๏†ต behance-square; f1b5 +๏ƒณ bell; f0f3 +๏‡ถ bell-slash; f1f6 +๏•› bezier-curve; f55b +๏™‡ bible; f647 +๏ˆ† bicycle; f206 +๏กŠ biking; f84a +๏ธ bimobject; f378 +๏‡ฅ binoculars; f1e5 +๏ž€ biohazard; f780 +๏‡ฝ birthday-cake; f1fd +๏…ฑ bitbucket; f171 +๏น bitcoin; f379 +๏บ bity; f37a +๏‰พ black-tie; f27e +๏ป blackberry; f37b +๏”— blender; f517 +๏šถ blender-phone; f6b6 +๏Š blind; f29d +๏ž blog; f781 +๏ผ blogger; f37c +๏ฝ blogger-b; f37d +๏Š“ bluetooth; f293 +๏Š” bluetooth-b; f294 +๏€ฒ bold; f032 +๏ƒง bolt; f0e7 +๏‡ข bomb; f1e2 +๏—— bone; f5d7 +๏•œ bong; f55c +๏€ญ book; f02d +๏šท book-dead; f6b7 +๏Ÿฆ book-medical; f7e6 +๏”˜ book-open; f518 +๏—š book-reader; f5da +๏€ฎ bookmark; f02e +๏ ถ bootstrap; f836 +๏กŒ border-all; f84c +๏ก border-none; f850 +๏ก“ border-style; f853 +๏ถ bowling-ball; f436 +๏‘ฆ box; f466 +๏’ž box-open; f49e +๎› box-tissue e05b +๏‘จ boxes; f468 +๏Šก braille; f2a1 +๏—œ brain; f5dc +๏Ÿฌ bread-slice; f7ec +๏‚ฑ briefcase; f0b1 +๏‘ฉ briefcase-medical; f469 +๏”™ broadcast-tower; f519 +๏”š broom; f51a +๏• brush; f55d +๏…š btc; f15a +๏ ท buffer; f837 +๏†ˆ bug; f188 +๏†ญ building; f1ad +๏‚ก bullhorn; f0a1 +๏…€ bullseye; f140 +๏‘ช burn; f46a +๏ฟ buromobelexperte; f37f +๏ˆ‡ bus; f207 +๏•ž bus-alt; f55e +๏™Š business-time; f64a +๏ขฆ buy-n-large; f8a6 +๏‡ฌ calculator; f1ec +๏„ณ calendar; f133 +๏ณ calendar-alt; f073 +๏‰ด calendar-check; f274 +๏žƒ calendar-day; f783 +๏‰ฒ calendar-minus; f272 +๏‰ฑ calendar-plus; f271 +๏‰ณ calendar-times; f273 +๏ž„ calendar-week; f784 +๏€ฐ camera; f030 +๏‚ƒ camera-retro; f083 +๏šป campground; f6bb +๏ž… canadian-maple-leaf; f785 +๏ž† candy-cane; f786 +๏•Ÿ cannabis; f55f +๏‘ซ capsules; f46b +๏†น car; f1b9 +๏—ž car-alt; f5de +๏—Ÿ car-battery; f5df +๏—ก car-crash; f5e1 +๏—ค car-side; f5e4 +๏ฃฟ caravan; f8ff +๏ƒ— caret-down; f0d7 +๏ƒ™ caret-left; f0d9 +๏ƒš caret-right; f0da +๏… caret-square-down; f150 +๏†‘ caret-square-left; f191 +๏…’ caret-square-right; f152 +๏…‘ caret-square-up; f151 +๏ƒ˜ caret-up; f0d8 +๏ž‡ carrot; f787 +๏ˆ˜ cart-arrow-down; f218 +๏ˆ— cart-plus; f217 +๏žˆ cash-register; f788 +๏šพ cat; f6be +๏ญ cc-amazon-pay; f42d +๏‡ณ cc-amex; f1f3 +๏– cc-apple-pay; f416 +๏‰Œ cc-diners-club; f24c +๏‡ฒ cc-discover; f1f2 +๏‰‹ cc-jcb; f24b +๏‡ฑ cc-mastercard; f1f1 +๏‡ด cc-paypal; f1f4 +๏‡ต cc-stripe; f1f5 +๏‡ฐ cc-visa; f1f0 +๏Ž€ centercode; f380 +๏ž‰ centos; f789 +๏‚ฃ certificate; f0a3 +๏›€ chair; f6c0 +๏”› chalkboard; f51b +๏”œ chalkboard-teacher; f51c +๏—ง charging-station; f5e7 +๏‡พ chart-area; f1fe +๏‚€ chart-bar; f080 +๏ˆ chart-line; f201 +๏ˆ€ chart-pie; f200 +๏€Œ check; f00c +๏˜ check-circle; f058 +๏•  check-double; f560 +๏…Š check-square; f14a +๏Ÿฏ cheese; f7ef +๏น chess; f439 +๏บ chess-bishop; f43a +๏ผ chess-board; f43c +๏ฟ chess-king; f43f +๏‘ chess-knight; f441 +๏‘ƒ chess-pawn; f443 +๏‘… chess-queen; f445 +๏‘‡ chess-rook; f447 +๏„บ chevron-circle-down; f13a +๏„ท chevron-circle-left; f137 +๏„ธ chevron-circle-right; f138 +๏„น chevron-circle-up; f139 +๏ธ chevron-down; f078 +๏“ chevron-left; f053 +๏” chevron-right; f054 +๏ท chevron-up; f077 +๏†ฎ child; f1ae +๏‰จ chrome; f268 +๏ ธ chromecast; f838 +๏” church; f51d +๏„‘ circle; f111 +๏‡Ž circle-notch; f1ce +๏™ city; f64f +๏Ÿฒ clinic-medical; f7f2 +๏Œจ clipboard; f328 +๏‘ฌ clipboard-check; f46c +๏‘ญ clipboard-list; f46d +๏€— clock; f017 +๏‰ clone; f24d +๏ˆŠ closed-captioning; f20a +๏ƒ‚ cloud; f0c2 +๏Ž cloud-download-alt; f381 +๏œป cloud-meatball; f73b +๏›ƒ cloud-moon; f6c3 +๏œผ cloud-moon-rain; f73c +๏œฝ cloud-rain; f73d +๏€ cloud-showers-heavy; f740 +๏›„ cloud-sun; f6c4 +๏ƒ cloud-sun-rain; f743 +๏Ž‚ cloud-upload-alt; f382 +๎ฝ cloudflare e07d +๏Žƒ cloudscale; f383 +๏Ž„ cloudsmith; f384 +๏Ž… cloudversify; f385 +๏•ก cocktail; f561 +๏„ก code; f121 +๏„ฆ code-branch; f126 +๏‡‹ codepen; f1cb +๏Š„ codiepie; f284 +๏ƒด coffee; f0f4 +๏€“ cog; f013 +๏‚… cogs; f085 +๏”ž coins; f51e +๏ƒ› columns; f0db +๏ต comment; f075 +๏‰บ comment-alt; f27a +๏™‘ comment-dollar; f651 +๏’ญ comment-dots; f4ad +๏Ÿต comment-medical; f7f5 +๏’ณ comment-slash; f4b3 +๏‚† comments; f086 +๏™“ comments-dollar; f653 +๏”Ÿ compact-disc; f51f +๏…Ž compass; f14e +๏ฆ compress; f066 +๏ข compress-alt; f422 +๏žŒ compress-arrows-alt; f78c +๏•ข concierge-bell; f562 +๏ž confluence; f78d +๏ˆŽ connectdevelop; f20e +๏‰ญ contao; f26d +๏•ฃ cookie; f563 +๏•ค cookie-bite; f564 +๏ƒ… copy; f0c5 +๏‡น copyright; f1f9 +๏ขž cotton-bureau; f89e +๏’ธ couch; f4b8 +๏Žˆ cpanel; f388 +๏‰ž creative-commons; f25e +๏“ง creative-commons-by; f4e7 +๏“จ creative-commons-nc; f4e8 +๏“ฉ creative-commons-nc-eu; f4e9 +๏“ช creative-commons-nc-jp; f4ea +๏“ซ creative-commons-nd; f4eb +๏“ฌ creative-commons-pd; f4ec +๏“ญ creative-commons-pd-alt; f4ed +๏“ฎ creative-commons-remix; f4ee +๏“ฏ creative-commons-sa; f4ef +๏“ฐ creative-commons-sampling; f4f0 +๏“ฑ creative-commons-sampling-plus; f4f1 +๏“ฒ creative-commons-share; f4f2 +๏“ณ creative-commons-zero; f4f3 +๏‚ credit-card; f09d +๏›‰ critical-role; f6c9 +๏„ฅ crop; f125 +๏•ฅ crop-alt; f565 +๏™” cross; f654 +๏› crosshairs; f05b +๏”  crow; f520 +๏”ก crown; f521 +๏Ÿท crutch; f7f7 +๏„ผ css3; f13c +๏Ž‹ css3-alt; f38b +๏†ฒ cube; f1b2 +๏†ณ cubes; f1b3 +๏ƒ„ cut; f0c4 +๏ŽŒ cuttlefish; f38c +๏Ž d-and-d; f38d +๏›Š d-and-d-beyond; f6ca +๎’ dailymotion e052 +๏ˆ dashcube; f210 +๏‡€ database; f1c0 +๏Šค deaf; f2a4 +๎ท deezer e077 +๏†ฅ delicious; f1a5 +๏‡ democrat; f747 +๏ŽŽ deploydog; f38e +๏Ž deskpro; f38f +๏„ˆ desktop; f108 +๏›Œ dev; f6cc +๏†ฝ deviantart; f1bd +๏™• dharmachakra; f655 +๏ž dhl; f790 +๏‘ฐ diagnoses; f470 +๏ž‘ diaspora; f791 +๏”ข dice; f522 +๏› dice-d20; f6cf +๏›‘ dice-d6; f6d1 +๏”ฃ dice-five; f523 +๏”ค dice-four; f524 +๏”ฅ dice-one; f525 +๏”ฆ dice-six; f526 +๏”ง dice-three; f527 +๏”จ dice-two; f528 +๏†ฆ digg; f1a6 +๏Ž‘ digital-ocean; f391 +๏•ฆ digital-tachograph; f566 +๏—ซ directions; f5eb +๏Ž’ discord; f392 +๏Ž“ discourse; f393 +๏Ÿบ disease; f7fa +๏”ฉ divide; f529 +๏•ง dizzy; f567 +๏‘ฑ dna; f471 +๏Ž” dochub; f394 +๏Ž• docker; f395 +๏›“ dog; f6d3 +๏…• dollar-sign; f155 +๏‘ฒ dolly; f472 +๏‘ด dolly-flatbed; f474 +๏’น donate; f4b9 +๏”ช door-closed; f52a +๏”ซ door-open; f52b +๏†’ dot-circle; f192 +๏’บ dove; f4ba +๏€™ download; f019 +๏Ž– draft2digital; f396 +๏•จ drafting-compass; f568 +๏›• dragon; f6d5 +๏—ฎ draw-polygon; f5ee +๏…ฝ dribbble; f17d +๏Ž— dribbble-square; f397 +๏…ซ dropbox; f16b +๏•ฉ drum; f569 +๏•ช drum-steelpan; f56a +๏›— drumstick-bite; f6d7 +๏†ฉ drupal; f1a9 +๏‘‹ dumbbell; f44b +๏ž“ dumpster; f793 +๏ž” dumpster-fire; f794 +๏›™ dungeon; f6d9 +๏Ž™ dyalog; f399 +๏Žš earlybirds; f39a +๏“ด ebay; f4f4 +๏Š‚ edge; f282 +๎ธ edge-legacy e078 +๏„ edit; f044 +๏Ÿป egg; f7fb +๏’ eject; f052 +๏ฐ elementor; f430 +๏… ellipsis-h; f141 +๏…‚ ellipsis-v; f142 +๏—ฑ ello; f5f1 +๏ฃ ember; f423 +๏‡‘ empire; f1d1 +๏ƒ  envelope; f0e0 +๏Šถ envelope-open; f2b6 +๏™˜ envelope-open-text; f658 +๏†™ envelope-square; f199 +๏Š™ envira; f299 +๏”ฌ equals; f52c +๏„ญ eraser; f12d +๏Ž erlang; f39d +๏ฎ ethereum; f42e +๏ž– ethernet; f796 +๏‹— etsy; f2d7 +๏…“ euro-sign; f153 +๏ น evernote; f839 +๏ข exchange-alt; f362 +๏„ช exclamation; f12a +๏ช exclamation-circle; f06a +๏ฑ exclamation-triangle; f071 +๏ฅ expand; f065 +๏ค expand-alt; f424 +๏Œž expand-arrows-alt; f31e +๏ˆพ expeditedssl; f23e +๏ external-link-alt; f35d +๏  external-link-square-alt; f360 +๏ฎ eye; f06e +๏‡ป eye-dropper; f1fb +๏ฐ eye-slash; f070 +๏‚š ; facebook; f09a +๏Žž ; facebook-f; f39e +๏ŽŸ ; facebook-messenger; f39f +๏‚‚ ; facebook-square; f082 +๏กฃ ; fan; f863 +๏›œ ; fantasy-flight-games; f6dc +๏‰ ; fast-backward; f049 +๏ ; fast-forward; f050 +๎€… ; faucet e005 +๏†ฌ ; fax; f1ac +๏”ญ ; feather; f52d +๏•ซ ; feather-alt; f56b +๏ž— ; fedex; f797 +๏ž˜ ; fedora; f798 +๏†‚ ; female; f182 +๏ƒป ; fighter-jet; f0fb +๏ž™ ; figma; f799 +๏…› ; file; f15b +๏…œ ; file-alt; f15c +๏‡† ; file-archive; f1c6 +๏‡‡ ; file-audio; f1c7 +๏‡‰ ; file-code; f1c9 +๏•ฌ ; file-contract; f56c +๏› ; file-csv; f6dd +๏•ญ ; file-download; f56d +๏‡ƒ ; file-excel; f1c3 +๏•ฎ ; file-export; f56e +๏‡… ; file-image; f1c5 +๏•ฏ ; file-import; f56f +๏•ฐ ; file-invoice; f570 +๏•ฑ ; file-invoice-dollar; f571 +๏‘ท ; file-medical; f477 +๏‘ธ ; file-medical-alt; f478 +๏‡ ; file-pdf; f1c1 +๏‡„ ; file-powerpoint; f1c4 +๏•ฒ ; file-prescription; f572 +๏•ณ ; file-signature; f573 +๏•ด ; file-upload; f574 +๏‡ˆ ; file-video; f1c8 +๏‡‚ ; file-word; f1c2 +๏•ต ; fill; f575 +๏•ถ ; fill-drip; f576 +๏€ˆ ; film; f008 +๏‚ฐ ; filter; f0b0 +๏•ท ; fingerprint; f577 +๏ญ ; fire; f06d +๏Ÿค ; fire-alt; f7e4 +๏„ด ; fire-extinguisher; f134 +๏‰ฉ ; firefox; f269 +๎€‡ ; firefox-browser e007 +๏‘น ; first-aid; f479 +๏Šฐ ; first-order; f2b0 +๏”Š ; first-order-alt; f50a +๏Žก ; firstdraft; f3a1 +๏•ธ ; fish; f578 +๏›ž ; fist-raised; f6de +๏€ค ; flag; f024 +๏„ž ; flag-checkered; f11e +๏ ; flag-usa; f74d +๏ƒƒ ; flask; f0c3 +๏…ฎ ; flickr; f16e +๏‘ ; flipboard; f44d +๏•น ; flushed; f579 +๏— ; fly; f417 +๏ป ; folder; f07b +๏™ ; folder-minus; f65d +๏ผ ; folder-open; f07c +๏™ž ; folder-plus; f65e +๏€ฑ ; font; f031 +๏Šด ; font-awesome; f2b4 +๏œ ; font-awesome-alt; f35c +๏ฅ ; font-awesome-flag; f425 +๏Š€ ; fonticons; f280 +๏Žข ; fonticons-fi; f3a2 +๏‘Ž ; football-ball; f44e +๏Š† ; fort-awesome; f286 +๏Žฃ ; fort-awesome-alt; f3a3 +๏ˆ‘ ; forumbee; f211 +๏Ž ; forward; f04e +๏†€ ; foursquare; f180 +๏‹… ; free-code-camp; f2c5 +๏Žค ; freebsd; f3a4 +๏”ฎ ; frog; f52e +๏„™ ; frown; f119 +๏•บ ; frown-open; f57a +๏”‹ ; fulcrum; f50b +๏™ข ; funnel-dollar; f662 +๏‡ฃ ; futbol; f1e3 +๏”Œ galactic-republic; f50c +๏” galactic-senate; f50d +๏„› gamepad; f11b +๏”ฏ gas-pump; f52f +๏ƒฃ gavel; f0e3 +๏Žฅ gem; f3a5 +๏ˆญ genderless; f22d +๏‰ฅ get-pocket; f265 +๏‰  gg; f260 +๏‰ก gg-circle; f261 +๏›ข ghost; f6e2 +๏ซ gift; f06b +๏žœ gifts; f79c +๏‡“ git; f1d3 +๏ก git-alt; f841 +๏‡’ git-square; f1d2 +๏‚› github; f09b +๏„“ github-alt; f113 +๏‚’ github-square; f092 +๏Žฆ gitkraken; f3a6 +๏Š– gitlab; f296 +๏ฆ gitter; f426 +๏žŸ glass-cheers; f79f +๏€€ glass-martini; f000 +๏•ป glass-martini-alt; f57b +๏ž  glass-whiskey; f7a0 +๏”ฐ glasses; f530 +๏Šฅ glide; f2a5 +๏Šฆ glide-g; f2a6 +๏‚ฌ globe; f0ac +๏•ผ globe-africa; f57c +๏•ฝ globe-americas; f57d +๏•พ globe-asia; f57e +๏žข globe-europe; f7a2 +๏Žง gofore; f3a7 +๏‘ golf-ball; f450 +๏Žจ goodreads; f3a8 +๏Žฉ goodreads-g; f3a9 +๏†  google; f1a0 +๏Žช google-drive; f3aa +๎น google-pay e079 +๏Žซ google-play; f3ab +๏Šณ google-plus; f2b3 +๏ƒ• google-plus-g; f0d5 +๏ƒ” google-plus-square; f0d4 +๏‡ฎ google-wallet; f1ee +๏™ค gopuram; f664 +๏† graduation-cap; f19d +๏†„ gratipay; f184 +๏‹– grav; f2d6 +๏”ฑ greater-than; f531 +๏”ฒ greater-than-equal; f532 +๏•ฟ grimace; f57f +๏–€ grin; f580 +๏– grin-alt; f581 +๏–‚ grin-beam; f582 +๏–ƒ grin-beam-sweat; f583 +๏–„ grin-hearts; f584 +๏–… grin-squint; f585 +๏–† grin-squint-tears; f586 +๏–‡ grin-stars; f587 +๏–ˆ grin-tears; f588 +๏–‰ grin-tongue; f589 +๏–Š grin-tongue-squint; f58a +๏–‹ grin-tongue-wink; f58b +๏–Œ grin-wink; f58c +๏– grip-horizontal; f58d +๏žค grip-lines; f7a4 +๏žฅ grip-lines-vertical; f7a5 +๏–Ž grip-vertical; f58e +๏Žฌ gripfire; f3ac +๏Žญ grunt; f3ad +๎พ guilded e07e +๏žฆ guitar; f7a6 +๏Žฎ gulp; f3ae +๏ƒฝ h-square; f0fd +๏‡” hacker-news; f1d4 +๏Žฏ hacker-news-square; f3af +๏—ท hackerrank; f5f7 +๏ … hamburger; f805 +๏›ฃ hammer; f6e3 +๏™ฅ hamsa; f665 +๏’ฝ hand-holding; f4bd +๏’พ hand-holding-heart; f4be +๎œ hand-holding-medical e05c +๏“€ hand-holding-usd; f4c0 +๏“ hand-holding-water; f4c1 +๏‰˜ hand-lizard; f258 +๏ † hand-middle-finger; f806 +๏‰– hand-paper; f256 +๏‰› hand-peace; f25b +๏‚ง hand-point-down; f0a7 +๏‚ฅ hand-point-left; f0a5 +๏‚ค hand-point-right; f0a4 +๏‚ฆ hand-point-up; f0a6 +๏‰š hand-pointer; f25a +๏‰• hand-rock; f255 +๏‰— hand-scissors; f257 +๎ hand-sparkles e05d +๏‰™ hand-spock; f259 +๏“‚ hands; f4c2 +๏“„ hands-helping; f4c4 +๎ž hands-wash e05e +๏Šต handshake; f2b5 +๎Ÿ handshake-alt-slash e05f +๎  handshake-slash e060 +๏›ฆ hanukiah; f6e6 +๏ ‡ hard-hat; f807 +๏Š’ hashtag; f292 +๏ฃ€ hat-cowboy; f8c0 +๏ฃ hat-cowboy-side; f8c1 +๏›จ hat-wizard; f6e8 +๏‚  hdd; f0a0 +๎ก head-side-cough e061 +๎ข head-side-cough-slash e062 +๎ฃ head-side-mask e063 +๎ค head-side-virus e064 +๏‡œ heading; f1dc +๏€ฅ headphones; f025 +๏– headphones-alt; f58f +๏– headset; f590 +๏€„ heart; f004 +๏žฉ heart-broken; f7a9 +๏ˆž heartbeat; f21e +๏”ณ helicopter; f533 +๏–‘ highlighter; f591 +๏›ฌ hiking; f6ec +๏›ญ hippo; f6ed +๏‘’ hips; f452 +๏Žฐ hire-a-helper; f3b0 +๏‡š history; f1da +๎ฟ hive e07f +๏‘“ hockey-puck; f453 +๏žช holly-berry; f7aa +๏€• home; f015 +๏ง hooli; f427 +๏–’ hornbill; f592 +๏›ฐ horse; f6f0 +๏žซ horse-head; f7ab +๏ƒธ hospital; f0f8 +๏‘ฝ hospital-alt; f47d +๏‘พ hospital-symbol; f47e +๏  hospital-user; f80d +๏–“ hot-tub; f593 +๏  hotdog; f80f +๏–” hotel; f594 +๏Žฑ hotjar; f3b1 +๏‰” hourglass; f254 +๏‰“ hourglass-end; f253 +๏‰’ hourglass-half; f252 +๏‰‘ hourglass-start; f251 +๏›ฑ house-damage; f6f1 +๎ฅ house-user e065 +๏‰ผ houzz; f27c +๏›ฒ hryvnia; f6f2 +๏„ป html5; f13b +๏Žฒ hubspot; f3b2 +๏‰† i-cursor; f246 +๏  ice-cream; f810 +๏žญ icicles; f7ad +๏กญ icons; f86d +๏‹ id-badge; f2c1 +๏‹‚ id-card; f2c2 +๏‘ฟ id-card-alt; f47f +๎€“ ideal e013 +๏žฎ igloo; f7ae +๏€พ image; f03e +๏Œ‚ images; f302 +๏‹˜ imdb; f2d8 +๏€œ inbox; f01c +๏€ผ indent; f03c +๏‰ต industry; f275 +๏”ด infinity; f534 +๏„ฉ info; f129 +๏š info-circle; f05a +๎‚€ innosoft e080 +๏…ญ instagram; f16d +๎• instagram-square e055 +๎‚ instalod e081 +๏žฏ intercom; f7af +๏‰ซ internet-explorer; f26b +๏žฐ invision; f7b0 +๏ˆˆ ioxhost; f208 +๏€ณ italic; f033 +๏ บ itch-io; f83a +๏Žด itunes; f3b4 +๏Žต itunes-note; f3b5 +๏“ค java; f4e4 +๏™ฉ jedi; f669 +๏”Ž jedi-order; f50e +๏Žถ jenkins; f3b6 +๏žฑ jira; f7b1 +๏Žท joget; f3b7 +๏–• joint; f595 +๏†ช joomla; f1aa +๏™ช journal-whills; f66a +๏Žธ js; f3b8 +๏Žน js-square; f3b9 +๏‡Œ jsfiddle; f1cc +๏™ซ kaaba; f66b +๏—บ kaggle; f5fa +๏‚„ key; f084 +๏“ต keybase; f4f5 +๏„œ keyboard; f11c +๏Žบ keycdn; f3ba +๏™ญ khanda; f66d +๏Žป kickstarter; f3bb +๏Žผ kickstarter-k; f3bc +๏–– kiss; f596 +๏–— kiss-beam; f597 +๏–˜ kiss-wink-heart; f598 +๏”ต kiwi-bird; f535 +๏ฏ korvue; f42f +๏™ฏ landmark; f66f +๏†ซ language; f1ab +๏„‰ laptop; f109 +๏—ผ laptop-code; f5fc +๎ฆ laptop-house e066 +๏ ’ laptop-medical; f812 +๏Žฝ laravel; f3bd +๏ˆ‚ lastfm; f202 +๏ˆƒ lastfm-square; f203 +๏–™ laugh; f599 +๏–š laugh-beam; f59a +๏–› laugh-squint; f59b +๏–œ laugh-wink; f59c +๏—ฝ layer-group; f5fd +๏ฌ leaf; f06c +๏ˆ’ leanpub; f212 +๏‚” lemon; f094 +๏ less; f41d +๏”ถ less-than; f536 +๏”ท less-than-equal; f537 +๏Žพ level-down-alt; f3be +๏Žฟ level-up-alt; f3bf +๏‡ life-ring; f1cd +๏ƒซ lightbulb; f0eb +๏€ line; f3c0 +๏ƒ link; f0c1 +๏‚Œ linkedin; f08c +๏ƒก linkedin-in; f0e1 +๏Šธ linode; f2b8 +๏…ผ linux; f17c +๏†• lira-sign; f195 +๏€บ list; f03a +๏€ข list-alt; f022 +๏ƒ‹ list-ol; f0cb +๏ƒŠ list-ul; f0ca +๏„ค location-arrow; f124 +๏€ฃ lock; f023 +๏ lock-open; f3c1 +๏Œ‰ long-arrow-alt-down; f309 +๏ŒŠ long-arrow-alt-left; f30a +๏Œ‹ long-arrow-alt-right; f30b +๏ŒŒ long-arrow-alt-up; f30c +๏Šจ low-vision; f2a8 +๏– luggage-cart; f59d +๏˜„ lungs; f604 +๎ง lungs-virus e067 +๏ƒ lyft; f3c3 +๏„ magento; f3c4 +๏ƒ magic; f0d0 +๏ถ magnet; f076 +๏™ด mail-bulk; f674 +๏–ž mailchimp; f59e +๏†ƒ male; f183 +๏” mandalorian; f50f +๏‰น map; f279 +๏–Ÿ map-marked; f59f +๏–  map-marked-alt; f5a0 +๏ map-marker; f041 +๏… map-marker-alt; f3c5 +๏‰ถ map-pin; f276 +๏‰ท map-signs; f277 +๏˜ markdown; f60f +๏–ก marker; f5a1 +๏ˆข mars; f222 +๏ˆง mars-double; f227 +๏ˆฉ mars-stroke; f229 +๏ˆซ mars-stroke-h; f22b +๏ˆช mars-stroke-v; f22a +๏›บ mask; f6fa +๏“ถ mastodon; f4f6 +๏„ถ maxcdn; f136 +๏ฃŠ mdb; f8ca +๏–ข medal; f5a2 +๏† medapps; f3c6 +๏ˆบ medium; f23a +๏‡ medium-m; f3c7 +๏ƒบ medkit; f0fa +๏ˆ medrt; f3c8 +๏‹  meetup; f2e0 +๏–ฃ megaport; f5a3 +๏„š meh; f11a +๏–ค meh-blank; f5a4 +๏–ฅ meh-rolling-eyes; f5a5 +๏”ธ memory; f538 +๏žณ mendeley; f7b3 +๏™ถ menorah; f676 +๏ˆฃ mercury; f223 +๏“ meteor; f753 +๎€š microblog e01a +๏‹› microchip; f2db +๏„ฐ microphone; f130 +๏‰ microphone-alt; f3c9 +๏”น microphone-alt-slash; f539 +๏„ฑ microphone-slash; f131 +๏˜ microscope; f610 +๏Š microsoft; f3ca +๏จ minus; f068 +๏– minus-circle; f056 +๏…† minus-square; f146 +๏žต mitten; f7b5 +๏‹ mix; f3cb +๏Š‰ mixcloud; f289 +๎– mixer e056 +๏Œ mizuni; f3cc +๏„‹ mobile; f10b +๏ mobile-alt; f3cd +๏Š… modx; f285 +๏ monero; f3d0 +๏ƒ– money-bill; f0d6 +๏‘ money-bill-alt; f3d1 +๏”บ money-bill-wave; f53a +๏”ป money-bill-wave-alt; f53b +๏”ผ money-check; f53c +๏”ฝ money-check-alt; f53d +๏–ฆ monument; f5a6 +๏†† moon; f186 +๏–ง mortar-pestle; f5a7 +๏™ธ mosque; f678 +๏ˆœ motorcycle; f21c +๏›ผ mountain; f6fc +๏ฃŒ mouse; f8cc +๏‰… mouse-pointer; f245 +๏žถ mug-hot; f7b6 +๏€ music; f001 +๏’ napster; f3d2 +๏˜’ neos; f612 +๏›ฟ network-wired; f6ff +๏ˆฌ neuter; f22c +๏‡ช newspaper; f1ea +๏–จ nimblr; f5a8 +๏™ node; f419 +๏“ node-js; f3d3 +๏”พ not-equal; f53e +๏’ notes-medical; f481 +๏” npm; f3d4 +๏• ns8; f3d5 +๏– nutritionix; f3d6 +๏‰‡ object-group; f247 +๏‰ˆ object-ungroup; f248 +๎‚‚ octopus-deploy e082 +๏‰ฃ odnoklassniki; f263 +๏‰ค odnoklassniki-square; f264 +๏˜“ oil-can; f613 +๏” old-republic; f510 +๏™น om; f679 +๏ˆฝ opencart; f23d +๏†› openid; f19b +๏‰ช opera; f26a +๏ˆผ optin-monster; f23c +๏ฃ’ orcid; f8d2 +๏š osi; f41a +๏œ€ otter; f700 +๏€ป outdent; f03b +๏— page4; f3d7 +๏†Œ pagelines; f18c +๏ • pager; f815 +๏‡ผ paint-brush; f1fc +๏–ช paint-roller; f5aa +๏”ฟ palette; f53f +๏˜ palfed; f3d8 +๏’‚ pallet; f482 +๏‡˜ paper-plane; f1d8 +๏ƒ† paperclip; f0c6 +๏“ parachute-box; f4cd +๏‡ paragraph; f1dd +๏•€ parking; f540 +๏–ซ passport; f5ab +๏™ป pastafarianism; f67b +๏ƒช paste; f0ea +๏™ patreon; f3d9 +๏Œ pause; f04c +๏Š‹ pause-circle; f28b +๏†ฐ paw; f1b0 +๏‡ญ paypal; f1ed +๏™ผ peace; f67c +๏Œ„ pen; f304 +๏Œ… pen-alt; f305 +๏–ฌ pen-fancy; f5ac +๏–ญ pen-nib; f5ad +๏…‹ pen-square; f14b +๏Œƒ pencil-alt; f303 +๏–ฎ pencil-ruler; f5ae +๏œ„ penny-arcade; f704 +๎จ people-arrows e068 +๏“Ž people-carry; f4ce +๏ – pepper-hot; f816 +๎‚ƒ perbyte e083 +๏Š• percent; f295 +๏• percentage; f541 +๏š periscope; f3da +๏– person-booth; f756 +๏› phabricator; f3db +๏œ phoenix-framework; f3dc +๏”‘ phoenix-squadron; f511 +๏‚• phone; f095 +๏กน phone-alt; f879 +๏ phone-slash; f3dd +๏‚˜ phone-square; f098 +๏กป phone-square-alt; f87b +๏Š  phone-volume; f2a0 +๏กผ photo-video; f87c +๏‘— php; f457 +๏Šฎ pied-piper; f2ae +๏†จ pied-piper-alt; f1a8 +๏“ฅ pied-piper-hat; f4e5 +๏†ง pied-piper-pp; f1a7 +๎€ž pied-piper-square e01e +๏““ piggy-bank; f4d3 +๏’„ pills; f484 +๏ƒ’ pinterest; f0d2 +๏ˆฑ pinterest-p; f231 +๏ƒ“ pinterest-square; f0d3 +๏ ˜ pizza-slice; f818 +๏™ฟ place-of-worship; f67f +๏ฒ plane; f072 +๏–ฏ plane-arrival; f5af +๏–ฐ plane-departure; f5b0 +๎ฉ plane-slash e069 +๏‹ play; f04b +๏…„ play-circle; f144 +๏Ÿ playstation; f3df +๏‡ฆ plug; f1e6 +๏ง plus; f067 +๏• plus-circle; f055 +๏ƒพ plus-square; f0fe +๏‹Ž podcast; f2ce +๏š poll; f681 +๏š‚ poll-h; f682 +๏‹พ poo; f2fe +๏š poo-storm; f75a +๏˜™ poop; f619 +๏  portrait; f3e0 +๏…” pound-sign; f154 +๏€‘ power-off; f011 +๏šƒ pray; f683 +๏š„ praying-hands; f684 +๏–ฑ prescription; f5b1 +๏’… prescription-bottle; f485 +๏’† prescription-bottle-alt; f486 +๏€ฏ print; f02f +๏’‡ procedures; f487 +๏Šˆ product-hunt; f288 +๏•‚ project-diagram; f542 +๎ช pump-medical e06a +๎ซ pump-soap e06b +๏ก pushed; f3e1 +๏„ฎ puzzle-piece; f12e +๏ข python; f3e2 +๏‡– qq; f1d6 +๏€ฉ qrcode; f029 +๏„จ question; f128 +๏™ question-circle; f059 +๏‘˜ quidditch; f458 +๏‘™ quinscape; f459 +๏‹„ quora; f2c4 +๏„ quote-left; f10d +๏„Ž quote-right; f10e +๏š‡ quran; f687 +๏“ท r-project; f4f7 +๏žน radiation; f7b9 +๏žบ radiation-alt; f7ba +๏› rainbow; f75b +๏ด random; f074 +๏žป raspberry-pi; f7bb +๏‹™ ravelry; f2d9 +๏› react; f41b +๏ reacteurope; f75d +๏“• readme; f4d5 +๏‡ rebel; f1d0 +๏•ƒ receipt; f543 +๏ฃ™ record-vinyl; f8d9 +๏†ธ recycle; f1b8 +๏ฃ red-river; f3e3 +๏†ก reddit; f1a1 +๏Š reddit-alien; f281 +๏†ข reddit-square; f1a2 +๏žผ redhat; f7bc +๏€ž redo; f01e +๏‹น redo-alt; f2f9 +๏‰ registered; f25d +๏กฝ remove-format; f87d +๏†‹ renren; f18b +๏ฅ reply; f3e5 +๏„ข reply-all; f122 +๏ฆ replyd; f3e6 +๏ž republican; f75e +๏“ธ researchgate; f4f8 +๏ง resolving; f3e7 +๏žฝ restroom; f7bd +๏น retweet; f079 +๏–ฒ rev; f5b2 +๏“– ribbon; f4d6 +๏œ‹ ring; f70b +๏€˜ road; f018 +๏•„ robot; f544 +๏„ต rocket; f135 +๏จ rocketchat; f3e8 +๏ฉ rockrms; f3e9 +๏“— route; f4d7 +๏‚ž rss; f09e +๏…ƒ rss-square; f143 +๏…˜ ruble-sign; f158 +๏•… ruler; f545 +๏•† ruler-combined; f546 +๏•‡ ruler-horizontal; f547 +๏•ˆ ruler-vertical; f548 +๏œŒ running; f70c +๏…– rupee-sign; f156 +๎บ rust e07a +๏–ณ sad-cry; f5b3 +๏–ด sad-tear; f5b4 +๏‰ง safari; f267 +๏ ป salesforce; f83b +๏ž sass; f41e +๏žฟ satellite; f7bf +๏Ÿ€ satellite-dish; f7c0 +๏ƒ‡ save; f0c7 +๏ช schlix; f3ea +๏•‰ school; f549 +๏•Š screwdriver; f54a +๏ŠŠ scribd; f28a +๏œŽ scroll; f70e +๏Ÿ‚ sd-card; f7c2 +๏€‚ search; f002 +๏šˆ search-dollar; f688 +๏š‰ search-location; f689 +๏€ search-minus; f010 +๏€Ž search-plus; f00e +๏ซ searchengin; f3eb +๏“˜ seedling; f4d8 +๏‹š sellcast; f2da +๏ˆ“ sellsy; f213 +๏ˆณ server; f233 +๏ฌ servicestack; f3ec +๏˜Ÿ shapes; f61f +๏ค share; f064 +๏‡  share-alt; f1e0 +๏‡ก share-alt-square; f1e1 +๏… share-square; f14d +๏ˆ‹ shekel-sign; f20b +๏ญ shield-alt; f3ed +๎ฌ shield-virus e06c +๏ˆš ship; f21a +๏’‹ shipping-fast; f48b +๏ˆ” shirtsinbulk; f214 +๏•‹ shoe-prints; f54b +๎— shopify e057 +๏Š shopping-bag; f290 +๏Š‘ shopping-basket; f291 +๏บ shopping-cart; f07a +๏–ต shopware; f5b5 +๏‹Œ shower; f2cc +๏–ถ shuttle-van; f5b6 +๏“™ sign; f4d9 +๏‹ถ sign-in-alt; f2f6 +๏Šง sign-language; f2a7 +๏‹ต sign-out-alt; f2f5 +๏€’ signal; f012 +๏–ท signature; f5b7 +๏Ÿ„ sim-card; f7c4 +๏ˆ• simplybuilt; f215 +๎ญ sink e06d +๏ฎ sistrix; f3ee +๏ƒจ sitemap; f0e8 +๏”’ sith; f512 +๏Ÿ… skating; f7c5 +๏Ÿ† sketch; f7c6 +๏Ÿ‰ skiing; f7c9 +๏ŸŠ skiing-nordic; f7ca +๏•Œ skull; f54c +๏œ” skull-crossbones; f714 +๏ˆ– skyatlas; f216 +๏…พ skype; f17e +๏†˜ slack; f198 +๏ฏ slack-hash; f3ef +๏œ• slash; f715 +๏ŸŒ sleigh; f7cc +๏‡ž sliders-h; f1de +๏‡ง slideshare; f1e7 +๏„˜ smile; f118 +๏–ธ smile-beam; f5b8 +๏“š smile-wink; f4da +๏Ÿ smog; f75f +๏’ smoking; f48d +๏• smoking-ban; f54d +๏Ÿ sms; f7cd +๏Šซ snapchat; f2ab +๏Šฌ snapchat-ghost; f2ac +๏Šญ snapchat-square; f2ad +๏ŸŽ snowboarding; f7ce +๏‹œ snowflake; f2dc +๏Ÿ snowman; f7d0 +๏Ÿ’ snowplow; f7d2 +๎ฎ soap e06e +๏š– socks; f696 +๏–บ solar-panel; f5ba +๏ƒœ sort; f0dc +๏… sort-alpha-down; f15d +๏ข sort-alpha-down-alt; f881 +๏…ž sort-alpha-up; f15e +๏ข‚ sort-alpha-up-alt; f882 +๏…  sort-amount-down; f160 +๏ข„ sort-amount-down-alt; f884 +๏…ก sort-amount-up; f161 +๏ข… sort-amount-up-alt; f885 +๏ƒ sort-down; f0dd +๏…ข sort-numeric-down; f162 +๏ข† sort-numeric-down-alt; f886 +๏…ฃ sort-numeric-up; f163 +๏ข‡ sort-numeric-up-alt; f887 +๏ƒž sort-up; f0de +๏†พ soundcloud; f1be +๏Ÿ“ sourcetree; f7d3 +๏–ป spa; f5bb +๏†— space-shuttle; f197 +๏ณ speakap; f3f3 +๏ ผ speaker-deck; f83c +๏ข‘ spell-check; f891 +๏œ— spider; f717 +๏„ spinner; f110 +๏–ผ splotch; f5bc +๏†ผ spotify; f1bc +๏–ฝ spray-can; f5bd +๏ƒˆ square; f0c8 +๏‘œ square-full; f45c +๏š˜ square-root-alt; f698 +๏–พ squarespace; f5be +๏† stack-exchange; f18d +๏…ฌ stack-overflow; f16c +๏ก‚ stackpath; f842 +๏–ฟ stamp; f5bf +๏€… star; f005 +๏š™ star-and-crescent; f699 +๏‚‰ star-half; f089 +๏—€ star-half-alt; f5c0 +๏šš star-of-david; f69a +๏˜ก star-of-life; f621 +๏ต staylinked; f3f5 +๏†ถ steam; f1b6 +๏†ท steam-square; f1b7 +๏ถ steam-symbol; f3f6 +๏ˆ step-backward; f048 +๏‘ step-forward; f051 +๏ƒฑ stethoscope; f0f1 +๏ท sticker-mule; f3f7 +๏‰‰ sticky-note; f249 +๏ stop; f04d +๏Š stop-circle; f28d +๏‹ฒ stopwatch; f2f2 +๎ฏ stopwatch-20 e06f +๏•Ž store; f54e +๏• store-alt; f54f +๎ฐ store-alt-slash e070 +๎ฑ store-slash e071 +๏จ strava; f428 +๏• stream; f550 +๏ˆ street-view; f21d +๏ƒŒ strikethrough; f0cc +๏ฉ stripe; f429 +๏ช stripe-s; f42a +๏•‘ stroopwafel; f551 +๏ธ studiovinari; f3f8 +๏†ค stumbleupon; f1a4 +๏†ฃ stumbleupon-circle; f1a3 +๏„ฌ subscript; f12c +๏ˆน subway; f239 +๏ƒฒ suitcase; f0f2 +๏— suitcase-rolling; f5c1 +๏†… sun; f185 +๏‹ superpowers; f2dd +๏„ซ superscript; f12b +๏น supple; f3f9 +๏—‚ surprise; f5c2 +๏Ÿ– suse; f7d6 +๏—ƒ swatchbook; f5c3 +๏ฃก swift; f8e1 +๏—„ swimmer; f5c4 +๏—… swimming-pool; f5c5 +๏ ฝ symfony; f83d +๏š› synagogue; f69b +๏€ก sync; f021 +๏‹ฑ sync-alt; f2f1 +๏’Ž syringe; f48e +๏ƒŽ table; f0ce +๏‘ table-tennis; f45d +๏„Š tablet; f10a +๏บ tablet-alt; f3fa +๏’ tablets; f490 +๏ฝ tachometer-alt; f3fd +๏€ซ tag; f02b +๏€ฌ tags; f02c +๏“› tape; f4db +๏‚ฎ tasks; f0ae +๏†บ taxi; f1ba +๏“น teamspeak; f4f9 +๏˜ฎ teeth; f62e +๏˜ฏ teeth-open; f62f +๏‹† telegram; f2c6 +๏พ telegram-plane; f3fe +๏ฉ temperature-high; f769 +๏ซ temperature-low; f76b +๏‡• tencent-weibo; f1d5 +๏Ÿ— tenge; f7d7 +๏„  terminal; f120 +๏€ด text-height; f034 +๏€ต text-width; f035 +๏€Š th; f00a +๏€‰ th-large; f009 +๏€‹ th-list; f00b +๏š the-red-yeti; f69d +๏˜ฐ theater-masks; f630 +๏—† themeco; f5c6 +๏Šฒ themeisle; f2b2 +๏’‘ thermometer; f491 +๏‹‹ thermometer-empty; f2cb +๏‹‡ thermometer-full; f2c7 +๏‹‰ thermometer-half; f2c9 +๏‹Š thermometer-quarter; f2ca +๏‹ˆ thermometer-three-quarters; f2c8 +๏œฑ think-peaks; f731 +๏…ฅ thumbs-down; f165 +๏…ค thumbs-up; f164 +๏‚ thumbtack; f08d +๏ฟ ticket-alt; f3ff +๎ป tiktok e07b +๏€ times; f00d +๏— times-circle; f057 +๏ƒ tint; f043 +๏—‡ tint-slash; f5c7 +๏—ˆ tired; f5c8 +๏ˆ„ toggle-off; f204 +๏ˆ… toggle-on; f205 +๏Ÿ˜ toilet; f7d8 +๏œž toilet-paper; f71e +๎ฒ toilet-paper-slash e072 +๏•’ toolbox; f552 +๏Ÿ™ tools; f7d9 +๏—‰ tooth; f5c9 +๏š  torah; f6a0 +๏šก torii-gate; f6a1 +๏œข tractor; f722 +๏”“ trade-federation; f513 +๏‰œ trademark; f25c +๏˜ท traffic-light; f637 +๎ trailer e041 +๏ˆธ train; f238 +๏Ÿš tram; f7da +๏ˆค transgender; f224 +๏ˆฅ transgender-alt; f225 +๏‡ธ trash; f1f8 +๏‹ญ trash-alt; f2ed +๏ ฉ trash-restore; f829 +๏ ช trash-restore-alt; f82a +๏†ป tree; f1bb +๏† trello; f181 +๏‚‘ trophy; f091 +๏ƒ‘ truck; f0d1 +๏“ž truck-loading; f4de +๏˜ป truck-monster; f63b +๏“Ÿ truck-moving; f4df +๏˜ผ truck-pickup; f63c +๏•“ tshirt; f553 +๏‡ค tty; f1e4 +๏…ณ tumblr; f173 +๏…ด tumblr-square; f174 +๏‰ฌ tv; f26c +๏‡จ twitch; f1e8 +๏‚™ twitter; f099 +๏‚ twitter-square; f081 +๏ซ typo3; f42b +๏‚ uber; f402 +๏ŸŸ ubuntu; f7df +๏ƒ uikit; f403 +๏ฃจ umbraco; f8e8 +๏ƒฉ umbrella; f0e9 +๏—Š umbrella-beach; f5ca +๎‚„ uncharted e084 +๏ƒ underline; f0cd +๏ƒข undo; f0e2 +๏‹ช undo-alt; f2ea +๏„ uniregistry; f404 +๎‰ unity e049 +๏Šš universal-access; f29a +๏†œ university; f19c +๏„ง unlink; f127 +๏‚œ unlock; f09c +๏„พ unlock-alt; f13e +๎ผ unsplash e07c +๏… untappd; f405 +๏‚“ upload; f093 +๏Ÿ  ups; f7e0 +๏Š‡ usb; f287 +๏€‡ user; f007 +๏† user-alt; f406 +๏“บ user-alt-slash; f4fa +๏“ป user-astronaut; f4fb +๏“ผ user-check; f4fc +๏Šฝ user-circle; f2bd +๏“ฝ user-clock; f4fd +๏“พ user-cog; f4fe +๏“ฟ user-edit; f4ff +๏”€ user-friends; f500 +๏” user-graduate; f501 +๏œจ user-injured; f728 +๏”‚ user-lock; f502 +๏ƒฐ user-md; f0f0 +๏”ƒ user-minus; f503 +๏”„ user-ninja; f504 +๏ ฏ user-nurse; f82f +๏ˆด user-plus; f234 +๏ˆ› user-secret; f21b +๏”… user-shield; f505 +๏”† user-slash; f506 +๏”‡ user-tag; f507 +๏”ˆ user-tie; f508 +๏ˆต user-times; f235 +๏ƒ€ users; f0c0 +๏”‰ users-cog; f509 +๎ณ users-slash e073 +๏Ÿก usps; f7e1 +๏‡ ussunnah; f407 +๏‹ฅ utensil-spoon; f2e5 +๏‹ง utensils; f2e7 +๏ˆ vaadin; f408 +๏—‹ vector-square; f5cb +๏ˆก venus; f221 +๏ˆฆ venus-double; f226 +๏ˆจ venus-mars; f228 +๎‚… vest e085 +๎‚† vest-patches e086 +๏ˆท viacoin; f237 +๏Šฉ viadeo; f2a9 +๏Šช viadeo-square; f2aa +๏’’ vial; f492 +๏’“ vials; f493 +๏‰ viber; f409 +๏€ฝ video; f03d +๏“ข video-slash; f4e2 +๏šง vihara; f6a7 +๏Š vimeo; f40a +๏†” vimeo-square; f194 +๏‰ฝ vimeo-v; f27d +๏‡Š vine; f1ca +๎ด virus e074 +๎ต virus-slash e075 +๎ถ viruses e076 +๏†‰ vk; f189 +๏‹ vnv; f40b +๏ข— voicemail; f897 +๏‘Ÿ volleyball-ball; f45f +๏€ง volume-down; f027 +๏šฉ volume-mute; f6a9 +๏€ฆ volume-off; f026 +๏€จ volume-up; f028 +๏ฒ vote-yea; f772 +๏œฉ vr-cardboard; f729 +๏Ÿ vuejs; f41f +๏•” walking; f554 +๏•• wallet; f555 +๏’” warehouse; f494 +๎‚‡ watchman-monitoring e087 +๏ณ water; f773 +๏ พ wave-square; f83e +๏ ฟ waze; f83f +๏—Œ weebly; f5cc +๏†Š weibo; f18a +๏’– weight; f496 +๏— weight-hanging; f5cd +๏‡— weixin; f1d7 +๏ˆฒ whatsapp; f232 +๏Œ whatsapp-square; f40c +๏†“ wheelchair; f193 +๏ whmcs; f40d +๏‡ซ wifi; f1eb +๏‰ฆ wikipedia-w; f266 +๏œฎ wind; f72e +๏ window-close; f410 +๏‹ window-maximize; f2d0 +๏‹‘ window-minimize; f2d1 +๏‹’ window-restore; f2d2 +๏…บ windows; f17a +๏œฏ wine-bottle; f72f +๏“ฃ wine-glass; f4e3 +๏—Ž wine-glass-alt; f5ce +๏— wix; f5cf +๏œฐ wizards-of-the-coast; f730 +๎‚ˆ wodu e088 +๏”” wolf-pack-battalion; f514 +๏…™ won-sign; f159 +๏†š wordpress; f19a +๏‘ wordpress-simple; f411 +๏Š— wpbeginner; f297 +๏‹ž wpexplorer; f2de +๏Š˜ wpforms; f298 +๏ค wpressr; f3e4 +๏‚ญ wrench; f0ad +๏’— x-ray; f497 +๏’ xbox; f412 +๏…จ xing; f168 +๏…ฉ xing-square; f169 +๏ˆป y-combinator; f23b +๏†ž yahoo; f19e +๏ก€ yammer; f840 +๏“ yandex; f413 +๏” yandex-international; f414 +๏Ÿฃ yarn; f7e3 +๏‡ฉ yelp; f1e9 +๏…— yen-sign; f157 +๏šญ yin-yang; f6ad +๏Šฑ yoast; f2b1 +๏…ง youtube; f167 +๏ฑ youtube-square; f431 +๏˜ฟ zhihu; f63f diff --git a/.local/share/larbs/emoji b/.local/share/larbs/emoji @@ -0,0 +1,1630 @@ +๐Ÿ˜€ grinning face +๐Ÿ˜ƒ grinning face with big eyes +๐Ÿ˜„ grinning face with smiling eyes +๐Ÿ˜ beaming face with smiling eyes +๐Ÿ˜† grinning squinting face +๐Ÿ˜… grinning face with sweat +๐Ÿคฃ rolling on the floor laughing +๐Ÿ˜‚ face with tears of joy +๐Ÿ™‚ slightly smiling face +๐Ÿ™ƒ upside-down face +๐Ÿซ  melting face +๐Ÿ˜‰ winking face +๐Ÿ˜Š smiling face with smiling eyes +๐Ÿ˜‡ smiling face with halo +๐Ÿฅฐ smiling face with hearts +๐Ÿ˜ smiling face with heart-eyes +๐Ÿคฉ star-struck +๐Ÿ˜˜ face blowing a kiss +๐Ÿ˜— kissing face +โ˜บ๏ธ smiling face +๐Ÿ˜š kissing face with closed eyes +๐Ÿ˜™ kissing face with smiling eyes +๐Ÿฅฒ smiling face with tear +๐Ÿ˜‹ face savoring food +๐Ÿ˜› face with tongue +๐Ÿ˜œ winking face with tongue +๐Ÿคช zany face +๐Ÿ˜ squinting face with tongue +๐Ÿค‘ money-mouth face +๐Ÿค— smiling face with open hands +๐Ÿคญ face with hand over mouth +๐Ÿซข face with open eyes and hand over mouth +๐Ÿซฃ face with peeking eye +๐Ÿคซ shushing face +๐Ÿค” thinking face +๐Ÿซก saluting face +๐Ÿค zipper-mouth face +๐Ÿคจ face with raised eyebrow +๐Ÿ˜ neutral face +๐Ÿ˜‘ expressionless face +๐Ÿ˜ถ face without mouth +๐Ÿซฅ dotted line face +๐Ÿ˜ smirking face +๐Ÿ˜’ unamused face +๐Ÿ™„ face with rolling eyes +๐Ÿ˜ฌ grimacing face +๐Ÿคฅ lying face +๐Ÿ˜Œ relieved face +๐Ÿ˜” pensive face +๐Ÿ˜ช sleepy face +๐Ÿคค drooling face +๐Ÿ˜ด sleeping face +๐Ÿ˜ท face with medical mask +๐Ÿค’ face with thermometer +๐Ÿค• face with head-bandage +๐Ÿคข nauseated face +๐Ÿคฎ face vomiting +๐Ÿคง sneezing face +๐Ÿฅต hot face +๐Ÿฅถ cold face +๐Ÿฅด woozy face +๐Ÿ˜ต face with crossed-out eyes +๐Ÿคฏ exploding head +๐Ÿค  cowboy hat face +๐Ÿฅณ partying face +๐Ÿฅธ disguised face +๐Ÿ˜Ž smiling face with sunglasses +๐Ÿค“ nerd face +๐Ÿง face with monocle +๐Ÿ˜• confused face +๐Ÿซค face with diagonal mouth +๐Ÿ˜Ÿ worried face +๐Ÿ™ slightly frowning face +โ˜น๏ธ frowning face +๐Ÿ˜ฎ face with open mouth +๐Ÿ˜ฏ hushed face +๐Ÿ˜ฒ astonished face +๐Ÿ˜ณ flushed face +๐Ÿฅบ pleading face +๐Ÿฅน face holding back tears +๐Ÿ˜ฆ frowning face with open mouth +๐Ÿ˜ง anguished face +๐Ÿ˜จ fearful face +๐Ÿ˜ฐ anxious face with sweat +๐Ÿ˜ฅ sad but relieved face +๐Ÿ˜ข crying face +๐Ÿ˜ญ loudly crying face +๐Ÿ˜ฑ face screaming in fear +๐Ÿ˜– confounded face +๐Ÿ˜ฃ persevering face +๐Ÿ˜ž disappointed face +๐Ÿ˜“ downcast face with sweat +๐Ÿ˜ฉ weary face +๐Ÿ˜ซ tired face +๐Ÿฅฑ yawning face +๐Ÿ˜ค face with steam from nose +๐Ÿ˜ก pouting face +๐Ÿ˜  angry face +๐Ÿคฌ face with symbols on mouth +๐Ÿ˜ˆ smiling face with horns +๐Ÿ‘ฟ angry face with horns +๐Ÿ’€ skull +โ˜ ๏ธ skull and crossbones +๐Ÿ’ฉ pile of poo +๐Ÿคก clown face +๐Ÿ‘น ogre +๐Ÿ‘บ goblin +๐Ÿ‘ป ghost +๐Ÿ‘ฝ alien +๐Ÿ‘พ alien monster +๐Ÿค– robot +๐Ÿ˜บ grinning cat +๐Ÿ˜ธ grinning cat with smiling eyes +๐Ÿ˜น cat with tears of joy +๐Ÿ˜ป smiling cat with heart-eyes +๐Ÿ˜ผ cat with wry smile +๐Ÿ˜ฝ kissing cat +๐Ÿ™€ weary cat +๐Ÿ˜ฟ crying cat +๐Ÿ˜พ pouting cat +๐Ÿ™ˆ see-no-evil monkey +๐Ÿ™‰ hear-no-evil monkey +๐Ÿ™Š speak-no-evil monkey +๐Ÿ’‹ kiss mark +๐Ÿ’Œ love letter +๐Ÿ’˜ heart with arrow +๐Ÿ’ heart with ribbon +๐Ÿ’– sparkling heart +๐Ÿ’— growing heart +๐Ÿ’“ beating heart +๐Ÿ’ž revolving hearts +๐Ÿ’• two hearts +๐Ÿ’Ÿ heart decoration +โฃ๏ธ heart exclamation +๐Ÿ’” broken heart +โค๏ธ red heart +๐Ÿงก orange heart +๐Ÿ’› yellow heart +๐Ÿ’š green heart +๐Ÿ’™ blue heart +๐Ÿ’œ purple heart +๐ŸคŽ brown heart +๐Ÿ–ค black heart +๐Ÿค white heart +๐Ÿ’ฏ hundred points +๐Ÿ’ข anger symbol +๐Ÿ’ฅ collision +๐Ÿ’ซ dizzy +๐Ÿ’ฆ sweat droplets +๐Ÿ’จ dashing away +๐Ÿ•ณ๏ธ hole +๐Ÿ’ฃ bomb +๐Ÿ’ฌ speech balloon +๐Ÿ—จ๏ธ left speech bubble +๐Ÿ—ฏ๏ธ right anger bubble +๐Ÿ’ญ thought balloon +๐Ÿ’ค zzz +๐Ÿ‘‹ waving hand +๐Ÿคš raised back of hand +๐Ÿ–๏ธ hand with fingers splayed +โœ‹ raised hand +๐Ÿ–– vulcan salute +๐Ÿซฑ rightwards hand +๐Ÿซฒ leftwards hand +๐Ÿซณ palm down hand +๐Ÿซด palm up hand +๐Ÿ‘Œ OK hand +๐ŸคŒ pinched fingers +๐Ÿค pinching hand +โœŒ๏ธ victory hand +๐Ÿคž crossed fingers +๐Ÿซฐ hand with index finger and thumb crossed +๐ŸคŸ love-you gesture +๐Ÿค˜ sign of the horns +๐Ÿค™ call me hand +๐Ÿ‘ˆ backhand index pointing left +๐Ÿ‘‰ backhand index pointing right +๐Ÿ‘† backhand index pointing up +๐Ÿ–• middle finger +๐Ÿ‘‡ backhand index pointing down +โ˜๏ธ index pointing up +๐Ÿซต index pointing at the viewer +๐Ÿ‘ thumbs up +๐Ÿ‘Ž thumbs down +โœŠ raised fist +๐Ÿ‘Š oncoming fist +๐Ÿค› left-facing fist +๐Ÿคœ right-facing fist +๐Ÿ‘ clapping hands +๐Ÿ™Œ raising hands +๐Ÿซถ heart hands +๐Ÿ‘ open hands +๐Ÿคฒ palms up together +๐Ÿค handshake +๐Ÿ™ folded hands +โœ๏ธ writing hand +๐Ÿ’… nail polish +๐Ÿคณ selfie +๐Ÿ’ช flexed biceps +๐Ÿฆพ mechanical arm +๐Ÿฆฟ mechanical leg +๐Ÿฆต leg +๐Ÿฆถ foot +๐Ÿ‘‚ ear +๐Ÿฆป ear with hearing aid +๐Ÿ‘ƒ nose +๐Ÿง  brain +๐Ÿซ€ anatomical heart +๐Ÿซ lungs +๐Ÿฆท tooth +๐Ÿฆด bone +๐Ÿ‘€ eyes +๐Ÿ‘๏ธ eye +๐Ÿ‘… tongue +๐Ÿ‘„ mouth +๐Ÿซฆ biting lip +๐Ÿ‘ถ baby +๐Ÿง’ child +๐Ÿ‘ฆ boy +๐Ÿ‘ง girl +๐Ÿง‘ person +๐Ÿ‘ฑ person: blond hair +๐Ÿ‘จ man +๐Ÿง” person: beard +๐Ÿ‘ฉ woman +๐Ÿง“ older person +๐Ÿ‘ด old man +๐Ÿ‘ต old woman +๐Ÿ™ person frowning +๐Ÿ™Ž person pouting +๐Ÿ™… person gesturing NO +๐Ÿ™† person gesturing OK +๐Ÿ’ person tipping hand +๐Ÿ™‹ person raising hand +๐Ÿง deaf person +๐Ÿ™‡ person bowing +๐Ÿคฆ person facepalming +๐Ÿคท person shrugging +๐Ÿ‘ฎ police officer +๐Ÿ•ต๏ธ detective +๐Ÿ’‚ guard +๐Ÿฅท ninja +๐Ÿ‘ท construction worker +๐Ÿซ… person with crown +๐Ÿคด prince +๐Ÿ‘ธ princess +๐Ÿ‘ณ person wearing turban +๐Ÿ‘ฒ person with skullcap +๐Ÿง• woman with headscarf +๐Ÿคต person in tuxedo +๐Ÿ‘ฐ person with veil +๐Ÿคฐ pregnant woman +๐Ÿซƒ pregnant man +๐Ÿซ„ pregnant person +๐Ÿคฑ breast-feeding +๐Ÿ‘ผ baby angel +๐ŸŽ… Santa Claus +๐Ÿคถ Mrs. Claus +๐Ÿฆธ superhero +๐Ÿฆน supervillain +๐Ÿง™ mage +๐Ÿงš fairy +๐Ÿง› vampire +๐Ÿงœ merperson +๐Ÿง elf +๐Ÿงž genie +๐ŸงŸ zombie +๐ŸงŒ troll +๐Ÿ’† person getting massage +๐Ÿ’‡ person getting haircut +๐Ÿšถ person walking +๐Ÿง person standing +๐ŸงŽ person kneeling +๐Ÿƒ person running +๐Ÿ’ƒ woman dancing +๐Ÿ•บ man dancing +๐Ÿ•ด๏ธ person in suit levitating +๐Ÿ‘ฏ people with bunny ears +๐Ÿง– person in steamy room +๐Ÿง— person climbing +๐Ÿคบ person fencing +๐Ÿ‡ horse racing +โ›ท๏ธ skier +๐Ÿ‚ snowboarder +๐ŸŒ๏ธ person golfing +๐Ÿ„ person surfing +๐Ÿšฃ person rowing boat +๐ŸŠ person swimming +โ›น๏ธ person bouncing ball +๐Ÿ‹๏ธ person lifting weights +๐Ÿšด person biking +๐Ÿšต person mountain biking +๐Ÿคธ person cartwheeling +๐Ÿคผ people wrestling +๐Ÿคฝ person playing water polo +๐Ÿคพ person playing handball +๐Ÿคน person juggling +๐Ÿง˜ person in lotus position +๐Ÿ›€ person taking bath +๐Ÿ›Œ person in bed +๐Ÿ‘ญ women holding hands +๐Ÿ‘ซ woman and man holding hands +๐Ÿ‘ฌ men holding hands +๐Ÿ’ kiss +๐Ÿ’‘ couple with heart +๐Ÿ‘ช family +๐Ÿ—ฃ๏ธ speaking head +๐Ÿ‘ค bust in silhouette +๐Ÿ‘ฅ busts in silhouette +๐Ÿซ‚ people hugging +๐Ÿ‘ฃ footprints +๐Ÿต monkey face +๐Ÿ’ monkey +๐Ÿฆ gorilla +๐Ÿฆง orangutan +๐Ÿถ dog face +๐Ÿ• dog +๐Ÿฆฎ guide dog +๐Ÿฉ poodle +๐Ÿบ wolf +๐ŸฆŠ fox +๐Ÿฆ raccoon +๐Ÿฑ cat face +๐Ÿˆ cat +๐Ÿฆ lion +๐Ÿฏ tiger face +๐Ÿ… tiger +๐Ÿ† leopard +๐Ÿด horse face +๐ŸŽ horse +๐Ÿฆ„ unicorn +๐Ÿฆ“ zebra +๐ŸฆŒ deer +๐Ÿฆฌ bison +๐Ÿฎ cow face +๐Ÿ‚ ox +๐Ÿƒ water buffalo +๐Ÿ„ cow +๐Ÿท pig face +๐Ÿ– pig +๐Ÿ— boar +๐Ÿฝ pig nose +๐Ÿ ram +๐Ÿ‘ ewe +๐Ÿ goat +๐Ÿช camel +๐Ÿซ two-hump camel +๐Ÿฆ™ llama +๐Ÿฆ’ giraffe +๐Ÿ˜ elephant +๐Ÿฆฃ mammoth +๐Ÿฆ rhinoceros +๐Ÿฆ› hippopotamus +๐Ÿญ mouse face +๐Ÿ mouse +๐Ÿ€ rat +๐Ÿน hamster +๐Ÿฐ rabbit face +๐Ÿ‡ rabbit +๐Ÿฟ๏ธ chipmunk +๐Ÿฆซ beaver +๐Ÿฆ” hedgehog +๐Ÿฆ‡ bat +๐Ÿป bear +๐Ÿจ koala +๐Ÿผ panda +๐Ÿฆฅ sloth +๐Ÿฆฆ otter +๐Ÿฆจ skunk +๐Ÿฆ˜ kangaroo +๐Ÿฆก badger +๐Ÿพ paw prints +๐Ÿฆƒ turkey +๐Ÿ” chicken +๐Ÿ“ rooster +๐Ÿฃ hatching chick +๐Ÿค baby chick +๐Ÿฅ front-facing baby chick +๐Ÿฆ bird +๐Ÿง penguin +๐Ÿ•Š๏ธ dove +๐Ÿฆ… eagle +๐Ÿฆ† duck +๐Ÿฆข swan +๐Ÿฆ‰ owl +๐Ÿฆค dodo +๐Ÿชถ feather +๐Ÿฆฉ flamingo +๐Ÿฆš peacock +๐Ÿฆœ parrot +๐Ÿธ frog +๐ŸŠ crocodile +๐Ÿข turtle +๐ŸฆŽ lizard +๐Ÿ snake +๐Ÿฒ dragon face +๐Ÿ‰ dragon +๐Ÿฆ• sauropod +๐Ÿฆ– T-Rex +๐Ÿณ spouting whale +๐Ÿ‹ whale +๐Ÿฌ dolphin +๐Ÿฆญ seal +๐ŸŸ fish +๐Ÿ  tropical fish +๐Ÿก blowfish +๐Ÿฆˆ shark +๐Ÿ™ octopus +๐Ÿš spiral shell +๐Ÿชธ coral +๐ŸŒ snail +๐Ÿฆ‹ butterfly +๐Ÿ› bug +๐Ÿœ ant +๐Ÿ honeybee +๐Ÿชฒ beetle +๐Ÿž lady beetle +๐Ÿฆ— cricket +๐Ÿชณ cockroach +๐Ÿ•ท๏ธ spider +๐Ÿ•ธ๏ธ spider web +๐Ÿฆ‚ scorpion +๐ŸฆŸ mosquito +๐Ÿชฐ fly +๐Ÿชฑ worm +๐Ÿฆ  microbe +๐Ÿ’ bouquet +๐ŸŒธ cherry blossom +๐Ÿ’ฎ white flower +๐Ÿชท lotus +๐Ÿต๏ธ rosette +๐ŸŒน rose +๐Ÿฅ€ wilted flower +๐ŸŒบ hibiscus +๐ŸŒป sunflower +๐ŸŒผ blossom +๐ŸŒท tulip +๐ŸŒฑ seedling +๐Ÿชด potted plant +๐ŸŒฒ evergreen tree +๐ŸŒณ deciduous tree +๐ŸŒด palm tree +๐ŸŒต cactus +๐ŸŒพ sheaf of rice +๐ŸŒฟ herb +โ˜˜๏ธ shamrock +๐Ÿ€ four leaf clover +๐Ÿ maple leaf +๐Ÿ‚ fallen leaf +๐Ÿƒ leaf fluttering in wind +๐Ÿชน empty nest +๐Ÿชบ nest with eggs +๐Ÿ‡ grapes +๐Ÿˆ melon +๐Ÿ‰ watermelon +๐ŸŠ tangerine +๐Ÿ‹ lemon +๐ŸŒ banana +๐Ÿ pineapple +๐Ÿฅญ mango +๐ŸŽ red apple +๐Ÿ green apple +๐Ÿ pear +๐Ÿ‘ peach +๐Ÿ’ cherries +๐Ÿ“ strawberry +๐Ÿซ blueberries +๐Ÿฅ kiwi fruit +๐Ÿ… tomato +๐Ÿซ’ olive +๐Ÿฅฅ coconut +๐Ÿฅ‘ avocado +๐Ÿ† eggplant +๐Ÿฅ” potato +๐Ÿฅ• carrot +๐ŸŒฝ ear of corn +๐ŸŒถ๏ธ hot pepper +๐Ÿซ‘ bell pepper +๐Ÿฅ’ cucumber +๐Ÿฅฌ leafy green +๐Ÿฅฆ broccoli +๐Ÿง„ garlic +๐Ÿง… onion +๐Ÿ„ mushroom +๐Ÿฅœ peanuts +๐Ÿซ˜ beans +๐ŸŒฐ chestnut +๐Ÿž bread +๐Ÿฅ croissant +๐Ÿฅ– baguette bread +๐Ÿซ“ flatbread +๐Ÿฅจ pretzel +๐Ÿฅฏ bagel +๐Ÿฅž pancakes +๐Ÿง‡ waffle +๐Ÿง€ cheese wedge +๐Ÿ– meat on bone +๐Ÿ— poultry leg +๐Ÿฅฉ cut of meat +๐Ÿฅ“ bacon +๐Ÿ” hamburger +๐ŸŸ french fries +๐Ÿ• pizza +๐ŸŒญ hot dog +๐Ÿฅช sandwich +๐ŸŒฎ taco +๐ŸŒฏ burrito +๐Ÿซ” tamale +๐Ÿฅ™ stuffed flatbread +๐Ÿง† falafel +๐Ÿฅš egg +๐Ÿณ cooking +๐Ÿฅ˜ shallow pan of food +๐Ÿฒ pot of food +๐Ÿซ• fondue +๐Ÿฅฃ bowl with spoon +๐Ÿฅ— green salad +๐Ÿฟ popcorn +๐Ÿงˆ butter +๐Ÿง‚ salt +๐Ÿฅซ canned food +๐Ÿฑ bento box +๐Ÿ˜ rice cracker +๐Ÿ™ rice ball +๐Ÿš cooked rice +๐Ÿ› curry rice +๐Ÿœ steaming bowl +๐Ÿ spaghetti +๐Ÿ  roasted sweet potato +๐Ÿข oden +๐Ÿฃ sushi +๐Ÿค fried shrimp +๐Ÿฅ fish cake with swirl +๐Ÿฅฎ moon cake +๐Ÿก dango +๐ŸฅŸ dumpling +๐Ÿฅ  fortune cookie +๐Ÿฅก takeout box +๐Ÿฆ€ crab +๐Ÿฆž lobster +๐Ÿฆ shrimp +๐Ÿฆ‘ squid +๐Ÿฆช oyster +๐Ÿฆ soft ice cream +๐Ÿง shaved ice +๐Ÿจ ice cream +๐Ÿฉ doughnut +๐Ÿช cookie +๐ŸŽ‚ birthday cake +๐Ÿฐ shortcake +๐Ÿง cupcake +๐Ÿฅง pie +๐Ÿซ chocolate bar +๐Ÿฌ candy +๐Ÿญ lollipop +๐Ÿฎ custard +๐Ÿฏ honey pot +๐Ÿผ baby bottle +๐Ÿฅ› glass of milk +โ˜• hot beverage +๐Ÿซ– teapot +๐Ÿต teacup without handle +๐Ÿถ sake +๐Ÿพ bottle with popping cork +๐Ÿท wine glass +๐Ÿธ cocktail glass +๐Ÿน tropical drink +๐Ÿบ beer mug +๐Ÿป clinking beer mugs +๐Ÿฅ‚ clinking glasses +๐Ÿฅƒ tumbler glass +๐Ÿซ— pouring liquid +๐Ÿฅค cup with straw +๐Ÿง‹ bubble tea +๐Ÿงƒ beverage box +๐Ÿง‰ mate +๐ŸงŠ ice +๐Ÿฅข chopsticks +๐Ÿฝ๏ธ fork and knife with plate +๐Ÿด fork and knife +๐Ÿฅ„ spoon +๐Ÿ”ช kitchen knife +๐Ÿซ™ jar +๐Ÿบ amphora +๐ŸŒ globe showing Europe-Africa +๐ŸŒŽ globe showing Americas +๐ŸŒ globe showing Asia-Australia +๐ŸŒ globe with meridians +๐Ÿ—บ๏ธ world map +๐Ÿ—พ map of Japan +๐Ÿงญ compass +๐Ÿ”๏ธ snow-capped mountain +โ›ฐ๏ธ mountain +๐ŸŒ‹ volcano +๐Ÿ—ป mount fuji +๐Ÿ•๏ธ camping +๐Ÿ–๏ธ beach with umbrella +๐Ÿœ๏ธ desert +๐Ÿ๏ธ desert island +๐Ÿž๏ธ national park +๐ŸŸ๏ธ stadium +๐Ÿ›๏ธ classical building +๐Ÿ—๏ธ building construction +๐Ÿงฑ brick +๐Ÿชจ rock +๐Ÿชต wood +๐Ÿ›– hut +๐Ÿ˜๏ธ houses +๐Ÿš๏ธ derelict house +๐Ÿ  house +๐Ÿก house with garden +๐Ÿข office building +๐Ÿฃ Japanese post office +๐Ÿค post office +๐Ÿฅ hospital +๐Ÿฆ bank +๐Ÿจ hotel +๐Ÿฉ love hotel +๐Ÿช convenience store +๐Ÿซ school +๐Ÿฌ department store +๐Ÿญ factory +๐Ÿฏ Japanese castle +๐Ÿฐ castle +๐Ÿ’’ wedding +๐Ÿ—ผ Tokyo tower +๐Ÿ—ฝ Statue of Liberty +โ›ช church +๐Ÿ•Œ mosque +๐Ÿ›• hindu temple +๐Ÿ• synagogue +โ›ฉ๏ธ shinto shrine +๐Ÿ•‹ kaaba +โ›ฒ fountain +โ›บ tent +๐ŸŒ foggy +๐ŸŒƒ night with stars +๐Ÿ™๏ธ cityscape +๐ŸŒ„ sunrise over mountains +๐ŸŒ… sunrise +๐ŸŒ† cityscape at dusk +๐ŸŒ‡ sunset +๐ŸŒ‰ bridge at night +โ™จ๏ธ hot springs +๐ŸŽ  carousel horse +๐Ÿ› playground slide +๐ŸŽก ferris wheel +๐ŸŽข roller coaster +๐Ÿ’ˆ barber pole +๐ŸŽช circus tent +๐Ÿš‚ locomotive +๐Ÿšƒ railway car +๐Ÿš„ high-speed train +๐Ÿš… bullet train +๐Ÿš† train +๐Ÿš‡ metro +๐Ÿšˆ light rail +๐Ÿš‰ station +๐ŸšŠ tram +๐Ÿš monorail +๐Ÿšž mountain railway +๐Ÿš‹ tram car +๐ŸšŒ bus +๐Ÿš oncoming bus +๐ŸšŽ trolleybus +๐Ÿš minibus +๐Ÿš‘ ambulance +๐Ÿš’ fire engine +๐Ÿš“ police car +๐Ÿš” oncoming police car +๐Ÿš• taxi +๐Ÿš– oncoming taxi +๐Ÿš— automobile +๐Ÿš˜ oncoming automobile +๐Ÿš™ sport utility vehicle +๐Ÿ›ป pickup truck +๐Ÿšš delivery truck +๐Ÿš› articulated lorry +๐Ÿšœ tractor +๐ŸŽ๏ธ racing car +๐Ÿ๏ธ motorcycle +๐Ÿ›ต motor scooter +๐Ÿฆฝ manual wheelchair +๐Ÿฆผ motorized wheelchair +๐Ÿ›บ auto rickshaw +๐Ÿšฒ bicycle +๐Ÿ›ด kick scooter +๐Ÿ›น skateboard +๐Ÿ›ผ roller skate +๐Ÿš bus stop +๐Ÿ›ฃ๏ธ motorway +๐Ÿ›ค๏ธ railway track +๐Ÿ›ข๏ธ oil drum +โ›ฝ fuel pump +๐Ÿ›ž wheel +๐Ÿšจ police car light +๐Ÿšฅ horizontal traffic light +๐Ÿšฆ vertical traffic light +๐Ÿ›‘ stop sign +๐Ÿšง construction +โš“ anchor +๐Ÿ›Ÿ ring buoy +โ›ต sailboat +๐Ÿ›ถ canoe +๐Ÿšค speedboat +๐Ÿ›ณ๏ธ passenger ship +โ›ด๏ธ ferry +๐Ÿ›ฅ๏ธ motor boat +๐Ÿšข ship +โœˆ๏ธ airplane +๐Ÿ›ฉ๏ธ small airplane +๐Ÿ›ซ airplane departure +๐Ÿ›ฌ airplane arrival +๐Ÿช‚ parachute +๐Ÿ’บ seat +๐Ÿš helicopter +๐ŸšŸ suspension railway +๐Ÿš  mountain cableway +๐Ÿšก aerial tramway +๐Ÿ›ฐ๏ธ satellite +๐Ÿš€ rocket +๐Ÿ›ธ flying saucer +๐Ÿ›Ž๏ธ bellhop bell +๐Ÿงณ luggage +โŒ› hourglass done +โณ hourglass not done +โŒš watch +โฐ alarm clock +โฑ๏ธ stopwatch +โฒ๏ธ timer clock +๐Ÿ•ฐ๏ธ mantelpiece clock +๐Ÿ•› twelve oโ€™clock +๐Ÿ•ง twelve-thirty +๐Ÿ• one oโ€™clock +๐Ÿ•œ one-thirty +๐Ÿ•‘ two oโ€™clock +๐Ÿ• two-thirty +๐Ÿ•’ three oโ€™clock +๐Ÿ•ž three-thirty +๐Ÿ•“ four oโ€™clock +๐Ÿ•Ÿ four-thirty +๐Ÿ•” five oโ€™clock +๐Ÿ•  five-thirty +๐Ÿ•• six oโ€™clock +๐Ÿ•ก six-thirty +๐Ÿ•– seven oโ€™clock +๐Ÿ•ข seven-thirty +๐Ÿ•— eight oโ€™clock +๐Ÿ•ฃ eight-thirty +๐Ÿ•˜ nine oโ€™clock +๐Ÿ•ค nine-thirty +๐Ÿ•™ ten oโ€™clock +๐Ÿ•ฅ ten-thirty +๐Ÿ•š eleven oโ€™clock +๐Ÿ•ฆ eleven-thirty +๐ŸŒ‘ new moon +๐ŸŒ’ waxing crescent moon +๐ŸŒ“ first quarter moon +๐ŸŒ” waxing gibbous moon +๐ŸŒ• full moon +๐ŸŒ– waning gibbous moon +๐ŸŒ— last quarter moon +๐ŸŒ˜ waning crescent moon +๐ŸŒ™ crescent moon +๐ŸŒš new moon face +๐ŸŒ› first quarter moon face +๐ŸŒœ last quarter moon face +๐ŸŒก๏ธ thermometer +โ˜€๏ธ sun +๐ŸŒ full moon face +๐ŸŒž sun with face +๐Ÿช ringed planet +โญ star +๐ŸŒŸ glowing star +๐ŸŒ  shooting star +๐ŸŒŒ milky way +โ˜๏ธ cloud +โ›… sun behind cloud +โ›ˆ๏ธ cloud with lightning and rain +๐ŸŒค๏ธ sun behind small cloud +๐ŸŒฅ๏ธ sun behind large cloud +๐ŸŒฆ๏ธ sun behind rain cloud +๐ŸŒง๏ธ cloud with rain +๐ŸŒจ๏ธ cloud with snow +๐ŸŒฉ๏ธ cloud with lightning +๐ŸŒช๏ธ tornado +๐ŸŒซ๏ธ fog +๐ŸŒฌ๏ธ wind face +๐ŸŒ€ cyclone +๐ŸŒˆ rainbow +๐ŸŒ‚ closed umbrella +โ˜‚๏ธ umbrella +โ˜” umbrella with rain drops +โ›ฑ๏ธ umbrella on ground +โšก high voltage +โ„๏ธ snowflake +โ˜ƒ๏ธ snowman +โ›„ snowman without snow +โ˜„๏ธ comet +๐Ÿ”ฅ fire +๐Ÿ’ง droplet +๐ŸŒŠ water wave +๐ŸŽƒ jack-o-lantern +๐ŸŽ„ Christmas tree +๐ŸŽ† fireworks +๐ŸŽ‡ sparkler +๐Ÿงจ firecracker +โœจ sparkles +๐ŸŽˆ balloon +๐ŸŽ‰ party popper +๐ŸŽŠ confetti ball +๐ŸŽ‹ tanabata tree +๐ŸŽ pine decoration +๐ŸŽŽ Japanese dolls +๐ŸŽ carp streamer +๐ŸŽ wind chime +๐ŸŽ‘ moon viewing ceremony +๐Ÿงง red envelope +๐ŸŽ€ ribbon +๐ŸŽ wrapped gift +๐ŸŽ—๏ธ reminder ribbon +๐ŸŽŸ๏ธ admission tickets +๐ŸŽซ ticket +๐ŸŽ–๏ธ military medal +๐Ÿ† trophy +๐Ÿ… sports medal +๐Ÿฅ‡ 1st place medal +๐Ÿฅˆ 2nd place medal +๐Ÿฅ‰ 3rd place medal +โšฝ soccer ball +โšพ baseball +๐ŸฅŽ softball +๐Ÿ€ basketball +๐Ÿ volleyball +๐Ÿˆ american football +๐Ÿ‰ rugby football +๐ŸŽพ tennis +๐Ÿฅ flying disc +๐ŸŽณ bowling +๐Ÿ cricket game +๐Ÿ‘ field hockey +๐Ÿ’ ice hockey +๐Ÿฅ lacrosse +๐Ÿ“ ping pong +๐Ÿธ badminton +๐ŸฅŠ boxing glove +๐Ÿฅ‹ martial arts uniform +๐Ÿฅ… goal net +โ›ณ flag in hole +โ›ธ๏ธ ice skate +๐ŸŽฃ fishing pole +๐Ÿคฟ diving mask +๐ŸŽฝ running shirt +๐ŸŽฟ skis +๐Ÿ›ท sled +๐ŸฅŒ curling stone +๐ŸŽฏ bullseye +๐Ÿช€ yo-yo +๐Ÿช kite +๐ŸŽฑ pool 8 ball +๐Ÿ”ฎ crystal ball +๐Ÿช„ magic wand +๐Ÿงฟ nazar amulet +๐Ÿชฌ hamsa +๐ŸŽฎ video game +๐Ÿ•น๏ธ joystick +๐ŸŽฐ slot machine +๐ŸŽฒ game die +๐Ÿงฉ puzzle piece +๐Ÿงธ teddy bear +๐Ÿช… piรฑata +๐Ÿชฉ mirror ball +๐Ÿช† nesting dolls +โ™ ๏ธ spade suit +โ™ฅ๏ธ heart suit +โ™ฆ๏ธ diamond suit +โ™ฃ๏ธ club suit +โ™Ÿ๏ธ chess pawn +๐Ÿƒ joker +๐Ÿ€„ mahjong red dragon +๐ŸŽด flower playing cards +๐ŸŽญ performing arts +๐Ÿ–ผ๏ธ framed picture +๐ŸŽจ artist palette +๐Ÿงต thread +๐Ÿชก sewing needle +๐Ÿงถ yarn +๐Ÿชข knot +๐Ÿ‘“ glasses +๐Ÿ•ถ๏ธ sunglasses +๐Ÿฅฝ goggles +๐Ÿฅผ lab coat +๐Ÿฆบ safety vest +๐Ÿ‘” necktie +๐Ÿ‘• t-shirt +๐Ÿ‘– jeans +๐Ÿงฃ scarf +๐Ÿงค gloves +๐Ÿงฅ coat +๐Ÿงฆ socks +๐Ÿ‘— dress +๐Ÿ‘˜ kimono +๐Ÿฅป sari +๐Ÿฉฑ one-piece swimsuit +๐Ÿฉฒ briefs +๐Ÿฉณ shorts +๐Ÿ‘™ bikini +๐Ÿ‘š womanโ€™s clothes +๐Ÿ‘› purse +๐Ÿ‘œ handbag +๐Ÿ‘ clutch bag +๐Ÿ›๏ธ shopping bags +๐ŸŽ’ backpack +๐Ÿฉด thong sandal +๐Ÿ‘ž manโ€™s shoe +๐Ÿ‘Ÿ running shoe +๐Ÿฅพ hiking boot +๐Ÿฅฟ flat shoe +๐Ÿ‘  high-heeled shoe +๐Ÿ‘ก womanโ€™s sandal +๐Ÿฉฐ ballet shoes +๐Ÿ‘ข womanโ€™s boot +๐Ÿ‘‘ crown +๐Ÿ‘’ womanโ€™s hat +๐ŸŽฉ top hat +๐ŸŽ“ graduation cap +๐Ÿงข billed cap +๐Ÿช– military helmet +โ›‘๏ธ rescue workerโ€™s helmet +๐Ÿ“ฟ prayer beads +๐Ÿ’„ lipstick +๐Ÿ’ ring +๐Ÿ’Ž gem stone +๐Ÿ”‡ muted speaker +๐Ÿ”ˆ speaker low volume +๐Ÿ”‰ speaker medium volume +๐Ÿ”Š speaker high volume +๐Ÿ“ข loudspeaker +๐Ÿ“ฃ megaphone +๐Ÿ“ฏ postal horn +๐Ÿ”” bell +๐Ÿ”• bell with slash +๐ŸŽผ musical score +๐ŸŽต musical note +๐ŸŽถ musical notes +๐ŸŽ™๏ธ studio microphone +๐ŸŽš๏ธ level slider +๐ŸŽ›๏ธ control knobs +๐ŸŽค microphone +๐ŸŽง headphone +๐Ÿ“ป radio +๐ŸŽท saxophone +๐Ÿช— accordion +๐ŸŽธ guitar +๐ŸŽน musical keyboard +๐ŸŽบ trumpet +๐ŸŽป violin +๐Ÿช• banjo +๐Ÿฅ drum +๐Ÿช˜ long drum +๐Ÿ“ฑ mobile phone +๐Ÿ“ฒ mobile phone with arrow +โ˜Ž๏ธ telephone +๐Ÿ“ž telephone receiver +๐Ÿ“Ÿ pager +๐Ÿ“  fax machine +๐Ÿ”‹ battery +๐Ÿชซ low battery +๐Ÿ”Œ electric plug +๐Ÿ’ป laptop +๐Ÿ–ฅ๏ธ desktop computer +๐Ÿ–จ๏ธ printer +โŒจ๏ธ keyboard +๐Ÿ–ฑ๏ธ computer mouse +๐Ÿ–ฒ๏ธ trackball +๐Ÿ’ฝ computer disk +๐Ÿ’พ floppy disk +๐Ÿ’ฟ optical disk +๐Ÿ“€ dvd +๐Ÿงฎ abacus +๐ŸŽฅ movie camera +๐ŸŽž๏ธ film frames +๐Ÿ“ฝ๏ธ film projector +๐ŸŽฌ clapper board +๐Ÿ“บ television +๐Ÿ“ท camera +๐Ÿ“ธ camera with flash +๐Ÿ“น video camera +๐Ÿ“ผ videocassette +๐Ÿ” magnifying glass tilted left +๐Ÿ”Ž magnifying glass tilted right +๐Ÿ•ฏ๏ธ candle +๐Ÿ’ก light bulb +๐Ÿ”ฆ flashlight +๐Ÿฎ red paper lantern +๐Ÿช” diya lamp +๐Ÿ“” notebook with decorative cover +๐Ÿ“• closed book +๐Ÿ“– open book +๐Ÿ“— green book +๐Ÿ“˜ blue book +๐Ÿ“™ orange book +๐Ÿ“š books +๐Ÿ““ notebook +๐Ÿ“’ ledger +๐Ÿ“ƒ page with curl +๐Ÿ“œ scroll +๐Ÿ“„ page facing up +๐Ÿ“ฐ newspaper +๐Ÿ—ž๏ธ rolled-up newspaper +๐Ÿ“‘ bookmark tabs +๐Ÿ”– bookmark +๐Ÿท๏ธ label +๐Ÿ’ฐ money bag +๐Ÿช™ coin +๐Ÿ’ด yen banknote +๐Ÿ’ต dollar banknote +๐Ÿ’ถ euro banknote +๐Ÿ’ท pound banknote +๐Ÿ’ธ money with wings +๐Ÿ’ณ credit card +๐Ÿงพ receipt +๐Ÿ’น chart increasing with yen +โœ‰๏ธ envelope +๐Ÿ“ง e-mail +๐Ÿ“จ incoming envelope +๐Ÿ“ฉ envelope with arrow +๐Ÿ“ค outbox tray +๐Ÿ“ฅ inbox tray +๐Ÿ“ฆ package +๐Ÿ“ซ closed mailbox with raised flag +๐Ÿ“ช closed mailbox with lowered flag +๐Ÿ“ฌ open mailbox with raised flag +๐Ÿ“ญ open mailbox with lowered flag +๐Ÿ“ฎ postbox +๐Ÿ—ณ๏ธ ballot box with ballot +โœ๏ธ pencil +โœ’๏ธ black nib +๐Ÿ–‹๏ธ fountain pen +๐Ÿ–Š๏ธ pen +๐Ÿ–Œ๏ธ paintbrush +๐Ÿ–๏ธ crayon +๐Ÿ“ memo +๐Ÿ’ผ briefcase +๐Ÿ“ file folder +๐Ÿ“‚ open file folder +๐Ÿ—‚๏ธ card index dividers +๐Ÿ“… calendar +๐Ÿ“† tear-off calendar +๐Ÿ—’๏ธ spiral notepad +๐Ÿ—“๏ธ spiral calendar +๐Ÿ“‡ card index +๐Ÿ“ˆ chart increasing +๐Ÿ“‰ chart decreasing +๐Ÿ“Š bar chart +๐Ÿ“‹ clipboard +๐Ÿ“Œ pushpin +๐Ÿ“ round pushpin +๐Ÿ“Ž paperclip +๐Ÿ–‡๏ธ linked paperclips +๐Ÿ“ straight ruler +๐Ÿ“ triangular ruler +โœ‚๏ธ scissors +๐Ÿ—ƒ๏ธ card file box +๐Ÿ—„๏ธ file cabinet +๐Ÿ—‘๏ธ wastebasket +๐Ÿ”’ locked +๐Ÿ”“ unlocked +๐Ÿ” locked with pen +๐Ÿ” locked with key +๐Ÿ”‘ key +๐Ÿ—๏ธ old key +๐Ÿ”จ hammer +๐Ÿช“ axe +โ›๏ธ pick +โš’๏ธ hammer and pick +๐Ÿ› ๏ธ hammer and wrench +๐Ÿ—ก๏ธ dagger +โš”๏ธ crossed swords +๐Ÿ”ซ water pistol +๐Ÿชƒ boomerang +๐Ÿน bow and arrow +๐Ÿ›ก๏ธ shield +๐Ÿชš carpentry saw +๐Ÿ”ง wrench +๐Ÿช› screwdriver +๐Ÿ”ฉ nut and bolt +โš™๏ธ gear +๐Ÿ—œ๏ธ clamp +โš–๏ธ balance scale +๐Ÿฆฏ white cane +๐Ÿ”— link +โ›“๏ธ chains +๐Ÿช hook +๐Ÿงฐ toolbox +๐Ÿงฒ magnet +๐Ÿชœ ladder +โš—๏ธ alembic +๐Ÿงช test tube +๐Ÿงซ petri dish +๐Ÿงฌ dna +๐Ÿ”ฌ microscope +๐Ÿ”ญ telescope +๐Ÿ“ก satellite antenna +๐Ÿ’‰ syringe +๐Ÿฉธ drop of blood +๐Ÿ’Š pill +๐Ÿฉน adhesive bandage +๐Ÿฉผ crutch +๐Ÿฉบ stethoscope +๐Ÿฉป x-ray +๐Ÿšช door +๐Ÿ›— elevator +๐Ÿชž mirror +๐ŸชŸ window +๐Ÿ›๏ธ bed +๐Ÿ›‹๏ธ couch and lamp +๐Ÿช‘ chair +๐Ÿšฝ toilet +๐Ÿช  plunger +๐Ÿšฟ shower +๐Ÿ› bathtub +๐Ÿชค mouse trap +๐Ÿช’ razor +๐Ÿงด lotion bottle +๐Ÿงท safety pin +๐Ÿงน broom +๐Ÿงบ basket +๐Ÿงป roll of paper +๐Ÿชฃ bucket +๐Ÿงผ soap +๐Ÿซง bubbles +๐Ÿชฅ toothbrush +๐Ÿงฝ sponge +๐Ÿงฏ fire extinguisher +๐Ÿ›’ shopping cart +๐Ÿšฌ cigarette +โšฐ๏ธ coffin +๐Ÿชฆ headstone +โšฑ๏ธ funeral urn +๐Ÿ—ฟ moai +๐Ÿชง placard +๐Ÿชช identification card +๐Ÿง ATM sign +๐Ÿšฎ litter in bin sign +๐Ÿšฐ potable water +โ™ฟ wheelchair symbol +๐Ÿšน menโ€™s room +๐Ÿšบ womenโ€™s room +๐Ÿšป restroom +๐Ÿšผ baby symbol +๐Ÿšพ water closet +๐Ÿ›‚ passport control +๐Ÿ›ƒ customs +๐Ÿ›„ baggage claim +๐Ÿ›… left luggage +โš ๏ธ warning +๐Ÿšธ children crossing +โ›” no entry +๐Ÿšซ prohibited +๐Ÿšณ no bicycles +๐Ÿšญ no smoking +๐Ÿšฏ no littering +๐Ÿšฑ non-potable water +๐Ÿšท no pedestrians +๐Ÿ“ต no mobile phones +๐Ÿ”ž no one under eighteen +โ˜ข๏ธ radioactive +โ˜ฃ๏ธ biohazard +โฌ†๏ธ up arrow +โ†—๏ธ up-right arrow +โžก๏ธ right arrow +โ†˜๏ธ down-right arrow +โฌ‡๏ธ down arrow +โ†™๏ธ down-left arrow +โฌ…๏ธ left arrow +โ†–๏ธ up-left arrow +โ†•๏ธ up-down arrow +โ†”๏ธ left-right arrow +โ†ฉ๏ธ right arrow curving left +โ†ช๏ธ left arrow curving right +โคด๏ธ right arrow curving up +โคต๏ธ right arrow curving down +๐Ÿ”ƒ clockwise vertical arrows +๐Ÿ”„ counterclockwise arrows button +๐Ÿ”™ BACK arrow +๐Ÿ”š END arrow +๐Ÿ”› ON! arrow +๐Ÿ”œ SOON arrow +๐Ÿ” TOP arrow +๐Ÿ› place of worship +โš›๏ธ atom symbol +๐Ÿ•‰๏ธ om +โœก๏ธ star of David +โ˜ธ๏ธ wheel of dharma +โ˜ฏ๏ธ yin yang +โœ๏ธ latin cross +โ˜ฆ๏ธ orthodox cross +โ˜ช๏ธ star and crescent +โ˜ฎ๏ธ peace symbol +๐Ÿ•Ž menorah +๐Ÿ”ฏ dotted six-pointed star +โ™ˆ Aries +โ™‰ Taurus +โ™Š Gemini +โ™‹ Cancer +โ™Œ Leo +โ™ Virgo +โ™Ž Libra +โ™ Scorpio +โ™ Sagittarius +โ™‘ Capricorn +โ™’ Aquarius +โ™“ Pisces +โ›Ž Ophiuchus +๐Ÿ”€ shuffle tracks button +๐Ÿ” repeat button +๐Ÿ”‚ repeat single button +โ–ถ๏ธ play button +โฉ fast-forward button +โญ๏ธ next track button +โฏ๏ธ play or pause button +โ—€๏ธ reverse button +โช fast reverse button +โฎ๏ธ last track button +๐Ÿ”ผ upwards button +โซ fast up button +๐Ÿ”ฝ downwards button +โฌ fast down button +โธ๏ธ pause button +โน๏ธ stop button +โบ๏ธ record button +โ๏ธ eject button +๐ŸŽฆ cinema +๐Ÿ”… dim button +๐Ÿ”† bright button +๐Ÿ“ถ antenna bars +๐Ÿ“ณ vibration mode +๐Ÿ“ด mobile phone off +โ™€๏ธ female sign +โ™‚๏ธ male sign +โšง๏ธ transgender symbol +โœ–๏ธ multiply +โž• plus +โž– minus +โž— divide +๐ŸŸฐ heavy equals sign +โ™พ๏ธ infinity +โ€ผ๏ธ double exclamation mark +โ‰๏ธ exclamation question mark +โ“ red question mark +โ” white question mark +โ• white exclamation mark +โ— red exclamation mark +ใ€ฐ๏ธ wavy dash +๐Ÿ’ฑ currency exchange +๐Ÿ’ฒ heavy dollar sign +โš•๏ธ medical symbol +โ™ป๏ธ recycling symbol +โšœ๏ธ fleur-de-lis +๐Ÿ”ฑ trident emblem +๐Ÿ“› name badge +๐Ÿ”ฐ Japanese symbol for beginner +โญ• hollow red circle +โœ… check mark button +โ˜‘๏ธ check box with check +โœ”๏ธ check mark +โŒ cross mark +โŽ cross mark button +โžฐ curly loop +โžฟ double curly loop +ใ€ฝ๏ธ part alternation mark +โœณ๏ธ eight-spoked asterisk +โœด๏ธ eight-pointed star +โ‡๏ธ sparkle +ยฉ๏ธ copyright +ยฎ๏ธ registered +โ„ข๏ธ trade mark +#๏ธโƒฃ keycap: # +*๏ธโƒฃ keycap: * +0๏ธโƒฃ keycap: 0 +1๏ธโƒฃ keycap: 1 +2๏ธโƒฃ keycap: 2 +3๏ธโƒฃ keycap: 3 +4๏ธโƒฃ keycap: 4 +5๏ธโƒฃ keycap: 5 +6๏ธโƒฃ keycap: 6 +7๏ธโƒฃ keycap: 7 +8๏ธโƒฃ keycap: 8 +9๏ธโƒฃ keycap: 9 +๐Ÿ”Ÿ keycap: 10 +๐Ÿ”  input latin uppercase +๐Ÿ”ก input latin lowercase +๐Ÿ”ข input numbers +๐Ÿ”ฃ input symbols +๐Ÿ”ค input latin letters +๐Ÿ…ฐ๏ธ A button (blood type) +๐Ÿ†Ž AB button (blood type) +๐Ÿ…ฑ๏ธ B button (blood type) +๐Ÿ†‘ CL button +๐Ÿ†’ COOL button +๐Ÿ†“ FREE button +โ„น๏ธ information +๐Ÿ†” ID button +โ“‚๏ธ circled M +๐Ÿ†• NEW button +๐Ÿ†– NG button +๐Ÿ…พ๏ธ O button (blood type) +๐Ÿ†— OK button +๐Ÿ…ฟ๏ธ P button +๐Ÿ†˜ SOS button +๐Ÿ†™ UP! button +๐Ÿ†š VS button +๐Ÿˆ Japanese โ€œhereโ€ button +๐Ÿˆ‚๏ธ Japanese โ€œservice chargeโ€ button +๐Ÿˆท๏ธ Japanese โ€œmonthly amountโ€ button +๐Ÿˆถ Japanese โ€œnot free of chargeโ€ button +๐Ÿˆฏ Japanese โ€œreservedโ€ button +๐Ÿ‰ Japanese โ€œbargainโ€ button +๐Ÿˆน Japanese โ€œdiscountโ€ button +๐Ÿˆš Japanese โ€œfree of chargeโ€ button +๐Ÿˆฒ Japanese โ€œprohibitedโ€ button +๐Ÿ‰‘ Japanese โ€œacceptableโ€ button +๐Ÿˆธ Japanese โ€œapplicationโ€ button +๐Ÿˆด Japanese โ€œpassing gradeโ€ button +๐Ÿˆณ Japanese โ€œvacancyโ€ button +ใŠ—๏ธ Japanese โ€œcongratulationsโ€ button +ใŠ™๏ธ Japanese โ€œsecretโ€ button +๐Ÿˆบ Japanese โ€œopen for businessโ€ button +๐Ÿˆต Japanese โ€œno vacancyโ€ button +๐Ÿ”ด red circle +๐ŸŸ  orange circle +๐ŸŸก yellow circle +๐ŸŸข green circle +๐Ÿ”ต blue circle +๐ŸŸฃ purple circle +๐ŸŸค brown circle +โšซ black circle +โšช white circle +๐ŸŸฅ red square +๐ŸŸง orange square +๐ŸŸจ yellow square +๐ŸŸฉ green square +๐ŸŸฆ blue square +๐ŸŸช purple square +๐ŸŸซ brown square +โฌ› black large square +โฌœ white large square +โ—ผ๏ธ black medium square +โ—ป๏ธ white medium square +โ—พ black medium-small square +โ—ฝ white medium-small square +โ–ช๏ธ black small square +โ–ซ๏ธ white small square +๐Ÿ”ถ large orange diamond +๐Ÿ”ท large blue diamond +๐Ÿ”ธ small orange diamond +๐Ÿ”น small blue diamond +๐Ÿ”บ red triangle pointed up +๐Ÿ”ป red triangle pointed down +๐Ÿ’  diamond with a dot +๐Ÿ”˜ radio button +๐Ÿ”ณ white square button +๐Ÿ”ฒ black square button +๐Ÿ chequered flag +๐Ÿšฉ triangular flag +๐ŸŽŒ crossed flags +๐Ÿด black flag +๐Ÿณ๏ธ white flag +๐Ÿ‡ฆ๐Ÿ‡จ flag: Ascension Island +๐Ÿ‡ฆ๐Ÿ‡ฉ flag: Andorra +๐Ÿ‡ฆ๐Ÿ‡ช flag: United Arab Emirates +๐Ÿ‡ฆ๐Ÿ‡ซ flag: Afghanistan +๐Ÿ‡ฆ๐Ÿ‡ฌ flag: Antigua & Barbuda +๐Ÿ‡ฆ๐Ÿ‡ฎ flag: Anguilla +๐Ÿ‡ฆ๐Ÿ‡ฑ flag: Albania +๐Ÿ‡ฆ๐Ÿ‡ฒ flag: Armenia +๐Ÿ‡ฆ๐Ÿ‡ด flag: Angola +๐Ÿ‡ฆ๐Ÿ‡ถ flag: Antarctica +๐Ÿ‡ฆ๐Ÿ‡ท flag: Argentina +๐Ÿ‡ฆ๐Ÿ‡ธ flag: American Samoa +๐Ÿ‡ฆ๐Ÿ‡น flag: Austria +๐Ÿ‡ฆ๐Ÿ‡บ flag: Australia +๐Ÿ‡ฆ๐Ÿ‡ผ flag: Aruba +๐Ÿ‡ฆ๐Ÿ‡ฝ flag: ร…land Islands +๐Ÿ‡ฆ๐Ÿ‡ฟ flag: Azerbaijan +๐Ÿ‡ง๐Ÿ‡ฆ flag: Bosnia & Herzegovina +๐Ÿ‡ง๐Ÿ‡ง flag: Barbados +๐Ÿ‡ง๐Ÿ‡ฉ flag: Bangladesh +๐Ÿ‡ง๐Ÿ‡ช flag: Belgium +๐Ÿ‡ง๐Ÿ‡ซ flag: Burkina Faso +๐Ÿ‡ง๐Ÿ‡ฌ flag: Bulgaria +๐Ÿ‡ง๐Ÿ‡ญ flag: Bahrain +๐Ÿ‡ง๐Ÿ‡ฎ flag: Burundi +๐Ÿ‡ง๐Ÿ‡ฏ flag: Benin +๐Ÿ‡ง๐Ÿ‡ฑ flag: St. Barthรฉlemy +๐Ÿ‡ง๐Ÿ‡ฒ flag: Bermuda +๐Ÿ‡ง๐Ÿ‡ณ flag: Brunei +๐Ÿ‡ง๐Ÿ‡ด flag: Bolivia +๐Ÿ‡ง๐Ÿ‡ถ flag: Caribbean Netherlands +๐Ÿ‡ง๐Ÿ‡ท flag: Brazil +๐Ÿ‡ง๐Ÿ‡ธ flag: Bahamas +๐Ÿ‡ง๐Ÿ‡น flag: Bhutan +๐Ÿ‡ง๐Ÿ‡ป flag: Bouvet Island +๐Ÿ‡ง๐Ÿ‡ผ flag: Botswana +๐Ÿ‡ง๐Ÿ‡พ flag: Belarus +๐Ÿ‡ง๐Ÿ‡ฟ flag: Belize +๐Ÿ‡จ๐Ÿ‡ฆ flag: Canada +๐Ÿ‡จ๐Ÿ‡จ flag: Cocos (Keeling) Islands +๐Ÿ‡จ๐Ÿ‡ฉ flag: Congo - Kinshasa +๐Ÿ‡จ๐Ÿ‡ซ flag: Central African Republic +๐Ÿ‡จ๐Ÿ‡ฌ flag: Congo - Brazzaville +๐Ÿ‡จ๐Ÿ‡ญ flag: Switzerland +๐Ÿ‡จ๐Ÿ‡ฎ flag: Cรดte dโ€™Ivoire +๐Ÿ‡จ๐Ÿ‡ฐ flag: Cook Islands +๐Ÿ‡จ๐Ÿ‡ฑ flag: Chile +๐Ÿ‡จ๐Ÿ‡ฒ flag: Cameroon +๐Ÿ‡จ๐Ÿ‡ณ flag: China +๐Ÿ‡จ๐Ÿ‡ด flag: Colombia +๐Ÿ‡จ๐Ÿ‡ต flag: Clipperton Island +๐Ÿ‡จ๐Ÿ‡ท flag: Costa Rica +๐Ÿ‡จ๐Ÿ‡บ flag: Cuba +๐Ÿ‡จ๐Ÿ‡ป flag: Cape Verde +๐Ÿ‡จ๐Ÿ‡ผ flag: Curaรงao +๐Ÿ‡จ๐Ÿ‡ฝ flag: Christmas Island +๐Ÿ‡จ๐Ÿ‡พ flag: Cyprus +๐Ÿ‡จ๐Ÿ‡ฟ flag: Czechia +๐Ÿ‡ฉ๐Ÿ‡ช flag: Germany +๐Ÿ‡ฉ๐Ÿ‡ฌ flag: Diego Garcia +๐Ÿ‡ฉ๐Ÿ‡ฏ flag: Djibouti +๐Ÿ‡ฉ๐Ÿ‡ฐ flag: Denmark +๐Ÿ‡ฉ๐Ÿ‡ฒ flag: Dominica +๐Ÿ‡ฉ๐Ÿ‡ด flag: Dominican Republic +๐Ÿ‡ฉ๐Ÿ‡ฟ flag: Algeria +๐Ÿ‡ช๐Ÿ‡ฆ flag: Ceuta & Melilla +๐Ÿ‡ช๐Ÿ‡จ flag: Ecuador +๐Ÿ‡ช๐Ÿ‡ช flag: Estonia +๐Ÿ‡ช๐Ÿ‡ฌ flag: Egypt +๐Ÿ‡ช๐Ÿ‡ญ flag: Western Sahara +๐Ÿ‡ช๐Ÿ‡ท flag: Eritrea +๐Ÿ‡ช๐Ÿ‡ธ flag: Spain +๐Ÿ‡ช๐Ÿ‡น flag: Ethiopia +๐Ÿ‡ช๐Ÿ‡บ flag: European Union +๐Ÿ‡ซ๐Ÿ‡ฎ flag: Finland +๐Ÿ‡ซ๐Ÿ‡ฏ flag: Fiji +๐Ÿ‡ซ๐Ÿ‡ฐ flag: Falkland Islands +๐Ÿ‡ซ๐Ÿ‡ฒ flag: Micronesia +๐Ÿ‡ซ๐Ÿ‡ด flag: Faroe Islands +๐Ÿ‡ซ๐Ÿ‡ท flag: France +๐Ÿ‡ฌ๐Ÿ‡ฆ flag: Gabon +๐Ÿ‡ฌ๐Ÿ‡ง flag: United Kingdom +๐Ÿ‡ฌ๐Ÿ‡ฉ flag: Grenada +๐Ÿ‡ฌ๐Ÿ‡ช flag: Georgia +๐Ÿ‡ฌ๐Ÿ‡ซ flag: French Guiana +๐Ÿ‡ฌ๐Ÿ‡ฌ flag: Guernsey +๐Ÿ‡ฌ๐Ÿ‡ญ flag: Ghana +๐Ÿ‡ฌ๐Ÿ‡ฎ flag: Gibraltar +๐Ÿ‡ฌ๐Ÿ‡ฑ flag: Greenland +๐Ÿ‡ฌ๐Ÿ‡ฒ flag: Gambia +๐Ÿ‡ฌ๐Ÿ‡ณ flag: Guinea +๐Ÿ‡ฌ๐Ÿ‡ต flag: Guadeloupe +๐Ÿ‡ฌ๐Ÿ‡ถ flag: Equatorial Guinea +๐Ÿ‡ฌ๐Ÿ‡ท flag: Greece +๐Ÿ‡ฌ๐Ÿ‡ธ flag: South Georgia & South Sandwich Islands +๐Ÿ‡ฌ๐Ÿ‡น flag: Guatemala +๐Ÿ‡ฌ๐Ÿ‡บ flag: Guam +๐Ÿ‡ฌ๐Ÿ‡ผ flag: Guinea-Bissau +๐Ÿ‡ฌ๐Ÿ‡พ flag: Guyana +๐Ÿ‡ญ๐Ÿ‡ฐ flag: Hong Kong SAR China +๐Ÿ‡ญ๐Ÿ‡ฒ flag: Heard & McDonald Islands +๐Ÿ‡ญ๐Ÿ‡ณ flag: Honduras +๐Ÿ‡ญ๐Ÿ‡ท flag: Croatia +๐Ÿ‡ญ๐Ÿ‡น flag: Haiti +๐Ÿ‡ญ๐Ÿ‡บ flag: Hungary +๐Ÿ‡ฎ๐Ÿ‡จ flag: Canary Islands +๐Ÿ‡ฎ๐Ÿ‡ฉ flag: Indonesia +๐Ÿ‡ฎ๐Ÿ‡ช flag: Ireland +๐Ÿ‡ฎ๐Ÿ‡ฑ flag: Israel +๐Ÿ‡ฎ๐Ÿ‡ฒ flag: Isle of Man +๐Ÿ‡ฎ๐Ÿ‡ณ flag: India +๐Ÿ‡ฎ๐Ÿ‡ด flag: British Indian Ocean Territory +๐Ÿ‡ฎ๐Ÿ‡ถ flag: Iraq +๐Ÿ‡ฎ๐Ÿ‡ท flag: Iran +๐Ÿ‡ฎ๐Ÿ‡ธ flag: Iceland +๐Ÿ‡ฎ๐Ÿ‡น flag: Italy +๐Ÿ‡ฏ๐Ÿ‡ช flag: Jersey +๐Ÿ‡ฏ๐Ÿ‡ฒ flag: Jamaica +๐Ÿ‡ฏ๐Ÿ‡ด flag: Jordan +๐Ÿ‡ฏ๐Ÿ‡ต flag: Japan +๐Ÿ‡ฐ๐Ÿ‡ช flag: Kenya +๐Ÿ‡ฐ๐Ÿ‡ฌ flag: Kyrgyzstan +๐Ÿ‡ฐ๐Ÿ‡ญ flag: Cambodia +๐Ÿ‡ฐ๐Ÿ‡ฎ flag: Kiribati +๐Ÿ‡ฐ๐Ÿ‡ฒ flag: Comoros +๐Ÿ‡ฐ๐Ÿ‡ณ flag: St. Kitts & Nevis +๐Ÿ‡ฐ๐Ÿ‡ต flag: North Korea +๐Ÿ‡ฐ๐Ÿ‡ท flag: South Korea +๐Ÿ‡ฐ๐Ÿ‡ผ flag: Kuwait +๐Ÿ‡ฐ๐Ÿ‡พ flag: Cayman Islands +๐Ÿ‡ฐ๐Ÿ‡ฟ flag: Kazakhstan +๐Ÿ‡ฑ๐Ÿ‡ฆ flag: Laos +๐Ÿ‡ฑ๐Ÿ‡ง flag: Lebanon +๐Ÿ‡ฑ๐Ÿ‡จ flag: St. Lucia +๐Ÿ‡ฑ๐Ÿ‡ฎ flag: Liechtenstein +๐Ÿ‡ฑ๐Ÿ‡ฐ flag: Sri Lanka +๐Ÿ‡ฑ๐Ÿ‡ท flag: Liberia +๐Ÿ‡ฑ๐Ÿ‡ธ flag: Lesotho +๐Ÿ‡ฑ๐Ÿ‡น flag: Lithuania +๐Ÿ‡ฑ๐Ÿ‡บ flag: Luxembourg +๐Ÿ‡ฑ๐Ÿ‡ป flag: Latvia +๐Ÿ‡ฑ๐Ÿ‡พ flag: Libya +๐Ÿ‡ฒ๐Ÿ‡ฆ flag: Morocco +๐Ÿ‡ฒ๐Ÿ‡จ flag: Monaco +๐Ÿ‡ฒ๐Ÿ‡ฉ flag: Moldova +๐Ÿ‡ฒ๐Ÿ‡ช flag: Montenegro +๐Ÿ‡ฒ๐Ÿ‡ซ flag: St. Martin +๐Ÿ‡ฒ๐Ÿ‡ฌ flag: Madagascar +๐Ÿ‡ฒ๐Ÿ‡ญ flag: Marshall Islands +๐Ÿ‡ฒ๐Ÿ‡ฐ flag: North Macedonia +๐Ÿ‡ฒ๐Ÿ‡ฑ flag: Mali +๐Ÿ‡ฒ๐Ÿ‡ฒ flag: Myanmar (Burma) +๐Ÿ‡ฒ๐Ÿ‡ณ flag: Mongolia +๐Ÿ‡ฒ๐Ÿ‡ด flag: Macao SAR China +๐Ÿ‡ฒ๐Ÿ‡ต flag: Northern Mariana Islands +๐Ÿ‡ฒ๐Ÿ‡ถ flag: Martinique +๐Ÿ‡ฒ๐Ÿ‡ท flag: Mauritania +๐Ÿ‡ฒ๐Ÿ‡ธ flag: Montserrat +๐Ÿ‡ฒ๐Ÿ‡น flag: Malta +๐Ÿ‡ฒ๐Ÿ‡บ flag: Mauritius +๐Ÿ‡ฒ๐Ÿ‡ป flag: Maldives +๐Ÿ‡ฒ๐Ÿ‡ผ flag: Malawi +๐Ÿ‡ฒ๐Ÿ‡ฝ flag: Mexico +๐Ÿ‡ฒ๐Ÿ‡พ flag: Malaysia +๐Ÿ‡ฒ๐Ÿ‡ฟ flag: Mozambique +๐Ÿ‡ณ๐Ÿ‡ฆ flag: Namibia +๐Ÿ‡ณ๐Ÿ‡จ flag: New Caledonia +๐Ÿ‡ณ๐Ÿ‡ช flag: Niger +๐Ÿ‡ณ๐Ÿ‡ซ flag: Norfolk Island +๐Ÿ‡ณ๐Ÿ‡ฌ flag: Nigeria +๐Ÿ‡ณ๐Ÿ‡ฎ flag: Nicaragua +๐Ÿ‡ณ๐Ÿ‡ฑ flag: Netherlands +๐Ÿ‡ณ๐Ÿ‡ด flag: Norway +๐Ÿ‡ณ๐Ÿ‡ต flag: Nepal +๐Ÿ‡ณ๐Ÿ‡ท flag: Nauru +๐Ÿ‡ณ๐Ÿ‡บ flag: Niue +๐Ÿ‡ณ๐Ÿ‡ฟ flag: New Zealand +๐Ÿ‡ด๐Ÿ‡ฒ flag: Oman +๐Ÿ‡ต๐Ÿ‡ฆ flag: Panama +๐Ÿ‡ต๐Ÿ‡ช flag: Peru +๐Ÿ‡ต๐Ÿ‡ซ flag: French Polynesia +๐Ÿ‡ต๐Ÿ‡ฌ flag: Papua New Guinea +๐Ÿ‡ต๐Ÿ‡ญ flag: Philippines +๐Ÿ‡ต๐Ÿ‡ฐ flag: Pakistan +๐Ÿ‡ต๐Ÿ‡ฑ flag: Poland +๐Ÿ‡ต๐Ÿ‡ฒ flag: St. Pierre & Miquelon +๐Ÿ‡ต๐Ÿ‡ณ flag: Pitcairn Islands +๐Ÿ‡ต๐Ÿ‡ท flag: Puerto Rico +๐Ÿ‡ต๐Ÿ‡ธ flag: Palestinian Territories +๐Ÿ‡ต๐Ÿ‡น flag: Portugal +๐Ÿ‡ต๐Ÿ‡ผ flag: Palau +๐Ÿ‡ต๐Ÿ‡พ flag: Paraguay +๐Ÿ‡ถ๐Ÿ‡ฆ flag: Qatar +๐Ÿ‡ท๐Ÿ‡ช flag: Rรฉunion +๐Ÿ‡ท๐Ÿ‡ด flag: Romania +๐Ÿ‡ท๐Ÿ‡ธ flag: Serbia +๐Ÿ‡ท๐Ÿ‡บ flag: Russia +๐Ÿ‡ท๐Ÿ‡ผ flag: Rwanda +๐Ÿ‡ธ๐Ÿ‡ฆ flag: Saudi Arabia +๐Ÿ‡ธ๐Ÿ‡ง flag: Solomon Islands +๐Ÿ‡ธ๐Ÿ‡จ flag: Seychelles +๐Ÿ‡ธ๐Ÿ‡ฉ flag: Sudan +๐Ÿ‡ธ๐Ÿ‡ช flag: Sweden +๐Ÿ‡ธ๐Ÿ‡ฌ flag: Singapore +๐Ÿ‡ธ๐Ÿ‡ญ flag: St. Helena +๐Ÿ‡ธ๐Ÿ‡ฎ flag: Slovenia +๐Ÿ‡ธ๐Ÿ‡ฏ flag: Svalbard & Jan Mayen +๐Ÿ‡ธ๐Ÿ‡ฐ flag: Slovakia +๐Ÿ‡ธ๐Ÿ‡ฑ flag: Sierra Leone +๐Ÿ‡ธ๐Ÿ‡ฒ flag: San Marino +๐Ÿ‡ธ๐Ÿ‡ณ flag: Senegal +๐Ÿ‡ธ๐Ÿ‡ด flag: Somalia +๐Ÿ‡ธ๐Ÿ‡ท flag: Suriname +๐Ÿ‡ธ๐Ÿ‡ธ flag: South Sudan +๐Ÿ‡ธ๐Ÿ‡น flag: Sรฃo Tomรฉ & Prรญncipe +๐Ÿ‡ธ๐Ÿ‡ป flag: El Salvador +๐Ÿ‡ธ๐Ÿ‡ฝ flag: Sint Maarten +๐Ÿ‡ธ๐Ÿ‡พ flag: Syria +๐Ÿ‡ธ๐Ÿ‡ฟ flag: Eswatini +๐Ÿ‡น๐Ÿ‡ฆ flag: Tristan da Cunha +๐Ÿ‡น๐Ÿ‡จ flag: Turks & Caicos Islands +๐Ÿ‡น๐Ÿ‡ฉ flag: Chad +๐Ÿ‡น๐Ÿ‡ซ flag: French Southern Territories +๐Ÿ‡น๐Ÿ‡ฌ flag: Togo +๐Ÿ‡น๐Ÿ‡ญ flag: Thailand +๐Ÿ‡น๐Ÿ‡ฏ flag: Tajikistan +๐Ÿ‡น๐Ÿ‡ฐ flag: Tokelau +๐Ÿ‡น๐Ÿ‡ฑ flag: Timor-Leste +๐Ÿ‡น๐Ÿ‡ฒ flag: Turkmenistan +๐Ÿ‡น๐Ÿ‡ณ flag: Tunisia +๐Ÿ‡น๐Ÿ‡ด flag: Tonga +๐Ÿ‡น๐Ÿ‡ท flag: Turkey +๐Ÿ‡น๐Ÿ‡น flag: Trinidad & Tobago +๐Ÿ‡น๐Ÿ‡ป flag: Tuvalu +๐Ÿ‡น๐Ÿ‡ผ flag: Taiwan +๐Ÿ‡น๐Ÿ‡ฟ flag: Tanzania +๐Ÿ‡บ๐Ÿ‡ฆ flag: Ukraine +๐Ÿ‡บ๐Ÿ‡ฌ flag: Uganda +๐Ÿ‡บ๐Ÿ‡ฒ flag: U.S. Outlying Islands +๐Ÿ‡บ๐Ÿ‡ณ flag: United Nations +๐Ÿ‡บ๐Ÿ‡ธ flag: United States +๐Ÿ‡บ๐Ÿ‡พ flag: Uruguay +๐Ÿ‡บ๐Ÿ‡ฟ flag: Uzbekistan +๐Ÿ‡ป๐Ÿ‡ฆ flag: Vatican City +๐Ÿ‡ป๐Ÿ‡จ flag: St. Vincent & Grenadines +๐Ÿ‡ป๐Ÿ‡ช flag: Venezuela +๐Ÿ‡ป๐Ÿ‡ฌ flag: British Virgin Islands +๐Ÿ‡ป๐Ÿ‡ฎ flag: U.S. Virgin Islands +๐Ÿ‡ป๐Ÿ‡ณ flag: Vietnam +๐Ÿ‡ป๐Ÿ‡บ flag: Vanuatu +๐Ÿ‡ผ๐Ÿ‡ซ flag: Wallis & Futuna +๐Ÿ‡ผ๐Ÿ‡ธ flag: Samoa +๐Ÿ‡ฝ๐Ÿ‡ฐ flag: Kosovo +๐Ÿ‡พ๐Ÿ‡ช flag: Yemen +๐Ÿ‡พ๐Ÿ‡น flag: Mayotte +๐Ÿ‡ฟ๐Ÿ‡ฆ flag: South Africa +๐Ÿ‡ฟ๐Ÿ‡ฒ flag: Zambia +๐Ÿ‡ฟ๐Ÿ‡ผ flag: Zimbabwe +๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ flag: England +๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ flag: Scotland +๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ flag: Wales diff --git a/.local/share/larbs/getkeys/calcurse b/.local/share/larbs/getkeys/calcurse @@ -0,0 +1,10 @@ + _ + ___ __ _| | ___ _ _ _ __ ___ ___ + / __/ _` | |/ __| | | | '__/ __|/ _ \ +| (_| (_| | | (__| |_| | | \__ \ __/ + \___\__,_|_|\___|\__,_|_| |___/\___| + +calcurse is the calendar and schedule manager. + tab - Switch from calendar to todo to appointments + h/j/k/l - Move left/down/up/right + Most other bindings are listed in the program. diff --git a/.local/share/larbs/getkeys/mutt b/.local/share/larbs/getkeys/mutt @@ -0,0 +1,34 @@ + _ _ + _ __ ___ _ _| |_| |_ +| '_ ` _ \| | | | __| __| +| | | | | | |_| | |_| |_ +|_| |_| |_|\__,_|\__|\__| + +mutt is the email client. + j/k - Move down/up + d/u - Move down/up half page + gg - Move to top + v - View/download attachments + G - Move to last message + r - Reply + R - Reply all + S - Sync/save mailbox changes + D - Mark message for deletion + U - Unmark message for deletion + ctrl-u - Seek urls + ,, - Seek urls + ctrl-f - Search mail indexed with notmuch + ctrl-r - Mark all as read + l - Limit mail + o - Run quick sync with offlineimap + O - Run full sync with offlineimap + C - Copy a message to another mailbox + M - Move a message to another mailbox + B - Hide/reveal sidebar + ctrl-j/k - Move down/up on sidebar + ctrl-o - Open box selected in sidebar + gi - Go to inbox + gs - Go to sent mail + gd - Go to drafts + gS - Go to spam + i# - Go to a different account (# is the number of the account) diff --git a/.local/share/larbs/getkeys/ncmpcpp b/.local/share/larbs/getkeys/ncmpcpp @@ -0,0 +1,21 @@ + + _ __ ___ _ __ ___ _ __ ___ _ __ _ __ +| '_ \ / __| '_ ` _ \| '_ \ / __| '_ \| '_ \ +| | | | (__| | | | | | |_) | (__| |_) | |_) | +|_| |_|\___|_| |_| |_| .__/ \___| .__/| .__/ + |_| |_| |_| + +ncmpcpp is the music player. + h/j/k/l - Move left/down/up/right + d/u - Down/up page + a - Add song(s) to playlist + c - Clear playlist + g - Go to top + G - Go to bottom + p - Pause + m - Media library + f - Music sorted by directory structure + t - Tag editor + s - Search + v - Visualizer + P - Playlist diff --git a/.local/share/larbs/getkeys/newsboat b/.local/share/larbs/getkeys/newsboat @@ -0,0 +1,22 @@ + _ _ + _ __ _____ _____| |__ ___ __ _| |_ +| '_ \ / _ \ \ /\ / / __| '_ \ / _ \ / _` | __| +| | | | __/\ V V /\__ \ |_) | (_) | (_| | |_ +|_| |_|\___| \_/\_/ |___/_.__/ \___/ \__,_|\__| + +newsboat is the RSS reader. + j/k - Move down/up + l - Open entry + h/q - Back/quit + Q - Quit immediately + J/K - Previous/next feed + n - Next unread + N - Previous unread + a - Toggle article read/unread + A - Mark all as read + U - Show all URLs + ,, - Open main link with linkhandler + ,p - Pick which program to open link with + ,v - Open video link in mpv + ,w - Open link in w3m + ,c - Copy link to clipboard diff --git a/.local/share/larbs/getkeys/nsxiv b/.local/share/larbs/getkeys/nsxiv @@ -0,0 +1,14 @@ + _ __ _____ _(_)_ __ +| '_ \/ __\ \/ / \ \ / / +| | | \__ \> <| |\ V / +|_| |_|___/_/\_\_| \_/ +nsxiv is the image viewer. + h/j/k/l - Pan image + -/+ - Zoom out/in + Enter - Toggle thumbnail mode + f - Fullscreen + n/p - Previous/next image in list/directory + r - Reload image if changed + m - Mark/unmark image + w - Zoom to fit window + ctrl-x - Run external command (see ~/.config/nsxiv/exec/key-handler for options) diff --git a/.local/share/larbs/getkeys/zathura b/.local/share/larbs/getkeys/zathura @@ -0,0 +1,19 @@ + _ _ + ______ _| |_| |__ _ _ _ __ __ _ +|_ / _` | __| '_ \| | | | '__/ _` | + / / (_| | |_| | | | |_| | | | (_| | +/___\__,_|\__|_| |_|\__,_|_| \__,_| + +zathura is the pdf/djvu reader. + h/j/k/l - Move left/down/up/right in document + d/u - Down/up a half page + gg - Top of document + G - Bottom of document + f - Highlight URLS to follow + J/K - Zoom out/in + s - Zoom to fit width + a - Zoom to fit height + r - Reload document if changed + R - Rotate document + D - Toggle dual-page mode + p - Print document diff --git a/.local/share/larbs/ttymaps.kmap b/.local/share/larbs/ttymaps.kmap @@ -0,0 +1,2 @@ +keycode 1 = Caps_Lock +keycode 58 = Escape diff --git a/.local/share/thiemeyer_road_to_samarkand.jpg b/.local/share/thiemeyer_road_to_samarkand.jpg Binary files differ. diff --git a/.zprofile b/.zprofile @@ -0,0 +1 @@ +.config/shell/profile +\ No newline at end of file diff --git a/README.md b/README.md @@ -0,0 +1,4 @@ +Sway Deployment Script +====================== +Installs all needed dependencies +and deploys my dotfiles diff --git a/aurdeps.txt b/aurdeps.txt @@ -0,0 +1,6 @@ +nordic-theme +tessen +sing-box +sing-geoip-rule-set +sing-geosite-rule-set +gpu-screen-recorder diff --git a/dependencies.txt b/dependencies.txt @@ -0,0 +1,86 @@ +# hyprland +hyprland +swaybg +bemenu-wayland +pulsemixer +calcurse +bandwhich +xorg-xwayland +xdg-desktop-portal-hyprland + +# sound +pipewire +pipewire-pulse +wireplumber + +# fonts +ttf-sourcecodepro-nerd +adobe-source-sans-fonts +adobe-source-serif-fonts +ttf-nerd-fonts-symbols +ttf-font-awesome +noto-fonts-emoji +fontconfig + +yazi +mediainfo +bat +chafa + +# apps +foot +librewolf +wl-clipboard +neovim +grim +slurp +zsh +zsh-autosuggestions +mpv +yt-dlp +unzip +dunst +imv +newsboat +cmus +zathura +zathura-pdf-mupdf + +# utilities +gnupg +gnome-keyring +openssh-dinit +fakeroot +polkit +fastfetch +btop +libnotify +pkgconf +exfat-utils +transmission-cli +tesseract-data-eng +tesseract +fzf +jq + +#html and css lsp dep +npm + +man + +#tessen +gopass +which +wtype +#muttwizard +neomutt +isync +msmtp +cronie-dinit +lynx + +# wayland native +qt6-wayland + +# minecraft beta +xorg-xrandr diff --git a/rice.sh b/rice.sh @@ -0,0 +1,178 @@ +#!/bin/sh +set -e +WORKDIRECTORY=$PWD + +if [ "$(id -u)" -ne 0 ] + then printf "The script has to be run as root.\n" + exit +fi + +PERMUSER="$(id -nu "1000")" + +id "$PERMUSER" > /dev/null 2>&1 || { echo "User $PERMUSER does not exist. Exiting."; exit 1; } + +DEPLIST="`sed -e 's/#.*$//' -e '/^$/d' dependencies.txt | tr '\n' ' '`" +pacman -Sy --noconfirm +pacman -S $DEPLIST --noconfirm + +usermod -aG seat,input,audio,video $PERMUSER +doas -u $PERMUSER cp -r "$WORKDIRECTORY"/.config /home/$PERMUSER +doas -u $PERMUSER cp -r "$WORKDIRECTORY"/.local /home/$PERMUSER +doas -u $PERMUSER cp -a "$WORKDIRECTORY"/.zprofile /home/$PERMUSER + +doas -u $PERMUSER mkdir -p /home/$PERMUSER/.config/git +doas -u $PERMUSER mkdir -p /home/$PERMUSER/.config/npm +doas -u $PERMUSER touch /home/$PERMUSER/.config/npm/npmrc +doas -u $PERMUSER mkdir -p /home/$PERMUSER/.cache/zsh +doas -u $PERMUSER mkdir -p /home/$PERMUSER/.local/share/themes +doas -u $PERMUSER mkdir -p /home/$PERMUSER/.local/share/icons + +cd "$WORKDIRECTORY" || exit +doas -u $PERMUSER git clone https://github.com/zdharma-continuum/fast-syntax-highlighting +mkdir -p /usr/share/zsh/plugins +cp -rf fast-syntax-highlighting /usr/share/zsh/plugins +cd "$WORKDIRECTORY" + +doas -u $PERMUSER mkdir -p /home/$PERMUSER/.ssh +doas -u $PERMUSER mkdir -p /home/$PERMUSER/.gnupg +doas -u $PERMUSER touch /home/$PERMUSER/.gnupg/gpg-agent.conf + +cat <<EOL >> /home/$PERMUSER/.gnupg/gpg-agent.conf +enable-ssh-support +pinentry-program /usr/bin/pinentry-gnome3 +default-cache-ttl 34560000 +max-cache-ttl 34560000 +EOL + +cat <<EOL >> /home/$PERMUSER/.config/npm/npmrc +prefix=\${XDG_DATA_HOME}/npm +cache=\${XDG_CACHE_HOME}/npm +init-module=\${XDG_CONFIG_HOME}/npm/config/npm-init.js +logs-dir=\${XDG_STATE_HOME}/npm/logs +EOL + +doas -u $PERMUSER find /home/$PERMUSER/.gnupg -type f -exec chmod 600 {} \; +doas -u $PERMUSER find /home/$PERMUSER/.gnupg -type d -exec chmod 700 {} \; +doas -u $PERMUSER find /home/$PERMUSER/.ssh -type f -exec chmod 600 {} \; +doas -u $PERMUSER find /home/$PERMUSER/.ssh -type d -exec chmod 700 {} \; + +chsh -s /bin/zsh $PERMUSER + +mkdir -p /root/.config/nvim +cat <<EOL >> /root/.config/nvim/init.vim +set title +set clipboard+=unnamedplus +set relativenumber +colorscheme vim +EOL + +# Make pacman colorful, concurrent downloads and Pacman eye-candy. +grep -q "ILoveCandy" /etc/pacman.conf || sed -i "/#VerbosePkgLists/a ILoveCandy" /etc/pacman.conf +sed -Ei "s/^#(ParallelDownloads).*/\1 = 5/;/^#Color$/s/#//" /etc/pacman.conf + +# Disable Pacman sandbox since kernel doesn't support landlock (only for custom kernels from my artix script) +sed -Ei "s/^#(DisableSandbox).*/\1/" /etc/pacman.conf + +# Use all cores for compilation. +sed -i "s/-j2/-j$(nproc)/;/^#MAKEFLAGS/s/^#//" /etc/makepkg.conf +# Use doas for Pacman authentification +sed -i 's/#PACMAN_AUTH=.*$/PACMAN_AUTH=(doas)/' /etc/makepkg.conf + +cat <<EOL >> /usr/share/libalpm/hooks/statusbar.hook +[Trigger] +Operation = Upgrade +Type = Package +Target = * + +[Action] +Description = Updating statusbar... +When = PostTransaction +Exec = /usr/bin/pkill -RTMIN+8 waybar +EOL + + +cat <<EOL >> /etc/pacman.d/hooks/sing-box.hook +[Trigger] +Type = Package +Operation = Install +Operation = Upgrade +Target = sing-box + +[Action] +Description = Setting rights for sing-box... +When = PostTransaction +Exec = /usr/bin/setcap cap_net_admin=ep /usr/sbin/sing-box +EOL + +doas -u $PERMUSER git clone https://aur.archlinux.org/paru.git +cd paru +doas -u $PERMUSER makepkg -csi --noconfirm +cd "$WORKDIRECTORY" +DEPLIST="`sed -e 's/#.*$//' -e '/^$/d' aurdeps.txt | tr '\n' ' '`" +doas -u $PERMUSER paru -S $DEPLIST --noconfirm +doas -u $PERMUSER dbus-launch gsettings set org.gnome.desktop.interface gtk-theme "Nordic" +doas -u $PERMUSER dbus-launch gsettings set org.gnome.desktop.wm.preferences theme "Nordic" +doas -u $PERMUSER dbus-launch gsettings set org.gnome.desktop.wm.preferences button-layout 'appmenu' +doas -u $PERMUSER dbus-launch gsettings set org.gnome.desktop.interface font-name "Sans 11" +cd .. +rm -rf swaydots +rm -rf paru +rm -rf go + +dinitctl enable cronie +echo "*/10 * * * * /home/$PERMUSER/.local/bin/cron/newsup\n*/30 * * * * /home/$PERMUSER/.local/bin/cron/checkup\n*/10 * * * * /usr/local/bin/mailsync" | doas -u $PERMUSER crontab - + +doas -u $PERMUSER git clone https://github.com/lukesmithxyz/mutt-wizard /home/$PERMUSER/mutt-wizard +cd /home/$PERMUSER/mutt-wizard +make install + +cd /home/$PERMUSER +doas -u $PERMUSER git clone https://git.awy.one/automated-librewolf +cd automated-librewolf +doas -u $PERMUSER ./configure_librewolf.sh +cd /home/$PERMUSER +rm -rf automated-librewolf +rm -rf mutt-wizard + +# MPV +zip_url=https://github.com/tomasklaen/uosc/releases/latest/download/uosc.zip +conf_url=https://github.com/tomasklaen/uosc/releases/latest/download/uosc.conf +thumbfastlua_url=https://raw.githubusercontent.com/po5/thumbfast/refs/heads/master/thumbfast.lua +thumbfastconf_url=https://raw.githubusercontent.com/po5/thumbfast/refs/heads/master/thumbfast.conf +sponsorblock_url=https://codeberg.org/jouni/mpv_sponsorblock_minimal/raw/branch/master/sponsorblock_minimal.lua +zip_file=/tmp/uosc.zip +config_dir="/home/$PERMUSER/.config/mpv" +scriptopts_dir="$config_dir/script-opts" +conf_file="$scriptopts_dir/uosc.conf" + +echo "Downloading archive..." +doas -u $PERMUSER curl -Ls -o $zip_file $zip_url || abort "Couldn't download: $zip_url" +echo "Extracting archive..." +doas -u $PERMUSER unzip -qod $config_dir $zip_file || abort "Couldn't extract: $zip_file" +echo "Deleting archive..." +rm -f $zip_file || echo "Couldn't delete: $zip_file" + +doas -u $PERMUSER mkdir -p $scriptopts_dir || echo "Couldn't create: $scriptopts_dir" +doas -u $PERMUSER curl -Ls -o $conf_file $conf_url || echo "Couldn't download: $conf_url" + +# thumbfast +doas -u "$PERMUSER" curl -Ls -o "$config_dir/scripts/thumbfast.lua" $thumbfastlua_url || echo "Couldn't download: $thumbfastlua_url" +doas -u "$PERMUSER" curl -Ls -o "$scriptopts_dir/thumbfast.conf" $thumbfastconf_url || echo "Couldn't download: $thumbfastconf_url" +sed -Ei "s/(network).*/\1=yes/" "$scriptopts_dir/thumbfast.conf" + +# sponsorblock +doas -u "$PERMUSER" curl -Ls -o "$config_dir/scripts/sponsorblock_minimal.lua" $sponsorblock_url || echo "Couldn't download: $sponsorblock_url" + +# for mutt-wizard to work with gopass +ln -s /bin/gopass /bin/pass + +# nvchad +doas -u "$PERMUSER" git clone https://git.awy.one/nvchad /home/"$PERMUSER"/.config/nvim +rm -rf /home/"$PERMUSER"/.config/nvim/.git + +# pam +sed -i '/auth[[:space:]]*include[[:space:]]*system-local-login/a auth optional pam_gnome_keyring.so' /etc/pam.d/login +sed -i '/session[[:space:]]*include[[:space:]]*system-local-login/a session optional pam_gnome_keyring.so auto_start' /etc/pam.d/login +echo "password optional pam_gnome_keyring.so" >> /etc/pam.d/passwd + +echo "Your linux is riced!"