Merge staging-next into staging

This commit is contained in:
nixpkgs-ci[bot]
2026-02-19 08:06:05 +00:00
committed by GitHub
21 changed files with 342 additions and 160 deletions
+24
View File
@@ -1003,3 +1003,27 @@ fetchtorrent {
- `config`: When using `transmission` as the `backend`, a json configuration can
be supplied to transmission. Refer to the [upstream documentation](https://github.com/transmission/transmission/blob/main/docs/Editing-Configuration-Files.md) for information on how to configure.
## `fetchItchIo` {#fetchitchio}
`fetchItchIo` is a fetcher for downloading game assets from [itch.io](https://itch.io/). It accepts these arguments:
- `gameUrl`: The store page URL of the game.
- `upload`: The numerical ID of the asset to download. To find the upload ID of an asset, check the basename of the request URL when you download the asset using a browser.
- `hash`.
- `name` (optional): The derivation name, often the filename of the asset.
- `extraMessage` (optional): Extra message printed if the API key is not provided or if the account did not purchase the game.
For this fetcher to work, the environment variable `NIX_ITCHIO_API_KEY` must be set for the nix building process (which is nix-daemon in multi-user mode), and it must belong to an account that has bought the game if it is behind a paywall.
To get your API key, go to the ["API key" section](https://itch.io/user/settings/api-keys) of your account settings on itch.io.
```nix
{ fetchItchIo }:
fetchItchIo {
name = "DungeonDuelMonsters-linux-x64.zip";
hash = "sha256-gq2nGwpaStqaVI1pL63xygxOI/z53o+zLwiKizG98Ks=";
gameUrl = "https://mikaygo.itch.io/ddm";
upload = "13371354";
}
```
+3
View File
@@ -1818,6 +1818,9 @@
"fetchtorrent-parameters": [
"index.html#fetchtorrent-parameters"
],
"fetchitchio": [
"index.html#fetchitchio"
],
"chap-trivial-builders": [
"index.html#chap-trivial-builders"
],
@@ -10,13 +10,13 @@
buildMozillaMach rec {
pname = "firefox-devedition";
binaryName = "firefox-devedition";
version = "148.0b14";
version = "148.0b15";
applicationName = "Firefox Developer Edition";
requireSigning = false;
branding = "browser/branding/aurora";
src = fetchurl {
url = "mirror://mozilla/devedition/releases/${version}/source/firefox-${version}.source.tar.xz";
sha512 = "10de6926c3c20fcbffe2f25f97213ac777e4ce3984cb303262ddaef15be24788a40c6064ce8cc138ab3a35ba621efdcd0f6e0a105b2e773f7f14a1d661c10693";
sha512 = "32d7e4b9df739d5bdab2cd54250b1c7546d26b248a62e0bbc71e4b78b12d4e3d6d9451b631a0f18568f2540141786967a33b6543256a6ec6f4f245093d37a5d5";
};
# buildMozillaMach sets MOZ_APP_REMOTINGNAME during configuration, but
+115
View File
@@ -0,0 +1,115 @@
{
lib,
stdenvNoCC,
python3,
}:
lib.extendMkDerivation {
constructDrv = stdenvNoCC.mkDerivation;
excludeDrvArgNames = [
"derivationArgs"
"sha1"
"sha256"
"sha512"
];
extendDrvArgs =
finalAttrs:
lib.fetchers.withNormalizedHash { } (
{
endpoint ? "https://api.itch.io",
# The name of the environment variable that contains the itch.io API key.
# The environment variable needs to be set for the nix building process,
# which is nix-daemon for multi-user mode.
apiKeyVar ? "NIX_ITCHIO_API_KEY",
# The game store page URL in the format of https://{author}.itch.io/{game}
gameUrl,
# The upload ID of the downloadable file.
# To get the upload ID, look at the request URL when you download it.
upload,
# Derivation name.
name ? null,
# The extra message printed when the API key is not provided
# or when the account of the API key did not purchase the game.
extraMessage ? null,
# Show the download URL without actually downloading it, for testing purposes.
# Notice that this can potentially leak the API key.
showUrl ? false,
outputHash ? lib.fakeHash,
outputHashAlgo ? null,
preFetch ? "",
postFetch ? "",
nativeBuildInputs ? [ ],
impureEnvVars ? [ ],
passthru ? { },
meta ? { },
preferLocalBuild ? true,
derivationArgs ? { },
}:
let
finalHashHasColon = lib.hasInfix ":" finalAttrs.hash;
finalHashColonMatch = lib.match "([^:]+)[:](.*)" finalAttrs.hash;
in
derivationArgs
// {
__structuredAttrs = true;
name = if name != null then name else baseNameOf gameUrl;
hash =
if outputHashAlgo == null || outputHash == "" || lib.hasPrefix outputHashAlgo outputHash then
outputHash
else
"${outputHashAlgo}:${outputHash}";
outputHash =
if finalAttrs.hash == "" then
lib.fakeHash
else if finalHashHasColon then
lib.elemAt finalHashColonMatch 1
else
finalAttrs.hash;
outputHashAlgo = if finalHashHasColon then lib.head finalHashColonMatch else null;
outputHashMode = "flat";
nativeBuildInputs = [ python3 ] ++ nativeBuildInputs;
inherit preferLocalBuild;
# ENV
nixpkgsVersion = lib.trivial.release;
uploadName = name;
inherit
endpoint
apiKeyVar
gameUrl
extraMessage
showUrl
preFetch
postFetch
;
impureEnvVars =
lib.fetchers.proxyImpureEnvVars
++ [
apiKeyVar
"NIX_CONNECT_TIMEOUT"
]
++ impureEnvVars;
builder = builtins.toFile "builder.sh" ''
source "$NIX_ATTRS_SH_FILE"
runHook preFetch
python ${./fetchitchio.py}
runHook postFetch
'';
}
);
inheritFunctionArgs = false;
}
@@ -0,0 +1,76 @@
import itertools
import json
import os
import platform
import shutil
import sys
import urllib.error
import urllib.parse
import urllib.request
with open(os.environ['NIX_ATTRS_JSON_FILE']) as env_file:
ENV = json.load(env_file)
USER_AGENT = f'Python/{platform.python_version()} Nixpkgs/{ENV['nixpkgsVersion']}'
TIMEOUT = float(os.environ.get('NIX_CONNECT_TIMEOUT') or '15')
ENDPOINT = ENV['endpoint']
GAME_URL = ENV['gameUrl']
UPLOAD_ID = ENV['upload']
def abort(message):
if 'extraMessage' in ENV:
message = f'{message} {ENV['extraMessage']}'
print(message, file=sys.stderr)
sys.exit(1)
try:
API_KEY = os.environ[ENV['apiKeyVar']]
except KeyError:
abort(
f'Either set {ENV['apiKeyVar']} for the nix building process '
f'or manually download {ENV.get('uploadName', 'the required file')} '
f'from {GAME_URL} and add it to nix store.'
)
def urlopen(url_or_request):
return urllib.request.urlopen(url_or_request, timeout=TIMEOUT)
with urlopen(f'{GAME_URL}/data.json') as response:
data = json.load(response)
GAME_ID = data['id']
IS_FREE = 'price' not in data
def api(path, params={}, download=False):
url = f'{ENDPOINT}{path}?{urllib.parse.urlencode({'api_key': API_KEY, **params})}'
if download and ENV['showUrl']:
with open(os.environ['out'], 'w') as output_file:
print(url, file=output_file)
return
request = urllib.request.Request(url, headers={'User-Agent': USER_AGENT})
with urlopen(request) as response:
if download:
with open(os.environ['out'], 'wb') as output_file:
shutil.copyfileobj(response, output_file)
else:
return json.load(response)
if IS_FREE:
api(f'/uploads/{UPLOAD_ID}/download', download=True)
sys.exit()
KEY_ID = None
for page in itertools.count(1):
data = api('/profile/owned-keys', {'page': page})
if 'owned_keys' not in data:
break
for key in data['owned_keys']:
if key['game_id'] == GAME_ID:
KEY_ID = key['id']
break
if len(data['owned_keys']) < data['per_page']:
break
if not KEY_ID:
abort(f'Cannot find a key associated with {GAME_URL}. Did you buy the game?')
api(f'/uploads/{UPLOAD_ID}/download', {'download_key_id': KEY_ID}, download=True)
+1
View File
@@ -57,6 +57,7 @@ stdenvNoCC.mkDerivation {
src =
if overrideSrc == null then
# TODO: Replace this with fetchItchIo
requireFile {
name = "celeste-linux.zip";
hash = "sha256-phNDBBHb7zwMRaBHT5D0hFEilkx9F31p6IllvLhHQb8=";
+4 -3
View File
@@ -1,7 +1,7 @@
{
stdenvNoCC,
lib,
requireFile,
fetchItchIo,
asar,
copyDesktopItems,
electron,
@@ -18,10 +18,11 @@ stdenvNoCC.mkDerivation (finalAttrs: {
pname = "ddm";
version = "4.1.0";
src = requireFile {
src = fetchItchIo {
name = "DungeonDuelMonsters-linux-x64.zip";
hash = "sha256-gq2nGwpaStqaVI1pL63xygxOI/z53o+zLwiKizG98Ks=";
url = "https://mikaygo.itch.io/ddm";
gameUrl = "https://mikaygo.itch.io/ddm";
upload = "13371354";
};
strictDeps = true;
+1 -42
View File
@@ -1,42 +1 @@
{
lib,
python3Packages,
fetchFromGitHub,
}:
python3Packages.buildPythonApplication (finalAttrs: {
pname = "ghmap";
version = "2.0.3";
pyproject = true;
src = fetchFromGitHub {
owner = "uhourri";
repo = "ghmap";
tag = "v${finalAttrs.version}";
hash = "sha256-UF7Zxrm+thZeAKPiCaI5t4NbDzuUU3oosPsb0Cgv9t0=";
};
build-system = with python3Packages; [
setuptools
];
dependencies = with python3Packages; [
tqdm
];
pythonImportsCheck = [
"ghmap"
];
nativeCheckInputs = with python3Packages; [
pytestCheckHook
];
meta = {
description = "Python tool for mapping GitHub events to contributor activities";
homepage = "https://github.com/uhourri/ghmap";
license = lib.licenses.mit;
maintainers = [ ];
mainProgram = "ghmap";
};
})
{ python3Packages }: python3Packages.toPythonApplication python3Packages.ghmap
+1
View File
@@ -31,6 +31,7 @@ let
sha256 = "09h9r65z8bar2z89s09j6px0gdq355kjf38rmd85xb2aqwnm6xig";
};
# TODO: Replace this with fetchItchIo
assets_src = requireFile {
name = "koboredux-${version}-Linux.tar.bz2";
sha256 = "11bmicx9i11m4c3dp19jsql0zy4rjf5a28x4hd2wl8h3bf8cdgav";
+44
View File
@@ -0,0 +1,44 @@
{
lib,
python3Packages,
fetchFromGitHub,
}:
python3Packages.buildPythonApplication (finalAttrs: {
pname = "rabbit-ng";
version = "3.0.0";
pyproject = true;
src = fetchFromGitHub {
owner = "sgl-umons";
repo = "RABBIT-ng";
tag = finalAttrs.version;
hash = "sha256-nd1LMJSJEUMMlKc4N7mQuEcBVJpGdQdZ6thmhk5BfCI=";
};
build-system = with python3Packages; [
hatchling
];
dependencies = with python3Packages; [
ghmap
numpy
onnxruntime
pandas
python-dotenv
requests
typer
];
pythonImportsCheck = [
"rabbit_ng"
];
meta = {
description = "RABBIT is a machine-learning based tool designed to identify bot accounts among GitHub contributors";
homepage = "https://github.com/sgl-umons/RABBIT-ng";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ drupol ];
mainProgram = "rabbit-ng";
};
})
-93
View File
@@ -1,93 +0,0 @@
{
lib,
python3,
fetchFromGitHub,
fetchPypi,
}:
let
python3' = python3.override {
packageOverrides = self: super: {
scikit-learn =
let
version = "1.5.2";
in
super.scikit-learn.overridePythonAttrs (old: {
inherit version;
src = fetchPypi {
pname = "scikit_learn";
inherit version;
hash = "sha256-tCN+17P90KSIJ5LmjvJUXVuqUKyju0WqffRoE4rY+U0=";
};
# Preserve the postPatch for this scikit-learn version
postPatch = ''
substituteInPlace meson.build --replace-fail \
"run_command('sklearn/_build_utils/version.py', check: true).stdout().strip()," \
"'${version}',"
'';
# There are 2 tests that are failing, disabling the tests for now.
# - test_csr_polynomial_expansion_index_overflow[csr_array-False-True-2-65535]
# - test_csr_polynomial_expansion_index_overflow[csr_array-False-True-3-2344]
doCheck = false;
});
};
self = python3;
};
# Make sure to check for which version of scikit-learn this project was built
# Currently version 2.3.2 is made with scikit-learn 1.5.2
# Upgrading to newer versions of scikit-learn break the project
version = "2.3.2";
in
python3'.pkgs.buildPythonApplication {
pname = "rabbit";
inherit version;
pyproject = true;
src = fetchFromGitHub {
owner = "natarajan-chidambaram";
repo = "RABBIT";
tag = version;
hash = "sha256-icf42vqYPNH1v1wEv/MpqScqMUr/qDlcGoW9kPY2R6s=";
};
pythonRelaxDeps = [
"joblib"
"numpy"
"pandas"
"requests"
"scikit-learn"
"scipy"
"tqdm"
"urllib3"
];
build-system = with python3'.pkgs; [
setuptools
];
dependencies = with python3'.pkgs; [
joblib
numpy
pandas
python-dateutil
requests
scikit-learn
scipy
tqdm
urllib3
];
pythonImportsCheck = [ "rabbit" ];
meta = {
description = "Tool for identifying bot accounts based on their recent GitHub event history";
homepage = "https://github.com/natarajan-chidambaram/RABBIT";
license = lib.licenses.asl20;
mainProgram = "rabbit";
maintainers = [ ];
};
}
+2 -2
View File
@@ -12,12 +12,12 @@
python3.pkgs.buildPythonApplication (finalAttrs: {
pname = "salt";
version = "3007.12";
version = "3007.13";
format = "setuptools";
src = fetchPypi {
inherit (finalAttrs) pname version;
hash = "sha256-y7JG3aXOynH/5Uq9/mY4s6LjGWw2JPv7EgdSo9HYN5c=";
hash = "sha256-xmOnOGy9R6/pSm2LCxrx/M3DUFnM7CuTMQ55IHBTRPs=";
};
patches = [
+3 -3
View File
@@ -107,7 +107,7 @@ let
in
rustPlatform.buildRustPackage (finalAttrs: {
pname = "zed-editor";
version = "0.224.5";
version = "0.224.6";
outputs = [
"out"
@@ -120,7 +120,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
owner = "zed-industries";
repo = "zed";
tag = "v${finalAttrs.version}";
hash = "sha256-GXvvj9jFayUDQxnxlDiQqJMTWcy4V8dMKlNNwfHkdb0=";
hash = "sha256-GbTWkD+JVYr+jem9MBQ4bTtPDogIU1XfQy2RmsnY9uI=";
};
postPatch = ''
@@ -140,7 +140,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
rm -r $out/git/*/candle-book/
'';
cargoHash = "sha256-bROXswYAFuI7aRVoRvO3HhXIPfV19Is/SNtfhIiJ50Y=";
cargoHash = "sha256-FTbxMJrub0l0hL8zisD2Ov9JXIRwZjOuTkzjmrImOd4=";
nativeBuildInputs = [
cmake
@@ -3,40 +3,38 @@
buildPythonPackage,
fetchFromGitHub,
setuptools,
wheel,
ruamel-yaml,
pytestCheckHook,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "gawd";
version = "1.1.1";
pyproject = true;
src = fetchFromGitHub {
owner = "pooya-rostami";
owner = "sgl-umons";
repo = "gawd";
rev = version;
tag = finalAttrs.version;
hash = "sha256-DCcU7vO5VApRsO+ljVs827TrHIfe3R+1/2wgBEcp1+c=";
};
nativeBuildInputs = [
build-system = [
setuptools
wheel
];
propagatedBuildInputs = [ ruamel-yaml ];
dependencies = [ ruamel-yaml ];
nativeCheckInputs = [ pytestCheckHook ];
pythonImportsCheck = [ "gawd" ];
meta = {
changelog = "https://github.com/pooya-rostami/gawd/releases/tag/${version}";
changelog = "https://github.com/sgl-umons/gawd/releases/tag/${finalAttrs.version}";
description = "Python library and command-line tool for computing syntactic differences between two GitHub Actions workflow files";
mainProgram = "gawd";
homepage = "https://github.com/pooya-rostami/gawd";
homepage = "https://github.com/sgl-umons/gawd";
license = lib.licenses.lgpl3Only;
maintainers = [ ];
maintainers = with lib.maintainers; [ drupol ];
};
}
})
@@ -0,0 +1,42 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
setuptools,
tqdm,
pytestCheckHook,
}:
buildPythonPackage (finalAttrs: {
pname = "ghmap";
version = "2.0.3";
pyproject = true;
src = fetchFromGitHub {
owner = "sgl-umons";
repo = "ghmap";
tag = "v${finalAttrs.version}";
hash = "sha256-UF7Zxrm+thZeAKPiCaI5t4NbDzuUU3oosPsb0Cgv9t0=";
};
build-system = [
setuptools
];
dependencies = [
tqdm
];
nativeCheckInputs = [ pytestCheckHook ];
pythonImportsCheck = [
"ghmap"
];
meta = {
description = "A Python tool for mapping GitHub events to contributor activities";
homepage = "https://github.com/sgl-umons/ghmap";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ drupol ];
};
})
@@ -32,4 +32,8 @@ mkKdeDerivation {
"-DUID_MAX=29999"
"-DINSTALL_PAM_CONFIGURATION=OFF"
];
postInstall = ''
install -Dm444 ${./defaults.conf} $out/lib/plasmalogin/defaults.conf
'';
}
@@ -0,0 +1,2 @@
[Greeter]
PreselectedSession=plasma.desktop
@@ -565,10 +565,6 @@ let
# Enable CEC over DisplayPort
DRM_DP_CEC = whenOlder "6.10" yes;
DRM_DISPLAY_DP_AUX_CEC = whenAtLeast "6.10" yes;
# Do not enable Nova drivers, which are still WIP. This is the Kconfig default.
NOVA_CORE = whenAtLeast "6.15" no;
DRM_NOVA = whenAtLeast "6.16" no;
}
//
lib.optionalAttrs
@@ -606,6 +602,10 @@ let
DRM_PANIC_SCREEN = whenAtLeast "6.12" (freeform "kmsg");
DRM_PANIC_SCREEN_QR_CODE = whenAtLeast "6.12" yes;
# Do not enable Nova drivers, which are still WIP. This is the Kconfig default.
NOVA_CORE = whenAtLeast "6.15" no;
DRM_NOVA = whenAtLeast "6.16" no;
};
sound = {
+1
View File
@@ -1665,6 +1665,7 @@ mapAliases {
qutebrowser-qt5 = lib.warnOnInstantiate "'qutebrowser-qt5' has been removed as it depended on vulnerable and outdated qt5 webengine" qutebrowser; # Added 2026-01-14
qv2ray = throw "'qv2ray' has been removed as it was unmaintained"; # Added 2025-06-03
ra-multiplex = lib.warnOnInstantiate "'ra-multiplex' has been renamed to/replaced by 'lspmux'" lspmux; # Added 2025-10-27
rabbit = throw "'rabbit' has been renamed to/replaced by 'rabbit-ng'"; # Added 2026-02-18
radiance = throw "'radiance' has been removed as it was broken for a long time"; # Added 2026-01-02
radicale3 = throw "'radicale3' has been renamed to/replaced by 'radicale'"; # Converted to throw 2025-10-27
railway-travel = throw "'railway-travel' has been renamed to/replaced by 'diebahn'"; # Converted to throw 2025-10-27
+2
View File
@@ -687,6 +687,8 @@ with pkgs;
fetchgx = callPackage ../build-support/fetchgx { };
fetchItchIo = callPackage ../build-support/fetchitchio { };
fetchPypi = callPackage ../build-support/fetchpypi { };
fetchPypiLegacy = callPackage ../build-support/fetchpypilegacy { };
+2
View File
@@ -6178,6 +6178,8 @@ self: super: with self; {
ghidra-bridge = callPackage ../development/python-modules/ghidra-bridge { };
ghmap = callPackage ../development/python-modules/ghmap { };
ghome-foyer-api = callPackage ../development/python-modules/ghome-foyer-api { };
ghostscript = callPackage ../development/python-modules/ghostscript { };