Adventskalender 9. Dezember 2024 - Was tun mit den ganzen gepunkteten Dateien?

Smalltalk
Antworten
Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Adventskalender 9. Dezember 2024 - Was tun mit den ganzen gepunkteten Dateien?

Beitrag von Liffi » 09.12.2024 05:49:54

Motivation
Wer sich auch verschiedenen unterschiedlichen Rechnern zuhause fühlt, möchte dort die gleichen Einstellungen vorfinden, wie auf den anderen Geräten auch.
Mit Einstellungen sind hier vor allem EInträge in den "gepunkteten Dateien", also den Dotfiles gemeint. Die finden sich üblicherweise im Homeverzeichnis (~) und heißen z.B. .vimrc oder befinden sich unter .config.

Nur wie stellt man das geschickt und effizient sicher, dass die Einstellungen überall gleich sind?
Man könnte:
  • das ganze home in ein Versionskontrollsystem, z.B. git packen
  • sich etwas mit rsync und cron oder ähnlichem basteln
  • die Einstellungsdaten per Hand hin- und her kopieren und hoffen, dass man dabei die Übersicht behält. Z.B. Änderungen nur auf einem master-System machen und dann überall hinkopieren
Diese Lösungen haben alle mehr oder weniger gravierende Nachteile. Mal wird das ganze ein bisschen unübersichtlich, weil man vielleicht nicht alle Dateien im home-Verzeichnis in git haben möchte, mal muss man Angst haben, dass man sich aus Versehen in den Fuß schießt, mal will ich einzelne Dateien ausschließen, weil ich bei einem Programm dann doch unterschiedliche Einstellungen pflegen möchte.

Nutzung
Hier schafft chezmoi Abhilfe.
Motto ist "Manage your dotfiles across multiple diverse machines, securely.", also die Einstellungsdateien über verschiedene Maschinen sicher verwalten.
Vorweg: Leider ist es nicht in den offiziellen Repositories enthalten, aber es gibt zumindest vorgefertigte deb-Pakete für allerlei Plattformen.

Initialisierung
Nachdem das Tool es aber mal auf die Platte geschafft hat, können wir loslegen:

Code: Alles auswählen

chezmoi init
Dieser Befehl legt ein git-Repository nach ~/.local/share/chezmoi. Das ist erst einmal unabhängig von den Dateien im Homeverzeichnis. Es verwaltet den Status der ihm zugeordneten Einstellungsdateien.
Dateien hinzufügen
Mit folgendem Befehl fügen wir die erste Datei zu chezmoi hinzu:

Code: Alles auswählen

chezmoi add ~/.vimrc
Was passiert jetzt genau?
chezmoi kopiert die Datei ~/.vimrc nach ~/.local/share/chezmoi/dot_vimrc. Die kann dann dort mit den gewohnten git-Bordmitteln verwaltet werden, in meinem Fall habe ich ein gitlab-Repository hinterlegt und dorthin gepusht, damit ich es auf anderen Rechnern "auschecken" kann. Ich verzichte mal auf die Beschreibung von git an dieser Stelle. Falls notwendig, kann ich das noch in weiteren Kommentaren erläutern.

Dateien bearbeiten
Es gibt nun mehrere Möglichkeiten die Datei zu bearbeiten, entweder direkt, oder nun besser mittels:

Code: Alles auswählen

chezmoi edit ~/.vimrc
Damit öffnet sich ~/.local/share/chezmoi/dot_vimrc im $EDITOR, bei mir ist das der vim ;-), bei anderen womöglich ein anderer Editor. Nun kann man seine Änderungen durchführen. :!: Diese Änderungen sind dann noch nicht im System. Erst können wir uns die Änderungen anschauen, die sich ergeben würden:

Code: Alles auswählen

chezmoi diff
Wenn man glücklich mit den Änderungen ist, kann man sie folgendermaßen im Dateisystem unterbringen:

Code: Alles auswählen

chezmoi apply
Wer sich noch nicht sicher ist, kann mit -v die Änderungen nochmals sehen und mit -n auch einen Trockenlauf durchführen. Das ist insbesondere später nett, wenn man potentiell mehrere Dateien auf einem anderen Rechner geändert hat und sich nun anschauen möchte, bevor sie im System landen.

Das sind zunächst mal die grundlegenden Funktionalitäten.


Weiterführende Themen wären z.B. templating.
Damit kann man beispielsweise manche Teile nur auf bestimmten Rechnern aktiv haben, hier ein if, das gegen den Hostnamen testet:

Code: Alles auswählen

# machine-specific configuration
{{- if eq .chezmoi.hostname "work-laptop" }}
# this will only be included in ~/.bashrc on work-laptop
{{- end }}
Auch sehr nützlich ist die Einbindung von Passwortmanager, ich habe z.B. beruflich ein paar gitlab-Token, die ich gerne als Variablen in der Shell verfügbar haben möchte, aber nicht eingecheckt in einem Repository. Hier kann chezmoi dann mithilfe des Passwortmanagers diese Variablen befüllen und die Sicherheit bleibt bewahrt.

chezmoi bietet sicher noch einen Haufen weiterer Funktionalität, aber ich hoffe, ich konnte euch einen ersten Eindruck liefern. Für mich hat es sich beim Wechsel meines alten zum neuen Laptop schon massiv gelohnt. Nicht mehr einfach eine handvoll dotfiles kopieren, manche vergessen, bei manchen irritiert sein, dass man zu viel kopiert hat, sondern einfach direkt mit allem wichtig loslegen können

Benutzeravatar
mn77de
Beiträge: 194
Registriert: 23.11.2003 16:53:53
Wohnort: Übersee
Kontaktdaten:

