*: add default.nix/readTree
This makes all Nix files addressable from root by file path.
For instance, if a file is located in //foo/bar:baz.nix containing:
{ pkgs, ... }:
pkgs.stdenv.mkDerivation {
pname = "foo";
# ...
}
You can then do:
nix-build -A foo.bar.baz
All nix files loaded this way must be a function taking a 'config'
attrset - see nix/readTree.nix for more information. Currently the
config attrset contains the following fields:
- hscloud: the root of the hscloud repository itself, which allows
for traversal via readTree (eg. hscloud.foo.bar.baz)
- pkgs: nixpkgs
- pkgsSrc: nixpkgs souce/channel, useful to load NixOS modules.
- lib, stdenv: lib and stdenv from pkgs.
Change-Id: Ieaacdcabceec18dd6c670d346928bff08b66cf79
diff --git a/default.nix b/default.nix
new file mode 100644
index 0000000..c284030
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,37 @@
+{ ... }@args:
+
+with builtins;
+
+let
+ fix = f: let x = f x; in x;
+
+ readTree = import ./nix/readtree.nix {};
+
+ # Tracking nixos-unstable as of 2020-08-22.
+ nixpkgsCommit = "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38";
+ nixpkgsSrc = fetchTarball {
+ url = "https://github.com/NixOS/nixpkgs-channels/archive/${nixpkgsCommit}.tar.gz";
+ sha256 = "1ak7jqx94fjhc68xh1lh35kh3w3ndbadprrb762qgvcfb8351x8v";
+ };
+ nixpkgs = import nixpkgsSrc {
+ config.allowUnfree = true;
+ config.allowBroken = true;
+ };
+
+in fix (self: rec {
+ config = {
+ hscloud = self // {
+ root = ./.;
+ };
+ pkgs = nixpkgs;
+ pkgsSrc = nixpkgsSrc;
+
+ inherit (nixpkgs) lib stdenv;
+ };
+
+ bgpwtf = readTree config ./bgpwtf;
+ cluster = readTree config ./cluster;
+ ops = readTree config ./ops;
+
+ pkgs = nixpkgs;
+})