Skip to content

Instantly share code, notes, and snippets.

@portothree
Forked from Nadrieril/shell.nix
Created August 4, 2022 19:04
Show Gist options
  • Select an option

  • Save portothree/23bf518f41b59fba717b87a715dfb7d0 to your computer and use it in GitHub Desktop.

Select an option

Save portothree/23bf518f41b59fba717b87a715dfb7d0 to your computer and use it in GitHub Desktop.
Building LineageOS on NixOS
# I used this shell.nix to build LineageOS 13.0 for my maguro (Samsung Galaxy Nexus GSM) phone
# The build instructions for normal Linuxes are here: https://wiki.lineageos.org/devices/maguro/build
# NixOS instructions are as follows:
# cd into an empty directory of your choice
# copy this file there
# in nix-shell:
# $ repo init -u https://github.com/LineageOS/android.git -b cm-13.0
# $ repo sync
# $ source build/envsetup.sh
# $ breakfast maguro
# Get binary blobs (I followed https://forum.xda-developers.com/showpost.php?s=a6ee98b07b1b0a2f4004b902a65d9dcd&p=76981184&postcount=4)
# $ repo sync; breakfast maguro
# $ ccache -M 50G
# $ croot
# $ brunch maguro
# Voilà ! It Just Works™ (at least it did for me)
# Warning: the hardened NixOS kernel disables 32 bit emulation, which made me run into multiple "Exec format error" errors.
# To fix, use the default kernel, or enable "IA32_EMULATION y" in the kernel config.
let
# nixpkgs-unstable does not have jdk7 anymore. I used the nixos-18.03 channel
pkgs = import <nixpkgs> {};
# Inspired from https://nixos.wiki/wiki/Android#Building_Android_on_NixOS
# I ad to ass several packages to make it work for me
fhs = pkgs.buildFHSUserEnv {
name = "android-env";
targetPkgs = pkgs: with pkgs; [
androidenv.platformTools
bc
binutils
bison
ccache
curl
flex
gcc
git
gitRepo
gnumake
gnupg
gperf
imagemagick
jdk7
libxml2
lz4
lzop
m4
maven
nettools
openssl
perl
pngcrush
procps
python2
rsync
schedtool
SDL
squashfsTools
unzip
utillinux
wxGTK30
xml2
zip
];
multiPkgs = pkgs: with pkgs; [
zlib
ncurses5
libcxx
readline
];
runScript = "bash";
profile = ''
export USE_CCACHE=1
export ANDROID_JAVA_HOME=${pkgs.jdk7.home}
# Building involves a phase of unzipping large files into a temporary directory
export TMPDIR=/tmp
'';
};
in pkgs.stdenv.mkDerivation {
name = "android-env-shell";
nativeBuildInputs = [ fhs ];
shellHook = "exec android-env";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment