cuskiy/nixy
Structured configuration for Nix fleets.
{ "createdAt": "2025-12-03T14:01:13Z", "defaultBranch": "main", "description": "Structured configuration for Nix fleets.", "fullName": "cuskiy/nixy", "homepage": "https://cuskiy.github.io/nixy/", "language": "Nix", "name": "nixy", "pushedAt": "2026-03-18T16:23:00Z", "stargazersCount": 38, "topics": [ "nix", "nixos", "nixos-configuration", "nixos-flake" ], "updatedAt": "2026-03-20T13:03:59Z", "url": "https://github.com/cuskiy/nixy"}Structured configuration for Nix fleets.
Three concepts:
- Schema — default-value tree shared across the configuration
- Traits — named modules that read schema values and produce configuration
- Nodes — targets that select traits, override schema, and yield ready-to-use modules
Output is standard NixOS modules, compatible with nixosSystem.
Quick Start
Section titled “Quick Start”nix flake init -t github:cuskiy/nixy#minimalExample
Section titled “Example”{ ... }:{ schema.base = { system = "x86_64-linux"; hostName = "nixos"; };
schema.ssh.port = 22;
traits.ssh = { schema, ... }: { services.openssh.enable = true; services.openssh.ports = [ schema.ssh.port ]; };}{ nodes.server = { traits = [ "ssh" ]; schema.base.hostName = "server"; schema.ssh.port = 2222; };}{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixy.url = "github:cuskiy/nixy"; };
outputs = { nixpkgs, nixy, ... }@inputs: let cluster = nixy.eval { imports = [ ./. ]; args = { inherit inputs; }; }; in { nixosConfigurations = builtins.mapAttrs (name: node: nixpkgs.lib.nixosSystem { system = node.schema.base.system; modules = [ node.module ]; specialArgs = { inherit name; inherit (node) schema; }; } ) cluster.nodes; };}Documentation
Section titled “Documentation”- [Getting Started]!(docs/getting-started.md)
- [Guide]!(docs/guide.md)
- [API Reference]!(docs/api.md)
- [Advanced]!(docs/advanced.md)
License
Section titled “License”Apache-2.0