@@ -1,31 +1,116 @@
1−{ lib, fetchurl, appimageTools }:
1+{ stdenv
2+, lib
3+, fetchFromGitHub
4+, pkg-config
5+, zlib
6+, libusb1
7+, libGL
8+, qmake
9+, wrapQtAppsHook
10+, mkDerivation
211
12+, qttools
13+, qtbase
14+, qt3d
15+, qtsvg
16+, qtserialport
17+, qtdeclarative
18+, qtquickcontrols
19+, qtquickcontrols2
20+, qtgraphicaleffects
21+, qtwayland
22+}:
323let
4− pname = "qflipper";
5− version = "0.5.3";
6− name = "${pname}-${version}";
7− src = fetchurl {
8− url = "https://update.flipperzero.one/builds/qFlipper/${version}/qFlipper-x86_64-${version}.AppImage";
9− sha256 = "sha256-UFGFl1zb0t1y7FBd5EX1YS3npWM5slL/wLiTOF/CLNM=";
24+ version = "0.8.2";
25+ timestamp = "99999999999";
26+ commit = "nix-${version}";
27+ hash = "sha256-BaqKlF2SZueykFhtj91McP39oXYAx+lz8eXhn5eouqg=";
28+
29+ udev_rules = ''
30+ #Flipper Zero serial port
31+ SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ATTRS{manufacturer}=="Flipper Devices Inc.", TAG+="uaccess"
32+ #Flipper Zero DFU
33+ SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", ATTRS{manufacturer}=="STMicroelectronics", TAG+="uaccess"
34+ '';
35+
36+in
37+mkDerivation {
38+ pname = "qFlipper";
39+ inherit version;
40+
41+ src = fetchFromGitHub {
42+ owner = "flipperdevices";
43+ repo = "qFlipper";
44+ rev = version;
45+ inherit hash;
46+ fetchSubmodules = true;
1047 };
11− appimageContents = appimageTools.extractType2 { inherit name src; };
1248
13−in appimageTools.wrapType2 {
14− inherit name src;
49+ nativeBuildInputs = [
50+ pkg-config
51+ qmake
52+ qttools
53+ ];
54+
55+ buildInputs = [
56+ zlib
57+ libusb1
58+ libGL
59+ wrapQtAppsHook
60+
61+ qtbase
62+ qt3d
63+ qtsvg
64+ qtserialport
65+ qtdeclarative
66+ qtquickcontrols
67+ qtquickcontrols2
68+ qtgraphicaleffects
69+ ] ++ lib.optionals (stdenv.isLinux) [
70+ qtwayland
71+ ];
72+
73+ preBuild = ''
74+ substituteInPlace qflipper_common.pri \
75+ --replace 'GIT_VERSION = unknown' 'GIT_VERSION = "${version}"' \
76+ --replace 'GIT_TIMESTAMP = 0' 'GIT_TIMESTAMP = ${timestamp}' \
77+ --replace 'GIT_COMMIT = unknown' 'GIT_COMMIT = "${commit}"'
78+ cat qflipper_common.pri
1579
16− extraPkgs = pkgs: (appimageTools.defaultFhsEnvArgs.multiPkgs pkgs) ++ [ pkgs.libsecret ];
80+ '';
81+
82+ installPhase = ''
83+ runHook preInstall
84+
85+ mkdir -p $out/bin
86+ ${lib.optionalString stdenv.isLinux ''
87+ install -Dm755 qFlipper $out/bin/qFlipper
88+ ''}
89+ ${lib.optionalString stdenv.isDarwin ''
90+ install -Dm755 qFlipper.app/Contents/MacOS/qFlipper $out/bin/qFlipper
91+ ''}
92+ cp qFlipperTool $out/bin
93+
94+ mkdir -p $out/share/applications
95+ cp installer-assets/appimage/qFlipper.desktop $out/share/applications
1796
18− extraInstallCommands = ''
19− mv $out/bin/${name} $out/bin/qFlipper
20− install -m 444 -D ${appimageContents}/qFlipper.desktop -t $out/share/applications
21− cp -r ${appimageContents}/usr/share/icons $out/share
97+ mkdir -p $out/share/icons
98+ cp application/assets/icons/qFlipper.png $out/share/icons
99+
100+ mkdir -p $out/etc/udev/rules.d
101+ tee $out/etc/udev/rules.d/42-flipperzero.rules << EOF
102+ ${udev_rules}
103+ EOF
104+
105+ runHook postInstall
22106 '';
23107
24108 meta = with lib; {
25109 description = "Cross-platform desktop tool to manage your flipper device";
26110 homepage = "https://flipperzero.one/";
27− license = licenses.unfree;
28− maintainers = with maintainers; [ wolfangaukang ];
29− platforms = [ "x86_64-linux" ];
111+ license = licenses.gpl3Only;
112+ maintainers = with maintainers; [ cab404 ];
113+ platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" ]; # qtbase doesn't build yet on aarch64-darwin
30114 };
115+
31116}