Networking, desktops & init

Networking

One stack: iwd runs the wireless radio and remembers networks, dhcpcd gets addresses for every interface, wired or wireless. No NetworkManager anywhere in the base system.

None of this can work before the card's driver and firmware are loaded and the interface actually exists. If wifi-connect reports no wireless device found, start at manual setup, which covers firmware and how to confirm the interface is really there.

wifi-connect                    scan and choose from a list
wifi-connect <ssid>             connect by name, asks for the passphrase if needed
wifi-connect <ssid> <psk>       without asking
wifi-connect --status           what the wireless device is doing
wifi-connect --forget <ssid>    drop a saved network

The first time it runs, wifi-connect enables iwd and dhcpcd to start at boot. iwd keeps every network it has joined in /var/lib/iwd and reconnects on its own, so there is nothing to replay at boot. iwctl is there for anything wifi-connect does not cover. A wired-only machine needs only service enable dhcpcd.

A network can also be declared in /etc/scraplinux/network.conf (see configuration); scraplinux-rebuild turns it into an iwd profile, which iwd picks up at once.

A soft-blocked radio (a BIOS default on many laptops) is unblocked 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.

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

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, enables the pipewire service and drops a per-session autostart hook - PipeWire is a per-user daemon, so nothing starts it without one.

Init systems

dinit is PID 1 and the only init. It starts services in parallel as soon as what they depend on is up, supervises daemons and restarts them if they die, and shuts down in reverse order. A boot in QEMU reaches the login prompt about 1.3 seconds after the kernel hands over.

service                      every service, whether it starts at boot, its state
service enable sshd          start at boot, and now
service disable sshd         stop, and no longer at boot
service start|stop|restart|status <name>
dinitctl list                every service dinit knows, boot plumbing included

Service definitions live in /etc/dinit.d, one small file each; the enabled set is the links in /etc/dinit.d/boot.d. The boot itself is split into services too (early-fs, udevd, fsck, local-fs and so on), all pulled in by system, which the login gettys wait for. dinitctl status <name> says why one failed.

Shutting down is poweroff, reboot or halt; they are dinit's own and stop every service before the machine goes down. Booting with single on the kernel command line starts a root shell first; exiting it carries on with the normal boot.

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