Compare commits

..

No commits in common. "e94bf62ec1ce938b9c975195d696640f8deaceab" and "c4185617c039dacfe1afdc6b051c9507069fa99f" have entirely different histories.

114 changed files with 276 additions and 173 deletions

7
ci.nix
View File

@ -4,6 +4,7 @@
, liminix , liminix
, ... }: , ... }:
let let
inherit (builtins) map;
pkgs = (import nixpkgs {}); pkgs = (import nixpkgs {});
borderVmConf = ./bordervm.conf-example.nix; borderVmConf = ./bordervm.conf-example.nix;
inherit (pkgs.lib.attrsets) genAttrs; inherit (pkgs.lib.attrsets) genAttrs;
@ -43,6 +44,12 @@ let
imports = [ ./modules/all-modules.nix ]; imports = [ ./modules/all-modules.nix ];
}; };
}).outputs.optionsJson; }).outputs.optionsJson;
installers = map (f: "system.outputs.${f}") [
"vmroot"
"mtdimage"
"ubimage"
];
inherit (pkgs.lib) concatStringsSep;
in pkgs.stdenv.mkDerivation { in pkgs.stdenv.mkDerivation {
name = "liminix-doc"; name = "liminix-doc";
nativeBuildInputs = with pkgs; [ nativeBuildInputs = with pkgs; [

View File

@ -213,6 +213,7 @@
networkInterfaces = networkInterfaces =
let let
inherit (config.system.service.network) link; inherit (config.system.service.network) link;
inherit (config.system.service) bridge;
in rec { in rec {
wan = link.build { ifname = "wan"; }; wan = link.build { ifname = "wan"; };
lan1 = link.build { ifname = "lan1"; }; lan1 = link.build { ifname = "lan1"; };

View File

@ -92,6 +92,7 @@
''; '';
}; };
inherit (pkgs.pseudofile) dir symlink; inherit (pkgs.pseudofile) dir symlink;
inherit (pkgs.liminix.networking) interface;
in { in {
imports = [ imports = [
../../modules/network ../../modules/network

View File

@ -45,6 +45,7 @@
module = { pkgs, config, lib, lim, ...}: module = { pkgs, config, lib, lim, ...}:
let let
inherit (pkgs.liminix.networking) interface;
inherit (pkgs) openwrt; inherit (pkgs) openwrt;
mac80211 = pkgs.kmodloader.override { mac80211 = pkgs.kmodloader.override {
targets = ["rt2800soc"]; targets = ["rt2800soc"];
@ -89,6 +90,19 @@
let let
inherit (config.system.service.network) link; inherit (config.system.service.network) link;
inherit (config.system.service) vlan; inherit (config.system.service) vlan;
inherit (pkgs.liminix.services) oneshot;
swconfig = oneshot {
name = "swconfig";
up = ''
PATH=${pkgs.swconfig}/bin:$PATH
swconfig dev switch0 set reset
swconfig dev switch0 set enable_vlan 1
swconfig dev switch0 vlan 1 set ports '1 2 3 4 6t'
swconfig dev switch0 vlan 2 set ports '0 6t'
swconfig dev switch0 set apply
'';
down = "${pkgs.swconfig}/bin/swconfig dev switch0 set reset";
};
in rec { in rec {
eth = link.build { ifname = "eth0"; }; eth = link.build { ifname = "eth0"; };
# lan and wan ports are both behind a switch on eth0 # lan and wan ports are both behind a switch on eth0

View File

@ -38,6 +38,7 @@
module = { pkgs, config, lib, lim, ...}: module = { pkgs, config, lib, lim, ...}:
let let
inherit (pkgs.liminix.networking) interface;
inherit (pkgs.liminix.services) oneshot; inherit (pkgs.liminix.services) oneshot;
inherit (pkgs.pseudofile) dir symlink; inherit (pkgs.pseudofile) dir symlink;
inherit (pkgs) openwrt; inherit (pkgs) openwrt;

View File

@ -26,7 +26,7 @@
# this device is described by the "qemu" device # this device is described by the "qemu" device
installer = "vmroot"; installer = "vmroot";
module = { config, lim, ... }: { module = {pkgs, config, lim, ... }: {
imports = [ imports = [
../../modules/arch/aarch64.nix ../../modules/arch/aarch64.nix
../families/qemu.nix ../families/qemu.nix

View File

@ -24,7 +24,7 @@
''; '';
installer = "vmroot"; installer = "vmroot";
module = { config, lim, ... }: { module = {pkgs, config, lim, ... }: {
imports = [ imports = [
../../modules/arch/arm.nix ../../modules/arch/arm.nix
../families/qemu.nix ../families/qemu.nix

View File

@ -36,7 +36,7 @@
in the Development manual. in the Development manual.
''; '';
module = { config, lib, lim, ... }: { module = {pkgs, config, lib, lim, ... }: {
imports = [ imports = [
../../modules/arch/mipseb.nix ../../modules/arch/mipseb.nix
../families/qemu.nix ../families/qemu.nix

View File

@ -419,6 +419,7 @@
networkInterfaces = networkInterfaces =
let let
inherit (config.system.service.network) link; inherit (config.system.service.network) link;
inherit (config.system.service) bridge;
in rec { in rec {
lan1 = link.build { ifname = "lan1"; }; lan1 = link.build { ifname = "lan1"; };
lan2 = link.build { ifname = "lan2"; }; lan2 = link.build { ifname = "lan2"; };

View File

@ -155,6 +155,8 @@
module = {pkgs, config, lib, lim, ... }: module = {pkgs, config, lib, lim, ... }:
let let
openwrt = pkgs.openwrt;
inherit (lib) mkOption types;
inherit (pkgs.liminix.services) oneshot; inherit (pkgs.liminix.services) oneshot;
inherit (pkgs) liminix; inherit (pkgs) liminix;
mtd_by_name_links = pkgs.liminix.services.oneshot rec { mtd_by_name_links = pkgs.liminix.services.oneshot rec {
@ -356,6 +358,7 @@
networkInterfaces = networkInterfaces =
let let
inherit (config.system.service.network) link; inherit (config.system.service.network) link;
inherit (config.system.service) bridge;
in rec { in rec {
en70000 = link.build { en70000 = link.build {
# in armada-38x.dtsi this is eth0. # in armada-38x.dtsi this is eth0.

View File

@ -103,6 +103,8 @@
module = { pkgs, config, lib, lim, ...}: module = { pkgs, config, lib, lim, ...}:
let let
inherit (pkgs.liminix.networking) interface;
inherit (pkgs.liminix.services) oneshot;
inherit (pkgs.pseudofile) dir symlink; inherit (pkgs.pseudofile) dir symlink;
inherit (pkgs) openwrt; inherit (pkgs) openwrt;

View File

@ -1,5 +1,6 @@
{ eval, lib, pkgs }: { eval, lib, pkgs }:
let let
inherit (lib) types;
conf = eval.config; conf = eval.config;
rootDir = builtins.toPath ./..; rootDir = builtins.toPath ./..;
stripAnyPrefixes = lib.flip (lib.fold lib.removePrefix) stripAnyPrefixes = lib.flip (lib.fold lib.removePrefix)

View File

@ -9,6 +9,14 @@ let
d' = { d' = {
description = "${n}\n${substring 0 (stringLength n) "********************************"}\n"; description = "${n}\n${substring 0 (stringLength n) "********************************"}\n";
} // d; } // d;
installer =
if d ? description && d ? installer
then ''
The default installation route for this device is
:ref:`system-outputs-${d.installer}`
''
else "";
in d'.description) in d'.description)
devices; devices;
in in

View File

@ -11,9 +11,9 @@
... ...
}: let }: let
secrets = import ./extneder-secrets.nix; secrets = import ./extneder-secrets.nix;
inherit (pkgs.liminix.services) oneshot longrun target; inherit (pkgs.liminix.services) oneshot longrun bundle target;
inherit (pkgs.pseudofile) dir symlink; inherit (pkgs.pseudofile) dir symlink;
inherit (pkgs) writeText serviceFns; inherit (pkgs) writeText dropbear ifwait serviceFns;
svc = config.system.service; svc = config.system.service;
in rec { in rec {
boot = { boot = {

View File

@ -5,9 +5,9 @@
# wherever the text "EDIT" appears - please consult the tutorial # wherever the text "EDIT" appears - please consult the tutorial
# documentation for details. # documentation for details.
{ config, pkgs, ... } : { config, pkgs, lib, ... } :
let let
inherit (pkgs.liminix.services) bundle oneshot; inherit (pkgs.liminix.services) bundle oneshot longrun;
inherit (pkgs) serviceFns; inherit (pkgs) serviceFns;
# EDIT: you can pick your preferred RFC1918 address space # EDIT: you can pick your preferred RFC1918 address space
# for NATted connections, if you don't like this one. # for NATted connections, if you don't like this one.

View File

@ -1,5 +1,6 @@
{ config, pkgs, ... } : { config, pkgs, lib, ... } :
let let
inherit (pkgs) serviceFns;
svc = config.system.service; svc = config.system.service;
in rec { in rec {

View File

@ -1,5 +1,6 @@
{ config, pkgs, ... } : { config, pkgs, lib, ... } :
let let
inherit (pkgs) serviceFns;
svc = config.system.service; svc = config.system.service;
in rec { in rec {

View File

@ -6,29 +6,10 @@
}: let }: let
secrets = import ./extneder-secrets.nix; secrets = import ./extneder-secrets.nix;
rsecrets = import ./rotuer-secrets.nix; rsecrets = import ./rotuer-secrets.nix;
lns = "l2tp.aaisp.net.uk";
# https://support.aa.net.uk/Category:Incoming_L2TP says: inherit (pkgs.liminix.services) oneshot longrun bundle target;
# "Please use the DNS name (l2tp.aa.net.uk) instead of hardcoding an
# IP address; IP addresses can and do change. If you have to use an
# IP, use 194.4.172.12, but do check the DNS for l2tp.aa.net.uk in
# case it changes."
# but (1) we don't want to use the wwan stick's dns as our main
# resolver: it's provided by some mobile ISP and they aren't
# necessarily the best at providing unfettered services without
# deciding to do something weird; (2) it's not simple to arrange
# that xl2tpd gets a different resolver than every other process;
# (3) there's no way to specify an lns address to xl2tpd at runtime
# except by rewriting its config file. So what we will do is lookup
# the lns hostname using the mobile ISP's dns server and then refuse
# to start l2tp unless the expected lns address is one of the
# addresses returned. I think this satisfies "do check the DNS"
lns = { hostname = "l2tp.aaisp.net.uk"; address = "194.4.172.12"; };
inherit (pkgs.liminix.services) oneshot target;
inherit (pkgs.pseudofile) dir symlink; inherit (pkgs.pseudofile) dir symlink;
inherit (pkgs) serviceFns; inherit (pkgs) writeText dropbear ifwait serviceFns;
svc = config.system.service; svc = config.system.service;
in rec { in rec {
boot = { boot = {
@ -65,14 +46,13 @@ in rec {
services.sshd = svc.ssh.build { }; services.sshd = svc.ssh.build { };
services.resolvconf = oneshot rec { services.resolvconf = oneshot rec {
dependencies = [ services.l2tp ]; dependencies = [ services.dhcpc ];
name = "resolvconf"; name = "resolvconf";
up = '' up = ''
. ${serviceFns} . ${serviceFns}
( in_outputs ${name} ( in_outputs ${name}
for i in ns1 ns2 ; do for i in $(output ${services.dhcpc} dns); do
ns=$(output ${services.l2tp} $i) echo "nameserver $i" > resolv.conf
echo "nameserver $ns" >> resolv.conf
done done
) )
''; '';
@ -81,59 +61,31 @@ in rec {
etc = dir { etc = dir {
"resolv.conf" = symlink "${services.resolvconf}/.outputs/resolv.conf"; "resolv.conf" = symlink "${services.resolvconf}/.outputs/resolv.conf";
}; };
srv = dir {};
}; };
services.lns-address = let services.lnsroute = svc.network.route.build {
ns = "$(output_word ${services.dhcpc} dns 1)";
route-to-bootstrap-nameserver = svc.network.route.build {
via = "$(output ${services.dhcpc} router)"; via = "$(output ${services.dhcpc} router)";
target = ns; target = lns;
dependencies = [services.dhcpc]; dependencies = [services.dhcpc];
}; };
in oneshot rec {
name = "resolve-l2tp-server";
dependencies = [ services.dhcpc route-to-bootstrap-nameserver ];
up = ''
(in_outputs ${name}
DNSCACHEIP="${ns}" ${pkgs.s6-dns}/bin/s6-dnsip4 ${lns.hostname} \
> addresses
)
'';
};
services.l2tp = services.l2tp = svc.l2tp.build {
let inherit lns;
check-address = oneshot rec {
name = "check-lns-address";
up = ''
grep -Fx ${lns.address} $(output_path ${services.lns-address} addresses)
'';
dependencies = [ services.lns-address ];
};
route = svc.network.route.build {
via = "$(output ${services.dhcpc} router)";
target = lns.address;
dependencies = [services.dhcpc check-address];
};
in svc.l2tp.build {
lns = lns.address;
ppp-options = [ ppp-options = [
"debug" "+ipv6" "noauth" "debug" "+ipv6" "noauth"
"name" rsecrets.l2tp.name "name" rsecrets.l2tp.name
"connect-delay" "5000"
"password" rsecrets.l2tp.password "password" rsecrets.l2tp.password
]; ];
dependencies = [config.services.lns-address route check-address]; dependencies = [ services.lnsroute ];
}; };
services.defaultroute4 = svc.network.route.build { services.defaultroute4 = svc.network.route.build {
via = "$(output ${services.l2tp} peer-address)"; via = "$(output ${services.l2tp} router)";
target = "default"; target = "default";
dependencies = [services.l2tp]; dependencies = [services.l2tp];
}; };
# defaultProfile.packages = [ pkgs.go-l2tp ];
users.root = { users.root = {
passwd = lib.mkForce secrets.root.passwd; passwd = lib.mkForce secrets.root.passwd;
openssh.authorizedKeys.keys = secrets.root.keys; openssh.authorizedKeys.keys = secrets.root.keys;

View File

@ -1,6 +1,7 @@
{ config, pkgs, ... } : { config, pkgs, ... } :
let let
inherit (pkgs.liminix.services) target; inherit (pkgs.liminix.services) oneshot longrun bundle target;
inherit (pkgs) writeText;
svc = config.system.service; svc = config.system.service;
secrets-1 = { secrets-1 = {
ssid = "Zyxel 2G (N)"; ssid = "Zyxel 2G (N)";

View File

@ -3,7 +3,7 @@ let
inherit (pkgs) serviceFns; inherit (pkgs) serviceFns;
svc = config.system.service; svc = config.system.service;
inherit (pkgs.pseudofile) dir symlink; inherit (pkgs.pseudofile) dir symlink;
inherit (pkgs.liminix.services) oneshot target; inherit (pkgs.liminix.services) oneshot longrun bundle target;
some-util-linux = pkgs.runCommand "some-util-linux" {} '' some-util-linux = pkgs.runCommand "some-util-linux" {} ''
mkdir -p $out/bin mkdir -p $out/bin
cd ${pkgs.util-linux-small}/bin cd ${pkgs.util-linux-small}/bin

View File

@ -12,6 +12,8 @@ let
domainName = "fake.liminix.org"; domainName = "fake.liminix.org";
firewallRules = {}; firewallRules = {};
} // (import ./rotuer-secrets.nix); } // (import ./rotuer-secrets.nix);
inherit (pkgs.liminix.services) oneshot bundle;
inherit (pkgs) serviceFns;
svc = config.system.service; svc = config.system.service;
wirelessConfig = { wirelessConfig = {
country_code = "GB"; country_code = "GB";

View File

@ -1,5 +1,6 @@
{ config, pkgs, lim, ... } : { config, pkgs, lib, lim, ... } :
let let
inherit (pkgs) serviceFns;
svc = config.system.service; svc = config.system.service;
in rec { in rec {

View File

@ -1,4 +1,4 @@
{ lim, pkgs, config, ...}: { lib, lim, pkgs, config, ...}:
{ {
config = { config = {
kernel.config = { kernel.config = {

View File

@ -1,4 +1,4 @@
{ lim, pkgs, config, ...}: { lib, lim, pkgs, config, ...}:
{ {
config = { config = {
kernel.config = { kernel.config = {

View File

@ -1,4 +1,4 @@
{ config, lim, ...}: { lib, pkgs, config, lim, ...}:
{ {
config = { config = {
kernel.config = { kernel.config = {

View File

@ -1,4 +1,4 @@
{ pkgs, config, ...}: { lib, pkgs, config, ...}:
{ {
imports = [ ./mips.nix ]; imports = [ ./mips.nix ];
config = { config = {

View File

@ -1,4 +1,4 @@
{ config, ...}: { lib, pkgs, config, ...}:
{ {
imports = [ ./mips.nix ]; imports = [ ./mips.nix ];
config = { config = {

View File

@ -4,8 +4,10 @@
{ lib, pkgs, config, ...}: { lib, pkgs, config, ...}:
let let
inherit (lib) mkOption types ; inherit (lib) mkEnableOption mkOption types isDerivation hasAttr ;
inherit (pkgs.pseudofile) dir symlink; inherit (pkgs.pseudofile) dir symlink;
inherit (pkgs.liminix.networking) address interface;
inherit (pkgs.liminix.services) bundle;
type_service = pkgs.liminix.lib.types.service; type_service = pkgs.liminix.lib.types.service;

View File

@ -10,6 +10,7 @@
{ lib, pkgs, config, ...}: { lib, pkgs, config, ...}:
let let
inherit (lib) mkOption types; inherit (lib) mkOption types;
inherit (pkgs.liminix.services) oneshot;
inherit (pkgs) liminix; inherit (pkgs) liminix;
in in
{ {

View File

@ -1,6 +1,7 @@
{ {
liminix liminix
, ifwait , ifwait
, lib
, svc , svc
}: }:
{ members, primary } : { members, primary } :
@ -8,6 +9,7 @@
let let
inherit (liminix.networking) interface; inherit (liminix.networking) interface;
inherit (liminix.services) bundle oneshot; inherit (liminix.services) bundle oneshot;
inherit (lib) mkOption types;
addif = member : addif = member :
# how do we get sight of services from here? maybe we need to # how do we get sight of services from here? maybe we need to
# implement ifwait as a regualr derivation instead of a # implement ifwait as a regualr derivation instead of a

View File

@ -1,10 +1,12 @@
{ {
liminix liminix
, ifwait
, lib , lib
}: }:
{ ifname } : { ifname } :
let let
inherit (liminix.services) oneshot; inherit (liminix.services) bundle oneshot;
inherit (lib) mkOption types;
in oneshot rec { in oneshot rec {
name = "${ifname}.link"; name = "${ifname}.link";
up = '' up = ''

View File

@ -8,7 +8,7 @@
{ lib, pkgs, config, ...}: { lib, pkgs, config, ...}:
let let
inherit (lib) mkOption types mapAttrsToList; inherit (lib) mkOption mkEnableOption types mapAttrsToList;
inherit (pkgs.pseudofile) dir symlink; inherit (pkgs.pseudofile) dir symlink;
inherit (lib.strings) toUpper; inherit (lib.strings) toUpper;

View File

@ -2,6 +2,7 @@
let let
inherit (pkgs) liminix; inherit (pkgs) liminix;
inherit (lib) mkOption types; inherit (lib) mkOption types;
svc = config.system.service;
in { in {
imports = [ imports = [
../service-trigger ../service-trigger

View File

@ -8,7 +8,7 @@
}: }:
{ apn, username, password, authType }: { apn, username, password, authType }:
let let
inherit (liminix.services) oneshot; inherit (liminix.services) bundle longrun oneshot;
authTypeNum = if authType == "pap" then "1" else "2"; authTypeNum = if authType == "pap" then "1" else "2";
chat = lib.escapeShellArgs [ chat = lib.escapeShellArgs [
# Your usb modem thing might present as a tty that you run PPP # Your usb modem thing might present as a tty that you run PPP

View File

@ -2,6 +2,7 @@
writeFennel writeFennel
, linotify , linotify
, anoia , anoia
, lua
, lualinux , lualinux
}: }:
writeFennel "acquire-delegated-prefix" { writeFennel "acquire-delegated-prefix" {

View File

@ -1,10 +1,12 @@
{ {
liminix liminix
, lib
, callPackage , callPackage
}: }:
{ client, interface } : { client, interface } :
let let
inherit (liminix.services) longrun; inherit (liminix.services) longrun;
inherit (lib) mkOption types;
name = "dhcp6c.addr.${client.name}.${interface.name}"; name = "dhcp6c.addr.${client.name}.${interface.name}";
script = callPackage ./acquire-wan-address.nix { }; script = callPackage ./acquire-wan-address.nix { };
in longrun { in longrun {

View File

@ -1,11 +1,13 @@
{ {
liminix liminix
, lib
, odhcp6c , odhcp6c
, odhcp-script , odhcp-script
}: }:
{ interface } : { interface } :
let let
inherit (liminix.services) longrun; inherit (liminix.services) longrun;
inherit (lib) mkOption types;
name = "dhcp6c.${interface.name}"; name = "dhcp6c.${interface.name}";
in longrun { in longrun {
inherit name; inherit name;

View File

@ -12,6 +12,7 @@
{ lib, pkgs, config, ...}: { lib, pkgs, config, ...}:
let let
inherit (lib) mkOption types; inherit (lib) mkOption types;
inherit (pkgs.liminix.services) oneshot;
inherit (pkgs) liminix; inherit (pkgs) liminix;
in in
{ {

View File

@ -1,10 +1,12 @@
{ {
liminix liminix
, lib
, callPackage , callPackage
}: }:
{ client, interface } : { client, interface } :
let let
inherit (liminix.services) longrun; inherit (liminix.services) longrun;
inherit (lib) mkOption types;
name = "dhcp6c.prefix.${client.name}.${interface.name}"; name = "dhcp6c.prefix.${client.name}.${interface.name}";
script = callPackage ./acquire-delegated-prefix.nix { }; script = callPackage ./acquire-delegated-prefix.nix { };
in longrun { in longrun {

View File

@ -18,7 +18,7 @@ let
name = "${interface.name}.dnsmasq"; name = "${interface.name}.dnsmasq";
inherit (liminix.services) longrun; inherit (liminix.services) longrun;
inherit (lib) concatStrings concatStringsSep mapAttrsToList; inherit (lib) concatStrings concatStringsSep mapAttrsToList;
hostOpt = name : { mac, v4, v6, leasetime }: hostOpt = name : { mac, v4, v6, leasetime } @ attrs:
let v6s = concatStrings (map (a : ",[${a}]") v6); let v6s = concatStrings (map (a : ",[${a}]") v6);
in "--dhcp-host=${mac},${v4}${v6s},${name},${builtins.toString leasetime}"; in "--dhcp-host=${mac},${v4}${v6s},${name},${builtins.toString leasetime}";
in in

View File

@ -8,6 +8,7 @@
let let
inherit (lib) mkOption types; inherit (lib) mkOption types;
inherit (pkgs) liminix; inherit (pkgs) liminix;
inherit (pkgs.liminix.services) oneshot;
kmodules = pkgs.kmodloader.override { kmodules = pkgs.kmodloader.override {
inherit (config.system.outputs) kernel; inherit (config.system.outputs) kernel;

View File

@ -7,6 +7,8 @@
{ rules, extraRules }: { rules, extraRules }:
let let
inherit (liminix.services) oneshot; inherit (liminix.services) oneshot;
inherit (liminix.lib) typeChecked;
inherit (lib) mkOption types;
script = firewallgen "firewall.nft" (lib.recursiveUpdate rules extraRules); script = firewallgen "firewall.nft" (lib.recursiveUpdate rules extraRules);
in oneshot { in oneshot {
name = "firewall"; name = "firewall";

View File

@ -6,9 +6,9 @@
## :file:`devices/manuf-model/default.nix` ## :file:`devices/manuf-model/default.nix`
{ lib, ...}: { lib, pkgs, config, ...}:
let let
inherit (lib) mkOption types ; inherit (lib) mkEnableOption mkOption types isDerivation hasAttr ;
in { in {
options = { options = {
boot = { boot = {

View File

@ -8,6 +8,8 @@
let let
inherit (liminix.services) longrun; inherit (liminix.services) longrun;
inherit (lib) concatStringsSep mapAttrsToList; inherit (lib) concatStringsSep mapAttrsToList;
inherit (liminix.lib) typeChecked;
inherit (lib) mkOption types;
# This is not a friendly interface to configuring a wireless AP: it # This is not a friendly interface to configuring a wireless AP: it
# just passes everything straight through to the hostapd config. # just passes everything straight through to the hostapd config.

View File

@ -9,7 +9,7 @@ let
in longrun { in longrun {
name = "ifwait.${interface.name}"; name = "ifwait.${interface.name}";
buildInputs = [ service ]; buildInputs = [ service ];
restart-on-upgrade = true; isTrigger = true;
run = '' run = ''
${ifwait}/bin/ifwait -s ${service.name} $(output ${interface} ifname) ${state} ${ifwait}/bin/ifwait -s ${service.name} $(output ${interface} ifname) ${state}
''; '';

View File

@ -5,9 +5,14 @@
{ lib, pkgs, config, ...}: { lib, pkgs, config, ...}:
let let
inherit (lib) mkOption types ; inherit (lib) mkEnableOption mkOption types isDerivation hasAttr ;
inherit (pkgs.pseudofile) dir symlink;
inherit (pkgs.liminix.networking) address interface;
inherit (pkgs.liminix.services) bundle;
inherit (pkgs) liminix; inherit (pkgs) liminix;
type_service = pkgs.liminix.lib.types.service;
mergeConditionals = conf : conditions : mergeConditionals = conf : conditions :
# for each key in conditions, if it is present in conf # for each key in conditions, if it is present in conf
# then merge the associated value into conf # then merge the associated value into conf

View File

@ -1,4 +1,4 @@
{ config, pkgs, ...} : { config, pkgs, lib, ...} :
let inherit (pkgs.liminix.services) oneshot longrun; let inherit (pkgs.liminix.services) oneshot longrun;
in { in {
config = { config = {

View File

@ -7,6 +7,11 @@
let let
inherit (lib) mkOption types; inherit (lib) mkOption types;
inherit (pkgs) liminix; inherit (pkgs) liminix;
mkBoolOption = description : mkOption {
type = types.bool;
inherit description;
default = true;
};
in { in {
options = { options = {

View File

@ -5,7 +5,7 @@
}: }:
{ partlabel, mountpoint, options, fstype }: { partlabel, mountpoint, options, fstype }:
let let
inherit (liminix.services) oneshot; inherit (liminix.services) longrun oneshot;
device = "/dev/disk/by-partlabel/${partlabel}"; device = "/dev/disk/by-partlabel/${partlabel}";
name = "mount.${lib.strings.sanitizeDerivationName (lib.escapeURL mountpoint)}"; name = "mount.${lib.strings.sanitizeDerivationName (lib.escapeURL mountpoint)}";
options_string = options_string =

View File

@ -1,5 +1,6 @@
{ {
liminix liminix
, ifwait
, serviceFns , serviceFns
, lib , lib
}: }:

View File

@ -1,5 +1,7 @@
{ {
liminix liminix
, ifwait
, serviceFns
, lib , lib
}: }:
{ enableIPv4, enableIPv6 }: { enableIPv4, enableIPv6 }:

View File

@ -1,5 +1,7 @@
{ {
liminix liminix
, ifwait
, serviceFns
, lib , lib
}: }:
{ {
@ -9,7 +11,8 @@
# if devpath is supplied, we rename the interface at that # if devpath is supplied, we rename the interface at that
# path to have the specified name. # path to have the specified name.
let let
inherit (liminix.services) oneshot; inherit (liminix.services) longrun oneshot;
inherit (lib) concatStringsSep;
name = "${ifname}.link"; name = "${ifname}.link";
rename = if devpath != null rename = if devpath != null
then '' then ''

View File

@ -1,15 +1,15 @@
{ {
liminix liminix
, ifwait
, serviceFns
, lib , lib
}: }:
{ target, via, interface ? null, metric }: { target, via, interface ? null, metric }:
let let
inherit (liminix.services) oneshot; inherit (liminix.services) oneshot;
with_dev = if interface != null then "dev $(output ${interface} ifname)" else ""; with_dev = if interface != null then "dev $(output ${interface} ifname)" else "";
target_hash = builtins.substring 0 12 (builtins.hashString "sha256" target);
via_hash = builtins.substring 0 12 (builtins.hashString "sha256" via);
in oneshot { in oneshot {
name = "route-${target_hash}-${builtins.substring 0 12 (builtins.hashString "sha256" "${via_hash}-${if interface!=null then interface.name else ""}")}"; name = "route-${target}-${builtins.substring 0 12 (builtins.hashString "sha256" "${via}-${if interface!=null then interface.name else ""}")}";
up = '' up = ''
ip route add ${target} via ${via} metric ${toString metric} ${with_dev} ip route add ${target} via ${via} metric ${toString metric} ${with_dev}
''; '';

View File

@ -1,6 +1,7 @@
{ {
liminix liminix
, chrony , chrony
, serviceFns
, lib , lib
, writeText , writeText
}: }:
@ -8,6 +9,10 @@ params:
let let
inherit (liminix.services) longrun; inherit (liminix.services) longrun;
inherit (lib) concatStringsSep mapAttrsToList; inherit (lib) concatStringsSep mapAttrsToList;
inherit (liminix.lib) typeChecked;
inherit (lib) mkOption types;
serverOpts = types.listOf types.str;
configFile = p: configFile = p:
(mapAttrsToList (name: opts: "server ${name} ${concatStringsSep "" opts}") (mapAttrsToList (name: opts: "server ${name} ${concatStringsSep "" opts}")
p.servers) p.servers)

View File

@ -6,7 +6,7 @@
}: }:
let let
inherit (lib) mkOption types concatStringsSep; inherit (lib) mkOption types concatStringsSep;
inherit (pkgs) liminix writeText; inherit (pkgs) liminix callPackage writeText;
o = config.system.outputs; o = config.system.outputs;
in in
{ {

View File

@ -5,7 +5,7 @@
, ... , ...
}: }:
let let
inherit (lib) mkIf; inherit (lib) mkIf mkOption types;
o = config.system.outputs; o = config.system.outputs;
in in
{ {

View File

@ -5,7 +5,7 @@
, ... , ...
}: }:
let let
inherit (lib) mkIf; inherit (lib) mkIf mkOption types;
o = config.system.outputs; o = config.system.outputs;
in in
{ {

View File

@ -6,7 +6,7 @@
}: }:
let let
inherit (lib) mkEnableOption mkOption mkIf types; inherit (lib) mkEnableOption mkOption mkIf types;
inherit (pkgs) runCommand; inherit (pkgs) runCommand callPackage writeText;
in in
{ {
options = { options = {

View File

@ -5,7 +5,7 @@
, ... , ...
}: }:
let let
inherit (lib) mkIf; inherit (lib) mkIf mkOption types;
o = config.system.outputs; o = config.system.outputs;
in in
{ {

View File

@ -5,7 +5,7 @@
, ... , ...
}: }:
let let
inherit (lib) mkOption types concatStringsSep; inherit (lib) mkOption mkForce types concatStringsSep;
in { in {
imports = [ ../ramdisk.nix ]; imports = [ ../ramdisk.nix ];
options.system.outputs = { options.system.outputs = {
@ -42,7 +42,8 @@ in {
boot-sh = boot-sh =
let let
inherit (config.system.outputs) rootfs; inherit (pkgs.lib.trivial) toHexString;
inherit (config.system.outputs) rootfs kernel;
cmdline = concatStringsSep " " config.boot.commandLine; cmdline = concatStringsSep " " config.boot.commandLine;
in in
pkgs.buildPackages.runCommand "boot.sh.sh" { pkgs.buildPackages.runCommand "boot.sh.sh" {

View File

@ -5,7 +5,7 @@
, ... , ...
}: }:
let let
inherit (lib) mkOption types; inherit (lib) mkOption types concatStringsSep;
o = config.system.outputs; o = config.system.outputs;
phram_address = lib.toHexString (config.hardware.ram.startAddress + 256 * 1024 * 1024); phram_address = lib.toHexString (config.hardware.ram.startAddress + 256 * 1024 * 1024);
in { in {

View File

@ -58,6 +58,7 @@ in {
system.outputs = rec { system.outputs = rec {
tftpboot = tftpboot =
let let
inherit (pkgs.lib.trivial) toHexString;
o = config.system.outputs; o = config.system.outputs;
image = let choices = { image = let choices = {
uimage = o.uimage; uimage = o.uimage;

View File

@ -5,7 +5,7 @@
, ... , ...
}: }:
let let
inherit (lib) mkOption types; inherit (lib) mkOption types concatStringsSep;
o = config.system.outputs; o = config.system.outputs;
cfg = config.tplink-safeloader; cfg = config.tplink-safeloader;
in { in {

View File

@ -5,7 +5,7 @@
, ... , ...
}: }:
let let
inherit (lib) mkIf mkOption types; inherit (lib) mkIf mkEnableOption mkOption types concatStringsSep;
cfg = config.boot.tftp; cfg = config.boot.tftp;
instructions = pkgs.writeText "env.scr" '' instructions = pkgs.writeText "env.scr" ''
setenv serverip ${cfg.serverip} setenv serverip ${cfg.serverip}

View File

@ -5,6 +5,7 @@
, ... , ...
}: }:
let let
inherit (pkgs) liminix;
inherit (lib) mkIf mkOption types concatStringsSep optionalString; inherit (lib) mkIf mkOption types concatStringsSep optionalString;
in in
{ {

View File

@ -5,7 +5,7 @@
, ... , ...
}: }:
let let
inherit (lib) mkIf mkOption types; inherit (lib) mkIf mkEnableOption mkOption types concatStringsSep;
models = "6b e1 6f e1 ff ff ff ff ff ff"; models = "6b e1 6f e1 ff ff ff ff ff ff";
in { in {
options.system.outputs = { options.system.outputs = {

View File

@ -1,5 +1,8 @@
{ {
liminix liminix
, lib
, ppp
, pppoe
, writeAshScript , writeAshScript
, writeText , writeText
, serviceFns , serviceFns

View File

@ -2,7 +2,7 @@
let let
svc = config.system.service; svc = config.system.service;
cfg = config.profile.gateway; cfg = config.profile.gateway;
inherit (lib) mkOption mkEnableOption mkIf types; inherit (lib) mkOption mkEnableOption mkIf mdDoc types optional optionals;
inherit (pkgs) liminix serviceFns; inherit (pkgs) liminix serviceFns;
inherit (liminix.services) bundle oneshot; inherit (liminix.services) bundle oneshot;
hostaps = hostaps =

View File

@ -5,9 +5,9 @@
... ...
}: let }: let
inherit (pkgs) liminix; inherit (pkgs) liminix;
inherit (lib) mkOption types ; inherit (lib) mkEnableOption mkOption types isDerivation hasAttr ;
inherit (pkgs.liminix.services) oneshot target; inherit (pkgs.liminix.services) oneshot longrun bundle target;
inherit (pkgs.pseudofile) dir symlink; inherit (pkgs.pseudofile) dir symlink;
inherit (pkgs) serviceFns; inherit (pkgs) serviceFns;
svc = config.system.service; svc = config.system.service;

View File

@ -1,10 +1,11 @@
{ {
config config
, pkgs
, lib , lib
, ... , ...
}: }:
let let
inherit (lib) mkIf mkEnableOption; # types concatStringsSep; inherit (lib) mkIf mkEnableOption mkOption; # types concatStringsSep;
in { in {
options = { options = {
boot = { boot = {

View File

@ -1,4 +1,4 @@
{ config, pkgs, ... } : { config, pkgs, lib, ... } :
{ {
config = { config = {
programs.busybox = { programs.busybox = {

View File

@ -1,6 +1,7 @@
{ {
liminix liminix
, uevent-watch , uevent-watch
, serviceFns
, lib }: , lib }:
{ {
serviceName, terms, symlink serviceName, terms, symlink
@ -18,6 +19,6 @@ let
termsString = stringify terms; termsString = stringify terms;
in longrun { in longrun {
name = "watch-for-${serviceName}"; name = "watch-for-${serviceName}";
restart-on-upgrade = true; isTrigger = true;
run = "${uevent-watch}/bin/uevent-watch ${if symlink != null then "-n ${symlink}" else ""} -s ${serviceName} ${termsString}"; run = "${uevent-watch}/bin/uevent-watch ${if symlink != null then "-n ${symlink}" else ""} -s ${serviceName} ${termsString}";
} }

View File

@ -1,6 +1,7 @@
{ {
liminix liminix
, dropbear , dropbear
, serviceFns
, lib , lib
}: }:
p : p :

View File

@ -1,7 +1,7 @@
# support for USB block devices and the common filesystems # support for USB block devices and the common filesystems
# they're likely to provide # they're likely to provide
{ config, ... }: {lib, config, ... }:
{ {
kernel = { kernel = {
config = { config = {

View File

@ -16,7 +16,7 @@ let
inherit (lib) inherit (lib)
concatStrings concatStringsSep mapAttrsToList mkOption types; concatStrings concatStringsSep mapAttrsToList mkOption types;
inherit (builtins) toString; inherit (builtins) toString;
inherit (pkgs.pseudofile) dir; inherit (pkgs.pseudofile) dir symlink;
passwd-file = passwd-file =
let lines = mapAttrsToList (name: u: "${name}:${if u ? passwd then u.passwd else "!!"}:${toString u.uid}:${toString u.gid}:${u.gecos}:${u.dir}:${u.shell}\n" ) let lines = mapAttrsToList (name: u: "${name}:${if u ? passwd then u.passwd else "!!"}:${toString u.uid}:${toString u.gid}:${u.gecos}:${u.dir}:${u.shell}\n" )
config.users; config.users;

View File

@ -13,6 +13,7 @@
{ lib, pkgs, config, ...}: { lib, pkgs, config, ...}:
let let
inherit (lib) mkOption types; inherit (lib) mkOption types;
inherit (pkgs.liminix.services) oneshot;
inherit (pkgs) liminix; inherit (pkgs) liminix;
in in
{ {

View File

@ -1,5 +1,6 @@
{ lib, pkgs, config, ...}: { lib, pkgs, config, ...}:
let let
inherit (lib) mkEnableOption mkOption types isDerivation hasAttr ;
inherit (pkgs.pseudofile) dir symlink; inherit (pkgs.pseudofile) dir symlink;
inherit (pkgs) stdenv wireless-regdb; inherit (pkgs) stdenv wireless-regdb;
regulatory = stdenv.mkDerivation { regulatory = stdenv.mkDerivation {

View File

@ -3,7 +3,7 @@
, lib , lib
, zyxel-bootconfig , zyxel-bootconfig
}: }:
{ ensureActiveImage, bootConfigurationMtdPartition, kernelCommandLineSource }: { ensureActiveImage, primaryMtdPartition, secondaryMtdPartition, bootConfigurationMtdPartition, kernelCommandLineSource }:
let let
inherit (liminix.services) oneshot; inherit (liminix.services) oneshot;
activeImageIndex = if ensureActiveImage == "primary" then 0 else 1; activeImageIndex = if ensureActiveImage == "primary" then 0 else 1;

View File

@ -1,4 +1,6 @@
{ nellie {
lua
, nellie
, writeFennel , writeFennel
, anoia , anoia
, fennel , fennel

View File

@ -1,4 +1,9 @@
{ lib {
runCommand
, runtimeShell
, fetchurl
, lib
, luaPackages
, lua , lua
, lualinux , lualinux
, writeScriptBin , writeScriptBin

View File

@ -7,8 +7,8 @@ name : ruleset :
let let
inherit (lib.strings) concatStringsSep splitString hasInfix substring; inherit (lib.strings) concatStringsSep splitString hasInfix substring;
inherit (lib.lists) groupBy; inherit (lib.lists) groupBy;
inherit (lib.attrsets) mapAttrsToList; inherit (lib.attrsets) mapAttrsToList nameValuePair;
inherit (builtins) map head tail; inherit (builtins) map listToAttrs replaceStrings head tail;
indentLines = offset : lines : indentLines = offset : lines :
if lines == [] if lines == []
@ -31,7 +31,7 @@ let
indent = text : indentLines 0 (splitString "\n" text); indent = text : indentLines 0 (splitString "\n" text);
dochain = { name, type, rules, dochain = { name, type, family, rules,
policy ? null, policy ? null,
priority ? "filter", priority ? "filter",
hook ? null } : '' hook ? null } : ''

View File

@ -1,4 +1,6 @@
{ netlink-lua {
lua
, netlink-lua
, writeFennelScript , writeFennelScript
, runCommand , runCommand
, anoia , anoia

View File

@ -3,7 +3,9 @@
, python2 , python2
, which , which
, fetchgit , fetchgit
, fetchpatch
, fetchFromGitHub , fetchFromGitHub
, autoreconfHook
, coccinelle , coccinelle
}: }:
let let

View File

@ -1,5 +1,6 @@
{ stdenv { stdenv
, buildPackages , buildPackages
, runCommand
, writeText , writeText
, lib , lib

View File

@ -1,4 +1,7 @@
{ buildPackages {
stdenv
, busybox
, buildPackages
, callPackage , callPackage
, pseudofile , pseudofile
, runCommand , runCommand

View File

@ -1,11 +1,14 @@
{ {
stdenvNoCC stdenvNoCC
, s6-rc
, s6 , s6
, lib , lib
, callPackage
, writeScript , writeScript
, serviceFns , serviceFns
}: }:
let let
inherit (builtins) concatStringsSep any map;
prefix = "/run/services/outputs"; prefix = "/run/services/outputs";
output = service: name: "${prefix}/${service.name}/${name}"; output = service: name: "${prefix}/${service.name}/${name}";
serviceScript = commands : '' serviceScript = commands : ''
@ -25,6 +28,7 @@ let
, up ? null , up ? null
, down ? null , down ? null
, finish ? null , finish ? null
, outputs ? []
, notification-fd ? null , notification-fd ? null
, producer-for ? null , producer-for ? null
, consumer-for ? null , consumer-for ? null
@ -34,15 +38,15 @@ let
, dependencies ? [] , dependencies ? []
, contents ? [] , contents ? []
, buildInputs ? [] , buildInputs ? []
, restart-on-upgrade ? false , isTrigger ? false
, controller ? null , controller ? null
}: } @ args:
stdenvNoCC.mkDerivation { stdenvNoCC.mkDerivation {
# we use stdenvNoCC to avoid generating derivations with names # we use stdenvNoCC to avoid generating derivations with names
# like foo.service-mips-linux-musl # like foo.service-mips-linux-musl
inherit name serviceType up down run finish notification-fd inherit name serviceType up down run finish notification-fd
producer-for consumer-for pipeline-name timeout-up timeout-down producer-for consumer-for pipeline-name timeout-up timeout-down;
restart-on-upgrade; restart-on-upgrade = isTrigger;
buildInputs = buildInputs ++ dependencies ++ contents ++ lib.optional (controller != null) controller; buildInputs = buildInputs ++ dependencies ++ contents ++ lib.optional (controller != null) controller;
inherit controller dependencies contents; inherit controller dependencies contents;
builder = ./builder.sh; builder = ./builder.sh;
@ -51,7 +55,9 @@ let
longrun = { longrun = {
name name
, run , run
, outputs ? []
, notification-fd ? null , notification-fd ? null
, dependencies ? []
, buildInputs ? [] , buildInputs ? []
, ... , ...
} @ args: } @ args:
@ -75,6 +81,8 @@ let
name name
, up , up
, down ? "" , down ? ""
, outputs ? []
, dependencies ? []
, ... , ...
} @ args : service (args // { } @ args : service (args // {
serviceType = "oneshot"; serviceType = "oneshot";
@ -83,7 +91,9 @@ let
"${name}-down" "${name}-down"
"${serviceScript down}\n${cleanupScript name}"; "${serviceScript down}\n${cleanupScript name}";
}); });
bundle = { contents ? [] bundle = {
name
, contents ? []
, dependencies ? [] , dependencies ? []
, ... , ...
} @ args: service (args // { } @ args: service (args // {

View File

@ -1,4 +1,4 @@
{ lua, fetchFromGitHub }: { lua, lib, fetchFromGitHub }:
let pname = "linotify"; let pname = "linotify";
in lua.pkgs.buildLuaPackage { in lua.pkgs.buildLuaPackage {
inherit pname; inherit pname;

View File

@ -1,4 +1,4 @@
{ lua, fetchFromGitHub }: { lua, lib, fetchFromGitHub }:
let let
pname = "lualinux"; pname = "lualinux";
src = fetchFromGitHub { src = fetchFromGitHub {

View File

@ -22,7 +22,7 @@ let
rev = "a5265497a4f6da158e95d6a450cb2cb6dc085cab"; rev = "a5265497a4f6da158e95d6a450cb2cb6dc085cab";
hash = "sha256-YYi4gkpLjbOK7bM2MGQjAyEBuXJ9JNXoz/JEmYf8xE8="; hash = "sha256-YYi4gkpLjbOK7bM2MGQjAyEBuXJ9JNXoz/JEmYf8xE8=";
}; };
inherit (liminix.services) oneshot; inherit (liminix.services) oneshot longrun;
inherit (lib.lists) foldl; inherit (lib.lists) foldl;
configs = { configs = {
ath9k.kconfig = { ath9k.kconfig = {

View File

@ -1,8 +1,12 @@
{ {
stdenv stdenv
, nix
, cpio
, openssh
}: stdenv.mkDerivation { }: stdenv.mkDerivation {
name = "min-collect-garbage"; name = "min-collect-garbage";
buildInputs = [ ]; buildInputs = [ ];
# propagatedBuildInputs = [ openssh ];
src = ./.; src = ./.;
makeFlags = [ "min-list-garbage" ]; makeFlags = [ "min-list-garbage" ];
installPhase = '' installPhase = ''

View File

@ -1,4 +1,4 @@
{ lua, fetchFromGitHub }: { lua, lib, fetchFromGitHub }:
let let
pname = "minisock"; pname = "minisock";
src = fetchFromGitHub { src = fetchFromGitHub {

View File

@ -1,4 +1,4 @@
{ lua, stdenv }: { lua, lib, fetchpatch, fetchFromGitHub, stdenv }:
let pname = "nellie"; let pname = "nellie";
in lua.pkgs.buildLuaPackage { in lua.pkgs.buildLuaPackage {

View File

@ -1,4 +1,4 @@
{ lua, fetchFromGitHub, libmnl }: { lua, lib, fetchpatch, fetchFromGitHub, libmnl }:
let pname = "netlink"; let pname = "netlink";
in lua.pkgs.buildLuaPackage { in lua.pkgs.buildLuaPackage {
inherit pname; inherit pname;

View File

@ -1,6 +1,7 @@
{ {
writeFennelScript writeFennelScript
, anoia , anoia
, lua
, lualinux , lualinux
}: }:
writeFennelScript "odhcpc-script" [anoia lualinux] ./odhcp6-script.fnl writeFennelScript "odhcpc-script" [anoia lualinux] ./odhcp6-script.fnl

View File

@ -1,4 +1,5 @@
{ stdenv { stdenv
, buildPackages
, cmake , cmake
, fetchFromGitHub , fetchFromGitHub
, ...} : , ...} :

View File

@ -1,5 +1,6 @@
{ {
fetchFromGitHub fetchFromGitHub
, writeShellScript
, pkgsBuildBuild , pkgsBuildBuild
}: }:
let let

View File

@ -2,6 +2,8 @@
, stdenv , stdenv
, fetchFromGitHub , fetchFromGitHub
, ppp } : , ppp } :
let
in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "rp-pppoe"; pname = "rp-pppoe";
version = "3.15"; version = "3.15";

View File

@ -1,7 +1,14 @@
{ {
stdenv stdenv
, fetchzip
, gdb , gdb
}: }:
let kernel = fetchzip {
name = "linux";
url = "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.71.tar.gz";
hash = "sha256-pq6QNa0PJVeheaZkuvAPD0rLuEeKrViKk65dz+y4kqo=";
};
in
stdenv.mkDerivation { stdenv.mkDerivation {
name = "preinit"; name = "preinit";
src = ./.; src = ./.;

View File

@ -1,18 +1,6 @@
{writeText}: {writeText}:
writeText "service-fns.sh" '' writeText "service-fns.sh" ''
output() { cat $1/.outputs/$2; } output() { cat $1/.outputs/$2; }
output_word() {
set -f
local i=1
for var in $(cat $1/.outputs/$2); do
if test "$i" == "$3" ; then
echo $var
fi
i=$(expr $i + 1)
done
set +f
}
output_path() { echo $(realpath $1/.outputs)/$2; } output_path() { echo $(realpath $1/.outputs)/$2; }
SERVICE_OUTPUTS=/run/services/outputs SERVICE_OUTPUTS=/run/services/outputs
SERVICE_STATE=/run/services/state SERVICE_STATE=/run/services/state

View File

@ -1,6 +1,7 @@
{ {
lua5_3 lua5_3
, stdenv , stdenv
, fetchFromGitHub
, makeWrapper , makeWrapper
} : } :
let let

Some files were not shown because too many files have changed in this diff Show More