Stop Scripting Your Setup: Perchè dovresti provare Nix Home Manager

Stop Scripting Your Setup: Why You Should Try Nix Home Manager

Ci siamo passati tutti. Compri un nuovo laptop oppure decidi finalmente di formattare la macchina attuale per ripartire da zero. La prima ora è fantastica, poi arriva la realtà: devi riconfigurare tutto.

Anche se sei organizzato, è una seccatura. Magari hai un repository di dotfile e qualche script shell scritto tre anni fa per fare il bootstrap dell’ambiente. Li lanci e, più o meno, funzionano. Ma poi inizi a notare le crepe. Non sembra esattamente come l’altra macchina.

Forse inizi a lavorare e ti accorgi che manca un file di configurazione specifico per uno strumento che usi raramente ma che ora ti serve disperatamente. Oppure mesi fa hai passato ore a cercare un flag oscuro per far comportare una CLI in un certo modo, e ora quell’impostazione è sparita. La memoria muscolare ti tradisce perché le scorciatoie da tastiera non sono proprio quelle giuste.

Poi c’è il problema dei segreti. Non puoi certo versionare su un repository GitHub pubblico le tue chiavi SSH o i token API. Così finisci per copiare manualmente i file da una chiavetta USB, distruggendo qualsiasi speranza di automazione completa.

La situazione peggiora se usi più macchine, ad esempio un MacBook aziendale per il lavoro e un desktop Linux a casa. Tenerle sincronizzate è praticamente un lavoro a tempo pieno. Anche se riesci a copiare i file di configurazione, il software sottostante potrebbe essere diverso. Potresti avere ripgrep versione 13 su una macchina e versione 11 sull’altra, e non accorgerti che la sintassi è cambiata finché gli script non iniziano a fallire.

C’è un modo migliore

Di solito è qui che si inizia a parlare di Nix e NixOS. Se non ne hai mai sentito parlare, Nix è un package manager e un linguaggio che puntano sulla riproducibilità. NixOS è una distribuzione Linux costruita interamente attorno a questo concetto.

Ma c’è un punto fondamentale: non serve passare a NixOS per risolvere questi problemi.

Se hai un MacBook aziendale, ovviamente non puoi installare un nuovo sistema operativo. Se usi Ubuntu e non vuoi reinstallare tutto, va benissimo lo stesso. Puoi installare il package manager Nix su qualsiasi distribuzione Linux o su macOS.

Una volta installato Nix, puoi usare Home Manager.

Home Manager ti permette di gestire il tuo ambiente utente usando il linguaggio Nix. Invece di eseguire comandi imperativi (come apt install, brew install o modificare manualmente file di testo), descrivi lo stato in cui vuoi che la tua macchina si trovi.

Scrivi un singolo file di configurazione che dice: “Voglio questi programmi installati”, “Voglio Git configurato con questa email e questi alias” e “Voglio che la mia shell abbia questo aspetto”.

Perchè risolve il problema

Quando usi Home Manager, il tuo ambiente diventa codice portabile. Puoi applicare quella configurazione a una nuova macchina e questa installerà esattamente ciò che hai specificato.

La sincronizzazione è automatica. Poiché la configurazione è testuale, puoi versionarla. Quando fai una modifica alla configurazione di vim sulla tua macchina personale, la pushi sul repository. Quando arrivi al lavoro, fai pull del repo, esegui il comando di switch di Home Manager e la macchina di lavoro viene aggiornata istantaneamente per combaciare.

Niente più mismatch di versioni. Nix ti permette di fissare i pacchetti a commit specifici. Se hai bisogno di una versione precisa di Node.js o Python per far funzionare il tuo workflow, lo dichiari. Home Manager si assicura che quella versione esatta venga installata, indipendentemente da cosa l’OS considera “corrente”.

Sperimentazione sicura. Una delle funzionalità migliori è la possibilità di fare rollback. Mettiamo che tu voglia provare una configurazione completamente diversa della shell o un nuovo terminale. Modifichi la config e fai lo switch. Se non ti piace, non devi passare ore a sistemare i danni: torni semplicemente allo stato precedente e il sistema è esattamente com’era cinque minuti prima.

				
					{ config, pkgs, ... }:

