X Linux
Menú de documentación

Resumen/Scripts y CLI

x — CLI

x es la CLI de aprovisionamiento del sistema x (ADR-0003 en DECISIONS.md en la raíz del workspace). Su implementación vive en bin/ de este repo y se instala como /usr/bin/x (symlink a /usr/share/x/bin/x) con el paquete x-scripts. Trabajando desde un checkout se invoca como bash bin/x.

El despacho es por convención de nombres más metadatos en comentarios de cabecera, sin registro central: añadir un comando es añadir un archivo en bin/.

Uso

x <command> [arguments]
x help          # o: x list, x -h, x --help

x sin argumentos imprime la ayuda. El dispatcher exporta X_BIN (el directorio bin/) y X_CLI=1 para que los subcomandos sepan que corren vía CLI.

Comandos

Los resúmenes son las cabeceras x:summary de cada archivo (los muestra x help).

ComandoDescripción
x setupAprovisiona el sistema como root (install/system.sh; config, hardware, login, post-install). Eleva con sudo si hace falta.
x setup --userAprovisiona al usuario actual (install/user.sh; seed del home + sync de config + node e Hyprland opcionales).
x theme listLista los temas disponibles bajo themes/.
x theme set <name>Aplica un tema: copia themes/<name>/colors a ~/.config/x/theme.conf (con backup del anterior) y registra el tema activo en ~/.local/state/x/theme.
x migrateEjecuta las migraciones idempotentes pendientes del usuario.
x updatepacman -Syu (privilegiado) seguido de las migraciones del usuario.
x hardwareEjecuta la fase de hardware (detección + módulos). Requiere root.
x infoMuestra versión, repo, usuario e info del entorno.
x agent / x agent installInstala el bundle de IA de Xscriptor para OpenCode (--bundle x|dev|full, --env NAME, --project, --dest DIR, --source DIR, --ref REF, --dry-run, --list). Las fuentes se resuelven desde X_AGENT_SOURCE/XSCRIPTOR_AI_DIR, un checkout hermano xscriptor-ai, o una descarga pinned (X_AGENT_REF, cacheada en X_AGENT_CACHE).
x agent statusMuestra los destinos registrados, los conteos y la fuente en uso.
x agent removeElimina exactamente los archivos registrados en el manifiesto (--dest DIR, --all, --dry-run).
x gen / x gen listLista las generaciones del sistema (* marca la actual). Ver generations.md.
x gen newCrea una generación: snapshot btrfs + manifiesto (--reason, --label).
x gen statusMuestra running vs default, rollback pendiente y el drift de /etc (--json).
x gen rollback <id>Cambia el default boot a una generación (aplica al reiniciar; --no-safety).
x gen bootRegenera las entries de boot por generación.
x gen diffMuestra diferencias de paquetes/servicios/migraciones/kernel//etc entre dos generaciones.
x gen verifyCompara el sistema vivo contra una generación (exit 1 con drift).
x gen pin <id>Protege una generación del podado (--unpin).
x gen pruneElimina generaciones viejas conservando pinned/running/default (--keep N, --older-than DAYS, --dry-run).
x gen restore <path>Restaura un archivo/directorio desde una generación (--from ID, --dest PATH).
x gen restore --pkg <name>Restaura todos los archivos de un paquete.
x gen export / x gen importEmpaqueta/restaura un bundle de generación (--with-data, --force).
x gen plan / x gen applyImprime/aplica un system.toml declarativo (--dry-run); registra una generación.
x gen quota init / statusHabilita quotas btrfs y muestra uso / tabla de qgroups.
x home / x home listLista las generaciones de home del usuario (dotfiles).
x home new / status / diff / restore / pruneCiclo de vida de las generaciones de home. Ver generations.md.

Los comandos solo-root lo hacen cumplir dentro del dispatcher (ver metadatos más abajo) e imprimen un error si se ejecutan como usuario no root.

Aliases

Los aliases se definen con el metadato x:aliases y permiten que un token único mapee a un archivo de comando:

AliasResuelve a
theme, themesx-theme-list.sh (así x theme lista los temas)
hardware, hwx-hardware.sh
info, status, doctorx-info.sh
migrate, migrationsx-migrate.sh
update, upgrade, upx-update.sh
gen, generation, generationsx-gen-list.sh (así x gen lista las generaciones)

Mecánica del despacho

La resolución prueba primero el prefijo de nombre de archivo más largo y luego cae al primer argumento comparado contra x:aliases:

  • x theme set nord → busca x-theme.sh, luego x-theme-set.sh; existe este último, así que nord se pasa a x-theme-set.sh.
  • x theme (token único) → no hay x-theme.sh; el alias theme de x-theme-list.sh coincide.
  • x inexistente → error con ayuda (exit 1).

El archivo debe ser ejecutable para poder resolverse. El dispatcher solo consume x:summary, x:aliases y x:root; el resto de argumentos se reenvían al subcomando, que valida sus propios argumentos (x setup --help, x theme set con arity incorrecto da error, etc.).

