Merge staging-next into staging

Changed files
+1102 -247
maintainers
nixos
pkgs
applications
blockchains
optimism
misc
mupdf
networking
cluster
kubefirst
feedreaders
newsboat
virtualization
lima
build-support
node
build-npm-package
by-name
do
docfd
ha
hatch
im
imhex
mu
muffin
ni
nix-update
no
nodejsInstallExecutables
nodejsInstallManuals
qb
qbittorrent-enhanced
st
stalwart-mail
su
surrealdb
us
userborn
uv
wl
wlx-overlay-s
ya
yamlscript
development
ocaml-modules
backoff
domainslib
multicore-bench
multicore-magic
saturn
python-modules
aeidon
craft-platforms
gvm-tools
lib4sbom
model-bakery
python-gvm
stravalib
tools
rust
cargo-clone
wlcs
kde
gear
konsole
os-specific
linux
compsize
kernel
nfs-utils
servers
ldap
web-apps
matomo
tools
wayland
wtype
top-level
+6
maintainers/maintainer-list.nix
···
github = "jankaifer";
githubId = 12820484;
};
+
janlikar = {
+
name = "Jan Likar";
+
email = "jan.likar@protonmail.com";
+
github = "janlikar";
+
githubId = 4228250;
+
};
jansol = {
email = "jan.solanti@paivola.fi";
github = "jansol";
+1
maintainers/team-list.nix
···
leona
osnyx
ma27
+
laalsaas
];
scope = "Team for Flying Circus employees who collectively maintain packages.";
shortName = "Flying Circus employees";
+43
nixos/doc/manual/configuration/user-mgmt.chapter.md
···
::: {.note}
This is experimental.
+
+
Please consider using [Userborn](#sec-userborn) over systemd-sysusers as it's
+
more feature complete.
:::
Instead of using a custom perl script to create users and groups, you can use
···
```
The primary benefit of this is to remove a dependency on perl.
+
+
## Manage users and groups with `userborn` {#sec-userborn}
+
+
::: {.note}
+
This is experimental.
+
:::
+
+
Like systemd-sysusers, Userborn adoesn't depend on Perl but offers some more
+
advantages over systemd-sysusers:
+
+
1. It can create "normal" users (with a GID >= 1000).
+
2. It can update some information about users. Most notably it can update their
+
passwords.
+
3. It will warn when users use an insecure or unsupported password hashing
+
scheme.
+
+
Userborn is the recommended way to manage users if you don't want to rely on
+
the Perl script. It aims to eventually replace the Perl script by default.
+
+
You can enable Userborn via:
+
+
```nix
+
services.userborn.enable = true;
+
```
+
+
You can configure Userborn to store the password files
+
(`/etc/{group,passwd,shadow}`) outside of `/etc` and symlink them from this
+
location to `/etc`:
+
+
```nix
+
services.userborn.passwordFilesLocation = "/persistent/etc";
+
```
+
+
This is useful when you store `/etc` on a `tmpfs` or if `/etc` is immutable
+
(e.g. when using `system.etc.overlay.mutable = false;`). In the latter case the
+
original files are by default stored in `/var/lib/nixos`.
+
+
Userborn implements immutable users by re-mounting the password files
+
read-only. This means that unlike when using the Perl script, trying to add a
+
new user (e.g. via `useradd`) will fail right away.
+7
nixos/doc/manual/release-notes/rl-2411.section.md
···
- [Quickwit](https://quickwit.io), sub-second search & analytics engine on cloud storage. Available as [services.quickwit](options.html#opt-services.quickwit).
+
- [Userborn](https://github.com/nikstur/userborn), a service for declarative
+
user management. This can be used instead of the `update-users-groups.pl`
+
Perl script and instead of systemd-sysusers. To achieve a system without
+
Perl, this is the now recommended tool over systemd-sysusers because it can
+
alos create normal users and change passwords. Available as
+
[services.userborn](#opt-services.userborn.enable)
+
- [Flood](https://flood.js.org/), a beautiful WebUI for various torrent clients. Available as [services.flood](options.html#opt-services.flood).
- [Firefly-iii Data Importer](https://github.com/firefly-iii/data-importer), a data importer for Firefly-III. Available as [services.firefly-iii-data-importer](options.html#opt-services.firefly-iii-data-importer)
+1
nixos/modules/module-list.nix
···
./services/system/systembus-notify.nix
./services/system/systemd-lock-handler.nix
./services/system/uptimed.nix
+
./services/system/userborn.nix
./services/system/zram-generator.nix
./services/torrent/deluge.nix
./services/torrent/flexget.nix
+1 -1
nixos/modules/profiles/perlless.nix
···
# Remove perl from activation
boot.initrd.systemd.enable = lib.mkDefault true;
system.etc.overlay.enable = lib.mkDefault true;
-
systemd.sysusers.enable = lib.mkDefault true;
+
services.userborn.enable = lib.mkDefault true;
# Random perl remnants
system.disableInstallerTools = lib.mkDefault true;
+183
nixos/modules/services/system/userborn.nix
···
+
{
+
utils,
+
config,
+
lib,
+
pkgs,
+
...
+
}:
+
+
let
+
+
cfg = config.services.userborn;
+
userCfg = config.users;
+
+
userbornConfig = {
+
groups = lib.mapAttrsToList (username: opts: {
+
inherit (opts) name gid members;
+
}) config.users.groups;
+
+
users = lib.mapAttrsToList (username: opts: {
+
inherit (opts)
+
name
+
uid
+
group
+
description
+
home
+
password
+
hashedPassword
+
hashedPasswordFile
+
initialPassword
+
initialHashedPassword
+
;
+
isNormal = opts.isNormalUser;
+
shell = utils.toShellPath opts.shell;
+
}) config.users.users;
+
};
+
+
userbornConfigJson = pkgs.writeText "userborn.json" (builtins.toJSON userbornConfig);
+
+
immutableEtc = config.system.etc.overlay.enable && !config.system.etc.overlay.mutable;
+
# The filenames created by userborn.
+
passwordFiles = [
+
"group"
+
"passwd"
+
"shadow"
+
];
+
+
in
+
{
+
+
options.services.userborn = {
+
+
enable = lib.mkEnableOption "userborn";
+
+
package = lib.mkPackageOption pkgs "userborn" { };
+
+
passwordFilesLocation = lib.mkOption {
+
type = lib.types.str;
+
default = if immutableEtc then "/var/lib/nixos" else "/etc";
+
defaultText = lib.literalExpression ''if immutableEtc then "/var/lib/nixos" else "/etc"'';
+
description = ''
+
The location of the original password files.
+
+
If this is not `/etc`, the files are symlinked from this location to `/etc`.
+
+
The primary motivation for this is an immutable `/etc`, where we cannot
+
write the files directly to `/etc`.
+
+
However this an also serve other use cases, e.g. when `/etc` is on a `tmpfs`.
+
'';
+
};
+
+
};
+
+
config = lib.mkIf cfg.enable {
+
+
assertions = [
+
{
+
assertion = !(config.systemd.sysusers.enable && cfg.enable);
+
message = "You cannot use systemd-sysusers and Userborn at the same time";
+
}
+
{
+
assertion = config.system.activationScripts.users == "";
+
message = "system.activationScripts.users has to be empty to use userborn";
+
}
+
{
+
assertion = immutableEtc -> (cfg.passwordFilesLocation != "/etc");
+
message = "When `system.etc.overlay.mutable = false`, `services.userborn.passwordFilesLocation` cannot be set to `/etc`";
+
}
+
];
+
+
system.activationScripts.users = lib.mkForce "";
+
system.activationScripts.hashes = lib.mkForce "";
+
+
systemd = {
+
+
# Create home directories, do not create /var/empty even if that's a user's
+
# home.
+
tmpfiles.settings.home-directories = lib.mapAttrs' (
+
username: opts:
+
lib.nameValuePair opts.home {
+
d = {
+
mode = opts.homeMode;
+
user = username;
+
inherit (opts) group;
+
};
+
}
+
) (lib.filterAttrs (_username: opts: opts.home != "/var/empty") userCfg.users);
+
+
services.userborn = {
+
wantedBy = [ "sysinit.target" ];
+
requiredBy = [ "sysinit-reactivation.target" ];
+
after = [
+
"systemd-remount-fs.service"
+
"systemd-tmpfiles-setup-dev-early.service"
+
];
+
before = [
+
"systemd-tmpfiles-setup-dev.service"
+
"sysinit.target"
+
"shutdown.target"
+
"sysinit-reactivation.target"
+
];
+
conflicts = [ "shutdown.target" ];
+
restartTriggers = [
+
userbornConfigJson
+
cfg.passwordFilesLocation
+
];
+
# This way we don't have to re-declare all the dependencies to other
+
# services again.
+
aliases = [ "systemd-sysusers.service" ];
+
+
unitConfig = {
+
Description = "Manage Users and Groups";
+
DefaultDependencies = false;
+
};
+
+
serviceConfig = {
+
Type = "oneshot";
+
RemainAfterExit = true;
+
TimeoutSec = "90s";
+
+
ExecStart = "${lib.getExe cfg.package} ${userbornConfigJson} ${cfg.passwordFilesLocation}";
+
+
ExecStartPre = lib.mkMerge [
+
(lib.mkIf (!config.system.etc.overlay.mutable) [
+
"${pkgs.coreutils}/bin/mkdir -p ${cfg.passwordFilesLocation}"
+
])
+
+
# Make the source files writable before executing userborn.
+
(lib.mkIf (!userCfg.mutableUsers) (
+
lib.map (file: "-${pkgs.util-linux}/bin/umount ${cfg.passwordFilesLocation}/${file}") passwordFiles
+
))
+
];
+
+
# Make the source files read-only after userborn has finished.
+
ExecStartPost = lib.mkIf (!userCfg.mutableUsers) (
+
lib.map (
+
file:
+
"${pkgs.util-linux}/bin/mount --bind -o ro ${cfg.passwordFilesLocation}/${file} ${cfg.passwordFilesLocation}/${file}"
+
) passwordFiles
+
);
+
};
+
};
+
};
+
+
# Statically create the symlinks to passwordFilesLocation when they're not
+
# inside /etc because we will not be able to do it at runtime in case of an
+
# immutable /etc!
+
environment.etc = lib.mkIf (cfg.passwordFilesLocation != "/etc") (
+
lib.listToAttrs (
+
lib.map (
+
file:
+
lib.nameValuePair file {
+
source = "${cfg.passwordFilesLocation}/${file}";
+
mode = "direct-symlink";
+
}
+
) passwordFiles
+
)
+
);
+
};
+
+
meta.maintainers = with lib.maintainers; [ nikstur ];
+
+
}
+2 -2
nixos/modules/system/etc/etc-activation.nix
···
message = "`system.etc.overlay.enable` requires `boot.initrd.systemd.enable`";
}
{
-
assertion = (!config.system.etc.overlay.mutable) -> config.systemd.sysusers.enable;
-
message = "`system.etc.overlay.mutable = false` requires `systemd.sysusers.enable`";
+
assertion = (!config.system.etc.overlay.mutable) -> (config.systemd.sysusers.enable || config.services.userborn.enable);
+
message = "`!system.etc.overlay.mutable` requires `systemd.sysusers.enable` or `services.userborn.enable`";
}
{
assertion = lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.6";
+3 -8
nixos/modules/virtualisation/azure-agent.nix
···
'';
in
-
{
###### interface
···
config = lib.mkIf cfg.enable {
assertions = [{
-
assertion = pkgs.stdenv.hostPlatform.isx86;
-
message = "Azure not currently supported on ${pkgs.stdenv.hostPlatform.system}";
-
}
-
{
-
assertion = config.networking.networkmanager.enable == false;
-
message = "Windows Azure Linux Agent is not compatible with NetworkManager";
-
}];
+
assertion = config.networking.networkmanager.enable == false;
+
message = "Windows Azure Linux Agent is not compatible with NetworkManager";
+
}];
boot.initrd.kernelModules = [ "ata_piix" ];
networking.firewall.allowedUDPPorts = [ 68 ];
+65 -47
nixos/modules/virtualisation/azure-common.nix
···
-
{ lib, pkgs, ... }:
+
{ config, lib, pkgs, ... }:
with lib;
+
let
+
cfg = config.virtualisation.azure;
+
mlxDrivers = [ "mlx4_en" "mlx4_core" "mlx5_core" ];
+
in
{
-
imports = [ ../profiles/headless.nix ];
+
options.virtualisation.azure = {
+
acceleratedNetworking = mkOption {
+
default = false;
+
description = "Whether the machine's network interface has enabled accelerated networking.";
+
};
+
};
-
require = [ ./azure-agent.nix ];
-
virtualisation.azure.agent.enable = true;
+
imports = [
+
../profiles/headless.nix
+
./azure-agent.nix
+
];
-
boot.kernelParams = [ "console=ttyS0" "earlyprintk=ttyS0" "rootdelay=300" "panic=1" "boot.panic_on_fail" ];
-
boot.initrd.kernelModules = [ "hv_vmbus" "hv_netvsc" "hv_utils" "hv_storvsc" ];
+
config = {
+
virtualisation.azure.agent.enable = true;
-
# Generate a GRUB menu.
-
boot.loader.grub.device = "/dev/sda";
-
boot.loader.timeout = 0;
+
boot.kernelParams = [ "console=ttyS0" "earlyprintk=ttyS0" "rootdelay=300" "panic=1" "boot.panic_on_fail" ];
+
boot.initrd.kernelModules = [ "hv_vmbus" "hv_netvsc" "hv_utils" "hv_storvsc" ];
+
boot.initrd.availableKernelModules = lib.optionals cfg.acceleratedNetworking mlxDrivers;
-
boot.growPartition = true;
+
# Accelerated networking
+
systemd.network.networks."99-azure-unmanaged-devices.network" = lib.mkIf cfg.acceleratedNetworking {
+
matchConfig.Driver = mlxDrivers;
+
linkConfig.Unmanaged = "yes";
+
};
+
networking.networkmanager.unmanaged = lib.mkIf cfg.acceleratedNetworking
+
(builtins.map (drv: "driver:${drv}") mlxDrivers);
-
# Don't put old configurations in the GRUB menu. The user has no
-
# way to select them anyway.
-
boot.loader.grub.configurationLimit = 0;
+
# Generate a GRUB menu.
+
boot.loader.grub.device = "/dev/sda";
-
fileSystems."/" = {
-
device = "/dev/disk/by-label/nixos";
-
fsType = "ext4";
-
autoResize = true;
-
};
+
boot.growPartition = true;
-
# Allow root logins only using the SSH key that the user specified
-
# at instance creation time, ping client connections to avoid timeouts
-
services.openssh.enable = true;
-
services.openssh.settings.PermitRootLogin = "prohibit-password";
-
services.openssh.settings.ClientAliveInterval = 180;
+
fileSystems."/" = {
+
device = "/dev/disk/by-label/nixos";
+
fsType = "ext4";
+
autoResize = true;
+
};
-
# Force getting the hostname from Azure
-
networking.hostName = mkDefault "";
+
# Allow root logins only using the SSH key that the user specified
+
# at instance creation time, ping client connections to avoid timeouts
+
services.openssh.enable = true;
+
services.openssh.settings.PermitRootLogin = "prohibit-password";
+
services.openssh.settings.ClientAliveInterval = 180;
-
# Always include cryptsetup so that NixOps can use it.
-
# sg_scan is needed to finalize disk removal on older kernels
-
environment.systemPackages = [ pkgs.cryptsetup pkgs.sg3_utils ];
+
# Force getting the hostname from Azure
+
networking.hostName = mkDefault "";
-
networking.usePredictableInterfaceNames = false;
+
# Always include cryptsetup so that NixOps can use it.
+
# sg_scan is needed to finalize disk removal on older kernels
+
environment.systemPackages = [ pkgs.cryptsetup pkgs.sg3_utils ];
-
services.udev.extraRules = ''
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:0", ATTR{removable}=="0", SYMLINK+="disk/by-lun/0",
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:1", ATTR{removable}=="0", SYMLINK+="disk/by-lun/1",
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:2", ATTR{removable}=="0", SYMLINK+="disk/by-lun/2"
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:3", ATTR{removable}=="0", SYMLINK+="disk/by-lun/3"
+
networking.usePredictableInterfaceNames = false;
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:4", ATTR{removable}=="0", SYMLINK+="disk/by-lun/4"
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:5", ATTR{removable}=="0", SYMLINK+="disk/by-lun/5"
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:6", ATTR{removable}=="0", SYMLINK+="disk/by-lun/6"
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:7", ATTR{removable}=="0", SYMLINK+="disk/by-lun/7"
+
services.udev.extraRules = ''
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:0", ATTR{removable}=="0", SYMLINK+="disk/by-lun/0",
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:1", ATTR{removable}=="0", SYMLINK+="disk/by-lun/1",
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:2", ATTR{removable}=="0", SYMLINK+="disk/by-lun/2"
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:3", ATTR{removable}=="0", SYMLINK+="disk/by-lun/3"
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:8", ATTR{removable}=="0", SYMLINK+="disk/by-lun/8"
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:9", ATTR{removable}=="0", SYMLINK+="disk/by-lun/9"
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:10", ATTR{removable}=="0", SYMLINK+="disk/by-lun/10"
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:11", ATTR{removable}=="0", SYMLINK+="disk/by-lun/11"
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:4", ATTR{removable}=="0", SYMLINK+="disk/by-lun/4"
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:5", ATTR{removable}=="0", SYMLINK+="disk/by-lun/5"
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:6", ATTR{removable}=="0", SYMLINK+="disk/by-lun/6"
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:7", ATTR{removable}=="0", SYMLINK+="disk/by-lun/7"
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:12", ATTR{removable}=="0", SYMLINK+="disk/by-lun/12"
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:13", ATTR{removable}=="0", SYMLINK+="disk/by-lun/13"
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:14", ATTR{removable}=="0", SYMLINK+="disk/by-lun/14"
-
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:15", ATTR{removable}=="0", SYMLINK+="disk/by-lun/15"
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:8", ATTR{removable}=="0", SYMLINK+="disk/by-lun/8"
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:9", ATTR{removable}=="0", SYMLINK+="disk/by-lun/9"
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:10", ATTR{removable}=="0", SYMLINK+="disk/by-lun/10"
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:11", ATTR{removable}=="0", SYMLINK+="disk/by-lun/11"
-
'';
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:12", ATTR{removable}=="0", SYMLINK+="disk/by-lun/12"
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:13", ATTR{removable}=="0", SYMLINK+="disk/by-lun/13"
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:14", ATTR{removable}=="0", SYMLINK+="disk/by-lun/14"
+
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:15", ATTR{removable}=="0", SYMLINK+="disk/by-lun/15"
+
'';
+
};
}
+27 -4
nixos/modules/virtualisation/azure-image.nix
···
{
imports = [ ./azure-common.nix ];
-
options = {
-
virtualisation.azureImage.diskSize = mkOption {
+
options.virtualisation.azureImage = {
+
diskSize = mkOption {
type = with types; either (enum [ "auto" ]) int;
default = "auto";
example = 2048;
···
Size of disk image. Unit is MB.
'';
};
-
virtualisation.azureImage.contents = mkOption {
+
+
bootSize = mkOption {
+
type = types.int;
+
default = 256;
+
description = ''
+
ESP partition size. Unit is MB.
+
Only effective when vmGeneration is `v2`.
+
'';
+
};
+
+
contents = mkOption {
type = with types; listOf attrs;
default = [ ];
description = ''
Extra contents to add to the image.
'';
};
+
+
vmGeneration = mkOption {
+
type = with types; enum [ "v1" "v2" ];
+
default = "v1";
+
description = ''
+
VM Generation to use.
+
For v2, secure boot needs to be turned off during creation.
+
'';
+
};
};
+
config = {
system.build.azureImage = import ../../lib/make-disk-image.nix {
name = "azure-image";
···
'';
configFile = ./azure-config-user.nix;
format = "raw";
+
+
bootSize = "${toString cfg.bootSize}M";
+
partitionTableType = if cfg.vmGeneration == "v2" then "efi" else "legacy";
+
inherit (cfg) diskSize contents;
inherit config lib pkgs;
};
-
};
}
+5
nixos/tests/all-tests.nix
···
uptime-kuma = handleTest ./uptime-kuma.nix {};
urn-timer = handleTest ./urn-timer.nix {};
usbguard = handleTest ./usbguard.nix {};
+
userborn = runTest ./userborn.nix;
+
userborn-mutable-users = runTest ./userborn-mutable-users.nix;
+
userborn-immutable-users = runTest ./userborn-immutable-users.nix;
+
userborn-mutable-etc = runTest ./userborn-mutable-etc.nix;
+
userborn-immutable-etc = runTest ./userborn-immutable-etc.nix;
user-activation-scripts = handleTest ./user-activation-scripts.nix {};
user-expiry = runTest ./user-expiry.nix;
user-home-mode = handleTest ./user-home-mode.nix {};
+70
nixos/tests/userborn-immutable-etc.nix
···
+
{ lib, ... }:
+
+
let
+
normaloHashedPassword = "$y$j9T$IEWqhKtWg.r.8fVkSEF56.$iKNxdMC6hOAQRp6eBtYvBk4c7BGpONXeZMqc8I/LM46";
+
+
common = {
+
services.userborn.enable = true;
+
boot.initrd.systemd.enable = true;
+
system.etc.overlay = {
+
enable = true;
+
mutable = false;
+
};
+
};
+
in
+
+
{
+
+
name = "userborn-immutable-etc";
+
+
meta.maintainers = with lib.maintainers; [ nikstur ];
+
+
nodes.machine =
+
{ config, ... }:
+
{
+
imports = [ common ];
+
+
users = {
+
users = {
+
normalo = {
+
isNormalUser = true;
+
hashedPassword = normaloHashedPassword;
+
};
+
};
+
};
+
+
specialisation.new-generation = {
+
inheritParentConfig = false;
+
configuration = {
+
nixpkgs = {
+
inherit (config.nixpkgs) hostPlatform;
+
};
+
imports = [ common ];
+
+
users.users = {
+
new-normalo = {
+
isNormalUser = true;
+
};
+
};
+
};
+
};
+
};
+
+
testScript = ''
+
machine.wait_for_unit("userborn.service")
+
+
with subtest("normalo user is created"):
+
assert "${normaloHashedPassword}" in machine.succeed("getent shadow normalo"), "normalo user password is not correct"
+
+
+
machine.succeed("/run/current-system/specialisation/new-generation/bin/switch-to-configuration switch")
+
+
+
with subtest("normalo user is disabled"):
+
print(machine.succeed("getent shadow normalo"))
+
assert "!*" in machine.succeed("getent shadow normalo"), "normalo user is not disabled"
+
+
with subtest("new-normalo user is created after switching to new generation"):
+
print(machine.succeed("getent passwd new-normalo"))
+
'';
+
}
+75
nixos/tests/userborn-immutable-users.nix
···
+
{ lib, ... }:
+
+
let
+
normaloHashedPassword = "$y$j9T$IEWqhKtWg.r.8fVkSEF56.$iKNxdMC6hOAQRp6eBtYvBk4c7BGpONXeZMqc8I/LM46";
+
+
common = {
+
services.userborn.enable = true;
+
users.mutableUsers = false;
+
};
+
in
+
+
{
+
+
name = "userborn-immutable-users";
+
+
meta.maintainers = with lib.maintainers; [ nikstur ];
+
+
nodes.machine =
+
{ config, ... }:
+
{
+
imports = [ common ];
+
+
users = {
+
users = {
+
normalo = {
+
isNormalUser = true;
+
hashedPassword = normaloHashedPassword;
+
};
+
};
+
};
+
+
specialisation.new-generation = {
+
inheritParentConfig = false;
+
configuration = {
+
nixpkgs = {
+
inherit (config.nixpkgs) hostPlatform;
+
};
+
imports = [ common ];
+
+
users.users = {
+
new-normalo = {
+
isNormalUser = true;
+
};
+
};
+
};
+
};
+
};
+
+
testScript = ''
+
machine.wait_for_unit("userborn.service")
+
+
with subtest("normalo user is created"):
+
assert "${normaloHashedPassword}" in machine.succeed("getent shadow normalo"), "normalo user password is not correct"
+
+
with subtest("Fail to add new user manually"):
+
machine.fail("useradd manual-normalo")
+
+
with subtest("Fail to add delete user manually"):
+
machine.fail("userdel normalo")
+
+
+
machine.succeed("/run/current-system/specialisation/new-generation/bin/switch-to-configuration switch")
+
+
+
with subtest("normalo user is disabled"):
+
print(machine.succeed("getent shadow normalo"))
+
assert "!*" in machine.succeed("getent shadow normalo"), "normalo user is not disabled"
+
+
with subtest("new-normalo user is created after switching to new generation"):
+
print(machine.succeed("getent passwd new-normalo"))
+
+
with subtest("Still fail to add new user manually"):
+
machine.fail("useradd again-normalo")
+
'';
+
}
+70
nixos/tests/userborn-mutable-etc.nix
···
+
{ lib, ... }:
+
+
let
+
normaloHashedPassword = "$y$j9T$IEWqhKtWg.r.8fVkSEF56.$iKNxdMC6hOAQRp6eBtYvBk4c7BGpONXeZMqc8I/LM46";
+
+
common = {
+
services.userborn.enable = true;
+
boot.initrd.systemd.enable = true;
+
system.etc.overlay = {
+
enable = true;
+
mutable = true;
+
};
+
};
+
in
+
+
{
+
+
name = "userborn-mutable-etc";
+
+
meta.maintainers = with lib.maintainers; [ nikstur ];
+
+
nodes.machine =
+
{ config, ... }:
+
{
+
imports = [ common ];
+
+
users = {
+
users = {
+
normalo = {
+
isNormalUser = true;
+
hashedPassword = normaloHashedPassword;
+
};
+
};
+
};
+
+
specialisation.new-generation = {
+
inheritParentConfig = false;
+
configuration = {
+
nixpkgs = {
+
inherit (config.nixpkgs) hostPlatform;
+
};
+
imports = [ common ];
+
+
users.users = {
+
new-normalo = {
+
isNormalUser = true;
+
};
+
};
+
};
+
};
+
};
+
+
testScript = ''
+
machine.wait_for_unit("userborn.service")
+
+
with subtest("normalo user is created"):
+
assert "${normaloHashedPassword}" in machine.succeed("getent shadow normalo"), "normalo user password is not correct"
+
+
+
machine.succeed("/run/current-system/specialisation/new-generation/bin/switch-to-configuration switch")
+
+
+
with subtest("normalo user is disabled"):
+
print(machine.succeed("getent shadow normalo"))
+
assert "!*" in machine.succeed("getent shadow normalo"), "normalo user is not disabled"
+
+
with subtest("new-normalo user is created after switching to new generation"):
+
print(machine.succeed("getent passwd new-normalo"))
+
'';
+
}
+76
nixos/tests/userborn-mutable-users.nix
···
+
{ lib, ... }:
+
+
let
+
normaloHashedPassword = "$y$j9T$IEWqhKtWg.r.8fVkSEF56.$iKNxdMC6hOAQRp6eBtYvBk4c7BGpONXeZMqc8I/LM46";
+
+
common = {
+
services.userborn.enable = true;
+
users.mutableUsers = true;
+
};
+
in
+
+
{
+
+
name = "userborn-mutable-users";
+
+
meta.maintainers = with lib.maintainers; [ nikstur ];
+
+
nodes.machine =
+
{ config, ... }:
+
{
+
imports = [ common ];
+
+
users = {
+
mutableUsers = true;
+
users = {
+
normalo = {
+
isNormalUser = true;
+
hashedPassword = normaloHashedPassword;
+
};
+
};
+
};
+
+
specialisation.new-generation = {
+
inheritParentConfig = false;
+
configuration = {
+
nixpkgs = {
+
inherit (config.nixpkgs) hostPlatform;
+
};
+
imports = [ common ];
+
+
users.users = {
+
new-normalo = {
+
isNormalUser = true;
+
};
+
};
+
};
+
};
+
};
+
+
testScript = ''
+
machine.wait_for_unit("userborn.service")
+
+
with subtest("normalo user is created"):
+
assert 1000 == int(machine.succeed("id --user normalo")), "normalo user doesn't have UID 1000"
+
assert "${normaloHashedPassword}" in machine.succeed("getent shadow normalo"), "normalo user password is not correct"
+
+
with subtest("Add new user manually"):
+
machine.succeed("useradd manual-normalo")
+
assert 1001 == int(machine.succeed("id --user manual-normalo")), "manual-normalo user doesn't have UID 1001"
+
+
with subtest("Delete manual--normalo user manually"):
+
machine.succeed("userdel manual-normalo")
+
+
+
machine.succeed("/run/current-system/specialisation/new-generation/bin/switch-to-configuration switch")
+
+
+
with subtest("normalo user is disabled"):
+
print(machine.succeed("getent shadow normalo"))
+
assert "!*" in machine.succeed("getent shadow normalo"), "normalo user is not disabled"
+
+
with subtest("new-normalo user is created after switching to new generation"):
+
print(machine.succeed("getent passwd new-normalo"))
+
assert 1001 == int(machine.succeed("id --user new-normalo")), "new-normalo user doesn't have UID 1001"
+
'';
+
}
+127
nixos/tests/userborn.nix
···
+
{ lib, ... }:
+
+
let
+
# All passwords are "test"
+
rootHashedPasswordFile = "$y$j9T$6ueoTO5y7vvFsGvpQJEEa.$vubxgBiMnkTCtRtPD3hNiZHa7Nm1WsJeE9QomYqSRXB";
+
updatedRootHashedPassword = "$y$j9T$pBCO9N1FRF1rSl6V15n9n/$1JmRLEYPO7TRCx43cvLO19u59WA/oqTEhmSR4wrhzr.";
+
+
normaloPassword = "test";
+
updatedNormaloHashedPassword = "$y$j9T$IEWqhKtWg.r.8fVkSEF56.$iKNxdMC6hOAQRp6eBtYvBk4c7BGpONXeZMqc8I/LM46";
+
+
sysuserInitialHashedPassword = "$y$j9T$Kb6jGrk41hudTZpNjazf11$iw7fZXrewC6JxRaGPz7/gPXDZ.Z1VWsupvy81Hi1XiD";
+
updatedSysuserInitialHashedPassword = "$y$j9T$kUBVhgOdSjymSfwfRVja70$eqCwWzVsz0fI0Uc6JsdD2CYMCpfJcErqnIqva2JCi1D";
+
+
newNormaloHashedPassword = "$y$j9T$UFBMWbGjjVola0YE9YCcV/$jRSi5S6lzkcifbuqjMcyXLTwgOGm9BTQk/G/jYaxroC";
+
in
+
+
{
+
+
name = "userborn";
+
+
meta.maintainers = with lib.maintainers; [ nikstur ];
+
+
nodes.machine = {
+
services.userborn.enable = true;
+
+
# Read this password file at runtime from outside the Nix store.
+
environment.etc."rootpw.secret".text = rootHashedPasswordFile;
+
+
users = {
+
users = {
+
root = {
+
# Override the empty root password set by the test instrumentation.
+
hashedPasswordFile = lib.mkForce "/etc/rootpw.secret";
+
};
+
normalo = {
+
isNormalUser = true;
+
password = normaloPassword;
+
};
+
sysuser = {
+
isSystemUser = true;
+
group = "sysusers";
+
initialHashedPassword = sysuserInitialHashedPassword;
+
};
+
};
+
groups = {
+
sysusers = { };
+
};
+
};
+
+
specialisation.new-generation.configuration = {
+
users = {
+
users = {
+
root = {
+
# Forcing this to null simulates removing the config value in a new
+
# generation.
+
hashedPasswordFile = lib.mkOverride 9 null;
+
hashedPassword = updatedRootHashedPassword;
+
};
+
normalo = {
+
hashedPassword = updatedNormaloHashedPassword;
+
};
+
sysuser = {
+
initialHashedPassword = lib.mkForce updatedSysuserInitialHashedPassword;
+
};
+
new-normalo = {
+
isNormalUser = true;
+
hashedPassword = newNormaloHashedPassword;
+
};
+
};
+
groups = {
+
new-group = { };
+
};
+
};
+
};
+
};
+
+
testScript = ''
+
machine.wait_for_unit("userborn.service")
+
+
with subtest("Correct mode on the password files"):
+
assert machine.succeed("stat -c '%a' /etc/passwd") == "644\n"
+
assert machine.succeed("stat -c '%a' /etc/group") == "644\n"
+
assert machine.succeed("stat -c '%a' /etc/shadow") == "0\n"
+
+
with subtest("root user has correct password"):
+
print(machine.succeed("getent passwd root"))
+
assert "${rootHashedPasswordFile}" in machine.succeed("getent shadow root"), "root user password is not correct"
+
+
with subtest("normalo user is created"):
+
print(machine.succeed("getent passwd normalo"))
+
assert 1000 <= int(machine.succeed("id --user normalo")), "normalo user doesn't have a normal UID"
+
assert machine.succeed("stat -c '%U' /home/normalo") == "normalo\n"
+
+
with subtest("system user is created with correct password"):
+
print(machine.succeed("getent passwd sysuser"))
+
assert 1000 > int(machine.succeed("id --user sysuser")), "sysuser user doesn't have a system UID"
+
assert "${sysuserInitialHashedPassword}" in machine.succeed("getent shadow sysuser"), "system user password is not correct"
+
+
with subtest("sysusers group is created"):
+
print(machine.succeed("getent group sysusers"))
+
+
+
machine.succeed("/run/current-system/specialisation/new-generation/bin/switch-to-configuration switch")
+
+
+
with subtest("root user password is updated"):
+
print(machine.succeed("getent passwd root"))
+
assert "${updatedRootHashedPassword}" in machine.succeed("getent shadow root"), "root user password is not updated"
+
+
with subtest("normalo user password is updated"):
+
print(machine.succeed("getent passwd normalo"))
+
assert "${updatedNormaloHashedPassword}" in machine.succeed("getent shadow normalo"), "normalo user password is not updated"
+
+
with subtest("system user password is NOT updated"):
+
print(machine.succeed("getent passwd sysuser"))
+
assert "${sysuserInitialHashedPassword}" in machine.succeed("getent shadow sysuser"), "sysuser user password is not updated"
+
+
with subtest("new-normalo user is created after switching to new generation"):
+
print(machine.succeed("getent passwd new-normalo"))
+
assert 1000 <= int(machine.succeed("id --user new-normalo")), "new-normalo user doesn't have a normal UID"
+
assert machine.succeed("stat -c '%U' /home/new-normalo") == "new-normalo\n"
+
assert "${newNormaloHashedPassword}" in machine.succeed("getent shadow new-normalo"), "new-normalo user password is not correct"
+
+
with subtest("new-group group is created after switching to new generation"):
+
print(machine.succeed("getent group new-group"))
+
'';
+
}
+3 -3
pkgs/applications/blockchains/optimism/default.nix
···
buildGoModule rec {
pname = "optimism";
-
version = "1.9.0";
+
version = "1.9.1";
src = fetchFromGitHub {
owner = "ethereum-optimism";
repo = "optimism";
rev = "op-node/v${version}";
-
hash = "sha256-TIxA+Dyxdwm3Q8U6xh7x7hBPNXmH+vVDK2lAaRFKSN0=";
+
hash = "sha256-PlwpN8P1t0NNIU+Ys50dIXmfUQFIY9e1tLABiVK0JQo=";
fetchSubmodules = true;
};
subPackages = [ "op-node/cmd" "op-proposer/cmd" "op-batcher/cmd" ];
-
vendorHash = "sha256-xoflPeUeFlbMBUSas+dmBOCFOOvrBHEvYWEk7QkNW14=";
+
vendorHash = "sha256-n1uJ/dkEjjsTdmL7TeHU4PKnBhiRrqCNtcGxK70Q0c4=";
buildInputs = [
libpcap
+1 -1
pkgs/applications/misc/mupdf/default.nix
···
EOF
moveToOutput "bin" "$bin"
-
cp ./build/shared-release/libmupdf.so* $out/lib
+
cp ./build/shared-release/libmupdf${stdenv.hostPlatform.extensions.sharedLibrary}* $out/lib
'' + (lib.optionalString (stdenv.isDarwin) ''
for exe in $bin/bin/*; do
install_name_tool -change build/shared-release/libmupdf.dylib $out/lib/libmupdf.dylib "$exe"
+3 -3
pkgs/applications/networking/cluster/kubefirst/default.nix
···
buildGoModule rec {
pname = "kubefirst";
-
version = "2.4.17";
+
version = "2.5.0";
src = fetchFromGitHub {
owner = "kubefirst";
repo = "kubefirst";
rev = "refs/tags/v${version}";
-
hash = "sha256-wYPrQkoz1rivfnhku3Njj8e/rJc2GuT1HOPyNSada+o=";
+
hash = "sha256-1VadsiZZii6gI8vdTNfwmbBPuHcgPh4kWZ2jf/EkFKU=";
};
-
vendorHash = "sha256-ymqBSNzgK79IYSZ+WR+0yi01008jIPaRJ7vnnxMDycY=";
+
vendorHash = "sha256-tOCVDp9oClfeBsyZ6gv6HoGPjZByoxxAceV/wxQeBSA=";
ldflags = [
"-s"
+1
pkgs/applications/networking/feedreaders/newsboat/default.nix
···
maintainers = with lib.maintainers; [ dotlambda nicknovitski ];
license = lib.licenses.mit;
platforms = lib.platforms.unix;
+
mainProgram = "newsboat";
};
}
+11 -4
pkgs/applications/virtualization/lima/bin.nix
···
chmod +x $out/bin/limactl
wrapProgram $out/bin/limactl \
--prefix PATH : ${lib.makeBinPath [ qemu ]}
-
installShellCompletion --cmd limactl \
-
--bash <($out/bin/limactl completion bash) \
-
--fish <($out/bin/limactl completion fish) \
-
--zsh <($out/bin/limactl completion zsh)
+
+
# the shell completion only works with a patched $out/bin/limactl and so
+
# needs to run after the autoPatchelfHook is executed in postFixup.
+
doShellCompletion() {
+
installShellCompletion --cmd limactl \
+
--bash <($out/bin/limactl completion bash) \
+
--fish <($out/bin/limactl completion fish) \
+
--zsh <($out/bin/limactl completion zsh)
+
}
+
postFixupHooks+=(doShellCompletion)
+
runHook postInstall
'';
+4 -1
pkgs/build-support/node/build-npm-package/hooks/default.nix
···
, prefetch-npm-deps
, diffutils
, installShellFiles
+
, nodejsInstallManuals
+
, nodejsInstallExecutables
}:
{
···
propagatedBuildInputs = [
installShellFiles
makeWrapper
+
nodejsInstallManuals
+
nodejsInstallExecutables
];
substitutions = {
-
hostNode = "${nodejs}/bin/node";
jq = "${jq}/bin/jq";
};
} ./npm-install-hook.sh;
+2 -24
pkgs/build-support/node/build-npm-package/hooks/npm-install-hook.sh
···
cp "${npmWorkspace-.}/$file" "$dest"
done < <(@jq@ --raw-output '.[0].files | map(.path | select(. | startswith("node_modules/") | not)) | join("\n")' <<< "$(npm_config_cache="$HOME/.npm" npm pack --json --dry-run --loglevel=warn --no-foreground-scripts ${npmWorkspace+--workspace=$npmWorkspace} $npmPackFlags "${npmPackFlagsArray[@]}" $npmFlags "${npmFlagsArray[@]}")")
-
# Based on code from Python's buildPythonPackage wrap.sh script, for
-
# supporting both the case when makeWrapperArgs is an array and a
-
# IFS-separated string.
-
#
-
# TODO: remove the string branch when __structuredAttrs are used.
-
if [[ "${makeWrapperArgs+defined}" == "defined" && "$(declare -p makeWrapperArgs)" =~ ^'declare -a makeWrapperArgs=' ]]; then
-
local -a user_args=("${makeWrapperArgs[@]}")
-
else
-
local -a user_args="(${makeWrapperArgs:-})"
-
fi
-
while IFS=" " read -ra bin; do
-
mkdir -p "$out/bin"
-
makeWrapper @hostNode@ "$out/bin/${bin[0]}" --add-flags "$packageOut/${bin[1]}" "${user_args[@]}"
-
done < <(@jq@ --raw-output '(.bin | type) as $typ | if $typ == "string" then
-
.name + " " + .bin
-
elif $typ == "object" then .bin | to_entries | map(.key + " " + .value) | join("\n")
-
elif $typ == "null" then empty
-
else "invalid type " + $typ | halt_error end' "${npmWorkspace-.}/package.json")
+
nodejsInstallExecutables "${npmWorkspace-.}/package.json"
-
while IFS= read -r man; do
-
installManPage "$packageOut/$man"
-
done < <(@jq@ --raw-output '(.man | type) as $typ | if $typ == "string" then .man
-
elif $typ == "list" then .man | join("\n")
-
elif $typ == "null" then empty
-
else "invalid type " + $typ | halt_error end' "${npmWorkspace-.}/package.json")
+
nodejsInstallManuals "${npmWorkspace-.}/package.json"
local -r nodeModulesPath="$packageOut/node_modules"
-1
pkgs/by-name/do/docfd/package.nix
···
cmdliner
containers-data
digestif
-
domainslib
eio_main
lwd
nottui
+3
pkgs/by-name/ha/hatch/package.nix
···
"test_uv_env"
"test_pyenv"
"test_pypirc"
+
# Relies on FHS
+
# Could not read ELF interpreter from any of the following paths: /bin/sh, /usr/bin/env, /bin/dash, /bin/ls
+
"test_new_selected_python"
]
++ lib.optionals stdenv.isDarwin [
# https://github.com/NixOS/nixpkgs/issues/209358
+4 -4
pkgs/by-name/im/imhex/package.nix
···
}:
let
-
version = "1.35.3";
-
patterns_version = "1.35.3";
+
version = "1.35.4";
+
patterns_version = "1.35.4";
patterns_src = fetchFromGitHub {
name = "ImHex-Patterns-source-${patterns_version}";
owner = "WerWolv";
repo = "ImHex-Patterns";
rev = "ImHex-v${patterns_version}";
-
hash = "sha256-h86qoFMSP9ehsXJXOccUK9Mfqe+DVObfSRT4TCtK0rY=";
+
hash = "sha256-7ch2KXkbkdRAvo3HyErWcth3kG4bzYvp9I5GZSsb/BQ=";
};
in
···
owner = "WerWolv";
repo = "ImHex";
rev = "refs/tags/v${version}";
-
hash = "sha256-8vhOOHfg4D9B9yYgnGZBpcjAjuL4M4oHHax9ad5PJtA=";
+
hash = "sha256-6QpmFkSMQpGlEzo7BHZn20c+q8CTDUB4yO87wMU5JT4=";
};
nativeBuildInputs = [
+2
pkgs/by-name/mu/muffin/package.nix
···
, udev
, wayland
, wayland-protocols
+
, wayland-scanner
, wrapGAppsHook3
, xorgserver
, xwayland
···
wrapGAppsHook3
xorgserver # for cvt command
gobject-introspection
+
wayland-scanner
];
buildInputs = [
+2 -3
pkgs/by-name/ni/nix-update/package.nix
···
, fetchFromGitHub
, nix
, nix-prefetch-git
-
, nixpkgs-fmt
, nixpkgs-review
}:
···
];
makeWrapperArgs = [
-
"--prefix" "PATH" ":" (lib.makeBinPath [ nix nix-prefetch-git nixpkgs-fmt nixpkgs-review ])
+
"--prefix" "PATH" ":" (lib.makeBinPath [ nix nix-prefetch-git nixpkgs-review ])
];
checkPhase = ''
···
inherit (src.meta) homepage;
changelog = "https://github.com/Mic92/nix-update/releases/tag/${version}";
license = licenses.mit;
-
maintainers = with maintainers; [ figsoda mic92 zowoq ];
+
maintainers = with maintainers; [ figsoda mic92 ];
mainProgram = "nix-update";
platforms = platforms.all;
};
+27
pkgs/by-name/no/nodejsInstallExecutables/hook.sh
···
+
# shellcheck shell=bash
+
+
nodejsInstallExecutables() {
+
local -r packageJson="${1-./package.json}"
+
+
local -r packageOut="$out/lib/node_modules/$(@jq@ --raw-output '.name' package.json)"
+
+
# Based on code from Python's buildPythonPackage wrap.sh script, for
+
# supporting both the case when makeWrapperArgs is an array and a
+
# IFS-separated string.
+
#
+
# TODO: remove the string branch when __structuredAttrs are used.
+
if [[ "${makeWrapperArgs+defined}" == "defined" && "$(declare -p makeWrapperArgs)" =~ ^'declare -a makeWrapperArgs=' ]]; then
+
local -a user_args=("${makeWrapperArgs[@]}")
+
else
+
local -a user_args="(${makeWrapperArgs:-})"
+
fi
+
+
while IFS=" " read -ra bin; do
+
mkdir -p "$out/bin"
+
makeWrapper @hostNode@ "$out/bin/${bin[0]}" --add-flags "$packageOut/${bin[1]}" "${user_args[@]}"
+
done < <(@jq@ --raw-output '(.bin | type) as $typ | if $typ == "string" then
+
.name + " " + .bin
+
elif $typ == "object" then .bin | to_entries | map(.key + " " + .value) | join("\n")
+
elif $typ == "null" then empty
+
else "invalid type " + $typ | halt_error end' "$packageJson")
+
}
+19
pkgs/by-name/no/nodejsInstallExecutables/package.nix
···
+
{
+
makeSetupHook,
+
installShellFiles,
+
makeWrapper,
+
nodejs,
+
jq,
+
}:
+
+
makeSetupHook {
+
name = "nodejs-install-executables";
+
propagatedBuildInputs = [
+
installShellFiles
+
makeWrapper
+
];
+
substitutions = {
+
hostNode = "${nodejs}/bin/node";
+
jq = "${jq}/bin/jq";
+
};
+
} ./hook.sh
+14
pkgs/by-name/no/nodejsInstallManuals/hook.sh
···
+
# shellcheck shell=bash
+
+
nodejsInstallManuals() {
+
local -r packageJson="${1-./package.json}"
+
+
local -r packageOut="$out/lib/node_modules/$(@jq@ --raw-output '.name' package.json)"
+
+
while IFS= read -r man; do
+
installManPage "$packageOut/$man"
+
done < <(@jq@ --raw-output '(.man | type) as $typ | if $typ == "string" then .man
+
elif $typ == "list" then .man | join("\n")
+
elif $typ == "null" then empty
+
else "invalid type " + $typ | halt_error end' "$packageJson")
+
}
+13
pkgs/by-name/no/nodejsInstallManuals/package.nix
···
+
{
+
makeSetupHook,
+
installShellFiles,
+
jq,
+
}:
+
+
makeSetupHook {
+
name = "nodejs-install-manuals";
+
propagatedBuildInputs = [ installShellFiles ];
+
substitutions = {
+
jq = "${jq}/bin/jq";
+
};
+
} ./hook.sh
+2 -2
pkgs/by-name/qb/qbittorrent-enhanced/package.nix
···
stdenv.mkDerivation rec {
pname = "qbittorrent-enhanced";
-
version = "4.6.5.10";
+
version = "4.6.6.10";
src = fetchFromGitHub {
owner = "c0re100";
repo = "qBittorrent-Enhanced-Edition";
rev = "release-${version}";
-
hash = "sha256-Yy0DUTz1lWkseh9x1xnHJCI89BKqi/D7zUn/S+qC+kM=";
+
hash = "sha256-mmM/1eU8FTWAciq2rh7fRa96fOkovMk4ScoehnqHdIQ=";
};
nativeBuildInputs = [
+9 -4
pkgs/by-name/st/stalwart-mail/package.nix
···
# See upstream issue for rocksdb 9.X support
# https://github.com/stalwartlabs/mail-server/issues/407
rocksdb = rocksdb_8_11;
-
version = "0.9.2";
+
version = "0.9.3";
in
rustPlatform.buildRustPackage {
pname = "stalwart-mail";
···
owner = "stalwartlabs";
repo = "mail-server";
rev = "refs/tags/v${version}";
-
hash = "sha256-8O+0yOdaHnc2vDLCPK7PIuR6IBeOmH9RNDo0uaw7EeU=";
+
hash = "sha256-XjHm9jBpBQcf1qaZJLDSSrPK9Nqi3olG0pMXHdNUjbg=";
fetchSubmodules = true;
};
-
cargoHash = "sha256-ofF9eTXLVyFfrTnAj6rMYV3dMY613tjhKgoLs303CEA=";
+
cargoHash = "sha256-sFYvEKZVTS5v37CpIl/KjoOY0iWCHLgIJFUdht5SjJY=";
patches = [
# Remove "PermissionsStartOnly" from systemd service files,
···
bzip2
openssl
sqlite
+
zstd
+
] ++ lib.optionals stdenv.isLinux [
foundationdb
-
zstd
] ++ lib.optionals stdenv.isDarwin [
darwin.apple_sdk.frameworks.CoreFoundation
darwin.apple_sdk.frameworks.Security
darwin.apple_sdk.frameworks.SystemConfiguration
];
+
+
# skip defaults on darwin because foundationdb is not available
+
buildNoDefaultFeatures = stdenv.isDarwin;
+
buildFeatures = lib.optional (stdenv.isDarwin) [ "sqlite" "postgres" "mysql" "rocks" "elastic" "s3" "redis" ];
env = {
OPENSSL_NO_VENDOR = true;
+2 -2
pkgs/by-name/su/surrealdb/package.nix
···
hash = "sha256-KtR+qU2Xys4NkEARZBbO8mTPa7EI9JplWvXdtuLt2vE=";
};
-
patches = [
-
./time.patch # TODO: remove when https://github.com/surrealdb/surrealdb/pull/4565 merged
+
cargoPatches = [
+
./time.patch # TODO: remove when https://github.com/surrealdb/surrealdb/pull/4565 merged
];
cargoHash = "sha256-5qIIPdE6HYov5EIR4do+pMeZ1Lo3at39aKOP9scfMy8=";
+43
pkgs/by-name/us/userborn/package.nix
···
+
{
+
lib,
+
rustPlatform,
+
fetchFromGitHub,
+
makeBinaryWrapper,
+
mkpasswd,
+
}:
+
+
rustPlatform.buildRustPackage rec {
+
pname = "userborn";
+
version = "0.1.0";
+
+
src = fetchFromGitHub {
+
owner = "nikstur";
+
repo = "userborn";
+
rev = version;
+
hash = "sha256-aptFDrL9RPPTu4wp2ee3LVaEruRdCWtLGIKdOgsR+/s=";
+
};
+
+
sourceRoot = "${src.name}/rust/userborn";
+
+
cargoHash = "sha256-m39AC26E0Pxu1E/ap2kSwr5uznJNgExf5QUrZ+zTNX0=";
+
+
nativeBuildInputs = [ makeBinaryWrapper ];
+
+
buildInputs = [ mkpasswd ];
+
+
nativeCheckInputs = [ mkpasswd ];
+
+
postInstall = ''
+
wrapProgram $out/bin/userborn --prefix PATH : ${lib.makeBinPath [ mkpasswd ]}
+
'';
+
+
stripAllList = [ "bin" ];
+
+
meta = with lib; {
+
homepage = "https://github.com/nikstur/userborn";
+
description = "Declaratively bear (manage) Linux users and groups";
+
license = licenses.mit;
+
maintainers = with lib.maintainers; [ nikstur ];
+
mainProgram = "userborn";
+
};
+
}
+3 -41
pkgs/by-name/uv/uv/Cargo.lock
···
]
[[package]]
-
name = "alloc-no-stdlib"
-
version = "2.0.4"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
-
-
[[package]]
-
name = "alloc-stdlib"
-
version = "0.2.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
-
dependencies = [
-
"alloc-no-stdlib",
-
]
-
-
[[package]]
name = "android-tzdata"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
···
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fec134f64e2bc57411226dfc4e52dec859ddfc7e711fc5e07b612584f000e4aa"
dependencies = [
-
"brotli",
"bzip2",
"flate2",
"futures-core",
···
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "510a90332002c1af3317ef6b712f0dab697f30bbe809b86965eac2923c0bca8e"
-
-
[[package]]
-
name = "brotli"
-
version = "6.0.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b"
-
dependencies = [
-
"alloc-no-stdlib",
-
"alloc-stdlib",
-
"brotli-decompressor",
-
]
-
-
[[package]]
-
name = "brotli-decompressor"
-
version = "4.0.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362"
-
dependencies = [
-
"alloc-no-stdlib",
-
"alloc-stdlib",
-
]
[[package]]
name = "bstr"
···
[[package]]
name = "uv"
-
version = "0.3.5"
+
version = "0.4.0"
dependencies = [
"anstream",
"anyhow",
···
"uv-auth",
"uv-cache",
"uv-normalize",
-
"uv-workspace",
[[package]]
···
"uv-state",
"uv-warnings",
"which",
-
"windows-sys 0.52.0",
+
"windows-sys 0.59.0",
"winsafe 0.0.22",
···
[[package]]
name = "uv-version"
-
version = "0.3.5"
+
version = "0.4.0"
[[package]]
name = "uv-virtualenv"
+2 -2
pkgs/by-name/uv/uv/package.nix
···
python3Packages.buildPythonApplication rec {
pname = "uv";
-
version = "0.3.5";
+
version = "0.4.0";
pyproject = true;
src = fetchFromGitHub {
owner = "astral-sh";
repo = "uv";
rev = "refs/tags/${version}";
-
hash = "sha256-D/BCxA7GOEu26xDkMmchXAMFB1pDewYSiOrNj2oSTyE=";
+
hash = "sha256-JEGcX4dT/cVLb07n2Y0nai17jW0tXpV18qaYVnoEpew=";
};
cargoDeps = rustPlatform.importCargoLock {
+8 -1
pkgs/by-name/wl/wlx-overlay-s/package.nix
···
fetchFromGitHub,
fontconfig,
lib,
+
libGL,
+
libuuid,
libX11,
libXext,
libXrandr,
···
shaderc,
stdenv,
testers,
+
vulkan-loader,
wayland,
wlx-overlay-s,
}:
···
postInstall = ''
patchelf $out/bin/wlx-overlay-s \
--add-needed ${lib.getLib wayland}/lib/libwayland-client.so.0 \
-
--add-needed ${lib.getLib libxkbcommon}/lib/libxkbcommon.so.0
+
--add-needed ${lib.getLib libxkbcommon}/lib/libxkbcommon.so.0 \
+
--add-needed ${lib.getLib libGL}/lib/libEGL.so.1 \
+
--add-needed ${lib.getLib libGL}/lib/libGL.so.1 \
+
--add-needed ${lib.getLib vulkan-loader}/lib/libvulkan.so.1 \
+
--add-needed ${lib.getLib libuuid}/lib/libuuid.so.1
'';
passthru = {
+2 -2
pkgs/by-name/ya/yamlscript/package.nix
···
buildGraalvmNativeImage rec {
pname = "yamlscript";
-
version = "0.1.72";
+
version = "0.1.73";
src = fetchurl {
url = "https://github.com/yaml/yamlscript/releases/download/${version}/yamlscript.cli-${version}-standalone.jar";
-
hash = "sha256-Qp2/Bifh+KXUjpcW/Lct6nGBv50TUEOGTjVPkXGbD54=";
+
hash = "sha256-FXw476RXIFnjnK8cz/Kxni4dZ58LJvevcxiotDO7+bQ=";
};
executable = "ys";
+24
pkgs/development/ocaml-modules/backoff/default.nix
···
+
{ lib, buildDunePackage, fetchurl, alcotest}:
+
+
buildDunePackage rec {
+
pname = "backoff";
+
version = "0.1.0";
+
+
src = fetchurl {
+
url = "https://github.com/ocaml-multicore/backoff/releases/download/${version}/backoff-${version}.tbz";
+
hash = "sha256-EaSseCKekNE03gaNiqh5Y11r8TF9XulR9AZboPWMIwA=";
+
};
+
+
doCheck = true;
+
+
checkInputs = [ alcotest ];
+
+
meta = {
+
description = "Exponential backoff mechanism for OCaml";
+
homepage = "https://github.com/ocaml-multicore/backoff";
+
license = lib.licenses.isc;
+
maintainers = [ lib.maintainers.vbgl ];
+
};
+
+
minimalOCamlVersion = "4.13";
+
}
+1
pkgs/development/ocaml-modules/domainslib/default.nix
···
description = "Nested-parallel programming";
license = lib.licenses.isc;
maintainers = [ lib.maintainers.vbgl ];
+
broken = true; # Not compatible with saturn > 0.4.0
};
}
+22
pkgs/development/ocaml-modules/multicore-bench/default.nix
···
+
{ lib, buildDunePackage, fetchurl
+
, domain-local-await, mtime, multicore-magic, yojson
+
}:
+
+
buildDunePackage rec {
+
pname = "multicore-bench";
+
version = "0.1.4";
+
+
src = fetchurl {
+
url = "https://github.com/ocaml-multicore/multicore-bench/releases/download/${version}/multicore-bench-${version}.tbz";
+
hash = "sha256-iCx5QvhYo/e53cW23Sza2as4aez4HeESVvLPF1DW85A=";
+
};
+
+
propagatedBuildInputs = [ domain-local-await mtime multicore-magic yojson ];
+
+
meta = {
+
description = "Framework for writing multicore benchmark executables to run on current-bench";
+
homepage = "https://github.com/ocaml-multicore/multicore-bench";
+
license = lib.licenses.isc;
+
maintainers = [ lib.maintainers.vbgl ];
+
};
+
}
+24
pkgs/development/ocaml-modules/multicore-magic/default.nix
···
+
{ lib, buildDunePackage, fetchurl
+
, alcotest, domain_shims
+
}:
+
+
buildDunePackage rec {
+
pname = "multicore-magic";
+
version = "2.3.0";
+
+
src = fetchurl {
+
url = "https://github.com/ocaml-multicore/multicore-magic/releases/download/${version}/multicore-magic-${version}.tbz";
+
hash = "sha256-r50UqLOd2DoTz0CEXHpJMHX0fty+mGiAKTdtykgnzu4=";
+
};
+
+
doCheck = true;
+
+
checkInputs = [ alcotest domain_shims ];
+
+
meta = {
+
description = "Low-level multicore utilities for OCaml";
+
license = lib.licenses.isc;
+
homepage = "https://github.com/ocaml-multicore/multicore-magic";
+
maintainers = [ lib.maintainers.vbgl ];
+
};
+
}
+10 -1
pkgs/development/ocaml-modules/saturn/default.nix
···
{ lib, buildDunePackage, ocaml
, saturn_lockfree
+
, domain_shims
, dscheck
+
, multicore-bench
, qcheck, qcheck-alcotest, qcheck-stm
}:
···
propagatedBuildInputs = [ saturn_lockfree ];
doCheck = lib.versionAtLeast ocaml.version "5.0";
-
checkInputs = [ dscheck qcheck qcheck-alcotest qcheck-stm ];
+
checkInputs = [
+
domain_shims
+
dscheck
+
multicore-bench
+
qcheck
+
qcheck-alcotest
+
qcheck-stm
+
];
meta = saturn_lockfree.meta // {
description = "Parallelism-safe data structures for multicore OCaml";
+5 -5
pkgs/development/ocaml-modules/saturn/lockfree.nix
···
{ lib, fetchurl, buildDunePackage
-
, domain_shims
+
, backoff, multicore-magic
}:
buildDunePackage rec {
pname = "saturn_lockfree";
-
version = "0.4.0";
+
version = "0.5.0";
-
minimalOCamlVersion = "4.12";
+
minimalOCamlVersion = "4.13";
src = fetchurl {
url = "https://github.com/ocaml-multicore/saturn/releases/download/${version}/saturn-${version}.tbz";
-
hash = "sha256-fHvslaJwVbQaqDVA/MHGqHybetYbxRGlMrhgXqM3iPs=";
+
hash = "sha256-ZmmxwIe5PiPYTTdvOHbOjRbv2b/bb9y0IekByfREPjk=";
};
-
propagatedBuildInputs = [ domain_shims ];
+
propagatedBuildInputs = [ backoff multicore-magic ];
meta = {
description = "Lock-free data structures for multicore OCaml";
+19 -28
pkgs/development/python-modules/aeidon/default.nix
···
{
lib,
buildPythonPackage,
-
fetchPypi,
-
gettext,
-
flake8,
-
isocodes,
+
fetchFromGitHub,
+
setuptools,
pytestCheckHook,
charset-normalizer,
}:
···
buildPythonPackage rec {
pname = "aeidon";
version = "1.15";
+
pyproject = true;
-
src = fetchPypi {
-
pname = "aeidon";
-
inherit version;
-
sha256 = "sha256-qGpGraRZFVaW1Jys24qvfPo5WDg7Q/fhvm44JH8ulVw=";
+
src = fetchFromGitHub {
+
owner = "otsaloma";
+
repo = "gaupol";
+
rev = "refs/tags/${version}";
+
hash = "sha256-lhNyeieeiBBm3rNDEU0BuWKeM6XYlOtv1voW8tR8cUM=";
};
-
nativeBuildInputs = [
-
gettext
-
flake8
-
];
+
postPatch = ''
+
mv setup.py setup_gaupol.py
+
substituteInPlace setup-aeidon.py \
+
--replace "from setup import" "from setup_gaupol import"
+
mv setup-aeidon.py setup.py
+
'';
-
dependencies = [ isocodes ];
+
build-system = [ setuptools ];
-
installPhase = ''
-
runHook preInstall
-
python setup.py --without-gaupol install --prefix=$out
-
runHook postInstall
-
'';
+
dependencies = [ charset-normalizer ];
-
nativeCheckInputs = [
-
pytestCheckHook
-
charset-normalizer
-
];
-
-
# Aeidon is looking in the wrong subdirectory for data
-
preCheck = ''
-
cp -r data aeidon/
-
'';
+
nativeCheckInputs = [ pytestCheckHook ];
pytestFlagsArray = [ "aeidon/test" ];
···
pythonImportsCheck = [ "aeidon" ];
meta = with lib; {
+
changelog = "https://github.com/otsaloma/gaupol/releases/tag/${version}";
description = "Reading, writing and manipulationg text-based subtitle files";
homepage = "https://github.com/otsaloma/gaupol";
-
license = licenses.gpl3Only;
+
license = licenses.gpl3Plus;
maintainers = with maintainers; [ erictapen ];
};
+2 -2
pkgs/development/python-modules/craft-platforms/default.nix
···
buildPythonPackage rec {
pname = "craft-platforms";
-
version = "0.1.1";
+
version = "0.2.0";
pyproject = true;
disabled = pythonOlder "3.10";
···
owner = "canonical";
repo = "craft-platforms";
rev = "refs/tags/${version}";
-
hash = "sha256-KzskmSw7NsH1CAYjPf2281Ob71Jd6AhWxtp5tR3IqyU=";
+
hash = "sha256-chCPuncy+//Y5iohTh0d8qRNaEno6Sqze2Zoas3uwPQ=";
};
postPatch = ''
+2 -2
pkgs/development/python-modules/gvm-tools/default.nix
···
buildPythonPackage rec {
pname = "gvm-tools";
-
version = "24.7.0";
+
version = "24.8.0";
pyproject = true;
disabled = pythonOlder "3.9";
···
owner = "greenbone";
repo = "gvm-tools";
rev = "refs/tags/v${version}";
-
hash = "sha256-m4wEAx2WyVIMi+xucqUCPr2PLxLo00haObjf+0swUdA=";
+
hash = "sha256-MwLwJyxKu4O0cEabBjcdhqtqW3uwgbyVlezZysUDYa4=";
};
__darwinAllowLocalNetworking = true;
+2 -2
pkgs/development/python-modules/lib4sbom/default.nix
···
buildPythonPackage rec {
pname = "lib4sbom";
-
version = "0.7.3";
+
version = "0.7.4";
pyproject = true;
disabled = pythonOlder "3.7";
···
owner = "anthonyharrison";
repo = "lib4sbom";
rev = "refs/tags/v${version}";
-
hash = "sha256-RuIvhlLnWf/ayU6tjpHYKvBFqU8ojPwJK/pDIdLrD2s=";
+
hash = "sha256-Uqv6E9qMJRsfYICVAiZEQGlG/0w8aECuh8wMa85FnlE=";
};
build-system = [ setuptools ];
+2 -2
pkgs/development/python-modules/model-bakery/default.nix
···
buildPythonPackage rec {
pname = "model-bakery";
-
version = "1.19.4";
+
version = "1.19.5";
pyproject = true;
disabled = pythonOlder "3.8";
···
owner = "model-bakers";
repo = "model_bakery";
rev = "refs/tags/${version}";
-
hash = "sha256-Jok5fQ8z9/v6n482yYA06ugC+4SSMuV7fmt1cdv3/dg=";
+
hash = "sha256-hOXE3mddGmRRgO9qAlj3bnmco8QTg2rD0sgui3J9pp8=";
};
build-system = [ hatchling ];
+2 -2
pkgs/development/python-modules/python-gvm/default.nix
···
buildPythonPackage rec {
pname = "python-gvm";
-
version = "24.7.0";
+
version = "24.8.0";
pyproject = true;
disabled = pythonOlder "3.9";
···
owner = "greenbone";
repo = "python-gvm";
rev = "refs/tags/v${version}";
-
hash = "sha256-WsZxISvPw4uvRKv5CYpcLunAxvoCvVWTSp+m2QTEe0g=";
+
hash = "sha256-JyImC75Le6S2kQXSU/Ze4TNaitJSJ8LD9j/ny+xjoGA=";
};
build-system = [ poetry-core ];
+5 -6
pkgs/development/python-modules/stravalib/default.nix
···
buildPythonPackage rec {
pname = "stravalib";
-
version = "1.6";
+
version = "2.0";
pyproject = true;
-
disabled = pythonOlder "3.9";
+
disabled = pythonOlder "3.10";
src = fetchFromGitHub {
owner = "stravalib";
repo = "stravalib";
rev = "refs/tags/v${version}";
-
hash = "sha256-U+QlSrijvT77/m+yjhFxbcVTQe51J+PR4Kc8N+qG+wI=";
+
hash = "sha256-uF29fK+ZSSO688zKYYiSEygBUJZ6NBcvdgGgz3I1I6Q=";
};
-
nativeBuildInputs = [
+
build-system = [
setuptools
setuptools-scm
];
-
propagatedBuildInputs = [
+
dependencies = [
arrow
pint
pydantic
···
changelog = "https://github.com/stravalib/stravalib/releases/tag/v${version}";
license = licenses.asl20;
maintainers = with maintainers; [ sikmir ];
-
broken = lib.versionAtLeast pydantic.version "2";
};
}
+1 -1
pkgs/development/tools/rust/cargo-clone/default.nix
···
homepage = "https://github.com/janlikar/cargo-clone";
changelog = "https://github.com/janlikar/cargo-clone/blob/v${version}/CHANGELOG.md";
license = with licenses; [ asl20 mit ];
-
maintainers = with maintainers; [ figsoda matthiasbeyer ];
+
maintainers = with maintainers; [ figsoda matthiasbeyer janlikar ];
};
}
+1
pkgs/development/tools/wlcs/default.nix
···
boost
gtest
wayland
+
wayland-scanner # needed by cmake
];
passthru = {
+2
pkgs/kde/gear/konsole/default.nix
···
pname = "konsole";
extraBuildInputs = [qt5compat qtmultimedia];
+
+
meta.mainProgram = "konsole";
}
+14 -2
pkgs/os-specific/linux/compsize/default.nix
···
-
{ lib, stdenv, fetchFromGitHub, btrfs-progs }:
+
{ lib, stdenv, fetchFromGitHub, fetchurl, btrfs-progs }:
+
let
+
# https://github.com/kilobyte/compsize/issues/52
+
btrfs-progs' = btrfs-progs.overrideAttrs (old: rec {
+
pname = "btrfs-progs";
+
version = "6.10";
+
src = fetchurl {
+
url = "mirror://kernel/linux/kernel/people/kdave/btrfs-progs/btrfs-progs-v${version}.tar.xz";
+
hash = "sha256-M4KoTj/P4f/eoHphqz9OhmZdOPo18fNFSNXfhnQj4N8=";
+
};
+
});
+
+
in
stdenv.mkDerivation rec {
pname = "compsize";
version = "1.5";
···
sha256 = "sha256-OX41ChtHX36lVRL7O2gH21Dfw6GPPEClD+yafR/PFm8=";
};
-
buildInputs = [ btrfs-progs ];
+
buildInputs = [ btrfs-progs' ];
installFlags = [
"PREFIX=${placeholder "out"}"
+4 -4
pkgs/os-specific/linux/kernel/zen-kernels.nix
···
variants = {
# ./update-zen.py zen
zen = {
-
version = "6.10.5"; #zen
+
version = "6.10.7"; #zen
suffix = "zen1"; #zen
-
sha256 = "08ibz7560xsmlnrm8j13hxf8hjjcxfmnjdrwffqc81g9g6rvpqra"; #zen
+
sha256 = "1km3b7nad429hw7d8ff14zj1cg0fhh65ycrrwk4iaxj6rvafzsz1"; #zen
isLqx = false;
};
# ./update-zen.py lqx
lqx = {
-
version = "6.10.5"; #lqx
+
version = "6.10.6"; #lqx
suffix = "lqx1"; #lqx
-
sha256 = "09rscj20j94qkmvk0hlpjm6v1n1ndnkv2vl035gsp5lwggws2jqm"; #lqx
+
sha256 = "0b1pqsssnxc69yhx2wai5xnj6cb9713z33m8xal25jjgx9z4v8kv"; #lqx
isLqx = true;
};
};
+4 -4
pkgs/os-specific/linux/nfs-utils/default.nix
···
{ stdenv, fetchurl, fetchpatch, lib, pkg-config, util-linux, libcap, libtirpc, libevent
, sqlite, libkrb5, kmod, libuuid, keyutils, lvm2, systemd, coreutils, tcp_wrappers
-
, python3, buildPackages, nixosTests, rpcsvc-proto, openldap
+
, python3, buildPackages, nixosTests, rpcsvc-proto, openldap, libxml2
, enablePython ? true, enableLdap ? true
}:
···
stdenv.mkDerivation rec {
pname = "nfs-utils";
-
version = "2.6.4";
+
version = "2.7.1";
src = fetchurl {
url = "mirror://kernel/linux/utils/nfs-utils/${version}/${pname}-${version}.tar.xz";
-
hash = "sha256-AbOw+5x9C7q/URTHNlQgMHSMeI7C/Zc0dEIB6bChEZ0=";
+
hash = "sha256-iFyUioSli8pBSPRZWI+ac2nbtA3MRm8E5FXGsQ/Qqkg=";
};
# libnfsidmap is built together with nfs-utils from the same source,
···
buildInputs = [
libtirpc libcap libevent sqlite lvm2
-
libuuid keyutils libkrb5 tcp_wrappers
+
libuuid keyutils libkrb5 tcp_wrappers libxml2
] ++ lib.optional enablePython python3
++ lib.optional enableLdap openldap;
+3 -22
pkgs/servers/ldap/389/default.nix
···
, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd, systemd
, zlib
, rsync
-
, fetchpatch
, withCockpit ? true
, withAsan ? false
}:
stdenv.mkDerivation rec {
pname = "389-ds-base";
-
version = "2.4.5";
+
version = "2.4.6";
src = fetchFromGitHub {
owner = "389ds";
repo = pname;
rev = "${pname}-${version}";
-
hash = "sha256-12JCd2R00L0T5EPUNO/Aw2HRID+z2krNQ09RSX9Qkj8=";
+
hash = "sha256-+FTCzEyQY71TCkj8HMnSkrnQtxjHxOmtYhfZEAYOLis=";
};
-
patches = [
-
(fetchpatch {
-
name = "fix-32bit.patch";
-
url = "https://github.com/389ds/389-ds-base/commit/1fe029c495cc9f069c989cfbb09d449a078c56e2.patch";
-
hash = "sha256-b0HSaDjuEUKERIXKg8np+lZDdZNmrCTAXybJzF+0hq0=";
-
})
-
(fetchpatch {
-
name = "CVE-2024-2199.patch";
-
url = "https://git.rockylinux.org/staging/rpms/389-ds-base/-/raw/dae373bd6b4e7d6f35a096e6f27be1c3bf1e48ac/SOURCES/0004-CVE-2024-2199.patch";
-
hash = "sha256-grANphTafCoa9NQy+FowwPhGQnvuCbfGnSpQ1Wp69Vg=";
-
})
-
(fetchpatch {
-
name = "CVE-2024-3657.patch";
-
url = "https://git.rockylinux.org/staging/rpms/389-ds-base/-/raw/dae373bd6b4e7d6f35a096e6f27be1c3bf1e48ac/SOURCES/0005-CVE-2024-3657.patch";
-
hash = "sha256-CuiCXQp3PMiYERzFk7oH3T91yQ1dP/gtLNWF0eqGAQ4=";
-
})
-
];
-
cargoDeps = rustPlatform.fetchCargoTarball {
inherit src;
sourceRoot = "${src.name}/src";
name = "${pname}-${version}";
-
hash = "sha256-fE3bJROwti9Ru0jhCiWhXcuQdxXTqzN9yOd2nlhKABI=";
+
hash = "sha256-2Ng268tfbMRU3Uyo5ljSS/HxPnw1abvGjcczo25HyVk=";
};
nativeBuildInputs = [
+2 -2
pkgs/servers/web-apps/matomo/default.nix
···
hash = "sha256-cGnsxfpvt7FyhxFcA2/gWWe7CyanVGZVKtCDES3XLdI=";
};
matomo_5 = {
-
version = "5.0.2";
-
hash = "sha256-rLAShJLtzd3HB1Je+P+i8GKWdeklyC2sTnmPR07Md+8=";
+
version = "5.1.1";
+
hash = "sha256-xi6R9O/pOxBgga6+wwqziwDKK7Q1Ispldvxg+0mpdeQ=";
};
matomo-beta = {
version = "5.0.0";
+2 -1
pkgs/tools/wayland/wtype/default.nix
···
, libxkbcommon
, wayland
+
, wayland-scanner
}:
stdenv.mkDerivation rec {
···
};
strictDeps = true;
-
nativeBuildInputs = [ meson ninja pkg-config wayland ];
+
nativeBuildInputs = [ meson ninja pkg-config wayland-scanner ];
buildInputs = [ libxkbcommon wayland ];
meta = with lib; {
+1 -1
pkgs/top-level/aliases.nix
···
tabula = throw "tabula has been removed from nixpkgs, as it was broken"; # Added 2024-07-15
tangogps = foxtrotgps; # Added 2020-01-26
-
taskwarrior = lib.warn "taskwarrior was replaced by taskwarrior3, which requires manual transition from taskwarrior 2.6, read upstram's docs: https://taskwarrior.org/docs/upgrade-3/" taskwarrior2;
+
taskwarrior = lib.warn "taskwarrior was replaced by taskwarrior3, which requires manual transition from taskwarrior 2.6, read upstream's docs: https://taskwarrior.org/docs/upgrade-3/" taskwarrior2;
taplo-cli = taplo; # Added 2022-07-30
taplo-lsp = taplo; # Added 2022-07-30
taro = taproot-assets; # Added 2023-07-04
+6
pkgs/top-level/ocaml-packages.nix
···
b0 = callPackage ../development/ocaml-modules/b0 { };
+
backoff = callPackage ../development/ocaml-modules/backoff { };
+
bap = janeStreet_0_15.bap;
base64 = callPackage ../development/ocaml-modules/base64 { };
···
msat = callPackage ../development/ocaml-modules/msat { };
mtime = callPackage ../development/ocaml-modules/mtime { };
+
+
multicore-bench = callPackage ../development/ocaml-modules/multicore-bench { };
+
+
multicore-magic = callPackage ../development/ocaml-modules/multicore-magic { };
multipart-form-data = callPackage ../development/ocaml-modules/multipart-form-data { };