Merge staging-next into staging
This commit is contained in:
@@ -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}
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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 { };
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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'
|
||||
'';
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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";
|
||||
};
|
||||
})
|
||||
@@ -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
|
||||
|
||||
@@ -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";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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,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 = [
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
})
|
||||
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -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" ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 { };
|
||||
|
||||
|
||||
Reference in New Issue
Block a user