Kitty Coziness

Bitmap-Fonts sind gestochen scharf, und keine Vector-Schrift kommt da heran. Kitty ist mein liebster Terminal-Emulator — nur sein Maintainer will Bitmap-Fonts partout nicht unterstützen. Also habe ich einen alten AUR-Patch nach Nix portiert und auf eine aktuelle Kitty-Version gehoben: ein Override, das den Python-Matcher zum Opt-in überredet und die Zell-Metriken aus dem Strike statt aus font-units rechnet. Dazu fontconfig-Pinning, damit Cozette deterministisch auf den 13px-Strike auflöst.

Ich liebe Bitmap-Fonts. Nicht aus Nostalgie, sondern weil sie auf meinem Display schlicht besser aussehen: gestochen scharf, jedes Pixel von Hand gesetzt, kein Antialiasing-Matsch, keine Sub-Pixel-Lotterie. Bei der richtigen Größe ist eine gute Bitmap-Schrift in einem Terminal so ruhig und lesbar, dass keine Vector-Font dagegen anstinken kann — die muss bei kleinen Pixelgrößen immer raten, wo die Kante hin soll, und rät selten so gut wie ein Mensch, der den Glyph Pixel für Pixel hingelegt hat. Meine Lieblingsschrift ist Cozette : eine 13px-Bitmap im Geist von Tamzen und Creep, kompakt, mit großem Unicode-Block.

Mein WeeChat-Setup: Deklarativ mit Nix, eingeklinkt am Bouncer

Wie ich meinen IRC-Client WeeChat reproduzierbar über ein Nix-Home-Manager-Modul ausrolle und mich darüber in einem Rutsch über meinen Bouncer in alle IRC-Netze klinke

Mal etwas, das nichts mit dem Lab zu tun hat: mein IRC-Client. Ich nutze seit Jahren WeeChat , und wie bei fast allem auf meinen Maschinen gilt auch hier — nichts wird von Hand zusammengeklickt, alles ist reproduzierbar. WeeChat samt Konfiguration kommt deshalb aus einem Home-Manager -Modul und verbindet sich ausschließlich mit meinem Bouncer.

WeeChat als Nix-Modul

Der Client soll auf jeder meiner Maschinen identisch dastehen — gleiche Plugins, gleiche Skripte, gleiche Tastenbelegung. Genau dafür ist Nix gemacht. Mein Modul baut WeeChat über pkgs.weechat.override mit exakt den Bausteinen, die ich brauche, und nicht mehr:

1weechat = pkgs.weechat.override {
2  configure = { availablePlugins, ... }: {
3    plugins = [ (availablePlugins.python.withPackages (_ps: [ ])) ];
4    scripts = with pkgs.weechatScripts; [ autosort weechat-grep ];
5  };
6};

Das Python-Plugin und die beiden Skripte — autosort zum automatischen Einsortieren der Buffer und weechat-grep zum Durchsuchen der Logs — sind damit Teil des Build-Outputs, nicht etwas, das ich nach der Installation noch nachziehen müsste.