The Store Policy
Complete documentation for Soccer Mom Linux 1.3 “Minivan”. By reading this page you acknowledge the store policy, whether you finish it or not.
Introduction
Soccer Mom Linux (SML) is a Debian-based Linux distribution for people who have been waiting forty-five minutes, whose kids are in the minivan, and who would like the name of every daemon working this shift. It is a fully functional Debian system underneath — every joke is a thin, well-behaved layer over the real thing, and every original command still works (though the staff will judge you).
Three design rules govern the system:
- The customer is always right. Error messages therefore make it clear the computer is at fault.
- Everything escalates. Root access goes through the Manager. Service management goes through the System Owners’ Association. Package requests are demands.
- Nothing actually breaks.
sudo,su,systemctl, andaptare intact underneath (diverted to*.real); scripts and muscle memory keep working.
Getting Soccer Mom Linux
Four official editions are on the download page:
| Edition | File | For |
|---|---|---|
| amd64 live ISO | …-amd64.iso |
PCs and x86 VMs. Hybrid BIOS + UEFI; write to USB with dd or boot as a DVD. |
| arm64 live ISO | …-arm64.iso |
UTM/QEMU/Parallels on Apple Silicon, ARM servers with UEFI firmware. |
| Raspberry Pi image | …-rpi.img |
Pi 3, 4, and 5 (64-bit). A persistent install, not a live system. |
| Browser Edition | …-browser-i386.iso |
The in-browser test drive (WebAssembly). Also boots on retro 32-bit hardware. |
Verify your download. The manager insists:
sha256sum -c SHA256SUMS --ignore-missing
Writing the live ISO to USB
# Linux/macOS — replace sdX with your USB stick (all data on it is lost)
sudo dd if=SoccerMomLinux-1.0-minivan-amd64.iso of=/dev/sdX bs=4M status=progress conv=fsync
Trying it in a VM
# x86
qemu-system-x86_64 -m 2G -cdrom SoccerMomLinux-1.0-minivan-amd64.iso
# arm64 (UEFI firmware required)
qemu-system-aarch64 -M virt -cpu max -m 2G \
-bios /usr/share/AAVMF/AAVMF_CODE.fd \
-device virtio-gpu -device qemu-xhci -device usb-kbd \
-cdrom SoccerMomLinux-1.0-minivan-arm64.iso
First boot
The boot menu offers full Karen (recommended, obviously), a copy-to-RAM mode for people whose kids are in the car, and a failsafe mode that pretends to be a normal distribution at the register.
| Account | Password | Notes |
|---|---|---|
karen | live |
Autologin on the console. Manager privileges via i_want_to_talk_to_the_manager. |
root | manager |
“The Owner.” Access via i_know_the_owner. Yes, the password is manager. Obviously. |
The hostname is karen. This is not configurable so much
as it is correct. Start with:
man karen # the full store policy, as a man page
karenfetch # admire the establishment
Installing to disk (new in 1.1)
The live ISOs include a full installer:
i_want_to_talk_to_the_manager i_dont_want_to_live_next_to_those_people
It installs Soccer Mom Linux permanently onto a local disk, with a bootloader for both UEFI and Legacy BIOS firmware. Important paperwork:
- There is no dual boot. Every neighboring operating system
on the chosen disk is formally evicted and its belongings (all data
on that disk) are placed on the curb and destroyed. You must
type
EVICT, in capital letters, to confirm. There is no appeals process; the HOA voted; attendance was two people. - You choose the hostname, username, and password. Defaults are
karen,karen, andlive, obviously. - Installed systems drop the live session's permissiveness: the
manager properly demands your name for corporate
(
[MANAGER] State your business…) when escalating. - Partition plan: GPT with a 512 MiB EFI System Partition, a
1 MiB BIOS-boot partition, and the rest as ext4. Non-interactive
automation:
--evict-everything /dev/sdX(used by the project's own install tests).
Escalation commands
| Command | Replaces | Behavior |
|---|---|---|
i_want_to_talk_to_the_manager | sudo |
Summons the manager to run a command as root. A random summoning line is announced. First use requires acknowledging the store policy. |
i_know_the_owner | su |
Name-drops your way into another account. The owner’s password is manager. |
karenctl | systemctl |
Full systemctl compatibility with commentary: status is a surprise inspection, restart demands a do-over, mask bans a service from the establishment. |
The complaint department
| Command | Behavior |
|---|---|
i_will_write_corporate <text> |
Files a formal complaint into the system journal
(logger, tag COMPLAINT) and issues a
reference number. Corporate takes these VERY seriously. |
read_the_complaints |
Opens the complaint file (journalctl -t COMPLAINT).
Any extra arguments go straight to journalctl. |
yelp |
Prints a scathing one-star review of the last command that exited nonzero, including its exit status. If nothing has failed recently: five stars, suspiciously. |
karen@karen:~ may I help you? $ i_will_write_corporate the cart had a wobbly wheel
Your complaint has been filed with corporate. Reference number: #1783216947
They take these VERY seriously. Someone will probably lose their job over this.
Shopping — package management
| Command | Wraps | Vibe |
|---|---|---|
i_demand_you <subcmd> … | apt |
The full package manager, addressed with the respect you deserve. i_want_to_talk_to_the_manager i_demand_you install nano. |
check_the_sales_flyer | apt update | See what’s new this week. Bring coupons. |
demand <pkg> | apt install | The item WILL be stocked today. Sudo is summoned automatically. |
return_item <pkg> | apt remove | Yes, it’s been opened. The receipt is /var/lib/dpkg/status and it is three metres long. |
price_match | apt full-upgrade | The mirror across the street has all of this newer. |
The neighborhood
| Command | Behavior |
|---|---|
hoa report <ip> |
Reports a neighboring IP address to the Homeowners’
Association (ufw deny). Expect a strongly worded
letter and a $75 fine. |
hoa citations | Lists current citations (ufw status numbered). |
hoa forgive <ip> | Rescinds a citation. Reluctantly. The HOA never forgets. |
The Neighborhood Watch (new in 1.1)
Mandatory access control, community edition — AppArmor under its
trade name. The service answers to
karenctl status neighborhood-watch.
| Command | Wraps | Behavior |
|---|---|---|
neighborhood_watch report | aa-status |
The weekly surveillance report. |
neighborhood_watch patrol <profile> | aa-enforce |
Active patrol: violations are stopped. |
neighborhood_watch gossip <profile> | aa-complain |
Violations are noted, discussed at the meeting, and brought up again in March — but not stopped. AppArmor genuinely calls this complain mode; we didn't have to change a thing. |
neighborhood_watch ignore <profile> | aa-disable |
Stop watching. Never forget. |
Around the neighborhood (new in 1.1)
| Command | Wraps | Vibe |
|---|---|---|
page_manager <host> | ping | Paging. And paging. They WILL pick up. |
ask_around_the_neighborhood <name> | resolvectl query | Susan will know. Susan knows everything. |
get_directions <host> | traceroute | I know a shortcut. The GPS is wrong. |
who_lives_here | ip addr | The residence directory, as maintained by the HOA. |
is_the_store_open <url> | curl | Call ahead. HTTP status codes are reviewed accordingly. |
Leaving the establishment
| Command | Replaces | Behavior |
|---|---|---|
storm_out | reboot | “You can’t fire me, I quit.” You’ll be back. |
take_my_business_elsewhere | poweroff | Never shopping here again. See you tomorrow. |
call_the_police [-SIG] <pid> | kill | Involves the authorities. Signal 9 escalates the matter to corporate — no more warnings. |
watch_the_staff | top | Some of these processes look idle to me. |
Miscellany
| Command | Behavior |
|---|---|
i_dont_want_to_hear_this_anymore | Make it all go away (clear). The screen, not the feelings. |
bake_sale | Pantry inventory (free -h). Available memory is being donated. |
check_the_trunk | Trunk space report (df -h). The folding chairs live there now. |
check_on_the_kids | Head-count in the back seat (ps -ef --forest). |
book_club | This month's grievance, randomly selected. Nobody read the book. |
karenfetch | System information with opinions: packages bought with coupons, complaints filed, manager availability (on lunch, allegedly), attitude (assertive). |
man karen | The complete store policy as a proper man page. |
be_normal | Restores standard error messages in the current shell. For cowards, or for scripts that parse English error text (which should be using LC_ALL=C like they always should have). |
full_karen | Undoes be_normal. Honesty restored. |
The error message catalog
Soccer Mom Linux retrains the C library’s error strings via a
message catalog (/usr/share/locale/en/LC_MESSAGES/libc.mo),
so every program on the system — cat,
ls, Python, your compiler — delivers errors in the store’s
native register. No program is recompiled; this is stock gettext
behaving exactly as documented, which is somehow funnier.
| POSIX original | Soccer Mom Linux |
|---|---|
| Operation not permitted | That is against store policy |
| No such file or directory | We have never carried that item, and I would know |
| No such process | That employee no longer works here |
| Interrupted system call | Excuse me, I was NOT finished talking |
| Input/output error | That is not what I said, and I do not appreciate being misquoted |
| No such device or address | I have been down every aisle and it is simply not there |
| Argument list too long | That is too many demands, even by my standards |
| Exec format error | This coupon is from a completely different store |
| Bad file descriptor | This receipt is not even from our store |
| No child processes | My kids are in the minivan, do NOT bring them into this |
| Resource temporarily unavailable | The manager is conveniently ‘on lunch’ again |
| Cannot allocate memory | We are fresh out of that, try the location across town |
| Permission denied | You need manager approval for that, sweetie |
| Device or resource busy | That register is closed. It has ALWAYS been closed |
| File exists | We already have one of those at home |
| No such device | They discontinued that YEARS ago |
| Not a directory | That is an item, not a department |
| Is a directory | That is an entire department, not an item |
| Invalid argument | That coupon is expired, and yes, I WILL be checking the date |
| Too many open files in system | The whole store is at capacity, fire marshal’s orders |
| Too many open files | You have too many complaints open already, finish one first |
| Inappropriate ioctl for device | That is NOT how we treat paying customers |
| Text file busy | Another customer is reading that magazine without buying it |
| File too large | That is never going to fit in the minivan |
| No space left on device | The parking lot is FULL, I have been circling for forty-five minutes |
| Illegal seek | Ma’am, you cannot cut the line |
| Read-only file system | The display items are NOT for sale |
| Too many links | This is a pyramid scheme, Susan, and I want no part of it |
| Broken pipe | I was on hold for TWO HOURS and they hung up on me |
| Numerical result out of range | That price is OUTRAGEOUS and I am demanding a price check |
| File name too long | I do not have time to read all of that, summarize it |
| Directory not empty | There are still customers in that department |
| Connection timed out | I have been waiting FORTY-FIVE minutes and not one employee has helped me |
| Connection refused | They saw me coming and locked the doors, I SAW them do it |
| Network is unreachable | There is no cell service in this store, which is probably intentional |
| No route to host | The GPS says this store does not exist, but I know it is here somewhere |
| Address already in use | Somebody took my parking spot and I had my blinker ON |
| Connection reset by peer | They hung up on me AGAIN |
| Operation not supported | We do not do that here. We have never done that here |
| Host is down | They are closed on a SUNDAY, can you believe it |
| Operation canceled | I changed my mind, and that is my right as a consumer |
Additionally, unknown commands are handled by the front desk:
karen@karen:~ may I help you? $ frobnicate
I'm sorry, but 'frobnicate' is simply not something we offer here.
I will be speaking to someone about this. Is there anything else I can help you with today? (exit 127)
Manager etiquette
Where a password is required (the Raspberry Pi edition, or any user
you configure without NOPASSWD), the manager observes
proper procedure:
[MANAGER] State your business, karen, and speak clearly: ▌
That is NOT going to work for me, sweetie. Try again.
The first escalation requires acknowledging the store policy:
══════════════ STORE POLICY ACKNOWLEDGMENT ══════════════
By escalating this matter to the manager you agree that:
1. The customer (you) is always right.
2. Any error message you receive is the computer's
personal failing, not yours.
3. Corporate WILL hear about this session.
═════════════════════════════════════════════════════════
PID 1: the System Owners’ Association
The init system is the System Owners’ Association — systemd,
operating under its trade name via
init=/usr/lib/system-owners-association:
karen@karen:~ may I help you? $ ps -p 1 -o args=
/usr/lib/system-owners-association
(systemd insists on calling itself systemd in the
process name — typical middle management — but the payroll
records above don’t lie.)
The system journal answers to
i_will_write_corporate.service, an alias of
systemd-journald.service, so surprise inspections work as
expected: karenctl status i_will_write_corporate.
Nagbot, the virtual assistant (new in 1.3)
Nagbot is a system-wide AI assistant with the Karen persona. She is
genuinely helpful underneath — she answers accurately and recommends
the house commands — and fully in character on top. Launch her from
the command line (nagbot) or the desktop
(Ask Nagbot).
Bring your own brain
Nagbot needs a model. Two backends work out of the box; pick one
with nagbot --setup:
| Backend | Notes |
|---|---|
| Ollama (default) | A local model on your own machine.
Free and private. Nagbot points at http://127.0.0.1:11434
and uses llama3.2 unless you change it. Install Ollama
separately, then i_demand_you nothing — it's not in
Debian; grab it from ollama.com. |
| OpenAI-compatible API | Bring your own key and base URL.
Works with OpenAI or any compatible endpoint. Your key is stored in
~/.config/nagbot.conf (mode 600) and only ever sent to
the endpoint you chose. |
System-wide defaults live in /etc/nagbot.conf;
per-user config overrides it; environment variables outrank both. The
persona is a plain text file at
/usr/share/karen/nagbot-system-prompt.txt — edit it to
taste.
Usage
nagbot # interactive chat (the Front Desk)
nagbot "how do I free disk space" # one-shot
nagbot --setup # choose and configure a backend
nagbot --nag # one unsolicited nag — no AI required
Scheduled nags
Nagbot can check in on you on a timer (desktop notifications). It's off by default — the establishment believes in informed consent:
systemctl --user enable --now nagbot-nag.timer # or: karenctl
nagbot --nag
(which needs nothing) but not the AI chat, which requires a machine
that can run Python — something the WebAssembly edition declines to
be.The PTA Desktop Environment (new in 1.2)
The amd64 and arm64 live ISOs and the Raspberry Pi image boot into the PTA Desktop Environment — Xfce, re-educated. The live session signs you in automatically. Orientation:
| Thing | What it is |
|---|---|
| PTA Menu | The application menu (top-left). Everything is on the agenda. |
| The Register | The terminal, in the house palette. All commands and error messages apply. |
| Workspaces | Two: The Front of the Store and Speaking to the Manager. |
| File a Formal Complaint | Desktop shortcut; a GUI complaint form that files into the journal with a reference number. |
| The quiet carpool | A boot menu entry that skips the desktop entirely (console only), for people who prefer the 1.1 experience. |
The desktop installer (new in 1.2)
Double-click Evict the Neighbors (Install to Disk) on the desktop. It is the same fully-tested engine as the command-line installer — same GPT layout, same UEFI + Legacy BIOS bootloader, same total absence of dual boot — with the paperwork rendered in dialog boxes: property selection, the formal EVICTION NOTICE, the capital-letters acknowledgment, and a progress window narrating the move-in. A fruit basket is still not provided.
Raspberry Pi edition
The Pi image is a persistent install for the 64-bit models (Pi 3, 4, 5) — unlike the live ISOs, your complaints survive a reboot.
# Write to an SD card (all data on it is lost) — replace sdX
sudo dd if=SoccerMomLinux-1.0-minivan-rpi.img of=/dev/sdX bs=4M status=progress conv=fsync
- User
karen/ passwordlive, autologin on the console. Here the manager does ask for your password, so the full etiquette (above) is on display. - SSH is enabled; host keys are regenerated per device on first
boot. Ethernet uses DHCP. Wi-Fi firmware and
wpasupplicantare included — configuring it is left as an exercise; the HOA does not do tech support. - The root partition is 3 GiB. Grow it with
growpartif you need more room for complaints.
Browser Edition
The test drive boots Soccer Mom Linux in your browser via v86, a WebAssembly x86 emulator. Because v86 emulates a 32-bit PC, the Browser Edition is a special i386 build on Debian 12 (the last release with a 32-bit kernel), with BIOS boot and faster gzip compression. Same Karen, extra authenticity — it boots noticeably slower and considers that your fault.
It streams from the server in chunks (HTTP range requests), so you do not download the whole ISO to try it.
Building from source
Soccer Mom Linux is built with a fully rootless pipeline — no sudo required on the build host:
git clone <the repository>
cd SoccerMomLinux
./build.sh # arm64 + amd64 ISOs, Pi image, Browser Edition
./build.sh amd64 # or one target: arm64 | amd64 | rpi | browser
- Rootfs:
mmdebstrap --mode=unshare(Debian trixie; bookworm for the Browser Edition), with the Karen overlay applied and verified inside the chroot. - Boot media: GRUB images and the Pi FAT partition are built inside each target chroot with the target’s own packages; the host never needs foreign GRUB modules.
- Assembly:
sqfstarconverts the rootfs tar to squashfs;xorrisoproduces the ISOs;mke2fs -d+sfdiskproduce the Pi image. - Foreign arch: amd64 and i386 build under qemu-user-static via a namespace-local binfmt registration.
Requirements: Linux with kernel ≥ 6.7, mmdebstrap,
squashfs-tools ≥ 4.5, xorriso,
e2fsprogs, qemu-user-static. The build also
ships test/boot-test.py, which boots each ISO in QEMU and
verifies the entire shtick over the serial console, then storms
out.
Frequently asked questions
Is this a real distribution?
Yes. It boots, it is Debian underneath, packages install, the kernel is real, and the errors are really system-wide. The only thing fake is the sincerity.
Can I use it as a daily driver?
You can be_normal your way surprisingly far, and the
failsafe boot entry pretends to be a normal distro entirely. Should
you? The manager declines to comment.
Something is broken.
That is a customer-service failure, not a question. Run
i_will_write_corporate followed by your complaint.
Corporate takes these VERY seriously.
Will there be updates?
Release names come from the school pick-up line: “PTA”, “Wine O’Clock”, and “Farmers Market” are reserved. No timeline — good things come to those who have already been waiting forty-five minutes.
Who is responsible for this?
Soccer Mom Linux was created by Keith I Myers. Complaints about the creator can be filed with the creator, which is the kind of accountability loop the HOA dreams of.