diff --git a/modules/misc/qt.nix b/modules/misc/qt.nix index c814f0dde..bb59044dd 100644 --- a/modules/misc/qt.nix +++ b/modules/misc/qt.nix @@ -12,27 +12,64 @@ in { meta.maintainers = [ maintainers.rycee ]; + imports = [ + (mkChangedOptionModule + [ "qt" "useGtkTheme" ] + [ "qt" "platformTheme" ] + (config: + if getAttrFromPath [ "qt" "useGtkTheme" ] config + then "gtk" + else null)) + ]; + options = { qt = { enable = mkEnableOption "Qt 4 and 5 configuration"; - useGtkTheme = mkOption { - type = types.bool; - default = false; + platformTheme = mkOption { + type = types.nullOr (types.enum [ "gtk" "gnome" ]); + default = null; + example = "gnome"; + relatedPackages = [ + "qgnomeplatform" + ["libsForQt5" "qtstyleplugins"] + ]; description = '' - Whether Qt 4 and 5 should be set up to use the GTK theme - settings. + Selects the platform theme to use for Qt applications. + The options are + + + gtk + Use GTK theme with + qtstyleplugins + + + + gnome + Use GNOME theme with + qgnomeplatform + + + ''; }; }; }; - config = mkIf (cfg.enable && cfg.useGtkTheme) { - home.sessionVariables.QT_QPA_PLATFORMTHEME = "gtk2"; - home.packages = [ pkgs.libsForQt5.qtstyleplugins ]; + config = mkIf (cfg.enable && cfg.platformTheme != null) { + home.sessionVariables.QT_QPA_PLATFORMTHEME = + if cfg.platformTheme == "gnome" then "gnome" else "gtk2"; + + home.packages = + if cfg.platformTheme == "gnome" + then [ pkgs.qgnomeplatform ] + else [ pkgs.libsForQt5.qtstyleplugins ]; + xsession.profileExtra = "systemctl --user import-environment QT_QPA_PLATFORMTHEME"; + # Enable GTK+ style for Qt4 in either case. + # It doesn’t support the platform theme packages. home.activation.useGtkThemeInQt4 = dag.entryAfter ["writeBoundary"] '' $DRY_RUN_CMD ${pkgs.crudini}/bin/crudini $VERBOSE_ARG \ --set "${config.xdg.configHome}/Trolltech.conf" Qt style GTK+