From c0b87d967f634902e8ce1478e99469a219bb92d5 Mon Sep 17 00:00:00 2001 From: Tobias Happ Date: Mon, 3 Oct 2022 15:19:39 +0200 Subject: [PATCH] bootstrap: add prompt to bootstrap with flakes setup --- .github/workflows/fakedroid-odt.yml | 38 +++++++++- CHANGELOG.md | 2 + modules/environment/login/login-inner.nix | 84 +++++++++++++++++------ tests/fakedroid.sh | 9 ++- 4 files changed, 109 insertions(+), 24 deletions(-) diff --git a/.github/workflows/fakedroid-odt.yml b/.github/workflows/fakedroid-odt.yml index 84281f1..46d23f1 100644 --- a/.github/workflows/fakedroid-odt.yml +++ b/.github/workflows/fakedroid-odt.yml @@ -3,7 +3,7 @@ on: pull_request: push: jobs: - fakedroid-odt: + fakedroid-odt-channel: runs-on: ubuntu-latest steps: @@ -31,7 +31,7 @@ jobs: --impure \ --out-link fakedroid - - name: Initialize fakedroid + - name: Initialize fakedroid for channel setup run: ./fakedroid echo INIT - name: Run tests @@ -43,3 +43,37 @@ jobs: - name: Push to cachix if: always() && github.event_name != 'pull_request' run: ./fakedroid nix-shell -p cachix --run 'nix --extra-experimental-features nix-command path-info --all | cachix push nix-on-droid' + + + fakedroid-flakes: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Install nix + uses: cachix/install-nix-action@v18 + + - name: Setup cachix + uses: cachix/cachix-action@v12 + with: + name: nix-on-droid + signingKey: "${{ secrets.CACHIX_SIGNING_KEY }}" + + - name: Build fakedroid script + run: | + nix \ + --log-format bar-with-logs \ + --option keep-going true \ + --show-trace \ + build .#fakedroid \ + --impure \ + --out-link fakedroid + + - name: Initialize fakedroid for flake setup + run: USE_FLAKE=1 ./fakedroid echo INIT + + - name: Push to cachix + if: always() && github.event_name != 'pull_request' + run: ./fakedroid nix-shell -p cachix --run 'nix --extra-experimental-features nix-command path-info --all | cachix push nix-on-droid' diff --git a/CHANGELOG.md b/CHANGELOG.md index d4d4caf..27c7c59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ device, but bootstrap zip ball creation and running tests via fakedroid requires flake setup) * Add support for `nix profile` managed profiles +* Add possibilty to bootstrap Nix-on-Droid with flakes via prompt on initial + boot ## Release 22.05 diff --git a/modules/environment/login/login-inner.nix b/modules/environment/login/login-inner.nix index 3f3059a..1542fdf 100644 --- a/modules/environment/login/login-inner.nix +++ b/modules/environment/login/login-inner.nix @@ -4,6 +4,8 @@ let inherit (initialPackageInfo) cacert nix; + + nixCmd = "${nix}/bin/nix --extra-experimental-features flakes --extra-experimental-features nix-command"; in writeText "login-inner" '' @@ -32,37 +34,77 @@ writeText "login-inner" '' export NIX_SSL_CERT_FILE=${cacert} - echo "Installing and updating nix-channels..." - ${nix}/bin/nix-channel --add ${config.build.channel.nixpkgs} nixpkgs - ${nix}/bin/nix-channel --update nixpkgs - ${nix}/bin/nix-channel --add ${config.build.channel.nix-on-droid} nix-on-droid - ${nix}/bin/nix-channel --update nix-on-droid + echo + echo "Nix-on-Droid can be set up with channels or with flakes (still experimental)." + while [[ -z $USE_FLAKE ]]; do + read -r -p "Do you want to set it up with flakes? (y/N) " flakes - DEFAULT_CONFIG=$(${nix}/bin/nix-instantiate --eval --expr "") + if [[ "$flakes" =~ ^[Yy]$ ]]; then + USE_FLAKE=1 + elif [[ "$flakes" =~ ^[Nn]$ ]]; then + USE_FLAKE=0 + else + echo "Received invalid input, please try again. $flakes" + fi + done - echo "Installing first nix-on-droid generation..." - ${nix}/bin/nix --extra-experimental-features nix-command \ - build --no-link --file "" nix-on-droid - $(${nix}/bin/nix --extra-experimental-features nix-command \ - path-info --file "" nix-on-droid)/bin/nix-on-droid switch -f $DEFAULT_CONFIG + if [[ "$USE_FLAKE" == 0 ]]; then - . "${config.user.home}/.nix-profile/etc/profile.d/nix-on-droid-session-init.sh" + echo "Setting up Nix-on-Droid with channels..." - echo "Copying default nix-on-droid config..." - mkdir --parents $HOME/.config/nixpkgs - cp $DEFAULT_CONFIG $HOME/.config/nixpkgs/nix-on-droid.nix - chmod u+w $HOME/.config/nixpkgs/nix-on-droid.nix + echo "Installing and updating nix-channels..." + ${nix}/bin/nix-channel --add ${config.build.channel.nixpkgs} nixpkgs + ${nix}/bin/nix-channel --update nixpkgs + ${nix}/bin/nix-channel --add ${config.build.channel.nix-on-droid} nix-on-droid + ${nix}/bin/nix-channel --update nix-on-droid + + DEFAULT_CONFIG=$(${nix}/bin/nix-instantiate --eval --expr "") + + echo "Installing first nix-on-droid generation..." + ${nixCmd} build --no-link --file "" nix-on-droid + $(${nixCmd} path-info --file "" nix-on-droid)/bin/nix-on-droid switch --file $DEFAULT_CONFIG + + . "${config.user.home}/.nix-profile/etc/profile.d/nix-on-droid-session-init.sh" + + echo "Copying default nix-on-droid config..." + mkdir --parents $HOME/.config/nixpkgs + cp $DEFAULT_CONFIG $HOME/.config/nixpkgs/nix-on-droid.nix + chmod u+w $HOME/.config/nixpkgs/nix-on-droid.nix + + else + + echo "Setting up Nix-on-Droid with flakes..." + + echo "Installing flake from default template..." + ${nixCmd} flake new ${config.user.home}/.config/nix-on-droid --template ${config.build.flake.nix-on-droid} + + echo "Installing first nix-on-droid generation..." + ${nixCmd} run ${config.build.flake.nix-on-droid} -- switch --flake ${config.user.home}/.config/nix-on-droid#deviceName + + . "${config.user.home}/.nix-profile/etc/profile.d/nix-on-droid-session-init.sh" + + fi echo echo "Congratulations! Now you have Nix installed with some default packages like bashInteractive, \ coreutils, cacert and, most importantly, nix-on-droid itself to manage local configuration, see" echo " nix-on-droid help" - echo "or in the config file" - echo " ~/.config/nixpkgs/nix-on-droid.nix" - echo - echo "You can go for the bare nix-on-droid setup or you can configure your phone via home-manager. See \ + + if [[ "$USE_FLAKE" == 0 ]]; then + echo "or the config file" + echo " ~/.config/nixpkgs/nix-on-droid.nix" + echo + echo "You can go for the bare nix-on-droid setup or you can configure your phone via home-manager. See \ config file for further information." - echo + echo + else + echo "or the flake" + echo " ~/.config/nix-on-droid/" + echo + echo "You can go for the bare nix-on-droid setup or you can configure your phone via home-manager. See \ + other templates in ${config.build.flake.nix-on-droid}." + echo + fi fi ''} diff --git a/tests/fakedroid.sh b/tests/fakedroid.sh index 48f70a6..9ffb0f3 100644 --- a/tests/fakedroid.sh +++ b/tests/fakedroid.sh @@ -8,11 +8,17 @@ set -ueo pipefail +USE_FLAKE="${USE_FLAKE:-0}" +if [[ ! "$USE_FLAKE" =~ ^[01]$ ]]; then + echo "USE_FLAKE environment variable needs to be either 0 or 1, got '$USE_FLAKE'." + exit 1 +fi + # this allows to run this script from every place in this git repo REPO_DIR="$(git rev-parse --show-toplevel)" INJ_DIR="$REPO_DIR/.fakedroid/inj" -ENV_DIR="$REPO_DIR/.fakedroid/env" +ENV_DIR="$REPO_DIR/.fakedroid/env/$USE_FLAKE" QEMU_URL="https://github.com/multiarch/qemu-user-static/releases/download/v6.1.0-8/qemu-aarch64-static" QEMU="$INJ_DIR/qemu-aarch64" @@ -33,6 +39,7 @@ PASSTHROUGH_VARS=( "TERM=$TERM" "HOME=$TARGET_HOME" "USER=$USER" + "USE_FLAKE=$USE_FLAKE" ) [[ -n "${CACHIX_SIGNING_KEY:-}" ]] && \