diff --git a/devices/nas/default.nix b/devices/nas/default.nix index 3061f759..24cdecc5 100644 --- a/devices/nas/default.nix +++ b/devices/nas/default.nix @@ -28,6 +28,7 @@ inputs: xray = { client.dnsmasq.hosts."git.nas.chn.moe" = "127.0.0.1"; xmuServer = {}; }; beesd."/" = { hashTableSizeMB = 10 * 128; threads = 4; }; nfs."/" = [(inputs.topInputs.self.config.dns."chn.moe".getAddress "wg1.pc")]; + speedtest = {}; }; }; }; diff --git a/flake.lock b/flake.lock index a0422826..6af940a3 100644 --- a/flake.lock +++ b/flake.lock @@ -1190,6 +1190,7 @@ "rsshub": "rsshub", "rycee": "rycee", "sops-nix": "sops-nix", + "speedtest": "speedtest", "sqlite-orm": "sqlite-orm", "sticker": "sticker", "stickerpicker": "stickerpicker", @@ -1253,6 +1254,22 @@ "type": "github" } }, + "speedtest": { + "flake": false, + "locked": { + "lastModified": 1739473165, + "narHash": "sha256-QimemnDZXlL5Ip+RFD0uxO21Aaol3kCw6Mf/0E3jHQc=", + "owner": "librespeed", + "repo": "speedtest", + "rev": "a1c43977ad9bf73f09f81e8df3c22ea914ab9131", + "type": "github" + }, + "original": { + "owner": "librespeed", + "repo": "speedtest", + "type": "github" + } + }, "sqlite-orm": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 04d6e04c..a0562c5f 100644 --- a/flake.nix +++ b/flake.nix @@ -62,6 +62,7 @@ mac-style = { url = "github:SergioRibera/s4rchiso-plymouth-theme?lfs=1"; flake = false; }; phono3py = { url = "github:phonopy/phono3py"; flake = false; }; sticker = { url = "git+https://git.chn.moe/chn/sticker.git?lfs=1"; flake = false; }; + speedtest = { url = "github:librespeed/speedtest"; flake = false; }; }; outputs = inputs: let localLib = import ./flake/lib inputs.nixpkgs.lib; in diff --git a/flake/dns/config/chn.moe.nix b/flake/dns/config/chn.moe.nix index 347c07e1..ff81e580 100644 --- a/flake/dns/config/chn.moe.nix +++ b/flake/dns/config/chn.moe.nix @@ -4,7 +4,7 @@ let { autoroute = [ "api" "git" "grafana" "matrix" "peertube" "send" "synapse" "vikunja" "铜锣湾" ]; nas = [ "initrd.nas" ]; - office = [ "srv2-node0" "xserverxmu" ]; + office = [ "srv2-node0" "xserverxmu" "409test" ]; vps4 = [ "initrd.vps4" "xserver2.vps4" ]; vps6 = [ diff --git a/modules/services/speedtest.nix b/modules/services/speedtest.nix new file mode 100644 index 00000000..6289cb3e --- /dev/null +++ b/modules/services/speedtest.nix @@ -0,0 +1,24 @@ +inputs: +{ + options.nixos.services.speedtest = let inherit (inputs.lib) mkOption types; in mkOption + { + type = types.nullOr (types.submodule { options = + { + hostname = mkOption { type = types.nonEmptyStr; default = "409test.chn.moe"; }; + };}); + default = null; + }; + config = let inherit (inputs.config.nixos.services) speedtest; in inputs.lib.mkIf (speedtest != null) + { + nixos.services = + { + phpfpm.instances.speedtest = {}; + nginx.https.${speedtest.hostname} = let pkg = inputs.pkgs.localPackages.speedtest; in + { + global.root = "${pkg}"; + location."~ ^.+?\.php(/.*)?$".php = + { root = "${pkg}"; fastcgiPass = inputs.config.nixos.services.phpfpm.instances.speedtest.fastcgi; }; + }; + }; + }; +} diff --git a/modules/user/default.nix b/modules/user/default.nix index c13ccf10..5545ad2f 100644 --- a/modules/user/default.nix +++ b/modules/user/default.nix @@ -47,6 +47,7 @@ inputs: synapse-synapse = 2009; synapse-matrix = 2010; hpcstat = 2011; + speedtest = 2012; }; }; gid = mkOption diff --git a/packages/default.nix b/packages/default.nix index c36c778f..69ce45b5 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -141,6 +141,7 @@ inputs: rec license = inputs.pkgs.callPackage ./lumerical/license.nix { src = inputs.topInputs.self.src.lumerical.licenseManager.license; }; }; + speedtest = inputs.pkgs.callPackage ./speedtest.nix { src = inputs.topInputs.speedtest; }; fromYaml = content: builtins.fromJSON (builtins.readFile (inputs.pkgs.runCommand "toJSON" {} diff --git a/packages/speedtest.nix b/packages/speedtest.nix new file mode 100644 index 00000000..b8d698a5 --- /dev/null +++ b/packages/speedtest.nix @@ -0,0 +1,12 @@ +{ stdenv, src, }: stdenv.mkDerivation +{ + name = "speedtest"; + inherit src; + dontConfigure = true; + dontBuild = true; + installPhase = + '' + mkdir -p $out + cp -r $src/{index.html,speedtest.js,speedtest_worker.js,favicon.ico,backend} $out + ''; +}