diff --git a/modules/nixos/graphical/default.nix b/modules/nixos/graphical/default.nix index 018dd77..85196de 100644 --- a/modules/nixos/graphical/default.nix +++ b/modules/nixos/graphical/default.nix @@ -3,6 +3,7 @@ imports = [ ./dunst.nix ./fonts.nix + ./gtk.nix ./i3.nix ./picom.nix ./polybar.nix diff --git a/modules/nixos/graphical/gtk.nix b/modules/nixos/graphical/gtk.nix new file mode 100644 index 0000000..ebce05b --- /dev/null +++ b/modules/nixos/graphical/gtk.nix @@ -0,0 +1,116 @@ +{ config, pkgs, lib, ... }: + +let + + # Based on: https://gitlab.com/rycee/nur-expressions/-/blob/7ae92e3497e1f1805fb849510120e2ee393018cd/pkgs/materia-theme/default.nix + gtkTheme = pkgs.stdenv.mkDerivation rec { + pname = "materia-custom"; + version = "20210322"; + src = pkgs.fetchFromGitHub { + owner = "nana-4"; + repo = "materia-theme"; + rev = "v${version}"; + sha256 = "1fsicmcni70jkl4jb3fvh7yv0v9jhb8nwjzdq8vfwn256qyk0xvl"; + }; + nativeBuildInputs = with pkgs; [ + bc + optipng + sassc + + (runCommandLocal "rendersvg" { } '' + mkdir -p $out/bin + ln -s ${resvg}/bin/resvg $out/bin/rendersvg + '') + ]; + + dontConfigure = true; + + # Fixes problem "Fontconfig error: Cannot load default config file" + FONTCONFIG_FILE = + pkgs.makeFontsConf { fontDirectories = [ pkgs.cantarell-fonts ]; }; + + # Derivation adds an extra # so we need to remove it from our colorscheme + theme = let stripHash = color: lib.strings.removePrefix "#" color; + in lib.generators.toKeyValue { } { + # Color selection copied from + # https://github.com/pinpox/nixos-home/blob/1cefe28c72930a0aed41c20d254ad4d193a3fa37/gtk.nix#L11 + ACCENT_BG = stripHash config.theme.colors.base0B; + ACCENT_FG = stripHash config.theme.colors.base00; + BG = stripHash config.theme.colors.base00; + BTN_BG = stripHash config.theme.colors.base02; + BTN_FG = stripHash config.theme.colors.base06; + FG = stripHash config.theme.colors.base05; + HDR_BG = stripHash config.theme.colors.base02; + HDR_BTN_BG = stripHash config.theme.colors.base01; + HDR_BTN_FG = stripHash config.theme.colors.base05; + HDR_FG = stripHash config.theme.colors.base05; + MATERIA_SURFACE = stripHash config.theme.colors.base01; + MATERIA_VIEW = stripHash config.theme.colors.base01; + MENU_BG = stripHash config.theme.colors.base02; + MENU_FG = stripHash config.theme.colors.base06; + SEL_BG = stripHash config.theme.colors.base04; + SEL_FG = stripHash config.theme.colors.base05; + TXT_BG = stripHash config.theme.colors.base02; + TXT_FG = stripHash config.theme.colors.base07; + WM_BORDER_FOCUS = stripHash config.theme.colors.base03; + WM_BORDER_UNFOCUS = stripHash config.theme.colors.base02; + + MATERIA_COLOR_VARIANT = if config.theme.dark then "dark" else "light"; + MATERIA_STYLE_COMPACT = "True"; + UNITY_DEFAULT_LAUNCHER_STYLE = "False"; + }; + + passAsFile = [ "theme" ]; + + postPatch = '' + patchShebangs . + + sed -e '/handle-horz-.*/d' -e '/handle-vert-.*/d' \ + -i ./src/gtk-2.0/assets.txt + ''; + + buildPhase = '' + export HOME="$NIX_BUILD_ROOT" + ./change_color.sh \ + -i False \ + -t $out/share/themes \ + -o "materia-custom" \ + "$themePath" + ''; + }; + +in { + + config = lib.mkIf config.gui.enable { + + home-manager.users.${config.user} = { + + gtk = let + gtkExtraConfig = { + gtk-application-prefer-dark-theme = config.theme.dark; + }; + in { + enable = true; + theme = { + name = "materia-custom"; + package = gtkTheme; + }; + gtk3.extraConfig = gtkExtraConfig; + gtk4.extraConfig = gtkExtraConfig; + }; + + }; + + # Make the login screen dark + services.xserver.displayManager.lightdm.greeters.gtk.theme = { + name = config.home-manager.users.${config.user}.gtk.theme.name; + package = gtkTheme; + }; + + environment.sessionVariables = { + GTK_THEME = config.home-manager.users.${config.user}.gtk.theme.name; + }; + + }; + +} diff --git a/modules/nixos/graphical/xorg.nix b/modules/nixos/graphical/xorg.nix index 91ed745..3ce47ee 100644 --- a/modules/nixos/graphical/xorg.nix +++ b/modules/nixos/graphical/xorg.nix @@ -36,9 +36,6 @@ enable = config.services.xserver.enable; background = config.wallpaper; - # Make the login screen dark - greeters.gtk.theme = gtkTheme; - # Show default user # Also make sure /var/lib/AccountsService/users/ has SystemAccount=false extraSeatDefaults = '' @@ -59,8 +56,6 @@ services.dbus.packages = [ pkgs.dconf ]; programs.dconf.enable = true; - environment.sessionVariables = { GTK_THEME = config.gtk.theme.name; }; - home-manager.users.${config.user} = { programs.fish.shellAliases = { @@ -68,17 +63,6 @@ pbpaste = "xclip -selection clipboard -out"; }; - gtk = let - gtkExtraConfig = { - gtk-application-prefer-dark-theme = config.theme.dark; - }; - in { - enable = true; - theme = gtkTheme; - gtk3.extraConfig = gtkExtraConfig; - gtk4.extraConfig = gtkExtraConfig; - }; - }; };