linuxPackages_latest.broadcom_sta: add patch to compile on Kernel 6.12 (#359484)
[NixPkgs.git] / nixos / modules / virtualisation / vagrant-virtualbox-image.nix
blob78c228bc46fb04ebc1760201624a0bc59d34e137
1 # Vagrant + VirtualBox
3 { config, pkgs, lib, ... }:
6   imports = [
7     ./vagrant-guest.nix
8     ./virtualbox-image.nix
9   ];
11   virtualbox.params = {
12     audio = "none";
13     audioin = "off";
14     audioout = "off";
15     usb = "off";
16     usbehci = "off";
17   };
18   documentation.man.enable = false;
19   documentation.nixos.enable = false;
21   users.extraUsers.vagrant.extraGroups = [ "vboxsf" ];
23   # generate the box v1 format which is much easier to generate
24   # https://www.vagrantup.com/docs/boxes/format.html
25   image.extension = lib.mkOverride 999 "${config.image.baseName}.box";
26   system.nixos.tags = [ "vagrant"];
27   system.build.image = lib.mkOverride 999 config.system.build.vagrantVirtualbox;
28   system.build.vagrantVirtualbox = pkgs.runCommand
29     config.image.fileName
30     {}
31     ''
32       mkdir workdir
33       cd workdir
35     # 1. create that metadata.json file
36     echo '{"provider":"virtualbox"}' > metadata.json
38     # 2. create a default Vagrantfile config
39     cat <<VAGRANTFILE > Vagrantfile
40     Vagrant.configure("2") do |config|
41       config.vm.base_mac = "0800275F0936"
42     end
43     VAGRANTFILE
45     # 3. add the exported VM files
46     tar xvf ${config.system.build.virtualBoxOVA}/*.ova
48     # 4. move the ovf to the fixed location
49     mv *.ovf box.ovf
51     # 5. generate OVF manifest file
52     rm *.mf
53     touch box.mf
54     for fname in *; do
55       checksum=$(sha256sum $fname | cut -d' ' -f 1)
56       echo "SHA256($fname)= $checksum" >> box.mf
57     done
59     # 6. compress everything back together
60     tar --owner=0 --group=0 --sort=name --numeric-owner -czf $out .
61   '';