Eine Einführung in Dotfiles: So übernehmen Sie die Kontrolle über Ihre Entwicklungsumgebung

Hinweis: Dies ist ein sehr grundlegender Einführungsartikel. Wenn Sie die Grundlagen des Dotfile-Managements bereits kennen, empfehle ich Ihnen, meinen zweiten Artikel zu lesen.

Als Entwickler bemühen wir uns, den Zeitaufwand für redundante Dinge wie das Einrichten unserer Umgebung, das Schreiben von Boilerplate-Code und im Grunde genommen nichts zu tun, was den unterhaltsamen Teil des Codierens nicht betrifft - das Erstellen neuer Dinge.

Stellen Sie sich in diesem Zusammenhang eine perfekte Welt vor, in der winzige Befehle unglaublich komplexe Aufgaben ausführen, die auf Ihre Bedürfnisse zugeschnitten sind. Sie könnten heute einen neuen Laptop kaufen und alle benötigten Tools und Pakete installieren und Ihre Entwicklungsumgebung mit nur ein paar Terminals einrichten Befehle, und wo alles Magie ist.

Dieses digitale Märchenland kann mit Leichtigkeit erstellt werden. Und es gibt einen Namen für diese Magie: Punktedateien.

Lassen Sie uns ohne weiteres die Geheimnisse der Dotfiles lüften!

Einführung

Hinweis: In diesem Artikel wird davon ausgegangen, dass Sie mit einem Unix-ähnlichen Betriebssystem arbeiten, und er basiert stark auf Unix-Terminalbefehlen und Shell-Skripten. Wenn Sie mit diesen nicht vertraut sind, empfehle ich, die Grundlagen zu lernen und hierher zurückzukehren. Hier ist eine Einführung in das Shell-Scripting.

In UNIX-ähnlichen Systemen wird vielen Konfigurationsdateien und dergleichen ein Punkt (.) Vorangestellt. Diese Dateien werden vom Betriebssystem standardmäßig ausgeblendet, und selbst der lsBefehl zeigt ihre Anwesenheit nicht an (wir werden gleich erfahren, wie Sie diese Dateien finden). Da diesen Dateien ein Punkt vorangestellt ist, werden sie als Punktdateien bezeichnet. Duh.

Wie finden wir diese legendären Dateien, wenn sie standardmäßig ausgeblendet sind? Öffnen Sie ein Terminal und machen Sie Folgendes:

Hinweis: Das Zeichen "$" darf nicht in das Terminal eingegeben werden. Es stellt die Tatsache dar, dass der Text danach in eine Terminal-Eingabeaufforderung eingegeben werden soll.
$ cd ~$ ls -a

Was macht das also?

Der erste Befehl ( cd ~) wechselt in das Ausgangsverzeichnis (das Symbol „~“ steht für das Ausgangsverzeichnis). Im Home-Verzeichnis befinden sich die meisten Ihrer Konfigurationsdateien. Also ziehen wir zuerst dorthin.

Der zweite Befehl listet die Dateien und Ordner im aktuellen Verzeichnis auf. Aber hier ist etwas Magie. Das -aFlag weist den Befehl an, versteckte Dateien in die Liste aufzunehmen.

Bingo! Wir können jetzt die Dotfiles sehen!

Ändern des .bash_profile

Normalerweise ist die erste Datei, die die meisten Benutzer ändern, wenn sie in die Welt der Punktedateien eintreten, die .bash_profileoder die .bashrc. Und das aus gutem Grund. Diese Datei wird beim Starten des Terminals geladen und ihre Befehle werden beim Start des Terminals ausgeführt.

Ein Grund, warum Sie möglicherweise .bash_profileIhr Terminal ändern möchten, besteht darin, das Aussehen Ihres Terminals anzupassen (um genau zu sein, Ihre Terminal-Eingabeaufforderung). Dies ist eine Kunst und eine Wissenschaft für sich und sollte wahrscheinlich ein ganzes Buch enthalten, daher werde ich dieses Thema in diesem Artikel nicht viel behandeln. Mit diesem Artikel können Sie mit dem Anpassen Ihrer Eingabeaufforderung beginnen.

