diff options
Diffstat (limited to 'nixos/modules/config/qt.nix')
-rw-r--r-- | nixos/modules/config/qt.nix | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/nixos/modules/config/qt.nix b/nixos/modules/config/qt.nix new file mode 100644 index 000000000000..35defb8fbd99 --- /dev/null +++ b/nixos/modules/config/qt.nix @@ -0,0 +1,112 @@ +{ 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 ] + else if isQt5ct then [ pkgs.libsForQt5.qt5ct ] + 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."; + +in + +{ + meta.maintainers = [ maintainers.romildo ]; + + imports = [ + (mkRenamedOptionModule ["qt5" "enable" ] ["qt" "enable" ]) + (mkRenamedOptionModule ["qt5" "platformTheme" ] ["qt" "platformTheme" ]) + (mkRenamedOptionModule ["qt5" "style" ] ["qt" "style" ]) + ]; + + options = { + qt = { + + enable = mkEnableOption (lib.mdDoc "Qt theming configuration"); + + platformTheme = mkOption { + type = types.enum [ + "gtk2" + "gnome" + "lxqt" + "qt5ct" + "kde" + ]; + example = "gnome"; + relatedPackages = [ + "qgnomeplatform" + "qgnomeplatform-qt6" + ["libsForQt5" "qtstyleplugins"] + ["libsForQt5" "qt5ct"] + ["lxqt" "lxqt-qtplugin"] + ["libsForQt5" "plasma-integration"] + ]; + 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) + - `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. + ''; + }; + + style = mkOption { + type = types.enum [ + "adwaita" + "adwaita-dark" + "cleanlooks" + "gtk2" + "motif" + "plastique" + ]; + example = "adwaita"; + relatedPackages = [ + "adwaita-qt" + "adwaita-qt6" + ["libsForQt5" "qtstyleplugins"] + ]; + description = lib.mdDoc '' + Selects the style to use for Qt applications. + + The options are + - `adwaita`, `adwaita-dark`: Use Adwaita Qt style with + [adwaita](https://github.com/FedoraQt/adwaita-qt) + - `cleanlooks`, `gtk2`, `motif`, `plastique`: Use styles from + [qtstyleplugins](https://github.com/qt/qtstyleplugins) + ''; + }; + }; + }; + + config = mkIf cfg.enable { + + environment.variables.QT_QPA_PLATFORMTHEME = cfg.platformTheme; + + environment.variables.QT_STYLE_OVERRIDE = mkIf (! (isQt5ct || isLxqt || isKde)) cfg.style; + + environment.systemPackages = packages; + + }; +} |