diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 740405493a43..b0e7702e9b86 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -55,6 +55,7 @@ in borgbackup = handleTest ./borgbackup.nix {}; botamusique = handleTest ./botamusique.nix {}; bpf = handleTestOn ["x86_64-linux" "aarch64-linux"] ./bpf.nix {}; + breitbandmessung = handleTest ./breitbandmessung.nix {}; brscan5 = handleTest ./brscan5.nix {}; btrbk = handleTest ./btrbk.nix {}; buildbot = handleTest ./buildbot.nix {}; diff --git a/nixos/tests/breitbandmessung.nix b/nixos/tests/breitbandmessung.nix new file mode 100644 index 000000000000..12b1a094839b --- /dev/null +++ b/nixos/tests/breitbandmessung.nix @@ -0,0 +1,33 @@ +import ./make-test-python.nix ({ lib, ... }: { + name = "breitbandmessung"; + meta.maintainers = with lib.maintainers; [ b4dm4n ]; + + machine = { pkgs, ... }: { + imports = [ + ./common/user-account.nix + ./common/x11.nix + ]; + + # increase screen size to make the whole program visible + virtualisation.resolution = { x = 1280; y = 1024; }; + + test-support.displayManager.auto.user = "alice"; + + environment.systemPackages = with pkgs; [ breitbandmessung ]; + environment.variables.XAUTHORITY = "/home/alice/.Xauthority"; + + # breitbandmessung is unfree + nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "breitbandmessung" ]; + }; + + enableOCR = true; + + testScript = '' + machine.wait_for_x() + machine.execute("su - alice -c breitbandmessung >&2 &") + machine.wait_for_window("Breitbandmessung") + machine.wait_for_text("Breitbandmessung") + machine.wait_for_text("Datenschutz") + machine.screenshot("breitbandmessung") + ''; +}) diff --git a/pkgs/applications/networking/breitbandmessung/default.nix b/pkgs/applications/networking/breitbandmessung/default.nix new file mode 100644 index 000000000000..31f33be38670 --- /dev/null +++ b/pkgs/applications/networking/breitbandmessung/default.nix @@ -0,0 +1,153 @@ +{ lib +, stdenv +, alsa-lib +, at-spi2-atk +, at-spi2-core +, atk +, autoPatchelfHook +, cairo +, cups +, dbus +, dpkg +, expat +, fetchurl +, gdk-pixbuf +, glib +, gtk3 +, libdrm +, libxkbcommon +, makeWrapper +, mesa +, nixosTests +, nspr +, nss +, pango +, pciutils +, systemd +, undmg +, writeShellScriptBin +, xorg +}: + +let + inherit (stdenv.hostPlatform) system; + + version = "3.1.0"; + + # At first start, the program checks for supported operating systems by calling `lsb_release -a` + # and only runs when it finds Debian/Ubuntu. So we present us as Debian an make it happy. + fake-lsb-release = writeShellScriptBin "lsb_release" '' + echo "Distributor ID: Debian" + echo "Description: Debian GNU/Linux 10 (buster)" + echo "Release: 10" + echo "Codename: buster" + ''; + + binPath = lib.makeBinPath [ + fake-lsb-release + ]; + + systemArgs = rec { + x86_64-linux = rec { + src = fetchurl { + url = "https://download.breitbandmessung.de/bbm/Breitbandmessung-${version}-linux.deb"; + sha256 = "sha256-jSP+H9ej9Wd+swBZSy9uMi2ExSTZ191FGZhqaocTl7w="; + }; + + dontUnpack = true; + + nativeBuildInputs = [ + autoPatchelfHook + dpkg + makeWrapper + ]; + + buildInputs = runtimeDependencies; + + runtimeDependencies = [ + alsa-lib + at-spi2-atk + at-spi2-core + atk + cairo + cups + dbus + expat + gdk-pixbuf + glib + gtk3 + libdrm + libxkbcommon + mesa + nspr + nss + pango + pciutils + systemd + xorg.libX11 + xorg.libXcomposite + xorg.libXdamage + xorg.libXext + xorg.libXfixes + xorg.libXrandr + xorg.libxcb + xorg.libxshmfence + ]; + + installPhase = '' + dpkg-deb -x $src $out + mkdir -p $out/bin + + chmod -R g-w $out + + addAutoPatchelfSearchPath --no-recurse $out/opt/Breitbandmessung + autoPatchelfFile $out/opt/Breitbandmessung/breitbandmessung + + makeWrapper $out/opt/Breitbandmessung/breitbandmessung $out/bin/breitbandmessung \ + --prefix PATH : ${binPath} + + mv $out/usr/share $out/share + rmdir $out/usr + + # Fix the desktop link + substituteInPlace $out/share/applications/breitbandmessung.desktop \ + --replace /opt/Breitbandmessung $out/bin + ''; + + dontAutoPatchelf = true; + dontPatchELF = true; + }; + + x86_64-darwin = { + src = fetchurl { + url = "https://download.breitbandmessung.de/bbm/Breitbandmessung-${version}-mac.dmg"; + sha256 = "sha256-2c8mDKJuHDSw7p52EKnJO5vr2kNTLU6r9pmGPANjE20="; + }; + + nativeBuildInputs = [ undmg ]; + + installPhase = '' + runHook preInstall + mkdir -p $out/Applications/Breitbandmessung.app + cp -R . $out/Applications/Breitbandmessung.app + runHook postInstall + ''; + }; + + aarch64-darwin = x86_64-darwin; + }.${system} or { src = throw "Unsupported system: ${system}"; }; +in +stdenv.mkDerivation ({ + pname = "breitbandmessung"; + inherit version; + + passthru.tests = { inherit (nixosTests) breitbandmessung; }; + + meta = with lib; { + description = "Broadband internet speed test app from the german Bundesnetzagentur"; + homepage = "https://www.breitbandmessung.de"; + license = licenses.unfree; + maintainers = with maintainers; [ b4dm4n ]; + platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ]; + }; +} // systemArgs) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 12d4ccebb95b..740ac7b275d7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1083,6 +1083,8 @@ with pkgs; archi = callPackage ../tools/misc/archi { }; + breitbandmessung = callPackage ../applications/networking/breitbandmessung { }; + contour = libsForQt5.callPackage ../applications/terminal-emulators/contour { }; cool-retro-term = libsForQt5.callPackage ../applications/terminal-emulators/cool-retro-term { };