[Nix-dev] How to create dirs needed by a module before it runs?
Jeff Johnson
jefdaj at gmail.com
Fri Jan 23 20:17:37 CET 2015
Oh weird, maybe I need to go back and see if I did something wrong
with the hostname, because now that I think about it you're
right--they should all be evaluated at once. I think the
system.activationScripts are an exception though. They seem to run
after everything's evaluated (they print their "installing" messages
right after nix does "setting up /etc..." but before it starts systemd
units). Which is the sensible way to do it, you wouldn't want them to
run before nix knows the expressions are valid. I was mostly wondering
if there's a separate "pre-nix-eval" hook somewhere. I could see it
being useful for other things too, like checking that the nixpkgs repo
exists if you have your own or aborting if there's no network
connection.
Jeff
On 1/23/15, Wout Mertens <wout.mertens at gmail.com> wrote:
> What do you mean with "only get installed at the end"?
>
> Also, networking.hostName should work, the whole config gets evaluated "at
> once". There's no "running" in Nix, only side-effects of evaluation.
>
> Wout.
>
> On Fri Jan 23 2015 at 7:45:38 PM Jeff Johnson <jefdaj at gmail.com> wrote:
>
>> 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
>> _______________________________________________
>> nix-dev mailing list
>> nix-dev at lists.science.uu.nl
>> http://lists.science.uu.nl/mailman/listinfo/nix-dev
>>
>
More information about the nix-dev
mailing list