summaryrefslogtreecommitdiffstats
path: root/nixos/modules/config/gtk
diff options
context:
space:
mode:
authorgnidorah <gnidorah@users.noreply.github.com>2019-10-12 14:18:00 +0300
committergnidorah <gnidorah@users.noreply.github.com>2020-02-21 18:57:56 +0300
commit193e2ed86ea122b288ff8a616512bf821656ac47 (patch)
treec24e2df01d921fc5464b70858579ffd2d3cdbd00 /nixos/modules/config/gtk
parent8130f3c1c2bb0e533b5e150c39911d6e61dcecc2 (diff)
nixos/gtk: init
Diffstat (limited to 'nixos/modules/config/gtk')
-rw-r--r--nixos/modules/config/gtk/gtk.nix160
1 files changed, 160 insertions, 0 deletions
diff --git a/nixos/modules/config/gtk/gtk.nix b/nixos/modules/config/gtk/gtk.nix
new file mode 100644
index 000000000000..22f1e5d74835
--- /dev/null
+++ b/nixos/modules/config/gtk/gtk.nix
@@ -0,0 +1,160 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ cfg = config.gtk;
+ gtk2 = cfg.enable && cfg.gtk2;
+
+ toGtk2File = key: value:
+ let
+ value' =
+ if isBool value then (if value then "true" else "false")
+ else if isString value then "\"${value}\""
+ else toString value;
+ in
+ "${key} = ${value'}";
+ toGtk3File = generators.toINI {
+ mkKeyValue = key: value:
+ let
+ value' =
+ if isBool value then (if value then "true" else "false")
+ else toString value;
+ in
+ "${key}=${value'}";
+ };
+
+ settings =
+ optionalAttrs (cfg.font != null)
+ { gtk-font-name = cfg.font.name; }
+ //
+ optionalAttrs (cfg.theme != null)
+ { gtk-theme-name = cfg.theme.name; }
+ //
+ optionalAttrs (cfg.iconTheme != null)
+ { gtk-icon-theme-name = cfg.iconTheme.name; }
+ //
+ optionalAttrs (cfg.cursorTheme != null)
+ { gtk-cursor-theme-name = cfg.cursorTheme.name; };
+
+ fontType = types.submodule {
+ options = {
+ package = mkOption {
+ internal = true;
+ type = types.nullOr types.package;
+ default = null;
+ };
+ name = mkOption {
+ internal = true;
+ type = types.str;
+ };
+ };
+ };
+ 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;
+in
+{
+ options = {
+ gtk = {
+ enable = mkEnableOption "Gtk theming configuration";
+
+ gtk2 = mkOption {
+ type = types.bool;
+ default = true;
+ description = ''
+ Whether to enable theming for obsolete GTK2 engine.
+ '';
+ };
+
+ font = mkOption {
+ type = types.nullOr fontType;
+ default = null;
+ example = literalExample ''
+ {
+ name = "Cantarell 11";
+ package = pkgs.cantarell-fonts;
+ };
+ '';
+ description = ''
+ The font to use in GTK+ applications.
+ '';
+ };
+
+ iconTheme = mkOption {
+ type = types.nullOr themeType;
+ default = null;
+ example = literalExample ''
+ {
+ name = "Adwaita";
+ package = pkgs.gnome3.adwaita-icon-theme;
+ };
+ '';
+ description = "The icon theme to use.";
+ };
+
+ cursorTheme = mkOption {
+ type = types.nullOr themeType;
+ default = null;
+ example = literalExample ''
+ {
+ name = "Adwaita";
+ package = pkgs.gnome3.adwaita-icon-theme;
+ };
+ '';
+ description = "The cursor theme to use.";
+ };
+
+ theme = mkOption {
+ type = types.nullOr themeType;
+ default = null;
+ example = literalExample ''
+ {
+ name = "Adwaita";
+ package = pkgs.gnome-themes-extra;
+ };
+ '';
+ description = "The GTK+ theme to use.";
+ };
+ };
+ };
+
+ config = mkMerge [
+
+ (mkIf gtk2 {
+ environment.etc."xdg/gtk-2.0/gtkrc".text =
+ concatStringsSep "\n" (
+ mapAttrsToList toGtk2File settings
+ );
+ })
+
+ (mkIf cfg.enable {
+ environment.systemPackages =
+ optionalPackage cfg.font
+ ++ optionalPackage cfg.theme
+ ++ optionalPackage cfg.iconTheme
+ ++ optionalPackage cfg.cursorTheme;
+
+ environment.etc."xdg/gtk-3.0/settings.ini".text =
+ toGtk3File { Settings = settings; };
+
+ # TODO: support Wayland/XSettings
+ # once https://github.com/NixOS/nixpkgs/issues/54150 is fixed
+ })
+ ];
+
+ meta.maintainers = [ maintainers.gnidorah ];
+}