forked from tribes/guix
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8b04431433 | |||
| c7b40a2181 | |||
| 5dca11e5e5 | |||
| f91286326a | |||
| 7e0ecb5da2 | |||
| 28b947938a | |||
| 3c9b8e0669 | |||
| 638b8e40fd | |||
| 35114531e3 | |||
| 02545e381e | |||
| 3fbe5e4f9f | |||
| 80be6360be | |||
| 410731c831 | |||
| 612f8c3606 | |||
| 3369f7d509 |
+3
-21
@@ -98,27 +98,9 @@
|
||||
((indent-tabs-mode . nil)
|
||||
|
||||
;; Emacs 28 changed the behavior of 'lisp-fill-paragraph', which causes the
|
||||
;; first line of package descriptions to extrude past 'fill-column', and
|
||||
;; somehow that is deemed more correct upstream (see:
|
||||
;; https://issues.guix.gnu.org/56197).
|
||||
(eval . (progn
|
||||
(require 'lisp-mode)
|
||||
(defun emacs27-lisp-fill-paragraph (&optional justify)
|
||||
(interactive "P")
|
||||
(or (fill-comment-paragraph justify)
|
||||
(let ((paragraph-start
|
||||
(concat paragraph-start
|
||||
"\\|\\s-*\\([(;\"]\\|\\s-:\\|`(\\|#'(\\)"))
|
||||
(paragraph-separate
|
||||
(concat paragraph-separate "\\|\\s-*\".*[,\\.]$"))
|
||||
(fill-column (if (and (integerp emacs-lisp-docstring-fill-column)
|
||||
(derived-mode-p 'emacs-lisp-mode))
|
||||
emacs-lisp-docstring-fill-column
|
||||
fill-column)))
|
||||
(fill-paragraph justify))
|
||||
;; Never return nil.
|
||||
t))
|
||||
(setq-local fill-paragraph-function #'emacs27-lisp-fill-paragraph)))
|
||||
;; first line of package descriptions to extrude past 'fill-column'. The
|
||||
;; following variable reverts its behavior to the previous one.
|
||||
(lisp-fill-paragraphs-as-doc-string nil)
|
||||
|
||||
;; This notably allows '(' in Paredit to not insert a space when the
|
||||
;; preceding symbol is one of these.
|
||||
|
||||
@@ -28,7 +28,6 @@ Tick a box by changing it from [ ] to [x].
|
||||
- [ ] i586-gnu
|
||||
|
||||
- Package **update**
|
||||
- Closure size increase after update (`./pre-inst-env guix size PACKAGE`).
|
||||
- Build status of direct dependents (`./pre-inst-env guix build -k -P1 PACKAGE ...`):
|
||||
```text
|
||||
|
||||
@@ -38,14 +37,13 @@ Tick a box by changing it from [ ] to [x].
|
||||
|
||||
```
|
||||
- Package **addition**
|
||||
- [ ] The packages includes tests when available.
|
||||
- [ ] Closure size given by `guix size`.
|
||||
- [ ] Fixed errors reported by `guix lint` (`./pre-inst-env guix lint PACKAGE ...`).
|
||||
- [ ] Verified cryptographic signature provided by upstream.
|
||||
- [ ] The packages don't use bundled copies of software.
|
||||
- [ ] Synopsis and description are written in conformance with [the guidelines](https://guix.gnu.org/manual/devel/en/html_node/Synopses-and-Descriptions.html).
|
||||
- [ ] Commit messages follow [the "ChangeLog" style](https://www.gnu.org/prep/standards/html_node/Change-Logs.html).
|
||||
- [ ] The change doesn't break `guix pull` (`guix pull --url=/path/to/your/checkout --profile=/tmp/guix.master --disable-authentication`).
|
||||
|
||||
- [ ] Commit messages follow [the "ChangeLog" style](https://www.gnu.org/prep/standards/html_node/Change-Logs.html).
|
||||
- [ ] The change doesn't break `guix pull` (`guix pull --url=/path/to/your/checkout --profile=/tmp/guix.master --disable-authentication`).
|
||||
|
||||
- Successfully cross-compiled to the following target(s) (this is optional):
|
||||
- [ ] x86_64-linux-gnu
|
||||
|
||||
@@ -68,7 +68,6 @@
|
||||
/doc/stamp-vti
|
||||
/doc/version.texi
|
||||
/doc/version-*.texi
|
||||
/etc/apparmor.d/tunables/guix
|
||||
/etc/committer.scm
|
||||
/etc/gnu-store.mount
|
||||
/etc/guix-daemon.cil
|
||||
|
||||
@@ -23,8 +23,6 @@
|
||||
(name "cbaines"))
|
||||
("3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5"
|
||||
(name "civodul"))
|
||||
("CCB8 1842 F9D7 058E CD67 377A BF5C DF4D F6BF 6682"
|
||||
(name "csantosb"))
|
||||
("510A 8628 E2A7 7678 8F8C 709C 4BC0 2592 5FF8 F4D3"
|
||||
(name "cwebber"))
|
||||
(;; primary: "295A F991 6F46 F8A1 34B0 29DA 8086 3842 F0FE D83B"
|
||||
@@ -36,8 +34,6 @@
|
||||
(name "efraim"))
|
||||
("5DBE 23D3 9053 6526 7F8C C76A FDB9 52BD 3F73 56D6"
|
||||
(name "ekaitz"))
|
||||
("50E1 7BE0 D210 C883 D675 3150 4A3D 07EF D05C 4045"
|
||||
(name "fishinthecalculator"))
|
||||
(;; primary: "D1BD 1EB7 B655 AECE 0BA7 8F94 4940 7E7E 89CA 9B07"
|
||||
"0807 AC76 DFE8 4303 6D5F 5879 F51D 4A16 DCEE 6FA7"
|
||||
(name "futurile"))
|
||||
@@ -49,7 +45,7 @@
|
||||
(;; primary: "220F 98D9 5E86 204C 0036 DA7B 6DEC 4360 408B 4185"
|
||||
"F4C2 D1DF 3FDE EA63 D1D3 0776 ACC6 6D09 CA52 8292"
|
||||
(name "hako"))
|
||||
("3D58 BE78 5C1B E400 E214 0755 43F4 B499 3A1F 9D20"
|
||||
("B943 509D 633E 80DD 27FC 4EED 634A 8DFF D3F6 31DF"
|
||||
(name "htgoebel"))
|
||||
( ;; primary: "FECD 9EBA FAAD 1831 7E05 DAC0 E55F 4198 D2A7 0CD7"
|
||||
"6980 A9B9 5202 AA11 EB1D 8922 8499 AC88 F1A7 1CF2"
|
||||
@@ -102,9 +98,6 @@
|
||||
;; <https://lists.gnu.org/archive/html/guix-devel/2020-01/msg00499.html>.
|
||||
"1EFB 0909 1F17 D28C CBF9 B13A 53D4 57B2 D636 EE82"
|
||||
(name "roptat"))
|
||||
(;; primary: "3AC5 5D0E 1DA7 AF44 3868 11EE 213D C372 0E7A 023C"
|
||||
"6B51 071A 0FB1 52AD ED93 6360 0322 7982 69E4 71C3"
|
||||
(name "Rutherther"))
|
||||
("EAD1 89E4 799B 5E5E B20A 2A19 CDBC 0BD9 5943 A706"
|
||||
(name "SameExpert"))
|
||||
(;; primary: "D6B0 C593 DA8C 5EDC A44C 7A58 C336 91F7 1188 B004"
|
||||
|
||||
@@ -30,7 +30,6 @@ Eric Bavier <bavier@posteo.net> <bavier@member.fsf.org>
|
||||
Eric Dvorsak <eric@dvorsak.fr> <yenda1@gmail.com>
|
||||
Evgeny Pisemsky <mail@pisemsky.site> <evgeny@pisemsky.com>
|
||||
George Clemmer <myglc2@gmail.com>
|
||||
Giacomo Leidi <therewasa@fishinthecalculator.me> <goodoldpaul@autistici.org>
|
||||
ison <ison@airmail.cc> <ison111@protonmail.com>
|
||||
Ivan Vilata i Balaguer <ivan@selidor.net>
|
||||
Jakob L. Kreuze <zerodaysfordays@sdf.org> <zerodaysfordays@sdf.lonestar.org>
|
||||
@@ -59,7 +58,6 @@ Mathieu Othacehe <mathieu.othacehe@parrot.com>
|
||||
Mathieu Othacehe <othacehe@gnu.org>
|
||||
Matthew James Kraai <kraai@ftbfs.org>
|
||||
Maxim Cournoyer <maxim@guixotic.coop> <maxim.cournoyer@gmail.com>
|
||||
Nguyễn Gia Phong <cnx@loang.net> <mcsinyx@disroot.org>
|
||||
Nikita Karetnikov <nikita@karetnikov.org> <nikita.karetnikov@gmail.com>
|
||||
nikita <nikita@n0.is>
|
||||
nikita <nikita@n0.is> ng0 <ng0@n0.is>
|
||||
|
||||
+5
-120
@@ -10,32 +10,11 @@ gnu/packages/machine-learning\.scm @guix/ai
|
||||
|
||||
gnu/packages/audio\.scm @guix/audio
|
||||
gnu/packages/fluidplug\.scm @guix/audio
|
||||
gnu/packages/music\.scm @guix/audio
|
||||
gnu/packages/xiph\.scm @guix/audio
|
||||
|
||||
gnu/packages/elixir(-.+|)\.scm$ @guix/beam
|
||||
guix/build/mix-build-system\.scm @guix/beam
|
||||
guix/build-system/mix\.scm @guix/beam
|
||||
gnu/packages/erlang(-.+|)\.scm$ @guix/beam
|
||||
guix/build/rebar-build-system\.scm @guix/beam
|
||||
guix/build-system/rebar\.scm @guix/beam
|
||||
guix/import/hexpm\.scm @guix/beam
|
||||
guix/scripts/import/hexpm\.scm @guix/beam
|
||||
|
||||
gnu/packages/bioinformatics\.scm @guix/bioinformatics
|
||||
|
||||
gnu/packages/bootstrap\.scm @guix/bootstrap
|
||||
gnu/packages/commencement\.scm @guix/bootstrap
|
||||
gnu/packages/mes\.scm @guix/bootstrap
|
||||
|
||||
gnu/packages/assembly\.scm @guix/build-tools
|
||||
gnu/packages/autogen\.scm @guix/build-tools
|
||||
gnu/packages/autotools\.scm @guix/build-tools
|
||||
gnu/packages/bison\.scm @guix/build-tools
|
||||
gnu/packages/m4\.scm @guix/build-tools
|
||||
gnu/packages/oyacc\.scm @guix/build-tools
|
||||
gnu/packages/re2c\.scm @guix/build-tools
|
||||
|
||||
gnu/build-system/cmake\.scm @guix/cpp
|
||||
gnu/build/cmake-build-system\.scm @guix/cpp
|
||||
gnu/packages/c\.scm @guix/cpp
|
||||
@@ -44,7 +23,6 @@ gnu/packages/cpp\.scm @guix/cpp
|
||||
gnu/packages/ninja\.scm @guix/cpp
|
||||
gnu/packages/valgrind\.scm @guix/cpp
|
||||
|
||||
etc/teams\.scm @guix/core
|
||||
guix/avahi\.scm @guix/core
|
||||
guix/base16\.scm @guix/core
|
||||
guix/base32\.scm @guix/core
|
||||
@@ -105,7 +83,6 @@ guix/quirks\.scm @guix/core
|
||||
guix/read-print\.scm @guix/core
|
||||
guix/records\.scm @guix/core
|
||||
guix/remote\.scm @guix/core
|
||||
guix/remote-procedures\.scm @guix/core
|
||||
guix/repl\.scm @guix/core
|
||||
guix/search-paths\.scm @guix/core
|
||||
guix/self\.scm @guix/core
|
||||
@@ -141,17 +118,6 @@ guix/build/gnu-build-system\.scm @guix/core-packages
|
||||
guix/build/utils\.scm @guix/core-packages
|
||||
guix/build-system/gnu\.scm @guix/core-packages
|
||||
|
||||
gnu/packages/(.*-|)crypto\.scm$ @guix/crypto
|
||||
gnu/packages/cryptsetup\.scm @guix/crypto
|
||||
gnu/packages/cybersecurity\.scm @guix/crypto
|
||||
gnu/packages/gnupg\.scm @guix/crypto
|
||||
gnu/packages/nettle\.scm @guix/crypto
|
||||
gnu/packages/password-utils\.scm @guix/crypto
|
||||
gnu/packages/security-token\.scm @guix/crypto
|
||||
gnu/packages/ssh\.scm @guix/crypto
|
||||
gnu/packages/tls\.scm @guix/crypto
|
||||
gnu/packages/vpn\.scm @guix/crypto
|
||||
|
||||
gnu/packages/debian\.scm @guix/debian
|
||||
|
||||
\.texi$ @guix/documentation
|
||||
@@ -161,7 +127,6 @@ gnu/system/examples/lightweight-desktop\.tmpl @guix/documentation
|
||||
gnu/system/examples/desktop\.tmpl @guix/documentation
|
||||
|
||||
gnu/packages/electronics\.scm @guix/electronics
|
||||
gnu/packages/hdl\.scm @guix/electronics
|
||||
gnu/packages/libftdi\.scm @guix/electronics
|
||||
gnu/packages/engineering\.scm @guix/electronics
|
||||
gnu/packages/flashing-tools\.scm @guix/electronics
|
||||
@@ -186,8 +151,6 @@ gnu/packages/game-development\.scm @guix/games
|
||||
gnu/packages/luanti\.scm @guix/games
|
||||
gnu/packages/esolangs\.scm @guix/games
|
||||
gnu/packages/motti\.scm @guix/games
|
||||
gnu/services/games\.scm @guix/games
|
||||
gnu/tests/games\.scm @guix/games
|
||||
guix/build/luanti-build-system\.scm @guix/games
|
||||
|
||||
etc/teams/gnome @guix/gnome
|
||||
@@ -195,7 +158,6 @@ gnu/packages/glib\.scm @guix/gnome
|
||||
gnu/packages/gstreamer\.scm @guix/gnome
|
||||
gnu/packages/gtk\.scm @guix/gnome
|
||||
gnu/packages/gnome\.scm @guix/gnome
|
||||
gnu/packages/gnome-circle\.scm @guix/gnome
|
||||
gnu/packages/gnome-xyz\.scm @guix/gnome
|
||||
gnu/packages/webkit\.scm @guix/gnome
|
||||
gnu/services/desktop\.scm @guix/gnome
|
||||
@@ -212,18 +174,6 @@ guix/import/go\.scm @guix/go
|
||||
guix/scripts/import/go\.scm @guix/go
|
||||
tests/import/go\.scm @guix/go
|
||||
|
||||
gnu/packages/guile\.scm @guix/guile
|
||||
gnu/packages/guile-wm\.scm @guix/guile
|
||||
gnu/packages/guile-xyz\.scm @guix/guile
|
||||
guix/build-system/guile\.scm @guix/guile
|
||||
guix/build/guile-build-system\.scm @guix/guile
|
||||
|
||||
gnu/packages/hare\.scm @guix/hare
|
||||
gnu/packages/hare-apps\.scm @guix/hare
|
||||
gnu/packages/hare-xyz\.scm @guix/hare
|
||||
guix/build-system/hare\.scm @guix/hare
|
||||
guix/build/hare-build-system\.scm @guix/hare
|
||||
|
||||
gnu/packages/dhall\.scm @guix/haskell
|
||||
gnu/packages/haskell(-.+|)\.scm$ @guix/haskell
|
||||
gnu/packages/purescript\.scm @guix/haskell
|
||||
@@ -240,12 +190,7 @@ tests/home-import\.scm @guix/home
|
||||
tests/home-services\.scm @guix/home
|
||||
|
||||
gnu/packages/mpi\.scm @guix/hpc
|
||||
gnu/packages/oneapi\.scm @guix/hpc
|
||||
gnu/packages/opencl\.scm @guix/hpc
|
||||
gnu/packages/parallel\.scm @guix/hpc
|
||||
gnu/packages/rocm\.scm @guix/hpc
|
||||
gnu/packages/rocm-tools\.scm @guix/hpc
|
||||
gnu/packages/rocm-libs\.scm @guix/hpc
|
||||
gnu/packages/sycl\.scm @guix/hpc
|
||||
gnu/packages/tbb\.scm @guix/hpc
|
||||
gnu/packages/vulkan\.scm @guix/hpc
|
||||
@@ -258,17 +203,13 @@ gnu/packages/hurd\.scm @guix/hurd
|
||||
|
||||
gnu/installer(\.scm$|/) @guix/installer
|
||||
|
||||
gnu/packages/clojure\.scm @guix/java
|
||||
gnu/packages/java(-.+|)\.scm$ @guix/java
|
||||
gnu/packages/maven(-.+|)\.scm$ @guix/java
|
||||
guix/build/ant-build-system\.scm @guix/java
|
||||
guix/build/clojure-build-system\.scm @guix/java
|
||||
guix/build/clojure-utils\.scm @guix/java
|
||||
guix/build/java-utils\.scm @guix/java
|
||||
guix/build/maven-build-system\.scm @guix/java
|
||||
guix/build/maven/ @guix/java
|
||||
guix/build-system/ant\.scm @guix/java
|
||||
guix/build-system/clojure\.scm @guix/java
|
||||
guix/build-system/maven\.scm @guix/java
|
||||
|
||||
gnu/packages/node-xyz\.scm @guix/javascript
|
||||
@@ -301,12 +242,8 @@ gnu/packages/fcitx5\.scm @guix/localization
|
||||
gnu/packages/fonts\.scm @guix/localization
|
||||
gnu/packages/ibus\.scm @guix/localization
|
||||
|
||||
gnu/packages/lua\.scm @guix/lua
|
||||
gnu/packages/luanti\.scm @guix/lua
|
||||
|
||||
gnu/packages/lxqt\.scm @guix/lxqt
|
||||
|
||||
gnu/packages/mate\.scm @guix/mate
|
||||
|
||||
gnu/build/icecat-extension\.scm @guix/mozilla
|
||||
gnu/packages/browser-extensions\.scm @guix/mozilla
|
||||
@@ -324,39 +261,18 @@ guix/import/opam\.scm @guix/ocaml
|
||||
guix/scripts/import/opam\.scm @guix/ocaml
|
||||
tests/import/opam\.scm @guix/ocaml
|
||||
|
||||
gnu/packages/perl(-.+|)\.scm$ @guix/perl
|
||||
guix/build/perl-build-system\.scm @guix/perl
|
||||
guix/build/rakudo-build-system\.scm @guix/perl
|
||||
guix/build-system/perl\.scm @guix/perl
|
||||
guix/build-system/rakudo\.scm @guix/perl
|
||||
guix/import/cpan\.scm @guix/perl
|
||||
guix/scripts/import/cpan\.scm @guix/perl
|
||||
|
||||
gnu/packages/django\.scm @guix/python
|
||||
gnu/packages/jupyter\.scm @guix/python
|
||||
gnu/packages/python(-.+|)\.scm$ @guix/python
|
||||
gnu/packages/sphinx\.scm @guix/python
|
||||
gnu/packages/tryton\.scm @guix/python
|
||||
guix/build-system/pyproject\.scm @guix/python
|
||||
guix/build-system/python\.scm @guix/python
|
||||
guix/build/pyproject-build-system\.scm @guix/python
|
||||
guix/build-system/pyproject\.scm @guix/python
|
||||
guix/build/python-build-system\.scm @guix/python
|
||||
guix/build/toml\.scm @guix/python
|
||||
guix/build-system/python\.scm @guix/python
|
||||
guix/import/pypi\.scm @guix/python
|
||||
guix/scripts/import/pypi\.scm @guix/python
|
||||
tests/import/pypi\.scm @guix/python
|
||||
tests/toml\.scm @guix/python
|
||||
|
||||
gnu/ci\.scm @guix/qa-packages
|
||||
gnu/packages/benchmark\.scm @guix/qa-packages
|
||||
gnu/packages/check\.scm @guix/qa-packages
|
||||
gnu/packages/ci\.scm @guix/qa-packages
|
||||
gnu/packages/code\.scm @guix/qa-packages
|
||||
gnu/packages/debug\.scm @guix/qa-packages
|
||||
gnu/packages/dezyne\.scm @guix/qa-packages
|
||||
gnu/packages/libunwind\.scm @guix/qa-packages
|
||||
gnu/services/ci\.scm @guix/qa-packages
|
||||
gnu/tests/ci\.scm @guix/qa-packages
|
||||
|
||||
gnu/packages/qt\.scm @guix/qt
|
||||
guix/build-system/qt\.scm @guix/qt
|
||||
@@ -375,12 +291,11 @@ gnu/packages/chez\.scm @guix/racket
|
||||
gnu/packages/racket\.scm @guix/racket
|
||||
|
||||
NEWS @guix/release
|
||||
etc/manifests/release-minimal\.scm @guix/release
|
||||
etc/manifests/release-desktop\.scm @guix/release
|
||||
etc/manifests/release\.scm @guix/release
|
||||
|
||||
gnu/packages/diffoscope\.scm @guix/reproduciblebuilds
|
||||
|
||||
gnu/packages/(ruby)(-.+|)\.scm$ @guix/ruby
|
||||
gnu/packages/ruby\.scm @guix/ruby
|
||||
guix/build/ruby-build-system\.scm @guix/ruby
|
||||
guix/build-system/ruby\.scm @guix/ruby
|
||||
guix/import/gem\.scm @guix/ruby
|
||||
@@ -406,7 +321,6 @@ gnu/packages/graph\.scm @guix/science
|
||||
gnu/packages/lean\.scm @guix/science
|
||||
gnu/packages/maths\.scm @guix/science
|
||||
gnu/packages/medical\.scm @guix/science
|
||||
gnu/packages/physics\.scm @guix/science
|
||||
gnu/packages/sagemath\.scm @guix/science
|
||||
gnu/packages/statistics\.scm @guix/science
|
||||
|
||||
@@ -419,7 +333,7 @@ gnu/packages/antivirus\.scm @guix/sysadmin
|
||||
gnu/packages/apparmor\.scm @guix/sysadmin
|
||||
gnu/packages/authentication\.scm @guix/sysadmin
|
||||
gnu/packages/cluster\.scm @guix/sysadmin
|
||||
gnu/packages/configuration-management\.scm @guix/sysadmin
|
||||
gnu/packages/configuration-management @guix/sysadmin
|
||||
gnu/packages/databases\.scm @guix/sysadmin
|
||||
gnu/packages/distributed\.scm @guix/sysadmin
|
||||
gnu/packages/dns\.scm @guix/sysadmin
|
||||
@@ -432,32 +346,12 @@ gnu/packages/openldap\.scm @guix/sysadmin
|
||||
gnu/packages/openstack\.scm @guix/sysadmin
|
||||
gnu/packages/prometheus\.scm @guix/sysadmin
|
||||
gnu/packages/rdesktop\.scm @guix/sysadmin
|
||||
gnu/packages/samba\.scm @guix/sysadmin
|
||||
gnu/packages/selinux\.scm @guix/sysadmin
|
||||
gnu/packages/storage\.scm @guix/sysadmin
|
||||
gnu/packages/task-runners\.scm @guix/sysadmin
|
||||
gnu/packages/terraform\.scm @guix/sysadmin
|
||||
gnu/packages/virtualization\.scm @guix/sysadmin
|
||||
gnu/packages/vnc\.scm @guix/sysadmin
|
||||
gnu/services/admin\.scm @guix/sysadmin
|
||||
gnu/services/authentication\.scm @guix/sysadmin
|
||||
gnu/services/databases\.scm @guix/sysadmin
|
||||
gnu/services/dns\.scm @guix/sysadmin
|
||||
gnu/services/high-availability\.scm @guix/sysadmin
|
||||
gnu/services/kerberos\.scm @guix/sysadmin
|
||||
gnu/services/monitoring\.scm @guix/sysadmin
|
||||
gnu/services/nfs\.scm @guix/sysadmin
|
||||
gnu/services/samba\.scm @guix/sysadmin
|
||||
gnu/services/virtualization\.scm @guix/sysadmin
|
||||
gnu/services/vnc\.scm @guix/sysadmin
|
||||
gnu/tests/databases\.scm @guix/sysadmin
|
||||
gnu/tests/dns\.scm @guix/sysadmin
|
||||
gnu/tests/high-availability\.scm @guix/sysadmin
|
||||
gnu/tests/monitoring\.scm @guix/sysadmin
|
||||
gnu/tests/nfs\.scm @guix/sysadmin
|
||||
gnu/tests/samba\.scm @guix/sysadmin
|
||||
gnu/tests/virtualization\.scm @guix/sysadmin
|
||||
gnu/tests/vnc\.scm @guix/sysadmin
|
||||
|
||||
gnu/build/jami-service\.scm @guix/telephony
|
||||
gnu/packages/jami\.scm @guix/telephony
|
||||
@@ -479,15 +373,6 @@ tests/import/texlive\.scm @guix/tex
|
||||
etc/news\.scm @guix/translations
|
||||
po/ @guix/translations
|
||||
|
||||
gnu/packages/version-control\.scm @guix/vcs
|
||||
gnu/services/version-control\.scm @guix/vcs
|
||||
gnu/tests/version-control\.scm @guix/vcs
|
||||
guix/build/bzr\.scm @guix/vcs
|
||||
guix/build/cvs\.scm @guix/vcs
|
||||
guix/build/git\.scm @guix/vcs
|
||||
guix/build/hg\.scm @guix/vcs
|
||||
guix/build/svn\.scm @guix/vcs
|
||||
|
||||
gnu/packages/xfce\.scm @guix/xfce
|
||||
|
||||
gnu/packages/zig\.scm @guix/zig
|
||||
|
||||
+88
-97
@@ -1,5 +1,5 @@
|
||||
# GNU Guix --- Functional package management for GNU
|
||||
# Copyright © 2012-2026 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2012-2025 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2013 Andreas Enge <andreas@enge.fr>
|
||||
# Copyright © 2015, 2017 Alex Kost <alezost@gmail.com>
|
||||
# Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
|
||||
@@ -14,7 +14,7 @@
|
||||
# Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
|
||||
# Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
|
||||
# Copyright © 2019, 2023 Efraim Flashner <efraim@flashner.co.il>
|
||||
# Copyright © 2020, 2021, 2023, 2025, 2026 Maxim Cournoyer <maxim@guixotic.coop>
|
||||
# Copyright © 2020, 2021, 2023 Maxim Cournoyer <maxim@guixotic.coop>
|
||||
# Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
|
||||
# Copyright © 2021 Andrew Tropin <andrew@trop.in>
|
||||
# Copyright © 2023 Clément Lassieur <clement@lassieur.org>
|
||||
@@ -87,7 +87,6 @@ MODULES = \
|
||||
guix/base64.scm \
|
||||
guix/ci.scm \
|
||||
guix/cpio.scm \
|
||||
guix/amd-gpu.scm \
|
||||
guix/cpu.scm \
|
||||
guix/deprecation.scm \
|
||||
guix/docker.scm \
|
||||
@@ -117,7 +116,6 @@ MODULES = \
|
||||
guix/narinfo.scm \
|
||||
guix/derivations.scm \
|
||||
guix/grafts.scm \
|
||||
guix/remote-procedures.scm \
|
||||
guix/repl.scm \
|
||||
guix/rpm.scm \
|
||||
guix/transformations.scm \
|
||||
@@ -172,7 +170,6 @@ MODULES = \
|
||||
guix/build-system/gnu.scm \
|
||||
guix/build-system/go.scm \
|
||||
guix/build-system/guile.scm \
|
||||
guix/build-system/hare.scm \
|
||||
guix/build-system/haskell.scm \
|
||||
guix/build-system/julia.scm \
|
||||
guix/build-system/linux-module.scm \
|
||||
@@ -243,7 +240,6 @@ MODULES = \
|
||||
guix/build/gnu-build-system.scm \
|
||||
guix/build/gnu-dist.scm \
|
||||
guix/build/guile-build-system.scm \
|
||||
guix/build/hare-build-system.scm \
|
||||
guix/build/luanti-build-system.scm \
|
||||
guix/build/maven-build-system.scm \
|
||||
guix/build/minetest-build-system.scm \
|
||||
@@ -269,6 +265,7 @@ MODULES = \
|
||||
guix/build/kconfig.scm \
|
||||
guix/build/linux-module-build-system.scm \
|
||||
guix/build/store-copy.scm \
|
||||
guix/build/json.scm \
|
||||
guix/build/pack.scm \
|
||||
guix/build/utils.scm \
|
||||
guix/build/union.scm \
|
||||
@@ -297,7 +294,6 @@ MODULES = \
|
||||
guix/build/toml.scm \
|
||||
guix/search-paths.scm \
|
||||
guix/packages.scm \
|
||||
guix/import/apache.scm \
|
||||
guix/import/cabal.scm \
|
||||
guix/import/composer.scm \
|
||||
guix/import/cpan.scm \
|
||||
@@ -378,7 +374,6 @@ MODULES = \
|
||||
guix/scripts/import/luanti.scm \
|
||||
guix/scripts/import/minetest.scm \
|
||||
guix/scripts/import/npm-binary.scm \
|
||||
guix/scripts/import/nuget.scm \
|
||||
guix/scripts/import/opam.scm \
|
||||
guix/scripts/import/pypi.scm \
|
||||
guix/scripts/import/stackage.scm \
|
||||
@@ -455,12 +450,11 @@ AUX_FILES = \
|
||||
gnu/packages/aux-files/findclass.php \
|
||||
gnu/packages/aux-files/guix.vim \
|
||||
gnu/packages/aux-files/guix-nvim.vim \
|
||||
gnu/packages/aux-files/linux-libre/6.19-arm64.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.19-i686.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.19-x86_64.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.18-arm64.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.18-i686.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.18-x86_64.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.16-arm.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.16-arm64.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.16-riscv.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.16-x86_64.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.16-i686.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.12-arm.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.12-arm64.conf \
|
||||
gnu/packages/aux-files/linux-libre/6.12-i686.conf \
|
||||
@@ -482,6 +476,10 @@ AUX_FILES = \
|
||||
gnu/packages/aux-files/linux-libre/5.10-arm64.conf \
|
||||
gnu/packages/aux-files/linux-libre/5.10-i686.conf \
|
||||
gnu/packages/aux-files/linux-libre/5.10-x86_64.conf \
|
||||
gnu/packages/aux-files/linux-libre/5.4-arm.conf \
|
||||
gnu/packages/aux-files/linux-libre/5.4-arm64.conf \
|
||||
gnu/packages/aux-files/linux-libre/5.4-i686.conf \
|
||||
gnu/packages/aux-files/linux-libre/5.4-x86_64.conf \
|
||||
gnu/packages/aux-files/ovmf/51-edk2-ovmf-2m-raw-x64-nosb.json \
|
||||
gnu/packages/aux-files/pack-audit.c \
|
||||
gnu/packages/aux-files/python/sanity-check.py \
|
||||
@@ -493,6 +491,7 @@ AUX_FILES = \
|
||||
|
||||
# Templates, examples.
|
||||
EXAMPLES = \
|
||||
gnu/system/examples/asus-c201.tmpl \
|
||||
gnu/system/examples/bare-bones.tmpl \
|
||||
gnu/system/examples/bare-hurd.tmpl \
|
||||
gnu/system/examples/bare-hurd64.tmpl \
|
||||
@@ -505,8 +504,7 @@ EXAMPLES = \
|
||||
gnu/system/examples/plasma.tmpl \
|
||||
gnu/system/examples/raspberry-pi-64.tmpl \
|
||||
gnu/system/examples/raspberry-pi-64-nfs-root.tmpl \
|
||||
gnu/system/examples/vm-image.tmpl \
|
||||
gnu/system/examples/vm-image-efi.tmpl
|
||||
gnu/system/examples/vm-image.tmpl
|
||||
|
||||
GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go $(dist_noinst_DATA:%.scm=%.go)
|
||||
|
||||
@@ -578,7 +576,6 @@ SCM_TESTS = \
|
||||
tests/import/hexpm.scm \
|
||||
tests/import/luanti.scm \
|
||||
tests/import/npm-binary.scm \
|
||||
tests/import/nuget.scm \
|
||||
tests/import/opam.scm \
|
||||
tests/import/print.scm \
|
||||
tests/import/pypi.scm \
|
||||
@@ -589,7 +586,6 @@ SCM_TESTS = \
|
||||
tests/http-client.scm \
|
||||
tests/inferior.scm \
|
||||
tests/ipfs.scm \
|
||||
tests/ld-wrapper.scm \
|
||||
tests/lint.scm \
|
||||
tests/modules.scm \
|
||||
tests/monads.scm \
|
||||
@@ -726,7 +722,7 @@ endif !CAN_RUN_TESTS
|
||||
|
||||
check-system: $(GOBJECTS)
|
||||
$(AM_V_at)$(top_builddir)/pre-inst-env \
|
||||
guix build -m $(top_srcdir)/etc/manifests/system-tests.scm -K
|
||||
guix repl -- $(top_srcdir)/build-aux/run-system-tests.scm -K
|
||||
|
||||
# Public keys used to sign substitutes.
|
||||
dist_pkgdata_DATA = \
|
||||
@@ -748,14 +744,6 @@ dist_fishcompletion_DATA = etc/completion/fish/guix.fish
|
||||
# SELinux policy
|
||||
nodist_selinux_policy_DATA = etc/guix-daemon.cil
|
||||
|
||||
# AppArmor profiles.
|
||||
dist_apparmor_profile_DATA = \
|
||||
etc/apparmor.d/guix \
|
||||
etc/apparmor.d/guix-daemon
|
||||
|
||||
nodist_apparmor_profile_tunables_DATA = \
|
||||
etc/apparmor.d/tunables/guix
|
||||
|
||||
EXTRA_DIST += \
|
||||
.dir-locals.el \
|
||||
.guix-authorizations \
|
||||
@@ -773,12 +761,9 @@ EXTRA_DIST += \
|
||||
build-aux/compile-as-derivation.scm \
|
||||
build-aux/config.rpath \
|
||||
build-aux/convert-xref.scm \
|
||||
build-aux/cuirass/evaluate.scm \
|
||||
build-aux/extract-syscall-ranges.sh \
|
||||
build-aux/generate-authors.scm \
|
||||
build-aux/gitlog-to-changelog \
|
||||
build-aux/git-version-gen \
|
||||
build-aux/keep-only-translated.scm \
|
||||
build-aux/mdate-from-git.scm \
|
||||
build-aux/test-driver.scm \
|
||||
build-aux/update-NEWS.scm \
|
||||
@@ -792,9 +777,7 @@ EXTRA_DIST += \
|
||||
etc/manifests/disarchive.scm \
|
||||
etc/manifests/hurd.scm \
|
||||
etc/manifests/kernels.scm \
|
||||
etc/manifests/release-minimal.scm \
|
||||
etc/manifests/release-desktop.scm \
|
||||
etc/manifests/release-user-packages.scm \
|
||||
etc/manifests/release.scm \
|
||||
etc/manifests/source.scm \
|
||||
etc/manifests/system-tests.scm \
|
||||
etc/manifests/time-travel.scm \
|
||||
@@ -1147,18 +1130,12 @@ system_flags = $(foreach system,$(1),-s $(system))
|
||||
# 5. Build the installation and VM images. The images will run 'guix'
|
||||
# corresponding to 'vX.Y.Z' + 1 commit, and they will install 'vX.Y.Z'.
|
||||
#
|
||||
# This is split into two targets, because a commit is made that has to be
|
||||
# pushed to Guix.
|
||||
# First, 'prepare-release' should be run, doing steps 1 and 2.
|
||||
# Then, the resulting commit should be pushed so that it's available
|
||||
# to be downloaded for the system images.
|
||||
# Afterwards, the 'release' target takes care of the rest. This 'release'
|
||||
# target takes care of everything and copies the resulting files to
|
||||
# $(releasedir).
|
||||
# This 'release' target takes care of everything and copies the resulting
|
||||
# files to $(releasedir).
|
||||
#
|
||||
# XXX: Depend on 'dist' rather than 'distcheck' to work around the Gettext
|
||||
# issue described at <https://savannah.gnu.org/bugs/index.php?51027>.
|
||||
prepare-release: dist-with-updated-version all
|
||||
release: dist-with-updated-version all
|
||||
@if ! git diff-index --quiet HEAD; then \
|
||||
echo "There are uncommitted changes; stopping." >&2 ; \
|
||||
exit 1 ; \
|
||||
@@ -1176,26 +1153,48 @@ prepare-release: dist-with-updated-version all
|
||||
$(top_builddir)/pre-inst-env guix build guix \
|
||||
$(call system_flags,$(SUPPORTED_SYSTEMS)) \
|
||||
-v1 --no-grafts --fallback
|
||||
|
||||
@echo
|
||||
@echo "First step done! Source tarball is ready in $(releasedir)"
|
||||
@echo "Now push the resulting commit and run `make release`."
|
||||
@echo
|
||||
|
||||
# Make sure you've ran prepare-release prior to running release and pushed
|
||||
# the commit to Guix. It might be pushed to any branch, such as version-X.Y.Z.
|
||||
release: all
|
||||
# Build the artifacts for current commit.
|
||||
# Use time-machine for provenance.
|
||||
$(MKDIR_P) "$(releasedir)"
|
||||
@echo "Building guix inferior for current commit."
|
||||
COMMIT="$$(git rev-parse HEAD)" && \
|
||||
GUIX="$$(guix time-machine -q --commit=$$COMMIT)/bin/guix" && \
|
||||
echo "Building artifacts for current commit: $$COMMIT." && \
|
||||
ARTIFACTS="$$($$GUIX build --no-grafts \
|
||||
-f ./etc/teams/release/artifacts.scm)" && \
|
||||
echo "Artifacts built! Copying to $(releasedir)" && \
|
||||
cp -f "$$ARTIFACTS"/* "$(releasedir)"
|
||||
# Generate the binary release tarballs.
|
||||
rm -f $(BINARY_TARBALLS)
|
||||
$(MAKE) $(BINARY_TARBALLS)
|
||||
for system in $(SUPPORTED_SYSTEMS) ; do \
|
||||
mv "guix-binary.$$system.tar.xz" \
|
||||
"$(releasedir)/guix-binary-$(PACKAGE_VERSION).$$system.tar.xz" ; \
|
||||
done
|
||||
# Build 'current-guix' to speed things up for the next step.
|
||||
$(top_builddir)/pre-inst-env guix build \
|
||||
-e '((@ (gnu packages package-management) current-guix))' \
|
||||
$(call system_flags,$(GUIX_SYSTEM_INSTALLER_SYSTEMS)) \
|
||||
-v1 --no-grafts --fallback
|
||||
# Generate the ISO installation images.
|
||||
for system in $(GUIX_SYSTEM_INSTALLER_SYSTEMS) ; do \
|
||||
GUIX_DISPLAYED_VERSION="`git describe --match=v* | sed -'es/^v//'`" ; \
|
||||
image=`$(top_builddir)/pre-inst-env \
|
||||
guix system image -t iso9660 \
|
||||
--label="GUIX_$${system}_$(VERSION)" \
|
||||
--system=$$system --fallback \
|
||||
gnu/system/install.scm` ; \
|
||||
if [ ! -f "$$image" ] ; then \
|
||||
echo "failed to produce Guix installation image for $$system" >&2 ; \
|
||||
exit 1 ; \
|
||||
fi ; \
|
||||
cp "$$image" "$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso.tmp" ; \
|
||||
mv "$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso.tmp" \
|
||||
"$(releasedir)/$(GUIX_SYSTEM_IMAGE_BASE).$$system.iso" ; \
|
||||
done
|
||||
# Generate the VM images.
|
||||
for system in $(GUIX_SYSTEM_VM_SYSTEMS) ; do \
|
||||
GUIX_DISPLAYED_VERSION="`git describe --match=v* | sed -'es/^v//'`" ; \
|
||||
image=`$(top_builddir)/pre-inst-env \
|
||||
guix system image -t qcow2 $(GUIX_SYSTEM_VM_IMAGE_FLAGS) \
|
||||
--save-provenance \
|
||||
--system=$$system --fallback \
|
||||
gnu/system/examples/vm-image.tmpl` ; \
|
||||
if [ ! -f "$$image" ] ; then \
|
||||
echo "failed to produce Guix VM image for $$system" >&2 ; \
|
||||
exit 1 ; \
|
||||
fi ; \
|
||||
cp "$$image" "$(releasedir)/$(GUIX_SYSTEM_VM_IMAGE_BASE).$$system.qcow2"; \
|
||||
done
|
||||
@echo
|
||||
@echo "Congratulations! All the release files are now in $(releasedir)."
|
||||
@echo
|
||||
@@ -1234,10 +1233,9 @@ assert-no-store-file-names:
|
||||
# Make sure installer substitutes are available. Check only the primary
|
||||
# server so that '--display-missing' doesn't print two lists.
|
||||
assert-binaries-available: $(GOBJECTS)
|
||||
$(AM_V_at)$(top_builddir)/pre-inst-env \
|
||||
guix weather -m "$(top_srcdir)/etc/manifests/release-minimal.scm" \
|
||||
-m "$(top_srcdir)/etc/manifests/release-desktop.scm" \
|
||||
--substitute-urls="https://ci.guix.gnu.org" \
|
||||
$(AM_V_at)$(top_builddir)/pre-inst-env \
|
||||
guix weather -m "$(top_srcdir)/etc/manifests/release.scm" \
|
||||
--substitute-urls="https://ci.guix.gnu.org" \
|
||||
--display-missing
|
||||
|
||||
# Make sure the final inputs don't refer to bootstrap tools.
|
||||
@@ -1263,49 +1261,42 @@ cuirass-jobs: $(GOBJECTS)
|
||||
.PHONY: clean-go make-go as-derivation
|
||||
.PHONY: update-guix-package update-NEWS cuirass-jobs release
|
||||
|
||||
if in_git_p
|
||||
# Git auto-configuration.
|
||||
.git/hooks/:
|
||||
$(AM_V_at)if test -d .git; then \
|
||||
mkdir "$@"; \
|
||||
fi
|
||||
|
||||
# Note: the following git commands may fail and produce empty variables,
|
||||
# e.g. when working on a work tree in a container.
|
||||
GIT_HOOKS_DIR := $(shell git rev-parse --git-path hooks 2>/dev/null)
|
||||
GIT_CONFIG_FILE := $(shell git rev-parse --git-path config 2>/dev/null)
|
||||
$(GIT_HOOKS_DIR):
|
||||
if [ -n "$(GIT_HOOKS_DIR)" ]; then mkdir -p "$@"; fi
|
||||
.git/hooks/%: etc/git/% | .git/hooks/
|
||||
$(AM_V_at)if test -d .git; then \
|
||||
cp "$<" "$@"; \
|
||||
fi
|
||||
|
||||
$(GIT_HOOKS_DIR)/%: etc/git/% | $(GIT_HOOKS_DIR)/
|
||||
if [ -n "$(GIT_HOOKS_DIR)" ]; then cp "$<" "$@"; fi
|
||||
|
||||
$(GIT_CONFIG_FILE): etc/git/gitconfig
|
||||
if [ -n "$(GIT_CONFIG_FILE)" ]; then \
|
||||
git config --fixed-value --replace-all include.path \
|
||||
../etc/git/gitconfig ../etc/git/gitconfig; \
|
||||
.git/config: etc/git/gitconfig
|
||||
$(AM_V_at)if command -v git >/dev/null && test -d .git; then \
|
||||
git config --fixed-value --replace-all include.path \
|
||||
../etc/git/gitconfig ../etc/git/gitconfig; \
|
||||
fi
|
||||
|
||||
COMMIT_MSG_MAGIC = VGhpcyBpcyB0aGUgY29tbWl0LW1zZyBob29rIG9mIEd1aXg=
|
||||
$(GIT_HOOKS_DIR)/commit-msg: etc/git/commit-msg | $(GIT_HOOKS_DIR)
|
||||
if [ -n "$(GIT_HOOKS_DIR)" ]; then \
|
||||
if test -f $@ && ! grep -qF $(COMMIT_MSG_MAGIC) $@; then \
|
||||
mkdir -p $@.d && mv $@ $@.d && \
|
||||
echo user commit-msg hook moved to $@.d/commit-msg; \
|
||||
fi && \
|
||||
cp etc/git/commit-msg $@; \
|
||||
.git/hooks/commit-msg: etc/git/commit-msg | .git/hooks/
|
||||
$(AM_V_at)if test -d .git; then \
|
||||
if test -f $@ && ! grep -qF $(COMMIT_MSG_MAGIC) $@; then \
|
||||
mkdir -p $@.d && mv $@ $@.d && \
|
||||
@ echo user commit-msg hook moved to $@.d/commit-msg; \
|
||||
fi; \
|
||||
cp etc/git/commit-msg $@; \
|
||||
fi
|
||||
|
||||
# Convenience targets.
|
||||
GIT_HOOKS_SOURCE_FILES := $(shell find etc/git -type f -executable)
|
||||
.PHONY: git-config git-hooks invalidate-hooks
|
||||
git-hooks: $(addprefix $(GIT_HOOKS_DIR)/,$(notdir $(GIT_HOOKS_SOURCE_FILES)))
|
||||
git-config: $(GIT_CONFIG_FILE) git-hooks
|
||||
|
||||
# The etc/git/ config files are not distributed and have no use when building
|
||||
# from a tarball. Do not add dependencies on these to *_DATA when building
|
||||
# from a tarball, as that breaks the build.
|
||||
if in_git_p
|
||||
nodist_noinst_DATA = \
|
||||
$(GIT_HOOKS_DIR)/pre-push \
|
||||
$(GIT_HOOKS_DIR)/post-merge \
|
||||
$(GIT_CONFIG_FILE) \
|
||||
$(GIT_HOOKS_DIR)/commit-msg
|
||||
.git/hooks/pre-push \
|
||||
.git/hooks/post-merge \
|
||||
.git/config \
|
||||
.git/hooks/commit-msg
|
||||
endif
|
||||
|
||||
# Downloading up-to-date PO files.
|
||||
|
||||
@@ -6,7 +6,6 @@ Copyright © 2013-2022 Ludovic Courtès <ludo@gnu.org>
|
||||
Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
|
||||
Copyright © 2021, 2022, 2024 Maxim Cournoyer <maxim@guixotic.coop>
|
||||
Copyright © 2022 Mathieu Othacehe <othacehe@gnu.org>
|
||||
Copyright © 2026 Noé Lopez <noelopez@free.fr>
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
@@ -14,84 +13,11 @@ Copyright © 2026 Noé Lopez <noelopez@free.fr>
|
||||
|
||||
Please send Guix bug reports to bug-guix@gnu.org.
|
||||
|
||||
* Changes in 1.6.0 (since 1.5.0)
|
||||
** Distribution
|
||||
*** GNOME updated to version 48
|
||||
|
||||
* Changes in 1.5.0 (since 1.4.0)
|
||||
** Package management
|
||||
*** New ‘rpm’ format for the ‘guix pack’ command
|
||||
*** New ‘appimage’ format for the ‘guix pack’ command
|
||||
*** New ‘--max-layers’ and ‘--file’ options for the ‘guix pack’ command
|
||||
*** New ‘--roll-back’ and ‘--expression’ options for the ‘guix deploy’ command
|
||||
*** New ‘--with-version’ package transformation option
|
||||
*** New ‘--with-configure-flag’ package transformation option
|
||||
*** New ‘--nesting’ option to use Guix within ‘guix shell’ containers
|
||||
*** New ‘--emulate-fhs’ option for ‘guix shell’ containers
|
||||
*** New ‘--dependents’ and ‘--development’ options for ‘guix build’
|
||||
*** New ‘--interactive’ and ‘--list-types’ flags for ‘guix repl’
|
||||
*** The root file-system of ‘guix shell’ containers is now read-only
|
||||
*** New ‘--writable-root’ option for the ‘guix shell’ command
|
||||
*** Improved style rules for ‘guix style’
|
||||
*** New ‘guix locate’ command
|
||||
*** ‘guix refresh’ now honours the ‘--key-server’ option
|
||||
*** ‘guix git authenticate‘ now remembers introduction commit and signer
|
||||
*** ‘guix git authenticate’ now installs pre-push and post-merge git hooks
|
||||
*** System reconfiguration now supports kexec for fast reboot
|
||||
*** Hetzner Cloud is now supported by the ‘guix deploy’ command
|
||||
*** The Guix Daemon can now be run without root privileges
|
||||
*** ‘guix refresh’ can now target partial version
|
||||
*** New ‘guix import composer’ command
|
||||
*** New ‘guix import binary-npm’ command
|
||||
*** New ‘guix import nuget’ command
|
||||
*** New ‘graphml’ backend for guix graph
|
||||
*** New ‘cyclonedx-json’ backend for guix graph
|
||||
*** AppArmor profiles are now available for guix and guix-daemon
|
||||
** Distribution
|
||||
*** ‘nss-certs’ is now included in ‘%base-packages’
|
||||
*** ‘udev-service-type’ now supports hardware configuration files
|
||||
*** ‘gdm-service-type’ now uses Wayland by default
|
||||
*** KDE Plasma 6.5 is now available with the new ‘plasma-desktop-service-type’
|
||||
*** GNOME was updated to version 44 with a more modular desktop service
|
||||
*** Declarative offloading with new ‘build-machines’ field of operating-system
|
||||
*** ‘containerd-service-type’ is no longer included with the Docker service
|
||||
*** ‘privileged-programs’ replaces ‘setuid-programs’ in ‘operating-system’
|
||||
*** The ‘postgresql’ field of ‘postgresql-configuration‘ is now mandatory
|
||||
*** The Rottlog service was replaced by new ‘log-rotation-service-type’
|
||||
*** The default system log has been changed to Shepherd’s ‘system-log’ service
|
||||
*** New recommended ‘%base-home-services’ variable for Guix Home
|
||||
*** UDisks now mounts removable devices in /run/media/$USER instead of /media
|
||||
*** Syncthing service received incompatible changes
|
||||
*** ‘node-build-system’ received incompatible changes
|
||||
*** New services for /etc/profile.d and /etc/bashrc.d
|
||||
*** New build system for clasp-cl
|
||||
*** New Rust packaging model
|
||||
*** C.utf8 locale is now supported by glibc
|
||||
*** Fully bootstrapped mono and zig are now available
|
||||
*** 64bit Hurd (x86_64-gnu) now has experimental support
|
||||
*** 12525 new packages
|
||||
*** 8911 package updates
|
||||
|
||||
Noteworthy updates:
|
||||
bash 5.2.37, binutils 2.44, clojure 1.12.0, cups 2.4.14, emacs 30.2,
|
||||
gcc-toolchain 15.2.0, gdb 16.3, ghc 9.2.8, gimp 3.0.4, glibc 2.41,
|
||||
gnome 46.10, gnupg 2.4.7, go 1.25.3, guile 3.0.9, icecat 140.6.0-gnu1,
|
||||
icedtea 3.19.0, inkscape 1.3.2, julia 1.8.5, libreoffice 25.2.5.2,
|
||||
linux-libre 6.17.12, lxde 0.99.3, mate 1.28.2, ocaml 5.3.0, octave 10.3.0,
|
||||
openjdk 25, perl 5.36.0, python 3.11.14, racket 8.18, rust 1.85.1, r 4.5.2,
|
||||
sbcl 2.5.8, shepherd 1.0.9, xfce 4.20.0, xorg-server 21.1.21
|
||||
|
||||
** Programming interfaces
|
||||
*** ‘(gnu system setuid)’ has been renamed to ‘(gnu system privilege)’
|
||||
*** Moved to a new Rust packaging model and repackaged all Rust applications
|
||||
*** Rust library packages have been moved to the guix-rust-past-crates channel
|
||||
*** Most Python packages now use the ‘pyproject-build-system’
|
||||
** Noteworthy bug fixes
|
||||
*** Daemon vulnerability allowing store corruption has been fixed
|
||||
*** Daemon vulnerability allowing takeover of build users has been fixed
|
||||
*** Daemon privilege escalation vulnerabilities fixed
|
||||
*** Daemon CVEs have been fixed
|
||||
CVE-2024-27297, CVE-2024-52867, CVE-2025-46415, CVE-2025-46416, CVE-2025-59378
|
||||
* Changes in 1.4.0 (since 1.3.0)
|
||||
** Package management
|
||||
*** New ‘guix home’ command, for home environment management
|
||||
@@ -2000,7 +1926,7 @@ zynaddsubfx@3.0.3, zziplib@0.13.69
|
||||
*** ‘guix pack’ now honors package transformation options
|
||||
*** ‘guix package --search’ no longer shows superseded packages
|
||||
(<https://bugs.gnu.org/30566>)
|
||||
*** ‘guix offload test’ reports errors more nicely
|
||||
*** ‘guix offload test’ reports errors more nicely
|
||||
(<https://bugs.gnu.org/28057>)
|
||||
*** postgresql service is started through ‘pg_ctl’
|
||||
(<https://bugs.gnu.org/29992>)
|
||||
@@ -5738,7 +5664,7 @@ Monad” in the manual.
|
||||
|
||||
*** X session is executed from a login shell (<http://bugs.gnu.org/19119>)
|
||||
*** grub.cfg is now a garbage-collector root (<http://bugs.gnu.org/19160>)
|
||||
*** Substituter progress report properly formatted
|
||||
*** Substituter progress report properly formatted
|
||||
(<http://bugs.gnu.org/19313>)
|
||||
*** Document permissions for /gnu/store (<http://bugs.gnu.org/19316>)
|
||||
*** Make sure config.go is newer than config.scm
|
||||
@@ -5994,18 +5920,18 @@ This could cause problems with ancient Linux kernel.
|
||||
*** download: Use the 'SERVER NAME' TLS extension when possible
|
||||
(<http://bugs.gnu.org/18526>)
|
||||
*** libdaemon: Add alternate source URLs (<http://bugs.gnu.org/18639>)
|
||||
*** icu4c: Reinstate RUNPATH on shared libraries
|
||||
*** icu4c: Reinstate RUNPATH on shared libraries
|
||||
(<http://bugs.gnu.org/18695>)
|
||||
*** nss-mdns: Add alternate source URLs (<http://bugs.gnu.org/18704>)
|
||||
*** download: Add "Accept: */*" to the HTTP headers
|
||||
(<http://bugs.gnu.org/18768>)
|
||||
*** guix-register: Do not attempt to create NIX_STORE_DIR
|
||||
*** guix-register: Do not attempt to create NIX_STORE_DIR
|
||||
(<http://bugs.gnu.org/18689>)
|
||||
*** Allow Linux-libre to find our 'modprobe' command
|
||||
(<http://bugs.gnu.org/18525>)
|
||||
*** man-pages: Build sequentially (<http://bugs.gnu.org/18701>)
|
||||
*** Fix intermittent test failures involving GC (<http://bugs.gnu.org/18935>)
|
||||
*** guix import: pypi: Gracefully handle non-existent packages
|
||||
*** guix import: pypi: Gracefully handle non-existent packages
|
||||
(<http://bugs.gnu.org/18831>)
|
||||
*** Make sure the shared library has the '.so' extension
|
||||
(<http://bugs.gnu.org/18521>)
|
||||
|
||||
@@ -111,9 +111,6 @@ build daemon, from within the generated build program."
|
||||
#~(begin
|
||||
(use-modules (ice-9 match))
|
||||
|
||||
;; To avoid lots of readlink calls
|
||||
(fluid-set! %file-port-name-canonicalization #f)
|
||||
|
||||
(eval-when (expand load eval)
|
||||
;; (gnu packages …) modules are going to be looked up
|
||||
;; under SOURCE. (guix config) is looked up in FRONT.
|
||||
@@ -172,13 +169,6 @@ build daemon, from within the generated build program."
|
||||
;; build output.
|
||||
(connect sock AF_UNIX build-output)
|
||||
|
||||
(when (integer? proto)
|
||||
;; port->connection doesn't setup buffering, so
|
||||
;; do this here
|
||||
(setvbuf (store-connection-socket store)
|
||||
'block
|
||||
%default-store-connection-buffer-size))
|
||||
|
||||
(display
|
||||
(and=>
|
||||
;; Silence autoload warnings and the likes.
|
||||
@@ -249,9 +239,6 @@ Display a spinner when nothing happens."
|
||||
#:rest rest)
|
||||
"Return a derivation that unpacks SOURCE into STORE and compiles Scheme
|
||||
files."
|
||||
;; Avoid lots of readlink calls
|
||||
(fluid-set! %file-port-name-canonicalization #f)
|
||||
|
||||
;; Build the build program and then use it as a trampoline to build from
|
||||
;; SOURCE.
|
||||
(mlet %store-monad ((build (build-program source version guile-version
|
||||
@@ -337,7 +324,7 @@ files."
|
||||
(message (format #f "You found a bug: the program '~a'
|
||||
failed to compute the derivation for Guix (version: ~s; system: ~s;
|
||||
host version: ~s; pull-version: ~s).
|
||||
Please report the COMPLETE output above to <~a>.~%"
|
||||
Please report the COMPLETE output above by email to <~a>.~%"
|
||||
(derivation->output-path build)
|
||||
version system %guix-version pull-version
|
||||
%guix-bug-report-address))))))))))))
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
directory))
|
||||
((_ . directory) directory))
|
||||
(derivation->output-paths drv)))))
|
||||
(%final-inputs system)))
|
||||
%final-inputs))
|
||||
|
||||
(define (assert-valid-substitute substitute)
|
||||
"Make sure SUBSTITUTE does not refer to any bootstrap inputs, and bail out
|
||||
|
||||
@@ -20,9 +20,6 @@
|
||||
|
||||
(use-modules (srfi srfi-26))
|
||||
|
||||
;; Avoid lots of readlink calls
|
||||
(fluid-set! %file-port-name-canonicalization #f)
|
||||
|
||||
;; Add ~/.config/guix/current to the search path.
|
||||
(eval-when (expand load eval)
|
||||
(and=> (or (getenv "XDG_CONFIG_HOME")
|
||||
@@ -44,10 +41,6 @@
|
||||
|
||||
(match (command-line)
|
||||
((program source)
|
||||
;; The build procedure outputs to this port, so setup buffering to avoid
|
||||
;; one char per syscall.
|
||||
(setvbuf (current-error-port) 'line)
|
||||
|
||||
(with-error-handling
|
||||
(with-store store
|
||||
(let* ((script (string-append source "/build-aux/build-self.scm"))
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
(guix ui)
|
||||
((guix ui) #:select (build-notifier))
|
||||
(ice-9 match)
|
||||
(ice-9 pretty-print)
|
||||
(ice-9 threads))
|
||||
|
||||
(define %top-srcdir
|
||||
@@ -43,6 +42,11 @@
|
||||
((command directory)
|
||||
(let ((real-build-things build-things))
|
||||
(with-store store
|
||||
;; Make sure we don't resort to substitutes.
|
||||
(set-build-options store
|
||||
#:use-substitutes? #f
|
||||
#:substitute-urls '())
|
||||
|
||||
;; The evaluation of Guix itself requires building a "trampoline"
|
||||
;; program, and possibly everything it depends on. Thus, allow builds
|
||||
;; but print a notification.
|
||||
@@ -100,7 +104,7 @@
|
||||
(close-inferior inferior)
|
||||
(call-with-output-file file
|
||||
(lambda (port)
|
||||
(pretty-print jobs port)))))))
|
||||
(write jobs port)))))))
|
||||
%cuirass-supported-systems
|
||||
inferiors)))))))
|
||||
(x
|
||||
|
||||
@@ -0,0 +1,228 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 Mathieu Othacehe <othacehe@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(use-modules (gnu)
|
||||
(gnu tests)
|
||||
(gnu packages package-management)
|
||||
(guix)
|
||||
(guix colors)
|
||||
((guix build utils)
|
||||
#:select (delete-file-recursively))
|
||||
(guix store)
|
||||
(guix packages)
|
||||
(guix utils)
|
||||
(guix ui)
|
||||
(guix build syscalls)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26)
|
||||
(ice-9 getopt-long)
|
||||
(ice-9 match)
|
||||
(ice-9 exceptions)
|
||||
(ice-9 pretty-print)
|
||||
(ice-9 rdelim)
|
||||
(web uri))
|
||||
|
||||
;; Version of the script.
|
||||
(define script-version "0.1")
|
||||
|
||||
;; Directory for the system test logs.
|
||||
(define tmpdir (mkdtemp! "/tmp/system-tests-XXXXXX"))
|
||||
|
||||
;; Save the stdout and stderr ports.
|
||||
(define output-port (duplicate-port (current-output-port) "w0"))
|
||||
(define error-port (duplicate-port (current-error-port) "w0"))
|
||||
|
||||
;; List of all the system tests, sorted alphabetically.
|
||||
(define all-sorted-tests
|
||||
(sort (all-system-tests)
|
||||
(lambda (a b)
|
||||
(string<? (system-test-name a) (system-test-name b)))))
|
||||
|
||||
(define (test->log-file test)
|
||||
"Return the name of the log file for the given system TEST."
|
||||
(format #f "~a/~a.log" tmpdir (system-test-name test)))
|
||||
|
||||
(define (print-failure)
|
||||
"Print a failure message."
|
||||
(format output-port
|
||||
(colorize-string "FAIL" (color RED BOLD)))
|
||||
(format output-port "~%"))
|
||||
|
||||
(define (print-success)
|
||||
"Print a success message."
|
||||
(format output-port
|
||||
(colorize-string "OK" (color GREEN BOLD)))
|
||||
(format output-port "~%"))
|
||||
|
||||
(define* (run-system-test test #:key redirect-output?)
|
||||
"Run the given system-test and redirect the test output to a file.
|
||||
Return true if the test is successful and false otherwise."
|
||||
(define log-port
|
||||
(and redirect-output?
|
||||
(open-output-file (test->log-file test))))
|
||||
|
||||
(dynamic-wind
|
||||
(lambda ()
|
||||
(when redirect-output?
|
||||
(redirect-port log-port (current-output-port))
|
||||
(redirect-port log-port (current-warning-port))
|
||||
(redirect-port log-port (current-error-port))))
|
||||
(lambda ()
|
||||
(parameterize ((current-build-output-port
|
||||
(if redirect-output?
|
||||
log-port
|
||||
(current-build-output-port))))
|
||||
(let ((store (open-connection)))
|
||||
(run-with-store store
|
||||
(mlet %store-monad
|
||||
((drv (lower-object test)))
|
||||
(return
|
||||
(guard (c ((store-protocol-error? c)
|
||||
(print-failure)
|
||||
#f))
|
||||
(and (build-derivations store (list drv))
|
||||
(print-success)))))))))
|
||||
(lambda ()
|
||||
(and redirect-output?
|
||||
(close-port log-port)))))
|
||||
|
||||
(define* (print-results results #:key keep-logs)
|
||||
"Use RESULTS, a list of booleans, to print out the test results. If
|
||||
some tests are failing, exit with the error code 1. Otherwise, exit with
|
||||
success."
|
||||
(let* ((ok-count (count identity results))
|
||||
(fail-count (- (length results) ok-count)))
|
||||
(format output-port "~%")
|
||||
(if keep-logs
|
||||
(format output-port "Test results are available in ~a~%" tmpdir)
|
||||
(delete-file-recursively tmpdir))
|
||||
(if (= fail-count 0)
|
||||
(begin
|
||||
(format output-port "All system tests are successful.~%")
|
||||
(exit 0))
|
||||
(begin
|
||||
(format output-port "~a failing test~a~%" fail-count
|
||||
(if (> fail-count 1) "s" ""))
|
||||
(exit 1)))))
|
||||
|
||||
(define* (run-tests tests #:key keep-logs redirect-output?)
|
||||
"Run all the given TESTS. If KEEP-LOGS is set to true, keep the system test
|
||||
log files."
|
||||
(let* ((count (length tests))
|
||||
(indexes (iota count)))
|
||||
(print-results
|
||||
(map (lambda (index test)
|
||||
(format output-port "Running ~a (~a/~a): "
|
||||
(system-test-name test)
|
||||
(1+ index) count)
|
||||
(force-output output-port)
|
||||
(run-system-test test #:redirect-output? redirect-output?))
|
||||
indexes tests)
|
||||
#:keep-logs keep-logs)))
|
||||
|
||||
(define (subset-tests tests subset)
|
||||
"Return the subset of TESTS that are also in the given SUBSET list."
|
||||
(filter
|
||||
(lambda (test)
|
||||
(let ((name (system-test-name test)))
|
||||
(member name subset)))
|
||||
tests))
|
||||
|
||||
(define (exclude-tests tests excludes)
|
||||
"Return the given TESTS list without the tests that are part of the EXCLUDES
|
||||
list."
|
||||
(filter
|
||||
(lambda (test)
|
||||
(let ((name (system-test-name test)))
|
||||
(not (member name excludes))))
|
||||
tests))
|
||||
|
||||
(define (show-help)
|
||||
(display "Usage: run-system-tests.scm [OPTIONS]
|
||||
Run the system tests.\n")
|
||||
(display " --tests=TEST1,TEST2,... run only TEST1 and TEST2")
|
||||
(newline)
|
||||
(display " --exclude-tests=TEST1,TEST2,... run all tests but TEST1 and TEST2")
|
||||
(newline)
|
||||
(display " --list-tests list all the system tests")
|
||||
(newline)
|
||||
(display " -n, --no-redirect do not redirect the test logs")
|
||||
(newline)
|
||||
(display " -K, --keep-logs keep the test logs")
|
||||
(newline)
|
||||
(display " -h, --help display this help and exit")
|
||||
(newline)
|
||||
(display " -V, --version display verson information and exit")
|
||||
(newline))
|
||||
|
||||
(define %options
|
||||
'((tests (value #t))
|
||||
(exclude-tests (value #t))
|
||||
(list-tests (value #f))
|
||||
(keep-logs (single-char #\K) (value #f))
|
||||
(no-redirect (single-char #\n) (value #f))
|
||||
(help (single-char #\h) (value #f))
|
||||
(version (single-char #\V) (value #f))))
|
||||
|
||||
(define (main . args)
|
||||
(define guix-source
|
||||
(canonicalize-path
|
||||
(string-append (current-source-directory) "/..")))
|
||||
|
||||
;; Use the local Guix as the current-guix-package so that we do not compute
|
||||
;; the Guix derivation over and over.
|
||||
(define guix-local
|
||||
(package
|
||||
(inherit guix)
|
||||
(source (local-file guix-source #:recursive? #t))
|
||||
(arguments
|
||||
(substitute-keyword-arguments (package-arguments guix)
|
||||
((#:tests? #f #f) #f)))))
|
||||
|
||||
(let* ((opts (getopt-long (command-line) %options))
|
||||
(option (cut option-ref opts <> <>))
|
||||
(keep-logs (option 'keep-logs #f))
|
||||
(no-redirect (option 'no-redirect #f)))
|
||||
(cond
|
||||
((option 'help #f)
|
||||
(show-help))
|
||||
((option 'version #f)
|
||||
(format #t "run-system-tests.scm ~A~%" script-version))
|
||||
((option 'list-tests #f)
|
||||
(format #t "System tests:~%~{- ~a~%~}"
|
||||
(map (lambda (test)
|
||||
(system-test-name test))
|
||||
all-sorted-tests)))
|
||||
(else
|
||||
(let* ((subset
|
||||
(and=> (option 'tests #f)
|
||||
(cut string-split <> #\,)))
|
||||
(excludes
|
||||
(and=> (option 'exclude-tests #f)
|
||||
(cut string-split <> #\,)))
|
||||
(tests
|
||||
(cond
|
||||
(excludes (exclude-tests all-sorted-tests excludes))
|
||||
(subset (subset-tests all-sorted-tests subset))
|
||||
(else all-sorted-tests))))
|
||||
(parameterize ((current-guix-package guix-local))
|
||||
(run-tests tests
|
||||
#:keep-logs keep-logs
|
||||
#:redirect-output? (not no-redirect))))))))
|
||||
|
||||
(apply main (cdr (command-line)))
|
||||
+56
-72
@@ -3,11 +3,10 @@ exec guile --no-auto-compile -e main -s "$0" "$@"
|
||||
!#
|
||||
;;;; test-driver.scm - Guile test driver for Automake testsuite harness
|
||||
|
||||
(define script-version "2026-03-21.02") ;UTC
|
||||
(define script-version "2023-12-08.14") ;UTC
|
||||
|
||||
;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
|
||||
;;; Copyright © 2021 Maxim Cournoyer <maxim@guixotic.coop>
|
||||
;;; Copyright © 2024 Tomas Volf <~@wolfsden.cz>
|
||||
;;;
|
||||
;;; This program is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
@@ -36,8 +35,7 @@ exec guile --no-auto-compile -e main -s "$0" "$@"
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-19)
|
||||
(srfi srfi-26)
|
||||
(srfi srfi-64)
|
||||
(srfi srfi-71))
|
||||
(srfi srfi-64))
|
||||
|
||||
(define (show-help)
|
||||
(display "Usage:
|
||||
@@ -97,21 +95,6 @@ case is shown.\n"))
|
||||
"[m") ;no color
|
||||
result)))
|
||||
|
||||
(define* (test-result-kind* #:optional (runner (test-runner-current)))
|
||||
;; TODO: Since Guile 3.0.11, the test-result-kind value of tests not
|
||||
;; selected by specifiers is #f instead of 'skip, which seems like a bug.
|
||||
;; Revert to use 'test-result-kind' after
|
||||
;; <https://codeberg.org/guile/guile/issues/133> is resolved and made and
|
||||
;; available in Guix.
|
||||
(or (test-result-ref runner 'result-kind)
|
||||
'skip))
|
||||
|
||||
(define (current-test-full-name runner)
|
||||
"Get full name (test group path + name) of current test."
|
||||
(format #f "~{~a~^/~}: ~a"
|
||||
(test-runner-group-path runner)
|
||||
(test-runner-test-name runner)))
|
||||
|
||||
|
||||
;;;
|
||||
;;; SRFI 64 custom test runner.
|
||||
@@ -122,30 +105,27 @@ case is shown.\n"))
|
||||
(out-port (current-output-port))
|
||||
(trs-port (%make-void-port "w"))
|
||||
select exclude)
|
||||
"Return a custom SRFI-64 test runner and a `finalize' procedure as multiple
|
||||
values. TEST-NAME is a string specifying the file name of the current the
|
||||
test. COLOR? specifies whether to use colors. When BRIEF? is true, the
|
||||
individual test cases results are masked and only the summary is shown.
|
||||
ERRORS-ONLY? reduces the amount of test case metadata logged to only that of
|
||||
the failed test cases. OUT-PORT and TRS-PORT must be output ports. OUT-PORT
|
||||
defaults to the current output port, while TRS-PORT defaults to a void port,
|
||||
which means no TRS output is logged. SELECT and EXCLUDE may take a regular
|
||||
expression to select or exclude individual test cases based on their names.
|
||||
|
||||
After the tests are finished running, the `finalize' procedure should be
|
||||
called to do the final reporting."
|
||||
"Return an custom SRFI-64 test runner. TEST-NAME is a string specifying the
|
||||
file name of the current the test. COLOR? specifies whether to use colors.
|
||||
When BRIEF? is true, the individual test cases results are masked and only the
|
||||
summary is shown. ERRORS-ONLY? reduces the amount of test case metadata
|
||||
logged to only that of the failed test cases. OUT-PORT and TRS-PORT must be
|
||||
output ports. OUT-PORT defaults to the current output port, while TRS-PORT
|
||||
defaults to a void port, which means no TRS output is logged. SELECT and
|
||||
EXCLUDE may take a regular expression to select or exclude individual test
|
||||
cases based on their names."
|
||||
|
||||
(define test-cases-start-time (make-hash-table))
|
||||
|
||||
(define (test-on-test-begin-gnu runner)
|
||||
;; Procedure called at the start of an individual test case, before the
|
||||
;; test expression (and expected value) are evaluated.
|
||||
(let ((test-case-name (current-test-full-name runner))
|
||||
(let ((test-case-name (test-runner-test-name runner))
|
||||
(start-time (current-time time-monotonic)))
|
||||
(hash-set! test-cases-start-time test-case-name start-time)))
|
||||
|
||||
(define (test-skipped? runner)
|
||||
(eq? 'skip (test-result-kind* runner)))
|
||||
(eq? 'skip (test-result-kind runner)))
|
||||
|
||||
(define (test-failed? runner)
|
||||
(not (or (test-passed? runner)
|
||||
@@ -157,7 +137,7 @@ called to do the final reporting."
|
||||
(let* ((results (test-result-alist runner))
|
||||
(result? (cut assq <> results))
|
||||
(result (cut assq-ref results <>))
|
||||
(test-case-name (current-test-full-name runner))
|
||||
(test-case-name (test-runner-test-name runner))
|
||||
(start (hash-ref test-cases-start-time test-case-name))
|
||||
(end (current-time time-monotonic))
|
||||
(time-elapsed (time-difference end start))
|
||||
@@ -166,12 +146,12 @@ called to do the final reporting."
|
||||
(unless (or brief? (and errors-only? (test-skipped? runner)))
|
||||
;; Display the result of each test case on the console.
|
||||
(format out-port "~a: ~a - ~a ~@[[~,3fs]~]~%"
|
||||
(result->string (test-result-kind* runner) #:colorize? color?)
|
||||
(result->string (test-result-kind runner) #:colorize? color?)
|
||||
test-name test-case-name
|
||||
(and show-duration? time-elapsed-seconds)))
|
||||
|
||||
(unless (and errors-only? (not (test-failed? runner)))
|
||||
(format #t "test-name: ~A~%" test-case-name)
|
||||
(format #t "test-name: ~A~%" (result 'test-name))
|
||||
(format #t "location: ~A~%"
|
||||
(string-append (result 'source-file) ":"
|
||||
(number->string (result 'source-line))))
|
||||
@@ -188,29 +168,18 @@ called to do the final reporting."
|
||||
(newline))
|
||||
|
||||
(format trs-port ":test-result: ~A ~A [~,3fs]~%"
|
||||
(result->string (test-result-kind* runner))
|
||||
test-case-name time-elapsed-seconds)))
|
||||
(result->string (test-result-kind runner))
|
||||
(test-runner-test-name runner) time-elapsed-seconds)))
|
||||
|
||||
(define (finalize runner)
|
||||
"Procedure to call after all tests finish to do the final reporting."
|
||||
(define (test-on-group-end-gnu runner)
|
||||
;; Procedure called by a 'test-end', including at the end of a test-group.
|
||||
(let ((fail (or (positive? (test-runner-fail-count runner))
|
||||
(positive? (test-runner-xpass-count runner))))
|
||||
(skip (or (positive? (test-runner-skip-count runner))
|
||||
(positive? (test-runner-xfail-count runner)))))
|
||||
(format trs-port ":global-test-result: ~{~A~^,~}~%"
|
||||
(filter-map (λ (proc str)
|
||||
(let ((n (proc runner)))
|
||||
(if (positive? n) str #f)))
|
||||
(list test-runner-pass-count
|
||||
test-runner-fail-count
|
||||
test-runner-xpass-count
|
||||
test-runner-xfail-count
|
||||
test-runner-skip-count)
|
||||
(list "PASS"
|
||||
"FAIL"
|
||||
"XPASS"
|
||||
"XFAIL"
|
||||
"SKIP")))
|
||||
;; XXX: The global results need some refinements for XPASS.
|
||||
(format trs-port ":global-test-result: ~A~%"
|
||||
(if fail "FAIL" (if skip "SKIP" "PASS")))
|
||||
(format trs-port ":recheck: ~A~%"
|
||||
(if fail "yes" "no"))
|
||||
(format trs-port ":copy-in-global-log: ~A~%"
|
||||
@@ -220,14 +189,15 @@ called to do the final reporting."
|
||||
(format out-port "~A: ~A~%"
|
||||
(result->string (if fail 'fail (if skip 'skip 'pass))
|
||||
#:colorize? color?)
|
||||
test-name))))
|
||||
test-name))
|
||||
#f))
|
||||
|
||||
(let ((runner (test-runner-null)))
|
||||
(test-runner-on-test-begin! runner test-on-test-begin-gnu)
|
||||
(test-runner-on-test-end! runner test-on-test-end-gnu)
|
||||
(test-runner-on-group-end! runner test-on-group-end-gnu)
|
||||
(test-runner-on-bad-end-name! runner test-on-bad-end-name-simple)
|
||||
(values runner
|
||||
(λ () (finalize runner)))))
|
||||
runner))
|
||||
|
||||
|
||||
;;;
|
||||
@@ -235,11 +205,27 @@ called to do the final reporting."
|
||||
;;;
|
||||
(define (test-match-name* regexp)
|
||||
"Return a test specifier that matches a test name against REGEXP."
|
||||
(compose (cut string-match regexp <>) current-test-full-name))
|
||||
(lambda (runner)
|
||||
(string-match regexp (test-runner-test-name runner))))
|
||||
|
||||
(define (test-match-name*/negated regexp)
|
||||
"Return a negated test specifier version of test-match-name*."
|
||||
(compose not (test-match-name* regexp)))
|
||||
(lambda (runner)
|
||||
(not (string-match regexp (test-runner-test-name runner)))))
|
||||
|
||||
;;; XXX: test-match-all is a syntax, which isn't convenient to use with a list
|
||||
;;; of test specifiers computed at run time. Copy this SRFI 64 internal
|
||||
;;; definition here, which is the procedural equivalent of 'test-match-all'.
|
||||
(define (%test-match-all . pred-list)
|
||||
(lambda (runner)
|
||||
(let ((result #t))
|
||||
(let loop ((l pred-list))
|
||||
(if (null? l)
|
||||
result
|
||||
(begin
|
||||
(if (not ((car l) runner))
|
||||
(set! result #f))
|
||||
(loop (cdr l))))))))
|
||||
|
||||
|
||||
;;;
|
||||
@@ -263,7 +249,7 @@ called to do the final reporting."
|
||||
identity
|
||||
(list (and=> select test-match-name*)
|
||||
(and=> exclude test-match-name*/negated))))
|
||||
(test-specifier (apply test-match-all test-specifiers))
|
||||
(test-specifier (apply %test-match-all test-specifiers))
|
||||
(color-tests (if (assoc 'color-tests opts)
|
||||
(option->boolean opts 'color-tests)
|
||||
#t)))
|
||||
@@ -271,19 +257,17 @@ called to do the final reporting."
|
||||
(redirect-port log (current-output-port))
|
||||
(redirect-port log (current-warning-port))
|
||||
(redirect-port log (current-error-port)))
|
||||
(let ((runner
|
||||
finalize (test-runner-gnu
|
||||
test-name
|
||||
#:color? color-tests
|
||||
#:brief? (option->boolean opts 'brief)
|
||||
#:errors-only? (option->boolean opts 'errors-only)
|
||||
#:show-duration? (option->boolean
|
||||
opts 'show-duration)
|
||||
#:out-port out #:trs-port trs)))
|
||||
(test-apply runner test-specifier
|
||||
(test-with-runner
|
||||
(test-runner-gnu test-name
|
||||
#:color? color-tests
|
||||
#:brief? (option->boolean opts 'brief)
|
||||
#:errors-only? (option->boolean opts 'errors-only)
|
||||
#:show-duration? (option->boolean
|
||||
opts 'show-duration)
|
||||
#:out-port out #:trs-port trs)
|
||||
(test-apply test-specifier
|
||||
(lambda _
|
||||
(load-from-path test-name)))
|
||||
(finalize))
|
||||
(load-from-path test-name))))
|
||||
(and=> log close-port)
|
||||
(and=> trs close-port)
|
||||
(close-port out))))
|
||||
|
||||
@@ -128,13 +128,13 @@ COMMIT. PROC receives the temporary directory file name as an argument."
|
||||
(define %guix-git-repo-push-url-regexp
|
||||
"(git.guix.gnu.org|codeberg.org/guix|git@codeberg.org:guix)/guix(.git)? \\(push\\)")
|
||||
|
||||
(define (with-input-pipe-to-string prog . args)
|
||||
(let* ((input-pipe (apply open-pipe* OPEN_READ prog args))
|
||||
(define-syntax-rule (with-input-pipe-to-string prog arg ...)
|
||||
(let* ((input-pipe (open-pipe* OPEN_READ prog arg ...))
|
||||
(output (get-string-all input-pipe))
|
||||
(exit-val (status:exit-val (close-pipe input-pipe))))
|
||||
(unless (zero? exit-val)
|
||||
(error (format #f "Command ~s exited with non-zero exit status: ~s"
|
||||
(string-join (cons prog args)) exit-val)))
|
||||
(string-join (list prog arg ...)) exit-val)))
|
||||
(string-trim-both output)))
|
||||
|
||||
(define (find-origin-remote)
|
||||
|
||||
+3
-20
@@ -2,7 +2,7 @@
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
#
|
||||
# GNU Guix --- Functional package management for GNU
|
||||
# Copyright © 2012-2021, 2022-2023, 2025 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2012-2021, 2022-2023 Ludovic Courtès <ludo@gnu.org>
|
||||
# Copyright © 2013, 2016 Mark H Weaver <mhw@netris.org>
|
||||
# Copyright © 2014-2016 Alex Kost <alezost@gmail.com>
|
||||
# Copyright © 2014-2016 David Thompson <davet@gnu.org>
|
||||
@@ -21,7 +21,7 @@
|
||||
AC_PREREQ([2.69])
|
||||
AC_INIT([GNU Guix],
|
||||
[m4_esyscmd([build-aux/git-version-gen .tarball-version])],
|
||||
[https://codeberg.org/guix/guix/issues/], [guix],
|
||||
[bug-guix@gnu.org], [guix],
|
||||
[https://www.gnu.org/software/guix/])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
|
||||
@@ -81,15 +81,6 @@ AC_ARG_WITH([selinux-policy-dir],
|
||||
[selinux_policydir='${datadir}/selinux/'])
|
||||
AC_SUBST([selinux_policydir])
|
||||
|
||||
AC_ARG_WITH([apparmor-profile-dir],
|
||||
AS_HELP_STRING([--with-apparmor-profile-dir=DIR],
|
||||
[name of the AppArmor profile directory]),
|
||||
[apparmor_profiledir="$withval"],
|
||||
[apparmor_profiledir='${sysconfdir}/apparmor.d'])
|
||||
AC_SUBST([apparmor_profiledir])
|
||||
apparmor_profile_tunablesdir='${apparmor_profiledir}/tunables'
|
||||
AC_SUBST([apparmor_profile_tunablesdir])
|
||||
|
||||
dnl Better be verbose.
|
||||
AC_MSG_CHECKING([for the store directory])
|
||||
AC_MSG_RESULT([$storedir])
|
||||
@@ -130,8 +121,7 @@ if test "x$GUILD" = "x"; then
|
||||
fi
|
||||
|
||||
dnl (guix ui), notably, requires 'default-optimization-level' added in 3.0.3.
|
||||
dnl (guix serialization) requires 'bytevector-slice' added in 3.0.9.
|
||||
PKG_CHECK_MODULES([GUILE], [guile-3.0 >= 3.0.9])
|
||||
PKG_CHECK_MODULES([GUILE], [guile-3.0 >= 3.0.3])
|
||||
|
||||
dnl Get CFLAGS and LDFLAGS for libguile.
|
||||
GUILE_FLAGS
|
||||
@@ -199,12 +189,6 @@ if test "x$have_guile_lzlib" != "xyes"; then
|
||||
AC_MSG_ERROR([Guile-lzlib is missing; please install it.])
|
||||
fi
|
||||
|
||||
dnl Check for Guile-semver.
|
||||
GUILE_MODULE_AVAILABLE([have_guile_semver], [(semver)])
|
||||
if test "x$have_guile_semver" != "xyes"; then
|
||||
AC_MSG_ERROR([Guile-semver is missing; please install it.])
|
||||
fi
|
||||
|
||||
dnl Check for Guile-Avahi.
|
||||
GUILE_MODULE_AVAILABLE([have_guile_avahi], [(avahi)])
|
||||
AM_CONDITIONAL([HAVE_GUILE_AVAHI],
|
||||
@@ -324,7 +308,6 @@ AC_CONFIG_FILES([Makefile
|
||||
po/guix/Makefile.in
|
||||
po/packages/Makefile.in
|
||||
etc/guix-daemon.cil
|
||||
etc/apparmor.d/tunables/guix
|
||||
guix/config.scm])
|
||||
|
||||
AC_CONFIG_FILES([etc/committer.scm], [chmod +x etc/committer.scm])
|
||||
|
||||
+5
-7
@@ -72,7 +72,7 @@
|
||||
|
||||
(define %cookbook-languages
|
||||
;; Available translations for the 'guix-cookbook' text domain.
|
||||
'("de" "en" "es" "fr" "it" "ko" "pt_BR" "ru" "sk" "sv" "ta" "zh_CN"))
|
||||
'("de" "en" "es" "fr" "it" "ko" "pt_BR" "ru" "sk" "sv" "zh_CN"))
|
||||
|
||||
(define %languages
|
||||
;; Available translations for the document being built.
|
||||
@@ -82,7 +82,7 @@
|
||||
|
||||
(define %latest-guix-version
|
||||
;; Latest released version.
|
||||
"1.5.0")
|
||||
"1.4.0")
|
||||
|
||||
(define (texinfo-manual-images source)
|
||||
"Return a directory containing all the images used by the user manual, taken
|
||||
@@ -777,8 +777,7 @@ in SOURCE."
|
||||
(define version-links
|
||||
(list (menu-item #$latest-version
|
||||
(string-append
|
||||
"/manual/" #$latest-version
|
||||
"/" language
|
||||
"/manual/" language
|
||||
(if split-node? "/html_node" "")))
|
||||
(menu-item "development"
|
||||
(string-append
|
||||
@@ -943,8 +942,7 @@ makeinfo OPTIONS."
|
||||
(let* ((texi (language->texi-file-name language))
|
||||
(opts `("--html"
|
||||
"-c" ,(string-append "TOP_NODE_UP_URL=/manual/"
|
||||
#$%latest-guix-version
|
||||
"/" language)
|
||||
language)
|
||||
#$@options
|
||||
,texi)))
|
||||
(format #t "building HTML manual for language '~a'...~%"
|
||||
@@ -1302,7 +1300,7 @@ must be the Guix top-level source directory, from which PO files are taken."
|
||||
language))
|
||||
".html")))
|
||||
"HTML, entirely on one page"))
|
||||
,@(if (member language '("ko" "ru" "ta"))
|
||||
,@(if (member language '("ko" "ru"))
|
||||
'()
|
||||
`((li (a (@ (href ,(string-append
|
||||
#$manual
|
||||
|
||||
+433
-208
@@ -25,6 +25,7 @@ choice.
|
||||
* Running the Test Suite:: Testing Guix.
|
||||
* Running Guix Before It Is Installed:: Hacker tricks.
|
||||
* The Perfect Setup:: The right tools.
|
||||
* Alternative Setups:: Other possible tools that do the job.
|
||||
* Source Tree Structure:: Source code guided tour.
|
||||
* Packaging Guidelines:: Growing the distribution.
|
||||
* Coding Style:: Hygiene of the contributor.
|
||||
@@ -65,8 +66,8 @@ GNU Guix depends on the following packages:
|
||||
|
||||
@itemize
|
||||
@item @url{https://gnu.org/software/guile/, GNU Guile}, version 3.0.x,
|
||||
version 3.0.9 or later;
|
||||
@item @url{https://codeberg.org/guile-gcrypt/guile-gcrypt, Guile-Gcrypt}, version
|
||||
version 3.0.3 or later;
|
||||
@item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, version
|
||||
0.1.0 or later;
|
||||
@item
|
||||
@uref{https://gitlab.com/gnutls/guile/, Guile-GnuTLS} (@pxref{Guile
|
||||
@@ -75,11 +76,11 @@ gnutls-guile, GnuTLS-Guile})@footnote{The Guile bindings to
|
||||
@uref{https://gnutls.org/, GnuTLS} were distributed as part of GnuTLS
|
||||
until version 3.7.8 included.};
|
||||
@item
|
||||
@uref{https://codeberg.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3}, version 0.1.0
|
||||
@uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3}, version 0.1.0
|
||||
or later;
|
||||
@item @uref{https://codeberg.org/guile-compression/guile-zlib, Guile-zlib},
|
||||
@item @uref{https://notabug.org/guile-zlib/guile-zlib, Guile-zlib},
|
||||
version 0.1.0 or later;
|
||||
@item @uref{https://codeberg.org/guile-compression/guile-lzlib, Guile-lzlib};
|
||||
@item @uref{https://notabug.org/guile-lzlib/guile-lzlib, Guile-lzlib};
|
||||
@item @uref{https://www.nongnu.org/guile-avahi/, Guile-Avahi};
|
||||
@item
|
||||
@uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, version 0.10.0
|
||||
@@ -101,7 +102,7 @@ Support for build offloading (@pxref{Daemon Offload Setup}) and
|
||||
version 0.13.0 or later.
|
||||
|
||||
@item
|
||||
@uref{https://codeberg.org/guile-compression/guile-zstd, Guile-zstd}, for zstd
|
||||
@uref{https://notabug.org/guile-zstd/guile-zstd, Guile-zstd}, for zstd
|
||||
compression and decompression in @command{guix publish} and for
|
||||
substitutes (@pxref{Invoking guix publish}).
|
||||
|
||||
@@ -133,15 +134,10 @@ C++11 standard.
|
||||
@section Building from Git
|
||||
|
||||
If you want to hack Guix itself, it is recommended to use the latest
|
||||
version from the Git repository@footnote{
|
||||
Guix uses @code{master} as the default branch name. A proposal in 2025 to
|
||||
change the default branch name to @code{main} did not reach consensus.
|
||||
See @uref{https://codeberg.org/guix/guix-consensus-documents/src/branch/main/003-rename-default-branch.md,
|
||||
Guix Consensus Document 003}.}:
|
||||
version from the Git repository:
|
||||
|
||||
@example
|
||||
git clone https://git.guix.gnu.org/guix.git
|
||||
cd guix
|
||||
@end example
|
||||
|
||||
@cindex authentication, of a Guix checkout
|
||||
@@ -181,7 +177,6 @@ guix shell -D guix -CPW
|
||||
or even, from within a Git worktree for Guix:
|
||||
|
||||
@example
|
||||
echo $(pwd) >> ~/.config/guix/shell-authorized-directories
|
||||
guix shell -CPW
|
||||
@end example
|
||||
|
||||
@@ -189,10 +184,6 @@ If @option{-C} (short for @option{--container}) is not supported on your
|
||||
system, try @command{--pure} instead of @option{-CPW}.
|
||||
@xref{Invoking guix shell}, for more information on that command.
|
||||
|
||||
Most of the test suite runs without an internet connection. The @option{-N}
|
||||
(short for @option{--network}) can be added to the @code{guix shell} command
|
||||
to run the tests that require internet access.
|
||||
|
||||
If you are unable to use Guix when building Guix from a checkout, the
|
||||
following are the required packages in addition to those mentioned in the
|
||||
installation instructions (@pxref{Requirements}).
|
||||
@@ -206,11 +197,11 @@ installation instructions (@pxref{Requirements}).
|
||||
@item @url{https://www.gnu.org/software/help2man/, GNU Help2man (optional)}.
|
||||
@end itemize
|
||||
|
||||
On Guix, other development tools, like @code{strace}, can be included by
|
||||
giving them as extra arguments to @command{guix shell}:
|
||||
On Guix, extra dependencies can be added by instead running @command{guix
|
||||
shell}:
|
||||
|
||||
@example
|
||||
guix shell -D guix -CPW strace
|
||||
guix shell -D guix help2man git strace --pure
|
||||
@end example
|
||||
|
||||
From there you can generate the build system infrastructure
|
||||
@@ -535,64 +526,14 @@ to build again each time you update a package file, run
|
||||
@node The Perfect Setup
|
||||
@section The Perfect Setup
|
||||
|
||||
@cindex editor setup, for Scheme
|
||||
@cindex Scheme code editing
|
||||
All configuration and development in Guix is done in the Scheme
|
||||
language. Like all languages of the Lisp family, Scheme has a simple
|
||||
syntax. The perfect setup is one where the editor you choose makes
|
||||
working with that syntax seamless and pleasant; for that it must
|
||||
absolutely support a few things for Scheme:
|
||||
|
||||
@itemize
|
||||
@item
|
||||
automatic indentation, such that hitting the ``Enter'' key (or
|
||||
@kbd{RET}) places cursor ``at the right place'' on the next line;
|
||||
@item
|
||||
``parentheses matching'', allowing you to jump from a closing
|
||||
parenthesis to the corresponding opening parenthesis and vice-versa;
|
||||
@item
|
||||
syntax highlighting, so that keywords are visually distinguishable.
|
||||
@end itemize
|
||||
|
||||
The following optional features can make your life easier:
|
||||
|
||||
@itemize
|
||||
@item
|
||||
structural editing of Scheme syntax;
|
||||
@item
|
||||
Guile integration so you can easily evaluate code, jump to procedure
|
||||
definitions, view documentation, and so on.
|
||||
@end itemize
|
||||
|
||||
The following sections look at editor setups that are known to work
|
||||
well. Do share your setup for these and other editors for inclusion in
|
||||
this manual! @xref{Submitting Patches}.
|
||||
|
||||
@menu
|
||||
* Emacs:: Best-of-breed editor for Scheme code.
|
||||
* Guile Studio:: First step in your transition to Emacs.
|
||||
* Vim and NeoVim:: Classical Unix editors.
|
||||
@end menu
|
||||
|
||||
@node Emacs
|
||||
@subsection Emacs
|
||||
|
||||
@url{https://www.gnu.org/software/emacs, Emacs} is probably the most
|
||||
widely used editor in the community; it is also the one that,
|
||||
historically, has always had excellent support for Lisp languages, being
|
||||
itself a Lisp implementation!
|
||||
|
||||
@quotation Note
|
||||
If you are just getting started with Emacs, @pxref{Guile Studio} for a
|
||||
smooth way to start your transition.
|
||||
@end quotation
|
||||
|
||||
Just like for Guile hacking (@pxref{Using Guile in Emacs,,, guile, Guile
|
||||
Reference Manual}), Emacs works best when empowered by the wonderful
|
||||
@url{https://nongnu.org/geiser/, Geiser}. To set that up, run:
|
||||
The Perfect Setup to hack on Guix is basically the perfect setup used
|
||||
for Guile hacking (@pxref{Using Guile in Emacs,,, guile, Guile Reference
|
||||
Manual}). First, you need more than an editor, you need
|
||||
@url{https://www.gnu.org/software/emacs, Emacs}, empowered by the
|
||||
wonderful @url{https://nongnu.org/geiser/, Geiser}. To set that up, run:
|
||||
|
||||
@example
|
||||
guix install emacs guile emacs-geiser emacs-geiser-guile emacs-guix
|
||||
guix install emacs guile emacs-geiser emacs-geiser-guile
|
||||
@end example
|
||||
|
||||
Geiser allows for interactive and incremental development from within
|
||||
@@ -611,15 +552,6 @@ facilities to directly operate on the syntax tree, such as raising an
|
||||
s-expression or wrapping it, swallowing or rejecting the following
|
||||
s-expression, etc.
|
||||
|
||||
Cherry on the cake: the Emacs-Guix package provides a convenient
|
||||
interface to many commands---e.g., it lets you browse packages, install
|
||||
or remove packages, and so on---as well as development helpers that
|
||||
enhance @code{scheme-mode} and Geiser. @xref{Introduction,,,
|
||||
emacs-guix, Emacs-Guix Reference Manual}, to make sure you don't miss
|
||||
out!
|
||||
|
||||
@unnumberedsubsubsec Taming Boilerplate with Templates
|
||||
|
||||
@cindex code snippets
|
||||
@cindex templates
|
||||
@cindex reducing boilerplate
|
||||
@@ -659,8 +591,6 @@ trigger string @code{origin...}, which can be expanded further. The
|
||||
@code{origin} snippet in turn may insert other trigger strings ending on
|
||||
@code{...}, which also can be expanded further.
|
||||
|
||||
@unnumberedsubsubsec Updating Copyright Lines
|
||||
|
||||
@cindex insert or update copyright
|
||||
@cindex @code{M-x guix-copyright}
|
||||
@cindex @code{M-x copyright-update}
|
||||
@@ -689,30 +619,104 @@ copyright-update}. If you want to do it automatically after each buffer
|
||||
save then add @code{(add-hook 'after-save-hook 'copyright-update)} in
|
||||
Emacs.
|
||||
|
||||
@unnumberedsubsubsec Referencing Bug Reports
|
||||
@node Viewing Bugs within Emacs
|
||||
@subsection Viewing Bugs within Emacs
|
||||
|
||||
@cindex bug references, Emacs
|
||||
Emacs has a nice minor mode called @code{bug-reference}, which can be
|
||||
used to follow link to issues and pull requests such as @samp{#1234} or
|
||||
@samp{guix/guix#1234} (@pxref{Bug Reference,,, emacs, The GNU Emacs
|
||||
Manual}). To set it up, enable it in the relevant modes:
|
||||
Emacs has a nice minor mode called @code{bug-reference}, which, when
|
||||
combined with @samp{emacs-debbugs} (the Emacs package), can be used to
|
||||
open links such as @samp{<https://bugs.gnu.org/58697>} or
|
||||
@samp{<https://issues.guix.gnu.org/58697>} as bug report buffers. From
|
||||
there you can easily consult the email thread via the Gnus interface,
|
||||
reply or modify the bug status, all without leaving the comfort of
|
||||
Emacs! Below is a sample configuration to add to your @file{~/.emacs}
|
||||
configuration file:
|
||||
|
||||
@lisp
|
||||
;;; Bug references.
|
||||
(require 'bug-reference)
|
||||
(add-hook 'prog-mode-hook #'bug-reference-prog-mode)
|
||||
(add-hook 'gnus-mode-hook #'bug-reference-mode)
|
||||
(add-hook 'erc-mode-hook #'bug-reference-mode)
|
||||
;; Add extra hooks for your mail user agent: Gnus, mu4e, etc.
|
||||
(add-hook 'gnus-summary-mode-hook #'bug-reference-mode)
|
||||
(add-hook 'gnus-article-mode-hook #'bug-reference-mode)
|
||||
|
||||
;;; This extends the default expression (the top-most, first expression
|
||||
;;; provided to 'or') to also match URLs such as
|
||||
;;; <https://issues.guix.gnu.org/58697> or <https://bugs.gnu.org/58697>.
|
||||
;;; It is also extended to detect "Fixes: #NNNNN" git trailers.
|
||||
(setq bug-reference-bug-regexp
|
||||
(rx (group (or (seq word-boundary
|
||||
(or (seq (char "Bb") "ug"
|
||||
(zero-or-one " ")
|
||||
(zero-or-one "#"))
|
||||
(seq (char "Pp") "atch"
|
||||
(zero-or-one " ")
|
||||
"#")
|
||||
(seq (char "Ff") "ixes"
|
||||
(zero-or-one ":")
|
||||
(zero-or-one " ") "#")
|
||||
(seq "RFE"
|
||||
(zero-or-one " ") "#")
|
||||
(seq "PR "
|
||||
(one-or-more (char "a-z+-")) "/"))
|
||||
(group (one-or-more (char "0-9"))
|
||||
(zero-or-one
|
||||
(seq "#" (one-or-more
|
||||
(char "0-9"))))))
|
||||
(seq (? "<") "https://bugs.gnu.org/"
|
||||
(group-n 2 (one-or-more (char "0-9")))
|
||||
(? ">"))
|
||||
(seq (? "<") "https://issues.guix.gnu.org/"
|
||||
(? "issue/")
|
||||
(group-n 2 (one-or-more (char "0-9")))
|
||||
(? ">"))))))
|
||||
(setq bug-reference-url-format "https://issues.guix.gnu.org/%s")
|
||||
|
||||
(require 'debbugs)
|
||||
(require 'debbugs-browse)
|
||||
(add-hook 'bug-reference-mode-hook #'debbugs-browse-mode)
|
||||
(add-hook 'bug-reference-prog-mode-hook #'debbugs-browse-mode)
|
||||
|
||||
;; The following allows Emacs Debbugs user to open the issue directly within
|
||||
;; Emacs.
|
||||
(setq debbugs-browse-url-regexp
|
||||
(rx line-start
|
||||
"http" (zero-or-one "s") "://"
|
||||
(or "debbugs" "issues.guix" "bugs")
|
||||
".gnu.org" (one-or-more "/")
|
||||
(group (zero-or-one "cgi/bugreport.cgi?bug="))
|
||||
(group-n 3 (one-or-more digit))
|
||||
line-end))
|
||||
|
||||
;; Change the default when run as 'M-x debbugs-gnu'.
|
||||
(setq debbugs-gnu-default-packages '("guix" "guix-patches"))
|
||||
|
||||
;; Show feature requests.
|
||||
(setq debbugs-gnu-default-severities
|
||||
'("serious" "important" "normal" "minor" "wishlist"))
|
||||
@end lisp
|
||||
|
||||
When working from a Git checkout of Guix, setup is automatic:
|
||||
@code{bug-reference} automatically detects that the project is hosted on
|
||||
Codeberg@footnote{
|
||||
@c 'vc-git-repository-url' is used by
|
||||
@c 'bug-reference-setup-from-vc-alist', which checks for one of these
|
||||
@c names for the remote.
|
||||
As of Emacs@tie{}30.2, auto-detection works if and
|
||||
only if the Git remote is called @code{upstream} or @code{origin}.} and
|
||||
infers the issue and pull request URL from there.
|
||||
For more information, refer to @ref{Bug Reference,,, emacs, The GNU
|
||||
Emacs Manual} and @ref{Minor Mode,,, debbugs-ug, The Debbugs User
|
||||
Guide}.
|
||||
|
||||
@node Alternative Setups
|
||||
@section Alternative Setups
|
||||
|
||||
Alternative setups than Emacs may let you work on Guix with a
|
||||
similar development experience and they might work better with the
|
||||
tools you currently use or help you make the transition to Emacs.
|
||||
|
||||
The options listed below only provide the alternatives to the Emacs
|
||||
based setup, which is the most widely used in the Guix community. If
|
||||
you want to really understand how the perfect setup for Guix development
|
||||
is supposed to work, we encourage you to read the section before this
|
||||
regardless of the editor you choose to use.
|
||||
|
||||
@menu
|
||||
* Guile Studio:: First step in your transition to Emacs.
|
||||
* Vim and NeoVim:: When you are evil to the root.
|
||||
@end menu
|
||||
|
||||
@node Guile Studio
|
||||
@subsection Guile Studio
|
||||
@@ -730,9 +734,9 @@ Guile Studio comes with Geiser preinstalled and prepared for action.
|
||||
@node Vim and NeoVim
|
||||
@subsection Vim and NeoVim
|
||||
|
||||
@cindex Vim, for Scheme code editing
|
||||
Vim (and NeoVim) are also packaged in Guix, in case these popular modal
|
||||
editors are more to your taste.
|
||||
|
||||
Vim (and NeoVim) are also packaged in Guix, just in case you decided
|
||||
to go for the evil path.
|
||||
|
||||
@example
|
||||
guix install vim
|
||||
@@ -1500,30 +1504,37 @@ satisfied.
|
||||
@subsection Python Modules
|
||||
|
||||
@cindex python
|
||||
The standard way to generate a package definition is to use
|
||||
@code{guix import pypi <name>}, where @var{name} is the name of the
|
||||
Python package on @url{https://pypi.org, PyPI}, see @pxref{Invoking guix
|
||||
import}. Please check with @code{guix lint <package-name>} that the
|
||||
generated package is valid.
|
||||
We currently package Python 2 and Python 3, under the Scheme variable names
|
||||
@code{python-2} and @code{python} as explained in @ref{Version Numbers}.
|
||||
To avoid confusion and naming clashes with other programming languages, it
|
||||
seems desirable that the name of a package for a Python module contains
|
||||
the word @code{python}.
|
||||
|
||||
To avoid confusion and naming clashes with other programming languages,
|
||||
Python module packages should be prefixed with @code{python-}.
|
||||
Some modules are compatible with only one version of Python, others with
|
||||
both. If the package Foo is compiled with Python 3, we name it
|
||||
@code{python-foo}. If it is compiled with Python 2, we name it
|
||||
@code{python2-foo}. Python 2 packages are being removed from the
|
||||
distribution; please do no not submit any new Python 2 packages.
|
||||
|
||||
If a project already contains the word @code{python}, please do not
|
||||
repeat it; for instance, the module python-dateutil is packaged under
|
||||
the name @code{python-dateutil}. If the project name starts with
|
||||
@code{py}, it is kept and prefixed as described above (e.g.@:
|
||||
@code{python-pytz}).
|
||||
If a project already contains the word @code{python}, we drop this;
|
||||
for instance, the module python-dateutil is packaged under the names
|
||||
@code{python-dateutil} and @code{python2-dateutil}. If the project name
|
||||
starts with @code{py} (e.g.@: @code{pytz}), we keep it and prefix it as
|
||||
described above.
|
||||
|
||||
@quotation Note
|
||||
The standard build system for Python packages is Guix's implementation
|
||||
of the @url{https://peps.python.org/pep-0517/, formal Python standard}
|
||||
for specifying build requirements: @var{pyproject-build-system}.
|
||||
The @var{python-build-system} which corresponds to the way Python
|
||||
packages were built before PEP517, using the informally specified
|
||||
@file{setup.py} file, is now deprecated. @var{pyproject-build-system}
|
||||
will eventually be deprecated and renamed into
|
||||
@var{python-build-system} after its removal.
|
||||
Currently there are two different build systems for Python packages in Guix:
|
||||
@var{python-build-system} and @var{pyproject-build-system}. For the
|
||||
longest time, Python packages were built from an informally specified
|
||||
@file{setup.py} file. That worked amazingly well, considering Python's
|
||||
success, but was difficult to build tooling around. As a result, a host
|
||||
of alternative build systems emerged and the community eventually settled on a
|
||||
@url{https://peps.python.org/pep-0517/, formal standard} for specifying build
|
||||
requirements. @var{pyproject-build-system} is Guix's implementation of this
|
||||
standard. It is considered ``experimental'' in that it does not yet support
|
||||
all the various PEP-517 @emph{build backends}, but you are encouraged to try
|
||||
it for new Python packages and report any problems. It will eventually be
|
||||
deprecated and merged into @var{python-build-system}.
|
||||
@end quotation
|
||||
|
||||
@subsubsection Specifying Dependencies
|
||||
@@ -1535,20 +1546,21 @@ package source tree, with varying degrees of accuracy: in the
|
||||
@file{requirements.txt}, or in @file{tox.ini} (the latter mostly for
|
||||
test dependencies).
|
||||
|
||||
When editing a recipe for a Python package, the goal is to map these
|
||||
dependencies to the appropriate type of ``input'' (@pxref{package
|
||||
Your mission, when writing a recipe for a Python package, is to map
|
||||
these dependencies to the appropriate type of ``input'' (@pxref{package
|
||||
Reference, inputs}). Although the @code{pypi} importer normally does a
|
||||
good job (@pxref{Invoking guix import}), please verify the following
|
||||
check list to determine which dependency goes where.
|
||||
good job (@pxref{Invoking guix import}), you may want to check the
|
||||
following check list to determine which dependency goes where.
|
||||
|
||||
@itemize
|
||||
|
||||
@item
|
||||
Python is packaged @emph{without} @code{setuptools} and @code{pip}
|
||||
installed per default.
|
||||
We currently package Python with @code{setuptools} and @code{pip}
|
||||
installed per default. This is about to change, and users are encouraged
|
||||
to use @code{python-toolchain} if they want a build environment for Python.
|
||||
|
||||
@command{guix lint} will warn if @code{pip} or other unneeded
|
||||
native-inputs are added.
|
||||
@command{guix lint} will warn if @code{setuptools} or @code{pip} are
|
||||
added as native-inputs because they are generally not necessary.
|
||||
|
||||
@item
|
||||
Python dependencies required at run time go into
|
||||
@@ -1563,9 +1575,9 @@ Python packages required only at build time---e.g., those listed under
|
||||
for testing---e.g., those in @code{tests_require} or @file{tox.ini}---go into
|
||||
@code{native-inputs}. The rationale is that (1) they do not need to be
|
||||
propagated because they are not needed at run time, and (2) in a
|
||||
cross-compilation context, it's the target ``native'' input.
|
||||
cross-compilation context, it's the ``native'' input that we'd want.
|
||||
|
||||
Examples are the @code{pytest}, @code{mock}, and @code{stestr} test
|
||||
Examples are the @code{pytest}, @code{mock}, and @code{nose} test
|
||||
frameworks. Of course if any of these packages is also required at
|
||||
run-time, it needs to go to @code{propagated-inputs}.
|
||||
|
||||
@@ -1926,60 +1938,35 @@ keyword parameters for procedures that take more than four parameters.
|
||||
@node Submitting Patches
|
||||
@section Submitting Patches
|
||||
|
||||
@cindex pull requests
|
||||
@cindex patch submission
|
||||
Development is done using the Git distributed version control system.
|
||||
Thus, access to the repository is not strictly necessary. We welcome
|
||||
contributions as @dfn{pull requests} (PR) at
|
||||
@url{https://codeberg.org/guix/guix/pulls/}@footnote{Before January 1st,
|
||||
2026, changes would be submitted by email to
|
||||
@email{guix-patches@@gnu.org} and could be
|
||||
@uref{https://issues.guix.gnu.org, browsed online}. In accordance with
|
||||
@uref{https://codeberg.org/guix/guix-consensus-documents/src/branch/main/002-codeberg.md,
|
||||
Guix Consensus Document 002}, this method is no longer supported.}.
|
||||
|
||||
There are two ways to create a pull request:
|
||||
contributions in one of the following forms:
|
||||
|
||||
@itemize
|
||||
@item
|
||||
By creating a personal ``fork'' of @uref{https://codeberg.org/guix/guix,
|
||||
the repository}, creating a branch with your changes, and
|
||||
@uref{https://docs.codeberg.org/collaborating/pull-requests-and-git-flow/,
|
||||
submitting a pull request for that branch}.
|
||||
@cindex pull request, for contributions
|
||||
As a @dfn{pull request} (PR) at
|
||||
@url{https://codeberg.org/guix/guix/pulls/}. This is now the preferred
|
||||
form.
|
||||
|
||||
@item
|
||||
@cindex AGit workflow, for pull requests
|
||||
By following the @uref{https://forgejo.org/docs/next/user/agit-support/,
|
||||
@dfn{AGit workflow}}, which is somewhat more convenient and consumes
|
||||
less disk space at Codeberg since it removes the need to create a
|
||||
``fork''.
|
||||
Until December 31st, 2025@footnote{This date is the result of a decision
|
||||
made collectively in
|
||||
@uref{https://codeberg.org/guix/guix-consensus-documents/src/branch/main/002-codeberg.md,
|
||||
Guix Consensus Document 002} in May 2025.}, you may also send patches as
|
||||
produced by @code{git format-patch} to the @email{guix-patches@@gnu.org}
|
||||
mailing list (@pxref{Submitting patches to a project,,, git, Git User
|
||||
Manual}).
|
||||
|
||||
Assuming your local checkout is on the branch containing the changes you
|
||||
would like to submit for inclusion in the @code{master} branch, run:
|
||||
|
||||
@example
|
||||
git push origin HEAD:refs/for/master \
|
||||
-o topic=@var{topic} \
|
||||
-o title=@var{title} -o description=@var{description}
|
||||
@end example
|
||||
|
||||
@var{topic} must be an identifier without whitespace, similar to a
|
||||
branch name; @var{title} and @var{description} are arbitrary text that
|
||||
can be omitted, in which case the message of the last commit on the
|
||||
branch fills that role.
|
||||
|
||||
To send an update to an AGit pull request of yours, run:
|
||||
|
||||
@example
|
||||
git push origin HEAD:refs/for/master \
|
||||
-o topic=@var{topic} -o force-push=yes
|
||||
@end example
|
||||
|
||||
Codeberg automatically figures out which pull request @var{topic}
|
||||
corresponds to and updates the associated branch.
|
||||
This mailing list is backed by a Debbugs instance, which allows us to
|
||||
keep track of submissions (@pxref{Tracking Bugs and Changes}).
|
||||
Each message sent to that mailing list gets a new tracking number
|
||||
assigned; people can then follow up on the submission by sending email
|
||||
to @code{@var{ISSUE_NUMBER}@@debbugs.gnu.org}, where @var{ISSUE_NUMBER}
|
||||
is the tracking number (@pxref{Sending a Patch Series}).
|
||||
@end itemize
|
||||
|
||||
Contributors are encouraged to take a moment to set some Git
|
||||
Either way, contributors are encouraged to take a moment to set some Git
|
||||
repository options (@pxref{Configuring Git}) first, which can improve
|
||||
the readability of patches. Seasoned Guix developers may also want to
|
||||
look at the section on commit access (@pxref{Commit Access}).
|
||||
@@ -2146,13 +2133,36 @@ guix pull --url=/path/to/your/checkout --profile=/tmp/guix.master --disable-auth
|
||||
|
||||
@end enumerate
|
||||
|
||||
When posting a patch to the mailing list, use @samp{[PATCH] @dots{}} as
|
||||
a subject, if your patch is to be applied on a branch other than
|
||||
@code{master}, say @code{core-updates}, specify it in the subject like
|
||||
@samp{[PATCH core-updates] @dots{}}.
|
||||
|
||||
You may use your email client, the @command{git send-email} command
|
||||
(@pxref{Sending a Patch Series}) or the @command{mumi send-email}
|
||||
command (@pxref{Debbugs User Interfaces}). We prefer to get patches in
|
||||
plain text messages, either inline or as MIME attachments. You are
|
||||
advised to pay attention if your email client changes anything like line
|
||||
breaks or indentation which could potentially break the patches.
|
||||
|
||||
Expect some delay when you submit your very first patch to
|
||||
@email{guix-patches@@gnu.org}. You have to wait until you get an
|
||||
acknowledgement with the assigned tracking number. Future acknowledgements
|
||||
should not be delayed.
|
||||
|
||||
When a bug is resolved, please close the thread by sending an email to
|
||||
@email{@var{ISSUE_NUMBER}-done@@debbugs.gnu.org}.
|
||||
|
||||
@menu
|
||||
* Configuring Git::
|
||||
* Sending a Patch Series::
|
||||
@end menu
|
||||
|
||||
@node Configuring Git
|
||||
@subsection Configuring Git
|
||||
@cindex git configuration
|
||||
@cindex @code{git format-patch}
|
||||
@cindex @code{git send-email}
|
||||
|
||||
If you have not done so already, you may wish to set a name and email
|
||||
that will be associated with your commits (@pxref{telling git your name,
|
||||
@@ -2172,6 +2182,166 @@ changes was already submitted for review. If you have a
|
||||
@file{commit-msg} hook of your own you would like to use with Guix, you
|
||||
can place it under the @file{.git/hooks/commit-msg.d/} directory.
|
||||
|
||||
@node Sending a Patch Series
|
||||
@subsection Sending a Patch Series
|
||||
@cindex patch series
|
||||
@cindex @code{git send-email}
|
||||
@cindex @code{git format-patch}
|
||||
|
||||
@quotation Warning
|
||||
This section is about contributing code by sending patches by email.
|
||||
This option is supported until December 31st, 2025, but we recommend
|
||||
getting familiar with the @dfn{pull request} workflow, which will become
|
||||
the norm after that date. @xref{Submitting Patches}, for more info.
|
||||
@end quotation
|
||||
|
||||
@unnumberedsubsubsec Single Patches
|
||||
@anchor{Single Patches}
|
||||
The @command{git send-email} command is the best way to send both single
|
||||
patches and patch series (@pxref{Multiple Patches}) to the Guix mailing
|
||||
list. Sending patches as email attachments may make them difficult to
|
||||
review in some mail clients, and @command{git diff} does not store commit
|
||||
metadata.
|
||||
|
||||
@quotation Note
|
||||
The @command{git send-email} command is provided by the @code{send-email}
|
||||
output of the @code{git} package, i.e. @code{git:send-email}.
|
||||
@end quotation
|
||||
|
||||
The following command will create a patch email from the latest commit,
|
||||
open it in your @var{EDITOR} or @var{VISUAL} for editing, and send it to
|
||||
the Guix mailing list to be reviewed and merged. Assuming you have
|
||||
already configured Git according to @xref{Configuring Git}, you can
|
||||
simply use:
|
||||
|
||||
@example
|
||||
$ git send-email --annotate -1
|
||||
@end example
|
||||
|
||||
@quotation Tip
|
||||
To add a prefix to the subject of your patch, you may use the
|
||||
@option{--subject-prefix} option. The Guix project uses this to
|
||||
specify that the patch is intended for a branch or repository
|
||||
other than the @code{master} branch of
|
||||
@url{https://codeberg.org/guix/guix.git}.
|
||||
|
||||
@example
|
||||
git send-email --annotate --subject-prefix='PATCH core-updates' -1
|
||||
@end example
|
||||
@end quotation
|
||||
|
||||
The patch email contains a three-dash separator line after the commit
|
||||
message. You may ``annotate'' the patch with explanatory text by adding
|
||||
it under this line. If you do not wish to annotate the email, you may
|
||||
drop the @option{--annotate} option.
|
||||
|
||||
If you need to send a revised patch, don't resend it like this or send
|
||||
a ``fix'' patch to be applied on top of the last one; instead, use
|
||||
@command{git commit --amend} or @url{https://git-rebase.io,
|
||||
@command{git rebase}} to modify the commit, and use the
|
||||
@email{@var{ISSUE_NUMBER}@@debbugs.gnu.org} address and the @option{-v}
|
||||
flag with @command{git send-email}.
|
||||
|
||||
@example
|
||||
$ git commit --amend
|
||||
$ git send-email --annotate -v@var{REVISION} \
|
||||
--to=@var{ISSUE_NUMBER}@@debbugs.gnu.org -1
|
||||
@end example
|
||||
|
||||
@quotation Note
|
||||
Due to an apparent bug in @command{git send-email},
|
||||
@option{-v @var{REVISION}} (with the space) will not work; you
|
||||
@emph{must} use @option{-v@var{REVISION}}.
|
||||
@end quotation
|
||||
|
||||
You can find out @var{ISSUE_NUMBER} either by searching on the mumi
|
||||
interface at @url{https://issues.guix.gnu.org} for the name of your patch or
|
||||
reading the acknowledgement email sent automatically by Debbugs in
|
||||
reply to incoming bugs and patches, which contains the bug number.
|
||||
|
||||
@unnumberedsubsubsec Notifying Teams
|
||||
@anchor{Notifying Teams}
|
||||
@cindex teams
|
||||
If your git checkout has been correctly configured (@pxref{Configuring
|
||||
Git}), the @command{git send-email} command will automatically notify
|
||||
the appropriate team members, based on the scope of your changes. This
|
||||
relies on the @file{etc/teams.scm} script, which can also be invoked
|
||||
manually if you do not use the preferred @command{git send-email}
|
||||
command to submit patches. To list the available actions of the script,
|
||||
you can invoke it via the @command{etc/teams.scm help} command. For
|
||||
more information regarding teams, @pxref{Teams}.
|
||||
|
||||
@quotation Note
|
||||
On foreign distros, you might have to use @command{./pre-inst-env git
|
||||
send-email} for @file{etc/teams.scm} to work.
|
||||
@end quotation
|
||||
|
||||
@unnumberedsubsubsec Multiple Patches
|
||||
@anchor{Multiple Patches}
|
||||
@cindex cover letter
|
||||
While @command{git send-email} alone will suffice for a single
|
||||
patch, an unfortunate flaw in Debbugs means you need to be more
|
||||
careful when sending multiple patches: if you send them all to the
|
||||
@email{guix-patches@@gnu.org} address, a new issue will be created
|
||||
for each patch!
|
||||
|
||||
When sending a series of patches, it's best to send a Git ``cover
|
||||
letter'' first, to give reviewers an overview of the patch series.
|
||||
We can create a directory called @file{outgoing} containing both
|
||||
our patch series and a cover letter called @file{0000-cover-letter.patch}
|
||||
with @command{git format-patch}.
|
||||
|
||||
@example
|
||||
$ git format-patch -@var{NUMBER_COMMITS} -o outgoing \
|
||||
--cover-letter
|
||||
@end example
|
||||
|
||||
@quotation Note
|
||||
@code{git format-patch} accepts a wide range of
|
||||
@uref{https://git-scm.com/docs/gitrevisions, revision range} specifiers.
|
||||
For example, if you are working in a branch, you could select all commits
|
||||
in your branch starting at @code{master}.
|
||||
|
||||
@example
|
||||
$ git format-patch master..@var{MY_BRANCH} -o outgoing \
|
||||
--cover-letter
|
||||
@end example
|
||||
@end quotation
|
||||
|
||||
We can now send @emph{just} the cover letter to the
|
||||
@email{guix-patches@@gnu.org} address, which will create an issue
|
||||
that we can send the rest of the patches to.
|
||||
|
||||
@example
|
||||
$ git send-email outgoing/0000-cover-letter.patch --annotate
|
||||
$ rm outgoing/0000-cover-letter.patch # we don't want to resend it!
|
||||
@end example
|
||||
|
||||
Ensure you edit the email to add an appropriate subject line and
|
||||
blurb before sending it. Note the automatically generated shortlog
|
||||
and diffstat below the blurb.
|
||||
|
||||
Once the Debbugs mailer has replied to your cover letter email, you
|
||||
can send the actual patches to the newly-created issue address.
|
||||
|
||||
@example
|
||||
$ git send-email outgoing/*.patch --to=@var{ISSUE_NUMBER}@@debbugs.gnu.org
|
||||
$ rm -rf outgoing # we don't need these anymore
|
||||
@end example
|
||||
|
||||
Thankfully, this @command{git format-patch} dance is not necessary
|
||||
to send an amended patch series, since an issue already exists for
|
||||
the patchset.
|
||||
|
||||
@example
|
||||
$ git send-email -@var{NUMBER_COMMITS} -v@var{REVISION} \
|
||||
--to=@var{ISSUE_NUMBER}@@debbugs.gnu.org
|
||||
@end example
|
||||
|
||||
If need be, you may use @option{--cover-letter --annotate} to send
|
||||
another cover letter, e.g. for explaining what's changed since the last
|
||||
revision, and why these changes are necessary.
|
||||
|
||||
@node Tracking Bugs and Changes
|
||||
@section Tracking Bugs and Changes
|
||||
|
||||
@@ -2182,26 +2352,31 @@ patch submissions and topic branches.
|
||||
* The Issue Tracker:: The official bug and patch tracker.
|
||||
* Managing Patches and Branches:: How changes to Guix are managed.
|
||||
* Debbugs User Interfaces:: Ways to interact with Debbugs.
|
||||
* Debbugs Usertags:: Tag reports with custom labels.
|
||||
* Cuirass Build Notifications:: Be alerted of any breakage via RSS feeds.
|
||||
@end menu
|
||||
|
||||
@node The Issue Tracker
|
||||
@subsection The Issue Tracker
|
||||
|
||||
@cindex email workflow, deprecated
|
||||
@cindex issue tracker, for the email workflow
|
||||
@cindex bug reports, tracking
|
||||
@cindex patch submissions, tracking
|
||||
@cindex issue tracking
|
||||
@cindex Debbugs, issue tracking system
|
||||
Bug reports (@dfn{issues}) and patch submissions (@dfn{pull requests})
|
||||
are currently tracked at the @uref{https://codeberg.org/guix/guix,
|
||||
project's home at Codeberg}.
|
||||
|
||||
Before January 1st, 2026, bug reports and patches were tracked using the
|
||||
Debbugs instance at @uref{https://bugs.gnu.org}, which can also be
|
||||
browsed at @uref{https://issues.guix.gnu.org}. This has been
|
||||
discontinued and Codeberg is now the sole option to report new bugs and
|
||||
propose new changes@footnote{Check out
|
||||
Before May 25th, 2025, bug reports and patches were exclusively tracked
|
||||
using the Debbugs instance at @uref{https://bugs.gnu.org}; it may still
|
||||
be used for these purposes until December 31st, 2025, after which
|
||||
Codeberg will become the sole option to report new bugs and propose new
|
||||
changes@footnote{Check out
|
||||
@uref{https://codeberg.org/guix/guix-consensus-documents/src/branch/main/002-codeberg.md,
|
||||
Guix Consensus Document 002} for details on this decision.}.
|
||||
Guix Consensus Document 002} for details on this decision.}. With
|
||||
Debbugs, bug reports are sent by email to @email{bug-guix@@gnu.org} and
|
||||
patches are sent to @email{guix-patches@@gnu.org} (@pxref{Submitting
|
||||
Patches}).
|
||||
|
||||
@node Managing Patches and Branches
|
||||
@subsection Managing Patches and Branches
|
||||
@@ -2313,10 +2488,11 @@ only then should the merge requests be created, as documented earlier.
|
||||
|
||||
@quotation Warning
|
||||
This section is about bug reports and patches sent by email to
|
||||
@uref{https://issues.guix.gnu.org, Debbugs}, which is discontinued.
|
||||
Since January 1st, 2026, bug reports and patches are submitted as issues
|
||||
and pull requests on @uref{https://codeberg.org/guix/guix, Codeberg}.
|
||||
@xref{Submitting Patches}, for more info.
|
||||
@uref{https://issues.guix.gnu.org, Debbugs}. This option is supported
|
||||
until December 31st, 2025, after which
|
||||
@uref{https://codeberg.org/guix/guix, Codeberg} will be the only
|
||||
interface for submitting bug reports and changes. @xref{Submitting
|
||||
Patches}, for more info.
|
||||
@end quotation
|
||||
|
||||
@subsubsection Web interface
|
||||
@@ -2496,8 +2672,8 @@ For example, to list all open issues on @code{guix-patches}, hit:
|
||||
For a more convenient (shorter) way to access both the bugs and patches
|
||||
submissions, you may want to configure the
|
||||
@code{debbugs-gnu-default-packages} and
|
||||
@code{debbugs-gnu-default-severities} Emacs variables (@pxref{Minor
|
||||
Mode,,, debbugs-ug, The Debbugs User Guide}).
|
||||
@code{debbugs-gnu-default-severities} Emacs variables (@pxref{Viewing
|
||||
Bugs within Emacs}).
|
||||
|
||||
To search for bugs, @samp{@kbd{M-x} debbugs-gnu-guix-search} can be
|
||||
used.
|
||||
@@ -2505,6 +2681,63 @@ used.
|
||||
@xref{Top,,, debbugs-ug, Debbugs User Guide}, for more information on
|
||||
this nifty tool!
|
||||
|
||||
@node Debbugs Usertags
|
||||
@subsection Debbugs Usertags
|
||||
|
||||
@cindex usertags, for debbugs
|
||||
@cindex Debbugs usertags
|
||||
Debbugs provides a feature called @dfn{usertags} that allows any user to
|
||||
tag any bug with an arbitrary label. Bugs can be searched by usertag,
|
||||
so this is a handy way to organize bugs@footnote{The list of usertags is
|
||||
public information, and anyone can modify any user's list of usertags,
|
||||
so keep that in mind if you choose to use this feature.}. If you use
|
||||
Emacs Debbugs, the entry-point to consult existing usertags is the
|
||||
@samp{C-u M-x debbugs-gnu-usertags} procedure. To set a usertag, press
|
||||
@samp{C} while consulting a bug within the *Guix-Patches* buffer opened
|
||||
with @samp{C-u M-x debbugs-gnu-bugs} buffer, then select @code{usertag}
|
||||
and follow the instructions.
|
||||
|
||||
For example, to view all the bug reports (or patches, in the case of
|
||||
@code{guix-patches}) tagged with the usertag @code{powerpc64le-linux}
|
||||
for the user @code{guix}, open a URL like the following in a web
|
||||
browser:
|
||||
@url{https://debbugs.gnu.org/cgi-bin/pkgreport.cgi?tag=powerpc64le-linux;users=guix}.
|
||||
|
||||
For more information on how to use usertags, please refer to the
|
||||
documentation for Debbugs or the documentation for whatever tool you use
|
||||
to interact with Debbugs.
|
||||
|
||||
In Guix, we are experimenting with usertags to keep track of
|
||||
architecture-specific issues, as well as reviewed ones. To facilitate
|
||||
collaboration, all our usertags are associated with the single user
|
||||
@code{guix}. The following usertags currently exist for that user:
|
||||
|
||||
@table @code
|
||||
|
||||
@item powerpc64le-linux
|
||||
The purpose of this usertag is to make it easy to find the issues that
|
||||
matter most for the @code{powerpc64le-linux} system type. Please assign
|
||||
this usertag to bugs or patches that affect @code{powerpc64le-linux} but
|
||||
not other system types. In addition, you may use it to identify issues
|
||||
that for some reason are particularly important for the
|
||||
@code{powerpc64le-linux} system type, even if the issue affects other
|
||||
system types, too.
|
||||
|
||||
@item reproducibility
|
||||
For issues related to reproducibility. For example, it would be
|
||||
appropriate to assign this usertag to a bug report for a package that
|
||||
fails to build reproducibly.
|
||||
|
||||
@item reviewed-looks-good
|
||||
You have reviewed the series and it looks good to you (LGTM).
|
||||
|
||||
@end table
|
||||
|
||||
If you're a committer and you want to add a usertag, just start using it
|
||||
with the @code{guix} user. If the usertag proves useful to you,
|
||||
consider updating this section of the manual so that others will know
|
||||
what your usertag means.
|
||||
|
||||
@node Cuirass Build Notifications
|
||||
@subsection Cuirass Build Notifications
|
||||
|
||||
@@ -3006,7 +3239,7 @@ to that commit message.
|
||||
|
||||
If you are not a committer, you can help others find a @emph{series} you
|
||||
have reviewed more easily by adding a @code{reviewed-looks-good} usertag
|
||||
for the @code{guix} user.
|
||||
for the @code{guix} user (@pxref{Debbugs Usertags}).
|
||||
|
||||
@node Updating the Guix Package
|
||||
@section Updating the Guix Package
|
||||
@@ -3111,21 +3344,13 @@ for @b{at least one year}. For example, @code{go-ipfs} was renamed to
|
||||
change to users, the package module provided this definition:
|
||||
|
||||
@findex deprecated-package
|
||||
@findex define-deprecated-package
|
||||
@lisp
|
||||
(define-deprecated-package go-ipfs
|
||||
kubo)
|
||||
(define-public go-ipfs
|
||||
(deprecated-package "go-ipfs" kubo))
|
||||
@end lisp
|
||||
|
||||
That way, someone running @command{guix install go-ipfs} or similar sees
|
||||
a deprecation warning mentioning the new package name; likewise, someone
|
||||
referring to the @code{go-ipfs} @emph{variable} from their manifest or
|
||||
package definition will see a warning.
|
||||
|
||||
Under the hood, @code{define-deprecated-package} combines
|
||||
@code{define-deprecated/public-alias} to mark the variable as deprecated
|
||||
(see below), and the @code{deprecated-package} procedure to mark the
|
||||
package name as deprecated.
|
||||
a deprecation warning mentioning the new name.
|
||||
|
||||
@cindex package removal policy
|
||||
@anchor{package-removal-policy}
|
||||
@@ -3135,8 +3360,8 @@ of life'' or being unmaintained may be removed; likewise, packages that
|
||||
have been @b{failing to build for two months or more} may be removed.
|
||||
|
||||
There is no formal deprecation mechanism for this case, unless a
|
||||
replacement exists, in which case the @code{define-deprecated-package}
|
||||
macro mentioned above can be used.
|
||||
replacement exists, in which case the @code{deprecated-package}
|
||||
procedure mentioned above can be used.
|
||||
|
||||
If the package being removed is a ``leaf'' (no other packages depend on
|
||||
it), it may be removed after a @b{one-month review period} of the patch
|
||||
|
||||
+32
-59
@@ -22,7 +22,7 @@ Copyright @copyright{} 2020 André Batista@*
|
||||
Copyright @copyright{} 2020 Christine Lemmer-Webber@*
|
||||
Copyright @copyright{} 2021 Joshua Branson@*
|
||||
Copyright @copyright{} 2022, 2023 Maxim Cournoyer@*
|
||||
Copyright @copyright{} 2023--2026 Ludovic Courtès@*
|
||||
Copyright @copyright{} 2023-2025 Ludovic Courtès@*
|
||||
Copyright @copyright{} 2023 Thomas Ieong@*
|
||||
Copyright @copyright{} 2024 Florian Pelz@*
|
||||
Copyright @copyright{} 2025 45mg@*
|
||||
@@ -77,9 +77,8 @@ Italian (@pxref{Top,,, guix-cookbook.it, Ricettario di GNU Guix}),
|
||||
Brazilian Portuguese (@pxref{Top,,, guix-cookbook.pt_BR,
|
||||
Livro de receitas do GNU Guix}), Russian (@pxref{Top,,, guix-cookbook.ru,
|
||||
GNU Guix Рецепты}), Slovak (@pxref{Top,,, guix-cookbook.sk,
|
||||
Receptár GNU Guix}), Swedish (@pxref{Top,,, guix-cookbook.sv,
|
||||
Kokbok för GNU Guix}), and Tamil (@pxref{Top,,, guix-cookbook.ta,
|
||||
GNU Guix கையேடு}). If you would like to translate
|
||||
Receptár GNU Guix}), and Swedish (@pxref{Top,,, guix-cookbook.sv,
|
||||
Kokbok för GNU Guix}). If you would like to translate
|
||||
this document in your native language, consider joining
|
||||
@uref{https://translate.codeberg.org/projects/guix/documentation-cookbook,
|
||||
Weblate} (@pxref{Translating Guix,,, guix, GNU Guix Reference
|
||||
@@ -293,7 +292,7 @@ Examples of valid expressions:
|
||||
@result{} 17
|
||||
|
||||
(display (string-append "Hello " "Guix" "\n"))
|
||||
@print{} Hello Guix
|
||||
@print{} Hello Guix!
|
||||
@result{} #<unspecified>
|
||||
@end lisp
|
||||
|
||||
@@ -505,6 +504,10 @@ selection of documents to learn more about Scheme:
|
||||
@uref{https://spritely.institute/static/papers/scheme-primer.html, @i{A
|
||||
Scheme Primer}}, by Christine Lemmer-Webber and the Spritely Institute.
|
||||
|
||||
@item
|
||||
@uref{http://www.troubleshooters.com/codecorn/scheme_guile/hello.htm,
|
||||
@i{Scheme at a Glance}}, by Steve Litt.
|
||||
|
||||
@item
|
||||
@c There used to be a copy at mitpress.mit.edu but it vanished.
|
||||
@uref{https://sarabander.github.io/sicp/,
|
||||
@@ -515,7 +518,7 @@ as ``SICP'', this book is a reference.
|
||||
You can also install it and read it from your computer:
|
||||
|
||||
@example
|
||||
guix install book-sicp info-reader
|
||||
guix install sicp info-reader
|
||||
info sicp
|
||||
@end example
|
||||
|
||||
@@ -523,9 +526,6 @@ info sicp
|
||||
|
||||
You'll find more books, tutorials and other resources at
|
||||
@url{https://schemers.org/}.
|
||||
|
||||
@xref{The Perfect Setup,,, guix, GNU Guix Reference Manual}, on how to
|
||||
set up your editor for Scheme hacking.
|
||||
@end quotation
|
||||
|
||||
|
||||
@@ -1737,8 +1737,8 @@ At this stage, the package @code{cargo-audit} is buildable.
|
||||
|
||||
@item
|
||||
Finally we'll unbundle the vendored dependencies. The lockfile importer
|
||||
inserts @code{TODO REVIEW:} comments for libraries with high probability
|
||||
of bundled dependencies. @code{cargo-build-system} also performs
|
||||
inserts @code{TODO:} comments for libraries with high probability of
|
||||
bundled dependencies. @code{cargo-build-system} also performs
|
||||
additional check for binary files in its
|
||||
@code{check-for-pregenerated-files} phase, which usually indicates
|
||||
bundling:
|
||||
@@ -1912,11 +1912,11 @@ Don't forget to modify all workspace members in @code{(gnu packages
|
||||
rust-crates)}:
|
||||
|
||||
@lisp
|
||||
(define rust-pipewire-0.8.0.fd3d8f7 package:rust-pipewire-0.8.0.fd3d8f7)
|
||||
(define rust-pipewire-sys-0.8.0.fd3d8f7 package:rust-pipewire-0.8.0.fd3d8f7)
|
||||
(define rust-pipewire-0.8.0.fd3d8f7 rust-pipewire-0.8.0.fd3d8f7)
|
||||
(define rust-pipewire-sys-0.8.0.fd3d8f7 rust-pipewire-0.8.0.fd3d8f7)
|
||||
@dots{}
|
||||
(define rust-libspa-0.8.0.fd3d8f7 package:rust-pipewire-0.8.0.fd3d8f7)
|
||||
(define rust-libspa-sys-0.8.0.fd3d8f7 package:rust-pipewire-0.8.0.fd3d8f7)
|
||||
(define rust-libspa-0.8.0.fd3d8f7 rust-pipewire-0.8.0.fd3d8f7)
|
||||
(define rust-libspa-sys-0.8.0.fd3d8f7 rust-pipewire-0.8.0.fd3d8f7)
|
||||
@end lisp
|
||||
|
||||
@node Using Rust Libraries in Other Build Systems
|
||||
@@ -5297,7 +5297,7 @@ did above with transformation options. We can add them like so:
|
||||
"Return P with FLAGS as additional 'configure' flags."
|
||||
(package/inherit p
|
||||
(arguments
|
||||
(substitute-keyword-arguments arguments
|
||||
(substitute-keyword-arguments (package-arguments p)
|
||||
((#:configure-flags original-flags #~(list))
|
||||
#~(append #$original-flags #$flags))))))
|
||||
|
||||
@@ -5737,9 +5737,9 @@ packages:
|
||||
guix shell -C gcc-toolchain cmake coreutils grep sed make -- @dots{}
|
||||
@end example
|
||||
|
||||
Or perhaps you'll find that you could just as well provide a package
|
||||
definition for your code---@pxref{Defining Packages,,, guix, GNU Guix
|
||||
Reference Manual}, to learn more on how to do that.
|
||||
Or perhaps you'll find that you could just as well provide a definition
|
||||
for your package---@pxref{Defining Packages,,, guix, GNU Guix Reference
|
||||
Manual}, to learn more on how to do that.
|
||||
|
||||
Eventually, you'll have a list of packages that satisfies your needs.
|
||||
|
||||
@@ -5961,15 +5961,6 @@ installation instructions (@pxref{Binary Installation,,, guix, GNU Guix
|
||||
Reference Manual}). Thanks to the installation script, this should be
|
||||
quick. Once installation is complete, we need to make some adjustments.
|
||||
|
||||
@quotation Note
|
||||
Starting from Guix version 1.5.0, @command{guix-daemon} runs without
|
||||
root privileges by default; previously installed systems can also be
|
||||
migrated to this ``rootless'' mode (@pxref{Build Environment Setup,,,
|
||||
guix, GNU Guix Reference Manual}). Learn more about this change in a
|
||||
@uref{https://hpc.guix.info/blog/2025/03/build-daemon-drops-its-privileges/,
|
||||
2025 blog post}.
|
||||
@end quotation
|
||||
|
||||
Since we want @code{guix-daemon} to be reachable not just from the head
|
||||
node but also from the compute nodes, we need to arrange so that it
|
||||
listens for connections over TCP/IP. To do that, we'll edit the systemd
|
||||
@@ -5984,12 +5975,13 @@ something like this:
|
||||
@ifnothtml
|
||||
@example
|
||||
ExecStart=/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon \
|
||||
--build-users-group=guixbuild \
|
||||
--listen=/var/guix/daemon-socket/socket --listen=0.0.0.0
|
||||
@end example
|
||||
@end ifnothtml
|
||||
@ifhtml
|
||||
@example
|
||||
ExecStart=/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --listen=/var/guix/daemon-socket/socket --listen=0.0.0.0
|
||||
ExecStart=/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild --listen=/var/guix/daemon-socket/socket --listen=0.0.0.0
|
||||
@end example
|
||||
@end ifhtml
|
||||
|
||||
@@ -6025,51 +6017,32 @@ The @file{/gnu/store} directory can be exported read-only since only
|
||||
package}; thus, to allow users to install packages with @code{guix
|
||||
package}, this must be read-write.
|
||||
|
||||
@quotation Note
|
||||
Although it is rarely used, Guix allows for the creation of profiles in
|
||||
non-default locations. For instance, @code{guix package -p
|
||||
~/dev/python-dev -i python} installs Python in a profile reachable from
|
||||
the @code{~/dev/python-dev} symlink instead of the default
|
||||
@file{~/.guix-profile}.
|
||||
|
||||
To make sure that
|
||||
Users can create as many profiles as they like in addition to the
|
||||
default profile, @file{~/.guix-profile}. For instance, @code{guix
|
||||
package -p ~/dev/python-dev -i python} installs Python in a profile
|
||||
reachable from the @code{~/dev/python-dev} symlink. To make sure that
|
||||
this profile is protected from garbage collection---i.e., that Python
|
||||
will not be removed from @file{/gnu/store} while this profile exists---,
|
||||
@emph{home directories should be mounted on the head node} as well so
|
||||
that @code{guix-daemon} knows about these non-standard profiles and
|
||||
avoids collecting software they refer to.
|
||||
|
||||
@c The following paragraph refers to Guix commit
|
||||
@c d12c4452a49b355369636de1dfc766b5bad6437b, which changed
|
||||
@c 'time-machine' and 'shell' to store GC roots under /var/guix.
|
||||
Doing so is optional though: profiles created by default by
|
||||
@command{guix package}, @command{guix pull}, and @command{guix shell}
|
||||
are all stored under @file{/var/guix} and thus protected from garbage
|
||||
collection.
|
||||
@end quotation
|
||||
|
||||
It may be a good idea to periodically remove unused bits from
|
||||
@file{/gnu/store} by running @command{guix gc} (@pxref{Invoking guix
|
||||
gc,,, guix, GNU Guix Reference Manual}). This can be done by adding a
|
||||
systemd timer based on the one shipped with Guix:
|
||||
crontab entry on the head node:
|
||||
|
||||
@example
|
||||
cp \
|
||||
/var/guix/profiles/per-user/root/current-guix/lib/systemd/system/guix-gc.* \
|
||||
/etc/systemd/system
|
||||
root@@master# crontab -e
|
||||
@end example
|
||||
|
||||
Make sure to edit @file{guix-gc.service} and @file{guix-gc.timer} under
|
||||
@file{/etc/systemd/system} to adjust the parameters to your need: timer
|
||||
frequency, amount of free space, and whether to delete user's old
|
||||
generations. We recommend executing @command{guix gc -F50G} every
|
||||
night, which will ensure that at least 50@tie{}GiB are available,
|
||||
without deleting user generations. Once you're satisfied, you can start
|
||||
the timer:
|
||||
@noindent
|
||||
... with something like this:
|
||||
|
||||
@example
|
||||
systemctl daemon-reload
|
||||
systemctl start guix-gc.timer
|
||||
# Every day at 5AM, run the garbage collector to make sure
|
||||
# at least 10 GB are free on /gnu/store.
|
||||
0 5 * * 1 /usr/local/bin/guix gc -F10G
|
||||
@end example
|
||||
|
||||
We're done with the head node! Let's look at compute nodes now.
|
||||
|
||||
+331
-2306
File diff suppressed because it is too large
Load Diff
@@ -13,9 +13,8 @@
|
||||
(service home-bash-service-type
|
||||
(home-bash-configuration
|
||||
(guix-defaults? #t)
|
||||
(variables
|
||||
`(("HISTFILE" . "$XDG_CACHE_HOME/.bash_history")
|
||||
("HISTSIZE" . "50000")))))
|
||||
(bash-profile (list (plain-file "bash-profile" "\
|
||||
export HISTFILE=$XDG_CACHE_HOME/.bash_history")))))
|
||||
|
||||
(simple-service 'test-config
|
||||
home-xdg-configuration-files-service-type
|
||||
|
||||
+2
-55
@@ -2,58 +2,7 @@
|
||||
# Modified by Ludovic Courtès <ludo@gnu.org> for the GNU Guix manual.
|
||||
# Further modified by Tomas Volf <~@wolfsden.cz>.
|
||||
|
||||
htmlxrefversion=2026-02-23.07; # UTC
|
||||
|
||||
# Override URLs of manuals provided by the Documentation Center.
|
||||
|
||||
DOCUMENTATION_CENTER = https://doc.guix.gnu.org
|
||||
|
||||
bash mono ${DOCUMENTATION_CENTER}/bash/latest/en/bash.html
|
||||
bash node ${DOCUMENTATION_CENTER}/bash/latest/en/html_node
|
||||
binutils mono ${DOCUMENTATION_CENTER}/binutils/latest/en/binutils.html
|
||||
binutils node ${DOCUMENTATION_CENTER}/binutils/latest/en/html_node
|
||||
cuirass mono ${DOCUMENTATION_CENTER}/cuirass/latest/en/cuirass.html
|
||||
cuirass node ${DOCUMENTATION_CENTER}/cuirass/latest/en/html_node
|
||||
emacs-guix mono ${DOCUMENTATION_CENTER}/emacs-guix/latest/en/emacs-guix.html
|
||||
emacs-guix node ${DOCUMENTATION_CENTER}/emacs-guix/latest/en/html_node
|
||||
fibers mono ${DOCUMENTATION_CENTER}/fibers/latest/en/fibers.html
|
||||
fibers node ${DOCUMENTATION_CENTER}/fibers/latest/en/html_node
|
||||
gash mono ${DOCUMENTATION_CENTER}/gash/latest/en/gash.html
|
||||
gash node ${DOCUMENTATION_CENTER}/gash/latest/en/html_node
|
||||
gcrypt mono ${DOCUMENTATION_CENTER}/gcrypt/latest/en/gcrypt.html
|
||||
gcrypt node ${DOCUMENTATION_CENTER}/gcrypt/latest/en/html_node
|
||||
gdb mono ${DOCUMENTATION_CENTER}/gdb/latest/en/gdb.html
|
||||
gdb node ${DOCUMENTATION_CENTER}/gdb/latest/en/html_node
|
||||
geiser mono ${DOCUMENTATION_CENTER}/geiser/latest/en/geiser.html
|
||||
geiser node ${DOCUMENTATION_CENTER}/geiser/latest/en/html_node
|
||||
grub mono ${DOCUMENTATION_CENTER}/grub/latest/en/grub.html
|
||||
grub node ${DOCUMENTATION_CENTER}/grub/latest/en/html_node
|
||||
guile-avahi mono ${DOCUMENTATION_CENTER}/guile-avahi/latest/en/guile-avahi.html
|
||||
guile-avahi node ${DOCUMENTATION_CENTER}/guile-avahi/latest/en/html_node
|
||||
guile-gcrypt mono ${DOCUMENTATION_CENTER}/guile-gcrypt/latest/en/guile-gcrypt.html
|
||||
guile-gcrypt node ${DOCUMENTATION_CENTER}/guile-gcrypt/latest/en/html_node
|
||||
guile-gnutls mono ${DOCUMENTATION_CENTER}/guile-gnutls/latest/en/guile-gnutls.html
|
||||
guile-gnutls node ${DOCUMENTATION_CENTER}/guile-gnutls/latest/en/html_node
|
||||
guile-library mono ${DOCUMENTATION_CENTER}/guile-library/latest/en/guile-library.html
|
||||
guile-library node ${DOCUMENTATION_CENTER}/guile-library/latest/en/html_node
|
||||
guile mono ${DOCUMENTATION_CENTER}/guile/latest/en/guile.html
|
||||
guile-netlink mono ${DOCUMENTATION_CENTER}/guile-netlink/latest/en/guile-netlink.html
|
||||
guile-netlink node ${DOCUMENTATION_CENTER}/guile-netlink/latest/en/html_node
|
||||
guile node ${DOCUMENTATION_CENTER}/guile/latest/en/html_node
|
||||
guile-ssh mono ${DOCUMENTATION_CENTER}/guile-ssh/latest/en/guile-ssh.html
|
||||
guile-ssh node ${DOCUMENTATION_CENTER}/guile-ssh/latest/en/html_node
|
||||
inetutils mono ${DOCUMENTATION_CENTER}/inetutils/latest/en/inetutils.html
|
||||
inetutils node ${DOCUMENTATION_CENTER}/inetutils/latest/en/html_node
|
||||
libc mono ${DOCUMENTATION_CENTER}/libc/latest/en/libc.html
|
||||
libc node ${DOCUMENTATION_CENTER}/libc/latest/en/html_node
|
||||
mes mono ${DOCUMENTATION_CENTER}/mes/latest/en/mes.html
|
||||
mes node ${DOCUMENTATION_CENTER}/mes/latest/en/html_node
|
||||
r5rs mono ${DOCUMENTATION_CENTER}/r5rs/latest/en/r5rs.html
|
||||
r5rs node ${DOCUMENTATION_CENTER}/r5rs/latest/en/html_node
|
||||
recutils mono ${DOCUMENTATION_CENTER}/recutils/latest/en/recutils.html
|
||||
recutils node ${DOCUMENTATION_CENTER}/recutils/latest/en/html_node
|
||||
shepherd mono ${DOCUMENTATION_CENTER}/shepherd/latest/en/shepherd.html
|
||||
shepherd node ${DOCUMENTATION_CENTER}/shepherd/latest/en/html_node
|
||||
htmlxrefversion=2025-08-31.16; # UTC
|
||||
|
||||
# Copyright 2010-2020, 2022 Free Software Foundation, Inc.
|
||||
#
|
||||
@@ -467,7 +416,7 @@ guile-rpc mono ${GS}/guile-rpc/manual/guile-rpc.html
|
||||
guile-rpc node ${GS}/guile-rpc/manual/html_node/
|
||||
|
||||
GUIX_ROOT = https://guix.gnu.org
|
||||
GUIX = ${GUIX_ROOT}/manual/devel
|
||||
GUIX = ${GUIX_ROOT}/manual
|
||||
guix.de mono ${GUIX}/de/guix.de.html
|
||||
guix.de node ${GUIX}/de/html_node/
|
||||
guix.es mono ${GUIX}/es/guix.es.html
|
||||
@@ -504,8 +453,6 @@ GUIX_COOKBOOK = ${GUIX_ROOT}/cookbook
|
||||
guix-cookbook.sk node ${GUIX_COOKBOOK}/sk/html_node/
|
||||
guix-cookbook.sv mono ${GUIX_COOKBOOK}/sv/guix-cookbook.sv.html
|
||||
guix-cookbook.sv node ${GUIX_COOKBOOK}/sv/html_node/
|
||||
guix-cookbook.ta mono ${GUIX_COOKBOOK}/ta/guix-cookbook.ta.html
|
||||
guix-cookbook.ta node ${GUIX_COOKBOOK}/ta/html_node/
|
||||
guix-cookbook mono ${GUIX_COOKBOOK}/en/guix-cookbook.html
|
||||
guix-cookbook node ${GUIX_COOKBOOK}/en/html_node/
|
||||
guix-cookbook.zh_CN mono ${GUIX_COOKBOOK}/zh-cn/guix-cookbook.zh_CN.html
|
||||
|
||||
+1
-2
@@ -26,7 +26,7 @@
|
||||
|
||||
# If adding a language, update the following variables, and info_TEXINFOS.
|
||||
MANUAL_LANGUAGES = de es fr it pt_BR ru zh_CN
|
||||
COOKBOOK_LANGUAGES = de es fr it ko pt_BR ru sk sv ta zh_CN
|
||||
COOKBOOK_LANGUAGES = de es fr it ko pt_BR ru sk sv zh_CN
|
||||
|
||||
# Arg1: A list of languages codes.
|
||||
# Arg2: The file name stem.
|
||||
@@ -52,7 +52,6 @@ info_TEXINFOS = %D%/guix.texi \
|
||||
%D%/guix-cookbook.ru.texi \
|
||||
%D%/guix-cookbook.sk.texi \
|
||||
%D%/guix-cookbook.sv.texi \
|
||||
%D%/guix-cookbook.ta.texi \
|
||||
%D%/guix-cookbook.zh_CN.texi
|
||||
|
||||
%C%_guix_TEXINFOS = \
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
abi <abi/4.0>,
|
||||
|
||||
include <tunables/global>
|
||||
include <tunables/guix>
|
||||
|
||||
# There’s no point in confining the guix executable, since it can run
|
||||
# any user code and so everything is expected. We just need to
|
||||
# explicitly enable userns for systems with the
|
||||
# kernel.apparmor_restrict_unprivileged_userns sysctl.
|
||||
profile guix @{guix_storedir}/{*-guix-command,*-guix-*/bin/guix} flags=(unconfined) {
|
||||
userns,
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
abi <abi/4.0>,
|
||||
|
||||
include <tunables/global>
|
||||
include <tunables/guix>
|
||||
|
||||
profile guix-daemon @{guix_storedir}/*-{guix-daemon,guix}-*/bin/guix-daemon flags=(enforce,attach_disconnected.path=/disconnected) {
|
||||
include <abstractions/base>
|
||||
|
||||
userns,
|
||||
signal,
|
||||
capability sys_admin,
|
||||
capability net_admin,
|
||||
capability sys_chroot,
|
||||
capability setgid,
|
||||
capability chown,
|
||||
network dgram,
|
||||
umount,
|
||||
mount,
|
||||
pivot_root,
|
||||
# Paths inside build chroot
|
||||
/real-root/ w,
|
||||
/ w,
|
||||
|
||||
@{guix_localstatedir}/guix/** rwk,
|
||||
/var/log/guix/** w,
|
||||
owner @{PROC}/@{pid}/{fd/,environ} r,
|
||||
owner @{PROC}/@{pid}/oom_score_adj w,
|
||||
owner @{PROC}/@{pid}/uid_map rw,
|
||||
owner @{PROC}/@{pid}/gid_map rw,
|
||||
owner @{PROC}/@{pid}/setgroups w,
|
||||
@{guix_storedir}/ r,
|
||||
@{guix_storedir}/** rwlmk,
|
||||
@{guix_storedir}/*/bin/guile cx -> guix-builder,
|
||||
@{guix_storedir}/*-guix-command cx -> guix-helper,
|
||||
@{guix_storedir}/*-guix-*/bin/guix cx -> guix-helper,
|
||||
@{etc_rw}/nsswitch.conf r,
|
||||
@{etc_rw}/passwd r,
|
||||
@{etc_rw}/group r,
|
||||
owner /tmp/** rwl,
|
||||
owner /var/tmp/** rwl,
|
||||
|
||||
/usr/bin/newgidmap Ux,
|
||||
|
||||
# Site-specific additions and overrides. See local/README for details.
|
||||
include if exists <local/guix-daemon>
|
||||
|
||||
profile guix-builder flags=(enforce,attach_disconnected.path=/disconnected) {
|
||||
include <abstractions/base>
|
||||
|
||||
signal (receive),
|
||||
|
||||
@{guix_storedir}/** rwlmkux,
|
||||
|
||||
owner /tmp/** rwux,
|
||||
|
||||
@{PROC}/@{pid}/fd/ r,
|
||||
|
||||
/disconnected/** rw,
|
||||
}
|
||||
|
||||
# This is for any time guix is called by the daemon as a helper:
|
||||
# - guix download
|
||||
# - guix discover
|
||||
# - guix gc --list-busy
|
||||
# - probably more?
|
||||
profile guix-helper flags=(enforce,attach_disconnected.path=/disconnected) {
|
||||
include <abstractions/base>
|
||||
include <abstractions/nameservice>
|
||||
|
||||
signal (receive),
|
||||
ptrace (read) peer=guix-daemon,
|
||||
|
||||
/disconnected/run/dbus/system_bus_socket rw,
|
||||
dbus (send, receive),
|
||||
@{guix_localstatedir}/guix/discover/ rw,
|
||||
@{guix_localstatedir}/guix/discover/* rw,
|
||||
|
||||
@{guix_localstatedir}/guix/substitute/ rw,
|
||||
@{guix_localstatedir}/guix/substitute/** rwk,
|
||||
|
||||
@{guix_sysconfdir}/guix/** r,
|
||||
|
||||
@{guix_storedir}/** rwlmix,
|
||||
|
||||
@{PROC}/ r,
|
||||
owner @{PROC}/@{pid}/{fd/,environ} r,
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
@{guix_storedir} = @storedir@
|
||||
@{guix_sysconfdir} = @guix_sysconfdir@
|
||||
@{guix_localstatedir} = @guix_localstatedir@
|
||||
|
||||
include if exists <tunables/guix.d>
|
||||
+21
-27
@@ -283,43 +283,37 @@ corresponding to the top-level definition containing the staged changes."
|
||||
(define variable-name
|
||||
(second old))
|
||||
(define version
|
||||
(match ((xpath:node-or
|
||||
(and=> ((xpath:node-or
|
||||
(xpath:sxpath '(*any* *any* package version *any*))
|
||||
;; For let binding
|
||||
(xpath:sxpath '(*any* *any* (*any*) package version *any*)))
|
||||
(cons '*TOP* new))
|
||||
(() #f)
|
||||
((version . rest) version)))
|
||||
(if version
|
||||
(format port
|
||||
"gnu: ~a: Update to ~a.~%~%* ~a (~a): Update to ~a.~%"
|
||||
variable-name version file-name variable-name version)
|
||||
(format port
|
||||
"gnu: ~a: Update.~%~%* ~a (~a): Update.~%"
|
||||
variable-name file-name variable-name))
|
||||
first))
|
||||
(format port
|
||||
"gnu: ~a: Update to ~a.~%~%* ~a (~a): Update to ~a.~%"
|
||||
variable-name version file-name variable-name version)
|
||||
(for-each (lambda (field)
|
||||
(let ((old-values (get-values old field))
|
||||
(new-values (get-values new field)))
|
||||
(or (equal? old-values new-values)
|
||||
(let ((removed (lset-difference equal? old-values new-values))
|
||||
(added (lset-difference equal? new-values old-values)))
|
||||
(unless (and (null? added) (null? removed))
|
||||
(format port
|
||||
"[~a]: ~a~%" field
|
||||
(break-string
|
||||
;; A dependency can be a list of (pkg output).
|
||||
(match (list (map object->string removed)
|
||||
(map object->string added))
|
||||
((() added)
|
||||
(format #f "Add ~a."
|
||||
(listify added)))
|
||||
((removed ())
|
||||
(format #f "Remove ~a."
|
||||
(listify removed)))
|
||||
((removed added)
|
||||
(format #f "Remove ~a; add ~a."
|
||||
(listify removed)
|
||||
(listify added)))))))))))
|
||||
(format port
|
||||
"[~a]: ~a~%" field
|
||||
(break-string
|
||||
;; A dependency can be a list of (pkg output).
|
||||
(match (list (map object->string removed)
|
||||
(map object->string added))
|
||||
((() added)
|
||||
(format #f "Add ~a."
|
||||
(listify added)))
|
||||
((removed ())
|
||||
(format #f "Remove ~a."
|
||||
(listify removed)))
|
||||
((removed added)
|
||||
(format #f "Remove ~a; add ~a."
|
||||
(listify removed)
|
||||
(listify added))))))))))
|
||||
'(inputs propagated-inputs native-inputs)))
|
||||
|
||||
(define* (add-commit-message file-name variable-name
|
||||
|
||||
+1
-7
@@ -1,9 +1,3 @@
|
||||
#!/bin/sh
|
||||
# Authenticate the repo upon 'git pull' and similar.
|
||||
if ! git config guix.authentication.introduction-commit; then
|
||||
exec guix git authenticate 9edb3f66fd807b096b48283debdcddccfea34bad \
|
||||
"BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA" \
|
||||
-k origin/keyring
|
||||
else
|
||||
exec guix git authenticate
|
||||
fi
|
||||
exec guix git authenticate
|
||||
|
||||
+1
-37
@@ -175,10 +175,6 @@
|
||||
(file (execute
|
||||
execute_no_trans read write open entrypoint map
|
||||
getattr link unlink)))
|
||||
;; Needed to execute the 'newgidmap' helper.
|
||||
(allow guix_daemon_t
|
||||
bin_t
|
||||
(file (execute execute_no_trans map)))
|
||||
|
||||
;; Remounting /gnu/store read-write.
|
||||
(allow guix_daemon_t
|
||||
@@ -189,9 +185,6 @@
|
||||
(allow guix_daemon_t
|
||||
root_t
|
||||
(dir (mounton)))
|
||||
(allow init_t
|
||||
guix_daemon.guix_store_content_t
|
||||
(dir (mounton)))
|
||||
(allow guix_daemon_t
|
||||
fs_t
|
||||
(filesystem (getattr)))
|
||||
@@ -326,7 +319,7 @@
|
||||
map
|
||||
getattr setattr
|
||||
unlink
|
||||
open read write append)))
|
||||
open read write)))
|
||||
(allow guix_daemon_t
|
||||
guix_daemon_conf_t
|
||||
(lnk_file (create getattr rename unlink read)))
|
||||
@@ -368,14 +361,6 @@
|
||||
self
|
||||
(netlink_route_socket (bind create getattr nlmsg_read read write getopt)))
|
||||
|
||||
;; Allow use of user namespaces
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(cap_userns (setgid sys_admin net_admin sys_chroot)))
|
||||
(allow guix_daemon_t
|
||||
self
|
||||
(user_namespace (create)))
|
||||
|
||||
;; Socket operations
|
||||
(allow guix_daemon_t
|
||||
guix_daemon_socket_t
|
||||
@@ -455,27 +440,6 @@
|
||||
vnc_port_t
|
||||
(tcp_socket (name_bind)))
|
||||
|
||||
;; 'guix gc' needs to go through /proc entries for all processes that are
|
||||
;; running. Strictly speaking, it means guix-daemon needs access to all
|
||||
;; process types in the SELinux policy. In practice, only processes from
|
||||
;; programs in the /gnu/store are relevant for finding roots for garbage
|
||||
;; collection. Since Guix currently doesn't install any SELinux policy for
|
||||
;; its packages, we can assume that all the processes it needs to access run
|
||||
;; as unconfined_t.
|
||||
;;
|
||||
;; FIXME: This doesn't stop 'guix gc' from generating a lot of unnecessary
|
||||
;; AVC denied audit messages. Perhaps guix-daemon could test whether it has
|
||||
;; access to the proc entry before trying to access it?
|
||||
(allow guix_daemon_t
|
||||
unconfined_t
|
||||
(dir (search)))
|
||||
(allow guix_daemon_t
|
||||
unconfined_t
|
||||
(file (read)))
|
||||
(allow guix_daemon_t
|
||||
unconfined_t
|
||||
(lnk_file (read)))
|
||||
|
||||
;; I guess sometimes it needs random numbers
|
||||
(allow guix_daemon_t
|
||||
random_device_t
|
||||
|
||||
@@ -14,12 +14,6 @@ ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daem
|
||||
--substitute-urls='@GUIX_SUBSTITUTE_URLS@'
|
||||
Environment='GUIX_STATE_DIRECTORY=@localstatedir@/guix' 'GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
|
||||
|
||||
# Stop the gnu-store.mount so that the daemon can capture the store as
|
||||
# read-write in its private mount namespace.
|
||||
# See <https://codeberg.org/guix/guix/issues/4744>.
|
||||
ExecStartPre=-+systemctl stop gnu-store.mount
|
||||
ExecStartPost=-+systemctl start gnu-store.mount --no-block
|
||||
|
||||
# Run under a dedicated unprivileged user account.
|
||||
User=guix-daemon
|
||||
|
||||
|
||||
+17
-105
@@ -17,7 +17,6 @@
|
||||
# Copyright © 2024 Tomas Volf <~@wolfsden.cz>
|
||||
# Copyright © 2024 Richard Sent <richard@freakingpenguin.com>
|
||||
# Copyright © 2025 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
|
||||
# Copyright © 2025 Noé Lopez <noelopez@free.fr>
|
||||
#
|
||||
# This file is part of GNU Guix.
|
||||
#
|
||||
@@ -106,12 +105,10 @@ DEBUG=0
|
||||
GNU_URL="https://ftpmirror.gnu.org/gnu/guix/"
|
||||
|
||||
# The following associative array holds set of GPG keys used to sign the
|
||||
# releases, keyed by their corresponding Codeberg user name.
|
||||
# releases, keyed by their corresponding Savannah user ID.
|
||||
declare -A GPG_SIGNING_KEYS
|
||||
GPG_SIGNING_KEYS["civodul"]=3CE464558A84FDC69DB40CFB090B11993D9AEBB5 # ludo
|
||||
GPG_SIGNING_KEYS["apteryx"]=27D586A4F8900854329FF09F1260E46482E63562 # maxim
|
||||
GPG_SIGNING_KEYS["efraim"]=A28BF40C3E551372662D14F741AAE7DCCA3D8351 # efraim
|
||||
PUBLIC_KEYSERVERS="keys.openpgp.org pgpkeys.eu keyserver.ubuntu.com"
|
||||
GPG_SIGNING_KEYS[15145]=3CE464558A84FDC69DB40CFB090B11993D9AEBB5 # ludo
|
||||
GPG_SIGNING_KEYS[127547]=27D586A4F8900854329FF09F1260E46482E63562 # maxim
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
#+UTILITIES
|
||||
@@ -206,7 +203,6 @@ chk_gpg_keyring()
|
||||
|
||||
for user_id in "${!GPG_SIGNING_KEYS[@]}"; do
|
||||
gpg_key_id=${GPG_SIGNING_KEYS[$user_id]}
|
||||
codeberg_username=$user_id
|
||||
# Without --dry-run this command will create a ~/.gnupg owned by root on
|
||||
# systems where gpg has never been used, causing errors and confusion.
|
||||
if gpg --dry-run --list-keys "$gpg_key_id" >/dev/null 2>&1; then
|
||||
@@ -215,39 +211,20 @@ chk_gpg_keyring()
|
||||
if prompt_yes_no "${INF}The following OpenPGP public key is \
|
||||
required to verify the Guix binary signature: $gpg_key_id.
|
||||
Would you like me to fetch it for you?"; then
|
||||
if wget "https://codeberg.org/$codeberg_username.gpg" \
|
||||
--tries=1 --timeout=30 --no-verbose -O- | gpg --import -; then
|
||||
continue
|
||||
fi
|
||||
|
||||
key_obtained=false
|
||||
# Try to fetch keys from an available keyserver
|
||||
for key_server in $PUBLIC_KEYSERVERS; do
|
||||
if gpg --keyserver $key_server --recv-key $gpg_key_id; then
|
||||
key_obtained=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if $key_obtained; then
|
||||
# Use a reasonable time-out here so users don't report silent
|
||||
# ‘freezes’ when Savannah goes out to lunch, as has happened.
|
||||
if wget "https://sv.gnu.org/people/viewgpg.php?user_id=$user_id" \
|
||||
--timeout=30 --no-verbose -O- | gpg --import -; then
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
# If we reach this point, the key is (still) missing. Report further
|
||||
# missing keys, if any, but then abort the installation.
|
||||
_err "Missing OpenPGP public key ($gpg_key_id).
|
||||
Fetch it with codeberg username:
|
||||
Fetch it with this command:
|
||||
|
||||
wget \"https://codeberg.org/$codeberg_username.gpg\" -O - | \
|
||||
sudo -i gpg --import -
|
||||
|
||||
If this fails, try to fetch it via a keyserver:
|
||||
|
||||
for key_server in $PUBLIC_KEYSERVERS; do
|
||||
if sudo -i gpg --keyserver $key_server --recv-key $gpg_key_id; then
|
||||
break
|
||||
fi
|
||||
done"
|
||||
wget \"https://sv.gnu.org/people/viewgpg.php?user_id=$user_id\" -O - | \
|
||||
sudo -i gpg --import -"
|
||||
exit_flag=yes
|
||||
done
|
||||
if [ "$exit_flag" = yes ]; then
|
||||
@@ -778,7 +755,7 @@ sys_create_init_profile()
|
||||
cat <<"EOF" > /etc/profile.d/zzz-guix.sh
|
||||
# Explicitly initialize XDG base directory variables to ease compatibility
|
||||
# with Guix System: see <https://issues.guix.gnu.org/56050#3>.
|
||||
export XCURSOR_PATH="${XCURSOR_PATH:-$HOME/.local/share/icons:$HOME/.icons:/usr/local/share/icons:/usr/share/icons}"
|
||||
export XCURSOR_PATH="${XCURSOR_PATH:-/usr/local/share/icons:/usr/share/icons}"
|
||||
export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}"
|
||||
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||
export XDG_STATE_HOME="${XDG_STATE_HOME:-$HOME/.local/state}"
|
||||
@@ -794,16 +771,16 @@ export PATH="$GUIX_PROFILE/bin${PATH:+:}$PATH"
|
||||
# info and man readers. When INFOPATH is unset, add a trailing colon so Emacs
|
||||
# searches 'Info-default-directory-list'. When MANPATH is unset, add a
|
||||
# trailing colon so the system default search path is used.
|
||||
export INFOPATH="$GUIX_PROFILE/share/info:${INFOPATH:-}"
|
||||
export MANPATH="$GUIX_PROFILE/share/man:${MANPATH:-}"
|
||||
export INFOPATH="$GUIX_PROFILE/share/info:$INFOPATH"
|
||||
export MANPATH="$GUIX_PROFILE/share/man:$MANPATH"
|
||||
# Expose the latest Guix modules to Guile so guix shell and repls spawned by
|
||||
# e.g. Geiser work out of the box.
|
||||
export GUILE_LOAD_PATH="$GUIX_PROFILE/share/guile/site/3.0${GUILE_LOAD_PATH:+:$GUILE_LOAD_PATH}"
|
||||
export GUILE_LOAD_COMPILED_PATH="$GUIX_PROFILE/lib/guile/3.0/site-ccache${GUILE_LOAD_COMPILED_PATH:+:$GUILE_LOAD_COMPILED_PATH}"
|
||||
export GUILE_LOAD_PATH="$GUIX_PROFILE/share/guile/site/3.0${GUILE_LOAD_PATH:+:}$GUILE_LOAD_PATH"
|
||||
export GUILE_LOAD_COMPILED_PATH="$GUIX_PROFILE/lib/guile/3.0/site-ccache${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"
|
||||
|
||||
# User's default profile, if it exists
|
||||
GUIX_PROFILE="$HOME/.guix-profile"
|
||||
if [ -f "$GUIX_PROFILE/etc/profile" ]; then
|
||||
if [ -L "$GUIX_PROFILE" ]; then
|
||||
. "$GUIX_PROFILE/etc/profile"
|
||||
|
||||
# see info '(guix) Application Setup'
|
||||
@@ -821,11 +798,6 @@ if [ -f "$GUIX_PROFILE/etc/profile" ]; then
|
||||
*$GUIX_PROFILE/share/man*) ;;
|
||||
*) export MANPATH="$GUIX_PROFILE/share/man:$MANPATH"
|
||||
esac
|
||||
|
||||
case $XDG_DATA_DIRS in
|
||||
*$GUIX_PROFILE/share*) ;;
|
||||
*) export XDG_DATA_DIRS="$GUIX_PROFILE/share:$XDG_DATA_DIRS"
|
||||
esac
|
||||
fi
|
||||
|
||||
# NOTE: Guix Home handles its own profile initialization in ~/.profile. See
|
||||
@@ -920,64 +892,6 @@ sys_maybe_setup_selinux()
|
||||
restorecon -R /gnu /var/guix
|
||||
}
|
||||
|
||||
sys_maybe_setup_apparmor()
|
||||
{
|
||||
if ! [ -f /sys/module/apparmor/parameters/enabled ]
|
||||
then
|
||||
return
|
||||
fi
|
||||
|
||||
if ! command -v apparmor_parser &> /dev/null
|
||||
then
|
||||
return
|
||||
fi
|
||||
|
||||
prompt_yes_no "Install AppArmor profile that might be required to run guix-daemon?" \
|
||||
|| return 0
|
||||
|
||||
local var_guix=/var/guix/profiles/per-user/root/current-guix
|
||||
local apparmor_sources="${var_guix}/etc/apparmor.d/"
|
||||
|
||||
if ! [ -d "$apparmor_sources" ]
|
||||
then
|
||||
_err "This version of Guix doesn’t contain AppArmor profiles."
|
||||
return
|
||||
fi
|
||||
|
||||
cp -f -t /etc/apparmor.d/tunables "$apparmor_sources/tunables/guix"
|
||||
cp -f -t /etc/apparmor.d "$apparmor_sources/guix-daemon"
|
||||
cp -f -t /etc/apparmor.d "$apparmor_sources/guix"
|
||||
apparmor_parser --warn=all -r /etc/apparmor.d/guix-daemon
|
||||
apparmor_parser --warn=all -r /etc/apparmor.d/guix
|
||||
|
||||
_msg_pass "apparmor profiles installed and loaded"
|
||||
}
|
||||
|
||||
sys_delete_apparmor_profiles()
|
||||
{
|
||||
# Not a big deal if the apparmor_parser commands fail as they only apply
|
||||
# for the current boot, we still want to go on and remove the files.
|
||||
if [ -f "/etc/apparmor.d/guix" ]
|
||||
then
|
||||
_msg_info "removing /etc/apparmor.d/guix"
|
||||
apparmor_parser -R /etc/apparmor.d/guix || true
|
||||
rm -f "/etc/apparmor.d/guix"
|
||||
fi
|
||||
|
||||
if [ -f "/etc/apparmor.d/guix-daemon" ]
|
||||
then
|
||||
_msg_info "removing /etc/apparmor.d/guix-daemon"
|
||||
apparmor_parser -R /etc/apparmor.d/guix-daemon || true
|
||||
rm -f "/etc/apparmor.d/guix-daemon"
|
||||
fi
|
||||
|
||||
if [ -f "/etc/apparmor.d/tunables/guix" ]
|
||||
then
|
||||
_msg_info "removing /etc/apparmor.d/tunables/guix"
|
||||
rm -f "/etc/apparmor.d/tunables/guix"
|
||||
fi
|
||||
}
|
||||
|
||||
sys_delete_init_profile()
|
||||
{
|
||||
_msg_info "removing /etc/profile.d/zzz-guix.sh"
|
||||
@@ -1055,6 +969,7 @@ main_install()
|
||||
chk_init_sys
|
||||
add_init_sys_require
|
||||
chk_require "${REQUIRE[@]}"
|
||||
chk_gpg_keyring
|
||||
chk_sys_arch
|
||||
chk_sys_nscd
|
||||
chk_existing
|
||||
@@ -1065,7 +980,6 @@ main_install()
|
||||
tmp_path="$(mktemp -t -d guix.XXXXXX)"
|
||||
|
||||
if [ -z "${GUIX_BINARY_FILE_NAME}" ]; then
|
||||
chk_gpg_keyring
|
||||
guix_get_bin_list "${GNU_URL}"
|
||||
guix_get_bin "${GNU_URL}" "${BIN_VER}" "$tmp_path"
|
||||
GUIX_BINARY_FILE_NAME=${BIN_VER}.tar.xz
|
||||
@@ -1080,7 +994,6 @@ main_install()
|
||||
sys_create_store "${GUIX_BINARY_FILE_NAME}" "${tmp_path}"
|
||||
sys_create_build_user
|
||||
sys_maybe_setup_selinux
|
||||
sys_maybe_setup_apparmor
|
||||
sys_enable_guix_daemon
|
||||
sys_authorize_build_farms
|
||||
sys_create_init_profile
|
||||
@@ -1114,7 +1027,6 @@ main_uninstall()
|
||||
sys_delete_guix_daemon
|
||||
# stop people from accessing their profiles.
|
||||
sys_delete_user_profiles
|
||||
sys_delete_apparmor_profiles
|
||||
# kill guix off all the guts of guix
|
||||
sys_delete_store
|
||||
# clean up the system
|
||||
|
||||
@@ -71,21 +71,18 @@ TARGET."
|
||||
"connman" "network-manager" "wpa-supplicant" "isc-dhcp" "cups"
|
||||
"linux-libre" "grub-hybrid")))
|
||||
|
||||
(define (%system-gui-packages target)
|
||||
(define %system-gui-packages
|
||||
;; Key packages proposed by the Guix System installer.
|
||||
(append (map specification->package
|
||||
'(;; build system `python' does not support cross builds
|
||||
;"gnome" "xfce" "mate" "openbox"
|
||||
;"gnome" "xfce" "mate" "openbox"
|
||||
"awesome"
|
||||
"i3-wm" "i3status" "dmenu" "st"
|
||||
"ratpoison" "xterm"
|
||||
;; build system `emacs' does not support cross builds
|
||||
;"emacs-exwm" "emacs-desktop-environment"
|
||||
;"emacs-exwm" "emacs-desktop-environment"
|
||||
"emacs"))
|
||||
;; NOTE: %default-xorg-modules depends on system.
|
||||
(parameterize
|
||||
((%current-target-system target))
|
||||
%default-xorg-modules)))
|
||||
%default-xorg-modules))
|
||||
|
||||
(define %packages-to-cross-build
|
||||
;; Packages that must be cross-buildable from x86_64-linux.
|
||||
@@ -154,8 +151,7 @@ TARGET."
|
||||
;; With a graphical environment:
|
||||
(if (or (target-x86-32? target)
|
||||
(target-aarch64? target))
|
||||
;; %system-gui-packages depends on the system.
|
||||
(%system-gui-packages target)
|
||||
%system-gui-packages
|
||||
'()))))
|
||||
(fold delete (map platform-system->target (systems))
|
||||
'(;; Disable cross-compilation to self:
|
||||
|
||||
@@ -45,7 +45,9 @@
|
||||
(_ #f)))
|
||||
|
||||
(define guix-dependencies
|
||||
(filter-map input->package (package-direct-inputs guix)))
|
||||
(filter-map input->package
|
||||
(fold alist-delete (package-direct-inputs guix)
|
||||
'("glibc-utf8-locales" "graphviz" "po4a"))))
|
||||
|
||||
(define (package-without-tests p)
|
||||
(package/inherit p
|
||||
|
||||
@@ -1,167 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; This file returns a manifest containing packages which are needed by the
|
||||
;;; installer.
|
||||
|
||||
(use-modules (guix packages)
|
||||
(gnu packages)
|
||||
((gnu services xorg) #:select (%default-xorg-modules))
|
||||
(guix profiles)
|
||||
(guix utils)
|
||||
(srfi srfi-1))
|
||||
|
||||
(define %desktop-packages
|
||||
(append
|
||||
%default-xorg-modules
|
||||
(map specification->package
|
||||
(list
|
||||
;; etc-service
|
||||
"net-base"
|
||||
"tzdata"
|
||||
;; boot-file-system-utilities-service
|
||||
"e2fsprogs"
|
||||
;; plasma-deskto-sservice-type
|
||||
"plasma"
|
||||
;; gnome-desktop-service
|
||||
"gnome"
|
||||
;; xfce-desktop-service
|
||||
"xfce"
|
||||
;; mate-desktop-service
|
||||
"mate"
|
||||
;; set-xorg-configuration-service
|
||||
"font-alias"
|
||||
"font-misc-misc"
|
||||
"font-adobe75dpi"
|
||||
"xorg-server"
|
||||
;; screen-locker-service
|
||||
"slock"
|
||||
"xlockmore"
|
||||
;; mtp-service
|
||||
"libmtp"
|
||||
;; sane-service
|
||||
"sane"
|
||||
"sane-backends"
|
||||
;; mount-setuid-helpers-service
|
||||
"nfs-utils"
|
||||
"ntfs-3g"
|
||||
;; guix-artwork-service
|
||||
"guix-backgrounds"
|
||||
"guix-icons"
|
||||
;; vte-integration-service
|
||||
"vte"
|
||||
;; network-manager-applet-service
|
||||
"network-manager-applet"
|
||||
;; modem-manager-service
|
||||
"modem-manager"
|
||||
;; usb-modeswitch-service
|
||||
"usb-modeswitch"
|
||||
"usb-modeswitch-data"
|
||||
;; avahi-service
|
||||
"avahi"
|
||||
;; udisks-service
|
||||
"udisks"
|
||||
;; cups-pk-helper-service
|
||||
"cups-pk-helper"
|
||||
;; colord-service
|
||||
"colord"
|
||||
;; geoclue-service
|
||||
"geoclue"
|
||||
;; polkit-service
|
||||
"polkit"
|
||||
;; elogind-service
|
||||
"elogind"
|
||||
;; dbus-service
|
||||
;; ntp-service
|
||||
"ntp"
|
||||
;; alsa-service
|
||||
"alsa-plugins"
|
||||
;; mingetty-service
|
||||
"mingetty"
|
||||
;; etc-bashrc-d-service
|
||||
"bash-completion"
|
||||
;; udev-service
|
||||
"eudev"
|
||||
"lvm2"
|
||||
"alsa-utils"
|
||||
"crda"
|
||||
;; sysctl-service
|
||||
"procps"
|
||||
;; special-files-service
|
||||
"coreutils"
|
||||
"grub-pc"
|
||||
"less"
|
||||
"mg"
|
||||
"nano"
|
||||
"nvi"
|
||||
"man-db"
|
||||
"info-reader"
|
||||
"kbd"
|
||||
"guile-readline"
|
||||
"guile-colorized"
|
||||
"pciutils"
|
||||
"usbutils"
|
||||
"util-linux-with-udev"
|
||||
"kmod"
|
||||
"isc-dhcp"
|
||||
"iproute2"
|
||||
"wget"
|
||||
"nss-certs"
|
||||
"iw"
|
||||
"wireless-tools"
|
||||
"psmisc"
|
||||
"which"
|
||||
"guile"
|
||||
"findutils"
|
||||
"grep"
|
||||
"sed"
|
||||
"diffutils"
|
||||
"patch"
|
||||
"gawk"
|
||||
"tar"
|
||||
"gzip"
|
||||
"bzip2"
|
||||
"lzip"
|
||||
"xz"
|
||||
"zstd"
|
||||
;; packages
|
||||
"sway"
|
||||
"foot"
|
||||
"wmenu"
|
||||
"icewm"
|
||||
"openbox"
|
||||
"awesome"
|
||||
"i3-wm"
|
||||
"i3status"
|
||||
"dmenu"
|
||||
"st"
|
||||
"ratpoison"
|
||||
"xterm"
|
||||
"emacs"
|
||||
"emacs-exwm"
|
||||
"emacs-desktop-environment"))))
|
||||
|
||||
(define %desktop-manifest
|
||||
(manifest
|
||||
;; Some of %SYSTEM-PACKAGES are currently unsupported on some
|
||||
;; systems--e.g., GNOME on 32-bit, due to Rust. Filter them out.
|
||||
(filter-map (lambda (package)
|
||||
(and (supported-package? package (%current-system))
|
||||
(package->manifest-entry package)))
|
||||
(append %desktop-packages))))
|
||||
|
||||
%desktop-manifest
|
||||
@@ -1,164 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 Noé Lopez <noelopez@free.fr>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; This manifest is a list of packages that user care about (collected via an
|
||||
;;; online form). It corresponds to the “Important packages” of GCD 005.
|
||||
|
||||
(specifications->manifest
|
||||
(list
|
||||
"0ad"
|
||||
"agda"
|
||||
"alacritty"
|
||||
"ardour"
|
||||
"autoconf"
|
||||
"automake"
|
||||
"blender"
|
||||
"borg"
|
||||
"btrfs-progs"
|
||||
"certbot"
|
||||
"chez-scheme"
|
||||
"clang-toolchain"
|
||||
"cryptsetup"
|
||||
"dillo"
|
||||
"direnv"
|
||||
"docker-cli"
|
||||
"dovecot"
|
||||
"emacs"
|
||||
"emacs-exwm"
|
||||
"emacs-pgtk"
|
||||
"evince"
|
||||
"fcitx5"
|
||||
"file"
|
||||
"fish"
|
||||
"foot"
|
||||
"fzf"
|
||||
"gajim"
|
||||
"gallery-dl"
|
||||
"gcc-toolchain"
|
||||
"getmail6"
|
||||
"gettext"
|
||||
"ghc-xmonad-contrib"
|
||||
"gimp"
|
||||
"git"
|
||||
"gmp"
|
||||
"gnome"
|
||||
"gnupg"
|
||||
"godot"
|
||||
"gpaste"
|
||||
"guile"
|
||||
"guile-json"
|
||||
"hatch"
|
||||
"help2man"
|
||||
"helvum"
|
||||
"hexchat"
|
||||
"hyprland"
|
||||
"icecat"
|
||||
"imagemagick"
|
||||
"imapfilter"
|
||||
"jami"
|
||||
"k3b"
|
||||
"kakoune"
|
||||
"keepassxc"
|
||||
"krita"
|
||||
"ksoloti-patcher"
|
||||
"libreoffice"
|
||||
"librewolf"
|
||||
"libsecret"
|
||||
"libtool"
|
||||
"libvirt"
|
||||
"llama-cpp"
|
||||
"mariadb"
|
||||
"luanti"
|
||||
"mpc"
|
||||
"mpfr"
|
||||
"mplayer"
|
||||
"mpv"
|
||||
"mullvadbrowser"
|
||||
"neovim"
|
||||
"nginx"
|
||||
"niri"
|
||||
"nix"
|
||||
"node"
|
||||
"notmuch"
|
||||
"obs"
|
||||
"offlineimap3"
|
||||
"opencv"
|
||||
"openmpi"
|
||||
"opensmtpd"
|
||||
"openssh"
|
||||
"openttd"
|
||||
"pandoc"
|
||||
"password-store"
|
||||
"pavucontrol"
|
||||
"php"
|
||||
"picard"
|
||||
"pipewire"
|
||||
"pkg-config"
|
||||
"plasma"
|
||||
"plasma-desktop"
|
||||
"po4a"
|
||||
"podman"
|
||||
"postgresql"
|
||||
"python"
|
||||
"python-lxml"
|
||||
"python-pycryptodome"
|
||||
"qemu"
|
||||
"ranger"
|
||||
"retroarch"
|
||||
;;"rocm"
|
||||
"rofi"
|
||||
"rspamd"
|
||||
"rsync"
|
||||
"screen"
|
||||
"slurm"
|
||||
"sqlite"
|
||||
"sqlitebrowser"
|
||||
"strace"
|
||||
"strawberry"
|
||||
"syncthing"
|
||||
"taisei"
|
||||
"telegram-desktop"
|
||||
"texlive-babel"
|
||||
"texlive-babel-english"
|
||||
"texlive-babel-french"
|
||||
"texlive-babel-german"
|
||||
"texlive-collection-latex"
|
||||
"texlive-collection-latexrecommended"
|
||||
"texlive-collection-xetex"
|
||||
"texlive-pdfjam"
|
||||
"tmux"
|
||||
"tuba"
|
||||
"ungoogled-chromium"
|
||||
"unison"
|
||||
"unzip"
|
||||
"uv"
|
||||
"viewnior"
|
||||
"virt-manager"
|
||||
"waybar"
|
||||
"wine"
|
||||
"wine64"
|
||||
"wireguard-tools"
|
||||
"xmobar"
|
||||
"xmonad"
|
||||
"xournal"
|
||||
"xournalpp"
|
||||
"xpdf"
|
||||
"yt-dlp"
|
||||
"zig"
|
||||
"zip"
|
||||
"zsh"))
|
||||
@@ -23,9 +23,7 @@
|
||||
;;; installer.
|
||||
|
||||
(use-modules (guix packages)
|
||||
(gnu packages)
|
||||
((gnu system) #:select (%base-packages %base-firmware))
|
||||
(guix profiles)
|
||||
((gnu services xorg) #:select (%default-xorg-modules))
|
||||
(guix utils)
|
||||
(srfi srfi-1))
|
||||
|
||||
@@ -46,14 +44,16 @@ TARGET."
|
||||
(define %system-packages
|
||||
;; Key packages proposed by the Guix System installer.
|
||||
(append (map specification->package
|
||||
'("guix" "shepherd" "guile-static-initrd"
|
||||
"openssh" "tor" "ntp" "gpm" "mingetty"
|
||||
'("guix" "shepherd"
|
||||
"gnome" "xfce" "mate"
|
||||
"icewm" "openbox" "awesome"
|
||||
"i3-wm" "i3status" "dmenu" "st"
|
||||
"ratpoison" "xterm"
|
||||
"emacs" "emacs-exwm" "emacs-desktop-environment"
|
||||
"openssh" "tor" "ntp" "gpm"
|
||||
"connman" "network-manager" "wpa-supplicant" "isc-dhcp" "cups"
|
||||
"linux-libre" "grub-hybrid"
|
||||
;; privileged programs
|
||||
"shadow" "sudo" "fuse" "inetutils" "util-linux"))
|
||||
%base-firmware
|
||||
%base-packages))
|
||||
"linux-libre" "grub-hybrid"))
|
||||
%default-xorg-modules))
|
||||
|
||||
(define %bootloader-packages
|
||||
;; The bootloaders offered by the Guix System installer.
|
||||
+3
-259
@@ -1,11 +1,11 @@
|
||||
;; GNU Guix news, for use by 'guix pull'.
|
||||
;;
|
||||
;; Copyright © 2019-2026 Ludovic Courtès <ludo@gnu.org>
|
||||
;; Copyright © 2019-2025 Ludovic Courtès <ludo@gnu.org>
|
||||
;; Copyright © 2019–2021, 2024 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;; Copyright © 2019, 2020 Miguel Ángel Arruga Vivas <rosen644835@gmail.com>
|
||||
;; Copyright © 2019, 2020 Konrad Hinsen <konrad.hinsen@fastmail.net>
|
||||
;; Copyright © 2019, 2020, 2021, 2023 Julien Lepiller <julien@lepiller.eu>
|
||||
;; Copyright © 2019–2026 Florian Pelz <pelzflorian@pelzflorian.de>
|
||||
;; Copyright © 2019–2025 Florian Pelz <pelzflorian@pelzflorian.de>
|
||||
;; Copyright © 2020, 2022 Marius Bakke <marius@gnu.org>
|
||||
;; Copyright © 2020, 2021 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
@@ -27,13 +27,12 @@
|
||||
;; Copyright © 2024 Zheng Junjie <873216071@qq.com>
|
||||
;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr>
|
||||
;; Copyright © 2024 Sebastian Dümcke <code@sam-d.com>
|
||||
;; Copyright © 2025-2026 Anderson Torres <anderson.torres.8519@gmail.com>
|
||||
;; Copyright © 2025 Anderson Torres <anderson.torres.8519@gmail.com>
|
||||
;; Copyright © 2025 Roman Scherer <roman@burningswell.com>
|
||||
;; Copyright © 2025 Jelle Licht <jlicht@fsfe.org>
|
||||
;; Copyright © 2025 Rivulet Cedar <rivulet_cedar@yeah.net>
|
||||
;; Copyright © 2025 jgart <jgart@dismail.de>
|
||||
;; Copyright © 2025 Steve George <steve@futurile.net>
|
||||
;; Copyright © 2026 Noé Lopez <noelopez@free.fr>
|
||||
|
||||
;;
|
||||
;; Copying and distribution of this file, with or without modification, are
|
||||
@@ -43,261 +42,6 @@
|
||||
(channel-news
|
||||
(version 0)
|
||||
|
||||
(entry (commit "a7c8e68dc51144a6d3981b770aca9c4897fc7c0c")
|
||||
(title
|
||||
(en "Records can refer to inherited values of thunked fields")
|
||||
(de "Vererbung in Verbundsobjekten erlaubt Verweise auf geerbte Werte verzögert ausgewerteter Felder"))
|
||||
(body
|
||||
(en "A new feature has been added to records—the facility used when
|
||||
defining packages, services, operating systems, and many other things—that,
|
||||
when inheriting from another record, allows you to refer to inherited field
|
||||
values. When defining package variants, you may have seen this pattern:
|
||||
|
||||
@lisp
|
||||
(package
|
||||
(inherit gdb)
|
||||
(inputs (modify-inputs (package-inputs gdb)
|
||||
(delete \"guile\"))))
|
||||
@end lisp
|
||||
|
||||
This can now be written like this:
|
||||
|
||||
@lisp
|
||||
(package
|
||||
(inherit gdb)
|
||||
(inputs (modify-inputs inputs ;<- notice the change
|
||||
(delete \"guile\"))))
|
||||
@end lisp
|
||||
|
||||
Within the @code{inputs} body, the @code{inputs} identifier is now bound to
|
||||
the @dfn{inherited value}—i.e., the value this field inherits from @code{gdb}.
|
||||
The same mechanism can be used when changing other input fields or the
|
||||
@code{arguments} field. It is less verbose but also
|
||||
@uref{https://issues.guix.gnu.org/50335, more accurate}.
|
||||
|
||||
This change applies to \"thunked\" fields of all record types produced by
|
||||
@code{define-record-type*}: @code{package}, @code{origin},
|
||||
@code{operating-system}, @code{home-environment}, and so on.
|
||||
|
||||
Note that this is an incompatible change: the newly introduced
|
||||
bindings—@code{inputs} in the example above—could shadow same-named bindings.")
|
||||
(de "Als neue Funktionalität kann man in Verbundsobjekten – also beim
|
||||
Definieren von Paketen, Diensten, Betriebssystemen und vielem anderen – beim
|
||||
Erben von einem anderen Verbundsobjekt auf die geerbten Werte verweisen. Zum
|
||||
Definieren von Paketvarianten wurde früher etwas geschrieben wie:
|
||||
|
||||
@lisp
|
||||
(package
|
||||
(inherit gdb)
|
||||
(inputs (modify-inputs (package-inputs gdb)
|
||||
(delete \"guile\"))))
|
||||
@end lisp
|
||||
|
||||
Das lässt sich jetzt schreiben als:
|
||||
|
||||
@lisp
|
||||
(package
|
||||
(inherit gdb)
|
||||
(inputs (modify-inputs inputs ;<- hier ändert sich was
|
||||
(delete \"guile\"))))
|
||||
@end lisp
|
||||
|
||||
Innerhalb des @code{inputs}-Rumpfes ist der Bezeichner @code{inputs} jetzt
|
||||
an den @dfn{geerbten Wert} gebunden, d.h. an den Wert, den das Feld von
|
||||
@code{gdb} erbt. Derselbe Mechanismus kann beim Ändern anderer Felder mit
|
||||
Eingaben oder im Feld @code{arguments} benutzt werden. Das spart Platz und
|
||||
@uref{https://issues.guix.gnu.org/50335, verhält sich richtiger}.
|
||||
|
||||
Die Änderung wirkt sich auf verzögert ausgewertete \"thunked\"-Felder aller
|
||||
Verbundstypen aus, die mit @code{define-record-type*} erstellt wurden:
|
||||
@code{package}, @code{origin}, @code{operating-system}, @code{home-environment}
|
||||
und so weiter.
|
||||
|
||||
Hinweis: das ist eine inkompatible Änderung. Die neu eingeführte Bindung –
|
||||
@code{inputs} im obigen Beispiel – kann gleichnamige Bindungen überschatten.")))
|
||||
|
||||
(entry (commit "b52ce9041ad58aeababd2d50d3e72bc23dffff60")
|
||||
(title
|
||||
(en "GNOME 48 is now available")
|
||||
(fr "GNOME 48 maintenant disponible")
|
||||
(pt "GNOME 48 já está disponível")
|
||||
(de "GNOME 48 jetzt verfügbar"))
|
||||
(body
|
||||
(en "The GNOME desktop was updated from version 46 to 48, bringing
|
||||
accent colors, an improved Files (Nautilus) application, a new image
|
||||
viewer (Loupe), and more:
|
||||
|
||||
@itemize
|
||||
@item @url{https://release.gnome.org/47/, GNOME 47 release notes}
|
||||
@item @url{https://release.gnome.org/48/, GNOME 48 release notes}
|
||||
@end itemize")
|
||||
(fr "La version 48 de l’environnement de bureau GNOME est maintenant
|
||||
disponible. Les nouvelles fonctionnalitées incluent: les couleurs d’accent,
|
||||
l’application Fichiers (Nautilus) améliorée, un nouveau visionneur
|
||||
d’images (Loupe), et plus:
|
||||
|
||||
@itemize
|
||||
@item @url{https://release.gnome.org/47/, GNOME 47 release notes}
|
||||
@item @url{https://release.gnome.org/48/, GNOME 48 release notes}
|
||||
@end itemize")
|
||||
(pt "GNOME desktop foi atualizado da versão 46 para a 48, trazendo
|
||||
cores acentuadas, um aplicativo de arquivos (Nautilus) melhorado, um novo
|
||||
visualizador de imagens (Loupe), e mais:
|
||||
|
||||
@itemize
|
||||
@item @url{https://release.gnome.org/47/, Notas de lançamento do GNOME 47}
|
||||
@item @url{https://release.gnome.org/48/, Notas de lançamento do GNOME 48}
|
||||
@end itemize")
|
||||
(de "Die GNOME-Desktopumgebung wurde von Version 46 auf 48
|
||||
aktualisiert. Neue Funktionen in dieser Version sind die Möglichkeit, eine
|
||||
Akzentfarbe zu wählen, Verbesserungen in der Dateien-Anwendung (Nautilus), ein
|
||||
neuer Bildbetrachter (Loupe), und mehr. Für eine ausführlichere Liste an
|
||||
Änderungen, siehe:
|
||||
|
||||
@itemize
|
||||
@item @url{https://release.gnome.org/47/, GNOME 47 release notes}
|
||||
@item @url{https://release.gnome.org/48/, GNOME 48 release notes}
|
||||
@end itemize")))
|
||||
|
||||
(entry (commit "d659fe8666c4bc38fcbdbe7b7a35101f2d7cc41b")
|
||||
(title
|
||||
(en "Potential security vulnerability in glibc")
|
||||
(de "Mögliche Sicherheitslücke in glibc")
|
||||
(pt "Potencial vulnerabilidade de segurança em glibc"))
|
||||
(body
|
||||
(en "Guix adds the environment variable @code{GUIX_LOCPATH} to glibc,
|
||||
however it was not added to potentially unsafe variables to be unset in
|
||||
privileged environments. A CVE number is pending for this issue. This has
|
||||
been fixed with a graft to glibc and users should update all profiles,
|
||||
reconfigure their system, and reboot.")
|
||||
(de "Guix fügt die Umgebungsvariable @code{GUIX_LOCPATH} zu glibc
|
||||
hinzu, aber sie wurde nicht zu den möglicherweise unsicheren Variablen
|
||||
hinzugefügt, die in privilegierten Umgebungen zurückgesetzt werden. Eine
|
||||
CVE-Nummer hierfür wird noch zugewiesen. Um den Fehler zu beheben, stellen
|
||||
wir eine Veredelung für glibc bereit; Nutzerinnen und Nutzer sollten all ihre
|
||||
Profile aktualisieren, ihr System rekonfigurieren und neustarten.")
|
||||
(pt "Guix adiciona a variável de ambiente @code{GUIX_LOCPATH} à
|
||||
glibc, todavia ela não foi adicionada às variáveis potencialmente inseguras
|
||||
a serem desabilitadas em ambientes privilegiados. Este incidente está
|
||||
pendente de um identificador CVE. Isto foi resolvido com um enxerto à glibc,
|
||||
e os usuários devem atualizar todos os seus perfis, reconfigurando seu
|
||||
sistema e reiniciando-o.")))
|
||||
|
||||
(entry (commit "6d4cb99a15da7f4fd55f956c55f4f4aacfcc7742")
|
||||
(title
|
||||
(en "@code{%desktop-services} now includes GDM on AArch64")
|
||||
(de "@code{%desktop-services} enthält jetzt GDM auf AArch64")
|
||||
(pt "@code{%desktop-services} agora inclui GDM no AArch64"))
|
||||
(body
|
||||
(en "On Guix System in an operating system configuration, your value for the
|
||||
@code{services} field is based on @code{%desktop-services} for desktop
|
||||
machines.
|
||||
|
||||
The @code{%desktop-services} contains a login manager that is
|
||||
architecture-dependent. Previously, GDM has been used on x86_64 and SDDM on
|
||||
other architectures.
|
||||
|
||||
Now, GDM is used on all 64-bit architectures. This affects only AArch64 in
|
||||
the end, as other 64-bit architectures aren't mature enough to use
|
||||
%desktop-services, yet.
|
||||
|
||||
In case you're on AArch64 and you've changed the login manager, you will have
|
||||
to adapt your config to remove @code{gdm-service-type} instead of
|
||||
@code{sddm-service-type}.")
|
||||
(de "Auf Guix System liegen in einer Betriebssystemkonfiguration Ihrem
|
||||
Wert des @code{services}-Feldes auf Desktop-Maschinen die
|
||||
@code{%desktop-services} zugrunde.
|
||||
|
||||
Zu den @code{%desktop-services} gehört eine Anmeldeverwaltung, die sich je nach
|
||||
Architektur unterscheidet. Bisher wurde GDM auf x86_64 benutzt und SDDM auf
|
||||
anderen Architekturen.
|
||||
|
||||
Ab jetzt wird GDM auf allen 64-Bit-Architekturen benutzt. Das betrifft
|
||||
letztlich nur AArch64, weil andere 64-Bit-Architecturen bisher noch nicht weit
|
||||
genug fortgeschritten sind, um die %desktop-services zu benutzen.
|
||||
|
||||
Falls Sie auf AArch64 sind und die Anmeldeverwaltung geändert haben, müssen Sie
|
||||
Ihre Konfiguration ändern und dort @code{gdm-service-type} entfernen statt
|
||||
@code{sddm-service-type}.")
|
||||
(pt "Em uma configuração de sistema operacional do Guix System, seu
|
||||
valor para o campo @code{services} é baseado em @code{%desktop-services} para
|
||||
máquinas desktop.
|
||||
|
||||
@code{%desktop-services} contém um gerenciador de login dependente de
|
||||
arquitetura. Anteriormente, GDM fora usado em x86_64 e SDDM nas demais.
|
||||
|
||||
Agora, GDM é usado em todas as arquiteturas de 64 bits. Esta mudança afeta
|
||||
apenas a AArch64 no frigir dos ovos, dado que as demais arquiteturas de 64
|
||||
bits não são maduras o bastante para usar @code{%desktop-services}, por
|
||||
enquanto.
|
||||
|
||||
No caso de você estar em um AArch64 e ter modificado o gerenciador de login,
|
||||
você terá que adaptar sua configuração para remover @code{gdm-service-type} em
|
||||
vez de @code{sddm-service-type}.")))
|
||||
|
||||
(entry (commit "d3b79beaa806452dceaffb8b211b69dc4c346aba")
|
||||
(title
|
||||
(en "Linux-libre 5.4 no longer supported")
|
||||
(de "Linux-libre 5.4 nicht mehr unterstützt")
|
||||
(pt "Linux-libre 5.4 não é mais suportado"))
|
||||
(body
|
||||
(en "The linux-libre 5.4 kernel series is no longer supported
|
||||
upstream and will be removed from GNU Guix soon:
|
||||
|
||||
https://www.kernel.org/category/releases.html
|
||||
|
||||
This kernel series was first added to Guix in 2019 by Mark Weaver, at version
|
||||
5.4.5. After ~297 updates delivered to Guix users, we have deployed the final
|
||||
update, 5.4.302.
|
||||
|
||||
The next kernel series removals are scheduled for December 2026, when the Linux
|
||||
long-term support team is planning to stop supporting four different kernel
|
||||
series: 6.12, 6.6, 5.15, and 5.10.")
|
||||
(de "Die Versionsreihe 5.4 des Linux-libre-Kernels wird von dessen
|
||||
Anbieter nicht mehr unterstützt und wird bald aus GNU Guix entfernt werden:
|
||||
|
||||
https://www.kernel.org/category/releases.html
|
||||
|
||||
Diese Kernel-Reihe wurde ursprünglich 2019 zu Guix hinzugefügt von Mark Weaver
|
||||
mit Version 5.4.5. Nach ~297 Aktualisierungen, die Guix seinen Nutzern
|
||||
bereitgestellt hat, haben wir nun die letzte Aktualisierung
|
||||
ausgeliefert, 5.4.302.
|
||||
|
||||
Der weitere Plan von Linux’ Team für Langzeitunterstützung sieht vor, als
|
||||
Nächstes die Unterstützung für vier verschiedene Kernel-Reihen im Dezember 2026
|
||||
zu beenden: 6.12, 6.6, 5.15 und 5.10.")
|
||||
(pt "A série 5.4 do kernel linux-libre não é mais suportada pelo
|
||||
fornecedor e será removida do GNU Guix em breve:
|
||||
|
||||
https://www.kernel.org/category/releases.html
|
||||
|
||||
Esta série de kernels foi adicionada inicialmente ao Guix em 2019 por Mark
|
||||
Weaver, na versão 5.4.5. Após ~297 atualizações entregues aos usuários do
|
||||
Guix, implantamos a atualização final, 5.4.302.
|
||||
|
||||
As próximas remoções de séries do kernel estão agendadas para dezembro de
|
||||
2026, quando o time de suporte de longo prazo planeja interromper o suporte a
|
||||
quatro séries diferentes do kernel: 6.12, 6.6, 5.15 e 5.10.")))
|
||||
|
||||
(entry (commit "14bb0192fde79909999c3880b6b66aa22499eb11")
|
||||
(title
|
||||
(en "Linux-libre 6.16 removed from Guix")
|
||||
(de "Linux-libre 6.16 wurde aus Guix entfernt")
|
||||
(pt "Linux-libre 6.16 removido do Guix")
|
||||
(zh "Linux-libre 6.16 已从 Guix 中移除"))
|
||||
(body
|
||||
(en "The linux-libre 6.16 kernel series has been removed from Guix, as
|
||||
it is no longer supported upstream. The 6.17 kernel series is now the
|
||||
default.")
|
||||
(de "Die Versionsreihe 6.16 des Linux-libre-Kernels wurde aus GNU Guix
|
||||
entfernt, weil sie von dessen Anbieter nicht mehr unterstützt wird.
|
||||
Kernel-Versionsreihe 6.17 ist jetzt vorgegeben.")
|
||||
(pt "A série 6.16 do kernel linux-libre foi removida do Guix, dado
|
||||
que não é mais suportada pelo fornecedor. A série 6.17 é o padrão atual")
|
||||
(zh "由于上游不再支持,GNU Guix 已移除 6.16 系列的 linux-libre 内核。6.17
|
||||
内核系列现已成为默认版本。")))
|
||||
|
||||
|
||||
(entry (commit "8daae75de3670594dfcb63b6ae6f1603ca6f7971")
|
||||
(title
|
||||
(en "Fundraising to sustain and strengthen Guix")
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"node-build-system"
|
||||
"ocaml-build-system"
|
||||
"perl-build-system"
|
||||
"pyproject-build-system"
|
||||
"python-build-system"
|
||||
"qt-build-system"
|
||||
"r-build-system"
|
||||
"rakudo-build-system"
|
||||
|
||||
+64
-370
@@ -14,8 +14,7 @@ exec $pre_inst_env_maybe guix repl -- "$0" "$@"
|
||||
;;; Copyright © 2022 Simon Tournier <zimon.toutoune@gmail.com>
|
||||
;;; Copyright © 2025 Jelle Licht <jlicht@fsfe.org>
|
||||
;;; Copyright © 2025 Cayetano Santos <csantosb@inventati.org>
|
||||
;;; Copyright © 2025-2026 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2025 jgart <jgart@dismail.de>
|
||||
;;; Copyright © 2025 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -92,7 +91,7 @@ exec $pre_inst_env_maybe guix repl -- "$0" "$@"
|
||||
(email person-email)
|
||||
(account person-codeberg-account))
|
||||
|
||||
(define (person name email account)
|
||||
(define* (person name #:optional email account)
|
||||
(make-person name email account))
|
||||
|
||||
(define* (team id #:key name description (members '())
|
||||
@@ -285,25 +284,14 @@ PARAMETERS."
|
||||
|
||||
;; API documentation at <https://codeberg.org/api/swagger>.
|
||||
|
||||
(define-forgejo-request (organization-teams/paginated organization page)
|
||||
"Return the list of teams of ORGANIZATION, for the given PAGE (1-indexed)."
|
||||
(define-forgejo-request (organization-teams organization)
|
||||
"Return the list of teams of ORGANIZATION."
|
||||
(GET "orgs" organization "teams"
|
||||
& `(("page" . ,(number->string page))))
|
||||
& '(("limit" . "100"))) ;get up to 100 teams
|
||||
=> 200
|
||||
(lambda (port)
|
||||
(map json->forgejo-team (vector->list (json->scm port)))))
|
||||
|
||||
(define (organization-teams token organization)
|
||||
"Return the list of teams of ORGANIZATION."
|
||||
(let loop ((index 1)
|
||||
(pages '()))
|
||||
(match (organization-teams/paginated token organization index)
|
||||
(()
|
||||
(concatenate (reverse pages)))
|
||||
(lst
|
||||
(loop (+ 1 index)
|
||||
(cons lst pages))))))
|
||||
|
||||
(define-forgejo-request (create-team organization team)
|
||||
"Create TEAM, a Forgejo team, under ORGANIZATION."
|
||||
(POST "orgs" organization "teams")
|
||||
@@ -338,12 +326,6 @@ PARAMETERS."
|
||||
"members" user)
|
||||
=> 204)
|
||||
|
||||
(define-forgejo-request (remove-team-member team user)
|
||||
"Remove USER (a string) from TEAM, a Forgejo team."
|
||||
(DELETE "teams" (number->string (forgejo-team-id team))
|
||||
"members" user)
|
||||
=> 204)
|
||||
|
||||
(define-forgejo-request (repository-teams owner repository)
|
||||
"Return the list of teams assigned to REPOSITORY of OWNER."
|
||||
(GET "repos" owner repository "teams"
|
||||
@@ -390,8 +372,7 @@ PARAMETERS."
|
||||
to-add)
|
||||
(for-each (lambda (user)
|
||||
(format log-port "removing '~a' from team '~a'~%"
|
||||
user (forgejo-team-name forgejo-team))
|
||||
(remove-team-member token forgejo-team user))
|
||||
user (forgejo-team-name forgejo-team)))
|
||||
to-remove)))
|
||||
|
||||
(define* (synchronize-team token team
|
||||
@@ -474,49 +455,15 @@ already exists. Lookup team IDs among CURRENT-TEAMS."
|
||||
#:description "Audio related packages."
|
||||
#:scope (list "gnu/packages/audio.scm"
|
||||
"gnu/packages/fluidplug.scm"
|
||||
"gnu/packages/music.scm"
|
||||
"gnu/packages/xiph.scm")))
|
||||
|
||||
(define-team beam
|
||||
(team 'beam
|
||||
#:name "Erlang/Elixir/BEAM team"
|
||||
#:description "The virtual machine at the core of the Erlang Open
|
||||
Telecom Platform (OTP), Erlang and Elxir languages and packages, development
|
||||
of Rebar and Mix build systems and Hex.pm importer."
|
||||
#:scope (list (make-regexp* "^gnu/packages/elixir(-.+|)\\.scm$")
|
||||
"guix/build/mix-build-system.scm"
|
||||
"guix/build-system/mix.scm"
|
||||
(make-regexp* "^gnu/packages/erlang(-.+|)\\.scm$")
|
||||
"guix/build/rebar-build-system.scm"
|
||||
"guix/build-system/rebar.scm"
|
||||
"guix/import/hexpm.scm"
|
||||
"guix/scripts/import/hexpm.scm")))
|
||||
|
||||
(define-team bioinformatics
|
||||
(team 'bioinformatics
|
||||
#:name "Bioinformatics team"
|
||||
#:scope (list "gnu/packages/bioinformatics.scm")))
|
||||
|
||||
(define-team bootstrap
|
||||
(team 'bootstrap
|
||||
#:name "Bootstrap"
|
||||
#:description "Full-source bootstrap: stage0, Mes, Gash, etc."
|
||||
#:scope (list "gnu/packages/bootstrap.scm"
|
||||
"gnu/packages/commencement.scm"
|
||||
#:scope (list "gnu/packages/commencement.scm"
|
||||
"gnu/packages/mes.scm")))
|
||||
|
||||
(define-team build-tools
|
||||
(team 'build-tools
|
||||
#:name "Build tools team"
|
||||
#:description "Build tools and parser generators."
|
||||
#:scope (list "gnu/packages/assembly.scm"
|
||||
"gnu/packages/autogen.scm"
|
||||
"gnu/packages/autotools.scm"
|
||||
"gnu/packages/bison.scm"
|
||||
"gnu/packages/m4.scm"
|
||||
"gnu/packages/oyacc.scm"
|
||||
"gnu/packages/re2c.scm")))
|
||||
|
||||
(define-team c++
|
||||
(team 'c++
|
||||
#:name "C/C++ team"
|
||||
@@ -530,19 +477,11 @@ of Rebar and Mix build systems and Hex.pm importer."
|
||||
"gnu/packages/ninja.scm"
|
||||
"gnu/packages/valgrind.scm")))
|
||||
|
||||
(define-team community
|
||||
(team 'community
|
||||
#:name "Community"
|
||||
#:description
|
||||
"We focus on collaboration, project growth and future (social)
|
||||
challenges"))
|
||||
|
||||
(define-team core
|
||||
(team 'core
|
||||
#:name "Core / Tools / Internals"
|
||||
#:scope
|
||||
(list "etc/teams.scm"
|
||||
"guix/avahi.scm"
|
||||
(list "guix/avahi.scm"
|
||||
"guix/base16.scm"
|
||||
"guix/base32.scm"
|
||||
"guix/base64.scm"
|
||||
@@ -602,7 +541,6 @@ challenges"))
|
||||
"guix/read-print.scm"
|
||||
"guix/records.scm"
|
||||
"guix/remote.scm"
|
||||
"guix/remote-procedures.scm"
|
||||
"guix/repl.scm"
|
||||
"guix/search-paths.scm"
|
||||
"guix/self.scm"
|
||||
@@ -664,7 +602,6 @@ challenges"))
|
||||
#:name "Electronics team"
|
||||
#:description "Electronics and hardware related packages."
|
||||
#:scope (list "gnu/packages/electronics.scm"
|
||||
"gnu/packages/hdl.scm"
|
||||
"gnu/packages/libftdi.scm"
|
||||
"gnu/packages/engineering.scm"
|
||||
"gnu/packages/flashing-tools.scm")))
|
||||
@@ -701,8 +638,6 @@ ecosystem."
|
||||
"gnu/packages/luanti.scm"
|
||||
"gnu/packages/esolangs.scm" ; granted, rather niche
|
||||
"gnu/packages/motti.scm"
|
||||
"gnu/services/games.scm"
|
||||
"gnu/tests/games.scm"
|
||||
"guix/build/luanti-build-system.scm")))
|
||||
|
||||
(define-team gnome
|
||||
@@ -716,7 +651,6 @@ GLib/GIO, GTK, GStreamer and Webkit."
|
||||
"gnu/packages/gstreamer.scm"
|
||||
"gnu/packages/gtk.scm"
|
||||
"gnu/packages/gnome.scm"
|
||||
"gnu/packages/gnome-circle.scm"
|
||||
"gnu/packages/gnome-xyz.scm"
|
||||
"gnu/packages/webkit.scm"
|
||||
"gnu/services/desktop.scm"
|
||||
@@ -736,26 +670,6 @@ GLib/GIO, GTK, GStreamer and Webkit."
|
||||
"guix/scripts/import/go.scm"
|
||||
"tests/import/go.scm")))
|
||||
|
||||
(define-team guile
|
||||
(team 'guile
|
||||
#:name "Guile team"
|
||||
#:description
|
||||
"Team for the Guile platform, libraries, and build system."
|
||||
#:scope (list "gnu/packages/guile.scm"
|
||||
"gnu/packages/guile-wm.scm"
|
||||
"gnu/packages/guile-xyz.scm"
|
||||
"guix/build-system/guile.scm"
|
||||
"guix/build/guile-build-system.scm")))
|
||||
|
||||
(define-team hare
|
||||
(team 'hare
|
||||
#:name "Hare"
|
||||
#:scope (list "gnu/packages/hare.scm"
|
||||
"gnu/packages/hare-apps.scm"
|
||||
"gnu/packages/hare-xyz.scm"
|
||||
"guix/build-system/hare.scm"
|
||||
"guix/build/hare-build-system.scm")))
|
||||
|
||||
(define-team haskell
|
||||
(team 'haskell
|
||||
#:name "Haskell team"
|
||||
@@ -784,15 +698,10 @@ the haskell-build-system."
|
||||
|
||||
(define-team hpc
|
||||
(team 'hpc
|
||||
#:name "High-performance computing team"
|
||||
#:description "High-performance computing (HPC) related packages."
|
||||
#:name "Hpc team"
|
||||
#:description "High performance computing related packages."
|
||||
#:scope (list "gnu/packages/mpi.scm"
|
||||
"gnu/packages/oneapi.scm"
|
||||
"gnu/packages/opencl.scm"
|
||||
"gnu/packages/parallel.scm"
|
||||
"gnu/packages/rocm.scm"
|
||||
"gnu/packages/rocm-tools.scm"
|
||||
"gnu/packages/rocm-libs.scm"
|
||||
"gnu/packages/sycl.scm"
|
||||
"gnu/packages/tbb.scm"
|
||||
"gnu/packages/vulkan.scm")))
|
||||
@@ -819,20 +728,16 @@ the haskell-build-system."
|
||||
"The JDK and JRE, the Maven build system, Java packages, the ant-build-system,
|
||||
and the maven-build-system."
|
||||
#:scope
|
||||
(list "gnu/packages/clojure.scm"
|
||||
;; Match java.scm and java-*.scm.
|
||||
(list ;; Match java.scm and java-*.scm.
|
||||
(make-regexp* "^gnu/packages/java(-.+|)\\.scm$")
|
||||
;; Match maven.scm and maven-*.scm
|
||||
(make-regexp* "^gnu/packages/maven(-.+|)\\.scm$")
|
||||
"guix/build/ant-build-system.scm"
|
||||
"guix/build/clojure-build-system.scm"
|
||||
"guix/build/clojure-utils.scm"
|
||||
"guix/build/java-utils.scm"
|
||||
"guix/build/maven-build-system.scm"
|
||||
;; The maven directory
|
||||
(make-regexp* "^guix/build/maven/")
|
||||
"guix/build-system/ant.scm"
|
||||
"guix/build-system/clojure.scm"
|
||||
"guix/build-system/maven.scm")))
|
||||
|
||||
(define-team javascript
|
||||
@@ -894,26 +799,12 @@ asdf-build-system."
|
||||
"gnu/packages/fonts.scm"
|
||||
"gnu/packages/ibus.scm")))
|
||||
|
||||
(define-team lua
|
||||
(team 'lua
|
||||
#:name "Lua team"
|
||||
#:description
|
||||
"Lua, Fennel, and related packages."
|
||||
#:scope (list "gnu/packages/lua.scm"
|
||||
"gnu/packages/luanti.scm")))
|
||||
|
||||
(define-team lxqt
|
||||
(team 'lxqt
|
||||
#:name "LXQt team"
|
||||
#:description "LXQt desktop environment."
|
||||
#:scope (list "gnu/packages/lxqt.scm")))
|
||||
|
||||
(define-team mate
|
||||
(team 'mate
|
||||
#:name "MATE team"
|
||||
#:description "MATE desktop environment"
|
||||
#:scope (list "gnu/packages/mate.scm")))
|
||||
|
||||
(define-team mentors
|
||||
(team 'mentors
|
||||
#:name "Mentors"
|
||||
@@ -949,21 +840,6 @@ importer, and the ocaml-build-system."
|
||||
"guix/scripts/import/opam.scm"
|
||||
"tests/import/opam.scm")))
|
||||
|
||||
(define-team perl
|
||||
(team 'perl
|
||||
#:name "Perl and Raku team"
|
||||
#:description
|
||||
"Perl & Raku packages, the \"cpan\" importer, and the
|
||||
perl-build-system as well as the rakudo-build-system."
|
||||
#:scope
|
||||
(list (make-regexp* "^gnu/packages/perl(-.+|)\\.scm$")
|
||||
"guix/build/perl-build-system.scm"
|
||||
"guix/build/rakudo-build-system.scm"
|
||||
"guix/build-system/perl.scm"
|
||||
"guix/build-system/rakudo.scm"
|
||||
"guix/import/cpan.scm"
|
||||
"guix/scripts/import/cpan.scm")))
|
||||
|
||||
(define-team python
|
||||
(team 'python
|
||||
#:name "Python team"
|
||||
@@ -975,32 +851,13 @@ perl-build-system as well as the rakudo-build-system."
|
||||
(make-regexp* "^gnu/packages/python(-.+|)\\.scm$")
|
||||
"gnu/packages/sphinx.scm"
|
||||
"gnu/packages/tryton.scm"
|
||||
"guix/build-system/pyproject.scm"
|
||||
"guix/build-system/python.scm"
|
||||
"guix/build/pyproject-build-system.scm"
|
||||
"guix/build-system/pyproject.scm"
|
||||
"guix/build/python-build-system.scm"
|
||||
"guix/build/toml.scm" ;temporary, until other build system will use it
|
||||
"guix/build-system/python.scm"
|
||||
"guix/import/pypi.scm"
|
||||
"guix/scripts/import/pypi.scm"
|
||||
"tests/import/pypi.scm"
|
||||
"tests/toml.scm")))
|
||||
|
||||
(define-team qa-packages
|
||||
(team 'qa-packages
|
||||
#:name "Team for quality assurance packages"
|
||||
#:description
|
||||
"Quality assurance software (CI/CD, testing, analysis;
|
||||
no direct relation to Guix's QA)."
|
||||
#:scope (list "gnu/ci.scm"
|
||||
"gnu/packages/benchmark.scm"
|
||||
"gnu/packages/check.scm"
|
||||
"gnu/packages/ci.scm"
|
||||
"gnu/packages/code.scm"
|
||||
"gnu/packages/debug.scm"
|
||||
"gnu/packages/dezyne.scm"
|
||||
"gnu/packages/libunwind.scm"
|
||||
"gnu/services/ci.scm"
|
||||
"gnu/tests/ci.scm")))
|
||||
"tests/import/pypi.scm")))
|
||||
|
||||
(define-team qt
|
||||
(team 'qt
|
||||
@@ -1044,8 +901,7 @@ importer."
|
||||
"The current release team. Members are expected to change with each
|
||||
release."
|
||||
#:scope (list "NEWS"
|
||||
"etc/manifests/release-minimal.scm"
|
||||
"etc/manifests/release-desktop.scm")))
|
||||
"etc/manifests/release.scm")))
|
||||
|
||||
(define-team reproduciblebuilds
|
||||
(team 'reproduciblebuilds
|
||||
@@ -1057,7 +913,7 @@ release."
|
||||
(define-team ruby
|
||||
(team 'ruby
|
||||
#:name "Ruby team"
|
||||
#:scope (list (make-regexp* "^gnu/packages/(ruby)(-.+|)\\.scm$")
|
||||
#:scope (list "gnu/packages/ruby.scm"
|
||||
"guix/build/ruby-build-system.scm"
|
||||
"guix/build-system/ruby.scm"
|
||||
"guix/import/gem.scm"
|
||||
@@ -1077,22 +933,6 @@ release."
|
||||
"guix/scripts/import/crate.scm"
|
||||
"tests/import/crate.scm")))
|
||||
|
||||
(define-team crypto
|
||||
(team 'crypto
|
||||
#:name "Crypto team"
|
||||
#:description
|
||||
"Secrets, passwords, cryptography and security related packages."
|
||||
#:scope (list (make-regexp* "^gnu/packages/(.*-|)crypto\\.scm$")
|
||||
"gnu/packages/cryptsetup.scm"
|
||||
"gnu/packages/cybersecurity.scm"
|
||||
"gnu/packages/gnupg.scm"
|
||||
"gnu/packages/nettle.scm"
|
||||
"gnu/packages/password-utils.scm"
|
||||
"gnu/packages/security-token.scm"
|
||||
"gnu/packages/ssh.scm"
|
||||
"gnu/packages/tls.scm"
|
||||
"gnu/packages/vpn.scm")))
|
||||
|
||||
(define-team science
|
||||
(team 'science
|
||||
#:name "Science team"
|
||||
@@ -1107,7 +947,6 @@ packages (e.g. Astronomy, Chemistry, Math, Physics etc.)"
|
||||
"gnu/packages/lean.scm"
|
||||
"gnu/packages/maths.scm"
|
||||
"gnu/packages/medical.scm"
|
||||
"gnu/packages/physics.scm"
|
||||
"gnu/packages/sagemath.scm"
|
||||
"gnu/packages/statistics.scm")))
|
||||
|
||||
@@ -1130,7 +969,7 @@ packages (e.g. Astronomy, Chemistry, Math, Physics etc.)"
|
||||
"gnu/packages/apparmor.scm"
|
||||
"gnu/packages/authentication.scm"
|
||||
"gnu/packages/cluster.scm"
|
||||
"gnu/packages/configuration-management.scm"
|
||||
"gnu/packages/configuration-management"
|
||||
"gnu/packages/databases.scm"
|
||||
"gnu/packages/distributed.scm"
|
||||
"gnu/packages/dns.scm"
|
||||
@@ -1143,32 +982,12 @@ packages (e.g. Astronomy, Chemistry, Math, Physics etc.)"
|
||||
"gnu/packages/openstack.scm"
|
||||
"gnu/packages/prometheus.scm"
|
||||
"gnu/packages/rdesktop.scm"
|
||||
"gnu/packages/samba.scm"
|
||||
"gnu/packages/selinux.scm"
|
||||
"gnu/packages/storage.scm"
|
||||
"gnu/packages/task-runners.scm"
|
||||
"gnu/packages/terraform.scm"
|
||||
"gnu/packages/virtualization.scm"
|
||||
"gnu/packages/vnc.scm"
|
||||
"gnu/services/admin.scm"
|
||||
"gnu/services/authentication.scm"
|
||||
"gnu/services/databases.scm"
|
||||
"gnu/services/dns.scm"
|
||||
"gnu/services/high-availability.scm"
|
||||
"gnu/services/kerberos.scm"
|
||||
"gnu/services/monitoring.scm"
|
||||
"gnu/services/nfs.scm"
|
||||
"gnu/services/samba.scm"
|
||||
"gnu/services/virtualization.scm"
|
||||
"gnu/services/vnc.scm"
|
||||
"gnu/tests/databases.scm"
|
||||
"gnu/tests/dns.scm"
|
||||
"gnu/tests/high-availability.scm"
|
||||
"gnu/tests/monitoring.scm"
|
||||
"gnu/tests/nfs.scm"
|
||||
"gnu/tests/samba.scm"
|
||||
"gnu/tests/virtualization.scm"
|
||||
"gnu/tests/vnc.scm")))
|
||||
"gnu/packages/vnc.scm")))
|
||||
|
||||
(define-team telephony
|
||||
(team 'telephony
|
||||
@@ -1204,20 +1023,6 @@ the \"texlive\" importer."
|
||||
#:scope (list "etc/news.scm"
|
||||
(make-regexp* "^po/"))))
|
||||
|
||||
(define-team vcs
|
||||
(team 'vcs
|
||||
#:name "Version control team"
|
||||
#:description
|
||||
"Version control packages, services, and Guix download backends."
|
||||
#:scope (list "gnu/packages/version-control.scm"
|
||||
"gnu/services/version-control.scm"
|
||||
"gnu/tests/version-control.scm"
|
||||
"guix/build/bzr.scm"
|
||||
"guix/build/cvs.scm"
|
||||
"guix/build/git.scm"
|
||||
"guix/build/hg.scm"
|
||||
"guix/build/svn.scm")))
|
||||
|
||||
(define-team xfce
|
||||
(team 'xfce
|
||||
#:name "Xfce team"
|
||||
@@ -1239,6 +1044,11 @@ the \"texlive\" importer."
|
||||
"bavier")
|
||||
science)
|
||||
|
||||
(define-member (person "Lars-Dominik Braun"
|
||||
"lars@6xq.net"
|
||||
"ldb")
|
||||
python haskell)
|
||||
|
||||
(define-member (person "Jonathan Brielmaier"
|
||||
"jonathan.brielmaier@web.de"
|
||||
"jonsger")
|
||||
@@ -1248,12 +1058,12 @@ the \"texlive\" importer."
|
||||
"ludo@gnu.org"
|
||||
"civodul")
|
||||
core core-packages hpc installer
|
||||
guile)
|
||||
mentors)
|
||||
|
||||
(define-member (person "Andreas Enge"
|
||||
"andreas@enge.fr"
|
||||
"enge")
|
||||
bootstrap c++ core-packages crypto lxqt science tex)
|
||||
bootstrap core-packages lxqt science tex)
|
||||
|
||||
(define-member (person "Tanguy Le Carrour"
|
||||
"tanguy@bioneland.org"
|
||||
@@ -1283,7 +1093,7 @@ the \"texlive\" importer."
|
||||
(define-member (person "jgart"
|
||||
"jgart@dismail.de"
|
||||
"jgart")
|
||||
hare lisp mentors)
|
||||
lisp mentors)
|
||||
|
||||
(define-member (person "Guillaume Le Vaillant"
|
||||
"glv@posteo.net"
|
||||
@@ -1313,12 +1123,12 @@ the \"texlive\" importer."
|
||||
(define-member (person "Liliana Marie Prikler"
|
||||
"liliana.prikler@gmail.com"
|
||||
"lilyp")
|
||||
emacs games gnome qa-packages)
|
||||
emacs games gnome)
|
||||
|
||||
(define-member (person "Ricardo Wurmus"
|
||||
"rekado@elephly.net"
|
||||
"rekado")
|
||||
bioinformatics r sugar)
|
||||
r sugar)
|
||||
|
||||
(define-member (person "Christopher Baines"
|
||||
"guix@cbaines.net"
|
||||
@@ -1330,24 +1140,21 @@ the \"texlive\" importer."
|
||||
"abcdw")
|
||||
home emacs)
|
||||
|
||||
(define-member (person "Trevor Richards"
|
||||
"trev@trevdev.ca"
|
||||
"trevdev")
|
||||
emacs lisp)
|
||||
|
||||
(define-member (person "pukkamustard"
|
||||
"pukkamustard@posteo.net"
|
||||
"pukkamustard")
|
||||
ocaml)
|
||||
|
||||
(define-member (person "Josselin Poiret"
|
||||
"dev@jpoiret.xyz"
|
||||
"jpoiret")
|
||||
"dev@jpoiret.xyz")
|
||||
installer)
|
||||
|
||||
(define-member (person "("
|
||||
"paren@disroot.org")
|
||||
)
|
||||
|
||||
(define-member (person "Simon Tournier"
|
||||
"zimon.toutoune@gmail.com"
|
||||
"zimoun")
|
||||
"zimon.toutoune@gmail.com")
|
||||
julia core mentors r)
|
||||
|
||||
(define-member (person "宋文武"
|
||||
@@ -1358,7 +1165,7 @@ the \"texlive\" importer."
|
||||
(define-member (person "Vagrant Cascadian"
|
||||
"vagrant@debian.org"
|
||||
"vagrantc")
|
||||
debian embedded kernel)
|
||||
debian embedded)
|
||||
|
||||
(define-member (person "Vagrant Cascadian" ;XXX: duplicate
|
||||
"vagrant@reproducible-builds.org"
|
||||
@@ -1371,19 +1178,18 @@ the \"texlive\" importer."
|
||||
core documentation electronics gnome qt telephony)
|
||||
|
||||
(define-member (person "Katherine Cox-Buday"
|
||||
"cox.katherine.e+guix@gmail.com"
|
||||
"katco")
|
||||
emacs lisp)
|
||||
"cox.katherine.e+guix@gmail.com")
|
||||
emacs go lisp)
|
||||
|
||||
(define-member (person "Munyoki Kilyungi"
|
||||
"me@bonfacemunyoki.com"
|
||||
"BonfaceKilz")
|
||||
python guile)
|
||||
python lisp)
|
||||
|
||||
(define-member (person "Gabriel Wicki"
|
||||
"gabriel@erlikon.ch"
|
||||
"gabber")
|
||||
audio community documentation electronics embedded)
|
||||
audio documentation electronics embedded)
|
||||
|
||||
(define-member (person "Ekaitz Zarraga"
|
||||
"ekaitz@elenq.tech"
|
||||
@@ -1405,20 +1211,22 @@ the \"texlive\" importer."
|
||||
"Hellseher")
|
||||
go julia python science sysadmin)
|
||||
|
||||
(define-member (person "Arthur Rodrigues"
|
||||
"arthurhdrodrigues@proton.me"
|
||||
"arthurhdrodrigues")
|
||||
go)
|
||||
(define-member (person "Vivien Kraus"
|
||||
"vivien@planete-kraus.eu")
|
||||
gnome)
|
||||
|
||||
(define-member (person "Mark H Weaver"
|
||||
"mhw@netris.org"
|
||||
"mhw")
|
||||
mozilla)
|
||||
|
||||
(define-member (person "Adam Faiz"
|
||||
"adam.faiz@disroot.org")
|
||||
games)
|
||||
|
||||
(define-member (person "Laurent Gatto"
|
||||
"lgatto@protonmail.ch"
|
||||
"lgatto")
|
||||
r bioinformatics)
|
||||
"laurent.gatto@gmail.com")
|
||||
r)
|
||||
|
||||
(define-member (person "Nicolas Goaziou"
|
||||
"guix@nicolasgoaziou.fr"
|
||||
@@ -1433,7 +1241,7 @@ the \"texlive\" importer."
|
||||
(define-member (person "Janneke Nieuwenhuizen"
|
||||
"janneke@gnu.org"
|
||||
"janneke")
|
||||
bootstrap build-tools core-packages home hurd installer qa-packages)
|
||||
bootstrap core-packages home hurd installer)
|
||||
|
||||
(define-member (person "Ian Eure"
|
||||
"ian@retrospec.tv"
|
||||
@@ -1443,7 +1251,7 @@ the \"texlive\" importer."
|
||||
(define-member (person "Zheng Junjie"
|
||||
"z572@z572.online"
|
||||
"Z572")
|
||||
core-packages)
|
||||
core-packages qt kde)
|
||||
|
||||
(define-member (person "Sughosha"
|
||||
"sughosha@disroot.org"
|
||||
@@ -1458,7 +1266,7 @@ the \"texlive\" importer."
|
||||
(define-member (person "Cayetano Santos"
|
||||
"csantosb@inventati.org"
|
||||
"csantosb")
|
||||
ai emacs electronics hpc crypto reproduciblebuilds)
|
||||
ai emacs electronics hpc)
|
||||
|
||||
(define-member (person "Greg Hogan"
|
||||
"code@greghogan.com"
|
||||
@@ -1467,7 +1275,8 @@ the \"texlive\" importer."
|
||||
|
||||
(define-member (person "Hilton Chain"
|
||||
"hako@ultrarare.space"
|
||||
"hako"))
|
||||
"hako")
|
||||
emacs home localization mozilla rust zig)
|
||||
|
||||
(define-member (person "Noé Lopez"
|
||||
"noelopez@free.fr"
|
||||
@@ -1479,6 +1288,10 @@ the \"texlive\" importer."
|
||||
"Ashvith")
|
||||
games go javascript sysadmin xfce)
|
||||
|
||||
(define-member (person "Trevor Richards"
|
||||
"trev@trevdev.ca")
|
||||
lisp emacs)
|
||||
|
||||
(define-member (person "Konrad Hinsen"
|
||||
"guix@khinsen.fastmail.net"
|
||||
"khinsen")
|
||||
@@ -1492,7 +1305,7 @@ the \"texlive\" importer."
|
||||
(define-member (person "Nicolas Graves"
|
||||
"ngraves@ngraves.fr"
|
||||
"nicolas-graves")
|
||||
core javascript python ruby)
|
||||
javascript python ruby)
|
||||
|
||||
(define-member (person "Yelninei"
|
||||
"yelninei@tutamail.com"
|
||||
@@ -1500,9 +1313,9 @@ the \"texlive\" importer."
|
||||
hurd)
|
||||
|
||||
(define-member (person "Giacomo Leidi"
|
||||
"therewasa@fishinthecalculator.me"
|
||||
"goodoldpaul@autistici.org"
|
||||
"fishinthecalculator")
|
||||
audio beam)
|
||||
audio)
|
||||
|
||||
(define-member (person "Saku Laesvuori"
|
||||
"saku@laesvuori.fi"
|
||||
@@ -1512,12 +1325,7 @@ the \"texlive\" importer."
|
||||
(define-member (person "Rodion Goritskov"
|
||||
"rodion@goritskov.com"
|
||||
"rodion-goritskov")
|
||||
games java kde kernel release)
|
||||
|
||||
(define-member (person "Jason Conroy"
|
||||
"jconroy@tscripta.net"
|
||||
"conroj")
|
||||
ocaml)
|
||||
release)
|
||||
|
||||
(define-member (person "Rutherther"
|
||||
"rutherther@ditigal.xyz"
|
||||
@@ -1532,117 +1340,7 @@ the \"texlive\" importer."
|
||||
(define-member (person "Danny Milosavljevic"
|
||||
"dannym@friendly-machines.com"
|
||||
"daym")
|
||||
bootstrap hpc python rust science)
|
||||
|
||||
(define-member (person "Andy Tai"
|
||||
"atai@atai.org"
|
||||
"atai")
|
||||
ai)
|
||||
|
||||
(define-member (person "Pierre-Henry Fröhring"
|
||||
"contact@phfrohring.com"
|
||||
"phfrohring")
|
||||
beam)
|
||||
|
||||
(define-member (person "Igorj Gorjaĉev"
|
||||
"igor@goryachev.org"
|
||||
"delitrem")
|
||||
beam)
|
||||
|
||||
(define-member (person "Nguyễn Gia Phong"
|
||||
"cnx@loang.net"
|
||||
"cnx")
|
||||
build-tools python qa-packages sysadmin vcs)
|
||||
|
||||
(define-member (person "Lilah Tascheter"
|
||||
"lilah@lunabee.space"
|
||||
"tinystar")
|
||||
hare)
|
||||
|
||||
(define-member (person "FuncProgLinux"
|
||||
"softwarelibre@urutau-ltd.org"
|
||||
"FuncProgLinux")
|
||||
mate)
|
||||
|
||||
(define-member (person "Reza Housseini"
|
||||
"reza@housseini.me"
|
||||
"rhou")
|
||||
python science c++)
|
||||
|
||||
(define-member (person "Yunqi Shao"
|
||||
"me@yqshao.se"
|
||||
"yqshao")
|
||||
sysadmin)
|
||||
|
||||
(define-member (person "Collin Doering"
|
||||
"collin@rekahsoft.ca"
|
||||
"rekahsoft")
|
||||
embedded electronics haskell sysadmin)
|
||||
|
||||
(define-member (person "Mathieu Lirzin"
|
||||
"mthl@gnu.org"
|
||||
"mthl")
|
||||
java)
|
||||
|
||||
(define-member (person "Hugo Buddelmeijer"
|
||||
"hugo@buddelmeijer.nl"
|
||||
"hugobuddel")
|
||||
python)
|
||||
|
||||
(define-member (person "Yan Abu Arab"
|
||||
"yanabuarab@gmail.com"
|
||||
"tux1c")
|
||||
python sysadmin)
|
||||
|
||||
(define-member (person "Wilko Meyer"
|
||||
"w@wmeyer.eu"
|
||||
"theesm")
|
||||
kernel perl)
|
||||
|
||||
(define-member (person "Untrusem"
|
||||
"mysticmoksh@riseup.net"
|
||||
"untrusem")
|
||||
community mozilla)
|
||||
|
||||
(define-member (person "David Thompson"
|
||||
"dthompson2@worcester.edu"
|
||||
"flockofbirbs")
|
||||
guile)
|
||||
|
||||
(define-member (person "Sergio Pastor Pérez"
|
||||
"sergio.pastorperez@gmail.com"
|
||||
"pastor")
|
||||
guile hpc kde)
|
||||
|
||||
(define-member (person "Carlo Zancanaro"
|
||||
"carlo@zancanaro.id.au"
|
||||
"czan")
|
||||
lua ruby)
|
||||
|
||||
(define-member (person "Folât Pjêrsômêj"
|
||||
"folaht@protonmail.com"
|
||||
"folaht")
|
||||
documentation)
|
||||
|
||||
(define-member (person "Thanos Apollo"
|
||||
"public@thanosapollo.org"
|
||||
"thanosapollo")
|
||||
vcs)
|
||||
|
||||
(define-member (person "Ashish SHUKLA"
|
||||
"ashish.is@lostca.se"
|
||||
"group")
|
||||
vcs)
|
||||
|
||||
(define-member (person "Spencer King"
|
||||
"spencer.king@wustl.edu"
|
||||
"spencerking")
|
||||
julia)
|
||||
|
||||
(define-member (person "Peter Polidoro"
|
||||
"peter@polidoro.io"
|
||||
"peterpolidoro")
|
||||
electronics)
|
||||
bootstrap hpc rust science)
|
||||
|
||||
|
||||
(define (find-team name)
|
||||
@@ -1833,12 +1531,8 @@ and REV-END, two git revision strings."
|
||||
# usually suited as a reviewer.\n\n"
|
||||
port)
|
||||
(for-each (lambda (team)
|
||||
(let ((scope (team->codeowners-snippet team)))
|
||||
;; Some teams, like Mentors and Community have no scope,
|
||||
;; which would result in seemingly arbitrary newlines.
|
||||
(unless (string-null? scope)
|
||||
(display scope port)
|
||||
(newline port))))
|
||||
(display (team->codeowners-snippet team) port)
|
||||
(newline port))
|
||||
teams)))
|
||||
|
||||
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 Giacomo Leidi <therewasa@fishinthecalculator.me>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; This file returns a manifest of packages built using the mix-build-system.
|
||||
;;; It is used to assist continuous integration of the beam-team branch.
|
||||
;;;
|
||||
;;;
|
||||
;;; You can use it to build all covered packages with:
|
||||
;;;
|
||||
;;; ./pre-inst-env guix build -m etc/teams/beam/elixir-manifest.scm
|
||||
;;;
|
||||
;;; or to update them with:
|
||||
;;;
|
||||
;;; ./pre-inst-env guix refresh -u -m etc/teams/beam/elixir-manifest.scm
|
||||
|
||||
(use-modules (guix packages)
|
||||
(guix profiles)
|
||||
(guix gexp)
|
||||
(guix build-system)
|
||||
(ice-9 match)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26))
|
||||
|
||||
(define* (has-mix-build-system? build-system #:key modules #:allow-other-keys)
|
||||
(or (eq? (build-system-name build-system) 'mix)
|
||||
(any
|
||||
(match-lambda
|
||||
(('guix 'build 'mix-build-system) #t)
|
||||
('((guix build mix-build-system) . _) #t)
|
||||
(_ #f))
|
||||
(cond
|
||||
((gexp? modules) (gexp->approximate-sexp modules))
|
||||
((pair? modules) modules)
|
||||
(else '())))))
|
||||
|
||||
(manifest
|
||||
(map package->manifest-entry
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (apply has-mix-build-system?
|
||||
(package-build-system package)
|
||||
(package-arguments package))
|
||||
(cons package lst)
|
||||
lst))
|
||||
(list))))
|
||||
@@ -1,60 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 Giacomo Leidi <therewasa@fishinthecalculator.me>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; This file returns a manifest of packages built using the rebar-build-system.
|
||||
;;; It is used to assist continuous integration of the beam-team branch.
|
||||
;;;
|
||||
;;;
|
||||
;;; You can use it to build all covered packages with:
|
||||
;;;
|
||||
;;; ./pre-inst-env guix build -m etc/teams/beam/erlang-manifest.scm
|
||||
;;;
|
||||
;;; or to update them with:
|
||||
;;;
|
||||
;;; ./pre-inst-env guix refresh -u -m etc/teams/beam/erlang-manifest.scm
|
||||
|
||||
(use-modules (guix packages)
|
||||
(guix profiles)
|
||||
(guix gexp)
|
||||
(guix build-system)
|
||||
(ice-9 match)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26))
|
||||
|
||||
(define* (has-rebar-build-system? build-system #:key modules #:allow-other-keys)
|
||||
(or (eq? (build-system-name build-system) 'rebar)
|
||||
(any
|
||||
(match-lambda
|
||||
(('guix 'build 'rebar-build-system) #t)
|
||||
('((guix build rebar-build-system) . _) #t)
|
||||
(_ #f))
|
||||
(cond
|
||||
((gexp? modules) (gexp->approximate-sexp modules))
|
||||
((pair? modules) modules)
|
||||
(else '())))))
|
||||
|
||||
(manifest
|
||||
(map package->manifest-entry
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (apply has-rebar-build-system?
|
||||
(package-build-system package)
|
||||
(package-arguments package))
|
||||
(cons package lst)
|
||||
lst))
|
||||
(list))))
|
||||
@@ -48,11 +48,11 @@
|
||||
(define %gnome-releng-versions-uri
|
||||
(make-parameter
|
||||
(or (getenv "GNOME_RELENG_VERSIONS_URI")
|
||||
"https://gitlab.gnome.org/GNOME/releng/-/raw/master/tools/versions-49")))
|
||||
"https://gitlab.gnome.org/GNOME/releng/-/raw/master/\
|
||||
tools/versions-stable")))
|
||||
|
||||
(define (fetch-releng-content)
|
||||
"Return a string corresponding to the content of the %GNOME-RELENG-VERSIONS-URI
|
||||
file."
|
||||
"Return an input port to the %GNOME-RELENG-VERSIONS-URI file."
|
||||
(call-with-port (http-fetch/cached (%gnome-releng-versions-uri))
|
||||
get-string-all))
|
||||
|
||||
@@ -72,14 +72,11 @@ C < ':'
|
||||
NL < '\n'")
|
||||
|
||||
(define %names
|
||||
'(("adwaita-fonts" . "font-adwaita")
|
||||
("glycin" . "glycin-loaders")
|
||||
("pygobject" . "python-pygobject")
|
||||
("pyatspi" . "python-pyatspi")))
|
||||
'(("adwaita-fonts" . "font-adwaita")))
|
||||
|
||||
(define (parse-releng data)
|
||||
"Return the complete parse tree for DATA, a string representing the content of
|
||||
a GNOME releng file."
|
||||
"Return DATA, a string representing the content of a GNOME releng file, and
|
||||
return the complete parse tree."
|
||||
(let ((tree (peg:tree (match-pattern releng data))))
|
||||
(match tree
|
||||
(#f (raise-exception (make-releng-parser-error)))
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2026 jgart <jgart@dismail.de>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; This file returns a manifest of packages built using the go-build-system.
|
||||
;;; It is used to assist continuous integration of the go-team branch.
|
||||
|
||||
(use-modules (guix packages)
|
||||
(guix profiles)
|
||||
(guix build-system))
|
||||
|
||||
(manifest
|
||||
(map package->manifest-entry
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (or (eq? 'go (build-system-name (package-build-system package)))
|
||||
(string=? "go" (package-name package)))
|
||||
(cons package lst)
|
||||
lst))
|
||||
'())))
|
||||
@@ -1,34 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 jgart <jgart@dismail.de>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; This file returns a manifest of packages built using the hare-build-system.
|
||||
;;; It is used to assist continuous integration of the hare-team branch.
|
||||
|
||||
(use-modules (guix packages)
|
||||
(guix profiles)
|
||||
(guix build-system))
|
||||
|
||||
(manifest
|
||||
(map package->manifest-entry
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (or (eq? 'hare (build-system-name (package-build-system package)))
|
||||
(string=? "hare" (package-name package)))
|
||||
(cons package lst)
|
||||
lst))
|
||||
'())))
|
||||
@@ -1,40 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 jgart <jgart@dismail.de>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; This file returns a manifest of packages built using any one of the
|
||||
;;; asdf build systems. It is used to assist continuous integration of
|
||||
;;; the lisp-team branch.
|
||||
|
||||
(use-modules (guix packages)
|
||||
(guix profiles)
|
||||
(guix build-system))
|
||||
|
||||
(manifest
|
||||
(map package->manifest-entry
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (or (eq? 'asdf/sbcl (build-system-name (package-build-system package)))
|
||||
(eq? 'asdf/ecl (build-system-name (package-build-system package)))
|
||||
(eq? 'asdf/clasp (build-system-name (package-build-system package)))
|
||||
(string=? "clasp-cl" (package-name package))
|
||||
(string=? "ecl" (package-name package))
|
||||
(string=? "sbcl" (package-name package)))
|
||||
(cons package lst)
|
||||
lst))
|
||||
'())))
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 FuncProgLinux <softwarelibre@urutau-ltd.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(use-modules (guix packages)
|
||||
(guix profiles)
|
||||
(gnu packages mate)
|
||||
(ice-9 match)
|
||||
(srfi srfi-1))
|
||||
|
||||
(define (propagated-inputs package)
|
||||
(map
|
||||
(match-lambda
|
||||
((_ (? package? pkg)) pkg)
|
||||
((_ (? package? pkg) output) (list pkg output)))
|
||||
(package-propagated-inputs package)))
|
||||
|
||||
(packages->manifest
|
||||
(append-map propagated-inputs
|
||||
(list mate)))
|
||||
@@ -1,36 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2026 jgart <jgart@dismail.de>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; This file returns a manifest of packages built using the perl-build-system.
|
||||
;;; It is used to assist continuous integration of the perl-team branch.
|
||||
|
||||
(use-modules (guix packages)
|
||||
(guix profiles)
|
||||
(guix build-system))
|
||||
|
||||
(manifest
|
||||
(map package->manifest-entry
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (or (eq? 'perl (build-system-name (package-build-system package)))
|
||||
(eq? 'rakudo (build-system-name (package-build-system package)))
|
||||
(string=? "perl" (package-name package))
|
||||
(string=? "rakudo" (package-name package)))
|
||||
(cons package lst)
|
||||
lst))
|
||||
'())))
|
||||
@@ -1,35 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 jgart <jgart@dismail.de>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; This file returns a manifest of packages built using the python-build-system.
|
||||
;;; It is used to assist continuous integration of the python-team branch.
|
||||
|
||||
(use-modules (guix packages)
|
||||
(guix profiles)
|
||||
(guix build-system))
|
||||
|
||||
(manifest
|
||||
(map package->manifest-entry
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (or (eq? 'python (build-system-name (package-build-system package)))
|
||||
(eq? 'pyproject (build-system-name (package-build-system package)))
|
||||
(string=? "python" (package-name package)))
|
||||
(cons package lst)
|
||||
lst))
|
||||
'())))
|
||||
@@ -1,48 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 Simon Tournier <zimon.toutoune@gmail.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(use-modules (guix packages)
|
||||
(guix profiles)
|
||||
(guix gexp)
|
||||
(guix build-system)
|
||||
(ice-9 match)
|
||||
(srfi srfi-1)
|
||||
(srfi srfi-26))
|
||||
|
||||
(define* (has-r-build-system? build-system #:key modules #:allow-other-keys)
|
||||
(or (eq? (build-system-name build-system) 'r)
|
||||
(any
|
||||
(match-lambda
|
||||
(('guix 'build 'r-build-system) #t)
|
||||
('((guix build r-build-system) . _) #t)
|
||||
(_ #f))
|
||||
(cond
|
||||
((gexp? modules) (gexp->approximate-sexp modules))
|
||||
((pair? modules) modules)
|
||||
(else '())))))
|
||||
|
||||
(manifest
|
||||
(map package->manifest-entry
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (apply has-r-build-system?
|
||||
(package-build-system package)
|
||||
(package-arguments package))
|
||||
(cons package lst)
|
||||
lst))
|
||||
(list))))
|
||||
@@ -1,413 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; This manifest returns build artfacts for all supported systems. This can be
|
||||
;;; controlled by SUPPORTED_SYSTEMS environment variable. For the list of
|
||||
;;; artifacts produced, see artifacts-for-system and the `<thing>-for-system?`
|
||||
;;; procedures. NOTE: the --system argument does not change the system for which
|
||||
;;; the resulting package is built. They return different definitions of the
|
||||
;;; images. To change the system, pass different SUPPORTED_SYSTEMS.
|
||||
|
||||
(use-modules (gnu compression)
|
||||
(gnu image)
|
||||
(gnu packages graphviz)
|
||||
(gnu packages imagemagick)
|
||||
(gnu packages package-management)
|
||||
(gnu packages perl)
|
||||
(gnu services)
|
||||
(gnu system image)
|
||||
(gnu system install)
|
||||
(gnu system)
|
||||
(guix build-system gnu)
|
||||
(guix build-system trivial)
|
||||
(guix channels)
|
||||
(guix gexp)
|
||||
(guix git)
|
||||
(guix grafts)
|
||||
(guix memoization)
|
||||
(guix monads)
|
||||
(guix packages)
|
||||
(guix profiles)
|
||||
(guix records)
|
||||
(guix scripts pack)
|
||||
(guix store)
|
||||
(guix ui)
|
||||
(guix utils)
|
||||
(ice-9 format)
|
||||
(ice-9 match)
|
||||
(srfi srfi-9)
|
||||
(srfi srfi-26)
|
||||
(srfi srfi-35))
|
||||
|
||||
;; For easier testing, use (snapshot) guix package from (gnu packages
|
||||
;; package-management). Otherwise, the package is updated to current commit and
|
||||
;; might not be substitutable, leading to longer build times.
|
||||
(define %use-snapshot-package?
|
||||
(string=? (or (getenv "GUIX_USE_SNAPSHOT_PACKAGE") "no") "yes"))
|
||||
|
||||
(define (%guix-version)
|
||||
;; NOTE: while package-version guix is not correct in general,
|
||||
;; it is correct for the release itself. At that time, the
|
||||
;; guix package is updated to vX.Y.Z and it's the version
|
||||
;; we want to use.
|
||||
(package-version guix))
|
||||
|
||||
(define (%vm-image-path)
|
||||
(search-path %load-path "gnu/system/examples/vm-image.tmpl"))
|
||||
|
||||
(define (%vm-image-efi-path)
|
||||
(search-path %load-path "gnu/system/examples/vm-image-efi.tmpl"))
|
||||
|
||||
;; monadic record and gexp-compiler
|
||||
;; taken from Inria
|
||||
;; https://gitlab.inria.fr/numpex-pc5/wp3/guix-images/-/blob/17bf4585abc2d637faa5d339436e778b7c9fb1ce/modules/guix-hpc/packs.scm
|
||||
|
||||
;; XXX: The <monadic> hack below will hopefully become unnecessary once the
|
||||
;; (guix scripts pack) interface switches to declarative style--i.e.,
|
||||
;; file-like objects.
|
||||
|
||||
(define-record-type <monadic>
|
||||
(monadic->declarative mvalue)
|
||||
monadic?
|
||||
(mvalue monadic-value))
|
||||
|
||||
(define-gexp-compiler (monadic-compiler (monadic <monadic>) system target)
|
||||
(monadic-value monadic))
|
||||
|
||||
;; The tarball should be the same for every system.
|
||||
;; Still, we need to decide what system to build it
|
||||
;; for, so use the one that CI has most resources for.
|
||||
(define (source-tarball-for-system? system)
|
||||
(member system
|
||||
'("x86_64-linux")))
|
||||
|
||||
(define (iso-for-system? system)
|
||||
(member system
|
||||
'("x86_64-linux" "i686-linux" "aarch64-linux")))
|
||||
|
||||
(define (qcow2-for-system? system)
|
||||
(member system
|
||||
'("x86_64-linux" "aarch64-linux")))
|
||||
|
||||
(define* (qcow2-gpt-for-system? system)
|
||||
(string=? system "aarch64-linux"))
|
||||
|
||||
(define (copy-/etc/config.scm config)
|
||||
"Copy the configuration.scm of the operating system to /etc/config.scm, for
|
||||
user's convenience. The file has to be writable, not a link to the store, so
|
||||
etc-service-type can't be used here. CONFIG is a pair of strings, (FROM . TO).
|
||||
The config will be copied from FROM to TO."
|
||||
(match config
|
||||
((from . to)
|
||||
(with-imported-modules '((guix build utils))
|
||||
#~(begin
|
||||
(use-modules (guix build utils))
|
||||
(when (not (file-exists? #$to))
|
||||
(copy-file #$from #$to)
|
||||
(make-file-writable #$to)))))
|
||||
(_ (raise
|
||||
(formatted-message-string
|
||||
(G_ "unexpected config parameter, should be pair of strings: ~a"
|
||||
config))))))
|
||||
|
||||
(define copy-/etc/config.scm-service-type
|
||||
(service-type (name 'copy-/etc/config.scm)
|
||||
(description
|
||||
"Copy the system configuration file to /etc/config.scm.")
|
||||
(extensions (list (service-extension activation-service-type
|
||||
copy-/etc/config.scm)))
|
||||
(default-value (cons "/run/current-system/configuration.scm"
|
||||
"/etc/config.scm"))))
|
||||
|
||||
(define (operating-system-with-/etc/config.scm os)
|
||||
"Copy the system configuration file to writable /etc/config.scm on first boot."
|
||||
(operating-system
|
||||
(inherit os)
|
||||
(services (cons (service copy-/etc/config.scm-service-type)
|
||||
(operating-system-user-services os)))))
|
||||
|
||||
(define (simple-provenance-entry config-file)
|
||||
"Return system entries describing the operating system config, provided
|
||||
through CONFIG-FILE."
|
||||
(mbegin %store-monad
|
||||
(return `(("configuration.scm"
|
||||
,(local-file (assume-valid-file-name config-file)
|
||||
"configuration.scm"))))))
|
||||
|
||||
;; This is mostly taken from provenance-service-type from (gnu services),
|
||||
;; but it provides only configuration.scm, not channels.scm. This is
|
||||
;; to get the same derivations for both Cuirass and local builds.
|
||||
;; In the future, provenance-service-type could be adapted to support
|
||||
;; this use case as well.
|
||||
(define simple-provenance-service-type
|
||||
(service-type (name 'provenance)
|
||||
(extensions
|
||||
(list (service-extension system-service-type
|
||||
simple-provenance-entry)))
|
||||
(default-value #f) ;the OS config file
|
||||
(description
|
||||
"Store configuration.scm of the system in the system
|
||||
itself.")))
|
||||
|
||||
(define* (operating-system-with-simple-provenance
|
||||
os
|
||||
#:optional
|
||||
(config-file
|
||||
(operating-system-configuration-file
|
||||
os)))
|
||||
"Return a variant of OS that stores its CONFIG-FILE. This is similar to
|
||||
`operating-system-with-provenance`, but it does copy only the
|
||||
configuration.scm."
|
||||
(operating-system
|
||||
(inherit os)
|
||||
(services (cons (service simple-provenance-service-type config-file)
|
||||
(operating-system-user-services os)))))
|
||||
|
||||
(define (guix-package-commit guix)
|
||||
;; Extract the commit of the GUIX package.
|
||||
(match (package-source guix)
|
||||
((? channel? source)
|
||||
(channel-commit source))
|
||||
(_
|
||||
(apply (lambda* (#:key commit #:allow-other-keys) commit)
|
||||
(package-arguments guix)))))
|
||||
|
||||
;; NOTE: Normally, we would use (current-guix), along with url
|
||||
;; overridden to the upstream repository to not leak our local checkout.
|
||||
;; But currently, the (current-guix) derivation has to be computed through
|
||||
;; QEMU for systems other than your host system. This takes a lot of time,
|
||||
;; it takes at least half an hour to get the derivations.
|
||||
(define (guix-package/with-commit guix commit)
|
||||
"Use the guix from (gnu packages package-management),
|
||||
but override its commit to the specified version. Make sure
|
||||
to also override the channel commit to have the correct
|
||||
provenance."
|
||||
(let ((scm-version (car (string-split (package-version guix) #\-))))
|
||||
(package
|
||||
(inherit guix)
|
||||
(version (string-append scm-version "." (string-take commit 7)))
|
||||
(source (git-checkout
|
||||
(url (channel-url %default-guix-channel))
|
||||
(commit commit)))
|
||||
(arguments
|
||||
(substitute-keyword-arguments (package-arguments guix)
|
||||
((#:configure-flags flags '())
|
||||
#~(cons*
|
||||
(string-append "--with-channel-commit=" #$commit)
|
||||
(filter (lambda (flag)
|
||||
(not (string-prefix? "--with-channel-commit=" flag)))
|
||||
#$flags))))))))
|
||||
|
||||
(define guix-for-images
|
||||
(mlambda (system)
|
||||
(cond
|
||||
;; For testing purposes, use the guix package directly.
|
||||
(%use-snapshot-package? guix)
|
||||
;; Normally, update the guix package to current commit.
|
||||
(else
|
||||
(guix-package/with-commit guix (guix-package-commit (current-guix)))))))
|
||||
|
||||
(define %binary-tarball-compression "xz")
|
||||
|
||||
;; Like guix pack -C xz -s --localstatedir --profile-name=current-guix guix
|
||||
(define* (binary-tarball-for-system system #:key (extra-packages '()))
|
||||
(let* ((base-name (string-append "guix-binary-" (%guix-version) "." system))
|
||||
(manifest (packages->manifest (cons* guix extra-packages)))
|
||||
(profile (profile (content manifest)))
|
||||
(inputs `(("profile" ,profile)))
|
||||
(compression %binary-tarball-compression))
|
||||
(manifest-entry
|
||||
(name (string-append base-name ".tar." compression))
|
||||
(version (%guix-version))
|
||||
(item (monadic->declarative
|
||||
(self-contained-tarball
|
||||
base-name profile
|
||||
#:profile-name "current-guix"
|
||||
#:compressor (lookup-compressor compression)
|
||||
#:localstatedir? #t))))))
|
||||
|
||||
;; Like guix system image -t iso9660 \
|
||||
;; --label="GUIX_$${system}_$(VERSION)" gnu/system/install.scm
|
||||
(define* (iso-for-system system)
|
||||
(let* ((name (string-append
|
||||
"guix-system-install-" (%guix-version) "." system ".iso"))
|
||||
(base-os (make-installation-os
|
||||
#:grub-displayed-version (%guix-version)
|
||||
#:efi-only? (string=? system "aarch64-linux")))
|
||||
(base-image (os->image base-os #:type iso-image-type))
|
||||
(label (string-append "GUIX_" system "_"
|
||||
(if (> (string-length (%guix-version)) 7)
|
||||
(string-take (%guix-version) 7)
|
||||
(%guix-version)))))
|
||||
(manifest-entry
|
||||
(name name)
|
||||
(version (%guix-version))
|
||||
(item (system-image
|
||||
(image-with-label
|
||||
(image
|
||||
(inherit base-image)
|
||||
(name (string->symbol name)))
|
||||
label))))))
|
||||
|
||||
;; Like guix system image -t qcow2 gnu/system/examples/vm-image.tmpl
|
||||
(define* (qcow2-for-system system)
|
||||
(let* ((name (string-append
|
||||
"guix-system-vm-image-" (%guix-version) "." system ".qcow2"))
|
||||
(base-os-path
|
||||
(if (qcow2-gpt-for-system? system)
|
||||
(%vm-image-efi-path)
|
||||
(%vm-image-path)))
|
||||
(target-image-type
|
||||
(if (qcow2-gpt-for-system? system)
|
||||
qcow2-gpt-image-type
|
||||
qcow2-image-type))
|
||||
(base-os
|
||||
(operating-system-with-/etc/config.scm
|
||||
(operating-system-with-simple-provenance
|
||||
(load base-os-path) base-os-path)))
|
||||
(base-image (os->image base-os #:type target-image-type)))
|
||||
(manifest-entry
|
||||
(name name)
|
||||
(version (%guix-version))
|
||||
(item (system-image
|
||||
(image
|
||||
(inherit base-image)
|
||||
(volatile-root? #f)
|
||||
(size (* 20 (expt 1024 3))) ; 20 GiB to have spare space
|
||||
(name (string->symbol name))))))))
|
||||
|
||||
(define* (guix-source-tarball)
|
||||
(let ((guix (package
|
||||
(inherit guix)
|
||||
(native-inputs
|
||||
(modify-inputs (package-native-inputs guix)
|
||||
;; graphviz-minimal -> graphviz
|
||||
(replace "graphviz" graphviz)
|
||||
(append imagemagick)
|
||||
(append perl))))))
|
||||
(manifest-entry
|
||||
(name (string-append "guix-" (%guix-version) ".tar.gz"))
|
||||
(version (package-version guix))
|
||||
(item (dist-package
|
||||
guix
|
||||
;; Guix is built from git source, not from tarball.
|
||||
;; So it's fine to use its source directly.
|
||||
(package-source guix))))))
|
||||
|
||||
(define* (manifest-entry-with-parameters system entry
|
||||
#:key
|
||||
(guix-for-images-proc guix-for-images))
|
||||
(manifest-entry
|
||||
(inherit entry)
|
||||
(item
|
||||
(with-parameters
|
||||
((%current-system system)
|
||||
(%current-target-system #f)
|
||||
(current-guix-package (guix-for-images-proc system)))
|
||||
(manifest-entry-item entry)))))
|
||||
|
||||
(define* (manifest-with-parameters system manifest
|
||||
#:key
|
||||
(guix-for-images-proc guix-for-images))
|
||||
"Returns entries in the manifest accompanied with %current-system,
|
||||
%current-target-sytem and current-guix-package parameters."
|
||||
(make-manifest
|
||||
(map (cut manifest-entry-with-parameters system <>
|
||||
#:guix-for-images-proc guix-for-images-proc)
|
||||
(manifest-entries manifest))))
|
||||
|
||||
(define (artifacts-for-system/nonparameterized system)
|
||||
"Get all artifacts for given system. This will always include the
|
||||
guix-binary tarball and optionally iso and/or qcow2 images."
|
||||
(manifest
|
||||
(append
|
||||
(list
|
||||
(binary-tarball-for-system system))
|
||||
;; TODO: After source tarball generation is ready, uncomment.
|
||||
;; (if (source-tarball-for-system? system)
|
||||
;; (list (guix-source-tarball))
|
||||
;; '())
|
||||
(if (iso-for-system? system)
|
||||
(list (iso-for-system system))
|
||||
'())
|
||||
(if (qcow2-for-system? system)
|
||||
(list (qcow2-for-system system))
|
||||
'()))))
|
||||
|
||||
(define* (artifacts-for-system system
|
||||
#:key
|
||||
(guix-for-images-proc guix-for-images))
|
||||
"Collects all artifacts for a system. Gives them the proper %current-system
|
||||
and %current-target-system parameters, so the --system passed on CLI is
|
||||
irrelevant."
|
||||
;; NOTE: parameterizing current system, because the tarball seems to somehow
|
||||
;; depend on it early on. I haven't investigated it, but seems like a bug. Could
|
||||
;; it be the gexp->derivation + monadic->declarative, not passing down the
|
||||
;; system? Symptom: guix build --system=x86_64 -m artifacts-manifest.scm and
|
||||
;; guix build --system=i686-linux -m artifacts-manifest.scm gives out different
|
||||
;; results without the parameterization.
|
||||
(parameterize
|
||||
((%current-system system)
|
||||
(%current-target-system #f)
|
||||
(current-guix-package (guix-for-images-proc system)))
|
||||
(manifest-with-parameters
|
||||
system
|
||||
(artifacts-for-system/nonparameterized system)
|
||||
#:guix-for-images-proc guix-for-images-proc)))
|
||||
|
||||
(define (manifest->union manifest)
|
||||
"Makes a union that will be a folder with all the entries symlinked. This
|
||||
is different from a profile as it expects the entries are just simple files
|
||||
and symlinks them by their manifest-entry-name."
|
||||
(let ((entries (manifest-entries manifest)))
|
||||
(computed-file
|
||||
"artifacts-union"
|
||||
(with-imported-modules '((guix build union)
|
||||
(guix build utils))
|
||||
#~(begin
|
||||
(use-modules (guix build utils))
|
||||
|
||||
(mkdir-p #$output)
|
||||
|
||||
(for-each
|
||||
(lambda* (entry)
|
||||
(symlink (cdr entry)
|
||||
(string-append #$output "/" (car entry))))
|
||||
(list #$@(map (lambda (entry)
|
||||
#~(cons
|
||||
#$(manifest-entry-name entry)
|
||||
#$(manifest-entry-item entry)))
|
||||
entries))))))))
|
||||
|
||||
(define %supported-systems
|
||||
(or (and
|
||||
(getenv "SUPPORTED_SYSTEMS")
|
||||
(string-split (getenv "SUPPORTED_SYSTEMS") #\ ))
|
||||
'("x86_64-linux" "i686-linux"
|
||||
"armhf-linux" "aarch64-linux"
|
||||
"powerpc64le-linux" "riscv64-linux")))
|
||||
|
||||
(define supported-systems-union-manifest
|
||||
(concatenate-manifests
|
||||
(map artifacts-for-system
|
||||
%supported-systems)))
|
||||
|
||||
(when %use-snapshot-package?
|
||||
(warning (G_ "building images using the 'guix' package (snapshot)~%")))
|
||||
(info (G_ "producing artifacts for the following systems: ~a~%")
|
||||
%supported-systems)
|
||||
supported-systems-union-manifest
|
||||
@@ -1,26 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Produce a single directory with all the artifacts inside of it, with proper
|
||||
;;; names. They can then be easily copied to releasedir in Makefile. The files are
|
||||
;;; symlinked to save space, but they should be copied out of the store as regular
|
||||
;;; files.
|
||||
|
||||
(load "artifacts-manifest.scm")
|
||||
|
||||
(manifest->union
|
||||
supported-systems-union-manifest)
|
||||
@@ -1,94 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(use-modules (guix packages)
|
||||
(guix gexp)
|
||||
(gnu services)
|
||||
(gnu tests install)
|
||||
(ice-9 match)
|
||||
(guix utils)
|
||||
(srfi srfi-26)
|
||||
(srfi srfi-1))
|
||||
|
||||
;; TODO find a better way to check for thunked fields
|
||||
(define* (thunked-field? field obj)
|
||||
(and
|
||||
(procedure? obj)
|
||||
(eq?
|
||||
(car (procedure-minimum-arity obj))
|
||||
1)
|
||||
; Uhhh
|
||||
(string-suffix? "(x)>"
|
||||
(format #f "~a" obj))))
|
||||
|
||||
;; Prints names of all packages, prepending the service they
|
||||
;; come from.
|
||||
(define* (print-all-packages obj #:optional (pred package?))
|
||||
(match obj
|
||||
((? pred)
|
||||
(format #t "\"~a\"~%" (package-name obj))
|
||||
(list obj))
|
||||
((? gexp?)
|
||||
(list))
|
||||
((a . b)
|
||||
(append (print-all-packages a pred)
|
||||
(print-all-packages b pred)))
|
||||
((_ ...)
|
||||
(apply append
|
||||
(map (cut print-all-packages <> pred)
|
||||
obj)))
|
||||
(#(_ ...)
|
||||
(print-all-packages (vector->list obj) proc))
|
||||
((or (? service-type?)
|
||||
(? origin?))
|
||||
(list))
|
||||
((? record?)
|
||||
(let* ((record-type (record-type-descriptor obj))
|
||||
(record-fields (record-type-fields record-type)))
|
||||
(when (service? obj)
|
||||
(format #t ";; ~a-service~%" (service-type-name (service-kind obj))))
|
||||
(apply append
|
||||
(map (lambda (field)
|
||||
(let* ((accessor (record-accessor record-type field))
|
||||
(field-obj (accessor obj)))
|
||||
(if (thunked-field? field field-obj)
|
||||
(print-all-packages (field-obj obj) pred)
|
||||
(print-all-packages field-obj pred))))
|
||||
record-fields))))
|
||||
((? parameter?)
|
||||
(list))
|
||||
(_
|
||||
(list))))
|
||||
|
||||
(define full-installer-os
|
||||
((@@ (gnu tests install) installation-target-desktop-os-for-gui-tests)))
|
||||
|
||||
(define minimal-installer-os
|
||||
((@@ (gnu tests install) installation-target-os-for-gui-tests)))
|
||||
|
||||
(display "Full os packages:")
|
||||
(print-all-packages full-installer-os)
|
||||
(display "Minimal os packages:")
|
||||
(print-all-packages minimal-installer-os)
|
||||
|
||||
;; Note that the printed packages will contain duplicates.
|
||||
;; I recommend to first put packages out of the profile service
|
||||
;; and out of packages field (they will be above service packages)
|
||||
;; at the bottom of the list and then filtering only unique lines, ie.
|
||||
;; with `awk '!a[$0]++'`. And lastly removing services that no longer
|
||||
;; have packages and also the packages that are already in minimal manifest
|
||||
;; (in case of desktop manifest)
|
||||
@@ -22,7 +22,7 @@
|
||||
#:use-module (guix download)
|
||||
#:use-module (guix git-download)
|
||||
#:use-module (guix build-system cargo)
|
||||
#:use-module ((gnu packages rust-sources) #:prefix package:)
|
||||
#:use-module (gnu packages rust-sources)
|
||||
#:export (lookup-cargo-inputs))
|
||||
|
||||
;;;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2024, 2026 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;; Copyright © 2024 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -27,9 +27,8 @@
|
||||
(map package->manifest-entry
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (and (eq? (build-system-name (package-build-system package))
|
||||
(quote cargo))
|
||||
(supported-package? package))
|
||||
(cons package lst)
|
||||
lst))
|
||||
(if (eq? (build-system-name (package-build-system package))
|
||||
(quote cargo))
|
||||
(cons package lst)
|
||||
lst))
|
||||
(list))))
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2024, 2026 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;; Copyright © 2024 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -17,9 +17,10 @@
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; This file returns a manifest of packages built using the cargo-build-system
|
||||
;;; and the packages which use rust itself as an input. This is a short list of
|
||||
;;; packages which can be checked to see if a rust update has gone smoothly. It
|
||||
;;; is used to assist continuous integration of the rust-team branch.
|
||||
;;; which are NOT prefixed with 'rust-' and the packages which use rust itself
|
||||
;;; as an input. This is a short list of packages which can be checked to see
|
||||
;;; if a rust update has gone smoothly. It is used to assist continuous
|
||||
;;; integration of the rust-team branch.
|
||||
|
||||
(use-modules (guix packages)
|
||||
(guix profiles)
|
||||
@@ -30,15 +31,15 @@
|
||||
(map package->manifest-entry
|
||||
(fold-packages
|
||||
(lambda (package lst)
|
||||
(if (and (supported-package? package)
|
||||
(or (eq? (build-system-name (package-build-system package))
|
||||
(quote cargo))
|
||||
(any
|
||||
(lambda (pkg)
|
||||
(member (specification->package "rust") pkg))
|
||||
(append (package-native-inputs package)
|
||||
(package-propagated-inputs package)
|
||||
(package-inputs package)))))
|
||||
(cons package lst)
|
||||
lst))
|
||||
(if (or
|
||||
(eq? (build-system-name (package-build-system package))
|
||||
(quote cargo))
|
||||
(any
|
||||
(lambda (pkg)
|
||||
(member (specification->package "rust") pkg))
|
||||
(append (package-native-inputs package)
|
||||
(package-propagated-inputs package)
|
||||
(package-inputs package))))
|
||||
(cons package lst)
|
||||
lst))
|
||||
(list))))
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2026 jgart <jgart@dismail.de>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; This file returns a manifest of packages built using the texlive-build-system.
|
||||
;;; It is used to assist continuous integration of the tex-team branch.
|
||||
|
||||
(use-modules (guix packages)
|
||||
(guix profiles)
|
||||
(guix build-system)
|
||||
(gnu packages tex))
|
||||
|
||||
(define %sundry-texlive-packages
|
||||
(list bibtool
|
||||
dvisvgm
|
||||
rubber
|
||||
texmaker
|
||||
texstudio
|
||||
lyx))
|
||||
|
||||
(packages->manifest
|
||||
(cons texlive-scheme-full
|
||||
%sundry-texlive-packages))
|
||||
+2
-2
@@ -29,7 +29,7 @@
|
||||
;;; Code:
|
||||
|
||||
(define %artwork-repository
|
||||
(let ((commit "08259679a0faef63e3ba169df5b937d836bd9262"))
|
||||
(let ((commit "4c7f2ce6428a63e202cd2a9474a06f68a946934d"))
|
||||
(origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
@@ -39,6 +39,6 @@
|
||||
"-checkout"))
|
||||
(sha256
|
||||
(base32
|
||||
"0anryix0y8w9brksiaz39r8c10vdd0fp4h96b9f3m4aw0xpv8xlf")))))
|
||||
"1rl569759q9wm1dxn7nkq3873d2k92giic7aa6jwzwr3n16prc7y")))))
|
||||
|
||||
;;; artwork.scm ends here
|
||||
|
||||
+6
-5
@@ -2,7 +2,7 @@
|
||||
;;; Copyright © 2017 David Craven <david@craven.ch>
|
||||
;;; Copyright © 2017, 2020, 2022 Mathieu Othacehe <othacehe@gnu.org>
|
||||
;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
|
||||
;;; Copyright © 2019, 2021, 2023, 2025 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2019, 2021, 2023 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2022 Josselin Poiret <dev@jpoiret.xyz>
|
||||
;;; Copyright © 2022 Reza Alizadeh Majd <r.majd@pantherx.org>
|
||||
@@ -26,8 +26,7 @@
|
||||
(define-module (gnu bootloader)
|
||||
#:use-module (gnu system file-systems)
|
||||
#:use-module (gnu system uuid)
|
||||
#:autoload (guix discovery) (fold-module-public-variables)
|
||||
#:autoload (guix describe) (modules-from-current-profile)
|
||||
#:use-module (guix discovery)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix profiles)
|
||||
#:use-module (guix records)
|
||||
@@ -306,8 +305,10 @@ instead~%")))
|
||||
|
||||
(define (bootloader-modules)
|
||||
"Return the list of bootloader modules."
|
||||
(modules-from-current-profile "gnu/bootloader"
|
||||
#:warn warn-about-load-error))
|
||||
(all-modules (map (lambda (entry)
|
||||
`(,entry . "gnu/bootloader"))
|
||||
%load-path)
|
||||
#:warn warn-about-load-error))
|
||||
|
||||
(define %bootloaders
|
||||
;; The list of publically-known bootloaders.
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(define-module (gnu bootloader depthcharge)
|
||||
#:use-module (gnu bootloader extlinux)
|
||||
#:use-module (gnu bootloader)
|
||||
#:use-module (gnu packages bootloaders)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix utils)
|
||||
#:use-module (ice-9 match)
|
||||
#:export (depthcharge-bootloader))
|
||||
|
||||
(define (signed-kernel kernel kernel-arguments initrd)
|
||||
(define builder
|
||||
(with-imported-modules '((guix build utils))
|
||||
#~(begin
|
||||
(use-modules (guix build utils)
|
||||
(ice-9 binary-ports)
|
||||
(rnrs bytevectors))
|
||||
(set-path-environment-variable "PATH" '("bin") (list #$dtc))
|
||||
|
||||
;; TODO: These files have to be writable, so we copy them.
|
||||
;; This can probably be fixed by using a ".its" file, just
|
||||
;; be careful not to break initrd loading.
|
||||
(copy-file #$kernel "zImage")
|
||||
(chmod "zImage" #o755)
|
||||
(copy-file (string-append (dirname #$kernel) "/lib/dtbs/"
|
||||
"rk3288-veyron-speedy.dtb")
|
||||
"rk3288-veyron-speedy.dtb")
|
||||
(chmod "rk3288-veyron-speedy.dtb" #o644)
|
||||
(copy-file #$initrd "initrd")
|
||||
(chmod "initrd" #o644)
|
||||
|
||||
(invoke (string-append #$u-boot-tools "/bin/mkimage")
|
||||
"-D" "-I dts -O dtb -p 2048"
|
||||
"-f" "auto"
|
||||
"-A" "arm"
|
||||
"-O" "linux"
|
||||
"-T" "kernel"
|
||||
"-C" "None"
|
||||
"-d" "zImage"
|
||||
"-a" "0"
|
||||
"-b" "rk3288-veyron-speedy.dtb"
|
||||
"-i" "initrd"
|
||||
"image.itb")
|
||||
(call-with-output-file "bootloader.bin"
|
||||
(lambda (port)
|
||||
(put-bytevector port (make-bytevector 512 0))))
|
||||
(with-output-to-file "kernel-arguments"
|
||||
(lambda ()
|
||||
(display (string-join (list #$@kernel-arguments)))))
|
||||
(invoke (string-append #$vboot-utils "/bin/vbutil_kernel")
|
||||
"--pack" #$output
|
||||
"--version" "1"
|
||||
"--vmlinuz" "image.itb"
|
||||
"--arch" "arm"
|
||||
"--keyblock" (string-append #$vboot-utils
|
||||
"/share/vboot-utils/devkeys/"
|
||||
"kernel.keyblock")
|
||||
"--signprivate" (string-append #$vboot-utils
|
||||
"/share/vboot-utils/devkeys/"
|
||||
"kernel_data_key.vbprivk")
|
||||
"--config" "kernel-arguments"
|
||||
"--bootloader" "bootloader.bin"))))
|
||||
(computed-file "vmlinux.kpart" builder))
|
||||
|
||||
(define* (depthcharge-configuration-file config entries
|
||||
#:key
|
||||
(system (%current-system))
|
||||
(old-entries '())
|
||||
#:allow-other-keys)
|
||||
(match entries
|
||||
((entry)
|
||||
(let ((kernel (menu-entry-linux entry))
|
||||
(kernel-arguments (menu-entry-linux-arguments entry))
|
||||
(initrd (menu-entry-initrd entry)))
|
||||
;; XXX: Make this a symlink.
|
||||
(signed-kernel kernel kernel-arguments initrd)))
|
||||
(_ (error "Too many bootloader menu entries!"))))
|
||||
|
||||
(define install-depthcharge
|
||||
#~(lambda (bootloader device mount-point)
|
||||
(let ((kpart (string-append mount-point
|
||||
"/boot/depthcharge/vmlinux.kpart")))
|
||||
(write-file-on-device kpart (stat:size (stat kpart)) device 0))))
|
||||
|
||||
(define depthcharge-bootloader
|
||||
(bootloader
|
||||
(name 'depthcharge)
|
||||
(package #f)
|
||||
(installer install-depthcharge)
|
||||
(configuration-file "/boot/depthcharge/vmlinux.kpart")
|
||||
(configuration-file-generator depthcharge-configuration-file)))
|
||||
+3
-14
@@ -3,7 +3,7 @@
|
||||
;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
|
||||
;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
|
||||
;;; Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
;;; Copyright © 2019, 2020, 2023, 2024, 2026 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2019, 2020, 2023, 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2019, 2020 Miguel Ángel Arruga Vivas <rosen644835@gmail.com>
|
||||
;;; Copyright © 2020 Maxim Cournoyer <maxim@guixotic.coop>
|
||||
;;; Copyright © 2020 Stefan <stefan-guix@vodafonemail.de>
|
||||
@@ -65,7 +65,6 @@
|
||||
grub-efi-bootloader
|
||||
grub-efi-removable-bootloader
|
||||
grub-efi32-bootloader
|
||||
grub-efi32-removable-bootloader
|
||||
grub-efi-netboot-bootloader
|
||||
grub-efi-netboot-removable-bootloader
|
||||
grub-mkrescue-bootloader
|
||||
@@ -427,11 +426,8 @@ when booting a root file system on a Btrfs subvolume."
|
||||
(arguments (menu-entry-multiboot-arguments entry))
|
||||
;; Choose between device names as understood by Mach's built-in
|
||||
;; IDE driver ("hdX") and those understood by rumpdisk ("wdX"
|
||||
;; in the "noide" case). There are no IDE drivers in Mach for
|
||||
;; hurd64, so always use rumpdisk there.
|
||||
(rumpdisk? (or (target-hurd64?)
|
||||
(member "noide" arguments)))
|
||||
(disk (if rumpdisk? "w" "h"))
|
||||
;; in the "noide" case).
|
||||
(disk (if (member "noide" arguments) "w" "h"))
|
||||
(device-spec (and=> device file-system-device->string))
|
||||
(device-name (and=> device-spec device-spec->device-name))
|
||||
(modules (menu-entry-multiboot-modules entry)))
|
||||
@@ -848,13 +844,6 @@ symlink to the store is not needed in this case."
|
||||
(name 'grub-efi32)
|
||||
(package grub-efi32)))
|
||||
|
||||
(define grub-efi32-removable-bootloader
|
||||
(bootloader
|
||||
(inherit grub-efi32-bootloader)
|
||||
(name 'grub-efi32-removable-bootloader)
|
||||
(installer (make-grub-efi-installer #:removable? #t
|
||||
#:efi32? #t))))
|
||||
|
||||
(define (make-grub-efi-netboot-bootloader name subdir)
|
||||
(bootloader
|
||||
(name name)
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;; Copyright © 2023-2024 Herman Rimm <herman@rimm.ee>
|
||||
;;; Copyright © 2024 Zheng Junjie <873216071@qq.com>
|
||||
;;; Copyright © 2025 dan <i@dan.games>
|
||||
;;; Copyright © 2026 Artyom V. Poptsov <poptsov.artyom@gmail.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -36,11 +34,11 @@
|
||||
u-boot-a20-olinuxino-lime2-bootloader
|
||||
u-boot-a20-olinuxino-micro-bootloader
|
||||
u-boot-bananapi-m2-ultra-bootloader
|
||||
u-boot-am335x-evm-bootloader
|
||||
u-boot-beaglebone-black-bootloader
|
||||
u-boot-cubietruck-bootloader
|
||||
u-boot-firefly-rk3399-bootloader
|
||||
u-boot-mx6cuboxi-bootloader
|
||||
u-boot-nintendo-nes-classic-edition-bootloader
|
||||
u-boot-novena-bootloader
|
||||
u-boot-orangepi-r1-plus-lts-rk3328-bootloader
|
||||
u-boot-orangepi-zero2w-bootloader
|
||||
@@ -48,7 +46,6 @@
|
||||
u-boot-pine64-lts-bootloader
|
||||
u-boot-pinebook-bootloader
|
||||
u-boot-pinebook-pro-rk3399-bootloader
|
||||
u-boot-nanopi-r4s-rk3399-bootloader
|
||||
u-boot-puma-rk3399-bootloader
|
||||
u-boot-rock-4c-plus-rk3399-bootloader
|
||||
u-boot-rock64-rk3328-bootloader
|
||||
@@ -65,12 +62,7 @@
|
||||
((? string?)
|
||||
(list #~(install-file (string-append bootloader #$file)
|
||||
install-dir)))
|
||||
((? file-like?)
|
||||
(list #~(mkdir-p install-dir)
|
||||
#~(copy-file #$file
|
||||
(string-append install-dir
|
||||
"/"
|
||||
#$(plain-file-name file)))))
|
||||
((? file-like?) (list #~(install-file #$file install-dir)))
|
||||
(#f '()))))
|
||||
#~(lambda (bootloader device mount-point)
|
||||
(let ((install-dir (string-append mount-point "/boot")))
|
||||
@@ -97,48 +89,6 @@ is BLOCK-SIZE * COUNT, or FILE size if COUNT is not given."
|
||||
(if bootloader
|
||||
(error "Failed to install U-Boot"))))
|
||||
|
||||
(define install-am335x-evm-u-boot
|
||||
(write-u-boot-image
|
||||
;; According to the "26.1.8.5.5 MMC/SD Read Sector Procedure in Raw Mode"
|
||||
;; section in the "AM335x and AMIC110 Sitara™ Processors Technical
|
||||
;; Reference Manual", we have offset, the bootrom tries to load code at the
|
||||
;; offsets 0x0, 0x20000 (128KB), 0x40000 (256KB) and 0x60000 (384KB).
|
||||
;;
|
||||
;; The MBR is 512 Bytes
|
||||
;; (https://en.wikipedia.org/wiki/Master_boot_record#Sector_layout).
|
||||
;;
|
||||
;; At the time of writing, u-boot.img is 1.4 MiB, and it is at offset
|
||||
;; 0x60000 (384KB) as per CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR.
|
||||
;;
|
||||
;; We also need to align the first partition to make sure read/writes are
|
||||
;; properly aligned.
|
||||
;;
|
||||
;; Given these constraints, we chose the following partitioning:
|
||||
;;
|
||||
;; 0 512 Bytes 128 KiB
|
||||
;; | | (0x20000) 256 KiB
|
||||
;; | | / (0x40000) 384 KiB 4 MiB
|
||||
;; | | / | (0x60000) |
|
||||
;; | | / | | |
|
||||
;; v v / v v v
|
||||
;; +-------+ +--------------+---------------+----------------+
|
||||
;; | MBR | ... | First MLO | Second MLO | u-boot.img |
|
||||
;; +-------+ +--------------+---------------+----------------+
|
||||
;; <-512 B-> ... <-- 128 KiB --> <-- 128 KiB --> <-- 3712 KiB -->
|
||||
;;
|
||||
;; The rationale for that is as follows:
|
||||
;;
|
||||
;; - We add a second copy of the MLO at 256 KiB for improving reliability
|
||||
;; as the doc/board/ti/am335x_evm.rst documentation in u-boot advise us
|
||||
;; to do that, and also because the space there isn't used.
|
||||
;;
|
||||
;; - All can fit into 2MiB (u-boot.img can grow up to 1664 KiB), but we
|
||||
;; want a bit more space in case u-boot.img grows over time, so we allow
|
||||
;; u-boot to grow until the 4 MiB offset.
|
||||
'(("MLO" 256 256) ;; First MLO
|
||||
("MLO" 256 512) ;; Second MLO
|
||||
("u-boot.img" 7424 768)) 512))
|
||||
|
||||
(define install-beaglebone-black-u-boot
|
||||
;; http://wiki.beyondlogic.org/index.php?title=BeagleBoneBlack_Upgrading_uBoot
|
||||
;; This first stage bootloader called MLO (U-Boot SPL) is expected at
|
||||
@@ -180,12 +130,7 @@ is BLOCK-SIZE * COUNT, or FILE size if COUNT is not given."
|
||||
;; starfive_visionfive2.dtb. We cannot guarantee that users will
|
||||
;; update this U-Boot, so set the FDT explicitly.
|
||||
(plain-file "uEnv.txt"
|
||||
(string-join
|
||||
(list
|
||||
"boot_targets=mmc1 nvme0 mmc0 dhcp"
|
||||
"bootcmd_mmc1=bootflow scan"
|
||||
"fdtfile=starfive/jh7110-starfive-visionfive-2-v1.3b.dtb")
|
||||
"\n"))))
|
||||
"fdtfile=starfive/jh7110-starfive-visionfive-2-v1.3b.dtb~%")))
|
||||
|
||||
|
||||
;;;
|
||||
@@ -200,33 +145,6 @@ is BLOCK-SIZE * COUNT, or FILE size if COUNT is not given."
|
||||
(installer #f)
|
||||
(disk-image-installer install-u-boot)))
|
||||
|
||||
(define u-boot-am335x-evm-bootloader
|
||||
(bootloader
|
||||
(inherit u-boot-bootloader)
|
||||
;; This bootloader supports the following computers:
|
||||
;; - SanCloud BeagleBone Enhanced
|
||||
;; - SanCloud BeagleBone Enhanced Extended WiFi
|
||||
;; - SanCloud BeagleBone Enhanced Lite
|
||||
;; - Seeed Studio BeagleBone Green Eco
|
||||
;; - TI AM3359 ICE-V2
|
||||
;; - TI AM335x BeagleBone
|
||||
;; - TI AM335x BeagleBone Black
|
||||
;; - TI AM335x BeagleBone Green
|
||||
;; - TI AM335x EVM
|
||||
;; - TI AM335x EVM-SK
|
||||
;; - TI AM335x PocketBeagle
|
||||
;;
|
||||
;; This list was made by retrieving the list of Devicetrees used in
|
||||
;; configs/am335x_evm_defconfig in u-boot source code. Once we have that we
|
||||
;; can look at each Devicetree in arch/arm/boot/dts/ti/omap/ inside Linux,
|
||||
;; and in each file, look at the model property to find the name of the
|
||||
;; computers that this image supports.
|
||||
(package u-boot-am335x-evm)
|
||||
;; At the time of writing, our u-boot.img is 1.4 MiB. This is why we can't
|
||||
;; reuse install-beaglebone-black-u-boot. And having the same image being
|
||||
;; able to boot on multiple computers is useful.
|
||||
(disk-image-installer install-am335x-evm-u-boot)))
|
||||
|
||||
(define u-boot-beaglebone-black-bootloader
|
||||
(bootloader
|
||||
(inherit u-boot-bootloader)
|
||||
@@ -254,6 +172,11 @@ is BLOCK-SIZE * COUNT, or FILE size if COUNT is not given."
|
||||
(inherit u-boot-bootloader)
|
||||
(disk-image-installer install-rockchip-u-boot)))
|
||||
|
||||
(define u-boot-nintendo-nes-classic-edition-bootloader
|
||||
(bootloader
|
||||
(inherit u-boot-allwinner-bootloader)
|
||||
(package u-boot-nintendo-nes-classic-edition)))
|
||||
|
||||
(define u-boot-a20-olinuxino-lime-bootloader
|
||||
(bootloader
|
||||
(inherit u-boot-allwinner-bootloader)
|
||||
@@ -350,11 +273,6 @@ is BLOCK-SIZE * COUNT, or FILE size if COUNT is not given."
|
||||
(inherit u-boot-rockchip-bootloader)
|
||||
(package u-boot-pinebook-pro-rk3399)))
|
||||
|
||||
(define u-boot-nanopi-r4s-rk3399-bootloader
|
||||
(bootloader
|
||||
(inherit u-boot-rockchip-bootloader)
|
||||
(package u-boot-nanopi-r4s-rk3399)))
|
||||
|
||||
(define u-boot-ts7970-q-2g-1000mhz-c-bootloader
|
||||
;; This bootloader doesn't really need to be installed, as it is read from
|
||||
;; an SPI memory chip, not the SD card. It is copied to /boot/u-boot.imx
|
||||
|
||||
+9
-16
@@ -359,7 +359,7 @@ to it atomically and set the appropriate permissions."
|
||||
(left unused-subid-range-left ;previous unused subuid range or #f
|
||||
(default #f))
|
||||
(min unused-subid-range-min ;lower bound of this unused subuid range
|
||||
(default 0))
|
||||
(default %subordinate-id-min))
|
||||
(max unused-subid-range-max ;upper bound
|
||||
(default %subordinate-id-max))
|
||||
(right unused-subid-range-right ;next unused subuid range or #f
|
||||
@@ -555,10 +555,7 @@ will be marked as used in it."
|
||||
(define actual-range
|
||||
(subid-range
|
||||
(inherit range)
|
||||
;; New IDs are only allocated between %subordinate-id-min and
|
||||
;; %subordinate-id-max.
|
||||
(start
|
||||
(max allocation-start %subordinate-id-min))))
|
||||
(start allocation-start)))
|
||||
|
||||
(if (within-interval? allocation actual-range)
|
||||
(values
|
||||
@@ -606,6 +603,13 @@ is visited to find the best unused range that can hold RANGE."
|
||||
(define range-end
|
||||
(subid-range-end range))
|
||||
|
||||
(unless (and (subordinate-id? range-start)
|
||||
(subordinate-id? range-end))
|
||||
(raise
|
||||
(condition
|
||||
(&invalid-subid-range-error
|
||||
(range range)))))
|
||||
|
||||
(define less?
|
||||
(< range-end allocation-start))
|
||||
(define more?
|
||||
@@ -798,23 +802,12 @@ new UIDs."
|
||||
(define* (allocate-subids ranges #:optional (current-ranges '()))
|
||||
"Return a list of subids entries for RANGES, a list of <subid-range>. IDs
|
||||
found in CURRENT-RANGES, a list of subid entries, are reused."
|
||||
;; Ranges from disk must always have a start.
|
||||
(let ((generic (any (compose not subid-range-has-start?) current-ranges)))
|
||||
(when generic
|
||||
(raise
|
||||
(condition
|
||||
(&specific-subid-range-expected-error
|
||||
(range generic))))))
|
||||
(for-each
|
||||
(lambda (range)
|
||||
;; New ranges must always be included in the current supported set.
|
||||
(unless (or (not (subid-range-has-start? range))
|
||||
(and (subordinate-id? (subid-range-start range))
|
||||
(subordinate-id? (subid-range-end range))))
|
||||
(raise
|
||||
(condition (&invalid-subid-range-error (range range))))))
|
||||
ranges)
|
||||
|
||||
(define sorted-ranges
|
||||
(stable-sort ranges
|
||||
subid-range-less))
|
||||
|
||||
+24
-38
@@ -11,7 +11,6 @@
|
||||
;;; Copyright © 2022 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr>
|
||||
;;; Copyright © 2024 Giacomo Leidi <goodoldpaul@autistici.org>
|
||||
;;; Copyright © 2025 Maxim Cournoyer <maxim@guixotic.coop>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -141,13 +140,12 @@ and bits are set according to the default behaviour of 'mkdir'."
|
||||
#:key
|
||||
(directory %skeleton-directory)
|
||||
uid gid)
|
||||
"Copy the account skeletons from DIRECTORY to HOME and make them writable.
|
||||
When UID is an integer, make it the owner of all the files created except the
|
||||
home directory; likewise for GID."
|
||||
(define (set-permission file)
|
||||
"Copy the account skeletons from DIRECTORY to HOME. When UID is an integer,
|
||||
make it the owner of all the files created except the home directory; likewise
|
||||
for GID."
|
||||
(define (set-owner file)
|
||||
(when (or uid gid)
|
||||
(chown file (or uid -1) (or gid -1)))
|
||||
(make-file-writable file))
|
||||
(chown file (or uid -1) (or gid -1))))
|
||||
|
||||
(let ((files (scandir directory (negate dot-or-dot-dot?)
|
||||
string<?)))
|
||||
@@ -157,9 +155,10 @@ home directory; likewise for GID."
|
||||
(copy-recursively (string-append directory "/" file)
|
||||
target
|
||||
#:log (%make-void-port "w"))
|
||||
(for-each set-permission
|
||||
(for-each set-owner
|
||||
(find-files target (const #t)
|
||||
#:directories? #t))))
|
||||
#:directories? #t))
|
||||
(make-file-writable target)))
|
||||
files)))
|
||||
|
||||
(define* (make-skeletons-writable home
|
||||
@@ -279,17 +278,6 @@ they already exist."
|
||||
|
||||
(for-each ensure-user-home users))
|
||||
|
||||
(define* (canonicalize-path* file)
|
||||
"A safe version of `canonicalize-path' that warns rather than raises on errors.
|
||||
`canonicalize-path' uses `realpath(2)', which can return various errors like
|
||||
EINVAL, ELOOP, etc."
|
||||
(or (false-if-exception (canonicalize-path file))
|
||||
(begin
|
||||
(format (current-warning-port)
|
||||
"warning: could not canonicalize file `~a'; using as-is~%"
|
||||
file)
|
||||
file)))
|
||||
|
||||
(define (activate-etc etc)
|
||||
"Install ETC, a directory in the store, as the source of static files for
|
||||
/etc."
|
||||
@@ -312,28 +300,26 @@ EINVAL, ELOOP, etc."
|
||||
(rm-f "/etc/ssl")
|
||||
(symlink "/run/current-system/profile/etc/ssl" "/etc/ssl")
|
||||
|
||||
(rm-f "/etc/static")
|
||||
(symlink etc "/etc/static")
|
||||
(for-each (lambda (file)
|
||||
(let ((target (string-append "/etc/" file))
|
||||
;; Canonicalize the file names to resolve any symlinks, to
|
||||
;; ensure /etc/localtime points to a timezone data file in
|
||||
;; the store containing the timezone name. This is done
|
||||
;; for compatibility with software expecting this systemd
|
||||
;; convention to be followed.
|
||||
(source (canonicalize-path* (string-append etc "/" file))))
|
||||
(source (string-append "/etc/static/" file)))
|
||||
(rm-f target)
|
||||
(cond ((string=? (basename target) "sudoers")
|
||||
(begin
|
||||
;; /etc/sudoers must be a regular file.
|
||||
(copy-file source target)
|
||||
;; XXX: dirty hack to meet sudo's expectations
|
||||
(chmod target #o440)))
|
||||
((string=? (basename target) "hosts")
|
||||
;; /etc/hosts must be a regular file, as some software
|
||||
;; like vpn-slice expect to be able to write to it.
|
||||
(copy-file source target))
|
||||
(else ;usual case
|
||||
(symlink source target)))))
|
||||
|
||||
;; Things such as /etc/sudoers must be regular files, not
|
||||
;; symlinks; furthermore, they could be modified behind our
|
||||
;; back---e.g., with 'visudo'. Thus, make a copy instead of
|
||||
;; symlinking them.
|
||||
(if (file-is-directory? source)
|
||||
(symlink source target)
|
||||
(copy-file source target))
|
||||
|
||||
;; XXX: Dirty hack to meet sudo's expectations.
|
||||
(when (string=? (basename target) "sudoers")
|
||||
(chmod target #o440))))
|
||||
(scandir etc (negate dot-or-dot-dot?)
|
||||
|
||||
;; The default is 'string-locale<?', but we don't have
|
||||
;; it when run from the initrd's statically-linked
|
||||
;; Guile.
|
||||
|
||||
@@ -91,7 +91,7 @@ each retry."
|
||||
((sleep*) delay) ;else wait and retry
|
||||
(loop (+ 1 attempts)))
|
||||
(error "maximum number of retry attempts reached"
|
||||
(quote (begin body ...)) args))))))
|
||||
(quote body ...) args))))))
|
||||
|
||||
|
||||
;;;
|
||||
|
||||
+31
-62
@@ -37,7 +37,6 @@
|
||||
#:use-module (guix i18n)
|
||||
#:use-module (rnrs io ports)
|
||||
#:use-module (rnrs bytevectors)
|
||||
#:use-module (ice-9 exceptions)
|
||||
#:use-module (ice-9 match)
|
||||
#:use-module (ice-9 rdelim)
|
||||
#:use-module (ice-9 regex)
|
||||
@@ -46,8 +45,6 @@
|
||||
#:autoload (system repl repl) (start-repl)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-26)
|
||||
#:use-module (srfi srfi-34)
|
||||
#:use-module (srfi srfi-35)
|
||||
#:export (disk-partitions
|
||||
partition-label-predicate
|
||||
partition-uuid-predicate
|
||||
@@ -68,9 +65,6 @@
|
||||
|
||||
cleanly-unmounted-ext2?
|
||||
|
||||
partition-lookup-error?
|
||||
&partition-lookup-error
|
||||
|
||||
bind-mount
|
||||
|
||||
system*/tty
|
||||
@@ -1188,10 +1182,6 @@ were found."
|
||||
(define find-partition-by-luks-uuid
|
||||
(find-partition luks-partition-uuid-predicate))
|
||||
|
||||
(define-condition-type &partition-lookup-error &condition
|
||||
partition-lookup-error?
|
||||
(spec partition-lookup-error-spec))
|
||||
|
||||
|
||||
(define (canonicalize-device-spec spec)
|
||||
"Return the device name corresponding to SPEC, which can be a <uuid>, a
|
||||
@@ -1211,25 +1201,22 @@ file name or an nfs-root containing ':/')."
|
||||
;; Some devices take a bit of time to appear, most notably USB
|
||||
;; storage devices. Thus, wait for the device to appear.
|
||||
(if (> count max-trials)
|
||||
(raise (condition
|
||||
(&partition-lookup-error
|
||||
(spec (fmt spec)))))
|
||||
(error "failed to resolve partition" (fmt spec))
|
||||
(begin
|
||||
(format #t "waiting for partition '~a' to appear...~%"
|
||||
(fmt spec))
|
||||
(sleep 1)
|
||||
(loop (+ 1 count))))))))
|
||||
|
||||
(define (device-exists? device)
|
||||
(and (file-exists? device)
|
||||
device))
|
||||
|
||||
(match spec
|
||||
((? string?)
|
||||
(if (string-prefix? "/dev/" spec)
|
||||
(if (or (string-contains spec ":/") ;nfs
|
||||
(and (>= (string-length spec) 2)
|
||||
(equal? (string-take spec 2) "//")) ;cifs
|
||||
(string=? spec "none"))
|
||||
spec ; do not resolve NFS / CIFS / tmpfs devices
|
||||
;; Nothing to do, but wait until SPEC shows up.
|
||||
(resolve device-exists? spec identity)
|
||||
spec)) ; do not resolve NFS / CIFS / tmpfs devices
|
||||
(resolve identity spec identity)))
|
||||
((? file-system-label?)
|
||||
;; Resolve the label.
|
||||
(resolve find-partition-by-label
|
||||
@@ -1325,21 +1312,11 @@ corresponds to the symbols listed in FLAGS."
|
||||
(logior MS_STRICTATIME (loop rest)))
|
||||
(('lazy-time rest ...)
|
||||
(logior MS_LAZYTIME (loop rest)))
|
||||
(('remount rest ...)
|
||||
(logior MS_REMOUNT (loop rest)))
|
||||
(('shared rest ...)
|
||||
(loop rest))
|
||||
(()
|
||||
0))))
|
||||
|
||||
(define kind-and-args-exception?
|
||||
(exception-predicate &exception-with-kind-and-args))
|
||||
|
||||
(define (system-error? exception)
|
||||
"Return true if EXCEPTION is a Guile 'system-error exception."
|
||||
(and (kind-and-args-exception? exception)
|
||||
(eq? 'system-error (exception-kind exception))))
|
||||
|
||||
(define* (mount-file-system fs #:key (root "/root")
|
||||
(check? (file-system-check? fs))
|
||||
(skip-check-if-clean?
|
||||
@@ -1360,8 +1337,8 @@ corresponds to the symbols listed in FLAGS."
|
||||
(host-part (string-take source idx))
|
||||
;; Strip [] from around host if present
|
||||
(host (match (string-split host-part (string->char-set "[]"))
|
||||
(("" h "") h)
|
||||
((h) h)))
|
||||
(("" h "") h)
|
||||
((h) h)))
|
||||
(inet-addr (host-to-ip host "nfs")))
|
||||
;; Mounting an NFS file system requires passing the address
|
||||
;; of the server in the addr= option
|
||||
@@ -1447,37 +1424,26 @@ corresponds to the symbols listed in FLAGS."
|
||||
"," 'prefix)
|
||||
"")))))
|
||||
|
||||
(guard (c ((partition-lookup-error? c)
|
||||
(format (current-error-port)
|
||||
"could not find the partition: ~a~%"
|
||||
(partition-lookup-error-spec c))
|
||||
(unless (file-system-mount-may-fail? fs)
|
||||
(raise c)))
|
||||
((system-error? c)
|
||||
(format (current-error-port)
|
||||
"could not mount partition ~a: ~a~%"
|
||||
(file-system-device fs)
|
||||
(exception-message c))
|
||||
(unless (file-system-mount-may-fail? fs)
|
||||
(raise c))))
|
||||
(let* ((type (file-system-type fs))
|
||||
(source (canonicalize-device-spec (file-system-device fs)))
|
||||
(target (string-append root "/"
|
||||
(file-system-mount-point fs)))
|
||||
(flags (logior (mount-flags->bit-mask (file-system-flags fs))
|
||||
(let* ((type (file-system-type fs))
|
||||
(source (canonicalize-device-spec (file-system-device fs)))
|
||||
(target (string-append root "/"
|
||||
(file-system-mount-point fs)))
|
||||
(flags (logior (mount-flags->bit-mask (file-system-flags fs))
|
||||
|
||||
;; For bind mounts, preserve the original flags such
|
||||
;; as MS_NOSUID, etc. Failing to do that, the
|
||||
;; MS_REMOUNT call below fails with EPERM.
|
||||
;; See <https://bugs.gnu.org/46292>
|
||||
(if (memq 'bind-mount (file-system-flags fs))
|
||||
(statfs-flags->mount-flags
|
||||
(file-system-mount-flags (statfs source)))
|
||||
0)))
|
||||
(options (file-system-options fs)))
|
||||
(when check?
|
||||
(check-file-system source type (not skip-check-if-clean?) repair))
|
||||
;; For bind mounts, preserve the original flags such
|
||||
;; as MS_NOSUID, etc. Failing to do that, the
|
||||
;; MS_REMOUNT call below fails with EPERM.
|
||||
;; See <https://bugs.gnu.org/46292>
|
||||
(if (memq 'bind-mount (file-system-flags fs))
|
||||
(statfs-flags->mount-flags
|
||||
(file-system-mount-flags (statfs source)))
|
||||
0)))
|
||||
(options (file-system-options fs)))
|
||||
(when check?
|
||||
(check-file-system source type (not skip-check-if-clean?) repair))
|
||||
|
||||
(catch 'system-error
|
||||
(lambda ()
|
||||
;; Create the mount point. Most of the time this is a directory, but
|
||||
;; in the case of a bind mount, a regular file or socket may be
|
||||
;; needed.
|
||||
@@ -1506,7 +1472,10 @@ corresponds to the symbols listed in FLAGS."
|
||||
(when (and (= MS_BIND (logand flags MS_BIND))
|
||||
(= MS_RDONLY (logand flags MS_RDONLY)))
|
||||
(let ((flags (logior MS_REMOUNT flags)))
|
||||
(mount source target type flags options))))))
|
||||
(mount source target type flags options))))
|
||||
(lambda args
|
||||
(or (file-system-mount-may-fail? fs)
|
||||
(apply throw args))))))
|
||||
|
||||
(define %device-name-regexp "/dev/[hsvw]d([abcd])([0-9]*)")
|
||||
(define %hurd-device-name-regexp "part:([0-9]*):device:[hw]d([0-9]*)")
|
||||
|
||||
+8
-72
@@ -1,12 +1,12 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013-2020, 2025 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2016 Christine Lemmer-Webber <cwebber@dustycloud.org>
|
||||
;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
|
||||
;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
|
||||
;;; Copyright © 2020, 2022 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
;;; Copyright © 2022 Pavel Shlyak <p.shlyak@pantherx.org>
|
||||
;;; Copyright © 2022, 2025 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
|
||||
;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
|
||||
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
@@ -66,14 +66,12 @@
|
||||
(number->string
|
||||
(inexact->exact (ceiling (/ size 1024)))))
|
||||
|
||||
(define* (estimate-partition-size root #:optional (margin .25))
|
||||
(define (estimate-partition-size root)
|
||||
"Given the ROOT directory, evaluate and return its size. As this doesn't
|
||||
take the partition metadata size into account, take a MARGIN. As this in
|
||||
take the partition metadata size into account, take a 25% margin. As this in
|
||||
turn doesn't take any constant overhead into account, force a 1-MiB minimum."
|
||||
(max (ash 1 20)
|
||||
;; without inexact->exact, 'guess can result in an error like that:
|
||||
;; "Wrong type (expecting exact integer): 7179941140.0".
|
||||
(inexact->exact (round (* (+ 1. margin) (file-size root))))))
|
||||
(* 1.25 (file-size root))))
|
||||
|
||||
(define* (make-btrfs-image partition target root)
|
||||
"Handle the creation of BTRFS partition images. See
|
||||
@@ -83,8 +81,7 @@ turn doesn't take any constant overhead into account, force a 1-MiB minimum."
|
||||
(label (partition-label partition))
|
||||
(uuid (partition-uuid partition)))
|
||||
(apply invoke
|
||||
`("unshare" "--map-root-user" "mkfs.btrfs"
|
||||
"-r" ,root
|
||||
`("fakeroot" "mkfs.btrfs" "-r" ,root
|
||||
"-L" ,label
|
||||
,@(if uuid
|
||||
`("-U" ,(uuid->string uuid))
|
||||
@@ -119,43 +116,7 @@ turn doesn't take any constant overhead into account, force a 1-MiB minimum."
|
||||
(size-in-kib
|
||||
(if (eq? size 'guess)
|
||||
(estimate-partition-size root)
|
||||
size)))))
|
||||
|
||||
;; 'mke2fs' does not create directory indexes by default, meaning that
|
||||
;; directories have a limit of 65,000 sub-directories, which can be
|
||||
;; problematic for the store. To avoid that, run 'e2fsck -D' to create
|
||||
;; those directory indexes. See
|
||||
;; <https://github.com/tytso/e2fsprogs/issues/257>.
|
||||
(invoke "e2fsck" "-fDy" target)))
|
||||
|
||||
(define* (make-f2fs-image partition target root
|
||||
#:key
|
||||
(owner-uid 0)
|
||||
(owner-gid 0))
|
||||
"Handle the creation of F2FS partition images. See 'make-partition-image'."
|
||||
(let ((size (partition-size partition))
|
||||
(label (partition-label partition))
|
||||
(uuid (partition-uuid partition))
|
||||
(fs-options (partition-file-system-options partition)))
|
||||
;; The mkfs.f2fs utility can't create files, so we need to create one
|
||||
;; before running it.
|
||||
(call-with-output-file target (const #t))
|
||||
(truncate-file
|
||||
target
|
||||
(if (eq? size 'guess)
|
||||
;; The F2FS filesystem has more overhead than other filesystems like
|
||||
;; BTRFS and ext4.
|
||||
(estimate-partition-size root .50)
|
||||
size))
|
||||
(apply invoke "fakeroot" "mkfs.f2fs"
|
||||
"-l" label
|
||||
"-R" (format #f "~a:~a" owner-uid owner-gid)
|
||||
`(,@(if uuid
|
||||
`("-U" ,(uuid->string uuid))
|
||||
'())
|
||||
,@fs-options
|
||||
,target))
|
||||
(invoke "fakeroot" "sload.f2fs" "-P" "-f" root target)))
|
||||
size)))))))
|
||||
|
||||
(define* (make-vfat-image partition target root fs-bits)
|
||||
"Handle the creation of VFAT partition images. See 'make-partition-image'."
|
||||
@@ -183,23 +144,6 @@ turn doesn't take any constant overhead into account, force a 1-MiB minimum."
|
||||
(string-append "::" file))))
|
||||
(scandir root))))
|
||||
|
||||
(define* (make-swap-image partition target)
|
||||
"Make a swap partition of a certain size."
|
||||
(let ((size (partition-size partition))
|
||||
(label (partition-label partition))
|
||||
(uuid (partition-uuid partition))
|
||||
(fs-options (partition-file-system-options partition)))
|
||||
(apply invoke "fakeroot" "mkswap"
|
||||
"--pagesize" "4096"
|
||||
"--endianness" "little"
|
||||
"-L" label
|
||||
"--file" target
|
||||
"--size" (number->string size)
|
||||
`(,@(if uuid
|
||||
`("-U" ,(uuid->string uuid))
|
||||
'())
|
||||
,@fs-options))))
|
||||
|
||||
(define* (make-unformatted-image partition target)
|
||||
"Make an unformatted partition of a certain size."
|
||||
(let ((size (partition-size partition)))
|
||||
@@ -218,14 +162,10 @@ ROOT directory to populate the image."
|
||||
(make-btrfs-image partition target root))
|
||||
((string-prefix? "ext" type)
|
||||
(make-ext-image partition target root))
|
||||
((string=? "f2fs" type)
|
||||
(make-f2fs-image partition target root))
|
||||
((or (string=? type "vfat") (string=? type "fat16"))
|
||||
(make-vfat-image partition target root 16))
|
||||
((string=? type "fat32")
|
||||
(make-vfat-image partition target root 32))
|
||||
((string=? "swap" type)
|
||||
(make-swap-image partition target))
|
||||
((string=? type "unformatted")
|
||||
(make-unformatted-image partition target))
|
||||
(else
|
||||
@@ -429,11 +369,7 @@ GRUB configuration and OS-DRV as the stuff in it."
|
||||
"-not" "-wholename" "/System/*"
|
||||
"-not" "-name" "unicode.pf2"
|
||||
"-not" "-name" "bzImage"
|
||||
"-not" "-name" "zImage"
|
||||
"-not" "-name" "Image"
|
||||
"-not" "-name" "vmlinuz"
|
||||
"-not" "-name" "*.gz" ; initrd
|
||||
"-not" "-name" "*.zst" ; all man pages
|
||||
"-not" "-name" "*.gz" ; initrd & all man pages
|
||||
"-not" "-name" "*.png" ; includes grub-image.png
|
||||
"-exec" "set_filter" "--zisofs"
|
||||
"--")
|
||||
|
||||
@@ -46,26 +46,7 @@
|
||||
make-static-device-nodes
|
||||
configure-qemu-networking
|
||||
|
||||
boot-system
|
||||
|
||||
linux-console
|
||||
|
||||
linux-console?
|
||||
linux-console-device
|
||||
linux-console-can-read?
|
||||
linux-console-can-write?
|
||||
linux-console-can-unblank?
|
||||
linux-console-enabled?
|
||||
linux-console-preferred?
|
||||
linux-console-primary?
|
||||
linux-console-printk?
|
||||
linux-console-braille?
|
||||
linux-console-safe-when-cpu-offline?
|
||||
linux-console-major
|
||||
linux-console-minor
|
||||
linux-console-virtual?
|
||||
|
||||
read-linux-consoles))
|
||||
boot-system))
|
||||
|
||||
;;; Commentary:
|
||||
;;;
|
||||
@@ -694,56 +675,4 @@ the root file system...\n" root-delay)
|
||||
(start-repl)))))
|
||||
#:on-error on-error))
|
||||
|
||||
(define-record-type <linux-console>
|
||||
(make-linux-console device can-read? can-write? can-unblank?
|
||||
enabled? preferred? primary? printk? braille?
|
||||
safe-when-cpu-offline? major minor virtual?)
|
||||
linux-console?
|
||||
(device linux-console-device)
|
||||
(can-read? linux-console-can-read?)
|
||||
(can-write? linux-console-can-write?)
|
||||
(can-unblank? linux-console-can-unblank?)
|
||||
(enabled? linux-console-enabled?)
|
||||
(preferred? linux-console-preferred?)
|
||||
(primary? linux-console-primary?)
|
||||
(printk? linux-console-printk?)
|
||||
(braille? linux-console-braille?)
|
||||
(safe-when-cpu-offline? linux-console-safe-when-cpu-offline?)
|
||||
(major linux-console-major)
|
||||
(minor linux-console-minor)
|
||||
(virtual? linux-console-virtual?))
|
||||
|
||||
(define* (read-linux-consoles #:optional (consoles-file "/proc/consoles"))
|
||||
"Parses CONSOLES-FILE and returns a list of <linux-console> records."
|
||||
(if (not (file-exists? consoles-file))
|
||||
'()
|
||||
(with-input-from-file consoles-file
|
||||
(lambda ()
|
||||
(let ((line-regex (make-regexp
|
||||
"^([^ ]+)[ ]+(.+)[ ]+([0-9]+):([0-9]+)$"))
|
||||
(virt-regex (make-regexp "^tty[0-9]+$")))
|
||||
(let loop ((line (read-line))
|
||||
(results '()))
|
||||
(cond
|
||||
((eof-object? line)
|
||||
(reverse results))
|
||||
((regexp-exec line-regex line)
|
||||
=> (lambda (m)
|
||||
(let* ((dev (match:substring m 1))
|
||||
(flags (match:substring m 2))
|
||||
(major (string->number (match:substring m 3)))
|
||||
(minor (string->number (match:substring m 4)))
|
||||
(virtual? (regexp-exec virt-regex dev))
|
||||
(has? (lambda (c)
|
||||
(string-any (lambda (f) (char=? f c)) flags))))
|
||||
(loop (read-line)
|
||||
(cons (make-linux-console
|
||||
dev
|
||||
(has? #\R) (has? #\W) (has? #\U) (has? #\E)
|
||||
(has? #\C) (has? #\B) (has? #\p) (has? #\b)
|
||||
(has? #\a)
|
||||
major minor virtual?)
|
||||
results)))))
|
||||
(else (loop (read-line) results)))))))))
|
||||
|
||||
;;; linux-boot.scm ends here
|
||||
|
||||
+104
-137
@@ -190,10 +190,7 @@ for the process."
|
||||
(remount-read-only "/"))))
|
||||
|
||||
(define* (initialize-user-namespace pid host-uids
|
||||
#:key
|
||||
(host-uid (getuid))
|
||||
(host-gid (getgid))
|
||||
(guest-uid 0) (guest-gid 0))
|
||||
#:key (guest-uid 0) (guest-gid 0))
|
||||
"Configure the user namespace for PID. HOST-UIDS specifies the number of
|
||||
host user identifiers to map into the user namespace. GUEST-UID and GUEST-GID
|
||||
specify the first UID (respectively GID) that host UIDs (respectively GIDs)
|
||||
@@ -204,21 +201,24 @@ map to in the namespace."
|
||||
(define (scope file)
|
||||
(string-append proc-dir file))
|
||||
|
||||
;; Only root can write to the gid map without first disabling the
|
||||
;; setgroups syscall.
|
||||
(unless (and (zero? host-uid) (zero? host-gid))
|
||||
(call-with-output-file (scope "/setgroups")
|
||||
(lambda (port)
|
||||
(display "deny" port))))
|
||||
(let ((uid (getuid))
|
||||
(gid (getgid)))
|
||||
|
||||
;; Map the user/group that created the container to the root user
|
||||
;; within the container.
|
||||
(call-with-output-file (scope "/uid_map")
|
||||
(lambda (port)
|
||||
(format port "~d ~d ~d" guest-uid host-uid host-uids)))
|
||||
(call-with-output-file (scope "/gid_map")
|
||||
(lambda (port)
|
||||
(format port "~d ~d ~d" guest-gid host-gid host-uids))))
|
||||
;; Only root can write to the gid map without first disabling the
|
||||
;; setgroups syscall.
|
||||
(unless (and (zero? uid) (zero? gid))
|
||||
(call-with-output-file (scope "/setgroups")
|
||||
(lambda (port)
|
||||
(display "deny" port))))
|
||||
|
||||
;; Map the user/group that created the container to the root user
|
||||
;; within the container.
|
||||
(call-with-output-file (scope "/uid_map")
|
||||
(lambda (port)
|
||||
(format port "~d ~d ~d" guest-uid uid host-uids)))
|
||||
(call-with-output-file (scope "/gid_map")
|
||||
(lambda (port)
|
||||
(format port "~d ~d ~d" guest-gid gid host-uids)))))
|
||||
|
||||
(define (namespaces->bit-mask namespaces)
|
||||
"Return the number suitable for the 'flags' argument of 'clone' that
|
||||
@@ -239,14 +239,12 @@ corresponds to the symbols in NAMESPACES."
|
||||
#:key (guest-uid 0) (guest-gid 0)
|
||||
(populate-file-system (const #t))
|
||||
(loopback-network? #t)
|
||||
(lock-mounts? #t)
|
||||
writable-root?)
|
||||
"Run THUNK in a new container process and return its PID. ROOT specifies
|
||||
the root directory for the container. MOUNTS is a list of <file-system>
|
||||
objects that specify file systems to mount inside the container. NAMESPACES
|
||||
is a list of symbols that correspond to the possible Linux namespaces: mnt,
|
||||
ipc, uts, user, and net. When LOCK-MOUNTS? is true, arrange so that none of
|
||||
MOUNTS can be unmounted or remounted individually from within THUNK.
|
||||
ipc, uts, user, and net.
|
||||
|
||||
When LOOPBACK-NETWORK? is true and 'net is amount NAMESPACES, set up the
|
||||
loopback device (\"lo\") and a minimal /etc/hosts.
|
||||
@@ -263,93 +261,75 @@ that host UIDs (respectively GIDs) map to in the namespace."
|
||||
;; child process blocks until the parent writes to it.
|
||||
(match (socketpair PF_UNIX (logior SOCK_CLOEXEC SOCK_STREAM) 0)
|
||||
((child . parent)
|
||||
(safe-clone
|
||||
(namespaces->bit-mask namespaces)
|
||||
(lambda ()
|
||||
(call-with-clean-exit
|
||||
(lambda ()
|
||||
(close-port parent)
|
||||
;; Wait for parent to set things up.
|
||||
(match (read child)
|
||||
('ready
|
||||
(purify-environment)
|
||||
(when (and (memq 'mnt namespaces)
|
||||
(not (string=? root "/")))
|
||||
(catch #t
|
||||
(lambda ()
|
||||
(mount-file-systems root mounts
|
||||
#:mount-/proc? (memq 'pid namespaces)
|
||||
#:mount-/sys? (memq 'net
|
||||
namespaces)
|
||||
#:populate-file-system
|
||||
(lambda ()
|
||||
(populate-file-system)
|
||||
(when (and (memq 'net namespaces)
|
||||
loopback-network?)
|
||||
(set-network-interface-up "lo")
|
||||
(let ((flags (namespaces->bit-mask namespaces)))
|
||||
(match (clone flags)
|
||||
(0
|
||||
(call-with-clean-exit
|
||||
(lambda ()
|
||||
(close-port parent)
|
||||
;; Wait for parent to set things up.
|
||||
(match (read child)
|
||||
('ready
|
||||
(purify-environment)
|
||||
(when (and (memq 'mnt namespaces)
|
||||
(not (string=? root "/")))
|
||||
(catch #t
|
||||
(lambda ()
|
||||
(mount-file-systems root mounts
|
||||
#:mount-/proc? (memq 'pid namespaces)
|
||||
#:mount-/sys? (memq 'net
|
||||
namespaces)
|
||||
#:populate-file-system
|
||||
(lambda ()
|
||||
(populate-file-system)
|
||||
(when (and (memq 'net namespaces)
|
||||
loopback-network?)
|
||||
(set-network-interface-up "lo")
|
||||
|
||||
;; When isolated from the
|
||||
;; network, provide a minimal
|
||||
;; /etc/hosts to resolve
|
||||
;; "localhost".
|
||||
(mkdir-p "/etc")
|
||||
(call-with-output-file "/etc/hosts"
|
||||
(lambda (port)
|
||||
(display "127.0.0.1 localhost\n" port)
|
||||
(chmod port #o444)))))
|
||||
#:writable-root?
|
||||
(or writable-root?
|
||||
(not (memq 'mnt namespaces)))))
|
||||
(lambda args
|
||||
;; Forward the exception to the parent process.
|
||||
;; FIXME: SRFI-35 conditions and non-trivial objects
|
||||
;; cannot be 'read' so they shouldn't be written as is.
|
||||
(write args child)
|
||||
(primitive-exit 3))))
|
||||
;; When isolated from the
|
||||
;; network, provide a minimal
|
||||
;; /etc/hosts to resolve
|
||||
;; "localhost".
|
||||
(mkdir-p "/etc")
|
||||
(call-with-output-file "/etc/hosts"
|
||||
(lambda (port)
|
||||
(display "127.0.0.1 localhost\n" port)
|
||||
(chmod port #o444)))))
|
||||
#:writable-root?
|
||||
(or writable-root?
|
||||
(not (memq 'mnt namespaces)))))
|
||||
(lambda args
|
||||
;; Forward the exception to the parent process.
|
||||
;; FIXME: SRFI-35 conditions and non-trivial objects
|
||||
;; cannot be 'read' so they shouldn't be written as is.
|
||||
(write args child)
|
||||
(primitive-exit 3))))
|
||||
;; TODO: Manage capabilities.
|
||||
(write 'ready child)
|
||||
(close-port child)
|
||||
(thunk))
|
||||
(_ ;parent died or something
|
||||
(primitive-exit 2))))))
|
||||
(pid
|
||||
(close-port child)
|
||||
(when (memq 'user namespaces)
|
||||
(initialize-user-namespace pid host-uids
|
||||
#:guest-uid guest-uid
|
||||
#:guest-gid guest-gid))
|
||||
;; TODO: Initialize cgroups.
|
||||
(write 'ready parent)
|
||||
(newline parent)
|
||||
|
||||
(when (and lock-mounts?
|
||||
(memq 'mnt namespaces)
|
||||
(memq 'user namespaces))
|
||||
;; Create a new mount namespace owned by a new user
|
||||
;; namespace to "lock" together previous mounts, such that
|
||||
;; they cannot be unmounted or remounted separately--see
|
||||
;; mount_namespaces(7).
|
||||
(let ((uid (getuid)) (gid (getgid)))
|
||||
(unshare (logior CLONE_NEWUSER CLONE_NEWNS))
|
||||
(when (file-exists? "/proc/self")
|
||||
(initialize-user-namespace (getpid)
|
||||
host-uids
|
||||
#:host-uid uid
|
||||
#:host-gid gid
|
||||
#:guest-uid guest-uid
|
||||
#:guest-gid guest-gid))))
|
||||
|
||||
;; TODO: Manage capabilities.
|
||||
(write 'ready child)
|
||||
(close-port child)
|
||||
(thunk))
|
||||
(_ ;parent died or something
|
||||
(primitive-exit 2))))))
|
||||
(lambda (pid)
|
||||
(close-port child)
|
||||
(when (memq 'user namespaces)
|
||||
(initialize-user-namespace pid host-uids
|
||||
#:guest-uid guest-uid
|
||||
#:guest-gid guest-gid))
|
||||
;; TODO: Initialize cgroups.
|
||||
(write 'ready parent)
|
||||
(newline parent)
|
||||
|
||||
;; Check whether the child process' setup phase succeeded.
|
||||
(let ((message (read parent)))
|
||||
(close-port parent)
|
||||
(match message
|
||||
('ready ;success
|
||||
pid)
|
||||
(((? symbol? key) args ...) ;exception
|
||||
(apply throw key args))
|
||||
(_ ;unexpected termination
|
||||
#f))))))))
|
||||
;; Check whether the child process' setup phase succeeded.
|
||||
(let ((message (read parent)))
|
||||
(close-port parent)
|
||||
(match message
|
||||
('ready ;success
|
||||
pid)
|
||||
(((? symbol? key) args ...) ;exception
|
||||
(apply throw key args))
|
||||
(_ ;unexpected termination
|
||||
#f)))))))))
|
||||
|
||||
;; FIXME: This is copied from (guix utils), which we cannot use because it
|
||||
;; would pull (guix config) and all.
|
||||
@@ -396,7 +376,6 @@ if there are no child processes left."
|
||||
|
||||
(define* (call-with-container mounts thunk #:key (namespaces %namespaces)
|
||||
(host-uids 1) (guest-uid 0) (guest-gid 0)
|
||||
(lock-mounts? #t)
|
||||
(relayed-signals (list SIGINT SIGTERM))
|
||||
(child-is-pid1? #t)
|
||||
(populate-file-system (const #t))
|
||||
@@ -481,7 +460,6 @@ load path must be adjusted as needed."
|
||||
(call-with-temporary-directory
|
||||
(lambda (root)
|
||||
(let ((pid (run-container root mounts namespaces host-uids thunk*
|
||||
#:lock-mounts? lock-mounts?
|
||||
#:guest-uid guest-uid
|
||||
#:guest-gid guest-gid
|
||||
#:populate-file-system populate-file-system
|
||||
@@ -502,35 +480,24 @@ return the exit status, an integer as returned by 'waitpid'."
|
||||
(0
|
||||
(call-with-clean-exit
|
||||
(lambda ()
|
||||
;; First, determine the user namespace that owns the pid namespace and
|
||||
;; join that user namespace (the assumption is that it also owns all
|
||||
;; the other namespaces). It's important that the user namespace is
|
||||
;; joined first, so that the user will have the privileges to join the
|
||||
;; other namespaces.
|
||||
(let* ((pid-ns (open-fdes (namespace-file pid "pid")
|
||||
(logior O_CLOEXEC O_RDONLY)))
|
||||
(user-ns (get-user-ns pid-ns)))
|
||||
(close-fdes pid-ns)
|
||||
(unless (equal? (stat user-ns)
|
||||
(stat (namespace-file (getpid) "user")))
|
||||
(setns user-ns 0))
|
||||
(close-fdes user-ns)
|
||||
|
||||
;; Then join all the remaining namespaces.
|
||||
(for-each (lambda (ns)
|
||||
(let ((source (namespace-file (getpid) ns))
|
||||
(target (namespace-file pid ns)))
|
||||
;; Joining the namespace that the process already
|
||||
;; belongs to would throw an error so avoid that.
|
||||
;; XXX: This /proc interface leads to TOCTTOU.
|
||||
(unless (string=? (readlink source) (readlink target))
|
||||
(call-with-input-file target
|
||||
(lambda (new-ns-port)
|
||||
(setns (fileno new-ns-port) 0))))))
|
||||
;; It's important that the mount namespace is joined last,
|
||||
;; otherwise the /proc mount point would no longer be
|
||||
;; accessible.
|
||||
'("ipc" "uts" "net" "pid" "mnt")))
|
||||
(for-each (lambda (ns)
|
||||
(let ((source (namespace-file (getpid) ns))
|
||||
(target (namespace-file pid ns)))
|
||||
;; Joining the namespace that the process already
|
||||
;; belongs to would throw an error so avoid that.
|
||||
;; XXX: This /proc interface leads to TOCTTOU.
|
||||
(unless (string=? (readlink source) (readlink target))
|
||||
(call-with-input-file source
|
||||
(lambda (current-ns-port)
|
||||
(call-with-input-file target
|
||||
(lambda (new-ns-port)
|
||||
(setns (fileno new-ns-port) 0))))))))
|
||||
;; It's important that the user namespace is joined first,
|
||||
;; so that the user will have the privileges to join the
|
||||
;; other namespaces. Furthermore, it's important that the
|
||||
;; mount namespace is joined last, otherwise the /proc mount
|
||||
;; point would no longer be accessible.
|
||||
'("user" "ipc" "uts" "net" "pid" "mnt"))
|
||||
(purify-environment)
|
||||
(chdir "/")
|
||||
|
||||
|
||||
@@ -107,8 +107,8 @@ QEMU monitor and to the guest's backdoor REPL."
|
||||
(define extra-options
|
||||
(list "-nographic"
|
||||
"-monitor" (string-append "unix:" socket-directory "/monitor")
|
||||
"-chardev" (string-append "socket,id=repl,path="
|
||||
socket-directory "/repl")
|
||||
"-chardev" (string-append "socket,id=repl,path=" socket-directory
|
||||
"/repl,reconnect=1")
|
||||
"-chardev" (string-append "socket,id=qga,server=on,wait=off,path="
|
||||
socket-directory "/qemu-ga")
|
||||
|
||||
|
||||
+22
-50
@@ -1,6 +1,6 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2012-2024, 2026 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2017, 2020, 2026 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2012-2024 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2017, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
|
||||
;;; Copyright © 2020 Julien Lepiller <julien@lepiller.eu>
|
||||
;;; Copyright © 2020, 2021 Mathieu Othacehe <othacehe@gnu.org>
|
||||
@@ -37,7 +37,7 @@
|
||||
#:use-module (guix ui)
|
||||
#:use-module ((guix licenses)
|
||||
#:select (gpl3+ license? license-name))
|
||||
#:use-module (guix utils)
|
||||
#:use-module ((guix utils) #:select (%current-system))
|
||||
#:use-module ((guix scripts system) #:select (read-operating-system))
|
||||
#:use-module ((guix scripts pack)
|
||||
#:select (self-contained-tarball))
|
||||
@@ -48,13 +48,9 @@
|
||||
#:use-module (gnu packages)
|
||||
#:use-module (gnu packages gcc)
|
||||
#:use-module (gnu packages gdb)
|
||||
#:use-module (gnu packages man)
|
||||
#:use-module (gnu packages base)
|
||||
#:use-module (gnu packages gawk)
|
||||
#:use-module (gnu packages hurd)
|
||||
#:use-module (gnu packages admin)
|
||||
#:use-module (gnu packages guile)
|
||||
#:use-module (gnu packages linux)
|
||||
#:use-module (gnu packages gettext)
|
||||
#:use-module (gnu packages compression)
|
||||
#:use-module (gnu packages multiprecision)
|
||||
@@ -140,43 +136,19 @@ SYSTEM."
|
||||
#:cross? #t
|
||||
#:target target)))
|
||||
|
||||
(define %core-packages-for-mingw
|
||||
;; Core packages that can be built for any target, including MinGW. This
|
||||
;; excludes the bootstrap tarballs, which do not support MinGW.
|
||||
(list gcc-10 gcc-11 gcc-12 glibc binutils gdb-minimal
|
||||
gmp mpfr mpc coreutils findutils diffutils patch sed grep
|
||||
gawk gnu-gettext hello guile-2.2 guile-3.0 zlib gzip bzip2 xz zstd))
|
||||
|
||||
(define %core-packages
|
||||
;; General set of core packages.
|
||||
;; Note: Don't put the '-final' package variants because (1) that's
|
||||
;; implicit, and (2) they cannot be cross-built (due to the explicit input
|
||||
;; chain.)
|
||||
(append %core-packages-for-mingw
|
||||
(list util-linux procps psmisc which e2fsprogs man-db inetutils
|
||||
guix shepherd
|
||||
%bootstrap-binaries-tarball
|
||||
%binutils-bootstrap-tarball
|
||||
(%glibc-bootstrap-tarball)
|
||||
%gcc-bootstrap-tarball
|
||||
%guile-bootstrap-tarball
|
||||
%bootstrap-tarballs)))
|
||||
|
||||
(define %linux-packages
|
||||
;; Extra Linux-specific packages.
|
||||
(list linux-libre))
|
||||
|
||||
(define %hurd-packages
|
||||
;; Extra Hurd-specific packages
|
||||
(list gnumach mig hurd-minimal hurd netdde rumpkernel))
|
||||
|
||||
(define (core-packages system)
|
||||
"Return the 'core' package set suitable for SYSTEM, which might be a system
|
||||
type or a GNU triplet."
|
||||
(cond ((target-linux? system) (append %core-packages %linux-packages))
|
||||
((target-hurd? system) (append %core-packages %hurd-packages))
|
||||
((target-mingw? system) %core-packages-for-mingw)
|
||||
(else '())))
|
||||
(list gcc-10 gcc-11 gcc-12 glibc binutils gdb-minimal
|
||||
gmp mpfr mpc coreutils findutils diffutils patch sed grep
|
||||
gawk gnu-gettext hello guile-2.2 guile-3.0 zlib gzip xz guix
|
||||
%bootstrap-binaries-tarball
|
||||
%binutils-bootstrap-tarball
|
||||
(%glibc-bootstrap-tarball)
|
||||
%gcc-bootstrap-tarball
|
||||
%guile-bootstrap-tarball
|
||||
%bootstrap-tarballs))
|
||||
|
||||
(define (commencement-packages system)
|
||||
"Return the list of bootstrap packages from the commencement module for
|
||||
@@ -193,7 +165,10 @@ SYSTEM."
|
||||
|
||||
(define (packages-to-cross-build target)
|
||||
"Return the list of packages to cross-build for TARGET."
|
||||
(core-packages target))
|
||||
;; Don't cross-build the bootstrap tarballs for MinGW.
|
||||
(if (string-contains target "mingw")
|
||||
(drop-right %core-packages 6)
|
||||
%core-packages))
|
||||
|
||||
(define %bare-platform-triplets
|
||||
;; Cross-compilation triplets of platforms that lack a proper user-space and
|
||||
@@ -257,18 +232,17 @@ SYSTEM."
|
||||
|
||||
(define* (guix-jobs store systems #:key source commit)
|
||||
"Return a list of jobs for Guix itself."
|
||||
(define instance
|
||||
(checkout->channel-instance source
|
||||
#:url (channel-url %default-guix-channel)
|
||||
#:commit commit))
|
||||
(define build
|
||||
(primitive-load (string-append source "/build-aux/build-self.scm")))
|
||||
|
||||
(map
|
||||
(lambda (system)
|
||||
(let ((name (string->symbol
|
||||
(string-append "guix." system)))
|
||||
(drv (run-with-store store
|
||||
(channel-instances->derivation (list instance)
|
||||
#:system system))))
|
||||
(build source #:version commit #:system system
|
||||
#:pull-version 1
|
||||
#:guile-version "2.2"))))
|
||||
(derivation->job name drv)))
|
||||
systems))
|
||||
|
||||
@@ -280,7 +254,6 @@ SYSTEM."
|
||||
|
||||
(define %guix-system-images
|
||||
(list hurd-barebones-qcow2-image
|
||||
hurd64-barebones-qcow2-image
|
||||
pine64-barebones-raw-image
|
||||
pinebook-pro-barebones-raw-image
|
||||
novena-barebones-raw-image
|
||||
@@ -571,8 +544,7 @@ names, for each one of SYSTEMS."
|
||||
(map (lambda (package)
|
||||
(package-job store (job-name package)
|
||||
package system))
|
||||
(append (commencement-packages system)
|
||||
(core-packages system)))
|
||||
(append (commencement-packages system) %core-packages))
|
||||
(cross-jobs store system)))
|
||||
('guix
|
||||
;; Build Guix modules only.
|
||||
|
||||
+1
-35
@@ -1,9 +1,8 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2021-2023 Andrew Tropin <andrew@trop.in>
|
||||
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
|
||||
;;; Copyright © 2022-2023, 2025 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2022-2023 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2023 Carlo Zancanaro <carlo@zancanaro.id.au>
|
||||
;;; Copyright © 2025 Giacomo Leidi <therewasa@fishinthecalculator.me>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -52,7 +51,6 @@
|
||||
home-activation-service-type
|
||||
home-run-on-change-service-type
|
||||
home-provenance-service-type
|
||||
home-gc-root-service-type
|
||||
|
||||
literal-string
|
||||
literal-string?
|
||||
@@ -60,7 +58,6 @@
|
||||
|
||||
with-shell-quotation-bindings
|
||||
environment-variable-shell-definitions
|
||||
shell-variable-definitions
|
||||
home-files-directory
|
||||
xdg-configuration-files-directory
|
||||
xdg-data-files-directory
|
||||
@@ -244,27 +241,6 @@ ensures variable values are properly quoted."
|
||||
"\n")))
|
||||
variables))))
|
||||
|
||||
(define (shell-variable-definitions variables)
|
||||
"Return a gexp that evaluates to a list of POSIX shell statements defining
|
||||
VARIABLES, a list of variable name/value pairs, as shell variables (not
|
||||
environment variables). The returned code ensures variable values are
|
||||
properly quoted."
|
||||
(with-shell-quotation-bindings
|
||||
#~(string-append
|
||||
#$@(map (match-lambda
|
||||
((key . (or (? string? value)
|
||||
(? file-like? value)
|
||||
(? gexp? value)))
|
||||
#~(string-append #$key "="
|
||||
(shell-double-quote #$value)
|
||||
"\n"))
|
||||
((key . (? literal-string? value))
|
||||
#~(string-append #$key "="
|
||||
(shell-single-quote
|
||||
#$(literal-string-value value))
|
||||
"\n")))
|
||||
variables))))
|
||||
|
||||
(define (environment-variables->setup-environment-script vars)
|
||||
"Return a file that can be sourced by a POSIX compliant shell which
|
||||
initializes the environment. The file will source the home
|
||||
@@ -759,16 +735,6 @@ environment, and its configuration file, when available.")))
|
||||
(define sexp->home-provenance sexp->system-provenance)
|
||||
(define home-provenance system-provenance)
|
||||
|
||||
|
||||
;;;
|
||||
;;; Garbage collector roots.
|
||||
;;;
|
||||
|
||||
(define home-gc-root-service-type
|
||||
(service-type
|
||||
(inherit (system->home-service-type gc-root-service-type))
|
||||
(default-value '())))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Searching
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 Giacomo Leidi <therewasa@fishinthecalculator.me>
|
||||
;;; Copyright © 2025 Giacomo Leidi <goodoldpaul@autistici.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 Giacomo Leidi <therewasa@fishinthecalculator.me>
|
||||
;;; Copyright © 2025 Giacomo Leidi <goodoldpaul@autistici.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
;;; Copyright © 2022 ( <paren@disroot.org>
|
||||
;;; Copyright © 2023 conses <contact@conses.eu>
|
||||
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2025 dan <i@dan.games>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -26,7 +25,7 @@
|
||||
#:use-module (gnu services configuration)
|
||||
#:use-module (gnu services xorg)
|
||||
#:autoload (gnu packages glib) (dbus)
|
||||
#:autoload (gnu packages xdisorg) (darkman redshift unclutter)
|
||||
#:autoload (gnu packages xdisorg) (redshift unclutter)
|
||||
#:autoload (gnu packages xorg) (setxkbmap xmodmap)
|
||||
#:use-module (guix records)
|
||||
#:use-module (guix gexp)
|
||||
@@ -47,11 +46,7 @@
|
||||
home-xmodmap-configuration
|
||||
home-xmodmap-service-type
|
||||
|
||||
home-startx-command-service-type
|
||||
|
||||
home-darkman-configuration
|
||||
home-darkman-configuration?
|
||||
home-darkman-service-type))
|
||||
home-startx-command-service-type))
|
||||
|
||||
|
||||
;;;
|
||||
@@ -452,93 +447,3 @@ buttons under the Xorg display server via user-defined expressions.")))
|
||||
|
||||
(define-service-type-mapping
|
||||
startx-command-service-type => home-startx-command-service-type)
|
||||
|
||||
|
||||
;;;
|
||||
;;; Darkman.
|
||||
;;;
|
||||
|
||||
(define-maybe number)
|
||||
|
||||
(define (serialize-number field value)
|
||||
(string-append (match field
|
||||
('latitude "lat")
|
||||
('longitude "lng")
|
||||
(_ (symbol->string field)))
|
||||
": " (number->string value) "\n"))
|
||||
|
||||
(define (serialize-boolean field value)
|
||||
(string-append (match field
|
||||
('use-geoclue "usegeoclue")
|
||||
('dbus-server "dbusserver")
|
||||
(_ "portal"))
|
||||
": " (if value "true" "false") "\n"))
|
||||
|
||||
(define-configuration home-darkman-configuration
|
||||
(darkman
|
||||
(file-like darkman)
|
||||
"The @code{darkman} package to use.")
|
||||
|
||||
(latitude
|
||||
maybe-number
|
||||
"Latitude, used at startup or when @code{use-geoclue} is @code{#f}. More than
|
||||
one decimal point is generally not needed.")
|
||||
|
||||
(longitude
|
||||
maybe-number
|
||||
"Longitude, used at startup or when @code{use-geoclue} is @code{#f}. More than
|
||||
one decimal point is generally not needed.")
|
||||
|
||||
(use-geoclue
|
||||
(boolean #f)
|
||||
"Whether to use a local geoclue instance to determine the current location.
|
||||
Setting this to false without explicitly setting latitude and longtitude
|
||||
disables automatic transitions entirely.")
|
||||
|
||||
(dbus-server
|
||||
(boolean #t)
|
||||
"Whether to expose the current mode via darkman's own D-Bus API.")
|
||||
|
||||
(portal
|
||||
(boolean #t)
|
||||
"Whether to expose the current mode via the XDG settings portal D-Bus API."))
|
||||
|
||||
(define (serialize-home-darkman-configuration config)
|
||||
(mixed-text-file
|
||||
"config.yaml"
|
||||
(serialize-configuration config home-darkman-configuration-fields)))
|
||||
|
||||
(define (home-darkman-configuration-files config)
|
||||
`(("darkman/config.yaml" ,(serialize-home-darkman-configuration config))))
|
||||
|
||||
(define (home-darkman-profile-service config)
|
||||
(list (home-darkman-configuration-darkman config)))
|
||||
|
||||
(define (home-darkman-shepherd-service config)
|
||||
(list
|
||||
(shepherd-service
|
||||
(provision '(darkman))
|
||||
(requirement '(dbus))
|
||||
(modules '((shepherd support))) ;for '%user-log-dir'
|
||||
(start #~(make-forkexec-constructor
|
||||
(list #$(file-append (home-darkman-configuration-darkman config)
|
||||
"/bin/darkman")
|
||||
"run")
|
||||
#:log-file
|
||||
(string-append %user-log-dir "/darkman.log")))
|
||||
(stop #~(make-kill-destructor)))))
|
||||
|
||||
(define home-darkman-service-type
|
||||
(service-type
|
||||
(name 'home-darkman)
|
||||
(extensions
|
||||
(list (service-extension home-shepherd-service-type
|
||||
home-darkman-shepherd-service)
|
||||
(service-extension home-xdg-configuration-files-service-type
|
||||
home-darkman-configuration-files)
|
||||
(service-extension home-profile-service-type
|
||||
home-darkman-profile-service)))
|
||||
(default-value (home-darkman-configuration))
|
||||
(description "Run the @code{darkman} daemon, which will invoke scripts in
|
||||
$XDG_DATA_DIRS/dark-mode.d/ when sundown, and invoke scripts in
|
||||
$XDG_DATA_DIRS/light-mode.d/ when sunrise.")))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2024 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2024, 2026 Giacomo Leidi <therewasa@fishinthecalculator.me>
|
||||
;;; Copyright © 2024 Giacomo Leidi <goodoldpaul@autistici.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -45,9 +45,7 @@
|
||||
(define %home-dotfiles-excluded
|
||||
'(".*~"
|
||||
".*\\.swp"
|
||||
;; This first / is safe until regexp-exec in directory-contents
|
||||
;; is passed an absolute file name.
|
||||
"/\\.git/.*"
|
||||
"\\.git"
|
||||
"\\.gitignore"))
|
||||
|
||||
(define %home-dotfiles-layouts
|
||||
@@ -62,7 +60,10 @@
|
||||
or 'stow, but ~a was found.")
|
||||
value))))
|
||||
|
||||
(define-maybe/no-serialization list-of-strings)
|
||||
(define list-of-strings?
|
||||
(list-of string?))
|
||||
|
||||
(define-maybe list-of-strings)
|
||||
|
||||
(define-configuration/no-serialization home-dotfiles-configuration
|
||||
(source-directory
|
||||
@@ -137,7 +138,8 @@ value, excluding files that match any of the patterns configured."
|
||||
(define (filter-files directory)
|
||||
(find-files directory
|
||||
(lambda (file stat)
|
||||
(not (regexp-exec exclusion-rx file)))))
|
||||
(not (regexp-exec exclusion-rx
|
||||
(basename file))))))
|
||||
(if (and stow? packages (maybe-value-set? packages))
|
||||
(append-map filter-files
|
||||
(map (lambda (pkg)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
|
||||
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
|
||||
;;; Copyright © 2023 Giacomo Leidi <therewasa@fishinthecalculator.me>
|
||||
;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org>
|
||||
;;; Copyright © 2023 Andrew Patterson <andrewpatt7@gmail.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2026 Yarl Baudig <yarl-baudig@mailoo.org>
|
||||
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(define-module (gnu home services git-annex-assistant)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module ((guix packages) #:select (package?))
|
||||
#:use-module (guix records)
|
||||
#:use-module (gnu services configuration)
|
||||
#:use-module (gnu home services)
|
||||
#:use-module (gnu home services shepherd)
|
||||
#:use-module (gnu packages haskell-apps)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:export (home-git-annex-assistant-configuration
|
||||
home-git-annex-assistant-service-type))
|
||||
|
||||
(define-configuration/no-serialization home-git-annex-assistant-configuration
|
||||
(package
|
||||
(package git-annex)
|
||||
"Package that provides @code{git-annex}.")
|
||||
(directories
|
||||
(list-of-strings '())
|
||||
"List of directories."))
|
||||
|
||||
(define (home-git-annex-assistant-shepherd-services config)
|
||||
(match-record config
|
||||
<home-git-annex-assistant-configuration> (package directories)
|
||||
(let ((gaa-command
|
||||
#~(list (string-append #$package "/bin/git-annex") "assistant")))
|
||||
(map
|
||||
(lambda (dir)
|
||||
(let ((pid-file (in-vicinity dir ".git/annex/daemon.pid")))
|
||||
(shepherd-service
|
||||
(documentation
|
||||
(string-append "Run git-annex assistant against " dir "."))
|
||||
(provision
|
||||
(list
|
||||
(symbol-append 'home-git-annex-assistant-
|
||||
(string->symbol dir))))
|
||||
(start #~(lambda _
|
||||
(and (zero? (spawn-command #$gaa-command
|
||||
#:directory #$dir))
|
||||
(read-pid-file #$pid-file))))
|
||||
(stop #~(lambda _
|
||||
(unless (zero? (spawn-command
|
||||
(append #$gaa-command '("--stop"))
|
||||
#:directory #$dir))
|
||||
(error "failed to stop git-annex assistant"))
|
||||
#f)))))
|
||||
directories))))
|
||||
|
||||
(define home-git-annex-assistant-service-type
|
||||
(service-type
|
||||
(name 'git-annex-assistant)
|
||||
(extensions
|
||||
(list (service-extension home-shepherd-service-type
|
||||
home-git-annex-assistant-shepherd-services)))
|
||||
(compose concatenate)
|
||||
(extend (lambda (config directories)
|
||||
(home-git-annex-assistant-configuration
|
||||
(inherit config)
|
||||
(directories
|
||||
(append
|
||||
(home-git-annex-assistant-configuration-directories config)
|
||||
directories)))))
|
||||
(description
|
||||
"Run the git-annex assistant daemon on a list of directories.")))
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 Giacomo Leidi <therewasa@fishinthecalculator.me>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify
|
||||
;;; it under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation, either version 3 of the License, or
|
||||
;;; (at your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful,
|
||||
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
(define-module (gnu home services gnome)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (gnu packages admin)
|
||||
#:use-module (gnu packages gnome)
|
||||
#:use-module (gnu system accounts)
|
||||
#:use-module (gnu services configuration)
|
||||
#:use-module (gnu home services)
|
||||
#:use-module (gnu home services shepherd)
|
||||
#:export (gcr-ssh-agent-configuration
|
||||
gcr-ssh-agent-configuration?
|
||||
gcr-ssh-agent-configuration-fields
|
||||
gcr-ssh-agent-configuration-package
|
||||
gcr-ssh-agent-configuration-log-file
|
||||
|
||||
home-gcr-ssh-agent-log-file
|
||||
home-gcr-ssh-agent-shepherd-service
|
||||
|
||||
home-gcr-ssh-agent-service-type))
|
||||
|
||||
(define-maybe/no-serialization string)
|
||||
|
||||
(define-configuration/no-serialization gcr-ssh-agent-configuration
|
||||
(package
|
||||
(package gcr)
|
||||
"The @code{gcr} package to use.")
|
||||
(log-file
|
||||
(maybe-string)
|
||||
"Where the service will write its logs. If unset, it defaults to
|
||||
@file{$HOME/.local/state/shepherd/gcr-ssh-agent.log}."))
|
||||
|
||||
(define (home-gcr-ssh-agent-log-file config)
|
||||
(define maybe-log-file (gcr-ssh-agent-configuration-log-file config))
|
||||
(if (maybe-value-set? maybe-log-file)
|
||||
maybe-log-file
|
||||
#~(string-append %user-log-dir "/gcr-ssh-agent.log")))
|
||||
|
||||
(define (home-gcr-ssh-agent-shepherd-service config)
|
||||
(let ((package
|
||||
(gcr-ssh-agent-configuration-package config))
|
||||
(log-file (home-gcr-ssh-agent-log-file config)))
|
||||
(list
|
||||
(shepherd-service
|
||||
(provision '(gcr-ssh-agent ssh-agent))
|
||||
(modules
|
||||
;;for '%user-log-dir' and '%user-runtime-dir'
|
||||
'((shepherd support)))
|
||||
(start
|
||||
#~(let* ((socket-directory
|
||||
(string-append %user-runtime-dir
|
||||
"/gcr"))
|
||||
(socket-endpoint
|
||||
(endpoint
|
||||
(make-socket-address
|
||||
AF_UNIX
|
||||
(string-append socket-directory "/ssh"))
|
||||
#:name "ssh"
|
||||
#:socket-directory-permissions #o700)))
|
||||
(make-systemd-constructor
|
||||
(list #$(file-append package
|
||||
"/libexec/gcr-ssh-agent")
|
||||
"-d" socket-directory)
|
||||
(list socket-endpoint)
|
||||
;; With #:lazy-start #t the first ssh connection
|
||||
;; hangs indefinitely.
|
||||
#:lazy-start? #f
|
||||
#:log-file #$log-file)))
|
||||
(stop #~(make-systemd-destructor))))))
|
||||
|
||||
(define (home-gcr-ssh-agent-environment-variables config)
|
||||
`(("SSH_AUTH_SOCK" . "${XDG_RUNTIME_DIR}/gcr/ssh")))
|
||||
|
||||
(define home-gcr-ssh-agent-service-type
|
||||
(service-type
|
||||
(name 'home-gcr-ssh-agent)
|
||||
(extensions
|
||||
(list (service-extension
|
||||
home-shepherd-service-type
|
||||
home-gcr-ssh-agent-shepherd-service)
|
||||
(service-extension home-environment-variables-service-type
|
||||
home-gcr-ssh-agent-environment-variables)))
|
||||
(default-value (gcr-ssh-agent-configuration))
|
||||
(description
|
||||
"Provides @code{gcr-ssh-agent} Shepherd service and installs
|
||||
@code{gcr} in the system profile.")))
|
||||
@@ -23,7 +23,6 @@
|
||||
#:use-module (gnu packages freedesktop)
|
||||
#:use-module (gnu packages glib)
|
||||
#:use-module (gnu packages gnome)
|
||||
#:use-module (gnu packages xorg)
|
||||
#:use-module (gnu packages wm)
|
||||
#:use-module (gnu services)
|
||||
#:use-module (gnu services shepherd)
|
||||
@@ -72,8 +71,7 @@ environment variables set for a Wayland desktop session."
|
||||
niri
|
||||
xdg-desktop-portal
|
||||
xdg-desktop-portal-gnome
|
||||
xdg-desktop-portal-gtk
|
||||
xwayland-satellite)))))
|
||||
xdg-desktop-portal-gtk)))))
|
||||
(description "Install and configure Niri, a scrollable tiling Wayland
|
||||
compositor. This service starts Niri as a user-level desktop session with
|
||||
proper environment variables set for Wayland compatibility. It ensures Niri
|
||||
|
||||
@@ -1,221 +0,0 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2025 Lilah Tascheter <lilah@lunabee.space>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
;;; GNU Guix is free software; you can redistribute it and/or modify it
|
||||
;;; under the terms of the GNU General Public License as published by
|
||||
;;; the Free Software Foundation; either version 3 of the License, or (at
|
||||
;;; your option) any later version.
|
||||
;;;
|
||||
;;; GNU Guix is distributed in the hope that it will be useful, but
|
||||
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;;; GNU General Public License for more details.
|
||||
;;;
|
||||
;;; You should have received a copy of the GNU General Public License
|
||||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(define-module (gnu home services secrets)
|
||||
#:use-module (gnu home services)
|
||||
#:use-module (gnu home services shepherd)
|
||||
#:use-module (gnu packages password-utils)
|
||||
#:use-module (gnu services)
|
||||
#:use-module (gnu services configuration)
|
||||
#:use-module (gnu services shepherd)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:export (wrap-himitsu-prompter
|
||||
home-himitsu-configuration
|
||||
home-himitsu-service-type
|
||||
|
||||
home-himitsu-ssh-configuration
|
||||
home-himitsu-ssh-service-type
|
||||
|
||||
home-himitsu-secret-service-configuration
|
||||
home-himitsu-secret-service-type))
|
||||
|
||||
;;
|
||||
;; himitsu
|
||||
;;
|
||||
|
||||
(define (wrap-himitsu-prompter prompter)
|
||||
"Wraps a prompter to autodetect DISPLAY and WAYLAND_DISPLAY, necessary since
|
||||
shepherd typically starts before a graphical session."
|
||||
(program-file "himitsu-wrapped-prompter"
|
||||
#~(begin (use-modules (ice-9 ftw) (ice-9 match) (srfi srfi-26))
|
||||
(unless (or (getenv "DISPLAY") (getenv "WAYLAND_DISPLAY"))
|
||||
(for-each (lambda (dir pat cont)
|
||||
(match (scandir dir (cut regexp-exec pat <>) string<?)
|
||||
((file . _) (cont file)) (_ #f)))
|
||||
(list "/tmp/.X11-unix" (or (getenv "XDG_RUNTIME_DIR")
|
||||
(string-append "/run/user/" (getuid))))
|
||||
(map make-regexp '("^X[0-9]+$" "^wayland-[0-9]+$"))
|
||||
(list (lambda (f)
|
||||
(setenv "DISPLAY" (string-append ":" (string-drop f 1))))
|
||||
(cut setenv "WAYLAND_DISPLAY" <>))))
|
||||
(apply execl #$prompter #$prompter (cdr (command-line))))))
|
||||
|
||||
(define-maybe string (prefix himitsu-))
|
||||
|
||||
(define (string-or-gexp? s)
|
||||
(or (string? s) (gexp? s)))
|
||||
|
||||
(define list-of-strings-or-gexps? (list-of string-or-gexp?))
|
||||
|
||||
(define (himitsu-serialize-string label val)
|
||||
#~(format #f "~a=~a~%" '#$label #$val))
|
||||
|
||||
(define himitsu-serialize-file-like himitsu-serialize-string)
|
||||
|
||||
(define (himitsu-serialize-list-of-strings-or-gexps label vals)
|
||||
#~(string-join (list #$@vals) "\n" 'suffix))
|
||||
|
||||
(define-configuration home-himitsu-configuration
|
||||
(package (file-like himitsu) "himitsu package to use." empty-serializer)
|
||||
(notify-reuse maybe-string "Command run to notify the user upon use of a
|
||||
secret it was already authorized to use. Limited shell expansion available.")
|
||||
(prompter (file-like (wrap-himitsu-prompter
|
||||
(file-append hiprompt-gtk "/bin/hiprompt-gtk")))
|
||||
"himitsu prompter to use to request user authorization for secret access.")
|
||||
(extra-options (list-of-strings-or-gexps '()) "A list of extra options, one
|
||||
per line, to put verbatim into the config file.")
|
||||
(prefix himitsu-))
|
||||
|
||||
(define (himitsu-serialize config)
|
||||
(mixed-text-file "himitsu.ini" "[himitsud]\n"
|
||||
(serialize-configuration config home-himitsu-configuration-fields)))
|
||||
|
||||
(define (himitsu-shepherd-service config)
|
||||
(define start
|
||||
#~(lambda _
|
||||
(let ((data (or (getenv "XDG_DATA_HOME")
|
||||
(string-append user-homedir "/.local/share"))))
|
||||
(if (directory-exists? (string-append data "/himitsu"))
|
||||
(fork+exec-command
|
||||
(list #$(let ((pkg (home-himitsu-configuration-package config)))
|
||||
(file-append pkg "/bin/himitsud"))
|
||||
"-C" #$(himitsu-serialize config))
|
||||
#:log-file (string-append %user-log-dir "/himitsu.log"))
|
||||
(error "Himitsu store must exist before the service can run! Try \
|
||||
running 'himitsu-store -i' first?")))))
|
||||
(list (shepherd-service
|
||||
(documentation "Run the Himitsu secret service manager.")
|
||||
(provision '(himitsud))
|
||||
(modules (cons* '(shepherd support) %default-modules))
|
||||
(start start)
|
||||
(stop #~(make-kill-destructor)))))
|
||||
|
||||
;; we need to install the file or else himitsu-store will gen it
|
||||
(define (himitsu-xdg-configuration-service config)
|
||||
`(("himitsu/config.ini" ,(himitsu-serialize config))))
|
||||
|
||||
(define home-himitsu-service-type
|
||||
(service-type
|
||||
(name 'himitsu)
|
||||
(extensions
|
||||
(list (service-extension home-shepherd-service-type
|
||||
himitsu-shepherd-service)
|
||||
(service-extension home-xdg-configuration-files-service-type
|
||||
himitsu-xdg-configuration-service)
|
||||
(service-extension home-profile-service-type
|
||||
(const (list himitsu)))))
|
||||
(compose concatenate)
|
||||
(extend (lambda (config exts)
|
||||
(let ((opts (home-himitsu-configuration-extra-options config)))
|
||||
(home-himitsu-configuration
|
||||
(inherit config)
|
||||
(extra-options (append exts opts))))))
|
||||
(default-value (home-himitsu-configuration))
|
||||
(description "Run the Himitsu secret storage manager upon login. You
|
||||
should create the Himitsu database in advance.")))
|
||||
|
||||
;;
|
||||
;; himitsu-ssh
|
||||
;;
|
||||
|
||||
(define (remember-option? opt)
|
||||
(or (number? opt) (memq opt '(session skip refuse))))
|
||||
|
||||
(define list-of-remember-options? (list-of remember-option?))
|
||||
|
||||
(define (himitsu-serialize-list-of-remember-options label val)
|
||||
(himitsu-serialize-string label
|
||||
(string-join (map (lambda (x) (cond ((number? x) (number->string x))
|
||||
((symbol? x) (symbol->string x))))
|
||||
val)
|
||||
",")))
|
||||
|
||||
(define-configuration home-himitsu-ssh-configuration
|
||||
(package (file-like himitsu-ssh) "himitsu-ssh package to use."
|
||||
empty-serializer)
|
||||
(persist (list-of-remember-options '(session 300 refuse)) "List of options
|
||||
given when prompting to allow himitsu-ssh to see your keys. The option chosen
|
||||
decides how long himitsu-ssh has this access. Options can be either 'session,
|
||||
'refuse, 'skip, or a timeout in seconds. 'session means until the daemon
|
||||
closes, 'refuse to decline and never ask again, and 'skip means to ask again
|
||||
next use.")
|
||||
(disclose (list-of-remember-options '(skip session 300)) "List of options
|
||||
given when prompting to allow himitsu-ssh use of your keys. The format is the
|
||||
same has persist.")
|
||||
(prefix himitsu-))
|
||||
|
||||
(define (himitsu-ssh-shepherd-service config)
|
||||
(let* ((package (home-himitsu-ssh-configuration-package config))
|
||||
(binary (file-append package "/bin/hissh-agent")))
|
||||
(list (shepherd-service
|
||||
(documentation "Start the Himitsu ssh-agent implementation.")
|
||||
(provision '(himitsu-ssh ssh-agent))
|
||||
(requirement '(himitsud))
|
||||
(start #~(make-forkexec-constructor (list #$binary)))
|
||||
(stop #~(make-kill-destructor))))))
|
||||
|
||||
(define (himitsu-ssh-himitsu.ini config)
|
||||
(list "[ssh.remember]"
|
||||
(serialize-configuration config home-himitsu-ssh-configuration-fields)))
|
||||
|
||||
(define (himitsu-ssh-environment-variables _)
|
||||
'(("SSH_AUTH_SOCK" . "${XDG_RUNTIME_DIR:-/run/user/$UID}/hissh-agent")))
|
||||
|
||||
(define home-himitsu-ssh-service-type
|
||||
(service-type
|
||||
(name 'himitsu-ssh)
|
||||
(extensions (list (service-extension home-shepherd-service-type
|
||||
himitsu-ssh-shepherd-service)
|
||||
(service-extension home-himitsu-service-type
|
||||
himitsu-ssh-himitsu.ini)
|
||||
(service-extension home-environment-variables-service-type
|
||||
himitsu-ssh-environment-variables)
|
||||
(service-extension home-profile-service-type
|
||||
(const (list himitsu-ssh)))))
|
||||
(default-value (home-himitsu-ssh-configuration))
|
||||
(description "Add support for ssh to store keys in Himitsu.")))
|
||||
|
||||
;;
|
||||
;; himitsu-secret-service
|
||||
;;
|
||||
|
||||
(define-configuration home-himitsu-secret-service-configuration
|
||||
(package (file-like himitsu-secret-service) "himitsu-secret-service package to
|
||||
use." empty-serializer)
|
||||
(prefix himitsu-))
|
||||
|
||||
(define (himitsu-secret-service-shepherd-service config)
|
||||
(let* ((package (home-himitsu-secret-service-configuration-package config))
|
||||
(binary (file-append package "/bin/hisecrets-agent")))
|
||||
(list (shepherd-service
|
||||
(documentation "Start the Himitsu secret-service implementation.")
|
||||
(provision '(himitsu-secret-service secret-service))
|
||||
(requirement '(himitsud dbus))
|
||||
(start #~(make-forkexec-constructor (list #$binary)))
|
||||
(stop #~(make-kill-destructor))))))
|
||||
|
||||
(define home-himitsu-secret-service-type
|
||||
(service-type
|
||||
(name 'himitsu-secret-service)
|
||||
(extensions
|
||||
(list (service-extension home-shepherd-service-type
|
||||
himitsu-secret-service-shepherd-service)))
|
||||
(default-value (home-himitsu-secret-service-configuration))
|
||||
(description "Add support to Himitsu for the freedesktop.org
|
||||
secret-service protocol.")))
|
||||
@@ -2,7 +2,6 @@
|
||||
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
|
||||
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
|
||||
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;; Copyright © 2025 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -122,9 +121,6 @@ service type can be extended with a list of file-like objects.")))
|
||||
(define (serialize-posix-env-vars field-name val)
|
||||
(environment-variable-shell-definitions val))
|
||||
|
||||
(define (serialize-shell-variables field value)
|
||||
(shell-variable-definitions value))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Zsh.
|
||||
@@ -351,13 +347,6 @@ rules for the @code{home-environment-variables-service-type} apply
|
||||
here (@pxref{Essential Home Services}). The contents of this field will be
|
||||
added after the contents of the @code{bash-profile} field."
|
||||
(serializer serialize-posix-env-vars))
|
||||
(variables
|
||||
(alist '())
|
||||
"Bash variables (not to be confused with environment variables) to be set
|
||||
in @file{.bashrc} for use by interactive shells. A typical example of such
|
||||
variables is @code{HISTSIZE} and related history variables (@pxref{Bash
|
||||
Variables,,, bash, Bash Reference Manual})."
|
||||
(serializer serialize-shell-variables))
|
||||
(aliases
|
||||
(alist %default-bash-aliases)
|
||||
"Association list of aliases to set for the Bash session. The aliases will be
|
||||
@@ -436,12 +425,10 @@ if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
|
||||
|
||||
,@(list (file-if-not-empty
|
||||
'bashrc
|
||||
(let ((user-settings (list (serialize-field 'variables) "\n"
|
||||
(serialize-field 'aliases))))
|
||||
(if (home-bash-configuration-guix-defaults? config)
|
||||
(cons* (plain-file-content %default-bashrc) "\n"
|
||||
user-settings)
|
||||
user-settings)))
|
||||
(if (home-bash-configuration-guix-defaults? config)
|
||||
(list (plain-file-content %default-bashrc) "\n"
|
||||
(serialize-field 'aliases))
|
||||
(list (serialize-field 'aliases))))
|
||||
(file-if-not-empty 'bash-logout)))))
|
||||
|
||||
(define (add-bash-packages config)
|
||||
@@ -453,10 +440,6 @@ if [ -f ~/.bashrc ]; then source ~/.bashrc; fi
|
||||
"Additional environment variables to set. These will be combined with the
|
||||
environment variables from other extensions and the base service to form one
|
||||
coherent block of environment variables.")
|
||||
(variables
|
||||
(alist '())
|
||||
"Extra Bash variables (not to be confused with environment variables) to be
|
||||
set in @file{.bashrc} for use by interactive shells.")
|
||||
(aliases
|
||||
(alist '())
|
||||
"Additional aliases to set. These will be combined with the aliases from
|
||||
@@ -476,17 +459,13 @@ with text blocks from other extensions and the base service."))
|
||||
|
||||
(define (home-bash-extensions original-config extension-configs)
|
||||
(match-record original-config <home-bash-configuration>
|
||||
(environment-variables variables aliases bash-profile bashrc bash-logout)
|
||||
(environment-variables aliases bash-profile bashrc bash-logout)
|
||||
(home-bash-configuration
|
||||
(inherit original-config)
|
||||
(environment-variables
|
||||
(append environment-variables
|
||||
(append-map
|
||||
home-bash-extension-environment-variables extension-configs)))
|
||||
(variables
|
||||
(append variables
|
||||
(append-map
|
||||
home-bash-extension-variables extension-configs)))
|
||||
(aliases
|
||||
(append aliases
|
||||
(append-map
|
||||
|
||||
@@ -95,10 +95,6 @@ PulseAudio clients to use PipeWire transparently.")
|
||||
(list (home-pipewire-pulseaudio-shepherd-service config))
|
||||
'())))
|
||||
|
||||
(define (home-pipewire-profile-service config)
|
||||
(list (home-pipewire-configuration-pipewire config)
|
||||
(home-pipewire-configuration-wireplumber config)))
|
||||
|
||||
(define (home-pipewire-asoundrc config)
|
||||
(match-record config <home-pipewire-configuration>
|
||||
(pipewire extra-content)
|
||||
@@ -130,8 +126,6 @@ PulseAudio clients to use PipeWire transparently.")
|
||||
(extensions
|
||||
(list (service-extension home-shepherd-service-type
|
||||
home-pipewire-shepherd-services)
|
||||
(service-extension home-profile-service-type
|
||||
home-pipewire-profile-service)
|
||||
(service-extension home-xdg-configuration-files-service-type
|
||||
home-pipewire-xdg-configuration)))
|
||||
(description
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2023 Nicolas Graves <ngraves@ngraves.fr>
|
||||
;;; Copyright © 2023 Efraim Flashner <efraim@flashner.co.il>
|
||||
;;; Copyright © 2026 Oleg Pykhalov <go.wigust@gmail.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -312,8 +311,6 @@ through before connecting to the server.")
|
||||
(default #f))
|
||||
(known-hosts home-openssh-configuration-known-hosts ;unspec | list of file-like
|
||||
(default *unspecified*))
|
||||
(known-hosts2 home-openssh-configuration-known-hosts2 ;unspec | list of file-like
|
||||
(default *unspecified*))
|
||||
(hosts home-openssh-configuration-hosts ;list of <openssh-host>
|
||||
(default '()))
|
||||
(add-keys-to-agent home-openssh-configuration-add-keys-to-agent ;string with limited values
|
||||
@@ -379,7 +376,6 @@ inserted after each of them."
|
||||
(let* ((ssh-config (plain-file "ssh.conf"
|
||||
(openssh-configuration->string config)))
|
||||
(known-hosts (home-openssh-configuration-known-hosts config))
|
||||
(known-hosts2 (home-openssh-configuration-known-hosts2 config))
|
||||
(authorized-keys (home-openssh-configuration-authorized-keys config))
|
||||
(authorized-keys (and
|
||||
authorized-keys
|
||||
@@ -391,10 +387,6 @@ inserted after each of them."
|
||||
'()
|
||||
`((".ssh/known_hosts"
|
||||
,(file-join "known_hosts" known-hosts "\n"))))
|
||||
,@(if (unspecified? known-hosts2)
|
||||
'()
|
||||
`((".ssh/known_hosts2"
|
||||
,(file-join "known_hosts2" known-hosts2 "\n"))))
|
||||
(".ssh/config" ,ssh-config))))
|
||||
|
||||
(define openssh-activation
|
||||
|
||||
@@ -102,6 +102,17 @@
|
||||
;; Convenient value to inherit for extensions.
|
||||
%empty-sway-configuration))
|
||||
|
||||
;; Helper function.
|
||||
(define (flatmap f l)
|
||||
(let loop ((lst (reverse l)) (acc '()))
|
||||
(match lst
|
||||
(() acc)
|
||||
((head . tail)
|
||||
(let* ((h (f head))
|
||||
(acc (append h acc)))
|
||||
(loop tail acc))))))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Definition of configurations.
|
||||
;;;
|
||||
@@ -118,6 +129,9 @@
|
||||
(define (list-of-string-ish? lst)
|
||||
(every string-ish? lst))
|
||||
|
||||
(define (list-of-packages? lst)
|
||||
(every package? lst))
|
||||
|
||||
(define (bar-position? p)
|
||||
(member p '(top bottom)))
|
||||
|
||||
@@ -882,13 +896,13 @@
|
||||
|
||||
;; Outputs.
|
||||
#$@(with-heading "Outputs."
|
||||
(append-map serialize-output
|
||||
(sway-configuration-outputs conf)))
|
||||
(flatmap serialize-output
|
||||
(sway-configuration-outputs conf)))
|
||||
|
||||
;; Inputs.
|
||||
#$@(with-heading "Inputs."
|
||||
(append-map serialize-input
|
||||
(sway-configuration-inputs conf)))
|
||||
(flatmap serialize-input
|
||||
(sway-configuration-inputs conf)))
|
||||
|
||||
;; Bar configuration:
|
||||
;; If the bar is unset, do not include anything.
|
||||
@@ -908,8 +922,8 @@
|
||||
|
||||
;; Modes.
|
||||
#$@(with-heading "Modes."
|
||||
(append-map serialize-mode
|
||||
(sway-configuration-modes conf)))
|
||||
(flatmap serialize-mode
|
||||
(sway-configuration-modes conf)))
|
||||
|
||||
;; Startup-Programs.
|
||||
#$@(with-heading
|
||||
|
||||
@@ -103,21 +103,10 @@ subdirectory from XDG_CONFIG_HOME to generate a target path."
|
||||
(define backup
|
||||
(string-append backup-directory "/" (preprocess-file file)))
|
||||
|
||||
(define (copy-file* oldfile newfile)
|
||||
"Like 'copy-file', but also copies dangling symlinks."
|
||||
(catch 'system-error
|
||||
(lambda ()
|
||||
(copy-file oldfile newfile))
|
||||
(lambda args
|
||||
(if (and (eq? 'symlink (stat:type (lstat oldfile)))
|
||||
(= ENOENT (system-error-errno args)))
|
||||
(symlink (readlink oldfile) newfile)
|
||||
(apply throw args)))))
|
||||
|
||||
(mkdir-p backup-directory)
|
||||
(format #t (G_ "Backing up ~a...") (target-file file))
|
||||
(mkdir-p (dirname backup))
|
||||
(copy-file* (target-file file) backup)
|
||||
(copy-file (target-file file) backup)
|
||||
(delete-file (target-file file))
|
||||
(display (G_ " done\n")))
|
||||
|
||||
|
||||
@@ -108,11 +108,10 @@ like sockets.")
|
||||
@file{/var/log}, but for user. It is not a part of XDG Base Directory
|
||||
Specification, but helps to make implementation of home services more
|
||||
consistent."
|
||||
(serializer
|
||||
(lambda (field-name val)
|
||||
(when (maybe-value-set? val)
|
||||
(warn-about-deprecation field-name #f #:replacement 'state-home))
|
||||
(serialize-path field-name val))))
|
||||
(lambda (field-name val)
|
||||
(when (maybe-value-set? val)
|
||||
(warn-about-deprecation field-name #f #:replacement 'state-home))
|
||||
(serialize-path field-name val)))
|
||||
(state-home
|
||||
(path "$HOME/.local/state")
|
||||
"Base directory for programs to store state data that should persist
|
||||
|
||||
+7
-6
@@ -367,13 +367,14 @@ purposes."
|
||||
'unknown)
|
||||
((channels ...)
|
||||
(map (lambda (channel)
|
||||
;; NOTE: URL is not logged to synchronize the derivations
|
||||
;; coming out of pre-inst-env, time-machine and Cuirass
|
||||
;; for generating release artifacts.
|
||||
`(channel ,(channel-name channel) ,(channel-commit channel)))
|
||||
(let* ((uri (string->uri (channel-url channel)))
|
||||
(url (if (or (not uri) (eq? 'file (uri-scheme uri)))
|
||||
"local checkout"
|
||||
(channel-url channel))))
|
||||
`(channel ,(channel-name channel) ,url ,(channel-commit channel))))
|
||||
channels))))
|
||||
|
||||
(define* (installer-program #:key dry-run? (guix-for-installer (current-guix)))
|
||||
(define* (installer-program #:key dry-run?)
|
||||
"Return a file-like object that runs the given INSTALLER."
|
||||
(define init-gettext
|
||||
;; Initialize gettext support, so that installer messages can be
|
||||
@@ -422,7 +423,7 @@ purposes."
|
||||
guile-gnutls
|
||||
guile-zlib ;for (gnu build linux-modules)
|
||||
guile-zstd ;for (gnu build linux-modules)
|
||||
guix-for-installer)
|
||||
(current-guix))
|
||||
(with-imported-modules `(,@(source-module-closure
|
||||
`(,@modules
|
||||
(gnu services herd)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
;;; Copyright © 2019, 2020, 2022 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2024,2026 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -168,10 +168,8 @@ or #f. Return #t on success and #f on failure."
|
||||
(const '())))
|
||||
(install-command (append `( "guix" "system" "init"
|
||||
"--fallback"
|
||||
,@(if (%current-target-system)
|
||||
`(,(string-append
|
||||
"--target="
|
||||
(%current-target-system)))
|
||||
,@(if (target-hurd?)
|
||||
'("--target=i586-pc-gnu")
|
||||
'()))
|
||||
options
|
||||
(list (%installer-configuration-file)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2024, 2026 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -27,8 +27,7 @@
|
||||
str)
|
||||
|
||||
(define (kernel->configuration kernel dry-run?)
|
||||
(if (and (string? kernel)
|
||||
(string-prefix? "Hurd" kernel))
|
||||
(if (equal? kernel "Hurd")
|
||||
`((kernel %hurd-default-operating-system-kernel)
|
||||
,(comment (G_ ";; \"noide\" disables the gnumach IDE driver, enabling rumpdisk.\n"))
|
||||
(kernel-arguments '("noide"))
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2024, 2026 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -23,48 +23,23 @@
|
||||
#:export (run-kernel-page))
|
||||
|
||||
(define (run-kernel-page)
|
||||
;; TRANSLATORS: "Hurd" is a proper noun and must not be translated.
|
||||
(let* ((hurd-x86 (G_ "Hurd 32-bit (experimental)"))
|
||||
(hurd-x86_64 (G_ "Hurd 64-bit (highly experimental!)"))
|
||||
(linux-libre "Linux Libre")
|
||||
(kernels (parameterize ((%current-target-system #f))
|
||||
`(,linux-libre
|
||||
,@(cond ((target-x86-64?)
|
||||
(list hurd-x86 hurd-x86_64))
|
||||
((target-x86?)
|
||||
(list hurd-x86))
|
||||
(else
|
||||
'())))))
|
||||
(default (cond ((equal? (%current-target-system) "i586-pc-gnu")
|
||||
hurd-x86)
|
||||
((equal? (%current-target-system) "x86_64-pc-gnu")
|
||||
hurd-x86_64)
|
||||
(else
|
||||
linux-libre)))
|
||||
(let* ((kernels `(,@(if (target-x86?) '("Hurd") '())
|
||||
"Linux Libre"))
|
||||
(result
|
||||
(run-listbox-selection-page
|
||||
#:title (G_ "Kernel")
|
||||
#:info-text
|
||||
;; TRANSLATORS: "Hurd" is a proper noun and must not be translated.
|
||||
;; TRANSLATORS: "Linux Libre" is a literal and must not be translated.
|
||||
(G_ "Please select a kernel. When in doubt, choose \"Linux Libre\".
|
||||
|
||||
The Hurd is offered as a technology preview and development aid; many packages \
|
||||
are not yet available in Guix, such as a desktop environment or even a \
|
||||
windowing system (X, Wayland).")
|
||||
are not yet available in Guix, such as a desktop environment or even a windowing \
|
||||
system (X, Wayland).")
|
||||
#:listbox-items kernels
|
||||
#:listbox-item->text identity
|
||||
#:listbox-default-item default
|
||||
#:sort-listbox-items? #f ;keep Linux first
|
||||
#:listbox-default-item "Linux Libre"
|
||||
#:button-text (G_ "Back")
|
||||
#:button-callback-procedure
|
||||
(lambda _
|
||||
(abort-to-prompt 'installer-step 'abort)))))
|
||||
(let ((target (cond ((equal? result hurd-x86)
|
||||
"i586-pc-gnu")
|
||||
((equal? result hurd-x86_64)
|
||||
"x86_64-pc-gnu")
|
||||
(else
|
||||
#f))))
|
||||
(%current-target-system target))
|
||||
(when (equal? result "Hurd")
|
||||
(%current-target-system "i586-pc-gnu"))
|
||||
result))
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
#:use-module (guix i18n)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-11)
|
||||
#:use-module (srfi srfi-26)
|
||||
#:use-module (srfi srfi-34)
|
||||
#:use-module (srfi srfi-35)
|
||||
#:use-module (ice-9 match)
|
||||
@@ -113,41 +112,29 @@ network devices were found. Do you want to continue anyway?"))
|
||||
full-value
|
||||
(+ value 1)))))))
|
||||
|
||||
(define* (url-alive? url #:key (ensure-ok-status? #f))
|
||||
(false-if-exception
|
||||
(let ((response (http-request url)))
|
||||
(or (not ensure-ok-status?)
|
||||
(= (response-code response)
|
||||
200)))))
|
||||
|
||||
(define* (common-urls-alive? urls #:key (ensure-ok-status? #f))
|
||||
"Return #t if at least some of the given URLS are alive,
|
||||
meaning that they do respond to a HTTP request. If ENSURE-OK-STATUS? is
|
||||
#t, return #t only if the code is 200."
|
||||
(dynamic-wind
|
||||
(lambda ()
|
||||
(sigaction SIGALRM
|
||||
(lambda _ #f))
|
||||
(alarm 3))
|
||||
(lambda ()
|
||||
(any (cut url-alive? <> #:ensure-ok-status? ensure-ok-status?)
|
||||
urls))
|
||||
(lambda ()
|
||||
(alarm 0))))
|
||||
|
||||
(define (wait-service-online)
|
||||
"Display a newt scale until connman detects an Internet access. Do
|
||||
FULL-VALUE tentatives, spaced by 1 second."
|
||||
(define (url-alive? url)
|
||||
(false-if-exception
|
||||
(= (response-code (http-request url))
|
||||
200)))
|
||||
|
||||
(define (ci-available?)
|
||||
(dynamic-wind
|
||||
(lambda ()
|
||||
(sigaction SIGALRM
|
||||
(lambda _ #f))
|
||||
(alarm 3))
|
||||
(lambda ()
|
||||
(or (url-alive? "https://bordeaux.guix.gnu.org")
|
||||
(url-alive? "https://ci.guix.gnu.org")))
|
||||
(lambda ()
|
||||
(alarm 0))))
|
||||
|
||||
(define (online?)
|
||||
(or (and (connman-online?)
|
||||
(common-urls-alive?
|
||||
(list
|
||||
"https://bordeaux.guix.gnu.org"
|
||||
"https://ci.guix.gnu.org"
|
||||
"https://guix.gnu.org"
|
||||
"https://gnu.org")
|
||||
;; Any HTTP response means the users is online.
|
||||
#:ensure-ok-status? #f))
|
||||
(ci-available?))
|
||||
(file-exists? "/tmp/installer-assume-online")))
|
||||
|
||||
(let* ((full-value 5))
|
||||
@@ -162,48 +149,11 @@ FULL-VALUE tentatives, spaced by 1 second."
|
||||
full-value
|
||||
(+ value 1))))
|
||||
(unless (online?)
|
||||
(case (choice-window
|
||||
(G_ "Internet access")
|
||||
(G_ "Continue")
|
||||
(G_ "Try again?")
|
||||
(G_ "
|
||||
The selected network does not seem to provide access to the \
|
||||
Internet. The install process requires Internet access. \
|
||||
Do you want to continue anyway?"))
|
||||
((2) (abort-to-prompt 'installer-step 'abort))))))
|
||||
|
||||
(define (check-substitute-availability)
|
||||
"Check that at least one of the Guix substitute servers is available."
|
||||
(define (substitutes-available?)
|
||||
(or
|
||||
(file-exists? "/tmp/installer-assume-online")
|
||||
(common-urls-alive?
|
||||
(list
|
||||
"https://bordeaux.guix.gnu.org/nix-cache-info"
|
||||
"https://ci.guix.gnu.org/nix-cache-info")
|
||||
#:ensure-ok-status? #t)))
|
||||
|
||||
(let* ((full-value 5))
|
||||
(run-scale-page
|
||||
#:title (G_ "Checking substitutes")
|
||||
#:info-text (G_ "Checking if Guix substitutes are available...")
|
||||
#:scale-full-value full-value
|
||||
#:scale-update-proc
|
||||
(lambda (value)
|
||||
(sleep 1)
|
||||
(if (substitutes-available?)
|
||||
full-value
|
||||
(+ value 1))))
|
||||
(unless (substitutes-available?)
|
||||
(case (choice-window
|
||||
(G_ "Substitute availability")
|
||||
(G_ "Continue")
|
||||
(G_ "Try again?")
|
||||
(G_ "
|
||||
None of the Guix substitute servers are available.
|
||||
You can proceed with the install, but you will
|
||||
have to build most of the packages you install locally."))
|
||||
((2) (abort-to-prompt 'installer-step 'abort))))))
|
||||
(run-error-page
|
||||
(G_ "The selected network does not provide access to the \
|
||||
Internet and the Guix substitute server, please try again.")
|
||||
(G_ "Connection error"))
|
||||
(abort-to-prompt 'installer-step 'abort))))
|
||||
|
||||
(define (run-network-page)
|
||||
"Run a page to allow the user to configure connman so that it can access the
|
||||
@@ -242,11 +192,7 @@ Internet."
|
||||
(installer-step
|
||||
(id 'wait-online)
|
||||
(compute (lambda _
|
||||
(wait-service-online))))
|
||||
(installer-step
|
||||
(id 'check-substitutes)
|
||||
(compute (lambda _
|
||||
(check-substitute-availability))))))
|
||||
(wait-service-online))))))
|
||||
(run-installer-steps
|
||||
#:steps network-steps
|
||||
#:rewind-strategy 'start))
|
||||
|
||||
@@ -108,23 +108,20 @@ all data on disk will be lost, are you sure you want to proceed?") item)
|
||||
|
||||
(define (run-label-page button-text button-callback)
|
||||
"Run a page asking the user to select a partition table label."
|
||||
;; Force the GPT label if UEFI is supported.
|
||||
(cond ((efi-installation?)
|
||||
((run-label-confirmation-page button-callback) "gpt"))
|
||||
;; Force the MSDOS label on Hurd.
|
||||
((target-hurd?)
|
||||
((run-label-confirmation-page button-callback) "msdos"))
|
||||
(else (run-listbox-selection-page
|
||||
#:info-text (G_ "Select a new partition table type. \
|
||||
;; Force the GPT label if UEFI is supported.
|
||||
(if (efi-installation?)
|
||||
((run-label-confirmation-page button-callback) "gpt")
|
||||
(run-listbox-selection-page
|
||||
#:info-text (G_ "Select a new partition table type. \
|
||||
Be careful, all data on the disk will be lost.")
|
||||
#:title (G_ "Partition table")
|
||||
#:listbox-items '("msdos" "gpt")
|
||||
#:listbox-default-item (if (target-hurd?) "msdos" "gpt")
|
||||
#:listbox-item->text identity
|
||||
#:listbox-callback-procedure
|
||||
(run-label-confirmation-page button-callback)
|
||||
#:button-text button-text
|
||||
#:button-callback-procedure button-callback))))
|
||||
#:title (G_ "Partition table")
|
||||
#:listbox-items '("msdos" "gpt")
|
||||
#:listbox-default-item (if (target-hurd?) "msdos" "gpt")
|
||||
#:listbox-item->text identity
|
||||
#:listbox-callback-procedure
|
||||
(run-label-confirmation-page button-callback)
|
||||
#:button-text button-text
|
||||
#:button-callback-procedure button-callback)))
|
||||
|
||||
(define (run-type-page partition)
|
||||
"Run a page asking the user to select a partition type."
|
||||
|
||||
@@ -36,9 +36,11 @@
|
||||
environments."
|
||||
(let ((items (filter desktop-system-service? (%system-services))))
|
||||
(run-checkbox-tree-page
|
||||
#:info-text (G_ "Please select the desktop environment(s) you wish to \
|
||||
#:info-text (if (target-hurd?)
|
||||
(G_ "Currently, none of these is available for the Hurd.")
|
||||
(G_ "Please select the desktop environment(s) you wish to \
|
||||
install. If you select multiple desktop environments here, you will be able \
|
||||
to choose from them later when you log in.")
|
||||
to choose from them later when you log in."))
|
||||
#:title (G_ "Desktop environment")
|
||||
#:items items
|
||||
#:selection (map system-service-recommended? items)
|
||||
@@ -48,16 +50,6 @@ to choose from them later when you log in.")
|
||||
(lambda ()
|
||||
(abort-to-prompt 'installer-step 'abort)))))
|
||||
|
||||
;; FIXME: all platforms should support %desktop-services and some of the
|
||||
;; offered desktop environments. Instead of globally disabling the desktop
|
||||
;; page, disable only non-working desktop environments.
|
||||
(define (run-desktop-environments-cbt-page/maybe)
|
||||
"Run page with desktop environments, as long as the user is on
|
||||
a system that supports them."
|
||||
(if (or (target-hurd?) (target-x86-32?))
|
||||
'()
|
||||
(run-desktop-environments-cbt-page)))
|
||||
|
||||
(define (run-networking-cbt-page)
|
||||
"Run a page allowing the user to select networking services."
|
||||
(let ((items (filter (lambda (service)
|
||||
@@ -139,7 +131,7 @@ client may be enough for a server.")
|
||||
(abort-to-prompt 'installer-step 'abort)))))
|
||||
|
||||
(define (run-services-page)
|
||||
(let ((desktop (run-desktop-environments-cbt-page/maybe)))
|
||||
(let ((desktop (run-desktop-environments-cbt-page)))
|
||||
;; When the user did not select any desktop services, and thus didn't get
|
||||
;; '%desktop-services', offer network management services.
|
||||
(append desktop
|
||||
|
||||
@@ -233,12 +233,11 @@ force a wifi scan."
|
||||
(lambda ()
|
||||
(when (eq? exit-reason 'exit-component)
|
||||
(cond
|
||||
((components=? argument exit-button)
|
||||
(abort-to-prompt 'installer-step 'abort))
|
||||
((or (components=? argument scan-button)
|
||||
(null? service-items))
|
||||
((components=? argument scan-button)
|
||||
(run-wifi-scan-page)
|
||||
(run-wifi-page))
|
||||
((components=? argument exit-button)
|
||||
(abort-to-prompt 'installer-step 'abort))
|
||||
((components=? argument listbox)
|
||||
(let ((result (connect-wifi-service listbox service-items)))
|
||||
(unless result
|
||||
|
||||
+38
-53
@@ -5,8 +5,6 @@
|
||||
;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
|
||||
;;; Copyright © 2023 Denys Nykula <vegan@libre.net.ua>
|
||||
;;; Copyright © 2025 Florian Pelz <pelzflorian@pelzflorian.de>
|
||||
;;; Copyright © 2025 Fredrik Salomonsson <plattfot@posteo.net>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@@ -82,9 +80,6 @@
|
||||
(desktop-environment
|
||||
(name "MATE")
|
||||
(snippet '((service mate-desktop-service-type))))
|
||||
(desktop-environment
|
||||
(name "KDE Plasma")
|
||||
(snippet '((service plasma-desktop-service-type))))
|
||||
(desktop-environment
|
||||
(name "Icewm")
|
||||
(packages '((specification->package "icewm"))))
|
||||
@@ -108,11 +103,6 @@
|
||||
(packages '((specification->package "emacs")
|
||||
(specification->package "emacs-exwm")
|
||||
(specification->package "emacs-desktop-environment"))))
|
||||
(desktop-environment
|
||||
(name "Sway")
|
||||
(packages (map (lambda (package)
|
||||
`(specification->package ,package))
|
||||
'("sway" "wmenu" "foot"))))
|
||||
|
||||
;; Networking.
|
||||
(system-service
|
||||
@@ -195,21 +185,8 @@
|
||||
(define (system-services->configuration services)
|
||||
"Return the configuration field for SERVICES."
|
||||
(let* ((snippets (append-map system-service-snippet services))
|
||||
(packages (append-map system-service-packages services))
|
||||
(desktop? (find desktop-system-service? services))
|
||||
(packages
|
||||
(append (append-map system-service-packages services)
|
||||
(if desktop?
|
||||
(cons (comment (G_ ";; Fonts to cover all languages.\n"))
|
||||
(map (lambda (package)
|
||||
`(specification->package ,package))
|
||||
'("font-google-noto"
|
||||
"font-google-noto-emoji"
|
||||
;; FIXME: Selection of fonts depends on the
|
||||
;; locale. Use a monospaced CJK font with
|
||||
;; latin letters before there's proper fix.
|
||||
;; See <https://codeberg.org/guix/guix/pulls/5654#issuecomment-9928509>
|
||||
"font-sarasa-gothic")))
|
||||
'())))
|
||||
(base (if desktop?
|
||||
(if (target-hurd?)
|
||||
'%desktop-services/hurd
|
||||
@@ -217,11 +194,8 @@
|
||||
(if (target-hurd?)
|
||||
'%base-services/hurd
|
||||
'%base-services)))
|
||||
(native-console-font (match (false-if-exception
|
||||
(string-take (getenv "LANGUAGE") 2))
|
||||
((or "el" ;easier with more complete Greek font
|
||||
;; These need Cyrillic:
|
||||
"be" "bg" "kk" "ky"
|
||||
(native-console-font (match (getenv "LANGUAGE")
|
||||
((or "be" "bg" "el" "eo" "kk" "ky"
|
||||
"mk" "mn" "ru" "sr" "tg" "uk")
|
||||
"LatGrkCyr-8x16")
|
||||
(_ #f)))
|
||||
@@ -243,33 +217,44 @@
|
||||
;; under their own account: use 'guix search KEYWORD' to search
|
||||
;; for packages and 'guix install PACKAGE' to install a package.\n")))))
|
||||
|
||||
`(,@(if (null? packages)
|
||||
(if (target-hurd?)
|
||||
(if (null? snippets)
|
||||
`(,@(if (null? packages)
|
||||
(if (target-hurd?)
|
||||
`(,@package-heading
|
||||
(packages %base-packages/hurd))
|
||||
'())
|
||||
`(,@package-heading
|
||||
(packages %base-packages/hurd))
|
||||
'())
|
||||
`(,@package-heading
|
||||
(packages (append (list ,@packages)
|
||||
,(if (target-hurd?)
|
||||
'%base-packages/hurd
|
||||
'%base-packages)))))
|
||||
(packages (append (list ,@packages)
|
||||
,(if (target-hurd?)
|
||||
'%base-packages/hurd
|
||||
'%base-packages)))))
|
||||
|
||||
,@service-heading
|
||||
,(if (and (null? snippets)
|
||||
(not desktop?))
|
||||
`(services ,services)
|
||||
`(services
|
||||
(append (list ,@snippets
|
||||
,@service-heading
|
||||
(services ,services))
|
||||
`(,@(if (null? packages)
|
||||
(if (target-hurd?)
|
||||
`(,@package-heading
|
||||
(packages %base-packages/hurd))
|
||||
'())
|
||||
`(,@package-heading
|
||||
(packages (append (list ,@packages)
|
||||
,(if (target-hurd?)
|
||||
'%base-packages/hurd
|
||||
'%base-packages)))))
|
||||
|
||||
,@(if desktop?
|
||||
;; XXX: Assume 'keyboard-layout' is in scope.
|
||||
`((set-xorg-configuration
|
||||
(xorg-configuration
|
||||
(keyboard-layout keyboard-layout))))
|
||||
'()))
|
||||
,@service-heading
|
||||
(services (append (list ,@snippets
|
||||
|
||||
,(vertical-space 1)
|
||||
,(comment (G_ "\
|
||||
,@(if desktop?
|
||||
;; XXX: Assume 'keyboard-layout' is in
|
||||
;; scope.
|
||||
`((set-xorg-configuration
|
||||
(xorg-configuration
|
||||
(keyboard-layout keyboard-layout))))
|
||||
'()))
|
||||
|
||||
,(vertical-space 1)
|
||||
,(comment (G_ "\
|
||||
;; This is the default list of services we
|
||||
;; are appending to.\n"))
|
||||
,services))))))
|
||||
,services))))))
|
||||
|
||||
+137
-272
File diff suppressed because it is too large
Load Diff
@@ -152,7 +152,7 @@
|
||||
(operating-system
|
||||
(inherit os)
|
||||
(services
|
||||
(modify-services services
|
||||
(modify-services (operating-system-user-services os)
|
||||
(guix-service-type
|
||||
config => (guix-configuration
|
||||
(inherit config)
|
||||
@@ -651,7 +651,7 @@ fdisk -l /dev/sda"
|
||||
(format #f "#!/usr/bin/env bash
|
||||
set -eo pipefail
|
||||
apt-get update
|
||||
apt-get install cloud-initramfs-growroot uidmap --assume-yes"))
|
||||
apt-get install cloud-initramfs-growroot --assume-yes"))
|
||||
(format #t "successfully installed rescue system packages on '~a'\n" name)))
|
||||
|
||||
(define (hetzner-machine-delete machine server)
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
#:use-module (guix git-download)
|
||||
#:use-module (guix build-system gnu)
|
||||
#:use-module (guix build-system glib-or-gtk)
|
||||
#:use-module (guix build-system pyproject)
|
||||
#:use-module (guix build-system meson)
|
||||
#:use-module (gnu packages)
|
||||
#:use-module (gnu packages autotools)
|
||||
@@ -78,43 +77,36 @@
|
||||
(build-system glib-or-gtk-build-system)
|
||||
(outputs '("out" "bin"))
|
||||
(arguments
|
||||
(list
|
||||
#:tests? #f ; Tests require drivers
|
||||
#:configure-flags
|
||||
#~(list "CFLAGS=-g -O2 -Wno-error=incompatible-pointer-types"
|
||||
"--disable-static"
|
||||
"--enable-fake")
|
||||
#:phases
|
||||
#~(modify-phases %standard-phases
|
||||
#$@(if (this-package-native-input "config")
|
||||
#~((add-after 'unpack 'update-config-scripts
|
||||
(lambda* (#:key native-inputs inputs #:allow-other-keys)
|
||||
(for-each
|
||||
(lambda (dir)
|
||||
(for-each
|
||||
(lambda (file)
|
||||
(install-file
|
||||
(search-input-file
|
||||
(or native-inputs inputs)
|
||||
(string-append "/bin/" file)) dir))
|
||||
(list "config.guess" "config.sub")))
|
||||
(list "." "libltdl")))))
|
||||
(list)))))
|
||||
`(#:tests? #f ; Tests require drivers
|
||||
#:configure-flags
|
||||
(list "CFLAGS=-g -O2 -Wno-error=incompatible-pointer-types"
|
||||
"--disable-static"
|
||||
"--enable-fake")
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
,@(if (this-package-native-input "config")
|
||||
`((add-after 'unpack 'update-config-scripts
|
||||
(lambda* (#:key native-inputs inputs #:allow-other-keys)
|
||||
(for-each
|
||||
(lambda (dir)
|
||||
(for-each (lambda (file)
|
||||
(install-file
|
||||
(search-input-file
|
||||
(or native-inputs inputs)
|
||||
(string-append "/bin/" file)) dir))
|
||||
'("config.guess" "config.sub")))
|
||||
'("." "libltdl")))))
|
||||
'()))))
|
||||
(native-inputs
|
||||
(append
|
||||
(if (or (target-aarch64?)
|
||||
(target-ppc64le?)
|
||||
(target-riscv64?))
|
||||
(list config)
|
||||
(list))
|
||||
(list latex2html
|
||||
pkg-config
|
||||
python-wrapper
|
||||
swig-4.0)))
|
||||
(if (or (target-aarch64?)
|
||||
(target-ppc64le?)
|
||||
(target-riscv64?))
|
||||
(list config)
|
||||
'())
|
||||
(list latex2html pkg-config python-wrapper swig)))
|
||||
(inputs
|
||||
(list glib
|
||||
gtk+-2
|
||||
libusb-compat))
|
||||
(list glib gtk+-2 libusb-compat))
|
||||
(synopsis "Portable Braille Library")
|
||||
(description "Libbraille is a library to easily access Braille displays and
|
||||
terminals.")
|
||||
@@ -160,11 +152,11 @@ terminals.")
|
||||
"PYTHON_ROOT=/"
|
||||
(string-append "TCL_DIR=" #$output "/lib")
|
||||
"INSTALL_WRITABLE_DIRECTORY=no-thanks")
|
||||
#:imported-modules (append %glib-or-gtk-build-system-modules
|
||||
%pyproject-build-system-modules)
|
||||
#:imported-modules `((guix build python-build-system)
|
||||
,@%glib-or-gtk-build-system-modules)
|
||||
#:modules '((guix build utils)
|
||||
(guix build glib-or-gtk-build-system)
|
||||
((guix build pyproject-build-system) #:prefix python:))
|
||||
((guix build python-build-system) #:prefix python:))
|
||||
#:phases
|
||||
#~(modify-phases %standard-phases
|
||||
(add-after 'unpack 'fix-errors
|
||||
@@ -236,6 +228,50 @@ incorporated.")
|
||||
(home-page "https://brltty.app/")
|
||||
(license license:lgpl2.1+)))
|
||||
|
||||
(define-public florence
|
||||
(package
|
||||
(name "florence")
|
||||
(version "0.6.3")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (string-append "mirror://sourceforge/florence/florence/" version
|
||||
"/florence-" version ".tar.bz2"))
|
||||
(sha256
|
||||
(base32
|
||||
"07h9qm22krlwayhzvc391lr23vicw81s48g7rirvx1fj0zyr4aa2"))))
|
||||
(build-system glib-or-gtk-build-system)
|
||||
(arguments
|
||||
`(#:configure-flags (list "--with-xtst"
|
||||
"--without-docs"
|
||||
"--with-notification")))
|
||||
(inputs
|
||||
(list libxml2
|
||||
libglade
|
||||
(librsvg-for-system)
|
||||
gstreamer
|
||||
cairo
|
||||
gtk+
|
||||
libxtst
|
||||
libxcomposite
|
||||
libnotify))
|
||||
(native-inputs
|
||||
(list gettext-minimal intltool pkg-config))
|
||||
(home-page "https://florence.sourceforge.net/")
|
||||
(synopsis "Extensible, scalable virtual keyboard for X11")
|
||||
(description
|
||||
"Florence is an extensible scalable virtual keyboard for X11.
|
||||
It is useful for people who can't use a real hardware keyboard (for
|
||||
example for people with disabilities), but you must be able to use
|
||||
a pointing device (as a mouse, a trackball, a touchscreen or opengazer).
|
||||
|
||||
Florence stays out of your way when you don't need it: it appears on the
|
||||
screen only when you need it. A timer-based auto-click input method is
|
||||
available to help to click.")
|
||||
;; The documentation is under FDL1.2, but we do not install the
|
||||
;; documentation.
|
||||
(license license:gpl2+)))
|
||||
|
||||
(define-public footswitch
|
||||
(let ((commit "e455d6752221b9e9c3818cc304c873b9c2792490")
|
||||
(revision "0"))
|
||||
|
||||
+24
-22
@@ -30,13 +30,10 @@
|
||||
#:use-module (gnu packages check)
|
||||
#:use-module (gnu packages gettext)
|
||||
#:use-module (gnu packages perl)
|
||||
#:use-module (gnu packages python-build)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (guix download)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (gnu packages)
|
||||
#:use-module (guix build-system gnu)
|
||||
#:use-module (guix build-system pyproject)
|
||||
#:use-module (guix build-system python)
|
||||
#:use-module (guix utils))
|
||||
|
||||
@@ -98,28 +95,33 @@
|
||||
(define-public python-pylibacl
|
||||
(package
|
||||
(name "python-pylibacl")
|
||||
(version "0.7.3")
|
||||
(version "0.6.0")
|
||||
(source
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (pypi-uri "pylibacl" version))
|
||||
(sha256
|
||||
(base32 "08pr5cbipij3j591bihh72r5h14lyrspy24qwmfjsn0c1rcgp7wx"))))
|
||||
(build-system pyproject-build-system)
|
||||
(origin
|
||||
(method url-fetch)
|
||||
(uri (pypi-uri "pylibacl" version))
|
||||
(sha256
|
||||
(base32
|
||||
"1zyrk2m20p5b6bdwxhrwib273i6i71zyr5hzssbxfqis5qra9848"))))
|
||||
(build-system python-build-system)
|
||||
(arguments
|
||||
(list
|
||||
#:phases
|
||||
#~(modify-phases %standard-phases
|
||||
(add-after 'unpack 'disable-tests
|
||||
(lambda* (#:key outputs inputs #:allow-other-keys)
|
||||
;; These tests operate on real files, but our tmpfs does not support
|
||||
;; ACLs.
|
||||
(substitute* "tests/test_acls.py"
|
||||
(("( *)def test_applyto(_extended(_mixed)?)?" match indent)
|
||||
(string-append indent "@pytest.mark.skip(reason=\"guix\")\n"
|
||||
match))))))))
|
||||
`(#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-after 'unpack 'disable-tests
|
||||
(lambda* (#:key outputs inputs #:allow-other-keys)
|
||||
;; These tests operate on real files, but our tmpfs does not support
|
||||
;; ACLs.
|
||||
(substitute* "tests/test_acls.py"
|
||||
(("( *)def test_applyto(_extended(_mixed)?)?" match indent)
|
||||
(string-append indent "@pytest.mark.skip(reason=\"guix\")\n"
|
||||
match)))))
|
||||
(replace 'check
|
||||
(lambda* (#:key inputs outputs tests? #:allow-other-keys)
|
||||
(when tests?
|
||||
(add-installed-pythonpath inputs outputs)
|
||||
(invoke "pytest" "tests")))))))
|
||||
(inputs (list acl))
|
||||
(native-inputs (list python-pytest python-setuptools))
|
||||
(native-inputs (list python-pytest))
|
||||
(home-page "https://pylibacl.k1024.org/")
|
||||
(synopsis "POSIX.1e @acronym{ACLs, access control lists} for Python")
|
||||
(description
|
||||
|
||||
+201
-482
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user