diff --git a/README.md b/README.md index 191bd7e66..ed3d583d0 100644 --- a/README.md +++ b/README.md @@ -1,162 +1,291 @@ -# ArchASP Dotfiles +
+
+
+ Configuration utilisateur reproductible pour une station Arch Linux sous + Wayland, déployée package par package avec GNU Stow. +
-Ce dépôt gère Sway, les applications de terminal, le shell, les scripts -personnels et les unités systemd utilisateur. La configuration root, les -paquets de base, le stockage, le réseau, le boot et les helpers sous -`/usr/local` appartiennent au dépôt -[`arch-system`](https://git.labfytools.com/fy59/arch-system). +
+ Arch Linux · Sway · GNU Stow ·
+ systemd --user · Zsh
+
+ Overview · + Desktop · + Shell · + Layout · + Deployment · + Rebuild +
-## Desktop Stack + -La chaîne de session canonique est : +## ✦ Overview + +Ce dépôt contient la couche **utilisateur** d'ArchASP : session graphique, +applications terminal, shell, scripts personnels et unités systemd user. La +couche **système/root** est volontairement séparée. + +| Dépôt | Responsabilité | +| --- | --- | +| **`.dotfiles`** | Sway, Kitty, Neovim, Zsh, scripts, thèmes et services utilisateur | +| **[`arch-system`](https://git.labfytools.com/fy59/arch-system)** | Installation Arch, boot, stockage, réseau, paquets, `/etc` et helpers root | + +Cette séparation évite de mêler état personnel et administration système. Le +dépôt reste néanmoins spécifique à la machine : sorties Sway, périphériques, +chemins sous `/home/fy59` et projets externes doivent être relus avant un +déploiement ailleurs. + + + +## ✦ Desktop Stack ```text -greetd -> tuigreet -> UWSM -> Sway +greetd + └─ tuigreet + └─ UWSM + └─ Sway + ├─ Swaybar ── i3status-rs + ├─ Mako notifications + ├─ Wofi launcher + ├─ Swaylock verrouillage + ├─ Cliphist historique du presse-papiers + └─ Kitty terminal ``` -Sway utilise sa barre native avec i3status-rs. Mako fournit les notifications, -Wofi le lanceur, Swaylock le verrouillage, wl-clipboard et Cliphist -l'historique du presse-papiers, et Kitty le terminal. +| Fonction | Composant canonique | +| --- | --- | +| Session | `greetd → tuigreet → uwsm start default → sway.desktop` | +| Compositor | Sway / SwayFX | +| Barre | Swaybar avec i3status-rs | +| Notifications | Mako | +| Launcher | Wofi | +| Verrouillage et idle | Swaylock + swayidle | +| Presse-papiers | wl-clipboard + Cliphist | +| Terminal | Kitty | +| Profils d'énergie | TLP via l'interface utilisateur `tlpctl` | -Le fichier `uwsm/.config/uwsm/default-id` sélectionne `sway.desktop`. La copie -de référence de la configuration root de greetd se trouve dans -`.assets/greetd/config.toml`; son installation réelle sous `/etc/greetd` -relève de `arch-system`. +`uwsm/.config/uwsm/default-id` sélectionne `sway.desktop`. La copie de +référence de greetd se trouve dans `.assets/greetd/config.toml`; son +installation sous `/etc/greetd` appartient à `arch-system`. -## Shell Stack + -Le shell interactif est Zsh. Son environnement associe Starship, Atuin, FZF, -Zoxide, Eza, Bat et Yazi. `.zprofile` démarre la session graphique via UWSM -lorsque celui-ci autorise un démarrage, et `.zshenv` publie le socket de -l'agent SSH utilisateur. - -Les données Atuin, historiques de shell, clés, bases et états applicatifs ne -font pas partie du dépôt. - -## Repository Layout - -Chaque répertoire de premier niveau, hors `.assets` et `.git`, est un paquet -GNU Stow indépendant. Son contenu reproduit le chemin attendu depuis `$HOME` : +## ✦ Shell Stack ```text -kitty/.config/kitty/ -> ~/.config/kitty/ -nvim/.config/nvim/ -> ~/.config/nvim/ -sway/.config/sway/ -> ~/.config/sway/ -bin/.local/bin/ -> ~/.local/bin/ -systemd/.config/systemd/ -> ~/.config/systemd/ -zsh/.zshrc -> ~/.zshrc +Zsh + ├─ Starship + ├─ Atuin + ├─ FZF + ├─ Zoxide + ├─ Eza + ├─ Bat + └─ Yazi ``` -Les thèmes, icônes et wallpapers sont volontairement versionnés. `.assets` -contient les inventaires de reconstruction et des références système ; ce -n'est pas un paquet Stow. +`.zprofile` démarre la session graphique via UWSM lorsque celui-ci autorise un +démarrage. `.zshenv` publie le socket de l'agent SSH utilisateur. L'historique, +les bases et la clé Atuin restent strictement locaux et hors Git. -## Deployment + -Prérequis : Git, GNU Stow et les paquets décrits dans `.assets`. Cloner le -dépôt principal avec ses sous-modules : +## ✦ Repository Layout + +Chaque répertoire de premier niveau, hors `.assets` et `.git`, est un package +GNU Stow indépendant. Son arborescence reproduit le chemin attendu depuis +`$HOME`. + +```text +.dotfiles/ +├── sway/.config/sway/ → ~/.config/sway/ +├── i3status-rust/.config/ → ~/.config/i3status-rust/ +├── kitty/.config/kitty/ → ~/.config/kitty/ +├── nvim/.config/nvim/ → ~/.config/nvim/ +├── systemd/.config/systemd/user/ → ~/.config/systemd/user/ +├── bin/.local/bin/ → ~/.local/bin/ +├── zsh/.zshrc → ~/.zshrc +├── zsh/.zprofile → ~/.zprofile +└── .assets/ inventaires et références, non déployés +``` + +### Packages principaux + +| Groupe | Packages Stow | +| --- | --- | +| Desktop | `sway`, `swaylock`, `mako`, `wofi`, `cliphist`, `i3status-rust` | +| Terminal et shell | `kitty`, `zsh`, `starship`, `atuin`, `fzf`, `eza`, `bat`, `yazi` | +| Développement | `nvim`, `tmux`, `opencode`, `bin` | +| Services | `systemd`, `uwsm` | +| Apparence | `gtk-3.0`, `gtklock`, `qt5ct`, `qt6ct`, `themes`, `icons`, `wallpapers` | +| Outils | `btop`, `fastfetch`, `hyprwhspr`, `ytmusic-tui` | + +Les thèmes, icônes et wallpapers sont volontairement versionnés. Les +exécutables issus de projets externes restent hors Git même lorsqu'un script +ou une unité user les utilise. + +### Sous-modules + +Les plugins Zsh et Tmux sont épinglés par Git : + +| Intégration | Chemin | +| --- | --- | +| Fast Syntax Highlighting | `zsh/.zsh/plugins/fast-syntax-highlighting` | +| FZF Tab | `zsh/.zsh/plugins/fzf-tab` | +| Zsh Autosuggestions | `zsh/.zsh/plugins/zsh-autosuggestions` | +| Catppuccin Tmux | `tmux/.config/tmux/plugins/catppuccin/tmux` | + + + +## ✦ Deployment + +### Prérequis + +- Git ; +- GNU Stow ; +- les paquets décrits dans `.assets` ; +- une sauvegarde des fichiers existants qui pourraient entrer en conflit. + +### Clone ```bash git clone --recurse-submodules \ ssh://git@git.labfytools.com:2223/fy59/Dotfiles_ArchAP.git \ "$HOME/.dotfiles" + cd "$HOME/.dotfiles" git submodule update --init --recursive ``` -Construire la liste des paquets, puis commencer obligatoirement par un dry-run : +### Dry-run Stow + +Construire la liste des packages à partir des répertoires de premier niveau : ```bash mapfile -t packages < <( find . -mindepth 1 -maxdepth 1 -type d \ ! -name .git ! -name .assets -printf '%f\n' | sort ) + stow --no --verbose=2 --target="$HOME" "${packages[@]}" ``` -Après examen des conflits éventuels, effectuer le déploiement : +Examiner tout conflit avant le déploiement réel : ```bash stow --verbose=2 --target="$HOME" "${packages[@]}" ``` -Stow reçoit les noms des paquets. Il ne faut pas lancer `stow .`, car la -racine du dépôt n'est pas elle-même un paquet. +> Stow reçoit les **noms des packages**. La racine du dépôt n'est pas un +> package : ne pas utiliser `stow .`. -## Package Inventory + -- `.assets/pkglist-pacman.txt` contient les paquets officiels explicitement - installés (`pacman -Qqen`). -- `.assets/pkglist-aur.txt` contient les paquets foreign/AUR explicitement - installés (`pacman -Qqem`). -- `.assets/external-tools.md` décrit Cargo, npm, builds manuels, projets locaux - et helpers système qui ne sont pas restaurés par Pacman. +## ✦ Package Inventory -Ces fichiers sont des instantanés, pas un programme d'installation. Leur -application et la validation des paquets AUR relèvent de la reconstruction du -système. +| Fichier | Source | Contenu | +| --- | --- | --- | +| `.assets/pkglist-pacman.txt` | `pacman -Qqen` | Paquets officiels explicitement installés | +| `.assets/pkglist-aur.txt` | `pacman -Qqem` | Paquets foreign/AUR explicitement installés | +| `.assets/enabled-services.txt` | systemd système | Services système activés | +| `.assets/enabled-system-aux-units.txt` | systemd système | Timers, sockets et paths activés | +| `.assets/enabled-user-aux-units.txt` | systemd user | Timers, sockets et paths utilisateur activés | +| `.assets/external-tools.md` | inventaire manuel | Cargo, npm, builds locaux, projets et helpers `/usr/local` | -## Services +Ces fichiers sont des instantanés vérifiables, pas un installateur. Les paquets +AUR, outils Cargo/npm et builds locaux doivent être restaurés séparément. -`.assets/enabled-services.txt` recense les services systemd système activés. -Les timers, sockets et paths sont séparés dans -`.assets/enabled-system-aux-units.txt` et -`.assets/enabled-user-aux-units.txt`. Leur activation côté système appartient -à `arch-system`. + -Le paquet `systemd` contient les unités utilisateur et leurs liens -d'activation canoniques. Après déploiement ou modification : +## ✦ Services + +Le package `systemd` contient les unités utilisateur ainsi que leurs liens +d'activation relatifs. Il couvre notamment Cliphist, swayidle, GNOME Keyring, +l'agent SSH, les notifications de batterie et les intégrations Trainlog, +Lardon et Arch Sentinel. + +Après une modification : ```bash systemctl --user daemon-reload systemd-analyze --user verify ~/.config/systemd/user/*.service ``` -Plusieurs unités lancent du code externe à ce dépôt, notamment Trainlog, -Lardon et Arch Sentinel. Leurs sources et builds doivent être restaurés aux -emplacements documentés dans `.assets/external-tools.md`. +Certaines unités lancent du code externe au dépôt. Leurs chemins et +dépendances sont documentés dans `.assets/external-tools.md`. Les services +système et toute modification de `/etc` restent sous la responsabilité +d'`arch-system`. -## Secrets + -Ne jamais versionner de clé SSH/GPG, `.netrc`, token, cookie, credential, -configuration Rclone ou `gh` privée, clé WireGuard, base Atuin, clé Atuin ou -secret Nextcloud. Les états et caches applicatifs restent sous `$HOME` et sont -exclus de Stow ou de Git. +## ✦ Secrets -Un contrôle du HEAD ne remplace pas une analyse de l'historique Git. Tout -secret ayant été commité doit être révoqué ou renouvelé avant une purge de -l'historique et avant la publication d'un miroir. +Ce dépôt n'a pas vocation à contenir : -## Rebuilding ArchASP +- clés SSH, GPG, WireGuard ou Atuin ; +- `.netrc`, mots de passe, tokens, cookies ou credentials ; +- configurations privées Rclone, GitHub CLI ou Nextcloud ; +- bases de données, historiques shell ou états applicatifs personnels. -Une reconstruction repose sur deux couches : +Les ignorer dans le HEAD ne suffit pas : un secret déjà commité doit être +renouvelé, puis supprimé de tout l'historique avant publication. -1. `arch-system` restaure la base Arch, les paquets, greetd, le réseau, le - stockage et les services root ; -2. ce dépôt restaure les sous-modules, fichiers Stow, scripts et unités - systemd utilisateur. + -Restent manuels ou externes : installation des paquets AUR, outils Cargo/npm, -builds des projets dans `Documents`, OpenMVS local, helpers `/usr/local`, -secrets, données applicatives et activation contrôlée des unités. Le dépôt ne -prétend donc pas reconstruire seul une machine complète. +## ✦ Rebuilding ArchASP -## Repository Mirrors +```text +┌──────────────────────────────────────────────────────┐ +│ arch-system │ +│ Arch · boot · stockage · réseau · paquets · /etc │ +└──────────────────────────┬───────────────────────────┘ + │ socle système prêt + ▼ +┌──────────────────────────────────────────────────────┐ +│ .dotfiles │ +│ Stow · session · shell · scripts · systemd user │ +└──────────────────────────┬───────────────────────────┘ + │ restaurations externes + ▼ +┌──────────────────────────────────────────────────────┐ +│ AUR · Cargo/npm · projets locaux · secrets · données│ +└──────────────────────────────────────────────────────┘ +``` -Forgejo est l'upstream principal et conserve le nom de remote `origin`. -GitHub, lorsqu'il sera configuré, sera un miroir secondaire nommé `github`. -Un historique contenant un secret ne doit jamais être envoyé vers ce miroir. +Ordre de reconstruction recommandé : -## License +1. restaurer la couche système avec `arch-system` ; +2. installer Git et GNU Stow ; +3. cloner ce dépôt avec ses sous-modules ; +4. restaurer les paquets officiels puis examiner les paquets AUR ; +5. effectuer le dry-run et déployer les packages Stow ; +6. restaurer les outils Cargo/npm et les projets locaux nécessaires ; +7. restaurer les secrets et données applicatives depuis une sauvegarde sûre ; +8. valider puis activer les unités systemd voulues. + +Le dépôt ne reconstruit pas seul les projets sous `Documents`, OpenMVS local, +les helpers `/usr/local`, les secrets, les bases applicatives ou les réglages +matériels propres à la machine. + + + +## ✦ Repository Mirrors + +| Rôle | Hébergement | URL | +| --- | --- | --- | +| Upstream principal | Forgejo | `ssh://git@git.labfytools.com:2223/fy59/Dotfiles_ArchAP.git` | +| Miroir public | GitHub | `https://github.com/labfytools/Dotfiles_ArchAP` | + +Le fetch d'`origin` reste attaché à Forgejo. Ses URLs de push publient vers +Forgejo et GitHub afin qu'un `git push origin main` maintienne les deux copies. + + + +## ✦ License Aucune licence n'est actuellement déclarée pour ce dépôt.