forked from mirrors/nixpkgs
nixos/qt5: extend qt5 theming support
This commit is contained in:
parent
23107a32c4
commit
379c3f685c
|
@ -6,6 +6,43 @@ let
|
|||
|
||||
cfg = config.qt5;
|
||||
|
||||
toQtIni = generators.toINI {
|
||||
mkKeyValue = key: value:
|
||||
let
|
||||
value' =
|
||||
if isBool value then (if value then "true" else "false")
|
||||
else toString value;
|
||||
in
|
||||
"${key}=${value'}";
|
||||
};
|
||||
|
||||
general =
|
||||
optionalAttrs (cfg.font != null)
|
||||
{
|
||||
font = cfg.font.name;
|
||||
menuFont = cfg.font.name;
|
||||
toolBarFont = cfg.font.name;
|
||||
}
|
||||
//
|
||||
optionalAttrs (cfg.style != null)
|
||||
{ widgetStyle = cfg.style.name; };
|
||||
icons =
|
||||
optionalAttrs (cfg.iconTheme != null)
|
||||
{ Theme = cfg.iconTheme.name; };
|
||||
|
||||
fontType = types.submodule {
|
||||
options = {
|
||||
package = mkOption {
|
||||
internal = true;
|
||||
type = types.nullOr types.package;
|
||||
default = null;
|
||||
};
|
||||
name = mkOption {
|
||||
internal = true;
|
||||
type = types.str;
|
||||
};
|
||||
};
|
||||
};
|
||||
themeType = types.submodule {
|
||||
options = {
|
||||
package = mkOption {
|
||||
|
@ -40,6 +77,10 @@ let
|
|||
assertion = cfg.style != null && any (name: name == cfg.style.name) styles;
|
||||
message = "`qt5.style.name` is not one of [ ${toString styles} ].";
|
||||
}
|
||||
{
|
||||
assertion = cfg.font == null && cfg.iconTheme == null;
|
||||
message = "`qt5.font` and `qt5.iconTheme` are only supported by kde platform.";
|
||||
}
|
||||
];
|
||||
environment.variables.QT_QPA_PLATFORMTHEME = "gtk2";
|
||||
environment.variables.QT_STYLE_OVERRIDE = cfg.style.name;
|
||||
|
@ -55,6 +96,12 @@ let
|
|||
</varlistentry>
|
||||
'';
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = cfg.font == null && cfg.iconTheme == null;
|
||||
message = "`qt5.font` and `qt5.iconTheme` are only supported by kde platform.";
|
||||
}
|
||||
];
|
||||
environment.variables.QT_QPA_PLATFORMTHEME = "qgnomeplatform";
|
||||
# TODO: make this optional once https://github.com/NixOS/nixpkgs/issues/54150 is fixed
|
||||
# qgnomeplatform reads theme and other settings from dconf db
|
||||
|
@ -62,6 +109,47 @@ let
|
|||
environment.variables.XDG_DATA_DIRS = [ "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}" ];
|
||||
environment.systemPackages = [ pkgs.qgnomeplatform ];
|
||||
};
|
||||
gtk3 = {
|
||||
description = ''
|
||||
<varlistentry>
|
||||
<term><literal>gtk3</literal></term>
|
||||
<listitem><para>Use GNOME theme with
|
||||
<link xlink:href="https://code.qt.io/cgit/qt/qtbase.git/tree/src/plugins/platformthemes/gtk3">gtk3</link>
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
'';
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = cfg.style != null;
|
||||
message = "`qt5.platformTheme` gtk3 requires `qt5.style` to be set.";
|
||||
}
|
||||
{
|
||||
assertion = cfg.font == null && cfg.iconTheme == null;
|
||||
message = "`qt5.font` and `qt5.iconTheme` are only supported by kde platform.";
|
||||
}
|
||||
];
|
||||
environment.variables.QT_QPA_PLATFORMTHEME = "gtk3";
|
||||
environment.variables.QT_STYLE_OVERRIDE = cfg.style.name;
|
||||
};
|
||||
kde = {
|
||||
description = ''
|
||||
<varlistentry>
|
||||
<term><literal>kde</literal></term>
|
||||
<listitem><para>Use Qt theme with
|
||||
<link xlink:href="https://code.qt.io/cgit/qt/qtbase.git/tree/src/platformsupport/themes/genericunix">qkdetheme</link>
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
'';
|
||||
|
||||
environment.variables.XDG_CURRENT_DESKTOP = mkForce "KDE";
|
||||
environment.variables.KDE_SESSION_VERSION = "5";
|
||||
environment.etc."xdg/kdeglobals".text =
|
||||
toQtIni {
|
||||
General = general;
|
||||
Icons = icons;
|
||||
};
|
||||
};
|
||||
};
|
||||
in
|
||||
|
||||
|
@ -84,6 +172,32 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
font = mkOption {
|
||||
type = types.nullOr fontType;
|
||||
default = null;
|
||||
example = literalExample ''
|
||||
{
|
||||
name = "Noto Sans,10,-1,5,50,0,0,0,0,0,Regular";
|
||||
package = pkgs.noto-fonts;
|
||||
}
|
||||
'';
|
||||
description = ''
|
||||
The font to use in Qt applications.
|
||||
'';
|
||||
};
|
||||
|
||||
iconTheme = mkOption {
|
||||
type = types.nullOr themeType;
|
||||
default = null;
|
||||
example = literalExample ''
|
||||
{
|
||||
name = "breeze";
|
||||
package = pkgs.breeze-icons;
|
||||
}
|
||||
'';
|
||||
description = "The icon theme to use.";
|
||||
};
|
||||
|
||||
style = mkOption {
|
||||
type = types.nullOr themeType;
|
||||
default = null;
|
||||
|
@ -105,8 +219,12 @@ in
|
|||
|
||||
environment.variables = attrByPath [ cfg.platformTheme "environment" "variables" ] {} platforms;
|
||||
|
||||
environment.etc = attrByPath [ cfg.platformTheme "environment" "etc" ] {} platforms;
|
||||
|
||||
environment.systemPackages = attrByPath [ cfg.platformTheme "environment" "systemPackages" ] [] platforms
|
||||
++ optionalPackage cfg.style;
|
||||
++ optionalPackage cfg.font
|
||||
++ optionalPackage cfg.style
|
||||
++ optionalPackage cfg.iconTheme;
|
||||
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue