Merge staging-next into staging

This commit is contained in:
nixpkgs-ci[bot] 2026-06-06 00:45:06 +00:00 committed by GitHub
commit 68882f66af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
130 changed files with 1344 additions and 3035 deletions

View file

@ -11084,7 +11084,7 @@
name = "Hugo Tavares Reis";
};
httprafa = {
email = "rafael.kienitz@gmail.com";
email = "rafa.kienitz@proton.me";
github = "HttpRafa";
githubId = 60099368;
name = "Rafael Kienitz";

View file

@ -532,6 +532,17 @@ def install_bootloader(args: argparse.Namespace) -> None:
for profile in get_profiles():
gens += get_generations(profile)
if not gens:
# With zero generations we would garbage-collect every kernel,
# initrd and loader entry off the ESP, leaving the system
# unbootable.
print(
"error: no system generations found in /nix/var/nix/profiles, "
"refusing to remove all boot loader entries",
file=sys.stderr,
)
sys.exit(1)
boot_files: BootFileList = []
critical_paths: set[Path] = set()

View file

@ -944,7 +944,7 @@ in
lomiri-system-settings = runTest ./lomiri-system-settings.nix;
lorri = handleTest ./lorri/default.nix { };
luks = runTest ./luks.nix;
lvm2 = handleTest ./lvm2 { };
lvm2 = import ./lvm2 { inherit pkgs runTest; };
lxc = runTestOn [ "x86_64-linux" "aarch64-linux" ] ./lxc;
lxd-image-server = runTest ./lxd-image-server.nix;
lxqt = runTest ./lxqt.nix;
@ -1851,7 +1851,7 @@ in
zammad = runTest ./zammad.nix;
zenohd = runTest ./zenohd.nix;
zeronet-conservancy = runTest ./zeronet-conservancy.nix;
zfs = handleTest ./zfs.nix { };
zfs = import ./zfs.nix { inherit system pkgs runTest; };
zigbee2mqtt = runTest ./zigbee2mqtt.nix;
zipline = runTest ./zipline.nix;
zoneminder = runTest ./zoneminder.nix;

View file

@ -38,7 +38,7 @@
resp = json.loads(machine.succeed("curl localhost:8000/api/getconfig"))
assert resp["success"] is False
assert resp["reason"] == "No valid authentication was found"
assert resp["reason"] == "No valid authentication."
resp = json.loads(machine.succeed("curl -H 'X-API-Key: api_key' localhost:8000/api/getconfig"))
expected_version = "${config.nodes.machine.services.chhoto-url.package.version}"

View file

@ -44,6 +44,9 @@
# Wait for mounts
machine.wait_for_unit("local-fs.target")
# Sometimes gocryptfs files are slow to appear
machine.wait_for_file("/plain/data.txt")
# Ensure the canary is alive
machine.succeed("grep -q success /plain/data.txt")

View file

@ -61,47 +61,63 @@ in
};
};
testScript = ''
# Encrypt key with empty key so boot should try keyfile and then fallback to empty passphrase
testScript =
{ nodes, ... }:
let
toplevel = nodes.machine.system.build.toplevel;
boot-luks-missing-keyfile =
nodes.machine.specialisation.boot-luks-missing-keyfile.configuration.system.build.toplevel;
boot-luks-wrong-keyfile =
nodes.machine.specialisation.boot-luks-wrong-keyfile.configuration.system.build.toplevel;
in
# python
''
# Encrypt key with empty key so boot should try keyfile and then fallback to empty passphrase
def grub_select_boot_luks_wrong_key_file():
"""
Selects "boot-luks" from the GRUB menu
to trigger a login request.
"""
machine.send_monitor_command("sendkey down")
machine.send_monitor_command("sendkey down")
machine.send_monitor_command("sendkey ret")
def grub_select_boot_luks_wrong_key_file():
"""
Selects "boot-luks" from the GRUB menu
to trigger a login request.
"""
machine.send_monitor_command("sendkey down")
machine.send_monitor_command("sendkey down")
machine.send_monitor_command("sendkey ret")
def grub_select_boot_luks_missing_key_file():
"""
Selects "boot-luks" from the GRUB menu
to trigger a login request.
"""
machine.send_monitor_command("sendkey down")
machine.send_monitor_command("sendkey ret")
def grub_select_boot_luks_missing_key_file():
"""
Selects "boot-luks" from the GRUB menu
to trigger a login request.
"""
machine.send_monitor_command("sendkey down")
machine.send_monitor_command("sendkey ret")
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo "" | cryptsetup luksFormat /dev/vdb --batch-mode")
machine.succeed("echo "" | cryptsetup luksOpen /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks-wrong-keyfile.conf")
machine.succeed("sync")
machine.crash()
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo "" | cryptsetup luksFormat /dev/vdb --batch-mode")
machine.succeed("echo "" | cryptsetup luksOpen /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("${boot-luks-wrong-keyfile}/bin/switch-to-configuration boot")
machine.succeed("sync")
machine.crash()
# Check if rootfs is on /dev/mapper/cryptroot
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
# Check if rootfs is on /dev/mapper/cryptroot
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
# Choose boot-luks-missing-keyfile specialisation
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks-missing-keyfile.conf")
machine.succeed("sync")
machine.crash()
# Choose boot-luks-missing-keyfile specialisation
machine.succeed(
"mkdir -p /nix/var/nix/profiles",
"ln -sfn ${toplevel} /nix/var/nix/profiles/system-1-link",
"ln -sfn system-1-link /nix/var/nix/profiles/system",
)
# Check if rootfs is on /dev/mapper/cryptroot
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
'';
machine.succeed("${boot-luks-missing-keyfile}/bin/switch-to-configuration boot")
machine.succeed("sync")
machine.crash()
# Check if rootfs is on /dev/mapper/cryptroot
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
'';
}

View file

@ -1,6 +1,6 @@
# Tests LUKS specifically with scripted stage 1. Remove in 26.11.
{ lib, pkgs, ... }:
{ lib, ... }:
{
name = "luks";
@ -47,41 +47,59 @@
enableOCR = true;
testScript = ''
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
testScript =
{ nodes, ... }:
let
toplevel = nodes.machine.system.build.toplevel;
boot-luks = nodes.machine.specialisation.boot-luks.configuration.system.build.toplevel;
boot-luks-custom-keymap =
nodes.machine.specialisation.boot-luks-custom-keymap.configuration.system.build.toplevel;
in
# python
''
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdc -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdc cryptroot2")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot2")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdc -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdc cryptroot2")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot2")
# Boot from the encrypted disk
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks.conf")
machine.succeed("sync")
machine.crash()
# Boot from the encrypted disk
machine.succeed("${boot-luks}/bin/switch-to-configuration boot")
machine.succeed("sync")
machine.crash()
# Boot and decrypt the disk
machine.start()
machine.wait_for_text("Passphrase for")
machine.send_chars("supersecret\n")
machine.wait_for_unit("multi-user.target")
# Boot and decrypt the disk
machine.start()
machine.wait_for_text("Passphrase for")
machine.send_chars("supersecret\n")
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
# Boot from the encrypted disk with custom keymap
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks-custom-keymap.conf")
machine.succeed("sync")
machine.crash()
# The new root is empty, so it has no /nix/var/nix/profiles. Without a
# system profile, systemd-boot-builder finds zero generations and
# bails. So we manually create the one profile link that we need.
machine.succeed(
"mkdir -p /nix/var/nix/profiles",
"ln -sfn ${toplevel} /nix/var/nix/profiles/system-1-link",
"ln -sfn system-1-link /nix/var/nix/profiles/system",
)
# Boot and decrypt the disk
machine.start()
machine.wait_for_text("Passphrase for")
machine.send_chars("havfkhfrkfl\n")
machine.wait_for_unit("multi-user.target")
# Boot from the encrypted disk with custom keymap
machine.succeed("${boot-luks-custom-keymap}/bin/switch-to-configuration boot")
machine.succeed("sync")
machine.crash()
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
'';
# Boot and decrypt the disk
machine.start()
machine.wait_for_text("Passphrase for")
machine.send_chars("havfkhfrkfl\n")
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
'';
}

View file

