Using it
Installation
Status: 1.0. Actively developed and daily-driven by the author, and ready for you to do the same. QEMU below is the quickest way to look around before you commit a disk.
Try it in QEMU first
git clone https://github.com/velle999/SYNAPSE.git && cd SYNAPSE
QEMU_RAM=8G ./archiso/build_scripts/qemu-test.sh # auto-detects the newest ISO
Uses KVM when available, boots UEFI via OVMF (falling back to BIOS), and attaches a persistent 20 GB test disk. Give it 8 GB+ of RAM if you install the 7B model — it will thrash or OOM below that. The ISO itself no longer carries one, which is part of why it boots in QEMU as comfortably as it does. Kernel and boot output are mirrored to the serial console: View → serial0 in the QEMU window.
Install to hardware
Download the ISO from soslinux.org — one file, about 4.6 GB, and resumable if your connection drops. The same image is mirrored on the Internet Archive, which also carries a torrent for it.
Check it before you write it. A download that stopped early still looks like an ISO, still writes to a stick, and fails later in ways that look like bad hardware.
Checking and writing: Linux / macOS
sha256sum -c SynapseOS-<ver>-x86_64.iso.sha256 # shasum -a 256 -c on macOS
sudo dd if=SynapseOS-<ver>-x86_64.iso of=/dev/sdX bs=4M status=progress oflag=sync
Find /dev/sdX with lsblk first, and write to the disk (/dev/sdb), not a
partition on it (/dev/sdb1).
Checking and writing: Windows
In PowerShell, in the folder you downloaded to. It prints True when the
download is intact:
(Get-FileHash -Algorithm SHA256 .\SynapseOS-<ver>-x86_64.iso).Hash -eq (((Get-Content .\SynapseOS-<ver>-x86_64.iso.sha256) -split '\s+')[0]).ToUpper()
(Get-FileHash prints uppercase hex where sha256sum writes lowercase — same
bytes, which is what the .ToUpper() is for.) In Command Prompt instead,
certutil -hashfile SynapseOS-<ver>-x86_64.iso SHA256, and compare it against
the contents of the .sha256 file yourself.
Then write it with Rufus in DD Image mode,
balenaEtcher, or by copying the .iso onto a
Ventoy stick.
Or download it in parts, from GitHub
The release page carries
the same image split into .part* files, because GitHub caps a release
asset at 2 GiB and the ISO is larger than that — three parts, as of 1.0.0,
and the count grows with the image, so count the assets on the release page
rather than trusting this sentence.
The single-file download above is the easier road. This one exists for anyone
who would rather take the image from GitHub, and for when a mirror is
unreachable. Download every .part* file plus
SynapseOS-<ver>-x86_64.iso.sha256 into one folder, then join them. The join is
a plain byte-for-byte concatenation; the checksum is what tells you it worked.
On Linux or macOS:
cat SynapseOS-<ver>-x86_64.iso.part* > SynapseOS-<ver>-x86_64.iso
sha256sum -c SynapseOS-<ver>-x86_64.iso.sha256
To check the parts before joining rather than the ISO after:
sha256sum -c SynapseOS-<ver>-x86_64.iso.parts.sha256.
On Windows, in Command Prompt, in the folder you downloaded to
(Shift+right-click the folder ▸ Open in Terminal, or cd to it):
copy /b SynapseOS-<ver>-x86_64.iso.part00 + SynapseOS-<ver>-x86_64.iso.part01 + SynapseOS-<ver>-x86_64.iso.part02 SynapseOS-<ver>-x86_64.iso
Name every part, in order, joined by + — that line is three parts because
1.0.0 has three, and a release with four needs a fourth name on it. Copying the
line as written for an image with more parts is the failure this section exists
to prevent: it succeeds, and leaves a short ISO.
Do not use a wildcard instead: copy takes wildcard sources in directory order,
which is not guaranteed to be sorted, and parts joined out of order give you a
file of the right size that is quietly corrupt.
/b is not optional. Without it copy runs in text mode and stops at the
first 0x1A byte, which in this image is a few hundred KB in — you get a short
file, no error message, and a stick that does not boot.
If copy /b gives trouble, PowerShell can do the join instead, and it has no
text mode to fall into:
$out = [System.IO.File]::Create((Join-Path $PWD 'SynapseOS-<ver>-x86_64.iso'))
Get-ChildItem 'SynapseOS-<ver>-x86_64.iso.part*' | Sort-Object Name | ForEach-Object {
$in = [System.IO.File]::OpenRead($_.FullName); $in.CopyTo($out); $in.Close()
}
$out.Close()
Check the result with the same command as any other download — a bad join is the most common way a split download goes wrong, and every symptom of it looks like a broken ISO.
Check who built it
The checksum proves the download arrived whole. It does not prove where the image came from: it is served from the same place as the ISO, so anything that could alter one could alter the other. The signature answers that.
curl -O https://soslinux.org/synapseos-release-key.asc
gpg --import synapseos-release-key.asc
gpg --verify SynapseOS-<ver>-x86_64.iso.asc SynapseOS-<ver>-x86_64.iso
A good signature names the key it matched; check that fingerprint against:
6548 9EF5 C20D 0BD9 4211 472B ED33 6DB7 952B 609E
That same fingerprint is committed in the source repository as
archiso/release-key.fingerprint
— a different host, run by somebody else, than the one that served you the
image. Comparing the two is what makes the check worth making.
GnuPG also says the key is not certified with a trusted signature. That is expected and is not a failure — it means you have not told GnuPG you trust this key, only that the signature matches it. Comparing the fingerprint is what closes that gap.
Releases from 0.2.9.5 onward are signed; earlier ones are not. On Windows, Gpg4win gives you the same three commands in PowerShell.
3. Write it to the stick. Any of these work:
| Tool | What to do | Notes |
|---|---|---|
| Rufus | Pick the ISO, leave the defaults, START | When it asks ISO Image mode or DD Image mode, choose DD Image mode. This is a hybrid image; DD mode writes it unaltered, where ISO mode rebuilds the boot files and has no reason to get this one right |
| balenaEtcher | Select image, select drive, Flash | Nothing to configure; it only ever writes raw |
| Ventoy | Copy the .iso onto an existing Ventoy stick |
Pick it from Ventoy's boot menu. Nothing is erased and other ISOs on the stick keep working |
Writing a stick erases it — the image goes on as a raw disk, not as a file. Ventoy is the exception.
Then boot the stick from your firmware's boot menu, usually F12, F11, Esc
or Del at power-on. Secure Boot has to be off, or SynapseOS enrolled — see
Secure Boot.
The image carries no AI model
The ISO carries no AI model, since 0.2.8. That is about 4 GB off the download, and it means the installer asks which model you want instead:
| Choice | Size | Notes |
|---|---|---|
| Mistral 7B Instruct (Q4_K_M) | ~4.4 GB | The recommended one, and what everything is tuned against |
| Phi-3 Mini | ~2.4 GB | Smaller; noticeably weaker answers in the apps built on it |
| Qwen2 0.5B | ~0.4 GB | Tiny. Fine for a machine you are only trying out |
| None | — | Nothing is downloaded; syn model download adds one later |
It is asked on every preset except Minimal, needs a network, and runs near the end of the install so nothing else is stuck behind a 4 GB progress bar. A failed download warns rather than failing the install — the machine boots either way, with the same end state as choosing None.
On the live ISO itself there is no model, so
synapdstarts in shell-assist mode with nothing to load andsyn statusreports "model ✗ not installed". That is expected on live media, not a fault to chase. Building witharchiso/build.sh --with-modelputs one back on the image.
Then run the installer from the live session (syn-install).
Picking a language
It is the first question the image asks. The bootloader carries a Language submenu — fifteen entries, each written in its own language — and choosing one boots with the answer already given. Take the plain entry instead and the live image opens on the same list as its own first screen.
One answer sets all of it: the console keymap, the desktop keyboard layout, the
locale, the console font, the font packs that get installed, the language
synsh speaks, and the installer's own words. The installer does not ask again
twenty minutes later — it reads the answer back.
Both keyboard halves are set, which is not the same as one. KEYMAP= names a
file loadkeys must find and xkb_layout names a layout xkbcommon must
compile, and they disagree on four of the fifteen rows — Swedish is
sv-latin1 to the console and se to the desktop. They can still be changed
separately afterwards.
The installer speaks fourteen languages: English, Deutsch, Français, Español, Português, Italiano, Nederlands, Polski, Русский, 日本語, 中文, 한국어, हिन्दी and العربية. Both installers do — the graphical one draws the same sentences as the text one, from the same catalog, and its own Language page re-translates the window in place if the image booted in the wrong one.
Japanese, Chinese, Korean, Arabic and Hindi cannot be drawn on a text console. A Linux virtual terminal holds at most 512 glyphs and does no text shaping, so the text installer keeps English prose for those five and says so in one line. Everything else about the choice still applies — the locale, both keyboards, the fonts and the installed system are the ones asked for — and the graphical installer and the installed desktop draw all thirteen properly.
What is never translated: the answer keys. [Y/n], [y/N] and typing yes to
confirm a disk wipe stay those letters in every language, because the installer
compares against them.
Choosing what to install
Four presets:
| Preset | What you get |
|---|---|
| Full | Standard plus Steam, Nix, and a wider software shelf |
| Standard (default) | the SynapseOS suite, Firefox, an AI model, Bluetooth, printing, Wine, phone pairing |
| Minimal | the core daemons only — no apps, no software, no model |
| Custom | tick every package yourself |
Custom is every package
Since 0.2.9 there is no unconditional SynapseOS package. Eleven of them used
to be installed whatever you answered — the package manager, the file manager,
the terminal, Settings, Disks, the editor, syn, syn-model, syn-firstboot,
syn-confine and fetch — and Custom could not decline any of them. All
twenty-five are checkboxes on one page now:
SynapseOS packages — everything the system is made of
[x] 1) SYNAPSE UI the desktop [x] 14) Models fetch AI models
[x] 2) synapd the AI daemon [x] 15) First boot first-run setup
[x] 3) synsh the AI shell [x] 16) Sandbox Landlock jail
[x] 4) synguard security watch [x] 17) About OS the OS readout
[x] 5) synnet network policy [x] 18) Arcade pads + overlay
[x] 6) Software package manager [x] 19) cliamp music player
[x] 7) Files file manager [x] 20) Arsenal BlackArch tools
[x] 8) Terminal the terminal [x] 21) Chibi voice companion
[x] 9) Settings system settings [x] 22) Vibe AI coding help
[x] 10) Disks disks + format [x] 23) Wallpapers animated, 317MB
[x] 11) Editor the text editor [ ] 24) Nexus Chat chat (+Firefox)
[x] 12) Updates receives fixes [ ] 25) TEPRIS game (+Firefox)
[x] 13) syn top-level CLI
Toggle [numbers, 'all', 'none', Enter = accept]:
Type the numbers you want to flip, all or none to sweep the page, and Enter
to accept. The same pages appear as checkbox lists in the graphical installer.
What you cannot switch off is what something else you kept depends on. Those are turned back on and named before anything is installed:
| Turning this off | brings back | because |
|---|---|---|
| Terminal | — | synui hard-depends on syntty |
| synapd | — | synnet and Vibe depend on it |
| Sandbox | — | Vibe's shell tool runs inside syn-confine |
| Models | — | syn-firstboot depends on it, and it is what downloads the model you chose |
A checkbox that silently un-ticks itself would be worse than one that was never offered, so the installer prints what it re-ticked and why, before the summary.
Two deselections it stops to warn about, because both cost something you only notice weeks later:
syn-updateoff — the machine has no way to receive another SynapseOS package. Fixing that later means installing it by hand from the ISO.synuioff — SynapseUI is no longer offered on the Desktop page; the answers are KDE, GNOME or no GUI. A profile that asks for bothdesktop = "synui"andcomp.synui = falseis refused by name rather than quietly resolved.
Ordinary software
Five more pages, all of it from the Arch repositories and none of it ours:
| Page | Some of what is on it |
|---|---|
| Web and communication | Firefox, Chromium, Vivaldi, Thunderbird, Discord, Telegram, Signal, KeePassXC, qBittorrent, Syncthing |
| Audio and video | VLC, mpv, OBS Studio, Audacity, Kdenlive, HandBrake, Spotify |
| Office and graphics | LibreOffice, GIMP, Inkscape, Krita, Blender, Calibre |
| Development and admin | VS Code, Neovim, git-lfs, Docker, virt-manager, GParted, btop, FileZilla, Remmina, 7zip + unrar |
| Games, launchers and helpers | Lutris, Prism, RetroArch, Dolphin, PPSSPP, ScummVM, DOSBox, MAME, Protontricks, Winetricks, GOverlay, AntiMicroX, OpenRGB, CoreCtrl |
Firefox is ticked by default on every preset except Minimal. Before 0.2.9 an installed SynapseOS arrived with no web browser at all unless you picked Full, where Nexus Chat happened to pull one in as a dependency.
Steam is not on those pages — it is one of the y/n options below, because it
is the only item that turns on a second architecture ([multilib] and the lib32
tree).
The shelf installs last, in its own transaction, after the system is
complete. A failure there warns and retries one package at a time, so a name
that moved upstream fails alone and is named, instead of taking every SynapseOS
package down with it. Anything that did not land is one
synpkg install <name> away.
Docker and Syncthing are the two whose units are enabled for you; everything else is inert until you open it.
The y/n options
Not packages — a repository, an architecture or a service. Each is asked one at a time because each has a consequence too long for a checkbox:
| Option | Default | What it does |
|---|---|---|
| Bluetooth | on | bluez-utils, and the radio enabled |
| Printing | on | CUPS; the driver is syn printer <vendor> afterwards |
| Wine | on | wine + wine-mono, and .exe/.msi become double-clickable |
| KDE Connect | on | pair a phone |
| Steam | off | + the game stack and CachyOS Proton; enables [multilib] (~3.1 GB) |
| BlackArch | on | the repo and keyring only — no tools installed |
| Nix | off | Nix + Home Manager beside pacman (syn nix) |
Installing from a profile
Every question the installer asks can be answered ahead of time in a file, so an install is reproducible instead of re-typed:
syn-install --config profile.nix # or a plain key=value file
Whatever the profile leaves out is still asked at the machine, so pinning
just the disk layout and the package set is a perfectly good profile. The keys
are semantic (filesystem = "btrfs", never a menu number), the destructive
confirmations each need writing out, and a key that answers nothing is reported
by name at the end rather than ignored.
Full key list and the Nix form: Nix → Install profiles.
/usr/share/syn/nix/profile-example.nix documents every key on the machine.
Install modes
Everything below has been in every release since 0.2.5. On 0.2.4 and earlier the installer had ERASE and ALONGSIDE only, with an ext4 root and GRUB — no filesystem or bootloader choice, no snapshots, no ADVANCED mode, and no swap of any kind.
| Mode | What it does |
|---|---|
| ERASE | Whole-disk install. Destructive. |
| ALONGSIDE | Non-destructive dual-boot — one ext4 root in the largest existing free region, reusing the machine's ESP. Offered on UEFI when the disk already holds an OS and has room |
| ADVANCED | You partition the disk yourself, then tell the installer which partitions to use |
The ESP is mounted, never reformatted on the alongside path, because it carries the other OS's bootloader. So make free space first (shrink the Windows partition from Windows' own disk manager), then install.
Before anything is written, the installer prints the whole plan back — disk,
mode, firmware, filesystem, bootloader, separate /boot, encryption, snapshots —
and asks you to confirm it. Answering no restarts the questions; nothing has
touched the disk at that point.
ADVANCED
For the layouts the automatic paths don't generate: a /home you want kept, an
ESP the alongside conditions rejected, a partition left over from another distro.
It runs a partition editor on the target disk — cfdisk by default, or any of
fdisk/parted/cgdisk/gdisk/gparted that the image actually has — re-reads
the table when you exit, and then asks for:
- the root partition (required)
- the EFI System Partition (UEFI). An existing FAT one is kept by default; formatting it is a question, because on a dual-boot disk that is where the other OS's bootloader lives
- a separate
/boot, when the filesystem + bootloader + encryption combination needs one - a swap partition (optional — blank for none)
Only the partitions you name are formatted. Nothing else on the disk is touched, and it never writes a partition table of its own. Every answer is checked before it is used: a whole disk given where a partition was wanted, something already mounted, anything on the live USB, or a root too small are all refused with the reason, and it asks again rather than aborting the install.
Filesystem, bootloader and encryption are asked on this path exactly as on ERASE, and the same code formats the root — so LUKS and the btrfs subvolume layout are identical to an automatic install.
Filesystems
| Notes | |
|---|---|
| ext4 | The default. Boring in the way a root filesystem should be |
| btrfs | The only one with snapshots. Mounted with zstd:3 compression; lays out @, @home, @snapshots, @var_log, @pkg |
| xfs | Fast on large files. Cannot be shrunk |
| f2fs | Flash-oriented |
Snapshots are a btrfs feature here — they are btrfs subvolume snapshots taken
by snapper. ext4, xfs and f2fs have no equivalent (that would mean LVM thin
snapshots, which this installer does not set up), and the installer says so
rather than silently skipping the question.
Bootloaders
| Firmware | Can boot snapshots | |
|---|---|---|
| GRUB | UEFI + BIOS | yes, via grub-btrfs |
| systemd-boot | UEFI only | no |
| limine | UEFI only | yes, via limine-snapper-sync |
The ESP goes to /boot/efi under GRUB and is /boot under systemd-boot and
limine, which read nothing but the ESP. That also sizes it: 512 MiB for GRUB,
1 GiB for systemd-boot, and 4 GiB for limine with snapshots on — that tool
copies every retained snapshot's kernel and initramfs onto the ESP, roughly
150 MB each, and simply stops adding entries when the partition fills.
With encryption, systemd-boot or limine is the better choice: the kernel
lives on the ESP and only the initramfs unlocks, so no separate unencrypted
/boot partition is needed at all.
Snapshots
Offered when the root is btrfs and the bootloader can boot them. snapper takes
a pre/post pair around every pacman transaction (snap-pac), and the boot menu
grows entries for them. Timeline snapshots are off — hourly snapshots kept
forever are how a btrfs system quietly fills its own disk — and the pacman ones
are capped.
Swap
zram is set up on every install: compressed swap in RAM, sized min(RAM/2,
8 GiB) with zstd. It needs no partition, which is why it can apply to all three
modes — ERASE and ALONGSIDE both give the root everything that is left.
A real swap partition is offered on the ADVANCED path only, for the two things
zram cannot do: hibernate (the image has to survive power-off) and add capacity
that is not itself RAM. Where both exist, zram takes priority and the disk
partition is overflow. An existing swap is not re-made by default — mkswap
changes its UUID, which is what another installed system's fstab and its
hibernation resume= point at.
Full-disk encryption
The ERASE and ADVANCED paths offer LUKS2 on the root filesystem. It is deliberately not offered alongside an existing OS: encrypting into free space works in principle, but shipping an untested variant of the destructive path is worse than not offering it.
/boot is a separate plain partition, not inside the encrypted root. That is
not an oversight:
- Putting
/bootinside LUKS means GRUB must unlock it, and GRUB can only open LUKS2 volumes that use PBKDF2 — not theargon2idthat cryptsetup defaults to and that makes LUKS2 worth using. - The alternatives are weakening the KDF or fighting GRUB's cryptodisk support, and GRUB is already the most fragile part of this distro's boot path.
- A separate
/bootcosts one partition and leaves the initramfs as the only thing that unlocks anything.
The ESP itself can never be encrypted — firmware has to read it.
Manage it afterwards with syn-crypt:
syn-crypt status # is root actually encrypted?
syn-crypt add-key # a second passphrase
syn-crypt change-key
syn-crypt backup-header /run/media/…/luks-header.img
Back the header up. A corrupted LUKS header means the data is gone even with the right passphrase.
syn-cryptrefuses to guess a device — it either takes one explicitly or resolves it from the actually-mounted root, because a LUKS operation on the wrong device destroys a disk.
Requirements
| Arch | x86-64 |
| RAM | 8 GB minimum if you install the 7B model; less if you take a smaller one or none |
| Disk | ~20 GB |
| GPU | Optional. The ISO ships a CPU llama build so it starts anywhere. |
On GPU: the shipped ISO runs synapd on the CPU by design — a CUDA-linked
build needs libcuda.so.1 and would fail to start on any machine without an
NVIDIA driver. After installing, switch to the CUDA package
(synapse-llama-cuda) to get GPU offload. Then verify it, because this
specific thing lied to us for months:
grep -c nvidia /proc/$(pidof synapd)/maps # 0 means you are still on the CPU
See synapd.
After installing
Everything starts on boot:
systemctl status synapd # AI inference daemon
systemctl status synguard # security monitor
systemctl status synnet # network policy
lsmod | grep synapse_kmod # kernel module
cat /sys/kernel/synapse/status
Open a shell and you should see ⚡ AI online. Press Super+C for the
control panel, which lists every keyboard shortcut —
see Keybindings.
Wi-Fi: Super+I, or the bar's network module. Installing over Wi-Fi is
supported.
Make it yours: Super+T themes, Super+W wallpaper,
Super+Shift+P cursors, Super+S
sounds (silent until you turn them on), Super+Shift+A
desktop widgets, Super+E
window effects (off by default on a fresh install).
Secure Boot
Not enabled by default, and enabling it is a deliberate exercise —
see Secure Boot. The one-line version: sbctl cannot enroll
keys until the firmware is in Setup Mode, and rebooting will never put it
there no matter what sbctl's error message implies. You must clear the Platform
Key from the BIOS menu. Run syn-secureboot enroll, which checks this for you.