Blog: Configurando NixOS en otra PC usando Flakes

Este tutorial explica cómo levantar una configuración previa de NixOS utilizando Flakes. Con este enfoque, centralizamos la configuración del sistema en un repositorio Git, facilitando la replicación del entorno en diferentes máquinas.


1. Requisitos previos

  1. Tener NixOS instalado en la máquina.
  2. Tener Flakes habilitado (lo explicaremos en este tutorial).
  3. Contar con un repositorio de dotfiles en un servicio como GitHub que incluya los archivos necesarios.

2. Pasos básicos

Paso 1: Clonar tu repositorio

Primero, clona tu repositorio de dotfiles en un directorio temporal. Por ejemplo:

cd ~
git clone <URL_DEL_REPOSITORIO> nixos-config
cd nixos-config

Asegúrate de que tu repositorio incluya un archivo flake.nix, que es el núcleo de tu configuración.


Paso 2: Verifica tu configuración en flake.nix

Tu archivo flake.nix debería lucir similar al siguiente ejemplo:

{
  description = "A simple NixOS flake";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/master";
    home-manager = {
      url = "github:nix-community/home-manager/release-24.05";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, home-manager, ... }@inputs: {
    nixosConfigurations.akerman = nixpkgs.lib.nixosSystem {
      system = "x86_64-linux";
      modules = [
        ./configuration.nix
        home-manager.nixosModules.home-manager
        {
          home-manager.useGlobalPkgs = true;
          home-manager.useUserPackages = true;

          home-manager.users.akerman = import ./home.nix;
        }
      ];
    };
  };
}

Nota importante sobre el usuario:

El atributo home-manager.users.<usuario> en flake.nix debe coincidir con:

  • El nombre del usuario definido en el archivo configuration.nix (clave users.users).
  • El usuario que usas para iniciar sesión en tu sistema.

En este caso, el usuario es akerman. Si el usuario de tu sistema es diferente, cámbialo en el archivo flake.nix y también en los archivos que lo referencian, como home.nix.


Paso 3: Habilita Flakes

Para usar Flakes, asegúrate de habilitar las características experimentales. Edita el archivo /etc/nixos/configuration.nix (o usa el equivalente en tu Flake si no tienes este archivo activo) y agrega lo siguiente:

nix.settings.experimental-features = [ "nix-command" "flakes" ];

Luego, reconstruye el sistema:

sudo nixos-rebuild switch

Paso 4: Reconstruye el sistema usando el Flake

Con Flakes habilitado, puedes reconstruir tu sistema con:

sudo nixos-rebuild switch --flake .#<nombre>

Donde <nombre> es el nombre definido en nixosConfigurations dentro del flake.nix. En nuestro ejemplo:

sudo nixos-rebuild switch --flake .#akerman

Si el nombre no coincide, el sistema no sabrá cuál configuración usar. Por eso, asegúrate de que:

  • El nombre en flake.nix coincida con el que indicas en el comando.
  • Las configuraciones referencien correctamente tu usuario.

3. Estructura básica de los archivos

Archivo flake.nix Define los inputs (como nixpkgs) y la configuración del sistema:

{
  inputs = { ... };
  outputs = { ... };
}

Archivo configuration.nix Incluye configuraciones globales del sistema, como paquetes y servicios:

{
  imports = [ ./hardware-configuration.nix ];
  users.users.akerman = { ... };
}

Archivo home.nix Define configuraciones específicas del entorno de usuario, como aplicaciones y ajustes personalizados:

{
  home.username = "akerman";
  home.homeDirectory = "/home/akerman";
}

4. Conclusión

Con este enfoque, tu configuración de NixOS se centraliza en el Flake, facilitando su replicación en nuevas máquinas. Solo asegúrate de:

  1. Clonar correctamente tu repositorio.
  2. Verificar que los nombres de usuario coincidan entre flake.nix y tu sistema.
  3. Reconstruir el sistema usando Flakes.