diff --git a/hosts/modules/gui/gtk.nix b/hosts/modules/gui/gtk.nix index d0a3166f..74ffdabe 100644 --- a/hosts/modules/gui/gtk.nix +++ b/hosts/modules/gui/gtk.nix @@ -1,7 +1,17 @@ -{ config, lib, pkgs }: +# gtk apps search XDG_ICON_DIRS for icons (nixos specific) +# nixos ships the hi-color icon theme by default, which has *some* icons, +# but leaves a lot of standard ones unavailable. +# +# system-wide theme components live in: +# - /run/current-system/sw/share/color-schemes/${theme} +# - /run/current-system/sw/share/icons/${theme} +# - /run/current-system/sw/share/icons/${theme}/cursors (cursor-theme) +# - /run/current-system/sw/share/themes/${theme}/gtk-4.0 +{ config, lib, pkgs, ... }: let cfg = config.sane.gui.gtk; - themes = { + unsortedThemes = { + # crude assortment of themes in nixpkgs; some might not be gtk themes, some gtk themes might not be in this list inherit (pkgs) # themes are in adapta-gtk-theme @@ -105,6 +115,74 @@ let yaru-theme zuki-themes ; + inherit (pkgs.gnome) + adwaita-icon-theme + gnome-themes-extra + ; + }; + + themes = with pkgs; { + color-scheme = { + default = emptyDirectory; + Dracula = dracula-theme; + DraculaPurple = dracula-theme; + Dracula-cursors = dracula-theme; + }; + cursor-theme = { + Adwaita = gnome.adwaita-icon-theme; + }; + gtk-theme = { + Adwaita = gnome.gnome-themes-extra; # gtk-3.0 + Adwaita-dark = gnome.gnome-themes-extra; # gtk-3.0 + Arc = arc-theme; # gtk-4.0 + Arc-Dark = arc-theme; # gtk-4.0 + Arc-Darker = arc-theme; # gtk-4.0 + Arc-Lighter = arc-theme; # gtk-4.0 + Dracula = dracula-theme; # gtk-4.0 + E17gtk = e17gtk; # gtk-3.0 + Fluent = fluent-gtk-theme; # gtk-4.0 + Fluent-compact = fluent-gtk-theme; # gtk-4.0 + Fluent-Dark = fluent-gtk-theme; # gtk-4.0 + Fluent-Dark-compact = fluent-gtk-theme; # gtk-4.0 + Fluent-Light = fluent-gtk-theme; # gtk-4.0 + Fluent-Light-compact = fluent-gtk-theme; # gtk-4.0, NICE! + HighContrast = gnome.gnome-themes-extra; # gtk-3.0 + Matcha-light-azul = matcha-gtk-theme; # gtk-4.0, NICE! + Matcha-light-sea = matcha-gtk-theme; # gtk-4.0, NICE! + # additional Matcha-* omitted + Nordic = nordic; # gtk-4.0 + Nordic-bluish-accent = nordic; # gtk-4.0 + Nordic-darker = nordic; # gtk-4.0 + Nordic-Polar = nordic; # gtk-4.0, NICE + Numix = numix-gtk-theme; # gtk-3.20, meh + NumixSolarizedDarkBlue = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedDarkCyan = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedDarkGreen = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedDarkMagenta = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedDarkOrange = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedDarkRed = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedDarkViolet = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedDarkYellow = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedLightBlue = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedLightBlueDarkTop = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedLightCyan = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedLightGreen = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedLightMagenta = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedLightOrange = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedLightRed = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedLightViolet = numix-solarized-gtk-theme; # gtk-3.20 + NumixSolarizedLightYellow = numix-solarized-gtk-theme; # gtk-3.20 + NumixStandard = numix-solarized-gtk-theme; # gtk-3.20 + Paper = paper-gtk-theme; # gtk-4.0 + Pop = pop-gtk-theme; # gtk-4.0 + Pop-dark = pop-gtk-theme; # gtk-4.0 + Tokyonight-Light-B = tokyo-night-gtk; # gtk-4.0, NICE + # other Tokyonight-* omitted + }; + icon-theme = { + Adwaita = gnome.adwaita-icon-theme; + HighContrast = gnome.gnome-themes-extra; # gtk-3.0 + }; }; in { @@ -114,20 +192,49 @@ in type = types.bool; description = "apply theme to gtk4 apps"; }; + sane.gui.gtk.all = mkOption { + default = false; + type = types.bool; + description = "install all known gtk themes (for testing)"; + }; + sane.gui.gtk.color-scheme = mkOption { + default = "default"; + type = types.str; + }; + sane.gui.gtk.cursor-theme = mkOption { + default = "Adwaita"; + type = types.str; + }; + sane.gui.gtk.gtk-theme = mkOption { + default = "Adwaita"; + type = types.str; + }; + sane.gui.gtk.icon-theme = mkOption { + default = "Adwaita"; + type = types.str; + }; }; config = lib.mkIf cfg.enable { programs.dconf.packages = [ (pkgs.writeTextFile { name = "dconf-sway-settings"; - destination = "/etc/dconf/db/site.d/10_sway_settings"; + destination = "/etc/dconf/db/site.d/10_gtk_settings"; text = '' [org/gnome/desktop/interface] - gtk-theme="Dracula" - icon-theme="Dracula" + color-scheme="${cfg.color-scheme}" + cursor-theme="${cfg.cursor-theme}" + gtk-theme="${cfg.gtk-theme}" + icon-theme="${cfg.icon-theme}" ''; }) ]; - environment.systemPackages = lib.attrValues themes; + # environment.systemPackages = lib.attrValues themes; + environment.systemPackages = [ + themes.color-scheme."${cfg.color-scheme}" + themes.cursor-theme."${cfg.cursor-theme}" + themes.gtk-theme."${cfg.gtk-theme}" + themes.icon-theme."${cfg.icon-theme}" + ] ++ lib.optionals cfg.all (lib.attrValues unsortedThemes); }; } diff --git a/hosts/modules/gui/sway/default.nix b/hosts/modules/gui/sway/default.nix index f6f38027..c3d2513b 100644 --- a/hosts/modules/gui/sway/default.nix +++ b/hosts/modules/gui/sway/default.nix @@ -95,6 +95,8 @@ in (mkIf cfg.enable { sane.programs.swayApps.enableFor.user.colin = true; sane.gui.gtk.enable = lib.mkDefault true; + # sane.gui.gtk.gtk-theme = lib.mkDefault "Fluent-Light-compact"; + sane.gui.gtk.gtk-theme = lib.mkDefault "Tokyonight-Light-B"; # swap in these lines to use SDDM instead of `services.greetd`. # services.xserver.displayManager.sddm.enable = true;