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) |
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;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 — Stylix-based consistent theming across GTK, Qt, and terminal apps
- Application launcher — Vicinae (see Launcher)
- 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";