diff options
author | gnidorah <gnidorah@users.noreply.github.com> | 2019-10-13 00:07:36 +0300 |
---|---|---|
committer | gnidorah <gnidorah@users.noreply.github.com> | 2020-02-21 18:57:56 +0300 |
commit | 23107a32c4c637dc1091cfb89ae2fce443ce21cd (patch) | |
tree | 3d546104fc129ecf7094bfd51af141266289f77a /nixos | |
parent | 193e2ed86ea122b288ff8a616512bf821656ac47 (diff) | |
download | nixlib-23107a32c4c637dc1091cfb89ae2fce443ce21cd.tar nixlib-23107a32c4c637dc1091cfb89ae2fce443ce21cd.tar.gz nixlib-23107a32c4c637dc1091cfb89ae2fce443ce21cd.tar.bz2 nixlib-23107a32c4c637dc1091cfb89ae2fce443ce21cd.tar.lz nixlib-23107a32c4c637dc1091cfb89ae2fce443ce21cd.tar.xz nixlib-23107a32c4c637dc1091cfb89ae2fce443ce21cd.tar.zst nixlib-23107a32c4c637dc1091cfb89ae2fce443ce21cd.zip |
nixos/qt5: refactor to support more platform themes
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/config/qt5.nix | 136 |
1 files changed, 74 insertions, 62 deletions
diff --git a/nixos/modules/config/qt5.nix b/nixos/modules/config/qt5.nix index d9dec74f1552..bc3be7068a0e 100644 --- a/nixos/modules/config/qt5.nix +++ b/nixos/modules/config/qt5.nix @@ -6,13 +6,63 @@ let cfg = config.qt5; - isQGnome = cfg.platformTheme == "gnome" && cfg.style == "adwaita"; - isQtStyle = cfg.platformTheme == "gtk2" && cfg.style != "adwaita"; - - packages = if isQGnome then [ pkgs.qgnomeplatform pkgs.adwaita-qt ] - else if isQtStyle then [ pkgs.libsForQt5.qtstyleplugins ] - else throw "`qt5.platformTheme` ${cfg.platformTheme} and `qt5.style` ${cfg.style} are not compatible."; + themeType = types.submodule { + options = { + package = mkOption { + internal = true; + type = types.nullOr types.package; + default = null; + }; + name = mkOption { + internal = true; + type = types.str; + }; + }; + }; + optionalPackage = opt: + optional (opt != null && opt.package != null) opt.package; + + platforms = { + gtk2 = rec { + description = '' + <varlistentry> + <term><literal>gtk2</literal></term> + <listitem><para>Use GTK2 theme with + <link xlink:href="https://github.com/qt/qtstyleplugins">qtstyleplugins</link> + </para></listitem> + </varlistentry> + ''; + styles = [ "cleanlooks" "gtk2" "cde" "motif" "plastique" ]; + + assertions = [ + { + assertion = cfg.style != null && any (name: name == cfg.style.name) styles; + message = "`qt5.style.name` is not one of [ ${toString styles} ]."; + } + ]; + environment.variables.QT_QPA_PLATFORMTHEME = "gtk2"; + environment.variables.QT_STYLE_OVERRIDE = cfg.style.name; + environment.systemPackages = [ pkgs.libsForQt5.qtstyleplugins ]; + }; + qgnomeplatform = { + description = '' + <varlistentry> + <term><literal>qgnomeplatform</literal></term> + <listitem><para>Use GNOME theme with + <link xlink:href="https://github.com/FedoraQt/QGnomePlatform">qgnomeplatform</link> + </para></listitem> + </varlistentry> + ''; + + environment.variables.QT_QPA_PLATFORMTHEME = "qgnomeplatform"; + # TODO: make this optional once https://github.com/NixOS/nixpkgs/issues/54150 is fixed + # qgnomeplatform reads theme and other settings from dconf db + environment.variables.QT_STYLE_OVERRIDE = cfg.style.name; + environment.variables.XDG_DATA_DIRS = [ "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}" ]; + environment.systemPackages = [ pkgs.qgnomeplatform ]; + }; + }; in { @@ -23,80 +73,42 @@ in enable = mkEnableOption "Qt5 theming configuration"; platformTheme = mkOption { - type = types.enum [ - "gtk2" - "gnome" - ]; - example = "gnome"; - relatedPackages = [ - "qgnomeplatform" - ["libsForQt5" "qtstyleplugins"] - ]; + type = types.enum (attrNames platforms); + example = head (attrNames platforms); description = '' Selects the platform theme to use for Qt5 applications.</para> <para>The options are <variablelist> - <varlistentry> - <term><literal>gtk</literal></term> - <listitem><para>Use GTK theme with - <link xlink:href="https://github.com/qt/qtstyleplugins">qtstyleplugins</link> - </para></listitem> - </varlistentry> - <varlistentry> - <term><literal>gnome</literal></term> - <listitem><para>Use GNOME theme with - <link xlink:href="https://github.com/FedoraQt/QGnomePlatform">qgnomeplatform</link> - </para></listitem> - </varlistentry> + ${concatStrings (mapAttrsToList (name: value: value.description) platforms)} </variablelist> ''; }; style = mkOption { - type = types.enum [ - "adwaita" - "cleanlooks" - "gtk2" - "motif" - "plastique" - ]; - example = "adwaita"; - relatedPackages = [ - "adwaita-qt" - ["libsForQt5" "qtstyleplugins"] - ]; - description = '' - Selects the style to use for Qt5 applications.</para> - <para>The options are - <variablelist> - <varlistentry> - <term><literal>adwaita</literal></term> - <listitem><para>Use Adwaita Qt style with - <link xlink:href="https://github.com/FedoraQt/adwaita-qt">adwaita</link> - </para></listitem> - </varlistentry> - <varlistentry> - <term><literal>cleanlooks</literal></term> - <term><literal>gtk2</literal></term> - <term><literal>motif</literal></term> - <term><literal>plastique</literal></term> - <listitem><para>Use styles from - <link xlink:href="https://github.com/qt/qtstyleplugins">qtstyleplugins</link> - </para></listitem> - </varlistentry> - </variablelist> + type = types.nullOr themeType; + default = null; + example = literalExample '' + { + name = "Breeze"; + package = pkgs.breeze-qt5; + }; ''; + description = "The Qt style to use."; }; + }; }; config = mkIf cfg.enable { - environment.variables.QT_QPA_PLATFORMTHEME = cfg.platformTheme; + assertions = attrByPath [ cfg.platformTheme "assertions" ] [] platforms; - environment.variables.QT_STYLE_OVERRIDE = cfg.style; + environment.variables = attrByPath [ cfg.platformTheme "environment" "variables" ] {} platforms; - environment.systemPackages = packages; + environment.systemPackages = attrByPath [ cfg.platformTheme "environment" "systemPackages" ] [] platforms + ++ optionalPackage cfg.style; }; + + meta.maintainers = with maintainers; [ worldofpeace gnidorah ]; } |