{"id":13507030,"url":"https://github.com/kdeldycke/plumage","last_synced_at":"2025-07-13T08:39:07.159Z","repository":{"id":3705577,"uuid":"11233416","full_name":"kdeldycke/plumage","owner":"kdeldycke","description":":art: Theme for Pelican, the static site generator.","archived":false,"fork":false,"pushed_at":"2024-04-29T02:10:34.000Z","size":17474,"stargazers_count":54,"open_issues_count":19,"forks_count":30,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-05-02T01:08:51.530Z","etag":null,"topics":["bootstrap","font-awesome","jquery","masonry","pelican","pelican-theme","theme","tipue-search"],"latest_commit_sha":null,"homepage":"https://kevin.deldycke.com/tag/plumage/","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kdeldycke.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":null,"funding":".github/funding.yml","license":"license","code_of_conduct":".github/code-of-conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"kdeldycke"}},"created_at":"2013-07-07T12:57:14.000Z","updated_at":"2024-05-03T23:27:20.730Z","dependencies_parsed_at":"2023-07-05T19:01:04.601Z","dependency_job_id":"956b8cf7-f1dc-4b81-b445-34cddb711efd","html_url":"https://github.com/kdeldycke/plumage","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kdeldycke%2Fplumage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kdeldycke%2Fplumage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kdeldycke%2Fplumage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kdeldycke%2Fplumage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kdeldycke","download_url":"https://codeload.github.com/kdeldycke/plumage/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243724970,"owners_count":20337655,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootstrap","font-awesome","jquery","masonry","pelican","pelican-theme","theme","tipue-search"],"created_at":"2024-08-01T02:00:20.017Z","updated_at":"2025-03-15T11:31:56.655Z","avatar_url":"https://github.com/kdeldycke.png","language":"CSS","funding_links":["https://github.com/sponsors/kdeldycke"],"categories":["Themes"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/kdeldycke/plumage/\"\u003e\n    \u003cimg src=\"https://github.com/kdeldycke/plumage/raw/main/docs/assets/plumage-header-logo.jpeg\" alt=\"Plumage, a Pelican theme\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nPlumage is a clean and tidy theme for [Pelican](https://getpelican.com), a\nstatic site generator.\n\nI initially created this theme for [my blog](https://kevin.deldycke.com), but\nit is now generic enough to be used by anyone.\n\n## Features\n\n- Standard Pelican views:\n\n  |      ![Plumage article view](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/article.jpeg)      | ![Plumage categories view](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/categories.jpeg) | ![Plumage tiered tag list view](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/tiered-tags.jpeg) |\n  | :------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------: |\n  |                                                       Article                                                        |                                                    Categories                                                    |                                                    Tiered tag list                                                     |\n  |     ![Plumage archive view](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/archives.jpeg)      |        ![Plumage tag view](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/tag.jpeg)        |       ![Plumage authors view](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/authors.jpeg)       |\n  |                                             Collapsible yearly archives                                              |                                                 Tagged articles                                                  |                                                        Authors                                                         |\n  | ![Plumage archive view](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/browse-content-by.jpeg) |                                                                                                                  |                                                                                                                        |\n  |                                               Faceted article browsing                                               |                                                                                                                  |                                                                                                                        |\n\n- Projects template:\n\n  |             ![Plumage projects: code showcase](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/projects-code.jpeg)              |             ![Plumage projects: videos showcase](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/projects-videos.jpeg)              |             ![Plumage projects: themes showcase](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/projects-themes.jpeg)              |\n  | :--------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------: |\n  | Code showcase ([source](https://github.com/kdeldycke/kevin-deldycke-blog/blob/ebe0d17a59730457c3016dff77fdfa799a80d756/content/templates/code.html)) | Videos showcase ([source](https://github.com/kdeldycke/kevin-deldycke-blog/blob/f778998376fa5c68f1a02129884b89592b641777/content/templates/videos.html)) | Themes showcase ([source](https://github.com/kdeldycke/kevin-deldycke-blog/blob/f778998376fa5c68f1a02129884b89592b641777/content/templates/themes.html)) |\n\n- Based on [Bootstrap v5](https://getbootstrap.com).\n\n- [Code syntax highlighting](#code-syntax-highlighting) with [30+ styles](https://github.com/kdeldycke/plumage/tree/main/plumage/static/css/pygments).\n\n- Site-wide static search via [Stork](https://stork-search.net).\n\n- Bare YouTube links in articles gets rendered as embedded videos:\n\n  ![Plumage YouTube link](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/youtube-link.jpeg)\n\n- Direct link to edit articles on GitHub:\n\n  ![Plumage GitHub edit link](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/github-edit-link.jpeg)\n\n- Magnifying glass overlays on images and zoom:\n\n  ![Plumage image magnifying glass](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/magnifying-glass.jpeg)\n  ![Plumage image zoom](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/zoom.jpeg)\n\n- External assets (Bootstrap, …) relies on [CDNjs](https://cdnjs.com/about).\n\n- Disqus integration:\n\n  ![Plumage disqus comments](https://raw.githubusercontent.com/kdeldycke/plumage/main/docs/assets/disqus.jpeg)\n\n## Plugins\n\nPlumage has built-in support for the following plugins and extensions:\n\n| Plugin name                                                                                     | Type               | Status   | Notes                                                                                                         |\n| :---------------------------------------------------------------------------------------------- | :----------------- | :------- | :------------------------------------------------------------------------------------------------------------ |\n| [`pelican-neighbors`](https://github.com/pelican-plugins/neighbors)                             | Pelican plugin     | Optional |                                                                                                               |\n| [`pelican-related-posts`](https://github.com/pelican-plugins/related-posts)                     | Pelican plugin     | Optional |                                                                                                               |\n| [`pelican-similar-posts`](https://github.com/pelican-plugins/similar-posts)                     | Pelican plugin     | Optional |                                                                                                               |\n| [`pelican-search`](https://github.com/pelican-plugins/search)                                   | Pelican plugin     | Optional |                                                                                                               |\n| [`pelican-webassets`](https://github.com/pelican-plugins/webassets)                             | Pelican plugin     | Required |                                                                                                               |\n| [`markdown.extensions.admonition`](https://python-markdown.github.io/extensions/admonition/)    | Markdown extension | Optional | Re-style admonitions into [alerts](https://getbootstrap.com/docs/4.5/components/alerts/).                     |\n| [`markdown.extensions.toc`](https://python-markdown.github.io/extensions/toc/#usage)            | Markdown extension | Optional | Adds permalink anchors to article's subtitles.                                                                |\n| [`typogrify`](https://pypi.python.org/pypi/typogrify)                                           | Pelican builtin    | Optional | Style ampersands.                                                                                             |\n\n## Installation\n\n```shell-session\n$ python -m pip install uv\n$ uv venv\n$ source .venv/bin/activate\n$ uv pip install .\n```\n\nThen, once you're done installing the `plumage` module, update your `pelicanconf.py` file to reference the module:\n\n```python\nimport plumage\n\nTHEME = plumage.get_path()\n```\n\nOn first run, Plumage will try to install [Node.js package dependencies](https://github.com/kdeldycke/plumage/blob/main/plumage/package.json) via the `npm` CLI:\n\n```shell-session\n$ uv run -- pelican --verbose ./content\n(…)\nWARNING: postcss CLI not found.\n-\u003e Install Plumage's Node.js dependencies from (…)/plumage/package.json:\n  |   {\n  |     \"name\": \"plumage-webassets-pipeline\",\n  |     \"description\": \"Plumage dependencies for the webassets compilation pipeline.\",\n  |     \"dependencies\": {\n  |       \"postcss-cli\": \"^8.3.1\"\n  |     }\n  |   }\n  |\n\nup to date, audited 96 packages in 984ms\n\nfound 0 vulnerabilities\n-\u003e postcss CLI found at (…)/plumage/node_modules/.bin/postcss\n(…)\n```\n\n## Settings\n\nPlumage can be customized by adding these optional parameters to your\n`pelicanconf.py` file:\n\n| Setting name                                                                                  | Default value | Description                                                                                                                                                    |\n| :-------------------------------------------------------------------------------------------- | :------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `ARTICLE_EDIT_LINK`                                                                           |               | Generate an edit link besides each article. Can use `%(slug)s` to include dynamic article's slug in the link.                                                  |\n| `CODE_STYLE`                                                                                  | `\"monokai\"`   | Pygments' style ID. Choose one from `uv run -- pygmentize -L styles`.                                                                                         |\n| `COPYRIGHT`                                                                                   |               | Additional copyright statement to add in the third column of the footer.                                                                                       |\n| `DISCLAIMER`                                                                                  |               | Override the disclaimer notice that gets displayed at the fourth column of the footer.                                                                         |\n| [`DISQUS_SITENAME`](http://docs.getpelican.com/en/stable/settings.html#DISQUS_SITENAME)       |               | Pelican can handle Disqus comments. Specify the Disqus sitename identifier here.                                                                               |\n| `FAVICON_LINKS`                                                                               | `True`        | Fetch link's icons from [Google's favicons webservice](https://www.google.com/s2/favicons).                                                                    |\n| [`GOOGLE_ANALYTICS`](http://docs.getpelican.com/en/stable/settings.html#GOOGLE_ANALYTICS)     |               | Set to `UA-XXXXXX-Y` Property's tracking ID to activate Google Analytics.                                                                                      |\n| `LEFT_SIDEBAR`                                                                                |               | HTML content to put as-is in the left sidebar.                                                                                                                 |\n| [`LINKS_WIDGET_NAME`](http://docs.getpelican.com/en/stable/settings.html#LINKS_WIDGET_NAME)   | `\"Links\"`     | Allows override of the name of the links widget.                                                                                                               |\n| [`LINKS`](http://docs.getpelican.com/en/stable/settings.html#LINKS)                           |               | A list of tuples (Title, URL) for links to appear in the second column of the footer.                                                                          |\n| [`MANUAL_LINKS`](http://docs.getpelican.com/en/stable/settings.html#MANUAL_LINKS)             |               | When enabling this, you must pass the links (in LINKS \u0026 SOCIAL settings) not as tuples anymore, but as list, where every entry is formatted as you like        |\n| [`MENUITEMS`](http://docs.getpelican.com/en/stable/settings.html#MENUITEMS)                   |               | A list of tuples (Title, URL) for additional menu items to appear at the beginning of the main menu.                                                           |\n| `RIGHT_SIDEBAR`                                                                               |               | HTML content to put as-is in the right sidebar.                                                                                                                |\n| [`SITESUBTITLE`](http://docs.getpelican.com/en/stable/settings.html#SITESUBTITLE)             |               | A subtitle to appear in the header.                                                                                                                            |\n| `SITE_THUMBNAIL_TEXT`                                                                         |               | Text displayed behind site's thumbnail.                                                                                                                        |\n| `SITE_THUMBNAIL`                                                                              |               | Site's thumbnail URL as displayed in the header. Should be a square image of at least 80x80 pixels.                                                            |\n| [`SOCIAL_WIDGET_NAME`](http://docs.getpelican.com/en/stable/settings.html#SOCIAL_WIDGET_NAME) | `\"Social\"`    | Allows override of the name of the “social” widget.                                                                                                            |\n| [`SOCIAL`](http://docs.getpelican.com/en/stable/settings.html#SOCIAL)                         |               | A list of tuples (Title, URL) to appear in the first columns of the footer.                                                                                    |\n| `STORK_SEARCH`                                                                                | `False`       | Activate [Stork](https://stork-search.net) static search engine. Requires the [official Pelican's `search` plugin](https://github.com/pelican-plugins/search). |\n\nMost of these [parameters are similar to `notmyidea`'s\n](https://docs.getpelican.com/en/latest/settings.html#themes) (Pelican's default\ntheme). For usage example, please have a look into [my own `pelicanconf.py`\n](https://github.com/kdeldycke/kevin-deldycke-blog/blob/main/pelicanconf.py).\n\nThe theme is also sensible to this list of [standard Pelican parameters\n](https://docs.getpelican.com/en/latest/settings.html):\n\n- `ARCHIVES_SAVE_AS`\n- `AUTHOR`\n- `AUTHOR_SAVE_AS`\n- `AUTHORS_SAVE_AS`\n- `CATEGORIES_SAVE_AS`\n- `CATEGORY_FEED_ATOM`\n- `CATEGORY_FEED_RSS`\n- `DEFAULT_LANG`\n- `DEFAULT_PAGINATION`\n- `DISPLAY_PAGES_ON_MENU`\n- `DISPLAY_CATEGORIES_ON_MENU`\n- `FEED_ALL_ATOM`\n- `FEED_ALL_RSS`\n- `FEED_ATOM`\n- `FEED_DOMAIN`\n- `FEED_RSS`\n- `PAGINATION_PATTERNS`\n- `SITENAME`\n- `SITEURL`\n- `TAG_FEED_ATOM`\n- `TAG_FEED_RSS`\n- `TAGS_SAVE_AS`\n\n## Code Syntax Highlighting\n\nSyntax highlighting is produced by [Pygments](https://pygments.org).\n\nSee [MyST Markdown code syntax](https://mystmd.org/guide/code) for more details.\n\n## CSS customization\n\nTODO: document all kind customization below\n\n### Python code transforms at generation via `pyquery`\n\n### Use of `extra_css`\n\n### Custom `main.scss`\n\n## Performances\n\nThe theme does not try to implements tricks and optimization beyond reasonable efforts.\n\nThis was attempted in the past which limited success. That's because it is hard to find up-to-date and maintained projects in the Python ecosystem.\n\nInstead, I advise relying on external all-in-one optimization tools like [Jampack](https://jampack.divriots.com).\n\nAfter a build, just call it on the generated static content like so:\n```shell-session\n$ npx @divriots/jampack ./output\n```\n\n## FAQ\n\n### Why is the search not working?\n\nThe [official Pelican's `search` plugin](https://github.com/pelican-plugins/search) needs to\nbe installed.\n\nTODO: Activate search field automaticcaly if the plugin is present.\n\n## Development\n\nIf you need to work both on the content of your website and the theme, you need to:\n\n- Get a local copy of the theme outside your website virtualenv:\n\n  ```shell-session\n  $ cd ..\n  $ git clone https://github.com/kdeldycke/plumage.git\n  $ cd ./my-pelican-website\n  ```\n\n- Change the `plumage` dependency in you website's `pyproject.toml` from:\n\n  ```toml\n  dependencies = [\n      ...\n      \"plumage \u003canything\u003e\",\n      ...\n  ]\n  ```\n\n  To:\n\n  ```toml\n  dependencies = [\n      ...\n      \"plumage\",\n      ...\n  ]\n  ```\n\n- Also add this new section in the same `pyproject.toml`, to [force `uv` to pick up the latest local copy](https://github.com/astral-sh/uv/issues/2844#issuecomment-2241196371):\n\n  ```toml\n  [tool.uv.sources]\n  plumage = { path = \"../plumage\", editable = true }\n  ```\n\n## License\n\nThis software is licensed under the [GNU General Public License v2 or later\n(GPLv2+)](https://github.com/kdeldycke/plumage/blob/main/LICENSE).\n\nCopyright © 2012-2024 [Kevin Deldycke](https://kevin.deldycke.com) and\n[contributors](https://github.com/kdeldycke/plumage/graphs/contributors).\n\n## Third-party assets\n\nThe theme embed copies of some external software, scripts, libraries and\nartworks:\n\n```text\nFabric (Plaid)\nCopyright © 2012 James Basoo\nDistributed under a Creative Commons Attribution-ShareAlike 3.0 Unported license\nSource: https://subtlepatterns.com/fabric-plaid/\n```\n\n```text\nCream paper\nCopyright © 2012 Devin Holmes\nDistributed under a Creative Commons Attribution-ShareAlike 3.0 Unported license\nSource: https://subtlepatterns.com/cream-paper/\n```\n\n```text\nFeather-alt icon v5.1.0\nCopyright © 2020 Font Awesome project\nDistributed under a Creative Commons Attribution 4.0 International license\nSource: https://fontawesome.com/icons/feather-alt?style=solid\n```\n\n```text\nMacro shot of White Feather\nSource: https://unsplash.com/photos/Sw7f58YJbc0\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkdeldycke%2Fplumage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkdeldycke%2Fplumage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkdeldycke%2Fplumage/lists"}