1
0
forked from tribes/guix

Compare commits

..

62 Commits

Author SHA1 Message Date
Patrick Norton a15d5a0bf4 gnu: Use built-in delete-all-but.
* gnu/packages/astronomy.scm (phd2): Use built-in delete-all-but.
* gnu/packages/debug.scm (fandango): Likewise.
* gnu/packages/electronics.scm (librepcb, nextpnr): Likewise.
* gnu/packages/emacs-xyz.scm (emacs-smartparens): Likewise.
* gnu/packages/emulators.scm (dolphin-emu, libretro-dolphin-emu)
  (libretro-slang-shaders, mgba, pcsx2, retroarch-minimal): Likewise.
* gnu/packages/game-development.scm (sfml): Likewise.
* gnu/packages/golang-apps.scm (godoc): Likewise.
* gnu/packages/golang-build.scm (go-golang-org-x-tools-go-expect)
  (go-golang-org-x-tools-go-packages-packagestest)
  (go-golang-org-x-tools-godoc): Likewise.
* gnu/packages/golang-web.scm (go-cloud-google-com-go-auth)
  (go-cloud-google-com-go-auth-oauth2adapt)
  (go-cloud-google-com-go-iam, go-cloud-google-com-go-kms)
  (go-cloud-google-com-go-longrunning)
  (go-cloud-google-com-go-monitoring, go-cloud-google-com-go-security)
  (go-cloud-google-com-go-storage)
  (go-github-com-aws-aws-sdk-go-v2-config)
  (go-github-com-aws-aws-sdk-go-v2-credentials)
  (go-github-com-aws-aws-sdk-go-v2-feature-ec2-imds)
  (go-github-com-aws-aws-sdk-go-v2-internal-configsources)
  (go-github-com-aws-aws-sdk-go-v2-internal-endpoints-v2)
  (go-github-com-aws-aws-sdk-go-v2-service-kms)
  (go-github-com-aws-aws-sdk-go-v2-service-sqs)
  (go-github-com-azure-azure-sdk-for-go-sdk-azcore)
  (go-github-com-azure-azure-sdk-for-go-sdk-azidentity)
  (go-github-com-azure-azure-sdk-for-go-sdk-internal)
  (go-github-com-azure-azure-sdk-for-go-sdk-security-keyvault-azkeys)
  (go-github-com-azure-azure-sdk-for-go-sdk-security-keyvault-intern)
  (go-github-com-azure-azure-sdk-for-go-sdk-storage-azblob)
  (go-github-com-azure-azure-sdk-for-go-sdk-storage-azfile)
  (go-github-com-envoyproxy-go-control-plane-envoy)
  (go-github-com-googlecloudplatform-opentelemetry-operations-go-exp)
  (go-github-com-googlecloudplatform-opentelemetry-operations-go-int)
  (go-github-com-grpc-ecosystem-go-grpc-middleware-providers-prometh)
  (go-github-com-hashicorp-go-secure-stdlib-parseutil)
  (go-github-com-jtolio-crawlspace-tools)
  (go-github-com-moby-moby-client)
  (go-github-com-sigstore-sigstore-pkg-signature-kms-aws)
  (go-github-com-sigstore-sigstore-pkg-signature-kms-azure)
  (go-github-com-sigstore-sigstore-pkg-signature-kms-gcp)
  (go-github-com-sigstore-sigstore-pkg-signature-kms-hashivault)
  (go-go-etcd-io-etcd-api-v3, go-go-etcd-io-etcd-client-pkg-v3)
  (go-go-opentelemetry-io-auto-sdk)
  (go-go-opentelemetry-io-contrib-detectors-gcp)
  (go-go-opentelemetry-io-contrib-propagators-autoprop)
  (go-go-opentelemetry-io-otel-exporters-otlp-otlpmetric-otlpmetricg)
  (go-go-opentelemetry-io-otel-exporters-otlp-otlpmetric-otlpmetrich)
  (go-go-opentelemetry-io-otel-exporters-otlp-otlptrace)
  (go-go-opentelemetry-io-otel-exporters-otlp-otlptrace-otlptracegrp)
  (go-go-opentelemetry-io-otel-exporters-otlp-otlptrace-otlptracehttp)
  (go-go-opentelemetry-io-otel-exporters-prometheus)
  (go-go-opentelemetry-io-otel-exporters-stdout-stdoutmetric)
  (go-go-opentelemetry-io-otel-exporters-zipkin)
  (go-go-opentelemetry-io-otel-log, go-go-opentelemetry-io-otel-sdk)
  (go-go-opentelemetry-io-otel-sdk-log)
  (go-go-opentelemetry-io-otel-sdk-metric)
  (go-google-golang-org-genproto-googleapis-api)
  (go-google-golang-org-genproto-googleapis-bytestream)
  (go-google-golang-org-grpc-cmd-protoc-gen-go-grpc)
  (go-google-golang-org-grpc-examples)
  (go-k8s-io-kube-openapi-test-integration): Likewise.
* gnu/packages/golang-xyz.scm (go-github-com-ajstarks-deck-generate)
  (go-github-com-charmbracelet-x-ansi)
  (go-github-com-charmbracelet-x-cellbuf)
  (go-github-com-charmbracelet-x-errors)
  (go-github-com-charmbracelet-x-term)
  (go-github-com-charmbracelet-x-xpty)
  (go-github-com-containerd-errdefs-pkg)
  (go-github-com-moby-sys-atomicwriter)
  (go-github-com-moby-sys-mount, go-go-uber-org-zap-exp)
  (go-modernc-org-ccgo-v4, go-sigs-k8s-io-kustomize-cmd-config):
  Likewise.
* gnu/packages/image-processing.scm (opencv): Likewise.
* gnu/packages/ipfs.scm (go-github-com-ipfs-shipyard-nopfs-ipfs):
  Likewise.
* gnu/packages/mail.scm (neomutt): Likewise.
* gnu/packages/mpi.scm (openmpi-5): Likewise.
* gnu/packages/protobuf.scm (protobuf-6): Likewise.
* gnu/packages/specifications.scm (specification-astropy-data): Likewise.
* gnu/packages/vnc.scm (turbovnc): Likewise.

Change-Id: I6575463a072a6ee05751e23ebcee9a393529c8b1
Merges: https://codeberg.org/guix/guix/pulls/5312
Reviewed-by: Maxim Cournoyer <maxim@guixotic.coop>
Reviewed-by: Cayetano Santos <csantosb@inventati.org>
Reviewed-by: Gabriel Wicki <gabriel@erlikon.ch>
Co-authored-by: Nguyễn Gia Phong <cnx@loang.net>
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:58 +09:00
Patrick Norton bd9291ee8e guix: build: utils: Add delete-all-but.
* guix/build/utils.scm (delete-all-but): New variable.

Change-Id: I15e1d632a97236b8d18cec3be993c81e138dff04
Reviewed-by: Maxim Cournoyer <maxim@guixotic.coop>
Reviewed-by: Cayetano Santos <csantosb@inventati.org>
Reviewed-by: Gabriel Wicki <gabriel@erlikon.ch>
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:58 +09:00
Nicolas Graves 9798583386 gnu: libass: Drop input labels.
* gnu/packages/video.scm (libass)[propagated-inputs]:
  Drop input labels.

Change-Id: Id10ec581c1b91512fe809c47561a8e9155ca5812
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:58 +09:00
Nicolas Graves ab0ca88517 gnu: avahi: Drop input labels.
* gnu/packages/avahi.scm (avahi)[inputs, native-inputs]:
  Drop input labels.

Change-Id: I73110124f2d60ede7b2279ab878c68ca05dbb9c1
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:58 +09:00
Nicolas Graves 964574452f gnu: libxpm: Drop input labels.
* gnu/packages/xorg.scm (libxpm)[inputs]: Drop input labels.

Change-Id: I1c0d9f35b699fe355c5e6234928153c2e8a75696
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:58 +09:00
Nicolas Graves bc7babdca4 gnu: libnsl: Drop input labels.
* gnu/packages/onc-rpc.scm (libnsl)[inputs]: Drop input labels.

Change-Id: Ia7eb8b801d1e1c276a73d24837a3251657a9ac68
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:58 +09:00
Dariqq 7db4de8f48 gnu: linux-pam: Update to 1.7.2.
nis/yp is disabled since support got removed in glibc.
includedir and libdir are set to the correct value automatically.

* gnu/packages/linux.scm (linux-pam): Update to 1.7.2.
  [source]: Switch to git-fetch.  [build-system]: Switch to meson.
  [arguments]<#:phases>: Remove 'skip-pam-limits phases.
  <#:configure-flags>: Remove includedir, libdir and disable-nis.
  Enable pam_lastlog, set docbook-rng, htmldir and vendordir.
  [native-inputs]: Add gettext-minimal, bison, libxslt, libxml2,
  docbook-xml, docbook-xsl.  [outputs]: Add doc.
* gnu/packages/patches/linux-pam-unix_chkpwd.patch: Adjust for meson.

Change-Id: Ib75277a77f9042a0a9c07fa7e28f7f68ecfa9c04
Merges: https://codeberg.org/guix/guix/pulls/1652
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:58 +09:00
Andy Tai 1089c208c0 gnu: aspell: Update to 0.60.8.2.
* gnu/packages/aspell.scm (aspell): Update to 0.60.8.2.
  [source]<patches>: Remove aspell-CVE-2019-25051.patch.
* gnu/packages/patches/aspell-CVE-2019-25051.patch: Delete file.
* gnu/local.mk (dist_patch_DATA): De-register it.

Change-Id: I19b7bfc98cbfee9eafde382d812e033a0f3c8e7e
Merges: https://codeberg.org/guix/guix/pulls/6092
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:57 +09:00
Andy Tai e99e394628 gnu: groff: Update to 1.24.0.
* gnu/packages/groff.scm (groff): Update to 1.24.0

Change-Id: If42e96a1b51d6da042158824289f39b80e5c7807
Merges: https://codeberg.org/guix/guix/pulls/6784
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:57 +09:00
Gabriel Santos 820fdf9549 gnu: vidstab: Indent.
* gnu/packages/video.scm (vidstab): Indent.

Change-Id: I5130200ba34007732139c20280b4bf607223a6a8
Merges: https://codeberg.org/guix/guix/pulls/5245
Reviewed-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:57 +09:00
Gabriel Santos d45d75301c gnu: vidstab: Update to 1.1.0.
* gnu/packages/video.scm (vidstab): Update to 1.1.0.

Change-Id: I8d67f71be92d6026eeda4cb7de8b95950f73b3dd
Reviewed-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:57 +09:00
Ashish SHUKLA e030447ebd gnu: jansson: Update to 2.15.0.
* gnu/packages/web.scm (jansson): Update to 2.15.0.

Change-Id: I9721fe4f16b1a622ddb49c3a53b3a94b1cb49500
Merges: https://codeberg.org/guix/guix/pulls/1935
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:57 +09:00
Ashish SHUKLA 621afc1dc7 gnu: nghttp2: Update to 1.68.1.
* gnu/packages/web.scm (nghttp2): Update to 1.68.1.

Change-Id: I12b74c0cfbdbdabf8c58479d60b3bdd3b965305e
Merges: https://codeberg.org/guix/guix/pulls/1934
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:57 +09:00
Anderson Torres 92363d6ab0 gnu: utf8proc: Update to 2.11.3.
* gnu/packages/textutils.scm (utf8proc, utf8proc-bootstrap):
  Update to 2.11.3.
  [native-inputs]<NormalizationTest.txt, GraphemeBreakTest.txt>
  <DerivedCoreProperties.txt>: Update to Unicode 17.0.0.

Change-Id: I7fb8df6d759dcfd48b1efc85768f75cedf170a3a
Merges: https://codeberg.org/guix/guix/pulls/5270
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:57 +09:00
Ashish SHUKLA dd7f6b1c92 gnu: elogind: Update to 255.22
* gnu/packages/freedesktop.scm (elogind): Update to 255.22.
[source]<commit>: Update tag prefix.

Change-Id: I2b2e2f8fb8adbd3d9a3ae419e1087d3abdc2baad
Merges: https://codeberg.org/guix/guix/pulls/4680
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:57 +09:00
Ashish SHUKLA 896898342d gnu: oksh: Update to 7.8.
* gnu/packages/shells.scm (oksh): Update to 7.8.

Change-Id: I54642941193a9695ee56e539953a9d119fc7f97e
Merges: https://codeberg.org/guix/guix/pulls/4055
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:57 +09:00
Antoine Côté 39f1fb3ad1 gnu: libaacs: Update to 0.11.1.
* gnu/packages/video.scm (libaacs): Update to 0.11.1.

Change-Id: Ib6b1122e54689f318ed8c28a94b2a0dab9c935dc
Merges: https://codeberg.org/guix/guix/pulls/1132
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:57 +09:00
Ashish SHUKLA 7964bbdf12 gnu: jemalloc: Update to 5.3.1
* gnu/packages/jemalloc.scm (jemalloc): Update to 5.3.1.

Change-Id: I86b8dc2e4f00d8aecd8f41a577e043549568af49
Merges: https://codeberg.org/guix/guix/pulls/7909
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:13:12 +09:00
Andy Tai e296f3f012 gnu: libmicrohttpd: Update to 1.0.3.
* gnu/packages/gnunet.scm (libmicrohttpd): Update to 1.0.3.

Change-Id: I018d6b06ebab5440cfc7a4fa919228a7d3c4e04e
Merges: https://codeberg.org/guix/guix/pulls/7676
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:07:42 +09:00
Patrick Norton 759bdcb469 gnu: fuzzel: Update to 1.14.1.
* gnu/packages/xdisorg.scm (fuzzel): 1.14.1.

Change-Id: Ib5c29af4b9bcc19013e3be2b0a698266f0a32066
Merges: https://codeberg.org/guix/guix/pulls/7675
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 14:05:01 +09:00
Foster Hangdaan ee985ff4d6 gnu: wesnoth: Update to 1.18.7.
* gnu/packages/games.scm (wesnoth): Update to 1.18.7.

Change-Id: I61040ae6417afa851c51799aef1f6245bf0c5dd0
Merges: https://codeberg.org/guix/guix/pulls/7721
Reviewed-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 13:30:48 +09:00
Danylo Kondratiev 4fdaa6e2f2 gnu: gkrellm: Update to 2.5.1.
* gnu/packages/gkrellm.scm (gkrellm): Update to 2.5.1.
  [inputs]: Drop libice.

Change-Id: Ie907b82395607dfa856000c69ea45569d4fe3266
Merges: https://codeberg.org/guix/guix/pulls/7876
Reviewed-by: Nicolas Graves <ngraves@ngraves.fr>
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 13:25:55 +09:00
Danylo Kondratiev 445e61337e gnu: gkrellm: Improve style.
* gnu/packages/gkrellm.scm (gkrellm): Run guix style.
  [inputs]: Drop input labels, remove gettext-minimal.
  [native-inputs]: Add gettext-minimal.
  [source]: Set https URL scheme.
  [arguments]<#:phases>: Convert to GExps.
  [arguments]<#:make-flags>: Set CC to (cc-for-target).
  [home-page]: Set https URL scheme.

Change-Id: I854cc3cd4537dd2ed64fa34500a6b280d6573cad
Reviewed-by: Nicolas Graves <ngraves@ngraves.fr>
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 13:25:13 +09:00
Daniel Martins d632b423d5 gnu: Add rtcqs.
* gnu/packages/audio.scm (rtcqs): New variable.

Change-Id: If0a28098773e3daa106830d69a87666d3fe14368
Merges: https://codeberg.org/guix/guix/pulls/7858
Reviewed-by: Hugo Buddelmeijer <hugo@buddelmeijer.nl>
Signed-off-by: Nguyễn Gia Phong <cnx@loang.net>
2026-04-15 13:20:08 +09:00
aecepoglu 4a4ef229e6 gnu: sbcl-coalton: Update to 0.0.1-5.bf475c8.
* gnu/packages/lisp-xyz.scm (sbcl-coalton): Update to 0.0.1-5.bf475c8.

Change-Id: I92c6a057b982500ba0629ed663c5a86c0616e358
Signed-off-by: jgart <jgart@dismail.de>
2026-04-14 22:03:56 -04:00
Danny Milosavljevic 2c51b803e3 gnu: Add zed.
* gnu/packages/patches/zed-0.225.10-add-guix-container-support.patch: New file.
* gnu/packages/patches/zed-0.225.10-collapse-multiline-git-deps.patch: New
file.
* gnu/packages/patches/zed-0.225.10-disable-dlopen.patch: New file.
* gnu/packages/patches/zed-0.225.10-exclude-libwebrtc-from-audio.patch: New
file.
* gnu/packages/patches/zed-0.225.10-fix-sqlite-memory-mode.patch: New file.
* gnu/packages/patches/zed-0.225.10-fix-test-db-isolation.patch: New file.
* gnu/packages/patches/zed-0.225.10-fix-workspace-race.patch: New file.
* gnu/packages/patches/zed-0.225.10-keep-regular-file-workspaces.patch: New file.
* gnu/packages/patches/zed-0.225.10-remove-patch-crates-io.patch: New file.
* gnu/packages/patches/zed-0.225.10-use-mock-livekit-on-linux.patch: New file.
* gnu/packages/patches/rust-candle-0.9.1-add-candle-onnx-to-workspace.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Register them.
* gnu/packages/rust-sources.scm (rust-alacritty-0.25.1.9d9640d,
rust-candle-0.9.1.724d75e, rust-dap-types-0.0.1.1b461b3,
rust-gh-workflow-0.8.0.c9eac0e, rust-livekit-0.7.8.5f04705,
rust-notify-8.2.0.ce58c24, rust-pet-0.1.0.d5b5bb0,
rust-tiktoken-rs-0.9.1.2570c43, rust-zed-xim-0.4.0-zed.16f35a2): New
variables.
* gnu/packages/rust-crates.scm (lookup-cargo-inputs): Modify.
* gnu/packages/text-editors.scm (zed): New variable.

Change-Id: I16d4c5431e3398261ac4eb74483747c09cf74449
2026-04-15 03:19:10 +02:00
jgart 6690bf46c6 gnu: trealla: Update to 2.92.30.
* gnu/packages/prolog.scm (trealla): Update to 2.92.30.
[inputs]: Add libedit.

Change-Id: Ica510ab3eed3f79a5333dda8b5f2a460780467e7
2026-04-14 19:16:11 -04:00
Igorj Gorjaĉev 58266bb4ba gnu: jpm: Update to 1.2.0.
* gnu/packages/lisp.scm (jpm): Update to 1.2.0.

Change-Id: Ib8c7c9ac1e66a767b9e280761ae48140f866a443
Signed-off-by: Andreas Enge <andreas@enge.fr>
2026-04-14 22:58:15 +02:00
Foster Hangdaan 69f512e520 gnu: skopeo: Update to 1.22.2.
* gnu/packages/virtualization.scm (skopeo): Update to 1.22.2.

Change-Id: I7c860a205c40cd5efd329770f6262b80716b2e4d
Signed-off-by: Andreas Enge <andreas@enge.fr>
2026-04-14 22:38:26 +02:00
Foster Hangdaan 83e5fe437f gnu: podman: Update to 5.8.2.
* gnu/packages/containers.scm (podman): Update to 5.8.2.

Change-Id: I681067e7c2ac11f4e12c94db5898e121b6a1e0f2
Signed-off-by: Andreas Enge <andreas@enge.fr>
2026-04-14 22:21:25 +02:00
Nicolas Goaziou ef81d340cd gnu: dvisvgm: Deprecate in favor of texlive-dvisvgm.
* gnu/packages/tex.scm (dvisvgm): Deprecate.
* etc/teams/tex/tex-manifest.scm (%sundry-texlive-packages): Do not monitor
dvisvgm anymore.
* gnu/packages/statistics.scm (python-openturns): Use texlive-dvisvgm.

Change-Id: I1903a0bdd4e66f9f2a49d21029371e87924435ac
2026-04-14 22:17:55 +02:00
André Batista 5ce1b4a3e3 gnu: ublock-origin: Update to 1.70.0.
* gnu/packages/browser-extensions.scm (ublock-origin): Update to 1.70.0.
(ublock-main-assets): Update to 0-6.004af606e6a0e.
(ublock-prod-assets): Update to 0-6.6c15e4ef91888.

Change-Id: I730ef9d4623a9abe972d82c5700458f6c888077c
Signed-off-by: Andreas Enge <andreas@enge.fr>
2026-04-14 21:19:44 +02:00
Artyom V. Poptsov e155ef7c4b gnu: Add guile-pnm.
* gnu/packages/guile-xyz.scm (guile-pnm): New variable.

Change-Id: I0e5e2fa77c6d75567983ab61c61880bef34f3e30
2026-04-14 20:03:58 +03:00
Roman Scherer 09a4a0fce4 gnu: Add github-cli.
* gnu/packages/version-control.scm (github-cli): New variable.

Merges: https://codeberg.org/guix/guix/issues/5190
Change-Id: I1ee51dbef75f8dee5fa691bff098176b1cd32660
Reviewed-by: Johannes Christ <jc@jchri.st>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2026-04-14 12:32:12 +01:00
Roman Scherer d841bf2ec2 gnu: Add go-github-com-sigstore-sigstore-go.
* gnu/packages/golang-web.scm (go-github-com-sigstore-sigstore-go): New variable.

Relates-to: https://codeberg.org/guix/guix/issues/5190
Change-Id: Iab52a05d6bb67bfac431036f4a23e484ff5e0ee5
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2026-04-14 12:32:11 +01:00
Roman Scherer fe7badf33e gnu: Add go-github-com-sigstore-rekor-tiles-v2.
* gnu/packages/golang-web.scm (go-github-com-sigstore-rekor-tiles-v2):
New variable.

Relates-to: https://codeberg.org/guix/guix/issues/5190
Change-Id: I5da1cd2c6791257ff304ba4d40f038749a585834
Reviewed-by: Johannes Christ <jc@jchri.st>
Modified-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2026-04-14 12:32:11 +01:00
Roman Scherer e0fd8f335c gnu: Add go-github-com-sigstore-rekor.
* gnu/packages/golang-web.scm (go-github-com-sigstore-rekor): New variable.

Relates-to: https://codeberg.org/guix/guix/issues/5190
Change-Id: I5101feaee393f0da9dbf4cd9b68ce79474a9ffbd
Reviewed-by: Johannes Christ <jc@jchri.st>
Modified-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2026-04-14 12:32:11 +01:00
Roman Scherer 343d7553f0 gnu: Add go-github-com-sigstore-timestamp-authority-v2.
* gnu/packages/golang-web.scm (go-github-com-sigstore-timestamp-authority-v2):
New variable.

Relates-to: https://codeberg.org/guix/guix/issues/5190
Change-Id: Ia60bb68476551423d5b754ab7de8e361d4750b89
Reviewed-by: Johannes Christ <jc@jchri.st>
Modified-by: Sharlatan Hellseher <sharlatanus@gmail.com>
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2026-04-14 12:32:11 +01:00
Sharlatan Hellseher dca6d32c62 gnu: Add go-github-com-tink-crypto-tink-go-awskms-v2.
* gnu/packages/golang-web.scm (go-github-com-tink-crypto-tink-go-awskms-v2): New variable.

Change-Id: I26524cae0be9a4119bdabd7c99525a2e78b05069
2026-04-14 12:32:11 +01:00
Sharlatan Hellseher 4719c0781c gnu: Add go-github-com-tink-crypto-tink-go-gcpkms-v2.
* gnu/packages/golang-web.scm (go-github-com-tink-crypto-tink-go-gcpkms-v2): New variable.

Change-Id: Iebfd1bbe0646680eaeacdaeb2ab5dd6b466ba96e
2026-04-14 12:32:11 +01:00
Sharlatan Hellseher e3a096758c gnu: Add go-github-com-tink-crypto-tink-go-hcvault-v2.
* gnu/packages/golang-web.scm (go-github-com-tink-crypto-tink-go-hcvault-v2): New variable.

