A Linux distribution with a macOS-style desktop, built on a Debian 12 core.
The build produces a single installable, bootable image: Sarbs.iso.
Download Sarbs · Release notes
Sarbs is not macOS and does not contain any Apple code. macOS is closed, proprietary software; redistributing it — or a modified copy of it — is not something this project does or can do. What Sarbs does is reproduce the experience: the layout, the interaction model, and the visual language of a Mac desktop, on top of a fully free Debian system.
| Base | Debian 12 "bookworm", amd64 |
| Desktop | Xfce 4.18, restyled as the Sarbs shell |
| Look | WhiteSur GTK / icon / cursor themes |
| Menu bar | Xfce panel docked to the top, translucent, Sarbs menu at the left, clock and status icons at the right |
| Dock | Plank, bottom-centre, with zoom-on-hover |
| Windows | Traffic-light buttons on the left, centred titles, rounded corners, soft shadows (picom) |
| Login | LightDM with a Sarbs greeter on the Aqua wallpaper |
| Boot | Plymouth splash with the Sarbs mark |
| Installer | Debian Installer (graphical and text), launched from the live desktop |
The live session logs in automatically as user sarbs, hostname sarbs.
The image cannot be assembled natively on Windows — it needs loop devices, a chroot and a real Linux filesystem. The build therefore runs inside a privileged Debian container, and only the finished ISO is written back to the host.
- Docker Desktop (WSL 2 backend), running
- ~25 GB of free disk space
- A working internet connection (the build downloads ~2 GB of packages)
- 20–60 minutes, depending on the machine and the mirror
.\build.ps1Useful switches:
.\build.ps1 -Rebuild # rebuild the builder container with no layer cache
.\build.ps1 -Shell # open a shell inside the builder for debuggingdist\Sarbs.iso the installable image
dist\Sarbs.iso.sha256 its checksum
dist\build.log full live-build output (keep this if a build fails)
The build container is named sarbs-build and is deliberately not removed
when it exits. Writing a multi-gigabyte file onto a Windows bind mount is
unreliable under Docker Desktop — plain cp fails with Cannot allocate memory — so the builder streams it with dd, and if even that fails it leaves
the ISO inside the container for build.ps1 to pull across with docker cp.
Never run
docker start sarbs-buildto "resume" a build. That re-runs the entrypoint from the top, which wipes the work tree and the finished ISO with it. Start a fresh build with.\build.ps1instead.
Once dist\Sarbs.iso exists you can reclaim the ~20 GB the container holds:
docker rm sarbs-buildIn a VM (recommended first): create a VM with 4 GB RAM, 25 GB disk, EFI or
BIOS firmware, and attach Sarbs.iso as the boot medium.
On real hardware: write the ISO to a USB stick with Rufus or Balena Etcher — the image is isohybrid, so a raw write in "DD mode" works. Boot from the stick and pick from the menu:
- Sarbs Live — try the desktop without touching the disk
- Graphical install — install Sarbs onto the machine
- Install — the same, in text mode
Installing overwrites the target disk. Back up anything you care about first.
auto/ live-build entry points (config / build / clean)
config every lb config switch that defines Sarbs
branding/ source artwork, rendered to PNG at build time
sarbs-logo.svg the Sarbs mark (app icon, desktop icon, watermark)
sarbs-wallpaper.svg the "Aqua" desktop wallpaper
sarbs-boot-splash.svg boot menu and Plymouth splash
sarbs-menu-glyph.svg monochrome mark for the menu bar (16 px)
fan-package.svg the .fan document icon
config/
package-lists/ what gets installed into the image
sarbs-desktop.list.chroot
sarbs-live.list.chroot
sarbs-installer.list.chroot
hooks/normal/ run inside the chroot, in order
0100-sarbs-branding os-release, hostname, GRUB, Plymouth theme
0200-macos-theme fetches and installs WhiteSur, with a fallback
0300-sarbs-dock builds the Plank dock from apps that exist
0400-sarbs-installer rebrands the Debian Installer launcher as Sarbs
0500-fan-format registers .fan as the system package format
0600-no-screen-lock stops anything from locking the live session
0900-sarbs-cleanup trims docs, caches and logs before squashing
includes.chroot/ files copied verbatim into the live filesystem
etc/skel/ the default user's desktop configuration
.config/xfce4/panel/whiskermenu-1.rc the Sarbs menu button
etc/xdg/picom.conf compositor: shadows, blur, rounded corners
etc/lightdm/ greeter appearance
usr/bin/sarbs-first-run per-user setup on first login
usr/bin/sarbs-compositor picom with a backend the machine can drive
usr/bin/fan the .fan package tool
usr/bin/fan-open what a double-clicked .fan runs
usr/bin/sarbs-about "About This Mac", Sarbs edition
docker/
Dockerfile the build environment
entrypoint.sh renders artwork, stages bootloaders, runs live-build
build.ps1 the Windows entry point
dist/ build output (created on first run)
Add or remove software — edit config/package-lists/sarbs-desktop.list.chroot.
One Debian package name per line; # comments are allowed.
Change the wallpaper or logo — replace the SVGs in branding/. They are
rendered to every size the system needs at build time, so no PNG editing is
required.
Change the dock — edit the SLOTS list in
config/hooks/normal/0300-sarbs-dock.hook.chroot. Each slot lists candidate
desktop-file ids and the first one present wins; a slot with no match is
skipped with a warning rather than leaving a broken icon.
Change window button order — button_layout in
config/includes.chroot/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml.
CHM| puts close / hide / maximise on the left, macOS style.
Change the release name — auto/config (--iso-*, --image-name) plus the
os-release block in config/hooks/normal/0100-sarbs-branding.hook.chroot.
After any change, run .\build.ps1 again.
Sarbs has its own application package. macOS has .dmg, Windows has .msi,
Sarbs has .fan -- download one, double-click it, and the Sarbs Installer asks
before it touches anything.
fan info Photos.fan # what is this
sudo fan install Photos.fan # install it
fan list # what is installed
sudo fan remove com.example.photosA .fan is a zstd-compressed tar archive with a fan.json manifest, carrying
either a self-contained application tree or a set of .deb files for apt. Any
existing Debian package can be turned into one:
fan wrap google-chrome-stable_current_amd64.deb -o Chrome.fanThe full specification is in docs/fan-format.md, and on a
running system at /usr/share/doc/sarbs/fan-format.md.
| Shortcut | Action |
|---|---|
Super + Space |
Application finder (Spotlight-ish) |
Super + E |
File manager |
Super + T |
Terminal |
Super + Q |
Close window |
Super + L |
Lock screen |
Super + ↑ / ↓ |
Maximise / minimise |
Super + ← / → |
Tile left / right |
Ctrl + Shift + 3 |
Screenshot, full screen |
Ctrl + Shift + 4 |
Screenshot, region |
Each item below was checked by booting the ISO in a VM, not by reading the config:
- boot menu artwork does not collide with the menu entries
- the Aqua wallpaper is applied on the real output name (
monitorVirtual1under VirtualBox, not themonitor0a static config would guess) - the desktop launcher reads Install Sarbs and carries the Sarbs mark
- the menu bar is light and translucent — picom falls back to
xrenderwhere there is no OpenGL - window buttons are close / minimise / maximise on the left, titles centred
neofetchreportsOS: Sarbs 1.0 (Aqua),Theme: WhiteSur-Light,Icons: WhiteSursarbs-aboutopens and reports the right kernel, CPU, memory and disk
Three things are fixed in this tree but not yet in a built ISO — they need
one more .\build.ps1:
- the Sarbs menu-bar glyph.
xfce4-whiskermenu-pluginignores thebutton-iconset in thexfce4-panelxfconf channel; it reads~/.config/xfce4/panel/whiskermenu-1.rc, now shipped in/etc/skel. - the Plymouth boot splash. initramfs-tools runs its trigger during package
installation, before the branding hook sets the theme, so the built image
still boots Debian's splash. The hook now runs
update-initramfs -u. - the Install Sarbs desktop icon appeared on one boot and not the next —
a race in
sarbs-first-runthat has not been traced to its root cause. The installer is still reachable from the boot menu and the applications menu.
- Theme fetching needs the network. The WhiteSur themes are cloned from
GitHub during the build. If that fails the image still builds and boots — it
falls back to Adwaita plus Papirus, and
sarbs-first-runpicks whichever themes are actually present. Checkdist/build.logforW: [sarbs]lines. - The screen never locks by itself. live-config leaves the session user
with no usable password, so a lock would strand you at a greeter asking for
a password that does not exist -- reproduced on a built image, where "live",
an empty string and the username were all rejected. Automatic locking and
blanking are switched off, and the live user is given the password
sarbsso a manual lock is still escapable. - In a VM the desktop follows the window. The VirtualBox, SPICE and VMware guest drivers are installed, so resizing the window or going full screen resizes the desktop with it. Without them a guest is stuck at the virtual card's boot resolution.
- amd64 only. No arm64 image is configured.
- The image is 2.06 GB, just over GitHub's 2 GiB per-file release limit, so
v1.0 ships as two parts.
printer-driver-allhas since been replaced with a targeted driver set, which should bring the next build under the limit and back to a single file. - Secure Boot is not signed. Disable Secure Boot, or enrol your own keys.
- The
sarbs.exampleURLs inos-releaseare placeholders.
The Sarbs configuration in this repository is proprietary. Copyright (c) 2026 Dean Avraham, all rights reserved — see LICENSE. The source is published for reference and review; no permission is granted to copy, modify or redistribute it. Ask the copyright holder if you want to do more than read it.
Sarbs.iso is a different matter. The image is assembled from Debian and
from the WhiteSur themes, which carry their own licences — mostly GPL, LGPL,
MIT and BSD (/usr/share/doc/*/copyright on a running system; the WhiteSur
GTK, icon and cursor themes are GPL-3.0 by
vinceliuice). Those terms attach to the
built image no matter what the licence above says, and the copyleft ones
oblige anyone who distributes the image to pass the same freedoms — source
code included — on to the recipient.
Apple, macOS and the Apple logo are trademarks of Apple Inc.; Microsoft and Windows are trademarks of Microsoft Corporation; Debian is a registered trademark of Software in the Public Interest, Inc. Sarbs is an independent project, not affiliated with, authorised by, or endorsed by any of them, and contains none of their code, artwork, fonts or sounds. Do not add any.