{
  # User Metadata
  home.username = "lorenzo";

  # Package Installation
  # This list installs software into your user profile.
  home.packages = with pkgs; [
    # CLI Utilities
    ripgrep      # Better grep
    jq           # JSON processor
    fzf          # Fuzzy finder
    bat          # Better cat
    btop         # System monitor
    
    # Development
    nodejs_20    # Pinning a specific version of Node
    python3
    
    # Fonts
    fira-code
    nerdfonts
  ];

  # Program Configuration
  # Instead of editing ~/.gitconfig manually, you declare it here.
  programs.git = {
    enable = true;
    userName = "Lorenzo";
    userEmail = "lorenzo@dvision.lab";
    aliases = {
      co = "checkout";
      ci = "commit";
      st = "status";
    };
    extraConfig = {
      init.defaultBranch = "main";
      pull.rebase = true;
    };
  };

  # Configuring the shell
  programs.zsh = {
    enable = true;
    enableAutosuggestions = true;
    syntaxHighlighting.enable = true;
    shellAliases = {
      ll = "ls -l";
      ".." = "cd ..";
      hm = "home-manager switch"; # Quick alias to update config
    };
  };

  # Managing Raw Config Files
  # For programs that don't have a Nix module or you don't want to use home manager, you can write the config file directly.
  # This creates ~/.config/npm/npmrc
  home.file.".config/npm/npmrc".text = ''
    prefix=~/.npm-global
    init-author-name=Lorenzo
  '';

  # Env variables
  home.sessionVariables = {
    EDITOR = "vim";
  };

  home.stateVersion = "25.05"; 
}

				
			
  • Ora puoi semplicemente eseguire home-manager switch e verrà configurato tutto automaticamente secondo quanto hai dichiarato.

    Gestire le parti complesse

    Forse ti stai chiedendo come gestire il problema dei segreti citato prima. L’ecosistema Nix offre strumenti come agenix, che ti permettono di cifrare i segreti (come chiavi SSH o token) direttamente all’interno del repository Git. Puoi quindi pusharli in sicurezza su GitHub; quando Home Manager costruisce il tuo ambiente, li decifra e li posiziona esattamente dove servono sulla tua macchina.

    Il discorso va anche oltre il semplice posizionamento di file di configurazione. Esistono moduli come nixvim che permettono di configurare software complessi come Neovim direttamente tramite Nix. Invece di gestire una configurazione Lua fragile, che si rompe quando i plugin vengono aggiornati, definisci plugin e impostazioni in Nix. Il sistema si occupa delle dipendenze e garantisce che la configurazione sia coerente ancora prima di avviare l’editor.

    Puoi iniziare in piccolo

    La parte migliore di Home Manager è che non deve essere per forza un approccio “tutto o niente”. Non serve azzerare il tuo setup attuale per provarlo.

    Puoi installare Nix e Home Manager oggi stesso e usarli solo per gestire una o due cose, come il prompt del terminale o alcuni tool da riga di comando. Conviveranno senza problemi con la tua configurazione imperativa attuale. Puoi continuare a installare software con Homebrew o apt mentre prendi confidenza con il sistema.

    Col tempo, man mano che ti senti più a tuo agio, puoi migrare gradualmente sempre più configurazione dentro Nix. Alla fine arrivi a un punto in cui tutta la tua vita digitale è definita in un unico repository.

    Se sei stato frustrato dalla fragilità degli script shell e dalla deriva delle configurazioni tra i tuoi computer, non hai nulla da perdere nel provarlo. Trasforma la configurazione del sistema da una seccatura ricorrente a un problema risolto.

Ultimi articoli

Bando innovazione digitale
Bando innovazione digitale 2025: guida completa ai bandi innovazione tecnologica 
Bando industria 5.0
Bando Industria 5.0: guida completa al credito d’imposta per la transizione digitale ed ecologica 
Bandi intelligenza artificiale: tutte le opportunità di finanziamento 2025