building synctube from source
This commit is contained in:
17
flake.lock
generated
17
flake.lock
generated
@@ -1098,6 +1098,7 @@
|
|||||||
"qbit_manage": "qbit_manage",
|
"qbit_manage": "qbit_manage",
|
||||||
"sops-nix": "sops-nix",
|
"sops-nix": "sops-nix",
|
||||||
"stylix": "stylix",
|
"stylix": "stylix",
|
||||||
|
"synctube": "synctube",
|
||||||
"ucodenix": "ucodenix",
|
"ucodenix": "ucodenix",
|
||||||
"wallpapers": "wallpapers"
|
"wallpapers": "wallpapers"
|
||||||
}
|
}
|
||||||
@@ -1174,6 +1175,22 @@
|
|||||||
"jawz-scripts"
|
"jawz-scripts"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"synctube": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1768650831,
|
||||||
|
"narHash": "sha256-1ySSYF4DjkND1FTpn/HUtemmXVzK6+k/89HsKZ0r0PE=",
|
||||||
|
"owner": "RblSb",
|
||||||
|
"repo": "SyncTube",
|
||||||
|
"rev": "276e12db29ab31aa002f55b1a3cc69f170c1a2c2",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "RblSb",
|
||||||
|
"repo": "SyncTube",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"systems": {
|
"systems": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1681028828,
|
"lastModified": 1681028828,
|
||||||
|
|||||||
@@ -66,6 +66,10 @@
|
|||||||
url = "github:StuffAnThings/qbit_manage";
|
url = "github:StuffAnThings/qbit_manage";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
synctube = {
|
||||||
|
url = "github:RblSb/SyncTube";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
outputs =
|
outputs =
|
||||||
inputs:
|
inputs:
|
||||||
|
|||||||
@@ -1,20 +1,22 @@
|
|||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
config,
|
config,
|
||||||
|
inputs,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
setup = import ../factories/mkserver.nix { inherit lib config; };
|
setup = import ../factories/mkserver.nix { inherit lib config; };
|
||||||
cfg = config.my.servers.synctube;
|
cfg = config.my.servers.synctube;
|
||||||
|
synctubeSrc = inputs.synctube;
|
||||||
withCommas = lib.replaceStrings [ "." ] [ "," ];
|
withCommas = lib.replaceStrings [ "." ] [ "," ];
|
||||||
mkHaxeLib =
|
mkHaxeLib =
|
||||||
{
|
{
|
||||||
libname,
|
libname,
|
||||||
version,
|
|
||||||
src,
|
src,
|
||||||
|
version ? "git",
|
||||||
}:
|
}:
|
||||||
pkgs.stdenv.mkDerivation {
|
pkgs.stdenvNoCC.mkDerivation {
|
||||||
name = "${libname}-${version}";
|
name = "${libname}-${version}";
|
||||||
inherit src;
|
inherit src;
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
@@ -35,7 +37,6 @@ let
|
|||||||
}:
|
}:
|
||||||
mkHaxeLib {
|
mkHaxeLib {
|
||||||
inherit libname;
|
inherit libname;
|
||||||
version = "git";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
src = pkgs.fetchFromGitHub {
|
||||||
inherit
|
inherit
|
||||||
owner
|
owner
|
||||||
@@ -45,94 +46,95 @@ let
|
|||||||
;
|
;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
hxnodejsGit = mkHaxeGitLib {
|
haxeLibs = pkgs.symlinkJoin {
|
||||||
libname = "hxnodejs";
|
name = "synctube-haxelibs";
|
||||||
owner = "HaxeFoundation";
|
paths = [
|
||||||
repo = "hxnodejs";
|
(mkHaxeGitLib {
|
||||||
rev = "ba7d9a566a79b3b36b4e1f58bc8e66306983e9e4";
|
libname = "hxnodejs";
|
||||||
hash = "sha256-RZ+GoRlTvcalVsexd8Fw3/P4XZYh5IZQJNzyFkEOgAc=";
|
owner = "HaxeFoundation";
|
||||||
|
repo = "hxnodejs";
|
||||||
|
rev = "ba7d9a566a79b3b36b4e1f58bc8e66306983e9e4";
|
||||||
|
hash = "sha256-RZ+GoRlTvcalVsexd8Fw3/P4XZYh5IZQJNzyFkEOgAc=";
|
||||||
|
})
|
||||||
|
(mkHaxeGitLib {
|
||||||
|
libname = "hxnodejs-ws";
|
||||||
|
owner = "haxe-externs";
|
||||||
|
repo = "hxnodejs-ws";
|
||||||
|
rev = "2d0e770489abdb8d095fc4694353eaa9d6743562";
|
||||||
|
hash = "sha256-Gls4OeOCSU9Ld3rZ76086BH2TMxRvPj658sKWDP4pds=";
|
||||||
|
})
|
||||||
|
(mkHaxeGitLib {
|
||||||
|
libname = "json2object";
|
||||||
|
owner = "RblSb";
|
||||||
|
repo = "json2object";
|
||||||
|
rev = "8d949c12a93bdae010603af955a453458603cd47";
|
||||||
|
hash = "sha256-lD1IDg6xULRwisAtSZIyBju8yIa7nmM5eSezz05udaw=";
|
||||||
|
})
|
||||||
|
(mkHaxeGitLib {
|
||||||
|
libname = "hxjsonast";
|
||||||
|
owner = "elnabo";
|
||||||
|
repo = "hxjsonast";
|
||||||
|
rev = "9a9544378c9517e5cf4c5fa3c092e77bec125e64";
|
||||||
|
hash = "sha256-AvcxbksuLCKGRCHAxFYHdF7e32efBvPdXLTbHbd+q/c=";
|
||||||
|
})
|
||||||
|
(mkHaxeGitLib {
|
||||||
|
libname = "ytdlp-nodejs";
|
||||||
|
owner = "haxe-externs";
|
||||||
|
repo = "ytdlp-nodejs-externs";
|
||||||
|
rev = "dbd476ce53a0c38db36e430ded28b2740001e8aa";
|
||||||
|
hash = "sha256-mitC7wzZdJxt4B0UhMrnShhMd9Gup5G9EpSbUSJj8dA=";
|
||||||
|
})
|
||||||
|
(mkHaxeGitLib {
|
||||||
|
libname = "youtubeIFramePlayer";
|
||||||
|
owner = "haxe-externs";
|
||||||
|
repo = "youtubeIFramePlayer-externs";
|
||||||
|
rev = "8d47d71a4e3b8030a83a2e11672f120ca9a086d4";
|
||||||
|
hash = "sha256-ov0nbhEazVCcWHcxplCNdN0KRhxBKqsvFHjmGzvTvPI=";
|
||||||
|
})
|
||||||
|
(mkHaxeGitLib {
|
||||||
|
libname = "hls.js-extern";
|
||||||
|
owner = "zoldesi-andor";
|
||||||
|
repo = "hls.js-haxe-extern";
|
||||||
|
rev = "86448a1dad21e72126ce8cc078062648de8bc2c5";
|
||||||
|
hash = "sha256-MnT71PwoQd66DOzHMp8X3Yt8XulUkA1tX4dgUv7JLio=";
|
||||||
|
})
|
||||||
|
(mkHaxeGitLib {
|
||||||
|
libname = "utest";
|
||||||
|
owner = "haxe-utest";
|
||||||
|
repo = "utest";
|
||||||
|
rev = "654d6a32cc84c81972a5d3768e400d7317fff6e5";
|
||||||
|
hash = "sha256-3tdiEE1tXx5Jht+amAH3e5mKa5kAihJlklFaJLeTriE=";
|
||||||
|
})
|
||||||
|
];
|
||||||
};
|
};
|
||||||
hxnodejsWs = mkHaxeGitLib {
|
npmDeps = pkgs.fetchNpmDeps {
|
||||||
libname = "hxnodejs-ws";
|
src = synctubeSrc;
|
||||||
owner = "haxe-externs";
|
hash = "sha256-dIbBNvTQCv1fjboBC6Q8kGqcZbLNuGmgHw9DgOmVnTw=";
|
||||||
repo = "hxnodejs-ws";
|
|
||||||
rev = "2d0e770489abdb8d095fc4694353eaa9d6743562";
|
|
||||||
hash = "sha256-Gls4OeOCSU9Ld3rZ76086BH2TMxRvPj658sKWDP4pds=";
|
|
||||||
};
|
};
|
||||||
json2object = mkHaxeGitLib {
|
synctubeApp = pkgs.stdenv.mkDerivation {
|
||||||
libname = "json2object";
|
|
||||||
owner = "RblSb";
|
|
||||||
repo = "json2object";
|
|
||||||
rev = "8d949c12a93bdae010603af955a453458603cd47";
|
|
||||||
hash = "sha256-lD1IDg6xULRwisAtSZIyBju8yIa7nmM5eSezz05udaw=";
|
|
||||||
};
|
|
||||||
hxjsonast = mkHaxeGitLib {
|
|
||||||
libname = "hxjsonast";
|
|
||||||
owner = "elnabo";
|
|
||||||
repo = "hxjsonast";
|
|
||||||
rev = "9a9544378c9517e5cf4c5fa3c092e77bec125e64";
|
|
||||||
hash = "sha256-AvcxbksuLCKGRCHAxFYHdF7e32efBvPdXLTbHbd+q/c=";
|
|
||||||
};
|
|
||||||
ytdlpNodejs = mkHaxeGitLib {
|
|
||||||
libname = "ytdlp-nodejs";
|
|
||||||
owner = "haxe-externs";
|
|
||||||
repo = "ytdlp-nodejs-externs";
|
|
||||||
rev = "dbd476ce53a0c38db36e430ded28b2740001e8aa";
|
|
||||||
hash = "sha256-mitC7wzZdJxt4B0UhMrnShhMd9Gup5G9EpSbUSJj8dA=";
|
|
||||||
};
|
|
||||||
youtubeIFramePlayer = mkHaxeGitLib {
|
|
||||||
libname = "youtubeIFramePlayer";
|
|
||||||
owner = "haxe-externs";
|
|
||||||
repo = "youtubeIFramePlayer-externs";
|
|
||||||
rev = "8d47d71a4e3b8030a83a2e11672f120ca9a086d4";
|
|
||||||
hash = "sha256-ov0nbhEazVCcWHcxplCNdN0KRhxBKqsvFHjmGzvTvPI=";
|
|
||||||
};
|
|
||||||
hlsJsExtern = mkHaxeGitLib {
|
|
||||||
libname = "hls.js-extern";
|
|
||||||
owner = "zoldesi-andor";
|
|
||||||
repo = "hls.js-haxe-extern";
|
|
||||||
rev = "86448a1dad21e72126ce8cc078062648de8bc2c5";
|
|
||||||
hash = "sha256-MnT71PwoQd66DOzHMp8X3Yt8XulUkA1tX4dgUv7JLio=";
|
|
||||||
};
|
|
||||||
utest = mkHaxeGitLib {
|
|
||||||
libname = "utest";
|
|
||||||
owner = "haxe-utest";
|
|
||||||
repo = "utest";
|
|
||||||
rev = "654d6a32cc84c81972a5d3768e400d7317fff6e5";
|
|
||||||
hash = "sha256-3tdiEE1tXx5Jht+amAH3e5mKa5kAihJlklFaJLeTriE=";
|
|
||||||
};
|
|
||||||
haxeLibs = pkgs.runCommand "synctube-haxelibs" { } ''
|
|
||||||
mkdir -p "$out/lib/haxe"
|
|
||||||
cp -r ${hxnodejsGit}/lib/haxe/* "$out/lib/haxe/"
|
|
||||||
cp -r ${hxnodejsWs}/lib/haxe/* "$out/lib/haxe/"
|
|
||||||
cp -r ${json2object}/lib/haxe/* "$out/lib/haxe/"
|
|
||||||
cp -r ${hxjsonast}/lib/haxe/* "$out/lib/haxe/"
|
|
||||||
cp -r ${ytdlpNodejs}/lib/haxe/* "$out/lib/haxe/"
|
|
||||||
cp -r ${youtubeIFramePlayer}/lib/haxe/* "$out/lib/haxe/"
|
|
||||||
cp -r ${hlsJsExtern}/lib/haxe/* "$out/lib/haxe/"
|
|
||||||
cp -r ${utest}/lib/haxe/* "$out/lib/haxe/"
|
|
||||||
'';
|
|
||||||
synctubePackage = pkgs.buildNpmPackage {
|
|
||||||
pname = "synctube";
|
pname = "synctube";
|
||||||
version = "1.0.0";
|
version = "1.0.0";
|
||||||
src = pkgs.fetchFromGitHub {
|
src = synctubeSrc;
|
||||||
owner = "RblSb";
|
|
||||||
repo = "SyncTube";
|
|
||||||
rev = "276e12db29ab31aa002f55b1a3cc69f170c1a2c2";
|
|
||||||
hash = "sha256-1ySSYF4DjkND1FTpn/HUtemmXVzK6+k/89HsKZ0r0PE=";
|
|
||||||
};
|
|
||||||
npmDepsHash = "sha256-dIbBNvTQCv1fjboBC6Q8kGqcZbLNuGmgHw9DgOmVnTw=";
|
|
||||||
dontNpmBuild = true;
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
pkgs.haxe
|
pkgs.haxe
|
||||||
pkgs.neko
|
pkgs.neko
|
||||||
|
pkgs.nodejs
|
||||||
];
|
];
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
runHook preBuild
|
runHook preBuild
|
||||||
export HAXELIB_PATH=${haxeLibs}/lib/haxe
|
export HAXELIB_PATH=${haxeLibs}/lib/haxe
|
||||||
|
export npm_config_cache=${npmDeps}
|
||||||
|
npm ci --offline --ignore-scripts
|
||||||
haxe build-all.hxml
|
haxe build-all.hxml
|
||||||
runHook postBuild
|
runHook postBuild
|
||||||
'';
|
'';
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
mkdir -p "$out/app"
|
||||||
|
cp -R build res user default-config.json package.json package-lock.json "$out/app/"
|
||||||
|
cp -R node_modules "$out/app/"
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
synctubeImage = pkgs.dockerTools.buildImage {
|
synctubeImage = pkgs.dockerTools.buildImage {
|
||||||
name = "synctube";
|
name = "synctube";
|
||||||
@@ -140,23 +142,20 @@ let
|
|||||||
copyToRoot = pkgs.buildEnv {
|
copyToRoot = pkgs.buildEnv {
|
||||||
name = "synctube-root";
|
name = "synctube-root";
|
||||||
paths = [
|
paths = [
|
||||||
synctubePackage
|
synctubeApp
|
||||||
pkgs.nodejs
|
pkgs.nodejs
|
||||||
];
|
];
|
||||||
pathsToLink = [
|
pathsToLink = [ "/" ];
|
||||||
"/app"
|
|
||||||
"/bin"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
config = {
|
config = {
|
||||||
WorkingDir = "/app/lib/node_modules/synctube";
|
WorkingDir = "/app";
|
||||||
Cmd = [
|
Cmd = [
|
||||||
"/bin/node"
|
"/bin/node"
|
||||||
"build/server.js"
|
"build/server.js"
|
||||||
];
|
];
|
||||||
Env = [
|
Env = [
|
||||||
"NODE_ENV=production"
|
"NODE_ENV=production"
|
||||||
"NODE_PATH=/app/lib/node_modules/synctube/node_modules"
|
"NODE_PATH=/app/node_modules"
|
||||||
"PATH=/bin"
|
"PATH=/bin"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user