1
0
Fork 0
mirror of https://github.com/nix-community/home-manager synced 2024-11-05 10:49:44 +01:00
home-manager/modules/programs/lieer.nix
Tad Fisher 60a939bd01
programs.lieer: add module
Add 'programs.lieer', a tool for synchronizing a Gmail account with a
local maildir and notmuch database. Per-account configuration lives in
'accounts.email.accounts.<name>.lieer'.
2020-03-07 15:13:15 +01:00

89 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);
}
]);
}