remove qutebrower. - dotfiles - These are my dotfiles. There are many like it, but these are mine.
(HTM) git clone git://jay.scot/dotfiles
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit f1ecc6cd5d87ce0369fe692213b63744516cc59b
(DIR) parent 3531ea824509e3e833008e785a337228714692c5
(HTM) Author: Jay Scott <me@jay.scot>
Date: Tue, 25 Nov 2025 18:17:34 +0000
remove qutebrower.
Diffstat:
M .gitignore | 10 +++++-----
M README | 12 ++++++------
M ashrc | 4 ++--
A bin/fdm_parse_feeds.sh | 24 ++++++++++++++++++++++++
D bin/link-handler | 40 -------------------------------
A bin/link-handler.sh | 39 +++++++++++++++++++++++++++++++
R bin/music -> bin/music.sh | 0
A bin/offline.sh | 10 ++++++++++
R bin/switch_audio -> bin/old/switch… | 0
A bin/update_feeds.sh | 20 ++++++++++++++++++++
R bin/yt-feedurl -> bin/yt-feedurl.sh | 0
D bin/ytd | 77 -------------------------------
A bin/ytd.sh | 78 +++++++++++++++++++++++++++++++
M bootstrap.sh | 2 +-
A fdm/config | 70 +++++++++++++++++++++++++++++++
M foot/foot.ini | 2 +-
D isync/mbsyncrc | 24 ------------------------
M lynx/config | 4 ++--
M mutt/muttrc | 107 +++++++++++++++++++++++--------
D mutt/theme | 94 -------------------------------
D newsraft/config | 17 -----------------
D newsraft/feeds | 49 -------------------------------
D qutebrowser/blank.html | 44 -------------------------------
D qutebrowser/config.py | 108 -------------------------------
D qutebrowser/scripts/fingerprint.py | 43 ------------------------------
D qutebrowser/scripts/gruvbox.py | 332 -------------------------------
D qutebrowser/scripts/redirects.py | 70 -------------------------------
D qutebrowser/scripts/user_agent.py | 31 -------------------------------
D qutebrowser/userscripts/password_f… | 388 ------------------------------
A sfeed/sfeedrc | 51 +++++++++++++++++++++++++++++++
M sway/config | 7 +++----
M waybar/config | 3 ---
32 files changed, 392 insertions(+), 1368 deletions(-)
---
(DIR) diff --git a/.gitignore b/.gitignore
@@ -4,11 +4,6 @@ qutebrowser/autoconfig.yml
qutebrowser/bookmarks
qutebrowser/quickmarks
-# mpd
-mpd/mpd.db
-mpd/mpd.pid
-mpd/mpdstate
-
# misc
*.swp
bin/radio
@@ -21,3 +16,8 @@ nvim/lazy-lock.json
# mutt contacts
mutt/aliases
mutt/cache
+
+# sfeeds
+sfeed/feeds
+sfeed/mbox
+sfeed/fdm.cache
(DIR) diff --git a/README b/README
@@ -7,19 +7,19 @@
These are my dotfiles. There are many like it, but these are mine.
-They are managed via the bootstrap.sh shell script, this links the files and
-folders in the appropriate place. They are used on Alpine Linux which I use as
-my main desktop OS and are forever evolving.
+They are managed via the bootstrap.sh shell script, this links the files
+and folders in the appropriate place. They are used on Alpine Linux
+which I use as my main desktop OS and are forever evolving.
operating sys : alpine linux
window manager : sway
terminal : foot
launcher : bemenu
- email : neomutt
- browser : qutebrowser / lynx
+ email : fdm / mutt
+ browser : lynx / librewolf
media : kew / mpv
password mgmt : pass
vpn : mullvad
- news : newsraft
+ news : sfeed
(DIR) diff --git a/ashrc b/ashrc
@@ -11,7 +11,7 @@ export BROWSER="lynx"
export PATH=$PATH:$HOME/bin
# tools
-export OPENER=~/bin/link-handler
+export OPENER=~/bin/link-handler.sh
export BEMENU_OPTS="-l 10 -p '>>> ' --tb '#000000' --tf '#ffffff' --hf '#444444' -c -W0.4 --fn 'Hack 14'"
# lynx
@@ -54,7 +54,7 @@ alias gma='git commit -am'
# neo
alias vim='nvim'
-alias mutt='neomutt'
+#alias mutt='neomutt'
alias mpv="mpv --autofit=30% --really-quiet --no-terminal"
# vpn
(DIR) diff --git a/bin/fdm_parse_feeds.sh b/bin/fdm_parse_feeds.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# reads text from stdin containing a url. The url is then parsed
+# by rdrview, https://github.com/eafer/rdrview, and the url content
+# returned appending to the end of the original text.
+#
+# I use this with sfeed and fdm to download feed contents without the
+# need of a browser.
+
+data=$(cat)
+
+url=$(echo "$data" | grep -o -E 'https?://[^"]+|gemini://[^"]+')
+uri_lower="$(printf "%s" "$url" | tr '[:upper:]' '[:lower:]')"
+
+case "$uri_lower" in
+'gemini:'*)
+ content=$(gemget -o - "$url")
+ ;;
+'http'*)
+ content=$(rdrview -H "$url" | lynx -stdin --dump -force_html)
+ ;;
+esac
+
+printf "%s\n\n%s" "$data" "$content"
(DIR) diff --git a/bin/link-handler b/bin/link-handler
@@ -1,40 +0,0 @@
-#!/bin/sh
-
-launcher="setsid"
-
-# applications
-player="mpv --autofit=30% --really-quiet --no-terminal"
-gemini="foot -e amfora"
-gopher="foot -e lynx"
-pdf="zathura"
-images="swayimg"
-torrent="qbittorrent"
-browser="foot -e rdrview"
-
-uri="$1"
-uri_lower="$(printf "%s" "$uri" | tr '[:upper:]' '[:lower:]')"
-
-case "$uri_lower" in
- *.mkv | *.mp4 | *.webm | *youtube.com* | *odysee.com*)
- $player "$uri" &
- ;;
- *.gmi | gemini:*)
- $gemini "$uri"
- ;;
- gopher:*)
- $gopher "$uri" &
- ;;
- magnet:*)
- $launcher "$torrent" "$uri" &
- ;;
- *.pdf | *.ps | *.epub)
- $launcher "$pdf" "$uri"
- ;;
- *.jpg | *.jpe | *.jpeg | *.png | *.gif | *.webp)
- $launcher "$images" "$uri"
- ;;
- *)
- #$launcher "$BROWSER" "$uri"
- $launcher $browser "$uri"
- ;;
-esac
(DIR) diff --git a/bin/link-handler.sh b/bin/link-handler.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+launcher="setsid"
+
+# applications
+player="mpv --autofit=30% --really-quiet --no-terminal"
+gemini="foot -e amfora"
+gopher="foot -e lynx"
+pdf="zathura"
+images="swayimg"
+torrent="qbittorrent"
+browser="foot -e rdrview"
+
+uri="$1"
+uri_lower="$(printf "%s" "$uri" | tr '[:upper:]' '[:lower:]')"
+
+case "$uri_lower" in
+ *.mkv | *.mp4 | *.webm | *youtube.com* | *odysee.com*)
+ $player "$uri" &
+ ;;
+ *.gmi | gemini:*)
+ $launcher $gemini "$uri"
+ ;;
+ gopher:*)
+ $gopher "$uri" &
+ ;;
+ magnet:*)
+ $launcher "$torrent" "$uri" &
+ ;;
+ *.pdf | *.ps | *.epub)
+ $launcher "$pdf" "$uri"
+ ;;
+ *.jpg | *.jpe | *.jpeg | *.png | *.gif | *.webp)
+ $launcher "$images" "$uri"
+ ;;
+ *)
+ $launcher $browser "$uri"
+ ;;
+esac
(DIR) diff --git a/bin/music b/bin/music.sh
(DIR) diff --git a/bin/offline.sh b/bin/offline.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# youtube videos
+ytd.sh
+
+# rss feeds (http/gemini) download
+update_feeds.sh
+
+# mail
+fdm -f ~/.config/fdm/config fetch
(DIR) diff --git a/bin/switch_audio b/bin/old/switch_audio
(DIR) diff --git a/bin/update_feeds.sh b/bin/update_feeds.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# wrapper for managing my feed process.
+# - update new feeds
+# - generate mbox of feeds
+# - parse feeds with fdm and push to Maildir format.
+
+sfeedroot="$HOME/.config/sfeed"
+feedsdir="${sfeedroot}/feeds"
+fdmconfig="$HOME/.config/fdm/config"
+
+if ! test -r "${fdmconfig}"; then
+ echo "fdm configuration file \"${fdmconfig}\" does not exist or is not readable." >&2
+ exit 1
+fi
+
+sfeed_update "${sfeedroot}/sfeedrc"
+
+sfeed_mbox "${feedsdir}"/* >~/.config/sfeed/mbox
+fdm -f "${fdmconfig}" -afeeds fetch
(DIR) diff --git a/bin/yt-feedurl b/bin/yt-feedurl.sh
(DIR) diff --git a/bin/ytd b/bin/ytd
@@ -1,77 +0,0 @@
-#!/bin/sh
-
-# yt-dlp subscription fetcher
-# jay <me@jay.scot>
-
-savepath="$HOME/media/youtube"
-cachedir="$HOME/.cache/yt_dl"
-yt="yt-dlp"
-baseurl="https://www.youtube.com/playlist?list="
-ody_url="https://odysee.com/"
-
-info() {
- printf "\033[35mYT ➤\033[36m %s\033[0m\n" "$1"
-}
-
-main() {
- mkdir -p "${cachedir}"
- mkdir -p "${savepath}"
-
- action="$1"
-
- "$action" "steve1989mreinfo" "UU2I6Et1JkidnnbWgJFiMeHA"
- "$action" "simon_wilson" "UUQCrKxBj5Id79syQEsY2Qxg"
- "$action" "c90adventures" "UUVqpNG1R72i21jh-nAxEk4A"
- "$action" "indigo_traveller" "UUXulruMI7BHj3kGyosNa0jA"
- "$action" "pppeter" "UUnHEz9DZ6EAof1-DaQGD_Xw"
- "$action" "abroad_in_japan" "UUHL9bfHTxCMi-7vfxQ-AYtg"
- "$action" "serpentza" "UUl7mAGnY4jh4Ps8rhhh8XZg"
- "$action" "the_lazy_peon" "UUE-f0sqi-H7kuLT0YiW9rcA"
- "$action" "zav_alsop" "UUcjx6m03fZwtRBFn1Cf7kKQ"
- "$action" "steve_marsh" "UUBhQuxcHU3aydk_zTXcbdTg"
- "$action" "planes_trains_everything" "UUcKw8Eg0FfRvhIAnC0cPGAA"
- "$action" "we_hate_the_cold" "UULmltEyJ0zBsKnL8bWSdn3A"
- "$action" "astonishing_glasgow" "UUIDIqg7LhjLFCyD2awY_38g"
- "$action" "drain_cleaning_aus" "UU7sGXeJOixPBgJ3r5R55JYg"
- "$action" "mike_okay" "UUpp3cHR9TWVyXqL1AVw4XkA"
- "$action" "rhykker" "UURl31PWkfF0a3j3hiDRaCGA"
- "$action" "brodie_robertson" "UUld68syR8Wi-GY_n4CaoJGA"
- "$action" "distrotube" "UUVls1GmFKf6WlTraIb_IaJg"
- "$action" "max_roving" "UUOxpcQ7KtZc7fd0jhnWS0Sg"
- "$action" "misfit_minds" "UUEpHkpv4_CgZIEadjjOv4jA"
- "$action" "better_offline" "UUsdzuPs5NKvdsBkQnP7Af8w"
- "$action" "simon_doherty" "UU2smcaU7852QtVvJz48dCRw"
- "$action" "phil_carr" "UULva3lkHR6B5OO-eiVaPnDg"
- "$action" "andrea_borman" "UUJsinEiaDqEn8a-GcADVEVA"
- "$action" "veronica_explains" "UUMiyV_Ib77XLpzHPQH_q0qQ"
- "$action" "chubby_trekka" "UU5YskHOZiTEzjdps94jFX1g"
- "$action" "bythecurb" "UUUZ68a2OJnyTutbTNG1tSpA"
-}
-
-get_video() {
- info "Fetching latest from $1"
- mkdir -p "${savepath}/${1}"
-
- "$yt" -q --restrict-filename \
- --download-archive "${cachedir}/${1}" \
- "${baseurl}${2}" \
- -o "${savepath}/${1}/%(playlist_index)s_%(title)s.%(ext)s"
-}
-
-catchup() {
- info "Catching up on $1"
- "$yt" --flat-playlist --get-id \
- "${baseurl}${2}" | sed 's/.*/youtube &/' >"${cachedir}/${1}"
-}
-
-case "$1" in
--m)
- main catchup
- ;;
--n)
- catchup "$2" "$3"
- ;;
-*)
- main get_video
- ;;
-esac
(DIR) diff --git a/bin/ytd.sh b/bin/ytd.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+
+# yt-dlp subscription fetcher
+# jay <me@jay.scot>
+
+savepath="$HOME/media/youtube"
+cachedir="$HOME/.cache/yt_dl"
+yt="yt-dlp"
+baseurl="https://www.youtube.com/playlist?list="
+
+info() {
+ printf "\033[35mYT ➤\033[36m %s\033[0m\n" "$1"
+}
+
+main() {
+ mkdir -p "${cachedir}"
+ mkdir -p "${savepath}"
+
+ action="$1"
+
+ "$action" "steve1989mreinfo" "UU2I6Et1JkidnnbWgJFiMeHA"
+ "$action" "simon_wilson" "UUQCrKxBj5Id79syQEsY2Qxg"
+ "$action" "c90adventures" "UUVqpNG1R72i21jh-nAxEk4A"
+ "$action" "indigo_traveller" "UUXulruMI7BHj3kGyosNa0jA"
+ "$action" "pppeter" "UUnHEz9DZ6EAof1-DaQGD_Xw"
+ "$action" "abroad_in_japan" "UUHL9bfHTxCMi-7vfxQ-AYtg"
+ "$action" "serpentza" "UUl7mAGnY4jh4Ps8rhhh8XZg"
+ "$action" "the_lazy_peon" "UUE-f0sqi-H7kuLT0YiW9rcA"
+ "$action" "zav_alsop" "UUcjx6m03fZwtRBFn1Cf7kKQ"
+ "$action" "steve_marsh" "UUBhQuxcHU3aydk_zTXcbdTg"
+ "$action" "planes_trains_everything" "UUcKw8Eg0FfRvhIAnC0cPGAA"
+ "$action" "we_hate_the_cold" "UULmltEyJ0zBsKnL8bWSdn3A"
+ "$action" "astonishing_glasgow" "UUIDIqg7LhjLFCyD2awY_38g"
+ "$action" "drain_cleaning_aus" "UU7sGXeJOixPBgJ3r5R55JYg"
+ "$action" "mike_okay" "UUpp3cHR9TWVyXqL1AVw4XkA"
+ "$action" "rhykker" "UURl31PWkfF0a3j3hiDRaCGA"
+ "$action" "brodie_robertson" "UUld68syR8Wi-GY_n4CaoJGA"
+ "$action" "distrotube" "UUVls1GmFKf6WlTraIb_IaJg"
+ "$action" "max_roving" "UUOxpcQ7KtZc7fd0jhnWS0Sg"
+ "$action" "misfit_minds" "UUEpHkpv4_CgZIEadjjOv4jA"
+ "$action" "better_offline" "UUsdzuPs5NKvdsBkQnP7Af8w"
+ "$action" "simon_doherty" "UU2smcaU7852QtVvJz48dCRw"
+ "$action" "phil_carr" "UULva3lkHR6B5OO-eiVaPnDg"
+ "$action" "andrea_borman" "UUJsinEiaDqEn8a-GcADVEVA"
+ "$action" "veronica_explains" "UUMiyV_Ib77XLpzHPQH_q0qQ"
+ "$action" "chubby_trekka" "UU5YskHOZiTEzjdps94jFX1g"
+ "$action" "bythecurb" "UUUZ68a2OJnyTutbTNG1tSpA"
+ "$action" "naomibrockwell" "UUSuHzQ3GrHSzoBbwrIq3LLA"
+ "$action" "gotbletu" "UUkf4VIqu3Acnfzuk3kRIFwA"
+}
+
+get_video() {
+ info "Fetching latest from $1"
+ mkdir -p "${savepath}/${1}"
+
+ "$yt" -q --restrict-filename \
+ --download-archive "${cachedir}/${1}" \
+ "${baseurl}${2}" \
+ -o "${savepath}/${1}/%(playlist_index)s_%(title)s.%(ext)s"
+}
+
+catchup() {
+ info "Catching up on $1"
+ "$yt" --flat-playlist --get-id \
+ "${baseurl}${2}" | sed 's/.*/youtube &/' >"${cachedir}/${1}"
+}
+
+case "$1" in
+-m)
+ main catchup
+ ;;
+-n)
+ catchup "$2" "$3"
+ ;;
+*)
+ main get_video
+ ;;
+esac
(DIR) diff --git a/bootstrap.sh b/bootstrap.sh
@@ -4,7 +4,7 @@ DOTFILES=$(pwd)
FILES='ashrc profile'
ROOT='bin'
-CONFIG='foot git isync lynx mutt newsraft nvim qutebrowser sway waybar'
+CONFIG='fdm foot git lynx mutt nvim sfeed sway waybar'
link() {
for f in $FILES; do ln -sfn "$DOTFILES/$f" "$HOME/.$f"; done
(DIR) diff --git a/fdm/config b/fdm/config
@@ -0,0 +1,70 @@
+
+# commands
+$imap_pass = $(pass tech/mailbox.org | head -n1)
+
+# macros.
+$path = "%h/.mail"
+$feedcache = "%h/.mail/fdm.cache"
+$feeddir = "%h/.mail/feeds/"
+$listdir = "%h/.mail/ml"
+$strurl = "(http[s]?://.*|gemini://.*)"
+
+# options
+set unmatched-mail keep
+set no-received
+cache "${feedcache}"
+
+# accounts
+account "feeds" disabled mbox "%[home]/.config/sfeed/mbox"
+account "personal" imaps
+ server "imap.mailbox.org"
+ port 993
+ user "me@jay.scot"
+ pass "${imap_pass}"
+
+# maildirs
+action "inbox" maildir "${path}/%u/Inbox"
+
+# mailing lists
+action "freebsd-announce" maildir "${listdir}/freebsd.announce"
+action "freebsd-current" maildir "${listdir}/freebsd.current"
+action "freebsd-questions" maildir "${listdir}/freebsd.questions"
+action "alpine-users" maildir "${listdir}/alpine.users"
+action "alpine-aports" maildir "${listdir}/alpine.aports"
+action "alpine-announce" maildir "${listdir}/alpine.announce"
+action "alpine-devel" maildir "${listdir}/alpine.devel"
+
+# feeds
+action "feedtag" tag "msgid" value "%1"
+action "feedget" rewrite "%h/bin/fdm_parse_feeds.sh"
+action "feedsave" {
+ maildir "${feeddir}%1"
+ add-to-cache "${feedcache}" key "%[msgid]"
+ keep
+}
+
+# alpine
+match "^List-Id:.*lists\\.alpinelinux\\.org" in headers {
+ match "^List-Id:.*announce" in headers action "alpine-announce"
+ match "^List-Id:.*devel" in headers action "alpine-devel"
+ match "^List-Id:.*users" in headers action "alpine-users"
+ match "^List-Id:.*aports" in headers action "alpine-aports"
+}
+
+# freebsd
+match "^List-Id:.*freebsd-.*\\.freebsd\\.org" in headers {
+ match "^List-Id:.*announce" in headers action "freebsd-announce"
+ match "^List-Id:.*current" in headers action "freebsd-current"
+ match "^List-Id:.*questions" in headers action "freebsd-questions"
+}
+
+# sfeeds
+match account "feeds" {
+ match case "^Message-ID: (.*)" in headers action "feedtag" continue
+ match matched and in-cache "${feedcache}" key "%[msgid]" action keep
+ match $strurl action "feedget" continue
+ match case "^X-Feedname: (.*)" in headers action "feedsave"
+}
+
+# match all mail and deliver using the 'inbox' action.
+match all action "inbox"
(DIR) diff --git a/foot/foot.ini b/foot/foot.ini
@@ -1,7 +1,7 @@
font=Hack:size=16
[url]
-launch=link-handler ${url}
+launch=link-handler.sh ${url}
#[key-bindings]
#show-urls-launch=Control+Shift+o
(DIR) diff --git a/isync/mbsyncrc b/isync/mbsyncrc
@@ -1,24 +0,0 @@
-Create Both
-Expunge Both
-Remove Both
-Sync All
-SyncState *
-
-IMAPAccount jay
-Host imap.mailbox.org
-User me@jay.scot
-PassCmd "pass show tech/smtp.mailbox.org"
-TLSType IMAPS
-
-IMAPStore jay-remote
-Account jay
-
-MaildirStore jay-local
-SubFolders Verbatim
-Path ~/.mail/jay/
-Inbox ~/.mail/jay/Inbox
-
-Channel jay
-Far :jay-remote:
-Near :jay-local:
-Patterns *
(DIR) diff --git a/lynx/config b/lynx/config
@@ -8,7 +8,7 @@ CHARACTER_SET:utf-8
ASSUME_CHARSET:utf-8
# image handing
-XLOADIMAGE_COMMAND:link-handler %s&
+XLOADIMAGE_COMMAND:link-handler.sh %s&
NO_PAUSE:TRUE
DEFAULT_EDITOR:/usr/bin/nvim
@@ -17,7 +17,7 @@ DEFAULT_EDITOR:/usr/bin/nvim
DEFAULT_KEYPAD_MODE:LINKS_ARE_NUMBERED
# clean and read
-EXTERNAL:http:link-handler '%s'
+EXTERNAL:http:link-handler.sh '%s'
# hide help menus
DEFAULT_USER_MODE:ADVANCED
(DIR) diff --git a/mutt/muttrc b/mutt/muttrc
@@ -1,10 +1,13 @@
-source ~/.config/mutt/gruvbox
-
# info
+set my_user = 'me@jay.scot'
+set my_pass = `pass tech/mailbox.org | head -n1`
set realname = 'Jay Scott'
set from = 'me@jay.scot'
-set my_user = 'me@jay.scot'
-set my_pass = "`pass tech/smtp.mailbox.org`"
+
+# SMTP settings
+set smtp_pass = $my_pass
+set smtp_url = smtps://$my_user@smtp.mailbox.org
+set ssl_force_tls = yes
# general
set envelope_from = yes
@@ -25,7 +28,7 @@ bind compose p pgp-menu
set pgp_use_gpg_agent = yes
set pgp_sign_as = 0726AF07C73389E1E4475B7EC88BBC696A39CCB0
set pgp_timeout = 3600
-set crypt_autosign = no
+set crypt_autosign = yes
set crypt_replyencrypt = yes
# html emails
@@ -41,6 +44,7 @@ set folder = ~/.mail
set header_cache = ~/.config/mutt/cache/headers
set message_cachedir = ~/.config/mutt/cache/bodies
set mailcap_path = ~/.config/mutt/mailcap
+set alias_file = ~/.config/mutt/aliases
set tmpdir = ~/.cache/
set spoolfile = "+jay/Inbox"
@@ -48,48 +52,97 @@ set postponed = "+jay/Drafts"
set record = "+jay/Sent"
# inbox
+mailboxes +jay
mailboxes ! `echo ~/.mail/jay/*`
-# SMTP settings
-set smtp_pass = $my_pass
-set smtp_url = smtps://$my_user@smtp.mailbox.org
-set ssl_force_tls = yes
+# mailing lists
+mailboxes +mailinglists
+mailboxes ! `echo ~/.mail/ml/*`
-# aliases
-set alias_file = ~/.config/mutt/aliases
-set sort_alias = alias
-set reverse_alias = yes
-source $alias_file
+# feeds
+mailboxes +feeds
+mailboxes ! `echo ~/.mail/feeds/*`
+
+set sort_alias = alias
+set reverse_alias = yes
+source $alias_file
# macros
-bind index g noop
bind index gg first-entry
bind index G last-entry
bind index <space> collapse-thread
macro index \Cr "T~U<enter><tag-prefix><clear-flag>N<untag-pattern>.<enter>" "mark all messages as read"
-macro index o "<shell-escape>mbsync -a -c \"$XDG_CONFIG_HOME\"/isync/mbsyncrc<enter>" "run isync to sync all mail"
+macro index o "<shell-escape>fdm -f ~/.config/fdm/config fetch<enter>" "run fdm to sync all mail"
macro index C "<copy-message>?<toggle-mailboxes>" "copy a message to a mailbox"
macro index A "<save-message>=jay/archive<enter><enter><sync-mailbox><enter>" "save to archive"
macro index M "<save-message>?<toggle-mailboxes>" "move a message to a mailbox"
-macro index,pager O "<pipe-message>urlscan -c<Enter>" "call urlscan to extract URLs out of a message"
# sorting
-set sort = threads
-set sort_aux = reverse-date
+set sort = threads
+set sort_aux = reverse-date
set pager_index_lines = 15
-set pager_context = 1
-set index_format = '%Z | %{%b %d %Y} | %-15.15F | %s'
+set pager_context = 1
+set index_format = '%Z | %{%b %d %Y} | %-15.15F | %s'
+
+# sidebar
+set mail_check_stats = yes
+set sidebar_visible = yes
+set sidebar_width = 25
+set sidebar_short_path = yes
+set sidebar_folder_indent = yes
+set sidebar_format = "%B%* %?N?%N?"
+set sidebar_divider_char = │
+bind index,pager \Ck sidebar-prev
+bind index,pager <tab> sidebar-next
+bind index,pager <backtab> sidebar-prev
+bind index,pager \Cl sidebar-open
# disable help menu
-set help = yes
+set help = no
# status bar
set sidebar_delim_chars = "/"
set status_chars = " *%A"
set status_format = "───[ Folder: %f ]───[%r%m messages%?n? (%n new)?%?d? (%d to delete)?%?t? (%t tagged)? ]───%>─%?p?( %p postponed )?───"
-ignore *
-unignore from date subject to cc
-unignore x-mailer
-unignore x-spam-status
-unignore x-spam-report
+# default
+color normal color223 color0
+
+# status bar
+color status color8 color0
+
+# highlight bar
+color indicator color223 color237
+
+# replied to
+color index color2 color0 ~Q
+
+# email info header
+color header color11 color0 "^(To:|From:|Date:|^Subject:)"
+
+# web links
+color body color2 color0 "https?://[^ ]+"
+color body color2 color0 "www.[^ ]+"
+
+# email addresss
+color body color2 color0 "[-a-z_0-9.%$]+@[-a-z_0-9.]+\\.[-a-z][-a-z]+"
+color body color2 color0 "mailto:[-a-z_0-9.]+@[-a-z_0-9.]+"
+
+# image links
+color body color2 color0 "\\[image\\ [0-9]+\\]"
+
+# sidebar
+color sidebar_new bold color11 color0
+color sidebar_divider bold color2 color0
+
+# patch syntax
+color body brightwhite default ^[[:space:]].*
+color body brightwhite default ^(diff).*
+color body white default ^[\-\-\-].*
+color body white default ^[\+\+\+].*
+color body green default ^[\+].*
+color body red default ^[\-].*
+color body brightblue default [@@].*
+color body brightwhite default ^(\s).*
+color body brightwhite default ^(Signed-off-by).*
+color body brightwhite default ^(Cc)
(DIR) diff --git a/mutt/theme b/mutt/theme
@@ -1,94 +0,0 @@
-
-color body color136 color234 "(jay|jay.scot)"
-
-# basic colors ---------------------------------------------------------
-color normal color241 color234
-color error color160 color234
-color tilde color235 color234
-color message color37 color234
-color markers color160 color254
-color attachment color254 color234
-color search color61 color234
-color status color241 color235
-color indicator color234 color136
-color tree color136 color234
-
-# basic monocolor screen
-mono bold bold
-mono underline underline
-mono indicator reverse
-mono error bold
-
-# index ----------------------------------------------------------------
-
-color index color160 color234 "~A" # all messages
-color index color166 color234 "~E" # expired messages
-color index color33 color234 "~N" # new messages
-color index color33 color234 "~O" # old messages
-color index color61 color234 "~Q" # messages that have been replied to
-color index color240 color234 "~R" # read messages
-color index color33 color234 "~U" # unread messages
-color index color33 color234 "~U~$" # unread, unreferenced messages
-color index color241 color234 "~v" # messages part of a collapsed thread
-color index color241 color234 "~P" # messages from me
-color index color37 color234 "~p!~F" # messages to me
-color index color37 color234 "~N~p!~F" # new messages to me
-color index color37 color234 "~U~p!~F" # unread messages to me
-color index color240 color234 "~R~p!~F" # messages to me
-color index color160 color234 "~F" # flagged messages
-color index color160 color234 "~F~p" # flagged messages to me
-color index color160 color234 "~N~F" # new flagged messages
-color index color160 color234 "~N~F~p" # new flagged messages to me
-color index color160 color234 "~U~F~p" # new flagged messages to me
-color index color235 color160 "~D" # deleted messages
-color index color245 color234 "~v~(!~N)" # collapsed thread with no unread
-color index color136 color234 "~v~(~N)" # collapsed thread with some unread
-color index color64 color234 "~N~v~(~N)" # collapsed thread with unread parent
-# statusbg used to indicated flagged when foreground color shows other status
-# for collapsed thread
-color index color160 color235 "~v~(~F)!~N" # collapsed thread with flagged, no unread
-color index color136 color235 "~v~(~F~N)" # collapsed thread with some unread & flagged
-color index color64 color235 "~N~v~(~F~N)" # collapsed thread with unread parent & flagged
-color index color64 color235 "~N~v~(~F)" # collapsed thread with unread parent, no unread inside, but some flagged
-color index color37 color235 "~v~(~p)" # collapsed thread with unread parent, no unread inside, some to me directly
-color index color136 color160 "~v~(~D)" # thread with deleted (doesn't differentiate between all or partial)
-
-# message headers ------------------------------------------------------
-
-#color header color240 color234 "^"
-color hdrdefault color240 color234
-color header color241 color234 "^(From)"
-color header color33 color234 "^(Subject)"
-
-# body -----------------------------------------------------------------
-
-color quoted color33 color234
-color quoted1 color37 color234
-color quoted2 color136 color234
-color quoted3 color160 color234
-color quoted4 color166 color234
-
-color signature color240 color234
-color bold color235 color234
-color underline color235 color234
-color normal color244 color234
-#
-color body color245 color234 "[;:][-o][)/(|]" # emoticons
-color body color245 color234 "[;:][)(|]" # emoticons
-color body color245 color234 "[*]?((N)?ACK|CU|LOL|SCNR|BRB|BTW|CWYL|\
- |FWIW|vbg|GD&R|HTH|HTHBE|IMHO|IMNSHO|\
- |IRL|RTFM|ROTFL|ROFL|YMMV)[*]?"
-color body color245 color234 "[ ][*][^*]*[*][ ]?" # more emoticon?
-color body color245 color234 "[ ]?[*][^*]*[*][ ]" # more emoticon?
-
-## pgp
-
-color body color160 color234 "(BAD signature)"
-color body color37 color234 "(Good signature)"
-color body color234 color234 "^gpg: Good signature .*"
-color body color241 color234 "^gpg: "
-color body color241 color160 "^gpg: BAD signature from.*"
-mono body bold "^gpg: Good signature"
-mono body bold "^gpg: BAD signature from.*"
-color body color160 color234 "([a-z][a-z0-9+-]*://(((([a-z0-9_.!~*'();:&=+$,-]|%[0-9a-f][0-9a-f])*@)?((([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?|[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+)(:[0-9]+)?)|([a-z0-9_.!~*'()$,;:@&=+-]|%[0-9a-f][0-9a-f])+)(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*(/([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*(;([a-z0-9_.!~*'():@&=+$,-]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?(#([a-z0-9_.!~*'();/?:@&=+$,-]|%[0-9a-f][0-9a-f])*)?|(www|ftp)\\.(([a-z0-9]([a-z0-9-]*[a-z0-9])?)\\.)*([a-z]([a-z0-9-]*[a-z0-9])?)\\.?(:[0-9]+)?(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*(/([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*(;([-a-z0-9_.!~*'():@&=+$,]|%[0-9a-f][0-9a-f])*)*)*)?(\\?([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?(#([-a-z0-9_.!~*'();/?:@&=+$,]|%[0-9a-f][0-9a-f])*)?)[^].,:;!)? \t\r\n<>\"]"
-color body color33 color234 "( *[-+=#*~_]){6,}"
(DIR) diff --git a/newsraft/config b/newsraft/config
@@ -1,17 +0,0 @@
-# settings
-set open-in-browser-command ~/bin/link-handler "%l"
-list-entry-date-format "%D"
-feeds-menu-paramount-explore true
-
-# key bindings
-bind w exec "~/bin/link-handler %l"
-
-# appearance
-status-placeholder
-set menu-feed-sorting unread-desc
-
-# disable notifications
-notification-command ""
-
-# filters
-set item-rule LOWER(title) NOT LIKE '%trump%' AND LOWER(title) NOT LIKE '%biden%' AND LOWER(title) NOT LIKE '%obama%' AND LOWER(title) NOT LIKE '%immigrants%' AND LOWER(title) NOT LIKE '%brexit%' AND LOWER(title) NOT LIKE '%starmer%' AND LOWER(title) NOT LIKE '%uk parliament%' AND LOWER(title) NOT LIKE '%congress%' AND LOWER(title) NOT LIKE '%white house%'
(DIR) diff --git a/newsraft/feeds b/newsraft/feeds
@@ -1,49 +0,0 @@
-@ TECH
-https://noted.lol/rss/ "Noted"
-https://selfh.st/rss/ "Selfh"
-https://planet.kernel.org/rss20.xml "Planet Kernel"
-https://bearblog.dev/discover/feed/ "Bear Blogs"
-
-@ SOFTWARE
-https://www.alpinelinux.org/atom.xml "Alpine Linux"
-https://codeberg.org/newsraft/newsraft.rss "Newsraft"
-
-@ MEDIA
-https://showrss.info/other/all.rss "TV Torrents"
-
-@ PEOPLE
-https://codemadness.org/atom.xml "CodeMadness"
-https://drewdevault.com/blog/index.xml "Drew DeVault"
-http://joeyh.name/blog/index.rss "Joey H"
-https://www.uninformativ.de/blog/feeds/en.atom "Uninformativ"
-https://fabiensanglard.net/rss.xml "Fabiensanglard"
-https://pluralistic.net/feed/ "Pluralistic"
-https://k0.tel/feed.xml "Koutsie"
-https://labnotes.org/rss/ "Lab Notes"
-https://www.jeffgeerling.com/blog.xml "Jeff Geerling"
-https://garfnet.org.uk/cms/feed/ "Garfnet"
-https://bfloeser.de/index.xml "Benedikt"
-https://chromic.org/index.xml "Chromic"
-https://dandelion-utilitarian.com/feed.xml "Dandelion-Utilitarian"
-https://wrongthink.link/posts/index.xml "Wrong Think"
-https://www.cheeyeo.xyz/feed.xml "Chee Yeo"
-https://vkc.sh/feed/ "Veronica"
-https://chriswere.wales/rss.xml "Chris Were"
-https://writer13.neocities.org/rss.xml "Writer 13"
-https://techrights.org/feed.xml "TechRights"
-
-@ GAMING
-https://www.gamingonlinux.com/article_rss.php "Gaming On Linux"
-
-@ ODYSEE
-https://odysee.com/$/rss/@AlphaNerd:8 "Mental Outlaw"
-https://odysee.com/$/rss/@techlore:3 "TechLore"
-https://odysee.com/$/rss/@NaomiBrockwell:4 "Naomi Brockwell"
-https://odysee.com/$/rss/@davidbombal:0 "David Bombal"
-https://odysee.com/$/rss/@thelinuxcast:4 "The Linux Cast"
-https://odysee.com/$/rss/@GreatScott:a "Great Scott"
-https://odysee.com/$/rss/@rossmanngroup:a "Louis Rossmann"
-https://odysee.com/$/rss/@gotbletu:b "Gotbletu"
-
-@ PODCASTS
-http://www.2600.com/oth-broadband.xml "2600"
(DIR) diff --git a/qutebrowser/blank.html b/qutebrowser/blank.html
@@ -1,44 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
- <head>
- <style>
- body {
- color: #cfba58;
- background-color: #191919;
- font-family: monospace;
- }
-
- .flex {
- flex-direction: column;
- display: flex;
- justify-content: center;
- align-items: center;
- margin-top: 450px;
- }
-
- input {
- border: none;
- border-bottom: 2px solid #959A1C;
- min-width: 500px;
- max-width: 750px;
- width: 75%;
- padding-bottom: 10px;
- background-color: transparent;
- color: #fff;
- outline: 0;
- margin-bottom: 20px;
- font-size: 22px;
- }
- </style>
- </head>
-
- <body>
- <div class="flex">
- <form action="https://html.duckduckgo.com/html" method="get" target="_self">
- <input type="text" name="q" autofocus="autofocus" onfocus="this.select()" />
- </form>
- </div>
- </body>
-
-</html>
(DIR) diff --git a/qutebrowser/config.py b/qutebrowser/config.py
@@ -1,108 +0,0 @@
-config.load_autoconfig(False)
-
-try:
- from qutebrowser.api import message
-
- # gruvbox colour theme
- config.source('scripts/gruvbox.py')
- #config.source('scripts/redirects.py')
-
-except ImportError:
- pass
-
-# default local page
-DEFAULT_PAGE = str(config.configdir / 'blank.html')
-
-# keybinds remapping
-config.bind("xx", "set tabs.show always;; later 5000 set tabs.show switching")
-config.bind("xc", "spawn --userscript password_fill")
-config.bind("zd", "download-open")
-config.bind("xz", "hint links spawn --detach ~/bin/link-handler {hint-url}")
-config.bind("j", "cmd-run-with-count 5 scroll down")
-config.bind("k", "cmd-run-with-count 5 scroll up")
-
-# tabbar
-c.tabs.position = "top"
-c.tabs.show = "multiple"
-c.tabs.title.format = ""
-c.tabs.width = 28
-c.tabs.favicons.show = "never"
-
-# hints
-c.colors.hints.bg = "rgb(207,186,88)" #cfba58
-c.colors.hints.fg = "rgb(34, 34, 34)" #222222
-
-# darkmode
-c.colors.webpage.darkmode.enabled = True
-c.colors.webpage.darkmode.algorithm = 'lightness-cielab'
-c.colors.webpage.darkmode.policy.images = 'never'
-config.set('colors.webpage.darkmode.enabled', False, 'file://*')
-
-# misc
-c.fonts.hints = "14pt Hack"
-c.fonts.default_size = '12pt'
-c.fonts.default_family = 'Hack'
-c.hints.uppercase = True
-c.scrolling.smooth = True
-c.editor.command = ["foot", "vim '{}'"]
-c.auto_save.session = True
-c.zoom.default = "140%"
-
-# ad-block
-c.content.blocking.enabled = True
-c.content.blocking.method = "both"
-c.content.blocking.adblock.lists = [
- "https://easylist.to/easylist/easyprivacy.txt",
- "https://secure.fanboy.co.nz/fanboy-cookiemonster.txt",
- "https://easylist.to/easylist/easylist.txt"
-]
-
-# general privacy
-c.completion.web_history.max_items = 0 # no history
-c.downloads.remove_finished = 800 # clear dl history
-c.downloads.location.directory = '~/tmp'
-c.url.default_page = DEFAULT_PAGE
-c.url.start_pages = DEFAULT_PAGE
-c.content.private_browsing = True # always use private browsing
-c.content.register_protocol_handler = False
-c.content.webgl = False
-
-# normally default, lets make sure
-c.content.media.audio_capture = False
-c.content.media.audio_video_capture = False
-c.content.media.video_capture = False
-c.content.desktop_capture = False
-c.content.mouse_lock = False
-c.content.autoplay = False # no autoplay on <video> tags
-
-# fingerprint
-c.content.headers.accept_language = "en-US,en;q=0.5"
-c.content.headers.user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
-c.content.headers.custom = {"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}
-c.content.headers.referer = "never"
-c.content.cookies.accept = "no-3rdparty"
-c.content.javascript.enabled = False # disable tracking etc
-c.content.canvas_reading = False # canvas blocking
-c.content.geolocation = False # location ident
-c.content.webrtc_ip_handling_policy = "disable-non-proxied-udp"
-c.content.hyperlink_auditing = False # disable pingbacks
-c.content.dns_prefetch = False # disable dns pre-fetching
-
-# search engine shortneners
-c.url.searchengines = {
- "DEFAULT": "https://html.duckduckgo.com/html?q={}",
- "ru": "https://rutracker.org/forum/tracker.php?f=1992&nm={}",
- "wiby": "https://wiby.me/?q={}",
- "!book": "http://libgen.li/search.php?req={}&lg_topic=libgen&open=0&view=simple&res=25&phrase=1&column=def",
- "!wiki": "https://en.wikipedia.org/wiki/Special:Search?search={}",
-}
-
-# javascript whitelist
-js_whitelist = [
- "*://localhost/*",
- "*://127.0.0.1/*"
-]
-
-for site in js_whitelist:
- with config.pattern(site) as p:
- p.content.javascript.enabled = True
(DIR) diff --git a/qutebrowser/scripts/fingerprint.py b/qutebrowser/scripts/fingerprint.py
@@ -1,43 +0,0 @@
-import random
-import json
-import datetime
-
-from pathlib import Path
-from qutebrowser.api import message, interceptor
-
-home = str(config.configdir)
-agentfile = Path("{}/useragent_list.json".format(home))
-
-fp_timer = datetime.datetime.now() + datetime.timedelta(minutes=1)
-
-if agentfile.is_file():
- with open(agentfile, "r") as filehandle:
- agentList = json.load(filehandle)
-
-
-def fingerprint_getheader(agent):
-
- FP_HTTP_HEADER = {
- "Firefox": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
- "Chrome": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
- "Edge": "text/html, application/xhtml+xml, image/jxr, */*",
- "Opera": "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1",
- "Safari": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
- }
-
- for a, h in FP_HTTP_HEADER.items():
- if "{a}" in agent:
- return h
-
-
-def fingerprint(info: interceptor.Request):
- global fp_timer
-
- if fp_timer < datetime.datetime.now():
- fp_timer = datetime.datetime.now() + datetime.timedelta(minutes=1)
- agent = random.choice(tuple(agentList))
- c.content.headers.user_agent = agent
- c.content.headers.custom = {"accept": fingerprint_getheader(agent)}
-
-
-interceptor.register(fingerprint)
(DIR) diff --git a/qutebrowser/scripts/gruvbox.py b/qutebrowser/scripts/gruvbox.py
@@ -1,332 +0,0 @@
-# gruvbox dark hard qutebrowser theme by Florian Bruhin <me@the-compiler.org>
-#
-# Originally based on:
-# base16-qutebrowser (https://github.com/theova/base16-qutebrowser)
-# Base16 qutebrowser template by theova and Daniel Mulford
-# Gruvbox dark, hard scheme by Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox)
-
-bg0_hard = "#1d2021"
-bg0_soft = '#32302f'
-bg0_normal = '#282828'
-
-bg0 = bg0_normal
-bg1 = "#3c3836"
-bg2 = "#504945"
-bg3 = "#665c54"
-bg4 = "#7c6f64"
-
-fg0 = "#fbf1c7"
-fg1 = "#ebdbb2"
-fg2 = "#d5c4a1"
-fg3 = "#bdae93"
-fg4 = "#a89984"
-
-bright_red = "#fb4934"
-bright_green = "#b8bb26"
-bright_yellow = "#fabd2f"
-bright_blue = "#83a598"
-bright_purple = "#d3869b"
-bright_aqua = "#8ec07c"
-bright_gray = "#928374"
-bright_orange = "#fe8019"
-
-dark_red = "#cc241d"
-dark_green = "#98971a"
-dark_yellow = "#d79921"
-dark_blue = "#458588"
-dark_purple = "#b16286"
-dark_aqua = "#689d6a"
-dark_gray = "#a89984"
-dark_orange = "#d65d0e"
-
-### Completion
-
-# Text color of the completion widget. May be a single color to use for
-# all columns or a list of three colors, one for each column.
-c.colors.completion.fg = [fg1, bright_aqua, bright_yellow]
-
-# Background color of the completion widget for odd rows.
-c.colors.completion.odd.bg = bg0
-
-# Background color of the completion widget for even rows.
-c.colors.completion.even.bg = c.colors.completion.odd.bg
-
-# Foreground color of completion widget category headers.
-c.colors.completion.category.fg = bright_blue
-
-# Background color of the completion widget category headers.
-c.colors.completion.category.bg = bg1
-
-# Top border color of the completion widget category headers.
-c.colors.completion.category.border.top = c.colors.completion.category.bg
-
-# Bottom border color of the completion widget category headers.
-c.colors.completion.category.border.bottom = c.colors.completion.category.bg
-
-# Foreground color of the selected completion item.
-c.colors.completion.item.selected.fg = fg0
-
-# Background color of the selected completion item.
-c.colors.completion.item.selected.bg = bg4
-
-# Top border color of the selected completion item.
-c.colors.completion.item.selected.border.top = bg2
-
-# Bottom border color of the selected completion item.
-c.colors.completion.item.selected.border.bottom = c.colors.completion.item.selected.border.top
-
-# Foreground color of the matched text in the selected completion item.
-c.colors.completion.item.selected.match.fg = bright_orange
-
-# Foreground color of the matched text in the completion.
-c.colors.completion.match.fg = c.colors.completion.item.selected.match.fg
-
-# Color of the scrollbar handle in the completion view.
-c.colors.completion.scrollbar.fg = c.colors.completion.item.selected.fg
-
-# Color of the scrollbar in the completion view.
-c.colors.completion.scrollbar.bg = c.colors.completion.category.bg
-
-### Context menu
-
-# Background color of disabled items in the context menu.
-c.colors.contextmenu.disabled.bg = bg3
-
-# Foreground color of disabled items in the context menu.
-c.colors.contextmenu.disabled.fg = fg3
-
-# Background color of the context menu. If set to null, the Qt default is used.
-c.colors.contextmenu.menu.bg = bg0
-
-# Foreground color of the context menu. If set to null, the Qt default is used.
-c.colors.contextmenu.menu.fg = fg2
-
-# Background color of the context menu’s selected item. If set to null, the Qt default is used.
-c.colors.contextmenu.selected.bg = bg2
-
-#Foreground color of the context menu’s selected item. If set to null, the Qt default is used.
-c.colors.contextmenu.selected.fg = c.colors.contextmenu.menu.fg
-
-### Downloads
-
-# Background color for the download bar.
-c.colors.downloads.bar.bg = bg0
-
-# Color gradient start for download text.
-c.colors.downloads.start.fg = bg0
-
-# Color gradient start for download backgrounds.
-c.colors.downloads.start.bg = bright_blue
-
-# Color gradient end for download text.
-c.colors.downloads.stop.fg = c.colors.downloads.start.fg
-
-# Color gradient stop for download backgrounds.
-c.colors.downloads.stop.bg = bright_aqua
-
-# Foreground color for downloads with errors.
-c.colors.downloads.error.fg = bright_red
-
-### Hints
-
-# Font color for hints.
-c.colors.hints.fg = bg0
-
-# Background color for hints.
-c.colors.hints.bg = 'rgba(250, 191, 47, 200)' # bright_yellow
-
-# Font color for the matched part of hints.
-c.colors.hints.match.fg = bg4
-
-### Keyhint widget
-
-# Text color for the keyhint widget.
-c.colors.keyhint.fg = fg4
-
-# Highlight color for keys to complete the current keychain.
-c.colors.keyhint.suffix.fg = fg0
-
-# Background color of the keyhint widget.
-c.colors.keyhint.bg = bg0
-
-### Messages
-
-# Foreground color of an error message.
-c.colors.messages.error.fg = bg0
-
-# Background color of an error message.
-c.colors.messages.error.bg = bright_red
-
-# Border color of an error message.
-c.colors.messages.error.border = c.colors.messages.error.bg
-
-# Foreground color of a warning message.
-c.colors.messages.warning.fg = bg0
-
-# Background color of a warning message.
-c.colors.messages.warning.bg = bright_purple
-
-# Border color of a warning message.
-c.colors.messages.warning.border = c.colors.messages.warning.bg
-
-# Foreground color of an info message.
-c.colors.messages.info.fg = fg2
-
-# Background color of an info message.
-c.colors.messages.info.bg = bg0
-
-# Border color of an info message.
-c.colors.messages.info.border = c.colors.messages.info.bg
-
-### Prompts
-
-# Foreground color for prompts.
-c.colors.prompts.fg = fg2
-
-# Border used around UI elements in prompts.
-c.colors.prompts.border = f'1px solid {bg1}'
-
-# Background color for prompts.
-c.colors.prompts.bg = bg3
-
-# Background color for the selected item in filename prompts.
-c.colors.prompts.selected.bg = bg2
-
-### Statusbar
-
-# Foreground color of the statusbar.
-c.colors.statusbar.normal.fg = fg2
-
-# Background color of the statusbar.
-c.colors.statusbar.normal.bg = bg0
-
-# Foreground color of the statusbar in insert mode.
-c.colors.statusbar.insert.fg = bg0
-
-# Background color of the statusbar in insert mode.
-c.colors.statusbar.insert.bg = dark_aqua
-
-# Foreground color of the statusbar in passthrough mode.
-c.colors.statusbar.passthrough.fg = bg0
-
-# Background color of the statusbar in passthrough mode.
-c.colors.statusbar.passthrough.bg = dark_blue
-
-# Foreground color of the statusbar in private browsing mode.
-c.colors.statusbar.private.fg = bright_purple
-
-# Background color of the statusbar in private browsing mode.
-c.colors.statusbar.private.bg = bg0
-
-# Foreground color of the statusbar in command mode.
-c.colors.statusbar.command.fg = fg3
-
-# Background color of the statusbar in command mode.
-c.colors.statusbar.command.bg = bg1
-
-# Foreground color of the statusbar in private browsing + command mode.
-c.colors.statusbar.command.private.fg = c.colors.statusbar.private.fg
-
-# Background color of the statusbar in private browsing + command mode.
-c.colors.statusbar.command.private.bg = c.colors.statusbar.command.bg
-
-# Foreground color of the statusbar in caret mode.
-c.colors.statusbar.caret.fg = bg0
-
-# Background color of the statusbar in caret mode.
-c.colors.statusbar.caret.bg = dark_purple
-
-# Foreground color of the statusbar in caret mode with a selection.
-c.colors.statusbar.caret.selection.fg = c.colors.statusbar.caret.fg
-
-# Background color of the statusbar in caret mode with a selection.
-c.colors.statusbar.caret.selection.bg = bright_purple
-
-# Background color of the progress bar.
-c.colors.statusbar.progress.bg = bright_blue
-
-# Default foreground color of the URL in the statusbar.
-c.colors.statusbar.url.fg = fg4
-
-# Foreground color of the URL in the statusbar on error.
-c.colors.statusbar.url.error.fg = dark_red
-
-# Foreground color of the URL in the statusbar for hovered links.
-c.colors.statusbar.url.hover.fg = bright_orange
-
-# Foreground color of the URL in the statusbar on successful load
-# (http).
-c.colors.statusbar.url.success.http.fg = bright_red
-
-# Foreground color of the URL in the statusbar on successful load
-# (https).
-c.colors.statusbar.url.success.https.fg = fg0
-
-# Foreground color of the URL in the statusbar when there's a warning.
-c.colors.statusbar.url.warn.fg = bright_purple
-
-### tabs
-
-# Background color of the tab bar.
-c.colors.tabs.bar.bg = bg0
-
-# Color gradient start for the tab indicator.
-c.colors.tabs.indicator.start = bright_blue
-
-# Color gradient end for the tab indicator.
-c.colors.tabs.indicator.stop = bright_aqua
-
-# Color for the tab indicator on errors.
-c.colors.tabs.indicator.error = bright_red
-
-# Foreground color of unselected odd tabs.
-c.colors.tabs.odd.fg = fg2
-
-# Background color of unselected odd tabs.
-c.colors.tabs.odd.bg = bg2
-
-# Foreground color of unselected even tabs.
-c.colors.tabs.even.fg = c.colors.tabs.odd.fg
-
-# Background color of unselected even tabs.
-c.colors.tabs.even.bg = bg3
-
-# Foreground color of selected odd tabs.
-c.colors.tabs.selected.odd.fg = fg2
-
-# Background color of selected odd tabs.
-c.colors.tabs.selected.odd.bg = bg0
-
-# Foreground color of selected even tabs.
-c.colors.tabs.selected.even.fg = c.colors.tabs.selected.odd.fg
-
-# Background color of selected even tabs.
-c.colors.tabs.selected.even.bg = bg0
-
-# Background color of pinned unselected even tabs.
-c.colors.tabs.pinned.even.bg = bright_green
-
-# Foreground color of pinned unselected even tabs.
-c.colors.tabs.pinned.even.fg = bg2
-
-# Background color of pinned unselected odd tabs.
-c.colors.tabs.pinned.odd.bg = bright_green
-
-# Foreground color of pinned unselected odd tabs.
-c.colors.tabs.pinned.odd.fg = c.colors.tabs.pinned.even.fg
-
-# Background color of pinned selected even tabs.
-c.colors.tabs.pinned.selected.even.bg = bg0
-
-# Foreground color of pinned selected even tabs.
-c.colors.tabs.pinned.selected.even.fg = c.colors.tabs.selected.odd.fg
-
-# Background color of pinned selected odd tabs.
-c.colors.tabs.pinned.selected.odd.bg = c.colors.tabs.pinned.selected.even.bg
-
-# Foreground color of pinned selected odd tabs.
-c.colors.tabs.pinned.selected.odd.fg = c.colors.tabs.selected.odd.fg
-
-# Background color for webpages if unset (or empty to use the theme's
-# color).
-# c.colors.webpage.bg = bg4
(DIR) diff --git a/qutebrowser/scripts/redirects.py b/qutebrowser/scripts/redirects.py
@@ -1,70 +0,0 @@
-from qutebrowser.api import interceptor
-from urllib.parse import urljoin
-from PyQt6.QtCore import QUrl
-import operator
-
-o = operator.methodcaller
-s = 'setHost'
-i = interceptor
-
-def farside(url: QUrl, i) -> bool:
- url.setHost('farside.link')
- p = url.path().strip('/')
- url.setPath(urljoin(i, p))
- return True
-
-def nitter(url: QUrl) -> bool:
- return farside(url, '/nitter/')
-def rimgo(url: QUrl) -> bool:
- return farside(url, '/rimgo/')
-def scribe(url: QUrl) -> bool:
- return farside(url, '/scribe/')
-def wikiless(url: QUrl) -> bool:
- return farside(url, '/wikiless/')
-def invid(url: QUrl) -> bool:
- return farside(url, '/invidious/')
-def reddit(url: QUrl) -> bool:
- return farside(url, '/libreddit/')
-def bibliogram(url: QUrl) -> bool:
- return farside(url, '/bibliogram/')
-def simplytranslate(url: QUrl) -> bool:
- return farside(url, '/simplytranslate/')
-def proxitok(url: QUrl) -> bool:
- return farside(url, '/proxitok/')
-def querte (url: QUrl) -> bool:
- return farside(url, '/querte/')
-
-map = {
- "reddit.com": reddit,
- "www.reddit.com": reddit,
- "old.reddit.com": reddit,
-
- "youtu.be": invid,
- "youtube.com": invid,
- "www.youtube.com": invid,
-
- "twitter.com": nitter,
- "mobile.twitter.com": nitter,
-
- "imgur.com" : rimgo,
- "medium.com" : scribe,
- "en.wikipedia.org" : wikiless,
- "www.instagram.com": bibliogram,
- "translate.google.com" : simplytranslate,
- "vm.tiktok.com" : proxitok,
- "www.tiktok.com" : proxitok,
- "www.quora.com": querte,
-
- "www.twitch.tv" : o(s, 'm.twitch.tv'),
- "tumblr.com" : o(s, 'splashblr.fly.dev'),
- "www.npr.org" : o(s, 'text.npr.org'),
- }
-def f(info: i.Request):
- if (info.resource_type != i.ResourceType.main_frame or
- info.request_url.scheme() in {"data", "blob"}):
- return
- url = info.request_url
- redir = map.get(url.host())
- if redir is not None and redir(url) is not False:
- info.redirect(url)
-i.register(f)
(DIR) diff --git a/qutebrowser/scripts/user_agent.py b/qutebrowser/scripts/user_agent.py
@@ -1,31 +0,0 @@
-# qutebrowser script to set a random user-agent on launch. Add the following to
-# your qutebrowser config.py file:
-#
-# config.source('scripts/user_agent.py')
-#
-# You can download the most common user-agents with a script like this, I run
-# mine on cron every 3 days. :
-#
-# #!/bin/bash
-#
-# url='https://raw.githubusercontent.com/Kikobeats/top-user-agents/master/index.json'
-# path="$HOME/.config/qutebrowser/useragent_list.json"
-#
-# curl "$url" -o "$path"
-# awk '!/Firefox/' "$path" > /tmp/1 && mv /tmp/1 "$path"
-
-import random
-import json
-
-from pathlib import Path
-from qutebrowser.api import message
-
-home = str(config.configdir)
-agentfile = Path("{}/useragent_list.json".format(home))
-
-if agentfile.is_file():
- with open(agentfile, "r") as filehandle:
- agentList = json.load(filehandle)
-
- agent = random.choice(tuple(agentList))
- c.content.headers.user_agent = agent
(DIR) diff --git a/qutebrowser/userscripts/password_fill b/qutebrowser/userscripts/password_fill
@@ -1,388 +0,0 @@
-#!/usr/bin/env bash
-help() {
- blink=$'\e[1;31m' reset=$'\e[0m'
-cat <<EOF
-This script can only be used as a userscript for qutebrowser
-2015, Thorsten Wißmann <edu _at_ thorsten-wissmann _dot_ de>
-In case of questions or suggestions, do not hesitate to send me an E-Mail or to
-directly ask me via IRC (nickname thorsten\`) in #qutebrowser on Libera Chat.
-
- $blink!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$reset
- WARNING: the passwords are stored in qutebrowser's
- debug log reachable via the url qute://log
- $blink!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$reset
-
-Usage: run as a userscript form qutebrowser, e.g.:
- spawn --userscript ~/.config/qutebrowser/password_fill
-
-Pass backend: (see also passwordstore.org)
- This script expects pass to store the credentials of each page in an extra
- file, where the filename (or filepath) contains the domain of the respective
- page. The first line of the file must contain the password, the login name
- must be contained in a later line beginning with "user:", "login:", or
- "username:" (configurable by the user_pattern variable).
-
-Behavior:
- It will try to find a username/password entry in the configured backend
- (currently only pass) for the current website and will load that pair of
- username and password to any form on the current page that has some password
- entry field. If multiple entries are found, a zenity menu is offered.
-
- If no entry is found, then it crops subdomains from the url if at least one
- entry is found in the backend. (In that case, it always shows a menu)
-
-Configuration:
- This script loads the bash script ~/.config/qutebrowser/password_fill_rc (if
- it exists), so you can change any configuration variable and overwrite any
- function you like.
-
-EOF
-}
-
-set -o errexit
-set -o pipefail
-shopt -s nocasematch # make regexp matching in bash case insensitive
-
-if [ -z "$QUTE_FIFO" ] ; then
- help
- exit
-fi
-
-error() {
- local msg="$*"
- echo "message-error '${msg//\'/\\\'}'" >> "$QUTE_FIFO"
-}
-msg() {
- local msg="$*"
- echo "message-info '${msg//\'/\\\'}'" >> "$QUTE_FIFO"
-}
-die() {
- error "$*"
- exit 0
-}
-
-javascript_escape() {
- # print the first argument in an escaped way, such that it can safely
- # be used within javascripts double quotes
- # shellcheck disable=SC2001
- sed "s,[\\\\'\"],\\\\&,g" <<< "$1"
-}
-
-# ======================================================= #
-# CONFIGURATION
-# ======================================================= #
-# The configuration file is per default located in
-# ~/.config/qutebrowser/password_fill_rc and is a bash script that is loaded
-# later in the present script. So basically you can replace all of the
-# following definitions and make them fit your needs.
-
-# The following simplifies a URL to the domain (e.g. "wiki.qutebrowser.org")
-# which is later used to search the correct entries in the password backend. If
-# you e.g. don't want the "www." to be removed or if you want to distinguish
-# between different paths on the same domain.
-
-simplify_url() {
- simple_url="${1##*://}" # remove protocol specification
- simple_url="${simple_url%%\?*}" # remove GET parameters
- simple_url="${simple_url%%/*}" # remove directory path
- simple_url="${simple_url%:*}" # remove port
- simple_url="${simple_url##www.}" # remove www. subdomain
-}
-
-# no_entries_found() is called if the first query_entries() call did not find
-# any matching entries. Multiple implementations are possible:
-# The easiest behavior is to quit:
-#no_entries_found() {
-# if [ 0 -eq "${#files[@]}" ] ; then
-# die "No entry found for »$simple_url«"
-# fi
-#}
-# But you could also fill the files array with all entries from your pass db
-# if the first db query did not find anything
-# no_entries_found() {
-# if [ 0 -eq "${#files[@]}" ] ; then
-# query_entries ""
-# if [ 0 -eq "${#files[@]}" ] ; then
-# die "No entry found for »$simple_url«"
-# fi
-# fi
-# }
-
-# Another behavior is to drop another level of subdomains until search hits
-# are found:
-no_entries_found() {
- while [ 0 -eq "${#files[@]}" ] && [ -n "$simple_url" ]; do
- # shellcheck disable=SC2001
- shorter_simple_url=$(sed 's,^[^.]*\.,,' <<< "$simple_url")
- if [ "$shorter_simple_url" = "$simple_url" ] ; then
- # if no dot, then even remove the top level domain
- simple_url=""
- query_entries "$simple_url"
- break
- fi
- simple_url="$shorter_simple_url"
- query_entries "$simple_url"
- #die "No entry found for »$simple_url«"
- # enforce menu if we do "fuzzy" matching
- menu_if_one_entry=1
- done
- if [ 0 -eq "${#files[@]}" ] ; then
- die "No entry found for »$simple_url«"
- fi
-}
-
-# Backend implementations tell, how the actual password store is accessed.
-# Right now, there is only one fully functional password backend, namely for
-# the program "pass".
-# A password backend consists of three actions:
-# - init() initializes backend-specific things and does sanity checks.
-# - query_entries() is called with a simplified url and is expected to fill
-# the bash array $files with the names of matching password entries. There
-# are no requirements how these names should look like.
-# - open_entry() is called with some specific entry of the $files array and is
-# expected to write the username of that entry to the $username variable and
-# the corresponding password to $password
-
-# shellcheck disable=SC2329
-reset_backend() {
- init() { true ; }
- query_entries() { true ; }
- open_entry() { true ; }
-}
-
-# choose_entry() is expected to choose one entry from the array $files and
-# write it to the variable $file.
-choose_entry() {
- choose_entry_zenity
-}
-
-# The default implementation chooses a random entry from the array. So if there
-# are multiple matching entries, multiple calls to this userscript will
-# eventually pick the "correct" entry. I.e. if this userscript is bound to
-# "zl", the user has to press "zl" until the correct username shows up in the
-# login form.
-choose_entry_random() {
- local nr=${#files[@]}
- file="${files[$((RANDOM % nr))]}"
- # Warn user, that there might be other matching password entries
- if [ "$nr" -gt 1 ] ; then
- msg "Picked $file out of $nr entries: ${files[*]}"
- fi
-}
-
-# another implementation would be to ask the user via some menu (like rofi or
-# dmenu or zenity or even qutebrowser completion in future?) which entry to
-# pick
-MENU_COMMAND=( head -n 1 )
-# whether to show the menu if there is only one entry in it
-menu_if_one_entry=0
-choose_entry_menu() {
- local nr=${#files[@]}
- if [ "$nr" -eq 1 ] && ! ((menu_if_one_entry)) ; then
- file="${files[0]}"
- else
- file=$( printf '%s\n' "${files[@]}" | "${MENU_COMMAND[@]}" )
- fi
-}
-
-choose_entry_rofi() {
- MENU_COMMAND=( rofi -p "qutebrowser> " -dmenu
- -mesg $'Pick a password entry for <b>'"${QUTE_URL//&/&}"'</b>' )
- choose_entry_menu || true
-}
-
-choose_entry_zenity() {
- MENU_COMMAND=( zenity --list --title "qutebrowser password fill"
- --text "Pick the password entry:"
- --column "Name" )
- choose_entry_menu || true
-}
-
-choose_entry_zenity_radio() {
- # shellcheck disable=SC2329
- zenity_helper() {
- awk '{ print $0 ; print $0 }' \
- | zenity --list --radiolist \
- --title "qutebrowser password fill" \
- --text "Pick the password entry:" \
- --column " " --column "Name"
- }
- MENU_COMMAND=( zenity_helper )
- choose_entry_menu || true
-}
-
-# =======================================================
-# backend: PASS
-
-# configuration options:
-match_filename=1 # whether allowing entry match by filepath
-match_line=0 # whether allowing entry match by URL-Pattern in file
- # Note: match_line=1 gets very slow, even for small password stores!
-match_line_pattern='^url: .*' # applied using grep -iE
-user_pattern='^(user|username|login): '
-
-GPG_OPTS=( "--quiet" "--yes" "--compress-algo=none" "--no-encrypt-to" )
-GPG="gpg"
-export GPG_TTY="${GPG_TTY:-$(tty 2>/dev/null)}"
-command -v gpg2 &>/dev/null && GPG="gpg2"
-[[ -n $GPG_AGENT_INFO || $GPG == "gpg2" ]] && GPG_OPTS+=( "--batch" "--use-agent" )
-
-pass_backend() {
- init() {
- PREFIX="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
- if ! [ -d "$PREFIX" ] ; then
- die "Can not open password store dir »$PREFIX«"
- fi
- }
- query_entries() {
- local url="$1"
-
- if ((match_line)) ; then
- # add entries with matching URL-tag
- while read -r -d "" passfile ; do
- if $GPG "${GPG_OPTS[@]}" -d "$passfile" \
- | grep --max-count=1 -iE "${match_line_pattern}${url}" > /dev/null
- then
- passfile="${passfile#"$PREFIX"}"
- passfile="${passfile#/}"
- files+=( "${passfile%.gpg}" )
- fi
- done < <(find -L "$PREFIX" -iname '*.gpg' -print0)
- fi
- if ((match_filename)) ; then
- # add entries with matching filepath
- while read -r passfile ; do
- passfile="${passfile#"$PREFIX"}"
- passfile="${passfile#/}"
- files+=( "${passfile%.gpg}" )
- done < <(find -L "$PREFIX" -iname '*.gpg' | grep "$url")
- fi
- }
- open_entry() {
- local path="$PREFIX/${1}.gpg"
- password=""
- local firstline=1
- while read -r line ; do
- if ((firstline)) ; then
- password="$line"
- firstline=0
- else
- if [[ $line =~ $user_pattern ]] ; then
- # remove the matching prefix "user: " from the beginning of the line
- username=${line#"${BASH_REMATCH[0]}"}
- break
- fi
- fi
- done < <($GPG "${GPG_OPTS[@]}" -d "$path" | awk 1 )
- }
-}
-# =======================================================
-
-# =======================================================
-# backend: secret
-# shellcheck disable=SC2329
-secret_backend() {
- init() {
- return
- }
- query_entries() {
- local domain="$1"
- while read -r line ; do
- if [[ "$line" == "attribute.username = "* ]] ; then
- files+=("$domain ${line:21}")
- fi
- done < <( secret-tool search --unlock --all domain "$domain" 2>&1 )
- }
- open_entry() {
- local domain="${1%% *}"
- username="${1#* }"
- password=$(secret-tool lookup domain "$domain" username "$username")
- }
-}
-# =======================================================
-
-# load some sane default backend
-reset_backend
-pass_backend
-# load configuration
-QUTE_CONFIG_DIR=${QUTE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/qutebrowser/}
-PWFILL_CONFIG=${PWFILL_CONFIG:-${QUTE_CONFIG_DIR}/password_fill_rc}
-if [ -f "$PWFILL_CONFIG" ] ; then
- # shellcheck source=/dev/null
- source "$PWFILL_CONFIG"
-fi
-init
-
-simplify_url "$QUTE_URL"
-query_entries "${simple_url}"
-no_entries_found
-# remove duplicates
-mapfile -t files < <(printf '%s\n' "${files[@]}" | sort | uniq )
-choose_entry
-if [ -z "$file" ] ; then
- # choose_entry didn't want any of these entries
- exit 0
-fi
-open_entry "$file"
-#username="$(date)"
-#password="XYZ"
-#msg "$username, ${#password}"
-
-[ -n "$username" ] || die "Username not set in entry $file"
-[ -n "$password" ] || die "Password not set in entry $file"
-
-js() {
-cat <<EOF
- function isVisible(elem) {
- var style = elem.ownerDocument.defaultView.getComputedStyle(elem, null);
-
- if (style.getPropertyValue("visibility") !== "visible" ||
- style.getPropertyValue("display") === "none" ||
- style.getPropertyValue("opacity") === "0") {
- return false;
- }
-
- return elem.offsetWidth > 0 && elem.offsetHeight > 0;
- };
- function hasPasswordField(form) {
- var inputs = form.getElementsByTagName("input");
- for (var j = 0; j < inputs.length; j++) {
- var input = inputs[j];
- if (input.type == "password") {
- return true;
- }
- }
- return false;
- };
- function loadData2Form (form) {
- var inputs = form.getElementsByTagName("input");
- for (var j = 0; j < inputs.length; j++) {
- var input = inputs[j];
- if (isVisible(input) && (input.type == "text" || input.type == "email")) {
- input.focus();
- input.value = "$(javascript_escape "${username}")";
- input.dispatchEvent(new Event('change'));
- input.blur();
- }
- if (input.type == "password") {
- input.focus();
- input.value = "$(javascript_escape "${password}")";
- input.dispatchEvent(new Event('change'));
- input.blur();
- }
- }
- };
-
- var forms = document.getElementsByTagName("form");
- for (i = 0; i < forms.length; i++) {
- if (hasPasswordField(forms[i])) {
- loadData2Form(forms[i]);
- }
- }
-EOF
-}
-
-printjs() {
- js | sed 's,//.*$,,' | tr '\n' ' '
-}
-echo "jseval -q $(printjs)" >> "$QUTE_FIFO"
(DIR) diff --git a/sfeed/sfeedrc b/sfeed/sfeedrc
@@ -0,0 +1,51 @@
+sfeedpath="$HOME/.config/sfeed/feeds"
+
+fetch() {
+ case "$2" in
+ *.gmi | 'gemini:'*)
+ gemget -o - "$2"
+ ;;
+ *)
+ curl "$2" 2>/dev/null
+ ;;
+ esac
+}
+
+feeds() {
+ # general
+ feed 'tildenews' 'https://tilde.news/newest.rss'
+ feed 'tvtorrents' 'https://showrss.info/other/all.rss'
+ feed 'gamingonlinux' 'https://www.gamingonlinux.com/article_rss.php'
+ feed 'bearblogs' 'https://bearblog.dev/discover/feed/'
+ # apps
+ feed 'rdrview' 'https://github.com/eafer/rdrview/commits/master.atom'
+ feed 'fdm' 'https://github.com/nicm/fdm/commits.atom'
+ feed 'sfeed' 'https://codemadness.org/git/sfeed/atom.xml'
+ feed 'castget' 'https://github.com/mlj/castget/commits.atom'
+ feed 'alpinelinux' 'https://www.alpinelinux.org/atom.xml'
+ # gemini
+ feed 'midnightpub' 'gemini://midnight.pub/feed.xml'
+ feed 'antenna' 'gemini://warmedal.se/~antenna/atom.xml'
+ feed 'techrights' 'gemini://gemini.techrights.org/feed.xml'
+ feed 'ewok' 'gemini://warmedal.se/~bjorn/atom.xml'
+ # people
+ feed 'codemadness' 'https://codemadness.org/atom.xml'
+ feed 'drewdevault' 'https://drewdevault.com/blog/index.xml'
+ feed 'seeshyjo' 'http://joeyh.name/blog/index.rss'
+ feed 'unixsheikh' 'https://unixsheikh.com/feed.rss'
+ feed 'uninformativ' 'https://www.uninformativ.de/blog/feeds/en.atom'
+ feed 'fabiensanglard' 'https://fabiensanglard.net/rss.xml'
+ feed 'pluralistic' 'https://pluralistic.net/feed/'
+ feed 'craphound' 'https://craphound.com/feed'
+ feed 'koutsie' 'https://k0.tel/feed.xml'
+ feed 'labnotes' 'https://labnotes.org/rss/'
+ feed 'jeffgeerling' 'https://www.jeffgeerling.com/blog.xml'
+ feed 'garfnet' 'https://garfnet.org.uk/cms/feed/'
+ feed 'benedikt' 'https://bfloeser.de/index.xml'
+ feed 'chromic' 'https://chromic.org/index.xml'
+ feed 'dandelion-utilitarian' 'https://dandelion-utilitarian.com/feed.xml'
+ feed 'wrongthink' 'https://wrongthink.link/posts/index.xml'
+ feed 'cheeyeo' 'https://www.cheeyeo.xyz/feed.xml'
+ feed 'veronica' 'https://vkc.sh/feed/'
+ feed 'writer13' 'https://writer13.neocities.org/rss.xml'
+}
(DIR) diff --git a/sway/config b/sway/config
@@ -16,9 +16,8 @@ workspace_layout default
font pango: Hack:style=Regular 2
# application assignment
-for_window [app_id="mpv"] floating enable, sticky enable, resize set 560 280, move absolute position 3000 1100, no_focus
+#for_window [app_id="mpv"] floating enable, sticky enable, resize set 560 280, move absolute position 3000 1100, no_focus
assign [app_id="librewolf"] 2
-assign [app_id="qutebrowser"] 2
# misc
xwayland enable
@@ -33,8 +32,8 @@ input * {
# keybinds
bindsym $mod+Space exec footclient
bindsym $mod+p exec $menu
-bindsym $mod+f exec qutebrowser
-bindsym $mod+m exec /home/jay/bin/music
+bindsym $mod+f exec librewolf
+bindsym $mod+m exec /home/jay/bin/music.sh
bindsym $mod+s exec flatpak run com.heroicgameslauncher.hgl
bindsym XF86AudioRaiseVolume exec pamixer -i 5
(DIR) diff --git a/waybar/config b/waybar/config
@@ -1,6 +1,5 @@
{
// general
- "output": "DP-1",
"reload_style_on_change": true,
"layer": "top",
"position": "top",
@@ -15,8 +14,6 @@
],
"modules-right": [
- "custom/newsraft",
- "custom/mail",
"pulseaudio",
"tray",
"clock"