Merge master into staging-next

This commit is contained in:
nixpkgs-ci[bot] 2026-06-29 18:42:03 +00:00 committed by GitHub
commit 651b30f989
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
75 changed files with 1701 additions and 599 deletions

View file

@ -24,6 +24,8 @@
- [Freescout](https://freescout.net/), a free, open source Helpdesk and shared mailbox. Available as [services.freescout](#opt-services.freescout.enable).
- [Koito](https://koito.io/), a modern, themeable scrobbler that you can use with any program that scrobbles to a custom ListenBrainz URL. Available as [services.koito](#opt-services.koito.enable).
- [FlapAlerted](https://github.com/Kioubit/FlapAlerted), detects BGP flapping events and provides statistics based on BGP update messages. Available as [services.flap-alerted](#opt-services.flap-alerted.enable).
- [Unpackerr](https://unpackerr.zip), extracts downloads for Radarr, Sonarr, Lidarr, Readarr, and/or a Watch folder. Available as [services.unpackerr](#opt-services.unpackerr.enable).

View file

@ -1707,6 +1707,7 @@
./services/web-apps/kavita.nix
./services/web-apps/keycloak.nix
./services/web-apps/kimai.nix
./services/web-apps/koito.nix
./services/web-apps/komga.nix
./services/web-apps/lanraragi.nix
./services/web-apps/lasuite-docs.nix

View file

@ -107,13 +107,17 @@ in
];
};
services.avahi = lib.mkIf (lib.elem "airplay_receiver" cfg.providers) {
enable = true;
openFirewall = lib.mkIf cfg.openFirewall true;
publish = {
services = {
avahi = lib.mkIf (lib.elem "airplay_receiver" cfg.providers) {
enable = true;
userServices = true;
openFirewall = lib.mkIf cfg.openFirewall true;
publish = {
enable = true;
userServices = true;
};
};
music-assistant.providers = cfg.package.providersBuiltins;
};
systemd.services.music-assistant = {
@ -167,8 +171,12 @@ in
DevicePolicy = "closed";
LockPersonality = true;
# breaks pyopenssl's cffi calls, used in remote access feature
# not compatible with llvmlite which is required by numba -> librosa
MemoryDenyWriteExecute = false;
ProcSubset = "pid";
# required for torch to properly detect the supported engines
# allows Music-Assistant to warn, if x86_64-v2 cpu features are missing
BindReadOnlyPaths = [ "/proc/cpuinfo" ];
ProcSubset = "all";
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
@ -190,7 +198,7 @@ in
SystemCallArchitectures = "native";
SystemCallFilter = [
"@system-service"
"~@privileged @resources"
"~@privileged"
"mbind"
]
++ lib.optionals useYTMusic [

View file

@ -0,0 +1,140 @@
{
lib,
config,
pkgs,
...
}:
let
cfg = config.services.koito;
inherit (lib)
getExe
mkEnableOption
mkIf
mkOption
mkPackageOption
types
;
in
{
options.services.koito = {
enable = mkEnableOption "koito";
package = mkPackageOption pkgs "koito" { };
openFirewall = mkOption {
type = types.bool;
default = false;
description = "Open the appropriate ports in the firewall for Koito.";
};
environment = mkOption {
type = types.submodule {
freeformType = types.attrsOf types.str;
options = {
KOITO_BIND_ADDR = mkOption {
type = types.str;
default = "127.0.0.1";
example = "0.0.0.0";
description = "The IP address to bind the Koito server to.";
};
KOITO_LISTEN_PORT = mkOption {
type = types.port;
default = 4110;
description = "TCP port for the Koito server.";
};
KOITO_CONFIG_DIR = mkOption {
type = types.path;
default = "/var/lib/koito";
description = "Directory for Koito import folders and image caches.";
};
};
};
default = { };
example = {
KOITO_DEFAULT_THEME = "black";
KOITO_LOGIN_GATE = "true";
};
description = ''
Environment variables to pass to the Koito service.
See <https://koito.io/reference/configuration/> for available options.
'';
};
environmentFile = mkOption {
type = types.nullOr types.path;
example = "/run/secrets/koito";
default = null;
description = ''
Path of a file with extra environment variables to be loaded from disk.
This file is not added to the nix store, so it can be used to pass secrets to Koito.
See <https://koito.io/reference/configuration/> for available options.
'';
};
};
config = mkIf cfg.enable {
systemd.services.koito = {
description = "Koito - modern scrobbler";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Environment = lib.mapAttrsToList (k: v: "${k}=${if builtins.isInt v then toString v else v}") (
lib.filterAttrs (_: v: v != null) cfg.environment
);
DynamicUser = true;
ExecStart = getExe cfg.package;
StateDirectory = "koito";
EnvironmentFile = cfg.environmentFile;
ProtectSystem = "strict";
ProtectHome = true;
PrivateTmp = true;
PrivateDevices = true;
PrivateMounts = true;
ProtectControlGroups = true;
ProtectKernelTunables = true;
RestrictSUIDSGID = true;
RemoveIPC = true;
UMask = "0077";
CapabilityBoundingSet = [ "" ];
NoNewPrivileges = true;
ProtectKernelModules = true;
ProtectKernelLogs = true;
ProtectClock = true;
SystemCallArchitectures = "native";
SystemCallFilter = [
"@system-service"
"~@privileged"
"~@resources"
];
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
"AF_UNIX"
];
PrivateUsers = true;
LockPersonality = true;
ProtectHostname = true;
RestrictRealtime = true;
RestrictNamespaces = true;
ProtectProc = "invisible";
ProcSubset = "pid";
DeviceAllow = [ "" ];
};
};
networking.firewall = lib.mkIf cfg.openFirewall {
allowedTCPPorts = [ cfg.environment.KOITO_LISTEN_PORT ];
};
};
meta = {
maintainers = with lib.maintainers; [ iv-nn ];
};
}

View file

@ -890,6 +890,7 @@ in
kmonad = runTest ./kmonad.nix;
kmscon = runTest ./kmscon.nix;
knot = runTest ./knot.nix;
koito = runTest ./web-apps/koito.nix;
komga = runTest ./komga.nix;
komodo-periphery = runTest ./komodo-periphery.nix;
krb5 = discoverTests (import ./krb5);

View file

@ -0,0 +1,20 @@
{ ... }:
{
name = "koito";
nodes.machine = {
services.koito.enable = true;
};
testScript =
{ nodes, ... }:
let
port = toString nodes.machine.services.koito.environment.KOITO_LISTEN_PORT;
in
''
machine.wait_for_unit('koito.service')
machine.wait_for_open_port(${port})
machine.succeed('curl --fail http://localhost:${port}')
'';
}

File diff suppressed because it is too large Load diff

View file

@ -1551,6 +1551,18 @@ assertNoAdditions {
];
};
fyler-nvim = super.fyler-nvim.overrideAttrs {
nvimSkipModules = [
# Requires setup
"fyler.extensions.trash"
"fyler.finder"
"fyler.integrations.icon"
"fyler.integrations.window_picker"
"fyler.schemes.file"
"fyler.state"
];
};
fzf-checkout-vim = super.fzf-checkout-vim.overrideAttrs {
# The plugin has a makefile which tries to run tests in a docker container.
# This prevents it.

View file

@ -51,10 +51,10 @@ python3.pkgs.buildPythonApplication (finalAttrs: {
icalendar
jsonpath-ng
lxml
mpd2
psutil
pygobject3
python-dateutil
python-mpd2
requests
requests-file
tzdata

View file

@ -10,10 +10,10 @@
}:
let
pname = "beeper";
version = "4.2.936";
version = "4.2.948";
src = fetchurl {
url = "https://beeper-desktop.download.beeper.com/builds/Beeper-${version}-x86_64.AppImage";
hash = "sha256-/9IHHE4qeygvPHFRz3EoejkQml6WdebdeUR0Y6afP5I=";
hash = "sha256-MvfQSCV8b5aOeOSlTnRlOupzg+wmHhG0hGWznwCx0Yc=";
};
appimageContents = appimageTools.extract {
inherit pname version src;

View file

@ -25,16 +25,16 @@
stdenv.mkDerivation {
pname = "cliairplay";
# see the beginning of configure.ac for the upstream version number
version = "1.1-unstable-2026-03-16";
version = "1.5-unstable-2026-05-03";
src = fetchFromGitHub {
owner = "music-assistant";
repo = "cliairplay";
# we try to closely match the commit used in the last music-assistant release from
# https://github.com/music-assistant/server/tree/stable/music_assistant/providers/airplay/bin
rev = "991c65acc2afa17ffe32e279dbc585b0b7f530f8";
rev = "6aeceb49e4e37d044f09be9369b082fc26bcfa19";
fetchSubmodules = true;
hash = "sha256-m1O4l6gFEGNAyskYcRHcA15cubZnNgkaYjdVThRRX7w=";
hash = "sha256-Z2LzRhtQpuXPK6KibnxCqP0V6CulzkwNVHX1V7AFnDA=";
};
nativeBuildInputs = [

View file

@ -10,16 +10,16 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "cook-cli";
version = "0.32.0";
version = "0.32.1";
src = fetchFromGitHub {
owner = "cooklang";
repo = "cookcli";
rev = "v${finalAttrs.version}";
hash = "sha256-Lft44tBo8l+EhqEHuq6mKBVTjgpewd34SPtloVwkmGc=";
hash = "sha256-r6h7IHYvy3/3OS+6aueHj9ONXSYJ1K7gq7pcNTqN8wY=";
};
cargoHash = "sha256-pSvf3xW5UJWc6Z39w2FI5yoZS8KJpQj04LcTrNFrtGk=";
cargoHash = "sha256-agUqBXhLsjS1nVRwzuiUZomhcYdiXBLU1xX9xh8zN+c=";
# Build without the self-updating feature
buildNoDefaultFeatures = true;

View file

@ -9,14 +9,14 @@
}:
buildGoModule (finalAttrs: {
version = "3.7.2";
version = "3.7.3";
pname = "grafana-loki";
src = fetchFromGitHub {
owner = "grafana";
repo = "loki";
rev = "v${finalAttrs.version}";
hash = "sha256-2VM5/SMgjxHraP+7H+AmDor9g4r+xglhqd/cVL7mCgQ=";
hash = "sha256-2dqwnM2+9+P/ZIiz5Z9JPN9WicHLRzq9xn6jG1OBqLs=";
};
vendorHash = null;

View file

@ -0,0 +1,44 @@
{
lib,
python3Packages,
fetchFromGitHub,
nix-update-script,
}:
python3Packages.buildPythonApplication {
pname = "graphlan";
version = "0-unstable-2024-08-07";
pyproject = true;
src = fetchFromGitHub {
owner = "biobakery";
repo = "graphlan";
rev = "dc97f4feb0bb0bf3fa210e2699a86c5e476a647e";
hash = "sha256-sBVlBu6RSs7dXQbxJrIQHWaDNliurY9UguzNeKj40gY=";
};
patchPhase = ''
sed -i 's|biopython==|biopython>=|' setup.py
'';
__structuredAttrs = true;
strictDeps = true;
build-system = with python3Packages; [ setuptools ];
dependencies = with python3Packages; [
biopython
matplotlib
scipy
];
passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; };
meta = {
description = "Quality control tool for metagenomic and metatranscriptomic sequencing data";
homepage = "https://github.com/biobakery/graphlan";
changelog = "https://github.com/biobakery/graphlan/releases";
license = lib.licenses.mit;
platforms = lib.platforms.all;
maintainers = with lib.maintainers; [ pandapip1 ];
mainProgram = "graphlan.py";
};
}

View file

@ -60,7 +60,7 @@ python313Packages.buildPythonApplication (finalAttrs: {
pygobject3
tidalapi
requests
mpd2
python-mpd2
pypresence
]);

View file

@ -0,0 +1,47 @@
{
src,
version,
stdenv,
yarn-berry_4,
nodejs,
gzip,
}:
let
yarn = yarn-berry_4;
in
stdenv.mkDerivation (finalAttrs: {
pname = "koito-frontend";
inherit src version;
sourceRoot = "${finalAttrs.src.name}/client";
missingHashes = ./missing-hashes.json;
offlineCache = yarn.fetchYarnBerryDeps {
inherit (finalAttrs) src sourceRoot missingHashes;
hash = "sha256-VIlWld21GScJ/2UUkKQISM9jyU9wCVwwDNKkge+K044=";
};
nativeBuildInputs = [
nodejs
yarn.yarnBerryConfigHook
yarn
gzip
];
buildPhase = ''
runHook preBuild
export VITE_KOITO_VERSION=${version}
yarn run build
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/client
cp -r build $out/client
find $out/client/build -type f \( -name "*.js" -o -name "*.css" -o -name "*.html" -o -name "*.svg" \) -exec gzip -k -9 {} \;
runHook postInstall
'';
})

View file

@ -0,0 +1,117 @@
{
"@esbuild/aix-ppc64@npm:0.27.7": "ff8c15b43770c8df995a7274efdb1df5553a3264bff0a42a66bc96a07fc0733a6825b4a339972d2d49fc9be9bec4ac2f4f3f072730fdedc879ce4f9cbf0b242d",
"@esbuild/aix-ppc64@npm:0.28.0": "bedc005d10511c3ee50a02edbb380d3134d34f038cb2638257cb9344aa399276e672c44f7e7eb395a96ccc843e0a5903eb0349f22be30af49ae338ed222d5662",
"@esbuild/android-arm64@npm:0.27.7": "c340fffda73dfcdf3513f900403d582cbcd8a5fc4cf7abd71aa0d4945391b4c0289e4389f51616cebaac63ec652457941e3e2eefe408230521227ae128c35c9f",
"@esbuild/android-arm64@npm:0.28.0": "76fa5b984e742b96e427749530e4e973b8da60950163c2dbd766c75ed4f616b7f06d08f01d5b6bd06b6a25cf59b27c3519a4ba343792003b5fcadf463b3d6575",
"@esbuild/android-arm@npm:0.27.7": "4abbbcb6b0f38d345b530148ebf883d3b1b7321a5c31f9c492bf645813e85afb8984c9d75295d779dbe602807b85995d9ff47ab8e8b22fa1bc67b1cbab9c45db",
"@esbuild/android-arm@npm:0.28.0": "b1e649f838c94ebac74e1c10561f010608f7226c0e444b4e178546cf6295bd46d691c52542bbe01598004e638bf9d75ed688b85b6ae31df55f2e2194482733ff",
"@esbuild/android-x64@npm:0.27.7": "719956b9b7eb922a2bf92cc3df93f7f476ae37ad2976bc2185c97b93d63bd1f17b031aec41e9d9a7c3d75c83d6df8daa68191bdfa0d02f4dc39b6fafa6999fd7",
"@esbuild/android-x64@npm:0.28.0": "9b611b9099d552e755d7b6b28dc39c26aad759ceb9379761a0bf2dfe6077c2437aea784152aefc711166b55c4159f03e6e2f39c1c71ffb923c5ef75c93f7282b",
"@esbuild/darwin-arm64@npm:0.27.7": "aefb157b95bb749ebf0cd70dd39d20c00825565a0fcc248b775b4cce6252adf694bf3e4894b25368652252139bfdc0d08b75d1139a78f197ee58ed8972cdb28d",
"@esbuild/darwin-arm64@npm:0.28.0": "09ecf7709c8d86f35624fa9d3475ccb3d1beb9704ddfd71b71adcefc23c3aa8ab95263542bbca52cb0d50f23cf831f468968978969184e1da00dc84cd8c61953",
"@esbuild/darwin-x64@npm:0.27.7": "898b6b02589dccb0a51655c57c407866bdb2ae5202dacce33e7d9b2f35dd117b3245f6393ffd6726373616147c3d12a462830f51da2a5cfd06e0f60cc252373e",
"@esbuild/darwin-x64@npm:0.28.0": "ba5ab146a8542f093bbe752fe85402894da18b304ae1f08eb455a864f124c61e1e03f8ad18c28eb2b9c1bd930c54dc773ad32b7ab4c7d7eb31f7be04451e74f4",
"@esbuild/freebsd-arm64@npm:0.27.7": "aaf8ebcd359f1228f5dd9d90ceca51eaa06d91570b27fa8be9da858ee124e37d45a5fed2aa4849320eb256215acf39b98623cf770ae87f0a0d50323d1acc7fbc",
"@esbuild/freebsd-arm64@npm:0.28.0": "8c05cebfefb0c9f481b52ce8b0290d0e5f6fda17939e27d60d6440c00312a5a10b82ca6e8ddbc19c9a1a2973282c9393958b8ace0512741d76429465d3bdb415",
"@esbuild/freebsd-x64@npm:0.27.7": "cc7fa741cebc7041643f1fbfe45d99ce870b8ea42e9a67f4d1cf2fddeb991623619d00865427b3d6aa63ae7618f10c5635c4d047859eaba8d5c7f317d7138d44",
"@esbuild/freebsd-x64@npm:0.28.0": "da4a620d46b73b610dccfa8c80d110175bb207e0a6bd1bfa96f98d427b3d14bbe54096ccdabaf10fb189a21f6555f7721737106d30ff12933c08ef1aee7adac0",
"@esbuild/linux-arm64@npm:0.27.7": "b1aea26033d1de82966141b350405e1205ea04fa24707084b50992bfc9d0fbf99e0ad83a31ecd8f8cbc01101f3d92f648ce2cc24273c1e8ced573726393f9c68",
"@esbuild/linux-arm64@npm:0.28.0": "589f88f21542ff9822fee3f6130051f19e19ec6714abc48d39795b201585c4f0e8dac42ec10a3e61521a4ad499abad5b3a8a8424d871ff5f464b86ba1bae8a65",
"@esbuild/linux-arm@npm:0.27.7": "0950f67b72af73de69483363f046d6a50fc85f6491adcfeadcb6014bdc8a1731e2575fc58d6c68d6834cd6be45e0b247a23f128162864e7686accda1ada3a9d6",
"@esbuild/linux-arm@npm:0.28.0": "429f4d7b938f2b72884f472bd9288c91899cacb4bf9c61df293dbe9e3c0368cc1700171cf86c3051df9e6ebdc8c1366db6a573995d327f156de63fd28a23e3a7",
"@esbuild/linux-ia32@npm:0.27.7": "6247a3b2658de166c69099208c72ba65d8ddc5ce1575f5e8fd05d4570f3a59bfbd6a5570cfbd890e19a24258edd1b7e91cebe75e2acf182c6087297f26bba29c",
"@esbuild/linux-ia32@npm:0.28.0": "45fcf60da75745f20ec6d98914de1dbb6bd97231a3d9fa1861a47ae43eb7db23780696530d17d68ee55693d189672b763cbdb9d0ad1ee5429ee9c7168a23dce8",
"@esbuild/linux-loong64@npm:0.27.7": "0d7f9b60a46e95d09889365b54ea0e2fd6e471e9ceeef27a0cc6b77616b1abe275456b50eae94bed3322dc6ee17fedebc3258dcc88a5522bd5318f6def0d0642",
"@esbuild/linux-loong64@npm:0.28.0": "d7a5710068e5909661f48c276d82c836b9b6131076e550c83d83e63db3f2538ecd3a3694dcbf8129bb773f7ca580b2fbef38ec15b9028d246cbc0e77a1a5946c",
"@esbuild/linux-mips64el@npm:0.27.7": "f3732fa442590b2219d2ec7de1d5086cd31682831dfc25516f2805326b4bd9f68a9fdbf3cce876ee764bf47765b85fdf22290b6a09f87a29c9d0c2d4af0a83c3",
"@esbuild/linux-mips64el@npm:0.28.0": "1aa72c485a56cf432748b8e0527e86a88deda0574e13d914dbe657dc2878ecc8b441783bd6c1582c0359b5a33d30216c0c94b3c9c17e5ca975fe6aa4b80aaa2c",
"@esbuild/linux-ppc64@npm:0.27.7": "df156f801042116c438c9259451e716533adec6b7d7af5c75cf27feec09ee4d941281049bf979dc0bb7a5b73b955d3974ecac4391a97600a4440a4a003b820e4",
"@esbuild/linux-ppc64@npm:0.28.0": "306bf03b0f6fd738bf74d9dfb23b8937227521b832fd901994600691b1f1fadb698a67a9990713b72ca1114715f82f0df35877281945e81b824ed437bf432742",
"@esbuild/linux-riscv64@npm:0.27.7": "76eccec1c7f047075353ef1f908998a0723f367a39aae39608f7978e5e231ea51ae25fd5258d16345567b94b77e28524cba45bc76afa5eda350adc5bda672142",
"@esbuild/linux-riscv64@npm:0.28.0": "c09c0f0ada23a3e55767586f3a341958c071d0b9adfe5460986e5e69f7397dfe2e37e2896a1c61092cececa929241d37f19b75ed608f5f00d535cd3b24c4ef1f",
"@esbuild/linux-s390x@npm:0.27.7": "788799f3e6e61efe6ec0a4a5e2d413dcfe57b27518d679a3d5f82265672fe53604a348658bc09b958cedaead008b63ef02e700469aed2a725e79361458901808",
"@esbuild/linux-s390x@npm:0.28.0": "40a939574f16362a5c9f1f82c20a8d82686efcf5f77e4b6c7e5c05bdcc596d8ce2ca188e6e7fa4772d4167bd18da630a3a3b3b70aa28308d3a9d1d48ff112feb",
"@esbuild/linux-x64@npm:0.27.7": "77c8cc00c2f647f5a04ca6640711c6e83214a8c619aeb3de52fee36c51709d5f44becaff095ffa2d1d40d53d1a792e80a1702193c155614350cc14de23a48e81",
"@esbuild/linux-x64@npm:0.28.0": "cde673ae0b9945bdc665c68b2df7ebe39d37bcd388c8e607ed4d369e7b6123ecdf3d1feb097ae13403d83c15952cb952d16f96146fa1a52405f09ec0e438d0f6",
"@esbuild/netbsd-arm64@npm:0.27.7": "cffa469f49165446e82f3031d6601e977131fcf619204370b3fad1b2a4a7dbf57d52e26e146cd1550c80af27470fb016d4b519fb74e3e6947a50391f84b87935",
"@esbuild/netbsd-arm64@npm:0.28.0": "c9738a8c3cfb817d9fbb46aa52fa532a0a74dc6d7d4e260e1eb8fd0acf729208932ce7f43e2c2dbf6cb1ca21f5db55f329936f81ae871953ff0e67e42d8eb362",
"@esbuild/netbsd-x64@npm:0.27.7": "123b51f84b61f13ae916c0d7b1fa057181ded0e510f762acca178fe7fb679041a30df4f740db381afe8919d41877630ccef0a16ded46248820da0af4b967c29d",
"@esbuild/netbsd-x64@npm:0.28.0": "c0be9ca72b5c18279e02e63a17a7fef428395f48fc1e0e251622c3cfe8a70b15cfb0bb814d355318917461a4e20d11723b837f6e4d1f1c0ce44e915ff80b3047",
"@esbuild/openbsd-arm64@npm:0.27.7": "cca5a166f47d125703451c4369bd337f08516e17aa69db17ff6822c229fcd9beb9bd29b2856c0f13d9d441178011e8c081879418f376c002f72c6aeab83576ed",
"@esbuild/openbsd-arm64@npm:0.28.0": "fda84f2526cb29d943047f68e725c688e4a89ebcbc224e19ddc3479509783cd254e581b19c8fad1a28e55e193512f37842252f36b06b3df2c005a0dbca0a0d84",
"@esbuild/openbsd-x64@npm:0.27.7": "d9c2ca562e27331124fcddb230f5b204adfadfd87b746d8369c1c3a72fc6f6e7375684cded7ffadab6f785228d80c4a4ff2c6f593f7ce354f6d57f5b4e43c3c3",
"@esbuild/openbsd-x64@npm:0.28.0": "7a67881986611c0b851c246c2ccdb445ecc5e587c70efae0165cd963d149ebfec3a7b6820338cf38dc70cee95fbd17e80dcb636c7f1de113c9a85dfe867a0d97",
"@esbuild/openharmony-arm64@npm:0.27.7": "6566b08b37e3faee6577ae43253f163ce5af22e872e30a93c08fc41e5b3525d742366b1049ba87de16c75c77abd6fce002b49b52a5a1898efb8be5eb18d8dcf3",
"@esbuild/openharmony-arm64@npm:0.28.0": "8cd175332efcedc6b69a980410426cbb7c76ed264f28cbf16cc807938e29f39c03353901179a88655377c39db1860d9df5c76294f2624a2db75b387334e9baa3",
"@esbuild/sunos-x64@npm:0.27.7": "589389cd4be3de5c24bb5820e4fd1f15f665b3be6b0ab6167f435776bb367e32209d6bf477bdba481195fbe515e1999c1e73adf321a8fb8400fe72052a4aef48",
"@esbuild/sunos-x64@npm:0.28.0": "99820c945c05651182afe4ec5a1bad80790775acefa403f25ad48ed9638efc573f3bf6fabdd273556854c609990a8a0c8fda7b140edabe3322d6a3ea77734d9c",
"@esbuild/win32-arm64@npm:0.27.7": "519a2c68186c2cd9f548d89f00f5aa3b5f2fa481fd03908d7b1c922de03bf20236d9fc21a3b4e83915d3611471843b41536c97d74273fb3369b2525767c278be",
"@esbuild/win32-arm64@npm:0.28.0": "84314f636841e4568e4960e4ee50e66c5d4d74fc274d256f3c903904186014bed197316c8bedb3c38f9855ca8ad9c4ecc1c6e64df4c40ea6cd5f4cb7739ab66c",
"@esbuild/win32-ia32@npm:0.27.7": "76470f36efe5290ac694e675a799a46a364aeba9a734cf10869769094b8b9022adc51fdea5869c45a8fdbfcb60ef8d787ae652c264468cdc0f4afb3869157b9c",
"@esbuild/win32-ia32@npm:0.28.0": "41296dae0b5e74ca689460cd510cb88df7b92d0c027130c373138e09847dd48eb685c2c825f36337a7bff7c6eceba2cb75b7f4f76d78e140504159a59e2feb89",
"@esbuild/win32-x64@npm:0.27.7": "b4df3d0c4024f0daf0891075822718dc31d35aeb91c18c4e8ee750be69f35ebd840d184006746dd88eca0e44574e438d5ab81c614605cc707fb79cf45cf76cba",
"@esbuild/win32-x64@npm:0.28.0": "f2d53b57cb338ddf0bbfb5eb64dc95bd0b686817eee8ab2307085c04f18e1d9d5b27e1b74f327cd46a8f246e3df9fc6ee9158ab9977255b7d4a511d438e411de",
"@rolldown/binding-android-arm64@npm:1.0.0-rc.18": "bd5c11810a9a4e450277fc59f6b5ce2d2bfe97e663714e922bfae65d12b2bed41f097f4cef1001bf8c3ed42e639cc1be9c6fa4708f01e472b7bf4f67c81a6b6e",
"@rolldown/binding-darwin-arm64@npm:1.0.0-rc.18": "fb96ff29b508ad304fece44de5be3ece019093d097d48e3ced9977baa10d6e7601e0684774c46e7c82cba6204c10afe307626a77990f12bf693ba5dce27b81f4",
"@rolldown/binding-darwin-x64@npm:1.0.0-rc.18": "e6392296c0c7c10fcdf4bc91937d4de3c53522215059347d49259e14dcf31f6955f596a734aee7eb3e9c68e43af9ac9b7f0e806188fbbda8b1be9155ebc15880",
"@rolldown/binding-freebsd-x64@npm:1.0.0-rc.18": "23ff9940c19013961c5fe3e6ae1534d4c9663aca7d7c7904e996001cd7ceb7abd7e5181a232cf8989d5b48bfa0c686c2e278f0f65b8d7a735783bdc4f5c6628f",
"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.18": "ce1d652b54747ceee65911b751d9a726da30c2fd45398898db2600c0353715ea952f9b4769b76fa271a1f70b2a7eee6e6d514af8edf31d037892ef42e725168e",
"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.18": "59d1457922e400cb74d4777a584505c9eeb72d9628282b418a1698c56498155736718b1fb4aaa063a12b74cc91ffb6e49bc37bab1f49118b2585bdd45a070b79",
"@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.18": "f0a4a160a63c5511e32ec654f64617c341a283b121492991f07e3ec286cca94c64e5caa854f85119c0d66fbe2cf672440fbaed116d15a557235bc69a2d0f5464",
"@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.18": "638edd82a2e751dcd450cd1ada7f28573bbf1e986129620284bd92e1a4e29cdb99c422f1b8c244672413cda916d74a3da39c92294b6b356aff0f79ac1abdafa7",
"@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.18": "f2d685d32cfeaf4b6ded07c6f890bb431e8303de9916d053fc57fd23832747c5aa515971cd39f82643b1005abef813ab075eb04d34fd74553e6711525b23b1f7",
"@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.18": "32680fe23669e9513dd9192420b8e2b9ca35a202942ac74aa399239902ae11d15c75cd9a9f73d2c2c484011cdb75adfb08ffb64075b4a4fd2e213e007955ae36",
"@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.18": "936a6ba7cda7d1454b3d3917337bbabba9eaf6ee1b0b713d1ecd19799feaa108b4d2e33ca2b6683e930de7ab5c4201029293370a71790303a70a8add011acfc6",
"@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.18": "99daa2b391ac36c63413a698413de0392a7e8316d4df9e8f3c652eead0173bfe289dcb351a9c47ab8143c7541c91b4321dbbdced18b606afe7800935bc147ae7",
"@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.18": "4a92446817179ea1d9f98f80f5b19217f72015d94fe04875cbc9e4f9e88e5de42efdca7bd8d25706ee322ee7edbd1289a7390eb14bca905f3295dcc6fc5c9b5f",
"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.18": "446b6c6980839ca089b72ccd943cb5cac789197c969a963059c78b5b9bd8351cbf05cb489f7b46876c2e6bdfb28f48cb2bb7f6c124204dc4704e5c08347d27a9",
"@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.18": "405c63338f7164b78666b45d4a8844f97594877677a14fe812f750296c15a3c22592050e5c8df5e67ef573146a2ea754ec9bbb90e6893ae90e75a2784a392525",
"@rollup/rollup-android-arm-eabi@npm:4.60.3": "17aa353e3527f39dda3c5165f5182e83b705cc98fd6e349b6f71a38f3e31084ddcc089bd92611049689ff782f8c303de1fcfc3ae3e469846c59fdb502de3150f",
"@rollup/rollup-android-arm64@npm:4.60.3": "043fbe640414cd4ee48a791835aab00759297b2ab5f810ba3d3aca3ca416a713c0d749cf2b5866ba95319f2aff7be0508eecdc0745abf5a1a8eabeef67591c56",
"@rollup/rollup-darwin-arm64@npm:4.60.3": "8869930149fa4a1c2b3a1fdfb782ba3f3b28efc523027a5275772ca7e804d88d3c4bed44d575a450d0ed84ab304f263720e09781fa2b390e17f4c5c0a1febf92",
"@rollup/rollup-darwin-x64@npm:4.60.3": "71089410f74facf224fd39c7d6a96fc3bb587afb5851b3094be5c7030eba600acc1c175613bd1a5c7be8c94217e94a3fb7f4d7b18643e4fabf483c68862881cd",
"@rollup/rollup-freebsd-arm64@npm:4.60.3": "4c36273bf2250bb3291042e16ce3fe77b0423cf65420546b546036f773259339896656d51aa09182387b9468c7c3c8b738ae632fed103d18d5910059009ac897",
"@rollup/rollup-freebsd-x64@npm:4.60.3": "b3d3b26fde4665c5512fc2d0233fdee2bc7d1bc891d80faf146bf799241d397b29d7859d2e3820cac35a49228adca25f7ccee305fae242414b6ba22fbe74e6d9",
"@rollup/rollup-linux-arm-gnueabihf@npm:4.60.3": "ddc1212e3b7143ed51700375644227ccfb42d619bd04b8cde6a844258105a7217a832efd15bd296dabf4ab6a7d958f91a76a56a918b72dfb978bc783d31b53e1",
"@rollup/rollup-linux-arm-musleabihf@npm:4.60.3": "2fc53ec264c1bc2fc6ef31b5254343961aa571795544481d64065f7070752d8aa2776c3d352ead112870382d9a74c0e6a421fe271d8efaeb7a5f4d3f879cd092",
"@rollup/rollup-linux-arm64-gnu@npm:4.60.3": "3fa392f7136ebe742ee24ff71513bda01a4f494f9c41b3185d7c19a621ab56ab7471250a287e7745475105a26e1a5b82c90626bab5095818cce544dae8fc1f0a",
"@rollup/rollup-linux-arm64-musl@npm:4.60.3": "82cb64d456d5a6c27cc1bb4c78233ca5692152b838ee97f22bf2319db9f6abdf7af6b12418c1eecfef173b03acf06b04d556854874ca7dbed6eb69a7219b7025",
"@rollup/rollup-linux-loong64-gnu@npm:4.60.3": "0e5ecd83672bc7df3a64c536ad37e7021138f1b729d09820307db49ddb2eef9f33387e0455ca62a28592deb264e28e7b3364a2b6d011016eb7b107dadcd4d00a",
"@rollup/rollup-linux-loong64-musl@npm:4.60.3": "ce424a66d497b376d8bc69ba8ff500cf7b8ab32432254f1921653a421bfdd58489354c626950cb14eed53e56f99fe896af98a3cf9f275861e60ee8bacef5de65",
"@rollup/rollup-linux-ppc64-gnu@npm:4.60.3": "b4cffd1305c1d2ad9b5af0488fb1809b20111b17e07a36081bd0fb8fd05cef917bbc49ee8392f89850f633f0a2fde2f8a959077c81577ef4b5466a0c06b87b7d",
"@rollup/rollup-linux-ppc64-musl@npm:4.60.3": "db107b5139caa39915df56dc4d0244cd4ed650cb74450b5cb04ddec6d15c9c7a2b5ef831ed3af731a471518ba6463e577ad38165abf349f31ea3959daf050572",
"@rollup/rollup-linux-riscv64-gnu@npm:4.60.3": "5abfd50e21ca6da0ef060ee2863e0c4e7d0629e2d9b5b0d1cf3c38659e5b475ceeb22c14bb05eb450fd6cc06df61293bd276f3a932b3aca16a72dea8486c6ef1",
"@rollup/rollup-linux-riscv64-musl@npm:4.60.3": "70e620271513fa67369eb1d3afbaaa520f624187febb34763cba5fc968468cd48e8b366710d34c3f8ca9ae10cc26476270cd017424148394c36e305da59cdba4",
"@rollup/rollup-linux-s390x-gnu@npm:4.60.3": "44b8787091403559b648dc4b416df3914d22bd2e71c3fed5418f2469bea45abb1b1d846c86d05ef9e98096eb5d15d7336a30c09ff83147af31d08a0a68028f97",
"@rollup/rollup-linux-x64-gnu@npm:4.60.3": "d3044ce18567e39467409a124bba0e5c0987e6a32afb32c4e216b40a841cf2ed88aa51782ee49381f2d4f5c38534ff4de455181ddc2438f770eb6e79d57ee4f4",
"@rollup/rollup-linux-x64-musl@npm:4.60.3": "5a2ea801bf4ecac23f2050e153b8ea242308f34f2a24f0e55e5cde9d88bffb9badb489b342b2892a077402273b2623aefc376c7b45ba6b0aface4fb784b32255",
"@rollup/rollup-openbsd-x64@npm:4.60.3": "281535d6ba7cae7292f6081cf983be2a574479f5f0523bba53250982421dffea8e54c5ad5915ae0c09a3df6de36eb181f815118e1cb64616ffae3ee7ebacb6cf",
"@rollup/rollup-openharmony-arm64@npm:4.60.3": "5b5ba8fbe2c12276b89c3ac53ee27c125bda4857a69872a0670c9e785b58ba2003135222ec8d7628e3b4eddc898cce58b941a4ee33fac6a24ea019af25e74079",
"@rollup/rollup-win32-arm64-msvc@npm:4.60.3": "5021cfd286de0d282fb553b6d0c5fe4e4810f02ea4131634db80c29dcf93203f3eee6995e2a7c2c3b2a7edc60ab95a108f1c1e2890a4d1d9cf985febc16257c3",
"@rollup/rollup-win32-ia32-msvc@npm:4.60.3": "1d5f9ff21955657c4045044ead2845c8cd3c7cbc72e8bc2353bef4d79302680a5000793fbc9b85502682292bd28f5c8d026245ea8d6bfe4f3574576cb32e64c2",
"@rollup/rollup-win32-x64-gnu@npm:4.60.3": "b2a9c131a563939feb4f1fa1301e2c9178212431b6b2e8558745bebb1ebed22ed5ab29443c492fc2c6cc67d97af86c73e37c232f35159045422114dd72211eaa",
"@rollup/rollup-win32-x64-msvc@npm:4.60.3": "a62845765830efae8b738cd01412d5a427bc9cc91db7c410a308f0a0d5c0d406f4a31260935836f57fecc23645b365e155a1d3e151fe3d1a98a49f3fc8a8df8d",
"@tailwindcss/oxide-android-arm64@npm:4.3.0": "4ff1b0c205a905253dd7e4287d22e3ee0ef2dcb2a1bc82482a64a81ec443e0f011ccd677db34913a953774e3fa016386269c29e7b33ccc25b355295d1639b24c",
"@tailwindcss/oxide-darwin-arm64@npm:4.3.0": "16899c458e60e7b81021d6cf8b367bd7b9b42e5b6a071f237c16cf8f5adacb0e7de8bb8ed531eb5d397c971e235b74be22be4873b8d35d95e2236d2eec583020",
"@tailwindcss/oxide-darwin-x64@npm:4.3.0": "273443e9b888ba1f2bb27ba81d7b3591356d9215b9bd3351aae3a252e34ae096a49c1e1e7a40e1edff01348233ecf3cff2f95f772155baa2bac94349f445af0a",
"@tailwindcss/oxide-freebsd-x64@npm:4.3.0": "19e9ac688462aebd2a20683eea3d651be9fd6b42f90104e2bdd76d3d91fa3a1fdbc84e68a62777cf4544a9de0dfb3689f6bab31e475d64b114c0573c8fa31769",
"@tailwindcss/oxide-linux-arm-gnueabihf@npm:4.3.0": "f4171517c70ca18c560746febe99ee580e0b647e6555e8052fc28ea29cc09e8aec9b2f4ba25d4a5477e86ffdcf445c4e40e97a82419f54a262988d3b41f4f457",
"@tailwindcss/oxide-linux-arm64-gnu@npm:4.3.0": "8d50a0392266022dd3cca25620941f7cb48398536c8839ad7b4fc3da5cb85140c54c001a431c436c7eb7c4b01576fb32a04299e3ab93f0f9f3036b799502fb27",
"@tailwindcss/oxide-linux-arm64-musl@npm:4.3.0": "6743633b11429b80404405dff5940c98f011ba0897480ab2c24cf8059258e2333463157874382f5610edfaf67970671b68396a3783fdf6bd04b9a4f83afb75ab",
"@tailwindcss/oxide-linux-x64-gnu@npm:4.3.0": "830fde5deff303d1dd9c57a2b00ab02b088bdcb62103b4dca47a520fe76c1d6a1cf29c02ab4fc2bf3a209f9f94b209a217ba3057a9d35f0077cee94b9fcf9bb7",
"@tailwindcss/oxide-linux-x64-musl@npm:4.3.0": "f360e5074810e7bbe906b35f5aed3b0d044318adba50081cbd60483552782b8c9e56502635cd36c3db23a0afed64131902da164b8a43d9a93918648dda7231b4",
"@tailwindcss/oxide-wasm32-wasi@npm:4.3.0": "ec47c4ec6fe61afc14da01b276e0431ff2d986b8fa71aa85a359105dfb79833deb0ad545872a6d6314995206ebf45f1be6b3b0fa01df045460cb9fc7ea74844b",
"@tailwindcss/oxide-win32-arm64-msvc@npm:4.3.0": "2d35fe2b97422ad33d0e1e7bbb61e65e2d9050a5a778cd8792ba1e4d0693015e3d85f964a34a73cd8ccf4ba8694b51b924bad79ccdc600b8a4b7da2bdb897787",
"@tailwindcss/oxide-win32-x64-msvc@npm:4.3.0": "154b40ea54aca2f479f4fe7ff29a20d3f4efaf962f34517d330f220abc8bb4867bc1e3b29fcf8b4b2a52b091b835f7392fb777dfc9024513329f9e54c2bac5bf",
"lightningcss-android-arm64@npm:1.32.0": "1cb326ad39dcb02cf9f45025c167b6900e3a04b08f5149d3c5ee26054b00d08db3736fb69183a6c3ed1cb32dddd148608c784b6631b4777623f7dd0c032c392d",
"lightningcss-darwin-arm64@npm:1.32.0": "da954d0c215d0e95f15a92c8717f871017586e1332b98fd40e96196571d2fd3d51a727dc530768afee9f6a04da210510740574dd0c8dbf2ecced79e5996f1a06",
"lightningcss-darwin-x64@npm:1.32.0": "b1d298c9173f839e8447d1917ed8bc5ab098ed0fc4e4b419d36ac5afe8b27bf21cb47d00a35c3d2edadcac598086e9b4f26c992a809d79f9681d6865a230d79e",
"lightningcss-freebsd-x64@npm:1.32.0": "0eb59f6acf2fcdc944c921b0ac2a16ee803452b9438f573ad6bc41be00040b791ed698698ed5c06f98ef43a6fed0a54987ba3a88da204de9978db2fca96a4a65",
"lightningcss-linux-arm-gnueabihf@npm:1.32.0": "7d1ea43986d2370a90cefc920dac3e041e0d19445cc4fdaf244644b57b6937588d7c3a464c31440617231f55a6dad79744cf707912e05f3b46a1694abb5b4e00",
"lightningcss-linux-arm64-gnu@npm:1.32.0": "f01ede75f41480a164d18338fa46d9fccdb4a821717174ce848ff8b2aa4badba4f1d331deb3ebec3ee2f0eb95bfa2e35f54877f371427b04e6f36a4783aa1414",
"lightningcss-linux-arm64-musl@npm:1.32.0": "38d373f99768f1c5ab6a9c87e1c0ec45eccdb3fe4d216dd5cd06629648c4b0689570ad4e89285d490662cde1790cd36e6b3d176c14e5e31f6869c604aa2df820",
"lightningcss-linux-x64-gnu@npm:1.32.0": "0a1433d46a4a010f87b615c3fa43725a456bae259858a2c927899cbf93074f0ae40f49901bf6af6daa30a4d169c86f594f6341fd775bf7b59293b8d7947b81c5",
"lightningcss-linux-x64-musl@npm:1.32.0": "a6f48ccc30a73d30563c7b61856d1fd6a8812ce62b1bee797f227e06612df70aab4ccd1908552952f77ca7ff2a51019f62d14ae5310ca67311635eeec55d3a9e",
"lightningcss-win32-arm64-msvc@npm:1.32.0": "a919be7fb298c1102bccf18b6f83d54946adfac70ab2ac9c95e4ae38ded76d8f530215b0bcda4d38df4ffc40a70abe3afd91d01d35fd122e7d119ed0e46972d0",
"lightningcss-win32-x64-msvc@npm:1.32.0": "5b8d3431aadbdc40a0a7eae32f2415e4f28b547af1a1cd5b35a35d67f772a89492c7fa03e9fc88ce804b14f5f88e412e49fff40d1b0aad67177de815c434207e"
}

View file

@ -0,0 +1,66 @@
{
lib,
buildGoModule,
fetchFromGitHub,
callPackage,
pkg-config,
vips,
makeWrapper,
nixosTests,
}:
buildGoModule (finalAttrs: {
pname = "koito";
version = "0.3.2";
src = fetchFromGitHub {
owner = "gabehf";
repo = "koito";
rev = "v${finalAttrs.version}";
hash = "sha256-68+Z4Alzu+4v/PxU1IOboqZkF1pO+y6gswuO+HPS7dk=";
};
__structuredAttrs = true;
vendorHash = "sha256-W/+ByBlEPd4yIUD/E28q93fz6wYgvhwyBvJL8Fm1lNY=";
nativeBuildInputs = [
pkg-config
makeWrapper
];
buildInputs = [ vips ];
ldflags = [
"-s"
"-w"
"-X main.Version=${finalAttrs.version}"
];
postInstall = ''
mv $out/bin/api $out/bin/.koito-wrapped
mkdir -p $out/share
cp -r --no-preserve=mode ${finalAttrs.passthru.client}/client $out/share/client
makeWrapper $out/bin/.koito-wrapped $out/bin/koito \
--run "cd $out/share"
'';
passthru = {
client = callPackage ./client.nix {
inherit (finalAttrs) src version;
};
tests = {
inherit (nixosTests) koito;
};
updateScript = ./update.sh;
};
meta = {
description = "Modern, themeable scrobbler that you can use with any program that scrobbles to a custom ListenBrainz URL";
homepage = "https://koito.io";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ iv-nn ];
mainProgram = "koito";
};
})

32
pkgs/by-name/ko/koito/update.sh Executable file
View file

@ -0,0 +1,32 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl gnused jq nix coreutils nix-update yarn-berry_4.yarn-berry-fetcher
set -euo pipefail
owner="gabehf"
repo="koito"
package_dir="$(realpath "$(dirname "$0")")"
latest_tag=$(curl ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} -sL "https://api.github.com/repos/${owner}/${repo}/releases/latest" | jq -r .tag_name)
latest_version="${latest_tag#v}"
if [[ "${UPDATE_NIX_OLD_VERSION}" == "${latest_version}" ]]; then
echo "koito is up to date: ${UPDATE_NIX_OLD_VERSION}"
exit 0
fi
echo "Updating koito from ${UPDATE_NIX_OLD_VERSION} to ${latest_version}"
nix-update koito --version "${latest_version}"
src_path=$(nix-build --no-out-link -A koito.src)
echo "Regenerating missing-hashes.json…"
yarn-berry-fetcher missing-hashes "${src_path}/client/yarn.lock" >"${package_dir}/missing-hashes.json"
echo "Updating offline cache hash…"
offline_cache_hash=$(yarn-berry-fetcher prefetch "${src_path}/client/yarn.lock" "${package_dir}/missing-hashes.json")
old_hash=$(nix-instantiate --eval --expr "with import ./. {}; koito.client.offlineCache.outputHash" --raw)
sed -i "s|${old_hash}|${offline_cache_hash}|" "${package_dir}/client.nix"
echo "Done."

View file

@ -2,24 +2,24 @@
lib,
stdenv,
fetchFromGitHub,
autoreconfHook,
cmake,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "libnfs";
version = "5.0.3";
version = "6.0.2";
src = fetchFromGitHub {
owner = "sahlberg";
repo = "libnfs";
tag = "libnfs-${finalAttrs.version}";
hash = "sha256-OFzoDCDBo+O7PtUKcyKnUJJ9TrALrkvk5Yo0zn08Q6w=";
hash = "sha256-uD7PtW2rcpGVzqD6U0DXK1gUaCKlKh+p+i6CW6jLGdw=";
};
nativeBuildInputs = [ autoreconfHook ];
nativeBuildInputs = [ cmake ];
configureFlags = [
"--enable-pthread"
cmakeFlags = [
"-DENABLE_MULTITHREADING=ON"
];
enableParallelBuilding = true;

View file

@ -0,0 +1,31 @@
{
lib,
rustPlatform,
fetchFromGitHub,
nix-update-script,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "locker";
version = "4.0.1";
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "tgirlcloud";
repo = "locker";
tag = "v${finalAttrs.version}";
hash = "sha256-rVW2OcRG2h5G46UdRLYeZ5A0Gmca2fj5rRbZzMeDqqc=";
};
cargoHash = "sha256-gfhOOgZ8wkqbcghcCGCBMtImLfZazR2Dg/FgnjbofAg=";
passthru.updateScript = nix-update-script { };
meta = {
description = "A linter for your flake.lock file";
homepage = "https://github.com/tgirlcloud/locker";
license = lib.licenses.eupl12;
maintainers = with lib.maintainers; [ isabelroses ];
mainProgram = "locker";
};
})

View file

@ -12,12 +12,12 @@
}:
stdenv.mkDerivation rec {
version = "2.4.4";
version = "2.5.1";
pname = "lyx";
src = fetchurl {
url = "ftp://ftp.lyx.org/pub/lyx/stable/2.4.x/${pname}-${version}.tar.xz";
hash = "sha256-/6zTdIDzIPPz+PMERf5AiX6d9EyU7oe6BBPjZAhvS5A=";
url = "ftp://ftp.lyx.org/pub/lyx/stable/2.5.x/lyx-${version}.tar.xz";
hash = "sha256-8qI4e8s/L1RsH8E+THTLT4qmSHBs5XiO9wXdUTRNLP0=";
};
# LaTeX is used from $PATH, as people often want to have it with extra pkgs
@ -53,6 +53,7 @@ stdenv.mkDerivation rec {
qtWrapperArgs = [ " --prefix PATH : ${python3}/bin" ];
meta = {
changelog = "https://www.lyx.org/announce/${lib.replaceString "." "_" version}.txt";
description = "WYSIWYM frontend for LaTeX, DocBook";
homepage = "https://www.lyx.org";
license = lib.licenses.gpl2Plus;

View file

@ -23,7 +23,9 @@
libGL,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "mangowc";
__structuredAttrs = true;
strictDeps = true;
pname = "mango";
version = "0.14.4";
src = fetchFromGitHub {

View file

@ -23,7 +23,7 @@ buildPythonApplication (finalAttrs: {
dependencies = [
colorthief
ffmpeg-python
mpd2
python-mpd2
pillow
pixcat
requests

View file

@ -42,7 +42,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
dependencies = with python3Packages; [
dbus-python
mpd2
python-mpd2
mutagen
pygobject3
];

View file

@ -8,12 +8,12 @@
buildLua {
pname = "manga-reader";
version = "0-unstable-2026-03-03";
version = "0-unstable-2026-06-23";
src = fetchFromGitHub {
owner = "Dudemanguy";
repo = "mpv-manga-reader";
rev = "2e8c21a82eb5fbe0b6feb64375e396d27bd8d5fa";
hash = "sha256-Q6ekBvGsHSiZtO9QYnv5zAoAdkqrcFvmSJQsjVTuwSg=";
rev = "0551b033ac22b97298d94e480216748f68786b9f";
hash = "sha256-TmRWBKgTlgOszOI1CLHveGMNH23UHSvbijz8wC4M/mM=";
};
passthru.updateScript = unstableGitUpdater { };

View file

@ -0,0 +1,12 @@
diff --git a/music_assistant/mass.py b/music_assistant/mass.py
index 752f9e0af..9d7b3a521 100644
--- a/music_assistant/mass.py
+++ b/music_assistant/mass.py
@@ -923,6 +923,7 @@ async def _load_providers(self) -> None:
changes_made = False
newly_created_defaults: set[str] = set()
for default_provider, require_mdns in DEFAULT_PROVIDERS:
+ continue
if default_provider in default_providers_setup:
# already processed/setup before, skip
continue

View file

@ -43,7 +43,7 @@ index 0ac8a70f..5d74e25b 100644
"""Set up the YTMusic provider."""
logging.getLogger("yt_dlp").setLevel(self.logger.level + 10)
- await self._install_packages()
self._cookie = self.config.get_value(CONF_COOKIE)
self._cookie = str(self.config.get_value(CONF_COOKIE))
self._po_token_server_url = (
self.config.get_value(CONF_PO_TOKEN_SERVER_URL) or DEFAULT_PO_TOKEN_SERVER_URL
@@ -1103,8 +1102,6 @@ async def _install_packages(self) -> None:

View file

@ -8,13 +8,13 @@
buildPythonPackage rec {
pname = "music-assistant-frontend";
version = "2.17.146";
version = "2.17.186";
pyproject = true;
src = fetchPypi {
pname = "music_assistant_frontend";
inherit version;
hash = "sha256-VU2SXL6SLFiKntmJJtCabBOYOeImYFPHYxvMPmnhmEc=";
hash = "sha256-dNGzXDRZuQLRkMY0erjJZE4h26yFP4Fdn9a3K6T0RvM=";
};
build-system = [ setuptools ];

View file

@ -6,6 +6,7 @@
ffmpeg_7-headless,
nixosTests,
replaceVars,
writableTmpDirAsHomeHook,
providers ? [ ],
}:
@ -15,16 +16,17 @@ let
music-assistant-frontend = prev.callPackage ./frontend.nix { };
music-assistant-models = final.music-assistant-models.overridePythonAttrs (oldAttrs: {
version = "1.1.115";
version = "1.1.129";
src = oldAttrs.src.override {
hash = "sha256-oEXL0B8JNH4PcltpES375ov7QGs+gtYKlMGr1B7BlKY=";
hash = "sha256-6gVHlFTt/bsj4nUGPS6HDUQ7zczpfos75U6l4Yk9W6k=";
};
});
}
);
providerPackages = (import ./providers.nix).providers;
providersMeta = import ./providers.nix;
providerPackages = providersMeta.providers;
providerNames = lib.attrNames providerPackages;
providerDependencies = lib.concatMap (
provider: (providerPackages.${provider} pythonPackages)
@ -38,14 +40,14 @@ assert
pythonPackages.buildPythonApplication rec {
pname = "music-assistant";
version = "2.8.7";
version = "2.9.4";
pyproject = true;
src = fetchFromGitHub {
owner = "music-assistant";
repo = "server";
tag = version;
hash = "sha256-m91q/8XYoZ5Azu79fKD0euRCuf29w3vj5cxdFheDsmI=";
hash = "sha256-PiSBghhlxknijRqghkO8wn1CB2XqaJrjrvGNvZUlNbo=";
};
patches = [
@ -78,9 +80,18 @@ pythonPackages.buildPythonApplication rec {
# ^^^^^^^^^^^^^^^
# E IndexError: tuple index out of range
./fix-webserver-tests-in-sandbox.patch
# As providers must be configured through the nixos module, there is no gain
# if Music Assistant tries to enable some of them without the proper dependencies.
./disable-default-provider.diff
];
postPatch = ''
# Undo Python 3.14 only syntax
substituteInPlace music_assistant/controllers/streams/controller.py \
--replace-fail "except BrokenPipeError, ConnectionResetError, ConnectionError:" "except (BrokenPipeError, ConnectionResetError, ConnectionError):" \
--replace-fail "except BrokenPipeError, ConnectionResetError:" "except (BrokenPipeError, ConnectionResetError):"
substituteInPlace pyproject.toml \
--replace-fail "0.0.0" "${version}" \
--replace-fail "==" ">="
@ -109,6 +120,7 @@ pythonPackages.buildPythonApplication rec {
"mashumaro"
"orjson"
"xmltodict"
"zeroconf"
];
pythonRemoveDeps = [
@ -139,6 +151,7 @@ pythonPackages.buildPythonApplication rec {
ifaddr
librosa
mashumaro
modern-colorthief
music-assistant-frontend
music-assistant-models
mutagen
@ -150,6 +163,8 @@ pythonPackages.buildPythonApplication rec {
pyjwt
python-slugify
shortuuid
torch
torchaudio
unidecode
xmltodict
zeroconf
@ -174,18 +189,36 @@ pythonPackages.buildPythonApplication rec {
with pythonPackages;
[
pytestCheckHook
writableTmpDirAsHomeHook
]
++ lib.concatAttrValues optional-dependencies
++ (lib.concatMap (provider: providerPackages.${provider} python.pkgs) [
++ (lib.concatMap (provider: providerPackages.${provider} pythonPackages) [
"acoustid_lookup"
"audible"
"dlna"
"fastmcp_server"
"jellyfin"
"mpd"
"msx_bridge"
"opensubsonic"
"sendspin"
"smart_fades"
"snapcast"
"sonic_analysis"
"sonic_similarity"
"tidal"
"wiim"
"ytmusic"
]);
preCheck = ''
export NUMBA_CACHE_DIR=$(mktemp -d)
# required for smart_fades tests
mkdir -p $HOME/.cache/torch/hub/checkpoints/
cp ${pythonPackages.beat-this.passthru.small0Ckpt} $HOME/.cache/torch/hub/checkpoints/beat_this-small0.ckpt
'';
disabledTestPaths = [
# no multicast support in build sandbox:
# "OSError: [Errno 19] No such device"
@ -193,9 +226,12 @@ pythonPackages.buildPythonApplication rec {
# provider is missing dependencies
"tests/providers/apple_music"
"tests/providers/bandcamp"
"tests/providers/hue_entertainment"
"tests/providers/kion_music"
"tests/providers/nicovideo"
"tests/providers/qqmusic"
"tests/providers/yandex_music"
"tests/providers/yandex_ynison"
"tests/providers/zvuk_music"
# mocking music_assistant.providers.airplay.pairing.AirPlayPairing does not work
"tests/providers/airplay/test_player.py::test_start_pairing__pin_decision"
@ -210,6 +246,7 @@ pythonPackages.buildPythonApplication rec {
providerPackages
providerNames
;
providersBuiltins = providersMeta.builtins;
tests = nixosTests.music-assistant;
};

View file

@ -1,8 +1,27 @@
# Do not edit manually, run ./update-providers.py
{
version = "2.8.7";
version = "2.9.4";
builtins = [
"builtin"
"coverartarchive"
"fanarttv"
"itunes_artwork"
"local_audio"
"loudness_analysis"
"lrclib"
"musicbrainz"
"sendspin"
"sync_group"
"theaudiodb"
"universal_player"
"wikipedia"
];
providers = {
acoustid_lookup =
ps: with ps; [
pyacoustid
];
airplay =
ps: with ps; [
srptools
@ -65,6 +84,10 @@
];
fanarttv = ps: [
];
fastmcp_server =
ps: with ps; [
fastmcp
];
filesystem_local = ps: [
];
filesystem_nfs = ps: [
@ -89,10 +112,14 @@
ps: with ps; [
pyheos
];
hue_entertainment = ps: [
]; # missing hue-entertainment
ibroadcast = ps: [
]; # missing ibroadcastaio
internet_archive = ps: [
];
itunes_artwork = ps: [
];
itunes_podcasts = ps: [
];
jellyfin =
@ -101,6 +128,8 @@
];
kion_music = ps: [
]; # missing yandex-music
lastfm_recommendations = ps: [
];
lastfm_scrobble =
ps: with ps; [
pylast
@ -109,16 +138,40 @@
ps: with ps; [
liblistenbrainz
];
local_audio =
ps: with ps; [
sounddevice
];
loudness_analysis = ps: [
];
lrclib = ps: [
];
motherearthradio = ps: [
];
mpd =
ps: with ps; [
python-mpd2
];
msx_bridge =
ps: with ps; [
pydantic
];
musicbrainz = ps: [
];
musiccast =
ps: with ps; [
aiomusiccast
];
nicovideo = ps: [
]; # missing niconico.py-ma
musicme = ps: [
];
neteasecloudmusic = ps: [
];
nicovideo =
ps: with ps; [
pydantic
]; # missing niconico.py-ma
nts = ps: [
];
nugs = ps: [
];
opensubsonic =
@ -147,6 +200,8 @@
];
qobuz = ps: [
];
qqmusic = ps: [
]; # missing qqmusic-api-python
radiobrowser =
ps: with ps; [
radios
@ -158,13 +213,26 @@
async-upnp-client
rokuecp
];
samsung_wam = ps: [
]; # missing pywam
sendspin =
ps: with ps; [
ps:
with ps;
[
aiosendspin
av
];
]
++ aiosendspin.optional-dependencies.server;
siriusxm = ps: [
]; # missing sxm
smart_fades =
ps: with ps; [
beat-this
nnaudio
threadpoolctl
];
smart_playlist = ps: [
];
snapcast =
ps: with ps; [
bidict
@ -173,6 +241,20 @@
];
somafm = ps: [
];
sonic_analysis =
ps: with ps; [
huggingface-hub
pyyaml
threadpoolctl
torchlibrosa
transformers
];
sonic_similarity =
ps: with ps; [
huggingface-hub
transformers
usearch
];
sonos =
ps: with ps; [
aiosonos
@ -220,8 +302,20 @@
ps: with ps; [
aiovban
];
webdav = ps: [
];
wiim =
ps: with ps; [
wiim
];
wikipedia = ps: [
];
yandex_music = ps: [
]; # missing yandex-music
]; # missing yandex-music, ya-passport-auth
yandex_smarthome = ps: [
]; # missing ya-passport-auth
yandex_ynison = ps: [
]; # missing ya-passport-auth
yousee = ps: [
];
ytmusic =
@ -232,6 +326,7 @@
ytmusicapi
]; # missing deno
zvuk_music = ps: [
]; # missing zvuk-music
];
# missing zvuk-music
};
}

View file

@ -1,5 +1,5 @@
#!/usr/bin/env nix-shell
#!nix-shell -I nixpkgs=./. -i python3 -p "music-assistant.python.withPackages (ps: music-assistant.dependencies ++ (with ps; [ jinja2 packaging ]))" -p nixfmt pyright ruff isort
#!nix-shell -I nixpkgs=./. -i python3 -p "music-assistant.pythonPackages.python.withPackages (ps: music-assistant.dependencies ++ (with ps; [ jinja2 packaging ]))" -p nixfmt pyright ruff isort
import asyncio
import json
import os.path
@ -24,13 +24,22 @@ TEMPLATE = """# Do not edit manually, run ./update-providers.py
{
version = "{{ version }}";
builtins = [
{%- for builtin in builtins | sort %}
"{{ builtin }}"
{%- endfor %}
];
providers = {
{%- for provider in providers | sort(attribute='domain') %}
{{ provider.domain }} = {% if provider.available %}ps: with ps;{% else %}ps:{% endif %} [
{%- for requirement in provider.available | sort %}
{{ requirement }}
{{ requirement }}
{%- endfor %}
];{% if provider.missing %} # missing {{ ", ".join(provider.missing) }}{% endif %}
]
{%- for requirement in provider.extra_list_deps | sort %}
++ {{ requirement }}
{%- endfor %}
;{% if provider.missing %} # missing {{ ", ".join(provider.missing) }}{% endif %}
{%- endfor %}
};
}
@ -50,13 +59,16 @@ ROOT: Final = (
.strip()
)
PACKAGE_SET = "music-assistant.python.pkgs"
PACKAGE_SET = "music-assistant.pythonPackages"
PACKAGE_MAP = {
"git+https://github.com/MarvinSchenkel/pytube.git": "pytube",
}
EXTRA_DEPS = {
# Those providers cannot guard pydantic behind TYPE_CHECKING
"msx_bridge": ["pydantic"],
"nicovideo": ["pydantic"],
"ytmusic": [
# https://github.com/music-assistant/server/blob/2.5.8/music_assistant/providers/ytmusic/__init__.py#L120
"bgutil-ytdlp-pot-provider",
@ -65,6 +77,11 @@ EXTRA_DEPS = {
}
EXTRA_LIST_DEPS = {
"sendspin": ["aiosendspin.optional-dependencies.server"],
}
def run_sync(cmd: List[str]) -> None:
print(f"$ {' '.join(cmd)}")
process = run(cmd)
@ -143,7 +160,7 @@ def packageset_attributes():
ROOT,
"-qa",
"-A",
"music-assistant.python.pkgs",
"music-assistant.pythonPackages",
"--arg",
"config",
"{ allowAliases = false; }",
@ -162,7 +179,7 @@ class NoMatch(Exception):
def resolve_package_attribute(package: str) -> str:
pattern = re.compile(rf"^music-assistant\.python\.pkgs\.{package}$", re.I)
pattern = re.compile(rf"^music-assistant\.pythonPackages\.{package}$", re.I)
packages = packageset_attributes()
matches = []
for attr in packages.keys():
@ -189,6 +206,7 @@ class Provider:
domain: str
available: list[str] = field(default_factory=list)
missing: list[str] = field(default_factory=list)
extra_list_deps: list[str] = field(default_factory=list)
def __eq__(self, other):
return self.domain == other.domain
@ -197,12 +215,12 @@ class Provider:
return hash(self.domain)
async def resolve_providers(manifests) -> Set:
async def resolve_providers(manifests) -> tuple[Set, Set]:
errors = []
providers = set()
for manifest in manifests:
provider = Provider(manifest.domain)
requirements = manifest.requirements + EXTRA_DEPS.get(manifest.domain, [])
requirements = manifest.requirements
for requirement in requirements:
# allow substituting requirement specifications that packaging cannot parse
if requirement in PACKAGE_MAP:
@ -223,26 +241,37 @@ async def resolve_providers(manifests) -> Set:
version = await get_package_version(attr)
if version not in requirement.specifier:
errors.append(f"{requirement} not satisfied by version {version}")
if manifest.domain in EXTRA_DEPS:
for requirement in EXTRA_DEPS[manifest.domain]:
provider.available.append(requirement)
if manifest.domain in EXTRA_LIST_DEPS:
for requirement in EXTRA_LIST_DEPS[manifest.domain]:
provider.extra_list_deps.append(requirement)
providers.add(provider)
if errors:
print("\n - ", end="")
print("\n - ".join(errors))
return providers
builtins = {manifest.domain for manifest in manifests if manifest.builtin}
return providers, builtins
def render(outpath: str, version: str, providers: Set):
def render(outpath: str, version: str, providers: Set, builtins: Set):
env = Environment()
template = env.from_string(TEMPLATE)
template.stream(version=version, providers=providers).dump(outpath)
template.stream(version=version, providers=providers, builtins=builtins).dump(
outpath
)
async def main():
version: str = cast(str, await Nix.eval("music-assistant.version"))
manifests = await get_provider_manifests(version)
providers = await resolve_providers(manifests)
providers, builtins = await resolve_providers(manifests)
outpath = os.path.join(ROOT, "pkgs/by-name/mu/music-assistant/providers.nix")
render(outpath, version, providers)
render(outpath, version, providers, builtins)
run_sync(["nixfmt", outpath])

View file

@ -7,16 +7,16 @@
buildGoModule (finalAttrs: {
pname = "nats-server";
version = "2.14.2";
version = "2.14.3";
src = fetchFromGitHub {
owner = "nats-io";
repo = "nats-server";
rev = "v${finalAttrs.version}";
hash = "sha256-XK+Yu1DGmS8F0Sbi3Y6KrGtOw63JzJ1ax5LjoZWCkcY=";
hash = "sha256-139eSr6ECC1vThHbdnDPg8wJS0FJuwDKpm4BupRdjSk=";
};
vendorHash = "sha256-q52NL8I/7xkLb6qeDyv8vTuW0C3CRFuyc6UIPw92uD4=";
vendorHash = "sha256-F7XKN/MMX8FOiRY8gugrKU2j+RQE/vY3eTV7ORVRc2U=";
doCheck = false;

View file

@ -25,6 +25,10 @@ python3.pkgs.buildPythonApplication (finalAttrs: {
url = "https://github.com/mhinz/neovim-remote/commit/56d2a4097f4b639a16902390d9bdd8d1350f948c.patch";
hash = "sha256-/PjE+9yfHtOUEp3xBaobzRM8Eo2wqOhnF1Es7SIdxvM=";
})
# Fix nvr --version: replace deprecated pkg_resources with importlib.metadata
# (stdlib since Python 3.8). setuptools was correctly kept in build-system
# only; this avoids adding it as a spurious runtime dependency.
./use-importlib-metadata.patch
];
build-system = with python3.pkgs; [ setuptools ];

View file

@ -0,0 +1,20 @@
Use importlib.metadata instead of pkg_resources for version queries.
pkg_resources is a legacy setuptools API. importlib.metadata (stdlib since
Python 3.8) is the correct replacement and requires no extra runtime dependency.
--- a/nvr/nvr.py
+++ b/nvr/nvr.py
@@ -360,10 +360,10 @@
def print_versions():
- import pkg_resources
- print('nvr ' + pkg_resources.require("neovim-remote")[0].version)
- print('pynvim ' + pkg_resources.require('pynvim')[0].version)
- print('psutil ' + pkg_resources.require('psutil')[0].version)
+ from importlib.metadata import version
+ print('nvr ' + version("neovim-remote"))
+ print('pynvim ' + version('pynvim'))
+ print('psutil ' + version('psutil'))
print('Python ' + sys.version.split('\n')[0])

View file

@ -0,0 +1,24 @@
diff --git a/3party/CMakeLists.txt b/3party/CMakeLists.txt
index c802251db8..314f4d4543 100644
--- a/3party/CMakeLists.txt
+++ b/3party/CMakeLists.txt
@@ -33,9 +33,6 @@ if (NOT WITH_SYSTEM_PROVIDED_3PARTY)
# Add pugixml library.
add_subdirectory(pugixml)
- # Add protobuf library.
- add_subdirectory(protobuf)
-
add_subdirectory(freetype)
add_subdirectory(icu)
add_subdirectory(harfbuzz)
@@ -45,6 +42,9 @@ if (NOT WITH_SYSTEM_PROVIDED_3PARTY)
target_include_directories(utf8cpp SYSTEM INTERFACE "${OMIM_ROOT}/3party/utfcpp/source")
endif()
+# Add protobuf library.
+add_subdirectory(protobuf)
+
add_subdirectory(agg)
add_subdirectory(bsdiff-courgette)
add_subdirectory(glaze)

View file

@ -18,42 +18,32 @@
libxrandr,
libxinerama,
libxcursor,
gflags,
expat,
jansson,
boost,
fast-float,
utf8cpp,
nix-update-script,
}:
let
world_feed_integration_tests_data = fetchFromGitHub {
owner = "organicmaps";
repo = "world_feed_integration_tests_data";
rev = "30ecb0b3fe694a582edfacc2a7425b6f01f9fec6";
hash = "sha256-1FF658OhKg8a5kKX/7TVmsxZ9amimn4lB6bX9i7pnI4=";
};
in
stdenv.mkDerivation (finalAttrs: {
pname = "organicmaps";
version = "2026.01.26-11";
version = "2026.05.27-11";
src = fetchFromGitHub {
owner = "organicmaps";
repo = "organicmaps";
tag = "${finalAttrs.version}-android";
hash = "sha256-EsVPzibUta0cmKA6bYLqCKKij5FWbwPHgMmIs2THpL0=";
hash = "sha256-zLNQk9CCCk3linmAyAT5qsS5GhrOrlSVOdDf5koBwrc=";
fetchSubmodules = true;
};
postPatch = ''
# Disable certificate check. It's dependent on time
echo "exit 0" > tools/unix/check_cert.sh
# crude fix for https://github.com/organicmaps/organicmaps/issues/1862
echo "echo ${lib.replaceStrings [ "." "-" ] [ "" "" ] finalAttrs.version}" > tools/unix/version.sh
# TODO use system boost instead, see https://github.com/organicmaps/organicmaps/issues/5345
patchShebangs 3party/boost/tools/build/src/engine/build.sh
# Prefetch test data, or the build system will try to fetch it with git.
ln -s ${world_feed_integration_tests_data} data/test_data/world_feed_integration_tests_data
'';
patches = [
# Needs the very old protobuf 3.3, so we use the vendored one
# https://github.com/organicmaps/organicmaps/pull/6310
./force-vendored-protobuf.patch
];
nativeBuildInputs = [
cmake
@ -65,7 +55,6 @@ stdenv.mkDerivation (finalAttrs: {
qt6.wrapQtAppsHook
];
# Most dependencies are vendored
buildInputs = [
qt6.qtbase
qt6.qtpositioning
@ -80,12 +69,21 @@ stdenv.mkDerivation (finalAttrs: {
libxrandr
libxinerama
libxcursor
gflags
expat
jansson
boost
fast-float
utf8cpp
];
# Yes, this is PRE configure. The configure phase uses cmake
preConfigure = ''
bash ./configure.sh
'';
cmakeFlags = [
(lib.cmakeBool "WITH_SYSTEM_PROVIDED_3PARTY" true)
(lib.cmakeBool "SKIP_TESTS" true)
(lib.cmakeBool "SKIP_TOOLS" true)
];
env.NIX_CFLAGS_COMPILE = "-I${lib.getDev utf8cpp}/include/utf8cpp";
passthru = {
updateScript = nix-update-script {

View file

@ -6,13 +6,13 @@
buildGoModule (finalAttrs: {
pname = "pgcenter";
version = "0.10.1";
version = "0.11.0";
src = fetchFromGitHub {
owner = "lesovsky";
repo = "pgcenter";
rev = "v${finalAttrs.version}";
sha256 = "sha256-HSSHRMkzb0WkRAPEtG654ngnJw9rjkBq/v2Su4bUO8Y=";
sha256 = "sha256-sIdCcle7s9ZL8XlEd09yGgq/gC5YDVONzm5Fj9z0lLw=";
};
vendorHash = "sha256-nHPS/iLHQwM39UYpajQRAbZcK7PxTPU0mO2HapDRFDU=";

View file

@ -36,7 +36,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
dependencies = with python3Packages; [
pygobject3
mpd2
python-mpd2
];
dontWrapGApps = true;

View file

@ -20,7 +20,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
dependencies = with python3Packages; [
mutagen
mpd2
python-mpd2
toml
appdirs
];

View file

@ -25,6 +25,11 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-OT9e+1BTbsE8pPSv+2nMmWbTw/lp5sXnAfrd+fl4U4E=";
};
outputs = [
"out"
"dev"
];
nativeBuildInputs = [
SDL2
autoreconfHook

View file

@ -21,6 +21,11 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-Cyvx57ZWitvbybuSRkP3nZ3tr+Bh+h7Wh9HZrE5FO/0=";
};
outputs = [
"out"
"dev"
];
nativeBuildInputs = [
SDL2
pkg-config

View file

@ -25,7 +25,6 @@ buildGoModule (finalAttrs: {
homepage = "https://github.com/SpectralOps/senv";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ SuperSandro2000 ];
broken = stdenv.hostPlatform.isDarwin; # needs golang.org/x/sys bump
mainProgram = "senv";
};
})

View file

@ -17,7 +17,7 @@ let
buildPythonApplication
dbus-python
pygobject3
mpd2
python-mpd2
setuptools
;
in
@ -53,7 +53,7 @@ buildPythonApplication (finalAttrs: {
# included because it's difficult to build.
pythonPath = [
dbus-python
mpd2
python-mpd2
pygobject3
setuptools # pkg_resources is imported during runtime
];

View file

@ -8,16 +8,21 @@
buildGoModule (finalAttrs: {
pname = "ticker";
version = "5.2.1";
version = "5.3.0";
src = fetchFromGitHub {
owner = "achannarasappa";
repo = "ticker";
tag = "v${finalAttrs.version}";
hash = "sha256-1q+TMCYPp9AicWJZzWrrr5ukj6AcckNkp2yP4NyOm5g=";
hash = "sha256-DXaW1pL0MDM6GTm1i7ns94OgBqSsR94wFYoumOZsnXo=";
};
vendorHash = "sha256-kEyZMFW1ex45yC4G9qZUOeXVdQKjcExG7hKvN8lxrDI=";
postPatch = ''
substituteInPlace go.mod \
--replace-fail "go 1.26.4" "go 1.26.3"
'';
vendorHash = "sha256-ulAmWbsLp5oiIRJNyI0jRXBGUnjRzkZt3zHdbxkCLV0=";
ldflags = [
"-s"

View file

@ -1,3 +1,3 @@
{ transmission_4 }:
transmission_4.override { enableGTK4 = true; }
transmission_4.override { enableGTK = true; }

View file

@ -0,0 +1,3 @@
{ transmission_4 }:
transmission_4.override { enableQt = true; }

View file

@ -1,3 +0,0 @@
{ transmission_4 }:
transmission_4.override { enableQt5 = true; }

View file

@ -1,3 +0,0 @@
{ transmission_4 }:
transmission_4.override { enableQt6 = true; }

View file

@ -24,15 +24,13 @@
dht,
libnatpmp,
# Build options
enableGTK4 ? false,
enableGTK ? false,
gtkmm4,
libpthread-stubs,
libayatana-appindicator,
wrapGAppsHook4,
enableQt5 ? false,
enableQt6 ? false,
enableQt ? false,
enableMac ? false,
qt5,
qt6Packages,
nixosTests,
enableSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd,
@ -98,9 +96,9 @@ stdenv.mkDerivation (finalAttrs: {
cmakeFlags = [
(cmakeBool "ENABLE_CLI" enableCli)
(cmakeBool "ENABLE_DAEMON" enableDaemon)
(cmakeBool "ENABLE_GTK" enableGTK4)
(cmakeBool "ENABLE_GTK" enableGTK)
(cmakeBool "ENABLE_MAC" enableMac)
(cmakeBool "ENABLE_QT" (enableQt5 || enableQt6))
(cmakeBool "ENABLE_QT" enableQt)
(cmakeBool "INSTALL_LIB" installLib)
(cmakeBool "RUN_CLANG_TIDY" false)
]
@ -132,7 +130,7 @@ stdenv.mkDerivation (finalAttrs: {
substituteInPlace CMakeLists.txt \
--replace-fail 'find_package(UtfCpp)' 'find_package(utf8cpp)'
''
+ optionalString (stdenv.hostPlatform.isDarwin && (enableQt5 || enableQt6)) ''
+ optionalString (stdenv.hostPlatform.isDarwin && enableQt) ''
substituteInPlace qt/CMakeLists.txt \
--replace-fail \
'transmission::qt_impl)' \
@ -144,9 +142,8 @@ stdenv.mkDerivation (finalAttrs: {
cmake
python3
]
++ optionals enableGTK4 [ wrapGAppsHook4 ]
++ optionals enableQt5 [ qt5.wrapQtAppsHook ]
++ optionals enableQt6 [ qt6Packages.wrapQtAppsHook ]
++ optionals enableGTK [ wrapGAppsHook4 ]
++ optionals enableQt [ qt6Packages.wrapQtAppsHook ]
++ optionals enableMac [
ibtool
actool
@ -171,14 +168,7 @@ stdenv.mkDerivation (finalAttrs: {
utf8cpp
zlib
]
++ optionals enableQt5 (
with qt5;
[
qttools
qtbase
]
)
++ optionals enableQt6 (
++ optionals enableQt (
with qt6Packages;
[
qttools
@ -186,7 +176,7 @@ stdenv.mkDerivation (finalAttrs: {
qtsvg
]
)
++ optionals enableGTK4 [
++ optionals enableGTK [
gtkmm4
libpthread-stubs
libayatana-appindicator
@ -230,9 +220,9 @@ stdenv.mkDerivation (finalAttrs: {
meta = {
description = "Fast, easy and free BitTorrent client";
mainProgram =
if (enableQt5 || enableQt6) then
if enableQt then
"transmission-qt"
else if enableGTK4 then
else if enableGTK then
"transmission-gtk"
else if enableMac then
"transmission-mac"

View file

@ -11,16 +11,16 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "urbit";
version = "4.3";
version = "4.5";
src = fetchurl {
url = "https://github.com/urbit/vere/releases/download/vere-v${finalAttrs.version}/${platform}.tgz";
sha256 =
{
x86_64-linux = "14svyh258iqw8zrbf6nmsc1rfhrsyp6wb2a84fc72lsh28jm7fm0";
aarch64-linux = "0gbpfsysmag9wnka9lgd812wsgrp78fr5l5nwin524zx47cq0fdm";
x86_64-darwin = "0ff77jpsblgbsx03w0yqqsnyrw6g6c90bcj4bvm6idjdxknfnpfv";
aarch64-darwin = "037860zqp9l9gzr3s0d8pbis3xsd26f3a6k63rpvjn76bpwy6swb";
x86_64-linux = "1vbyh6glh4fqcx8d8x2jp88nzl9922dj709zgwhvy858s2m30ymz";
aarch64-linux = "18gc1kyxj4j6vikxpif4a1b6l629m0lnhdzmlwx5i2v0l18drvbp";
x86_64-darwin = "02g431xgjw8gwa823kkxnzhg1cgswi3nlkv54mzkjxbhw856qa4z";
aarch64-darwin = "06x8mdxmbmhg78jzsf0n83cwmp2czp74ssh616ikqf1r8v5l0h2p";
}
.${stdenv.hostPlatform.system} or (throw "unsupported system ${stdenv.hostPlatform.system}");
};

View file

@ -1,11 +1,11 @@
{
lib,
stdenv,
fetchurl,
fetchFromGitHub,
pkg-config,
makeself,
yasm,
fuse,
fuse3,
wxwidgets_3_2,
lvm2,
replaceVars,
@ -21,9 +21,11 @@ stdenv.mkDerivation (finalAttrs: {
pname = "veracrypt";
version = "1.26.29";
src = fetchurl {
url = "https://launchpad.net/veracrypt/trunk/${finalAttrs.version}/+download/VeraCrypt_${finalAttrs.version}_Source.tar.bz2";
hash = "sha256-YIJnMeKYK0vSMeOTDoWkQ5EWljhnGhsgDFGPjItGyyo=";
src = fetchFromGitHub {
owner = "veracrypt";
repo = "VeraCrypt";
tag = "VeraCrypt_${finalAttrs.version}";
hash = "sha256-Q+WUz8F63cP9/KlZUn9xLu2V9wO4FeY7AtErE1T9Km4=";
};
patches = [
@ -40,7 +42,9 @@ stdenv.mkDerivation (finalAttrs: {
./nix-system-paths.patch
];
sourceRoot = "src";
sourceRoot = "${finalAttrs.src.name}/src";
buildFlags = [ "WITHFUSE3=1" ];
nativeBuildInputs = [
makeself
@ -49,7 +53,7 @@ stdenv.mkDerivation (finalAttrs: {
wrapGAppsHook3
];
buildInputs = [
fuse
fuse3
lvm2
wxwidgets_3_2
pcsclite
@ -70,10 +74,12 @@ stdenv.mkDerivation (finalAttrs: {
meta = {
description = "Free Open-Source filesystem on-the-fly encryption";
homepage = "https://www.veracrypt.fr/";
license = with lib.licenses; [
asl20 # and
unfree # TrueCrypt License version 3.0
];
license =
with lib.licenses;
AND [
asl20 # and
unfree # TrueCrypt License version 3.0
];
maintainers = [ lib.maintainers.ryand56 ];
platforms = lib.platforms.linux;
};

View file

@ -13,7 +13,7 @@
pipewire,
libpulseaudio,
autoPatchelfHook,
pnpm_10_29_2,
pnpm_10,
fetchPnpmDeps,
pnpmConfigHook,
nodejs,
@ -46,7 +46,7 @@ stdenv.mkDerivation (finalAttrs: {
src
patches
;
pnpm = pnpm_10_29_2;
pnpm = pnpm_10;
fetcherVersion = 3;
hash = "sha256-Ue1K1KmRi4gF7E519deVY7QH+22dqlECMjdA7Z7qDCA=";
};
@ -54,7 +54,7 @@ stdenv.mkDerivation (finalAttrs: {
nativeBuildInputs = [
nodejs
pnpmConfigHook
pnpm_10_29_2
pnpm_10
jq
]
++ lib.optionals stdenv.hostPlatform.isLinux [

View file

@ -22,7 +22,7 @@ python3Packages.buildPythonPackage rec {
dependencies = with python3Packages; [
pyyaml
psutil
mpd2
python-mpd2
requests
];

View file

@ -29,17 +29,17 @@
buildPythonPackage (finalAttrs: {
pname = "aiosendspin";
version = "4.4.0";
version = "6.0.5";
pyproject = true;
src = fetchFromGitHub {
owner = "Sendspin";
repo = "aiosendspin";
tag = finalAttrs.version;
hash = "sha256-7edFCGNbECW5rrTbF7vJ4lJUc2IrQZD9VTR3IxJRP08=";
hash = "sha256-veX6MZSqEQb+tEqZTEgdCObLdaVPJEdTFW5Ivmb0TNQ=";
};
# https://github.com/Sendspin/aiosendspin/blob/4.4.0/pyproject.toml#L7
# https://github.com/Sendspin/aiosendspin/blob/5.3.0/pyproject.toml#L27
postPatch = ''
substituteInPlace pyproject.toml \
--replace-fail 'version = "0.0.0"' 'version = "${finalAttrs.version}"'
@ -54,20 +54,26 @@ buildPythonPackage (finalAttrs: {
dependencies = [
aiohttp
av
mashumaro
numpy
orjson
pillow
zeroconf
];
optional-dependencies = {
server = [
av
numpy
pillow
];
};
nativeCheckInputs = [
pytest-aiohttp
pytest-cov-stub
pytest-xdist
pytestCheckHook
];
]
++ finalAttrs.passthru.optional-dependencies.server;
pythonImportsCheck = [
"aiosendspin"

View file

@ -0,0 +1,44 @@
{
lib,
setproctitle,
uvloop,
aiovban,
buildPythonPackage,
pyaudio,
setuptools,
}:
buildPythonPackage (finalAttrs: {
pname = "aiovban-pyaudio";
inherit (aiovban) version pyproject src;
sourceRoot = "${aiovban.src.name}/aiovban_pyaudio";
build-system = [ setuptools ];
dependencies = [
aiovban
pyaudio
];
pythonImportsCheck = [
"aiovban_pyaudio"
];
optional-dependencies = {
cli = [
setproctitle
uvloop
];
};
__structuredAttrs = true;
meta = {
changelog = "https://github.com/wmbest2/aiovban/releases/tag/${finalAttrs.src.tag}";
description = "PyAudio wrapper for aiovban";
homepage = "https://github.com/wmbest2/aiovban/tree/main/aiovban_pyaudio";
license = lib.licenses.mit;
inherit (aiovban.meta) maintainers;
};
})

View file

@ -1,32 +1,52 @@
{
lib,
aiovban-pyaudio,
buildPythonPackage,
fetchFromGitHub,
setuptools,
pytestCheckHook,
textual,
uv-build,
music-assistant,
}:
buildPythonPackage (finalAttrs: {
pname = "aiovban";
version = "0.7.0";
version = "1.1.0";
pyproject = true;
src = fetchFromGitHub {
owner = "wmbest2";
repo = "aiovban";
tag = "v${finalAttrs.version}";
hash = "sha256-0mhpmpsV0zSOWbhrPF9bfR9xAtJe6X57guWDZWMH6f0=";
hash = "sha256-yPp4+aQGJISTIFI/OoO7+mAR8daEytxrQn21SsFWEyc=";
};
build-system = [ setuptools ];
postPatch = ''
substituteInPlace pyproject.toml \
--replace-fail "uv_build>=0.10.0,<0.11.0" "uv_build"
'';
nativeCheckInputs = [ pytestCheckHook ];
build-system = [ uv-build ];
dependencies = [ textual ];
# avoid infinite recursion with aiovban-pyaudio
doCheck = false;
nativeCheckInputs = [
aiovban-pyaudio
pytestCheckHook
]
++ aiovban-pyaudio.optional-dependencies.cli;
pythonImportsCheck = [
"aiovban"
];
passthru.tests = finalAttrs.finalPackage.overrideAttrs (_: {
doInstallCheck = true;
});
meta = {
changelog = "https://github.com/wmbest2/aiovban/releases/tag/${finalAttrs.src.tag}";
description = "Asyncio VBAN Protocol Wrapper";

View file

@ -0,0 +1,73 @@
{
lib,
buildPythonPackage,
einops,
fetchFromGitHub,
fetchurl,
numpy,
pytestCheckHook,
rotary-embedding-torch,
setuptools,
soundfile,
soxr,
torch,
torchaudio,
writableTmpDirAsHomeHook,
}:
buildPythonPackage (finalAttrs: {
pname = "beat-this";
version = "1.1.0";
pyproject = true;
src = fetchFromGitHub {
owner = "CPJKU";
repo = "beat_this";
tag = "v${finalAttrs.version}";
hash = "sha256-AEcDptPn5FUBb8+FuYSKjd00sFY5z6bS2iEOU64jido=";
};
build-system = [ setuptools ];
dependencies = [
einops
numpy
rotary-embedding-torch
soxr
torch
torchaudio
];
nativeCheckInputs = [
pytestCheckHook
soundfile
writableTmpDirAsHomeHook
];
preCheck = ''
mkdir -p $HOME/.cache/torch/hub/checkpoints/
cp ${finalAttrs.passthru.final0Ckpt} $HOME/.cache/torch/hub/checkpoints/beat_this-final0.ckpt
'';
pythonImportsCheck = [ "beat_this" ];
passthru = {
# The program prints the download URLs in the error message when it cannot download things in the nix sandbox
final0Ckpt = fetchurl {
url = "https://cloud.cp.jku.at/public.php/dav/files/7ik4RrBKTS273gp/final0.ckpt";
hash = "sha256-jDKLRfWdjdPf8hklP/ao1kgr5X0BM6KRQOL+u/jrgzE=";
};
small0Ckpt = fetchurl {
url = "https://cloud.cp.jku.at/public.php/dav/files/7ik4RrBKTS273gp/small0.ckpt";
hash = "sha256-YHS+LE1JDF9hAfzDdKHscq6TRW4ju2AZeDuEn13H1Hs=";
};
};
meta = {
description = "Accurate and general beat tracker";
homepage = "https://github.com/CPJKU/beat_this";
changelog = "https://github.com/CPJKU/beat_this/blob/main/CHANGELOG.md";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ SuperSandro2000 ];
};
})

View file

@ -70,7 +70,7 @@
librosa,
mp3gain,
mp3val,
mpd2,
python-mpd2,
pyacoustid,
pylast,
pyxdg,
@ -350,9 +350,9 @@ buildPythonPackage (finalAttrs: {
mbpseudo = { };
metasync.testPaths = [ ];
missing.testPaths = [ ];
mpdstats.propagatedBuildInputs = [ mpd2 ];
mpdstats.propagatedBuildInputs = [ python-mpd2 ];
mpdupdate = {
propagatedBuildInputs = [ mpd2 ];
propagatedBuildInputs = [ python-mpd2 ];
testPaths = [ ];
};
musicbrainz = { };

View file

@ -0,0 +1,132 @@
{
lib,
buildPythonPackage,
fastmcp,
# build-system
hatchling,
uv-dynamic-versioning,
# dependencies
anthropic,
authlib,
azure-identity,
cyclopts,
exceptiongroup,
google-genai,
griffelib,
httpx,
jsonref,
jsonschema-path,
mcp,
openai,
openapi-pydantic,
opentelemetry-api,
packaging,
platformdirs,
py-key-value-aio,
pydantic,
pydantic-monty,
pydantic-settings,
pydocket,
pyjwt,
pyperclip,
python-dotenv,
python-multipart,
pyyaml,
rich,
typing-extensions,
uncalled-for,
uvicorn,
watchfiles,
websockets,
}:
buildPythonPackage (finalAttrs: {
pname = "fastmcp-slim";
inherit (fastmcp) version src;
sourceRoot = "${finalAttrs.src.name}/fastmcp_slim";
pyproject = true;
build-system = [
hatchling
uv-dynamic-versioning
];
dependencies = [
platformdirs
pydantic
pydantic-settings
python-dotenv
rich
typing-extensions
]
++ pydantic.optional-dependencies.email;
optional-dependencies = {
anthropic = [ anthropic ];
apps = [
# unpackaged prefab-ui
];
azure = [
azure-identity
pyjwt
];
client = [
authlib
]
++ finalAttrs.passthru.optional-dependencies.mcp
++ py-key-value-aio.optional-dependencies.filetree
++ py-key-value-aio.optional-dependencies.keyring
++ py-key-value-aio.optional-dependencies.memory;
code-mode = [ pydantic-monty ];
gemini = [
google-genai
jsonref
];
mcp = [
exceptiongroup
httpx
mcp
opentelemetry-api
];
openai = [ openai ];
server = [
authlib
cyclopts
griffelib
jsonref
jsonschema-path
openapi-pydantic
packaging
py-key-value-aio
pyperclip
python-multipart
pyyaml
uncalled-for
uvicorn
watchfiles
websockets
]
++ finalAttrs.passthru.optional-dependencies.mcp
++ py-key-value-aio.optional-dependencies.filetree
++ py-key-value-aio.optional-dependencies.keyring
++ py-key-value-aio.optional-dependencies.memory;
tasks = [
pydocket
];
};
pythonImportsCheck = [ "fastmcp" ];
# tests are done in fastmcp package
doCheck = false;
meta = {
description = "Dependency-slim FastMCP package";
changelog = "https://github.com/jlowin/fastmcp/releases/tag/${finalAttrs.src.tag}";
homepage = "https://github.com/PrefectHQ/fastmcp/tree/main/fastmcp_slim";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ GaetanLepage ];
};
})

View file

@ -10,54 +10,26 @@
uv-dynamic-versioning,
# dependencies
anthropic,
authlib,
azure-identity,
cyclopts,
exceptiongroup,
griffelib,
httpx,
jsonref,
jsonschema-path,
mcp,
fakeredis,
google-genai,
openai,
openapi-pydantic,
opentelemetry-api,
packaging,
platformdirs,
py-key-value-aio,
pydantic,
pydantic-monty,
pydocket,
pyjwt,
pyperclip,
python-dotenv,
pyyaml,
rich,
uncalled-for,
uvicorn,
watchfiles,
websockets,
fastmcp-slim,
# tests
dirty-equals,
email-validator,
fastapi,
inline-snapshot,
lupa,
opentelemetry-sdk,
psutil,
pytest-asyncio,
pytest-examples,
pytest-httpx,
pytest-rerunfailures,
pytest-timeout,
pytest-xdist,
pytestCheckHook,
}:
buildPythonPackage (finalAttrs: {
pname = "fastmcp";
version = "3.2.4";
version = "3.3.1";
pyproject = true;
__structuredAttrs = true;
@ -65,7 +37,7 @@ buildPythonPackage (finalAttrs: {
owner = "PrefectHQ";
repo = "fastmcp";
tag = "v${finalAttrs.version}";
hash = "sha256-rJpxPvqAaa6/vXhG1+R9dI32cY/54e6I+F/zyBVoqBM=";
hash = "sha256-1W5NbWIULxFXGSozZEeITcPt1EbY6IsJLQdyevcn9BI=";
};
build-system = [
@ -73,121 +45,66 @@ buildPythonPackage (finalAttrs: {
uv-dynamic-versioning
];
pythonRelaxDeps = [
"py-key-value-aio"
"pydocket"
];
dependencies = [
authlib
cyclopts
exceptiongroup
griffelib
httpx
jsonref
jsonschema-path
mcp
openapi-pydantic
opentelemetry-api
packaging
platformdirs
py-key-value-aio
pydantic
pyperclip
python-dotenv
pyyaml
rich
uncalled-for
uvicorn
watchfiles
websockets
fastmcp-slim
]
++ py-key-value-aio.optional-dependencies.filetree
++ py-key-value-aio.optional-dependencies.keyring
++ py-key-value-aio.optional-dependencies.memory
++ pydantic.optional-dependencies.email;
++ fastmcp-slim.optional-dependencies.client
++ fastmcp-slim.optional-dependencies.server;
optional-dependencies = {
anthropic = [ anthropic ];
azure = [
azure-identity
pyjwt
];
code-mode = [ pydantic-monty ];
gemini = [ google-genai ];
openai = [ openai ];
tasks = [
pydocket
fakeredis
]
++ fakeredis.optional-dependencies.lua;
anthropic = fastmcp-slim.optional-dependencies.anthropic;
apps = fastmcp-slim.optional-dependencies.apps;
azure = fastmcp-slim.optional-dependencies.azure;
code-mode = fastmcp-slim.optional-dependencies.code-mode;
gemini = fastmcp-slim.optional-dependencies.gemini;
openai = fastmcp-slim.optional-dependencies.openai;
tasks = fastmcp-slim.optional-dependencies.tasks;
};
pythonImportsCheck = [ "fastmcp" ];
nativeCheckInputs = [
dirty-equals
email-validator
fastapi
inline-snapshot
lupa
opentelemetry-sdk
psutil
pytest-asyncio
pytest-examples
pytest-httpx
pytest-rerunfailures
pytest-timeout
pytest-xdist
pytestCheckHook
writableTmpDirAsHomeHook
]
++ finalAttrs.passthru.optional-dependencies.anthropic
++ finalAttrs.passthru.optional-dependencies.apps
++ finalAttrs.passthru.optional-dependencies.azure
++ finalAttrs.passthru.optional-dependencies.code-mode
++ finalAttrs.passthru.optional-dependencies.gemini
++ finalAttrs.passthru.optional-dependencies.openai
++ finalAttrs.passthru.optional-dependencies.tasks
++ inline-snapshot.optional-dependencies.dirty-equals;
disabledTests = [
# requires internet
"test_github_api_schema_performance"
# RuntimeError: Client failed to connect: Connection closed
"test_keep_alive_maintains_session_across_multiple_calls"
"test_keep_alive_false_starts_new_session_across_multiple_calls"
"test_keep_alive_false_exit_scope_kills_server"
"test_keep_alive_starts_new_session_if_manually_closed"
"test_keep_alive_true_exit_scope_kills_client"
"test_keep_alive_maintains_session_if_reentered"
"test_close_session_and_try_to_use_client_raises_error"
"test_parallel_calls"
"test_single_server_config_include_tags_filtering"
"test_run_mcp_config"
"test_settings_from_environment_issue_1749"
# requires uv
"test_uv_transport"
"test_uv_transport_module"
"test_github_api_schema_performance"
# Hang forever
"test_nested_streamable_http_server_resolves_correctly"
# RuntimeError: Client failed to connect: Timed out while waiting for response
"test_timeout"
"test_timeout_tool_call_overrides_client_timeout_even_if_lower"
# Requires prefab-ui (optional dependency)
"test_auto_registers_renderer_resource"
"test_auto_synthesizes_renderer_resource"
"test_equivalent_to_app_true"
# Requires pydocket (tasks optional dependency, not in test inputs)
"test_mounted_server_does_not_have_docket"
"test_get_tasks_returns_task_eligible_tools"
"test_task_teardown_does_not_hang"
"test_background_task_can_read_snapshotted_request_headers"
"test_background_task_current_http_dependencies_restore_headers"
"test_task_execution_auto_populated_for_task_enabled_tool"
"test_function_tool_task_config_still_works"
"test_async_partial_with_task_true_does_not_raise"
"test_sync_partial_with_task_true_raises"
"test_is_docket_available"
"test_require_docket_passes_when_installed"
# Shared dependency caching differs in sandbox
"TestSharedDependencies"
"TestPrefabAppConfig"
"test_doc_examples_quality"
# AssertionError: assert 'INFO' == 'DEBUG'
"test_temporary_settings"
@ -195,36 +112,21 @@ buildPythonPackage (finalAttrs: {
# Subprocess-based multi-client tests fail in sandbox
"test_multi_client"
"test_multi_server"
"test_single_server_config_include_tags_filtering"
"test_server_starts_without_auth"
"test_canonical_multi_client_with_transforms"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
# RuntimeError: Server failed to start after 10 attempts
"test_unauthorized_access"
"test_stateless_proxy"
++ lib.optionals stdenv.hostPlatform.isAarch64 [
# floating point error
"test_index_retrieval[float32-quantization1-1-metric0-3]"
];
disabledTestPaths = [
# Requires prefab-ui (optional dependency)
"tests/apps"
"tests/docs/test_doc_examples.py"
"tests/test_apps_prefab.py"
"tests/test_fastmcp_app.py"
# Subprocess crash recovery tests are flaky in sandbox
"tests/client/test_stdio.py"
# Requires pydocket/fakeredis (tasks optional dependency, not in test inputs)
"tests/server/tasks"
"tests/server/test_server_docket.py"
"tests/client/tasks"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
# RuntimeError: Server failed to start after 10 attempts
"tests/client/auth/test_oauth_client.py"
"tests/client/test_sse.py"
"tests/client/test_streamable_http.py"
"tests/server/auth/test_jwt_provider.py"
"tests/server/http/test_http_dependencies.py"
];
__darwinAllowLocalNetworking = true;

View file

@ -0,0 +1,54 @@
{
lib,
python,
buildPythonPackage,
fetchPypi,
setuptools,
numpy,
patchelfUnstable,
pyyaml,
nix-update-script,
}:
buildPythonPackage (finalAttrs: {
pname = "hebi-py";
version = "2.7.9";
pyproject = true;
src = fetchPypi {
pname = "hebi-py";
inherit (finalAttrs) version;
hash = "sha256-7B0oxG1CVDTUVDFTJpuYvaCj+HnCL/2zmsD33W4nTLs=";
};
__structuredAttrs = true;
strictDeps = true;
build-system = [
setuptools
patchelfUnstable # Depends on --clear-execstack which is not in any tagged release yet
];
dependencies = [
numpy
pyyaml
];
doCheck = false; # no tests
postFixup = ''
for lib in $out/${python.sitePackages}/hebi/lib/linux_x86_64/libhebi.so*; do
patchelf --clear-execstack "$lib"
done
'';
pythonImportsCheck = [ "hebi" ];
passthru.updateScript = nix-update-script { };
meta = {
description = "Python library for the Hebi Robotics API";
homepage = "https://docs.hebi.us/";
license = lib.licenses.unfree;
platforms = [ "x86_64-linux" ];
maintainers = with lib.maintainers; [ pandapip1 ];
};
})

View file

@ -0,0 +1,80 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
fetchurl,
librosa,
numpy,
pytestCheckHook,
setuptools,
scipy,
stdenv,
torch,
writableTmpDirAsHomeHook,
}:
let
choice = fetchurl {
url = "https://librosa.org/data/audio/admiralbob77_-_Choice_-_Drum-bass.ogg";
hash = "sha256-rGRPlkXnwVF05KT4Vh5NFEjX9uWf9rBVazEOu87Yebw=";
};
vibeace = fetchurl {
url = "https://librosa.org/data/audio/Kevin_MacLeod_-_Vibe_Ace.ogg";
hash = "sha256-bCOu091apX8rFlLsq2jRXZuCrSV/VOY56yiAygm8EYo=";
};
in
buildPythonPackage (finalAttrs: {
pname = "nnaudio";
version = "0.3.4";
pyproject = true;
src = fetchFromGitHub {
owner = "KinWaiCheuk";
repo = "nnAudio";
rev = "e77d9f874cf37b273f44f68aefbd32fb0b979912";
hash = "sha256-uJySa2A7IbuY/9Wq/w9gRkBk1NhMrhipyclOWO5koHE=";
};
sourceRoot = "${finalAttrs.src.name}/Installation";
build-system = [ setuptools ];
dependencies = [
numpy
scipy
torch
];
nativeCheckInputs = [
librosa
pytestCheckHook
writableTmpDirAsHomeHook
];
preCheck = ''
mkdir -p $HOME/.cache/librosa/
cp ${choice} $HOME/.cache/librosa/admiralbob77_-_Choice_-_Drum-bass.ogg
cp ${vibeace} $HOME/.cache/librosa/Kevin_MacLeod_-_Vibe_Ace.ogg
export NUMBA_CACHE_DIR=$(mktemp -d)
'';
disabledTests = [
# AttributeError: module 'scipy.signal' has no attribute 'blackmanharris'
"test_cfp_original[cpu]"
"test_cfp_new[cpu]"
# Test fixture matrix has other values
"test_vqt_gamma_zero[cpu]"
]
++ lib.optionals (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64) [
# Test fixture matrix has other values
"test_cqt_1992_v2_log[cpu]"
];
pythonImportsCheck = [ "nnAudio" ];
meta = {
description = "Fast GPU audio processing toolbox with 1D convolutional neural network";
homepage = "https://github.com/KinWaiCheuk/nnAudio";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ SuperSandro2000 ];
};
})

View file

@ -1,23 +1,24 @@
{
lib,
aiohttp,
buildPythonPackage,
fetchFromGitHub,
setuptools,
aiohttp,
mashumaro,
requests,
pytest-asyncio,
pytestCheckHook,
setuptools,
}:
buildPythonPackage rec {
pname = "py-opensonic";
version = "9.1.0";
version = "10.0.0";
pyproject = true;
src = fetchFromGitHub {
owner = "khers";
repo = "py-opensonic";
tag = "v${version}";
hash = "sha256-xZHlI62QoKkR4sZf0GUEzUGMpG2urHooPs8GvVyqpIQ=";
hash = "sha256-LT6pTtXCUMhk6uV9Y2inlAuP8osWUwsWOH7/yOW2OXI=";
};
build-system = [ setuptools ];
@ -25,10 +26,16 @@ buildPythonPackage rec {
dependencies = [
aiohttp
mashumaro
requests
];
doCheck = false; # no tests
pythonRelaxDeps = [
"mashumaro"
];
nativeCheckInputs = [
pytest-asyncio
pytestCheckHook
];
pythonImportsCheck = [
"libopensonic"

View file

@ -1,25 +1,25 @@
{
aiohttp,
aioresponses,
buildPythonPackage,
fetchFromGitHub,
hatchling,
lib,
lxml,
mocket,
pytest-asyncio,
pytestCheckHook,
}:
buildPythonPackage rec {
pname = "pyblu";
version = "2.0.6";
version = "2.0.8";
pyproject = true;
src = fetchFromGitHub {
owner = "LouisChrist";
repo = "pyblu";
tag = "v${version}";
hash = "sha256-qLB9o40tRYgmbYJEEx8r3SodH1hB8MM4yLXbdKIs/xA=";
hash = "sha256-uYYiu0V491eHg47Rc9HGEiddONnFqGuPj34Mkfk5Gnk=";
};
pythonRelaxDeps = [ "aiohttp" ];
@ -34,11 +34,17 @@ buildPythonPackage rec {
pythonImportsCheck = [ "pyblu" ];
nativeCheckInputs = [
aioresponses
mocket
pytest-asyncio
pytestCheckHook
];
disabledTestPaths = [
# all tests fail with:
# aiohttp.client_exceptions.ClientConnectorDNSError: Cannot connect to host node:11000 ssl:default [Could not contact DNS servers]
"tests/test_player.py"
];
meta = {
changelog = "https://github.com/LouisChrist/pyblu/releases/tag/${src.tag}";
description = "BluOS API client";

View file

@ -16,7 +16,7 @@
dbus-fast,
iwlib,
libcst,
mpd2,
python-mpd2,
prompt-toolkit,
psutil,
pulsectl-asyncio,
@ -118,7 +118,7 @@ buildPythonPackage (finalAttrs: {
dbus-fast
iwlib
libcst
mpd2
python-mpd2
# prompt-toolkit used for qtile repl
# see https://github.com/qtile/qtile/blob/master/libqtile/scripts/repl.py
prompt-toolkit

View file

@ -8,6 +8,7 @@
numpy,
pulsectl-asyncio,
pychromecast,
pytest-asyncio,
pytestCheckHook,
qrcode,
readchar,
@ -18,14 +19,14 @@
buildPythonPackage (finalAttrs: {
pname = "sendspin";
version = "5.9.0";
version = "7.4.0";
pyproject = true;
src = fetchFromGitHub {
owner = "Sendspin";
repo = "sendspin-cli";
tag = finalAttrs.version;
hash = "sha256-g+qw3mDHij50CEDKGjltMGNZoI6/HeJQ8zq8NSvD3Ls=";
hash = "sha256-B375jsOik0IdLtozH3t3hZKqoO+dtqkzX2bk5YuoO9Y=";
};
postPatch = ''
@ -45,20 +46,23 @@ buildPythonPackage (finalAttrs: {
readchar
rich
sounddevice
];
]
++ aiosendspin.optional-dependencies.server;
optional-dependencies = {
cast = [ pychromecast ];
};
nativeCheckInputs = [ pytestCheckHook ];
nativeCheckInputs = [
pytest-asyncio
pytestCheckHook
];
pythonImportsCheck = [ "sendspin" ];
disabledTests = [
# AssertionError: assert None == (1, 'Digital')
"test_alsa_available_for_hw_device_with_mixer"
"test_hifiberry_dac_discovery"
# requires internet
"test_multi_worker_starts_and_serves_status"
];
meta = {

View file

@ -4,6 +4,7 @@
buildPythonPackage,
fetchPypi,
setuptools,
setuptools-scm,
cffi,
numpy,
portaudio,
@ -12,15 +13,18 @@
buildPythonPackage rec {
pname = "sounddevice";
version = "0.5.3";
version = "0.5.5";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-y6wrYBmPurhFM2l+fEkEzIlexp1fs5c1VsnrdKRimyw=";
hash = "sha256-Ikh7ZRmMtb8iCHVRBbUk94rRc+Wra0Rb2rHJifZpjfM=";
};
build-system = [ setuptools ];
build-system = [
setuptools
setuptools-scm
];
dependencies = [
cffi
@ -43,7 +47,8 @@ buildPythonPackage rec {
meta = {
description = "Play and Record Sound with Python";
homepage = "http://python-sounddevice.rtfd.org/";
homepage = "https://python-sounddevice.readthedocs.io/";
changelog = "https://github.com/spatialaudio/python-sounddevice/releases/tag/${version}";
license = with lib.licenses; [ mit ];
};
}

View file

@ -1,8 +1,8 @@
diff --git a/sounddevice.py b/sounddevice.py
index 0974289..2d56c28 100644
--- a/sounddevice.py
+++ b/sounddevice.py
@@ -58,32 +58,7 @@ from ctypes.util import find_library as _find_library
diff --git a/src/sounddevice.py b/src/sounddevice.py
index 00fc6f8..72abede 100644
--- a/src/sounddevice.py
+++ b/src/sounddevice.py
@@ -59,36 +59,7 @@
from _sounddevice import ffi as _ffi
@ -17,22 +17,26 @@ index 0974289..2d56c28 100644
- break
- else:
- raise OSError('PortAudio library not found')
- _lib = _ffi.dlopen(_libname)
- _lib: ... = _ffi.dlopen(_libname)
-except OSError:
- if _platform.system() == 'Darwin':
- _libname = 'libportaudio.dylib'
- elif _platform.system() == 'Windows':
- if 'SD_ENABLE_ASIO' in _os.environ:
- _libname = 'libportaudio' + _platform.architecture()[0] + '-asio.dll'
- if _platform.machine().lower() in ('arm64', 'aarch64'):
- _platform_suffix = 'arm64'
- else:
- _libname = 'libportaudio' + _platform.architecture()[0] + '.dll'
- _platform_suffix = _platform.architecture()[0]
- if 'SD_ENABLE_ASIO' in _os.environ:
- _libname = 'libportaudio' + _platform_suffix + '-asio.dll'
- else:
- _libname = 'libportaudio' + _platform_suffix + '.dll'
- else:
- raise
- import _sounddevice_data
- _libname = _os.path.join(
- next(iter(_sounddevice_data.__path__)), 'portaudio-binaries', _libname)
- _lib = _ffi.dlopen(_libname)
+_lib = _ffi.dlopen('@portaudio@')
- _lib: ... = _ffi.dlopen(_libname)
+_lib: ... = _ffi.dlopen('@portaudio@')
_sampleformats = {
_sampleformats: ... = {
'float32': _lib.paFloat32,

View file

@ -4245,7 +4245,7 @@
];
"mpd" =
ps: with ps; [
mpd2
python-mpd2
];
"mqtt" =
ps: with ps; [

View file

@ -1470,6 +1470,7 @@ mapAliases {
mailnagWithPlugins = throw "mailnagWithPlugins has been removed because mailnag has been marked as broken since 2022."; # Added 2025-10-12
makeOverridable = warnAlias "'makeOverridable' has been removed from pkgs, use `lib.makeOverridable` instead" lib.makeOverridable; # Added 2025-10-30
manaplus = throw "manaplus has been removed, as it was broken"; # Added 2025-08-25
mangowc = throw "'mangowc' has been renamed to 'mango'"; # Added 2026-06-23
manrope = throw "'manrope' has been removed because its source has been pulled"; # Added 2025-12-20
mariadb-client = throw "mariadb-client has been renamed to mariadb.client"; # Converted to throw 2025-10-26
marwaita-manjaro = throw "'marwaita-manjaro' has been renamed to/replaced by 'marwaita-teal'"; # Converted to throw 2025-10-27
@ -2245,7 +2246,8 @@ mapAliases {
transmission_3-gtk = throw "transmission_3-gtk has been removed in favour of transmission_4-gtk. Note that upgrade caused data loss for some users so backup is recommended (see NixOS 24.11 release notes for details)"; # Added 2025-10-26
transmission_3-qt = throw "transmission_3-qt has been removed in favour of transmission_4-qt. Note that upgrade caused data loss for some users so backup is recommended (see NixOS 24.11 release notes for details)"; # Added 2025-10-26
transmission_3_noSystemd = throw "transmission_3_noSystemd has been removed in favour of transmission_4. Note that upgrade caused data loss for some users so backup is recommended (see NixOS 24.11 release notes for details)"; # Added 2025-10-26
transmission_4-qt = transmission_4-qt5; # Added 2026-06-05
transmission_4-qt5 = lib.warnOnInstantiate "'transmission_4-qt5' has been removed in favour of 'transmission_4-qt'" transmission_4-qt; # Added 2026-06-25
transmission_4-qt6 = lib.warnOnInstantiate "'transmission_4-qt6' has been renamed to 'transmission_4-qt'" transmission_4-qt; # Added 2026-06-25
travis = throw "'travis' has been removed because upstream has stopped maintaining it, and it contains dependencies with security vulnerabilities."; # Added 2026-02-14
treefmt2 = throw "'treefmt2' has been renamed to/replaced by 'treefmt'"; # Converted to throw 2025-10-27
tremor-language-server = throw "'tremor-language-server' has been removed because it is unmaintained"; # Added 2025-11-17

View file

@ -1855,6 +1855,8 @@ with pkgs;
cffconvert = python3Packages.toPythonApplication python3Packages.cffconvert;
aiovban-pyaudio = python3Packages.toPythonApplication python3Packages.aiovban-pyaudio;
clickhouse-lts = callPackage ../by-name/cl/clickhouse/lts.nix { };
cmdpack = callPackages ../tools/misc/cmdpack { };

View file

@ -371,6 +371,7 @@ mapAliases {
monarchmoney = throw "'monarchmoney' has been renamed to/replaced by 'monarchmoneycommunity'"; # Added 2026-03-05
monkeytype = throw "'monkeytype' has been removed as it was unmaintained upstream"; # Added 2026-04-19
moretools = "'moretools' has been removed because it is unmaintained"; # Added 2026-01-19
mpd2 = warnAlias "'mpd2' has been renamed to 'python-mpd2'"; # Added 2026-06-14
mpire = throw "'mpire' has been removed because it is unused in Nixpkgs"; # Added 2026-06-22
msldap-bad = throw "'msldap-bad' has been renamed to/replaced by 'badldap'"; # added 2025-11-06
mullvad-closest = throw "'mullvad-closest' has been removed as it was unmaintained. Consider using 'mullvad-compass' instead."; # Added 2026-01-13

View file

@ -578,6 +578,8 @@ self: super: with self; {
aiovban = callPackage ../development/python-modules/aiovban { };
aiovban-pyaudio = callPackage ../development/python-modules/aiovban-pyaudio { };
aiovlc = callPackage ../development/python-modules/aiovlc { };
aiovodafone = callPackage ../development/python-modules/aiovodafone { };
@ -2030,6 +2032,8 @@ self: super: with self; {
beartype = callPackage ../development/python-modules/beartype { };
beat-this = callPackage ../development/python-modules/beat-this { };
beaupy = callPackage ../development/python-modules/beaupy { };
beautiful-date = callPackage ../development/python-modules/beautiful-date { };
@ -5596,6 +5600,8 @@ self: super: with self; {
fastmcp = callPackage ../development/python-modules/fastmcp { };
fastmcp-slim = callPackage ../development/python-modules/fastmcp-slim { };
fastmri = callPackage ../development/python-modules/fastmri { };
fastnlo-toolkit = toPythonModule (
@ -7199,6 +7205,8 @@ self: super: with self; {
hebg = callPackage ../development/python-modules/hebg { };
hebi-py = callPackage ../development/python-modules/hebi-py { };
hegel-ip-client = callPackage ../development/python-modules/hegel-ip-client { };
helion = callPackage ../development/python-modules/helion { };
@ -10550,8 +10558,6 @@ self: super: with self; {
callPackage ../development/python-modules/mozjpeg_lossless_optimization
{ };
mpd2 = callPackage ../development/python-modules/mpd2 { };
mpegdash = callPackage ../development/python-modules/mpegdash { };
mpi-pytest = callPackage ../development/python-modules/mpi-pytest { };
@ -11466,6 +11472,8 @@ self: super: with self; {
nmcli = callPackage ../development/python-modules/nmcli { };
nnaudio = callPackage ../development/python-modules/nnaudio { };
nnpdf = toPythonModule (pkgs.nnpdf.override { python3 = python; });
noaa-coops = callPackage ../development/python-modules/noaa-coops { };
@ -16308,6 +16316,8 @@ self: super: with self; {
python-motionmount = callPackage ../development/python-modules/python-motionmount { };
python-mpd2 = callPackage ../development/python-modules/python-mpd2 { };
python-mpv-jsonipc = callPackage ../development/python-modules/python-mpv-jsonipc { };
python-multipart = callPackage ../development/python-modules/python-multipart { };