Merge master into staging-next

This commit is contained in:
nixpkgs-ci[bot]
2026-06-22 17:40:02 +00:00
committed by GitHub
69 changed files with 1474 additions and 406 deletions
+3 -3
View File
@@ -223,10 +223,10 @@ nixos/modules/installer/tools/nix-fallback-paths.nix @Artturin @Ericson2314 @lo
/pkgs/development/r-modules @jbedo
# Rust
/pkgs/development/compilers/rust @alyssais @Mic92 @winterqt
/pkgs/build-support/rust @winterqt
/pkgs/development/compilers/rust @NixOS/rust @alyssais
/pkgs/build-support/rust @NixOS/rust
/pkgs/build-support/rust/fetch-cargo-vendor* @TomaSajt
/doc/languages-frameworks/rust.section.md @winterqt
/doc/languages-frameworks/rust.section.md @NixOS/rust
# Tcl
/pkgs/development/interpreters/tcl @fgaz
@@ -408,6 +408,8 @@ In case you are patching `package.json` or `pnpm-lock.yaml`, make sure to pass `
}
```
If needed, `dontPnpmConfigure = true;` can be used to fully disable `pnpmConfigHook` without manually removing it from inputs.
#### Dealing with `sourceRoot` {#javascript-pnpm-sourceRoot}
If the pnpm project is in a subdirectory, you can just define `sourceRoot` or `setSourceRoot` for `fetchPnpmDeps`.
+7
View File
@@ -3946,6 +3946,13 @@
githubId = 140968250;
keys = [ { fingerprint = "8321 ED3A 8DB9 99A5 1F3B F80F F268 2914 EA42 DE26"; } ];
};
Br1ght0ne = {
name = "Oleksii Filonenko";
email = "nixpkgs@brightone.cloud";
matrix = "@br1ght0ne:matrix.org";
github = "Br1ght0ne";
githubId = 12615679;
};
br337 = {
email = "brian.porumb@proton.me";
github = "br337";
@@ -18,6 +18,8 @@
- [CastSponsorSkip](https://github.com/gabe565/CastSponsorSkip/), skips YouTube sponsorships (and sometimes ads) on all local Google Cast devices.
- [Stump](https://www.stumpapp.dev/), a free and open source comics, manga and digital book server with OPDS support. Available as [services.stump](#opt-services.stump.enable).
- [FlapAlerted](https://github.com/Kioubit/FlapAlerted), detects BGP flapping events and provides statistics based on BGP update messages. Available as [services.flap-alerted](#opt-services.flap-alerted.enable).
- [Unpackerr](https://unpackerr.zip), extracts downloads for Radarr, Sonarr, Lidarr, Readarr, and/or a Watch folder. Available as [services.unpackerr](#opt-services.unpackerr.enable).
+1
View File
@@ -1798,6 +1798,7 @@
./services/web-apps/stirling-pdf.nix
./services/web-apps/strfry.nix
./services/web-apps/strichliste.nix
./services/web-apps/stump.nix
./services/web-apps/suwayomi-server.nix
./services/web-apps/szurubooru.nix
./services/web-apps/tabbyapi.nix
@@ -340,7 +340,8 @@ in
substitute ${cfg.ui.package}/share/applications/netbird.desktop \
"$out/share/applications/${mkBin "netbird"}.desktop" \
--replace-fail 'Name=Netbird' "Name=NetBird @ ${client.service.name}" \
--replace-fail 'Icon=netbird' "Icon=${cfg.ui.package}/share/pixmaps/netbird.png"
--replace-fail 'Icon=netbird' "Icon=${cfg.ui.package}/share/icons/hicolor/256x256/apps/netbird.png" \
--replace-fail 'Exec=netbird-ui' "Exec=${mkBin "netbird-ui"}"
'')
];
};
@@ -70,10 +70,13 @@ in
ENCRYPTION_KEY = "/run/secrets/pocket-id/encryption-key";
};
description = ''
Environment variables which are loaded from the contents of the specified file paths.
Credentials which are loaded from the contents of the specified file paths.
This can be used to securely store tokens and secrets outside of the world-readable Nix store.
See [PocketID environment variables](https://pocket-id.org/docs/configuration/environment-variables).
See [PocketID environment variables](https://pocket-id.org/docs/configuration/environment-variables) (all with the `_FILE` suffix).
Accepts an attrset mapping from the variable name *without its `_FILE` suffix* to the path on disk.
Alternatively you can use `services.pocket-id.environmentFile` to define all the variables in a single file.
'';
+172
View File
@@ -0,0 +1,172 @@
{
lib,
config,
pkgs,
...
}:
let
cfg = config.services.stump;
inherit (lib)
types
mkIf
mkOption
mkEnableOption
;
secret = types.nullOr (
types.str
// {
# We don't want users to be able to pass a path literal here but
# it should look like a path.
check = it: lib.isString it && lib.types.path.check it;
}
);
in
{
options.services.stump = {
enable = mkEnableOption "Stump";
package = lib.mkPackageOption pkgs "stump" { };
configLocation = mkOption {
type = types.path;
default = "/var/lib/stump";
description = "Directory used to store the database and configuration files. If it is not the default, the directory has to be created manually such that the stump user is able to read and write to it.";
};
environment = mkOption {
type = types.attrsOf types.str;
default = { };
example = {
STUMP_VERBOSITY = "2";
};
description = ''
Extra configuration environment variables. Refer to the [documentation](https://www.stumpapp.dev/docs/guides/configuration/server-config) for options.
'';
};
environmentFile = mkOption {
type = secret;
example = "/run/secrets/stump";
default = null;
description = ''
Path of a file with extra environment variables to be loaded from disk.
This file is not added to the nix store, so it can be used to pass secrets to stump.
Refer to the [documentation](https://www.stumpapp.dev/docs/guides/configuration/server-config) for options.
'';
};
secretFiles = mkOption {
type = types.attrsOf secret;
example = {
STUMP_OIDC_CLIENT_SECRET = "/run/secrets/stump_client_secret";
};
default = { };
description = ''
Attribute set containing paths to files to add to the environment of stump.
The files are not added to the nix store, so they can be used to pass secrets to stump.
Refer to the [documentation](https://www.stumpapp.dev/docs/guides/configuration/server-config) for options.
'';
};
ip = mkOption {
type = types.str;
default = "127.0.0.1";
description = "The IP address that Stump will listen on.";
};
port = mkOption {
type = types.port;
default = 10001;
description = "The port that Stump will listen on.";
};
openFirewall = mkOption {
type = types.bool;
default = false;
description = "Whether to open the Stump port in the firewall";
};
user = mkOption {
type = types.str;
default = "stump";
description = "The user Stump should run as.";
};
group = mkOption {
type = types.str;
default = "stump";
description = "The group stump should run as.";
};
};
config = mkIf cfg.enable {
networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.port ];
services.stump.environment = {
STUMP_IP = cfg.ip;
STUMP_PORT = toString cfg.port;
STUMP_CONFIG_DIR = cfg.configLocation;
};
systemd.services.stump = {
description = "Stump (A free and open source comics, manga and digital book server with OPDS support)";
requires = [ "network-online.target" ];
after = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
environment = cfg.environment;
serviceConfig = {
Type = "simple";
Restart = "on-failure";
RestartSec = 3;
ExecStart =
if cfg.secretFiles == { } then
"${lib.getExe cfg.package}"
else
pkgs.writeShellScript "stump-env" ''
${lib.strings.concatStringsSep "\n" (
lib.attrsets.mapAttrsToList (key: path: "export ${key}=$(< \"${path}\")") cfg.secretFiles
)}
${lib.getExe cfg.package}
'';
EnvironmentFile = cfg.environmentFile;
StateDirectory = "stump";
User = cfg.user;
Group = cfg.group;
# Hardening
CapabilityBoundingSet = "";
NoNewPrivileges = true;
PrivateUsers = true;
PrivateTmp = true;
PrivateDevices = true;
PrivateMounts = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
"AF_UNIX"
"AF_NETLINK" # is used to determine local ip
];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
};
};
users.users = mkIf (cfg.user == "stump") {
stump = {
name = "stump";
group = cfg.group;
isSystemUser = true;
};
};
users.groups = mkIf (cfg.group == "stump") { stump = { }; };
meta.maintainers = with lib.maintainers; [ jvanbruegge ];
};
}
+5 -4
View File
@@ -421,25 +421,25 @@ in
corerad = runTest ./corerad.nix;
corteza = runTest ./corteza.nix;
cosmic = runTest {
imports = [ ./cosmic.nix ];
imports = [ ./cosmic ];
_module.args.testName = "cosmic";
_module.args.enableAutologin = false;
_module.args.enableXWayland = true;
};
cosmic-autologin = runTest {
imports = [ ./cosmic.nix ];
imports = [ ./cosmic ];
_module.args.testName = "cosmic-autologin";
_module.args.enableAutologin = true;
_module.args.enableXWayland = true;
};
cosmic-autologin-noxwayland = runTest {
imports = [ ./cosmic.nix ];
imports = [ ./cosmic ];
_module.args.testName = "cosmic-autologin-noxwayland";
_module.args.enableAutologin = true;
_module.args.enableXWayland = false;
};
cosmic-noxwayland = runTest {
imports = [ ./cosmic.nix ];
imports = [ ./cosmic ];
_module.args.testName = "cosmic-noxwayland";
_module.args.enableAutologin = false;
_module.args.enableXWayland = false;
@@ -1579,6 +1579,7 @@ in
strichliste = runTest ./web-apps/strichliste.nix;
strongswan-swanctl = runTest ./strongswan-swanctl.nix;
stub-ld = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./stub-ld.nix { };
stump = runTest ./web-apps/stump.nix;
stunnel = import ./stunnel.nix { inherit runTest; };
sudo = runTest ./sudo.nix;
sudo-rs = runTest ./sudo-rs.nix;
-147
View File
@@ -1,147 +0,0 @@
{
config,
lib,
testName,
enableAutologin,
enableXWayland,
...
}:
{
name = testName;
meta.maintainers = lib.teams.cosmic.members;
nodes.machine = {
imports = [ ./common/user-account.nix ];
services = {
# For `cosmic-store` to be added to `environment.systemPackages`
# and for it to work correctly because Flatpak is a runtime
# dependency of `cosmic-store`.
flatpak.enable = true;
displayManager.cosmic-greeter.enable = true;
desktopManager.cosmic = {
enable = true;
xwayland.enable = enableXWayland;
};
};
services.displayManager.autoLogin = lib.mkIf enableAutologin {
enable = true;
user = "alice";
};
environment.systemPackages = with config.node.pkgs; [
# These two packages are used to check if a window was opened
# under the COSMIC session or not. Kinda important.
# TODO: Move the check from the test module to
# `nixos/lib/test-driver/src/test_driver/machine.py` so more
# Wayland-only testing can be done using the existing testing
# infrastructure.
jq
lswt
];
# So far, all COSMIC tests launch a few GUI applications. In doing
# so, the default allocated memory to the guest of 1024M quickly
# poses a very high risk of an OOM-shutdown which is worse than an
# OOM-kill. Because now, the test failed, but not for a genuine
# reason, but an OOM-shutdown. That's an inconclusive failure
# which might possibly mask an actual failure. Not enabling
# systemd-oomd because we need said applications running for a
# few seconds. So instead, bump the allocated memory to the guest
# from 1024M to 4x; 4096M.
virtualisation.memorySize = 4096;
};
testScript =
{ nodes, ... }:
let
cfg = nodes.machine;
user = cfg.users.users.alice;
DISPLAY = lib.strings.optionalString enableXWayland (
if enableAutologin then "DISPLAY=:0" else "DISPLAY=:1"
);
emptyPDF = config.node.pkgs.stdenvNoCC.mkDerivation {
name = "empty-pdf";
dontUnpack = true;
nativeBuildInputs = [ config.node.pkgs.imagemagick ];
buildPhase = ''
magick xc:none -page Letter empty.pdf
'';
installPhase = ''
mkdir $out
mv empty.pdf $out/empty.pdf
'';
};
in
''
#testName: ${testName}
''
+ (
if enableAutologin then
''
with subtest("cosmic-greeter initialisation"):
machine.wait_for_unit("graphical.target", timeout=120)
''
else
''
from time import sleep
machine.wait_for_unit("graphical.target", timeout=120)
machine.wait_until_succeeds("pgrep --uid ${toString cfg.users.users.cosmic-greeter.name} --full cosmic-greeter", timeout=30)
# Sleep for 10 seconds for ensuring that `greetd` loads the
# password prompt for the login screen properly.
sleep(10)
with subtest("cosmic-session login"):
machine.send_chars("${user.password}\n", delay=0.2)
''
)
+ ''
# _One_ of the final processes to start as part of the
# `cosmic-session` target is the Workspaces applet. So, wait
# for it to start. The process existing means that COSMIC
# now handles any opened windows from now on.
machine.wait_until_succeeds("pgrep --uid ${toString user.uid} --full 'cosmic-panel-button com.system76.CosmicWorkspaces'", timeout=30)
# The best way to test for Wayland and XWayland is to launch
# the GUI applications and see the results yourself.
with subtest("Launch applications"):
# key: binary_name
# value: "app-id" as reported by `lswt`
gui_apps_to_launch = {}
# We want to ensure that the first-party applications
# start/launch properly.
gui_apps_to_launch['cosmic-edit'] = 'com.system76.CosmicEdit'
gui_apps_to_launch['cosmic-files'] = 'com.system76.CosmicFiles'
gui_apps_to_launch['cosmic-player'] = 'com.system76.CosmicPlayer'
gui_apps_to_launch['cosmic-reader'] = 'com.system76.CosmicReader'
gui_apps_to_launch['cosmic-settings'] = 'com.system76.CosmicSettings'
gui_apps_to_launch['cosmic-store'] = 'com.system76.CosmicStore'
gui_apps_to_launch['cosmic-term'] = 'com.system76.CosmicTerm'
for gui_app, app_id in gui_apps_to_launch.items():
# Don't fail the test if binary is absent
if machine.execute(f"su - ${user.name} -c 'command -v {gui_app}'", timeout=5)[0] == 0:
match gui_app:
case 'cosmic-reader':
opt_arg = '${emptyPDF}/empty.pdf'
case _:
opt_arg = ""
machine.succeed(f"su - ${user.name} -c 'WAYLAND_DISPLAY=wayland-1 XDG_RUNTIME_DIR=/run/user/${toString user.uid} ${DISPLAY} {gui_app} {opt_arg} >&2 &'", timeout=5)
# Nix builds the following non-commented expression to the following:
# `su - alice -c 'WAYLAND_DISPLAY=wayland-1 XDG_RUNTIME_DIR=/run/user/1000 lswt --json | jq ".toplevels" | grep "^ \\"app-id\\": \\"{app_id}\\"$"' `
machine.wait_until_succeeds(f''''su - ${user.name} -c 'WAYLAND_DISPLAY=wayland-1 XDG_RUNTIME_DIR=/run/user/${toString user.uid} lswt --json | jq ".toplevels" | grep "^ \\"app-id\\": \\"{app_id}\\"$"' '''', timeout=60)
machine.succeed(f"pkill {gui_app}", timeout=5)
machine.succeed("echo 'test completed succeessfully' > /${testName}", timeout=5)
machine.copy_from_machine('/${testName}')
machine.shutdown()
'';
}
+168
View File
@@ -0,0 +1,168 @@
{
config,
lib,
testName,
enableAutologin,
enableXWayland,
...
}:
let
user = config.nodes.machine.users.users.alice;
logFilePath = "/home/${user.name}/${testName}";
# Use `writeShellScriptBin` instead of `writeShellScript` so that the
# process name in the journald log appears as 'cosmicTest[$pid]'
cosmicTest = config.node.pkgs.writeShellScriptBin "cosmicTest" ''
exec ${lib.getExe config.node.pkgs.python3Minimal} ${./test-script.py} \
--log-file-path ${logFilePath} \
--cosmic-reader-pdf ${config.node.pkgs.empty-pdf} \
--polkit-agent-helper-path ${config.node.pkgs.polkit.out}/lib/polkit-1/polkit-agent-helper-1 \
--root-user-password ${user.password}
'';
cosmicTestDesktop = config.node.pkgs.makeDesktopItem {
name = "cosmicTest";
desktopName = "COSMIC NixOS VM test (${testName})";
exec = "cosmicTest";
};
cosmicTestAutostartItem = config.node.pkgs.makeAutostartItem {
name = "cosmicTest";
package = cosmicTestDesktop;
};
in
{
name = testName;
meta.maintainers = lib.teams.cosmic.members;
nodes.machine = {
imports = [ ../common/user-account.nix ];
services = {
# For `cosmic-store` to be added to `environment.systemPackages`
# and for it to work correctly because Flatpak is a runtime
# dependency of `cosmic-store`.
flatpak.enable = true;
displayManager.cosmic-greeter.enable = true;
desktopManager.cosmic = {
enable = true;
xwayland.enable = enableXWayland;
};
};
services.displayManager.autoLogin = lib.mkIf enableAutologin {
enable = true;
user = user.name;
};
users.users = {
alice.extraGroups = [
"uinput" # for ydotoold
];
root.password = user.password;
root.hashedPasswordFile = lib.mkForce null;
};
hardware.uinput.enable = true;
environment.systemPackages = with config.node.pkgs; [
ydotool
cosmicTest
cosmicTestAutostartItem
# These two packages are used to check if a window was opened
# under the COSMIC session or not. Kinda important.
# TODO: Move the check from the test module to
# `nixos/lib/test-driver/src/test_driver/machine.py` so more
# Wayland-only testing can be done using the existing testing
# infrastructure.
jq
lswt
];
# So far, all COSMIC tests launch a few GUI applications. In doing
# so, the default allocated memory to the guest of 1024M quickly
# poses a very high risk of an OOM-shutdown which is worse than an
# OOM-kill. Because now, the test failed, but not for a genuine
# reason, but an OOM-shutdown. That's an inconclusive failure
# which might possibly mask an actual failure. Not enabling
# systemd-oomd because we need said applications running for a
# few seconds. So instead, bump the allocated memory to the guest
# from 1024M to 4x; 4096M.
virtualisation.memorySize = 4096;
};
testScript =
{ nodes, ... }:
''
#testName: ${testName}
import sys
''
+ (
if enableAutologin then
''
with subtest("cosmic-greeter initialisation"):
machine.wait_for_unit("graphical.target", timeout=120)
''
else
''
from time import sleep
machine.wait_for_unit("graphical.target", timeout=120)
machine.wait_until_succeeds("pgrep --uid ${config.nodes.machine.users.users.cosmic-greeter.name} --full cosmic-greeter", timeout=30)
# Sleep for 10 seconds for ensuring that `greetd` loads the
# password prompt for the login screen properly.
sleep(10)
with subtest("cosmic-session login"):
machine.send_chars("${user.password}\n", delay=0.2)
''
)
+ ''
with subtest("xdg autostart support in cosmic"):
# When checking the status of our `cosmicTest` package with:
# `machine.wait_for_unit("app-cosmicTest@autostart.service", user="${user.name}")`
# We are immediately greeted with the error:
# ```
# subtest: xdg autostart support in cosmic
# machine: waiting for unit app-cosmicTest@autostart.service with user alice
# machine # [ 26.497516] cosmic-comp[1352]: [EGL] 0x3008 (BAD_DISPLAY) eglCreateSync: _eglCreateSync
# machine # [ 26.511706] su[1416]: Successful su for alice by root
# machine # [ 26.528190] su[1416]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
# machine # Failed to connect to user scope bus via local transport: No such file or directory
# machine # [ 26.599563] su[1416]: pam_unix(su:session): session closed for user alice
# !!! Test "xdg autostart support in cosmic" failed with error: "retrieving systemctl property "ActiveState" for unit "app-cosmicTest@autostart.service" under user "alice" failed with exit code 1"
# ```
# Meaning, our session is extremely new and the D-Bus user
# session socket does not yet exist. Instead, lets poll for
# the log file that the test is guaranteed to write to, as
# soon as it starts.
machine.wait_for_file("${logFilePath}.log", timeout=120)
exit_code = 0
try:
machine.wait_for_file("${logFilePath}.done", timeout=700)
except Exception:
exit_code = 1
# The log file is created in the very beginning of the test
# script's execution. If we are here, it means that the
# `wait_for_unit`'s "guard" on the test script's autostart unit
# plus the 630 second combined timeout of other two
# `wait_for_file`s, make it extremely likely for the log file to
# be present.
machine.copy_from_machine("${logFilePath}.log")
machine.shutdown()
with open(f"{machine.out_dir}/${testName}.log") as test_log_file:
contents = test_log_file.read()
print(contents)
if any("Z [ERROR] [L:" in line for line in contents.splitlines()):
exit_code = 1
sys.exit(exit_code)
'';
}
+315
View File
@@ -0,0 +1,315 @@
#!/usr/bin/env python3
import argparse
import logging
import os
import pathlib
import subprocess
import time
def parse_cli_args() -> argparse.Namespace:
parser = argparse.ArgumentParser()
parser.add_argument(
"--log-file-path",
required=True,
type=str,
help="The path to the log file (without the '.log' suffix/extension)",
)
parser.add_argument(
"--cosmic-reader-pdf",
required=True,
type=str,
help="The PDF that the `cosmic-reader` should open for testing",
)
parser.add_argument(
"--polkit-agent-helper-path",
required=True,
type=str,
help="The path to the polkit agent helper (`${pkgs.polkit.out}/lib/polkit-1/polkit-agent-helper-1`)",
)
parser.add_argument(
"--root-user-password", required=True, type=str, help="The root user's password"
)
args = parser.parse_args()
return args
def start_ydotool_daemon() -> tuple[str, subprocess.Popen]:
"""
The ydotool requires a daemon to be running.
"""
xdg_runtime_dir = os.getenv("XDG_RUNTIME_DIR") or f"/run/user/{os.getuid()}"
ydotool_daemon_socket_path = f"{xdg_runtime_dir}/.ydotool_socket"
ydotool_daemon_process = subprocess.Popen(
[
"ydotoold",
"--socket-path",
ydotool_daemon_socket_path,
"--mouse-off",
],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
return ydotool_daemon_socket_path, ydotool_daemon_process
def wait_for_cosmic_de_readiness() -> None:
"""
Wait for the COSMIC DE to be ready, before running the tests. This
is done by waiting on the supposedly last component of the COSMIC
DE to be "ready." That component is the notification watcher, of
the `cosmic-applet` derivation.
"""
logging.info("=" * 80)
logging.info("Waiting for COSMIC DE to complete initialization")
notification_watcher_wait_deadline = time.monotonic() + 360
notification_watcher_exists = False
while time.monotonic() < notification_watcher_wait_deadline:
busctl_process = subprocess.run(
["busctl", "--user", "status", "com.system76.CosmicStatusNotifierWatcher"],
check=False,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
if busctl_process.returncode == 0:
notification_watcher_exists = True
break
else:
time.sleep(1)
logging_msg = "The COSMIC DE is "
if notification_watcher_exists:
logging.info(f"{logging_msg} ready")
else:
logging.error(f"{logging_msg} not ready")
return
def perform_polkit_authentication_test(
cli_args: argparse.Namespace,
ydotool_daemon_socket_path: str,
ydotool_daemon_process: subprocess.Popen,
) -> None:
"""
1. Run `pkexec` as a background process that produces a specific
output to stdout upon successful completion.
2. Wait unil it has been confimred that `cosmic-osd` has created
a pop-up requesting the root user's password.
3. Use ydotool to type the root user's password in the pop-up
prompt.
4. Ensure that the the `pkexec` background process' stdout matches
the output that we expect.
Any breakage in this flow is considered a failure of the polkit
authenticaion test.
"""
logging.info("=" * 80)
logging.info("Performing polkit authentication test")
polkit_test_passed = False
polkit_test_command = [
"pkexec",
"--disable-internal-agent",
"bash",
"-c",
"echo -n 'polkit test was successful'",
]
logging.info(f"Running: {polkit_test_command}")
polkit_test_process = subprocess.Popen(
polkit_test_command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
)
polkit_popup_deadline = time.monotonic() + 60
pop_up_msg = "the pop-up for polkit password authentication"
encountered_polkit_authentication_popup = False
while time.monotonic() < polkit_popup_deadline:
polkit_popup_check_process = subprocess.run(
[
"pgrep",
"-afx",
f"{cli_args.polkit_agent_helper_path} --socket-activated",
],
check=False,
)
if polkit_popup_check_process.returncode == 0:
encountered_polkit_authentication_popup = True
logging.info(f"Noticed {pop_up_msg}")
if ydotool_daemon_process.poll() is None:
# The polkit-agent-helper process exists, but that
# doesn't necessarily mean that the pop-up is
# **rendered** and ready to accept the password. So we
# sleep for a few seconds.
time.sleep(20)
ydotool_process = subprocess.run(
[
"ydotool",
"type",
"--key-delay=500",
f"{cli_args.root_user_password}\n",
],
env={
**os.environ.copy(),
"YDOTOOL_SOCKET": ydotool_daemon_socket_path,
},
check=False,
)
ydotool_msg = (
"the root user's password in the pop-up for polkit authentication"
)
if ydotool_process.returncode == 0:
logging.info(f"ydotool typed {ydotool_msg}")
else:
logging.error(f"ydotool did not type {ydotool_msg}")
else:
logging.error(
"The ydotool daemon exited for some reason before it could be used"
)
break
time.sleep(1)
if not encountered_polkit_authentication_popup:
logging.error(f"Did not notice {pop_up_msg}")
polkit_test_process_stdout = ""
polkit_test_process_stderr = ""
try:
polkit_test_process_stdout, polkit_test_process_stderr = (
polkit_test_process.communicate(timeout=45)
)
except subprocess.TimeoutExpired:
polkit_test_process.kill()
polkit_test_process_stdout, polkit_test_process_stderr = (
polkit_test_process.communicate()
)
logging.info(f"polkit stdout: '{polkit_test_process_stdout}'")
logging.info(f"polkit stderr: '{polkit_test_process_stderr}'")
if polkit_test_process_stdout:
logging.info(f"pkexec command stdout: {polkit_test_process_stdout}")
polkit_test_passed = "polkit test was successful" in polkit_test_process_stdout
else:
logging.warning("Could not capture stdout from the polkit test command")
if polkit_test_passed:
logging.info("The polkit authentication test passed")
else:
logging.error("The polkit authentication test failed")
return
def perform_gui_application_test(cli_args: argparse.Namespace) -> None:
"""
1. Start one GUI application as a background process.
2. Wait unil it has been confimred that the GUI application is
running.
3. Kill the background process of the GUI application.
Any breakage in this flow is considered a failure of the test for
the GUI application.
"""
logging.info("=" * 80)
logging.info("Performing test to launch GUI applications")
gui_apps_to_test = {
"com.system76.CosmicEdit": [
"cosmic-edit",
],
"com.system76.CosmicFiles": [
"cosmic-files",
],
"com.system76.CosmicPlayer": [
"cosmic-player",
],
"com.system76.CosmicReader": [
"cosmic-reader",
cli_args.cosmic_reader_pdf,
],
"com.system76.CosmicSettings": [
"cosmic-settings",
],
"com.system76.CosmicStore": [
"cosmic-store",
],
"com.system76.CosmicTerm": [
"cosmic-term",
],
}
for gui_app_id, gui_app_command in gui_apps_to_test.items():
logging.info(f"Running: {gui_app_command}")
gui_app_bg_process = subprocess.Popen(
gui_app_command,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
gui_app_bg_process_deadline = time.monotonic() + 30
gui_app_is_running = False
while time.monotonic() < gui_app_bg_process_deadline and not gui_app_is_running:
lswt_process = subprocess.run(
[
"lswt",
"--custom",
"a",
],
check=False,
text=True,
stdout=subprocess.PIPE,
stderr=subprocess.DEVNULL,
)
lswt_process_stdout = lswt_process.stdout.strip()
if lswt_process_stdout:
if gui_app_id in lswt_process_stdout.splitlines():
gui_app_is_running = True
time.sleep(1)
pkill_process = subprocess.run(
["pkill", gui_app_command[0]],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
check=False,
)
log_message = (
f"The GUI application test for '{gui_app_command[0]}' ({gui_app_id})"
)
if gui_app_is_running:
logging.info(f"{log_message} passed")
else:
logging.error(f"{log_message} failed")
return
def main() -> None:
cli_args = parse_cli_args()
logging.basicConfig(
level=logging.INFO,
format=f"%(asctime)sZ [%(levelname)s] [L:%(lineno)d] %(message)s",
datefmt="%H:%M:%S",
handlers=[
logging.StreamHandler(),
logging.FileHandler(f"{cli_args.log_file_path}.log", mode="w"),
],
)
logging.Formatter.converter = time.gmtime
logging.info(f"Logging to '{cli_args.log_file_path}.log'")
ydotool_daemon_socket_path, ydotool_daemon_process = start_ydotool_daemon()
# Wait for the DE to be ready
wait_for_cosmic_de_readiness()
# tests go here
perform_polkit_authentication_test(
cli_args, ydotool_daemon_socket_path, ydotool_daemon_process
)
perform_gui_application_test(cli_args)
pathlib.Path(f"{cli_args.log_file_path}.done").touch()
return
if __name__ == "__main__":
main()
+26
View File
@@ -0,0 +1,26 @@
{ ... }:
{
name = "stump-nixos";
nodes.machine =
{ ... }:
{
services.stump.enable = true;
};
testScript = ''
import json
machine.wait_for_unit("stump.service")
machine.wait_for_open_port(10001)
machine.succeed("curl --fail -s http://localhost:10001/")
machine.succeed("curl --fail -s --data '{\"username\":\"admin\",\"password\":\"admin\"}' -H 'Content-Type: application/json' -X POST http://localhost:10001/api/v2/auth/register")
response = machine.succeed("curl --fail -s -X GET http://localhost:10001/api/v2/claim")
is_claimed = json.loads(response)['isClaimed']
assert is_claimed
'';
}
+10 -5
View File
@@ -906,10 +906,14 @@ stdenv.mkDerivation {
## Automatic package updates
[automatic-package-updates]: #automatic-package-updates
Nixpkgs periodically tries to update all packages that have a `passthru.updateScript` attribute.
The [community bot `r-ryantm`](https://nix-community.org/update-bot/), periodically tries to update all packages in Nixpkgs.
`r-ryantm` runs the program [`nixpkgs-update`](https://nix-community.github.io/nixpkgs-update/) to find new versions of packages.
In most cases, `nixpkgs-update` will be capable of finding new versions and perform the update with out any special instructions.
Putting a `passthru.updateScript` attribute sets an explicit update procedure for `nixpkgs-update`, but this is not required for most cases.
To learn more about the default update procedures, read their [FAQ for Nixpkgs maintainers](https://nix-community.github.io/nixpkgs-update/nixpkgs-maintainer-faq/).
> [!Note]
> A common pattern is to use the [`nix-update-script`](../pkgs/by-name/ni/nix-update/nix-update-script.nix) attribute provided in Nixpkgs, which runs [`nix-update`](https://github.com/Mic92/nix-update):
> A common pattern is to use the [`nix-update-script`](../pkgs/by-name/ni/nix-update/nix-update-script.nix) function provided in Nixpkgs, which makes automatic updates use [`nix-update`](https://github.com/Mic92/nix-update):
>
> ```nix
> { stdenv, nix-update-script }:
@@ -919,9 +923,10 @@ Nixpkgs periodically tries to update all packages that have a `passthru.updateSc
> }
> ```
>
> For simple packages, this is often enough, and will ensure that the package is updated automatically by [`nixpkgs-update`](https://github.com/nix-community/nixpkgs-update) when a new version is released.
> The [update bot](https://nix-community.org/update-bot) runs periodically to attempt to automatically update packages, and will run `passthru.updateScript` if set.
> While not strictly necessary if the project is listed on [Repology](https://repology.org), using `nix-update-script` allows the package to update via many more sources (e.g. GitHub releases).
> `nix-update` is a little bit more flexible than `nixpkgs-update` in performing updates, so it can be useful for cases such as:
>
> - A `nix-update` CLI flag like `--version branch` or `--version-regex` are needed to make the update work.
> - You don't want to rely upon new versions to be listed in [Repology](https://repology.org/), and `nix-update` finds new versions easily (e.g GitLab projects).
The `passthru.updateScript` attribute can contain one of the following:
@@ -0,0 +1,15 @@
{ vimUtils, mirth }:
vimUtils.buildVimPlugin {
pname = "mirth";
inherit (mirth) version;
src = mirth.vim;
meta = {
inherit (mirth.meta)
homepage
license
platforms
;
description = "Syntax highlighting & filetype detection for the Mirth programming language";
};
}
@@ -2184,8 +2184,8 @@ let
mktplcRef = {
publisher = "haskell";
name = "haskell";
version = "2.8.0";
hash = "sha256-Tp4Ahfp3Ma9aJtghD+mgsCBTMOP1GI1vGE5xzvHO+d4=";
version = "2.8.1";
hash = "sha256-mAlEy5a83BRhUhA22AKheP6PPpfbrdGT6HsTKbFwJYs=";
};
meta = {
license = lib.licenses.mit;
@@ -118,4 +118,6 @@ pnpmConfigHook() {
echo "Finished pnpmConfigHook"
}
postConfigureHooks+=(pnpmConfigHook)
if [ -z "${dontPnpmConfigure-}" ]; then
postConfigureHooks+=(pnpmConfigHook)
fi
+9 -9
View File
@@ -1,21 +1,21 @@
{
"version": "1.3.19-stable",
"version": "1.3.20-stable",
"sources": {
"aarch64-darwin": {
"url": "https://acli.atlassian.com/darwin/1.3.19-stable/acli_1.3.19-stable_darwin_arm64.tar.gz",
"sha256": "c5f1b1f6db63972d126a2f8ac9aca9a199739c7b51ac9e352e8ae3ed2b27131c"
"url": "https://acli.atlassian.com/darwin/1.3.20-stable/acli_1.3.20-stable_darwin_arm64.tar.gz",
"sha256": "5fca5f021b8202f77f60ecc0ded293fb4af67afdb462ed20dce990cfedc49517"
},
"aarch64-linux": {
"url": "https://acli.atlassian.com/linux/1.3.19-stable/acli_1.3.19-stable_linux_arm64.tar.gz",
"sha256": "72972e74fa9036c5b40175570234a2e79559776c06a3aa29f632a39c7d3674da"
"url": "https://acli.atlassian.com/linux/1.3.20-stable/acli_1.3.20-stable_linux_arm64.tar.gz",
"sha256": "2209f6ab1f7fb4c16247e30115d0ff7c1511161aeae4d166e0e79ec81125a4b1"
},
"x86_64-darwin": {
"url": "https://acli.atlassian.com/darwin/1.3.19-stable/acli_1.3.19-stable_darwin_amd64.tar.gz",
"sha256": "394096ecd5a6082cbbbc8b2f3e1f1fbe694cdb340e25a4014eeb78461b869beb"
"url": "https://acli.atlassian.com/darwin/1.3.20-stable/acli_1.3.20-stable_darwin_amd64.tar.gz",
"sha256": "4b9c4faa0d635b6e9194b101d4826b26cd6a15c46313f6a5f9436e20e8a48b78"
},
"x86_64-linux": {
"url": "https://acli.atlassian.com/linux/1.3.19-stable/acli_1.3.19-stable_linux_amd64.tar.gz",
"sha256": "f29fa8b7f01710053c2f4e07723501ebfe448672b669d32d83e961686d383a6d"
"url": "https://acli.atlassian.com/linux/1.3.20-stable/acli_1.3.20-stable_linux_amd64.tar.gz",
"sha256": "4e0190233a58276001a3cdff23e4be5e30844f98c639c49cfdeb581b9eb147aa"
}
}
}
+4 -3
View File
@@ -8,11 +8,11 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "alt-tab-macos";
version = "11.1.0";
version = "11.3.1";
src = fetchurl {
url = "https://github.com/lwouis/alt-tab-macos/releases/download/v${finalAttrs.version}/AltTab-${finalAttrs.version}.zip";
hash = "sha256-wVg0HjPC4MYOVNDtFdzcG5P8amrjE3tNNccUAPRGZNY=";
hash = "sha256-X59sFQWuT9y3/YGfG/lFoXmoeV/BjHPniDZey5Phb4w=";
};
sourceRoot = ".";
@@ -32,11 +32,12 @@ stdenvNoCC.mkDerivation (finalAttrs: {
meta = {
description = "Windows alt-tab on macOS";
homepage = "https://alt-tab-macos.netlify.app";
homepage = "https://alt-tab.app";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [
FlameFlag
emilytrau
Br1ght0ne
];
platforms = lib.platforms.darwin;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+14 -9
View File
@@ -15,22 +15,26 @@
let
pname = "anki-bin";
# Update hashes for both Linux and Darwin!
version = "25.02.5";
version = "26.05";
sources = {
linux = fetchurl {
url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-linux-qt6.tar.zst";
hash = "sha256-wYFqT1g+rtoqOR7+Bb5mIJLZ5JdT2M1kcHqJUCuNElA=";
linux-aarch64 = fetchurl {
url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-linux-aarch64.tar.zst";
hash = "sha256-z/w7+TKLW+xi/iJMXGOp50Yjwnv7FD5O0lNsu31dfqo=";
};
linux-x86_64 = fetchurl {
url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-linux-x86_64.tar.zst";
hash = "sha256-YiPXBVY/catAzgcqXZajkZxUbV3eHkxJ3CeXXnAGcnQ=";
};
# For some reason anki distributes completely separate dmg-files for the aarch64 version and the x86_64 version
darwin-x86_64 = fetchurl {
url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-mac-intel-qt6.dmg";
hash = "sha256-PDlu+oFKWHraPdTuGDCUkO0bhPtkNVibo11B1QkCICw=";
url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-mac-intel.dmg";
hash = "sha256-L/TXKh0cmTop7/ROA9YC4dyBz9iAFRhpXuNRbR3wwYk=";
};
darwin-aarch64 = fetchurl {
url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-mac-apple-qt6.dmg";
hash = "sha256-RqcGHXN29GDGGuFbrQCBmj3cctzoRQZ8svR5hMYPhxs=";
url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-mac-apple.dmg";
hash = "sha256-c5NZf0uWNB7XQDYBDtgrtCU+A5Cuck0rJ1xFG8hY0Sc=";
};
};
@@ -38,7 +42,7 @@ let
inherit pname version;
nativeBuildInputs = [ zstd ];
src = sources.linux;
src = if stdenv.hostPlatform.isAarch64 then sources.linux-aarch64 else sources.linux-x86_64;
installPhase = ''
runHook preInstall
@@ -64,6 +68,7 @@ let
;
platforms = [
"x86_64-linux"
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
];
@@ -13,13 +13,13 @@
}:
buildDotnetModule (finalAttrs: {
pname = "arcdps-log-manager";
version = "1.15.1";
version = "1.16";
src = fetchFromGitHub {
owner = "gw2scratch";
repo = "evtc";
tag = "manager-v${finalAttrs.version}";
hash = "sha256-JevVLlWcPu0/inLjzsxyNCcwOTp1jwNMp/rZH9h1wO0=";
hash = "sha256-AiIWYb3hwkE20NdmAHlSt55QJ/d3NnQt3ZeX1COUG7k=";
};
nugetDeps = ./deps.json;
@@ -0,0 +1,57 @@
{
"@esbuild/aix-ppc64@npm:0.28.1": "9b01eaa9c57542436436de762466b9a348b4596aa53dffa6e7034e4180691e1948d33fe34ec302239ab04c280e5166248880f24531011ff419fbec6986a265f3",
"@esbuild/android-arm64@npm:0.28.1": "7c977c8d4cea5126df4b298d5c31c3df8d14aa05d7477aa11c4147ec7baff17d25542234eea0134f279191b59cb1af18fee49c6916afda554484464129e4f9c3",
"@esbuild/android-arm@npm:0.28.1": "44baed9765216202f71b6aae8d9ddb930efa671d34f63f4220d980662b3df4da7972e965c0a0f12922147aa8428083686f6cb23cd9a4f140eaf922ae0b59c2a0",
"@esbuild/android-x64@npm:0.28.1": "1b8183640bef23f41a91598d898a04a6a8e3ca31d0100207c7e75928ee885878c04e3bcf31f27ed9c655d6d8a7c08e35e3afef035aee649488cb2d68e51abf1e",
"@esbuild/darwin-arm64@npm:0.28.1": "8ed80a99836df196c2b7996448eabb2d503ec8c71d0a8be59af4eed457b858fa5fd9292528b1967f0e106d2a045387e375207a2cc262cd45f89596681e94e7fd",
"@esbuild/darwin-x64@npm:0.28.1": "952b23f33c24aea13f5a78fd41731e06e8c7fa732e10995327fa1289115da6b4123899ca0cdb0cf0a56add29efcb9f7891ad6fda0bfb94541347275537a71e77",
"@esbuild/freebsd-arm64@npm:0.28.1": "cc2c4f1f13230607807c3f128680d789e85d4b93309501c4f8d84ed0674f4a2a3e60e279e3b997ee9f797047c1c5b906b25e4fe37de62d19634e4470bcb16f32",
"@esbuild/freebsd-x64@npm:0.28.1": "5b99b980599567ee931520a019beaeea4c7ae2874d0bfab79ee4bd6373a869251d2175946478c527490ce155d10a5bcc795e8c986dceb4a36fb6e813513fc54c",
"@esbuild/linux-arm64@npm:0.28.1": "9348c6bfc2d878e6213cffe482d4455d817b9e56b3c581a9f68b94aac720cddea5733d963dec57ca273039f3a7ca1714f1ac8e39e2e0f85f1af42f5d05e3ed00",
"@esbuild/linux-arm@npm:0.28.1": "654d7af59b4be40f585455e42ecb389657c6f11b1f2be2d5ab04caeac0514574d8b2a28b9f0f9805d92e266a44a5627c5acc8151b0d0379f75ac1490fecc013d",
"@esbuild/linux-ia32@npm:0.28.1": "cce27fbd8d74f34bb5507a5db8c0119aa377c7a070fd0be3881a8efddcdb8adeebe24dc97d55784d74a8bf4a60fb55b48899f41b5e931acaa3eb9f90ecc94a01",
"@esbuild/linux-loong64@npm:0.28.1": "47c3215d378f5da750300694b273b83db26d3e9ed36553696a1769da6d467e7557e289b46d211c93ab7a2978348b7415b66c7fec31658622f5bd356332b9d5b0",
"@esbuild/linux-mips64el@npm:0.28.1": "166d8888e731bdeba0c657382d429c0a979af2136100ee2491ec47b2e2ec55f6924fe2045880b48a6cdaeb3dcc44fc495f3f4b9a5aa3bb8c418d1f53f86b2ba1",
"@esbuild/linux-ppc64@npm:0.28.1": "a8eecb9e43a26dcb70a9805e685dec9f0caff0a8bac691b06a6db7c14ba0a69980ef0c01cb3fc1377ad63e2c4945f396fbbeaf008588bb232e9c0c37dcdb557b",
"@esbuild/linux-riscv64@npm:0.28.1": "cfde883f336e1811fee019a1df402000c7a8e6dc5a2b3577679fd0d9711d1a774c1faa194cc8954b18ca11f3a380ef32905ea90c241803831b61017d8a667c3b",
"@esbuild/linux-s390x@npm:0.28.1": "ea121d2fb6c8f6161312e0239258b584c431b4d23f320ace7cbc18da77034aac5ed383658d2a48fdfa32e38be07126a14aa26802b8e04d0e958e82646fb87f41",
"@esbuild/linux-x64@npm:0.28.1": "9b5458cf012247e31c6bf465e37553f2fc5aef3fccc6593bb30fee0c547958f9f00fbedd44e5bc076cf68d6791a4af2ce8714260fe341cb16843a78643773e3d",
"@esbuild/netbsd-arm64@npm:0.28.1": "86b5cf33fbad27ea5e7345601e711a26717bdf5ad119efa0b1bb9ad6a75f7cb2658c57ffb80f19491e3c7105f4698e76358ee2b6d57f48c9a230de9f588589c7",
"@esbuild/netbsd-x64@npm:0.28.1": "ff24c209715f7f122c711d3c51af099de27659837d3f7bd4cbea9a8868fa99a10b7af785058d18a1e32b2132989d1d1d82b8768df77ff25ab6cf19d58be3697d",
"@esbuild/openbsd-arm64@npm:0.28.1": "fe6590621116132baa0a2b9c2dc95c6342f146170ec1ffb343c29936580c369a69061676bef4e654ee27bad6491f531af3ba985aed7133eb16b758fffae6a445",
"@esbuild/openbsd-x64@npm:0.28.1": "2600c51c394945654f99b096fccba95e1d34fa3ecf4e78f40a7aee4573bf21dd955c274e0586768e9ebef3bff145ffe30231f1cb281ef5e679f7aa78dcc86687",
"@esbuild/openharmony-arm64@npm:0.28.1": "be9e1d1e4af478778ce847e28809fba0b754340a699e37ec03bc1a3cd4e84e4fde30ffea62099757877229b024d50331efd6270580492aa6be38eb2353ef5646",
"@esbuild/sunos-x64@npm:0.28.1": "349b9c7d879496456b2eb28f7bb3decc12a906007bb7fb24cb2b269f6b3e5138af109045b216bd0396762e63b802f0233408cc3dce802be5fcf242d4835b6bc8",
"@esbuild/win32-arm64@npm:0.28.1": "551ada5396e1f10e3d3592dd60a148a7257af1ab2317bba09e9ed18a6d7ee7e5961c68eb1fbaee4e8c1961b504807493e1b8f5c700dd1fb990f0cb36b240ad57",
"@esbuild/win32-ia32@npm:0.28.1": "2676ace6b4d63721da34873974152e869aed9fc8bd9fdff4b8df14a3a3e68b78a9b4566e643b90b948b4e85773cbf288a33a59d13979caaadd43b5adad68312c",
"@esbuild/win32-x64@npm:0.28.1": "8d658b74ed9b7494b3799093551d4c928a7916865ed42d00a135156cbd08612b53072e9e424f0687c10a93a444d30d6b0294b6a1d5fdba78078d706646ba558f",
"@nx/nx-darwin-arm64@npm:22.7.5": "4f8435566c4b7ea0de0c8953f994849b91ad85867f6cdfce67fc0bb7404a760131dad7bdb7c789f82980d349c1a6df255be03807da260cbc5396284395865f28",
"@nx/nx-darwin-x64@npm:22.7.5": "3d63123766ce58602f08c5c2e9e896d9bbba402c53f3918a0ea5eebab25cd2f48fb992ac654ea648088564b1347f920509f7a20ad25c538d227a11292024ce64",
"@nx/nx-freebsd-x64@npm:22.7.5": "6fa6ba0ab68e6fd9742c5bdc8cacbd67d3be6334b967c9dfa3a3fa5e64b689fa1d7b50f807420227ad470c53ad5cf8343240d35ed89ca8d3e62a921a4857e8b9",
"@nx/nx-linux-arm-gnueabihf@npm:22.7.5": "7fd2f207688a8353012f8363cc28868e927840c2378dba466a67dff50eabbf24362e6654e183c1308479d435e8326444ae4ab803e3f5bdf84061915124183f4f",
"@nx/nx-linux-arm64-gnu@npm:22.7.5": "03c8fa25e5833fe4746995624b15e72258b7050ee70a6d80ed4c2b0f5e8b740774264d1decf70eea61387028886b2360953675d554f2ee8b4ae784adf738ed7b",
"@nx/nx-linux-arm64-musl@npm:22.7.5": "ea449f0b82c027b6eae5f2a060d26624bee91b487b601ccb5ab250ff33140f4bd60cf004e8f5f1e495b9bd391c17bda4758635ddb80f1af29b234eb067517b2c",
"@nx/nx-linux-x64-gnu@npm:22.7.5": "96aad2912ef8a607147cb5831ddbfc6f08b3c657c44879c738055fde274259e2dfc7e507485c52c194e79445ca2410cf618e31e2d2af00f7563f04055beea3c7",
"@nx/nx-linux-x64-musl@npm:22.7.5": "1f61915a2e93a6b930b81b8205407e2c961f7878a5131f136027b86bd35a579fe65b52a47088c4818c6e6426b3aa79ece8ce30119a3e44dd4d5a681efd7cde4a",
"@nx/nx-win32-arm64-msvc@npm:22.7.5": "3f4668ce48fd341f487b99c72e7678ebdfa0964591a58947752bf050a4bb21bf27ee920ac4554433e0efd73beca923a17a6dfc90e35c8b5ee1f92fd4a7f2caa0",
"@nx/nx-win32-x64-msvc@npm:22.7.5": "c44700bd537a0f2571d75285302d332c0fa31a648a822937cd81362c7b4fcb8c8ecabb98559c0b7bcdb537acd051b4f3926bcd9e369095260fc6aa8d079e3c04",
"@unrs/resolver-binding-android-arm-eabi@npm:1.11.1": "04dd38b694c1680bfec192b499e188700398a414886a08a8a7c72815db56ac147df03d88c73ff6fff7ac3e0a01dc41978054b3622b49463e0d684c5168557fcc",
"@unrs/resolver-binding-android-arm64@npm:1.11.1": "763626adc34dd2b4af677b5ced6493e7b2b1935351a5c9137f1c9561d11faf97b94015e6876e57e85c33ff563564314c92c0882a4780a57f2225cbbd779a695d",
"@unrs/resolver-binding-darwin-arm64@npm:1.11.1": "03b477fdfec55dbabe488fe0962417bddaa38b028d2670053469f1d24163907b097aac15b565f6974449bee398a38d5e3e1525f2b515ce57e243149021b7aa2f",
"@unrs/resolver-binding-darwin-x64@npm:1.11.1": "3aeff9aaf4ef6d786c517d9017b5c41b0af180cdbaf705d08e6e5b5ba9d5410d28ef6754c5f8a865f0bb5efd460dc1c4156b5e2201032c0a604a6c734ddbc848",
"@unrs/resolver-binding-freebsd-x64@npm:1.11.1": "b9f7a3e03db9edfc3480db056dd25229f901f21840ee768b69f349b66676a995a404e60617b3bcbd984f57f2199eb352dd6fad0f4420c3084ceef5e3293cdad5",
"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1": "4d03b8bcef5a90586a846d6d332f39cee211f3d330b6e10036969894b6ecfb70b047265e985d572def93b84f38621dec30e4b4bb42699dd784adbae3ca5e7bea",
"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1": "9f3a3c2e5e6418a5a78294fa042824f5c270e993c1a99e82dd6b0ee0d2869929bb62dd154a0acc1e4ef16273e8073e0e257901208c062e6bdd49d586d07bb419",
"@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1": "05228d6fd669f404f0e3164ccf2430a52cc7b3bbd211367527b5d726b1220a1816bab70159bed55694d9b7543553f6002379e7e186c605d7055c5156977da022",
"@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1": "8115802143396d4992bb2f6f0acb6e8bc141a57864c5fd84cbc70577c25784cb08dd163b753b1fc0decc02582cf4cb1e30d04faaf763048babbbe706bdfa26ea",
"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1": "50f9f54b2eafb1ea023671cc3070692b2b15f6e49105b08b3f588033e65e8de4183f76e080b798de710f9c41df1bf5515c01868866a21cbd35db179b4ac9f23b",
"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1": "8f8222f938cc2025ed3971e0e303f4ff5aa5df74474b835442830ebe942d050ba3f8bbb67095da64099e6fc69bb5bb73ca63db54e059c95e51aa8909880fb207",
"@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1": "5c8987f7dcaf38ef27ec67dcf118141502d5ac75d28429da6d1b7037f3e5a5351f32f55094472fde11784e65d01f1da4dafd7c0fdca28423fbc8de2c2c51d16c",
"@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1": "17aed6472880a82e5a05147a55efb6f0d968f5dcb584845addf89acec3824534ee741d4b162686124d17daf9131373c469c57843996a5ee2db4f1b1b55e1d11e",
"@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1": "9495c08fc42f2d4a33e33c64adbcbf51588cd7ea07478eacb2e9143d955a760122440f4a3ac48b086cc2563ca2b2464d72ed0336fcc20c0a89ddc356f956eda8",
"@unrs/resolver-binding-linux-x64-musl@npm:1.11.1": "c84fadfee66eeebd16eb7cce7c4b5a1ec90260c724d0064111e9f43a1341ebfede61627cb68fd3a9735e4c10b25606fb472a4d13143cc569867b80d85c4a9824",
"@unrs/resolver-binding-wasm32-wasi@npm:1.11.1": "655a3990ed9b238e8f0c4858f87ca84bd3d81db300f7730c885162333055170e11207af7789ff38f619e261178718f6977729e42ce7978cc9e6ac7b6d93822d5",
"@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1": "983f800ff8b5181247a7d460ab5c9704cd425d0182e93290f69fb969d93efe17be6a27c22b97546d36e9a9d9aeda96d5f753bc938b3d9a00f32c10fc228ce5a9",
"@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1": "383d639e3b08fc9e4ba18127ef55610172d2d1d6adb83e1466fff2b223552384cdc6217051f749829e0c90a757ea5631e8c4ad2cfeb59bdee2bb033fbd526854",
"@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1": "c862561f6495c0dbffb94d421e5727b25c1b61d98e22383bff23e6719a6c0125bb0b7df3be7220f5480bf54f5a605ea572f10fff1cce14fda24d42e396559940"
}
+41 -14
View File
@@ -2,40 +2,42 @@
lib,
stdenv,
fetchFromGitHub,
fetchYarnDeps,
nodejs,
yarnBuildHook,
yarnConfigHook,
yarnInstallHook,
yarn-berry_4,
diffutils,
zip,
jq,
python3,
unzip,
testers,
nix-update-script,
}:
let
yarn-berry = yarn-berry_4;
in
stdenv.mkDerivation (finalAttrs: {
pname = "aws-cdk-cli";
version = "2.1116.0";
version = "2.1127.0";
src = fetchFromGitHub {
owner = "aws";
repo = "aws-cdk-cli";
tag = "cdk@v${finalAttrs.version}";
hash = "sha256-mRr5G42RrO87AdJOTLaM+EPprTFCI7eVxzUhafrGOxA=";
hash = "sha256-d55JNmWi4oTNorunkDwpdfcxHE9UC2fufKDahKgoLvk=";
};
yarnOfflineCache = fetchYarnDeps {
yarnLock = "${finalAttrs.src}/yarn.lock";
hash = "sha256-cjJBaq65sNWOFMFB1HAgGScxJlBZKnwkGipDd4aXhDE=";
missingHashes = ./missing-hashes.json;
offlineCache = yarn-berry.fetchYarnBerryDeps {
inherit (finalAttrs) src missingHashes;
hash = "sha256-eGj2Gx46lyypNz5e0U1AD1dVwOgJK4hkwXp03lR+6sc=";
};
nativeBuildInputs = [
yarnConfigHook
yarnBuildHook
yarnInstallHook
yarn-berry
yarn-berry.yarnBerryConfigHook
nodejs
python3
zip
jq
# tests
@@ -49,6 +51,7 @@ stdenv.mkDerivation (finalAttrs: {
NX_VERBOSE_LOGGING = "true";
# Needed to properly embed version info
CODEBUILD_RESOLVED_SOURCE_VERSION = finalAttrs.version;
YARN_LOCKFILE_VERSION_OVERRIDE = "8";
};
# Regular "build" is very heavy and does things we don't need.
@@ -62,6 +65,13 @@ stdenv.mkDerivation (finalAttrs: {
in
''
echo '${cliVersionJson}' > packages/@aws-cdk/cloud-assembly-schema/cli-version.json
cat >> .yarnrc.yml <<'EOF'
approvedGitRepositories:
- "**"
enableScripts: true
enableNetwork: false
enableHardenedMode: false
EOF
'';
preBuild = ''
@@ -76,10 +86,27 @@ stdenv.mkDerivation (finalAttrs: {
popd
'';
buildPhase = ''
runHook preBuild
yarn "$yarnBuildScript"
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/lib/node_modules/aws-cdk-cli
cp -r . $out/lib/node_modules/aws-cdk-cli
runHook postInstall
'';
postInstall = ''
# Manually bundle non-bundled dependencies
cp -r packages/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema $out/lib/node_modules/aws-cdk-cli/node_modules/jsonschema
cp -r packages/aws-cdk/node_modules/decamelize $out/lib/node_modules/aws-cdk-cli/node_modules/decamelize
cp -r node_modules/jsonschema $out/lib/node_modules/aws-cdk-cli/node_modules/jsonschema
cp -r node_modules/decamelize $out/lib/node_modules/aws-cdk-cli/node_modules/decamelize
patchShebangs "$out/lib/node_modules/aws-cdk-cli/node_modules/aws-cdk/bin"
ln -s "$out/lib/node_modules/aws-cdk-cli/node_modules/aws-cdk/bin" "$out/bin"
+2 -2
View File
@@ -14,11 +14,11 @@
stdenv.mkDerivation (finalAttrs: {
pname = "cdemu-daemon";
version = "3.3.0";
version = "3.3.1";
src = fetchurl {
url = "mirror://sourceforge/cdemu/cdemu-daemon-${finalAttrs.version}.tar.xz";
hash = "sha256-AYHjiOAQdu685gc6p0j2QNtCmTYTWix1kzWQZYvGPWU=";
hash = "sha256-rkhxivVGQ2lsCUQEXJupDenj74E3shQXExhTWysf+qo=";
};
nativeBuildInputs = [
+2 -2
View File
@@ -8,13 +8,13 @@
buildGoModule (finalAttrs: {
pname = "changie";
version = "1.24.1";
version = "1.24.2";
src = fetchFromGitHub {
owner = "miniscruff";
repo = "changie";
rev = "v${finalAttrs.version}";
hash = "sha256-mstq+iOqPc8rU1lLmS0ZvguxjS0GC8DrS+G4rQVThdg=";
hash = "sha256-J71lJq46gSQcAA+agswh0bZ1B97YoFIV2mM0e8A1Dw8=";
};
vendorHash = "sha256-VoiGg0K89S98j2q68U0oYENgAYjynl3EeFC47l3Hq9Q=";
+9 -9
View File
@@ -10,26 +10,26 @@ let
inherit (stdenv) hostPlatform;
sources = {
x86_64-linux = fetchurl {
url = "https://downloads.cursor.com/lab/2026.06.12-19-59-36-f6aba9a/linux/x64/agent-cli-package.tar.gz";
hash = "sha256-bn8gLdiHW1adZ0VkvmN28Pb7X35F/dlztZuE8zzJoeQ=";
url = "https://downloads.cursor.com/lab/2026.06.19-20-24-33-653a7fb/linux/x64/agent-cli-package.tar.gz";
hash = "sha256-3xHrn1JaG2Leok/CiWtZezERrYqVcpZggXSD/zuWyy4=";
};
aarch64-linux = fetchurl {
url = "https://downloads.cursor.com/lab/2026.06.12-19-59-36-f6aba9a/linux/arm64/agent-cli-package.tar.gz";
hash = "sha256-otjrJCOKW+be5QmK+OJkYqJMbTZolVzSVfCsqNs1Otw=";
url = "https://downloads.cursor.com/lab/2026.06.19-20-24-33-653a7fb/linux/arm64/agent-cli-package.tar.gz";
hash = "sha256-6iiinIexiEKqXDXOHzKut1d0Mtg89A8zel0zeXna4Qc=";
};
x86_64-darwin = fetchurl {
url = "https://downloads.cursor.com/lab/2026.06.12-19-59-36-f6aba9a/darwin/x64/agent-cli-package.tar.gz";
hash = "sha256-kTyFA999IZRH3wnlL3kpBD/ch0d+HlkGC2GqrneJ37k=";
url = "https://downloads.cursor.com/lab/2026.06.19-20-24-33-653a7fb/darwin/x64/agent-cli-package.tar.gz";
hash = "sha256-HgxyZ1TPLnyJJJuvi8VrQhm33/rzD9kCwxy4Mp0D9C0=";
};
aarch64-darwin = fetchurl {
url = "https://downloads.cursor.com/lab/2026.06.12-19-59-36-f6aba9a/darwin/arm64/agent-cli-package.tar.gz";
hash = "sha256-fgM9Wuw693QhgmgLGbAzyR42ifUSUCaERTMZjPC1o+w=";
url = "https://downloads.cursor.com/lab/2026.06.19-20-24-33-653a7fb/darwin/arm64/agent-cli-package.tar.gz";
hash = "sha256-Qa22+f5+x5+4sHesqp24d9GlKqPp6xBJG7BFxz6LUVU=";
};
};
in
stdenv.mkDerivation {
pname = "cursor-cli";
version = "2026.06.12-19-59-36-f6aba9a";
version = "2026.06.19-20-24-33-653a7fb";
src = sources.${hostPlatform.system};
+41
View File
@@ -0,0 +1,41 @@
{
stdenvNoCC,
imagemagick,
lib,
}:
stdenvNoCC.mkDerivation {
name = "empty-pdf";
__structuredAttrs = true;
strictDeps = true;
dontUnpack = true;
nativeBuildInputs = [ imagemagick ];
buildPhase = ''
runHook preBuild
magick xc:none -page Letter empty.pdf
runHook postBuild
'';
installPhase = ''
runHook preInstall
mv empty.pdf $out
runHook postInstall
'';
meta = {
description = "Empty PDF file intended for testing";
maintainers = with lib.maintainers; [
pandapip1
thefossguy
];
platforms = imagemagick.meta.platforms;
};
}
+21 -13
View File
@@ -2,18 +2,21 @@
lib,
python3Packages,
fetchPypi,
qt6,
irtt,
iputils,
netperf,
procps,
qt5,
nix-update-script,
}:
python3Packages.buildPythonApplication (finalAttrs: {
pname = "flent";
version = "2.2.0";
version = "2.3.0";
pyproject = true;
src = fetchPypi {
inherit (finalAttrs) pname version;
hash = "sha256-BPwh3oWIY1YEI+ecgi9AUiX4Ka/Y5dYikwmfvvNB+eg=";
hash = "sha256-qy+BvMpBDBtBqEEM9yEko/Gb2pusxF/LqiutSKlS2eE=";
};
build-system = with python3Packages; [
@@ -21,11 +24,23 @@ python3Packages.buildPythonApplication (finalAttrs: {
sphinx
];
nativeBuildInputs = [ qt5.wrapQtAppsHook ];
nativeBuildInputs = [ qt6.wrapQtAppsHook ];
buildInputs = [ qt6.qtbase ];
makeWrapperArgs = [
"--prefix"
"PATH"
":"
(lib.makeBinPath [
iputils
irtt
netperf
procps
])
];
dependencies = with python3Packages; [
matplotlib
pyqt5
pyqt6
qtpy
];
@@ -36,17 +51,10 @@ python3Packages.buildPythonApplication (finalAttrs: {
sed -i 's|self.skip|pass; #&|' unittests/test_gui.py
# Dummy qt setup for gui tests
export QT_PLUGIN_PATH="${qt5.qtbase.bin}/${qt5.qtbase.qtPluginPrefix}"
export QT_PLUGIN_PATH="${qt6.qtbase}/${qt6.qtbase.qtPluginPrefix}"
export QT_QPA_PLATFORM=offscreen
'';
preFixup = ''
makeWrapperArgs+=(
"''${qtWrapperArgs[@]}"
--prefix PATH : ${lib.makeBinPath [ procps ]}
)
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "FLExible Network Tester";
+2 -2
View File
@@ -8,13 +8,13 @@
buildGoModule (finalAttrs: {
pname = "forgejo-mcp";
version = "2.29.0";
version = "2.30.0";
src = fetchFromCodeberg {
owner = "goern";
repo = "forgejo-mcp";
tag = "v${finalAttrs.version}";
hash = "sha256-ZG8TKcckdyrdVHiNhYK1SvKFZHetg5otEw1ytkCD+Zc=";
hash = "sha256-DV8lL6Q/0gD8mFn3q5UusHv8ahNtmk9t9vtbhpvpxBs=";
};
vendorHash = "sha256-QDJRbF4mZzBv1vxvo1ZQJaUJayRHj1jMgjaRfAmLMik=";
+3 -3
View File
@@ -9,7 +9,7 @@
}:
let
version = "6.1.0";
version = "6.4.3";
in
rustPlatform.buildRustPackage {
pname = "git-mit";
@@ -19,10 +19,10 @@ rustPlatform.buildRustPackage {
owner = "PurpleBooth";
repo = "git-mit";
tag = "v${version}";
hash = "sha256-2ApBtZPfpV5mrvD/6NS+qsA8/WLFZL6OGWnANJBMchI=";
hash = "sha256-Id7S0qE1020pPMoyCl8jkHWrbdOb6FZHLNsqRvwjpf8=";
};
cargoHash = "sha256-ahT2jMFwU1+xQykqedmhOWjr+6mxpaUpjAMCeBwUTY0=";
cargoHash = "sha256-edKtumK9HGIXHy/ZdxZ1+lxYi+cS5G129E+WK9/JE10=";
nativeBuildInputs = [ pkg-config ];
+2 -2
View File
@@ -16,11 +16,11 @@
}:
python3Packages.buildPythonApplication (finalAttrs: {
pname = "image-analyzer";
version = "3.3.0";
version = "3.3.1";
src = fetchurl {
url = "mirror://sourceforge/cdemu/image-analyzer-${finalAttrs.version}.tar.xz";
hash = "sha256-N2aufwYEBVx7z2Vo7Qi4DP2MsDXXr5LrQdeNYOtNGnU=";
hash = "sha256-vsfDmtjrvAC49ynnJ7QguBfSVnt/sBpCy/Eau2l1/jQ=";
};
buildInputs = [
+4 -4
View File
@@ -13,16 +13,16 @@
maven.buildMavenPackage {
pname = "jchempaint";
version = "3.4-SNAPSHOT-2025-10-15"; # "3.4-SNAPSHOT" is the version given in the pom.xml
version = "3.4-SNAPSHOT-2026-04-24"; # "3.4-SNAPSHOT" is the version given in the pom.xml
src = fetchFromGitHub {
owner = "JChemPaint";
repo = "jchempaint";
rev = "de023b6ddc1a13f5af48fa2acc8a2633c36a30fa";
hash = "sha256-1wcJ1qP8yZg1qe4YkpCRGidHUXc1/1eUabR3NoM6kjc=";
rev = "f128d0d15be1bac4d324463f269cf130d2211253";
hash = "sha256-pcHX6PdnD/jkLxAMSV/Ts8VVrK9xy2NWiMVVJ7jTrQc=";
};
mvnHash = "sha256-AGDyXyEEDMjPHMlbcxninkciZ7V/ALMUS/OkgBnni18=";
mvnHash = "sha256-VpYSTN5u9IhCakak48HhbwnT3FhMpPKlwRZztiNGEIw=";
nativeBuildInputs = [
makeWrapper
+4 -4
View File
@@ -14,23 +14,23 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "kiro-cli";
version = "2.7.0";
version = "2.8.1";
src =
let
darwinDmg = fetchurl {
url = "https://desktop-release.q.us-east-1.amazonaws.com/${finalAttrs.version}/Kiro%20CLI.dmg";
hash = "sha256-UkwrchLjdbQ3aWHYG+DcMkbtQyKCEbG6wdNfOpu42TY=";
hash = "sha256-nN3GHnAdjgIplKgbPgtis4M1lRhyH5s8ilHMjKAuRJU=";
};
in
{
x86_64-linux = fetchurl {
url = "https://desktop-release.q.us-east-1.amazonaws.com/${finalAttrs.version}/kirocli-x86_64-linux.tar.gz";
hash = "sha256-jDpQgcIJfLS+IxPqMsOg9Ydeol2UptXl8ugeIdVe0rg=";
hash = "sha256-6HAczZP8cCChkZ4rN3I+15vwABHm1LvSu+CKgIbNqRM=";
};
aarch64-linux = fetchurl {
url = "https://desktop-release.q.us-east-1.amazonaws.com/${finalAttrs.version}/kirocli-aarch64-linux.tar.gz";
hash = "sha256-YYoPWHvmjanHBuZuI+0P8lytURCOwChH7BaSZnQmIJE=";
hash = "sha256-dnTr+VGe30hB/LRo7whzRTt1m6cOwsorf7CebN/eock=";
};
x86_64-darwin = darwinDmg;
aarch64-darwin = darwinDmg;
+3 -7
View File
@@ -9,14 +9,14 @@
python3.pkgs.buildPythonApplication rec {
pname = "lenovo-legion-app";
version = "0.0.20-unstable-2025-07-11";
version = "0.0.20-unstable-2026-05-12";
pyproject = true;
src = fetchFromGitHub {
owner = "johnfanv2";
repo = "LenovoLegionLinux";
rev = "f559df04cc0705b2b181dfd0404110a4d1d6e2a9";
hash = "sha256-WXGDlykH6aBUVotmDcGZ8Y/zC8iBAv57u3hXRnfTaSo=";
rev = "7c19579d13ce686cf1e237699b9a78e80d03c977";
hash = "sha256-gTlUrbNKCUQ+g70StlqspDn90wKW2scssKPZqaegzTY=";
};
sourceRoot = "${src.name}/python/legion_linux";
@@ -38,10 +38,6 @@ python3.pkgs.buildPythonApplication rec {
postPatch = ''
# only fixup application (legion-linux-gui), service (legiond) currently not installed so do not fixup
# version
substituteInPlace ./setup.cfg \
--replace-fail "_VERSION" "${builtins.head (lib.splitString "-" version)}"
# /etc
substituteInPlace ./legion_linux/legion.py \
--replace-fail "/etc/legion_linux" "$out/share/legion_linux"
+3 -5
View File
@@ -4,15 +4,13 @@
fetchFromGitea,
pkg-config,
udev,
gitMinimal,
writableTmpDirAsHomeHook,
versionCheckHook,
nix-update-script,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "leviculum";
version = "0.6.0";
version = "0.7.0";
__structuredAttrs = true;
src = fetchFromGitea {
@@ -21,10 +19,10 @@ rustPlatform.buildRustPackage (finalAttrs: {
repo = "leviculum";
tag = "v${finalAttrs.version}";
fetchSubmodules = false;
hash = "sha256-pNCTWIGVr0tHrqpisJbAEAyQUW1/mKexu6K+LZ9PWZ4=";
hash = "sha256-/ylHrCLs9QSTiox3/JHJtZBYLlysLsezG8iz6C1DtCI=";
};
cargoHash = "sha256-pGORaIcRRkJKKcyFnt8Fu9wmhWREwH6Cs8KvlEas/NQ=";
cargoHash = "sha256-DfwN4DTWcezcDRkl27cZXQdfXIhxlAj6+2nmYXhxius=";
nativeBuildInputs = [
pkg-config
@@ -7,13 +7,13 @@
stdenvNoCC.mkDerivation {
pname = "libretro-shaders-slang";
version = "0-unstable-2026-06-10";
version = "0-unstable-2026-06-19";
src = fetchFromGitHub {
owner = "libretro";
repo = "slang-shaders";
rev = "140d1bcc67a7287670ad6a02fc77e11c10ef5e07";
hash = "sha256-EejHojtJDnhgYk5PM8RTiCdV5TCeqcszodHQvs6vVIU=";
rev = "8ec4c82cf61a6ce3faae1e6111457d0d31920b60";
hash = "sha256-nPmDmuaa64I0QMHoUTr1nD6g3STyx0+cW3tY/q26M4A=";
};
dontConfigure = true;
+2 -2
View File
@@ -9,7 +9,7 @@
buildGoModule (finalAttrs: {
pname = "litmusctl";
version = "1.25.0";
version = "1.26.0";
nativeBuildInputs = [
installShellFiles
@@ -23,7 +23,7 @@ buildGoModule (finalAttrs: {
owner = "litmuschaos";
repo = "litmusctl";
rev = "${finalAttrs.version}";
hash = "sha256-vHvTp6qOFblGbGatQ2YUJQIsJQgFzB/bbnTpMMzE4NY=";
hash = "sha256-Zo21QH6uO1uKcLbuirLiIXS4qOI40zbamt1G9sL0IWg=";
};
vendorHash = "sha256-Lkvc8dBr/nvKczx83/KXKLe5FskGpI/17GIrl2y/E1I=";
+4 -4
View File
@@ -1,6 +1,6 @@
{
version = "1.30.1";
hash = "sha256-Z/0Lh+2VLB3w4AHNf+imWRgHmarO1MMUmNqrcAVSQ2k=";
npmDepsHash = "sha256-eccYGPIbk98+BtNtBAq4G1z/ymj6HHwacuH6ZktuN0U=";
vendorHash = "sha256-FgwMdvND7DMrYWp9kB2IB+Gjyo1gm1LtLTeC9SfPw9U=";
version = "1.30.2";
hash = "sha256-37nJRJL1mxvUdD7L9/yO/Lzyjvn09Tu9xHTEt4pxu2s=";
npmDepsHash = "sha256-AApRrIIYC4NtKIFyGQ3lnKIOk7LZNDK8wvUUbSczTrA=";
vendorHash = "sha256-em0317Q1u5sl8gws4/qqM8e9H5F4vfBiM7tLCyufgEk=";
}
+2 -2
View File
@@ -6,13 +6,13 @@
buildGoModule (finalAttrs: {
pname = "mcp-grafana";
version = "0.15.2";
version = "0.16.0";
src = fetchFromGitHub {
owner = "grafana";
repo = "mcp-grafana";
tag = "v${finalAttrs.version}";
hash = "sha256-qjK8v3nUTGcBWdEF1hMKDRQtPKcYbZRU5+O8D89eZHI=";
hash = "sha256-/K7m+VexScHppGuxKsGpz18WmJ3Xphmk2/nCHphwL1o=";
};
vendorHash = "sha256-E7Uh5nG6elUhEa+4RCtgGrle0Py6TjRc+OOvjtik1D8=";
+116
View File
@@ -0,0 +1,116 @@
{
lib,
fetchFromSourcehut,
buildPackages,
stdenv,
makeBinaryWrapper,
}:
stdenv.mkDerivation {
name = "mirth";
version = "0-unstable-2026-05-28";
src = fetchFromSourcehut {
owner = "~typeswitch";
repo = "mirth";
rev = "b180112a547cb803e3bf5720a0bb08f8bffa9742";
hash = "sha256-6nd1DrN3sGobmOh+E/8hYUFW2tBSFLdaEPXrViKDVSc=";
};
postPatch =
# Bug report: https://todo.sr.ht/~typeswitch/mirth/16
lib.optionalString (with stdenv.buildPlatform; isAarch64 && isLinux) ''
substituteInPlace bin/mirth0.c \
--replace-fail "WRAP_I63(24LL);" "WRAP_I63(16LL);"
substituteInPlace lib/std/world.mth \
--replace-fail "Linux -> 24u," "Linux -> running-arch Arch.ARM64 = if(16u, 24u),"
''
# Replace hard-coded GCC with stdenvs C compiler.
# NOTE: newer GCC requires optimization level ≥1 to use fortity. -O1 is
# fast enough as a default for the compiler stages.
+ ''
substituteInPlace Makefile \
--replace-fail "-O0" "-O1" \
--replace-fail "CC=gcc \$(C99FLAGS)" "CC=${buildPackages.stdenv.cc.targetPrefix}cc \$(C99FLAGS)"
''
# Override the final binary, mirth3, with the targets C compiler & -O2
# optimization for distribution.
+ ''
echo "bin/mirth3: CC := ${stdenv.cc.targetPrefix}cc \$(C99FLAGS) -O2" >>Makefile
'';
outputs = [
"out"
"lib"
"bin"
"doc"
"examples"
"vim"
];
strictDeps = true;
__structuredAttrs = true;
depsBuildBuild = [ buildPackages.stdenv.cc ];
nativeBuildInputs = [ makeBinaryWrapper ];
buildFlags = [
"bin/mirth2"
"bin/mirth3"
];
# st_mode substitution intentionally diverges from the pre-generated mirth0.c
doCheck = with stdenv.buildPlatform; !(isAarch64 && isLinux);
installPhase = ''
runHook preInstall
install -d "$lib/lib/mirth" "$doc/share/doc/mirth/tutorial" \
"$examples/share/mirth/examples" "$vim"
cp -Tr lib "$lib/lib/mirth"
cp -Tr examples "$examples/share/mirth/examples"
cp -Tr tutorial "$doc/share/doc/mirth/tutorial"
cp -Tr tools/mirth-vim "$vim"
bin/mirth2 src/main.mth --docs "$doc/share/doc/mirth" -c
install -Dm644 LICENSE README.md -t "$doc/share/doc/mirth"
# stages 02 arent needed anymore
install -Dm755 bin/mirth3 "$bin/bin/mirth"
runHook postInstall
'';
# The raw binary @ $bin needs wrapping to get the stdlib @ $lib. By wrapping
# it here, it will be more flexible towards allowing users to wrap the Mirth
# binary with their own stdlib & other packages.
postFixup = ''
makeBinaryWrapper "$bin/bin/mirth" "$out/bin/mirth" \
--add-flags "-P $lib/lib/mirth"
'';
meta = {
description = "Concatenative functional programming language with strong static linear types";
longDescription = ''
Mirth is inspired by Forth, Joy, Haskell, Lisp, and monoidal category theory.
Mirth compiles to C99.
'';
homepage = "https://git.sr.ht/~typeswitch/mirth";
license = lib.licenses.bsd0;
mainProgram = "mirth";
# https://git.sr.ht/~typeswitch/mirth/tree/main/item/src/mirth.h#L4-22
platforms = [
"aarch64-darwin"
"aarch64-linux"
"aarch64-windows"
"i686-linux"
"i686-windows"
"x86_64-darwin"
"x86_64-linux"
"x86_64-windows"
];
maintainers = with lib.maintainers; [ toastal ];
};
}
+3 -3
View File
@@ -6,16 +6,16 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "nixpkgs-vet";
version = "0.3.2";
version = "0.3.3";
src = fetchFromGitHub {
owner = "NixOS";
repo = "nixpkgs-vet";
tag = "v${finalAttrs.version}";
hash = "sha256-GJhN77zLtV2fUEL5wxjcybtDqUa6ODg39d3UxuOrapo=";
hash = "sha256-vOKZ5Da6PMI39WlOS7CXDME3oCvJw64dQDEfaCsDL0A=";
};
cargoHash = "sha256-zTh18jec0trJP4q3rYheHZz01lbkhpDaotuPbvgzMpo=";
cargoHash = "sha256-9XQvmYO4bw57NoKsXTY281fMQE0vjV3pvoRlrUaRX3o=";
doCheck = false;
+9 -5
View File
@@ -11,7 +11,7 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "raycast-beta";
version = "0.60.0.0";
version = "0.65.1.0";
__structuredAttrs = true;
strictDeps = true;
@@ -20,8 +20,8 @@ stdenvNoCC.mkDerivation (finalAttrs: {
{
aarch64-darwin = fetchurl {
name = "Raycast_Beta.dmg";
url = "https://x-r2.raycast-releases.com/Raycast_Beta_${finalAttrs.version}_2fc04147cc_arm64.dmg";
hash = "sha256-PQX5l5UzlphKySIR5QRcJvJLe9NxQrTOPLy3itV0QHU=";
url = "https://x-r2.raycast-releases.com/Raycast_Beta_0.65.1.0_66eacbc22e_arm64.dmg";
hash = "sha256-K9OuqlUR0E3hIVonSuBYAWFAvQCZQG35fsv5OWO8gKM=";
};
}
.${stdenvNoCC.system} or (throw "raycast-beta: ${stdenvNoCC.system} is unsupported.");
@@ -68,10 +68,14 @@ stdenvNoCC.mkDerivation (finalAttrs: {
meta = {
description = "Control your tools with a few keystrokes - beta release";
homepage = "https://raycast.app/";
homepage = "https://raycast.app/new";
changelog = "https://www.raycast.com/changelog/macos-beta";
license = lib.licenses.unfree;
mainProgram = "raycast-beta";
maintainers = with lib.maintainers; [ FlameFlag ];
maintainers = with lib.maintainers; [
FlameFlag
Br1ght0ne
];
platforms = [ "aarch64-darwin" ];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
+4 -4
View File
@@ -23,13 +23,13 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "readest";
version = "0.11.4";
version = "0.11.12";
src = fetchFromGitHub {
owner = "readest";
repo = "readest";
tag = "v${finalAttrs.version}";
hash = "sha256-tudx4LLRZXjA5wgfnA7+pBgBIUv1ZOYl2DZbsx7sWr0=";
hash = "sha256-3nUmizE5g2ICWd/1rpsq35w8VzKEg8OMuIceNULR6SM=";
fetchSubmodules = true;
};
@@ -46,11 +46,11 @@ rustPlatform.buildRustPackage (finalAttrs: {
inherit (finalAttrs) pname version src;
pnpm = pnpm_11;
fetcherVersion = 3;
hash = "sha256-K6KQfXKBopTFJ4LKbFYSe0wVtwWkkhj40nMzYosBeGw=";
hash = "sha256-dxcQmbJHWwkPOR9JYMSL8x3Fb4Z65lhVVF5DUDHPOtk=";
};
cargoRoot = "../..";
cargoHash = "sha256-HQ7nQvxpfGTudOTGVaXRPqaxFrAOA2HnIcgFpmJsgDI=";
cargoHash = "sha256-t7pP3VP80/ex4iKwa0/ogEppeE6zPjEvZp53VwPg/Iw=";
buildAndTestSubdir = "src-tauri";
+2 -2
View File
@@ -11,13 +11,13 @@
buildGoModule (finalAttrs: {
pname = "rosa";
version = "1.2.63";
version = "1.2.64";
src = fetchFromGitHub {
owner = "openshift";
repo = "rosa";
rev = "v${finalAttrs.version}";
hash = "sha256-8+4Ip9PGSIIfZ1zfkihrahh/65fBBAYWhVqdpeP0eB0=";
hash = "sha256-lvulPx9Vyo84Lt1yo/7LKsWEh0ABkRxhusXyO/aUVrU=";
};
vendorHash = null;
+3 -3
View File
@@ -5,17 +5,17 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "rust-rpxy";
version = "0.13.0";
version = "0.13.2";
src = fetchFromGitHub {
owner = "junkurihara";
repo = "rust-rpxy";
tag = finalAttrs.version;
hash = "sha256-YGXvRnpDKUi1qGJasTUrfa95AWsHAT+V/La1WOZIUkI=";
hash = "sha256-fdpr6HWMuMT0nXj7V5JQbiLVOGoWaTsX1OI+yCEErDA=";
fetchSubmodules = true;
};
cargoHash = "sha256-CiauwBhv9Phdlpe7V9KwmgUvMSSFBLYPrlDl1lRT5/c=";
cargoHash = "sha256-WsK7eQffO+Ehx6H2Jj99XWON1Wc3Ud5Yaq1Nyz/oeSY=";
meta = {
description = "Http reverse proxy serving multiple domain names and terminating TLS for http/1.1, 2 and 3, written in Rust";
+4 -4
View File
@@ -12,17 +12,17 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "seconlay";
version = "0-unstable-2026-06-09";
version = "0-unstable-2026-06-18";
src = fetchFromGitLab {
group = "alasca.cloud";
owner = "scl";
repo = "scl-management";
rev = "1b410ebd9775faa116629a7bec01463ce9038a56";
hash = "sha256-Qq7bX1C+QTcYXfn8DGJwZZT0N1YfbywUe9jwqdReNLU=";
rev = "bd2d56e3537824537390cb0ba5e9efd4db1410c2";
hash = "sha256-f/eySU2lq1DwFPZ1CD8P7EeVO8b26Fz6d3PH3OrTm/0=";
};
cargoHash = "sha256-pb9xqdgWrf8Lc10jSkkDb/1n0e15fMQ3AcKNPw6/vi8=";
cargoHash = "sha256-aX5HL/zDdrQ+V4vCYZrqlO2vNWuvF4GW2P30jtbv1tE=";
nativeBuildInputs = [
pkg-config
+3 -3
View File
@@ -37,13 +37,13 @@ let
apprise
];
version = "1.3.0";
version = "1.3.2";
src = fetchFromGitHub {
owner = "calibrain";
repo = "shelfmark";
tag = "v${version}";
hash = "sha256-rkGz7I3Gb/c4ndoB+YqStEhp0iv3IrB/gwq5gTWm5+c=";
hash = "sha256-3Z+e7d8kSckbIfobm8peOlg19IkW7AidJ3wOjz4dEOc=";
};
frontend = buildNpmPackage (finalAttrs: {
@@ -52,7 +52,7 @@ let
sourceRoot = "${finalAttrs.src.name}/src/frontend";
npmDepsHash = "sha256-RkhjPdogxnZgaL+DysWO7Iy7EFAifskAxhALWX4n5qI=";
npmDepsHash = "sha256-fdocgRnduehA3LKHrVrxGmLEYgZDRTo20HSCh80RJIg=";
installPhase = ''
runHook preInstall
+3 -3
View File
@@ -12,16 +12,16 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "spotatui";
version = "0.38.6";
version = "0.39.1";
src = fetchFromGitHub {
owner = "LargeModGames";
repo = "spotatui";
tag = "v${finalAttrs.version}";
hash = "sha256-2H/HvyGc2xxP1S0eiP2eSiBOjkzKdqyOOD+8mLVLvE0=";
hash = "sha256-fuOSJSN5bKKmEVZZnzckNOxGK1+gDC9pU0vO7MHowis=";
};
cargoHash = "sha256-3Ht4LjwFmmf07XizPrH66V2yPkOzrY4dVvvA4GRAcTs=";
cargoHash = "sha256-fe86HbNckgFruPl8KIW2akW6qFOpR98iCde9kRXthpM=";
nativeBuildInputs = [ pkg-config ] ++ lib.optional withPipewireVisualizer rustPlatform.bindgenHook;
@@ -9,13 +9,13 @@
stdenvNoCC.mkDerivation {
pname = "steam-devices-udev-rules";
version = "1.0.0.61-unstable-2026-04-16";
version = "1.0.0.61-unstable-2026-06-11";
src = fetchFromGitHub {
owner = "ValveSoftware";
repo = "steam-devices";
rev = "39e7bd00f7a322e5165fd8f416b31d23daf6d385";
hash = "sha256-QjFyzSwqwzPz06Wcj7in91tlhaxgw0DydLgsjC+i6Lo=";
rev = "bbf6cf03104aed5f73ac2798bdb09dc63ea3adf8";
hash = "sha256-22blCo0NpPE39BevFsj/Xtz2K59eyPW1xjhJMXAoR/k=";
};
nativeBuildInputs = [
+116
View File
@@ -0,0 +1,116 @@
{
lib,
stdenv,
nixosTests,
fetchFromGitHub,
fetchYarnDeps,
yarnConfigHook,
rustPlatform,
nodejs,
pdfium-binaries,
openssl,
dbus,
glib,
gtk3,
webkitgtk_4_1,
cacert,
pkg-config,
makeWrapper,
}:
let
version = "0.1.5";
src = fetchFromGitHub {
owner = "stumpapp";
repo = "stump";
tag = "v${version}";
hash = "sha256-kstMk4HJopLHW22ynVZF0itWUixwiDkbsMUpYMvw1Ag=";
};
frontend = stdenv.mkDerivation (finalAttrs: {
pname = "stump-frontend";
inherit src version;
yarnOfflineCache = fetchYarnDeps {
yarnLock = finalAttrs.src + "/yarn.lock";
hash = "sha256-Zh0GmxzDZ9YkUVK9i4cT4NKm83Rgcdi1qGmvA8RdDUM=";
};
nativeBuildInputs = [
yarnConfigHook
nodejs
];
buildPhase = ''
runHook preBuild
pushd apps/web
node ./node_modules/.bin/vite build
popd
runHook postBuild
'';
installPhase = ''
mv ./apps/web/dist $out
'';
});
in
rustPlatform.buildRustPackage (finalAttrs: {
pname = "stump";
inherit src version;
__structuredAttrs = true;
cargoHash = "sha256-ZFIoxlArbhD+kZfX8K1iWmIaFSPfk9DeO9mL9PUZCnI=";
cargoBuildFlags = [
"--package"
"stump_server"
"--bin"
"stump_server"
];
env.GIT_REV = "v${version}";
nativeBuildInputs = [
pkg-config
makeWrapper
];
nativeCheckInputs = [
cacert
];
buildInputs = [
openssl
dbus
glib
gtk3
webkitgtk_4_1
];
preCheck = ''
export HOME=$TMP
'';
postInstall = ''
wrapProgram $out/bin/stump_server \
--set-default STUMP_CONFIG_DIR /var/lib/stump/config \
--set-default STUMP_CLIENT_DIR ${frontend} \
--set-default STUMP_PORT 10001 \
--set-default STUMP_PROFILE release \
--set-default PDFIUM_PATH ${pdfium-binaries}/lib/libpdfium.so \
--set-default API_VERSION v1
'';
passthru.tests = nixosTests.stump;
meta = {
homepage = "https://stumpapp.dev/";
description = "A free and open source comics, manga and digital book server with OPDS support";
license = lib.licenses.mit;
platforms = [ "x86_64-linux" ];
mainProgram = "stump_server";
};
})
+25 -3
View File
@@ -5,15 +5,20 @@
xar,
cpio,
pbzx,
writeShellApplication,
cacert,
curl,
jq,
common-updater-scripts,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "tailscale-gui";
version = "1.92.3";
version = "1.98.5";
src = fetchurl {
url = "https://pkgs.tailscale.com/stable/Tailscale-${finalAttrs.version}-macos.pkg";
hash = "sha256-K5tJHyFhqnxV4KHzr7YOHRoH33vk+dq+EVWyUo88nuI=";
hash = "sha256-r7e8aKNWaX1psI0a3sohTUv8xmUv8oebH/ndjeHLoVA=";
};
dontUnpack = true;
@@ -39,13 +44,30 @@ stdenvNoCC.mkDerivation (finalAttrs: {
runHook postInstall
'';
passthru.updateScript = lib.getExe (writeShellApplication {
name = "tailscale-gui-update-script";
runtimeInputs = [
cacert
curl
jq
common-updater-scripts
];
text = ''
version=$(curl --silent "https://pkgs.tailscale.com/stable/?mode=json&os=darwin" | jq -r '.MacZipsVersion')
update-source-version tailscale-gui "$version"
'';
});
meta = {
description = "Tailscale GUI client for macOS";
homepage = "https://tailscale.com";
changelog = "https://tailscale.com/changelog#client";
license = lib.licenses.unfree;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
maintainers = with lib.maintainers; [ anish ];
maintainers = with lib.maintainers; [
anish
Br1ght0ne
];
platforms = lib.platforms.darwin;
};
})
+29 -11
View File
@@ -6,6 +6,7 @@
alsa-utils,
copyDesktopItems,
electron_41,
libicns,
makeDesktopItem,
makeWrapper,
nix-update-script,
@@ -18,22 +19,23 @@ let
in
buildNpmPackage rec {
pname = "teams-for-linux";
version = "2.11.1";
version = "2.12.0";
src = fetchFromGitHub {
owner = "IsmaelMartinez";
repo = "teams-for-linux";
tag = "v${version}";
hash = "sha256-XEu0x9g2mEsmY+vZtazTOzW6KNMRbrxlPck/kPNehmo=";
hash = "sha256-n9Ibno6NqiZ9W5KpPPZKD5/MTO8CKYdf/fXDf0cGsi4=";
};
npmDepsHash = "sha256-urLRj7668NX7CaDWAVxAoOg+c1TmMyvf23Je+RmFwHE=";
npmDepsHash = "sha256-euf/6RtAO84ZtbdhglBd6gRCcg2m6a+fhthNvFzMlho=";
nativeBuildInputs = [
makeWrapper
versionCheckHook
]
++ lib.optionals (stdenv.hostPlatform.isLinux) [ copyDesktopItems ];
++ lib.optionals (stdenv.hostPlatform.isLinux) [ copyDesktopItems ]
++ lib.optionals (stdenv.hostPlatform.isDarwin) [ libicns ];
doInstallCheck = stdenv.hostPlatform.isLinux;
@@ -48,13 +50,29 @@ buildNpmPackage rec {
cp -r ${electron.dist}/. "$electron_dist"
chmod -R u+w "$electron_dist"
npm exec electron-builder -- \
--dir \
-c.npmRebuild=true \
-c.asarUnpack="**/*.node" \
-c.electronDist="$electron_dist" \
-c.electronVersion=${electron.version} \
-c.mac.identity=null
electron_builder_args=(
--dir
-c.npmRebuild=true
-c.asarUnpack="**/*.node"
-c.electronDist="$electron_dist"
-c.electronVersion=${electron.version}
-c.mac.identity=null
)
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
png2icns build/icon.icns \
build/icons/16x16.png \
build/icons/32x32.png \
build/icons/128x128.png \
build/icons/256x256.png \
build/icons/512x512.png \
build/icons/1024x1024.png
electron_builder_args+=(-c.mac.icon=build/icon.icns)
''
+ ''
npm exec electron-builder -- "''${electron_builder_args[@]}"
runHook postBuild
'';
+41
View File
@@ -0,0 +1,41 @@
{
lib,
stdenvNoCC,
unzip,
fetchurl,
nix-update-script,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "thaw";
version = "1.2.0";
src = fetchurl {
url = "https://github.com/stonerl/Thaw/releases/download/${finalAttrs.version}/Thaw_${finalAttrs.version}.zip";
hash = "sha256-1n9NMe+foFeEmphUC4EM+kLgvGYBnTYFq9CORcaaoG8=";
};
__structuredAttrs = true;
strictDeps = true;
sourceRoot = ".";
nativeBuildInputs = [ unzip ];
installPhase = ''
runHook preInstall
mkdir -p "$out/Applications"
cp -r Thaw.app "$out/Applications"
runHook postInstall
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "Menu bar manager for macOS 26";
homepage = "https://github.com/stonerl/Thaw";
license = lib.licenses.gpl3;
maintainers = with lib.maintainers; [ Br1ght0ne ];
platforms = lib.platforms.darwin;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
})
+27 -10
View File
@@ -2,6 +2,7 @@
stdenv,
lib,
fetchFromGitHub,
fetchpatch,
docbook_xsl,
exempi,
gdk-pixbuf,
@@ -25,6 +26,11 @@
yelp-tools,
xapp,
xapp-symbolic-icons,
gnome,
libavif,
libheif,
libjxl,
webp-pixbuf-loader,
}:
stdenv.mkDerivation (finalAttrs: {
@@ -38,6 +44,14 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-ayd91gVLuSUVlCxaPSBbx7hg4tthVTaBEnl5V9YYbQw=";
};
patches = [
# build: Add support for GIRepository-2.0.
(fetchpatch {
url = "https://github.com/linuxmint/xviewer/commit/74d7d4ba2584c658ae6fb87208543671664943cc.patch";
hash = "sha256-lL4MTvC2RvdVZ4O5RaYyK+1sHnLGPYzGNbZ99aN22U8=";
})
];
nativeBuildInputs = [
docbook_xsl
gobject-introspection
@@ -66,16 +80,19 @@ stdenv.mkDerivation (finalAttrs: {
xapp
];
postPatch = ''
# Switch to girepository-2.0
substituteInPlace src/main.c \
--replace-fail "#include <girepository.h>" "#include <girepository/girepository.h>" \
--replace-fail "g_irepository_get_option_group" "gi_repository_get_option_group"
substituteInPlace src/xviewer-plugin-engine.c \
--replace-fail "#include <girepository.h>" "#include <girepository/girepository.h>" \
--replace-fail "g_irepository_get_default" "gi_repository_dup_default" \
--replace-fail "g_irepository_require" "gi_repository_require"
postInstall = ''
# In postInstall to run before gappsWrapperArgsHook.
export GDK_PIXBUF_MODULE_FILE="${
gnome._gdkPixbufCacheBuilder_DO_NOT_USE {
extraLoaders = [
libavif
libheif.lib
libjxl
librsvg
webp-pixbuf-loader
];
}
}"
'';
preFixup = ''
@@ -44,7 +44,6 @@ rustPlatform.buildRustPackage (finalAttrs: {
license = lib.licenses.mit;
mainProgram = "yarn-berry-fetcher";
maintainers = with lib.maintainers; [
yuka
flokli
];
};
@@ -8,14 +8,14 @@
buildPythonPackage (finalAttrs: {
pname = "altcha";
version = "2.0.0";
version = "2.0.2";
pyproject = true;
src = fetchFromGitHub {
owner = "altcha-org";
repo = "altcha-lib-py";
tag = "v${finalAttrs.version}";
hash = "sha256-k5vy6lalC3idiquXbDCwF+mObzja/QC3PRBGQJMZ6fA=";
hash = "sha256-7KepW5PAl2prWdylBqBM/GDvsLGW+6le/itUiMBvFFU=";
};
build-system = [ setuptools ];
@@ -1,8 +1,16 @@
{
lib,
buildPythonPackage,
cairo,
fetchFromGitHub,
fetchNpmDeps,
giflib,
hatchling,
nodejs,
npmHooks,
pango,
pixman,
pkg-config,
yt-dlp,
}:
@@ -18,7 +26,27 @@ buildPythonPackage rec {
hash = "sha256-dhpataQ1HSCRPnm4k3K/NMaQPQdNrx8C4q855l7kbbQ=";
};
sourceRoot = "${src.name}/plugin";
npmDeps = fetchNpmDeps {
name = "${pname}-${version}-npm-deps";
src = src + "/server";
npmDepsFetcherVersion = 2;
hash = "sha256-Qwwi6W+Oeu6ZeLmZP5vEfAKOJyivbULR5mlk7tcVIE8=";
};
npmRoot = "server";
nativeBuildInputs = [
nodejs
npmHooks.npmConfigHook
pkg-config
];
buildInputs = [
cairo
giflib
pango
pixman
];
build-system = [ hatchling ];
@@ -26,10 +54,29 @@ buildPythonPackage rec {
doCheck = false; # no tests
preBuild = ''
cd server
npx tsc
npm prune --omit=dev
cd ../plugin
'';
postInstall = ''
cd ..
mkdir -p $out/share/bgutil-ytdlp-pot-provider/
cp -r server/{build,node_modules} $out/share/bgutil-ytdlp-pot-provider/
makeWrapper ${lib.getExe nodejs} $out/bin/bgutil-ytdlp-pot-provider \
--add-flags $out/share/bgutil-ytdlp-pot-provider/build/main.js
cd plugin
'';
meta = {
description = "Proof-of-origin token provider plugin for yt-dlp";
homepage = "https://github.com/Brainicism/bgutil-ytdlp-pot-provider";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [ hexa ];
mainProgram = "bgutil-ytdlp-pot-provider";
};
}
@@ -10,7 +10,7 @@
python-glanceclient,
setuptools,
stestr,
subunit,
python-subunit,
testscenarios,
testtools,
}:
@@ -40,7 +40,7 @@ buildPythonPackage rec {
nativeCheckInputs = [
fixtures
jsonschema
subunit
python-subunit
oslotest
stestr
testscenarios
@@ -5,7 +5,7 @@
fixtures,
pbr,
six,
subunit,
python-subunit,
callPackage,
}:
@@ -24,7 +24,7 @@ buildPythonPackage rec {
propagatedBuildInputs = [
fixtures
six
subunit
python-subunit
];
# check in passthru.tests.pytest to escape infinite recursion with other oslo components
@@ -12,14 +12,14 @@
buildPythonPackage rec {
pname = "pyanglianwater";
version = "3.2.1";
version = "3.2.2";
pyproject = true;
src = fetchFromGitHub {
owner = "pantherale0";
repo = "pyanglianwater";
tag = version;
hash = "sha256-BAP3daKCIu0ANb1eUgElZ+stUt4Z5ffKia4snFXoeTA=";
hash = "sha256-u1s/XsNN6AuTzj0jLE7us1Mmoe8r+VuCl0khS5BRxkQ=";
};
build-system = [ setuptools ];
@@ -7,7 +7,7 @@
doc8,
docutils,
pygments,
subunit,
python-subunit,
oslotest,
stestr,
testscenarios,
@@ -29,7 +29,7 @@ buildPythonPackage {
doc8
docutils
pygments
subunit
python-subunit
oslotest
stestr
testscenarios
@@ -18,8 +18,8 @@
}:
buildPythonPackage {
pname = "python-subunit";
inherit (subunit)
pname
version
src
meta
@@ -5,7 +5,7 @@
cliff,
fixtures,
flit-core,
subunit,
python-subunit,
testtools,
tomlkit,
voluptuous,
@@ -29,7 +29,7 @@ buildPythonPackage rec {
dependencies = [
cliff
fixtures
subunit
python-subunit
testtools
tomlkit
voluptuous
@@ -24,7 +24,7 @@
setuptools,
stestr,
stevedore,
subunit,
python-subunit,
testscenarios,
testtools,
urllib3,
@@ -67,7 +67,7 @@ buildPythonPackage rec {
pyyaml
stestr
stevedore
subunit
python-subunit
testscenarios
testtools
urllib3
@@ -5,7 +5,7 @@
testtools,
testresources,
pbr,
subunit,
python-subunit,
fixtures,
python,
}:
@@ -24,7 +24,7 @@ buildPythonPackage rec {
buildInputs = [ pbr ];
propagatedBuildInputs = [
fixtures
subunit
python-subunit
testtools
];
@@ -2,25 +2,32 @@
lib,
buildPythonPackage,
fetchPypi,
setuptools,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "webrtcvad";
version = "2.0.10";
format = "setuptools";
pyproject = true;
__structuredAttrs = true;
src = fetchPypi {
inherit pname version;
sha256 = "f1bed2fb25b63fb7b1a55d64090c993c9c9167b28485ae0bcdd81cf6ede96aea";
inherit (finalAttrs) pname version;
hash = "sha256-8b7S+yW2P7expV1kCQyZPJyRZ7KEha4Lzdgc9u3pauo=";
};
build-system = [ setuptools ];
# required WAV files for testing are not included in the tarball
doCheck = false;
pythonImportsCheck = [ "webrtcvad" ];
meta = {
description = "Interface to the Google WebRTC Voice Activity Detector (VAD)";
homepage = "https://github.com/wiseman/py-webrtcvad";
license = with lib.licenses; [ mit ];
maintainers = with lib.maintainers; [ prusnak ];
};
}
})
+32 -58
View File
@@ -3963,79 +3963,53 @@ with pkgs;
llvmPackagesSet = recurseIntoAttrs (callPackages ../development/compilers/llvm { });
llvmPackages_18 = llvmPackagesSet."18";
clang_18 = llvmPackages_18.clang;
lld_18 = llvmPackages_18.lld;
lldb_18 = llvmPackages_18.lldb;
llvm_18 = llvmPackages_18.llvm;
llvmPackages_19 = llvmPackagesSet."19";
clang_19 = llvmPackages_19.clang;
lld_19 = llvmPackages_19.lld;
lldb_19 = llvmPackages_19.lldb;
llvm_19 = llvmPackages_19.llvm;
bolt_19 = llvmPackages_19.bolt;
llvmPackages_20 = llvmPackagesSet."20";
clang_20 = llvmPackages_20.clang;
lld_20 = llvmPackages_20.lld;
lldb_20 = llvmPackages_20.lldb;
llvm_20 = llvmPackages_20.llvm;
bolt_20 = llvmPackages_20.bolt;
flang_20 = llvmPackages_20.flang;
llvmPackages_21 = llvmPackagesSet."21";
clang_21 = llvmPackages_21.clang;
lld_21 = llvmPackages_21.lld;
lldb_21 = llvmPackages_21.lldb;
llvm_21 = llvmPackages_21.llvm;
bolt_21 = llvmPackages_21.bolt;
flang_21 = llvmPackages_21.flang;
llvmPackages_22 = llvmPackagesSet."22";
clang_22 = llvmPackages_22.clang;
lld_22 = llvmPackages_22.lld;
lldb_22 = llvmPackages_22.lldb;
llvm_22 = llvmPackages_22.llvm;
bolt_22 = llvmPackages_22.bolt;
flang_22 = llvmPackages_22.flang;
mkLLVMPackages = llvmPackagesSet.mkPackage;
})
llvmPackages_18
clang_18
lld_18
lldb_18
llvm_18
llvmPackages_19
clang_19
lld_19
lldb_19
llvm_19
bolt_19
llvmPackages_20
clang_20
lld_20
lldb_20
llvm_20
bolt_20
flang_20
llvmPackages_21
clang_21
lld_21
lldb_21
llvm_21
bolt_21
flang_21
llvmPackages_22
clang_22
lld_22
lldb_22
llvm_22
bolt_22
flang_22
mkLLVMPackages
;
clang_18 = llvmPackages_18.clang;
lld_18 = llvmPackages_18.lld;
lldb_18 = llvmPackages_18.lldb;
llvm_18 = llvmPackages_18.llvm;
clang_19 = llvmPackages_19.clang;
lld_19 = llvmPackages_19.lld;
lldb_19 = llvmPackages_19.lldb;
llvm_19 = llvmPackages_19.llvm;
bolt_19 = llvmPackages_19.bolt;
clang_20 = llvmPackages_20.clang;
lld_20 = llvmPackages_20.lld;
lldb_20 = llvmPackages_20.lldb;
llvm_20 = llvmPackages_20.llvm;
bolt_20 = llvmPackages_20.bolt;
flang_20 = llvmPackages_20.flang;
clang_21 = llvmPackages_21.clang;
lld_21 = llvmPackages_21.lld;
lldb_21 = llvmPackages_21.lldb;
llvm_21 = llvmPackages_21.llvm;
bolt_21 = llvmPackages_21.bolt;
flang_21 = llvmPackages_21.flang;
clang_22 = llvmPackages_22.clang;
lld_22 = llvmPackages_22.lld;
lldb_22 = llvmPackages_22.lldb;
llvm_22 = llvmPackages_22.llvm;
bolt_22 = llvmPackages_22.bolt;
flang_22 = llvmPackages_22.flang;
mitschemeX11 = mitscheme.override {
enableX11 = true;
};
+1
View File
@@ -601,6 +601,7 @@ mapAliases {
sqlalchemy_migrate = throw "'sqlalchemy_migrate' has been renamed to/replaced by 'sqlalchemy-migrate'"; # Converted to throw 2025-10-29
steamship = throw "'steamship' has been removed because it is broken and unmaintained upstream"; # Added 2026-05-06
subunit2sql = throw "subunit2sql has been removed because it has been marked as broken since at least November 2024."; # Added 2025-10-04
subunit = python-subunit; # added 2026-06-21
supafunc = throw "'supafunc' has been replaced by 'supabase-functions'"; # Added 2026-03-08
supervise_api = throw "'supervise_api' has been renamed to/replaced by 'supervise-api'"; # Converted to throw 2025-10-29
swh-perfecthash = throw "'swh-perfecthash' has been renamed to/replaced by 'swh-shard'"; # added 2025-11-13
+4 -4
View File
@@ -16341,6 +16341,10 @@ self: super: with self; {
python-string-utils = callPackage ../development/python-modules/python-string-utils { };
python-subunit = callPackage ../development/python-modules/python-subunit {
inherit (pkgs) subunit cppunit check;
};
python-swiftclient = callPackage ../development/python-modules/python-swiftclient { };
python-tado = callPackage ../development/python-modules/python-tado { };
@@ -19204,10 +19208,6 @@ self: super: with self; {
subprocess4 = callPackage ../development/python-modules/subprocess4 { };
subunit = callPackage ../development/python-modules/subunit {
inherit (pkgs) subunit cppunit check;
};
subzerod = callPackage ../development/python-modules/subzerod { };
succulent = callPackage ../development/python-modules/succulent { };