From 748adbac7ca3452d0a1250c37ff4168d6ccf5ae0 Mon Sep 17 00:00:00 2001 From: sefidel Date: Tue, 14 Feb 2023 23:36:38 +0900 Subject: feat(nixos): init kompakt --- .../packages/m1n1/default.nix | 100 +++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 nixos/modules/apple-silicon-support/packages/m1n1/default.nix (limited to 'nixos/modules/apple-silicon-support/packages/m1n1') diff --git a/nixos/modules/apple-silicon-support/packages/m1n1/default.nix b/nixos/modules/apple-silicon-support/packages/m1n1/default.nix new file mode 100644 index 0000000..ee5450f --- /dev/null +++ b/nixos/modules/apple-silicon-support/packages/m1n1/default.nix @@ -0,0 +1,100 @@ +{ stdenv +, buildPackages +, lib +, fetchFromGitHub +, python3 +, dtc +, imagemagick +, isRelease ? false +, withTools ? true +, withChainloading ? false +, rust-bin ? null +, customLogo ? null +}: + +assert withChainloading -> rust-bin != null; + +let + pyenv = python3.withPackages (p: with p; [ + construct + pyserial + ]); + + rustenv = rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal.override { + targets = [ "aarch64-unknown-none-softfloat" ]; + }); +in stdenv.mkDerivation rec { + pname = "m1n1"; + version = "1.2.3"; + + src = fetchFromGitHub { + # tracking: https://github.com/AsahiLinux/PKGBUILDs/blob/stable/m1n1/PKGBUILD + owner = "AsahiLinux"; + repo = "m1n1"; + rev = "v${version}"; + hash = "sha256-HEhsg3/OkMvAHvu16VFun87SNBPin69CL6XllE7sb4g="; + fetchSubmodules = true; + }; + + makeFlags = [ "ARCH=${stdenv.cc.targetPrefix}" ] + ++ lib.optional isRelease "RELEASE=1" + ++ lib.optional withChainloading "CHAINLOADING=1"; + + nativeBuildInputs = [ + dtc + buildPackages.gcc + ] ++ lib.optional withChainloading rustenv + ++ lib.optional (customLogo != null) imagemagick; + + postPatch = '' + substituteInPlace proxyclient/m1n1/asm.py \ + --replace 'aarch64-linux-gnu-' 'aarch64-unknown-linux-gnu-' \ + --replace 'TOOLCHAIN = ""' 'TOOLCHAIN = "'$out'/toolchain-bin/"' + ''; + + preConfigure = lib.optionalString (customLogo != null) '' + pushd data &>/dev/null + ln -fs ${customLogo} bootlogo_256.png + if [[ "$(magick identify bootlogo_256.png)" != 'bootlogo_256.png PNG 256x256'* ]]; then + echo "Custom logo is not a 256x256 PNG" + exit 1 + fi + + rm bootlogo_128.png + convert bootlogo_256.png -resize 128x128 bootlogo_128.png + ./makelogo.sh + popd &>/dev/null + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/build + cp build/m1n1.bin $out/build + '' + (lib.optionalString withTools '' + mkdir -p $out/{bin,script,toolchain-bin} + cp -r proxyclient $out/script + cp -r tools $out/script + + for toolpath in $out/script/proxyclient/tools/*.py; do + tool=$(basename $toolpath .py) + script=$out/bin/m1n1-$tool + cat > $script <