mirror of
https://github.com/nix-community/home-manager.git
synced 2024-12-15 17:50:53 +00:00
thunderbird: allow managing feed accounts
When Home Manager manages email accounts for Thunderbird, it is no longer possible to create additional accounts through settings, as those will be overwritten later by HM. This presents a problem for users who want to use Thunderbird to read RSS feeds. It may also be desirable to manage feeds declaratively as well. However, Thunderbird seems to store feed configuration and state (e.g. last updated time) in the same file. Because of this, declarative feed management for Thunderbird seems infeasible at least.
This commit is contained in:
parent
10486e6b31
commit
d0341a22ef
3 changed files with 50 additions and 4 deletions
|
@ -116,6 +116,18 @@ let
|
||||||
(builtins.map (address: toThunderbirdIdentity account address) addresses)
|
(builtins.map (address: toThunderbirdIdentity account address) addresses)
|
||||||
// account.thunderbird.settings id;
|
// account.thunderbird.settings id;
|
||||||
|
|
||||||
|
toThunderbirdFeed = feed: profile:
|
||||||
|
let id = feed.id;
|
||||||
|
in {
|
||||||
|
"mail.account.account_${id}.server" = "server_${id}";
|
||||||
|
"mail.server.server_${id}.name" = feed.name;
|
||||||
|
"mail.server.server_${id}.type" = "rss";
|
||||||
|
"mail.server.server_${id}.directory" =
|
||||||
|
"${thunderbirdProfilesPath}/${profile.name}/Mail/Feeds-${id}";
|
||||||
|
"mail.server.server_${id}.directory-rel" = "[ProfD]Mail/Feeds-${id}";
|
||||||
|
"mail.server.server_${id}.hostname" = "Feeds-${id}";
|
||||||
|
};
|
||||||
|
|
||||||
mkUserJs = prefs: extraPrefs: ''
|
mkUserJs = prefs: extraPrefs: ''
|
||||||
// Generated by Home Manager.
|
// Generated by Home Manager.
|
||||||
|
|
||||||
|
@ -160,6 +172,25 @@ in {
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
feedAccounts = mkOption {
|
||||||
|
type = types.attrsOf (submodule ({ config, name, ... }: {
|
||||||
|
options = {
|
||||||
|
name = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = name;
|
||||||
|
readOnly = true;
|
||||||
|
description = "This feed account's name.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
default = { };
|
||||||
|
description = ''
|
||||||
|
Attribute set of feed accounts. Feeds themselves have to be
|
||||||
|
managed through Thunderbird's settings. This option allows
|
||||||
|
feeds to coexist with declaratively managed email accounts.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
settings = mkOption {
|
settings = mkOption {
|
||||||
type = with types; attrsOf (oneOf [ bool int str ]);
|
type = with types; attrsOf (oneOf [ bool int str ]);
|
||||||
default = { };
|
default = { };
|
||||||
|
@ -353,11 +384,17 @@ in {
|
||||||
mkIf (profile.userContent != "") { text = profile.userContent; };
|
mkIf (profile.userContent != "") { text = profile.userContent; };
|
||||||
|
|
||||||
"${thunderbirdProfilesPath}/${name}/user.js" = let
|
"${thunderbirdProfilesPath}/${name}/user.js" = let
|
||||||
accounts = filter (a:
|
emailAccounts = filter (a:
|
||||||
a.thunderbird.profiles == [ ]
|
a.thunderbird.profiles == [ ]
|
||||||
|| any (p: p == name) a.thunderbird.profiles) enabledAccountsWithId;
|
|| any (p: p == name) a.thunderbird.profiles) enabledAccountsWithId;
|
||||||
|
|
||||||
smtp = filter (a: a.smtp != null) accounts;
|
smtp = filter (a: a.smtp != null) emailAccounts;
|
||||||
|
|
||||||
|
feedAccounts =
|
||||||
|
map (f: f // { id = builtins.hashString "sha256" f.name; })
|
||||||
|
(attrValues profile.feedAccounts);
|
||||||
|
|
||||||
|
accounts = emailAccounts ++ feedAccounts;
|
||||||
in {
|
in {
|
||||||
text = mkUserJs (builtins.foldl' (a: b: a // b) { } ([
|
text = mkUserJs (builtins.foldl' (a: b: a // b) { } ([
|
||||||
cfg.settings
|
cfg.settings
|
||||||
|
@ -375,7 +412,8 @@ in {
|
||||||
{ "mail.openpgp.allow_external_gnupg" = profile.withExternalGnupg; }
|
{ "mail.openpgp.allow_external_gnupg" = profile.withExternalGnupg; }
|
||||||
|
|
||||||
profile.settings
|
profile.settings
|
||||||
] ++ (map (a: toThunderbirdAccount a profile) accounts)))
|
] ++ (map (a: toThunderbirdAccount a profile) emailAccounts)
|
||||||
|
++ (map (f: toThunderbirdFeed f profile) feedAccounts)))
|
||||||
profile.extraConfig;
|
profile.extraConfig;
|
||||||
};
|
};
|
||||||
}));
|
}));
|
||||||
|
|
|
@ -3,9 +3,10 @@
|
||||||
user_pref("general.useragent.override", "");
|
user_pref("general.useragent.override", "");
|
||||||
user_pref("mail.account.account_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc.identities", "id_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc");
|
user_pref("mail.account.account_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc.identities", "id_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc");
|
||||||
user_pref("mail.account.account_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc.server", "server_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc");
|
user_pref("mail.account.account_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc.server", "server_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc");
|
||||||
|
user_pref("mail.account.account_c6cc42837ed0a8041f93ff12c579a4af0dbe702461c97eef069f9f5f8dc4bfab.server", "server_c6cc42837ed0a8041f93ff12c579a4af0dbe702461c97eef069f9f5f8dc4bfab");
|
||||||
user_pref("mail.account.account_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.identities", "id_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f,id_8bbcff78f53202c0bfaa490a2068e3e5d6e36872144c659952ecc0ada47d7562");
|
user_pref("mail.account.account_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.identities", "id_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f,id_8bbcff78f53202c0bfaa490a2068e3e5d6e36872144c659952ecc0ada47d7562");
|
||||||
user_pref("mail.account.account_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.server", "server_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f");
|
user_pref("mail.account.account_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.server", "server_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f");
|
||||||
user_pref("mail.accountmanager.accounts", "account_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc,account_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f");
|
user_pref("mail.accountmanager.accounts", "account_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc,account_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f,account_c6cc42837ed0a8041f93ff12c579a4af0dbe702461c97eef069f9f5f8dc4bfab");
|
||||||
user_pref("mail.accountmanager.defaultaccount", "account_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f");
|
user_pref("mail.accountmanager.defaultaccount", "account_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f");
|
||||||
user_pref("mail.identity.id_8bbcff78f53202c0bfaa490a2068e3e5d6e36872144c659952ecc0ada47d7562.attachPgpKey", false);
|
user_pref("mail.identity.id_8bbcff78f53202c0bfaa490a2068e3e5d6e36872144c659952ecc0ada47d7562.attachPgpKey", false);
|
||||||
user_pref("mail.identity.id_8bbcff78f53202c0bfaa490a2068e3e5d6e36872144c659952ecc0ada47d7562.autoEncryptDrafts", true);
|
user_pref("mail.identity.id_8bbcff78f53202c0bfaa490a2068e3e5d6e36872144c659952ecc0ada47d7562.autoEncryptDrafts", true);
|
||||||
|
@ -51,6 +52,11 @@ user_pref("mail.server.server_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da50
|
||||||
user_pref("mail.server.server_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc.socketType", 3);
|
user_pref("mail.server.server_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc.socketType", 3);
|
||||||
user_pref("mail.server.server_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc.type", "imap");
|
user_pref("mail.server.server_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc.type", "imap");
|
||||||
user_pref("mail.server.server_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc.userName", "home.manager.jr");
|
user_pref("mail.server.server_bcd3ace52bed41febb6cdc2fb1303aebaa573e0d993872da503950901bb6c6fc.userName", "home.manager.jr");
|
||||||
|
user_pref("mail.server.server_c6cc42837ed0a8041f93ff12c579a4af0dbe702461c97eef069f9f5f8dc4bfab.directory", ".thunderbird/first/Mail/Feeds-c6cc42837ed0a8041f93ff12c579a4af0dbe702461c97eef069f9f5f8dc4bfab");
|
||||||
|
user_pref("mail.server.server_c6cc42837ed0a8041f93ff12c579a4af0dbe702461c97eef069f9f5f8dc4bfab.directory-rel", "[ProfD]Mail/Feeds-c6cc42837ed0a8041f93ff12c579a4af0dbe702461c97eef069f9f5f8dc4bfab");
|
||||||
|
user_pref("mail.server.server_c6cc42837ed0a8041f93ff12c579a4af0dbe702461c97eef069f9f5f8dc4bfab.hostname", "Feeds-c6cc42837ed0a8041f93ff12c579a4af0dbe702461c97eef069f9f5f8dc4bfab");
|
||||||
|
user_pref("mail.server.server_c6cc42837ed0a8041f93ff12c579a4af0dbe702461c97eef069f9f5f8dc4bfab.name", "rss");
|
||||||
|
user_pref("mail.server.server_c6cc42837ed0a8041f93ff12c579a4af0dbe702461c97eef069f9f5f8dc4bfab.type", "rss");
|
||||||
user_pref("mail.server.server_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.directory", ".thunderbird/first/ImapMail/cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f");
|
user_pref("mail.server.server_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.directory", ".thunderbird/first/ImapMail/cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f");
|
||||||
user_pref("mail.server.server_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.directory-rel", "[ProfD]ImapMail/cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f");
|
user_pref("mail.server.server_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.directory-rel", "[ProfD]ImapMail/cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f");
|
||||||
user_pref("mail.server.server_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.hostname", "imap.example.com");
|
user_pref("mail.server.server_cda3f13b64c1db7d4b58ce07a31304a362d7dcaf14476bfabcca913ae41ada9f.hostname", "imap.example.com");
|
||||||
|
|
|
@ -51,6 +51,8 @@
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
user_pref("mail.html_compose", false);
|
user_pref("mail.html_compose", false);
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
feedAccounts.rss = { };
|
||||||
};
|
};
|
||||||
|
|
||||||
second.settings = { "second.setting" = "some-test-setting"; };
|
second.settings = { "second.setting" = "some-test-setting"; };
|
||||||
|
|
Loading…
Reference in a new issue