Copies the live system to a local disk via unsquashfs — no debootstrap, no network required. Supports UEFI (GPT+EFI) and BIOS (MBR) layouts. ISO: - Add squashfs-tools, parted, grub-pc, grub-efi-amd64 to package list - New overlay script bee-install: partitions, formats, unsquashfs, writes fstab, runs grub-install+update-grub in chroot Go TUI: - Settings → Tools submenu (Install to disk, Check tools) - Disk picker screen: lists non-USB, non-boot disks via lsblk - Confirm screen warns about data loss - Runs with live progress tail of /tmp/bee-install.log - platform/install.go: ListInstallDisks, InstallToDisk, findLiveBootDevice Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package tui
|
|
|
|
import tea "github.com/charmbracelet/bubbletea"
|
|
|
|
func (m model) handleSettingsMenu() (tea.Model, tea.Cmd) {
|
|
switch m.cursor {
|
|
case 0: // Network
|
|
m.screen = screenNetwork
|
|
m.cursor = 0
|
|
return m, nil
|
|
case 1: // Services
|
|
m.busy = true
|
|
m.busyTitle = "Services"
|
|
return m, func() tea.Msg {
|
|
services, err := m.app.ListBeeServices()
|
|
return servicesMsg{services: services, err: err}
|
|
}
|
|
case 2: // Re-run audit
|
|
m.busy = true
|
|
m.busyTitle = "Re-run audit"
|
|
runtimeMode := m.runtimeMode
|
|
return m, func() tea.Msg {
|
|
result, err := m.app.RunAuditNow(runtimeMode)
|
|
return resultMsg{title: result.Title, body: result.Body, err: err, back: screenSettings}
|
|
}
|
|
case 3: // Run self-check
|
|
m.busy = true
|
|
m.busyTitle = "Self-check"
|
|
return m, func() tea.Msg {
|
|
result, err := m.app.RunRuntimePreflightResult()
|
|
return resultMsg{title: result.Title, body: result.Body, err: err, back: screenSettings}
|
|
}
|
|
case 4: // Runtime issues
|
|
m.busy = true
|
|
m.busyTitle = "Runtime issues"
|
|
return m, func() tea.Msg {
|
|
result := m.app.RuntimeHealthResult()
|
|
return resultMsg{title: result.Title, body: result.Body, back: screenSettings}
|
|
}
|
|
case 5: // Audit logs
|
|
m.busy = true
|
|
m.busyTitle = "Audit logs"
|
|
return m, func() tea.Msg {
|
|
result := m.app.AuditLogTailResult()
|
|
return resultMsg{title: result.Title, body: result.Body, back: screenSettings}
|
|
}
|
|
case 6: // Tools
|
|
m.screen = screenTools
|
|
m.cursor = 0
|
|
return m, nil
|
|
case 7: // Back
|
|
m.screen = screenMain
|
|
m.cursor = 0
|
|
return m, nil
|
|
}
|
|
return m, nil
|
|
}
|