russell.ballestrini.net/pelicanconf.py
Russell Ballestrini b5232587c2 Add JSONResume theme targets & OG/Twitter meta tag support
- Makefile: Add jsonresume-all-html target to export resume in 30 themes
- Makefile: Curate list of 30 tested working JSONResume themes
- pelicanconf.py: Add extract_first_image filter for social media unfurling
- Resume: Add Queues skill category (SQS, RabbitMQ, ZMQ)
2025-12-15 08:19:25 -05:00

130 lines
3.3 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
from os import environ
DEFAULTS = {
"AUTHOR": "Russell Ballestrini",
"SITENAME": "Russell Ballestrini",
"SITEURL": "http://127.0.0.1:8000",
#'THEME' : 'pelican-themes/svbhack',
"THEME": "pelican-themes/pelican-svbhack",
"GOOGLE_ANALYTICS": "",
"PLAUSIBLE_ANALYTICS": "",
"REMARKBOX": None,
"LINKPEEK_APIKEY": None,
"LINKPEEK_SECRET": None,
}
def get_environ_or_default(key):
return environ.get(key, DEFAULTS[key])
AUTHOR = get_environ_or_default("AUTHOR")
SITENAME = get_environ_or_default("SITENAME")
SITEURL = get_environ_or_default("SITEURL")
THEME = get_environ_or_default("THEME")
GOOGLE_ANALYTICS = get_environ_or_default("GOOGLE_ANALYTICS")
PLAUSIBLE_ANALYTICS = get_environ_or_default("PLAUSIBLE_ANALYTICS")
REMARKBOX = get_environ_or_default("REMARKBOX")
LINKPEEK_APIKEY = get_environ_or_default("LINKPEEK_APIKEY")
LINKPEEK_SECRET = get_environ_or_default("LINKPEEK_SECRET")
# Theme specific
USER_LOGO_URL = (
"https://russell.ballestrini.net/uploads/sly-red-fox.jpg"
)
# USER_LOGO_URL = (
# "https://russell.ballestrini.net/uploads/profile/russell-ballestrini-2020.jpg"
# )
TAGLINE = '<a href="/about" class="tagline">Grows Products & Services</a>'
PATH = "content"
STATIC_PATHS = ["uploads"]
TIMEZONE = "America/New_York"
DEFAULT_LANG = "en"
# Atom all feed.
FEED_ALL_ATOM = "feeds/all.atom.xml"
# Feed generation is usually not desired when developing
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
# Blogroll
LINKS = (
# ('Remarkbox', 'http://remarkbox.com/'),
# ('LinkPeek', 'https://linkpeek.com/'),
)
# Social widget
SOCIAL = (
("@russellbal", "https://twitter.com/russellbal"),
("github", "https://github.com/russellballestrini"),
("bitbucket", "https://bitbucket.org/russellballestrini"),
)
DEFAULT_PAGINATION = False
# Uncomment following line if you want document-relative URLs when developing
# RELATIVE_URLS = True
DISPLAY_PAGES_ON_MENU = False
# teach pelican to use directory/index.html files
ARTICLE_URL = "{slug}/"
PAGE_URL = "{slug}/"
CATEGORY_URL = "category/{slug}/"
TAG_URL = "tags/{slug}/"
AUTHOR_URL = "author/{slug}/"
RANDOM = "random.html"
# Adjust save location.
ARTICLE_SAVE_AS = "{slug}/index.html"
PAGE_SAVE_AS = "{slug}/index.html"
CATEGORY_SAVE_AS = "category/{slug}/index.html"
TAG_SAVE_AS = "tags/{slug}/index.html"
AUTHOR_SAVE_AS = "author/{slug}/index.html"
# Enable raw source files in output directory alongside index.html
# This copies the raw .rst files to the output
OUTPUT_SOURCES = True
OUTPUT_SOURCES_EXTENSION = '.rst'
# Setup filters and plugins.
PLUGIN_PATHS = ["pelican-plugins", "lib"]
PLUGINS = ["random_article", "strip_toc_summary"]
# register filters.
import re
def extract_first_image(content):
"""Extract first image URL from HTML content."""
match = re.search(r'(?:src|href)=["\']([^"\']+\.(?:jpg|jpeg|png|gif|webp))["\']', content, re.IGNORECASE)
return match.group(1) if match else None
JINJA_FILTERS = {'extract_first_image': extract_first_image}
# register linkpeek docutils directive.
import sys
sys.path.append("lib")
import rst_linkpeek
linkpeek = rst_linkpeek.LinkPeek
linkpeek.apikey = LINKPEEK_APIKEY
linkpeek.secret = LINKPEEK_SECRET
linkpeek.register()