Remove old stale/unused configuration
This commit is contained in:
@@ -56,7 +56,6 @@
|
|||||||
pciutils
|
pciutils
|
||||||
usbutils
|
usbutils
|
||||||
killall
|
killall
|
||||||
screen
|
|
||||||
micro
|
micro
|
||||||
helix
|
helix
|
||||||
lm_sensors
|
lm_sensors
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ in
|
|||||||
imports = [
|
imports = [
|
||||||
./pia-openvpn.nix
|
./pia-openvpn.nix
|
||||||
./pia-wireguard.nix
|
./pia-wireguard.nix
|
||||||
./ping.nix
|
|
||||||
./tailscale.nix
|
./tailscale.nix
|
||||||
./vpn.nix
|
./vpn.nix
|
||||||
./sandbox.nix
|
./sandbox.nix
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
# keeps peer to peer connections alive with a periodic ping
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
with builtins;
|
|
||||||
|
|
||||||
# todo auto restart
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.keepalive-ping;
|
|
||||||
|
|
||||||
serviceTemplate = host:
|
|
||||||
{
|
|
||||||
"keepalive-ping@${host}" = {
|
|
||||||
description = "Periodic ping keep alive for ${host} connection";
|
|
||||||
|
|
||||||
requires = [ "network-online.target" ];
|
|
||||||
after = [ "network.target" "network-online.target" ];
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
serviceConfig.Restart = "always";
|
|
||||||
|
|
||||||
path = with pkgs; [ iputils ];
|
|
||||||
|
|
||||||
script = ''
|
|
||||||
ping -i ${cfg.delay} ${host} &>/dev/null
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
combineAttrs = foldl recursiveUpdate { };
|
|
||||||
|
|
||||||
serviceList = map serviceTemplate cfg.hosts;
|
|
||||||
|
|
||||||
services = combineAttrs serviceList;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.keepalive-ping = {
|
|
||||||
enable = mkEnableOption "Enable keep alive ping task";
|
|
||||||
hosts = mkOption {
|
|
||||||
type = types.listOf types.str;
|
|
||||||
default = [ ];
|
|
||||||
description = ''
|
|
||||||
Hosts to ping periodically
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
delay = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "60";
|
|
||||||
description = ''
|
|
||||||
Ping interval in seconds of periodic ping per host being pinged
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
systemd.services = services;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
{ config, lib, ... }:
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
let
|
|
||||||
cfg = config.ceph;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.ceph = { };
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
# ceph.enable = true;
|
|
||||||
|
|
||||||
## S3 Object gateway
|
|
||||||
#ceph.rgw.enable = true;
|
|
||||||
#ceph.rgw.daemons = [
|
|
||||||
#];
|
|
||||||
|
|
||||||
# https://docs.ceph.com/en/latest/start/intro/
|
|
||||||
|
|
||||||
# meta object storage daemon
|
|
||||||
ceph.osd.enable = true;
|
|
||||||
ceph.osd.daemons = [
|
|
||||||
|
|
||||||
];
|
|
||||||
# monitor's ceph state
|
|
||||||
ceph.mon.enable = true;
|
|
||||||
ceph.mon.daemons = [
|
|
||||||
|
|
||||||
];
|
|
||||||
# manage ceph
|
|
||||||
ceph.mgr.enable = true;
|
|
||||||
ceph.mgr.daemons = [
|
|
||||||
|
|
||||||
];
|
|
||||||
# metadata server
|
|
||||||
ceph.mds.enable = true;
|
|
||||||
ceph.mds.daemons = [
|
|
||||||
|
|
||||||
];
|
|
||||||
ceph.global.fsid = "925773DC-D95F-476C-BBCD-08E01BF0865F";
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -5,17 +5,12 @@
|
|||||||
./nginx.nix
|
./nginx.nix
|
||||||
./thelounge.nix
|
./thelounge.nix
|
||||||
./mumble.nix
|
./mumble.nix
|
||||||
./icecast.nix
|
|
||||||
./nginx-stream.nix
|
|
||||||
./matrix.nix
|
./matrix.nix
|
||||||
./zerobin.nix
|
|
||||||
./gitea.nix
|
./gitea.nix
|
||||||
./samba.nix
|
./samba.nix
|
||||||
./owncast.nix
|
./owncast.nix
|
||||||
./mailserver.nix
|
./mailserver.nix
|
||||||
./nextcloud.nix
|
./nextcloud.nix
|
||||||
./iodine.nix
|
|
||||||
./searx.nix
|
|
||||||
./gitea-actions-runner.nix
|
./gitea-actions-runner.nix
|
||||||
./librechat.nix
|
./librechat.nix
|
||||||
./actualbudget.nix
|
./actualbudget.nix
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
services.gitlab = {
|
|
||||||
enable = true;
|
|
||||||
databasePasswordFile = "/var/keys/gitlab/db_password";
|
|
||||||
initialRootPasswordFile = "/var/keys/gitlab/root_password";
|
|
||||||
https = true;
|
|
||||||
host = "git.neet.dev";
|
|
||||||
port = 443;
|
|
||||||
user = "git";
|
|
||||||
group = "git";
|
|
||||||
databaseUsername = "git";
|
|
||||||
smtp = {
|
|
||||||
enable = true;
|
|
||||||
address = "localhost";
|
|
||||||
port = 25;
|
|
||||||
};
|
|
||||||
secrets = {
|
|
||||||
dbFile = "/var/keys/gitlab/db";
|
|
||||||
secretFile = "/var/keys/gitlab/secret";
|
|
||||||
otpFile = "/var/keys/gitlab/otp";
|
|
||||||
jwsFile = "/var/keys/gitlab/jws";
|
|
||||||
};
|
|
||||||
extraConfig = {
|
|
||||||
gitlab = {
|
|
||||||
email_from = "gitlab-no-reply@neet.dev";
|
|
||||||
email_display_name = "neet.dev GitLab";
|
|
||||||
email_reply_to = "gitlab-no-reply@neet.dev";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
pagesExtraArgs = [ "-listen-proxy" "127.0.0.1:8090" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
services.nginx.virtualHosts = {
|
|
||||||
"git.neet.dev" = {
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
locations."/".proxyPass = "http://unix:/run/gitlab/gitlab-workhorse.socket";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
domain = "hydra.neet.dev";
|
|
||||||
port = 3000;
|
|
||||||
notifyEmail = "hydra@neet.dev";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
services.nginx.virtualHosts."${domain}" = {
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:${toString port}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.hydra = {
|
|
||||||
enable = true;
|
|
||||||
inherit port;
|
|
||||||
hydraURL = "https://${domain}";
|
|
||||||
useSubstitutes = true;
|
|
||||||
notificationSender = notifyEmail;
|
|
||||||
buildMachinesFiles = [ ];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
{ lib, config, ... }:
|
|
||||||
|
|
||||||
# configures icecast to only accept source from localhost
|
|
||||||
# to a audio optimized stream on services.icecast.mount
|
|
||||||
# made available via nginx for http access on
|
|
||||||
# https://host/mount
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.services.icecast;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.services.icecast = {
|
|
||||||
mount = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
example = "stream.mp3";
|
|
||||||
};
|
|
||||||
fallback = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
example = "fallback.mp3";
|
|
||||||
};
|
|
||||||
nginx = lib.mkEnableOption "enable nginx";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
services.icecast = {
|
|
||||||
listen.address = "0.0.0.0";
|
|
||||||
listen.port = 8001;
|
|
||||||
admin.password = "hackme";
|
|
||||||
extraConf = ''
|
|
||||||
<authentication>
|
|
||||||
<source-password>hackme</source-password>
|
|
||||||
</authentication>
|
|
||||||
<http-headers>
|
|
||||||
<header type="cors" name="Access-Control-Allow-Origin" />
|
|
||||||
</http-headers>
|
|
||||||
<mount type="normal">
|
|
||||||
<mount-name>/${cfg.mount}</mount-name>
|
|
||||||
<max-listeners>30</max-listeners>
|
|
||||||
<bitrate>64000</bitrate>
|
|
||||||
<hidden>false</hidden>
|
|
||||||
<public>false</public>
|
|
||||||
<fallback-mount>/${cfg.fallback}</fallback-mount>
|
|
||||||
<fallback-override>1</fallback-override>
|
|
||||||
</mount>
|
|
||||||
<mount type="normal">
|
|
||||||
<mount-name>/${cfg.fallback}</mount-name>
|
|
||||||
<max-listeners>30</max-listeners>
|
|
||||||
<bitrate>64000</bitrate>
|
|
||||||
<hidden>false</hidden>
|
|
||||||
<public>false</public>
|
|
||||||
</mount>
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
services.nginx.virtualHosts.${cfg.hostname} = lib.mkIf cfg.nginx {
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
locations."/${cfg.mount}" = {
|
|
||||||
proxyPass = "http://localhost:${toString cfg.listen.port}/${cfg.mount}";
|
|
||||||
extraConfig = ''
|
|
||||||
add_header Access-Control-Allow-Origin *;
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.services.iodine.server;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
# iodine DNS-based vpn
|
|
||||||
services.iodine.server = {
|
|
||||||
ip = "192.168.99.1";
|
|
||||||
domain = "tun.neet.dev";
|
|
||||||
passwordFile = "/run/agenix/iodine";
|
|
||||||
};
|
|
||||||
age.secrets.iodine.file = ../../secrets/iodine.age;
|
|
||||||
networking.firewall.allowedUDPPorts = [ 53 ];
|
|
||||||
|
|
||||||
networking.nat.internalInterfaces = [
|
|
||||||
"dns0" # iodine
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
{ lib, config, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.services.nginx.stream;
|
|
||||||
nginxWithRTMP = pkgs.nginx.override {
|
|
||||||
modules = [ pkgs.nginxModules.rtmp ];
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.services.nginx.stream = {
|
|
||||||
enable = lib.mkEnableOption "enable nginx rtmp/hls/dash video streaming";
|
|
||||||
port = lib.mkOption {
|
|
||||||
type = lib.types.int;
|
|
||||||
default = 1935;
|
|
||||||
description = "rtmp injest/serve port";
|
|
||||||
};
|
|
||||||
rtmpName = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "live";
|
|
||||||
description = "the name of the rtmp application";
|
|
||||||
};
|
|
||||||
hostname = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
description = "the http host to serve hls";
|
|
||||||
};
|
|
||||||
httpLocation = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "/tmp";
|
|
||||||
description = "the path of the tmp http files";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
services.nginx = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
package = nginxWithRTMP;
|
|
||||||
|
|
||||||
virtualHosts.${cfg.hostname} = {
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
locations = {
|
|
||||||
"/stream/hls".root = "${cfg.httpLocation}/hls";
|
|
||||||
"/stream/dash".root = "${cfg.httpLocation}/dash";
|
|
||||||
};
|
|
||||||
extraConfig = ''
|
|
||||||
location /stat {
|
|
||||||
rtmp_stat all;
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
appendConfig = ''
|
|
||||||
rtmp {
|
|
||||||
server {
|
|
||||||
listen ${toString cfg.port};
|
|
||||||
chunk_size 4096;
|
|
||||||
application ${cfg.rtmpName} {
|
|
||||||
allow publish all;
|
|
||||||
allow publish all;
|
|
||||||
live on;
|
|
||||||
record off;
|
|
||||||
hls on;
|
|
||||||
hls_path ${cfg.httpLocation}/hls;
|
|
||||||
dash on;
|
|
||||||
dash_path ${cfg.httpLocation}/dash;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [
|
|
||||||
cfg.port
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.services.searx;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
services.searx = {
|
|
||||||
environmentFile = "/run/agenix/searx";
|
|
||||||
settings = {
|
|
||||||
server.port = 43254;
|
|
||||||
server.secret_key = "@SEARX_SECRET_KEY@";
|
|
||||||
engines = [{
|
|
||||||
name = "wolframalpha";
|
|
||||||
shortcut = "wa";
|
|
||||||
api_key = "@WOLFRAM_API_KEY@";
|
|
||||||
engine = "wolframalpha_api";
|
|
||||||
}];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
services.nginx.virtualHosts."search.neet.space" = {
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:${toString config.services.searx.settings.server.port}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
age.secrets.searx.file = ../../secrets/searx.age;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
# external
|
|
||||||
rtp-port = 8083;
|
|
||||||
webrtc-peer-lower-port = 20000;
|
|
||||||
webrtc-peer-upper-port = 20100;
|
|
||||||
domain = "live.neet.space";
|
|
||||||
|
|
||||||
# internal
|
|
||||||
ingest-port = 8084;
|
|
||||||
web-port = 8085;
|
|
||||||
webrtc-port = 8086;
|
|
||||||
toStr = builtins.toString;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
networking.firewall.allowedUDPPorts = [ rtp-port ];
|
|
||||||
networking.firewall.allowedTCPPortRanges = [{
|
|
||||||
from = webrtc-peer-lower-port;
|
|
||||||
to = webrtc-peer-upper-port;
|
|
||||||
}];
|
|
||||||
networking.firewall.allowedUDPPortRanges = [{
|
|
||||||
from = webrtc-peer-lower-port;
|
|
||||||
to = webrtc-peer-upper-port;
|
|
||||||
}];
|
|
||||||
|
|
||||||
virtualisation.docker.enable = true;
|
|
||||||
|
|
||||||
services.nginx.virtualHosts.${domain} = {
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
locations = {
|
|
||||||
"/" = {
|
|
||||||
proxyPass = "http://localhost:${toStr web-port}";
|
|
||||||
};
|
|
||||||
"websocket" = {
|
|
||||||
proxyPass = "http://localhost:${toStr webrtc-port}/websocket";
|
|
||||||
proxyWebsockets = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
virtualisation.oci-containers = {
|
|
||||||
backend = "docker";
|
|
||||||
containers = {
|
|
||||||
"lightspeed-ingest" = {
|
|
||||||
workdir = "/var/lib/lightspeed-ingest";
|
|
||||||
image = "projectlightspeed/ingest";
|
|
||||||
ports = [
|
|
||||||
"${toStr ingest-port}:8084"
|
|
||||||
];
|
|
||||||
# imageFile = pkgs.dockerTools.pullImage {
|
|
||||||
# imageName = "projectlightspeed/ingest";
|
|
||||||
# finalImageTag = "version-0.1.4";
|
|
||||||
# imageDigest = "sha256:9fc51833b7c27a76d26e40f092b9cec1ac1c4bfebe452e94ad3269f1f73ff2fc";
|
|
||||||
# sha256 = "19kxl02x0a3i6hlnsfcm49hl6qxnq2f3hfmyv1v8qdaz58f35kd5";
|
|
||||||
# };
|
|
||||||
};
|
|
||||||
"lightspeed-react" = {
|
|
||||||
workdir = "/var/lib/lightspeed-react";
|
|
||||||
image = "projectlightspeed/react";
|
|
||||||
ports = [
|
|
||||||
"${toStr web-port}:80"
|
|
||||||
];
|
|
||||||
# imageFile = pkgs.dockerTools.pullImage {
|
|
||||||
# imageName = "projectlightspeed/react";
|
|
||||||
# finalImageTag = "version-0.1.3";
|
|
||||||
# imageDigest = "sha256:b7c58425f1593f7b4304726b57aa399b6e216e55af9c0962c5c19333fae638b6";
|
|
||||||
# sha256 = "0d2jh7mr20h7dxgsp7ml7cw2qd4m8ja9rj75dpy59zyb6v0bn7js";
|
|
||||||
# };
|
|
||||||
};
|
|
||||||
"lightspeed-webrtc" = {
|
|
||||||
workdir = "/var/lib/lightspeed-webrtc";
|
|
||||||
image = "projectlightspeed/webrtc";
|
|
||||||
ports = [
|
|
||||||
"${toStr webrtc-port}:8080"
|
|
||||||
"${toStr rtp-port}:65535/udp"
|
|
||||||
"${toStr webrtc-peer-lower-port}-${toStr webrtc-peer-upper-port}:${toStr webrtc-peer-lower-port}-${toStr webrtc-peer-upper-port}/tcp"
|
|
||||||
"${toStr webrtc-peer-lower-port}-${toStr webrtc-peer-upper-port}:${toStr webrtc-peer-lower-port}-${toStr webrtc-peer-upper-port}/udp"
|
|
||||||
];
|
|
||||||
cmd = [
|
|
||||||
"lightspeed-webrtc"
|
|
||||||
"--addr=0.0.0.0"
|
|
||||||
"--ip=${domain}"
|
|
||||||
"--ports=${toStr webrtc-peer-lower-port}-${toStr webrtc-peer-upper-port}"
|
|
||||||
"run"
|
|
||||||
];
|
|
||||||
# imageFile = pkgs.dockerTools.pullImage {
|
|
||||||
# imageName = "projectlightspeed/webrtc";
|
|
||||||
# finalImageTag = "version-0.1.2";
|
|
||||||
# imageDigest = "sha256:ddf8b3dd294485529ec11d1234a3fc38e365a53c4738998c6bc2c6930be45ecf";
|
|
||||||
# sha256 = "1bdy4ak99fjdphj5bsk8rp13xxmbqdhfyfab14drbyffivg9ad2i";
|
|
||||||
# };
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.services.zerobin;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.services.zerobin = {
|
|
||||||
host = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
example = "example.com";
|
|
||||||
};
|
|
||||||
port = lib.mkOption {
|
|
||||||
type = lib.types.int;
|
|
||||||
default = 33422;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
config = lib.mkIf cfg.enable {
|
|
||||||
services.zerobin.listenPort = cfg.port;
|
|
||||||
services.zerobin.listenAddress = "localhost";
|
|
||||||
|
|
||||||
services.nginx.virtualHosts.${cfg.host} = {
|
|
||||||
enableACME = true;
|
|
||||||
forceSSL = true;
|
|
||||||
locations."/" = {
|
|
||||||
proxyPass = "http://localhost:${toString cfg.port}";
|
|
||||||
proxyWebsockets = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# zerobin service is broken in nixpkgs currently
|
|
||||||
systemd.services.zerobin.serviceConfig.ExecStart = lib.mkForce
|
|
||||||
"${pkgs.zerobin}/bin/zerobin --host=${cfg.listenAddress} --port=${toString cfg.listenPort} --data-dir=${cfg.dataDir}";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
# Example VM workspace configuration
|
|
||||||
#
|
|
||||||
# Add to sandboxed-workspace.workspaces in machines/fry/default.nix:
|
|
||||||
# sandboxed-workspace.workspaces.example = {
|
|
||||||
# type = "vm";
|
|
||||||
# config = ./workspaces/example.nix;
|
|
||||||
# ip = "192.168.83.10";
|
|
||||||
# };
|
|
||||||
#
|
|
||||||
# The workspace name ("example") becomes the hostname automatically.
|
|
||||||
# The IP is configured in default.nix, not here.
|
|
||||||
|
|
||||||
{
|
|
||||||
# Install packages as needed
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
# Add packages here
|
|
||||||
];
|
|
||||||
|
|
||||||
# Additional shares beyond the standard ones (workspace, ssh-host-keys, claude-config):
|
|
||||||
# microvm.shares = [ ... ];
|
|
||||||
}
|
|
||||||
@@ -77,9 +77,6 @@
|
|||||||
# pin postgresql for matrix (will need to migrate eventually)
|
# pin postgresql for matrix (will need to migrate eventually)
|
||||||
services.postgresql.package = pkgs.postgresql_15;
|
services.postgresql.package = pkgs.postgresql_15;
|
||||||
|
|
||||||
# iodine DNS-based vpn
|
|
||||||
# services.iodine.server.enable = true;
|
|
||||||
|
|
||||||
# proxied web services
|
# proxied web services
|
||||||
services.nginx.enable = true;
|
services.nginx.enable = true;
|
||||||
services.nginx.virtualHosts."navidrome.neet.cloud" = {
|
services.nginx.virtualHosts."navidrome.neet.cloud" = {
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
systemRoles = [
|
systemRoles = [
|
||||||
"server"
|
"server"
|
||||||
"email-server"
|
"email-server"
|
||||||
"iodine"
|
|
||||||
"pia"
|
"pia"
|
||||||
"nextcloud"
|
"nextcloud"
|
||||||
"dailybot"
|
"dailybot"
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./hardware-configuration.nix
|
|
||||||
./router.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
# https://dataswamp.org/~solene/2022-08-03-nixos-with-live-usb-router.html
|
|
||||||
# https://github.com/mdlayher/homelab/blob/391cfc0de06434e4dee0abe2bec7a2f0637345ac/nixos/routnerr-2/configuration.nix
|
|
||||||
# https://github.com/skogsbrus/os/blob/master/sys/router.nix
|
|
||||||
# http://trac.gateworks.com/wiki/wireless/wifi
|
|
||||||
|
|
||||||
system.autoUpgrade.enable = true;
|
|
||||||
|
|
||||||
services.tailscale.exitNode = true;
|
|
||||||
|
|
||||||
router.enable = true;
|
|
||||||
router.privateSubnet = "192.168.3";
|
|
||||||
|
|
||||||
services.iperf3.enable = true;
|
|
||||||
|
|
||||||
# networking.useDHCP = lib.mkForce true;
|
|
||||||
|
|
||||||
networking.usePredictableInterfaceNames = false;
|
|
||||||
|
|
||||||
powerManagement.cpuFreqGovernor = "ondemand";
|
|
||||||
|
|
||||||
|
|
||||||
services.irqbalance.enable = true;
|
|
||||||
|
|
||||||
# services.miniupnpd = {
|
|
||||||
# enable = true;
|
|
||||||
# externalInterface = "eth0";
|
|
||||||
# internalIPs = [ "br0" ];
|
|
||||||
# };
|
|
||||||
}
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,223 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# TODO allow adding custom parameters to ht_capab, vht_capab
|
|
||||||
# TODO detect bad channel numbers (preferably not at runtime)
|
|
||||||
# TODO error if 160mhz is not supported
|
|
||||||
# TODO 'b' only goes up to 40mhz
|
|
||||||
|
|
||||||
# gets the phy number using the input interface
|
|
||||||
# Ex: get_phy_number("wlan0") -> "1"
|
|
||||||
get_phy_number() {
|
|
||||||
local interface=$1
|
|
||||||
phy=$(iw dev "$interface" info | awk '/phy/ {gsub(/#/,"");print $2}')
|
|
||||||
if [[ -z "$phy" ]]; then
|
|
||||||
echo "Error: interface not found" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
phy=phy$phy
|
|
||||||
}
|
|
||||||
|
|
||||||
get_ht_cap_mask() {
|
|
||||||
ht_cap_mask=0
|
|
||||||
|
|
||||||
for cap in $(iw phy "$phy" info | grep 'Capabilities:' | cut -d: -f2); do
|
|
||||||
ht_cap_mask="$(($ht_cap_mask | $cap))"
|
|
||||||
done
|
|
||||||
|
|
||||||
local cap_rx_stbc
|
|
||||||
cap_rx_stbc=$((($ht_cap_mask >> 8) & 3))
|
|
||||||
ht_cap_mask="$(( ($ht_cap_mask & ~(0x300)) | ($cap_rx_stbc << 8) ))"
|
|
||||||
}
|
|
||||||
|
|
||||||
get_vht_cap_mask() {
|
|
||||||
vht_cap_mask=0
|
|
||||||
for cap in $(iw phy "$phy" info | awk -F "[()]" '/VHT Capabilities/ { print $2 }'); do
|
|
||||||
vht_cap_mask="$(($vht_cap_mask | $cap))"
|
|
||||||
done
|
|
||||||
|
|
||||||
local cap_rx_stbc
|
|
||||||
cap_rx_stbc=$((($vht_cap_mask >> 8) & 7))
|
|
||||||
vht_cap_mask="$(( ($vht_cap_mask & ~(0x700)) | ($cap_rx_stbc << 8) ))"
|
|
||||||
}
|
|
||||||
|
|
||||||
mac80211_add_capabilities() {
|
|
||||||
local __var="$1"; shift
|
|
||||||
local __mask="$1"; shift
|
|
||||||
local __out= oifs
|
|
||||||
|
|
||||||
oifs="$IFS"
|
|
||||||
IFS=:
|
|
||||||
for capab in "$@"; do
|
|
||||||
set -- $capab
|
|
||||||
[ "$(($4))" -gt 0 ] || continue
|
|
||||||
[ "$(($__mask & $2))" -eq "$((${3:-$2}))" ] || continue
|
|
||||||
__out="$__out[$1]"
|
|
||||||
done
|
|
||||||
IFS="$oifs"
|
|
||||||
|
|
||||||
export -n -- "$__var=$__out"
|
|
||||||
}
|
|
||||||
|
|
||||||
add_special_ht_capabilities() {
|
|
||||||
case "$hwmode" in
|
|
||||||
a)
|
|
||||||
case "$(( ($channel / 4) % 2 ))" in
|
|
||||||
1) ht_capab="$ht_capab[HT40+]";;
|
|
||||||
0) ht_capab="$ht_capab[HT40-]";;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if [ "$channel" -lt 7 ]; then
|
|
||||||
ht_capab="$ht_capab[HT40+]"
|
|
||||||
else
|
|
||||||
ht_capab="$ht_capab[HT40-]"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
add_special_vht_capabilities() {
|
|
||||||
local cap_ant
|
|
||||||
[ "$(($vht_cap_mask & 0x800))" -gt 0 ] && {
|
|
||||||
cap_ant="$(( ( ($vht_cap_mask >> 16) & 3 ) + 1 ))"
|
|
||||||
[ "$cap_ant" -gt 1 ] && vht_capab="$vht_capab[SOUNDING-DIMENSION-$cap_ant]"
|
|
||||||
}
|
|
||||||
|
|
||||||
[ "$(($vht_cap_mask & 0x1000))" -gt 0 ] && {
|
|
||||||
cap_ant="$(( ( ($vht_cap_mask >> 13) & 3 ) + 1 ))"
|
|
||||||
[ "$cap_ant" -gt 1 ] && vht_capab="$vht_capab[BF-ANTENNA-$cap_ant]"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ "$(($vht_cap_mask & 12))" -eq 4 ]; then
|
|
||||||
vht_capab="$vht_capab[VHT160]"
|
|
||||||
fi
|
|
||||||
|
|
||||||
local vht_max_mpdu_hw=3895
|
|
||||||
[ "$(($vht_cap_mask & 3))" -ge 1 ] && \
|
|
||||||
vht_max_mpdu_hw=7991
|
|
||||||
[ "$(($vht_cap_mask & 3))" -ge 2 ] && \
|
|
||||||
vht_max_mpdu_hw=11454
|
|
||||||
[ "$vht_max_mpdu_hw" != 3895 ] && \
|
|
||||||
vht_capab="$vht_capab[MAX-MPDU-$vht_max_mpdu_hw]"
|
|
||||||
|
|
||||||
# maximum A-MPDU length exponent
|
|
||||||
local vht_max_a_mpdu_len_exp_hw=0
|
|
||||||
[ "$(($vht_cap_mask & 58720256))" -ge 8388608 ] && \
|
|
||||||
vht_max_a_mpdu_len_exp_hw=1
|
|
||||||
[ "$(($vht_cap_mask & 58720256))" -ge 16777216 ] && \
|
|
||||||
vht_max_a_mpdu_len_exp_hw=2
|
|
||||||
[ "$(($vht_cap_mask & 58720256))" -ge 25165824 ] && \
|
|
||||||
vht_max_a_mpdu_len_exp_hw=3
|
|
||||||
[ "$(($vht_cap_mask & 58720256))" -ge 33554432 ] && \
|
|
||||||
vht_max_a_mpdu_len_exp_hw=4
|
|
||||||
[ "$(($vht_cap_mask & 58720256))" -ge 41943040 ] && \
|
|
||||||
vht_max_a_mpdu_len_exp_hw=5
|
|
||||||
[ "$(($vht_cap_mask & 58720256))" -ge 50331648 ] && \
|
|
||||||
vht_max_a_mpdu_len_exp_hw=6
|
|
||||||
[ "$(($vht_cap_mask & 58720256))" -ge 58720256 ] && \
|
|
||||||
vht_max_a_mpdu_len_exp_hw=7
|
|
||||||
vht_capab="$vht_capab[MAX-A-MPDU-LEN-EXP$vht_max_a_mpdu_len_exp_hw]"
|
|
||||||
|
|
||||||
local vht_link_adapt_hw=0
|
|
||||||
[ "$(($vht_cap_mask & 201326592))" -ge 134217728 ] && \
|
|
||||||
vht_link_adapt_hw=2
|
|
||||||
[ "$(($vht_cap_mask & 201326592))" -ge 201326592 ] && \
|
|
||||||
vht_link_adapt_hw=3
|
|
||||||
[ "$vht_link_adapt_hw" != 0 ] && \
|
|
||||||
vht_capab="$vht_capab[VHT-LINK-ADAPT-$vht_link_adapt_hw]"
|
|
||||||
}
|
|
||||||
|
|
||||||
calculate_channel_offsets() {
|
|
||||||
vht_oper_chwidth=0
|
|
||||||
vht_oper_centr_freq_seg0_idx=
|
|
||||||
|
|
||||||
local idx="$channel"
|
|
||||||
case "$channelWidth" in
|
|
||||||
40)
|
|
||||||
case "$(( ($channel / 4) % 2 ))" in
|
|
||||||
1) idx=$(($channel + 2));;
|
|
||||||
0) idx=$(($channel - 2));;
|
|
||||||
esac
|
|
||||||
vht_oper_centr_freq_seg0_idx=$idx
|
|
||||||
;;
|
|
||||||
80)
|
|
||||||
case "$(( ($channel / 4) % 4 ))" in
|
|
||||||
1) idx=$(($channel + 6));;
|
|
||||||
2) idx=$(($channel + 2));;
|
|
||||||
3) idx=$(($channel - 2));;
|
|
||||||
0) idx=$(($channel - 6));;
|
|
||||||
esac
|
|
||||||
vht_oper_chwidth=1
|
|
||||||
vht_oper_centr_freq_seg0_idx=$idx
|
|
||||||
;;
|
|
||||||
160)
|
|
||||||
case "$channel" in
|
|
||||||
36|40|44|48|52|56|60|64) idx=50;;
|
|
||||||
100|104|108|112|116|120|124|128) idx=114;;
|
|
||||||
esac
|
|
||||||
vht_oper_chwidth=2
|
|
||||||
vht_oper_centr_freq_seg0_idx=$idx
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
he_oper_chwidth=$vht_oper_chwidth
|
|
||||||
he_oper_centr_freq_seg0_idx=$vht_oper_centr_freq_seg0_idx
|
|
||||||
}
|
|
||||||
|
|
||||||
interface=$1
|
|
||||||
channel=$2
|
|
||||||
hwmode=$3
|
|
||||||
channelWidth=$4
|
|
||||||
|
|
||||||
get_phy_number $interface
|
|
||||||
get_ht_cap_mask
|
|
||||||
get_vht_cap_mask
|
|
||||||
|
|
||||||
mac80211_add_capabilities vht_capab $vht_cap_mask \
|
|
||||||
RXLDPC:0x10::1 \
|
|
||||||
SHORT-GI-80:0x20::1 \
|
|
||||||
SHORT-GI-160:0x40::1 \
|
|
||||||
TX-STBC-2BY1:0x80::1 \
|
|
||||||
SU-BEAMFORMER:0x800::1 \
|
|
||||||
SU-BEAMFORMEE:0x1000::1 \
|
|
||||||
MU-BEAMFORMER:0x80000::1 \
|
|
||||||
MU-BEAMFORMEE:0x100000::1 \
|
|
||||||
VHT-TXOP-PS:0x200000::1 \
|
|
||||||
HTC-VHT:0x400000::1 \
|
|
||||||
RX-ANTENNA-PATTERN:0x10000000::1 \
|
|
||||||
TX-ANTENNA-PATTERN:0x20000000::1 \
|
|
||||||
RX-STBC-1:0x700:0x100:1 \
|
|
||||||
RX-STBC-12:0x700:0x200:1 \
|
|
||||||
RX-STBC-123:0x700:0x300:1 \
|
|
||||||
RX-STBC-1234:0x700:0x400:1 \
|
|
||||||
|
|
||||||
mac80211_add_capabilities ht_capab $ht_cap_mask \
|
|
||||||
LDPC:0x1::1 \
|
|
||||||
GF:0x10::1 \
|
|
||||||
SHORT-GI-20:0x20::1 \
|
|
||||||
SHORT-GI-40:0x40::1 \
|
|
||||||
TX-STBC:0x80::1 \
|
|
||||||
RX-STBC1:0x300::1 \
|
|
||||||
MAX-AMSDU-7935:0x800::1 \
|
|
||||||
|
|
||||||
# TODO this is active when the driver doesn't support it?
|
|
||||||
# DSSS_CCK-40:0x1000::1 \
|
|
||||||
|
|
||||||
# TODO these are active when the driver doesn't support them?
|
|
||||||
# RX-STBC1:0x300:0x100:1 \
|
|
||||||
# RX-STBC12:0x300:0x200:1 \
|
|
||||||
# RX-STBC123:0x300:0x300:1 \
|
|
||||||
|
|
||||||
add_special_ht_capabilities
|
|
||||||
add_special_vht_capabilities
|
|
||||||
|
|
||||||
echo ht_capab=$ht_capab
|
|
||||||
echo vht_capab=$vht_capab
|
|
||||||
|
|
||||||
if [ "$channelWidth" != "20" ]; then
|
|
||||||
calculate_channel_offsets
|
|
||||||
echo he_oper_chwidth=$he_oper_chwidth
|
|
||||||
echo vht_oper_chwidth=$vht_oper_chwidth
|
|
||||||
echo he_oper_centr_freq_seg0_idx=$he_oper_centr_freq_seg0_idx
|
|
||||||
echo vht_oper_centr_freq_seg0_idx=$vht_oper_centr_freq_seg0_idx
|
|
||||||
fi
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
# kernel
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
|
||||||
boot.initrd.availableKernelModules = [ "igb" "mt7915e" "xhci_pci" "ahci" "ehci_pci" "usb_storage" "sd_mod" "sdhci_pci" ];
|
|
||||||
boot.initrd.kernelModules = [ "dm-snapshot" ];
|
|
||||||
boot.kernelModules = [ "kvm-amd" ];
|
|
||||||
boot.extraModulePackages = [ ];
|
|
||||||
|
|
||||||
# Enable serial output
|
|
||||||
boot.kernelParams = [
|
|
||||||
"console=ttyS0,115200n8" # enable serial console
|
|
||||||
];
|
|
||||||
boot.loader.grub.extraConfig = "
|
|
||||||
serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1
|
|
||||||
terminal_input serial
|
|
||||||
terminal_output serial
|
|
||||||
";
|
|
||||||
|
|
||||||
# firmware
|
|
||||||
firmware.x86_64.enable = true;
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
hardware.enableRedistributableFirmware = true;
|
|
||||||
hardware.enableAllFirmware = true;
|
|
||||||
|
|
||||||
# boot
|
|
||||||
bios = {
|
|
||||||
enable = true;
|
|
||||||
device = "/dev/sda";
|
|
||||||
};
|
|
||||||
|
|
||||||
# disks
|
|
||||||
fileSystems."/" =
|
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/6aa7f79e-bef8-4b0f-b22c-9d1b3e8ac94b";
|
|
||||||
fsType = "ext4";
|
|
||||||
};
|
|
||||||
fileSystems."/boot" =
|
|
||||||
{
|
|
||||||
device = "/dev/disk/by-uuid/14dfc562-0333-4ddd-b10c-4eeefe1cd05f";
|
|
||||||
fsType = "ext3";
|
|
||||||
};
|
|
||||||
swapDevices =
|
|
||||||
[{ device = "/dev/disk/by-uuid/adf37c64-3b54-480c-a9a7-099d61c6eac7"; }];
|
|
||||||
|
|
||||||
nixpkgs.hostPlatform = "x86_64-linux";
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
hostNames = [
|
|
||||||
"router"
|
|
||||||
"192.168.6.159"
|
|
||||||
"192.168.3.1"
|
|
||||||
];
|
|
||||||
|
|
||||||
arch = "x86_64-linux";
|
|
||||||
|
|
||||||
systemRoles = [
|
|
||||||
"server"
|
|
||||||
"wireless"
|
|
||||||
"router"
|
|
||||||
];
|
|
||||||
|
|
||||||
hostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKDCMhEvWJxFBNyvpyuljv5Uun8AdXCxBK9HvPBRe5x6";
|
|
||||||
}
|
|
||||||
@@ -1,238 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.router;
|
|
||||||
inherit (lib) mapAttrs' genAttrs nameValuePair mkOption types mkIf mkEnableOption;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.router = {
|
|
||||||
enable = mkEnableOption "router";
|
|
||||||
|
|
||||||
privateSubnet = mkOption {
|
|
||||||
type = types.str;
|
|
||||||
default = "192.168.1";
|
|
||||||
description = "IP block (/24) to use for the private subnet";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
networking.ip_forward = true;
|
|
||||||
|
|
||||||
networking.interfaces.enp1s0.useDHCP = true;
|
|
||||||
|
|
||||||
networking.nat = {
|
|
||||||
enable = true;
|
|
||||||
internalInterfaces = [
|
|
||||||
"br0"
|
|
||||||
];
|
|
||||||
externalInterface = "enp1s0";
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.bridges = {
|
|
||||||
br0 = {
|
|
||||||
interfaces = [
|
|
||||||
"eth2"
|
|
||||||
# "wlp4s0"
|
|
||||||
# "wlan1"
|
|
||||||
"wlan0"
|
|
||||||
"wlan1"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.interfaces = {
|
|
||||||
br0 = {
|
|
||||||
useDHCP = false;
|
|
||||||
ipv4.addresses = [
|
|
||||||
{
|
|
||||||
address = "${cfg.privateSubnet}.1";
|
|
||||||
prefixLength = 24;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.firewall = {
|
|
||||||
enable = true;
|
|
||||||
trustedInterfaces = [ "br0" "tailscale0" ];
|
|
||||||
|
|
||||||
interfaces = {
|
|
||||||
enp1s0 = {
|
|
||||||
allowedTCPPorts = [ ];
|
|
||||||
allowedUDPPorts = [ ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.dnsmasq = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
# sensible behaviours
|
|
||||||
domain-needed = true;
|
|
||||||
bogus-priv = true;
|
|
||||||
no-resolv = true;
|
|
||||||
|
|
||||||
# upstream name servers
|
|
||||||
server = [
|
|
||||||
"1.1.1.1"
|
|
||||||
"8.8.8.8"
|
|
||||||
];
|
|
||||||
|
|
||||||
# local domains
|
|
||||||
expand-hosts = true;
|
|
||||||
domain = "home";
|
|
||||||
local = "/home/";
|
|
||||||
|
|
||||||
# Interfaces to use DNS on
|
|
||||||
interface = "br0";
|
|
||||||
|
|
||||||
# subnet IP blocks to use DHCP on
|
|
||||||
dhcp-range = "${cfg.privateSubnet}.10,${cfg.privateSubnet}.254,24h";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.hostapd = {
|
|
||||||
enable = true;
|
|
||||||
radios = {
|
|
||||||
# Simple 2.4GHz AP
|
|
||||||
wlan0 = {
|
|
||||||
countryCode = "US";
|
|
||||||
networks.wlan0 = {
|
|
||||||
ssid = "CXNK00BF9176-1";
|
|
||||||
authentication.saePasswords = [{ passwordFile = "/run/agenix/hostapd-pw-CXNK00BF9176"; }];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# WiFi 5 (5GHz) with two advertised networks
|
|
||||||
wlan1 = {
|
|
||||||
band = "5g";
|
|
||||||
channel = 0;
|
|
||||||
countryCode = "US";
|
|
||||||
networks.wlan1 = {
|
|
||||||
ssid = "CXNK00BF9176-1";
|
|
||||||
authentication.saePasswords = [{ passwordFile = "/run/agenix/hostapd-pw-CXNK00BF9176"; }];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
age.secrets.hostapd-pw-CXNK00BF9176.file = ../../secrets/hostapd-pw-CXNK00BF9176.age;
|
|
||||||
|
|
||||||
# wlan0 5Ghz 00:0a:52:08:38:32
|
|
||||||
# wlp4s0 2.4Ghz 00:0a:52:08:38:33
|
|
||||||
|
|
||||||
# services.hostapd = {
|
|
||||||
# enable = true;
|
|
||||||
# radios = {
|
|
||||||
# # 2.4GHz
|
|
||||||
# wlp4s0 = {
|
|
||||||
# band = "2g";
|
|
||||||
# noScan = true;
|
|
||||||
# channel = 6;
|
|
||||||
# countryCode = "US";
|
|
||||||
# wifi4 = {
|
|
||||||
# capabilities = [ "LDPC" "GF" "SHORT-GI-20" "SHORT-GI-40" "TX-STBC" "RX-STBC1" "MAX-AMSDU-7935" "HT40+" ];
|
|
||||||
# };
|
|
||||||
# wifi5 = {
|
|
||||||
# operatingChannelWidth = "20or40";
|
|
||||||
# capabilities = [ "MAX-A-MPDU-LEN-EXP0" ];
|
|
||||||
# };
|
|
||||||
# wifi6 = {
|
|
||||||
# enable = true;
|
|
||||||
# singleUserBeamformer = true;
|
|
||||||
# singleUserBeamformee = true;
|
|
||||||
# multiUserBeamformer = true;
|
|
||||||
# operatingChannelWidth = "20or40";
|
|
||||||
# };
|
|
||||||
# networks = {
|
|
||||||
# wlp4s0 = {
|
|
||||||
# ssid = "CXNK00BF9176";
|
|
||||||
# authentication.saePasswordsFile = "/run/agenix/hostapd-pw-CXNK00BF9176";
|
|
||||||
# };
|
|
||||||
# # wlp4s0-1 = {
|
|
||||||
# # ssid = "- Experimental 5G Tower by AT&T";
|
|
||||||
# # authentication.saePasswordsFile = "/run/agenix/hostapd-pw-experimental-tower";
|
|
||||||
# # };
|
|
||||||
# # wlp4s0-2 = {
|
|
||||||
# # ssid = "FBI Surveillance Van 2";
|
|
||||||
# # authentication.saePasswordsFile = "/run/agenix/hostapd-pw-experimental-tower";
|
|
||||||
# # };
|
|
||||||
# };
|
|
||||||
# settings = {
|
|
||||||
# he_oper_centr_freq_seg0_idx = 8;
|
|
||||||
# vht_oper_centr_freq_seg0_idx = 8;
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
|
|
||||||
# # 5GHz
|
|
||||||
# wlan1 = {
|
|
||||||
# band = "5g";
|
|
||||||
# noScan = true;
|
|
||||||
# channel = 128;
|
|
||||||
# countryCode = "US";
|
|
||||||
# wifi4 = {
|
|
||||||
# capabilities = [ "LDPC" "GF" "SHORT-GI-20" "SHORT-GI-40" "TX-STBC" "RX-STBC1" "MAX-AMSDU-7935" "HT40-" ];
|
|
||||||
# };
|
|
||||||
# wifi5 = {
|
|
||||||
# operatingChannelWidth = "160";
|
|
||||||
# capabilities = [ "RXLDPC" "SHORT-GI-80" "SHORT-GI-160" "TX-STBC-2BY1" "SU-BEAMFORMER" "SU-BEAMFORMEE" "MU-BEAMFORMER" "MU-BEAMFORMEE" "RX-ANTENNA-PATTERN" "TX-ANTENNA-PATTERN" "RX-STBC-1" "SOUNDING-DIMENSION-3" "BF-ANTENNA-3" "VHT160" "MAX-MPDU-11454" "MAX-A-MPDU-LEN-EXP7" ];
|
|
||||||
# };
|
|
||||||
# wifi6 = {
|
|
||||||
# enable = true;
|
|
||||||
# singleUserBeamformer = true;
|
|
||||||
# singleUserBeamformee = true;
|
|
||||||
# multiUserBeamformer = true;
|
|
||||||
# operatingChannelWidth = "160";
|
|
||||||
# };
|
|
||||||
# networks = {
|
|
||||||
# wlan1 = {
|
|
||||||
# ssid = "CXNK00BF9176";
|
|
||||||
# authentication.saePasswordsFile = "/run/agenix/hostapd-pw-CXNK00BF9176";
|
|
||||||
# };
|
|
||||||
# # wlan1-1 = {
|
|
||||||
# # ssid = "- Experimental 5G Tower by AT&T";
|
|
||||||
# # authentication.saePasswordsFile = "/run/agenix/hostapd-pw-experimental-tower";
|
|
||||||
# # };
|
|
||||||
# # wlan1-2 = {
|
|
||||||
# # ssid = "FBI Surveillance Van 5";
|
|
||||||
# # authentication.saePasswordsFile = "/run/agenix/hostapd-pw-experimental-tower";
|
|
||||||
# # };
|
|
||||||
# };
|
|
||||||
# settings = {
|
|
||||||
# vht_oper_centr_freq_seg0_idx = 114;
|
|
||||||
# he_oper_centr_freq_seg0_idx = 114;
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
# age.secrets.hostapd-pw-experimental-tower.file = ../../secrets/hostapd-pw-experimental-tower.age;
|
|
||||||
# age.secrets.hostapd-pw-CXNK00BF9176.file = ../../secrets/hostapd-pw-CXNK00BF9176.age;
|
|
||||||
|
|
||||||
# hardware.firmware = [
|
|
||||||
# pkgs.mt7916-firmware
|
|
||||||
# ];
|
|
||||||
|
|
||||||
# nixpkgs.overlays = [
|
|
||||||
# (self: super: {
|
|
||||||
# mt7916-firmware = pkgs.stdenvNoCC.mkDerivation {
|
|
||||||
# pname = "mt7916-firmware";
|
|
||||||
# version = "custom-feb-02-23";
|
|
||||||
# src = ./firmware/mediatek; # from here https://github.com/openwrt/mt76/issues/720#issuecomment-1413537674
|
|
||||||
# dontBuild = true;
|
|
||||||
# installPhase = ''
|
|
||||||
# for i in \
|
|
||||||
# mt7916_eeprom.bin \
|
|
||||||
# mt7916_rom_patch.bin \
|
|
||||||
# mt7916_wa.bin \
|
|
||||||
# mt7916_wm.bin;
|
|
||||||
# do
|
|
||||||
# install -D -pm644 $i $out/lib/firmware/mediatek/$i
|
|
||||||
# done
|
|
||||||
# '';
|
|
||||||
# meta = with lib; {
|
|
||||||
# license = licenses.unfreeRedistributableFirmware;
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
# })
|
|
||||||
# ];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Binary file not shown.
Binary file not shown.
@@ -1,11 +0,0 @@
|
|||||||
age-encryption.org/v1
|
|
||||||
-> ssh-ed25519 6AT2/g 3s+reqcb4Hu/3Z7rICFZBOkW02ibISthFAT1sveyLBo
|
|
||||||
Eh5ynxeqqXhNbv/ASWZxzKXAzKX41uI5iJI4KqluHRI
|
|
||||||
-> ssh-ed25519 ZDy34A cHcA2p0VrGr6jP/CUTOSU4Gef04ujh6wmJjmEWmWNE0
|
|
||||||
wwaQnj7RABFzTbU74awlIJeHHePtO7jihNd2EUkNZPU
|
|
||||||
-> ssh-ed25519 w3nu8g hN/fWUHspXoJmpibR4NAL3EXkKExe2tRjUzmLGK6VnE
|
|
||||||
F1KQnGe3M8eD9hjnHLc7hqFTw9iXh7ICz0u421DuFOs
|
|
||||||
-> ssh-ed25519 evqvfg r3AoIJ3KWCYIsV8+RTgYY+Eg+1EcBVNrX+ZRunKaug8
|
|
||||||
KSXd4uq1/0ErZzSTPrCmY/66v4TT5PmFqv9LRSHNi9A
|
|
||||||
--- 3bGqZANqdfEgdiUzu38n4dzPOShgGUzQGtO7l2S+hwU
|
|
||||||
Ì?\<5C>•Öå¢aÚ'¤¤ÐÚ{˜/}ÉýÝL„:¨|¸G`†Ó+ºMÜÈY$s¸+‚Uk¥áäg‡ID¾K·
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
age-encryption.org/v1
|
|
||||||
-> ssh-ed25519 WBT1Hw QyirfN0ibrERO2bNZrb/8xqT5thl8LQmjn+xAFVMryc
|
|
||||||
bLND1Cb4eO2VAGtM+ehm4YW8jN5Tcki+jc3JxLHSZuo
|
|
||||||
-> ssh-ed25519 6AT2/g DqNkPFZ/b96oYl8RiUkVxi9vmv8RG0Pbs2y0cqKRGX4
|
|
||||||
5FLcVYepU/bNRq2Cr9zdHDN/vM9OFO6Q7QlWX+PPa4Q
|
|
||||||
-> ssh-ed25519 r848+g iSF57inO0hafZ0N6hIWGML1kRE48fN3WooeeHXXIRSs
|
|
||||||
RdYVTCEwMc31x9yl2VBmRCEJXUGCVeJjBBdO1rAL3A8
|
|
||||||
-> ssh-ed25519 hPp1nw mhanVdWbVK7OAinjTmEqx1jawd8pTlPe6YTIa/sEckQ
|
|
||||||
MVBgbEa8uNYIoCCmEBmFzMQR5cO033C57lMze5z+n54
|
|
||||||
-> ssh-ed25519 ZDy34A su3VVvWZhGKTR11mNKoOLzYjvnBCOG+U4qIeHUY6VXE
|
|
||||||
DRscTOjNk5BpejadPMVABLeLC+0mB6uAYxsSm5HqUgw
|
|
||||||
-> ssh-ed25519 w3nu8g kZXxRHeMvnzk96IhW73XUkXo6lM0CfUjgFFcio5e4TA
|
|
||||||
1vWdp3DVAH74cBd2hUujCz4J4ztQzFseP9SKYk2juAM
|
|
||||||
-> ssh-ed25519 evqvfg xRV4zs+y8jaqkLH7qMbRsThjptxuokIn1h1S2eIUmXg
|
|
||||||
6+a1IS7X2qucszKXa1XOeEgVDeNf3PF2HgQMixGPR7s
|
|
||||||
--- 6gSqjzHmrwlNUz8bmuoeB/2zUIOvQ82RDu77vaCtnvs
|
|
||||||
]‹qˆªÓ®ÓñAz}µeÂUª(‡ˆeÿmŸ{^c¤ñ’Þ<1E>ìÖ°)Á7ê¡»ÏÞ[H
|
|
||||||
ªgK܉Þù#ÞF$ô)ÎÝOE…Á5Œ{³Á6‚‡ ÌÖ‹µÓÚQNJ.Î3YN<59>oXS`bZ
|
|
||||||
W§„ü;*
|
|
||||||
AÑUÛ¾&¢wîj@BLç/
|
|
||||||
<¢xËSµH쇅h
|
|
||||||
Binary file not shown.
@@ -26,24 +26,17 @@ with roles;
|
|||||||
"binary-cache-push-sshkey.age".publicKeys = nobody; # this value is directly given to gitea
|
"binary-cache-push-sshkey.age".publicKeys = nobody; # this value is directly given to gitea
|
||||||
|
|
||||||
# vpn
|
# vpn
|
||||||
"iodine.age".publicKeys = iodine;
|
|
||||||
"pia-login.age".publicKeys = pia;
|
"pia-login.age".publicKeys = pia;
|
||||||
|
|
||||||
# cloud
|
# cloud
|
||||||
"nextcloud-pw.age".publicKeys = nextcloud;
|
"nextcloud-pw.age".publicKeys = nextcloud;
|
||||||
"whiteboard-server-jwt-secret.age".publicKeys = nextcloud;
|
"whiteboard-server-jwt-secret.age".publicKeys = nextcloud;
|
||||||
"smb-secrets.age".publicKeys = personal ++ media-center;
|
"smb-secrets.age".publicKeys = personal ++ media-center;
|
||||||
"oauth2-proxy-env.age".publicKeys = server;
|
|
||||||
|
|
||||||
# services
|
# services
|
||||||
"searx.age".publicKeys = nobody;
|
|
||||||
"wolframalpha.age".publicKeys = dailybot;
|
"wolframalpha.age".publicKeys = dailybot;
|
||||||
"linkwarden-environment.age".publicKeys = linkwarden;
|
"linkwarden-environment.age".publicKeys = linkwarden;
|
||||||
|
|
||||||
# hostapd
|
|
||||||
"hostapd-pw-experimental-tower.age".publicKeys = nobody;
|
|
||||||
"hostapd-pw-CXNK00BF9176.age".publicKeys = nobody;
|
|
||||||
|
|
||||||
# backups
|
# backups
|
||||||
"backblaze-s3-backups.age".publicKeys = personal ++ server;
|
"backblaze-s3-backups.age".publicKeys = personal ++ server;
|
||||||
"restic-password.age".publicKeys = personal ++ server;
|
"restic-password.age".publicKeys = personal ++ server;
|
||||||
|
|||||||
Reference in New Issue
Block a user