Networking, desktops & init

Networking

One stack, live and installed alike: wpa_supplicant and udhcpc, driven by wifi-connect. No NetworkManager anywhere in the base system.

wifi-connect                        pick an interface and a network
wifi-connect <ssid> <psk> [iface]   connect without being asked anything
wifi-connect scan [iface]           scan and show what is in range

Scans, lists what's in range, asks which interface and network, reads the passphrase with the characters masked. On a successful connect it writes the SSID/PSK/interface to /etc/scraplinux/network.conf - see configuration. rc.d/wifi reads that back on every boot and reconnects, started in the background by rc.boot and never waited on - an association or a DHCP lease never holds up the login prompt.

Wired DHCP comes up on its own via rc.d/network, same non-blocking treatment. A soft-blocked radio (a BIOS default on many laptops) is unblocked automatically before scanning; a hard block (a physical switch) has to be cleared in hardware.

No regulatory database installed means the kernel stays in world domain 00, where most 5 GHz channels are receive-only - an access point shows up in a scan and the card is then forbidden to transmit to it, which reads exactly like a wrong passphrase. scraps add wireless-regdb fixes it; WIFI_COUNTRY=US wifi-connect sets a country code for one run.

Desktops

scraps add scraplinux-xfce     # or scraplinux-kde, niri-dms, apiwow-dwm
scraplinux-xfceXFCE 4.20, foot, Thunar, LightDM, X11, PipeWire, fonts
scraplinux-kdePlasma 6, foot, Dolphin, SDDM, PipeWire, fonts
niri-dmsNiri, DankMaterialShell, foot, fuzzel, mako, PipeWire, fonts, Firefox
apiwow-dwmdwm, dmenu, st, picom, slstatus, slock, X11, fonts

Each is a single profile meta-package pulling in the whole working environment at once, rather than assembling the pieces by hand. dwm starts from a console login rather than a display manager - it needs a .xinitrc:

printf '#!/bin/sh\nexec dwm\n' > ~/.xinitrc
startx

Audio

scraps add sound-setup            # busybox init
scraps add sound-setup-openrc     # OpenRC

PipeWire and WirePlumber as the audio layer, the PipeWire PulseAudio compatibility shim, ALSA, and alsamixer. Unlike the bare scraplinux-sound meta-package (dependencies only), sound-setup also adds every real user to the audio group and drops a per-session autostart hook - PipeWire is a per-user daemon, so nothing starts it without one.

Init systems

busyboxthe default, bundled in the def tarball. /etc/rc.boot, /etc/rc.d scripts.
openrcbundled in the openrc tarball, with openrc-init wired up as PID 1. Dependency-based, from Gentoo - /etc/init.d, rc-update.
sysvinitinstalled afterward via scraps add. /etc/inittab, /etc/rc3.d.
runitinstalled afterward. /etc/sv, sv up/sv down.
dinitinstalled afterward. dinitctl.
initializationScrapLinux's own fork of nitro, installed afterward.

Only the two bundled in the tarballs (busybox, OpenRC) are boot-tested end to end; the rest are verified by inspection of the generated service definitions.

Every service is defined once, in /etc/rc.d, as a handful of shell variables:

#!/bin/sh
NAME=bluetoothd
CMD=/usr/bin/bluetoothd
ARGS=""
BACKGROUND=yes

. /etc/scraplinux/svc.lib
svc_main "$@"

scraplinux-init-setup reads (not runs) that and generates the equivalent for whichever init is actually running - an OpenRC init.d script, a runit run file, and so on. One definition, generated rest - adding a service stays a one-file change, and no init drifts out of step with the others.

scraplinux-init-setup openrc              regenerate service definitions for OpenRC
scraplinux-init-setup runit --root /mnt   or write them into a target root

A rebuild that changes the enabled service set regenerates the definitions for whichever init is running automatically - not something to remember by hand.

More: scraplinux linux docs · install · configuration · packages · kernels & generations · troubleshooting & reference