Commit graph

50 commits

Author SHA1 Message Date
Breadway
29a0070748 bos-settings: use the shared bread-theme stylesheet
Replace the hardcoded Nord palette (which ignored pywal and the rest of the
ecosystem entirely) with bread_theme::gtk::apply_shared() — bos-settings now
loads the same generated stylesheet as breadbar/breadbox/breadpad and keeps
only its own layout rules (.view-content padding). It recolours live with the
desktop. Bump gtk4 0.9 -> 0.11 / glib -> 0.22 to match the ecosystem.

Note: bread-theme dep pins tag v0.2.6 (cut at release); Cargo.lock to be
regenerated then.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 16:47:52 +08:00
Breadway
e471bfe83e docs+test: ecosystem matrix, keybinds, limitations, recovery, smoke test
All checks were successful
Mirror to GitHub / mirror (push) Successful in 5s
README: add a bread-ecosystem feature matrix, keyboard-shortcut reference,
a Known Limitations section (NVIDIA/Mesa, VM GPU accel, Secure Boot, btrfs
assumption), and a Recovery guide (snapshot rollback + GRUB/EFI repair from
the live ISO).

scripts/smoke-test.sh: read-only post-install validator — btrfs subvolumes,
snapper config, enabled services, bread bins on PATH, bos-settings, default
dotfiles, and the GRUB EFI artifacts. Exits non-zero on any failure.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 15:51:47 +08:00
Breadway
7e97b5c04e Add first-run welcome + keybind cheatsheet onboarding
New users get a one-time welcome window on first boot (self-gating marker,
skipped for the live/installer user) and a keybind cheatsheet on SUPER+/.
Also bind BOS Settings to SUPER+, (it had no launcher bind). Both popups
are floated/centred via window rules. Addresses the onboarding/
discoverability gap from external review.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 15:51:47 +08:00
Breadway
20af38f826 Fix dark theme, animation speed, kitty opacity; add README
All checks were successful
Mirror to GitHub / mirror (push) Successful in 6s
- libadwaita apps (nautilus, gnome-text-editor) rendered light because
  gsettings-desktop-schemas + dconf were missing, so the color-scheme
  prefer-dark autostart silently no-op'd. Add both packages.
- Replace Hyprland's slow default animations with the reference laptop's
  bezier curves + per-leaf speeds (hl.curve + hl.animation).
- kitty background_opacity 0.88 -> 0.6 to match the laptop; drop the
  macOS-only background_blur line (Hyprland supplies the blur).
- Add README.md documenting the actual image, build, and test flow.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 15:36:41 +08:00
Breadway
b85e0e32fb Use otf-font-awesome (desktop) instead of ttf-font-awesome
All checks were successful
Mirror to GitHub / mirror (push) Successful in 6s
ttf-font-awesome resolved to woff2-font-awesome, a web-only format that
desktop apps can't render glyphs from. otf-font-awesome is the installable
desktop OTF.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 14:51:50 +08:00
Breadway
7652d92b81 Complete the desktop: default apps, mDNS, firewall, zram, fonts
All checks were successful
Mirror to GitHub / mirror (push) Successful in 6s
Wire up features that were half-shipped and add sensible resilience
defaults:

- mimeapps.list in skel: images->loupe, A/V->vlc, text->gnome-text-editor,
  pdf/html->zen, archives->file-roller, dirs->nautilus (so opening a file
  from nautilus actually does something)
- avahi + nss-mdns: CUPS network-printer discovery + .local resolution
  (enable avahi-daemon; insert mdns_minimal into nsswitch hosts:)
- ufw: deny-incoming firewall, mDNS (5353/udp) allowed so discovery still
  works; enabled in post-install
