1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-11-08 11:36:05 +01:00
home-manager/modules/programs/mu.nix
Adam Dinwoodie dbfcd3292d accounts.email: add option to disable an account
Allow a user to disable an email account by setting
`accounts.email.accounts.<name>.enable = false`.  This is useful if
someone wants to configure email accounts globally but only use them in
certain circumstances.

Everywhere email account configuration is used, check if the account is
enabled before checking any attributes of the account.
2025-08-07 14:08:46 -05:00

92 lines
3 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
cfg = config.programs.mu;
# Used to generate command line arguments that mu can operate with.
genCmdMaildir = path: "--maildir=" + path;
# Sorted list of personal email addresses to register
sortedAddresses =
let
# Set of email account sets where mu.enable = true.
muAccounts = lib.filter (a: a.enable && a.mu.enable) (
lib.attrValues config.accounts.email.accounts
);
addrs = map (a: a.address) muAccounts;
# Construct list of lists containing email aliases, and flatten
aliases = map (alias: alias.address or alias) (lib.flatten (map (a: a.aliases) muAccounts));
# Sort the list
in
lib.sort lib.lessThan (addrs ++ aliases);
# Takes the list of accounts with mu.enable = true, and generates a
# command-line flag for initializing the mu database.
myAddresses =
let
# Prefix --my-address= to each account's address and all defined aliases
addMyAddress = map (addr: "--my-address=" + addr) sortedAddresses;
in
lib.concatStringsSep " " addMyAddress;
in
{
meta.maintainers = [ lib.maintainers.KarlJoad ];
options = {
programs.mu = {
enable = lib.mkEnableOption "mu, a maildir indexer and searcher";
package = lib.mkPackageOption pkgs "mu" { };
home = lib.mkOption {
type = lib.types.path;
default = config.xdg.cacheHome + "/mu";
defaultText = lib.literalExpression ''config.xdg.cacheHome + "/mu"'';
example = "\${config.home.homeDirectory}/Maildir/.mu";
description = ''
Directory to store Mu's database.
'';
};
# No options/config file present for mu, and program author will not be
# adding one soon. See https://github.com/djcb/mu/issues/882 for more
# information about this.
};
accounts.email.accounts = lib.mkOption {
type = lib.types.attrsOf (
lib.types.submodule {
options.mu.enable = lib.mkEnableOption "mu indexing";
}
);
};
};
config = lib.mkIf cfg.enable {
home.packages = [ cfg.package ];
home.sessionVariables.MUHOME = cfg.home;
home.activation.runMuInit =
let
maildirOption = genCmdMaildir config.accounts.email.maildirBasePath;
muExe = lib.getExe cfg.package;
gawkExe = lib.getExe pkgs.gawk;
in
lib.hm.dag.entryAfter [ "writeBoundary" ] ''
# If the database directory exists and registered personal addresses remain the same,
# then `mu init` should NOT be run.
# In theory, mu is the only thing that creates that directory, and it is
# only created during the initial index.
MU_SORTED_ADDRS=$((${muExe} info store | ${gawkExe} '/personal-address/{print $4}' | LC_ALL=C sort | paste -sd ' ') || exit 0)
if [[ ! -d "${cfg.home}" || ! "$MU_SORTED_ADDRS" = "${lib.concatStringsSep " " sortedAddresses}" ]]; then
run ${muExe} init ${maildirOption} --muhome "${lib.escapeShellArg cfg.home}" ${myAddresses} $VERBOSE_ARG;
fi
'';
};
}