Schauen wir uns stattdessen zwei gängige Shell-Konstrukte an, die möglicherweise zu den wichtigsten und nützlichsten Teilen von Punktedateien gehören: Aliase und Funktionen.

Aliase

Aliase sind einfach Kurznamen / Akronyme, die Sie einer längeren Folge von Befehlen zuweisen können, um die Eingabe zu verkürzen und damit die Geschwindigkeit zu erhöhen. Zum Beispiel verwendet fast jeder Entwickler Git. Jeder, der die Git-CLI verwendet (und seien wir ehrlich - Sie sollten die Git-CLI verwenden), hat wahrscheinlich lange Befehle wie diese verwendet:

// commit changes$ git commit -m "some changes"
// push changes to the master branch of origin$ git push origin master

Diese Befehle sind ziemlich viel zu tippen. Wenn Sie glauben, dass dies nicht der Fall ist, werden Sie Ihre Meinung ändern, nachdem Sie Aliase verwendet haben.

Geben Sie Folgendes in Ihre Shell-Eingabeaufforderung ein:

$ alias gpom="git push origin master"

Jetzt, wenn Sie tippen gpom, git push origin masterwird ausgeführt! Sie sind von 4 Wörtern auf 4 Buchstaben gegangen ! ?

Aber es gibt ein Problem. Schließen Sie Ihr Terminal, starten Sie es neu und versuchen Sie es gpomerneut. Dein Alias ​​ist weg! Dies liegt daran, dass der Alias ​​für die aktuelle Terminalsitzung definiert ist.

Wie können wir das umgehen und unsere Aliase festhalten?

Denken Sie daran, wir haben über eine Datei gesprochen, deren Befehle beim Starten eines Terminals ausgeführt werden. Bingo!

Fügen Sie Ihrem .bash_profileoder die folgende Zeile hinzu .bashrcund speichern Sie sie:

alias gpom="git push origin master"

Wenn Sie jetzt ein Bash-Terminal starten, wird der obige Alias ​​erstellt. Das Leben beginnt schon großartig zu werden!

Hinweis: Sie können den nanoTexteditor verwenden, um Ihre Textdateien zu bearbeiten. Geben Sie im nano .bash_profileAusgangsverzeichnis ein, um die Datei mit nano zu öffnen, Ihre Änderungen vorzunehmen und die Datei zu speichern, indem Sie auf Ctrl+Xund dann yklicken, wenn Sie dazu aufgefordert werden. Vimist ein weiterer Texteditor, den Sie verwenden können.

Da Aliase im Wesentlichen den vollständigen Befehl ersetzen, können Sie Aliase als Teil eines allgemeinen CLI-Tools mit mehreren Befehlen wie git verwenden, um alle Befehle zu vereinfachen. Fügen Sie dies einfach zu Ihrem hinzu .bash_profile:

alias g="git"

Und Sie können "g" anstelle von "git" eingeben, wo immer Sie "git" verwenden möchten. Süss!

Hier sind einige gebräuchliche Aliase, die Sie möglicherweise verwenden möchten:

alias home="cd ~"alias ..='cd ..'alias '?=man'# Git CLI aliasesalias g="git"alias gi="git init"alias gra="git remote add"alias gs="git status"...# Aliases for NPMalias nr="npm run"alias ni="npm install"alias nid="npm install -D"...

Funktionen

Aliase können einen großen Beitrag zur Verbesserung unseres Workflows leisten, aber eines können sie nicht: mit Argumenten arbeiten.

Angenommen, Sie hatten es satt, zwei Befehle auszuführen, um ein neues Verzeichnis cdzu erstellen:

$ mkdir new_folder$ cd new_folder

Und Sie wollten dafür einen Alias ​​erstellen. Aber Sie können nicht, da beide mkdirund cdArgumente nehmen, und Sie können keine Argumente an Aliase übergeben.

So was nun? Denken Sie daran, es gibt ein sehr verbreitetes Programmierkonstrukt, das Argumente akzeptiert. Ja, Funktionen! Shell-Skripte können Funktionen haben, die Argumente annehmen können. Genial! Wenn Sie mit Funktionen in Shell-Skripten etwas verrostet sind, finden Sie hier eine kleine Erinnerung.

