Expand description
nix-uri is a rust crate that parses
the nix-uri-scheme
into a flakeref::FlakeRef struct.
Also allows for building a nix-uri through the flakeref::FlakeRef
struct.
Convenience functionality for working with nix flake.nix references (flakerefs).
Provides types for the generic attribute set representation, but does not parse it:
{
type = "github";
owner = "NixOS";
repo = "nixpkgs";
}§Installation
To use nix-uri, add it as a dependency in your Cargo.toml file:
[dependencies]
nix-uri = "0.2.0"or use cargo add:
cargo add nix-uri§Examples
Check out the examples directory, for more information, or run an example:
cargo run --example simple
cargo run --example cli github:nixos/nixpkgsThe uri syntax representation is parsed by this library:
§Example: Parsing from github:nixos/nixpkgs:
let uri = "github:nixos/nixpkgs";
let parsed: FlakeRef = uri.parse().unwrap();
match parsed.kind() {
FlakeRefType::GitForge(forge) => {
assert_eq!(forge.platform, GitForgePlatform::GitHub);
assert_eq!(forge.owner, "nixos");
assert_eq!(forge.repo, "nixpkgs");
assert!(forge.ref_.is_none() && forge.rev.is_none());
}
_ => panic!("expected GitForge"),
}The Display round-trip preserves the original form:
§Example: Round-tripping github:nixos/nixpkgs:
let uri = "github:nixos/nixpkgs";
let parsed: FlakeRef = uri.parse().unwrap();
assert_eq!(uri, parsed.to_string());Structs§
- Flake
Ref - The General Flake Ref Schema
- Forge
Identity - Identity of a git-forge flake ref:
(platform, owner, repo, domain). - GitForge
- A reference into a git forge (
github:,gitlab:,sourcehut:). - Location
Parameters - Query-string parameters that decorate a
FlakeRef. - Resource
Url - A resource-style flake reference (
git+https://...,hg+ssh://...,file+https://...,tarball+https://...).
Enums§
- Flake
RefType - GitForge
Platform - Which git-forge scheme a
GitForgereference uses. Spelled in the URL as the leadinggithub:,gitlab:, orsourcehut:token; also drives the canonical-domain lookup insuper::ForgeIdentity. - NixUri
Error - Failures the parser may produce.
- Parse
Expected - What the parser was looking for when it failed.
- RefKind
- Discriminates the four ref/rev presence states without forcing callers
to read both
FlakeRef::ref_andFlakeRef::revand reason about the cross product. - RefLocation
- Names where a ref or rev is rendered in a
FlakeRef. - Resource
Type - The resource flavour of a
ResourceUrl: which canonical Nix scheme (git+,hg+,file+,tarball+) the URL belongs to. Used to pick the leading scheme token onDisplay. - Transport
Layer - Specifies the
+<layer>component, e.g.git+https://. - Unsupported
Reason - Categorised reason an
UnsupportedURI was rejected.