aboutsummaryrefslogtreecommitdiff
#pragma once

#include "types.hh"
#include "hash.hh"

#include <map>


namespace nix {


/* Extension of derivations in the Nix store. */
const string drvExtension = ".drv";


/* Abstract syntax of derivations. */

struct DerivationOutput
{
    Path path;
    string hashAlgo; /* hash used for expected hash computation */
    string hash; /* expected hash, may be null */
    DerivationOutput()
    {
    }
    DerivationOutput(Path path, string hashAlgo, string hash)
    {
        this->path = path;
        this->hashAlgo = hashAlgo;
        this->hash = hash;
    }
    void parseHashInfo(bool & recursive, HashType & hashType, Hash & hash) const;
};

typedef std::map<string, DerivationOutput> DerivationOutputs;

/* For inputs that are sub-derivations, we specify exactly which
   output IDs we are interested in. */
typedef std::map<Path, StringSet> DerivationInputs;

typedef std::map<string, string> StringPairs;

struct Derivation
{
    DerivationOutputs outputs; /* keyed on symbolic IDs */
    DerivationInputs inputDrvs; /* inputs that are sub-derivations */
    PathSet inputSrcs; /* inputs that are sources */
    string platform;
    Path builder;
    Strings args;
    StringPairs env;
};


class StoreAPI;


/* Write a derivation to the Nix store, and return its path. */
Path writeDerivation(StoreAPI & store,
    const Derivation & drv, const string & name, bool repair = false);

/* Read a derivation from a file. */
Derivation readDerivation(const Path & drvPath);

/* Print a derivation. */
string unparseDerivation(const Derivation & drv);

/* Check whether a file name ends with the extensions for
   derivations. */
bool isDerivation(const string & fileName);

/* Return true iff this is a fixed-output derivation. */
bool isFixedOutputDrv(const Derivation & drv);

Hash hashDerivationModulo(StoreAPI & store, Derivation drv);

/* Memoisation of hashDerivationModulo(). */
typedef std::map<Path, Hash> DrvHashes;

extern DrvHashes drvHashes;

/* Split a string specifying a derivation and a set of outputs
   (/nix/store/hash-foo!out1,out2,...) into the derivation path and
   the outputs. */
typedef std::pair<string, std::set<string> > DrvPathWithOutputs;
DrvPathWithOutputs parseDrvPathWithOutputs(const string & s);

Path makeDrvPathWithOutputs(const Path & drvPath, const std::set<string> & outputs);

bool wantOutput(const string & output, const std::set<string> & wanted);

PathSet outputPaths(const Derivation & drv);

}
-tooltip'>The (gnu system accounts) module is meant to be used both on the build- and on the host-side. * gnu/system/shadow.scm <top level>: Call 'default-shell'. (<user-account>, <user-group>): Move to... * gnu/system/accounts.scm: ... here. New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add system/accounts.scm. Ludovic Courtès 2018-10-19system: Rename .zlogin to .zprofile....Reported by Meiyo Peng <meiyo.peng@gmail.com>. * gnu/system/shadow.scm (default-skeletons): Rename zlogin to zprofile. Chris Marusich 2018-07-23system: '.guile' skeleton now recommends 'guile-colorized'....* gnu/system/shadow.scm (default-skeletons)[".guile"]: Recommend 'guile-colorized'. Ludovic Courtès 2018-07-05Don't force colour in aliases....* gnu/system/shadow.scm (default-skeletons): Substitute ‘--color=auto’ for ‘--color’ (which implies ‘=always’) in aliases. * doc/guix.texi (G-Expressions): Also adjust examples as that makes more sense. Tobias Geerinckx-Rice 2018-06-11system: Default .bashrc now sources /etc/bashrc....This is a followup to commit 1382bde93c3ccb5be6b846b932edd7707fac1a3e, which disabled automatic sourcing of /etc/bashrc by interactive shell. The noticeable effect of the change would be that Bash completion would only work in login shells. * gnu/system/shadow.scm (default-skeletons)["bashrc"]: Source /etc/bashrc. Ludovic Courtès 2018-04-04system: Add default '.nanorc' with syntax highlighting....* gnu/system/shadow.scm (default-skeletons): Add ".nanorc". Ludovic Courtès 2018-01-11Merge branch 'master' into core-updatesLeo Famulari 2018-01-09system: Extend .gdbinit to authorize extensions from /gnu/store/*/lib....* gnu/system/shadow.scm (default-skeletons)["gdbinit"]: Add 'auto-load safe-path' statement. Ludovic Courtès 2017-12-08gnu: guile: Move Readline support to a separate 'guile-readline' package....This reduces the closure of Guile from 131 MiB to 116 MiB and removes extra readline/ncurses builds from the bootstrap path. * gnu/packages/guile.scm (guile-2.0)[inputs]: Remove READLINE. (make-guile-readline): New procedure. (guile-readline): New variable. * gnu/system/shadow.scm (default-skeletons): Adjust '.guile' so that it gracefully deals with missing (ice-9 readline). Ludovic Courtès 2017-11-01system: Return early in skeleton '.bashrc' when the shell is non-interactive....* gnu/system/shadow.scm (default-skeletons)[bashrc]: Add return statement. Marius Bakke 2017-11-01system: Test for interactive shell instead of `cat` in skeleton '.bashrc'....* gnu/system/shadow.scm (default-skeletons)[bashrc]: Wrap $SSH_CLIENT test in a conditional testing for interactive shell. Marius Bakke 2017-07-27system: Add 'grep --color' alias in '.bash_profile' skeleton....* gnu/system/shadow.scm (default-skeletons)[profile]: Add 'grep' alias. Ludovic Courtès 2017-07-25system: Add a default '.guile' skeleton....* gnu/system/shadow.scm (default-skeletons): Add ".guile". Ludovic Courtès 2017-07-11system: Refer to native packages when appropriate....* gnu/system/locale.scm (localedef-command): Use the native LIBC. * gnu/system/shadow.scm (default-skeletons): Use the native GUILE-WM. Ludovic Courtès 2017-05-03ui: Rename '_' to 'G_'....This avoids collisions with '_' when the latter is used as a 'match' pattern for instance. See <https://lists.gnu.org/archive/html/guix-devel/2017-04/msg00464.html>. * guix/ui.scm: Rename '_' to 'G_'. * po/guix/Makevars (XGETTEXT_OPTIONS): Adjust accordingly. * build-aux/compile-all.scm (warnings): Remove 'format'. * gnu/packages.scm, gnu/services.scm, gnu/services/shepherd.scm, gnu/system.scm, gnu/system/shadow.scm, guix/gnupg.scm, guix/http-client.scm, guix/import/cpan.scm, guix/import/elpa.scm, guix/import/pypi.scm, guix/nar.scm, guix/scripts.scm, guix/scripts/archive.scm, guix/scripts/authenticate.scm, guix/scripts/build.scm, guix/scripts/challenge.scm, guix/scripts/container.scm, guix/scripts/container/exec.scm, guix/scripts/copy.scm, guix/scripts/download.scm, guix/scripts/edit.scm, guix/scripts/environment.scm, guix/scripts/gc.scm, guix/scripts/graph.scm, guix/scripts/hash.scm, guix/scripts/import.scm, guix/scripts/import/cpan.scm, guix/scripts/import/cran.scm, guix/scripts/import/crate.scm, guix/scripts/import/elpa.scm, guix/scripts/import/gem.scm, guix/scripts/import/gnu.scm, guix/scripts/import/hackage.scm, guix/scripts/import/nix.scm, guix/scripts/import/pypi.scm, guix/scripts/import/stackage.scm, guix/scripts/lint.scm, guix/scripts/offload.scm, guix/scripts/pack.scm, guix/scripts/package.scm, guix/scripts/perform-download.scm, guix/scripts/publish.scm, guix/scripts/pull.scm, guix/scripts/refresh.scm, guix/scripts/size.scm, guix/scripts/substitute.scm, guix/scripts/system.scm, guix/ssh.scm, guix/upstream.scm: Use 'G_' instead of '_'. Most of this change was obtained by running: "sed -i -e's/(_ "/(G_ "/g' `find -name \*.scm`". Ludovic Courtès 2017-02-01system: More 'file-append' instead of #~(string-append #$thing …)....* gnu/system/shadow.scm (<user-account>)[shell]: Use 'file-append'. (%base-user-accounts): Likewise. * gnu/system/grub.scm (%background-image): Likewise. Ludovic Courtès 2017-02-01system: Create home directories once 'file-systems' is up....Fixes <http://bugs.gnu.org/21108>. Reported by Andy Patterson <ajpatter@uwaterloo.ca> and Leo Famulari <leo@famulari.name>. * gnu/build/activation.scm (activate-users+groups)[activate-user]: Pass #:create-home? #t iff CREATE-HOME? and SYSTEM?. (activate-user-home): New procedure. * gnu/system/shadow.scm (account-shepherd-service): New procedure. (account-service-type)[extensions]: Add SHEPHERD-ROOT-SERVICE-TYPE extension. * gnu/tests/base.scm (run-basic-test)["home"] ["skeletons in home directories"]: New tests. * gnu/tests/install.scm (%separate-home-os, %separate-home-os-source) (%test-separate-home-os): New variables. Ludovic Courtès 2016-08-28system: Do not create the home directory of "nobody"....Fixes <http://bugs.gnu.org/24275>. Reported by John Darrington <john@darrington.wattle.id.au>. * gnu/system/shadow.scm (%base-user-accounts): Add (create-home-directory? #f) for "nobody". Ludovic Courtès 2016-08-28system: Add 'create-home-directory?' field to <user-account>....* gnu/system/shadow.scm (<user-account>)[create-home-directory?]: New field. (user-account->gexp): Serialize it. * gnu/build/activation.scm (activate-users+groups)[activate-user]: Update 'match-lambda' pattern accordingly. Pass #:create-home? to 'ensure-user'. (add-user, modify-user, ensure-user): Add #:create-home? parameter and honor it. * doc/guix.texi (User Accounts): Document it. Ludovic Courtès 2016-07-20Merge branch 'master' into core-updatesLudovic Courtès 2016-07-13system: Change the shell of 'nobody' to 'nologin'....Fixes <http://bugs.gnu.org/23971>. Reported by Vincent Legoll <vincent.legoll@gmail.com>. * gnu/system/shadow.scm (%base-user-accounts): Add 'shell' field. Set 'home-directory' to "/nonexistent". Ludovic Courtès 2016-07-12gnu: Switch to 'with-imported-modules'....* gnu/services.scm (directory-union): Use 'with-imported-modules' instead of the '#:modules' argument of 'computed-file'. * gnu/services/base.scm (udev-rules-union): Likewise. * gnu/services/dbus.scm (system-service-directory): Likewise. * gnu/services/desktop.scm (wrapped-dbus-service): (polkit-directory): Likewise. * gnu/services/networking.scm (tor-configuration->torrc): Likewise. * gnu/services/xorg.scm (xorg-configuration-directory): Likewise. * gnu/system/install.scm (self-contained-tarball): Likewise. * gnu/system/linux-container.scm (container-script): Likewise. * gnu/system/linux-initrd.scm (expression->initrd): Likewise, and remove #:modules parameter. (flat-linux-module-directory): Use 'with-imported-modules'. (base-initrd): Likewise. * gnu/system/locale.scm (locale-directory): Likewise. * gnu/system/shadow.scm (default-skeletons): Likewise. * gnu/system/vm.scm (expression->derivation-in-linux-vm): Likewise. * gnu/tests/base.scm (run-basic-test): Likewise. * gnu/tests/install.scm (run-install): Likewise. * doc/guix.texi (Initial RAM Disk): Update 'expression->initrd' documentation. Ludovic Courtès 2016-05-13Merge branch 'master' into core-updatesLeo Famulari 2016-05-06system: Do not export PS1 in /etc/skel/.bashrc....* gnu/system/shadow.scm (default-skeletons)[bashrc]: Remove "export" for 'PS1'. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Alex Griffin 2016-04-03gnu: fontconfig: Find fonts in the system profile....Fixes <http://bugs.gnu.org/22927>. Reported by myglc2 <myglc2@gmail.com>. This also reverts commit e71ef7adaece7e132a5059139122b45083ea1b39. * gnu/packages/fontutils.scm (fontconfig)[arguments]: Add /run/current-system/profile/share/fonts to --with-add-fonts configure flag. * gnu/system/shadow.scm (default-skeletons): Do not create "fonts.conf" file. Alex Kost 2016-03-20system: Make sure fonts are searched for in the system profile....This fixes a bug whereby fonts in /run/current-system/profile would be invisible to Fontconfig. * gnu/packages/fontutils.scm (fontconfig): Add comment about system profile not being searched. * gnu/system/shadow.scm (default-skeletons)[fonts.conf-content, fonts.conf]: New variable. Add FONTS.CONF to the skeletons. Ludovic Courtès 2016-03-20system: Allow account skeletons to be directories....* gnu/system/shadow.scm (skeleton-directory): Use 'copy-recursively' instead of 'copy-file'. * gnu/build/activation.scm (copy-account-skeletons): Likewise. Ludovic Courtès