Sie können die obige Sequenz in eine Shell-Funktion wie diese umwandeln (dieses Beispiel stammt aus den Punktedateien von mathiasbynens, die einige der beliebtesten Punktedateien haben. Andere Personen mit hervorragenden Punktedateien, auf die verwiesen werden kann, werden am Ende von aufgelistet und verlinkt der Artikel):

# Create a new directory and enter itfunction mkd() { mkdir -p "[email protected]" && cd "$_";}

Auch hier können Sie dies in Ihre .bash_profileund die Funktion ist während jeder Terminalsitzung zugänglich.

Hinweis: Sie müssen Ihr Terminal neu starten, damit Änderungen an Ihrem Terminal .bash_profilewirksam werden. Wenn dies eine lästige Pflicht ist, führen Sie aus source .bash_profile, um Ihre Änderungen zur aktuellen Terminalsitzung hinzuzufügen. Noch besser, im Geiste von Dotfiles, machen Sie einen Alias ​​wie alias reload="source .bash_profile"!

Dotfiles und Sharing

Warum verpflichten Menschen ihre Entwicklungsumgebungen - ihre Punktedateien - zur Versionskontrolle? Warum stellen sie es auf GitHub bereit, damit jeder es sehen kann? Gleicher Grund wie immer: um zu verfolgen, wie sich Ihre Dotfiles im Laufe der Zeit entwickeln, und vor allem, um Ihre Dotfiles zu teilen und andere Menschen zu inspirieren .

Wenn Sie sich ein ausgereiftes Dotfiles-Repo ansehen, werden Sie feststellen, dass immer Schnipsel aus anderen Dotfiles-Repos und dergleichen stammen. Sie können sogar mehrere Mitwirkende und Betreuer haben. Wir teilen Punktedateien, um uns gegenseitig beim Aufbau besserer Umgebungen und Workflows zu unterstützen.

Auf diese Weise können Benutzer auch Funktionen der Versionskontrolle verwenden, um die Punktedateien der anderen zu verbessern. Ein Beispiel hierfür ist die Verwendung des GitHub Issue Tracker, um Probleme und Verbesserungen zu diskutieren.

Ich wurde inspiriert, an meinen Dotfiles aus den Dotfiles von Pradyunsg zu arbeiten, der selbst ein beeindruckendes Dotfiles-Repo hat.

Meine eigenen Dotfiles sind momentan ziemlich einfach und sehr unreif und werden mit der Zeit besser. Dies bedeutet aber auch, dass Anfänger in der Welt der Dotfiles weniger eingeschüchtert sind, wenn sie das Repo auschecken.

Wie viele andere Leute habe ich Unterstützung für die Anpassung meiner Punktedateien hinzugefügt, daher ist es möglicherweise eine gute Idee für Leute, die mit der Idee von Punktedateien noch nicht vertraut sind, das Repo zu teilen und zu versuchen, es zu ihrem eigenen zu machen. Weitere Details im Repository. Schau sie dir an und gib mir Feedback!

Hier ist eine Liste von Personen, deren Punktedateien viel umfangreicher sind und Sie inspirieren könnten:

  • pradyunsg
  • mathiasbynens
  • paulmillr
  • Holman

Fazit

These are the very fundamentals of creating your development environment using dotfiles. However, there is a lot more to this, which we’ll continue looking at in the next article in this series.

Some of the topics we’ll look at in the next article in the series are:

  • Creating an environment to organize, track and painlessly work with dotfiles
  • Splitting our dotfiles to make managing them easier and more scalable (notice it is dotfiles, not dotfile)
  • Writing scripts to setup (bootstrap) a new system with our dotfiles
  • Making our dotfiles easy to share by adding support for customization

That concludes the first part of the series on dotfiles! Here’s a link to the next one.

I loved the idea of dotfiles so much that it inspired me to create a basic dotfile management framework - autodot. The framework is in its infancy, so I’m looking for enthusiastic people who can give me feedback for the framework, contribute to it by telling me about bugs and making feature requests, and contribute to the code and documentation. Do take some time out for this! :)

ajmalsiddiqui/autodot

autodot - A dotfile management system that makes sharing your dotfiles easy while keeping you in the loop.github.com

Also, connect with me on GitHub and LinkedIn.

Good luck and Happy Coding! :)