aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-05-13 13:43:14 +0100
committerLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-05-13 13:43:14 +0100
commit75d9c733b56ad0d456cefbfbbf69454061f0b7a8 (patch)
tree961531bfd91977ef82a10e540b28d37b5f02d85d
parentd4bdb4c9489d7ec3f0144ce0934ae38fe446aebe (diff)
downloaddotfiles-75d9c733b56ad0d456cefbfbbf69454061f0b7a8.tar.gz
dotfiles-75d9c733b56ad0d456cefbfbbf69454061f0b7a8.tar.bz2
dotfiles-75d9c733b56ad0d456cefbfbbf69454061f0b7a8.zip
refactor(mail): drop TUI stack, add headless proton-bridge
Remove aerc, khal, khard, vdirsyncer from meta/mail.txt and delete their configs (aerc/, vdirsyncer systemd override, aerc .desktop handler). Point linkhandler mailto at xdg-open until a GUI client is set up. Add systemd user unit for protonmail-bridge --noninteractive, tied to graphical-session.target so it starts with the sway session.
-rw-r--r--README.md2
-rw-r--r--dot_config/aerc/aerc.conf32
-rw-r--r--dot_config/aerc/binds.conf165
-rw-r--r--dot_config/systemd/user/protonmail-bridge.service14
-rw-r--r--dot_config/systemd/user/vdirsyncer.service.d/override.conf2
-rwxr-xr-xdot_local/bin/executable_linkhandler2
-rw-r--r--dot_local/share/applications/mail.desktop19
-rw-r--r--meta/mail.txt4
8 files changed, 16 insertions, 224 deletions
diff --git a/README.md b/README.md
index 77b5da9..edea69b 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@ My Arch Linux configuration, managed with [chezmoi](https://www.chezmoi.io/).
| Lock screen | [swaylock](https://github.com/swaywm/swaylock) |
| Browser | [LibreWolf](https://librewolf.net/), hardened via `user-overrides.js` + `userChrome.css` (kept under `firefox/` by name for recognizability) |
| Secrets & identity | [GPG](https://gnupg.org/) (commit signing + SSH auth via gpg-agent), [pass](https://www.passwordstore.org/) |
-| Media & viewers | [mpv](https://mpv.io/), [zathura](https://pwmt.org/projects/zathura/), [yazi](https://yazi-rs.github.io/), [aerc](https://aerc-mail.org/) |
+| Media & viewers | [mpv](https://mpv.io/), [zathura](https://pwmt.org/projects/zathura/), [yazi](https://yazi-rs.github.io/) |
| Code quality | stylua + [selene](https://github.com/Kampfkarren/selene), [shfmt](https://github.com/mvdan/sh) + [shellcheck](https://www.shellcheck.net/), [ruff](https://github.com/astral-sh/ruff), [taplo](https://taplo.tamasfe.dev/), [prettier](https://prettier.io/) — all wired through `just check` |
Keybinds are documented in [`KEYBINDS.md`](./KEYBINDS.md).
diff --git a/dot_config/aerc/aerc.conf b/dot_config/aerc/aerc.conf
deleted file mode 100644
index 25deb62..0000000
--- a/dot_config/aerc/aerc.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-[ui]
-styleset-name=gruvbox
-fuzzy-complete=true
-reverse-msglist-order=true
-threading-enabled=true
-show-thread-context=true
-
-[compose]
-address-book-cmd=khard email --remove-first-line --parsable %s
-file-picker-cmd=fzf --multi --query=%s
-empty-subject-warning=true
-no-attachment-warning=^[^>]*attach(ed|ment)
-
-[multipart-converters]
-text/html=pandoc -f markdown -t html --standalone
-
-[filters]
-text/plain=colorize
-text/calendar=calendar
-message/delivery-status=colorize
-message/rfc822=colorize
-text/html=html | colorize
-text/*=bat -fP --file-name="$AERC_FILENAME"
-application/x-sh=bat -fP -l sh
-.headers=colorize
-
-[openers]
-x-scheme-handler/http*=librewolf
-text/html=librewolf
-
-[hooks]
-mail-received=notify-send "[$AERC_ACCOUNT/$AERC_FOLDER] New mail from $AERC_FROM_NAME" "$AERC_SUBJECT"
diff --git a/dot_config/aerc/binds.conf b/dot_config/aerc/binds.conf
deleted file mode 100644
index 145efd9..0000000
--- a/dot_config/aerc/binds.conf
+++ /dev/null
@@ -1,165 +0,0 @@
-# Binds are of the form <key sequence> = <command to run>
-# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
-# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit
-<C-p> = :prev-tab<Enter>
-<C-PgUp> = :prev-tab<Enter>
-<C-n> = :next-tab<Enter>
-<C-PgDn> = :next-tab<Enter>
-<C-t> = :term<Enter>
-? = :help keys<Enter>
-<C-c> = :prompt 'Quit?' quit<Enter>
-<C-q> = :prompt 'Quit?' quit<Enter>
-
-[messages]
-q = :quit<Enter>
-h = :quit<Enter>
-
-j = :next<Enter>
-<Down> = :next<Enter>
-<C-d> = :next 50%<Enter>
-<C-f> = :next 100%<Enter>
-<PgDn> = :next 100%<Enter>
-
-k = :prev<Enter>
-<Up> = :prev<Enter>
-<C-u> = :prev 50%<Enter>
-<C-b> = :prev 100%<Enter>
-<PgUp> = :prev 100%<Enter>
-g = :select 0<Enter>
-G = :select -1<Enter>
-
-J = :next-folder<Enter>
-<C-Down> = :next-folder<Enter>
-K = :prev-folder<Enter>
-<C-Up> = :prev-folder<Enter>
-H = :collapse-folder<Enter>
-<C-Left> = :collapse-folder<Enter>
-L = :expand-folder<Enter>
-<C-Right> = :expand-folder<Enter>
-
-v = :mark -t<Enter>
-<Space> = :mark -t<Enter>:next<Enter>
-V = :mark -v<Enter>
-
-T = :toggle-threads<Enter>
-zc = :fold<Enter>
-zo = :unfold<Enter>
-
-<Enter> = :view<Enter>
-d = :prompt 'Really delete this message?' 'delete-message'<Enter>
-D = :delete<Enter>
-a = :archive flat<Enter>
-A = :unmark -a<Enter>:mark -T<Enter>:archive flat<Enter>
-
-C = :compose<Enter>
-m = :compose<Enter>
-
-rr = :reply -a<Enter>
-rq = :reply -aq<Enter>
-Rr = :reply<Enter>
-Rq = :reply -q<Enter>
-
-c = :cf<space>
-$ = :term<space>
-! = :term<space>
-| = :pipe<space>
-
-/ = :search<space>
-\ = :filter<space>
-n = :next-result<Enter>
-N = :prev-result<Enter>
-<Esc> = :clear<Enter>
-
-s = :split<Enter>
-S = :vsplit<Enter>
-
-[messages:folder=Drafts]
-<Enter> = :recall<Enter>
-
-[view]
-/ = :toggle-key-passthrough<Enter>/
-q = :close<Enter>
-h = :close<Enter>
-O = :open<Enter>
-o = :open<Enter>
-S = :save<space>
-| = :pipe<space>
-D = :delete<Enter>
-A = :archive flat<Enter>
-s = :flag -t<Enter>
-
-<C-l> = :open-link <space>
-
-f = :forward<Enter>
-rr = :reply -a<Enter>
-rq = :reply -aq<Enter>
-Rr = :reply<Enter>
-Rq = :reply -q<Enter>
-
-H = :toggle-headers<Enter>
-<C-k> = :prev-part<Enter>
-<C-Up> = :prev-part<Enter>
-<C-j> = :next-part<Enter>
-<C-Down> = :next-part<Enter>
-J = :next<Enter>
-<C-Right> = :next<Enter>
-K = :prev<Enter>
-<C-Left> = :prev<Enter>
-
-[view::passthrough]
-$noinherit = true
-$ex = <C-x>
-<Esc> = :toggle-key-passthrough<Enter>
-
-[compose]
-# Keybindings used when the embedded terminal is not selected in the compose
-# view
-$noinherit = true
-$ex = <C-x>
-<C-k> = :prev-field<Enter>
-<C-Up> = :prev-field<Enter>
-<C-j> = :next-field<Enter>
-<C-Down> = :next-field<Enter>
-<A-p> = :switch-account -p<Enter>
-<C-Left> = :switch-account -p<Enter>
-<A-n> = :switch-account -n<Enter>
-<C-Right> = :switch-account -n<Enter>
-<tab> = :next-field<Enter>
-<backtab> = :prev-field<Enter>
-<C-p> = :prev-tab<Enter>
-<C-PgUp> = :prev-tab<Enter>
-<C-n> = :next-tab<Enter>
-<C-PgDn> = :next-tab<Enter>
-
-[compose::editor]
-# Keybindings used when the embedded terminal is selected in the compose view
-$noinherit = true
-$ex = <C-x>
-<C-k> = :prev-field<Enter>
-<C-Up> = :prev-field<Enter>
-<C-j> = :next-field<Enter>
-<C-Down> = :next-field<Enter>
-<C-p> = :prev-tab<Enter>
-<C-PgUp> = :prev-tab<Enter>
-<C-n> = :next-tab<Enter>
-<C-PgDn> = :next-tab<Enter>
-
-[compose::review]
-# Keybindings used when reviewing a message to be sent
-y = :send<Enter>
-n = :abort<Enter>
-v = :preview<Enter>
-p = :postpone<Enter>
-q = :choose -o d discard abort -o p postpone postpone<Enter>
-e = :edit<Enter>
-a = :attach<space>
-d = :detach<space>
-
-[terminal]
-$noinherit = true
-$ex = <C-x>
-
-<C-p> = :prev-tab<Enter>
-<C-n> = :next-tab<Enter>
-<C-PgUp> = :prev-tab<Enter>
-<C-PgDn> = :next-tab<Enter>
diff --git a/dot_config/systemd/user/protonmail-bridge.service b/dot_config/systemd/user/protonmail-bridge.service
new file mode 100644
index 0000000..5da14c5
--- /dev/null
+++ b/dot_config/systemd/user/protonmail-bridge.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=ProtonMail Bridge (headless IMAP/SMTP proxy)
+After=network-online.target
+Wants=network-online.target
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/protonmail-bridge --noninteractive
+Restart=on-failure
+RestartSec=10s
+Environment=PASSWORD_STORE_DIR=%h/.local/share/password-store
+
+[Install]
+WantedBy=graphical-session.target
diff --git a/dot_config/systemd/user/vdirsyncer.service.d/override.conf b/dot_config/systemd/user/vdirsyncer.service.d/override.conf
deleted file mode 100644
index 6bc6060..0000000
--- a/dot_config/systemd/user/vdirsyncer.service.d/override.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[Service]
-Environment="PASSWORD_STORE_DIR=%h/.local/share/password-store"
diff --git a/dot_local/bin/executable_linkhandler b/dot_local/bin/executable_linkhandler
index ee63eed..747adc5 100755
--- a/dot_local/bin/executable_linkhandler
+++ b/dot_local/bin/executable_linkhandler
@@ -35,7 +35,7 @@ case "$url" in
setsid rssadd "$url" >/dev/null 2>&1 &
;;
mailto:*)
- setsid aerc "$url" >/dev/null 2>&1 &
+ xdg-open "$url" >/dev/null 2>&1 &
;;
*.dot)
setsid xdot "$url" >/dev/null 2>&1 &
diff --git a/dot_local/share/applications/mail.desktop b/dot_local/share/applications/mail.desktop
deleted file mode 100644
index d8d5e84..0000000
--- a/dot_local/share/applications/mail.desktop
+++ /dev/null
@@ -1,19 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=aerc
-
-GenericName=Mail Client
-Comment=Launches the aerc email client
-Keywords=Email,Mail,IMAP,SMTP
-Categories=Office;Network;Email;ConsoleOnly
-
-Type=Application
-Icon=utilities-terminal
-Terminal=true
-Exec=aerc
-
-[Desktop Action compose]
-# enable as default mailto: handler using
-# xdg-mime default aerc.desktop x-scheme-handler/mailto
-Exec=aerc %u
-MimeType=x-scheme-handler/mailto;
diff --git a/meta/mail.txt b/meta/mail.txt
index 235fa1b..4234dc4 100644
--- a/meta/mail.txt
+++ b/meta/mail.txt
@@ -1,5 +1 @@
-aerc
-khal
-khard
protonmail-bridge-nogui
-vdirsyncer