From 28a04f93b4e84d7fb4ecd7caec248961b21c15ce Mon Sep 17 00:00:00 2001 From: Daniel Thwaites Date: Tue, 15 Jun 2021 17:58:46 +0100 Subject: [PATCH] Update Materia theme to newest possible version See nana-4/materia-theme#589 for why Inkscape is pinned to an old version. --- modules/gtk.nix | 176 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 127 insertions(+), 49 deletions(-) diff --git a/modules/gtk.nix b/modules/gtk.nix index 3d844fcc..5f776aed 100644 --- a/modules/gtk.nix +++ b/modules/gtk.nix @@ -1,76 +1,154 @@ { pkgs, config, lib, ... }: let + # Pin to an older version of Inkscape + # See https://github.com/nana-4/materia-theme/issues/589 + inkscape-pkgs-source = pkgs.fetchFromGitHub { + owner = "NixOS"; + repo = "nixpkgs"; + rev = "ff8752a60361623bdb01f3534f12d503cc854c8e"; + sha256 = "u7lB6n2gOwVWnCE05FDBKQoHG3BqmPtYxVUvvBM8krc="; + }; + inkscape-pkgs = import inkscape-pkgs-source { + inherit (pkgs) system; + }; + materia = with pkgs; stdenvNoCC.mkDerivation { name = "stylix-materia"; src = fetchFromGitHub { owner = "nana-4"; repo = "materia-theme"; - rev = "c63ca3285c4b5fcd652d1f054745251c60d4c32e"; - sha256 = "Sje1j/k+g0MXP1wQi+KSVXIt1LQPeJ5KYJwfyxgmxPw="; + # Newer versions require dart-sass (not yet in nixpkgs) + rev = "81bbfe6ca61e0b372daa7fada4c2d85752925cfd"; + sha256 = "2Q4RUkrBs27J3Lp1hAzaPpg0gd/0z8zwQBAHhtGBYks="; }; - nativeBuildInputs = [ bc inkscape optipng sassc ]; - postPatch = "patchShebangs ."; - buildPhase = '' - export HOME="$NIX_BUILD_ROOT" - ./change_color.sh -t $out/share/themes -o stylix $themePath - ''; + nativeBuildInputs = [ + bc + inkscape-pkgs.inkscape + meson + ninja + optipng + sassc + ]; - # Colors - theme = with config.lib.stylix.colors; lib.generators.toKeyValue {} { - # Normal - BG = base00-hex; - FG = base05-hex; - # Accent - ACCENT_BG = base0F-hex; - ACCENT_FG = base00-hex; - # Buttons - BTN_BG = base01-hex; - BTN_FG = base05-hex; - # Header bar - HDR_BG = base01-hex; - HDR_FG = base05-hex; - # Header buttons - HDR_BTN_BG = base02-hex; - HDR_BTN_FG = base05-hex; - # Materia - MATERIA_SURFACE = base01-hex; - MATERIA_VIEW = base00-hex; - # Menu - MENU_BG = base01-hex; - MENU_FG = base05-hex; - # Selection - SEL_BG = base02-hex; - SEL_FG = base05-hex; - # Text - TXT_BG = base00-hex; - TXT_FG = base05-hex; - # Window manager border - WM_BORDER_FOCUS = base0A-hex; - WM_BORDER_UNFOCUS = base03-hex; - - MATERIA_STYLE_COMPACT = "True"; - UNITY_DEFAULT_LAUNCHER_STYLE = "False"; - }; - passAsFile = [ "theme" ]; - - # Fonts FONTCONFIG_FILE = makeFontsConf { fontDirectories = [ config.stylix.fonts.sansSerif.package ]; }; - configurePhase = let font = config.stylix.fonts.sansSerif.name; in '' + + postPatch = "patchShebangs ."; + + # Based on https://github.com/nana-4/materia-theme/blob/master/change_color.sh + preConfigure = + with config.lib.stylix.colors; + let font = config.stylix.fonts.sansSerif.name; + in '' + echo 'Setting font family' + sed 's/$font-family: .*;/$font-family: "${font}";/' \ -i src/gnome-shell/sass/_variables.scss sed 's/$font-family-large: .*;/$font-family-large: "${font}";/' \ -i src/gnome-shell/sass/_variables.scss + + echo 'Substituting colors' + + PATHLIST=( + './src/_colors.scss' + './src/chrome' + './src/cinnamon' + './src/cinnamon/assets' + './src/gnome-shell' + './src/gtk-2.0/assets.svg' + './src/gtk-2.0/assets-dark.svg' + './src/gtk-2.0/gtkrc' + './src/gtk-2.0/gtkrc-dark' + './src/gtk-2.0/gtkrc-light' + './src/gtk-3.0/assets.svg' + './src/metacity-1' + './src/unity' + './src/xfwm4' + ) + + mv src/_colors.scss.template src/_colors.scss + + for FILEPATH in "$PATHLIST"; do + find "$FILEPATH" -type f -not -name '_color-palette.scss' -exec sed -i'\' \ + -e 's/#121212/%BG%/g' \ + -e 's/#f9f9f9/%BG%/g' \ + -e 's/#000000/%FG%/g' \ + -e 's/#212121/%FG%/g' \ + -e 's/#eeeeee/%FG%/g' \ + -e 's/#ffffff/%FG%/g' \ + -e 's/#272727/%HDR_BG%/g' \ + -e 's/#424242/%HDR_BG%/g' \ + -e 's/#f0f0f0/%HDR_BG%/g' \ + -e 's/#1e1e1e/%HDR_BG2%/g' \ + -e 's/#303030/%HDR_BG2%/g' \ + -e 's/#ebebeb/%HDR_BG2%/g' \ + -e 's/#1d1d1d/%HDR_FG%/g' \ + -e 's/#e4e4e4/%HDR_FG%/g' \ + -e 's/#ffffff/%HDR_FG%/g' \ + -e 's/#565656/%INACTIVE_FG%/g' \ + -e 's/#a7a7a7/%INACTIVE_FG%/g' \ + -e 's/#c1c1c1/%INACTIVE_FG%/g' \ + -e 's/#2e2e2e/%MATERIA_SURFACE%/g' \ + -e 's/#ffffff/%MATERIA_SURFACE%/g' \ + -e 's/#1e1e1e/%MATERIA_VIEW%/g' \ + -e 's/#ffffff/%MATERIA_VIEW%/g' \ + -e 's/#1967d2/%SEL_BG%/g' \ + -e 's/#8ab4f8/%SEL_BG%/g' \ + -e 's/#8ab4f8/%SEL_BG%/g' \ + {} \; ; + + find "$FILEPATH" -type f -exec sed -i'\' \ + -e 's/%BG%/${base00-hash}/g' \ + -e 's/%BG2%/${base01-hash}/g' \ + -e 's/%FG%/${base05-hash}/g' \ + -e 's/%HDR_BG%/${base01-hash}/g' \ + -e 's/%HDR_BG2%/${base01-hash}/g' \ + -e 's/%HDR_BG3%/${base01-hash}/g' \ + -e 's/%HDR_FG%/${base05-hash}/g' \ + -e 's/%INACTIVE_FG%/${base04-hash}/g' \ + -e 's/%MATERIA_SURFACE%/${base01-hash}/g' \ + -e 's/%MATERIA_VIEW%/${base00-hash}/g' \ + -e 's/%SEL_BG%/${base02-hash}/g' \ + -e 's/%SEL_BG2%/${base03-hash}/g' \ + -e 's/%TERMINAL_COLOR4%/${base0A-hash}/g' \ + -e 's/%TERMINAL_COLOR5%/${base0D-hash}/g' \ + -e 's/%TERMINAL_COLOR9%/${base03-hash}/g' \ + -e 's/%TERMINAL_COLOR10%/${base09-hash}/g' \ + -e 's/%TERMINAL_COLOR11%/${base01-hash}/g' \ + -e 's/%TERMINAL_COLOR12%/${base02-hash}/g' \ + -e 's/%MATERIA_SELECTION_OPACITY%/0.32/g' \ + -e 's/%MATERIA_PANEL_OPACITY%/0.6/g' \ + {} \; ; + done ''; + + preBuild = '' + export HOME="$NIX_BUILD_ROOT" + cd .. + + echo 'Rendering GTK2 assets' + ./render-assets.sh gtk2-light + + echo 'Rendering GTK3 assets' + ./render-assets.sh gtk + + cd build + ''; + + mesonFlags = [ + "-Dcolors=default" + # TODO: Provide an option to choose compact/default + "-Dsizes=compact" + ]; }; theme = { package = materia; - name = "stylix"; + name = "Materia-compact"; }; # GTK will probably be unused without Xserver