Kestrel
Standalone Arch-based Linux distribution with Hyprland + Quickshell and a kernel-level per-task scheduling bridge.
One shaped desktop, one kernel, one scheduling vocabulary: the compositor, terminal and apps share a per-task hint consumed by sched_ext.
Loading latest commits…
Base
ARCH
Desktop
HYPRLAND + QUICKSHELL
Install
ROOTFS COPY
Scheduler
scx_kestrel
Problem
Most distributions hand the desktop a scheduler and leave it there. The compositor, terminal and applications have no shared vocabulary for latency or throughput, so tuning happens through generic priorities and configuration layered on a generic system.
Kestrel starts from Arch and replaces the parts that decide how the desktop feels: the compositor, shell, terminal, kernel and scheduler are built and shipped as one matched system.
What Kestrel is
Kestrel is a standalone Arch-based distribution with one shaped desktop: Hyprland, Quickshell, foot and fish. The compositor, shell, terminal, kernel and scheduler are built and shipped as one matched system.
The kernel, linux-kestrel, is built with Clang ThinLTO on x86-64-v3, full preemption, 1000 Hz, sched_ext, DAMON reclaim and NTSYNC. Hyprland, Quickshell and their shared library closure are rebuilt with the same codegen flags, and the terminal is a foot fork that participates in the hint path.
The scheduling bridge
Kernel hint
linux-kestrel appends sched_ext_hint to struct sched_attr; userspace sets 0..1024 with sched_setattr(2) and SCHED_FLAG_KESTREL_HINT (1ULL << 40).
Userspace library
libkestrel-hint and kestrel-hint set and read the hint for the desktop, terminals, browser and background work.
Broker
kestrel-broker places processes in kestrel-desktop, kestrel-term, kestrel-browser and kestrel-background cgroups.
Scheduler
scx_kestrel, an scx_layered fork, reads the hint through scx_bpf_task_hint and applies its baked layer set; scx_loader/scxctl switch schedulers at runtime.
Heavy packages → kernel
Hyprland
The compositor runs in kestrel-desktop. Frame-critical work carries a latency hint before dispatch, so scx_kestrel can prefer it when the desktop is under load.
Quickshell
The bar, launcher, notifications, OSD and screensaver share the kestrel-desktop class with the compositor; interactive UI stays on the same latency path.
Zen browser
Browser processes run in kestrel-browser. Foreground tabs and input carry the interactive hint; background tabs do not compete for the same budget.
foot terminal
One shared foot --server runs in kestrel-term with per-window clients, so terminal latency is isolated from browser and background work.
Background work
Builds, indexing and agent jobs go to kestrel-background, free to use spare cores without stealing latency from the desktop.
Kernel + scheduler
linux-kestrel exposes the 0..1024 hint through sched_ext; scx_kestrel reads it with scx_bpf_task_hint and combines it with its baked layer set.
Optimization stack
Kestrel does not stop at runtime hints. Hyprland and Quickshell are built x86-64-v3 with Clang ThinLTO, and their shared Hyprland library closure is rebuilt with the same flags instead of Arch's generic -O2, so the desktop has one codegen. qt6-base-kestrel adds Wayland explicit sync (linux-drm-syncobj-v1), and linux-kestrel is Clang ThinLTO on x86-64-v3 with full preemption, 1000 Hz, sched_ext, DAMON reclaim and NTSYNC.
The result is one optimization path from the heavy processes (Zen, Hyprland, Quickshell, foot, Obsidian, OBS) through their cgroup and per-task hint into the scheduler and kernel. Each class and each task carries explicit information instead of relying on ambient priority.
What is in the box
Hyprland manages windows and Quickshell provides the bar, launcher, notifications, OSD, screensaver and theming. foot runs as one shared server in the kestrel-term slice; fish is the login shell. Desktop applications include Neovim, Zen, Obsidian, LibreOffice, Kdenlive and OBS Studio.
A single kestrel CLI covers themes, screenshots, packaging, hardware and system configuration. Updates are rolling Arch, with an automatic Btrfs snapshot before every upgrade and rollback from the boot menu. Agentic tooling is installed through mise.
Measuring
kestrel-bench runs inside the VM and checks the hint bridge end to end: it verifies set/get, broker and foot placement, runs a 3x scx_bpfland vs scx_kestrel A/B, measures the foot worker matrix, and samples peak PSS for the shipped processes. A change that does not move a metric does not ship.
Status
- Live ISO builds and boots the Kestrel kernel with the full desktop and hint bridge
- Hint bridge (linux-kestrel + libkestrel-hint + scx_kestrel) implemented and exercised by kestrel-bench
- Desktop, foot/fish defaults and themed toolchain in place
- Packaging and documentation are still catching up with the implementation
Kestrel ecosystem
The distribution is split across independently versioned repositories that share the same kernel, desktop and packaging contracts.
iso
Live imagearchiso profile, installer and configurator, VM boot helper, signing and release tools.
kernel
Kernellinux-kestrel recipe, hint patch, sched_ext integration and the bench harness.
desktop
Desktop closurekestrel-desktop metapackage and the matched Hyprland library closure.
foot
Terminalfoot fork carrying the Kestrel per-task hint in the terminal process tree.
hyprland
CompositorLean Hyprland source package built x86-64-v3 with ThinLTO.
quickshell
Desktop shellLean Quickshell source package with the QML intercept fixes.
scx
Schedulerscx_kestrel, an scx_layered fork, plus the bake for its layer set.
scx-loader
Scheduler loaderLoader fork that knows scx_kestrel, packaged as scx-tools-kestrel.
qtbase
Qt baseQt base branch adding Wayland explicit sync (linux-drm-syncobj-v1).
packages
Package overlaySigned pacman [kestrel] overlay published to GitHub Pages.
docs
DocumentationArchitecture, packaging, publishing and maintainer documentation.