# fish_greeting (updated for the J621 rewrite) Shows a random library image as your shell greeting, using fastfetch. This is the updated version of the script from `J621-Django/extras/fish_greeting system/fish_greeting.fish`, adapted to the new REST API. ## What changed from the old script | | Old J621-Django | This version | | --- | --- | --- | | Endpoint | `GET /random/?rating=X` returned **image bytes** | `GET /api/random/?fastfetch=1&rating=X` returns **JSON** | | Image access | same response, `X-File-MD5`/`X-File-Name` headers | signed `url` from the JSON, downloaded separately | | Unsupported types | rolled again (recursion) | server only returns png/jpg/gif in fastfetch mode | | Config | hardcoded `https://j621.jake.i` | `J621_BASE` / `J621_TOKEN` / `J621_WEB` | | Printed link | `/view/` on the old host | `/detail/` on `J621_WEB` | | Modes, logging, gifsicle, fastfetch flags | same | same (`~/.config/fish/greeting_mode`, `~/.config/j621Logos/logs.log`) | The `gm-switch` helper and the `.desktop` launchers from the old repo keep working unchanged: they write the same `~/.config/fish/greeting_mode` file (0 = NSFW, 1 = SFW, 2 = Questionable). ## Install ```fish cd extras/fish_greeting fish install.fish ``` Then edit `~/.config/j621Greeting/config.fish` (at least `J621_BASE`) and test: ```fish fish_greeting ``` Requirements: `curl` (or `wget`), `fastfetch`, `file`. Optional: `gifsicle` (GIF downscaling), `jq` or `python3` (JSON parsing — without either it falls back to grep/sed). ## Configuration Any of these work; the config file is read by the function on every run: ```fish # ~/.config/j621Greeting/config.fish, or universal variables set -g J621_BASE https://j621.rainbow-herring.ts.net # API origin set -g J621_WEB https://j621.example.ts.net # link origin (split deploys) set -g J621_TOKEN # signed URLs + hidden items set -g J621_FASTFETCH_CONFIG jake # fastfetch config name ``` `J621_TOKEN` is the same token the SPA uses (`Authorization: Token …`). With it the API signs the image URL for your account, so you also get items that are hidden from guests. Without it the greeting runs as a guest and sees the public library only. ## Rating filters | `greeting_mode` | Rating requested | Label | | --- | --- | --- | | `0` | `e` | NSFW | | `1` | `s` | SFW | | `2` (default) | `q` | Questionable | ## Troubleshooting - `No logo (No image matches those filters.)` — the library has no images for that rating; try another mode or add files. - `No logo (API error)` — check `J621_BASE`, and that the deployment is up (`https:///health`). - `No logo (download failed)` — the signed URL expired (they last 24 h) or the item was deleted between the two requests; just run it again. - The greeting is slow — the API and image fetch have `--max-time` guards; a slow tailnet link is usually the cause.