diff --git a/pelicanconf.py b/pelicanconf.py
index 7ceb49560c2ec8d325fff47b0d68eadcb5c0d9c7..688ad60c6b141217378f978c47505c3c2b76fd29 100644
--- a/pelicanconf.py
+++ b/pelicanconf.py
@@ -1,19 +1,19 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*- #
 
-AUTHOR = 'Funkwhale Collective'
-SITENAME = 'Funkwhale Blog'
-SITEURL = '.'
+AUTHOR = "Funkwhale Collective"
+SITENAME = "Funkwhale Blog"
+SITEURL = "."
 
-THEME = 'theme/funkwhale'
+THEME = "theme/funkwhale"
 DISPLAY_SUMMARY = True
-AVATAR = '/theme/images/logo-monochrome.svg'
+AVATAR = "/theme/images/logo-monochrome.svg"
 
-PATH = 'content'
+PATH = "content"
 
-TIMEZONE = 'Europe/Paris'
+TIMEZONE = "Europe/Paris"
 
-DEFAULT_LANG = 'en'
+DEFAULT_LANG = "en"
 
 # Feed generation is usually not desired when developing
 FEED_ALL_ATOM = None
@@ -23,13 +23,12 @@ AUTHOR_FEED_ATOM = None
 AUTHOR_FEED_RSS = None
 
 # Blogroll
-LINKS = (('Website', 'https://funkwhale.audio/'),
-        )
+LINKS = (("Website", "https://funkwhale.audio/"),)
 
 # Social widget
-SOCIAL = (('mastodon', 'https://mastodon.eliotberriot.com/@funkwhale'),)
+SOCIAL = (("mastodon", "https://mastodon.eliotberriot.com/@funkwhale"),)
 
 DEFAULT_PAGINATION = 10
 
 # Uncomment following line if you want document-relative URLs when developing
-#RELATIVE_URLS = True
+# RELATIVE_URLS = True
diff --git a/publishconf.py b/publishconf.py
index 2a6bb9771221b46082e6de33e44618806e4f9adb..fc78b80a4cb316fe4e820ce4e16e476e464e46d1 100644
--- a/publishconf.py
+++ b/publishconf.py
@@ -6,19 +6,20 @@
 
 import os
 import sys
+
 sys.path.append(os.curdir)
 from pelicanconf import *
 
 # If your site is available via HTTPS, make sure SITEURL begins with https://
-SITEURL = 'https://blog.funkwhale.audio'
+SITEURL = "https://blog.funkwhale.audio"
 RELATIVE_URLS = False
 
-FEED_ALL_ATOM = 'feeds/all.atom.xml'
-CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml'
+FEED_ALL_ATOM = "feeds/all.atom.xml"
+CATEGORY_FEED_ATOM = "feeds/{slug}.atom.xml"
 
 DELETE_OUTPUT_DIRECTORY = True
 
 # Following items are often useful when publishing
 
-#DISQUS_SITENAME = ""
-#GOOGLE_ANALYTICS = ""
+# DISQUS_SITENAME = ""
+# GOOGLE_ANALYTICS = ""
diff --git a/tasks.py b/tasks.py
index 5f7dc5942b534ca51b02562b495d65b95818fd4f..905aa2d32ce3885656bec4aec8c20e4f69f0f2e4 100644
--- a/tasks.py
+++ b/tasks.py
@@ -13,48 +13,53 @@ from pelican import main as pelican_main
 from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer
 from pelican.settings import DEFAULT_CONFIG, get_settings_from_file
 
-SETTINGS_FILE_BASE = 'pelicanconf.py'
+SETTINGS_FILE_BASE = "pelicanconf.py"
 SETTINGS = {}
 SETTINGS.update(DEFAULT_CONFIG)
 LOCAL_SETTINGS = get_settings_from_file(SETTINGS_FILE_BASE)
 SETTINGS.update(LOCAL_SETTINGS)
 
 CONFIG = {
-    'settings_base': SETTINGS_FILE_BASE,
-    'settings_publish': 'publishconf.py',
+    "settings_base": SETTINGS_FILE_BASE,
+    "settings_publish": "publishconf.py",
     # Output path. Can be absolute or relative to tasks.py. Default: 'output'
-    'deploy_path': SETTINGS['OUTPUT_PATH'],
+    "deploy_path": SETTINGS["OUTPUT_PATH"],
     # Remote server configuration
-    'ssh_user': 'root',
-    'ssh_host': 'localhost',
-    'ssh_port': '22',
-    'ssh_path': '/var/www',
+    "ssh_user": "root",
+    "ssh_host": "localhost",
+    "ssh_port": "22",
+    "ssh_path": "/var/www",
     # Host and port for `serve`
-    'host': 'localhost',
-    'port': 8000,
+    "host": "localhost",
+    "port": 8000,
 }
 
+
 @task
 def clean(c):
     """Remove generated files"""
