Skip to content

Workstation Template

Marchyo includes a workstation template that provides a complete developer setup with desktop environment, development tools, and sensible defaults.

Terminal window
nix flake init -t github:Jylhis/marchyo#workstation
Terminal window
nixos-generate-config --show-hardware-config > hardware-configuration.nix

Edit the generated configuration:

  • Change networking.hostName to your workstation name
  • Update marchyo.users.developer with your details
  • Set marchyo.timezone / marchyo.defaultLocale if the defaults (Europe/Zurich, en_US.UTF-8) don’t fit
  • Development tooling is a single switch — set marchyo.development.enable = false if you don’t want it
Terminal window
nixos-rebuild build-vm --flake .#workstation
./result/bin/run-workstation-vm
Terminal window
sudo nixos-rebuild switch --flake .#workstation
  • Hyprland (Wayland compositor) with all Marchyo customizations
  • Ghostty terminal
  • Editors — Emacs by default; switch via marchyo.defaults.editor (emacs, vscode, vscodium, zed) and marchyo.defaults.terminalEditor (emacs, neovim, helix, nano)
  • Version control — Git with Git LFS, GitHub CLI
  • Containers — rootless Podman with a docker compatibility shim, buildah, skopeo
  • Virtualization — QEMU/KVM via libvirtd
  • Build & debug — gnumake, cmake, gcc, jq/yq, nmap, tcpdump
  • Starship prompt
  • Zoxide (smart cd)
  • fzf (fuzzy finder)
  • ripgrep (fast grep)
  • fd (fast find)
environment.systemPackages = with pkgs; [
python3
nodejs
rustc cargo
go
jdk17
];
programs.vscode = {
enable = true;
extensions = with pkgs.vscode-extensions; [
ms-python.python
rust-lang.rust-analyzer
];
};
marchyo.development.containers.backend = "docker";

See Feature Flags for the docker group trade-off.

marchyo.development.enable already installs direnv with nix-direnv. In your project directory, create a .envrc:

Terminal window
use flake

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"; }
];

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" ]; }
];
Terminal window
nix flake update
sudo nixos-rebuild switch --flake .#workstation