{"id":18465556,"url":"https://github.com/numtide/blueprint","last_synced_at":"2025-04-05T04:08:23.992Z","repository":{"id":231303837,"uuid":"780048903","full_name":"numtide/blueprint","owner":"numtide","description":"Standard folder structure for Nix projects","archived":false,"fork":false,"pushed_at":"2025-04-02T18:26:24.000Z","size":814,"stargazers_count":160,"open_issues_count":28,"forks_count":14,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-02T23:55:51.024Z","etag":null,"topics":["buildbot-numtide"],"latest_commit_sha":null,"homepage":"","language":"Nix","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/numtide.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-31T14:58:58.000Z","updated_at":"2025-04-01T06:23:35.000Z","dependencies_parsed_at":"2025-02-05T22:27:22.976Z","dependency_job_id":"c91f0db0-dccf-40be-a675-3fccb899be08","html_url":"https://github.com/numtide/blueprint","commit_stats":null,"previous_names":["zimbatm/blueprint","numtide/blueprint"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numtide%2Fblueprint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numtide%2Fblueprint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numtide%2Fblueprint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numtide%2Fblueprint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/numtide","download_url":"https://codeload.github.com/numtide/blueprint/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247284941,"owners_count":20913704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["buildbot-numtide"],"created_at":"2024-11-06T09:13:33.303Z","updated_at":"2025-04-05T04:08:23.962Z","avatar_url":"https://github.com/numtide.png","language":"Nix","funding_links":[],"categories":["Nix"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# blueprint\n\n\u003cimg src=\"docs/blueprint.svg\" height=\"150\"/\u003e\n\n**Standard folder structure for Nix projects**\n\n*A \u003ca href=\"https://numtide.com/\"\u003enumtide\u003c/a\u003e project.*\n\n\u003cp\u003e\n\u003cimg alt=\"Static Badge\" src=\"https://img.shields.io/badge/Status-experimental-orange\"\u003e\n\u003ca href=\"https://app.element.io/#/room/#home:numtide.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/Support-%23numtide-blue\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003c/div\u003e\n\nblueprint is an opinionated library that maps a standard folder structure to\nflake outputs. It makes common use cases easy both for the author and\nconsumers.\n\nEg:\n\n| path | flake output |\n|-------|------|\n| devshells/ | `devShells.*` |\n| hosts/ | `nixosConfiguration.*` and `darwinConfigurations.*` ... |\n| modules/ | `nixosModules.*` and `darwinModules.*` ... |\n| packages/ | `packages.*` |\n\n## Features\n\nSupport for:\n\n* devshell.nix for your developer env.\n* NixOS\n* nix-darwin\n* home-manager\n* system-manager\n* nix-unit\n* default RFC166 nix formatter with `nix fmt`\n* supports overridable systems with [nix-systems](https://github.com/nix-systems).\n* automatic flake checks from packages, devshells and NixOS configurations.\n\nand more!\n\n## Documentation\n\n* [Getting started](docs/getting-started.md)\n* [Configuring blueprint](docs/configuration.md)\n* [Folder structure mapping](docs/folder-structure.md)\n\n## Rationale\n\nNix is just a tool. It should help you, and stay out of the way. But because\nit's so flexible, everybody goes through a long period where they figure out\nhow to structure their repo. `flake.nix` files become noisy with boilerplate.\n\nBy making a few opinionated choices, we're able to cut 99% of the glue code\nyou would find in most repos. A bit like Ruby on Rails or NextJS did for web\nframeworks, we do it for Nix packages. We map folder and files to flake\noutputs.\n\nIn some ways, this is the spiritual successor to `flake-utils`, my first\nattempt at making flakes easier to use.\n\nBlueprint isn't suitable for complex flakes but it does allow you to easily\nbreak out once your project becomes complicated beyond its capability.\n\n## Design principles\n\n* User workflows come first.\n* KISS. We don't need complicated module systems with infinite recursions.\n* 1:1 mapping. Keep the mapping between attributes predictable.\n\n## Related projects\n\n* [flake-utils](https://github.com/numtide/flake-utils) the OG for flake libraries.\n* [flake-parts](https://flake.parts) uses the Nix module system. It's too complicated for my taste.\n* [std](https://github.com/divnix/std)\n* [snowflake-lib](https://github.com/snowfallorg/lib)\n* [clan-core](https://git.clan.lol/clan/clan-core) is an all-in-one solution to manage your deployments.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnumtide%2Fblueprint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnumtide%2Fblueprint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnumtide%2Fblueprint/lists"}