dotfiles/packages/notion-app/default.nix

123 lines
4.1 KiB
Nix

{
stdenv,
fetchurl,
fetchzip,
electron_33,
_7zz,
asar,
writeScriptBin,
bash,
}:
let
better-sqlite3-version = "11.3.0";
bufferutil-version = "4.0.8";
electron-version = "125";
notion-app-unwrapped = stdenv.mkDerivation rec {
name = "notion-app-unwrapped";
version = "4.4.0";
src = fetchurl {
url = "https://desktop-release.notion-static.com/Notion-${version}.dmg";
hash = "sha256-FHPru5Byub8DKAmtqr8EYqGiikslEJBS/zV4PVfFiE8=";
};
betterSqlite3 = fetchzip {
url = "https://github.com/WiseLibs/better-sqlite3/releases/download/v${better-sqlite3-version}/better-sqlite3-v${better-sqlite3-version}-electron-v${electron-version}-linux-x64.tar.gz";
hash = "sha256-6obP+VIJiRxN3Mmy1+A+k9KkoB8iBbbaDJ+cdznjVig=";
};
bufferUtil = fetchzip {
url = "https://github.com/websockets/bufferutil/releases/download/v${bufferutil-version}/v${bufferutil-version}-linux-x64.tar";
hash = "sha256-uNvLdiXDqtaKYLfCiwcWNTYjPbAvN2mjDlAK7c8WMY0=";
};
nativeBuildInputs = [
_7zz
asar
];
unpackPhase = ''
7zz x $src || true
'';
buildPhase = ''
asar e "Notion/Notion.app/Contents/Resources/app.asar" asar_patched
# replace the native dependencies with linux versions
cp "$betterSqlite3/Release/better_sqlite3.node" "asar_patched/node_modules/better-sqlite3/build/Release/"
cp "$bufferUtil/node.napi.node" "asar_patched/node_modules/bufferutil/build/Release/bufferutil.node"
# fully disabling auto updates
sed -i 's/if("darwin"===process.platform){const e=s.systemPreferences?.getUserDefault(E,"boolean"),t=_.Store.getState().app.preferences?.isAutoUpdaterDisabled;return Boolean(e||t)}return!1/return!0/g' "asar_patched/.webpack/main/index.js"
# fix tray icon and right click menu
mkdir -p asar_patched/.webpack/main
cp ${./notion.png} asar_patched/.webpack/main/trayIcon.png
sed -i 's|this.tray.on("click",(()=>{this.onClick()}))|this.tray.setContextMenu(this.trayMenu),this.tray.on("click",(()=>{this.onClick()}))|g' "asar_patched/.webpack/main/index.js"
sed -i 's|getIcon(){[^}]*}|getIcon(){return s.default.join(__dirname, "trayIcon.png");}|g' "asar_patched/.webpack/main/index.js"
# avoid running duplicated instances, fixes url opening
sed -i 's|o.app.on("open-url",w.handleOpenUrl)):"win32"===process.platform|o.app.on("open-url",w.handleOpenUrl)):"linux"===process.platform|g' "asar_patched/.webpack/main/index.js"
# fake the useragent as windows to fix the spellchecker languages selector and other issues
sed -i 's|e.setUserAgent(`''${e.getUserAgent()} WantsServiceWorker`),|e.setUserAgent(`''${e.getUserAgent().replace("Linux", "Windows")} WantsServiceWorker`),|g' "asar_patched/.webpack/main/index.js"
# re-pack the asar
asar p asar_patched app.asar --unpack "*.node"
'';
installPhase = ''
mkdir -p $out/bin
mkdir -p $out/lib/notion-app
cp -r asar_patched $out/lib/notion-app/app
'';
};
in
stdenv.mkDerivation rec {
pname = "notion-app";
version = notion-app-unwrapped.version;
dontUnpack = true;
dontConfigure = true;
dontBuild = true;
src = ./notion.png;
runScript = writeScriptBin "notion-app" ''
#!${bash}/bin/bash
# Enable Wayland when appropriate.
[[ $NIXOS_OZONE_WL -eq 1 ]] && WL_ARGS="--enable-features=UseOzonePlatform --ozone-platform=wayland" || WL_ARGS=""
# Launch
cd ${notion-app-unwrapped}/lib/notion-app/app
exec ${electron_33}/bin/electron . $WL_ARGS "$@"
'';
desktopFile = ''
[Desktop Entry]
Version=1.0
Type=Application
Name=Notion
GenericName=Online Document Editor
Comment=Your connected workspace for wiki, docs & projects
Exec=${placeholder "out"}/bin/notion-app %U
Icon=${src}
Categories=Office;
MimeType=x-scheme-handler/notion;
StartupNotify=false
'';
installPhase = ''
mkdir -p $out/bin
mkdir -p $out/share/applications
mkdir -p $out/share/icons/hicolor/256x256/apps
cp $runScript/bin/notion-app $out/bin/notion-app
cp $src $out/share/icons/hicolor/256x256/apps
echo "$desktopFile" > $out/share/applications/notion.desktop
'';
}