glide-browser.url = "github:glide-browser/glide";
glide-browser.flake = false;caption: derivation
rec {
glide-browser = pkgs.wrapFirefox glide-browser-unwrapped { };
glide-browser-unwrapped = pkgs.callPackage (
{
buildMozillaMach,
fetchFromGitHub,
lib,
fetchurl,
git,
nodejs,
pkg-config,
pnpm,
python3,
stdenv,
}:
let
info = lib.pipe "${inputs.glide-browser}/firefox.json" [
builtins.readFile
builtins.fromJSON
];
glideVersion = info.brands.glide.release.displayVersion;
glideRevision = inputs.glide-browser.shortRev;
firefoxVersion = info.version.version;
firefoxSrc = fetchurl {
url = "mirror://mozilla/firefox/releases/${firefoxVersion}/source/firefox-${firefoxVersion}.source.tar.xz";
hash = "sha256-zbEYk1Rb+yHuc3ajzoVySlZBpeFKUK+Q+NvogwErAaU=";
};
src = stdenv.mkDerivation (finalAttrs: {
pname = "firefox-glide-browser-src-patched";
version = glideVersion;
GLIDE_REVISION = glideRevision;
src = inputs.glide-browser;
postUnpack = ''
mkdir -p source/engine
# note: the firefox tar unpacks to firefox-$version/
tar xf ${firefoxSrc} --strip-components=1 -C source/engine
'';
# revert native-messaging-hosts installation directory to firefox default
postPatch = ''
substituteInPlace src/toolkit/xre/nsXREDirProvider-cpp.patch \
--replace-fail '".glide-browser"' '".mozilla"'
'';
nativeBuildInputs = [
git
nodejs
python3
pkg-config
pnpm.configHook
];
pnpmDeps = pnpm.fetchDeps {
inherit (finalAttrs) pname version src;
fetcherVersion = 2;
hash = "sha256-oboo+RfNkJo3EXgsVPUnWJKdPsIKe46QjwmMYdeGbgw=";
};
buildPhase = ''
runHook preBuild
patchShebangs scripts/
# dprint requires network access, lets just skip it
sed -i '/dprint fmt/d' scripts/generate-types.sh
# new firefox is incompatible with a patch in nixpkgs
# adjusting mac sdk version so that the old patch still works
sed -i 's|"26.0"|"15.5"|' engine/build/moz.configure/toolchain.configure
echo 'loglevel=silent' > .npmrc
pnpm bootstrap --offline
# bootstrap includes a default mozconfig but that can mess with options that `buildMozillaMach` sets, so just remove it.
rm engine/mozconfig
runHook postBuild
'';
installPhase = ''
runHook preInstall
cp -r engine $out
cd $out
for i in $(find . -type l); do
realpath=$(readlink $i)
rm $i
cp $realpath $i
done
runHook postInstall
'';
dontFixup = true;
});
in
(
(buildMozillaMach {
pname = "glide-browser";
version = firefoxVersion;
packageVersion = glideVersion;
applicationName = "Glide";
binaryName = "glide";
branding = "browser/branding/glide";
inherit src;
requireSigning = false;
allowAddonSideload = true;
meta = { description = "Extensible and keyboard-focused web browser built on Firefox"; };
}).override
{
pgoSupport = false;
crashreporterSupport = false;
enableOfficialBranding = false;
}
).overrideAttrs
(
prev:
{
GLIDE_FIREFOX_VERSION = firefoxVersion;
MOZ_USER_DIR = "Glide Browser";
}
)
) { };
}{ pkgs, ... }:
{
home.packages = [ pkgs.glide-browser ];
}{
_.persist.allUsers.directories = [ ".glide" ".config/glide" ];
}