Merge master into staging-next

This commit is contained in:
nixpkgs-ci[bot] 2026-06-26 12:45:12 +00:00 committed by GitHub
commit 14cc61fac9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
112 changed files with 27353 additions and 680 deletions

View file

@ -2863,7 +2863,7 @@
azahi = {
name = "Azat Bahawi";
email = "azat@bahawi.net";
matrix = "@azahi:azahi.cc";
matrix = "@azahi:matrix.org";
github = "azahi";
githubId = 22211000;
keys = [ { fingerprint = "2688 0377 C31D 9E81 9BDF 83A8 C8C6 BDDB 3847 F72B"; } ];
@ -6651,6 +6651,12 @@
githubId = 8864716;
name = "Duarte David";
};
demic-dev = {
email = "git@demic.dev";
github = "demic-dev";
githubId = 59309595;
name = "Michele De Cillis";
};
demin-dmitriy = {
email = "demindf@gmail.com";
github = "demin-dmitriy";

View file

@ -26,6 +26,8 @@
- [Unpackerr](https://unpackerr.zip), extracts downloads for Radarr, Sonarr, Lidarr, Readarr, and/or a Watch folder. Available as [services.unpackerr](#opt-services.unpackerr.enable).
- [Matrix Authentication Service](https://github.com/element-hq/matrix-authentication-service) is an OAuth2.0 and OpenID Connect provider for Matrix homeservers (such as Synapse). It replaces standard password authentication with modern OpenID Connect flows, and can delegate authentication to upstream OIDC providers. Available as [services.matrix-authentication-service](#opt-services.matrix-authentication-service.enable).
## Backward Incompatibilities {#sec-release-26.11-incompatibilities}
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
@ -67,10 +69,14 @@
- `security.run0.enableSudoAlias` now uses the `run0-sudo-shim` instead of a shell-script to improve compatibility.
- With `system.etc.overlay.mutable = false`, NixOS now ships an empty `/etc/machine-id` in the image. Previously the file was absent and systemd logged `System cannot boot: Missing /etc/machine-id and /etc/ is read-only` while `ConditionFirstBoot` fired on every boot. With this change, systemd now overlays a transient ID from `/run/machine-id` for the session, and `systemd-machine-id-commit.service` has `ConditionFirstBoot` so it writes the machine-id through to a persistent backing file when one is bind-mounted over `/etc/machine-id`. To persist the machine-id across reboots, bind-mount a writable file containing `uninitialized` over `/etc/machine-id` from the initrd, or set `systemd.machine_id=` on the kernel command line (use `systemd.machine_id=firmware` to derive a stable ID on hardware that supports it).
- `security.run0.persistentAuth` options have been added to support persistent Authentication of session. Timeout configurable via `security.polkit.settings.Polkitd.ExpirationSeconds`.
- `boot.loader.systemd-boot` gained support for [Automatic Boot Assessment](https://systemd.io/AUTOMATIC_BOOT_ASSESSMENT/) via the new [`boot.loader.systemd-boot.bootCounting`](#opt-boot.loader.systemd-boot.bootCounting.enable) options, allowing automatic detection of and recovery from bad NixOS generations. As part of this change, boot loader entries on the ESP/XBOOTLDR partition are now named `nixos-<content-hash>.conf` instead of `nixos-generation-<n>.conf`; existing entries are migrated automatically on the next `nixos-rebuild boot`/`switch`.
- `services.nginx` gained a [`lua`](#opt-services.nginx.lua.enable) option to enable Lua scripting via OpenResty's lua-nginx-module on a stock nginx, configuring `lua_package_path`/`lua_package_cpath` from the packages listed in [`services.nginx.lua.extraPackages`](#opt-services.nginx.lua.extraPackages). Use this to add Lua to a regular nginx; for the full OpenResty platform (libraries that rely on its bundled lualib, such as `lua-resty-openidc`), set `services.nginx.package` to `pkgs.openresty` instead — the option configures the Lua search path for it too.
- `security.polkit.settings` added for RFC42 style configuration of the polkitd daemon.
- The `programs.fuse` module, which provides the `fusermount3` executable and the `/etc/fuse.conf` config file, is now opt-in. The obligation to enable it has been shifted to its various consumers (e.g. gvfs, flatpak, appimage, sshfs). This can break fuse consumers at runtime, that don't explicitly declare that dependency with a module, e.g the mounting functionality in various backup tools (borg, restic, rclone, ...).

View file

@ -810,6 +810,7 @@
./services/matrix/hookshot.nix
./services/matrix/lk-jwt-service.nix
./services/matrix/matrix-alertmanager.nix
./services/matrix/matrix-authentication-service.nix
./services/matrix/maubot.nix
./services/matrix/mautrix-discord.nix
./services/matrix/mautrix-meta.nix
@ -1914,6 +1915,7 @@
./system/boot/clevis-luks-askpass.nix
./system/boot/clevis.nix
./system/boot/emergency-mode.nix
./system/boot/extra-initrd.nix
./system/boot/grow-partition.nix
./system/boot/initrd-network.nix
./system/boot/initrd-openvpn.nix

View file

@ -0,0 +1,445 @@
{
config,
lib,
pkgs,
...
}:
let
inherit (lib)
concatMapStringsSep
filter
filterAttrs
getExe
isAttrs
isList
mapAttrs
mkDefault
mkEnableOption
mkIf
mkOption
mkPackageOption
optional
optionalAttrs
types
;
cfg = config.services.matrix-authentication-service;
format = pkgs.formats.yaml { };
filterRecursiveNull =
o:
if isAttrs o then
mapAttrs (_: v: filterRecursiveNull v) (filterAttrs (_: v: v != null) o)
else if isList o then
map filterRecursiveNull (filter (v: v != null) o)
else
o;
# remove null values from the final configuration
finalSettings =
let
pruned = filterRecursiveNull cfg.settings;
in
if pruned ? upstream_oauth2 && pruned.upstream_oauth2 == { } then
removeAttrs pruned [ "upstream_oauth2" ]
else
pruned;
configFile = format.generate "config.yaml" finalSettings;
in
{
meta.maintainers = with lib.maintainers; [
eymeric
flashonfire
mkoppmann
skowalak
];
meta.teams = [ lib.teams.matrix ];
options.services.matrix-authentication-service = {
enable = mkEnableOption "Matrix Authentication Service";
package = mkPackageOption pkgs "matrix-authentication-service" { };
settings = mkOption {
default = { };
description = ''
The primary mas configuration. See the
[configuration reference](https://element-hq.github.io/matrix-authentication-service/usage/configuration.html)
for possible values.
Secrets should be passed in by using the `extraConfigFiles` option.
'';
type = types.submodule {
freeformType = format.type;
options = {
http.public_base = mkOption {
type = types.str;
default = "http://[::]:8080/";
description = ''
Public URL base used when building absolute public URLs.
'';
};
http.trusted_proxies = mkOption {
type = types.listOf types.str;
default = [
"127.0.0.1/8"
"::1/128"
];
description = ''
MAS can infer the client IP address from the X-Forwarded-For header. It will trust the value for this header only if the request comes from a trusted reverse proxy listed here.
'';
};
http.listeners = mkOption {
type = types.listOf (
types.submodule {
freeformType = format.type;
options = {
name = mkOption {
type = types.str;
example = "web";
description = ''
The name of the listener, used in logs and metrics.
'';
};
proxy_protocol = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable the PROXY protocol on the listener.
'';
};
resources = mkOption {
type = types.listOf (
types.submodule {
freeformType = format.type;
options = {
name = mkOption {
type = types.str;
description = ''
Serve the given resource.
'';
};
};
}
);
description = ''
List of resources to serve.
'';
};
binds = mkOption {
type = types.listOf (
types.submodule {
freeformType = format.type;
options = {
host = mkOption {
type = types.nullOr types.str;
description = ''
Listen on the given host.
'';
};
port = mkOption {
type = types.nullOr types.port;
description = ''
Listen on the given port.
'';
};
};
}
);
description = ''
List of addresses and ports to listen to.
'';
};
};
}
);
default = [
{
name = "web";
resources = [
{ name = "discovery"; }
{ name = "human"; }
{ name = "oauth"; }
{ name = "compat"; }
{ name = "graphql"; }
{ name = "assets"; }
];
binds = [
{
host = "0.0.0.0";
port = 8080;
}
];
proxy_protocol = false;
}
{
name = "internal";
resources = [
{ name = "health"; }
];
binds = [
{
host = "0.0.0.0";
port = 8081;
}
];
proxy_protocol = false;
}
];
description = ''
Each listener can serve multiple resources, and listen on multiple TCP ports or UNIX sockets.
'';
};
database.uri = mkOption {
type = types.str;
default = "postgresql:///matrix-authentication-service?host=/run/postgresql";
description = ''
The postgres connection string.
Refer to <https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING>.
If you need to put secrets in the uri, please use the `extraConfigFiles` option.
'';
};
database.max_connections = mkOption {
type = types.ints.unsigned;
default = 10;
description = ''
Maximum number of connections for the connection pool.
'';
};
database.min_connections = mkOption {
type = types.ints.unsigned;
default = 0;
description = ''
Minimum number of connections for the connection pool.
'';
};
database.connect_timeout = mkOption {
type = types.ints.unsigned;
default = 30;
description = ''
Connection timeout for the connection pool.
'';
};
database.idle_timeout = mkOption {
type = types.ints.unsigned;
default = 600;
description = ''
Idle timeout for the connection pool.
'';
};
database.max_lifetime = mkOption {
type = types.ints.unsigned;
default = 1800;
description = ''
Maximum lifetime for the connection pool.
'';
};
passwords.enabled = mkOption {
type = types.bool;
default = true;
description = ''
Whether to enable the password database. If disabled, users will only be able to log in using upstream OIDC providers.
'';
};
passwords.schemes = mkOption {
type = types.listOf (
types.submodule {
freeformType = format.type;
options = {
version = mkOption {
type = types.ints.unsigned;
description = ''
Password scheme version.
'';
};
algorithm = mkOption {
type = types.str;
description = ''
Password scheme algorithm.
'';
};
};
}
);
default = [
{
version = 1;
algorithm = "argon2id";
}
];
description = ''
List of password hashing schemes being used. Only change this if you know what you're doing.
'';
};
passwords.minimum_complexity = mkOption {
type = types.enum [
0
1
2
3
4
];
default = 3;
description = ''
Minimum complexity required for passwords, estimated by the zxcvbn algorithm.
Must be between 0 and 4, default is 3. See <https://github.com/dropbox/zxcvbn#usage> for more information.
'';
};
matrix.homeserver = mkOption {
type = types.str;
default = "";
description = ''
Corresponds to the server_name in the Synapse configuration file.
'';
};
matrix.endpoint = mkOption {
type = types.str;
default = "";
description = ''
The URL to which the homeserver is accessible from the service.
'';
};
upstream_oauth2.providers = mkOption {
default = null;
type = types.nullOr (
types.listOf (
types.submodule {
freeformType = format.type;
options = {
id = mkOption {
type = types.nullOr types.str;
example = "01H8PKNWKKRPCBW4YGH1RWV279";
default = null;
description = ''
Unique id for the provider, must be a ULID, and can be generated using online tools like <https://www.ulidtools.com>.
'';
};
};
}
)
);
description = ''
Configuration of upstream providers
'';
};
};
};
};
createDatabase = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable and configure `services.postgresql` to ensure that the database user `matrix-authentication-service`
and the database `matrix-authentication-service` exist.
'';
};
extraConfigFiles = mkOption {
type = types.listOf types.str;
default = [ ];
description = ''
Extra config files to include.
The configuration files will be included based on the command line
argument --config. This allows to configure secrets without
having to go through the Nix store, e.g. based on deployment keys if
NixOps is in use.
'';
};
serviceDependencies = mkOption {
type = types.listOf types.str;
default = optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit;
defaultText = lib.literalExpression ''
lib.optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit
'';
description = ''
List of Systemd services to require and wait for when starting the application service,
such as the Matrix homeserver if it's running on the same host.
'';
};
};
config = mkIf cfg.enable {
services.postgresql = mkIf cfg.createDatabase {
enable = true;
ensureDatabases = [ "matrix-authentication-service" ];
ensureUsers = [
{
name = "matrix-authentication-service";
ensureDBOwnership = true;
}
];
};
systemd.services.matrix-authentication-service = rec {
after = optional cfg.createDatabase "postgresql.service" ++ cfg.serviceDependencies;
wants = after;
wantedBy = [ "multi-user.target" ];
serviceConfig = {
DynamicUser = true;
ExecStartPre = ''
${getExe cfg.package} config check \
${concatMapStringsSep " " (x: "--config ${x}") ([ configFile ] ++ cfg.extraConfigFiles)}
'';
ExecStart = ''
${getExe cfg.package} server \
${concatMapStringsSep " " (x: "--config ${x}") ([ configFile ] ++ cfg.extraConfigFiles)}
'';
Restart = "on-failure";
RestartSec = "1s";
# Security Hardening
CapabilityBoundingSet = "";
AmbientCapabilities = "";
LockPersonality = true;
NoNewPrivileges = true;
PrivateTmp = true;
PrivateDevices = true;
PrivateMounts = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
ProcSubset = "pid";
ProtectSystem = "strict";
RemoveIPC = true;
RestrictAddressFamilies = [
"AF_UNIX"
"AF_INET"
"AF_INET6"
];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
SystemCallErrorNumber = "EPERM";
SystemCallFilter = [
"@system-service"
];
UMask = "0077";
# Working and state directories
StateDirectory = "matrix-authentication-service";
StateDirectoryMode = "0700";
WorkingDirectory = "/var/lib/matrix-authentication-service";
};
};
};
}

View file

@ -4,6 +4,7 @@
lib,
pkgs,
utils,
jdk25_headless,
...
}:
let
@ -29,21 +30,16 @@ let
);
in
{
options = {
services.unifi.enable = lib.mkEnableOption "UniFi controller service";
services.unifi.jrePackage = lib.mkOption {
type = lib.types.package;
default = cfg.unifiPackage.passthru.jrePackage or jdk25_headless;
defaultText = lib.literalExpression "unifiPackage.passthru.jrePackage";
services.unifi.enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether or not to enable the unifi controller service.
'';
};
services.unifi.jrePackage = lib.mkPackageOption pkgs "jdk" {
default = "jdk25_headless";
extraDescription = ''
Check the UniFi controller release notes to ensure it is supported.
Which Java runtime to use.
'';
};
@ -56,6 +52,7 @@ in
services.unifi.openFirewall = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether or not to open the minimum required ports on the firewall.
@ -69,6 +66,7 @@ in
type = with lib.types; nullOr int;
default = null;
example = 1024;
description = ''
Set the initial heap size for the JVM in MB. If this option isn't set, the
JVM will decide this value at runtime.
@ -79,6 +77,7 @@ in
type = with lib.types; nullOr int;
default = null;
example = 4096;
description = ''
Set the maximum heap size for the JVM in MB. If this option isn't set, the
JVM will decide this value at runtime.
@ -89,15 +88,14 @@ in
type = with lib.types; listOf str;
default = [ ];
example = lib.literalExpression ''["-Xlog:gc"]'';
description = ''
Set extra options to pass to the JVM.
'';
};
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion =
@ -128,16 +126,18 @@ in
description = "UniFi controller daemon user";
home = "${stateDir}";
};
users.groups.unifi = { };
# https://help.ubnt.com/hc/en-us/articles/218506997
networking.firewall = lib.mkIf cfg.openFirewall {
# https://help.ubnt.com/hc/en-us/articles/218506997
allowedTCPPorts = [
8080 # Port for UAP to inform controller.
8880 # Port for HTTP portal redirect, if guest portal is enabled.
8843 # Port for HTTPS portal redirect, ditto.
6789 # Port for UniFi mobile speed test.
];
allowedUDPPorts = [
3478 # UDP port used for STUN.
10001 # UDP port used for device discovery.
@ -151,6 +151,7 @@ in
# This a HACK to fix missing dependencies of dynamic libs extracted from jars
environment.LD_LIBRARY_PATH = with pkgs.stdenv; "${cc.cc.lib}/lib";
# Make sure package upgrades trigger a service restart
restartTriggers = [
cfg.unifiPackage
@ -220,12 +221,13 @@ in
# Needs network access
PrivateNetwork = false;
# Cannot be true due to OpenJDK
MemoryDenyWriteExecute = false;
};
};
};
imports = [
(lib.mkRemovedOptionModule [
"services"

View file

@ -158,5 +158,5 @@ in
networking.firewall.allowedTCPPorts = with cfg; lib.optionals openFirewall [ port ];
};
meta.maintainers = with lib.maintainers; [ azahi ];
meta.maintainers = [ ];
}

View file

@ -126,6 +126,28 @@ let
'') (filterAttrs (name: conf: conf.enable) cfg.proxyCachePath)
);
# openresty bundles the lua module and resty.core; stock nginx needs them added.
packageBundlesLua = p: lib.getName p == "openresty";
luaEnv = pkgs.luajit_openresty.withPackages (
ps:
lib.optional (cfg.lua.enable && !packageBundlesLua cfg.package) ps.lua-resty-core
++ cfg.lua.extraPackages ps
);
luaVersion = pkgs.luajit_openresty.luaversion;
# Lua modules install under lib/lua or share/lua depending on the package; ;; keeps nginx's defaults.
luaConfig = ''
lua_package_path '${
lib.concatMapStringsSep ";" (s: "${luaEnv}/${s}") [
"lib/lua/${luaVersion}/?.lua"
"lib/lua/${luaVersion}/?/init.lua"
"share/lua/${luaVersion}/?.lua"
"share/lua/${luaVersion}/?/init.lua"
]
};;';
lua_package_cpath '${luaEnv}/lib/lua/${luaVersion}/?.so;;';
lua_ssl_trusted_certificate ${config.security.pki.caBundle};
'';
toUpstreamParameter =
key: value:
if builtins.isBool value then lib.optionalString value key else "${key}=${toString value}";
@ -295,6 +317,8 @@ let
server_tokens ${if cfg.serverTokens then "on" else "off"};
${optionalString cfg.lua.enable luaConfig}
${cfg.commonHttpConfig}
${proxyCachePathConfig}
@ -771,7 +795,11 @@ in
apply =
p:
p.override {
modules = lib.unique (p.modules ++ cfg.additionalModules);
modules = lib.unique (
p.modules
++ cfg.additionalModules
++ lib.optional (cfg.lua.enable && !packageBundlesLua p) pkgs.nginxModules.lua
);
};
description = ''
Nginx package to use. This defaults to the stable version. Note
@ -791,6 +819,36 @@ in
'';
};
lua = {
enable = mkEnableOption ''
Lua scripting in nginx via OpenResty's lua-nginx-module,
wiring up `lua_package_path`/`lua_package_cpath` for
{option}`services.nginx.lua.extraPackages`.
Use this to add Lua to a stock nginx. For the full OpenResty platform
required by libraries that depend on its bundled lualib (for example
`lua-resty-openidc`, which needs `resty.string` and friends) set
{option}`services.nginx.package` to `pkgs.openresty` instead; this option
then only sets up the search path and leaves OpenResty's built-in Lua
module in place
'';
extraPackages = mkOption {
type = types.functionTo (types.listOf types.package);
default = ps: [ ];
defaultText = literalExpression "ps: [ ]";
example = literalExpression ''
ps: with ps; [ lua-resty-openidc ]
'';
description = ''
Extra Lua packages to put on `lua_package_path` / `lua_package_cpath`,
for both stock nginx and `pkgs.openresty`. Packages are selected from
`pkgs.luajit_openresty.pkgs`. `lua-resty-core`, which the Lua module
requires to start, is added automatically.
'';
};
};
logError = mkOption {
default = "stderr";
type = types.str;

View file

@ -0,0 +1,21 @@
{ config, lib, ... }:
{
options.system.boot.extraInitrd = {
paths = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
List of paths relative to the ESP that are combined with the NixOS
main initrd before being passed to the kernel.
'';
};
};
config = {
boot.bootspec.extensions = lib.mkIf (config.system.boot.extraInitrd.paths != [ ]) {
"org.nixos.extra-initrd.v1" = {
inherit (config.system.boot.extraInitrd) paths;
};
};
};
}

File diff suppressed because it is too large Load diff

View file

