Merge master into staging-next

This commit is contained in:
github-actions[bot] 2024-04-05 12:01:05 +00:00 committed by GitHub
commit e8593e270b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
42 changed files with 808 additions and 480 deletions

View File

@ -10873,6 +10873,12 @@
}];
name = "Yaroslav Bolyukin";
};
lachrymal = {
email = "lachrymalfutura@gmail.com";
name = "lachrymaL";
github = "lachrymaLF";
githubId = 13716477;
};
lafrenierejm = {
email = "joseph@lafreniere.xyz";
github = "lafrenierejm";
@ -14330,6 +14336,12 @@
githubId = 6930756;
name = "Nicolas Mattia";
};
noaccos = {
name = "Francesco Noacco";
email = "francesco.noacco2000@gmail.com";
github = "noaccOS";
githubId = 24324352;
};
nobbz = {
name = "Norbert Melzer";
email = "timmelzer+nixpkgs@gmail.com";

View File

@ -257,7 +257,6 @@ with lib.maintainers; {
docs = {
members = [
asymmetric
ryantm
];
scope = "Maintain nixpkgs/NixOS documentation and tools for building it.";

View File

@ -34,6 +34,13 @@ in
Sets the [`meta.broken`](https://nixos.org/manual/nixpkgs/stable/#var-meta-broken) attribute on the [{option}`test`](#test-opt-test) derivation.
'';
};
platforms = lib.mkOption {
type = types.listOf types.raw;
default = lib.platforms.linux;
description = ''
Sets the [`meta.platforms`](https://nixos.org/manual/nixpkgs/stable/#var-meta-platforms) attribute on the [{option}`test`](#test-opt-test) derivation.
'';
};
};
};
default = {};

View File

@ -186,7 +186,7 @@ let
NIX_EFI_VARS=$(readlink -f "''${NIX_EFI_VARS:-${config.system.name}-efi-vars.fd}")
# VM needs writable EFI vars
if ! test -e "$NIX_EFI_VARS"; then
${if cfg.useBootLoader then
${if cfg.efi.keepVariables then
# We still need the EFI var from the make-disk-image derivation
# because our "switch-to-configuration" process might
# write into it and we want to keep this data.
@ -905,6 +905,13 @@ in
Defaults to OVMF.
'';
};
keepVariables = mkOption {
type = types.bool;
default = cfg.useBootLoader;
defaultText = literalExpression "cfg.useBootLoader";
description = "Whether to keep EFI variable values from the generated system image";
};
};
virtualisation.tpm = {

View File

@ -51,7 +51,7 @@ let
boot.loader.systemd-boot.enable = true;
''}
boot.initrd.secrets."/etc/secret" = ./secret;
boot.initrd.secrets."/etc/secret" = "/etc/nixos/secret";
${optionalString clevisTest ''
boot.kernelParams = [ "console=tty0" "ip=192.168.1.1:::255.255.255.0::eth1:none" ];
@ -80,39 +80,24 @@ let
# a test script fragment `createPartitions', which must create
# partitions and filesystems.
testScriptFun = { bootLoader, createPartitions, grubDevice, grubUseEfi, grubIdentifier
, postInstallCommands, preBootCommands, postBootCommands, extraConfig
, postInstallCommands, postBootCommands, extraConfig
, testSpecialisationConfig, testFlakeSwitch, clevisTest, clevisFallbackTest
, disableFileSystems
}:
let
qemu-common = import ../lib/qemu-common.nix { inherit (pkgs) lib pkgs; };
isEfi = bootLoader == "systemd-boot" || (bootLoader == "grub" && grubUseEfi);
qemu = qemu-common.qemuBinary pkgs.qemu_test;
in if !isEfi && !pkgs.stdenv.hostPlatform.isx86 then ''
machine.succeed("true")
'' else ''
startTarget = ''
${optionalString clevisTest "tpm.start()"}
target.start()
${postBootCommands}
target.wait_for_unit("multi-user.target")
'';
in ''
${optionalString clevisTest ''
import os
import subprocess
tpm_folder = os.environ['NIX_BUILD_TOP']
startcommand = "${qemu} -m 2048"
${optionalString clevisTest ''
startcommand += f" -chardev socket,id=chrtpm,path={tpm_folder}/swtpm-sock -tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0"
startcommand += " -device virtio-net-pci,netdev=vlan1,mac=52:54:00:12:11:02 -netdev vde,id=vlan1,sock=\"$QEMU_VDE_SOCKET_1\""
''}
${optionalString isEfi ''
startcommand +=" -drive if=pflash,format=raw,unit=0,readonly=on,file=${pkgs.OVMF.firmware} -drive if=pflash,format=raw,unit=1,readonly=on,file=${pkgs.OVMF.variables}"
''}
image_dir = machine.state_dir
disk_image = os.path.join(image_dir, "machine.qcow2")
startcommand += f" -drive file={disk_image},if=virtio,werror=report"
def create_machine_named(name):
return create_machine(startcommand, name=name)
class Tpm:
def __init__(self):
self.start()
@ -143,30 +128,31 @@ let
os.mkdir(f"{tpm_folder}/swtpm")
tpm = Tpm()
tpm.check()
''}
start_all()
installer.start()
${optionalString clevisTest ''
tang.start()
tang.wait_for_unit("sockets.target")
tang.systemctl("start network-online.target")
tang.wait_for_unit("network-online.target")
machine.systemctl("start network-online.target")
machine.wait_for_unit("network-online.target")
installer.systemctl("start network-online.target")
installer.wait_for_unit("network-online.target")
''}
machine.wait_for_unit("multi-user.target")
installer.wait_for_unit("multi-user.target")
with subtest("Assert readiness of login prompt"):
machine.succeed("echo hello")
installer.succeed("echo hello")
with subtest("Wait for hard disks to appear in /dev"):
machine.succeed("udevadm settle")
installer.succeed("udevadm settle")
${createPartitions}
with subtest("Create the NixOS configuration"):
machine.succeed("nixos-generate-config ${optionalString disableFileSystems "--no-filesystems"} --root /mnt")
machine.succeed("cat /mnt/etc/nixos/hardware-configuration.nix >&2")
machine.copy_from_host(
installer.succeed("nixos-generate-config ${optionalString disableFileSystems "--no-filesystems"} --root /mnt")
installer.succeed("cat /mnt/etc/nixos/hardware-configuration.nix >&2")
installer.copy_from_host(
"${ makeConfig {
inherit bootLoader grubDevice grubIdentifier
grubUseEfi extraConfig clevisTest;
@ -174,13 +160,13 @@ let
}",
"/mnt/etc/nixos/configuration.nix",
)
machine.copy_from_host("${pkgs.writeText "secret" "secret"}", "/mnt/etc/nixos/secret")
installer.copy_from_host("${pkgs.writeText "secret" "secret"}", "/mnt/etc/nixos/secret")
${optionalString clevisTest ''
with subtest("Create the Clevis secret with Tang"):
machine.systemctl("start network-online.target")
machine.wait_for_unit("network-online.target")
machine.succeed('echo -n password | clevis encrypt sss \'{"t": 2, "pins": {"tpm2": {}, "tang": {"url": "http://192.168.1.2"}}}\' -y > /mnt/etc/nixos/clevis-secret.jwe')''}
installer.systemctl("start network-online.target")
installer.wait_for_unit("network-online.target")
installer.succeed('echo -n password | clevis encrypt sss \'{"t": 2, "pins": {"tpm2": {}, "tang": {"url": "http://192.168.1.2"}}}\' -y > /mnt/etc/nixos/clevis-secret.jwe')''}
${optionalString clevisFallbackTest ''
with subtest("Shutdown Tang to check fallback to interactive prompt"):
@ -188,13 +174,13 @@ let
''}
with subtest("Perform the installation"):
machine.succeed("nixos-install < /dev/null >&2")
installer.succeed("nixos-install < /dev/null >&2")
with subtest("Do it again to make sure it's idempotent"):
machine.succeed("nixos-install < /dev/null >&2")
installer.succeed("nixos-install < /dev/null >&2")
with subtest("Check that we can build things in nixos-enter"):
machine.succeed(
installer.succeed(
"""
nixos-enter -- nix-build --option substitute false -E 'derivation {
name = "t";
@ -209,48 +195,48 @@ let
${postInstallCommands}
with subtest("Shutdown system after installation"):
machine.succeed("umount -R /mnt")
machine.succeed("sync")
machine.shutdown()
installer.succeed("umount -R /mnt")
installer.succeed("sync")
installer.shutdown()
# We're actually the same machine, just booting differently this time.
target.state_dir = installer.state_dir
# Now see if we can boot the installation.
machine = create_machine_named("boot-after-install")
# For example to enter LUKS passphrase.
${preBootCommands}
${startTarget}
with subtest("Assert that /boot get mounted"):
machine.wait_for_unit("local-fs.target")
target.wait_for_unit("local-fs.target")
${if bootLoader == "grub"
then ''machine.succeed("test -e /boot/grub")''
else ''machine.succeed("test -e /boot/loader/loader.conf")''
then ''target.succeed("test -e /boot/grub")''
else ''target.succeed("test -e /boot/loader/loader.conf")''
}
with subtest("Check whether /root has correct permissions"):
assert "700" in machine.succeed("stat -c '%a' /root")
assert "700" in target.succeed("stat -c '%a' /root")
with subtest("Assert swap device got activated"):
# uncomment once https://bugs.freedesktop.org/show_bug.cgi?id=86930 is resolved
machine.wait_for_unit("swap.target")
machine.succeed("cat /proc/swaps | grep -q /dev")
target.wait_for_unit("swap.target")
target.succeed("cat /proc/swaps | grep -q /dev")
with subtest("Check that the store is in good shape"):
machine.succeed("nix-store --verify --check-contents >&2")
target.succeed("nix-store --verify --check-contents >&2")
with subtest("Check whether the channel works"):
machine.succeed("nix-env -iA nixos.procps >&2")
assert ".nix-profile" in machine.succeed("type -tP ps | tee /dev/stderr")
target.succeed("nix-env -iA nixos.procps >&2")
assert ".nix-profile" in target.succeed("type -tP ps | tee /dev/stderr")
with subtest(
"Check that the daemon works, and that non-root users can run builds "
"(this will build a new profile generation through the daemon)"
):
machine.succeed("su alice -l -c 'nix-env -iA nixos.procps' >&2")
target.succeed("su alice -l -c 'nix-env -iA nixos.procps' >&2")
with subtest("Configure system with writable Nix store on next boot"):
# we're not using copy_from_host here because the installer image
# doesn't know about the host-guest sharing mechanism.
machine.copy_from_host_via_shell(
target.copy_from_host_via_shell(
"${ makeConfig {
inherit bootLoader grubDevice grubIdentifier
grubUseEfi extraConfig clevisTest;
@ -261,25 +247,23 @@ let
)
with subtest("Check whether nixos-rebuild works"):
machine.succeed("nixos-rebuild switch >&2")
target.succeed("nixos-rebuild switch >&2")
# FIXME: Nix 2.4 broke nixos-option, someone has to fix it.
# with subtest("Test nixos-option"):
# kernel_modules = machine.succeed("nixos-option boot.initrd.kernelModules")
# kernel_modules = target.succeed("nixos-option boot.initrd.kernelModules")
# assert "virtio_console" in kernel_modules
# assert "List of modules" in kernel_modules
# assert "qemu-guest.nix" in kernel_modules
machine.shutdown()
target.shutdown()
# Check whether a writable store build works
machine = create_machine_named("rebuild-switch")
${preBootCommands}
machine.wait_for_unit("multi-user.target")
${startTarget}
# we're not using copy_from_host here because the installer image
# doesn't know about the host-guest sharing mechanism.
machine.copy_from_host_via_shell(
target.copy_from_host_via_shell(
"${ makeConfig {
inherit bootLoader grubDevice grubIdentifier
grubUseEfi extraConfig clevisTest;
@ -288,73 +272,62 @@ let
}",
"/etc/nixos/configuration.nix",
)
machine.succeed("nixos-rebuild boot >&2")
machine.shutdown()
target.succeed("nixos-rebuild boot >&2")
target.shutdown()
# And just to be sure, check that the machine still boots after
# "nixos-rebuild switch".
machine = create_machine_named("boot-after-rebuild-switch")
${preBootCommands}
machine.wait_for_unit("network.target")
# And just to be sure, check that the target still boots after "nixos-rebuild switch".
${startTarget}
target.wait_for_unit("network.target")
# Sanity check, is it the configuration.nix we generated?
hostname = machine.succeed("hostname").strip()
hostname = target.succeed("hostname").strip()
assert hostname == "thatworked"
${postBootCommands}
machine.shutdown()
target.shutdown()
# Tests for validating clone configuration entries in grub menu
''
+ optionalString testSpecialisationConfig ''
# Reboot Machine
machine = create_machine_named("clone-default-config")
${preBootCommands}
machine.wait_for_unit("multi-user.target")
# Reboot target
${startTarget}
with subtest("Booted configuration name should be 'Home'"):
# This is not the name that shows in the grub menu.
# The default configuration is always shown as "Default"
machine.succeed("cat /run/booted-system/configuration-name >&2")
assert "Home" in machine.succeed("cat /run/booted-system/configuration-name")
target.succeed("cat /run/booted-system/configuration-name >&2")
assert "Home" in target.succeed("cat /run/booted-system/configuration-name")
with subtest("We should **not** find a file named /etc/gitconfig"):
machine.fail("test -e /etc/gitconfig")
target.fail("test -e /etc/gitconfig")
with subtest("Set grub to boot the second configuration"):
machine.succeed("grub-reboot 1")
target.succeed("grub-reboot 1")
${postBootCommands}
machine.shutdown()
target.shutdown()
# Reboot Machine
machine = create_machine_named("clone-alternate-config")
${preBootCommands}
# Reboot target
${startTarget}
machine.wait_for_unit("multi-user.target")
with subtest("Booted configuration name should be Work"):
machine.succeed("cat /run/booted-system/configuration-name >&2")
assert "Work" in machine.succeed("cat /run/booted-system/configuration-name")
target.succeed("cat /run/booted-system/configuration-name >&2")
assert "Work" in target.succeed("cat /run/booted-system/configuration-name")
with subtest("We should find a file named /etc/gitconfig"):
machine.succeed("test -e /etc/gitconfig")
target.succeed("test -e /etc/gitconfig")
${postBootCommands}
machine.shutdown()
target.shutdown()
''
+ optionalString testFlakeSwitch ''
${preBootCommands}
machine.start()
${startTarget}
with subtest("Configure system with flake"):
# TODO: evaluate as user?
machine.succeed("""
target.succeed("""
mkdir /root/my-config
mv /etc/nixos/hardware-configuration.nix /root/my-config/
mv /etc/nixos/secret /root/my-config/
rm /etc/nixos/configuration.nix
""")
machine.copy_from_host_via_shell(
target.copy_from_host_via_shell(
"${makeConfig {
inherit bootLoader grubDevice grubIdentifier grubUseEfi extraConfig clevisTest;
forceGrubReinstallCount = 1;
@ -362,11 +335,11 @@ let
}}",
"/root/my-config/configuration.nix",
)
machine.copy_from_host_via_shell(
target.copy_from_host_via_shell(
"${./installer/flake.nix}",
"/root/my-config/flake.nix",
)
machine.succeed("""
target.succeed("""
# for some reason the image does not have `pkgs.path`, so
# we use readlink to find a Nixpkgs source.
pkgs=$(readlink -f /nix/var/nix/profiles/per-user/root/channels)/nixos
@ -378,36 +351,32 @@ let
""")
with subtest("Switch to flake based config"):
machine.succeed("nixos-rebuild switch --flake /root/my-config#xyz")
target.succeed("nixos-rebuild switch --flake /root/my-config#xyz")
${postBootCommands}
machine.shutdown()
target.shutdown()
${preBootCommands}
machine.start()
machine.wait_for_unit("multi-user.target")
${startTarget}
with subtest("nix-channel command is not available anymore"):
machine.succeed("! which nix-channel")
target.succeed("! which nix-channel")
# Note that the channel profile is still present on disk, but configured
# not to be used.
with subtest("builtins.nixPath is now empty"):
machine.succeed("""
target.succeed("""
[[ "[ ]" == "$(nix-instantiate builtins.nixPath --eval --expr)" ]]
""")
with subtest("<nixpkgs> does not resolve"):
machine.succeed("""
target.succeed("""
! nix-instantiate '<nixpkgs>' --eval --expr
""")
with subtest("Evaluate flake config in fresh env without nix-channel"):
machine.succeed("nixos-rebuild switch --flake /root/my-config#xyz")
target.succeed("nixos-rebuild switch --flake /root/my-config#xyz")
with subtest("Evaluate flake config in fresh env without channel profiles"):
machine.succeed("""
target.succeed("""
(
exec 1>&2
rm -v /root/.nix-channels
@ -415,16 +384,15 @@ let
rm -vrf /nix/var/nix/profiles/per-user/root/channels*
)
""")
machine.succeed("nixos-rebuild switch --flake /root/my-config#xyz")
target.succeed("nixos-rebuild switch --flake /root/my-config#xyz")
${postBootCommands}
machine.shutdown()
target.shutdown()
'';
makeInstallerTest = name:
{ createPartitions
, postInstallCommands ? "", preBootCommands ? "", postBootCommands ? ""
, postInstallCommands ? "", postBootCommands ? ""
, extraConfig ? ""
, extraInstallerConfig ? {}
, bootLoader ? "grub" # either "grub" or "systemd-boot"
@ -436,18 +404,39 @@ let
, clevisFallbackTest ? false
, disableFileSystems ? false
}:
makeTest {
let
isEfi = bootLoader == "systemd-boot" || (bootLoader == "grub" && grubUseEfi);
in makeTest {
inherit enableOCR;
name = "installer-" + name;
meta = {
# put global maintainers here, individuals go into makeInstallerTest fkt call
maintainers = (meta.maintainers or []);
# non-EFI tests can only run on x86
platforms = if isEfi then platforms.linux else [ "x86_64-linux" "i686-linux" ];
};
nodes = {
nodes = let
commonConfig = {
# builds stuff in the VM, needs more juice
virtualisation.diskSize = 8 * 1024;
virtualisation.cores = 8;
virtualisation.memorySize = 2048;
# The configuration of the machine used to run "nixos-install".
machine = { pkgs, ... }: {
# both installer and target need to use the same drive
virtualisation.diskImage = "./target.qcow2";
# and the same TPM options
virtualisation.qemu.options = mkIf (clevisTest) [
"-chardev socket,id=chrtpm,path=$NIX_BUILD_TOP/swtpm-sock"
"-tpmdev emulator,id=tpm0,chardev=chrtpm"
"-device tpm-tis,tpmdev=tpm0"
];
};
in {
# The configuration of the system used to run "nixos-install".
installer = {
imports = [
commonConfig
../modules/profiles/installation-device.nix
../modules/profiles/base.nix
extraInstallerConfig
@ -458,11 +447,6 @@ let
# root filesystem.
virtualisation.fileSystems."/".autoFormat = systemdStage1;
# builds stuff in the VM, needs more juice
virtualisation.diskSize = 8 * 1024;
virtualisation.cores = 8;
virtualisation.memorySize = 2048;
boot.initrd.systemd.enable = systemdStage1;
# Use a small /dev/vdb as the root disk for the
@ -470,17 +454,6 @@ let
# the same during and after installation.
virtualisation.emptyDiskImages = [ 512 ];
virtualisation.rootDevice = "/dev/vdb";
virtualisation.bootLoaderDevice = "/dev/vda";
virtualisation.qemu.diskInterface = "virtio";
virtualisation.qemu.options = mkIf (clevisTest) [
"-chardev socket,id=chrtpm,path=$NIX_BUILD_TOP/swtpm-sock"
"-tpmdev emulator,id=tpm0,chardev=chrtpm"
"-device tpm-tis,tpmdev=tpm0"
];
# We don't want to have any networking in the guest apart from the clevis tests.
virtualisation.vlans = mkIf (!clevisTest) [];
boot.loader.systemd-boot.enable = mkIf (bootLoader == "systemd-boot") true;
hardware.enableAllFirmware = mkForce false;
@ -520,7 +493,13 @@ let
in [
(pkgs.grub2.override { inherit zfsSupport; })
(pkgs.grub2_efi.override { inherit zfsSupport; })
]) ++ optionals clevisTest [ pkgs.klibc ];
])
++ optionals (bootLoader == "systemd-boot") [
pkgs.zstd.bin
pkgs.mypy
pkgs.bootspec
]
++ optionals clevisTest [ pkgs.klibc ];
nix.settings = {
substituters = mkForce [];
@ -529,6 +508,18 @@ let
};
};
target = {
imports = [ commonConfig ];
virtualisation.useBootLoader = true;
virtualisation.useEFIBoot = isEfi;
virtualisation.useDefaultFilesystems = false;
virtualisation.efi.keepVariables = false;
virtualisation.fileSystems."/" = {
device = "/dev/disk/by-label/this-is-not-real-and-will-never-be-used";
fsType = "ext4";
};
};
} // optionalAttrs clevisTest {
tang = {
services.tang = {
@ -541,7 +532,7 @@ let
};
testScript = testScriptFun {
inherit bootLoader createPartitions postInstallCommands preBootCommands postBootCommands
inherit bootLoader createPartitions postInstallCommands postBootCommands
grubDevice grubIdentifier grubUseEfi extraConfig
testSpecialisationConfig testFlakeSwitch clevisTest clevisFallbackTest
disableFileSystems;
@ -550,7 +541,7 @@ let
makeLuksRootTest = name: luksFormatOpts: makeInstallerTest name {
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB" # /boot
+ " mkpart primary linux-swap 100M 1024M"
@ -572,10 +563,9 @@ let
boot.kernelParams = lib.mkAfter [ "console=tty0" ];
'';
enableOCR = true;
preBootCommands = ''
machine.start()
machine.wait_for_text("[Pp]assphrase for")
machine.send_chars("supersecret\n")
postBootCommands = ''
target.wait_for_text("[Pp]assphrase for")
target.send_chars("supersecret\n")
'';
};
@ -583,7 +573,7 @@ let
# one big filesystem partition.
simple-test-config = {
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary linux-swap 1M 1024M"
+ " mkpart primary ext2 1024M -1s",
@ -602,7 +592,7 @@ let
simple-uefi-grub-config = {
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel gpt"
+ " mkpart ESP fat32 1M 100MiB" # /boot
+ " set 1 boot on"
@ -656,7 +646,7 @@ let
environment.systemPackages = with pkgs; [ keyutils clevis ];
};
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB"
+ " mkpart primary linux-swap 100M 1024M"
@ -680,13 +670,9 @@ let
# not know the UUID in advance.
fileSystems."/" = lib.mkForce { device = "/dev/vda3"; fsType = "bcachefs"; };
'';
preBootCommands = ''
tpm = Tpm()
tpm.check()
'' + optionalString fallback ''
machine.start()
machine.wait_for_text("enter passphrase for")
machine.send_chars("password\n")
postBootCommands = optionalString fallback ''
target.wait_for_text("enter passphrase for")
target.send_chars("password\n")
'';
};
@ -698,7 +684,7 @@ let
environment.systemPackages = with pkgs; [ clevis ];
};
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB"
+ " mkpart primary linux-swap 100M 1024M"
@ -719,17 +705,13 @@ let
extraConfig = ''
boot.initrd.clevis.devices."crypt-root".secretFile = "/etc/nixos/clevis-secret.jwe";
'';
preBootCommands = ''
tpm = Tpm()
tpm.check()
'' + optionalString fallback ''
machine.start()
postBootCommands = optionalString fallback ''
${if systemdStage1 then ''
machine.wait_for_text("Please enter")
target.wait_for_text("Please enter")
'' else ''
machine.wait_for_text("Passphrase for")
target.wait_for_text("Passphrase for")
''}
machine.send_chars("password\n")
target.send_chars("password\n")
'';
};
@ -742,7 +724,7 @@ let
environment.systemPackages = with pkgs; [ clevis ];
};
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB"
+ " mkpart primary linux-swap 100M 1024M"
@ -770,17 +752,13 @@ let
boot.zfs.devNodes = "/dev/disk/by-uuid/";
networking.hostId = "00000000";
'';
preBootCommands = ''
tpm = Tpm()
tpm.check()
'' + optionalString fallback ''
machine.start()
postBootCommands = optionalString fallback ''
${if systemdStage1 then ''
machine.wait_for_text("Enter key for rpool/root")
target.wait_for_text("Enter key for rpool/root")
'' else ''
machine.wait_for_text("Key load error")
target.wait_for_text("Key load error")
''}
machine.send_chars("password\n")
target.send_chars("password\n")
'';
};
@ -801,7 +779,7 @@ in {
# Simple GPT/UEFI configuration using systemd-boot with 3 partitions: ESP, swap & root filesystem
simpleUefiSystemdBoot = makeInstallerTest "simpleUefiSystemdBoot" {
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel gpt"
+ " mkpart ESP fat32 1M 100MiB" # /boot
+ " set 1 boot on"
@ -828,7 +806,7 @@ in {
# Same as the previous, but now with a separate /boot partition.
separateBoot = makeInstallerTest "separateBoot" {
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB" # /boot
+ " mkpart primary linux-swap 100MB 1024M"
@ -848,7 +826,7 @@ in {
# Same as the previous, but with fat32 /boot.
separateBootFat = makeInstallerTest "separateBootFat" {
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB" # /boot
+ " mkpart primary linux-swap 100MB 1024M"
@ -880,7 +858,7 @@ in {
'';
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 256MB" # /boot
+ " mkpart primary linux-swap 256MB 1280M"
@ -932,8 +910,8 @@ in {
# umount & export bpool before shutdown
# this is a fix for "cannot import 'bpool': pool was previously in use from another system."
postInstallCommands = ''
machine.succeed("umount /mnt/boot")
machine.succeed("zpool export bpool")
installer.succeed("umount /mnt/boot")
installer.succeed("zpool export bpool")
'';
};
@ -954,7 +932,7 @@ in {
'';
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary 1M 100MB" # /boot
+ " mkpart primary linux-swap 100M 1024M"
@ -980,7 +958,7 @@ in {
# that contains the logical swap and root partitions.
lvm = makeInstallerTest "lvm" {
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary 1M 2048M" # PV1
+ " set 1 lvm on"
@ -1013,7 +991,7 @@ in {
# keyfile is configured
encryptedFSWithKeyfile = makeInstallerTest "encryptedFSWithKeyfile" {
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB" # /boot
+ " mkpart primary linux-swap 100M 1024M"
@ -1052,7 +1030,7 @@ in {
# LVM-on-LUKS and a keyfile in initrd.secrets to enter the passphrase once
fullDiskEncryption = makeInstallerTest "fullDiskEncryption" {
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel gpt"
+ " mkpart ESP fat32 1M 100MiB" # /boot/efi
+ " set 1 boot on"
@ -1083,23 +1061,22 @@ in {
boot.loader.grub.enableCryptodisk = true;
boot.loader.efi.efiSysMountPoint = "/boot/efi";
boot.initrd.secrets."/luks.key" = ./luks.key;
boot.initrd.secrets."/luks.key" = "/etc/nixos/luks.key";
boot.initrd.luks.devices.crypt =
{ device = "/dev/vda2";
keyFile = "/luks.key";
};
'';
enableOCR = true;
preBootCommands = ''
machine.start()
machine.wait_for_text("Enter passphrase for")
machine.send_chars("supersecret\n")
postBootCommands = ''
target.wait_for_text("Enter passphrase for")
target.send_chars("supersecret\n")
'';
};
swraid = makeInstallerTest "swraid" {
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda --"
+ " mklabel msdos"
+ " mkpart primary ext2 1M 100MB" # /boot
@ -1128,15 +1105,14 @@ in {
"udevadm settle",
)
'';
preBootCommands = ''
machine.start()
machine.fail("dmesg | grep 'immediate safe mode'")
postBootCommands = ''
target.fail("dmesg | grep 'immediate safe mode'")
'';
};
bcache = makeInstallerTest "bcache" {
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda --"
+ " mklabel msdos"
+ " mkpart primary ext2 1M 100MB" # /boot
@ -1165,7 +1141,7 @@ in {
};
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB" # /boot
+ " mkpart primary linux-swap 100M 1024M" # swap
@ -1197,18 +1173,17 @@ in {
'';
enableOCR = true;
preBootCommands = ''
machine.start()
postBootCommands = ''
# Enter it wrong once
machine.wait_for_text("enter passphrase for ")
machine.send_chars("wrong\n")
target.wait_for_text("enter passphrase for ")
target.send_chars("wrong\n")
# Then enter it right.
machine.wait_for_text("enter passphrase for ")
machine.send_chars("password\n")
target.wait_for_text("enter passphrase for ")
target.send_chars("password\n")
'';
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB" # /boot
+ " mkpart primary linux-swap 100M 1024M" # swap
@ -1235,7 +1210,7 @@ in {
};
createPartitions = ''
machine.succeed(
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB" # /boot
+ " mkpart primary linux-swap 100M 1024M" # swap
@ -1256,7 +1231,7 @@ in {
# Test using labels to identify volumes in grub
simpleLabels = makeInstallerTest "simpleLabels" {
createPartitions = ''
machine.succeed(
installer.succeed(
"sgdisk -Z /dev/vda",
"sgdisk -n 1:0:+1M -n 2:0:+1G -N 3 -t 1:ef02 -t 2:8200 -t 3:8300 -c 3:root /dev/vda",
"mkswap /dev/vda2 -L swap",
@ -1273,7 +1248,7 @@ in {
simpleProvided = makeInstallerTest "simpleProvided" {
createPartitions = ''
uuid = "$(blkid -s UUID -o value /dev/vda2)"
machine.succeed(
installer.succeed(
"sgdisk -Z /dev/vda",
"sgdisk -n 1:0:+1M -n 2:0:+100M -n 3:0:+1G -N 4 -t 1:ef02 -t 2:8300 "
+ "-t 3:8200 -t 4:8300 -c 2:boot -c 4:root /dev/vda",
@ -1282,9 +1257,9 @@ in {
"mkfs.ext4 -L boot /dev/vda2",
"mkfs.ext4 -L root /dev/vda4",
)
machine.execute(f"ln -s ../../vda2 /dev/disk/by-uuid/{uuid}")
machine.execute("ln -s ../../vda4 /dev/disk/by-label/root")
machine.succeed(
installer.execute(f"ln -s ../../vda2 /dev/disk/by-uuid/{uuid}")
installer.execute("ln -s ../../vda4 /dev/disk/by-label/root")
installer.succeed(
"mount /dev/disk/by-label/root /mnt",
"mkdir /mnt/boot",
f"mount /dev/disk/by-uuid/{uuid} /mnt/boot",
@ -1296,7 +1271,7 @@ in {
# Simple btrfs grub testing
btrfsSimple = makeInstallerTest "btrfsSimple" {
createPartitions = ''
machine.succeed(
installer.succeed(
"sgdisk -Z /dev/vda",
"sgdisk -n 1:0:+1M -n 2:0:+1G -N 3 -t 1:ef02 -t 2:8200 -t 3:8300 -c 3:root /dev/vda",
"mkswap /dev/vda2 -L swap",
@ -1310,7 +1285,7 @@ in {
# Test to see if we can detect /boot and /nix on subvolumes
btrfsSubvols = makeInstallerTest "btrfsSubvols" {
createPartitions = ''
machine.succeed(
installer.succeed(
"sgdisk -Z /dev/vda",
"sgdisk -n 1:0:+1M -n 2:0:+1G -N 3 -t 1:ef02 -t 2:8200 -t 3:8300 -c 3:root /dev/vda",
"mkswap /dev/vda2 -L swap",
@ -1332,7 +1307,7 @@ in {
# Test to see if we can detect default and aux subvolumes correctly
btrfsSubvolDefault = makeInstallerTest "btrfsSubvolDefault" {
createPartitions = ''
machine.succeed(
installer.succeed(
"sgdisk -Z /dev/vda",
"sgdisk -n 1:0:+1M -n 2:0:+1G -N 3 -t 1:ef02 -t 2:8200 -t 3:8300 -c 3:root /dev/vda",
"mkswap /dev/vda2 -L swap",
@ -1358,7 +1333,7 @@ in {
# Test to see if we can deal with subvols that need to be escaped in fstab
btrfsSubvolEscape = makeInstallerTest "btrfsSubvolEscape" {
createPartitions = ''
machine.succeed(
installer.succeed(
"sgdisk -Z /dev/vda",
"sgdisk -n 1:0:+1M -n 2:0:+1G -N 3 -t 1:ef02 -t 2:8200 -t 3:8300 -c 3:root /dev/vda",
"mkswap /dev/vda2 -L swap",
@ -1385,7 +1360,7 @@ in {
} // optionalAttrs systemdStage1 {
stratisRoot = makeInstallerTest "stratisRoot" {
createPartitions = ''
machine.succeed(
installer.succeed(
"sgdisk --zap-all /dev/vda",
"sgdisk --new=1:0:+100M --typecode=0:ef00 /dev/vda", # /boot
"sgdisk --new=2:0:+1G --typecode=0:8200 /dev/vda", # swap
@ -1428,7 +1403,7 @@ in {
in makeInstallerTest "gptAutoRoot" {
disableFileSystems = true;
createPartitions = ''
machine.succeed(
installer.succeed(
"sgdisk --zap-all /dev/vda",
"sgdisk --new=1:0:+100M --typecode=0:ef00 /dev/vda", # /boot
"sgdisk --new=2:0:+1G --typecode=0:8200 /dev/vda", # swap

View File

@ -1,19 +1,50 @@
{ buildVersion, aarch64sha256, x64sha256, dev ? false }:
{
buildVersion,
dev ? false,
aarch64sha256,
x64sha256,
}:
{ fetchurl, stdenv, lib, xorg, glib, libglvnd, glibcLocales, gtk3, cairo, pango, makeWrapper, wrapGAppsHook
, writeShellScript, common-updater-scripts, curl
, openssl_1_1, bzip2, bash, unzip, zip
, sqlite
{
fetchurl,
stdenv,
lib,
xorg,
glib,
libglvnd,
glibcLocales,
gtk3,
cairo,
pango,
makeWrapper,
wrapGAppsHook,
writeShellScript,
common-updater-scripts,
curl,
openssl_1_1,
bzip2,
sqlite,
}:
let
pnameBase = "sublimetext4";
packageAttribute = "sublime4${lib.optionalString dev "-dev"}";
binaries = [ "sublime_text" "plugin_host-3.3" "plugin_host-3.8" crashHandlerBinary ];
binaries = [
"sublime_text"
"plugin_host-3.3"
"plugin_host-3.8"
crashHandlerBinary
];
primaryBinary = "sublime_text";
primaryBinaryAliases = [ "subl" "sublime" "sublime4" ];
crashHandlerBinary = if lib.versionAtLeast buildVersion "4153" then "crash_handler" else "crash_reporter";
downloadUrl = arch: "https://download.sublimetext.com/sublime_text_build_${buildVersion}_${arch}.tar.xz";
primaryBinaryAliases = [
"subl"
"sublime"
"sublime4"
];
crashHandlerBinary =
if lib.versionAtLeast buildVersion "4153" then "crash_handler" else "crash_reporter";
downloadUrl =
arch: "https://download.sublimetext.com/sublime_text_build_${buildVersion}_${arch}.tar.xz";
versionUrl = "https://download.sublimetext.com/latest/${if dev then "dev" else "stable"}";
versionFile = builtins.toString ./packages.nix;
@ -30,7 +61,8 @@ let
] ++ lib.optionals (lib.versionAtLeast buildVersion "4145") [
sqlite
];
in let
in
let
binaryPackage = stdenv.mkDerivation rec {
pname = "${pnameBase}-bin";
version = buildVersion;
@ -39,31 +71,22 @@ in let
dontStrip = true;
dontPatchELF = true;
buildInputs = [ glib gtk3 ]; # for GSETTINGS_SCHEMAS_PATH
nativeBuildInputs = [ zip unzip makeWrapper wrapGAppsHook ];
# make exec.py in Default.sublime-package use own bash with an LD_PRELOAD instead of "/bin/bash"
patchPhase = ''
runHook prePatch
buildInputs = [
glib
# for GSETTINGS_SCHEMAS_PATH
gtk3
];
# TODO: Should not be necessary even in 3
mkdir Default.sublime-package-fix
( cd Default.sublime-package-fix
unzip -q ../Packages/Default.sublime-package
substituteInPlace "exec.py" --replace \
"[\"/bin/bash\"" \
"[\"$out/sublime_bash\""
zip -q ../Packages/Default.sublime-package **/*
)
rm -r Default.sublime-package-fix
runHook postPatch
'';
nativeBuildInputs = [
makeWrapper
wrapGAppsHook
];
buildPhase = ''
runHook preBuild
for binary in ${ builtins.concatStringsSep " " binaries }; do
for binary in ${builtins.concatStringsSep " " binaries}; do
patchelf \
--interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
--set-rpath ${lib.makeLibraryPath neededLibraries}:${stdenv.cc.cc.lib}/lib${lib.optionalString stdenv.is64bit "64"} \
@ -86,10 +109,6 @@ in let
mkdir -p $out
cp -r * $out/
# We can't just call /usr/bin/env bash because a relocation error occurs
# when trying to run a build from within Sublime Text
ln -s ${bash}/bin/bash $out/sublime_bash
runHook postInstall
'';
@ -116,7 +135,8 @@ in let
};
};
};
in stdenv.mkDerivation (rec {
in
stdenv.mkDerivation (rec {
pname = pnameBase;
version = buildVersion;
@ -124,27 +144,44 @@ in stdenv.mkDerivation (rec {
${primaryBinary} = binaryPackage;
nativeBuildInputs = [ makeWrapper ];
nativeBuildInputs = [
makeWrapper
];
installPhase = ''
mkdir -p "$out/bin"
makeWrapper "''$${primaryBinary}/${primaryBinary}" "$out/bin/${primaryBinary}"
'' + builtins.concatStringsSep "" (map (binaryAlias: "ln -s $out/bin/${primaryBinary} $out/bin/${binaryAlias}\n") primaryBinaryAliases) + ''
mkdir -p "$out/share/applications"
substitute "''$${primaryBinary}/${primaryBinary}.desktop" "$out/share/applications/${primaryBinary}.desktop" --replace "/opt/${primaryBinary}/${primaryBinary}" "${primaryBinary}"
for directory in ''$${primaryBinary}/Icon/*; do
size=$(basename $directory)
mkdir -p "$out/share/icons/hicolor/$size/apps"
ln -s ''$${primaryBinary}/Icon/$size/* $out/share/icons/hicolor/$size/apps
done
'';
installPhase =
''
mkdir -p "$out/bin"
makeWrapper "''$${primaryBinary}/${primaryBinary}" "$out/bin/${primaryBinary}"
''
+ builtins.concatStringsSep "" (
map (binaryAlias: "ln -s $out/bin/${primaryBinary} $out/bin/${binaryAlias}\n") primaryBinaryAliases
)
+ ''
mkdir -p "$out/share/applications"
substitute \
"''$${primaryBinary}/${primaryBinary}.desktop" \
"$out/share/applications/${primaryBinary}.desktop" \
--replace-fail "/opt/${primaryBinary}/${primaryBinary}" "${primaryBinary}"
for directory in ''$${primaryBinary}/Icon/*; do
size=$(basename $directory)
mkdir -p "$out/share/icons/hicolor/$size/apps"
ln -s ''$${primaryBinary}/Icon/$size/* $out/share/icons/hicolor/$size/apps
done
'';
passthru = {
updateScript =
let
script = writeShellScript "${packageAttribute}-update-script" ''
set -o errexit
PATH=${lib.makeBinPath [ common-updater-scripts curl ]}
PATH=${
lib.makeBinPath [
common-updater-scripts
curl
]
}
versionFile=$1
latestVersion=$(curl -s "${versionUrl}")
@ -161,15 +198,27 @@ in stdenv.mkDerivation (rec {
update-source-version "${packageAttribute}.${primaryBinary}" "$latestVersion" --file="$versionFile" --version-key=buildVersion --source-key="sources.$platform"
done
'';
in [ script versionFile ];
in
[
script
versionFile
];
};
meta = with lib; {
description = "Sophisticated text editor for code, markup and prose";
homepage = "https://www.sublimetext.com/";
maintainers = with maintainers; [ jtojnar wmertens demin-dmitriy zimbatm ];
maintainers = with maintainers; [
jtojnar
wmertens
demin-dmitriy
zimbatm
];
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
license = licenses.unfree;
platforms = [ "aarch64-linux" "x86_64-linux" ];
platforms = [
"aarch64-linux"
"x86_64-linux"
];
};
})

View File

@ -3,17 +3,17 @@
let
common = opts: callPackage (import ./common.nix opts);
in
{
sublime4 = common {
buildVersion = "4169";
x64sha256 = "jk9wKC0QgfhiHDYUcnDhsmgJsBPOUmCkyvQeI54IJJ4=";
aarch64sha256 = "/W/xGbE+8gGu1zNh6lERZrfG9Dh9QUGkYiqTzp216JI=";
} {};
{
sublime4 = common {
buildVersion = "4169";
x64sha256 = "jk9wKC0QgfhiHDYUcnDhsmgJsBPOUmCkyvQeI54IJJ4=";
aarch64sha256 = "/W/xGbE+8gGu1zNh6lERZrfG9Dh9QUGkYiqTzp216JI=";
} { };
sublime4-dev = common {
buildVersion = "4168";
dev = true;
x64sha256 = "KfW1Mh78CUBTmthHQd1s15a7GrmssSnWZ1RgaarJeag=";
aarch64sha256 = "qJ9oix1kwWN+TUb5/WSKyHcHzB+Q87XolMOhmqx1OFc=";
} {};
}
sublime4-dev = common {
buildVersion = "4173";
dev = true;
x64sha256 = "JEf974X+m0XaZ5x2g4o5XYkdo2A0cIZNjFLCrIgFzEA=";
aarch64sha256 = "+aVV7o59ZFwSOyV0DDNUpaq3q21bXslE+Oz/i33X+4Y=";
} { };
}

View File

@ -14054,6 +14054,18 @@ final: prev:
meta.homepage = "https://github.com/mzlogin/vim-markdown-toc/";
};
vim-matchtag = buildVimPlugin {
pname = "vim-matchtag";
version = "2022-06-24";
src = fetchFromGitHub {
owner = "leafOfTree";
repo = "vim-matchtag";
rev = "54357c00979e07d86aa12b383ddd1d6a7fbda2c2";
sha256 = "01ar9qma2glb6wyhpafnwpf1f63v9i417hx1dzck1gi4fcz1pfqa";
};
meta.homepage = "https://github.com/leafOfTree/vim-matchtag/";
};
vim-matchup = buildVimPlugin {
pname = "vim-matchup";
version = "2024-02-24";

View File

@ -997,6 +997,13 @@
dependencies = with self; [ nvim-dap ];
};
nvim-dap-ui = super.nvim-dap-ui.overrideAttrs {
dependencies = with self; [ nvim-dap nvim-nio ];
doInstallCheck = true;
nvimRequireCheck = "dapui";
};
nvim-lsputils = super.nvim-lsputils.overrideAttrs {
dependencies = with self; [ popfix ];
};

View File

@ -1184,6 +1184,7 @@ https://github.com/Yilin-Yang/vim-markbar/,,
https://github.com/preservim/vim-markdown/,,
https://github.com/euclio/vim-markdown-composer/,,
https://github.com/mzlogin/vim-markdown-toc/,,
https://github.com/leafOfTree/vim-matchtag/,HEAD,
https://github.com/andymass/vim-matchup/,,
https://github.com/aquach/vim-mediawiki-editor/,HEAD,
https://github.com/samoshkin/vim-mergetool/,,

View File

@ -857,6 +857,22 @@ let
};
};
cameron.vscode-pytest = buildVscodeMarketplaceExtension {
mktplcRef = {
name = "vscode-pytest";
publisher = "Cameron";
version = "0.1.1";
sha256 = "sha256-YU37a0Q+IXusXgwf9doxXLlYiyzkizbPjjdCZFxeDaA=";
};
meta = {
changelog = "https://github.com/cameronmaske/pytest-vscode/blob/master/CHANGELOG.md";
description = "A Visual Studio Code extension that adds IntelliSense support for pytest fixtures";
downloadPage = "https://marketplace.visualstudio.com/items?itemName=Cameron.vscode-pytest";
license = lib.licenses.unlicense;
maintainers = [ lib.maintainers.rhoriguchi ];
};
};
christian-kohler.npm-intellisense = buildVscodeMarketplaceExtension {
mktplcRef = {
name = "npm-intellisense";
@ -4831,6 +4847,22 @@ let
};
};
zainchen.json = buildVscodeMarketplaceExtension {
mktplcRef = {
name = "json";
publisher = "ZainChen";
version = "2.0.2";
sha256 = "sha256-nC3Q8KuCtn/jg1j/NaAxWGvnKe/ykrPm2PUjfsJz8aI=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/ZainChen.json/changelog";
description = "A Visual Studio Code extension for JSON support";
downloadPage = "https://marketplace.visualstudio.com/items?itemName=ZainChen.json";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.rhoriguchi ];
};
};
zhuangtongfa.material-theme = buildVscodeMarketplaceExtension {
mktplcRef = {
name = "material-theme";

View File

@ -287,10 +287,10 @@
"src": {
"owner": "libretro",
"repo": "fbneo",
"rev": "fa70abd34f49d8c461165b65a4ad436a4245eb51",
"hash": "sha256-BaV+BY7jTw/6M4XmAAVSRQ9viftyaPZmG17TFgSFqOg="
"rev": "537b5b8dcc358370f2349109004233fbeab46cfe",
"hash": "sha256-zBOF1RV2dx5zraREZm/W//8DwrRMDc/j8sx+CwTyKz0="
},
"version": "unstable-2024-03-27"
"version": "unstable-2024-04-02"
},
"fceumm": {
"fetcher": "fetchFromGitHub",
@ -307,11 +307,11 @@
"src": {
"owner": "flyinghead",
"repo": "flycast",
"rev": "c9fafa0ed176d1ffabae5c1a7a363d0ee276a972",
"hash": "sha256-ruqgen9X3CEY+PRZFVGNPhEDUUvH486paWphQfGCHew=",
"rev": "a0c81d2f2a393bd34caf6f15c1231ba4e2175405",
"hash": "sha256-hajTfovkSH7l6AayQyiHI7E4I/82pBhQnDSxo0BcYu0=",
"fetchSubmodules": true
},
"version": "unstable-2024-03-26"
"version": "unstable-2024-04-03"
},
"fmsx": {
"fetcher": "fetchFromGitHub",
@ -408,10 +408,10 @@
"src": {
"owner": "libretro",
"repo": "mame",
"rev": "6d6d21fd9e41dab2b0e0ca0587baf3fcad18fd67",
"hash": "sha256-8pPDIxnEeeTQl160E+sg/wmchOR53pQmbhvEAXRFif0="
"rev": "ac9d0347f5d331eb49017cd599a5e63a668b4f22",
"hash": "sha256-P5Hunw1o0C29/YsOu7tmR/oY2sbL2qTmY6RoJ56bTzI="
},
"version": "unstable-2024-02-29"
"version": "unstable-2024-04-01"
},
"mame2000": {
"fetcher": "fetchFromGitHub",
@ -438,10 +438,10 @@
"src": {
"owner": "libretro",
"repo": "mame2003-plus-libretro",
"rev": "ee777f235b99d652890dedbc94337094968869d4",
"hash": "sha256-nfoZRymtbAsXWvb8MKFHUwQr0xRk9kLRtgPC2G2iAVE="
"rev": "f03f865af9d496965ab15b9a213691319daad9d2",
"hash": "sha256-yHVkEJYSXHeUGNFJ/zbAwNi+I4gka8Id7z+LnDkCCSM="
},
"version": "unstable-2024-03-22"
"version": "unstable-2024-04-03"
},
"mame2010": {
"fetcher": "fetchFromGitHub",
@ -559,10 +559,10 @@
"src": {
"owner": "libretro",
"repo": "nestopia",
"rev": "2cef539e0df9ae5c8e6adf830a37f5d122bf5f05",
"hash": "sha256-OKqD99kqpIoqRUOByQ4qwAczYlIGeAn0xfTZVC5jptc="
"rev": "efe3a052c75ad47d6e98eeffd1f3d2d4893279c2",
"hash": "sha256-sSXU+rUBJcE2gQRTqnZV8NSuBz/zWNxlZHQqoAUoigU="
},
"version": "unstable-2024-02-18"
"version": "unstable-2024-03-29"
},
"np2kai": {
"fetcher": "fetchFromGitHub",
@ -630,10 +630,10 @@
"src": {
"owner": "libretro",
"repo": "pcsx_rearmed",
"rev": "e2fb1389dc12376acb84e4993ed3b08760257252",
"hash": "sha256-h/Bjgyfp+8gx3VoxteJyXxI/z4ghyw/xdmwAGXidEkc="
"rev": "2fb8465594a7ffb7ccbac39fdedf7c70085d7f63",
"hash": "sha256-RQU2EDcBRa6aH40JrEJ3eppjflk5++AWlOH+iGJyjFY="
},
"version": "unstable-2024-03-25"
"version": "unstable-2024-03-29"
},
"picodrive": {
"fetcher": "fetchFromGitHub",
@ -651,22 +651,22 @@
"src": {
"owner": "jpd002",
"repo": "Play-",
"rev": "08db12cefaad02eaa5265283e3ad0b51eeb8a633",
"hash": "sha256-1wO/iBnyGnBx+vIlnqaihAVrth3shCvogEX9TC59GaY=",
"rev": "8445595b734301f22c6fdd57536867fea3786b58",
"hash": "sha256-3e9+PkSGZbjZ2LVY0cWRIK+TbdJ4hn8FxBjWqhsQB4o=",
"fetchSubmodules": true
},
"version": "unstable-2024-03-26"
"version": "unstable-2024-04-02"
},
"ppsspp": {
"fetcher": "fetchFromGitHub",
"src": {
"owner": "hrydgard",
"repo": "ppsspp",
"rev": "768174e19ca80bccadc067bd2c7adc0d35fb4602",
"hash": "sha256-V66SGvOAcw5lMOBID+qnsjuvKQkt1afl8wdiscKN3Us=",
"rev": "5bead8d999717ed13f7808d3e6b88a237806899e",
"hash": "sha256-bGNlzpC3xPX5xyFyMfXbeR4q3Q9bGN/oRwFTLcgzfJM=",
"fetchSubmodules": true
},
"version": "unstable-2024-03-27"
"version": "unstable-2024-04-04"
},
"prboom": {
"fetcher": "fetchFromGitHub",
@ -793,10 +793,10 @@
"src": {
"owner": "stella-emu",
"repo": "stella",
"rev": "8e8549c1c441e62c2bac0ae5a6489ba3e15412c6",
"hash": "sha256-gcIBtLpfmjPHxnixMOF/onNyIclC8sDrmgTi3zHW0Mc="
"rev": "09be43c5060b7f23eeb413aa3d7a7021e9a6566c",
"hash": "sha256-jxvX9YAgUVe/92AbwXwgOqJmfoH7t8QxnrrGoXzjFZs="
},
"version": "unstable-2024-03-08"
"version": "unstable-2024-04-04"
},
"stella2014": {
"fetcher": "fetchFromGitHub",

View File

@ -66,7 +66,7 @@ python3.pkgs.buildPythonApplication {
checkInputs = with python3.pkgs; [
pytest-aiohttp
pytest-rerunfailures
pytestCheckHook
(pytestCheckHook.override { pytest = pytest_7; })
];
pytestFlagsArray = [

View File

@ -2,22 +2,22 @@
let
versions =
if stdenv.isLinux then {
stable = "0.0.46";
stable = "0.0.47";
ptb = "0.0.76";
canary = "0.0.323";
canary = "0.0.326";
development = "0.0.16";
} else {
stable = "0.0.296";
ptb = "0.0.102";
canary = "0.0.435";
development = "0.0.31";
stable = "0.0.298";
ptb = "0.0.105";
canary = "0.0.451";
development = "0.0.39";
};
version = versions.${branch};
srcs = rec {
x86_64-linux = {
stable = fetchurl {
url = "https://dl.discordapp.net/apps/linux/${version}/discord-${version}.tar.gz";
hash = "sha256-uGHDZg4vu7rUJce6SSVbuLRBPEHXgN4oocAQY+Dqdaw=";
hash = "sha256-4cELs7K7DAfzbA0/BwAkKraTD7z58jzOf1J3Our3CwM=";
};
ptb = fetchurl {
url = "https://dl-ptb.discordapp.net/apps/linux/${version}/discord-ptb-${version}.tar.gz";
@ -25,7 +25,7 @@ let
};
canary = fetchurl {
url = "https://dl-canary.discordapp.net/apps/linux/${version}/discord-canary-${version}.tar.gz";
hash = "sha256-jhfg66zd5oADT84RDdoBXp8n9xGd1jNaX8hDRnJKFK0=";
hash = "sha256-MxiFhd7tLvL1tBRc451qjCFZlmGM8IolckExp0sR3y8=";
};
development = fetchurl {
url = "https://dl-development.discordapp.net/apps/linux/${version}/discord-development-${version}.tar.gz";
@ -35,19 +35,19 @@ let
x86_64-darwin = {
stable = fetchurl {
url = "https://dl.discordapp.net/apps/osx/${version}/Discord.dmg";
hash = "sha256-0bSyL/J2P1pVzv9pFTNSR3V2NkQcDTd74t8KT+WVd64=";
hash = "sha256-GlTebQ16sRgHdpB9+Jw7dn+KVZ6qIrAmWBSypTcoFmE=";
};
ptb = fetchurl {
url = "https://dl-ptb.discordapp.net/apps/osx/${version}/DiscordPTB.dmg";
hash = "sha256-33x6M++EsRJXTbsC4BCa21Yz7cbAhsosPO1WqYq/lCY=";
hash = "sha256-X5bYO1D5eWTYh22v4R274OhjTsVv70XCyrMqeRlt0Bo=";
};
canary = fetchurl {
url = "https://dl-canary.discordapp.net/apps/osx/${version}/DiscordCanary.dmg";
hash = "sha256-Jreet8EstaTAYAmQrzRaJE/b+xwgRVXIW8elEY7amvw=";
hash = "sha256-psVm0eXDHVBGNb/R0kHbvz/4ilyIg4xlOj/CwkwlvgM=";
};
development = fetchurl {
url = "https://dl-development.discordapp.net/apps/osx/${version}/DiscordDevelopment.dmg";
hash = "sha256-He/9KH1oMyj9ofYSwHhdqm7jKDsvrGpPPjLED9fSq30=";
hash = "sha256-nZV9LK3eGpXK/2wQKJBn3K2Ud6uBk8aammkeE00rWx0=";
};
};
aarch64-darwin = x86_64-darwin;

View File

@ -11,13 +11,13 @@
buildGoModule rec {
pname = "trayscale";
version = "0.11.0";
version = "0.11.1";
src = fetchFromGitHub {
owner = "DeedleFake";
repo = "trayscale";
rev = "v${version}";
hash = "sha256-qSrt94hEJosdvs2N6rbcJLpjqvMPkY20dIKV3jtjFlg=";
hash = "sha256-SepVgSxM4+csX7S0LPl6HmGDcgS991sgWJrOAA2YjIc=";
};
vendorHash = "sha256-eIakjEYfVp2wfXu0oqBmd5hJZTp0xgYKNNbtpRBnT2w=";
@ -46,10 +46,11 @@ buildGoModule rec {
'';
meta = with lib; {
changelog = "https://github.com/DeedleFake/trayscale/releases/tag/${version}";
description = "An unofficial GUI wrapper around the Tailscale CLI client";
homepage = "https://github.com/DeedleFake/trayscale";
license = licenses.mit;
maintainers = with maintainers; [ k900 ];
maintainers = with maintainers; [ patka ];
mainProgram = "trayscale";
};
}

View File

@ -1,18 +1,49 @@
{ buildVersion, aarch64sha256, x64sha256, dev ? false }:
{
buildVersion,
dev ? false,
aarch64sha256,
x64sha256,
}:
{ fetchurl, lib, stdenv, xorg, glib, libGL, glibcLocales, gtk3, cairo, pango, libredirect, makeWrapper, wrapGAppsHook
, pkexecPath ? "/run/wrappers/bin/pkexec"
, writeShellScript, common-updater-scripts, curl, gnugrep, coreutils
{
fetchurl,
lib,
stdenv,
xorg,
glib,
libGL,
glibcLocales,
gtk3,
cairo,
pango,
libredirect,
makeWrapper,
wrapGAppsHook,
pkexecPath ? "/run/wrappers/bin/pkexec",
writeShellScript,
common-updater-scripts,
curl,
gnugrep,
coreutils,
}:
let
pnameBase = "sublime-merge";
packageAttribute = "sublime-merge${lib.optionalString dev "-dev"}";
binaries = [ "sublime_merge" crashHandlerBinary "git-credential-sublime" "ssh-askpass-sublime" ];
binaries = [
"sublime_merge"
crashHandlerBinary
"git-credential-sublime"
"ssh-askpass-sublime"
];
primaryBinary = "sublime_merge";
primaryBinaryAliases = [ "smerge" ];
crashHandlerBinary = if lib.versionAtLeast buildVersion "2086" then "crash_handler" else "crash_reporter";
downloadUrl = arch: "https://download.sublimetext.com/sublime_merge_build_${buildVersion}_${arch}.tar.xz";
primaryBinaryAliases = [
"smerge"
];
crashHandlerBinary =
if lib.versionAtLeast buildVersion "2086" then "crash_handler" else "crash_reporter";
downloadUrl =
arch: "https://download.sublimetext.com/sublime_merge_build_${buildVersion}_${arch}.tar.xz";
versionUrl = "https://www.sublimemerge.com/${if dev then "dev" else "download"}";
versionFile = builtins.toString ./default.nix;
@ -25,8 +56,12 @@ let
curl
];
redirects = [ "/usr/bin/pkexec=${pkexecPath}" "/bin/true=${coreutils}/bin/true" ];
in let
redirects = [
"/usr/bin/pkexec=${pkexecPath}"
"/bin/true=${coreutils}/bin/true"
];
in
let
binaryPackage = stdenv.mkDerivation rec {
pname = "${pnameBase}-bin";
version = buildVersion;
@ -35,13 +70,20 @@ in let
dontStrip = true;
dontPatchELF = true;
buildInputs = [ glib gtk3 ]; # for GSETTINGS_SCHEMAS_PATH
nativeBuildInputs = [ makeWrapper wrapGAppsHook ];
buildInputs = [
glib
# for GSETTINGS_SCHEMAS_PATH
gtk3
];
nativeBuildInputs = [
makeWrapper
wrapGAppsHook
];
buildPhase = ''
runHook preBuild
for binary in ${ builtins.concatStringsSep " " binaries }; do
for binary in ${builtins.concatStringsSep " " binaries}; do
patchelf \
--interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
--set-rpath ${lib.makeLibraryPath neededLibraries}:${libGL}/lib:${stdenv.cc.cc.lib}/lib${lib.optionalString stdenv.is64bit "64"} \
@ -96,7 +138,8 @@ in let
};
};
};
in stdenv.mkDerivation (rec {
in
stdenv.mkDerivation (rec {
pname = pnameBase;
version = buildVersion;
@ -104,27 +147,45 @@ in stdenv.mkDerivation (rec {
${primaryBinary} = binaryPackage;
nativeBuildInputs = [ makeWrapper ];
nativeBuildInputs = [
makeWrapper
];
installPhase = ''
mkdir -p "$out/bin"
makeWrapper "''$${primaryBinary}/${primaryBinary}" "$out/bin/${primaryBinary}"
'' + builtins.concatStringsSep "" (map (binaryAlias: "ln -s $out/bin/${primaryBinary} $out/bin/${binaryAlias}\n") primaryBinaryAliases) + ''
mkdir -p "$out/share/applications"
substitute "''$${primaryBinary}/${primaryBinary}.desktop" "$out/share/applications/${primaryBinary}.desktop" --replace "/opt/${primaryBinary}/${primaryBinary}" "${primaryBinary}"
for directory in ''$${primaryBinary}/Icon/*; do
size=$(basename $directory)
mkdir -p "$out/share/icons/hicolor/$size/apps"
ln -s ''$${primaryBinary}/Icon/$size/* $out/share/icons/hicolor/$size/apps
done
'';
installPhase =
''
mkdir -p "$out/bin"
makeWrapper "''$${primaryBinary}/${primaryBinary}" "$out/bin/${primaryBinary}"
''
+ builtins.concatStringsSep "" (
map (binaryAlias: "ln -s $out/bin/${primaryBinary} $out/bin/${binaryAlias}\n") primaryBinaryAliases
)
+ ''
mkdir -p "$out/share/applications"
substitute \
"''$${primaryBinary}/${primaryBinary}.desktop" \
"$out/share/applications/${primaryBinary}.desktop" \
--replace-fail "/opt/${primaryBinary}/${primaryBinary}" "${primaryBinary}"
for directory in ''$${primaryBinary}/Icon/*; do
size=$(basename $directory)
mkdir -p "$out/share/icons/hicolor/$size/apps"
ln -s ''$${primaryBinary}/Icon/$size/* $out/share/icons/hicolor/$size/apps
done
'';
passthru = {
updateScript =
let
script = writeShellScript "${packageAttribute}-update-script" ''
set -o errexit
PATH=${lib.makeBinPath [ common-updater-scripts curl gnugrep ]}
PATH=${
lib.makeBinPath [
common-updater-scripts
curl
gnugrep
]
}
versionFile=$1
latestVersion=$(curl -s ${versionUrl} | grep -Po '(?<=<p class="latest"><i>Version:</i> Build )([0-9]+)')
@ -141,7 +202,11 @@ in stdenv.mkDerivation (rec {
update-source-version "${packageAttribute}.${primaryBinary}" "$latestVersion" --file="$versionFile" --version-key=buildVersion --source-key="sources.$platform"
done
'';
in [ script versionFile ];
in
[
script
versionFile
];
};
meta = with lib; {
@ -150,6 +215,9 @@ in stdenv.mkDerivation (rec {
maintainers = with maintainers; [ zookatron ];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
license = licenses.unfree;
platforms = [ "aarch64-linux" "x86_64-linux" ];
platforms = [
"aarch64-linux"
"x86_64-linux"
];
};
})

View File

@ -2,17 +2,18 @@
let
common = opts: callPackage (import ./common.nix opts);
in {
in
{
sublime-merge = common {
buildVersion = "2091";
aarch64sha256 = "dkPKuuzQQtL3eZlaAPeL7e2p5PCxroFRSp6Rw5wHODc=";
x64sha256 = "T5g6gHgl9xGytEOsh3VuB08IrbDvMu24o/1edCGmfd4=";
} {};
} { };
sublime-merge-dev = common {
buildVersion = "2092";
dev = true;
aarch64sha256 = "3QMDynXMVB4QVtM8EPbZ8I4m+5sEjzs8XN+jEoMaktM=";
x64sha256 = "S9E+wRvO41Eq+PLA/J+sjBIAn6yz715Wg9bKRW2Eobg=";
dev = true;
} {};
} { };
}

View File

@ -0,0 +1,35 @@
{ lib
, buildGoModule
, fetchFromGitHub
, installShellFiles
}:
buildGoModule rec {
pname = "astartectl";
version = "23.5.0";
src = fetchFromGitHub {
owner = "astarte-platform";
repo = "astartectl";
rev = "v${version}";
hash = "sha256-4NgDVuYEeJI5Arq+/+xdyUOBWdCLALM3EKVLSFimJlI=";
};
vendorHash = "sha256-Syod7SUsjiM3cdHPZgjH/3qdsiowa0enyV9DN8k13Ws=";
nativeBuildInputs = [ installShellFiles ];
postInstall = ''
installShellCompletion --cmd astartectl \
--bash <($out/bin/astartectl completion bash) \
--fish <($out/bin/astartectl completion fish) \
--zsh <($out/bin/astartectl completion zsh)
'';
meta = with lib; {
homepage = "https://github.com/astarte-platform/astartectl";
description = "Astarte command line client utility";
license = licenses.asl20;
mainProgram = "astartectl";
maintainers = with maintainers; [ noaccos ];
};
}

View File

@ -1,15 +1,15 @@
{ lib, python3Packages, fetchFromGitHub, installShellFiles }:
{ lib, python3Packages, fetchFromGitHub, installShellFiles, nix-update-script }:
python3Packages.buildPythonApplication rec {
pname = "audible-cli";
version = "0.2.6";
version = "0.3.1";
pyproject = true;
src = fetchFromGitHub {
owner = "mkb79";
repo = "audible-cli";
rev = "refs/tags/v${version}";
hash = "sha256-J81RcehFokOpsQBJLvmeihSrlMyX0geHPl3PPxvGjmY=";
hash = "sha256-AYL7lcYYY7gK12Id94aHRWRlCiznnF4r+lpI5VFpAWY=";
};
nativeBuildInputs = with python3Packages; [
@ -35,7 +35,6 @@ python3Packages.buildPythonApplication rec {
pythonRelaxDeps = [
"httpx"
"audible"
];
postInstall = ''
@ -53,6 +52,8 @@ python3Packages.buildPythonApplication rec {
"audible_cli"
];
passthru.updateScript = nix-update-script { };
meta = with lib; {
description = "A command line interface for audible package. With the cli you can download your Audible books, cover, chapter files";
license = licenses.agpl3Only;

View File

@ -29,7 +29,7 @@ let
doInstallCheck = false;
});
version = "1.0.2";
version = "1.0.3";
in rustPlatform.buildRustPackage {
pname = "devenv";
inherit version;
@ -38,10 +38,10 @@ in rustPlatform.buildRustPackage {
owner = "cachix";
repo = "devenv";
rev = "v${version}";
hash = "sha256-JCxjmWr2+75KMPOoVybNZhy9zhhrg9BAKA8D+J6MNBc=";
hash = "sha256-fnJPqMFoWTYsPNEwbxTxO0h771vZKu+b5Ig4LJQcoRg=";
};
cargoHash = "sha256-FGB8p9ClGokYDrV0b47PnjeSlOv7p+IgThNajve3yms=";
cargoHash = "sha256-Qckh7knX3sARMHgn+39ozQj8CnfyEQV4yjJPP2+v2SM=";
nativeBuildInputs = [ makeWrapper pkg-config ];

View File

@ -0,0 +1,77 @@
{ lib
, python3Packages
, fetchFromGitLab
, meson
, ninja
, glib
, pkg-config
, pandoc
, appstream
, blueprint-compiler
, gobject-introspection
, wrapGAppsHook4
, dbus
, libadwaita
, xdg-user-dirs
}:
python3Packages.buildPythonApplication rec {
pname = "hydrapaper";
version = "3.3.2";
pyproject = false;
src = fetchFromGitLab {
owner = "gabmus";
repo = "HydraPaper";
rev = version;
hash = "sha256-IDaM8bM/0KH9h59523WqLKe400V5lLNyJ4faPf980Ro=";
};
nativeBuildInputs = [
meson
ninja
glib
pkg-config
pandoc
appstream
blueprint-compiler
gobject-introspection
wrapGAppsHook4
];
buildInputs = [
dbus
glib
libadwaita
];
propagatedBuildInputs = with python3Packages; [
dbus-python
pygobject3
pillow
];
# wrapGAppsHook4 propogates gtk4 -- which provides gtk4-update-icon-cache instead
preInstall = ''
substituteInPlace /build/source/meson_post_install.py \
--replace-fail gtk-update-icon-cache gtk4-update-icon-cache
'';
dontWrapGApps = true;
preFixup = ''
gappsWrapperArgs+=(
--prefix PATH : ${lib.makeBinPath [ glib xdg-user-dirs ]}
)
makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
'';
meta = {
description = "GNOME utility for setting different wallpapers on individual monitors";
homepage = "https://hydrapaper.gabmus.org";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ lachrymal ];
mainProgram = "hydrapaper";
platforms = lib.platforms.linux;
};
}

View File

@ -1,9 +1,11 @@
{ cmake
, lib
, stdenv
, fetchFromGitHub
, gitUpdater
{
cmake,
lib,
stdenv,
fetchFromGitHub,
gitUpdater,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "lib60870";
version = "2.3.2";
@ -21,15 +23,13 @@ stdenv.mkDerivation (finalAttrs: {
preConfigure = "cd lib60870-C";
passthru.updateScript = gitUpdater {
rev-prefix = "v";
};
passthru.updateScript = gitUpdater { rev-prefix = "v"; };
meta = with lib; {
description = "Implementation of the IEC 60870-5-101/104 protocol";
homepage = "https://libiec61850.com/";
license = licenses.gpl3Only;
maintainers = with maintainers; [ stv0g ];
platforms = [ "x86_64-linux" ];
platforms = platforms.linux;
};
})

View File

@ -1,9 +1,11 @@
{ cmake
, lib
, stdenv
, fetchFromGitHub
, gitUpdater
{
cmake,
lib,
stdenv,
fetchFromGitHub,
gitUpdater,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "libiec61850";
version = "1.5.3";
@ -19,15 +21,13 @@ stdenv.mkDerivation (finalAttrs: {
nativeBuildInputs = [ cmake ];
passthru.updateScript = gitUpdater {
rev-prefix = "v";
};
passthru.updateScript = gitUpdater { rev-prefix = "v"; };
meta = with lib; {
description = "Open-source library for the IEC 61850 protocols";
homepage = "https://libiec61850.com/";
license = licenses.gpl3Only;
maintainers = with maintainers; [ stv0g ];
platforms = [ "x86_64-linux" ];
platforms = platforms.linux;
};
})

View File

@ -6,13 +6,13 @@
buildGoModule rec {
pname = "mihomo";
version = "1.18.2";
version = "1.18.3";
src = fetchFromGitHub {
owner = "MetaCubeX";
repo = "mihomo";
rev = "v${version}";
hash = "sha256-/4Tlv6LLT1+CHdjJ1ZlYaZj44TX5y6FEHdKk+OA1vBU=";
hash = "sha256-/fFVUI++OhOer5DrvcXO+R+4whtb5+3Qg3e4+ikJr1Y=";
};
vendorHash = "sha256-k4xB/jO78VGD+n9HtuoWXoXB+kZCEyPKJTTwj32nGIw=";

View File

@ -1069,16 +1069,16 @@
},
{
"name": "phpstan/phpdoc-parser",
"version": "1.27.0",
"version": "1.28.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "86e4d5a4b036f8f0be1464522f4c6b584c452757"
"reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/86e4d5a4b036f8f0be1464522f4c6b584c452757",
"reference": "86e4d5a4b036f8f0be1464522f4c6b584c452757",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
"reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
"shasum": ""
},
"require": {
@ -1110,9 +1110,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.27.0"
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0"
},
"time": "2024-03-21T13:14:53+00:00"
"time": "2024-04-03T18:51:33+00:00"
},
{
"name": "phpunit/php-code-coverage",
@ -2557,16 +2557,16 @@
},
{
"name": "symfony/console",
"version": "v7.0.4",
"version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "6b099f3306f7c9c2d2786ed736d0026b2903205f"
"reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/6b099f3306f7c9c2d2786ed736d0026b2903205f",
"reference": "6b099f3306f7c9c2d2786ed736d0026b2903205f",
"url": "https://api.github.com/repos/symfony/console/zipball/fde915cd8e7eb99b3d531d3d5c09531429c3f9e5",
"reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5",
"shasum": ""
},
"require": {
@ -2630,7 +2630,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v7.0.4"
"source": "https://github.com/symfony/console/tree/v7.0.6"
},
"funding": [
{
@ -2646,7 +2646,7 @@
"type": "tidelift"
}
],
"time": "2024-02-22T20:27:20+00:00"
"time": "2024-04-01T11:04:53+00:00"
},
{
"name": "symfony/finder",
@ -3093,16 +3093,16 @@
},
{
"name": "symfony/service-contracts",
"version": "v3.4.1",
"version": "v3.4.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "fe07cbc8d837f60caf7018068e350cc5163681a0"
"reference": "11bbf19a0fb7b36345861e85c5768844c552906e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0",
"reference": "fe07cbc8d837f60caf7018068e350cc5163681a0",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/11bbf19a0fb7b36345861e85c5768844c552906e",
"reference": "11bbf19a0fb7b36345861e85c5768844c552906e",
"shasum": ""
},
"require": {
@ -3155,7 +3155,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v3.4.1"
"source": "https://github.com/symfony/service-contracts/tree/v3.4.2"
},
"funding": [
{
@ -3171,7 +3171,7 @@
"type": "tidelift"
}
],
"time": "2023-12-26T14:02:43+00:00"
"time": "2023-12-19T21:51:00+00:00"
},
{
"name": "symfony/string",
@ -3502,16 +3502,16 @@
},
{
"name": "laravel/pint",
"version": "v1.14.0",
"version": "v1.15.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
"reference": "6b127276e3f263f7bb17d5077e9e0269e61b2a0e"
"reference": "5f288b5e79938cc72f5c298d384e639de87507c6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/pint/zipball/6b127276e3f263f7bb17d5077e9e0269e61b2a0e",
"reference": "6b127276e3f263f7bb17d5077e9e0269e61b2a0e",
"url": "https://api.github.com/repos/laravel/pint/zipball/5f288b5e79938cc72f5c298d384e639de87507c6",
"reference": "5f288b5e79938cc72f5c298d384e639de87507c6",
"shasum": ""
},
"require": {
@ -3522,13 +3522,13 @@
"php": "^8.1.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.49.0",
"illuminate/view": "^10.43.0",
"larastan/larastan": "^2.8.1",
"friendsofphp/php-cs-fixer": "^3.52.1",
"illuminate/view": "^10.48.4",
"larastan/larastan": "^2.9.2",
"laravel-zero/framework": "^10.3.0",
"mockery/mockery": "^1.6.7",
"mockery/mockery": "^1.6.11",
"nunomaduro/termwind": "^1.15.1",
"pestphp/pest": "^2.33.6"
"pestphp/pest": "^2.34.5"
},
"bin": [
"builds/pint"
@ -3564,7 +3564,7 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
"time": "2024-02-20T17:38:05+00:00"
"time": "2024-04-02T14:28:47+00:00"
},
{
"name": "nette/utils",
@ -3787,16 +3787,16 @@
},
{
"name": "phpstan/phpstan",
"version": "1.10.65",
"version": "1.10.66",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "3c657d057a0b7ecae19cb12db446bbc99d8839c6"
"reference": "94779c987e4ebd620025d9e5fdd23323903950bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/3c657d057a0b7ecae19cb12db446bbc99d8839c6",
"reference": "3c657d057a0b7ecae19cb12db446bbc99d8839c6",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd",
"reference": "94779c987e4ebd620025d9e5fdd23323903950bd",
"shasum": ""
},
"require": {
@ -3845,7 +3845,7 @@
"type": "tidelift"
}
],
"time": "2024-03-23T10:30:26+00:00"
"time": "2024-03-28T16:17:31+00:00"
},
{
"name": "phpstan/phpstan-strict-rules",
@ -4026,16 +4026,16 @@
},
{
"name": "symfony/var-dumper",
"version": "v6.4.4",
"version": "v6.4.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "b439823f04c98b84d4366c79507e9da6230944b1"
"reference": "95bd2706a97fb875185b51ecaa6112ec184233d4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/b439823f04c98b84d4366c79507e9da6230944b1",
"reference": "b439823f04c98b84d4366c79507e9da6230944b1",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/95bd2706a97fb875185b51ecaa6112ec184233d4",
"reference": "95bd2706a97fb875185b51ecaa6112ec184233d4",
"shasum": ""
},
"require": {
@ -4091,7 +4091,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v6.4.4"
"source": "https://github.com/symfony/var-dumper/tree/v6.4.6"
},
"funding": [
{
@ -4107,7 +4107,7 @@
"type": "tidelift"
}
],
"time": "2024-02-15T11:23:52+00:00"
"time": "2024-03-19T11:56:30+00:00"
},
{
"name": "symplify/phpstan-rules",

View File

@ -2,7 +2,7 @@
php.buildComposerProject (finalAttrs: {
pname = "pest";
version = "2.34.5";
version = "2.34.7";
src = fetchFromGitHub {
owner = "pestphp";
@ -13,7 +13,7 @@ php.buildComposerProject (finalAttrs: {
composerLock = ./composer.lock;
vendorHash = "sha256-skNf6bUyGUN/F9Ffpz325napOmPINYk1TyUyYqWmwRM=";
vendorHash = "sha256-+FKNGjwq+KFPw8agdwsgnwb2ENgFAWK5EngmS4hMcSA=";
meta = {
changelog = "https://github.com/pestphp/pest/releases/tag/v${finalAttrs.version}";

View File

@ -0,0 +1,34 @@
{ stdenvNoCC, lib, fetchurl }:
stdenvNoCC.mkDerivation rec {
pname = "upsun";
version = "5.0.12";
src = {
x86_64-linux = fetchurl {
url = "https://github.com/platformsh/cli/releases/download/${version}/upsun_${version}_linux_amd64.tar.gz";
hash = "sha256-svEPMVY7r7pAoXwFIMYqCEduqR3Nkocaguf2nIGt+G8=";
};
aarch64-linux = fetchurl {
url = "https://github.com/platformsh/cli/releases/download/${version}/upsun_${version}_linux_arm64.tar.gz";
hash = "sha256-ZraS/PqSPL/kcj5o6hzDdL70IV2IWXOma6OHCiXIDQc=";
};
}.${stdenvNoCC.system} or (throw "${pname}-${version}: ${stdenvNoCC.system} is unsupported.");
dontConfigure = true;
dontBuild = true;
sourceRoot = ".";
installPhase = ''
install -Dm755 upsun $out/bin/upsun
'';
meta = {
homepage = "https://github.com/platformsh/cli";
description = "The unified tool for managing your Upsun services from the command line";
maintainers = with lib.maintainers; [ spk ];
license = lib.licenses.mit;
platforms = [ "x86_64-linux" "aarch64-linux" ];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
}

View File

@ -90,8 +90,6 @@ python3.pkgs.buildPythonApplication {
export HOME=$TMPDIR
'';
dontWrapPythonPrograms = true;
passthru = {
shellPath = "/bin/xonsh";
python = python3; # To the wrapper

View File

@ -8,13 +8,13 @@
stdenv.mkDerivation rec {
pname = "deepin-gettext-tools";
version = "1.0.10";
version = "1.0.11";
src = fetchFromGitHub {
owner = "linuxdeepin";
repo = pname;
rev = version;
sha256 = "sha256-5Dd2QU6JYwuktusssNDfA7IHa6HbFcWo9sZf5PS7NtI=";
sha256 = "sha256-V6X0E80352Vb6zwaBTRfZZnXEVCmBRbO2bca9A9OL6c=";
};
postPatch = ''

View File

@ -2,20 +2,20 @@
buildNpmPackage rec {
pname = "typescript";
version = "5.4.3";
version = "5.4.4";
src = fetchFromGitHub {
owner = "microsoft";
repo = "TypeScript";
rev = "v${version}";
hash = "sha256-yB87R6LyuTbSbQOcRi+QOhrnUy+ra76PiCzsEvPx3ds=";
hash = "sha256-8mVkVLy/E8Fl4Ds9NphtE2Hp1HLM8ehhW/dG6MlaLIs=";
};
patches = [
./disable-dprint-dstBundler.patch
];
npmDepsHash = "sha256-XlXDof0yFxEpNCZN+4ZY2BVgpbAkwdAUJcTRxIXi8eQ=";
npmDepsHash = "sha256-Csu9Ik9aC9qvZmx9Yn1xzkrP1bjHL0o72ZSwzCicFoI=";
passthru.tests = {
version = testers.testVersion {

View File

@ -1,6 +1,6 @@
{ callPackage }:
callPackage ./generic.nix {
version = "2.28.7";
hash = "sha256-JI0Frbz4HkPqrLQNrSIj1ikN8201h4kd1wTwyPotERw=";
version = "2.28.8";
hash = "sha256-A1DYZrvJ8SRujroVwqPfcTOSgLnT5xRat/RVdq2fL/o=";
}

View File

@ -1,6 +1,18 @@
{ callPackage }:
{ callPackage
, fetchpatch
}:
callPackage ./generic.nix {
version = "3.5.2";
hash = "sha256-lVGmnSYccNmRS6vfF/fDiny5cYRPc/wJBpgciFLPUvM=";
version = "3.6.0";
hash = "sha256-tCwAKoTvY8VCjcTPNwS3DeitflhpKHLr6ygHZDbR6wQ=";
patches = [
# https://github.com/Mbed-TLS/mbedtls/pull/9000
# Remove at next version update
(fetchpatch {
name = "fix-darwin-memcpy-error.patch";
url = "https://github.com/Mbed-TLS/mbedtls/commit/b32d7ae0fee2f906be59780b42a0cd4468a39bd1.patch";
hash = "sha256-BTkJs9NEkCl+/Q8EwB/LW9uwF95jQOKWmoCK4B/7/sU=";
})
];
}

View File

@ -2,6 +2,7 @@
, stdenv
, version
, hash
, patches ? []
, fetchFromGitHub
, cmake
@ -21,8 +22,12 @@ stdenv.mkDerivation rec {
repo = "mbedtls";
rev = "${pname}-${version}";
inherit hash;
# mbedtls >= 3.6.0 uses git submodules
fetchSubmodules = true;
};
inherit patches;
nativeBuildInputs = [ cmake ninja perl python3 ];
strictDeps = true;

View File

@ -1,8 +1,8 @@
{ fetchFromGitHub, gperf, openssl, readline, zlib, cmake, lib, stdenv }:
stdenv.mkDerivation rec {
stdenv.mkDerivation {
pname = "tdlib";
version = "1.8.24";
version = "1.8.27";
src = fetchFromGitHub {
owner = "tdlib";
@ -11,8 +11,8 @@ stdenv.mkDerivation rec {
# The tdlib authors do not set tags for minor versions, but
# external programs depending on tdlib constrain the minor
# version, hence we set a specific commit with a known version.
rev = "c5c55092dd61b9eb15d6bbfd0f02c04c593450e7";
hash = "sha256-jqS3PGg42W15QBgpL1PNU3xJdk67g8u0THN/4hW5i88=";
rev = "efc6bd553b61dea0ae8c0436695e8d2539bf03f9";
hash = "sha256-AHfuT+bLkc8Lm1B96E/kwUx1ZKStQbv/skH8woRITRk=";
};
buildInputs = [ gperf openssl readline zlib ];

View File

@ -1,24 +1,25 @@
{ lib
, aiofiles
, aiohttp
, aioresponses
, aiounittest
, buildPythonPackage
, ciso8601
, fetchFromGitHub
, pubnub
, pyjwt
, pytestCheckHook
, python-dateutil
, pythonOlder
, requests
, requests-mock
, setuptools
{
lib,
aiofiles,
aiohttp,
aioresponses,
aiounittest,
buildPythonPackage,
ciso8601,
fetchFromGitHub,
pubnub,
pyjwt,
pytestCheckHook,
python-dateutil,
pythonOlder,
requests,
requests-mock,
setuptools,
}:
buildPythonPackage rec {
pname = "yalexs";
version = "3.0.0";
version = "3.0.1";
pyproject = true;
disabled = pythonOlder "3.9";
@ -27,7 +28,7 @@ buildPythonPackage rec {
owner = "bdraco";
repo = "yalexs";
rev = "refs/tags/v${version}";
hash = "sha256-hY46hUUmbQUWmI+Oa9qIQ1rZdXT5daGo1Vd5JRKfDHE=";
hash = "sha256-+FdQQzQhKhIOEnOym2DNT9uQL2uAbfE8tUXUHIFFK2I=";
};
postPatch = ''
@ -36,11 +37,9 @@ buildPythonPackage rec {
--replace-fail '"vol",' ""
'';
nativeBuildInputs = [
setuptools
];
build-system = [ setuptools ];
propagatedBuildInputs = [
dependencies = [
aiofiles
aiohttp
ciso8601
@ -60,9 +59,7 @@ buildPythonPackage rec {
requests-mock
];
pythonImportsCheck = [
"yalexs"
];
pythonImportsCheck = [ "yalexs" ];
meta = with lib; {
description = "Python API for Yale Access (formerly August) Smart Lock and Doorbell";

View File

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "go-mockery";
version = "2.42.1";
version = "2.42.2";
src = fetchFromGitHub {
owner = "vektra";
repo = "mockery";
rev = "v${version}";
sha256 = "sha256-+D91qWXv+OAZKKXllCv6cpGppzmIlwUTweN2NR/nTqU=";
sha256 = "sha256-y0HMoQvv001smvWlK1qN0bYeHgNDLz1uKQCaRmDnoM4=";
};
preCheck = ''
@ -24,7 +24,7 @@ buildGoModule rec {
CGO_ENABLED = false;
proxyVendor = true;
vendorHash = "sha256-FCl17nywcMoXEA3l0rOzY66Pj51rEEGdK6Zo6Y3/n34=";
vendorHash = "sha256-1SzdVM1Ncpym6bPg1aSyfoAM1YiUGal3Glw0paz+buk=";
subPackages = [ "." ];

View File

@ -2,14 +2,14 @@
rustPlatform.buildRustPackage rec {
pname = "cargo-hack";
version = "0.6.22";
version = "0.6.27";
src = fetchCrate {
inherit pname version;
hash = "sha256-TlTm4pQrviKHusBBYLbpIX1dGcS4dSs1G/TfZT32CvY=";
hash = "sha256-TaXVHTUof/T+p0Zxpdf552uVqCr7jzQtNGKLKq7asqI=";
};
cargoHash = "sha256-OFzeD15m6Ie2GrRlItsqDO3QGTBWkcsvSkanbzPdne4=";
cargoHash = "sha256-qhD6PLvvfLkVr9rOB90Kw4/jDOw06h7TUe1YCjGad1g=";
# some necessary files are absent in the crate version
doCheck = false;

View File

@ -21,6 +21,7 @@ stdenvNoCC.mkDerivation rec {
cp -av sof-tplg $out/lib/firmware/intel/sof-tplg
cp -av sof-ace-tplg $out/lib/firmware/intel/sof-ace-tplg
cp -av sof-ipc4 $out/lib/firmware/intel/sof-ipc4
cp -av sof-ipc4-tplg $out/lib/firmware/intel/sof-ipc4-tplg
runHook postInstall
'';

View File

@ -2,18 +2,18 @@
buildGoModule rec {
pname = "dolt";
version = "1.35.4";
version = "1.35.7";
src = fetchFromGitHub {
owner = "dolthub";
repo = "dolt";
rev = "v${version}";
sha256 = "sha256-9EEqwS7IKlRfE5bwxjScDX7KMCTpmbxixAznRhbaOE0=";
sha256 = "sha256-n6J6gFXdUvR1G2KmZf/k1ngeXAUbYorNFDxND+e5YIY=";
};
modRoot = "./go";
subPackages = [ "cmd/dolt" ];
vendorHash = "sha256-TXx+YmXsAwh2J+nHpff0oHatI6G2QY2QZmMMcHAG6Lc=";
vendorHash = "sha256-o9b+eoFCrC7oN26nyeFGMWnLtvU+Wk7e9cr38bSsKTs=";
proxyVendor = true;
doCheck = false;

View File

@ -3,13 +3,13 @@
stdenv.mkDerivation rec {
pname = "nilfs-utils";
version = "2.2.10";
version = "2.2.11";
src = fetchFromGitHub {
owner = "nilfs-dev";
repo = pname;
rev = "v${version}";
sha256 = "sha256-xTnd3sfBaVU4Ovcsk4oufylNpGS+5n3ZLa2GXzUbeCE=";
sha256 = "sha256-qvs0PBkMYzGfIQ/Z2Wz0aHe2Y2Ia6fA4pMSk5Jhejf4=";
};
nativeBuildInputs = [ autoreconfHook ];

View File

@ -22,7 +22,6 @@ rustPlatform.buildRustPackage rec {
license = [ licenses.gpl3 ];
maintainers = with maintainers; [
infinisil
asymmetric
hsjobeki
];
platforms = platforms.unix;

View File

@ -1708,8 +1708,6 @@ with pkgs;
arubaotp-seed-extractor = callPackage ../tools/security/arubaotp-seed-extractor { };
audible-cli = callPackage ../tools/misc/audible-cli { };
auditwheel = with python3Packages; toPythonApplication auditwheel;
amidst = callPackage ../tools/games/minecraft/amidst { };