Ein anderer Datei-Explorer muss her

Mit `:Explore` kommt man ja schon weit, aber wenn man seine Verzeichnisse und Dateien schön in einer Sidebar zur Verfügung hat, macht es einem den Umzug schon leichter. Also: ein neuer Datei-Explorer muss her. Und zwar in Form von nvim-tree.

In der Datei lua/kaffdaddy/plugins/nvim-tree.lua lege ich eine grundlegende Konfiguration ab:

return {
 "nvim-tree/nvim-tree.lua",
 dependencies = {
   “nvim-tree/nvim-web-devicons”
 },
 config = function()
   -- disable netrw at the very start of your init.lua
   vim.g.loaded_netrw = 1
   vim.g.loaded_netrwPlugin = 1
-- set termguicolors to enable highlight groups vim.opt.termguicolors = true
require("nvim-tree").setup({ sort_by = "case_sensitive", view = { width = 30, }, renderer = { group_empty = true, }, filters = { dotfiles = true, }, })
local keymap = vim.keymap keymap.set("n", "<leader>eo", "<cmd>NvimTreeOpen<CR>", { desc = "Opens up file explorer" }) keymap.set("n", "<leader>et", "<cmd>NvimTreeToggle<CR>", { desc = "Toggle file explorer" }) keymap.set("n", "<leader>ecf", "<cmd>NvimTreeFindFile<CR>", { desc = "Toggle file explorer on current file" }) end, }

Ich merke jetzt schon, dass das Projekt neovim sehr komplex wird. Da die Steuerung komplett über Keyboard-Shortcuts funktioniert und man diese selber definieren kann, werde ich im nächsten Schritt Shortcuts definieren und in der Readme dokumentieren.

Als erstes habe ich den sogenannten Leader-Key von Backslash auf ein Komma geändert, was in der Datei lua/kaffdaddy/core/keymaps.lua geschieht. Auf einem deutschen Tastatur-Layout ist der Backslash etwas umständlich zu erreichen. Ich ahne schon, dass, wenn ich irgendwie mit dem Switch auf neovim Erfolg haben werde, der Umzug auf ein QWERTY-Keyboard-Layout folgen wird.

Die geänderten Keymaps für nvim-tree sind nicht in diese globale Konfiguration gerutscht, da sie nur erfolgen sollen, wenn nvim-tree geladen wurde. Da weiß ich aber noch nicht, ob das so eine gute Idee ist. Wenn ich das für jedes Plugin so machen werde, muss ich selber den Überblick behalten, in welcher Datei Keymaps-Bindings stehen, um mir nicht selber in die Quere zu kommen und eventuell schon bestehende Konfigurationen zu überschreiben.

Der aktuelle Stand der Konfiguration mit nvim-tree als Datei-Explorer ist hier zu finden.

Colors, colors, colors

Frei nach Ice-T brauche ich auch andere Farben. Eine Übersicht über die sogenannten colorschemes kann man sich hier verschaffen.
Für die Integration erstelle ich eine Datei colorscheme.lua unterhalb von lua/kaffdaddy/plugins mit folgendem Inhalt

return {
{
"bluz71/vim-nightfly-guicolors",
priority = 1000,
config = function()
vim.cmd([[colorscheme nightfly]])
end,
}
}

Hier kommt auch zum ersten Mal eine Funktion von Lazy ins Spiel und zwar kann man die Ladereihenfolge von Plugins über den Parameter priority steuern. Plugins, die bei Bedarf nachgeladen werden sollen, bekommen den Parameter lazy verpasst.

In der Datei lua/kaffdaddy/lazy.lua ändert man dann noch die Setup-Methode von Lazy folgendermaßen um:

require("lazy").setup(
{ import = "kaffdaddy.plugins" },
{
install = {
colorscheme = { "nightfly" }
}
}
)

Und schon sieht alles gar nicht mehr ganz so schlimm aus. Aktueller Stand des Repos: https://github.com/KaffDaddy/nvim-config/tree/0.2.0

Meine Reise mit neovim

