1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-03-06 08:46:54 +00:00

accounts/email: provide realName option for alias (#6106)

This commit is contained in:
eum3l 2025-02-22 07:03:07 +00:00 committed by GitHub
parent f0f0d1ade2
commit c31b4e330e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 39 additions and 14 deletions

View file

@ -268,10 +268,26 @@ let
};
aliases = mkOption {
type = types.listOf (types.strMatching ".*@.*");
description = "Alternative identities of this account.";
default = [ ];
example = [ "webmaster@example.org" "admin@example.org" ];
description = "Alternative email addresses of this account.";
type = types.listOf (types.oneOf [
(types.strMatching ".*@.*")
(types.submodule {
options = {
realName = mkOption {
type = types.str;
example = "Jane Doe";
description = "Name displayed when sending mails.";
};
address = mkOption {
type = types.strMatching ".*@.*";
example = "jane.doe@example.org";
description = "The email address of this identity.";
};
};
})
]);
};
realName = mkOption {

View file

@ -16,7 +16,8 @@ let
filter (a: a.mu.enable) (attrValues config.accounts.email.accounts);
addrs = map (a: a.address) muAccounts;
# Construct list of lists containing email aliases, and flatten
aliases = flatten (map (a: a.aliases) muAccounts);
aliases = map (alias: alias.address or alias)
(flatten (map (a: a.aliases) muAccounts));
# Sort the list
in sort lessThan (addrs ++ aliases);

View file

@ -37,8 +37,9 @@ let
in {
name = catAttrs "realName" primary;
primary_email = catAttrs "address" primary;
other_email = catAttrs "aliases" primary ++ catAttrs "address" secondaries
++ catAttrs "aliases" secondaries;
other_email = map (email: email.address or email) (flatten
(catAttrs "aliases" primary ++ catAttrs "address" secondaries
++ catAttrs "aliases" secondaries));
};
search = { exclude_tags = cfg.search.excludeTags; };

View file

@ -49,16 +49,25 @@ let
};
}));
getId = account: address:
if address == account.address then
account.id
else
(builtins.hashString "sha256" (if (builtins.isString address) then
address
else
(address.address + address.realName)));
toThunderbirdIdentity = account: address:
# For backwards compatibility, the primary address reuses the account ID.
let
id = if address == account.address then
account.id
else
builtins.hashString "sha256" address;
id = getId account address;
addressIsString = builtins.isString address;
in {
"mail.identity.id_${id}.fullName" = account.realName;
"mail.identity.id_${id}.useremail" = address;
"mail.identity.id_${id}.fullName" =
if addressIsString then account.realName else address.realName;
"mail.identity.id_${id}.useremail" =
if addressIsString then address else address.address;
"mail.identity.id_${id}.valid" = true;
"mail.identity.id_${id}.htmlSigText" =
if account.signature.showSignature == "none" then
@ -87,9 +96,7 @@ let
addresses = [ account.address ] ++ account.aliases;
in {
"mail.account.account_${id}.identities" = concatStringsSep ","
([ "id_${id}" ]
++ map (address: "id_${builtins.hashString "sha256" address}")
account.aliases);
(map (address: "id_${getId account address}") addresses);
"mail.account.account_${id}.server" = "server_${id}";
} // optionalAttrs account.primary {
"mail.accountmanager.defaultaccount" = "account_${id}";