- zram-generator: compressed RAM swap (half RAM capped 4 GiB, zstd)
- fwupd + reflector.timer: firmware updates and periodic mirror refresh
- fonts: ttf-liberation (Office/web metric compat), ttf-dejavu, font-awesome

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 14:47:06 +08:00
Breadway
1f53377914 bos-settings: full, non-destructive control of every bread* config
All checks were successful
Mirror to GitHub / mirror (push) Successful in 6s
Build and publish package / package (push) Successful in 1m35s
The bread/breadpad/breadcrumbs/breadbox views wrote invented schemas
(e.g. top-level log_level, [[profile]] name/ssids) that did not match the
apps' real TOML, so they showed empty and — worse — clobbered the real
config on Save, since the old config::save serialized only the keys it
modelled.

Rework the config layer onto toml_edit: parse each file into a
DocumentMut, mutate only the specific keys a view exposes, and write it
back preserving comments and any unmodelled keys (calendar password,
saved-network passwords, model paths). Unit-tested.

Add ui/widgets.rs (switch/entry/password/dropdown/spin/float/csv rows +
view scaffold + save button) bound to the shared document, then rewrite
the four views against the real schemas with far more coverage:

- bread: [daemon], [lua], [modules], all five [adapters.*] with their
  sub-options, [events], [notifications]
- breadpad: [settings], [model] + [model.ollama], [reminders], [calendar]
- breadcrumbs: [settings] (7 keys), [[networks]] editor, [profiles.*] editor
- breadbox: fixed to real [[contexts]] name/priority array editor

Goal: configure everything from the GUI rather than hand-editing TOML.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 14:26:49 +08:00
Breadway
c46e348d6a Fill desktop gaps: GUI apps, printing, media, Qt/portal integration
Add the packages a general desktop is expected to ship, chosen to stay
opinionated but average-user friendly:

- Editors: neovim (+ ripgrep, fd for a usable nvim/fzf experience)
- GUI basics: gnome-text-editor, gnome-calculator, file-roller, loupe
- Media: vlc (BOS had codecs but no player)
- Hardware: cups + cups-pk-helper + system-config-printer (enable
  cups.socket in post-install), blueman, seahorse
- Platform: qt5-wayland + qt6-wayland (native Wayland for Qt apps under
  the QT_QPA_PLATFORM=wayland we set), xdg-desktop-portal-gtk (file
  dialogs/screenshare for Flatpak/Electron/Zen), flatpak

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 14:26:49 +08:00
Breadway
31d0875791 Restore Bibata cursor now that it's published to [breadway]
All checks were successful
Mirror to GitHub / mirror (push) Successful in 5s
bibata-cursor-theme-bin 2.0.7-1 is now in the [breadway] repo, so add it
back to the package list and re-enable the Bibata-Modern-Ice cursor in the
Hyprland env, GTK settings, and gsettings autostart.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 13:03:11 +08:00
Breadway
3dd53f3fe6 Republish bibata-cursor-theme to [breadway] (AUR-only upstream)
All checks were successful
Mirror to GitHub / mirror (push) Successful in 6s
Build and publish bibata-cursor-theme / bibata (push) Successful in 34s
Bibata is the chosen BOS default cursor but is AUR-only, so mirror the
prebuilt -bin package into the [breadway] repo the same way calamares and
zen-browser-bin are. The workflow clones the triggering branch (not the
default branch) so it can build from iso-boot-fix, and uses the scoped
REGISTRY_TOKEN for publishing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 13:01:38 +08:00
Breadway
4a16e18cf3 Drop bibata-cursor-theme (AUR-only, not in repos)
Use Hyprland default cursor instead. All other theming changes from the
previous commit are unaffected.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 10:34:10 +08:00
Breadway
d484c8e933 Polish BOS: dark theme, shell QoL, icons, media, clipboard
All checks were successful
Mirror to GitHub / mirror (push) Successful in 5s
- Global dark theme: gnome-themes-extra (GTK3 Adwaita-dark), qt5ct/qt6ct
  with Fusion dark skel config, QT_QPA_PLATFORMTHEME=qt5ct env
