Skip to content

Commit 5a91378

Browse files
gorecodesclaude
andcommitted
feat(kernel): module/source cleanup, tab layout, Limine auto-update, beta label
- Add /lib/modules cleanup: scan orphaned module dirs, show size, checkbox-select and remove with approval (kernel_modules_clean) - Add /usr/src source cleanup: checkbox-select inactive source dirs, show size via du -sb, remove with approval (kernel_src_clean); protect active symlink target from deletion - Extend _kernel_status() to include modules list and size per src_dir - Replace 8 kernel accordions with 4-tab layout (Overview / Sources / Bootloader / Build) with two-column grids for desktop; Build tab shows a pip dot when wizard is active - Sources tab: /usr/src dirs full-width on top, Portage and kernel.org side-by-side below - Add Limine bootloader auto-update wizard step (kernel_limine_config_auto_update): clones running entry, substitutes new kver in paths, inserts before first linux entry, creates timestamped backup - Fix default-entry dropdown: use x-effect + selectedIndex to avoid Alpine CSP x-for value-attribute timing bug; @change reads selectedIndex so number (not full label text) is stored - Mark kernel section as beta: nav label, in-page notice banner, README Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent a7cbbf3 commit 5a91378

8 files changed

Lines changed: 3612 additions & 3 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,7 @@ Overlay add is disabled by default. To enable it, set `ARBOR_ENABLE_OVERLAY_ADD=
441441
- **Portage News** — reads GLEP 42 news items from the local tree, tracks read state per-item, shows an unread count badge on the dashboard
442442
- **GLSA advisories** — lists security advisories that affect the installed system via `glsa-check`, with severity badges, affected packages, and a quick-fix button
443443
- **Config snapshot** — export `/etc/portage/` (including the `make.profile` symlink) and world files as a zip; import with an automatic timestamped backup of the current config before applying
444+
- **Kernel management** *(beta)* — full lifecycle wizard for source kernels: install or update via Portage with pretend preview and autounmask support; download vanilla kernels directly from kernel.org; browse and clean up `/usr/src/linux-*` source directories; switch the active symlink; 7-step manual build wizard (kernel config with optional `.config` copy from another source, `make modules_install`, `make install`, dracut initramfs generation, `@module-rebuild`, Limine bootloader auto-update); manage bootloaders including a Limine config editor; clean up old `/boot` files and orphaned `/lib/modules` directories; reboot with double confirmation (type `REBOOT` + approval); wizard state persisted in the browser across page reloads and reconnects to in-progress build jobs after refresh. Functional but not yet fully stabilized — always keep a working fallback kernel in your bootloader.
444445
- **Jobs** — view active jobs, reopen live output, browse persisted history with log viewing, delete, and purge actions (stored in SQLite at `/var/lib/arbor/history.db`), and surface recovered orphaned/unknown jobs after daemon restart
445446

446447
## Screenshots

backend/arbor/action_security.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,20 @@
4040
"eclean_pretend",
4141
"snapshot_export",
4242
"disk_usage",
43+
"kernel_status",
44+
"kernel_available",
45+
"limine_config_read",
4346
}
4447

4548
_PRETEND_COMMANDS = {
4649
"emerge_pretend",
4750
"emerge_uninstall_pretend",
4851
"emerge_depclean_pretend",
4952
"revdep_rebuild_pretend",
53+
"kernel_install_pretend",
54+
"kernel_oldconfig",
55+
"kernel_switch_src",
56+
"kernel_copy_config",
5057
}
5158

5259
_APPROVAL_REQUIRED_COMMANDS = {
@@ -63,6 +70,21 @@
6370
"eclean_run",
6471
"snapshot_import",
6572
"revdep_rebuild",
73+
"kernel_install",
74+
"kernel_bootloader_update",
75+
"kernel_boot_clean",
76+
"kernel_modules_clean",
77+
"kernel_src_clean",
78+
"kernel_olddefconfig",
79+
"kernel_build",
80+
"kernel_modules_install",
81+
"kernel_make_install",
82+
"kernel_initramfs",
83+
"kernel_module_rebuild",
84+
"kernel_download_tarball",
85+
"kernel_reboot",
86+
"limine_config_write",
87+
"limine_config_auto_update",
6688
}
6789

6890
_TARGET_KEYS = ("atom", "name", "cfg_file", "job_id")

backend/arbor/authorization.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,28 @@ class StepUpRequiredError(PermissionError):
7575
"revdep_rebuild_pretend",
7676
"revdep_rebuild",
7777
"disk_usage",
78+
"kernel_status",
79+
"kernel_available",
80+
"kernel_install_pretend",
81+
"kernel_install",
82+
"kernel_bootloader_update",
83+
"kernel_boot_clean",
84+
"kernel_modules_clean",
85+
"kernel_src_clean",
86+
"kernel_oldconfig",
87+
"kernel_olddefconfig",
88+
"kernel_build",
89+
"kernel_initramfs",
90+
"kernel_module_rebuild",
91+
"kernel_download_tarball",
92+
"kernel_reboot",
93+
"kernel_switch_src",
94+
"kernel_copy_config",
95+
"kernel_modules_install",
96+
"kernel_make_install",
97+
"limine_config_read",
98+
"limine_config_write",
99+
"limine_config_auto_update",
78100
}
79101

80102
_ROLE_ALLOWED_CLASSES = {

0 commit comments

Comments
 (0)