Konfiguration

Nushell Konfiguration mittels config.nu

Nushell nutzt ein Konfigurationssystem, das ein Nushell-Skript beim Start ausführt. Die Konfigurationsdatei wird für Nushell config.nu genannt. Der Pfad zu dieser Konfigurationsdatei kann durch den Aufruf von echo $nu.config-path herausgefunden werden. Es handelt sich dabei um eine Datei, die abgearbeitet wird und in jedem Schritt Definitionen, Umgebungsvariablen und mehr zum globalen Namespace hinzufügt.

Ein Beispiel für eine Nushell config.nu kann hieropen in new window in unserem Repository gefunden werden.

$config konfigurieren

Die zentralen Konfigurationen von Nushell sind in der globalen $config Variable festgehalten. Dieser Eintrag kann wie folgt erstellt werden:

let $config = {
  ...
}

Es ist auch möglich $config zu überschreiben und zu ändern:

let $config = ($config | update <field name> <field value>)

Umgebung

Die Shell-Umgebung kann durch Aufrufe von let-env in der config.nu-Datei geändert werden. Es gibt einige wichtige Nushell-spezifischen Einstellungen:

  • LS_COLORS: Setzt die Farben für Dateitypen in ls
  • PROMPT_COMMAND: Befehle, die ausgeführt werden, um die Prompt zu erzeugen (Block oder String)
  • PROMPT_COMMAND_RIGHT: Befehle, die ausgeführt werden, um die Prompt zu erzeugen (Block)
  • PROMPT_INDICATOR = "〉": Indikator, der der Prompt folgt (default: ">"-like Unicode symbol)
  • PROMPT_INDICATOR_VI_INSERT = ": "
  • PROMPT_INDICATOR_VI_NORMAL = "〉 "
  • PROMPT_MULTILINE_INDICATOR = "::: "

Farbkonfiguration

Mehr Informationen zu Farbeinstellungen und Themes kann im entsprechenden Kapitel gefunden werden.

Nushell als Login-Shell

Um Nushell als Login-Shell zu verwenden, muss die $env Variable konfiguriert werden, damit es möglich ist, externe Befehle als Login-Shell auszuführen.

Der komplette Satz an Umgebungsvariablen kann erzeugt werden, wenn Nu in einer anderen Shell, wie beispielsweise Bash, ausgeführt wird. In diese Nu-Sitzung kann ein Befehl wie der folgende verwendet werden, um $env zu setzen:

> env | each { echo $"let-env ($it.name) = '($it.raw)'" } | str collect (char nl)

Das wird let-env Zeilen ausgeben - eine für jede Umgebungsvariable - inklusive der nötigen Werte.

Als nächstes, muss auf manchen Distributionen sichergestellt werden, dass Nu in der Liste der Shells in /etc/shells ist:

> cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
/usr/bin/fish
/home/jonathan/.cargo/bin/nu

Damit sollte es möglich sein, Nu als Login-Shell mit chsh festzulegen. Nach dem Ausloggen und erneutem Einloggen sollte Nu als Shell grüßen.

Konfiguration mittels login.nu

Wenn Nushell als Login-Shell benutzt wird, kann eine spezifische Konfigurationsdatei angelegt werden, die nur in diesem Fall ausgelesen wird. Hierfür muss eine Datei namens login.nu im Standard-Konfigurationsverzeichnis abgelegt sein.

Die Datei login.nu wird nach env.nu und config.nu eingelesen, so dass diese Konfigurationen überschrieben werden können.

Der Pfad zu dieser Konfigurationsdatei steht in $nu.loginshell-path.

macOS: /usr/bin/open als open behalten

Manche Tools (z.B. Emacs) vertrauen darauf, dass open Dateien auf dem Mac öffnet. Da Nushell einen eigenen open Befehl hat, der eine andere Semantik hat und /usr/bin/open verbirgt, werden diese Tools einen Fehler werfen, wenn sie verwendet werden. Eine Möglichkeit, dieses Problem zu umgehen, ist es, einen eigenen Befehl und einen alias in config.nu zu definieren:

def nuopen [arg, --raw (-r)] { if $raw { open -r $arg } else { open $arg } }
alias open = ^open

Konfiguration der Prompt

Die Konfiguration der Prompt wird durch das Setzen der Umgebungsvariable PROMPT_COMMAND bzw. PROMPT_COMMAND_RIGHT durchgeführt. Diese akzeptieren entweder einen String oder einen Codeblock der ausgeführt wird.

let-env PROMPT_COMMAND = "Hallo Nu"  # Die Hauptprompt auf einen festen String setzen
let-env PROMPT_COMMAND_RIGHT = {pwd} # Den rechte Promptteil mit dem aktuellen Verzeichnis anzeigen

Darüber hinaus wird als Markierung ein Promptindikator gesetzt, welcher den aktuellen Modus oder einen Zeilenumbruch anzeigt:

  • PROMPT_INDICATOR = "〉": Indikator, der der Prompt folgt (default: ">"-like Unicode symbol)
  • PROMPT_INDICATOR_VI_INSERT = ": "
  • PROMPT_INDICATOR_VI_NORMAL = "〉 "
  • PROMPT_MULTILINE_INDICATOR = "::: "

Mehr Dokumentation zu fertigen Prompts von Drittanbietern kann hier gefunden werden.