@ -1,8 +1,6 @@
{
system ? builtins.currentSystem,
config ? { },
pkgs ? import ../../.. { inherit system config; },
lib ? pkgs.lib,
pkgs,
runTest,
kernelVersionsToTest ? [
"5.10"
"5.15"
@ -15,38 +13,36 @@
# For quickly running a test, the nixosTests.lvm2.lvm-thinpool-linux-latest attribute is recommended
let
tests =
let
callTest = p: lib.flip (import p) { inherit system pkgs; };
in
{
thinpool = {
test = callTest ./thinpool.nix;
kernelFilter = lib.id;
};
# we would like to test all versions, but the kernel module currently does not compile against the other versions
vdo = {
test = callTest ./vdo.nix;
kernelFilter = lib.filter (v: v == "latest");
};
inherit (pkgs) lib;
# systemd in stage 1
raid-sd-stage-1 = {
test = callTest ./systemd-stage-1.nix;
kernelFilter = lib.filter (v: v != "5.15");
flavour = "raid";
};
thinpool-sd-stage-1 = {
test = callTest ./systemd-stage-1.nix;
kernelFilter = lib.id;
flavour = "thinpool";
};
vdo-sd-stage-1 = {
test = callTest ./systemd-stage-1.nix;
kernelFilter = lib.filter (v: v == "latest");
flavour = "vdo";
};
tests = {
thinpool = {
test = ./thinpool.nix;
kernelFilter = lib.id;
};
# we would like to test all versions, but the kernel module currently does not compile against the other versions
vdo = {
test = ./vdo.nix;
kernelFilter = lib.filter (v: v == "latest");
};
# systemd in stage 1
raid-sd-stage-1 = {
test = ./systemd-stage-1.nix;
kernelFilter = lib.filter (v: v != "5.15");
flavour = "raid";
};
thinpool-sd-stage-1 = {
test = ./systemd-stage-1.nix;
kernelFilter = lib.id;
flavour = "thinpool";
};
vdo-sd-stage-1 = {
test = ./systemd-stage-1.nix;
kernelFilter = lib.filter (v: v == "latest");
flavour = "vdo";
};
};
in
lib.listToAttrs (
lib.filter (x: x.value != { }) (
@ -61,18 +57,17 @@ lib.listToAttrs (
lib.flip lib.mapAttrsToList tests (
name: t:
lib.nameValuePair "lvm-${name}-linux-${v'}" (
lib.optionalAttrs (builtins.elem version (t.kernelFilter kernelVersionsToTest)) (
t.test (
{
kernelPackages = pkgs."linuxPackages_${v'}";
inherit mkXfsFlags;
}
// removeAttrs t [
"test"
"kernelFilter"
]
)
)
lib.optionalAttrs (builtins.elem version (t.kernelFilter kernelVersionsToTest)) (runTest {
imports = [ t.test ];
_module.args = {
kernelPackages = pkgs."linuxPackages_${v'}";
inherit mkXfsFlags;
}
// removeAttrs t [
"test"
"kernelFilter"
];
})
)
)
)

View file

@ -1,7 +1,9 @@
{
lib,
kernelPackages ? null,
flavour,
mkXfsFlags ? "",
...
}:
let
preparationCode =
@ -66,57 +68,61 @@ let
.${flavour};
in
import ../make-test-python.nix (
{ pkgs, lib, ... }:
{
name = "lvm2-${flavour}-systemd-stage-1";
meta.maintainers = with lib.maintainers; [
das_j
helsinki-Jo
];
{
name = "lvm2-${flavour}-systemd-stage-1";
meta.maintainers = with lib.maintainers; [
das_j
helsinki-Jo
];
nodes.machine =
{ pkgs, lib, ... }:
{
imports = [ extraConfig ];
# Use systemd-boot
virtualisation = {
emptyDiskImages = [
8192
8192
];
useBootLoader = true;
useEFIBoot = true;
# To boot off the LVM disk, we need to have a init script which comes from the Nix store.
mountHostNixStore = true;
};
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
nodes.machine =
{ pkgs, lib, ... }:
{
imports = [ extraConfig ];
# Use systemd-boot
virtualisation = {
emptyDiskImages = [
8192
8192
];
useBootLoader = true;
useEFIBoot = true;
# To boot off the LVM disk, we need to have a init script which comes from the Nix store.
mountHostNixStore = true;
};
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
environment.systemPackages = with pkgs; [ xfsprogs ];
boot = {
initrd.systemd = {
enable = true;
emergencyAccess = true;
};
initrd.services.lvm.enable = true;
kernelPackages = lib.mkIf (kernelPackages != null) kernelPackages;
};
specialisation.boot-lvm.configuration.virtualisation = {
useDefaultFilesystems = false;
fileSystems = {
"/" = {
device = "/dev/test_vg/test_lv";
fsType = "xfs";
};
};
rootDevice = "/dev/test_vg/test_lv";
environment.systemPackages = with pkgs; [ xfsprogs ];
boot = {
initrd.systemd = {
enable = true;
emergencyAccess = true;
};
initrd.services.lvm.enable = true;
kernelPackages = lib.mkIf (kernelPackages != null) kernelPackages;
};
testScript = ''
specialisation.boot-lvm.configuration.virtualisation = {
useDefaultFilesystems = false;
fileSystems = {
"/" = {
device = "/dev/test_vg/test_lv";
fsType = "xfs";
};
};
rootDevice = "/dev/test_vg/test_lv";
};
};
testScript =
{ nodes, ... }:
let
boot-lvm = nodes.machine.specialisation.boot-lvm.configuration.system.build.toplevel;
in
# python
''
machine.wait_for_unit("multi-user.target")
# Create a VG for the root
${preparationCode}
@ -124,7 +130,7 @@ import ../make-test-python.nix (
machine.succeed("mkdir -p /mnt && mount /dev/test_vg/test_lv /mnt && echo hello > /mnt/test && umount /mnt")
# Boot from LVM
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-lvm.conf")
machine.succeed("${boot-lvm}/bin/switch-to-configuration boot")
machine.succeed("sync")
machine.crash()
machine.wait_for_unit("multi-user.target")
@ -135,5 +141,4 @@ import ../make-test-python.nix (
assert "hello" in machine.succeed("cat /test")
${extraCheck}
'';
}
)
}

View file

@ -1,49 +1,48 @@
{
lib,
kernelPackages ? null,
mkXfsFlags ? "",
...
}:
import ../make-test-python.nix (
{ pkgs, lib, ... }:
{
name = "lvm2-thinpool";
meta.maintainers = with lib.maintainers; [
das_j
helsinki-Jo
];
{
name = "lvm2-thinpool";
meta.maintainers = with lib.maintainers; [
das_j
helsinki-Jo
];
nodes.machine =
{ pkgs, lib, ... }:
{
virtualisation.emptyDiskImages = [ 4096 ];
services.lvm = {
boot.thin.enable = true;
dmeventd.enable = true;
};
environment.systemPackages = with pkgs; [ xfsprogs ];
environment.etc."lvm/lvm.conf".text = ''
activation/thin_pool_autoextend_percent = 10
activation/thin_pool_autoextend_threshold = 80
'';
boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; };
nodes.machine =
{ pkgs, lib, ... }:
{
virtualisation.emptyDiskImages = [ 4096 ];
services.lvm = {
boot.thin.enable = true;
dmeventd.enable = true;
};
testScript =
let
mkXfsFlags =
lib.optionalString (lib.versionOlder kernelPackages.kernel.version "5.10") " -m bigtime=0 -m inobtcount=0 "
+ lib.optionalString (lib.versionOlder kernelPackages.kernel.version "5.19") " -i nrext64=0 ";
in
''
machine.succeed("vgcreate test_vg /dev/vdb")
machine.succeed("lvcreate -L 512M -T test_vg/test_thin_pool")
machine.succeed("lvcreate -n test_lv -V 16G --thinpool test_thin_pool test_vg")
machine.succeed("mkfs.xfs ${mkXfsFlags} /dev/test_vg/test_lv")
machine.succeed("mkdir /mnt; mount /dev/test_vg/test_lv /mnt")
assert "/dev/mapper/test_vg-test_lv" == machine.succeed("findmnt -no SOURCE /mnt").strip()
machine.succeed("dd if=/dev/zero of=/mnt/empty.file bs=1M count=1024")
machine.succeed("journalctl -u dm-event.service | grep \"successfully resized\"")
machine.succeed("umount /mnt")
machine.succeed("vgchange -a n")
environment.systemPackages = with pkgs; [ xfsprogs ];
environment.etc."lvm/lvm.conf".text = ''
activation/thin_pool_autoextend_percent = 10
activation/thin_pool_autoextend_threshold = 80
'';
}
)
boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; };
};
testScript =
let
mkXfsFlags =
lib.optionalString (lib.versionOlder kernelPackages.kernel.version "5.10") " -m bigtime=0 -m inobtcount=0 "
+ lib.optionalString (lib.versionOlder kernelPackages.kernel.version "5.19") " -i nrext64=0 ";
in
''
machine.succeed("vgcreate test_vg /dev/vdb")
machine.succeed("lvcreate -L 512M -T test_vg/test_thin_pool")
machine.succeed("lvcreate -n test_lv -V 16G --thinpool test_thin_pool test_vg")
machine.succeed("mkfs.xfs ${mkXfsFlags} /dev/test_vg/test_lv")
machine.succeed("mkdir /mnt; mount /dev/test_vg/test_lv /mnt")
assert "/dev/mapper/test_vg-test_lv" == machine.succeed("findmnt -no SOURCE /mnt").strip()
machine.succeed("dd if=/dev/zero of=/mnt/empty.file bs=1M count=1024")
machine.succeed("journalctl -u dm-event.service | grep \"successfully resized\"")
machine.succeed("umount /mnt")
machine.succeed("vgchange -a n")
'';
}

View file

@ -1,35 +1,34 @@
{
lib,
kernelPackages ? null,
mkXfsFlags ? "",
...
}:
import ../make-test-python.nix (
{ pkgs, lib, ... }:
{
name = "lvm2-vdo";
meta.maintainers = [ ];
{
name = "lvm2-vdo";
meta.maintainers = [ ];
nodes.machine =
{ pkgs, lib, ... }:
{
# Minimum required size for VDO volume: 5063921664 bytes
virtualisation.emptyDiskImages = [ 8192 ];
services.lvm = {
boot.vdo.enable = true;
dmeventd.enable = true;
};
environment.systemPackages = with pkgs; [ xfsprogs ];
boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; };
nodes.machine =
{ pkgs, lib, ... }:
{
# Minimum required size for VDO volume: 5063921664 bytes
virtualisation.emptyDiskImages = [ 8192 ];
services.lvm = {
boot.vdo.enable = true;
dmeventd.enable = true;
};
environment.systemPackages = with pkgs; [ xfsprogs ];
boot = lib.mkIf (kernelPackages != null) { inherit kernelPackages; };
};
testScript = ''
machine.succeed("vgcreate test_vg /dev/vdb")
machine.succeed("lvcreate --type vdo -n vdo_lv -L 6G -V 12G test_vg/vdo_pool_lv")
machine.succeed("mkfs.xfs ${mkXfsFlags} -K /dev/test_vg/vdo_lv")
machine.succeed("mkdir /mnt; mount /dev/test_vg/vdo_lv /mnt")
assert "/dev/mapper/test_vg-vdo_lv" == machine.succeed("findmnt -no SOURCE /mnt").strip()
machine.succeed("umount /mnt")
machine.succeed("vdostats")
machine.succeed("vgchange -a n")
'';
}
)
testScript = ''
machine.succeed("vgcreate test_vg /dev/vdb")
machine.succeed("lvcreate --type vdo -n vdo_lv -L 6G -V 12G test_vg/vdo_pool_lv")
machine.succeed("mkfs.xfs ${mkXfsFlags} -K /dev/test_vg/vdo_lv")
machine.succeed("mkdir /mnt; mount /dev/test_vg/vdo_lv /mnt")
assert "/dev/mapper/test_vg-vdo_lv" == machine.succeed("findmnt -no SOURCE /mnt").strip()
machine.succeed("umount /mnt")
machine.succeed("vdostats")
machine.succeed("vgchange -a n")
'';
}

View file

@ -1,4 +1,4 @@
{ lib, pkgs, ... }:
{ lib, ... }:
{
name = "systemd-initrd-btrfs-raid";
@ -33,21 +33,27 @@
};
};
testScript = ''
# Create RAID
machine.succeed("mkfs.btrfs -d raid0 /dev/vdb /dev/vdc")
machine.succeed("mkdir -p /mnt && mount /dev/vdb /mnt && echo hello > /mnt/test && umount /mnt")
testScript =
{ nodes, ... }:
let
boot-btrfs-raid = nodes.machine.specialisation.boot-btrfs-raid.configuration.system.build.toplevel;
in
# python
''
# Create RAID
machine.succeed("mkfs.btrfs -d raid0 /dev/vdb /dev/vdc")
machine.succeed("mkdir -p /mnt && mount /dev/vdb /mnt && echo hello > /mnt/test && umount /mnt")
# Boot from the RAID
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-btrfs-raid.conf")
machine.succeed("sync")
machine.crash()
machine.wait_for_unit("multi-user.target")
# Boot from the RAID
machine.succeed("${boot-btrfs-raid}/bin/switch-to-configuration boot")
machine.succeed("sync")
machine.crash()
machine.wait_for_unit("multi-user.target")
# Ensure we have successfully booted from the RAID
assert "(initrd)" in machine.succeed("systemd-analyze") # booted with systemd in stage 1
assert "/dev/vdb on / type btrfs" in machine.succeed("mount")
assert "hello" in machine.succeed("cat /test")
assert "Total devices 2" in machine.succeed("btrfs filesystem show")
'';
# Ensure we have successfully booted from the RAID
assert "(initrd)" in machine.succeed("systemd-analyze") # booted with systemd in stage 1
assert "/dev/vdb on / type btrfs" in machine.succeed("mount")
assert "hello" in machine.succeed("cat /test")
assert "Total devices 2" in machine.succeed("btrfs filesystem show")
'';
}

View file

@ -1,6 +1,5 @@
{
lib,
pkgs,
hostPkgs,
...
}:
@ -43,19 +42,25 @@
};
};
testScript = ''
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("PASSWORD=supersecret SYSTEMD_LOG_LEVEL=debug systemd-cryptenroll --fido2-device=auto /dev/vdb |& systemd-cat")
testScript =
{ nodes, ... }:
let
boot-luks = nodes.machine.specialisation.boot-luks.configuration.system.build.toplevel;
in
# python
''
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("PASSWORD=supersecret SYSTEMD_LOG_LEVEL=debug systemd-cryptenroll --fido2-device=auto /dev/vdb |& systemd-cat")
# Boot from the encrypted disk
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks.conf")
machine.succeed("sync")
machine.crash()
# Boot from the encrypted disk
machine.succeed("${boot-luks}/bin/switch-to-configuration boot")
machine.succeed("sync")
machine.crash()
# Boot and decrypt the disk
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
'';
# Boot and decrypt the disk
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
'';
}

View file

@ -42,20 +42,26 @@ in
};
};
testScript = ''
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("cryptsetup luksFormat -q --iter-time=1 -d ${keyfile} /dev/vdb")
machine.succeed("cryptsetup luksOpen --key-file ${keyfile} /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
testScript =
{ nodes, ... }:
let
boot-luks = nodes.machine.specialisation.boot-luks.configuration.system.build.toplevel;
in
# python
''
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("cryptsetup luksFormat -q --iter-time=1 -d ${keyfile} /dev/vdb")
machine.succeed("cryptsetup luksOpen --key-file ${keyfile} /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
# Boot from the encrypted disk
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks.conf")
machine.succeed("sync")
machine.crash()
# Boot from the encrypted disk
machine.succeed("${boot-luks}/bin/switch-to-configuration boot")
machine.succeed("sync")
machine.crash()
# Boot and decrypt the disk
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
'';
# Boot and decrypt the disk
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
'';
}

View file

@ -1,4 +1,4 @@
{ lib, pkgs, ... }:
{ lib, ... }:
{
name = "systemd-initrd-luks-password";
@ -39,30 +39,36 @@
};
};
testScript = ''
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
testScript =
{ nodes, ... }:
let
boot-luks = nodes.machine.specialisation.boot-luks.configuration.system.build.toplevel;
in
# python
''
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdc -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdc cryptroot2")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot2")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdc -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdc cryptroot2")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot2")
# Boot from the encrypted disk
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks.conf")
machine.succeed("sync")
machine.crash()
# Boot from the encrypted disk
machine.succeed("${boot-luks}/bin/switch-to-configuration boot")
machine.succeed("sync")
machine.crash()
# Boot and decrypt the disk
machine.start()
machine.wait_for_console_text("Please enter passphrase for disk cryptroot")
machine.send_console("supersecret\n")
machine.wait_for_unit("multi-user.target")
# Boot and decrypt the disk
machine.start()
machine.wait_for_console_text("Please enter passphrase for disk cryptroot")
machine.send_console("supersecret\n")
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount"), "/dev/mapper/cryptroot do not appear in mountpoints list"
assert "/dev/mapper/cryptroot2 on /cryptroot2 type ext4" in machine.succeed("mount")
'';
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount"), "/dev/mapper/cryptroot do not appear in mountpoints list"
assert "/dev/mapper/cryptroot2 on /cryptroot2 type ext4" in machine.succeed("mount")
'';
}

View file

@ -35,21 +35,27 @@
};
};
testScript = ''
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("PASSWORD=supersecret SYSTEMD_LOG_LEVEL=debug systemd-cryptenroll --tpm2-pcrs= --tpm2-device=auto /dev/vdb |& systemd-cat")
testScript =
{ nodes, ... }:
let
boot-luks = nodes.machine.specialisation.boot-luks.configuration.system.build.toplevel;
in
# python
''
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("PASSWORD=supersecret SYSTEMD_LOG_LEVEL=debug systemd-cryptenroll --tpm2-pcrs= --tpm2-device=auto /dev/vdb |& systemd-cat")
# Boot from the encrypted disk
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks.conf")
machine.succeed("sync")
machine.crash()
# Boot from the encrypted disk
machine.succeed("${boot-luks}/bin/switch-to-configuration boot")
machine.succeed("sync")
machine.crash()
# Boot and decrypt the disk
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
'';
# Boot and decrypt the disk
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
'';
}

View file

