Fabio Scotto di Santolo c9ad30c113 Template private desktop mail configs
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.
2026-03-18 15:00:56 +01:00
2026-03-15 22:00:35 +01:00
2026-03-12 14:37:50 +01:00
2026-03-12 14:37:50 +01:00

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:

  • ikaros
  • nymph

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.

Languages
Emacs Lisp 46.3%
Shell 33.9%
Scheme 6.7%
Jinja 5.5%
PowerShell 4.9%
Other 2.7%