mirror of
https://github.com/LnL7/nix-darwin.git
synced 2025-03-06 16:57:08 +00:00
This process was automated by [my fork of `nix-doc-munge`]; thanks to @pennae for writing this tool! It automatically checks that the resulting documentation doesn't change, although my fork loosens this a little to ignore some irrelevant whitespace and typographical differences. As of this commit there is no DocBook remaining in the options documentation. You can play along at home if you want to reproduce this commit: $ NIX_PATH=nixpkgs=flake:nixpkgs/c1bca7fe84c646cfd4ebf3482c0e6317a0b13f22 \ nix shell nixpkgs#coreutils \ -c find . -name '*.nix' \ -exec nix run github:emilazy/nix-doc-munge/0a7190f600027bf7baf6cb7139e4d69ac2f51062 \ {} + [my fork of `nix-doc-munge`]: https://github.com/emilazy/nix-doc-munge
126 lines
3.6 KiB
Nix
126 lines
3.6 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
inherit (pkgs) stdenv;
|
|
|
|
cfg = config.system;
|
|
|
|
script = import ../lib/write-text.nix {
|
|
inherit lib;
|
|
mkTextDerivation = name: text: pkgs.writeScript "activate-${name}" text;
|
|
};
|
|
|
|
in
|
|
|
|
{
|
|
options = {
|
|
|
|
system.activationScripts = mkOption {
|
|
internal = true;
|
|
type = types.attrsOf (types.submodule script);
|
|
default = {};
|
|
description = lib.mdDoc ''
|
|
A set of shell script fragments that are executed when a NixOS
|
|
system configuration is activated. Examples are updating
|
|
/etc, creating accounts, and so on. Since these are executed
|
|
every time you boot the system or run
|
|
{command}`nixos-rebuild`, it's important that they are
|
|
idempotent and fast.
|
|
'';
|
|
};
|
|
|
|
};
|
|
|
|
config = {
|
|
|
|
system.activationScripts.script.text = ''
|
|
#! ${stdenv.shell}
|
|
set -e
|
|
set -o pipefail
|
|
export PATH="${pkgs.gnugrep}/bin:${pkgs.coreutils}/bin:@out@/sw/bin:/usr/bin:/bin:/usr/sbin:/sbin"
|
|
|
|
systemConfig=@out@
|
|
|
|
_status=0
|
|
trap "_status=1" ERR
|
|
|
|
# Ensure a consistent umask.
|
|
umask 0022
|
|
|
|
${cfg.activationScripts.preActivation.text}
|
|
|
|
${cfg.activationScripts.extraActivation.text}
|
|
${cfg.activationScripts.groups.text}
|
|
${cfg.activationScripts.users.text}
|
|
${cfg.activationScripts.applications.text}
|
|
${cfg.activationScripts.pam.text}
|
|
${cfg.activationScripts.patches.text}
|
|
${cfg.activationScripts.etc.text}
|
|
${cfg.activationScripts.defaults.text}
|
|
${cfg.activationScripts.launchd.text}
|
|
${cfg.activationScripts.nix-daemon.text}
|
|
${cfg.activationScripts.time.text}
|
|
${cfg.activationScripts.networking.text}
|
|
${cfg.activationScripts.keyboard.text}
|
|
${cfg.activationScripts.fonts.text}
|
|
|
|
${cfg.activationScripts.postActivation.text}
|
|
|
|
# Ensure /run exists.
|
|
if [ ! -e /run ]; then
|
|
ln -sfn private/var/run /run
|
|
fi
|
|
|
|
# Make this configuration the current configuration.
|
|
# The readlink is there to ensure that when $systemConfig = /system
|
|
# (which is a symlink to the store), /run/current-system is still
|
|
# used as a garbage collection root.
|
|
ln -sfn "$(readlink -f "$systemConfig")" /run/current-system
|
|
|
|
# Prevent the current configuration from being garbage-collected.
|
|
ln -sfn /run/current-system /nix/var/nix/gcroots/current-system
|
|
|
|
exit $_status
|
|
'';
|
|
|
|
system.activationScripts.userScript.text = ''
|
|
#! ${stdenv.shell}
|
|
set -e
|
|
set -o pipefail
|
|
export PATH="${pkgs.gnugrep}/bin:${pkgs.coreutils}/bin:@out@/sw/bin:/usr/bin:/bin"
|
|
|
|
systemConfig=@out@
|
|
|
|
_status=0
|
|
trap "_status=1" ERR
|
|
|
|
# Ensure a consistent umask.
|
|
umask 0022
|
|
|
|
${cfg.activationScripts.preUserActivation.text}
|
|
|
|
${cfg.activationScripts.checks.text}
|
|
${cfg.activationScripts.extraUserActivation.text}
|
|
${cfg.activationScripts.userDefaults.text}
|
|
${cfg.activationScripts.userLaunchd.text}
|
|
${cfg.activationScripts.homebrew.text}
|
|
|
|
${cfg.activationScripts.postUserActivation.text}
|
|
|
|
exit $_status
|
|
'';
|
|
|
|
# Extra activation scripts, that can be customized by users
|
|
# don't use this unless you know what you are doing.
|
|
system.activationScripts.extraActivation.text = mkDefault "";
|
|
system.activationScripts.preActivation.text = mkDefault "";
|
|
system.activationScripts.postActivation.text = mkDefault "";
|
|
system.activationScripts.extraUserActivation.text = mkDefault "";
|
|
system.activationScripts.preUserActivation.text = mkDefault "";
|
|
system.activationScripts.postUserActivation.text = mkDefault "";
|
|
|
|
};
|
|
}
|