Skip to content

Commit

Permalink
feat(home-manager): add support for firefox-based browsers
Browse files Browse the repository at this point in the history
  • Loading branch information
Anomalocaridid committed Jan 6, 2025
1 parent 8eada39 commit 48926e6
Show file tree
Hide file tree
Showing 5 changed files with 203 additions and 0 deletions.
1 change: 1 addition & 0 deletions modules/home-manager/all-modules.nix
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
./delta.nix
./dunst.nix
./fcitx5.nix
./firefox.nix
./fish.nix
./foot.nix
./freetube.nix
Expand Down
67 changes: 67 additions & 0 deletions modules/home-manager/firefox.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
{ catppuccinLib }:
{
config,
lib,
pkgs,
...
}:

let
inherit (config.catppuccin) sources;

mkFirefoxModule =
name:
let
cfg = config.catppuccin.${name};

# ID for the chosed theme's addon
addonId = sources.firefox.addonIds.${cfg.flavor}.${cfg.accent};
upperName = catppuccinLib.mkUpper name;
in
{
options.catppuccin.${name} =
catppuccinLib.mkCatppuccinOption {
inherit name;
accentSupport = true;
}
// {
finalPackage = lib.mkOption {
type = lib.types.package;
readOnly = true;
description = "Resulting ${upperName} package";
};
profiles = lib.mkOption {
type = with lib.types; listOf str;
description = "${upperName} profiles to install the Catppuccin theme addon on";
default = [ "default" ];
example = lib.literalExpression ''[ "default" "default-release" "work" ]'';
};
};
config = lib.mkIf cfg.enable {
catppuccin.${name}.finalPackage = pkgs.${name}.override (previous: {
extraPrefsFiles = (previous.extraPrefsFiles or [ ]) ++ [
(pkgs.writeTextFile {
name = "catppuccin.cfg";
text = ''
// Immutably set theme
lockPref("extensions.activeThemeID", "${addonId}");
// Immutably disable syncing the active theme to avoid issues just in case
lockPref("services.sync.prefs.sync.extensions.activeThemeID", false);
'';
})
];
});
programs.${name} = {
profiles.default.extensions = [
sources.firefox."${cfg.flavor}_${cfg.accent}"
];
package = cfg.finalPackage;
};
};
};
in
lib.foldl (acc: name: lib.recursiveUpdate acc (mkFirefoxModule name)) { } [
"firefox"
"floorp"
"librewolf"
]
3 changes: 3 additions & 0 deletions modules/tests/darwin.nix
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,13 @@
programs = {
cava.enable = lib.mkVMOverride false; # NOTE: this may actually work on darwin, but the package is currently not supported
chromium.enable = lib.mkVMOverride false;
firefox.enable = lib.mkVMOverride false; # NOTE: Not available on darwin
floorp.enable = lib.mkVMOverride false; # NOTE: same as firefox
foot.enable = lib.mkVMOverride false;
fuzzel.enable = lib.mkVMOverride false;
hyprlock.enable = lib.mkVMOverride false;
imv.enable = lib.mkVMOverride false;
librewolf.enable = lib.mkVMOverride false; # NOTE: same as firefox
mpv.enable = lib.mkVMOverride false; # NOTE: same as cava, but `mpv` fails to build currently
obs-studio.enable = lib.mkVMOverride false;
rio.enable = lib.mkVMOverride false; # marked as broken
Expand Down
3 changes: 3 additions & 0 deletions modules/tests/home.nix
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@
btop.enable = true;
cava.enable = true;
chromium.enable = true;
firefox.enable = true;
fish.enable = true;
floorp.enable = true;
foot.enable = true;
freetube.enable = true;
fuzzel.enable = true;
Expand All @@ -46,6 +48,7 @@
k9s.enable = true;
kitty.enable = true;
lazygit.enable = true;
librewolf.enable = true;
micro.enable = true;
mpv.enable = true;
neovim.enable = true;
Expand Down
129 changes: 129 additions & 0 deletions pkgs/firefox/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
{
buildCatppuccinPort,
fetchFromGitHub,
lib,
}:
buildCatppuccinPort (finalAttrs: rec {
pname = "firefox";

src = fetchFromGitHub {
owner = "catppuccin";
repo = "firefox";
rev = "refs/tags/old";
hash = "sha256-ZIK0LX8OJOBr20diRDQRrNc1X+q3DtHNcc/dRZU2QfM=";
};

# installTargets = [ "releases/old" ];

# Split package into outputs of each flavor/accent combination
# in order to avoid polluting the user's extensions and flooding them with extension installed notifications
# "out" is just there to avoid a build error
outputs =
[
"out"
]
++ (lib.flatten (
lib.mapAttrsToList (
flavor: accents: (lib.mapAttrsToList (accent: _: "${flavor}_${accent}") accents)
) passthru.addonIds
));

# There is a build script in $src that we do not want to run
dontBuild = true;
dontCatppuccinInstall = true;

installPhase = ''
runHook preInstallHook
# Create $out just to avoid a build error
mkdir $out
${lib.concatStrings (
lib.flatten (
lib.mapAttrsToList (
flavor: accents:
(lib.mapAttrsToList (
accent: id:
# Code adapted from `buildFirefoxXpiAddon` from
# https://github.com/nix-community/nur-combined/blob/master/repos/rycee/pkgs/firefox-addons/default.nix
''
dst="''$${flavor}_${accent}/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
mkdir -p "$dst"
install -v -m644 "$src/releases/old/catppuccin_${flavor}_${accent}.xpi" "$dst/${id}.xpi"
'') accents)
) finalAttrs.finalPackage.addonIds
)
)}
runHook postInstallHook
'';

# Each Firefox addon has an ID used to refer to it in the config
# Unfortunately, the Catppuccin addons just use randomly generated ones
passthru.addonIds = {
latte = {
rosewater = "{42698af3-f4a0-4864-8a72-236e99d30345}";
flamingo = "{80a64fa5-f058-482c-a2fc-ec0c329a5910}";
pink = "{7f327fa3-57ad-4f5a-a638-0c8620df3cad}";
mauve = "{c827c446-3d00-4160-a992-3ebcbe6d81a6}";
red = "{7d4f99bc-5b1c-4e97-b1c1-cae24282eb71}";
maroon = "{1f6e25ab-cdbe-4a7a-90fb-911ced38df69}";
peach = "{6ea607a1-ee07-4f56-8349-5a257725b6c9}";
yellow = "{fbf67366-a9d5-40fb-aa10-5e2eb7d74d08}";
green = "{98439b1c-46b2-4e72-8b58-7b996112f199}";
teal = "{556ffa71-63b9-4ab8-822d-feb18097f961}";
sky = "{0711a452-8a57-4697-9ee2-5161fc77fe89}";
sapphire = "{fe7fd83c-01c2-4de1-b055-fdcc122e94fb}";
blue = "{68f3538d-3881-45f4-aa73-288b010b39a1}";
lavender = "{bc6fdbef-4c18-4967-9899-7803fdcaf3b4}";
};
frappe = {
rosewater = "{d39d5a2f-2f99-4744-b904-793881cbc306}";
flamingo = "{cb69ead4-b74b-4efa-a49b-8d921eca8947}";
pink = "{b6129aa9-e45d-4280-aac8-3654e9d89d21}";
mauve = "{5630de1f-49cb-41ef-934d-2343026b25a5}";
red = "{32577cb5-8803-4b2b-8d9c-f962ef0ce277}";
maroon = "{d2b153b6-07ae-46ea-8f79-cae317fd8be0}";
peach = "{89d0f64f-9088-4b50-861e-35c50c0ef909}";
yellow = "{0146c14f-d2b3-4b1e-8e93-7cb301c231fc}";
green = "{106ca6d4-1fbf-4665-b968-88a3ff31de3a}";
teal = "{615b2812-7ab8-4ea5-bb8a-c62bf4b1a4b1}";
sky = "{c7cf6786-24b7-4bd2-ae71-b985fcc98f20}";
sapphire = "{c52d6318-7734-4ac5-a909-2f12b0f0f3b1}";
blue = "{0f28d17a-46f0-4fe1-8696-1676de0a87f2}";
lavender = "{5ee380f7-abda-467c-ae9a-d30bf8f0d1d6}";
};
macchiato = {
rosewater = "{a5726845-3a00-4076-8601-b9b943dfcddc}";
flamingo = "{03f8dbf5-5054-44b3-9443-4bb24d981e90}";
pink = "{e554e180-24a4-40a2-911d-bf48d5b1629c}";
mauve = "{998d0435-a079-4dcc-ad24-7333b3463bca}";
red = "{a5c9c2ff-855c-4c6e-a0f0-52e7c1b48a01}";
maroon = "{4c302124-e622-4a6a-9a9e-55ffde4e80a9}";
peach = "{4dfd877b-8072-4d5b-b271-768bbdc78e53}";
yellow = "{b7582732-61a1-4708-b726-73691837fedd}";
green = "{5dff4698-8117-41cd-8377-de57f671d736}";
teal = "{658bd4ed-c245-454a-8fd6-fd9de5e1b046}";
sky = "{5d96985c-7004-413b-bd17-3a0e334d898b}";
sapphire = "{32ff0ff3-110d-4c2e-9134-005bba3f1b64}";
blue = "{d49033ac-8969-488c-afb0-5cdb73957f41}";
lavender = "{15cb5e64-94bd-41aa-91cf-751bb1a84972}";
};
mocha = {
rosewater = "{5b78178f-135d-4df2-821f-1f289be7f348}";
flamingo = "{49783482-0579-4c89-9b46-674b2c8d3c53}";
pink = "{0a2d1098-69a9-4e98-a62c-a861766ac24d}";
mauve = "{76aabc99-c1a8-4c1e-832b-d4f2941d5a7a}";
red = "{6f70b243-f2a4-4e65-ab41-4e75a6efb65a}";
maroon = "{48a265ac-f603-4262-b0e7-2a55c159aaef}";
peach = "{3a271e29-2654-4dcc-9186-745deca0b17f}";
yellow = "{b99d94a7-f494-49b1-8dc1-face82d0a941}";
green = "{f4363cd3-9ba9-453d-b2b2-66e6e1bafe73}";
teal = "{409be3b6-54bf-47c8-83d2-9bd43e0730e3}";
sky = "{1ac25999-353e-49bf-a064-1d0690bb3ec9}";
sapphire = "{b2e54022-c8a0-444f-8d7c-bc7282cadbd2}";
blue = "{2adf0361-e6d8-4b74-b3bc-3f450e8ebb69}";
lavender = "{8446b178-c865-4f5c-8ccc-1d7887811ae3}";
};
};
})

0 comments on commit 48926e6

Please sign in to comment.