@ -205,6 +205,17 @@ in
'';
};
extraInstallCommands = lib.mkOption {
default = "";
type = lib.types.lines;
description = ''
Additional shell commands inserted in the bootloader installer
script after generating menu entries. It can be used to expand
on extra boot entries that cannot incorporate certain pieces of
information (such as the resulting `init=` kernel parameter).
'';
};
secureBoot = {
enable = lib.mkEnableOption null // {
description = ''
@ -443,14 +454,25 @@ in
system = {
boot.loader.id = "limine";
build.installBootLoader = pkgs.replaceVarsWith {
src = ./limine-install.py;
isExecutable = true;
replacements = {
python3 = pkgs.python3.withPackages (python-packages: [ python-packages.psutil ]);
configPath = limineInstallConfig;
};
};
build.installBootLoader =
let
install = pkgs.replaceVarsWith {
src = ./limine-install.py;
isExecutable = true;
replacements = {
python3 = pkgs.python3.withPackages (python-packages: [ python-packages.psutil ]);
configPath = limineInstallConfig;
};
};
final = pkgs.writeScript "limine-install.sh" ''
#!${pkgs.runtimeShell}
set -euo pipefail
${install} "$@"
${cfg.extraInstallCommands}
'';
in
final;
};
})
(lib.mkIf (cfg.enable && cfg.secureBoot.enable) {

View file

@ -45,6 +45,7 @@ BOOT_COUNTING = "@bootCounting@" == "True"
class BootSpec:
init: Path
initrd: Path
extraInitrdPaths: list[Path]
kernel: Path
kernelParams: list[str] # noqa: N815
label: str
@ -306,9 +307,7 @@ def get_bootspec(profile: str | None, generation: int) -> BootSpec | None:
try:
bootspec_json = json.load(f)
except ValueError as e:
print(
f"error: Malformed Json: {e}, in {boot_json_path}", file=sys.stderr
)
print(f"error: Malformed Json: {e}, in {boot_json_path}", file=sys.stderr)
sys.exit(1)
return bootspec_from_json(bootspec_json)
@ -320,6 +319,11 @@ def bootspec_from_json(bootspec_json: dict[str, Any]) -> BootSpec:
sortKey = systemdBootExtension.get("sortKey", "nixos")
devicetree = systemdBootExtension.get("devicetree")
extraInitrdExtension = bootspec_json.get("org.nixos.extra-initrd.v1", {})
extraInitrdPaths = list(
map(lambda path: Path(path), extraInitrdExtension.get("paths", []))
)
if devicetree:
devicetree = Path(devicetree)
@ -332,6 +336,7 @@ def bootspec_from_json(bootspec_json: dict[str, Any]) -> BootSpec:
specialisations=specialisations,
sortKey=sortKey,
devicetree=devicetree,
extraInitrdPaths=extraInitrdPaths,
)
@ -374,16 +379,21 @@ def boot_file(
specialisation=" (%s)" % specialisation if specialisation else "",
)
description = f"Generation {generation} {bootspec.label}, built on {build_date}"
boot_entry = [
f"title {title}",
f"version {description}",
f"linux /{str(kernel.path)}",
f"initrd /{str(initrd.path)}",
f"options {kernel_params}",
f"machine-id {machine_id}" if machine_id is not None else None,
f"devicetree /{str(devicetree.path)}" if devicetree is not None else None,
f"sort-key {bootspec.sortKey}",
]
boot_entry = (
[
f"title {title}",
f"version {description}",
f"linux /{str(kernel.path)}",
f"initrd /{str(initrd.path)}",
]
+ list(map(lambda initrd: f"initrd /{initrd}", bootspec.extraInitrdPaths))
+ [
f"options {kernel_params}",
f"machine-id {machine_id}" if machine_id is not None else None,
f"devicetree /{str(devicetree.path)}" if devicetree is not None else None,
f"sort-key {bootspec.sortKey}",
]
)
contents = "\n".join(filter(None, boot_entry))
entry, bootctl_id = BootFile.from_entry(contents.encode("utf-8"))
return (list(filter(None, [kernel, initrd, devicetree, entry])), bootctl_id)

View file

@ -182,16 +182,37 @@
})
(lib.mkIf (config.system.etc.overlay.enable && !config.system.etc.overlay.mutable) {
# Systemd requires /etc/machine-id exists or can be initialized on first
# boot. This file should not be part of an image or system config because
# it is unique to the machine, so it is initialized at first boot and
# persisted in the system state directory, /var/lib/nixos.
environment.etc."machine-id".source = lib.mkDefault "/var/lib/nixos/machine-id";
boot.initrd.systemd.tmpfiles.settings.machine-id."/sysroot/var/lib/nixos/machine-id".f =
lib.mkDefault
{
argument = "uninitialized";
};
# An empty regular file means systemd will bind mount /run/machine-id
# on top, and ConditionFirstBoot will be false (the file will never
# change, so this makes sense). See machine-id(5) "First Boot
# Semantics". It also serves as a target to bind mount an actually
# persistent machine-id onto. A symlink doesn't work here since
# systemd-machine-id-commit checks /etc/machine-id itself for being a
# mountpoint without following symlinks, so it would never commit
# through a symlink.
environment.etc.machine-id = lib.mkDefault {
text = "";
mode = "0444";
};
# The upstream unit has ConditionPathIsReadWrite=/etc, which is always
# false here. Replace it with ConditionFirstBoot: with the empty
# placeholder above first-boot is "no" and commit stays skipped, but
# when a persistence module bind-mounts a writable file containing
# "uninitialized" over /etc/machine-id, first-boot is "yes" once and
# commit writes the generated ID through the bind mount.
#
# An empty Condition*= assignment resets *all* condition types, and
# this attrset is serialised in key order, so the reset goes through
# ConditionFirstBoot (sorts first) and we re-add the upstream
# ConditionPathIsMountPoint afterwards.
systemd.services.systemd-machine-id-commit.unitConfig = {
ConditionFirstBoot = lib.mkDefault [
""
"true"
];
ConditionPathIsMountPoint = lib.mkDefault "/etc/machine-id";
};
})
];

View file

@ -76,6 +76,19 @@
with subtest("/etc is mounted as an overlay"):
machine.succeed("findmnt --kernel --type overlay /etc")
with subtest("machine-id is set up without first-boot looping"):
# The baked-in placeholder is an empty regular file; systemd overlays
# /run/machine-id on top so the session has a valid ID while the
# commit service is condition-skipped (no writable /etc to commit to).
machine.succeed("stat --format '%F' /etc/machine-id | tee /dev/stderr | grep -q 'regular'")
machine.succeed("grep -qE '^[0-9a-f]{32}$' /etc/machine-id")
machine.fail("journalctl -b | grep -F 'System cannot boot: Missing /etc/machine-id'")
machine.fail("journalctl -b | grep -F 'Detected first boot'")
machine.fail("systemctl is-failed --quiet systemd-machine-id-commit.service")
assert machine.succeed(
"systemctl show -P ConditionResult systemd-machine-id-commit.service"
).strip() == "no"
with subtest("modes work correctly"):
machine.succeed("stat --format '%F' /etc/modetest | tee /dev/stderr | grep -q 'regular file'")
machine.succeed("stat --format '%F' /etc/modetest2 | tee /dev/stderr | grep -q 'regular file'")

View file

@ -554,6 +554,9 @@ in
etebase-server = runTest ./etebase-server.nix;
etesync-dav = runTest ./etesync-dav.nix;
evcc = runTest ./evcc.nix;
extra-initrd = import ./extra-initrd.nix {
inherit runTest pkgs;
};
facter = runTest ./facter;
fail2ban = runTest ./fail2ban.nix;
fakeroute = runTest ./fakeroute.nix;
@ -980,6 +983,7 @@ in
matomo = runTest ./matomo.nix;
matrix-alertmanager = runTest ./matrix/matrix-alertmanager.nix;
matrix-appservice-irc = runTest ./matrix/appservice-irc.nix;
matrix-authentication-service = runTest ./matrix/matrix-authentication-service.nix;
matrix-conduit = runTest ./matrix/conduit.nix;
matrix-continuwuity = runTest ./matrix/continuwuity.nix;
matrix-synapse = runTest ./matrix/synapse.nix;
@ -1125,6 +1129,7 @@ in
nginx-etag-compression = runTest ./nginx-etag-compression.nix;
nginx-globalredirect = runTest ./nginx-globalredirect.nix;
nginx-http3 = import ./nginx-http3.nix { inherit pkgs runTest; };
nginx-lua = runTest ./nginx-lua.nix;
nginx-mime = runTest ./nginx-mime.nix;
nginx-modsecurity = runTest ./nginx-modsecurity.nix;
nginx-moreheaders = runTest ./nginx-moreheaders.nix;

View file

