aboutsummaryrefslogtreecommitdiff
-*- mode: org -*-

This is [[https://koszko.org/koszko.html][Wojtek]]'s Guix fork.  It serves as a home for personal modifications
and additions that for some reason aren't in upstream Guix.  These may include
package and service definitions, as well as changes to Guix itself.  You're
free to clone this repository and use it for your own needs.  But if you
choose to do so, please be ready to deal with some peculiarities.

- The tip this repository is intended to be frequently rebased on top of
  upstream Guix so expect ~git pull~ to complain.
- As a result of the rebasing approach, the ~--allow-downgrades~ flag has to
  be used when running ~guix pull~ or ~guix (system|home) reconfigure~.
- As another result of the rebasing approach, there's no PGP authorization (it
  would not be possible to provide it reliably).  The =.guix-authorizations=
  file is removed by one of the tip commits to remove the warning from ~guix
  pull~.
- If you don't know what all this means, this is probably not for you.  Try
  [[https://guix.gnu.org/][upstream Guix]] instead :)

Feel free to look into the ~koszko-scripts~ branch to see the scripts I am
using to maintain this thing.  Note they might prove pretty useless to you.

Wojtek's copyright to his changes to Guix is waived using [[https://creativecommons.org/publicdomain/zero/1.0/legalcode.en][CC0-1.0]].


* The original README introduction

[[https://www.gnu.org/software/guix/][GNU Guix]] (IPA: /ɡiːks/) is a purely functional package manager, and
associated free software distribution, for the [[https://www.gnu.org/gnu/gnu.html][GNU system]].  In addition
to standard package management features, Guix supports transactional
upgrades and roll-backs, unprivileged package management, per-user
profiles, and garbage collection.

It provides [[https://www.gnu.org/software/guile/][Guile]] Scheme APIs, including a high-level embedded
domain-specific languages (EDSLs) to describe how packages are to be
built and composed.

GNU Guix can be used on top of an already-installed GNU/Linux distribution, or
it can be used standalone (we call that “Guix System”).

Guix is based on the [[https://nixos.org/nix/][Nix]] package manager.


* Requirements

If you are building Guix from source, please see the manual for build
instructions and requirements, either by running:

  info -f doc/guix.info "Requirements"

or by checking the [[https://guix.gnu.org/manual/en/html_node/Requirements.html][web copy of the manual]].

* Installation

See the manual for the installation instructions, either by running

  info -f doc/guix.info "Installation"

or by checking the [[https://guix.gnu.org/manual/en/html_node/Installation.html][web copy of the manual]].

* Building from Git

For information on building Guix from a Git checkout, please see the relevant
section in the manual, either by running

  info -f doc/guix.info "Building from Git"

or by checking the [[https://guix.gnu.org/manual/en/html_node/Building-from-Git.html][web_copy of the manual]].

* How It Works

Guix does the high-level preparation of a /derivation/.  A derivation is
the promise of a build; it is stored as a text file under
=/gnu/store/xxx.drv=.  The (guix derivations) module provides the
`derivation' primitive, as well as higher-level wrappers such as
`build-expression->derivation'.

Guix does remote procedure calls (RPCs) to the build daemon (the =guix-daemon=
command), which in turn performs builds and accesses to the store on its
behalf.  The RPCs are implemented in the (guix store) module.

* Contact

GNU Guix is hosted at https://savannah.gnu.org/projects/guix/.

Please email <help-guix@gnu.org> for questions and <bug-guix@gnu.org> for bug
reports; email <gnu-system-discuss@gnu.org> for general issues regarding the
GNU system.

Join #guix on irc.libera.chat.

* Guix & Nix

GNU Guix is based on [[https://nixos.org/nix/][the Nix package manager]].  It implements the same
package deployment paradigm, and in fact it reuses some of its code.
Yet, different engineering decisions were made for Guix, as described
below.

Nix is really two things: a package build tool, implemented by a library
and daemon, and a special-purpose programming language.  GNU Guix relies
on the former, but uses Scheme as a replacement for the latter.

Using Scheme instead of a specific language allows us to get all the
features and tooling that come with Guile (compiler, debugger, REPL,
Unicode, libraries, etc.)  And it means that we have a general-purpose
language, on top of which we can have embedded domain-specific languages
(EDSLs), such as the one used to define packages.  This broadens what
can be done in package recipes themselves, and what can be done around them.

Technically, Guix makes remote procedure calls to the ‘nix-worker’
daemon to perform operations on the store.  At the lowest level, Nix
“derivations” represent promises of a build, stored in ‘.drv’ files in
the store.  Guix produces such derivations, which are then interpreted
by the daemon to perform the build.  Thus, Guix derivations can use
derivations produced by Nix (and vice versa).

With Nix and the [[https://nixos.org/nixpkgs][Nixpkgs]] distribution, package composition happens at
the Nix language level, but builders are usually written in Bash.
Conversely, Guix encourages the use of Scheme for both package
composition and builders.  Likewise, the core functionality of Nix is
written in C++ and Perl; Guix relies on some of the original C++ code,
but exposes all the API as Scheme.

* Related software

  - [[https://nixos.org][Nix, Nixpkgs, and NixOS]], functional package manager and associated
    software distribution, are the inspiration of Guix
  - [[https://www.gnu.org/software/stow/][GNU Stow]] builds around the idea of one directory per prefix, and a
    symlink tree to create user environments
  - [[https://www.pvv.ntnu.no/~arnej/store/storedoc_6.html][STORE]] shares the same idea
  - [[https://live.gnome.org/OSTree/][GNOME's OSTree]] allows bootable system images to be built from a
    specified set of packages
  - The [[https://www.gnu.org/s/gsrc/][GNU Source Release Collection]] (GSRC) is a user-land software
    distribution; unlike Guix, it relies on core tools available on the
    host system
y: Julien Lepiller <julien@lepiller.eu> Signed-off-by: Ludovic Courtès <ludo@gnu.org> Change-Id: Ie6a05b42ff04d3ad774a0a20278a77e4820bb8f6 Nicolas Graves 2023-12-18guix: import: Add composer importer....* guix/import/composer.scm: New file. * guix/scripts/import/composer.scm: New file. * guix/tests/composer.scm: New file. * Makefile.am: Add them. * guix/scripts/import.scm: Add composer importer. * doc/guix.texi (Invoking guix import): Mention it. Change-Id: I44a89b8cc80ef5b4a3cd15e8fbba4a18c1cea0b1 Co-authored-by: Julien Lepiller <julien@lepiller.eu> Co-authored-by: Ludovic Courtès <ludo@gnu.org> Nicolas Graves 2023-12-18Update cookbook Texinfo menus....Automated via C-c C-u C-a with Emacs. Change-Id: I9e595430529f8f994988c1ac3c919bdaef930dc1 Maxim Cournoyer 2023-12-18doc: Document the rust-target platform field....* doc/guix.texi (platform Reference): Document the rust-target platform field. Change-Id: I31642bbc64f6d4f2bfeed4a4000f95f853580444 Efraim Flashner 2023-12-14services: Add rspamd-service-type....* gnu/services/mail.scm (rspamd-service-type): New variable. * gnu/tests/mail.scm (%test-rspamd): New variable. * doc/guix.texi: Document it. Co-authored-by: Saku Laesvuori <saku@laesvuori.fi> Change-Id: I7196643f087ffe9fc91aab231b69d5ed8dc9d198 Signed-off-by: Ludovic Courtès <ludo@gnu.org> Thomas Ieong 2023-12-14services: guix: Allow gexps evaluating to a list of build-machines....* gnu/services/base.scm (guix-machines-files-installation): Handle machines being a mixed list of build-machines and lists of build-machines. * doc/guix.texi (Base Services): Document it. Change-Id: Ie404562ca0b564413233c3a624046da831893dc3 Co-authored-by: Ludovic Courtès <ludo@gnu.org> Saku Laesvuori 2023-12-11weather: Report unauthorized substitute servers....The goal is to make it easier to diagnose substitute misconfiguration (where we’re passing a substitute URL whose corresponding key is not authorized). Suggested by Emmanuel Agullo. * guix/scripts/weather.scm (check-narinfo-authorization): New procedure. (report-server-coverage): Use it. * doc/guix.texi (Invoking guix weather): Document it. (Getting Substitutes from Other Servers): Add “Troubleshooting” frame. Change-Id: I0a049c39eefb10d6a06634c8b16aa86902769791 Ludovic Courtès 2023-12-11weather: Use the same substitute URLs as guix-daemon....* guix/scripts/weather.scm (%default-options): Remove ‘substitute-urls’. (guix-weather): Call ‘substitute-urls’ when OPTS doesn’t have it. Warn when ‘substitute-urls’ returns #f. * doc/guix.texi (Invoking guix weather): Adjust accordingly. Change-Id: I3e9100074f2ad559e5c408660db70430d64f2bef Ludovic Courtès 2023-12-11doc: suggest using pre-inst-env for git-send-email on foreign distros...On foreign distros, not using pre-inst-env when using git-send-email results in a backtrace ending with: no code for module (guix ui) This can be confusing as users did not have to use pre-inst-env to use git-send-email before. * doc/contributing.texi (Sending a Patch Series): add a note to suggest using pre-inst-env when calling git-send-email on foreign distros. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Raphaël Mélotte 2023-12-11guix: Add avr platform....* Makefile.am (MODULES): Add avr platform module. * doc/guix.texi: Add documentation for avr platform. * guix/platforms/avr.scm (avr): New variable. Change-Id: I0f425eac61a71390b618e093f5a034ad4205a6f4 Signed-off-by: Efraim Flashner <efraim@flashner.co.il> Jean-Pierre De Jesus DIAZ 2023-12-04monad-repl: Add REPL commands to inspect package arguments....* guix/monad-repl.scm (keyword-argument-value, package-argument-command): New procedures. (phases, configure-flags, make-flags): New REPL commands. * doc/guix.texi (package Reference): Link to “Using Guix Interactively”. (Defining Package Variants): Add “Tips” quotation. (Build Phases): Add “Tip” quotation. (Using Guix Interactively): Document the new REPL commands. Change-Id: I7049c1d8aa9241e07d7c921aa396e578a1b4ef16 Ludovic Courtès 2023-12-04doc: Recommend building in ‘guix shell -CPW’....This was prompted by <https://issues.guix.gnu.org/66537>, where someone tried to build Guix within ‘guix shell --pure’ on a foreign distro and found that ./configure would pick software from the host system. Suggested by Hiep Pham <hiepph9@proton.me>. * doc/contributing.texi (Building from Git): Recommend ‘guix shell -CPW’. Change-Id: I7694b482d982917fef6ec404f68ddacea761f482 Ludovic Courtès 2023-11-25doc: Update yggdrasil related documentation....* doc/guix.texi (Networking Services): Update the sample yggdrasil-private.conf. Remove obsolete options that may contain a file whose path is specified in the config-file field of yggdrasil-configuration. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Aleksandr Vityazev 2023-11-25doc: Fix childhurd host SSH port number....Fixes <https://issues.guix.gnu.org/66739>. * doc/guix.texi (Virtualization Services): Fix childhurd host SSH port number. Reported-by: Nathan Dehnel <ncdehnel@gmail.com> Change-Id: I032b3447c7061ada8ba6d6f15c5454eab0e277d9 Ludovic Courtès 2023-11-23services: Add oci-container-service-type....* gnu/services/docker.scm (oci-container-configuration): New variable; (oci-container-shepherd-service): new variable; (oci-container-service-type): new variable. * doc/guix.texi (Miscellaneous Services): Document it. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Change-Id: I17cede1975051a9fdd0e0a13b2191d8055266f80 Giacomo Leidi 2023-11-20doc: contributing: Fix syntax in link....* doc/contributing.texi(Alternative Setups)[Vim and Neovim]: Fix broken link to fugitive.vim. Change-Id: Ib86239d98c39383169a9cdebc7549477b648206e Signed-off-by: Christopher Baines <mail@cbaines.net> Ekaitz Zarraga 2023-11-08build-system: Add vim-build-system....* guix/build-system/vim.scm, * guix/build/vim-build-system.scm: New modules. * Makefile.am (MODULES): Register new files. * doc/guix.texi: Document it. Co-authored-by: Efraim Flashner <efraim@flashner.co.il> Signed-off-by: Efraim Flashner <efraim@flashner.co.il> Jonathan Scoresby 2023-11-07doc: Document extra Emacs-Debbugs configurations....* doc/contributing.texi (Viewing Bugs within Emacs): Document debbugs-gnu-default-packages, debbugs-gnu-default-severities. (Debbugs User Interfaces): Likewise, and mention debbugs-gnu-guix-search. Suggested-by: Michael Albinus <michael.albinus@gmx.de> Change-Id: I8e9026bc394b0cf674c8498ca713c332e48c2700 Maxim Cournoyer 2023-11-07doc: Expound on the build-side versus host-side modules topic....Discussed in <https://issues.guix.gnu.org/65924#98-lineno27>. * doc/contributing.texi (Modules): Add new context indices, and provide a real-life counter-example, and its ramifications. Reported-by: Ludovic Courtès <ludo@gnu.org> Change-Id: I06975fb24f0d67c833884313a727dc550f61d8a0 Maxim Cournoyer 2023-11-07git-download: Add support for Git Large File Storage (LFS)....* guix/build/git.scm (git-fetch) [lfs?]: New argument, doc and setup code. (git-fetch-with-fallback) [lfs?]: New argument. Pass it to git-fetch. * guix/git-download.scm (git-lfs-package): New procedure. (git-fetch/in-band*): New procedure, made of the logic of git-fetch/in-band, with new git-lfs specifics, with the following changes: New #:git-lfs argument. <inputs>: Remove labels. Conditionally add git-lfs. <build>: Read "git lfs?" environment variable and pass its value to the #:lfs? argument of git-fetch-with-fallback. Use INPUTS directly; update comment. <gexp->derivation>: Add "git lfs?" to #:env-vars. (git-fetch/in-band): Express in terms of git-fetch/in-band*. (git-fetch/lfs): New procedure. * doc/guix.texi (origin Reference): Document it. Change-Id: I5b233b8642a7bdb8737b9d9b740e7254a89ccb25 Reviewed-by: Ludovic Courtès <ludo@gnu.org> Maxim Cournoyer 2023-11-07doc: Add some guidelines for reviewing....* doc/contributing.texi (Contributing) [Reviewing the Work of Others]: New section. (Debbugs Usertags): Expound with Emacs Debbugs information and document the 'reviewed-looks-good' usertag. * etc/git/gitconfig [b4]: New section. Change-Id: I56630b15ec4fbc5c67e5420dbf2838556a005d6b Reviewed-by: Ludovic Courtès <ludo@gnu.org> Maxim Cournoyer 2023-11-07doc: Update URL of Mumi git repository....* doc/contributing.texi (Debbugs User Interfaces): Use new repository URL. Change-Id: Ieccf34be8a103740607d8c115120902dc687d4e7 Ricardo Wurmus 2023-11-05home: services: Add 'x11-display' service....* gnu/home/services/desktop.scm (x11-shepherd-service): New procedure. (home-x11-service-type): New variable. (redshift-shepherd-service): Add 'requirement' field. (home-redshift-service-type): Extend 'home-x11-service-type'. * doc/guix.texi (Desktop Home Services): Document it. Change-Id: Ibd46d71cbb80fcdff8dbf3e8dbcfc3b24163bdb6 Ludovic Courtès 2023-11-05doc: contributing: Replace reference to dunst.scm....The contributing documentation makes a reference to dunst.scm as an example of the build process failing after an update. This patch replaces that reference with a much more permanent linux.scm. * doc/contributing.texi: Replace reference to dunst.scm. Change-Id: I89a4157eb253e25979bc35d6d3b12201a0d19951 Signed-off-by: Christopher Baines <mail@cbaines.net> Jaeme Sifat 2023-11-01doc: contributiong: Fix ref usage....Previous usage renders as "see See Teams". * doc/contributing.texi: Fix ref usage. Change-Id: I97a91697ecb87d07cc3c962a79d87dd290a70a7c Julien Lepiller 2023-10-25doc: cookbook: Fix a broken cross-reference....* doc/guix-cookbook.texi (Building with Guix): Adjust xref target. Change-Id: I87d6dc2648ff8898e3dd3b5ffca748193f14751e Florian Pelz 2023-10-24doc: cookbook: Add cross references to the manual regarding manifests....* doc/guix-cookbook.texi (The benefits of manifests) (Reproducible profiles): Add cross-references. Ludovic Courtès 2023-10-24doc: cookbook: Suggest ‘guix shell’ as an alternative to multiple profiles....Multiple profiles are relatively hard to set up and maintain, especially for newcomers. Thus, suggest ‘guix shell’ as an alternative. * doc/guix-cookbook.texi (Guix Profiles in Practice): Add note linking to ‘guix shell’. (The benefits of manifests): Remove outdated info about ‘guix environment’ and profiles that may be GC’d. Update. Ludovic Courtès 2023-10-24doc: Mention Guix Home in “Getting Started”....* doc/guix.texi (Getting Started): Mention Guix Home. (Home Configuration): Remove “still under development” note. Ludovic Courtès 2023-10-24doc: Move “System Troubleshooting Tips” below....So far this section would appear before “Getting Started”. This moves it right after “System Configuration”. * doc/guix.texi (System Troubleshooting Tips): Move after “System Configuration”. Ludovic Courtès 2023-10-23doc: Document Cuirass build notifications....* doc/contributing.texi (Tracking Bugs and Changes) <Cuirass Build Notifications>: New subsection. Change-Id: Icead24ec18cd4511ee6217aae3c1d11ec552a9c7 Reviewed-by: Mathieu Othacehe <othacehe@gnu.org> Maxim Cournoyer 2023-10-22build: Add a commit-msg hook that embeds Change-Id in commit messages....Partially implements <https://issues.guix.gnu.org/66027>. This will make it possible to track a merged commit back to its original posting on the mailing list, and open the door to new opportunities such as closing fully merged series automatically. * Makefile.am (COMMIT_MSG_MAGIC): New variable. (.git/hooks/commit-msg): New target. * etc/git/commit-msg: New file. * doc/contributing.texi (Configuring Git): Document Change-Id. Series-changes: 3 - Clarify documentation text, as suggested by Simon Change-Id: Ia92fa958eae600fdd4e180bad494c85db8bb4dd6 Reviewed-by: Simon Tournier <zimon.toutoune@gmail.com> Maxim Cournoyer 2023-10-21build-system: Add zig-build-system....* guix/build-system/zig.scm: New file. * guix/build/zig-build-system.scm: New file. * Makefile.am: Add them. * doc/guix.texi: Document it. * etc/snippets/yas/scheme-mode/guix-package (build-system): Add zig-build-system. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Ekaitz Zarraga 2023-10-18doc: Expand origin-Reference section...* doc/guix.texi (origin Reference): Add references for hg-reference, svn-reference, bzr-fetch, and bzr-reference. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Christina O'Donnell 2023-10-17doc: Clarify partition LBA compatibility....* doc/guix.texi (partition Reference): Clarify LBA compatibility. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Gabriel Wicki 2023-10-14doc: Use herd for cerbot deploy hook example....* doc/guix.texi (Certificate Services): Replace PID file based example with one using (gnu services herd). Rename %nginx-deploy-hook to %certbot-deploy-hook. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Bruno Victal 2023-10-14pack: Allow setting a custom image tag for Docker images...Previously, the image repository name was automatically computed from the packages in the manifest without allowing the user to set a custom one. As such, changing the packages in the manifest would result in a new image name. Thereby requiring updating documentation et cetera when using `docker load` directory on the resulting image. Inspired by `docker build -t`, this commit adds a new Docker-specific option to `guix pack` which allows setting a custom repository name for the resulting image. If this option is not specified, pack falls back to computing the name from the manifest. Therefore, this change is entirely backwards compatible. * guix/scripts/pack.scm (guix-pack): Add --image-tag option. (%docker-format-options): New constant. (show-docker-format-options): New procedure. (show-docker-format-options/detailed): New procedure. (docker-image): Allow setting a custom repository name for the created docker image via extra-options. * doc/guix.texi (Invoking guix pack)[docker]: Document --image-tag option. Signed-off-by: Sören Tempel <soeren@soeren-tempel.net> Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Sören Tempel 2023-10-13doc: Document specification->package+output....Reported by nutcase on IRC. * doc/guix.texi (Using the Configuration System): Add a section about using specification->package+output. Efraim Flashner 2023-10-12services: cuirass: Add ‘log-expiry’ option for ‘remote-server’....* gnu/services/cuirass.scm (<cuirass-remote-server-configuration>)[log-expiry]: New field. (cuirass-shepherd-service): Honor it. * doc/guix.texi (Continuous Integration): Document it. Ludovic Courtès 2023-10-12doc: Fix typo....* doc/guix.texi (Derivations): Fix typo. Ludovic Courtès 2023-10-11doc: cookbook: Add “Software Development” chapter....* doc/guix-cookbook.texi (Software Development): New chapter. Ludovic Courtès