1
0
Fork 0
selfhostblocks/_disnix/utils.nix

88 lines
2.3 KiB
Nix

{ stdenv
, pkgs
, lib
}:
with lib;
with lib.lists;
with lib.attrsets;
rec {
tmpFilesFromDirectories = user: group: d:
let
wrapTmpfiles = dir: mode: "d '${dir}' ${mode} ${user} ${group} - -";
in
mapAttrsToList wrapTmpfiles d;
systemd = {
mkService = {name, content, timer ? null}: stdenv.mkDerivation {
inherit name;
src = pkgs.writeTextDir "${name}.service" content;
timerSrc = pkgs.writeTextDir "${name}.timer" timer;
installPhase = ''
mkdir -p $out/etc/systemd/system
cp $src/*.service $out/etc/systemd/system
'' + (if timer == null then "" else ''
cp $timerSrc/*.timer $out/etc/systemd/system
'');
};
};
mkConfigFile = {dir, name, content}: stdenv.mkDerivation rec {
inherit name;
src = pkgs.writeTextDir name content;
buildCommand = ''
mkdir -p $out
cp ${src}/${name} $out/${name}
echo "${dir}" > $out/.dysnomia-targetdir
cat > $out/.dysnomia-fileset <<FILESET
symlink $out/${name}
target .
FILESET
'';
};
dnsmasqConfig = domain: subdomains:
''
${concatMapStringsSep "\n" (x: "address=/${x}.${domain}/127.0.0.1") subdomains}
domain=${domain}
'';
keyEnvironmentFile = path: "EnvironmentFile=/run/keys/${path}";
keyEnvironmentFiles = names: concatMapStrings (path: "${keyEnvironmentFile path}\n") (attrValues names);
keyServiceDependencies = names: concatMapStringsSep " " (path: "${path}-key.service") (attrValues names);
recursiveMerge = attrList:
let f = attrPath:
zipAttrsWith (n: values:
if all isList values then
concatLists values
else if all isAttrs values then
f (attrPath ++ [n]) values
else
last values
);
in f [] attrList;
getTarget = distribution: name: builtins.elemAt (builtins.getAttr name distribution) 0;
getDomain = distribution: name: (getTarget distribution name).containers.system.domain;
unitDepends = verb: dependsOn:
let
withSystemdUnitFile = filter (hasAttr "systemdUnitFile") (attrValues dependsOn);
systemdUnitFiles = map (x: x.systemdUnitFile) withSystemdUnitFile;
in
if length systemdUnitFiles == 0 then
""
else
"${verb}=${concatStringsSep " " systemdUnitFiles}";
}