Workstation Template
Marchyo includes a workstation template that provides a complete developer setup with desktop environment, development tools, and sensible defaults.
Getting started
Section titled “Getting started”1. Initialize the template
Section titled “1. Initialize the template”nix flake init -t github:Jylhis/marchyo#workstation2. Generate hardware configuration
Section titled “2. Generate hardware configuration”nixos-generate-config --show-hardware-config > hardware-configuration.nix3. Customize configuration.nix
Section titled “3. Customize configuration.nix”Edit the generated configuration:
- Change
networking.hostNameto your workstation name - Update
marchyo.users.developerwith your details - Set
marchyo.timezone/marchyo.defaultLocaleif the defaults (Europe/Zurich,en_US.UTF-8) don’t fit - Development tooling is a single switch — set
marchyo.development.enable = falseif you don’t want it
4. Test in a VM (optional)
Section titled “4. Test in a VM (optional)”nixos-rebuild build-vm --flake .#workstation./result/bin/run-workstation-vm5. Build and switch
Section titled “5. Build and switch”sudo nixos-rebuild switch --flake .#workstationWhat’s included
Section titled “What’s included”Desktop environment
Section titled “Desktop environment”- Hyprland (Wayland compositor) with all Marchyo customizations
- Ghostty terminal
Development tools
Section titled “Development tools”- Editors — Emacs by default; switch via
marchyo.defaults.editor(emacs, vscode, vscodium, zed) andmarchyo.defaults.terminalEditor(emacs, neovim, helix, nano) - Version control — Git with Git LFS, GitHub CLI
- Containers — rootless Podman with a
dockercompatibility shim, buildah, skopeo - Virtualization — QEMU/KVM via libvirtd
- Build & debug — gnumake, cmake, gcc, jq/yq, nmap, tcpdump
Terminal enhancements
Section titled “Terminal enhancements”- Starship prompt
- Zoxide (smart
cd) - fzf (fuzzy finder)
- ripgrep (fast
grep) - fd (fast
find)
Customization tips
Section titled “Customization tips”Adding programming languages
Section titled “Adding programming languages”environment.systemPackages = with pkgs; [ python3 nodejs rustc cargo go jdk17];VS Code extensions
Section titled “VS Code extensions”programs.vscode = { enable = true; extensions = with pkgs.vscode-extensions; [ ms-python.python rust-lang.rust-analyzer ];};Using Docker instead of Podman
Section titled “Using Docker instead of Podman”marchyo.development.containers.backend = "docker";See Feature Flags for the docker group trade-off.
Project-specific dev shells with direnv
Section titled “Project-specific dev shells with direnv”marchyo.development.enable already installs direnv with nix-direnv. In your project directory, create a .envrc:
use flakeMulti-monitor setup
Section titled “Multi-monitor setup”Describe your outputs in marchyo.monitors (see Monitors):
marchyo.monitors = [ { output = "DP-1"; mode = "1920x1080@60"; position = "0x0"; } { output = "HDMI-A-1"; mode = "1920x1080@60"; position = "1920x0"; }];Extra environment variables
Section titled “Extra environment variables”env entries must use the two-argument form. The legacy hyprlang shape
({ n = ...; v = ...; }) renders as a single-table call that aborts
Hyprland’s config load, so Marchyo rejects it at eval time:
wayland.windowManager.hyprland.settings.env = [ { _args = [ "HYPRCURSOR_THEME" "Bibata-Modern-Classic" ]; }];Updating
Section titled “Updating”nix flake updatesudo nixos-rebuild switch --flake .#workstation