# fetches mails for me { lib, pkgs, config, ... }: { backup.all.restic.dirs = [ config.users.users.mailUser.home ]; users.users.mailUser = { isNormalUser = true; description = "collects mails for me"; hashedPassword = "!"; name = "mailfetcher"; openssh.authorizedKeys.keyFiles = config.users.users.root.openssh.authorizedKeys.keyFiles; }; # configure passwords krops.userKeys = { "gmail.palipalo9" = { user = config.users.users.mailUser.name; source = toString ; requiredBy = [ "fetchmail.service" ]; }; "gmx.palo_van_dalo" = { user = config.users.users.mailUser.name; source = toString ; requiredBy = [ "fetchmail.service" ]; }; "gmx.ingolf_wagner" = { user = config.users.users.mailUser.name; source = toString ; requiredBy = [ "fetchmail.service" ]; }; "web.pali_palo" = { user = config.users.users.mailUser.name; source = toString ; requiredBy = [ "fetchmail.service" ]; }; "siteground.contact" = { user = config.users.users.mailUser.name; source = toString ; requiredBy = [ "fetchmail.service" ]; }; "gaykraft.root" = { user = config.users.users.mailUser.name; source = toString ; requiredBy = [ "fetchmail.service" ]; }; "c-base.palo" = { user = config.users.users.mailUser.name; source = toString ; requiredBy = [ "fetchmail.service" ]; }; }; environment.systemPackages = [ pkgs.muchsync ]; # configure accounts home-manager.users.mailUser.accounts.email = { accounts = { palo_van_dalo-gmx = { primary = false; address = "palo_van_dalo@gmx.de"; aliases = [ ]; realName = "Ingolf Wagner"; userName = "palo_van_dalo@gmx.de"; passwordCommand = "cat ${toString config.krops.userKeys."gmx.palo_van_dalo".target}"; imap = { host = "imap.gmx.net"; port = 993; }; mbsync = { enable = true; create = "both"; }; notmuch.enable = true; }; ingolf-wagner-gmx = { primary = false; address = "ingolf.wagner@gmx.de"; aliases = [ ]; realName = "Ingolf Wagner"; userName = "ingolf.wagner@gmx.de"; passwordCommand = "cat ${toString config.krops.userKeys."gmx.ingolf_wagner".target}"; imap = { host = "imap.gmx.net"; port = 993; }; mbsync = { enable = true; create = "both"; }; notmuch.enable = true; }; #gaykraft = { # primary = false; # address = "root@gaykraft.com"; # aliases = [ ]; # realName = "Ingolf Wagner"; # userName = "root@gaykraft.com"; # passwordCommand = "cat ${toString config.krops.userKeys."gaykraft.root".target}"; # imap = { # host = "mail.gaykraft.com"; # port = 993; # tls.certificatesFile = # pkgs.writeText "gaykraft.pem" '' # -----BEGIN CERTIFICATE----- # MIIDfzCCAmcCFBMAAMjIQnhYR9w+KIlfG8zLhM06MA0GCSqGSIb3DQEBCwUAMH8x # CzAJBgNVBAYTAlVLMRUwEwYDVQQIDAxXYXJ3aWNrc2hpcmUxEzARBgNVBAcMCkxl # YW1pbmd0b24xEDAOBgNVBAoMB09yZ05hbWUxHDAaBgNVBAsME1NlY3VyaXR5IERl # cGFydG1lbnQxFDASBgNVBAMMC2V4YW1wbGUuY29tMB4XDTE5MTEyNzAxNTU1NloX # DTE5MTEyODAxNTU1NloweTELMAkGA1UEBhMCVUsxFTATBgNVBAgMDFdhcndpY2tz # aGlyZTETMBEGA1UEBwwKTGVhbWluZ3RvbjEQMA4GA1UECgwHT3JnTmFtZTEWMBQG # A1UECwwNSVQgRGVwYXJ0bWVudDEUMBIGA1UEAwwLZXhhbXBsZS5jb20wggEiMA0G # CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAJwAMze7u3I3D2z2cT7IrBeyDHfdu # 5kCK9jZbYoU4wT7kNz/hD3BVe8BvUSNAEVJk/oPaE6v5PuFT2hAasoOhEEEr5Tt4 # xp1MRItjxu+SUs7uZ+LpocZC4NNGb6/LPcmgthC4w8jj/JtZmcoStFqAAOqkdb6d # tuf5lYHPxdFKRw2wgc/4pQo2PeeWder8NFoILC7Yh12zab7H2camobbbJl4tZPvJ # z1FBk0WfeZLsUZ+2tdtginTOszsjPngygsUdQVnxfQeWBkVFXcZTHg/fELaW5uwV # E4WIE5PZASlVwYV+gRqwM0312VW8zGF/JnwMT9hlcA27mwLBK8C4KoxRAgMBAAEw # DQYJKoZIhvcNAQELBQADggEBAIBWcdnQbRdgxI3DXCi+IY+u+0nGrt/dduDzSqlt # y0AFpRat4CImtgaG0jb7BDDEWTCycYFB+ABqUovQcJ5jjR/aq8Rfj2QD3nqIButg # PyQvyYn5Z5Rx6h9aF7IOu5Eo/r/a73zJXK6iOLoLhD/e2mSIsNCW8hfbSLgPdEHH # S14BxfacU0u1Pyh1WNprZ0C1HkJPJ/A0MZYRy4bJ5tYSO+ddcmYHbj8/ds728i8U # L6/ijQaZ0q+lO/IXUFYODLkRcFAitg3fp/rj6D0lRMGlZKdMgI1OT6ziZm/Y074I # yRo1wgUnGy6BOCZeHnZ9xa/q6huv9QZZGt6VtQFgnKpNNOY= # -----END CERTIFICATE----- # ''; # }; # mbsync = { # enable = true; # create = "both"; # }; # notmuch.enable = true; #}; pali_palo = { primary = false; address = "pali_palo@web.de"; aliases = [ ]; realName = "Ingolf Wagner"; userName = "pali_palo@web.de"; passwordCommand = "cat ${toString config.krops.userKeys."web.pali_palo".target}"; imap = { host = "imap.web.de"; port = 993; }; mbsync = { enable = true; create = "both"; }; notmuch.enable = true; }; c-base = { primary = false; address = "palo@c-base.org"; aliases = [ ]; realName = "Ingolf Wagner"; userName = "palo"; passwordCommand = "cat ${toString config.krops.userKeys."c-base.palo".target}"; imap = { host = "c-mail.c-base.org"; port = 993; # fetched using : nix-shell -p openssl --run "openssl s_client -connect c-mail.c-base.org:993 -showcerts" tls.certificatesFile = pkgs.writeText "c-base.pem" '' -----BEGIN CERTIFICATE----- MIIFKDCCAxCgAwIBAgIDAtwrMA0GCSqGSIb3DQEBDQUAMFQxFDASBgNVBAoTC0NB Y2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5vcmcxHDAaBgNV BAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwHhcNMTkxMTA5MDgzMjUyWhcNMjExMTA4 MDgzMjUyWjBhMQswCQYDVQQGEwJERTEPMA0GA1UECBMGQmVybGluMQ8wDQYDVQQH EwZCZXJsaW4xFDASBgNVBAoTC2MtYmFzZSBlLlYuMRowGAYDVQQDExFjLW1haWwu Yy1iYXNlLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKR3XBxJ 72MayCS0D5GCoHcY0TQLs1DQSohCCobRdSowFJzNQw/2lL6bb+Q2rmevZQXuM4vP YbFytvTDmY5y5MNXEqGLfi8D5TcaP/RdXWQU++yUunE6yMdqZNheeXPjM//PnoXG DyT236BovEi3YipUUsLXFiRj+cAjrQE7a2YUs3fjV3P6grMH0V06J6P6+JJvRgp2 K33uhKhnKyb3s1tbdbu1KeGozx2ws9lg79XV+Py6PXxP6jTZ2PCsaxs3BThSdmsl vQyk/zoW7tA1m2ntRCoyFHZqfOHsN3UOS/HDRlXqgSf0ah8cPYPsl0ayXhgOv0Tu 1PSMt4Ve2GajX8MCAwEAAaOB9TCB8jAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQE AwIDqDA0BgNVHSUELTArBggrBgEFBQcDAgYIKwYBBQUHAwEGCWCGSAGG+EIEAQYK KwYBBAGCNwoDAzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9v Y3NwLmNhY2VydC5vcmcvMDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly9jcmwuY2Fj ZXJ0Lm9yZy9jbGFzczMtcmV2b2tlLmNybDAtBgNVHREEJjAkghFjLW1haWwuYy1i YXNlLm9yZ4IPbWFpbC5jLWJhc2Uub3JnMA0GCSqGSIb3DQEBDQUAA4ICAQBjTIa1 xdhUYXJidv1U0qaqSV1DzumakFY20OM4QCV0Qvlq+SQUqroGBTIGodxhTnjG5o01 4xBAnsTcMRNycXHu0j6XYqDS4QhaFcGdFmXP0EQfAFbvhwZdbvgiRHuUTSGEbcLp Vk8sP8dpzx+zMAZ6PL7XMwPFPTHm7vw40qmTyCuUcnhIwHgwGxu4yu0tdsU+VwRD RVsdZO4V2GhFTz8oRcHvmC2wmx+Zwx0RXWPXSN5yRDDZWwY4WbECa2MvojH1HlJG YJkokq7nbYJix/RipSkAXgurcgppVmM5cf7uYgSrltW8pm3IMMPrlaFrlzMMMtdq SYFk+FDp296B7CDyWpQhDcVjnGQ70JfMWT5S3Lsi8DnI2pul9ljxPOt+Q8XFh1oz Ofr7y5Qjm72YToOX1j7N8ppCh0RJH4lOsouTPVdp859ch9FxZdceq+nC744wv+Nt TQPw15Gk3RY5mVYBE/Cw2T7j7qDmBaEUKxkfW7q8t287FXM4XX6C+cKYr6jYx6s1 5/2p4gCuOALYqJ7kD2xjci0VTWu77H4J2QKEZF8AgdI36dIYr7GY0e/+xb/CScwr uvu2R9jfPOMVu6CiavPGUtcvju4A+qMUDqIyH9dNwkMQRffAtmsF6KR4nMYxhr45 nKY1BaufWLD1UWrjaR1IF6L5qDHOXeMJEChYkg== -----END CERTIFICATE-----''; }; mbsync = { enable = true; create = "both"; }; notmuch.enable = true; }; gmail = { # for google accounts you have to allow 'less secure apps' in accounts.google.com primary = true; address = "palipalo9@googlemail.com"; aliases = [ ]; realName = "Ingolf Wagner"; userName = "palipalo9@googlemail.com"; passwordCommand = "cat ${toString config.krops.userKeys."gmail.palipalo9".target}"; imap = { host = "imap.gmail.com"; port = 993; }; mbsync = { enable = true; create = "both"; }; notmuch.enable = true; }; ingolf-wagner-de = { primary = false; address = "contact@ingolf-wagner.de"; aliases = [ ]; realName = "Ingolf Wagner"; userName = "contact@ingolf-wagner.de"; passwordCommand = "cat ${toString config.krops.userKeys."siteground.contact".target}"; imap = { host = "securees5.sgcpanel.com"; port = 143; tls.useStartTls = true; }; # make sure the upstream mail is deleted getmail = { enable = true; delete = true; readAll = false; mailboxes = [ "ALL" ]; }; #mbsync = { # enable = true; # create = "both"; #}; notmuch.enable = true; }; #ingolf-wagner = { # primary = false; # address = "contact@ingolf-wagner.de"; # aliases = [ ]; # realName = "Ingolf Wagner"; # userName = "contact@ingolf-wagner.de"; # passwordCommand = "cat ${toString config.krops.userKeys."siteground.contact".target}"; # imap = { # host = "securees5.sgcpanel.com"; # port = 143; # tls.useStartTls = true; # }; # mbsync = { # enable = true; # create = "both"; # }; # notmuch.enable = true; #}; }; }; # configure mbsync home-manager.users.mailUser.programs.mbsync.enable = true; # re-tag everything once a day systemd.services.retagmail = { enable = true; serviceConfig = { User = config.users.users.mailUser.name; }; environment.NOTMUCH_CONFIG = "${config.users.users.mailUser.home}/.config/notmuch/notmuchrc"; script = '' echo "run afew" ${pkgs.afew}/bin/afew --all --tag -v ''; }; systemd.timers.retagmail = { enable = true; timerConfig = { OnCalendar = "daily"; Persistent = "true"; }; wantedBy = [ "multi-user.target" ]; }; # fetch mails every 10 minutes systemd.services.fetchmail = { enable = true; serviceConfig = { User = config.users.users.mailUser.name; }; environment.NOTMUCH_CONFIG = "${config.users.users.mailUser.home}/.config/notmuch/notmuchrc"; script = '' echo "run mbsync" ${pkgs.isync}/bin/mbsync \ --all echo "run getmail" ${pkgs.getmail}/bin/getmail \ --quiet \ --rcfile getmailingolf-wagner-de echo "run notmuch" ${pkgs.notmuch}/bin/notmuch new echo "run afew" ${pkgs.afew}/bin/afew --new --tag -v ''; }; systemd.timers.fetchmail = { enable = true; # timerConfig.OnCalendar = " *-*-* *:00:00"; timerConfig.OnCalendar = "*:0/10"; wantedBy = [ "multi-user.target" ]; }; # configure notmuch home-manager.users.mailUser.programs.notmuch = { enable = true; new.tags = [ "unread" "inbox" "new" ]; }; home-manager.users.mailUser.home.file."notmuch" = { source = "${config.users.users.mailUser.home}/.config/notmuch/notmuchrc"; target = ".notmuch-config"; }; # a few config home-manager.users.mailUser.programs.afew = { enable = true; extraConfig = with lib; let template = index: { tags, query, message ? "generic", ... }: '' [Filter.${toString index}] query = ${query} tags = ${concatStringsSep ";" tags} message = ${message} ''; filters = [ { query = "from:linkedin.com"; tags = [ "+linked" "+jobs" ]; } { query = "from:computerfutures.com OR from:computerfutures.de"; tags = [ "+jobs" "-inbox" ]; } { query = "from:seek.com.au or from:seek.co.nz"; tags = [ "+jobs" ]; } { query = "from:xing.com"; tags = [ "+jobs" "-inbox" ]; } { query = "from:no-reply@backtrace.io"; tags = [ "+sononym" "-inbox" "-unread" ]; } { query = "from:ebay.com OR from:ebay.de OR from:ebay.net"; tags = [ "+ebay" "+shop" "+billing" ]; } { query = "from:bahn.de"; tags = [ "+billing" "+bahn" ]; } { query = "from:fysitech.atlassian.net OR to:engiadina-pwa@noreply.github.com"; tags = [ "+mia" "+work" "-unread" "-inbox" ]; } { query = "from:turners.co.nz"; tags = [ "+junk" "-unread" "-inbox" ]; } { query = "from:codepen.io"; tags = [ "+junk" "-unread" "-inbox" ]; } { query = "from:mailings.web.de"; tags = [ "+junk" "-unread" "-inbox" ]; } { query = "from:circleci.com OR (from:noreply@github.com AND to:audio-overlay@googlegroups.com)"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:getdigital.de"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:digitalo.de"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:puppet.com"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:mixcloudmail.com AND subject:Weekly Update"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:facebook.com OR from:facebookmail.com"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:getpocket.com"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:oknotify2.com"; tags = [ "+okcupid" ]; } { query = "from:oknotify2.com AND NOT subject:New message"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:paulaschoice.com"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:samplemagic.com OR from:wavealchemy.co.uk OR from:creators.gumroad.com"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:immobilienscout24.de"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:magix.net"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:booking.com"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:hackster.io"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:trade4less.de"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:taxback.de OR to:taxback.de"; tags = [ "+steuer" ]; } { query = "from:campact.de"; tags = [ "+campact" "+politics" ]; } { query = "from:menospese.com"; tags = [ "+junk" "-unread" "-inbox" ]; } { query = "from:aliexpress.com"; tags = [ "+shop" "+aliexpress" ]; } { query = "from:congstar.de"; tags = [ "+billing" "+congstar" "-inbox" "-unread" ]; } { query = "from:congstarnews.de"; tags = [ "+congstar" "-inbox" "-unread" "+junk" ]; } { query = "from:fitnessfirst.de"; tags = [ "-inbox" "-unread" "+junk" ]; } { query = "from:steampowered.com AND NOT ( subject:purchase OR subject:received )"; tags = [ "-inbox" "-unread" ]; } { query = "from:steampowered.com AND ( subject:purchase OR subject:received )"; tags = [ "+billing" "+steam" ]; } { query = "from:gog.com AND NOT subject:Bestellung"; tags = [ "-inbox" "-unread" ]; } { query = "from:gog.com AND subject:Bestellung"; tags = [ "+billing" "+gog" ]; } { query = "from:drive-now.com"; tags = [ "+billing" "+drivenow" "-inbox" "-unread" ]; } { query = "from:tinc-vpn.org"; tags = [ "+tinc" ]; } { query = "from:mindfactory.de"; tags = [ "+shop" "+billing" ]; } { query = "from:zalando.de"; tags = [ "+shop" "+billing" "+zalando" ]; } { query = "from:ing.de"; tags = [ "+bank" "+ingdiba" ]; } { query = "from:nab.com.au"; tags = [ "+bank" "+nab" "-inbox" "-unread" ]; } { query = "from:dkb.de"; tags = [ "+bank" "+dkb" ]; } { query = "from:o2online.de"; tags = [ "+billing" "+o2" ]; } { query = "from:betfair.com"; tags = [ "+work" "+betfair" ]; } { query = "from:ghostinspector.com"; tags = [ "-unread" "-inbox" "+junk" ]; } { query = "from:travis-ci.org AND subject:csv-to-qif"; tags = [ "+development" "+csv-to-qif" ]; } { query = "to:proaudio@lists.tuxfamily.org"; tags = [ "-inbox" "-unread" ]; } { query = "from:nixos1@discoursemail.com"; tags = [ "+nixos" "+discourse" ]; } { query = "from:limebike.com AND (subject:Funds OR subject:Receipt)"; tags = [ "-inbox" "-unread" "+billing" "+limebike" ]; } { query = "from:hetzner.com OR from:hetzner.de"; tags = [ "+hetzner" ]; } { query = "from:freemusicarchive.org"; tags = [ "+FMA" ]; } { query = "from:namecheap.com"; tags = [ "+namecheap" "+billing" ]; } { query = "from:nintendo.com"; tags = [ "+nintendo" "+billing" ]; } { query = "from:oculus.com AND subject:receipt"; tags = [ "+oculus" "+billing" ]; } { query = "from:vstbuzz.com"; tags = [ "+junk" "-inbox" ]; } { query = "from:runtastic.com"; tags = [ "+junk" "-inbox" ]; } { query = "from:letterboxd.com"; tags = [ "+junk" "-inbox" ]; } { query = "from::microsoftstoreemail.com"; tags = [ "+junk" "-inbox" ]; } { query = "from:car2go.com"; tags = [ "-inbox" "-unread" ]; } { query = "from:sixt.de"; tags = [ "-inbox" "-unread" ]; } { query = "from:meetup.com"; tags = [ "-inbox" "-unread" "+meetup" ]; } { query = "from:slack.com"; tags = [ "+slack" ]; } { query = "from:keybase.io"; tags = [ "+keybase" ]; } { query = "from:tumblr.com"; tags = [ "+junk" "-inbox" "-unread" ]; } { query = "from:jobs2web.com"; tags = [ "+newzealand" "+jobs" "-inbox" ]; } { query = "from:mailings.gmx.net"; tags = [ "+junk" "-inbox" "-unread" ]; } { query = "from:paypal.de AND subject:Bestätigung"; tags = [ "-unread" "+paypal" "+billing" ]; } { query = "to:c-base.org"; tags = [ "+cbase" ]; } { query = "to:c-base.org AND subject=[auto-report]"; tags = [ "-unread" "-inbox" ]; } { query = "to:renoise@ingolf-wagner.de OR to:root@renoise.com OR from:renoise.com OR to:admin@renoise.com"; tags = [ "+renoise" ]; } { query = "from:amazon.de OR from:amazon.com AND NOT to:renoise.com"; tags = [ "+shop" "+amazon" "+billing" ]; } { query = "to:renoise.com AND NOT ( from:renoise.com OR from:root OR from:hetzner.com OR from:hetzner.de OR from:amazon.com OR from:gmail.com )"; tags = [ "-inbox" "-unread" "+junk" "+renoise" ]; } # final rules to make imap sync stuff easier # there can only be one output folder tag, and theses rules are prioritized { query = "tag:fraud"; tags = [ "-inbox" "-archive" "-junk" "-unread" ]; message = "clean up tag fraud"; } { query = "tag:junk"; tags = [ "-inbox" "-archive" "-fraud" "-unread" ]; message = "clean up tag junk"; } { query = "tag:archive"; tags = [ "-inbox" "-junk" "-fraud" "-unread" ]; message = "clean up tag archive"; } { query = "tag:inbox"; tags = [ "-archive" "-junk" "-fraud" ]; message = "clean up inbox"; } { query = "tag:killed"; tags = [ "-inbox" "-unread" ]; message = "clean up tag killed"; } # remove new tag at the end { query = "tag:new"; tags = [ "-new" ]; message = "remove new tag at the end"; } ]; in '' # Tag mails which are mailing lists [ListMailsFilter] # Tag mails as killed if the thread has been marked as "killed" [KillThreadsFilter] ${concatStringsSep "\n" (imap0 template filters)} ''; }; }