11.stylix/modules/firefox/each-config.nix

162 lines
5.4 KiB
Nix

# manually applied args
{
mkTarget,
name,
humanName,
}:
# module args
{
lib,
pkgs,
config,
...
}:
mkTarget {
inherit name humanName;
extraOptions = {
profileNames = lib.mkOption {
description = "The ${humanName} profile names to apply styling on.";
type = lib.types.listOf lib.types.str;
default = [ ];
};
colorTheme.enable = lib.mkEnableOption "[Firefox Color](https://color.firefox.com) on ${humanName}";
firefoxGnomeTheme.enable = lib.mkEnableOption "[Firefox GNOME theme](https://github.com/rafaelmardojai/firefox-gnome-theme) on ${humanName}";
};
configElements = [
(
{ cfg }:
{
warnings =
lib.optional (config.programs.${name}.enable && cfg.profileNames == [ ])
''stylix: ${name}: `config.stylix.targets.${name}.profileNames` is not set. Declare profile names with 'config.stylix.targets.${name}.profileNames = [ "<PROFILE_NAME>" ];'.'';
}
)
(
{ cfg, fonts }:
{
programs.${name}.profiles = lib.genAttrs cfg.profileNames (_: {
settings = {
"font.name.monospace.x-western" = fonts.monospace.name;
"font.name.sans-serif.x-western" = fonts.sansSerif.name;
"font.name.serif.x-western" = fonts.serif.name;
# 4/3 factor used for pt to px;
# adding 0.5 before flooring for rounding as Firefox requires an int
"font.size.monospace.x-western" = builtins.floor (
(fonts.sizes.terminal * 4.0 / 3.0) + 0.5
);
"font.size.variable.x-western" = builtins.floor (
(fonts.sizes.applications * 4.0 / 3.0) + 0.5
);
};
});
}
)
(
{
cfg,
colors,
inputs,
}:
{
programs.${name}.profiles = lib.mkIf cfg.firefoxGnomeTheme.enable (
lib.genAttrs cfg.profileNames (_: {
settings = {
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"svg.context-properties.content.enabled" = true;
};
userChrome =
let
template = colors {
template = ./userChrome.css.mustache;
extension = ".css";
};
in
''
@import "${inputs.firefox-gnome-theme}/userChrome.css";
@import "${template}";
'';
userContent = ''
@import "${inputs.firefox-gnome-theme}/userContent.css";
'';
})
);
}
)
(
{
cfg,
colors,
inputs,
}:
let
mkColor = color: {
r = colors."${color}-rgb-r";
g = colors."${color}-rgb-g";
b = colors."${color}-rgb-b";
};
inherit (pkgs.stdenv.hostPlatform) system;
inherit (inputs.nur.legacyPackages.${system}.repos.rycee) firefox-addons;
in
{
programs.${name}.profiles = lib.mkIf cfg.colorTheme.enable (
lib.genAttrs cfg.profileNames (_: {
extensions = {
packages = [ firefox-addons.firefox-color ];
settings."FirefoxColor@mozilla.com".settings = {
firstRunDone = true;
theme = {
title = "Stylix ${colors.description}";
images.additional_backgrounds = [ "./bg-000.svg" ];
colors = {
toolbar = mkColor "base00";
toolbar_text = mkColor "base05";
frame = mkColor "base01";
tab_background_text = mkColor "base05";
toolbar_field = mkColor "base02";
toolbar_field_text = mkColor "base05";
tab_line = mkColor "base0D";
popup = mkColor "base00";
popup_text = mkColor "base05";
button_background_active = mkColor "base04";
frame_inactive = mkColor "base00";
icons_attention = mkColor "base0D";
icons = mkColor "base05";
ntp_background = mkColor "base00";
ntp_text = mkColor "base05";
popup_border = mkColor "base0D";
popup_highlight_text = mkColor "base05";
popup_highlight = mkColor "base04";
sidebar_border = mkColor "base0D";
sidebar_highlight_text = mkColor "base05";
sidebar_highlight = mkColor "base0D";
sidebar_text = mkColor "base05";
sidebar = mkColor "base00";
tab_background_separator = mkColor "base0D";
tab_loading = mkColor "base05";
tab_selected = mkColor "base00";
tab_text = mkColor "base05";
toolbar_bottom_separator = mkColor "base00";
toolbar_field_border_focus = mkColor "base0D";
toolbar_field_border = mkColor "base00";
toolbar_field_focus = mkColor "base00";
toolbar_field_highlight_text = mkColor "base00";
toolbar_field_highlight = mkColor "base0D";
toolbar_field_separator = mkColor "base0D";
toolbar_vertical_separator = mkColor "base0D";
};
};
};
};
})
);
}
)
];
}