diff --git a/doc/build-helpers/testers.chapter.md b/doc/build-helpers/testers.chapter.md index e4e8ddbb2c17..49407c6e9b8e 100644 --- a/doc/build-helpers/testers.chapter.md +++ b/doc/build-helpers/testers.chapter.md @@ -421,6 +421,11 @@ Check that two paths have the same contents. : A message that is printed last if the file system object contents at the two paths don't match exactly. +`checkMetadata` (boolean) + +: Whether to fail on metadata differences, such as permissions or ownership. + Defaults to `true`. + :::{.example #ex-testEqualContents-toyexample} # Check that two paths have the same contents diff --git a/pkgs/applications/editors/emacs/elisp-packages/elpa-common-overrides.nix b/pkgs/applications/editors/emacs/elisp-packages/elpa-common-overrides.nix index 333465e93c29..9a473c284415 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/elpa-common-overrides.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/elpa-common-overrides.nix @@ -116,7 +116,7 @@ in }) ] else - previousAttrs.patches or null; + previousAttrs.patches or [ ]; preBuild = if applyOrgRoamMissingPatch then previousAttrs.preBuild or "" @@ -129,7 +129,7 @@ in popd '' else - previousAttrs.preBuild or null; + previousAttrs.preBuild or ""; } ); diff --git a/pkgs/applications/editors/emacs/elisp-packages/lib-override-helper.nix b/pkgs/applications/editors/emacs/elisp-packages/lib-override-helper.nix index 0d44878b480c..91a20bd3647e 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/lib-override-helper.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/lib-override-helper.nix @@ -18,7 +18,7 @@ rec { if predicate finalAttrs previousAttrs then previousAttrs.packageRequires or [ ] ++ packageRequires else - previousAttrs.packageRequires or null; + previousAttrs.packageRequires or [ ]; } ); @@ -89,7 +89,7 @@ rec { if predicate finalAttrs previousAttrs then previousAttrs.nativeBuildInputs or [ ] ++ [ pkgs.writableTmpDirAsHomeHook ] else - previousAttrs.nativeBuildInputs or null; + previousAttrs.nativeBuildInputs or [ ]; } ); } diff --git a/pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix b/pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix index 246786989209..038cc7024b6e 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix @@ -830,7 +830,7 @@ let rm --recursive --verbose etc/elisp/screenshot '' else - previousAttrs.preBuild or null; + previousAttrs.preBuild or ""; } ); @@ -897,7 +897,7 @@ let rm --verbose --force test-bpr.el '' else - previousAttrs; + previousAttrs.preBuild or ""; } ); @@ -991,7 +991,7 @@ let }) ] else - previousAttrs.patches or null; + previousAttrs.patches or [ ]; } ) ); @@ -1055,7 +1055,7 @@ let '' + previousAttrs.preBuild or "" else - previousAttrs.preBuild or null; + previousAttrs.preBuild or ""; } ); @@ -1221,7 +1221,7 @@ let rm --verbose packages/javascript/test-suppport.el '' else - previousAttrs.preBuild or null; + previousAttrs.preBuild or ""; } ); @@ -1392,7 +1392,7 @@ let }) ] else - previousAttrs.patches or null; + previousAttrs.patches or [ ]; } ); @@ -1543,7 +1543,7 @@ let }) ] else - previousAttrs.patches or null; + previousAttrs.patches or [ ]; } ); @@ -1561,7 +1561,7 @@ let '' + previousAttrs.preBuild or "" else - previousAttrs.preBuild or null; + previousAttrs.preBuild or ""; } ); diff --git a/pkgs/applications/editors/vim/plugins/non-generated/avante-nvim/default.nix b/pkgs/applications/editors/vim/plugins/non-generated/avante-nvim/default.nix index daf7f0cfd8f5..492b9c5f6a5b 100644 --- a/pkgs/applications/editors/vim/plugins/non-generated/avante-nvim/default.nix +++ b/pkgs/applications/editors/vim/plugins/non-generated/avante-nvim/default.nix @@ -12,12 +12,12 @@ pkgs, }: let - version = "0.0.27-unstable-2025-10-12"; + version = "0.0.27-unstable-2025-10-18"; src = fetchFromGitHub { owner = "yetone"; repo = "avante.nvim"; - rev = "f092bb3ec0acf87b838e082209b6a7eddcbf5940"; - hash = "sha256-zKDp9It/VgUD8BN5ktTmfbQX0s3SBo20T8no8nwsyfY="; + rev = "cc7a41262e4dc38003b7578c3553a75c0ec4b8d2"; + hash = "sha256-L6fOo3OPfMtClmyGW1Bn7YDJtuTKO6F66D1oYsii5so="; }; avante-nvim-lib = rustPlatform.buildRustPackage { pname = "avante-nvim-lib"; diff --git a/pkgs/applications/misc/fetchmail/default.nix b/pkgs/applications/misc/fetchmail/default.nix index a7ff3c629923..f25cc0a69017 100644 --- a/pkgs/applications/misc/fetchmail/default.nix +++ b/pkgs/applications/misc/fetchmail/default.nix @@ -9,11 +9,11 @@ stdenv.mkDerivation rec { pname = "fetchmail"; - version = "6.5.6"; + version = "6.5.7"; src = fetchurl { url = "mirror://sourceforge/fetchmail/fetchmail-${version}.tar.xz"; - hash = "sha256-7BDg4OqkFzE1WTee3nbHRhR2bYOLOUcLZkdIY6ppDas="; + hash = "sha256-c+trHUIbWYaGatSmt3fBFAo5AFKYxjv4R95TeXbL+9s="; }; buildInputs = [ diff --git a/pkgs/build-support/testers/default.nix b/pkgs/build-support/testers/default.nix index c35e03cada76..ac31c22ab4a2 100644 --- a/pkgs/build-support/testers/default.nix +++ b/pkgs/build-support/testers/default.nix @@ -57,6 +57,7 @@ actual, expected, postFailureMessage ? null, + checkMetadata ? true, }: runCommand "equal-contents-${lib.strings.toLower assertion}" { @@ -66,12 +67,13 @@ expected postFailureMessage ; + excludeMetadata = if checkMetadata then "no" else "yes"; nativeBuildInputs = [ diffoscopeMinimal ]; } '' echo "Checking:" printf '%s\n' "$assertion" - if ! diffoscope --no-progress --text-color=always --exclude-directory-metadata=no -- "$actual" "$expected" + if ! diffoscope --no-progress --text-color=always --exclude-directory-metadata="$excludeMetadata" -- "$actual" "$expected" then echo echo 'Contents must be equal, but were not!' diff --git a/pkgs/by-name/de/deltachat-desktop/package.nix b/pkgs/by-name/de/deltachat-desktop/package.nix index 420e9e7e6808..40d3e14f1e59 100644 --- a/pkgs/by-name/de/deltachat-desktop/package.nix +++ b/pkgs/by-name/de/deltachat-desktop/package.nix @@ -19,17 +19,17 @@ let deltachat-rpc-server' = deltachat-rpc-server.overrideAttrs rec { - version = "2.20.0"; + version = "2.22.0"; src = fetchFromGitHub { owner = "chatmail"; repo = "core"; tag = "v${version}"; - hash = "sha256-QPKy88c/GLeazGCjNYHj5kOxwiuvjJ/+pM4SQ4TZ1sw="; + hash = "sha256-DKqqdcG3C7/RF/wz2SqaiPUjZ/7vMFJTR5DIGTXjoTY="; }; cargoDeps = rustPlatform.fetchCargoVendor { pname = "chatmail-core"; inherit version src; - hash = "sha256-2Js4VQsXf1ApRq9Vf1xwX/1BXiFUQgykvofb2ykOdcc="; + hash = "sha256-x71vytk9ytIhHlRR0lDhDcIaDNJGDdPwb6fkB1SI+NQ="; }; }; electron = electron_37; @@ -37,19 +37,19 @@ let in stdenv.mkDerivation (finalAttrs: { pname = "deltachat-desktop"; - version = "2.20.0"; + version = "2.22.0"; src = fetchFromGitHub { owner = "deltachat"; repo = "deltachat-desktop"; tag = "v${finalAttrs.version}"; - hash = "sha256-tzRk4IwMm3qDzQtGKezkiRbnNSF7EabMYMHXMrrDW8w="; + hash = "sha256-IEYfdA1rGg452pZVWW/XuIsNffyhAlI9qyGwcnksgAs="; }; pnpmDeps = pnpm.fetchDeps { inherit (finalAttrs) pname version src; fetcherVersion = 1; - hash = "sha256-423I4ZXekDyqIY39hEUo7/hLthb3gjnvQHnVknZQFnI="; + hash = "sha256-fEzp+nrfLakmtUsPef0HG6tZGn5/q+271YwVyBkFKJw="; }; nativeBuildInputs = [ diff --git a/pkgs/by-name/fi/files-cli/package.nix b/pkgs/by-name/fi/files-cli/package.nix index 765f6860e3b7..19649c847950 100644 --- a/pkgs/by-name/fi/files-cli/package.nix +++ b/pkgs/by-name/fi/files-cli/package.nix @@ -8,16 +8,16 @@ buildGoModule rec { pname = "files-cli"; - version = "2.15.111"; + version = "2.15.121"; src = fetchFromGitHub { repo = "files-cli"; owner = "files-com"; rev = "v${version}"; - hash = "sha256-M6SVLloMn/6AmIpfZ0Ib0yUQ33hC9MFjbFTxOlN7kqs="; + hash = "sha256-Lf+kWLmCMbP0FIPxmtroakv1RayqTqMrFhYpVBoHqiA="; }; - vendorHash = "sha256-fxh9YOO0xnYo04HwJyctspipSXgWcDoUu40UwhDf8Uk="; + vendorHash = "sha256-GygNBB7ydaq11vU2wY9i/ZHmmLomMDKr4cJSdpcEoxk="; ldflags = [ "-s" diff --git a/pkgs/by-name/gd/gdu/package.nix b/pkgs/by-name/gd/gdu/package.nix index 39d4e677d915..22594fac7452 100644 --- a/pkgs/by-name/gd/gdu/package.nix +++ b/pkgs/by-name/gd/gdu/package.nix @@ -42,11 +42,14 @@ buildGoModule (finalAttrs: { doCheck = !stdenv.hostPlatform.isDarwin; - checkFlags = [ - # https://github.com/dundee/gdu/issues/371 - "-skip=TestStoredAnalyzer" - "-skip=TestAnalyzePathWithIgnoring" - ]; + checkFlags = + let + skippedTests = [ + "TestStoredAnalyzer" # https://github.com/dundee/gdu/issues/371 + "TestAnalyzePathWithIgnoring" + ]; + in + [ "-skip=^${builtins.concatStringsSep "$|^" skippedTests}$" ]; doInstallCheck = true; diff --git a/pkgs/by-name/lu/lux-cli/package.nix b/pkgs/by-name/lu/lux-cli/package.nix index 580eb7693df2..bc98bbf076a2 100644 --- a/pkgs/by-name/lu/lux-cli/package.nix +++ b/pkgs/by-name/lu/lux-cli/package.nix @@ -18,18 +18,18 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "lux-cli"; - version = "0.18.2"; + version = "0.18.5"; src = fetchFromGitHub { owner = "lumen-oss"; repo = "lux"; tag = "v${finalAttrs.version}"; - hash = "sha256-Lqw6U14fhkz4ZgSH0OBICvuj2ZJWo7p0dwhpn7szu2A="; + hash = "sha256-Ut9MSHl2eE4krf5yLpXdAxPARFuHP+cG8HlY7DqmETw="; }; buildAndTestSubdir = "lux-cli"; - cargoHash = "sha256-Dx6nmB8kmCKNzXVTROI+NIxvvCboACSOLUU1BCLnTUw="; + cargoHash = "sha256-I730Fq9F46aLGeEwMmbeOXIkFWNvskmBl+NuPDfx/ss="; nativeInstallCheckInputs = [ versionCheckHook diff --git a/pkgs/by-name/ru/ruffle/package.nix b/pkgs/by-name/ru/ruffle/package.nix index 88f21c5a448e..2350c2d3f4c2 100644 --- a/pkgs/by-name/ru/ruffle/package.nix +++ b/pkgs/by-name/ru/ruffle/package.nix @@ -27,13 +27,13 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "ruffle"; - version = "0.2.0-nightly-2025-10-12"; + version = "0.2.0-nightly-2025-10-18"; src = fetchFromGitHub { owner = "ruffle-rs"; repo = "ruffle"; tag = lib.strings.removePrefix "0.2.0-" finalAttrs.version; - hash = "sha256-QJ1Mz1CR/2NIKiNA7DfjYrurHAtQxvZephJQCLxbmwc="; + hash = "sha256-rFgaquwcQK2U+1qSlxI+VT5OJPftbj4pcMJih71Gl2A="; }; postPatch = @@ -49,7 +49,7 @@ rustPlatform.buildRustPackage (finalAttrs: { "OpenH264Version(${major}, ${minor}, ${patch})" ''; - cargoHash = "sha256-zFmGusWYN0PJ+3Q89JMixehWYigYqmWZCG+lgyLkUhE="; + cargoHash = "sha256-6Q3KBrrfL50AkFkDuxXWKqPtc2ClI3j1WpE/x9ASOJk="; cargoBuildFlags = lib.optional withRuffleTools "--workspace"; env = diff --git a/pkgs/desktops/xfce/core/thunar/default.nix b/pkgs/desktops/xfce/core/thunar/default.nix index 583506b325df..1433a9e18a11 100644 --- a/pkgs/desktops/xfce/core/thunar/default.nix +++ b/pkgs/desktops/xfce/core/thunar/default.nix @@ -23,9 +23,9 @@ mkXfceDerivation { category = "xfce"; pname = "thunar"; - version = "4.20.5"; + version = "4.20.6"; - sha256 = "sha256-Q8gzXRR2ZO98rbHhxnf472d8rGOLqEv7WP6LDONRgS0="; + sha256 = "sha256-Ll1mJEkkxYGASWQ2z7GRiubNjggqeHXzgGSXQK+10qs="; nativeBuildInputs = [ docbook_xsl diff --git a/pkgs/development/libraries/qodeassist-plugin/default.nix b/pkgs/development/libraries/qodeassist-plugin/default.nix index 2716099bf24e..edd9bf28dae0 100644 --- a/pkgs/development/libraries/qodeassist-plugin/default.nix +++ b/pkgs/development/libraries/qodeassist-plugin/default.nix @@ -16,13 +16,13 @@ }: stdenv.mkDerivation (finalAttrs: { pname = "qodeassist-plugin"; - version = "0.7.0"; + version = "0.7.1"; src = fetchFromGitHub { owner = "Palm1r"; repo = "QodeAssist"; tag = "v${finalAttrs.version}"; - hash = "sha256-XzxuElQQxR2dK7KD0QHUAb7qyizUBhPvGDv3OvnAQjc="; + hash = "sha256-QDs9li8WH27aITe48cxRWaqd0mFCmZcBeb34LadeGmk="; }; dontWrapQtApps = true; diff --git a/pkgs/development/python-modules/castepxbin/default.nix b/pkgs/development/python-modules/castepxbin/default.nix index 72c6e4513478..71cc81c5c3bb 100644 --- a/pkgs/development/python-modules/castepxbin/default.nix +++ b/pkgs/development/python-modules/castepxbin/default.nix @@ -1,7 +1,6 @@ { lib, buildPythonPackage, - pythonOlder, fetchFromGitHub, flit-core, numpy, @@ -11,24 +10,18 @@ buildPythonPackage rec { pname = "castepxbin"; - version = "0.3.0"; + version = "0.3.1"; pyproject = true; - disabled = pythonOlder "3.7"; - src = fetchFromGitHub { owner = "zhubonan"; repo = "castepxbin"; tag = "v${version}"; - hash = "sha256-6kumVnm4PLRxuKO6Uz0iHzfYuu21hFC7EPRsc3S1kxE="; + hash = "sha256-M+OoKr9ODIp47gt64hf47A1PblyZpBzulKI7nEm8hdo="; }; build-system = [ flit-core ]; - pythonRelaxDeps = [ - "numpy" - ]; - dependencies = [ numpy scipy @@ -36,10 +29,11 @@ buildPythonPackage rec { nativeCheckInputs = [ pytestCheckHook ]; - meta = with lib; { + meta = { + changelog = "https://github.com/zhubonan/castepxbin/releases/tag/${src.tag}"; description = "Collection of readers for CASTEP binary outputs"; homepage = "https://github.com/zhubonan/castepxbin"; - license = licenses.mit; - maintainers = with maintainers; [ dotlambda ]; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ dotlambda ]; }; } diff --git a/pkgs/development/python-modules/keymap-drawer/default.nix b/pkgs/development/python-modules/keymap-drawer/default.nix index fb6083a90802..fffc10aa8252 100644 --- a/pkgs/development/python-modules/keymap-drawer/default.nix +++ b/pkgs/development/python-modules/keymap-drawer/default.nix @@ -2,9 +2,11 @@ lib, buildPythonPackage, + callPackages, fetchFromGitHub, pythonOlder, + keymap-drawer, nix-update-script, pcpp, platformdirs, @@ -59,6 +61,12 @@ buildPythonPackage { versionCheckProgram = "${placeholder "out"}/bin/keymap"; versionCheckProgramArg = "--version"; + passthru.tests = callPackages ./tests { + # Explicitly pass the correctly scoped package. + # The top-level package will still resolve to itself, because the way + # `toPythonApplication` interacts with scopes is weird. + inherit keymap-drawer; + }; passthru.updateScript = nix-update-script { }; meta = { diff --git a/pkgs/development/python-modules/keymap-drawer/tests/default.nix b/pkgs/development/python-modules/keymap-drawer/tests/default.nix new file mode 100644 index 000000000000..7c94185c41f5 --- /dev/null +++ b/pkgs/development/python-modules/keymap-drawer/tests/default.nix @@ -0,0 +1,89 @@ +{ + lib, + fetchFromGitHub, + runCommand, + stdenv, + testers, + + keymap-drawer, + yamllint, +}: +let + runKeymapDrawer = + name: + runCommand "keymap-drawer-${name}" { + nativeBuildInputs = [ keymap-drawer ]; + }; + + MattSturgeon-example = fetchFromGitHub { + owner = "MattSturgeon"; + repo = "glove80-config"; + rev = "d55267dd26593037256b35a5d6ebba0f75541da5"; + hash = "sha256-MV6cNpgHBuaGvpu2aR1aBNMpwPnDqOSbGf+2ykxocP4="; + nonConeMode = true; + sparseCheckout = [ + "config" + "img" + ]; + }; + + # MattSturgeon's example requires MDI icons + mdi = fetchFromGitHub { + owner = "Templarian"; + repo = "MaterialDesign-SVG"; + tag = "v7.4.47"; + hash = "sha256-NoSSRT1ID38MT70IZ+7h/gMVCNsjNs3A2RX6ePGwuQ0="; + }; +in +{ + dump-config = runKeymapDrawer "dump-config" '' + keymap dump-config --output "$out" + + if [ ! -s "$out" ]; then + >&2 echo 'Expected `dump-config` to have content.' + exit 1 + fi + + ${lib.getExe yamllint} --strict --config-data relaxed "$out" + ''; + + parse-zmk = testers.testEqualContents { + assertion = "keymap parse --zmk-keymap produces expected YAML"; + expected = "${MattSturgeon-example}/img/glove80.yaml"; + actual = runKeymapDrawer "parse" '' + keymap \ + --config ${MattSturgeon-example}/config/keymap_drawer.yaml \ + parse --zmk-keymap ${MattSturgeon-example}/config/glove80.keymap \ + --output "$out" + ''; + checkMetadata = stdenv.buildPlatform.isLinux; + }; + + draw = testers.testEqualContents { + assertion = "keymap draw produces expected SVG"; + expected = "${MattSturgeon-example}/img/glove80.svg"; + actual = runKeymapDrawer "draw" '' + ${lib.optionalString stdenv.buildPlatform.isLinux '' + export XDG_CACHE_HOME="$PWD/cache" + glyphs="$XDG_CACHE_HOME/keymap-drawer/glyphs" + ''} + ${lib.optionalString stdenv.buildPlatform.isDarwin '' + export HOME="$PWD/home" + glyphs="$HOME/Library/Caches/keymap-drawer/glyphs" + ''} + mkdir -p "$glyphs" + + # Unpack MDI icons into the cache + for file in ${mdi}/svg/* + do + ln -s "$file" "$glyphs/mdi:$(basename "$file")" + done + + keymap \ + --config ${MattSturgeon-example}/config/keymap_drawer.yaml \ + draw ${MattSturgeon-example}/img/glove80.yaml \ + --output "$out" + ''; + checkMetadata = stdenv.buildPlatform.isLinux; + }; +} diff --git a/pkgs/development/python-modules/uhashring/default.nix b/pkgs/development/python-modules/uhashring/default.nix new file mode 100644 index 000000000000..513dd2ddab72 --- /dev/null +++ b/pkgs/development/python-modules/uhashring/default.nix @@ -0,0 +1,41 @@ +{ + lib, + buildPythonPackage, + pytestCheckHook, + fetchFromGitHub, + hatchling, + python-memcached, +}: +buildPythonPackage rec { + pname = "uhashring"; + version = "2.4"; + pyproject = true; + + src = fetchFromGitHub { + owner = "ultrabug"; + repo = "uhashring"; + tag = version; + hash = "sha256-6zNPExbcwTUne0lT8V6xp2Gf6J1VgG7Q93qizVOAc+k="; + }; + + build-system = [ + hatchling + ]; + + pythonImportsCheck = [ + "uhashring" + ]; + + nativeCheckInputs = [ + pytestCheckHook + python-memcached + ]; + + meta = { + description = "Full featured consistent hashing python library compatible with ketama"; + homepage = "https://github.com/ultrabug/uhashring"; + changelog = "https://github.com/ultrabug/uhashring/blob/${src.tag}/CHANGELOG.md"; + license = lib.licenses.bsd3; + maintainers = with lib.maintainers; [ typedrat ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index e6b1806bb642..05229045cf9b 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -19494,6 +19494,8 @@ self: super: with self; { uharfbuzz = callPackage ../development/python-modules/uharfbuzz { }; + uhashring = callPackage ../development/python-modules/uhashring { }; + uhi = callPackage ../development/python-modules/uhi { }; uiprotect = callPackage ../development/python-modules/uiprotect { };