This repo contains a package set containing third party and internal dependencies of the climate modeling team.
This repo essentially pins a version of nixpkgs and defines derivations for the various packages that the climate modeling team develops. Continuous integration pushes builds to a cachix repo ai2climatemodeling that can be used to pull pre-built versions.
The basic usage is the same as using nixpkgs: fetch and pin a tarball of this attribute set,
then evaluate derivations.
For example to create a shell environment with fv3 and its libraries, create a shell.nix with
the following:
# shell.nix
let
pkgs = import (builtins.fetchGit {
# Descriptive name to make the store path easier to identify
name = "ai2cm-packages";
url = "[email protected]:ai2cm/packages.git";
ref = "master";
# SHA of the commit of pkgs to use. This effectively pins all packages to
# the versions specified in that commit.
rev = "8dfb5e904a424a3063c14ea47efe1ff0f50be81d";
}) { };
in pkgs.mkShell {
buildInputs = [pkgs.fv3];
}
Then running nix-shell will drop the user into a development shell.
The repo also exposes the derivation set as legacyPackages in a flake.nix.
Below is an example of the usage:
{
inputs = {
ai2cm.url = "github:ai2cm/packages/flake-ify";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, ai2cm, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let pkgs = ai2cm.legacyPackages.${system};
in {
defaultPackage = pkgs.fv3;
devShell = (pkgs.python38.withPackages (ps: [ ps.gt4py ])).env;
});
}
Nix flakes automatically pins all versions of the inputs.
- Executing
nix build .will buildfv3 - Executing
nix developwill launch the development shell withpythonandgt4pyinstalled.
The continuous integration will check that nix source is formatted using nixfmt.
In order to pass the check, files need to be formatted before pushing to the remote.
There are two options:
- Install
nixfmtglobally and run it on the pre-file basis:nixfmt path/to/file.nix, or - Use the provided
pre-commitcapability:nix-shell --command "pre-commit run --all-files"
This repository offers the developer a shell.nix that, when instantiated using the nix-shell
command, drops into an shell with git, nixfmt and pre-commit installed.
Pre-commit can be used on its own, or in conjunction with git.
The pre-commit git hook and .pre-commit-config.yaml are generated the first time the shell is instantiated.
A developer looking to add to this repository could use this together with
direnv by adding a .envrc file with the command
use_nix.