+ }) networks) // (lib.mapAttrs' (name: pool: lib.nameValuePair "libvirtd-pool-${name}" {
+ after = [ "libvirtd.service" ];
+ requires = [ "libvirtd.service" ];
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ Type = "oneshot";
+ RemainAfterExit = "yes";
+ };
+ script = let
+ xml = pkgs.writeText "libvirt-pool-${name}.xml" ''
+ <pool type="${pool.type}">
+ <name>${name}</name>
+ <uuid>UUID</uuid>
+ ${pool.xml or ""}
+ ${if pool ? target then ''
+ <target>
+ <path>${pool.target}</path>
+ </target>
+ '' else ""}
+ </pool>
+ '';
+ in pool.preStart or "" + ''
+ uuid="$(${pkgs.libvirt}/bin/virsh pool-uuid '${name}' || true)"
+ ${pkgs.libvirt}/bin/virsh pool-define <(sed "s/UUID/$uuid/" '${xml}')
+ ${pkgs.libvirt}/bin/virsh pool-start '${name}' || true
+ '';
+ }) pools);