Re: Adventskalender 9. Dezember 2024 - Was tun mit den ganzen gepunkteten Dateien?

Beitrag von mn77de » 09.12.2024 07:46:34

Einen wunderschönen guten Morgen und danke für dieses tolle Türchen! :D
Von mir ist auch noch ein Türchen in dieser Richtung geplant, welches am 17. erscheinen wird. Ich selbst habe hier schon einige Experimente durch, bis ich einen für mich praktikablen Weg gefunden habe. Aber dazu dann mehr am 17.

Jedenfalls finde ich das Thema sehr interessant und Chezmoi hat da einen guten Ansatz. :THX:
Debian stable, AwesomeWM, Mate, Helix, LF, Git, Java, Xemy, JayMo, ...
OpenSource! :THX:

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: Adventskalender 9. Dezember 2024 - Was tun mit den ganzen gepunkteten Dateien?

Beitrag von Liffi » 09.12.2024 08:15:22

mn77de hat geschrieben: ↑ zum Beitrag ↑
09.12.2024 07:46:34
Von mir ist auch noch ein Türchen in dieser Richtung geplant, welches am 17. erscheinen wird. Ich selbst habe hier schon einige Experimente durch, bis ich einen für mich praktikablen Weg gefunden habe. Aber dazu dann mehr am 17.
Da bin ich auf jeden Fall mal gespannt. Ich habe früher wirklich viel manuell in der Richtung gemacht, Dateien hin- und hergesynct. Mich gefragt, was aktueller ist, was die Änderungen sind und so. Jetzt bin ich fast zufrieden ;-). Was noch fehlt ist, dass mir meine Shell sagt: Hey, da sind noch Konfigurationsdateien, die du dir vielleicht anschauen möchtest, weil sich auf einem anderen Rechner etwas geändert hat.

Benutzeravatar
whisper
Beiträge: 3379
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Adventskalender 9. Dezember 2024 - Was tun mit den ganzen gepunkteten Dateien?

Beitrag von whisper » 09.12.2024 08:45:06

Guten Morgen,
die Idee mit dem zentralen Pflegen der dotfiles ist cool, und leuchtet mir sofort ein. Alleine hier im Haushalt lungern eine Handvoll Linuxe rum.
:)
Auch in der Firma stoße ich immer wieder auf ein System, wo sich mein $Editor nicht merkt, wo ich das letzte mal gearbeitet hatte.
Optimal wäre es, wenn das nicht auf git fußen würde und oder CVS unterstützen könnte.

Ja ich bin alt, und ewig gestrich. Aber ich mag halt CVS.
Aber es gibt Hoffnung, denn auf der cezmoi Seite fand ich einen Vergleich:
https://www.chezmoi.io/comparison-table/

Aslo vielen Dank für das Türchen! :THX:
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: Adventskalender 9. Dezember 2024 - Was tun mit den ganzen gepunkteten Dateien?

Beitrag von Liffi » 09.12.2024 09:21:22

whisper hat geschrieben: ↑ zum Beitrag ↑
09.12.2024 08:45:06
Optimal wäre es, wenn das nicht auf git fußen würde und oder CVS unterstützen könnte.
Ich glaube nicht, dass was dagegen spricht, das Ganze mittels CVS zu versionieren. Am Ende ist es ja nur ein Verzeichnis, dass chezmoi da nutzt.

chrbr
Beiträge: 624
Registriert: 29.10.2022 15:53:26

Re: Adventskalender 9. Dezember 2024 - Was tun mit den ganzen gepunkteten Dateien?

Beitrag von chrbr » 09.12.2024 11:01:01

Das ist ein interessantes Programm. Wie jeder habe ich das selbe Problem. Ein Rechner ist zudem noch ein Spezialfall, weil dort eine gemeinsame Home-Partition für Debian und FreeBSD genutzt wird. Natürlich ist es wünschenswert, die Konfigurationen der einzelnen Rechner zu sichern. Mein momentaner Ansatz ist ein Verzeichnis, im dem letztendlich die Konfigurationen aller Rechner stehen.

Ein Beispiel sei .Xresources. Hier sind im x11-Unterverzeichnis mehrere Dateien.

Code: Alles auswählen

> ls -li .tank/myconfig/x11/Xresources*
34833 -rw-r--r--  1 chris chris 1101  9 Feb.  2024 .tank/myconfig/x11/Xresources
34816 -rw-r--r--  1 chris chris 1296 30 März  2024 .tank/myconfig/x11/Xresources_dell
67325 -rw-r--r--  1 chris chris 1303 20 Nov. 15:24 .tank/myconfig/x11/Xresources_lenovo
33295 -rw-r--r--  1 chris chris 1304 26 Nov. 14:05 .tank/myconfig/x11/Xresources_thinkpad
34823 -rw-r--r--  1 chris chris 1461 14 Feb.  2024 .tank/myconfig/x11/Xresources_urxvt
Durch einen Link im Home-Verzeichnis wird die passende Datei gewählt.

Code: Alles auswählen

> ls -li .Xresources 
643 lrwxr-xr-x  1 chris chris 33 15 Feb.  2024 .Xresources@ -> .myconfig/x11/Xresources_thinkpad
Es gibt auch Konfigurationen, die für alle Systeme identisch sind. Ein Beispiel wäre mc.

Code: Alles auswählen

> file .config/mc
.config/mc: symbolic link to /usr/home/chris/.tank/myconfig/mc
Das ganze ist immer doch etwas wie Kraut und Rüben, allerdings habe ich damit zumindest alle Dateien in einem Verzeichnis, das ich sichern kann. Die einzelnen Unterverzeichnisse unterliegen zum Teil einer Versionskontrolle.

Antworten