[Nix-dev] How to create dirs needed by a module before it runs?
Jeff Johnson
jefdaj at gmail.com
Fri Jan 23 19:45:28 CET 2015
Hi all! I'm trying to set up tarsnap on nixos. This is my tarsnap.nix so far:
config:
let
keySrc = ../rawpriv/tarsnap;
cacheDir = "/var/cache/tarsnap";
rcSrc = builtins.toFile "tarsnaprc" ''
aggressive-networking # TODO is this a good idea?
humanize-numbers
'';
script = homeDir:
let
keyDst = "${homeDir}/tarsnap.key";
rcDst = "${homeDir}/.tarsnaprc";
in ''
echo "installing ${keyDst}" ; install -m400
${keySrc}/`hostname`.key ${keyDst}
echo "installing ${rcDst}" ; ln -fs ${rcSrc} ${rcDst}
echo "installing ${cacheDir}"; mkdir -p ${cacheDir}
'';
in {
system.activationScripts = { tarsnap = script "/root"; };
services.tarsnap = {
inherit config;
enable = true;
keyfile = keyDst;
cachedir = cacheDir;
};
}
It works except that the keyfile and cachedir only get installed at
the end, so nix complains that they don't exist unless I create them
manually first. Is there a way to make the script run earlier? And
another possibly-related question: is there a way to find out the
hostname? I can't just do `networking.hostName` because that's set in
the top-level config after this module runs. Do I just pass it as an
argument? Thanks
Jeff
More information about the nix-dev
mailing list