default.nix (6055B)
1 { callPackage, lib, nixpkgs }: 2 let 3 typeChecked = 4 caller: type: value: 5 let 6 inherit (lib) types mergeDefinitions; 7 defs = [ 8 { 9 file = caller; 10 inherit value; 11 } 12 ]; 13 type' = types.submodule { options = type; }; 14 in 15 (mergeDefinitions [ ] type' defs).mergedValue; 16 in 17 { 18 liminix = { 19 builders = { 20 squashfs = callPackage ./liminix-tools/builders/squashfs.nix { 21 inherit nixpkgs; 22 }; 23 dtb = callPackage ./kernel/dtb.nix { }; 24 uimage = callPackage ./kernel/uimage.nix { }; 25 kernel = callPackage ./kernel { }; 26 }; 27 writeSysctls = 28 let 29 inherit (lib) concatStringsSep collect mapAttrsRecursive; 30 in 31 s: 32 concatStringsSep "\n" ( 33 collect (x: !builtins.isAttrs x) ( 34 mapAttrsRecursive ( 35 p: v: "echo ${builtins.toJSON (builtins.toString v)} > ${concatStringsSep "/" p}" 36 ) s 37 ) 38 ); 39 outputRef = 40 service: path: 41 let 42 h = { inherit service path; }; 43 in 44 x: h.${x}; 45 callService = 46 path: parameters: 47 let 48 pkg = callPackage path { }; 49 checkTypes = t: p: typeChecked (builtins.toString path) t p; 50 in 51 { 52 inherit parameters; 53 build = 54 { 55 dependencies ? [ ], 56 ... 57 }@args: 58 let 59 s = pkg (checkTypes parameters (builtins.removeAttrs args [ "dependencies" ])); 60 in 61 s.overrideAttrs (o: { 62 dependencies = dependencies ++ o.dependencies; 63 buildInputs = dependencies ++ o.buildInputs; 64 }); 65 }; 66 lib = { 67 types = 68 let 69 inherit (lib) types isDerivation; 70 in 71 rec { 72 service = types.package // { 73 name = "service"; 74 description = "s6-rc service"; 75 check = x: isDerivation x && x ? serviceType; 76 }; 77 interface = service; 78 serviceDefn = types.attrs // { 79 name = "service-defn"; 80 description = "parametrisable s6-rc service definition"; 81 check = x: lib.isAttrs x && x ? parameters && x ? build; 82 }; 83 replacable = 84 t: 85 types.either t 86 # function might return a service or a path 87 (types.functionTo types.anything); 88 }; 89 inherit typeChecked; 90 }; 91 networking = callPackage ./liminix-tools/networking { }; 92 services = callPackage ./liminix-tools/services { }; 93 }; 94 95 # please keep the rest of this list alphabetised :-) 96 97 anoia = callPackage ./anoia { }; 98 certifix-client = callPackage ./certifix-client { }; 99 devout = callPackage ./devout { }; 100 fetch-freebsd = callPackage ./fetch-freebsd { }; 101 fennel = callPackage ./fennel { }; 102 fennelc = callPackage ./fennelc { }; 103 fennelrepl = callPackage ./fennelrepl { }; 104 firewallgen = callPackage ./firewallgen { }; 105 firmware-utils = callPackage ./firmware-utils { }; 106 gen_init_cpio = callPackage ./gen_init_cpio { }; 107 go-l2tp = callPackage ./go-l2tp { }; 108 hi = callPackage ./hi { }; 109 ifwait = callPackage ./ifwait { }; 110 initramfs-peek = callPackage ./initramfs-peek { }; 111 logshippers = callPackage ./logshippers { }; 112 json-to-fstree = callPackage ./json-to-fstree { }; 113 kernel-backport = callPackage ./kernel-backport { }; 114 kmodloader = callPackage ./kmodloader { }; 115 levitate = callPackage ./levitate { }; 116 libubootenv = callPackage ./libubootenv { }; 117 linotify = callPackage ./linotify { }; 118 logtap = callPackage ./logtap { }; 119 lualinux = callPackage ./lualinux { }; 120 121 # we need to build real lzma instead of using xz, because the lzma 122 # decoder in u-boot doesn't understand streaming lzma archives 123 # ("Stream with EOS marker is not supported") and xz can't create 124 # non-streaming ones. See 125 # https://sourceforge.net/p/squashfs/mailman/message/26599379/ 126 lzma = callPackage ./lzma { }; 127 128 mac80211 = callPackage ./mac80211 { }; 129 zyxel-bootconfig = callPackage ./zyxel-bootconfig { }; 130 min-collect-garbage = callPackage ./min-collect-garbage { }; 131 min-copy-closure = callPackage ./min-copy-closure { }; 132 minisock = callPackage ./minisock { }; 133 nellie = callPackage ./nellie { }; 134 netlink-lua = callPackage ./netlink-lua { }; 135 nginx-small = callPackage ./nginx-small { }; 136 odhcp-script = callPackage ./odhcp-script { }; 137 odhcp6c = callPackage ./odhcp6c { }; 138 openwrt = callPackage ./openwrt { }; 139 openwrt_24_10 = callPackage ./openwrt/2410.nix { }; 140 openwrt_25_12 = callPackage ./openwrt/2512.nix { }; 141 output-template = callPackage ./output-template { }; 142 ppp = callPackage ./ppp { }; 143 pppoe = callPackage ./pppoe { }; 144 preinit = callPackage ./preinit { }; 145 pseudofile = callPackage ./pseudofile { }; 146 routeros = callPackage ./routeros { }; 147 rxi-json = callPackage ./rxi-json { }; 148 run-liminix-vm = callPackage ./run-liminix-vm { }; 149 s6-init-bin = callPackage ./s6-init-bin { }; 150 s6-rc-database = callPackage ./s6-rc-database { }; 151 s6-rc-round-robin = callPackage ./s6-rc-round-robin { }; 152 s6-rc-up-tree = callPackage ./s6-rc-up-tree { }; 153 154 # schnapps is written by Turris and provides a high-level interface 155 # to btrfs snapshots. It may be useful on the Turris Omnia to 156 # install Liminix while retaining the ability to rollback to the 157 # vendor OS, or even to derisk Liminix updates on that device 158 schnapps = callPackage ./schnapps { }; 159 160 seedrng = callPackage ./seedrng { }; 161 serviceFns = callPackage ./service-fns { }; 162 swconfig = callPackage ./swconfig { }; 163 systemconfig = callPackage ./systemconfig { }; 164 tangc = callPackage ./tangc { }; 165 tufted = callPackage ./tufted { }; 166 uevent-watch = callPackage ./uevent-watch { }; 167 usb-modeswitch = callPackage ./usb-modeswitch { }; 168 watch-outputs = callPackage ./watch-outputs { }; 169 watch-ssh-keys = callPackage ./watch-ssh-keys { }; 170 writeAshScript = callPackage ./write-ash-script { }; 171 writeAshScriptBin = callPackage ./write-ash-script/bin.nix { }; 172 writeFennel = callPackage ./write-fennel { }; 173 }