Cómo añadir un comando

Crea bin/x-<grupo>-<verbo>.sh como script ejecutable con metadatos en la cabecera:

#!/usr/bin/env bash
# x:summary=una línea mostrada por x help
# x:aliases=alias1 alias2      # opcional
# x:root=true                  # opcional: exige root para ejecutarse
set -euo pipefail

X_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# ...
  • x:summary — descripción de una línea, mostrada en x help y x list.
  • x:aliases — aliases opcionales separados por espacios, resueltos contra el primer token.
  • x:root=true — hace que el dispatcher se niegue a ejecutarlo como usuario no root.
  • x:args — opcional; solo informativo, no lo parsea el dispatcher. Úsalo para documentar los argumentos esperados en la cabecera.

No hay registro central ni paso de registro.

Variables de entorno

VariableDefaultSignificado
X_BIN<repo>/binDirectorio de la CLI (lo exporta el dispatcher).
X_CLI—1 cuando corre vía dispatcher (lo exporta él).
X_ROOT<repo>Raíz del repo/payload (la exporta install/helpers/common.sh).
X_STATE_DIR~/.local/state/xDirectorio de estado de usuario (tema, marcadores de migración).
X_THEMES_DIR<repo>/themesAlmacén de temas.
X_THEME_CONF~/.config/x/theme.confArchivo de salida de x theme set.
X_MIGRATIONS_DIR<repo>/migrationsDirectorio de scripts de migración.
X_SKEL_DIR/etc/skelSkeleton que se siembra en el home.
X_CONFIG_SEED<repo>/configÁrbol de dotfiles que se sincroniza a ~/.config.
X_TStimestamp actualTimestamp usado para backups .bak.<ts>.
X_DRY_RUN01 hace que los helpers privilegiados/de usuario registren en lugar de ejecutar.
X_NODE01 instala el toolchain de node (fnm) en la fase de usuario.
X_HYPRLAND10 omite el setup de Hyprland en la fase de usuario.
X_HW_AUTO10 desactiva la autodetección de hardware en la fase de hardware.
X_HW_NVIDIA01 fuerza el módulo NVIDIA.
X_HW_QEMU01 habilita el módulo QEMU/libvirt.
X_GEN_BACKENDautoauto, btrfs, dir (tests/degradado) u off. Ver generations.md.
X_GEN_STATE / X_GEN_DIR / X_GEN_CURRENT/var/lib/x/...Estado, manifiestos e id actual de las generaciones.
X_GEN_SNAPSHOTS/.snapshotsStore de snapshots (punto de montaje).
X_GEN_SUBVOL_PREFIXautoRuta in-fs usada por las opciones de montaje/arranque (se deriva de @snapshots).
X_GEN_ROOT/Árbol capturado por una generación (los tests usan una raíz falsa).
X_GEN_CMDLINE/proc/cmdlineCmdline del kernel registrado en el manifiesto.
X_GEN_BOOT / X_GEN_BOOT_DIR / X_GEN_BOOT_KEEPauto / /boot / 3Gestión y retención de entries de boot.
X_GEN_KEEP5Retención de generaciones para x gen prune.
X_GEN_LIVE_SUBVOL—root_subvol de la generación viva (el instalador usa /@).
X_GEN_RUNNINGdel cmdlineId de la generación running (tests).
X_GEN_SKIP01 desactiva las generaciones automáticas en los hooks de setup/update.
X_HGEN_STATE / X_HGEN_HOME~/.local/share/x/home-gens / $HOMEStore y home capturado de las generaciones de home.
X_HGEN_INCLUDE / X_HGEN_EXCLUDEdotfiles + .config / Cache CachedData GPUCache logsRutas capturadas por x home new.
X_HGEN_KEEP10Retención de generaciones de home para x home prune.
X_HGEN_SKIP01 desactiva las capturas automáticas de home.

Las variables específicas del setup de Hyprland (X_HYPR_*) se documentan en hyprland.md.

Estado

  • ~/.local/state/x/ — estado de usuario: theme (tema activo) y migrations/<name> (marcadores de migración aplicada).
  • ~/.config/x/ — config de usuario generada, p.ej. theme.conf.
  • ~/.local/share/x/home-gens/ — generaciones de home (manifiesto, copia de dotfiles y files.sha256).
  • /var/lib/x/ — estado de sistema: generations/<id>/ (manifiestos y capturas) y current (id de la generación actual); los snapshots viven en /.snapshots/.

Los overrides de entorno anteriores permiten que los tests y el desarrollo redirijan cada ruta de estado/salida fuera del home real (ver test/smoke.sh).

x setup --online

Ejecuta el instalador original de equisdots (equisdots/dots setup) desde un clon temporal y lo limpia después. Úsalo cuando ya hayas iniciado sesión y el setup empaquetado offline no baste. Pedirá la contraseña de sudo cuando el script original la necesite.

x setup --user --online

Editar esta página en GitHub