Feature Flags
Feature flags are the primary way to configure Marchyo. Each flag enables a group of related packages, services, and configurations.
Available flags
Section titled “Available flags”| Option | Default | Description |
|---|---|---|
marchyo.desktop.enable |
false |
Desktop environment (Hyprland, Wayland, audio, bluetooth, fonts) |
marchyo.development.enable |
false |
Development tools (git, Docker, buildah, gh, virtualization) |
marchyo.media.enable |
false |
Media applications (Spotify, MPV, etc.) |
marchyo.office.enable |
false |
Office applications (Papers document viewer, Obsidian, Xournal++) |
marchyo.gaming.enable |
false |
Gaming bundle (Steam, GameMode, Gamescope, MangoHUD, Lutris, Heroic) — desktop-only, opt-in |
Cascading defaults
Section titled “Cascading defaults”When you enable marchyo.desktop.enable, related flags are automatically enabled at a lower priority using lib.mkDefault:
# Enabling desktop...marchyo.desktop.enable = true;
# ...automatically enables these (you can override them):# marchyo.office.enable = true;# marchyo.media.enable = true;# marchyo.webapps.enable = true;# marchyo.shell.enable = true;Since these use lib.mkDefault, you can override them:
{ marchyo.desktop.enable = true; marchyo.media.enable = false; # Disable media despite desktop being on}Desktop environment
Section titled “Desktop environment”When marchyo.desktop.enable = true, Marchyo configures:
- Hyprland — Wayland compositor with pre-configured keybindings and window rules. Press SUPER+K for a searchable, on-screen cheat sheet of all active keybindings (toggle with
marchyo.keybindingsHelp.enable) - Audio — PipeWire with PulseAudio and ALSA compatibility
- Bluetooth — Enabled and configured
- Fonts — Curated set of fonts including Nerd Fonts
- Theming — Jylhis design-system theming across GTK, Qt, terminals, TUIs, and Emacs, with runtime theme switching
- Desktop shell: the unified Quickshell shell (bar, launcher, OSD, panels, notifications, lock, and polkit agent; see Desktop Shell).
marchyo.shell.enable = falsekeeps the discrete stack: waybar, Vicinae, SwayOSD, mako, hyprlock, and hyprpolkitagent - Terminal emulator — Ghostty
- Default applications — Configurable via
marchyo.defaults.*
Development tools
Section titled “Development tools”When marchyo.development.enable = true, Marchyo configures:
- Git with Git LFS and GitHub CLI (
gh) - Containers — rootless Podman (with podman-tui) or Docker, plus Buildah and Skopeo
- Virtualization via QEMU/KVM (libvirtd), with virt-manager and virt-viewer
- Build tools — GNU Make, CMake, GCC, pkg-config
- Utilities — direnv (with nix-direnv), jq, yq, network debugging tools (nmap, tcpdump, netcat)
Container backend and the docker group
Section titled “Container backend and the docker group”The container backend is selectable and defaults to rootless Podman:
| Option | Default | Description |
|---|---|---|
marchyo.development.containers.backend |
"podman" |
"podman" (rootless, docker-compatible CLI) or "docker" (rootful daemon) |
marchyo.development.containers.dockerGroup |
false |
Add Marchyo users to the root-equivalent docker group (Docker backend only) |
The default rootless Podman backend needs no elevated group at all: it is
daemonless, runs in a user namespace, and provides a docker compatibility
shim so most workflows keep working unchanged.
To opt into the classic rootful Docker daemon instead:
marchyo.development.containers.backend = "docker";AI coding agent
Section titled “AI coding agent”Pick a default AI coding-agent CLI (installed only when development.enable is
on). The chosen CLI is installed and $AI_AGENT is set to its command:
| Option | Default | Choices |
|---|---|---|
marchyo.defaults.aiAgent |
null |
"claude-code", "codex", "opencode" |
marchyo.development.enable = true;marchyo.defaults.aiAgent = "claude-code"; # installs the CLI, $AI_AGENT = "claude"Gaming
Section titled “Gaming”When marchyo.gaming.enable = true and the desktop is enabled, Marchyo
configures:
- Steam with Remote Play firewall ports, the Steam hardware udev rules, and
the Xbox controller driver (
xpadneo) - GameMode and Gamescope for performance and upscaling
- MangoHUD performance overlay
- Lutris and Heroic launchers plus ProtonUp-Qt
Gaming is not auto-enabled by the desktop, so a plain desktop stays lean. Steam pulls in 32-bit graphics and is x86_64-only, so on other architectures the flag has no effect.
{ marchyo.desktop.enable = true; marchyo.gaming.enable = true;}