diff --git a/README.md b/README.md index 6e83ab0..9f49c48 100644 --- a/README.md +++ b/README.md @@ -124,9 +124,10 @@ is probably not interesting for you, just download and use a prebuilt one. If you really want to rebuild it, you can just use Android Studio for that. The zipball generation is probably what you are after. -Get an x86_64 computer with Nix. Run +Get an x86_64 computer with flake-enabled Nix. Run + ``` -nix build -f ./pkgs --argstr arch aarch64 bootstrapZip +nix build .#bootstrapZip --impure ``` Put the zip file from `result` on some HTTP server diff --git a/flake.lock b/flake.lock index 97fb24a..279a033 100644 --- a/flake.lock +++ b/flake.lock @@ -51,11 +51,28 @@ "type": "github" } }, + "nixpkgs-for-bootstrap": { + "locked": { + "lastModified": 1656265786, + "narHash": "sha256-A9RkoGrxzsmMm0vily18p92Rasb+MbdDMaSnzmywXKw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "cd90e773eae83ba7733d2377b6cdf84d45558780", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "cd90e773eae83ba7733d2377b6cdf84d45558780", + "type": "github" + } + }, "root": { "inputs": { "flake-utils": "flake-utils", "home-manager": "home-manager", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "nixpkgs-for-bootstrap": "nixpkgs-for-bootstrap" } }, "utils": { diff --git a/flake.nix b/flake.nix index b4c45e6..0331ebd 100644 --- a/flake.nix +++ b/flake.nix @@ -3,14 +3,21 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs"; + + # for bootstrap zip ball creation and proot-termux builds, we use a fixed version of nixpkgs to ease maintanence. + # head of nixos-22.05 as of 2022-06-27 + # note: when updating nixpkgs-for-bootstrap, update store paths of proot-termux in modules/environment/login/default.nix + nixpkgs-for-bootstrap.url = "github:NixOS/nixpkgs/cd90e773eae83ba7733d2377b6cdf84d45558780"; + home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; + flake-utils.url = "github:numtide/flake-utils"; }; - outputs = { self, nixpkgs, home-manager, flake-utils }: + outputs = { self, nixpkgs, nixpkgs-for-bootstrap, home-manager, flake-utils }: let overlay = nixpkgs.lib.composeManyExtensions (import ./overlays); @@ -47,7 +54,12 @@ nix-on-droid = app; }; } - // flake-utils.lib.eachDefaultSystem (system: { + // flake-utils.lib.eachSystem [ "aarch64-linux" "i686-linux" "x86_64-darwin" "x86_64-linux" ] (system: { formatter = nixpkgs.legacyPackages.${system}.nixpkgs-fmt; + + packages = import ./pkgs { + inherit system; + nixpkgs = nixpkgs-for-bootstrap; + }; }); } diff --git a/pkgs/cross-compiling/cross-pkgs.nix b/pkgs/cross-compiling/cross-pkgs-args.nix similarity index 72% rename from pkgs/cross-compiling/cross-pkgs.nix rename to pkgs/cross-compiling/cross-pkgs-args.nix index 814a0e6..7b134ab 100644 --- a/pkgs/cross-compiling/cross-pkgs.nix +++ b/pkgs/cross-compiling/cross-pkgs-args.nix @@ -1,9 +1,9 @@ # Copyright (c) 2019-2022, see AUTHORS. Licensed under MIT License, see LICENSE. -{ config }: +{ config, nixpkgs, system }: -let - loadNixpkgs = import ../lib/load-nixpkgs.nix; +{ + inherit system; crossSystem = { config = "${config.build.arch}-unknown-linux-android"; @@ -13,7 +13,4 @@ let useLLVM = true; isStatic = true; }; - -in - -loadNixpkgs { inherit crossSystem; } +} diff --git a/pkgs/cross-compiling/proot-termux.nix b/pkgs/cross-compiling/proot-termux.nix index e003679..7a441a1 100644 --- a/pkgs/cross-compiling/proot-termux.nix +++ b/pkgs/cross-compiling/proot-termux.nix @@ -1,12 +1,12 @@ # Copyright (c) 2019-2022, see AUTHORS. Licensed under MIT License, see LICENSE. -{ callPackage, tallocStatic }: +{ callPackage, nixpkgs, tallocStatic }: let - pkgsCross = callPackage ./cross-pkgs.nix { }; + pkgsCross = import nixpkgs (callPackage ./cross-pkgs-args.nix { }); stdenv = pkgsCross.stdenvAdapters.makeStaticBinaries pkgsCross.stdenv; - in + pkgsCross.callPackage ../proot-termux { talloc = tallocStatic; inherit stdenv; diff --git a/pkgs/cross-compiling/talloc-static.nix b/pkgs/cross-compiling/talloc-static.nix index 9ac33fd..a155636 100644 --- a/pkgs/cross-compiling/talloc-static.nix +++ b/pkgs/cross-compiling/talloc-static.nix @@ -1,6 +1,7 @@ # Copyright (c) 2019-2022, see AUTHORS. Licensed under MIT License, see LICENSE. { callPackage +, nixpkgs , fetchurl , python3 , pkg-config @@ -8,7 +9,7 @@ }: let - pkgsCross = callPackage ./cross-pkgs.nix { }; + pkgsCross = import nixpkgs (callPackage ./cross-pkgs-args.nix { }); in pkgsCross.stdenv.mkDerivation rec { diff --git a/pkgs/default.nix b/pkgs/default.nix index c613c36..822f0b4 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,22 +1,29 @@ # Copyright (c) 2019-2022, see AUTHORS. Licensed under MIT License, see LICENSE. -{ arch ? "aarch64", nixOnDroidChannelURL ? null, nixpkgsChannelURL ? null }: +{ nixpkgs +, system +, arch ? "aarch64" +, nixOnDroidChannelURL ? null +, nixpkgsChannelURL ? null +}: let nixDirectory = callPackage ./nix-directory.nix { }; initialPackageInfo = import "${nixDirectory}/nix-support/package-info.nix"; - nixpkgs = import lib/load-nixpkgs.nix { }; + pkgs = import nixpkgs { inherit system; }; modules = import ../modules { - pkgs = nixpkgs; + inherit pkgs; extraModules = [ ../modules/build/initial-build.nix ]; extraSpecialArgs = { inherit initialPackageInfo; - pkgs = nixpkgs.lib.mkForce nixpkgs; # to override ./modules/nixpkgs/config.nix + pkgs = pkgs.lib.mkForce pkgs; # to override ./modules/nixpkgs/config.nix }; + isFlake = true; + config = { # Fix invoking bash after initial build. user.shell = "${initialPackageInfo.bash}/bin/bash"; @@ -24,7 +31,7 @@ let build = { inherit arch; - channel = with nixpkgs.lib; { + channel = with pkgs.lib; { nixpkgs = mkIf (nixpkgsChannelURL != null) nixpkgsChannelURL; nix-on-droid = mkIf (nixOnDroidChannelURL != null) nixOnDroidChannelURL; }; @@ -32,8 +39,8 @@ let }; }; - callPackage = nixpkgs.lib.callPackageWith ( - nixpkgs // customPkgs // { + callPackage = pkgs.lib.callPackageWith ( + pkgs // customPkgs // { inherit (modules) config; inherit callPackage nixpkgs nixDirectory initialPackageInfo; } diff --git a/pkgs/lib/load-nixpkgs.nix b/pkgs/lib/load-nixpkgs.nix deleted file mode 100644 index ab25acf..0000000 --- a/pkgs/lib/load-nixpkgs.nix +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2019-2022, see AUTHORS. Licensed under MIT License, see LICENSE. - -let - defaultNixpkgsArgs = { - config = { }; - overlays = [ ]; - }; - - # head of nixos-22.05 as of 2022-06-27 - # note: when updating nixpkgs, update store paths of proot-termux in modules/environment/login/default.nix - pinnedPkgsSrc = builtins.fetchTarball { - url = "https://github.com/NixOS/nixpkgs/archive/cd90e773eae83ba7733d2377b6cdf84d45558780.tar.gz"; - sha256 = "1b2wn1ncx9x4651vfcgyqrm93pd7ghnrgqjbkf6ckkpidah69m03"; - }; -in - -args: import pinnedPkgsSrc (args // defaultNixpkgsArgs)