aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013-2020, 2024 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
;;;
;;; 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 system linux-initrd)
  #:use-module (guix gexp)
  #:use-module (guix utils)
  #:use-module ((guix store)
                #:select (%store-prefix))
  #:use-module ((guix derivations)
                #:select (derivation->output-path))
  #:use-module (guix modules)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages disk)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages file-systems)
  #:use-module (gnu packages guile)
  #:use-module ((gnu packages xorg)
                #:select (console-setup xkeyboard-config))
  #:use-module ((gnu packages make-bootstrap)
                #:select (%guile-static-initrd))
  #:use-module (gnu system file-systems)
  #:use-module (gnu system mapped-devices)
  #:use-module (gnu system keyboard)
  #:use-module (ice-9 match)
  #:use-module (ice-9 regex)
  #:use-module (ice-9 vlist)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-26)
  #:export (expression->initrd
            %base-initrd-modules
            raw-initrd
            file-system-packages
            file-system-modules
            base-initrd))


;;; Commentary:
;;;
;;; Tools to build initial RAM disks (initrd's) for Linux-Libre, and in
;;; particular initrd's that run Guile.
;;;
;;; Code:


(define* (expression->initrd exp
                             #:key
                             (guile %guile-static-initrd)
                             (gzip gzip)
                             (name "guile-initrd")
                             (system (%current-system)))
  "Return as a file-like object a Linux initrd (a gzipped cpio archive)
containing GUILE and that evaluates EXP, a G-expression, upon booting.  All
the derivations referenced by EXP are automatically copied to the initrd."

  ;; General Linux overview in `Documentation/early-userspace/README' and
  ;; `Documentation/filesystems/ramfs-rootfs-initramfs.txt'.

  (define init
    (program-file "init" exp #:guile guile))

  (define (import-module? module)
    ;; Since we don't use deduplication support in 'populate-store', don't
    ;; import (guix store deduplication) and its dependencies, which includes
    ;; Guile-Gcrypt.  That way we can run tests with '--bootstrap'.
    (and (guix-module-name? module)
         (not (equal? module '(guix store deduplication)))))

  (define builder
    ;; Do not use "guile-zlib" extension here, otherwise it would drag the
    ;; non-static "zlib" package to the initrd closure.  It is not needed
    ;; anyway because the modules are stored uncompressed within the initrd.
    (with-imported-modules (source-module-closure
                            '((gnu build linux-initrd))
                            #:select? import-module?)
      #~(begin
          (use-modules (gnu build linux-initrd))

          (mkdir #$output)

          ;; The guile used in the initrd must be present in the store, so
          ;; that module loading works once the root is switched.
          ;;
          ;; To ensure that is the case, add an explicit reference to the
          ;; guile package used in the initrd to the output.
          ;;
          ;; This fixes guix-patches bug #28399, "Fix mysql activation, and
          ;; add a basic test".
          (call-with-output-file (string-append #$ output "/references")
            (lambda (port)
              (simple-format port "~A\n" #$guile)))

          (build-initrd (string-append #$output "/initrd.cpio.gz")
                        #:guile #$guile
                        #:init #$init
                        ;; Copy everything INIT refers to into the initrd.
                        #:references-graphs '("closure")
                        #:gzip (string-append #+gzip "/bin/gzip")))))

  (file-append (computed-file name builder
                              #:options
                              `(#:references-graphs (("closure" ,init))))
               "/initrd.cpio.gz"))

(define (flat-linux-module-directory linux modules)
  "Return a flat directory containing the Linux kernel modules listed in
MODULES and taken from LINUX."
  (define imported-modules
    (source-module-closure '((gnu build linux-modules)
                             (guix build utils))))

  (define build-exp
    (with-imported-modules imported-modules
      (with-extensions (list guile-zlib guile-zstd)
        #~(begin
            (use-modules (gnu build linux-modules)
                         (guix build utils)
                         (rnrs io ports)
                         (srfi srfi-1)
                         (srfi srfi-26)
                         (ice-9 match))

            (define module-dir
              (string-append #$linux "/lib/modules"))

            (define builtin-modules
              (match (find-files module-dir (lambda (file stat)
                                              (string=? (basename file)
                                                        "modules.builtin")))
                ((file . _)
                 (call-with-input-file file
                   (lambda (port)
                     (map file-name->module-name
                          (string-tokenize (get-string-all port))))))
                (_
                 '())))

            (define modules-to-lookup
              (lset-difference string=? '#$modules builtin-modules))

            (define modules
              (let* ((lookup  (cut find-module-file module-dir <>))
                     (modules (map lookup modules-to-lookup)))
                (append modules
                        (recursive-module-dependencies
                         modules
                         #:lookup-module lookup))))

            (define (maybe-uncompress file)
              ;; If FILE is a compressed module, uncompress it, as the initrd
              ;; is already gzipped as a whole.
              (cond
               ((string-contains file ".ko.gz")
                (invoke #+(file-append gzip "/bin/gunzip") file))
               ((string-contains file ".ko.zst")
                (invoke #+(file-append zstd "/bin/zstd") "-d" file))))

            (mkdir #$output)
            (for-each (lambda (module)
                        (let ((out-module
                               (string-append #$output "/"
                                              (basename module))))
                          (format #t "copying '~a'...~%" module)
                          (copy-file module out-module)
                          (maybe-uncompress out-module)))
                      (delete-duplicates modules))

            ;; Hyphen or underscore?  This database tells us.
            (write-module-name-database #$output)))))

  (computed-file "linux-modules" build-exp))

(define* (raw-initrd file-systems
                      #:key
                      (linux linux-libre)
                      (linux-modules '())
                      (pre-mount #t)
                      (mapped-devices '())
                      (keyboard-layout #f)
                      (helper-packages '())
                      qemu-networking?
                      volatile-root?
                      (on-error 'debug))
  "Return as a file-like object a raw initrd, with kernel
modules taken from LINUX.  FILE-SYSTEMS is a list of file-systems to be
mounted by the initrd, possibly in addition to the root file system specified
on the kernel command line via 'root'.  LINUX-MODULES is a list of kernel
modules to be loaded at boot time. MAPPED-DEVICES is a list of device
mappings to realize before FILE-SYSTEMS are mounted. PRE-MOUNT is a
G-expression to evaluate before realizing MAPPED-DEVICES.
HELPER-PACKAGES is a list of packages to be copied in the initrd. It may include
e2fsck/static or other packages needed by the initrd to check root partition.

When true, KEYBOARD-LAYOUT is a <keyboard-layout> record denoting the desired
console keyboard layout.  This is done before MAPPED-DEVICES are set up and
before FILE-SYSTEMS are mounted such that, should the user need to enter a
passphrase or use the REPL, this happens using the intended keyboard layout.

When QEMU-NETWORKING? is true, set up networking with the standard QEMU
parameters.

When VOLATILE-ROOT? is true, the root file system is writable but any changes
to it are lost.

ON-ERROR is passed to 'call-with-error-handling'; it determines what happens
upon error."
  (define device-mapping-commands
    ;; List of gexps to open the mapped devices.
    (map (lambda (md)
           (let* ((source  (mapped-device-source md))
                  (targets (mapped-device-targets md))
                  (type    (mapped-device-type md))
                  (open    (mapped-device-kind-open type)))
             (open source targets)))
         mapped-devices))

  (define file-system-scan-commands
    ;; File systems like btrfs need help to assemble multi-device file systems
    ;; but do not use manually-specified <mapped-devices>.
    (let ((file-system-types (map file-system-type file-systems)))
      (if (member "btrfs" file-system-types)
          ;; Ignore errors: if the system manages to boot anyway, the better.
          #~((system* (string-append #$btrfs-progs/static "/bin/btrfs")
                      "device" "scan"))
          #~())))

  (define kodir
    (flat-linux-module-directory linux linux-modules))

  (expression->initrd
   (with-imported-modules (source-module-closure
                           '((gnu build linux-boot)
                             (guix build utils)
                             (guix build bournish)
                             (gnu system file-systems)
                             (gnu build file-systems)))
     #~(begin
         (use-modules (gnu build linux-boot)
                      (gnu system file-systems)
                      ((guix build utils) #:hide (delete))
                      (guix build bournish)   ;add the 'bournish' meta-command
                      (srfi srfi-1)           ;for lvm-device-mapping
                      (srfi srfi-26)

                      ;; Load extra modules needed by the mapped device code.
                      #$@(append-map (compose mapped-device-kind-modules
                                              mapped-device-type)
                                     mapped-devices))

         (with-output-to-port (%make-void-port "w")
           (lambda ()
             (set-path-environment-variable "PATH" '("bin" "sbin")
                                            '#$helper-packages)))

         (parameterize ((current-warning-port (%make-void-port "w")))
           (boot-system #:mounts
                        (map spec->file-system
                             '#$(map file-system->spec file-systems))
                        #:pre-mount (lambda ()
                                      (and #$pre-mount
                                           #$@device-mapping-commands
                                           #$@file-system-scan-commands))
                        #:linux-modules '#$linux-modules
                        #:linux-module-directory '#$kodir
                        #:keymap-file #+(and=> keyboard-layout
                                               keyboard-layout->console-keymap)
                        #:qemu-guest-networking? #$qemu-networking?
                        #:volatile-root? '#$volatile-root?
                        #:on-error '#$on-error))))
   #:name "raw-initrd"))

(define* (file-system-packages file-systems #:key (volatile-root? #f))
  "Return the list of statically-linked, stripped packages to check
FILE-SYSTEMS."
  `(,@(if (find (lambda (fs)
                  (string-prefix? "ext" (file-system-type fs)))
                file-systems)
          (list e2fsck/static)
          '())
    ,@(if (find (lambda (fs)
                  (string-suffix? "fat" (file-system-type fs)))
                file-systems)
          (list fatfsck/static)
          '())
    ,@(if (find (file-system-type-predicate "bcachefs") file-systems)
          (list bcachefs/static)
          '())
    ,@(if (find (file-system-type-predicate "btrfs") file-systems)
          (list btrfs-progs/static)
          '())
    ,@(if (find (file-system-type-predicate "jfs") file-systems)
          (list jfs_fsck/static)
          '())
    ,@(if (find (file-system-type-predicate "ntfs") file-systems)
          (list ntfsfix/static)
          '())
    ,@(if (find (file-system-type-predicate "f2fs") file-systems)
          (list f2fs-fsck/static)
          '())
    ,@(if (find (file-system-type-predicate "xfs") file-systems)
          (list xfs_repair/static)
          '())))

(define-syntax vhash                              ;TODO: factorize
  (syntax-rules (=>)
    "Build a vhash with the given key/value mappings."
    ((_)
     vlist-null)
    ((_ (key others ... => value) rest ...)
     (vhash-cons key value
                 (vhash (others ... => value) rest ...)))
    ((_ (=> value) rest ...)
     (vhash rest ...))))

(define-syntax lookup-procedure
  (syntax-rules (else)
    "Return a procedure that lookups keys in the given dictionary."
    ((_ mapping ... (else default))
     (let ((table (vhash mapping ...)))
       (lambda (key)
         (match (vhash-assoc key table)
           (#f            default)
           ((key . value) value)))))))

(define file-system-type-modules
  ;; Given a file system type, return the list of modules it needs.
  (lookup-procedure ("cifs" => '("md4" "ecb" "cifs"))
                    ("9p" => '("9p" "9pnet_virtio"))
                    ("bcachefs" => '("bcachefs"))
                    ("btrfs" => '("btrfs"))
                    ("iso9660" => '("isofs"))
                    ("jfs" => '("jfs"))
                    ("f2fs" => '("f2fs" "crc32_generic"))
                    ("xfs" => '("xfs"))
                    (else '())))

(define (file-system-modules file-systems)
  "Return the list of Linux modules needed to mount FILE-SYSTEMS."
  (append-map (compose file-system-type-modules file-system-type)
              file-systems))

(define* (default-initrd-modules
           #:optional
           (system (or (%current-target-system)
                       (%current-system))))
  "Return the list of modules included in the initrd by default."
  (define virtio-modules
    ;; Modules for Linux para-virtualized devices, for use in QEMU guests.
    '("virtio_pci" "virtio_balloon" "virtio_blk" "virtio_net"
      "virtio_console" "virtio-rng"))

  `("ahci"                                  ;for SATA controllers
    "usb-storage" "uas"                     ;for the installation image etc.
    "usbhid" "hid-generic"                  ;keyboards during early boot
    ,@(if (target-riscv64? system)
          '()
          '("hid-apple"))
    "dm-crypt" "xts" "serpent_generic" "wp512" ;for encrypted root partitions
    "nls_iso8859-1"                            ;for `mkfs.fat`, et.al
    ,@(if (string-match "^(x86_64|i[3-6]86)-" system)
          '("pata_acpi" "pata_atiixp"    ;for ATA controllers
            "isci")                      ;for SAS controllers like Intel C602
          '())

    ,@virtio-modules))

(define-syntax %base-initrd-modules
  ;; This more closely matches our naming convention.
  (identifier-syntax (default-initrd-modules)))

(define* (base-initrd file-systems
                      #:key
                      (linux linux-libre)
                      (linux-modules '())
                      (mapped-devices '())
                      (keyboard-layout #f)
                      qemu-networking?
                      volatile-root?
                      (extra-modules '())         ;deprecated
                      (on-error 'debug))
  "Return as a file-like object a generic initrd, with kernel
modules taken from LINUX.  FILE-SYSTEMS is a list of file-systems to be
mounted by the initrd, possibly in addition to the root file system specified
on the kernel command line via 'root'.  MAPPED-DEVICES is a list of device
mappings to realize before FILE-SYSTEMS are mounted.

When true, KEYBOARD-LAYOUT is a <keyboard-layout> record denoting the desired
console keyboard layout.  This is done before MAPPED-DEVICES are set up and
before FILE-SYSTEMS are mounted such that, should the user need to enter a
passphrase or use the REPL, this happens using the intended keyboard layout.

QEMU-NETWORKING? and VOLATILE-ROOT? behaves as in raw-initrd.

The initrd is automatically populated with all the kernel modules necessary
for FILE-SYSTEMS and for the given options.  Additional kernel
modules can be listed in LINUX-MODULES.  They will be added to the initrd, and
loaded at boot time in the order in which they appear."
  (define linux-modules*
    ;; Modules added to the initrd and loaded from the initrd.
    `(,@linux-modules
      ,@(file-system-modules file-systems)
      ,@(if volatile-root?
            '("overlay")
            '())
      ,@extra-modules))

  (define helper-packages
    (append (file-system-packages file-systems
                                  #:volatile-root? volatile-root?)
            (if keyboard-layout
                (list loadkeys-static)
                '())))

  (raw-initrd file-systems
              #:linux linux
              #:linux-modules linux-modules*
              #:mapped-devices mapped-devices
              #:helper-packages helper-packages
              #:keyboard-layout keyboard-layout
              #:qemu-networking? qemu-networking?
              #:volatile-root? volatile-root?
              #:on-error on-error))

;;; linux-initrd.scm ends here
9edd'>about -rw-r--r--batik.scm8758logplainabout -rw-r--r--bdw-gc.scm5914logplainabout -rw-r--r--benchmark.scm27954logplainabout -rw-r--r--bioconductor.scm582203logplainabout -rw-r--r--bioinformatics.scm673127logplainabout -rw-r--r--bison.scm3264logplainabout -rw-r--r--bittorrent.scm23014logplainabout -rw-r--r--boost.scm20381logplainabout -rw-r--r--bootloaders.scm60294logplainabout -rw-r--r--bootstrap.scm45152logplainabout -rw-r--r--browser-extensions.scm4613logplainabout -rw-r--r--build-tools.scm23625logplainabout -rw-r--r--busybox.scm7067logplainabout -rw-r--r--c.scm51052logplainabout -rw-r--r--calcurse.scm3469logplainabout -rw-r--r--calendar.scm18353logplainabout -rw-r--r--ccache.scm3112logplainabout -rw-r--r--cdrom.scm42780logplainabout -rw-r--r--cedille.scm5388logplainabout -rw-r--r--certs.scm12932logplainabout -rw-r--r--check.scm122879logplainabout -rw-r--r--chemistry.scm23317logplainabout -rw-r--r--chez.scm52067logplainabout -rw-r--r--chicken.scm12183logplainabout -rw-r--r--chromium.scm45664logplainabout -rw-r--r--ci.scm13475logplainabout -rw-r--r--cinnamon.scm2923logplainabout -rw-r--r--clojure.scm27164logplainabout -rw-r--r--cluster.scm11836logplainabout -rw-r--r--cmake.scm17896logplainabout -rw-r--r--cobol.scm3394logplainabout -rw-r--r--code.scm45566logplainabout -rw-r--r--commencement.scm161836logplainabout -rw-r--r--compression.scm118012logplainabout -rw-r--r--compton.scm5628logplainabout -rw-r--r--configuration-management.scm4326logplainabout -rw-r--r--conky.scm3453logplainabout -rw-r--r--connman.scm7985logplainabout -rw-r--r--containers.scm13464logplainabout -rw-r--r--convmv.scm2300logplainabout -rw-r--r--cook.scm4101logplainabout -rw-r--r--coq.scm27359logplainabout -rw-r--r--cpio.scm2300logplainabout -rw-r--r--cpp.scm77464logplainabout -rw-r--r--cppi.scm1775logplainabout -rw-r--r--cran.scm1210312logplainabout -rw-r--r--crates-graphics.scm121823logplainabout -rw-r--r--crates-gtk.scm63246logplainabout -rw-r--r--crates-io.scm2537709logplainabout -rw-r--r--cross-base.scm25703logplainabout -rw-r--r--crypto.scm70862logplainabout -rw-r--r--cryptsetup.scm6632logplainabout -rw-r--r--cups.scm46979logplainabout -rw-r--r--curl.scm17359logplainabout -rw-r--r--cvassistant.scm3600logplainabout -rw-r--r--cybersecurity.scm6306logplainabout -rw-r--r--cyrus-sasl.scm3439logplainabout -rw-r--r--darwin.scm4460logplainabout -rw-r--r--databases.scm196716logplainabout -rw-r--r--datamash.scm6611logplainabout -rw-r--r--datastructures.scm16947logplainabout -rw-r--r--dav.scm6902logplainabout -rw-r--r--dbm.scm8182logplainabout -rw-r--r--dc.scm2177logplainabout -rw-r--r--debian.scm27207logplainabout -rw-r--r--debug.scm36014logplainabout -rw-r--r--dejagnu.scm3502logplainabout -rw-r--r--dezyne.scm5022logplainabout -rw-r--r--dhall.scm5386logplainabout -rw-r--r--dico.scm3645logplainabout -rw-r--r--dictionaries.scm17755logplainabout -rw-r--r--diffoscope.scm14420logplainabout -rw-r--r--digest.scm5298logplainabout -rw-r--r--direct-connect.scm3169logplainabout -rw-r--r--disk.scm58727logplainabout -rw-r--r--display-managers.scm19157logplainabout -rw-r--r--distributed.scm3870logplainabout -rw-r--r--django.scm52817logplainabout -rw-r--r--djvu.scm17009logplainabout -rw-r--r--dlang.scm20273logplainabout -rw-r--r--dns.scm58009logplainabout -rw-r--r--docbook.scm32106logplainabout -rw-r--r--docker.scm32587logplainabout -rw-r--r--documentation.scm16685logplainabout -rw-r--r--dunst.scm3639logplainabout -rw-r--r--dvtm.scm2302logplainabout -rw-r--r--easyrpg.scm4376logplainabout -rw-r--r--ebook.scm26947logplainabout -rw-r--r--ed.scm2372logplainabout -rw-r--r--education.scm43643logplainabout -rw-r--r--efi.scm9698logplainabout -rw-r--r--electronics.scm17678logplainabout -rw-r--r--elf.scm13040logplainabout -rw-r--r--elixir.scm5023logplainabout -rw-r--r--elm.scm28154logplainabout -rw-r--r--emacs-xyz.scm1231723logplainabout -rw-r--r--emacs.scm24359logplainabout -rw-r--r--embedded.scm71787logplainabout -rw-r--r--emulators.scm98124logplainabout -rw-r--r--enchant.scm6456logplainabout -rw-r--r--engineering.scm152984logplainabout -rw-r--r--enlightenment.scm23644logplainabout -rw-r--r--entr.scm3301logplainabout -rw-r--r--erlang.scm27651logplainabout -rw-r--r--esolangs.scm5728logplainabout -rw-r--r--fabric-management.scm9260logplainabout -rw-r--r--fcitx.scm9002logplainabout -rw-r--r--fcitx5.scm18921logplainabout -rw-r--r--figlet.scm1797logplainabout -rw-r--r--file-systems.scm74177logplainabout -rw-r--r--file.scm2852logplainabout -rw-r--r--finance.scm86208logplainabout -rw-r--r--firmware.scm27259logplainabout -rw-r--r--flashing-tools.scm21462logplainabout -rw-r--r--flex.scm3195logplainabout -rw-r--r--fltk.scm6075logplainabout -rw-r--r--fonts.scm117758logplainabout -rw-r--r--fontutils.scm73541logplainabout -rw-r--r--forth.scm2426logplainabout -rw-r--r--fpga.scm21940logplainabout -rw-r--r--freedesktop.scm103604logplainabout -rw-r--r--freeipmi.scm2494logplainabout -rw-r--r--fribidi.scm4167logplainabout -rw-r--r--ftp.scm11871logplainabout -rw-r--r--fvwm.scm3028logplainabout -rw-r--r--game-development.scm116494logplainabout -rw-r--r--games.scm515149logplainabout -rw-r--r--gawk.scm10415logplainabout -rw-r--r--gcal.scm2889logplainabout -rw-r--r--gcc.scm60281logplainabout -rw-r--r--gd.scm6528logplainabout -rw-r--r--gdb.scm7712logplainabout -rw-r--r--genealogy.scm4362logplainabout -rw-r--r--genimage.scm6158logplainabout -rw-r--r--geo.scm105809logplainabout -rw-r--r--gettext.scm13319logplainabout -rw-r--r--ghostscript.scm16930logplainabout -rw-r--r--gimp.scm24774logplainabout -rw-r--r--gkrellm.scm2437logplainabout -rw-r--r--gl.scm48388logplainabout -rw-r--r--glib.scm53067logplainabout -rw-r--r--gnome-xyz.scm59589logplainabout -rw-r--r--gnome.scm496580logplainabout -rw-r--r--gnu-doc.scm4139logplainabout -rw-r--r--gnu-pw-mgr.scm2629logplainabout -rw-r--r--gnucash.scm14890logplainabout -rw-r--r--gnunet.scm17645logplainabout -rw-r--r--gnupg.scm47826logplainabout -rw-r--r--gnustep.scm13327logplainabout -rw-r--r--gnuzilla.scm68491logplainabout -rw-r--r--gobby.scm7917logplainabout -rw-r--r--golang.scm401254logplainabout -rw-r--r--gperf.scm2354logplainabout -rw-r--r--gpodder.scm8878logplainabout -rw-r--r--gps.scm11588logplainabout -rw-r--r--graph.scm26437logplainabout -rw-r--r--graphics.scm89105logplainabout -rw-r--r--graphviz.scm19136logplainabout -rw-r--r--groff.scm11253logplainabout -rw-r--r--groovy.scm37956logplainabout -rw-r--r--gsasl.scm4354logplainabout -rw-r--r--gstreamer.scm41056logplainabout -rw-r--r--gtk.scm115842logplainabout -rw-r--r--guile-wm.scm9119logplainabout -rw-r--r--guile-xyz.scm207037logplainabout -rw-r--r--guile.scm39671logplainabout -rw-r--r--gv.scm3235logplainabout -rw-r--r--gxmessage.scm2313logplainabout -rw-r--r--hardware.scm53399logplainabout -rw-r--r--haskell-apps.scm35796logplainabout -rw-r--r--haskell-check.scm45149logplainabout -rw-r--r--haskell-crypto.scm31231logplainabout -rw-r--r--haskell-web.scm76620logplainabout -rw-r--r--haskell-xyz.scm574831logplainabout -rw-r--r--haskell.scm45729logplainabout -rw-r--r--haxe.scm11557logplainabout -rw-r--r--heads.scm8326logplainabout -rw-r--r--hexedit.scm4577logplainabout -rw-r--r--hugs.scm3683logplainabout -rw-r--r--hunspell.scm3422logplainabout -rw-r--r--hurd.scm26320logplainabout -rw-r--r--hyperledger.scm8559logplainabout -rw-r--r--i2p.scm3508logplainabout -rw-r--r--ibus.scm33852logplainabout -rw-r--r--icu4c.scm10461logplainabout -rw-r--r--idris.scm12886logplainabout -rw-r--r--idutils.scm3143logplainabout -rw-r--r--image-processing.scm54229logplainabout -rw-r--r--image-viewers.scm37530logplainabout -rw-r--r--image.scm99806logplainabout -rw-r--r--imagemagick.scm11575logplainabout -rw-r--r--inklingreader.scm2147logplainabout -rw-r--r--inkscape.scm13098logplainabout -rw-r--r--installers.scm7481logplainabout -rw-r--r--instrumentation.scm17223logplainabout -rw-r--r--ipfs.scm9804logplainabout -rw-r--r--irc.scm26241logplainabout -rw-r--r--irods.scm12157logplainabout -rw-r--r--iso-codes.scm5268logplainabout -rw-r--r--jami.scm20212logplainabout -rw-r--r--java-compression.scm13736logplainabout -rw-r--r--java-graphics.scm5022logplainabout -rw-r--r--java-maths.scm3593logplainabout -rw-r--r--java.scm607101logplainabout -rw-r--r--javascript.scm41747logplainabout -rw-r--r--jemalloc.scm3832logplainabout -rw-r--r--jose.scm1999logplainabout -rw-r--r--jrnl.scm2308logplainabout -rw-r--r--julia-jll.scm107505logplainabout -rw-r--r--julia-xyz.scm227515logplainabout -rw-r--r--julia.scm27220logplainabout -rw-r--r--jupyter.scm31264logplainabout -rw-r--r--kawa.scm2548logplainabout -rw-r--r--kde-frameworks.scm141249logplainabout -rw-r--r--kde-internet.scm15468logplainabout -rw-r--r--kde-multimedia.scm27052logplainabout -rw-r--r--kde-pim.scm63328logplainabout -rw-r--r--kde-plasma.scm12189logplainabout -rw-r--r--kde-systemtools.scm11953logplainabout -rw-r--r--kde-utils.scm20934logplainabout -rw-r--r--kde.scm42504logplainabout -rw-r--r--kerberos.scm11151logplainabout -rw-r--r--key-mon.scm1151logplainabout -rw-r--r--kodi.scm21467logplainabout -rw-r--r--language.scm34731logplainabout -rw-r--r--ld-wrapper.in12362logplainabout -rw-r--r--lean.scm4822logplainabout -rw-r--r--lego.scm6647logplainabout -rw-r--r--less.scm5544logplainabout -rw-r--r--lesstif.scm1777logplainabout -rw-r--r--libbsd.scm2157logplainabout -rw-r--r--libcanberra.scm6131logplainabout -rw-r--r--libdaemon.scm4426logplainabout -rw-r--r--libedit.scm2830logplainabout -rw-r--r--libevent.scm11527logplainabout -rw-r--r--libffcall.scm1922logplainabout -rw-r--r--libffi.scm10878logplainabout -rw-r--r--libftdi.scm1935logplainabout -rw-r--r--libidn.scm3569logplainabout -rw-r--r--libphidget.scm1798logplainabout -rw-r--r--libreoffice.scm50234logplainabout -rw-r--r--libsigsegv.scm2731logplainabout -rw-r--r--libunistring.scm3159logplainabout -rw-r--r--libunwind.scm2457logplainabout -rw-r--r--libusb.scm24590logplainabout -rw-r--r--license.scm9216logplainabout -rw-r--r--lighting.scm3620logplainabout -rw-r--r--linphone.scm42590logplainabout -rw-r--r--linux.scm398696logplainabout -rw-r--r--lirc.scm5775logplainabout -rw-r--r--lisp-check.scm34438logplainabout -rw-r--r--lisp-xyz.scm835431logplainabout -rw-r--r--lisp.scm60997logplainabout -rw-r--r--llvm.scm94312logplainabout -rw-r--r--logging.scm14523logplainabout -rw-r--r--logo.scm2823logplainabout -rw-r--r--loko.scm3408logplainabout -rw-r--r--lout.scm5620logplainabout -rw-r--r--lsof.scm4657logplainabout -rw-r--r--lua.scm53180logplainabout -rw-r--r--lxde.scm25886logplainabout -rw-r--r--lxqt.scm49312logplainabout -rw-r--r--m4.scm2700logplainabout -rw-r--r--machine-learning.scm142536logplainabout -rw-r--r--magic-wormhole.scm6202logplainabout -rw-r--r--mail.scm186109logplainabout -rw-r--r--make-bootstrap.scm39173logplainabout -rw-r--r--man.scm16357logplainabout -rw-r--r--markup.scm18664logplainabout -rw-r--r--marst.scm1763logplainabout -rw-r--r--mastodon.scm6410logplainabout -rw-r--r--mate.scm53245logplainabout -rw-r--r--maths.scm331219logplainabout -rw-r--r--matrix.scm10916logplainabout -rw-r--r--maven-parent-pom.scm23387logplainabout -rw-r--r--maven.scm168789logplainabout -rw-r--r--mc.scm4610logplainabout -rw-r--r--mcrypt.scm4584logplainabout -rw-r--r--medical.scm2344logplainabout -rw-r--r--mercury.scm11256logplainabout -rw-r--r--mes.scm11841logplainabout -rw-r--r--messaging.scm133519logplainabout -rw-r--r--microcom.scm2155logplainabout -rw-r--r--minetest.scm30239logplainabout -rw-r--r--mingw.scm8577logplainabout -rw-r--r--moe.scm2206logplainabout -rw-r--r--monitoring.scm30951logplainabout -rw-r--r--mono.scm7107logplainabout -rw-r--r--moreutils.scm3031logplainabout -rw-r--r--motti.scm1669logplainabout -rw-r--r--mp3.scm32743logplainabout -rw-r--r--mpd.scm19912logplainabout -rw-r--r--mpi.scm24063logplainabout -rw-r--r--mtools.scm2089logplainabout -rw-r--r--multiprecision.scm21616logplainabout -rw-r--r--music.scm265203logplainabout -rw-r--r--musl.scm2190logplainabout -rw-r--r--myrddin.scm2544logplainabout -rw-r--r--nano.scm2150logplainabout -rw-r--r--ncdu.scm3590logplainabout -rw-r--r--ncurses.scm16733logplainabout -rw-r--r--netpbm.scm8287logplainabout -rw-r--r--nettle.scm4194logplainabout -rw-r--r--networking.scm177343logplainabout -rw-r--r--nfs.scm7518logplainabout -rw-r--r--nickle.scm2467logplainabout -rw-r--r--nicotine.scm3764logplainabout -rw-r--r--nim.scm7659logplainabout -rw-r--r--ninja.scm3146logplainabout -rw-r--r--node-xyz.scm61093logplainabout -rw-r--r--node.scm38942logplainabout -rw-r--r--notcurses.scm3208logplainabout -rw-r--r--noweb.scm5108logplainabout -rw-r--r--nss.scm10494logplainabout -rw-r--r--ntp.scm9549logplainabout -rw-r--r--nutrition.scm6528logplainabout -rw-r--r--nvi.scm4375logplainabout -rw-r--r--ocaml.scm324930logplainabout -rw-r--r--ocr.scm12297logplainabout -rw-r--r--onc-rpc.scm7116logplainabout -rw-r--r--openbox.scm4401logplainabout -rw-r--r--opencl.scm14796logplainabout -rw-r--r--opencog.scm11859logplainabout -rw-r--r--openkinect.scm5553logplainabout -rw-r--r--openldap.scm19407logplainabout -rw-r--r--openpgp.scm7835logplainabout -rw-r--r--openstack.scm41203logplainabout -rw-r--r--orange.scm7668logplainabout -rw-r--r--orpheus.scm4051logplainabout -rw-r--r--ots.scm3434logplainabout -rw-r--r--package-management.scm92950logplainabout -rw-r--r--pantheon.scm5920logplainabout -rw-r--r--parallel.scm21446logplainabout -rw-r--r--pascal.scm13100logplainabout -rw-r--r--password-utils.scm53389logplainabout d---------patches67516logplain -rw-r--r--patchutils.scm20897logplainabout -rw-r--r--patool.scm3535logplainabout -rw-r--r--pciutils.scm7462logplainabout -rw-r--r--pcre.scm5942logplainabout -rw-r--r--pdf.scm59620logplainabout -rw-r--r--pem.scm1789logplainabout -rw-r--r--pep.scm13227logplainabout -rw-r--r--perl-check.scm59142logplainabout -rw-r--r--perl-compression.scm8270logplainabout -rw-r--r--perl-maths.scm2883logplainabout -rw-r--r--perl-web.scm4692logplainabout -rw-r--r--perl.scm461246logplainabout -rw-r--r--perl6.scm30806logplainabout -rw-r--r--phabricator.scm3286logplainabout -rw-r--r--photo.scm32524logplainabout -rw-r--r--php.scm21765logplainabout -rw-r--r--piet.scm7482logplainabout -rw-r--r--pikchr.scm2608logplainabout -rw-r--r--pkg-config.scm7116logplainabout -rw-r--r--plan9.scm2724logplainabout -rw-r--r--plotutils.scm18467logplainabout -rw-r--r--poedit.scm2875logplainabout -rw-r--r--polkit.scm10948logplainabout -rw-r--r--popt.scm6253logplainabout -rw-r--r--presentation.scm3947logplainabout -rw-r--r--pretty-print.scm15620logplainabout -rw-r--r--printers.scm2676logplainabout -rw-r--r--profiling.scm17227logplainabout -rw-r--r--prolog.scm7257logplainabout -rw-r--r--protobuf.scm17683logplainabout -rw-r--r--pth.scm2759logplainabout -rw-r--r--pulseaudio.scm21321logplainabout -rw-r--r--pumpio.scm2676logplainabout -rw-r--r--pure.scm2629logplainabout -rw-r--r--purescript.scm5467logplainabout -rw-r--r--pv.scm1974logplainabout -rw-r--r--python-build.scm18947logplainabout -rw-r--r--python-check.scm89280logplainabout -rw-r--r--python-compression.scm16163logplainabout -rw-r--r--python-crypto.scm62380logplainabout -rw-r--r--python-science.scm58480logplainabout -rw-r--r--python-web.scm285225logplainabout -rw-r--r--python-xyz.scm1140106logplainabout -rw-r--r--python.scm43545logplainabout