summary refs log tree commit diff
path: root/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix
blob: 199a252ad2b516f97f0b0d5af7c1321ab56a60bf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{ config, lib, pkgs, ... }:

let
  extlinux-conf-builder =
    import ../../system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.nix {
      inherit pkgs;
    };
in
{
  imports = [
    ../../profiles/minimal.nix
    ../../profiles/installation-device.nix
    ./sd-image.nix
  ];

  assertions = lib.singleton {
    assertion = pkgs.stdenv.system == "armv6l-linux";
    message = "sd-image-raspberrypi.nix can be only built natively on ARMv6; " +
      "it cannot be cross compiled";
  };

  # Needed by RPi firmware
  nixpkgs.config.allowUnfree = true;

  boot.loader.grub.enable = false;
  boot.loader.generic-extlinux-compatible.enable = true;

  boot.kernelPackages = pkgs.linuxPackages_rpi;

  # FIXME: fix manual evaluation on ARM
  services.nixosManual.enable = lib.mkOverride 0 false;

  # FIXME: this probably should be in installation-device.nix
  users.extraUsers.root.initialHashedPassword = "";

  sdImage = {
    populateBootCommands = ''
      for f in bootcode.bin fixup.dat start.elf; do
        cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/$f boot/
      done
      cp ${pkgs.ubootRaspberryPi}/u-boot.bin boot/u-boot-rpi.bin
      echo 'kernel u-boot-rpi.bin' > boot/config.txt
      ${extlinux-conf-builder} -t 3 -c ${config.system.build.toplevel} -d ./boot
    '';
  };
}