nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{ lib
2, stdenvNoCC
3, fetchFromGitHub
4, fetchurl
5, glib
6, gnome-shell
7, gtk-engine-murrine
8, gtk_engines
9, inkscape
10, jdupes
11, optipng
12, sassc
13, which
14, buttonSizeVariants ? [] # default to standard
15, buttonVariants ? [] # default to all
16, colorVariants ? [] # default to all
17, opacityVariants ? [] # default to all
18, themeVariants ? [] # default to MacOS blue
19, wallpapers ? false
20, gitUpdater
21}:
22
23let
24 pname = "mojave-gtk-theme";
25in
26lib.checkListOfEnum "${pname}: button size variants" [ "standard" "small" ] buttonSizeVariants
27lib.checkListOfEnum "${pname}: button variants" [ "standard" "alt" ] buttonVariants
28lib.checkListOfEnum "${pname}: color variants" [ "light" "dark" ] colorVariants
29lib.checkListOfEnum "${pname}: opacity variants" [ "standard" "solid" ] opacityVariants
30lib.checkListOfEnum "${pname}: theme variants" [ "default" "blue" "purple" "pink" "red" "orange" "yellow" "green" "grey" "all" ] themeVariants
31
32stdenvNoCC.mkDerivation rec {
33 inherit pname;
34 version = "2022-10-21";
35
36 srcs = [
37 (fetchFromGitHub {
38 owner = "vinceliuice";
39 repo = pname;
40 rev = version;
41 sha256 = "sha256-0OqQXyv/fcbKTzvQUVIbUw5Y27hU1bzwx/0DelMEZIs=";
42 })
43 ]
44 ++
45 lib.optional wallpapers
46 (fetchurl {
47 url = "https://github.com/vinceliuice/Mojave-gtk-theme/raw/11741a99d96953daf9c27e44c94ae50a7247c0ed/macOS_Mojave_Wallpapers.tar.xz";
48 sha256 = "18zzkwm1kqzsdaj8swf0xby1n65gxnyslpw4lnxcx1rphip0rwf7";
49 })
50 ;
51
52 sourceRoot = "source";
53
54 nativeBuildInputs = [
55 glib
56 gnome-shell
57 inkscape
58 jdupes
59 optipng
60 sassc
61 which
62 ];
63
64 buildInputs = [
65 gtk_engines
66 ];
67
68 propagatedUserEnvPkgs = [
69 gtk-engine-murrine
70 ];
71
72 # These fixup steps are slow and unnecessary.
73 dontPatchELF = true;
74 dontRewriteSymlinks = true;
75
76 postPatch = ''
77 patchShebangs \
78 install.sh \
79 src/main/gtk-3.0/make_gresource_xml.sh \
80 src/main/gtk-4.0/make_gresource_xml.sh
81
82 for f in \
83 render-assets.sh \
84 src/assets/cinnamon/thumbnails/render-thumbnails.sh \
85 src/assets/gtk-2.0/render-assets.sh \
86 src/assets/gtk/common-assets/render-assets.sh \
87 src/assets/gtk/thumbnails/render-thumbnails.sh \
88 src/assets/gtk/windows-assets/render-alt-assets.sh \
89 src/assets/gtk/windows-assets/render-alt-small-assets.sh \
90 src/assets/gtk/windows-assets/render-assets.sh \
91 src/assets/gtk/windows-assets/render-small-assets.sh \
92 src/assets/metacity-1/render-assets.sh \
93 src/assets/xfwm4/render-assets.sh
94 do
95 patchShebangs $f
96 substituteInPlace $f \
97 --replace /usr/bin/inkscape ${inkscape}/bin/inkscape \
98 --replace /usr/bin/optipng ${optipng}/bin/optipng
99 done
100 '';
101
102 installPhase = ''
103 runHook preInstall
104
105 name= ./install.sh \
106 ${lib.optionalString (buttonSizeVariants != []) "--small " + builtins.toString buttonSizeVariants} \
107 ${lib.optionalString (buttonVariants != []) "--alt " + builtins.toString buttonVariants} \
108 ${lib.optionalString (colorVariants != []) "--color " + builtins.toString colorVariants} \
109 ${lib.optionalString (opacityVariants != []) "--opacity " + builtins.toString opacityVariants} \
110 ${lib.optionalString (themeVariants != []) "--theme " + builtins.toString themeVariants} \
111 --dest $out/share/themes
112
113 ${lib.optionalString wallpapers ''
114 install -D -t $out/share/wallpapers ../"macOS Mojave Wallpapers"/*
115 ''}
116
117 # Replace duplicate files with soft links to the first file in each
118 # set of duplicates, reducing the installed size in about 53%
119 jdupes --quiet --link-soft --recurse $out/share
120
121 runHook postInstall
122 '';
123
124 passthru.updateScript = gitUpdater { };
125
126 meta = with lib; {
127 description = "Mac OSX Mojave like theme for GTK based desktop environments";
128 homepage = "https://github.com/vinceliuice/Mojave-gtk-theme";
129 license = licenses.gpl3Only;
130 platforms = platforms.unix;
131 maintainers = [ maintainers.romildo ];
132 };
133}