4112 Commits
Author SHA1 Message Date
Gabriel Fontes 1cec5bbd6c chore(flake): update inputs
Update direct inputs:
- firefox-addons a5ad6b67 -> 25227969 (84 commits; uBlock Origin 1.71.0 -> 1.73.0)
- nixos-hardware 2e790b0a -> 0471accf (15 commits; Raspberry Pi and P14s fixes)
- home-manager 06258193 -> 03f4cd46 (203 commits; module fixes, additions, and migrations)
- lanzaboote 6650fb7c -> 69cf334f (34 commits; firmware key option, docs, and dependency updates)
- nix-minecraft 794884da -> 25b4dfcd (54 commits; server locks and NeoForge fixes)
- nixos-mailserver c37fd9c4 -> e668474d (23 commits; Postfix CA workaround and maintenance)
- sops-nix 420f8d2e -> a8627b21 (17 commits; dependency and initrd test fixes)
- system-manager 48d47346 -> 64748b62 (3 commits; unstable/stable branch support)
- nixpkgs 567a49d1 -> 56c02bc0 (104 direct system/home package changes)

Keep the legacy RuneScape client working with OpenSSL 1.1 from a pinned
nixos-26.05 input, and preserve the removed Materia theme locally without
its obsolete Murrine runtime dependency. Adapt removed package references and
renamed NixOS/Home Manager options exposed by the update.

- rebase the llama.cpp cache-scan patch onto 10408
- adapt the fish-helix compatibility patch to Fish 4.8
- update Hyprbars for the Hyprland 0.56 plugin API
- use the Python distribution name for Lyrics metadata checks
- disable broken qutebrowser GBM video path (QtWebEngine 6.11.1)

Assisted-by: pi (gpt-5.6-sol)
2026-08-27 09:45:57 -03:00
Gabriel Fontes df59c323e6 refactor(home/aerc): vendor default bindings
Assisted-by: pi (gpt-5.6-sol)
2026-08-27 09:45:44 -03:00
Gabriel Fontes 448fa54304 fix(grafana): ignore read-only Nix store mount
Assisted-by: pi (gpt-5.6-sol)
2026-08-26 15:36:38 -03:00
Gabriel Fontes 3c6153a71b feat(home/runescape): load plugins from home packages
Assisted-by: pi (gpt-5.6-sol)
2026-08-26 09:37:30 -03:00
Gabriel Fontes 3f579c338d refactor(projects/runelite-query): replace mcp with http api
Rename the plugin and expose its read-only RuneLite snapshots through versioned GET endpoints with on-demand OpenAPI discovery. Preserve typed state, filtering, event cursors, bounds, and loopback protections while removing JSON-RPC, tool discovery, prompts, Wiki proxying, and all compatibility paths.

Replace the Pi MCP adapter and registry with a contextual RuneLite Query skill, and cover every endpoint using mocked RuneLite response shapes plus an ephemeral HTTP server.

Assisted-by: pi (openai-codex/gpt-5.6-sol)
2026-08-25 18:16:18 -03:00
Gabriel Fontes e9321bc1ad fix(home/pi): hydrate model data during build
Hydrate provider model data from the published pi-ai package, build the new telemetry, protocol, and client workspaces, and preserve them as runtime dependencies.

Assisted-by: pi (gpt-5.6-sol)
2026-08-25 10:50:40 -03:00
Gabriel Fontes 2e2e023f29 chore(home/pi): update pi to 0.84.3
Update Pi from 0.83.0 to 0.84.3 (613 commits):
- add fullscreen mode, transcript search, and Mermaid/LaTeX rendering
- add thinking selection, configurable default tools, and context overrides
- improve startup, compaction, provider handling, and extension cleanup
- fix Codex, llama.cpp, Wayland clipboard, and dependency security issues

Align local extension types and backfill omitted npm integrity metadata.

