Toda la configuración está escrita en Lisp (Scheme).
Lisp constituye una familia de lenguajes de programación minimalistas como Common Lisp, Scheme o Clojure, todos descienden de un viejo lenguaje de LISP (1960 creado por John McCarthy).
# Cargar teclado español
loadkeys es
# Conectar WiFi
rfkill unblock all
nmcli device wifi list
nmcli device wifi connect "tu-ssid" password "tu-password"
cfdisk /dev/sda
# Crear:
# - /dev/sda1: 512M (EFI System)
# - /dev/sda2: 4G (Linux swap)
# - /dev/sda3: resto (Linux filesystem)
# Formatear
mkfs.fat -F32 /dev/sda1
mkswap /dev/sda2
mkfs.ext4 /dev/sda3
# Montar
mount /dev/sda3 /mnt
mkdir -p /mnt/boot/efi
mount /dev/sda1 /mnt/boot/efi
swapon /dev/sda2
# Generar configuración inicial
herd start cow-store /mnt
guix system init /mnt/etc/config.scm /mnt
Pero antes necesitás crear el archivo /mnt/etc/config.scm. Acá va el equivalente a tu setup de Arch:
(use-modules (gnu)
(gnu packages bash)
(gnu packages linux)
(gnu packages admin)
(gnu packages vim)
(gnu packages wm)
(gnu packages terminals)
(gnu packages web-browsers)
(gnu packages video)
(gnu packages image)
(gnu packages irc)
(gnu packages mail)
(gnu packages tmux)
(gnu packages version-control)
(gnu services networking)
(gnu services desktop)
(gnu services ssh)
(gnu services base))
(use-service-modules desktop networking ssh)
(use-package-modules bootloaders certs suckless wm xorg)
(operating-system
(locale "en_US.utf8")
(timezone "America/Argentina/Buenos_Aires")
(keyboard-layout (keyboard-layout "es"))
(host-name "guix")
(bootloader (bootloader-configuration
(bootloader grub-efi-bootloader)
(targets '("/boot/efi"))
(keyboard-layout keyboard-layout)))
(file-systems (cons* (file-system
(mount-point "/boot/efi")
(device (uuid "TU-UUID-EFI" 'fat32))
(type "vfat"))
(file-system
(mount-point "/")
(device (uuid "TU-UUID-ROOT"))
(type "ext4"))
%base-file-systems))
(swap-devices (list (swap-space
(target (uuid "TU-UUID-SWAP")))))
;; Usuario
(users (cons* (user-account
(name "esotericwarfare")
(comment "Usuario")
(group "users")
(home-directory "/home/esotericwarfare")
(supplementary-groups '("wheel" "netdev" "audio" "video")))
%base-user-accounts))
;; Paquetes del sistema
(packages (append (list
vim
git
tmux
fish
w3m
lynx
mpv
imagemagick
irssi
neomutt
wget
rsync
tree
htop
unzip
nss-certs) ; Certificados SSL importantes
%base-packages))
;; Servicios
(services (append (list
(service network-manager-service-type)
(service wpa-supplicant-service-type)
(service openssh-service-type))
%base-services)))
# Antes de crear el config.scm, obtené los UUIDs:
blkid /dev/sda1 # EFI
blkid /dev/sda2 # SWAP
blkid /dev/sda3 # ROOT
# Copiar el config.scm a /mnt/etc/
mkdir -p /mnt/etc
vim /mnt/etc/config.scm
# Pegá la configuración de arriba con tus UUIDs
# Instalar
guix system init /mnt/etc/config.scm /mnt
# Esto va a tardar bastante, compilando todo desde fuentes
# Después del primer boot
# Cambiar contraseña de root
sudo passwd
# Agregar contraseña a tu usuario
sudo passwd esotericwarfare
# Cambiar shell
chsh -s /run/current-system/profile/bin/fish
Si necesitás drivers propietarios o software no libre:
# Agregar el canal Nonguix
mkdir -p ~/.config/guix
vim ~/.config/guix/channels.scm
Contenido:
(cons* (channel
(name 'nonguix)
(url "https://gitlab.com/nonguix/nonguix")
(branch "master")
(introduction
(make-channel-introduction
"897c1a470da759236cc11798f4e0a5f7d4d59fbc"
(openpgp-fingerprint
"2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D0"))))
%default-channels)
Luego:
guix pull
sudo guix system reconfigure /etc/config.scm
# Paquetes de usuario (no del sistema)
guix install firefox chromium qbittorrent gimp obs tor yt-dlp
/etc/config.scm define TODO el sistemaguix install, guix remove, guix searchsudo guix system roll-back para volver atrásEn Guix tenés binarios precompilados para la mayoría de paquetes populares (llamados “substitutes”). Solo compilás desde source si:
Para Firefox y otros programas grandes, casi siempre hay binarios.
Tenés razón, TODO debe ir en el config.scm para que sea reproducible. Acá te dejo una configuración completa basada en tus paquetes de Arch:
;; /etc/config.scm - Configuración completa del sistema
(use-modules (gnu)
(gnu system)
(gnu system nss)
(gnu packages)
(gnu packages admin)
(gnu packages audio)
(gnu packages base)
(gnu packages bash)
(gnu packages bittorrent)
(gnu packages compression)
(gnu packages curl)
(gnu packages disk)
(gnu packages emacs)
(gnu packages file-systems)
(gnu packages fonts)
(gnu packages freedesktop)
(gnu packages games)
(gnu packages gcc)
(gnu packages gdb)
(gnu packages gnome)
(gnu packages gnuzilla)
(gnu packages image)
(gnu packages image-viewers)
(gnu packages irc)
(gnu packages kde-frameworks)
(gnu packages less)
(gnu packages libusb)
(gnu packages linux)
(gnu packages mail)
(gnu packages man)
(gnu packages music)
(gnu packages ncurses)
(gnu packages networking)
(gnu packages package-management)
(gnu packages pdf)
(gnu packages pulseaudio)
(gnu packages python)
(gnu packages rsync)
(gnu packages samba)
(gnu packages screen)
(gnu packages ssh)
(gnu packages terminals)
(gnu packages tex)
(gnu packages text-editors)
(gnu packages tor)
(gnu packages version-control)
(gnu packages video)
(gnu packages vim)
(gnu packages virtualization)
(gnu packages web)
(gnu packages web-browsers)
(gnu packages wm)
(gnu packages xdisorg)
(gnu packages xorg)
(nongnu packages linux) ; Para kernel no libre si lo necesitás
(nongnu system linux-initrd)) ; Para firmware propietario
(use-service-modules desktop networking ssh xorg)
(operating-system
(locale "en_US.utf8")
(timezone "America/Argentina/Buenos_Aires")
(keyboard-layout (keyboard-layout "es" #:options '("ctrl:nocaps")))
(host-name "guix")
;; Kernel (comentá estas 2 líneas si querés solo software libre)
(kernel linux)
(initrd microcode-initrd)
(firmware (list linux-firmware))
(bootloader (bootloader-configuration
(bootloader grub-efi-bootloader)
(targets '("/boot/efi"))
(keyboard-layout keyboard-layout)))
(file-systems (cons* (file-system
(mount-point "/boot/efi")
(device (uuid "XXXX-XXXX" 'fat32)) ; Reemplazá con tu UUID
(type "vfat"))
(file-system
(mount-point "/")
(device (uuid "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")) ; Tu UUID
(type "ext4"))
%base-file-systems))
(swap-devices (list (swap-space
(target (uuid "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"))))) ; Tu UUID
;; Usuarios
(users (cons* (user-account
(name "esotericwarfare")
(comment "")
(group "users")
(home-directory "/home/esotericwarfare")
(supplementary-groups '("wheel" "netdev" "audio" "video"
"lp" "kvm" "libvirt")))
%base-user-accounts))
;; Sudoers
(sudoers-file (plain-file "sudoers" "\
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
"))
;; PAQUETES DEL SISTEMA - TODO acá para que sea reproducible
(packages (append (list
;; Base
vim
git
tmux
fish-shell
wget
curl
rsync
tree
htop
btop
unzip
unrar
bash-completion
man-db
man-pages
plocate
fzf
bc
jq
;; Network
whois
inetutils
openssh
tor
torsocks
;; Browsers y web
icecat ; Firefox de GNU
ungoogled-chromium ; Chromium sin Google
w3m
lynx
falkon
;; Terminal apps
irssi
neomutt
isync
msmtp
notmuch
newsboat
;; Multimedia
mpv
yt-dlp
imagemagick
gimp
obs
ffmpeg
;; Audio
pipewire
pulseaudio ; o pipewire según prefieras
alsa-utils
;; Documents
libreoffice
evince
texlive
;; Desarrollo
python
python-pip
;; Sway/Wayland
sway
waybar
wofi ; equivalente a dmenu para wayland
foot ; terminal
grim ; screenshots
wl-clipboard
xdg-desktop-portal
xdg-desktop-portal-wlr
;; Fonts
font-terminus
font-google-noto
font-google-noto-emoji
font-google-noto-sans-cjk
;; Virtualización
qemu
virt-manager
;; Torrents
qbittorrent
;; Otros
translate-shell
hugo
telegram-desktop
;; Certificados SSL (IMPORTANTE)
nss-certs
le-certs)
%base-packages))
;; SERVICIOS
(services
(append (list
;; Network
(service network-manager-service-type)
(service wpa-supplicant-service-type)
;; SSH
(service openssh-service-type
(openssh-configuration
(permit-root-login #f)
(password-authentication? #t)))
;; Tor
(service tor-service-type)
;; Desktop/Wayland
(service seatd-service-type)
(service greetd-service-type
(greetd-configuration
(terminals
(list
(greetd-terminal-configuration
(terminal-vt "1")
(terminal-switch #t))))))
;; Audio
(service pipewire-service-type)
;; Samba
(service samba-service-type
(samba-configuration
(config-file (plain-file "smb.conf" "\
[global]
workgroup = WORKGROUP
security = user
"))))
;; Virtualization
(service libvirt-service-type
(libvirt-configuration
(unix-sock-group "libvirt")))
(service virtlog-service-type)
;; Cron
(service mcron-service-type))
;; Servicios base
%base-services))
;; Name service switch (para resolver nombres)
(name-service-switch %mdns-host-lookup-nss))
~/.config/guix/channels.scm)Para tener Nonguix (software no libre):
(list (channel
(name 'nonguix)
(url "https://gitlab.com/nonguix/nonguix")
(branch "master")
(introduction
(make-channel-introduction
"897c1a470da759236cc11798f4e0a5f7d4d59fbc"
(openpgp-fingerprint
"2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D0"))))
(channel
(name 'guix)
(url "https://git.savannah.gnu.org/git/guix.git")
(branch "master")
(introduction
(make-channel-introduction
"9edb3f66fd807b096b48283debdcddccfea34bad"
(openpgp-fingerprint
"BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA")))))
# 1. Editar config.scm
sudo vim /etc/config.scm
# 2. Actualizar canales (equivalente a pacman -Sy)
guix pull
# 3. Reconstruir sistema (aplica cambios)
sudo guix system reconfigure /etc/config.scm
# 4. Ver generaciones disponibles
guix system list-generations
# 5. Rollback si algo falla
sudo guix system roll-back
# 6. Buscar paquetes
guix search firefox
# 7. Ver qué hay instalado
guix package --list-installed
# Todo lo que necesitás es:
/etc/config.scm
~/.config/guix/channels.scm
Con esos 2 archivos podés reproducir tu sistema exactamente en otra máquina.
Nota importante sobre binarios: Cuando hagas guix pull la primera vez, va a descargar MUCHOS substitutes (binarios). Para Firefox, Chromium, LibreOffice, etc., siempre hay binarios disponibles. Solo compilás si instalás algo muy obscuro o modificás las opciones de compilación.
Below is a clean, Arch-mindset, step-by-step guide to install GNU Guix System, explicitly mapped from how you already install Arch.
I’ll reuse your mental model (UEFI+GPT, manual partitioning, Wi-Fi, keymap ES, nonfree firmware) but translate it to Guix terms.
This is not Guix “easy mode” — it’s the right way for someone coming from Arch.
Before commands, this matters:
| Arch | Guix |
|---|---|
| pacman | guix package / guix system |
| mutable system | immutable system (declarative) |
| edit files directly | edit /etc/config.scm |
| reinstall to rollback | guix roll-back |
| AUR | Guix channels |
| systemd | shepherd |
You do not chroot in Guix. You declare the system, then Guix builds it.
Download nonfree ISO (you explicitly asked for nonfree drivers):
👉 Use this one https://guix.gnu.org/download/
Choose:
guix-system-install-1.4.x.x86_64-linux.iso (with firmware)
Write it with dd (from Arch):
sudo dd if=guix-system-install-*.iso of=/dev/sdX bs=4M status=progress oflag=sync
Boot UEFI mode.
Same mindset as your Arch install:
loadkeys es
Time sync:
herd start ntpd
(Check time)
date
Guix uses wpa_supplicant, not iwd.
ip link
Assume wlan0.
wpa_cli
Inside prompt:
scan
scan_results
add_network
set_network 0 ssid "TU_WIFI"
set_network 0 psk "TU_PASSWORD"
enable_network 0
quit
Test:
ping -c 3 dgg.gg
You already understand UEFI + GPT, so we reuse it.
/dev/sdacfdisk /dev/sda
Choose GPT.
Create:
| Partition | Size | Type |
|---|---|---|
| EFI | 300–512M | EFI System |
| Swap | 4G | Linux swap |
| Root | rest | Linux filesystem |
Assume:
/dev/sda1/dev/sda2/dev/sda3mkfs.fat -F32 /dev/sda1
mkswap /dev/sda2
mkfs.ext4 /dev/sda3
Mount:
mount /dev/sda3 /mnt
mkdir -p /mnt/boot/efi
mount /dev/sda1 /mnt/boot/efi
swapon /dev/sda2
This replaces pacstrap + genfstab + arch-chroot.
guix system init /mnt
This creates:
/mnt/etc/config.scm
THIS FILE IS YOUR SYSTEM.
Open it:
nano /mnt/etc/config.scm
Find and edit:
(locale "en_US.utf8")
(timezone "America/Argentina/Buenos_Aires")
(keyboard-layout (keyboard-layout "es"))
Add near the top:
(use-modules (gnu) (nongnu packages linux))
Then replace kernel section with:
(kernel linux)
(firmware (list linux-firmware))
This is the equivalent of linux-firmware in Arch.
Replace bootloader section with:
(bootloader
(bootloader-configuration
(bootloader grub-efi-bootloader)
(targets '("/boot/efi"))
(keyboard-layout keyboard-layout)))
Replace file-systems section with:
(file-systems
(cons*
(file-system
(mount-point "/boot/efi")
(device "/dev/sda1")
(type "vfat"))
(file-system
(mount-point "/")
(device "/dev/sda3")
(type "ext4"))
%base-file-systems))
Swap:
(swap-devices
(list (swap-space (target "/dev/sda2"))))
Add:
(service network-manager-service-type)
Guix does NOT enable it by default.
(users
(cons
(user-account
(name "esotericwarfare")
(comment "Main user")
(group "users")
(supplementary-groups '("wheel" "audio" "video" "netdev")))
%base-user-accounts))
Enable sudo:
(service sudo-service-type)
guix system init /mnt/etc/config.scm /mnt
⚠️ This takes time. Guix builds everything from source or substitutes.
passwd
reboot
Remove USB.
Login as root.
herd start network-manager
passwd esotericwarfare
| Arch | Guix |
|---|---|
| pacman -S | guix install |
| pacman -R | guix remove |
| pacman -Q | guix package -I |
| system packages | config.scm |
| user packages | guix install |
Example:
guix install vim tmux git mpv neomutt w3m
Equivalent to pacman -Syu:
guix pull
sudo guix system reconfigure /etc/config.scm
Rollback if broken:
sudo guix system roll-back
Guix supports sway, dwm, xfce, etc, but installed declaratively.
Example sway:
(service sway-service-type)
Or Xorg + dwm (manual like you prefer).
Think of Guix as:
Git + Nix + Arch philosophy without bullshit
Tell me what you want next and I’ll go deep, no hand-holding.