90 lines
2.4 KiB
Nix
90 lines
2.4 KiB
Nix
|
{ config, lib, pkgs, ... }:
|
||
|
|
||
|
with lib;
|
||
|
|
||
|
let
|
||
|
cfg = config.programs.lieer;
|
||
|
|
||
|
lieerAccounts =
|
||
|
filter (a: a.lieer.enable) (attrValues config.accounts.email.accounts);
|
||
|
|
||
|
nonGmailAccounts =
|
||
|
map (a: a.name) (filter (a: a.flavor != "gmail.com") lieerAccounts);
|
||
|
|
||
|
nonGmailConfigHelp =
|
||
|
map (name: ''accounts.email.accounts.${name}.flavor = "gmail.com";'')
|
||
|
nonGmailAccounts;
|
||
|
|
||
|
missingNotmuchAccounts = map (a: a.name)
|
||
|
(filter (a: !a.notmuch.enable && a.lieer.notmuchSetupWarning)
|
||
|
lieerAccounts);
|
||
|
|
||
|
notmuchConfigHelp =
|
||
|
map (name: "accounts.email.accounts.${name}.notmuch.enable = true;")
|
||
|
missingNotmuchAccounts;
|
||
|
|
||
|
configFile = account: {
|
||
|
name = "${account.maildir.absPath}/.gmailieer.json";
|
||
|
value = {
|
||
|
text = builtins.toJSON {
|
||
|
inherit (account.lieer) timeout;
|
||
|
account = account.address;
|
||
|
replace_slash_with_dot = account.lieer.replaceSlashWithDot;
|
||
|
drop_non_existing_label = account.lieer.dropNonExistingLabels;
|
||
|
ignore_tags = account.lieer.ignoreTagsLocal;
|
||
|
ignore_remote_labels = account.lieer.ignoreTagsRemote;
|
||
|
} + "\n";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
in {
|
||
|
meta.maintainers = [ maintainers.tadfisher ];
|
||
|
|
||
|
options = {
|
||
|
programs.lieer.enable =
|
||
|
mkEnableOption "lieer Gmail synchronization for notmuch";
|
||
|
};
|
||
|
|
||
|
config = mkIf cfg.enable (mkMerge [
|
||
|
(mkIf (missingNotmuchAccounts != [ ]) {
|
||
|
warnings = [''
|
||
|
lieer is enabled for the following email accounts, but notmuch is not:
|
||
|
|
||
|
${concatStringsSep "\n " missingNotmuchAccounts}
|
||
|
|
||
|
Notmuch can be enabled with:
|
||
|
|
||
|
${concatStringsSep "\n " notmuchConfigHelp}
|
||
|
|
||
|
If you have configured notmuch outside of Home Manager, you can suppress this
|
||
|
warning with:
|
||
|
|
||
|
programs.lieer.notmuchSetupWarning = false;
|
||
|
''];
|
||
|
})
|
||
|
|
||
|
{
|
||
|
assertions = [{
|
||
|
assertion = nonGmailAccounts == [ ];
|
||
|
message = ''
|
||
|
lieer is enabled for non-Gmail accounts:
|
||
|
|
||
|
${concatStringsSep "\n " nonGmailAccounts}
|
||
|
|
||
|
If these accounts are actually Gmail accounts, you can
|
||
|
fix this error with:
|
||
|
|
||
|
${concatStringsSep "\n " nonGmailConfigHelp}
|
||
|
'';
|
||
|
}];
|
||
|
|
||
|
home.packages = [ pkgs.gmailieer ];
|
||
|
|
||
|
# Notmuch should ignore non-mail files created by lieer.
|
||
|
programs.notmuch.new.ignore = [ "/.*[.](json|lock|bak)$/" ];
|
||
|
|
||
|
home.file = listToAttrs (map configFile lieerAccounts);
|
||
|
}
|
||
|
]);
|
||
|
}
|