commit 1b406c954a925436ec72d2392a9ebe8e9a6339ae Author: kenny Date: Sat Feb 7 22:16:14 2026 +0200 Init commit - debian with GUI diff --git a/vm.nix b/vm.nix new file mode 100644 index 0000000..cf86026 --- /dev/null +++ b/vm.nix @@ -0,0 +1,84 @@ +# vm.nix +let + pkgs = import {}; +in + +let + # 1. SOURCE YOUR DEBIAN IMAGE + debianImage = pkgs.fetchurl { + name = "debian-13-genericcloud-amd64.qcow2"; + url = "https://cloud.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2"; + hash = "sha256-V9a6DUghJB5j4Vz9Y5aikZ8syhx5Zn2593m8/8xNwIU="; # REPLACE THIS + }; + + # 2. VM DATA DIRECTORY + vmDataDir = "/home/${builtins.getEnv "USER"}/.local/share/debian-vm"; + + # 3. CREATE ALL FILES IN A SCRIPT + setupScript = pkgs.writeShellScriptBin "setup-vm-files" '' + set -e + + # Create VM directory + mkdir -p "${vmDataDir}" + + # Create persistent disk if it doesn't exist + if [ ! -f "${vmDataDir}/debian-persistent.qcow2" ]; then + echo "Creating persistent disk from base image..." + ${pkgs.qemu}/bin/qemu-img create -f qcow2 \ + -b "${debianImage}" \ + -F qcow2 \ + "${vmDataDir}/debian-persistent.qcow2" + fi + + # Create cloud-init configuration + cat > "${vmDataDir}/user-data" << 'EOF' + #cloud-config + password: nixos + chpasswd: { expire: False } + ssh_pwauth: True + runcmd: + - | + if [ ! -f /etc/vm-initialized ]; then + cd /home/debian + sudo -u debian git clone https://github.com/someone/something + cd something + chmod +x install.sh + sudo -u debian ./install.sh + touch /etc/vm-initialized + fi + EOF + + # Create cloud-init ISO + ${pkgs.cloud-utils}/bin/cloud-localds \ + "${vmDataDir}/cloud-init.iso" \ + "${vmDataDir}/user-data" + + echo "VM files created in ${vmDataDir}" + ''; + + # 4. LAUNCH SCRIPT + runScript = pkgs.writeShellScriptBin "run-debian-vm" '' + set -e + + # Run setup first + ${setupScript}/bin/setup-vm-files + + # Launch QEMU with KVM acceleration + ${pkgs.qemu_kvm}/bin/qemu-kvm \ + -name "Debian-Persistent-VM" \ + -machine accel=kvm \ + -cpu host \ + -m 2048 \ + -drive file="${vmDataDir}/debian-persistent.qcow2",format=qcow2,if=virtio \ + -drive file="${vmDataDir}/cloud-init.iso",format=raw,if=virtio \ + -netdev user,id=n1,hostfwd=tcp::2222-:22 \ + -device virtio-net-pci,netdev=n1 \ + -display gtk \ + -vga virtio \ + "$@" + ''; + +in +{ + system.build.customVM = runScript; +}