Skip to content

Commit

Permalink
dorion: 5.0.1 -> 6.4.1; dorion: build from source
Browse files Browse the repository at this point in the history
Co-authored-by: griffi-gh <[email protected]>
Co-authored-by: nyabinary <[email protected]>
  • Loading branch information
griffi-gh and nyabinary committed Jan 22, 2025
1 parent 3ca2ced commit 666ecfe
Show file tree
Hide file tree
Showing 3 changed files with 208 additions and 39 deletions.
31 changes: 31 additions & 0 deletions pkgs/by-name/do/dorion/cargo.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index 59f676d..b7090d4 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -4954,6 +4954,8 @@ dependencies = [
[[package]]
name = "tauri-plugin-shell"
version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ad7880c5586b6b2104be451e3d7fc0f3800c84bda69e9ba81c828f87cb34267"
dependencies = [
"encoding_rs",
"log",
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index 62a508b..0bbe935 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -12,13 +12,6 @@ rust-version = "1.81"
strip = "debuginfo"
lto = true

-# Patches
-[package.metadata.patch]
-crates = ["tauri-plugin-shell"]
-
-[patch.crates-io]
-tauri-plugin-shell = { path="./target/patch/tauri-plugin-shell-2.0.2" }
-
[build-dependencies]
tauri-build = { version = "2.0.0", features = [] }

195 changes: 156 additions & 39 deletions pkgs/by-name/do/dorion/package.nix
Original file line number Diff line number Diff line change
@@ -1,65 +1,182 @@
{ lib
, stdenv
, fetchurl
, autoPatchelfHook
, dpkg
, glib-networking
, gst_all_1
, libappindicator
, libayatana-appindicator
, webkitgtk_4_0
, wrapGAppsHook3
{
lib,
fetchFromGitHub,
fetchurl,
rustPlatform,
cmake,
wrapGAppsHook3,
glib-networking,
gst_all_1,
libsysprof-capture,
libayatana-appindicator,
nodejs,
openssl,
pkg-config,
yq-go,
pnpm_9,
webkitgtk_4_1,
cargo-tauri,
desktop-file-utils,
}:

stdenv.mkDerivation (finalAttrs: {
pname = "dorion";
version = "5.0.1";
let
webkitgtk_4_1' = webkitgtk_4_1.override {
enableExperimental = true;
};

src = fetchurl {
url = "https://github.com/SpikeHD/Dorion/releases/download/v${finalAttrs.version }/Dorion_${finalAttrs.version}_amd64.deb";
hash = "sha256-cCZikTZ+IU3mq/FkJfeggXLyWIsWG+a2qu1GbgW93WQ=";
shelter = fetchurl {
url = "https://raw.githubusercontent.com/uwu/shelter-builds/de7151650c240fc226d41ff898547edc4d23c94d/shelter.js";
hash = "sha256-dqAbq4O61t91gnVBOiN5KgJG3Frg9ePMPKjn9QWtkws=";
meta = {
homepage = "https://github.com/uwu/shelter";
sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; # actually, minified JS
license = lib.licenses.cc0;
};
};
in

unpackCmd = ''
dpkg -X $curSrc .
'';

runtimeDependencies = [
glib-networking
libappindicator
libayatana-appindicator
# nyo finalAttrs :<
# https://github.com/NixOS/nixpkgs/pull/194475
rustPlatform.buildRustPackage rec {
pname = "dorion";
version = "6.4.1";

src = fetchFromGitHub {
owner = "SpikeHD";
repo = "Dorion";
rev = "v${version}";
hash = "sha256-La58qj9acZzTG7WDfnBNdVWzAjOYVkIZzO8uyjQvt6o=";
};

cargoPatches = [
./cargo.patch
];

cargoRoot = "src-tauri";
buildAndTestSubdir = cargoRoot;

useFetchCargoVendor = true;
cargoHash = "sha256-5qK1IRaUrf4pYDmoBZoR6q6rL06irurwo4v5JLX+Io4=";

pnpmDeps = pnpm_9.fetchDeps {
inherit pname version src;
hash = "sha256-xBonUzA4+1zbViEsKap6CaG6ZRldW1LjNYIB+FmVRFs=";
};

nativeBuildInputs = [
autoPatchelfHook
dpkg
pnpm_9.configHook
rustPlatform.cargoSetupHook
cargo-tauri.hook
rustPlatform.cargoCheckHook
nodejs
pkg-config
wrapGAppsHook3
yq-go
desktop-file-utils
cmake
];

buildInputs = [
glib-networking
openssl
webkitgtk_4_1'
gst_all_1.gst-plugins-bad
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
webkitgtk_4_0
glib-networking
libsysprof-capture
libayatana-appindicator
];

installPhase = ''
runHook preInstall
prePatch = ''
# remove updater
rm -rf updater
'';

postPatch = ''
# patch cargo-deps
pushd $cargoDepsCopy/tauri-plugin-shell-*
patch -p1 < /build/source/src-tauri/patches/tauri-plugin-shell+*.patch
popd
pushd $cargoDepsCopy/tauri-utils-*
patch -p3 <${./tauri-env-resource-dir.patch}
popd
mkdir -pv $out
mv -v {bin,lib,share} $out
substituteInPlace $cargoDepsCopy/libappindicator-sys-*/src/lib.rs \
--replace "libayatana-appindicator3.so.1" "${libayatana-appindicator}/lib/libayatana-appindicator3.so.1"
runHook postInstall
# disable pre-build script and disable auto-updater
yq -iPo=json '
.bundle.resources = (.bundle.resources | map(select(. != "updater*")))
' src-tauri/tauri.conf.json
# copy shelter injection
cp ${shelter} src-tauri/injection/shelter.js
# Very hacky and 99% sure its not even right
mkdir -p src-tauri/html
cp -r src/* src-tauri/html
'';

dontUseCmakeConfigure = true;

preBuild = ''
# build the JS stuff
pnpm build:js
# build the webkit extension
pushd src-tauri/extension_webkit
cmake .
cmake --build . --parallel
popd
'';

postInstall = ''
mkdir -p $out/lib/dorion
cp -r /build/source/src-tauri/{injection,html} $out/lib/dorion
desktop-file-edit \
--set-comment "Tiny alternative Discord client" \
--set-key="Exec" --set-value="Dorion %U" \
--set-key="TryExec" --set-value="Dorion" \
--set-key="StartupWMClass" --set-value="Dorion" \
--set-key="StartupNotify" --set-value="true" \
--set-key="Categories" --set-value="Network;InstantMessaging;Chat;" \
--set-key="Keywords" --set-value="dorion;discord;vencord;chat;im;vc;ds;dc;dsc;tauri;" \
--set-key="Terminal" --set-value="false" \
--set-key="MimeType" --set-value="x-scheme-handler/discord" \
$out/share/applications/Dorion.desktop
'';

# error: failed to run custom build command for `Dorion v6.4.1 (/build/source/src-tauri)`
# Permission denied (os error 13)
doCheck = false;

env = {
TAURI_RESOURCE_DIR = "${placeholder "out"}/lib";
};

meta = {
homepage = "https://github.com/SpikeHD/Dorion";
homepage = "https://spikehd.github.io/projects/dorion/";
description = "Tiny alternative Discord client";
longDescription = ''
Dorion is an alternative Discord client aimed towards lower-spec or
storage-sensitive PCs that supports themes, plugins, and more!
'';
changelog = "https://github.com/SpikeHD/Dorion/releases/tag/v${version}";
downloadPage = "https://github.com/SpikeHD/Dorion/releases/tag/v${version}";
license = lib.licenses.gpl3Only;
mainProgram = "dorion";
maintainers = with lib.maintainers; [ aleksana ];
platforms = lib.intersectLists (lib.platforms.linux) (lib.platforms.x86_64);
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
mainProgram = "Dorion";
maintainers = with lib.maintainers; [
nyabinary
aleksana
griffi-gh
getchoo
];
platforms = lib.platforms.linux;
sourceProvenance = [
lib.sourceTypes.binaryBytecode # actually, minified JS
lib.sourceTypes.fromSource
];
};
})
}
21 changes: 21 additions & 0 deletions pkgs/by-name/do/dorion/tauri-env-resource-dir.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
diff --git a/crates/tauri-utils/src/platform.rs b/crates/tauri-utils/src/platform.rs
index 162539c96..6e8e18be5 100644
--- a/crates/tauri-utils/src/platform.rs
+++ b/crates/tauri-utils/src/platform.rs
@@ -264,7 +264,16 @@ fn is_cargo_output_directory(path: &std::path::Path) -> bool {
/// On iOS, it's `${exe_dir}/assets`.
///
/// Android uses a special URI prefix that is resolved by the Tauri file system plugin `asset://localhost/`
+///
+/// Additionally, the resource directory can be overriden by setting the `TAURI_RESOURCE_DIR` environment variable at compile time.
pub fn resource_dir(package_info: &PackageInfo, env: &Env) -> crate::Result<PathBuf> {
+ if let Some(dir) = option_env!("TAURI_RESOURCE_DIR") {
+ return Ok(PathBuf::from(format!(
+ "{}/{}",
+ dir,
+ package_info.name
+ )));
+ }
#[cfg(target_os = "android")]
return resource_dir_android(package_info, env);
#[cfg(not(target_os = "android"))]

0 comments on commit 666ecfe

Please sign in to comment.