From a217594cf3e12a6d811734a11c401e4a90921983 Mon Sep 17 00:00:00 2001 From: Jake Waksbaum Date: Sun, 23 Aug 2020 21:57:52 -0400 Subject: [PATCH] Use flakes This should let users build an SD image simply with `nix build` run from the root of the repo, or even `nix build github:samudeldr/wip-pinebook-pro'. --- README.md | 5 +--- build.sh | 16 ----------- configuration.nix | 8 +++--- default.nix | 20 +++----------- flake.lock | 43 +++++++++++++++++++++++++++++ flake.nix | 55 ++++++++++++++++++++++++++++++++++++++ nixos/sd-image-aarch64.nix | 4 +-- nixos/sd-image.nix | 4 +-- system.nix | 7 ----- 9 files changed, 111 insertions(+), 51 deletions(-) delete mode 100755 build.sh create mode 100644 flake.lock create mode 100644 flake.nix delete mode 100644 system.nix diff --git a/README.md b/README.md index b59208a..f7141e4 100644 --- a/README.md +++ b/README.md @@ -39,13 +39,10 @@ The backlight can be controlled using `light` (`programs.light.enable`). ## Image build ``` -$ ./build.sh +$ nix build $ lsblk /dev/mmcblk0 && sudo dd if=$(echo result/sd-image/*.img) of=/dev/mmcblk0 bs=8M oflag=direct status=progress ``` -The `build.sh` script transmits parameters to `nix-build`, so e.g. `-j0` can -be used. - Once built, this image is self-sufficient, meaning that it should already be booting, no need burn u-boot to it. diff --git a/build.sh b/build.sh deleted file mode 100755 index 14ffdea..0000000 --- a/build.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -u -PS4=" $ " - -# Ugh, I would have liked to do it through a simpler `nix-build`, but as this -# needs to set `NIX_PATH` for use of `` imports, this is the better -# way to go. - -set -x -exec env -i \ - NIXPKGS_ALLOW_UNFREE=1 \ - NIX_PATH="nixpkgs=channel:nixos-unstable" \ - "$(command -v nix-build)" \ - system.nix -A config.system.build.sdImage "$@" diff --git a/configuration.nix b/configuration.nix index 79bae76..462301b 100644 --- a/configuration.nix +++ b/configuration.nix @@ -1,13 +1,13 @@ -{ config, pkgs, lib, ... }: +{ nixpkgs, config, pkgs, lib, ... }: let uboot = pkgs.uBootPinebookProExternalFirst; in { imports = [ - - - + "${nixpkgs}/nixos/modules/profiles/base.nix" + "${nixpkgs}/nixos/modules/profiles/minimal.nix" + "${nixpkgs}/nixos/modules/profiles/installation-device.nix" ./nixos/sd-image-aarch64.nix ./pinebook_pro.nix ]; diff --git a/default.nix b/default.nix index 009941d..d9ea6ca 100644 --- a/default.nix +++ b/default.nix @@ -1,17 +1,5 @@ -{ - pkgs ? import { - overlays = [ - (import ./overlay.nix) - ]; +( + import (fetchTarball https://github.com/edolstra/flake-compat/archive/master.tar.gz) { + src = ./.; } -}: - -let - pkgs' = if builtins.currentSystem == "aarch64-linux" - then pkgs - else pkgs.pkgsCross.aarch64-multiplatform - ; -in -{ - pkgs = pkgs'; -} +).defaultNix diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..dbac4e6 --- /dev/null +++ b/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1597053966, + "narHash": "sha256-f9lbPS/GJ1His8fsDqM6gfa8kSqREU4eKiMCS5hrKg4=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ec20f52e2ff61e9c36c2b894b62fc1b4bd04c71b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1597943282, + "narHash": "sha256-G/VQBlqO7YeFOSvn29RqdvABZxmQBtiRYVA6kjqWZ6o=", + "owner": "NixOS", + "repo": "nixpkgs-channels", + "rev": "c59ea8b8a0e7f927e7291c14ea6cd1bd3a16ff38", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs-channels", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..8f09639 --- /dev/null +++ b/flake.nix @@ -0,0 +1,55 @@ +{ + description = "WIP stuff to get started on the pinebook pro."; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs-channels/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils }: + { + overlay = final: prev: import "${self}/overlay.nix" final prev; + } // flake-utils.lib.eachDefaultSystem ( + system: + let + darwin_network_cmds_openssl_overlay = final: prev: { + darwin = prev.darwin // { + network_cmds = prev.darwin.network_cmds.override { openssl_1_0_2 = prev.openssl; }; + }; + }; + pkgsNative = import nixpkgs { + inherit system; + config.allowUnfree = true; + overlays = [ darwin_network_cmds_openssl_overlay self.overlay ]; + }; + pkgs = if system == "aarch64-linux" then pkgsNative else pkgsNative.pkgsCross.aarch64-multiplatform; + in + rec { + packages = rec { + inherit (pkgs) + uBootPinebookPro uBootPinebookProExternalFirst + linux_pinebookpro_latest + linux_pinebookpro_lts + pinebookpro-firmware + pinebookpro-keyboard-updater + ; + + inherit (nixosConfigurations.config.system.build) sdImage; + }; + + defaultPackage = packages.sdImage; + + nixosConfigurations = nixpkgs.lib.nixosSystem { + system = "aarch64-linux"; + # Pass nixpkgs as an argument to each module so that modules from nixpkgs can be imported purely + specialArgs = { inherit nixpkgs; }; + modules = [ + { nixpkgs.config.allowUnfree = true; } + (if system == "aarch64-linux" then "${self}/configuration.nix" else "${self}/with-cross.nix") + ]; + }; + + nixosModule = import "${self}/pinebook_pro.nix"; + } + ); +} diff --git a/nixos/sd-image-aarch64.nix b/nixos/sd-image-aarch64.nix index b55bee3..fdd288e 100644 --- a/nixos/sd-image-aarch64.nix +++ b/nixos/sd-image-aarch64.nix @@ -1,8 +1,8 @@ -{ config, lib, pkgs, ... }: +{ nixpkgs, config, lib, pkgs, ... }: let extlinux-conf-builder = - import { + import "${nixpkgs}/nixos/modules/system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.nix" { pkgs = pkgs.buildPackages; }; in diff --git a/nixos/sd-image.nix b/nixos/sd-image.nix index 32633ca..9a33078 100644 --- a/nixos/sd-image.nix +++ b/nixos/sd-image.nix @@ -1,9 +1,9 @@ -{ config, lib, pkgs, ... }: +{ nixpkgs, config, lib, pkgs, ... }: with lib; let - rootfsImage = pkgs.callPackage ({ + rootfsImage = pkgs.callPackage "${nixpkgs}/nixos/lib/make-ext4-fs.nix" ({ inherit (config.sdImage) storePaths; #compressImage = false; populateImageCommands = config.sdImage.populateRootCommands; diff --git a/system.nix b/system.nix deleted file mode 100644 index 975a7b2..0000000 --- a/system.nix +++ /dev/null @@ -1,7 +0,0 @@ -import { - configuration = - if builtins.currentSystem == "aarch64-linux" - then builtins.toPath (./. + "/configuration.nix") - else builtins.toPath (./. + "/with-cross.nix") - ; -}