···575575 and `services.kavita.settings.IpAddresses`. The file at `services.kavita.tokenKeyFile` now needs to contain a secret with
576576 512+ bits instead of 128+ bits.
577577578578+- `kavita` has been updated to 0.8.0, requiring a manual forced library scan on all libraries for migration. Refer to upstream's [release notes](https://github.com/Kareadita/Kavita/releases/tag/v0.8.0) for details.
579579+578580- The `krb5` module has been rewritten and moved to `security.krb5`, moving all options but `security.krb5.enable` and `security.krb5.package` into `security.krb5.settings`.
579581580582- `services.soju` now has a wrapper for the `sojuctl` command, pointed at the service config file. It also has the new option `adminSocket.enable`, which creates a unix admin socket at `/run/soju/admin`.
+4-1
nixos/modules/services/misc/paperless.nix
···203203 apply = pkg: pkg.override {
204204 tesseract5 = pkg.tesseract5.override {
205205 # always enable detection modules
206206+ # tesseract fails to build when eng is not present
206207 enableLanguages = if cfg.settings ? PAPERLESS_OCR_LANGUAGE then
207207- [ "equ" "osd" ]
208208+ lists.unique (
209209+ [ "equ" "osd" "eng" ]
208210 ++ lib.splitString "+" cfg.settings.PAPERLESS_OCR_LANGUAGE
211211+ )
209212 else null;
210213 };
211214 };
+37-4
nixos/modules/services/misc/podgrab.nix
···11{ config, lib, pkgs, ... }:
22let
33 cfg = config.services.podgrab;
44+55+ stateDir = "/var/lib/podgrab";
46in
57{
68 options.services.podgrab = with lib; {
···2123 default = 8080;
2224 example = 4242;
2325 description = "The port on which Podgrab will listen for incoming HTTP traffic.";
2626+ };
2727+2828+ dataDirectory = mkOption {
2929+ type = types.path;
3030+ default = "${stateDir}/data";
3131+ example = "/mnt/podcasts";
3232+ description = "Directory to store downloads.";
3333+ };
3434+3535+ user = mkOption {
3636+ type = types.str;
3737+ default = "podgrab";
3838+ description = "User under which Podgrab runs, and which owns the download directory.";
3939+ };
4040+4141+ group = mkOption {
4242+ type = types.str;
4343+ default = "podgrab";
4444+ description = "Group under which Podgrab runs, and which owns the download directory.";
2445 };
2546 };
26472748 config = lib.mkIf cfg.enable {
4949+ systemd.tmpfiles.settings."10-pyload" = {
5050+ ${cfg.dataDirectory}.d = { inherit (cfg) user group; };
5151+ };
5252+2853 systemd.services.podgrab = {
2954 description = "Podgrab podcast manager";
3055 wantedBy = [ "multi-user.target" ];
3156 environment = {
3232- CONFIG = "/var/lib/podgrab/config";
3333- DATA = "/var/lib/podgrab/data";
5757+ CONFIG = "${stateDir}/config";
5858+ DATA = cfg.dataDirectory;
3459 GIN_MODE = "release";
3560 PORT = toString cfg.port;
3661 };
3762 serviceConfig = {
3838- DynamicUser = true;
6363+ User = cfg.user;
6464+ Group = cfg.group;
3965 EnvironmentFile = lib.optionals (cfg.passwordFile != null) [
4066 cfg.passwordFile
4167 ];
4268 ExecStart = "${pkgs.podgrab}/bin/podgrab";
4369 WorkingDirectory = "${pkgs.podgrab}/share";
4444- StateDirectory = [ "podgrab/config" "podgrab/data" ];
7070+ StateDirectory = [ "podgrab/config" ];
4571 };
4672 };
7373+7474+ users.users.podgrab = lib.mkIf (cfg.user == "podgrab") {
7575+ isSystemUser = true;
7676+ group = cfg.group;
7777+ };
7878+7979+ users.groups.podgrab = lib.mkIf (cfg.group == "podgrab") { };
4780 };
48814982 meta.maintainers = with lib.maintainers; [ ambroisie ];
···3939in
4040buildGoModule rec {
4141 pname = "forgejo";
4242- version = "1.21.10-0";
4242+ version = "1.21.11-0";
43434444 src = fetchFromGitea {
4545 domain = "codeberg.org";
4646 owner = "forgejo";
4747 repo = "forgejo";
4848 rev = "v${version}";
4949- hash = "sha256-uCRAT9RiU9S+tP9alNshSQwbUgLmU9wE5HIQ4FPmXVE=";
4949+ hash = "sha256-Cp+dN4nTIboin42NJR/YUkVXbBC7uufH8EE7NgIVFzY=";
5050 # Forgejo has multiple different version strings that need to be provided
5151 # via ldflags. main.ForgejoVersion for example is a combination of a
5252 # hardcoded gitea compatibility version string (in the Makefile) and
···6565 '';
6666 };
67676868- vendorHash = "sha256-pgUSmM2CxYO8DralWoeR2groQxpxo9WtRcToYeaHXGk=";
6868+ vendorHash = "sha256-OuWNF+muWM6xqwkFxLIUsn/huqXj2VKg8BN9+JHVw58=";
69697070 subPackages = [ "." ];
7171
···11-{ stdenv }:
11+{ stdenv, lib }:
2233# A "response file" is a sequence of arguments that is passed via a
44# file, rather than via argv[].
···2525 mkdir -p $prefix/bin
2626 mv expand-response-params $prefix/bin/
2727 '';
2828+2929+ meta = {
3030+ description = "Internal tool used by the nixpkgs wrapper scripts for processing response files";
3131+ longDescription = ''
3232+ expand-response-params is a tool that allows for obtaining a full list of all
3333+ arguments passed in a given compiler command line including those passed via
3434+ so-called response files. The nixpkgs wrapper scripts for bintools and C
3535+ compilers use it for processing compiler flags. As it is developed in
3636+ conjunction with the nixpkgs wrapper scripts, it should be considered as
3737+ unstable and subject to change.
3838+ '';
3939+ license = lib.licenses.mit;
4040+ platforms = lib.platforms.all;
4141+ };
2842}
···11+diff --git a/snapcraft/utils.py b/snapcraft/utils.py
22+index 511effe2..4af5a029 100644
33+--- a/snapcraft/utils.py
44++++ b/snapcraft/utils.py
55+@@ -15,6 +15,7 @@
66+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
77+88+ """Utilities for snapcraft."""
99++
1010+ import multiprocessing
1111+ import os
1212+ import pathlib
1313+@@ -91,7 +92,7 @@ def get_os_platform(
1414+ release = platform.release()
1515+ machine = platform.machine()
1616+1717+- if system == "Linux":
1818++ if system == "Linux" and "NixOS" not in platform.version():
1919+ try:
2020+ with filepath.open("rt", encoding="utf-8") as release_file:
2121+ lines = release_file.readlines()
+188
pkgs/by-name/sn/snapcraft/package.nix
···11+{
22+ fetchFromGitHub,
33+ git,
44+ glibc,
55+ lib,
66+ makeWrapper,
77+ nix-update-script,
88+ python3Packages,
99+ squashfsTools,
1010+ stdenv,
1111+}:
1212+python3Packages.buildPythonApplication rec {
1313+ pname = "snapcraft";
1414+ version = "8.2.0";
1515+1616+ pyproject = true;
1717+1818+ # Somewhere deep in the dependency tree is 'versioningit', which depends
1919+ # on pydantic 2. Snapcraft will soon migrate to pydantic 2, and disabling
2020+ # this doesn't seem to affect the functionality of the application.
2121+ catchConflicts = false;
2222+2323+ src = fetchFromGitHub {
2424+ owner = "canonical";
2525+ repo = "snapcraft";
2626+ rev = "refs/tags/${version}";
2727+ hash = "sha256-uRapRL+492FOju83o3OBsYK52hwOOG6b4EbdMVpAlBs=";
2828+ };
2929+3030+ patches = [
3131+ # Snapcraft is only officially distributed as a snap, as is LXD. The socket
3232+ # path for LXD must be adjusted so that it's at the correct location for LXD
3333+ # on NixOS. This patch will likely never be accepted upstream.
3434+ ./lxd-socket-path.patch
3535+ # In certain places, Snapcraft expects an /etc/os-release file to determine
3636+ # host info which doesn't exist in our test environment. This is a
3737+ # relatively naive patch which helps the test suite pass - without it *many*
3838+ # of the tests fail. This patch will likely never be accepted upstream.
3939+ ./os-platform.patch
4040+ # Snapcraft will try to inject itself as a snap *from the host system* into
4141+ # the build system. This patch short-circuits that logic and ensures that
4242+ # Snapcraft is installed on the build system from the snap store - because
4343+ # there is no snapd on NixOS hosts that can be used for the injection. This
4444+ # patch will likely never be accepted upstream.
4545+ ./set-channel-for-nix.patch
4646+ # Certain paths (for extensions, schemas) are packaged in the snap by the
4747+ # upstream, so the paths are well-known, except here where Snapcraft is
4848+ # *not* in a snap, so this patch changes those paths to point to the correct
4949+ # place in the Nix store. This patch will likely never be accepted upstream.
5050+ ./snapcraft-data-dirs.patch
5151+ ];
5252+5353+ postPatch = ''
5454+ substituteInPlace setup.py \
5555+ --replace-fail 'version=determine_version()' 'version="${version}"' \
5656+ --replace-fail 'gnupg' 'python-gnupg'
5757+5858+ substituteInPlace requirements.txt \
5959+ --replace-fail 'gnupg==2.3.1' 'python-gnupg'
6060+6161+ substituteInPlace snapcraft/__init__.py \
6262+ --replace-fail '__version__ = _get_version()' '__version__ = "${version}"'
6363+6464+ substituteInPlace snapcraft_legacy/__init__.py \
6565+ --replace-fail '__version__ = _get_version()' '__version__ = "${version}"'
6666+6767+ substituteInPlace snapcraft/elf/elf_utils.py \
6868+ --replace-fail 'arch_linker_path = Path(arch_config.dynamic_linker)' \
6969+ 'return str(Path("${glibc}/lib/ld-linux-x86-64.so.2"))'
7070+ '';
7171+7272+ buildInputs = [ makeWrapper ];
7373+7474+ propagatedBuildInputs = with python3Packages; [
7575+ attrs
7676+ catkin-pkg
7777+ click
7878+ craft-application
7979+ craft-archives
8080+ craft-cli
8181+ craft-grammar
8282+ craft-parts
8383+ craft-providers
8484+ craft-store
8585+ debian
8686+ docutils
8787+ jsonschema
8888+ launchpadlib
8989+ lazr-restfulclient
9090+ lxml
9191+ macaroonbakery
9292+ mypy-extensions
9393+ progressbar
9494+ pyelftools
9595+ pygit2
9696+ pylxd
9797+ python-apt
9898+ python-gnupg
9999+ raven
100100+ requests-toolbelt
101101+ simplejson
102102+ snap-helpers
103103+ tabulate
104104+ tinydb
105105+ ];
106106+107107+ nativeBuildInputs = with python3Packages; [
108108+ pythonRelaxDepsHook
109109+ setuptools
110110+ ];
111111+112112+ pythonRelaxDeps = [
113113+ "docutils"
114114+ "jsonschema"
115115+ "pygit2"
116116+ "urllib3"
117117+ ];
118118+119119+ postInstall = ''
120120+ wrapProgram $out/bin/snapcraft --prefix PATH : ${squashfsTools}/bin
121121+ '';
122122+123123+ nativeCheckInputs = with python3Packages; [
124124+ pytest-check
125125+ pytest-cov
126126+ pytest-mock
127127+ pytest-subprocess
128128+ pytestCheckHook
129129+ responses
130130+ ] ++ [
131131+ git
132132+ squashfsTools
133133+ ];
134134+135135+ preCheck = ''
136136+ mkdir -p check-phase
137137+ export HOME="$(pwd)/check-phase"
138138+ '';
139139+140140+ pytestFlagsArray = [ "tests/unit" ];
141141+142142+ disabledTests = [
143143+ "test_bin_echo"
144144+ "test_classic_linter_filter"
145145+ "test_classic_linter"
146146+ "test_complex_snap_yaml"
147147+ "test_get_base_configuration_snap_channel"
148148+ "test_get_base_configuration_snap_instance_name_default"
149149+ "test_get_base_configuration_snap_instance_name_not_running_as_snap"
150150+ "test_get_extensions_data_dir"
151151+ "test_get_os_platform_alternative_formats"
152152+ "test_get_os_platform_linux"
153153+ "test_get_os_platform_windows"
154154+ "test_lifecycle_pack_components_with_output"
155155+ "test_lifecycle_pack_components"
156156+ "test_lifecycle_write_component_metadata"
157157+ "test_parse_info_integrated"
158158+ "test_patch_elf"
159159+ "test_remote_builder_init"
160160+ "test_setup_assets_remote_icon"
161161+ "test_snap_command_fallback"
162162+ "test_validate_architectures_supported"
163163+ "test_validate_architectures_unsupported"
164164+ ] ++ lib.optionals stdenv.isAarch64 [
165165+ "test_load_project"
166166+ ];
167167+168168+ disabledTestPaths = [
169169+ "tests/unit/commands/test_remote.py"
170170+ "tests/unit/elf"
171171+ "tests/unit/linters/test_classic_linter.py"
172172+ "tests/unit/linters/test_library_linter.py"
173173+ "tests/unit/parts/test_parts.py"
174174+ "tests/unit/services"
175175+ ];
176176+177177+ passthru.updateScript = nix-update-script { };
178178+179179+ meta = {
180180+ mainProgram = "snapcraft";
181181+ description = "Build and publish Snap packages";
182182+ homepage = "https://github.com/canonical/snapcraft";
183183+ changelog = "https://github.com/canonical/snapcraft/releases/tag/${version}";
184184+ license = lib.licenses.gpl3Only;
185185+ maintainers = with lib.maintainers; [ jnsgruk ];
186186+ platforms = lib.platforms.linux;
187187+ };
188188+}
···11+diff --git a/snapcraft/providers.py b/snapcraft/providers.py
22+index a999537a..dcd290a7 100644
33+--- a/snapcraft/providers.py
44++++ b/snapcraft/providers.py
55+@@ -21,6 +21,7 @@ import sys
66+ from pathlib import Path
77+ from textwrap import dedent
88+ from typing import Dict, Optional
99++import platform
1010+1111+ from craft_cli import emit
1212+ from craft_providers import Provider, ProviderError, bases, executor
1313+@@ -178,14 +179,14 @@ def get_base_configuration(
1414+ # injecting a snap on a non-linux system is not supported, so default to
1515+ # install snapcraft from the store's stable channel
1616+ snap_channel = get_managed_environment_snap_channel()
1717+- if sys.platform != "linux" and not snap_channel:
1818++ if snap_channel is None and (sys.platform != "linux" or "NixOS" in platform.version()):
1919+ emit.progress(
2020+- "Using snapcraft from snap store channel 'latest/stable' in instance "
2121++ "Using snapcraft from snap store channel 'latest/beta' in instance "
2222+ "because snap injection is only supported on Linux hosts.",
2323+ permanent=True,
2424+ )
2525+ snap_name = "snapcraft"
2626+- snap_channel = "stable"
2727++ snap_channel = "beta"
2828+ elif is_snapcraft_running_from_snap():
2929+ # Use SNAP_INSTANCE_NAME for snapcraft's snap name, as it may not be
3030+ # 'snapcraft' if the '--name' parameter was used to install snapcraft.
···11-{ hostPlatform, lib }:
11+{ lib, stdenv }:
22let
33+ inherit (stdenv) hostPlatform;
44+35 # Samples are built around the CUDA Toolkit, which is not available for
46 # aarch64. Check for both CUDA version and platform.
57 platformIsSupported = hostPlatform.isx86_64 && hostPlatform.isLinux;
···11{
22 cudaVersion,
33- hostPlatform,
43 lib,
44+ stdenv,
55}:
66let
77 cudaVersionToHash = {
···2222 "12.2" = "sha256-pOy0qfDjA/Nr0T9PNKKefK/63gQnJV2MQsN2g3S2yng=";
2323 "12.3" = "sha256-fjVp0G6uRCWxsfe+gOwWTN+esZfk0O5uxS623u0REAk=";
2424 };
2525+2626+ inherit (stdenv) hostPlatform;
25272628 # Samples are built around the CUDA Toolkit, which is not available for
2729 # aarch64. Check for both CUDA version and platform.
···77 cudaForwardCompat ? (config.cudaForwardCompat or true),
88 lib,
99 cudaVersion,
1010- hostPlatform,
1010+ stdenv,
1111 # gpus :: List Gpu
1212 gpus,
1313}:
···1919 strings
2020 trivial
2121 ;
2222+2323+ inherit (stdenv) hostPlatform;
22242325 # Flags are determined based on your CUDA toolkit by default. You may benefit
2426 # from improved performance, reduced file size, or greater hardware support by
···207209 # E.g. "-gencode=arch=compute_75,code=sm_75 ... -gencode=arch=compute_86,code=compute_86"
208210 gencodeString = strings.concatStringsSep " " gencode;
209211212212+ # cmakeCudaArchitecturesString :: String
213213+ # A semicolon-separated string of CUDA capabilities without dots, suitable for passing to CMake.
214214+ # E.g. "75;86"
215215+ cmakeCudaArchitecturesString = strings.concatMapStringsSep ";" dropDot cudaCapabilities;
216216+210217 # Jetson devices cannot be targeted by the same binaries which target non-Jetson devices. While
211218 # NVIDIA provides both `linux-aarch64` and `linux-sbsa` packages, which both target `aarch64`,
212219 # they are built with different settings and cannot be mixed.
···270277 ];
271278 gencodeString = "-gencode=arch=compute_75,code=sm_75 -gencode=arch=compute_86,code=sm_86 -gencode=arch=compute_86,code=compute_86";
272279280280+ cmakeCudaArchitecturesString = "75;86";
281281+273282 isJetsonBuild = false;
274283 };
275284 actual = formatCapabilities {
···338347 "-gencode=arch=compute_72,code=compute_72"
339348 ];
340349 gencodeString = "-gencode=arch=compute_62,code=sm_62 -gencode=arch=compute_72,code=sm_72 -gencode=arch=compute_72,code=compute_72";
350350+351351+ cmakeCudaArchitecturesString = "62;72";
341352342353 isJetsonBuild = true;
343354 };
···1010 markForCudatoolkitRootHook,
1111 flags,
1212 stdenv,
1313- hostPlatform,
1413 # Builder-specific arguments
1514 # Short package name (e.g., "cuda_cccl")
1615 # pname : String
···4039 sourceTypes
4140 ;
42414242+ inherit (stdenv) hostPlatform;
4343+4344 # Get the redist architectures for which package provides distributables.
4445 # These are used by meta.platforms.
4546 supportedRedistArchs = builtins.attrNames featureRelease;
···4849 # It is `"unsupported"` if the redistributable is not supported on the target platform.
4950 redistArch = flags.getRedistArch hostPlatform.system;
50515151- sourceMatchesHost = flags.getNixSystem redistArch == stdenv.hostPlatform.system;
5252+ sourceMatchesHost = flags.getNixSystem redistArch == hostPlatform.system;
5253in
5354backendStdenv.mkDerivation (finalAttrs: {
5455 # NOTE: Even though there's no actual buildPhase going on here, the derivations of the
···127128 # brokenConditions :: AttrSet Bool
128129 # Sets `meta.broken = true` if any of the conditions are true.
129130 # Example: Broken on a specific version of CUDA or when a dependency has a specific version.
130130- brokenConditions = { };
131131+ brokenConditions = {
132132+ # Unclear how this is handled by Nix internals.
133133+ "Duplicate entries in outputs" = finalAttrs.outputs != lists.unique finalAttrs.outputs;
134134+ # Typically this results in the static output being empty, as all libraries are moved
135135+ # back to the lib output.
136136+ "lib output follows static output" =
137137+ let
138138+ libIndex = lists.findFirstIndex (x: x == "lib") null finalAttrs.outputs;
139139+ staticIndex = lists.findFirstIndex (x: x == "static") null finalAttrs.outputs;
140140+ in
141141+ libIndex != null && staticIndex != null && libIndex > staticIndex;
142142+ };
131143132144 # badPlatformsConditions :: AttrSet Bool
133145 # Sets `meta.badPlatforms = meta.platforms` if any of the conditions are true.
···137149 };
138150139151 # src :: Optional Derivation
140140- src = trivial.pipe redistArch [
141141- # If redistArch doesn't exist in redistribRelease, return null.
142142- (redistArch: redistribRelease.${redistArch} or null)
143143- # If the release is non-null, fetch the source; otherwise, return null.
144144- (trivial.mapNullable (
145145- { relative_path, sha256, ... }:
146146- fetchurl {
147147- url = "https://developer.download.nvidia.com/compute/${redistName}/redist/${relative_path}";
148148- inherit sha256;
149149- }
150150- ))
151151- ];
152152+ # If redistArch doesn't exist in redistribRelease, return null.
153153+ src = trivial.mapNullable (
154154+ { relative_path, sha256, ... }:
155155+ fetchurl {
156156+ url = "https://developer.download.nvidia.com/compute/${redistName}/redist/${relative_path}";
157157+ inherit sha256;
158158+ }
159159+ ) (redistribRelease.${redistArch} or null);
152160153153- # Handle the pkg-config files:
154154- # 1. No FHS
155155- # 2. Location expected by the pkg-config wrapper
156156- # 3. Generate unversioned names too
157157- postPatch = ''
158158- for path in pkg-config pkgconfig ; do
159159- [[ -d "$path" ]] || continue
160160- mkdir -p share/pkgconfig
161161- mv "$path"/* share/pkgconfig/
162162- rmdir "$path"
163163- done
164164-165165- for pc in share/pkgconfig/*.pc ; do
166166- sed -i \
167167- -e "s|^cudaroot\s*=.*\$|cudaroot=''${!outputDev}|" \
168168- -e "s|^libdir\s*=.*/lib\$|libdir=''${!outputLib}/lib|" \
169169- -e "s|^includedir\s*=.*/include\$|includedir=''${!outputDev}/include|" \
170170- "$pc"
171171- done
172172-161161+ postPatch =
162162+ # Pkg-config's setup hook expects configuration files in $out/share/pkgconfig
163163+ ''
164164+ for path in pkg-config pkgconfig; do
165165+ [[ -d "$path" ]] || continue
166166+ mkdir -p share/pkgconfig
167167+ mv "$path"/* share/pkgconfig/
168168+ rmdir "$path"
169169+ done
170170+ ''
171171+ # Rewrite FHS paths with store paths
172172+ # NOTE: output* fall back to out if the corresponding output isn't defined.
173173+ + ''
174174+ for pc in share/pkgconfig/*.pc; do
175175+ sed -i \
176176+ -e "s|^cudaroot\s*=.*\$|cudaroot=''${!outputDev}|" \
177177+ -e "s|^libdir\s*=.*/lib\$|libdir=''${!outputLib}/lib|" \
178178+ -e "s|^includedir\s*=.*/include\$|includedir=''${!outputDev}/include|" \
179179+ "$pc"
180180+ done
181181+ ''
182182+ # Generate unversioned names.
173183 # E.g. cuda-11.8.pc -> cuda.pc
174174- for pc in share/pkgconfig/*-"$majorMinorVersion.pc" ; do
175175- ln -s "$(basename "$pc")" "''${pc%-$majorMinorVersion.pc}".pc
176176- done
177177- '';
184184+ + ''
185185+ for pc in share/pkgconfig/*-"$majorMinorVersion.pc"; do
186186+ ln -s "$(basename "$pc")" "''${pc%-$majorMinorVersion.pc}".pc
187187+ done
188188+ '';
178189179190 env.majorMinorVersion = cudaMajorMinorVersion;
180191···233244 # Handle the existence of libPath, which requires us to re-arrange the lib directory
234245 + strings.optionalString (libPath != null) ''
235246 full_lib_path="lib/${libPath}"
236236- if [[ ! -d "$full_lib_path" ]] ; then
247247+ if [[ ! -d "$full_lib_path" ]]; then
237248 echo "${finalAttrs.pname}: '$full_lib_path' does not exist, only found:" >&2
238249 find lib/ -mindepth 1 -maxdepth 1 >&2
239250 echo "This release might not support your CUDA version" >&2
···264275 postInstallCheck = ''
265276 echo "Executing postInstallCheck"
266277267267- if [[ -z "''${allowFHSReferences-}" ]] ; then
278278+ if [[ -z "''${allowFHSReferences-}" ]]; then
268279 mapfile -t outputPaths < <(for o in $(getAllOutputNames); do echo "''${!o}"; done)
269269- if grep --max-count=5 --recursive --exclude=LICENSE /usr/ "''${outputPaths[@]}" ; then
280280+ if grep --max-count=5 --recursive --exclude=LICENSE /usr/ "''${outputPaths[@]}"; then
270281 echo "Detected references to /usr" >&2
271282 exit 1
272283 fi
···3333 };
34343535 patches = [
3636+ # This lib will try to inject snaps *from the host system* into the build
3737+ # system. This patch short-circuits that logic and ensures that snaps are
3838+ # installed on the build system from the snap store - because there is no
3939+ # snapd on NixOS hosts that can be used for the injection. This patch will
4040+ # likely never be accepted upstream.
3641 ./inject-snaps.patch
3742 ];
3843
···1515 buildHashes = builtins.fromJSON (builtins.readFile ./hashes.json);
16161717 # the version of infisical
1818- version = "0.20.1";
1818+ version = "0.21.1";
19192020 # the platform-specific, statically linked binary
2121 src =
···11+From 1defda6356c29c7f731bddb9e9231f594e01d9c9
22+(adjusted so it can be applied on coreutils to coreutils tarball)
33+44+Reported by Adept's Lab via Pádraig Brady at
55+<https://lists.gnu.org/archive/html/bug-coreutils/2024-03/msg00086.html>.
66+77+diff --git a/gnulib-tests/test-canonicalize.c b/gnulib-tests/test-canonicalize.c
88+index 6763a525c9..5d19285c00 100644
99+--- a/gnulib-tests/test-canonicalize.c
1010++++ b/gnulib-tests/test-canonicalize.c
1111+@@ -394,9 +394,9 @@ main (void)
1212+ ASSERT (stat ("/", &st1) == 0);
1313+ ASSERT (stat ("//", &st2) == 0);
1414+ bool same = psame_inode (&st1, &st2);
1515+-#if defined __MVS__ || defined MUSL_LIBC
1616+- /* On IBM z/OS and musl libc, "/" and "//" both canonicalize to
1717+- themselves, yet they both have st_dev == st_ino == 1. */
1818++#if defined __MVS__
1919++ /* On IBM z/OS, "/" and "//" both canonicalize to themselves, yet they both
2020++ have st_dev == st_ino == 1. */
2121+ same = false;
2222+ #endif
2323+ if (same)