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