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
This commit is contained in:
parent
26d3bd8266
commit
0ff3998c84
38 changed files with 2547 additions and 0 deletions
9
iso/airootfs/etc/calamares/modules/bootloader.conf
Normal file
9
iso/airootfs/etc/calamares/modules/bootloader.conf
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
efiBootloaderId: "BOS"
|
||||
installEFIFallback: true
|
||||
grubInstall: "grub-install"
|
||||
grubMkconfig: "grub-mkconfig"
|
||||
grubCfg: "/boot/grub/grub.cfg"
|
||||
grubProbe: "grub-probe"
|
||||
efiDirectory: "/boot/efi"
|
||||
kernel: ""
|
||||
5
iso/airootfs/etc/calamares/modules/finished.conf
Normal file
5
iso/airootfs/etc/calamares/modules/finished.conf
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
restartNowEnabled: true
|
||||
restartNowChecked: true
|
||||
restartNowCommand: "systemctl reboot"
|
||||
notifyOnFinished: false
|
||||
2
iso/airootfs/etc/calamares/modules/keyboard.conf
Normal file
2
iso/airootfs/etc/calamares/modules/keyboard.conf
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
xorgConfDir: "/etc/X11/xorg.conf.d"
|
||||
5
iso/airootfs/etc/calamares/modules/locale.conf
Normal file
5
iso/airootfs/etc/calamares/modules/locale.conf
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
region: "America"
|
||||
zone: "New_York"
|
||||
localeGenPath: "/etc/locale.gen"
|
||||
geoipUrl: "https://geoip.kde.org/v1/calamares"
|
||||
10
iso/airootfs/etc/calamares/modules/packages.conf
Normal file
10
iso/airootfs/etc/calamares/modules/packages.conf
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
backend: pacman
|
||||
|
||||
options:
|
||||
- update_db: true
|
||||
|
||||
operations:
|
||||
- try_install:
|
||||
- pipewire-pulse
|
||||
- pipewire-alsa
|
||||
29
iso/airootfs/etc/calamares/modules/partition.conf
Normal file
29
iso/airootfs/etc/calamares/modules/partition.conf
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
---
|
||||
efiSystemPartition: "/boot/efi"
|
||||
efiSystemPartitionSize: "512M"
|
||||
efiSystemPartitionName: "EFI"
|
||||
|
||||
defaultFileSystemType: "btrfs"
|
||||
|
||||
btrfsSubvolumes:
|
||||
- mountPoint: /
|
||||
subvolume: "@"
|
||||
mountOptions: "noatime,compress=zstd,space_cache=v2"
|
||||
- mountPoint: /home
|
||||
subvolume: "@home"
|
||||
mountOptions: "noatime,compress=zstd,space_cache=v2"
|
||||
- mountPoint: /.snapshots
|
||||
subvolume: "@snapshots"
|
||||
mountOptions: "noatime,compress=zstd,space_cache=v2"
|
||||
- mountPoint: /var/log
|
||||
subvolume: "@log"
|
||||
mountOptions: "noatime,compress=zstd,space_cache=v2"
|
||||
- mountPoint: /var/cache
|
||||
subvolume: "@cache"
|
||||
mountOptions: "noatime,compress=zstd,space_cache=v2"
|
||||
|
||||
userSwapChoices:
|
||||
- none
|
||||
- small
|
||||
- suspend
|
||||
- file
|
||||
3
iso/airootfs/etc/calamares/modules/shellprocess.conf
Normal file
3
iso/airootfs/etc/calamares/modules/shellprocess.conf
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
---
|
||||
script:
|
||||
- "-/usr/bin/bash /etc/calamares/post-install.sh"
|
||||
40
iso/airootfs/etc/calamares/modules/users.conf
Normal file
40
iso/airootfs/etc/calamares/modules/users.conf
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
---
|
||||
defaultGroups:
|
||||
- name: users
|
||||
must_exist: true
|
||||
system: false
|
||||
- name: lp
|
||||
must_exist: false
|
||||
system: true
|
||||
- name: video
|
||||
must_exist: false
|
||||
system: true
|
||||
- name: network
|
||||
must_exist: false
|
||||
system: true
|
||||
- name: storage
|
||||
must_exist: false
|
||||
system: true
|
||||
- name: wheel
|
||||
must_exist: false
|
||||
system: true
|
||||
- name: audio
|
||||
must_exist: false
|
||||
system: true
|
||||
- name: input
|
||||
must_exist: false
|
||||
system: true
|
||||
|
||||
autologinGroup: autologin
|
||||
doAutologin: false
|
||||
sudoersGroup: wheel
|
||||
setRootPassword: false
|
||||
doReusePassword: true
|
||||
|
||||
passwordRequirements:
|
||||
minLength: 6
|
||||
maxLength: -1
|
||||
libpwquality:
|
||||
- minlen=6
|
||||
|
||||
allowWeakPasswords: false
|
||||
11
iso/airootfs/etc/calamares/modules/welcome.conf
Normal file
11
iso/airootfs/etc/calamares/modules/welcome.conf
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
showSupportUrl: false
|
||||
showKnownIssuesUrl: false
|
||||
showReleaseNotesUrl: false
|
||||
|
||||
requirements:
|
||||
requiredStorage: 20
|
||||
requiredRam: 2.0
|
||||
checkInternet: true
|
||||
checkPower: true
|
||||
internetCheckUrl: "https://archlinux.org"
|
||||
36
iso/airootfs/etc/calamares/settings.conf
Normal file
36
iso/airootfs/etc/calamares/settings.conf
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
---
|
||||
modules-search: [local, /usr/lib/calamares/modules]
|
||||
|
||||
sequence:
|
||||
- show:
|
||||
- welcome
|
||||
- locale
|
||||
- keyboard
|
||||
- partition
|
||||
- users
|
||||
- summary
|
||||
- exec:
|
||||
- partition
|
||||
- mount
|
||||
- unpackfs
|
||||
- machineid
|
||||
- fstab
|
||||
- locale
|
||||
- keyboard
|
||||
- localecfg
|
||||
- users
|
||||
- networkcfg
|
||||
- hwclock
|
||||
- packages
|
||||
- bootloader
|
||||
- shellprocess
|
||||
- umount
|
||||
- show:
|
||||
- finished
|
||||
|
||||
branding: bos
|
||||
prompt-install: true
|
||||
dont-chroot: false
|
||||
oem-setup: false
|
||||
disable-cancel: false
|
||||
disable-cancel-during-exec: true
|
||||
84
iso/packages.x86_64
Normal file
84
iso/packages.x86_64
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
# Base system
|
||||
base
|
||||
base-devel
|
||||
linux
|
||||
linux-firmware
|
||||
linux-headers
|
||||
|
||||
# Bootloader + filesystem
|
||||
grub
|
||||
efibootmgr
|
||||
btrfs-progs
|
||||
dosfstools
|
||||
mtools
|
||||
|
||||
# Snapshot infrastructure
|
||||
snapper
|
||||
snap-pac
|
||||
grub-btrfs
|
||||
inotify-tools
|
||||
|
||||
# Wayland / Hyprland
|
||||
hyprland
|
||||
xdg-desktop-portal-hyprland
|
||||
xdg-utils
|
||||
xdg-user-dirs
|
||||
polkit
|
||||
polkit-gnome
|
||||
|
||||
# Audio
|
||||
pipewire
|
||||
wireplumber
|
||||
pipewire-pulse
|
||||
pipewire-alsa
|
||||
pipewire-jack
|
||||
|
||||
# Network
|
||||
networkmanager
|
||||
network-manager-applet
|
||||
iw
|
||||
iwd
|
||||
bluez
|
||||
bluez-utils
|
||||
|
||||
# GTK4 runtime
|
||||
gtk4
|
||||
gtk4-layer-shell
|
||||
librsvg
|
||||
libpulse
|
||||
|
||||
# Display
|
||||
wayland
|
||||
wayland-protocols
|
||||
wlroots
|
||||
|
||||
# Fonts
|
||||
noto-fonts
|
||||
noto-fonts-emoji
|
||||
ttf-jetbrains-mono
|
||||
|
||||
# Terminal
|
||||
foot
|
||||
|
||||
# File manager
|
||||
nautilus
|
||||
|
||||
# Installer
|
||||
calamares
|
||||
calamares-qt6
|
||||
|
||||
# Utilities
|
||||
sudo
|
||||
git
|
||||
curl
|
||||
wget
|
||||
unzip
|
||||
tar
|
||||
gzip
|
||||
which
|
||||
man-db
|
||||
man-pages
|
||||
less
|
||||
|
||||
# Dev tools (for bos-settings standalone install)
|
||||
rustup
|
||||
40
iso/post-install.sh
Normal file
40
iso/post-install.sh
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# --- Snapper root config ---
|
||||
snapper -c root create-config /
|
||||
sed -i 's/TIMELINE_CREATE="yes"/TIMELINE_CREATE="no"/' /etc/snapper/configs/root
|
||||
sed -i 's/NUMBER_CLEANUP="no"/NUMBER_CLEANUP="yes"/' /etc/snapper/configs/root
|
||||
sed -i 's/NUMBER_MIN_AGE="[^"]*"/NUMBER_MIN_AGE="1800"/' /etc/snapper/configs/root
|
||||
sed -i 's/NUMBER_LIMIT="[^"]*"/NUMBER_LIMIT="10"/' /etc/snapper/configs/root
|
||||
sed -i 's/NUMBER_LIMIT_IMPORTANT="[^"]*"/NUMBER_LIMIT_IMPORTANT="5"/' /etc/snapper/configs/root
|
||||
|
||||
# Allow main user to use snapper without sudo
|
||||
MAIN_USER=$(getent passwd 1000 | cut -d: -f1)
|
||||
sed -i "s/ALLOW_USERS=\"\"/ALLOW_USERS=\"$MAIN_USER\"/" /etc/snapper/configs/root
|
||||
|
||||
# --- System services ---
|
||||
systemctl enable NetworkManager
|
||||
systemctl enable bluetooth
|
||||
systemctl enable snapper-cleanup.timer
|
||||
systemctl enable grub-btrfs.path
|
||||
|
||||
# --- Bakery install ---
|
||||
if command -v bakery &>/dev/null; then
|
||||
sudo -u "$MAIN_USER" bakery install bread breadbar breadbox breadcrumbs breadpad bos-settings
|
||||
fi
|
||||
|
||||
# --- Deploy dotfiles (skip existing files) ---
|
||||
DOTFILES_SRC="/etc/skel/.config"
|
||||
DOTFILES_DEST="/home/$MAIN_USER/.config"
|
||||
|
||||
if [[ -d "$DOTFILES_SRC" ]]; then
|
||||
mkdir -p "$DOTFILES_DEST"
|
||||
cp -rn "$DOTFILES_SRC/." "$DOTFILES_DEST/"
|
||||
chown -R "$MAIN_USER:$MAIN_USER" "$DOTFILES_DEST"
|
||||
fi
|
||||
|
||||
# --- XDG user dirs ---
|
||||
sudo -u "$MAIN_USER" xdg-user-dirs-update
|
||||
|
||||
echo "BOS post-install complete. Reboot to start your system."
|
||||
24
iso/profiledef.sh
Normal file
24
iso/profiledef.sh
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
#!/usr/bin/env bash
|
||||
# shellcheck disable=SC2034
|
||||
|
||||
iso_name="bos"
|
||||
iso_label="BOS_$(date +%Y%m)"
|
||||
iso_publisher="Breadway"
|
||||
iso_application="Bread Operating System"
|
||||
iso_version="$(date +%Y.%m.%d)"
|
||||
install_dir="arch"
|
||||
buildmodes=('iso')
|
||||
bootmodes=(
|
||||
'bios.syslinux.mbr'
|
||||
'bios.syslinux.eltorito'
|
||||
'uefi-x64.systemd-boot.esp'
|
||||
'uefi-x64.systemd-boot.eltorito'
|
||||
)
|
||||
arch="x86_64"
|
||||
pacman_conf="pacman.conf"
|
||||
airootfs_image_type="squashfs"
|
||||
airootfs_image_tool_options=('-comp' 'xz' '-Xbcj' 'x86' '-b' '1M' '-Xdict-size' '1M')
|
||||
file_permissions=(
|
||||
["/etc/shadow"]="0:0:400"
|
||||
["/etc/calamares/post-install.sh"]="0:0:755"
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue