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 — Docker with docker-compose, buildah, skopeo, lazydocker
- 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 Podman instead of Docker
Section titled “Using Podman instead of Docker”virtualisation.podman = { enable = true; dockerCompat = true; defaultNetwork.settings.dns_enabled = true;};Project-specific dev shells with direnv
Section titled “Project-specific dev shells with direnv”programs.direnv = { enable = true; nix-direnv.enable = true;};Then in your project directory, create a .envrc:
use flakeMulti-monitor setup
Section titled “Multi-monitor setup”Override Hyprland monitor configuration in your home config. Entries are tables for the Lua config renderer (the default since Hyprland 0.55):
wayland.windowManager.hyprland.settings = { monitor = [ { output = "DP-1"; mode = "1920x1080@60"; position = "0x0"; scale = 1; } { output = "HDMI-A-1"; mode = "1920x1080@60"; position = "1920x0"; scale = 1; } ];};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 = [ "AQ_DRM_DEVICES" "/dev/dri/by-path/pci-0000:03:00.0-card" ]; }];Updating
Section titled “Updating”nix flake updatesudo nixos-rebuild switch --flake .#workstation