mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-10-31 22:51:22 +00:00
Merge pull request #262051 from thiagokokada/qt-module-fixes
nixos/qt: multiple fixes
This commit is contained in:
commit
bcdd2da2dc
@ -1,121 +1,154 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.qt;
|
||||
|
||||
isQGnome = cfg.platformTheme == "gnome" && builtins.elem cfg.style ["adwaita" "adwaita-dark"];
|
||||
isQtStyle = cfg.platformTheme == "gtk2" && !(builtins.elem cfg.style ["adwaita" "adwaita-dark"]);
|
||||
isQt5ct = cfg.platformTheme == "qt5ct";
|
||||
isLxqt = cfg.platformTheme == "lxqt";
|
||||
isKde = cfg.platformTheme == "kde";
|
||||
platformPackages = with pkgs; {
|
||||
gnome = [ qgnomeplatform qgnomeplatform-qt6 ];
|
||||
gtk2 = [ libsForQt5.qtstyleplugins qt6Packages.qt6gtk2 ];
|
||||
kde = [ libsForQt5.plasma-integration libsForQt5.systemsettings ];
|
||||
lxqt = [ lxqt.lxqt-qtplugin lxqt.lxqt-config ];
|
||||
qt5ct = [ libsForQt5.qt5ct qt6Packages.qt6ct ];
|
||||
};
|
||||
|
||||
packages =
|
||||
if isQGnome then [
|
||||
pkgs.qgnomeplatform
|
||||
pkgs.adwaita-qt
|
||||
pkgs.qgnomeplatform-qt6
|
||||
pkgs.adwaita-qt6
|
||||
]
|
||||
else if isQtStyle then [ pkgs.libsForQt5.qtstyleplugins pkgs.qt6Packages.qt6gtk2 ]
|
||||
else if isQt5ct then [ pkgs.libsForQt5.qt5ct pkgs.qt6Packages.qt6ct ]
|
||||
else if isLxqt then [ pkgs.lxqt.lxqt-qtplugin pkgs.lxqt.lxqt-config ]
|
||||
else if isKde then [ pkgs.libsForQt5.plasma-integration pkgs.libsForQt5.systemsettings ]
|
||||
else throw "`qt.platformTheme` ${cfg.platformTheme} and `qt.style` ${cfg.style} are not compatible.";
|
||||
stylePackages = with pkgs; {
|
||||
bb10bright = [ libsForQt5.qtstyleplugins ];
|
||||
bb10dark = [ libsForQt5.qtstyleplugins ];
|
||||
cde = [ libsForQt5.qtstyleplugins ];
|
||||
cleanlooks = [ libsForQt5.qtstyleplugins ];
|
||||
gtk2 = [ libsForQt5.qtstyleplugins qt6Packages.qt6gtk2 ];
|
||||
motif = [ libsForQt5.qtstyleplugins ];
|
||||
plastique = [ libsForQt5.qtstyleplugins ];
|
||||
|
||||
adwaita = [ adwaita-qt adwaita-qt6 ];
|
||||
adwaita-dark = [ adwaita-qt adwaita-qt6 ];
|
||||
adwaita-highcontrast = [ adwaita-qt adwaita-qt6 ];
|
||||
adwaita-highcontrastinverse = [ adwaita-qt adwaita-qt6 ];
|
||||
|
||||
breeze = [ libsForQt5.breeze-qt5 ];
|
||||
|
||||
kvantum = [ libsForQt5.qtstyleplugin-kvantum qt6Packages.qtstyleplugin-kvantum ];
|
||||
};
|
||||
in
|
||||
|
||||
{
|
||||
meta.maintainers = [ maintainers.romildo ];
|
||||
meta.maintainers = with lib.maintainers; [ romildo thiagokokada ];
|
||||
|
||||
imports = [
|
||||
(mkRenamedOptionModule ["qt5" "enable" ] ["qt" "enable" ])
|
||||
(mkRenamedOptionModule ["qt5" "platformTheme" ] ["qt" "platformTheme" ])
|
||||
(mkRenamedOptionModule ["qt5" "style" ] ["qt" "style" ])
|
||||
(lib.mkRenamedOptionModule [ "qt5" "enable" ] [ "qt" "enable" ])
|
||||
(lib.mkRenamedOptionModule [ "qt5" "platformTheme" ] [ "qt" "platformTheme" ])
|
||||
(lib.mkRenamedOptionModule [ "qt5" "style" ] [ "qt" "style" ])
|
||||
];
|
||||
|
||||
options = {
|
||||
qt = {
|
||||
enable = lib.mkEnableOption "" // {
|
||||
description = lib.mdDoc ''
|
||||
Whether to enable Qt configuration, including theming.
|
||||
|
||||
enable = mkEnableOption (lib.mdDoc "Qt theming configuration");
|
||||
Enabling this option is necessary for Qt plugins to work in the
|
||||
installed profiles (e.g.: `nix-env -i` or `environment.systemPackages`).
|
||||
'';
|
||||
};
|
||||
|
||||
platformTheme = mkOption {
|
||||
type = types.enum [
|
||||
"gtk2"
|
||||
"gnome"
|
||||
"lxqt"
|
||||
"qt5ct"
|
||||
"kde"
|
||||
];
|
||||
platformTheme = lib.mkOption {
|
||||
type = with lib.types; nullOr (enum (lib.attrNames platformPackages));
|
||||
default = null;
|
||||
example = "gnome";
|
||||
relatedPackages = [
|
||||
"qgnomeplatform"
|
||||
"qgnomeplatform-qt6"
|
||||
["libsForQt5" "qtstyleplugins"]
|
||||
["libsForQt5" "qt5ct"]
|
||||
["lxqt" "lxqt-qtplugin"]
|
||||
["libsForQt5" "plasma-integration"]
|
||||
[ "libsForQt5" "plasma-integration" ]
|
||||
[ "libsForQt5" "qt5ct" ]
|
||||
[ "libsForQt5" "qtstyleplugins" ]
|
||||
[ "libsForQt5" "systemsettings" ]
|
||||
[ "lxqt" "lxqt-config" ]
|
||||
[ "lxqt" "lxqt-qtplugin" ]
|
||||
[ "qt6Packages" "qt6ct" ]
|
||||
[ "qt6Packages" "qt6gtk2" ]
|
||||
];
|
||||
description = lib.mdDoc ''
|
||||
Selects the platform theme to use for Qt applications.
|
||||
|
||||
The options are
|
||||
- `gtk`: Use GTK theme with [qtstyleplugins](https://github.com/qt/qtstyleplugins)
|
||||
- `gnome`: Use GNOME theme with [qgnomeplatform](https://github.com/FedoraQt/QGnomePlatform)
|
||||
- `gtk2`: Use GTK theme with [qtstyleplugins](https://github.com/qt/qtstyleplugins)
|
||||
- `kde`: Use Qt settings from Plasma.
|
||||
- `lxqt`: Use LXQt style set using the [lxqt-config-appearance](https://github.com/lxqt/lxqt-config)
|
||||
application.
|
||||
- `qt5ct`: Use Qt style set using the [qt5ct](https://sourceforge.net/projects/qt5ct/)
|
||||
application.
|
||||
- `kde`: Use Qt settings from Plasma.
|
||||
and [qt6ct](https://github.com/trialuser02/qt6ct) applications.
|
||||
'';
|
||||
};
|
||||
|
||||
style = mkOption {
|
||||
type = types.enum [
|
||||
"adwaita"
|
||||
"adwaita-dark"
|
||||
"cleanlooks"
|
||||
"gtk2"
|
||||
"motif"
|
||||
"plastique"
|
||||
];
|
||||
style = lib.mkOption {
|
||||
type = with lib.types; nullOr (enum (lib.attrNames stylePackages));
|
||||
default = null;
|
||||
example = "adwaita";
|
||||
relatedPackages = [
|
||||
"adwaita-qt"
|
||||
"adwaita-qt6"
|
||||
["libsForQt5" "qtstyleplugins"]
|
||||
["qt6Packages" "qt6gtk2"]
|
||||
[ "libsForQt5" "breeze-qt5" ]
|
||||
[ "libsForQt5" "qtstyleplugin-kvantum" ]
|
||||
[ "libsForQt5" "qtstyleplugins" ]
|
||||
[ "qt6Packages" "qt6gtk2" ]
|
||||
[ "qt6Packages" "qtstyleplugin-kvantum" ]
|
||||
];
|
||||
description = lib.mdDoc ''
|
||||
Selects the style to use for Qt applications.
|
||||
|
||||
The options are
|
||||
- `adwaita`, `adwaita-dark`: Use Adwaita Qt style with
|
||||
- `adwaita`, `adwaita-dark`, `adwaita-highcontrast`, `adawaita-highcontrastinverse`:
|
||||
Use Adwaita Qt style with
|
||||
[adwaita](https://github.com/FedoraQt/adwaita-qt)
|
||||
- `cleanlooks`, `gtk2`, `motif`, `plastique`: Use styles from
|
||||
- `breeze`: Use the Breeze style from
|
||||
[breeze](https://github.com/KDE/breeze)
|
||||
- `bb10bright`, `bb10dark`, `cleanlooks`, `gtk2`, `motif`, `plastique`:
|
||||
Use styles from
|
||||
[qtstyleplugins](https://github.com/qt/qtstyleplugins)
|
||||
- `kvantum`: Use styles from
|
||||
[kvantum](https://github.com/tsujan/Kvantum)
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
config = lib.mkIf cfg.enable {
|
||||
assertions =
|
||||
let
|
||||
gnomeStyles = [
|
||||
"adwaita"
|
||||
"adwaita-dark"
|
||||
"adwaita-highcontrast"
|
||||
"adwaita-highcontrastinverse"
|
||||
"breeze"
|
||||
];
|
||||
in
|
||||
[
|
||||
{
|
||||
assertion = cfg.platformTheme == "gnome" -> (builtins.elem cfg.style gnomeStyles);
|
||||
message = ''
|
||||
`qt.platformTheme` "gnome" must have `qt.style` set to a theme that supports both Qt and Gtk,
|
||||
for example: ${lib.concatStringsSep ", " gnomeStyles}.
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
environment.variables = {
|
||||
QT_QPA_PLATFORMTHEME = cfg.platformTheme;
|
||||
QT_STYLE_OVERRIDE = mkIf (! (isQt5ct || isLxqt || isKde)) cfg.style;
|
||||
QT_QPA_PLATFORMTHEME = lib.mkIf (cfg.platformTheme != null) cfg.platformTheme;
|
||||
QT_STYLE_OVERRIDE = lib.mkIf (cfg.style != null) cfg.style;
|
||||
};
|
||||
|
||||
environment.profileRelativeSessionVariables = let
|
||||
qtVersions = with pkgs; [ qt5 qt6 ];
|
||||
in {
|
||||
QT_PLUGIN_PATH = map (qt: "/${qt.qtbase.qtPluginPrefix}") qtVersions;
|
||||
QML2_IMPORT_PATH = map (qt: "/${qt.qtbase.qtQmlPrefix}") qtVersions;
|
||||
};
|
||||
|
||||
environment.systemPackages = packages;
|
||||
environment.profileRelativeSessionVariables =
|
||||
let
|
||||
qtVersions = with pkgs; [ qt5 qt6 ];
|
||||
in
|
||||
{
|
||||
QT_PLUGIN_PATH = map (qt: "/${qt.qtbase.qtPluginPrefix}") qtVersions;
|
||||
QML2_IMPORT_PATH = map (qt: "/${qt.qtbase.qtQmlPrefix}") qtVersions;
|
||||
};
|
||||
|
||||
environment.systemPackages =
|
||||
lib.optionals (cfg.platformTheme != null) (platformPackages.${cfg.platformTheme})
|
||||
++ lib.optionals (cfg.style != null) (stylePackages.${cfg.style});
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user