Springe zum Hauptinhalt

NoN: News, changes and release

Watch Knights of Ni grow up.

Versions'n'distros

Nikola v8

If you have not done yet you should read the upgrade guide to Nikola v8. NoN works with v7 and v8 nonetheless.

Runs on Archlinux and Ubuntu

I fiddled around until I got NoN working on a fresh Ubuntu 18.04 LTS installation. First install some dependencies:

$ sudo apt-get install gir1.2-webkit2-4.0 python3-pip

and then in lack of a package in the repositories install Nikola via pip:

$ pip3 install Nikola[extras]

If you are on (a) Archlinux (derivate) you can install Nikola from the repos:

$ sudo pacman -S nikola python-yaml

This is new since last release

Install/uninstall via setuptools

NoN is basically a Python script with a GtkBuilder GUI so in general you can get it running by executing non.py.

As an alternative you can now install or uninstall the application using setuptools which will also install a desktop entry so you can start the application from the menu:

# install for current user
python setup.py install --user
# install system-wide
sudo python setup.py install

Use the uninstall command to revert installation.

Config in YAML format

The configuration is stored in easy readable YAML format. As of now there are only bookmarks and the last working directory stored.

Editing or removing bookmarks can only be done here (GUI solution is on the roadmap).

Site data stored in JSON file

Application has been sped up by storing the sites (meta) data in a JSON formatted file. If a conf.py and the corresponding site is loaded into the application for the first time the data will be indexed. This initial task can take some time. On every next refresh/start this data will only be checked for changes and updated.

Optimized window space

I rearraged some elements to save some vertical space:

image1

is now

image2

Summary tab

The main window's notebook now has a new tab showing a HTML page with collected information about the current website:

  • disk usage

  • status (nikola status)

  • broken internal links (nikola check -l)

  • themes

  • plugins and

  • custom shortcodes

The CSS used is imitates GitHub style, credit goes to sindresorhus/github-markdown-css.

The summary is generated when initially indexing the site. Choose the menu item to generate a new report.

/images/non/non_summary.png

Summary tab

Localization support

There is now a translation template file (POT) waiting for translation. In case you have German localization, don't be irritated, there are only some strings translated yet.

Create posts/pages in Markdown

The default input format of Nikola is reStructuredText but it supports various other formats. You can now create new posts or pages in Markdown. This option is only available if "markdown" is set in the conf.py's COMPILERS variable.

You must also configure the POSTS and PAGES dictionaries, NoN does not check for this and will not throw an error message if not set.

/images/non/non_md.png

Markdown format checkbutton

Get help

The 'Help' button now contains a submenu with links to the Nikola handbook and to reStructuredText and Markdown syntax references so I...ehm you don't have to google them time and time again.

Thing left do do

Issues

  • icon not shown under Wayland

  • running application not marked at dock launcher (favorite), separate icon

Roadmap

  • preferences dialog/window

  • article templates (make use of nikola new_post --import...)

  • editor tab for quick editing

  • option to pull/push drafts from/to Git

Widget-Änderungen in GTK+ 2.20+

Auch wenn die Entwicklung von GTK+ 4 weit fortgeschritten ist, gibt es immer noch Änderungen in der 3er Version

Das GUI-Programm Glade wurde erst kürzlich modernisiert, in der Anwendung von Widgets sind mir einige Neuerungen aufgefallen. Dies fällt in der Regel durch entsprechende DeprecationWarnings in der Konsole auf, die Programme selbst funktionieren noch wie gewünscht.

Das heißt, die Artikel der Tutorial-Reihe bleiben vorerst unverändert (über eine gute Lösung muss ich noch nachdenken).

Es folgt eine nicht auf Vollständigkeit ausgelegte und bei Bedarf ergänzte Liste der Änderungen:

set_wm_class

Programmname in Panel und Dock anzeigen

Alt: Gtk.Window.set_wmclass(wmclass_name, wmclass_class)

Neu: GLib.set_prgname(wmclass_name) (in .desktop-Datei StartupWMClass=wmclass_name erforderlich)

widget.new_from_stock

Alt: Gtk.Button.new_from_stock(Gtk.STOCK_OK)

Neu: Gtk.Button.new_with_label("OK")

Labels bekommen nur noch eine Bezeichnung durch einen String.

Gilt auch für ToggleButton und Image (hier: image.new_from_icon_name() verwenden)

set_alignment