Assisted-by: pi (gpt-5.6-sol)
2026-08-25 10:36:54 -03:00
Gabriel Fontes 8963baf351 docs(pi): organize context operations
Assisted-by: pi (gpt-5.6-sol)
2026-08-25 09:08:47 -03:00
Gabriel Fontes 2905511247 docs(pi): ground reflective closings
Assisted-by: pi (gpt-5.6-sol)
2026-08-25 09:07:25 -03:00
Gabriel Fontes 182909b51a docs(pi): sharpen agent voice
Assisted-by: pi (gpt-5.6-sol)
2026-08-25 09:04:56 -03:00
Gabriel Fontes 2aba23579d refactor(pi): trim agent context
Assisted-by: pi (gpt-5.6-sol)
2026-08-25 09:01:10 -03:00
Gabriel Fontes 6f76e05146 docs(pi): document Kagi session token
Assisted-by: pi (gpt-5.6-sol)
2026-08-25 08:56:36 -03:00
Gabriel Fontes 01ac5562f0 fix(overlays): use host platform system
Assisted-by: pi (gpt-5.6-sol)
2026-08-25 08:56:26 -03:00
Gabriel Fontes 7c8ca4f0a6 fix(home/ssh): resolve matchBlocks eval warning
Assisted-by: pi (openai-codex/gpt-5.6-sol)
2026-08-25 08:54:57 -03:00
Gabriel Fontes defd556722 feat(website): add dissertation pdf 2026-08-24 22:54:46 -03:00
Gabriel Fontes b75bf2153a refactor(lib): share systemd device path conversion
Assisted-by: pi (gpt-5.6-sol)
2026-08-24 12:51:44 -03:00
Gabriel Fontes 09097bf97a fix(merope): bind media mount to stable device unit
Assisted-by: pi (gpt-5.6-sol)
2026-08-24 12:51:44 -03:00
Gabriel Fontes b76aa22ae0 fix(agent-browser): provide packaged headless chromium
Assisted-by: pi (gpt-5.6-sol)
2026-08-24 12:51:44 -03:00
Gabriel Fontes 631c049b89 fix(grafana): reduce availability alert noise
Assisted-by: pi (gpt-5.6-sol)
2026-08-24 11:32:26 -03:00
Gabriel Fontes a4bfacee5b feat(grafana): alert on read-only btrfs filesystems
Assisted-by: pi (gpt-5.6-sol)
2026-08-24 11:19:16 -03:00
Gabriel Fontes 0756c21c6e fix(merope): stop media consumers when storage unmounts
Assisted-by: pi (gpt-5.6-sol)
2026-08-24 11:13:53 -03:00
Gabriel Fontes 7ee25ba834 fix(merope): bind media mount to its device
Assisted-by: pi (gpt-5.6-sol)
2026-08-24 11:01:53 -03:00
Gabriel Fontes d61d8dd7c4 fix(hosts): use stable disk identifiers
Assisted-by: pi (gpt-5.6-sol)
2026-08-24 10:54:18 -03:00
Gabriel Fontes 6ccca4efdf feat(home/pi): add agent-browser package
Assisted-by: openai-codex (gpt-5.6-luna)
2026-08-23 23:46:02 -03:00
Gabriel Fontes 052d20c9c7 feat(hosts/merope/calibre-web): expose calibre content server on tailnet
Add a calibre.m7.rs vhost proxying the calibre-server content server,
restricted to localhost and the headscale tailnet prefixes, and enable
calibre-server auth so the endpoint is not anonymous.
2026-08-20 19:25:54 -03:00
Gabriel Fontes 901be0cfe2 fix(hosts/merope/calibre-web): make library read-only
calibre-web wrote metadata.db directly, which desynced calibre-server's
in-memory library cache: books uploaded through books.m7.rs stayed
invisible on the content server until it was restarted, and two writers
on one library risk clobbering each other's metadata.

Drop calibre-web from the readarr and calibre-server groups and force
ReadWritePaths down to its state directory, so the pre-existing
ProtectSystem=strict leaves the library read-only. The 0002 umask only
existed to keep those shared-library writes group-writable, so it goes
too. Readarr already writes through the content server API, so
calibre-server is now the sole writer.

Note that services.calibre-web.options.enableBookUploading does not
cover this on its own: config_uploading only drives the templates, while
POST /upload stays gated on the per-user ROLE_UPLOAD bit alone.

Assisted-by: pi (claude-opus-5)
2026-08-20 19:11:31 -03:00
Gabriel Fontes ba7187ed95 feat(home/pi): enable deepseek v4 models in model picker 2026-08-20 12:49:09 -03:00
Gabriel Fontes 053344763e feat(home/pi): expose low thinking level for deepseek v4 2026-08-20 12:42:08 -03:00
Gabriel Fontes a410753d70 feat(aerc): bind F to toggle the flagged flag
aerc ships no default keybind for :flag, so marking a message as
important meant typing the command. F was free in both messages and
view ('f' is :forward).

Assisted-by: pi (claude-opus-5)
2026-08-20 11:41:33 -03:00
Gabriel Fontes 2cb0cd6487 fix(bazarr): pick sync reference by speech, not last timestamp
ffsubsync selects the embedded subtitle track with the latest final cue,
which a Signs & Songs track wins on its trailing title card despite
carrying no dialogue. Select on total speech instead.