- Icons/cursor: papirus-icon-theme (Papirus-Dark) + bibata-cursor-theme
  (Bibata-Modern-Ice), set via gsettings autostart + GTK settings.ini + env
- gnome-keyring: credential storage for browsers and apps
- gvfs + gvfs-mtp: nautilus trash, phone access, network shares
- zsh: default user shell (users.conf userShell=/bin/zsh) + skel .zshrc
  with eza/bat/fzf/zoxide aliases, git prompt, fzf history search
- Shell QoL packages: eza, bat, fzf, zoxide
- Media: gst-plugins-good/bad/ugly, pavucontrol
- cliphist: clipboard history daemon (autostart) + SUPER+SHIFT+V bind
- Fonts: noto-fonts-cjk, ttf-jetbrains-mono-nerd

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 10:31:18 +08:00
Breadway
a4af3aa938 Make Plymouth splash black to match the black-base theme
All checks were successful
Mirror to GitHub / mirror (push) Successful in 4s
The boot splash still used the old bread-brown background (#230b00)
after the rest of the theme moved to a black base (#0c0c0c). Switch
bos.script's background to black so the boot splash is consistent with
the wallpaper/pywal palette and breadbar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 09:17:10 +08:00
Breadway
9ea57d87c0 Make BOS a complete, bootable, themed desktop OS
Some checks failed
Mirror to GitHub / mirror (push) Failing after 7s
Install/boot reliability:
- Use native Calamares initcpiocfg/initcpio + explicit grub-install (nvram +
  --removable) in post-install; drop the flaky native bootloader/grubcfg modules.
- mount.conf: bind /proc /sys /dev (devtmpfs) /run + efivars into the chroot.
- bos-copy-kernel: stage kernel + write a stock mkinitcpio preset (replace the
  archiso preset). Per-service systemctl enable (fixes NetworkManager et al.
  silently not enabling due to the all-or-nothing grub-btrfs.path name).

System completeness:
- greetd + tuigreet graphical login; installed pacman.conf + working mirrorlist;
  base CLI tools (nano, micro, vim, htop, …); amd/intel-ucode; tlp + hypridle
  power management; systemd-timesyncd, fstrim.timer; wpa_supplicant wifi; Zen
  browser (republished to the [Breadway] repo).

Desktop + theming:
- Native Lua Hyprland config (hyprland.lua) with curated standard binds; kitty
  (blur) replaces foot; awww wallpaper + pywal palette (tamed to a black base
  with warm accents); GTK dark mode.
- Plymouth boot splash (bos theme: logo + spinner + status) via plymouthcfg.
- Varela Round font; Calamares bread-palette sidebar (logo/black-region polish
  still pending).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 09:09:34 +08:00
Breadway
2a866144f4 Fix breadd skel config schema; remove temp live diagnostic
All checks were successful
Mirror to GitHub / mirror (push) Successful in 6s
- breadd.toml: the shipped skel used a stale [adapters] schema
  (keyboard/mouse/touchpad/gamepad booleans); breadd 0.6.4 expects
  hyprland/udev/power/network/bluetooth structs. `bluetooth = true` collided
  with the real AdapterToggle field and aborted the daemon at startup.
- Drop the temporary bos-live-diag serial diagnostic now that the live-session
  failures are diagnosed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 19:38:06 +08:00
Breadway
122cd39cb1 TEMP: route live diag to serial via sudo (revert after)
All checks were successful
Mirror to GitHub / mirror (push) Successful in 10s
2026-06-14 19:17:46 +08:00
Breadway
356cc08dfe TEMP: live-session diagnostic to serial (revert after)
Some checks failed
Mirror to GitHub / mirror (push) Failing after 9s
2026-06-14 19:08:42 +08:00
Breadway
3a30cd004f Drop removed Hyprland dwindle:pseudotile option
All checks were successful
Mirror to GitHub / mirror (push) Successful in 11s
Current Hyprland no longer accepts dwindle:pseudotile (it's a dispatcher now),
which threw a non-fatal config-error banner on both the live and installed
desktop. preserve_split is still valid and kept.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 18:54:06 +08:00
Breadway
23e60dffe0 Bake bread ecosystem into the ISO + full live desktop; fix installer timeout
All checks were successful
Mirror to GitHub / mirror (push) Successful in 16s
- packages.x86_64: add bread, breadbar, breadbox, breadcrumbs, breadpad,
  bos-settings so they ship in the squashfs and reach the target via unpackfs
  (no network needed; install works fully offline)
- shellprocess.conf: set timeout 1800 — Calamares' 10s default was killing
  post-install.sh partway (the real cause of the empty /boot + ESP); the "-"
  prefix had been masking the kill as success
- bos-live-setup: live user now boots the real BOS desktop from /etc/skel
  (breadd + breadbar + breadbox) with the installer layered on top
  (auto-launch + Super+I), instead of an installer-only kiosk
- post-install.sh: drop the now-redundant networked `bakery install`

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 18:41:59 +08:00
Breadway
b9544d517b Fix unbootable installs: lay the kernel into the target and own GRUB
All checks were successful
Mirror to GitHub / mirror (push) Successful in 9s
archiso keeps vmlinuz/initramfs in the ISO boot dir, not the squashfs, so
unpackfs lays down an empty /boot. The chroot's mkinitcpio/grub-mkconfig had
nothing to work with and the ESP ended up empty (firmware found no bootloader).

- shellprocess@kernel (dontChroot) copies the live kernel into the target
  /boot before the bootloader step
- post-install.sh now runs grub-install itself, including a --removable pass
  so firmware with no NVRAM entry still boots via EFI/BOOT/BOOTX64.EFI

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 17:57:50 +08:00
Breadway
12dbec5f32 Add rsync and make the installed system bootable/clean
All checks were successful
Mirror to GitHub / mirror (push) Successful in 4s
unpackfs runs unsquashfs then rsync to copy the rootfs onto the target;
rsync was missing (error code 127), so add it alongside squashfs-tools.

unpackfs also copies the live filesystem verbatim, so the installed
system would inherit the archiso initramfs hooks (booting into the live
path) plus the live autologin/user/sudoers. Rework post-install.sh to run
in the target chroot as a resilient best-effort script that:
- removes the live autologin drop-in, bos-live-setup service/scripts and
  the liveuser sudoers file, and locks root (sudo model; the live medium
  left root passwordless),
- drops the archiso mkinitcpio config, installs the stock linux.preset and
  regenerates the initramfs, then refreshes grub.cfg,
- keeps the snapper/services/dotfiles setup, with the network-dependent
  bakery install made non-fatal so offline installs still complete.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 13:29:49 +08:00
Breadway
de4e3b09ba Add squashfs-tools so Calamares can unpack the rootfs
Some checks failed
Mirror to GitHub / mirror (push) Failing after 4s
Calamares' unpackfs module shells out to unsquashfs to extract
airootfs.sfs onto the target. squashfs-tools wasn't in the live package
list, so installs failed at the Finish step with "Failed to find
unsquashfs ... Bad unpackfs configuration". Add it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 13:15:27 +08:00
Breadway
2cbf46a836 Log the live Hyprland session to a user-writable path
All checks were successful
Mirror to GitHub / mirror (push) Successful in 4s
liveuser can't write /var/log, so the .bash_profile redirect
(Hyprland &>/var/log/hyprland-live.log) failed and bash aborted the line
without ever launching the compositor. Log to /tmp/hyprland-live.log,
which the live user can write.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 04:24:52 +08:00
Breadway
6c3c33e4ae Run the live session as an unprivileged user (Hyprland won't run as root)
All checks were successful
Mirror to GitHub / mirror (push) Successful in 4s
The live medium autologged root on tty1 and exec'd Hyprland, but Hyprland
refuses to start with superuser privileges ("launched with superuser
privileges, but the privileges check is not omitted") and exited before
even creating a log — leaving tty1 at a blank blinking cursor. (Boot,
switch-root, firstboot suppression and the bos login on other ttys were
all already working.)

Adopt the standard live-ISO pattern:
- bos-live-setup.service (oneshot, gated on the archisobasedir cmdline so
  it only runs on the live medium) creates an unprivileged `liveuser`,
  adds it to the usual hardware groups, clears its password, and drops in
  a minimal live Hyprland config that auto-launches the installer.
- tty1 autologin now targets liveuser instead of root.
- Calamares needs root, so bos-launch-calamares runs it via passwordless
  sudo (/etc/sudoers.d/99-bos-live) with the Wayland env preserved, so the
  root installer renders on the live user's compositor.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 04:13:10 +08:00
Breadway
a7b3f70930 Capture live-session Hyprland output and fall back to a shell
All checks were successful
Mirror to GitHub / mirror (push) Successful in 5s
Redirect the live autologin compositor's stdout/stderr to
/var/log/hyprland-live.log, and on exit drop to an interactive shell
showing the return code instead of letting the getty autologin
respawn-loop hide any startup failure behind a blank blinking cursor.
Makes a failed live boot diagnosable and leaves the medium usable.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 03:57:27 +08:00
Breadway
cbdeccd03e Let the live Hyprland session fall back to software rendering
All checks were successful
Mirror to GitHub / mirror (push) Successful in 4s
On GPU-less targets (VMs, headless, exotic hardware) wlroots refuses to
initialise without a hardware renderer, so the autologin session exec'd
Hyprland on tty1 and it died immediately — leaving a blinking cursor and
no desktop, while tty2 still showed the (correct) `bos` login.

Export WLR_RENDERER_ALLOW_SOFTWARE=1 before exec Hyprland in root's
.bash_profile so wlroots may use the llvmpipe software renderer when no
GPU renderer exists. On real hardware the hardware renderer is still
chosen; this is purely a fallback. Also set WLR_NO_HARDWARE_CURSORS=1 so
the pointer isn't invisible in VMs. Both must be real env vars (read at
wlroots init), not Hyprland `env=` lines, which apply too late.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 03:35:23 +08:00
Breadway
337d280f2b Add live-environment config so the ISO boots straight to the session
All checks were successful
Mirror to GitHub / mirror (push) Successful in 4s
The fixed initramfs boots into userspace, but systemd-firstboot
(ConditionFirstBoot=yes, --prompt-locale --prompt-keymap-auto
--prompt-timezone --prompt-root-password) then blocked the console
waiting for interactive input, and root was locked (no /etc/shadow),
so the live medium never reached the autologin getty + Hyprland.

Ship the same base files releng uses to satisfy firstboot and unlock
root for autologin:
- etc/locale.conf  (LANG=C.UTF-8)        -> no locale prompt
- etc/localtime    (-> UTC)              -> no timezone prompt
- etc/vconsole.conf (KEYMAP=us)          -> no keymap prompt
- etc/hostname     (bos)
- etc/shadow       (root unlocked, empty pw, perms 0400 via profiledef)
- etc/passwd       (root shell = bash; system users are appended by the
                    systemd-sysusers pacman hook during pacstrap)

The overlay is applied before pacstrap (mkarchiso _make_custom_airootfs
precedes _make_packages) and these are pacman backup files, so the
static passwd/shadow act as the base and package scriptlets add the
rest — no clobbering of polkitd/pipewire/etc. users.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 03:13:54 +08:00
Breadway
6135b2215d Add archiso initramfs hooks so the live ISO can switch root
All checks were successful
Mirror to GitHub / mirror (push) Successful in 9s
The profile shipped boot configs and the package list but lacked the
mkinitcpio archiso configuration, so mkarchiso built a stock initramfs
with no archiso hook. At boot the kernel honoured archisosearchuuid/
archisobasedir but nothing knew how to find and mount airootfs.sfs, so
switch-root failed and the live medium dropped to emergency mode.

Add the canonical releng pieces:
- airootfs/etc/mkinitcpio.conf.d/archiso.conf (HOOKS incl. archiso)
- airootfs/etc/mkinitcpio.d/linux.preset (builds initramfs-linux.img)
- mkinitcpio{,-archiso,-nfs-utils} in packages.x86_64

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 02:55:53 +08:00
Breadway
5a14288025 Add in-house Calamares package (AUR-only upstream)
All checks were successful
Mirror to GitHub / mirror (push) Successful in 4s
Build and publish calamares / calamares (push) Successful in 2m36s
Calamares isn't in Arch's official repos, so BOS vendors the PKGBUILD and
publishes a built package to the [breadway] repo. All its deps are official
(kpmcore, qt6-*, yaml-cpp). Also drop the nonexistent calamares-qt6 from the
package list (calamares 3.4.x is already Qt6).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 23:39:39 +08:00
Breadway
82c63bc4c4 Set [breadway] SigLevel=Never (Forgejo db key unavailable to pacman)
All checks were successful
Mirror to GitHub / mirror (push) Successful in 4s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 23:34:51 +08:00
Breadway
0d550a1bda Fix archiso bootmodes and add syslinux to package list
All checks were successful
Mirror to GitHub / mirror (push) Successful in 4s
mkarchiso validation: bios.syslinux.mbr/eltorito and uefi-x64.* bootmodes
are deprecated -> use bios.syslinux + uefi.systemd-boot. syslinux must be
in the package list for the BIOS bootmode; add memtest86+/edk2-shell too.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 23:32:25 +08:00
Breadway
ed0eea3cb1 Add bootloader configs to archiso profile (syslinux/efiboot/grub)
All checks were successful
Mirror to GitHub / mirror (push) Successful in 11s
The profile declared syslinux + systemd-boot bootmodes but lacked the
required config directories, so mkarchiso would fail. Added from the
official releng profile, rebranded to Bread OS; %PLACEHOLDER% tokens are
substituted by mkarchiso at build time.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 23:03:54 +08:00
Breadway
8e41d9fc2b Disable debug package so the main package publishes correctly
All checks were successful
Mirror to GitHub / mirror (push) Successful in 9s
Build and publish package / package (push) Successful in 2m10s
makepkg's debug split produced a -debug pkg; the upload's head -1 could
grab it instead of the main package. !debug yields a single package.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 23:00:48 +08:00
Breadway
30d94aa286 Remove accidentally-committed .claude agent state; gitignore it
All checks were successful
Mirror to GitHub / mirror (push) Successful in 9s
Build and publish package / package (push) Successful in 1m51s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 22:54:47 +08:00
Breadway
1bcd9588de Fix bos-settings compile errors and use REGISTRY_TOKEN for publishing
All checks were successful
Mirror to GitHub / mirror (push) Successful in 4s
bos-settings was scaffolded but never compiled. Fixes:
- main.rs: import gtk4::prelude (connect_activate/run)
- window.rs: disambiguate WidgetExt::display(); drop unused GBox import
- hyprland.rs: Label has no set_monospace -> use the monospace CSS class
- theme.rs: drop unused prelude import

Also switch package.yml to secrets.REGISTRY_TOKEN (scoped write:package),
since the auto Actions token is not authorized for the owner registry.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 22:54:27 +08:00
Breadway
12a8fa00bb Disable LTO in PKGBUILD (vendored ring/mlua static libs vs makepkg -flto)
All checks were successful
Mirror to GitHub / mirror (push) Successful in 10s
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 17:06:53 +08:00
Breadway
0ee174e16e Regenerate Cargo.lock for bos-settings
Some checks are pending
Mirror to GitHub / mirror (push) Waiting to run
The scaffolded lockfile was stale, so packaging builds with --locked failed.
Regenerated against current Cargo.toml (88 packages).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 16:59:30 +08:00
Breadway
eda2c44c48 Add Calamares branding images from bread logo
Some checks are pending
Mirror to GitHub / mirror (push) Waiting to run
- logo.png (productLogo/productIcon): rasterised from the bread logo, transparent
- languages.png (productWelcome): logo centred on a light Nord canvas
- logo.svg / bread_white.svg: source vector

Resolves the missing-branding-asset blocker so Calamares can render.
Colour scheme can be refined when final SVGs land.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 16:53:25 +08:00
Breadway
f98f21bbdd Source calamares from official extra, not [breadway]
All checks were successful
Mirror to GitHub / mirror (push) Successful in 5s
calamares and calamares-qt6 are in Arch's extra repo; no custom PKGBUILD
needed. Update packages.x86_64 and the pacman.conf comment accordingly.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 16:40:59 +08:00
Breadway
7ef51e8722 Clone from public URL, not GITHUB_SERVER_URL (resolves to localhost in runner)
All checks were successful
Mirror to GitHub / mirror (push) Successful in 4s
The Forgejo runner injects GITHUB_SERVER_URL as http://localhost:3002, which
is unreachable from inside the job container. Use the public URL instead.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 16:14:12 +08:00
Breadway
c259aa9e93 Rename mirror secret to MIRROR_TOKEN (GITHUB_ prefix is reserved)
Some checks failed
Mirror to GitHub / mirror (push) Failing after 2s
Forgejo/gitea rejects user secret names starting with GITHUB_.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 16:10:39 +08:00
Breadway
a2973b91eb Use Forgejo-prescribed pacman section name for the Arch registry
Some checks failed
Mirror to GitHub / mirror (push) Failing after 1s
Forgejo serves the repo db as {owner}.{group}.{domain}.db, and pacman
fetches "<section>.db" from Server — so the section name must match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 16:03:55 +08:00
Breadway
769b6283e0 Fix Forgejo workflows for the actual server capabilities
Some checks failed
Mirror to GitHub / mirror (push) Failing after 2s
- package.yml: use correct Arch registry upload (octet-stream + binary body
  + PUT /api/packages/Breadway/arch/os), drop --privileged, remove
  actions/checkout (archlinux image has no Node) in favour of a manual
  shell clone, use the built-in Actions token instead of a stored secret,
  and --nocheck (tests belong in CI, not packaging)
- mirror.yml: clone --mirror + explicit refs/heads + refs/tags push with
  --prune, instead of pushing refs/remotes pollution from a checkout
- pacman.conf: correct Server URL to the Forgejo Arch registry format

Requires only the GITHUB_MIRROR_TOKEN secret (GitHub PAT, repo scope) for
the mirror job; package publishing uses the automatic per-run token.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 16:01:50 +08:00
Breadway
2c6feb4ea0 Add Forgejo Actions workflows and fix [breadway] repo URL
Some checks failed
Mirror to GitHub / mirror (push) Failing after 2s
- .forgejo/workflows/mirror.yml: mirrors every push/tag to GitHub
- .forgejo/workflows/package.yml: builds PKGBUILD on tag and publishes
  bos-settings to the Forgejo Arch package registry (distrib=breadway)
- iso/pacman.conf: replace placeholder repo.breadway.dev with the actual
  Forgejo package registry URL

Requires two Forgejo secrets:
  GITHUB_MIRROR_TOKEN — GitHub PAT with repo push scope
  FORGEJO_TOKEN       — Forgejo token with package:write scope

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 11:42:00 +08:00
Breadway
6f148e9a06 Add bakery.toml and packaging/arch to match bread ecosystem
Mirrors the build/distribution pattern used by the bread project:
- bakery.toml describes bos-settings as a bakery-managed package
- packaging/arch/PKGBUILD builds and installs the binary via cargo
- packaging/arch/bos-settings.desktop for app launchers
- LICENSE (MIT) required by PKGBUILD

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 11:32:40 +08:00
Breadway
8682698402 Fix prod-readiness issues flagged in audit
- Fix XDG config dir logic in config/mod.rs (was double-nesting and had /home/user hardcode)
- Replace /home/user hardcodes in breadbar.rs and hyprland.rs with config::config_dir()
- Fix /home/user hardcode in packages.rs (uses /root fallback for .local/state path)
- Remove eprintln! from GTK callback in packages.rs (no stderr at runtime)
- Fix YAML parse error in branding.desc (missing space after sidebarTextHighlight key)
- Add .gitignore (Rust target/, ISO artifacts, editor/OS junk, secrets)
- Delete state.rs (dead code — never mod'd in main.rs)
- Add brightnessctl, grim, slurp to packages.x86_64 (used by keybinds)
- Rename can-you-begin-a-composed-beacon.md → DESIGN.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 11:29:53 +08:00
Breadway
c744e45c90
Merge pull request #1 from Breadway/scaffold/bos-initial
Scaffold/bos initial
2026-06-13 11:15:38 +08:00
Claude
d5913da277 Fix all issues from code/UX review
ISO structural:
- Move post-install.sh → airootfs/etc/calamares/ (it was never in the squashfs)
- Create airootfs/etc/skel/.config/ with all dotfiles (deploy path now works)
- Add iso/pacman.conf with [breadway] custom repo stub for calamares + bakery
- Add Calamares branding component (bos/branding.desc + show.qml)
- Add missing unpackfs.conf and mount.conf modules
- Add live-session autostart: getty autologin → bash_profile → Hyprland → calamares
- Add polkit rule for wheel-group snapper rollback (pkexec path)
- Remove wlroots from packages (bundled with Hyprland); add bakery to package list
- Fix modules-search path in settings.conf

Dotfiles:
- Rename dotfiles/hyprland/ → dotfiles/hypr/ (Hyprland reads ~/.config/hypr/)
- Fix deprecated shadow options: drop_shadow/shadow_range → shadow { } block

bos-settings Rust:
- Replace glib::MainContext::channel (removed in glib 0.19) with async_channel
- Stream bakery update output line-by-line instead of buffering all at once
- Fix zombie processes: per-package update buttons now wait() in a thread
- Fix sidebar/stack mismatch at startup: select snapshots row to match default view
- Replace deprecated MessageDialog with AlertDialog (GTK 4.10+) throughout
- Use pkexec for snapper rollback so polkit handles privilege escalation
- Add confirmation dialog before delete snapshot (was missing, rollback had one)
- Add refresh button + repopulate after delete in snapshots view
- Add "Saved" / "Error: …" status label to every config view save button
- Add "Remove" buttons to breadbox contexts and breadcrumbs profiles
- Remove hardcoded model string from breadpad defaults
- Drop unused state mod; fix config_dir HOME fallback; fix zombie in editor launches

https://claude.ai/code/session_01WszGHvCmxgcyTwNSkfLF9P
2026-06-12 13:45:00 +00:00
Claude
0ff3998c84 Scaffold BOS repo: dotfiles, ISO profile, and bos-settings GTK4 app
Implements all four components from the BOS spec:
- dotfiles/: default Hyprland, bread, breadbox, breadcrumbs configs
- iso/: archiso profiledef, package list, Calamares YAML modules, post-install.sh
- bos-settings/: Cargo workspace with GTK4 settings app (8 views: snapshots,
  packages, bread, breadbar, breadbox, breadcrumbs, breadpad, hyprland)

https://claude.ai/code/session_01WszGHvCmxgcyTwNSkfLF9P
2026-06-12 13:27:25 +00:00
Breadway
26d3bd8266 initial 2026-06-12 21:16:09 +08:00