const std = @import("std"); const process = std.process; const heap = std.heap; const mem = std.mem; const fs = std.fs; const libvirt = @import("libvirt.zig"); pub fn main() !void { var gpa = heap.GeneralPurposeAllocator(.{}){}; defer _ = gpa.deinit(); const allocator = gpa.allocator(); const connection = try libvirt.Connection.connect("qemu+ssh://jeeves@evil.lan/system", allocator); defer connection.close(); var nix = process.Child.init(&[_][]const u8{ "nix", "build", ".#volume" }, allocator); nix.cwd_dir = try fs.cwd().openDir("flakes/windows/test", .{}); _ = try nix.spawnAndWait(); // const uri = try connection.getURI(); // defer connection.freeURI(uri); // std.debug.print("uri: {s}\n", .{uri}); // const num_active = try connection.numOfDomains(); // const num_inactive = try connection.numOfDefinedDomains(); // std.debug.print("active: {d}, inactive: {d}\n", .{ num_active, num_inactive }); // var domain_iter = connection.iterateDomains(&[_]libvirt.Domain.Flags{ // libvirt.Domain.Flags.ListDomainsActive, // libvirt.Domain.Flags.ListDomainsInactive, // }); // defer domain_iter.deinit(); // while (domain_iter.next()) |domain| { // const active = domain.isActive(); // const name = domain.getName(); // std.debug.print("name: {s}, active: {any}\n", .{ name, active }); // } // var flake = try fs.cwd().createFile("flake.nix", .{}); // defer flake.close(); // try flake.writeAll( // \\{ // \\ description = "vm-flake"; // \\ inputs.oslib.url = "git+https://git.jeevio.xyz/jeeves/oslib"; // \\ outputs = { self, oslib }: oslib.vmFlake { // \\ // \\ }; // \\} // ); } pub const DomainSpec = struct { os: Quad, preinstalledSoftware: []const []const u8, modules: []const []const u8, }; pub const Quad = struct { name: []const u8, version: []const u8, edition: []const u8, arch: []const u8, };