From bd388e2d4968704e380ea99147cd00a30e1b03da Mon Sep 17 00:00:00 2001 From: Ulysses Zhan Date: Thu, 11 Dec 2025 23:31:28 -0800 Subject: [PATCH 01/11] fetchItchIo: init --- doc/build-helpers/fetchers.chapter.md | 24 ++++ doc/redirects.json | 3 + pkgs/build-support/fetchitchio/default.nix | 115 ++++++++++++++++++ pkgs/build-support/fetchitchio/fetchitchio.py | 76 ++++++++++++ pkgs/by-name/ce/celestegame/celeste.nix | 1 + pkgs/by-name/dd/ddm/package.nix | 7 +- pkgs/by-name/ko/koboredux/package.nix | 1 + pkgs/top-level/all-packages.nix | 2 + 8 files changed, 226 insertions(+), 3 deletions(-) create mode 100644 pkgs/build-support/fetchitchio/default.nix create mode 100644 pkgs/build-support/fetchitchio/fetchitchio.py diff --git a/doc/build-helpers/fetchers.chapter.md b/doc/build-helpers/fetchers.chapter.md index e8289112963b..6092526aeda9 100644 --- a/doc/build-helpers/fetchers.chapter.md +++ b/doc/build-helpers/fetchers.chapter.md @@ -1005,3 +1005,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"; +} +``` diff --git a/doc/redirects.json b/doc/redirects.json index f0e7f455d6a5..70db6db6547f 100644 --- a/doc/redirects.json +++ b/doc/redirects.json @@ -1800,6 +1800,9 @@ "fetchtorrent-parameters": [ "index.html#fetchtorrent-parameters" ], + "fetchitchio": [ + "index.html#fetchitchio" + ], "chap-trivial-builders": [ "index.html#chap-trivial-builders" ], diff --git a/pkgs/build-support/fetchitchio/default.nix b/pkgs/build-support/fetchitchio/default.nix new file mode 100644 index 000000000000..186c25f8542f --- /dev/null +++ b/pkgs/build-support/fetchitchio/default.nix @@ -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; +} diff --git a/pkgs/build-support/fetchitchio/fetchitchio.py b/pkgs/build-support/fetchitchio/fetchitchio.py new file mode 100644 index 000000000000..7e2a18f0df62 --- /dev/null +++ b/pkgs/build-support/fetchitchio/fetchitchio.py @@ -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) diff --git a/pkgs/by-name/ce/celestegame/celeste.nix b/pkgs/by-name/ce/celestegame/celeste.nix index 7158be54b3a6..351fb2b042f9 100644 --- a/pkgs/by-name/ce/celestegame/celeste.nix +++ b/pkgs/by-name/ce/celestegame/celeste.nix @@ -57,6 +57,7 @@ stdenvNoCC.mkDerivation { src = if overrideSrc == null then + # TODO: Replace this with fetchItchIo requireFile { name = "celeste-linux.zip"; hash = "sha256-phNDBBHb7zwMRaBHT5D0hFEilkx9F31p6IllvLhHQb8="; diff --git a/pkgs/by-name/dd/ddm/package.nix b/pkgs/by-name/dd/ddm/package.nix index c5884aa7779b..32c513861972 100644 --- a/pkgs/by-name/dd/ddm/package.nix +++ b/pkgs/by-name/dd/ddm/package.nix @@ -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; diff --git a/pkgs/by-name/ko/koboredux/package.nix b/pkgs/by-name/ko/koboredux/package.nix index e51cf8a042e9..e414514a9f57 100644 --- a/pkgs/by-name/ko/koboredux/package.nix +++ b/pkgs/by-name/ko/koboredux/package.nix @@ -31,6 +31,7 @@ let sha256 = "09h9r65z8bar2z89s09j6px0gdq355kjf38rmd85xb2aqwnm6xig"; }; + # TODO: Replace this with fetchItchIo assets_src = requireFile { name = "koboredux-${version}-Linux.tar.bz2"; sha256 = "11bmicx9i11m4c3dp19jsql0zy4rjf5a28x4hd2wl8h3bf8cdgav"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0bcb0283f88f..9daa521cd2f6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -681,6 +681,8 @@ with pkgs; fetchgx = callPackage ../build-support/fetchgx { }; + fetchItchIo = callPackage ../build-support/fetchitchio { }; + fetchPypi = callPackage ../build-support/fetchpypi { }; fetchPypiLegacy = callPackage ../build-support/fetchpypilegacy { }; From 4961c3921c9117c89eade3b25765107a66480367 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Sun, 15 Feb 2026 10:22:45 +0100 Subject: [PATCH 02/11] python3Packages.ghmap: init at 2.0.3 --- .../python-modules/ghmap/default.nix | 42 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 44 insertions(+) create mode 100644 pkgs/development/python-modules/ghmap/default.nix diff --git a/pkgs/development/python-modules/ghmap/default.nix b/pkgs/development/python-modules/ghmap/default.nix new file mode 100644 index 000000000000..10e26fb89714 --- /dev/null +++ b/pkgs/development/python-modules/ghmap/default.nix @@ -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 ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index b9dfbe1dff97..d8f1b981189b 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -6149,6 +6149,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 { }; From 2f88bfe2cc0a8dda101176b4953e5a676df6f847 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Sun, 15 Feb 2026 10:23:50 +0100 Subject: [PATCH 03/11] ghmap: use `toPythonApplication` --- pkgs/by-name/gh/ghmap/package.nix | 43 +------------------------------ 1 file changed, 1 insertion(+), 42 deletions(-) diff --git a/pkgs/by-name/gh/ghmap/package.nix b/pkgs/by-name/gh/ghmap/package.nix index 42f0ee327e95..4b60a24e41c3 100644 --- a/pkgs/by-name/gh/ghmap/package.nix +++ b/pkgs/by-name/gh/ghmap/package.nix @@ -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 From c438d6791cf7758e271399d2ffa4b861d06d7693 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Sun, 15 Feb 2026 10:23:08 +0100 Subject: [PATCH 04/11] rabbit-ng: init at 3.0.0 --- pkgs/by-name/ra/rabbit-ng/package.nix | 44 +++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 pkgs/by-name/ra/rabbit-ng/package.nix diff --git a/pkgs/by-name/ra/rabbit-ng/package.nix b/pkgs/by-name/ra/rabbit-ng/package.nix new file mode 100644 index 000000000000..0ba2f4794e04 --- /dev/null +++ b/pkgs/by-name/ra/rabbit-ng/package.nix @@ -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"; + }; +}) From 3eab8602f3b2b50052dcf86211a4be8d4d26b87b Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Wed, 18 Feb 2026 11:18:49 +0100 Subject: [PATCH 05/11] rabbit: remove, replaced by `rabbit-ng` --- pkgs/by-name/ra/rabbit/package.nix | 93 ------------------------------ pkgs/top-level/aliases.nix | 1 + 2 files changed, 1 insertion(+), 93 deletions(-) delete mode 100644 pkgs/by-name/ra/rabbit/package.nix diff --git a/pkgs/by-name/ra/rabbit/package.nix b/pkgs/by-name/ra/rabbit/package.nix deleted file mode 100644 index 17a4cabcb733..000000000000 --- a/pkgs/by-name/ra/rabbit/package.nix +++ /dev/null @@ -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 = [ ]; - }; -} diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 68c5cba26d7a..4ed0a794ca9f 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -1644,6 +1644,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 From ea4730307f92d1e2f35861dd70a09bc39b35aa64 Mon Sep 17 00:00:00 2001 From: Pol Dellaiera Date: Sun, 15 Feb 2026 10:32:58 +0100 Subject: [PATCH 06/11] gawd: refactor, use `finalAttrs` pattern, update repo URL --- .../python-modules/gawd/default.nix | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/pkgs/development/python-modules/gawd/default.nix b/pkgs/development/python-modules/gawd/default.nix index c61eb13f7ecb..227a5faef656 100644 --- a/pkgs/development/python-modules/gawd/default.nix +++ b/pkgs/development/python-modules/gawd/default.nix @@ -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 ]; }; -} +}) From 76ab759b02b631d94817d4d03f9290a7088d11e0 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Wed, 18 Feb 2026 16:45:13 +0000 Subject: [PATCH 07/11] salt: 3007.12 -> 3007.13 --- pkgs/by-name/sa/salt/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/sa/salt/package.nix b/pkgs/by-name/sa/salt/package.nix index 2013c1dda148..7597b5f16ef1 100644 --- a/pkgs/by-name/sa/salt/package.nix +++ b/pkgs/by-name/sa/salt/package.nix @@ -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 = [ From acc4cf70af42754a499ef8c54ce6f84dbce3b27b Mon Sep 17 00:00:00 2001 From: Tim Schumacher Date: Wed, 18 Feb 2026 19:32:10 +0100 Subject: [PATCH 08/11] linux/common-config: Make Nova depend on Rust support Otherwise, when building for a platform without Rust support, then the scripts for applying the kernel configuration will report that the option was unused. --- pkgs/os-specific/linux/kernel/common-config.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/common-config.nix b/pkgs/os-specific/linux/kernel/common-config.nix index 5d45d4526774..0a93af952b4d 100644 --- a/pkgs/os-specific/linux/kernel/common-config.nix +++ b/pkgs/os-specific/linux/kernel/common-config.nix @@ -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 = { From 5855fdd9d0a7367d5863e31693cfee2458a00f5c Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Thu, 19 Feb 2026 01:52:59 +0000 Subject: [PATCH 09/11] firefox-devedition-unwrapped: 148.0b14 -> 148.0b15 --- .../browsers/firefox/packages/firefox-devedition.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/networking/browsers/firefox/packages/firefox-devedition.nix b/pkgs/applications/networking/browsers/firefox/packages/firefox-devedition.nix index 9d56a9493aa5..f0fc2f8514c8 100644 --- a/pkgs/applications/networking/browsers/firefox/packages/firefox-devedition.nix +++ b/pkgs/applications/networking/browsers/firefox/packages/firefox-devedition.nix @@ -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 From 6dab0e18be0dd05e71658ba4d27cfd75be599768 Mon Sep 17 00:00:00 2001 From: Sizhe Zhao Date: Thu, 19 Feb 2026 13:55:09 +0800 Subject: [PATCH 10/11] zed-editor: 0.224.5 -> 0.224.6 --- pkgs/by-name/ze/zed-editor/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/ze/zed-editor/package.nix b/pkgs/by-name/ze/zed-editor/package.nix index 0f8908ffb574..76889dfef407 100644 --- a/pkgs/by-name/ze/zed-editor/package.nix +++ b/pkgs/by-name/ze/zed-editor/package.nix @@ -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 From c844bfb9534b37709acb73e7bc3e7157d8d4e6e7 Mon Sep 17 00:00:00 2001 From: K900 Date: Thu, 19 Feb 2026 10:53:44 +0300 Subject: [PATCH 11/11] kdePackages.plasma-login-manager: prefer Wayland session by default --- pkgs/kde/plasma/plasma-login-manager/default.nix | 4 ++++ pkgs/kde/plasma/plasma-login-manager/defaults.conf | 2 ++ 2 files changed, 6 insertions(+) create mode 100644 pkgs/kde/plasma/plasma-login-manager/defaults.conf diff --git a/pkgs/kde/plasma/plasma-login-manager/default.nix b/pkgs/kde/plasma/plasma-login-manager/default.nix index 13799afaf4b4..964c988368fd 100644 --- a/pkgs/kde/plasma/plasma-login-manager/default.nix +++ b/pkgs/kde/plasma/plasma-login-manager/default.nix @@ -32,4 +32,8 @@ mkKdeDerivation { "-DUID_MAX=29999" "-DINSTALL_PAM_CONFIGURATION=OFF" ]; + + postInstall = '' + install -Dm444 ${./defaults.conf} $out/lib/plasmalogin/defaults.conf + ''; } diff --git a/pkgs/kde/plasma/plasma-login-manager/defaults.conf b/pkgs/kde/plasma/plasma-login-manager/defaults.conf new file mode 100644 index 000000000000..1a7b6a98df6c --- /dev/null +++ b/pkgs/kde/plasma/plasma-login-manager/defaults.conf @@ -0,0 +1,2 @@ +[Greeter] +PreselectedSession=plasma.desktop