Change-Id: Ic633d6eedd127f247d30177f66d1e410eb517522
2026-04-14 12:32:11 +01:00
Sharlatan Hellseher bd16834557 gnu: Add go-github-com-sigstore-sigstore-pkg-signature-kms-azure.
* gnu/packages/golang-web.scm (go-github-com-sigstore-sigstore-pkg-signature-kms-azure): New variable.

Change-Id: I18a7e3a81266a29a52caf9a292497cbe191b3bf4
2026-04-14 12:32:11 +01:00
Sharlatan Hellseher d1c04ded76 gnu: Add go-github-com-sigstore-sigstore-pkg-signature-kms-aws.
* gnu/packages/golang-web.scm (go-github-com-sigstore-sigstore-pkg-signature-kms-aws): New variable.

Change-Id: I5f8e94ddaa87fc60ed9451f21c76fc2ca68026ea
2026-04-14 12:32:11 +01:00
Sharlatan Hellseher 39d7eadd40 gnu: Add go-github-com-sigstore-sigstore-pkg-signature-kms-gcp.
* gnu/packages/golang-web.scm (go-github-com-sigstore-sigstore-pkg-signature-kms-gcp): New variable.

Change-Id: I38de7fca6d1703382b9104ecb6535c20c589d6aa
2026-04-14 12:32:10 +01:00
Sharlatan Hellseher 891e434c6b gnu: Add go-github-com-sigstore-sigstore-pkg-signature-kms-hashivault.
* gnu/packages/golang-web.scm
(go-github-com-sigstore-sigstore-pkg-signature-kms-hashivault): New
variable.

Change-Id: Ia6f5e99631a26f81f052d92776d2d54a63bd67ba
2026-04-14 12:32:10 +01:00
Sharlatan Hellseher 0b409bae2c gnu: Add go-github-com-jellydator-ttlcache-v3.
* gnu/packages/golang-web.scm (go-github-com-jellydator-ttlcache-v3): New variable.

Change-Id: I256e49f06c5bd91495ccd1aae8f2c0c5eabf5482
2026-04-14 12:32:10 +01:00
Sharlatan Hellseher 15c7094492 gnu: Add go-cloud-google-com-go-security.
* gnu/packages/golang-web.scm (go-cloud-google-com-go-security): New variable.
(go-cloud-google-com-go)[source]: Remove "security" submodule.

Change-Id: I208134112aa75477c1d1306966bf41e8a7709537
2026-04-14 12:32:10 +01:00
Evgeny Pisemsky c1ca168e05 gnu: Add go-github-com-juju-ratelimit.
* gnu/packages/golang-web.scm (go-github-com-juju-ratelimit): New variable.

Merges: https://codeberg.org/guix/guix/pulls/7796
Change-Id: Iccc29214cb44ae8ab5d61b0e2b8410424dbf8b9a
Signed-off-by: Sharlatan Hellseher <sharlatanus@gmail.com>
2026-04-14 12:32:10 +01:00
bdunahu 8e9f2feeef gnu: warzone2100: Update to 4.6.3.
* gnu/packages/games.scm (warzone2100): Update to 4.6.3.
[inputs]: Replace sdl2 by sdl3.
* gnu/packages/patches/warzone2100-unbundle-libs.patch:
Adjust diff for upstream code changes.

Change-Id: I1e8939e7925f7e62c442f0a07a8654ffcf213ce2
Signed-off-by: Andreas Enge <andreas@enge.fr>
2026-04-14 12:26:54 +02:00
André Batista 66c2b3f46d gnu: lyrebird: Buid with go-1.25.
* gnu/packages/golang-web.scm (lyrebird)[arguments] <go>: Use go-1.25.

Change-Id: I5806103b947c8fc85543b810d2de31fc5acc7fbc
Signed-off-by: Andreas Enge <andreas@enge.fr>
2026-04-14 11:24:40 +02:00
moksh 5578b6daf2 gnu: josm: Update to 19555.
* gnu/packages/geo.scm (josm): Update to 19555.

Change-Id: I1714f1d906df83882f7d44a06d2a92a67599218d
Signed-off-by: Andreas Enge <andreas@enge.fr>
2026-04-14 11:19:22 +02:00
Andreas Enge 5d80f53024 gnu: Remove python-chai.
* gnu/packages/python-xyz.scm (python-chai): Delete variable.

Fixes: guix/guix#7140
Change-Id: I1f0ab14f560d1b0b7c38d12bf40d07d6595e322a
2026-04-14 11:17:09 +02:00
Andreas Enge 7927aebb9e gnu: Remove libphonenumber-8.11.
* gnu/packages/messaging.scm (libphonenumber-8.11): Delete variable.

Fixes: guix/guix#7136
Change-Id: If87ea63baf0a599e37c53bccdb078a219f114072
2026-04-14 11:17:09 +02:00
Andreas Enge a3c93d47fa gnu: Remove libnl-python2.
* gnu/packages/linux.scm (libnl-python2): Delete variable.

Fixes: guix/guix#7141
Change-Id: I7281d4fd66a8f5dbd48084e646fc4a1920eb301e
2026-04-14 11:17:01 +02:00
moksh f6b79709c3 gnu: mcomix: Update to 3.1.1.
* gnu/packages/image-viewers.scm (mcomix): Update to 3.1.1.

Merges guix/guix!7870

Change-Id: I5ccba025e9b36d9c17c82342a0824c5809136cc2
Signed-off-by: Cayetano Santos <csantosb@inventati.org>
2026-04-14 11:02:31 +02:00
moksh 1b9b62e0c5 gnu: mcomix: Fix build.
* gnu/packages/image-viewers.scm (mcomix)[inputs]: Sort; add
gobject-introspection.

Fixes: guix/guix#7864
Merges guix/guix!7870

Change-Id: I096b7bc5d75706eeb8dd0df62fce629b7240955f
Signed-off-by: Cayetano Santos <csantosb@inventati.org>
Modified-by: Cayetano Santos <csantosb@inventati.org>
2026-04-14 11:02:31 +02:00
Sharlatan Hellseher 1a76acd4c2 gnu: Remove go-1.23.
* gnu/packages/golang.scm (go-1.23, go-std-1.23): Delete variables.

Fixes: guix/guix#7080
Change-Id: I854866b0136f5b17fcec24945f576a83d90c0c77
Signed-off-by: Andreas Enge <andreas@enge.fr>
2026-04-14 10:57:48 +02:00
Nigko Yerden 0bb446efff gnu: tor: Update to 0.4.9.6.
* gnu/packages/tor.scm (tor): Update to 0.4.9.6.

Change-Id: I86e5204d15c20f94e2b103d113cfba43644ed8a0
Signed-off-by: Andreas Enge <andreas@enge.fr>
2026-04-14 10:21:11 +02:00
Mark H Weaver 6ab6e5b75d gnu: icecat: Update to 140.9.1-gnu1 [security fixes].
Includes fixes for CVE-2026-5731, CVE-2026-5732, and CVE-2026-5734.

* gnu/packages/gnuzilla.scm (%icecat-base-version, %icecat-build-id): Update.
(icecat-source): Update 'gnuzilla-commit' and hashes.
2026-04-14 01:12:53 -04:00
Andreas Enge 40fc279123 gnu: v4l-utils-minimal: Deprecate.
* gnu/packages/video.scm (v4l-utils-minimal): Deprecate by the
(up to its name) identical v4l-utils.
* gnu/packages/aidc.scm (zbar)[inputs],
* gnu/packages/gstreamer.scm (libdc1394)[inputs],
(gst-plugins-good)[inputs], (gst-plugins-bad)[inputs]: Replace
v4l-utils-minimal by v4l-utils.

Change-Id: I1157adb6d2f1a36ddf2152ca66ed1aeaf55fe322
2026-04-14 00:25:38 +02:00
Andreas Enge 36f773a1f2 gnu: v4l-utils: Drop binaries.
The qv4l2 and qvidcap binaries still depend on Qt5. The other removed
inputs are not referenced.

* gnu/packages/video.scm (v4l-utils)[inputs]: Remove alsa-lib, glu, libx11
and qtbase-5.
* gnu/packages/video.scm (v4l-utils-minimal)[inputs]: Also inherit.

Change-Id: Ibd1e5d92cf363c12e7e5df58478e1e79901e8e08
2026-04-14 00:25:20 +02:00
Yelninei 08222e17eb gnu: ldc-bootstrap: Remove unneeded inputs.
* gnu/packages/dlang.scm (ldc-bootstrap)[inputs]: Remove libconfig and libedit.

