Merge master into staging-next

This commit is contained in:
nixpkgs-ci[bot]
2025-04-04 12:06:06 +00:00
committed by GitHub
58 changed files with 1324 additions and 947 deletions
+3 -2
View File
@@ -24970,10 +24970,11 @@
name = "Mason Mackaman";
};
usertam = {
email = "nix@usertam.dev";
name = "Samuel Tam";
email = "code@usertam.dev";
github = "usertam";
githubId = 22500027;
name = "Samuel Tam";
keys = [ { fingerprint = "EC4E E490 3C82 3698 2CAB D206 2D87 60B0 229E 2560"; } ];
};
uskudnik = {
email = "urban.skudnik@gmail.com";
@@ -56,6 +56,7 @@ let
"blackbox"
"borgmatic"
"buildkite-agent"
"ecoflow"
"chrony"
"collectd"
"deluge"
@@ -122,6 +123,7 @@ let
"statsd"
"surfboard"
"systemd"
"tibber"
"unbound"
"unpoller"
"v2ray"
@@ -0,0 +1,151 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.prometheus.exporters.ecoflow;
inherit (lib) mkOption types;
in
{
port = 2112;
extraOpts = {
exporterType = mkOption {
type = types.enum [
"rest"
"mqtt"
];
default = "rest";
example = "mqtt";
description = ''
The type of exporter you'd like to use.
Possible values: "rest" and "mqtt". Default value is "rest".
Choose "rest" for the ecoflow online cloud api use "rest" and define: accessKey, secretKey.
Choose "mqtt" for the lan realtime integration use "mqtt" and define: email, password, devices.
'';
};
ecoflowAccessKeyFile = mkOption {
type = types.path;
default = /etc/ecoflow-access-key;
description = ''
Path to the file with your personal api access string from the Ecoflow development website https://developer-eu.ecoflow.com.
Do to share or commit your plaintext scecrets to a public repo use: agenix or soaps.
'';
};
ecoflowSecretKeyFile = mkOption {
type = types.path;
default = /etc/ecoflow-secret-key;
description = ''
Path to the file with your personal api secret string from the Ecoflow development website https://developer-eu.ecoflow.com.
Do to share or commit your plaintext scecrets to a public repo use: agenix or soaps.
'';
};
ecoflowEmailFile = mkOption {
type = types.path;
default = /etc/ecoflow-email;
description = ''
Path to the file with your personal ecoflow app login email address.
Do to share or commit your plaintext scecrets to a public repo use: agenix or soaps.
'';
};
ecoflowPasswordFile = mkOption {
type = types.path;
default = /etc/ecoflow-password;
description = ''
Path to the file with your personal ecoflow app login email password.
Do to share or commit your plaintext passwords to a public repo use: agenix or soaps here!
'';
};
ecoflowDevicesFile = mkOption {
type = types.path;
default = /etc/ecoflow-devices;
description = ''
File must contain one line, example: R3300000,R3400000,NC430000,....
The list of devices serial numbers separated by comma. For instance: SN1,SN2,SN3.
Instead of "devicesFile" you can specify "devicesPrettynamesFile" which will also work. You can specify both.
Do to share or commit your plaintext serial numbers to a public repo use: agenix or soaps.
'';
};
ecoflowDevicesPrettyNamesFile = mkOption {
type = types.path;
default = /etc/ecoflow-devices-pretty-names;
description = ''
File must contain one line, example: {"R3300000":"Delta 2","R3400000":"Delta Pro",...}
The key/value map of custom names for your devices. Key is a serial number, value is a device name you want
to see in Grafana Dashboard. It's helpful to see a meaningful name in Grafana dashboard instead of a serialnumber.
Do to share or commit your plaintext serial numbers to a public repo use: agenix or soaps.
'';
};
debug = mkOption {
type = types.str;
default = "0";
example = "1";
description = ''
Enable debug log messages. Disabled by default. Set to "1" to enable.
'';
};
prefix = mkOption {
type = types.str;
default = "ecoflow";
example = "ecoflow_privateSite";
description = ''
The prefix that will be added to all metrics. Default value is ecoflow.
For instance metric bms_bmsStatus.minCellTemp will be exported to prometheus as ecoflow.bms_bmsStatus.minCellTemp.
With default value "ecoflow" you can use Grafana Dashboard with ID 17812 without any changes.
'';
};
scrapingInterval = mkOption {
type = types.ints.positive;
default = 30;
example = 120;
description = ''
Scrapping interval in seconds. How often should the exporter execute requests to Ecoflow Rest API in order to get the data.
Default value is 30 seconds. Align this value with your prometheus scraper interval settings.
'';
};
mqttDeviceOfflineThreshold = mkOption {
type = types.ints.positive;
default = 60;
example = 120;
description = ''
The threshold in seconds which indicates how long we should wait for a metric message from MQTT broker.
Default value: 60 seconds. If we don't receive message within 60 seconds we consider that device is offline.
If we don't receive messages within the threshold for all devices, we'll try to reconnect to the MQTT broker.
There is a strange behavior that MQTT stop sends messages if you open Ecoflow mobile app and then close it).
'';
};
};
serviceOpts = {
environment = {
PROMETHEUS_ENABLED = "1";
EXPORTER_TYPE = cfg.exporterType;
DEBUG_ENABLED = cfg.debug;
METRIC_PREFIX = cfg.prefix;
SCRAPING_INTERVAL = toString cfg.scrapingInterval;
MQTT_DEVICE_OFFLINE_THRESHOLD_SECONDS = toString cfg.mqttDeviceOfflineThreshold;
};
script = ''
export ECOFLOW_ACCESS_KEY="$(cat ${toString cfg.ecoflowAccessKeyFile})"
export ECOFLOW_SECRET_KEY="$(cat ${toString cfg.ecoflowSecretKeyFile})"
export ECOFLOW_EMAIL="$(cat ${toString cfg.ecoflowEmailFile})"
export ECOFLOW_PASSWORD="$(cat ${toString cfg.ecoflowPasswordFile})"
export ECOFLOW_DEVICES="$(cat ${toString cfg.ecoflowDevicesFile})"
export ECOFLOW_DEVICES_PRETTY_NAMES="$(cat ${toString cfg.ecoflowDevicesPrettyNamesFile})"
exec ${lib.getExe pkgs.go-ecoflow-exporter}'';
serviceConfig = {
AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" ];
CapabilityBoundingSet = [ "CAP_NET_BIND_SERVICE" ];
MemoryDenyWriteExecute = true;
NoNewPrivileges = true;
ProtectSystem = "strict";
Restart = "on-failure";
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
];
RestrictNamespaces = true;
User = "prometheus"; # context needed to runtime access encrypted token and secrets
};
};
}
@@ -0,0 +1,44 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.prometheus.exporters.tibber;
inherit (lib) mkOption types concatStringsSep;
in
{
port = 9489;
extraOpts = {
apiTokenPath = mkOption {
type = types.path;
default = null;
description = ''
Add here the path to your personal Tibber API Token ('Bearer Token') File.
Get your personal Tibber API Token here: https://developer.tibber.com
Do not share your personal plaintext Tibber API Token via github. (see: ryantm/agenix, mic92/sops)
'';
};
};
serviceOpts = {
script = ''
export TIBBER_TOKEN="$(cat ${toString cfg.apiTokenPath})"
exec ${pkgs.prometheus-tibber-exporter}/bin/tibber-exporter --listen-address ${cfg.listenAddress}:${toString cfg.port} ${concatStringsSep " \\\n " cfg.extraFlags}
'';
serviceConfig = {
AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" ];
CapabilityBoundingSet = [ "CAP_NET_BIND_SERVICE" ];
MemoryDenyWriteExecute = true;
NoNewPrivileges = true;
ProtectSystem = "strict";
Restart = "on-failure";
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
];
RestrictNamespaces = true;
User = "prometheus"; # context needed to runtime access encrypted token and secrets
};
};
}
+1 -1
View File
@@ -125,7 +125,7 @@ in
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectControlGroups = true;
ProcSubset = "pid";
ProcSubset = "all";
RestrictNamespaces = true;
RestrictRealtime = true;
SystemCallArchitectures = "native";
+128 -113
View File
@@ -6,26 +6,32 @@ import ../make-test-python.nix (
...
}:
let
pauseImage = pkgs.dockerTools.streamLayeredImage {
name = "test.local/pause";
throwSystem = throw "RKE2: Unsupported system: ${pkgs.stdenv.hostPlatform.system}";
coreImages =
{
aarch64-linux = rke2.images-core-linux-arm64-tar-zst;
x86_64-linux = rke2.images-core-linux-amd64-tar-zst;
}
.${pkgs.stdenv.hostPlatform.system} or throwSystem;
canalImages =
{
aarch64-linux = rke2.images-canal-linux-arm64-tar-zst;
x86_64-linux = rke2.images-canal-linux-amd64-tar-zst;
}
.${pkgs.stdenv.hostPlatform.system} or throwSystem;
helloImage = pkgs.dockerTools.buildImage {
name = "test.local/hello";
tag = "local";
contents = pkgs.buildEnv {
name = "rke2-pause-image-env";
compressor = "zstd";
copyToRoot = pkgs.buildEnv {
name = "rke2-hello-image-env";
paths = with pkgs; [
tini
bashInteractive
coreutils
socat
];
};
config.Entrypoint = [
"/bin/tini"
"--"
"/bin/sleep"
"inf"
];
};
# A daemonset that responds 'server' on port 8000
# A daemonset that responds 'hello' on port 8000
networkTestDaemonset = pkgs.writeText "test.yml" ''
apiVersion: apps/v1
kind: DaemonSet
@@ -44,113 +50,133 @@ import ../make-test-python.nix (
spec:
containers:
- name: test
image: test.local/pause:local
image: test.local/hello:local
imagePullPolicy: Never
resources:
limits:
memory: 20Mi
command: ["socat", "TCP4-LISTEN:8000,fork", "EXEC:echo server"]
command: ["socat", "TCP4-LISTEN:8000,fork", "EXEC:echo hello"]
'';
tokenFile = pkgs.writeText "token" "p@s$w0rd";
agentTokenFile = pkgs.writeText "agent-token" "p@s$w0rd";
agentTokenFile = pkgs.writeText "agent-token" "agentP@s$w0rd";
# Let flannel use eth1 to enable inter-node communication in tests
canalConfig = pkgs.writeText "rke2-canal-config.yaml" ''
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-canal
namespace: kube-system
spec:
valuesContent: |-
flannel:
iface: "eth1"
'';
in
{
name = "${rke2.name}-multi-node";
meta.maintainers = rke2.meta.maintainers;
nodes = {
server1 =
{ pkgs, ... }:
server =
{
networking.firewall.enable = false;
networking.useDHCP = false;
networking.defaultGateway = "192.168.1.1";
networking.interfaces.eth1.ipv4.addresses = pkgs.lib.mkForce [
{
address = "192.168.1.1";
prefixLength = 24;
}
config,
nodes,
pkgs,
...
}:
{
# Setup image archives to be imported by rke2
systemd.tmpfiles.settings."10-rke2" = {
"/var/lib/rancher/rke2/agent/images/rke2-images-core.tar.zst" = {
"L+".argument = "${coreImages}";
};
"/var/lib/rancher/rke2/agent/images/rke2-images-canal.tar.zst" = {
"L+".argument = "${canalImages}";
};
"/var/lib/rancher/rke2/agent/images/hello.tar.zst" = {
"L+".argument = "${helloImage}";
};
# Copy the canal config so that rke2 can write the remaining default values to it
"/var/lib/rancher/rke2/server/manifests/rke2-canal-config.yaml" = {
"C".argument = "${canalConfig}";
};
};
# Canal CNI with VXLAN
networking.firewall.allowedUDPPorts = [ 8472 ];
networking.firewall.allowedTCPPorts = [
# Kubernetes API
6443
# Canal CNI health checks
9099
# RKE2 supervisor API
9345
];
virtualisation.memorySize = 1536;
virtualisation.diskSize = 4096;
# RKE2 needs more resources than the default
virtualisation.cores = 4;
virtualisation.memorySize = 4096;
virtualisation.diskSize = 8092;
services.rke2 = {
enable = true;
role = "server";
package = rke2;
inherit tokenFile;
inherit agentTokenFile;
nodeName = "${rke2.name}-server1";
package = rke2;
nodeIP = "192.168.1.1";
# Without nodeIP the apiserver starts with the wrong service IP family
nodeIP = config.networking.primaryIPAddress;
disable = [
"rke2-coredns"
"rke2-metrics-server"
"rke2-ingress-nginx"
];
extraFlags = [
"--cluster-reset"
"rke2-snapshot-controller"
"rke2-snapshot-controller-crd"
"rke2-snapshot-validation-webhook"
];
};
};
server2 =
{ pkgs, ... }:
agent =
{
networking.firewall.enable = false;
networking.useDHCP = false;
networking.defaultGateway = "192.168.1.2";
networking.interfaces.eth1.ipv4.addresses = pkgs.lib.mkForce [
{
address = "192.168.1.2";
prefixLength = 24;
}
];
virtualisation.memorySize = 1536;
virtualisation.diskSize = 4096;
services.rke2 = {
enable = true;
role = "server";
serverAddr = "https://192.168.1.1:6443";
inherit tokenFile;
inherit agentTokenFile;
nodeName = "${rke2.name}-server2";
package = rke2;
nodeIP = "192.168.1.2";
disable = [
"rke2-coredns"
"rke2-metrics-server"
"rke2-ingress-nginx"
];
config,
nodes,
pkgs,
...
}:
{
# Setup image archives to be imported by rke2
systemd.tmpfiles.settings."10-rke2" = {
"/var/lib/rancher/rke2/agent/images/rke2-images-core.linux-amd64.tar.zst" = {
"L+".argument = "${coreImages}";
};
"/var/lib/rancher/rke2/agent/images/rke2-images-canal.linux-amd64.tar.zst" = {
"L+".argument = "${canalImages}";
};
"/var/lib/rancher/rke2/agent/images/hello.tar.zst" = {
"L+".argument = "${helloImage}";
};
"/var/lib/rancher/rke2/server/manifests/rke2-canal-config.yaml" = {
"C".argument = "${canalConfig}";
};
};
};
agent1 =
{ pkgs, ... }:
{
networking.firewall.enable = false;
networking.useDHCP = false;
networking.defaultGateway = "192.168.1.3";
networking.interfaces.eth1.ipv4.addresses = pkgs.lib.mkForce [
{
address = "192.168.1.3";
prefixLength = 24;
}
];
# Canal CNI health checks
networking.firewall.allowedTCPPorts = [ 9099 ];
# Canal CNI with VXLAN
networking.firewall.allowedUDPPorts = [ 8472 ];
virtualisation.memorySize = 1536;
virtualisation.diskSize = 4096;
# The agent node can work with less resources
virtualisation.memorySize = 2048;
virtualisation.diskSize = 8092;
services.rke2 = {
enable = true;
role = "agent";
tokenFile = agentTokenFile;
serverAddr = "https://192.168.1.2:6443";
nodeName = "${rke2.name}-agent1";
package = rke2;
nodeIP = "192.168.1.3";
tokenFile = agentTokenFile;
serverAddr = "https://${nodes.server.networking.primaryIPAddress}:9345";
nodeIP = config.networking.primaryIPAddress;
};
};
};
@@ -158,53 +184,42 @@ import ../make-test-python.nix (
testScript =
let
kubectl = "${pkgs.kubectl}/bin/kubectl --kubeconfig=/etc/rancher/rke2/rke2.yaml";
ctr = "${pkgs.containerd}/bin/ctr -a /run/k3s/containerd/containerd.sock";
jq = "${pkgs.jq}/bin/jq";
ping = "${pkgs.iputils}/bin/ping";
in
# python
''
machines = [server1, server2, agent1]
start_all()
for machine in machines:
machine.start()
machine.wait_for_unit("rke2")
server.wait_for_unit("rke2-server")
agent.wait_for_unit("rke2-agent")
# wait for the agent to show up
server1.succeed("${kubectl} get node ${rke2.name}-agent1")
# Wait for the agent to be ready
server.wait_until_succeeds(r"""${kubectl} wait --for='jsonpath={.status.conditions[?(@.type=="Ready")].status}=True' nodes/agent""")
for machine in machines:
machine.succeed("${pauseImage} | ${ctr} image import -")
server1.succeed("${kubectl} cluster-info")
server1.wait_until_succeeds("${kubectl} get serviceaccount default")
server.succeed("${kubectl} cluster-info")
server.wait_until_succeeds("${kubectl} get serviceaccount default")
# Now create a pod on each node via a daemonset and verify they can talk to each other.
server1.succeed("${kubectl} apply -f ${networkTestDaemonset}")
server1.wait_until_succeeds(
server.succeed("${kubectl} apply -f ${networkTestDaemonset}")
server.wait_until_succeeds(
f'[ "$(${kubectl} get ds test -o json | ${jq} .status.numberReady)" -eq {len(machines)} ]'
)
# Get pod IPs
pods = server1.succeed("${kubectl} get po -o json | ${jq} '.items[].metadata.name' -r").splitlines()
pods = server.succeed("${kubectl} get po -o json | ${jq} '.items[].metadata.name' -r").splitlines()
pod_ips = [
server1.succeed(f"${kubectl} get po {n} -o json | ${jq} '.status.podIP' -cr").strip() for n in pods
server.succeed(f"${kubectl} get po {n} -o json | ${jq} '.status.podIP' -cr").strip() for n in pods
]
# Verify each server can ping each pod ip
# Verify each node can ping each pod ip
for pod_ip in pod_ips:
server1.succeed(f"${ping} -c 1 {pod_ip}")
agent1.succeed(f"${ping} -c 1 {pod_ip}")
# Verify the pods can talk to each other
resp = server1.wait_until_succeeds(f"${kubectl} exec {pods[0]} -- socat TCP:{pod_ips[1]}:8000 -")
assert resp.strip() == "server"
resp = server1.wait_until_succeeds(f"${kubectl} exec {pods[1]} -- socat TCP:{pod_ips[0]}:8000 -")
assert resp.strip() == "server"
# Cleanup
server1.succeed("${kubectl} delete -f ${networkTestDaemonset}")
for machine in machines:
machine.shutdown()
# The CNI sometimes needs a little time
server.wait_until_succeeds(f"ping -c 1 {pod_ip}", timeout=5)
agent.wait_until_succeeds(f"ping -c 1 {pod_ip}", timeout=5)
# Verify the server can exec into the pod
# for pod in pods:
# resp = server.succeed(f"${kubectl} exec {pod} -- socat TCP:{pod_ip}:8000 -")
# assert resp.strip() == "hello", f"Unexpected response from hello daemonset: {resp.strip()}"
'';
}
)
+61 -51
View File
@@ -6,69 +6,83 @@ import ../make-test-python.nix (
...
}:
let
pauseImage = pkgs.dockerTools.streamLayeredImage {
name = "test.local/pause";
throwSystem = throw "RKE2: Unsupported system: ${pkgs.stdenv.hostPlatform.system}";
coreImages =
{
aarch64-linux = rke2.images-core-linux-arm64-tar-zst;
x86_64-linux = rke2.images-core-linux-amd64-tar-zst;
}
.${pkgs.stdenv.hostPlatform.system} or throwSystem;
canalImages =
{
aarch64-linux = rke2.images-canal-linux-arm64-tar-zst;
x86_64-linux = rke2.images-canal-linux-amd64-tar-zst;
}
.${pkgs.stdenv.hostPlatform.system} or throwSystem;
helloImage = pkgs.dockerTools.buildImage {
name = "test.local/hello";
tag = "local";
contents = pkgs.buildEnv {
name = "rke2-pause-image-env";
paths = with pkgs; [
tini
(hiPrio coreutils)
busybox
];
};
config.Entrypoint = [
"/bin/tini"
"--"
"/bin/sleep"
"inf"
];
compressor = "zstd";
copyToRoot = pkgs.hello;
config.Entrypoint = [ "${pkgs.hello}/bin/hello" ];
};
testPodYaml = pkgs.writeText "test.yaml" ''
apiVersion: v1
kind: Pod
testJobYaml = pkgs.writeText "test.yaml" ''
apiVersion: batch/v1
kind: Job
metadata:
name: test
spec:
containers:
- name: test
image: test.local/pause:local
imagePullPolicy: Never
command: ["sh", "-c", "sleep inf"]
template:
spec:
containers:
- name: test
image: "test.local/hello:local"
restartPolicy: Never
'';
in
{
name = "${rke2.name}-single-node";
meta.maintainers = rke2.meta.maintainers;
nodes.machine =
{ pkgs, ... }:
{
networking.firewall.enable = false;
networking.useDHCP = false;
networking.defaultGateway = "192.168.1.1";
networking.interfaces.eth1.ipv4.addresses = pkgs.lib.mkForce [
{
address = "192.168.1.1";
prefixLength = 24;
}
];
config,
nodes,
pkgs,
...
}:
{
# Setup image archives to be imported by rke2
systemd.tmpfiles.settings."10-rke2" = {
"/var/lib/rancher/rke2/agent/images/rke2-images-core.tar.zst" = {
"L+".argument = "${coreImages}";
};
"/var/lib/rancher/rke2/agent/images/rke2-images-canal.tar.zst" = {
"L+".argument = "${canalImages}";
};
"/var/lib/rancher/rke2/agent/images/hello.tar.zst" = {
"L+".argument = "${helloImage}";
};
};
virtualisation.memorySize = 1536;
virtualisation.diskSize = 4096;
# RKE2 needs more resources than the default
virtualisation.cores = 4;
virtualisation.memorySize = 4096;
virtualisation.diskSize = 8092;
services.rke2 = {
enable = true;
role = "server";
package = rke2;
nodeIP = "192.168.1.1";
# Without nodeIP the apiserver starts with the wrong service IP family
nodeIP = config.networking.primaryIPAddress;
# Slightly reduce resource consumption
disable = [
"rke2-coredns"
"rke2-metrics-server"
"rke2-ingress-nginx"
];
extraFlags = [
"--cluster-reset"
"rke2-snapshot-controller"
"rke2-snapshot-controller-crd"
"rke2-snapshot-validation-webhook"
];
};
};
@@ -76,23 +90,19 @@ import ../make-test-python.nix (
testScript =
let
kubectl = "${pkgs.kubectl}/bin/kubectl --kubeconfig=/etc/rancher/rke2/rke2.yaml";
ctr = "${pkgs.containerd}/bin/ctr -a /run/k3s/containerd/containerd.sock";
in
# python
''
start_all()
machine.wait_for_unit("rke2")
machine.wait_for_unit("rke2-server")
machine.succeed("${kubectl} cluster-info")
machine.wait_until_succeeds(
"${pauseImage} | ${ctr} -n k8s.io image import -"
)
machine.wait_until_succeeds("${kubectl} get serviceaccount default")
machine.succeed("${kubectl} apply -f ${testPodYaml}")
machine.succeed("${kubectl} wait --for 'condition=Ready' pod/test")
machine.succeed("${kubectl} delete -f ${testPodYaml}")
machine.shutdown()
machine.succeed("${kubectl} apply -f ${testJobYaml}")
machine.wait_until_succeeds("${kubectl} wait --for 'condition=complete' job/test")
output = machine.succeed("${kubectl} logs -l batch.kubernetes.io/job-name=test")
assert output.rstrip() == "Hello, world!", f"unexpected output of test job: {output}"
'';
}
)
@@ -134,15 +134,21 @@ let
passthru = {
inherit updateScript;
tests =
let
moduleTests =
let
package_version =
"rke2_" + lib.replaceStrings [ "." ] [ "_" ] (lib.versions.majorMinor rke2Version);
in
lib.mapAttrs (name: value: nixosTests.rke2.${name}.${package_version}) nixosTests.rke2;
in
{
version = testers.testVersion {
package = rke2;
version = "v${version}";
};
}
// lib.optionalAttrs stdenv.hostPlatform.isLinux {
inherit (nixosTests) rke2;
};
// moduleTests;
} // (lib.mapAttrs (_: value: fetchurl value) imagesVersions);
meta = with lib; {
@@ -37,15 +37,15 @@
gtk3,
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "profanity";
version = "0.14.0";
version = "0.15.0";
src = fetchFromGitHub {
owner = "profanity-im";
repo = "profanity";
rev = version;
hash = "sha256-u/mp+vtMj602LfrulA+nhLNH8K6sqKIOuPJzhZusVmE=";
rev = finalAttrs.version;
hash = "sha256-3TmnbTnL8SPSd3seThavOOJVELi8kWLSlZlAub24KZ4=";
};
patches = [
@@ -106,10 +106,6 @@ stdenv.mkDerivation rec {
++ lib.optionals pythonPluginSupport [ "--enable-python-plugins" ]
++ lib.optionals omemoSupport [ "--enable-omemo" ];
preAutoreconf = ''
mkdir m4
'';
doCheck = true;
LC_ALL = "en_US.utf8";
@@ -126,4 +122,4 @@ stdenv.mkDerivation rec {
maintainers = [ maintainers.devhell ];
platforms = platforms.unix;
};
}
})
@@ -360,15 +360,17 @@ rec {
# Get revisions from
# https://github.com/moby/moby/tree/${version}/hack/dockerfile/install/*
docker_25 = callPackage dockerGen rec {
version = "25.0.6";
cliRev = "v${version}";
cliHash = "sha256-7ZKjlONL5RXEJZrvssrL1PQMNANP0qTw4myGKdtd19U=";
version = "25.0.8";
# Upstream forgot to tag release
# https://github.com/docker/cli/issues/5789
cliRev = "43987fca488a535d810c429f75743d8c7b63bf4f";
cliHash = "sha256-OwufdfuUPbPtgqfPeiKrQVkOOacU2g4ommHb770gV40=";
mobyRev = "v${version}";
mobyHash = "sha256-+zkhUMeVD3HNq8WrWQmLskq+HykvD5kzSACmf67YbJE=";
runcRev = "v1.1.12";
runcHash = "sha256-N77CU5XiGYIdwQNPFyluXjseTeaYuNJ//OsEUS0g/v0=";
containerdRev = "v1.7.20";
containerdHash = "sha256-Q9lTzz+G5PSoChy8MZtbOpO81AyNWXC+CgGkdOg14uY=";
mobyHash = "sha256-n7GdjQEceqyC7E2sPXQWyxpRThtH35eM/J20yLa5NSs=";
runcRev = "v1.2.4";
runcHash = "sha256-LdYCMxdqDP7rKo6Ek/B1DE6QvUFrltbSJVggkVkXQZo=";
containerdRev = "v1.7.25";
containerdHash = "sha256-T0F5bwxSCqa4Czs/W01NaAlJJFvgrzkBC1y/r+muivA=";
tiniRev = "v0.19.0";
tiniHash = "sha256-ZDKu/8yE5G0RYFJdhgmCdN3obJNyRWv6K/Gd17zc1sI=";
};
@@ -393,10 +395,24 @@ rec {
cliHash = "sha256-7laxRfssh2aGfJeZI0PsJ/MCiy2npigSmCa1SUlWY4s=";
mobyRev = "v${version}";
mobyHash = "sha256-q+VCJZ93jvPJQE0xn89prH/6spsarVY3VUEmgwyMxU4=";
runcRev = "v1.2.3";
runcHash = "sha256-SdeCmPttMXQdIn3kGWsIM3dfhQCx1C5bMyAM889VVUc=";
containerdRev = "v1.7.24";
containerdHash = "sha256-03vJs61AnTuFAdImZjBfn1izFcoalVJdVs9DZeDcABI=";
runcRev = "v1.2.4";
runcHash = "sha256-LdYCMxdqDP7rKo6Ek/B1DE6QvUFrltbSJVggkVkXQZo=";
containerdRev = "v1.7.25";
containerdHash = "sha256-T0F5bwxSCqa4Czs/W01NaAlJJFvgrzkBC1y/r+muivA=";
tiniRev = "v0.19.0";
tiniHash = "sha256-ZDKu/8yE5G0RYFJdhgmCdN3obJNyRWv6K/Gd17zc1sI=";
};
docker_28 = callPackage dockerGen rec {
version = "28.0.4";
cliRev = "v${version}";
cliHash = "sha256-DLUcmxbCxJs3EA96SGaesA+GzvHq6DC2vrGe5PvA0dE=";
mobyRev = "v${version}";
mobyHash = "sha256-yvz8MUOU61OuphPaIDu6+1wsbCXkIxJYQKK0fhcVwp0=";
runcRev = "v1.2.6";
runcHash = "sha256-XMN+YKdQOQeOLLwvdrC6Si2iAIyyHD5RgZbrOHrQE/g=";
containerdRev = "v1.7.27";
containerdHash = "sha256-H94EHnfW2Z59KcHcbfJn+BipyZiNUvHe50G5EXbrIps=";
tiniRev = "v0.19.0";
tiniHash = "sha256-ZDKu/8yE5G0RYFJdhgmCdN3obJNyRWv6K/Gd17zc1sI=";
};
+7 -3
View File
@@ -9,20 +9,22 @@
pipewire,
libpulseaudio,
wayland,
udev,
vulkan-loader,
}:
rustPlatform.buildRustPackage rec {
pname = "ashell";
version = "0.4.0";
version = "0.4.1";
src = fetchFromGitHub {
owner = "MalpenZibo";
repo = "ashell";
tag = version;
hash = "sha256-a0yvmAq/4TDe+W1FLeLPSLppX81G6fdAOhzDmDJg3II=";
hash = "sha256-J97MRYYkNx8Ze4vcxZTDVOSQLCANyIBcDtqZEsEZ80w=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-Vh/+4iApi+03ZmMIDSXc9Mn408v3wC+WlNJsXNcva+Q=";
cargoHash = "sha256-XDcCCKq/NOzaKTDwVu0GCeGV70IlJ2TvD0w8ib+lEhg=";
nativeBuildInputs = [
pkg-config
@@ -33,12 +35,14 @@ rustPlatform.buildRustPackage rec {
runtimeDependencies = [
wayland
libGL
vulkan-loader
];
buildInputs = [
libpulseaudio
libxkbcommon
pipewire
udev
] ++ runtimeDependencies;
meta = {
+2 -2
View File
@@ -11,11 +11,11 @@
stdenv.mkDerivation rec {
pname = "bird";
version = "3.0.1";
version = "3.1.0";
src = fetchurl {
url = "https://bird.network.cz/download/bird-${version}.tar.gz";
hash = "sha256-iGhAPKqE4lVLtuYK2+fGV+e7fErEGRDjmPNeI2upD6E=";
hash = "sha256-xxY49Xb0MWcEN++dkL6lZZK8VjcB3nhpg/RCJk7Hdiw=";
};
nativeBuildInputs = [
+3 -3
View File
@@ -8,17 +8,17 @@
rustPlatform.buildRustPackage rec {
pname = "cargo-deb";
version = "2.11.3";
version = "2.11.4";
src = fetchFromGitHub {
owner = "kornelski";
repo = "cargo-deb";
rev = "v${version}";
hash = "sha256-QDx7ZP/5z1YgD3RzLmwDE3KLY+5nMncYy97aveFH03w=";
hash = "sha256-E0PU0j0n1ITP65D+p1upn3cBFBKkoCbyHe6S5XxDAyU=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-ZN0TAQzt7LrHxoM4qAuMUm5Goaq1BuNBmd4kDGjiK4Q=";
cargoHash = "sha256-uPLXUx+nbUqXJM83RHxuXWiVWEWp5c+v5A0dOESL9oA=";
nativeBuildInputs = [
makeWrapper
+4 -4
View File
@@ -5,13 +5,13 @@
"packages": {
"": {
"dependencies": {
"@anthropic-ai/claude-code": "^0.2.59"
"@anthropic-ai/claude-code": "^0.2.62"
}
},
"node_modules/@anthropic-ai/claude-code": {
"version": "0.2.59",
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-0.2.59.tgz",
"integrity": "sha512-hcUHEiPUmkgU00J4/1dlLgWvf5ZkWOjMpUrXhMq2o143LOElKuTGxPGt2RtmFHKk6DesFZcV/gabZYkcTqraBw==",
"version": "0.2.62",
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-0.2.62.tgz",
"integrity": "sha512-Mod9/kbqKy344lm5YmDJLn8dR3HYlA2zGCQy4exU7hmECNqg3KlTAz8u4O4YdiRMxXeUJ3Izi9YSJUT7oZOKdg==",
"hasInstallScript": true,
"license": "SEE LICENSE IN README.md",
"bin": {
+3 -3
View File
@@ -6,14 +6,14 @@
buildNpmPackage rec {
pname = "claude-code";
version = "0.2.59";
version = "0.2.62";
src = fetchzip {
url = "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-${version}.tgz";
hash = "sha256-XHHWmDw9qBM4fQ975wSk12hJnr4+1H4AhlNc+IBV3qs=";
hash = "sha256-O6jkpx3OxEh/npZjyJb+osoeJrG+HZ6NRB9T4EMkdf8=";
};
npmDepsHash = "sha256-KorQlEB90EDE+NIxyUh1apqCDzgrCpwcaOy2mt2mz1s=";
npmDepsHash = "sha256-tVA4VbPaPc+KwZzUK0QI9In3QSXXoELaNM2U65wxGGA=";
postPatch = ''
cp ${./package-lock.json} package-lock.json
+2 -2
View File
@@ -9,13 +9,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "cpp-utilities";
version = "5.27.3";
version = "5.28.0";
src = fetchFromGitHub {
owner = "Martchus";
repo = "cpp-utilities";
rev = "v${finalAttrs.version}";
sha256 = "sha256-/602rIjPZ6b9bMTpfjKz+XWpAlKoTHyCKUyGIA9qpto=";
sha256 = "sha256-EdqM7RsvJzMQWtwqnohbC5JJRVZJYgpTLJW1rPmTB4s=";
};
nativeBuildInputs = [ cmake ];
@@ -20,11 +20,11 @@ stdenv.mkDerivation rec {
# the wrapped version of Descent 3. Once theres a stable version of Descent
# 3 that supports the -additionaldir command-line option, we can stop using
# an unstable version of Descent 3.
version = "1.5.0-beta-unstable-2025-03-22";
version = "1.5.0-beta-unstable-2025-03-25";
src = fetchFromGitHub {
owner = "DescentDevelopers";
repo = "Descent3";
rev = "55827d453f835df944b7071ed336ba6a5c30a976";
rev = "67244d953588c8c63baa17c150076153c526258b";
leaveDotGit = true;
# Descent 3 is supposed to display its Git commit hash in the bottom right
# corner of the main menu. That feature only works if either the .git
@@ -50,7 +50,7 @@ stdenv.mkDerivation rec {
git rev-parse --verify HEAD | tr --delete '\n' > git-hash.txt
rm -r .git
'';
hash = "sha256-RZCkApFwbBtAnBWimupsaTcItwAWNJCntIu6S0UOcyU=";
hash = "sha256-lRTzy5GQJ5J9ban7Q6pBmHHXgHNpgemlYYlzmUnvFW0=";
};
hardeningDisable = [ "format" ];
@@ -1,7 +1,7 @@
{ mkDprintPlugin }:
mkDprintPlugin {
description = "JSON/JSONC code formatter.";
hash = "sha256-Sw+HkUb4K2wrLuQRZibr8gOCR3Rz36IeId4Vd4LijmY=";
hash = "sha256-uFcFLi9aYsBrAqkhFmg9GI+LKiV19LxdNjxQ85EH9To=";
initConfig = {
configExcludes = [ "**/*-lock.json" ];
configKey = "json";
@@ -9,6 +9,6 @@ mkDprintPlugin {
};
pname = "dprint-plugin-json";
updateUrl = "https://plugins.dprint.dev/dprint/json/latest.json";
url = "https://plugins.dprint.dev/json-0.19.4.wasm";
version = "0.19.4";
url = "https://plugins.dprint.dev/json-0.20.0.wasm";
version = "0.20.0";
}
@@ -1,7 +1,7 @@
{ mkDprintPlugin }:
mkDprintPlugin {
description = "Jupyter notebook code block formatter.";
hash = "sha256-877CEZbMlj9cHkFtl16XCnan37SeEGUL3BHaUKUv8S4=";
hash = "sha256-IlGwt2TnKeH9NwmUmU1keaTInXgYQVLIPNnr30A9lsM=";
initConfig = {
configExcludes = [ ];
configKey = "jupyter";
@@ -9,6 +9,6 @@ mkDprintPlugin {
};
pname = "dprint-plugin-jupyter";
updateUrl = "https://plugins.dprint.dev/dprint/jupyter/latest.json";
url = "https://plugins.dprint.dev/jupyter-0.1.5.wasm";
version = "0.1.5";
url = "https://plugins.dprint.dev/jupyter-0.2.0.wasm";
version = "0.2.0";
}
@@ -1,7 +1,7 @@
{ mkDprintPlugin }:
mkDprintPlugin {
description = "Markdown code formatter.";
hash = "sha256-PIEN9UnYC8doJpdzS7M6QEHQNQtj7WwXAgvewPsTjqs=";
hash = "sha256-fBy+G+DkJqhrCyyaMjmXRe1VeSeCYO+XmJ8ogwAoptA=";
initConfig = {
configExcludes = [ ];
configKey = "markdown";
@@ -9,6 +9,6 @@ mkDprintPlugin {
};
pname = "dprint-plugin-markdown";
updateUrl = "https://plugins.dprint.dev/dprint/markdown/latest.json";
url = "https://plugins.dprint.dev/markdown-0.17.8.wasm";
version = "0.17.8";
url = "https://plugins.dprint.dev/markdown-0.18.0.wasm";
version = "0.18.0";
}
@@ -1,7 +1,7 @@
{ mkDprintPlugin }:
mkDprintPlugin {
description = "TOML code formatter.";
hash = "sha256-4g/nu8Wo7oF+8OAyXOzs9MuGpt2RFGvD58Bafnrr3ZQ=";
hash = "sha256-ASbIESaRVC0wtSpjkHbsyD4Hus6HdjjO58aRX9Nrhik=";
initConfig = {
configExcludes = [ ];
configKey = "toml";
@@ -9,6 +9,6 @@ mkDprintPlugin {
};
pname = "dprint-plugin-toml";
updateUrl = "https://plugins.dprint.dev/dprint/toml/latest.json";
url = "https://plugins.dprint.dev/toml-0.6.4.wasm";
version = "0.6.4";
url = "https://plugins.dprint.dev/toml-0.7.0.wasm";
version = "0.7.0";
}
@@ -1,7 +1,7 @@
{ mkDprintPlugin }:
mkDprintPlugin {
description = "TypeScript/JavaScript code formatter.";
hash = "sha256-urgKQOjgkoDJCH/K7DWLJCkD0iH0Ok+rvrNDI0i4uS0=";
hash = "sha256-/N6TH5hYsTHJcBWwpz874EDRxBv+SRhyPO8IyN5dzDU=";
initConfig = {
configExcludes = [ "**/node_modules" ];
configKey = "typescript";
@@ -16,6 +16,6 @@ mkDprintPlugin {
};
pname = "dprint-plugin-typescript";
updateUrl = "https://plugins.dprint.dev/dprint/typescript/latest.json";
url = "https://plugins.dprint.dev/typescript-0.93.3.wasm";
version = "0.93.3";
url = "https://plugins.dprint.dev/typescript-0.94.0.wasm";
version = "0.94.0";
}
@@ -1,7 +1,7 @@
{ mkDprintPlugin }:
mkDprintPlugin {
description = "CSS, SCSS, Sass and Less formatter.";
hash = "sha256-zt7F1tgPhPAn+gtps6+JB5RtvjIZw2n/G85Bv6kazgU=";
hash = "sha256-mFlhfqtglKtKNls96PO/2AWLL1fNC5msQCd9EgdKauE=";
initConfig = {
configExcludes = [ "**/node_modules" ];
configKey = "malva";
@@ -14,6 +14,6 @@ mkDprintPlugin {
};
pname = "g-plane-malva";
updateUrl = "https://plugins.dprint.dev/g-plane/malva/latest.json";
url = "https://plugins.dprint.dev/g-plane/malva-v0.11.1.wasm";
version = "0.11.1";
url = "https://plugins.dprint.dev/g-plane/malva-v0.11.2.wasm";
version = "0.11.2";
}
@@ -1,7 +1,7 @@
{ mkDprintPlugin }:
mkDprintPlugin {
description = "HTML, Vue, Svelte, Astro, Angular, Jinja, Twig, Nunjucks, and Vento formatter.";
hash = "sha256-G8UnJbc+oZ60V3oi8W2SS6H06zEYfY3wpmSUp+1GF8k=";
hash = "sha256-fCvurr8f79io/jIjwCfwr/WGjvcKZtptRrx9GFfytSI=";
initConfig = {
configExcludes = [ ];
configKey = "markup";
@@ -19,6 +19,6 @@ mkDprintPlugin {
};
pname = "g-plane-markup_fmt";
updateUrl = "https://plugins.dprint.dev/g-plane/markup_fmt/latest.json";
url = "https://plugins.dprint.dev/g-plane/markup_fmt-v0.18.0.wasm";
version = "0.18.0";
url = "https://plugins.dprint.dev/g-plane/markup_fmt-v0.19.0.wasm";
version = "0.19.0";
}
+3 -3
View File
@@ -6,16 +6,16 @@
buildNpmPackage rec {
pname = "eask-cli";
version = "0.10.3";
version = "0.11.0";
src = fetchFromGitHub {
owner = "emacs-eask";
repo = "cli";
rev = version;
hash = "sha256-PDWPamX3Jp28VLvyx5ZXtQ8sNTlYcwP3TlVPOgwnek8=";
hash = "sha256-xMay2HGw5vGvGIrbjCk0LNn5bvSiHbnpjfdGdO7BpQ4=";
};
npmDepsHash = "sha256-1VWTL4BzvSHmVIyteHkjVqLPtbrhD2MMg/I+4mnPBIw=";
npmDepsHash = "sha256-8/2DCFlQ0bQt9uajWm17qqp2zc8scHdscL6n/laSZZ8=";
dontBuild = true;
+3 -3
View File
@@ -8,16 +8,16 @@
buildGoModule rec {
pname = "fly";
version = "7.12.1";
version = "7.13.0";
src = fetchFromGitHub {
owner = "concourse";
repo = "concourse";
rev = "v${version}";
hash = "sha256-3RsFtU2C3XxBddyW5liAwia9I7Fc8f2+TsziiJy6rHg=";
hash = "sha256-myvYACdTqnEb8aBpBeCA1qvcnF0lwYbSo6kMgSz7iiA=";
};
vendorHash = "sha256-up77TV/A/C39LjgQ+1uQExWfMlbruLhY3H6820cRnt0=";
vendorHash = "sha256-WC4uzTgvW15IumwmsWXXeiF5qagbeb5XWRaSjd1XLvA=";
subPackages = [ "fly" ];
+2 -2
View File
@@ -11,13 +11,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "giza";
version = "1.4.4";
version = "1.5.0";
src = fetchFromGitHub {
owner = "danieljprice";
repo = "giza";
rev = "v${finalAttrs.version}";
hash = "sha256-FlD+emPrdXYmalHqQ6jKmkZudyLtlbeHtUOjT/D6UOA=";
hash = "sha256-tNz0Lh6bzQPxsd/Vz3jh8u0JiRXT0O43hyfgbGTJUeE=";
};
nativeBuildInputs = [
@@ -0,0 +1,15 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a05c447..20a5c98 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -276,8 +276,8 @@ endif()
# link glslang
find_package(glslang CONFIG REQUIRED)
-target_link_libraries(${PROJECT_NAME} PRIVATE glslang::OSDependent glslang::glslang
- glslang::MachineIndependent glslang::GenericCodeGen glslang::glslang-default-resource-limits
+target_link_libraries(${PROJECT_NAME} PRIVATE glslang::glslang
+ glslang::glslang-default-resource-limits
glslang::SPVRemapper glslang::SPIRV)
# link SPIRV-Cross
+63
View File
@@ -0,0 +1,63 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
glslang,
imath,
ktx-tools,
openimageio,
qt6Packages,
spdlog,
spirv-cross,
vulkan-memory-allocator,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "gpupad";
version = "2.4.0";
src = fetchFromGitHub {
owner = "houmain";
repo = "gpupad";
tag = finalAttrs.version;
hash = "sha256-yCoLvocfqYOwbsGn2r3+2iThDZCkRAUrNI71fIH7XXU=";
fetchSubmodules = true;
};
patches = [
# the current version of glslang no longer separates its libs into sublibs
./glslang-use-combined-lib.patch
];
strictDeps = true;
nativeBuildInputs = [
cmake
qt6Packages.wrapQtAppsHook
];
buildInputs = [
glslang
imath # needed for openimageio
ktx-tools
openimageio
qt6Packages.qtbase
qt6Packages.qtdeclarative
qt6Packages.qtmultimedia
spdlog
spirv-cross
vulkan-memory-allocator
];
meta = {
description = "Flexible GLSL and HLSL shader editor and IDE";
homepage = "https://github.com/houmain/gpupad";
changelog = "https://github.com/houmain/gpupad/blob/${finalAttrs.src.rev}/CHANGELOG.md";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [ tomasajt ];
mainProgram = "gpupad";
platforms = lib.platforms.linux;
};
})
+9
View File
@@ -2,6 +2,7 @@
lib,
stdenv,
fetchFromSourcehut,
fetchpatch,
wayland-scanner,
wayland,
}:
@@ -17,6 +18,14 @@ stdenv.mkDerivation rec {
hash = "sha256-8jP6I2zsDt57STtuq4F9mcsckrjvaCE5lavqKTjhNT0=";
};
patches = [
# Subject: [PATCH] fix JSON formatting of identifier string
(fetchpatch {
url = "https://git.sr.ht/~leon_plickat/lswt/commit/d35786da4383388c19f5437128fd393a6f16f74f.patch";
hash = "sha256-3RTq8BXRR7MgKV0BueoOjPORMrYVAKNbKR74hZ75W/Y=";
})
];
nativeBuildInputs = [ wayland-scanner ];
buildInputs = [ wayland ];
+46
View File
@@ -0,0 +1,46 @@
{
lib,
stdenv,
tclPackages,
fetchurl,
}:
stdenv.mkDerivation {
pname = "ma";
version = "11";
src = fetchurl {
url = "http://call-with-current-continuation.org/ma/ma.tar.gz";
hash = "sha256-1UVxXbN2jSNm13BjyoN3jbKtkO3DUEEHaDOC2Ibbxf4=";
};
buildInputs = [
tclPackages.tk
];
buildPhase = ''
runHook preBuild
./build
for f in B ma ma-eval; do
substituteInPlace $f --replace-fail \
'set exec_prefix ""' "set exec_prefix \"$out/bin/\""
done
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -Dt $out/bin \
B awd ma ma-eval plumb pty win
runHook postInstall
'';
meta = {
description = "minimalistic variant of the Acme editor";
homepage = "http://call-with-current-continuation.org/ma/ma.html";
mainProgram = "ma";
maintainers = with lib.maintainers; [ ehmry ];
license = lib.licenses.free;
inherit (tclPackages.tk.meta) platforms;
};
}
+9 -9
View File
@@ -1,21 +1,21 @@
{
"version": "3.136.0",
"version": "3.137.0",
"assets": {
"x86_64-linux": {
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.136.0/mirrord_linux_x86_64",
"hash": "sha256-MV6S23Ly0g2FPAhp2+RIMSC8D+s6NakVbMqLSwEr/2o="
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.137.0/mirrord_linux_x86_64",
"hash": "sha256-IrsvX7Z+8k3OvtojhWuSeeiO75Okth6MCF3sPs3jIZo="
},
"aarch64-linux": {
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.136.0/mirrord_linux_aarch64",
"hash": "sha256-zwistetfQCucaQ3yE1XHNChDhVCnSUq2ttl4XMnAQJU="
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.137.0/mirrord_linux_aarch64",
"hash": "sha256-E5Jhx3FsaVNCbvC1SH0D2GPsgQDwKkMPe/wR9MoVzKs="
},
"aarch64-darwin": {
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.136.0/mirrord_mac_universal",
"hash": "sha256-eSHJvtbCBxegYUjfplyBND2kinEqr5LlXJs9mm2U9wI="
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.137.0/mirrord_mac_universal",
"hash": "sha256-PKW2K5ITt1wagtET6MVx2rTn9CcqqujKaYt0XleIyzY="
},
"x86_64-darwin": {
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.136.0/mirrord_mac_universal",
"hash": "sha256-eSHJvtbCBxegYUjfplyBND2kinEqr5LlXJs9mm2U9wI="
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.137.0/mirrord_mac_universal",
"hash": "sha256-PKW2K5ITt1wagtET6MVx2rTn9CcqqujKaYt0XleIyzY="
}
}
}
@@ -6,6 +6,7 @@
desktop-file-utils,
fetchFromGitHub,
makeBinaryWrapper,
nix-update-script,
nodejs,
openssl,
pkg-config,
@@ -18,14 +19,15 @@
let
pnpm = pnpm_9;
in
rustPlatform.buildRustPackage rec {
rustPlatform.buildRustPackage (finalAttrs: {
pname = "modrinth-app-unwrapped";
version = "0.9.3";
src = fetchFromGitHub {
owner = "modrinth";
repo = "code";
tag = "v${version}";
tag = "v${finalAttrs.version}";
hash = "sha256-h+zj4Hm7v8SU6Zy0rIWbOknXVdSDf8b1d4q6M12J5Lc=";
};
@@ -33,7 +35,7 @@ rustPlatform.buildRustPackage rec {
cargoHash = "sha256-RrXSBgVh4UZFHcgUWhUjE7rEm/RZFDSDCpXS22gVjZ0=";
pnpmDeps = pnpm.fetchDeps {
inherit pname version src;
inherit (finalAttrs) pname version src;
hash = "sha256-nFuPFgwJw38XVxhW0QXmU31o+hqJKGJysnPg2YSg2D0=";
};
@@ -72,6 +74,10 @@ rustPlatform.buildRustPackage rec {
$out/share/applications/Modrinth\ App.desktop
'';
passthru = {
updateScript = nix-update-script { };
};
meta = {
description = "Modrinth's game launcher";
longDescription = ''
@@ -91,4 +97,4 @@ rustPlatform.buildRustPackage rec {
# See https://github.com/modrinth/code/issues/776#issuecomment-1742495678
broken = !stdenv.hostPlatform.isx86_64 && !stdenv.hostPlatform.isDarwin;
};
}
})
+2 -2
View File
@@ -8,7 +8,7 @@
buildNimPackage (finalAttrs: {
pname = "mosdepth";
version = "0.3.10";
version = "0.3.11";
requiredNimVersion = 1;
@@ -16,7 +16,7 @@ buildNimPackage (finalAttrs: {
owner = "brentp";
repo = "mosdepth";
rev = "v${finalAttrs.version}";
hash = "sha256-RAE3k2yA2zsIr5JFYb5bPaMzdoEKms7TKaqVhPS5LzY=";
hash = "sha256-EzzDuzPAyNkL2tFWre86U+kx3SvLPbWto2/vfLdwHGI=";
};
lockFile = ./lock.json;
+8 -2
View File
@@ -5,18 +5,20 @@
nim,
openssl,
makeWrapper,
nix-update-script,
}:
buildNimPackage (
final: prev: {
pname = "nimble";
version = "0.16.4";
version = "0.18.0";
src = fetchFromGitHub {
owner = "nim-lang";
repo = "nimble";
rev = "v${final.version}";
hash = "sha256-ASodRov4rO/IhjQRRdqVnLWMG1voXWM9F6R6VJd9qkM=";
hash = "sha256-HFuJiozRsRlVIXIv+vRjsfosrBlWfnUYtep27Fy/PPA=";
fetchSubmodules = true;
};
@@ -32,11 +34,15 @@ buildNimPackage (
--suffix PATH : ${lib.makeBinPath [ nim ]}
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "Package manager for the Nim programming language";
homepage = "https://github.com/nim-lang/nimble";
changelog = "https://github.com/nim-lang/nimble/releases/tag/v${final.version}";
license = lib.licenses.bsd3;
mainProgram = "nimble";
maintainers = [ lib.maintainers.daylinmorgan ];
};
}
)
+48
View File
@@ -0,0 +1,48 @@
{
stdenv,
lib,
fetchFromGitHub,
rustPlatform,
installShellFiles,
versionCheckHook,
nix-update-script,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "openstack-rs";
version = "0.10.0";
src = fetchFromGitHub {
owner = "gtema";
repo = "openstack";
tag = "v${finalAttrs.version}";
hash = "sha256-NDiqIhpKP7iGEAgAnaBekqjjWM7KqZPpdtPu/mEp1NU=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-S4FivjHkWC5tA1l4cheJsTECRfv8zyQbR88BqCeKFuc=";
nativeBuildInputs = [
installShellFiles
];
postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
installShellCompletion --cmd osc \
--bash <($out/bin/osc completion bash) \
--fish <($out/bin/osc completion fish) \
--zsh <($out/bin/osc completion zsh)
'';
doInstallCheck = true;
versionCheckProgram = "${placeholder "out"}/bin/${finalAttrs.meta.mainProgram}";
nativeInstallCheckInputs = [ versionCheckHook ];
passthru.updateScript = nix-update-script { };
meta = {
description = "OpenStack CLI and TUI implemented in Rust";
homepage = "https://github.com/gtema/openstack";
changelog = "https://github.com/gtema/openstack/releases/tag/v${finalAttrs.version}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ lykos153 ];
mainProgram = "osc";
};
})
+2 -2
View File
@@ -11,13 +11,13 @@
stdenv.mkDerivation rec {
pname = "osmo-hlr";
version = "1.9.0";
version = "1.9.1";
src = fetchFromGitHub {
owner = "osmocom";
repo = "osmo-hlr";
rev = version;
hash = "sha256-W9j/p7rQDF2/9L02fEeu85pV4lUrHT3xI7jUB2WkpKg=";
hash = "sha256-yi4sgcX8WOWz7qw/jGvVCtIYe867uBzLps8gdG6ziOA=";
};
postPatch = ''
+2 -2
View File
@@ -7,11 +7,11 @@
stdenv.mkDerivation (finalAttrs: {
pname = "otf2";
version = "3.0.3";
version = "3.1.1";
src = fetchurl {
url = "http://perftools.pages.jsc.fz-juelich.de/cicd/otf2/tags/otf2-${finalAttrs.version}/otf2-${finalAttrs.version}.tar.gz";
hash = "sha256-GKOQX3kXNAOH4+3I5XZvMasa9B9OzFZl2mx2nKIcTug=";
hash = "sha256-Wk4BOlGsTteU/jXFW3AM1yA0b9p/M+yEx2uGpfuICm4=";
};
configureFlags = [
+2 -2
View File
@@ -8,13 +8,13 @@
stdenvNoCC.mkDerivation rec {
pname = "pfetch";
version = "1.8.1";
version = "1.9.0";
src = fetchFromGitHub {
owner = "Un1q32";
repo = "pfetch";
tag = version;
hash = "sha256-lzXoe4RYfd8aSnrkpz5VYhMlJUcaMsZBZyPBOjpBXG8=";
hash = "sha256-DWntcAowiia4gEiYcZCJ6+uDGQ5h2eh/XwSSW+ThPKY=";
};
dontBuild = true;
+3 -3
View File
@@ -9,12 +9,12 @@
}:
let
version = "1.13.2";
version = "1.15.2";
pname = "session-desktop";
src = fetchurl {
url = "https://github.com/oxen-io/session-desktop/releases/download/v${version}/session-desktop-linux-x86_64-${version}.AppImage";
hash = "sha256-71v6CvlKa4m1LPG07eGhPqkpK60X4VrafCQyfjQR3rs=";
url = "https://github.com/session-foundation/session-desktop/releases/download/v${version}/session-desktop-linux-x86_64-${version}.AppImage";
hash = "sha256-xQ/Fjg04XgXUioCCU0+sOLaTWZV1z05EmzZCqEU++Ok=";
};
appimage = appimageTools.wrapType2 { inherit version pname src; };
appimage-contents = appimageTools.extractType2 { inherit version pname src; };
+2 -2
View File
@@ -12,13 +12,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "splash";
version = "3.11.1";
version = "3.11.2";
src = fetchFromGitHub {
owner = "danieljprice";
repo = "splash";
rev = "v${finalAttrs.version}";
hash = "sha256-zENMQpLsm6GlqrXsFDjEnMbtODcqwhB3jGfGHLuGcYw=";
hash = "sha256-YB0cgxpRlya8/7fYxPKWBCovHvE/N7HY/7nwKnzYiJc=";
};
nativeBuildInputs = [
+5 -5
View File
@@ -7,7 +7,7 @@
makeWrapper,
}:
let
version = "4.1.1";
version = "4.1.2";
inherit (stdenv.hostPlatform) system;
throwSystem = throw "tailwindcss has not been packaged for ${system} yet.";
@@ -22,10 +22,10 @@ let
hash =
{
aarch64-darwin = "sha256-moydWSkhoHmxd+4zeWwgneUNHOlJ9yqPXlGHhCQmYXA=";
aarch64-linux = "sha256-zTW+fGIkpwWRYMRJjZRJmO4YI5J6gOXOKUfq9KtGxKI=";
x86_64-darwin = "sha256-JPnnUj30uQVvj+dnq7+fG4Trt7ArLVPsP4G1RVUeZAA=";
x86_64-linux = "sha256-jIW4NmIW7dk3iTS0JY5V7PF9LfnWIVEDcYOUP0nWp1Y=";
aarch64-darwin = "sha256-6kR+iOsfIeHvNRdLP72Mv8nKkCN877dcKl1FNG4ij/A=";
aarch64-linux = "sha256-m6uFYOQ4P52WhA73/ZAZxt3hAnq+xhreueDoXOOKF88=";
x86_64-darwin = "sha256-6C12gk9WnGP5nhSBBZT2q8SoCCdyOHCszHtAQi1d+0A=";
x86_64-linux = "sha256-2g+J98RrSheoUp1LJCzFa1mivMoVLFpQPSAOV8eA8Gw=";
}
.${system} or throwSystem;
in
+5 -5
View File
@@ -15,18 +15,18 @@
stdenv.mkDerivation (finalAttrs: {
pname = "vencord";
version = "1.11.7";
version = "1.11.8";
src = fetchFromGitHub {
owner = "Vendicated";
repo = "Vencord";
rev = "v${finalAttrs.version}";
hash = "sha256-WzmRz0wf/Ss90FmXXp6gaylC0k/k/QkFaFddlnLo+Xk=";
hash = "sha256-Ej04ONaeNt55mbQ5RTKM4MySYsw3UJky9ZK9h1gMEzo=";
};
pnpmDeps = pnpm_10.fetchDeps {
inherit (finalAttrs) pname src;
hash = "sha256-g9BSVUKpn74D9eIDj/lS1Y6w/+AnhCw++st4s4REn+A=";
hash = "sha256-hO6QKRr4jTfesRDAEGcpFeJmGTGLGMw6EgIvD23DNzw=";
};
nativeBuildInputs = [
@@ -39,12 +39,12 @@ stdenv.mkDerivation (finalAttrs: {
ESBUILD_BINARY_PATH = lib.getExe (
esbuild.overrideAttrs (
final: _: {
version = "0.25.0";
version = "0.25.1";
src = fetchFromGitHub {
owner = "evanw";
repo = "esbuild";
rev = "v${final.version}";
hash = "sha256-L9jm94Epb22hYsU3hoq1lZXb5aFVD4FC4x2qNt0DljA=";
hash = "sha256-vrhtdrvrcC3dQoJM6hWq6wrGJLSiVww/CNPlL1N5kQ8=";
};
vendorHash = "sha256-+BfxCyg0KkDQpHt/wycy/8CTG6YBA/VJvJFhhzUnSiQ=";
}
@@ -10,13 +10,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "qtutilities";
version = "6.14.6";
version = "6.15.0";
src = fetchFromGitHub {
owner = "Martchus";
repo = "qtutilities";
rev = "v${finalAttrs.version}";
hash = "sha256-A61X6WKrP7CVgcRyB6phrVQo/B9VESRo0xTZV49KA3M=";
hash = "sha256-FWDvcUATod1n8CICmlQl/RA57c0EjLtwZ05mmVzc6Ec=";
};
nativeBuildInputs = [
@@ -5,6 +5,7 @@
django,
djangorestframework,
fetchFromGitHub,
gettext,
phonenumbers,
phonenumberslite,
python,
@@ -39,12 +40,18 @@ buildPythonPackage rec {
djangorestframework
];
nativeBuildInputs = [ gettext ];
pythonImportsCheck = [ "phonenumber_field" ];
checkPhase = ''
${python.interpreter} -m django test --settings tests.settings
'';
preBuild = ''
${python.interpreter} -m django compilemessages
'';
optional-dependencies = {
phonenumbers = [ phonenumbers ];
phonenumberslite = [ phonenumberslite ];
@@ -35,13 +35,13 @@ assert !lapack.isILP64;
buildPythonPackage rec {
pname = "meep";
version = "1.29.0";
version = "1.30.0";
src = fetchFromGitHub {
owner = "NanoComp";
repo = pname;
tag = "v${version}";
hash = "sha256-TB85obdk8pSWRaz3+3I6P6+dQtCHosWHRnKGck/wG9Q=";
hash = "sha256-9cQHvwUAeop5dRMVvedph+KQvTcmnkHdfqPQlSY280c=";
};
format = "other";
@@ -1,65 +1,65 @@
{
lib,
stdenv,
buildPythonPackage,
pythonOlder,
fetchFromGitHub,
fetchpatch2,
# build-system
setuptools,
versioningit,
# dependencies
autobahn,
cffi,
qcodes,
packaging,
pandas,
pytestCheckHook,
qcodes,
python-dotenv,
# tests
pytest-mock,
pytestCheckHook,
pyvisa-sim,
stdenv,
writableTmpDirAsHomeHook,
}:
buildPythonPackage rec {
pname = "qcodes-contrib-drivers";
version = "0.22.0";
version = "0.23.0";
pyproject = true;
disabled = pythonOlder "3.9";
src = fetchFromGitHub {
owner = "QCoDeS";
repo = "Qcodes_contrib_drivers";
tag = "v${version}";
sha256 = "sha256-/W5oC5iqYifMR3/s7aSQ2yTJNmkemkc0KVxIU0Es3zY=";
hash = "sha256-m2idBaQl2OVhrY5hcLTeXY6BycGf0ufa/ySgxaU2L/4=";
};
patches = [
(fetchpatch2 {
name = "numpy-v2-compat.patch";
url = "https://github.com/QCoDeS/Qcodes_contrib_drivers/commit/fc792779dbc0b023bdccfe8877dac192d75a88db.patch?full_index=1";
hash = "sha256-G+/IVG9a4mOFudpqEpI+Q/+WwF6lm2nRKjODCdzWHe0=";
})
];
build-system = [
setuptools
versioningit
];
dependencies = [
autobahn
cffi
qcodes
packaging
pandas
qcodes
python-dotenv
];
nativeCheckInputs = [
pytestCheckHook
pytest-mock
pytestCheckHook
pyvisa-sim
writableTmpDirAsHomeHook
];
pythonImportsCheck = [ "qcodes_contrib_drivers" ];
disabledTests =
lib.optionals (stdenv.hostPlatform.isDarwin) [
lib.optionals stdenv.hostPlatform.isDarwin [
# At index 13 diff: 'sour6:volt 0.29000000000000004' != 'sour6:volt 0.29'
"test_stability_diagram_external"
]
@@ -68,10 +68,6 @@ buildPythonPackage rec {
"test_stability_diagram_external"
];
postInstall = ''
export HOME="$TMPDIR"
'';
meta = {
description = "User contributed drivers for QCoDeS";
homepage = "https://github.com/QCoDeS/Qcodes_contrib_drivers";
@@ -51,6 +51,7 @@
lxml,
pip,
pytest-asyncio,
pytest-cov-stub,
pytest-mock,
pytest-rerunfailures,
pytest-xdist,
@@ -60,14 +61,14 @@
buildPythonPackage rec {
pname = "qcodes";
version = "0.51.0";
version = "0.52.0";
pyproject = true;
src = fetchFromGitHub {
owner = "microsoft";
repo = "Qcodes";
tag = "v${version}";
hash = "sha256-QgCMoZrC3ZCo8yayRXw9fvBj5xi+XH2x/E1MuQFULPo=";
hash = "sha256-AQBzYKD4RsPQBtq/FxFwYnSUf8wW87JOb2cOnk9MHDY=";
};
postPatch = ''
@@ -142,6 +143,7 @@ buildPythonPackage rec {
lxml
pip
pytest-asyncio
pytest-cov-stub
pytest-mock
pytest-rerunfailures
pytest-xdist
@@ -79,7 +79,7 @@
libvirt,
glib,
vips,
taglib_1,
taglib,
libopus,
linux-pam,
libidn,
@@ -642,15 +642,10 @@ in
};
iconv = attrs: {
dontBuild = false;
buildFlags = lib.optionals stdenv.hostPlatform.isDarwin [
"--with-iconv-dir=${lib.getLib libiconv}"
"--with-iconv-include=${lib.getDev libiconv}/include"
];
patches = [
# Fix incompatible function pointer conversion errors with clang 16
./iconv-fix-incompatible-function-pointer-conversions.patch
];
};
idn-ruby = attrs: {
@@ -1109,7 +1104,7 @@ in
};
taglib-ruby = attrs: {
buildInputs = [ taglib_1 ];
buildInputs = [ taglib ];
};
timfel-krb5-auth = attrs: {
@@ -1,51 +0,0 @@
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index 2801049..77fae7e 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -188,7 +188,7 @@ static VALUE iconv_convert _((iconv_t cd, VALUE str, long start, long length, in
static VALUE iconv_s_allocate _((VALUE klass));
static VALUE iconv_initialize _((int argc, VALUE *argv, VALUE self));
static VALUE iconv_s_open _((int argc, VALUE *argv, VALUE self));
-static VALUE iconv_s_convert _((struct iconv_env_t* env));
+static VALUE iconv_s_convert _((VALUE env));
static VALUE iconv_s_iconv _((int argc, VALUE *argv, VALUE self));
static VALUE iconv_init_state _((VALUE cd));
static VALUE iconv_finish _((VALUE self));
@@ -204,7 +204,7 @@ static VALUE charset_map;
* Returns the map from canonical name to system dependent name.
*/
static VALUE
-charset_map_get(void)
+charset_map_get(VALUE klass)
{
return charset_map;
}
@@ -642,7 +642,7 @@ iconv_s_allocate(VALUE klass)
}
static VALUE
-get_iconv_opt_i(VALUE i, VALUE arg)
+get_iconv_opt_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, arg))
{
VALUE name;
#if defined ICONV_SET_TRANSLITERATE || defined ICONV_SET_DISCARD_ILSEQ
@@ -784,8 +784,9 @@ iconv_s_open(int argc, VALUE *argv, VALUE self)
}
static VALUE
-iconv_s_convert(struct iconv_env_t* env)
+iconv_s_convert(VALUE env_value)
{
+ struct iconv_env_t* env = (struct iconv_env_t*)env_value;
VALUE last = 0;
for (; env->argc > 0; --env->argc, ++env->argv) {
@@ -906,7 +907,7 @@ list_iconv(unsigned int namescount, const char *const *names, void *data)
#if defined(HAVE_ICONVLIST) || defined(HAVE___ICONV_FREE_LIST)
static VALUE
-iconv_s_list(void)
+iconv_s_list(VALUE klass)
{
#ifdef HAVE_ICONVLIST
int state;
@@ -86,7 +86,6 @@ gem 'jekyll-webmention_io'
gem 'jmespath'
gem 'jwt'
gem 'kramdown-rfc2629'
gem 'libv8'
gem 'libxml-ruby'
gem 'mail'
gem 'magic'
@@ -26,12 +26,12 @@ let
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "coreboot-toolchain-${arch}";
version = "24.12";
version = "25.03";
src = fetchgit {
url = "https://review.coreboot.org/coreboot";
rev = finalAttrs.version;
hash = "sha256-vK2kxLJZFz7QqWYRF6JIGrM2Hobmzp31HtQMpb1mx9M=";
hash = "sha256-zyfBQKVton+2vjYd6fqrUqkHY9bci411pujRGabvTjQ=";
fetchSubmodules = false;
leaveDotGit = true;
postFetch = ''
@@ -36,10 +36,10 @@
};
}
{
name = "acpica-unix-20230628.tar.gz";
name = "acpica-unix-20241212.tar.gz";
archive = fetchurl {
sha256 = "1kjwzyfrmw0fhawjvpqib3l5jxdlcpj3vv92sb7ls8ixbrs6m1w6";
url = "https://downloadmirror.intel.com/783534/acpica-unix-20230628.tar.gz";
sha256 = "0q8rqc9nxvyg4310rc93az04j01p91q7ipzvhl2722rrxv7q7jlx";
url = "https://github.com/acpica/acpica/releases/download/R2024_12_12/acpica-unix-20241212.tar.gz";
};
}
{
+3 -3
View File
@@ -24,13 +24,13 @@ let
in
stdenv.mkDerivation {
pname = "dxx-rebirth";
version = "0.60.0-beta2-unstable-2025-03-01";
version = "0.60.0-beta2-unstable-2025-03-29";
src = fetchFromGitHub {
owner = "dxx-rebirth";
repo = "dxx-rebirth";
rev = "d96665375a8bd273dcc0d0b21c87249861b0e00f";
hash = "sha256-HoGRpqfgPh7nBYbX5ZGETgNNKtDs22IarVzvSTWLi58=";
rev = "ddc84fa623ed508073cf99244db731bd73f36b6b";
hash = "sha256-VZ3PQ4YECM+z+V1zPSNdgIIBFjRIAunEmhENJAUj+P8=";
};
nativeBuildInputs = [
+2 -2
View File
@@ -16,7 +16,7 @@
}:
let
version = "24.12";
version = "25.03";
commonMeta = {
description = "Various coreboot-related tools";
@@ -45,7 +45,7 @@ let
src = fetchgit {
url = "https://review.coreboot.org/coreboot";
rev = version;
hash = "sha256-PtHvzMf9sKvrgWVT5XVCy4BbMklCKcpnJAE+WeE2Cgs=";
hash = "sha256-tsNdsH+GxjLUTd7KXHMZUTNTIAWeKJ3BNy1Lehjo8Eo=";
};
enableParallelBuilding = true;
+3 -3
View File
@@ -11,17 +11,17 @@
rustPlatform.buildRustPackage rec {
pname = "topgrade";
version = "16.0.2";
version = "16.0.3";
src = fetchFromGitHub {
owner = "topgrade-rs";
repo = "topgrade";
rev = "v${version}";
hash = "sha256-0wJxBFGPjJReWoeeKpHEsKaB3npR8nf7Uw8BgPQ+ccs=";
hash = "sha256-TLeShvDdVqFBIStdRlgF1Zmi8FwS9pmeQ9qOu63nq/E=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-/sN5Vl1Co2VYnG2vN170Q3hAbOYhJSvLawJDFytz+ho=";
cargoHash = "sha256-Tu4exuUhsk9hGDreQWkPrYvokZh0z6DQSQnREO40Qwc=";
nativeBuildInputs = [
installShellFiles
+1
View File
@@ -14120,6 +14120,7 @@ with pkgs;
docker_25
docker_26
docker_27
docker_28
;
docker = docker_27;
File diff suppressed because it is too large Load Diff