
NixOS en Raspberry Pi
Instalando NixOS en una Pi 3 B+
[!NOTE] Debes tener raspbian instalado.
Aumentar RAM con SWAP
[!NOTE] Esto no es indispensable pero en el caso de la Raspberry Pi 3 B +, que solo viene con 1GB de RAM es recomendable aumentarlo.
sudo dphys-swapfile swapoff
sudo nano /etc/dphys-swapfile
Cada 1024
es 1GB.
CONF_SWAPSIZE=1024
sudo dphys-swapfile setup
sudo dphys-swapfile swapon
sudo reboot
Generando .img
de NixOS para Raspberry
sudo apt install curl xz-utils git
curl -L https://nixos.org/nix/install | sh
- Copiamos el comando que nos aparece al final de la instalación de nix:
. /home/wilovy/.nix-profile/etc/profile.d/nix.sh
- Creamos un archivo
~/.config/nix/nix.conf
con el contenido:
experimental-features = nix-command flakes
- Creamos un archivo
flake.nix
(se puede crear donde sea, recomiendo que sea en ~) con el siguiente contenido:
{
description = "Base system for raspberry pi";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixos-generators = {
url = "github:nix-community/nixos-generators";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
self,
nixpkgs,
nixos-generators,
...
}: {
nixosModules = {
system = {
disabledModules = [
"profiles/base.nix"
];
system.stateVersion = "24.11";
};
users = {
users.users = {
# Aqui podemos cambiar el nombre de nuestro usuario que queremos crear.
admin = {
# Esta contraseña da igual, se cambiara al final solo sirve al inicio
password = "admin123";
isNormalUser = true;
extraGroups = ["wheel" "networkmanager"];
};
};
};
};
packages.aarch64-linux = {
sdcard = nixos-generators.nixosGenerate {
system = "aarch64-linux";
format = "sd-aarch64";
modules = [
./extra-config.nix
self.nixosModules.system
self.nixosModules.users
];
};
};
};
}
- Creamos otro archivo
extra-config.nix
{pkgs, ...}: {
networking.firewall.enable = false;
networking.networkmanager.enable = true;
networking.firewall.allowedTCPPorts = [22];
nix.settings.experimental-features = ["nix-command" "flakes"];
nixpkgs.config.allowUnfree = true;
environment.systemPackages = with pkgs; [
openssh
vim
];
security.polkit.enable = true;
services.dbus = {
enable = true;
};
swapDevices = [
{
device = "/swapfile";
size = 2 * 1024;
}
];
services.openssh = {
enable = true;
ports = [22];
};
}
- Ahora si corremos el siguiente comando a la altura de nuestro
flake.nix
NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM=1 nix build --impure .#packages.aarch64-linux.sdcard
- Ahora tenemos que cargar ese
.img
que se genero en nuestra micro sd e iniciar la raspberry pi
nix-channel --update
nixos-generate-config
[!NOTE] Si ocupamos conectarnos con wifi lo hacemos con
nmtui
.
- Actualizamos
sudo nix-channel --upgrade
[!NOTE] Esto puede tardar varios minutos
sudo nixos-rebuild switch -I nixos-config=/etc/nixos/configuration.nix
- Modificamos la configuración de nix
{pkgs, ...}: {
imports = [
./hardware-configuration.nix
];
boot.loader.grub.enable = false;
boot.loader.generic-extlinux-compatible.enable = true;
networking.hostName = "nixrpi";
networking.networkmanager.enable = true;
time.timeZone = "America/Monterrey";
# El nombre del usuario debe ser el mismo que habiamos asignado al inicio
users.users.admin = {
isNormalUser = true;
extraGroups = ["wheel" "networkmanager" "docker"];
};
i18n.defaultLocale = "en_US.UTF-8";
networking.firewall.allowedTCPPorts = [22];
services.openssh = {
enable = true;
ports = [22];
};
security.polkit.enable = true;
services.dbus = {
enable = true;
};
swapDevices = [
{
device = "/swapfile";
size = 3 * 1024;
}
];
nix.settings.experimental-features = ["nix-command" "flakes"];
nixpkgs.config.allowUnfree = true;
environment.systemPackages = with pkgs; [
vim
curl
git
gh
];
system.stateVersion = "25.05";
}
- Rebuildeamos
sudo nixos-rebuild switch -I nixos-config=/etc/nixos/configuration.nix
- Cambiamos la contraseña de nuestro nuevo usuario
passwd USER_DEFINIDO