Change-Id: I2fde427534c4e7ad2454dd218646dd4fa7d0921b
Signed-off-by: Danny Milosavljevic <dannym@friendly-machines.com>
2026-04-13 22:51:04 +02:00
72 changed files with 10439 additions and 1297 deletions
-1
View File
@@ -26,7 +26,6 @@
(define %sundry-texlive-packages
(list bibtool
dvisvgm
rubber
texmaker
texstudio
+12
View File
@@ -2386,6 +2386,7 @@ dist_patch_DATA = \
%D%/packages/patches/rust-1.70-fix-rustix-build.patch \
%D%/packages/patches/rust-1.78-unwinding-fix.patch \
%D%/packages/patches/rust-1.81-fix-riscv64-bootstrap.patch \
%D%/packages/patches/rust-candle-0.9.1-add-candle-onnx-to-workspace.patch \
%D%/packages/patches/rust-codex-0.98.0-core-remove-self-dep.patch \
%D%/packages/patches/rust-codex-0.98.0-test-shebangs.patch \
%D%/packages/patches/rust-codex-0.98.0-test-timeout.patch \
@@ -2624,6 +2625,17 @@ dist_patch_DATA = \
%D%/packages/patches/yggdrasil-extra-config.patch \
%D%/packages/patches/ypsilon-Use-GNU-toolchain-as-default.patch \
%D%/packages/patches/zabbix-agent2-test-timezone-fix.patch \
%D%/packages/patches/zed-0.225.10-add-message-notification-action.patch \
%D%/packages/patches/zed-0.225.10-add-guix-container-support.patch \
%D%/packages/patches/zed-0.225.10-collapse-multiline-git-deps.patch \
%D%/packages/patches/zed-0.225.10-exclude-libwebrtc-from-audio.patch \
%D%/packages/patches/zed-0.225.10-disable-dlopen.patch \
%D%/packages/patches/zed-0.225.10-fix-sqlite-memory-mode.patch \
%D%/packages/patches/zed-0.225.10-fix-test-db-isolation.patch \
%D%/packages/patches/zed-0.225.10-fix-workspace-race.patch \
%D%/packages/patches/zed-0.225.10-keep-regular-file-workspaces.patch \
%D%/packages/patches/zed-0.225.10-remove-patch-crates-io.patch \
%D%/packages/patches/zed-0.225.10-use-mock-livekit-on-linux.patch \
%D%/packages/patches/zig-0.9-build-respect-PKG_CONFIG-env-var.patch \
%D%/packages/patches/zig-0.9-fix-runpath.patch \
%D%/packages/patches/zig-0.9-riscv-support.patch \
+2 -2
View File
@@ -52,7 +52,7 @@
(define-public aspell
(package
(name "aspell")
(version "0.60.8.1")
(version "0.60.8.2")
(source
(origin
(method url-fetch)
@@ -60,7 +60,7 @@
version ".tar.gz"))
(sha256
(base32
"06yjhwlgpcvbrl5g83qjrpzjwjx7hka5lhsfc3x5gm229nri5nnn"))
"06b9szgm9cj1zh58r7sbl5fbi3vi9fs7b1as4ir8y176x9ilizjp"))
(patches (search-patches "aspell-default-dict-dir.patch"))))
(build-system gnu-build-system)
(arguments
+1 -10
View File
@@ -1877,18 +1877,9 @@ R. Seaman's protocol}
(file-name (git-file-name name version))
(sha256
(base32 "0n2jzlpwvjgj8ydg7hsqxnvy8s9pdi5z96id0231kgi87pyfkh7s"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
;; XXX: 'delete-all-but' is copied from the turbovnc package.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "thirdparty" "thirdparty.cmake")))))
(build-system cmake-build-system)
(arguments
+39
View File
@@ -62,6 +62,7 @@
;;; Copyright © 2026 Luis Guilherme Coelho <lgcoelho@disroot.org>
;;; Copyright © 2026 Noé Lopez <noelopez@free.fr>
;;; Copyright © 2026 Carlos Durán Domínguez <wurt@wurt.eu>
;;; Copyright © 2026 Daniel Martins <email@danielfm.me>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -3703,6 +3704,44 @@ compensation, (de)interleaving, and byte-swapping
;; original developer.
(license license:expat)))
(define-public rtcqs
(package
(name "rtcqs")
(version "0.6.7")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://codeberg.org/rtcqs/rtcqs")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1kc3niyaq4m8di68832pgfb1b0m54q5gm68dwlzwwilgxi61ifzc"))))
(build-system pyproject-build-system)
(arguments
(list
#:tests? #f ;no test suite
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'remove-gui
(lambda _
(substitute* "pyproject.toml"
(("\"FreeSimpleGUI\",?")
"")
(("rtcqs_gui = \"rtcqs\\.rtcqs_gui:main\"")
""))
(delete-file "src/rtcqs/rtcqs_gui.py")
(delete-file "src/rtcqs/rtcqs_qt_gui.py"))))))
(native-inputs (list python-setuptools))
(home-page "https://codeberg.org/rtcqs/rtcqs")
(synopsis "Linux audio real-time performance analyzer")
(description
"rtcqs analyzes a Linux system to detect possible bottlenecks that could
have a negative impact on real-time audio performance. It checks kernel
configuration, IRQ priorities, CPU governor, swappiness, and other settings
relevant to low-latency audio work.")
(license license:expat)))
(define-public rtosc
(package
(name "rtosc")
+17 -17
View File
@@ -98,24 +98,24 @@
(cut patch-shebang <> path)
(find-files (string-append #$output "/etc/avahi"))))))))
(inputs
`(("bash-minimal" ,bash-minimal)
("dbus" ,dbus)
("expat" ,expat)
("gdbm" ,gdbm)
("glib" ,glib)
;; Do not use libcap when cross-compiling since it's not quite
;; cross-compilable; and use it only for supported systems.
,@(if (and (not (%current-target-system))
(member (%current-system)
(package-supported-systems libcap)))
`(("libcap" ,libcap)) ;to enable chroot support in avahi-daemon
'())
("libdaemon" ,libdaemon)
("libevent" ,libevent)))
(cons* bash-minimal
dbus
expat
gdbm
glib
libdaemon
libevent
;; Do not use libcap when cross-compiling since it's not quite
;; cross-compilable; and use it only for supported systems.
(if (and (not (%current-target-system))
(member (%current-system)
(package-supported-systems libcap)))
(list libcap) ;to enable chroot support in avahi-daemon
(list))))
(native-inputs
`(("gettext" ,gettext-minimal)
("glib" ,glib "bin")
("pkg-config" ,pkg-config)))
(list gettext-minimal
(list glib "bin")
pkg-config))
(synopsis "Implementation of mDNS/DNS-SD protocols")
(description
"Avahi is a system which facilitates service discovery on a local
+8 -8
View File
@@ -95,8 +95,8 @@ supported content to the Kodi media center.")
;; Arbitrary commit of branch master,
;; Update when updating uBlockOrigin.
(let* ((name "ublock-main-assets")
(commit "011eef4a5b36a7ebf4adedc486d96b77cfa25c54")
(revision "5")
(commit "004af606e6a0efc22bc65ab1016b553441cacb71")
(revision "6")
(version (git-version "0" revision commit)))
(origin
(method git-fetch)
@@ -105,14 +105,14 @@ supported content to the Kodi media center.")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32 "0ng8a88zdvrxg30fz83gswjy27b3hfx9q11n2i715id7az7kqf9x")))))
(base32 "1bfd2d53flrkgvjcr1kj9nbxj4y9a4pcr7m3dycccdhd21x6k0ln")))))
(define ublock-prod-assets
;; Arbitrary commit of branch gh-pages,
;; Update when updating uBlockOrigin.
(let* ((name "ublock-prod-assets")
(commit "6844322800de647da0c4fe06dd6a0b212a3942e4")
(revision "5")
(commit "6c15e4ef91888c610caf73829dc78ae9549ed24a")
(revision "6")
(version (git-version "0" revision commit)))
(origin
(method git-fetch)
@@ -121,12 +121,12 @@ supported content to the Kodi media center.")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32 "13vxq4z1wxivz5xklncxd2sj5aqkyhq919vzbbfp0fgh0imhikib")))))
(base32 "0n2h6drqh44b1zgl729bfr70n08mkm536a2vqgivw7dm5dmi8zd3")))))
(define ublock-origin
(package
(name "ublock-origin")
(version "1.66.2")
(version "1.70.0")
(home-page "https://github.com/gorhill/uBlock")
(source (origin
(method git-fetch)
@@ -136,7 +136,7 @@ supported content to the Kodi media center.")
(file-name (git-file-name name version))
(sha256
(base32
"16ph031hb8bf4rxyxvm6jr0bxmy0snza11jfrbjgfb390gax9r63"))))
"0j1m80nz86yc69c42hv5di5zza0vkycqmjaydb9jgx0abcvi19x5"))))
(build-system gnu-build-system)
(outputs '("xpi" "firefox" "chromium"))
(properties '((addon-id . "uBlock0@raymondhill.net")))
+2 -2
View File
@@ -714,7 +714,7 @@ Its main purpose is to support the key usage by @code{docker-init}:
(define-public podman
(package
(name "podman")
(version "5.8.1")
(version "5.8.2")
(outputs '("out" "docker"))
(properties
`((output-synopsis "docker" "docker alias for podman")
@@ -727,7 +727,7 @@ Its main purpose is to support the key usage by @code{docker-init}:
(url "https://github.com/containers/podman")
(commit (string-append "v" version))))
(sha256
(base32 "1wdsdc0nj4m1v8mn95dhavi87ad0adqmld70da59gvp2abff5f0f"))
(base32 "12bmzbfyjsf0mwnam38cw9ib54wj1znh5b7lxzdyll9cvvkhqisr"))
(file-name (git-file-name name version))))
(build-system gnu-build-system)
(arguments
+1 -9
View File
@@ -1096,17 +1096,9 @@ to aid in debugging.")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256 (base32 "0ppx8r9isc772y0ahpgl8g5b3yxka7ffqzlcsa920aib5nj39lrg"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(substitute* "pyproject.toml"
;; Python is linked with GNU readline on all Guix targets.
((".*gnureadline.*") "")
+1 -3
View File
@@ -108,9 +108,7 @@
(lambda _
(invoke "cmake" "--install" "."))))))
(inputs
`(("libconfig" ,libconfig)
("libedit" ,libedit)
("zlib" ,zlib)))
`(("zlib" ,zlib)))
(native-inputs
`(("lld-wrapper" ,(make-lld-wrapper lld-17 #:lld-as-ld? #t))
("llvm" ,llvm-17)
+15 -34
View File
@@ -1586,31 +1586,21 @@ exploration and optimization.")
(commit version)
(recursive? #t)))
(file-name (git-file-name name version))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
;; XXX: 'delete-all-but' is copied from the turbovnc package.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "libs"
"delaunay-triangulation"
"dxflib"
;; "fontobene-qt"
;; "googletest"
;; "hoedown"
"librepcb"
;; "muparser"
"optional"
"parseagle"
;; "polyclipping"
;; "quazip"
"type_safe")))
#~(delete-all-but "libs"
"delaunay-triangulation"
"dxflib"
;; "fontobene-qt"
;; "googletest"
;; "hoedown"
"librepcb"
;; "muparser"
"optional"
"parseagle"
;; "polyclipping"
;; "quazip"
"type_safe"))
(sha256
(base32 "1g3k2g2p5yy7zk971bg7qh4k38p30aydp27c5bfb02gn7djknz7w"))))
(build-system cmake-build-system)
@@ -2166,18 +2156,9 @@ layout of a circuit corresponds to the desired netlists.")
;; no longer have their original upstream.
(recursive? #t)))
(file-name (git-file-name name version))
(modules '((guix build utils)))
(snippet
#~(begin
(use-modules (guix build utils)
(ice-9 ftw)
(srfi srfi-26))
;; XXX: 'delete-all-but' is copied from the turbovnc package.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "3rdparty"
;; The following sources have all been patched, so
;; cannot easily be unbundled.
+1 -10
View File
@@ -15925,18 +15925,9 @@ placed at the margin of the minibuffer for your completion candidates.")
(url "https://github.com/Fuco1/smartparens")
(commit commit)))
(file-name (git-file-name name version))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
'(begin
;; Taken from nextpnr package.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred
(negate (cut member <> (append '("." "..") preserve))))
(items (scandir "." pred)))
(for-each delete-file items))))
;; Only activate basic tests.
(delete-all-but "test"
"test-helper.el"
+5 -80
View File
@@ -460,13 +460,6 @@ It aims to support Nintendo DSi and 3DS as well.")
(srfi srfi-26)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
;; Clean up the source from bundled libraries we don't need.
(delete-all-but "Externals"
;; XXX: The build system is currently hard-coded
@@ -656,14 +649,6 @@ turbo speed, networked multiplayer, and graphical enhancements.")
(srfi srfi-26)))
(snippet
#~(begin
;; XXX: 'delete-all-but' is copied from the turbovnc package.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
;; Clean up the source from bundled libraries we don't need.
(delete-all-but "Externals"
;; XXX: The build system is currently hard-coded
@@ -1079,17 +1064,9 @@ The following systems are supported:
(sha256
(base32
"0dfsz4dsh49dc9xx9rjhfzfkg4h91i2ksgp2inlr9yhgldw9q8h3"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <> (cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "src/third-party"
"blip_buf"
"inih")))))
@@ -2319,42 +2296,9 @@ physical device and the RetroPad virtual controller.")
(modules '((guix build utils)))
(snippet
'(begin
(use-modules (guix build utils)
(ice-9 ftw)
(srfi srfi-1)
(srfi srfi-26))
(define (delete-all-but . preserve)
;; Walk the file tree and delete everything except the paths
;; listed in PRESERVE. Directories listed PRESERVE will cause
;; their whole contents to be preserved.
(let ((preserve (map (compose (cut string-trim-right <> #\/)
(cut string-append "./" <>))
preserve)))
(file-system-fold
(lambda (path stat result) ;enter
(or (any (lambda (x)
(or (string-prefix? path x)
(string-prefix? x path)))
preserve)
(begin
(delete-file-recursively path)
#f)))
(lambda (path stat result) ;leaf (file)
(unless (any (cut string-prefix? <> path) preserve)
(delete-file path)))
(const #t) ;down (directory)
(const #t) ;up (directory)
(lambda (path stat result) ;skip
(when (file-exists? path)
(error "could not enter unreadable directory" path)))
(lambda (path stat errno result) ;error
(error "error processing" path (strerror errno)))
0
".")))
;; This is an allow-list of the shaders explicitly licensed as
;; free software.
(delete-all-but
(delete-all-but "."
"anamorphic/shaders/anamorphic.slang" ;expat
"anamorphic/anamorphic.slangp"
"annotated_passthru.slang" ;public license
@@ -3011,16 +2955,7 @@ GLSL (@file{.slang}) shaders for use with RetroArch.")
(commit (string-append "v" version))))
(snippet
#~(begin
(use-modules (guix build utils)
(ice-9 ftw)
(srfi srfi-26))
;; XXX: 'delete-all-but' is copied from the turbovnc package.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(use-modules (guix build utils))
;; Remove as much bundled sources as possible, shaving off about
;; 65 MiB.
(delete-all-but "deps"
@@ -3827,24 +3762,14 @@ de-interlacing patches for use with PCSX2.")
(file-name (git-file-name name version))
(sha256
(base32 "0nr53cjifqwnz3icxsj01yd3aw1vfsfxga4zz5zi8aqr175mvq27"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(substitute* "cmake/Pcsx2Utils.cmake"
(("(PCSX2_GIT_REV \")Unknown" _ prefix)
(string-append prefix #$version "-guix")))
(delete-file "3rdparty/include/Packet32.h") ;"not open source"
;; XXX: 'delete-all-but' is copied from the turbovnc package.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but
"3rdparty"
(delete-all-but "3rdparty"
;; asl2.0 and cc0
"glad" ;Is tailored.
;; bsd-3
+3 -3
View File
@@ -792,16 +792,16 @@ the freedesktop.org XDG Base Directory specification.")
(define-public elogind
(package
(name "elogind")
(version "255.17")
(version "255.22")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/elogind/elogind")
(commit (string-append "v" version))))
(commit (string-append "V" version))))
(file-name (git-file-name name version))
(sha256
(base32
"0cb6p559281dzh24is91v6d4v4kz45yhyizibi4sfql9nign865h"))))
"0hnzks8f0jl2hkf954pqky5490zacqaipz20k38qvzl5g8i1if5l"))))
(build-system meson-build-system)
(arguments
`(#:configure-flags
+1 -9
View File
@@ -1182,17 +1182,9 @@ It is capable of creating games for SCUMM version 6 and partially version 7.")
(sha256
(base32
"12f1d45995qf5sazjmmfdydllcd6alhqs1s4xwv3jiq1fw66hcy9"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
'(begin
;; XXX: 'delete-all-but' is copied from the turbovnc package.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <> (cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "extlibs/headers"
"glad"))))) ;pre-generated headers
(build-system cmake-build-system)
+5 -5
View File
@@ -5521,7 +5521,7 @@ falling, themeable graphics and sounds, and replays.")
(name "wesnoth")
;; Even-numbered minor versions indicate stable versions:
;; https://wiki.wesnoth.org/ReleasingWesnoth#Version_numbering
(version "1.18.6")
(version "1.18.7")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -5530,7 +5530,7 @@ falling, themeable graphics and sounds, and replays.")
(file-name (git-file-name name version))
(sha256
(base32
"0cdlczxczqgzdaqwydb9gfgi7d9jc39li72p2rb5nk1rlgfff79s"))))
"0hdrp4xm9d8kj8id2g5q0wwdwykx4a0f1cs8a7fghmv0czryfv7f"))))
(build-system cmake-build-system)
(arguments
(list #:tests? #f ;no test target
@@ -6749,7 +6749,7 @@ in-window at 640x480 resolution or fullscreen.")
(define-public warzone2100
(package
(name "warzone2100")
(version "4.6.1")
(version "4.6.3")
(source (origin
(method url-fetch)
(uri (string-append "mirror://sourceforge/warzone2100/releases/"
@@ -6765,7 +6765,7 @@ in-window at 640x480 resolution or fullscreen.")
"inih" "re2" "utf8proc" "utfcpp")))))
(sha256
(base32
"02x5ihkpfkpjxwvh00d8yqzd796af7d684nk96hzhhq28qw5bb16"))))
"0fmiy0pm56yy69c0nhynjdiaslwlfg8cdvfl5s78g5pzdi1y47s3"))))
(build-system cmake-build-system)
(arguments (list #:configure-flags #~'("-GNinja"
"-DWZ_DISTRIBUTOR=Guix"
@@ -6802,7 +6802,7 @@ in-window at 640x480 resolution or fullscreen.")
opusfile
physfs
re2
sdl2
sdl3
sqlite
utf8proc
utfcpp
+2 -2
View File
@@ -2936,7 +2936,7 @@ to the OSM opening hours specification.")
(define-public josm
(package
(name "josm")
(version "19539")
(version "19555")
(source (origin
(method svn-fetch)
(uri (svn-reference
@@ -2945,7 +2945,7 @@ to the OSM opening hours specification.")
(recursive? #f)))
(sha256
(base32
"05kslpvdwl4fldjzl6m2kmqvbmjv5yvipfavg01l30ywhw2c7v7v"))
"0kpshdj8kf9ag7h1qqrh9jqc6c9iv8v369mk60a8g7cbzf0xpblw"))
(file-name (string-append name "-" version "-checkout"))
(modules '((guix build utils)))
(snippet
+21 -24
View File
@@ -19,10 +19,12 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages gkrellm)
#:use-module (guix build-system gnu)
#:use-module (guix download)
#:use-module (guix gexp)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix build-system gnu)
#:use-module (guix utils)
#:use-module (gnu packages gettext)
#:use-module (gnu packages gtk)
#:use-module (gnu packages pkg-config)
@@ -31,32 +33,27 @@
(define-public gkrellm
(package
(name "gkrellm")
(version "2.3.11")
(version "2.5.1")
(source
(origin
(method url-fetch)
(uri (string-append "http://gkrellm.srcbox.net/releases/gkrellm-"
version ".tar.bz2"))
(sha256
(base32 "01lccz4fga40isv09j8rjgr0qy10rff9vj042n6gi6gdv4z69q0y"))))
(method url-fetch)
(uri (string-append "https://gkrellm.srcbox.net/releases/gkrellm-"
version ".tar.bz2"))
(sha256
(base32 "0qvy2xmwmfy5f0g09yn9lr262shnx82ba04r5il2wj4qscg3r7h8"))))
(build-system gnu-build-system)
(inputs
`(("gettext" ,gettext-minimal)
("gtk+" ,gtk+-2)
("libice" ,libice)
("libsm" ,libsm)))
(native-inputs
(list pkg-config))
(inputs (list gtk+-2 libsm))
(native-inputs (list gettext-minimal pkg-config))
(arguments
`(#:tests? #f ; there is no check target
#:phases
(modify-phases %standard-phases
(delete 'configure)) ; no configure script
#:make-flags
(let ((out (assoc-ref %outputs "out")))
(list (string-append "INSTALLROOT=" out)
"CC=gcc"))))
(home-page "http://gkrellm.srcbox.net/")
(list
#:tests? #f ;there is no check target
#:phases
#~(modify-phases %standard-phases
(delete 'configure)) ;no configure script
#:make-flags
#~(list (string-append "INSTALLROOT=" #$output)
(string-append "CC=" #$(cc-for-target)))))
(home-page "https://gkrellm.srcbox.net/")
(synopsis "System monitors")
(description
"GKrellM is a single process stack of system monitors which supports
+2 -2
View File
@@ -165,14 +165,14 @@ tool to extract metadata from a file and print the results.")
(define-public libmicrohttpd
(package
(name "libmicrohttpd")
(version "1.0.2")
(version "1.0.3")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/libmicrohttpd/libmicrohttpd-"
version ".tar.gz"))
(sha256
(base32
"1ix843yqhcl8d5gh5652pw2scx4p5n836ca80ymms5rl136lycnz"))))
"0shj6kk4xp3k45vv696bzgx4s2jzpvhp11syck1zb70rmrxba5kq"))))
(build-system gnu-build-system)
(arguments
(list #:configure-flags
+5 -5
View File
@@ -605,9 +605,9 @@ in the case of Firefox, it is browser/locales/all-locales."
"zh-TW"))
;;; Please keep these versions in sync with icedove.
(define %icecat-base-version "140.9.0")
(define %icecat-base-version "140.9.1")
(define %icecat-version (string-append %icecat-base-version "-gnu1"))
(define %icecat-build-id "20260324000000") ;must be of the form YYYYMMDDhhmmss
(define %icecat-build-id "20260414000000") ;must be of the form YYYYMMDDhhmmss
;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
@@ -627,9 +627,9 @@ in the case of Firefox, it is browser/locales/all-locales."
"firefox-" upstream-firefox-version ".source.tar.xz"))
(sha256
(base32
"0b79x61w51fjf12p5sr9pipg4b3fjdnbsg0j20fdai3jq6jb4wmr"))))
"1hld2kbzvrmr7pqq0r5hw639xl8kw29lm2hsbn0m4kxang1fdlj5"))))
(gnuzilla-commit "10a8be3fcf725ed01ffb7279ec27c2fba55dd2d2")
(gnuzilla-commit "f3595923458a5255f61a3853bd83bb5f004dc3bc")
(gnuzilla-source
(origin
(method git-fetch)
@@ -640,7 +640,7 @@ in the case of Firefox, it is browser/locales/all-locales."
(string-take gnuzilla-commit 8)))
(sha256
(base32
"076s3zpq0cj24a2pjarb57k1xv9z45xazps8rgypzw8yc4pxi9rj"))))
"03kc08cvmdv3sxihf5hfhw2k91mg1y6f46b3x47p7q98phgk03cv"))))
;; 'search-patch' returns either a valid file name or #f, so wrap it
;; in 'assume-valid-file-name' to avoid 'local-file' warnings.
+1 -9
View File
@@ -192,17 +192,9 @@ definitions in Go programs.")
(file-name (git-file-name name version))
(sha256
(base32 "0c1rxbj3v3m0fqb8q96xlbawxm9scyx6vvr8pddkiwp7zkx4ajym"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "cmd" "godoc")
(delete-all-but "." "cmd")))))
(build-system go-build-system)
+4 -29
View File
@@ -1535,17 +1535,9 @@ Go programming language.")
(file-name (git-file-name name version))
(sha256
(base32 "0sjvngpahkb5x573i855fjlb1fdmr6n269nmb5xxnbabjb27mnvg"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "go" "expect")
(delete-all-but "." "go")))))
(build-system go-build-system)
@@ -1575,17 +1567,9 @@ Go source code (including go.mod and go.work files) as test expectations.")
(file-name (git-file-name name version))
(sha256
(base32 "0sjvngpahkb5x573i855fjlb1fdmr6n269nmb5xxnbabjb27mnvg"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "go" "packages")
(delete-all-but "go/packages" "packagestest")
(delete-all-but "." "go")))))
@@ -1618,18 +1602,9 @@ tools on.")
(file-name (git-file-name name version))
(sha256
(base32 "1blk22apy424j9v58lfy4pxnrgh93yqchqhxsnf78dmx4vx5yi9r"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "godoc")))))
#~(begin (delete-all-but "." "godoc")))))
(build-system go-build-system)
(arguments
(list
File diff suppressed because it is too large Load Diff
+25 -163
View File
@@ -74,6 +74,7 @@
;;; Copyright © 2025 Aleksandr Lebedev <alex.lebedev2003@icloud.com>
;;; Copyright © 2026 Carlos Durán Domínguez <wurt@wurt.eu>
;;; Copyright © 2026 Giacomo Leidi <therewasa@fishinthecalculator.me>
;;; Copyright © 2026 Evgeny Pisemsky <mail@pisemsky.site>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -1236,26 +1237,8 @@ may be interactive or produce standard formats such as SVG or PDF.")
(file-name (git-file-name name version))
(sha256
(base32 "1np11if704xzyhsx9mqhz7djx23g6wnz62r1v9ra6xaz91yfic0n"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(snippet
#~(begin
;; XXX: 'delete-all-but' is copied from the turbovnc package.
(define (delete-all-but directory . preserve)
(define (directory? x)
(and=> (stat x #f)
(compose (cut eq? 'directory <>) stat:type)))
(with-directory-excursion directory
(let* ((pred
(negate (cut member <> (append '("." "..") preserve))))
(items (scandir "." pred)))
(for-each (lambda (item)
(if (directory? item)
(delete-file-recursively item)
(delete-file item)))
items))))
(delete-all-but "." "generate")))))
(modules '((guix build utils)))
(snippet #~(delete-all-but "." "generate"))))
(build-system go-build-system)
(arguments
(list
@@ -4816,18 +4799,9 @@ and multi-selects with a focus on user experience and aesthetics.")
(file-name (git-file-name name version))
(sha256
(base32 "083zj3yqb48li8w389iabi1b1zklbw7cwam2grvvglcqrrsj3bsf"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "ansi")))))
#~(begin (delete-all-but "." "ansi")))))
(build-system go-build-system)
(arguments
(list
@@ -4864,14 +4838,7 @@ ECMA-48} specs.")
(ice-9 ftw)
(srfi srfi-26)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "cellbuf")))))
#~(begin (delete-all-but "." "cellbuf")))))
(build-system go-build-system)
(arguments
(list
@@ -4929,18 +4896,8 @@ ECMA-48} specs.")
(file-name (git-file-name name version))
(sha256
(base32 "088786ak8jsgvssbb5y16z066vfq9f6078sjc7iv766knfr2i0x2"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "errors")))))
(modules '((guix build utils)))
(snippet #~(delete-all-but "." "errors"))))
(build-system go-build-system)
(arguments
(list
@@ -5092,18 +5049,9 @@ package provides an API for comparing Golden files.")
(file-name (git-file-name name version))
(sha256
(base32 "1shw55110fnn4xz80wmgr18czmiil6z1j064m90iw8c7j9llfzn5"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "term")))))
#~(begin (delete-all-but "." "term")))))
(build-system go-build-system)
(arguments
(list
@@ -5191,21 +5139,8 @@ package provides an API for comparing Golden files.")
(file-name (git-file-name name version))
(sha256
(base32 "0blpb8vpl7sc6pb43h0730wdcwrkvnhly6qhik6wljrzn2nqz5g2"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(snippet
#~(begin
;; XXX: 'delete-all-but' is copied from the turbovnc package.
;; Consider implementing it as a reusable procedure in
;; guix/build/utils or guix/build-system/go.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "xpty")))))
(modules '((guix build utils)))
(snippet #~(delete-all-but "." "xpty"))))
(build-system go-build-system)
(arguments
(list
@@ -6243,21 +6178,8 @@ packages.")
(file-name (git-file-name name version))
(sha256
(base32 "0afaljkkd388f6igr3f2vjnd14yr8h20fcfzglw8j5q1q7a1cvik"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(snippet
#~(begin
;; XXX: 'delete-all-but' is copied from the turbovnc package.
;; Consider implementing it as a reusable procedure in
;; guix/build/utils or guix/build-system/go.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "pkg")))))
(modules '((guix build utils)))
(snippet #~(delete-all-but "." "pkg"))))
(build-system go-build-system)
(arguments
(list
@@ -15179,18 +15101,9 @@ Twisted's manhole library} .")
(file-name (git-file-name name version))
(sha256
(base32 "0xj782ghf0iv8r2xxmg2vrh72b02h216y4yfyi60y9z0691lrsip"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "tools")))))
#~(begin (delete-all-but "." "tools")))))
(build-system go-build-system)
(arguments
(list
@@ -18794,18 +18707,9 @@ publishsubscribe pattern}.")
(file-name (git-file-name name version))
(sha256
(base32 "0an8ypp8v9gfxbbb71mpimb1g9labl4v7lgazcphysn6c5smgmiw"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "atomicwriter")))))
#~(begin (delete-all-but "." "atomicwriter")))))
(build-system go-build-system)
(arguments
(list
@@ -18860,18 +18764,9 @@ https://github.com/syndtr/gocapability.")
(file-name (git-file-name name version))
(sha256
(base32 "1nh1disclgydvq7k10awzks6k8kw9cjj3q19f83ksi4b76p5l475"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "mount")))))
#~(begin (delete-all-but "." "mount")))))
(build-system go-build-system)
(arguments
(list
@@ -29614,21 +29509,8 @@ when they'd prefer a more familiar, loosely typed API.")
(file-name (git-file-name name version))
(sha256
(base32 "05i15278swdmpif3p6g18sy0sn7rnfdl3m2rj5p30cnyb0j29vig"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(snippet
#~(begin
;; XXX: 'delete-all-but' is copied from the turbovnc package.
;; Consider implementing it as a reusable procedure in
;; guix/build/utils or guix/build-system/go.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "exp")))))
(modules '((guix build utils)))
(snippet #~(delete-all-but "." "exp"))))
(build-system go-build-system)
(arguments
(list
@@ -31027,18 +30909,9 @@ code.")
(name "go-modernc-org-ccgo-v4")
(source (origin
(inherit (package-source go-modernc-org-ccgo-v3))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "v4")))))
#~(begin (delete-all-but "." "v4")))))
(arguments
(substitute-keyword-arguments
(package-arguments go-modernc-org-ccgo-v3)
@@ -31994,20 +31867,9 @@ unmarshaling functions based on @code{encoding/json} @code{Unmarshal()}.")
(file-name (git-file-name name version))
(sha256
(base32 "12n8ij4gisah5mvxcgq263iic61gjpxdj3ml03826zckzn7wlv46"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
;; XXX: 'delete-all-but' is copied from the turbovnc package.
;; Consider implementing it as a reusable procedure in
;; guix/build/utils or guix/build-system/go.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "cmd")
(delete-all-but "cmd" "config")))))
(build-system go-build-system)
-51
View File
@@ -1022,56 +1022,6 @@ in the style of communicating sequential processes (@dfn{CSP}).")
(map (lambda (suffix) (string-append "armv9" suffix "-a"))
'("" ".1" ".2" ".3" ".4" ".5"))))
(define-public go-1.23
(package
(inherit go-1.22)
(name "go")
(version "1.23.12")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/golang/go")
(commit (string-append "go" version))))
(file-name (git-file-name name version))
(sha256
(base32 "0nxcp8wikn93zxipm829dyyagwys13yhf452ai357wzbdzqihm7x"))))
(arguments
(substitute-keyword-arguments (package-arguments go-1.22)
((#:phases phases)
#~(modify-phases #$phases
(replace 'disable-more-tests
(lambda _
#$@(cond
((target-aarch64?)
;; https://go-review.googlesource.com/c/go/+/151303
;; This test is known buggy on aarch64 and is enabled and
;; disabled upstream with some regularity.
#~((substitute* "src/plugin/plugin_test.go"
(("package plugin_test")
(string-append "// +build !linux linux,!arm64\n\n"
"package plugin_test")))))
((target-arm32?)
;; This test fails when run on aarch64-linux.
#~((substitute* "src/cmd/link/internal/ld/elf_test.go"
(("TestElfBindNow.*" all)
(string-append
all
" if runtime.GOARCH == \"arm\" {\n"
" t.Skipf(\"skipping; flaky on armhf\")\n"
" }\n")))))
(else (list #t)))))))))
(properties
`((compiler-cpu-architectures
("aarch64" ,@%go-1.23-arm64-micro-architectures)
("armhf" ,@%go-1.17-arm-micro-architectures)
("powerpc64le" ,@%go-1.17-powerpc64le-micro-architectures)
("x86_64" ,@%go-1.18-x86_64-micro-architectures))))
(native-inputs
;; setarch was added to the tsan test suite in 1.23.12
`(("go" ,util-linux)
,@(package-native-inputs go-1.22)))))
(define-public go-1.24
(package
(inherit go-1.22)
@@ -1239,7 +1189,6 @@ in the style of communicating sequential processes (@dfn{CSP}).")
(define-public go-std-1.20 (make-go-std go-1.20))
(define-public go-std-1.21 (make-go-std go-1.21))
(define-public go-std-1.22 (make-go-std go-1.22))
(define-public go-std-1.23 (make-go-std go-1.23))
(define-public go-std-1.24 (make-go-std go-1.24))
(define-public go-std-1.25 (make-go-std go-1.25))
(define-public go-std-1.26 (make-go-std go-1.26))
+2 -2
View File
@@ -47,13 +47,13 @@
(define-public groff
(package
(name "groff")
(version "1.22.4")
(version "1.24.0")
(source (origin
(method url-fetch)
(uri (string-append "mirror://gnu/groff/groff-" version
".tar.gz"))
(sha256 (base32
"14q2mldnr1vx0l9lqp9v2f6iww24gj28iyh4j2211hyynx67p3p7"))))
"0w3mf9jb5j1gbw1160lr5498q4ayl5i3jpf5g8721l1yzzcbr6z7"))))
(build-system gnu-build-system)
(outputs '("out"
"doc")) ;12MiB of PS, PDF, HTML, and examples
+37
View File
@@ -5787,6 +5787,43 @@ reading and writing PNG data, as well as some graphic primitives and basic image
processing filters.")
(license license:gpl3+)))
(define-public guile-pnm
(package
(name "guile-pnm")
(version "0.1.0")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/artyom-poptsov/guile-pnm")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1yvsni4hll20g99zq4wl734f9i8gpjr1sqsnk3a93k2dd7b6ymac"))))
(build-system gnu-build-system)
(arguments
(list
#:make-flags
#~(list "GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
(native-inputs (list autoconf
automake
pkg-config
texinfo
;; needed when cross-compiling.
guile-3.0
guile-lib
guile-smc))
(inputs (list guile-3.0 guile-lib))
(propagated-inputs (list guile-smc))
(home-page "https://github.com/artyom-poptsov/guile-pnm")
(synopsis "NetBPM (PNM) library for GNU Guile")
(description
"@code{guile-pnm} is a GNU Guile library for working with the
@url{https://en.wikipedia.org/wiki/Netpbm, NetPBM} format (also known as PNM),
including portable bitmap (PBM), portable graymap (PGM) and portable
pixel (PPM) variants.")
(license license:gpl3+)))
(define-public guile-cv
(package
(name "guile-cv")
+7 -15
View File
@@ -601,24 +601,16 @@ different data arrays similar to those available in the numdiff software.")
(file-name (git-file-name name version))
(snippet
#~(begin
(use-modules (guix build utils)
(ice-9 ftw)
(srfi srfi-26))
(use-modules (guix build utils))
;; Delete any bundled .jar files.
(for-each delete-file (find-files "." "\\.jar$"))
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "3rdparty"
"fastcv" ;TODO: Unbundle these
"libspng"
"libtim-vx"
"orbbecsdk"
"quirc"
"zlib-ng")))
"fastcv" ;TODO: Unbundle these
"libspng"
"libtim-vx"
"orbbecsdk"
"quirc"
"zlib-ng")))
(sha256
(base32
"15w4fqjqv5k1yw70jbjsnlgiky39mqpy05rvmm2fbyjrif4kbgkl"))))
+10 -4
View File
@@ -669,7 +669,7 @@ and WebP.")
(define-public mcomix
(package
(name "mcomix")
(version "3.1.0")
(version "3.1.1")
(source
(origin
(method url-fetch)
@@ -677,7 +677,7 @@ and WebP.")
"mcomix-" version ".tar.gz"))
(sha256
(base32
"09y4nhlcqvvhz0wscx4zpqxmyhiwh8wrjnhk52awxhzvgyx6wa7r"))))
"1y6fps1fbzjc4sdm381432zvrq97iadbz4yyxxsfnzf0ggnsl2m1"))))
(build-system pyproject-build-system)
(arguments
(list
@@ -720,8 +720,14 @@ and WebP.")
(wrap-program prog
`("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))))))
(native-inputs (list python-setuptools))
(inputs
(list bash-minimal p7zip python python-pillow python-pygobject python-pycairo gtk+))
(inputs (list bash-minimal
gobject-introspection
gtk+
p7zip
python
python-pillow
python-pycairo
python-pygobject))
(home-page "https://sourceforge.net/p/mcomix/wiki/Home/")
(synopsis "Image viewer for comics")
(description "MComix is a customizable image viewer that specializes as
+2 -14
View File
@@ -1362,21 +1362,9 @@ code prior to it getting merged into @code{go-cid}.")
(file-name (git-file-name name version))
(sha256
(base32 "00lwizzdfdx6kynxddal3all6q9dhwqanpkw0d0vxlwik4nkvxa5"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
;; XXX: 'delete-all-but' is copied from the turbovnc package.
;; Consider to implement it as re-usable procedure in
;; guix/build/utils or guix/build-system/go.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "." "ipfs")))))
#~(begin (delete-all-but "." "ipfs")))))
(build-system go-build-system)
(arguments
(list
+2 -2
View File
@@ -36,7 +36,7 @@
(define-public jemalloc
(package
(name "jemalloc")
(version "5.3.0")
(version "5.3.1")
(source (origin
(method url-fetch)
(uri (string-append
@@ -44,7 +44,7 @@
version "/jemalloc-" version ".tar.bz2"))
(sha256
(base32
"1apyxjd1ixy4g8xkr61p0ny8jiz8vyv1j0k4nxqkxpqrf4g2vf1d"))))
"14kgf0hs864hp5xxqfqh37l1d8wwg57h7wv28rffs8ig4f0bq9iq"))))
(build-system gnu-build-system)
(arguments
(list
+30 -42
View File
@@ -87,6 +87,7 @@
;;; Copyright © 2025 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2025 Arjan Adriaanse <arjan@adriaan.se>
;;; Copyright © 2026 Justin Veilleux <terramorpha@cock.li>
;;; Copyright © 2025 Dariqq <dariqq@posteo.net>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -3202,57 +3203,45 @@ accepted as a quirk (ie AMD Vega 10).")
(define-public linux-pam
(package
(name "linux-pam")
(version "1.5.2")
(version "1.7.2")
(source
(origin
(method url-fetch)
(uri (string-append
"https://github.com/linux-pam/linux-pam/releases/download/v"
version "/Linux-PAM-" version ".tar.xz"))
(method git-fetch)
(uri (git-reference
(url "https://github.com/linux-pam/linux-pam")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"0kgrsj2scv5mx6w925h9hxf11jnqqs9z8s22aw94b90xm4qp3v74"))
"1z5apric696zsci28c7651spvdll0zrpfm9z574gcjf45mp22gmi"))
(patches (search-patches "linux-pam-unix_chkpwd.patch"
"linux-pam-no-setfsuid.patch"))))
(build-system gnu-build-system)
(build-system meson-build-system)
(outputs '("out" "doc")) ;; 0.8 MiB of html
(inputs (list libxcrypt))
(native-inputs
(list flex
;; TODO: optional dependencies
;; ("cracklib" ,cracklib)
))
(list gettext-minimal
flex bison
;; manpages
libxslt
libxml2
docbook-xml
docbook-xsl))
(arguments
(list
;; Most users, such as `shadow', expect the headers to be under
;; `security'.
#:configure-flags #~(list (string-append "--includedir="
(assoc-ref %outputs "out")
"/include/security")
;; explicit libdir for pkgconfig files
;; drop with 1.5.3, which fixes
;; https://github.com/linux-pam/linux-pam/issues/466
(string-append "--libdir="
(assoc-ref %outputs "out")
"/lib")
;; XXX: <rpc/rpc.h> is missing from glibc when
;; cross-compiling, so we have to disable NIS
;; support altogether.
#$@(if (%current-target-system)
#~("--disable-nis")
#~()))
#:phases (if (target-hurd?)
#~(modify-phases %standard-phases
(add-after 'unpack 'skip-pam-limits
(lambda _
;; 'pam_limits.c' uses <sys/prctl.h>, which is
;; Linux-specific. Skip it on GNU/Hurd.
(substitute* "modules/Makefile.in"
(("pam_limits") "")))))
#~%standard-phases)
#:configure-flags
#~(list
;; lastlog is deprecated since 1.5.3
"-Dpam_lastlog=enabled"
(string-append "-Dvendordir=" #$output "/share/pam")
(string-append "-Ddocbook-rng="
#$(let ((docbook-xml (this-package-native-input
"docbook-xml")))
(file-append docbook-xml
"/xml/docbook/"
(package-version docbook-xml)
"/rng/docbookxi.rng")))
(string-append "-Dhtmldir=" #$output:doc "/share/doc/" #$name "/html"))
;; XXX: Tests won't run in chroot, presumably because /etc/pam.d
;; isn't available.
#:tests? #f))
@@ -5000,7 +4989,6 @@ configuration and monitoring interfaces.")
(with-directory-excursion "./python" (python-inst ,python))
#t))))))))
(define-public libnl-python2 (libnl-python-package "python2"))
(define-public libnl-python3 (libnl-python-package "python3"))
(define-public iw
+3 -3
View File
@@ -12982,8 +12982,8 @@ score. When evaluated, the musical score is rendered to an image.")
(sbcl-package->ecl-package sbcl-cmn))
(define-public sbcl-coalton
(let ((commit "939342495f55991812c2c2767322c5e51e755216")
(revision "4"))
(let ((commit "bf475c8c53e02a2e0cb29deab4d101d25743bfca")
(revision "5"))
(package
(name "sbcl-coalton")
(version (git-version "0.0.1" revision commit))
@@ -12995,7 +12995,7 @@ score. When evaluated, the musical score is rendered to an image.")
(commit commit)))
(file-name (git-file-name "cl-coalton" version))
(sha256
(base32 "08qzj3v4fvn9h87whyqg650rpap8lva7jr94d1akv6m2z62l5q68"))))
(base32 "0zrp2s82n2mxx7knbnbsdj64zar21nnnf8iwzrqzs4g3v6xpyz9z"))))
(build-system asdf-build-system/sbcl)
(native-inputs
(list sbcl-fiasco))
+3 -2
View File
@@ -33,6 +33,7 @@
;;; Copyright © 2024 Suhail Singh <suhail@bayesians.ca>
;;; Copyright © 2024 David Pflug <david@pflug.io>
;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2026 Igorj Gorjaĉev <igor@goryachev.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -912,7 +913,7 @@ assembler, PEG) is less than 1MB.")
(define-public jpm
(package
(name "jpm")
(version "1.1.0")
(version "1.2.0")
(source
(origin
(method git-fetch)
@@ -921,7 +922,7 @@ assembler, PEG) is less than 1MB.")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "05rdxigmiy7vf93s16a8n2029lq33073jccz1rjl4iisxj6piw4l"))))
(base32 "06ywq1ajvqx3lfpldwbakc21hxhb313r0196xnmrrbb6k1f8hsfx"))))
(build-system copy-build-system)
(arguments
(list
+4 -14
View File
@@ -780,20 +780,10 @@ operating systems.")
(file-name (git-file-name name version))
(sha256
(base32 "1sg6ifabci7xyp3zds1w906vx6jsmyjlfr6bqld7m7hj07by9ndd"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(snippet
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "autosetup"
"mutt-gettext.tcl"
"mutt-iconv.tcl")))))
(modules '((guix build utils)))
(snippet #~(delete-all-but "autosetup"
"mutt-gettext.tcl"
"mutt-iconv.tcl"))))
(build-system gnu-build-system)
(inputs
(list cyrus-sasl
-17
View File
@@ -2690,23 +2690,6 @@ validating international phone numbers.")
(home-page "https://github.com/google/libphonenumber")
(license license:asl2.0)))
(define-public libphonenumber-8.11
(package/inherit libphonenumber
(name (package-name libphonenumber))
(version "8.11.5")
(source (origin
(inherit (package-source libphonenumber))
(uri (git-reference
(url "https://github.com/google/libphonenumber")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"1y4ivhy3kwgggrr3g521zaf97334aan0yqpzzryss80k326q5rhf"))))
(inputs
(modify-inputs inputs
(delete "abseil-cpp" "icedtea")))))
(define-public chatty
(package
(name "chatty")
+1 -10
View File
@@ -428,18 +428,9 @@ software vendors, application developers and computer science researchers.")
(uri (string-append "https://www.open-mpi.org/software/ompi/v"
(version-major+minor version)
"/downloads/openmpi-" version ".tar.bz2"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
'(begin
;; XXX: 'delete-all-but' is copied from the turbovnc package.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
;; Delete as many bundled libraries as permitted by the build
;; system.
(delete-all-but "3rd-party" "treematch" "Makefile.in" "Makefile.am")
+1 -5
View File
@@ -165,11 +165,7 @@ from the protocol files.")
(arguments
`(#:configure-flags '("--disable-static")))
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)
("gettext" ,gettext-minimal)
("libtool" ,libtool)
("pkg-config" ,pkg-config)))
(list autoconf automake gettext-minimal libtool pkg-config))
(inputs
(list libtirpc))
(synopsis "Public client interface for NIS(YP) and NIS+")
@@ -2,8 +2,14 @@ unix_chkpwd is designed to have a suid bit, but it's not possible to set it
for files in the store. This patch tells unix_pam.so to look for
unix_chkpwd in setuid program directory on Guix System.
--- a/modules/pam_unix/Makefile.in
+++ b/modules/pam_unix/Makefile.in
@@ -651,1 +651,1 @@
- -DCHKPWD_HELPER=\"$(sbindir)/unix_chkpwd\" \
+ -DCHKPWD_HELPER=\"/run/setuid-programs/unix_chkpwd\" \
--- a/modules/module-meson.build
+++ b/modules/module-meson.build
@@ -114,7 +114,7 @@ if module == 'pam_unix'
if enable_nis
pam_module_src += ['yppasswd_xdr.c']
endif
- pam_module_c_args += ['-DCHKPWD_HELPER="@0@"'.format(sbindir / 'unix_chkpwd'),
+ pam_module_c_args += ['-DCHKPWD_HELPER="@0@"'.format('/run/privileged/bin' / 'unix_chkpwd'),
'-DUPDATE_HELPER="@0@"'.format(sbindir / 'unix_update')]
pam_module_deps += [libcrypt, libselinux, libtirpc, libnsl]
endif
@@ -0,0 +1,21 @@
Author: Danny Milosavljevic <dannym@friendly-machines.com>
Subject: Move candle-onnx from exclude to members so cargo package can build it.
Date: 2026-03-01
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -4,6 +4,7 @@
"candle-datasets",
"candle-examples",
"candle-nn",
+ "candle-onnx",
"candle-pyo3",
"candle-transformers",
"candle-wasm-examples/*",
@@ -15,7 +16,6 @@
"candle-flash-attn",
"candle-kernels",
"candle-metal-kernels",
- "candle-onnx",
]
resolver = "2"
@@ -37,7 +37,7 @@ diff -ru a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt
-add_subdirectory(fmt EXCLUDE_FROM_ALL)
-set_property(TARGET fmt PROPERTY FOLDER "3rdparty")
-# Define a custom inline namespace for the fmt used by WZ, to prevent ODR violations if static linking to any libraries that themselves embed (a different version of) fmt
-target_compile_definitions(fmt PUBLIC "FMT_BEGIN_NAMESPACE=namespace fmt { inline namespace v11_wz2100 {")
-target_compile_definitions(fmt PUBLIC "FMT_BEGIN_NAMESPACE=namespace fmt { inline namespace v12_wz2100 {")
-target_compile_definitions(fmt PUBLIC "FMT_END_NAMESPACE=}}")
-
+pkg_check_modules(FMT REQUIRED fmt)
@@ -238,12 +238,12 @@ diff -ru a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt
include(FetchContent)
FetchContent_Declare(
diff -ru a/lib/framework/wzstring.cpp b/lib/framework/wzstring.cpp
--- a/lib/framework/wzstring.cpp 2025-09-16 11:41:32.000000000 -0500
+++ b/lib/framework/wzstring.cpp 2025-09-18 13:37:23.686668245 -0500
@@ -24,8 +24,8 @@
#include <sstream>
#include <iomanip>
#include <limits>
--- a/lib/framework/wzstring.cpp
+++ b/lib/framework/wzstring.cpp
@@ -29,8 +29,8 @@
// "By default, Visual Studio always returns the value 199711L for the __cplusplus preprocessor macro."
#define UTF_CPP_CPLUSPLUS 201703L
#endif
-#include <utfcpp/source/utf8.h>
-#include <utf8proc/utf8proc.h>
+#include <utf8cpp/utf8.h>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,107 @@
Author: Danny Milosavljevic <dannym@friendly-machines.com>
Subject: Add non-dismissing notification action hooks.
Date: 2026-03-08
License: gpl3+
MessageNotification only supports primary and secondary buttons that always
dismiss the notification after running their handlers. That is too restrictive
for flows where the user needs to inspect something first and then return to the
same prompt.
Add a generic non-dismissing `more_info_on_click` action alongside the existing
URL-based more-info button. This keeps the notification component reusable for
"inspect first, decide second" workflows without forcing every caller to build a
custom notification view.
diff --git a/crates/workspace/src/notifications.rs b/crates/workspace/src/notifications.rs
index 84f479b77e..9e210cb554 100644
--- a/crates/workspace/src/notifications.rs
+++ b/crates/workspace/src/notifications.rs
@@ -714,6 +714,7 @@ pub mod simple_message_notification {
secondary_icon_color: Option<Color>,
secondary_on_click: Option<Arc<dyn Fn(&mut Window, &mut Context<Self>)>>,
more_info_message: Option<SharedString>,
+ more_info_on_click: Option<Arc<dyn Fn(&mut Window, &mut Context<Self>)>>,
more_info_url: Option<Arc<str>>,
show_close_button: bool,
show_suppress_button: bool,
@@ -758,6 +759,7 @@ pub mod simple_message_notification {
secondary_icon_color: None,
secondary_on_click: None,
more_info_message: None,
+ more_info_on_click: None,
more_info_url: None,
show_close_button: true,
show_suppress_button: true,
@@ -843,6 +845,22 @@ pub mod simple_message_notification {
self
}
+ pub fn more_info_on_click<F>(mut self, on_click: F) -> Self
+ where
+ F: 'static + Fn(&mut Window, &mut Context<Self>),
+ {
+ self.more_info_on_click = Some(Arc::new(on_click));
+ self
+ }
+
+ pub fn more_info_on_click_arc<F>(mut self, on_click: Arc<F>) -> Self
+ where
+ F: 'static + Fn(&mut Window, &mut Context<Self>),
+ {
+ self.more_info_on_click = Some(on_click);
+ self
+ }
+
pub fn more_info_url<S>(mut self, url: S) -> Self
where
S: Into<Arc<str>>,
@@ -946,20 +964,36 @@ pub mod simple_message_notification {
}))
.child(
h_flex().w_full().justify_end().children(
- self.more_info_message
- .iter()
- .zip(self.more_info_url.iter())
- .map(|(message, url)| {
- let url = url.clone();
- Button::new(message.clone(), message.clone())
- .label_size(LabelSize::Small)
- .icon(IconName::ArrowUpRight)
- .icon_size(IconSize::Indicator)
- .icon_color(Color::Muted)
- .on_click(cx.listener(move |_, _, _, cx| {
+ self.more_info_message.iter().filter_map(|message| {
+ let more_info_on_click = self.more_info_on_click.clone();
+ let more_info_url = self.more_info_url.clone();
+
+ if more_info_on_click.is_none() && more_info_url.is_none() {
+ return None;
+ }
+
+ let mut button = Button::new(message.clone(), message.clone())
+ .label_size(LabelSize::Small)
+ .icon(IconName::ArrowUpRight)
+ .icon_size(IconSize::Indicator)
+ .icon_color(Color::Muted);
+
+ button = match (more_info_on_click, more_info_url) {
+ (Some(on_click), _) => button.on_click(cx.listener(
+ move |_, _, window, cx| {
+ (on_click)(window, cx);
+ },
+ )),
+ (None, Some(url)) => button.on_click(cx.listener(
+ move |_, _, _, cx| {
cx.open_url(&url);
- }))
- }),
+ },
+ )),
+ (None, None) => button,
+ };
+
+ Some(button)
+ }),
),
),
)
@@ -0,0 +1,65 @@
Author: Danny Milosavljevic <dannym@friendly-machines.com>
Subject: Collapse multi-line git dependency entries to single lines
Date: 2026-03-01
License: expat
Collapse multi-line git dependency entries to single lines so that
line-based substitute* patterns can process them.
--- a/Cargo.toml 2026-03-01 19:09:53.710020628 +0000
+++ b/Cargo.toml 2026-03-01 19:20:31.697337662 +0000
@@ -626,15 +626,7 @@
rayon = "1.8"
regex = "1.5"
# WARNING: If you change this, you must also publish a new version of zed-reqwest to crates.io
-reqwest = { git = "https://github.com/zed-industries/reqwest.git", rev = "c15662463bda39148ba154100dd44d3fba5873a4", default-features = false, features = [
- "charset",
- "http2",
- "macos-system-configuration",
- "multipart",
- "rustls-tls-native-roots",
- "socks",
- "stream",
-], package = "zed-reqwest", version = "0.12.15-zed" }
+reqwest = { git = "https://github.com/zed-industries/reqwest.git", rev = "c15662463bda39148ba154100dd44d3fba5873a4", default-features = false, features = ["charset", "http2", "macos-system-configuration", "multipart", "rustls-tls-native-roots", "socks", "stream"], package = "zed-reqwest", version = "0.12.15-zed" }
rsa = "0.9.6"
runtimelib = { version = "1.2.0", default-features = false, features = [
"async-dispatcher-runtime", "aws-lc-rs"
--- a/crates/gpui/Cargo.toml 2026-03-01 19:12:33.129039363 +0000
+++ b/crates/gpui/Cargo.toml 2026-03-01 19:20:33.133327405 +0000
@@ -167,9 +167,7 @@
cosmic-text = { version = "0.17.0", optional = true }
swash = { version = "0.2.6" }
# WARNING: If you change this, you must also publish a new version of zed-font-kit to crates.io
-font-kit = { git = "https://github.com/zed-industries/font-kit", rev = "110523127440aefb11ce0cf280ae7c5071337ec5", package = "zed-font-kit", version = "0.14.1-zed", features = [
- "source-fontconfig-dlopen",
-], optional = true }
+font-kit = { git = "https://github.com/zed-industries/font-kit", rev = "110523127440aefb11ce0cf280ae7c5071337ec5", package = "zed-font-kit", version = "0.14.1-zed", features = ["source-fontconfig-dlopen"], optional = true }
calloop = "0.14.3"
filedescriptor = { version = "0.8.2", optional = true }
open = { version = "5.2.0", optional = true }
@@ -207,10 +205,7 @@
"sync",
], optional = true }
# WARNING: If you change this, you must also publish a new version of zed-xim to crates.io
-xim = { git = "https://github.com/zed-industries/xim-rs.git", rev = "16f35a2c881b815a2b6cdfd6687988e84f8447d8" , features = [
- "x11rb-xcb",
- "x11rb-client",
-], package = "zed-xim", version = "0.4.0-zed", optional = true }
+xim = { git = "https://github.com/zed-industries/xim-rs.git", rev = "16f35a2c881b815a2b6cdfd6687988e84f8447d8" , features = ["x11rb-xcb", "x11rb-client"], package = "zed-xim", version = "0.4.0-zed", optional = true }
x11-clipboard = { version = "0.9.3", optional = true }
[target.'cfg(target_os = "windows")'.dependencies]
--- a/crates/livekit_client/Cargo.toml 2026-03-01 19:12:33.133661336 +0000
+++ b/crates/livekit_client/Cargo.toml 2026-03-01 19:20:33.893321975 +0000
@@ -46,9 +46,7 @@
[target.'cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))'.dependencies]
libwebrtc = { rev = "5f04705ac3f356350ae31534ffbc476abc9ea83d", git = "https://github.com/zed-industries/livekit-rust-sdks" }
-livekit = { rev = "5f04705ac3f356350ae31534ffbc476abc9ea83d", git = "https://github.com/zed-industries/livekit-rust-sdks", features = [
- "__rustls-tls"
-] }
+livekit = { rev = "5f04705ac3f356350ae31534ffbc476abc9ea83d", git = "https://github.com/zed-industries/livekit-rust-sdks", features = ["__rustls-tls"] }
[target.'cfg(any(target_os = "linux", target_os = "freebsd", target_os = "windows"))'.dependencies]
scap.workspace = true
@@ -0,0 +1,31 @@
Author: Danny Milosavljevic <dannym@friendly-machines.com>
Subject: Disable dlopen for wayland-backend and fontconfig in gpui.
Date: 2026-03-01
License: ASL2.0
Remove the "dlopen" feature from wayland-backend and the
"source-fontconfig-dlopen" feature from zed-font-kit so that libwayland
and libfontconfig are linked directly rather than loaded at runtime via
dlopen. This ensures these dependencies are visible to the package
manager and avoids runtime failures when the libraries are not in the
dlopen search path.
--- a/crates/gpui/Cargo.toml 2026-03-01 21:21:38.661240897 +0000
+++ b/crates/gpui/Cargo.toml 2026-03-01 21:23:00.282205935 +0000
@@ -167,7 +167,7 @@
cosmic-text = { version = "0.17.0", optional = true }
swash = { version = "0.2.6" }
# WARNING: If you change this, you must also publish a new version of zed-font-kit to crates.io
-font-kit = { git = "https://github.com/zed-industries/font-kit", rev = "110523127440aefb11ce0cf280ae7c5071337ec5", package = "zed-font-kit", version = "0.14.1-zed", features = ["source-fontconfig-dlopen"], optional = true }
+font-kit = { git = "https://github.com/zed-industries/font-kit", rev = "110523127440aefb11ce0cf280ae7c5071337ec5", package = "zed-font-kit", version = "0.14.1-zed", optional = true }
calloop = "0.14.3"
filedescriptor = { version = "0.8.2", optional = true }
open = { version = "5.2.0", optional = true }
@@ -177,7 +177,6 @@
calloop-wayland-source = { version = "0.4.1", optional = true }
wayland-backend = { version = "0.3.3", features = [
"client_system",
- "dlopen",
], optional = true }
wayland-client = { version = "0.31.11", optional = true }
wayland-cursor = { version = "0.31.11", optional = true }
@@ -0,0 +1,113 @@
Author: Danny Milosavljevic <dannym@friendly-machines.com>
Subject: Exclude libwebrtc dependency from audio crate on Linux.
Date: 2026-03-01
The audio crate conditionally depends on libwebrtc for echo cancellation
on platforms that have it. It already cfg-guards the libwebrtc usage for
Windows-GNU and FreeBSD. Add target_os = "linux" to those cfg conditions
so libwebrtc is not required on Linux either. The rest of the audio crate
(sound playback, output streams, end_call) continues to work without it.
--- a/crates/audio/Cargo.toml 2026-03-01 21:21:38.652107544 +0000
+++ b/crates/audio/Cargo.toml 2026-03-01 21:22:20.494478427 +0000
@@ -29,5 +29,5 @@
thiserror.workspace = true
util.workspace = true
-[target.'cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))'.dependencies]
+[target.'cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd", target_os = "linux")))'.dependencies]
libwebrtc = { rev = "5f04705ac3f356350ae31534ffbc476abc9ea83d", git = "https://github.com/zed-industries/livekit-rust-sdks" }
--- a/crates/audio/src/audio.rs 2026-03-01 21:21:38.656793329 +0000
+++ b/crates/audio/src/audio.rs 2026-03-01 21:40:18.939230433 +0000
@@ -6,7 +6,7 @@
};
use gpui::{App, AsyncApp, BackgroundExecutor, BorrowAppContext, Global};
-#[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))]
+#[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd", target_os = "linux")))]
mod non_windows_and_freebsd_deps {
pub(super) use cpal::Sample;
pub(super) use libwebrtc::native::apm;
@@ -15,7 +15,7 @@
pub(super) use std::sync::Arc;
}
-#[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))]
+#[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd", target_os = "linux")))]
use non_windows_and_freebsd_deps::*;
use rodio::{
@@ -102,7 +102,7 @@
pub struct Audio {
output_handle: Option<MixerDeviceSink>,
- #[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))]
+ #[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd", target_os = "linux")))]
pub echo_canceller: Arc<Mutex<apm::AudioProcessingModule>>,
source_cache: HashMap<Sound, Buffered<Decoder<Cursor<Vec<u8>>>>>,
replays: replays::Replays,
@@ -114,7 +114,7 @@
output_handle: Default::default(),
#[cfg(not(any(
all(target_os = "windows", target_env = "gnu"),
- target_os = "freebsd"
+ target_os = "freebsd", target_os = "linux"
)))]
echo_canceller: Arc::new(Mutex::new(apm::AudioProcessingModule::new(
true, false, false, false,
@@ -140,13 +140,13 @@
// The webrtc apm is not yet compiling for windows & freebsd
#[cfg(not(any(
any(all(target_os = "windows", target_env = "gnu")),
- target_os = "freebsd"
+ target_os = "freebsd", target_os = "linux"
)))]
let echo_canceller = Arc::clone(&self.echo_canceller);
#[cfg(not(any(
any(all(target_os = "windows", target_env = "gnu")),
- target_os = "freebsd"
+ target_os = "freebsd", target_os = "linux"
)))]
{
let source = rodio::source::Zero::new(CHANNEL_COUNT, SAMPLE_RATE)
@@ -166,10 +166,10 @@
#[cfg(any(
any(all(target_os = "windows", target_env = "gnu")),
- target_os = "freebsd"
+ target_os = "freebsd", target_os = "linux"
))]
{
- let source = rodio::source::Zero::<f32>::new(CHANNEL_COUNT, SAMPLE_RATE);
+ let source = rodio::source::Zero::new(CHANNEL_COUNT, SAMPLE_RATE);
output_handle.mixer().add(source);
}
@@ -190,7 +190,7 @@
self.replays.replays_to_tar(executor)
}
- #[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))]
+ #[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd", target_os = "linux")))]
pub fn open_microphone(voip_parts: VoipParts) -> anyhow::Result<impl Source> {
let stream = open_input_stream(voip_parts.input_audio_device)?;
let stream = stream
@@ -319,7 +319,7 @@
}
}
-#[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))]
+#[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd", target_os = "linux")))]
pub struct VoipParts {
echo_canceller: Arc<Mutex<apm::AudioProcessingModule>>,
replays: replays::Replays,
@@ -327,7 +327,7 @@
input_audio_device: Option<DeviceId>,
}
-#[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))]
+#[cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd", target_os = "linux")))]
impl VoipParts {
pub fn new(cx: &AsyncApp) -> anyhow::Result<Self> {
let (apm, replays) = cx.read_default_global::<Audio, _>(|audio, _| {
@@ -0,0 +1,320 @@
From: Danny Milosavljevic <dannym@friendly-machines.com>
Date: Fri, 6 Mar 2026 21:06:00 +0000
Subject: [PATCH] sqlez: Fix named in-memory SQLite mode
License: expat
Zed's named "in-memory" SQLite databases were being opened with
URI-looking paths such as `file:DB?mode=memory&cache=shared` but without
`SQLITE_OPEN_URI`. SQLite therefore treated those strings as literal
filenames, which leaked test databases to disk and defeated the intended
shared-memory behavior.
Fix that by opening named in-memory databases with `SQLITE_OPEN_URI` so
`mode=memory&cache=shared` is interpreted correctly, and add coverage to
ensure no literal backing files are created.
That URI fix makes shared-cache schema locking real, which in turn
exposes a second bug in `ThreadSafeConnection`: per-thread connection
initialization can race schema setup on another connection to the same
named in-memory database and fail while preparing `PRAGMA foreign_keys`.
Fix that by retrying connection initialization queries when SQLite
reports a transient schema/database lock, and add a regression test for
that case.
diff --git a/crates/sqlez/src/connection.rs b/crates/sqlez/src/connection.rs
index 53f0d4e261..3dc530757a 100644
--- a/crates/sqlez/src/connection.rs
+++ b/crates/sqlez/src/connection.rs
@@ -18,7 +18,7 @@ pub struct Connection {
unsafe impl Send for Connection {}
impl Connection {
- pub(crate) fn open(uri: &str, persistent: bool) -> Result<Self> {
+ fn open_with_flags(uri: &str, persistent: bool, flags: i32) -> Result<Self> {
let mut connection = Self {
sqlite3: ptr::null_mut(),
persistent,
@@ -26,7 +26,6 @@ impl Connection {
_sqlite: PhantomData,
};
- let flags = SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_READWRITE;
unsafe {
sqlite3_open_v2(
CString::new(uri)?.as_ptr(),
@@ -44,6 +43,14 @@ impl Connection {
Ok(connection)
}
+ pub(crate) fn open(uri: &str, persistent: bool) -> Result<Self> {
+ Self::open_with_flags(
+ uri,
+ persistent,
+ SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_READWRITE,
+ )
+ }
+
/// Attempts to open the database at uri. If it fails, a shared memory db will be opened
/// instead.
pub fn open_file(uri: &str) -> Self {
@@ -51,13 +58,20 @@ impl Connection {
}
pub fn open_memory(uri: Option<&str>) -> Self {
- let in_memory_path = if let Some(uri) = uri {
- format!("file:{}?mode=memory&cache=shared", uri)
+ if let Some(uri) = uri {
+ let in_memory_path = format!("file:{}?mode=memory&cache=shared", uri);
+ return Self::open_with_flags(
+ &in_memory_path,
+ false,
+ SQLITE_OPEN_CREATE
+ | SQLITE_OPEN_NOMUTEX
+ | SQLITE_OPEN_READWRITE
+ | SQLITE_OPEN_URI,
+ )
+ .expect("Could not create fallback in memory db");
} else {
- ":memory:".to_string()
- };
-
- Self::open(&in_memory_path, false).expect("Could not create fallback in memory db")
+ Self::open(":memory:", false).expect("Could not create fallback in memory db")
+ }
}
pub fn persistent(&self) -> bool {
@@ -265,9 +279,50 @@ impl Drop for Connection {
mod test {
use anyhow::Result;
use indoc::indoc;
+ use std::{
+ fs,
+ sync::atomic::{AtomicUsize, Ordering},
+ };
use crate::connection::Connection;
+ static NEXT_NAMED_MEMORY_DB_ID: AtomicUsize = AtomicUsize::new(0);
+
+ fn unique_named_memory_db(prefix: &str) -> String {
+ format!(
+ "{prefix}_{}_{}",
+ std::process::id(),
+ NEXT_NAMED_MEMORY_DB_ID.fetch_add(1, Ordering::Relaxed)
+ )
+ }
+
+ fn literal_named_memory_paths(name: &str) -> [String; 3] {
+ let main = format!("file:{name}?mode=memory&cache=shared");
+ [main.clone(), format!("{main}-wal"), format!("{main}-shm")]
+ }
+
+ struct NamedMemoryPathGuard {
+ paths: [String; 3],
+ }
+
+ impl NamedMemoryPathGuard {
+ fn new(name: &str) -> Self {
+ let paths = literal_named_memory_paths(name);
+ for path in &paths {
+ let _ = fs::remove_file(path);
+ }
+ Self { paths }
+ }
+ }
+
+ impl Drop for NamedMemoryPathGuard {
+ fn drop(&mut self) {
+ for path in &self.paths {
+ let _ = fs::remove_file(path);
+ }
+ }
+ }
+
#[test]
fn string_round_trips() -> Result<()> {
let connection = Connection::open_memory(Some("string_round_trips"));
@@ -382,6 +437,41 @@ mod test {
assert_eq!(read_blobs, vec![blob]);
}
+ #[test]
+ fn named_memory_connections_do_not_create_literal_backing_files() {
+ let name = unique_named_memory_db("named_memory_connections_do_not_create_backing_files");
+ let guard = NamedMemoryPathGuard::new(&name);
+
+ let connection1 = Connection::open_memory(Some(&name));
+ connection1
+ .exec(indoc! {"
+ CREATE TABLE shared (
+ value INTEGER
+ )"})
+ .unwrap()()
+ .unwrap();
+ connection1
+ .exec("INSERT INTO shared (value) VALUES (7)")
+ .unwrap()()
+ .unwrap();
+
+ let connection2 = Connection::open_memory(Some(&name));
+ assert_eq!(
+ connection2
+ .select_row::<i64>("SELECT value FROM shared")
+ .unwrap()()
+ .unwrap(),
+ Some(7)
+ );
+
+ for path in &guard.paths {
+ assert!(
+ fs::metadata(path).is_err(),
+ "named in-memory database unexpectedly created backing file {path}"
+ );
+ }
+ }
+
#[test]
fn multi_step_statement_works() {
let connection = Connection::open_memory(Some("multi_step_statement_works"));
diff --git a/crates/sqlez/src/thread_safe_connection.rs b/crates/sqlez/src/thread_safe_connection.rs
index 966f14a9c2..9d868fcba4 100644
--- a/crates/sqlez/src/thread_safe_connection.rs
+++ b/crates/sqlez/src/thread_safe_connection.rs
@@ -7,12 +7,15 @@ use std::{
ops::Deref,
sync::{Arc, LazyLock},
thread,
+ time::Duration,
};
use thread_local::ThreadLocal;
use crate::{connection::Connection, domain::Migrator, util::UnboundedSyncSender};
const MIGRATION_RETRIES: usize = 10;
+const CONNECTION_INITIALIZE_RETRIES: usize = 50;
+const CONNECTION_INITIALIZE_RETRY_DELAY: Duration = Duration::from_millis(1);
type QueuedWrite = Box<dyn 'static + Send + FnOnce()>;
type WriteQueue = Box<dyn 'static + Send + Sync + Fn(QueuedWrite)>;
@@ -197,21 +200,50 @@ impl ThreadSafeConnection {
Self::open_shared_memory(uri)
};
+ if let Some(initialize_query) = connection_initialize_query {
+ let mut last_error = None;
+ let initialized = (0..CONNECTION_INITIALIZE_RETRIES).any(|attempt| {
+ match connection.exec(initialize_query).and_then(|mut statement| statement()) {
+ Ok(()) => true,
+ Err(err)
+ if is_schema_lock_error(&err)
+ && attempt + 1 < CONNECTION_INITIALIZE_RETRIES =>
+ {
+ last_error = Some(err);
+ thread::sleep(CONNECTION_INITIALIZE_RETRY_DELAY);
+ false
+ }
+ Err(err) => {
+ panic!(
+ "Initialize query failed to execute: {}\n\nCaused by:\n{err:#}",
+ initialize_query
+ )
+ }
+ }
+ });
+
+ if !initialized {
+ let err = last_error.expect("connection initialization retries should record the last error");
+ panic!(
+ "Initialize query failed to execute after retries: {}\n\nCaused by:\n{err:#}",
+ initialize_query
+ );
+ }
+ }
+
// Disallow writes on the connection. The only writes allowed for thread safe connections
// are from the background thread that can serialize them.
*connection.write.get_mut() = false;
- if let Some(initialize_query) = connection_initialize_query {
- connection.exec(initialize_query).unwrap_or_else(|_| {
- panic!("Initialize query failed to execute: {}", initialize_query)
- })()
- .unwrap()
- }
-
connection
}
}
+fn is_schema_lock_error(err: &anyhow::Error) -> bool {
+ let message = format!("{err:#}");
+ message.contains("database schema is locked") || message.contains("database is locked")
+}
+
impl ThreadSafeConnection {
/// Special constructor for ThreadSafeConnection which disallows db initialization and migrations.
/// This allows construction to be infallible and not write to the db.
@@ -282,7 +314,7 @@ mod test {
use indoc::indoc;
use std::ops::Deref;
- use std::thread;
+ use std::{thread, time::Duration};
use crate::{domain::Domain, thread_safe_connection::ThreadSafeConnection};
@@ -318,38 +350,21 @@ mod test {
}
#[test]
- #[should_panic]
- fn wild_zed_lost_failure() {
- enum TestWorkspace {}
- impl Domain for TestWorkspace {
- const NAME: &str = "workspace";
-
- const MIGRATIONS: &[&str] = &["
- CREATE TABLE workspaces(
- workspace_id INTEGER PRIMARY KEY,
- dock_visible INTEGER, -- Boolean
- dock_anchor TEXT, -- Enum: 'Bottom' / 'Right' / 'Expanded'
- dock_pane INTEGER, -- NULL indicates that we don't have a dock pane yet
- timestamp TEXT DEFAULT CURRENT_TIMESTAMP NOT NULL,
- FOREIGN KEY(dock_pane) REFERENCES panes(pane_id),
- FOREIGN KEY(active_pane) REFERENCES panes(pane_id)
- ) STRICT;
-
- CREATE TABLE panes(
- pane_id INTEGER PRIMARY KEY,
- workspace_id INTEGER NOT NULL,
- active INTEGER NOT NULL, -- Boolean
- FOREIGN KEY(workspace_id) REFERENCES workspaces(workspace_id)
- ON DELETE CASCADE
- ON UPDATE CASCADE
- ) STRICT;
- "];
- }
+ fn connection_initialize_query_retries_transient_schema_lock() {
+ let name = "connection_initialize_query_retries_transient_schema_lock";
+ let locking_connection = crate::connection::Connection::open_memory(Some(name));
+ locking_connection.exec("BEGIN IMMEDIATE").unwrap()().unwrap();
+ locking_connection
+ .exec("CREATE TABLE test(col TEXT)")
+ .unwrap()()
+ .unwrap();
- let builder =
- ThreadSafeConnection::builder::<TestWorkspace>("wild_zed_lost_failure", false)
- .with_connection_initialize_query("PRAGMA FOREIGN_KEYS=true");
+ let releaser = thread::spawn(move || {
+ thread::sleep(Duration::from_millis(10));
+ locking_connection.exec("ROLLBACK").unwrap()().unwrap();
+ });
- smol::block_on(builder.build()).unwrap();
+ ThreadSafeConnection::create_connection(false, name, Some("PRAGMA FOREIGN_KEYS=true"));
+ releaser.join().unwrap();
}
}
@@ -0,0 +1,328 @@
From: Danny Milosavljevic <dannym@friendly-machines.com>
Date: Fri, 6 Mar 2026 21:22:41 +0000
Subject: [PATCH] db: Scope default test databases to the current test
License: expat
In test builds, the default database statics use fixed names such as
`DB` and `KEY_VALUE_STORE`. That makes unrelated tests in the same test
binary share the same named in-memory databases, which leaks state
across tests and makes failures depend on execution order and
concurrency.
A first attempt at isolating those statics by thread is not sufficient:
one test can legitimately use multiple threads, and splitting the test's
workspace state across separate databases breaks parent-child foreign key
relationships.
Fix this by scoping the default test databases by the current test name
instead. The `gpui::test` harness now installs the current test name on
the executing thread, the test dispatcher propagates that scope to its
realtime worker threads, and the default test statics resolve one shared
database wrapper per test scope rather than per thread.
That keeps sharing within a single test where it is intentional, while
stopping hidden cross-test state leakage.
diff --git a/crates/db/src/db.rs b/crates/db/src/db.rs
index 36f0365af9..3ff8499c1d 100644
--- a/crates/db/src/db.rs
+++ b/crates/db/src/db.rs
@@ -19,6 +19,12 @@ use std::future::Future;
use std::path::Path;
use std::sync::atomic::AtomicBool;
use std::sync::{LazyLock, atomic::Ordering};
+#[cfg(any(test, feature = "test-support"))]
+use std::collections::HashMap;
+#[cfg(any(test, feature = "test-support"))]
+use std::sync::Mutex;
+#[cfg(any(test, feature = "test-support"))]
+use std::{borrow::Cow, ops::Deref};
use util::{ResultExt, maybe};
use zed_env_vars::ZED_STATELESS;
@@ -97,7 +103,8 @@ async fn open_fallback_db<M: Migrator>() -> ThreadSafeConnection {
pub async fn open_test_db<M: Migrator>(db_name: &str) -> ThreadSafeConnection {
use sqlez::thread_safe_connection::locking_queue;
- ThreadSafeConnection::builder::<M>(db_name, false)
+ let db_name = scoped_test_db_name(db_name);
+ ThreadSafeConnection::builder::<M>(&db_name, false)
.with_db_initialization_query(DB_INITIALIZE_QUERY)
.with_connection_initialize_query(CONNECTION_INITIALIZE_QUERY)
// Serialize queued writes via a mutex and run them synchronously
@@ -107,6 +114,69 @@ pub async fn open_test_db<M: Migrator>(db_name: &str) -> ThreadSafeConnection {
.unwrap()
}
+#[cfg(any(test, feature = "test-support"))]
+fn scoped_test_db_name(db_name: &str) -> Cow<'_, str> {
+ let Some(test_name) = current_test_scope_name() else {
+ return Cow::Borrowed(db_name);
+ };
+
+ let mut scoped_name = String::with_capacity(db_name.len() + test_name.len() + 2);
+ scoped_name.push_str(db_name);
+ scoped_name.push('@');
+ for ch in test_name.chars() {
+ if ch.is_ascii_alphanumeric() || matches!(ch, '-' | '_' | '.') {
+ scoped_name.push(ch);
+ } else {
+ scoped_name.push('_');
+ }
+ }
+
+ Cow::Owned(scoped_name)
+}
+
+#[cfg(any(test, feature = "test-support"))]
+fn current_test_scope_name() -> Option<String> {
+ if let Some(test_name) = gpui::current_test_name() {
+ return Some(test_name.to_string());
+ }
+
+ let current_thread = std::thread::current();
+ if let Some(test_name) = current_thread.name() {
+ return Some(test_name.to_string());
+ }
+
+ Some(format!("thread_{:?}", current_thread.id()))
+}
+
+#[cfg(any(test, feature = "test-support"))]
+pub struct TestScopedStatic<T: Send + Sync + 'static> {
+ initializer: fn() -> T,
+ values: Mutex<HashMap<String, &'static T>>,
+}
+
+#[cfg(any(test, feature = "test-support"))]
+impl<T: Send + Sync + 'static> TestScopedStatic<T> {
+ pub fn new(initializer: fn() -> T) -> Self {
+ Self {
+ initializer,
+ values: Mutex::new(HashMap::new()),
+ }
+ }
+}
+
+#[cfg(any(test, feature = "test-support"))]
+impl<T: Send + Sync + 'static> Deref for TestScopedStatic<T> {
+ type Target = T;
+
+ fn deref(&self) -> &Self::Target {
+ let scope_name = current_test_scope_name().unwrap_or_else(|| "default".to_string());
+ let mut values = self.values.lock().unwrap();
+ *values
+ .entry(scope_name)
+ .or_insert_with(|| Box::leak(Box::new((self.initializer)())))
+ }
+}
+
/// Implements a basic DB wrapper for a given domain
///
/// Arguments:
@@ -126,16 +196,23 @@ macro_rules! static_connection {
impl $t {
#[cfg(any(test, feature = "test-support"))]
- pub async fn open_test_db(name: &'static str) -> Self {
+ pub async fn open_test_db(name: &str) -> Self {
$t($crate::open_test_db::<$t>(name).await)
}
}
#[cfg(any(test, feature = "test-support"))]
- pub static $id: std::sync::LazyLock<$t> = std::sync::LazyLock::new(|| {
- #[allow(unused_parens)]
- $t($crate::smol::block_on($crate::open_test_db::<($($d,)* $t)>(stringify!($id))))
- });
+ pub static $id: std::sync::LazyLock<$crate::TestScopedStatic<$t>> =
+ std::sync::LazyLock::new(|| {
+ fn initializer() -> $t {
+ #[allow(unused_parens)]
+ $t($crate::smol::block_on(
+ $crate::open_test_db::<($($d,)* $t)>(stringify!($id))
+ ))
+ }
+
+ $crate::TestScopedStatic::new(initializer)
+ });
#[cfg(not(any(test, feature = "test-support")))]
pub static $id: std::sync::LazyLock<$t> = std::sync::LazyLock::new(|| {
@@ -161,9 +238,10 @@ where
#[cfg(test)]
mod tests {
+ use anyhow::Result;
use std::thread;
- use sqlez::domain::Domain;
+ use sqlez::{domain::Domain, thread_safe_connection::ThreadSafeConnection};
use sqlez_macros::sql;
use crate::open_db;
@@ -295,4 +373,64 @@ mod tests {
assert!(guard.join().is_ok());
}
}
+
+ pub struct ScopedStaticDb(ThreadSafeConnection);
+
+ impl Domain for ScopedStaticDb {
+ const NAME: &str = "test_scoped_static_db";
+ const MIGRATIONS: &[&str] = &[sql!(
+ CREATE TABLE IF NOT EXISTS scoped_values(
+ value INTEGER NOT NULL
+ ) STRICT;
+ )];
+ }
+
+ crate::static_connection!(SCOPED_STATIC_DB, ScopedStaticDb, []);
+
+ impl ScopedStaticDb {
+ fn replace_value(&self, value: i64) -> Result<()> {
+ smol::block_on(self.write(move |connection| {
+ connection.exec("DELETE FROM scoped_values")?()?;
+ connection
+ .exec_bound("INSERT INTO scoped_values(value) VALUES (?)")
+ ?(value)?;
+ anyhow::Ok(())
+ }))
+ }
+
+ fn read_value(&self) -> Result<Option<i64>> {
+ self.select_row::<i64>("SELECT value FROM scoped_values").unwrap()()
+ }
+ }
+
+ #[test]
+ fn static_test_connections_are_scoped_by_test_name() {
+ gpui::with_test_name(Some("static_test_connections_are_scoped_by_test_name_a"), || {
+ assert_eq!(SCOPED_STATIC_DB.read_value().unwrap(), None);
+ SCOPED_STATIC_DB.replace_value(7).unwrap();
+ assert_eq!(SCOPED_STATIC_DB.read_value().unwrap(), Some(7));
+ });
+
+ gpui::with_test_name(Some("static_test_connections_are_scoped_by_test_name_b"), || {
+ assert_eq!(SCOPED_STATIC_DB.read_value().unwrap(), None);
+ SCOPED_STATIC_DB.replace_value(11).unwrap();
+ assert_eq!(SCOPED_STATIC_DB.read_value().unwrap(), Some(11));
+ });
+ }
+
+ #[test]
+ fn static_test_connections_share_state_across_threads_with_same_test_name() {
+ gpui::with_test_name(
+ Some("static_test_connections_share_state_across_threads_with_same_test_name"),
+ || {
+ SCOPED_STATIC_DB.replace_value(13).unwrap();
+
+ let test_name = gpui::current_test_name();
+ let thread = std::thread::spawn(move || {
+ gpui::with_test_name(test_name, || SCOPED_STATIC_DB.read_value().unwrap())
+ });
+ assert_eq!(thread.join().unwrap(), Some(13));
+ },
+ );
+ }
}
diff --git a/crates/gpui/src/platform/test/dispatcher.rs b/crates/gpui/src/platform/test/dispatcher.rs
index fc3f7f253a..0d98b082ca 100644
--- a/crates/gpui/src/platform/test/dispatcher.rs
+++ b/crates/gpui/src/platform/test/dispatcher.rs
@@ -136,8 +136,9 @@ impl PlatformDispatcher for TestDispatcher {
}
fn spawn_realtime(&self, f: Box<dyn FnOnce() + Send>) {
+ let test_name = crate::current_test_name();
std::thread::spawn(move || {
- f();
+ crate::with_test_name(test_name, f);
});
}
}
diff --git a/crates/gpui/src/test.rs b/crates/gpui/src/test.rs
index 9f8fd8b198..469affdc1c 100644
--- a/crates/gpui/src/test.rs
+++ b/crates/gpui/src/test.rs
@@ -29,11 +29,44 @@ use crate::{Entity, Subscription, TestAppContext, TestDispatcher};
use futures::StreamExt as _;
use smol::channel;
use std::{
+ cell::Cell,
env,
panic::{self, RefUnwindSafe},
pin::Pin,
};
+thread_local! {
+ static CURRENT_TEST_NAME: Cell<Option<&'static str>> = const { Cell::new(None) };
+}
+
+/// Returns the test name currently associated with this thread, if any.
+pub fn current_test_name() -> Option<&'static str> {
+ CURRENT_TEST_NAME.with(Cell::get)
+}
+
+/// Runs the closure with the given test name installed for the current thread.
+pub fn with_test_name<R>(name: Option<&'static str>, f: impl FnOnce() -> R) -> R {
+ CURRENT_TEST_NAME.with(|current_name| {
+ struct RestoreTestName<'a> {
+ current_name: &'a Cell<Option<&'static str>>,
+ previous_name: Option<&'static str>,
+ }
+
+ impl Drop for RestoreTestName<'_> {
+ fn drop(&mut self) {
+ self.current_name.set(self.previous_name);
+ }
+ }
+
+ let previous_name = current_name.replace(name);
+ let _restore = RestoreTestName {
+ current_name,
+ previous_name,
+ };
+ f()
+ })
+}
+
/// Run the given test function with the configured parameters.
/// This is intended for use with the `gpui::test` macro
/// and generally should not be used directly.
diff --git a/crates/gpui_macros/src/test.rs b/crates/gpui_macros/src/test.rs
index 490ea07fee..3abcaad3ae 100644
--- a/crates/gpui_macros/src/test.rs
+++ b/crates/gpui_macros/src/test.rs
@@ -191,10 +191,12 @@ fn generate_test_function(
&[#seeds],
#max_retries,
&mut |dispatcher, _seed| {
- let foreground_executor = gpui::ForegroundExecutor::new(std::sync::Arc::new(dispatcher.clone()));
- #cx_vars
- foreground_executor.block_test(#inner_fn_name(#inner_fn_args));
- #cx_teardowns
+ gpui::with_test_name(Some(stringify!(#outer_fn_name)), || {
+ let foreground_executor = gpui::ForegroundExecutor::new(std::sync::Arc::new(dispatcher.clone()));
+ #cx_vars
+ foreground_executor.block_test(#inner_fn_name(#inner_fn_args));
+ #cx_teardowns
+ })
},
#on_failure_fn_name
);
@@ -274,9 +276,11 @@ fn generate_test_function(
&[#seeds],
#max_retries,
&mut |dispatcher, _seed| {
- #cx_vars
- #inner_fn_name(#inner_fn_args);
- #cx_teardowns
+ gpui::with_test_name(Some(stringify!(#outer_fn_name)), || {
+ #cx_vars
+ #inner_fn_name(#inner_fn_args);
+ #cx_teardowns
+ })
},
#on_failure_fn_name,
);
@@ -0,0 +1,310 @@
Author: Danny Milosavljevic <dannym@friendly-machines.com>
Subject: Fix workspace persistence races during restoration.
Date: 2026-03-01
License: expat
In 0.225.10, workspace persistence has three separate ordering problems.
First, newly allocated workspace IDs could be used for item persistence before a
parent row had been inserted into the workspaces table. That made editor
persistence race with workspace creation and could fail with a foreign key
constraint error.
Second, workspace layout persistence and per-item persistence run on separate
asynchronous paths. That allowed the workspace layout to be saved with item IDs
before the background item-serialization worker had finished writing the
corresponding per-item rows. On restore, deserializers that require persisted
item state could then fail with "No entry in database for item_id ...", which
could drop restored state and break restoration features that depend on that
persisted item state, including edited-window restoration.
Third, restore-side cleanup assumed that deserialized items had already been
saved under their new runtime item IDs after being added to panes. In reality,
adding a deserialized item only enqueues that serialization work. Cleanup could
therefore delete the old persisted rows before the new rows existed, leaving the
next reopen with a pane/item layout that still referenced state that had just
been deleted.
This change fixes all three issues:
- eagerly create the parent workspaces row as soon as a new workspace ID is
allocated, before any item serializer can write child rows
- keep item persistence on the existing serialization queue, but add an
ordering barrier before saving workspace layout so the layout is never
published ahead of the item state it references
- during restore, wait for the queued serialization of newly added
deserialized items before cleaning up stale persisted item IDs, and skip
that cleanup pass if the barrier cannot be established or awaited so stale
rows are kept rather than deleting still-needed state
See also <https://github.com/zed-industries/zed/pull/50873>.
diff --git a/crates/workspace/src/persistence.rs b/crates/workspace/src/persistence.rs
index e0ad046e8d..aeb4c3ba39 100644
--- a/crates/workspace/src/persistence.rs
+++ b/crates/workspace/src/persistence.rs
@@ -2124,6 +2124,13 @@ impl WorkspaceDb {
}
}
+ query! {
+ pub(crate) async fn ensure_workspace_row(workspace_id: WorkspaceId) -> Result<()> {
+ INSERT OR IGNORE INTO workspaces(workspace_id)
+ VALUES (?1)
+ }
+ }
+
query! {
pub(crate) async fn set_window_open_status(workspace_id: WorkspaceId, bounds: SerializedWindowBounds, display: Uuid) -> Result<()> {
UPDATE workspaces
diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs
index 4141952cc7..3ea631ed6f 100644
--- a/crates/workspace/src/workspace.rs
+++ b/crates/workspace/src/workspace.rs
@@ -1175,6 +1175,11 @@ enum WorkspaceLocation {
None,
}
+enum SerializableItemMessage {
+ Item(Box<dyn SerializableItemHandle>),
+ Barrier(oneshot::Sender<()>),
+}
+
type PromptForNewPath = Box<
dyn Fn(
&mut Workspace,
@@ -1253,7 +1258,7 @@ pub struct Workspace {
on_prompt_for_open_path: Option<PromptForOpenPath>,
terminal_provider: Option<Box<dyn TerminalProvider>>,
debugger_provider: Option<Arc<dyn DebuggerProvider>>,
- serializable_items_tx: UnboundedSender<Box<dyn SerializableItemHandle>>,
+ serializable_items_tx: UnboundedSender<SerializableItemMessage>,
_items_serializer: Task<Result<()>>,
session_id: Option<String>,
scheduled_tasks: Vec<Task<()>>,
@@ -1554,7 +1559,7 @@ impl Workspace {
}
let (serializable_items_tx, serializable_items_rx) =
- mpsc::unbounded::<Box<dyn SerializableItemHandle>>();
+ mpsc::unbounded::<SerializableItemMessage>();
let _items_serializer = cx.spawn_in(window, async move |this, cx| {
Self::serialize_items(&this, serializable_items_rx, cx).await
});
@@ -1759,6 +1764,7 @@ impl Workspace {
} else {
DB.next_id().await.unwrap_or_else(|_| Default::default())
};
+ DB.ensure_workspace_row(workspace_id).await?;
let toolchains = DB.toolchains(workspace_id).await?;
@@ -6036,8 +6042,16 @@ impl Workspace {
window_id: Some(window.window_handle().window_id().as_u64()),
user_toolchains,
};
+ let item_serialization_barrier = self.item_serialization_barrier();
window.spawn(cx, async move |_| {
+ let Some(item_serialization_barrier) = item_serialization_barrier.log_err()
+ else {
+ return;
+ };
+ if item_serialization_barrier.await.log_err().is_none() {
+ return;
+ }
persistence::DB.save_workspace(serialized_workspace).await;
})
}
@@ -6108,31 +6122,49 @@ impl Workspace {
async fn serialize_items(
this: &WeakEntity<Self>,
- items_rx: UnboundedReceiver<Box<dyn SerializableItemHandle>>,
+ mut items_rx: UnboundedReceiver<SerializableItemMessage>,
cx: &mut AsyncWindowContext,
) -> Result<()> {
const CHUNK_SIZE: usize = 200;
- let mut serializable_items = items_rx.ready_chunks(CHUNK_SIZE);
+ while let Some(message) = items_rx.next().await {
+ let mut unique_items = HashMap::default();
+ let mut barrier = None;
+ let mut channel_closed = false;
- while let Some(items_received) = serializable_items.next().await {
- let unique_items =
- items_received
- .into_iter()
- .fold(HashMap::default(), |mut acc, item| {
- acc.entry(item.item_id()).or_insert(item);
- acc
- });
+ Self::push_serializable_item_message(message, &mut unique_items, &mut barrier);
- // We use into_iter() here so that the references to the items are moved into
- // the tasks and not kept alive while we're sleeping.
- for (_, item) in unique_items.into_iter() {
- if let Ok(Some(task)) = this.update_in(cx, |workspace, window, cx| {
- item.serialize(workspace, false, window, cx)
- }) {
- cx.background_spawn(async move { task.await.log_err() })
- .detach();
+ while barrier.is_none() && unique_items.len() < CHUNK_SIZE {
+ match items_rx.try_next() {
+ Ok(Some(message)) => {
+ Self::push_serializable_item_message(
+ message,
+ &mut unique_items,
+ &mut barrier,
+ );
+ }
+ Ok(None) => {
+ channel_closed = true;
+ break;
+ }
+ Err(_) => break,
+ }
+ }
+
+ let batch_succeeded = Self::serialize_item_batch(this, unique_items, cx)
+ .await
+ .log_err()
+ .is_some();
+
+ if let Some(barrier) = barrier {
+ if batch_succeeded {
+ let _ = barrier.send(());
}
+ continue;
+ }
+
+ if channel_closed {
+ break;
}
cx.background_executor()
@@ -6143,12 +6175,54 @@ impl Workspace {
Ok(())
}
+ fn push_serializable_item_message(
+ message: SerializableItemMessage,
+ unique_items: &mut HashMap<EntityId, Box<dyn SerializableItemHandle>>,
+ barrier: &mut Option<oneshot::Sender<()>>,
+ ) {
+ match message {
+ SerializableItemMessage::Item(item) => {
+ unique_items.entry(item.item_id()).or_insert(item);
+ }
+ SerializableItemMessage::Barrier(sender) => {
+ *barrier = Some(sender);
+ }
+ }
+ }
+
+ async fn serialize_item_batch(
+ this: &WeakEntity<Self>,
+ unique_items: HashMap<EntityId, Box<dyn SerializableItemHandle>>,
+ cx: &mut AsyncWindowContext,
+ ) -> Result<()> {
+ let serialize_tasks = match this.update_in(cx, move |workspace, window, cx| {
+ unique_items
+ .into_values()
+ .filter_map(|item| item.serialize(workspace, false, window, cx))
+ .collect::<Vec<_>>()
+ }) {
+ Ok(serialize_tasks) => serialize_tasks,
+ Err(_) => return Ok(()),
+ };
+
+ try_join_all(serialize_tasks).await?;
+ Ok(())
+ }
+
+ fn item_serialization_barrier(&self) -> Result<oneshot::Receiver<()>> {
+ let (sender, receiver) = oneshot::channel();
+ self.serializable_items_tx
+ .unbounded_send(SerializableItemMessage::Barrier(sender))
+ .map_err(|err| anyhow!("failed to send item serialization barrier: {err}"))?;
+ Ok(receiver)
+ }
+
pub(crate) fn enqueue_item_serialization(
&mut self,
item: Box<dyn SerializableItemHandle>,
) -> Result<()> {
self.serializable_items_tx
- .unbounded_send(item)
+ .unbounded_send(SerializableItemMessage::Item(item))
.map_err(|err| anyhow!("failed to send serializable item over channel: {err}"))
}
@@ -6252,24 +6326,42 @@ impl Workspace {
// after loading the items, we might have different items and in order to avoid
// the database filling up, we delete items that haven't been loaded now.
//
- // The items that have been loaded, have been saved after they've been added to the workspace.
- let clean_up_tasks = workspace.update_in(cx, |_, window, cx| {
- item_ids_by_kind
- .into_iter()
- .map(|(item_kind, loaded_items)| {
- SerializableItemRegistry::cleanup(
- item_kind,
- serialized_workspace.id,
- loaded_items,
- window,
- cx,
- )
- .log_err()
- })
- .collect::<Vec<_>>()
- })?;
+ // Newly deserialized items only enqueue serialization when they are added to their panes.
+ // Wait for that queued work to finish before deleting the old persisted item ids.
+ let item_serialization_barrier = workspace
+ .update_in(cx, |workspace, _, _| {
+ workspace.item_serialization_barrier().log_err()
+ })
+ .log_err()
+ .flatten();
+
+ let item_serialization_flushed = if let Some(item_serialization_barrier) =
+ item_serialization_barrier
+ {
+ item_serialization_barrier.await.log_err().is_some()
+ } else {
+ false
+ };
- futures::future::join_all(clean_up_tasks).await;
+ if item_serialization_flushed {
+ let clean_up_tasks = workspace.update_in(cx, |_, window, cx| {
+ item_ids_by_kind
+ .into_iter()
+ .map(|(item_kind, loaded_items)| {
+ SerializableItemRegistry::cleanup(
+ item_kind,
+ serialized_workspace.id,
+ loaded_items,
+ window,
+ cx,
+ )
+ .log_err()
+ })
+ .collect::<Vec<_>>()
+ })?;
+
+ futures::future::join_all(clean_up_tasks).await;
+ }
workspace
.update_in(cx, |workspace, window, cx| {
@@ -9001,6 +9093,7 @@ fn deserialize_remote_project(
} else {
persistence::DB.next_id().await?
};
+ persistence::DB.ensure_workspace_row(workspace_id).await?;
Ok((workspace_id, serialized_workspace))
})
@@ -0,0 +1,163 @@
From: Danny Milosavljevic <dannym@friendly-machines.com>
Date: Fri, 6 Mar 2026 20:20:00 +0000
Subject: [PATCH] workspace: Keep local workspaces whose roots are only regular files
License: expat
Zed persists local workspaces for standalone regular files as well as
directory-backed projects. Recent-workspace cleanup and last-session
restoration were using a helper that only kept local workspaces if all
saved paths existed and at least one of them was a directory.
That made local workspaces whose roots were only regular files look
invalid. A background recent-workspaces pass could then delete the
workspace row, which in turn cascaded to item-specific state such as
editors. In the window edited-state restore test, reopening a
standalone regular file could therefore fail because the saved editor
row had been deleted by that cleanup path.
Fix this by treating a local workspace as valid whenever all of its
saved paths still exist, whether those paths are directories or
regular files. Apply the same rule to last-session workspace
restoration, and add regression coverage for both code paths.
diff --git a/crates/workspace/src/persistence.rs b/crates/workspace/src/persistence.rs
--- a/crates/workspace/src/persistence.rs
+++ b/crates/workspace/src/persistence.rs
@@ -1783,19 +1783,13 @@ impl WorkspaceDb {
}
}
- async fn all_paths_exist_with_a_directory(paths: &[PathBuf], fs: &dyn Fs) -> bool {
- let mut any_dir = false;
+ async fn all_paths_exist(paths: &[PathBuf], fs: &dyn Fs) -> bool {
for path in paths {
- match fs.metadata(path).await.ok().flatten() {
- None => return false,
- Some(meta) => {
- if meta.is_dir {
- any_dir = true;
- }
- }
+ if fs.metadata(path).await.ok().flatten().is_none() {
+ return false;
}
}
- any_dir
+ true
}
// Returns the recent locations which are still valid on disk and deletes ones which no longer
@@ -1843,7 +1837,11 @@ impl WorkspaceDb {
// If a local workspace points to WSL, this check will cause us to wait for the
// WSL VM and file server to boot up. This can block for many seconds.
// Supported scenarios use remote workspaces.
- if !has_wsl_path && Self::all_paths_exist_with_a_directory(paths.paths(), fs).await {
+ //
+ // Local workspaces may legitimately contain only regular files (for example, a
+ // standalone file opened outside any worktree). Those should be preserved as
+ // long as all of their saved paths still exist.
+ if !has_wsl_path && Self::all_paths_exist(paths.paths(), fs).await {
result.push((id, SerializedWorkspaceLocation::Local, paths, timestamp));
} else {
delete_tasks.push(self.delete_workspace_by_id(id));
@@ -1903,7 +1901,7 @@ impl WorkspaceDb {
window_id,
});
} else {
- if Self::all_paths_exist_with_a_directory(paths.paths(), fs).await {
+ if Self::all_paths_exist(paths.paths(), fs).await {
workspaces.push(SessionWorkspace {
workspace_id,
location: SerializedWorkspaceLocation::Local,
@@ -3425,6 +3423,91 @@ mod tests {
);
}
+ #[gpui::test]
+ async fn test_recent_workspaces_on_disk_keeps_regular_file_only_workspace(
+ cx: &mut gpui::TestAppContext,
+ ) {
+ let dir = tempfile::TempDir::with_prefix("regular-file-workspace").unwrap();
+ let regular_file = dir.path().join("a");
+
+ let fs = fs::FakeFs::new(cx.executor());
+ fs.insert_tree(dir.path(), json!({"a": "hey"})).await;
+
+ let db = WorkspaceDb::open_test_db("test_recent_workspaces_keeps_regular_file_only")
+ .await;
+ let workspace = SerializedWorkspace {
+ id: WorkspaceId(1),
+ paths: PathList::new(&[regular_file.clone()]),
+ location: SerializedWorkspaceLocation::Local,
+ center_group: Default::default(),
+ window_bounds: Default::default(),
+ display: Default::default(),
+ docks: Default::default(),
+ centered_layout: false,
+ breakpoints: Default::default(),
+ session_id: None,
+ window_id: Some(1),
+ user_toolchains: Default::default(),
+ };
+
+ db.save_workspace(workspace.clone()).await;
+
+ let recent = db.recent_workspaces_on_disk(fs.as_ref()).await.unwrap();
+ assert_eq!(
+ recent,
+ vec![(
+ workspace.id,
+ SerializedWorkspaceLocation::Local,
+ workspace.paths.clone(),
+ recent[0].3,
+ )]
+ );
+ assert_eq!(db.workspace_for_roots(&[regular_file]).unwrap().id, workspace.id);
+ }
+
+ #[gpui::test]
+ async fn test_last_session_workspace_locations_keeps_regular_file_only_workspace(
+ cx: &mut gpui::TestAppContext,
+ ) {
+ let dir = tempfile::TempDir::with_prefix("regular-file-workspace-session").unwrap();
+ let regular_file = dir.path().join("a");
+
+ let fs = fs::FakeFs::new(cx.executor());
+ fs.insert_tree(dir.path(), json!({"a": "hey"})).await;
+
+ let db = WorkspaceDb::open_test_db("test_last_session_keeps_regular_file_only").await;
+ let workspace = SerializedWorkspace {
+ id: WorkspaceId(1),
+ paths: PathList::new(&[regular_file.clone()]),
+ location: SerializedWorkspaceLocation::Local,
+ center_group: Default::default(),
+ window_bounds: Default::default(),
+ display: Default::default(),
+ docks: Default::default(),
+ centered_layout: false,
+ breakpoints: Default::default(),
+ session_id: Some("one-session".to_owned()),
+ window_id: Some(7),
+ user_toolchains: Default::default(),
+ };
+
+ db.save_workspace(workspace.clone()).await;
+
+ let locations = db
+ .last_session_workspace_locations("one-session", None, fs.as_ref())
+ .await
+ .unwrap();
+ assert_eq!(
+ locations,
+ vec![SessionWorkspace {
+ workspace_id: workspace.id,
+ location: SerializedWorkspaceLocation::Local,
+ paths: workspace.paths,
+ window_id: Some(WindowId::from(7u64)),
+ }]
+ );
+ }
+
#[gpui::test]
async fn test_get_or_create_ssh_project() {
let db = WorkspaceDb::open_test_db("test_get_or_create_ssh_project").await;
@@ -0,0 +1,24 @@
Author: Danny Milosavljevic <dannym@friendly-machines.com>
Subject: Remove the [patch.crates-io] section from Cargo.toml.
Date: 2026-03-01
License: expat
These overrides redirect crates-io dependencies to git sources, which cannot be
fetched in an offline build. With vendored sources the overrides are unnecessary.
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -804,13 +804,6 @@
"Win32_Media",
]
-[patch.crates-io]
-async-task = { git = "https://github.com/smol-rs/async-task.git", rev = "b4486cd71e4e94fbda54ce6302444de14f4d190e" }
-notify = { git = "https://github.com/zed-industries/notify.git", rev = "ce58c24cad542c28e04ced02e20325a4ec28a31d" }
-notify-types = { git = "https://github.com/zed-industries/notify.git", rev = "ce58c24cad542c28e04ced02e20325a4ec28a31d" }
-windows-capture = { git = "https://github.com/zed-industries/windows-capture.git", rev = "f0d6c1b6691db75461b732f6d5ff56eed002eeb9" }
-calloop = { git = "https://github.com/zed-industries/calloop" }
-
[profile.dev]
split-debuginfo = "unpacked"
incremental = true
@@ -0,0 +1,75 @@
Author: Danny Milosavljevic <dannym@friendly-machines.com>
Subject: Use mock livekit client on Linux to avoid libwebrtc dependency.
Date: 2026-03-01
License: GPL3+
libwebrtc is not packaged in Guix and is difficult to build from source.
Zed already has a mock_client fallback for FreeBSD and Windows-GNU which
lack libwebrtc. Add target_os = "linux" to those cfg conditions so Linux
also uses mock_client, and exclude the libwebrtc/livekit dependencies from
Cargo.toml on Linux. This disables voice/video calls but allows the rest
of Zed to build.
--- a/crates/livekit_client/Cargo.toml 2026-03-01 21:21:38.647599342 +0000
+++ b/crates/livekit_client/Cargo.toml 2026-03-01 21:22:19.846482866 +0000
@@ -44,7 +44,7 @@
ui.workspace = true
util.workspace = true
-[target.'cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd")))'.dependencies]
+[target.'cfg(not(any(all(target_os = "windows", target_env = "gnu"), target_os = "freebsd", target_os = "linux")))'.dependencies]
libwebrtc = { rev = "5f04705ac3f356350ae31534ffbc476abc9ea83d", git = "https://github.com/zed-industries/livekit-rust-sdks" }
livekit = { rev = "5f04705ac3f356350ae31534ffbc476abc9ea83d", git = "https://github.com/zed-industries/livekit-rust-sdks", features = ["__rustls-tls"] }
--- a/crates/livekit_client/src/lib.rs 2026-03-01 21:21:44.752291052 +0000
+++ b/crates/livekit_client/src/lib.rs 2026-03-01 21:22:37.234363786 +0000
@@ -15,7 +15,8 @@
test,
feature = "test-support",
all(target_os = "windows", target_env = "gnu"),
- target_os = "freebsd"
+ target_os = "freebsd",
+ target_os = "linux"
))
))]
mod livekit_client;
@@ -25,7 +26,8 @@
test,
feature = "test-support",
all(target_os = "windows", target_env = "gnu"),
- target_os = "freebsd"
+ target_os = "freebsd",
+ target_os = "linux"
))
))]
pub use livekit_client::*;
@@ -36,7 +38,8 @@
test,
feature = "test-support",
all(target_os = "windows", target_env = "gnu"),
- target_os = "freebsd"
+ target_os = "freebsd",
+ target_os = "linux"
)
))]
mod mock_client;
@@ -46,7 +49,8 @@
test,
feature = "test-support",
all(target_os = "windows", target_env = "gnu"),
- target_os = "freebsd"
+ target_os = "freebsd",
+ target_os = "linux"
)
))]
pub mod test;
@@ -56,7 +60,8 @@
test,
feature = "test-support",
all(target_os = "windows", target_env = "gnu"),
- target_os = "freebsd"
+ target_os = "freebsd",
+ target_os = "linux"
)
))]
pub use mock_client::*;
+5 -3
View File
@@ -4,7 +4,7 @@
;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
;;; Copyright © 2021, 2024 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2024-2025 jgart <jgart@dismail.de>
;;; Copyright © 2024-2026 jgart <jgart@dismail.de>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -39,6 +39,7 @@
#:use-module (gnu packages fontutils)
#:use-module (gnu packages game-development)
#:use-module (gnu packages image)
#:use-module (gnu packages libedit)
#:use-module (gnu packages libffi)
#:use-module (gnu packages libunwind)
#:use-module (gnu packages maths)
@@ -236,7 +237,7 @@ it.")
(define-public trealla
(package
(name "trealla")
(version "2.92.29")
(version "2.92.30")
(source
(origin
(method git-fetch)
@@ -245,12 +246,13 @@ it.")
(url "https://github.com/trealla-prolog/trealla")
(commit (string-append "v" version))))
(sha256
(base32 "1032pza07dzyrsjrbh355h3cyrkwsg2vbzwwaaxcvfirjhn8zdam"))
(base32 "1vbjv2nf3c2npf349i9y0zknc2g0hizksv0yhgscdpwzvzfp6n9m"))
(file-name (git-file-name name version))))
(build-system gnu-build-system)
(inputs
(list curl
gsl
libedit
libffi
openssl
raylib
+3 -18
View File
@@ -108,24 +108,9 @@ data in motion, or as a file format for data at rest.")
(uri (git-reference
(url "https://github.com/protocolbuffers/protobuf/")
(commit (string-append "v" version))))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(snippet
#~(begin
;; XXX: 'delete-all-but' is copied from the turbovnc package.
(define (delete-all-but directory . preserve)
(define (directory? x)
(and=> (stat x #f)
(compose (cut eq? 'directory <>) stat:type)))
(with-directory-excursion directory
(let* ((pred
(negate (cut member <> (append '("." "..") preserve))))
(items (scandir "." pred)))
(for-each delete-file-recursively items))))
;; "utf8_range" development now takes place in main protobuf
;; repository.
(delete-all-but "third_party" "utf8_range")))
(modules '((guix build utils)))
;; "utf8_range" development now takes place in main protobuf repository.
(snippet #~(delete-all-but "third_party" "utf8_range"))
(file-name (git-file-name name version))
(sha256
(base32 "1rdxm75bqwjj4qd3hz4vlydra6bw5dq391kwln2q0pjfx9gbrjhk"))))
-20
View File
@@ -21675,26 +21675,6 @@ programming errors.")
into aligned columns.")
(license license:expat)))
(define-public python-chai
(package
(name "python-chai")
(version "1.1.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "chai" version))
(sha256
(base32 "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz"))
(patches (search-patches "python-chai-drop-python2.patch"))))
(build-system pyproject-build-system)
(native-inputs (list python-pytest python-setuptools))
(home-page "https://github.com/agoragames/chai")
(synopsis "Mocking framework for Python")
(description
"Chai provides an api for mocking, stubbing and spying your python
objects, patterned after the Mocha library for Ruby.")
(license license:bsd-3)))
(define-public python-pysol-cards
(package
(name "python-pysol-cards")
File diff suppressed because it is too large Load Diff
+551
View File
@@ -59,6 +59,128 @@
(base32
"1yhs9lj9gnzbvimv0y5f1a4my0slbvygkcjjkaxd4wkkyfvfbkxy")))))
;; Workspace dependency of zed.
;;
;; Cargo side: Cargo unifies dependency versions across zed's
;; workspace, including this package's transitive dependencies,
;; and records them in zed's Cargo.lock.
;;
;; Guix side: zed's cargo-inputs entry (generated from zed's
;; Cargo.lock) already contains all of this package's transitive
;; dependencies, so this package reuses zed's cargo-inputs.
(define-public rust-alacritty-0.25.1.9d9640d
(hidden-package
(package
(name "rust-alacritty")
(version "0.25.1")
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://github.com/zed-industries/alacritty")
(commit "9d9640d4e56d67a09d049f9c0a300aae08d4f61e")))
(file-name
(git-file-name "rust-alacritty" "0.25.1.9d9640d"))
(sha256
(base32 "16g4jdbwdhqihc2x403fdaxf6m9gcj44cm53dyk68b3wl7chh29s"))))
(build-system cargo-build-system)
(arguments
(list #:skip-build? #t
#:install-source? #t
#:cargo-package-crates ''("alacritty_terminal")
#:cargo-package-flags ''("--no-metadata" "--no-verify"
"--exclude-lockfile")))
(inputs (cargo-inputs 'rust-alacritty-0.25.1.9d9640d))
(home-page "https://github.com/zed-industries/alacritty")
(synopsis "Terminal emulator library")
(description
"This package provides a terminal emulator library.")
(license license:asl2.0))))
;; Workspace dependency of zed.
;;
;; Cargo side: Cargo unifies dependency versions across zed's
;; workspace, including this package's transitive dependencies,
;; and records them in zed's Cargo.lock.
;;
;; Guix side: zed's cargo-inputs entry (generated from zed's
;; Cargo.lock) already contains all of this package's transitive
;; dependencies, so this package reuses zed's cargo-inputs.
(define-public rust-candle-0.9.1.724d75e
(hidden-package
(package
(name "rust-candle")
(version "0.9.1")
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://github.com/zed-industries/candle")
(commit "724d75eb3deebefe83f2a7381a45d4fac6eda383")))
(file-name
(git-file-name "rust-candle" "0.9.1.724d75e"))
(sha256
(base32 "1n9g84g0ikldw42f0j3ad975vjvx6ildwqh8dw3zi3rps518hx14"))
(patches
(search-patches
"rust-candle-0.9.1-add-candle-onnx-to-workspace.patch"))))
(build-system cargo-build-system)
(arguments
(list #:skip-build? #t
#:install-source? #t
#:cargo-package-crates ''("candle-core"
"candle-nn"
"candle-onnx")
#:cargo-package-flags ''("--no-metadata" "--no-verify"
"--exclude-lockfile")))
(inputs (cargo-inputs 'rust-candle-0.9.1.724d75e))
(home-page "https://github.com/huggingface/candle")
(synopsis "Minimalist ML framework for Rust")
(description
"This package provides a minimalist ML framework for Rust.")
(license (list license:asl2.0 license:expat)))))
;; Workspace dependency of zed.
;;
;; Cargo side: Cargo unifies dependency versions across zed's
;; workspace, including this package's transitive dependencies,
;; and records them in zed's Cargo.lock.
;;
;; Guix side: zed's cargo-inputs entry (generated from zed's
;; Cargo.lock) already contains all of this package's transitive
;; dependencies, so this package reuses zed's cargo-inputs.
(define-public rust-dap-types-0.0.1.1b461b3
(hidden-package
(package
(name "rust-dap-types")
(version "0.0.1")
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://github.com/zed-industries/dap-types")
(commit "1b461b310481d01e02b2603c16d7144b926339f8")))
(file-name
(git-file-name "rust-dap-types" "0.0.1.1b461b3"))
(sha256
(base32 "0snc05ia4jvykajavsvyxcyn24s2jxbw7k9wmby23r1aqxf31i0z"))))
(build-system cargo-build-system)
(arguments
(list #:skip-build? #t
#:install-source? #t
#:cargo-package-crates ''("dap-types")
#:cargo-package-flags ''("--no-metadata" "--no-verify"
"--exclude-lockfile")))
(inputs (cargo-inputs 'rust-dap-types-0.0.1.1b461b3))
(home-page "https://github.com/zed-industries/dap-types")
(synopsis "Rust types for the Debug Adapter Protocol")
(description
"This package provides Rust types for the Debug Adapter Protocol.")
(license (list license:asl2.0 license:expat)))))
(define-public rust-deunicode-1
(hidden-package
(package
@@ -102,6 +224,46 @@
transliterating them. It supports Emoji and Chinese.")
(license license:bsd-3))))
;; Workspace dependency of zed.
;;
;; Cargo side: Cargo unifies dependency versions across zed's
;; workspace, including this package's transitive dependencies,
;; and records them in zed's Cargo.lock.
;;
;; Guix side: zed's cargo-inputs entry (generated from zed's
;; Cargo.lock) already contains all of this package's transitive
;; dependencies, so this package reuses zed's cargo-inputs.
(define-public rust-gh-workflow-0.8.0.c9eac0e
(hidden-package
(package
(name "rust-gh-workflow")
(version "0.8.0")
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://github.com/zed-industries/gh-workflow")
(commit "c9eac0ed361583e1072860d96776fa52775b82ac")))
(file-name
(git-file-name "rust-gh-workflow" "0.8.0.c9eac0e"))
(sha256
(base32 "172bn9b16f7qj3mn0h8r8bwiiiw2awgqlzj5n6f2gjcgk5nmh1hp"))))
(build-system cargo-build-system)
(arguments
(list #:skip-build? #t
#:install-source? #t
#:cargo-package-crates ''("gh-workflow-macros"
"gh-workflow")
#:cargo-package-flags ''("--no-metadata" "--no-verify"
"--exclude-lockfile")))
(inputs (cargo-inputs 'rust-gh-workflow-0.8.0.c9eac0e))
(home-page "https://github.com/tailcallhq/gh-workflow")
(synopsis "Type-safe GitHub Actions workflow generation")
(description
"This package provides type-safe GitHub Actions workflow generation.")
(license license:expat))))
(define-public rust-hypher-0.1
(hidden-package
(package
@@ -145,6 +307,191 @@ transliterating them. It supports Emoji and Chinese.")
(description "@code{hypher} is a Rust library for syllabification.")
(license (list license:expat license:asl2.0)))))
;; Workspace dependency of zed.
;;
;; Cargo side: Cargo unifies dependency versions across zed's
;; workspace, including this package's transitive dependencies,
;; and records them in zed's Cargo.lock.
;;
;; Guix side: zed's cargo-inputs entry (generated from zed's
;; Cargo.lock) already contains all of this package's transitive
;; dependencies, so this package reuses zed's cargo-inputs.
;;
;; Only livekit-protocol, livekit-runtime, and livekit-api are
;; packaged. The libwebrtc, webrtc-sys, and livekit crates are
;; disabled on Linux by our zed-use-mock-livekit-on-linux patch
;; (which adds target_os = "linux" to the cfg gate), but their
;; Cargo.toml files must remain for workspace resolution; their
;; source is replaced with empty stubs. The snippet also deletes
;; unused workspace members (livekit-ffi, soxr-sys, yuv-sys,
;; imgproc, examples) and the 1.6 MiB generated livekit.serde.rs
;; (guarded by a nonexistent "serde" feature, so never compiled).
;;
;; TODO: Regenerate livekit-protocol/src/livekit.rs (5650 lines)
;; from the .proto source in the livekit-protocol/protocol
;; submodule (github.com/livekit/protocol) using prost-build and
;; pbjson-build as native-inputs, then delete the shipped copy.
(define-public rust-livekit-0.7.8.5f04705
(hidden-package
(package
(name "rust-livekit")
(version "0.7.8")
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://github.com/zed-industries/livekit-rust-sdks")
(commit "5f04705ac3f356350ae31534ffbc476abc9ea83d")))
(file-name
(git-file-name "rust-livekit" "0.7.8.5f04705"))
(sha256
(base32 "1irnw9dax0nl8rl7jxdxs5vw6hg166jj4gf1s5cza6igvmrkl6y9"))
(modules '((guix build utils)))
(snippet
'(begin
(for-each delete-file-recursively
'(".github" "examples" "imgproc"
"livekit-ffi" "soxr-sys" "yuv-sys"
;; Keep Cargo.toml for workspace resolution
;; but replace source with stubs.
"libwebrtc/src"
"livekit/src"
"webrtc-sys/src"
"webrtc-sys/include"
"webrtc-sys/libwebrtc"))
(for-each (lambda (f)
(mkdir-p (dirname f))
(call-with-output-file f (const #t)))
'("libwebrtc/src/lib.rs"
"livekit/src/lib.rs"
"webrtc-sys/src/lib.rs"))
(delete-file
"livekit-protocol/src/livekit.serde.rs")
(substitute* "Cargo.toml"
(("\"livekit-ffi\",") "")
(("\"soxr-sys\",") "")
(("\"yuv-sys\",") "")
(("\"imgproc\",") ""))))))
(build-system cargo-build-system)
(arguments
(list #:skip-build? #t
#:install-source? #t
#:cargo-package-crates ''("livekit-protocol"
"livekit-runtime"
"livekit-api"
"webrtc-sys-build"
"webrtc-sys"
"libwebrtc"
"livekit")
#:cargo-package-flags ''("--no-metadata" "--no-verify"
"--exclude-lockfile")
#:phases
#~(modify-phases %standard-phases
(replace 'package
(lambda* (#:key source (cargo-package-crates '())
(cargo-package-flags '("--no-metadata" "--no-verify"))
(vendor-dir "guix-vendor")
#:allow-other-keys)
(use-modules (ice-9 ftw))
;; Same as the standard package phase, but deletes
;; cargo's target/package/tmp-crate/ scratch directory
;; between the packaging loop and the repacking step.
;; Cargo copies .crate files there during packaging and
;; does not clean up. The repacking step's recursive
;; find-files picks them up, and scandir confuses the
;; tmp-crate directory with an extracted crate when
;; names sort after "tmp-crate" alphabetically.
(when (file-exists? "Cargo.toml.orig")
(delete-file "Cargo.toml.orig"))
(for-each
(lambda (pkg)
(apply invoke "cargo" "package" "--offline"
"--package" pkg cargo-package-flags)
(for-each
(lambda (crate)
(invoke "tar" "xzf" crate "-C" vendor-dir))
(find-files "target/package" "\\.crate$"))
((assoc-ref %standard-phases 'patch-cargo-checksums)
#:vendor-dir vendor-dir))
cargo-package-crates)
;; Delete cargo's scratch directory.
(when (file-exists? "target/package/tmp-crate")
(delete-file-recursively "target/package/tmp-crate"))
;; Repack crates with deterministic timestamps.
(with-directory-excursion "target/package"
(for-each
(lambda (crate)
(invoke "tar" "xf" crate)
(delete-file crate)
(let ((dir
(car (scandir
"."
(lambda (file)
(and (not (member file '("." "..")))
(not (string-suffix?
".crate" file))))))))
(for-each
(lambda (file)
(let ((s (lstat file)))
(unless (eq? (stat:type s) 'symlink)
(utime file 0 0 0 0))))
(find-files dir #:directories? #t))
(apply invoke "tar" "czf"
(string-append dir ".crate")
"--sort=name" "--mtime=@0"
"--owner=root:0" "--group=root:0"
(find-files dir #:directories? #t))
(delete-file-recursively dir)))
(find-files "." "\\.crate$"))))))))
(inputs (cargo-inputs 'rust-livekit-0.7.8.5f04705))
(home-page "https://github.com/livekit/rust-sdks")
(synopsis "LiveKit real-time communication SDK for Rust")
(description
"This package provides a LiveKit real-time communication SDK for Rust.")
(license license:asl2.0))))
;; Workspace dependency of zed.
;;
;; Cargo side: Cargo unifies dependency versions across zed's
;; workspace, including this package's transitive dependencies,
;; and records them in zed's Cargo.lock.
;;
;; Guix side: zed's cargo-inputs entry (generated from zed's
;; Cargo.lock) already contains all of this package's transitive
;; dependencies, so this package reuses zed's cargo-inputs.
(define-public rust-notify-8.2.0.ce58c24
(hidden-package
(package
(name "rust-notify")
(version "8.2.0")
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://github.com/zed-industries/notify.git")
(commit "ce58c24cad542c28e04ced02e20325a4ec28a31d")))
(file-name
(git-file-name "rust-notify" "8.2.0.ce58c24"))
(sha256
(base32 "09zn3ll1vlsblgrdacyw3zx58xzdxlab8ba7h22bbb57n76dmkl0"))))
(build-system cargo-build-system)
(arguments
(list #:skip-build? #t
#:install-source? #t
#:cargo-package-crates ''("notify-types"
"notify")
#:cargo-package-flags ''("--no-metadata" "--no-verify"
"--exclude-lockfile")))
(inputs (cargo-inputs 'rust-notify-8.2.0.ce58c24))
(home-page "https://github.com/notify-rs/notify")
(synopsis "Cross-platform filesystem notification library")
(description
"This package provides a cross-platform filesystem notification library
for Rust.")
(license (list license:asl2.0 license:expat)))))
(define-public rust-pcre2-utf32-0.2
(hidden-package
(package
@@ -227,6 +574,77 @@ UTF-32 support.")
"0zgqklzmyk893n82zq8d0is57npvy9lsfpqb83h1bbx9c42fl35p"))))
(inputs (cargo-inputs 'rust-pipewire-0.8.0.93138d0))))))
;; Workspace dependency of zed.
;;
;; Cargo side: Cargo unifies dependency versions across zed's
;; workspace, including this package's transitive dependencies,
;; and records them in zed's Cargo.lock.
;;
;; Guix side: zed's cargo-inputs entry (generated from zed's
;; Cargo.lock) already contains all of this package's transitive
;; dependencies, so this package reuses zed's cargo-inputs.
(define-public rust-pet-0.1.0.d5b5bb0
(hidden-package
(package
(name "rust-pet")
(version "0.1.0")
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://github.com/microsoft/python-environment-tools.git")
(commit "d5b5bb0c4558a51d8cc76b514bc870fd1c042f16")))
(file-name
(git-file-name "rust-pet" "0.1.0.d5b5bb0"))
(sha256
(base32 "01djr1761l7c889v9lng7igjqxiz208r2vrwij661cn2fy5xcm5f"))))
(build-system cargo-build-system)
(arguments
(list #:skip-build? #t
#:install-source? #t
#:cargo-package-crates ''("pet-fs"
"pet-core"
"pet-python-utils"
"pet-jsonrpc"
"pet-reporter"
"pet-conda"
"pet-virtualenv"
"pet-virtualenvwrapper"
"pet-env-var-path"
"pet-global-virtualenvs"
"pet-homebrew"
"pet-linux-global-python"
"pet-mac-commandlinetools"
"pet-mac-python-org"
"pet-mac-xcode"
"pet-pipenv"
"pet-pixi"
"pet-poetry"
"pet-pyenv"
"pet-telemetry"
"pet-uv"
"pet-venv"
"pet-windows-store"
"pet-windows-registry"
"pet")
#:cargo-package-flags ''("--no-metadata" "--no-verify"
"--exclude-lockfile")
#:phases
#~(modify-phases %standard-phases
(add-after 'unpack 'fix-versions
(lambda _
(let ((version #$(package-version this-package)))
(substitute* (find-files "." "^Cargo[.]toml$")
(("^(pet-[a-z-]*) = [{] path = \"([^\"]*)\" [}]" x pkg path)
(string-append pkg " = { version = \"" version "\", path = \"" path "\" }")))))))))
(inputs (cargo-inputs 'rust-pet-0.1.0.d5b5bb0))
(home-page "https://github.com/microsoft/python-environment-tools")
(synopsis "Python environment tools")
(description
"This package provides Python environment tools.")
(license license:expat))))
(define-public rust-pubgrub-0.3.0.b70cf70
(let ((commit "b70cf707aa43f21b32f3a61b8a0889b15032d5c4")
(revision "0"))
@@ -677,6 +1095,47 @@ intelligence.")
(inputs (cons oniguruma
(cargo-inputs 'rust-syntect-5.3))))))
;; Workspace dependency of zed.
;;
;; Cargo side: Cargo unifies dependency versions across zed's
;; workspace, including this package's transitive dependencies,
;; and records them in zed's Cargo.lock.
;;
;; Guix side: zed's cargo-inputs entry (generated from zed's
;; Cargo.lock) already contains all of this package's transitive
;; dependencies, so this package reuses zed's cargo-inputs.
(define-public rust-tiktoken-rs-0.9.1.2570c43
(hidden-package
(package
(name "rust-tiktoken-rs")
(version "0.9.1")
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://github.com/zed-industries/tiktoken-rs")
(commit "2570c4387a8505fb8f1d3f3557454b474f1e8271")))
(file-name
(git-file-name "rust-tiktoken-rs" "0.9.1.2570c43"))
(sha256
(base32 "0yki1whx16xqgsrnr6gjsxakj6qzyvz958g6c9h15xp154kw6573"))))
(build-system cargo-build-system)
(arguments
(list #:skip-build? #t
#:install-source? #t
#:cargo-package-crates ''("tiktoken-rs")
#:cargo-package-flags ''("--no-metadata" "--no-verify"
"--exclude-lockfile")))
(inputs (cargo-inputs 'rust-tiktoken-rs-0.9.1.2570c43))
(home-page "https://github.com/zurawiki/tiktoken-rs")
(synopsis "Rust library for OpenAI's BPE tokenizer")
(description
"This package provides Rust bindings for OpenAI's @acronym{BPE, byte
pair encoding} tokenizer, used to count and manage tokens for OpenAI
language models.")
(license license:expat))))
(define-public rust-tikv-jemallocator-for-polars
(let ((commit "c7991e5bb6b3e9f79db6b0f48dcda67c5c3d2936")
(revision "0"))
@@ -960,3 +1419,95 @@ and runtime for AI-assisted coding.")
(description "Glycin is a sandbox image decoder for image viewers and
thumbnails to display untrusted content safely.")
(license (list license:mpl2.0 license:lgpl2.1+))))
;; Workspace dependency of zed.
;;
;; Cargo side: Cargo unifies dependency versions across zed's
;; workspace, including this package's transitive dependencies,
;; and records them in zed's Cargo.lock.
;;
;; Guix side: zed's cargo-inputs entry (generated from zed's
;; Cargo.lock) already contains all of this package's transitive
;; dependencies, so this package reuses zed's cargo-inputs.
(define-public rust-zed-xim-0.4.0-zed.16f35a2
(hidden-package
(package
(name "rust-zed-xim")
(version "0.4.0-zed")
(source
(origin
(method git-fetch)
(uri
(git-reference
(url "https://github.com/zed-industries/xim-rs.git")
(commit "16f35a2c881b815a2b6cdfd6687988e84f8447d8")))
(file-name
(git-file-name "rust-zed-xim" "0.4.0-zed.16f35a2"))
(sha256
(base32 "14cyxxdgjpbkf8ny4c46cfqjinavi2cyxzwfngldlls97m5zh555"))))
(build-system cargo-build-system)
(arguments
(list #:skip-build? #t
#:install-source? #t
#:cargo-package-crates ''("xim-ctext"
"xim-parser"
"zed-xim")
#:cargo-package-flags ''("--no-metadata" "--no-verify"
"--exclude-lockfile")
#:phases
#~(modify-phases %standard-phases
(replace 'package
(lambda* (#:key source (cargo-package-crates '())
(cargo-package-flags '("--no-metadata" "--no-verify"))
(vendor-dir "guix-vendor")
#:allow-other-keys)
(use-modules (ice-9 ftw))
;; Same as the standard package phase, but deletes
;; cargo's target/package/tmp-crate/ scratch directory
;; between the packaging loop and the repacking step.
(when (file-exists? "Cargo.toml.orig")
(delete-file "Cargo.toml.orig"))
(for-each
(lambda (pkg)
(apply invoke "cargo" "package" "--offline"
"--package" pkg cargo-package-flags)
(for-each
(lambda (crate)
(invoke "tar" "xzf" crate "-C" vendor-dir))
(find-files "target/package" "\\.crate$"))
((assoc-ref %standard-phases 'patch-cargo-checksums)
#:vendor-dir vendor-dir))
cargo-package-crates)
(when (file-exists? "target/package/tmp-crate")
(delete-file-recursively "target/package/tmp-crate"))
(with-directory-excursion "target/package"
(for-each
(lambda (crate)
(invoke "tar" "xf" crate)
(delete-file crate)
(let ((dir
(car (scandir
"."
(lambda (file)
(and (not (member file '("." "..")))
(not (string-suffix?
".crate" file))))))))
(for-each
(lambda (file)
(let ((s (lstat file)))
(unless (eq? (stat:type s) 'symlink)
(utime file 0 0 0 0))))
(find-files dir #:directories? #t))
(apply invoke "tar" "czf"
(string-append dir ".crate")
"--sort=name" "--mtime=@0"
"--owner=root:0" "--group=root:0"
(find-files dir #:directories? #t))
(delete-file-recursively dir)))
(find-files "." "\\.crate$"))))))))
(inputs (cargo-inputs 'rust-zed-xim-0.4.0-zed.16f35a2))
(home-page "https://github.com/XDeme1/xim-rs")
(synopsis "X input method client and server")
(description
"This package provides a library for @code{xim}, the X input method.")
(license license:expat))))
+2 -2
View File
@@ -893,7 +893,7 @@ A @code{andglob} program is also provided along with s.")
(define-public oksh
(package
(name "oksh")
(version "7.5")
(version "7.8")
(source
(origin
(method url-fetch)
@@ -902,7 +902,7 @@ A @code{andglob} program is also provided along with s.")
version "/oksh-" version ".tar.gz"))
(sha256
(base32
"0pgdxvy8jgydsyzk7vcc93pm09bihqvrn3i35gz1ncg9z31rbf20"))))
"0l59x9mm6nbixcpz3zf3iplqili2gyw8l382rj89b0iv32hxac1v"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ; there are no tests available
+1 -9
View File
@@ -46,19 +46,11 @@
(file-name (git-file-name name version))
(sha256
(base32 "17iqvqs7w3z5c4acnjc6mixqkqz4rff2c7flfpnlwgfjgqy1a2zw"))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
;; XXX: Keep just some portion with valulable data and no license
;; issues.
#~(begin
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(delete-all-but "."
"allsky"
"coordinates"
+2 -2
View File
@@ -1465,12 +1465,12 @@ inference for statistical models.")
"|"))))))))
(native-inputs
(list bison
dvisvgm
flex
python-numpydoc
python-sphinx
;; python-sphinx-gallery ;; Currently broken
swig-4.0))
swig-4.0
texlive-dvisvgm))
(inputs
(list openblas ; the only required dependency
;; The dependencies below are all optional.
+1 -40
View File
@@ -77776,46 +77776,7 @@ documents. It makes writing LaTeX comfortable by providing features such as
syntax-highlighting, an integrated viewer and reference checking.")
(license license:gpl3)))
(define-public dvisvgm
(package
(name "dvisvgm")
(version "3.0.3")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/mgieseki/dvisvgm")
(commit version)))
(file-name (git-file-name name version))
(sha256
(base32
"11r401yqbw61n1mwsfk5qmwx2c92djwpl0q756qkds5kh25l9ci8"))))
(native-inputs (list pkg-config
autoconf
autoconf-archive
automake
python-wrapper
libtool))
(inputs (list texlive-libkpathsea
freetype
fontforge
clipper
ghostscript
xxhash
brotli
woff2
zlib))
(build-system gnu-build-system)
(synopsis "Command-line utility for generating SVG from DVI, EPS and PDF
files")
(description
"Dvisvgm converts TeX DVI, EPS and PDF files into an
SVG (Scalable Vector Graphics) image. It provides full font support including
virtual fonts, font maps and sub-fonts. The embedded SVG fonts can optionally
be replaced with graphics paths for applications that do not support SVG
fonts. Dvisvgm supports also colors, emTeX, tpic, papersize, PDF mapfile
and PostScript specials. A working TeX installation is needed.")
(home-page "https://dvisvgm.de/")
(license license:gpl3+)))
(define-deprecated-package dvisvgm texlive-dvisvgm) ;14/04/26
(define-public teximpatient
;; The homepage seems to be distributing this version which is currently the
+172
View File
@@ -121,6 +121,7 @@
#:use-module (gnu packages pcre)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages protobuf)
#:use-module (gnu packages python)
#:use-module (gnu packages python-build)
#:use-module (gnu packages python-web)
@@ -133,7 +134,10 @@
#:use-module (gnu packages sqlite)
#:use-module (gnu packages terminals)
#:use-module (gnu packages texinfo)
#:use-module (gnu packages tls)
#:use-module (gnu packages version-control)
#:use-module (gnu packages vulkan)
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages xml)
#:use-module (gnu packages xorg))
@@ -2018,3 +2022,171 @@ with full unicode support and antialiased text rendering.")
syntax highlighting, customizable color scheme (including support for 24-bit true
colours), kitty keyboard protocol, editorconfig support, amongst other features.")
(license license:gpl2)))
(define-public zed
(package
(name "zed")
(version "0.225.10")
(outputs '("out" ; editor, cli, icons, desktop file
"remote" ; zed-remote-server for remote development
"server" ; collab server daemon
"tools")) ; extension_cli
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/zed-industries/zed")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1d6zr88s4nj4fw01gw908aw2mqgjj25baj4gx7qnm6rsbxqrp500"))
(patches
(search-patches "zed-0.225.10-add-message-notification-action.patch"
"zed-0.225.10-add-guix-container-support.patch"
"zed-0.225.10-collapse-multiline-git-deps.patch"
"zed-0.225.10-disable-dlopen.patch"
"zed-0.225.10-exclude-libwebrtc-from-audio.patch"
"zed-0.225.10-fix-sqlite-memory-mode.patch"
"zed-0.225.10-fix-test-db-isolation.patch"
"zed-0.225.10-fix-workspace-race.patch"
"zed-0.225.10-keep-regular-file-workspaces.patch"
"zed-0.225.10-remove-patch-crates-io.patch"
"zed-0.225.10-use-mock-livekit-on-linux.patch"))))
(build-system cargo-build-system)
(arguments
(list #:install-source? #f
#:cargo-build-flags ''("--release" "-p" "zed")
;; Not installed:
;; auto_update_helper - Windows-only (empty main on Linux)
;; eval - internal AI agent benchmarking tool
;; edit_prediction_cli - internal edit prediction training pipeline
;; storybook - GPUI component viewer for Zed UI development
;; docs_preprocessor - mdbook preprocessor for Zed's docs website
;; zed_visual_test_runner - visual regression tests, macOS-only
#:cargo-install-paths ''("crates/zed"
"crates/cli" ; opens files in running Zed
;;; Install remote_server via its own cargo invocation
;;; to avoid feature unification with the zed build.
"crates/remote_server" ; installs as zed-remote-server
"crates/collab" ; self-hostable collaboration server
"crates/extension_cli") ; builds extensions from source
#:phases
#~(modify-phases %standard-phases
(add-after 'install 'install-extras
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(libexec (string-append out "/libexec"))
(icons512 (string-append out "/share/icons/hicolor/512x512/apps"))
(icons1024 (string-append out "/share/icons/hicolor/1024x1024/apps"))
(apps (string-append out "/share/applications"))
(remote-bin (string-append (assoc-ref outputs "remote") "/bin"))
(server-bin (string-append (assoc-ref outputs "server") "/bin"))
(tools-bin (string-append (assoc-ref outputs "tools") "/bin")))
;;; The cli binary is the user-facing launcher that finds
;;; and delegates to zed-editor via ../libexec/zed-editor.
(mkdir-p libexec)
(rename-file (string-append bin "/zed")
(string-append libexec "/zed-editor"))
(rename-file (string-append bin "/cli")
(string-append bin "/zed"))
;;; Move remote_server to "remote" output as zed-remote-server.
(mkdir-p remote-bin)
(rename-file (string-append bin "/remote_server")
(string-append remote-bin "/zed-remote-server"))
;;; Move collab to "server" output.
(mkdir-p server-bin)
(rename-file (string-append bin "/collab")
(string-append server-bin "/collab"))
(rename-file (string-append bin "/dotenv")
(string-append server-bin "/dotenv"))
;;; Move zed-extension to "tools" output.
(mkdir-p tools-bin)
(rename-file (string-append bin "/zed-extension")
(string-append tools-bin "/zed-extension"))
;;; Icons.
(mkdir-p icons512)
(mkdir-p icons1024)
(copy-file "crates/zed/resources/app-icon.png"
(string-append icons512 "/zed.png"))
(copy-file "crates/zed/resources/app-icon@2x.png"
(string-append icons1024 "/zed.png"))
;;; Desktop file.
(mkdir-p apps)
(copy-file "crates/zed/resources/zed.desktop.in"
(string-append apps "/dev.zed.Zed.desktop"))
(substitute* (string-append apps "/dev.zed.Zed.desktop")
(("\\$APP_NAME") "Zed")
(("\\$APP_CLI") "zed")
(("\\$APP_ARGS") "%U")
(("\\$APP_ICON") "zed")
(("\\$DO_STARTUP_NOTIFY") "true")))))
(add-after 'unpack 'set-env
(lambda _
(setenv "LIBGIT2_NO_VENDOR" "1")
(setenv "LIBSQLITE3_SYS_USE_PKG_CONFIG" "1")))
(add-after 'set-env 'patch-git-deps
(lambda _
;; All multi-line entries are collapsed to single
;; lines by the patch. reqwest and scap already
;; carry version fields; just strip the git source.
(substitute* "Cargo.toml"
(("(reqwest = \\{) git = \"[^\"]+\", rev = \"[^\"]+\", " _ prefix)
(string-append prefix " "))
(("(scap = \\{) git = \"[^\"]+\", rev = \"[^\"]+\", " _ prefix)
(string-append prefix " ")))
;; Replace all remaining git fields with version = "*"
;; and strip rev/branch.
(substitute* "Cargo.toml"
(("git = \"https://[^\"]+\"")
"version = \"*\"")
((", rev = \"[^\"]+\"") "")
((", branch = \"[^\"]+\"") ""))
;; Sub-crate Cargo.toml files also have git deps.
(for-each
(lambda (file)
;; rev-before-git deps: replace pair with version = "*".
(substitute* file
(("rev = \"[^\"]+\", git = \"[^\"]+\"")
"version = \"*\""))
;; git-before-rev deps that already carry a version
;; field: strip git+rev, keep everything else.
(substitute* file
(("git = \"[^\"]+\" *, rev = \"[^\"]+\" *, ") "")
((", git *= *\"[^\"]+\"") "")
((", branch = \"[^\"]+\"") "")))
(find-files "crates" "^Cargo\\.toml$"))
;; nvim-rs has no version field; add one.
(substitute* "crates/vim/Cargo.toml"
(("(nvim-rs = \\{) " _ prefix)
(string-append prefix " version = \"*\", "))))))))
(native-inputs (list cmake-minimal pkg-config protobuf))
(inputs
(cons* alsa-lib
bzip2
dbus
fontconfig
freetype
libgit2-1.9
libx11
libxcb
libxkbcommon
openssl
sqlite
vulkan-loader
wayland
wayland-protocols
xcb-util-cursor
zlib
(list zstd "lib")
(cargo-inputs 'zed)))
(home-page "https://zed.dev")
(synopsis "High-performance, multiplayer code editor")
(description
"Zed is a high-performance, multiplayer code editor written in Rust.
Note: This build disables WebRTC (libwebrtc) support because libwebrtc is
not yet packaged in Guix. As a result, voice and video calls in collaborative
sessions are not available. Text-based collaboration, editing, and all other
features work normally.")
(license license:gpl3+)))
+6 -6
View File
@@ -191,7 +191,7 @@ libenca and several charset conversion libraries and tools.")
(hidden-package
(package
(name "utf8proc-bootstrap")
(version "2.10.0")
(version "2.11.3")
(source
(origin
(method git-fetch)
@@ -200,7 +200,7 @@ libenca and several charset conversion libraries and tools.")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1n1k67x39sk8xnza4w1xkbgbvgb1g7w2a7j2qrqzqaw1lyilqsy2"))))
(base32 "1ssix4zf3lac1afzlw2gbfg3n52gmggip8lv224gywqf3zyvyp8c"))))
(build-system gnu-build-system)
(arguments
(list #:tests? #f ;To break dependency cycle.
@@ -223,7 +223,7 @@ case-folding, and other operations for data in the UTF-8 encoding.")
(inherit utf8proc-bootstrap)
(name "utf8proc")
(native-inputs
(let ((UNICODE_VERSION "16.0.0")) ; defined in data/Makefile
(let ((UNICODE_VERSION "17.0.0")) ; defined in data/Makefile
;; Only if the tests will be run should these be added.
(if (and (%current-system)
(supported-package? julia))
@@ -235,7 +235,7 @@ case-folding, and other operations for data in the UTF-8 encoding.")
UNICODE_VERSION "/ucd/NormalizationTest.txt"))
(sha256
(base32
"1cffwlxgn6sawxb627xqaw3shnnfxq0v7cbgsld5w1z7aca9f4fq")))
"1nw7i89q42r0plwlc8qj6qm18brk23hc0jf800cp86km63azy6ah")))
(origin
(method url-fetch)
(uri (string-append
@@ -243,7 +243,7 @@ case-folding, and other operations for data in the UTF-8 encoding.")
UNICODE_VERSION "/ucd/auxiliary/GraphemeBreakTest.txt"))
(sha256
(base32
"1d9w6vdfxakjpp38qjvhgvbl2qx0zv5655ph54dhdb3hs9a96azf")))
"1v4k2x52bzwgqxw89hdf3wdgwm8q3ianmfrya37bl699qp939lg2")))
(origin
(method url-fetch)
(uri (string-append
@@ -251,7 +251,7 @@ case-folding, and other operations for data in the UTF-8 encoding.")
UNICODE_VERSION "/ucd/DerivedCoreProperties.txt"))
(sha256
(base32
"1gfsq4vdmzi803i2s8ih7mm4fgs907kvkg88kvv9fi4my9hm3lrr")))
"021clafsjmjblsxcszp0dpxy2phwhbmyghfmxym2yj2w378zxir4")))
;; For tests.
julia
perl
+2 -2
View File
@@ -71,14 +71,14 @@
(define-public tor
(package
(name "tor")
(version "0.4.9.5")
(version "0.4.9.6")
(source (origin
(method url-fetch)
(uri (string-append "https://dist.torproject.org/tor-"
version ".tar.gz"))
(sha256
(base32
"0yg1k4qcvf7ikc296wgr7nr5axhpkkjb3xkn364n93ildgwc4jf9"))))
"05vh1bcsr0gx2xwl7r94drmqlzp0dgag43dlajk6769f0nbvm6m8"))))
(build-system gnu-build-system)
(arguments
(list #:configure-flags
+75 -3
View File
@@ -66,6 +66,7 @@
;;; Copyright © 2025 Dariqq <dariqq@posteo.net>
;;; Copyright © 2025 Tomas Volf <~@wolfsden.cz>
;;; Copyright © 2025 Matthew Elwin <elwin@northwestern.edu>
;;; Copyright © 2025 Roman Scherer <roman@burningswell.com>
;;; Copyright © 2026 Ingar <ingar@onionmail.info>
;;;
;;; This file is part of GNU Guix.
@@ -1762,6 +1763,78 @@ fetch @acronym{PR, pull requests}, and more. It is based on the
supports AGit-Flow and lifts the requirement to use a manifest file.")
(license license:asl2.0)))
(define-public github-cli
(package
(name "github-cli")
(version "2.83.2")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/cli/cli")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "04kpcy15r7px92mf13jf4w0v07sjnfqc09m1vfvr5pmw7xsg35k2"))))
(build-system go-build-system)
(arguments
(list
#:install-source? #f
#:import-path "github.com/cli/cli/v2/cmd/gh"
#:unpack-path "github.com/cli/cli/v2"
#:embed-files
#~(list ".*\\.xml" ".*\\.tmpl"
;; sigstore-go TUF repository files (root.json, staging_root.json)
".*_?root\\.json" "trusted_root\\.json"
;; go-openapi/spec schema files
"jsonschema-draft-04\\.json" "schema\\.json")))
(native-inputs
(list go-github-com-atotto-clipboard
go-github-com-briandowns-spinner
go-github-com-cenkalti-backoff-v4
go-github-com-cenkalti-backoff-v5
go-github-com-charmbracelet-glamour
go-github-com-charmbracelet-huh
go-github-com-charmbracelet-lipgloss
go-github-com-cli-go-gh-v2
go-github-com-cli-oauth
go-github-com-cli-safeexec
go-github-com-digitorus-timestamp
go-github-com-distribution-reference
go-github-com-gabriel-vasile-mimetype
go-github-com-gdamore-tcell-v2
go-github-com-gorilla-websocket
go-github-com-hashicorp-go-multierror
go-github-com-hashicorp-go-version
go-github-com-itchyny-timefmt-go
go-github-com-joho-godotenv
go-github-com-makenowjust-heredoc
go-github-com-masterminds-sprig-v3
go-github-com-microsoft-dev-tunnels
go-github-com-muhammadmuzzammil1998-jsonc
go-github-com-opentracing-opentracing-go
go-github-com-rivo-tview
go-github-com-shurcool-githubv4
go-github-com-sigstore-sigstore-go
go-github-com-spf13-cobra
go-github-com-spf13-pflag
go-github-com-stretchr-testify
go-github-com-vmihailenco-msgpack-v5
go-github-com-zalando-go-keyring
go-golang-org-x-sys
go-golang-org-x-term
go-golang-org-x-text
go-google-golang-org-grpc
go-gopkg-in-yaml-v3))
(home-page "https://cli.github.com/")
(synopsis "GitHub's official command-line tool")
(description
"@command{gh} is GitHub on the command line. It brings pull requests,
issues, and other GitHub concepts to the terminal next to where you are
already working with git and your code. It works with GitHub.com, GitHub
Enterprise Cloud, and GitHub Enterprise Server 2.20+.")
(license license:expat)))
(define-public cgit
(package
(name "cgit")
@@ -4837,9 +4910,8 @@ comes as a command line app and also an Emacs interface.")
go-gopkg-in-yaml-v3))
(home-page "https://github.com/github/git-sizer")
(synopsis "Analyze size of a Git repo")
(description
"Compute various size metrics for a Git repository, flagging those that
might cause problems or inconvenience.")
(description "Compute various size metrics for a Git repository, flagging
those that might cause problems or inconvenience.")
(license license:expat)))
;;;
+25 -27
View File
@@ -1469,10 +1469,10 @@ designed to encode video or images into an H.265 / HEVC encoded bitstream.")
(native-inputs
(list pkg-config nasm))
(propagated-inputs
`(("freetype" ,freetype)
("fribidi" ,fribidi)
("fontconfig" ,fontconfig)
("harfbuzz" ,harfbuzz)))
(list freetype
fribidi
fontconfig
harfbuzz))
(home-page "https://github.com/libass/libass")
(synopsis "Subtitle rendering library for the ASS/SSA format")
(description "libass is a subtitle rendering library for the
@@ -5194,14 +5194,14 @@ specifications.")
(define-public libaacs
(package
(name "libaacs")
(version "0.11.0")
(version "0.11.1")
(source
(origin
(method url-fetch)
(uri (string-append "https://ftp.videolan.org/pub/videolan/libaacs/"
version "/libaacs-" version ".tar.bz2"))
(sha256
(base32 "11skjqjlldmbjkyxdcz4fmcn6y4p95r1xagbcnjy4ndnzf0l723d"))))
(base32 "0f8ax9dp49mrm1484bl2df659b34xyrjmngzmvvpg2n9wkms12m8"))))
(inputs
(list libgcrypt))
(native-inputs
@@ -6250,32 +6250,30 @@ spec for MP4), which can be obtained from the ISO or found online.")
(license license:expat)))
(define-public vidstab
(let ((commit "aeabc8daa7904f9edf7441a11f293965a5ef53b8")
(revision "0"))
(package
(name "vidstab")
(version (git-version "1.1.0" revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/georgmartius/vid.stab")
(commit commit)))
(file-name (git-file-name name version))
(sha256
(base32
"042iy0f3khwzr68djzvqgn301sy21ljvkf52rnc2c73q7ircnzzn"))))
(build-system cmake-build-system)
(arguments
'(#:tests? #f)) ; tests are not run as part of standard build process
(home-page "http://public.hronopik.de/vid.stab/")
(synopsis "Video stabilization library")
(description "Vidstab is a video stabilization library which can be used
(package
(name "vidstab")
(version "1.1.1")
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/georgmartius/vid.stab")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32
"19k822bwsnw58ikbfh4fhh97zpn89ji9k1gdvh9r2ljy82g52md7"))))
(build-system cmake-build-system)
(arguments
'(#:tests? #f)) ; tests are not run as part of standard build process
(home-page "http://public.hronopik.de/vid.stab/")
(synopsis "Video stabilization library")
(description "Vidstab is a video stabilization library which can be used
with FFmpeg. A video acquired using a hand-held camera or a camera mounted on a
vehicle typically suffers from undesirable shakes and jitters. Activities such
as surfing, skiing, riding and walking while shooting videos are especially
prone to erratic camera shakes. Vidstab targets these video contents to help
create smoother and stable videos.")
(license license:gpl2+))))
(license license:gpl2+)))
(define-public libopenshot
(package
+2 -2
View File
@@ -2560,7 +2560,7 @@ Open Container Initiative (OCI) image layout and its tagged images.")
(define-public skopeo
(package
(name "skopeo")
(version "1.22.1")
(version "1.22.2")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -2569,7 +2569,7 @@ Open Container Initiative (OCI) image layout and its tagged images.")
(file-name (git-file-name name version))
(sha256
(base32
"0h32h02dvh6dx587idqi11938k293kawvd4d3xk5hwdi6cmpabri"))))
"05ag8rj2w6p78llhiwb2h460nf0vn7mppaara6l1dcb84sycj8jg"))))
(build-system gnu-build-system)
(native-inputs
(list go-1.24
+1 -9
View File
@@ -183,9 +183,7 @@ RDP, VNC, SPICE, NX, XDMCP, SSH and EXEC network protocols are supported.")
(uri (git-reference
(url "https://github.com/TurboVNC/turbovnc")
(commit version)))
(modules '((guix build utils)
(ice-9 ftw)
(srfi srfi-26)))
(modules '((guix build utils)))
(snippet
#~(begin
;; There are a few bundled Java libraries, such as jsch and jzlib,
@@ -193,12 +191,6 @@ RDP, VNC, SPICE, NX, XDMCP, SSH and EXEC network protocols are supported.")
;; bundled under java/org. These are used by the 'vncviewer'
;; program. The jsch copy is modified and integrates changes from
;; https://github.com/mwiede/jsch, so cannot easily be un-bundled.
(define (delete-all-but directory . preserve)
(with-directory-excursion directory
(let* ((pred (negate (cut member <>
(cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
;; d3des, rfb (headers) and turbojpeg-jni are small and not
;; packaged in Guix, so preserve them.
+5 -5
View File
@@ -75,7 +75,7 @@
;;; Copyright © 2025 Remco van 't Veer <remco@remworks.net>"
;;; Copyright © 2025 Daniel Khodabakhsh <d@niel.khodabakh.sh>
;;; Copyright © 2025 Josep Bigorra <jjbigorra@gmail.com>
;;; Copyright © 2025 Ashish SHUKLA <ashish.is@lostca.se>
;;; Copyright © 2025, 2026 Ashish SHUKLA <ashish.is@lostca.se>
;;; Copyright © 2025 Philippe Swartvagher <phil.swart@gmx.fr>
;;; Copyright © 2025 pinoaffe <pinoaffe@gmail.com>
;;; Copyright © 2025, 2026 gemmaro <gemmaro.dev@gmail.com>
@@ -1472,7 +1472,7 @@ used to train large language models, and poisoning the collected data.")
(define-public jansson
(package
(name "jansson")
(version "2.14")
(version "2.15.0")
(source (origin
(method url-fetch)
(uri (string-append "https://github.com/akheron/jansson"
@@ -1480,7 +1480,7 @@ used to train large language models, and poisoning the collected data.")
"/jansson-" version ".tar.bz2"))
(sha256
(base32
"1fdgji964mrrz19glx0zh91asji542fvybymvzk6rrbagkr5dagv"))))
"0m49glsr5v376jpyj2y0xyr11703pr4bfgipz5jk2dq0a1vcgsm7"))))
(build-system gnu-build-system)
(arguments
(list
@@ -9041,7 +9041,7 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
(define-public nghttp2
(package
(name "nghttp2")
(version "1.58.0")
(version "1.68.1")
(source
(origin
(method url-fetch)
@@ -9050,7 +9050,7 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
"nghttp2-" version ".tar.xz"))
(sha256
(base32
"1q4ps8acr7nyia7mf2z11m0yh3fn1imhyv855j3xjbx91l2a6s2a"))))
"1cph2j688zxxxl3944g5grjma15qbv4b6z252ichsn7ilyq7mgba"))))
(build-system gnu-build-system)
(outputs (list "out"
"lib")) ; only libnghttp2
+2 -2
View File
@@ -3863,7 +3863,7 @@ using @command{dmenu}.")
(define-public fuzzel
(package
(name "fuzzel")
(version "1.14.0")
(version "1.14.1")
(home-page "https://codeberg.org/dnkl/fuzzel")
(source (origin
(method git-fetch)
@@ -3871,7 +3871,7 @@ using @command{dmenu}.")
(file-name (git-file-name name version))
(sha256
(base32
"1fx1y430iwdjzba1rb6m56k3phvjn8di5v7d6rnxdqvm30085vpl"))))
"1bk49fq66a0fr9danpj7vnq3dcfmrw1hdcc2ygqkld9z5lv1h5an"))))
(build-system meson-build-system)
(arguments
(list #:build-type "release"
+1 -2
View File
@@ -1480,8 +1480,7 @@ treat it as part of their software base when porting.")
(inputs
(list libxt xorgproto libxext))
(native-inputs
`(("gettext" ,gettext-minimal)
("pkg-config" ,pkg-config)))
(list gettext-minimal pkg-config))
(home-page "https://www.x.org/wiki/")
(synopsis "Xorg XPM library")
(description "XPM (X Pixmap) image file format library.")
+9
View File
@@ -77,6 +77,7 @@
make-file-writable
copy-recursively
delete-file-recursively
delete-all-but
file-name-predicate
find-files
false-if-file-not-found
@@ -522,6 +523,14 @@ errors."
;; Don't follow symlinks.
lstat)))
(define (delete-all-but directory . preserve)
"Delete DIRECTORY recursively except for the files in PRESERVE immediately
found under it."
(with-directory-excursion directory
(let* ((pred (negate (cut member <> (cons* "." ".." preserve))))
(items (scandir "." pred)))
(for-each (cut delete-file-recursively <>) items))))
(define (file-name-predicate regexp)
"Return a predicate that returns true when passed a file name whose base
name matches REGEXP."