Wenn man doch mal gezwungen wird, sich auf fremden Servern herumzutreiben und dort in irgendwelchen Konfigurationsdateien herumzustöbern kommt man um den Editor vi nicht herum. Und irgendwie bin ich darauf gestoßen, dass es Entwickler gibt, die die weiterentwickelte Version vim beziehungsweise dessen Fork neovim als eine Art IDE verwenden. Und das möchte ich auch. Weil man es kann. Mehr gibt es dazu einfach nicht zu sagen.

Und ich will mal schauen, ob ich soweit komme. Denn ein vorgefertigtes Paket dafür gibt es nicht. Das gesamte Ökosystem um vim/neovim besteht aus einer unüberschaubaren Zahl an Erweiterungen und einer noch viel größeren Anzahl an Wegen, sein Ziel zu erreichen. Also so ähnlich wie mit TYPO3, wenn man "nur" eine Website umsetzen möchte.

Man mag mir verzeihen, wenn ich neovim und seine ganzen Plugins und Erweiterungen noch falsch bezeichne. Ich werde auf dem bestimmt sehr steinigen Weg eine Menge Fehler machen, aber wenn ihr das Kopfschütteln beendet habt: helft mir! Wirklich, ich will den ganzen Kram lernen und für mich hier und in einem Repository dokumentieren. Vielleicht hilft es dem ein oder anderen, seine Konfiguration für neovim zu finden.

Zur Zeit verwende ich PhpStorm zum Entwickeln von PHP, der Integration von TYPO3-Extensions und ab und zu immer noch ein wenig Frontend in Form von Vanilla-JavaScript und SCSS. Bis auf ein paar Begebenheiten benutze ich PhpStorm aber wie einen Texteditor und genau deshalb möchte ich versuchen, alles in und mit neovim zu ersetzen.

Meine Anforderungen sind folgende:

  • Komplette Unterstützung von PHP, HTML, JavaScript, SCSS, Fluid und TypoScript
  • Auto-Vervollständigung
  • Debugging mit xDebug
  • Code-Qualitätstools wie PHP-CodeSniffer, CS-Fixer, Psalm und PHPStan
  • Integration von Test-Frameworks wie PHPUnit und Codeception
  • Konfiguration mittels editorconfig usw.

Die letzten Tage habe ich damit verbracht, mich in die Materie einzulesen, was sich erst einmal als sehr schwierig erwiesen hat. Eine Anlaufstelle für verzweifelte Menschen wie mich scheint es nicht zu geben. Zwar scheint sich die Community um vim/neovim und seine Plugins sehr anständig zu verhalten und ein nettes Klima zu pflegen, aber die Einstiegshürde ist phänomenal. Ich glaube, das letzte Mal, das ich vor so einem Berg stand, war damals, als ich mit TYPO3 angefangen habe (FC BigFeet anyone?).

Fangen wir also an und als erstes steht die Auswahl eines Plugin-Managers an. Und ich habe mich für Lazy entschieden, da Plugins, wie der Name schon vermuten lässt, nachgeladen werden und nicht alle beim Systemstart zur Verfügung stehen müssen.
Was ich auch bei vielen Konfigurationen gesehen habe und was ich dreist kopieren werde, ist die Aufteilung der Konfigurationen in einzelne Dateien.

Fangen wir also im Verzeichnis

~/.config/nvim

an, denn da gehört unter macOS oder Linux die Konfiguration hinein. Darunter erstelle ich mir das Unterverzeichnis lua und darunter noch das Verzeichnis kaffdaddy. Das kann ja jeder nennen, wie er möchte. In diesem untersten Verzeichnis kommt in die Datei lazy.lua der Bootstrap-Code für Lazy herein, wie er hier zu finden ist. Dann nur noch unter

~/.config/nvim/init.lua

per

require("kaffdaddy.lazy")

diese Datei laden und nach einem beherzten Schließen und Öffnen von neovim kann per

:Lazy

die wunderschöne Oberfläche von Lazy angeschaut werden.

Ich glaube, der nächste Schritt wird sein, dem Ganzen ein paar schönere Farben zu verpassen. Meine Konfiguration kann man jedenfalls hier Schritt für Schritt nachvollziehen.
Der aktuelle Stand für diesen Blogpost ist hier und alle Blogposts zu meiner Reise werden in der Kategorie neovim erscheinen. Muss man halt rückwärts lesen.

Das Elite der "Wing Commander"-Serie

