Compare commits
No commits in common. "e94bf62ec1ce938b9c975195d696640f8deaceab" and "c4185617c039dacfe1afdc6b051c9507069fa99f" have entirely different histories.
e94bf62ec1
...
c4185617c0
7
ci.nix
7
ci.nix
|
@ -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; [
|
||||||
|
|
|
@ -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"; };
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"; };
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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,75 +46,46 @@ 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
|
)
|
||||||
)
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
filesystem = dir {
|
filesystem = dir {
|
||||||
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)";
|
via = "$(output ${services.dhcpc} router)";
|
||||||
route-to-bootstrap-nameserver = svc.network.route.build {
|
target = lns;
|
||||||
via = "$(output ${services.dhcpc} router)";
|
dependencies = [services.dhcpc];
|
||||||
target = ns;
|
|
||||||
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 {
|
ppp-options = [
|
||||||
name = "check-lns-address";
|
"debug" "+ipv6" "noauth"
|
||||||
up = ''
|
"name" rsecrets.l2tp.name
|
||||||
grep -Fx ${lns.address} $(output_path ${services.lns-address} addresses)
|
"password" rsecrets.l2tp.password
|
||||||
'';
|
];
|
||||||
dependencies = [ services.lns-address ];
|
dependencies = [ services.lnsroute ];
|
||||||
};
|
|
||||||
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 = [
|
|
||||||
"debug" "+ipv6" "noauth"
|
|
||||||
"name" rsecrets.l2tp.name
|
|
||||||
"connect-delay" "5000"
|
|
||||||
"password" rsecrets.l2tp.password
|
|
||||||
];
|
|
||||||
dependencies = [config.services.lns-address route check-address];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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;
|
||||||
|
|
|
@ -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)";
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ lim, pkgs, config, ...}:
|
{ lib, lim, pkgs, config, ...}:
|
||||||
{
|
{
|
||||||
config = {
|
config = {
|
||||||
kernel.config = {
|
kernel.config = {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ lim, pkgs, config, ...}:
|
{ lib, lim, pkgs, config, ...}:
|
||||||
{
|
{
|
||||||
config = {
|
config = {
|
||||||
kernel.config = {
|
kernel.config = {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ config, lim, ...}:
|
{ lib, pkgs, config, lim, ...}:
|
||||||
{
|
{
|
||||||
config = {
|
config = {
|
||||||
kernel.config = {
|
kernel.config = {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ pkgs, config, ...}:
|
{ lib, pkgs, config, ...}:
|
||||||
{
|
{
|
||||||
imports = [ ./mips.nix ];
|
imports = [ ./mips.nix ];
|
||||||
config = {
|
config = {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ config, ...}:
|
{ lib, pkgs, config, ...}:
|
||||||
{
|
{
|
||||||
imports = [ ./mips.nix ];
|
imports = [ ./mips.nix ];
|
||||||
config = {
|
config = {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 = ''
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
writeFennel
|
writeFennel
|
||||||
, linotify
|
, linotify
|
||||||
, anoia
|
, anoia
|
||||||
|
, lua
|
||||||
, lualinux
|
, lualinux
|
||||||
}:
|
}:
|
||||||
writeFennel "acquire-delegated-prefix" {
|
writeFennel "acquire-delegated-prefix" {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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}
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
|
@ -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 =
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
liminix
|
liminix
|
||||||
|
, ifwait
|
||||||
, serviceFns
|
, serviceFns
|
||||||
, lib
|
, lib
|
||||||
}:
|
}:
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
{
|
{
|
||||||
liminix
|
liminix
|
||||||
|
, ifwait
|
||||||
|
, serviceFns
|
||||||
, lib
|
, lib
|
||||||
}:
|
}:
|
||||||
{ enableIPv4, enableIPv6 }:
|
{ enableIPv4, enableIPv6 }:
|
||||||
|
|
|
@ -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 ''
|
||||||
|
|
|
@ -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}
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
, ...
|
, ...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (lib) mkIf;
|
inherit (lib) mkIf mkOption types;
|
||||||
o = config.system.outputs;
|
o = config.system.outputs;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
, ...
|
, ...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (lib) mkIf;
|
inherit (lib) mkIf mkOption types;
|
||||||
o = config.system.outputs;
|
o = config.system.outputs;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
, ...
|
, ...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (lib) mkIf;
|
inherit (lib) mkIf mkOption types;
|
||||||
o = config.system.outputs;
|
o = config.system.outputs;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
|
@ -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" {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
{
|
{
|
||||||
liminix
|
liminix
|
||||||
|
, lib
|
||||||
|
, ppp
|
||||||
|
, pppoe
|
||||||
, writeAshScript
|
, writeAshScript
|
||||||
, writeText
|
, writeText
|
||||||
, serviceFns
|
, serviceFns
|
||||||
|
|
|
@ -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 =
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ config, pkgs, ... } :
|
{ config, pkgs, lib, ... } :
|
||||||
{
|
{
|
||||||
config = {
|
config = {
|
||||||
programs.busybox = {
|
programs.busybox = {
|
||||||
|
|
|
@ -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}";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
liminix
|
liminix
|
||||||
, dropbear
|
, dropbear
|
||||||
|
, serviceFns
|
||||||
, lib
|
, lib
|
||||||
}:
|
}:
|
||||||
p :
|
p :
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
{ nellie
|
{
|
||||||
|
lua
|
||||||
|
, nellie
|
||||||
, writeFennel
|
, writeFennel
|
||||||
, anoia
|
, anoia
|
||||||
, fennel
|
, fennel
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
{ lib
|
{
|
||||||
|
runCommand
|
||||||
|
, runtimeShell
|
||||||
|
, fetchurl
|
||||||
|
, lib
|
||||||
|
, luaPackages
|
||||||
, lua
|
, lua
|
||||||
, lualinux
|
, lualinux
|
||||||
, writeScriptBin
|
, writeScriptBin
|
||||||
|
|
|
@ -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 } : ''
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
{ netlink-lua
|
{
|
||||||
|
lua
|
||||||
|
, netlink-lua
|
||||||
, writeFennelScript
|
, writeFennelScript
|
||||||
, runCommand
|
, runCommand
|
||||||
, anoia
|
, anoia
|
||||||
|
|
|
@ -3,7 +3,9 @@
|
||||||
, python2
|
, python2
|
||||||
, which
|
, which
|
||||||
, fetchgit
|
, fetchgit
|
||||||
|
, fetchpatch
|
||||||
, fetchFromGitHub
|
, fetchFromGitHub
|
||||||
|
, autoreconfHook
|
||||||
, coccinelle
|
, coccinelle
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{ stdenv
|
{ stdenv
|
||||||
, buildPackages
|
, buildPackages
|
||||||
|
, runCommand
|
||||||
, writeText
|
, writeText
|
||||||
, lib
|
, lib
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
{ buildPackages
|
{
|
||||||
|
stdenv
|
||||||
|
, busybox
|
||||||
|
, buildPackages
|
||||||
, callPackage
|
, callPackage
|
||||||
, pseudofile
|
, pseudofile
|
||||||
, runCommand
|
, runCommand
|
||||||
|
|
|
@ -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 // {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ lua, fetchFromGitHub }:
|
{ lua, lib, fetchFromGitHub }:
|
||||||
let
|
let
|
||||||
pname = "lualinux";
|
pname = "lualinux";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
|
@ -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 = ''
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ lua, fetchFromGitHub }:
|
{ lua, lib, fetchFromGitHub }:
|
||||||
let
|
let
|
||||||
pname = "minisock";
|
pname = "minisock";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{ stdenv
|
{ stdenv
|
||||||
|
, buildPackages
|
||||||
, cmake
|
, cmake
|
||||||
, fetchFromGitHub
|
, fetchFromGitHub
|
||||||
, ...} :
|
, ...} :
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
fetchFromGitHub
|
fetchFromGitHub
|
||||||
|
, writeShellScript
|
||||||
, pkgsBuildBuild
|
, pkgsBuildBuild
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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 = ./.;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
Loading…
Reference in New Issue