@ -1,7 +1,7 @@
{ lib, pkgs, ... }:
{
name = "endlessh-go";
meta.maintainers = with lib.maintainers; [ azahi ];
meta.maintainers = [ ];
nodes = {
server =

View file

@ -0,0 +1,96 @@
{
runTest,
...
}:
let
common =
{ config, pkgs, ... }:
{
virtualisation.useBootLoader = true;
virtualisation.useEFIBoot = true;
system.boot.extraInitrd.paths = [
extraInitrdPath
];
boot.loader.timeout = 2;
boot.initrd.systemd.mounts = [
{
what = "/canary.txt";
where = "/sysroot/run/canary.txt";
type = "none";
options = "bind";
unitConfig = {
DefaultDependencies = false;
};
requiredBy = [ "initrd-fs.target" ];
before = [ "initrd-fs.target" ];
}
];
};
extraInitrdPath = "custom.cpio";
canaryCpio =
pkgs:
pkgs.runCommand "canary.cpio"
{
nativeBuildInputs = [ pkgs.cpio ];
}
''
echo canary > canary.txt
find . -print0 | cpio --null -o --format=newc > $out
'';
testScript =
# python
''
machine.wait_for_unit("multi-user.target")
# Check that the extra cpio archive is on the ESP
machine.succeed("test -e /boot/custom.cpio")
# Check that the initrd that we booted with contained the file from
# the extra initrd and our initrd mount unit bound it into sysroot
assert machine.succeed("cat /run/canary.txt").strip() == "canary"
'';
in
{
systemd-boot = runTest (
{ pkgs, ... }: {
name = "systemd-boot-extra-initrd";
nodes.machine = { config, ... }: {
imports = [ common ];
boot.loader.systemd-boot = {
enable = true;
extraInstallCommands = ''
cp ${canaryCpio pkgs} ${config.boot.loader.efi.efiSysMountPoint}/${extraInitrdPath}
'';
};
};
inherit testScript;
}
);
limine = runTest {
name = "limine-extra-initrd";
nodes.machine = { pkgs, config, ... }: {
imports = [ common ];
boot.loader.limine = {
enable = true;
efiSupport = true;
enableEditor = true;
extraInstallCommands = ''
cp ${canaryCpio pkgs} ${config.boot.loader.efi.efiSysMountPoint}/${extraInitrdPath}
'';
};
};
inherit testScript;
};
}

View file

@ -0,0 +1,430 @@
{ pkgs, lib, ... }:
let
mailerCerts = import ../common/acme/server/snakeoil-certs.nix;
ca_key = mailerCerts.ca.key;
ca_pem = mailerCerts.ca.cert;
mkBundle =
domain:
pkgs.runCommand "bundle-${domain}"
{
nativeBuildInputs = [ pkgs.minica ];
}
''
minica -ca-cert ${ca_pem} -ca-key ${ca_key} \
-domains ${domain}
install -Dm444 -t $out ${domain}/{key,cert}.pem
'';
mkDexConfig =
domain: primaryIP:
let
bundle = mkBundle domain;
in
{
enable = true;
settings = {
issuer = "https://${dexDomain}:5556";
storage.type = "sqlite3";
web = {
https = "${primaryIP}:5556";
tlsCert = "${bundle}/cert.pem";
tlsKey = "${bundle}/key.pem";
};
oauth2.skipApprovalScreen = true;
connectors = [
{
type = "mockPassword";
id = "mock";
name = "Example";
config = {
username = "${testUser}";
password = "${testPassword}";
};
}
];
};
};
testUser = "alice";
testPassword = "AliceSuperSecretPassword123!";
matrixSecret = "test_matrix_shared_secret_0123456789abcdef";
synapseDomain = "hs1.test";
masDomain = "mas1.test";
masULID = "01KVT6DSNT2MWD7WYMT2FY4SH5";
dexDomain = "dex1.test";
oidcClientID = "matrix-authentication-service";
oidcClientSecret = "lalalalalala";
loginCodeVerifier = "5kaYTTNVVehUrtJ8xi72ogdfwX8vxHMb3jEUBjyWcXQ";
loginCodeChallenge = "FbNLCROaJHe4LJQ7FEm7XjqDoWazb3emTE89x6Nx0Ng";
in
{
name = "matrix-authentication-service-upstream";
meta = {
maintainers = pkgs.matrix-authentication-service.meta.maintainers ++ lib.teams.matrix.members;
};
nodes = {
hs1 =
{
lib,
config,
pkgs,
nodes,
...
}:
let
bundle = mkBundle synapseDomain;
in
{
networking = {
hostName = lib.head (lib.strings.splitString "." synapseDomain);
domain = lib.last (lib.strings.splitString "." synapseDomain);
firewall.allowedTCPPorts = [
80
443
8448
];
};
services.matrix-synapse = {
enable = true;
extras = [ "oidc" ];
settings = {
listeners = [
{
port = 8448;
bind_addresses = [
config.networking.primaryIPAddress
];
type = "http";
tls = true;
x_forwarded = false;
resources = [
{
names = [
"client"
];
compress = true;
}
{
names = [
"federation"
];
compress = false;
}
];
}
];
database = {
name = "psycopg2";
args.password = "synapse";
};
redis = {
enabled = true;
host = "localhost";
port = config.services.redis.servers.matrix-synapse.port;
};
tls_certificate_path = "${bundle}/cert.pem";
tls_private_key_path = "${bundle}/key.pem";
public_baseurl = "https://${synapseDomain}:8448";
# Delegate authentication to MAS
matrix_authentication_service = {
enabled = true;
endpoint = "https://${masDomain}:8080";
force_http2 = true;
secret = matrixSecret;
};
};
};
services.postgresql = {
enable = true;
authentication = pkgs.lib.mkOverride 10 ''
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
'';
# The database name and user are configured by the following options:
# - services.matrix-synapse.database_name
# - services.matrix-synapse.database_user
#
# The values used here represent the default values of the module.
initialScript = pkgs.writeText "synapse-init.sql" ''
CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse';
CREATE DATABASE "matrix-synapse" WITH OWNER "matrix-synapse"
TEMPLATE template0
LC_COLLATE = "C"
LC_CTYPE = "C";
'';
};
services.redis.servers.matrix-synapse = {
enable = true;
port = 6379;
};
security.pki.certificateFiles = [
ca_pem
];
networking.extraHosts = ''
${nodes.mas1.networking.primaryIPAddress} ${masDomain}
${nodes.dex1.networking.primaryIPAddress} ${dexDomain}
${nodes.hs1.networking.primaryIPAddress} ${synapseDomain}
'';
environment.systemPackages = [
pkgs.matrix-synapse
pkgs.matrix-authentication-service
];
};
mas1 =
{ nodes, ... }:
let
bundle = mkBundle masDomain;
in
{
services.matrix-authentication-service = {
enable = true;
createDatabase = true;
settings = {
http = {
public_base = "https://${masDomain}:8080/";
tls = {
certificate_file = "${bundle}/cert.pem";
key_file = "${bundle}/key.pem";
};
listeners = [
{
name = "web";
binds = [ { address = "0.0.0.0:8080"; } ];
resources = [
{ name = "discovery"; }
{ name = "human"; }
{ name = "oauth"; }
];
tls = {
certificate_file = "${bundle}/cert.pem";
key_file = "${bundle}/key.pem";
};
}
];
};
matrix = {
homeserver = "hs1";
endpoint = "https://${synapseDomain}:8448/";
secret_file = "/var/lib/matrix-authentication-service/matrix_secret";
};
database.uri = "postgresql:///matrix-authentication-service?host=/run/postgresql&user=matrix-authentication-service";
secrets = {
encryption_file = "/var/lib/matrix-authentication-service/encryption";
keys = [
{
kid = "rsa-4096";
key_file = "/var/lib/matrix-authentication-service/key_rsa_4096";
}
];
};
policy.data.client_registration.allow_insecure_uris = true;
upstream_oauth2.providers = [
{
id = masULID;
client_id = oidcClientID;
client_secret = oidcClientSecret;
issuer = "https://${dexDomain}:5556";
scope = "openid email profile";
token_endpoint_auth_method = "client_secret_post";
}
];
};
};
services.postgresql.authentication = pkgs.lib.mkOverride 10 ''
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
'';
systemd.services.matrix-authentication-service.preStart = ''
echo -n '${matrixSecret}' > /var/lib/matrix-authentication-service/matrix_secret
echo -n '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' > /var/lib/matrix-authentication-service/encryption
${pkgs.openssl}/bin/openssl genrsa -out /var/lib/matrix-authentication-service/key_rsa_4096 4096
'';
security.pki.certificateFiles = [ ca_pem ];
networking.extraHosts = ''
${nodes.hs1.networking.primaryIPAddress} ${synapseDomain}
${nodes.dex1.networking.primaryIPAddress} ${dexDomain}
'';
networking.firewall.allowedTCPPorts = [
8080
8081
];
};
dex1 =
{
lib,
config,
nodes,
...
}:
{
services.dex = lib.mkMerge [
(mkDexConfig dexDomain config.networking.primaryIPAddress)
{
settings.staticClients = [
{
id = oidcClientID;
name = "Matrix";
redirectURIs = [ "https://${masDomain}:8080/upstream/callback/${masULID}" ];
secret = oidcClientSecret;
}
];
}
];
security.pki.certificateFiles = [ ca_pem ];
networking.extraHosts = ''
${nodes.hs1.networking.primaryIPAddress} ${synapseDomain}
${nodes.mas1.networking.primaryIPAddress} ${masDomain}
${nodes.dex1.networking.primaryIPAddress} ${dexDomain}
'';
networking.firewall.allowedTCPPorts = [ 5556 ];
};
};
testScript = ''
import json
import re
COOKIES = "-c /tmp/cookies.txt -b /tmp/cookies.txt"
def visit(url, *opts):
"""Follow the whole redirect chain from `url`; return `effective_url` and response body."""
out = dex1.succeed(
f"curl -sL {COOKIES} {' '.join(opts)} -w '\\n%{{url_effective}}' '{url.strip()}'"
)
body, _, effective = out.rpartition("\n")
return effective.strip(), body
def location(url, *opts):
"""Request `url` and return where it redirects, but don't follow it.
Used for the OAuth callback, which points at http://localhost:1234 where
nothing is listening, so `curl --location` would ultimately fail.
"""
return dex1.succeed(
f"curl -s {COOKIES} -w '%{{redirect_url}}' -o /dev/null "
f"{' '.join(opts)} '{url.strip()}'"
).strip()
def extract_csrf(html):
match = re.search(r'name="csrf" value="([^"]+)"', html)
assert match is not None, f"unable to find csrf token in {html}"
return match.group(1)
def authorize():
"""Start the OIDC flow and return the first redirect URL."""
return dex1.succeed(
"scope='openid urn:matrix:org.matrix.msc2967.client:api:*'; "
"curl -fs -G -w '%{redirect_url}' -o /dev/null https://${masDomain}:8080/authorize "
f"-d response_type=code -d client_id={client_id} "
"-d redirect_uri=http://localhost:1234/callback "
'--data-urlencode "scope=$scope" '
"-d state=somestate -d code_challenge=${loginCodeChallenge} "
"-d code_challenge_method=S256"
)
start_all()
# wait locally until units are ready
dex1.wait_for_unit("dex.service")
hs1.wait_for_unit("matrix-synapse.service")
mas1.wait_for_unit("matrix-authentication-service.service")
hs1.wait_until_succeeds("curl --fail -s --cacert ${ca_pem} https://${synapseDomain}:8448/")
hs1.wait_until_succeeds("journalctl -u matrix-synapse.service | grep -q 'Connected to redis'")
hs1.require_unit_state("postgresql.target")
mas1.wait_for_open_port(8080)
# cross-node reachability
mas1.wait_until_succeeds("curl --fail --silent --show-error --cacert ${ca_pem} https://${dexDomain}:5556/.well-known/openid-configuration")
mas1.wait_until_succeeds("curl --fail --silent --show-error --cacert ${ca_pem} https://${synapseDomain}:8448/")
hs1.wait_until_succeeds("curl --fail --silent --show-error https://${masDomain}:8080/.well-known/openid-configuration")
# Register a fresh OAuth client and grab its client_id
client_id_resp = json.loads(dex1.succeed(
"curl -s -X POST https://${masDomain}:8080/oauth2/registration "
"-H 'Content-Type: application/json' "
"-d '{ \"client_name\": \"test_client\", \"client_uri\": \"http://localhost:1234/\", \"redirect_uris\": [\"http://localhost:1234/callback\"], \"response_types\": [\"code\"], \"grant_types\": [ \"authorization_code\" ], \"token_endpoint_auth_method\": \"none\" }'"
))
t.assertIn("client_id", client_id_resp)
client_id = client_id_resp["client_id"]
with subtest("Register"):
location(authorize()) # follow /authorize to put the session cookie in the jar.
# To login with Upstream (Dex) the page returns a clickable link; we hardcode
# it here since we already know its shape.
upstream_url = f"https://${masDomain}:8080/upstream/authorize/${masULID}?id={client_id}&kind=continue_authorization_grant"
_, mock_body = visit(upstream_url)
_match = re.search(r'state=([^"&]+)', mock_body)
assert _match is not None, f"unable to find state in {mock_body}"
oidc_state = _match.group(1)
next_url, body = visit(
f"https://${dexDomain}:5556/auth/mock/login?back=&state={oidc_state}",
"-d 'login=${testUser}'",
"-d 'password=${testPassword}'",
)
next_url, body = visit(next_url, f"-d 'csrf={extract_csrf(body)}&action=register&username=${testUser}'")
visit(next_url, f"-d 'csrf={extract_csrf(body)}&action=set&display_name=Alice'")
with subtest("Login"):
consent_url, body = visit(authorize())
# Alice already has a session cookie, so /consent redirects straight to the callback.
callback_url = location(consent_url, f"-d 'csrf={extract_csrf(body)}&action=consent'")
_match = re.search(r'code=([^&]+)', callback_url)
assert _match is not None, f"unable to find code in {callback_url}"
code = _match.group(1)
access_token_resp = json.loads(dex1.succeed(
"curl -s -X POST https://${masDomain}:8080/oauth2/token "
"-d 'grant_type=authorization_code' "
f"-d 'client_id={client_id}' -d 'code={code}' "
"-d 'redirect_uri=http://localhost:1234/callback' "
"-d 'code_verifier=${loginCodeVerifier}'"
))
t.assertIn("access_token", access_token_resp)
access_token = access_token_resp["access_token"]
with subtest("Create Room"):
room_id_resp = json.loads(dex1.succeed(
"curl --fail -s -X POST https://${synapseDomain}:8448/_matrix/client/v3/createRoom "
"-H 'Content-Type: application/json' "
f"-H 'Authorization: Bearer {access_token}' "
"-d '{}'"
))
t.assertIn("room_id", room_id_resp)
room_id = room_id_resp["room_id"]
with subtest("Send Message"):
dex1.succeed(
"curl -fs -X POST "
f"https://${synapseDomain}:8448/_matrix/client/v3/rooms/{room_id}/send/m.room.message "
f"-H 'Authorization: Bearer {access_token}' "
"-H 'Content-Type: application/json' "
"-d '{\"msgtype\":\"m.text\",\"body\":\"hello from alice\"}' | grep event_id"
)
'';
}

37
nixos/tests/nginx-lua.nix Normal file
View file

@ -0,0 +1,37 @@
{ lib, ... }:
{
name = "nginx-lua";
meta.maintainers = [ lib.maintainers.kranzes ];
nodes.machine = {
services.nginx = {
enable = true;
lua = {
enable = true;
extraPackages = p: [
p.lua-resty-lrucache
p.lua-cjson
];
};
virtualHosts."localhost".locations."/" = {
extraConfig = ''
default_type text/plain;
content_by_lua_block {
local cache = require("resty.lrucache").new(8)
cache:set("greeting", require("cjson").decode('"Hello world!"'))
ngx.say((cache:get("greeting")))
}
'';
};
};
};
testScript = ''
machine.wait_for_unit("nginx")
machine.wait_for_open_port(80)
response = machine.wait_until_succeeds("curl -fsS http://127.0.0.1/").strip()
assert response == "Hello world!", f"Expected 'Hello world!', got '{response}'"
'';
}

View file

@ -1,12 +1,4 @@
{ pkgs, lib, ... }:
let
luaLibs = [
pkgs.lua.pkgs.markdown
];
getLuaPath = lib: "${lib}/share/lua/${pkgs.lua.luaversion}/?.lua";
luaPath = lib.concatStringsSep ";" (map getLuaPath luaLibs);
in
{ pkgs, ... }:
{
name = "openresty-lua";
meta = with pkgs.lib.maintainers; {
@ -15,7 +7,7 @@ in
nodes = {
webserver =
{ pkgs, lib, ... }:
{ pkgs, ... }:
{
networking = {
extraHosts = ''
@ -27,9 +19,10 @@ in
enable = true;
package = pkgs.openresty;
commonHttpConfig = ''
lua_package_path '${luaPath};;';
'';
lua = {
enable = true;
extraPackages = p: [ p.markdown ];
};
virtualHosts."default.test" = {
default = true;

View file

@ -12,26 +12,26 @@ vscode-utils.buildVscodeMarketplaceExtension {
sources = {
"x86_64-linux" = {
arch = "linux-x64";
hash = "sha256-qXGdFXx8Vr9oVStBjaeWEsQjhQUbp9MnLUfJtyhgwkA=";
hash = "sha256-lhDt8XEF90y4pj8RLUZgfZNmHkV1XlmHsYuT6sGJMRc=";
};
"x86_64-darwin" = {
arch = "darwin-x64";
hash = "sha256-Bd3ool5Ep8I5iiTMUHF48r/sf3F1dROx6Umns0pDGzE=";
hash = "sha256-SqFRn5FVQ+LcpmYT7/AIdIKTOxbapaKvPi+I360dVW8=";
};
"aarch64-linux" = {
arch = "linux-arm64";
hash = "sha256-Jv2lrdvY0tthJM2fifUlCW/QBzEZAa8QDHj4o+a4KxY=";
hash = "sha256-iuYVCG4YWPFI8o4GmuNjkbXvzJsAre0gSSEWq6CUk2E=";
};
"aarch64-darwin" = {
arch = "darwin-arm64";
hash = "sha256-VooAoTyysIFH1AaidcoRs7fJpID0LbmWnLdivGZfdrM=";
hash = "sha256-wEp7kaEnkdBl44WjKuDBjR5SEjYNdgIX7DdJWKvv6I4=";
};
};
in
{
name = "ruff";
publisher = "charliermarsh";
version = "2026.48.0";
version = "2026.54.0";
}
// sources.${stdenvNoCC.hostPlatform.system}
or (throw "Unsupported system ${stdenvNoCC.hostPlatform.system}");

View file

@ -497,8 +497,8 @@ let
mktplcRef = {
publisher = "banacorn";
name = "agda-mode";
version = "0.8.0";
hash = "sha256-2xYC+tStBXTL4koqUOcyxQUTDTipeUMTFLbrwqA6p7Q=";
version = "0.10.0";
hash = "sha256-rz3Ehq/2AewE5ADYHVk8pHICSWO58i8v+nBwzkFkGCY=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/banacorn.agda-mode/changelog";

View file

@ -11,13 +11,13 @@
}:
mkLibretroCore {
core = "pcsx2";
version = "0-unstable-2026-06-01";
version = "0-unstable-2026-06-24";
src = fetchFromGitHub {
owner = "libretro";
repo = "ps2";
rev = "65e8afb9e9ca0a3f3af32d9b35d7d8537cd3cbc1";
hash = "sha256-H6lZLLO1+ir+vPchq3XGHKsepmYLbohQFvoA0+yiQo0=";
rev = "6d11ca54728b0c9e0a4bf3da743d56c7d29abb4e";
hash = "sha256-JE2EU/ugtXwEqYIzd0JSWXUy29X44hYHiC/LfaaOjkw=";
fetchSubmodules = true;
};

View file

@ -14,13 +14,13 @@
}:
mkLibretroCore {
core = "play";
version = "0-unstable-2026-06-06";
version = "0-unstable-2026-06-22";
src = fetchFromGitHub {
owner = "jpd002";
repo = "Play-";
rev = "ee1334610cb2181bd9a84e837ba3ea667ebdb16a";
hash = "sha256-oriF08elBRg8jTlPz1Qoc6SmKQPknkegJlOtcOV4RX8=";
rev = "1e4f393f3c52581cdec7867ddadc47f6b4d20cec";
hash = "sha256-a02AsJg7mm/fUBN/5IC2Q6NexLYsBYp74bfqfJosaxc=";
fetchSubmodules = true;
};

View file

@ -54,13 +54,13 @@
"vendorHash": "sha256-sESuNlWNyjjGYb7z+tQF7RGBgicnPISuwXRzB+QJ7E4="
},
"aminueza_minio": {
"hash": "sha256-TLwOp7dSMjwOjlxEzYbFgw/S+Zkv+tCdknSjonmsRJo=",
"hash": "sha256-DfpZjIkjo5bEZ2BtHJoBLtjEDAD6ZiqpoCOMbmd1Jvo=",
"homepage": "https://registry.terraform.io/providers/aminueza/minio",
"owner": "aminueza",
"repo": "terraform-provider-minio",
"rev": "v3.38.0",
"rev": "v3.38.1",
"spdx": "AGPL-3.0",
"vendorHash": "sha256-BShrfr4EUvcpn0cLaohm1r5XqER4ba7bokHKuHxcW+g="
"vendorHash": "sha256-OLabFXYTe+Yhlf0Ja63tCcrc5mvPeXfN7yLoRZCkdvg="
},
"argoproj-labs_argocd": {
"hash": "sha256-c6+WY4oXL8evvPk/RzVrwtgq4XLB/LzAH5tpjErbE60=",
@ -200,13 +200,13 @@
"vendorHash": "sha256-b27UcoNuaX3PxNlJLdU9njCl5JymBQhxD6rq8yT3gi4="
},
"cloudamqp_cloudamqp": {
"hash": "sha256-LAQ5MVZe4OSIJb7X6gdx1lPmgAEKZIm/7lL/93NTP6I=",
"hash": "sha256-n78nZ01ley9ueYBZ7+bi0BLJ/RIc66HHjcmhFwDem3E=",
"homepage": "https://registry.terraform.io/providers/cloudamqp/cloudamqp",
"owner": "cloudamqp",
"repo": "terraform-provider-cloudamqp",
"rev": "v1.45.3",
"rev": "v1.46.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-59bhibkok4w7dLTf96jZGk2di6TpR6IAqp0i3xmtlyI="
"vendorHash": "sha256-rCWeetM6nhNb1I1PmB66E5K1ku9ODRqN87MU9y6W/dc="
},
"cloudflare_cloudflare": {
"hash": "sha256-y3GAU5wLLETSrmYqGZs2I0qg8jnGcu32Xt/UHGS1NTA=",
@ -373,11 +373,11 @@
"vendorHash": "sha256-RtS88NqkO1nG/8znM0sQqsAIfDc+sOMy8N4T4hmvaVA="
},
"e-breuninger_netbox": {
"hash": "sha256-e9244MaxEcmtYHT9zN4Nct2xpgBv8JOMe1VOW5y/2OQ=",
"hash": "sha256-rCDopABF6BDJo4sdwfy+GrU9EPAIldjddj+j7opf8FA=",
"homepage": "https://registry.terraform.io/providers/e-breuninger/netbox",
"owner": "e-breuninger",
"repo": "terraform-provider-netbox",
"rev": "v5.6.1",
"rev": "v5.6.2",
"spdx": "MPL-2.0",
"vendorHash": "sha256-WaeRXTqXakFTYMHio+VLIKS4kS5wHQdY5zdJYwrlVjE="
},
@ -715,13 +715,13 @@
"vendorHash": null
},
"hetznercloud_hcloud": {
"hash": "sha256-yIzI1p4U8klNqqFqiMuKhVb8njoslJ+vDXFOv+9EmFw=",
"hash": "sha256-Clbg0LS5SYpaEyevbZ+oDG3xFXEWjV376JvStPi3MnU=",
"homepage": "https://registry.terraform.io/providers/hetznercloud/hcloud",
"owner": "hetznercloud",
"repo": "terraform-provider-hcloud",
"rev": "v1.64.0",
"rev": "v1.66.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-f49amYWzWSG9tzY6wvpxtTFiyJ8zC/Lc1hIQtzdgJRs="
"vendorHash": "sha256-6knIcS3hkzt3R1IC1hA6EKOceJl51/pJXpftEaZjgtY="
},
"huaweicloud_huaweicloud": {
"hash": "sha256-Ao3CkaQBe172Ookcgl+ugeHH5ClbyOsSpLb4+j9DAZQ=",
@ -1319,11 +1319,11 @@
"vendorHash": "sha256-7ZoJg1HEVj5Nygr46lmBZeJDfZuU4F90yntrgkBVgGg="
},
"tencentcloudstack_tencentcloud": {
"hash": "sha256-nv+X3mptE51m7WwYzRqyvvrVR5tUikOYM06axtZIznk=",
"hash": "sha256-p8AW+AzezOP6N3wzlLZOMoTbSwb/cil7cmXkdwheXtE=",
"homepage": "https://registry.terraform.io/providers/tencentcloudstack/tencentcloud",
"owner": "tencentcloudstack",
"repo": "terraform-provider-tencentcloud",
"rev": "v1.83.2",
"rev": "v1.83.6",
"spdx": "MPL-2.0",
"vendorHash": null
},

View file

@ -7,13 +7,13 @@
mkHyprlandPlugin (finalAttrs: {
pluginName = "hypr-darkwindow";
version = "0.55.2";
version = "0.55.4";
src = fetchFromGitHub {
owner = "micha4w";
repo = "Hypr-DarkWindow";
tag = "v${finalAttrs.version}";
hash = "sha256-8Ht9yhlwOtDWFvL6VYlryNxyRethFqc0iWtBetP0xws=";
hash = "sha256-By/4CmpJvVvcBoyTtelH7MSLCKRaoXLCpiSfrbZIePc=";
};
installPhase = ''

View file

@ -7,14 +7,14 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "asciimol";
version = "1.2.5";
version = "1.2.7";
pyproject = true;
__structuredAttrs = true;
src = fetchPypi {
inherit (finalAttrs) pname version;
hash = "sha256-sB8hHtjfCv5jFHXEoUG7zNn3d3QKihPLbgnR+Jyz4GQ=";
hash = "sha256-SqwViOnVx1TcpY8Kd5VQCg1A8KQnBhL8aq9Gsrwer3k=";
};
build-system = with python3Packages; [ setuptools ];

View file

@ -49,6 +49,8 @@ buildNpmPackage rec {
mv "$out/bin/pyright-langserver" "$out/bin/basedpyright-langserver"
# Remove dangling symlinks created during installation (remove -delete to just see the files, or -print '%l\n' to see the target
find -L $out -type l -print -delete
# Remove native module build artifacts that reference nodejs source
rm -rf "$out/lib/node_modules/pyright-root/node_modules/keytar/build"
'';
nativeInstallCheckInputs = [ versionCheckHook ];

View file

@ -0,0 +1,107 @@
{
lib,
stdenv,
rustPlatform,
fetchFromGitHub,
fetchurl,
pkg-config,
apple-sdk_15,
libiconv,
versionCheckHook,
nix-update-script,
runCommand,
jq,
}:
let
# ccusage embeds the LiteLLM model-pricing table at build time. Its build
# script otherwise downloads this file from the network, which fails in the
# sandbox. Upstream pins the data via a flake input and points
# CCUSAGE_PRICING_JSON_PATH at it; mirror that exact revision here so the
# build is offline and reproducible (see package.nix + flake.lock in the
# upstream repo at tag v20.0.6). Bump this revision together with the package
# version; nix-update only refreshes the src and cargo hashes.
litellmPricing = fetchurl {
url = "https://raw.githubusercontent.com/BerriAI/litellm/f27df8d516802ce4c1b32973992154fe83b851cf/model_prices_and_context_window.json";
hash = "sha256-zJa6H2EwP9s+hMVs78Y+hwo4UX1dHRtvX5J3MdGh5aI=";
};
in
rustPlatform.buildRustPackage (finalAttrs: {
pname = "ccusage";
version = "20.0.6";
src = fetchFromGitHub {
owner = "ryoppippi";
repo = "ccusage";
tag = "v${finalAttrs.version}";
hash = "sha256-uf/FlPprxx4jh74YwjmYMtoIHpTkKrWTLetbNoYiFv4=";
};
# The Cargo workspace lives in rust/, not at the repo root.
cargoRoot = "rust";
buildAndTestSubdir = "rust";
cargoHash = "sha256-izA2Gs5nPmt0zn6/e1xM80vyyQHYKGEUDpUFRpyFiB8=";
__structuredAttrs = true;
strictDeps = true;
nativeBuildInputs = [ pkg-config ];
buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
apple-sdk_15
libiconv
];
env.CCUSAGE_PRICING_JSON_PATH = "${litellmPricing}";
# Build only the ccusage binary out of the multi-crate workspace.
cargoBuildFlags = [
"-p"
"ccusage"
"--bin"
"ccusage"
];
# Upstream disables the test suite in its own Nix build; parts of it rely on
# network access and live pricing data. versionCheckHook still exercises the
# built binary below.
doCheck = false;
nativeInstallCheckInputs = [ versionCheckHook ];
doInstallCheck = true;
passthru = {
updateScript = nix-update-script { };
tests = {
# With no agent data on disk, ccusage must still emit a valid, empty JSON
# report. --offline keeps it from reaching the network, exercising the
# pricing table baked in at build time. This guards the data discovery,
# JSON serialization, and offline-pricing paths without needing fixtures.
smoke =
runCommand "ccusage-smoke-test"
{
nativeBuildInputs = [
finalAttrs.finalPackage
jq
];
}
''
export HOME="$(mktemp -d)"
ccusage daily --json --offline > report.json
jq -e '.daily == [] and .totals.totalTokens == 0' report.json
touch "$out"
'';
};
};
meta = {
description = "Analyze coding agent CLI token usage and costs from local data";
homepage = "https://github.com/ryoppippi/ccusage";
changelog = "https://github.com/ryoppippi/ccusage/releases/tag/v${finalAttrs.version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ thrix ];
mainProgram = "ccusage";
};
})

View file

@ -0,0 +1,41 @@
{
lib,
stdenv,
fetchFromGitHub,
gnumake,
zlib,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "codebase-memory-mcp";
version = "0.8.1";
src = fetchFromGitHub {
owner = "DeusData";
repo = "codebase-memory-mcp";
rev = "v${finalAttrs.version}";
hash = "sha256-H0l8H2JhPT1Rs0p+CJC1a1qYtnZNgLGe6n7PmM+WvE4=";
};
nativeBuildInputs = [ gnumake ];
buildInputs = [ zlib ];
strictDeps = true;
__structuredAttrs = true;
# scripts/build.sh verifies CC via `file`, which fails on Nix's compiler wrapper.
# Call make directly — mirrors upstream flake.nix.
buildPhase = ''
runHook preBuild
make -j$NIX_BUILD_CORES -f Makefile.cbm cbm CFLAGS_EXTRA='-DCBM_VERSION=\"${finalAttrs.version}\"'
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -Dm755 build/c/codebase-memory-mcp $out/bin/codebase-memory-mcp
runHook postInstall
'';
meta = {
homepage = "https://github.com/DeusData/codebase-memory-mcp";
description = "High-performance C11 MCP server that indexes codebases into a persistent knowledge graph";
mainProgram = "codebase-memory-mcp";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ gdifolco ];
platforms = lib.platforms.linux ++ lib.platforms.darwin;
};
})

View file

@ -10,16 +10,16 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "concord-tui";
version = "2.2.2";
version = "2.2.7";
src = fetchFromGitHub {
owner = "chojs23";
repo = "concord";
tag = "v${finalAttrs.version}";
hash = "sha256-oKaP5ff19RYg73LsilD1Hxaz7nSr8QK/08jM1TylbWU=";
hash = "sha256-WSZsN1+ZhFWTHl9BvKERrr0lQj06N392Jo2nYjNm5QY=";
};
cargoHash = "sha256-jJkAXzmZAUHLIO2uVeR3KNTBYAnp31m49mk66/lKHHY=";
cargoHash = "sha256-LJnwO9507nLptKARCih58+wKrHzLGu+qQ/guf1oezX8=";
buildInputs = [
opus

View file

@ -1,17 +1,30 @@
From 0cfacb99db5940dabc385e7bc4534dfefa60fcfd Mon Sep 17 00:00:00 2001
From: fliiiix <hi@l33t.name>
Date: Thu, 25 Jun 2026 10:46:35 +0200
Subject: [PATCH] cpm
---
CMakeLists.txt | 4 ----
tests/CMakeLists.txt | 11 +----------
2 files changed, 1 insertion(+), 14 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7dbc2c3..cfdd98d 100644
index 51fade9b4..1b93bffd2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,7 +11,6 @@ project(Crow
@@ -60,10 +60,6 @@ option(CROW_ENABLE_SSL "Enable Crow's SSL feature for supporting https" OFF)
option(CROW_ENABLE_COMPRESSION "Enable Crow's Compression feature for supporting compressed http content" OFF)
option(CROW_ENABLE_TSAN "Enable ThreadSanitizer" OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
-include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/CPM.cmake)
# Make sure Findasio.cmake module is found
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
-if(CROW_GENERATE_SBOM OR CROW_BUILD_TESTS)
- include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/CPM.cmake)
-endif ()
-
if(CROW_GENERATE_SBOM)
CPMAddPackage(
NAME cmake-sbom
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 67c458c..2873530 100644
index 80f6dd364..e01adeb2f 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -5,18 +5,9 @@ set(CMAKE_POLICY_DEFAULT_CMP0077 new)
@ -23,7 +36,7 @@ index 67c458c..2873530 100644
+find_package(Catch2 REQUIRED)
-CPMAddPackage(Catch2
- VERSION 3.10.0
- VERSION 3.12.0
- GITHUB_REPOSITORY catchorg/Catch2
- OPTIONS
- "CATCH_INSTALL_DOCS Off"
@ -34,3 +47,6 @@ index 67c458c..2873530 100644
enable_testing()
# list the test sources
--
2.43.0

View file

@ -10,13 +10,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "crow";
version = "1.3.0.0";
version = "1.3.2";
src = fetchFromGitHub {
owner = "CrowCpp";
repo = "Crow";
tag = "v${finalAttrs.version}";
hash = "sha256-QLYQ0RouqDDvhnBF79O/9M7IwlF0eQ3HTqR6bXWm574=";
hash = "sha256-MN2x1hgJ9TziZFPSZn6RuAEfl4mZv3ijU9LqQJkw6UM=";
};
patches = [

View file

@ -11,16 +11,16 @@
buildGo126Module (finalAttrs: {
pname = "crush";
version = "0.74.1";
version = "0.80.0";
src = fetchFromGitHub {
owner = "charmbracelet";
repo = "crush";
tag = "v${finalAttrs.version}";
hash = "sha256-JnELv8Q2GlOKhYbBRUDY8m8XuyyoD71Tw5qbnpbNxVY=";
hash = "sha256-joSzU5+gufb9cEsIOVVSnEO9+Xoy1g+gqzvmpbkIky8=";
};
vendorHash = "sha256-D2GJ3ORyJy5Dn0MZJWgB3Wv1FyDoAWqLI3W0yU1q5Lw=";
vendorHash = "sha256-cA39djwy7NOBeJELvrPSW2mRcyDEhsghPOzzQ9O180c=";
ldflags = [
"-s"

View file

@ -35,6 +35,13 @@ rustPlatform.buildRustPackage (finalAttrs: {
pname = "deno";
version = "2.8.3";
__structuredAttrs = true;
outputs = [
"out"
"denort"
];
src = fetchFromGitHub {
owner = "denoland";
repo = "deno";
@ -225,7 +232,9 @@ rustPlatform.buildRustPackage (finalAttrs: {
'';
postInstall = ''
# Remove non-essential binaries like denort and test_server
moveToOutput "bin/denort" "$denort"
# Remove non-essential binaries like test_server
find $out/bin/* -not -name "deno" -delete
# Do what `deno x --install-alias` would do (it doesn't work with Nix-packaged Deno)
@ -279,6 +288,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
jk
ofalvai
mynacol
anish
];
maxSilent = 14400; # 4h, double the default of 7200s; sometimes needed for x86_64-darwin on hydra
platforms = [

View file

@ -7,29 +7,29 @@
}:
let
version = "2026.7.16";
version = "2026.8.18";
throwSystem = throw "Unsupported system: ${stdenvNoCC.hostPlatform.system}";
srcs = {
x86_64-linux = fetchurl {
url = "https://static.devin.ai/cli/${version}/devin-${version}-x86_64-unknown-linux.tar.gz";
hash = "sha256-nbp5I6Ta6OFpz5P+TwKVxTdtoq3QcChii1QzYHizzzY=";
hash = "sha256-3Uu6IFkwhr9whHR5LBGrDJQovlskGf9cGC7F8QmaBmE=";
};
aarch64-linux = fetchurl {
url = "https://static.devin.ai/cli/${version}/devin-${version}-aarch64-unknown-linux.tar.gz";
hash = "sha256-8BiJnLlUk4BxTNo4tbZg6QHZjfMLRDEx/X9tcAenB9k=";
hash = "sha256-En56i68uCcsP0jhxr5idyeMuO/p/SXsfZWDMUvW/GcY=";
};
aarch64-darwin = fetchurl {
url = "https://static.devin.ai/cli/${version}/devin-${version}-aarch64-apple-darwin.tar.gz";
hash = "sha256-iRt56RmT7U3lgFpw/e9KFkAoBg6UuJNdf79/zHiRwc0=";
hash = "sha256-n0GtTUnA9OYw4VmAQkGA4rcOGk9ifwYz+ouyJEkZpAo=";
};
x86_64-darwin = fetchurl {
url = "https://static.devin.ai/cli/${version}/devin-${version}-x86_64-apple-darwin.tar.gz";
hash = "sha256-luSuvOyXHPs4NDzF9Iql9cFUN1ac9key/bNr1saLZBE=";
hash = "sha256-KZ7FeZjOIR+/vW7Tt3BOBQUsShXOglaRbxxGSR6R2Bg=";
};
};
in

View file

@ -9,16 +9,16 @@
buildGoModule (finalAttrs: {
pname = "doggo";
version = "1.1.7";
version = "1.2.0";
src = fetchFromGitHub {
owner = "mr-karan";
repo = "doggo";
rev = "v${finalAttrs.version}";
hash = "sha256-Q4a859MoVSZ4hjXwaIekL1En6xpd4bZPQ9NGAkxSPto=";
hash = "sha256-xzwgNuvEedqC0DS0cMi472x2Tx0mWdk+22E9Bz1G9Tk=";
};
vendorHash = "sha256-JMyGYG3cLOZmH9EcLPe+5+ViHv7Z7brLj5uqJrPYm7A=";
vendorHash = "sha256-AJQQVhrYhgazCwI2Dnvorj4Y78iwVO7mhx1gzZUA9BI=";
nativeBuildInputs = [ installShellFiles ];
subPackages = [ "cmd/doggo" ];

View file

@ -9,16 +9,16 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "encrypted-dns-server";
version = "0.9.20";
version = "0.9.21";
src = fetchFromGitHub {
owner = "DNSCrypt";
repo = "encrypted-dns-server";
tag = finalAttrs.version;
hash = "sha256-tyNyIgfOVTSuDiBUILdcNsHt0aRcn7cxiS0CND6FUS4=";
hash = "sha256-WdKAQISl82ii/C9pILd7HWEE2qtdZpMF32/pRc7lPpk=";
};
cargoHash = "sha256-u8u6doAf8PjkaVqZN2JCdp6wXjilGGzlloePH0DNrt4=";
cargoHash = "sha256-JZRKcvlxciU5MXGLBIXuZeU6tjxKaRaUn3xARN+5JtM=";
nativeBuildInputs = [ pkg-config ];

View file

@ -34,7 +34,7 @@ buildGoModule (finalAttrs: {
homepage = "https://github.com/shizunge/endlessh-go";
changelog = "https://github.com/shizunge/endlessh-go/releases/tag/${finalAttrs.version}";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ azahi ];
maintainers = [ ];
mainProgram = "endlessh-go";
};
})

View file

@ -10,13 +10,13 @@
buildGoModule (finalAttrs: {
pname = "fan2go";
version = "0.13.0";
version = "0.14.0";
src = fetchFromGitHub {
owner = "markusressel";
repo = "fan2go";
tag = finalAttrs.version;
hash = "sha256-JU6hk3JJwoiC3R+Qx6QKzALnvhTA0/luQzO5X6Cpb/I=";
hash = "sha256-TveCqAxZhxXT/nk/M14/tDhFQfNs++bRMmV7bN1VB3k=";
leaveDotGit = true;
postFetch = ''
cd $out
@ -25,7 +25,7 @@ buildGoModule (finalAttrs: {
'';
};
vendorHash = "sha256-6rcU7Qtzz80WcygeLVftdpGYAuzGmWD0M+ZVxgGcgnI=";
vendorHash = "sha256-CzwZghOBKEiRnUl3NCP1PBfW68iGIAJPDsmPUJThGog=";
nativeBuildInputs = lib.optionals enableNVML [
autoAddDriverRunpath

View file

@ -6,13 +6,13 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "frida-tools";
version = "14.10.2";
version = "14.10.4";
pyproject = true;
src = fetchPypi {
inherit (finalAttrs) version;
pname = "frida_tools";
hash = "sha256-DGv5zyOkxQHXhFFrbcG4zVkNhOosymmEZdX2Aphdh/0=";
hash = "sha256-eixUS1RdCVBA//vTdoooekJjQ9rYkJW0ok9LIDgtkmo=";
};
build-system = with python3Packages; [

View file

@ -53,7 +53,6 @@ python3Packages.buildPythonApplication (finalAttrs: {
'';
license = lib.licenses.gpl2Plus;
maintainers = with lib.maintainers; [
azahi
peterhoeg
];
platforms = lib.platforms.unix;

View file

@ -120,7 +120,6 @@ stdenv.mkDerivation (finalAttrs: {
license = lib.licenses.gpl3Plus;
platforms = with lib.platforms; linux ++ darwin;
maintainers = with lib.maintainers; [
azahi
lassulus
Gliczy
r4v3n6101

View file

@ -7,19 +7,20 @@
pnpmConfigHook,
fetchPnpmDeps,
makeWrapper,
nix-update-script,
}:
let
pnpm = pnpm_10;
in
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "home-assistant-matter-hub";
version = "2.0.46";
version = "2.0.48";
src = fetchFromGitHub {
owner = "RiDDiX";
repo = "home-assistant-matter-hub";
tag = "v${finalAttrs.version}";
hash = "sha256-lVsLvniPU7VAgxrUMZsGh9/cWgqap6iyX44r+Ap2Tjk=";
hash = "sha256-0M1ZSqNyLQECaO0cj4MpDGN5x8wVZeJczMViW5d9IXQ=";
};
# The bundled cli.js imports transitive dependencies (e.g. @noble/curves)
@ -36,8 +37,8 @@ stdenvNoCC.mkDerivation (finalAttrs: {
pnpmWorkspaces
;
inherit pnpm;
fetcherVersion = 3;
hash = "sha256-CuO+DTLPBr1WMyUMPKKzwYUrdWJLdWfj0IqmOyysaFo=";
fetcherVersion = 4;
hash = "sha256-Bfg2c6gYTUv1rsBGriXUiftlOwGCzPdbdYgW9qhFSLw=";
};
__structuredAttrs = true;
@ -92,6 +93,12 @@ stdenvNoCC.mkDerivation (finalAttrs: {
runHook postInstall
'';
passthru = {
updateScript = nix-update-script {
extraArgs = [ "--use-github-releases" ];
};
};
meta = {
description = "Publish your home-assistant instance using Matter";
homepage = "https://riddix.github.io/home-assistant-matter-hub/";

View file

@ -11,13 +11,13 @@
buildGoModule (finalAttrs: {
pname = "hugo";
version = "0.163.2";
version = "0.163.3";
src = fetchFromGitHub {
owner = "gohugoio";
repo = "hugo";
tag = "v${finalAttrs.version}";
hash = "sha256-M+AjLKRduVEZGo2h6E2acwUkK20YrNg3/vWc9fyJWvg=";
hash = "sha256-o8MoGrdOXBN/HkcuRsHyyyFLvPvNo3PI0oWBlO6Xfpw=";
};
vendorHash = "sha256-Bn+RA+EHd3gAKL4N/ibydX7yWNKOSYnIl2pfecfOu1k=";

View file

@ -21,13 +21,13 @@ assert (
stdenv.mkDerivation (finalAttrs: {
pname = "jonquil";
version = "0.3.1";
version = "0.3.2";
src = fetchFromGitHub {
owner = "toml-f";
repo = "jonquil";
rev = "v${finalAttrs.version}";
hash = "sha256-xKL3EWZaHdMAuUK7pL2vjfRk8Fq2uNL65TrGUyFQ5cc=";
hash = "sha256-eu5+cVvIF8AXye8zrcfaHoQzd+7bx6q9KtFuH5w2sFc=";
};
patches = [

View file

@ -0,0 +1,46 @@
{
lib,
buildGoModule,
fetchFromGitHub,
versionCheckHook,
nix-update-script,
}:
buildGoModule (finalAttrs: {
pname = "ketch";
version = "0.9.3";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "1broseidon";
repo = "ketch";
tag = "v${finalAttrs.version}";
hash = "sha256-bcmSPslW/k5OO+Zce6N0S3NoQeXGOM6DcZ4Cj2W2C14=";
};
vendorHash = "sha256-m3IwAYsczsxcVk9fay+f2AsNjmXoPk7NS0abES6b594=";
ldflags = [
"-s"
"-w"
"-X github.com/1broseidon/ketch/cmd.version=${finalAttrs.version}"
];
doInstallCheck = true;
nativeInstallCheckInputs = [ versionCheckHook ];
versionCheckProgramArg = "version";
passthru.updateScript = nix-update-script { };
meta = {
description = "Fast, stateless CLI for web search and scrape. Built for AI agents.";
homepage = "https://chain.sh/ketch/";
changelog = "https://github.com/1broseidon/ketch/releases/tag/v${finalAttrs.version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [
stephsi
];
mainProgram = "ketch";
};
})

View file

@ -2,8 +2,9 @@
bc,
zip,
lib,
fetchFromGitHub,
bats,
fetchFromGitHub,
python,
buildPythonApplication,
callPackage,
kicad,
@ -19,6 +20,7 @@
versioneer,
shapely,
setuptools,
versionCheckHook,
nix-update-script,
}:
let
@ -36,7 +38,10 @@ buildPythonApplication (finalAttrs: {
hash = "sha256-QhtdQgMgHaB0xj2hQ4MCptr5DDgCOfRClUSyYzrFQis=";
# Upstream uses versioneer, which relies on gitattributes substitution.
# This leads to non-reproducible archives on GitHub.
# See https://github.com/NixOS/nixpkgs/issues/84312
# See
# https://github.com/NixOS/nixpkgs/issues/84312
# https://github.com/NixOS/nixpkgs/pull/395213
# https://github.com/python-versioneer/python-versioneer/issues/217
postFetch = ''
rm "$out/kikit/_version.py"
'';
@ -72,6 +77,7 @@ buildPythonApplication (finalAttrs: {
nativeCheckInputs = [
pytestCheckHook
versionCheckHook
bats
];
@ -79,9 +85,10 @@ buildPythonApplication (finalAttrs: {
"kikit"
];
postPatch = ''
# Recreate _version.py, deleted at fetch time due to non-reproducibility.
echo 'def get_versions(): return {"version": "${finalAttrs.version}"}' > kikit/_version.py
# Recreate _version.py, deleted at fetch time due to non-reproducibility.
# should be done in postInstall to overwrite what versioneer generates again during the build phase
postInstall = ''
echo 'def get_versions(): return {"version": "${finalAttrs.version}"}' > $out/${python.sitePackages}/kikit/_version.py
'';
preCheck = ''
@ -96,14 +103,15 @@ buildPythonApplication (finalAttrs: {
passthru.updateScript = nix-update-script { };
meta = {
changelog = "https://github.com/yaqwsx/KiKit/releases/tag/${finalAttrs.src.tag}";
description = "Automation for KiCAD boards";
homepage = "https://github.com/yaqwsx/KiKit/";
changelog = "https://github.com/yaqwsx/KiKit/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.mit;
mainProgram = "kikit";
maintainers = with lib.maintainers; [
jfly
matusf
];
teams = with lib.teams; [ ngi ];
license = lib.licenses.mit;
};
})

View file

@ -8,11 +8,11 @@
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "kiwix-apple";
version = "3.14.0";
version = "3.15.1";
src = fetchurl {
url = "https://download.kiwix.org/release/kiwix-macos/kiwix-macos_${finalAttrs.version}.dmg";
hash = "sha256-rVfoJg8VTyEF6KeMGIOTUijtz8Ot0DerayrPgs6Wje8=";
hash = "sha256-3wZ7zavLmLyPYGrdFpnhd8a1paI65yHFdL6JzL1e0e0=";
};
sourceRoot = ".";

View file

@ -0,0 +1,44 @@
{
lib,
buildGo126Module,
fetchFromGitHub,
nix-update-script,
versionCheckHook,
}:
buildGo126Module (finalAttrs: {
pname = "ku";
version = "0.7.0";
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "bjarneo";
repo = "ku";
tag = "v${finalAttrs.version}";
hash = "sha256-LJ078zRCjz+h8GbDuQiOTxfSajX4b/XxeL+FwYDqT8s=";
};
vendorHash = "sha256-0gLwvJSEMgCw23YG8rMzoI7ubo0I5nvguex2HBJE1dU=";
ldflags = [
"-s"
"-w"
"-X main.version=v${finalAttrs.version}"
];
nativeInstallCheckInputs = [ versionCheckHook ];
versionCheckProgramArg = "--version";
doInstallCheck = true;
passthru.updateScript = nix-update-script { };
meta = {
description = "Fast, keyboard-driven Kubernetes TUI";
homepage = "https://github.com/bjarneo/ku";
changelog = "https://github.com/bjarneo/ku/releases/tag/v${finalAttrs.version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ kevinpita ];
mainProgram = "ku";
platforms = lib.platforms.unix;
};
})

View file

@ -1,5 +1,6 @@
# Derivation containing the Limine host tool and the compiled bootloader
{
fetchpatch,
fetchurl,
lib,
llvmPackages,
@ -57,6 +58,16 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-8aUp2lzVClyje6WHMTOnuOclhLEn1zMf6U5VTl5gEvc=";
};
patches = [
# Merged upstream in https://github.com/Limine-Bootloader/Limine/pull/599,
# remove on the next release.
(fetchpatch {
name = "align-linux-modules.patch";
url = "https://github.com/Limine-Bootloader/Limine/commit/6635ae4ff2321f9a3c85116a57a00e3b6edc100b.patch";
hash = "sha256-poAcZND5xwS8npHCytS9lwcQi9oCEcc4bR+6HKVXJ78=";
})
];
enableParallelBuilding = true;
hardeningDisable = lib.optionals missingZerocallusedregs [

View file

@ -22,13 +22,13 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "mixing-station";
version = "2.9.3";
version = "3.0.1";
src = fetchzip {
url = "https://mixingstation.app/backend/api/web/download/archive/mixing-station-pc/update/${finalAttrs.version}";
name = "mixing-station-${finalAttrs.version}.zip";
extension = "zip";
hash = "sha256-efY+zvX2cN+yFm1xxpvsZAiMhtNW/S9g2hgLnYUYd4I=";
hash = "sha256-WpjBqiYVuqIuDiigX2lg81I02qad/vZudqdWUe2h5Sw=";
stripRoot = false;
};

View file

@ -22,13 +22,13 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "mydumper";
version = "1.0.1-3";
version = "1.0.3-1";
src = fetchFromGitHub {
owner = "mydumper";
repo = "mydumper";
tag = "v${finalAttrs.version}";
hash = "sha256-Hk+GdJH+hH8HUcKKfzP6G0L/jM2DAfZtm+cPqAJAPJ0=";
hash = "sha256-r3f8WBF8pyWnxuqTKfNx3EBiRIP9pHk7dxGMaE7UOW4=";
# as of mydumper v0.16.5-1, mydumper extracted its docs into a submodule
fetchSubmodules = true;
};

View file

@ -6,13 +6,13 @@
buildGoModule (finalAttrs: {
pname = "nerva";
version = "1.29.0";
version = "1.30.0";
src = fetchFromGitHub {
owner = "praetorian-inc";
repo = "nerva";
tag = "v${finalAttrs.version}";
hash = "sha256-CnxSimoBuUFyzq1qh08wG9Tx3JqClS3ujtgJAVuWprE=";
hash = "sha256-kiVZFByiNCyubtzDryVwi6x/Xo1StEtlnOTlD9MfwP0=";
};
vendorHash = "sha256-Z0MSD+1/1VzrJ+pz5x0JvxrCxtJe59ckaTqHK/+TVN8=";

View file

@ -10,17 +10,17 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "netwatch-tui";
version = "0.25.7";
version = "0.25.8";
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "matthart1983";
repo = "netwatch";
tag = "v${finalAttrs.version}";
hash = "sha256-4QaUuKBnp3ygb5M+D/V2mhkZFRkEgWHRIxAlqEcvjwo=";
hash = "sha256-vKAadOd5H0nsHbYMFSfEBOwxjZn5Df0Zm8Jicz0hpgg=";
};
cargoHash = "sha256-S9iwtRNgVaWHC/OGxlxsUR4+oOeFhCgUaUvjNeig8Do=";
cargoHash = "sha256-mpVa+iSDzPyWW3Q78ZroLW2BzO0suXG7Q6nJjjIgHqk=";
nativeBuildInputs = [ pkg-config ];

View file

@ -34,13 +34,13 @@ let
in
stdenv.mkDerivation rec {
pname = "nix-scheduler-hook";
version = "0.7.3";
version = "0.8.0";
src = fetchFromCodeberg {
owner = "lisanna";
repo = "nix-scheduler-hook";
tag = "v${version}";
hash = "sha256-r8ybbPxQK+ohsaz4+brrsivj77fCqrrHPskfyrp6R2A=";
hash = "sha256-QMenfkNvn6bBGdu+d6i533/CkHNS7Tmr40cgl/ks5dk=";
};
sourceRoot = "source/src";

View file

@ -16,18 +16,18 @@
buildGoModule (finalAttrs: {
pname = "olivetin";
version = "3000.14.0";
version = "3000.15.0";
src = fetchFromGitHub {
owner = "OliveTin";
repo = "OliveTin";
tag = finalAttrs.version;
hash = "sha256-bMc+fmyaRNVLVzGSAUq+TgEdq1VO3Guvw9RnV+YdrRI=";
hash = "sha256-AztJqhSJV9hIsnhaYZoIMC8ZE17pUT37nRUdCZ6ZiCA=";
};
modRoot = "service";
vendorHash = "sha256-MxiINWFSpbkBDOBcusr2VViGgnlEoqOmj2gZaiGGjj0=";
vendorHash = "sha256-lZ3KBoM+cDyYPX16wuZT3UQvB/SrRD6W2ic+GznG7hU=";
subPackages = [ "." ];
@ -75,14 +75,14 @@ buildGoModule (finalAttrs: {
'';
outputHashMode = "recursive";
outputHash = "sha256-EilPfKCT8byqBl2Ls5f8VrBcT8H+u8jqUQTX6brWhUE=";
outputHash = "sha256-v7aSikl1VSFZdNKnIucs7RdqFWoaVNIH9u27YG9Ei90=";
};
webui = buildNpmPackage {
pname = "olivetin-webui";
inherit (finalAttrs) version src;
npmDepsHash = "sha256-+XWucYyYHRC1usQ95HjlFVct2h8njuxfAKDFKNwwJLI=";
npmDepsHash = "sha256-fr5RTPNXNd8sD/LphnDsekIbB333LgEHCb/NUEqSBIE=";
sourceRoot = "${finalAttrs.src.name}/frontend";

View file

@ -101,9 +101,7 @@ stdenv.mkDerivation rec {
homepage = "https://github.com/yvt/openspades/";
license = lib.licenses.gpl3;
platforms = lib.platforms.all;
maintainers = with lib.maintainers; [
azahi
];
maintainers = [ ];
# never built on aarch64-linux since first introduction in nixpkgs
broken =
stdenv.hostPlatform.isDarwin || (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64);

View file

@ -10,23 +10,23 @@
let
pname = "osu-lazer-bin";
version = "2026.620.0";
version = "2026.624.0";
src =
{
aarch64-darwin = fetchzip {
url = "https://github.com/ppy/osu/releases/download/${version}-lazer/osu.app.Apple.Silicon.zip";
hash = "sha256-SHqi+RFMwYkChmCc0i1X/bmMajVSLaWuNCx9+cDkg7E=";
hash = "sha256-kL2XGJzTRC+AtHH4+byaR1df9EYyIriuxzawDtAFWZ4=";
stripRoot = false;
};
x86_64-darwin = fetchzip {
url = "https://github.com/ppy/osu/releases/download/${version}-lazer/osu.app.Intel.zip";
hash = "sha256-WXMyeoTixCNPin+hIK+1v2bX26MWnsQ7ZQGwJQ7jbyc=";
hash = "sha256-NOBKnsZpMYU6uBfVqYK3ZrPzZBQURw6bN5rr1iZG9nA=";
stripRoot = false;
};
x86_64-linux = fetchurl {
url = "https://github.com/ppy/osu/releases/download/${version}-lazer/osu.AppImage";
hash = "sha256-rLom/UwqVOXUk/ayLvekRQMD49p5MB9BA6RCohtuPfg=";
hash = "sha256-EKmCq656djPGK5I1JqSDcTKtpbQZbO8WGWcPv+PT0q4=";
};
}
.${stdenvNoCC.system} or (throw "osu-lazer-bin: ${stdenvNoCC.system} is unsupported.");

View file

@ -586,8 +586,8 @@
},
{
"pname": "ppy.LocalisationAnalyser.Tools",
"version": "2025.1208.0",
"hash": "sha256-diVAckS1zNyVE1UGkbiu9jH/25j/c+Ad5XC3EjdLDsg="
"version": "2026.611.0",
"hash": "sha256-f3QNC84ynXUHW0wvDZvCTCbNYpqdHzq12uNNwaB6M1g="
},
{
"pname": "ppy.managed-midi",
@ -616,8 +616,8 @@
},
{
"pname": "ppy.osu.Framework",
"version": "2026.616.0",
"hash": "sha256-Q9pyMPIpyiAp63VYiWEM8Zbiek0aXdsNBZY2ECaaZ/U="
"version": "2026.623.0",
"hash": "sha256-IcCFJvj5ydy0r6mEpHgV+UK9N7cd/3CtjOCV2GT8HOY="
},
{
"pname": "ppy.osu.Framework.NativeLibs",
@ -646,8 +646,8 @@
},
{
"pname": "ppy.SDL3-CS",
"version": "2026.520.0",
"hash": "sha256-Owz9gClqs1Dnb+EHk4Xpl/tdbXSOwqrL67tTatj+HRU="
"version": "2026.623.0",
"hash": "sha256-LMT2AVjP/HIC3a7PZDR4Vhlr6CCEhPu5ZF1eSYDIjeY="
},
{
"pname": "ppy.Veldrid",

View file

@ -22,13 +22,13 @@
buildDotnetModule rec {
pname = "osu-lazer";
version = "2026.620.0";
version = "2026.624.0";
src = fetchFromGitHub {
owner = "ppy";
repo = "osu";
tag = "${version}-lazer";
hash = "sha256-I2cziF/XRZhMRZCyjoec7G03IxldDMNQ//A7CmFW6/Y=";
hash = "sha256-qZPComGBdVReWQ0rVQeB9v8N2ul02AhGe8BlIzhz0+s=";
};
projectFile = "osu.Desktop/osu.Desktop.csproj";

View file

@ -0,0 +1,72 @@
{
lib,
stdenvNoCC,
fetchurl,
autoPatchelfHook,
dpkg,
glib-networking,
wrapGAppsHook4,
webkitgtk_4_1,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
strictDeps = true;
__structuredAttrs = true;
pname = "proton-authenticator";
version = "1.1.6";
src = fetchurl {
url = "https://proton.me/download/authenticator/linux/ProtonAuthenticator_${finalAttrs.version}_amd64.deb";
hash = "sha256-jHtqBdGE9+Kz5sjPMrCDnHKX0NLscO5Dp4pYYE8L2iU=";
};
dontConfigure = true;
dontBuild = true;
nativeBuildInputs = [
dpkg
autoPatchelfHook
wrapGAppsHook4
];
buildInputs = [
webkitgtk_4_1
];
installPhase = ''
runHook preInstall
install -Dm755 usr/bin/proton-authenticator $out/bin/${finalAttrs.meta.mainProgram}
cp -r usr/share $out
runHook postInstall
'';
preFixup = ''
gappsWrapperArgs+=(
--prefix GIO_EXTRA_MODULES : "${glib-networking}/lib/gio/modules"
--set WEBKIT_DISABLE_COMPOSITING_MODE 1
)
'';
meta = {
description = "Two-factor authentication manager with optional sync";
longDescription = ''
This package provides proton-authenticator as a pre-built binary.
Changed: proton-authenticator is now source-compiled by default.
Use this package (proton-authenticator-bin) if you prefer the pre-built binary
instead of building from source.
'';
homepage = "https://proton.me/authenticator";
license = lib.licenses.unfree; # source not yet published
maintainers = with lib.maintainers; [
felschr
pbek
];
platforms = [ "x86_64-linux" ];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
mainProgram = "proton-authenticator";
};
})

View file

@ -0,0 +1,13 @@
diff --git a/.yarnrc.yml b/.yarnrc.yml
index 44d5b0a935..bfe72b9fd6 100644
--- a/.yarnrc.yml
+++ b/.yarnrc.yml
@@ -5,7 +5,7 @@ compressionLevel: mixed
enableConstraintsChecks: true
-enableScripts: true
+enableScripts: false
httpProxy: '${http_proxy:-}'

View file

@ -0,0 +1,149 @@
{
"@esbuild/aix-ppc64@npm:0.28.1": "98a9325bec976ebe1cbbf2441fdbe895b36733919b9df7d62e7b73a1e199810affeac17d172cc5cf61196c9b1ede8073ca5d088ca52b14800b76f49bacc480b3",
"@esbuild/android-arm64@npm:0.28.1": "ec3e3c62bc684a09393ca10a0f64b166938f66e4b1972f6db63bf55463bf039736549d9808e50996eb0fedea70744b466aeb816c44e78f2b5d232aeb9929e3ac",
"@esbuild/android-arm@npm:0.28.1": "cda56884826ac2aa5dd3be5df9e89834df3b46515cf14099ddfc5bcfc80122d4f8d74b3831a0ac447d87dda73ae90fba49dc4e352b11240c2b055cdca69a0a02",
"@esbuild/android-x64@npm:0.28.1": "7f2ba14ba06fd3f2faff467e6fceb2466cd44d1d6039ae1c01f24336a5a1ad0f9c3721000331ded3f250587e4be5e7194d68dd33c55339dc26e1200e13e16d2d",
"@esbuild/darwin-arm64@npm:0.28.1": "9798bd013921f8dc5126eb12eba4ddfce9198d11eba6ae844f66d25919d5d26be2aa46b4da8d442ad0e7673e88b2f3d9e505d71692cd030bda9a7b762921c05d",
"@esbuild/darwin-x64@npm:0.28.1": "aaddefac25e025e309c71dc5c7074d8c295f44779e41add06dbf65d48b2a6a72b579266748e7f0ab3b2be1ed07be8d541e954f75dda2a2992f36f4c805d91fe1",
"@esbuild/freebsd-arm64@npm:0.28.1": "a325b7833f978b62bf25157ea5a951e29b9b0a1db9665ee52498644c9b250977ab6f21c049137d0a271bb0442b3e6d6148c257bace84476196b46570ce837d62",
"@esbuild/freebsd-x64@npm:0.28.1": "f092ddacd0bc715f443b62382dd8ba8f85d272f62caa47f603e85b9c5b14fef67c610523006ca88cae19e2829fe41a2a0ae92b7c158ef1038c714552dea57554",
"@esbuild/linux-arm64@npm:0.28.1": "bfda225d3101bb3ed5a74f979d50564a17ccf3799ad65fb968c5b15c9ceb9077c105a9bb5763d42f33f1917ac709e5779cd2112e5420188963568e80ac8439f8",
"@esbuild/linux-arm@npm:0.28.1": "b440cf89adf6dd1079bcf7d9aa915f70f467002bbb69bda21f4a3d160c9ae93bc6d8eb73b2831c8607fb1527d8ada288d907440e36969cb60000e4df85b7c549",
"@esbuild/linux-ia32@npm:0.28.1": "4329d81cf06331e537c8ebb571a9d4ca968811bee7c7cb4f975b8343c9f7649a8b2b9902b0974be0e2224656b1a0d21f3b191304db8cec52d006b80061faf4c2",
"@esbuild/linux-loong64@npm:0.28.1": "76b4d0f2cf716576181065e3fd2d6ffa9b0d0c39987e8d3d1b8d1e8aaa2563779cd4f861c881e3e7a9302f2d03d5543b8f726a99603e6aa754c8154772d0f434",
"@esbuild/linux-mips64el@npm:0.28.1": "59825a73d04187818c6fb53b22e2915a4c0e6c8fee9017d75dcafbdc66699f2765377faf801495d69952230935557f58360481a7edd78073816270aa8bd0cbee",
"@esbuild/linux-ppc64@npm:0.28.1": "3186d54b33d9b4849d6fe4fa2aeed4966a4117f9a27bf2d59f07f3ea651a9724a2eb9aaaf98813aac6dc726710a337bfc2472dd714262894fabf498a369fbd74",
"@esbuild/linux-riscv64@npm:0.28.1": "f01572cf6398b466d44bfa68dbc5f56a37b74e645673198f7ba157d215ccba35ea46e220a2526008d5679cef47a4368dd46480d4ba4c7330a491d215fe3f649f",
"@esbuild/linux-s390x@npm:0.28.1": "aad20d457c0441d7bf2f6c8dbe74297d4c3a3c90cf709a971a4a19b2c70497bf91ac4a80fa6168ccf6063eb284ea0f41f2293283e8351348369af551ffe6f3cf",
"@esbuild/linux-x64@npm:0.28.1": "d361ac73388af397803dc26242265c8f00fce91d9dd587b04d230c686294585c541f43dee706e23f8d56754e3a3da653b00b3f55855182d60deabc024acf19f7",
"@esbuild/netbsd-arm64@npm:0.28.1": "73e2d620958bcb61367849046397dee40dbd9bd6d0d4172bb87ef90ad644ed16e48386debd1ef0323648358fc617c0d8fae58be984774a2e8622712c7ab7f04b",
"@esbuild/netbsd-x64@npm:0.28.1": "663a35913d3d3a2f566d31ec00477954cc570f386d56a5ffffa1d7bb58bccfbe241780fc429c2e41463cef5d1d422ca02fe174df970932b46d225ff0bd333b65",
"@esbuild/openbsd-arm64@npm:0.28.1": "8add19644eca9a23cefc2a109644df802c626cc3460adef6f030ce72d1fcb127a4ff2b14a21cb51bbd68ec5a652f0bd7105c1a0d76a30f44fbf822c010096cd9",
"@esbuild/openbsd-x64@npm:0.28.1": "ad12be1ed38cc61410aa6210f88b8aa8dc3e6ee717dce32dba6e7cbaa57414af6e5314e7cdf9baa4affafe2d6a88e230d361a0ddadf76d06070b63bbf0a97cb2",
"@esbuild/openharmony-arm64@npm:0.28.1": "5ecd637058887c8458ebc7e95c67adee2397ebd8e5f6c302c17816eeb77963b1feeaff4e3f7823c0d85f0fc10771caa96175e2f0909b00e60ca5d90d22690a15",
"@esbuild/sunos-x64@npm:0.28.1": "e3286191315e30471e9cc176281a5d7acf5b877a95ea2868195024548a984e08b0214ea90e504e5bb5c595f9d3da9a5b961b52f79988702036b59233378580c4",
"@esbuild/win32-arm64@npm:0.28.1": "55e83fa2b63511bc3d2138ff84091b452936072b5b8e24405a5669f04355263b3f452861c13fc0c01ad80ebeb0df069da0318631386c9d66cda8ccbeca0fa82e",
"@esbuild/win32-ia32@npm:0.28.1": "dcd2579f97b8b5217e807d3a069461635ff6c1f13bc6e678fb0e385db4bf569afbbfe9f54ee512f0e120c6cc2689889725b8e2efdb17e3bb1603cffb58a4b6b3",
"@esbuild/win32-x64@npm:0.28.1": "1d7e7661663e2b0d814550e461fd06b814b3ac1ffda1e84468da3b7c29a1ad8a6067a8b7dcf6e66e38918b43a440c6302052f1bdb40c48a6d49a82c616e12f2d",
"@img/sharp-darwin-arm64@npm:0.34.5": "0f872f02a49c87c1c844c9715a1c1e4449fab30c85711d948767d41ea1eba1cc7be8268b582d95513e66cff090ab520e4104dcf30cc6f598ee429b40e890eeec",
"@img/sharp-darwin-x64@npm:0.34.5": "a9c0b03ad1d1c3ce549770e0655a6ad87a6e80633d65f9a009a2e19d1f5fe7b79c3ec946412f16ce302db3dfe759a35007e60e1f7042cb3e2291b49ba8d58a6a",
"@img/sharp-libvips-darwin-arm64@npm:1.2.4": "5076747c32a07caaf86e026f84a07378bd34eec6a6bc8843e5c09fc99e22f89e383d88824c0f527070efc33fb04569fa3f867038138faf8d76af1e4ecc0fc962",
"@img/sharp-libvips-darwin-x64@npm:1.2.4": "607213511370a700fda3ece08eb0a061a09483b595b75ce5e115c9d95efb6793d1e8e90d79873a9f526378f06f5fe5f3a8f0006cf76f7c7907985c8d4539f376",
"@img/sharp-libvips-linux-arm64@npm:1.2.4": "e078ef44f936609cb2b5fc01433e6c8f3babd5ab69fcc5f006504eb4664efa791438ea61e44c8f236eef55ba6ddb7bc41dc9b8b264fe689ff35fac428ce356a0",
"@img/sharp-libvips-linux-arm@npm:1.2.4": "493a3d34f9ec5a2aa71cada3c2b0cc2428659cc2aaaf4d7b7f6065648da560cb62e1febd4d49fc48f814787dc431a2c7e94992a2e2334dc409b73ec658cd0c43",
"@img/sharp-libvips-linux-ppc64@npm:1.2.4": "d746268a804ff66f363823840ea84a91c2c24e0f28438812c66f659b29305efee2219f1bfd7569944e02b0783044c275000c13b4180c4b07af3786bd1991567c",
"@img/sharp-libvips-linux-riscv64@npm:1.2.4": "3bfb408d0e333593247aff9cbbcafa8bace4714a54a742d3b18a73dc506a1176c56fed63cc682c34ac27704e207e6a53a1c9c955395abcc4ef8af8ca12b4e09b",
"@img/sharp-libvips-linux-s390x@npm:1.2.4": "79cd9764df0e845779cbc80ebf8eb0571080bce69d935fa8cd9a28a3aa5c4601c0e762ac83b6b8df0050ab54048098f692087265f64b16efc61de0818c2eea1b",
"@img/sharp-libvips-linux-x64@npm:1.2.4": "da642063f7a8f7e2c26e0b5734c1a39e7f4ca0d4521d9c6c65d81112146c4ecb846e73602fa145cf2106cd8f426d84010bb3f0baf4a9cf41db1b7deb3b47f353",
"@img/sharp-libvips-linuxmusl-arm64@npm:1.2.4": "e0ca7280827d433d10655ea1491543be98994e75a7b33b158faa7b4f6c866462d2abed253378b2534b9fab351a0961f23baaf16b4e7441131df0e3d47068507c",
"@img/sharp-libvips-linuxmusl-x64@npm:1.2.4": "876e3bde360cc6966bc3a703dd316f570b031085722c9c8bf27bb31050e30c8a10ef4a8fe2e66fefa0f4482db62044c47a1df25874c6330467e12a6983bb32d2",
"@img/sharp-linux-arm64@npm:0.34.5": "933c217e432ae7280bee1ef2bc0b5f3225b5ff3cfed19c25607ed7ed909b16cfa4a59c14089dd020e9b789ffd544df09e9b471281a049c926cd337509fa35241",
"@img/sharp-linux-arm@npm:0.34.5": "c20e85339d0e4e2116094293d9c1171407faa7a7b60d579cdc4af06d7b2ad4ff4976374593a2e525a08df4fc9df0dd9e80822a38764f07bc8d63e8d988ffa165",
"@img/sharp-linux-ppc64@npm:0.34.5": "8ded427067577bdd686534a0db30833d43b0c232c17d232d6608f0635f364241a6078ccdbbf54f5a48b773c95a05906a5ba20cc589c86959eb0e6329902c7cb4",
"@img/sharp-linux-riscv64@npm:0.34.5": "764ff0baa4275a4fd9376012893ca64b6cde601a208be216d38e2c6db3977d6f3e91e12342c7cb1cd3038b7108f8778bcfba85afaf097689907a4b932e79dc7a",
"@img/sharp-linux-s390x@npm:0.34.5": "a4e7cae17ebf95dd53e9dd845ae3e73c783f6c7da4a5aeddf7922dda09822c55327e892d2c8888dba097e666b97254b04df3cca99aeb9eb9fc57d73b20cc6b86",
"@img/sharp-linux-x64@npm:0.34.5": "2f4fc06e1d3544bf41296f2776b531d5aa0ab618e129cd928514a803e4a01202b8453c0321f7999619033c687571a7f50da454ff5ca04d41f31a7796a38e9a8b",
"@img/sharp-linuxmusl-arm64@npm:0.34.5": "2bd993173f42ab72df423f968b28cbd037e82f78cd469c3b6a7f4317e164f41f04cb9b106e35337e392a1fc4848aece67f0a765b346691133d7ad71146ef97ea",
"@img/sharp-linuxmusl-x64@npm:0.34.5": "00a5c641a144ad177d3ece569da6c05d891ab6a5c6e0f0f7ef4f74ab132c72f20b07927e5ae9c9afe090d44cf36be2170b4dc1831d0976533c693091995bb486",
"@img/sharp-wasm32@npm:0.34.5": "7c1ed71bd821c1ddb2aac32f128d4b173af97a33274f9e386c49ccedc31bd273ae0bf564626f068a61c8bb0de1f84a4b9211c7fd79a62d8170479a1887bc935c",
"@img/sharp-win32-arm64@npm:0.34.5": "07146b037ae4cdc7592b983bcee7b1c0199fa0fe14f9e3430a8ec6c46c056ba9bca0ee89d18e1aac4f43331dcaf464fe82bebf34e08d5bd1541ebd2d6345e518",
"@img/sharp-win32-ia32@npm:0.34.5": "d5887234959a32c9072043e8f14589ceec867f9fb0b440a5849750c2f0e79614962f566c44763ce560c52cd1e0d086ffac6299f91711477f1316d83f8b2151c1",
"@img/sharp-win32-x64@npm:0.34.5": "e10ab4421a46eecab0af903761679f27f91dde01ed4d533af4d77101d17e4f16b28628e91bbbcae63ec051606103f3cde21fd5055330130217277cb13242e7af",
"@parcel/watcher-android-arm64@npm:2.5.6": "f94d0a0b156e0c8ae41b19699663950808b32f2e06d80ebc953dc5b81f80c1b3acefa76dc11445bf1858b56aa98fa461899746ef6878930fd2d057f1a92c53a3",
"@parcel/watcher-darwin-arm64@npm:2.5.6": "0acbc44c8b7a02d1c013d9d9f10a4aeb01944cc129ac0ede8715c69287e7c7ab385bd40af3b87a4a93d1659eb879121eebe5d705ed6a3b76d4c8f2a158b76e45",
"@parcel/watcher-darwin-x64@npm:2.5.6": "62d96ee5f48677de03f06fbbb9442a9a9fec3738c17d1f9d43bcbcf20850a4666a9c02494c00d7b93a52bb50ed63bd7767f9eebfcf6a15fe24de4bb66212ebf6",
"@parcel/watcher-freebsd-x64@npm:2.5.6": "bc21fddbc4e05d8969b1e4aadceac0eb07da9a860156d837fa5a9c969223681c9d2026f4340ea8720b0a9eee9f741955b76d7c75a8b3c944191b2f500e0552e9",
"@parcel/watcher-linux-arm-glibc@npm:2.5.6": "1075654ccdd133196f8731a8180912d7ec7ecbfd7b1a63b8f5fb679ecc8f378d8ca5dde7aea78809fbdab2e0cc2f4b753dff022449c6f023090325e8b37428e1",
"@parcel/watcher-linux-arm-musl@npm:2.5.6": "982e34dbf583b013a327b8db2df2ff3187aad51ebff8203e96fa0e433a1acde8e7f95757113108a3a244f4a786a244c7b9fe3908ba75cd98f3358bb0686f1734",
"@parcel/watcher-linux-arm64-glibc@npm:2.5.6": "8411257e62bf5b28e0b5b761d597abe6121feef3711f353e5ad885a61ff5f9c9309a6a4fb85b12f92a3e26017057af537d40ff72074b90080ff4da7093867d7b",
"@parcel/watcher-linux-arm64-musl@npm:2.5.6": "246f6e250b34f3a0dc759c0aa258bf0c71984427ca8d50cf1e4644587bb4607f45a307a3bca6285c3c98be7f31413eb46f458997fe74f297c17db21454da519f",
"@parcel/watcher-linux-x64-glibc@npm:2.5.6": "b262fac17c0922493e718b85d58fdaa77aca2b215d4ea4ff7888b173b7373d3880643084d8e5849c6cb6fb73594625e43f533472486a2605e10940f80575efa8",
"@parcel/watcher-linux-x64-musl@npm:2.5.6": "f79bd22dfa2fc06ffe21f4271f4d9d12c21c484f4934cdd50899e3774d8a6e2199d086986220d78c6cdeca9a27c158250f5792d8e413d182d4f207aa0de7b795",
"@parcel/watcher-win32-arm64@npm:2.5.6": "9059f7ffd3dde686b0b8d56db7bcdc4d89655cba69370f943bac36ae0005c9f7dd2d0bd6eba4084fc18463914c195deaa0214c67800e08567e5434c2722af57e",
"@parcel/watcher-win32-ia32@npm:2.5.6": "93420a1bd00fdc102f222a3e368917150a2a05c38167556ea25e378685014ad22091dd3911c0cc9362d9900b8de624e765149dd658f98251c7347c1b02651e5b",
"@parcel/watcher-win32-x64@npm:2.5.6": "9f6a074d70569f61d2bac2e639cb404fc5e8d1579550aac139d44a384555cd18929163ab74d249bbcd76eefde24e17769892f70fbe9b4caff4602b700478b452",
"@rolldown/binding-android-arm64@npm:1.0.3": "c73fbb421576421485f0d0f708df38938addbf48a237f08e8a4a46bad876cadf445c74c93008b3cea8c1be07a32a390a6067b0220aa838912b6a530f53f1338b",
"@rolldown/binding-darwin-arm64@npm:1.0.3": "f140da4f3132f341a3f9c79e98d3baa6cac0034cbf4980b44ac37c67c523114feadacb5be451262923a0426c6523f5ba6f207d7fbdf4e95ac978add1ad829f96",
"@rolldown/binding-darwin-x64@npm:1.0.3": "ff7845f382344709fc166f7f87bea55eccf3400c2e3d7d70889c5be72640cfa7f7e2880893f8687776254cace09076767bb95ac7ed816547495e7d894f747651",
"@rolldown/binding-freebsd-x64@npm:1.0.3": "d6c401dfa68b6840a9a56e879198267ce8406f16108679caf6e6eb709c8ee0f2641c55d250b51ce47097000626c604bee7e7e2d9e2d70f71109b38e35fe4b836",
"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.3": "8843aad46237e6a0569196eb605e29afaaf449c06ca4ed1a02e8083c86264f7cc940b085aafe6349f2011b2a44f6dfa8d58b55803e09561f12ea110bd3cb53ff",
"@rolldown/binding-linux-arm64-gnu@npm:1.0.3": "dc34425af444478f539854b02683b14ceef88520634a1dfefbc12c6a2c403c9879c8697ff87188aef199d692508d1109d69f545d6cc3414bd409202fd7f5ca1c",
"@rolldown/binding-linux-arm64-musl@npm:1.0.3": "f04750497d329d71e17b86cacbc64cc78c7bf8eea0653f40a12f6b07e0baf70054feb8418538937ebb7e909f3b8a730f34e06370d6dc9188a4ea00fd3a947545",
"@rolldown/binding-linux-ppc64-gnu@npm:1.0.3": "289963b6842c40d2a30457d6da2b824ecf4e502ae85e3ca7f48c45071b94a0759e327df7687b6930e418c71f7e6716ba43d061dcb9ff30e330708b4031b521eb",
"@rolldown/binding-linux-s390x-gnu@npm:1.0.3": "df6ef349cc8a8b8a6089726627f0c0db089ea57a4980bed6fae5e0246cdbbd2dbfa4e322ad90493a685ad895b21dfd982ebbebee159a7e50e873eabdc52fca8a",
"@rolldown/binding-linux-x64-gnu@npm:1.0.3": "5d8faa3524898d23161a79ba6ad6fdeac8774c1a15c876a0eaadce582bcc584ec463ac8c2d685de509d04098202b67c8dfad515fcf0a614542af2b4260909597",
"@rolldown/binding-linux-x64-musl@npm:1.0.3": "a0cbdbba526790dd69f8de7810a90ee944f4a920f01326cff331702527b4dbf1377afd1dd9d65ded169f12fb3a1f0ec6d77c931a27e03cafcab453b2bfd3c317",
"@rolldown/binding-openharmony-arm64@npm:1.0.3": "ab0ca503f2b342e25f466dc65bd35d509ff629996086f480fefdfc7e54c0958d8f51daf51204a485f3c23b1405c824387524dd83a634f5a1304bf0c4722e0995",
"@rolldown/binding-wasm32-wasi@npm:1.0.3": "f540fdaebd7747dc436271fb8e22a60d08deac0b125e02f63cf0fd29cc0d228969d6ee6d49e150d9fd4f8bcd24795c116f86949bedce3cff505402ab2f4455a2",
"@rolldown/binding-win32-arm64-msvc@npm:1.0.3": "b85acf5cd1065ae5260ebd43586eea6dca66675b8346fe42a14c3a95e46943f290684b36cf359c0f01c38256558e819c74571945c13adfcbdc6238ef018ad877",
"@rolldown/binding-win32-x64-msvc@npm:1.0.3": "d76ebc4fb315deddce845b82eaa07eedf88bb5f9500fa50d241805055dea593ddfcbd762d59116f35ecd6b4bcef3dba5e513180e8d9301486eac272904ce91cf",
"@swc/core-darwin-arm64@npm:1.15.41": "09b4f1481e470b01c2f4fbcd85b5d06b75c014bcb7fcffb4a436101644daed8c2a8bbfb7d64e40fb91a49cad46b217c7a90a48eb66992c2e9662cbfc91d4dd60",
"@swc/core-darwin-x64@npm:1.15.41": "723662c309630266a3f90e697458aab879f49a6405f641a99c6a72f87c6d97d01d44679e28a19bc73bca362208353f6adf5fa3139b1472e82617454499f8142a",
"@swc/core-linux-arm-gnueabihf@npm:1.15.41": "c544b6b44f8fc3678b60c51658461510022565af93aecf23218c9c9f3d8d971695b3d20149cc858a56582ff6a1a896c02bbb32d816e36ae581ffdebb1504d3b2",
"@swc/core-linux-arm64-gnu@npm:1.15.41": "a851e540ddaeede74f97fe5000fcbe2a0353f213e8c01d221579e615753620238127e052a20345f4952a5afa1f980ac1f9d88717c98643a1714ce60f8facacba",
"@swc/core-linux-arm64-musl@npm:1.15.41": "2f9c1321974f3a9d330db93529a8a3c24500a5f17127bfa7d803f4388384a1a68a9b1df3a08180c3d82a1c2b1c23f68bd9cbb78259508aab2f790a3c3a51a96b",
"@swc/core-linux-ppc64-gnu@npm:1.15.41": "e1cc0e3f94bac3e85e8d65bb87cc755ca52ce88de556714c1a4f3150ae24925442873013eae06db8eac054b3f585f7c46e56718dfc7cdab5529eb6c22aa66264",
"@swc/core-linux-s390x-gnu@npm:1.15.41": "93d799ffd978a8f5fd3559314676e9813e0bf93c259eb52ca37a3cc7e2ca67464d506e602f97194d964df83190214d6445bbc02fba1eeaedbcc6cdc5f3809f0b",
"@swc/core-linux-x64-gnu@npm:1.15.41": "3941cf5cfa7730bc576400a1a0fd33a7520a1e71d32981f2f64ad06d6fcd537f01c746a3d26893fe225b6aa6829de932929f6338cdf233699e0a776e4f0f66c9",
"@swc/core-linux-x64-musl@npm:1.15.41": "78eedfa99dfef822d542b6e47635600e747f1e6f9f359c972c4bbed9eb297b102e99be80bb3454a6579c18faa78416f1cc3f5573a32da11c56e9b9a29e1328be",
"@swc/core-win32-arm64-msvc@npm:1.15.41": "2810f4fe12fe0c7cb808f7b8eba79058c4f4d2b56f6be3dcd69db4034a73b8a26cee3dd2699ba26eeb0917d2bcea1d875e8999998002c2ed567942e0f1a4a008",
"@swc/core-win32-ia32-msvc@npm:1.15.41": "3bc12936a18d9a1cb8865b834ad8567b1d394041bc8cbfc2a431401535591bfb4d190f46e594893a68e3dda901b0c54b910200ee1dbfb41fcdff5ffe162d17bb",
"@swc/core-win32-x64-msvc@npm:1.15.41": "fb5c9a63cbc1572e89fe75a0ab874086450aa30c955682bac3af5c34e291c6033dcf98e2699e968ee7f62a14c5177ccb3fa76024935b84e063f817ad16000bcc",
"@tauri-apps/cli-darwin-arm64@npm:2.11.2": "d8727da64b8382e879924c6dca66ec0b090e6a59a342d9ba90a20b63452f8105f29b615269b18df22b153f52706e3d1e12bc3433fa1f7a72d09a8026813c63bc",
"@tauri-apps/cli-darwin-x64@npm:2.11.2": "3a5b573e88f5db4bee121284ddbba9bb6c734c5327d5d4a724935b9ddee99c989c8a765187f70e97c3e357d4181b07347f6cb31c3eaa74a816e0e7369f632b56",
"@tauri-apps/cli-linux-arm-gnueabihf@npm:2.11.2": "733d0195040a80e6ce2d2781004746dd36162e3eb331b45eb770870ff5d5ec401e4efa9e4fb6c2f3845ae242f3d68b1ee5a9c55726165b49873ecaef53b64fd9",
"@tauri-apps/cli-linux-arm64-gnu@npm:2.11.2": "50af302c5daae38b9045706cefda6d1ad3d4b9f7997e5154cca2968edaef64e3aab1471493edc56449745c3e7d102973fa56cc01caaa317cb24b5fbaf7879895",
"@tauri-apps/cli-linux-arm64-musl@npm:2.11.2": "0d24a9c772b60b4021fe294d9434dec0d33059698efc0d0de6d29fd6c7b1b14238f994a4ec49904c940a91d1af0087017bbad3fe0d82704073bd29b6390482c3",
"@tauri-apps/cli-linux-riscv64-gnu@npm:2.11.2": "e08fd3792ab16d8f566b93a85afab9c03c9006f253870d926f9c72da71c06df1c67733436f6a733c4262bdcb6120d6c1c4352b3e83afcc24e1addd5eda6f77c0",
"@tauri-apps/cli-linux-x64-gnu@npm:2.11.2": "32dd8f051d534cf4883b02fd25333815db86fbc36075ccc71320edfdc63543f07fb55adb1660e0c82e5a812cb244277716a652d34ee07f119d5e6b9371e2c2bb",
"@tauri-apps/cli-linux-x64-musl@npm:2.11.2": "7d7a9461e28342c982cd143427eda109ef8a9f4c1ebc9499b787cdb696bead1891d7e25433f3bc5dec88fd4f985974f6289c074165b912e09baba8d8ee2c1346",
"@tauri-apps/cli-win32-arm64-msvc@npm:2.11.2": "a77faad67c7f91dd1a24a2f912b13f3a2819cd2ffbd7e71de11a7735231f9cf54883f5af4c2a6bdc6776bf6d61a345ad06babca5de8d1fd5e6f29d17582f5616",
"@tauri-apps/cli-win32-ia32-msvc@npm:2.11.2": "2e663cad45e67a8097d91a0a01bf1cb860309682dfd8b79dd3ffce05ca36dbee2a7115d294b3338250ff00005067319c174512ed890dfbf1bbe40cb1fb08b360",
"@tauri-apps/cli-win32-x64-msvc@npm:2.11.2": "42476dbc2c2c1e599abdae03a57beecb93496cd5633f1c2c09441925e822bcb5379da45adf27c18cf354a98d4da1e4b14268eff1642b42586279a3d29f4cc630",
"@turbo/darwin-64@npm:2.9.14": "56d85d491ee5d675a82dbe2668f507f5f8275a76acf13ae4c1146d256e8322fe824d95a73d8163d8eb5adec1de00fff362ac74f0261b48a7585960b2543438c3",
"@turbo/darwin-arm64@npm:2.9.14": "67b4c0da994cdf099fa0936bf764736a3d2fe1b9ee2d4a3fd408ecf027bec8d809d46354068e7b1c4a2f17d20c72566bc43fd2d1c7cff642840f1f2531c7e795",
"@turbo/linux-64@npm:2.9.14": "f924d8a0da065305a56948b2ddafa86f08b5c0deedd274b447cac9a278117b6bd25d051b6985aecccdc484e120f1d1078b57691f364f21191e578348b916cf0f",
"@turbo/linux-arm64@npm:2.9.14": "9bea16da322616dca2d569f2b364cda8fbaa625b99bf432e713192e51da5a328c19afab9b56d577cc1103ca402f1422d4c8688006ca2180483e4d9d3f8d5761f",
"@turbo/windows-64@npm:2.9.14": "17d7259b6b072edd31ec4038ba66da2f8a01bb0cca1e57042b902a9398f3b89e625c73ea58da59687385602a1d60b9403c3cfc3f516ae51da4f046ce4b3b46c0",
"@turbo/windows-arm64@npm:2.9.14": "f7e46322e5393db2a5edb56cabcc5ac8584b0ce0dcd2b9dbcefc52edacd5d77360f1f7af7c40388f8a2bc930d28a710a2f17ca6052cb9415744c62d56b6d855e",
"@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20260615.1": "54d7131691347de6cb3f0c2e8ee07504a061dd92e08757c54657ae037c2a2e8184ef000a6db6a50f76d50c12c11b53e1a9640b3911698ee5aff2edc8f059d399",
"@typescript/native-preview-darwin-x64@npm:7.0.0-dev.20260615.1": "60970a7271973feb2ce8864e843b47b21ac5e3619ac86a90911242e84073c9d0bd27cea6c5acdd8580f5fa09dd818a4a1d827a9536ece773e071b51dc2961f6b",
"@typescript/native-preview-linux-arm64@npm:7.0.0-dev.20260615.1": "8e936bfe87b8d3b82bd554cf81d7f30e33d6837fba468091c173fbdc93fd9593913fe3e1a7620cfd159654bc13697656df73ecce838d66342584b6e5d25ccc57",
"@typescript/native-preview-linux-arm@npm:7.0.0-dev.20260615.1": "badf1b0b1b759cde8805c88a30f7c2b118953600339998e540f135ec0b91ba062c4131b065583e77f36f5abc44857579254931f0358973ebcae1870a7f97e521",
"@typescript/native-preview-linux-x64@npm:7.0.0-dev.20260615.1": "4d41c67e118d836c9f1445cd8223462ba56ced03d7ac7278687b28ddddb5712c1192956b3f68d12d09165912d0cc714594790e0ed365215a37d9eca2a9a0c992",
"@typescript/native-preview-win32-arm64@npm:7.0.0-dev.20260615.1": "ef0808f53c9d6abe83807da7ab432a4687185f2df7371bef62b2f59f6dd757ea7ce4617deb1342384e4b185a32818873b4b6f765c75f84e69512e39ab01e3d06",
"@typescript/native-preview-win32-x64@npm:7.0.0-dev.20260615.1": "5ff8548c4d96ecc0dee75d2d1d0f8ec1b9a7ab6ba53a5ff9683b03037a0ca901eb71a42ff13832233d112c79161d162eab12866345eba872bed5ecdc323d70ef",
"@unrs/resolver-binding-android-arm-eabi@npm:1.12.2": "4890db75332b1e1ac63c638670616f0f056d11682d76e010d8889cba5d82325f507967414643ab73abc02b720d2ae3cfb97ace7923dacedd6d8de1aa37fedb76",
"@unrs/resolver-binding-android-arm64@npm:1.12.2": "6fe919620771ada502afbb049688db67c96380c7c560d694e23cdb5d1108b400f1e77bc2c574ac3036c0f78a3d245d0e844e8194645c1ddf89ad9cb3deb05876",
"@unrs/resolver-binding-darwin-arm64@npm:1.12.2": "60880d85d28e5901c45ea220c1bd208384b3a82d0c8274c6dbae5d4e3f601949a5ef40393e4c9ce063484e11556df5acb51fc8bdea494f803ea10915ab02ea7d",
"@unrs/resolver-binding-darwin-x64@npm:1.12.2": "e6e1482d62db4bb31e4cadfa16028df55359a945408e04955bde9b53276d390fe4a7ede43f415b64d98a92b8bec1a6a69cfa8ac64161978a9ff19c84b97fae3b",
"@unrs/resolver-binding-freebsd-x64@npm:1.12.2": "85102fd892f91678f4fe01f70e2217d681dea7934e4d39bb3c6dab39f9b322a1d84cad4c4817249dd2d0e153d3324b2658482fef211513f6c7c5c1a7bd48f621",
"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.12.2": "3d273c3a389e01fb90f76d969c65e1531ff1bb8029dcd9706b53500caddbd732a23bb32f3fd042d87188f3141a4be711a6b1eb14af64f41ae814cb876f610c74",
"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.12.2": "5a8a58dafac34a7a55f74ea875fc1f4dfdbb22d30a4e1dae4d49dc20040817ca604f5303cedb565e138873a377e88db1b76750c3e9aad6173214d15a257a6cca",
"@unrs/resolver-binding-linux-arm64-gnu@npm:1.12.2": "1ff2d49aaf57959f26503e5e3878ef01dfbd10e793dba4a04d69fdc9f3612b1d0294b6b4d722419e946da565b5f685625ef687b1b43723789836a392b61e11a8",
"@unrs/resolver-binding-linux-arm64-musl@npm:1.12.2": "f46191bc4208b9b77220dc51a6facc989f87dfac6c2675aad1682bf085d11d4e2a7e0adf2f5780bde9aab1400afabf4f16851523405c18648169e12855892d54",
"@unrs/resolver-binding-linux-loong64-gnu@npm:1.12.2": "1c83bb3c1ffc8f8a6060e62811082d65e0c1e593a178a694da6961bb8e46bb7775bce40abd530b27c08790fda2a9bb6b72d94351033715c277563c30cffa678e",
"@unrs/resolver-binding-linux-loong64-musl@npm:1.12.2": "c2172ee6cd4012d5b2e0776b2f42ce2828609123309471528b60c6f7a61faac73764dd4889450c73c574c70569b5f452f9b0335419fbd3e2590121a6042d40b4",
"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.12.2": "2a78c28e0f39d12d7c0cf116738d3e805425c02c792be4e1ec9232e2ba24893d6601883455aacb94ef760c11adb75bc7e9aba6cc241f4b3e15ec9da53632321b",
"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.12.2": "5d054de185858014c724c3f996cc41c6ed2a6d92b1e7fe9c5eb35e3de743e23bd75652528764f490d50cbadd13a04777a3f661750fc3eaa427eb1e07681a044f",
"@unrs/resolver-binding-linux-riscv64-musl@npm:1.12.2": "fd8f949612d44b41ae5260118983be4aed2998fcb81b42013dbb0bb8634ab85264b0b1860514ddd8c01683c4c513732bd8aefb75e49e034e92df61fadf8be2c6",
"@unrs/resolver-binding-linux-s390x-gnu@npm:1.12.2": "d1ae887fe782f825761003ea85217b708638529497a12f5875b118cf32217bd4a007d00714b974f6e9804093804937450e7be4d68212e623cc72cbdae9264ad8",
"@unrs/resolver-binding-linux-x64-gnu@npm:1.12.2": "653659c368174083a618dd6cdb09318c8c806329c25dd2ae81383ef7ac0f61220184ca69cf144c3c394211984bfb6830c9532b45d17a06c898d827a0f29a4c56",
"@unrs/resolver-binding-linux-x64-musl@npm:1.12.2": "16a73bbf88a74b29299acb43a821a67fef1a4165441747f2839e7335f2195f471cbe037d87efc5ee78f9e1e4ed80ea3ef46ced8072889490063a2eed816eb1e6",
"@unrs/resolver-binding-openharmony-arm64@npm:1.12.2": "47a1601c755887ef36aabea87405c867f192ff3aa9dc998a0c374df7ede415ddfd73c39b2f6a39f6f2a65bc71de50c629baacffcb5420a705bcd777d1b4863f0",
"@unrs/resolver-binding-wasm32-wasi@npm:1.12.2": "323b8cdd6aac5653784292c3e3a016263e5080b5ccd9f48fd0131c0769f35ec67024485c4062abb26e450091db00afc95c82cd9ad58ab0b1c56f7be60d034266",
"@unrs/resolver-binding-win32-arm64-msvc@npm:1.12.2": "ef9d756441026e667f819da9518a2d88ffa01d73c5c42dbefa12e8c41de26a8f4404aee1faad44f4b8baed7186b3896ddc99fd4f1622c25a4a2112cdddd9b238",
"@unrs/resolver-binding-win32-ia32-msvc@npm:1.12.2": "1172c46be7ddb3ceace1758b31ecb2e29d82ca06b9035f36310108b47dbb84bab8b85297382e65e49510af52ae18d8bdbf916590de6104cf4f6d818436cff0ee",
"@unrs/resolver-binding-win32-x64-msvc@npm:1.12.2": "a16d3add7d4171c6fc4ac0a54c662b6f44475575e7af7346457b46ee03670812c829665b7dc8633eb982a90a074c36e2e775c103b0590710b72f9384588780d3",
"lightningcss-android-arm64@npm:1.32.0": "119b578a5ce59674c45fe8dc269fdb2770d678571e7fd3f7eca763807d15542689d01f75f2836e1aa49b9ddd0caa7ab3a5301bb23b39418eaeba1efab3e85975",
"lightningcss-darwin-arm64@npm:1.32.0": "55010ae8ee7aac61da41fbc81992e11b1ca386087bb8493deb1014ea90c2deeef1b4126621722aa5b8a1aeee039ec7e3b1b9f7779d128963d6e436743f5d23aa",
"lightningcss-darwin-x64@npm:1.32.0": "dd74c964c85c93842576f8caaf6c31ea273545e2f39f931716fed7700668f30d7ca92516197913ded19d836f6ff1876a91cca008125f097e254c98177e67bf86",
"lightningcss-freebsd-x64@npm:1.32.0": "29b43c1a450171da1dece9ba2a13a6dc0866178e46fa51a8cf050fe9562eb81b45f8580a3aeaf2ac97fb2fd381d8cb88d950e701774c8d012e72a355df7ac264",
"lightningcss-linux-arm-gnueabihf@npm:1.32.0": "783e6f8bba55ffd585f17229e97056c370ed834e0123d0002884b51a7fb54d6807e97076726fd0bfd949396134983e21a0aace0d4f69b916994db679a0d8a360",
"lightningcss-linux-arm64-gnu@npm:1.32.0": "d694a6148f86d20e23b0806e8c6366de3bfc6927925ad17d226cd86c2ff4f025b1c88ae3d214dea06b45af2aa2d356cf504b1057b2a0a7027b44bfac11dc1f4d",
"lightningcss-linux-arm64-musl@npm:1.32.0": "ad946ead9c3ff13b43818d94426940b50cf1ff3dacd07835b8c50f0d412f64574be3c467410786dfb3524e93bc98fb789ebb73e6de845ceb1729fceb5296fe6f",
"lightningcss-linux-x64-gnu@npm:1.32.0": "183d5cda546283523761f606032596d70383d6fd153cfca56ab348d551ef06394ee009fae7818b0732de10d9d0ee27db483cbc7e0d0899305a37a118504d609e",
"lightningcss-linux-x64-musl@npm:1.32.0": "67079567d13d5464a2556630dcbcbb8ccd0e3188d56b0a732c651930a823a708b91faa067256a15be6f289f07f1b57ca433d38ad397a9a102fbb85d0b85b5ea0",
"lightningcss-win32-arm64-msvc@npm:1.32.0": "6117fdfb4ef1c2d8054fb469659e406ae32adae9dc712e2e5ed3f813bf25a52f0954911e92a5d397aeeba7151bafb3370dfc50504b94e719f4018de7d3cc3687",
"lightningcss-win32-x64-msvc@npm:1.32.0": "f4a917eebae4f3718eaa4d3a16e268a42f117180e6bda101b380939f6738d2754dbb69bd454ee412bbc6e6290e2d8446c5f6ee3a63b144c9bd6f40a93109b7ab"
}

View file

@ -0,0 +1,15 @@
diff --git a/package.json b/package.json
index cb439a93b1..4258f9f93f 100644
--- a/package.json
+++ b/package.json
@@ -3,9 +3,8 @@
"private": true,
"license": "GPL-3.0",
"workspaces": [
- "applications/*",
+ "applications/authenticator",
"applications/lumo/src/app/lib/lumo-api-client",
- "applications/pass-desktop/native",
"packages/*",
"packages/wasm/*",
"packages/pass/docs/starlight",

View file

@ -1,62 +1,105 @@
{
lib,
stdenvNoCC,
fetchurl,
autoPatchelfHook,
dpkg,
glib-networking,
stdenv,
fetchFromGitHub,
rustPlatform,
cargo-tauri,
nodejs_24,
yarn-berry_4,
pkg-config,
wrapGAppsHook4,
glib-networking,
libsoup_3,
webkitgtk_4_1,
python3,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
let
pname = "proton-authenticator";
version = "1.1.6";
nodejs = nodejs_24;
yarn-berry = yarn-berry_4.override { inherit nodejs; };
src = fetchurl {
url = "https://proton.me/download/authenticator/linux/ProtonAuthenticator_${finalAttrs.version}_amd64.deb";
hash = "sha256-jHtqBdGE9+Kz5sjPMrCDnHKX0NLscO5Dp4pYYE8L2iU=";
src = fetchFromGitHub {
owner = "ProtonMail";
repo = "WebClients";
rev = "proton-authenticator@${version}";
hash = "sha256-Zd3cSkzRBDnLNY2sM7EXWCX6F6+ePOpslnEroludzag=";
};
dontConfigure = true;
dontBuild = true;
in
rustPlatform.buildRustPackage (finalAttrs: {
strictDeps = true;
__structuredAttrs = true;
inherit pname version src;
sourceRoot = "${src.name}";
cargoHash = "sha256-bkjjwwSizj/ltY3ISPKEL6rvg37RaDf/Ou7a7jYS47I=";
cargoRoot = "applications/authenticator/src-tauri";
buildAndTestSubdir = finalAttrs.cargoRoot;
nativeBuildInputs = [
dpkg
autoPatchelfHook
cargo-tauri.hook
nodejs
yarn-berry
yarn-berry.yarnBerryConfigHook
wrapGAppsHook4
pkg-config
(python3.withPackages (ps: [ ps.setuptools ]))
];
buildInputs = [
buildInputs = lib.optionals stdenv.hostPlatform.isLinux [
glib-networking
libsoup_3
webkitgtk_4_1
];
installPhase = ''
runHook preInstall
patches = [
# It disables scripts (not needed for proton-authenticator workspace).
./disable-scripts.patch
./package.json.patch
];
install -Dm755 usr/bin/proton-authenticator $out/bin/${finalAttrs.meta.mainProgram}
cp -r usr/share $out
# The original yarn.lock contains references to private registries.
# How to generate a new yarn.lock:
# 1. Delete the original yarn.lock.
# 2. Apply the patch `package.json.patch`.
# 3. Run `export SENTRYCLI_SKIP_DOWNLOAD=1`, `yarn workspaces focus proton-authenticator --production` and then `yarn install` into the repository directory.
# 4. Generate a new `missing-hashes.json` file by running `nix run nixpkgs#yarn-berry_4.yarn-berry-fetcher -- missing-hashes yarn.lock > missing-hashes.json`.
# 5. Move the generated `yarn.lock` and `missing-hashes.json` files into this directory.
yarnLock = ./yarn.lock;
missingHashes = ./missing-hashes.json;
offlineCache = yarn-berry.fetchYarnBerryDeps {
inherit (finalAttrs) src missingHashes yarnLock;
runHook postInstall
hash = "sha256-FiDuAwEj/AIH/lJRLyuNPvthcoynsFGcUYZyx7DMnFA=";
};
postUnpack = ''
cp --no-preserve=all ${./yarn.lock} $sourceRoot/yarn.lock
'';
preFixup = ''
gappsWrapperArgs+=(
--prefix GIO_EXTRA_MODULES : "${glib-networking}/lib/gio/modules"
--set WEBKIT_DISABLE_COMPOSITING_MODE 1
)
'';
tauriBuildFlags = [
"--no-sign"
];
meta = {
description = "Two-factor authentication manager with optional sync";
description = "Two-factor authentication manager with optional sync (built from source)";
longDescription = ''
This package builds proton-authenticator from source.
Changed: proton-authenticator is now source-compiled by default.
For the pre-built binary version, use proton-authenticator-bin instead.
'';
homepage = "https://proton.me/authenticator";
license = lib.licenses.unfree; # source not yet published
license = lib.licenses.gpl3;
maintainers = with lib.maintainers; [
felschr
demic-dev
pbek
];
platforms = [ "x86_64-linux" ];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
platforms = lib.platforms.darwin ++ lib.platforms.linux;
mainProgram = "proton-authenticator";
};
})

File diff suppressed because it is too large Load diff

View file

@ -8,14 +8,14 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "pykickstart";
version = "3.74";
version = "3.75";
pyproject = true;
src = fetchFromGitHub {
owner = "pykickstart";
repo = "pykickstart";
tag = "r${finalAttrs.version}";
hash = "sha256-Kjn9cELSCd+vEdqIZbJNBqC0rHLypkfhfBCfS+WEyGk=";
hash = "sha256-3tQ5tXUx2L3I0SyxVKgNRFv0AwYeG88vZOdSZDxj1Ks=";
};
build-system = with python3Packages; [

View file

@ -58,7 +58,7 @@ stdenv.mkDerivation {
homepage = "https://zdl.vectec.net";
license = lib.licenses.gpl3Only;
inherit (libsForQt5.qtbase.meta) platforms;
maintainers = [ lib.maintainers.azahi ];
maintainers = [ ];
mainProgram = "zdl";
};
}

View file

@ -24,18 +24,17 @@ assert lib.assertOneOf "displayServer" displayServer [
rustPlatform.buildRustPackage (finalAttrs: {
pname = "ringboard" + lib.optionalString (displayServer == "wayland") "-wayland";
# release version needs nightly, so we use a custom tree, see:
# https://github.com/SUPERCILEX/clipboard-history/issues/22#issuecomment-3676256971
version = "0.16.2-unstable-2026-05-10";
version = "0.17.0";
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "SUPERCILEX";
repo = "clipboard-history";
rev = "0719d4398034efa32c3f093e06a2fdb033afbc22";
hash = "sha256-/LDxZ3bsuVwMiRzLTuLIs6y7jAS/84sXhTRhovXV8zM=";
tag = finalAttrs.version;
hash = "sha256-qLYQeZTrtUUn4JSzK3SX687xV4FO6h7GshVdQi8Qkbk=";
};
cargoHash = "sha256-ARSvWjeVWXksZ27lRJn67wXpgr8epagflOAULKmYaQ8=";
cargoHash = "sha256-T65TxIes0171uDxDE72SnFeRVAgw5FR2z6yTcmH3Z6k=";
nativeBuildInputs = [
makeWrapper
@ -103,13 +102,13 @@ rustPlatform.buildRustPackage (finalAttrs: {
passthru = {
tests.nixos = nixosTests.ringboard;
updateScript = nix-update-script { extraArgs = [ "--version=branch=stable" ]; };
updateScript = nix-update-script { };
};
meta = {
description = "Fast, efficient, and composable clipboard manager for Linux";
homepage = "https://github.com/SUPERCILEX/clipboard-history";
changelog = "https://github.com/SUPERCILEX/clipboard-history/releases/tag/${finalAttrs.version}";
changelog = "https://github.com/SUPERCILEX/clipboard-history/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.asl20;
platforms = lib.platforms.linux;
maintainers = [ lib.maintainers.magnetophon ];

View file

@ -23,13 +23,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "rpi-imager";
version = "2.0.9";
version = "2.0.10";
src = fetchFromGitHub {
owner = "raspberrypi";
repo = "rpi-imager";
tag = "v${finalAttrs.version}";
hash = "sha256-hoypze5EyJKRVQNI8x5sh3LqVyK8tEze1/vxogrqckA=";
hash = "sha256-k6ld7TWCj8JzLJG9ph7hKXvR1nkHt0fJqlGSs+NqnR0=";
};
patches = [ ./remove-vendoring.patch ];

View file

@ -11,14 +11,14 @@
}:
python3.pkgs.buildPythonApplication (finalAttrs: {
pname = "sbomnix";
version = "1.7.6";
version = "1.8.0";
pyproject = true;
src = fetchFromGitHub {
owner = "tiiuae";
repo = "sbomnix";
tag = "v${finalAttrs.version}";
hash = "sha256-LApJvPeyViGJiJPLu7dFBU79SbMKieLVFKbDtFHo7f4=";
hash = "sha256-oMIFcfjbt+lgAcdJbA64opu1qCwUVUIEukotqQEox3Q=";
# Remove documentation as it contains references to nix store
postFetch = ''

View file

@ -12,11 +12,11 @@
tcl.mkTclDerivation rec {
pname = "scid-vs-pc";
version = "4.26";
version = "4.27";
src = fetchurl {
url = "mirror://sourceforge/scidvspc/scid_vs_pc-${version}.tgz";
hash = "sha256-iK4h7YS8+W2nr3Bbmai4Ervt0YWYKgkQaZ5IH7Q9HkE=";
hash = "sha256-DivCF3yCHmGyps7PTU1xKcdG+oBegD/ntMst9rOr0TU=";
};
postPatch = ''

View file

@ -9,7 +9,7 @@
}:
buildGoModule (finalAttrs: {
pname = "seaweedfs";
version = "4.34";
version = "4.36";
src = fetchFromGitHub {
owner = "seaweedfs";
@ -22,10 +22,10 @@ buildGoModule (finalAttrs: {
find "$out" -name .git -print0 | xargs -0 rm -rf
popd
'';
hash = "sha256-lKpNBdiynDEnqCujgDRFUXvyVops4Q5l6n9P/7pm8hc=";
hash = "sha256-y42opbGNVMxWU/k0j5g27RWLBF0PLcOPlXU9eVg0jwY=";
};
vendorHash = "sha256-MF8aLFKUFq0io7CL1EGZp+TUB2co/Hf0fwK2wZybx8Y=";
vendorHash = "sha256-peRhKuZ1D+y8Uhw1+P8Ogc1HrOh1/kYVd29lR89+rIo=";
nativeBuildInputs = [ installShellFiles ];

View file

@ -6,7 +6,7 @@
}:
let
version = "5.1.4";
version = "5.1.10";
in
(ffmpeg-headless.override {
@ -17,8 +17,8 @@ in
source = fetchFromGitHub {
owner = "Servarr";
repo = "FFmpeg";
rev = "e9230b4c9027435dd402a68833f144643a3df43a";
hash = "sha256-oMIblMOnnYpKvYeleCZpFZURGVc3fDAlYpOJu+u7HkU=";
rev = "9eecad42d64ab888b9bb366df998b5b7cac0e2bc";
hash = "sha256-8qXQIbBNFRX3HsEHD2m4STHyxALqTSoIkKrVLc6vX/4=";
};
buildFfmpeg = false;

View file

@ -21,7 +21,7 @@
applyPatches,
}:
let
version = "4.0.17.2952";
version = "4.0.18.2971";
# The dotnet8 compatibility patches also change `yarn.lock`, so we must pass
# the already patched lockfile to `fetchYarnDeps`.
src = applyPatches {
@ -29,7 +29,7 @@ let
owner = "Sonarr";
repo = "Sonarr";
tag = "v${version}";
hash = "sha256-nOpCKQqX6lHBcLtIC18CZ0nCrhXTjpEPcO0L2/kcNEo=";
hash = "sha256-83qbbBNk42KjKZNvYaAINoWZa3uEgaV0eveGl9dKTd8=";
};
postPatch = ''
mv src/NuGet.Config NuGet.Config

View file

@ -6,13 +6,17 @@
nixosTests,
systemd,
autoPatchelfHook,
jdk25_headless,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "unifi-controller";
version = "10.4.57";
# see https://community.ui.com/releases / https://www.ui.com/download/unifi
# See https://community.ui.com/releases or https://www.ui.com/download/unifi.
#
# When upgrading, make sure we don't need to bump `passthru.jrePackage` below
# as well.
src = fetchurl {
url = "https://dl.ui.com/unifi/${finalAttrs.version}/unifi_sysvinit_all.deb";
hash = "sha256-/DeM+M0r7D0zS/e3Lqv80YYeX65nucFnNUcRMhBbIHI=";
@ -36,7 +40,13 @@ stdenvNoCC.mkDerivation (finalAttrs: {
runHook postInstall
'';
passthru.tests = { inherit (nixosTests) unifi; };
passthru = {
jrePackage = jdk25_headless;
tests = {
inherit (nixosTests) unifi;
};
};
meta = {
homepage = "https://www.ui.com";

View file

@ -61,7 +61,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
meta = {
description = "Unified tool for managing your Upsun services from the command line";
homepage = "https://github.com/platformsh/cli";
homepage = "https://github.com/upsun/cli";
license = lib.licenses.mit;
mainProgram = "upsun";
maintainers = with lib.maintainers; [ spk ];

View file

@ -1,18 +1,18 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl jq
#!nix-shell -i bash -p curl jq nix
#shellcheck shell=bash
set -eu -o pipefail
version=$(curl -s ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} \
https://api.github.com/repos/platformsh/cli/releases/latest | jq -e -r ".tag_name")
https://api.github.com/repos/upsun/cli/releases/latest | jq -e -r ".tag_name" | sed 's/^v//')
linux_arm64_url=https://github.com/platformsh/cli/releases/download/$version/upsun_${version}_linux_arm64.tar.gz
linux_amd64_url=https://github.com/platformsh/cli/releases/download/$version/upsun_${version}_linux_amd64.tar.gz
darwin_all_url=https://github.com/platformsh/cli/releases/download/$version/upsun_${version}_darwin_all.tar.gz
linux_arm64_hash=$(nix --extra-experimental-features nix-command hash to-sri --type sha256 $(nix-prefetch-url --type sha256 "$linux_arm64_url"))
linux_amd64_hash=$(nix --extra-experimental-features nix-command hash to-sri --type sha256 $(nix-prefetch-url --type sha256 "$linux_amd64_url"))
darwin_all_hash=$(nix --extra-experimental-features nix-command hash to-sri --type sha256 $(nix-prefetch-url --type sha256 "$darwin_all_url"))
linux_arm64_url=https://github.com/upsun/cli/releases/download/v$version/upsun_${version}_linux_arm64.tar.gz
linux_amd64_url=https://github.com/upsun/cli/releases/download/v$version/upsun_${version}_linux_amd64.tar.gz
darwin_all_url=https://github.com/upsun/cli/releases/download/v$version/upsun_${version}_darwin_all.tar.gz
linux_arm64_hash=$(nix store prefetch-file --json "$linux_arm64_url" | jq -r .hash)
linux_amd64_hash=$(nix store prefetch-file --json "$linux_amd64_url" | jq -r .hash)
darwin_all_hash=$(nix store prefetch-file --json "$darwin_all_url" | jq -r .hash)
jq -n \
--arg version "$version" \
--arg darwin_all_hash "$darwin_all_hash" \

View file

@ -1,19 +1,19 @@
{
"version": "5.9.0",
"version": "5.10.7",
"darwin-amd64": {
"hash": "sha256-B1F+01ltzErGujECC1CM8tPRuVMUOIkcKSpypqlRG2M=",
"url": "https://github.com/platformsh/cli/releases/download/5.9.0/upsun_5.9.0_darwin_all.tar.gz"
"hash": "sha256-EczhSmIDcG7K8L+BtOOHRT1cmvsB86IvkSWa3A5bwjk=",
"url": "https://github.com/upsun/cli/releases/download/v5.10.7/upsun_5.10.7_darwin_all.tar.gz"
},
"darwin-arm64": {
"hash": "sha256-B1F+01ltzErGujECC1CM8tPRuVMUOIkcKSpypqlRG2M=",
"url": "https://github.com/platformsh/cli/releases/download/5.9.0/upsun_5.9.0_darwin_all.tar.gz"
"hash": "sha256-EczhSmIDcG7K8L+BtOOHRT1cmvsB86IvkSWa3A5bwjk=",
"url": "https://github.com/upsun/cli/releases/download/v5.10.7/upsun_5.10.7_darwin_all.tar.gz"
},
"linux-amd64": {
"hash": "sha256-J8A4h39dEgMAJHKLwmgWBsj4Al9STIccUAal6JctPyQ=",
"url": "https://github.com/platformsh/cli/releases/download/5.9.0/upsun_5.9.0_linux_amd64.tar.gz"
"hash": "sha256-SF9GkeQlh9jdONO24zQ7LC6419txRXyl+x4q0Gfvntk=",
"url": "https://github.com/upsun/cli/releases/download/v5.10.7/upsun_5.10.7_linux_amd64.tar.gz"
},
"linux-arm64": {
"hash": "sha256-gyVqD4cBYo6L1Y0xMLl06WK4/sKvudFXLiqvEmcrRPE=",
"url": "https://github.com/platformsh/cli/releases/download/5.9.0/upsun_5.9.0_linux_arm64.tar.gz"
"hash": "sha256-F8YfXhTd0fU75InxLgZ02hrLrx3ELDhkRpRvYNrRGu4=",
"url": "https://github.com/upsun/cli/releases/download/v5.10.7/upsun_5.10.7_linux_arm64.tar.gz"
}
}

View file

@ -29,6 +29,6 @@ buildGoModule (finalAttrs: {
mainProgram = "webhook";
homepage = "https://github.com/adnanh/webhook";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ azahi ];
maintainers = [ ];
};
})

View file

@ -7,14 +7,14 @@
python3Packages.buildPythonApplication (finalAttrs: {
pname = "zapzap";
version = "6.5.2.1";
version = "6.5.2.4";
pyproject = true;
src = fetchFromGitHub {
owner = "rafatosta";
repo = "zapzap";
tag = finalAttrs.version;
hash = "sha256-6W4Crf3zNRLOvBqnM6K9r2u8Z/lF4JnEse0ctMM+1m4=";
hash = "sha256-yig3goxiq/84RtuyRe97ZbzwDVJP5nTYpFQfR2YNvVE=";
};
nativeBuildInputs = [

View file

@ -62,7 +62,6 @@ stdenv.mkDerivation (finalAttrs: {
];
platforms = lib.platforms.unix;
maintainers = with lib.maintainers; [
azahi
lassulus
Gliczy
r4v3n6101

View file

@ -30,13 +30,13 @@ backendStdenv.mkDerivation (finalAttrs: {
# NOTE: Depends on the CUDA package set, so use cudaNamePrefix.
name = "${cudaNamePrefix}-${finalAttrs.pname}-${finalAttrs.version}";
pname = "nccl-tests";
version = "2.18.5";
version = "2.19.1";
src = fetchFromGitHub {
owner = "NVIDIA";
repo = "nccl-tests";
rev = "v${finalAttrs.version}";
hash = "sha256-XH5/hS1oy1V8w4nIx7+RRaiUrOIPDGwLSFpVKSnOOJE=";
hash = "sha256-eRwIl646ndISFttjG5nPqsXfPVmInABNIsphhh5I0wM=";
};
postPatch = ''

View file

@ -467,7 +467,7 @@ stdenv.mkDerivation (
hash = "sha256-ulB5BujAkoRJ8VHou64Th3E94z6m+l6v9DpG7/9nYsM=";
})
]
++ optionals (lib.versionOlder version "7.1.1") [
++ optionals (lib.versionOlder version "7.1.1" && lib.versions.major version != "5") [
(fetchpatch2 {
name = "texinfo-7.1.patch";
url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/4d9cdf82ee36a7da4f065821c86165fe565aeac2";

View file

@ -19,13 +19,13 @@
buildDunePackage (finalAttrs: {
pname = "caqti";
version = "2.3.1";
version = "2.3.2";
minimalOCamlVersion = "4.08";
src = fetchurl {
url = "https://github.com/paurkedal/ocaml-caqti/releases/download/v${finalAttrs.version}/caqti-v${finalAttrs.version}.tbz";
hash = "sha256-A2OAoPGmfgnQAsxH8sscUuv098ybiepbcM7Ds4nOKY0=";
hash = "sha256-j2wXJLWawipcZXyeU7mhcG457NRi6ClYsM6ojkPwq6c=";
};
buildInputs = [ dune-site ];

View file

@ -12,13 +12,13 @@
buildOctavePackage rec {
pname = "audio";
version = "2.0.11";
version = "2.0.12";
src = fetchFromGitHub {
owner = "gnu-octave";
repo = "octave-audio";
tag = "release-${version}";
sha256 = "sha256-Qy9It6IiLJTvTlet3L/EP7qL58U0AUKHilmSKa2nATU=";
sha256 = "sha256-DO7tNnYIJME08u8Kxbgkq8D4ZT0dvxiqK2deJEWmCyU=";
};
nativeBuildInputs = [

View file

@ -16,36 +16,36 @@
}:
let
version = "0.21.0";
version = "0.30.0";
hashes = {
"aarch64-darwin" = {
platform = "darwin-arm64";
hash = {
"8.1" = "sha256-BL4XH7oyZBmZThhfdaqwtArxjF+0CKYYIqxRBafhjCI=";
"8.2" = "sha256-CDNSwdU+/7STdSzZigzq0qc58s2Tz0GtKsXnXpQodic=";
"8.3" = "10cDKh5aXhUN8bONZAXKr8o7UMlngYCXmqD829Ht3oU=";
"8.4" = "sha256-t2cNqYl4U4qDmpK6+4iFKmAAd2D66EJqzt+5l1gB0wg=";
"8.5" = "JBitKlONDaXsDW1wf08JqDbado8Fy+uVzYU9Lvi8fFc=";
"8.1" = "sha256-71TLrF9HvuocMLei89bGIibJIC1sD59RB9Vb6FBS49U=";
"8.2" = "sha256-WFrJ0+gun1qs77s3URFTha/tZA8gSeqlGLT26twnjko=";
"8.3" = "fiduW1NKScDDY3k3lvw98r8KqaD0jPR4En8dNvdglFA=";
"8.4" = "sha256-SQ9+/zD6n49e2/9nH6hotyIJ/xsQMX5A78hFTPK4/hg=";
"8.5" = "+n+fE5soEbruH+L35B+bapU/Z7rSjjOD/4BgRmr3MVc=";
};
};
"aarch64-linux" = {
platform = "debian-aarch64+libssl3";
hash = {
"8.1" = "sha256-I0gMRnN3y/57f0IBNDx5TaFtdFnFmotaqI8vnwGwxqg=";
"8.2" = "sha256-gsk/Kz/zJUXGFubfnQ7wia/5JEHgrIoTM396QpX5YaE=";
"8.3" = "sha256-6+ALZru+ee4lE41bKd06bnSqqTZ1FlcNVW4xOAWZP4g=";
"8.4" = "fYWndjBhKQQjFUwT0aP4A6EUkNCYsEvKtUcXR9l11Yg=";
"8.5" = "0UEvha64GSG/Mysc7oUJ6GMmY1uRZxN/gCkkNzWq/ng=";
"8.1" = "sha256-hetG8fEmMJccYWMQwPb3hml5thNeY2L6Y4gCDQmbDlo=";
"8.2" = "sha256-HufvcT4QSkuoxDcaCWD+hmG1fORyTUBh1Vsfnv7krng=";
"8.3" = "sha256-LV4coud7YNqB+s1sHoKXNVLAUrLjDMDpulS9fGVXDsg=";
"8.4" = "em1nZgGD1fAtvMxVeJBU4RZaA71/qMVLi0KCRAbilpM=";
"8.5" = "d0f3PzvZZn1KmXy1Gm0gm5f3f58kt+/LTc3yWZqto2I=";
};
};
"x86_64-linux" = {
platform = "debian-x86-64+libssl3";
hash = {
"8.1" = "sha256-g5H+3q0ehto/Ug87nb69quiWfR+AhZD5RdrYKl9fmU8=";
"8.2" = "sha256-pUAACcw24DuTDla0L375P+iPhZ/ttlMU2rnQKF6WU8k=";
"8.3" = "sha256-kKF7+zs0WXaMNh7rYUBrg+VixK+AEn3b65EtQiQpJUA=";
"8.4" = "FMYVQ2LDOWnmjkj5UdogwRB4q6NZqebUivbDmAjBONg=";
"8.5" = "T4RL15DJ/rkFLMCXiK7/2PD62LUkrlqFeLwDu1F7Ev0=";
"8.1" = "sha256-La/TQDnQ0hqNhPMtLlwfw5cKtXCpjxBMTd6yvZM2O2M=";
"8.2" = "sha256-+FavbnliF071lWFU55rhFNq6X2wpW9mHSstwQQTbnwQ=";
"8.3" = "sha256-G6nfKMObVMtY45J7DaKg0LdHwV+lfCUa1Pkfp66+apY=";
"8.4" = "x9YXGxtqN3EL1lWCqAkIKKrO0b40BFalO6GExhF3p4c=";
"8.5" = "8hU5Ft9i3L6pf2XY7rRLmSbQmZ3z1wjI+7sjiq/GHUU=";
};
};
};

View file

@ -32,7 +32,7 @@
buildPythonPackage (finalAttrs: {
pname = "ansible-core";
version = "2.21.0";
version = "2.21.1";
pyproject = true;
disabled = pythonOlder "3.12";
@ -41,7 +41,7 @@ buildPythonPackage (finalAttrs: {
owner = "ansible";
repo = "ansible";
tag = "v${finalAttrs.version}";
hash = "sha256-I0XEEGyTMQMpGTApbzVzHRuRAALl+C28GfpW4CeeTIA=";
hash = "sha256-VTU+jhD5W+07FIPVpovQoHjCb4vhLdPZNxCm/MVofV8=";
};
postPatch = ''

View file

@ -24,7 +24,7 @@
let
pname = "ansible";
version = "13.7.0";
version = "14.0.0";
in
buildPythonPackage {
inherit pname version;
@ -32,7 +32,7 @@ buildPythonPackage {
src = fetchPypi {
inherit pname version;
hash = "sha256-68pYmDRpY2kZFb/qGQSPUBm05G9X6FbcG3kLzeN2kiQ=";
hash = "sha256-A825R3sevpMMkhKhLQkmx81GsYd8UEcJFXuM14dvwIM=";
};
# we make ansible-core depend on ansible, not the other way around,

View file

@ -15,14 +15,14 @@
buildPythonPackage rec {
pname = "coinbase-advanced-py";
version = "1.8.3";
version = "1.8.4";
pyproject = true;
src = fetchFromGitHub {
owner = "coinbase";
repo = "coinbase-advanced-py";
tag = "v${version}";
hash = "sha256-iGSe0OSCrmglaVzzJOIWwoz9DXLIE82EqK9R2QiTEUw=";
hash = "sha256-kr2S6oB5H/SpmZgcK+dAJyMijp5OdxLszTbc6yAcX6I=";
};
build-system = [

View file

@ -13,14 +13,14 @@
buildPythonPackage (finalAttrs: {
pname = "genai-prices";
version = "0.0.66";
version = "0.0.67";
pyproject = true;
src = fetchFromGitHub {
owner = "pydantic";
repo = "genai-prices";
tag = "v${finalAttrs.version}";
hash = "sha256-bvAAdlijxRzgjEeZEibuywJXhxKBWWQVPzO8gr6dWzo=";
hash = "sha256-MIWUpPHunKGKSLn/gDWWDseDVqqd2dll5aprMo5kcaQ=";
};
sourceRoot = "${finalAttrs.src.name}/packages/python";

View file

@ -13,13 +13,13 @@
buildPythonPackage (finalAttrs: {
pname = "google-cloud-run";
version = "0.16.0";
version = "0.16.1";
pyproject = true;
src = fetchPypi {
pname = "google_cloud_run";
inherit (finalAttrs) version;
hash = "sha256-1Sz05q03Aq5Iysz2q8q1Q6/ub2HCpux1PMYqMeW2KfE=";
hash = "sha256-Vov3/Ouo+ESjm2mFio5kL2zKJ+q3JGxiHZ00HCibEVg=";
};
build-system = [ setuptools ];

View file

@ -8,13 +8,13 @@
buildPythonPackage (finalAttrs: {
pname = "jianpu-ly";
version = "1.869";
version = "1.870";
pyproject = true;
src = fetchPypi {
inherit (finalAttrs) version;
pname = "jianpu_ly";
hash = "sha256-xTownx9NOAzQtXsuhgzzqqt+GvT2IYIxwCvZfDnIPeg=";
hash = "sha256-1jhMoHqEkkuSrWzJ3yu/iPA9l29c0xTYN1/Mqaf8TdM=";
};
build-system = [ setuptools ];

View file

@ -35,6 +35,6 @@ buildPythonPackage rec {
homepage = "https://github.com/didix21/mdutils";
changelog = "https://github.com/didix21/mdutils/releases/tag/${src.tag}";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.azahi ];
maintainers = [ ];
};
}

View file

@ -13,14 +13,14 @@
buildPythonPackage rec {
pname = "py-synologydsm-api";
version = "2.7.3";
version = "2.10.0";
pyproject = true;
src = fetchFromGitHub {
owner = "mib1185";
repo = "py-synologydsm-api";
tag = "v${version}";
hash = "sha256-LaeqAY+8WfoMwrZhwZUEcuafGvv+7reuxEh8zQ7j5S4=";
hash = "sha256-zcyeLiy52E8vMVmF5hVJ4rX98RAyI9ZC6WQWJZ2HRIU=";
};
build-system = [ setuptools ];

View file

@ -21,7 +21,7 @@
}:
buildPythonPackage (finalAttrs: {
pname = "quack-kernels";
version = "0.5.2";
version = "0.5.3";
pyproject = true;
__structuredAttrs = true;
@ -29,7 +29,7 @@ buildPythonPackage (finalAttrs: {
owner = "Dao-AILab";
repo = "quack";
tag = "v${finalAttrs.version}";
hash = "sha256-iIINpP6teFPQFvxwfDYLPhIOFSqw3A6Nita/FjVFiBM=";
hash = "sha256-L6kReIaCTVxJPYkkYn5aCXCChAsaxn/ikcBHTHzDmgs=";
};
build-system = [

View file

@ -17,7 +17,7 @@ let
in
buildPythonPackage rec {
pname = "reportlab";
version = "4.5.1";
version = "5.0.0";
pyproject = true;
# See https://bitbucket.org/pypy/compatibility/wiki/reportlab%20toolkit
@ -25,7 +25,7 @@ buildPythonPackage rec {
src = fetchPypi {
inherit pname version;
hash = "sha256-n99o9N6RcexmrLSl/u2PjKKvQ0eecHpvuw2qddiOVJQ=";
hash = "sha256-5ElKDGYjriE7uFb7pSMXGytUp79in9oC1eUlp7iZp4Q=";
};
postPatch = ''

View file

@ -30,7 +30,10 @@ buildPythonPackage rec {
hash = "sha256-hX6HQQFOxQFfegCq+13Mu1Y3jvTB2lWoKNRLz1/zrNs=";
};
pythonRelaxDeps = [ "packaging" ];
pythonRelaxDeps = [
"packaging"
"reportlab"
];
outputs = [
"out"

View file

@ -10,14 +10,14 @@
buildPythonPackage rec {
pname = "wagtail-modeladmin";
version = "2.3.0";
version = "2.4.0";
pyproject = true;
src = fetchFromGitHub {
owner = "wagtail-nest";
repo = "wagtail-modeladmin";
tag = "v${version}";
hash = "sha256-JA5Me7EcdfCPMhGKgydExV/hkzisFMg7KQWnuVrfzD4=";
hash = "sha256-Rj5I39Fx+BNXcpGTO3AUr8MfZu2FwkdH/1HMruva11A=";
};
# Fail with `AssertionError`

View file

@ -31,6 +31,10 @@ buildPythonPackage rec {
setuptools
];
pythonRelaxDeps = [
"reportlab"
];
dependencies = [
arabic-reshaper
html5lib

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