Merge staging-next into staging
This commit is contained in:
commit
758138647a
@ -9258,6 +9258,12 @@
|
||||
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";
|
||||
|
@ -315,6 +315,7 @@ with lib.maintainers;
|
||||
leona
|
||||
osnyx
|
||||
ma27
|
||||
laalsaas
|
||||
];
|
||||
scope = "Team for Flying Circus employees who collectively maintain packages.";
|
||||
shortName = "Flying Circus employees";
|
||||
|
@ -100,6 +100,9 @@ modified using `usermod`. Unix groups can be managed using `groupadd`,
|
||||
|
||||
::: {.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
|
||||
@ -112,3 +115,43 @@ systemd-sysusers:
|
||||
```
|
||||
|
||||
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.
|
||||
|
@ -41,6 +41,13 @@
|
||||
|
||||
- [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)
|
||||
|
@ -1348,6 +1348,7 @@
|
||||
./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
|
||||
|
@ -12,7 +12,7 @@
|
||||
# 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
Normal file
183
nixos/modules/services/system/userborn.nix
Normal file
@ -0,0 +1,183 @@
|
||||
{
|
||||
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 ];
|
||||
|
||||
}
|
@ -19,8 +19,8 @@
|
||||
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";
|
||||
|
@ -11,7 +11,6 @@ let
|
||||
'';
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
###### interface
|
||||
@ -35,13 +34,9 @@ in
|
||||
|
||||
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 ];
|
||||
|
@ -1,67 +1,85 @@
|
||||
{ lib, pkgs, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.virtualisation.azure;
|
||||
mlxDrivers = [ "mlx4_en" "mlx4_core" "mlx5_core" ];
|
||||
in
|
||||
{
|
||||
imports = [ ../profiles/headless.nix ];
|
||||
|
||||
require = [ ./azure-agent.nix ];
|
||||
virtualisation.azure.agent.enable = true;
|
||||
|
||||
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" ];
|
||||
|
||||
# Generate a GRUB menu.
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
boot.loader.timeout = 0;
|
||||
|
||||
boot.growPartition = true;
|
||||
|
||||
# Don't put old configurations in the GRUB menu. The user has no
|
||||
# way to select them anyway.
|
||||
boot.loader.grub.configurationLimit = 0;
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-label/nixos";
|
||||
fsType = "ext4";
|
||||
autoResize = true;
|
||||
options.virtualisation.azure = {
|
||||
acceleratedNetworking = mkOption {
|
||||
default = false;
|
||||
description = "Whether the machine's network interface has enabled accelerated networking.";
|
||||
};
|
||||
};
|
||||
|
||||
# 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;
|
||||
imports = [
|
||||
../profiles/headless.nix
|
||||
./azure-agent.nix
|
||||
];
|
||||
|
||||
# Force getting the hostname from Azure
|
||||
networking.hostName = mkDefault "";
|
||||
config = {
|
||||
virtualisation.azure.agent.enable = true;
|
||||
|
||||
# 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 ];
|
||||
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;
|
||||
|
||||
networking.usePredictableInterfaceNames = false;
|
||||
# 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);
|
||||
|
||||
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"
|
||||
# Generate a GRUB menu.
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
|
||||
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"
|
||||
boot.growPartition = true;
|
||||
|
||||
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"
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-label/nixos";
|
||||
fsType = "ext4";
|
||||
autoResize = true;
|
||||
};
|
||||
|
||||
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"
|
||||
# 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;
|
||||
|
||||
'';
|
||||
# Force getting the hostname from Azure
|
||||
networking.hostName = mkDefault "";
|
||||
|
||||
# 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 ];
|
||||
|
||||
networking.usePredictableInterfaceNames = false;
|
||||
|
||||
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: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: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"
|
||||
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
@ -7,8 +7,8 @@ in
|
||||
{
|
||||
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;
|
||||
@ -16,14 +16,34 @@ in
|
||||
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";
|
||||
@ -33,9 +53,12 @@ in
|
||||
'';
|
||||
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;
|
||||
};
|
||||
|
||||
};
|
||||
}
|
||||
|
@ -1060,6 +1060,11 @@ in {
|
||||
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
Normal file
70
nixos/tests/userborn-immutable-etc.nix
Normal file
@ -0,0 +1,70 @@
|
||||
{ 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
Normal file
75
nixos/tests/userborn-immutable-users.nix
Normal file
@ -0,0 +1,75 @@
|
||||
{ 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
Normal file
70
nixos/tests/userborn-mutable-etc.nix
Normal file
@ -0,0 +1,70 @@
|
||||
{ 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
Normal file
76
nixos/tests/userborn-mutable-users.nix
Normal file
@ -0,0 +1,76 @@
|
||||
{ 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
Normal file
127
nixos/tests/userborn.nix
Normal file
@ -0,0 +1,127 @@
|
||||
{ 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"))
|
||||
'';
|
||||
}
|
@ -6,19 +6,19 @@
|
||||
|
||||
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
|
||||
|
@ -166,7 +166,7 @@ stdenv.mkDerivation rec {
|
||||
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"
|
||||
|
@ -5,16 +5,16 @@
|
||||
|
||||
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"
|
||||
|
@ -66,5 +66,6 @@ rustPlatform.buildRustPackage rec {
|
||||
maintainers = with lib.maintainers; [ dotlambda nicknovitski ];
|
||||
license = lib.licenses.mit;
|
||||
platforms = lib.platforms.unix;
|
||||
mainProgram = "newsboat";
|
||||
};
|
||||
}
|
||||
|
@ -57,10 +57,17 @@ stdenvNoCC.mkDerivation {
|
||||
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
|
||||
'';
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
, prefetch-npm-deps
|
||||
, diffutils
|
||||
, installShellFiles
|
||||
, nodejsInstallManuals
|
||||
, nodejsInstallExecutables
|
||||
}:
|
||||
|
||||
{
|
||||
@ -39,9 +41,10 @@
|
||||
propagatedBuildInputs = [
|
||||
installShellFiles
|
||||
makeWrapper
|
||||
nodejsInstallManuals
|
||||
nodejsInstallExecutables
|
||||
];
|
||||
substitutions = {
|
||||
hostNode = "${nodejs}/bin/node";
|
||||
jq = "${jq}/bin/jq";
|
||||
};
|
||||
} ./npm-install-hook.sh;
|
||||
|
@ -14,31 +14,9 @@ npmInstallHook() {
|
||||
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"
|
||||
|
||||
|
@ -42,7 +42,6 @@ buildDunePackage' rec {
|
||||
cmdliner
|
||||
containers-data
|
||||
digestif
|
||||
domainslib
|
||||
eio_main
|
||||
lwd
|
||||
nottui
|
||||
|
@ -96,6 +96,9 @@ python3Packages.buildPythonApplication rec {
|
||||
"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
|
||||
|
@ -25,15 +25,15 @@
|
||||
}:
|
||||
|
||||
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
|
||||
@ -47,7 +47,7 @@ stdenv.mkDerivation rec {
|
||||
owner = "WerWolv";
|
||||
repo = "ImHex";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-8vhOOHfg4D9B9yYgnGZBpcjAjuL4M4oHHax9ad5PJtA=";
|
||||
hash = "sha256-6QpmFkSMQpGlEzo7BHZn20c+q8CTDUB4yO87wMU5JT4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -32,6 +32,7 @@
|
||||
, udev
|
||||
, wayland
|
||||
, wayland-protocols
|
||||
, wayland-scanner
|
||||
, wrapGAppsHook3
|
||||
, xorgserver
|
||||
, xwayland
|
||||
@ -68,6 +69,7 @@ stdenv.mkDerivation rec {
|
||||
wrapGAppsHook3
|
||||
xorgserver # for cvt command
|
||||
gobject-introspection
|
||||
wayland-scanner
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
|
@ -3,7 +3,6 @@
|
||||
, fetchFromGitHub
|
||||
, nix
|
||||
, nix-prefetch-git
|
||||
, nixpkgs-fmt
|
||||
, nixpkgs-review
|
||||
}:
|
||||
|
||||
@ -24,7 +23,7 @@ python3.pkgs.buildPythonApplication rec {
|
||||
];
|
||||
|
||||
makeWrapperArgs = [
|
||||
"--prefix" "PATH" ":" (lib.makeBinPath [ nix nix-prefetch-git nixpkgs-fmt nixpkgs-review ])
|
||||
"--prefix" "PATH" ":" (lib.makeBinPath [ nix nix-prefetch-git nixpkgs-review ])
|
||||
];
|
||||
|
||||
checkPhase = ''
|
||||
@ -36,7 +35,7 @@ python3.pkgs.buildPythonApplication rec {
|
||||
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
Normal file
27
pkgs/by-name/no/nodejsInstallExecutables/hook.sh
Normal file
@ -0,0 +1,27 @@
|
||||
# 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
Normal file
19
pkgs/by-name/no/nodejsInstallExecutables/package.nix
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
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
Normal file
14
pkgs/by-name/no/nodejsInstallManuals/hook.sh
Normal file
@ -0,0 +1,14 @@
|
||||
# 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
Normal file
13
pkgs/by-name/no/nodejsInstallManuals/package.nix
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
makeSetupHook,
|
||||
installShellFiles,
|
||||
jq,
|
||||
}:
|
||||
|
||||
makeSetupHook {
|
||||
name = "nodejs-install-manuals";
|
||||
propagatedBuildInputs = [ installShellFiles ];
|
||||
substitutions = {
|
||||
jq = "${jq}/bin/jq";
|
||||
};
|
||||
} ./hook.sh
|
@ -12,13 +12,13 @@
|
||||
|
||||
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 = [
|
||||
|
@ -25,7 +25,7 @@ let
|
||||
# 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";
|
||||
@ -35,11 +35,11 @@ rustPlatform.buildRustPackage {
|
||||
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,
|
||||
@ -61,14 +61,19 @@ rustPlatform.buildRustPackage {
|
||||
bzip2
|
||||
openssl
|
||||
sqlite
|
||||
foundationdb
|
||||
zstd
|
||||
] ++ lib.optionals stdenv.isLinux [
|
||||
foundationdb
|
||||
] ++ 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;
|
||||
ZSTD_SYS_USE_PKG_CONFIG = true;
|
||||
|
@ -25,8 +25,8 @@ rustPlatform.buildRustPackage rec {
|
||||
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
Normal file
43
pkgs/by-name/us/userborn/package.nix
Normal file
@ -0,0 +1,43 @@
|
||||
{
|
||||
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";
|
||||
};
|
||||
}
|
44
pkgs/by-name/uv/uv/Cargo.lock
generated
44
pkgs/by-name/uv/uv/Cargo.lock
generated
@ -43,21 +43,6 @@ dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[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"
|
||||
@ -211,7 +196,6 @@ version = "0.4.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fec134f64e2bc57411226dfc4e52dec859ddfc7e711fc5e07b612584f000e4aa"
|
||||
dependencies = [
|
||||
"brotli",
|
||||
"bzip2",
|
||||
"flate2",
|
||||
"futures-core",
|
||||
@ -461,27 +445,6 @@ 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"
|
||||
version = "1.10.0"
|
||||
@ -4529,7 +4492,7 @@ checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314"
|
||||
|
||||
[[package]]
|
||||
name = "uv"
|
||||
version = "0.3.5"
|
||||
version = "0.4.0"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anyhow",
|
||||
@ -4780,7 +4743,6 @@ dependencies = [
|
||||
"uv-auth",
|
||||
"uv-cache",
|
||||
"uv-normalize",
|
||||
"uv-workspace",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -5080,7 +5042,7 @@ dependencies = [
|
||||
"uv-state",
|
||||
"uv-warnings",
|
||||
"which",
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys 0.59.0",
|
||||
"winsafe 0.0.22",
|
||||
]
|
||||
|
||||
@ -5284,7 +5246,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "uv-version"
|
||||
version = "0.3.5"
|
||||
version = "0.4.0"
|
||||
|
||||
[[package]]
|
||||
name = "uv-virtualenv"
|
||||
|
@ -16,14 +16,14 @@
|
||||
|
||||
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 {
|
||||
|
@ -4,6 +4,8 @@
|
||||
fetchFromGitHub,
|
||||
fontconfig,
|
||||
lib,
|
||||
libGL,
|
||||
libuuid,
|
||||
libX11,
|
||||
libXext,
|
||||
libXrandr,
|
||||
@ -19,6 +21,7 @@
|
||||
shaderc,
|
||||
stdenv,
|
||||
testers,
|
||||
vulkan-loader,
|
||||
wayland,
|
||||
wlx-overlay-s,
|
||||
}:
|
||||
@ -76,7 +79,11 @@ rustPlatform.buildRustPackage rec {
|
||||
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,11 +2,11 @@
|
||||
|
||||
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
Normal file
24
pkgs/development/ocaml-modules/backoff/default.nix
Normal file
@ -0,0 +1,24 @@
|
||||
{ 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";
|
||||
}
|
@ -29,5 +29,6 @@ buildDunePackage rec {
|
||||
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
Normal file
22
pkgs/development/ocaml-modules/multicore-bench/default.nix
Normal file
@ -0,0 +1,22 @@
|
||||
{ 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
Normal file
24
pkgs/development/ocaml-modules/multicore-magic/default.nix
Normal file
@ -0,0 +1,24 @@
|
||||
{ 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 ];
|
||||
};
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
{ lib, buildDunePackage, ocaml
|
||||
, saturn_lockfree
|
||||
, domain_shims
|
||||
, dscheck
|
||||
, multicore-bench
|
||||
, qcheck, qcheck-alcotest, qcheck-stm
|
||||
}:
|
||||
|
||||
@ -12,7 +14,14 @@ buildDunePackage rec {
|
||||
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";
|
||||
|
@ -1,19 +1,19 @@
|
||||
{ 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";
|
||||
|
@ -1,10 +1,8 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchPypi,
|
||||
gettext,
|
||||
flake8,
|
||||
isocodes,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
pytestCheckHook,
|
||||
charset-normalizer,
|
||||
}:
|
||||
@ -12,35 +10,27 @@
|
||||
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
|
||||
];
|
||||
|
||||
dependencies = [ isocodes ];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
python setup.py --without-gaupol install --prefix=$out
|
||||
runHook postInstall
|
||||
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
|
||||
'';
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytestCheckHook
|
||||
charset-normalizer
|
||||
];
|
||||
build-system = [ setuptools ];
|
||||
|
||||
# Aeidon is looking in the wrong subdirectory for data
|
||||
preCheck = ''
|
||||
cp -r data aeidon/
|
||||
'';
|
||||
dependencies = [ charset-normalizer ];
|
||||
|
||||
nativeCheckInputs = [ pytestCheckHook ];
|
||||
|
||||
pytestFlagsArray = [ "aeidon/test" ];
|
||||
|
||||
@ -52,9 +42,10 @@ buildPythonPackage rec {
|
||||
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 ];
|
||||
};
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "craft-platforms";
|
||||
version = "0.1.1";
|
||||
version = "0.2.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.10";
|
||||
@ -23,7 +23,7 @@ buildPythonPackage rec {
|
||||
owner = "canonical";
|
||||
repo = "craft-platforms";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-KzskmSw7NsH1CAYjPf2281Ob71Jd6AhWxtp5tR3IqyU=";
|
||||
hash = "sha256-chCPuncy+//Y5iohTh0d8qRNaEno6Sqze2Zoas3uwPQ=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "gvm-tools";
|
||||
version = "24.7.0";
|
||||
version = "24.8.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.9";
|
||||
@ -20,7 +20,7 @@ buildPythonPackage rec {
|
||||
owner = "greenbone";
|
||||
repo = "gvm-tools";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-m4wEAx2WyVIMi+xucqUCPr2PLxLo00haObjf+0swUdA=";
|
||||
hash = "sha256-MwLwJyxKu4O0cEabBjcdhqtqW3uwgbyVlezZysUDYa4=";
|
||||
};
|
||||
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "lib4sbom";
|
||||
version = "0.7.3";
|
||||
version = "0.7.4";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
@ -21,7 +21,7 @@ buildPythonPackage rec {
|
||||
owner = "anthonyharrison";
|
||||
repo = "lib4sbom";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-RuIvhlLnWf/ayU6tjpHYKvBFqU8ojPwJK/pDIdLrD2s=";
|
||||
hash = "sha256-Uqv6E9qMJRsfYICVAiZEQGlG/0w8aECuh8wMa85FnlE=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
@ -11,7 +11,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "model-bakery";
|
||||
version = "1.19.4";
|
||||
version = "1.19.5";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.8";
|
||||
@ -20,7 +20,7 @@ buildPythonPackage rec {
|
||||
owner = "model-bakers";
|
||||
repo = "model_bakery";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-Jok5fQ8z9/v6n482yYA06ugC+4SSMuV7fmt1cdv3/dg=";
|
||||
hash = "sha256-hOXE3mddGmRRgO9qAlj3bnmco8QTg2rD0sgui3J9pp8=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "python-gvm";
|
||||
version = "24.7.0";
|
||||
version = "24.8.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.9";
|
||||
@ -24,7 +24,7 @@ buildPythonPackage rec {
|
||||
owner = "greenbone";
|
||||
repo = "python-gvm";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-WsZxISvPw4uvRKv5CYpcLunAxvoCvVWTSp+m2QTEe0g=";
|
||||
hash = "sha256-JyImC75Le6S2kQXSU/Ze4TNaitJSJ8LD9j/ny+xjoGA=";
|
||||
};
|
||||
|
||||
build-system = [ poetry-core ];
|
||||
|
@ -15,24 +15,24 @@
|
||||
|
||||
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
|
||||
@ -52,6 +52,5 @@ buildPythonPackage rec {
|
||||
changelog = "https://github.com/stravalib/stravalib/releases/tag/v${version}";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ sikmir ];
|
||||
broken = lib.versionAtLeast pydantic.version "2";
|
||||
};
|
||||
}
|
||||
|
@ -39,6 +39,6 @@ rustPlatform.buildRustPackage rec {
|
||||
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 ];
|
||||
};
|
||||
}
|
||||
|
@ -34,6 +34,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
boost
|
||||
gtest
|
||||
wayland
|
||||
wayland-scanner # needed by cmake
|
||||
];
|
||||
|
||||
passthru = {
|
||||
|
@ -7,4 +7,6 @@ mkKdeDerivation {
|
||||
pname = "konsole";
|
||||
|
||||
extraBuildInputs = [qt5compat qtmultimedia];
|
||||
|
||||
meta.mainProgram = "konsole";
|
||||
}
|
||||
|
@ -1,5 +1,17 @@
|
||||
{ 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";
|
||||
@ -11,7 +23,7 @@ stdenv.mkDerivation rec {
|
||||
sha256 = "sha256-OX41ChtHX36lVRL7O2gH21Dfw6GPPEClD+yafR/PFm8=";
|
||||
};
|
||||
|
||||
buildInputs = [ btrfs-progs ];
|
||||
buildInputs = [ btrfs-progs' ];
|
||||
|
||||
installFlags = [
|
||||
"PREFIX=${placeholder "out"}"
|
||||
|
@ -5,16 +5,16 @@ let
|
||||
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;
|
||||
};
|
||||
};
|
||||
|
@ -1,6 +1,6 @@
|
||||
{ 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
|
||||
}:
|
||||
|
||||
@ -10,11 +10,11 @@ in
|
||||
|
||||
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,
|
||||
@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
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;
|
||||
|
||||
|
@ -31,45 +31,26 @@
|
||||
, 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 = [
|
||||
|
@ -7,8 +7,8 @@ let
|
||||
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";
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
, libxkbcommon
|
||||
, wayland
|
||||
, wayland-scanner
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
@ -22,7 +23,7 @@ stdenv.mkDerivation rec {
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
nativeBuildInputs = [ meson ninja pkg-config wayland ];
|
||||
nativeBuildInputs = [ meson ninja pkg-config wayland-scanner ];
|
||||
buildInputs = [ libxkbcommon wayland ];
|
||||
|
||||
meta = with lib; {
|
||||
|
@ -1467,7 +1467,7 @@ mapAliases ({
|
||||
|
||||
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
|
||||
|
@ -64,6 +64,8 @@ let
|
||||
|
||||
b0 = callPackage ../development/ocaml-modules/b0 { };
|
||||
|
||||
backoff = callPackage ../development/ocaml-modules/backoff { };
|
||||
|
||||
bap = janeStreet_0_15.bap;
|
||||
|
||||
base64 = callPackage ../development/ocaml-modules/base64 { };
|
||||
@ -1199,6 +1201,10 @@ let
|
||||
|
||||
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 { };
|
||||
|
||||
mustache = callPackage ../development/ocaml-modules/mustache { };
|
||||
|
Loading…
Reference in New Issue
Block a user