liminix/pkgs/default.nix

117 lines
4.4 KiB
Nix

{ callPackage, lib }:
let
typeChecked = caller: type: value:
let
inherit (lib) types mergeDefinitions;
defs = [{ file = caller; inherit value; }];
type' = types.submodule { options = type; };
in (mergeDefinitions [] type' defs).mergedValue;
in {
liminix = {
builders = {
squashfs = callPackage ./liminix-tools/builders/squashfs.nix { };
dtb = callPackage ./kernel/dtb.nix { };
uimage = callPackage ./kernel/uimage.nix { };
kernel = callPackage ./kernel { };
};
callService = path : parameters :
let pkg = callPackage path {};
checkTypes = t : p : typeChecked (builtins.toString path) t p;
in {
inherit parameters;
build = { dependencies ? [], ... } @ args :
let
s = pkg (checkTypes parameters
(builtins.removeAttrs args ["dependencies"]));
in s.overrideAttrs (o: {
dependencies = dependencies ++ o.dependencies;
buildInputs = dependencies ++ o.buildInputs;
});
};
lib = {
types =
let inherit (lib) types isDerivation;
in rec {
service = types.package // {
name = "service";
description = "s6-rc service";
check = x: isDerivation x && x ? serviceType;
};
interface = service;
serviceDefn = types.attrs // {
name = "service-defn";
description = "parametrisable s6-rc service definition";
check = x: lib.isAttrs x && x ? parameters && x ? build;
};
};
inherit typeChecked;
};
networking = callPackage ./liminix-tools/networking { };
services = callPackage ./liminix-tools/services { };
};
# please keep the rest of this list alphabetised :-)
anoia = callPackage ./anoia { };
devout = callPackage ./devout { };
fennel = callPackage ./fennel { };
fennelrepl = callPackage ./fennelrepl { };
firewallgen = callPackage ./firewallgen { };
firmware-utils = callPackage ./firmware-utils { };
gen_init_cpio = callPackage ./gen_init_cpio { };
go-l2tp = callPackage ./go-l2tp { };
hi = callPackage ./hi { };
ifwait = callPackage ./ifwait { };
initramfs-peek = callPackage ./initramfs-peek { };
kernel-backport = callPackage ./kernel-backport { };
kmodloader = callPackage ./kmodloader { };
levitate = callPackage ./levitate { };
libubootenv = callPackage ./libubootenv { };
linotify = callPackage ./linotify { };
lualinux = callPackage ./lualinux { };
# we need to build real lzma instead of using xz, because the lzma
# decoder in u-boot doesn't understand streaming lzma archives
# ("Stream with EOS marker is not supported") and xz can't create
# non-streaming ones. See
# https://sourceforge.net/p/squashfs/mailman/message/26599379/
lzma = callPackage ./lzma { };
mac80211 = callPackage ./mac80211 { };
zyxel-bootconfig = callPackage ./zyxel-bootconfig { };
min-collect-garbage = callPackage ./min-collect-garbage { };
min-copy-closure = callPackage ./min-copy-closure { };
minisock = callPackage ./minisock { };
nellie = callPackage ./nellie { };
netlink-lua = callPackage ./netlink-lua { };
odhcp-script = callPackage ./odhcp-script { };
odhcp6c = callPackage ./odhcp6c { };
openwrt = callPackage ./openwrt { };
ppp = callPackage ./ppp { };
pppoe = callPackage ./pppoe { };
preinit = callPackage ./preinit { };
pseudofile = callPackage ./pseudofile { };
routeros = callPackage ./routeros { };
run-liminix-vm = callPackage ./run-liminix-vm { };
s6-init-bin = callPackage ./s6-init-bin { };
s6-rc-database = callPackage ./s6-rc-database { };
s6-rc-up-tree = callPackage ./s6-rc-up-tree { };
# schnapps is written by Turris and provides a high-level interface
# to btrfs snapshots. It may be useful on the Turris Omnia to
# install Liminix while retaining the ability to rollback to the
# vendor OS, or even to derisk Liminix updates on that device
schnapps = callPackage ./schnapps { };
serviceFns = callPackage ./service-fns { };
swconfig = callPackage ./swconfig { };
systemconfig = callPackage ./systemconfig { };
tufted = callPackage ./tufted { };
uevent-watch = callPackage ./uevent-watch { };
usb-modeswitch = callPackage ./usb-modeswitch { };
writeAshScript = callPackage ./write-ash-script { };
writeAshScriptBin = callPackage ./write-ash-script/bin.nix { };
writeFennel = callPackage ./write-fennel { };
writeFennelScript = callPackage ./write-fennel-script { };
}