add an overlay, clean up package names for nix flake check

This commit is contained in:
Mitchell Hashimoto 2022-08-22 19:31:09 -07:00
parent de6bcff2cf
commit 5ce840257e
No known key found for this signature in database
GPG key ID: 523D5DC389D273BC
3 changed files with 37 additions and 20 deletions

View file

@ -11,8 +11,10 @@ The flake outputs are documented in `flake.nix` but an overview:
* Default package and "app" is the latest released version * Default package and "app" is the latest released version
* `packages.<version>` for a tagged release * `packages.<version>` for a tagged release
* `packages.master.<date>` for a nightly release * `packages.master` for the latest nightly release
* `packages.master.latest` for the latest nightly release * `packages.master-<date>` for a nightly release
* `overlay` is an overlay that adds `zigpkgs` to be the packages
exposed by this flake
## Usage ## Usage
@ -35,10 +37,10 @@ In a shell:
```sh ```sh
# run the latest released version # run the latest released version
$ nix run 'github:mitchellh/zig-overlay' $ nix run 'github:mitchellh/zig-overlay'
# open a shell with master version dated 2021-02-13 (oldest version available) # open a shell with nightly version dated 2021-02-13 (oldest version available)
$ nix shell 'github:mitchellh/zig-overlay#master."2021-02-13"' $ nix shell 'github:mitchellh/zig-overlay#master-2021-02-13'
# open a shell with latest master version # open a shell with latest nightly version
$ nix shell 'github:mitchellh/zig-overlay#master.latest' $ nix shell 'github:mitchellh/zig-overlay#master'
``` ```
## Thanks ## Thanks

View file

@ -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. # This determines the latest /released/ version.
latest = lib.lists.last ( latest = lib.lists.last (
builtins.sort builtins.sort
(x: y: (builtins.compareVersions x y) < 0) (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 in
# We want the packages but also add a "default" that just points to the # We want the packages but also add a "default" that just points to the
# latest released version. # latest released version.
packages // { "default" = packages.${latest}; } taggedPackages // masterPackages // { "default" = taggedPackages.${latest}; }

View file

@ -13,10 +13,24 @@
in flake-utils.lib.eachSystem systems (system: in flake-utils.lib.eachSystem systems (system:
let pkgs = nixpkgs.legacyPackages.${system}; let pkgs = nixpkgs.legacyPackages.${system};
in rec { in rec {
# The packages exported by the Flake:
# - default - latest /released/ version
# - <version> - tagged version
# - master - latest nightly (updated daily)
# - master-<date> - nightly by date
packages = import ./default.nix { inherit system pkgs; }; 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 { apps = rec {
default = apps.zig; default = apps.zig;
zig = flake-utils.lib.mkApp { drv = packages.default; }; 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};
};
}); });
} }