Wer den Paketmanager Nix für Entwicklungsumgebungen einsetzt, erlebt beim Start oft eine Überraschung: Trotz systemweit eingerichteter Zsh öffnet der Aufruf von nix develop standardmäßig die Bash. Diese Anleitung zeigt, wie du auch in Nix-Umgebungen deine bevorzugte Shell aufrufen kannst.
Schritt 1: Start per Befehlszeilenparameter testen
Um die eigene Shell direkt mit Nix zu starten, übergibst du die Umgebungsvariable $SHELL über den Parameter -c an Nix:
nix develop -c $SHELLDieser Aufruf startet die in $SHELL definierte Benutzer-Shell innerhalb der Entwicklungsumgebung.
Schritt 2: Shell im Projekt über die Flake-Datei einbinden
Wenn du ein Projekt verwaltest und möchtest, dass beim Aufruf von nix develop direkt die Shell aufgerufen wird, kannst du die Datei flake.nix deines Repositories bearbeiten.
Pfad: ./flake.nix
{
outputs = { self, nixpkgs }:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in {
devShells.${system}.default = pkgs.mkShell {
shellHook = ''
$SHELL
'';
};
};
}Im shellHook von pkgs.mkShell kann $SHELL hinterlegt werden, um beim Aufruf die gewünschte Shell auszuführen.
Mögliche Probleme und Besonderheiten
- Verschachtelte Shells: Beim Starten von
$SHELLimshellHookkann es vorkommen, dass beim Verlassen der Umgebung zweimalCtrl+Dgedrückt werden muss, um wieder im vorherigen Terminal zu landen.
Rückgängig machen
Hast du eine lokale flake.nix angepasst, entfernst du einfach den Aufruf $SHELL aus dem shellHook-Block.
Fazit
Nix öffnet für Entwicklungsumgebungen standardmäßig die Bash, lässt sich aber über das -c-Flag oder einen shellHook an deine gewohnte Arbeitsweise anpassen. Zudem kann auch das Werkzeug direnv genutzt werden, da es die Shell nach dem Erstellen eines Caches nicht verändert.
Quellen: Forum: NixOS – Forum, discourse.nixos.org


