Skip to content

Commit a0b10f0

Browse files
assistant-ngalaiko[bot]ngalaiko
authored andcommitted
Remove Open WebUI Computer from exe.dev image
1 parent 526512e commit a0b10f0

12 files changed

Lines changed: 16 additions & 392 deletions

File tree

README.md

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -39,21 +39,9 @@ nodes; use an ephemeral key so retired ones auto-clean (see step 3).
3939
"users": ["nikita"]
4040
}],
4141
// required for `funnel = true` serve entries (the public ingress).
42-
"nodeAttrs": [{ "target": ["tag:computer"], "attr": ["funnel"] }],
43-
// the cptr dashboard is a Tailscale Service: let tag:computer nodes host it
44-
// without manual approval, and let my devices reach it. The svc: name lives
45-
// here (in the tailnet), so it outlives any single machine.
46-
"autoApprovers": { "services": {
47-
"svc:cptr": ["tag:computer"]
48-
} },
49-
"grants": [{ "src": ["autogroup:member"], "dst": ["svc:cptr"], "ip": ["443"] }]
42+
"nodeAttrs": [{ "target": ["tag:computer"], "attr": ["funnel"] }]
5043
```
5144

52-
Tailscale Services are configured in the policy, not on the box. If your
53-
tailnet requires the Service object to exist before it can be hosted, add it
54-
once under **Services → Add a service** (`svc:cptr`) — a one-time tailnet
55-
step, not per-machine.
56-
5745
Place the secret on the machine (ephemeral, so retired VMs' nodes auto-clean):
5846

5947
```
@@ -71,11 +59,7 @@ nodes; use an ephemeral key so retired ones auto-clean (see step 3).
7159

7260
4. Enable **HTTPS Certificates** (admin console → DNS → *Enable HTTPS*, needs
7361
MagicDNS on). Required to provision the `*.ts.net` certs. The `computer`
74-
node's `tailscale-serve` service re-asserts both on every boot:
75-
- `https://cptr.<tailnet>.ts.net/` → cptr dashboard, **tailnet-private**, a
76-
Tailscale **Service** (`svc:cptr`). Because the Service is defined in the
77-
tailnet, this URL is **stable across recreations** — a fresh machine just
78-
re-hosts it (auto-approved) even though it registers as a new node.
62+
node's `tailscale-serve` service re-asserts this on every boot:
7963
- `https://computer.<tailnet>.ts.net/<tenant>/` → ingress, **public via
8064
Funnel** (needs the `nodeAttrs` above). Unauthenticated — see the note in
8165
`hosts/exedev/default.nix`. This one is named after the *node*, so on a

hosts/exedev/default.nix

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
name = "computer.exe";
77
labels = {
88
"org.opencontainers.image.title" = "computer.exe";
9-
"org.opencontainers.image.description" =
10-
"exe.dev image: s6-overlay, Tailscale SSH, and Open WebUI Computer (cptr)";
9+
"org.opencontainers.image.description" = "exe.dev image: s6-overlay and Tailscale SSH";
1110
"exe.dev/login-user" = "nikita";
1211
};
1312
packages = with pkgs; [
@@ -28,15 +27,9 @@
2827
services.tailscale = {
2928
enable = true;
3029
# One tailnet node, `computer`: ssh + the public ingress funnel on its own
31-
# name, and it also hosts the cptr dashboard as a Tailscale *Service*. Both
32-
# bind :443 but on different IPs (the node's own IP for the funnel, the
33-
# service VIP for the dashboard), rebuilt on every boot.
30+
# name, rebuilt on every boot.
3431
nodes.computer = {
3532
ssh = true;
36-
# let the unprivileged cptr account read the LocalAPI (tailscale status /
37-
# funnel status) to report the current public hostname; writes stay
38-
# root-only. See the public-hostname skill.
39-
localApiReadable = true;
4033
serve = [
4134
# public path-routed ingress via node Funnel:
4235
# https://computer.<tailnet>.ts.net/<tenant>/. World-reachable with NO
@@ -48,15 +41,6 @@
4841
port = 443;
4942
funnel = true;
5043
}
51-
# cptr dashboard as a stable Tailscale Service:
52-
# https://cptr.<tailnet>.ts.net/, tailnet-private. svc:cptr lives in the
53-
# tailnet policy (autoApprover + grant, see README), so the URL survives
54-
# this node re-registering as a fresh device on every recreation.
55-
{
56-
target = "localhost:9999";
57-
port = 443;
58-
service = "svc:cptr";
59-
}
6044
];
6145
};
6246
};

hosts/exedev/users/assistant.nix

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
{ pkgs, ... }:
22
let
33
# pi (the coding agent) is an npm CLI, packaged from its published tarball.
4-
# MIT, all-JS deps, so it builds against the pinned nixpkgs directly (no
5-
# unstable / allowUnfree, unlike cptr).
4+
# MIT, all-JS deps, so it builds against the pinned nixpkgs directly.
65
pi = import ../../../packages/pi { inherit pkgs; };
76
# the pi-gateway plugin, self-contained (peers + native better-sqlite3 bundled).
87
piGateway = import ../../../packages/pi-gateway { inherit pkgs; };
@@ -16,8 +15,8 @@ in
1615
shell = "/bin/sh";
1716
description = "Assistant (pi coding agent)";
1817

19-
# pi plus the tools it drives (git, gh, ripgrep, …) and a node runtime for
20-
# its TypeScript extensions / any node subprocesses. The account is
18+
# pi plus the tools it drives (git, gh, ripgrep, Chromium, …) and a node
19+
# runtime for its TypeScript extensions / any node subprocesses. The account is
2120
# unprivileged (no sudo, not nix-trusted), which caps what the agent can do
2221
# on the box; BYOK provider keys are supplied at runtime, not baked in.
2322
packages = with pkgs; [
@@ -30,6 +29,7 @@ in
3029
curl
3130
coreutils
3231
uv
32+
chromium
3333
];
3434
};
3535
users.groups.assistant.gid = 2001;

hosts/exedev/users/cptr.nix

Lines changed: 0 additions & 55 deletions
This file was deleted.

hosts/exedev/users/default.nix

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
{
33
imports = [
44
./nikita.nix
5-
./cptr.nix
65
./assistant.nix
76
];
87
}

modules/exedev/home.nix

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ in
4747
environment = mkOption {
4848
type = types.attrsOf types.str;
4949
default = { };
50-
description = "Per-user environment: exported by login shells; service modules that run as the user inject it too (cf. services.cptr).";
50+
description = "Per-user environment: exported by login shells; service modules that run as the user inject it too.";
5151
};
5252
files = mkOption {
5353
type = types.nullOr types.package;

modules/exedev/nix-ld.nix

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ in
5959
'';
6060

6161
# nix-ld reads these to find the real loader + libraries. image.env covers
62-
# PID1-descended processes (the cptr service); ssh scrubs the env, so
63-
# login shells re-export via /etc/profile (cf. profile.d/nix.sh).
62+
# PID1-descended processes; ssh scrubs the env, so login shells re-export
63+
# via /etc/profile (cf. profile.d/nix.sh).
6464
image.env = [
6565
"NIX_LD=${nix-ld-libraries}/share/nix-ld/lib/ld.so"
6666
"NIX_LD_LIBRARY_PATH=${nix-ld-libraries}/share/nix-ld/lib"

modules/exedev/services/chrome.nix

Lines changed: 0 additions & 101 deletions
This file was deleted.

modules/exedev/services/cptr.nix

Lines changed: 0 additions & 103 deletions
This file was deleted.

0 commit comments

Comments
 (0)