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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
{
lib,
stdenv,
fetchFromGitHub,
kissfft,
miniaudio,
pkg-config,
python3Packages,
gobject-introspection,
flac,
game-music-emu,
gtk3,
libappindicator,
libnotify,
libopenmpt,
librsvg,
libsamplerate,
libvorbis,
mpg123,
opusfile,
pango,
pipewire,
wavpack,
ffmpeg,
pulseaudio,
withDiscordRPC ? true,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "tauon";
version = "7.8.3";
src = fetchFromGitHub {
owner = "Taiko2k";
repo = "Tauon";
rev = "v${finalAttrs.version}";
hash = "sha256-A7JRJ0Eh0ynuwPYZFLEeqWLf6OKdN59jM2vozdpSZC8=";
};
postUnpack = ''
rmdir source/src/phazor/kissfft
ln -s ${kissfft.src} source/src/phazor/kissfft
rmdir source/src/phazor/miniaudio
ln -s ${miniaudio.src} source/src/phazor/miniaudio
'';
postPatch = ''
substituteInPlace tauon.py \
--replace-fail 'install_mode = False' 'install_mode = True' \
--replace-fail 'install_directory = os.path.dirname(os.path.abspath(__file__))' 'install_directory = "${placeholder "out"}/share/tauon"'
substituteInPlace t_modules/t_main.py \
--replace-fail 'install_mode = False' 'install_mode = True' \
--replace-fail 'libopenmpt.so' '${lib.getLib libopenmpt}/lib/libopenmpt.so'
substituteInPlace t_modules/t_phazor.py \
--replace-fail 'lib/libphazor' '../../lib/libphazor'
substituteInPlace compile-phazor*.sh --replace-fail 'gcc' '${stdenv.cc.targetPrefix}cc'
substituteInPlace extra/tauonmb.desktop --replace-fail 'Exec=/opt/tauon-music-box/tauonmb.sh' 'Exec=${placeholder "out"}/bin/tauon'
'';
postBuild = ''
bash ./compile-phazor.sh
bash ./compile-phazor-pipewire.sh
'';
nativeBuildInputs = [
pkg-config
python3Packages.wrapPython
gobject-introspection
];
buildInputs = [
flac
game-music-emu
gtk3
libappindicator
libnotify
libopenmpt
librsvg
libsamplerate
libvorbis
mpg123
opusfile
pango
pipewire
wavpack
];
pythonPath =
with python3Packages;
[
beautifulsoup4
dbus-python
unidecode
jxlpy
musicbrainzngs
mutagen
natsort
pillow
plexapi
pycairo
pychromecast
pylast
pygobject3
pysdl2
requests
send2trash
setproctitle
]
++ lib.optional withDiscordRPC pypresence
++ lib.optional stdenv.isLinux pulsectl;
makeWrapperArgs = [
"--prefix PATH : ${lib.makeBinPath [ ffmpeg ]}"
"--prefix LD_LIBRARY_PATH : ${
lib.makeLibraryPath [
game-music-emu
pulseaudio
]
}"
"--prefix PYTHONPATH : $out/share/tauon"
"--set GI_TYPELIB_PATH $GI_TYPELIB_PATH"
];
installPhase = ''
install -Dm755 tauon.py $out/bin/tauon
mkdir -p $out/share/tauon
cp -r lib $out
cp -r assets input.txt t_modules theme templates $out/share/tauon
wrapPythonPrograms
mkdir -p $out/share/applications
install -Dm755 extra/tauonmb.desktop $out/share/applications/tauonmb.desktop
mkdir -p $out/share/icons/hicolor/scalable/apps
install -Dm644 extra/tauonmb{,-symbolic}.svg $out/share/icons/hicolor/scalable/apps
'';
meta = with lib; {
description = "Linux desktop music player from the future";
mainProgram = "tauon";
homepage = "https://tauonmusicbox.rocks/";
changelog = "https://github.com/Taiko2k/TauonMusicBox/releases/tag/v${finalAttrs.version}";
license = licenses.gpl3;
maintainers = with maintainers; [ jansol ];
platforms = platforms.linux ++ platforms.darwin;
};
})
|