Init commit - debian with GUI
This commit is contained in:
84
vm.nix
Normal file
84
vm.nix
Normal file
@@ -0,0 +1,84 @@
|
||||
# vm.nix
|
||||
let
|
||||
pkgs = import <nixpkgs> {};
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user