diff --git a/configuration.nix b/configuration.nix index 8d25997..7742705 100644 --- a/configuration.nix +++ b/configuration.nix @@ -110,8 +110,6 @@ }; }; - services.flatpak.enable = true; - services.displayManager.gdm.enable = true; services.desktopManager.gnome.enable = true; services.gnome.sushi.enable = true; @@ -253,7 +251,6 @@ environment.systemPackages = with pkgs; [ bubblewrap - flatpak wget nh ]; diff --git a/flake.lock b/flake.lock index 2b9ad7f..b75d776 100644 --- a/flake.lock +++ b/flake.lock @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1775356232, - "narHash": "sha256-oHbYzFPE2PoqfGKEQrLeSuJi944SvOCzNvcqQ5WHFjw=", + "lastModified": 1775325653, + "narHash": "sha256-dlopJjB8mZ3wE4HEUgQOE79zy/rutmG5m96ehAwmTWU=", "owner": "nix-community", "repo": "NUR", - "rev": "4755536f14c499dbfeabc316ba0650193d116bc1", + "rev": "63115094168cdfc8a4c09261f3f2fc9838f3affa", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1775349555, - "narHash": "sha256-4QuGX/NCAqojvTxatzZ0NiWuAV4EAOXU3UdlWsrYVAE=", + "lastModified": 1775278263, + "narHash": "sha256-BgkUmlOuFaaZQCnlhXkQ3/Fng65aq00tJQkpoeTn7Mw=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "92cc7e68329b4e394fd1282d412029d550444628", + "rev": "bb051d7a0f04356d42528bbb65dc014adf2dab66", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 5e260f4..0822516 100644 --- a/home.nix +++ b/home.nix @@ -43,11 +43,11 @@ let terminal = false; categories = [ "Network" ]; }; - betterbirdStartup = pkgs.makeDesktopItem { - name = "betterbird-startup"; - desktopName = "Betterbird Startup"; - comment = "Launch Betterbird in fullscreen"; - exec = "${pkgs.flatpak}/bin/flatpak run eu.betterbird.Betterbird --fullscreen"; + thunderbirdStartup = pkgs.makeDesktopItem { + name = "thunderbird-startup"; + desktopName = "Thunderbird Startup"; + comment = "Launch Thunderbird in fullscreen"; + exec = "${pkgs.thunderbird}/bin/thunderbird --fullscreen"; terminal = false; categories = [ "Network" ]; }; @@ -716,24 +716,6 @@ in noDisplay = true; }; - xdg.desktopEntries.betterbird = { - name = "Betterbird"; - genericName = "Mail Client"; - exec = "${pkgs.flatpak}/bin/flatpak run eu.betterbird.Betterbird %u"; - icon = "eu.betterbird.Betterbird"; - type = "Application"; - categories = [ - "Network" - "Email" - ]; - mimeType = [ - "x-scheme-handler/mailto" - "x-scheme-handler/webcal" - "text/calendar" - ]; - comment = "Fine-tuned Thunderbird mail client"; - }; - # Autostart applications using proper desktop files xdg.autostart = { enable = true; @@ -741,7 +723,7 @@ in zenStartup kittyZellijStartup signalStartup - betterbirdStartup + thunderbirdStartup vesktopStartup zulipStartup ]; @@ -778,7 +760,6 @@ in "x-scheme-handler/https" = "zen-beta.desktop"; "x-scheme-handler/about" = "zen-beta.desktop"; "x-scheme-handler/unknown" = "zen-beta.desktop"; - "x-scheme-handler/mailto" = "betterbird.desktop"; "inode/directory" = "org.gnome.Nautilus.desktop"; "application/zip" = "org.gnome.FileRoller.desktop"; "application/x-tar" = "org.gnome.FileRoller.desktop"; @@ -793,6 +774,97 @@ in }; }; + programs.thunderbird = { + enable = true; + profiles.default = { + isDefault = true; + settings = { + # Use maildir instead of mbox — faster for large mailboxes + "mail.serverDefaultStoreContractID" = "@mozilla.org/msgstore/maildirstore;1"; + + # Increase IMAP connection limits + "mail.server.default.max_cached_connections" = 10; + "mail.imap.max_cached_connections" = 10; + + # IMAP IDLE — server pushes new mail instantly (no polling delay) + "mail.server.default.use_idle" = true; + + # Poll every 1 minute as fallback when IDLE drops + "mail.server.default.check_new_mail" = true; + "mail.server.default.check_time" = 1; + + # Faster IMAP sync + "mail.imap.min_time_between_cleanups" = 300; + "mail.imap.fetch_by_chunks" = true; + "mail.imap.chunk_size" = 65536; + "mail.imap.chunk_add" = 16384; + + # Reduce timeouts (fail fast instead of hanging) + "mail.server.default.timeout" = 60; + "mailnews.tcptimeout" = 60; + + # Network performance + "network.http.max-connections" = 48; + "network.http.max-persistent-connections-per-server" = 10; + "network.dns.disablePrefetch" = false; + + # Cache messages offline for instant reading + "mail.server.default.offline_download" = true; + "mail.server.default.download_on_biff" = true; + + # Auto-compact folders when >20MB wasted (keeps mbox files lean) + "mail.purge_threshhold_mb" = 20; + "mail.prompt_purge_threshhold" = false; + + # Block remote content by default (tracking pixels, slow image loads) + "mailnews.message_display.disable_remote_image" = true; + + # Disable adaptive junk filter (server-side spam is better) + "mail.spam.manualMark" = true; + "mailnews.ui.junk.firstuse" = false; + "mailnews.ui.junk.manualMarkAsJunkMarksRead" = true; + + # Prefetch next message while reading current one + "mail.server.default.autosync_offline_stores" = true; + + # Open links in default browser (Zen) instead of Thunderbird's internal browser + "network.protocol-handler.warn-external.http" = false; + "network.protocol-handler.warn-external.https" = false; + "network.protocol-handler.expose-all" = true; + + # Simplify message rendering + "mailnews.display.prefer_plaintext" = false; + "mailnews.display.disallow_mime_handlers" = 0; + "mailnews.display.html_as" = 0; + + # Disable return receipt prompts + "mail.incorporate.return_receipt" = 0; + "mail.receipt.request_return_receipt_on" = false; + + # Disable chat and calendar background connections + "mail.chat.enabled" = false; + "calendar.integration.notify" = false; + + # Disable unnecessary features + "mail.phishing.detection.enabled" = false; + "mail.rights.version" = 1; + "mail.shell.checkDefaultClient" = false; + "mail.spotlight.enable" = false; + + # Faster UI rendering + "gfx.webrender.all" = true; + + # Network keepalive + "network.http.keep-alive.timeout" = 600; + "network.http.response.timeout" = 120; + + # Fix UI not updating after delete/archive — move to next message automatically + "mail.delete_matches_sort_order" = true; + "mail.advance_on_delete" = true; + }; + }; + }; + home.file.".claude/settings.json".text = builtins.toJSON { allowedTools = [ "Read"