diff --git a/configuration.nix b/configuration.nix index 7742705..8d25997 100644 --- a/configuration.nix +++ b/configuration.nix @@ -110,6 +110,8 @@ }; }; + services.flatpak.enable = true; + services.displayManager.gdm.enable = true; services.desktopManager.gnome.enable = true; services.gnome.sushi.enable = true; @@ -251,6 +253,7 @@ environment.systemPackages = with pkgs; [ bubblewrap + flatpak wget nh ]; diff --git a/flake.lock b/flake.lock index b75d776..2b9ad7f 100644 --- a/flake.lock +++ b/flake.lock @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1775325653, - "narHash": "sha256-dlopJjB8mZ3wE4HEUgQOE79zy/rutmG5m96ehAwmTWU=", + "lastModified": 1775356232, + "narHash": "sha256-oHbYzFPE2PoqfGKEQrLeSuJi944SvOCzNvcqQ5WHFjw=", "owner": "nix-community", "repo": "NUR", - "rev": "63115094168cdfc8a4c09261f3f2fc9838f3affa", + "rev": "4755536f14c499dbfeabc316ba0650193d116bc1", "type": "github" }, "original": { @@ -228,11 +228,11 @@ ] }, "locked": { - "lastModified": 1775278263, - "narHash": "sha256-BgkUmlOuFaaZQCnlhXkQ3/Fng65aq00tJQkpoeTn7Mw=", + "lastModified": 1775349555, + "narHash": "sha256-4QuGX/NCAqojvTxatzZ0NiWuAV4EAOXU3UdlWsrYVAE=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "bb051d7a0f04356d42528bbb65dc014adf2dab66", + "rev": "92cc7e68329b4e394fd1282d412029d550444628", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 0822516..5e260f4 100644 --- a/home.nix +++ b/home.nix @@ -43,11 +43,11 @@ let terminal = false; categories = [ "Network" ]; }; - thunderbirdStartup = pkgs.makeDesktopItem { - name = "thunderbird-startup"; - desktopName = "Thunderbird Startup"; - comment = "Launch Thunderbird in fullscreen"; - exec = "${pkgs.thunderbird}/bin/thunderbird --fullscreen"; + betterbirdStartup = pkgs.makeDesktopItem { + name = "betterbird-startup"; + desktopName = "Betterbird Startup"; + comment = "Launch Betterbird in fullscreen"; + exec = "${pkgs.flatpak}/bin/flatpak run eu.betterbird.Betterbird --fullscreen"; terminal = false; categories = [ "Network" ]; }; @@ -716,6 +716,24 @@ 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; @@ -723,7 +741,7 @@ in zenStartup kittyZellijStartup signalStartup - thunderbirdStartup + betterbirdStartup vesktopStartup zulipStartup ]; @@ -760,6 +778,7 @@ 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"; @@ -774,97 +793,6 @@ 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"