fix: update system

This commit is contained in:
zack 2024-09-11 12:55:19 -04:00
parent 0aaebc17c8
commit a642d136c2
No known key found for this signature in database
GPG key ID: 5F873416BCF59F35
9 changed files with 128 additions and 218 deletions

View file

@ -1,198 +0,0 @@
{
lib,
stdenv,
stdenvNoCC,
fetchFromGitHub,
makeWrapper,
makeDesktopItem,
copyDesktopItems,
electron,
libicns,
jq,
moreutils,
cacert,
nodePackages,
pipewire,
libpulseaudio,
autoPatchelfHook,
withTTS ? true,
# Enables the use of vencord from nixpkgs instead of
# letting vesktop manage it's own version
withSystemVencord ? false,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "vesktop";
version = "1.5.3";
src = fetchFromGitHub {
owner = "Vencord";
repo = "Vesktop";
rev = "v${finalAttrs.version}";
hash = "sha256-HlT7ddlrMHG1qOCqdaYjuWhJD+5FF1Nkv2sfXLWd07o=";
};
# NOTE: This requires pnpm 8.10.0 or newer
# https://github.com/pnpm/pnpm/pull/7214
pnpmDeps = assert lib.versionAtLeast nodePackages.pnpm.version "8.10.0";
stdenvNoCC.mkDerivation {
pname = "${finalAttrs.pname}-pnpm-deps";
inherit
(finalAttrs)
src
version
ELECTRON_SKIP_BINARY_DOWNLOAD
;
nativeBuildInputs = [
cacert
jq
moreutils
nodePackages.pnpm
];
# inspired by https://github.com/NixOS/nixpkgs/blob/763e59ffedb5c25774387bf99bc725df5df82d10/pkgs/applications/misc/pot/default.nix#L56
# and based on https://github.com/NixOS/nixpkgs/pull/290715
installPhase = ''
runHook preInstall
export HOME=$(mktemp -d)
pnpm config set store-dir $out
# Some packages produce platform dependent outputs. We do not want to cache those in the global store
pnpm config set side-effects-cache false
# pnpm is going to warn us about using --force
# --force allows us to fetch all dependencies including ones that aren't meant for our host platform
pnpm install --force --frozen-lockfile --ignore-script
'';
fixupPhase = ''
runHook preFixup
# Remove timestamp and sort the json files
rm -rf $out/v3/tmp
for f in $(find $out -name "*.json"); do
sed -i -E -e 's/"checkedAt":[0-9]+,//g' $f
jq --sort-keys . $f | sponge $f
done
runHook postFixup
'';
dontConfigure = true;
dontBuild = true;
outputHashMode = "recursive";
outputHash = "sha256-rizJu6v04wFEpJtakC2tfPg/uylz7gAOzJiXvUwdDI4=";
};
nativeBuildInputs = [
autoPatchelfHook
copyDesktopItems
makeWrapper
nodePackages.pnpm
nodePackages.nodejs
];
buildInputs = [
libpulseaudio
pipewire
stdenv.cc.cc.lib
];
ELECTRON_SKIP_BINARY_DOWNLOAD = 1;
configurePhase = ''
runHook preConfigure
export HOME=$(mktemp -d)
export STORE_PATH=$(mktemp -d)
cp -Tr "$pnpmDeps" "$STORE_PATH"
chmod -R +w "$STORE_PATH"
pnpm config set store-dir "$STORE_PATH"
pnpm install --frozen-lockfile --ignore-script --offline
patchShebangs node_modules/{*,.*}
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
pnpm build
# using `pnpm exec` here apparently makes it ignore ELECTRON_SKIP_BINARY_DOWNLOAD
./node_modules/.bin/electron-builder \
--dir \
-c.asarUnpack="**/*.node" \
-c.electronDist=${electron}/libexec/electron \
-c.electronVersion=${electron.version}
runHook postBuild
'';
# this is consistent with other nixpkgs electron packages and upstream, as far as I am aware
installPhase = ''
runHook preInstall
mkdir -p $out/opt/Vesktop
cp -r dist/linux-*unpacked/resources $out/opt/Vesktop/
pushd build
${libicns}/bin/icns2png -x icon.icns
for file in icon_*x32.png; do
file_suffix=''${file//icon_}
install -Dm0644 $file $out/share/icons/hicolor/''${file_suffix//x32.png}/apps/vesktop.png
done
makeWrapper ${electron}/bin/electron $out/bin/vesktop \
--add-flags $out/opt/Vesktop/resources/app.asar \
${lib.optionalString withTTS "--add-flags \"--enable-speech-dispatcher\""} \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime}}"
runHook postInstall
'';
desktopItems = [
(makeDesktopItem {
name = "vesktop";
desktopName = "Vesktop";
exec = "vesktop %U";
icon = "vesktop";
startupWMClass = "Vesktop";
genericName = "Internet Messenger";
keywords = [
"discord"
"vencord"
"electron"
"chat"
];
categories = [
"Network"
"InstantMessaging"
"Chat"
];
})
];
passthru = {
inherit (finalAttrs) pnpmDeps;
};
meta = {
description = "An alternate client for Discord with Vencord built-in";
homepage = "https://github.com/Vencord/Vesktop";
changelog = "https://github.com/Vencord/Vesktop/releases/tag/${finalAttrs.src.rev}";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [
getchoo
Scrumplex
vgskye
pluiedev
];
platforms = [
"x86_64-linux"
"aarch64-linux"
];
mainProgram = "vesktop";
};
})

