Astuces et paramètrages de Nikola
(modifié: ) | Source
Dans cet article, vous trouverez un peu d'aide et quelques astuces pour paramétrer le générateur de blog Nikola. Comment modifier un thème, comment personnaliser son blog.. Je vous propose également un script personnel qui pourrait vous être utile.
Configuration de son blog Nikola
Nikola se configure dans un seul fichier : conf.py à la racine de son blog. Voici quelques astuces commentées afin de bien démarrer. Cherchez dedans les valeurs et définissez selon vos besoins.
nikola-astuces-conf.py (Source)
# Définissez votre licence (Creative Commons : ex CC-BY-SA) LICENSE = """ <a rel="License" href="https://creativecommons.org/licenses/by-sa/4.0/" title="Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)" target="_blank"> CC-BY-SA </a>""" # Pied de Page ; exemple : CONTENT_FOOTER = """ Licence {license} {date} <a href="mailto:{email}">{author}</a> - Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>' """ # À la fin de votre "teaser", # faites un retour à la ligne vide # et placez cette balise reST # # .. END_TEASER # Changer le format de la date affichée DATE_FORMAT = 'yyyy-MM-dd' # N'afficher que le début de l'article dans la page d'index INDEX_TEASER = True # Afficher l'artcile complet dans le flux RSS FEED_TEASER = False # Afficher le lien et la source de l'article. Décommenter SHOW_SOURCELINK = True COPY_SOURCES = True # Changer le thème de l'affichage des codes # https://help.farbox.com/pygments.html CODE_COLOR_SCHEME = 'vim' # favicon : créez différents formats/tailles. # Copiez les dans le dossier files # "nom", "uri", "taille" FAVICONS = ( ("icon", "/icon.ico", "16x16"), ("icon", "/icon_128x128.png", "128x128"), ) # Dire au générateur de copier tous les fichiers dans "files" dans ouput/ FILES_FOLDERS = {'files': ''}
Création d'un thème
Il existe différents Thèmes pour Nikola avec plusieurs styles de formatage de code, comme jinja (sa documentation) ou mako. Pour ne pas partir de zéro, vous pouvez copier et renommer un thème déjà installé. Dans votre fichier conf.py, renseignez le nouveau nom du dosier. Toutefois, cette méthode est plus propre. Sinon, le référenciel pour créer la structure est ici.
Voici quelques exemples de personnalisation dans le format jinja.
Afficher la source de l'article dans son thème
{% if show_sourcelink %} | <span class="sourceline"> <a class="article__meta__link hover:article__meta__link" href="{{ post.source_link() }}" class="sourcelink"> {{ messages("Source") }} </a> </span> {% endif %}
Afficher la date de modification de l'article
(modifié: <time class="modified dt-published" datetime="{{ post.formatted_updated('webiso') }}" title="{{ post.formatted_updated(date_format)|e }}"> {{ post.formatted_updated(date_format)|e }
Script personnel
Je vous propose mon script nikoblog_script écrit en bash qui pourra peut-être vous être utile. Il permet de vérifier que tous vos articles (dans le dossier posts) disposent de la directive ".. updated:".
En effet, cette directive n'est pas toujours inscrite par l'auteur, et si ce dernier modifie régulièrement ses articles, il faudrait également qu'il pense à la remplir avec la nouvelle date.
Ce script - nikoblog_script - sous licence libre GPLv3 - va récupérer la date de chaque ficher depuis la commande "ls" et mettre à jour leur directive. Si, elle n'a jamais été inscrite, nikoblog_script se chargera de la rajouter avec les bonnes valeurs. Il abandonnera si la directive ".. date:" n'est pas renseignée.
Installation de nikoblog_script
Téléchargez-le
Définissez les répertoires des variables:
niko_dir_blog=""
niko_dir_posts=""
Sourcez le script dans votre .bashrc
Ouvrez un nouveau terminal
Lancez la commande niko (affiche les options uniquement)
# Sourcez le script # Ajoutez et adaptez le lien du fichier dans .bashrc [[ -f ~/nikoblog_script ]] && . ~/nikoblog_script
Code de nikoblog_script
#!/bin/bash # Version 0.1 # Author: echolib {xmpp:echolib@a-lec.org} # file: nikoblog_script # Description: # Script for Nikola's blogs. # Checking directive '.. updated' and update/add in all posts from ls time-style # License: # GPLv3 > https://codeberg.org/echolib/bash-tools/src/branch/main/LICENSE niko() { unset ${!niko_@} # Set your posts directory niko_dir_blog="$HOME/my-nikola-blog/" niko_dir_posts="$HOME/my-nikola-blog/posts/" ! [[ -d $niko_dir_blog ]] \ && echo "! Error directory: Missing $niko_dir_blog" \ && return ! [[ -d $niko_dir_posts ]] \ && echo "! Error directory: Missing $niko_dir_posts" \ && return niko_current_dir=${PWD} case "$1" in -d|date) niko__newdate ;; -s|start-server) niko__start_server ;; -h|help|*) niko__help ;; esac cd "$niko_current_dir" unset ${!niko_@} } niko__newdate() { niko_term_upd=".. updated:" cd "$niko_dir_posts" ! (( `ls | wc -l` > 0 )) \ && echo "! Nohting here: skipping" \ && return echo "# Sending new update time to post:" while read -r "niko_post" do # Getting new date fom ls command niko_new_date=`echo "$niko_post" | awk '{print $6}'` niko_directive_new_date="$niko_term_upd $niko_new_date" niko_filename=`echo "$niko_post" | awk '{print $8}'` # Checking if basic ".. date:" directive, else skipping file niko_cat_date=` cat -n "$niko_dir_posts$niko_filename" 2>/dev/null \ | grep ".. date:"` if [[ $niko_cat_date ]];then niko_cat_date_line_nbr=`echo $niko_cat_date | awk '{print $1}'` niko_cat_updated_line_nbr=$(( niko_cat_date_line_nbr + 1 )) else echo "! Error date: $niko_filename | Skipping..." continue fi # Getting line ".. updated:" from filename niko_cat_updated=` cat -n "$niko_dir_posts$niko_filename" 2>/dev/null \ | grep "$niko_term_upd" ` # No directive ".. updated:" if ! [[ $niko_cat_updated ]];then printf '%s%s\n' \ "+ Add update: $niko_filename | " \ "Line $niko_cat_updated_line_nbr = .. updated: $niko_new_date" sed -i "${niko_cat_updated_line_nbr}i.. updated: $niko_new_date" \ "$niko_filename" continue fi # Getting line and old time from filename niko_cat_updated_line_nbr=`echo $niko_cat_updated | awk '{print $1}'` niko_old_date=`echo $niko_cat_updated | awk '{print $4}'` # Compare if new date [[ $niko_old_date == $niko_new_date ]] \ && echo "= No changes: $niko_filename" \ && continue # Printing new updated line printf '%s%s\n' \ "+ New update: $niko_filename | Line $niko_cat_updated_line_nbr : " \ "$niko_old_date > $niko_new_date" niko_directive_old_date="$niko_term_upd $niko_old_date" sed -i "${niko_cat_updated_line_nbr}s|$niko_directive_old_date|$niko_directive_new_date|" \ "$niko_filename" done < <(ls -l --time-style=long-iso | tail -n +2) } niko__start_server() { cd "$niko_dir_blog" nikola build && nikola serve } niko__help() { cat << EOH # niko [OPTION] -d | date : Add/Change posts updated date -s | start-server : Short for local build && serve; whereever you are EOH }
Documentations et ressources
Pythonic Finance: Creating a Nikola coding blog
Exemples de thèmes Pygments pour les codes (Démo)