nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 coreutils,
3 fetchurl,
4 gawk,
5 gnused,
6 jdk8,
7 lib,
8 makeDesktopItem,
9 makeWrapper,
10 stdenv,
11 writeScript,
12 writeTextFile,
13 recommendedUdevRules ? true,
14}:
15
16stdenv.mkDerivation rec {
17 pname = "roomeqwizard";
18 version = "5.31.3";
19
20 src = fetchurl {
21 url = "https://www.roomeqwizard.com/installers/REW_linux_no_jre_${
22 lib.replaceStrings [ "." ] [ "_" ] version
23 }.sh";
24 sha256 = "sha256-qaGkKVoiBJ2UWVKAMqbuqNFi6FGcblMxAbYwhf/71CY=";
25 };
26
27 dontUnpack = true;
28
29 desktopItem = makeDesktopItem {
30 name = pname;
31 exec = pname;
32 icon = pname;
33 desktopName = "REW";
34 genericName = "Software for audio measurements";
35 categories = [ "AudioVideo" ];
36 };
37
38 responseFile = writeTextFile {
39 name = "response.varfile";
40 text = ''
41 createDesktopLinkAction$Boolean=false
42 executeLauncherAction$Boolean=false
43 mem$Integer=1
44 opengl$Boolean=false
45 sys.adminRights$Boolean=false
46 sys.installationDir=INSTALLDIR
47 sys.languageId=en
48 sys.programGroupDisabled$Boolean=true
49 '';
50 };
51
52 udevRules = ''
53 # MiniDSP UMIK-1 calibrated USB microphone
54 SUBSYSTEM=="usb", ATTR{idVendor}=="2752", ATTR{idProduct}=="0007", TAG+="uaccess"
55 '';
56
57 nativeBuildInputs = [ makeWrapper ];
58
59 buildPhase = ''
60 runHook preBuild
61
62 # set JDK path in installer
63 sed -E 's|^#\s*(INSTALL4J_JAVA_HOME_OVERRIDE=)|\1${jdk8}|' $src > installer
64 chmod +x installer
65
66 sed -e "s|INSTALLDIR|$out/share/roomeqwizard|" $responseFile > response.varfile
67
68 export HOME=$PWD
69
70 ./installer -q -varfile response.varfile
71
72 runHook postBuild
73 '';
74
75 installPhase = ''
76 runHook preInstall
77
78 mkdir -p $out/bin $out/lib/udev/rules.d $out/share/icons/hicolor/256x256/apps
79 makeWrapper $out/share/roomeqwizard/roomeqwizard $out/bin/roomeqwizard \
80 --set INSTALL4J_JAVA_HOME_OVERRIDE ${jdk8} \
81 --prefix PATH : ${
82 lib.makeBinPath [
83 coreutils
84 gnused
85 gawk
86 ]
87 }
88
89 cp -r "$desktopItem/share/applications" $out/share/
90 cp $out/share/roomeqwizard/.install4j/roomeqwizard.png "$out/share/icons/hicolor/256x256/apps/${pname}.png"
91
92 ${lib.optionalString recommendedUdevRules ''echo "$udevRules" > $out/lib/udev/rules.d/90-roomeqwizard.rules''}
93
94 runHook postInstall
95 '';
96
97 passthru.updateScript = writeScript "${pname}-update.sh" ''
98 #!/usr/bin/env nix-shell
99 #!nix-shell -i bash -p curl common-updater-scripts nixpkgs-fmt coreutils perl
100
101 set -euo pipefail
102
103 perlexpr='if (/current version.{1,10}v(\d+)\.(\d+)\.(\d+)/i) { print "$1.$2.$3"; break; }'
104
105 oldVersion="$(nix-instantiate --eval -E "with import ./. {}; lib.getVersion ${pname}" | tr -d '"')"
106 latestVersion="$(curl -sS https://www.roomeqwizard.com/index.html | perl -ne "$perlexpr")"
107
108 if [ ! "$oldVersion" = "$latestVersion" ]; then
109 update-source-version ${pname} "$latestVersion" --version-key=version --print-changes
110 nixpkgs-fmt "pkgs/applications/audio/roomeqwizard/default.nix"
111 else
112 echo "${pname} is already up-to-date"
113 fi
114 '';
115
116 meta = with lib; {
117 homepage = "https://www.roomeqwizard.com/";
118 license = licenses.unfree;
119 platforms = platforms.all;
120 maintainers = with maintainers; [
121 orivej
122 zaninime
123 ];
124 description = "Room Acoustics Software";
125 longDescription = ''
126 REW is free software for room acoustic measurement, loudspeaker
127 measurement and audio device measurement.
128 '';
129 mainProgram = "roomeqwizard";
130 };
131}