{ config, lib, ... }: let cfg = config.alqueva.system.dconf; inherit (lib) types; in { options.alqueva.system.dconf = { enable = lib.mkEnableOption "configuration with DConf"; luminosity = lib.mkOption { type = types.enum [ "dark" "light" "default" ]; default = "dark"; description = "The luminosity you want to use for GTK."; apply = lum: if lum == "default" then lum else "prefer-${lum}"; }; theme = lib.mkOption { type = types.str; description = "The theme you want to use for GTK."; default = ""; }; icon.theme = lib.mkOption { type = types.str; description = "The icon theme you want to use for GTK."; default = ""; }; cursor = { theme = lib.mkOption { type = types.str; description = "The cursor theme you want to use for GTK."; default = ""; }; size = lib.mkOption { type = types.ints.u32; default = 24; description = "The cursor size you want to use for GTK."; apply = size: lib.gvariant.mkUint32 size; }; }; extraDconfPackages = lib.mkOption { type = types.listOf types.package; description = "Extra packages to install for DConf."; default = [ ]; }; extraDconfSettings = lib.mkOption { type = types.attrsOf types.anything; description = "Extra settings you want to apply to DConf."; default = { }; }; }; config = lib.mkIf cfg.enable { programs.dconf = { profiles.user.databases = [ { settings = { "org/gnome/desktop/interface" = { color-scheme = cfg.luminosity; cursor-size = cfg.cursor.size; cursor-theme = cfg.cursor.theme; icon-theme = cfg.icon.theme; gtk-theme = cfg.theme; }; } // cfg.extraDconfSettings; } ]; packages = cfg.extraDconfPackages; }; }; }