View file

@ -1,13 +0,0 @@
diff --git a/src/main/constants.ts b/src/main/constants.ts
index d5c5fa6..a1b32f1 100644
--- a/src/main/constants.ts
+++ b/src/main/constants.ts
@@ -16,7 +16,7 @@ export const VENCORD_THEMES_DIR = join(DATA_DIR, "themes");
// needs to be inline require because of circular dependency
// as otherwise "DATA_DIR" (which is used by ./settings) will be uninitialised
export const VENCORD_FILES_DIR =
- (require("./settings") as typeof import("./settings")).Settings.store.vencordDir || join(DATA_DIR, "vencordDist");
+ (require("./settings") as typeof import("./settings")).Settings.store.vencordDir || "@vencord@";
export const USER_AGENT = `Vesktop/${app.getVersion()} (https://github.com/Vencord/Vesktop)`;

View file

@ -0,0 +1,40 @@
{pkgs ? import <nixpkgs> {}}: let
pname = "zen-browser";
version = "1.0.0-a.29";
src = pkgs.fetchurl {
url = "https://github.com/zen-browser/desktop/releases/download/${version}/zen-specific.AppImage";
sha256 = "sha256-cB2aJ9awl+gTyBOe0T7wMiZWw7RcwohOuCCdWBJXXwo=";
};
appimageContents = pkgs.appimageTools.extractType2 {
inherit pname version src;
};
in
pkgs.appimageTools.wrapType2 rec {
inherit pname version src;
extraInstallCommands = ''
mkdir -p $out/share/applications $out/share/pixmaps
cp ${appimageContents}/zen.desktop $out/share/applications/
cp ${appimageContents}/zen.png $out/share/pixmaps/
for n in {16,32,48,64,128}; do
size=$n"x"$n
mkdir -p $out/share/icons/hicolor/$size/apps
file="default"$n".png"
cp ${appimageContents}/browser/chrome/icons/default/$file $out/share/icons/hicolor/$size/apps/zen.png
done
substituteInPlace $out/share/applications/zen.desktop \
--replace-fail "Exec=zen %u" "Exec=$out/bin/${pname} %u"
'';
meta = with pkgs.lib; {
description = "Zen Browser - Experience tranquillity while browsing the web without people tracking you.";
homepage = "https://github.com/zen-browser/desktop";
license = licenses.mpl20;
maintainers = with maintainers; [zvictor];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,81 @@
ENGINE_DIR=$(pwd)/engine
SRC_DIR=$(pwd)/src
# Create a directory if it doesn't exist
mkdirp() {
mkdir -p "$1"
}
# Append to a file
append_to_file_sync() {
local file="$1"
local text="$2"
echo -e "$text" >>"$file"
}
# Copy or symlink files
copy_manual() {
local name="$1"
local src_path="$SRC_DIR/$name"
local dest_path="$ENGINE_DIR/$name"
echo "Processing file: $name"
# Ensure the parent directory exists
mkdirp "$(dirname "$dest_path")"
# Remove existing non-symlink file
if [ -e "$dest_path" ] && [ ! -L "$dest_path" ]; then
echo "Removing existing file at $dest_path"
rm -f "$dest_path"
fi
if [ "$(uname)" = "Darwin" ] || [ "$(uname)" = "Linux" ]; then
# Create symlink
echo "Creating symlink: $src_path -> $dest_path"
ln -s "$src_path" "$dest_path"
else
# On Windows or other platforms without symlink permissions
echo "Copying file: $src_path -> $dest_path"
cp "$src_path" "$dest_path"
fi
# Add to .gitignore if not already present
if ! grep -q "$name" "$ENGINE_DIR/.gitignore"; then
echo "Adding $name to .gitignore"
append_to_file_sync "$ENGINE_DIR/.gitignore" "\n$name"
fi
}
# Apply folder patches
apply_folder_patches() {
# Get all files from the source directory, excluding .patch files and node_modules
local all_files=($(find "$SRC_DIR" -type f ! -name "*.patch" ! -path "*/node_modules/*"))
for file in "${all_files[@]}"; do
relative_path="${file#$SRC_DIR/}"
copy_manual "$relative_path"
done
}
# Apply internal patches
apply_internal_patches() {
for patch in $(find $PATCHES_DIR -type f -name "*.patch"); do
echo "Applying internal patch: $patch"
git apply --directory "$ENGINE_DIR" "$patch"
done
}
# Apply git patches
apply_git_patches() {
for patch in $(find $SRC_DIR -type f -name "*.patch"); do
echo "Applying git patch: $patch $ENGINE_DIR"
echo "git apply --directory "$ENGINE_DIR" "$patch""
git apply --verbose "$patch"
done
}
cd engine || exit
apply_git_patches
cd .. || exit
apply_folder_patches