Merge branch 'staging-next' into staging

This commit is contained in:
Michael Daniels
2026-07-17 22:20:06 -04:00
52 changed files with 711 additions and 218 deletions

View File

@@ -395,6 +395,13 @@ module.exports = async ({ github, context, core, dry }) => {
pull_number,
per_page: 100,
})
// label llm-assisted PRs accordingly
const assistedByPattern = /Assisted-by: (?!nix-init)/i
evalLabels['llm-assisted'] = prCommits.some((c) =>
assistedByPattern.test(c.commit.message),
)
const commitSubjects = prCommits.map(
(c) => c.commit.message.split('\n')[0],
)

View File

@@ -149,8 +149,7 @@
### Breaking changes {#sec-nixpkgs-release-26.11-lib-breaking}
- Create the first release note entry in this section!
- `fittrackee` 1.0.0 now requires postgres with postgis. The [upgrade guide](https://docs.fittrackee.org/en/upgrading-to-1.0.0.html) has steps to prepare for this upgrade.
### Deprecations {#sec-nixpkgs-release-26.11-lib-deprecations}

View File

@@ -169,11 +169,25 @@ in
enable = true;
virtualHosts."${cfg.virtualHost.domain}".extraConfig = ''
root * ${cfg.package}
file_server
encode zstd gzip
@immutable path /resources/*
header @immutable Cache-Control "public, max-age=31536000, immutable"
@html not path /resources/*
header @html Cache-Control "no-store"
header {
-ETag
-Last-Modified
}
handle_path /assets/config.yml {
root * ${configFile}
file_server
}
file_server
'';
};
};

View File

@@ -26,9 +26,9 @@ let
url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2026.1.2.9/android-studio-quail2-rc2-linux.tar.gz";
};
latestVersion = {
version = "2026.1.3.3"; # "Android Studio Quail 3 | 2026.1.3 Canary 3"
sha256Hash = "sha256-C8rbR+0iGNzsr7HtiNiFw++ZG9/t00/c1Ozr9ngssPs=";
url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2026.1.3.3/android-studio-quail3-canary3-linux.tar.gz";
version = "2026.1.4.1"; # "Android Studio Quail 4 | 2026.1.4 Canary 1"
sha256Hash = "sha256-ynHUoMDsTNgKKRAU948k37ktAIlIm9A+md8KyVBTjl4=";
url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2026.1.4.1/android-studio-quail4-canary1-linux.tar.gz";
};
in
{

View File

@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "claude-dev";
publisher = "saoudrizwan";
version = "3.89.2";
hash = "sha256-lDt/xn1PFs0UDg0rOOun8Bl/FTXSjvQ//ETkoHFypAM=";
version = "4.0.8";
hash = "sha256-qSlz2wXQwpO1Wi9P40hVm+ACZ+VfCiV9LF3lnOkMoXA=";
};
meta = {

View File

@@ -155,13 +155,13 @@
"vendorHash": "sha256-SO3CX7pZ+q7ytz/55cxTPlW7ByY1zKhxkQxMiqAvm8o="
},
"checkly_checkly": {
"hash": "sha256-9kcZXbrfl8ovrg1w3bWdta/ABnLtVIfseRptZn5NrgI=",
"hash": "sha256-or9qjJdA8sDmPnETyedWtsAWEsF9hJdDmPpX+qncN7E=",
"homepage": "https://registry.terraform.io/providers/checkly/checkly",
"owner": "checkly",
"repo": "terraform-provider-checkly",
"rev": "v1.25.0",
"rev": "v1.26.0",
"spdx": null,
"vendorHash": "sha256-7XgTkzYBfkpF8Dd4YsgpB+YIfkANsg/60b3AyO8Y8FA="
"vendorHash": "sha256-nB77EpptqXhF+7/85h37CRQUk/iyq1ffSc2v2kQwFAQ="
},
"ciscodevnet_aci": {
"hash": "sha256-8QnmISiZGRbW60mN9I6UYWDo6f2HUIFersVs/pDUD3o=",
@@ -851,13 +851,13 @@
"vendorHash": "sha256-OgKOjLwDQxJiv+VWdOzjMcUDPu9LOuhyTRyLyM39vLM="
},
"linode_linode": {
"hash": "sha256-aOLto01ntce/l+1ZcQf5Rsdu6ptgpYWpf5JpJ0zRUNs=",
"hash": "sha256-N/SVZ1ajNRT53zxdYBT6Hd/wwAuKhEre0QSZUYbkwGA=",
"homepage": "https://registry.terraform.io/providers/linode/linode",
"owner": "linode",
"repo": "terraform-provider-linode",
"rev": "v3.14.1",
"rev": "v4.1.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-dnvv6sSzEUZ4Hbrq/pAgi/O1RyxCx89omCVzvCe70S0="
"vendorHash": "sha256-r5T8kmvCb2iBUJqw5m7hrr+ET7U9kIBUbsvEVqZlgrE="
},
"loafoe_htpasswd": {
"hash": "sha256-1HCvAGWsYlcYCA8iOmBb/AawxHPLuoxxQWLzNy0x79M=",
@@ -1184,13 +1184,13 @@
"vendorHash": "sha256-uCw5Xdqp3VjLj6IytoVfO0atxkT69FNqJmAlA6eCmfs="
},
"scaleway_scaleway": {
"hash": "sha256-rO5xmAJB2ndhVh7Lkun1Gxi04+I2lGVtkbbCbmngp3E=",
"hash": "sha256-NXW3b4E92uqZbzIpRTFKVKbPRghwfRK4akn4KY7C9p0=",
"homepage": "https://registry.terraform.io/providers/scaleway/scaleway",
"owner": "scaleway",
"repo": "terraform-provider-scaleway",
"rev": "v2.78.0",
"rev": "v2.79.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-x2cppxUU58nN7eu+wMxIoS16HezxzkHWI50ck2r34ls="
"vendorHash": "sha256-MKYAdMLETD12850TIBqBfHLRNLy15B6ycDUckIapwt8="
},
"scottwinkler_shell": {
"hash": "sha256-LTWEdXxi13sC09jh+EFZ6pOi1mzuvgBz5vceIkNE/JY=",

View File

@@ -6,8 +6,8 @@
versionCheckHook,
}:
let
version = "1.0.12";
buildId = "6156052174077952";
version = "1.1.4";
buildId = "5165726265376768";
wholeVersion = "${version}-${buildId}";
throwSystem = throw "Unsupported system: ${stdenvNoCC.hostPlatform.system}";
@@ -15,15 +15,15 @@ let
sourceData = {
x86_64-linux = fetchurl {
url = "https://storage.googleapis.com/antigravity-public/antigravity-cli/${wholeVersion}/linux-x64/cli_linux_x64.tar.gz";
hash = "sha256-fjB132jrrViqHPQiMenYuDvyiVtbBYqxc2sLY4PHUAg=";
hash = "sha256-qHY/CIE65zGFDg2CfMbm06f4xn3mvLIUUhCj7Bh37tE=";
};
aarch64-linux = fetchurl {
url = "https://storage.googleapis.com/antigravity-public/antigravity-cli/${wholeVersion}/linux-arm/cli_linux_arm64.tar.gz";
hash = "sha256-oDZ+WHWsG4imwLFjyG69XRPJvvkH9EaaZRb/aQIb8tQ=";
hash = "sha256-9dlI6XbTTLuhRdo+32gE39DWGcMIhikd45kkAj3oGO8=";
};
aarch64-darwin = fetchurl {
url = "https://storage.googleapis.com/antigravity-public/antigravity-cli/${wholeVersion}/darwin-arm/cli_mac_arm64.tar.gz";
hash = "sha256-U/cwihF/cP5+7KSmkAToI5yOoYydguR5ZrKQMytpuCk=";
hash = "sha256-qhfFyMNvppzI01rjcpq/xUUTYiTsP38Y5ZpqkZMCSJs=";
};
};
in

View File

@@ -26,18 +26,18 @@ let
in
buildGoModule (finalAttrs: {
pname = "cel-go";
version = "0.28.1";
version = "0.29.2";
src = fetchFromGitHub {
owner = "cel-expr";
repo = "cel-go";
tag = "v${finalAttrs.version}";
hash = "sha256-fiFkoYVKdSdYkSMQxmC1SvEEGsalBasCl9tzsGSYwmw=";
hash = "sha256-IubOpjSE91Y2kmWrXw/jFA2QqB3Mx0d/DcJgDVI6+dc=";
};
modRoot = "repl";
vendorHash = "sha256-tMaDwKoE5tzbQD5b7EnpKqiT/CT9WDCKgoxQeyhIlXE=";
vendorHash = "sha256-xbg13CPZEK2uXa6U7T5I/6l1OFcgFOaThcKCfQkgJXI=";
subPackages = [
"main"

View File

@@ -13,14 +13,14 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "censor";
version = "0.7.2";
version = "0.8.0";
pyproject = false;
src = fetchFromCodeberg {
owner = "censor";
repo = "Censor";
tag = "v${finalAttrs.version}";
hash = "sha256-444EGJCNnRRkuTzm4HdapUvwphx9EavxeyAI0Sxh8G8=";
hash = "sha256-WxD2tK6vTYpvy/0BDzwAymdl4uCJNkgw7HBUrMrDlXQ=";
};
nativeBuildInputs = [

View File

@@ -4,15 +4,16 @@
stdenvNoCC,
writeText,
conf ? { },
pname ? "cinny",
}:
let
configOverrides = writeText "cinny-config-overrides.json" (builtins.toJSON conf);
configOverrides = writeText "${pname}-config-overrides.json" (builtins.toJSON conf);
in
if (conf == { }) then
cinny-unwrapped
else
stdenvNoCC.mkDerivation {
pname = "cinny";
inherit pname;
inherit (cinny-unwrapped) version meta;
dontUnpack = true;

View File

@@ -109,12 +109,12 @@ let
in
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "citrix-workspace";
version = "26.04.0.105";
src = requireFile rec {
name = "linuxx64-${version}.tar.gz";
name = "linuxx64-${finalAttrs.version}.tar.gz";
sha256 = "1kl6b1ldjd9gb6cmvhxf6ggvc3amq1kz0qwjlb1fp6dxx0pivwm8";
message = ''
@@ -123,7 +123,7 @@ stdenv.mkDerivation rec {
https://www.citrix.com/downloads/workspace-app/betas-and-tech-previews/workspace-app-tp-gcc11-for-linux.html
(if you do not find version ${version} there, try at
(if you do not find version ${finalAttrs.version} there, try at
https://www.citrix.com/downloads/workspace-app/)
Once you have downloaded the file, please use the following command and re-run the
@@ -139,7 +139,7 @@ stdenv.mkDerivation rec {
__structuredAttrs = true;
sourceRoot = ".";
preferLocalBuild = true;
passthru.icaroot = "${placeholder "out"}/opt/citrix-icaclient";
passthru.icaroot = "${finalAttrs.finalPackage}/opt/citrix-icaclient";
nativeBuildInputs = [
autoPatchelfHook
@@ -435,4 +435,4 @@ stdenv.mkDerivation rec {
];
homepage = "https://www.citrix.com/downloads/workspace-app/betas-and-tech-previews/workspace-app-tp-gcc11-for-linux.html";
};
}
})

View File

@@ -9,13 +9,13 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "emmylua_ls";
version = "0.23.2";
version = "0.24.0";
src = fetchFromGitHub {
owner = "EmmyLuaLs";
repo = "emmylua-analyzer-rust";
tag = finalAttrs.version;
hash = "sha256-xjKTYzkfFWKyQzg6I2aafKBGn7XjkE8CCQ9AP8ebu/I=";
hash = "sha256-oijk0SFTjpIak9AetBfctMXJ/72bRGjuaib9adx1yac=";
};
__structuredAttrs = true;
@@ -34,7 +34,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
buildAndTestSubdir = "crates/emmylua_ls";
cargoHash = "sha256-tVmATUh35h19AsmMCrijJ0rdBHYU6uMj2PE1iiiuDCE=";
cargoHash = "sha256-8uzkj7uCV3XzdagsrePwt2DE4MV12xlbwsaBONUymFQ=";
nativeInstallCheckInputs = [
versionCheckHook

View File

@@ -17,16 +17,16 @@
}:
let
version = "0.311.1";
version = "0.312.0";
src = fetchFromGitHub {
owner = "evcc-io";
repo = "evcc";
tag = version;
hash = "sha256-dxP28NPW+V30XIzh2w++Glrb2xfZ0tpp4H+qOM13yt8=";
hash = "sha256-GUHKrjCGm9LRQX5INdzSMPBV19FtaV8DTN3HIEUrxR4=";
};
vendorHash = "sha256-Eh07T9FAoeoUfhJsK6DPmwE2rJX55Ijzp4ydxJc8/bQ=";
vendorHash = "sha256-x4iwvzf7iv6TyLEkTnqztDQrBD+3lT1yycB7yTD4xO4=";
commonMeta = {
license = lib.licenses.mit;

View File

@@ -1,49 +1,51 @@
{
fetchFromGitHub,
fetchFromCodeberg,
fetchNpmDeps,
lib,
stdenv,
nodejs_24,
npmHooks,
postgresql,
postgresqlTestHook,
python3Packages,
}:
python3Packages.buildPythonApplication (finalAttrs: {
pname = "fittrackee";
version = "0.11.2";
version = "1.3.3";
pyproject = true;
src = fetchFromGitHub {
owner = "SamR1";
src = fetchFromCodeberg {
owner = "FitTrackee";
repo = "FitTrackee";
tag = "v${finalAttrs.version}";
hash = "sha256-A9gebHxNCpYUUIm7IjyySojIIyuTxfYCUeUufpUM1iA=";
hash = "sha256-XWR9gg52pfg0lHoFikQ2wVhvkPCTjTTndBYqBzYPB8s=";
};
makeCacheWritable = true;
npmRoot = "fittrackee_client";
npmDeps = fetchNpmDeps {
inherit (finalAttrs) pname version src;
hash = "sha256-HEgof2ln+mBxM63Dv8Lc/bfx3ozoJCRYYyJOz6jh+Vs=";
sourceRoot = "${finalAttrs.src.name}/fittrackee_client";
};
nativeBuildInputs = [
nodejs_24
npmHooks.npmConfigHook
];
preBuild = ''
pushd fittrackee_client
npm run build-only
popd
'';
build-system = [
python3Packages.poetry-core
];
# The upstream project changed the behavior of the CLI when --set-admin and --set-role are used together.
# Previously, it would raise an error, but now it issues a deprecation warning.
# This patch updates the test assertion to expect the new deprecation warning message.
# See upstream commit 6eda1b6119b3e41bdf8896e74b4a07d3c9e97609.
postPatch = ''
substituteInPlace fittrackee/tests/users/test_users_commands.py \
--replace '"--set-admin and --set-role can not be used together."' '"WARNING: --set-admin is deprecated. Please use --set-role option instead."'
'';
pythonRelaxDeps = [
"authlib"
"fitdecode"
"flask"
"flask-limiter"
"flask-migrate"
"nh3"
"lxml"
"pyopenssl"
"pytz"
"sqlalchemy"
"xmltodict"
];
pythonRelaxDeps = true;
dependencies =
with python3Packages;
@@ -53,21 +55,31 @@ python3Packages.buildPythonApplication (finalAttrs: {
click
dramatiq
dramatiq-abort
feedgenerator
fitdecode
flask
flask-babel
flask-bcrypt
flask-dramatiq
flask-limiter
flask-migrate
flask-sqlalchemy
geoalchemy2
geopandas
gpxpy
gunicorn
humanize
jsonschema
lxml
mistune
nh3
numpy
pandas
psycopg2-binary
pyjwt
pyopenssl
pyproj
python-magic
pytz
shortuuid
sqlalchemy
@@ -76,7 +88,9 @@ python3Packages.buildPythonApplication (finalAttrs: {
xmltodict
]
++ dramatiq.optional-dependencies.redis
++ flask-limiter.optional-dependencies.redis;
++ flask-limiter.optional-dependencies.redis
++ geoalchemy2.optional-dependencies.shapely
++ staticmap3.optional-dependencies.filecache;
pythonImportsCheck = [ "fittrackee" ];
@@ -84,7 +98,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
pytestCheckHook
freezegun
postgresqlTestHook
postgresql
(postgresql.withPackages (ps: with ps; [ postgis ]))
time-machine
];
@@ -93,6 +107,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
];
postgresqlTestSetupPost = ''
echo "CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology;" | PGUSER=postgres psql test_db
export DATABASE_TEST_URL=postgresql://$PGUSER/$PGDATABASE?host=$PGHOST
'';
@@ -105,8 +120,8 @@ python3Packages.buildPythonApplication (finalAttrs: {
meta = {
description = "Self-hosted outdoor activity tracker";
homepage = "https://github.com/SamR1/FitTrackee";
changelog = "https://github.com/SamR1/FitTrackee/blob/${finalAttrs.src.tag}/CHANGELOG.md";
homepage = "https://docs.fittrackee.org/";
changelog = "https://codeberg.org/FitTrackee/FitTrackee/src/tag/${finalAttrs.src.tag}/CHANGELOG.md";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [
tebriel

View File

@@ -12,7 +12,7 @@
bash,
brotli,
buildGoModule,
fetchpatch,
coreutils,
forgejo,
git,
gzip,
@@ -116,6 +116,23 @@ buildGoModule rec {
# TestRunHookPrePostReceive (cmd/hook_test.go) needs .git to pass
git init
''
# Unlike NixOS, the Nix build sandbox has no /usr/bin/env and we
# can't just create it, so Forgejo trying to execute git hooks
# that have #!/usr/bin/env as shebang fails with:
#
# To /build/repos44353414/user2/repo1.wiki.git
# ! [remote rejected] fda09356fb8b1da00546f764933f9dacda1b44ea -> master (pre-receive hook declined)
# error: failed to push some refs to '/build/repos44353414/user2/repo1.wiki.git'
# - remote: fatal: cannot exec '/build/appdata2719412950/home/hooks/pre-receive': No such file or directory
#
# We also can't just call patchShebangs because the hooks are
# created just in time by the test suite. Patching the source of
# the hooks after go build but before go test is oddly enough
# the least invasive hack to have those tests pass.
+ lib.optionalString (lib.versionAtLeast version "16") ''
substituteInPlace modules/git/hook_generate.go \
--replace-fail "#!/usr/bin/env" "#!${lib.getExe' coreutils "env"}"
'';
checkFlags =
@@ -124,6 +141,11 @@ buildGoModule rec {
"TestPassword" # requires network: api.pwnedpasswords.com
"TestCaptcha" # requires network: hcaptcha.com
"TestDNSUpdate" # requires network: release.forgejo.org
]
++ lib.optionals (lib.versionAtLeast version "16") [
"TestMigrateRepository" # requires network: codeberg.org
]
++ [
"TestMigrateWhiteBlocklist" # requires network: gitlab.com (DNS)
"TestURLAllowedSSH/Pushmirror_URL" # requires network git.gay (DNS)
"TestBleveDeleteIssue" # Known Flake-y https://github.com/NixOS/nixpkgs/issues/509878

View File

@@ -1 +0,0 @@
package.nix

View File

@@ -0,0 +1,11 @@
import ./generic.nix {
version = "15.0.5";
hash = "sha256-S+x/YEfQrYIzHLnZ7LDLnkMYVN3TajwS7SHydM8uMPQ=";
npmDepsHash = "sha256-BZSYjEsjUqMYWu3EUP+K35hqSOniv8Y6ek5bEC2vTPg=";
vendorHash = "sha256-00QiJ8W76FdG96fmsIRLkaYlMQTZoIRmRd/qYGyPuig=";
lts = true;
nixUpdateExtraArgs = [
"--override-filename"
"pkgs/by-name/fo/forgejo/lts.nix"
];
}

View File

@@ -1,9 +1,9 @@
import ./generic.nix {
version = "15.0.5";
hash = "sha256-S+x/YEfQrYIzHLnZ7LDLnkMYVN3TajwS7SHydM8uMPQ=";
npmDepsHash = "sha256-BZSYjEsjUqMYWu3EUP+K35hqSOniv8Y6ek5bEC2vTPg=";
vendorHash = "sha256-00QiJ8W76FdG96fmsIRLkaYlMQTZoIRmRd/qYGyPuig=";
lts = true;
version = "16.0.0";
hash = "sha256-BZawFbrtcxftX4/Yk32aoVRQ6Kg+k1FhN9IoH6dxvVY=";
npmDepsHash = "sha256-UhivpUqNJvc3zHxdRVAWT9x68jG1KnQa8yS4KkL2W5g=";
vendorHash = "sha256-cb6f7ZX3pG95EEZotGXn6+YUJN59SFNVHFTejFJ6y28=";
lts = false;
nixUpdateExtraArgs = [
"--override-filename"
"pkgs/by-name/fo/forgejo/package.nix"

View File

@@ -80,6 +80,9 @@ rustPlatform.buildRustPackage (finalAttrs: {
fontconfig
libxcb
libxkbcommon
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
git
];
cargoBuildFlags = [

View File

@@ -6,10 +6,10 @@
}:
let
pname = "hydralauncher";
version = "4.0.4";
version = "4.0.5";
src = fetchurl {
url = "https://github.com/hydralauncher/hydra/releases/download/v${version}/hydralauncher-${version}.AppImage";
hash = "sha256-0ORi6JAhws3HgApmwv7sgC9gJE/KcKtKxgz3CKD6BSw=";
hash = "sha256-9TAsBiSJ9ZjGoKuHDbPibu/ZDBM9kdk9BlY5zKysVQ4=";
};
appimageContents = appimageTools.extractType2 { inherit pname src version; };

View File

@@ -9,15 +9,15 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "jsonschema-cli";
version = "0.47.0";
version = "0.48.0";
src = fetchCrate {
pname = "jsonschema-cli";
inherit (finalAttrs) version;
hash = "sha256-0U9NBfkpqCZnNQIxQhNjErX/LehI3xOcUvHiYRKwrXo=";
hash = "sha256-nQblUoTzrheAQA6wlT/p/x72eATD3gUUjgBneMu6L2E=";
};
cargoHash = "sha256-q/3Nvl+hND94im0mzHqZRepE8GcB5Fec/0HurPgqOmY=";
cargoHash = "sha256-rm5v5S11mJRoyhUnSFXLKu/znKClnI6hOQY7qDpyb/U=";
preCheck = ''
export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt

View File

@@ -14,21 +14,21 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "kiro-cli";
version = "2.10.0";
version = "2.13.0";
src =
{
x86_64-linux = fetchurl {
url = "https://desktop-release.q.us-east-1.amazonaws.com/${finalAttrs.version}/kirocli-x86_64-linux.tar.gz";
hash = "sha256-cJl6CyYCzbLpB6m+W9Tx7enaPzijgjOBjdmG6CPMM8k=";
hash = "sha256-8qEnlNv8lQK3SCjYJ/AdfWB/RELpjLI0VQ7n4vKA7DI=";
};
aarch64-linux = fetchurl {
url = "https://desktop-release.q.us-east-1.amazonaws.com/${finalAttrs.version}/kirocli-aarch64-linux.tar.gz";
hash = "sha256-39hKSRi1l5ruSqObViksJkufiCOvLTaIkQzT3sNQFQQ=";
hash = "sha256-uKR5ZxuijDgfIJ4DmDVhN5XGHDyOyiRkLcTie2iuzZU=";
};
aarch64-darwin = fetchurl {
url = "https://desktop-release.q.us-east-1.amazonaws.com/${finalAttrs.version}/Kiro%20CLI.dmg";
hash = "sha256-NDeyXQO9NBsK3xqAEcO1gGn9ta+ZVQ1GNwZ4hbGUe3Q=";
hash = "sha256-GAK8+adzrEc1kXtHVCNC1aU09C86D9mroSQv7dXvbfo=";
};
}
.${system} or (throw "Unsupported system: ${system}");

View File

@@ -6,14 +6,14 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "mcp-server-git";
version = "2026.7.4";
version = "2026.7.10";
pyproject = true;
src = fetchFromGitHub {
owner = "modelcontextprotocol";
repo = "servers";
tag = finalAttrs.version;
hash = "sha256-rBdJoTC1wOEMbAAeSccFqaHL7lacf2SFfxZ/pp2Lx90=";
hash = "sha256-ORihWA8Xx7WAPo2+vRPpYNF9CGfc1sjmW+NfUKBGzxs=";
};
sourceRoot = "${finalAttrs.src.name}/src/git/";

View File

@@ -6,14 +6,14 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "mcp-server-time";
version = "2026.7.4";
version = "2026.7.10";
pyproject = true;
src = fetchFromGitHub {
owner = "modelcontextprotocol";
repo = "servers";
tag = finalAttrs.version;
hash = "sha256-rBdJoTC1wOEMbAAeSccFqaHL7lacf2SFfxZ/pp2Lx90=";
hash = "sha256-ORihWA8Xx7WAPo2+vRPpYNF9CGfc1sjmW+NfUKBGzxs=";
};
sourceRoot = "${finalAttrs.src.name}/src/time/";

View File

@@ -31,13 +31,13 @@ in
rustPlatform.buildRustPackage (finalAttrs: {
pname = "modrinth-app-unwrapped";
version = "0.15.7";
version = "0.15.11";
src = fetchFromGitHub {
owner = "modrinth";
repo = "code";
tag = "v${finalAttrs.version}";
hash = "sha256-QBWRvctC9gPHLU8tX/GWJocx7hcNOfnTYeVY3Qbx2jo=";
hash = "sha256-F5jMmc0Rqnabxe7ayKbRjA0OZ+WRINILnB3bsyXJP5M=";
};
patches = [
@@ -67,7 +67,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
--replace-fail '1.0.0-local' '${finalAttrs.version}'
'';
cargoHash = "sha256-HeEdvmf7ZR5/suanmJMYN3F/O/Xrk9Qza4l4kGahpf0=";
cargoHash = "sha256-UO8X/MvY5p1zkv53Xqig2itvP4x5XSXBzp1FDa+4YF0=";
mitmCache = gradle.fetchDeps {
inherit (finalAttrs) pname;
@@ -78,7 +78,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
inherit (finalAttrs) pname version src;
pnpm = pnpm_10;
fetcherVersion = 3;
hash = "sha256-pbEKD8xkO7+//m0PBcAL62q0LC5YEKR+wOPGnzXIRJk=";
hash = "sha256-T5Qa47iXM+nic/nnRqGE6bGlDPpV1SEMT5KpX5TMaAQ=";
};
nativeBuildInputs = [

View File

@@ -11,7 +11,7 @@
libpulseaudio,
withCoreAudio ? stdenv.hostPlatform.isDarwin,
withJack ? stdenv.hostPlatform.isUnix,
jack,
libjack2,
withConplay ? !stdenv.hostPlatform.isWindows,
perl,
writeScript,
@@ -45,7 +45,7 @@ stdenv.mkDerivation (finalAttrs: {
++ lib.optionals withPulse [ libpulseaudio ]
++ lib.optionals withCoreAudio [
]
++ lib.optionals withJack [ jack ]
++ lib.optionals withJack [ libjack2 ]
);
configureFlags =

View File

@@ -32,13 +32,13 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "music-assistant-desktop";
version = "0.5.7";
version = "0.5.9";
src = fetchFromGitHub {
owner = "music-assistant";
repo = "desktop-app";
tag = finalAttrs.version;
hash = "sha256-KKyIYSSIC134t46H7YOFNCdj4M/VoBrX9jN5aX/kSlc=";
hash = "sha256-hkG0e/WlnEQXdaYlE9tebzzE63l4RuwCVjHQVTcTo6Y=";
};
patches = [

View File

@@ -11,13 +11,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "osmo-hlr";
version = "1.9.2";
version = "1.9.3";
src = fetchFromGitHub {
owner = "osmocom";
repo = "osmo-hlr";
rev = finalAttrs.version;
hash = "sha256-SYyL7evxxmXGwv2TLr8ZuIrbu+GliAyuz/sKTIveQvc=";
hash = "sha256-+wAwMP3zoFFOlZa4LhCr2hxP97mEZPViniwoOxpINyk=";
};
postPatch = ''

View File

@@ -11,7 +11,7 @@
copyDesktopItems,
}:
let
version = "2.67.0";
version = "2.68.0";
in
python3Packages.buildPythonApplication rec {
inherit version;
@@ -22,7 +22,7 @@ python3Packages.buildPythonApplication rec {
owner = "pyfa-org";
repo = "Pyfa";
tag = "v${version}";
hash = "sha256-LS8KW6dZe/CYdA1LvZlq1vL8YllnDZkD9WEEDOToY1M=";
hash = "sha256-obx4YG75XxpdlaFlmFmkXdkazHERhm5boOzSx7zDRQs=";
};
desktopItems = [

View File

@@ -10,16 +10,17 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "rustical";
version = "0.13.1";
version = "0.14.0";
__darwinAllowLocalNetworking = true;
src = fetchFromGitHub {
owner = "lennart-k";
repo = "rustical";
tag = "v${finalAttrs.version}";
hash = "sha256-DNwxQq2QKPQ6gzIxBJUhdMNbmHNYnt+MSFJ28PLzunQ=";
hash = "sha256-V0gd4qFs3mRhajhBbtVO835HLAwLKswFQDaURENNTOM=";
};
cargoHash = "sha256-bIbDohCkSlV7uBi+lyylLE/gSqjzlp+xwxQRS9zBiio=";
cargoHash = "sha256-HJeN9xv1U6l1ailE+8L+wlZSCKiCZyhfsh7uT+zebE0=";
nativeBuildInputs = [ pkg-config ];

View File

@@ -0,0 +1,80 @@
{
lib,
stdenvNoCC,
fetchFromGitHub,
fetchPnpmDeps,
pnpmConfigHook,
pnpm_10,
nodejs-slim_24,
nix-update-script,
}:
let
nodejs-slim = nodejs-slim_24;
pnpm = pnpm_10.override { inherit nodejs-slim; };
in
stdenvNoCC.mkDerivation (finalAttrs: {
__darwinAllowLocalNetworking = true;
__structuredAttrs = true;
strictDeps = true;
pname = "sable-unwrapped";
version = "1.20.0";
src = fetchFromGitHub {
owner = "SableClient";
repo = "Sable";
tag = "v${finalAttrs.version}";
hash = "sha256-ams6Uwblo5mUzah9hlCPCUMXtrLtiUtRWwwKH4uabmk=";
};
pnpmDeps = fetchPnpmDeps {
inherit (finalAttrs) pname version src;
inherit pnpm;
fetcherVersion = 3;
hash = "sha256-iBvtMeYUHWhsz1DnKjTzydAt3cGPaisUhaagoaZRg1M=";
};
nativeBuildInputs = [
nodejs-slim
pnpmConfigHook
pnpm
];
# Controls how the application displays its version, e.g. "v1.14.0 (nix)".
# Also prevents some attempts to execute git during build.
env = {
VITE_IS_RELEASE_TAG = "true";
VITE_BUILD_HASH = "nix";
};
buildPhase = ''
runHook preBuild
pnpm build
runHook postBuild
'';
installPhase = ''
runHook preInstall
cp -r dist $out
runHook postInstall
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "An almost stable Matrix client";
homepage = "https://github.com/SableClient/Sable";
changelog = "https://github.com/SableClient/Sable/releases/tag/v${finalAttrs.version}";
license = lib.licenses.agpl3Only;
platforms = lib.platforms.all;
maintainers = with lib.maintainers; [
fugi
];
};
})

View File

@@ -2,6 +2,7 @@
lib,
stdenv,
fetchurl,
fetchpatch,
meson,
ninja,
pkg-config,
@@ -38,6 +39,22 @@ stdenv.mkDerivation (finalAttrs: {
patches = [
./remove-rt-on-darwin.patch
# C++ does not allow designated initializers to refer to members of
# anonymous unions. This fails with GCC 16, and was fixed upstream across
# two merge requests but not yet released.
# https://gitlab.freedesktop.org/spice/spice/-/merge_requests/246
(fetchpatch {
name = "spice-test-display-base-initializer-anonymous-union.patch";
url = "https://gitlab.freedesktop.org/spice/spice/-/commit/59bc22a40611121b2ea7888bf3c1a501c4fc0b91.patch";
hash = "sha256-VQ+DrzmIws3EyZU5c0OqMZwMltUvCW34h5oXuHB8YWs=";
})
# https://gitlab.freedesktop.org/spice/spice/-/merge_requests/244
(fetchpatch {
name = "spice-test-gst-initializer-anonymous-union.patch";
url = "https://gitlab.freedesktop.org/spice/spice/-/commit/a904cd86430aa555a50730e9389e210637a546c1.patch";
hash = "sha256-6GGqi+Y4I/oftE8zXuRnX021+r7SrQPUdAdBsCv9MIw=";
})
];
nativeBuildInputs = [

View File

@@ -38,7 +38,7 @@ in
stdenv.mkDerivation {
pname = if tde2eOnly then "tde2e" else "tdlib";
version = "1.8.65";
version = "1.8.66";
src = fetchFromGitHub {
owner = "tdlib";
@@ -47,8 +47,8 @@ stdenv.mkDerivation {
# The tdlib authors do not set tags for minor versions, but
# external programs depending on tdlib constrain the minor
# version, hence we set a specific commit with a known version.
rev = "a8f21f5230172634becc1739050ef23ecd6ea291";
hash = "sha256-cCNXRyeu6ZMf/0oxipPPUyniGuLzvWFLWCvklPIYvzk=";
rev = "a9966eb3704a3351568c28013fed67d797c17828";
hash = "sha256-lCfQIehcH5jNQ7rOR6U4Ht+LCcmQRqkRtl0TFuYVdJg=";
};
buildInputs = [

View File

@@ -7,15 +7,15 @@
}:
buildGo126Module rec {
pname = "torrserver";
version = "142";
version = "142.1";
src = fetchFromGitHub {
owner = "YouROK";
repo = "TorrServer";
tag = "MatriX.${version}";
sha256 = "sha256-bAnnDbrKYfU3WdjwIW4GGDST4S13KIhGNoQQtI27UaQ=";
sha256 = "sha256-/CNY1wQxEs3rzHx04s1LWVNnN10JmiLjh48WBo2nid8=";
};
vendorHash = "sha256-B5BAmdFuLWDkbp/lehFziyHXcMPIAgNySgTPv9Nv680=";
vendorHash = "sha256-M9rI/AU5ZWJre8B92OoGZZBd1C3bc4R8+r0SYAgY/C4=";
modRoot = "server";
subPackages = [ "cmd" ];

View File

@@ -9,18 +9,18 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "userborn";
version = "0.5.0";
version = "1.0.0";
src = fetchFromGitHub {
owner = "nikstur";
repo = "userborn";
rev = finalAttrs.version;
hash = "sha256-mXXakR75Iz6AFf/TYgIHE8SxOri2HyReYUYTT3lCEPA=";
tag = finalAttrs.version;
hash = "sha256-ZVO1Q6iumGVKA/35RYUBV79i9ECqNmjeHXAyjxikUfE=";
};
sourceRoot = "${finalAttrs.src.name}/rust/userborn";
cargoHash = "sha256-uAid5GsM9lasVQAYfeo9jwp4xg1MrXdJqtD0l6ME6OQ=";
cargoHash = "sha256-UNd4RMM8VbmRbEAr8ZDSbNwG07058jasMP0IqcIk7/E=";
nativeBuildInputs = [ rustPlatform.bindgenHook ];

View File

@@ -20,16 +20,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "walker";
version = "2.16.2";
version = "2.17.0";
src = fetchFromGitHub {
owner = "abenz1267";
repo = "walker";
rev = "v${finalAttrs.version}";
hash = "sha256-fX3ErzTmHRO9z1SzHC2VZUgKOgRfO13X/joC5a3QN7Q=";
hash = "sha256-gxHJsrJZo2qbKK47Kf/9ho3i/HhRwkL8XvPnczGPd9E=";
};
cargoHash = "sha256-gm7xQ7qHui8F+uJBWKh7Fen0Zfi/YqpbdgNSoqar0wA=";
cargoHash = "sha256-TkBdBgUa0fMN/Eddi0qycNjNgYaVECRFbrXixOEpQnc=";
nativeBuildInputs = [
gobject-introspection

View File

@@ -118,6 +118,7 @@ rec {
"armv6l-netbsd"
"mipsel-netbsd"
"riscv64-netbsd"
"riscv32-none"
"x86_64-redox"
"wasm32-wasi"
];

View File

@@ -10,14 +10,14 @@
buildPythonPackage (finalAttrs: {
pname = "aioslimproto";
version = "3.1.8";
version = "3.1.9";
pyproject = true;
src = fetchFromGitHub {
owner = "home-assistant-libs";
repo = "aioslimproto";
tag = finalAttrs.version;
hash = "sha256-xHdwikriA6mcb7tmElqa6suINYxeyyGZQ5iO+P7dRCo=";
hash = "sha256-IyDgnBQC8EbDzwRFWgmVOf4lVNsmdiTaMfpWXHUa4oM=";
};
postPatch = ''

View File

@@ -0,0 +1,112 @@
#!/usr/bin/env python3
# Builds the FPGA bitstreams `cynthion flash` needs, one set per revision, into
# assets/<CynthionPlatformRevXDY>/{analyzer,facedancer,selftest}.bit
import asyncio
import inspect
import logging
import os
import sys
from pathlib import Path
import cynthion.gateware.platform
logging.basicConfig(level=logging.INFO, format="%(asctime)s:%(name)32s:%(message)s")
logger = logging.getLogger("build-gateware")
BITSTREAMS = ["analyzer", "facedancer", "selftest"]
# Pin the nextpnr placer seed so place-and-route is deterministic. Some
# bitstreams (e.g. CynthionPlatformRev1D3/analyzer) are marginal on timing, and
# without a fixed seed a build can non-deterministically miss the constraint.
NEXTPNR_SEED = 0
async def build_bitstream(
semaphore: asyncio.Semaphore, assets_dir: Path, platform: str, bitstream: str
) -> None:
async with semaphore:
log = logging.getLogger(f"build-gateware.{platform}.{bitstream}")
log.info("build started")
env = os.environ.copy()
env["LUNA_PLATFORM"] = f"cynthion.gateware.platform:{platform}"
env["AMARANTH_nextpnr_opts"] = f"--seed {NEXTPNR_SEED}"
out_dir = assets_dir / platform
out_dir.mkdir(parents=True, exist_ok=True)
out_path = out_dir / f"{bitstream}.bit"
process = await asyncio.create_subprocess_exec(
sys.executable,
"-m",
f"cynthion.gateware.{bitstream}.top",
"--output",
str(out_path),
env=env,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.STDOUT,
)
stdout, _ = await process.communicate()
log.info("\n%s", stdout.decode("utf-8", errors="replace"))
if process.returncode != 0:
raise RuntimeError(
f"{platform}/{bitstream} failed with exit code {process.returncode}"
)
log.info("build complete")
def collect_platforms() -> set[str]:
platforms = {
name
for name, obj in inspect.getmembers(cynthion.gateware.platform)
if inspect.isclass(obj) and name.startswith("CynthionPlatform")
}
# Allow restricting the set of platforms during development/CI, e.g.
# BUILD_GATEWARE_PLATFORMS="CynthionPlatformRev1D4"
only = os.getenv("BUILD_GATEWARE_PLATFORMS")
if only:
requested = set(only.split())
unknown = requested - platforms
if unknown:
raise ValueError(f"unknown platform(s): {', '.join(sorted(unknown))}")
platforms = requested
return platforms
async def main() -> int:
assets_dir = Path(sys.argv[1])
max_workers = int(os.getenv("BUILD_GATEWARE_MAX_WORKERS") or 1)
platforms = collect_platforms()
logger.info(
"Building %d bitstream(s) for platforms: %s",
len(platforms) * len(BITSTREAMS),
", ".join(sorted(platforms)),
)
semaphore = asyncio.Semaphore(max_workers)
logger.info("Building gateware with %d workers", max_workers)
results = await asyncio.gather(
*(
build_bitstream(semaphore, assets_dir, platform, bitstream)
for platform in sorted(platforms)
for bitstream in BITSTREAMS
),
return_exceptions=True,
)
failures = [r for r in results if isinstance(r, BaseException)]
for failure in failures:
logger.error(failure)
return 1 if failures else 0
sys.exit(asyncio.run(main()))

View File

@@ -2,6 +2,14 @@
lib,
fetchFromGitHub,
buildPythonPackage,
callPackage,
python,
# gateware (FPGA toolchain)
nextpnr,
trellis,
which,
yosys,
# build-system
setuptools,
@@ -25,10 +33,8 @@
pytestCheckHook,
udevCheckHook,
}:
buildPythonPackage rec {
pname = "cynthion";
let
version = "0.2.5";
pyproject = true;
src = fetchFromGitHub {
owner = "greatscottgadgets";
@@ -37,6 +43,14 @@ buildPythonPackage rec {
hash = "sha256-Ju01eqBVZ7CD0pw4nIFML4LcCPXzC78dLpQru3a+5bU=";
};
# Moondancer SoC firmware, required for `cynthion flash facedancer`.
moondancer = callPackage ./moondancer.nix { inherit src version; };
in
buildPythonPackage {
pname = "cynthion";
inherit version src;
pyproject = true;
sourceRoot = "${src.name}/cynthion/python";
postPatch = ''
@@ -45,14 +59,19 @@ buildPythonPackage rec {
--replace-fail 'dynamic = ["version"]' 'version = "${version}"'
'';
nativeBuildInputs = [ udevCheckHook ];
nativeBuildInputs = [
udevCheckHook
build-system = [
setuptools
# Used by the gateware build in postInstall.
nextpnr
trellis
which
yosys
];
pythonRelaxDeps = [ "pygreat" ];
build-system = [ setuptools ];
pythonRelaxDeps = [ "pygreat" ];
pythonRemoveDeps = [ "future" ];
dependencies = [
@@ -71,18 +90,34 @@ buildPythonPackage rec {
tqdm
];
nativeCheckInputs = [
pytestCheckHook
];
nativeCheckInputs = [ pytestCheckHook ];
# Build the per-revision FPGA bitstreams in parallel (see build_gateware.py).
enableParallelBuilding = true;
pythonImportsCheck = [ "cynthion" ];
# Make udev rules available for NixOS option services.udev.packages
postInstall = ''
install -Dm444 \
-t $out/lib/udev/rules.d \
build/lib/cynthion/assets/54-cynthion.rules
'';
postInstall =
let
assets = "$out/${python.sitePackages}/cynthion/assets";
in
''
# Build a bitstream set per hardware revision into assets/, where
# `cynthion flash` looks for them.
export BUILD_GATEWARE_MAX_WORKERS="''${NIX_BUILD_CORES:-1}"
PYTHONPATH="$out/${python.sitePackages}''${PYTHONPATH:+:$PYTHONPATH}" \
python ${./build_gateware.py} "${assets}"
# Install the moondancer SoC firmware for `cynthion flash facedancer`.
install -Dm444 ${moondancer}/bin/moondancer.bin "${assets}/moondancer.bin"
# Make udev rules available for NixOS option services.udev.packages
install -Dm444 \
-t $out/lib/udev/rules.d \
build/lib/cynthion/assets/54-cynthion.rules
'';
passthru = { inherit moondancer; };
meta = {
description = "Python package and utilities for the Great Scott Gadgets Cynthion USB Test Instrument";

View File

@@ -0,0 +1,54 @@
{
lib,
src,
version,
stdenv,
llvmPackages,
}:
let
# Moondancer SoC firmware, cross-compiled for the bare-metal riscv32imac
# VexRiscv softcore inside the facedancer gateware.
cross = import ../../../.. {
localSystem = stdenv.hostPlatform.system;
crossSystem = lib.systems.examples.riscv32-embedded // {
rust.rustcTarget = "riscv32imac-unknown-none-elf";
};
};
inherit (cross) rustPlatform;
in
rustPlatform.buildRustPackage {
pname = "moondancer";
inherit version src;
sourceRoot = "${src.name}/firmware";
cargoHash = "sha256-G/9evh3G1xNRaaEh6lgDp3hnVlB3MaCwXuhGnGJCd0Q=";
# fails to build otherwise
auditable = false;
nativeBuildInputs = [
llvmPackages.bintools
];
# lld strips live code without link-dead-code; memory.x (workspace root) and
# link.x (from riscv-rt) are the linker scripts.
RUSTFLAGS = "-C linker=lld -C link-arg=-Tmemory.x -C link-arg=-Tlink.x -C link-dead-code";
# cynthion flash needs a raw image, not an ELF (as upstream's
# `cargo objcopy -Obinary`).
postInstall = ''
llvm-objcopy -O binary \
$out/bin/moondancer \
$out/bin/moondancer.bin
'';
meta = {
description = "Moondancer SoC firmware for the Great Scott Gadgets Cynthion";
homepage = "https://github.com/greatscottgadgets/cynthion";
license = lib.licenses.bsd3;
platforms = [ "riscv32-none" ];
};
}

View File

@@ -2,11 +2,13 @@
lib,
buildPythonPackage,
dramatiq,
fetchFromGitLab,
fetchFromGitHub,
flask-migrate,
flask-sqlalchemy,
flask,
httpx,
periodiq,
poetry-core,
hatchling,
postgresql,
postgresqlTestHook,
psycopg2,
@@ -16,35 +18,33 @@
requests,
}:
buildPythonPackage {
buildPythonPackage (finalAttrs: {
pname = "flask-dramatiq";
version = "0.6.0";
version = "0.8.0";
pyproject = true;
src = fetchFromGitLab {
owner = "bersace";
src = fetchFromGitHub {
owner = "pallets-eco";
repo = "flask-dramatiq";
rev = "840209e9bf582b4dda468e8bba515f248f3f8534";
hash = "sha256-qjV1zyVzHPXMt+oUeGBdP9XVlbcSz2MF9Zygj543T4w=";
tag = "v${finalAttrs.version}";
hash = "sha256-Gt9yynbmFWMISP1U0jRjU6oY3ImrLxYa2D0xf0llCEg=";
};
postPatch = ''
substituteInPlace pyproject.toml \
--replace 'poetry>=0.12' 'poetry-core' \
--replace 'poetry.masonry.api' 'poetry.core.masonry.api'
patchShebangs --build ./example.py
'';
build-system = [ poetry-core ];
build-system = [ hatchling ];
pythonRelaxDeps = [ "dramatiq" ];
dependencies = [ dramatiq ];
nativeCheckInputs = [
flask-sqlalchemy
flask
flask-migrate
httpx
periodiq
postgresql
postgresqlTestHook
@@ -54,7 +54,8 @@ buildPythonPackage {
pytestCheckHook
requests
]
++ dramatiq.optional-dependencies.rabbitmq;
++ dramatiq.optional-dependencies.rabbitmq
++ dramatiq.optional-dependencies.watch;
postgresqlTestSetupPost = ''
substituteInPlace config.py \
@@ -72,8 +73,8 @@ buildPythonPackage {
meta = {
description = "Adds Dramatiq support to your Flask application";
homepage = "https://gitlab.com/bersace/flask-dramatiq";
homepage = "https://github.com/pallets-eco/flask-dramatiq";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ traxys ];
};
}
})

View File

@@ -10,18 +10,23 @@
writableTmpDirAsHomeHook,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "llm-tools-sqlite";
version = "0.1";
pyproject = true;
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "simonw";
repo = "llm-tools-sqlite";
tag = version;
tag = finalAttrs.version;
hash = "sha256-VAmK4cXzZWTWCU92TwMdhNJPvYPZ88t5BZe8vo60SZY=";
};
patches = [
./fix-test.patch
];
build-system = [ setuptools ];
dependencies = [ llm ];
@@ -39,8 +44,8 @@ buildPythonPackage rec {
meta = {
description = "LLM tools for running queries against SQLite";
homepage = "https://github.com/simonw/llm-tools-sqlite";
changelog = "https://github.com/simonw/llm-tools-sqlite/releases/tag/${version}/CHANGELOG.md";
changelog = "https://github.com/simonw/llm-tools-sqlite/releases/tag/${finalAttrs.version}/CHANGELOG.md";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ philiptaron ];
};
}
})

View File

@@ -0,0 +1,13 @@
diff --git a/tests/test_llm_tools_sqlite.py b/tests/test_llm_tools_sqlite.py
index a676007..4d653b6 100644
--- a/tests/test_llm_tools_sqlite.py
+++ b/tests/test_llm_tools_sqlite.py
@@ -47,7 +47,7 @@ def test_tool(monkeypatch, tmpdir):
{"name": "SQLite_query", "output": '[{"n": 3}]', "tool_call_id": None},
{
"name": "SQLite_schema",
- "output": "CREATE TABLE [pelicans] (\n [name] TEXT\n);",
+ "output": "CREATE TABLE \"pelicans\" (\n \"name\" TEXT\n);",
"tool_call_id": None,
},
{

View File

@@ -4,7 +4,7 @@
callPackage,
buildPythonPackage,
fetchFromGitHub,
fetchpatch,
fetchpatch2,
pytestCheckHook,
replaceVars,
setuptools,
@@ -164,30 +164,28 @@ let
'') withPluginsArgNames
)
);
llm = buildPythonPackage rec {
llm = buildPythonPackage (finalAttrs: {
pname = "llm";
version = "0.30";
version = "0.31.1";
pyproject = true;
__structuredAttrs = true;
build-system = [ setuptools ];
src = fetchFromGitHub {
owner = "simonw";
repo = "llm";
tag = version;
hash = "sha256-+8fwx7sS1vFSTqb+p2uDLqWW/UIx8WoW3kYJihznRRg=";
tag = finalAttrs.version;
hash = "sha256-XxQ6IQyuO1rxQtiyb4VGrM7uGoffuNN5BhyI4YDxnZg=";
};
patches = [
./001-disable-install-uninstall-commands.patch
]
# See https://github.com/NixOS/nixpkgs/issues/476258 and https://github.com/simonw/llm/pull/1334
# TODO: Remove when sqlite 3.52.x is released.
++ lib.optionals (sqlite.version == "3.51.1") [
(fetchpatch {
url = "https://github.com/simonw/llm/commit/6e24b883c3e3c4ddd2ec9006714d0a9ec17b59da.patch";
hash = "sha256-4AKQdZCr6qxuWnjWoSW6I44hPL5e7tnvREx2Ns0WwNc=";
# Remove when https://github.com/simonw/llm/pull/1525 gets merged.
./do-not-commit-inside-content_hash-embeddings.patch
(fetchpatch2 {
url = "https://github.com/simonw/llm/commit/67adad2c10be5c1898e3e1a664adb573f5d032cf.patch";
hash = "sha256-7+sBQvef94ZTUrqNKVzHzjFADNj1KNzA2tbGs5btwNA=";
})
];
@@ -265,7 +263,7 @@ let
meta = {
homepage = "https://github.com/simonw/llm";
description = "Access large language models from the command-line";
changelog = "https://github.com/simonw/llm/releases/tag/${src.tag}";
changelog = "https://github.com/simonw/llm/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.asl20;
mainProgram = "llm";
maintainers = with lib.maintainers; [
@@ -274,6 +272,6 @@ let
philiptaron
];
};
};
});
in
llm

View File

@@ -0,0 +1,66 @@
From db03b44068e71f5266b720eb68ecae50e3e14303 Mon Sep 17 00:00:00 2001
From: Ewerton Silva <ewertoncom297@gmail.com>
Date: Sat, 11 Jul 2026 23:50:58 -0300
Subject: [PATCH] fix: do not commit inside the content_hash embeddings
migration
---
llm/embeddings_migrations.py | 21 ++++++++++-----------
tests/test_migrate.py | 12 ++++++++++++
2 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/llm/embeddings_migrations.py b/llm/embeddings_migrations.py
index 96444bd65..595a692d9 100644
--- a/llm/embeddings_migrations.py
+++ b/llm/embeddings_migrations.py
@@ -62,17 +62,16 @@ def random_md5():
db.conn.create_function("temp_md5", 1, md5)
db.conn.create_function("temp_random_md5", 0, random_md5)
- with db.conn:
- db.execute("""
- update embeddings
- set content_hash = temp_md5(content)
- where content is not null
- """)
- db.execute("""
- update embeddings
- set content_hash = temp_random_md5()
- where content is null
- """)
+ db.execute("""
+ update embeddings
+ set content_hash = temp_md5(content)
+ where content is not null
+ """)
+ db.execute("""
+ update embeddings
+ set content_hash = temp_random_md5()
+ where content is null
+ """)
db["embeddings"].create_index(["content_hash"])
diff --git a/tests/test_migrate.py b/tests/test_migrate.py
index 705021100..e74b1554b 100644
--- a/tests/test_migrate.py
+++ b/tests/test_migrate.py
@@ -117,6 +117,18 @@ def test_migrations_for_embeddings():
assert db["embeddings"].foreign_keys[0].other_table == "collections"
+@pytest.mark.skipif(
+ not hasattr(sqlite_utils.Database, "atomic"),
+ reason="sqlite-utils 4 and higher run each migration inside a transaction",
+)
+def test_embeddings_migrations_do_not_commit():
+ # https://github.com/simonw/llm/issues/1523
+ db = sqlite_utils.Database(memory=True)
+ for migration in embeddings_migrations.pending(db):
+ with db.atomic():
+ migration.fn(db)
+
+
def test_backfill_content_hash():
db = sqlite_utils.Database(memory=True)
# Run migrations up to but not including m004_store_content_hash

View File

@@ -26,6 +26,14 @@ buildPythonPackage rec {
substituteInPlace pyproject.toml \
--replace-fail '"setuptools-git-versioning<2"' "" \
--replace-fail 'dynamic = ["version"]' 'version = "${version}"'
# Read CSR field annotations from the class, not the instance, so amaranth-soc
# works on Python 3.14 (PEP 649). https://github.com/greatscottgadgets/luna-soc/issues/48
substituteInPlace luna_soc/gateware/vendor/amaranth_soc/csr/reg.py \
--replace-fail 'if hasattr(self, "__annotations__"):' \
'if getattr(type(self), "__annotations__", None):' \
--replace-fail 'filter_fields(self.__annotations__)' \
'filter_fields(type(self).__annotations__)'
'';
build-system = [

View File

@@ -2,7 +2,9 @@
lib,
awesomeversion,
buildPythonPackage,
cacert,
docutils,
dulwich,
fetchFromGitHub,
flaky,
installShellFiles,
@@ -12,6 +14,7 @@
packaging,
platformdirs,
pycurl,
pygit2,
pytest-asyncio,
pytestCheckHook,
pytest-httpbin,
@@ -22,16 +25,16 @@
zstandard,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "nvchecker";
version = "2.20";
version = "2.21";
pyproject = true;
src = fetchFromGitHub {
owner = "lilydjwg";
repo = "nvchecker";
tag = "v${version}";
hash = "sha256-udwflm3C7C6Q7rSA0x0+8uf1F5quy2okf2IyZqKtA3E=";
tag = "v${finalAttrs.version}";
hash = "sha256-XQrroiuDM9ISmfQLUbYIAzBOSYtO6q1MXqMfC3X8BUI=";
};
__darwinAllowLocalNetworking = true;
@@ -57,6 +60,12 @@ buildPythonPackage rec {
htmlparser = [ lxml ];
rpmrepo = [ lxml ] ++ lib.optionals (pythonOlder "3.14") [ zstandard ];
jq = [ jq ];
git_pygit2 = [ pygit2 ];
git_dulwich = [ dulwich ];
};
env = lib.optionalAttrs finalAttrs.doInstallCheck {
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
};
nativeCheckInputs = [
@@ -64,7 +73,8 @@ buildPythonPackage rec {
pytest-asyncio
pytest-httpbin
pytestCheckHook
];
]
++ builtins.concatLists (builtins.attrValues finalAttrs.passthru.optional-dependencies);
postBuild = ''
patchShebangs docs/myrst2man.py
@@ -84,8 +94,8 @@ buildPythonPackage rec {
meta = {
description = "New version checker for software";
homepage = "https://github.com/lilydjwg/nvchecker";
changelog = "https://github.com/lilydjwg/nvchecker/releases/tag/${src.tag}";
changelog = "https://github.com/lilydjwg/nvchecker/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ mdaniels5757 ];
};
}
})

View File

@@ -1,23 +1,30 @@
{
lib,
buildPythonPackage,
fetchPypi,
fetchFromGitHub,
pytestCheckHook,
setuptools,
uv-build,
sqlite-utils,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "sqlite-migrate";
version = "0.1b0";
version = "0.2";
pyproject = true;
__structuredAttrs = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-jVArPKS5xF5WASvTXAPSMjXwgjyXbUzpQMu0DjMIfe0=";
src = fetchFromGitHub {
owner = "simonw";
repo = "sqlite-migrate";
tag = finalAttrs.version;
hash = "sha256-0fU3yOujqc4mZS4XcsM9xH2iK9fFX5MUsmuc/o+I+nY=";
};
nativeBuildInputs = [ setuptools ];
build-system = [
setuptools
uv-build
];
propagatedBuildInputs = [ sqlite-utils ];
@@ -28,8 +35,8 @@ buildPythonPackage rec {
meta = {
description = "Simple database migration system for SQLite, based on sqlite-utils";
homepage = "https://github.com/simonw/sqlite-migrate";
changelog = "https://github.com/simonw/sqlite-migrate/releases/tag/${version}";
changelog = "https://github.com/simonw/sqlite-migrate/releases/tag/${finalAttrs.version}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ aldoborrero ];
};
}
})

View File

@@ -1,7 +1,7 @@
{
lib,
buildPythonPackage,
fetchPypi,
fetchFromGitHub,
click,
click-default-group,
python-dateutil,
@@ -15,17 +15,19 @@
sqlite-utils,
setuptools,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "sqlite-utils";
version = "3.39";
version = "4.1.1";
pyproject = true;
__structuredAttrs = true;
build-system = [ setuptools ];
src = fetchPypi {
inherit version;
pname = "sqlite_utils";
hash = "sha256-v6Lqwps+PrXJZHKDeXUn/rz079Spu7Mdl5oUoR75280=";
src = fetchFromGitHub {
owner = "simonw";
repo = "sqlite-utils";
tag = finalAttrs.version;
hash = "sha256-igf4d+5iyC+gYb9TL2JCNzTmTrCgRdR9gscTcfslDng=";
};
dependencies = [
@@ -51,11 +53,11 @@ buildPythonPackage rec {
description = "Python CLI utility and library for manipulating SQLite databases";
mainProgram = "sqlite-utils";
homepage = "https://github.com/simonw/sqlite-utils";
changelog = "https://github.com/simonw/sqlite-utils/releases/tag/${version}";
changelog = "https://github.com/simonw/sqlite-utils/releases/tag/${finalAttrs.version}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [
meatcar
techknowlogick
];
};
}
})

View File

@@ -1,6 +1,8 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
setuptools,
cachetools,
cytoolz,
fetchPypi,
@@ -10,7 +12,6 @@
matplotlib,
networkx,
numpy,
pyemd,
pyphen,
pytestCheckHook,
requests,
@@ -20,26 +21,29 @@
tqdm,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "textacy";
version = "0.13.0";
pyproject = true;
__structuredAttrs = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-a+AkSMCPx9fE7fhSiQBuOaSlPvdHIB/yS2dcZS9AxoY=";
src = fetchFromGitHub {
owner = "chartbeat-labs";
repo = "textacy";
tag = finalAttrs.version;
hash = "sha256-QVxC9oV1X5ifQ9VVYissppni1A8LACz/FVgaoG5/GFU=";
};
propagatedBuildInputs = [
build-system = [ setuptools ];
dependencies = [
cachetools
cytoolz
floret
jellyfish
joblib
matplotlib
networkx
numpy
pyemd
pyphen
requests
scikit-learn
@@ -48,6 +52,10 @@ buildPythonPackage rec {
tqdm
];
optional-dependencies = {
vis = [ matplotlib ];
};
nativeCheckInputs = [ pytestCheckHook ];
enabledTestPaths = [
@@ -64,6 +72,8 @@ buildPythonPackage rec {
meta = {
description = "Higher-level text processing, built on spaCy";
homepage = "https://textacy.readthedocs.io/";
changelog = "https://github.com/chartbeat-labs/textacy/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.asl20;
maintainers = [ ];
};
}
})

View File

@@ -7,21 +7,22 @@
rustPlatform,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "uuid-utils";
version = "0.16.1";
version = "0.17.0";
pyproject = true;
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "aminalaee";
repo = "uuid-utils";
tag = version;
hash = "sha256-5pGBc1+2Vx0nIwhLFBy/Mx5GLLzA7Oj4eWPPCfBV1v4=";
tag = finalAttrs.version;
hash = "sha256-AshQOXB6o1CMByRn9um8E2Y4sexyRu4W8H3NelFe1HM=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
inherit pname src version;
hash = "sha256-o9fmecoYGu+UR0/Km6sGq5buVo8qHKnBSuvvfogmkx0=";
inherit (finalAttrs) pname src version;
hash = "sha256-vf6w+oYH3tdxvV5TLSgZOAXlFypCe2swjkw25VWCqB8=";
};
nativeBuildInputs = with rustPlatform; [
@@ -50,8 +51,8 @@ buildPythonPackage rec {
meta = {
description = "Python bindings to Rust UUID";
homepage = "https://github.com/aminalaee/uuid-utils";
changelog = "https://github.com/aminalaee/uuid-utils/releases/tag/${src.tag}";
changelog = "https://github.com/aminalaee/uuid-utils/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ sarahec ];
};
}
})

View File

@@ -9077,10 +9077,6 @@ with pkgs;
mopidy-ytmusic
;
mpg123 = callPackage ../applications/audio/mpg123 {
jack = libjack2;
};
libmpg123 = mpg123.override {
libOnly = true;
withConplay = false;
@@ -9336,6 +9332,11 @@ with pkgs;
rusty-psn-gui = rusty-psn.override { withGui = true; };
sable = callPackage ../by-name/ci/cinny/package.nix {
pname = "sable";
cinny-unwrapped = sable-unwrapped;
};
sweethome3d = recurseIntoAttrs (
(callPackage ../applications/misc/sweethome3d { })
// (callPackage ../applications/misc/sweethome3d/editors.nix {