mirror of
https://github.com/LnL7/nix-darwin.git
synced 2025-03-13 20:30:02 +00:00
system: add patches module
This commit is contained in:
parent
f0552188ba
commit
77121650d4
4 changed files with 67 additions and 0 deletions
|
@ -23,6 +23,7 @@
|
|||
./system/etc.nix
|
||||
./system/keyboard.nix
|
||||
./system/launchd.nix
|
||||
./system/patches.nix
|
||||
./system/shells.nix
|
||||
./system/version.nix
|
||||
./time
|
||||
|
|
|
@ -57,6 +57,7 @@ in
|
|||
${cfg.activationScripts.users.text}
|
||||
${cfg.activationScripts.nix.text}
|
||||
${cfg.activationScripts.applications.text}
|
||||
${cfg.activationScripts.patches.text}
|
||||
${cfg.activationScripts.etc.text}
|
||||
${cfg.activationScripts.defaults.text}
|
||||
${cfg.activationScripts.launchd.text}
|
||||
|
|
|
@ -86,6 +86,7 @@ in
|
|||
mkdir -p $out/darwin
|
||||
cp -f ${../../CHANGELOG} $out/darwin-changes
|
||||
|
||||
ln -s ${cfg.build.patches}/patches $out/patches
|
||||
ln -s ${cfg.build.etc}/etc $out/etc
|
||||
ln -s ${cfg.path} $out/sw
|
||||
|
||||
|
|
64
modules/system/patches.nix
Normal file
64
modules/system/patches.nix
Normal file
|
@ -0,0 +1,64 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.system;
|
||||
in
|
||||
|
||||
{
|
||||
options = {
|
||||
|
||||
system.patches = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [];
|
||||
example = literalExample ''
|
||||
[
|
||||
(pkgs.writeText "bashrc.patch" ''''
|
||||
--- a/etc/bashrc
|
||||
+++ b/etc/bashrc
|
||||
@@ -8,3 +8,5 @@
|
||||
shopt -s checkwinsize
|
||||
|
||||
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
|
||||
+
|
||||
+if test -e /etc/static/bashrc; then . /etc/static/bashrc; fi
|
||||
'''')
|
||||
]
|
||||
'';
|
||||
description = ''
|
||||
Set of patches to apply to <filename>/</filename>.
|
||||
|
||||
Useful for safely changing system files. Unlike the etc module this
|
||||
won't remove or modify files with unexpected content.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = {
|
||||
|
||||
system.build.patches = pkgs.runCommandNoCC "patches"
|
||||
{ preferLocalBuild = true; }
|
||||
''
|
||||
mkdir -p $out/patches
|
||||
cd $out/patches
|
||||
${concatMapStringsSep "\n" (f: "ln -s '${f}' $(basename '${f}')") cfg.patches}
|
||||
'';
|
||||
|
||||
system.activationScripts.patches.text = ''
|
||||
# Applying patches to /.
|
||||
echo "applying patches..." >&2
|
||||
|
||||
f=$(readlink /run/current-system/patches)
|
||||
if ! test "$f" = ${config.system.build.patches}/patches; then
|
||||
for f in $(find /run/current-system/patches/ -type l); do
|
||||
patch --reverse --backup -d / -p1 < "$f" >/dev/null || true
|
||||
done
|
||||
|
||||
${concatMapStringsSep "\n" (f: "patch --forward --backup -d / -p1 < '${f}' || true") cfg.patches}
|
||||
fi
|
||||
'';
|
||||
|
||||
};
|
||||
}
|
Loading…
Add table
Reference in a new issue