The custom Warm Vodka variant brings warm near-black surfaces, quiet neutral borders, muted text, coral accents, and
system monospace fonts to the existing Forgejo GitHub layouts. It is dark-only: theme-github-warm-vodka-dark.css,
selected as github-warm-vodka-dark. There is no warm.vodka light or automatic variant. Semantic status and diff colors
remain distinct so success, warnings, failures, additions, and deletions retain their meaning. Forgejo brand marks are
tinted off-white; repository and user avatars keep their original colors.
Raised surfaces and secondary hover states stay warm-neutral, leaving coral for primary actions, links, active-tab underlines, and keyboard focus. Square controls and panels retain the terminal-like character without changing the shared spacing or responsive layouts.
File-finder prompts size from the active font rather than fixed pixel widths. Repository search and combined query/mode controls wrap when space is constrained, keeping their static labels readable with the monospace stack.
The warm.vodka website and its landing repository are visual references only. This theme implementation is original; no code or assets are copied from the GPL-licensed landing page. Existing themes and templates are retained.
With Bun 1.3.14 or newer, run these commands from this customized checkout (the upstream repository does not include this variant):
bun install
bun bundleThe build emits dist/theme-github-warm-vodka-dark.css and assembles the existing templates and their required CSS and
JavaScript in dist/forgejo. To retain the project's layouts, install that assembled tree together, not just the theme
CSS. Set FORGEJO_CUSTOM below to your instance's custom/data root containing conf/app.ini, templates, and public
(commonly data/gitea in the official container):
FORGEJO_CUSTOM=/path/to/forgejo-data
mkdir -p "$FORGEJO_CUSTOM/templates" "$FORGEJO_CUSTOM/public"
cp -R dist/forgejo/templates/. "$FORGEJO_CUSTOM/templates/"
cp -R dist/forgejo/public/. "$FORGEJO_CUSTOM/public/"Back up existing custom files first. Use templates only with the supported Forgejo release; see
Compatibility and Template File Installation. This copies all
existing theme CSS as well as the custom variant and retains the shared layout/assets. For packaged installation, the
custom CSS is in theme-github-extras.tar.gz; pair it with theme-github-templates.tar.gz to retain those layouts.
In <forgejo-data>/conf/app.ini, append github-warm-vodka-dark to your existing [ui] THEMES list rather than
removing other entries. To make it the instance default, also set DEFAULT_THEME:
[ui]
THEMES = gitea-auto, gitea-light, gitea-dark, github-auto, github-light, github-dark, github-soft-dark, github-warm-vodka-dark
DEFAULT_THEME = github-warm-vodka-darkRestart Forgejo and select github-warm-vodka-dark in your account's appearance settings. Omit the DEFAULT_THEME
change if you want to keep your current instance default; existing users can keep their own selected theme. The
local preview also includes this choice while keeping github-auto as its default.
With Nix flakes enabled, build the complete Forgejo custom tree without installing Bun or npm on the host:
nix build
# Equivalent named package:
nix build .#forgejo-github-themeThe output contains result/templates and result/public, including
result/public/assets/css/theme-github-warm-vodka-dark.css. Follow the installation and [ui] configuration above,
replacing dist/forgejo with result in the copy commands. The package builds every existing theme and stamps the
footer with its Nix package version.
The flake exposes packages for x86_64-linux, aarch64-linux, and aarch64-darwin. From another flake, use
inputs.warm-vodka-forgejo-theme.packages.${pkgs.stdenv.hostPlatform.system}.default instead of maintaining a separate
package expression.
Keep flake.nix, flake.lock, and package-lock.json in Git: Nix's Git source filtering omits untracked files.
Before adding these new files to Git, use nix build "path:$PWD" to build the working tree.
flake.lock pins nixpkgs; package-lock.json pins the npm dependencies used by buildNpmPackage. After changing
package.json, regenerate the npm lock with npm install --package-lock-only --ignore-scripts --legacy-peer-deps,
then run prefetch-npm-deps package-lock.json (available from nixpkgs) and update npmDepsHash in flake.nix with
the printed hash. The build invokes TypeScript, Vite, and assembly through Bun directly, preserving the Bun build
behavior despite Nix's patched Node shebangs.
Like the landing package, the theme package accepts a partial colors
attribute set through .override:
inputs.warm-vodka-forgejo-theme.packages.${pkgs.stdenv.hostPlatform.system}.default.override {
colors = {
background0 = "#101820";
accent = "#80cbc4";
accent-hover = "#a0dbd5";
accent-active = "#65aaa4";
box-border-color = "#567890";
};
}Only supplied colours change. Defaults live in themes/warmVodka.json, shared by local
Bun builds and the Nix package. Keep that file in Git alongside the flake. The shared landing palette names retain
their meaning here; the two additional accent keys control primary-button states.
| Attribute | Default | Use |
|---|---|---|
background0 |
#171416 |
Page, inset, editor, and primary-button text |
background1 |
#211d1f |
Controls, overlays, tooltips, and secondary surfaces |
background2 |
#2b2528 |
Hover surfaces |
background3 |
#352d31 |
Active, selected, and editor-selection surfaces |
foreground0 |
#f4e8e8 |
Primary text |
foreground1 |
#b4a7aa |
Muted text, placeholders, and icons |
accent |
#ff747e |
Links, focus, active navigation, and primary buttons |
accent-hover |
#ff929a |
Primary-button hover background and border |
accent-active |
#f0606c |
Primary-button active background |
box-border-color |
#3b3336 |
Borders and emphasized surfaces |
Use concrete hex, rgb(), or hsl() colours, not CSS variables: the theme's colour utilities need to parse them.
Translucent variants derive from the supplied colours. accent-hover and accent-active are independent defaults;
override them too when changing the primary-button colour family. These settings affect only the Warm Vodka theme;
GitHub's semantic success, warning, danger, ANSI, and syntax hues remain unchanged.
This project is a Forgejo-focused fork of Gitea GitHub Theme. It retains the upstream theme engine and design system while adapting styles and templates to Forgejo's native markup.
The standard bun bundle command generates all themes in dist; generated CSS remains excluded from Git. The included
templates are version-bound and should not be installed on another Forgejo release without reviewing its routes and
template data.
Releases are not tied to a Forgejo version number. Each release states the supported Forgejo major version and the exact Forgejo version used for testing in its release notes.
This project is licensed under the Apache License 2.0. See LICENSE and NOTICE for the upstream copyright and attribution information.
Important
Because the project uses new CSS features, ensure styles are applied correctly by keeping Chrome/Edge >= 120, Firefox >= 121, Safari >= 16.5
Choose one of the following ways to obtain the assets:
- Download the packaged archives from the latest release.
- Run the Development Build workflow manually and download its artifact.
- Build the assets locally with the commands in Using the Development Version.
Install the resulting files using your Forgejo data directory (commonly data/gitea in the official container):
- Extract
theme-github-base.tar.gz, then place the contained*.cssfiles in<forgejo-data>/public/assets/css(create the directory if necessary). This archive contains the standard light, dark, auto, and soft-dark themes. - Optionally extract
theme-github-accessibility.tar.gzfor colorblind and high-contrast themes, ortheme-github-extras.tar.gzfor Pink, Gitea-compatible, Catppuccin, and Warm Vodka themes. Place their CSS files in the same<forgejo-data>/public/assets/cssdirectory. - Extract the optional
theme-github-templates.tar.gzarchive into<forgejo-data>. It includes the templates and their required JavaScript and page-specific CSS assets underpublic/assets. - Modify
<forgejo-data>/conf/app.iniand append the CSS filename without thetheme-prefix toTHEMESunder the[ui]section. - Restart Forgejo.
- Select the theme in the Forgejo settings.
Example: If the theme filename is theme-github-dark.css, add github-dark to the end of THEMES
Example <forgejo-data>/conf/app.ini:
[ui]
THEMES = gitea-auto, gitea-light, gitea-dark, github-auto, github-light, github-dark, github-soft-darkTip
When THEMES is not set, Forgejo will use all themes
Important
Automatic color theme requires both light and dark theme files.
For details, refer to the Forgejo documentation.
Important
The template modifies Forgejo's layout to make it closer to GitHub's layout. Do not use template files across versions, as this may lead to missing functionality, Forgejo failing to start, and other issues.
Template layout is bound to the Forgejo instance and will affect all themes, impacting the experience of other non-project themes.
- Download the latest template archive from the release page and extract it into
<forgejo-data>. - Restart Forgejo
THEMES = github-auto, github-light, github-dark, github-soft-darkTHEMES = github-colorblind-auto, github-colorblind-light, github-colorblind-dark
THEMES = github-tritanopia-auto, github-tritanopia-light, github-tritanopia-darkTHEMES = github-high-contrast-auto, github-high-contrast-light, github-high-contrast-dark, github-high-contrast-soft-darkTHEMES = github-high-contrast-colorblind-auto, github-high-contrast-colorblind-light, github-high-contrast-colorblind-dark
THEMES = github-high-contrast-tritanopia-auto, github-high-contrast-tritanopia-light, github-high-contrast-tritanopia-darkTHEMES = github-pink-auto, github-pink-light, github-pink-dark, github-pink-soft-darkTHEMES = github-gitea-auto, github-gitea-light, github-gitea-darkTHEMES = github-catppuccin-auto, github-catppuccin-latte, github-catppuccin-frappe, github-catppuccin-macchiato, github-catppuccin-mochaYou can customize parts of the theme style according to your preferences
Add the following code at the beginning or end of the theme's CSS file
:root {
--custom-clone-menu-width: 150px;
...
}Important
Please ensure to add custom variables in the :root selector, otherwise they will not take effect
Variables are separated by ;
It is recommended to place custom variables in a separate file and append them to the theme file using shell commands or other methods
| Variable Name | Description | Default | Github | Recommend | Min | Max |
|---|---|---|---|---|---|---|
| --custom-branch-menu-width | Branch menu width | 320px | 320px | 320px | Gitea | 640px |
| --custom-clone-menu-width | Clone button menu width | Gitea | 332px | 200px | 150px | 400px |
| --custom-user-menu-width | User menu width | 192px | 200px | Gitea | 320px | |
| --custom-owner-switcher | Owner switcher in the navbar; none hides it |
flex | flex | |||
| --custom-footer-credit | Theme name and version in the footer; none hides it |
inline | inline | |||
| --custom-explore-repolist-columns | Number of repository list columns on explore page | 2 | 2 | 2 | ||
| --custom-explore-userlist-columns | Number of user/organization list columns on explore page | 3 | 1 | 2/3 | ||
| --custom-user-repolist-columns | Number of repository list columns on user page | 2 | 2 | 1/2 | ||
| --custom-org-repolist-columns | Number of repository list columns on organization page | 1 | 1 | 1/2 | ||
| --custom-org-userlist-columns | Number of user list columns on organization page | 2 | 1 | 1/2 |
You might want to use the development version of the theme instead of the released version.
Please ensure you have Bun 1.3.14 or above installed.
git clone https://github.com/whereareiam/forgejo-github-theme.git
cd forgejo-github-theme
bun install
bun bundleAfter compilation, CSS files are generated in dist. Install them as described above. The full release packaging step,
including templates, is available through the repository's CI workflow.
For faster iteration on CSS and templates, run the pinned local Forgejo preview. Its Compose file and helper code live
under dev/; Docker and Bun are required.
bun dev:forgejo:watchOpen http://localhost:3000. The preview skips Forgejo's first-run setup, selects github-auto
by default, and signs in automatically as alex, including when a public page is opened first. Set
FORGEJO_PREVIEW_AUTO_LOGIN=false to keep the normal sign-in page; the default credentials are alex / preview. The
watcher rebuilds the theme and restarts Forgejo after source changes so CSS and template updates are visible.
The first start fills the preview from the fixtures under dev/fixtures: the users alex and sam, the organization
acme, and two repositories. acme/webapp has branches, tags, issues, pull requests in every state, releases including
a draft and a prerelease, packages, and finished workflow runs with logs. alex/notes is nearly empty, for checking
empty states. All of it is invented, and dates are written relative to the day of seeding, so the activity feed and
contribution heatmap always look recent. No runner is configured and no workflow executes.
The data is kept in the Docker volume forgejo-dev-data, and a repository that already exists is not seeded again.
After changing a fixture, start from an empty volume:
bun dev:forgejo:reset
bun dev:forgejoSee dev/fixtures/README.md for the fixture format.
Override the local login before starting when needed:
FORGEJO_PREVIEW_USER=alice FORGEJO_PREVIEW_PASSWORD='local-password' bun dev:forgejoStop the preview with:
bun dev:forgejo:stopTo rebuild and sync once without watching, use bun dev:forgejo. After a later manual build, use bun dev:forgejo:sync
to copy the generated files into the running container.
The preview automatically reloads open pages after a successful rebuild or dev:forgejo:sync. Each refresh uses
versioned theme stylesheets (including auto-theme imports) and custom scripts, so browser cache clearing is unnecessary.
Run bun dev:forgejo:watch while editing to rebuild, restart, and reload automatically. These reload hooks exist only
in the preview's own copy of the build under dev/.generated; dist and release archives contain the normal theme
assets.



















