diff --git a/default.nix b/default.nix index 31a3442..9d5a3cf 100644 --- a/default.nix +++ b/default.nix @@ -3,8 +3,10 @@ let inherit (pkgs) lib; - releases = builtins.fromJSON (lib.strings.fileContents ./sources.json); - mkDerivation = { url, version, sha256 }: pkgs.stdenv.mkDerivation { + sources = builtins.fromJSON (lib.strings.fileContents ./sources.json); + + # mkBinaryInstall makes a derivation that installs Zig from a binary. + mkBinaryInstall = { url, version, sha256 }: pkgs.stdenv.mkDerivation { inherit version; pname = "zig"; @@ -20,13 +22,26 @@ let cp zig $out/bin/zig ''; }; -in lib.attrsets.mapAttrs (k: v: - if k == "master" then - lib.attrsets.mapAttrs (k: v: (mkDerivation { - inherit (v.${system}) version url sha256; - })) v - else - mkDerivation { - inherit (v.${system}) version url sha256; - }) - releases + + # 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)) + ); + + # 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}; } diff --git a/flake.nix b/flake.nix index d487bcf..1690d42 100644 --- a/flake.nix +++ b/flake.nix @@ -14,8 +14,9 @@ let pkgs = nixpkgs.legacyPackages.${system}; in rec { packages = import ./default.nix { inherit system pkgs; }; - defaultPackage = packages."0.9.1"; - apps.zig = flake-utils.lib.mkApp { drv = defaultPackage; }; - defaultApp = apps.zig; + apps = rec { + default = apps.zig; + zig = flake-utils.lib.mkApp { drv = packages.default; }; + }; }); }