2
0
Files
dan 5a125fad3a make custom lua only on device not on build
this is because we don't need to, but also because the linker
flags we hardcode don't work on darwin
2026-08-05 23:32:09 +01:00

470 lines
13 KiB
Nix

nixpkgs: final: prev:
let
isCross = final.stdenv.buildPlatform != final.stdenv.hostPlatform;
crossOnly = pkg: amendFn: if isCross then (amendFn pkg) else pkg;
extraPkgs = import ./pkgs/default.nix {
inherit (final) lib callPackage;
inherit nixpkgs;
};
inherit (final) fetchpatch lib;
luaHost =
let
l = prev.lua5_3.overrideAttrs (o: {
name = "lua-tty";
preBuild = ''
makeFlagsArray+=(PLAT="posix" SYSLIBS="-Wl,-E -ldl" CFLAGS="-O2 -fPIC -DLUA_USE_POSIX -DLUA_USE_DLOPEN")
'';
# lua in nixpkgs has a postInstall stanza that assumes only
# one output, we need to override that if we're going to
# convert to multi-output
# outputs = ["bin" "man" "out"];
makeFlags = builtins.filter (x: (builtins.match "(PLAT|MYLIBS).*" x) == null) o.makeFlags;
});
in
l.override {
self = l;
packageOverrides =
lua-final: lua-prev:
let
openssl = final.opensslNoThreads;
in
{
cqueues = lua-prev.cqueues.overrideAttrs (o: {
externalDeps = [
{
name = "CRYPTO";
dep = openssl;
}
{
name = "OPENSSL";
dep = openssl;
}
];
});
luaossl = lua-prev.luaossl.overrideAttrs (o: {
externalDeps = [
{
name = "CRYPTO";
dep = openssl;
}
{
name = "OPENSSL";
dep = openssl;
}
];
name = "${o.name}-218";
patches = [
(fetchpatch {
url = "https://patch-diff.githubusercontent.com/raw/wahern/luaossl/pull/218.patch";
hash = "sha256-2GOliY4/RUzOgx3rqee3X3szCdUVxYDut7d+XFcUTJw=";
})
];
preInstall = "rm src/openssl.c.orig ; chmod +w src/openssl.c";
});
};
};
s6 = prev.s6.overrideAttrs (
o:
let
patch = fetchpatch {
# add "p" directive in s6-log
url = "https://github.com/skarnet/s6/commit/ddc76841398dfd5e18b22943727ad74b880236d3.patch";
hash = "sha256-fBtUinBdp5GqoxgF6fcR44Tu8hakxs/rOShhuZOgokc=";
};
patch_needed = builtins.compareVersions o.version "2.11.1.2" <= 0;
in
{
configureFlags =
(builtins.filter (x: (builtins.match ".*shared.*" x) == null) o.configureFlags)
++ [
"--disable-allstatic"
"--disable-static"
"--enable-shared"
];
hardeningDisable = [ "all" ];
stripAllList = [
"sbin"
"bin"
];
patches = (if o ? patches then o.patches else [ ]) ++ (if patch_needed then [ patch ] else [ ]);
}
);
in
extraPkgs
// {
# liminix library functions
lim = {
parseInt = s: (builtins.fromTOML "r=${s}").r;
orEmpty = x: if x != null then x else [ ];
};
# keep these alphabetical
btrfs-progs = crossOnly prev.btrfs-progs (
d:
d.override {
udevSupport = false;
udev = null;
}
);
chrony =
let
chrony' = prev.chrony.overrideAttrs (o: {
configureFlags = [
"--chronyvardir=$(out)/var/lib/chrony"
"--sbindir=$(out)/bin"
"--chronyrundir=/run/chrony"
"--disable-readline"
"--disable-editline"
];
});
in
chrony'.override {
gnutls = null;
libedit = null;
libseccomp = null;
libcap = null;
}
// lib.optionalAttrs (lib.versionOlder lib.version "24.10") {
nss = null;
nspr = null;
readline = null;
};
# clevis without luks/tpm
clevis = crossOnly prev.clevis (
d:
let
c = d.overrideAttrs (o: {
outputs = [ "out" ];
preConfigure = ''
rm -rf src/luks
sed -i -e '/luks/d' src/meson.build
'';
});
in
c.override {
asciidoc = null;
cryptsetup = null;
luksmeta = null;
tpm2-tools = null;
}
);
dnsmasq =
let
d = prev.dnsmasq.overrideAttrs (o: {
preBuild = ''
makeFlagsArray=("COPTS=")
'';
});
in
d.override {
dbusSupport = false;
nettle = null;
};
dropbear = crossOnly prev.dropbear (
d:
d.overrideAttrs (o: rec {
patches = o.patches ++ [
./pkgs/dropbear/add-authkeyfile-option.patch
];
postPatch = ''
(echo '#define DSS_PRIV_FILENAME "/run/dropbear/dropbear_dss_host_key"'
echo '#define RSA_PRIV_FILENAME "/run/dropbear/dropbear_rsa_host_key"'
echo '#define ECDSA_PRIV_FILENAME "/run/dropbear/dropbear_ecdsa_host_key"'
echo '#define ED25519_PRIV_FILENAME "/run/dropbear/dropbear_ed25519_host_key"') > localoptions.h
'';
})
);
elfutils = crossOnly prev.elfutils (
d:
let
e = d.overrideAttrs (o: {
configureFlags = o.configureFlags ++ [
"ac_cv_has_stdatomic=no"
];
nativeBuildInputs = [
# upstream only includes this if enableDebuginfod is true,
# but seems it's now needed unconditionally
final.buildPackages.pkg-config
final.buildPackages.m4
];
});
in
e.override {
enableDebuginfod = false;
}
);
fennel =
let version = "1.6.1"; in
luaHost.pkgs.buildLuaPackage {
pname= "fennel";
inherit version;
src = final.fetchFromSourcehut {
owner = "~technomancy";
repo = "fennel";
rev = version;
hash = "sha256-MLXLkRKlxqvEOogM5I4uHxnlRLjK8Pbeq9b1+kAgqFg=";
};
nativeBuildInputs = [ final.pkgsBuildBuild.lua5_3 ];
};
hostapd =
let
config = [
"CONFIG_DRIVER_NL80211=y"
"CONFIG_IAPP=y"
"CONFIG_IEEE80211AC=y"
"CONFIG_IEEE80211AX=y"
"CONFIG_IEEE80211N=y"
"CONFIG_IEEE80211W=y"
"CONFIG_INTERNAL_LIBTOMMATH=y"
"CONFIG_INTERNAL_LIBTOMMATH_FAST=y"
"CONFIG_IPV6=y"
"CONFIG_LIBNL32=y"
"CONFIG_PKCS12=y"
"CONFIG_RSN_PREAUTH=y"
"CONFIG_TLS=internal"
];
h = prev.hostapd.overrideAttrs (o: {
extraConfig = "";
configurePhase = ''
cat > hostapd/defconfig <<EOF
${builtins.concatStringsSep "\n" config}
EOF
${o.configurePhase}
'';
});
in
h.override {
openssl = null;
sqlite = null;
};
# berlekey db needs libatomic which we haven't figured out yet.
# disabling it means we don't have arpd
iproute2 = crossOnly prev.iproute2 (d: d.override { db = null; });
kexec-tools-static = prev.kexec-tools.overrideAttrs (o: {
# For kexecboot we copy kexec into a ramdisk on the system being
# upgraded from. This is more likely to work if kexec is
# statically linked so doesn't have dependencies on store paths that
# may not exist on that machine. (We can't nix-copy-closure as
# the store may not be on a writable filesystem)
LDFLAGS = "-static";
patches = o.patches ++ [
(fetchpatch {
# merge user command line options into DTB chosen
url = "https://patch-diff.githubusercontent.com/raw/horms/kexec-tools/pull/3.patch";
hash = "sha256-MvlJhuex9dlawwNZJ1sJ33YPWn1/q4uKotqkC/4d2tk=";
})
pkgs/kexec-map-file.patch
];
});
libadwaita = prev.libadwaita.overrideAttrs (o: {
# tests fail with a message
# Gdk-DEBUG: error: XDG_RUNTIME_DIR is invalid or not set in the environment.
doCheck = false;
});
lua = crossOnly prev.lua5_3 (_: luaHost);
luad =
let s = final.fetchFromGitea {
domain = "gti.telent.net";
owner = "dan";
repo= "luad";
rev = "73efb4223387a64ae11490648b51c632a98e4737";
hash = "sha256-gPIrqL5wDTkvkyTIBq6CJwzmEBvhfMBcVh9GYgCVohQ=";
};
in (final.callPackage s { lua = luaHost; })
.overrideAttrs(o: {
RUSTFLAGS = "-C prefer-dynamic";
stripAllList = [ "bin" ];
});
mtdutils =
(prev.mtdutils.overrideAttrs (o: {
src = final.fetchgit {
url = "git://git.infradead.org/mtd-utils.git";
rev = "77981a2888c711268b0e7f32af6af159c2288e23";
hash = "sha256-pHunlPOuvCRyyk9qAiR3Kn3cqS/nZHIxsv6m4nsAcbk=";
};
patches = (if o ? patches then o.patches else [ ]) ++ [
./pkgs/mtdutils/0001-mkfs.jffs2-add-graft-option.patch
];
})).override
{ util-linux = final.util-linux-small; };
nftables = prev.nftables.overrideAttrs (o: {
configureFlags = [
"--disable-debug"
"--disable-python"
"--with-mini-gmp"
"--without-cli"
];
});
opensslNoThreads = prev.openssl.overrideAttrs (
o: with final; {
pname = "${o.pname}-nothreads";
# openssl with threads requires stdatomic which drags in libgcc
# as a dependency
preConfigure =
let
arch = if stdenv.hostPlatform.gcc ? arch then "-march=${stdenv.hostPlatform.gcc.arch}" else "";
soft = if arch == "-march=24kc" then "-msoft-float" else "";
in
''
configureFlagsArray+=(no-threads no-asm CFLAGS="${arch} ${soft}")
'';
# don't need or want this bash script
postInstall = o.postInstall + "rm $bin/bin/c_rehash\n";
}
);
pppBuild = prev.ppp;
qemuLim =
let
inherit (final) lib;
q = prev.qemu.overrideAttrs (o: {
patches = o.patches ++ [
./pkgs/qemu/arm-image-friendly-load-addr.patch
(final.fetchpatch {
url = "https://lore.kernel.org/qemu-devel/20220322154658.1687620-1-raj.khem@gmail.com/raw";
hash = "sha256-jOsGka7xLkJznb9M90v5TsJraXXTAj84lcphcSxjYLU=";
})
];
buildInputs = o.buildInputs ++ [
final.libslirp
final.libtasn1 # https://github.com/NixOS/nixpkgs/issues/547163
];
});
overrides = {
hostCpuTargets = map (f: "${f}-softmmu") [
"arm"
"aarch64"
"mips"
"mipsel"
];
sdlSupport = false;
numaSupport = false;
seccompSupport = false;
usbredirSupport = false;
libiscsiSupport = false;
tpmSupport = false;
uringSupport = false;
capstoneSupport = false;
minimal = true;
};
in
q.override overrides;
rsyncSmall =
let
r = prev.rsync.overrideAttrs (o: {
configureFlags = o.configureFlags ++ [ "--disable-openssl" ];
});
in
r.override { openssl = null; };
inherit s6;
s6-rc = prev.s6-rc.override {
skawarePackages = prev.skawarePackages // {
inherit s6;
};
};
strace = prev.strace.override { libunwind = null; };
ubootQemuAarch64 = final.buildUBoot {
defconfig = "qemu_arm64_defconfig";
extraMeta.platforms = [ "aarch64-linux" ];
filesToInstall = [ "u-boot.bin" ];
};
ubootQemuArm = final.buildUBoot {
defconfig = "qemu_arm_defconfig";
extraMeta.platforms = [ "armv7l-linux" ];
filesToInstall = [ "u-boot.bin" ];
extraConfig = ''
CONFIG_CMD_UBI=y
CONFIG_CMD_UBIFS=y
CONFIG_BOOTSTD=y
CONFIG_BOOTMETH_DISTRO=y
CONFIG_LZMA=y
CONFIG_CMD_LZMADEC=y
CONFIG_SYS_BOOTM_LEN=0x1000000
'';
};
ubootQemuMips = final.buildUBoot {
defconfig = "malta_defconfig";
extraMeta.platforms = [ "mips-linux" ];
filesToInstall = [ "u-boot.bin" ];
# define the prompt to be the same as arm{32,64} so
# we can use the same expect script for both
extraPatches = [ ./pkgs/u-boot/0002-virtio-init-for-malta.patch ];
extraConfig = ''
CONFIG_SYS_PROMPT="=> "
CONFIG_VIRTIO=y
CONFIG_AUTOBOOT=y
CONFIG_DM_PCI=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_MMIO=y
CONFIG_QFW_MMIO=y
CONFIG_FIT=y
CONFIG_LZMA=y
CONFIG_CMD_LZMADEC=y
CONFIG_SYS_BOOTM_LEN=0x1000000
CONFIG_SYS_MALLOC_LEN=0x400000
CONFIG_MIPS_BOOT_FDT=y
CONFIG_OF_LIBFDT=y
CONFIG_OF_STDOUT_VIA_ALIAS=y
'';
};
libusb1 = crossOnly prev.libusb1 (
d:
let
u = d.overrideAttrs (o: {
# don't use gcc libatomic because it vastly increases the
# closure size
preConfigure = "sed -i.bak /__atomic_fetch_add_4/c\: configure.ac";
});
in
u.override {
enableUdev = false;
withDocs = false;
}
);
util-linux-small = prev.util-linux.override {
ncursesSupport = false;
pamSupport = false;
systemdSupport = false;
nlsSupport = false;
translateManpages = false;
capabilitiesSupport = false;
withLastlog = false;
shadowSupport = false; # transitively depends on systemd
};
xl2tpd = prev.xl2tpd.overrideAttrs (o: {
patches = [ ./pkgs/xl2tpd-exit-on-close.patch ];
});
}