···4748The package’s homepage. Example: `https://www.gnu.org/software/hello/manual/`
4950-### `repository` {#var-meta-repository}
51-52-A webpage where the package's source code can be viewed. `https` links are preferred if available. Automatically set to a default value if the package uses a `fetchFrom*` fetcher for its `src`. Example: `https://github.com/forthy42/gforth`
53-54### `downloadPage` {#var-meta-downloadPage}
5556The page where a link to the current version can be found. Example: `https://ftp.gnu.org/gnu/hello/`
···4748The package’s homepage. Example: `https://www.gnu.org/software/hello/manual/`
49000050### `downloadPage` {#var-meta-downloadPage}
5152The page where a link to the current version can be found. Example: `https://ftp.gnu.org/gnu/hello/`
+2
nixos/doc/manual/release-notes/rl-2405.section.md
···143144- [Mealie](https://nightly.mealie.io/), a self-hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in NuxtJS for a pleasant user experience for the whole family. Available as [services.mealie](#opt-services.mealie.enable)
14500146## Backward Incompatibilities {#sec-release-24.05-incompatibilities}
147148<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
···143144- [Mealie](https://nightly.mealie.io/), a self-hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in NuxtJS for a pleasant user experience for the whole family. Available as [services.mealie](#opt-services.mealie.enable)
145146+- [Uni-Sync](https://github.com/EightB1ts/uni-sync), a synchronization tool for Lian Li Uni Controllers. Available as [hardware.uni-sync](#opt-hardware.uni-sync.enable)
147+148## Backward Incompatibilities {#sec-release-24.05-incompatibilities}
149150<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
···1+{ stdenv
2+, lib
3+, buildDotnetModule
4+, callPackage
5+, fetchFromGitHub
6, ffmpeg
7+, glfw
8+, libogg
9+, libvorbis
10, makeWrapper
11, openal
12+, portaudio
13+, rtmidi
14}:
1516+let
17+ csprojName = if stdenv.hostPlatform.isLinux then
18+ "FamiStudio.Linux"
19+ else if stdenv.hostPlatform.isDarwin then
20+ "FamiStudio.Mac"
21+ else throw "Don't know how to build FamiStudio for ${stdenv.hostPlatform.system}";
22+in
23+buildDotnetModule rec {
24 pname = "famistudio";
25 version = "4.1.3";
2627+ src = fetchFromGitHub {
28+ owner = "BleuBleu";
29+ repo = "FamiStudio";
30+ rev = "refs/tags/${version}";
31+ hash = "sha256-bryxhminkrTVe5qhGeMStZp3NTHBREXrsUlyQkfPkao=";
32 };
3334+ postPatch = let
35+ libname = library: "${library}${stdenv.hostPlatform.extensions.sharedLibrary}";
36+ buildNativeWrapper = args: callPackage ./build-native-wrapper.nix (args // {
37+ inherit version src;
38+ sourceRoot = "${src.name}/ThirdParty/${args.depname}";
39+ });
40+ nativeWrapperToReplaceFormat = args: let
41+ libPrefix = lib.optionalString stdenv.hostPlatform.isLinux "lib";
42+ in {
43+ package = buildNativeWrapper args;
44+ expectedName = "${libPrefix}${args.depname}";
45+ ourName = "${libPrefix}${args.depname}";
46+ };
47+ librariesToReplace = [
48+ # Unmodified native libraries that we can fully substitute
49+ { package = glfw; expectedName = "libglfw"; ourName = "libglfw"; }
50+ { package = rtmidi; expectedName = "librtmidi"; ourName = "librtmidi"; }
51+ ] ++ lib.optionals stdenv.hostPlatform.isLinux [
52+ { package = openal; expectedName = "libopenal32"; ourName = "libopenal"; }
53+ ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
54+ { package = portaudio; expectedName = "libportaudio.2"; ourName = "libportaudio.2"; }
55+ ] ++ [
56+ # Native libraries, with extra code for the C# wrapping
57+ (nativeWrapperToReplaceFormat { depname = "GifDec"; })
58+ (nativeWrapperToReplaceFormat { depname = "NesSndEmu"; })
59+ (nativeWrapperToReplaceFormat { depname = "NotSoFatso"; extraPostPatch = ''
60+ # C++17 does not allow register storage class specifier
61+ substituteInPlace build.sh \
62+ --replace-fail "$CXX" "$CXX -std=c++14"
63+ ''; })
64+ (nativeWrapperToReplaceFormat { depname = "ShineMp3"; })
65+ (nativeWrapperToReplaceFormat { depname = "Stb"; })
66+ (nativeWrapperToReplaceFormat { depname = "Vorbis"; buildInputs = [ libogg libvorbis ]; })
67+ ];
68+ libraryReplaceArgs = lib.strings.concatMapStringsSep " "
69+ (library: "--replace-fail '${libname library.expectedName}' '${lib.getLib library.package}/lib/${libname library.ourName}'")
70+ librariesToReplace;
71+ in ''
72+ # Don't use any prebuilt libraries
73+ rm FamiStudio/*.{dll,dylib,so*}
7475+ # Replace copying of vendored prebuilt native libraries with copying of our native libraries
76+ substituteInPlace ${projectFile} ${libraryReplaceArgs}
00007778+ # Un-hardcode target platform if set
79+ sed -i -e '/PlatformTarget/d' ${projectFile}
8081+ # Don't require a special name to be preserved, our OpenAL isn't 32-bit
82+ substituteInPlace FamiStudio/Source/AudioStreams/OpenALStream.cs \
83+ --replace-fail 'libopenal32' 'libopenal'
84+ '';
8586+ projectFile = "FamiStudio/${csprojName}.csproj";
87+ nugetDeps = ./deps.nix;
8889+ executables = [ "FamiStudio" ];
0009091+ postInstall = ''
92+ mkdir -p $out/share/famistudio
93+ for datdir in Setup/Demo\ {Instruments,Songs}; do
94+ cp -R "$datdir" $out/share/famistudio/
95+ done
96+ '';
9798+ postFixup = ''
99+ # FFMpeg looked up from PATH
100+ wrapProgram $out/bin/FamiStudio \
101+ --prefix PATH : ${lib.makeBinPath [ ffmpeg ]}
102 '';
103104+ passthru.updateScript = ./update.sh;
105+106 meta = with lib; {
107 homepage = "https://famistudio.org/";
108 description = "NES Music Editor";
···111 or Famicom. It is targeted at both chiptune artists and NES homebrewers.
112 '';
113 license = licenses.mit;
00114 maintainers = with maintainers; [ OPNA2608 ];
115+ platforms = platforms.unix;
116+ mainProgram = "FamiStudio";
117 };
118}
+5
pkgs/applications/audio/famistudio/deps.nix
···00000
···1+# This file was automatically generated by passthru.fetch-deps.
2+# Please dont edit it manually, your changes might get overwritten!
3+4+{ fetchNuGet }: [
5+]
···1+# shellcheck shell=bash
2+# Run addDriverRunpath on all dynamically linked, ELF files
3+echo "Sourcing auto-add-driver-runpath-hook"
4+5+if [ -n "${dontUseAutoAddOpenGLRunpath-}" ]; then
6+ echo "dontUseAutoAddOpenGLRunpath has been deprecated, please use dontUseAutoAddDriverRunpath instead"
7+fi
8+9+# Respect old toggle value to allow for people to gracefully transition
10+# See: https://github.com/NixOS/nixpkgs/issues/141803 for transition roadmap
11+if [ -z "${dontUseAutoAddDriverRunpath-}" -a -z "${dontUseAutoAddOpenGLRunpath-}" ]; then
12+ echo "Using autoAddDriverRunpath"
13+ postFixupHooks+=("autoFixElfFiles addDriverRunpath")
14+fi
···1+# shellcheck shell=bash
2+# List all dynamically linked ELF files in the outputs and apply a generic fix
3+# action provided as a parameter (currently used to add the CUDA or the
4+# cuda_compat driver to the runpath of binaries)
5+echo "Sourcing fix-elf-files.sh"
6+7+# Returns the exit code of patchelf --print-rpath.
8+# A return code of 0 (success) means the ELF file has a dynamic section, while
9+# a non-zero return code means the ELF file is statically linked (or is not an
10+# ELF file).
11+elfHasDynamicSection() {
12+ local libPath
13+14+ if [[ $# -eq 0 ]]; then
15+ echo "elfHasDynamicSection: no library path provided" >&2
16+ exit 1
17+ elif [[ $# -gt 1 ]]; then
18+ echo "elfHasDynamicSection: too many arguments" >&2
19+ exit 1
20+ elif [[ "$1" == "" ]]; then
21+ echo "elfHasDynamicSection: empty library path" >&2
22+ exit 1
23+ else
24+ libPath="$1"
25+ shift 1
26+ fi
27+28+ patchelf --print-rpath "$libPath" >& /dev/null
29+ return $?
30+}
31+32+# Run a fix action on all dynamically linked ELF files in the outputs.
33+autoFixElfFiles() {
34+ local fixAction
35+ local outputPaths
36+37+ if [[ $# -eq 0 ]]; then
38+ echo "autoFixElfFiles: no fix action provided" >&2
39+ exit 1
40+ elif [[ $# -gt 1 ]]; then
41+ echo "autoFixElfFiles: too many arguments" >&2
42+ exit 1
43+ elif [[ "$1" == "" ]]; then
44+ echo "autoFixElfFiles: empty fix action" >&2
45+ exit 1
46+ else
47+ fixAction="$1"
48+ fi
49+50+ mapfile -t outputPaths < <(for o in $(getAllOutputNames); do echo "${!o}"; done)
51+52+ find "${outputPaths[@]}" -type f -print0 | while IFS= read -rd "" f; do
53+ if ! isELF "$f"; then
54+ continue
55+ elif elfHasDynamicSection "$f"; then
56+ # patchelf returns an error on statically linked ELF files, and in
57+ # practice fixing actions all involve patchelf
58+ echo "autoFixElfFiles: using $fixAction to fix $f" >&2
59+ $fixAction "$f"
60+ elif (( "${NIX_DEBUG:-0}" >= 1 )); then
61+ echo "autoFixElfFiles: skipping a statically-linked ELF file $f"
62+ fi
63+ done
64+}
···1+# bash parameter completion for the dotnet CLI
2+3+function _dotnet_bash_complete()
4+{
5+ local cur="${COMP_WORDS[COMP_CWORD]}" IFS=$'\n' # On Windows you may need to use use IFS=$'\r\n'
6+ local candidates
7+8+ read -d '' -ra candidates < <(dotnet complete --position "${COMP_POINT}" "${COMP_LINE}" 2>/dev/null)
9+10+ read -d '' -ra COMPREPLY < <(compgen -W "${candidates[*]:-}" -- "$cur")
11+}
12+13+complete -f -F _dotnet_bash_complete dotnet
···1+# zsh parameter completion for the dotnet CLI
2+3+_dotnet_zsh_complete()
4+{
5+ local completions=("$(dotnet complete "$words")")
6+7+ # If the completion list is empty, just continue with filename selection
8+ if [ -z "$completions" ]
9+ then
10+ _arguments '*::arguments: _normal'
11+ return
12+ fi
13+14+ # This is not a variable assignment, don't remove spaces!
15+ _values = "${(ps:\n:)completions}"
16+}
17+18+compdef _dotnet_zsh_complete dotnet
···71 if version == "8.11.0+0.11.1" then version
72 else builtins.replaceStrings [ "+" ] [ "." ] version
73 }.tbz";
74- # abort/syntax error will fail package set eval, but throw is "fine"
75- sha256 = release."${version}".sha256 or (throw "Unknown version '${version}'");
76 };
7778 patches =
···71 if version == "8.11.0+0.11.1" then version
72 else builtins.replaceStrings [ "+" ] [ "." ] version
73 }.tbz";
74+ sha256 = release."${version}".sha256;
075 };
7677 patches =
+4
pkgs/development/cuda-modules/aliases.nix
···0000
···1+# Packges which have been deprecated or removed from cudaPackages
2+final: prev: {
3+4+}
+22-33
pkgs/development/libraries/libpulsar/default.nix
···1{ lib
2-, clang-tools
3-, llvmPackages
4-, boost179
5-, protobuf
6-, python3Support ? false
7-, python3
8, log4cxxSupport ? false
9, log4cxx
10, snappySupport ? false
···17, gtestSupport ? false
18, cmake
19, curl
20-, fetchurl
021, jsoncpp
22, openssl
23, pkg-config
···37 */
38 enableCmakeFeature = p: if (p == null || p == false) then "OFF" else "ON";
3940- # Not really sure why I need to do this.. If I call clang-tools without the override it defaults to a different version and fails
41- clangTools = clang-tools.override { inherit stdenv llvmPackages; };
42- # If boost has python enabled, then boost-python package will be installed which is used by libpulsars python wrapper
43- boost = if python3Support then boost179.override { inherit stdenv; enablePython = python3Support; python = python3; } else boost179;
44- defaultOptionals = [ boost protobuf ]
45- ++ lib.optional python3Support python3
46 ++ lib.optional snappySupport snappy.dev
47 ++ lib.optional zlibSupport zlib
48 ++ lib.optional zstdSupport zstd
49- ++ lib.optional log4cxxSupport log4cxx;
005051in
52-stdenv.mkDerivation rec {
53 pname = "libpulsar";
54- version = "2.10.2";
5556- src = fetchurl {
57- hash = "sha256-IONnsSDbnX2qz+Xya0taHYSViTOiRI36AfcxmY3dNpo=";
58- url = "mirror://apache/pulsar/pulsar-${version}/apache-pulsar-${version}-src.tar.gz";
0059 };
6061- sourceRoot = "apache-pulsar-${version}-src/pulsar-client-cpp";
62-63- # clang-tools needed for clang-format
64- nativeBuildInputs = [ cmake pkg-config clangTools ]
65 ++ defaultOptionals
66 ++ lib.optional gtestSupport gtest.dev;
6768 buildInputs = [ jsoncpp openssl curl ]
69 ++ defaultOptionals;
7071- # Needed for GCC on Linux
72- env.NIX_CFLAGS_COMPILE = toString [ "-Wno-error=return-type" ];
73-74 cmakeFlags = [
75 "-DBUILD_TESTS=${enableCmakeFeature gtestSupport}"
76- "-DBUILD_PYTHON_WRAPPER=${enableCmakeFeature python3Support}"
77 "-DUSE_LOG4CXX=${enableCmakeFeature log4cxxSupport}"
78- "-DClangTools_PATH=${clangTools}/bin"
79 ];
8081- enableParallelBuilding = true;
82 doInstallCheck = true;
83 installCheckPhase = ''
84 echo ${lib.escapeShellArg ''
···92 '';
9394 meta = with lib; {
95- homepage = "https://pulsar.apache.org/docs/en/client-libraries-cpp";
96 description = "Apache Pulsar C++ library";
97-98 platforms = platforms.all;
99 license = licenses.asl20;
100- maintainers = [ maintainers.corbanr ];
101 };
102-}
···1-{ stdenv, lib, fetchurl, undmg }:
23stdenv.mkDerivation (finalAttrs: {
4 version = "3.4.1";
···1213 sourceRoot = "GrandPerspective.app";
14 buildInputs = [ undmg ];
00015 installPhase = ''
16- mkdir -p "$out/Applications/GrandPerspective.app";
17- cp -R . "$out/Applications/GrandPerspective.app";
018 '';
1920 meta = with lib; {
···25 space. It uses a so called tree map for visualisation. Each file is shown as a rectangle with an area proportional to
26 the file's size. Files in the same folder appear together, but their placement is otherwise arbitrary.
27 '';
028 homepage = "https://grandperspectiv.sourceforge.net";
29 license = licenses.gpl2Only;
30 sourceProvenance = with sourceTypes; [ binaryNativeCode ];
···1+{ stdenv, lib, fetchurl, undmg, makeWrapper }:
23stdenv.mkDerivation (finalAttrs: {
4 version = "3.4.1";
···1213 sourceRoot = "GrandPerspective.app";
14 buildInputs = [ undmg ];
15+ nativeBuildInputs = [ makeWrapper ];
16+ # Create a trampoline script in $out/bin/ because a symlink doesn’t work for
17+ # this app.
18 installPhase = ''
19+ mkdir -p "$out/Applications/GrandPerspective.app" "$out/bin"
20+ cp -R . "$out/Applications/GrandPerspective.app"
21+ makeWrapper "$out/Applications/GrandPerspective.app/Contents/MacOS/GrandPerspective" "$out/bin/grandperspective"
22 '';
2324 meta = with lib; {
···29 space. It uses a so called tree map for visualisation. Each file is shown as a rectangle with an area proportional to
30 the file's size. Files in the same folder appear together, but their placement is otherwise arbitrary.
31 '';
32+ mainProgram = "grandperspective";
33 homepage = "https://grandperspectiv.sourceforge.net";
34 license = licenses.gpl2Only;
35 sourceProvenance = with sourceTypes; [ binaryNativeCode ];
···10 concatMapStrings
11 concatMapStringsSep
12 concatStrings
13- filter
14 findFirst
15- head
16 isDerivation
17 length
18 concatMap
···306 str
307 ];
308 downloadPage = str;
309- repository = union [
310- (listOf str)
311- str
312- ];
313 changelog = union [
314 (listOf str)
315 str
···446 # -----
447 else { valid = "yes"; });
448449- getRepository = let
450- getSrcs = attrs:
451- if attrs ? src
452- then
453- [ attrs.src ]
454- else
455- filter (src: src ? meta.homepage) attrs.srcs;
456- getHomePages = map (src: src.meta.homepage);
457- unlist = list:
458- if length list == 1 then head list
459- else list;
460- in attrs: unlist (getHomePages (getSrcs attrs));
461462 # The meta attribute is passed in the resulting attribute set,
463 # but it's not part of the actual derivation, i.e., it's not
···471 outputs = attrs.outputs or [ "out" ];
472 hasOutput = out: builtins.elem out outputs;
473 in
474- optionalAttrs (attrs ? src.meta.homepage || attrs ? srcs && isList attrs.srcs && any (src: src ? meta.homepage) attrs.srcs) {
475- # should point to an http-browsable source tree, if available.
476- # fetchers like fetchFromGitHub set it automatically.
477- # this could be handled a lot easier if we nulled it instead
478- # of having it be undefined, but that wouldn't match the
479- # other attributes.
480- repository = getRepository attrs;
481- } // {
482 # `name` derivation attribute includes cross-compilation cruft,
483 # is under assert, and is sanitized.
484 # Let's have a clean always accessible version here.
···10 concatMapStrings
11 concatMapStringsSep
12 concatStrings
013 findFirst
014 isDerivation
15 length
16 concatMap
···304 str
305 ];
306 downloadPage = str;
0000307 changelog = union [
308 (listOf str)
309 str
···440 # -----
441 else { valid = "yes"; });
442000000000000443444 # The meta attribute is passed in the resulting attribute set,
445 # but it's not part of the actual derivation, i.e., it's not
···453 outputs = attrs.outputs or [ "out" ];
454 hasOutput = out: builtins.elem out outputs;
455 in
456+ {
0000000457 # `name` derivation attribute includes cross-compilation cruft,
458 # is under assert, and is sanitized.
459 # Let's have a clean always accessible version here.