Merge master into staging-next
This commit is contained in:
@@ -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
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -125,7 +125,7 @@ in
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectControlGroups = true;
|
||||
ProcSubset = "pid";
|
||||
ProcSubset = "all";
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
SystemCallArchitectures = "native";
|
||||
|
||||
+128
-113
@@ -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()}"
|
||||
'';
|
||||
}
|
||||
)
|
||||
|
||||
@@ -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=";
|
||||
};
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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
@@ -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": {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 there’s 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";
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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" ];
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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;
|
||||
};
|
||||
})
|
||||
@@ -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 ];
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 ];
|
||||
};
|
||||
}
|
||||
)
|
||||
|
||||
@@ -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";
|
||||
};
|
||||
})
|
||||
@@ -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 = ''
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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; };
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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: {
|
||||
|
||||
-51
@@ -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";
|
||||
};
|
||||
}
|
||||
{
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -14120,6 +14120,7 @@ with pkgs;
|
||||
docker_25
|
||||
docker_26
|
||||
docker_27
|
||||
docker_28
|
||||
;
|
||||
|
||||
docker = docker_27;
|
||||
|
||||
+557
-567
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user