Wenn du schon einmal Zeit und Nerven aufgewendet hast die Entwicklungsumgebung für ein Projekt auf einem neuen Computer aufzusetzen, ist nix-shell eventuell das richtige. Ich verwende es seit Anfang 2020 und habe mir bisher viel Zeit und Nerven gespart. Es ermöglicht mir pro Projekt eine Sandbox zu starten in welcher die richtige Version von Node, Ruby, PostgreSQL, PHP, MariaDB installiert ist.
Konkret hat mich nix-shell aus folgenden Situationen gerettet, die ich mit meinem bisherigen Ansatz nicht meistern konnte.
Ein Projekt mit alter Ruby Version lauffähig bekommen das nach einem automatischen Update von OpenSSL durch Homebrew nicht mehr funktioniert hat.
Alte Node Versionen installiert um angestaubte Ember.js Projekte weiterzuentwickeln.
gnuplot Graphen repariert, die nach einem macOS Update Artefakte enthalten haben.
Einen LAMP Stack unter macOS aufsetzen ohne XAMPP oder Ähnliches installieren zu müssen.
Eine unter Homebrew nicht mehr installierbare Ansible Version verwenden.
Eine identische Entwicklungsumgebung unter macOS und Ubuntu haben.
Tipps
Nix ist ein Package Manager, ein Betriebssystem und eine Programmiersprache. Ich verwende nur den Package Manager und notgedrungen die Programmiersprache für die Definition meiner Entwicklungsumgebung.
Die Definition der Entwicklungsumgebung kommt in die Datei shell.nix im Projektverzeichnis.
Um Festplattenspeicher freizubekommen kannst du die Garbage Collection mit nix-collect-garbage laufen lassen.
Du solltest die verwendete Version von nixpkgs selbst möglichst genau definieren. Ansonsten bekommst du in einem Jahr andere Packages installiert als heute. Die meisten Anleitungen machen diesen Fehler, am Ende des Tages ist es somit erst Recht wieder nicht reproduzierbar.
Workflow
Terminal öffnen
In Projektordner wechseln
Sandbox mit nix-shell starten
Entwickeln
Beispiele
Ein kleines Projekt mit der aktuellsten Ruby und cURL Version.
Verwaltung meiner Finanzen mit hledger und gnuplot.
Dieses Projekt benötigt eine alte Ruby Version die sonst nicht mehr installierbar ist.
Infrastruktur die mit Ansible verwaltet wird.
Weiteres Projekt mit einer bestimmten Ruby Version.
Ember.js Projekt mit Ember CLI
Projekt mit sehr alten Ember CLI Version sowie anderen Abhängigkeiten.
PHP 7.3, MariaDB und Caddy als Webserver sowie eine Erhöhung der maximalen Upload Größe von PHP.