emacsPackages.treemacs: replace python3 program (#364623)
[NixPkgs.git] / pkgs / by-name / gu / guix / package.nix
blobfeb26b3ea606d53629a9bcec6339d741722d7198
2   lib,
3   stdenv,
4   fetchurl,
5   fetchpatch,
6   fetchDebianPatch,
7   autoreconfHook,
8   disarchive,
9   git,
10   glibcLocales,
11   guile,
12   guile-avahi,
13   guile-gcrypt,
14   guile-git,
15   guile-gnutls,
16   guile-json,
17   guile-lib,
18   guile-lzlib,
19   guile-lzma,
20   guile-semver,
21   guile-ssh,
22   guile-sqlite3,
23   guile-zlib,
24   guile-zstd,
25   help2man,
26   makeWrapper,
27   pkg-config,
28   po4a,
29   scheme-bytestructures,
30   texinfo,
31   bzip2,
32   libgcrypt,
33   sqlite,
34   nixosTests,
36   stateDir ? "/var",
37   storeDir ? "/gnu/store",
38   confDir ? "/etc",
41 stdenv.mkDerivation rec {
42   pname = "guix";
43   version = "1.4.0";
45   src = fetchurl {
46     url = "mirror://gnu/guix/guix-${version}.tar.gz";
47     hash = "sha256-Q8dpy/Yy7wVEmsH6SMG6FSwzSUxqvH5HE3u6eyFJ+KQ=";
48   };
50   patches = [
51     (fetchpatch {
52       name = "CVE-2024-27297_1.patch";
53       url = "https://git.savannah.gnu.org/cgit/guix.git/patch/?id=8f4ffb3fae133bb21d7991e97c2f19a7108b1143";
54       hash = "sha256-xKo1h2uckC2pYHt+memekagfL6dWcF8gOnTOOW/wJUU=";
55     })
56     (fetchpatch {
57       name = "CVE-2024-27297_2.patch";
58       url = "https://git.savannah.gnu.org/cgit/guix.git/patch/?id=ff1251de0bc327ec478fc66a562430fbf35aef42";
59       hash = "sha256-f4KWDVrvO/oI+4SCUHU5GandkGtHrlaM1BWygM/Qlao=";
60     })
61     # see https://guix.gnu.org/en/blog/2024/build-user-takeover-vulnerability
62     (fetchDebianPatch {
63       inherit pname version;
64       debianRevision = "8";
65       patch = "security/0101-daemon-Sanitize-failed-build-outputs-prior-to-exposi.patch";
66       hash = "sha256-cbra/+K8+xHUJrCKRgzJCuhMBpzCSjgjosKAkJx7QIo=";
67     })
68     (fetchDebianPatch {
69       inherit pname version;
70       debianRevision = "8";
71       patch = "security/0102-daemon-Sanitize-successful-build-outputs-prior-to-ex.patch";
72       hash = "sha256-mOnlYtpIuYL+kDvSNuXuoDLJP03AA9aI2ALhap+0NOM=";
73     })
74   ];
76   postPatch = ''
77     sed nix/local.mk -i -E \
78       -e "s|^sysvinitservicedir = .*$|sysvinitservicedir = $out/etc/init.d|" \
79       -e "s|^openrcservicedir = .*$|openrcservicedir = $out/etc/openrc|"
80   '';
82   strictDeps = true;
84   nativeBuildInputs = [
85     autoreconfHook
86     disarchive
87     git
88     glibcLocales
89     guile
90     guile-avahi
91     guile-gcrypt
92     guile-git
93     guile-gnutls
94     guile-json
95     guile-lib
96     guile-lzlib
97     guile-lzma
98     guile-semver
99     guile-ssh
100     guile-sqlite3
101     guile-zlib
102     guile-zstd
103     help2man
104     makeWrapper
105     pkg-config
106     po4a
107     scheme-bytestructures
108     texinfo
109   ];
111   buildInputs = [
112     bzip2
113     guile
114     libgcrypt
115     sqlite
116   ];
118   propagatedBuildInputs = [
119     disarchive
120     guile-avahi
121     guile-gcrypt
122     guile-git
123     guile-gnutls
124     guile-json
125     guile-lib
126     guile-lzlib
127     guile-lzma
128     guile-semver
129     guile-ssh
130     guile-sqlite3
131     guile-zlib
132     guile-zstd
133     scheme-bytestructures
134   ];
136   configureFlags = [
137     "--with-store-dir=${storeDir}"
138     "--localstatedir=${stateDir}"
139     "--sysconfdir=${confDir}"
140     "--with-bash-completion-dir=$(out)/etc/bash_completion.d"
141   ];
143   enableParallelBuilding = true;
145   postInstall = ''
146     for f in $out/bin/*; do
147       wrapProgram $f \
148         --prefix GUILE_LOAD_PATH : "$out/${guile.siteDir}:$GUILE_LOAD_PATH" \
149         --prefix GUILE_LOAD_COMPILED_PATH : "$out/${guile.siteCcacheDir}:$GUILE_LOAD_COMPILED_PATH"
150     done
151   '';
153   passthru.tests = {
154     inherit (nixosTests) guix;
155   };
157   meta = with lib; {
158     description = "Functional package manager with a Scheme interface";
159     longDescription = ''
160       GNU Guix is a purely functional package manager for the GNU system, and a distribution thereof.
161       In addition to standard package management features, Guix supports
162       transactional upgrades and roll-backs, unprivileged package management,
163       per-user profiles, and garbage collection.
164       It provides Guile Scheme APIs, including high-level embedded
165       domain-specific languages (EDSLs), to describe how packages are built
166       and composed.
167       A user-land free software distribution for GNU/Linux comes as part of
168       Guix.
169       Guix is based on the Nix package manager.
170     '';
171     homepage = "http://www.gnu.org/software/guix";
172     changelog = "https://git.savannah.gnu.org/cgit/guix.git/plain/NEWS?h=v${version}";
173     license = licenses.gpl3Plus;
174     mainProgram = "guix";
175     maintainers = with maintainers; [
176       cafkafk
177       foo-dogsquared
178     ];
179     platforms = platforms.linux;
180   };