Saltar al contenido principal

Componentes base para armar un entorno Linux

  • Compositor: En Wayland, maneja tanto el display como las ventanas
  • Shell: El programa que interpreta tus comandos (bash, fish, etc.)
  • Tiling WM: Las ventanas se organizan automáticamente sin superponerse.
  • Stacking WM: Ventanas tradicionales que se pueden superponer
  • Multiplexor: Permite múltiples sesiones de terminal, persistentes

1. Hardware / GPU / Input Devices

Aquí se ubican los controladores y configuraciones de bajo nivel (drivers de GPU, soporte de dispositivos de entrada, discos y sistemas de archivos).

Por ahora esta sección quedará en blanco, ya que después se puede ampliar con temas como zram, ext4, btrfs, etc.

2. Display Server Protocol

El protocolo gráfico que gestiona la comunicación entre aplicaciones y la GPU.

  • Wayland → moderno, diseñado para reemplazar X11.
  • X11 → más antiguo, aún muy extendido.

3. Compositor / Window Manager

Los compositores y gestores de ventanas definen cómo se muestran y organizan las ventanas. Algunos se enfocan en tiling (mosaico automático), otros en stacking (ventanas flotantes).

3.1 Compositores para Wayland

  • Hyprland → tiling dinámico, moderno, con efectos.
  • Sway → similar a i3, pero para Wayland.
  • river → minimalista, tiling puro.
  • Wayfire → estilo Compiz, con efectos 3D.
  • Weston → referencia oficial de Wayland.

3.2 Window Managers para X11

  • Qtile → tiling, configurable en Python.
  • i3 → clásico, manual.
  • bspwm → ventanas organizadas como árbol binario.
  • Openbox → stacking, muy ligero.
  • AwesomeWM → tiling, extensible con Lua.
  • xmonad → tiling, programado en Haskell.
  • dwm → tiling minimalista, requiere recompilar.

3.3 Desktop Environments (Todo-en-uno)

  • COSMIC (System76) → nuevo, modular, en Rust.
  • KDE Plasma → KWin (Wayland/X11).
  • GNOME → Mutter (Wayland/X11).

4. Emulador de Terminal

El emulador de terminal es la aplicación donde se ejecuta la shell y los comandos del sistema.

4.1. Moderno

Terminales diseñadas para aprovechar aceleración gráfica, mayor rendimiento y configuraciones avanzadas.

  • Ghostty → nuevo, enfocado en rendimiento y simplicidad.
  • Alacritty → rápido, minimalista, sin pestañas.
  • Kitty → acelerado por GPU, muy configurable.
  • Foot → nativo de Wayland, muy ligero y veloz.
  • WezTerm → muy potente, multiplataforma, configurable en Lua.

4.2. Clásico

Opciones tradicionales, integradas en entornos de escritorio o muy usadas en sistemas antiguos.

  • GNOME Terminal / Konsole / XFCE Terminal → vienen en entornos de escritorio completos.
  • xterm → clásico, muy liviano.
  • urxvt → ligero, minimalista, con extensiones en Perl.

5. Shell (intérprete de comandos)

La shell es el corazón de la interacción en terminal. Aquí se escriben comandos, scripts y pipelines.

  • Nushell → orientado a datos, con salida estructurada.
  • Bash → el más común y tradicional.
  • Fish → moderno, amigable, autocompletado inteligente.
  • Zsh → muy personalizable, popular con Oh-My-Zsh.
  • Dash → minimalista, usado en scripts de sistema.

Extra: starship - Prompt universal que funciona con cualquier shell

6. Multiplexor de Terminal

Los multiplexores permiten dividir la terminal en paneles, mantener sesiones persistentes y trabajar en múltiples entornos dentro de una sola ventana.

  • Zellij → moderno, con plugins y enfoque en UX.
  • tmux → el clásico, potente y muy extendido.
  • byobu → frontend para tmux/screen, más amigable.

Instalación semi-automatizada (imperativa)

Este método combina una instalación mínima de Arch con herramientas para automatizar pasos manuales (instalar paquetes, aplicar dotfiles). No es completamente declarativo, pero acelera el proceso.

Imperativo: Tú dices qué hacer paso a paso.

1. Instalación minima

1. Bootloader

  • systemd-boot (moderno, simple, UEFI)
  • GRUB (compatible BIOS/UEFI, más universal)

