📜 System Design & Composition
In this platform, a "system" is not a static list of packages. It is a dynamic product composition built by layering NixOS modules. This ensures that the headless core remains secure and lean, while the graphical product adds rich functionality on top.
🧱 The Composition Policy
We follow a strict "No Leakage" policy between layers:
- Headless Baseline: The
workstationprofile must remain fully functional without any X11 or Wayland dependencies. It owns security, filesystem, and network stack logic. - Graphical Layer:
workstation-guiimports the headless baseline and adds the UI stack (Hyprland, Wayland tools, fonts). - Application Layer: Desktop applications (Browsers, Office, Communication) are scoped strictly to the GUI profile. They must not appear in the core system modules.
🧩 Module Structure
To keep the codebase maintainable, modules are organized by their technical domain:
nixos/modules/core/: Essential platform logic (Boot, Security, Users).nixos/modules/storage/: Filesystem and disk encryption (Disko).nixos/profiles/: Large-scale system shapes.
Best Practice: Explicit Imports
We avoid "Nix magic" like global auto-discovery of modules. Every module used by a profile must be explicitly imported in its default.nix. This makes the system structure searchable and easy to audit.
📦 Package Selection Policy
We prioritize software that aligns with the following criteria:
- Wayland Native: Preferred over X11 whenever possible.
- Minimal State: Favor tools that keep configuration in the user's home (managed by dotfiles) rather than system-wide global state.
- Explicit Unfree: Unfree packages (like Chrome or Zoom) are permitted in
workstation-guibut must be declared explicitly to maintain awareness of the system's licensing posture.