summaryrefslogtreecommitdiffstats
path: root/nixos/modules/config/qt.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/modules/config/qt.nix')
-rw-r--r--nixos/modules/config/qt.nix112
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;
+
+ };
+}