2. Usuario y permisos

  • Usuario normal + sudo configurado
  • Posibilidad de cambiar shell por defecto (fish/zsh/bash)

3. Red / Internet

  • NetworkManager → gestión de conexiones (Ethernet, Wi-Fi)
  • systemd-resolved → resolución de DNS
  • Alternativa mínima: dhcpcd / netctl si no se quiere NetworkManager

4. Paquetes base esenciales

  • base-devel → compilación de software, requerido por AUR helpers
  • git → clonar repositorios, indispensable para dotfiles y scripts
  • curl / wget → descargar scripts y recursos externos
  • tar, gzip, unzip → manipular archivos comprimidos
  • jq → procesar JSON en scripts
  • sed, awk → procesamiento de texto en scripts
  • coreutils → utilidades básicas de Linux
  • Editor mínimo: nano o vim → para edición inicial de configs

5. Lenguajes / runtimes

  • Rust / rustup → compilar herramientas Rust (Dotter, etc.)
  • Python / pip → si alguna herramienta lo requiere
  • Opcional: Node.js / npm → si usarás herramientas JavaScript

6. AUR helper

  • paru → recomendado, moderno y mantenido
  • Alternativa: yay → más clásico

7. Shell por defecto

  • Nushell / Bash / Fish / Zsh → según preferencias personales

8. Opcionales recomendados

  • Sistema de archivos preparado: ext4, btrfs, zram
  • Herramientas de red adicionales: ping, net-tools, iproute2
  • Terminal mínima: xterm o similar para entornos gráficos mínimos

2. Task runner

Los task runners ayudan a automatizar comandos repetitivos: instalar paquetes, configurar servicios, aplicar cambios.

  • Just → moderno, simple, inspirado en make. just setup
  • Taskfile → pensado más para pipelines complejos (CI/CD).
  • Make Universal, simple, clásico
  • moon: Task runner para monorepos (se orientan más a desarrollo CI/CD que a dotfiles/config personal)
  • earthly: Build automation con containerización (se orientan más a desarrollo CI/CD que a dotfiles/config personal)

3. Manejo de dotfiles

Gestores de dotfiles para mantener configuraciones sincronizadas entre equipos.

  • ★ chezmoi
  • Dotter (Rust, emergente)
  • GNU Stow (clásico)
  • yadm / rcm (opciones heredadas)

Instalación automatizada (declarativa)

Describes el estado deseado (paquetes, configs, dotfiles) y la herramienta asegura que se cumpla.

  • Esto es lo que usarías día a día para instalar o configurar tu sistema.
  • En tu setup sería:
    1. just setup → ejecuta todo lo que definiste en tu Justfile.
    2. chezmoi apply → aplica tus dotfiles y configuraciones declaradas.
  • Ventaja: rápido, declarativo, reproducible.
  • Limitación: depende de que just y chezmoi ya estén instalados y funcionando correctamente.

1. Instalación minima

1. Bootloader

  • systemd-boot (moderno, simple, UEFI)
  • GRUB (compatible BIOS/UEFI, más universal)

2. Usuario y permisos

  • Usuario normal + sudo configurado
  • Posibilidad de cambiar shell por defecto (fish/zsh/bash)

3. Red / Internet

  • NetworkManager → gestión de conexiones (Ethernet, Wi-Fi)
  • systemd-resolved → resolución de DNS
  • Alternativa mínima: dhcpcd / netctl si no se quiere NetworkManager

4. Paquetes base esenciales

  • base-devel → compilación de software, requerido por AUR helpers
  • git → clonar repositorios, indispensable para dotfiles y scripts
  • curl / wget → descargar scripts y recursos externos
  • tar, gzip, unzip → manipular archivos comprimidos
  • jq → procesar JSON en scripts
  • sed, awk → procesamiento de texto en scripts
  • coreutils → utilidades básicas de Linux
  • Editor mínimo: nano o vim → para edición inicial de configs

5. Lenguajes / runtimes

  • Rust / rustup → compilar herramientas Rust (Dotter, etc.)
  • Python / pip → si alguna herramienta lo requiere
  • Opcional: Node.js / npm → si usarás herramientas JavaScript

6. AUR helper

  • paru → recomendado, moderno y mantenido
  • Alternativa: yay → más clásico

7. Shell por defecto

  • Fish / Zsh / Bash → según preferencias personales

