Render personal desktop configs from Ansible templates so public dotfiles no longer expose real identities or mail addresses. Update the bootstrap workflow to consume the rendered mail config and extend the encrypted vault schema for the new private values.
Infra — Personal Infrastructure as Code
Questo repository contiene la configurazione Infrastructure as Code (IaC) utilizzata per gestire e mantenere allineate diverse macchine personali tramite Ansible.
L'obiettivo è avere una singola fonte di verità per:
- configurazione delle macchine
- pacchetti installati
- servizi di sistema
- configurazioni utente (dotfiles)
Il repository consente di gestire più sistemi operativi e profili macchina mantenendo una struttura modulare, riproducibile e idempotente.
Architettura del progetto
infra/
├── ansible/
│ ├── ansible.cfg
│ ├── site.yml
│ ├── inventory/
│ │ ├── hosts.yml
│ │ ├── group_vars/
│ │ └── host_vars/
│ └── roles/
│
├── dotfiles/
│ ├── common/
│ ├── desktop/
│ ├── workstation/
│ ├── ikaros/
│ └── nymph/
│
├── scripts/
├── secrets/
└── README.md
Il repository è diviso in due componenti principali:
| Componente | Scopo |
|---|---|
| ansible | provisioning e configurazione macchine |
| dotfiles | configurazioni utente versionate |
Macchine gestite
Il sistema attualmente gestisce tre tipologie di profilo.
Desktop
Sistema operativo:
- Void Linux
Window manager:
- i3
Macchine:
ikarosnymph
Queste macchine condividono la stessa configurazione base desktop e vengono mantenute allineate tramite Ansible.
Workstation
Sistema operativo:
- Ubuntu LTS
Desktop environment:
- GNOME
Macchina:
deadalus
Questo profilo è pensato per sviluppo e lavoro.
Server
Sistema operativo:
- Ubuntu LTS
Configurazione:
- nessun ambiente grafico
Macchina:
prometheus
Profilo minimale orientato a servizi server.
Composizione della configurazione
La configurazione finale di una macchina è ottenuta combinando più livelli.
common configuration
+ OS configuration
+ profile configuration
+ host overrides
Esempio per ikaros:
common + void + desktop + ikaros
Esempio per nymph:
common + void + desktop + nymph
Questo approccio consente di:
- mantenere configurazioni condivise
- applicare override specifici per host
- evitare duplicazioni
Ruoli Ansible
I principali ruoli attualmente presenti sono:
| Role | Descrizione |
|---|---|
| base | configurazione base comune |
| packages_void | installazione pacchetti su Void |
| packages_ubuntu | installazione pacchetti su Ubuntu |
| services_runit | gestione servizi runit |
| services_systemd | gestione servizi systemd |
| profile_desktop_i3 | configurazione desktop i3 |
| profile_workstation_gnome | configurazione workstation GNOME |
| profile_server | configurazione server |
| dotfiles | distribuzione configurazioni utente |
Dotfiles
La directory dotfiles/ contiene le configurazioni utente versionate.
dotfiles/
├── common
├── desktop
├── workstation
├── ikaros
└── nymph
Le configurazioni sono applicate tramite Ansible e organizzate per livelli:
| Livello | Scopo |
|---|---|
| common | configurazioni condivise |
| profile | configurazioni per tipo macchina |
| host | override specifici |
Requisiti
Per utilizzare il repository sono necessari:
- Python 3
- Ansible
- accesso SSH alle macchine target
Installazione Ansible:
pip install ansible
Utilizzo
Eseguire il playbook principale:
ansible-playbook ansible/site.yml
Questo comando:
- installa i pacchetti richiesti
- configura i servizi
- applica il profilo macchina
- distribuisce i dotfiles
Bootstrap di una nuova macchina
Una nuova macchina può essere inizializzata con i seguenti passaggi:
git clone <repo>
cd infra
ansible-playbook ansible/site.yml
Dopo l'esecuzione del playbook la macchina verrà configurata secondo il profilo definito.
Filosofia del progetto
Il repository segue alcuni principi chiave:
- Infrastructure as Code
- configurazione dichiarativa
- idempotenza
- ambienti riproducibili
- separazione tra configurazione sistema e configurazione utente
Questo consente di ricreare qualsiasi macchina partendo esclusivamente dal repository.
Roadmap
Possibili evoluzioni future:
- gestione segreti con
ansible-vault - hardening sicurezza server
- configurazione backup
- testing automatico playbook
- integrazione CI
- supporto ad altre distribuzioni Linux
Licenza
Questo progetto è distribuito sotto licenza LGPL-3.0.