mirror of
https://github.com/nix-community/home-manager.git
synced 2025-11-08 11:36:05 +01:00
170 lines
4.3 KiB
Nix
170 lines
4.3 KiB
Nix
{ config, lib, ... }:
|
|
|
|
let
|
|
inherit (lib)
|
|
literalExpression
|
|
mkEnableOption
|
|
mkIf
|
|
mkOption
|
|
types
|
|
;
|
|
|
|
cfg = config.gtk;
|
|
cfg3 = config.gtk.gtk3;
|
|
|
|
gtkLib = import ./lib.nix { inherit lib; };
|
|
|
|
toIni = lib.generators.toINI {
|
|
mkKeyValue =
|
|
key: value:
|
|
let
|
|
value' = if lib.isBool value then lib.boolToString value else toString value;
|
|
in
|
|
"${lib.escape [ "=" ] key}=${value'}";
|
|
};
|
|
|
|
in
|
|
|
|
{
|
|
options.gtk.gtk3 = {
|
|
enable = mkEnableOption "GTK 3 configuration" // {
|
|
default = true;
|
|
};
|
|
|
|
font = mkOption {
|
|
type = types.nullOr lib.hm.types.fontType;
|
|
default = cfg.font;
|
|
defaultText = literalExpression "config.gtk.font";
|
|
description = "Font for GTK 3 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 3 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 3 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 3 applications.";
|
|
};
|
|
|
|
colorScheme = mkOption {
|
|
type = types.nullOr (
|
|
types.enum [
|
|
"dark"
|
|
"light"
|
|
]
|
|
);
|
|
default = cfg.colorScheme;
|
|
defaultText = literalExpression "config.gtk.colorScheme";
|
|
description = "Color scheme for GTK 3 applications.";
|
|
};
|
|
|
|
extraConfig = mkOption {
|
|
type =
|
|
with types;
|
|
attrsOf (oneOf [
|
|
bool
|
|
int
|
|
str
|
|
]);
|
|
default = { };
|
|
example = {
|
|
gtk-cursor-blink = false;
|
|
gtk-recent-files-limit = 20;
|
|
};
|
|
description = "Extra settings for {file}`$XDG_CONFIG_HOME/gtk-3.0/settings.ini`.";
|
|
};
|
|
|
|
extraCss = mkOption {
|
|
type = types.lines;
|
|
default = "";
|
|
description = "Extra CSS for {file}`$XDG_CONFIG_HOME/gtk-3.0/gtk.css`.";
|
|
};
|
|
|
|
bookmarks = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [ ];
|
|
example = [ "file:///home/jane/Documents" ];
|
|
description = "File browser bookmarks.";
|
|
};
|
|
};
|
|
|
|
config = mkIf (cfg.enable && cfg3.enable) {
|
|
xdg.configFile = {
|
|
"gtk-3.0/settings.ini" = {
|
|
text = toIni {
|
|
Settings =
|
|
gtkLib.mkGtkSettings {
|
|
gtkVersion = 3;
|
|
inherit (cfg3)
|
|
font
|
|
theme
|
|
iconTheme
|
|
cursorTheme
|
|
colorScheme
|
|
;
|
|
}
|
|
// cfg3.extraConfig;
|
|
};
|
|
};
|
|
"gtk-3.0/gtk.css" = mkIf (cfg3.extraCss != "") {
|
|
text = cfg3.extraCss;
|
|
};
|
|
"gtk-3.0/bookmarks" = mkIf (cfg3.bookmarks != [ ]) {
|
|
text = lib.concatMapStrings (l: l + "\n") cfg3.bookmarks;
|
|
};
|
|
};
|
|
|
|
# DConf settings are primarily for GNOME/GTK3/4 apps
|
|
dconf.settings."org/gnome/desktop/interface" =
|
|
let
|
|
settings = gtkLib.mkGtkSettings {
|
|
gtkVersion = 3;
|
|
inherit (cfg3)
|
|
font
|
|
theme
|
|
iconTheme
|
|
cursorTheme
|
|
colorScheme
|
|
;
|
|
};
|
|
in
|
|
lib.filterAttrs (_: v: v != null) {
|
|
"font-name" = settings."gtk-font-name" or null;
|
|
"gtk-theme" = settings."gtk-theme-name" or null;
|
|
"icon-theme" = settings."gtk-icon-theme-name" or null;
|
|
"cursor-theme" = settings."gtk-cursor-theme-name" or null;
|
|
"cursor-size" = settings."gtk-cursor-theme-size" or null;
|
|
"color-scheme" = if cfg3.colorScheme != null then "prefer-${cfg3.colorScheme}" else null;
|
|
};
|
|
};
|
|
}
|