1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
{
lib,
stdenv,
rustPlatform,
fetchFromGitHub,
buildNpmPackage,
darwin,
makeWrapper,
ffmpeg,
git,
pkg-config,
sqlite,
libvaSupport ? stdenv.hostPlatform.isLinux,
libva,
fetchpatch,
}:
rustPlatform.buildRustPackage rec {
pname = "dim";
version = "0-unstable-2023-12-29";
src = fetchFromGitHub {
owner = "Dusk-Labs";
repo = "dim";
rev = "3ccb4ab05fc1d7dbd4ebbba9ff2de0ecc9139b27";
hash = "sha256-1mgbrDnIkIdWy78uj4EjjgwBQxw/rIS1LCFNscXXPbk=";
};
frontend = buildNpmPackage {
pname = "dim-ui";
inherit version;
src = "${src}/ui";
postPatch = ''
ln -s ${./package-lock.json} package-lock.json
'';
npmDepsHash = "sha256-6oSm3H6RItHOrBIvP6uvR7sBboBRWFuP3VwU38GMfgQ=";
installPhase = ''
runHook preInstall
cp -r build $out
runHook postInstall
'';
};
patches = [
# Upstream uses a 'ffpath' function to look for config directory and
# (ffmpeg) binaries in the same directory as the binary. Patch it to use
# the working dir and PATH instead.
./relative-paths.diff
# Bump the first‐party nightfall dependency to the latest Git
# revision for FFmpeg >= 6 support.
./bump-nightfall.patch
# Upstream has some unused imports that prevent things from compiling...
# Remove for next release.
(fetchpatch {
name = "remove-unused-imports.patch";
url = "https://github.com/Dusk-Labs/dim/commit/f62de1d38e6e52f27b1176f0dabbbc51622274cb.patch";
hash = "sha256-Gk+RHWtCKN7McfFB3siIOOhwi3+k17MCQr4Ya4RCKjc=";
})
];
postPatch = ''
ln -sf ${./Cargo.lock} Cargo.lock
'';
postConfigure = ''
ln -ns $frontend ui/build
'';
nativeBuildInputs = [
makeWrapper
pkg-config
git
];
buildInputs =
[ sqlite ]
++ lib.optional stdenv.hostPlatform.isDarwin [
darwin.apple_sdk.frameworks.Security
darwin.apple_sdk.frameworks.CoreServices
darwin.apple_sdk.frameworks.SystemConfiguration
]
++ lib.optional libvaSupport libva;
buildFeatures = lib.optional libvaSupport "vaapi";
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"mp4-0.8.2" = "sha256-OtVRtOTU/yoxxoRukpUghpfiEgkKoJZNflMQ3L26Cno=";
"nightfall-0.3.12-rc4" = "sha256-AbSuLe3ySOla3NB+mlfHRHqHuMqQbrThAaUZ747GErE=";
};
};
checkFlags = [
# Requires network
"--skip=tmdb::tests::johhny_test_seasons"
"--skip=tmdb::tests::once_upon_get_year"
"--skip=tmdb::tests::tmdb_get_cast"
"--skip=tmdb::tests::tmdb_get_details"
"--skip=tmdb::tests::tmdb_get_episodes"
"--skip=tmdb::tests::tmdb_get_seasons"
"--skip=tmdb::tests::tmdb_search"
# Broken doctest
"--skip=dim-utils/src/lib.rs"
];
postInstall = ''
wrapProgram $out/bin/dim \
--prefix PATH : ${lib.makeBinPath [ ffmpeg ]}
'';
meta = {
homepage = "https://github.com/Dusk-Labs/dim";
description = "Self-hosted media manager";
license = lib.licenses.agpl3Only;
mainProgram = "dim";
maintainers = [ lib.maintainers.misterio77 ];
platforms = lib.platforms.unix;
};
}
|