8. Opcionales recomendados

  • Sistema de archivos preparado: ext4, btrfs, zram
  • Herramientas de red adicionales: ping, net-tools, iproute2
  • Terminal mínima: xterm o similar para entornos gráficos mínimos

2. Infra declarativa

  • Nix + Home Manager → modelo declarativo para gestionar paquetes, dotfiles y configuraciones en un solo flujo.
    • Nix instala paquetes en /nix/store independiente de pacman.
    • Home Manager permite declarar shell, editor, programas y dotfiles en un archivo .nix.
    • Un solo comando (home-manager switch) aplica todo el entorno.
    • Sustituye a Chezmoi/Stow + Ansible, pero de forma declarativa.
  • Ansible → automatización de servidores y configs, útil pero menos ágil para uso personal comparado con Nix.
  • Salt, Puppet, Chef → orientados a infraestructura empresarial. Menos prácticos en entornos personales.

(Alternativa experimental: GNU Guix → similar a Nix, más enfocado en software libre, pero con menos ecosistema que Nix.)

Scripts de Respaldo*

  • Scripts Bash para bootstrapping, troubleshooting, servidores y recuperación de desastres.
  • Just/chezmoi para el día a día.

El problema

Útil para escenarios problemáticos:

  1. Nueva máquina sin just: Necesitas instalar just para usar tu Justfile, pero ¿cómo instalas just sin just?
  2. Sistema mínimo: Servidor o container donde solo tienes bash básico
  3. Troubleshooting: chezmoi o Nix fallan, necesitas restaurar configs manualmente
  4. Compatibilidad: Colaboras con alguien que no usa tus herramientas

La Solución: Dual Scripts

Los scripts de respaldo son tu red de seguridad para escenarios problemáticos: primera instalación sin Just, sistemas mínimos, troubleshooting o colaboración con alguien que no usa tus herramientas modernas.

Estructura recomendada:

~/dotfiles/
├── justfile # Herramienta principal
├── scripts/
│ ├── 01-bootstrap.sh # Script de arranque universal (Bash puro)
│ ├── 02-install-packages.sh # Instala solo paquetes
│ ├── 03-restore-configs.sh # Aplica solo dotfiles/configs
│ ├── 04-setup-minimal.sh # Setup mínimo, servidor o container
│ └── 05-emergency-restore.sh # Recuperación ante fallos graves
└── .chezmoi/
└── run_once_setup.sh # Hooks de chezmoi para ejecución inicial

Ventaja: Puedes ejecutar solo el que necesitas según la situación, en vez de correr todo de nuevo.

Ventajas del Enfoque Dual

Escenario 1: Primera instalación

bash

# En una máquina nueva, SOLO con bash disponible:
curl -O https://raw.githubusercontent.com/tu-usuario/dotfiles/main/scripts/bootstrap.sh
chmod +x bootstrap.sh && ./bootstrap.sh

# Después instalar herramientas modernas:
pacman -S just
just setup # Ahora ya funciona

Escenario 2: Troubleshooting

bash

# Si chezmoi/just fallan:
cd ~/dotfiles/scripts
./install-packages.sh # Reinstalar paquetes
./restore-configs.sh # Restaurar configs manualmente

Escenario 3: Servidor/Container

bash

# En un ambiente mínimo:
./scripts/setup-minimal.sh # Solo lo esencial, sin GUI

Puntos Clave

  1. Bash está siempre disponible en cualquier sistema Linux
  2. Independencia de herramientas: No dependes de que just/chezmoi estén instalados
  3. Debugging más fácil: Bash es más directo para troubleshooting
  4. Colaboración: Otros pueden usar tus scripts sin aprender nuevas herramientas

En resumen: just para el uso diario, bash scripts como red de seguridad y para bootstrapping inicial. Es como tener una llave de repuesto - esperas no necesitarla, pero te salva cuando la necesitas.

Cómo encaja todo junto

  1. Primera instalación: manual → preparar sistema base.
  2. Después:
    • Instalación estándar = just setup → rápido, declarativo.
    • Si falla o no puedes usar just01-bootstrap.sh → luego just setup.
  3. Actualizaciones posteriores:
    • Solo ejecutar just setup o chezmoi apply.
    • Scripts de respaldo solo cuando algo rompe o estás en entorno mínimo.

Analogía:

  • Justfile y .chezmoi/ = tu auto que usas siempre para ir a todos lados.
  • Scripts de respaldo = llanta de repuesto + kit de emergencia, solo se usan cuando el auto no arranca.