A sane alternative to nix flakes for project management
root
- .helix
- .zed
- app
- lib
- npins
- test
- .hlint.yaml
- .ignore
- CHANGELOG.md
- LICENSE
- README.md
- cabal.project
- glacie.cabal
- glacie.nix
- package.nix
Glacie: A Sane Alternative to Nix Flakes for Project Management
Glacie provides a straightforward approach to Nix-based project management without the complexity of Nix flakes. It aims to create reproducible builds while maintaining a simpler mental model and workflow.
Features
- Simple project structure with a single entry point (
glacie.nix
) - Compatible with existing Nix tooling
- No special syntax or concepts beyond traditional Nix
Getting Started
Project Structure
A typical Glacie project requires:
- A
glacie.nix
file in your project root - Optional additional Nix files referenced by
glacie.nix
- Some kind of dependency pinning system (we recommend
npins
)
Example glacie.nix
:
{
system ? builtins.currentSystem,
sources ? import ./npins,
pkgs ? import sources.nixpkgs { inherit system; },
}:
{
package = pkgs.callPackage ./package.nix { };
shell = pkgs.mkShell {
packages = [
(pkgs.python3.withPackages (ps: [
ps.numpy
ps.scipy
]))
];
};
}
Usage
Building a Project
To build the default package in a Glacie project:
glacie build
To build a specific attribute from the project:
glacie build --expr 'self.shell'
To build a project at a specific path:
glacie build /path/to/project
License
Glacie is licensed under the LGPL-3.0-or-later.
Contributing
Contributions are welcome! You can find the project repository at: https://hub.darcs.net/weethet/glacie