Skip to content

Latest commit

 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sarbs

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


What Sarbs actually is

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.


Building the ISO

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.

Requirements

  • 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

Run it

.\build.ps1

Useful switches:

.\build.ps1 -Rebuild   # rebuild the builder container with no layer cache
.\build.ps1 -Shell     # open a shell inside the builder for debugging

Output

dist\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-build to "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.ps1 instead.

Once dist\Sarbs.iso exists you can reclaim the ~20 GB the container holds:

docker rm sarbs-build

Installing

In 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.


Project layout

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)

Customising

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 orderbutton_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 nameauto/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.


Installing software: the .fan format

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.photos

A .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.fan

The full specification is in docs/fan-format.md, and on a running system at /usr/share/doc/sarbs/fan-format.md.


Keyboard shortcuts

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

Verified on a running system

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 (monitorVirtual1 under VirtualBox, not the monitor0 a 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 xrender where there is no OpenGL
  • window buttons are close / minimise / maximise on the left, titles centred
  • neofetch reports OS: Sarbs 1.0 (Aqua), Theme: WhiteSur-Light, Icons: WhiteSur
  • sarbs-about opens 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-plugin ignores the button-icon set in the xfce4-panel xfconf 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-run that has not been traced to its root cause. The installer is still reachable from the boot menu and the applications menu.

Known limitations

  • 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-run picks whichever themes are actually present. Check dist/build.log for W: [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 sarbs so 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-all has 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.example URLs in os-release are placeholders.

Licensing and trademarks

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.

About

Sarbs — a macOS-styled Linux distribution built on Debian 12. Builds a bootable, installable Sarbs.iso.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages