diff --git a/README.md b/README.md index 97976dc..dbfb7df 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,111 @@ Generate OpenWRT images from Nix derivations using the official ImageBuilders that are provided upstream. + +For OpenWRT releases since 19.07 there is profile helper functionality +that helps you find the proper image specification (target, variant) +according to your hardware's profile name. + +## Background + +In an ideal world, OpenWRT would be built from source in many +fine-grained Nix derivations. Until someone implements that (please +do!), this project exists to reuse the binary ImageBuilders that are +included in every OpenWRT release. They are only available for +x86_64-linux hosts. + +The ImageBuilder can generate new *sysupgrade* images with a +customized set of packages and included files. **Caveat:** It cannot +build *factory* images for a first-time installation on the vendor +firmware. + +## Usage with vanilla Nix + +```nix +let + pkgs = import {}; + + # use fetchurl, Hydra inputs, or something else to refer to this project + openwrt-imagebuilder = ../nix-openwrt-imagebuilder; + + profiles = import (openwrt-imagebuilder + "/profiles.nix") { inherit pkgs; }; + + # example: find target/variant for an old Fritzbox + config = profiles.identifyProfile "avm_fritz7412" // { + # add package to include in the image, ie. packages that you don't + # want to install manually later + packages = [ "tcpdump" ]; + + disabledServices = [ "dnsmasq" ]; + + # include files in the images. + # to set UCI configuration, create a uci-defauts scripts as per + # official OpenWRT ImageBuilder recommendation. + files = pkgs.runCommandNoCC "image-files" {} '' + mkdir -p $out/etc/uci-defaults + cat > $out/etc/uci-defaults/99-custom < $out/etc/uci-defaults/99-custom <