@ -82,33 +82,39 @@ in
};
};
testScript = ''
machine.wait_for_unit("multi-user.target")
testScript =
{ nodes, ... }:
let
boot-luks = nodes.machine.specialisation.boot-luks.configuration.system.build.toplevel;
in
# python
''
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n ${passphrase} | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("echo -n ${passphrase} | cryptsetup luksOpen -q /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("echo -n ${passphrase} | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("echo -n ${passphrase} | cryptsetup luksOpen -q /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("echo -n ${passphrase} | cryptsetup luksFormat -q --iter-time=1 /dev/vdc -")
machine.succeed("echo -n ${passphrase} | cryptsetup luksOpen -q /dev/vdc cryptroot2")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot2")
machine.succeed("echo -n ${passphrase} | cryptsetup luksFormat -q --iter-time=1 /dev/vdc -")
machine.succeed("echo -n ${passphrase} | cryptsetup luksOpen -q /dev/vdc cryptroot2")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot2")
# Boot from the encrypted disk
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks.conf")
machine.succeed("sync")
machine.crash()
# Boot from the encrypted disk
machine.succeed("${boot-luks}/bin/switch-to-configuration boot")
machine.succeed("sync")
machine.crash()
# Boot and decrypt the disk. This part of the test is SLOW.
machine.start()
machine.wait_for_unit("unl0kr-agent.service")
machine.screenshot("prompt")
machine.send_chars("${passphrase}")
machine.screenshot("pw")
machine.send_chars("\n")
machine.switch_root()
machine.wait_for_unit("multi-user.target")
# Boot and decrypt the disk. This part of the test is SLOW.
machine.start()
machine.wait_for_unit("unl0kr-agent.service")
machine.screenshot("prompt")
machine.send_chars("${passphrase}")
machine.screenshot("pw")
machine.send_chars("\n")
machine.switch_root()
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount"), "/dev/mapper/cryptroot do not appear in mountpoints list"
assert "/dev/mapper/cryptroot2 on /cryptroot2 type ext4" in machine.succeed("mount")
'';
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount"), "/dev/mapper/cryptroot do not appear in mountpoints list"
assert "/dev/mapper/cryptroot2 on /cryptroot2 type ext4" in machine.succeed("mount")
'';
}

View file

@ -1,4 +1,4 @@
{ lib, pkgs, ... }:
{ lib, ... }:
{
name = "systemd-initrd-swraid";
@ -41,30 +41,36 @@
specialisation.build-old-initrd.configuration.boot.initrd.systemd.enable = lib.mkForce false;
};
testScript = ''
# Create RAID
machine.succeed("mdadm --create --force /dev/md0 -n 2 --level=raid1 /dev/vdb /dev/vdc --metadata=0.90 --bitmap=internal")
machine.succeed("mkfs.ext4 -L testraid /dev/md0")
machine.succeed("mkdir -p /mnt && mount /dev/md0 /mnt && echo hello > /mnt/test && umount /mnt")
testScript =
{ nodes, ... }:
let
boot-swraid = nodes.machine.specialisation.boot-swraid.configuration.system.build.toplevel;
in
# python
''
# Create RAID
machine.succeed("mdadm --create --force /dev/md0 -n 2 --level=raid1 /dev/vdb /dev/vdc --metadata=0.90 --bitmap=internal")
machine.succeed("mkfs.ext4 -L testraid /dev/md0")
machine.succeed("mkdir -p /mnt && mount /dev/md0 /mnt && echo hello > /mnt/test && umount /mnt")
# Boot from the RAID
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-swraid.conf")
machine.succeed("sync")
machine.crash()
machine.wait_for_unit("multi-user.target")
# Boot from the RAID
machine.succeed("${boot-swraid}/bin/switch-to-configuration boot")
machine.succeed("sync")
machine.crash()
machine.wait_for_unit("multi-user.target")
# Ensure we have successfully booted from the RAID
assert "(initrd)" in machine.succeed("systemd-analyze") # booted with systemd in stage 1
assert "/dev/md0 on / type ext4" in machine.succeed("mount")
assert "hello" in machine.succeed("cat /test")
assert "md0" in machine.succeed("cat /proc/mdstat")
# Ensure we have successfully booted from the RAID
assert "(initrd)" in machine.succeed("systemd-analyze") # booted with systemd in stage 1
assert "/dev/md0 on / type ext4" in machine.succeed("mount")
assert "hello" in machine.succeed("cat /test")
assert "md0" in machine.succeed("cat /proc/mdstat")
# Verify the RAID array was properly auto-detected and assembled
detail = machine.succeed("mdadm --detail /dev/md0")
assert "raid1" in detail, f"Expected raid1 in mdadm detail output: {detail}"
assert "/dev/vdb" in detail, f"Expected /dev/vdb in array: {detail}"
assert "/dev/vdc" in detail, f"Expected /dev/vdc in array: {detail}"
# Verify the RAID array was properly auto-detected and assembled
detail = machine.succeed("mdadm --detail /dev/md0")
assert "raid1" in detail, f"Expected raid1 in mdadm detail output: {detail}"
assert "/dev/vdb" in detail, f"Expected /dev/vdb in array: {detail}"
assert "/dev/vdc" in detail, f"Expected /dev/vdc in array: {detail}"
machine.wait_for_unit("mdmonitor.service")
'';
machine.wait_for_unit("mdmonitor.service")
'';
}

View file

@ -21,6 +21,11 @@ in
enable = true;
openFirewall = true;
port = 1337;
# required to match certificate principals
extraFlags = [
"--hostname"
"server"
];
};
};
client1 = client;
@ -58,7 +63,7 @@ in
client2.execute("ssh-keygen -t ed25519 -N \"\" -f /root/.ssh/id_ed25519")
# Grep the ssh connect command from the output of 'upterm host'
ssh_command = client1.succeed("grep 'SSH Command' /tmp/session-details | awk -F'' '{print $3}'").strip()
ssh_command = client1.succeed("grep -m1 '^[[:space:]]*ssh' /tmp/session-details").strip()
# Connect with client2. Because we used '--force-command hostname' we should get "client1" as the output
output = client2.succeed(ssh_command)

View file

