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

Reapply "thunderbird: add native host support (#6292)" (#6371)

This reverts commit 6fbbfb9240.

Signed-off-by: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
This commit is contained in:
Ihar Hrachyshka 2025-02-15 19:03:06 -05:00 committed by Austin Horstman
parent 3c82285348
commit fadb9cba44
2 changed files with 71 additions and 3 deletions

View file

@ -136,6 +136,24 @@ let
'') prefs)}
${extraPrefs}
'';
nativeMessagingHostsPath = if isDarwin then
"${cfg.vendorPath}/NativeMessagingHosts"
else
"${cfg.vendorPath}/native-messaging-hosts";
nativeMessagingHostsJoined = pkgs.symlinkJoin {
name = "th_native-messaging-hosts";
paths = [
# Link a .keep file to keep the directory around
(pkgs.writeTextDir "lib/mozilla/native-messaging-hosts/.keep" "")
# Link package configured native messaging hosts (entire mail app actually)
cfg.package
]
# Link user configured native messaging hosts
++ cfg.nativeMessagingHosts;
};
in {
meta.maintainers = with hm.maintainers; [ d-dervishi jkarlson ];
@ -158,6 +176,29 @@ in {
description = "profile version, set null for nix-darwin";
};
vendorPath = mkOption {
internal = true;
type = with types; nullOr str;
# Thunderbird doesn't look in `Application Support` on macOS for user
# config (in contrast to global settings that are the same for Firefox
# and Thunderbird):
# https://developer.thunderbird.net/add-ons/mailextensions/supported-webextension-api
default = if isDarwin then "Library/Mozilla" else ".mozilla";
example = ".mozilla";
description =
"Directory containing the native messaging hosts directory.";
};
nativeMessagingHosts = optionalAttrs (cfg.vendorPath != null) (mkOption {
visible = true;
type = types.listOf types.package;
default = [ ];
description = ''
Additional packages containing native messaging hosts that should be
made available to Thunderbird extensions.
'';
});
profiles = mkOption {
type = with types;
attrsOf (submodule ({ config, name, ... }: {
@ -403,7 +444,13 @@ in {
home.file = mkMerge ([{
"${thunderbirdConfigPath}/profiles.ini" =
mkIf (cfg.profiles != { }) { text = generators.toINI { } profilesIni; };
}] ++ flip mapAttrsToList cfg.profiles (name: profile: {
}] ++ optional (cfg.vendorPath != null) {
"${nativeMessagingHostsPath}" = {
source =
"${nativeMessagingHostsJoined}/lib/mozilla/native-messaging-hosts";
recursive = true;
};
} ++ flip mapAttrsToList cfg.profiles (name: profile: {
"${thunderbirdProfilesPath}/${name}/chrome/userChrome.css" =
mkIf (profile.userChrome != "") { text = profile.userChrome; };

View file

@ -1,6 +1,8 @@
{ pkgs, ... }: {
{ lib, realPkgs, ... }: {
imports = [ ../../accounts/email-test-accounts.nix ];
_module.args.pkgs = lib.mkForce realPkgs;
accounts.email.accounts = {
"hm@example.com" = {
thunderbird = {
@ -41,6 +43,9 @@
# Disable warning so that platforms' behavior is the same
darwinSetupWarning = false;
# Darwin doesn't support wrapped Thunderbird, using unwrapped instead
package = realPkgs.thunderbird-unwrapped;
profiles = {
first = {
isDefault = true;
@ -62,6 +67,16 @@
};
};
nativeMessagingHosts = with realPkgs;
[
# NOTE: this is not a real Thunderbird native host module but Firefox; no
# native hosts are currently packaged for nixpkgs or elsewhere, so we
# have to improvise. Packaging wise, Firefox and Thunderbird native hosts
# are identical though. The test doesn't care if the host was meant for
# either as long as the right paths are present in the package.
browserpass
];
settings = {
"general.useragent.override" = "";
"privacy.donottrackheader.enabled" = true;
@ -69,9 +84,13 @@
};
nmt.script = let
isDarwin = pkgs.stdenv.hostPlatform.isDarwin;
isDarwin = realPkgs.stdenv.hostPlatform.isDarwin;
configDir = if isDarwin then "Library/Thunderbird" else ".thunderbird";
profilesDir = if isDarwin then "${configDir}/Profiles" else "${configDir}";
nativeHostsDir = if isDarwin then
"Library/Mozilla/NativeMessagingHosts"
else
".mozilla/native-messaging-hosts";
platform = if isDarwin then "darwin" else "linux";
in ''
assertFileExists home-files/${configDir}/profiles.ini
@ -93,5 +112,7 @@
assertFileExists home-files/${profilesDir}/first/chrome/userContent.css
assertFileContent home-files/${profilesDir}/first/chrome/userContent.css \
<(echo "* { color: red !important; }")
assertFileExists home-files/${nativeHostsDir}/com.github.browserpass.native.json
'';
}