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 — Docker with docker-compose, buildah, skopeo, lazydocker
  • 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
];
};
virtualisation.podman = {
enable = true;
dockerCompat = true;
defaultNetwork.settings.dns_enabled = true;
};
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};

Then in your project directory, create a .envrc:

Terminal window
use flake

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

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