Merge staging-next into staging

This commit is contained in:
nixpkgs-ci[bot]
2025-06-23 00:19:30 +00:00
committed by GitHub
30 changed files with 612 additions and 384 deletions
+2 -1
View File
@@ -61,7 +61,8 @@
### Breaking changes {#sec-nixpkgs-release-25.11-lib-breaking}
- Create the first release note entry in this section!
- `reaction` has been updated to version 2, which includes some breaking changes.
For more information, [check the release article](https://blog.ppom.me/en-reaction-v2).
### Deprecations {#sec-nixpkgs-release-25.11-lib-deprecations}
+14
View File
@@ -4628,6 +4628,13 @@
githubId = 2245737;
name = "Christopher Mark Poole";
};
chrjabs = {
email = "contact@christophjabs.info";
github = "chrjabs";
githubId = 98587286;
name = "Christoph Jabs";
keys = [ { fingerprint = "47D6 1FEB CD86 F3EC D2E3 D68A 83D0 74F3 48B2 FD9D"; } ];
};
chrpinedo = {
github = "chrpinedo";
githubId = 2324630;
@@ -5986,6 +5993,13 @@
githubId = 30749142;
keys = [ { fingerprint = "4E35 F2E5 2132 D654 E815 A672 DB2C BC24 2868 6000"; } ];
};
debling = {
name = "Denilson S. Ebling";
email = "d.ebling8@gmail.com";
github = "debling";
githubId = 32403873;
keys = [ { fingerprint = "3EDD 9C88 B0F2 58F8 C25F 5D2C CCBC 8AA1 AF06 2142"; } ];
};
declan = {
name = "Declan Rixon";
email = "declan.fraser.rixon@gmail.com";
+8 -1
View File
@@ -543,7 +543,14 @@ in
mimir = runTest ./mimir.nix;
galene = discoverTests (import ./galene.nix);
gancio = runTest ./gancio.nix;
garage = handleTest ./garage { };
garage_1 = import ./garage {
inherit runTest;
package = pkgs.garage_1;
};
garage_2 = import ./garage {
inherit runTest;
package = pkgs.garage_2;
};
gatus = runTest ./gatus.nix;
getaddrinfo = runTest ./getaddrinfo.nix;
gemstash = handleTest ./gemstash.nix { };
+28 -94
View File
@@ -1,106 +1,40 @@
args@{ mkNode, ver, ... }:
(import ../make-test-python.nix (
{ pkgs, ... }:
{
name = "garage-basic";
meta = {
maintainers = with pkgs.lib.maintainers; [ raitobezarius ];
{
lib,
mkNode,
package,
testScriptSetup,
...
}:
{
name = "garage-basic";
nodes = {
single_node = mkNode {
extraSettings =
if (lib.versionAtLeast package.version "2") then
{
replication_factor = 1;
consistency_mode = "consistent";
}
else
{
replication_mode = "none";
};
};
};
nodes = {
single_node = mkNode { replicationMode = "none"; };
};
testScript = ''
from typing import List
from dataclasses import dataclass
import re
start_all()
cur_version_regex = re.compile('Current cluster layout version: (?P<ver>\d*)')
key_creation_regex = re.compile('Key name: (?P<key_name>.*)\nKey ID: (?P<key_id>.*)\nSecret key: (?P<secret_key>.*)')
@dataclass
class S3Key:
key_name: str
key_id: str
secret_key: str
@dataclass
class GarageNode:
node_id: str
host: str
def get_node_fqn(machine: Machine) -> GarageNode:
node_id, host = machine.succeed("garage node id").split('@')
return GarageNode(node_id=node_id, host=host)
def get_node_id(machine: Machine) -> str:
return get_node_fqn(machine).node_id
def get_layout_version(machine: Machine) -> int:
version_data = machine.succeed("garage layout show")
m = cur_version_regex.search(version_data)
if m and m.group('ver') is not None:
return int(m.group('ver')) + 1
else:
raise ValueError('Cannot find current layout version')
def apply_garage_layout(machine: Machine, layouts: List[str]):
for layout in layouts:
machine.succeed(f"garage layout assign {layout}")
version = get_layout_version(machine)
machine.succeed(f"garage layout apply --version {version}")
def create_api_key(machine: Machine, key_name: str) -> S3Key:
output = machine.succeed(f"garage key ${
if ver == "0_8" then "new --name" else "create"
} {key_name}")
m = key_creation_regex.match(output)
if not m or not m.group('key_id') or not m.group('secret_key'):
raise ValueError('Cannot parse API key data')
return S3Key(key_name=key_name, key_id=m.group('key_id'), secret_key=m.group('secret_key'))
def get_api_key(machine: Machine, key_pattern: str) -> S3Key:
output = machine.succeed(f"garage key info {key_pattern}")
m = key_creation_regex.match(output)
if not m or not m.group('key_name') or not m.group('key_id') or not m.group('secret_key'):
raise ValueError('Cannot parse API key data')
return S3Key(key_name=m.group('key_name'), key_id=m.group('key_id'), secret_key=m.group('secret_key'))
def test_bucket_writes(node):
node.succeed("garage bucket create test-bucket")
s3_key = create_api_key(node, "test-api-key")
node.succeed("garage bucket allow --read --write test-bucket --key test-api-key")
other_s3_key = get_api_key(node, 'test-api-key')
assert other_s3_key.secret_key == other_s3_key.secret_key
node.succeed(
f"mc alias set test-garage http://[::1]:3900 {s3_key.key_id} {s3_key.secret_key} --api S3v4"
)
node.succeed("echo test | mc pipe test-garage/test-bucket/test.txt")
assert node.succeed("mc cat test-garage/test-bucket/test.txt").strip() == "test"
def test_bucket_over_http(node, bucket='test-bucket', url=None):
if url is None:
url = f"{bucket}.web.garage"
node.succeed(f'garage bucket website --allow {bucket}')
node.succeed(f'echo hello world | mc pipe test-garage/{bucket}/index.html')
assert (node.succeed(f"curl -H 'Host: {url}' http://localhost:3902")).strip() == 'hello world'
testScript = # python
''
${testScriptSetup}
with subtest("Garage works as a single-node S3 storage"):
single_node.wait_for_unit("garage.service")
single_node.wait_for_open_port(3900)
# Now Garage is initialized.
single_node_id = get_node_id(single_node)
apply_garage_layout(single_node, [f'-z qemutest -c ${
if ver == "0_8" then "1" else "1G"
} "{single_node_id}"'])
apply_garage_layout(single_node, [f'-z qemutest -c 1G "{single_node_id}"'])
# Now Garage is operational.
test_bucket_writes(single_node)
test_bucket_over_http(single_node)
'';
}
))
args
}
+85
View File
@@ -0,0 +1,85 @@
{ ... }:
{
_module.args.testScriptSetup = # python
''
from typing import List
from dataclasses import dataclass
import re
start_all()
cur_version_regex = re.compile(r'Current cluster layout version: (?P<ver>\d*)')
@dataclass
class S3Key:
key_name: str
key_id: str
secret_key: str
@dataclass
class GarageNode:
node_id: str
host: str
def get_node_fqn(machine: Machine) -> GarageNode:
node_id, host = machine.succeed("garage node id").split('@')
return GarageNode(node_id=node_id, host=host)
def get_node_id(machine: Machine) -> str:
return get_node_fqn(machine).node_id
def get_layout_version(machine: Machine) -> int:
version_data = machine.succeed("garage layout show")
m = cur_version_regex.search(version_data)
if m and m.group('ver') is not None:
return int(m.group('ver')) + 1
else:
raise ValueError('Cannot find current layout version')
def apply_garage_layout(machine: Machine, layouts: List[str]):
for layout in layouts:
machine.succeed(f"garage layout assign {layout}")
version = get_layout_version(machine)
machine.succeed(f"garage layout apply --version {version}")
def create_api_key(machine: Machine, key_name: str) -> S3Key:
output = machine.succeed(f"garage key create {key_name}")
return parse_api_key_data(output)
def get_api_key(machine: Machine, key_pattern: str) -> S3Key:
output = machine.succeed(f"garage key info {key_pattern}")
return parse_api_key_data(output)
def parse_api_key_data(text) -> S3Key:
key_creation_regex = re.compile(r'Key name: \s*(?P<key_name>.*)|' r'Key ID: \s*(?P<key_id>.*)|' r'Secret key: \s*(?P<secret_key>.*)', re.IGNORECASE)
fields = {}
for match in key_creation_regex.finditer(text):
for key, value in match.groupdict().items():
if value:
fields[key] = value.strip()
try:
return S3Key(**fields)
except TypeError as e:
raise ValueError(f"Cannot parse API key data. Missing required field(s): {e}")
def test_bucket_writes(node):
node.succeed("garage bucket create test-bucket")
s3_key = create_api_key(node, "test-api-key")
node.succeed("garage bucket allow --read --write test-bucket --key test-api-key")
other_s3_key = get_api_key(node, 'test-api-key')
assert other_s3_key.secret_key == other_s3_key.secret_key
node.succeed(
f"mc alias set test-garage http://[::1]:3900 {s3_key.key_id} {s3_key.secret_key} --api S3v4"
)
node.succeed("echo test | mc pipe test-garage/test-bucket/test.txt")
assert node.succeed("mc cat test-garage/test-bucket/test.txt").strip() == "test"
def test_bucket_over_http(node, bucket='test-bucket', url=None):
if url is None:
url = f"{bucket}.web.garage"
node.succeed(f'garage bucket website --allow {bucket}')
node.succeed(f'echo hello world | mc pipe test-garage/{bucket}/index.html')
assert (node.succeed(f"curl -H 'Host: {url}' http://localhost:3902")).strip() == 'hello world'
'';
}
+25 -31
View File
@@ -1,16 +1,12 @@
{
system ? builtins.currentSystem,
config ? { },
pkgs ? import ../../.. { inherit system config; },
runTest,
package,
}:
with pkgs.lib;
let
mkNode =
package:
{
replicationMode,
publicV6Address ? "::1",
extraSettings ? { },
}:
{ pkgs, ... }:
{
@@ -30,8 +26,6 @@ let
enable = true;
inherit package;
settings = {
replication_mode = replicationMode;
rpc_bind_addr = "[::]:3901";
rpc_public_addr = "[${publicV6Address}]:3901";
rpc_secret = "5c1915fa04d0b6739675c61bf5907eb0fe3d9c69850c83820f51b4d25d13868c";
@@ -47,7 +41,7 @@ let
root_domain = ".web.garage";
index = "index.html";
};
};
} // extraSettings;
};
environment.systemPackages = [ pkgs.minio-client ];
@@ -55,24 +49,24 @@ let
virtualisation.diskSize = 2 * 1024;
};
in
foldl
(
matrix: ver:
matrix
// {
"basic${toString ver}" = import ./basic.nix {
inherit system pkgs ver;
mkNode = mkNode pkgs."garage_${ver}";
};
"with-3node-replication${toString ver}" = import ./with-3node-replication.nix {
inherit system pkgs ver;
mkNode = mkNode pkgs."garage_${ver}";
};
}
)
{ }
[
"0_8"
"0_9"
"1_x"
]
{
basic = runTest {
imports = [
./common.nix
./basic.nix
];
_module.args = {
inherit mkNode package;
};
};
with-3node-replication = runTest {
imports = [
./common.nix
./with-3node-replication.nix
];
_module.args = {
inherit mkNode package;
};
};
}
+43 -105
View File
@@ -1,107 +1,47 @@
args@{ mkNode, ver, ... }:
(import ../make-test-python.nix (
{ pkgs, ... }:
{
name = "garage-3node-replication";
meta = {
maintainers = with pkgs.lib.maintainers; [ raitobezarius ];
{
lib,
mkNode,
package,
testScriptSetup,
...
}:
let
extraSettings =
if (lib.versionAtLeast package.version "2") then
{
replication_factor = 3;
consistency_mode = "consistent";
}
else
{
replication_mode = "3";
};
in
{
name = "garage-3node-replication";
nodes = {
node1 = mkNode {
inherit extraSettings;
publicV6Address = "fc00:1::1";
};
nodes = {
node1 = mkNode {
replicationMode = "3";
publicV6Address = "fc00:1::1";
};
node2 = mkNode {
replicationMode = "3";
publicV6Address = "fc00:1::2";
};
node3 = mkNode {
replicationMode = "3";
publicV6Address = "fc00:1::3";
};
node4 = mkNode {
replicationMode = "3";
publicV6Address = "fc00:1::4";
};
node2 = mkNode {
inherit extraSettings;
publicV6Address = "fc00:1::2";
};
node3 = mkNode {
inherit extraSettings;
publicV6Address = "fc00:1::3";
};
node4 = mkNode {
inherit extraSettings;
publicV6Address = "fc00:1::4";
};
};
testScript = ''
from typing import List
from dataclasses import dataclass
import re
start_all()
cur_version_regex = re.compile('Current cluster layout version: (?P<ver>\d*)')
key_creation_regex = re.compile('Key name: (?P<key_name>.*)\nKey ID: (?P<key_id>.*)\nSecret key: (?P<secret_key>.*)')
@dataclass
class S3Key:
key_name: str
key_id: str
secret_key: str
@dataclass
class GarageNode:
node_id: str
host: str
def get_node_fqn(machine: Machine) -> GarageNode:
node_id, host = machine.succeed("garage node id").split('@')
return GarageNode(node_id=node_id, host=host)
def get_node_id(machine: Machine) -> str:
return get_node_fqn(machine).node_id
def get_layout_version(machine: Machine) -> int:
version_data = machine.succeed("garage layout show")
m = cur_version_regex.search(version_data)
if m and m.group('ver') is not None:
return int(m.group('ver')) + 1
else:
raise ValueError('Cannot find current layout version')
def apply_garage_layout(machine: Machine, layouts: List[str]):
for layout in layouts:
machine.succeed(f"garage layout assign {layout}")
version = get_layout_version(machine)
machine.succeed(f"garage layout apply --version {version}")
def create_api_key(machine: Machine, key_name: str) -> S3Key:
output = machine.succeed(f"garage key ${
if ver == "0_8" then "new --name" else "create"
} {key_name}")
m = key_creation_regex.match(output)
if not m or not m.group('key_id') or not m.group('secret_key'):
raise ValueError('Cannot parse API key data')
return S3Key(key_name=key_name, key_id=m.group('key_id'), secret_key=m.group('secret_key'))
def get_api_key(machine: Machine, key_pattern: str) -> S3Key:
output = machine.succeed(f"garage key info {key_pattern}")
m = key_creation_regex.match(output)
if not m or not m.group('key_name') or not m.group('key_id') or not m.group('secret_key'):
raise ValueError('Cannot parse API key data')
return S3Key(key_name=m.group('key_name'), key_id=m.group('key_id'), secret_key=m.group('secret_key'))
def test_bucket_writes(node):
node.succeed("garage bucket create test-bucket")
s3_key = create_api_key(node, "test-api-key")
node.succeed("garage bucket allow --read --write test-bucket --key test-api-key")
other_s3_key = get_api_key(node, 'test-api-key')
assert other_s3_key.secret_key == other_s3_key.secret_key
node.succeed(
f"mc alias set test-garage http://[::1]:3900 {s3_key.key_id} {s3_key.secret_key} --api S3v4"
)
node.succeed("echo test | mc pipe test-garage/test-bucket/test.txt")
assert node.succeed("mc cat test-garage/test-bucket/test.txt").strip() == "test"
def test_bucket_over_http(node, bucket='test-bucket', url=None):
if url is None:
url = f"{bucket}.web.garage"
node.succeed(f'garage bucket website --allow {bucket}')
node.succeed(f'echo hello world | mc pipe test-garage/{bucket}/index.html')
assert (node.succeed(f"curl -H 'Host: {url}' http://localhost:3902")).strip() == 'hello world'
testScript = # python
''
${testScriptSetup}
with subtest("Garage works as a multi-node S3 storage"):
nodes = ('node1', 'node2', 'node3', 'node4')
@@ -125,7 +65,7 @@ args@{ mkNode, ver, ... }:
zones = ["nixcon", "nixcon", "paris_meetup", "fosdem"]
apply_garage_layout(node1,
[
f'{ndata.node_id} -z {zones[index]} -c ${if ver == "0_8" then "1" else "1G"}'
f'{ndata.node_id} -z {zones[index]} -c 1G'
for index, ndata in enumerate(node_ids.values())
])
# Now Garage is operational.
@@ -133,6 +73,4 @@ args@{ mkNode, ver, ... }:
for node in nodes:
test_bucket_over_http(get_machine(node))
'';
}
))
args
}
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "genesis-plus-gx";
version = "0-unstable-2025-06-13";
version = "0-unstable-2025-06-22";
src = fetchFromGitHub {
owner = "libretro";
repo = "Genesis-Plus-GX";
rev = "def3a7c0e413ef35a7d9d4430e5c9c9a5698b4fe";
hash = "sha256-MCLPReWzW+NsEVtt4ySplLzGKGAaNXgDtoPYJC2yY3I=";
rev = "e1b0d20b66441c0ff220abbb1da8e6a911b9a761";
hash = "sha256-pvzLI3G6046W11x8Sfev6W5tGYn8/d2EnmIQc99aHN4=";
};
meta = {
@@ -1,57 +1,54 @@
{
stdenv,
lib,
stdenv,
fetchurl,
libsForQt5,
pkg-config,
bash,
cups,
libssh,
libXpm,
libssh,
nx-libs,
openldap,
openssh,
qt5,
qtbase,
qtsvg,
qtx11extras,
qttools,
phonon,
pkg-config,
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "x2goclient";
version = "4.1.2.2";
version = "4.1.2.3";
src = fetchurl {
url = "https://code.x2go.org/releases/source/${pname}/${pname}-${version}.tar.gz";
sha256 = "yZUyZ8QPpnEZrZanO6yx8mYZbaIFnwzc0bjVGZQh0So=";
url = "https://code.x2go.org/releases/source/x2goclient/x2goclient-${finalAttrs.version}.tar.gz";
hash = "sha256-q4uzx40xYlx0nkLxX4EP49JCknoVKYMIwT3qO5Fayjw=";
};
buildInputs = [
cups
libssh
libXpm
libssh
libsForQt5.phonon
libsForQt5.qtbase
libsForQt5.qtsvg
libsForQt5.qttools
libsForQt5.qtx11extras
nx-libs
openldap
openssh
qtbase
qtsvg
qtx11extras
qttools
phonon
];
nativeBuildInputs = [
pkg-config
qt5.wrapQtAppsHook
libsForQt5.wrapQtAppsHook
];
postPatch = ''
substituteInPlace src/onmainwindow.cpp --replace "/usr/sbin/sshd" "${openssh}/bin/sshd"
substituteInPlace src/onmainwindow.cpp \
--replace-fail "/usr/sbin/sshd" "${lib.getExe' openssh "sshd"}"
substituteInPlace Makefile \
--replace "SHELL=/bin/bash" "SHELL=$SHELL" \
--replace "lrelease-qt4" "${qttools.dev}/bin/lrelease" \
--replace "qmake-qt4" "${qtbase.dev}/bin/qmake" \
--replace "-o root -g root" ""
--replace-fail "SHELL=/bin/bash" "SHELL ?= ${lib.getExe bash}" \
--replace-fail "lrelease-qt4" "${lib.getExe' libsForQt5.qttools.dev "lrelease"}" \
--replace-fail "qmake-qt4" "${lib.getExe' libsForQt5.qtbase.dev "qmake"}" \
--replace-fail "-o root -g root" ""
'';
makeFlags = [
@@ -59,6 +56,10 @@ stdenv.mkDerivation rec {
"ETCDIR=$(out)/etc"
"build_client"
"build_man"
# No rule to make target 'SHELL'
"MAKEOVERRIDES="
".MAKEOVERRIDES="
".MAKEFLAGS="
];
installTargets = [
@@ -71,12 +72,16 @@ stdenv.mkDerivation rec {
"--set QT_QPA_PLATFORM xcb"
];
meta = with lib; {
meta = {
description = "Graphical NoMachine NX3 remote desktop client";
mainProgram = "x2goclient";
homepage = "http://x2go.org/";
maintainers = [ ];
license = licenses.gpl2;
platforms = platforms.linux;
license = with lib.licenses; [
agpl3Plus
mit
free
]; # Some X2Go components are licensed under some license (MIT X11, BSD, etc.)
platforms = lib.platforms.linux;
};
}
})
+2 -2
View File
@@ -52,11 +52,11 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "azahar";
version = "2122";
version = "2122.1";
src = fetchzip {
url = "https://github.com/azahar-emu/azahar/releases/download/${finalAttrs.version}/azahar-unified-source-${finalAttrs.version}.tar.xz";
hash = "sha256-isohwigDgqwPJxinBju1biAXC3CX3JrNJiQ1NY+NjRo=";
hash = "sha256-RQ8dgD09cWyVWGSLzHz1oJOKia1OKr2jHqYwKaVGfxE=";
};
nativeBuildInputs = [
+89
View File
@@ -0,0 +1,89 @@
{
lib,
stdenv,
fetchFromGitHub,
buildNpmPackage,
cargo-tauri,
fetchpatch,
nix-update-script,
openssl,
pkg-config,
rustPlatform,
}:
let
version = "0-unstable-2025-03-07";
src = fetchFromGitHub {
owner = "arg274";
repo = "cambia";
rev = "bef0975f72e15b925d881ab70d3bc556ecf4ff7f";
hash = "sha256-4/GKvU3r4JpOKgkLgSOKEHnSoIsjgjQU6pay2deiIng=";
};
meta = {
description = "Compact disc ripper log checking utility";
homepage = "https://github.com/arg274/cambia";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ ambroisie ];
};
frontend = buildNpmPackage (finalAttrs: {
pname = "cambia-frontend";
inherit version;
src = "${src}/web";
npmDepsHash = "sha256-U+2YfsC4u6rJdeMo2zxWiXGM3061MKCcFl0oZt0ug6o=";
installPhase = ''
runHook preInstall
cp -r build/ $out
runHook postInstall
'';
meta = meta // {
description = "Web UI for Cambia";
};
});
in
rustPlatform.buildRustPackage (finalAttrs: {
pname = "cambia";
inherit version src;
cargoHash = "sha256-dNgFQiJrakdP0ynyVcak6cKU02Z5dcw2nhh9XhlWsOg=";
cargoPatches = [
# https://github.com/arg274/cambia/pull/5
(fetchpatch {
name = "cargo.lock.patch";
url = "https://github.com/arg274/cambia/commit/b47944fbaf4e631ede25c560a4d7e684a2ad5014.patch";
hash = "sha256-y9WkEmzBaFJ0eHWK0hVmB6+IdWespp79N9lSuteZZAI=";
})
];
postPatch = ''
cp -r ${finalAttrs.passthru.frontend} web/build/
'';
nativeBuildInputs = [
pkg-config
];
buildInputs = [
openssl
];
passthru = {
updateScript = nix-update-script {
extraArgs = [
"-s"
"frontend"
];
};
inherit frontend;
};
meta = meta // {
mainProgram = "cambia";
};
})
+3 -3
View File
@@ -2,11 +2,11 @@ GEM
remote: https://rubygems.org/
specs:
colsole (1.0.0)
completely (0.6.3)
completely (0.7.1)
colsole (>= 0.8.1, < 2)
mister_bin (~> 0.7)
docopt_ng (0.7.1)
mister_bin (0.7.6)
mister_bin (0.8.1)
colsole (>= 0.8.1, < 2)
docopt_ng (~> 0.7, >= 0.7.1)
@@ -17,4 +17,4 @@ DEPENDENCIES
completely
BUNDLED WITH
2.5.16
2.6.6
+4 -4
View File
@@ -18,10 +18,10 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0ci8iza647hvc4f1cmf9mpsm3i78ysf6g6213wkyrr5jk296hjjb";
sha256 = "0129alz54h2vy7vd19i5664sasdbvrl4zgj70hl5j4rpvckr5lf8";
type = "gem";
};
version = "0.6.3";
version = "0.7.1";
};
docopt_ng = {
groups = [ "default" ];
@@ -42,9 +42,9 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0xx8cxvzcn47zsnshcllf477x4rbssrchvp76929qnsg5k9q7fas";
sha256 = "1zz3vpy6xrgzln2dpxgcnrq1bpzz0syl60whqc9zf8j29mayw1fy";
type = "gem";
};
version = "0.7.6";
version = "0.8.1";
};
}
+10 -4
View File
@@ -1,10 +1,11 @@
{
lib,
python3,
python3Packages,
fetchFromGitHub,
versionCheckHook,
}:
python3.pkgs.buildPythonApplication rec {
python3Packages.buildPythonApplication rec {
pname = "das";
version = "1.0.3";
pyproject = true;
@@ -21,11 +22,12 @@ python3.pkgs.buildPythonApplication rec {
"defusedxml"
"netaddr"
"networkx"
"plotly"
];
build-system = with python3.pkgs; [ poetry-core ];
build-system = with python3Packages; [ poetry-core ];
dependencies = with python3.pkgs; [
dependencies = with python3Packages; [
dash
defusedxml
dnspython
@@ -40,6 +42,10 @@ python3.pkgs.buildPythonApplication rec {
pythonImportsCheck = [ "das" ];
nativeCheckInputs = [
versionCheckHook
];
meta = {
description = "Divide full port scan results and use it for targeted Nmap runs";
homepage = "https://github.com/snovvcrash/DivideAndScan";
+3 -3
View File
@@ -7,18 +7,18 @@
rustPlatform.buildRustPackage rec {
pname = "harper";
version = "0.42.0";
version = "0.44.0";
src = fetchFromGitHub {
owner = "Automattic";
repo = "harper";
rev = "v${version}";
hash = "sha256-qzNH8qGpSNtGQqce3E/mEQoJUP2mQsQ8ntTi9F3ol1I=";
hash = "sha256-7sF2hwj4Gnca8QVociECKY+8grIDwcUoK9Zpx5YdNr0=";
};
buildAndTestSubdir = "harper-ls";
useFetchCargoVendor = true;
cargoHash = "sha256-PxYRQ6nYHXXgxb8YXkm57wIFXQrF5+cdEHA+CMk22wg=";
cargoHash = "sha256-SnwmXBt3wqsZPfKu3FIura8/y9MfU8VUKYRisdlcNXE=";
passthru.updateScript = nix-update-script { };
+2 -10
View File
@@ -2,7 +2,6 @@
lib,
stdenv,
fetchurl,
fetchpatch,
cfitsio,
cmake,
curl,
@@ -23,20 +22,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "kstars";
version = "3.7.6";
version = "3.7.7";
src = fetchurl {
url = "mirror://kde/stable/kstars/${finalAttrs.version}/kstars-${finalAttrs.version}.tar.xz";
hash = "sha256-6hwWMmAGKJmldL8eTLQzzBsumk5thFoqGvm2dWk0Jpo=";
hash = "sha256-8tvWwmxFUSqnw5JPC/Bgao75eORoxUUF3MDLL+EgAkU=";
};
patches = [
(fetchpatch {
url = "https://invent.kde.org/education/kstars/-/commit/92eb37bdb3e24bd06e6da9977f3bf76218c95339.diff";
hash = "sha256-f2m15op48FiPYsKJ7WudlejVwoiGYWGnX2QiCnBINU8=";
})
];
nativeBuildInputs = with kdePackages; [
extra-cmake-modules
kdoctools
+3 -3
View File
@@ -6,17 +6,17 @@
rustPlatform.buildRustPackage rec {
pname = "lintspec";
version = "0.5.0";
version = "0.6.0";
src = fetchFromGitHub {
owner = "beeb";
repo = "lintspec";
tag = "v${version}";
hash = "sha256-I9u4fS3K3tPgr15lAEkBQO1KXSNPAu3aiM9Qo9IRuHE=";
hash = "sha256-xT+2gDaKwjnBZBmeY/5UDka/EFodRGflb433BfDeuuk=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-wTR4E+Pbx0ReeVav/ECklS8on0v5aYvFqE+FZhieRHk=";
cargoHash = "sha256-r9CRu0zLvsllo3v8E1C8VxmsMbhOQxY8H/imZt04Nok=";
meta = {
description = "Blazingly fast linter for NatSpec comments in Solidity code";
+2 -2
View File
@@ -9,13 +9,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "luau";
version = "0.678";
version = "0.679";
src = fetchFromGitHub {
owner = "luau-lang";
repo = "luau";
tag = finalAttrs.version;
hash = "sha256-FYh7LTLDdl3eYXRDAn+FDkqBCiWY0JqHrX9lbz5r+gI=";
hash = "sha256-PLYiGMdXA/PFZaOOv/fmRjU5b9fNmvUoExNjFq81tto=";
};
nativeBuildInputs = [ cmake ];
+3 -3
View File
@@ -6,16 +6,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "mdns-scanner";
version = "0.12.1";
version = "0.13.0";
src = fetchFromGitHub {
owner = "CramBL";
repo = "mdns-scanner";
tag = "v${finalAttrs.version}";
hash = "sha256-I0/ms1FFTGgSk101GBascTSMBCLAmzqk2yiNYskedvU=";
hash = "sha256-86GpBjgfBMkqzoWPEbjQM6PvSEb67A8nL7sEtplXoic=";
};
cargoHash = "sha256-JdeIEaSfiMCQ9n3Y4DpTWhheHaA54zJKUsG/e4Xo9LU=";
cargoHash = "sha256-z0IHONtU1pgViQZu0Q2fZVjdJ6sSlgnIw83hqWLKfVM=";
meta = {
homepage = "https://github.com/CramBL/mdns-scanner";
+4 -26
View File
@@ -4,7 +4,6 @@
cargo,
cmake,
fetchFromGitHub,
fetchpatch,
go,
lib,
libcap,
@@ -23,36 +22,15 @@
stdenv.mkDerivation (finalAttrs: {
pname = "mozillavpn";
version = "2.27.0";
version = "2.29.0";
src = fetchFromGitHub {
owner = "mozilla-mobile";
repo = "mozilla-vpn-client";
tag = "v${finalAttrs.version}";
fetchSubmodules = true;
hash = "sha256-TfiEc5Lptr0ntp4buEEWbQTvNkVjZbdMWDv8CEZa6IM=";
hash = "sha256-Oh3qV5/fQNLjv3qnhRrgRV0d+homlGmEpTSeou3lZfE=";
};
patches = [
# Provide default args for LottieStatus::changed so moc can call it (#10420)
(fetchpatch {
url = "https://github.com/mozilla-mobile/mozilla-vpn-client/commit/e5abe5714a5b506e398c088d21672f00d6f93240.patch";
hash = "sha256-DU5wQ1DDF8DbmMIlohoEIDJ7/9+9GVwrvsr51T9bGx8=";
})
# Remove Qt.labls.qmlmodels usage (#10422)
(fetchpatch {
url = "https://github.com/mozilla-mobile/mozilla-vpn-client/commit/4497972b1bf7b7f215dc6c1227d76d6825f5b958.patch";
hash = "sha256-RPRdARM/jXSHmTGGjiOrfJ7KVejp3JmUfsN5pmKYPuY=";
})
# Qt compat: Make sure to include what we use
(fetchpatch {
url = "https://github.com/mozilla-mobile/mozilla-vpn-client/commit/0909d43447a7ddbc6ec20d108637524552848bd6.patch";
hash = "sha256-Hpn69hQxa269XH+Ku/MYD2GwdFhfCX4yoVRCEDfIOKc=";
})
# Use QDesktopUnixServices after qt 6.9.0
(fetchpatch {
url = "https://github.com/mozilla-mobile/mozilla-vpn-client/pull/10424/commits/81e66044388459ffe2b08804ab5a326586ac7113.patch";
hash = "sha256-+v3NoTAdkjKEyBPbbJZQ2d11hJMyE3E4B9uYUerVa7c=";
})
];
patches = [ ];
netfilter = buildGoModule {
pname = "${finalAttrs.pname}-netfilter";
@@ -67,7 +45,7 @@ stdenv.mkDerivation (finalAttrs: {
cargoDeps = rustPlatform.fetchCargoVendor {
inherit (finalAttrs) src patches;
hash = "sha256-SGC+YT5ATV/ZaP/wrm3c31OQBw6Pk8ZSXjxEPFdP2f8=";
hash = "sha256-Flsa93Nko/sHr9z+YW7xDFMVLOzJE4oJFAl841gpPpw=";
};
buildInputs = [
+2 -2
View File
@@ -16,13 +16,13 @@
stdenv.mkDerivation rec {
pname = "peazip";
version = "10.4.0";
version = "10.5.0";
src = fetchFromGitHub {
owner = "peazip";
repo = "peazip";
rev = version;
hash = "sha256-tA2JLO4KIqFOVZyt7CPMRJTojQFQVQqGGOeh3sU/FuQ=";
hash = "sha256-tEx0ZSvv+byn8OPSFprFJwMFxuEQzyrkvk4FbvGtH2A=";
};
sourceRoot = "${src.name}/peazip-sources";
+21 -21
View File
@@ -1,46 +1,46 @@
{
lib,
buildGoModule,
fetchFromGitLab,
rustPlatform,
nix-update-script,
installShellFiles,
}:
let
version = "1.4.1";
in
buildGoModule {
inherit version;
rustPlatform.buildRustPackage (finalAttrs: {
pname = "reaction";
version = "2.0.1";
src = fetchFromGitLab {
domain = "framagit.org";
owner = "ppom";
repo = "reaction";
rev = "v${version}";
hash = "sha256-UL3ck+gejZAu/mZS3ZiZ78a2/I+OesaSRZUhHirgu9o=";
tag = "v${finalAttrs.version}";
hash = "sha256-HpnLh0JfGZsHcvDQSiKfW62QcCe/QDsVP/nGBo9x494=";
};
vendorHash = "sha256-THUIoWFzkqaTofwH4clBgsmtUlLS9WIB2xjqW7vkhpg=";
cargoHash = "sha256-i8KZygESxgty8RR3C+JMuE1aAsBxoLuGsL4jqjdGr0E=";
ldflags = [
"-X main.version=${version}"
"-X main.commit=unknown"
nativeBuildInputs = [
installShellFiles
];
postBuild = ''
$CC helpers_c/ip46tables.c -o ip46tables
$CC helpers_c/nft46.c -o nft46
postInstall = ''
installBin $releaseDir/ip46tables $releaseDir/nft46
installManPage $releaseDir/reaction*.1
installShellCompletion --cmd reaction \
--bash $releaseDir/reaction.bash \
--fish $releaseDir/reaction.fish \
--zsh $releaseDir/_reaction
'';
postInstall = ''
cp ip46tables nft46 $out/bin
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "Scan logs and take action: an alternative to fail2ban";
homepage = "https://framagit.org/ppom/reaction";
changelog = "https://framagit.org/ppom/reaction/-/releases/v${version}";
changelog = "https://framagit.org/ppom/reaction/-/releases/v${finalAttrs.version}";
license = lib.licenses.agpl3Plus;
mainProgram = "reaction";
maintainers = with lib.maintainers; [ ppom ];
platforms = lib.platforms.unix;
platforms = lib.platforms.linux;
};
}
})
@@ -0,0 +1,99 @@
# generated by zon2nix (https://github.com/Cloudef/zig2nix)
{
lib,
linkFarm,
fetchurl,
fetchgit,
runCommandLocal,
zig,
name ? "zig-packages",
}:
with builtins;
with lib;
let
unpackZigArtifact =
{ name, artifact }:
runCommandLocal name { nativeBuildInputs = [ zig ]; } ''
hash="$(zig fetch --global-cache-dir "$TMPDIR" ${artifact})"
mv "$TMPDIR/p/$hash" "$out"
chmod 755 "$out"
'';
fetchZig =
{
name,
url,
hash,
}:
let
artifact = fetchurl { inherit url hash; };
in
unpackZigArtifact { inherit name artifact; };
fetchGitZig =
{
name,
url,
hash,
rev ? throw "rev is required, remove and regenerate the zon2json-lock file",
}:
let
parts = splitString "#" url;
url_base = elemAt parts 0;
url_without_query = elemAt (splitString "?" url_base) 0;
in
fetchgit {
inherit name rev hash;
url = url_without_query;
deepClone = false;
};
fetchZigArtifact =
{
name,
url,
hash,
...
}@args:
let
parts = splitString "://" url;
proto = elemAt parts 0;
path = elemAt parts 1;
fetcher = {
"git+http" = fetchGitZig (
args
// {
url = "http://${path}";
}
);
"git+https" = fetchGitZig (
args
// {
url = "https://${path}";
}
);
http = fetchZig {
inherit name hash;
url = "http://${path}";
};
https = fetchZig {
inherit name hash;
url = "https://${path}";
};
};
in
fetcher.${proto};
in
linkFarm name [
{
name = "wayland-0.3.0-lQa1kjPIAQDmhGYpY-zxiRzQJFHQ2VqhJkQLbKKdt5wl";
path = fetchZigArtifact {
name = "wayland";
url = "https://codeberg.org/ifreund/zig-wayland/archive/v0.3.0.tar.gz";
hash = "sha256-xU8IrETSFOKKQQMgwVyRKLwGaek4USaKXg49S9oHSTQ=";
};
}
]
@@ -0,0 +1,69 @@
{
callPackage,
fetchFromSourcehut,
lib,
pandoc,
pkg-config,
stdenv,
wayland,
wayland-protocols,
wayland-scanner,
zig_0_14,
}:
let
zig = zig_0_14;
in
stdenv.mkDerivation (finalAttrs: {
pname = "river-ultitile";
version = "1.3.0";
src = fetchFromSourcehut {
owner = "~midgard";
repo = "river-ultitile";
rev = "v${finalAttrs.version}";
hash = "sha256-whzJZLgd51kXOVq9YVqcADTOyGmHmwJZWzbrZGZx3Ak=";
};
nativeBuildInputs = [
zig.hook
pkg-config
wayland
wayland-scanner
];
buildInputs = [
wayland-protocols
pandoc # used for building documentation
];
deps = callPackage ./build.zig.zon.nix { };
zigBuildFlags = [
"--system"
"${finalAttrs.deps}"
];
meta = {
description = "Configurable layout generator for the River compositor";
longDescription = ''
A layout generator for **river**. Features include:
- **configurable** layouts employing nested tiles (no juggling with coordinates),
- **widescreen** support by default,
- default layouts, switchable at run time with a command or key binding:
- dwm-like main/stack layout,
- main on the left on normal screens,
- **main in the center and stacks on both sides** on widescreens,
- a vertical stack,
- a horizontal stack, and
- a monocle layout,
- optional per-tag-per-output state.
'';
changelog = "https://git.sr.ht/~midgard/river-ultitile/tree/v${finalAttrs.version}/item/CHANGELOG.md";
homepage = "https://git.sr.ht/~midgard/river-ultitile";
license = lib.licenses.gpl3Plus;
mainProgram = "river-ultitile";
maintainers = with lib.maintainers; [ debling ];
platforms = lib.platforms.linux;
};
})
+3 -3
View File
@@ -32,18 +32,18 @@ in
buildDotnetModule rec {
inherit pname dotnet-sdk dotnet-runtime;
vsVersion = "2.82.12";
vsVersion = "2.83.5";
src = fetchFromGitHub {
owner = "dotnet";
repo = "roslyn";
rev = "VSCode-CSharp-${vsVersion}";
hash = "sha256-5QCiA2NxjWUFLut8gxboR2kTibN66QCxbe2g2jdrINo=";
hash = "sha256-1YH2cxj+Or73Z1Ery/63RubIgkM5Iz9PiKii65noj/c=";
};
# versioned independently from vscode-csharp
# "roslyn" in here:
# https://github.com/dotnet/vscode-csharp/blob/main/package.json
version = "5.0.0-1.25302.10";
version = "5.0.0-1.25312.6";
projectFile = "src/LanguageServer/${project}/${project}.csproj";
useDotnetFromEnv = true;
nugetDeps = ./deps.json;
+22 -13
View File
@@ -2,39 +2,48 @@
lib,
stdenv,
buildGoModule,
buildPackages,
fetchFromGitHub,
installShellFiles,
}:
buildGoModule rec {
buildGoModule (finalAttrs: {
pname = "rospo";
version = "0.14.0";
version = "0.15.0";
src = fetchFromGitHub {
owner = "ferama";
repo = "rospo";
rev = "v${version}";
hash = "sha256-H6hZbOnX+1P1Ob5fCROQtV+64NiFD9mO3kiaQY63OBM=";
tag = "v${finalAttrs.version}";
hash = "sha256-xfCjRAsKJxtYeY2Mx+l1tDtqAF0SKjTCJCh1gCG+Rl8=";
};
vendorHash = "sha256-KyTDyV27YQDqbEyKSYfbJuTKw2EsZAqWsHhmMncUHUs=";
vendorHash = "sha256-6hCaguJP7XXdxYYS2KuBegwPaKP8rD9YI5727HZo7uA=";
ldflags = [
"-s"
"-w"
"-X github.com/ferama/rospo/cmd.Version=${version}"
"-X github.com/ferama/rospo/cmd.Version=${finalAttrs.version}"
];
nativeBuildInputs = [ installShellFiles ];
doCheck = false;
postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
installShellCompletion --cmd rospo \
--bash <($out/bin/rospo completion bash) \
--fish <($out/bin/rospo completion fish) \
--zsh <($out/bin/rospo completion zsh)
'';
postInstall =
let
rospoBin =
if stdenv.buildPlatform.canExecute stdenv.hostPlatform then
placeholder "out"
else
buildPackages.rospo;
in
''
installShellCompletion --cmd rospo \
--bash <(${rospoBin}/bin/rospo completion bash) \
--fish <(${rospoBin}/bin/rospo completion fish) \
--zsh <(${rospoBin}/bin/rospo completion zsh)
'';
meta = {
description = "Simple, reliable, persistent ssh tunnels with embedded ssh server";
@@ -43,4 +52,4 @@ buildGoModule rec {
maintainers = with lib.maintainers; [ sikmir ];
mainProgram = "rospo";
};
}
})
+2 -2
View File
@@ -13,14 +13,14 @@
}:
python3Packages.buildPythonApplication rec {
pname = "tauno-monitor";
version = "0.1.29";
version = "0.2.0";
pyproject = false;
src = fetchFromGitHub {
owner = "taunoe";
repo = "tauno-monitor";
tag = "v${version}";
hash = "sha256-U7vp0cPIRQeeuLGazoCQAnVQaKxDznC65bE31SwYU3A=";
hash = "sha256-144kRMhZUwgn3BRy6c0A5Fwh1Yisuf7H2s/0ChpIKVI=";
};
nativeBuildInputs = [
@@ -6,17 +6,16 @@
pypblib,
pytestCheckHook,
}:
buildPythonPackage rec {
pname = "python-sat";
version = "0.1.7.dev1";
version = "0.1.8.dev17";
format = "setuptools";
src = fetchFromGitHub {
owner = "pysathq";
repo = "pysat";
rev = version;
hash = "sha256-zGdgD+SgoMB7/zDQI/trmV70l91TB7OkDxaJ30W3dkI=";
rev = "a04763de6dafb8d3a0d7f1b231fc0d30be1de4c0"; # upstream does not tag releases
hash = "sha256-FG6oAAI8XKXumj6Ys2QjjYcRp1TpwkUZzyfpkdq5V6E=";
};
propagatedBuildInputs = [
@@ -26,23 +25,18 @@ buildPythonPackage rec {
nativeCheckInputs = [ pytestCheckHook ];
# https://github.com/pysathq/pysat/pull/102
postPatch = ''
# Fix for case-insensitive filesystem
cat >>solvers/patches/cadical.patch <<EOF
diff --git solvers/cadical/VERSION solvers/cdc/VERSION
deleted file mode 100644
--- solvers/cadical/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-1.0.3
EOF
'';
disabledTestPaths = [ "tests/test_unique_mus.py" ];
meta = with lib; {
description = "Toolkit to provide interface for various SAT (without optional dependancy py-aiger-cnf)";
homepage = "https://github.com/pysathq/pysat";
changelog = "https://pysathq.github.io/updates/";
license = licenses.mit;
maintainers = [ maintainers.marius851000 ];
maintainers = [
maintainers.marius851000
maintainers.chrjabs
];
platforms = lib.platforms.all;
badPlatforms = lib.platforms.darwin ++ [ "i686-linux" ];
};
}
+10 -1
View File
@@ -92,7 +92,7 @@ let
"k2v::poll::test_poll_item"
];
passthru.tests = nixosTests.garage;
passthru.tests = nixosTests."garage_${lib.versions.major version}";
meta = {
description = "S3-compatible object store for small self-hosted geo-distributed deployments";
@@ -137,11 +137,20 @@ rec {
cargoHash = "sha256-vcvD0Fn/etnAuXrM3+rj16cqpEmW2nzRmrjXsftKTFE=";
};
garage_2_0_0 = generic {
version = "2.0.0";
hash = "sha256-dn7FoouF+5qmW6fcC20bKQSc6D2G9yrWdBK3uN3bF58=";
cargoHash = "sha256-6VM/EesrUIaQOeDGqzb0kOqMz4hW7zBJUnaRQ9C3cqc=";
};
garage_0_8 = garage_0_8_7;
garage_0_9 = garage_0_9_4;
garage_1_x = garage_1_2_0;
garage_1 = garage_1_x;
garage_2 = garage_2_0_0;
garage = garage_1_x;
}
+6 -1
View File
@@ -3029,8 +3029,13 @@ with pkgs;
garage_0_9
garage_0_8_7
garage_0_9_4
garage_1_2_0
garage_1_x
garage_1
garage_2_0_0
garage_2
;
gaugePlugins = recurseIntoAttrs (callPackage ../by-name/ga/gauge/plugins { });
@@ -14349,7 +14354,7 @@ with pkgs;
autoconf = buildPackages.autoconf269;
};
x2goclient = libsForQt5.callPackage ../applications/networking/remote/x2goclient { };
x2goclient = callPackage ../applications/networking/remote/x2goclient { };
x2gokdriveclient = libsForQt5.callPackage ../applications/networking/remote/x2gokdriveclient { };