Nächste: , Nach oben: Persönliche Dienste   [Inhalt][Index]


13.3.1 Essenzielle Persönliche Dienste

Ein paar grundlegende Persönliche Dienste sind auch in (gnu home services) definiert; sie sind in erster Linie zur internen Nutzung und für die Erstellung der Persönlichen Umgebung gedacht, aber manche sind auch für Endanwender interessant.

Variable: home-environment-variables-service-type

Der Dienst mit diesem Diensttyp wird von jeder Persönlichen Umgebung automatisch instanziiert; so sind die Vorgabeeinstellungen. Sie müssen ihn also nicht definieren, aber vielleicht möchten Sie Ihn erweitern mit einer Liste von Paaren zum Festlegen von Umgebungsvariablen (englisch „Environment Variables“).

(list ("ENV_VAR1" . "Wert1")
      ("ENV_VAR2" . "Wert2"))

Es ist am einfachsten, ihn zu erweitern, ohne einen neuen Dienst zu definieren, nämlich indem Sie das simple-service-Helferlein aus dem Modul (gnu services) einsetzen.

(simple-service 'einige-hilfreiche-umgebungsvariable-service
		home-environment-variables-service-type
		`(("LESSHISTFILE" . "$XDG_CACHE_HOME/.lesshst")
                  ("SHELL" . ,(file-append zsh "/bin/zsh"))
                  ("USELESS_VAR" . #f)
                  ("_JAVA_AWT_WM_NONREPARENTING" . #t)
                  ("LITERAL_VALUE" . ,(literal-string "${abc}"))))

Wenn Sie einen solchen Dienst in die Definition Ihrer Persönlichen Umgebung aufnehmen, fügt das folgenden Inhalt in Ihr setup-environment-Skript ein (das von Ihrer Login-Shell gesourcet werden dürfte):

export LESSHISTFILE="$XDG_CACHE_HOME/.lesshst"
export SHELL="/gnu/store/2hsg15n644f0glrcbkb1kqknmmqdar03-zsh-5.8/bin/zsh"
export _JAVA_AWT_WM_NONREPARENTING
export LITERAL_VALUE='${abc}'

Sie sehen, wie wir hier mit literal-string deklarieren können, dass ein Wert als literale Zeichenkette aufgefasst werden soll, also dass „besondere Zeichen“ wie das Dollarzeichen darin nicht durch die Shell interpretiert werden sollen.

Anmerkung: Achten Sie darauf, dass das Modul (gnu packages shells) mit use-modules oder Ähnlichem importiert wird, denn durch den (gnu packages shells)-Namensraum wird die Definition des zsh-Pakets verfügbar gemacht, auf die obiges Beispiel Bezug nimmt.

Wir verwenden hier eine assoziative Liste (siehe Association Lists in Referenzhandbuch von GNU Guile). Das ist eine Datenstruktur aus Schlüssel-Wert-Paaren und für home-environment-variables-service-type ist der Schlüssel immer eine Zeichenkette und der Wert entweder eine Zeichenkette, ein G-Ausdruck für Zeichenketten (siehe G-Ausdrücke), ein dateiartiges Objekt (siehe dateiartige Objekte) oder ein Boolescher Ausdruck. Im Fall von G-Ausdrücken wird die Variable auf den Wert des G-Ausdrucks festgelegt, bei dateiartigen Objekten auf den Pfad der Datei im Store (siehe Der Store), bei #t wird die Variable ohne Wert exportiert und bei #f wird sie ganz weggelassen.

Variable: home-profile-service-type

Der Dienst dieses Typs wird durch jede Persönliche Umgebung automatisch instanziiert. Sie müssen ihn nicht erst definieren. Vielleicht wollen Sie ihn aber um eine Liste von Paketen erweitern, wenn Sie weitere Pakete in Ihr Profil installieren wollen. Wenn andere Dienste Programme für den Nutzer verfügbar machen müssen, erweitern diese dazu auch diesen Diensttyp.

Als Wert der Erweiterung muss eine Liste von Paketen angegeben werden:

(list htop vim emacs)

Hier können Sie den gleichen Ansatz wie bei simple-service (siehe simple-service) für home-environment-variables-service-type fahren. Achten Sie darauf, die Module mit den angegebenen Paketen über etwas wie use-modules zu importieren. Um ein Paket oder Informationen über das es enthaltende Modul zu finden, hilft Ihnen guix search (siehe guix package aufrufen). Alternativ können Sie specification->package einsetzen, um das Paketverbundsobjekt anhand einer Zeichenkette zu spezifizieren; dann brauchen Sie auch das zugehörige Modul nicht zu laden.

Es gibt noch mehr essenzielle Dienste, von denen wir aber nicht erwarten, dass Nutzer sie erweitern.

Variable: home-service-type

Die Wurzel des gerichteten azyklischen Graphen aus Persönlichen Diensten. Damit wird ein Verzeichnis erzeugt, auf das später die symbolische Verknüpfung ~/.guix-home verweist und das Konfigurationsdateien, das Profil mit Binärdateien und Bibliotheken sowie ein paar notwendige Skripte enthält, die die Dinge zusammenhalten.

Variable: home-run-on-first-login-service-type

Mit dem Dienst dieses Diensttyps wird ein Guile-Skript erzeugt, das von der Login-Shell ausgeführt werden soll. Es wird dabei nur dann ausgeführt, wenn eine besondere Signaldatei in XDG_RUNTIME_DIR nicht vorgefunden wird, wodurch das Skript nicht unnötig ausgeführt wird, wenn mehrere Login-Shells geöffnet werden.

Man kann den Diensttyp mit einem G-Ausdruck erweitern. Allerdings sollten Nutzer diesen Dienst nicht dazu gebrauchen, Anwendungen automatisch zu starten, denn das macht man besser über Erweiterungen des home-shepherd-service-type durch einen Shepherd-Dienst (siehe Shepherd-Dienste) oder über eine Erweiterung der von der Shell beim Start geladenen Datei um den benötigten Befehl und mittels des für diese Art Shell geeigneten Diensttyps.

Variable: home-files-service-type

The service of this type allows to specify a list of files, which will go to ~/.guix-home/files, usually this directory contains configuration files (to be more precise it contains symlinks to files in /gnu/store), which should be placed in $XDG_CONFIG_HOME or in rare cases in $HOME. It accepts extension values in the following format:

`((".sway/config" ,sway-dateiartig)
  (".tmux.conf" ,(local-file "./tmux.conf")))

Jede verschachtelte Liste enthält zwei Werte: ein Unterverzeichnis und ein dateiartiges Objekt. Nachdem Sie die Persönliche Umgebung erstellt haben, wird in ~/.guix-home/files der entsprechende Inhalt eingefügt und alle Unterverzeichnisse werden dazu erzeugt. Allerdings kümmert sich ein anderer Dienst darum, die Dateien dann weiter zu verteilen. Vorgegeben ist, dass ein home-symlink-manager-service-type die notwendigen symbolischen Verknüpfungen im Persönlichen Verzeichnis auf Dateien aus ~/.guix-home/files anlegt und Sicherungskopien bereits bestehender, im Konflikt stehender Konfigurationsdateien und anderer Dateien anlegt. Dieser symlink-manager gehört zu den essenziellen Persönlichen Diensten (die nach Vorgabeeinstellungen aktiviert sind), aber es ist möglich, dass Sie alternative Dienste benutzen, um fortgeschrittenere Anwendungsfälle wie ein nur lesbares Persönliches Verzeichnis hinzukriegen. Sie sind eingeladen, zu experimentieren und Ihre Ergebnisse zu teilen.

Häufig trifft man auf Benutzer von Guix Home, die zuvor ein anderes Verfahren zum Versionieren ihrer Konfigurationsdateien (d.h. ihrer Dotfiles) in einem einzelnen Verzeichnis benutzt haben, zusammen mit einer Technik, um Änderungen daran ins Persönliche Verzeichnis einzuspielen.

Mit dem Diensttyp home-dotfiles-service-type aus (gnu home services dotfiles) wird der Umstieg auf Guix Home für diese Nutzergruppe leicht gemacht. Dazu verweisen Sie einen Dienst dieses Typs auf das Verzeichnis mit den Dotfiles, damit Dotfiles automatisch ins Persönliche Verzeichnis des Benutzers übertragen werden, ohne dass auf die von Guix vorgegebene Struktur umgestellt werden müsste.

Bitte denken Sie daran, dass es eine gute Idee ist, die Dotfiles-Verzeichnisse unter Versionskontrolle zu stellen, zum Beispiel in demselben Repository, in dem Sie Ihre Guix-Home-Konfiguration organisieren.

Möglich sind bislang zwei Verzeichnislayouts für Dotfiles. Beim Layout 'plain wird folgende Struktur des Verzeichnisses erwartet:

~$ tree -a ./dotfiles/
dotfiles/
├── .gitconfig
├── .gnupg
│   ├── gpg-agent.conf
│   └── gpg.conf
├── .guile
├── .config
│   ├── guix
│   │   └── channels.scm
│   └── nixpkgs
│       └── config.nix
├── .nix-channels
├── .tmux.conf
└── .vimrc

Diese Baumstruktur wird genau so in das Persönliche Verzeichnis installiert, wenn Sie guix home reconfigure ausführen.

Das Layout 'stow, welches so aufgebaut sein muss, wie GNU Stow es empfiehlt, verfügt über eine zusätzliche Verzeichnisschicht für jede Anwendung, etwa:

~$ tree -a ./dotfiles/
dotfiles/
├── git
│   └── .gitconfig
├── gpg
│   └── .gnupg
│       ├── gpg-agent.conf
│       └── gpg.conf
├── guile
│   └── .guile
├── guix
│   └── .config
│       └── guix
│           └── channels.scm
├── nix
│   ├── .config
│   │   └── nixpkgs
│   │       └── config.nix
│   └── .nix-channels
├── tmux
│   └── .tmux.conf
└── vim
    └── .vimrc

13 directories, 10 files

Eine informelle Spezifikation finden Sie im Handbuch von Stow (siehe Introduction in Handbuch von GNU Stow). Die Baumstruktur wird dann nach dem Verfahren von GNU Stow ins Persönliche Verzeichnis installiert, wenn Sie guix home reconfigure ausführen.

Eine passende Konfiguration mit dem 'plain-Layout könnte so aussehen:

(home-environment
  ;; …
  (services
    (service home-dotfiles-service-type
             (home-dotfiles-configuration
               (directories '("./dotfiles"))))))

Erwartungsgemäß würden Sie das Persönliche Verzeichnis dann in diesem Zustand vorfinden:

.
├── .config
│   ├── guix
│   │   └── channels.scm
│   └── nixpkgs
│       └── config.nix
├── .gitconfig
├── .gnupg
│   ├── gpg-agent.conf
│   └── gpg.conf
├── .guile
├── .nix-channels
├── .tmux.conf
└── .vimrc
Variable: home-dotfiles-service-type

Liefert einen Dienst sehr ähnlich wie home-files-service-type (der sogar als Erweiterung für diesen implementiert ist), der aber so gestaltet ist, dass Benutzer, die ihre Dotfiles bisher schon in einem Verzeichnis nachvollziehbar aufbewahren, leicht auf Guix Home überwechseln können. Mit dem Dienst wird Guix Home auf das Dotfiles-Verzeichnis verwiesen, damit die Dateien automatisch ins Persönliche Verzeichnis eingespielt werden, ohne dass Sie alle Dotfiles an die von Guix vorgegebene Konfigurationsweise anpassen müssten.

Datentyp: home-dotfiles-configuration

Verfügbare home-dotfiles-configuration-Felder sind:

source-directory (Vorgabe: (current-source-directory)) (Typ: Zeichenkette)

Der Pfad, bei dem die Auflösung der Dotfiles enthaltenden Verzeichnisse beginnen soll. Vorgegeben ist, dass die Verzeichnisse mit Dotfiles relativ zu der Stelle im Dateisystem, an der home-dotfiles-configuration benutzt wird, als Quellort aufgelöst werden.

layout (Vorgabe: 'plain) (Typ: Symbol)

Welches Layout im angegebenen Verzeichnis vorliegt. Möglich ist entweder 'stow oder 'plain.

directories (Vorgabe: '()) (Typ: Liste-von-Zeichenketten)

Die Liste der Dotfiles enthaltenden Verzeichnisse. Dort wird home-dotfiles-service-type nach den Dotfiles von Anwendungen suchen.

packages (Typ: Vielleicht-Liste-von-Zeichenketten)

Die Namen eines Teils der Verzeichnisse im Paketlayout von GNU Stow. Wenn Sie welche angeben, wird home-dotfiles-service-type nur die Dotfiles aus dieser Teilmenge von Anwendungen einspielen. Dieses Feld wird beim Layout 'plain ignoriert.

excluded (Vorgabe: '(".*~" ".*\\.swp" "\\.git" "\\.gitignore")) (Typ: Liste-von-Zeichenketten)

Die Liste von Mustern, welche Dateien home-dotfiles-service-type auf der Suche nach Dotfiles beim Besuchen jedes in directories aufgeführten Verzeichnisses ausschließen soll.

Variable: home-xdg-configuration-files-service-type

The service is very similar to home-files-service-type (and actually extends it), but used for defining files, which will go to ~/.guix-home/files/.config, which will be symlinked to $XDG_CONFIG_HOME by home-symlink-manager-service-type (for example) during activation. It accepts extension values in the following format:

`(("sway/config" ,sway-file-like-object)
  ;; -> ~/.guix-home/files/.config/sway/config
  ;; -> $XDG_CONFIG_HOME/sway/config (by symlink-manager)
  ("tmux/tmux.conf" ,(local-file "./tmux.conf")))
Variable: home-activation-service-type

Mit dem Dienst dieses Diensttyps wird ein Guile-Skript erzeugt, das bei jedem Aufruf von guix home reconfigure und jeder anderen Aktion ausgeführt wird. Damit wird die Persönliche Umgebung aktiviert.

Mit dem Dienst dieses Diensttyps wird ein Guile-Skript erzeugt, das bei der Aktivierung der Persönlichen Umgebung ausgeführt wird. Um die symbolischen Verknüpfungen zu verwalten, tut es ein paar Dinge, nämlich:

  1. Der Inhalt jedes files/-Verzeichnisses der aktuellen und der künftigen Persönlichen Umgebung wird eingelesen.
  2. Alle symbolischen Verknüpfungen, die bei der vorherigen Aktivierung durch symlink-manager erzeugt wurden, werden gelöst. Wenn dadurch Unterverzeichnisse leer werden, werden sie gelöscht.
  3. Creates new symlinks the following way: It looks files/ directory (usually defined with home-files-service-type, home-xdg-configuration-files-service-type and maybe some others), takes the files from files/.config/ subdirectory and put respective links in XDG_CONFIG_HOME. For example symlink for files/.config/sway/config will end up in $XDG_CONFIG_HOME/sway/config. The rest files in files/ outside of files/.config/ subdirectory will be treated slightly different: symlink will just go to $HOME. files/.some-program/config will end up in $HOME/.some-program/config.
  4. Fehlende Unterverzeichnisse werden erzeugt.
  5. Wenn es schon eine Datei mit so einem Namen gibt, wird von der im Konflikt stehenden Datei eine Sicherungskopie behalten.

symlink-manager ist Teil der essenziellen Persönlichen Dienste und ist somit nach Vorgabeeinstellungen aktiviert und wird benutzt.


Nächste: Shells, Nach oben: Persönliche Dienste   [Inhalt][Index]