Merge master into staging-nixos

This commit is contained in:
nixpkgs-ci[bot]
2026-01-22 06:08:47 +00:00
committed by GitHub
31 changed files with 443 additions and 219 deletions
+27 -17
View File
@@ -20,6 +20,7 @@ runs:
PIN_BUMP_SHA: ${{ inputs.untrusted-pin-bump }}
with:
script: |
const { rm, writeFile } = require('node:fs/promises')
const { spawn } = require('node:child_process')
const { join } = require('node:path')
@@ -55,10 +56,19 @@ runs:
return pinned.pins.nixpkgs.revision
}
const pin_bump_sha = process.env.PIN_BUMP_SHA
// Getting the pin-bump diff via the API avoids issues with `git fetch`
// thin-packs not having enough base objects to be applied locally.
// Returns a unified diff suitable for `git apply`.
async function getPinBumpDiff(ref) {
const { data } = await github.rest.repos.getCommit({
mediaType: { format: 'diff' },
...context.repo,
ref,
})
return data
}
// When dealing with a pin bump commit, we need `--depth=2` to view & apply its diff
const depth = pin_bump_sha ? 2 : 1
const pin_bump_sha = process.env.PIN_BUMP_SHA
const commits = [
{
@@ -76,17 +86,14 @@ runs:
{
sha: await getPinnedSha(process.env.TARGET_SHA),
path: 'trusted-pinned'
},
{
sha: pin_bump_sha
}
].filter(({ sha }) => Boolean(sha))
console.log('Fetching the following commits:', commits)
console.log('Checking out the following commits:', commits)
// Fetching all commits at once is much faster than doing multiple checkouts.
// This would fail without --refetch, because the we had a partial clone before, but changed it above.
await run('git', 'fetch', `--depth=${depth}`, '--refetch', 'origin', ...(commits.map(({ sha }) => sha)))
await run('git', 'fetch', '--depth=1', '--refetch', 'origin', ...(commits.map(({ sha }) => sha)))
// Checking out onto tmpfs takes 1s and is faster by at least factor 10x.
await run('mkdir', 'nixpkgs')
@@ -101,20 +108,21 @@ runs:
// Create all worktrees in parallel.
await Promise.all(
commits
.filter(({ path }) => Boolean(path))
.map(async ({ sha, path }) => {
await run('git', 'worktree', 'add', join('nixpkgs', path), sha, '--no-checkout')
await run('git', '-C', join('nixpkgs', path), 'sparse-checkout', 'disable')
await run('git', '-C', join('nixpkgs', path), 'checkout', '--progress')
})
commits.map(async ({ sha, path }) => {
await run('git', 'worktree', 'add', join('nixpkgs', path), sha, '--no-checkout')
await run('git', '-C', join('nixpkgs', path), 'sparse-checkout', 'disable')
await run('git', '-C', join('nixpkgs', path), 'checkout', '--progress')
})
)
// Apply pin bump to untrusted worktree
if (pin_bump_sha) {
console.log('Applying untrusted ci/pinned.json bump:', pin_bump_sha)
console.log('Fetching ci/pinned.json bump commit:', pin_bump_sha)
await writeFile('pin-bump.patch', await getPinBumpDiff(pin_bump_sha))
console.log('Applying untrusted ci/pinned.json bump to ./nixpkgs/untrusted')
try {
await run('git', '-C', join('nixpkgs', 'untrusted'), 'cherry-pick', '--no-commit', pin_bump_sha)
await run('git', '-C', join('nixpkgs', 'untrusted'), 'apply', '--3way', join('..', '..', 'pin-bump.patch'))
} catch {
core.setFailed([
`Failed to apply ci/pinned.json bump commit ${pin_bump_sha}.`,
@@ -122,5 +130,7 @@ runs:
`Please rebase the PR or ensure the pin bump is standalone.`
].join(' '))
return
} finally {
await rm('pin-bump.patch')
}
}
+1 -1
View File
@@ -26,7 +26,7 @@
- all:
- changed-files:
- any-glob-to-any-file:
- .github/actions/*
- .github/actions/**/*
- .github/workflows/*
- .github/labeler*.yml
- ci/**/*.*
@@ -20,6 +20,8 @@
- [reaction](https://reaction.ppom.me/), a daemon that scans program outputs for repeated patterns, and takes action. A common usage is to scan ssh and webserver logs, and to ban hosts that cause multiple authentication errors. A modern alternative to fail2ban. Available as [services.reaction](#opt-services.reaction.enable).
- [Tailscale Serve](https://tailscale.com/kb/1552/tailscale-services), configure Tailscale Serve for exposing local services to your tailnet. Available as [services.tailscale.serve](#opt-services.tailscale.serve.enable).
- [qui](https://github.com/autobrr/qui), a modern alternative webUI for qBittorrent, with multi-instance support. Written in Go/React. Available as [services.qui](#opt-services.qui.enable).
- [LibreChat](https://www.librechat.ai/), open-source self-hostable ChatGPT clone with Agents and RAG APIs. Available as [services.librechat](#opt-services.librechat.enable).
+1
View File
@@ -1392,6 +1392,7 @@
./services/networking/syncthing.nix
./services/networking/tailscale-auth.nix
./services/networking/tailscale-derper.nix
./services/networking/tailscale-serve.nix
./services/networking/tailscale.nix
./services/networking/tayga.nix
./services/networking/tcpcrypt.nix
@@ -0,0 +1,145 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.tailscale.serve;
settingsFormat = pkgs.formats.json { };
# Build the serve config structure with svc: prefix on service names
serveConfig = {
version = "0.0.1";
services = lib.mapAttrs' (
name: serviceCfg:
lib.nameValuePair "svc:${name}" (
{
endpoints = serviceCfg.endpoints;
}
// lib.optionalAttrs (serviceCfg.advertised != null) {
inherit (serviceCfg) advertised;
}
)
) cfg.services;
};
configFile =
if cfg.configFile != null then
cfg.configFile
else
settingsFormat.generate "tailscale-serve-config.json" serveConfig;
in
{
meta.maintainers = with lib.maintainers; [
bouk
];
options.services.tailscale.serve = {
enable = lib.mkEnableOption "Tailscale Serve configuration";
configFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = ''
Path to a Tailscale Serve configuration file in JSON format.
If set, this takes precedence over {option}`services.tailscale.serve.services`.
See <https://tailscale.com/kb/1589/tailscale-services-configuration-file> for the configuration format.
'';
example = "/run/secrets/tailscale-serve.json";
};
services = lib.mkOption {
type = lib.types.attrsOf (
lib.types.submodule {
options = {
endpoints = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
description = ''
Map of incoming traffic patterns to local targets.
Keys should be in the format `<protocol>:<port>` or `<protocol>:<port-range>`.
Currently only `tcp` protocol is supported.
Values should be in the format `<protocol>://<host:port>` where protocol
is `http`, `https`, or `tcp`.
'';
example = {
"tcp:443" = "https://localhost:443";
"tcp:8080" = "http://localhost:8080";
};
};
advertised = lib.mkOption {
type = lib.types.nullOr lib.types.bool;
default = null;
description = ''
Whether the service should accept new connections.
Defaults to `true` when not specified.
'';
};
};
}
);
default = { };
description = ''
Services to configure for Tailscale Serve.
Each attribute name should be the service name (without the `svc:` prefix).
The `svc:` prefix will be added automatically.
See <https://tailscale.com/kb/1589/tailscale-services-configuration-file> for details.
'';
example = lib.literalExpression ''
{
web-server = {
endpoints = {
"tcp:443" = "https://localhost:443";
};
};
api = {
endpoints = {
"tcp:8080" = "http://localhost:8080";
};
advertised = true;
};
}
'';
};
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = config.services.tailscale.enable;
message = "services.tailscale.serve requires services.tailscale.enable to be true";
}
{
assertion = cfg.configFile != null || cfg.services != { };
message = "services.tailscale.serve requires either configFile or services to be set";
}
];
systemd.services.tailscale-serve = {
description = "Tailscale Serve Configuration";
after = [
"tailscaled.service"
"tailscaled-autoconnect.service"
"tailscaled-set.service"
];
wants = [ "tailscaled.service" ];
wantedBy = [ "multi-user.target" ];
restartTriggers = [ configFile ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = "${lib.getExe config.services.tailscale.package} serve set-config --all ${configFile}";
};
};
};
}
@@ -813,7 +813,7 @@
}
},
"ungoogled-chromium": {
"version": "144.0.7559.59",
"version": "144.0.7559.96",
"deps": {
"depot_tools": {
"rev": "2e88a3f08bd8c4a0014eae82729beca935f7f188",
@@ -825,16 +825,16 @@
"hash": "sha256-04h38X/hqWwMiAOVsVu4OUrt8N+S7yS/JXc5yvRGo1I="
},
"ungoogled-patches": {
"rev": "144.0.7559.59-1",
"hash": "sha256-u4jg04k/HilI5i8eWS2b+MDvi9RYD1UP8KNNKNWZcfQ="
"rev": "144.0.7559.96-1",
"hash": "sha256-gbEKKGGi6FBhRoCEerSdJJtn5vXaFo9G74lYHDsz0Xs="
},
"npmHash": "sha256-13sgV/5BD7QvDLBAEmoLN5vongw+S5v5znvZcctxhWc="
},
"DEPS": {
"src": {
"url": "https://chromium.googlesource.com/chromium/src.git",
"rev": "cd1d73dd77daadf4581dc29ca73482fc241e079d",
"hash": "sha256-K/dmiy5u+XJIpS6AOTaXDLVYp5qAtfUbfSbGCpt9Cv8=",
"rev": "d7b80622cfab91c265741194e7942eefd2d21811",
"hash": "sha256-Cz3iDS0raJHRh+byrs7GYp6sck54mJq7yzsjLUWDWqA=",
"recompress": true
},
"src/third_party/clang-format/script": {
@@ -944,8 +944,8 @@
},
"src/third_party/dawn": {
"url": "https://dawn.googlesource.com/dawn.git",
"rev": "a8d1e554a9bd35b0418ba7fd6b0bc005250a7703",
"hash": "sha256-GJuT3rqNxvKkRTMvoMi8/QYda0y0RTkZLhb5v9QkwGA="
"rev": "9e0e116de6735ab113349675d31a23c121254fe0",
"hash": "sha256-MsUmRx5fQYWbkPJ/JvaoT//qjPYy5xxZXIa3t5LDxSY="
},
"src/third_party/dawn/third_party/glfw": {
"url": "https://chromium.googlesource.com/external/github.com/glfw/glfw",
@@ -1069,8 +1069,8 @@
},
"src/third_party/devtools-frontend/src": {
"url": "https://chromium.googlesource.com/devtools/devtools-frontend",
"rev": "d5efa4236f8676254c9f39ccfef18bd633de5fd3",
"hash": "sha256-BmwsvTjgYQayFnyT9EfFzpCfbgdTt9xZlsUba0uJelg="
"rev": "a3064782146fc247c488d44c1ad3496b29d55ec4",
"hash": "sha256-vLkWH/EiDHxl/dz4soKybQF1hgud/7MlnDhVPicYJGY="
},
"src/third_party/dom_distiller_js/dist": {
"url": "https://chromium.googlesource.com/chromium/dom-distiller/dist.git",
@@ -1619,8 +1619,8 @@
},
"src/v8": {
"url": "https://chromium.googlesource.com/v8/v8.git",
"rev": "ad25f9ae50a53bee50f459bfee25fb1e6f64adc3",
"hash": "sha256-vyOtnPA3tAeorNOGTDuAnwJ/UtpjeO8z+RSjx9RIFFc="
"rev": "6c2c296f23a5487ccb2536cf7c90d01f35d03077",
"hash": "sha256-gBzwGvl/tqj4Z6acdLN326I80kBLEk+Nn8oN6D193o4="
}
}
}
@@ -1310,11 +1310,11 @@
"vendorHash": "sha256-omxEb+ntQuHDfS2Rmt0rj0BF0Q2T8DLhobLua2uU/0o="
},
"tencentcloudstack_tencentcloud": {
"hash": "sha256-VgmXFRmwgCkGMwcle0zop41pr+uuj4ILlNXIcHQ9n0g=",
"hash": "sha256-kXdu7rtGo4J9waREkVMWqFf4/Ki22fm6p/Nhtts/Ycs=",
"homepage": "https://registry.terraform.io/providers/tencentcloudstack/tencentcloud",
"owner": "tencentcloudstack",
"repo": "terraform-provider-tencentcloud",
"rev": "v1.82.54",
"rev": "v1.82.57",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -43,14 +43,14 @@
python3.pkgs.buildPythonApplication rec {
pname = "gajim";
version = "2.3.6";
version = "2.4.2";
src = fetchFromGitLab {
domain = "dev.gajim.org";
owner = "gajim";
repo = "gajim";
tag = version;
hash = "sha256-Mvi69FI2zRefcCnLsurdVNMxYaqKsUCKgeFxOh6vg/o=";
hash = "sha256-VBo0+8lOXWbi3a9FT0qcEkyoxzVAm+QLrBtHmRjUHbg=";
};
pyproject = true;
@@ -112,6 +112,9 @@ python3.pkgs.buildPythonApplication rec {
qrcode
sqlalchemy
emoji
httpx
h2
truststore
]
++ lib.optionals enableE2E [
pycrypto
@@ -20,8 +20,20 @@ extraMounts:
mountPoint: /sys/firmware/efi/efivars
efi: true
# Ensure the right fmask/dmask is set on the ESP, as it will be
# picked up by nixos-generate-config later
# Btrfs subvolume layout for NixOS
# Empty subvolume for / means no subvolume (top-level) for GRUB compatibility
btrfsSubvolumes:
- mountPoint: /
subvolume: ""
- mountPoint: /home
subvolume: /home
- mountPoint: /nix
subvolume: /nix
# Mount options by filesystem type
# nixos-generate-config picks these up for hardware-configuration.nix
mountOptions:
- filesystem: efi
options: [ fmask=0077, dmask=0077 ]
- filesystem: btrfs
options: [ compress=zstd, noatime ]
@@ -12,11 +12,29 @@ userSwapChoices:
luksGeneration: luks2
defaultFileSystemType: "ext4"
availableFileSystemTypes:
- ext4
- btrfs
- xfs
- f2fs
showNotEncryptedBootMessage: false
bios:
mountPoint: "/boot"
minimumSize: 512MiB
recommendedSize: 1GiB
label: "BOOT"
partitionLayout:
- name: "root"
- name: "boot"
filesystem: "ext4"
mountPoint: "/boot"
size: 1GiB
- name: "root"
filesystem: "unknown"
noEncrypt: false
mountPoint: "/"
size: 100%
@@ -45,6 +45,15 @@ cfgbootbios = """ # Bootloader.
"""
cfgbootbiosbtrfs = """ # Bootloader.
boot.loader.grub.enable = true;
boot.loader.grub.device = "@@bootdev@@";
boot.loader.grub.useOSProber = true;
# Use provided UUIDs instead of blkid probing (required for btrfs subvolumes)
boot.loader.grub.fsIdentifier = "provided";
"""
cfgbootnone = """ # Disable bootloader.
boot.loader.grub.enable = false;
@@ -360,6 +369,46 @@ def catenate(d, key, *values):
d[key] = "".join(values)
def fix_btrfs_subvolumes(hardware_config, partitions):
"""
Fix btrfs subvolume configuration in hardware-configuration.nix.
nixos-generate-config generates incorrect subvol options for btrfs
by setting them to mount points instead of actual subvolume names.
This function corrects the subvol options to match what Calamares configured.
"""
# Map of mount points to their correct btrfs subvolume names
# These match what is configured in mount.conf btrfsSubvolumes
# Root uses top-level (no subvolume) for GRUB compatibility
subvol_map = {
"/home": "home",
"/nix": "nix",
}
# Check if root is actually btrfs
root_is_btrfs = False
for part in partitions:
if part.get("mountPoint") == "/" and part.get("fs") == "btrfs":
root_is_btrfs = True
break
if not root_is_btrfs:
return hardware_config
libcalamares.utils.debug("Fixing btrfs subvolume configuration")
# Fix subvol options for each mount point
# nixos-generate-config may generate "subvol=/" instead of "subvol=@"
for mount_point, correct_subvol in subvol_map.items():
# Match any "subvol=<something>" and replace with correct subvolume
# This handles cases like "subvol=/" or "subvol=/home"
pattern = r'(fileSystems\."{}"[^;]*"subvol=)[^"]*"'.format(re.escape(mount_point))
replacement = r'\g<1>{}"'.format(correct_subvol)
hardware_config = re.sub(pattern, replacement, hardware_config, flags=re.DOTALL)
return hardware_config
def run():
"""NixOS Configuration."""
@@ -388,11 +437,22 @@ def run():
# Pick config parts and prepare substitution
# Check if root filesystem is btrfs
root_is_btrfs = False
for part in gs.value("partitions"):
if part.get("mountPoint") == "/" and part.get("fs") == "btrfs":
root_is_btrfs = True
break
# Check bootloader
if fw_type == "efi":
cfg += cfgbootefi
elif bootdev != "nodev":
cfg += cfgbootbios
# Use btrfs-specific config to avoid blkid issues with subvolumes
if root_is_btrfs:
cfg += cfgbootbiosbtrfs
else:
cfg += cfgbootbios
catenate(variables, "bootdev", bootdev)
else:
cfg += cfgbootnone
@@ -734,9 +794,20 @@ def run():
libcalamares.utils.error(e.output.decode("utf8"))
return (_("nixos-generate-config failed"), _(e.output.decode("utf8")))
# Check for unfree stuff in hardware-configuration.nix
# Read and fix hardware-configuration.nix
hf = open(root_mount_point + "/etc/nixos/hardware-configuration.nix", "r")
htxt = hf.read()
hf.close()
hardware_modified = False
# Fix btrfs subvolume configuration if needed
htxt_fixed = fix_btrfs_subvolumes(htxt, gs.value("partitions"))
if htxt_fixed != htxt:
htxt = htxt_fixed
hardware_modified = True
# Check for unfree stuff in hardware-configuration.nix
search = re.search(r"boot\.extraModulePackages = \[ (.*) \];", htxt)
# Check if any extraModulePackages are defined, and remove if only free packages are allowed
@@ -765,14 +836,17 @@ def run():
)
)
expkgs.remove(pkg)
hardwareout = re.sub(
htxt = re.sub(
r"boot\.extraModulePackages = \[ (.*) \];",
"boot.extraModulePackages = [ {}];".format(
"".join(map(lambda x: x + " ", expkgs))
),
htxt,
)
# Write the hardware-configuration.nix file
hardware_modified = True
# Write the hardware-configuration.nix file if modified
if hardware_modified:
libcalamares.utils.host_env_process_output(
[
"cp",
@@ -780,7 +854,7 @@ def run():
root_mount_point + "/etc/nixos/hardware-configuration.nix",
],
None,
hardwareout,
htxt,
)
# Write the configuration.nix file
@@ -789,6 +863,14 @@ def run():
status = _("Installing NixOS")
libcalamares.job.setprogress(0.3)
try:
subprocess.check_output(
["pkexec", "chmod", "755", root_mount_point],
stderr=subprocess.STDOUT,
)
except subprocess.CalledProcessError as e:
libcalamares.utils.warning("Failed to set permissions on {}: {}".format(root_mount_point, e.output))
# build nixos-install command
nixosInstallCmd = [ "pkexec" ]
nixosInstallCmd.extend(generateProxyStrings())
+16 -6
View File
@@ -10,13 +10,13 @@
stdenv.mkDerivation rec {
pname = "corrosion";
version = "0.5.2";
version = "0.6.1";
src = fetchFromGitHub {
owner = "corrosion-rs";
repo = "corrosion";
rev = "v${version}";
hash = "sha256-sO2U0llrDOWYYjnfoRZE+/ofg3kb+ajFmqvaweRvT7c=";
hash = "sha256-ppuDNObfKhneD9AlnPAvyCRHKW3BidXKglD1j/LE9CM=";
};
buildInputs = lib.optional stdenv.hostPlatform.isDarwin libiconv;
@@ -32,12 +32,22 @@ stdenv.mkDerivation rec {
checkPhase =
let
excludedTests = [
"cbindgen_rust2cpp_build"
"cbindgen_rust2cpp_run_cpp-exe"
"cbindgen_install"
"cbindgen_manual_build"
"cbindgen_manual_run_cpp-exe"
"cbindgen_rust2cpp_auto_build"
"cbindgen_rust2cpp_auto_run_cpp-exe"
"config_discovery_build"
"config_discovery_run_cargo_clean"
"config_discovery_run_config_discovery"
"custom_target_build"
"custom_target_run_rust-bin"
"custom_target_run_test-exe"
"hostbuild_build"
"hostbuild_run_rust-host-program"
"parse_target_triple_build"
"rustup_proxy_build"
"install_lib_build"
"install_lib_run_main-shared"
"install_lib_run_main-static"
];
excludedTestsRegex = lib.concatStringsSep "|" excludedTests;
in
+3 -3
View File
@@ -6,16 +6,16 @@
buildNpmPackage rec {
pname = "eask-cli";
version = "0.12.1";
version = "0.12.2";
src = fetchFromGitHub {
owner = "emacs-eask";
repo = "cli";
rev = version;
hash = "sha256-GUOimlbArD1GbeBPfIgcIcGKGHx+fEp6+CMYsqHB0t8=";
hash = "sha256-n2NL8B6hxQLB8xdRWzclVlqp3B4K7VxgdQ3zgFC1YyI=";
};
npmDepsHash = "sha256-69yGfQuIot0gKZIvLbMqJ0C3qxjqg3TnRDJl4qYHGrQ=";
npmDepsHash = "sha256-kHi/8kPTk9hg5NI4u0b+k9OoocHLX2rY3diXt9WMlRo=";
dontBuild = true;
+2 -2
View File
@@ -16,13 +16,13 @@
}:
let
version = "2.0.08";
version = "2.0.09";
src = fetchFromGitHub {
owner = "Card-Forge";
repo = "forge";
rev = "forge-${version}";
hash = "sha256-BiBvHpEgvDp0u8g87LAt4/1FTc9t8FRAtSvPEedndEg=";
hash = "sha256-TRK6fUOLbI3lLdkSXvvuix0sGbpKLvMmYMx5ozViDRE=";
};
# launch4j downloads and runs a native binary during the package phase.
+2 -2
View File
@@ -10,11 +10,11 @@
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "gemini-cli-bin";
version = "0.24.4";
version = "0.25.0";
src = fetchurl {
url = "https://github.com/google-gemini/gemini-cli/releases/download/v${finalAttrs.version}/gemini.js";
hash = "sha256-xteIV43P5qPOamxsGjCXeCkd1zQmNNbMhvzSWc26DQU=";
hash = "sha256-7Co3DPZs/ZtdLfhZnOcpdFFQPnyeLkvxTZG+tv+FbBQ=";
};
dontUnpack = true;
+2 -2
View File
@@ -12,13 +12,13 @@
}:
let
version = "1.23.3+142";
version = "1.23.6+145";
src = fetchFromGitHub {
owner = "FriesI23";
repo = "mhabit";
tag = "v${version}";
hash = "sha256-jseb1AcM+AygVLFN3O5P2LiQppxOuLWMmBON0FRqPFQ=";
hash = "sha256-9+UXMOogySW3f9LPaj0YSfov1cSgLb3I+jWvAV8yEsM=";
};
in
flutter338.buildFlutterApplication {
+2 -2
View File
@@ -9,13 +9,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "netgen";
version = "1.5.314";
version = "1.5.315";
src = fetchFromGitHub {
owner = "RTimothyEdwards";
repo = "netgen";
tag = finalAttrs.version;
hash = "sha256-g8d/faYjhL6WXSShqWn9n+4cUJ8qKtqyEgyIRsrHo5o=";
hash = "sha256-dXCZm5zVwn23y7DLPSUrTKGMcu/FjdVKsyry59lEt7U=";
};
strictDeps = true;
+2 -2
View File
@@ -10,13 +10,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "NGT";
version = "2.5.0";
version = "2.5.1";
src = fetchFromGitHub {
owner = "yahoojapan";
repo = "NGT";
rev = "v${finalAttrs.version}";
sha256 = "sha256-2cCuVeg7y3butTIAQaYIgx+DPqIFEA2qqVe3exAoAY8=";
sha256 = "sha256-T+ZFmvak1ZfY7I/9QKpC7qqXLq/tBdy+KUjx/0twceg=";
};
nativeBuildInputs = [ cmake ];
+2
View File
@@ -11,6 +11,7 @@
mbedtls,
symlinkJoin,
qt6Packages,
autoAddDriverRunpath,
}:
stdenv.mkDerivation (finalAttrs: {
@@ -35,6 +36,7 @@ stdenv.mkDerivation (finalAttrs: {
nativeBuildInputs = [
pkg-config
autoAddDriverRunpath
]
++ (with qt6Packages; [
qmake
+9 -5
View File
@@ -21,16 +21,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "stalwart-mail" + (lib.optionalString stalwartEnterprise "-enterprise");
version = "0.14.1";
version = "0.15.4";
src = fetchFromGitHub {
owner = "stalwartlabs";
repo = "stalwart";
tag = "v${finalAttrs.version}";
hash = "sha256-Wsk4n6jLOAFhxYb5Hw8XvQem0xccGGoD729nRz3bRF0=";
hash = "sha256-MIy1/8r5CMrTbVTjLFuUneoL3J38kZIgUMweoeaf3L0=";
};
cargoHash = "sha256-LFXpv8/rHQwzdKEyS4VplQSwFUnZrgv0qDIhZUOGfpo=";
cargoHash = "sha256-jVD11wz9Ab1E9KdNG4kp8Jqm2rJ2aUWuFTAOBga6Fgg=";
depsBuildBuild = [
pkg-config
@@ -61,9 +61,10 @@ rustPlatform.buildRustPackage (finalAttrs: {
"postgres"
"mysql"
"rocks"
"elastic"
"s3"
"redis"
"azure"
"nats"
]
++ lib.optionals withFoundationdb [ "foundationdb" ]
++ lib.optionals stalwartEnterprise [ "enterprise" ];
@@ -87,7 +88,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
mkdir -p $out/lib/systemd/system
substitute resources/systemd/stalwart-mail.service $out/lib/systemd/system/stalwart-mail.service \
--replace "__PATH__" "$out"
--replace-fail "__PATH__" "$out"
'';
checkFlags = lib.forEach [
@@ -169,6 +170,9 @@ rustPlatform.buildRustPackage (finalAttrs: {
# left: ElementEnd
# right: Bytes([...])
"responses::tests::parse_responses"
# thread 'store::search_tests' (912386) panicked at tests/src/store/mod.rs:116:10:
# Missing store type. Try running `STORE=<store_type> cargo test`: NotPresent
"store::search_tests"
] (test: "--skip=${test}");
doCheck = !(stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64);
+3 -3
View File
@@ -17,13 +17,13 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "webadmin";
version = "0.1.32";
version = "0.1.37";
src = fetchFromGitHub {
owner = "stalwartlabs";
repo = "webadmin";
tag = "v${finalAttrs.version}";
hash = "sha256-HmQBMU7o0A20SY4tBw4SPVfHFfw8e0JsNQDNdZcex24=";
hash = "sha256-82QvuLkp6j6nJs7jX4NRcnxZ+KNv9RREpM+x8dicfGo=";
};
npmDeps = fetchNpmDeps {
@@ -31,7 +31,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
hash = "sha256-na1HEueX8w7kuDp8LEtJ0nD1Yv39cyk6sEMpS1zix2s=";
};
cargoHash = "sha256-a2+3uNNSLfb81QXjZfftbwpgjORPRSgC056U3FINP4o=";
cargoHash = "sha256-qYIg1BthkpS77I6duYGGX168Y/IO8Mx4SWMQbE0BwDA=";
postPatch = ''
# Using local tailwindcss for compilation
+3 -3
View File
@@ -6,17 +6,17 @@
rustPlatform.buildRustPackage rec {
pname = "worker-build";
version = "0.7.3";
version = "0.7.4";
src = fetchFromGitHub {
owner = "cloudflare";
repo = "workers-rs";
tag = "v${version}";
hash = "sha256-OWtlW9aJwDIfwRK6y1ajx8OLL1mMhbr6RDPuk+8Pyo0=";
hash = "sha256-LeW0CHYBaib81AqftYpW38FFR3P7q7OJE2NmrK9oi9Q=";
fetchSubmodules = true;
};
cargoHash = "sha256-dcew0BCU1NqADquJ08MWLskrNox8LP/fA2QIC6LqETQ=";
cargoHash = "sha256-W1m7W7LepgZ3WPjmZ7qXlu3WnvZkpGO35sHryOFqhfk=";
buildAndTestSubdir = "worker-build";
+2 -2
View File
@@ -15,13 +15,13 @@
stdenv.mkDerivation rec {
pname = "wvkbd";
version = "0.18";
version = "0.19";
src = fetchFromGitHub {
owner = "jjsullivan5196";
repo = "wvkbd";
tag = "v${version}";
hash = "sha256-RfZbPAaf8UB4scUZ9XSL12QZ4UkYMzXqfmNt9ObOgQ0=";
hash = "sha256-oaySfijJBzD+tsaNMmXQ168un9Z0IMwN+7sxAmVr3xs=";
};
nativeBuildInputs = [
@@ -5,23 +5,25 @@
setuptools,
click,
jinja2,
python-dotenv,
pyyaml,
rich,
pytest-cov-stub,
pytestCheckHook,
scikit-learn,
requests,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "agentic-threat-hunting-framework";
version = "0.2.2";
version = "0.4.0";
pyproject = true;
src = fetchFromGitHub {
owner = "Nebulock-Inc";
repo = "agentic-threat-hunting-framework";
tag = "v${version}";
hash = "sha256-rt7WmBCbSqoZBpwGi7dzh8QDw8Iby3LSdavnCot1Hr0=";
tag = "v${finalAttrs.version}";
hash = "sha256-WU58wQGlUgbOqcIE7EKtABNvTKtvTiRO9iJLW4gXDlI=";
};
build-system = [ setuptools ];
@@ -29,6 +31,7 @@ buildPythonPackage rec {
dependencies = [
click
jinja2
python-dotenv
pyyaml
rich
];
@@ -40,6 +43,7 @@ buildPythonPackage rec {
nativeCheckInputs = [
pytest-cov-stub
pytestCheckHook
requests
];
pythonImportsCheck = [ "athf" ];
@@ -47,8 +51,8 @@ buildPythonPackage rec {
meta = {
description = "Framework for agentic threat hunting";
homepage = "https://github.com/Nebulock-Inc/agentic-threat-hunting-framework";
changelog = "https://github.com/Nebulock-Inc/agentic-threat-hunting-framework/releases/tag/${src.tag}";
changelog = "https://github.com/Nebulock-Inc/agentic-threat-hunting-framework/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ fab ];
};
}
})
@@ -18,14 +18,14 @@
buildPythonPackage rec {
pname = "banks";
version = "2.2.0";
version = "2.3.0";
pyproject = true;
src = fetchFromGitHub {
owner = "masci";
repo = "banks";
tag = "v${version}";
hash = "sha256-lzU1SwgZ7EKCmpDtCp4jKDBIdZVB+S1s/Oh3GfZCmtg=";
hash = "sha256-6+BQS9srj2VT2XcGe9g5Ios6g/vk3GcOXgCWEKq6YHI=";
};
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
@@ -41,6 +41,7 @@
pythonOlder,
typing-extensions,
# tests
pytest-retry,
pytest-xdist,
pytestCheckHook,
p7zip,
@@ -48,16 +49,16 @@
httpretty,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "datalad";
version = "1.2.3";
version = "1.3.0";
pyproject = true;
src = fetchFromGitHub {
owner = "datalad";
repo = "datalad";
tag = version;
hash = "sha256-C3e9k4RDFfDMaimZ/7TtAJNzdlfVrKoTHVl0zKL9EjI=";
tag = finalAttrs.version;
hash = "sha256-aTpiwcwRJyUF68+OsT+u9j/cibZEDhmL45I1MSY3Q7E=";
};
postPatch = ''
@@ -76,7 +77,9 @@ buildPythonPackage rec {
];
dependencies =
optional-dependencies.core ++ optional-dependencies.downloaders ++ optional-dependencies.publish;
finalAttrs.passthru.optional-dependencies.core
++ finalAttrs.passthru.optional-dependencies.downloaders
++ finalAttrs.passthru.optional-dependencies.publish;
optional-dependencies = {
core = [
@@ -124,113 +127,43 @@ buildPythonPackage rec {
preCheck = ''
export HOME=$TMPDIR
export DATALAD_TESTS_NONETWORK=1
export PATH="$PATH:$out/bin"
'';
# tests depend on apps in $PATH which only will get installed after the test
disabledTestMarks = [
"flaky"
];
disabledTests = [
# No such file or directory: 'datalad'
"test_script_shims"
"test_cfg_override"
"test_completion"
"test_nested_pushclone_cycle_allplatforms"
"test_create_sub_gh3463"
"test_create_sub_dataset_dot_no_path"
"test_cfg_passthrough"
"test_addurls_stdin_input_command_line"
"test_run_datalad_help"
"test_status_custom_summary_no_repeats"
"test_quoting"
# No such file or directory: 'git-annex-remote-[...]"
"test_create"
"test_ensure_datalad_remote_maybe_enable"
# "git-annex: unable to use external special remote git-annex-remote-datalad"
"test_ria_postclonecfg"
"test_ria_postclone_noannex"
"test_ria_push"
"test_basic_scenario"
"test_annex_get_from_subdir"
"test_ensure_datalad_remote_init_and_enable_needed"
"test_ensure_datalad_remote_maybe_enable[False]"
"test_ensure_datalad_remote_maybe_enable[True]"
"test_create_simple"
"test_create_alias"
"test_storage_only"
"test_initremote"
"test_read_access"
"test_ephemeral"
"test_initremote_basic_fileurl"
"test_initremote_basic_httpurl"
"test_remote_layout"
"test_version_check"
"test_gitannex_local"
"test_push_url"
"test_url_keys"
"test_obtain_permission_root"
"test_source_candidate_subdataset"
"test_update_fetch_all"
"test_add_archive_dirs"
"test_add_archive_content"
"test_add_archive_content_strip_leading"
"test_add_archive_content_zip"
"test_add_archive_content_absolute_path"
"test_add_archive_use_archive_dir"
"test_add_archive_single_file"
"test_add_delete"
"test_add_archive_leading_dir"
"test_add_delete_after_and_drop"
"test_add_delete_after_and_drop_subdir"
"test_override_existing_under_git"
"test_copy_file_datalad_specialremote"
"test_download_url_archive"
"test_download_url_archive_from_subdir"
"test_download_url_archive_trailing_separator"
"test_download_url_need_datalad_remote"
"test_datalad_credential_helper - assert False"
# need internet access
"test_clone_crcns"
"test_clone_datasets_root"
# Tries to run `git` and fails
"test_reckless"
"test_autoenabled_remote_msg"
"test_ria_http_storedataladorg"
"test_gin_cloning"
"test_nonuniform_adjusted_subdataset"
"test_install_datasets_root"
"test_install_simple_local"
"test_install_dataset_from_just_source"
"test_install_dataset_from_just_source_via_path"
"test_datasets_datalad_org"
"test_get_cached_dataset"
"test_cached_dataset"
"test_cached_url"
"test_anonymous_s3"
"test_protocols"
"test_get_versioned_url_anon"
"test_install_recursive_github"
"test_failed_install_multiple"
"test_create"
"test_subsuperdataset_save"
# Tries to spawn a subshell and fails
"test_shell_completion_source"
# Times out
"test_rerun_unrelated_nonrun_left_run_right"
# Top five slowest (2/3 of total runtime)
"test_files_split"
"test_gitannex_local"
"test_save_hierarchy"
"test_recurse_existing"
"test_source_candidate_subdataset"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
# pbcopy not found
"test_wtf"
# CommandError: 'git -c diff.ignoreSubmodules=none -c core.quotepath=false ls-files -z -m -d' failed with exitcode 128
"test_subsuperdataset_save"
]
++ lib.optionals (pythonAtLeast "3.14") [
# For all: https://github.com/datalad/datalad/issues/7781
# AssertionError: `assert 1 == 0` (refcount error)
"test_GitRepo_flyweight"
"test_Dataset_flyweight"
"test_AnnexRepo_flyweight"
# TypeError: cannot pickle '_thread.lock' object
"test_popen_invocation"
# datalad.runner.exception.CommandError: '/python3.14 -i -u -q -']' timed out after 0.5 seconds
"test_asyncio_loop_noninterference1"
# hangs
"test_keyring"
];
nativeCheckInputs = [
p7zip
pytest-retry
pytest-xdist
pytestCheckHook
git-annex
@@ -243,15 +176,20 @@ buildPythonPackage rec {
"-Wignore::DeprecationWarning"
];
# Tests use ports on localhost
__darwinAllowLocalNetworking = true;
pythonImportsCheck = [ "datalad" ];
meta = {
description = "Keep code, data, containers under control with git and git-annex";
homepage = "https://www.datalad.org";
changelog = "https://github.com/datalad/datalad/blob/${finalAttrs.src.tag}/CHANGELOG.md";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [
renesat
malik
sarahec
];
};
}
})
@@ -10,15 +10,15 @@
setuptools,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "google-cloud-org-policy";
version = "1.15.0";
version = "1.16.0";
pyproject = true;
src = fetchPypi {
pname = "google_cloud_org_policy";
inherit version;
hash = "sha256-Jx0WoQ51NH6s5g0CzeMisrG2E7zJmRcQng6/KkECJTo=";
inherit (finalAttrs) version;
hash = "sha256-xyFHEn2I2YCa+HOLKr40gG6sUpw83FeqkVzAihuEKhM=";
};
build-system = [ setuptools ];
@@ -45,8 +45,8 @@ buildPythonPackage rec {
meta = {
description = "Protobufs for Google Cloud Organization Policy";
homepage = "https://github.com/googleapis/python-org-policy";
changelog = "https://github.com/googleapis/python-org-policy/blob/v${version}/CHANGELOG.md";
changelog = "https://github.com/googleapis/python-org-policy/blob/v${finalAttrs.version}/CHANGELOG.md";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ austinbutler ];
};
}
})
@@ -16,7 +16,7 @@
buildPythonPackage rec {
pname = "nbxmpp";
version = "6.4.0";
version = "7.0.0";
pyproject = true;
src = fetchFromGitLab {
@@ -24,7 +24,7 @@ buildPythonPackage rec {
owner = "gajim";
repo = "python-nbxmpp";
tag = version;
hash = "sha256-q910WbBp0TBqXw8WfYniliVGnr4Hi6dDhVDqZszSL0c=";
hash = "sha256-NzSXvuPf7PZbMPgD3nhPgTH4Vd8DVx49fjf7cPcvywc=";
};
nativeBuildInputs = [
@@ -40,12 +40,7 @@ buildPythonPackage rec {
idna
libsoup_3
packaging
(pygobject3.overrideAttrs (o: {
src = fetchurl {
url = "mirror://gnome/sources/pygobject/3.52/pygobject-3.52.3.tar.gz";
hash = "sha256-AOQn0pHpV0Yqj61lmp+ci+d2/4Kot2vfQC8eruwIbYI=";
};
}))
pygobject3
pyopenssl
];
@@ -2,7 +2,7 @@
lib,
buildPythonPackage,
cryptography,
fetchPypi,
fetchFromGitLab,
protobuf,
pytestCheckHook,
setuptools,
@@ -10,12 +10,15 @@
buildPythonPackage rec {
pname = "omemo-dr";
version = "1.0.1";
version = "1.2.0";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-KoqMdyMdc5Sb3TdSeNTVomElK9ruUstiQayyUcIC02E=";
src = fetchFromGitLab {
domain = "dev.gajim.org";
owner = "gajim";
repo = "omemo-dr";
tag = "v${version}";
hash = "sha256-8+uBO7Nl6YcEwthWmChqCTLvUelF8QJl+dHzkqbPVqM=";
};
nativeBuildInputs = [ setuptools ];
@@ -1,8 +1,8 @@
{
stdenv,
lib,
buildPythonPackage,
fetchFromGitHub,
poetry-core,
pytestCheckHook,
chardet,
cssselect,
@@ -13,37 +13,32 @@
buildPythonPackage rec {
pname = "readability-lxml";
version = "0.8.4";
format = "setuptools";
version = "0.8.4.1";
pyproject = true;
src = fetchFromGitHub {
owner = "buriy";
repo = "python-readability";
rev = "v${version}";
hash = "sha256-6A4zpe3GvHHf235Ovr2RT/cJgj7bWasn96yqy73pVgY=";
rev = "${version}";
hash = "sha256-tL0OnvCrbrpBvcy+6RJ+u/BDdra+MnVT51DSAeYxJbc=";
};
propagatedBuildInputs = [
build-system = [ poetry-core ];
pythonRelaxDeps = [ "lxml" ];
dependencies = [
chardet
cssselect
lxml
lxml-html-clean
];
postPatch = ''
substituteInPlace setup.py --replace 'sys.platform == "darwin"' "False"
'';
nativeCheckInputs = [
pytestCheckHook
timeout-decorator
];
disabledTests = lib.optionals stdenv.hostPlatform.isDarwin [
# Test is broken on darwin. Fix in master from https://github.com/buriy/python-readability/pull/178
"test_many_repeated_spaces"
];
meta = {
description = "Fast python port of arc90's readability tool";
homepage = "https://github.com/buriy/python-readability";
@@ -40,13 +40,13 @@
}:
let
version = "39.0.0";
version = "39.1.0";
src = fetchFromGitHub {
owner = "rucio";
repo = "rucio";
tag = version;
hash = "sha256-3KRcoS1VwjRynBgDIvCRu1dOIVF8mlAG7P17ROLE1ZY=";
hash = "sha256-ef8rVRDVkkEcsQ5AKz1W2L21abyY2dfHMWh2Rv0oxPA=";
};
in
buildPythonPackage {