# Forgejo (git.hacktivism.ch)

Rootless stack on koopa: `~/koopa-forgejo/` (podman user hernani).  
Site: https://git.hacktivism.ch — HTTP `:9024`, git-SSH `:9200`.

## Branding theme: `hacktivism` (exchange-dark)

Global default and intended look match **exchange.hacktivism.ch**:

- Warm dark body (`#1a1410`), cream text (`#fff6e8`)
- Gold primary (`#e8a838` / `#f0c86a`), teal accents (`#3ecfbf`)
- Readable contrast on body, menus, code, forms, labels, messages

### Files (this repo)

| Path | Role |
|------|------|
| `assets/css/theme-hacktivism.css` | Full dark theme (based on forgejo-dark vars + exchange palette) |
| `assets/img/logo.svg` / `logo.png` / `favicon.svg` | Kamek-inspired logo (blue robe, flying on wand); not Nintendo art |
| `compose.yml` | Rootless compose + `FORGEJO__ui__DEFAULT_THEME=hacktivism` |
| `app.ini.example` | Config sketch |

### Live paths on koopa

```
~/koopa-forgejo/data/custom/public/assets/css/theme-hacktivism.css
~/koopa-forgejo/data/custom/public/assets/img/{logo.svg,logo.png,favicon.svg}
~/koopa-forgejo/data/custom/conf/app.ini   # [ui] DEFAULT_THEME = hacktivism
```

Compose also sets `FORGEJO__ui__DEFAULT_THEME=hacktivism`.

### Deploy assets (do not wipe git data)

```bash
install -m 644 configs/forgejo/assets/css/theme-hacktivism.css \
  ~/koopa-forgejo/data/custom/public/assets/css/
install -m 644 configs/forgejo/assets/img/* \
  ~/koopa-forgejo/data/custom/public/assets/img/
# optional mirror if present:
# cp same under data/gitea/custom/public/assets/...
```

**Never** remove `~/koopa-forgejo/data/git/` — repositories live there (`hernani/koopa-admin-log`, …).

### Logged-in users

`DEFAULT_THEME` only applies to new sessions / users without a preference.  
Existing accounts store `user.theme` in Postgres. Force all users:

```bash
podman exec koopa-forgejo-db psql -U forgejo -d forgejo \
  -c "UPDATE \"user\" SET theme = 'hacktivism';"
```

Or: Profile → Appearance → theme **hacktivism**, then hard-reload.

### Registration

Public signup is disabled (`DISABLE_REGISTRATION`, no registration button).
