Legion of xXDEATHXx Bootstrap 5 theme for Alliance Auth 5
Project description
Alliance Auth XIX Theme
The Legion of xXDEATHXx theme for Alliance Auth 5 (Django 5.2 LTS, Bootstrap 5). It ships a self-contained Bootstrap 5 build with the XIX brand styling and restyles the public/login pages, delivered as a standard Python package.
Русская версия: README.ru.md.
Features
- Dashboard theme via the AA5 theme selector. Registers a
ThemeHooknamed xix that appears in the user's theme picker. - Self-contained assets. The theme serves its own Bootstrap 5 CSS, JS bundle and the Lato web font from this package's static files; nothing is loaded from a CDN or Google Fonts.
- Restyled public pages. The login chain — with an animated starfield background — and the django-esi character-pick page are overridden with Bootstrap 5 layouts that match the theme.
- Operator-configurable strings via an optional
AA_THEME_XIXsettings dict — no template forking required (see Configuration). - English and Russian translation catalogues.
Requirements
- Alliance Auth
>=5,<6 - Python
>=3.11,<3.15
Installation
pip install aa-theme-xix
To install the latest unreleased changes straight from the repository instead:
pip install git+https://gitlab.com/legion-of-xxdeathxx/aa-theme-xix.git
Open your local.py and add the following right below your INSTALLED_APPS:
# XIX Theme - https://gitlab.com/legion-of-xxdeathxx/aa-theme-xix
INSTALLED_APPS.insert(0, "aa_theme_xix")
This single entry both activates the template overrides (login page, ESI token selection, icons) and registers the theme with Alliance Auth's theme selector.
Then collect the static files:
python manage.py collectstatic
Once installed, each user can pick xix from the theme selector in their Alliance Auth profile.
Configuration
The theme works without any configuration. To override the operator-facing
strings on the public pages without forking the templates, add an optional
AA_THEME_XIX dict to your local.py:
AA_THEME_XIX = {
"LOGIN_TITLE": "My Alliance",
"LOGIN_SUBTITLE": "TICKER",
"DISCORD_INVITE_URL": "https://discord.gg/example",
"OPENGRAPH_DESCRIPTION": "My Alliance's auth system.",
}
| Key | Default | Description |
|---|---|---|
LOGIN_TITLE |
Legion of xXDEATHXx |
Heading (and logo alt text) in the login box. |
LOGIN_SUBTITLE |
X.I.X |
Ticker line under the heading. |
DISCORD_INVITE_URL |
the XIX Discord invite | Target of the Discord link on the login page. |
OPENGRAPH_DESCRIPTION |
the Alliance Auth blurb | Site description used in link previews (OpenGraph meta). |
Any key left unset keeps the theme's built-in default, so an out-of-the-box install renders exactly as shipped.
Default theme
Each user selects a theme from their profile. Until a user makes a choice,
Alliance Auth renders the theme named by its core DEFAULT_THEME setting
(shipped as allianceauth.theme.flatly.auth_hooks.FlatlyThemeHook). To make
XIX the default for everyone who has not picked one yet, set DEFAULT_THEME
in your local.py:
# Make XIX the default for users who have not chosen a theme
DEFAULT_THEME = "aa_theme_xix.auth_hooks.AaXixThemeHook"
DEFAULT_THEME is an Alliance Auth core setting, not a XIX one — it only sets
the fallback; users can still switch to any installed theme from their
profile. The public login pages are always XIX-styled regardless of this
setting.
Upgrade
pip install --upgrade aa-theme-xix
python manage.py collectstatic
Using aa-gdpr
If you are using aa-gdpr,
this theme's entry needs to come after the aa-gdpr entry:
# GDPR Compliance
INSTALLED_APPS.insert(0, "aagdpr")
AVOID_CDN = True
# XIX Theme - https://gitlab.com/legion-of-xxdeathxx/aa-theme-xix
INSTALLED_APPS.insert(0, "aa_theme_xix")
Building from source
The shipped CSS and JS are not edited directly — they are compiled from
scss/ and js/ with a gulp + dart-sass + PostCSS + esbuild toolchain:
npm ci # reproducible toolchain pinned by package-lock.json
npm run compile # compiles scss/ and js/ -> aa_theme_xix/static/
The Python package is built with uv on the hatchling build backend:
uv build # produces a wheel and sdist in dist/
The package version is single-sourced in pyproject.toml (version);
aa_theme_xix/__init__.py derives __version__ from the installed
distribution metadata at runtime, and the test suite enforces the match.
Limitations
- Alliance Auth 5 only. The templates target the AA5 / Bootstrap-5 theme-hook era; Alliance Auth 4 is not supported.
- Run
collectstaticafter every install or upgrade — the theme serves its Bootstrap bundle and compiled CSS from this package's static files. - This is a presentation layer only: it adds no models, views, or URLs.
License
Distributed under the GPL-3.0-or-later license.
Changelog
See CHANGELOG.md.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aa_theme_xix-0.4.0.tar.gz.
File metadata
- Download URL: aa_theme_xix-0.4.0.tar.gz
- Upload date:
- Size: 259.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dca1247dfc77b18d8de99661dedd34f36fa1964dc4a5ec9aefe8ac18d977acc1
|
|
| MD5 |
3fba92544a2c19fcd8495d2cd5d2f188
|
|
| BLAKE2b-256 |
8b2fa15c5eb1a6f1884061814b1147e1517d308cbbf211dc9b54640e8c9b853d
|
File details
Details for the file aa_theme_xix-0.4.0-py3-none-any.whl.
File metadata
- Download URL: aa_theme_xix-0.4.0-py3-none-any.whl
- Upload date:
- Size: 266.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8776ca8472a42eaa571e2d42b510c6f473f3444c20cb8654bb9b5b1842d4d84
|
|
| MD5 |
0548b4bee1eb00333cc01aa52a3c0fd5
|
|
| BLAKE2b-256 |
c5fe71986bd764752be7996cbd260ae983cfbb6489613028c2f5dd16a47237a3
|