|
1 | | - |
2 | | -# dotfiles — Inicio rápido |
| 1 | +# 🗄️ dotfiles — Windows 95/98 Retro Experience |
3 | 2 |
|
4 | | -Este repositorio contiene configuraciones (dotfiles) organizadas en módulos (`modules/`) y administradas mediante un instalador mapeado (`./scripts/install.sh`). |
| 3 | +Este repositorio contiene una colección de configuraciones (dotfiles) algunas diseñadas para recrear la icónica estética **Windows 95/98 (Retro/Chicago95)** en entornos modernos de Linux y Windows. Todo el sistema está gestionado por un potente instalador multiplataforma escrito en **Python**. |
5 | 4 |
|
6 | | -Guía rápida — pasos esenciales: |
| 5 | +--- |
7 | 6 |
|
8 | | -1) Clona el repo y prepara LFS/submódulos: |
| 7 | +## 🚀 Inicio Rápido |
| 8 | + |
| 9 | +### 1) Preparación |
| 10 | +Clona el repositorio e inicializa los componentes pesados (imágenes y fuentes): |
9 | 11 |
|
10 | 12 | ```bash |
11 | 13 | git clone --recurse-submodules https://github.com/JotaRandom/dotfiles.git ~/dotfiles |
12 | 14 | cd ~/dotfiles |
13 | | -git lfs install |
14 | | -git lfs pull |
15 | | -git submodule update --init --recursive |
| 15 | +git lfs install && git lfs pull |
16 | 16 | ``` |
17 | 17 |
|
18 | | -2) Ejecuta el instalador (Linux / WSL): |
| 18 | +### 2) Instalación (Gestor Python) |
| 19 | +El instalador en Python es el motor principal que gestiona symlinks, backups automáticos y sanitización de archivos. |
| 20 | + |
| 21 | +> [!TIP] |
| 22 | +> Si tu intérprete de Python por defecto ya es la versión 3, puedes usar `python` en lugar de `python3` en los siguientes comandos. |
19 | 23 |
|
| 24 | +**Instalación completa (Recomendado):** |
20 | 25 | ```bash |
21 | | -./scripts/install.py modules/editor/nvim modules/shell/zsh |
| 26 | +python3 scripts/install.py install |
22 | 27 | ``` |
23 | 28 |
|
24 | | -3) En Windows (PowerShell): |
| 29 | +**Instalación de módulos específicos:** |
| 30 | +```bash |
| 31 | +python3 scripts/install.py install modules/desktop/gtk modules/shell/zsh |
| 32 | +``` |
25 | 33 |
|
| 34 | +**Uso en Windows (PowerShell):** |
26 | 35 | ```powershell |
27 | | -./scripts/install.ps1 modules/editor/nvim modules/shell/zsh |
| 36 | +./scripts/install.ps1 |
28 | 37 | ``` |
29 | 38 |
|
30 | | -Estructura breve del repo: |
31 | | - |
32 | | - - `modules/*`: Cada carpeta contiene un módulo con la estructura de archivos de destino (por ejemplo `modules/nvim/.config/nvim/init.vim`). Este instalador aplica symlinks directamente usando `install-mappings.yml` y sanea CRLFs y conflictos, lo que evita la creación accidental de archivos visibles en `$HOME`. |
33 | | -- `install-mappings.yml`: Reglas declarativas (XDG/HOME) que el instalador usa para colocar archivos en las rutas correctas. |
34 | | - |
35 | | -Cómo funciona `install.sh` (explicado de forma muy simple): |
36 | | - |
37 | | -- Piensa en cada módulo como una caja con la estructura relativa de destino para los archivos. `./scripts/install.sh` lee `install-mappings.yml` y crea symlinks deterministas en `$TARGET` (por defecto `~`). |
38 | | -- Si un archivo no tiene un mapeo explícito y no comienza con `.` en su nombre, `install.sh` aplica la acción `dotify` por defecto y lo instala como `~/.<nombre>` para evitar crear archivos visibles en el HOME. |
39 | | -- `install.sh` además: |
40 | | - - respeta mapeos XDG (`xdg:` / `xdg_data:` / `xdg_state:` / `xdg_cache:` / `home:`), |
41 | | - - crea copias sanitizadas para archivos con CRLF en `$TARGET/.dotfiles_sanitized`, |
42 | | - - realiza backups en `$HOME/.dotfiles_backup/<timestamp>` antes de sobrescribir archivos no enlazados, |
43 | | - - incluye protecciones de seguridad para evitar eliminación accidental de directorios importantes. |
44 | | - |
45 | | -Ejemplos concretos (muy simples): |
46 | | - |
47 | | --- Si en `modules/miapp/` existe un archivo `myapp` (en la raíz del módulo): |
48 | | - |
49 | | - ```bash |
50 | | - ./scripts/install.sh modules/miapp |
51 | | - ``` |
52 | | - |
53 | | - Resultado: se crea `$HOME/myapp` (sin punto). Aquí `miapp` es el nombre del módulo y `myapp` es el archivo que estaba en el módulo. |
54 | | - |
55 | | --- Si en `modules/miapp/` existe `.config/cargo/config`: |
56 | | - |
57 | | - ```bash |
58 | | - ./scripts/install.sh modules/miapp |
59 | | - ``` |
60 | | - |
61 | | - Resultado: se crea `~/.config/cargo/config`. |
| 39 | +--- |
62 | 40 |
|
63 | | --- Si en `modules/miapp/` existe `cargo/config` (sin punto al inicio): |
| 41 | +## 🛠️ Comandos del Instalador |
64 | 42 |
|
65 | | - ```bash |
66 | | - ./scripts/install.sh modules/miapp |
67 | | - ``` |
| 43 | +| Comando | Descripción | |
| 44 | +| :--- | :--- | |
| 45 | +| `install` | Crea symlinks según `install-mappings.yml`. | |
| 46 | +| `backup-list` | Lista los backups disponibles en `~/.dotfiles_backup/`. | |
| 47 | +| `backup-restore` | Restaura archivos (usa `--latest` o `--timestamp <ID>`). | |
| 48 | +| `backup-clean <N>` | Mantiene solo los `N` backups más recientes. | |
| 49 | +| `check-fonts` | Verifica e instala las fuentes retro requeridas. | |
| 50 | +| `check-gitlfs` | Asegura que los assets binarios se descargaron correctamente. | |
| 51 | +| `update-submodules` | Actualiza submódulos de paquetes (PKGBUILD) o del repo (`--repo`). | |
| 52 | +| `inspect-mappings` | Genera un reporte detallado del estado de los mapeos. | |
| 53 | +| `setup-githooks` | Configura hooks de Git y normaliza permisos de ejecución. | |
68 | 54 |
|
69 | | - Resultado: se crea `$HOME/cargo/config`. |
| 55 | +### Opciones avanzadas de `install` |
| 56 | +Personaliza tu instalación con estas flags: |
| 57 | +- `--dry-run`: Previsualiza los cambios sin afectar al sistema. |
| 58 | +- `--fix-attributes`: Configura automáticamente bits de ejecución en scripts. |
| 59 | +- `--fix-eol`: Convierte finales de línea CRLF a LF (útil si editas en Windows). |
| 60 | +- `--no-backup`: Salta la creación de copias de seguridad (usar con precaución). |
70 | 61 |
|
71 | | -Diferencia clave con enfoques históricos: |
| 62 | +--- |
72 | 63 |
|
73 | | -- Algunas aproximaciones tradicionales respetaban exactamente la estructura que hubiera en el módulo y no aplicaban reglas ni transformaciones por defecto. En contraste, `./scripts/install.sh` usa `install-mappings.yml` para aplicar reglas declarativas (ej.: mover `cargo/config` a `~/.config/cargo/config`, o marcar un archivo como `ignore`). |
| 64 | +## 🎨 Enfoque Estético: Windows 95/98 (En curso) |
| 65 | +Este repo incluye módulos específicos diseñados para recrear un sistema de diseño retro coherente: |
74 | 66 |
|
75 | | -Por eso: |
76 | | -- Si quieres que algo siempre termine en `~/.config/…`, lo puedes colocar en el módulo en esa carpeta (`.config/...`) o declarar un mapeo en `install-mappings.yml` si el repo tiene una estructura distinta. |
77 | | --- Nota: el instalador `install.sh` usa por defecto la acción `dotify`. Si algo no tiene mapeo y no empieza por un `.` en su nombre, `install.sh` aplicará un prefijo `.` y terminará en `~/.<nombre>`. Los enfoques previos no implicaban esta transformación por defecto. |
78 | | -- Implementación actual: cuando ejecutas `./scripts/install.sh`, los elementos en la raíz de cada módulo que no tienen un mapeo y no empiezan con `.` se instalarán como `~/.<nombre>` automáticamente (dotify). Esto evita que el instalador cree archivos no ocultos en `$HOME` por defecto cuando no hay un mapeo explícito. |
79 | | --- Para evitar dotify (por ejemplo si prefieres que el archivo termine en `~/miapp`), añade un `.` al nombre en el módulo (`.miapp`) o añade una entrada en `install-mappings.yml` para ese archivo/directorio con la ruta deseada. |
80 | | --- Si quieres ver qué hará `install.sh` sin aplicarlo, ejecuta en un `TARGET` temporal (simulando `HOME`) y revisa los enlaces creados: |
| 67 | +- **Chicago95/Classic 98**: Temado profundo para **GTK 2, 3 y 4**. |
| 68 | +- **Paleta de Colores**: Basada en el esquema original: Gris Cálido (`#D4D0C8`) y Azul Marino (`#0A246A`). |
| 69 | +- **Efectos 3D**: Bordes biselados, widgets y scrollbars clásicos mediante CSS modular. |
| 70 | +- **Componentes de Escritorio**: |
| 71 | + - **Wayland**: [Labwc](https://github.com/labwc/labwc) (WM), [Waybar](https://github.com/Alexays/Waybar) (Taskbar), [Wofi](https://hg.sr.ht/~scoopta/wofi) (Start Menu). |
| 72 | + - **X11**: Openbox, XFWM4, Metacity. |
81 | 73 |
|
82 | | -```bash |
83 | | -TMP=$(mktemp -d) |
84 | | -TARGET="$TMP" ./scripts/install.sh modules/miapp |
85 | | -find "$TMP" -maxdepth 3 -ls |
86 | | -``` |
87 | | -esto te permitirá revisar los symlinks resultantes sin afectar a tu verdadero HOME. |
88 | | - |
89 | | -Agregar un módulo — ejemplo práctico: |
90 | | - |
91 | | -1. Crea un nuevo módulo: `modules/miapp/`. |
92 | | -2. Añade la estructura de destino dentro del módulo. Ejemplo: `modules/miapp/.config/miapp/config.yml`. |
93 | | -3. Prueba el módulo con `install.sh` (destino temporal para revisión): |
94 | | - |
95 | | -```bash |
96 | | -cd modules |
97 | | -TMP=$HOME/tmp_install_test |
98 | | -mkdir -p "$TMP" |
99 | | -TARGET="$TMP" ../scripts/install.sh miapp |
100 | | -ls -l "$TMP" # verifica lo que el instalador aplicaría |
101 | | -``` |
| 74 | +--- |
102 | 75 |
|
103 | | -4. Para aplicar el módulo a tu HOME con el instalador: |
104 | | - |
105 | | -```bash |
106 | | -../scripts/install.sh modules/miapp |
107 | | -``` |
108 | | - |
109 | | -5. Para revertir/desinstalar el módulo (quitar enlaces creados por el instalador): |
110 | | - |
111 | | -```bash |
112 | | -# Revertir manualmente: eliminar symlink y restaurar backup si existen |
113 | | -rm -f "$HOME/.miapp" |
114 | | -# o elimina los symlinks devueltos por el instalador de forma manual |
115 | | -``` |
| 76 | +## 📂 Estructura y Mapeo |
116 | 77 |
|
117 | | -6. Si necesitas una ruta XDG específica o marcar un archivo para `ignore`, actualiza `install-mappings.yml` con la entrada adecuada (p. ej. `myfile: xdg:myapp/config.yml` o `secret.file: ignore`). |
| 78 | +El "cerebro" del sistema es `install-mappings.yml`. El instalador lo utiliza para aplicar reglas declarativas: |
118 | 79 |
|
119 | | -Seguridad — secretos y plantillas (resumen): |
| 80 | +- `xdg:` → Enlaza a `~/.config/...` |
| 81 | +- `home:` → Enlaza directamente a la raíz del `$HOME`. |
| 82 | +- `ignore` → Ignora archivos de mantenimiento o temporales. |
| 83 | +- **Acción "Dotify" (Por defecto)**: Si un archivo no tiene regla explícita, el instalador le añade un punto `.` y lo enlaza en el HOME (ej: `bashrc` → `~/.bashrc`) para mantener el orden. |
120 | 84 |
|
121 | | -- Nunca subas credenciales o claves privadas. Mantén `*.example` como plantillas (p. ej. `.git-credentials.example`). |
122 | | -- El instalador respeta `install-mappings.yml`. El pipeline de CI analiza `modules/` y falla si detecta archivos que parezcan contener secretos; se permiten archivos de plantilla o archivos que solo contienen comentarios. |
| 85 | +--- |
123 | 86 |
|
124 | | -Contribuciones y pruebas: |
| 87 | +## 🤝 Contribuciones y Seguridad |
125 | 88 |
|
126 | | -- Añade un módulo pequeño con su README y pruebas básicas. El CI ejecuta pruebas para comprobar que `./scripts/install.sh` aplica correctamente los symlinks y que `install-mappings.yml` cubre los archivos raíz de cada módulo. |
127 | | -- Si agregas un módulo que incluye archivos sensibles, proporciona primero un `*.example` y marca la ruta real como `ignore` en `install-mappings.yml`. |
| 89 | +- **Backups**: Ante cualquier conflicto, el instalador protege tus archivos originales en `~/.dotfiles_backup/` con un timestamp. |
| 90 | +- **Sanitización**: Normalización automática de archivos para asegurar que funcionen en Linux incluso si fueron descargados en Windows. |
| 91 | +- **Seguridad**: Evita subir secretos. El CI escanea proactivamente en busca de credenciales antes de aceptar cambios. |
128 | 92 |
|
129 | | -Si quieres más ejemplos o que agregue un módulo por defecto al instalador, dime cuáles y lo hago. |
| 93 | +--- |
130 | 94 |
|
131 | | --------------------------------------------------------------- |
| 95 | +*“Everything is a link, until it's a backup.”* |
0 commit comments