Alexander Derevianko baf2f6438f Add zsh, add home-manager
2025-07-26 12:16:27 +02:00
2025-07-26 12:16:27 +02:00
2025-07-26 12:16:27 +02:00
2025-07-26 09:31:44 +02:00
2025-07-26 12:16:27 +02:00
2025-07-26 12:16:27 +02:00
2025-07-26 12:16:27 +02:00

Installing NixOS on a Proxmox VM using nixos-anywhere

Abstract This guide documents the process for a minimal installation of NixOS on a Proxmox virtual machine. It leverages the nixos-anywhere tool for remote deployment and disko for declarative disk partitioning.

Prerequisites on the Target VM

Before attempting to install NixOS with nixos-anywhere, you must first perform a critical setup step on the target Proxmox VM.

The minimal NixOS installation ISO does not have a default password for the root user. The nixos-anywhere command requires SSH access, which necessitates a password.

  1. Boot the Proxmox VM using the minimal NixOS installation ISO.
  2. Open a terminal on the VM's console.
  3. Set a password for the root user by running the following command:

    passwd

    You will be prompted to enter and confirm a new password.

Installation Process

Deploying NixOS

With the root password set on the target VM, you can now run nixos-anywhere from your local machine to deploy your NixOS configuration.

The following command uses nix run to execute nixos-anywhere, pointing it to a specific flake output (.#susano-minimal) and the IP address of the target VM.

nix run github:nix-community/nixos-anywhere -- \
  --flake .#susano-minimal \
  --target-host root@192.168.1.85

Note on Hardware Configuration

While not used in the command above, nixos-anywhere can automatically generate a hardware configuration file from the target machine. This is useful for capturing machine-specific settings.

To do this, include the --generate-hardware-config flag in your command. The following example shows how to generate the file and save it as ./hardware-configuration.nix in your local flake directory.

nix run github:nix-community/nixos-anywhere -- \
  --flake .#your-flake-output \
  --target-host root@192.168.1.85 \
  --generate-hardware-config ./hardware-configuration.nix

Key Configuration Details

Disko Configuration for Proxmox (MBR Boot)

A critical requirement for ensuring a NixOS VM can boot correctly in Proxmox is the disk partition scheme. Proxmox expects a Master Boot Record (MBR) compatible setup.

When using disko for declarative disk management, you must configure it to create a GPT partition table that includes a special 1M BIOS boot partition (type EF02). This partition is specifically used by GRUB for MBR compatibility.

Here is an example snippet for the disko configuration:

{
  disko.devices = {
    disk = {
      main = {
        device = "/dev/sda";
        type = "disk";
        content = {
          type = "gpt";
          partitions = {
            boot = {
              size = "1M";
              type = "EF02"; # for grub MBR
            };
            # ... your other partitions like root, swap, etc.
          };
        };
      };
    };
  };
}

For a complete example, you can refer to the official disko repository: gpt-bios-compat.nix.

TODOs

  • Refactor the disko configuration to make the disk device name (e.g., /dev/sda) a variable. This will avoid hardcoding the value and make the configuration more portable across different hardware setups.
S
Description
No description provided
Readme 282 KiB
Languages
Nix 77.6%
Emacs Lisp 16.6%
Shell 5.8%