1
1
mirror of https://github.com/nmattia/niv.git synced 2024-11-07 22:36:53 +03:00
Easy dependency management for Nix projects
Go to file
2019-01-17 23:00:48 +01:00
nix Implement basic CLI 2019-01-17 23:00:48 +01:00
default.nix Implement basic CLI 2019-01-17 23:00:48 +01:00
Main.hs Implement basic CLI 2019-01-17 23:00:48 +01:00
package.yaml Implement basic CLI 2019-01-17 23:00:48 +01:00
README.md Implement basic CLI 2019-01-17 23:00:48 +01:00

niv

A tool for dealing with third-party packages in Nix.

Building

Inside the provided nix shell:

$ # GHCi:
$ snack ghci -p package.yaml
$ # actual build:
$ snack build -p package.yaml

Usage

Global options

  • --versions: path to the vesions.json

NOTES

  • no support for non-json, to enforce convention

Commands

init

[--fetch]

Creates (if the file doesn't exist)

  • nix/versions.json:
{"nixpkgs": { ... }}

*nix/fetch.nix:

...

*default.nix:

with { fetch = import <fetch>; };
let pkgs = import fetch.nixpkgs;
in pkgs.hello

show

[--branch] [--rev] [--owner] [--repo] [--attribute <attribute>] <p1> <p2>... if no attribute (br, rev, ...) is given, all attributes are shown for <packages>. Otherwise the specified attributes are shown. If no package is specified: <packages> = <all packages>, otherwise <packages> is set to the specified packages.

update

  • [p [--commit] [--branch]]
  • []: all packages are updated
  • [p1 p2 ...]: the specified packages are updated
  • --commit <rev>: rev is set to <rev> and the package is prefetched
  • --branch <branch>: branch is set to <branch>, rev is set to the latest revision on that branch and the package is prefetched

add

  • <package>: adds the following to the versions file where let <username/repo> = <package>
{ "<repo>":
  { "owner":  "<username>",
    "repo":   "<repo>",
    "rev":    "<latest commit on <branch>>",
    "sha256": "<sha256>",
    "branch": "<branch>"
  }
}
  • --branch: specifies <branch> (default: master)
  • --username <username>: then let <repo> = <package>
  • --gitlab: use gitlab instead of GitHub
  • --attribute <attribute> <value>: sets <attribute> to <value>

NOTE: should the URLs be used instead? or more simply, how do we differentiate between Gitlab/GitHub?