python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / config / system-path.nix
blobe8bbeac4f7206029b8f093d3eaad10763067301f
1 # This module defines the packages that appear in
2 # /run/current-system/sw.
4 { config, lib, pkgs, ... }:
6 with lib;
8 let
10   requiredPackages = map (pkg: setPrio ((pkg.meta.priority or 5) + 3) pkg)
11     [ pkgs.acl
12       pkgs.attr
13       pkgs.bashInteractive # bash with ncurses support
14       pkgs.bzip2
15       pkgs.coreutils-full
16       pkgs.cpio
17       pkgs.curl
18       pkgs.diffutils
19       pkgs.findutils
20       pkgs.gawk
21       pkgs.stdenv.cc.libc
22       pkgs.getent
23       pkgs.getconf
24       pkgs.gnugrep
25       pkgs.gnupatch
26       pkgs.gnused
27       pkgs.gnutar
28       pkgs.gzip
29       pkgs.xz
30       pkgs.less
31       pkgs.libcap
32       pkgs.ncurses
33       pkgs.netcat
34       config.programs.ssh.package
35       pkgs.mkpasswd
36       pkgs.procps
37       pkgs.su
38       pkgs.time
39       pkgs.util-linux
40       pkgs.which
41       pkgs.zstd
42     ];
44   defaultPackageNames =
45     [ "nano"
46       "perl"
47       "rsync"
48       "strace"
49     ];
50   defaultPackages =
51     map
52       (n: let pkg = pkgs.${n}; in setPrio ((pkg.meta.priority or 5) + 3) pkg)
53       defaultPackageNames;
54   defaultPackagesText = "[ ${concatMapStringsSep " " (n: "pkgs.${n}") defaultPackageNames } ]";
59   options = {
61     environment = {
63       systemPackages = mkOption {
64         type = types.listOf types.package;
65         default = [];
66         example = literalExpression "[ pkgs.firefox pkgs.thunderbird ]";
67         description = lib.mdDoc ''
68           The set of packages that appear in
69           /run/current-system/sw.  These packages are
70           automatically available to all users, and are
71           automatically updated every time you rebuild the system
72           configuration.  (The latter is the main difference with
73           installing them in the default profile,
74           {file}`/nix/var/nix/profiles/default`.
75         '';
76       };
78       defaultPackages = mkOption {
79         type = types.listOf types.package;
80         default = defaultPackages;
81         defaultText = literalMD ''
82           these packages, with their `meta.priority` numerically increased
83           (thus lowering their installation priority):
85               ${defaultPackagesText}
86         '';
87         example = [];
88         description = lib.mdDoc ''
89           Set of default packages that aren't strictly necessary
90           for a running system, entries can be removed for a more
91           minimal NixOS installation.
93           Note: If `pkgs.nano` is removed from this list,
94           make sure another editor is installed and the
95           `EDITOR` environment variable is set to it.
96           Environment variables can be set using
97           {option}`environment.variables`.
99           Like with systemPackages, packages are installed to
100           {file}`/run/current-system/sw`. They are
101           automatically available to all users, and are
102           automatically updated every time you rebuild the system
103           configuration.
104         '';
105       };
107       pathsToLink = mkOption {
108         type = types.listOf types.str;
109         # Note: We need `/lib' to be among `pathsToLink' for NSS modules
110         # to work.
111         default = [];
112         example = ["/"];
113         description = lib.mdDoc "List of directories to be symlinked in {file}`/run/current-system/sw`.";
114       };
116       extraOutputsToInstall = mkOption {
117         type = types.listOf types.str;
118         default = [ ];
119         example = [ "doc" "info" "devdoc" ];
120         description = lib.mdDoc "List of additional package outputs to be symlinked into {file}`/run/current-system/sw`.";
121       };
123       extraSetup = mkOption {
124         type = types.lines;
125         default = "";
126         description = lib.mdDoc "Shell fragments to be run after the system environment has been created. This should only be used for things that need to modify the internals of the environment, e.g. generating MIME caches. The environment being built can be accessed at $out.";
127       };
129     };
131     system = {
133       path = mkOption {
134         internal = true;
135         description = lib.mdDoc ''
136           The packages you want in the boot environment.
137         '';
138       };
140     };
142   };
144   config = {
146     environment.systemPackages = requiredPackages ++ config.environment.defaultPackages;
148     environment.pathsToLink =
149       [ "/bin"
150         "/etc/xdg"
151         "/etc/gtk-2.0"
152         "/etc/gtk-3.0"
153         "/lib" # FIXME: remove and update debug-info.nix
154         "/sbin"
155         "/share/emacs"
156         "/share/hunspell"
157         "/share/nano"
158         "/share/org"
159         "/share/themes"
160         "/share/vim-plugins"
161         "/share/vulkan"
162         "/share/kservices5"
163         "/share/kservicetypes5"
164         "/share/kxmlgui5"
165         "/share/systemd"
166         "/share/thumbnailers"
167       ];
169     system.path = pkgs.buildEnv {
170       name = "system-path";
171       paths = config.environment.systemPackages;
172       inherit (config.environment) pathsToLink extraOutputsToInstall;
173       ignoreCollisions = true;
174       # !!! Hacky, should modularise.
175       # outputs TODO: note that the tools will often not be linked by default
176       postBuild =
177         ''
178           # Remove wrapped binaries, they shouldn't be accessible via PATH.
179           find $out/bin -maxdepth 1 -name ".*-wrapped" -type l -delete
181           if [ -x $out/bin/glib-compile-schemas -a -w $out/share/glib-2.0/schemas ]; then
182               $out/bin/glib-compile-schemas $out/share/glib-2.0/schemas
183           fi
185           ${config.environment.extraSetup}
186         '';
187     };
189   };