Skip to content

Instantly share code, notes, and snippets.

@ingenieroariel
Last active December 5, 2024 15:56
Show Gist options
  • Save ingenieroariel/e835dce9328e992ea777948b477afe3b to your computer and use it in GitHub Desktop.
Save ingenieroariel/e835dce9328e992ea777948b477afe3b to your computer and use it in GitHub Desktop.
Arcan on stage 1
{
# nix flake update; nix build .#payload
# while true; do
# while [ ! -e /dev/ttyACM1 ]; do sleep 1; done
# picocom --omap crlf --imap lfcrlf -b 500000 /dev/ttyACM1
# sleep 1
# done
# python proxyclient/tools/run_guest.py -r ../not-os/result/m1n1-linux.bin
#
inputs = {
nixpkgs.url = "path:./nixpkgs";
firmware = {
url = "path:./firmware";
flake = false;
};
cosmocurl = {
url = "https://cosmo.zip/pub/cosmos/bin/curl";
flake = false;
};
cosmobash = {
url = "https://cosmo.zip/pub/cosmos/bin/bash";
flake = false;
};
};
outputs = { self, nixpkgs, firmware, cosmocurl, cosmobash }: let
system = "aarch64-linux";
asahiKernel = pkgs.callPackage ./linux-asahi/default.nix {
_kernelPatches = [{
name = "asahi-gpu-config";
patch = null;
extraConfig = kernelConfig;
}];
withRust = true;
};
asahiKernelPackages = pkgs.linuxPackagesFor asahiKernel.kernel;
kernelModules = [
# List of initrd modules
"nvme_apple"
"pinctrl-apple-gpio"
"macsmc"
"macsmc-rtkit"
"i2c-pasemi-platform"
"tps6598x"
"apple-admac"
"apple-dart"
"apple-drm"
"asahi"
"dwc3"
"dwc3-of-simple"
"xhci-pci"
"pcie-apple"
"gpio_macsmc"
"phy-apple-atc"
"nvmem_apple_efuses"
"spi-apple"
"spi-hid-apple"
"spi-hid-apple-of"
"rtc-macsmc"
"simple-mfd-spmi"
"spmi-apple-controller"
"nvmem_spmi_mfd"
"apple-dockchannel"
"dockchannel-hid"
"apple-rtkit-helper"
# Additional modules
"usb-storage"
"xhci-plat-hcd"
"usbhid"
"hid_generic"
"r8152"
"cdc_acm"
"uinput"
"snd_seq"
"sunrpc"
"brcmfmac"
"brcmfmac_wcc"
"brcmutil"
"cfg80211"
"bluetooth"
"apple_mfi_fastcharge"
"ofpart"
"apple_dcp"
"sdhci_pci"
"snd_soc_macaudio"
"snd_soc_tas2764"
"snd_soc_cs42l84"
"rfkill"
"spi_nor"
"drm_dma_helper"
"snd_soc_apple_mca"
"mux_core"
"cqhci"
"sdhci"
"snd_soc_core"
"mtd"
"macsec"
"atlantic"
"apple_soc_cpufreq"
"macsmc_hid"
"apple_sio"
"i2c_pasemi_core"
"apple_wdt"
"ulpi"
"udc_core"
"typec"
"clk_apple_nco"
"apple_sart"
"nvme_core"
"nvme_auth"
"scsi_dh_rdac"
"scsi_dh_emc"
"scsi_dh_alua"
];
kernelConfig = ''
CONFIG_EARLY_PRINTK y
CONFIG_SERIAL_EARLYCON y
DRM y
DRM_KMS_HELPER y
DRM_APPLE y
GPU_SCHED y
DRM_GEM_SHMEM_HELPER y
DRM_SIMPLEDRM n
DRM_PANEL y
DRM_BRIDGE y
DRM_PANEL_BRIDGE y
DRM_TTM y
DRM_SHMEM y
DRM_DEBUG_MM y
DRM_DEBUG_KMS y
FRAMEBUFFER_CONSOLE y
FRAMEBUFFER y
FB_SIMPLE y
FONT_8x16 y
FONT_TER16x32 y
INPUT_KEYBOARD y
INPUT_MOUSE y
HID_GENERIC y
USB_HID y
KEYBOARD_ATKBD y
VT y
VT_CONSOLE y
VT_HW_CONSOLE_BINDING y
SND y
SND_USB y
SND_USB_AUDIO y
VFAT_FS y
FAT_FS y
FUSE_FS y
INPUT y
INPUT_FF_MEMLESS y
HID y
HID_PLAYSTATION y
MACSEC y
BT y
BT_RFCOMM y
BT_BNEP y
CRYPTO_CRCT10DIF_ARM64_CE y
CRYPTO_SHA3_ARM64 y
CRYPTO_SHA512_ARM64 y
BINFMT_MISC y
I2C_CHARDEV y
SHMEM y
TMPFS y
DEVTMPFS y
DEVPTS_MULTIPLE_INSTANCES y
'';
pkgs = import nixpkgs {
inherit system;
config = { allowUnfree = true; };
overlays = [
(final: prev: {
cosmoUtils = prev.runCommand "cosmoutils" {} ''
mkdir -p $out/bin
cp ${cosmocurl} $out/bin/curl
cp ${cosmobash} $out/bin/bash
chmod +x $out/bin/*
'';
openssh = prev.openssh.override { withFIDO = false; withKerberos = false; };
util-linux = prev.util-linux.override {
pamSupport = false;
capabilitiesSupport = false;
ncursesSupport = false;
systemdSupport = false;
nlsSupport = false;
translateManpages = false;
};
utillinuxCurses = prev.util-linux;
utillinuxMinimal = prev.util-linux;
m1n1 = prev.callPackage ./m1n1/default.nix {};
asahi-fwextract = prev.callPackage ./asahi-fwextract/default.nix {};
nix = prev.nix.overrideAttrs (_: {
configureFlags = [
"--enable-flakes"
"--enable-ca-derivations"
];
});
harfbuzz = prev.harfbuzz.overrideAttrs (_: { doCheck = false; });
coreutils = prev.coreutils.overrideAttrs (_: { doCheck = false; });
diffutils = prev.diffutils.overrideAttrs (_: { doCheck = false; });
findutils = prev.findutils.overrideAttrs (_: { doCheck = false; });
gnugrep = prev.gnugrep.overrideAttrs (_: { doCheck = false; });
e2fsprogs = prev.e2fsprogs.overrideAttrs (_: { doCheck = false; });
})
];
};
# Define base modules directly
baseModules = [
({ lib, pkgs, config, ... }:
let
modules = pkgs.makeModulesClosure {
rootModules = config.boot.initrd.availableKernelModules ++ config.boot.initrd.kernelModules;
allowMissing = true;
kernel = asahiKernel.kernel;
firmware = config.hardware.firmware;
};
dhcpcd = pkgs.dhcpcd.override { udev = null; };
extraUtils = pkgs.runCommandCC "extra-utils"
{
nativeBuildInputs = [ pkgs.nukeReferences ];
allowedReferences = [ "out" pkgs.glibc.out "/nix/store/m7w5kkyya861rb8w7fyc1yngrnf1wcws-binutils-wrapper-2.42" "/nix/store/y5lqyczp4mgqrp8h0ix9zha4ys6r3yv0-binutils-2.42" ];
} ''
set +o pipefail
mkdir -p $out/bin $out/lib
mkdir -p $out/share/arcan/appl/pipeworld
mkdir -p $out/share/arcan/appl/durden
mkdir -p $out/share/arcan/appl/cat9
mkdir -p $out/share/arcan/appl/console
mkdir -p $out/share/arcan/appl/welcome
mkdir -p $out/share/arcan/scripts
mkdir -p $out/share/arcan/resources
mkdir -p $out/share/man/man1
ln -s $out/bin $out/sbin
copy_bin_and_libs() {
[ -f "$out/bin/$(basename $1)" ] && rm "$out/bin/$(basename $1)"
cp -rpd $1 $out/bin
}
mkdir -p $out/etc/X11/xorg.conf.d
cat > $out/etc/X11/xorg.conf.d/20-modesetting.conf <<EOF
Section "OutputClass"
Identifier "appledrm"
MatchDriver "apple"
Driver "modesetting"
Option "PrimaryGPU" "true"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "keyboard"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbVariant" "en"
Option "XkbLayout" "en"
EndSection
EOF
cp -r ${pkgs.arcan}/share $out/
cp -r ${pkgs.cat9}/share $out/
cp -r ${pkgs.durden}/share $out/
cp -r ${pkgs.pipeworld}/share $out/
cp -r ${pkgs.xkeyboard_config}/share/ $out/
mkdir $out/tests
cp -r ${pkgs.arcan.src}/tests $out/tests
for BIN in ${pkgs.xorg.xkbcomp}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.xorg.setxkbmap}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.busybox}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.llvmPackages.clang}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.binutils}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.arcan}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.xarcan}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.zed}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.firefox}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.rng-tools}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.sqlite}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.cosmoUtils}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.dhcpcd}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.vulkan-tools}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.mesa-demos}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.kmscube}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.evtest}/{s,}bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.autoconf}/bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.automake}/bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.texinfo}/bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.openssl}/bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.bison}/bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.m4}/bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.ninja}/bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.cmake}/bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.pkg-config}/bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.strace}/bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.nix}/bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.foot}/bin/*; do
copy_bin_and_libs $BIN
done
for BIN in ${pkgs.glibc}/bin/*; do
copy_bin_and_libs $BIN
done
# Copy ld manually since it isn't detected correctly
cp -pv ${pkgs.glibc.out}/lib/ld*.so.? $out/lib
cp -pv ${pkgs.zlib}/lib/libz.so.? $out/lib
# Copy all of the needed libraries
find $out/bin $out/lib $out/share $out/sbin -type f | while read BIN; do
echo "Copying libs for executable $BIN"
LDD="$(ldd $BIN)" || continue
LIBS="$(echo "$LDD" | awk '{print $3}' | sed '/^$/d')"
for LIB in $LIBS; do
TGT="$out/lib/$(basename $LIB)"
if [ ! -f "$TGT" ]; then
SRC="$(readlink -e $LIB)"
cp -pdv "$SRC" "$TGT"
fi
done
done
# Strip binaries further than normal.
chmod -R u+w $out
# Run patchelf to make the programs refer to the copied libraries.
find $out/bin $out/share $out/lib $out/sbin -type f | while read i; do
if ! test -L $i; then
nuke-refs -e $out $i
fi
done
find $out/bin -type f | while read i; do
if ! test -L $i; then
echo "patching $i..."
patchelf --set-interpreter $out/lib/ld*.so.? --set-rpath $out/lib $i || true
fi
done
# Make sure that the patchelf'ed binaries still work.
echo "testing patched programs..."
$out/bin/ash -c 'echo hello world' | grep "hello world"
export LD_LIBRARY_PATH=$out/lib
$out/bin/mount --help 2>&1 | grep -q "BusyBox"
'';
shell = "${extraUtils}/bin/ash";
enablePlymouth = false;
dhcpHook = pkgs.writeScript "dhcpHook" ''
#!${shell}
'';
bootStage1 = pkgs.writeScript "stage1" ''
#!${shell}
echo "running /initrd"
export PATH=/bin/:${extraUtils}/sbin:/libexec/git-core
export LD_LIBRARY_PATH=${extraUtils}/lib:/lib
mkdir -p /run/opengl
ln -s ${pkgs.vulkan-loader} /run/opengl/vulkan-loader
ln -s ${pkgs.vulkan-validation-layers} /run/opengl/vulkan-validation-layers
ln -s ${pkgs.vulkan-tools} /run/opengl/vulkan-tools
ln -s ${extraUtils}/bin /bin
ln -s ${extraUtils}/etc /etc
ln -s ${extraUtils}/share /share
#FIXME: ugly workaround because patchelf did not take care of the
# links to share and bin, just lib.
mkdir -p /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-xkeyboard-config-2.42/
mkdir -p /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-xkbcomp-1.4.7/bin
ln -s ${extraUtils}/share /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-xkeyboard-config-2.42/
ln -s ${extraUtils}/bin/xkbcomp /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-xkbcomp-1.4.7/bin/xkbcomp
mkdir -p /proc /sys /dev /etc/udev /tmp /run/ /lib/ /mnt/ /var/log /var/db /var/run /opt
mount -t devtmpfs devtmpfs /dev/
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mkdir -p /dev/shm
mkdir -p /dev/pts
mount -t tmpfs tmpfs /dev/shm -o mode=1777,nosuid,nodev
mount -t devpts devpts /dev/pts -o mode=620,gid=5
chmod 1777 /dev/shm
ln -s ${modules}/lib/modules /lib/modules
echo "loading asahi GPU driver"
modprobe asahi
modprobe apple-dart
${extraUtils}/bin/echo 'nameserver 1.1.1.1' > /etc/resolv.conf
mkdir -p /etc
cat > /etc/drirc <<EOF
<driconf>
<device>
<application name="Default">
<option name="allow_rgb10_configs" value="true" />
<option name="mesa_glthread" value="true" />
</application>
</device>
</driconf>
EOF
#export ARCAN_VIDEO_DECODE=1
#export ARCAN_VIDEO_DEBUG=1
#export LIBGL_DEBUG=verbose
#export MESA_DEBUG=1
#export MESA_LOADER_DRIVER_OVERRIDE=asahi
#export DRI_PRIME=1
#export DRM_DEBUG=15
#export AGX_DEBUG=all
export SHELL=/bin/bash
export LASH_BASE=/share/arcan/appl/cat9/
export LASH_SHELL=cat9
export ARCAN_VIDEO_DEVICE=/dev/dri/card0
export ARCAN_VIDEO_DRAW_DEVICE=/dev/dri/renderD128
export ARCAN_RENDER_NODE=/dev/dri/renderD128
export ARCAN_RESOURCEPATH=/share/arcan/resources
export ARCAN_FONTPATH=/share/arcan/resources/fonts
export ARCAN_LOGPATH=/tmp/log
export ARCAN_APPLBASEPATH=/share/arcan/appl
export ARCAN_SCRIPTPATH=/share/arcan/scripts
export ARCAN_STATEPATH=/tmp/state
export ARCAN_STATEBASEPATH=/tmp/statebase
export ARCAN_APPLTEMPPATH=/tmp/appltemp
export ARCAN_APPLSTOREPATH=/tmp/applstore
export ARCAN_BINPATH=/bin/arcan_frameserver
export ARCAN_DB=/.arcan/arcan.sqlite
export ARCAN_DB_SQL_INIT=/.arcan/arcan.sql
mkdir -p /tmp/log /tmp/state /tmp/statebase /tmp/appltemp /tmp/applstore /.arcan
cat > $ARCAN_DB_SQL_INIT <<EOF
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE appl_arcan (key TEXT UNIQUE, val TEXT NOT NULL);
INSERT INTO appl_arcan VALUES('dbversion','4');
CREATE TABLE appl_arcan_lwa (key TEXT UNIQUE, val TEXT NOT NULL);
INSERT INTO appl_arcan_lwa VALUES('dbversion','4');
CREATE TABLE target (tgtid INTEGER PRIMARY KEY,tag STRING NOT NULL,name STRING UNIQUE NOT NULL,executable TEXT NOT NULL,user_id STRING DEFAULT NULL,user_group STRING DEFAULT NULL,bfmt INTEGER NOT NULL);
CREATE TABLE config (cfgid INTEGER PRIMARY KEY,name STRING NOT NULL,passed_counter INTEGER,failed_counter INTEGER,target INTEGER NOT NULL,UNIQUE (name, target),FOREIGN KEY (target) REFERENCES target(tgtid) ON DELETE CASCADE );
CREATE TABLE target_argv (argnum INTEGER PRIMARY KEY,arg STRING NOT NULL,target INTEGER NOT NULL,FOREIGN KEY (target) REFERENCES target(tgtid) ON DELETE CASCADE );
CREATE TABLE config_argv (argnum INTEGER PRIMARY KEY,arg STRING NOT NULL,config INTEGER NOT NULL,FOREIGN KEY (config) REFERENCES config(cfgid) ON DELETE CASCADE );
CREATE TABLE target_kv (key STRING NOT NULL,val STRING NOT NULL,target INT NOT NULL,UNIQUE (key, target), FOREIGN KEY (target) REFERENCES target(tgtid) ON DELETE CASCADE );
CREATE TABLE config_kv (key STRING NOT NULL,val STRING NOT NULL,config INT NOT NULL,UNIQUE (key, config), FOREIGN KEY (config) REFERENCES config(cfgid) ON DELETE CASCADE );
CREATE TABLE target_env (key STRING NOT NULL,val STRING NOT NULL,target INT NOT NULL,UNIQUE (key, target), FOREIGN KEY (target) REFERENCES target(tgtid) ON DELETE CASCADE );
CREATE TABLE config_env (key STRING NOT NULL,val STRING NOT NULL,config INT NOT NULL,UNIQUE (key, config),FOREIGN KEY (config) REFERENCES target(tgtid) ON DELETE CASCADE );
CREATE TABLE target_libs (libnum INTEGER PRIMARY KEY,libname STRING NOT NULL,libnote STRING NOT NULL,target INT NOT NULL,UNIQUE (libname, target),FOREIGN KEY (target) REFERENCES target(tgtid) ON DELETE CASCADE );
CREATE TABLE appl_durden (key TEXT UNIQUE, val TEXT NOT NULL);
INSERT INTO appl_durden VALUES('tbar_btn_float_2','left:icon_maximize:/target/window/move_resize/maximize');
INSERT INTO appl_durden VALUES('tbar_btn_all_1','left:icon_destroy:/target/window/destroy');
INSERT INTO appl_durden VALUES('tbar_btn_float_1','left:icon_minimize:/target/window/minimize');
INSERT INTO appl_durden VALUES('sbar_btn_2','left:icon_cli:/global/open/terminal');
INSERT INTO appl_durden VALUES('sbar_btn_1','left:Go:/global');
INSERT INTO appl_durden VALUES('sbar_btn_alt_1','/global/tools/popup/menu=/menus/cli_icon');
INSERT INTOxkbcommon: ERROR: failed to add default include path /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-xkeyboard-config-2.42/etc/X11/xkb
appl_durden VALUES('sysk_meta_1','LMETA');
INSERT INTO appl_durden VALUES('sysk_meta_2','RMETA');
INSERT INTO appl_durden VALUES('autostart_ok','1');
INSERT INTO appl_durden VALUES('wsk_default_1_insert','h');
INSERT INTO appl_durden VALUES('wsk_default_1_mode','tile');
INSERT INTO appl_durden VALUES('tiler_default_sel','1');
INSERT INTO appl_durden VALUES('disp_64656661756c745f_primary','0');
INSERT INTO appl_durden VALUES('disp_64656661756c745f_ppcm','56.559219290494');
INSERT INTO appl_durden VALUES('disp_64656661756c745f_map','0');
INSERT INTO appl_durden VALUES('disp_64656661756c745f_shader','DEFAULT');
INSERT INTO appl_durden VALUES('disp_64656661756c745f_backlight','1');
INSERT INTO appl_durden VALUES('disp_64656661756c745f_w','1920');
INSERT INTO appl_durden VALUES('disp_64656661756c745f_h','1080');
INSERT INTO appl_durden VALUES('disp_64656661756c745f_refresh','240');
INSERT INTO appl_durden VALUES('htab_rpad','0');
INSERT INTO appl_durden VALUES('enc_vpreset','8');
INSERT INTO appl_durden VALUES('enc_presilence','0');
INSERT INTO appl_durden VALUES('control_path','control');
INSERT INTO appl_durden VALUES('term_bitmap','false');
INSERT INTO appl_durden VALUES('gpu_auth','none');
INSERT INTO appl_durden VALUES('clipboard_access','none');
INSERT INTO appl_durden VALUES('xarcan_clipboard_autopaste','false');
INSERT INTO appl_durden VALUES('subwnd_limit','10');
INSERT INTO appl_durden VALUES('display_shader','basic');
INSERT INTO appl_durden VALUES('display_vrr','false');
INSERT INTO appl_durden VALUES('display_direct','false');
INSERT INTO appl_durden VALUES('display_color','30:30:30');
INSERT INTO appl_durden VALUES('display_fs_rtrate','2');
INSERT INTO appl_durden VALUES('transition','10');
INSERT INTO appl_durden VALUES('animation','10');
INSERT INTO appl_durden VALUES('wnd_animation','10');
INSERT INTO appl_durden VALUES('popup_animation','5');
INSERT INTO appl_durden VALUES('ws_transition_in','fade');
INSERT INTO appl_durden VALUES('ws_transition_out','fade');
INSERT INTO appl_durden VALUES('ws_autodestroy','true');
INSERT INTO appl_durden VALUES('ws_autoadopt','true');
INSERT INTO appl_durden VALUES('ws_default','tile');
INSERT INTO appl_durden VALUES('ws_altmenu','wsmenu');
INSERT INTO appl_durden VALUES('ws_child_default','parent');
INSERT INTO appl_durden VALUES('child_ws_control','true');
INSERT INTO appl_durden VALUES('ws_popup','wsbtn');
INSERT INTO appl_durden VALUES('hide_titlebar','true');
INSERT INTO appl_durden VALUES('titlebar_ptn','%p %t - %i');
INSERT INTO appl_durden VALUES('titlebar_statusbar','true');
INSERT INTO appl_durden VALUES('mouse_focus_event','click');
INSERT INTO appl_durden VALUES('mouse_remember_position','true');
INSERT INTO appl_durden VALUES('mouse_dblclick','12');
INSERT INTO appl_durden VALUES('mouse_m2_cursortag','true');
INSERT INTO appl_durden VALUES('mouse_stickydnd','true');
INSERT INTO appl_durden VALUES('mouse_coalesce','true');
INSERT INTO appl_durden VALUES('mouse_debounce_1','0');
INSERT INTO appl_durden VALUES('mouse_debounce_2','0');
INSERT INTO appl_durden VALUES('mouse_debounce_3','0');
INSERT INTO appl_durden VALUES('mouse_debounce_4','0');
INSERT INTO appl_durden VALUES('mouse_debounce_5','0');
INSERT INTO appl_durden VALUES('mouse_debounce_6','0');
INSERT INTO appl_durden VALUES('mouse_debounce_7','0');
INSERT INTO appl_durden VALUES('mouse_debounce_8','0');
INSERT INTO appl_durden VALUES('float_tile_sz','16:16');
INSERT INTO appl_durden VALUES('float_tbar_override','false');
INSERT INTO appl_durden VALUES('float_bg_rclick','/global/tools/popup/menu=/menus/floatbg');
INSERT INTO appl_durden VALUES('tile_gap_w','0');
INSERT INTO appl_durden VALUES('tile_gap_h','0');
INSERT INTO appl_durden VALUES('tile_insert_child','child');
INSERT INTO appl_durden VALUES('tile_breadth_cap','0');
INSERT INTO appl_durden VALUES('mouse_scalef','1');
INSERT INTO appl_durden VALUES('mt_classifier','relmouse');
INSERT INTO appl_durden VALUES('idle_threshold','2500');
INSERT INTO appl_durden VALUES('gain_fade','10');
INSERT INTO appl_durden VALUES('global_mute','false');
INSERT INTO appl_durden VALUES('kbd_period','2');
INSERT INTO appl_durden VALUES('kbd_delay','300');
INSERT INTO appl_durden VALUES('advfloat_spawn','auto');
INSERT INTO appl_durden VALUES('meta_lock','none');
INSERT INTO appl_durden VALUES('meta_stick_time','0');
INSERT INTO appl_durden VALUES('meta_dbltime','10');
INSERT INTO appl_durden VALUES('meta_hold_suggest','120');
INSERT INTO appl_durden VALUES('device_notification','500');
INSERT INTO appl_durden VALUES('term_autosz','true');
INSERT INTO appl_durden VALUES('term_cellw','12');
INSERT INTO appl_durden VALUES('term_cellh','12');
INSERT INTO appl_durden VALUES('term_font_sz','12');
INSERT INTO appl_durden VALUES('term_font_hint','2');
INSERT INTO appl_durden VALUES('enc_fps','30');
INSERT INTO appl_durden VALUES('enc_vbr','0');
INSERT INTO appl_durden VALUES('term_popup_height','0.3');
INSERT INTO appl_durden VALUES('enc_vqual','7');
INSERT INTO appl_durden VALUES('enc_container','mkv');
INSERT INTO appl_durden VALUES('enc_srate','-1');
INSERT INTO appl_durden VALUES('a12net_on_initial','button_left');
INSERT INTO appl_durden VALUES('advfloat_actionreg','false');
INSERT INTO appl_durden VALUES('shadow_style','none');
INSERT INTO appl_durden VALUES('shadow_t','6');
INSERT INTO appl_durden VALUES('shadow_l','6');
INSERT INTO appl_durden VALUES('shadow_d','6');
INSERT INTO appl_durden VALUES('shadow_r','6');
INSERT INTO appl_durden VALUES('shadow_color','0:0:0');
INSERT INTO appl_durden VALUES('advfloat_hide','statusbar-left');
INSERT INTO appl_durden VALUES('overview_tilebg_opa','0.8');
INSERT INTO appl_durden VALUES('overview_tilebg_shader','default');
INSERT INTO appl_durden VALUES('bind_waittime','30');
INSERT INTO appl_durden VALUES('lbar_dim','0.8');
INSERT INTO appl_durden VALUES('lbar_spacing','10');
INSERT INTO appl_durden VALUES('lbar_bg','51:51:51');
INSERT INTO appl_durden VALUES('lbar_helperbg','36:36:36');
INSERT INTO appl_durden VALUES('lbar_textstr','\#cccccc ');
INSERT INTO appl_durden VALUES('lbar_alertstr','\#ff0000 ');
INSERT INTO appl_durden VALUES('lbar_labelstr','\#00ff00 ');
INSERT INTO appl_durden VALUES('lbar_menulblstr','\#ffff00 ');
INSERT INTO appl_durden VALUES('lbar_menulblselstr','\#ffff00 ');
INSERT INTO appl_durden VALUES('lbar_helperstr','\#aaaaaa ');
INSERT INTO appl_durden VALUES('mouse_factor','1');
INSERT INTO appl_durden VALUES('mouse_hovertime','40');
INSERT INTO appl_durden VALUES('mouse_dragdelta','4');
INSERT INTO appl_durden VALUES('mouse_hidetime','420');
INSERT INTO appl_durden VALUES('lbar_caret_col','0:255:0');
INSERT INTO appl_durden VALUES('lbar_seltextstr','\#ffffff ');
INSERT INTO appl_durden VALUES('lbar_seltextbg','68:102:136');
INSERT INTO appl_durden VALUES('lbar_itemspace','10');
INSERT INTO appl_durden VALUES('lbar_fltfun','prefix');
INSERT INTO appl_durden VALUES('lbar_nextsym','➡');
INSERT INTO appl_durden VALUES('sbar_min_sz','0');
INSERT INTO appl_durden VALUES('bind_repeat','5');
INSERT INTO appl_durden VALUES('sbar_alpha','0.3');
INSERT INTO appl_durden VALUES('msg_timeout','100');
INSERT INTO appl_durden VALUES('sbar_tspace','0');
INSERT INTO appl_durden VALUES('sbar_lspace','0');
INSERT INTO appl_durden VALUES('sbar_dspace','0');
INSERT INTO appl_durden VALUES('sbar_rspace','0');
INSERT INTO appl_durden VALUES('sbar_tshadow','8');
INSERT INTO appl_durden VALUES('sbar_lshadow','5');
INSERT INTO appl_durden VALUES('borderw','1');
INSERT INTO appl_durden VALUES('sbar_rshadow','5');
INSERT INTO appl_durden VALUES('bordert_float','1');
INSERT INTO appl_durden VALUES('borderw_float','4');
INSERT INTO appl_durden VALUES('border_color','60:104:135');
INSERT INTO appl_durden VALUES('tbar_color','60:104:135');
INSERT INTO appl_durden VALUES('sbar_position','top');
INSERT INTO appl_durden VALUES('shadow_defocus','1');
INSERT INTO appl_durden VALUES('sbar_visible','desktop');
INSERT INTO appl_durden VALUES('sbar_wsbuttons','true');
INSERT INTO appl_durden VALUES('browser_position','20');
INSERT INTO appl_durden VALUES('browser_trigger','selection');
INSERT INTO appl_durden VALUES('sbar_dispbuttons','true');
INSERT INTO appl_durden VALUES('passmask','false');
INSERT INTO appl_durden VALUES('float_defw','0.3');
INSERT INTO appl_durden VALUES('float_defh','0.2');
INSERT INTO appl_durden VALUES('sbar_lockbutton_visible','locked');
INSERT INTO appl_durden VALUES('sbar_lockbutton_symbol','Lock');
INSERT INTO appl_durden VALUES('htab_tpad','0');
INSERT INTO appl_durden VALUES('sbar_lockbutton_dir','left');
INSERT INTO appl_durden VALUES('sbar_lblcolor','dynamic');
INSERT INTO appl_durden VALUES('sbar_prefixcolor','dynamic');
INSERT INTO appl_durden VALUES('sbar_compact','false');
INSERT INTO appl_durden VALUES('sbar_sidepad','0');
INSERT INTO appl_durden VALUES('tbar_text','left');
INSERT INTO appl_durden VALUES('tbar_textstr','\#ffffff ');
INSERT INTO appl_durden VALUES('tbar_rclick','/global/tools/popup/menu=/target');
INSERT INTO appl_durden VALUES('gamma_access','none');
INSERT INTO appl_durden VALUES('tbar_position','top');
INSERT INTO appl_durden VALUES('tbar_compact','false');
INSERT INTO appl_durden VALUES('tbar_sidepad','0');
INSERT INTO appl_durden VALUES('mouse_hardlock','false');
INSERT INTO appl_durden VALUES('xarcan_autows_nodecor','true');
INSERT INTO appl_durden VALUES('xarcan_autows_tagname','true');
INSERT INTO appl_durden VALUES('xarcan_metawm','false');
INSERT INTO appl_durden VALUES('xarcan_seamless','false');
INSERT INTO appl_durden VALUES('icon_set','default');
INSERT INTO appl_durden VALUES('notifications_enable','true');
INSERT INTO appl_durden VALUES('lwa_autores','true');
INSERT INTO appl_durden VALUES('mouse_reveal','true');
INSERT INTO appl_durden VALUES('cloth_mass','1');
INSERT INTO appl_durden VALUES('cloth_damp_s','0.99');
INSERT INTO appl_durden VALUES('cloth_damp_t','0.99');
INSERT INTO appl_durden VALUES('sbar_sz','34');
INSERT INTO appl_durden VALUES('sbar_tpad','1');
INSERT INTO appl_durden VALUES('sbar_bpad','1');
INSERT INTO appl_durden VALUES('tbar_sz','38');
INSERT INTO appl_durden VALUES('tbar_tpad','4');
INSERT INTO appl_durden VALUES('tbar_bpad','2');
INSERT INTO appl_durden VALUES('lbar_sz','36');
INSERT INTO appl_durden VALUES('lbar_caret_h','32');
INSERT INTO appl_durden VALUES('hc_palette_1','\#efd469');
INSERT INTO appl_durden VALUES('hc_palette_2','\#43abc9');
INSERT INTO appl_durden VALUES('hc_palette_3','\#cd594a');
INSERT INTO appl_durden VALUES('hc_palette_4','\#b5c689');
INSERT INTO appl_durden VALUES('hc_palette_5','\#f58b4c');
INSERT INTO appl_durden VALUES('hc_palette_6','\#ed6785');
INSERT INTO appl_durden VALUES('hc_palette_7','\#d0d0d0');
INSERT INTO appl_durden VALUES('a12net_on_update','alert');
INSERT INTO appl_durden VALUES('flair_speed','50');
INSERT INTO appl_durden VALUES('gesture_flash','true');
INSERT INTO appl_durden VALUES('gesture_cooldown','20');
INSERT INTO appl_durden VALUES('gesture_timeout','10');
INSERT INTO appl_durden VALUES('gesture_delta','5');
INSERT INTO appl_durden VALUES('gesture_threshold','1');
INSERT INTO appl_durden VALUES('gesture_samples','60');
INSERT INTO appl_durden VALUES('gesture_color','\#00aa00');
INSERT INTO appl_durden VALUES('menu_helper','true');
INSERT INTO appl_durden VALUES('a12net_on_discover','button_left');
INSERT INTO appl_durden VALUES('meta_guard','false');
INSERT INTO appl_durden VALUES('term_bgcol','0:0:0');
INSERT INTO appl_durden VALUES('term_fgcol','255:255:255');
INSERT INTO appl_durden VALUES('term_cursor','block');
INSERT INTO appl_durden VALUES('term_blink','0');
INSERT INTO appl_durden VALUES('term_interp','tsm');
INSERT INTO appl_durden VALUES('term_opa','1');
INSERT INTO appl_durden VALUES('flair_hud','darken');
INSERT INTO appl_durden VALUES('sbar_color','127:127:127');
INSERT INTO appl_durden VALUES('flair_create','disabled');
INSERT INTO appl_durden VALUES('cloth_spacing','0.15');
INSERT INTO appl_durden VALUES('cloth_passes','2');
INSERT INTO appl_durden VALUES('autolay_sidetbar','true');
INSERT INTO appl_durden VALUES('browser_preview','full');
INSERT INTO appl_durden VALUES('autolay_selswap','true');
INSERT INTO appl_durden VALUES('lbar_caret_w','2');
INSERT INTO appl_durden VALUES('autolay_sideshdr','noalpha');
INSERT INTO appl_durden VALUES('lbar_errstr','\#ff4444 ');
INSERT INTO appl_durden VALUES('overlay_size','0.1');
INSERT INTO appl_durden VALUES('autolay_shader','false');
INSERT INTO appl_durden VALUES('overlay_corner','left');
INSERT INTO appl_durden VALUES('overlay_opacity','1');
INSERT INTO appl_durden VALUES('autolay_sideopa','0.5');
INSERT INTO appl_durden VALUES('flair_drag','disabled');
INSERT INTO appl_durden VALUES('flair_drag_opacity','1');
INSERT INTO appl_durden VALUES('overlay_shader','noalpha');
INSERT INTO appl_durden VALUES('flair_destroy','disabled');
INSERT INTO appl_durden VALUES('tbar_timeout','200');
INSERT INTO appl_durden VALUES('font_def','default.ttf');
INSERT INTO appl_durden VALUES('flair_hide','disabled');
INSERT INTO appl_durden VALUES('font_sz','18');
INSERT INTO appl_durden VALUES('font_hint','2');
INSERT INTO appl_durden VALUES('font_fb','emoji.ttf');
INSERT INTO appl_durden VALUES('lbar_tpad','4');
INSERT INTO appl_durden VALUES('dt_shadow_opa','0.3');
INSERT INTO appl_durden VALUES('lbar_bpad','0');
INSERT INTO appl_durden VALUES('extcon_path','durden');
INSERT INTO appl_durden VALUES('sbar_dshadow','8');
INSERT INTO appl_durden VALUES('text_color','\#aaaaaa');
INSERT INTO appl_durden VALUES('global_gain','1');
INSERT INTO appl_durden VALUES('bordert','1');
INSERT INTO appl_durden VALUES('sbar_popup_pad','4');
INSERT INTO appl_durden VALUES('sbar_shadow','soft');
INSERT INTO appl_durden VALUES('shadow_focus','0.5');
INSERT INTO appl_durden VALUES('sbar_dispbutton_dir','right');
INSERT INTO appl_durden VALUES('sbar_numberprefix','true');
INSERT INTO appl_durden VALUES('sbar_wsmeta','true');
INSERT INTO appl_durden VALUES('mouse_block','false');
INSERT INTO appl_durden VALUES('first_run','false');
INSERT INTO appl_durden VALUES('htab_barw','0.1');
INSERT INTO appl_durden VALUES('htab_lpad','0');
INSERT INTO appl_durden VALUES('dt_shadow_ofs_y','0');
INSERT INTO appl_durden VALUES('dt_shadow_ofs_x','0');
INSERT INTO appl_durden VALUES('dt_shadow','0');
INSERT INTO appl_durden VALUES('dt_opa','0.8');
INSERT INTO appl_durden VALUES('dt_height','0.4');
INSERT INTO appl_durden VALUES('dt_width','0.5');
INSERT INTO appl_durden VALUES('cloth_level','20');
INSERT INTO appl_durden VALUES('cloth_gravity','0.015');
INSERT INTO appl_durden VALUES('autolay_centerw','0.8');
INSERT INTO appl_durden VALUES('xarcan_autows','float');
INSERT INTO appl_durden VALUES('extcon_startdelay','100');
INSERT INTO appl_durden VALUES('mouse_cursorset','default');
INSERT INTO appl_durden VALUES('extcon_rlimit','25');
INSERT INTO appl_durden VALUES('mouse_autohide','true');
INSERT INTO appl_durden VALUES('flair_select','disabled');
INSERT INTO appl_durden VALUES('extcon_wndlimit','0');
INSERT INTO appl_durden VALUES('browser_timer','5');
INSERT INTO appl_durden VALUES('term_font','hack.ttf');
INSERT INTO appl_durden VALUES('typer_model','instant');
INSERT INTO appl_durden VALUES('typer_oracle','spell');
INSERT INTO appl_durden VALUES('tui_colorscheme','dracula');
INSERT INTO appl_durden VALUES('typer_language','en_GB');
INSERT INTO appl_durden VALUES('enc_vcodec','H264');
INSERT INTO appl_durden VALUES('sbar_textstr','\#00ff00 ');
INSERT INTO appl_durden VALUES('sbar_shadow_color','0:0:0');
INSERT INTO appl_durden VALUES('sbar_dispbutton_prefix','D');
INSERT INTO appl_durden VALUES('meta_latch','LCTRL_m');
COMMIT;
EOF
for x in pinctrl-apple-gpio macsmc-rtkit i2c-pasemi-platform tps6598x dwc3 dwc3-of-simple phy-apple-atc nvmem_apple_efuses rtc-macsmc apple-dockchannel dockchannel-hid xhci-plat-hcd; do
modprobe $x
done
sqlite3 $ARCAN_DB < $ARCAN_DB_SQL_INIT
timeout=20
while [ $timeout -gt 0 ]; do
if [ -e /dev/dri/renderD128 ]; then
arcan -d $ARCAN_DB durden
break
fi
sleep 1
timeout=$((timeout - 1))
done
exec sh
'';
initialRamdisk = pkgs.makeInitrd {
contents = [ { object = bootStage1; symlink = "/init"; } ];
};
in
{
options = {
not-os.preMount = lib.mkOption {
type = lib.types.lines;
default = "";
};
systemd.services = lib.mkOption {};
systemd.user.paths = lib.mkOption {};
systemd.user.services = lib.mkOption {};
systemd.user.slices = lib.mkOption {};
systemd.user.sockets = lib.mkOption {};
systemd.user.targets = lib.mkOption {};
systemd.user.timers = lib.mkOption {};
systemd.user.tmpfiles.rules = lib.mkOption {};
systemd.user.tmpfiles.users = lib.mkOption {};
systemd.user.units = lib.mkOption {};
systemd.tmpfiles.packages = lib.mkOption {};
systemd.tmpfiles.rules = lib.mkOption {};
systemd.tmpfiles.settings = lib.mkOption {};
};
config = {
system.build.bootStage1 = bootStage1;
system.build.initialRamdisk = lib.mkForce initialRamdisk;
system.build.extraUtils = extraUtils;
};
})
# Import NixOS modules from nixpkgs
"${nixpkgs}/nixos/modules/system/etc/etc.nix"
"${nixpkgs}/nixos/modules/system/activation/activation-script.nix"
"${nixpkgs}/nixos/modules/misc/nixpkgs.nix"
"${nixpkgs}/nixos/modules/misc/assertions.nix"
"${nixpkgs}/nixos/modules/system/boot/kernel.nix"
"${nixpkgs}/nixos/modules/misc/lib.nix"
"${nixpkgs}/nixos/modules/config/sysctl.nix"
];
# Define your NixOS configuration
nixosConfiguration = {
imports = baseModules;
# System configuration
nixpkgs.system = system;
boot = {
kernelPackages = asahiKernelPackages;
initrd = {
enable = true;
includeDefaultModules = false;
availableKernelModules = [];
kernelModules = kernelModules;
};
kernelParams = [];
};
system.build.payload = let
firm = firmware;
rInitRd = nixosSystem.config.system.build.initialRamdisk;
kernel = asahiKernel.kernel;
in pkgs.runCommand "payload" {} ''
mkdir -p $out/nix-support
cd $out
# Copy m1n1.bin
cp ${pkgs.m1n1}/build/m1n1.bin m1n1.bin
# Copy kernel image and compress
cp ${kernel}/Image kernel.img.uncompressed
gzip -1 < kernel.img.uncompressed > kernel.img.gz
# Copy device tree blobs
cp -r ${firm}/dtb .
# Extract firmware
mkdir firmware
${pkgs.asahi-fwextract}/bin/asahi-fwextract ${firm} firmware
zcat ${rInitRd}/initrd | \
cat - firmware/firmware.cpio | \
gzip -1 > combined.initrd.gz
# Combine all components into m1n1-linux.bin
cat m1n1.bin \
<(echo 'chosen.bootargs=debug rw mem=64G fbcon=rotate:0 console=ttySAC0,5000000n8 boot.shell_on_fail ignore_loglevel drm.edid_firmware=edid/1920x1080.bin log_buf_len=4M firmware_class.allow_unsigned=1 brcmfmac.ignore_country_ie=1 cfg80211.ieee80211_regdom=00 earlycon') \
dtb/apple/*.dtb \
kernel.img.gz \
combined.initrd.gz \
> m1n1-linux.bin
# Record the build output
echo "file binary-dist $out/m1n1-linux.bin" >> $out/nix-support/hydra-build-products
# List the contents for verification (optional)
ls -ltrhL
'';
environment.systemPackages = [ ];
};
# Build the NixOS system
nixosSystem = nixpkgs.lib.nixosSystem {
inherit system;
modules = [ nixosConfiguration ];
pkgs = pkgs;
};
in {
packages.${system}.payload = nixosSystem.config.system.build.payload;
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment