1{
2 lib,
3 stdenv,
4 fetchurl,
5 # keep-sorted start
6 adwaita-icon-theme,
7 alsa-lib,
8 autoPatchelfHook,
9 copyDesktopItems,
10 curl,
11 dbus-glib,
12 gtk3,
13 hicolor-icon-theme,
14 libXtst,
15 libva,
16 makeBinaryWrapper,
17 makeDesktopItem,
18 patchelfUnstable,
19 pciutils,
20 pipewire,
21 wrapGAppsHook3,
22 # keep-sorted end
23 nix-update-script,
24 ...
25}:
26stdenv.mkDerivation (finalAttrs: {
27 pname = "glide-browser";
28 version = "0.1.54a";
29
30 src = fetchurl {
31 url = "https://github.com/glide-browser/glide/releases/download/${finalAttrs.version}/glide.linux-x86_64.tar.xz";
32 hash = "sha256-Rw85b+9eaiM9szWpYZiF7FqJY7OpliOwt09/c8UWlGk=";
33 };
34
35 nativeBuildInputs = [
36 # keep-sorted start
37 autoPatchelfHook
38 copyDesktopItems
39 makeBinaryWrapper
40 patchelfUnstable
41 wrapGAppsHook3
42 # keep-sorted end
43 ];
44
45 buildInputs = [
46 # keep-sorted start
47 adwaita-icon-theme
48 alsa-lib
49 dbus-glib
50 gtk3
51 hicolor-icon-theme
52 libXtst
53 # keep-sorted end
54 ];
55
56 runtimeDependencies = [
57 # keep-sorted start
58 curl
59 libva.out
60 pciutils
61 # keep-sorted end
62 ];
63
64 appendRunpaths = [ "${pipewire}/lib" ];
65
66 # Firefox uses "relrhack" to manually process relocations from a fixed offset
67 patchelfFlags = [ "--no-clobber-old-sections" ];
68
69 installPhase = ''
70 runHook preInstall
71
72 mkdir -p $out/bin $out/share/icons/hicolor/ $out/lib/glide-browser-bin-${finalAttrs.version}
73 cp -t $out/lib/glide-browser-bin-${finalAttrs.version} -r *
74 chmod +x $out/lib/glide-browser-bin-${finalAttrs.version}/glide
75 iconDir=$out/share/icons/hicolor
76 browserIcons=$out/lib/glide-browser-bin-${finalAttrs.version}/browser/chrome/icons/default
77
78 for i in 16 32 48 64 128; do
79 iconSizeDir="$iconDir/''${i}x$i/apps"
80 mkdir -p $iconSizeDir
81 cp $browserIcons/default$i.png $iconSizeDir/glide-browser.png
82 done
83
84
85 ln -s $out/lib/glide-browser-bin-${finalAttrs.version}/glide $out/bin/glide
86 ln -s $out/bin/glide $out/bin/glide-browser
87
88 runHook postInstall
89 '';
90
91 desktopItems = [
92 (makeDesktopItem {
93 name = "glide-browser-bin";
94 exec = "glide-browser --name glide-browser %U";
95 icon = "glide-browser";
96 desktopName = "Glide Browser";
97 genericName = "Web Browser";
98 terminal = false;
99 startupNotify = true;
100 startupWMClass = "glide-browser";
101 categories = [
102 "Network"
103 "WebBrowser"
104 ];
105 mimeTypes = [
106 "text/html"
107 "text/xml"
108 "application/xhtml+xml"
109 "application/vnd.mozilla.xul+xml"
110 "x-scheme-handler/http"
111 "x-scheme-handler/https"
112 ];
113 actions = {
114 new-window = {
115 name = "New Window";
116 exec = "glide-browser --new-window %U";
117 };
118 new-private-window = {
119 name = "New Private Window";
120 exec = "glide-browser --private-window %U";
121 };
122 profile-manager-window = {
123 name = "Profile Manager";
124 exec = "glide-browser --ProfileManager";
125 };
126 };
127 })
128 ];
129
130 passthru.updateScript = nix-update-script {
131 extraArgs = [
132 "--url"
133 "https://github.com/glide-browser/glide"
134 ];
135 };
136
137 meta = {
138 changelog = "https://glide-browser.app/changelog#${finalAttrs.version}";
139 description = "Extensible and keyboard-focused web browser, based on Firefox (binary package)";
140 homepage = "https://glide-browser.app/";
141 license = lib.licenses.mpl20;
142 sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
143 platforms = [ "x86_64-linux" ];
144 maintainers = with lib.maintainers; [ pyrox0 ];
145 mainProgram = "glide-browser";
146 };
147})