commit d4d48ef96d09003500b61c7ce7ba764980393dae Author: opal Date: Thu Apr 17 18:00:15 2025 -0700 first commit diff --git a/.config/alacritty/alacritty.toml b/.config/alacritty/alacritty.toml new file mode 100644 index 0000000..0e5897e --- /dev/null +++ b/.config/alacritty/alacritty.toml @@ -0,0 +1,21 @@ +[env] +TERM = "xterm-256color" + +[font] +size = 16 + +[font.normal] +family = "Monospace" +style = "Regular" + +[font.offset] +x = 0 +y = 0 + +[window] +opacity = 0.97 + + +[general] +import = ["/home/opal/.config/alacritty/theme.toml"] + diff --git a/.config/alacritty/theme.toml b/.config/alacritty/theme.toml new file mode 100644 index 0000000..01cc0d0 --- /dev/null +++ b/.config/alacritty/theme.toml @@ -0,0 +1,28 @@ +# Colors (Nord) + +# Default colors +[colors.primary] +background = '#2E3440' +foreground = '#D8DEE9' + +# Normal colors +[colors.normal] +black = '#3B4252' +red = '#BF616A' +green = '#A3BE8C' +yellow = '#EBCB8B' +blue = '#81A1C1' +magenta = '#B48EAD' +cyan = '#88C0D0' +white = '#E5E9F0' + +# Bright colors +[colors.bright] +black = '#4C566A' +red = '#BF616A' +green = '#A3BE8C' +yellow = '#EBCB8B' +blue = '#81A1C1' +magenta = '#B48EAD' +cyan = '#8FBCBB' +white = '#ECEFF4' diff --git a/.config/dunst/dunstrc b/.config/dunst/dunstrc new file mode 100644 index 0000000..2b8118f --- /dev/null +++ b/.config/dunst/dunstrc @@ -0,0 +1,49 @@ +[global] +monitor = 0 +follow = keyboard +indicate_hidden = yes +shrink = no +separator_height = 0 +padding = 16 +horizontal_padding = 24 +frame_width = 2 +sort = no +idle_threshold = 120 +font = Noto Sans 8 +line_height = 4 +markup = full +format = "%s\n%b" +alignment = left +show_age_threshold = 60 +word_wrap = yes +ignore_newline = no +stack_duplicates = false +hide_duplicate_count = yes +show_indicators = no +icon_position = off +sticky_history = yes +history_length = 20 +browser = /usr/bin/icecat -new-tab +always_run_script = true +title = Dunst +class = Dunst +close = ctrl+space +close_all = ctrl+shift+space +history = ctrl+grave +context = ctrl+shift+period + +[urgency_low] +background = "#2f343f" +foreground = "#d8dee8" +timeout = 2 + +[urgency_normal] +background = "#2f343f" +foreground = "#d8dee8" +timeout = 4 + +[urgency_critical] +background = "#2f343f" +foreground = "#d8dee8" +frame_color = "#bf616a" +timeout = 0 diff --git a/.config/foot/foot.ini b/.config/foot/foot.ini new file mode 100644 index 0000000..59356e3 --- /dev/null +++ b/.config/foot/foot.ini @@ -0,0 +1,3 @@ +[main] +font=monospace:size=18 +term=xterm-256color diff --git a/.config/gtk-3.0/settings.ini b/.config/gtk-3.0/settings.ini new file mode 100644 index 0000000..2c39348 --- /dev/null +++ b/.config/gtk-3.0/settings.ini @@ -0,0 +1,2 @@ +[Settings] +gtk-icon-theme-name = Papirus diff --git a/.config/lf/lfrc b/.config/lf/lfrc new file mode 100644 index 0000000..aadeb44 --- /dev/null +++ b/.config/lf/lfrc @@ -0,0 +1,7 @@ +# Basic vars +set ifs "\n" +set scrolloff 10 +set icons +set period 1 +set hiddenfiles ".*:*.aux:*.log:*.bbl:*.bcf:*.blg:*.run.xml" +set autoquit true diff --git a/.config/newsboat/config b/.config/newsboat/config new file mode 100644 index 0000000..996d187 --- /dev/null +++ b/.config/newsboat/config @@ -0,0 +1,46 @@ +#show-read-feeds no +auto-reload yes + +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 + +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 + +#urls-source "ttrss" +#ttrss-url "https://rss.opal.sh/tt-rss/" +#ttrss-login "ryan" +#ttrss-passwordeval "gopass show -o self-hosted/rss.opal.sh" diff --git a/.config/newsboat/urls b/.config/newsboat/urls new file mode 100644 index 0000000..b0d41af --- /dev/null +++ b/.config/newsboat/urls @@ -0,0 +1,18 @@ +---Reddit--- +https://www.reddit.com/r/stupidpol/.rss +---News--- +https://thegrayzone.com/rss +https://multipolarista.com/rss +https://www.telesurenglish.net/feed/ +https://theintercept.com/feed/ +---Tech--- +https://landchad.net/rss.xml +https://videos.lukesmith.xyz/feeds/videos.xml?videoChannelId=2 "~Luke Smith (Videos)" +https://pluralistic.net/feed/ +https://blog.privacyguides.org/feed_rss_created.xml +---Podcasts--- +https://feeds.simplecast.com/dCXMIpJz "Last Podcast On the Left" +http://feeds.soundcloud.com/users/soundcloud:users:572119410/sounds.rss podcasts "Fall of Civilziation" +https://feeds.feedburner.com/dancarlin/history?format=xml podcasts "Hardcore History" + +https://www.darkdescentrecords.com/shop/shop/rss diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..6d703a4 --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,8 @@ +-- ~/.config/nvim/init.lua +vim.o.number = true +vim.o.relativenumber = true +vim.o.clipboard = "unnamedplus" + +vim.cmd [[highlight Normal guibg=NONE ctermbg=NONE]] +vim.cmd [[highlight NormalNC guibg=NONE ctermbg=NONE]] +vim.cmd [[highlight EndOfBuffer guibg=NONE ctermbg=NONE]] diff --git a/.config/qutebrowser/autoconfig.yml b/.config/qutebrowser/autoconfig.yml new file mode 100644 index 0000000..7d5fd47 --- /dev/null +++ b/.config/qutebrowser/autoconfig.yml @@ -0,0 +1,167 @@ +# If a config.py file exists, this file is ignored unless it's explicitly loaded +# via config.load_autoconfig(). For more information, see: +# https://github.com/qutebrowser/qutebrowser/blob/main/doc/help/configuring.asciidoc#loading-autoconfigyml +# DO NOT edit this file by hand, qutebrowser will overwrite it. +# Instead, create a config.py - see :help for details. + +config_version: 2 +settings: + content.blocking.method: + global: both + content.javascript.enabled: + '*://*.01.emailinboundprocessing.eu/*': true + '*://*.127.0.0.1/*': true + '*://*.4chanlit.fandom.com/*': true + '*://*.account.proton.me/*': true + '*://*.account.protonvpn.com/*': true + '*://*.ancientdead.com/*': true + '*://*.app.netdata.cloud/*': true + '*://*.app.simplelogin.io/*': true + '*://*.askubuntu.com/*': true + '*://*.babeground.com/*': true + '*://*.babeground.net/*': true + '*://*.babegrounds.live/*': true + '*://*.bandcamp.com/*': true + '*://*.chmodcommand.com/*': true + '*://*.codeberg.org/*': true + '*://*.confluence.atg-corp.com/*': false + '*://*.crontab.guru/*': true + '*://*.customer.xfinity.com/*': true + '*://*.demo.uptime.kuma.pet/*': true + '*://*.docs.google.com/*': true + '*://*.drop.download/*': true + '*://*.duckduckgo.com/*': true + '*://*.features.jellyfin.org/*': true + '*://*.flathub.org/*': true + '*://*.fleet.linuxserver.io/*': true + '*://*.fmovies.to/*': true + '*://*.framatube.org/*': true + '*://*.get.adobe.com/*': true + '*://*.github.com/*': true + '*://*.gitlab.com/*': true + '*://*.goauthentik.io/*': true + '*://*.greyzone.com/*': true + '*://*.heretic.camp/*': true + '*://*.html.duckduckgo.com/*': true + '*://*.hub.docker.com/*': true + '*://*.id.atlassian.com/*': true + '*://*.idcs-3359adb31e35415e8c1729c5c8098c6d.identity.oraclecloud.com/*': true + '*://*.imgflip.com/*': true + '*://*.inv.odyssey346.dev/*': true + '*://*.jf.opal.sh/*': true + '*://*.jira.atg-corp.com/*': true + '*://*.layoffs.fyi/*': true + '*://*.learningnetwork.cisco.com/*': true + '*://*.listen.20buckspin.com/*': true + '*://*.localhost/*': true + '*://*.login.seattle.gov/*': true + '*://*.login.xfinity.com/*': true + '*://*.looking-glass.io/*': true + '*://*.lotrproject.com/*': true + '*://*.mail.proton.me/*': true + '*://*.main.realsecure.flyingcroc.net/*': true + '*://*.metalodyssey.8merch.com/*': true + '*://*.my.uscis.gov/*': true + '*://*.my.vultr.com/*': true + '*://*.myaccount.standingstonegames.com/*': true + '*://*.myutilities.seattle.gov/*': true + '*://*.nagios.realsecure.flyingcroc.net/*': true + '*://*.netbox.realsecure.flyingcroc.net/*': true + '*://*.online.adp.com/*': true + '*://*.onlinebanking.becu.org/*': true + '*://*.onyxboox.com/*': true + '*://*.openscrobbler.com/*': true + '*://*.payments.xfinity.com/*': true + '*://*.portainer.opal.sh/*': true + '*://*.protesilaos.com/*': true + '*://*.proton.me/*': true + '*://*.rateyourmusic.com/*': true + '*://*.register.be.xfinity.com/*': false + '*://*.reverb.com/*': true + '*://*.sack.realsecure.flyingcroc.net/*': true + '*://*.search.brave.com/*': true + '*://*.seattle.bibliocommons.com/*': true + '*://*.seattle.craigslist.org/*': true + '*://*.shop.bulletproof.com/*': true + '*://*.spl.overdrive.com/*': true + '*://*.stackoverflow.com/*': true + '*://*.stash.atg-corp.com/*': true + '*://*.superuser.com/*': true + '*://*.support-acquia.force.com/*': true + '*://*.thecirclemusic.gr/*': true + '*://*.thegrayzone.com/*': true + '*://*.translate.google.com/*': true + '*://*.twitter.com/*': true + '*://*.unix.stackexchange.com/*': true + '*://*.uploadev.org/*': true + '*://*.utilities-self-service.ebill.seattle.gov/*': true + '*://*.veganmenshoes.com/*': true + '*://*.vid.puffyan.us/*': true + '*://*.wooddove.fciis.net/*': true + '*://*.www.20buckspin.com/*': true + '*://*.www.airplane.dev/*': true + '*://*.www.amazon.com/*': true + '*://*.www.astound.com/*': true + '*://*.www.budgetbytes.com/*': true + '*://*.www.calculator.net/*': true + '*://*.www.carhartt.com/*': true + '*://*.www.dancarlin.com/*': true + '*://*.www.drmartens.com/*': true + '*://*.www.duluthtrading.com/*': true + '*://*.www.easyime.com/*': true + '*://*.www.ebay.com/*': true + '*://*.www.filson.com/*': true + '*://*.www.foodnetwork.com/*': true + '*://*.www.geoguessr.com/*': true + '*://*.www.goodreads.com/*': true + '*://*.www.google.com/*': true + '*://*.www.harddrivesdirect.com/*': true + '*://*.www.knoll.com/*': true + '*://*.www.kobo.com/*': true + '*://*.www.last.fm/*': true + '*://*.www.lastpodcastontheleft.com/*': true + '*://*.www.lotro.com/*': true + '*://*.www.metal-archives.com/*': true + '*://*.www.mmorpg.com/*': true + '*://*.www.moddb.com/*': true + '*://*.www.netaddictionrecovery.com/*': true + '*://*.www.nightshiftmerch.com/*': true + '*://*.www.openstreetmap.org/*': true + '*://*.www.patagonia.com/*': true + '*://*.www.paypal.com/*': true + '*://*.www.raspberrypi.com/*': true + '*://*.www.reddit.com/*': true + '*://*.www.seattle.gov/*': true + '*://*.www.startpage.com/*': true + '*://*.www.thisisclassicalguitar.com/*': true + '*://*.www.vegetarian-shoes.co.uk/*': true + '*://*.www.vultr.com/*': true + '*://*.www.wills-vegan-store.com/*': true + '*://*.www.xfinity.com/*': true + '*://*.www.youtube.com/*': true + '*://*.www.zillow.com/*': true + '*://chatgpt.com/*': true + '*://digital.fidelity.com/*': true + '*://gethomepage.dev/*': true + '*://git.opal.sh/*': true + '*://jf.opal.sh/*': true + '*://jsonformatter.curiousconcept.com/*': true + '*://lemmygrad.ml/*': true + '*://login.becu.org/*': true + '*://myaccounts.capitalone.com/*': true + '*://rateyourmusic.com/*': true + '*://revelationofdoom.com/*': true + '*://safereddit.com/*': true + '*://verified.capitalone.com/*': true + '*://wiki.alpinelinux.org/*': true + '*://www.duplicati.com/*': true + '*://www.fidelity.com/*': true + '*://www.newegg.com/*': true + '*://www.vitamix.com/*': true + '*://www.youtube.com/*': true + '*://yewtu.be/*': true + content.notifications.enabled: + https://jf.opal.sh: false + https://www.facebook.com: false + content.register_protocol_handler: + https://mail.proton.me#mailto=%25s: false diff --git a/.config/qutebrowser/bookmarks/urls b/.config/qutebrowser/bookmarks/urls new file mode 100644 index 0000000..e69de29 diff --git a/.config/qutebrowser/config.py b/.config/qutebrowser/config.py new file mode 100644 index 0000000..9a03b0c --- /dev/null +++ b/.config/qutebrowser/config.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 + +from PyQt6.QtCore import QUrl +from qutebrowser.api import interceptor + +def rewrite(request: interceptor.Request): + url = request.request_url + host = url.host() + + # Avoid redirect loops + if "reddit.com" in host and "safereddit.com" not in host: + new_url = QUrl("https://safereddit.com") + new_url.setPath(url.path()) + new_url.setQuery(url.query()) + request.redirect(new_url) + +#interceptor.register(rewrite) + +# Load existing settings made via :set +config.load_autoconfig() + +c.qt.highdpi = True +c.fonts.default_size = "15pt" +c.fonts.tabs.selected = "13pt default_family" +c.fonts.tabs.unselected = "13pt default_family" +c.zoom.default = "130%" +c.content.javascript.enabled = False +c.downloads.location.directory = "~/dls" +c.editor.command = ["alacritty", "-e", "nvim", "{}"] +c.editor.encoding = "utf-8" +c.auto_save.session = True +c.colors.webpage.preferred_color_scheme = "dark" + +# privacy +c.content.cookies.accept = "no-3rdparty" +c.content.webrtc_ip_handling_policy = "default-public-interface-only" +c.content.site_specific_quirks.enabled = False +c.content.headers.user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.79 Safari/537.36" + +config.bind("j", "scroll-px 0 100") +config.bind("k", "scroll-px 0 -100") +config.bind("K", "tab-next") +config.bind("J", "tab-prev") + +c.url.searchengines = { + "DEFAULT": "https://duckduckgo.com/?q={}", +} + +c.url.start_pages = ["https://start.duckduckgo.com"] + diff --git a/.config/qutebrowser/old-stylesheet.css b/.config/qutebrowser/old-stylesheet.css new file mode 100644 index 0000000..f215288 --- /dev/null +++ b/.config/qutebrowser/old-stylesheet.css @@ -0,0 +1,1712 @@ +* { + border-color: #657b83 !important; +} +a { + color: #268bd2 !important; +} +a:visited { + color: #6c71c4 !important; +} +body { + background-color: #002b36 !important; + color: #839496 !important; +} +html { + background-color: #002b36 !important; +} +input, +textarea { + background-color: #073642 !important; + color: #839496 !important; +} +blockquote, +pre { + background-color: #073642 !important; + color: #839496 !important; +} +.post-actions { + background-color: #073642 !important; +} +.textarea-wrapper { + background-color: #002b36 !important; + color: #839496 !important; +} +.search--adv { + background-color: #073642 !important; +} +.search__autocomplete > .acp-wrap { + background-color: #002b36 !important; +} +.search__autocomplete > .acp-wrap > .acp--highlight { + background-color: #073642 !important; + color: #eee8d5 !important; +} +.search__autocomplete > .acp-wrap strong { + color: #eee8d5 !important; +} +.site-wrapper > #header_wrapper { + background-color: #002b36 !important; +} +.site-wrapper > #header_wrapper > #header { + background-color: #002b36 !important; +} +.search--header { + background-color: #073642 !important; +} +.zci { + background-color: #073642 !important; + color: #839496 !important; +} +.tile--info { + background-color: #002b36 !important; +} +.tile--info__expand { + background-color: #586e75 !important; +} +.tile--c { + background-color: #586e75 !important; + color: #eee8d5 !important; +} +.module__text { + color: #839496 !important; +} +.about-info-box__heading { + color: #93a1a1 !important; +} +.result.highlight { + background-color: #073642 !important; +} +.result__snippet { + color: #839496 !important; +} +.result__snippet b { + color: #93a1a1 !important; +} +.btn--top { + background-color: #073642 !important; + color: #839496 !important; +} +.btn--top:hover { + background-color: #586e75 !important; +} +.result--sep--hr:before { + background-color: #586e75 !important; +} +* { + border-color: #073642 !important; +} +.news .alert .pull-info { + background-color: #083c4a !important; +} +.link-gray-dark, +.text-gray-dark { + color: #839496 !important; +} +.bg-white { + background-color: #002b36 !important; +} +.border { + border-color: #657b83 !important; +} +.breadcrumb .repo-root.js-repo-root a { + color: #268bd2 !important; +} +.breadcrumb strong.final-path { + color: #839496 !important; +} +button.ajax-pagination-btn { + background-color: #073642 !important; + color: #93a1a1 !important; +} +button.ajax-pagination-btn:hover { + background-color: #586e75 !important; +} +.comment-reactions .btn-link { + color: #839496 !important; +} +.comment-reactions .user-has-reacted { + background-color: #073642 !important; +} +.text-gray-dark { + color: #839496 !important; +} +.contrib-number { + color: #93a1a1 !important; +} +.counter { + background-color: #094352 !important; + color: #93a1a1 !important; +} +.diffstat-bar { + color: #839496 !important; +} +.file-header { + background-color: #073642 !important; +} +.file-history-tease .participation { + background-color: #002b36 !important; + color: #839496 !important; +} +.file-history-tease .participation .quickstat strong { + color: #839496 !important; +} +.file-history-tease .participation a { + color: #586e75 !important; +} +.file-history-tease .author a { + color: #839496 !important; +} +.file-history-tease-header { + background-color: #073642 !important; +} +.file-info-divider { + background-color: #586e75 !important; +} +.file-wrap { + color: #839496 !important; +} +.file-wrap * { + background-color: transparent !important; +} +.filter-bar { + background-color: #083c4a !important; +} +a.filter-item, +.filter-item { + color: #839496 !important; +} +a.filter-item.selected, +.filter-item.selected { + background-color: #073642 !important; + color: #93a1a1 !important; +} +a.filter-item:hover, +.filter-item:hover { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.flash { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.gh-header { + background-color: #002b36 !important; +} +.gh-header-number { + color: #586e75 !important; +} +.ellipsis-expander, +.hidden-text-expander a { + background-color: #073642 !important; +} +.issue-meta { + color: #586e75 !important; +} +.issues-listing a { + color: #839496 !important; +} +.muted-link { + color: #839496 !important; +} +.new-user-avatar-cta { + background-color: #073642 !important; + border-color: #586e75 !important; + color: #93a1a1 !important; +} +.overall-summary { + border-color: #586e75 !important; +} +.pinned-repo-item.border { + border-color: #586e75 !important; +} +.progress-bar { + background-color: #586e75 !important; +} +.simple-box { + background-color: #073642 !important; +} +.social-count { + background-color: #073642 !important; + border-color: #586e75 !important; + color: #93a1a1 !important; +} +.scope-badge { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.stats-switcher-wrapper { + background-color: #002b36 !important; +} +.stats-switcher-wrapper .numbers-summary li a { + color: #839496 !important; +} +.table-list-header-toggle .btn-link { + color: #586e75 !important; +} +.table-list-header-toggle .btn-link.selected { + color: #839496 !important; +} +.text-emphasized { + color: #93a1a1 !important; +} +.text-diff-added { + color: #859900 !important; +} +.text-diff-deleted { + color: #dc322f !important; +} +.avatar, +.timeline-comment-avatar { + filter: opacity(75%); +} +.blob-code { + background-color: #002b36 !important; + color: #839496 !important; +} +.blob-code-addition { + background-color: rgba(232,255,77,0.1) !important; +} +.blob-code-addition .x { + background-color: #647300 !important; + color: #c1cacb !important; +} +.blob-code-deletion { + background-color: rgba(220,50,47,0.2) !important; +} +.blob-code-deletion .x { + background-color: #721513 !important; + color: #c1cacb !important; +} +.blob-code-hunk { + background-color: #073642 !important; + border-color: #586e75 !important; +} +.blob-code-inner { + color: #839496 !important; +} +.blob-num { + background-color: #002b36 !important; + color: #586e75 !important; +} +.file { + color: #839496 !important; +} +.form-control { + background-color: #073642 !important; + border-color: #586e75 !important; +} +.pl-c { + color: #586e75 !important; +} +.pl-c1 { + color: #268bd2 !important; +} +.pl-e { + color: #b58900 !important; +} +.pl-en { + color: #268bd2 !important; +} +.pl-k { + color: #859900 !important; + font-weight: bold !important; +} +.pl-pds { + color: #2aa198 !important; +} +.pl-s { + color: #2aa198 !important; +} +.pl-smi { + color: #839496 !important; +} +.pl-v { + color: #859900 !important; + font-weight: bold !important; +} +.pl-mi1 { + color: #859900 !important; + background-color: transparent !important; +} +.pl-md { + color: #dc322f !important; + background-color: transparent !important; +} +.border-bottom, +.border-top { + border-color: #073642 !important; +} +.boxed-group * { + border-color: #586e75 !important; +} +.boxed-group article { + background-color: #002b36 !important; + color: #839496 !important; +} +.boxed-group > h3 { + background-color: #094352 !important; + color: #93a1a1 !important; +} +.more-repos { + background-color: #094352 !important; + box-shadow: inset 0 1px 0 #586e75 !important; +} +.boxed-group-inner { + background-color: #002b36 !important; +} +.branch-action-body { + background-color: #073642 !important; + border-color: #586e75 !important; +} +.branch-action-body div { + border-color: #586e75 !important; +} +.branch-action-state-clean .branch-action-icon { + background-color: #859900 !important; +} +.branch-action-state-dirty .branch-action-icon, +.branch-action-state-unstable .branch-action-icon, +.branch-action-state-unknown .branch-action-icon { + background-color: #b58900 !important; + color: #fff !important; +} +.text-shadow-light, +.branch-group-name, +.branch-summary { + color: #839496 !important; + text-shadow: none !important; +} +.branch-a-b-count .meter { + background-color: #b58900 !important; +} +.more-branches, +.branch-group-heading, +.branch-infobar, +.branch-name { + border-color: #586e75 !important; + background-color: #073642 !important; +} +.State, +.State:visited { + color: #fff !important; +} +.State--red { + background-color: #dc322f !important; + color: #002b36 !important; +} +.State--green { + background-color: #859900 !important; + color: #002b36 !important; +} +.select-menu-filters { + background-color: #083c4a !important; + color: #93a1a1 !important; +} +.js-select-menu-tab { + background-color: #094352 !important; + color: #93a1a1 !important; +} +.select-menu-tabs a.selected, +.select-menu-tab-nav.selected { + background-color: #586e75 !important; + color: #002b36 !important; +} +.signed-commit-header { + background-color: #002b36 !important; +} +.build-status-item { + background-color: #094352 !important; + color: #93a1a1 !important; +} +.build-status-item .build-status-details { + color: #268bd2 !important; +} +.capped-card h3 { + background-color: #094352 !important; +} +.capped-card h3 a { + color: #93a1a1 !important; +} +.capped-card-content { + background-color: #002b36 !important; +} +.capped-list th { + background-color: #083c4a !important; + color: #93a1a1 !important; +} +.capped-list tr:nth-child(2n) { + background-color: #073642 !important; +} +.commit, +.commit-meta, +.commit-icon .octicon, +.commit-group-title .octicon-git-commit { + background-color: #002b36 !important; +} +.commit *, +.commit-meta *, +.commit-icon .octicon *, +.commit-group-title .octicon-git-commit * { + border-color: #586e75 !important; +} +.commit-author { + color: #839496 !important; +} +.commit-author-section { + color: #839496 !important; +} +.commit-meta { + color: #586e75 !important; +} +.commit-meta .sha-block { + color: #586e75 !important; +} +.commit-meta .sha-block .sha { + color: #839496 !important; +} +.commit-ref, +code.commit-sha { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.commit-ref .user, +code.commit-sha .user { + color: #2aa198 !important; +} +.commit-branches *, +.commit-tease, +.commit-title { + background-color: rgba(190,255,255,0.2) !important; + border: none !important; +} +.commit-branches * *, +.commit-tease *, +.commit-title * { + color: #93a1a1 !important; +} +.commit-tease-contributors { + background-color: #073642 !important; +} +div.commit-branches, +div.commit.full-commit p.commit-title, +qul.branches-list { + background-color: #073642 !important; + color: #93a1a1 !important; +} +div.commit-branches *, +div.commit.full-commit p.commit-title *, +qul.branches-list * { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.commit-meta { + background-color: #073642 !important; + color: #839496 !important; +} +.commits-listing:before { + background-color: #073642 !important; +} +.full-commit { + background-color: #073642 !important; + border-color: #586e75 !important; +} +.full-commit * { + text-shadow: none !important; +} +.commit-desc pre { + background-color: transparent !important; + color: #839496 !important; +} +.commit.table-list-item { + border-color: #073642 !important; +} +.commit-meta.commit-author-section { + background-color: transparent !important; + color: #839496 !important; +} +.table-list-cell .commit-title { + background-color: transparent !important; + color: #839496 !important; +} +.completeness-indicator-success { + background-color: #859900 !important; +} +.completeness-indicator-problem { + background-color: #b58900 !important; + color: #fff !important; +} +.copyable-terminal { + background-color: #073642 !important; +} +.blankslate { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.comment-form-head.tabnav { + background-color: #002b36 !important; +} +.conversation-list-heading .inner { + background-color: #002b36 !important; +} +.discussion-item-closed .discussion-item-icon { + background-color: #dc322f !important; + color: #93a1a1 !important; +} +.discussion-item-icon { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.discussion-item-icon.octicon { + color: #93a1a1 !important; +} +.discussion-item-entity, +.discussion-item .renamed-was, +.discussion-item .renamed-is { + color: #93a1a1 !important; +} +.discussion-timeline:before { + background-color: #657b83 !important; +} +.discussion-timeline-actions { + background-color: #002b36 !important; +} +.drag-and-drop { + background-color: #073642 !important; +} +.new-discussion-timeline .closed-banner { + background-color: #657b83 !important; + border-color: #002b36 !important; +} +.timeline-comment { + background-color: #002b36 !important; + border-color: #586e75 !important; +} +.timeline-comment-header { + background-color: #073642 !important; +} +.timeline-comment-wrapper { + border-color: #002b36 !important; +} +.donut-chart > .pending { + fill: #b58900 !important; +} +.dropdown-divider { + background-color: #657b83 !important; +} +.dropdown-item { + color: #839496 !important; +} +.dropdown-item:hover { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.dropdown-menu { + background-color: #094352 !important; + color: #93a1a1 !important; + border-color: #657b83 !important; +} +.files * { + color: #839496 !important; +} +.files tbody tr { + border-color: #073642 !important; +} +.files tbody tr:nth-child(even) { + background-color: #00323f !important; +} +.files tbody tr:nth-child(odd) { + background-color: #002b36 !important; +} +.files tbody tr:hover * { + background-color: #094352 !important; +} +.btn { + background-image: linear-gradient(to bottom, #586e75, #073642) !important; + border-color: #586e75 !important; + color: #93a1a1 !important; +} +.btn:hover { + background-color: #083c4a !important; +} +.btn-primary, +.issues-listing .btn-primary { + background-color: #859900 !important; + background-image: linear-gradient(#859900, #424d00) !important; + color: #000 !important; + filter: opacity(62.5%); +} +.entry-title a { + color: #268bd2 !important; +} +.Header { + background-color: #083c4a !important; + border-bottom-color: #586e75 !important; +} +.Header a { + color: #93a1a1 !important; +} +.lang { + color: #93a1a1 !important; +} +.reponav-item, +.pagehead-tabs-item { + background-color: #073642 !important; + border-color: transparent !important; + color: #839496 !important; +} +.reponav-item:visited, +.pagehead-tabs-item:visited { + color: #839496 !important; +} +.reponav-item.selected, +.pagehead-tabs-item.selected { + background-color: #002b36 !important; + border-color: #dc322f #094352 transparent !important; +} +.site-footer-links * { + color: #839496 !important; +} +.Box-row--focus-gray.navigation-focus { + background-color: #083c4a !important; + color: #93a1a1 !important; +} +.js-directory-link { + color: #268bd2 !important; +} +.js-site-search-form input, +.js-chromeless-input-container { + background-color: #002b36 !important; + border-color: #586e75 !important; +} +a.label { + color: #000 !important; + filter: opacity(75%); +} +.notifications-list a { + color: #839496 !important; +} +.notifications-list li { + background-color: #002b36 !important; +} +.octicon-repo { + color: #93a1a1 !important; +} +.type-icon-state-closed { + color: rgba(255,54,43,0.65) !important; +} +.type-icon-state-merged { + color: #6c71c4 !important; +} +.type-icon-state-open { + color: rgba(205,212,0,0.65) !important; +} +.octicon-alert { + color: #fff !important; +} +.octicon-x { + color: #dc322f !important; +} +.octicon-check { + color: #859900 !important; +} +.octicon-primitive-dot { + color: #b58900 !important; +} +.octicon-clippy { + color: #93a1a1 !important; +} +.octicon-diff { + color: #fff !important; +} +.octicon-markdown { + color: #586e75 !important; +} +.orghead { + background-color: #073642 !important; + border-color: #657b83 !important; + border-bottom: 0px !important; + color: #93a1a1 !important; +} +.org-name { + color: #93a1a1 !important; +} +.pagehead.orghead { + background-color: #073642 !important; +} +.outline-box-highlighted { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.pagination .current { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.pagination .disabled { + background-color: #073642 !important; + color: #586e75 !important; +} +.pagination .disabled:hover { + background-color: #073642 !important; +} +.pagination .gap { + background-color: #073642 !important; + color: #586e75 !important; +} +.pagination a { + background-color: #073642 !important; + border-color: #002b36 !important; + color: #839496 !important; +} +.pagination a:hover { + background-color: #586e75 !important; + color: #002b36 !important; +} +.empty-cell, +.diffbar { + background-color: #002b36 !important; +} +.merge-status-item { + background-color: #094352 !important; +} +.merge-message { + background-color: #083c4a !important; +} +.pr-toolbar { + background-color: #002b36 !important; +} +.review-thread-reply { + background-color: #073642 !important; +} +.review-thread-reply .inline-comment-form { + background-color: #002b36 !important; +} +.merged.octicon, +.octicon-git-merge { + color: #6c71c4 !important; +} +.uploaded-files { + background-color: #002b36 !important; +} +.upload-progress { + background-color: #073642 !important; + box-shadow: 1px 0px 0px #073642 inset; +} +#readme .plain { + background-color: #002b36 !important; +} +.markdown-body, +.markdown-body table * { + background-color: #002b36 !important; + border-color: #657b83 !important; + color: #839496 !important; +} +.markdown-body a, +.markdown-body table * a { + color: #268bd2 !important; +} +.markdown-body code, +.markdown-body table * code, +.markdown-body pre, +.markdown-body table * pre { + background-color: #073642 !important; +} +.markdown-body hr, +.markdown-body table * hr { + background-color: #586e75 !important; +} +.markdown-body img, +.markdown-body table * img { + background-color: #002b36 !important; +} +.task-list-item.hovered { + background-color: #073642 !important; +} +.range-editor { + background-color: #073642 !important; +} +.compare-pr-placeholder { + background-color: #083c4a !important; +} +ul.comparison-list > li.title { + background-color: #094352 !important; +} +ul.comparison-list { + background-color: #083c4a !important; +} +.repository-description { + color: #839496 !important; +} +.repository-meta .edit-repository-meta label { + color: #839496 !important; +} +.pagehead.repohead { + background-color: #073642 !important; +} +.repository-content .RecentBranches { + background-color: #073642 !important; + border-color: #657b83 !important; +} +.repohead-details-container a { + color: #839496 !important; +} +.select-menu-modal { + border-color: #839496 !important; +} +.select-menu-modal * { + color: #839496 !important; +} +.select-menu-header, +.select-menu-header * { + background-color: #073642 !important; + color: #93a1a1 !important; + text-shadow: none !important; +} +.select-menu-item { + background-color: #002b36 !important; +} +.select-menu-item.navigation-focus, +.select-menu-item.navigation-focus.selected, +.select-menu-item.navigation-focus.select-menu-action, +.select-menu-item-text.navigation-focus { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.repository-sidebar { + background-color: #002b36 !important; +} +.thread-subscription-status { + background-color: #002b36 !important; +} +.sunken-menu { + background-image: linear-gradient(to right, #073642 0%, #002b36 8px) !important; + box-shadow: 1px 0px 0px #073642 inset; +} +.sunken-menu:before { + background-image: linear-gradient(#002b36, transparent) !important; +} +.sunken-menu:after { + background-image: linear-gradient(transparent, #002b36) !important; +} +.sunken-menu-item { + border-color: #002b36 !important; +} +.sunken-menu-item.selected { + background-color: #002b36 !important; + border-color: #094352 !important; + color: #93a1a1 !important; +} +.sunken-menu-item.selected:after { + background-color: #cb4b16 !important; +} +.sunken-menu-separator:before { + background-image: linear-gradient(to right, #073642 70%, #002b36 100%) !important; +} +.state { + color: #93a1a1 !important; +} +.state-closed { + background-color: #dc322f !important; +} +.state-open { + background-color: #859900 !important; +} +.subnav-item { + color: #839496 !important; +} +.subnav-item:hover { + background-color: #083c4a !important; +} +.subnav-item:visited { + color: #839496 !important; +} +.subnav-item.selected { + background-color: #073642 !important; +} +.subnav-links a:hover { + background-color: #073642 !important; +} +.subnav-search input { + border-color: #586e75 !important; +} +.right .tabnav-extra { + color: #586e75 !important; +} +a.tabnav-tab, +.tabnav-tab { + border-color: transparent !important; + color: #586e75 !important; +} +a.tabnav-tab.selected, +.tabnav-tab.selected { + background-color: #002b36 !important; + background-image: linear-gradient(#073642, #002b36) !important; + border-color: #657b83 !important; + color: #93a1a1 !important; +} +.table-list tr, +.table-list li { + background-color: #002b36 !important; +} +.table-list tr:hover, +.table-list li:hover { + background-color: #094352 !important; +} +.table-list-header { + background-color: #073642 !important; +} +.text-pending { + color: #b58900 !important; +} +.text-pending .octicon-primitive-dot { + color: #b58900 !important; +} +.text-red { + color: #dc322f !important; +} +.timeline-commits .commit-meta { + background-color: #002b36 !important; +} +.timeline-commits .commit-meta .commit-id { + color: #586e75 !important; +} +.topic-tag.topic-tag-link { + background-color: #073642 !important; + color: #839496 !important; +} +.underline-nav-item { + color: #839496 !important; +} +.underline-nav-item.selected { + border-bottom-color: #dc322f !important; + color: #839496 !important; +} +.user-profile-nav { + background-color: #073642 !important; + border-color: #657b83 !important; +} +.user-profile-sticky-bar:after { + background-color: #073642 !important; + border-color: #657b83 !important; +} +.graphs .area { + fill: #859900; +} +.summary-stats li .num { + color: #93a1a1 !important; +} +.viz { + background-color: #083c4a !important; +} +.facebox-popup { + color: #839496 !important; + background-color: #002b36 !important; +} +.facebox-popup .octicon { + color: #fff !important; +} +.facebox-popup .owner-select-target { + color: #839496 !important; + background-color: #073642 !important; +} +.facebox-popup .owner-select-target:hover { + background-color: #586e75 !important; +} +.suggester { + background-color: #094352 !important; +} +.suggester li.navigation-focus { + background-color: #586e75 !important; +} +.menu { + background-color: #073642 !important; +} +.menu-item.selected { + background-color: #094352 !important; +} +.menu-item:hover { + background-color: #586e75 !important; +} +.Box { + background-color: #002b36 !important; +} +.Box-header { + background-color: #073642 !important; +} +svg > * text { + color: #839496 !important; + fill: #839496 !important; +} +.insertions { + color: #859900 !important; +} +.deletions { + color: #dc322f !important; +} +.sfbgg { + background-color: #073642 !important; +} +.sbib_a { + background: linear-gradient(to bottom, #073642, #002b36) !important; +} +input#lst-ib, +#sb_ifc0.sbib_b, +#gs_taif0 { + background: transparent !important; +} +#lst-ib, +.sbsb_a { + background-color: #002b36 !important; +} +.kpbb { + background-image: linear-gradient(to bottom, #59a9e1, #268bd2) !important; +} +#hdtbSum { + background-color: #002b36 !important; +} +#hdtbMenus.hdtb-td-o { + background-color: #002b36 !important; +} +#hdtb-tls.hdtb-tl { + background-image: linear-gradient(to bottom, #002b36, #073642) !important; +} +#hdtb-tls.hdtb-tl.hdtb-tl-sel { + background-image: linear-gradient(to bottom, #073642, #002b36) !important; +} +#abar_button_opt.ab_button { + background: linear-gradient(to bottom, #002b36, #073642) !important; +} +#appbar { + background-color: #002b36 !important; +} +cite { + color: #859900 !important; +} +.ab_dropdown { + background-color: #002b36 !important; +} +div.crp { + background-color: #002b36 !important; +} +#fbar { + background-color: #073642 !important; +} +tr.Even { + background-color: #073642 !important; +} +.BigQuote { + background-color: #073642 !important; + color: #cb4b16 !important; +} +.Cat1HL { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.Cat2HL { + background-color: #094352 !important; +} +.Cat3HL { + background-color: #083c4a !important; +} +.FeatureByline { + background-color: #073642 !important; + border: none !important; +} +.Headline { + background-color: #094352 !important; +} +.QuotedText { + color: #6c71c4 !important; +} +DIV.GAByline { + background-color: #073642 !important; + border: none !important; +} +table.OddEven tr:nth-child(even) { + background-color: #00323f !important; +} +table.OddEven tr:nth-child(odd) { + background-color: #002b36 !important; +} +DIV.CommentBox { + border-color: #073642 !important; +} +DIV.CommentBox P.CommentTitle { + background-color: #094352 !important; +} +#menu, +.topnav-container { + background-color: #073642 !important; +} +.navmenu ul { + background-color: #073642 !important; +} +body * { + border-color: #094352 !important; +} +#content { + background-color: #002b36 !important; + color: #839496 !important; +} +#mw-head, +#mw-panel { + background-color: #073642 !important; + color: #93a1a1 !important; +} +#mw-head div.portal, +#mw-panel div.portal { + background-image: none !important; +} +#mw-head { + background-color: #073642 !important; + background-image: linear-gradient(to bottom, #002b36, #073642) !important; +} +#mw-panel, +#p-logo { + background-image: linear-gradient(to right, #002b36, #073642) !important; +} +div.vectorTabs { + background-image: linear-gradient(to bottom, #002b36, #073642) !important; +} +div.vectorTabs ul { + background-image: linear-gradient(to bottom, #002b36, #073642) !important; +} +div.vectorTabs ul li { + background-color: #073642 !important; + background-image: none !important; + padding: 0px 1px 0px 1px !important; +} +div.vectorTabs span { + background-color: #073642 !important; + background-image: linear-gradient(to bottom, #002b36, #073642) !important; +} +div.vectorTabs li.selected, +div.vectorTabs li.selected span { + background-color: transparent !important; + background-image: linear-gradient(to bottom, #073642, #002b36) !important; +} +.mw-wiki-logo { + filter: opacity(50%); +} +div#simpleSearch #searchInput { + background-color: #002b36 !important; + padding: 0.05em 0px 0.2em 0.2em !important; +} +.ambox, +.infobox, +#toc, +#toctitle, +.toclevel-1 { + background-color: #073642 !important; + border-color: #094352 !important; + color: #93a1a1 !important; +} +.catlinks { + background-color: #073642 !important; + border-color: #094352 !important; + color: #93a1a1 !important; +} +.navbox { + background-color: #073642 !important; + border-color: #094352 !important; + color: #93a1a1 !important; +} +.navbox .th, +.navbox .navbox-title { + background-color: #094352 !important; +} +.navbox-abovebelow, +th.navbox-group, +.navbox-subgroup, +.navbox-title { + background-color: #083c4a !important; +} +.navbox-even { + background-color: #002b36 !important; +} +h1, +h2, +h3, +h4, +h5, +h6 { + border-color: #094352 !important; + color: #93a1a1 !important; +} +code { + background-color: #094352 !important; + border-color: #094352 !important; + color: #93a1a1 !important; +} +div.thumbinner { + background-color: #073642 !important; + border-color: #094352 !important; +} +img { + filter: opacity(75%); +} +img.thumbimage { + border-color: #094352 !important; +} +.mw-body .external { + opacity: 0.5 !important; +} +table.wikitable { + background-color: #002b36 !important; + border-color: #094352 !important; + color: #839496 !important; +} +table.wikitable > * > tr > th { + background-color: #073642 !important; +} +table { + background-color: #002b36 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > table, +#hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > table { + background-color: #cb4b16 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) a, +#hnmain > tbody:nth-child(1) > tr:nth-child(1) a { + color: #000 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2), +#hnmain > tbody:nth-child(1) > tr:nth-child(2) { + background-color: #002b36 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(2) { + background-color: #002b36 !important; +} +.title a { + color: #839496 !important; +} +.title a:visited { + color: #586e75 !important; +} +a.storylink { + color: #93a1a1 !important; + font-weight: bold; +} +.sitestr { + color: #268bd2 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) { + background-color: #002b36 !important; +} +#hnmain .comhead { + color: #93a1a1 !important; +} +#hnmain .c00 { + color: #839496 !important; +} +#hnmain a.hnuser { + color: #b58900 !important; +} +#hnmain span.age a { + color: #586e75 !important; +} +.cdd { + color: rgba(255,54,43,0.65) !important; +} +.comment i { + color: #6c71c4 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(4) { + background-color: #002b36 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(4) > td:nth-child(1) > table:nth-child(2) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) { + background-color: #cb4b16 !important; +} +div#page div#header { + background-color: #002b36 !important; +} +div#page div#header a { + color: #6c71c4 !important; +} +.post { + background-color: #002b36 !important; +} +.post * { + overflow: auto !important; +} +.post h2 { + background-color: #073642 !important; +} +.post h2 a { + color: #93a1a1 !important; +} +.post div.entry { + background-color: #002b36 !important; + color: #839496 !important; +} +.post div.entry blockquote { + background-color: #073642 !important; +} +.post div.entry kbd { + background-color: #073642 !important; + border-color: #586e75 !important; + box-shadow: none !important; + color: #93a1a1 !important; + text-shadow: 0px 1px 0px #000 !important; +} +.post pre.mode-line { + overflow: visible !important; +} +#sr-header-area { + background-color: #073642 !important; +} +#sr-header-area .srdrop .selected { + color: #839496 !important; +} +#sr-header-area #sr-more-link { + background-color: #073642 !important; +} +.link.promotedlink.promoted { + background-color: #073642 !important; +} +.link .usertext .md { + background-color: #073642 !important; +} +.linkinfo { + background-color: #073642 !important; +} +.linklisting .odd { + background-color: #073642 !important; +} +.thing .title { + color: #839496 !important; +} +div.md { + color: #839496 !important; +} +body.comment { + background-color: #002b36 !important; +} +.commentarea > .usertext { + background-color: #002b36 !important; +} +.commentarea .menuarea { + background-color: #002b36 !important; +} +.comments-page .panestack-title { + background-color: #002b36 !important; +} +.listing-chooser { + background-color: #002b36 !important; +} +.listing-chooser .intro { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.listing-chooser .grippy { + background-color: #002b36 !important; +} +.listing-chooser .grippy:after { + border-right: none !important; +} +.listing-chooser li { + background-color: #073642 !important; +} +.listing-chooser li.selected { + background-color: #586e75 !important; + box-shadow: none; +} +.listing-chooser li a { + color: #839496 !important; +} +.listing-chooser li a .description { + color: #93a1a1 !important; +} +.titlebox { + background-color: #073642 !important; +} +.titlebox form.toggle { + background-color: #073642 !important; + color: #839496 !important; +} +.side .usertext-body .md { + background-color: #073642 !important; +} +.side { + background-color: #073642 !important; +} +.sidebox .spacer { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.tabmenu li a { + background-color: #073642 !important; +} +#header-bottom-right { + background-color: #073642 !important; +} +.morelink .nub { + background-color: #073642 !important; +} +* { + border-color: #657b83 !important; +} +a { + color: #268bd2 !important; +} +a:visited { + color: #6c71c4 !important; +} +body { + background-color: #002b36 !important; + color: #839496 !important; +} +html { + background-color: #002b36 !important; +} +input, +textarea { + background-color: #073642 !important; + color: #839496 !important; +} +tr:hover, +blockquote, +pre { + background-color: #073642 !important; + color: #839496 !important; +} +#toolMenu li { + background-color: #002b36 !important; +} +.navPanel, +.navIntraTool { + background-color: #002b36 !important; +} +.instruction, +.sakaiCopyrightInfo { + color: #839496 !important; +} +.listHier th { + background-color: #094352 !important; +} +ul.makeMenu { + background-color: #094352 !important; + border: 1px solid #094352 !important; +} +tr.external { + background-color: #094352 !important; +} +hr { + background-color: #094352 !important; + color: #094352 !important; +} +.bounty-indicator, +.bounty-indicator-tab { + background-color: #6c71c4 !important; +} +.bottom-notice { + background-color: #073642 !important; +} +.comments-link { + color: #859900 !important; +} +.page-numbers { + background-color: #859900 !important; + color: #eee8d5 !important; +} +.page-numbers.current { + background-color: #cb4b16 !important; + color: #002b36 !important; +} +.post-menu a { + color: #6c71c4 !important; +} +.question-status { + background-color: #073642 !important; +} +.bg-black-050 { + background-color: transparent !important; +} +.val-info { + background-color: transparent !important; + color: #839496 !important; +} +.s-label { + color: #839496 !important; +} +pre code { + background-color: #073642 !important; + color: #93a1a1 !important; +} +pre code .atn { + color: #268bd2 !important; +} +pre code .atv { + color: #2aa198 !important; +} +pre code .com { + color: #586e75 !important; +} +pre code .kwd { + color: #859900 !important; +} +pre code .lit { + color: #d33682 !important; +} +pre code .pln, +pre code .pun { + color: #839496 !important; +} +pre code .str { + color: #2aa198 !important; +} +pre code .tag { + color: #859900 !important; +} +pre code .typ { + color: #b58900 !important; +} +#footer { + background-color: #083c4a !important; + color: #839496 !important; +} +#footer #footer-sites th { + color: #93a1a1 !important; +} +.top-footer-links a { + color: #859900 !important; +} +.so-header { + background-color: #094352 !important; + color: #93a1a1 !important; +} +.so-header a { + color: #859900 !important; +} +.so-header .navigation .-list .-item :hover { + background-color: #859900 !important; + color: #fdf6e3 !important; +} +.topbar-dialog { + background-color: #002b36 !important; + box-shadow: #586e75 5px 5px 5px; +} +.topbar-dialog .current-site-container { + background-color: #002b36 !important; +} +.topbar-dialog .header { + background-color: #073642 !important; +} +.topbar-dialog .header a { + color: #93a1a1 !important; +} +.topbar-dialog .site-link { + color: #93a1a1 !important; +} +#header { + background-color: #094352 !important; +} +#question-header .question-hyperlink { + color: #93a1a1 !important; +} +#hlogo a { + filter: opacity(75%); +} +.new-post-activity { + background-color: #073642 !important; +} +.tagged-interesting { + background-color: #094352 !important; +} +div.answered-accepted { + background-color: #859900 !important; + color: #eee8d5 !important; +} +div.answered-accepted .mini-counts { + background-color: #859900 !important; + color: #eee8d5 !important; +} +.answered .mini-counts span { + color: #859900 !important; +} +.unanswered .mini-counts span { + color: #839496 !important; +} +#hot-network-questions a { + color: #2aa198 !important; +} +#hot-network-questions h4 a.js-gps-track { + color: #93a1a1 !important; +} +#sidebar .community-bulletin .bulletin-item-content a { + color: #93a1a1 !important; +} +#sidebar .module.community-bulletin { + background-color: #073642 !important; + color: #93a1a1 !important; +} +#sidebar .question-hyperlink { + color: #2aa198 !important; +} +.newuser { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.label-key { + color: #839496 !important; +} +.label-key b { + color: #93a1a1 !important; +} +#h-chat-link { + color: #93a1a1 !important; +} +.ad502-room { + background-color: #073642 !important; + box-shadow: #586e75 0px 1px 3px; + color: #93a1a1 !important; +} +#tabs a { + background-color: transparent !important; + background-image: linear-gradient(to bottom, #002b36, #073642); + color: #93a1a1 !important; +} +#tabs a.youarehere { + background-image: linear-gradient(to bottom, #cb4b16, #002b36); + color: #fdf6e3 !important; +} +.post-tag { + background-color: #586e75 !important; + color: #002b36 !important; +} +.post-tag::before { + background-color: #002b36 !important; +} +a.comment-user.owner { + background-color: #859900 !important; + color: #eee8d5 !important; +} +.post-signature { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.post-signature a { + color: #2aa198 !important; +} +.post-signature.owner .user-info .user-details a { + color: #859900 !important; +} +.post-signature span.relativetime { + color: #93a1a1 !important; +} +.vote { + background-color: #073642 !important; +} +.vote .star-off { + filter: opacity(75%); +} +.vote .star-on { + filter: opacity(50%) !important; +} +.vote .vote-down-off, +.vote .vote-up-off { + filter: opacity(50%); +} +.answer-votes { + background-color: #586e75 !important; + color: #002b36 !important; +} diff --git a/.config/qutebrowser/qsettings/QtProject.conf b/.config/qutebrowser/qsettings/QtProject.conf new file mode 100644 index 0000000..9d0d477 --- /dev/null +++ b/.config/qutebrowser/qsettings/QtProject.conf @@ -0,0 +1,8 @@ +[FileDialog] +history=file:///home/opal/pictures +lastVisited=file:///home/opal/pictures +qtVersion=5.15.6 +shortcuts=file:, file:///home/opal +sidebarWidth=87 +treeViewHeader="@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1\xd1\0\0\0\x4\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x4\0\0\0\xf5\0\0\0\x1\0\0\0\0\0\0\0\x39\0\0\0\x1\0\0\0\0\0\0\0=\0\0\0\x1\0\0\0\0\0\0\0\x66\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\xff\xff\xff\xff)" +viewMode=Detail diff --git a/.config/qutebrowser/quickmarks b/.config/qutebrowser/quickmarks new file mode 100644 index 0000000..df58927 --- /dev/null +++ b/.config/qutebrowser/quickmarks @@ -0,0 +1 @@ +66h&!@Vj4n$cAfwN https://verified.capitalone.com/auth/signin diff --git a/.config/qutebrowser/stylesheet.css b/.config/qutebrowser/stylesheet.css new file mode 100644 index 0000000..f215288 --- /dev/null +++ b/.config/qutebrowser/stylesheet.css @@ -0,0 +1,1712 @@ +* { + border-color: #657b83 !important; +} +a { + color: #268bd2 !important; +} +a:visited { + color: #6c71c4 !important; +} +body { + background-color: #002b36 !important; + color: #839496 !important; +} +html { + background-color: #002b36 !important; +} +input, +textarea { + background-color: #073642 !important; + color: #839496 !important; +} +blockquote, +pre { + background-color: #073642 !important; + color: #839496 !important; +} +.post-actions { + background-color: #073642 !important; +} +.textarea-wrapper { + background-color: #002b36 !important; + color: #839496 !important; +} +.search--adv { + background-color: #073642 !important; +} +.search__autocomplete > .acp-wrap { + background-color: #002b36 !important; +} +.search__autocomplete > .acp-wrap > .acp--highlight { + background-color: #073642 !important; + color: #eee8d5 !important; +} +.search__autocomplete > .acp-wrap strong { + color: #eee8d5 !important; +} +.site-wrapper > #header_wrapper { + background-color: #002b36 !important; +} +.site-wrapper > #header_wrapper > #header { + background-color: #002b36 !important; +} +.search--header { + background-color: #073642 !important; +} +.zci { + background-color: #073642 !important; + color: #839496 !important; +} +.tile--info { + background-color: #002b36 !important; +} +.tile--info__expand { + background-color: #586e75 !important; +} +.tile--c { + background-color: #586e75 !important; + color: #eee8d5 !important; +} +.module__text { + color: #839496 !important; +} +.about-info-box__heading { + color: #93a1a1 !important; +} +.result.highlight { + background-color: #073642 !important; +} +.result__snippet { + color: #839496 !important; +} +.result__snippet b { + color: #93a1a1 !important; +} +.btn--top { + background-color: #073642 !important; + color: #839496 !important; +} +.btn--top:hover { + background-color: #586e75 !important; +} +.result--sep--hr:before { + background-color: #586e75 !important; +} +* { + border-color: #073642 !important; +} +.news .alert .pull-info { + background-color: #083c4a !important; +} +.link-gray-dark, +.text-gray-dark { + color: #839496 !important; +} +.bg-white { + background-color: #002b36 !important; +} +.border { + border-color: #657b83 !important; +} +.breadcrumb .repo-root.js-repo-root a { + color: #268bd2 !important; +} +.breadcrumb strong.final-path { + color: #839496 !important; +} +button.ajax-pagination-btn { + background-color: #073642 !important; + color: #93a1a1 !important; +} +button.ajax-pagination-btn:hover { + background-color: #586e75 !important; +} +.comment-reactions .btn-link { + color: #839496 !important; +} +.comment-reactions .user-has-reacted { + background-color: #073642 !important; +} +.text-gray-dark { + color: #839496 !important; +} +.contrib-number { + color: #93a1a1 !important; +} +.counter { + background-color: #094352 !important; + color: #93a1a1 !important; +} +.diffstat-bar { + color: #839496 !important; +} +.file-header { + background-color: #073642 !important; +} +.file-history-tease .participation { + background-color: #002b36 !important; + color: #839496 !important; +} +.file-history-tease .participation .quickstat strong { + color: #839496 !important; +} +.file-history-tease .participation a { + color: #586e75 !important; +} +.file-history-tease .author a { + color: #839496 !important; +} +.file-history-tease-header { + background-color: #073642 !important; +} +.file-info-divider { + background-color: #586e75 !important; +} +.file-wrap { + color: #839496 !important; +} +.file-wrap * { + background-color: transparent !important; +} +.filter-bar { + background-color: #083c4a !important; +} +a.filter-item, +.filter-item { + color: #839496 !important; +} +a.filter-item.selected, +.filter-item.selected { + background-color: #073642 !important; + color: #93a1a1 !important; +} +a.filter-item:hover, +.filter-item:hover { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.flash { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.gh-header { + background-color: #002b36 !important; +} +.gh-header-number { + color: #586e75 !important; +} +.ellipsis-expander, +.hidden-text-expander a { + background-color: #073642 !important; +} +.issue-meta { + color: #586e75 !important; +} +.issues-listing a { + color: #839496 !important; +} +.muted-link { + color: #839496 !important; +} +.new-user-avatar-cta { + background-color: #073642 !important; + border-color: #586e75 !important; + color: #93a1a1 !important; +} +.overall-summary { + border-color: #586e75 !important; +} +.pinned-repo-item.border { + border-color: #586e75 !important; +} +.progress-bar { + background-color: #586e75 !important; +} +.simple-box { + background-color: #073642 !important; +} +.social-count { + background-color: #073642 !important; + border-color: #586e75 !important; + color: #93a1a1 !important; +} +.scope-badge { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.stats-switcher-wrapper { + background-color: #002b36 !important; +} +.stats-switcher-wrapper .numbers-summary li a { + color: #839496 !important; +} +.table-list-header-toggle .btn-link { + color: #586e75 !important; +} +.table-list-header-toggle .btn-link.selected { + color: #839496 !important; +} +.text-emphasized { + color: #93a1a1 !important; +} +.text-diff-added { + color: #859900 !important; +} +.text-diff-deleted { + color: #dc322f !important; +} +.avatar, +.timeline-comment-avatar { + filter: opacity(75%); +} +.blob-code { + background-color: #002b36 !important; + color: #839496 !important; +} +.blob-code-addition { + background-color: rgba(232,255,77,0.1) !important; +} +.blob-code-addition .x { + background-color: #647300 !important; + color: #c1cacb !important; +} +.blob-code-deletion { + background-color: rgba(220,50,47,0.2) !important; +} +.blob-code-deletion .x { + background-color: #721513 !important; + color: #c1cacb !important; +} +.blob-code-hunk { + background-color: #073642 !important; + border-color: #586e75 !important; +} +.blob-code-inner { + color: #839496 !important; +} +.blob-num { + background-color: #002b36 !important; + color: #586e75 !important; +} +.file { + color: #839496 !important; +} +.form-control { + background-color: #073642 !important; + border-color: #586e75 !important; +} +.pl-c { + color: #586e75 !important; +} +.pl-c1 { + color: #268bd2 !important; +} +.pl-e { + color: #b58900 !important; +} +.pl-en { + color: #268bd2 !important; +} +.pl-k { + color: #859900 !important; + font-weight: bold !important; +} +.pl-pds { + color: #2aa198 !important; +} +.pl-s { + color: #2aa198 !important; +} +.pl-smi { + color: #839496 !important; +} +.pl-v { + color: #859900 !important; + font-weight: bold !important; +} +.pl-mi1 { + color: #859900 !important; + background-color: transparent !important; +} +.pl-md { + color: #dc322f !important; + background-color: transparent !important; +} +.border-bottom, +.border-top { + border-color: #073642 !important; +} +.boxed-group * { + border-color: #586e75 !important; +} +.boxed-group article { + background-color: #002b36 !important; + color: #839496 !important; +} +.boxed-group > h3 { + background-color: #094352 !important; + color: #93a1a1 !important; +} +.more-repos { + background-color: #094352 !important; + box-shadow: inset 0 1px 0 #586e75 !important; +} +.boxed-group-inner { + background-color: #002b36 !important; +} +.branch-action-body { + background-color: #073642 !important; + border-color: #586e75 !important; +} +.branch-action-body div { + border-color: #586e75 !important; +} +.branch-action-state-clean .branch-action-icon { + background-color: #859900 !important; +} +.branch-action-state-dirty .branch-action-icon, +.branch-action-state-unstable .branch-action-icon, +.branch-action-state-unknown .branch-action-icon { + background-color: #b58900 !important; + color: #fff !important; +} +.text-shadow-light, +.branch-group-name, +.branch-summary { + color: #839496 !important; + text-shadow: none !important; +} +.branch-a-b-count .meter { + background-color: #b58900 !important; +} +.more-branches, +.branch-group-heading, +.branch-infobar, +.branch-name { + border-color: #586e75 !important; + background-color: #073642 !important; +} +.State, +.State:visited { + color: #fff !important; +} +.State--red { + background-color: #dc322f !important; + color: #002b36 !important; +} +.State--green { + background-color: #859900 !important; + color: #002b36 !important; +} +.select-menu-filters { + background-color: #083c4a !important; + color: #93a1a1 !important; +} +.js-select-menu-tab { + background-color: #094352 !important; + color: #93a1a1 !important; +} +.select-menu-tabs a.selected, +.select-menu-tab-nav.selected { + background-color: #586e75 !important; + color: #002b36 !important; +} +.signed-commit-header { + background-color: #002b36 !important; +} +.build-status-item { + background-color: #094352 !important; + color: #93a1a1 !important; +} +.build-status-item .build-status-details { + color: #268bd2 !important; +} +.capped-card h3 { + background-color: #094352 !important; +} +.capped-card h3 a { + color: #93a1a1 !important; +} +.capped-card-content { + background-color: #002b36 !important; +} +.capped-list th { + background-color: #083c4a !important; + color: #93a1a1 !important; +} +.capped-list tr:nth-child(2n) { + background-color: #073642 !important; +} +.commit, +.commit-meta, +.commit-icon .octicon, +.commit-group-title .octicon-git-commit { + background-color: #002b36 !important; +} +.commit *, +.commit-meta *, +.commit-icon .octicon *, +.commit-group-title .octicon-git-commit * { + border-color: #586e75 !important; +} +.commit-author { + color: #839496 !important; +} +.commit-author-section { + color: #839496 !important; +} +.commit-meta { + color: #586e75 !important; +} +.commit-meta .sha-block { + color: #586e75 !important; +} +.commit-meta .sha-block .sha { + color: #839496 !important; +} +.commit-ref, +code.commit-sha { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.commit-ref .user, +code.commit-sha .user { + color: #2aa198 !important; +} +.commit-branches *, +.commit-tease, +.commit-title { + background-color: rgba(190,255,255,0.2) !important; + border: none !important; +} +.commit-branches * *, +.commit-tease *, +.commit-title * { + color: #93a1a1 !important; +} +.commit-tease-contributors { + background-color: #073642 !important; +} +div.commit-branches, +div.commit.full-commit p.commit-title, +qul.branches-list { + background-color: #073642 !important; + color: #93a1a1 !important; +} +div.commit-branches *, +div.commit.full-commit p.commit-title *, +qul.branches-list * { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.commit-meta { + background-color: #073642 !important; + color: #839496 !important; +} +.commits-listing:before { + background-color: #073642 !important; +} +.full-commit { + background-color: #073642 !important; + border-color: #586e75 !important; +} +.full-commit * { + text-shadow: none !important; +} +.commit-desc pre { + background-color: transparent !important; + color: #839496 !important; +} +.commit.table-list-item { + border-color: #073642 !important; +} +.commit-meta.commit-author-section { + background-color: transparent !important; + color: #839496 !important; +} +.table-list-cell .commit-title { + background-color: transparent !important; + color: #839496 !important; +} +.completeness-indicator-success { + background-color: #859900 !important; +} +.completeness-indicator-problem { + background-color: #b58900 !important; + color: #fff !important; +} +.copyable-terminal { + background-color: #073642 !important; +} +.blankslate { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.comment-form-head.tabnav { + background-color: #002b36 !important; +} +.conversation-list-heading .inner { + background-color: #002b36 !important; +} +.discussion-item-closed .discussion-item-icon { + background-color: #dc322f !important; + color: #93a1a1 !important; +} +.discussion-item-icon { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.discussion-item-icon.octicon { + color: #93a1a1 !important; +} +.discussion-item-entity, +.discussion-item .renamed-was, +.discussion-item .renamed-is { + color: #93a1a1 !important; +} +.discussion-timeline:before { + background-color: #657b83 !important; +} +.discussion-timeline-actions { + background-color: #002b36 !important; +} +.drag-and-drop { + background-color: #073642 !important; +} +.new-discussion-timeline .closed-banner { + background-color: #657b83 !important; + border-color: #002b36 !important; +} +.timeline-comment { + background-color: #002b36 !important; + border-color: #586e75 !important; +} +.timeline-comment-header { + background-color: #073642 !important; +} +.timeline-comment-wrapper { + border-color: #002b36 !important; +} +.donut-chart > .pending { + fill: #b58900 !important; +} +.dropdown-divider { + background-color: #657b83 !important; +} +.dropdown-item { + color: #839496 !important; +} +.dropdown-item:hover { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.dropdown-menu { + background-color: #094352 !important; + color: #93a1a1 !important; + border-color: #657b83 !important; +} +.files * { + color: #839496 !important; +} +.files tbody tr { + border-color: #073642 !important; +} +.files tbody tr:nth-child(even) { + background-color: #00323f !important; +} +.files tbody tr:nth-child(odd) { + background-color: #002b36 !important; +} +.files tbody tr:hover * { + background-color: #094352 !important; +} +.btn { + background-image: linear-gradient(to bottom, #586e75, #073642) !important; + border-color: #586e75 !important; + color: #93a1a1 !important; +} +.btn:hover { + background-color: #083c4a !important; +} +.btn-primary, +.issues-listing .btn-primary { + background-color: #859900 !important; + background-image: linear-gradient(#859900, #424d00) !important; + color: #000 !important; + filter: opacity(62.5%); +} +.entry-title a { + color: #268bd2 !important; +} +.Header { + background-color: #083c4a !important; + border-bottom-color: #586e75 !important; +} +.Header a { + color: #93a1a1 !important; +} +.lang { + color: #93a1a1 !important; +} +.reponav-item, +.pagehead-tabs-item { + background-color: #073642 !important; + border-color: transparent !important; + color: #839496 !important; +} +.reponav-item:visited, +.pagehead-tabs-item:visited { + color: #839496 !important; +} +.reponav-item.selected, +.pagehead-tabs-item.selected { + background-color: #002b36 !important; + border-color: #dc322f #094352 transparent !important; +} +.site-footer-links * { + color: #839496 !important; +} +.Box-row--focus-gray.navigation-focus { + background-color: #083c4a !important; + color: #93a1a1 !important; +} +.js-directory-link { + color: #268bd2 !important; +} +.js-site-search-form input, +.js-chromeless-input-container { + background-color: #002b36 !important; + border-color: #586e75 !important; +} +a.label { + color: #000 !important; + filter: opacity(75%); +} +.notifications-list a { + color: #839496 !important; +} +.notifications-list li { + background-color: #002b36 !important; +} +.octicon-repo { + color: #93a1a1 !important; +} +.type-icon-state-closed { + color: rgba(255,54,43,0.65) !important; +} +.type-icon-state-merged { + color: #6c71c4 !important; +} +.type-icon-state-open { + color: rgba(205,212,0,0.65) !important; +} +.octicon-alert { + color: #fff !important; +} +.octicon-x { + color: #dc322f !important; +} +.octicon-check { + color: #859900 !important; +} +.octicon-primitive-dot { + color: #b58900 !important; +} +.octicon-clippy { + color: #93a1a1 !important; +} +.octicon-diff { + color: #fff !important; +} +.octicon-markdown { + color: #586e75 !important; +} +.orghead { + background-color: #073642 !important; + border-color: #657b83 !important; + border-bottom: 0px !important; + color: #93a1a1 !important; +} +.org-name { + color: #93a1a1 !important; +} +.pagehead.orghead { + background-color: #073642 !important; +} +.outline-box-highlighted { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.pagination .current { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.pagination .disabled { + background-color: #073642 !important; + color: #586e75 !important; +} +.pagination .disabled:hover { + background-color: #073642 !important; +} +.pagination .gap { + background-color: #073642 !important; + color: #586e75 !important; +} +.pagination a { + background-color: #073642 !important; + border-color: #002b36 !important; + color: #839496 !important; +} +.pagination a:hover { + background-color: #586e75 !important; + color: #002b36 !important; +} +.empty-cell, +.diffbar { + background-color: #002b36 !important; +} +.merge-status-item { + background-color: #094352 !important; +} +.merge-message { + background-color: #083c4a !important; +} +.pr-toolbar { + background-color: #002b36 !important; +} +.review-thread-reply { + background-color: #073642 !important; +} +.review-thread-reply .inline-comment-form { + background-color: #002b36 !important; +} +.merged.octicon, +.octicon-git-merge { + color: #6c71c4 !important; +} +.uploaded-files { + background-color: #002b36 !important; +} +.upload-progress { + background-color: #073642 !important; + box-shadow: 1px 0px 0px #073642 inset; +} +#readme .plain { + background-color: #002b36 !important; +} +.markdown-body, +.markdown-body table * { + background-color: #002b36 !important; + border-color: #657b83 !important; + color: #839496 !important; +} +.markdown-body a, +.markdown-body table * a { + color: #268bd2 !important; +} +.markdown-body code, +.markdown-body table * code, +.markdown-body pre, +.markdown-body table * pre { + background-color: #073642 !important; +} +.markdown-body hr, +.markdown-body table * hr { + background-color: #586e75 !important; +} +.markdown-body img, +.markdown-body table * img { + background-color: #002b36 !important; +} +.task-list-item.hovered { + background-color: #073642 !important; +} +.range-editor { + background-color: #073642 !important; +} +.compare-pr-placeholder { + background-color: #083c4a !important; +} +ul.comparison-list > li.title { + background-color: #094352 !important; +} +ul.comparison-list { + background-color: #083c4a !important; +} +.repository-description { + color: #839496 !important; +} +.repository-meta .edit-repository-meta label { + color: #839496 !important; +} +.pagehead.repohead { + background-color: #073642 !important; +} +.repository-content .RecentBranches { + background-color: #073642 !important; + border-color: #657b83 !important; +} +.repohead-details-container a { + color: #839496 !important; +} +.select-menu-modal { + border-color: #839496 !important; +} +.select-menu-modal * { + color: #839496 !important; +} +.select-menu-header, +.select-menu-header * { + background-color: #073642 !important; + color: #93a1a1 !important; + text-shadow: none !important; +} +.select-menu-item { + background-color: #002b36 !important; +} +.select-menu-item.navigation-focus, +.select-menu-item.navigation-focus.selected, +.select-menu-item.navigation-focus.select-menu-action, +.select-menu-item-text.navigation-focus { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.repository-sidebar { + background-color: #002b36 !important; +} +.thread-subscription-status { + background-color: #002b36 !important; +} +.sunken-menu { + background-image: linear-gradient(to right, #073642 0%, #002b36 8px) !important; + box-shadow: 1px 0px 0px #073642 inset; +} +.sunken-menu:before { + background-image: linear-gradient(#002b36, transparent) !important; +} +.sunken-menu:after { + background-image: linear-gradient(transparent, #002b36) !important; +} +.sunken-menu-item { + border-color: #002b36 !important; +} +.sunken-menu-item.selected { + background-color: #002b36 !important; + border-color: #094352 !important; + color: #93a1a1 !important; +} +.sunken-menu-item.selected:after { + background-color: #cb4b16 !important; +} +.sunken-menu-separator:before { + background-image: linear-gradient(to right, #073642 70%, #002b36 100%) !important; +} +.state { + color: #93a1a1 !important; +} +.state-closed { + background-color: #dc322f !important; +} +.state-open { + background-color: #859900 !important; +} +.subnav-item { + color: #839496 !important; +} +.subnav-item:hover { + background-color: #083c4a !important; +} +.subnav-item:visited { + color: #839496 !important; +} +.subnav-item.selected { + background-color: #073642 !important; +} +.subnav-links a:hover { + background-color: #073642 !important; +} +.subnav-search input { + border-color: #586e75 !important; +} +.right .tabnav-extra { + color: #586e75 !important; +} +a.tabnav-tab, +.tabnav-tab { + border-color: transparent !important; + color: #586e75 !important; +} +a.tabnav-tab.selected, +.tabnav-tab.selected { + background-color: #002b36 !important; + background-image: linear-gradient(#073642, #002b36) !important; + border-color: #657b83 !important; + color: #93a1a1 !important; +} +.table-list tr, +.table-list li { + background-color: #002b36 !important; +} +.table-list tr:hover, +.table-list li:hover { + background-color: #094352 !important; +} +.table-list-header { + background-color: #073642 !important; +} +.text-pending { + color: #b58900 !important; +} +.text-pending .octicon-primitive-dot { + color: #b58900 !important; +} +.text-red { + color: #dc322f !important; +} +.timeline-commits .commit-meta { + background-color: #002b36 !important; +} +.timeline-commits .commit-meta .commit-id { + color: #586e75 !important; +} +.topic-tag.topic-tag-link { + background-color: #073642 !important; + color: #839496 !important; +} +.underline-nav-item { + color: #839496 !important; +} +.underline-nav-item.selected { + border-bottom-color: #dc322f !important; + color: #839496 !important; +} +.user-profile-nav { + background-color: #073642 !important; + border-color: #657b83 !important; +} +.user-profile-sticky-bar:after { + background-color: #073642 !important; + border-color: #657b83 !important; +} +.graphs .area { + fill: #859900; +} +.summary-stats li .num { + color: #93a1a1 !important; +} +.viz { + background-color: #083c4a !important; +} +.facebox-popup { + color: #839496 !important; + background-color: #002b36 !important; +} +.facebox-popup .octicon { + color: #fff !important; +} +.facebox-popup .owner-select-target { + color: #839496 !important; + background-color: #073642 !important; +} +.facebox-popup .owner-select-target:hover { + background-color: #586e75 !important; +} +.suggester { + background-color: #094352 !important; +} +.suggester li.navigation-focus { + background-color: #586e75 !important; +} +.menu { + background-color: #073642 !important; +} +.menu-item.selected { + background-color: #094352 !important; +} +.menu-item:hover { + background-color: #586e75 !important; +} +.Box { + background-color: #002b36 !important; +} +.Box-header { + background-color: #073642 !important; +} +svg > * text { + color: #839496 !important; + fill: #839496 !important; +} +.insertions { + color: #859900 !important; +} +.deletions { + color: #dc322f !important; +} +.sfbgg { + background-color: #073642 !important; +} +.sbib_a { + background: linear-gradient(to bottom, #073642, #002b36) !important; +} +input#lst-ib, +#sb_ifc0.sbib_b, +#gs_taif0 { + background: transparent !important; +} +#lst-ib, +.sbsb_a { + background-color: #002b36 !important; +} +.kpbb { + background-image: linear-gradient(to bottom, #59a9e1, #268bd2) !important; +} +#hdtbSum { + background-color: #002b36 !important; +} +#hdtbMenus.hdtb-td-o { + background-color: #002b36 !important; +} +#hdtb-tls.hdtb-tl { + background-image: linear-gradient(to bottom, #002b36, #073642) !important; +} +#hdtb-tls.hdtb-tl.hdtb-tl-sel { + background-image: linear-gradient(to bottom, #073642, #002b36) !important; +} +#abar_button_opt.ab_button { + background: linear-gradient(to bottom, #002b36, #073642) !important; +} +#appbar { + background-color: #002b36 !important; +} +cite { + color: #859900 !important; +} +.ab_dropdown { + background-color: #002b36 !important; +} +div.crp { + background-color: #002b36 !important; +} +#fbar { + background-color: #073642 !important; +} +tr.Even { + background-color: #073642 !important; +} +.BigQuote { + background-color: #073642 !important; + color: #cb4b16 !important; +} +.Cat1HL { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.Cat2HL { + background-color: #094352 !important; +} +.Cat3HL { + background-color: #083c4a !important; +} +.FeatureByline { + background-color: #073642 !important; + border: none !important; +} +.Headline { + background-color: #094352 !important; +} +.QuotedText { + color: #6c71c4 !important; +} +DIV.GAByline { + background-color: #073642 !important; + border: none !important; +} +table.OddEven tr:nth-child(even) { + background-color: #00323f !important; +} +table.OddEven tr:nth-child(odd) { + background-color: #002b36 !important; +} +DIV.CommentBox { + border-color: #073642 !important; +} +DIV.CommentBox P.CommentTitle { + background-color: #094352 !important; +} +#menu, +.topnav-container { + background-color: #073642 !important; +} +.navmenu ul { + background-color: #073642 !important; +} +body * { + border-color: #094352 !important; +} +#content { + background-color: #002b36 !important; + color: #839496 !important; +} +#mw-head, +#mw-panel { + background-color: #073642 !important; + color: #93a1a1 !important; +} +#mw-head div.portal, +#mw-panel div.portal { + background-image: none !important; +} +#mw-head { + background-color: #073642 !important; + background-image: linear-gradient(to bottom, #002b36, #073642) !important; +} +#mw-panel, +#p-logo { + background-image: linear-gradient(to right, #002b36, #073642) !important; +} +div.vectorTabs { + background-image: linear-gradient(to bottom, #002b36, #073642) !important; +} +div.vectorTabs ul { + background-image: linear-gradient(to bottom, #002b36, #073642) !important; +} +div.vectorTabs ul li { + background-color: #073642 !important; + background-image: none !important; + padding: 0px 1px 0px 1px !important; +} +div.vectorTabs span { + background-color: #073642 !important; + background-image: linear-gradient(to bottom, #002b36, #073642) !important; +} +div.vectorTabs li.selected, +div.vectorTabs li.selected span { + background-color: transparent !important; + background-image: linear-gradient(to bottom, #073642, #002b36) !important; +} +.mw-wiki-logo { + filter: opacity(50%); +} +div#simpleSearch #searchInput { + background-color: #002b36 !important; + padding: 0.05em 0px 0.2em 0.2em !important; +} +.ambox, +.infobox, +#toc, +#toctitle, +.toclevel-1 { + background-color: #073642 !important; + border-color: #094352 !important; + color: #93a1a1 !important; +} +.catlinks { + background-color: #073642 !important; + border-color: #094352 !important; + color: #93a1a1 !important; +} +.navbox { + background-color: #073642 !important; + border-color: #094352 !important; + color: #93a1a1 !important; +} +.navbox .th, +.navbox .navbox-title { + background-color: #094352 !important; +} +.navbox-abovebelow, +th.navbox-group, +.navbox-subgroup, +.navbox-title { + background-color: #083c4a !important; +} +.navbox-even { + background-color: #002b36 !important; +} +h1, +h2, +h3, +h4, +h5, +h6 { + border-color: #094352 !important; + color: #93a1a1 !important; +} +code { + background-color: #094352 !important; + border-color: #094352 !important; + color: #93a1a1 !important; +} +div.thumbinner { + background-color: #073642 !important; + border-color: #094352 !important; +} +img { + filter: opacity(75%); +} +img.thumbimage { + border-color: #094352 !important; +} +.mw-body .external { + opacity: 0.5 !important; +} +table.wikitable { + background-color: #002b36 !important; + border-color: #094352 !important; + color: #839496 !important; +} +table.wikitable > * > tr > th { + background-color: #073642 !important; +} +table { + background-color: #002b36 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > table, +#hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > table { + background-color: #cb4b16 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) a, +#hnmain > tbody:nth-child(1) > tr:nth-child(1) a { + color: #000 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2), +#hnmain > tbody:nth-child(1) > tr:nth-child(2) { + background-color: #002b36 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(2) { + background-color: #002b36 !important; +} +.title a { + color: #839496 !important; +} +.title a:visited { + color: #586e75 !important; +} +a.storylink { + color: #93a1a1 !important; + font-weight: bold; +} +.sitestr { + color: #268bd2 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) { + background-color: #002b36 !important; +} +#hnmain .comhead { + color: #93a1a1 !important; +} +#hnmain .c00 { + color: #839496 !important; +} +#hnmain a.hnuser { + color: #b58900 !important; +} +#hnmain span.age a { + color: #586e75 !important; +} +.cdd { + color: rgba(255,54,43,0.65) !important; +} +.comment i { + color: #6c71c4 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(4) { + background-color: #002b36 !important; +} +#hnmain > tbody:nth-child(1) > tr:nth-child(4) > td:nth-child(1) > table:nth-child(2) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) { + background-color: #cb4b16 !important; +} +div#page div#header { + background-color: #002b36 !important; +} +div#page div#header a { + color: #6c71c4 !important; +} +.post { + background-color: #002b36 !important; +} +.post * { + overflow: auto !important; +} +.post h2 { + background-color: #073642 !important; +} +.post h2 a { + color: #93a1a1 !important; +} +.post div.entry { + background-color: #002b36 !important; + color: #839496 !important; +} +.post div.entry blockquote { + background-color: #073642 !important; +} +.post div.entry kbd { + background-color: #073642 !important; + border-color: #586e75 !important; + box-shadow: none !important; + color: #93a1a1 !important; + text-shadow: 0px 1px 0px #000 !important; +} +.post pre.mode-line { + overflow: visible !important; +} +#sr-header-area { + background-color: #073642 !important; +} +#sr-header-area .srdrop .selected { + color: #839496 !important; +} +#sr-header-area #sr-more-link { + background-color: #073642 !important; +} +.link.promotedlink.promoted { + background-color: #073642 !important; +} +.link .usertext .md { + background-color: #073642 !important; +} +.linkinfo { + background-color: #073642 !important; +} +.linklisting .odd { + background-color: #073642 !important; +} +.thing .title { + color: #839496 !important; +} +div.md { + color: #839496 !important; +} +body.comment { + background-color: #002b36 !important; +} +.commentarea > .usertext { + background-color: #002b36 !important; +} +.commentarea .menuarea { + background-color: #002b36 !important; +} +.comments-page .panestack-title { + background-color: #002b36 !important; +} +.listing-chooser { + background-color: #002b36 !important; +} +.listing-chooser .intro { + background-color: #586e75 !important; + color: #93a1a1 !important; +} +.listing-chooser .grippy { + background-color: #002b36 !important; +} +.listing-chooser .grippy:after { + border-right: none !important; +} +.listing-chooser li { + background-color: #073642 !important; +} +.listing-chooser li.selected { + background-color: #586e75 !important; + box-shadow: none; +} +.listing-chooser li a { + color: #839496 !important; +} +.listing-chooser li a .description { + color: #93a1a1 !important; +} +.titlebox { + background-color: #073642 !important; +} +.titlebox form.toggle { + background-color: #073642 !important; + color: #839496 !important; +} +.side .usertext-body .md { + background-color: #073642 !important; +} +.side { + background-color: #073642 !important; +} +.sidebox .spacer { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.tabmenu li a { + background-color: #073642 !important; +} +#header-bottom-right { + background-color: #073642 !important; +} +.morelink .nub { + background-color: #073642 !important; +} +* { + border-color: #657b83 !important; +} +a { + color: #268bd2 !important; +} +a:visited { + color: #6c71c4 !important; +} +body { + background-color: #002b36 !important; + color: #839496 !important; +} +html { + background-color: #002b36 !important; +} +input, +textarea { + background-color: #073642 !important; + color: #839496 !important; +} +tr:hover, +blockquote, +pre { + background-color: #073642 !important; + color: #839496 !important; +} +#toolMenu li { + background-color: #002b36 !important; +} +.navPanel, +.navIntraTool { + background-color: #002b36 !important; +} +.instruction, +.sakaiCopyrightInfo { + color: #839496 !important; +} +.listHier th { + background-color: #094352 !important; +} +ul.makeMenu { + background-color: #094352 !important; + border: 1px solid #094352 !important; +} +tr.external { + background-color: #094352 !important; +} +hr { + background-color: #094352 !important; + color: #094352 !important; +} +.bounty-indicator, +.bounty-indicator-tab { + background-color: #6c71c4 !important; +} +.bottom-notice { + background-color: #073642 !important; +} +.comments-link { + color: #859900 !important; +} +.page-numbers { + background-color: #859900 !important; + color: #eee8d5 !important; +} +.page-numbers.current { + background-color: #cb4b16 !important; + color: #002b36 !important; +} +.post-menu a { + color: #6c71c4 !important; +} +.question-status { + background-color: #073642 !important; +} +.bg-black-050 { + background-color: transparent !important; +} +.val-info { + background-color: transparent !important; + color: #839496 !important; +} +.s-label { + color: #839496 !important; +} +pre code { + background-color: #073642 !important; + color: #93a1a1 !important; +} +pre code .atn { + color: #268bd2 !important; +} +pre code .atv { + color: #2aa198 !important; +} +pre code .com { + color: #586e75 !important; +} +pre code .kwd { + color: #859900 !important; +} +pre code .lit { + color: #d33682 !important; +} +pre code .pln, +pre code .pun { + color: #839496 !important; +} +pre code .str { + color: #2aa198 !important; +} +pre code .tag { + color: #859900 !important; +} +pre code .typ { + color: #b58900 !important; +} +#footer { + background-color: #083c4a !important; + color: #839496 !important; +} +#footer #footer-sites th { + color: #93a1a1 !important; +} +.top-footer-links a { + color: #859900 !important; +} +.so-header { + background-color: #094352 !important; + color: #93a1a1 !important; +} +.so-header a { + color: #859900 !important; +} +.so-header .navigation .-list .-item :hover { + background-color: #859900 !important; + color: #fdf6e3 !important; +} +.topbar-dialog { + background-color: #002b36 !important; + box-shadow: #586e75 5px 5px 5px; +} +.topbar-dialog .current-site-container { + background-color: #002b36 !important; +} +.topbar-dialog .header { + background-color: #073642 !important; +} +.topbar-dialog .header a { + color: #93a1a1 !important; +} +.topbar-dialog .site-link { + color: #93a1a1 !important; +} +#header { + background-color: #094352 !important; +} +#question-header .question-hyperlink { + color: #93a1a1 !important; +} +#hlogo a { + filter: opacity(75%); +} +.new-post-activity { + background-color: #073642 !important; +} +.tagged-interesting { + background-color: #094352 !important; +} +div.answered-accepted { + background-color: #859900 !important; + color: #eee8d5 !important; +} +div.answered-accepted .mini-counts { + background-color: #859900 !important; + color: #eee8d5 !important; +} +.answered .mini-counts span { + color: #859900 !important; +} +.unanswered .mini-counts span { + color: #839496 !important; +} +#hot-network-questions a { + color: #2aa198 !important; +} +#hot-network-questions h4 a.js-gps-track { + color: #93a1a1 !important; +} +#sidebar .community-bulletin .bulletin-item-content a { + color: #93a1a1 !important; +} +#sidebar .module.community-bulletin { + background-color: #073642 !important; + color: #93a1a1 !important; +} +#sidebar .question-hyperlink { + color: #2aa198 !important; +} +.newuser { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.label-key { + color: #839496 !important; +} +.label-key b { + color: #93a1a1 !important; +} +#h-chat-link { + color: #93a1a1 !important; +} +.ad502-room { + background-color: #073642 !important; + box-shadow: #586e75 0px 1px 3px; + color: #93a1a1 !important; +} +#tabs a { + background-color: transparent !important; + background-image: linear-gradient(to bottom, #002b36, #073642); + color: #93a1a1 !important; +} +#tabs a.youarehere { + background-image: linear-gradient(to bottom, #cb4b16, #002b36); + color: #fdf6e3 !important; +} +.post-tag { + background-color: #586e75 !important; + color: #002b36 !important; +} +.post-tag::before { + background-color: #002b36 !important; +} +a.comment-user.owner { + background-color: #859900 !important; + color: #eee8d5 !important; +} +.post-signature { + background-color: #073642 !important; + color: #93a1a1 !important; +} +.post-signature a { + color: #2aa198 !important; +} +.post-signature.owner .user-info .user-details a { + color: #859900 !important; +} +.post-signature span.relativetime { + color: #93a1a1 !important; +} +.vote { + background-color: #073642 !important; +} +.vote .star-off { + filter: opacity(75%); +} +.vote .star-on { + filter: opacity(50%) !important; +} +.vote .vote-down-off, +.vote .vote-up-off { + filter: opacity(50%); +} +.answer-votes { + background-color: #586e75 !important; + color: #002b36 !important; +} diff --git a/.config/qutebrowser/userscripts/importer.py b/.config/qutebrowser/userscripts/importer.py new file mode 100755 index 0000000..c6f06b9 --- /dev/null +++ b/.config/qutebrowser/userscripts/importer.py @@ -0,0 +1,343 @@ +#!/usr/bin/env python3 + +#!/usr/bin/env python3 +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2014-2021 Florian Bruhin (The Compiler) +# Copyright 2014-2018 Claude (longneck) + +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see . + + +"""Tool to import data from other browsers. + +Currently importing bookmarks from Netscape HTML Bookmark files, Chrome +profiles, and Mozilla profiles is supported. +""" + + +import argparse +import textwrap +import sqlite3 +import os +import urllib.parse +import json +import string + + +def main(): + args = get_args() + bookmark_types = [] + output_format = None + input_format = args.input_format + if args.search_output: + bookmark_types = ["search"] + if args.oldconfig: + output_format = "oldsearch" + else: + output_format = "search" + else: + if args.bookmark_output: + output_format = "bookmark" + elif args.quickmark_output: + output_format = "quickmark" + if args.import_bookmarks: + bookmark_types.append("bookmark") + if args.import_keywords: + bookmark_types.append("keyword") + if not bookmark_types: + bookmark_types = ["bookmark", "keyword"] + if not output_format: + output_format = "quickmark" + + import_function = { + "html": import_html_bookmarks, + "mozilla": import_moz_places, + "chrome": import_chrome, + } + import_function[input_format](args.bookmarks, bookmark_types, output_format) + + +def get_args(): + """Get the argparse parser.""" + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=textwrap.dedent( + """ + To import bookmarks, you'll need the path to your profile or an + exported HTML file from your browser's bookmark manager. Redirect + the output from this script to the appropriate file in your + qutebrowser config directory (listed in the output of :version), + usually done with the '>' operator; for example, + ./importer.py -i mozilla your_profile_path > ~/.config/qutebrowser/quickmarks + + Common browsers with native input format support: + chrome: Chrome, Chromium, Edge + mozilla: Firefox, SeaMonkey, Pale Moon + """ + ), + ) + parser.add_argument( + "-i", + "--input-format", + help="Which input format? Defaults to html", + choices=["html", "mozilla", "chrome"], + default="html", + required=False, + ) + parser.add_argument( + "-b", + "--bookmark-output", + help="Output in bookmark format.", + action="store_true", + default=False, + required=False, + ) + parser.add_argument( + "-q", + "--quickmark-output", + help="Output in quickmark format (default).", + action="store_true", + default=False, + required=False, + ) + parser.add_argument( + "-s", + "--search-output", + help="Output config.py search engine format (negates -B and -K)", + action="store_true", + default=False, + required=False, + ) + parser.add_argument( + "--oldconfig", + help="Output search engine format for old qutebrowser.conf format", + default=False, + action="store_true", + required=False, + ) + parser.add_argument( + "-B", + "--import-bookmarks", + help="Import plain bookmarks (can be combiend with -K)", + action="store_true", + default=False, + required=False, + ) + parser.add_argument( + "-K", + "--import-keywords", + help="Import keywords (can be combined with -B)", + action="store_true", + default=False, + required=False, + ) + parser.add_argument( + "bookmarks", + help="Bookmarks file (html format) or " "profile folder (Mozilla format)", + ) + args = parser.parse_args() + return args + + +def search_escape(url): + """Escape URLs such that preexisting { and } are handled properly. + + Will obviously trash a properly-formatted qutebrowser URL. + """ + return url.replace("{", "{{").replace("}", "}}") + + +def opensearch_convert(url): + """Convert a basic OpenSearch URL into something qutebrowser can use. + + Exceptions: + KeyError: + An unknown and required parameter is present in the URL. This + usually means there's browser/addon specific functionality needed + to build the URL (I'm looking at you and your browser, Google) that + obviously won't be present here. + """ + subst = { + "searchTerms": "%s", # for proper escaping later + "language": "*", + "inputEncoding": "UTF-8", + "outputEncoding": "UTF-8", + } + + # remove optional parameters (even those we don't support) + for param in string.Formatter().parse(url): + if param[1]: + if param[1].endswith("?"): + url = url.replace("{" + param[1] + "}", "") + elif param[2] and param[2].endswith("?"): + url = url.replace("{" + param[1] + ":" + param[2] + "}", "") + return search_escape(url.format(**subst)).replace("%s", "{}") + + +def import_html_bookmarks(bookmarks_file, bookmark_types, output_format): + """Import bookmarks from a NETSCAPE-Bookmark-file v1. + + Generated by Chromium, Firefox, IE and possibly more browsers. Not all + export all possible bookmark types: + - Firefox mostly works with everything + - Chrome doesn't support keywords at all; searches are a separate + database + """ + import bs4 + + with open(bookmarks_file, encoding="utf-8") as f: + soup = bs4.BeautifulSoup(f, "html.parser") + bookmark_query = { + "search": lambda tag: ( + (tag.name == "a") and ("shortcuturl" in tag.attrs) and ("%s" in tag["href"]) + ), + "keyword": lambda tag: ( + (tag.name == "a") + and ("shortcuturl" in tag.attrs) + and ("%s" not in tag["href"]) + ), + "bookmark": lambda tag: ( + (tag.name == "a") and ("shortcuturl" not in tag.attrs) and (tag.string) + ), + } + output_template = { + "search": { + "search": "c.url.searchengines['{tag[shortcuturl]}'] = " + "'{tag[href]}' #{tag.string}" + }, + "oldsearch": { + "search": "{tag[shortcuturl]} = {tag[href]} #{tag.string}", + }, + "bookmark": { + "bookmark": "{tag[href]} {tag.string}", + "keyword": "{tag[href]} {tag.string}", + }, + "quickmark": { + "bookmark": "{tag.string} {tag[href]}", + "keyword": "{tag[shortcuturl]} {tag[href]}", + }, + } + bookmarks = [] + for typ in bookmark_types: + tags = soup.findAll(bookmark_query[typ]) + for tag in tags: + if typ == "search": + tag["href"] = search_escape(tag["href"]).replace("%s", "{}") + if tag["href"] not in bookmarks: + bookmarks.append(output_template[output_format][typ].format(tag=tag)) + for bookmark in bookmarks: + print(bookmark) + + +def import_moz_places(profile, bookmark_types, output_format): + """Import bookmarks from a Mozilla profile's places.sqlite database.""" + place_query = { + "bookmark": ( + "SELECT DISTINCT moz_bookmarks.title,moz_places.url " + "FROM moz_bookmarks,moz_places " + "WHERE moz_places.id=moz_bookmarks.fk " + "AND moz_places.id NOT IN (SELECT place_id FROM moz_keywords) " + "AND moz_places.url NOT LIKE 'place:%';" + ), # Bookmarks with no keywords assigned + "keyword": ( + "SELECT moz_keywords.keyword,moz_places.url " + "FROM moz_keywords,moz_places,moz_bookmarks " + "WHERE moz_places.id=moz_bookmarks.fk " + "AND moz_places.id=moz_keywords.place_id " + "AND moz_places.url NOT LIKE '%!%s%' ESCAPE '!';" + ), # Bookmarks with keywords assigned but no %s substitution + "search": ( + "SELECT moz_keywords.keyword, " + " moz_bookmarks.title, " + " search_conv(moz_places.url) AS url " + "FROM moz_keywords,moz_places,moz_bookmarks " + "WHERE moz_places.id=moz_bookmarks.fk " + "AND moz_places.id=moz_keywords.place_id " + "AND moz_places.url LIKE '%!%s%' ESCAPE '!';" + ), # bookmarks with keyword and %s substitution + } + out_template = { + "bookmark": {"bookmark": "{url} {title}", "keyword": "{url} {keyword}"}, + "quickmark": {"bookmark": "{title} {url}", "keyword": "{keyword} {url}"}, + "oldsearch": {"search": "{keyword} {url} #{title}"}, + "search": {"search": "c.url.searchengines['{keyword}'] = '{url}' #{title}"}, + } + + def search_conv(url): + return search_escape(url).replace("%s", "{}") + + places = sqlite3.connect(os.path.join(profile, "places.sqlite")) + places.create_function("search_conv", 1, search_conv) + places.row_factory = sqlite3.Row + c = places.cursor() + for typ in bookmark_types: + c.execute(place_query[typ]) + for row in c: + print(out_template[output_format][typ].format(**row)) + + +def import_chrome(profile, bookmark_types, output_format): + """Import bookmarks and search keywords from Chrome-type profiles. + + On Chrome, keywords and search engines are the same thing and handled in + their own database table; bookmarks cannot have associated keywords. This + is why the dictionary lookups here are much simpler. + """ + out_template = { + "bookmark": "{url} {name}", + "quickmark": "{name} {url}", + "search": "c.url.searchengines['{keyword}'] = '{url}'", + "oldsearch": "{keyword} {url}", + } + + if "search" in bookmark_types: + webdata = sqlite3.connect(os.path.join(profile, "Web Data")) + c = webdata.cursor() + c.execute("SELECT keyword,url FROM keywords;") + for keyword, url in c: + try: + url = opensearch_convert(url) + print(out_template[output_format].format(keyword=keyword, url=url)) + except KeyError: + print( + "# Unsupported parameter in url for {}; skipping....".format( + keyword + ) + ) + + else: + with open(os.path.join(profile, "Bookmarks"), encoding="utf-8") as f: + bookmarks = json.load(f) + + def bm_tree_walk(bm, template): + """Recursive function to walk through bookmarks.""" + if not isinstance(bm, dict): + return + assert "type" in bm, bm + if bm["type"] == "url": + if urllib.parse.urlparse(bm["url"]).scheme != "chrome": + print(template.format(**bm)) + elif bm["type"] == "folder": + for child in bm["children"]: + bm_tree_walk(child, template) + + for root in bookmarks["roots"].values(): + bm_tree_walk(root, out_template[output_format]) + + +if __name__ == "__main__": + main() diff --git a/.config/qutebrowser/userscripts/qute-bitwarden b/.config/qutebrowser/userscripts/qute-bitwarden new file mode 100755 index 0000000..e44aa0e --- /dev/null +++ b/.config/qutebrowser/userscripts/qute-bitwarden @@ -0,0 +1,356 @@ +#!/usr/bin/env python3 + +# Copyright 2017 Chris Braun (cryzed) +# Adapted for Bitwarden by Jonathan Haylett (JonnyHaystack) +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see . + +""" +Insert login information using Bitwarden CLI and a dmenu-compatible application +(e.g. dmenu, rofi -dmenu, ...). +""" + +USAGE = """The domain of the site has to be in the name of the Bitwarden entry, for example: "github.com/cryzed" or +"websites/github.com". The login information is inserted by emulating key events using qutebrowser's fake-key command in this manner: +[USERNAME][PASSWORD], which is compatible with almost all login forms. + +If enabled, with the `--totp` flag, it will also move the TOTP code to the +clipboard, much like the Firefox add-on. + +You must log into Bitwarden CLI using `bw login` prior to use of this script. +The session key will be stored using keyctl for the number of seconds passed to +the --auto-lock option. + +To use in qutebrowser, run: `spawn --userscript qute-bitwarden` +""" + +EPILOG = """Dependencies: tldextract (Python 3 module), pyperclip (optional +Python module, used for TOTP codes), Bitwarden CLI (1.7.4 is known to work +but older versions may well also work) + +WARNING: The login details are viewable as plaintext in qutebrowser's debug log +(qute://log) and might be shared if you decide to submit a crash report!""" + +import argparse +import enum +import functools +import os +import shlex +import subprocess +import sys +import json +import tldextract + +argument_parser = argparse.ArgumentParser( + description=__doc__, + usage=USAGE, + epilog=EPILOG, +) +argument_parser.add_argument("url", nargs="?", default=os.getenv("QUTE_URL")) +argument_parser.add_argument( + "--dmenu-invocation", + "-d", + default="bemenu -x -b --prompt=Pass", + help="Invocation used to execute a dmenu-provider", +) +argument_parser.add_argument( + "--password-prompt-invocation", + "-p", + default='bemenu -x -b -p "Master Password"', + help="Invocation used to prompt the user for their Bitwarden password", +) +argument_parser.add_argument( + "--no-insert-mode", + "-n", + dest="insert_mode", + action="store_false", + help="Don't automatically enter insert mode", +) +argument_parser.add_argument( + "--totp", "-t", action="store_true", help="Copy TOTP key to clipboard" +) +argument_parser.add_argument( + "--io-encoding", + "-i", + default="UTF-8", + help="Encoding used to communicate with subprocesses", +) +argument_parser.add_argument( + "--merge-candidates", + "-m", + action="store_true", + help="Merge pass candidates for fully-qualified and registered domain name", +) +argument_parser.add_argument( + "--auto-lock", + type=int, + default=900, + help="Automatically lock the vault after this many seconds", +) + +group = argument_parser.add_mutually_exclusive_group() +group.add_argument( + "--username-only", "-e", action="store_true", help="Only insert username" +) +group.add_argument( + "--password-only", "-w", action="store_true", help="Only insert password" +) +group.add_argument( + "--totp-only", "-T", action="store_true", help="Only insert totp code" +) + +stderr = functools.partial(print, file=sys.stderr) + + +class ExitCodes(enum.IntEnum): + SUCCESS = 0 + FAILURE = 1 + # 1 is automatically used if Python throws an exception + NO_PASS_CANDIDATES = 2 + COULD_NOT_MATCH_USERNAME = 3 + COULD_NOT_MATCH_PASSWORD = 4 + + +def qute_command(command): + with open(os.environ["QUTE_FIFO"], "w") as fifo: + fifo.write(command + "\n") + fifo.flush() + + +def ask_password(password_prompt_invocation): + process = subprocess.run( + shlex.split(password_prompt_invocation), + text=True, + stdout=subprocess.PIPE, + ) + if process.returncode > 0: + raise Exception("Could not unlock vault") + master_pass = process.stdout.strip() + return subprocess.check_output( + ["bw", "unlock", "--raw", master_pass], + text=True, + ).strip() + + +def get_session_key(auto_lock, password_prompt_invocation): + if auto_lock == 0: + subprocess.call(["keyctl", "purge", "user", "bw_session"]) + return ask_password(password_prompt_invocation) + else: + process = subprocess.run( + ["keyctl", "request", "user", "bw_session"], + text=True, + stdout=subprocess.PIPE, + ) + key_id = process.stdout.strip() + if process.returncode > 0: + session = ask_password(password_prompt_invocation) + if not session: + raise Exception("Could not unlock vault") + key_id = subprocess.check_output( + ["keyctl", "add", "user", "bw_session", session, "@u"], + text=True, + ).strip() + + if auto_lock > 0: + subprocess.call(["keyctl", "timeout", str(key_id), str(auto_lock)]) + return subprocess.check_output( + ["keyctl", "pipe", str(key_id)], + text=True, + ).strip() + + +def pass_(domain, encoding, auto_lock, password_prompt_invocation): + session_key = get_session_key(auto_lock, password_prompt_invocation) + process = subprocess.run( + ["bw", "list", "items", "--session", session_key, "--url", domain], + capture_output=True, + ) + + err = process.stderr.decode(encoding).strip() + if err: + msg = "Bitwarden CLI returned for {:s} - {:s}".format(domain, err) + stderr(msg) + + if process.returncode: + return "[]" + + out = process.stdout.decode(encoding).strip() + + return out + + +def get_totp_code( + selection_id, domain_name, encoding, auto_lock, password_prompt_invocation +): + session_key = get_session_key(auto_lock, password_prompt_invocation) + process = subprocess.run( + ["bw", "get", "totp", "--session", session_key, selection_id], + capture_output=True, + ) + + err = process.stderr.decode(encoding).strip() + if err: + # domain_name instead of selection_id to make it more user-friendly + msg = "Bitwarden CLI returned for {:s} - {:s}".format(domain_name, err) + stderr(msg) + + if process.returncode: + return "[]" + + out = process.stdout.decode(encoding).strip() + + return out + + +def dmenu(items, invocation, encoding): + command = shlex.split(invocation) + process = subprocess.run( + command, input="\n".join(items).encode(encoding), stdout=subprocess.PIPE + ) + return process.stdout.decode(encoding).strip() + + +def fake_key_raw(text): + for character in text: + # Escape all characters by default, space requires special handling + sequence = '" "' if character == " " else r"\{}".format(character) + qute_command("fake-key {}".format(sequence)) + + +def main(arguments): + if not arguments.url: + argument_parser.print_help() + return ExitCodes.FAILURE + + extract_result = tldextract.extract(arguments.url) + + # Try to find candidates using targets in the following order: fully-qualified domain name (includes subdomains), + # the registered domain name and finally: the IPv4 address if that's what + # the URL represents + candidates = [] + for target in filter( + None, + [ + extract_result.fqdn, + extract_result.registered_domain, + extract_result.subdomain + "." + extract_result.domain, + extract_result.domain, + extract_result.ipv4, + ], + ): + target_candidates = json.loads( + pass_( + target, + arguments.io_encoding, + arguments.auto_lock, + arguments.password_prompt_invocation, + ) + ) + if not target_candidates: + continue + + candidates = candidates + target_candidates + if not arguments.merge_candidates: + break + else: + if not candidates: + stderr("No pass candidates for URL {!r} found!".format(arguments.url)) + return ExitCodes.NO_PASS_CANDIDATES + + if len(candidates) == 1: + selection = candidates.pop() + else: + choices = [] + for c in candidates: + if c["login"]["username"] is None: + c["login"]["username"] = "" + + choices.append("{:s} | {:s}".format(c["name"], c["login"]["username"])) + + # choices = [ + # "{:s} | {:s}".format(c["name"], c["login"]["username"]) for c in candidates + # ] + choice = dmenu(choices, arguments.dmenu_invocation, arguments.io_encoding) + choice_tokens = choice.split("|") + choice_name = choice_tokens[0].strip() + choice_username = choice_tokens[1].strip() + selection = next( + ( + c + for (i, c) in enumerate(candidates) + if c["name"] == choice_name + and c["login"]["username"] == choice_username + ), + None, + ) + + # Nothing was selected, simply return + if not selection: + return ExitCodes.SUCCESS + + username = selection["login"]["username"] + password = selection["login"]["password"] + totp = selection["login"]["totp"] + + if arguments.username_only: + fake_key_raw(username) + elif arguments.password_only: + fake_key_raw(password) + elif arguments.totp_only: + # No point in moving it to the clipboard in this case + fake_key_raw( + get_totp_code( + selection["id"], + selection["name"], + arguments.io_encoding, + arguments.auto_lock, + arguments.password_prompt_invocation, + ) + ) + else: + # Enter username and password using fake-key and (which seems to work almost universally), then switch + # back into insert-mode, so the form can be directly submitted by + # hitting enter afterwards + fake_key_raw(username) + qute_command("fake-key ") + fake_key_raw(password) + + if arguments.insert_mode: + qute_command("mode-enter insert") + + # If it finds a TOTP code, it copies it to the clipboard, + # which is the same behavior as the Firefox add-on. + if not arguments.totp_only and totp and arguments.totp: + # The import is done here, to make pyperclip an optional dependency + import pyperclip + + pyperclip.copy( + get_totp_code( + selection["id"], + selection["name"], + arguments.io_encoding, + arguments.auto_lock, + arguments.password_prompt_invocation, + ) + ) + + return ExitCodes.SUCCESS + + +if __name__ == "__main__": + arguments = argument_parser.parse_args() + sys.exit(main(arguments)) diff --git a/.config/sway/config b/.config/sway/config new file mode 100644 index 0000000..e8bdb0f --- /dev/null +++ b/.config/sway/config @@ -0,0 +1,313 @@ + +output * bg /home/opal/.config/wallpapers/wall.jpg fill #0D0703 + +####################### +# VARIABLES +####################### +# Directional Keys +set $left h +set $down j +set $up k +set $right l + +# Mod Key +set $mod Mod4 + +# Terminal +set $term alacritty + +# Application Launcher +set $menu bemenu-run -p Run: -l 10 -c -M 500 --fn 'Monospace 17' --tf '#ff4e00' --ff '#dbc077' --hf '#ff4e00' + +####################### +# GENERAL KEYBINDS +####################### + +# Start a terminal +bindsym $mod+Return exec $term + +# Start wofi +bindsym $mod+d exec $menu + +# Kill focused window +bindsym $mod+Shift+q kill + +# Lock SwayWM +bindsym Control+Shift+l exec swaylock + +# Change normal to inverse to use left mouse button for resizing and right +# mouse button for dragging. +floating_modifier $mod normal + +# Reload the configuration file +bindsym $mod+Shift+c reload + +# Log out menu +bindsym $mod+Shift+x exec wlogout + +# Moving around: +# Move your focus around +bindsym $mod+$left focus left +bindsym $mod+$down focus down +bindsym $mod+$up focus up +bindsym $mod+$right focus right + +# Or use $mod+[up|down|left|right] +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +# Move the focused window with the same, but add Shift +bindsym $mod+Shift+$left move left +bindsym $mod+Shift+$down move down +bindsym $mod+Shift+$up move up +bindsym $mod+Shift+$right move right + +# Ditto, with arrow keys +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right + +# Layout stuff: +# +# You can "split" the current object of your focus with +# $mod+b or $mod+v, for horizontal and vertical splits +# respectively. +bindsym $mod+b splith +bindsym $mod+v splitv + +# Switch the current container between different layout styles +#bindsym $mod+s layout stacking +#bindsym $mod+w layout tabbed +#bindsym $mod+e layout toggle split + +# Make the current focus fullscreen +bindsym $mod+f fullscreen + +# Toggle the current focus between tiling and floating mode +bindsym $mod+Shift+space floating toggle + +# Swap focus between the tiling area and the floating area +bindsym $mod+space focus mode_toggle + +# Move focus to the parent container +bindsym $mod+a focus parent + +# Scratchpad: +# +# Sway has a "scratchpad", which is a bag of holding for windows. +# You can send windows there and get them back later. + +# Move the currently focused window to the scratchpad +bindsym $mod+Shift+minus move scratchpad + +# Show the next scratchpad window or hide the focused scratchpad window. +# If there are multiple scratchpad windows, this command cycles through them. +bindsym $mod+minus scratchpad show + +# Volume up +bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% + +# Volume down +bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% + +# Mute toggle +bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle + + +# Resizing containers: +mode "resize" { + # left will shrink the containers width + # right will grow the containers width + # up will shrink the containers height + # down will grow the containers height + bindsym $left resize shrink width 10px + bindsym $down resize grow height 10px + bindsym $up resize shrink height 10px + bindsym $right resize grow width 10px + + # Ditto, with arrow keys + bindsym Left resize shrink width 10px + bindsym Down resize grow height 10px + bindsym Up resize shrink height 10px + bindsym Right resize grow width 10px + + # Return to default mode + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+r mode "resize" + +# Screenshot (Grimshot) +# Captures the currently active window +bindsym $mod+g exec grimshot save active +# Allows manually selecting a rectangular region +bindsym $mod+Shift+g exec grimshot save area +# Captures currently active output +bindsym $mod+Mod1+g exec grimshot save output +# Allows manually selecting a single window +bindsym $mod+Ctrl+g exec grimshot save window + +# Bookmarks +# Enter selected bookmark into target text field +bindsym $mod+i exec wtype $(grep -v '^#' ~/.local/share/bookmarks/bookmarks | bemenu -p Bookmark: -l 50 -c -M 500 --fn 'Monospace 14' --tf '#ff4e00' --ff '#dbc077' --hf '#ff4e00' | cut -d ' ' -f1) wtype -k Return + +# Insert bookmark into bookmark file (~/.local/share/bookmarks/bookmarks) +bindsym $mod+Shift+i exec ~/.local/bin/bookmark_insert + +# Emojis +bindsym $mod+Shift+e exec wtype $(awk '{print $1, $0}' ~/.local/share/chars/emojis* | bemenu -p Emoji: -l 25 -c -M 500 --fn 'Noto Color Emoji,Monospace 14' --tf '#ff4e00' --ff '#dbc077' --hf '#ff4e00' | awk '{print $1}') + +# Gopass +bindsym $mod+y exec ~/.local/bin/pass_copy +bindsym $mod+u exec ~/.local/bin/pass_user_copy +bindsym $mod+p exec ~/.local/bin/pass_autofill + +####################### +# EXECS +####################### + +# Notifications +exec_always pgrep -x dunst > /dev/null || dunst + +# Wlsunset (Night Light) +exec_always pgrep -x wlsunset > /dev/null || wlsunset -l 47.6 -L -122.3 -t 3500 -T 6000 + +# udiskie - auto usb mounting +exec /usr/bin/udiskie & + +# Network Manager tray applet +#exec /usr/bin/nm-applet + +# Bluetooth manager tray applet +exec /usr/bin/blueman-applet + +# Pipewire +exec /usr/libexec/pipewire-launcher + + +# Idle configuration +#exec swayidle -w \ +# timeout 3200 'swaymsg "output * dpms off"' \ +# resume 'swaymsg "output * dpms on"' \ +# before-sleep 'swaylock -f' +# timeout 15 'if pgrep -x swaylock; then swaymsg "output * dpms off"; fi' \ + +####################### +# DECORATIONS +####################### + +# Gaps +smart_gaps off +gaps inner 5 +gaps outer 5 + +# Window Borders +default_border pixel 3 +default_floating_border none +client.focused "#D27A31" "#5F9EA0" "#000000" "#D27A31" + +####################### +# INPUTS +####################### + +input type:keyboard { + # Capslock key should work as escape key + # See /usr/share/X11/xkb/rules/xorg.lst for options + xkb_layout "us(altgr-intl)" + xkb_options caps:escape + + repeat_delay 250 + repeat_rate 45 +} + +# Disable trackpad by default +#input "1739:52824:SYNA8008:00_06CB:CE58_Touchpad" { +# events disable +#} + +# Set trackpoint sensitivity on Laptop +input "2:10:TPPS/2_Elan_TrackPoint" { + pointer_accel 1.0 + accel_profile "flat" +} + +# Set trackpoint sensitivity on Tex Shinobi USB +input "1241:1031:USB-HID_Keyboard_Mouse" { + pointer_accel 0.3 + accel_profile "flat" +} + + +# Hide mouse cursor after inactivity +seat * hide_cursor 10000 + +seat seat0 xcursor_theme breeze_cursors 24 + +# Enable/disable trackpad +bindsym $mod+t exec swaymsg input "1739:52824:SYNA8008:00_06CB:CE58_Touchpad" events disabled +bindsym $mod+Shift+t exec swaymsg input "1739:52824:SYNA8008:00_06CB:CE58_Touchpad" events enabled + +####################### +# OUTPUTS +####################### + +# Lid stuff +set $laptop eDP-1 +bindswitch --reload --locked lid:on output $laptop disable +bindswitch --reload --locked lid:off output $laptop enable + +####################### +# WORKSPACES +####################### + +# Assign workspaces to numbers +set $ws1 "1" +set $ws2 "2" +set $ws3 "3" +set $ws4 "4" +set $ws5 "5" +set $ws6 "6" +set $ws7 "7" + +# Switch to workspace +bindsym $mod+1 workspace $ws1 +bindsym $mod+2 workspace $ws2 +bindsym $mod+3 workspace $ws3 +bindsym $mod+4 workspace $ws4 +bindsym $mod+5 workspace $ws5 +bindsym $mod+6 workspace $ws6 +bindsym $mod+0 workspace $ws7 + +# Move focused container to workspace +bindsym $mod+Shift+1 move container to workspace $ws1 +bindsym $mod+Shift+2 move container to workspace $ws2 +bindsym $mod+Shift+3 move container to workspace $ws3 +bindsym $mod+Shift+4 move container to workspace $ws4 +bindsym $mod+Shift+5 move container to workspace $ws5 +bindsym $mod+Shift+6 move container to workspace $ws6 +bindsym $mod+Shift+0 move container to workspace $ws7 + + +####################### +# BAR +####################### + +bar { + position top + font "Monospace 17" + height 40 + strip_workspace_numbers yes + status_command ~/.config/sway/scripts/bar.sh + + colors { + statusline #c0c0c0 + background #1a1a1aAA + inactive_workspace #2a2a2aAA #2a2a2aAA #555555AA + focused_workspace #2a2a2aAA #555555AA #ddddddAA + } + +} + diff --git a/.config/sway/scripts/bar.sh b/.config/sway/scripts/bar.sh new file mode 100755 index 0000000..f2f4791 --- /dev/null +++ b/.config/sway/scripts/bar.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +get_date() { + date '+%H:%M %a %d/%m/%y' +} + +get_battery() { + BATTERY_PATH="/sys/class/power_supply/BAT0" + + if [ -f "$BATTERY_PATH/capacity" ]; then + BAT_PERCENT=$(cat "$BATTERY_PATH/capacity") + BAT_STATUS=$(cat "$BATTERY_PATH/status") + + printf "%s%%" "$BAT_PERCENT" + + if [ "$BAT_STATUS" = "Charging" ] || [ "$BAT_STATUS" = "Unknown" ]; then + printf "^" + fi + else + printf "NoBat" + fi +} + +get_volume() { + SINK=$(pactl info | awk -F': ' '/Default Sink/ {print $2}') + VOLUME=$(pactl get-sink-volume "$SINK" | awk '{print $5}' | head -n 1) + MUTE_STATUS=$(pactl get-sink-mute "$SINK" | awk '{print $2}') + + printf "%s" "$VOLUME" + [ "$MUTE_STATUS" = "yes" ] && printf " (m)" +} + +while true; do + printf "V: %s | %s | B: %s\n" "$(get_volume)" "$(get_date)" "$(get_battery)" + sleep 1 +done + diff --git a/.config/sway/scripts/clamshell.sh b/.config/sway/scripts/clamshell.sh new file mode 100755 index 0000000..13db218 --- /dev/null +++ b/.config/sway/scripts/clamshell.sh @@ -0,0 +1,6 @@ +#!/usr/bin/bash +if grep -q open /proc/acpi/button/lid/LID/state; then + swaymsg output eDP-1 enable +else + swaymsg output eDP-1 disable +fi diff --git a/.config/swaylock/config b/.config/swaylock/config new file mode 100644 index 0000000..1849317 --- /dev/null +++ b/.config/swaylock/config @@ -0,0 +1,32 @@ +# Image +image=~/.config/wallpapers/wall.jpg +scaling=fill + +# Indicator +ignore-empty-password +indicator-caps-lock +indicator-radius=100 +indicator-thickness=20 +line-color=1f1d2e +ring-color=191724 +inside-color=1f1d2e +key-hl-color=eb6f92 +separator-color=00000000 +text-color=e0def4 +text-caps-lock-color="" +line-ver-color=eb6f92 +ring-ver-color=eb6f92 +inside-ver-color=1f1d2e +text-ver-color=e0def4 +ring-wrong-color=31748f +text-wrong-color=31748f +inside-wrong-color=1f1d2e +inside-clear-color=1f1d2e +text-clear-color=e0def4 +ring-clear-color=9ccfd8 +line-clear-color=1f1d2e +line-wrong-color=1f1d2e +bs-hl-color=31748f + +# Behavior +show-failed-attempts diff --git a/.config/wallpapers/wall.jpg b/.config/wallpapers/wall.jpg new file mode 100644 index 0000000..5abd8f6 Binary files /dev/null and b/.config/wallpapers/wall.jpg differ diff --git a/.local/bin/bookmark_insert b/.local/bin/bookmark_insert new file mode 100755 index 0000000..b292b07 --- /dev/null +++ b/.local/bin/bookmark_insert @@ -0,0 +1,32 @@ +#!/bin/sh + +bookmarks_file="$HOME/.local/share/bookmarks/bookmarks" + +if [ ! -f "$bookmarks_file" ]; then + notify-send "Error" "Bookmark file doesn't exist. Please pull the repo." + echo "Bookmark file doesn't exist. Please pull the repo." >&2 + exit 1 +fi + +# Try clipboard first, fall back to primary +clipboard_text=$(wl-paste --no-newline 2>/dev/null) +[ -z "$clipboard_text" ] && clipboard_text=$(wl-paste -p --no-newline 2>/dev/null) + +# Trim leading/trailing whitespace +clipboard_text=$(echo "$clipboard_text" | xargs) + +# Remove trailing slashes +clipboard_text=$(echo "$clipboard_text" | sed 's#/$##') + +# Check if clipboard is not empty +if [ -n "$clipboard_text" ]; then + if grep -Fxq "$clipboard_text" "$bookmarks_file"; then + notify-send "Bookmark already exists!" "$clipboard_text" + else + echo "$clipboard_text" >> "$bookmarks_file" + notify-send "Bookmark saved" "$clipboard_text" + sh "$HOME/.local/bin/bookmark_update" + fi +else + notify-send "No text to save" "Clipboard and primary selection are empty." +fi diff --git a/.local/bin/bookmark_update b/.local/bin/bookmark_update new file mode 100755 index 0000000..1c42e40 --- /dev/null +++ b/.local/bin/bookmark_update @@ -0,0 +1,29 @@ +#!/bin/sh + +# Try to source keychain's environment file +if [ -f "$HOME/.keychain/$(hostname)-sh" ]; then + . "$HOME/.keychain/$(hostname)-sh" +fi + +# Define the paths and repository +bookmarks_file="$HOME/.local/share/bookmarks/bookmarks" +repo_path="$HOME/.local/share/bookmarks" + +# Pull the latest changes +cd "$repo_path" || exit +git pull origin master + +# Check if the bookmarks file has changed +if [ -n "$(git status --porcelain "$bookmarks_file")" ]; then + # Add and commit the bookmarks file + git add "$bookmarks_file" + git commit -m "Update bookmarks file" + + # Push the changes and log output + GIT_SSH_COMMAND="ssh -i ~/.ssh/ry_ecdsa" git push origin master 2>&1 | tee -a /tmp/bookmark_git_push.log + + notify-send "Bookmarks updated" "Push your changes." +else + notify-send "No changes" "No changes to the bookmarks file." +fi + diff --git a/.local/bin/pass_autofill b/.local/bin/pass_autofill new file mode 100755 index 0000000..da33a96 --- /dev/null +++ b/.local/bin/pass_autofill @@ -0,0 +1,22 @@ +#!/bin/sh + +entry=$(gopass list --flat | bemenu -p Autofill: -l 25 -c -M 500 --fn 'Monospace 14' --tf '#ff4e00' --ff '#dbc077' --hf '#ff4e00') + +if [ -n "$entry" ]; then + username=$(gopass show "$entry" | grep '^username:' | cut -d' ' -f2-) + password=$(gopass show -o "$entry") + + if [ -z "$password" ]; then + notify-send "Gopass Error" "No password for $entry" + exit 1 + fi + + notify-send "Autofill in 1s: Focus username field in form" + sleep 1 + + # Type username, press Tab, then password, then Enter + wtype "$username" + wtype -k Tab + wtype "$password" + wtype -k Return +fi diff --git a/.local/bin/pass_copy b/.local/bin/pass_copy new file mode 100755 index 0000000..7da4912 --- /dev/null +++ b/.local/bin/pass_copy @@ -0,0 +1,8 @@ +#!/bin/sh + +entry=$(gopass list --flat | bemenu -p Password: -l 25 -c -M 500 --fn 'Monospace 14' --tf '#ff4e00' --ff '#dbc077' --hf '#ff4e00') + +if [ -n "$entry" ]; then + gopass show -c "$entry" 2>/dev/null || notify-send "Gopass Error" "Failed to copy: $entry" +fi + diff --git a/.local/bin/pass_user_copy b/.local/bin/pass_user_copy new file mode 100755 index 0000000..c5784e5 --- /dev/null +++ b/.local/bin/pass_user_copy @@ -0,0 +1,8 @@ +#!/bin/sh + +entry=$(gopass list --flat | bemenu -p Username: -l 25 -c -M 500 --fn 'Monospace 14' --tf '#ff4e00' --ff '#dbc077' --hf '#ff4e00') + +if [ -n "$entry" ]; then + gopass show -c "$entry" username 2>/dev/null || notify-send "Gopass Error" "Failed to copy username from: $entry" +fi + diff --git a/.local/bin/todo b/.local/bin/todo new file mode 100755 index 0000000..7f9bf90 --- /dev/null +++ b/.local/bin/todo @@ -0,0 +1,47 @@ + + +#!/bin/sh + +TODO_FILE="$HOME/docs/todo.txt" +ARCHIVE_FILE="$HOME/docs/todo-archive.txt" +TODAY="$(date +%Y-%m-%d)" + +case "$1" in + add) + shift + echo "($TODAY) $*" >> "$TODO_FILE" + echo "Added: ($TODAY) $*" + ;; + lsa) + nl -w2 -s'. ' "$TODO_FILE" + ;; + ls) + grep -v '^x ' "$TODO_FILE" | nl -w2 -s'. ' + ;; + done) + if [ -z "$2" ]; then + echo "Usage: $0 done " + exit 1 + fi + TASK=$(sed -n "${2}p" "$TODO_FILE") + [ -z "$TASK" ] && { echo "Invalid task number."; exit 1; } + sed -i "${2}s/^/x ($TODAY) /" "$TODO_FILE" + echo "Marked done: $TASK" + ;; + archive) + grep '^x ' "$TODO_FILE" >> "$ARCHIVE_FILE" + sed -i '/^x /d' "$TODO_FILE" + echo "Archived completed tasks to $ARCHIVE_FILE" + ;; + tags) + if [ -z "$2" ]; then + echo "Usage: $0 tags <+tag|@context>" + exit 1 + fi + grep "$2" "$TODO_FILE" | grep -v '^x ' | nl -w2 -s'. ' + ;; + help|*) + echo "Usage: $0 {add | list | done | archive}" + ;; +esac + diff --git a/.local/bin/vault b/.local/bin/vault new file mode 100755 index 0000000..5935c75 --- /dev/null +++ b/.local/bin/vault @@ -0,0 +1,50 @@ +#!/bin/sh + +CONTAINER=${2:-"$HOME/vault.hc"} + +BASENAME=$(basename "$CONTAINER") +MAPPER_NAME="${BASENAME%.*}" +MOUNT_POINT="/mnt/$MAPPER_NAME" + +case "$1" in + open) + if [ ! -f "$CONTAINER" ]; then + echo "Container not found: $CONTAINER" + exit 1 + fi + + if [ -e "/dev/mapper/$MAPPER_NAME" ]; then + echo "Already opened at /dev/mapper/$MAPPER_NAME" + exit 1 + fi + + mkdir -p "$MOUNT_POINT" || exit 1 + + if sudo cryptsetup open --type tcrypt "$CONTAINER" "$MAPPER_NAME"; then + sudo mount "/dev/mapper/$MAPPER_NAME" "$MOUNT_POINT" && + echo "Mounted at $MOUNT_POINT" + else + echo "Failed to open container." + exit 1 + fi + ;; + + close) + if mountpoint -q "$MOUNT_POINT"; then + sudo umount "$MOUNT_POINT" + fi + + if [ -e "/dev/mapper/$MAPPER_NAME" ]; then + sudo cryptsetup close "$MAPPER_NAME" + echo "Closed and unmounted $MOUNT_POINT." + else + echo "Container is not open." + fi + ;; + + *) + echo "Usage: $0 {open|close} [path/to/container.hc]" + exit 1 + ;; +esac + diff --git a/.local/share/chars/emojis b/.local/share/chars/emojis new file mode 100644 index 0000000..6803731 --- /dev/null +++ b/.local/share/chars/emojis @@ -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/.yash_env b/.yash_env new file mode 100644 index 0000000..bec6c11 --- /dev/null +++ b/.yash_env @@ -0,0 +1,19 @@ +#!/bin/sh + +# Environment exports +export XDG_CONFIG_HOME="$HOME/.config" +export XDG_CACHE_HOME="$HOME/.cache" +export XDG_DATA_HOME="$HOME/.local/share" +export VISUAL=nvim +export EDITOR=nvim +export BROWSER=/usr/bin/librewolf +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 + +export XDG_DATA_DIRS="/usr/share" +export XDG_CURRENT_DESKTOP="sway" +export XDG_SESSION_DESKTOP="sway" +export XDG_SESSION_TYPE="wayland" +export GTK_ICON_THEME="Papirus" +export QT_QPA_PLATFORMTHEME=gtk3 + diff --git a/.yash_profile b/.yash_profile new file mode 100644 index 0000000..3cc12af --- /dev/null +++ b/.yash_profile @@ -0,0 +1,9 @@ +#!/bin/sh + +if [ -f "$HOME/.yash_env" ]; then + . "$HOME/.yash_env" +fi + +if [ -z "$WAYLAND_DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then + exec dbus-run-session sway +fi diff --git a/.yashrc b/.yashrc new file mode 100644 index 0000000..ef6417e --- /dev/null +++ b/.yashrc @@ -0,0 +1,69 @@ + +# Load global initialization script, if exists. +if [ -f /etc/yashrc ]; then + . /etc/yashrc +fi + + +####################################################### +# Alias +####################################################### + +alias v='nvim' +alias vim='nvim' +alias vi='nvim' + +alias add='doas apk add' +alias del='doas apk del' +alias search='apk search' +alias info='doas apk info' +alias update='doas apk update' +alias upgrade='doas apk upgrade' + +alias ll='ls -lF --color=auto' +alias la='ls -A --color=auto' +alias gs='git status' +alias clr='clear' + +####################################################### +# Exports & Shell Vars +####################################################### + +export HISTFILE="$HOME/.yash_history" +export HISTSIZE=99999 +export PATH="$HOME/bin:/sbin:/usr/sbin:/bin:/usr/bin:$PATH" + +####################################################### +# Prompt +####################################################### + +PS1='$(pwd) $ ' + +####################################################### +# SSH +####################################################### + +keys() { + eval "$(keychain --eval --quiet ry_ecdsa)" + eval "$(keychain --eval --quiet id_rsa)" +} + +keys + +####################################################### +# WORK +####################################################### + +# Wireguard +alias wgup='doas wg-quick up /etc/wireguard/wg0.conf' +alias wgdown='doas wg-quick down /etc/wireguard/wg0.conf' + +####################################################### +# Misc +####################################################### + +# Uncomment if you want to clear the screen with Ctrl-L. +bindkey --emacs '\^L' clear-and-redraw-all +bindkey --vi-insert '\^L' clear-and-redraw-all +bindkey --vi-command '\^L' clear-and-redraw-all + diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29