diff --git a/home/theme/default.nix b/home/theme/default.nix new file mode 100644 index 0000000..b56a253 --- /dev/null +++ b/home/theme/default.nix @@ -0,0 +1,26 @@ +{ + pkgs, + ... +}: { + imports = [ + ./gtk.nix + ./qt.nix + ]; + + home.pointerCursor = { + name = "Dracula-cursors"; + package = pkgs.dracula-theme; + size = 24; + + gtk.enable = true; + + x11 = { + enable = true; + defaultCursor = "Dracula-cursors"; + }; + }; + + xresources.extraConfig = + builtins.readFile + "${pkgs.dracula-theme}/xres"; +} diff --git a/home/theme/gradience.nix b/home/theme/gradience.nix new file mode 100644 index 0000000..14a0f58 --- /dev/null +++ b/home/theme/gradience.nix @@ -0,0 +1,62 @@ +{ + pkgs, + lib, + ... +}: { + gradience = rec { + # https://github.com/V-Mann-Nick/nix-home-manager/blob/main/gnome/theme.nix + package = pkgs.gradience.overrideAttrs (old: { + version = "0.8.0-beta1"; + propagatedBuildInputs = old.propagatedBuildInputs ++ [pkgs.python3Packages.libsass]; + src = pkgs.fetchgit { + url = "https://github.com/GradienceTeam/Gradience.git"; + rev = "06b83cee3b84916ab9812a47a84a28ca43c8e53f"; + sha256 = "sha256-gdY5QG0STLHY9bw5vI49rY6oNT8Gg8oxqHeEbqM4XfM="; + fetchSubmodules = true; + }; + patches = + (old.patches or []) + ++ [ + (pkgs.fetchpatch { + url = "https://github.com/V-Mann-Nick/nix-home-manager/raw/e68c661f21bf17323f8f0657f3af06c7f837cc07/gnome/gradience.patch"; + hash = "sha256-CcOd5KXjSSwYan8MwIJ4SBmmMXriBlOLYk5XFADLf6c="; + }) + ]; + }); + + # Stub the gnome-shell binary to satisfy the check without downloading Gnome + gnomeShellStub = pkgs.writeShellScriptBin "gnome-shell" '' + echo "GNOME Shell 45.2" + ''; + + presets = pkgs.fetchFromGitHub { + owner = "GradienceTeam"; + repo = "Community"; + rev = "b3628d28164d91b3be1cc4736cd77a19c5da4d74"; + hash = "sha256-tpS6LpPKedPBvI51bD/g299nYM7gY8C1+AmGza1FJ4w="; + }; + + build = pkgs.stdenv.mkDerivation { + name = "gradience-build"; + preset = lib.fileContents "${presets}/curated/dracula-dark.json"; + passAsFile = ["preset"]; + phases = ["buildPhase" "installPhase"]; + nativeBuildInputs = [gnomeShellStub]; + buildPhase = '' + export HOME=$TMPDIR + export XDG_CURRENT_DESKTOP=GNOME + mkdir -p $HOME/.config/presets + ${package}/bin/gradience-cli apply -p $presetPath --gtk both + ${package}/bin/gradience-cli gnome-shell -p $presetPath -v dark + ''; + installPhase = '' + mkdir -p $out + cp -r .config/gtk-4.0 $out/ + cp -r .config/gtk-3.0 $out/ + cp -r .local/share/themes/gradience-shell $out/ + ''; + }; + + shellTheme = "gradience-shell"; + }; +} diff --git a/home/theme/gtk.nix b/home/theme/gtk.nix new file mode 100644 index 0000000..9b944fe --- /dev/null +++ b/home/theme/gtk.nix @@ -0,0 +1,63 @@ +{ + pkgs, + lib, + config, + ... +}: let + inherit (config.vars) fontSize; + inherit (import ./gradience.nix {inherit pkgs lib;}) gradience; +in { + home.packages = with pkgs; [ + gnomeExtensions.user-themes + ]; + + # Gtk settings + gtk = { + enable = true; + + theme = { + name = "adw-gtk3"; + package = pkgs.adw-gtk3; + }; + + iconTheme = { + name = "Flat-Remix-Violet-Dark"; + package = pkgs.flat-remix-icon-theme; + }; + + font = { + name = "Sans Serif"; + size = fontSize; + }; + + gtk3 = { + extraConfig = { + "gtk-application-prefer-dark-theme" = 1; + }; + extraCss = builtins.readFile "${gradience.build}/gtk-3.0/gtk.css"; + }; + + gtk4 = { + extraConfig = { + "gtk-application-prefer-dark-theme" = 1; + }; + extraCss = builtins.readFile "${gradience.build}/gtk-4.0/gtk.css"; + }; + }; + + dconf.settings = { + "org/gnome/shell/extensions/user-theme" = { + name = gradience.shellTheme; + }; + "org/gnome/shell" = { + enabled-extensions = [pkgs.gnomeExtensions.user-themes.extensionUuid]; + }; + }; + + xdg.dataFile.shellTheme = { + enable = true; + recursive = true; + source = "${gradience.build}/gradience-shell"; + target = "themes/${gradience.shellTheme}"; + }; +} diff --git a/home/theme.nix b/home/theme/qt.nix similarity index 64% rename from home/theme.nix rename to home/theme/qt.nix index db4cf2b..4cee161 100644 --- a/home/theme.nix +++ b/home/theme/qt.nix @@ -6,50 +6,16 @@ }: let inherit (config.vars) fontSize; in { - home.pointerCursor = { - name = "Dracula-cursors"; - package = pkgs.dracula-theme; - size = 24; - - gtk.enable = true; - - x11 = { - enable = true; - defaultCursor = "Dracula-cursors"; - }; - }; - - gtk = { - enable = true; - theme = { - name = "Dracula"; - package = pkgs.dracula-theme; - }; - - iconTheme = { - name = "Flat-Remix-Violet-Dark"; - package = pkgs.flat-remix-icon-theme; - }; - - font = { - name = "Sans Serif"; - size = fontSize; - }; - }; - home.packages = with pkgs; [ libsForQt5.qtstyleplugin-kvantum qt6Packages.qtstyleplugin-kvantum ]; + qt = { enable = true; platformTheme = "qtct"; }; - xresources.extraConfig = - builtins.readFile - "${pkgs.dracula-theme}/xres"; - xdg.configFile = let floatFont = lib.strings.floatToString fontSize; qtconf = diff --git a/modules/greetd/ags.nix b/modules/greetd/ags.nix index a12a181..a23ae86 100644 --- a/modules/greetd/ags.nix +++ b/modules/greetd/ags.nix @@ -17,7 +17,7 @@ in { imports = [ ags.homeManagerModules.default ../../common/vars - ../../home/theme.nix + ../../home/theme ]; programs.ags.enable = true; diff --git a/modules/hyprland/style.nix b/modules/hyprland/style.nix index 5c8098e..31bd408 100644 --- a/modules/hyprland/style.nix +++ b/modules/hyprland/style.nix @@ -5,7 +5,7 @@ }: let inherit (config.vars) configDir; in { - imports = [../../home/theme.nix]; + imports = [../../home/theme]; home.packages = with pkgs; [swww];