Skip to content

Commit 9d454c2

Browse files
committed
feat: provision mise.toml config for sandbox devtools and simplify setup script
1 parent dd7eccb commit 9d454c2

5 files changed

Lines changed: 36 additions & 6 deletions

File tree

internal/scripts/mise.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[tools]
2+
node = { version = "lts" }
3+
4+
# Agents
5+
claude-code = { version = "latest" }
6+
codex = { version = "latest" }
7+
opencode = { version = "latest" }
8+
"npm:@mariozechner/pi-coding-agent" = { version = "latest" }
9+
10+
# Pi prerequisites
11+
fd = { version = "latest" }
12+
ripgrep = { version = "latest" }

internal/scripts/scripts.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ var RcLocal string
99
//go:embed setup-devtools.sh
1010
var SetupDevtools string
1111

12+
//go:embed mise.toml
13+
var MiseToml string
14+
1215
//go:embed setup-egress.sh
1316
var SetupEgress string
1417

internal/scripts/setup-devtools.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ apt-get install -y -qq build-essential git curl
1010
# Install mise and dev tools for the pixel user (runs as root, uses su -).
1111
su - pixel -c 'curl -fsSL https://mise.run | sh'
1212
su - pixel -c 'echo '\''eval "$(/home/pixel/.local/bin/mise activate bash)"'\'' >> /home/pixel/.bashrc'
13-
su - pixel -c '/home/pixel/.local/bin/mise use --global node@lts claude-code@latest codex@latest opencode@latest'
13+
su - pixel -c '/home/pixel/.local/bin/mise install'
1414

1515
touch /root/.devtools-provisioned
1616
echo "[$(date -Iseconds)] pixels devtools setup complete"

sandbox/incus/backend.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,13 +203,16 @@ func (i *Incus) provisionInstance(ctx context.Context, full string) error {
203203
if err := i.pushFile(full, "/root/.ssh/authorized_keys", keyData, 0o600); err != nil {
204204
return fmt.Errorf("writing root authorized_keys: %w", err)
205205
}
206-
if err := i.pushFileOwned(full, "/home/pixel/.ssh/authorized_keys", keyData, 0o600, 1000, 1000); err != nil {
206+
if err := i.pushFileOwned(full, "/home/pixel/.ssh/authorized_keys", keyData, 0o600, int64(i.cfg.uid), int64(i.cfg.gid)); err != nil {
207207
return fmt.Errorf("writing pixel authorized_keys: %w", err)
208208
}
209209
}
210210

211211
// Dev tools script.
212212
if i.cfg.devtools {
213+
if err := i.pushFileOwned(full, "/home/pixel/.config/mise/config.toml", []byte(scripts.MiseToml), 0o644, int64(i.cfg.uid), int64(i.cfg.gid)); err != nil {
214+
return fmt.Errorf("writing mise config: %w", err)
215+
}
213216
if err := i.pushFile(full, "/usr/local/bin/pixels-setup-devtools.sh", []byte(scripts.SetupDevtools), 0o755); err != nil {
214217
return fmt.Errorf("writing devtools script: %w", err)
215218
}

sandbox/truenas/client.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313

1414
"github.com/deevus/pixels/internal/egress"
1515
"github.com/deevus/pixels/internal/scripts"
16+
"github.com/deevus/pixels/sandbox/user"
1617
)
1718

1819
// Client wraps a truenas-go WebSocket client and its typed services.
@@ -191,12 +192,13 @@ func (c *Client) Provision(ctx context.Context, name string, opts ProvisionOpts)
191192
}); err != nil {
192193
return fmt.Errorf("writing authorized_keys: %w", err)
193194
}
194-
pixelUID := intPtr(1000)
195+
pixelUID := intPtr(user.UID)
196+
pixelGID := intPtr(user.GID)
195197
if err := c.Filesystem.WriteFile(ctx, rootfs+"/home/pixel/.ssh/authorized_keys", truenas.WriteFileParams{
196198
Content: keyData,
197199
Mode: 0o600,
198200
UID: pixelUID,
199-
GID: pixelUID,
201+
GID: pixelGID,
200202
}); err != nil {
201203
return fmt.Errorf("writing authorized_keys: %w", err)
202204
}
@@ -205,6 +207,15 @@ func (c *Client) Provision(ctx context.Context, name string, opts ProvisionOpts)
205207

206208
// Write dev tools setup script (executed later via zmx).
207209
if opts.DevTools {
210+
if err := c.Filesystem.WriteFile(ctx, rootfs+"/home/pixel/.config/mise/config.toml", truenas.WriteFileParams{
211+
Content: []byte(scripts.MiseToml),
212+
Mode: 0o644,
213+
UID: intPtr(user.UID),
214+
GID: intPtr(user.GID),
215+
}); err != nil {
216+
return fmt.Errorf("writing mise config: %w", err)
217+
}
218+
208219
if err := c.Filesystem.WriteFile(ctx, rootfs+"/usr/local/bin/pixels-setup-devtools.sh", truenas.WriteFileParams{
209220
Content: []byte(scripts.SetupDevtools),
210221
Mode: 0o755,
@@ -509,12 +520,13 @@ func (c *Client) WriteAuthorizedKey(ctx context.Context, name, sshPubKey string)
509520
return fmt.Errorf("writing root authorized_keys: %w", err)
510521
}
511522

512-
pixelUID := intPtr(1000)
523+
pixelUID := intPtr(user.UID)
524+
pixelGID := intPtr(user.GID)
513525
if err := c.Filesystem.WriteFile(ctx, rootfs+"/home/pixel/.ssh/authorized_keys", truenas.WriteFileParams{
514526
Content: keyData,
515527
Mode: 0o600,
516528
UID: pixelUID,
517-
GID: pixelUID,
529+
GID: pixelGID,
518530
}); err != nil {
519531
return fmt.Errorf("writing pixel authorized_keys: %w", err)
520532
}

0 commit comments

Comments
 (0)