Loading nixos/modules/config/qt.nix +99 −66 Original line number Diff line number Diff line { 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"; 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."; 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 ]; }; in 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" "plasma-integration" ] [ "libsForQt5" "qt5ct" ] [ "libsForQt5" "qtstyleplugins" ] [ "libsForQt5" "systemsettings" ] [ "lxqt" "lxqt-config" ] [ "lxqt" "lxqt-qtplugin" ] ["libsForQt5" "plasma-integration"] [ "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" "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 environment.profileRelativeSessionVariables = let qtVersions = with pkgs; [ qt5 qt6 ]; in { in { QT_PLUGIN_PATH = map (qt: "/${qt.qtbase.qtPluginPrefix}") qtVersions; QML2_IMPORT_PATH = map (qt: "/${qt.qtbase.qtQmlPrefix}") qtVersions; }; environment.systemPackages = packages; environment.systemPackages = lib.optionals (cfg.platformTheme != null) (platformPackages.${cfg.platformTheme}) ++ lib.optionals (cfg.style != null) (stylePackages.${cfg.style}); }; } Loading
nixos/modules/config/qt.nix +99 −66 Original line number Diff line number Diff line { 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"; 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."; 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 ]; }; in 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" "plasma-integration" ] [ "libsForQt5" "qt5ct" ] [ "libsForQt5" "qtstyleplugins" ] [ "libsForQt5" "systemsettings" ] [ "lxqt" "lxqt-config" ] [ "lxqt" "lxqt-qtplugin" ] ["libsForQt5" "plasma-integration"] [ "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" "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 environment.profileRelativeSessionVariables = let qtVersions = with pkgs; [ qt5 qt6 ]; in { in { QT_PLUGIN_PATH = map (qt: "/${qt.qtbase.qtPluginPrefix}") qtVersions; QML2_IMPORT_PATH = map (qt: "/${qt.qtbase.qtQmlPrefix}") qtVersions; }; environment.systemPackages = packages; environment.systemPackages = lib.optionals (cfg.platformTheme != null) (platformPackages.${cfg.platformTheme}) ++ lib.optionals (cfg.style != null) (stylePackages.${cfg.style}); }; }