dotfiles

Auf Linux und Mac OS Systemen werden Benutzer-spezifische Einstellungen von verschiedenen Programmen üblicherweise durch Textdateien im Home-Verzeichnis verwaltet, sogenannte dotfiles. Damit all diese Einstellungen auch auf verschiedenen Systemen (Heim-PC, Laptop, …) immer da sind, habe ich mir ein per SparkleShare synchronisiertes Git-Archiv für diese angelegt.

Per SparkleShare synchronisierte Archive liegen im Ordner ~/SparkleShare/, meine dotfiles also unter ~/SparkleShare/dotfiles. Die synchronisation per SparkleShare hat den Vorteil dass Änderungen die ich lokal mache auch sofort auf meine anderen Geräte geschoben werden und ebenso ich lokal immer die aktuellste Version besitze. Der Einfachheit halber reicht es aber auch das ganze händisch per git zu pullen und zB durch einen Crontab regelmäßig zu aktualisieren.

Meine Dotfiles

Meine dotfiles findet ihr in meinem Github-Account unter github.com/cnlpete/dotfiles. Solltet ihr Verbesserungsvorschläge haben freue ich mich natürlich auch über Pull Requests 🙂

Aufgebaut sind diese so:

Es gibt mehrere Unterordner, jeder davon besitzt ein eigenes install-Skript in welchem die entsprechende(n) alten Dateien in ein Backup-Verzeichnis verschoben werden und danach ein symlink zu der Versionierten Datei erstellt wird.

Beispiel ssh/install.sh:

#!/bin/bash
[ ! -L ~/.ssh/config ] && mv ~/.ssh/config ${olddir}/ssh.config && ln -s ${dir}/ssh/config ~/.ssh/config"

Die Variable olddir ist hier mit einem Backup-Verzeichnis belegt (zb. ~/dotfiles.old) und dir zeigt auf den Pfad des dotfile-Repositiories (zb. ~/SparkleShare/dotfiles).

 

Des weiteren gibt es im Hauptverzeichnis ein globales Installationsskript, welches die beiden Variablen vernünftig vorbelegt und alle Installations-Skripte sämtlicher Unterordner aufruft.

# dotfiles directory
export dir=~/SparkleShare/dotfiles
# old dotfiles backup directory
export olddir=~/dotfiles_old
# list of files/folders to symlink in homedir
folders=$(cd ${dir} && ls -d */)
#folders="git gnupg ssh zsh"
##########

# create dotfiles_old in homedir
[ ! -d ${olddir} ] && echo -n "Creating ${olddir} for backup of any existing dotfiles" && mkdir -p ${olddir}

# change to the dotfiles directory
if [ ! -d ${dir} ] ; then
echo "${dir} does not exists, aborting"
  exit 1
else
cd ${dir}

  # run all available install-skripts
  for folder in $folders; do
if [ -e ${dir}/${folder}/install.sh ] ; then
if [ ! -x ${dir}/${folder}/install.sh ] ; then
echo "making ${folder}/install.sh executable"
        chmod +x ${dir}/${folder}/install.sh
      fi
echo ${folder}
      ${dir}/${folder}/install.sh
    fi
done
fi

Erweiterungsmöglichkeiten

Das ganze lässt sich also ziemlich einfach erweitern, nämlich indem einfach ein neuer Ordner erzeugt wird, die entsprechenden Konfigurationsdateien hinein geschmissen werden und diese analog zu den bestehenden install-Skripten verlinkt werden.

Momentaner Stand

Momentan ist es in meinem dotfiles-Repository noch sehr aufgeräumt. Lediglich meine ssh-Konfiguration (mit den verschiedenen HostNames), meine git-Konfiguration (mit ein paar nützlichen aliasen (zb für signed commits)), meine zsh-Konfiguration für zprezto und meine gnupg Konfiguration. Gerade die letztere ist schon ein Indiz dafür, dass ihr das Repository nicht direkt verwenden solltet, sondern dies eher als Anhaltspunkt nehmen und/oder euren eigenen Fork kreieren solltet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.