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
- Tener NixOS instalado en la máquina.
- Tener Flakes habilitado (lo explicaremos en este tutorial).
- 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
(claveusers.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:
- Clonar correctamente tu repositorio.
- Verificar que los nombres de usuario coincidan entre
flake.nix
y tu sistema. - Reconstruir el sistema usando Flakes.