Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

cuskiy/nixy

Structured configuration for Nix fleets.

cuskiy/nixy.json
{
"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.

Terminal window
nix flake init -t github:cuskiy/nixy#minimal
base.nix
{ ... }:
{
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 ];
};
}
server.nix
{
nodes.server = {
traits = [ "ssh" ];
schema.base.hostName = "server";
schema.ssh.port = 2222;
};
}
flake.nix
{
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;
};
}
  • [Getting Started]!(docs/getting-started.md)
  • [Guide]!(docs/guide.md)
  • [API Reference]!(docs/api.md)
  • [Advanced]!(docs/advanced.md)

Apache-2.0