Commit graph

95 commits

Author SHA1 Message Date
9aa395814c Merge pull request 'Use the panel from its own flake (reudy-net/panel)' (#3) from agent/panel-flake into main
Reviewed-on: #3
2026-09-27 20:00:29 +02:00
e7bf1acd93 Use the panel from its own flake (reudy-net/panel)
The panel's code moved to git.reudy.net/reudy-net/panel, which provides a
package and a NixOS module. This config now pulls it in as the `panel`
flake input and only sets services.reudy-panel options, so panel updates
are `nix flake update panel` instead of edits in this repo.

The input uses ssh because the reudy-net org is not visible anonymously.
The generated service, directories, Caddy vhost, routes import and reload
units are unchanged apart from store paths.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UbWSNkXxZhYf7eqHTyx3Bf
2026-09-27 17:56:01 +00:00
3c416dc6e9 Merge pull request 'Move all services from srazka.com to reudy.net' (#2) from agent/reudy-net-domain into main
Reviewed-on: https://git.srazka.com/reudy-net/nixos/pulls/2
2026-09-27 17:39:34 +02:00
a3c730e1db Move all services from srazka.com to reudy.net
Renames every domain in the config: Caddy virtual hosts (auth, hello,
nextcloud, git, panel), the ACME contact email, Authelia's session cookie
domain / portal URL / default redirect and TOTP issuer, Nextcloud's
hostName and overwritehost, and Forgejo's DOMAIN (ROOT_URL and ssh clone
URLs follow from it; the panel picks them up via panel.nix). Panel docs and
examples updated too, and a README paragraph that had run together is
split again.

Requires DNS for auth/hello/nextcloud/git/panel.reudy.net (or a
*.reudy.net wildcard) pointing at the server before deploying.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UbWSNkXxZhYf7eqHTyx3Bf
2026-09-27 15:32:49 +00:00
0d0e44b39e Merge pull request 'panel: redesign web UI and make syncing responsive' (#1) from agent/panel-ui-improve into main
Reviewed-on: https://git.srazka.com/reudy-net/nixos/pulls/1
2026-09-27 00:57:22 +02:00
agent
c1ff6c8176 panel: Forgejo integration, ssh deploy key and per-app environment variables
Forgejo:
- panel.nix passes the local Forgejo's public, API and ssh URLs (derived
  from forgejo.nix) to panel-api.
- Settings dialog: connect a Forgejo access token (verified against
  /api/v1/user, stored 0600 in state/panel/forgejo-token).
- New-app dialog gets a Forgejo repository picker with search and a branch
  dropdown; private repos are cloned over https with the stored token, or
  over ssh with the deploy key when no token is connected. The app name and
  domain are filled in from the repository name.
- Commit and compare links in the Source tab point at Forgejo; cards show
  the provider ("Forgejo · main").

Git over ssh:
- ssh:// and git@host:owner/repo URLs are accepted; the panel generates an
  ed25519 deploy key in state/panel/ssh and uses it for clone/fetch
  (BatchMode, accept-new host keys). openssh added to the service path.
- Credential redaction only applies to http(s) URLs, so ssh usernames are
  kept; git errors now report the meaningful line instead of git's advice.

Environment variables:
- Stored per app in state/env/<app>.env (0600), outside the repo and stack.
- panelctl passes them to every compose command via env(1), so ${VAR}
  interpolation works; by default deploy/restart also generate a compose
  override listing the keys under every service's environment (values are
  read from compose's environment, never quoted into YAML).
- Environment tab (and a section in the new-app dialog) with .env paste
  import, hidden values, validation of names (reserved podman/compose vars
  rejected), hints for ${VAR}s the compose file uses but aren't set, and
  Save / Save & deploy. Removing an app deletes its variables.

The API still accepts the old source_type "github" / github_* fields.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UbWSNkXxZhYf7eqHTyx3Bf
2026-09-26 22:52:09 +00:00
agent
76a1e09913 panel: redesign web UI and make syncing responsive
Web UI (panel/frontend/index.html) rewritten:
- Cards update in place from a single /status poll instead of being rebuilt
  on every action, so open tabs, unsaved compose/route edits, logs and the
  file browser position survive refreshes. Polling speeds up while an
  operation runs and pauses in background tabs; a header indicator shows
  when the panel last synced and detects an expired Authelia session.
- New-app dialog (starter / compose / git), suggested port and domain,
  proper confirm dialogs (the old "OK = keep volumes" remove prompt is gone),
  toasts, an activity drawer with operation output, overflow menu, search,
  status filters, keyboard shortcuts, deep links, dark mode and mobile layout.
- Tabs: overview (containers + routes), compose editor (dirty tracking,
  Ctrl+S), logs with follow, validated routes editor, file browser with
  drag-and-drop upload, backups, and a git source tab (deployed commit,
  check for updates, sync & deploy).

API (panel/panel-api.py):
- ThreadingHTTPServer so a long deploy no longer blocks every other request.
- Per-app operation lock; concurrent writes to a busy app return 409.
- GET /status: all apps, routes and container status in one request
  (statuses gathered in parallel); status reports running/partial/stopped.
- Git sync is fetch + hard reset instead of pull-or-reclone, keeps the stored
  token, reports before/after commits; GET /apps/<name>/repo[?fetch=1].
- Any http(s) git host (e.g. Forgejo), default branch detection, git
  timeouts, no credential prompts, tokens redacted from errors, and manifest
  values validated before being written into the bash-sourced manifest.

panelctl:
- flock around routes.caddy rewrites (util-linux added to the service path).
- deploy returns compose output so failures are visible in the UI.
- inspect-volumes no longer fails for apps without named podman volumes,
  which broke the file browser.

Docs: README/API.md updated; fixed outdated panelctl init examples.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UbWSNkXxZhYf7eqHTyx3Bf
2026-09-26 22:17:07 +00:00
4143768c45 Added forgejo(git server) 2026-09-26 19:00:28 +02:00
Jakub Dorfman
2028769f92 rekeyed secrets with fedora surface ssh key 2026-07-17 14:52:20 +02:00
b4ec534f68 added fedora surface user to secrets users 2026-07-17 14:48:56 +02:00
Jakub Dorfman
a6c0157f46 update nextcloud admin user to 'admin-reudy' 2026-07-15 19:05:20 +02:00
Jakub Dorfman
f5d4becb50 ensure nextcloud cron service waits for setup to complete 2026-07-15 17:10:41 +02:00
Jakub Dorfman
cce19b503f update nextcloud package version to 33 2026-07-15 17:05:09 +02:00
Jakub Dorfman
0e1a7c0830 rearranged nginx listen configuration for nextcloud service 2026-07-15 17:01:57 +02:00
Jakub Dorfman
4af6798b5d fixed missing listen 2026-07-15 17:00:21 +02:00
Jakub Dorfman
eed70a6969 added nextcloud 2026-07-15 16:57:26 +02:00
Jakub Dorfman
091a23625d removed old surface ssh key 2026-07-05 14:38:06 +02:00
Jakub Dorfman
ed22ab2de6 added reudy-book to ssh 2026-07-05 14:31:37 +02:00
Jakub Dorfman
7fae1ed57e added path to routing 2026-05-20 01:07:37 +02:00
Jakub Dorfman
02b2909601 added support for multiple routes multiple ports 2026-05-20 00:21:25 +02:00
Jakub Dorfman
c93982936b installed htop 2026-05-14 21:43:15 +02:00
Jakub Dorfman
b6f18de9e2 revert to ada9be7 2026-05-14 21:40:56 +02:00
Jakub Dorfman
d7bc158864 allow unfree package lxmf in nixpkgs configuration 2026-05-14 21:08:58 +02:00
Jakub Dorfman
31db0a67d4 changed version of pkgs.python314Packages.rns and lxmf 2026-05-14 21:06:49 +02:00
Jakub Dorfman
19281afb90 added lxmd -p to reticulum making it a propagation node 2026-05-14 21:03:00 +02:00
Jakub Dorfman
ada9be73f5 changed reticulum home to work with permissions of reticulum user 2026-05-13 23:46:42 +02:00
Jakub Dorfman
e74af2b8e4 fix: define lib variable in outputs let block 2026-05-13 23:41:34 +02:00
Jakub Dorfman
d24fe40f61 allowed unfree packages, reticulum has custom license 2026-05-13 23:39:06 +02:00
Jakub Dorfman
79cf938395 added reticulum 2026-05-13 23:34:02 +02:00
Jakub Dorfman
0e4e3308c1 fix: add --build flag to run_compose for deployment and restart commands
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 19:36:02 +02:00
Jakub Dorfman
559bae34a9 fix: reset leftover variables in cmd_list function
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 18:56:26 +02:00
Jakub Dorfman
ea0f99b442 feat: add repo_url to app data and update frontend to conditionally display Git Pull button
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 18:53:02 +02:00
Jakub Dorfman
fabcfceb6d feat: add repo-pull action to re-clone/pull repository and redeploy app
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 18:47:11 +02:00
Jakub Dorfman
0a82fe3160 fix: add git package to panel API service dependencies 2026-04-29 18:40:02 +02:00
Jakub Dorfman
1f0368f1dd fix: check for git installation before cloning repository in HTTP handler
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 18:38:29 +02:00
Jakub Dorfman
197926a8a8 fix: improve error handling and refactor app initialization process in HTTP handler
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 18:36:11 +02:00
Jakub Dorfman
435be527d7 fix: improve error handling when reading app state in HTTP handler
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 18:34:49 +02:00
Jakub Dorfman
2c1d267652 feat: add support for app source selection with GitHub and raw compose options
Co-authored-by: Copilot <copilot@github.com>
2026-04-29 15:39:34 +02:00
Jakub Dorfman
57ace80ecd feat: enhance volume management with support for multiple volumes and improved API endpoints
Co-authored-by: Copilot <copilot@github.com>
2026-04-28 23:43:17 +02:00
Jakub Dorfman
479d84bc27 feat: add volume management features including file upload, download, and clear actions
Co-authored-by: Copilot <copilot@github.com>
2026-04-28 23:30:22 +02:00
Jakub Dorfman
612fde6038 fix: streamline backup and route rendering actions in handleAction function
Co-authored-by: Copilot <copilot@github.com>
2026-04-28 23:24:55 +02:00
Jakub Dorfman
8b42ea7e04 feat: add routing tab and fetch routing details for apps in frontend
fix: update compose commands to remove orphan containers in panelctl

Co-authored-by: Copilot <copilot@github.com>
2026-04-28 23:20:49 +02:00
Jakub Dorfman
eeab4c1818 fix: remove unnecessary sudo rules and adjust permissions for container directories
Co-authored-by: Copilot <copilot@github.com>
2026-04-28 23:09:25 +02:00
Jakub Dorfman
fe4d3f4432 feat: add panel configuration with API service and Caddy integration
Co-authored-by: Copilot <copilot@github.com>
2026-04-28 22:54:36 +02:00
Jakub Dorfman
441b049e2b fix: remove unused maybe_reload_caddy function from panelctl.sh 2026-04-28 20:49:14 +02:00
Jakub Dorfman
ec1780d36a fix: add missing parameters to caddy configuration 2026-04-28 20:45:52 +02:00
Jakub Dorfman
fc9c6f1b81 fix: correct systemd path and service configuration for Caddy route reload 2026-04-28 20:44:14 +02:00
Jakub Dorfman
d71e12b3dd fix: add systemd path and service for automatic Caddy reload on route changes 2026-04-28 20:42:12 +02:00
Jakub Dorfman
e9045690d5 fix: remove curl from systemPackages and add it to serviceConfig path 2026-04-27 12:51:37 +02:00
Jakub Dorfman
24a25fe22f fix: remove admin configuration from extraConfig in caddy.nix 2026-04-27 12:46:57 +02:00