Auf einem 286er habe ich damals mit einer EGA-Grafikkarte Wing Commander gespielt. Und ich war hin und weg. Was für eine Grafik. Was für ein Sound. Und was für eine Geschichte.

Klar. Schaut man sich das Ganze heutzutage an, sieht man nur Sprites, die winkelabhängig einfach gedreht und gezoomt werden. Von Vektorgrafik war damals noch nichts zu sehen. Aber dem Spielspaß tat das keinen Abbruch und nach dem Sequel kam dann Anfang der 90er "Wing Commander: Privateer" heraus.

Und genauso wie Strike Commander habe ich Privateer geliebt, aber als es mir vor ein paar Wochen in meiner Pile of shame vor die Augen hüpfte, grübelte ich, ob ich es jemals zu Ende gespielt habe. Das kann ich hier schon vorwegnehmen: habe ich nicht. Und ich weiß auch jetzt wieder warum...

Was mich verwundert hat, ist, dass Privateer heutzutage immer noch recht spielbar ist, wenn man sich auf die Pixelgrafik einlässt und keine tiefgehenden Spielmechaniken erwartet. Auch wenn das Spiel einige Mechaniken von Elite übernommen hat, ein nachvollziehbares Ressourcen-Management der Planeten ist nicht ersichtlich. Die Schwankungen der Preise beim Handel zwischen den Planeten scheint mir doch sehr zufällig zu sein.

Aber vielleicht sind es auch die überschaubaren Mechaniken, die mir gefallen. Ich werde ja auch nicht jünger und die überfrachteten Systeme aktueller Spiele sagen mir immer weniger zu. Vor allem, da ich das Gefühl habe, dass sie sowieso nur zum Verlängern der Spielzeit dienen und komplett weggelassen werden könnten. Okay, wer auf Open-Sandbox-Spiele steht und hundert Baumstämme grinden möchte, um irgendwas bauen zu können... geschenkt. Das ist halt das Genre und kann man meiden. Aber, warum ich in einem Zelda mittlerweile mehr Stunden mit Kochen oder dem Suchen von Zutaten beschäftigt bin, obwohl ich die Geschichte verfolgen möchte, werde ich nicht verstehen.

Und selbst in einem Privateer muss ich mich erstmal hocharbeiten, denn mit dem Raumschiff, das mir am Anfang zur Verfügung steht, wird wohl niemand die gesamte Story erledigt haben. Obwohl, müsste man mal schauen. Der aktuelle Speedrun-Rekord liegt bei knapp unter anderthalb Stunden. Wobei die Speedruns meines Wissens mit einem Cheat begonnen werden dürfen, bei dem man sich über einen Bug im Verkaufsmodul am Anfang genug Geld besorgt, um sich das beste Schiff und die beste Ausrüstung zu kaufen.

Den habe ich nicht benutzt und so musste ich mich durch den quälend langen Anfang kämpfen, um erstmal mit Rohstoff-Handel zwischen den Planeten und den ersten Kampfmissionen genug Geld zu erwirtschaften, um mit der Story beginnen zu können. Durch diese bin ich dann auch recht zügig durchgekommen, bis sich das letzte Kapitel öffnete und ich neue Planetensysteme erkunden musste, in der so gut wie jeder Sprungpunkt, an dem man in den Hyperraum gelangt, um zwischen den Systemen zu wechseln, in einem Asteroiden-Haufen lag. Und sich dort auch noch eine Menge Gegner tummelten.

Und bis dahin habe ich damals gespielt gehabt, denn die Begegnung mit der Alien-Rasse habe ich bis heute nie gesehen. Obwohl das auch nur noch eine Handvoll Missionen waren. Naja, das habe ich jetzt nachgeholt und Privateer kann endlich vom Pile of shame genommen werden.

Bei GOG gibt es übrigens "nur" die CD-Version inklusive Speech-Pack zu erwerben. Da bei dieser Version keine Untertitel bei den Gesprächen angezeigt werden, muss man sich mit einem Hex-Editor helfen und in der Datei "dosboxPRIV.conf" an drei Stellen den Dateinamen für "SPEECH.PAK" manipulieren, so dass sie nicht mehr gefunden wird. Leider verliert man dadurch jegliche Sprachausgabe, aber so kann man wenigstens besser der Handlung folgen.