Alt: Gtk.Misc.set_alignment(x, y), z.B. bei Labels

Neu: Gtk.Widget-Alignment :halign und :valign verwenden

Vte-Terminal

Befehl übergeben

Alt: Vte.Terminal.feed_child(cmd, len(cmd)) (cmd ist das zu übergebene Kommando)

Neu: Vte.Terminal.feed_child(cmd.encode()) (seit v2.91)

Start

Alt: Vte.Terminal.spawn_sync(args)

Neu: GLib.spawn_async oder Vte.Pty.spawn_async (Details unbekannt)

FileChooserDialog

Alt:

dialog = Gtk.FileChooserDialog("Choose a folder",
                                app.obj("window"),
                                Gtk.FileChooserAction.SELECT_FOLDER,
                                (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                                Gtk.STOCK_APPLY, Gtk.ResponseType.OK))

'

Neu: Argumente werden namentlich übergeben, Buttons separat hinzugefügt:

dialog = Gtk.FileChooserDialog(title="Choose a folder",
                               parent=app.obj("window"),
                               action=Gtk.FileChooserAction.SELECT_FOLDER,
                               )
dialog.add_buttons("Cancel", Gtk.ResponseType.CANCEL,
                   "OK", Gtk.ResponseType.OK)

Mastodon-Tröts mit Nikola einbetten

Beim Lesen des Artikels Mastodon Embed Shortcode for hugo dachte ich neidisch 'Wir Nikola-Nutzer könnten sowas auch gebrauchen'. Im Nikola-Handbuch gibt man freimütig zu, dieses Feature sowieso von Hugo entlehnt zu haben, wie kompliziert kann es also sein?

Hier sind drei Arten, mit reStructuredText Tröts in eine Nikola-Seite einzubinden.

Die raw-Directive

Diese Directive ermöglicht es, Inhalt ohne Verarbeitung an die Ausgabe weiterzureichen, siehe auch reStructuredText Directives documentation.

raw.txt (Source)

.. raw:: html

    <iframe src="https://mastodon.social/@kevingimbel/100745593232538751/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="600" height="333"</iframe>

Der raw-Shortcode

Dieser Shortcode ist standardmäßig verfügbar. Er funktioniert genau wie die Directive, der Inhalt muss nur zwischen Shortcode-Tags platziert werden.

raw.txt (Source)

{{% raw %}}
<iframe src="https://mastodon.social/@kevingimbel/100745593232538751/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="600" height="333"</iframe>
{{% /raw %}}

Mach dir deinen eigenen Shortcode

Mittels vorlagenbasierten Shortcodes kann man einfach individuelle Shortcodes erstellen.

Dafür muss man eine Vorlage namens your_shortcode_name.tmpl erstellen und im shortcodes-Ordner der Nikola-Seite speichern. Wenn noch keine eigenen Shortcodes verwendet werden, muss der Ordner höchstwahrscheinlich noch angelegt werden.

Abhängig von der verwendeten Template-Engine, die das aktuell verwendete Theme nutzt, muss der Shortcode in Jinja2 oder Mako geschrieben werden:

Der Shortcode kann nun wie ursprünglich genutzt werden, es muss ein Link zum Status angegeben werden, optional noch Höhe und/oder Breite des Elements.

raw.txt (Source)

