diff --git a/.config/qutebrowser/autoconfig.yml b/.config/qutebrowser/autoconfig.yml new file mode 100644 index 0000000..51c5919 --- /dev/null +++ b/.config/qutebrowser/autoconfig.yml @@ -0,0 +1,155 @@ +# 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/master/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 + '*://gethomepage.dev/*': true + '*://jf.opal.sh/*': true + '*://jsonformatter.curiousconcept.com/*': true + '*://rateyourmusic.com/*': true + '*://revelationofdoom.com/*': true + '*://www.duplicati.com/*': true + '*://www.newegg.com/*': true + '*://www.vitamix.com/*': true + '*://www.youtube.com/*': true + content.notifications.enabled: + https://jf.opal.sh: 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..6fbf88d --- /dev/null +++ b/.config/qutebrowser/config.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +from qutebrowser.api import interceptor + +# 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 = "~/downloads" +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/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 index a321c6b..3f7b25e 100644 --- a/.config/sway/config +++ b/.config/sway/config @@ -163,8 +163,10 @@ bindsym $mod+Ctrl+g exec grimshot save window #bindsym $mod+Shift+e exec wlogout -p layer-shell # 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) +# Insert bookmark into bookmark file (~/.local/share/bookmarks/bookmarks) bindsym $mod+Shift+i exec ~/.local/bin/bookmark_insert # Emojis diff --git a/.local/bin/bookmark_insert b/.local/bin/bookmark_insert index bf39022..ebc25d8 100755 --- a/.local/bin/bookmark_insert +++ b/.local/bin/bookmark_insert @@ -9,20 +9,24 @@ if [ ! -f "$bookmarks_file" ]; then exit 1 fi -# Trim leading and trailing whitespace from clipboard +# Trim leading/trailing whitespace clipboard_text=$(echo "$clipboard_text" | xargs) +# Strip https:// or http:// +clipboard_text=$(echo "$clipboard_text" | sed 's#^https\?://##') + +# Remove trailing slashes +clipboard_text=$(echo "$clipboard_text" | sed 's#/$##') + # Check if clipboard is not empty if [ -n "$clipboard_text" ]; then - # Escape special characters for grep and check for exact match if grep -Fxq "$clipboard_text" "$bookmarks_file"; then notify-send "Bookmark already exists!" "$clipboard_text" else - # Append the text to the bookmarks file echo "$clipboard_text" >> "$bookmarks_file" notify-send "Bookmark saved" "$clipboard_text" - # Run git update script + # Run git update script sh "$HOME/.local/bin/bookmark_update" fi else