1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-11-08 19:46:05 +01:00
home-manager/modules/misc/gtk/gtk2.nix
Austin Horstman 03bf1bd8d6
gtk2: fix missing force option (#7437)
Missed during migration

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-07-11 15:05:42 -05:00

125 lines
3.1 KiB
Nix

{ config, lib, ... }:
let
inherit (lib)
literalExpression
mkEnableOption
mkIf
mkOption
types
;
cfg = config.gtk;
cfg2 = config.gtk.gtk2;
gtkLib = import ./lib.nix { inherit lib; };
formatGtk2Option =
n: v:
let
v' =
if lib.isBool v then
lib.boolToString v
else if lib.isString v then
''"${v}"''
else
toString v;
in
"${lib.escape [ "=" ] n} = ${v'}";
in
{
options.gtk.gtk2 = {
enable = mkEnableOption "GTK 2 configuration" // {
default = true;
};
force = lib.mkEnableOption "GTK 2 config force overwrite without creating a backup";
font = mkOption {
type = types.nullOr lib.hm.types.fontType;
default = cfg.font;
defaultText = literalExpression "config.gtk.font";
description = "Font for GTK 2 applications.";
};
theme = mkOption {
type = types.nullOr (
gtkLib.mkThemeType {
typeName = "theme";
packageExample = "pkgs.gnome.gnome-themes-extra";
}
);
default = cfg.theme;
defaultText = literalExpression "config.gtk.theme";
description = "Theme for GTK 2 applications.";
};
iconTheme = mkOption {
type = types.nullOr (
gtkLib.mkThemeType {
typeName = "icon theme";
packageExample = "pkgs.adwaita-icon-theme";
}
);
default = cfg.iconTheme;
defaultText = literalExpression "config.gtk.iconTheme";
description = "Icon theme for GTK 2 applications.";
};
cursorTheme = mkOption {
type = types.nullOr (
gtkLib.mkThemeType {
typeName = "cursor theme";
hasSize = true;
packageExample = "pkgs.vanilla-dmz";
nameExample = "Vanilla-DMZ";
}
);
default = cfg.cursorTheme;
defaultText = literalExpression "config.gtk.cursorTheme";
description = "Cursor theme for GTK 2 applications.";
};
extraConfig = mkOption {
type = types.lines;
default = "";
example = "gtk-can-change-accels = 1";
description = "Extra lines to add to {file}`~/.gtkrc-2.0`.";
};
configLocation = mkOption {
type = types.path;
default = "${config.home.homeDirectory}/.gtkrc-2.0";
defaultText = literalExpression ''"''${config.home.homeDirectory}/.gtkrc-2.0"'';
example = literalExpression ''"''${config.xdg.configHome}/gtk-2.0/gtkrc"'';
description = "The location of the GTK 2 configuration file.";
};
};
config = mkIf (cfg.enable && cfg2.enable) {
home.file.${cfg2.configLocation} = {
text =
let
settings = gtkLib.mkGtkSettings {
inherit (cfg2)
font
theme
iconTheme
cursorTheme
;
};
settingsText = lib.concatMapStrings (n: "${formatGtk2Option n settings.${n}}\n") (
lib.attrNames settings
);
in
''
${settingsText}${cfg2.extraConfig}
'';
inherit (cfg2) force;
};
home.sessionVariables.GTK2_RC_FILES = cfg2.configLocation;
};
}