{{% mastodon status=https://mastodon.social/@kevingimbel/100745593232538751 %}}
{{% mastodon status=https://mastodon.social/@kevingimbel/100745593232538751 width=300 height=600 %}}

Diese Lösungen funktionieren für mich. Falls nicht, wird die Nutzung der Shortcode-Role empfohlen (siehe Handbuch):

raw.txt (Source)

:sc:`{{% mastodon status=https://mastodon.social/@kevingimbel/100745593232538751 %}}`

Man kann auch Pixelfed-Posts einbinden.

tfbrief - LaTeX-Briefvorlage

Manche raunen, Briefe mit LaTeX zu verfassen, wäre mit Kanonen auf Spatzen zu feuern. Die kennen die Dokumentenklasse tfbrief nicht.

tfbrief fiel mir einst vor Jahren zu und begeistert ob seiner Einfachheit nutzte ich es eifrig und verbreitete es fleißig unter Interessierten. Die Originalquelle ist inzwischen versiegt, doch ich konnte eine einsame Kopie auf GitHub ausfindig machen. Dabei stellte ich fest, dass die Dokumentenklasse quasi unverändert und weitgehend unter Ausschluss der Öffentlichkeit existierte.

Meine Änderungen:
  • obsoleten Code entfernen (fixltx2e package, tocityshort-Attribut)

  • die Option german lädt ngerman, wenn babel geladen wird

  • Typos (v.a. der Kommafehler in Abschlussformel (im Deutschen nicht vorhanden))

  • Betreffzeile serifenlos

  • eine weitere Beispieldatei

  • PDF-Outputs der Beispiele

  • ausführliche Dokumentation

Link zum Repository: GitHub: andre-lehnert/latex-letter

GTK+-Anwendung mit setuptools packen

Der einzige Zweck dieser Seite besteht darin, die Links in meiner setup.py zu entfernen.

Abhängigkeiten

from setuptools import setup

REQUIRED = ["PyGObject", ...]

setup(
    ...
    install_requires=REQUIRED,
    ...
    )

Angabe des PyPI-Paketnamens, bei GTK+-Pythonprogrammen also mindestens die entsprechenden Bindings, da sonst import gi scheitert.

Nicht Python-Paketdateien

from setuptools import setup

PACKAGES = ["my_package"]
PACKAGE_DIR = {"my_package": "my_package_dir"}
PACKAGE_DATA = {"my_package": ["ui/*", "logging.yaml"]}

setup(
    ...
    packages=PACKAGES,
    package_dir=PACKAGE_DIR,
    package_data=PACKAGE_DATA,
    ...
    )

Das Paket "my_package" wird aus dem Verzeichnis "my_package_dir" im Verzeichnis "my_package" gepackt.

Die Dateien, die keinen Python-Code enthalten, also etwa Glade-Dateien, werden als Liste in package_data übergeben. Im Beispiel werden alle Dateien im Unterverzeichnis "ui" sowie die Datei "logging.yaml" ins Paket integriert.

Desktop-Dateien

Der Speicherort von .desktop-Dateien und Icons richtet sich nach den Freedesktop-Spezifikationen. Desktop-Dateien befinden sich normalerweise in den Verzeichnissen

~/.local/share/applications
/usr/local/share/applications
/usr/share/applications

Während der Ausführung von install wird das Präfix ermittelt, es ist also nur die Angabe des relativen Pfads in der data_files-Option notwendig. Gleiches gilt für Icons.

from setuptools import setup

rel_app_path = "share/applications"
rel_icon_path = "share/icons/hicolor/scalable/apps"

DATAFILES = [
            (destination_dir, ["list", "of", "files"]),
            (rel_app_path, ["my_app.desktop"]),
            (rel_icon_path, ["my_appicon.svg"]),
            ]

setup(
    ...
    data_files=DATAFILES,
    ...
    )

Dieser Schritt kopiert nur die Dateien in die entsprechenden Zielverzeichnisse. Die korrekten Pfadangaben IN der .desktop-Datei werden durch eine eigene Funktion innerhalb des Install-Kommandos angepasst.

Bemerkung

Zur Formatierung von Desktop-Dateien gibt es einen separaten Artikel: Desktop-Dateien

Bestehendes Kommando anpassen

Die .desktop-Datei enthält Pfadangaben zur auszuführenden Datei sowie zum dazugehörigen Icon. Da das Zielverzeichnis der Installation nicht vorhersehbar ist, müssen diese Pfade während der Installation an die Gegebenheiten angepasst werden.

Um eigene Funktionen in bestehende Kommandos auszuführen, muss man eine eigene Instanz der entsprechenden Klasse (install, build, bdist etc.) generieren und die "run"-Funktion anpassen.

Setuptools wird dann mit der Option cmd_class auf diese eigene Klasse übergeben.

from setuptools import setup
from setuptools.command.install import install

class CustomInstall(install):

    def run(self):
        self.my_function(args, go, here)
        install.run(self)

    def my_function(self, *args):
        try:
            do_some_shit()
        except:
            pass

setup(
    ...
    cmdclass={"install": CustomInstall}
    ...
    )

Eine Liste mit verfügbaren Kommandos erhält man durch

$ python setup.py --help-commands

Neues Kommando erstellen

Es ist einfach möglich, eigene Kommandos mit setuptools zu erzeugen. Möchte man beispielsweise die zuvor installierten Dateien, also das Python-Paket und die Desktop-Dateien, loswerden, muss dies manuell erfolgen. Dafür bietet es sich an, ein Uninstall-Kommando zu erstellen.

from setuptools import setup, Command

class UnInstall(Command):

    description = "description shown by setup.py --help-commands"
    user_options = [("myoption",
                     "m",
                     "myoption description shown by setup.py cmd --help")]

    def initialize_options(self):
        # method must exist
        # define all options with default value
        self.myoption = None

    def finalize_options(self):
        # method must exist
        pass

    def run(self):
        # method must exist
        # code to be executed goes here
        print("This is a custom command.")

setup(
    ...
    cmdclass={"uninstall": UnInstall}
    ...
    )

NoN: jetzt noch toller

Knights of Ni - sag niemals nie

Nach den kürzlichen Änderungen an der Oberfläche gibt es nun erfreuliche Fortschritte darunter zu vermelden.

Neuigkeiten

  1. Man kann NoN jetzt richtig (mit Hilfe von setuptools) installieren und deinstallieren.

  2. Vom Programm generierte Dateien werden nun wie üblich im eigenen Verzeichnis im Homeverzeichnis gespeichert.

  3. Der Programmablauf wurde beschleunigt und die Dateizugriffe massiv reduziert, indem die Posts-/Pages-Informationen für den wiederholten Abruf geparst und in einer JSON-Datei abgelegt werden.

Installation via setuptools

Bei der Installation via setuptools werden sowohl das Programm inklusive der UI als auch ein Desktopeintrag installiert. Nach der Installation lässt sich das Programm in GNOME also bequem über [super] + [n] (... [o] ... [n]) + [enter] starten.

Um dies alles auch wieder loszuwerden, gibt es ein zusätzliches uninstall-Kommando. Beide Kommandos sind mit der Option --user möglich:

# (De-/)Installation im lokalen Nutzerverzeichnis
$ python setup.py install --user
$ python setup.py uninstall --user

# systemweite (De-/)Installation
$ sudo python setup.py install
$ sudo python setup.py uninstall

Dateistruktur

Die Nutzerdaten liegen jetzt in ~/.non. Dort befinden sich

  1. die Konfigurationsdatei config.yaml, in der der Pfad zur aktuellen/letzten Nikola-Seite und die Bookmarks gespeichert sind,

  2. die Logdatei non.log sowie

  3. die geparsten Daten der aufgerufenen Nikola-Seiten jeweils als JSON-Datei.

Speicherung von (Meta-)Daten

Für die Anzeige im TreeStore wurden die Daten bisher sowieso intern als Dictionary gespeichert. Das Ineffiziente daran war allerdings, dass die Daten bei jedem Refresh immer neu abgerufen wurden. Dies ist nicht notwendig und mit zunehmender Größe der Seite auch sehr zäh.

Die Lösung bestand also darin, die Daten des Dictionary zum einen für den späteren Gebrauch in einer Datei zu speichern und zum anderen es nur durch eine Update-Funktion auf aktualisierte Inhalte zu überprüfen.

Auf diese Weise werden beim ersten Aufruf einer Nikola-Konfiguration alle Posts/Pages, Tags und Kategorien oder bei erneutem Aufruf die Daten aus der entsprechenden JSON-Datei eingelesen. Die Aktualisierung erfolgt über den Abgleich der letzten Dateimodifikation. Die JSON-Datei wird beim Wechsel in eine andere Nikola-Seite (z.B. über ein Bookmark) oder bei Programmende gespeichert.

Verloren im Kaninchenbau von Google Takeout

Mach Backups deiner Daten. Habensegesagt. Aller Daten. Habensegesagt. Und dann kam Google Takeout

/images/import_gplus_post.png

G+-Post-Ansicht von Takeout

Die 4, die 20 und Google+, alles zum Mitnehmen

Takeout nennt sich Googles Archivsystem für allerlei Produkte aus dem Hause Alpha. Das Primärziel bestand darin, ein Archiv meiner Google+-Aktivitäten herunterzuladen.

Dies gestaltete sich zunächst recht einfach: das Archiv (bzw. (je nach Größe) die Archive) wird erstellt. Bei Fertigstellung erhält man eine Nachricht mit Downloadlink. Das Archiv verfällt nach einer Woche, aber man kann jederzeit neue erstellen.

Lektion 1

Wähle als Dateiformat zip, tgz könnte Encoding-Probleme mit Umlauten haben (Dies ist keine Übung!).

Ich erinnerte mich dunkel daran, dass ein Import-Plugin für Nikola existierte und malte mir aus, das Archiv einfach dort abzuwerfen und eine halbwegs nutzbare lokale Seite gebaut zu bekommen. Der geneigte Leser wird bereits an dieser Stelle mutmaßen, dass dieser Ansatz nicht funktionierte.

Geschenke auspacken

Nach ersten Untersuchungen zeigen sich folgende Fakten:

  1. Alle G+-Beiträge befinden sich in Stream in Google+/Beiträge als HTML-Dateien. Diese sehen zunächst brauchbar aus.

  2. Enthaltene Bildverweise geben nur den Dateinamen an, der fehlende Dateipfad lädt demzufolgge nur Bilder im selben Verzeichnis, aber

  3. Bilder befinden sich in diversen Unterverzeichnissen, sowohl in Beiträge als auch in Fotos und deren Unterverzeichnissen. Die Mehrheit befindet sich in Fotos von Beiträgen, dort jeweils in Datumsunterverzeichnisse einsortiert.

  4. Ein Datumsformat ist so gut wie jedes andere und so findet man dort in friedlicher Koexistenz Dinge wie:

Fotos von Beiträgen/
 ├── 02.06.14
 ├── 02.06.16
 ├── 22. Juli 2013
 ├── 23.01.17
 ├── 2011-08-14
 └── 2012-03-13
  1. Fotos haben eine dazugehörige JSON-Datei, HTML-Dateien nicht.

  2. Die Inspektion der HTML-Dateien ergibt eine übersichtliche Struktur mit Klassenangabe.

/images/import_gplus_inspector.thumbnail.png

Dumdidumdumdum...Inspektor Gadget

Lektion 2

Beiträge lassen sich nur einzeln aufrufen, es gibt jede Menge Deadlinks bei Bilderposts, aber immerhin sieht man den Verteilungstatus (öffentlich, Sammlung, Community), +1, Reshares und Kommentare.

Auftritt: Nikola

Mit leicht getrübten Erwartungen installiere ich das Import-Plugin für Nikola und lege los. Es passt gar nichts. Angeblich stehen die Beiträge auch als JSON zur Verfügung. Das war bestimmt auch einst so, jetzt nicht mehr.

Ich hangele mich an den Dateien entlang, importiere zunächst die HTML-Dateien. Das Import-Plugin erstellt grundsätzlich eine neue Nikola-Seite, so dass man hier nach Gusto wüten kann. Dann kümmere ich mich um die Deadlinks. Dann die Titel - ich bin wie im Rausch: mit jedem Build wird es besser.

Das Ergebnis ist eine statische Webseite meines Google+-Streams inklusive Plussen und Kommentaren. Man kommt von den Beiträgen immer zum Originalbeitrag.

Eyecandy

Grundsätzlich funktioniert der Import themenunabhängig. hyde liefert ein schönes Ergebnis, etwas nachgeholfen wird mit der custom.css.

Wünsch dir was

  • eine lokale Suchfunktion wäre schön

  • gefilterte Anzeige je nach Verteilungsstatus

Achtung!

Plant man ein öffentlich einsehbares Backup des Streams, ist zu beachten, dass der Import auch private Beiträge enthält.

Fazit

Als langjähriger Google+-Nutzer ist man auf Inkonsistenzen und Verschlimmbesserungen konditioniert, da kommt Takeout als Sparringspartner nur gelegen. Es ist nur eine Frage der Zeit, bis auch diese Plugin-Version den Weg jedes Google-Messengers gehen wird.

/images/takeout_gplus_slow.gif

Resultat der Nikola-generierten Seite mit hyde-Thema

Update

Inzwischen wurde die Einstellung von Google+ angekündigt und die Frage nach Backups und Aufbereitung der Daten relevant.

Das Plugin kann man nun bei GitHub herunterladen: encarsia/gplus_nikola_import.

Den dazugehörigen Artikel gibt es hier: Nikola-Import-Plugin für Google+.


Kommentieren auf

NoN: Fortschritte und Release

Knights of Ni - little release on the prairie

Der GTK+-Desktop-Client für den statischen Webseitengenerators Nikola hat seit der letzten Erwähnung hier weitere Fortschritte machen können.

Da Nikola v8 im Juni zu erwarten ist und ich noch nicht weiß, was an Nacharbeiten auf mich zukommt, habe ich den aktuellen Status als Release gespeichert.

Neuigkeiten

Headerbar

Das Untermenü ist auf die rechte Seite gewandert, links befindet sich der GUI-/Terminal-StackSwitcher, neu ist der Button zum Öffnen des Nikola-Handbuchs.

Erweiterte Deployment-Optionen
  • GitLab: "Deploy to GitHub"-Button nutzen, Hilfe zur Konfiguration gibt es hier

  • Andere: existiert in der conf.py die Variable. DEPLOY_COMMANDS, wird mit dem "Deploy"-Button das 'default'-Preset ausgeführt.

GtkApplication

NoN läuft nun als echte GtkApplication.

Desktop-Eintrag

Enteenteenteente...

Post/Page im Browser öffnen

Per Rechtsklick lässt sich aus der Übersicht der Beitrag im Browser öffnen.

Diverser Kleinkram

Bugfixes, verbessertes Logging, Python-Code ist nun PEP8-konform (sagt pycodestyle).

/images/non/non3.thumbnail.png

Überarbeitete Oberfläche in Glade 3.22

Im Zuge der Veröffentlichung von GNOME 3.28 wurde auch Glade eine ordentliche Portion Zuwendung zuteil.

Headerbar

Das in GNOME 3.10 (Veröffentlichung 2013) eingeführte Headerbar-Widget ließ sich selbst bereits in Glade verwenden, die Anwendung selbst nutzte sie bisher nicht. Sie vereint Titelleiste, Menü, Toolbar und die Projekt-Tableiste. Durch diese Komprimierung wird viel leerer Raum eingespart (siehe Screenshots).

Arbeitsfläche

Die Dreiteilung der Oberfläche ist erhalten geblieben, es gibt aber zwei wesentliche Änderungen:

  1. Die Widgetauswahl erfolgt nicht mehr aus der linken Spalte, sondern sie ist oben auf der mittleren Arbeitsfläche als Buttonleiste mit Dropdown-Menü erreichbar.

  2. In der nun freien Spalte werden die Widgetstruktur des aktuellen Projekts angezeigt. Diese war zuvor in der oberen Hälfte der rechten Spalte zu finden.

Die Verlagerung der Widgetauswahl ermöglicht eine komplette Nutzung des vertikalen Platzes für die Anzeige der Struktur auf der linken sowie deren Eigenschaften auf der rechten Seite.

Tour

Beim ersten Aufruf der neuen Version startet ein Assistent, der etwas aufdringlich die Neuerungen anpreist. Dieser kann jederzeit über die Einstellungen in der Headerbar unter "Einführung in interaktive Benutzeroberflächen" erneut aufgerufen werden.

/images/glade322_tour.png

Tour-Wizard

Screenshots

/images/glade322.thumbnail.png

Glade 3.22

/images/01_glade.thumbnail.png

Glade 3.20

Nikola: everything zen

[UPDATE] Artikel wurde aktualisiert, keine manuelle Installation mehr notwendig

Aktualisiertes zen-Thema für Nikola

Ein Nachteil von Nikola ist meiner Meinung nach die stiefmütterliche Behandlung der Themes. Das von mir genutzte zen-Thema hatte ich bereits vor einiger Zeit auf Font Awesome 4-Icons geupdated und hier als Archiv zum Download bereitgestellt.

Inzwischen gibt es nicht nur Version 5 von Font Awesome, sondern auch einen Fork des Projektes namens Fork Awesome mit ein paar neuen Icons.

Dank eines Kommentars einer der Nikola-Devs (thx Roberto) hier habe ich mich nun durchgerungen, meine Änderungen offiziell per Pull Request einzureichen. Die zen-Familie ist nun auch im offiziellen Repository auf Font Awesome v4.7.0 geupdatet. Außerdem gibt es eine neue Variante, die die Fork Awesome-Icons nutzt. Eine manuelle Installation erübrigt sich also, sie kann direkt im Nikola-Projektordner erfolgen:

$ nikola theme -i zen-forkawesome

Anschließend muss das Thema nur noch in der conf.py aktiviert werden:

THEME = "zen-forkawesome"

Desweiteren werden die Icons nun mit "fa fa-iconname" angesprochen statt zuvor mit "icon-iconname". Dies ist auch in conf.py.sample vermerkt und wird bei der Installation des Themas angezeigt.

Die Änderungen werden natürlich erst nach dem nächsten nikola build wirksam. Da zen-forkawesome auf zen basiert, wird dieses Thema automatisch mit installiert.