-
-
Save Arian04/bea169c987d46a7f51c63a68bc117472 to your computer and use it in GitHub Desktop.
Building LineageOS on NixOS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# I used this shell.nix to build LineageOS 21.0 for redfin (Google Pixel 5) | |
# | |
# IMPORANT NOTE: I had to use a pure shell for my builds to work, i.e: `nix-shell --pure` rather than `nix-shell` | |
# | |
# The build instructions are here: https://wiki.lineageos.org/devices/redfin/build | |
# | |
# Warning (from forked gist, was added August 1st 2018): | |
# 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. | |
# | |
# Created using: | |
# https://gist.github.com/Nadrieril/d006c0d9784ba7eff0b092796d78eb2a | |
# https://nixos.wiki/wiki/Android#Building_Android_on_NixOS | |
{pkgs ? import <nixpkgs> {}}: let | |
fhs = pkgs.buildFHSUserEnv { | |
name = "android-env"; | |
targetPkgs = pkgs: | |
with pkgs; [ | |
android-tools | |
libxcrypt-legacy # libcrypt.so.1 | |
freetype # libfreetype.so.6 | |
fontconfig # java NPE: "sun.awt.FontConfiguration.head" is null | |
# Some of the packages here are probably unecessary but I don't wanna figure out which | |
bc | |
binutils | |
bison | |
ccache | |
curl | |
flex | |
gcc | |
git | |
git-repo | |
git-lfs | |
gnumake | |
gnupg | |
gperf | |
imagemagick | |
jdk11 | |
elfutils | |
libxml2 | |
libxslt | |
lz4 | |
lzop | |
m4 | |
nettools | |
openssl.dev | |
perl | |
pngcrush | |
procps | |
python3 | |
rsync | |
schedtool | |
SDL | |
squashfsTools | |
unzip | |
util-linux | |
xml2 | |
zip | |
# only necessary if you wanna use `runScript = "zsh";` below | |
zsh | |
]; | |
multiPkgs = pkgs: | |
with pkgs; [ | |
zlib | |
ncurses5 | |
libcxx | |
readline | |
libgcc # crtbeginS.o | |
iconv # ??? - i put this here and by the time i went back to remove unecessary packages i forgot why | |
iconv.dev # sys/types.h | |
]; | |
runScript = "zsh"; # personal preference, you could set this to bash instead if you want | |
profile = '' | |
export ALLOW_NINJA_ENV=true | |
export USE_CCACHE=1 | |
export CCACHE_EXEC=/usr/bin/ccache | |
export ANDROID_JAVA_HOME=${pkgs.jdk11.home} | |
# Building involves a phase of unzipping large files into a temporary directory | |
export TMPDIR=/tmp | |
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${pkgs.ncurses5}/lib | |
''; | |
}; | |
in | |
pkgs.stdenv.mkDerivation { | |
name = "android-env-shell"; | |
nativeBuildInputs = [fhs]; | |
shellHook = "exec android-env"; | |
} |
Your comment just made me realize I forgot to include an important note! I tried using this shell impurely and the builds kept failing until I used the pure version. So even if $SHELL
works, I wouldn't wanna include it because the user specifically has to add their shell package to the list.
I'll add the note about using it as a pure shell though, thanks for the reminder lol
edit: in order to make this more generic, I probably should've set it to bash
when I uploaded it, but the only reason I didn't is because I didn't test it with Bash. I probably should though.
Tested with bash, does work without a hitch.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for making this script! One thing to note though,
Can be changed to $SHELL I think, which would utilise user's default shell.