-    if os.path.isdir(CONFIG['deploy_path']):
-        shutil.rmtree(CONFIG['deploy_path'])
-        os.makedirs(CONFIG['deploy_path'])
+    if os.path.isdir(CONFIG["deploy_path"]):
+        shutil.rmtree(CONFIG["deploy_path"])
+        os.makedirs(CONFIG["deploy_path"])
+
 
 @task
 def build(c):
     """Build local version of site"""
-    pelican_run('-s {settings_base}'.format(**CONFIG))
+    pelican_run("-s {settings_base}".format(**CONFIG))
+
 
 @task
 def rebuild(c):
     """`build` with the delete switch"""
-    pelican_run('-d -s {settings_base}'.format(**CONFIG))
+    pelican_run("-d -s {settings_base}".format(**CONFIG))
+
 
 @task
 def regenerate(c):
     """Automatically regenerate site upon file modification"""
-    pelican_run('-r -s {settings_base}'.format(**CONFIG))
+    pelican_run("-r -s {settings_base}".format(**CONFIG))
+
 
 @task
 def serve(c):
@@ -64,23 +69,27 @@ def serve(c):
         allow_reuse_address = True
 
     server = AddressReuseTCPServer(
-        CONFIG['deploy_path'],
-        (CONFIG['host'], CONFIG['port']),
-        ComplexHTTPRequestHandler)
+        CONFIG["deploy_path"],
+        (CONFIG["host"], CONFIG["port"]),
+        ComplexHTTPRequestHandler,
+    )
 
-    sys.stderr.write('Serving at {host}:{port} ...\n'.format(**CONFIG))
+    sys.stderr.write("Serving at {host}:{port} ...\n".format(**CONFIG))
     server.serve_forever()
 
+
 @task
 def reserve(c):
     """`build`, then `serve`"""
     build(c)
     serve(c)
 
+
 @task
 def preview(c):
     """Build production version of site"""
-    pelican_run('-s {settings_publish}'.format(**CONFIG))
+    pelican_run("-s {settings_publish}".format(**CONFIG))
+
 
 @task
 def livereload(c):
@@ -88,44 +97,45 @@ def livereload(c):
     from livereload import Server
 
     def cached_build():
-        cmd = '-s {settings_base} -e CACHE_CONTENT=True LOAD_CONTENT_CACHE=True'
+        cmd = "-s {settings_base} -e CACHE_CONTENT=True LOAD_CONTENT_CACHE=True"
         pelican_run(cmd.format(**CONFIG))
 
     cached_build()
     server = Server()
-    theme_path = SETTINGS['THEME']
+    theme_path = SETTINGS["THEME"]
     watched_globs = [
-        CONFIG['settings_base'],
-        '{}/templates/**/*.html'.format(theme_path),
+        CONFIG["settings_base"],
+        "{}/templates/**/*.html".format(theme_path),
     ]
 
-    content_file_extensions = ['.md', '.rst']
+    content_file_extensions = [".md", ".rst"]
     for extension in content_file_extensions:
-        content_glob = '{0}/**/*{1}'.format(SETTINGS['PATH'], extension)
+        content_glob = "{0}/**/*{1}".format(SETTINGS["PATH"], extension)
         watched_globs.append(content_glob)
 
-    static_file_extensions = ['.css', '.js']
+    static_file_extensions = [".css", ".js"]
     for extension in static_file_extensions:
-        static_file_glob = '{0}/static/**/*{1}'.format(theme_path, extension)
+        static_file_glob = "{0}/static/**/*{1}".format(theme_path, extension)
         watched_globs.append(static_file_glob)
 
     for glob in watched_globs:
         server.watch(glob, cached_build)
-    server.serve(host=CONFIG['host'], port=CONFIG['port'], root=CONFIG['deploy_path'])
+    server.serve(host=CONFIG["host"], port=CONFIG["port"], root=CONFIG["deploy_path"])
 
 
 @task
 def publish(c):
     """Publish to production via rsync"""
-    pelican_run('-s {settings_publish}'.format(**CONFIG))
+    pelican_run("-s {settings_publish}".format(**CONFIG))
     c.run(
         'rsync --delete --exclude ".DS_Store" -pthrvz -c '
         '-e "ssh -p {ssh_port}" '
-        '{} {ssh_user}@{ssh_host}:{ssh_path}'.format(
-            CONFIG['deploy_path'].rstrip('/') + '/',
-            **CONFIG))
+        "{} {ssh_user}@{ssh_host}:{ssh_path}".format(
+            CONFIG["deploy_path"].rstrip("/") + "/", **CONFIG
+        )
+    )
 
 
 def pelican_run(cmd):
-    cmd += ' ' + program.core.remainder  # allows to pass-through args to pelican
-    pelican_main(shlex.split(cmd))
\ No newline at end of file
+    cmd += " " + program.core.remainder  # allows to pass-through args to pelican
+    pelican_main(shlex.split(cmd))