1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
{ stdenv
, lib
, makeWrapper
, wrapGAppsHook
, autoPatchelfHook
, dpkg
, xorg
, atk
, glib
, pango
, gdk-pixbuf
, cairo
, freetype
, fontconfig
, gtk3
, dbus
, nss
, nspr
, alsa-lib
, cups
, expat
, udev
, libnotify
, xdg-utils
, mesa
, libglvnd
, libappindicator-gtk3
}:
# Helper function for building a derivation for Franz and forks.
{ pname, name, version, src, meta, extraBuildInputs ? [], ... } @ args:
let
cleanedArgs = builtins.removeAttrs args [ "pname" "name" "version" "src" "meta" "extraBuildInputs" ];
in stdenv.mkDerivation (rec {
inherit pname version src meta;
# Don't remove runtime deps.
dontPatchELF = true;
nativeBuildInputs = [ autoPatchelfHook makeWrapper wrapGAppsHook dpkg ];
buildInputs = extraBuildInputs ++ (with xorg; [
libXi
libXcursor
libXdamage
libXrandr
libXcomposite
libXext
libXfixes
libXrender
libX11
libXtst
libXScrnSaver
]) ++ [
mesa #libgbm
gtk3
atk
glib
pango
gdk-pixbuf
cairo
freetype
fontconfig
dbus
nss
nspr
alsa-lib
cups
expat
stdenv.cc.cc
];
runtimeDependencies = [ libglvnd stdenv.cc.cc.lib (lib.getLib udev) libnotify libappindicator-gtk3 ];
unpackPhase = "dpkg-deb -x $src .";
installPhase = ''
mkdir -p $out/bin
cp -r opt $out
ln -s $out/opt/${name}/${pname} $out/bin
# Provide desktop item and icon.
cp -r usr/share $out
substituteInPlace $out/share/applications/${pname}.desktop \
--replace /opt/${name}/${pname} ${pname}
'';
dontWrapGApps = true;
postFixup = ''
# make xdg-open overridable at runtime
wrapProgramShell $out/opt/${name}/${pname} \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath runtimeDependencies}" \
--suffix PATH : ${xdg-utils}/bin \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
"''${gappsWrapperArgs[@]}"
'';
} // cleanedArgs)
|