Eis am Sterben

Heute habe ich mal meinen Kindern einen sterbenden Gletscher gezeigt. Der Gletscher Weißseeferner (oder auch Kaunertaler Gletscher) unterhalb der Weißseespitze liegt zwar am Ende eines wundervoll schönen Tales, der Anblick ist aber schon so ernüchternd und schlimm, dass mir eigentlich immer noch die Worte fehlen.
Der Gletscher ist nicht mehr zu retten, der örtliche Tourismusverband scheint aber immer noch an dem kleinen Skigebiet festzuhalten und versucht mit einer Menge Geld, das Skigebiet halten zu wollen.

Das schönste Land der Welt

Ich stelle mir ab und zu die Frage, ob es noch ein Fleckchen auf dieser Welt gibt, auf dem ich lieber leben wollen würde. Und die Schweiz war und ist immer noch genau dieses Land. Zugegeben habe ich noch nicht viel von dieser Welt gesehen und bin selbst in Europa noch gar nicht viel herumgekommen. Aber von allen Fleckchen, die ich bisher gesehen habe, würde ich die Schweiz als meinen Favorit sehen.

In der Schweiz gibt es einfach die schönsten Berge.

Hashtag TYPO3Flag

Dank Oliver Klee bin ich nun stolzer Besitzer einer TYPO3-Flagge. Mit dem alten Logo!
Ich muss mir jetzt nur noch eine Wand freischaufeln, an der ich sie befestigen kann. Das wird eine Aufgabe werden, befindet sich doch mein Home-Office im Dachgeschoss, dessen Wände alle komplett verputzt sind. Ich glaube, ich werde rausgeschmissen, sollte ich die Flagge mit Reiszwecken oder ähnlichem befestigen wollen.

Nichtsdestotrotz möchte ich die Flagge nicht für immer behalten. Mir schwebt vor, dass die Flagge alle drei Monate zu einem weiteren TYPO3-Begeisterten wandert und ich die Reise hier festhalten werde (wenn der Empfänger damit einverstanden ist). Ich bin gespannt, ob überhaupt jemand Interesse an der Flagge und an der Idee hat. Ich schlage vor, dass sich auf allen Wegen bei mir gemeldet werden kann: als Kommentar in diesem Artikel, als Reply von diesem Mastodon-Tröt (ich mag dieses Wort überhaupt nicht) oder auch per E-Mail. Ich werde alles sammeln und Ende Januar den hoffentlich glücklichen Gewinner bekannt geben, der die Flagge Anfang April von mir zugeschickt bekommt (Adresse erfrage ich dann noch).

Es hat sich ausgetwittert

Vor über 14 1/2 Jahren habe ich mich bei Twitter angemeldet und für mich war es die schönste und vor allem nützlichste Form eines Social Networks. Man konnte nicht nur interessanten Leuten oder Spaß-Accounts folgen, sondern auch Bots folgen, die einem wichtige Tweets in die Timeline spülten. Das Webinterface habe ich nie genutzt, sondern schon immer Tweetbot als Client auf all meinen Systemen verwendet. Ein hervorragendes Stück Software und die Hoffnung besteht, dass es in naher Zukunft auch Tweetbot für Mastodon geben könnte.

Aber für mich ist auf Twitter erstmal Schluss. Zwar bin ich da recht inkonsequent und werde meinen Account erstmal nicht löschen, da muss ich erstmal meinen Trennungsschmerz verarbeiten. ;-) Aber ich werde definitiv nichts mehr dort posten oder auch nur den Drang verspüren, dort etwas zu verpassen. Dafür hat sich dort in den letzten Wochen zu viel verändert, was die scheinbare Ausrichtung des Netzwerkes angeht. Wenn es nun möglich ist, dass der Chef persönlich Umfragen auf seinem Account (und damit seiner Filterblase) über weitreichende Entscheidungen tätigt, ist das für mich nicht mehr konsensfähig.

Mastodon fühlt sich ganz nett an, die dezentrale Architektur lässt hoffen, dass kein Machtgefüge entstehen kann, die das gesamte Netzwerk gefährden könnte. Schauen wir mal.