-
-
Notifications
You must be signed in to change notification settings - Fork 14.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FOSS music trackers packaging effort #81815
Comments
I have been sitting on a derivation for BambooTracker since the big Qt infrastructure awhile ago, been meaning to open a PR for it once the ever-approaching 0.4 release is out. I can open a PR for the current state later today, you can give it a look if you want.
FT and any fork thereof is Windows-only, though some forks improve Wine support by alot. I don't think packaging Wine-based applications is something we do in nixpkgs.
I still have an update PR outstanding for schismtracker, can look into adding a .desktop file while I'm at it. #76725 Something that's missing from your list would be CheeseCutter, which is stuck waiting for GDC to get packaged (#69144 needs to get merged first) - I tried building it with the other Dlang compilers already in nixpkgs but it relies on GDC's support of legacy syntax to compile. |
Tangentially related, if anyone is interested in this issue, they may also be interested in the various JACK related issues. |
@OPNA2608 thanks for the interest! I added your prs and cheesecutter to the list
oops, I thought I filtered out all of those, thanks |
While it's a very popular chiptune tracker, DefleMask is closed-source and far from FOSS-happy. See the VICE emulator's Hall of Shame section on DefleMask & reSID. The latest distributed non-reSID binary could be patched & wrapped but I get abit of a stomach ache thinking about it. |
Merged! Can finally be ticked off the list. 😄
Quite new, and I'm talking to the dev about what can be done to improve packaging. It does some awful things:
Once these problems are solved, I plan to open a PR. |
Great! I Updated the list
ow. that's unfree... what does it need it for? |
Really only for convenience, apparently packs of SPC files (SNES music code) are usually in the RAR format. I have open issues for those problems:
|
@OPNA2608 should I also ping you in my prs? |
Feel free to do so! |
Can you do me a favour and put
under CheeseCutter? I have been meaning to tackle that for awhile but never got around to test it properly and keep forgetting about it. There's an updated commit on the repo that introduces Darwin-related compilation fixes and the SDL loading module requires some patching on our side to handle our non-standard path straight to the dylib, as opposed to an SDL.framework in the Library. I'll |
Done! |
I don't think there is. For reference, a failed darwin evaluation on Hydra: https://hydra.nixos.org/build/126193708 |
Talked to the developer abit to fix some installation problems over at yuxshao/ptcollab#3, will make a PR after testing the online part with some friends. |
Added to the list 👍 |
I found another great resource: https://wiki.thingsandstuff.org/Tracker |
@OPNA2608
What other trackers with same features would you recommend? 3rd point is not necessary, since its quite niche |
@dukzcry if I remember correctly, of those packaged soundtracker has the modern interface and midi support, and klystrack has all three but in limited form |
I merged all resources and there are ~60 entries now... There's a lot of cool stuff in there! (and also a fair amount of abandoned projects) |
I remembered this was still open. I hacked together a Darwin build, derivation needs cleanup & some more Don't have the time rn to flip between machines and fix everything up, but I'll review a PR if you clean it up & CC me. Clickme for patch@@ -3,6 +3,7
, fetchFromGitHub
, pkg-config
, makeWrapper
+, xcbuildHook
, SDL
, SDL_image
, SDL_ttf
@@ -24,34 +25,63 stdenv.mkDerivation rec {
nativeBuildInputs = [
pkg-config
makeWrapper
- ];
+ ]
+ ++ lib.optional stdenv.hostPlatform.isDarwin xcbuildHook;
buildInputs = [
SDL
SDL_image
SDL_ttf
- gtk2
- glib
+ # gtk2
+ # glib
];
- makeFlags = [
- "-C sdl"
- "-f Makefile.linux"
- PREFIX=$(out)"
- ];
+ # makeFlags = [
+ # "-C sdl"
+ # "-f Makefile.linux"
+ # PREFIX=$(out)"
+ # ];
# TODO: try to exclude gtk and glib from darwin builds
NIX_CFLAGS_COMPILE = [
- "-I${SDL}/include/SDL"
+ "-I${SDL.dev}/include/SDL"
"-I${SDL_image}/include/SDL"
"-I${SDL_ttf}/include/SDL"
- "-I${gtk2.dev}/include/gtk-2.0"
- "-I${glib.dev}/include/glib-2.0"
+ # "-I${gtk2.dev}/include/gtk-2.0"
+ # "-I${glib.dev}/include/glib-2.0"
];
+ preBuild = ''
+ cd sdl/osx/xcode
+ # xcode project expects SDL Frameworks for linking, we only have dylibs
+ substituteInPlace Hivelytracker.xcodeproj/project.pbxproj \
+ --replace 'lastKnownFileType = wrapper.framework; name = SDL.framework; path = /Library/Frameworks/SDL.framework' 'lastKnownFileType = "compiled.mach-o.dylib"; name = libSDL.dylib; path = ${SDL}/lib/libSDL.dylib' \
+ --replace 'lastKnownFileType = wrapper.framework; name = SDL_image.framework; path = /Library/Frameworks/SDL_image.framework' 'lastKnownFileType = "compiled.mach-o.dylib"; name = libSDL_image.dylib; path = ${SDL_image}/lib/libSDL_image.dylib' \
+ --replace 'lastKnownFileType = wrapper.framework; name = SDL_ttf.framework; path = /Library/Frameworks/SDL_ttf.framework' 'lastKnownFileType = "compiled.mach-o.dylib"; name = libSDL_ttf.dylib; path = ${SDL_ttf}/lib/libSDL_ttf.dylib'
+ substituteInPlace ../../../hvl2wav/Makefile \
+ --replace 'gcc' '${stdenv.cc.targetPrefix}cc'
+ '';
+
# Also build the hvl2wav tool
postBuild = ''
- make -C hvl2wav
+ make -C ../../../hvl2wav
+ '';
+
+ installPhase = lib.optionalString stdenv.hostPlatform.isDarwin ''
+ runHook preInstall
+ install -Dm755 Products/Release/Hivelytracker.app/Contents/MacOS/Hivelytracker $out/lib/Hivelytracker
+ cp -R Products/Release/Hivelytracker.app/Contents/Resources/* $out/lib/hivelytracker
+ # Crashes if fonts are not in ttf/ subdirectory
+ mkdir $out/lib/hivelytracker/ttf
+ mv $out/lib/hivelytracker/{*.,}ttf
+ mkdir $out/bin
+ runHook postInstall
'';
postInstall = ''
@@ -59,11 +89,11 @@ stdenv.mkDerivation rec {
# Ideally we should patch the sources, but the program can't open
# files passed as arguments anyway, so this works well enough until the
# issue is fixed.
- wrapProgram $out/bin/hivelytracker \
- --run "cd $out/share/hivelytracker"
+ makeWrapper $out/lib/hivelytracker/Hivelytracker $out/bin/hivelytracker \
+ --run "cd $out/lib/hivelytracker"
# Also install the hvl2wav tool
- install -Dm755 hvl2wav/hvl2wav $out/bin/hvl2wav
+ install -Dm755 ../../../hvl2wav/hvl2wav $out/bin/hvl2wav
'';
meta = with lib; {
@@ -83,7 +113,6 @@ stdenv.mkDerivation rec {
license = licenses.bsd3;
platforms = platforms.all;
maintainers = with maintainers; [ fgaz ];
- broken = stdenv.isDarwin; # TODO: try to use xcbuild
};
}
Actually, nesicide includes a version of FamiTracker that's cross-platform, via an MFC-over-Qt compatibility layer. It has some problems but it can launch and produce some sound. I haven't tried packaging the whole IDE yet though. |
I picked afew projects from the list that I've heard of before / seemed interesting and hacked-together overlays: ChibitrackerRequires some patching to build for x86_64-linux, builds fine out-of-the-box for i686-linux (via i686 versions works mostly fine, only crashes when exiting. x86_64 can't load a module most of the time and crashes with a bus error. It's an interesting little project but it seems abandoned and abit broken, not sure if it makes sense to include this one. AdlibTracker2x86_64 support requires replacing x86-exclusive inline assembly with equivalent x86_64 assembly… 😕 Compiles on x86_64-linux but crashes immediately. This may be "normal" however because I heard that the AUR's package (which installs the prebuilt Linux version) also crashes for some people in a similar fashion. Not sure what's up with that.
i686-linux doesn't build because i686 fpc fails to build for me. The project might still be active. Arkostracker2The project is still binary-only for now but I tried to package it regardless. It "builds" but fails on me when it tries to draw via libGL. Maybe this works on an actual NixOS machine.
Last release was on March 21, 2021 so it's very much in development still. psycleThe This is only a command-line-only player however, and so far I've been unable to get any sound out of it. Psycle modules embed the names of the plugins they need… with a DLL extension. I don't know if that affects the plugin loading. I saw in strace that it also tries to find a config.xml at some point. ALSA also doesn't seem to work & causes an abortion. 1trackerI gave this a quick attempt. I think it's trying to test something by writing to the nix store at runtime - which obviously fails - so it instantly errors. I'll try to look into this more. I think it's still active. (Excuse the monitor photo, any button press will close the window) ZorroTracker is a very new, WIP and active project (since there's some minor financial backing behind it) but it's Electron-based. I have no clue how to build that from source and gave up on it. |
Wow, nice job!
I also tried building it but gave up shortly after. Does the cross32 makefile help?
I tried stracing it and it looks like it's missing some files: If you add If you write the list of engines in the I have no idea what the EDIT: EDIT4, screenshots: In the writable src directory: the different graphics are probabaly caused by |
.1te files seem to be C/C++ source code, with a function
installPhase = ''
runHook preInstall
mkdir -p $out/{bin,lib/1tracker}
mv colors/ docs/ engines/ examples/ fonts/ 1tracker $out/lib/1tracker/
ln -s $out/{lib/1tracker,bin}/1tracker
# Write list and hash files for the tracker
pushd $out/lib/1tracker/engines
for engine in *; do
echo $engine
# Ignore non-engines for list, but not for hash
if [[ "$engine" == *.1te ]]; then
echo $engine >> list
grep 'SetTitle' $engine | cut -d'"' -f2 >> list
grep 'SetAbout' $engine | cut -d'"' -f2 | sed -e 's/\\n/\n/g' >> list
echo "###" >> list
fi
printf '%-8s' ''${engine:0:8} >> hash
done
printf '\0' >> hash
ln -s ./{anteater,test}.1te
popd
runHook postInstall
''; I think we can fix the cfg path problem by patching in |
angelscript actually! (which looks very nice, I might use it for some of my own projects...) |
Though the best long-term solution is probably to ask the author to use XDG for cache and configuration (and maybe to pick up additional engines). Should we contact them? |
I think devendoring angelscript would be a good idea if it's feasible, yeah.
We can certainly ask! 😄 I patched in SDL_GetPrefPath and wrote a wrapper that copies the example cfg to the appropriate place if it's missing. It should work "from the store" now. LMK what you think. |
https://github.com/djdiskmachine/LittleGPTracker is a LGPT fork with a more active maintainer. I may switch the package to it if djdiskmachine/LittleGPTracker#71 is resolved. P.S.: wow, 2 years since the last tracker addition! Time flies! I need to finish that tiatracker pr... |
If I wanted to get QTFamitracker (or any other Linux-compatible Famitracker fork, if there are any) in, how involved is that likely to be? I've never packaged a QT app for Nix before, but I've done a little bit of C building in Nix and used to use C and C++ for whole projects back in the day (Nix can't be more of a slog than CMake's multiple steps and interminable build time). |
@ScottFreeCode Qt isn't too bad, see the relevant section in the manual. |
I recently took an interest in the world of tracker music and discovered that there are a lot of FOSS trackers, but that packages for them are scattered across distros (Debian has quite a lot though).
So i decided to package all of them for NixOS :D
This issue tracks
myour packaging effort. Suggestions are welcome!In no particolar order (name - {Repology, Homepage, pull request #} - additional details):
milkytracker
- was already in nixpkgsklystrack
- was already in nixpkgsschismtracker
- was already in nixpkgspt2-clone
{R H pt2-clone: init at 1.06 #80611}ft2-clone
{R H ft2-clone: init at 1.09 #80612}goattracker
{R H goattracker: init at 2.75 #81025}gtultra
{R H gtultra: init at 1.5.5 #325277}bambootracker
{R H bambootracker: init at 0.4.3 #81840}soundtracker
{R H soundtracker: init at 1.0.0.1 #82057}hivelytracker
{R H hivelytracker: init at unstable-2020-02-10 #95797}cheesecutter
{R H cheesecutter: init at unstable-2019-12-06 #82666} -waiting for gdc: init at 9.3.0 #69144littlegptracker
{R H littlegptracker: init at unstable-2019-04-14 #91766} - official source at Mdashdotdashn's githubptcollab
{- H #101446}picoloop
{R H -}furnace
{R H furnace: init at 0.5.6 #158229}tiatracker
{R H tiatracker: init at 1.3 #158645}zytrax
{R H -}tutka
{R H -}buzztrax
{R H -}protrekkr
{R H -} a fork, another forktektracker
/ttrk
{R H -} fork,attrk
is another forkattrk
{- H -}xybrid
{R H -}neil
(-tracker
/-sequencer
) {- H -}jacker
{R H -} fork1 fork2cheesetracker
{R H -}funktrackergold
shaketracker
? https://sourceforge.net/projects/cheesetronic/files/, http://www.shaltev.org/mvs/programming.htmladlibtracker2
? {R H -}frinika
{R H -}radium
{R H -}aldrin
{R H -}aube
{- H -}maube
{- H -}fmcomposer
{- H -}chibitracker
{- H -} archived original homepage forkpsytexx
{- H -}kmiditracker
https://web.archive.org/web/20080724082500/http://www.monasteriomono.org/programs/kmiditracker/synergy-miditracker
{- H -}fltracker
{- H -}snestracker
{- H -}1tracker
{- H -}bintracker
{- H -}playerpro
{- H -}propulse
{- H -}snibbetracker
{- H -}plebtracker
{- H -}psycle
/qpsycle
{- H -} https://psycle.fandom.com/wiki/Contributing_code#You_have_a_unix-based_OScobratracker
{- H -} python3 forkkunquat
{- H -}tgtracker
/tonal-glyph-tracker
{- H -}zeetracker
{- H -}bassoontracker
{- H -} js, but with no dependencies!soundbox
{- H -} js, but no dependencies!teqqer
{- H -}vht
/valhalla-tracker
{- H -}miditrk
{- H -}madtracker3
{- H -}med
{- H -} the name "med" conflicts, use anotherlebac
{- H -}arkostracker
{- H -} plans to open source soonexotracker
{- H -}nesicide
/qt-famitracker
{- H -}prototracker
{- H -}prototracker-modular
{- H -}prototracker-opll
{- H -}removed due to difficulties in packaging the new electron interfacebeast
{R H -} (not really a tracker, but still) was already in nixpkgsRelated stuff which we could maybe package
There are definitely historical, long unmaintained, no longer used trackers in this list that probably belong to a NUR. Still, it'd be nice to have as much as possible in nixpkgs.
Resources
The text was updated successfully, but these errors were encountered: