diff --git a/README.md b/README.md index 02e0acc..1716a3e 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,10 @@ The flake outputs are documented in `flake.nix` but an overview: * Default package and "app" is the latest released version * `packages.` for a tagged release - * `packages.master.` for a nightly release - * `packages.master.latest` for the latest nightly release + * `packages.master` for the latest nightly release + * `packages.master-` for a nightly release + * `overlay` is an overlay that adds `zigpkgs` to be the packages + exposed by this flake ## Usage @@ -35,10 +37,10 @@ In a shell: ```sh # run the latest released version $ nix run 'github:mitchellh/zig-overlay' -# open a shell with master version dated 2021-02-13 (oldest version available) -$ nix shell 'github:mitchellh/zig-overlay#master."2021-02-13"' -# open a shell with latest master version -$ nix shell 'github:mitchellh/zig-overlay#master.latest' +# open a shell with nightly version dated 2021-02-13 (oldest version available) +$ nix shell 'github:mitchellh/zig-overlay#master-2021-02-13' +# open a shell with latest nightly version +$ nix shell 'github:mitchellh/zig-overlay#master' ``` ## Thanks diff --git a/default.nix b/default.nix index 9d5a3cf..a94f16a 100644 --- a/default.nix +++ b/default.nix @@ -23,25 +23,26 @@ let ''; }; + # The packages that are tagged releases + taggedPackages = lib.attrsets.mapAttrs + (k: v: mkBinaryInstall { inherit (v.${system}) version url sha256; }) + (builtins.removeAttrs sources ["master"]); + + # The master packages + masterPackages = lib.attrsets.mapAttrs' + (k: v: lib.attrsets.nameValuePair + (if k == "latest" then "master" else ("master-" + k)) + (mkBinaryInstall { inherit (v.${system}) version url sha256; }) + ) + sources.master; + # This determines the latest /released/ version. latest = lib.lists.last ( builtins.sort (x: y: (builtins.compareVersions x y) < 0) - (builtins.filter (x: x != "master") (builtins.attrNames sources)) + (builtins.attrNames taggedPackages) ); - - # This is the full list of packages - packages = lib.attrsets.mapAttrs (k: v: - if k == "master" then - lib.attrsets.mapAttrs (k: v: (mkBinaryInstall { - inherit (v.${system}) version url sha256; - })) v - else - mkBinaryInstall { - inherit (v.${system}) version url sha256; - }) - sources; in # We want the packages but also add a "default" that just points to the # latest released version. - packages // { "default" = packages.${latest}; } + taggedPackages // masterPackages // { "default" = taggedPackages.${latest}; } diff --git a/flake.nix b/flake.nix index 1690d42..b0e9192 100644 --- a/flake.nix +++ b/flake.nix @@ -13,10 +13,24 @@ in flake-utils.lib.eachSystem systems (system: let pkgs = nixpkgs.legacyPackages.${system}; in rec { + # The packages exported by the Flake: + # - default - latest /released/ version + # - - tagged version + # - master - latest nightly (updated daily) + # - master- - nightly by date packages = import ./default.nix { inherit system pkgs; }; + + # "Apps" so that `nix run` works. If you run `nix run .` then + # this will use the latest default. apps = rec { default = apps.zig; zig = flake-utils.lib.mkApp { drv = packages.default; }; }; + + # Overlay that can be imported so you can access the packages + # using zigpkgs.master.latest or whatever you'd like. + overlay = final: prev: { + zigpkgs = packages.${prev.system}; + }; }); }