mirror of
https://github.com/nix-community/home-manager.git
synced 2025-11-08 19:46:05 +01:00
99 lines
3 KiB
Nix
99 lines
3 KiB
Nix
{ lib }:
|
|
|
|
let
|
|
inherit (lib)
|
|
literalExpression
|
|
mkOption
|
|
optionalAttrs
|
|
optionalString
|
|
types
|
|
;
|
|
in
|
|
|
|
{
|
|
# Generic theme type factory function
|
|
mkThemeType =
|
|
{
|
|
typeName,
|
|
hasSize ? false,
|
|
packageExample,
|
|
nameExample ? "Adwaita",
|
|
}:
|
|
types.submodule {
|
|
options = {
|
|
package = mkOption {
|
|
type = types.nullOr types.package;
|
|
default = null;
|
|
example = literalExpression packageExample;
|
|
description = ''
|
|
Package providing the ${typeName}. This package will be installed
|
|
to your profile. If `null` then the ${typeName}
|
|
is assumed to already be available in your profile.
|
|
''
|
|
+ optionalString (typeName == "theme") ''
|
|
|
|
For the theme to apply to GTK 4, this option is mandatory.
|
|
'';
|
|
};
|
|
|
|
name = mkOption {
|
|
type = types.str;
|
|
example = nameExample;
|
|
description = "The name of the ${typeName} within the package.";
|
|
};
|
|
}
|
|
// optionalAttrs hasSize {
|
|
size = mkOption {
|
|
type = types.nullOr types.int;
|
|
default = null;
|
|
example = 16;
|
|
description = "The size of the cursor.";
|
|
};
|
|
};
|
|
};
|
|
|
|
# Helper function to generate the settings attribute set for a given version
|
|
mkGtkSettings =
|
|
{
|
|
gtkVersion,
|
|
font,
|
|
theme,
|
|
iconTheme,
|
|
cursorTheme,
|
|
colorScheme,
|
|
}:
|
|
optionalAttrs (font != null) {
|
|
gtk-font-name =
|
|
let
|
|
fontSize = if font.size != null then font.size else 11;
|
|
in
|
|
"${font.name} ${toString fontSize}";
|
|
}
|
|
// optionalAttrs (theme != null) { "gtk-theme-name" = theme.name; }
|
|
// optionalAttrs (iconTheme != null) { "gtk-icon-theme-name" = iconTheme.name; }
|
|
// optionalAttrs (cursorTheme != null) { "gtk-cursor-theme-name" = cursorTheme.name; }
|
|
// optionalAttrs (cursorTheme != null && cursorTheme.size != null) {
|
|
"gtk-cursor-theme-size" = cursorTheme.size;
|
|
}
|
|
// optionalAttrs (colorScheme == "dark") { "gtk-application-prefer-dark-theme" = true; }
|
|
// optionalAttrs (gtkVersion == 4 && colorScheme == "dark") { "gtk-interface-color-scheme" = 2; }
|
|
// optionalAttrs (gtkVersion == 4 && colorScheme == "light") { "gtk-interface-color-scheme" = 3; };
|
|
|
|
# Package collection helper for all GTK versions
|
|
collectGtkPackages =
|
|
versionConfigs:
|
|
let
|
|
collectPackages =
|
|
cfgVersion:
|
|
lib.filter (pkg: pkg != null) (
|
|
lib.optionals cfgVersion.enable (
|
|
lib.optionals (cfgVersion.theme != null) [ cfgVersion.theme.package ]
|
|
++ lib.optionals (cfgVersion.iconTheme != null) [ cfgVersion.iconTheme.package ]
|
|
++ lib.optionals (cfgVersion.cursorTheme != null) [ cfgVersion.cursorTheme.package ]
|
|
++ lib.optionals (cfgVersion.font != null) [ cfgVersion.font.package ]
|
|
)
|
|
);
|
|
allPackages = lib.concatMap collectPackages versionConfigs;
|
|
in
|
|
lib.unique allPackages;
|
|
}
|