@ -1,12 +1,11 @@
{
system ? builtins.currentSystem,
config ? { },
pkgs ? import ../.. { inherit system config; },
system,
pkgs,
runTest,
}:
with import ../lib/testing-python.nix { inherit system pkgs; };
let
inherit (pkgs) lib;
makeZfsTest =
{
@ -15,11 +14,9 @@ let
zfsPackage,
extraTest ? "",
}:
makeTest {
runTest {
name = zfsPackage.kernelModuleAttribute;
meta = with pkgs.lib.maintainers; {
maintainers = [ elvishjerricco ];
};
meta.maintainers = with lib.maintainers; [ elvishjerricco ];
nodes.machine =
{
@ -124,82 +121,90 @@ let
};
};
testScript = ''
machine.wait_for_unit("multi-user.target")
machine.succeed(
"zpool status",
"parted --script /dev/vdb mklabel msdos",
"parted --script /dev/vdb -- mkpart primary 1024M -1s",
"parted --script /dev/vdc mklabel msdos",
"parted --script /dev/vdc -- mkpart primary 1024M -1s",
)
testScript =
{ nodes, ... }:
let
samba = nodes.machine.specialisation.samba.configuration.system.build.toplevel;
encryption = nodes.machine.specialisation.encryption.configuration.system.build.toplevel;
forcepool = nodes.machine.specialisation.forcepool.configuration.system.build.toplevel;
in
# python
''
machine.wait_for_unit("multi-user.target")
machine.succeed(
"zpool status",
"parted --script /dev/vdb mklabel msdos",
"parted --script /dev/vdb -- mkpart primary 1024M -1s",
"parted --script /dev/vdc mklabel msdos",
"parted --script /dev/vdc -- mkpart primary 1024M -1s",
)
with subtest("sharesmb works"):
machine.succeed(
"zpool create rpool /dev/vdb1",
"zfs create -o mountpoint=legacy rpool/root",
# shared datasets cannot have legacy mountpoint
"zfs create rpool/shared_smb",
"bootctl set-default nixos-generation-1-specialisation-samba.conf",
"sync",
)
machine.crash()
machine.wait_for_unit("multi-user.target")
machine.succeed("zfs set sharesmb=on rpool/shared_smb")
machine.succeed(
"smbclient -gNL localhost | grep rpool_shared_smb",
"umount /tmp/mnt",
"zpool destroy rpool",
)
with subtest("sharesmb works"):
machine.succeed(
"zpool create rpool /dev/vdb1",
"zfs create -o mountpoint=legacy rpool/root",
# shared datasets cannot have legacy mountpoint
"zfs create rpool/shared_smb",
"${samba}/bin/switch-to-configuration boot",
"sync",
)
machine.crash()
machine.wait_for_unit("multi-user.target")
machine.succeed("zfs set sharesmb=on rpool/shared_smb")
machine.succeed(
"smbclient -gNL localhost | grep rpool_shared_smb",
"umount /tmp/mnt",
"zpool destroy rpool",
)
with subtest("encryption works"):
machine.succeed(
'echo password | zpool create -O mountpoint=legacy '
+ "-O encryption=aes-256-gcm -O keyformat=passphrase automatic /dev/vdb1",
"zpool create -O mountpoint=legacy manual /dev/vdc1",
"echo otherpass | zfs create "
+ "-o encryption=aes-256-gcm -o keyformat=passphrase manual/encrypted",
"zfs create -o encryption=aes-256-gcm -o keyformat=passphrase "
+ "-o keylocation=http://localhost/zfskey manual/httpkey",
"bootctl set-default nixos-generation-1-specialisation-encryption.conf",
"sync",
"zpool export automatic",
"zpool export manual",
)
machine.crash()
machine.start()
machine.wait_for_console_text("Starting password query on")
machine.send_console("password\n")
machine.wait_for_unit("multi-user.target")
machine.succeed(
"zfs get -Ho value keystatus manual/encrypted | grep -Fx unavailable",
"echo otherpass | zfs load-key manual/encrypted",
"systemctl start manual-encrypted.mount",
"zfs load-key manual/httpkey",
"systemctl start manual-httpkey.mount",
"umount /automatic /manual/encrypted /manual/httpkey /manual",
"zpool destroy automatic",
"zpool destroy manual",
)
with subtest("encryption works"):
machine.succeed(
'echo password | zpool create -O mountpoint=legacy '
+ "-O encryption=aes-256-gcm -O keyformat=passphrase automatic /dev/vdb1",
"zpool create -O mountpoint=legacy manual /dev/vdc1",
"echo otherpass | zfs create "
+ "-o encryption=aes-256-gcm -o keyformat=passphrase manual/encrypted",
"zfs create -o encryption=aes-256-gcm -o keyformat=passphrase "
+ "-o keylocation=http://localhost/zfskey manual/httpkey",
"${encryption}/bin/switch-to-configuration boot",
"sync",
"zpool export automatic",
"zpool export manual",
)
machine.crash()
machine.start()
machine.wait_for_console_text("Starting password query on")
machine.send_console("password\n")
machine.wait_for_unit("multi-user.target")
machine.succeed(
"zfs get -Ho value keystatus manual/encrypted | grep -Fx unavailable",
"echo otherpass | zfs load-key manual/encrypted",
"systemctl start manual-encrypted.mount",
"zfs load-key manual/httpkey",
"systemctl start manual-httpkey.mount",
"umount /automatic /manual/encrypted /manual/httpkey /manual",
"zpool destroy automatic",
"zpool destroy manual",
)
with subtest("boot.zfs.forceImportAll works"):
machine.succeed(
"rm /etc/hostid",
"zgenhostid deadcafe",
"zpool create forcepool /dev/vdb1 -O mountpoint=legacy",
"bootctl set-default nixos-generation-1-specialisation-forcepool.conf",
"rm /etc/hostid",
"sync",
)
machine.crash()
machine.wait_for_unit("multi-user.target")
machine.fail("zpool import forcepool")
machine.succeed(
"systemctl start forcepool.mount",
"mount | grep forcepool",
)
''
+ extraTest;
with subtest("boot.zfs.forceImportAll works"):
machine.succeed(
"rm /etc/hostid",
"zgenhostid deadcafe",
"zpool create forcepool /dev/vdb1 -O mountpoint=legacy",
"${forcepool}/bin/switch-to-configuration boot",
"rm /etc/hostid",
"sync",
)
machine.crash()
machine.wait_for_unit("multi-user.target")
machine.fail("zpool import forcepool")
machine.succeed(
"systemctl start forcepool.mount",
"mount | grep forcepool",
)
''
+ extraTest;
};
@ -250,7 +255,7 @@ in
systemdStage1 = true;
}).zfsroot;
expand-partitions = makeTest {
expand-partitions = runTest {
name = "multi-disk-zfs";
nodes = {
machine =

View file

@ -13,10 +13,24 @@ lib.makeScope pkgs.newScope (
inherit lib;
inherit (pkgs)
fetchFromGitHub
fetchzip
fetchgit
;
};
emacs31 = callPackage (self.sources.emacs31) inheritedArgs;
emacs31-gtk3 = self.emacs31.override {
withGTK3 = true;
};
emacs31-nox = self.emacs31.override {
noGui = true;
};
emacs31-pgtk = self.emacs31.override {
withPgtk = true;
};
emacs30 = callPackage (self.sources.emacs30) inheritedArgs;
emacs30-gtk3 = self.emacs30.override {
@ -31,11 +45,6 @@ lib.makeScope pkgs.newScope (
withPgtk = true;
};
emacs30-macport = callPackage (self.sources.emacs30-macport) (
inheritedArgs
// {
srcRepo = true;
}
);
emacs30-macport = callPackage (self.sources.emacs30-macport) inheritedArgs;
}
)

View file

@ -29,7 +29,6 @@
gtk3-x11,
harfbuzz,
imagemagick,
jansson,
libxaw,
libxcursor,
libxft,
@ -66,7 +65,7 @@
# Boolean flags
withNativeCompilation ? stdenv.buildPlatform.canExecute stdenv.hostPlatform,
noGui ? false,
srcRepo ? false,
srcRepo ? true,
withAcl ? false,
withAlsaLib ? false,
withAthena ? false,
@ -80,8 +79,6 @@
withGpm ? stdenv.hostPlatform.isLinux,
# https://github.com/emacs-mirror/emacs/blob/emacs-27.2/etc/NEWS#L118-L120
withImageMagick ? false,
# Emacs 30+ has native JSON support
withJansson ? lib.versionOlder version "30",
withMailutils ? true,
withMotif ? false,
withNS ? stdenv.hostPlatform.isDarwin && !(variant == "macport" || noGui),
@ -256,9 +253,6 @@ stdenv.mkDerivation (finalAttrs: {
gnutls
(lib.getDev harfbuzz)
]
++ lib.optionals withJansson [
jansson
]
++ [
libxml2
ncurses

View file

@ -1,7 +1,7 @@
{
lib,
fetchFromGitHub,
fetchzip,
fetchgit,
}:
let
@ -26,9 +26,9 @@ let
src =
{
"mainline" = (
fetchzip {
url = "mirror://gnu/emacs/${rev}.tar.xz";
inherit hash;
fetchgit {
url = "https://https.git.savannah.gnu.org/git/emacs.git";
inherit rev hash;
}
);
"macport" = (
@ -74,7 +74,7 @@ let
'';
changelog =
{
"mainline" = "https://www.gnu.org/savannah-checkouts/gnu/emacs/news/NEWS.${version}";
"mainline" = "https://cgit.git.savannah.gnu.org/cgit/emacs.git/plain/etc/NEWS?h=${rev}";
"macport" = "https://github.com/jdtsmith/emacs-mac/blob/${rev}/NEWS-mac";
}
.${variant};
@ -105,12 +105,20 @@ let
};
in
{
emacs31 = import ./make-emacs.nix (mkArgs {
pname = "emacs";
version = "31.0.90";
variant = "mainline";
rev = "emacs-31.0.90";
hash = "sha256-Rzlnn+NKQ+jICXLNop27RnVInq79myn4hueJieDO2Ck=";
});
emacs30 = import ./make-emacs.nix (mkArgs {
pname = "emacs";
version = "30.2";
variant = "mainline";
rev = "emacs-30.2";
hash = "sha256-W2eZ+cNQhi/fMeRkwOqSKU7Vzvp43WUOpiwaLLNEXtg=";
hash = "sha256-3Lfb3HqdlXqSnwJfxe7npa4GGR9djldy8bKRpkQCdSA=";
patches = fetchpatch: [
(fetchpatch {
name = "fix-off-by-one-mistake-80851-CVE-2026-6861.patch";

View file

@ -11,13 +11,13 @@
}:
vimUtils.buildVimPlugin rec {
pname = "codediff.nvim";
version = "2.45.0";
version = "2.45.1";
src = fetchFromGitHub {
owner = "esmuellert";
repo = "codediff.nvim";
tag = "v${version}";
hash = "sha256-Up4vH5yk13don0HrmHHpqrPIKtc1MTtDbZ6QcMHQYAU=";
hash = "sha256-1F6z/rhZxiuI6W1ReyHP6EQFxys4qm3fbINxoy1hQZA=";
};
dependencies = [ vimPlugins.nui-nvim ];

View file

@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
mktplcRef = {
name = "amazon-q-vscode";
publisher = "AmazonWebServices";
version = "2.1.0";
hash = "sha256-DTh8IoJfKuAoNx5XS41wZlafoJwi68g0oJn0vXbEGDo=";
version = "2.2.0";
hash = "sha256-HwgInQOaSKHSs8CU+Ng4jYA6aaP/g3l4CSb/0ewkmc4=";
};
meta = {

View file

@ -618,8 +618,8 @@ let
mktplcRef = {
name = "github-markdown-preview";
publisher = "bierner";
version = "0.3.0";
hash = "sha256-7pbl5OgvJ6S0mtZWsEyUzlg+lkUhdq3rkCCpLsvTm4g=";
version = "0.4.0";
hash = "sha256-bfj0rrZWVtgNfynap9+kdp8jAef0g9pTozEJwmkzhgU=";
};
meta = {
description = "VSCode extension that changes the markdown preview to support GitHub markdown features";
@ -3491,8 +3491,8 @@ let
mktplcRef = {
name = "veriloghdl";
publisher = "mshr-h";
version = "1.23.2";
hash = "sha256-btwEFVhvNqCnMCftSt7CS6c4lAf29N3MxBAMriKDyjg=";
version = "1.25.0";
hash = "sha256-7DN0lYxwLL+Z0mIKApRHGHT7HiJZ0nfDMdojQm7XGAM=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/mshr-h.VerilogHDL/changelog";

View file

@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "jjk";
publisher = "jjk";
version = "0.10.0";
hash = "sha256-mzsujU3fil3z3yDxpecaOpbXX1K8oh+6dfx/rbOwFYs=";
version = "0.11.0";
hash = "sha256-hEgr8u6p2aI5TwjgC+iNF7M5oU+DLLZcw7M88Ech87w=";
};
meta = {
changelog = "https://github.com/keanemind/jjk/releases";

View file

@ -8,13 +8,13 @@
}:
mkLibretroCore {
core = "mednafen-psx" + lib.optionalString withHw "-hw";
version = "0-unstable-2026-05-23";
version = "0-unstable-2026-06-02";
src = fetchFromGitHub {
owner = "libretro";
repo = "beetle-psx-libretro";
rev = "ccd8ae3d8d8e43100e9f596a66214a5b2acb2da1";
hash = "sha256-zznSKLjpc0ovgqzkpxBqVOMV7UZyuTx1R/x4SCbSPdo=";
rev = "ee042b73f8fe2aa9c8c73408b5bf200a3ce1a67b";
hash = "sha256-k1DvQHGQH/d6W7jTIAW9jIk0qVHUji3PeYAa8MuUP9w=";
};
extraBuildInputs = lib.optionals withHw [

View file

@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "puae";
version = "0-unstable-2026-05-21";
version = "0-unstable-2026-06-03";
src = fetchFromGitHub {
owner = "libretro";
repo = "libretro-uae";
rev = "9fda5f344470d6837e17b939b0f53e5afe938878";
hash = "sha256-gGuYxGRRGyBbHiyG7Gpoi2/frEI5d+ySo8JdZStznN8=";
rev = "2b0ed42fe565fb997a0627aaa8f44e0948b527f8";
hash = "sha256-gkCzHvoSqh9CluahSSe3+dhZG1HtiNH0orU404pwjgo=";
};
makefile = "Makefile";

View file

@ -1058,11 +1058,11 @@
"vendorHash": null
},
"oracle_oci": {
"hash": "sha256-AFQV9frUBb8OutvJ0UM5bhMh9IownwQ37iGE1fPmps4=",
"hash": "sha256-uIggPhDgTMQei6LpXPzAbfbsoNjVN35P60QcqqHyCIA=",
"homepage": "https://registry.terraform.io/providers/oracle/oci",
"owner": "oracle",
"repo": "terraform-provider-oci",
"rev": "v8.15.0",
"rev": "v8.17.0",
"spdx": "MPL-2.0",
"vendorHash": null
},

View file

@ -8,16 +8,16 @@
}:
buildGoModule (finalAttrs: {
pname = "act";
version = "0.2.88";
version = "0.2.89";
src = fetchFromGitHub {
owner = "nektos";
repo = "act";
tag = "v${finalAttrs.version}";
hash = "sha256-/nkaJlB2opuScXb8+Jo9rXdYN1Pwc+nq+T05Y4yxcCI=";
hash = "sha256-K3+JJHadA/+aayI5XtGBLgFRbCuu6Uilm45kumnlZUw=";
};
vendorHash = "sha256-z7FX2hrF4DkmHu0K9Atc76pa+PPLylimpoWhQCeF5uA=";
vendorHash = "sha256-Gp4Bxq0n1gmqHwrggSonMsFbWMVeCIgeVKY1U1Oe6lU=";
doCheck = false;

View file

@ -29,13 +29,13 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "amnezia-vpn-bin";
version = "4.8.15.4";
version = "4.8.16.0";
__structuredAttrs = true;
src = fetchzip {
url = "https://github.com/amnezia-vpn/amnezia-client/releases/download/${finalAttrs.version}/AmneziaVPN_${finalAttrs.version}_linux_x64.tar";
hash = "sha256-Dr8zuzgwMAPXOTh69URFvA7EzGMnfBFO6kPhjhtjr6A=";
hash = "sha256-0gffxBD0pNsyTvqAFdYdjI8rzCkyaXHOApSCu4waP7s=";
};
strictDeps = true;

View file

@ -11,13 +11,13 @@
buildGoModule (finalAttrs: {
pname = "apko";
version = "1.2.14";
version = "1.2.15";
src = fetchFromGitHub {
owner = "chainguard-dev";
repo = "apko";
tag = "v${finalAttrs.version}";
hash = "sha256-+yvQK6mrDT9MOeJsEJp4maycz6jpyAnGkc4QddaCbDo=";
hash = "sha256-/Y5JqCCqbP+5Of4K6+Bdag9lLKiY/SJiz6x3W6gQnDE=";
# populate values that require us to use git. By doing this in postFetch we
# can delete .git afterwards and maintain better reproducibility of the src.
leaveDotGit = true;
@ -29,7 +29,7 @@ buildGoModule (finalAttrs: {
find "$out" -name .git -print0 | xargs -0 rm -rf
'';
};
vendorHash = "sha256-ITxeRtPJmLEqD8BundfWdQO10XGHaElL2vpYFSM24pQ=";
vendorHash = "sha256-cp29oB3YcqQljeLq4ySOMhV+CXYnQ+ZnDljHn0UzmWs=";
excludedPackages = [
"internal/gen-jsonschema"

View file

@ -10,17 +10,17 @@
}:
buildGoModule (finalAttrs: {
pname = "aws-vault";
version = "7.10.8";
version = "7.11.1";
src = fetchFromGitHub {
owner = "ByteNess";
repo = "aws-vault";
rev = "v${finalAttrs.version}";
hash = "sha256-h7/OGylN2FOC5ESsOV4JHVFZjG7Qv7JHOVlfqqpSWbE=";
hash = "sha256-GsE8UtER5KDIlVA36uFVoKPsX2pJNwotKtaizZH33t0=";
};
proxyVendor = true;
vendorHash = "sha256-FzA58f2aBNs3OG+o0XpKiAbwe7w3GsBTo7h83gkfRSE=";
vendorHash = "sha256-spGYYxSeAfbOy+ze854IBBxxv07jnmE9rNGGqenkkCw=";
nativeBuildInputs = [
installShellFiles

View file

@ -18,13 +18,13 @@
buildGoModule (finalAttrs: {
pname = "buildah";
version = "1.43.1";
version = "1.44.0";
src = fetchFromGitHub {
owner = "containers";
repo = "buildah";
tag = "v${finalAttrs.version}";
hash = "sha256-Xshe0EvsGhtP8ffoo6yV9iY9YZy1krJjnVUmYouSpAM=";
hash = "sha256-/Rv5la54ikmP4qVT19tg0sv0kM+xpQO6w9XU1PpGFk4=";
};
outputs = [

View file

@ -35,14 +35,14 @@ let
in
python3.pkgs.buildPythonApplication (finalAttrs: {
pname = "checkov";
version = "3.2.530";
version = "3.2.533";
pyproject = true;
src = fetchFromGitHub {
owner = "bridgecrewio";
repo = "checkov";
tag = finalAttrs.version;
hash = "sha256-Vb9dtlw/fiDRVZ7Mc8RaXvzu6aKQaCiCJHMdIyo4AHY=";
hash = "sha256-WuHmMqtDcivwsZpvZB5wQuKWm5BoDSX4LGJEW7oKJrA=";
};
pythonRelaxDeps = [
@ -96,6 +96,7 @@ python3.pkgs.buildPythonApplication (finalAttrs: {
docker
dockerfile-parse
dpath
ecdsa
flake8
gitpython
igraph

View file

@ -8,23 +8,23 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "chhoto-url";
version = "7.1.5";
version = "7.2.1";
src = fetchFromGitHub {
owner = "SinTan1729";
repo = "chhoto-url";
tag = finalAttrs.version;
hash = "sha256-TREBriuK7k3ZBDkdQ5gGdptWCG/5UOdhoWcOj1Ppd/8=";
hash = "sha256-B6bMuy/EEveYtQtGBO5CNeEUlPK8eQ412k+SwlRPm2M=";
};
sourceRoot = "${finalAttrs.src.name}/actix";
postPatch = ''
substituteInPlace src/{main.rs,services.rs} \
substituteInPlace src/{main.rs,services/get.rs,services/utils.rs} \
--replace-fail "./resources/" "${placeholder "out"}/share/chhoto-url/resources/"
'';
cargoHash = "sha256-S+fWxhPRB+JZPjWQkww9VYtYfc9vnXCZgUZTu+ND1So=";
cargoHash = "sha256-9EVGsOipx9ObygpM37iZYLnhYjSMHFhHTDvjHkLWLz8=";
postInstall = ''
mkdir -p $out/share/chhoto-url

View file

@ -15,7 +15,7 @@
stdenv.mkDerivation rec {
pname = "codeql";
version = "2.25.5";
version = "2.25.6";
dontConfigure = true;
dontBuild = true;
@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
src = fetchzip {
url = "https://github.com/github/codeql-cli-binaries/releases/download/v${version}/codeql.zip";
hash = "sha256-pD8F2VoWQELKYP/fT2jKr0k4+mq0ZF7/fxyDdlG9JYA=";
hash = "sha256-1VLmiheNtN6EkPZfgP35hnAiIKhpnuFhigQd6W5DbxU=";
};
nativeBuildInputs = [

View file

@ -11,13 +11,13 @@
buildGoModule (finalAttrs: {
pname = "coroot";
version = "1.21.0";
version = "1.22.0";
src = fetchFromGitHub {
owner = "coroot";
repo = "coroot";
rev = "v${finalAttrs.version}";
hash = "sha256-TF1Z4IXXTGWkx6oH3MAE+I1AJ+jO7X8Py9lMQwritMc=";
hash = "sha256-FntRLdYazY/FeZrOp+DEV3eaaVhn5hxlE4dkUGbemTc=";
};
vendorHash = "sha256-npMQah59pJqF6wgD2dlEleneIZbP/atDGEpjjb+KCpI=";

View file

@ -8,16 +8,16 @@
buildGoModule (finalAttrs: {
pname = "ctlptl";
version = "0.9.3";
version = "0.9.4";
src = fetchFromGitHub {
owner = "tilt-dev";
repo = "ctlptl";
rev = "v${finalAttrs.version}";
hash = "sha256-4c/sEWzKhs0PjHmZzVs8jXdWe2GWHYNFGsA9cQF5tOI=";
hash = "sha256-/E1E3agKPYIgBjhUDGr2eKmoWH3tAbx+eSQRnDja2k0=";
};
vendorHash = "sha256-nlLx2+NdhqkhpwM7E5PwKcFW+MsJLeSoXWRdtQjFV4Q=";
vendorHash = "sha256-uARktb9Umo/SkJ8UvbOZhNSYb2ooXFybHhtY4xIVSFs=";
nativeBuildInputs = [ installShellFiles ];

View file

@ -17,16 +17,16 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "dashy-ui";
version = "4.0.7";
version = "4.2.2";
src = fetchFromGitHub {
owner = "lissy93";
repo = "dashy";
tag = finalAttrs.version;
hash = "sha256-PWuynBFOp4A/0AC5Lc5zAkb5Y5DWJgdZHtDc/douYQc=";
hash = "sha256-8oShyf4TfHjPG/yxK1sbZA5gHyqOQYqfoUEDQlaJgU0=";
};
yarnOfflineCache = fetchYarnDeps {
yarnLock = finalAttrs.src + "/yarn.lock";
hash = "sha256-jU/XnX6i6P1CWWWyUeVXt2q2PXMExDvmPTiLBOEuHcE=";
hash = "sha256-5a2ypu6A4WOGdcm6HlvuzuCEgq3szd64zqTp/rmnjh4=";
};
passthru = {

View file

@ -9,7 +9,7 @@
buildGoModule (finalAttrs: {
pname = "doctl";
version = "1.160.0";
version = "1.160.1";
vendorHash = null;
@ -42,7 +42,7 @@ buildGoModule (finalAttrs: {
owner = "digitalocean";
repo = "doctl";
tag = "v${finalAttrs.version}";
hash = "sha256-LXALzs5oubT1uL+sgA0LsaoFbir3e8JYVlIiJv6U5J4=";
hash = "sha256-M+DBJfUXymlzY9DJeyHl3SPaCIKCT2iN/I4rd3uyQbQ=";
};
meta = {

View file

@ -6,13 +6,13 @@
buildGoModule (finalAttrs: {
pname = "ecsk";
version = "0.9.3";
version = "0.9.5";
src = fetchFromGitHub {
owner = "yukiarrr";
repo = "ecsk";
tag = "v${finalAttrs.version}";
hash = "sha256-1nrV7NslOIXQDHsc7c5YfaWhoJ8kfkEQseoVVeENrHM=";
hash = "sha256-wCv3wyD2KM4Jzawd6Z4JFLCafsDp0W40ygbB05h7r0I=";
fetchSubmodules = true;
};

View file

@ -17,13 +17,13 @@
}:
let
version = "0.308.0";
version = "0.308.1";
src = fetchFromGitHub {
owner = "evcc-io";
repo = "evcc";
tag = version;
hash = "sha256-phrTg6P/sLb3lKTVF+PBH4EGfOQ57dpt3ZfLxZ6EOew=";
hash = "sha256-MsNDWTv6CDQfQMA9miImvGkQeJnsh6/zYtAcQJjHaF4=";
};
vendorHash = "sha256-UI1WyTDJA5GRgt8TmpMQi4DmYzfQFGhDd5WeitT8VnI=";
@ -40,7 +40,7 @@ buildGo126Module rec {
npmDeps = fetchNpmDeps {
inherit src;
hash = "sha256-zMZAwO/2cch03myTGK+4sDwrEJhQzJJ8TwEg1lwxH0c=";
hash = "sha256-ypBg2TQ3qbc8cIBfFqICbNSCsIdokOtaFOqFD9bnMQM=";
};
nativeBuildInputs = [

View file

@ -10,13 +10,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "example-robot-data";
version = "4.4.0";
version = "5.0.0";
src = fetchFromGitHub {
owner = "Gepetto";
repo = "example-robot-data";
tag = "v${finalAttrs.version}";
hash = "sha256-HnI1EaTSqk7mbihwFTgnMxgPZxMSYnAwaCLEXS3LUbE=";
hash = "sha256-oQk6mJ1lOTcWrTWLViVQWk+R6DdcnLSigxKuXgpLhs0=";
};
outputs = [

View file

@ -24,11 +24,11 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "filebot";
version = "5.2.0";
version = "5.2.1";
src = fetchurl {
url = "https://web.archive.org/web/20230917142929/https://get.filebot.net/filebot/FileBot_${finalAttrs.version}/FileBot_${finalAttrs.version}-portable.tar.xz";
hash = "sha256-OcXXKaZcBuP584SJWeQB+aaxO0kih6Oiud0Vm8e9kPo=";
hash = "sha256-1LYFc76wQOnmlkdGjE7ZuRh4FeM2o8ZM4sfDwx8hyBc=";
};
unpackPhase = "tar xvf $src";

View file

@ -7,16 +7,16 @@
buildGoModule (finalAttrs: {
pname = "gerbil";
version = "1.4.0";
version = "1.4.1";
src = fetchFromGitHub {
owner = "fosrl";
repo = "gerbil";
tag = finalAttrs.version;
hash = "sha256-SKpXWlpMkmo5Qwdi/MylqNIBvP4jEHSZfP5BjQD1nVs=";
hash = "sha256-wKqJfiCzmMbKZXJGB7BWoXRNDukc4t+PX60XyynJNAU=";
};
vendorHash = "sha256-k5G8mkqrezRYY2lH1kbMMcW8GsUkyDaPglLEAzJIxYo=";
vendorHash = "sha256-S5olgsmX0uZR9P/u/8Rf3lzRCSIwPDcmlvSzJhhJM3w=";
# patch out the /usr/sbin/iptables
postPatch = ''

View file

@ -7,13 +7,13 @@
buildGoModule (finalAttrs: {
pname = "gh-ost";
version = "1.1.9";
version = "1.1.10";
src = fetchFromGitHub {
owner = "github";
repo = "gh-ost";
tag = "v${finalAttrs.version}";
hash = "sha256-wnHPFPA0ql6KWN9+ZvzIdXwaAhFdBc94UJK7+4no1NU=";
hash = "sha256-1QdGPAvQgh533oAFwVxtGKPGJ7rfq7tG/zy8VUqJLq0=";
};
vendorHash = null;

View file

@ -10,14 +10,18 @@
python3.pkgs.buildPythonApplication {
pname = "git-relevant-history";
version = "1.0.0-unstable-2022-09-15";
format = "setuptools";
pyproject = true;
src = fetchFromGitHub {
owner = "rainlabs-eu";
repo = "git-relevant-history";
rev = "84552324d7cb4790db86282fc61bf98a05b7a4fd";
hash = "sha256-46a6TR1Hi3Lg2DTmOp1aV5Uhd4IukTojZkA3TVbTnRY=";
};
propagatedBuildInputs = [
build-system = [ python3.pkgs.setuptools ];
dependencies = [
git
git-filter-repo
python3.pkgs.docopt

View file

@ -8,16 +8,16 @@
buildGoModule (finalAttrs: {
pname = "github-mcp-server";
version = "1.0.5";
version = "1.1.2";
src = fetchFromGitHub {
owner = "github";
repo = "github-mcp-server";
tag = "v${finalAttrs.version}";
hash = "sha256-NVC6geIzaSyz1uTwTQO1awMBdVEuuQMB2csAfUjMvsw=";
hash = "sha256-/Wf0p3Ug3fxtXhvfab+ZSPe0XlGlWC0ujxkMb52D+oM=";
};
vendorHash = "sha256-+ybGV37fjJ5eZjxTb+SUnJ52J20XizJL8WjoM16Rabg=";
vendorHash = "sha256-J1hC4hdEKLENXLJrsyV41TaJ9+2CuPz5KoIMm2mXvTE=";
ldflags = [
"-s"

View file

@ -8,13 +8,13 @@
buildGoModule (finalAttrs: {
pname = "glooctl";
version = "1.21.6";
version = "1.21.7";
src = fetchFromGitHub {
owner = "solo-io";
repo = "gloo";
rev = "v${finalAttrs.version}";
hash = "sha256-KZh0ZUCZ5zUJRmt/JpfqowADrjuGgK27XoIJ/1TBgzA=";
hash = "sha256-bEFf6paNWstNftUZ3YDKkZmfSp4y4Q3k64p8r1yxzw4=";
};
vendorHash = "sha256-1bY+69XKEmcV+8HV2X2JYA6S9A29KbHTLaXSZbkFbhg=";

View file

@ -0,0 +1,43 @@
From ac51f09a9e1a1307ebaf38ffab66eb729cf1b0a5 Mon Sep 17 00:00:00 2001
From: Florian Klink <flokli@flokli.de>
Date: Tue, 2 Jun 2026 20:17:25 +0200
Subject: [PATCH] mount.go: try fusermount3 suid wrapper and fallback to
fusermount from $PATH
On NixOS, we want to use the fusermount3 suid wrapper to allow mounting
as non-root user.
We still want to try fusermount from `$PATH` to work on non-NixOS, and
keep the /bin/fusermount fallback as a last resort.
---
mount.go | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/mount.go b/mount.go
index 2508409..defc967 100644
--- a/mount.go
+++ b/mount.go
@@ -526,14 +526,16 @@ func initGoFuse(rootNode fs.InodeEmbedder, args *argContainer) *fuse.Server {
// haveFusermount2 finds out if the "fusermount" binary is from libfuse 2.x.
func haveFusermount2() bool {
- path, err := exec.LookPath("fusermount")
- if err != nil {
- path = "/bin/fusermount"
+ path := "/bin/fusermount"
+ if _, err := os.Stat("/run/wrappers/bin/fusermount3"); err == nil {
+ path = "/run/wrappers/bin/fusermount3"
+ } else if newPath, err := exec.LookPath("fusermount"); err == nil {
+ path = newPath
}
cmd := exec.Command(path, "-V")
var out bytes.Buffer
cmd.Stdout = &out
- err = cmd.Run()
+ err := cmd.Run()
if err != nil {
tlog.Warn.Printf("warning: haveFusermount2: %v", err)
return false
--
2.53.0

View file

@ -2,7 +2,6 @@
lib,
buildGoModule,
fetchFromGitHub,
fuse,
makeWrapper,
openssl,
pandoc,
@ -22,6 +21,8 @@ buildGoModule (finalAttrs: {
sha256 = "sha256-uQLFcabN418m1dvogJ71lJeTF3F9JycK/8qCPaXblSU=";
};
patches = [ ./0001-mount.go-try-fusermount3-suid-wrapper-and-fallback-t.patch ];
vendorHash = "sha256-dvOROh5TsMl+52RvKmDG4ftNv3WF19trgttu5BGWktU=";
nativeBuildInputs = [
@ -56,11 +57,7 @@ buildGoModule (finalAttrs: {
popd
'';
# use --suffix here to ensure we don't shadow /run/wrappers/bin/fusermount,
# as the setuid wrapper is required to use gocryptfs as non-root on NixOS
postInstall = ''
wrapProgram $out/bin/gocryptfs \
--suffix PATH : ${lib.makeBinPath [ fuse ]}
ln -s $out/bin/gocryptfs $out/bin/mount.fuse.gocryptfs
'';

View file

@ -6,16 +6,16 @@
buildGoModule (finalAttrs: {
pname = "gogup";
version = "1.1.4";
version = "1.2.0";
src = fetchFromGitHub {
owner = "nao1215";
repo = "gup";
rev = "v${finalAttrs.version}";
hash = "sha256-ptLWQdafFo1zpcgzW0c3C9t8MKquE+fEUEQehSqA2MY=";
hash = "sha256-tkZt0lv3uy43EijCE+Lvgt2X4p1rB2SkZ4UfkJGYPbY=";
};
vendorHash = "sha256-2iPRWNbhXiaj3jZjWQeEl/hieIzJ3ePYh75rMWDh/pc=";
vendorHash = "sha256-lS7C/932cpaVUtXJ3tuZKyqDv4yT2RSG2NfQW5kcQrM=";
doCheck = false;
ldflags = [

View file

@ -20,13 +20,13 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "grimblast";
version = "0.1-unstable-2026-03-28";
version = "0.1-unstable-2026-05-29";
src = fetchFromGitHub {
owner = "hyprwm";
repo = "contrib";
rev = "b3c2a094163cad4aac7af09333fddf2c9838c348";
hash = "sha256-xr3Ih1HrAIlO9GGrmnVrmRh50GSPMWI4QWmbEwlbYq8=";
rev = "bf1a7cdb086587e6bed6e8ecd285a81c01a11c54";
hash = "sha256-epTJKmTCNL1Hm6/YdEWAgiOMVBSzC9/v/rjyOieP3yA=";
};
strictDeps = true;

View file

@ -4,7 +4,7 @@
lib,
}:
let
version = "0.17.15";
version = "0.17.16";
in
buildGoModule {
pname = "heimdall-proxy";
@ -15,10 +15,10 @@ buildGoModule {
owner = "dadrus";
repo = "heimdall";
tag = "v${version}";
hash = "sha256-NuSoLULwS634FPLr8bvcLXIIO3zL9nSFcMkjriuE6G8=";
hash = "sha256-M1aaY32ykfzKGkH1D8U8yBeEPEM20IWuJHUiHIj9IPE=";
};
vendorHash = "sha256-mGsV453mv36Gw5XtLRcBlhXkOpXDLGS3bEpt8oZeb1M=";
vendorHash = "sha256-ZNKNsiiCHlEp5JVVwHTvQLgxBNWIFAgI8vpYGOCb0RY=";
tags = [ "sqlite" ];

View file

@ -7,16 +7,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "httm";
version = "0.49.9";
version = "0.50.0";
src = fetchFromGitHub {
owner = "kimono-koans";
repo = "httm";
rev = finalAttrs.version;
hash = "sha256-Y0WYgi/VdGjE70XZcJD7G+ONCSq2YXpX9/RyijPW3kc=";
hash = "sha256-+19Xu42Tp0WkhdmhfFOAbSrTZ3SSQRgbOQwZY8KrFJg=";
};
cargoHash = "sha256-CSwfwW5ChnvrtN+zl2DdAPHDJCL3RSQHlBT2xWt+KCc=";
cargoHash = "sha256-HdYBWbyl5FSOf/hgtXV3BbjpXfrM/6EJpDese5hBNzk=";
nativeBuildInputs = [ installShellFiles ];

View file

@ -12,16 +12,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "hyfetch";
version = "2.0.5";
version = "2.1.0";
src = fetchFromGitHub {
owner = "hykilpikonna";
repo = "hyfetch";
tag = finalAttrs.version;
hash = "sha256-vrTmjg6CZczImueN3JxKg1vYXAaEDYHYG7UaZeupYPU=";
hash = "sha256-/aOVgl93n9IL5lDzY1REg88BXhlqtDDjrZnkD4rQ9aw=";
};
cargoHash = "sha256-SieVB0zwer9Ksio3l87gUZkVJMwb+Da/NjBi5f57tJc=";
cargoHash = "sha256-uTIzLY5H+zoCsC/YalA0ImnJ817KhU5sXHWkbvWEfVk=";
nativeBuildInputs = [
installShellFiles
@ -59,7 +59,9 @@ rustPlatform.buildRustPackage (finalAttrs: {
versionCheckKeepEnvironment = [ "PATH" ];
doInstallCheck = true;
passthru.updateScript = nix-update-script { };
passthru.updateScript = nix-update-script {
extraArgs = [ "--version-regex=^(\\d+\\.\\d+\\.\\d+)$" ];
};
meta = {
description = "Neofetch with LGBTQ+ pride flags";
@ -81,6 +83,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
isabelroses
nullcube
defelo
Misaka13514
];
};
})

View file

@ -9,16 +9,16 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "iio-niri";
version = "2.0.0";
version = "2.1.0";
src = fetchFromGitHub {
owner = "Zhaith-Izaliel";
repo = "iio-niri";
tag = "v${finalAttrs.version}";
hash = "sha256-foE+bPJANKWmPSt3s8BOqEIXGZoFNWRJT731xf5sr1M=";
hash = "sha256-EwilbkL1cMH8l63Cm5eikVKc+YndsYsaYJxhCNJgz6M=";
};
cargoHash = "sha256-y3Sv3JWg252XbuIqEioNagaQ99Vr9x1OfrFC6Jl4kSY=";
cargoHash = "sha256-f/pFWlLxQebzawDdHj3UtpT5Kq9a6fm+tAssqg8ibdo=";
nativeBuildInputs = [
pkg-config

View file

@ -10,16 +10,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "inputplumber";
version = "0.77.2";
version = "0.77.3";
src = fetchFromGitHub {
owner = "ShadowBlip";
repo = "InputPlumber";
tag = "v${finalAttrs.version}";
hash = "sha256-QxGDmuRTZLHBqZ+S73CtNKdLg/XumutGSpTSz4sGFYQ=";
hash = "sha256-lcv61lzZ45vNDdFdlnJOQW/mIN8KdsAEAUsoNuuhLM0=";
};
cargoHash = "sha256-EtCK/zYRW2LdZhPSrO6ydBXBQwIrkqaJmH+3XfwERTw=";
cargoHash = "sha256-VrzePyiBWAWy+IC9QWi5vooAp2+SwuzT3n+SMG/Ntas=";
nativeBuildInputs = [
pkg-config

View file

@ -81,7 +81,7 @@ maven.buildMavenPackage rec {
'';
meta = {
description = "Program to visualize different juggling pattens";
description = "Program to visualize different juggling patterns";
homepage = "https://jugglinglab.org/";
license = lib.licenses.gpl2Only;
mainProgram = "jugglinglab";

View file

@ -2,6 +2,7 @@
lib,
stdenvNoCC,
fetchzip,
installFonts,
}:
stdenvNoCC.mkDerivation rec {
@ -14,14 +15,7 @@ stdenvNoCC.mkDerivation rec {
hash = "sha256-f9hjo3B4q2WBl0j86fHny8bYUqldYSC0pP4uoWOI8Zk=";
};
installPhase = ''
runHook preInstall
mkdir -p $out/share/fonts/truetype
mv *.ttf $out/share/fonts/truetype
runHook postInstall
'';
nativeBuildInputs = [ installFonts ];
meta = {
description = "Monospaced font for scientific and technical computing";

View file

@ -3,13 +3,8 @@
stdenv,
lib,
cmake,
extra-cmake-modules,
kdoctools,
wrapQtAppsHook,
kconfig,
kcrash,
kwidgetsaddons,
kxmlgui,
kdePackages,
qt6,
}:
stdenv.mkDerivation {
@ -26,16 +21,16 @@ stdenv.mkDerivation {
nativeBuildInputs = [
cmake
extra-cmake-modules
kdoctools
wrapQtAppsHook
kdePackages.extra-cmake-modules
kdePackages.kdoctools
qt6.wrapQtAppsHook
];
buildInputs = [
kconfig
kcrash
kwidgetsaddons
kxmlgui
kdePackages.kconfig
kdePackages.kcrash
kdePackages.kwidgetsaddons
kdePackages.kxmlgui
];
meta = {

View file

@ -10,7 +10,7 @@
stdenv.mkDerivation (finalAttrs: {
pname = "kulala-core";
version = "0.7.0";
version = "0.13.0";
strictDeps = true;
__structuredAttrs = true;
@ -19,7 +19,7 @@ stdenv.mkDerivation (finalAttrs: {
owner = "mistweaverco";
repo = "kulala-core";
tag = "v${finalAttrs.version}";
hash = "sha256-zY/Yg/1s/pyyuKxtUa2cIzLCraSNSzpPMBx9EbGIIGI=";
hash = "sha256-pUBG8tlybpd/YPArIssCEy5Op47MVPLJsOOolVItZpU=";
};
node_modules = stdenv.mkDerivation {
@ -78,11 +78,13 @@ stdenv.mkDerivation (finalAttrs: {
cp -R ${finalAttrs.node_modules}/node_modules .
echo '{ "version": "${finalAttrs.version}" }' > packages/core/version.json
bun build src/cli.ts \
--define __KULALA_EMBED_CURL__=false \
--target bun \
--outfile dist/kulala-core.js \
--cwd packages/core
(
cd packages/core
bun build src/cli.ts \
--target=bun \
--outdir=dist \
--asset-naming='[name].[ext]'
)
runHook postBuild
'';
@ -90,7 +92,8 @@ stdenv.mkDerivation (finalAttrs: {
installPhase = ''
runHook preInstall
install -Dm644 packages/core/dist/kulala-core.js $out/lib/kulala-core/kulala-core.js
install -Dm644 packages/core/dist/cli.js $out/lib/kulala-core/kulala-core.js
install -Dm644 packages/core/dist/liblua5.1.wasm $out/lib/kulala-core/liblua5.1.wasm
makeWrapper ${lib.getExe bun} $out/bin/kulala-core \
--add-flags $out/lib/kulala-core/kulala-core.js \
--set KULALA_CURL_PATH ${lib.getExe curl}

View file

@ -35,6 +35,11 @@ rustPlatform.buildRustPackage (finalAttrs: {
];
doInstallCheck = true;
checkFlags = [
# This tests checks the output of `jj diff`. However, `jj diff` had a change upstream making the test fail. Skip for now, until the test is updated.
"--skip=commander::files::tests::get_file_diff"
];
meta = {
description = "TUI for Jujutsu/jj";
homepage = "https://github.com/Cretezy/lazyjj";

View file

@ -11,13 +11,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "librepods";
version = "0.2.0";
version = "0.2.5";
src = fetchFromGitHub {
owner = "kavishdevar";
repo = "librepods";
tag = "v${finalAttrs.version}";
hash = "sha256-nLRbVnm+4jr7yH6e/BsygkC4kOx1PJNy6jU5ioe2c54=";
hash = "sha256-6l1WjwjDbv5e3tDaWo9+XSEjr9ge/hKysIkeUqyiO4U=";
};
sourceRoot = "source/linux";

View file

@ -16,13 +16,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "libtrace";
version = "4.0.31-1";
version = "4.0.32-2";
src = fetchFromGitHub {
owner = "LibtraceTeam";
repo = "libtrace";
tag = finalAttrs.version;
hash = "sha256-QsqJquBnhRf7OBOs6eWFo9WFF9J2Bw4zbX1/ooN43Xw=";
hash = "sha256-cqRhTNSXvNlZW63baxqcqVJJEVe8SeunTPdJ623kIvo=";
};
strictDeps = true;

View file

@ -47,14 +47,14 @@ in
# as bootloader for various platforms and corresponding binary and helper files.
stdenv.mkDerivation (finalAttrs: {
pname = "limine";
version = "12.3.1";
version = "12.3.2";
# We don't use the Git source but the release tarball, as the source has a
# `./bootstrap` script performing network access to download resources.
# Packaging that in Nix is very cumbersome.
src = fetchurl {
url = "https://github.com/Limine-Bootloader/Limine/releases/download/v${finalAttrs.version}/limine-${finalAttrs.version}.tar.gz";
hash = "sha256-orkotxbusV4giozDLkUZuLZAHNS4GZnfj+EXi5tSRWU=";
hash = "sha256-xQUoMQbq3fpbvFbYwbHPMz0SZU3LN/gOaF01duhwKGU=";
};
enableParallelBuilding = true;

File diff suppressed because it is too large Load diff

View file

@ -6,25 +6,21 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "luwen";
version = "0.7.14";
version = "0.8.5";
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "tenstorrent";
repo = "luwen";
tag = "v${finalAttrs.version}";
hash = "sha256-KhkABISkR37MjEwgroVtywYNCxgfwXyM5LG2CIJhu3M=";
hash = "sha256-lY7cZ+8C0UEGGYxufl4Vi8g0L4AJFXaGqn7XE2ivTcQ=";
};
postUnpack = ''
cp ${./Cargo.lock} $sourceRoot/Cargo.lock
'';
nativeBuildInputs = [
protobuf
];
# Vendor a lockfile until upstream manages to consistently have checksums in their's.
cargoLock.lockFile = ./Cargo.lock;
cargoHash = "sha256-QBGXbRiBk4WIQFopq1OccmUHgx5GzR/PKhMH4Ie+fyg=";
meta = {
description = "Tenstorrent system interface tools";

View file

@ -8,19 +8,18 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "md-tui";
version = "0.10.0";
version = "0.10.1";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "henriklovhaug";
repo = "md-tui";
tag = "v${finalAttrs.version}";
hash = "sha256-ZyCPaeY1fcUEx5LNHlp84BJ525BTeqiwLGxvGElWIVA=";
hash = "sha256-bFL84y0735L93x0nWkKAAmTDMdZzs5DDoxqbQhgXUMQ=";
};
cargoHash = "sha256-E/WW3LnD5qVJciyOYmAZSVBhXKRuTgEHbV0UHC18+Vw=";
cargoHash = "sha256-xR9bWWDxerP2zGAb43ZWONLcsbmUn8KzMXwDEmrjioU=";
nativeBuildInputs = [ pkg-config ];

View file

@ -10,13 +10,13 @@
buildGoModule (finalAttrs: {
pname = "moor";
version = "2.13.2";
version = "2.13.4";
src = fetchFromGitHub {
owner = "walles";
repo = "moor";
tag = "v${finalAttrs.version}";
hash = "sha256-5VfldFEPcYva6yKDolgs1ZzGSAkn3Caxk29sedniw58=";
hash = "sha256-Axd6zCAarhXUsT32ZTqcVKC/b2PwmZvIg5f9QNMREAI=";
};
vendorHash = "sha256-fHOatNwedbDNGp7V8ynW1NiTkqSJmo8vrv6S64gUQqM=";

View file

@ -0,0 +1,20 @@
--- a/CMakeLists.txt 2026-02-25 19:30:35.568736249 -0800
+++ b/CMakeLists.txt 2026-02-25 19:31:26.709567839 -0800
@@ -124,6 +124,17 @@
DESTINATION ${INSTALL_CONFIGDIR}
)
+ write_basic_package_version_file(
+ "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
+ VERSION 4.3.11
+ COMPATIBILITY SameMajorVersion
+ )
+
+ install(FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/nanobench"
+ )
+
# Install headers
install(FILES src/include/nanobench.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
else()

View file

@ -36,6 +36,10 @@ stdenv.mkDerivation (finalAttrs: {
url = "https://github.com/martinus/nanobench/pull/98/commits/17a1f0b598a09d399dd492c72bca5b48ad76c794.patch";
hash = "sha256-2lOD63qN7gywUQxrdSRVyddpzcQjjeWOrA3hqu7x+CY=";
})
# Drop when https://github.com/martinus/nanobench/pull/134 is merged
# This is a slice of what that PR provides, it makes it possible for packages to do "find_package"
./fix-cmake-find_package.patch
];
nativeBuildInputs = [ cmake ];

View file

@ -4,31 +4,35 @@
lib,
fetchFromGitHub,
nixVersions,
pkg-config,
boost,
python3Packages,
}:
python3Packages.buildPythonPackage rec {
pname = "nix-heuristic-gc";
version = "0.7.3";
version = "0.7.4";
format = "setuptools";
src = fetchFromGitHub {
owner = "risicle";
repo = "nix-heuristic-gc";
tag = "v${version}";
hash = "sha256-aTwILsqqlV0DEm9AhDKd6HCB022BbebPH/VwzDgzS4E=";
hash = "sha256-T/PKn005gkALJP2FfHfWJj5UIRP9IYkvMOT3+kMY3Wo=";
};
# NIX_SYSTEM suggested at
# https://github.com/NixOS/nixpkgs/issues/386184#issuecomment-2692433531
env.NIX_SYSTEM = nixVersions.nixComponents_2_30.nix-store.stdenv.hostPlatform.system;
env.NIX_SYSTEM = nixVersions.nixComponents_2_31.nix-store.stdenv.hostPlatform.system;
buildInputs = [
boost
nixVersions.nixComponents_2_30.nix-store
nixVersions.nixComponents_2_30.nix-main
nixVersions.nixComponents_2_31.nix-store
nixVersions.nixComponents_2_31.nix-main
python3Packages.pybind11
python3Packages.setuptools
];
nativeBuildInputs = [
pkg-config
];
propagatedBuildInputs = [
python3Packages.humanfriendly
python3Packages.rustworkx

View file

@ -8,16 +8,16 @@
buildGoModule (finalAttrs: {
pname = "prometheus-klipper-exporter";
version = "0.14.0";
version = "0.15.0";
src = fetchFromGitHub {
owner = "scross01";
repo = "prometheus-klipper-exporter";
rev = "v${finalAttrs.version}";
sha256 = "sha256-2BJkSKchUkLbUJke+4nB49MFp8OPPcytYAhtxCEdXO4=";
sha256 = "sha256-TcGD7WjExo1/rgwVUSPmKFJEQZhttSgBIY3gKyfcwtQ=";
};
vendorHash = "sha256-8Y5o6Vh1Kn9CBG91qr1TQzyBHA0d31Femj9j1uW+4uk=";
vendorHash = "sha256-VebaCzdPGl0hOHRXvwZb4aDzXlDZ57v/QVYzuagvvOM=";
doCheck = true;

View file

@ -7,20 +7,20 @@
buildNpmPackage rec {
pname = "protoc-gen-es";
version = "2.11.0";
version = "2.12.0";
src = fetchFromGitHub {
owner = "bufbuild";
repo = "protobuf-es";
tag = "v${version}";
hash = "sha256-fH/gp7+MU7W8FESJTr4do6FIqXpxS4v6fAxa4xc+vKw=";
hash = "sha256-+na4Gfnl+xfyeDO5r1WHgmG9SpDwamhfJvoFchAzhns=";
postFetch = ''
${lib.getExe npm-lockfile-fix} $out/package-lock.json
'';
};
npmDepsHash = "sha256-UW17BQoPv5sfQT52n6PBQrwArInDvQptneF3bgKEXTY=";
npmDepsHash = "sha256-6iof5DCyA+LLbWfFE/BuznUD87hT8jtmzKleVK5cnw8=";
npmWorkspace = "packages/protoc-gen-es";

View file

@ -35,7 +35,7 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "rerun";
version = "0.32.2";
version = "0.33.0";
__structuredAttrs = true;
strictDeps = true;
@ -49,7 +49,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
owner = "rerun-io";
repo = "rerun";
tag = finalAttrs.version;
hash = "sha256-VVMogg0mWBoev9oE4CSbv2caTTpcfkReTWA1tJ2n7RI=";
hash = "sha256-1jlZ+8jx1dNsWWrkQSyFAIK/VQNSotcyTknz0WhIaIc=";
};
# The path in `build.rs` is wrong for some reason, so we patch it to make the passthru tests work
@ -58,7 +58,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
--replace-fail '"rerun_sdk/rerun_cli/rerun"' '"rerun_sdk/rerun"'
'';
cargoHash = "sha256-6cL7pocqcMiw+D7R6LIcegP4tO9fUTgXQFG51n6rsU4=";
cargoHash = "sha256-3erI/kWTJ5Exl9QpGidsIizi0UWbudzMSzoscoSTmP8=";
cargoBuildFlags = [
"--package"

View file

@ -9,7 +9,7 @@
dbus,
libcap,
polkit,
systemd,
systemdLibs,
fetchpatch,
nix-update-script,
}:
@ -45,7 +45,7 @@ stdenv.mkDerivation (finalAttrs: {
dbus
libcap
polkit
systemd
systemdLibs
];
mesonFlags = [

View file

@ -17,7 +17,7 @@
buildNpmPackage (finalAttrs: {
pname = "sandbox-runtime";
version = "0.0.52";
version = "0.0.54";
__structuredAttrs = true;
@ -25,7 +25,7 @@ buildNpmPackage (finalAttrs: {
owner = "anthropic-experimental";
repo = "sandbox-runtime";
tag = "v${finalAttrs.version}";
hash = "sha256-EcRnx4j8YdBvhCNgWdfzvgP6SgvXQfqu8aNBjeM1YQM=";
hash = "sha256-mk+dd/vMuQPklbFhse35n+m/0Y90WxrLPqjXCFBLE78=";
};
postPatch =
@ -37,7 +37,7 @@ buildNpmPackage (finalAttrs: {
strictDeps = true;
npmDepsHash = "sha256-IFf65G1v3JtjjH7o8gS68VongLIP3WuKmD/om41yRts=";
npmDepsHash = "sha256-H4azrpaCxKZNQZPEC/xaKxpPzwK19/ZhQlzYKsrDHWY=";
postFixup =
let

View file

@ -8,16 +8,16 @@
buildGoModule (finalAttrs: {
pname = "sish";
version = "2.22.1";
version = "2.23.0";
src = fetchFromGitHub {
owner = "antoniomika";
repo = "sish";
tag = "v${finalAttrs.version}";
hash = "sha256-sLryMoGnxTinMsf4DXyM37MjZ5TaJI+ldYxKiCB6ny0=";
hash = "sha256-8C4Xh9OX5pmaQ12Guu3y/jw8nIfy6DV0nduAH6hlImM=";
};
vendorHash = "sha256-3Imp9g0/Ory7ECw4pkrIltau9G1Aw3uRP5A+zWCz0mE=";
vendorHash = "sha256-U+gMlfDTEt9//SRLJA5yx/VZhwFGuMpTCnCfw9Nck+0=";
ldflags = [
"-s"

View file

@ -8,7 +8,7 @@
buildGoModule (finalAttrs: {
pname = "tofu-ls";
version = "0.4.2";
version = "0.5.0";
__structuredAttrs = true;
@ -16,10 +16,10 @@ buildGoModule (finalAttrs: {
owner = "opentofu";
repo = "tofu-ls";
tag = "v${finalAttrs.version}";
hash = "sha256-B7y22tmD8PLO4FRI0rskffRQAZu8Kvi8TyzmjCYsWs8=";
hash = "sha256-v6oqCRsiTAOGqhVZD6Zwhq0/bSl55PhH9+aEYxjlQcA=";
};
vendorHash = "sha256-Uq/4rd3OvCBhp53MEMLiWL/V6hkygwdBLSN8Wzwqoew=";
vendorHash = "sha256-vugyEaOD7diOiymo9nDEfIez++mPYWq1qVj3a9wCqoc=";
ldflags = [
"-s"

View file

@ -0,0 +1,59 @@
{
lib,
rustPlatform,
fetchFromGitHub,
nix-update-script,
boringssl,
cacert,
python3,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "trusttunnel-endpoint";
version = "1.0.33";
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "TrustTunnel";
repo = "TrustTunnel";
tag = "v${finalAttrs.version}";
hash = "sha256-uTAjZbPBCVucjjrl3cYCT6+6cSxiIe/Q3jm+Oa+Fl7E=";
};
cargoHash = "sha256-njQL6YtnRtfpyvsxoTmsSILvyKwYqg42DXsZ8zkhBWo=";
postPatch = ''
substituteInPlace $cargoDepsCopy/*/boring-sys-*/build/main.rs $cargoDepsCopy/*/quiche-*/src/build.rs \
--replace-fail "cargo:rustc-link-lib=static=crypto" "cargo:rustc-link-lib=dylib=crypto" \
--replace-fail "cargo:rustc-link-lib=static=ssl" "cargo:rustc-link-lib=dylib=ssl"
'';
env = {
BORING_BSSL_PATH = boringssl;
BORING_BSSL_INCLUDE_PATH = "${boringssl.dev}/include";
};
nativeBuildInputs = [
rustPlatform.bindgenHook
];
buildInputs = [
boringssl
];
nativeCheckInputs = [
cacert
python3
];
passthru.updateScript = nix-update-script { };
meta = {
description = "Modern, fast and obfuscated VPN protocol - endpoint component";
homepage = "https://github.com/TrustTunnel/TrustTunnel";
changelog = "https://github.com/TrustTunnel/TrustTunnel/blob/${finalAttrs.src.rev}/CHANGELOG.md";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ k900 ];
mainProgram = "trusttunnel_endpoint";
};
})

View file

@ -0,0 +1,16 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b3c7ca3..927e11c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,8 +41,9 @@ if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.23)
INTERFACE
FILE_SET api
TYPE HEADERS
- BASE_DIRS ${CMAKE_INSTALL_INCLUDEDIR}
- FILES ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/tt-logger.hpp
+ BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include
+ FILES
+ include/${PROJECT_NAME}/tt-logger.hpp
)
endif()

View file

@ -0,0 +1,64 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchurl,
cmake,
ninja,
pkg-config,
fmt_11,
spdlog,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "tt-logger";
version = "1.1.9";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "tenstorrent";
repo = "tt-logger";
tag = "v${finalAttrs.version}";
hash = "sha256-Vd/FwjcNZWh/FnP5CwXO4UQtKTq/6GhRSppCYJMj9d4=";
};
cpm = fetchurl {
url = "https://github.com/cpm-cmake/CPM.cmake/releases/download/v0.40.2/CPM.cmake";
hash = "sha256-yM3DLAOBZTjOInge1ylk3IZLKjSjENO3EEgSpcotg10=";
};
patches = [
# https://github.com/tenstorrent/tt-logger/pull/27
./fix-install.patch
];
postPatch = ''
cp $cpm cmake/CPM.cmake
'';
nativeBuildInputs = [
cmake
ninja
pkg-config
];
buildInputs = [
fmt_11
spdlog
];
cmakeFlags = [
(lib.cmakeBool "FETCHCONTENT_FULLY_DISCONNECTED" true)
(lib.cmakeBool "CPM_USE_LOCAL_PACKAGES_ONLY" true)
(lib.cmakeBool "CPM_LOCAL_PACKAGES_ONLY" true)
(lib.cmakeBool "TT_LOGGER_INSTALL" true)
];
meta = {
description = "Flexible and performant C++ logging library for Tenstorrent projects";
homepage = "https://github.com/tenstorrent/tt-logger";
maintainers = with lib.maintainers; [ RossComputerGuy ];
license = with lib.licenses; [ asl20 ];
platforms = lib.platforms.linux;
};
})

View file

@ -4,17 +4,19 @@
fetchFromGitHub,
pre-commit,
versionCheckHook,
tt-umd,
}:
python3Packages.buildPythonApplication (finalAttrs: {
pname = "tt-smi";
version = "3.0.30";
version = "5.2.0";
pyproject = true;
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "tenstorrent";
repo = "tt-smi";
tag = "v${finalAttrs.version}";
hash = "sha256-C6CfcS0H3rFew/Y1uhmzICdFp1UYU7H9h3YPeAKlcbE=";
hash = "sha256-meDqvDvGBXx/zbHbtgLUb+Kv8LSmsu9OvYCFhmEPAdQ=";
};
build-system = with python3Packages; [
@ -33,8 +35,11 @@ python3Packages.buildPythonApplication (finalAttrs: {
tt-tools-common
setuptools
tomli
tt-umd
];
pythonRelaxDeps = [ "tt-umd" ];
nativeCheckInputs = [
versionCheckHook
];

View file

@ -0,0 +1,35 @@
diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt
index 96d71990..1db71f88 100644
--- a/third_party/CMakeLists.txt
+++ b/third_party/CMakeLists.txt
@@ -43,6 +43,7 @@ CPMAddPackage(
"YAML_CPP_BUILD_TESTS OFF"
"YAML_CPP_BUILD_TOOLS OFF"
"YAML_BUILD_SHARED_LIBS OFF"
+ FIND_PACKAGE_ARGUMENTS GLOBAL
)
if(yaml-cpp_ADDED)
@@ -146,7 +147,13 @@ CPMAddPackage(
####################################################################################################################
# tt-logger
####################################################################################################################
-CPMAddPackage(NAME tt-logger GITHUB_REPOSITORY tenstorrent/tt-logger VERSION 1.1.8 SYSTEM YES)
+CPMAddPackage(
+ NAME tt-logger
+ GITHUB_REPOSITORY tenstorrent/tt-logger
+ VERSION 1.1.8
+ SYSTEM YES
+ FIND_PACKAGE_ARGUMENTS GLOBAL
+)
####################################################################################################################
# cxxopts
@@ -159,6 +166,7 @@ CPMAddPackage(
SYSTEM YES
OPTIONS
"CMAKE_MESSAGE_LOG_LEVEL NOTICE"
+ FIND_PACKAGE_ARGUMENTS GLOBAL
)
####################################################################################################################

View file

@ -0,0 +1,114 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchurl,
cmake,
ninja,
pkg-config,
gtest,
yaml-cpp,
fmt,
nanobench,
spdlog,
tt-logger,
cxxopts,
hwloc,
python3,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "tt-umd";
version = "0.9.6";
__structuredAttrs = true;
strictDeps = true;
outputs = [
"out"
"dev"
];
src = fetchFromGitHub {
owner = "tenstorrent";
repo = "tt-umd";
tag = "v${finalAttrs.version}";
hash = "sha256-3IrgsKRaJP/rEXiMvi2LnzS9n2+Giu5d05RohzRgPw4=";
};
cpm = fetchurl {
url = "https://github.com/cpm-cmake/CPM.cmake/releases/download/v0.40.2/CPM.cmake";
hash = "sha256-yM3DLAOBZTjOInge1ylk3IZLKjSjENO3EEgSpcotg10=";
};
patches = [
# https://github.com/tenstorrent/tt-umd/pull/2187
./fix-targets.patch
];
postPatch = ''
cp $cpm cmake/CPM.cmake
'';
nativeBuildInputs = [
cmake
ninja
pkg-config
python3
];
buildInputs = [
fmt
yaml-cpp
nanobench
spdlog
tt-logger
cxxopts
python3.pkgs.nanobind
hwloc
gtest
];
cmakeFlags = [
(lib.cmakeBool "FETCHCONTENT_FULLY_DISCONNECTED" true)
(lib.cmakeBool "CPM_USE_LOCAL_PACKAGES_ONLY" true)
(lib.cmakeBool "CPM_LOCAL_PACKAGES_ONLY" true)
(lib.cmakeFeature "umd_asio_SOURCE_DIR" (
builtins.toString (fetchFromGitHub {
owner = "chriskohlhoff";
repo = "asio";
tag = "asio-1-30-2";
hash = "sha256-g+ZPKBUhBGlgvce8uTkuR983unD2kbQKgoddko7x+fk=";
})
))
(lib.cmakeBool "TT_UMD_BUILD_TESTS" finalAttrs.doCheck)
(lib.cmakeBool "TT_UMD_BUILD_STATIC" stdenv.hostPlatform.isStatic)
(lib.cmakeBool "TT_UMD_BUILD_PYTHON" true)
(lib.cmakeFeature "nanobind_DIR" "${python3.pkgs.nanobind}/${python3.sitePackages}/nanobind/cmake")
];
postInstall = ''
mkdir -p $out/${python3.sitePackages}
mv $out/tt_umd $out/${python3.sitePackages}/tt_umd
rm $out/libtt-umd.so.*
mkdir -p $out/${python3.sitePackages}/tt_umd-${finalAttrs.version}.dist-info
cat > $out/${python3.sitePackages}/tt_umd-${finalAttrs.version}.dist-info/METADATA <<EOF
Metadata-Version: 2.1
Name: tt-umd
Version: ${finalAttrs.version}
EOF
'';
nativeCheckInputs = [
gtest
];
doCheck = true;
meta = {
description = "User-Mode Driver for Tenstorrent hardware";
homepage = "https://github.com/tenstorrent/tt-umd";
maintainers = with lib.maintainers; [ RossComputerGuy ];
license = with lib.licenses; [ asl20 ];
platforms = lib.platforms.linux;
};
})

View file

@ -10,16 +10,16 @@
buildGoModule (finalAttrs: {
pname = "upterm";
version = "0.20.0";
version = "0.24.0";
src = fetchFromGitHub {
owner = "owenthereal";
repo = "upterm";
rev = "v${finalAttrs.version}";
hash = "sha256-qTw8bYROAAB7FwKCCQamIbWGbqSexXl87DdvSNsFZ/I=";
hash = "sha256-b52Rny6mYkmfF6Umn2tzlnUhNkENHPFpCzp55OWj92w=";
};
vendorHash = "sha256-5OAS7s9A95h5LihXgOwkOXAMylS7g+lqjaI3MKTvlW0=";
vendorHash = "sha256-UkZnLbxn0dPT43ycuevcwMw0dXnX1OPHLh5F1XMHWDI=";
subPackages = [
"cmd/upterm"

View file

@ -90,7 +90,7 @@ stdenv.mkDerivation (finalAttrs: {
enableParallelBuilding = true;
CXXFLAGS = "-Wno-error -std=c++17";
env.CXXFLAGS = "-Wno-error -std=c++17";
configureFlags = [
"--with-boost=${boost.dev}"

View file

@ -1,6 +1,6 @@
{
"platform_key": "Linux_x86_64-gcc3",
"url": "https://edgedl.me.gvt1.com/edgedl/release2/chrome_component/accssjtqfpf5qicscrptql4jyyxa_4.10.2934.0/oimompecagnajdejgnnjijobebaeigek_4.10.2934.0_linux_ph722a3wl2goebkpserszm6bde.crx3",
"sri": "sha512-QhIUIQoJqfntjOSC74V/HCspzhc5JA0eyZphyqPYDbM5N1InVyK99fUDSJ8Sp1MhX+igyC3jrKI3gNT/5XkusQ==",
"version": "4.10.2934.0"
"url": "https://edgedl.me.gvt1.com/edgedl/release2/chrome_component/bywu6vkyg6gmcthxdaetzfkptm_4.10.3050.0/oimompecagnajdejgnnjijobebaeigek_4.10.3050.0_linux_aduyhcxcs7a2znuo6ss5tffn5jpa.crx3",
"sri": "sha512-5Xiy7tesiH4T79VZ6RfkiOzkO+tJ20ChM8GPV7+fbtXaVDRTTnD3/Dz07v25x2YWS2VZxRPhc46JnYTXlD1Xeg==",
"version": "4.10.3050.0"
}

View file

@ -25,13 +25,13 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "wipeout-rewrite";
version = "0-unstable-2026-03-31";
version = "0-unstable-2026-06-02";
src = fetchFromGitHub {
owner = "phoboslab";
repo = "wipeout-rewrite";
rev = "836619aaad75a5881ce7552a33093996eb932dcd";
hash = "sha256-pGrX/jGYw+er9mbSO/N4Urxte9j1StI/7op7E0ZlMPs=";
rev = "bf7c8251700560978c470267834e61dd0defd458";
hash = "sha256-+5YQrzK0NbAu0iWYpMuFhDxtKYMDJ3D6CQdZ7IFkjMQ=";
};
enableParallelBuilding = true;

View file

@ -8,14 +8,14 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "wiremix";
version = "0.10.0";
version = "0.11.0";
src = fetchCrate {
inherit (finalAttrs) pname version;
hash = "sha256-Ievr+xELhhWNYukqsiwv0WfCDRJqeCUdaZVeGsKQr2s=";
hash = "sha256-aV/HTDw5lKzcA8Q+IziHEFlIu8OpL9eUvjNuvqoz3SQ=";
};
cargoHash = "sha256-vTLoNXZMlGnOvGHLWJVva09SuwXUSb4BHA61DZ7zSJk=";
cargoHash = "sha256-QT96vzK0PirBn4nf40SEghcbAt+aRplETUREONZtY3I=";
nativeBuildInputs = [
pkg-config

View file

@ -15,7 +15,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
owner = "zubanls";
repo = "zuban";
tag = "v${finalAttrs.version}";
hash = "sha256-/m66vCXutOBMXMJfulJ9nFeqRWVJCIrHVJiICOvs/+A=";
hash = "sha256-mbBaOwJdYJhD7qUboHRSJfFo1t7ZLA+5/7moQWYjU3M=";
fetchSubmodules = true;
};

View file

@ -2,19 +2,24 @@
lib,
buildPythonPackage,
fetchPypi,
setuptools,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "argparse-addons";
version = "0.12.0";
format = "setuptools";
pyproject = true;
__structuredAttrs = true;
src = fetchPypi {
pname = "argparse_addons";
inherit version;
inherit (finalAttrs) version;
hash = "sha256-YyKg3NcGiH52MI0jE21bhtoOq3WigtxklnAdEhC0YK8=";
};
build-system = [ setuptools ];
pythonImportsCheck = [ "argparse_addons" ];
meta = {
@ -24,4 +29,4 @@ buildPythonPackage rec {
maintainers = [
];
};
}
})

View file

@ -3,19 +3,24 @@
buildPythonPackage,
fetchPypi,
pytestCheckHook,
setuptools,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "arpeggio";
version = "2.0.3";
format = "setuptools";
pyproject = true;
__structuredAttrs = true;
src = fetchPypi {
pname = "Arpeggio";
inherit version;
inherit (finalAttrs) version;
hash = "sha256-noWtNc/GyThnaBfHrpoQAKfHKjTHHbDGhxNsRg0SuF4=";
};
build-system = [ setuptools ];
nativeCheckInputs = [ pytestCheckHook ];
pythonImportsCheck = [ "arpeggio" ];
@ -26,4 +31,4 @@ buildPythonPackage rec {
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ nickcao ];
};
}
})

View file

@ -3,22 +3,27 @@
lib,
fetchFromGitHub,
mock,
setuptools,
unittestCheckHook,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "arxiv2bib";
version = "1.0.8";
format = "setuptools";
pyproject = true;
__structuredAttrs = true;
# Missing tests on Pypi
src = fetchFromGitHub {
owner = "nathangrigg";
repo = "arxiv2bib";
rev = version;
sha256 = "1kp2iyx20lpc9dv4qg5fgwf83a1wx6f7hj1ldqyncg0kn9xcrhbg";
tag = finalAttrs.version;
hash = "sha256-b8HMerITPGY9bjRIeJzpPKiBHH+uPEx2S+xSILqP4s4=";
};
build-system = [ setuptools ];
nativeCheckInputs = [
unittestCheckHook
mock
@ -28,6 +33,8 @@ buildPythonPackage rec {
"tests"
];
pythonImportsCheck = [ "arxiv2bib" ];
meta = {
description = "Get a BibTeX entry from an arXiv id number, using the arxiv.org API";
mainProgram = "arxiv2bib";
@ -35,4 +42,4 @@ buildPythonPackage rec {
license = lib.licenses.bsd3;
maintainers = [ lib.maintainers.nico202 ];
};
}
})

View file

@ -1,29 +0,0 @@
{
lib,
buildPythonPackage,
fetchPypi,
pyyaml,
}:
buildPythonPackage rec {
pname = "aspy-yaml";
version = "1.3.0";
format = "setuptools";
src = fetchPypi {
pname = "aspy.yaml";
inherit version;
sha256 = "0i9z2jm2hjwdxdv4vw4kbs70h2ciz49rv8w73zbawb7z5qw45iz7";
};
propagatedBuildInputs = [ pyyaml ];
# Tests not included in PyPI tarball
doCheck = false;
meta = {
description = "Few extensions to pyyaml";
homepage = "https://github.com/asottile/aspy.yaml";
license = lib.licenses.mit;
};
}

View file

@ -3,18 +3,21 @@
fetchPypi,
buildPythonPackage,
python,
setuptools,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "authres";
version = "1.2.0";
format = "setuptools";
pyproject = true;
src = fetchPypi {
inherit pname version;
sha256 = "1dr5zpqnb54h4f5ax8334l1dcp8j9083d7v4vdi1xqkwmnavklck";
inherit (finalAttrs) pname version;
hash = "sha256-k9G5la184h5i22SfNhBIEl3WAiVjoK6KI5CUZfH9Jbc=";
};
build-system = [ setuptools ];
checkPhase = ''
# run doctests
${python.interpreter} -m authres
@ -28,6 +31,7 @@ buildPythonPackage rec {
Python/Python3.
'';
homepage = "https://launchpad.net/authentication-results-python";
changelog = "https://git.launchpad.net/authentication-results-python/tree/CHANGES";
license = lib.licenses.bsd3;
};
}
})

View file

@ -2,24 +2,28 @@
lib,
buildPythonPackage,
fetchPypi,
setuptools,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "autologging";
version = "1.3.2";
format = "setuptools";
pyproject = true;
src = fetchPypi {
pname = "Autologging";
inherit version;
sha256 = "117659584d8aab8cf62046f682f8e57b54d958b8571c737fa8bf15c32937fbb6";
inherit (finalAttrs) version;
hash = "sha256-EXZZWE2Kq4z2IEb2gvjle1TZWLhXHHN/qL8Vwyk3+7Y=";
extension = "zip";
};
build-system = [ setuptools ];
meta = {
homepage = "https://ninthtest.info/python-autologging/";
description = "Easier logging and tracing for Python classes";
homepage = "https://github.com/mzipay/Autologging";
changelog = "https://github.com/mzipay/Autologging/releases/tag/${finalAttrs.version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ twey ];
};
}
})

Some files were not shown because too many files have changed in this diff Show more