diff options
author | Katharina Fey <kookie@spacekookie.de> | 2019-10-05 12:06:29 +0000 |
---|---|---|
committer | Katharina Fey <kookie@spacekookie.de> | 2019-10-05 12:42:50 +0000 |
commit | 1148b1d122bc03e9a3665856c9b7bb96bd4e3994 (patch) | |
tree | 1a9586de593790e236349d5caa0abdff7f3f6856 /home-manager/modules/programs/astroid.nix | |
parent | 919d4e75699aa4ba456fd2d3d416a0522c9c7294 (diff) | |
parent | 8bddc1adab0f7a51476f819fa2197353e8e1d136 (diff) |
Add 'home-manager/' from commit '8bddc1adab0f7a51476f819fa2197353e8e1d136'
git-subtree-dir: home-manager
git-subtree-mainline: 919d4e75699aa4ba456fd2d3d416a0522c9c7294
git-subtree-split: 8bddc1adab0f7a51476f819fa2197353e8e1d136
Diffstat (limited to 'home-manager/modules/programs/astroid.nix')
-rw-r--r-- | home-manager/modules/programs/astroid.nix | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/home-manager/modules/programs/astroid.nix b/home-manager/modules/programs/astroid.nix new file mode 100644 index 00000000000..0463cd15528 --- /dev/null +++ b/home-manager/modules/programs/astroid.nix @@ -0,0 +1,139 @@ +{ config, lib, pkgs, ... }: + +with lib; +with builtins; + +let + + cfg = config.programs.astroid; + + astroidAccounts = + filterAttrs + (n: v: v.astroid.enable) + config.accounts.email.accounts; + + boolOpt = b: if b then "true" else "false"; + + accountAttr = account: with account; { + email = address; + name = realName; + sendmail = astroid.sendMailCommand; + additional_sent_tags = ""; + default = boolOpt primary; + save_drafts_to = folders.drafts; + save_sent = "true"; + save_sent_to = folders.sent; + select_query = ""; + } + // optionalAttrs (signature.showSignature != "none") { + signature_attach = boolOpt (signature.showSignature == "attach"); + signature_default_on = boolOpt (signature.showSignature != "none"); + signature_file = pkgs.writeText "signature.txt" signature.text; + signature_file_markdown = "false"; + signature_separate = "true"; # prepends '--\n' to the signature + } + // optionalAttrs (gpg != null) { + always_gpg_sign = boolOpt gpg.signByDefault; + gpgkey = gpg.key; + } + // astroid.extraConfig; + + # See https://github.com/astroidmail/astroid/wiki/Configuration-Reference + configFile = mailAccounts: + let + template = fromJSON (readFile ./astroid-config-template.json); + astroidConfig = foldl' recursiveUpdate template [ + { + astroid.notmuch_config = "${config.xdg.configHome}/notmuch/notmuchrc"; + accounts = mapAttrs (n: accountAttr) astroidAccounts; + crypto.gpg.path = "${pkgs.gnupg}/bin/gpg"; + } + cfg.extraConfig + cfg.externalEditor + ]; + in + builtins.toJSON astroidConfig; + +in + +{ + options = { + programs.astroid = { + enable = mkEnableOption "Astroid"; + + pollScript = mkOption { + type = types.str; + default = ""; + example = "mbsync gmail"; + description = '' + Script to run to fetch/update mails. + ''; + }; + + externalEditor = mkOption { + type = types.nullOr types.str; + default = null; + # Converts it into JSON that can be merged into the configuration. + apply = cmd: + optionalAttrs (cmd != null) { + editor = { + "external_editor" = "true"; + "cmd" = cmd; + }; + }; + example = "nvim-qt -- -c 'set ft=mail' '+set fileencoding=utf-8' '+set ff=unix' '+set enc=utf-8' '+set fo+=w' %1"; + description = '' + You can use <code>%1</code>, <code>%2</code>, and + <code>%3</code> to refer respectively to: + <orderedlist numeration="arabic"> + <listitem><para>file name</para></listitem> + <listitem><para>server name</para></listitem> + <listitem><para>socket ID</para></listitem> + </orderedlist> + See <link xlink:href='https://github.com/astroidmail/astroid/wiki/Customizing-editor' />. + ''; + }; + + extraConfig = mkOption { + type = types.attrs; + default = {}; + example = { poll.interval = 0; }; + description = '' + JSON config that will override the default Astroid configuration. + ''; + }; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + { + assertion = config.programs.notmuch.maildir.synchronizeFlags; + message = "The astroid module requires" + + " 'programs.notmuch.maildir.synchronizeFlags = true'."; + } + ]; + + home.packages = [ pkgs.astroid ]; + + xdg.configFile."astroid/config".source = + pkgs.runCommand "out.json" + { + json = configFile astroidAccounts; + preferLocalBuild = true; + allowSubstitutes = false; + } + '' + echo -n "$json" | ${pkgs.jq}/bin/jq . > $out + ''; + + xdg.configFile."astroid/poll.sh" = { + executable = true; + text = '' + # Generated by Home Manager + + ${cfg.pollScript} + ''; + }; + }; +} |