Assisted-by: pi (claude-opus-5)
2026-08-20 08:55:48 -03:00
Gabriel Fontes 8fe880e5b4 fix(bazarr): skip non-dialogue subtitle tracks when syncing
ffsubsync references whichever embedded track ends last, which ties to
Signs & Songs on anime releases. Probe and pick a dialogue track instead.

Assisted-by: pi (claude-opus-5)
2026-08-20 08:51:30 -03:00
Gabriel Fontes 4b90ba3974 chore(waypipe): pin to v0.11.1 2026-08-18 11:17:12 -03:00
Gabriel Fontes 2768852d7c feat(hosts/ubuntu/electra): wire up ssh server
Mirror the NixOS openssh config on system-manager: no password auth, no
root login, ed25519 host key only, and gabriel's authorized keys. Its
module runs Ubuntu's /usr/sbin/sshd, so PAM keeps working.

Also enable programs.ssh for system-wide known hosts, and teach the NixOS
side about system-manager hosts so they know electra.
2026-08-18 10:56:49 -03:00
Gabriel Fontes f3f1a448df fix(hosts/merope/calibre-web): fix umask
This ensures calibre-server and readarr can still write
2026-08-17 18:23:24 -03:00
Gabriel Fontes 28cb6d733c fix(hosts/merope): go back to upstream seerr 2026-08-17 12:47:29 -03:00
Gabriel Fontes e36c133402 fix(hydra): fix branch syntax 2026-08-17 12:42:18 -03:00
Gabriel Fontes 0a56ffd5e3 chore(hydra): switch back to self hosted git for CI 2026-08-17 12:33:32 -03:00
Gabriel Fontes 77279ae9ac feat(hosts/merope): make calibre able to write into library 2026-08-17 12:31:51 -03:00
Gabriel Fontes 0cc4db163f fix(merope/seerr): allow large Lidarr libraries
Raise the Axios response limit to 64 MiB only for Lidarr so large album libraries can complete SeerrNG scans without weakening the cap for other external APIs.

Assisted-by: pi (gpt-5.6-sol)
2026-08-17 11:32:50 -03:00
Gabriel Fontes a510f5d510 fix(alcyone/mail): disable authentication on public smtp
Keep SASL enabled only on the Tailscale-restricted submissions service.

Assisted-by: pi (gpt-5.6-sol)
2026-08-17 11:14:14 -03:00
Gabriel Fontes 42ed14a404 Revert "feat(merope/books): replace Calibre with Kavita"
This reverts commit 0a1f6f86c1.
2026-08-17 10:18:11 -03:00
Gabriel Fontes 863387b99b fix(merope/seerr): use canonical dynamic state path
Point SeerrNG directly at systemd's private StateDirectory target so its log
path security check does not reject the public DynamicUser symlink.

Assisted-by: pi (gpt-5.6-sol)
2026-08-17 09:57:13 -03:00
Gabriel Fontes 28d3bf2569 fix(hosts/alcyone/secrets): fix calibre pwd 2026-08-17 09:55:01 -03:00
Gabriel Fontes 3afd0ae631 feat(merope/seerr): switch to SeerrNG 2026-08-17 08:23:41 -03:00
Gabriel Fontes 4ad5343165 fix(merope/kavita): avoid JellySearch port collision
Move Kavita to port 5001 because JellySearch already occupies its default
port 5000, which left Kavita restarting against JellySearch's listener.

Assisted-by: pi (gpt-5.6-sol)
2026-08-17 01:25:23 -03:00
Gabriel Fontes 885d7fb921 refactor(merope/jellyseerr): use dynamic user
Assisted-by: pi (gpt-5.6-sol)
2026-08-17 00:56:01 -03:00
Gabriel Fontes 0a1f6f86c1 feat(merope/books): replace Calibre with Kavita
Serve the Readarr-owned library through read-only Kavita, with a persisted
machine-local token key and the existing public books.m7.rs endpoint.

Assisted-by: pi (gpt-5.6-sol)
2026-08-17 00:39:15 -03:00
Gabriel Fontes e93143e18f feat(merope/books): expose Calibre-Web publicly
Assisted-by: pi (gpt-5.6-sol)
2026-08-17 00:26:51 -03:00
Gabriel Fontes 81d93014c0 feat(hosts/alcyone/mail): add calibre mail 2026-08-16 23:48:05 -03:00
Gabriel Fontes 2506a3fa31 fix(merope/books): allow Readarr to move SABnzbd downloads
Assisted-by: pi (gpt-5.6-sol)
2026-08-16 23:45:14 -03:00