Files
RedBear-OS/local/patches/build-system/003-config.patch
T
vasilito abc6e10a53 fix: Oracle round 7 — all kwin_wayland_wrapper references → redbear-compositor
Replaced in:
- config/wayland.toml (session launcher)
- redbear-kde-session (KDE session launcher)
- redbear-greeter-compositor (compositor selection)
- test-kde-session.sh (validation script)
- build-system/003-config.patch (durable reapply patch)
- GREETER-LOGIN-IMPLEMENTATION-PLAN.md
- DBUS-INTEGRATION-PLAN.md

Zero kwin_wayland_wrapper references remaining. Redbear-compositor
is the single Wayland compositor throughout the entire repo.
2026-05-01 01:37:27 +01:00

2703 lines
62 KiB
Diff

diff --git a/config/aarch64/ci.toml b/config/aarch64/ci.toml
index c44288a..1d184f3 100644
--- a/config/aarch64/ci.toml
+++ b/config/aarch64/ci.toml
@@ -25,6 +25,7 @@ prompt = false
acid = {}
acid-bins = {}
base = {}
+base-initfs = {}
bash = {}
bash-completion = {}
bootloader = {}
diff --git a/config/acid.toml b/config/acid.toml
index 139e032..6e4e82e 100644
--- a/config/acid.toml
+++ b/config/acid.toml
@@ -14,10 +14,16 @@ coreutils = {}
ion = {}
[[files]]
-path = "/usr/lib/init.d/10_acid"
+path = "/usr/lib/init.d/10_acid.service"
data = """
-requires_weak 00_base.target
-ion /usr/lib/run_acid.ion
+[unit]
+description = "Acid test runner"
+requires_weak = ["00_pcid-spawner.service"]
+
+[service]
+cmd = "ion"
+args = ["/usr/lib/run_acid.ion"]
+type = "oneshot_async"
"""
[[files]]
diff --git a/config/auto-test.toml b/config/auto-test.toml
index e6f3032..aac5505 100644
--- a/config/auto-test.toml
+++ b/config/auto-test.toml
@@ -13,10 +13,16 @@ filesystem_size = 1024
auto-test = {}
[[files]]
-path = "/usr/lib/init.d/30_console"
+path = "/usr/lib/init.d/30_console.service"
data = """
-requires_weak 10_net.target
-ion /usr/lib/run_tests.ion
+[unit]
+description = "Automated test runner"
+requires_weak = ["00_base.target"]
+
+[service]
+cmd = "ion"
+args = ["/usr/lib/run_tests.ion"]
+type = "oneshot"
"""
[[files]]
diff --git a/config/base.toml b/config/base.toml
index 516af8e..e7a04f3 100644
--- a/config/base.toml
+++ b/config/base.toml
@@ -10,6 +10,7 @@ prompt = false
[packages]
base = {}
+base-initfs = {}
bootloader = {}
kernel = {}
libgcc = {}
@@ -21,6 +22,30 @@ userutils = {}
uutils = {}
## Configuration files
+[[files]]
+path = "/usr/lib/init.d/00_base.service"
+data = """
+[unit]
+description = "Base environment setup (tmpdir)"
+
+[service]
+cmd = "ion"
+args = ["-c", "rm -rf /tmp; mkdir -m a=rwxt /tmp"]
+type = "oneshot"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/00_sudo.service"
+data = """
+[unit]
+description = "Sudo privilege daemon"
+
+[service]
+cmd = "sudo"
+args = ["--daemon"]
+type = "oneshot_async"
+"""
+
[[files]]
path = "/etc/login_schemes.toml"
data = """
@@ -61,13 +86,12 @@ schemes = [
"pty",
"sudo",
"audio",
- "orbital",
]
"""
[[files]]
path = "/etc/hostname"
-data = "redox"
+data = "redbear"
## Default net configuration (optimized for QEMU)
[[files]]
@@ -98,15 +122,16 @@ data = """
[[files]]
path = "/usr/lib/os-release"
data = """
-PRETTY_NAME="Redox OS 0.9.0"
-NAME="Redox OS"
-VERSION_ID="0.9.0"
-VERSION="0.9.0"
-ID="redox-os"
-
-HOME_URL="https://redox-os.org/"
-DOCUMENTATION_URL="https://redox-os.org/docs/"
-SUPPORT_URL="https://redox-os.org/community/"
+PRETTY_NAME="Red Bear OS 0.1.0"
+NAME="Red Bear OS"
+VERSION_ID="0.1.0"
+VERSION="0.1.0"
+ID="redbear-os"
+ID_LIKE="redox-os"
+
+HOME_URL="https://github.com/vasilito/Red-Bear-OS-3"
+DOCUMENTATION_URL="https://doc.redox-os.org/"
+SUPPORT_URL="https://github.com/vasilito/Red-Bear-OS-3/issues"
"""
# FIXME maybe add VARIANT= and VARIANT_ID= keys depending on the chosen configuration?
@@ -176,17 +201,18 @@ path = "/share"
data = "usr/share"
symlink = true
-## legacy orbital directories
[[files]]
path = "/ui"
data = "usr/share/ui"
symlink = true
+## legacy display font directory
[[files]]
path = "/usr/share/ui/fonts"
data = "/usr/share/fonts"
symlink = true
+## legacy display icon directory
[[files]]
path = "/usr/share/ui/icons"
data = "/usr/share/icons"
@@ -235,6 +261,47 @@ data = ""
directory = true
mode = 0o1777
+## Device file symlinks
+[[files]]
+path = "/dev/null"
+data = "/scheme/null"
+symlink = true
+
+[[files]]
+path = "/dev/random"
+data = "/scheme/rand"
+symlink = true
+
+[[files]]
+path = "/dev/urandom"
+data = "/scheme/rand"
+symlink = true
+
+[[files]]
+path = "/dev/zero"
+data = "/scheme/zero"
+symlink = true
+
+[[files]]
+path = "/dev/tty"
+data = "libc:tty"
+symlink = true
+
+[[files]]
+path = "/dev/stdin"
+data = "libc:stdin"
+symlink = true
+
+[[files]]
+path = "/dev/stdout"
+data = "libc:stdout"
+symlink = true
+
+[[files]]
+path = "/dev/stderr"
+data = "libc:stderr"
+symlink = true
+
# User settings
[users.root]
password = "password"
diff --git a/config/desktop-contain.toml b/config/desktop-contain.toml
deleted file mode 100644
index a67a148..0000000
--- a/config/desktop-contain.toml
+++ /dev/null
@@ -1,42 +0,0 @@
-# Desktop configuration using the Contain sandbox
-
-include = ["desktop.toml"]
-
-# Override the default settings here
-
-# General settings
-[general]
-# Filesystem size in MiB
-# filesystem_size = 1024
-
-# Package settings
-[packages]
-# example = {}
-
-# Override orbital init to use contain_orblogin
-[[files]]
-path = "/usr/lib/init.d/20_orbital"
-data = """
-requires_weak 10_net.target 20_audiod.service
-nowait VT=3 orbital contain_orblogin launcher
-"""
-
-# Override console init to use contain
-[[files]]
-path = "/usr/lib/init.d/30_console"
-data = """
-requires_weak 20_orbital
-nowait getty --contain 2
-nowait getty --contain /scheme/debug/no-preserve -J
-"""
-
-[[files]]
-path = "/etc/contain.toml"
-data = """
-pass_schemes = ["rand", "null", "tcp", "udp", "thisproc", "pty", "orbital", "display.vesa"]
-sandbox_schemes = ["file"]
-files = ["file:/dev/null"]
-rofiles = ["file:/etc/passwd", "file:/etc/hostname", "file:/etc/localtime"]
-dirs = ["file:/tmp"]
-rodirs = ["file:/bin", "file:/ui"]
-"""
diff --git a/config/desktop-minimal.toml b/config/desktop-minimal.toml
index 8ac8f36..7aa8735 100644
--- a/config/desktop-minimal.toml
+++ b/config/desktop-minimal.toml
@@ -9,23 +9,55 @@ filesystem_size = 256
# Package settings
[packages]
-orbdata = {}
-orbital = {}
-orbterm = {}
-orbutils = {}
+orbdata = "ignore"
+orbital = "ignore"
+orbterm = "ignore"
+orbutils = "ignore"
[[files]]
-path = "/usr/lib/init.d/20_orbital"
+path = "/usr/lib/init.d/20_display.service"
data = """
-requires_weak 10_net.target 20_audiod.service
-nowait VT=3 orbital orblogin launcher
+[unit]
+description = "Display setup"
+requires_weak = ["00_base.target"]
+
+[service]
+cmd = "ion"
+args = ["-c", "true"]
+envs = { VT = "3" }
+type = "oneshot_async"
"""
-# Override console config to not switch to VT 2
+# Override: do not activate VT 2 (desktop uses VT 3)
+[[files]]
+path = "/usr/lib/init.d/29_activate_console.service"
+data = ""
+
+# Override console config to depend on display instead of VT activation
[[files]]
-path = "/usr/lib/init.d/30_console"
+path = "/usr/lib/init.d/30_console.service"
data = """
-requires_weak 20_orbital
-nowait getty 2
-nowait getty /scheme/debug/no-preserve -J
+[unit]
+description = "Console terminals"
+requires_weak = ["20_display.service"]
+
+[service]
+cmd = "getty"
+args = ["2"]
+type = "oneshot_async"
+respawn = true
+"""
+
+[[files]]
+path = "/usr/lib/init.d/31_debug_console.service"
+data = """
+[unit]
+description = "Debug console"
+requires_weak = ["30_console.service"]
+
+[service]
+cmd = "getty"
+args = ["/scheme/debug/no-preserve", "-J"]
+type = "oneshot_async"
+respawn = true
"""
diff --git a/config/desktop.toml b/config/desktop.toml
index c6c92c1..59ae330 100644
--- a/config/desktop.toml
+++ b/config/desktop.toml
@@ -9,11 +9,12 @@ filesystem_size = 650
# Package settings
[packages]
-cosmic-edit = {}
-cosmic-files = {}
-cosmic-icons = {}
-cosmic-term = {}
+cosmic-edit = "ignore"
+cosmic-files = "ignore"
+cosmic-icons = "ignore"
+cosmic-term = "ignore"
dejavu = {}
+ext4d = {}
freefont = {}
hicolor-icon-theme = {}
installer-gui = {}
diff --git a/config/i586/ci.toml b/config/i586/ci.toml
index d333d0f..3432fba 100644
--- a/config/i586/ci.toml
+++ b/config/i586/ci.toml
@@ -25,6 +25,7 @@ prompt = false
# acid = {} # rust require dynamic linking
acid-bins = {}
base = {}
+base-initfs = {}
bash = {}
bash-completion = {}
bootloader = {}
diff --git a/config/i586/demo.toml b/config/i586/demo.toml
index 4230fc1..e4568ae 100644
--- a/config/i586/demo.toml
+++ b/config/i586/demo.toml
@@ -26,22 +26,23 @@ path = "/home/user/Welcome.txt"
data = """
##############################################################################
# #
-# Welcome to Redox! #
+# Welcome to Red Bear OS! #
# #
-# Redox is an operating system written in Rust, a language with focus #
-# on safety and high performance. Redox, following the microkernel design, #
-# aims to be secure, usable, and free. Redox is inspired by previous kernels #
-# and operating systems, such as SeL4, MINIX, Plan 9, and BSD. #
+# Red Bear OS (RBOS) is a derivative of Redox, an operating system written #
+# in Rust, a language with focus on safety and high performance. Redox, #
+# following the microkernel design, aims to be secure, usable, and free. #
+# Redox is inspired by previous kernels and operating systems, such as #
+# SeL4, MINIX, Plan 9, and BSD. #
# #
-# Redox _is not_ just a kernel, it's a full-featured Operating System, #
+# Red Bear OS _is not_ just a kernel, it's a full-featured Operating System, #
# providing packages (memory allocator, file system, display manager, core #
# utilities, etc.) that together make up a functional and convenient #
# operating system. You can loosely think of it as the GNU or BSD ecosystem, #
# but in a memory safe language and with modern technology. #
# #
-# The website can be found at https://www.redox-os.org. #
+# The website can be found at https://github.com/vasilito/Red-Bear-OS-3. #
# #
-# For things to try on Redox, please see #
+# For things to try on Red Bear OS, please see #
# https://doc.redox-os.org/book/ch02-06-trying-out-redox.html #
# #
##############################################################################
diff --git a/config/minimal.toml b/config/minimal.toml
index 7ccb60d..368e67b 100644
--- a/config/minimal.toml
+++ b/config/minimal.toml
@@ -17,10 +17,42 @@ pkgutils = {}
kibi = {}
[[files]]
-path = "/usr/lib/init.d/30_console"
+path = "/usr/lib/init.d/29_activate_console.service"
data = """
-requires_weak 10_net.target
-inputd -A 2
-nowait getty 2
-nowait getty /scheme/debug/no-preserve -J
+[unit]
+description = "Activate console VT"
+requires_weak = ["00_base.target"]
+
+[service]
+cmd = "inputd"
+args = ["-A", "2"]
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/30_console.service"
+data = """
+[unit]
+description = "Console terminals"
+requires_weak = ["29_activate_console.service"]
+
+[service]
+cmd = "getty"
+args = ["2"]
+type = "oneshot_async"
+respawn = true
+"""
+
+[[files]]
+path = "/usr/lib/init.d/31_debug_console.service"
+data = """
+[unit]
+description = "Debug console"
+requires_weak = ["29_activate_console.service"]
+
+[service]
+cmd = "getty"
+args = ["/scheme/debug/no-preserve", "-J"]
+type = "oneshot_async"
+respawn = true
"""
diff --git a/config/os-test.toml b/config/os-test.toml
index 048e31f..c7ebbc9 100644
--- a/config/os-test.toml
+++ b/config/os-test.toml
@@ -14,9 +14,15 @@ prompt = false
os-test-bins = {} # Provides source and cross-compiled binaries
[[files]]
-path = "/usr/lib/init.d/30_console"
+path = "/usr/lib/init.d/30_console.service"
data = """
-requires_weak 10_net.target
-RUST_BACKTRACE=full os-test-runner
-shutdown
+[unit]
+description = "OS test runner"
+requires_weak = ["00_base.target"]
+
+[service]
+cmd = "ion"
+args = ["-c", "os-test-runner; shutdown"]
+envs = { RUST_BACKTRACE = "full" }
+type = "oneshot"
"""
diff --git a/config/redbear-bluetooth-experimental.toml b/config/redbear-bluetooth-experimental.toml
new file mode 100644
index 0000000..fd8cfd0
--- /dev/null
+++ b/config/redbear-bluetooth-experimental.toml
@@ -0,0 +1,17 @@
+# Red Bear OS Bluetooth Experimental Profile
+#
+# Standalone build target for the first bounded Bluetooth slice.
+#
+# This profile extends the existing minimal Red Bear baseline but keeps Bluetooth wiring isolated to
+# this profile instead of leaking it into the shared device-service fragments used by all images.
+# The current slice is explicit-startup, USB-attached, BLE-first, and intentionally not wired to
+# USB-class autospawn yet.
+
+include = ["redbear-minimal.toml", "redbear-bluetooth-services.toml"]
+
+[general]
+filesystem_size = 2048
+
+[packages]
+redbear-btusb = {}
+redbear-btctl = {}
diff --git a/config/redbear-bluetooth-services.toml b/config/redbear-bluetooth-services.toml
new file mode 100644
index 0000000..29408c4
--- /dev/null
+++ b/config/redbear-bluetooth-services.toml
@@ -0,0 +1,17 @@
+# Red Bear OS Bluetooth experimental service wiring
+#
+# Kept in a dedicated included fragment so the Bluetooth profile can inject
+# bounded runtime files and service units without relying on profile-local
+# [[files]] behavior.
+
+[[files]]
+path = "/var/lib/bluetooth"
+data = ""
+directory = true
+mode = 0o755
+
+[[files]]
+path = "/var/run/redbear-btusb"
+data = ""
+directory = true
+mode = 0o755
diff --git a/config/redbear-device-services.toml b/config/redbear-device-services.toml
new file mode 100644
index 0000000..98d546d
--- /dev/null
+++ b/config/redbear-device-services.toml
@@ -0,0 +1,128 @@
+# Red Bear OS shared device-service wiring
+#
+# Shared by profiles that ship the firmware/input/Wi-Fi control compatibility stack.
+
+[packages]
+redbear-quirks = {}
+pciids = {}
+fatd = {}
+
+[[files]]
+path = "/usr/lib/init.d/12_boot-late.target"
+data = """
+[unit]
+description = "Late boot services target"
+requires_weak = [
+ "00_base.target",
+]
+"""
+
+[[files]]
+path = "/lib/firmware"
+data = ""
+directory = true
+mode = 0o755
+
+[[files]]
+path = "/usr/bin/usbctl"
+data = "/usr/lib/drivers/usbctl"
+symlink = true
+
+[[files]]
+path = "/lib/pcid.d/intel_gpu.toml"
+data = """
+# PCID configuration for Intel GPU auto-detection
+[[drivers]]
+name = "Intel GPU (VGA compatible)"
+class = 0x03
+vendor = 0x8086
+subclass = 0x00
+command = ["redox-drm"]
+
+[[drivers]]
+name = "Intel GPU (3D controller)"
+class = 0x03
+vendor = 0x8086
+subclass = 0x02
+command = ["redox-drm"]
+"""
+
+[[files]]
+path = "/lib/pcid.d/amd_gpu.toml"
+data = """
+# PCID configuration for AMD GPU auto-detection
+[[drivers]]
+name = "AMD GPU (VGA compatible)"
+class = 0x03
+vendor = 0x1002
+subclass = 0x00
+command = ["redox-drm"]
+
+[[drivers]]
+name = "AMD GPU (3D controller)"
+class = 0x03
+vendor = 0x1002
+subclass = 0x02
+command = ["redox-drm"]
+"""
+
+[[files]]
+path = "/usr/lib/init.d/05_firmware-loader.service"
+data = """
+[unit]
+description = "Firmware loading scheme"
+requires_weak = [
+ "12_boot-late.target",
+ "00_pcid-spawner.service",
+]
+
+[service]
+cmd = "firmware-loader"
+type = { scheme = "firmware" }
+"""
+
+[[files]]
+path = "/usr/lib/init.d/11_udev.service"
+data = """
+[unit]
+description = "udev compatibility shim"
+requires_weak = [
+ "12_boot-late.target",
+ "00_pcid-spawner.service",
+]
+
+[service]
+cmd = "udev-shim"
+type = { scheme = "udev" }
+"""
+
+[[files]]
+path = "/usr/lib/init.d/11_wifictl.service"
+data = """
+[unit]
+description = "Wi-Fi control daemon"
+requires_weak = [
+ "12_boot-late.target",
+ "00_pcid-spawner.service",
+ "05_firmware-loader.service",
+]
+
+[service]
+cmd = "redbear-wifictl"
+type = { scheme = "wifictl" }
+"""
+
+[[files]]
+path = "/usr/lib/init.d/10_evdevd.service"
+data = """
+[unit]
+description = "Evdev input daemon"
+requires_weak = [
+ "12_boot-late.target",
+ "00_pcid-spawner.service",
+]
+
+[service]
+cmd = "evdevd"
+type = "oneshot_async"
+"""
diff --git a/config/redbear-full.toml b/config/redbear-full.toml
new file mode 100644
index 0000000..9aea15b
--- /dev/null
+++ b/config/redbear-full.toml
@@ -0,0 +1,349 @@
+# Red Bear OS Full Configuration
+# Desktop/graphics ISO for bare metal and QEMU.
+#
+# Build: make live CONFIG_NAME=redbear-full
+# QEMU: make all CONFIG_NAME=redbear-full && make qemu
+#
+# Extends redbear-mini with the full desktop/graphics stack:
+# Wayland, Qt6, KF6, KWin, Mesa, DRM drivers, firmware, greeter.
+
+include = ["redbear-mini.toml"]
+
+[general]
+filesystem_size = 4096
+efi_partition_size = 16
+
+[users.messagebus]
+uid = 100
+gid = 100
+name = "messagebus"
+home = "/nonexistent"
+shell = "/usr/bin/ion"
+
+[packages]
+# Firmware loading
+redbear-firmware = {}
+firmware-loader = {}
+
+# GPU/graphics stack
+redox-drm = {}
+mesa = {}
+libdrm = {}
+
+# Wayland protocol
+libwayland = {}
+wayland-protocols = {}
+
+# Keyboard/input
+libxkbcommon = {}
+xkeyboard-config = {}
+libevdev = {}
+libinput = {}
+
+# Seat management
+seatd = {}
+
+# Qt6 stack
+qtbase = {}
+qtdeclarative = {}
+qtsvg = {}
+qtwayland = {}
+qt6-wayland-smoke = {}
+
+# KF6 Frameworks
+kf6-extra-cmake-modules = {}
+kf6-kcoreaddons = {}
+kf6-kconfig = {}
+kf6-ki18n = {}
+kf6-kcolorscheme = {}
+kf6-kauth = {}
+kf6-kwindowsystem = {}
+kf6-knotifications = {}
+kf6-kconfigwidgets = {}
+kf6-kcrash = {}
+kf6-kdbusaddons = {}
+kf6-kglobalaccel = {}
+kf6-kservice = {}
+kf6-kpackage = {}
+kf6-kiconthemes = {}
+kirigami = {}
+kf6-kio = {}
+kf6-kdeclarative = {}
+kf6-kcmutils = {}
+kf6-kwayland = {}
+kdecoration = {}
+kf6-kded6 = {}
+kglobalacceld = {}
+
+# KWin Wayland compositor
+kwin = {}
+
+# Greeter/login stack
+redbear-authd = {}
+redbear-session-launch = {}
+redbear-greeter = {}
+
+# Core Red Bear umbrella package
+redbear-meta = {}
+
+# Desktop fonts and icons
+dejavu = {}
+freefont = {}
+hicolor-icon-theme = {}
+pop-icon-theme = {}
+
+# Suppress legacy desktop packages
+orbdata = "ignore"
+orbital = "ignore"
+orbterm = "ignore"
+orbutils = "ignore"
+cosmic-edit = "ignore"
+cosmic-files = "ignore"
+cosmic-icons = "ignore"
+cosmic-term = "ignore"
+
+[[files]]
+path = "/lib/firmware/amdgpu"
+data = ""
+directory = true
+mode = 0o755
+
+[[files]]
+path = "/usr/lib/fonts"
+data = "/usr/share/fonts"
+symlink = true
+
+[[files]]
+path = "/usr/lib/init.d/05_boot-essential.target"
+data = """
+[unit]
+description = "Boot essential services target"
+requires_weak = [
+ "00_base.target",
+]
+"""
+
+[[files]]
+path = "/usr/lib/init.d/13_iommu.service"
+data = """
+[unit]
+description = "IOMMU DMA remapping daemon"
+requires_weak = [
+ "12_boot-late.target",
+ "00_pcid-spawner.service",
+]
+
+[service]
+cmd = "/usr/bin/iommu"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/12_dbus.service"
+data = """
+[unit]
+description = "D-Bus system bus"
+requires_weak = [
+ "12_boot-late.target",
+]
+
+[service]
+cmd = "ion"
+args = [
+ "-c",
+ "mkdir -p /var/lib/dbus /run/dbus; rm -f /run/dbus/pid; dbus-uuidgen --ensure; dbus-daemon --system",
+]
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/13_redbear-sessiond.service"
+data = """
+[unit]
+description = "Red Bear session broker (org.freedesktop.login1)"
+requires_weak = [
+ "12_dbus.service",
+]
+
+[service]
+cmd = "redbear-sessiond"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/13_seatd.service"
+data = """
+[unit]
+description = "seatd seat management daemon"
+requires_weak = [
+ "12_dbus.service",
+ "13_redbear-sessiond.service",
+]
+
+[service]
+cmd = "/usr/bin/seatd"
+args = ["-l", "info"]
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/14_redbear-upower.service"
+data = """
+[unit]
+description = "UPower D-Bus service (org.freedesktop.UPower)"
+requires_weak = [
+ "12_dbus.service",
+]
+
+[service]
+cmd = "redbear-upower"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/14_redbear-udisks.service"
+data = """
+[unit]
+description = "UDisks2 D-Bus service (org.freedesktop.UDisks2)"
+requires_weak = [
+ "12_dbus.service",
+]
+
+[service]
+cmd = "redbear-udisks"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/14_redbear-polkit.service"
+data = """
+[unit]
+description = "PolicyKit1 D-Bus service (org.freedesktop.PolicyKit1)"
+requires_weak = [
+ "12_dbus.service",
+]
+
+[service]
+cmd = "redbear-polkit"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/19_redbear-authd.service"
+data = """
+[unit]
+description = "Red Bear authentication daemon"
+requires_weak = [
+ "12_dbus.service",
+]
+
+[service]
+cmd = "/usr/bin/redbear-authd"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/20_greeter.service"
+data = """
+[unit]
+description = "Red Bear greeter service"
+requires_weak = [
+ "12_dbus.service",
+ "13_redbear-sessiond.service",
+ "13_seatd.service",
+ "19_redbear-authd.service",
+]
+
+[service]
+cmd = "/usr/bin/redbear-greeterd"
+envs = { VT = "3", REDBEAR_GREETER_USER = "greeter" }
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/29_activate_console.service"
+data = """
+[unit]
+description = "Activate fallback console VT"
+requires_weak = [
+ "05_boot-essential.target",
+]
+
+[service]
+cmd = "inputd"
+args = ["-A", "2"]
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/30_console.service"
+data = """
+[unit]
+description = "Console terminals"
+requires_weak = [
+ "29_activate_console.service",
+]
+
+[service]
+cmd = "getty"
+args = ["2"]
+type = "oneshot_async"
+respawn = true
+"""
+
+[[files]]
+path = "/usr/lib/init.d/31_debug_console.service"
+data = """
+[unit]
+description = "Debug console"
+requires_weak = [
+ "29_activate_console.service",
+]
+
+[service]
+cmd = "getty"
+args = ["/scheme/debug/no-preserve", "-J"]
+type = "oneshot_async"
+respawn = true
+"""
+
+[users.greeter]
+password = ""
+uid = 101
+gid = 101
+name = "greeter"
+home = "/nonexistent"
+shell = "/usr/bin/ion"
+
+[groups.greeter]
+gid = 101
+members = ["greeter"]
+
+[[files]]
+path = "/etc/pcid.d/ihdgd.toml"
+data = """
+[[drivers]]
+name = "Intel GPU (VGA compatible)"
+class = 0x03
+vendor = 0x8086
+subclass = 0x00
+command = ["redox-drm"]
+
+[[drivers]]
+name = "Intel GPU (3D controller)"
+class = 0x03
+vendor = 0x8086
+subclass = 0x02
+command = ["redox-drm"]
+"""
+
+[[files]]
+path = "/etc/pcid.d/virtio-gpud.toml"
+data = """
+[[drivers]]
+name = "VirtIO GPU"
+class = 0x03
+vendor = 0x1af4
+subclass = 0x00
+command = ["redox-drm"]
+"""
diff --git a/config/redbear-greeter-services.toml b/config/redbear-greeter-services.toml
new file mode 100644
index 0000000..d20b0e2
--- /dev/null
+++ b/config/redbear-greeter-services.toml
@@ -0,0 +1,126 @@
+# Red Bear greeter/login service wiring
+#
+# This fragment is intended to be included by the active desktop/graphics target.
+
+[[files]]
+path = "/usr/lib/init.d/05_boot-essential.target"
+data = """
+[unit]
+description = "Boot essential services target"
+requires_weak = [
+ "00_base.target",
+]
+"""
+
+[users.greeter]
+password = ""
+uid = 101
+gid = 101
+name = "greeter"
+home = "/nonexistent"
+shell = "/usr/bin/ion"
+
+[groups.greeter]
+gid = 101
+members = ["greeter"]
+
+[packages]
+redbear-authd = {}
+redbear-session-launch = {}
+redbear-greeter = {}
+
+[[files]]
+path = "/usr/lib/init.d/19_redbear-authd.service"
+data = """
+[unit]
+description = "Red Bear authentication daemon"
+requires_weak = [
+ "12_dbus.service",
+]
+
+[service]
+cmd = "ion"
+args = [
+ "-c",
+ "redbear-authd",
+]
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/20_display.service"
+data = """
+[unit]
+description = "Compositor proof (Phase 2: KWin virtual + Qt6 smoke + 60s survival)"
+requires_weak = [
+ "12_dbus.service",
+ "13_redbear-sessiond.service",
+ "13_seatd.service",
+]
+
+[service]
+cmd = "redbear-validation-session"
+envs = { VT = "3" }
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/20_greeter.service"
+data = """
+[unit]
+description = "Red Bear greeter service (disabled for Phase 2 compositor proof; re-enable for Phase 3 user sessions)"
+requires_weak = [
+]
+
+[service]
+cmd = "ion"
+args = ["-c", "true"]
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/30_console.service"
+data = """
+[unit]
+description = "Console terminals"
+requires_weak = [
+ "29_activate_console.service",
+]
+
+[service]
+cmd = "getty"
+args = ["2"]
+type = "oneshot_async"
+respawn = true
+"""
+
+[[files]]
+path = "/usr/lib/init.d/29_activate_console.service"
+data = """
+[unit]
+description = "Activate fallback console VT"
+requires_weak = [
+ "05_boot-essential.target",
+]
+
+[service]
+cmd = "inputd"
+args = ["-A", "2"]
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/31_debug_console.service"
+data = """
+[unit]
+description = "Debug console"
+requires_weak = [
+ "29_activate_console.service",
+]
+
+[service]
+cmd = "getty"
+args = ["/scheme/debug/no-preserve", "-J"]
+type = "oneshot_async"
+respawn = true
+"""
diff --git a/config/redbear-grub-policy.toml b/config/redbear-grub-policy.toml
new file mode 100644
index 0000000..33e8098
--- /dev/null
+++ b/config/redbear-grub-policy.toml
@@ -0,0 +1,9 @@
+# Red Bear OS shared GRUB policy fragment
+# Use with any redbear-* profile to make GRUB first-class in installer flows.
+
+[general]
+bootloader = "grub"
+efi_partition_size = 16
+
+[packages]
+grub = {}
diff --git a/config/redbear-grub.toml b/config/redbear-grub.toml
new file mode 100644
index 0000000..27e3e2f
--- /dev/null
+++ b/config/redbear-grub.toml
@@ -0,0 +1,16 @@
+# Red Bear OS GRUB Configuration
+# Text-only ISO with GRUB boot manager for bare metal.
+#
+# Build: make live CONFIG_NAME=redbear-grub
+#
+# Identical to redbear-mini but uses GNU GRUB as the boot manager
+# instead of the Redox EFI bootloader.
+
+include = ["redbear-mini.toml", "redbear-grub-policy.toml"]
+
+[general]
+bootloader = "grub"
+efi_partition_size = 16
+
+[packages]
+grub = {}
diff --git a/config/redbear-legacy-base.toml b/config/redbear-legacy-base.toml
new file mode 100644
index 0000000..1c2a273
--- /dev/null
+++ b/config/redbear-legacy-base.toml
@@ -0,0 +1,52 @@
+# Red Bear OS overrides for base init services.
+#
+# 00_base.service: stripped base setup (tmpdir only, no sudo — sudo runs from
+# base.toml's 00_sudo.service). ipcd and ptyd are started by
+# 00_ipcd.service and 00_ptyd.service from the base recipe.
+# 00_drivers / 10_net: no longer overridden — the legacy scripts were removed
+# from base.toml. pcid-spawner is started by 00_pcid-spawner.service
+# from the base recipe; smolnetd/dhcpd have their own .service files.
+# 00_pcid-spawner.service: overridden to oneshot_async. The base recipe uses
+# type="oneshot" which blocks init until pcid-spawner exits. On real
+# hardware (and QEMU), pcid-spawner can hang waiting for a PCI device
+# driver that never responds, blocking the entire rootfs phase including
+# getty/login. Using oneshot_async lets init proceed to start console
+# services while drivers spawn in the background.
+
+[packages]
+zsh = {}
+
+[[files]]
+path = "/usr/lib/init.d/00_base.service"
+data = """
+[unit]
+description = "Base environment setup (tmpdir)"
+
+[service]
+cmd = "ion"
+args = ["-c", "rm -rf /tmp; mkdir -m a=rwxt /tmp"]
+type = "oneshot"
+"""
+
+[[files]]
+path = "/etc/init.d/20_audiod.service"
+data = """
+[unit]
+description = "Audio multiplexer"
+default_dependencies = false
+
+[service]
+cmd = "audiod"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/etc/init.d/00_pcid-spawner.service"
+data = """
+[unit]
+description = "PCI driver spawner (non-blocking)"
+
+[service]
+cmd = "pcid-spawner"
+type = "oneshot_async"
+"""
diff --git a/config/redbear-legacy-desktop.toml b/config/redbear-legacy-desktop.toml
new file mode 100644
index 0000000..34b0e7e
--- /dev/null
+++ b/config/redbear-legacy-desktop.toml
@@ -0,0 +1,18 @@
+# Red Bear OS overrides for legacy desktop init services.
+# Blank the display and console services inherited from desktop-minimal.toml.
+
+[[files]]
+path = "/usr/lib/init.d/20_display.service"
+data = ""
+
+[[files]]
+path = "/usr/lib/init.d/29_activate_console.service"
+data = ""
+
+[[files]]
+path = "/usr/lib/init.d/30_console.service"
+data = ""
+
+[[files]]
+path = "/usr/lib/init.d/31_debug_console.service"
+data = ""
diff --git a/config/redbear-mini.toml b/config/redbear-mini.toml
new file mode 100644
index 0000000..9b5cb60
--- /dev/null
+++ b/config/redbear-mini.toml
@@ -0,0 +1,456 @@
+# Red Bear OS Mini Configuration
+# Text-only ISO for console/recovery/install on bare metal.
+#
+# Build: make live CONFIG_NAME=redbear-mini
+#
+# Target contract:
+# - text-login live/recovery/install surface
+# - boot framebuffer for VT text consoles via vesad + fbcond
+# - all non-graphics, non-firmware packages from the full profile
+# - no linux-firmware payload, no firmware-loader, no GPU/display drivers
+
+include = ["minimal.toml", "redbear-legacy-base.toml", "redbear-netctl.toml"]
+
+[general]
+filesystem_size = 1536
+
+[users.messagebus]
+uid = 100
+gid = 100
+name = "messagebus"
+home = "/nonexistent"
+shell = "/usr/bin/ion"
+
+[packages]
+# Red Bear OS branding and host utilities.
+redbear-release = {}
+redbear-hwutils = {}
+redbear-quirks = {}
+
+# Redox-native netctl tooling.
+redbear-netctl = {}
+redbear-netctl-console = {}
+redbear-netstat = {}
+redbear-traceroute = {}
+redbear-mtr = {}
+redbear-nmap = {}
+
+# Wi-Fi control daemon (firmware-loader excluded — no firmware blobs in mini).
+redbear-wifictl = {}
+
+# Diagnostics and shell-side utilities.
+mc = {}
+redbear-info = {}
+
+# Keep package builder utility in live environment.
+cub = {}
+
+# ── PCI device database (critical for pcid-spawner driver matching) ──
+pciids = {}
+
+# ── Filesystem support ──
+ext4d = {}
+fatd = {}
+redoxfs = {}
+
+# ── System installer ──
+installer = {}
+
+# ── Input / device management ──
+evdevd = {}
+udev-shim = {}
+
+# ── D-Bus IPC and session services ──
+dbus = {}
+redbear-sessiond = {}
+redbear-dbus-services = {}
+redbear-notifications = {}
+redbear-upower = {}
+redbear-udisks = {}
+redbear-polkit = {}
+
+# ── IOMMU DMA remapping ──
+iommu = {}
+
+# ── Standard CLI tools (from server profile) ──
+bash = {}
+bottom = {}
+curl = {}
+diffutils = {}
+findutils = {}
+git = {}
+htop = {}
+
+# ── Build / packaging utilities ──
+patchelf = {}
+shared-mime-info = {}
+
+# VT/getty/login chain: initfs starts inputd + vesad + fbcond in phase 1,
+# then minimal.toml legacy 30_console runs inputd -A 2 + getty 2 + getty debug.
+
+[[files]]
+path = "/etc/netctl/active"
+data = "wired-dhcp\n"
+
+[[files]]
+path = "/etc/init.d/10_smolnetd.service"
+data = """
+[unit]
+description = "Network stack (non-blocking on live-mini)"
+requires_weak = [
+ "00_pcid-spawner.service",
+]
+
+[service]
+cmd = "netstack"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/etc/init.d/10_dhcpd.service"
+data = """
+[unit]
+description = "DHCP client daemon (non-blocking on live-mini)"
+requires_weak = [
+ "10_smolnetd.service",
+]
+
+[service]
+cmd = "dhcpd"
+args = ["-f"]
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/etc/issue"
+data = """
+########## Red Bear OS #########
+# Login with the following: #
+# `user` #
+# `root`:`password` #
+################################
+"""
+
+[[files]]
+path = "/etc/motd"
+data = """
+
+ _ _
+ | | (_)
+ | | ___ _ ___ _ __ _ _ ___
+ | |/ / || |/ _ \\ | '_ \\| | | / __|
+ | < | || | (_) || |_) | |_| \\__ \\
+ |_|\\_\\|_|/ |\\___/ | .__/ \\__,_|___/
+ |__/ | |
+ |_|
+
+ Red Bear OS v0.2.0 "Liliya" — Built on Redox OS
+ Type 'help' for available commands.
+"""
+
+[[files]]
+path = "/etc/init.d/20_audiod.service"
+data = """
+[unit]
+description = "Audio multiplexer (non-blocking on live-mini)"
+requires_weak = [
+ "00_base.target",
+]
+
+[service]
+cmd = "audiod"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/etc/init.d/02_serial_probe.service"
+data = """
+[unit]
+description = "Serial boot probe marker"
+requires_weak = [
+ "00_base.target",
+]
+
+[service]
+cmd = "echo"
+args = ["RB_SERIAL_PROBE_OK"]
+type = "oneshot"
+"""
+
+[[files]]
+path = "/etc/init.d/00_gpiod.service"
+data = """
+[unit]
+description = "GPIO controller registry (non-blocking on live-mini)"
+requires_weak = [
+ "00_base.target",
+]
+
+[service]
+cmd = "gpiod"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/etc/init.d/00_i2cd.service"
+data = """
+[unit]
+description = "I2C adapter registry (non-blocking on live-mini)"
+requires_weak = [
+ "00_base.target",
+]
+
+[service]
+cmd = "i2cd"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/etc/init.d/00_i2c-dw-acpi.service"
+data = """
+[unit]
+description = "DesignWare ACPI I2C controller (non-blocking)"
+requires_weak = [
+ "00_i2cd.service",
+]
+
+[service]
+cmd = "dw-acpi-i2cd"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/etc/init.d/00_intel-gpiod.service"
+data = """
+[unit]
+description = "Intel ACPI GPIO registrar (non-blocking)"
+requires_weak = [
+ "00_gpiod.service",
+ "00_i2cd.service",
+]
+
+[service]
+cmd = "intel-gpiod"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/etc/init.d/00_i2c-gpio-expanderd.service"
+data = """
+[unit]
+description = "I2C GPIO expander companion bridge (non-blocking on live-mini)"
+requires_weak = [
+ "00_i2cd.service",
+ "00_gpiod.service",
+]
+
+[service]
+cmd = "i2c-gpio-expanderd"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/etc/init.d/00_i2c-hidd.service"
+data = """
+[unit]
+description = "ACPI I2C HID bring-up daemon (non-blocking)"
+requires_weak = [
+ "00_i2cd.service",
+ "00_i2c-dw-acpi.service",
+ "00_intel-gpiod.service",
+ "00_i2c-gpio-expanderd.service",
+]
+
+[service]
+cmd = "i2c-hidd"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/etc/init.d/00_ucsid.service"
+data = """
+[unit]
+description = "USB-C UCSI topology detector (non-blocking on live-mini)"
+requires_weak = [
+ "00_base.target",
+ "00_i2cd.service",
+]
+
+[service]
+cmd = "ucsid"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/12_boot-late.target"
+data = """
+[unit]
+description = "Late boot services target"
+requires_weak = [
+ "00_base.target",
+]
+"""
+
+[[files]]
+path = "/usr/lib/init.d/11_udev.service"
+data = """
+[unit]
+description = "udev compatibility shim"
+requires_weak = [
+ "12_boot-late.target",
+ "00_pcid-spawner.service",
+]
+
+[service]
+cmd = "udev-shim"
+type = { scheme = "udev" }
+"""
+
+[[files]]
+path = "/usr/lib/init.d/10_evdevd.service"
+data = """
+[unit]
+description = "Evdev input daemon"
+requires_weak = [
+ "12_boot-late.target",
+ "00_pcid-spawner.service",
+]
+
+[service]
+cmd = "evdevd"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/11_wifictl.service"
+data = """
+[unit]
+description = "Wi-Fi control daemon"
+requires_weak = [
+ "12_boot-late.target",
+ "00_pcid-spawner.service",
+]
+
+[service]
+cmd = "redbear-wifictl"
+type = { scheme = "wifictl" }
+"""
+
+[[files]]
+path = "/usr/lib/init.d/12_dbus.service"
+data = """
+[unit]
+description = "D-Bus system bus"
+requires_weak = [
+ "12_boot-late.target",
+]
+
+[service]
+cmd = "ion"
+args = [
+ "-c",
+ "mkdir -p /var/lib/dbus /run/dbus; rm -f /run/dbus/pid; dbus-uuidgen --ensure; dbus-daemon --system",
+]
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/13_redbear-sessiond.service"
+data = """
+[unit]
+description = "Red Bear session broker (org.freedesktop.login1)"
+requires_weak = [
+ "12_dbus.service",
+]
+
+[service]
+cmd = "redbear-sessiond"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/13_iommu.service"
+data = """
+[unit]
+description = "IOMMU DMA remapping daemon"
+requires_weak = [
+ "12_boot-late.target",
+ "00_pcid-spawner.service",
+]
+
+[service]
+cmd = "/usr/bin/iommu"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/14_redbear-upower.service"
+data = """
+[unit]
+description = "UPower D-Bus service (org.freedesktop.UPower)"
+requires_weak = [
+ "12_dbus.service",
+]
+
+[service]
+cmd = "redbear-upower"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/14_redbear-udisks.service"
+data = """
+[unit]
+description = "UDisks2 D-Bus service (org.freedesktop.UDisks2)"
+requires_weak = [
+ "12_dbus.service",
+]
+
+[service]
+cmd = "redbear-udisks"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/14_redbear-polkit.service"
+data = """
+[unit]
+description = "PolicyKit1 D-Bus service (org.freedesktop.PolicyKit1)"
+requires_weak = [
+ "12_dbus.service",
+]
+
+[service]
+cmd = "redbear-polkit"
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/var/lib/dbus"
+data = ""
+directory = true
+mode = 0o755
+
+[[files]]
+path = "/run/dbus"
+data = ""
+directory = true
+mode = 0o755
+
+[[files]]
+path = "/etc/pcid.d/ihdgd.toml"
+data = """
+# redbear-live-mini: text-only image; override upstream ihdgd config with empty file
+"""
+
+[[files]]
+path = "/etc/pcid.d/virtio-gpud.toml"
+data = """
+# redbear-live-mini: text-only image; override upstream virtio-gpud config with empty file
+"""
+
+[[files]]
+path = "/etc/pcid.d/00_text_mode_gpu_mask.toml"
+data = """
+# redbear-live-mini: no display driver matched; class 0x03 devices are skipped
+"""
diff --git a/config/redbear-netctl.toml b/config/redbear-netctl.toml
new file mode 100644
index 0000000..b50a061
--- /dev/null
+++ b/config/redbear-netctl.toml
@@ -0,0 +1,106 @@
+# Red Bear OS shared network profile wiring
+#
+# Shared by redbear-minimal, redbear-desktop, redbear-full, and redbear-kde.
+
+[[files]]
+path = "/etc/netctl"
+data = ""
+directory = true
+mode = 0o755
+
+[[files]]
+path = "/etc/netctl/examples"
+data = ""
+directory = true
+mode = 0o755
+
+[[files]]
+path = "/etc/netctl/examples/wired-dhcp"
+data = """
+Description='Red Bear wired DHCP profile'
+Interface=eth0
+Connection=ethernet
+IP=dhcp
+"""
+
+[[files]]
+path = "/etc/netctl/wired-dhcp"
+data = """
+Description='Red Bear wired DHCP profile'
+Interface=eth0
+Connection=ethernet
+IP=dhcp
+"""
+
+[[files]]
+path = "/etc/netctl/examples/wired-static"
+data = """
+Description='Red Bear wired static profile'
+Interface=eth0
+Connection=ethernet
+IP=static
+Address=('192.168.1.10/24')
+Gateway='192.168.1.1'
+DNS=('1.1.1.1')
+"""
+
+[[files]]
+path = "/etc/netctl/examples/wifi-dhcp"
+data = """
+Description='Red Bear Wi-Fi DHCP profile'
+Interface=wlan0
+Connection=wifi
+SSID='example-ssid'
+Security=wpa2-psk
+Key='example-passphrase'
+IP=dhcp
+"""
+
+[[files]]
+path = "/etc/netctl/examples/wifi-open"
+data = """
+Description='Red Bear Wi-Fi open-network profile'
+Interface=wlan0
+Connection=wifi
+SSID='example-open-ssid'
+Security=open
+IP=dhcp
+"""
+
+[[files]]
+path = "/etc/netctl/examples/wifi-open-bounded"
+data = """
+Description='Red Bear Wi-Fi bounded lifecycle profile'
+Interface=wlan0
+Connection=wifi
+SSID='example-open-ssid'
+Security=open
+IP=bounded
+"""
+
+[[files]]
+path = "/etc/netctl/wifi-open-bounded"
+data = """
+Description='Red Bear Wi-Fi bounded lifecycle profile'
+Interface=wlan0
+Connection=wifi
+SSID='example-open-ssid'
+Security=open
+IP=bounded
+"""
+
+[[files]]
+path = "/usr/lib/init.d/12_netctl.service"
+data = """
+[unit]
+description = "Network profile application"
+requires_weak = [
+ "10_smolnetd.service",
+ "10_dhcpd.service",
+]
+
+[service]
+cmd = "redbear-netctl"
+args = ["--boot"]
+type = "oneshot_async"
+"""
diff --git a/config/redbear-wifi-experimental.toml b/config/redbear-wifi-experimental.toml
new file mode 100644
index 0000000..350eb5a
--- /dev/null
+++ b/config/redbear-wifi-experimental.toml
@@ -0,0 +1,20 @@
+# Red Bear OS Wi-Fi Experimental Profile
+#
+# Standalone tracked build target for the current bounded Intel Wi-Fi slice.
+#
+# This profile extends the existing minimal Red Bear baseline but switches the default active profile
+# to the bounded Wi-Fi path and adds the first Intel driver-side package on top of the shared
+# firmware/control/profile tooling.
+
+include = ["redbear-minimal.toml"]
+
+[general]
+filesystem_size = 2048
+
+[packages]
+# First bounded Intel driver-side package
+redbear-iwlwifi = {}
+
+[[files]]
+path = "/etc/netctl/active"
+data = "wifi-open-bounded\n"
diff --git a/config/redoxer-gui.toml b/config/redoxer-gui.toml
index bc50407..8aa1863 100644
--- a/config/redoxer-gui.toml
+++ b/config/redoxer-gui.toml
@@ -9,10 +9,15 @@ orbital = {}
# Override to run inside of orbital
[[files]]
-path = "/usr/lib/init.d/30_redoxer"
+path = "/usr/lib/init.d/30_redoxer.service"
data = """
-requires_weak 10_net.target
-echo
-echo "## running redoxer in orbital ##"
-nowait VT=3 orbital redoxerd
+[unit]
+description = "Redoxer GUI test (orbital)"
+requires_weak = ["10_dhcpd.service"]
+
+[service]
+cmd = "orbital"
+args = ["redoxerd"]
+envs = { VT = "3" }
+type = "oneshot_async"
"""
diff --git a/config/redoxer.toml b/config/redoxer.toml
index ce04443..6875066 100644
--- a/config/redoxer.toml
+++ b/config/redoxer.toml
@@ -15,26 +15,42 @@ pkgutils = {}
relibc = {}
sed = {}
-# Override to not background dhcpd
+# Override network services for redoxer (foreground dhcpd)
+[[files]]
+path = "/usr/lib/init.d/10_smolnetd.service"
+data = """
+[unit]
+description = "Network stack for redoxer"
+requires_weak = ["00_pcid-spawner.service"]
+
+[service]
+cmd = "netstack"
+type = "oneshot_async"
+"""
+
[[files]]
path = "/usr/lib/init.d/10_dhcpd.service"
data = """
[unit]
-description = "Network configuration using DHCP"
-requires_weak = [
- "10_smolnetd.service",
-]
+description = "DHCP client (foreground) for redoxer"
+requires_weak = ["10_smolnetd.service"]
[service]
cmd = "dhcpd"
-type = "oneshot"
+type = "oneshot_async"
"""
[[files]]
-path = "/usr/lib/init.d/30_redoxer"
+path = "/usr/lib/init.d/30_redoxer.service"
data = """
-requires_weak 10_net.target
-ion /usr/lib/run_redoxer.ion
+[unit]
+description = "Redoxer test runner"
+requires_weak = ["10_dhcpd.service"]
+
+[service]
+cmd = "ion"
+args = ["/usr/lib/run_redoxer.ion"]
+type = "oneshot_async"
"""
[[files]]
diff --git a/config/riscv64gc/ci.toml b/config/riscv64gc/ci.toml
index ef207e7..382a421 100644
--- a/config/riscv64gc/ci.toml
+++ b/config/riscv64gc/ci.toml
@@ -25,6 +25,7 @@ prompt = false
# acid = {} # rust require dynamic linking
acid-bins = {}
base = {}
+base-initfs = {}
bash = {}
bash-completion = {}
bootloader = {}
diff --git a/config/sys-build.toml b/config/sys-build.toml
index 9534edd..7f75662 100644
--- a/config/sys-build.toml
+++ b/config/sys-build.toml
@@ -14,10 +14,16 @@ bottom = "ignore"
kibi = "ignore"
[[files]]
-path = "/usr/lib/init.d/30_console"
+path = "/usr/lib/init.d/30_console.service"
data = """
-requires_weak 10_net
-ion /usr/lib/sys_build.ion
+[unit]
+description = "System build test"
+requires_weak = ["00_base.target"]
+
+[service]
+cmd = "ion"
+args = ["/usr/lib/sys_build.ion"]
+type = "oneshot"
"""
[[files]]
diff --git a/config/wayland.toml b/config/wayland.toml
index 1bf8d30..a91f005 100644
--- a/config/wayland.toml
+++ b/config/wayland.toml
@@ -1,94 +1,351 @@
-# Wayland configuration
+# Wayland validation-only configuration
-include = ["desktop.toml"]
+# This is the bounded compositor validation slice.
-# Override the default settings here
+include = ["desktop.toml", "redbear-legacy-base.toml", "redbear-legacy-desktop.toml", "redbear-device-services.toml", "redbear-netctl.toml"]
-# General settings
[general]
-# Filesystem size in MiB
filesystem_size = 2048
-# Package settings
+[users.messagebus]
+uid = 100
+gid = 100
+name = "messagebus"
+home = "/nonexistent"
+shell = "/usr/bin/false"
+
+[groups.messagebus]
+gid = 100
+members = ["messagebus"]
+
[packages]
-adwaita-icon-theme = {}
-bash = {}
-cosmic-app-library = {}
-cosmic-comp = {}
-gtk3 = {}
-libcosmic-wayland = {}
-libxcursor = {}
-iced-wayland = {}
+redbear-release = {}
+redbear-hwutils = {}
+redbear-info = {}
+redbear-netctl = {}
+dbus = {}
+redbear-sessiond = {}
+redbear-dbus-services = {}
+firmware-loader = {}
+evdevd = {}
+udev-shim = {}
+seatd = {}
mesa = {}
"pop-icon-theme.cursors" = {}
-smallvil = {}
-softbuffer-wayland = {}
-wayland-rs = {}
-#webkitgtk3 = {}
-winit-wayland = {}
+kwin = {}
xkeyboard-config = {}
-# Overridden to launch wayland compositor instead of orblogin
[[files]]
-path = "/usr/lib/init.d/20_orbital"
+path = "/usr/lib/init.d/12_dbus.service"
data = """
-requires_weak 10_net.target 20_audiod.service
-nowait BROWSER=/bin/netsurf-fb VT=3 orbital orbital-wayland
+[unit]
+description = "D-Bus system bus"
+requires_weak = [
+ "00_base.target",
+]
+
+[service]
+cmd = "ion"
+args = [
+ "-c",
+ "mkdir -p /var/lib/dbus /run/dbus; rm -f /run/dbus/pid; dbus-uuidgen --ensure; dbus-daemon --system",
+]
+type = "oneshot_async"
"""
[[files]]
-path = "/usr/bin/orbital-wayland"
+path = "/var/lib/dbus"
+data = ""
+directory = true
mode = 0o755
+
+[[files]]
+path = "/run/dbus"
+data = ""
+directory = true
+mode = 0o755
+
+[[files]]
+path = "/usr/lib/init.d/13_seatd.service"
+data = """
+[unit]
+description = "seatd seat management daemon"
+requires_weak = [
+ "12_dbus.service",
+ "13_redbear-sessiond.service",
+]
+
+[service]
+cmd = "seatd"
+args = ["-l", "info"]
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/13_redbear-sessiond.service"
+data = """
+[unit]
+description = "Red Bear session broker (org.freedesktop.login1)"
+requires_weak = [
+ "12_dbus.service",
+]
+
+[service]
+cmd = "ion"
+args = [
+ "-c",
+ "redbear-sessiond",
+]
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/20_display.service"
+data = """
+[unit]
+description = "Display session service (Wayland validation)"
+requires_weak = [
+ "12_dbus.service",
+ "13_redbear-sessiond.service",
+ "13_seatd.service",
+]
+
+[service]
+cmd = "/usr/bin/redbear-validation-session"
+envs = { BROWSER = "/bin/netsurf-fb", VT = "3" }
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/30_console.service"
data = """
-#!/usr/bin/env bash
+[unit]
+description = "Console terminals"
+requires_weak = [
+ "29_activate_console.service",
+]
-set -ex
+[service]
+cmd = "getty"
+args = ["2"]
+type = "oneshot_async"
+respawn = true
+"""
-# Prepare environment
-unset DISPLAY
-export COSMIC_BACKEND=winit
-export HOME=/root
-export LD_DEBUG=all
+[[files]]
+path = "/usr/lib/init.d/29_activate_console.service"
+data = """
+[unit]
+description = "Activate display VT"
+requires_weak = [
+ "20_display.service",
+]
+
+[service]
+cmd = "inputd"
+args = ["-A", "3"]
+type = "oneshot_async"
+"""
+
+[[files]]
+path = "/usr/lib/init.d/31_debug_console.service"
+data = """
+[unit]
+description = "Debug console"
+requires_weak = [
+ "29_activate_console.service",
+]
+
+[service]
+cmd = "getty"
+args = ["/scheme/debug/no-preserve", "-J"]
+type = "oneshot_async"
+respawn = true
+"""
+
+[[files]]
+path = "/usr/bin/redbear-validation-session"
+mode = 0o755
+data = """
+#!/usr/bin/env sh
+
+export DISPLAY=""
+export WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-wayland-0}"
+export XDG_SESSION_TYPE=wayland
+export LIBSEAT_BACKEND=seatd
+export SEATD_SOCK=/run/seatd.sock
+export QT_PLUGIN_PATH=/usr/plugins
+export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/plugins/platforms
+export QML2_IMPORT_PATH=/usr/qml
export RUST_BACKTRACE=full
export RUST_LOG=debug
export XCURSOR_THEME=Pop
-export XDG_RUNTIME_DIR=/tmp/run/user/0
+export XKB_CONFIG_ROOT=/usr/share/X11/xkb
+
+if [ -z "${XDG_RUNTIME_DIR:-}" ]; then
+ export XDG_RUNTIME_DIR="/tmp/run/user/$(id -u)"
+fi
+
+mkdir -p "$XDG_RUNTIME_DIR"
+chmod 700 "$XDG_RUNTIME_DIR" 2>/dev/null || true
+
+wait_for_path() {
+ target="$1"
+ attempts=0
+ while [ "$attempts" -lt 30 ]; do
+ if [ -e "$target" ]; then
+ return 0
+ fi
+ attempts=$((attempts + 1))
+ sleep 1
+ done
+ return 1
+}
+
+if ! wait_for_path /run/dbus/system_bus_socket; then
+ echo "system D-Bus socket did not appear" >&2
+ exit 1
+fi
-# Create XDG runtime directory
-#TODO: mkdir -p not working
-mkdir -p /tmp/run
-mkdir -p /tmp/run/user
-mkdir -p /tmp/run/user/0
+sleep 2
-# Compile glib schemas
-glib-compile-schemas /usr/share/glib-2.0/schemas/
+wait_for_wayland_socket() {
+ socket_path="$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY"
+ attempts=0
+ while [ "$attempts" -lt 30 ]; do
+ if [ -e "$socket_path" ]; then
+ return 0
+ fi
+ if ! kill -0 "$kwin_pid" 2>/scheme/null; then
+ return 1
+ fi
+ attempts=$((attempts + 1))
+ sleep 1
+ done
+ return 1
+}
-# For cosmic-comp (more features)
-cosmic-comp wayland-session
+if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then
+ eval "$(dbus-launch --sh-syntax)"
+fi
-# For smallvil (easier to debug)
-#smallvil -c wayland-session&
+dbus-update-activation-environment \
+ DBUS_SESSION_BUS_ADDRESS \
+ DBUS_SESSION_BUS_PID \
+ WAYLAND_DISPLAY \
+ XDG_SESSION_TYPE \
+ XDG_RUNTIME_DIR \
+ DISPLAY \
+ HOME \
+ USER
+
+if [ -d /usr/share/glib-2.0/schemas ]; then
+ glib-compile-schemas /usr/share/glib-2.0/schemas/
+fi
+
+export XCURSOR_THEME="${XCURSOR_THEME:-Pop}"
+export XKB_CONFIG_ROOT="${XKB_CONFIG_ROOT:-/usr/share/X11/xkb}"
+
+if [ -z "${KWIN_DRM_DEVICES:-}" ] && [ -e /scheme/drm/card0 ]; then
+ export KWIN_DRM_DEVICES=/scheme/drm/card0
+fi
+
+redbear-compositor --drm &
+kwin_pid=$!
+
+if ! wait_for_wayland_socket; then
+ echo "kwin_wayland failed to expose $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" >&2
+ exit 1
+fi
+
+exec /usr/bin/wayland-session
"""
[[files]]
path = "/usr/bin/wayland-session"
mode = 0o755
data = """
-#!/usr/bin/env bash
-
-set -ex
-
-#env G_MAIN_POLL_DEBUG=1 G_MESSAGES_DEBUG=all LD_DEBUG=all WEBKIT_DEBUG=all MiniBrowser&
-printenv
-#wayland-rs_simple-window
-#winit-wayland_window
-#softbuffer-wayland_animation
-#iced-wayland_sctk_lazy
-libcosmic-wayland_application
-#gtk3-widget-factory
-#cosmic-app-library run
+#!/usr/bin/env ion
+
+export HOME=/home/root
+export USER=root
+export LOGNAME=root
+
+let session_started = "$HOME/.wayland-session.started"
+rm -f $session_started
+echo "started" > $session_started
+export QT_PLUGIN_PATH=/usr/plugins
+export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/plugins/platforms
+export QML2_IMPORT_PATH=/usr/qml
+let smoke_ok = "$HOME/.qt6-wayland-smoke.ok"
+let smoke_err = "$HOME/.qt6-wayland-smoke.err"
+let smoke_log = "$HOME/.qt6-wayland-smoke.log"
+let bootstrap_ok = "$HOME/.qt6-bootstrap-minimal.ok"
+let bootstrap_log = "$HOME/.qt6-bootstrap-minimal.log"
+let plugin_ok = "$HOME/.qt6-plugin-minimal.ok"
+let plugin_err = "$HOME/.qt6-plugin-minimal.err"
+let plugin_log = "$HOME/.qt6-plugin-minimal.log"
+let smoke_minimal_ok = "$HOME/.qt6-wayland-smoke-minimal.ok"
+let smoke_offscreen_ok = "$HOME/.qt6-wayland-smoke-offscreen.ok"
+let smoke_wayland_ok = "$HOME/.qt6-wayland-smoke-wayland.ok"
+let smoke_minimal_log = "$HOME/.qt6-wayland-smoke-minimal.log"
+let smoke_offscreen_log = "$HOME/.qt6-wayland-smoke-offscreen.log"
+let smoke_wayland_log = "$HOME/.qt6-wayland-smoke-wayland.log"
+rm -f $smoke_ok $smoke_err
+rm -f $smoke_log
+rm -f $bootstrap_ok $bootstrap_log
+rm -f $plugin_ok $plugin_err $plugin_log
+rm -f $smoke_minimal_ok $smoke_offscreen_ok $smoke_wayland_ok
+rm -f $smoke_minimal_log $smoke_offscreen_log $smoke_wayland_log
+if which qt6-wayland-smoke >/scheme/null
+ if test -f /usr/plugins/platforms/libqminimal.so
+ echo "=== qminimal ELF header (guest) ==="
+ stat /usr/plugins/platforms/libqminimal.so
+ dd if=/usr/plugins/platforms/libqminimal.so bs=64 count=1 | od -An -tx1
+ else
+ echo "=== qminimal ELF header (guest) missing ==="
+ end
+ if env LD_DEBUG=all QT_DEBUG_PLUGINS=1 QT_QPA_PLATFORM=minimal qt6-bootstrap-check > $bootstrap_log ^> $bootstrap_log
+ touch $bootstrap_ok
+ else
+ if test -f $bootstrap_log
+ cat $bootstrap_log
+ end
+ echo "qt6-bootstrap-check minimal failed; see $bootstrap_log" > $smoke_err
+ end
+
+ if env LD_DEBUG=all QT_DEBUG_PLUGINS=1 QT_PLUGIN_PATH=/usr/plugins QT_QPA_PLATFORM_PLUGIN_PATH=/usr/plugins/platforms qt6-plugin-check /usr/plugins/platforms/libqminimal.so > $plugin_log ^> $plugin_log
+ touch $plugin_ok
+ else
+ if test -f $plugin_log
+ cat $plugin_log
+ end
+ echo "qt6-plugin-check failed; see $plugin_log" > $plugin_err
+ echo "qt6-plugin-check failed; see $plugin_log" > $smoke_err
+ end
+
+ if env QT_DEBUG_PLUGINS=1 QT_QPA_PLATFORM=minimal qt6-wayland-smoke > $smoke_minimal_log ^> $smoke_minimal_log
+ touch $smoke_minimal_ok
+ else
+ echo "qt6-wayland-smoke minimal failed; see $smoke_minimal_log" > $smoke_err
+ end
+
+ if env QT_DEBUG_PLUGINS=1 QT_QPA_PLATFORM=offscreen qt6-wayland-smoke > $smoke_offscreen_log ^> $smoke_offscreen_log
+ touch $smoke_offscreen_ok
+ else
+ echo "qt6-wayland-smoke offscreen failed; see $smoke_offscreen_log" > $smoke_err
+ end
+
+ if env QT_DEBUG_PLUGINS=1 QT_QPA_PLATFORM=wayland qt6-wayland-smoke > $smoke_wayland_log ^> $smoke_wayland_log
+ touch $smoke_wayland_ok
+ touch $smoke_ok
+ else
+ echo "qt6-wayland-smoke wayland failed; see $smoke_wayland_log" > $smoke_err
+ end
+end
"""
+
[[files]]
path = "/etc/gtk-3.0/settings.ini"
data = """
diff --git a/config/x11.toml b/config/x11.toml
index 06de655..6534874 100644
--- a/config/x11.toml
+++ b/config/x11.toml
@@ -1,4 +1,8 @@
-# X11 configuration
+# X11 compatibility-only configuration
+
+# This profile is not a primary desktop path.
+# Red Bear OS treats KWin Wayland as the production compositor/session path.
+# X exists only for compatibility and legacy app/runtime surfaces.
include = ["desktop.toml"]
@@ -23,10 +27,16 @@ x11-full = {}
zenity = {}
[[files]]
-path = "/usr/lib/init.d/10_dbus"
+path = "/usr/lib/init.d/10_dbus.service"
data = """
-requires_weak 10_net.target
-bash /usr/bin/start-dbus.sh
+[unit]
+description = "D-Bus system bus (X11)"
+requires_weak = ["00_base.target"]
+
+[service]
+cmd = "bash"
+args = ["/usr/bin/start-dbus.sh"]
+type = "oneshot_async"
"""
[[files]]
@@ -45,18 +55,31 @@ dbus-daemon --system
"""
[[files]]
-path = "/usr/lib/init.d/10_xenv"
+path = "/usr/lib/init.d/10_xenv.service"
data = """
-requires_weak 10_net.target
-glib-compile-schemas /usr/share/glib-2.0/schemas/
+[unit]
+description = "Compile glib schemas"
+requires_weak = ["00_base.target"]
+
+[service]
+cmd = "glib-compile-schemas"
+args = ["/usr/share/glib-2.0/schemas/"]
+type = "oneshot"
"""
# Overridden to launch X instead of orblogin
[[files]]
-path = "/usr/lib/init.d/20_orbital"
+path = "/usr/lib/init.d/20_orbital.service"
data = """
-requires_weak 10_dbus 10_xenv 20_audiod.service
-nowait BROWSER=/bin/netsurf-fb VT=3 orbital orbital-x11
+[unit]
+description = "Orbital display (X11)"
+requires_weak = ["10_dbus.service", "10_xenv.service"]
+
+[service]
+cmd = "orbital"
+args = ["orbital-x11"]
+envs = { BROWSER = "/bin/netsurf-fb", VT = "3" }
+type = "oneshot_async"
"""
[[files]]
@@ -124,10 +147,35 @@ mate-session&
"""
+# Override console config to set DISPLAY=:0
+[[files]]
+path = "/usr/lib/init.d/30_console.service"
+data = """
+[unit]
+description = "Console terminals (X11)"
+requires_weak = ["20_orbital.service"]
+
+[service]
+cmd = "getty"
+args = ["2"]
+envs = { DISPLAY = ":0" }
+type = "oneshot_async"
+respawn = true
+"""
+
[[files]]
-path = "/usr/lib/environment.d/10_x11"
+path = "/usr/lib/init.d/31_debug_console.service"
data = """
-DISPLAY=:0
+[unit]
+description = "Debug console (X11)"
+requires_weak = ["30_console.service"]
+
+[service]
+cmd = "getty"
+args = ["/scheme/debug/no-preserve", "-J"]
+envs = { DISPLAY = ":0" }
+type = "oneshot_async"
+respawn = true
"""
@@ -154,4 +202,3 @@ gid = 100
name = "messagebus"
home = "/nonexistent"
shell = "/usr/bin/false"
-
diff --git a/config/x86_64/ci.toml b/config/x86_64/ci.toml
index b22114c..23ce90a 100644
--- a/config/x86_64/ci.toml
+++ b/config/x86_64/ci.toml
@@ -29,6 +29,7 @@ adwaita-icon-theme = {}
autoconf = {}
automake = {}
base = {}
+base-initfs = {}
bash = {}
bash-completion = {}
binutils = {}
diff --git a/config/x86_64/demo.toml b/config/x86_64/demo.toml
index 37a0eed..3fb4d53 100644
--- a/config/x86_64/demo.toml
+++ b/config/x86_64/demo.toml
@@ -46,22 +46,23 @@ path = "/home/user/Welcome.txt"
data = """
##############################################################################
# #
-# Welcome to Redox! #
+# Welcome to Red Bear OS! #
# #
-# Redox is an operating system written in Rust, a language with focus #
-# on safety and high performance. Redox, following the microkernel design, #
-# aims to be secure, usable, and free. Redox is inspired by previous kernels #
-# and operating systems, such as SeL4, MINIX, Plan 9, and BSD. #
+# Red Bear OS (RBOS) is a derivative of Redox, an operating system written #
+# in Rust, a language with focus on safety and high performance. Redox, #
+# following the microkernel design, aims to be secure, usable, and free. #
+# Redox is inspired by previous kernels and operating systems, such as #
+# SeL4, MINIX, Plan 9, and BSD. #
# #
-# Redox _is not_ just a kernel, it's a full-featured Operating System, #
+# Red Bear OS _is not_ just a kernel, it's a full-featured Operating System, #
# providing packages (memory allocator, file system, display manager, core #
# utilities, etc.) that together make up a functional and convenient #
# operating system. You can loosely think of it as the GNU or BSD ecosystem, #
# but in a memory safe language and with modern technology. #
# #
-# The website can be found at https://www.redox-os.org. #
+# The website can be found at https://github.com/vasilito/Red-Bear-OS-3. #
# #
-# For things to try on Redox, please see #
+# For things to try on Red Bear OS, please see #
# https://doc.redox-os.org/book/ch02-06-trying-out-redox.html #
# #
##############################################################################
diff --git a/config/x86_64/desktop-contain.toml b/config/x86_64/desktop-contain.toml
new file mode 100644
index 0000000..cca5dca
--- /dev/null
+++ b/config/x86_64/desktop-contain.toml
@@ -0,0 +1,69 @@
+# Desktop configuration using the Contain sandbox
+
+include = ["../desktop.toml"]
+
+# Override the default settings here
+
+# General settings
+[general]
+# Filesystem size in MiB
+# filesystem_size = 1024
+
+# Package settings
+[packages]
+# example = {}
+
+# Override orbital init to use contain_orblogin
+[[files]]
+path = "/usr/lib/init.d/20_orbital.service"
+data = """
+[unit]
+description = "Orbital display (contain sandbox)"
+requires_weak = ["00_base.target"]
+
+[service]
+cmd = "orbital"
+args = ["contain_orblogin", "launcher"]
+envs = { VT = "3" }
+type = "oneshot_async"
+"""
+
+# Override console init to use contain
+[[files]]
+path = "/usr/lib/init.d/30_console.service"
+data = """
+[unit]
+description = "Console terminals (contained)"
+requires_weak = ["20_orbital.service"]
+
+[service]
+cmd = "getty"
+args = ["--contain", "2"]
+type = "oneshot_async"
+respawn = true
+"""
+
+[[files]]
+path = "/usr/lib/init.d/31_debug_console.service"
+data = """
+[unit]
+description = "Debug console (contained)"
+requires_weak = ["30_console.service"]
+
+[service]
+cmd = "getty"
+args = ["--contain", "/scheme/debug/no-preserve", "-J"]
+type = "oneshot_async"
+respawn = true
+"""
+
+[[files]]
+path = "/etc/contain.toml"
+data = """
+pass_schemes = ["rand", "null", "tcp", "udp", "thisproc", "pty", "orbital", "display.vesa"]
+sandbox_schemes = ["file"]
+files = ["file:/dev/null"]
+rofiles = ["file:/etc/passwd", "file:/etc/hostname", "file:/etc/localtime"]
+dirs = ["file:/tmp"]
+rodirs = ["file:/bin", "file:/ui"]
+"""
diff --git a/config/x86_64/server-demo.toml b/config/x86_64/server-demo.toml
index ac775ef..9a22550 100644
--- a/config/x86_64/server-demo.toml
+++ b/config/x86_64/server-demo.toml
@@ -36,18 +36,30 @@ website = {}
[[files]]
-path = "/usr/lib/init.d/98_keygen_sh"
+path = "/usr/lib/init.d/98_keygen_sh.service"
data = """
-requires_weak 10_net.target
-bash /root/keygen.sh
+[unit]
+description = "SSH key generation"
+requires_weak = ["00_base.target"]
+
+[service]
+cmd = "bash"
+args = ["/root/keygen.sh"]
+type = "oneshot"
"""
[[files]]
-path = "/usr/lib/init.d/99_rustysd"
+path = "/usr/lib/init.d/99_rustysd.service"
data = """
-requires_weak 98_keygen_sh
-# Undocumented usage of rsdctl, pointing to notifications dir
-RSDCTL_ADDR=/var/run/rustysd/control.socket rustysd --conf /etc/rustysd
+[unit]
+description = "Rustysd service manager"
+requires_weak = ["98_keygen_sh.service"]
+
+[service]
+cmd = "rustysd"
+args = ["--conf", "/etc/rustysd"]
+envs = { RSDCTL_ADDR = "/var/run/rustysd/control.socket" }
+type = "oneshot_async"
"""
[[files]]
@@ -125,7 +137,7 @@ path = "/var/www/html/index.php"
data = """
<?php
-echo "Hello from PHP on Redox!";
+echo "Hello from PHP on Red Bear OS!";
"""
[[files]]
@@ -288,9 +300,9 @@ php-fpm --nodaemonize &
path = "/home/user/Welcome.txt"
data = """
##############################################################################
-# Welcome to Redox Server Demo!
+# Welcome to Red Bear OS Server Demo!
#
-# This is a quick demonstration of Redox used as server stack.
+# This is a quick demonstration of Red Bear OS used as server stack.
# At the moment we support SSH, NGINX, Python, PHP. There's more to come
#
# This server demo is insecure by design, we encourage you to get familiar into
@@ -303,7 +315,7 @@ data = """
# > sudo bash server.sh
#
# The server will start port 22 (ssh), 80 (static web) and 8081 (php)
-# If you use the Redox OS build system, starting QEMU with `net=redir`
+# If you use the Red Bear OS build system, starting QEMU with `net=redir`
# should expose those port to 8022, 8080 and 8081.
# Try logging in to console via SSH with `ssh user@localhost -p 8022`
#