diff --git a/hosts/common/programs/sane-theme.nix b/hosts/common/programs/sane-theme.nix index 12f5a678..aaa62e75 100644 --- a/hosts/common/programs/sane-theme.nix +++ b/hosts/common/programs/sane-theme.nix @@ -1,7 +1,313 @@ { config, lib, pkgs, ... }: +let + cfg = config.sane.programs.sane-theme.config; + 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 + adapta-kde-theme + adementary-theme + adi1090x-plymouth-themes + adw-gtk3 + adwaita-qt + adwaita-qt6 + albatross + amarena-theme + amber-theme + ant-bloody-theme + ant-nebula-theme + ant-theme + arc-kde-theme + arc-theme + artim-dark + ayu-theme-gtk + base16-schemes + blackbird + breath-theme + canta-theme + catppuccin-gtk + catppuccin-kde + catppuccin-kvantum + catppuccin-plymouth + clearlooks-phenix + colloid-gtk-theme + colloid-kde + dracula-theme + e17gtk + equilux-theme + flat-remix-gnome + flat-remix-gtk + fluent-gtk-theme + graphite-gtk-theme + graphite-kde-theme + greybird + gruvbox-dark-gtk + gruvbox-gtk-theme + gruvterial-theme + juno-theme + kde-gruvbox + kde-rounded-corners + layan-gtk-theme + layan-kde + lightly-boehs + lightly-qt + lounge-gtk-theme + marwaita + marwaita-manjaro + marwaita-peppermint + marwaita-pop_os + marwaita-ubuntu + matcha-gtk-theme + materia-kde-theme + materia-theme + material-kwin-decoration + mojave-gtk-theme + nixos-bgrt-plymouth + nordic + numix-gtk-theme + numix-solarized-gtk-theme + numix-sx-gtk-theme + oceanic-theme + omni-gtk-theme + onestepback + openzone-cursors + orchis-theme + orion + palenight-theme + paper-gtk-theme + pitch-black + plano-theme + plasma-overdose-kde-theme + plata-theme + pop-gtk-theme + qogir-kde + qogir-theme + rose-pine-gtk-theme + shades-of-gray-theme + sierra-breeze-enhanced + sierra-gtk-theme + skeu + snowblind + solarc-gtk-theme + spacx-gtk-theme + stilo-themes + sweet + sweet-nova + theme-jade1 + theme-obsidian2 + theme-vertex + tokyo-night-gtk + ubuntu-themes + venta + vimix-gtk-themes + whitesur-gtk-theme + yaru-remix-theme + 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 = { + # find icon themes via `nix-locate share/icons/Adwaita` + # then determine the name here by building and `ls result/share/icons` + # this misses quite a few icon themes that aren't Adwaita-based. + # for those, try `nix-locate share/icons`? + # + # note that adwaita apps expect exactly the icon set provided by adwaita-icon-theme: + # - most icon themes are supplementary to adwaita, rather than a full replacement. + # - i.e. most themes, unless adwaita is also installed, will cause some missing icons inside apps. + # - that's probably why so many themes here also symlink Adwaita + # my accounting of "adwaita coverage" seems to be overoptimistic somehow + # maybe some apps bundle adwaita themselves + Adwaita = gnome.adwaita-icon-theme; + Arc = arc-icon-theme; # 4.5/5, meh icon for "vertical ellipsis". 3/5 adwaita coverage + elementary-xfce = elementary-xfce-icon-theme; # does not cross compile (2023/10/03) + elementary-xfce-dark = elementary-xfce-icon-theme; + elementary-xfce-darker = elementary-xfce-icon-theme; + elementary-xfce-darkest = elementary-xfce-icon-theme; + HighContrast = gnome.gnome-themes-extra; # 5/5. 5/5 adwaita coverage (4/5 cross) + Humanity = humanity-icon-theme; # 5/5. 5/5 adwaita coverage (3.5/5 cross, unique in which icons work) + Humanity-Dark = humanity-icon-theme; + kora = kora-icon-theme; + kora-light = kora-icon-theme; + kora-light-panel = kora-icon-theme; + kora-pgrey = kora-icon-theme; + Numix = numix-icon-theme; # 4/5, meh icon for "back". + Numix-Light = numix-icon-theme; + Paper = paper-icon-theme; # 4/5, weird icon for "info". 5/5 adwaita coverage (3.5 cross, highly unique in which icons work) + Paper-Mono-Dark = paper-icon-theme; + Pop = pop-icon-theme; # 5/5. 2/5 adwaita coverage + Tela-circle = tela-circle-icon-theme; + Tela-circle-dark = tela-circle-icon-theme; + Tela-circle-light = tela-circle-icon-theme; + + # themes which don't symlink Adwaita + BeautyLine = beauty-line-icon-theme; # 3.5/5. 4/5 adwaita coverage + breeze = breeze-icons; + breeze-dark = breeze-icons; + Mint-X = cinnamon.mint-x-icons; + # 10-ish other Mint-X variants omitted + # cinnamon.mint-l-icons; + # cinnamon.mint-y-icons; + Colloid = colloid-icon-theme; # 4.5/5, thin. 5/5 adwaita coverage (3/5 cross) + Colloid-dark = colloid-icon-theme; + Colloid-light = colloid-icon-theme; + bloom = deepin.deepin-icon-theme; + # 4 other deepin editions omitted + Dracula = dracula-icon-theme; # 4.5/5, a little thin. 4.5/5 adwaita coverage + Faba = faba-icon-theme; # 4/5. 4/5 adwaita coverage + Faba-Mono = faba-mono-icons; + Faba-Mono-Dark = faba-mono-icons; + Flat-Remix-Grey-Light = flat-remix-icon-theme; # 5/5. 5/5 adwaita coverage. builds on breeze, elementary + # 20-ish other flat-remix editions omitted + Fluent = fluent-icon-theme; # 5/5, though thin. 5/5 adwaita coverage (3/5 cross) + Fluent-dark = fluent-icon-theme; + gnome = gnome-icon-theme; # 3/5, icons are colored. 3/5 adwaita coverage + hicolor = hicolor-icon-theme; # 2/5 adwaita coverage; using this forces application builtin icons + la-capitaine-icon-theme = la-capitaine-icon-theme; # 4.5/5. 4.5/5 adwaita coverage. builds upon elementary + Luna = luna-icons; + # 5 other Luna variants omitted + maia = maia-icon-theme; # 3/5, icons are colored. 2/5 adwaita coverage + maia-dark = maia-icon-theme; + # mate.mate-icon-theme-faenza + mate = mate.mate-icon-theme; # 4.5/5. 4/5 adwaita coverage + menta = mate.mate-icon-theme; + Moka = moka-icon-theme; # 3/5, icons are colored. 3/5 adwaita coverage + # nixos-icons; + Nordzy = nordzy-icon-theme; # 5/5, thin. 5/5 adwaita coverage (3/5 cross) + # 10-ish Nordzy editions omitted + # numix-icon-theme-circle + # numix-icon-theme-square + oomox-gruvbox-dark = gruvbox-dark-icons-gtk; + Oranchelo = oranchelo-icon-theme; + # 3 other oranchelo editions omitted + elementary = pantheon.elementary-icon-theme; # 4.5/5. 4.5/5 adwaita coverage + Papirus = papirus-icon-theme; # 5/5. 5/5 adwaita coverage + # 4 other Papirus editions omitted + # papirus-maia-icon-theme + Qogir = qogir-icon-theme; # 5/5, thin. 5/5 adwaita coverage (2.5/5 cross) + # 5 other Qogir variants omitted + rose-pine = rose-pine-icon-theme; + rose-pine-dawn = rose-pine-icon-theme; # 5/5. 5/5 adwaita coverage (2.5 cross). looks a lot like Flat Remix... + rose-pine-moon = rose-pine-icon-theme; + SuperTinyIcons = super-tiny-icons; # 4/5. 2/5 adwaita coverage + Tango = tango-icon-theme; # 2/5. 3/5 adwaita coverage -- mostly just forwards to gnome-icon-theme + Tela = tela-icon-theme; # 5/5. 5/5 adwaita coverage + # 30-ish other Tela editions omitted + Vimix = vimix-icon-theme; + # 15-ish other Vimix editions omitted + WhiteSur = whitesur-icon-theme; # 4.5/5, thin & like iOS. 5/5 adwaita coverage (3.5/5 cross) + WhiteSur-dark = whitesur-icon-theme; + Rodent = xfce.xfce4-icon-theme; + Zafiro-icons-Dark = zafiro-icons; + Zafiro-icons-Light = zafiro-icons; # 5/5. 5/5 adwaita coverage + + }; + }; +in { sane.programs.sane-theme = { - packageUnwrapped = null; + configOption = with lib; mkOption { + default = {}; + type = types.submodule { + options = { + all = mkOption { + default = false; + type = types.bool; + description = "install all known gtk themes (for testing)"; + }; + color-scheme = mkOption { + default = "default"; + type = types.str; + }; + cursor-theme = mkOption { + default = "Adwaita"; + type = types.str; + }; + gtk-theme = mkOption { + default = "Adwaita"; + type = types.str; + }; + icon-theme = mkOption { + default = "Adwaita"; + type = types.str; + }; + }; + }; + }; + packageUnwrapped = pkgs.symlinkJoin { + name = "sane-theme"; + paths = [ + 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); + }; + suggestedPrograms = [ "sane-backgrounds" ]; @@ -11,7 +317,33 @@ sandbox.enable = false; #< no binaries }; + environment.pathsToLink = lib.mkIf config.sane.programs.sane-backgrounds.enabled [ "/share/backgrounds" ]; + sane.programs.dconf.config.site = lib.mkIf config.sane.programs.sane-theme.enabled [ + (pkgs.writeTextFile { + name = "sane-theme"; + destination = "/etc/dconf/db/site.d/10_gtk_settings"; + text = '' + [org/gnome/desktop/interface] + color-scheme="${cfg.color-scheme}" + cursor-theme="${cfg.cursor-theme}" + gtk-theme="${cfg.gtk-theme}" + icon-theme="${cfg.icon-theme}" + ''; + }) + ]; + + # XXX(2024/02/05): set GSK_RENDERER=cairo to solve graphical edge-case on moby where some JPEGs would render as black! + # - repro by loading komikku and viewing images. some fail (particularly mangadex onimai), some work. + # - run `GSK_RENDERER=help loupe` to see options. + # - TODO: see if i can enable the `vulkan` GSK_RENDERER? + # - for more on GSK_RENDERER: + # XXX(2024/02/21): GSK_RENDERER=cairo breaks `delfin` (as does GSK_RENDERER=vulkan, when gtk4 is compiled with `vulkanSupport = true`) + # - perhaps it's best to let this be defaulted and set it ONLY where needed + # - upstream gtk recommends using mesa 24.0 (latest) specifically in response to the GSK renderers triggering new driver bugs, + # so maybe i can update that before re-enabling GSK_RENDERER anywhere else. + # environment.variables.GSK_RENDERER = "cairo"; + } diff --git a/hosts/common/programs/sway/default.nix b/hosts/common/programs/sway/default.nix index e50b674b..4e1512b1 100644 --- a/hosts/common/programs/sway/default.nix +++ b/hosts/common/programs/sway/default.nix @@ -238,24 +238,6 @@ in services.graphical-session.partOf = [ "default" ]; }; - - sane.gui.gtk = lib.mkIf cfg.enabled { - enable = lib.mkDefault true; - # gtk-theme = lib.mkDefault "Fluent-Light-compact"; - gtk-theme = lib.mkDefault "Tokyonight-Light-B"; - # icon-theme = lib.mkDefault "HighContrast"; # 4/5 coverage on moby - # icon-theme = lib.mkDefault "WhiteSur"; # 3.5/5 coverage on moby, but it provides a bunch for Fractal/Dino - # icon-theme = lib.mkDefault "Humanity"; # 3.5/5 coverage on moby, but it provides the bookmark icon - # icon-theme = lib.mkDefault "Paper"; # 3.5/5 coverage on moby, but it provides the bookmark icon - # icon-theme = lib.mkDefault "Nordzy"; # 3/5 coverage on moby - # icon-theme = lib.mkDefault "Fluent"; # 3/5 coverage on moby - # icon-theme = lib.mkDefault "Colloid"; # 3/5 coverage on moby - # icon-theme = lib.mkDefault "Qogir"; # 2.5/5 coverage on moby - # icon-theme = lib.mkDefault "rose-pine-dawn"; # 2.5/5 coverage on moby - # icon-theme = lib.mkDefault "Flat-Remix-Grey-Light"; # requires qtbase - }; - - # TODO: this can go elsewhere hardware.bluetooth.enable = lib.mkIf cfg.enabled true; services.blueman.enable = lib.mkIf cfg.enabled true; diff --git a/hosts/modules/gui/default.nix b/hosts/modules/gui/default.nix index c751bc23..0fe1cc0f 100644 --- a/hosts/modules/gui/default.nix +++ b/hosts/modules/gui/default.nix @@ -6,10 +6,6 @@ let }; in { - imports = [ - ./gtk.nix - ]; - sane.programs.gameApps = declPackageSet [ "animatch" "gnome-2048" diff --git a/hosts/modules/gui/gtk.nix b/hosts/modules/gui/gtk.nix deleted file mode 100644 index f63bb6b4..00000000 --- a/hosts/modules/gui/gtk.nix +++ /dev/null @@ -1,341 +0,0 @@ -# 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; - 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 - adapta-kde-theme - adementary-theme - adi1090x-plymouth-themes - adw-gtk3 - adwaita-qt - adwaita-qt6 - albatross - amarena-theme - amber-theme - ant-bloody-theme - ant-nebula-theme - ant-theme - arc-kde-theme - arc-theme - artim-dark - ayu-theme-gtk - base16-schemes - blackbird - breath-theme - canta-theme - catppuccin-gtk - catppuccin-kde - catppuccin-kvantum - catppuccin-plymouth - clearlooks-phenix - colloid-gtk-theme - colloid-kde - dracula-theme - e17gtk - equilux-theme - flat-remix-gnome - flat-remix-gtk - fluent-gtk-theme - graphite-gtk-theme - graphite-kde-theme - greybird - gruvbox-dark-gtk - gruvbox-gtk-theme - gruvterial-theme - juno-theme - kde-gruvbox - kde-rounded-corners - layan-gtk-theme - layan-kde - lightly-boehs - lightly-qt - lounge-gtk-theme - marwaita - marwaita-manjaro - marwaita-peppermint - marwaita-pop_os - marwaita-ubuntu - matcha-gtk-theme - materia-kde-theme - materia-theme - material-kwin-decoration - mojave-gtk-theme - nixos-bgrt-plymouth - nordic - numix-gtk-theme - numix-solarized-gtk-theme - numix-sx-gtk-theme - oceanic-theme - omni-gtk-theme - onestepback - openzone-cursors - orchis-theme - orion - palenight-theme - paper-gtk-theme - pitch-black - plano-theme - plasma-overdose-kde-theme - plata-theme - pop-gtk-theme - qogir-kde - qogir-theme - rose-pine-gtk-theme - shades-of-gray-theme - sierra-breeze-enhanced - sierra-gtk-theme - skeu - snowblind - solarc-gtk-theme - spacx-gtk-theme - stilo-themes - sweet - sweet-nova - theme-jade1 - theme-obsidian2 - theme-vertex - tokyo-night-gtk - ubuntu-themes - venta - vimix-gtk-themes - whitesur-gtk-theme - yaru-remix-theme - 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 = { - # find icon themes via `nix-locate share/icons/Adwaita` - # then determine the name here by building and `ls result/share/icons` - # this misses quite a few icon themes that aren't Adwaita-based. - # for those, try `nix-locate share/icons`? - # - # note that adwaita apps expect exactly the icon set provided by adwaita-icon-theme: - # - most icon themes are supplementary to adwaita, rather than a full replacement. - # - i.e. most themes, unless adwaita is also installed, will cause some missing icons inside apps. - # - that's probably why so many themes here also symlink Adwaita - # my accounting of "adwaita coverage" seems to be overoptimistic somehow - # maybe some apps bundle adwaita themselves - Adwaita = gnome.adwaita-icon-theme; - Arc = arc-icon-theme; # 4.5/5, meh icon for "vertical ellipsis". 3/5 adwaita coverage - elementary-xfce = elementary-xfce-icon-theme; # does not cross compile (2023/10/03) - elementary-xfce-dark = elementary-xfce-icon-theme; - elementary-xfce-darker = elementary-xfce-icon-theme; - elementary-xfce-darkest = elementary-xfce-icon-theme; - HighContrast = gnome.gnome-themes-extra; # 5/5. 5/5 adwaita coverage (4/5 cross) - Humanity = humanity-icon-theme; # 5/5. 5/5 adwaita coverage (3.5/5 cross, unique in which icons work) - Humanity-Dark = humanity-icon-theme; - kora = kora-icon-theme; - kora-light = kora-icon-theme; - kora-light-panel = kora-icon-theme; - kora-pgrey = kora-icon-theme; - Numix = numix-icon-theme; # 4/5, meh icon for "back". - Numix-Light = numix-icon-theme; - Paper = paper-icon-theme; # 4/5, weird icon for "info". 5/5 adwaita coverage (3.5 cross, highly unique in which icons work) - Paper-Mono-Dark = paper-icon-theme; - Pop = pop-icon-theme; # 5/5. 2/5 adwaita coverage - Tela-circle = tela-circle-icon-theme; - Tela-circle-dark = tela-circle-icon-theme; - Tela-circle-light = tela-circle-icon-theme; - - # themes which don't symlink Adwaita - BeautyLine = beauty-line-icon-theme; # 3.5/5. 4/5 adwaita coverage - breeze = breeze-icons; - breeze-dark = breeze-icons; - Mint-X = cinnamon.mint-x-icons; - # 10-ish other Mint-X variants omitted - # cinnamon.mint-l-icons; - # cinnamon.mint-y-icons; - Colloid = colloid-icon-theme; # 4.5/5, thin. 5/5 adwaita coverage (3/5 cross) - Colloid-dark = colloid-icon-theme; - Colloid-light = colloid-icon-theme; - bloom = deepin.deepin-icon-theme; - # 4 other deepin editions omitted - Dracula = dracula-icon-theme; # 4.5/5, a little thin. 4.5/5 adwaita coverage - Faba = faba-icon-theme; # 4/5. 4/5 adwaita coverage - Faba-Mono = faba-mono-icons; - Faba-Mono-Dark = faba-mono-icons; - Flat-Remix-Grey-Light = flat-remix-icon-theme; # 5/5. 5/5 adwaita coverage. builds on breeze, elementary - # 20-ish other flat-remix editions omitted - Fluent = fluent-icon-theme; # 5/5, though thin. 5/5 adwaita coverage (3/5 cross) - Fluent-dark = fluent-icon-theme; - gnome = gnome-icon-theme; # 3/5, icons are colored. 3/5 adwaita coverage - hicolor = hicolor-icon-theme; # 2/5 adwaita coverage; using this forces application builtin icons - la-capitaine-icon-theme = la-capitaine-icon-theme; # 4.5/5. 4.5/5 adwaita coverage. builds upon elementary - Luna = luna-icons; - # 5 other Luna variants omitted - maia = maia-icon-theme; # 3/5, icons are colored. 2/5 adwaita coverage - maia-dark = maia-icon-theme; - # mate.mate-icon-theme-faenza - mate = mate.mate-icon-theme; # 4.5/5. 4/5 adwaita coverage - menta = mate.mate-icon-theme; - Moka = moka-icon-theme; # 3/5, icons are colored. 3/5 adwaita coverage - # nixos-icons; - Nordzy = nordzy-icon-theme; # 5/5, thin. 5/5 adwaita coverage (3/5 cross) - # 10-ish Nordzy editions omitted - # numix-icon-theme-circle - # numix-icon-theme-square - oomox-gruvbox-dark = gruvbox-dark-icons-gtk; - Oranchelo = oranchelo-icon-theme; - # 3 other oranchelo editions omitted - elementary = pantheon.elementary-icon-theme; # 4.5/5. 4.5/5 adwaita coverage - Papirus = papirus-icon-theme; # 5/5. 5/5 adwaita coverage - # 4 other Papirus editions omitted - # papirus-maia-icon-theme - Qogir = qogir-icon-theme; # 5/5, thin. 5/5 adwaita coverage (2.5/5 cross) - # 5 other Qogir variants omitted - rose-pine = rose-pine-icon-theme; - rose-pine-dawn = rose-pine-icon-theme; # 5/5. 5/5 adwaita coverage (2.5 cross). looks a lot like Flat Remix... - rose-pine-moon = rose-pine-icon-theme; - SuperTinyIcons = super-tiny-icons; # 4/5. 2/5 adwaita coverage - Tango = tango-icon-theme; # 2/5. 3/5 adwaita coverage -- mostly just forwards to gnome-icon-theme - Tela = tela-icon-theme; # 5/5. 5/5 adwaita coverage - # 30-ish other Tela editions omitted - Vimix = vimix-icon-theme; - # 15-ish other Vimix editions omitted - WhiteSur = whitesur-icon-theme; # 4.5/5, thin & like iOS. 5/5 adwaita coverage (3.5/5 cross) - WhiteSur-dark = whitesur-icon-theme; - Rodent = xfce.xfce4-icon-theme; - Zafiro-icons-Dark = zafiro-icons; - Zafiro-icons-Light = zafiro-icons; # 5/5. 5/5 adwaita coverage - - }; - }; -in -{ - options = with lib; { - sane.gui.gtk.enable = mkOption { - default = false; - 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.sane.programs.dconf.config.site = lib.mkIf cfg.enable [ - (pkgs.writeTextFile { - name = "dconf-sway-settings"; - destination = "/etc/dconf/db/site.d/10_gtk_settings"; - text = '' - [org/gnome/desktop/interface] - 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; - config.environment.systemPackages = lib.mkIf cfg.enable ([ - 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)); - - # XXX(2024/02/05): set GSK_RENDERER=cairo to solve graphical edge-case on moby where some JPEGs would render as black! - # - repro by loading komikku and viewing images. some fail (particularly mangadex onimai), some work. - # - run `GSK_RENDERER=help loupe` to see options. - # - TODO: see if i can enable the `vulkan` GSK_RENDERER? - # - for more on GSK_RENDERER: - # XXX(2024/02/21): GSK_RENDERER=cairo breaks `delfin` (as does GSK_RENDERER=vulkan, when gtk4 is compiled with `vulkanSupport = true`) - # - perhaps it's best to let this be defaulted and set it ONLY where needed - # - upstream gtk recommends using mesa 24.0 (latest) specifically in response to the GSK renderers triggering new driver bugs, - # so maybe i can update that before re-enabling GSK_RENDERER anywhere else. - # environment.variables.GSK_RENDERER = "cairo"; -}