mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-09-28 02:40:50 +00:00
Merge staging-next into staging
This commit is contained in:
@@ -250,6 +250,8 @@
|
||||
|
||||
- `services.gitea` supports sending notifications with sendmail again. To do this, activate the parameter `services.gitea.mailerUseSendmail` and configure SMTP server.
|
||||
|
||||
- `networking.wireless.networks.<name>` now has an option to specify SSID, hence allowing duplicated SSID setup. The BSSID option is added along side with this.
|
||||
|
||||
- Revamp of the ACME certificate acquisication and renewal process to help scale systems with lots (100+) of certificates.
|
||||
|
||||
Units and targets have been reshaped to better support more specific dependency propagation and avoid
|
||||
|
||||
@@ -37,7 +37,9 @@ let
|
||||
mkWPA2Fallback = opts: opts // { authProtocols = subtractLists wpa3Protocols opts.authProtocols; };
|
||||
|
||||
# Networks attrset as a list
|
||||
networkList = mapAttrsToList (ssid: opts: opts // { inherit ssid; }) cfg.networks;
|
||||
# We use the ssid from the options, which defaults to the ssid but can be overridden.
|
||||
# The ssid in attrNames is hence unused here.
|
||||
networkList = attrValues cfg.networks;
|
||||
|
||||
# List of all networks (normal + generated fallbacks)
|
||||
allNetworks =
|
||||
@@ -89,6 +91,7 @@ let
|
||||
"key_mgmt=NONE"
|
||||
)
|
||||
]
|
||||
++ optional (opts.bssid != null) "bssid=${opts.bssid}"
|
||||
++ optional opts.hidden "scan_ssid=1"
|
||||
++ optional (pskString != null) "psk=${pskString}"
|
||||
++ optionals (opts.auth != null) (filter (x: x != "") (splitString "\n" opts.auth))
|
||||
@@ -280,170 +283,195 @@ in
|
||||
|
||||
networks = mkOption {
|
||||
type = types.attrsOf (
|
||||
types.submodule {
|
||||
options = {
|
||||
psk = mkOption {
|
||||
type = types.nullOr (types.strMatching "[[:print:]]{8,63}");
|
||||
default = null;
|
||||
description = ''
|
||||
The network's pre-shared key in plaintext defaulting
|
||||
to being a network without any authentication.
|
||||
types.submodule (
|
||||
{ name, ... }:
|
||||
{
|
||||
options = {
|
||||
ssid = mkOption {
|
||||
type = types.str;
|
||||
default = name;
|
||||
description = ''
|
||||
You could use this field to override the network's ssid.
|
||||
This can be useful to, for example, specify two networks
|
||||
that share the same SSID but not the same password.
|
||||
Specifying the BSSID of the network can make two entries of
|
||||
the same SSID show up as different ones in wpa_cli.
|
||||
'';
|
||||
};
|
||||
|
||||
::: {.warning}
|
||||
Be aware that this will be written to the Nix store
|
||||
in plaintext! Use {var}`pskRaw` with an external
|
||||
reference to keep it safe.
|
||||
:::
|
||||
bssid = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = "02:00:00:00:00:01";
|
||||
description = ''
|
||||
If set, this network block is used only when associating with
|
||||
the AP using the configured BSSID.
|
||||
'';
|
||||
};
|
||||
|
||||
::: {.note}
|
||||
Mutually exclusive with {var}`pskRaw`.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
psk = mkOption {
|
||||
type = types.nullOr (types.strMatching "[[:print:]]{8,63}");
|
||||
default = null;
|
||||
description = ''
|
||||
The network's pre-shared key in plaintext defaulting
|
||||
to being a network without any authentication.
|
||||
|
||||
pskRaw = mkOption {
|
||||
type = types.nullOr (types.strMatching "([[:xdigit:]]{64})|(ext:[^=]+)");
|
||||
default = null;
|
||||
example = "ext:name_of_the_secret_here";
|
||||
description = ''
|
||||
Either the raw pre-shared key in hexadecimal format
|
||||
or the name of the secret (as defined inside
|
||||
[](#opt-networking.wireless.secretsFile) and prefixed
|
||||
with `ext:`) containing the network pre-shared key.
|
||||
::: {.warning}
|
||||
Be aware that this will be written to the Nix store
|
||||
in plaintext! Use {var}`pskRaw` with an external
|
||||
reference to keep it safe.
|
||||
:::
|
||||
|
||||
::: {.warning}
|
||||
Be aware that this will be written to the Nix store
|
||||
in plaintext! Always use an external reference.
|
||||
:::
|
||||
::: {.note}
|
||||
Mutually exclusive with {var}`pskRaw`.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
::: {.note}
|
||||
The external secret can be either the plaintext
|
||||
passphrase or the raw pre-shared key.
|
||||
:::
|
||||
pskRaw = mkOption {
|
||||
type = types.nullOr (types.strMatching "([[:xdigit:]]{64})|(ext:[^=]+)");
|
||||
default = null;
|
||||
example = "ext:name_of_the_secret_here";
|
||||
description = ''
|
||||
Either the raw pre-shared key in hexadecimal format
|
||||
or the name of the secret (as defined inside
|
||||
[](#opt-networking.wireless.secretsFile) and prefixed
|
||||
with `ext:`) containing the network pre-shared key.
|
||||
|
||||
::: {.note}
|
||||
Mutually exclusive with {var}`psk` and {var}`auth`.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
::: {.warning}
|
||||
Be aware that this will be written to the Nix store
|
||||
in plaintext! Always use an external reference.
|
||||
:::
|
||||
|
||||
authProtocols = mkOption {
|
||||
default = [
|
||||
# WPA2 and WPA3
|
||||
"WPA-PSK"
|
||||
"WPA-EAP"
|
||||
"SAE"
|
||||
# 802.11r variants of the above
|
||||
"FT-PSK"
|
||||
"FT-EAP"
|
||||
"FT-SAE"
|
||||
];
|
||||
# The list can be obtained by running this command
|
||||
# awk '
|
||||
# /^# key_mgmt: /{ run=1 }
|
||||
# /^#$/{ run=0 }
|
||||
# /^# [A-Z0-9-]{2,}/{ if(run){printf("\"%s\"\n", $2)} }
|
||||
# ' /run/current-system/sw/share/doc/wpa_supplicant/wpa_supplicant.conf.example
|
||||
type = types.listOf (
|
||||
types.enum [
|
||||
::: {.note}
|
||||
The external secret can be either the plaintext
|
||||
passphrase or the raw pre-shared key.
|
||||
:::
|
||||
|
||||
::: {.note}
|
||||
Mutually exclusive with {var}`psk` and {var}`auth`.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
authProtocols = mkOption {
|
||||
default = [
|
||||
# WPA2 and WPA3
|
||||
"WPA-PSK"
|
||||
"WPA-EAP"
|
||||
"IEEE8021X"
|
||||
"NONE"
|
||||
"WPA-NONE"
|
||||
"SAE"
|
||||
# 802.11r variants of the above
|
||||
"FT-PSK"
|
||||
"FT-EAP"
|
||||
"FT-EAP-SHA384"
|
||||
"WPA-PSK-SHA256"
|
||||
"WPA-EAP-SHA256"
|
||||
"SAE"
|
||||
"FT-SAE"
|
||||
"WPA-EAP-SUITE-B"
|
||||
"WPA-EAP-SUITE-B-192"
|
||||
"OSEN"
|
||||
"FILS-SHA256"
|
||||
"FILS-SHA384"
|
||||
"FT-FILS-SHA256"
|
||||
"FT-FILS-SHA384"
|
||||
"OWE"
|
||||
"DPP"
|
||||
]
|
||||
);
|
||||
description = ''
|
||||
The list of authentication protocols accepted by this network.
|
||||
This corresponds to the `key_mgmt` option in wpa_supplicant.
|
||||
'';
|
||||
];
|
||||
# The list can be obtained by running this command
|
||||
# awk '
|
||||
# /^# key_mgmt: /{ run=1 }
|
||||
# /^#$/{ run=0 }
|
||||
# /^# [A-Z0-9-]{2,}/{ if(run){printf("\"%s\"\n", $2)} }
|
||||
# ' /run/current-system/sw/share/doc/wpa_supplicant/wpa_supplicant.conf.example
|
||||
type = types.listOf (
|
||||
types.enum [
|
||||
"WPA-PSK"
|
||||
"WPA-EAP"
|
||||
"IEEE8021X"
|
||||
"NONE"
|
||||
"WPA-NONE"
|
||||
"FT-PSK"
|
||||
"FT-EAP"
|
||||
"FT-EAP-SHA384"
|
||||
"WPA-PSK-SHA256"
|
||||
"WPA-EAP-SHA256"
|
||||
"SAE"
|
||||
"FT-SAE"
|
||||
"WPA-EAP-SUITE-B"
|
||||
"WPA-EAP-SUITE-B-192"
|
||||
"OSEN"
|
||||
"FILS-SHA256"
|
||||
"FILS-SHA384"
|
||||
"FT-FILS-SHA256"
|
||||
"FT-FILS-SHA384"
|
||||
"OWE"
|
||||
"DPP"
|
||||
]
|
||||
);
|
||||
description = ''
|
||||
The list of authentication protocols accepted by this network.
|
||||
This corresponds to the `key_mgmt` option in wpa_supplicant.
|
||||
'';
|
||||
};
|
||||
|
||||
auth = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = ''
|
||||
eap=PEAP
|
||||
identity="user@example.com"
|
||||
password=ext:example_password
|
||||
'';
|
||||
description = ''
|
||||
Use this option to configure advanced authentication methods
|
||||
like EAP. See {manpage}`wpa_supplicant.conf(5)` for example
|
||||
configurations.
|
||||
|
||||
::: {.warning}
|
||||
Be aware that this will be written to the Nix store
|
||||
in plaintext! Use an external reference like
|
||||
`ext:secretname` for secrets.
|
||||
:::
|
||||
|
||||
::: {.note}
|
||||
Mutually exclusive with {var}`psk` and {var}`pskRaw`.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
hidden = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Set this to `true` if the SSID of the network is hidden.
|
||||
'';
|
||||
example = literalExpression ''
|
||||
{ echelon = {
|
||||
hidden = true;
|
||||
psk = "abcdefgh";
|
||||
};
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
priority = mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = null;
|
||||
description = ''
|
||||
By default, all networks will get same priority group (0). If
|
||||
some of the networks are more desirable, this field can be used
|
||||
to change the order in which wpa_supplicant goes through the
|
||||
networks when selecting a BSS. The priority groups will be
|
||||
iterated in decreasing priority (i.e., the larger the priority
|
||||
value, the sooner the network is matched against the scan
|
||||
results). Within each priority group, networks will be selected
|
||||
based on security policy, signal strength, etc.
|
||||
'';
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
example = ''
|
||||
bssid_blacklist=02:11:22:33:44:55 02:22:aa:44:55:66
|
||||
'';
|
||||
description = ''
|
||||
Extra configuration lines appended to the network block.
|
||||
See {manpage}`wpa_supplicant.conf(5)` for available options.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
auth = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = ''
|
||||
eap=PEAP
|
||||
identity="user@example.com"
|
||||
password=ext:example_password
|
||||
'';
|
||||
description = ''
|
||||
Use this option to configure advanced authentication methods
|
||||
like EAP. See {manpage}`wpa_supplicant.conf(5)` for example
|
||||
configurations.
|
||||
|
||||
::: {.warning}
|
||||
Be aware that this will be written to the Nix store
|
||||
in plaintext! Use an external reference like
|
||||
`ext:secretname` for secrets.
|
||||
:::
|
||||
|
||||
::: {.note}
|
||||
Mutually exclusive with {var}`psk` and {var}`pskRaw`.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
hidden = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Set this to `true` if the SSID of the network is hidden.
|
||||
'';
|
||||
example = literalExpression ''
|
||||
{ echelon = {
|
||||
hidden = true;
|
||||
psk = "abcdefgh";
|
||||
};
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
priority = mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = null;
|
||||
description = ''
|
||||
By default, all networks will get same priority group (0). If
|
||||
some of the networks are more desirable, this field can be used
|
||||
to change the order in which wpa_supplicant goes through the
|
||||
networks when selecting a BSS. The priority groups will be
|
||||
iterated in decreasing priority (i.e., the larger the priority
|
||||
value, the sooner the network is matched against the scan
|
||||
results). Within each priority group, networks will be selected
|
||||
based on security policy, signal strength, etc.
|
||||
'';
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
example = ''
|
||||
bssid_blacklist=02:11:22:33:44:55 02:22:aa:44:55:66
|
||||
'';
|
||||
description = ''
|
||||
Extra configuration lines appended to the network block.
|
||||
See {manpage}`wpa_supplicant.conf(5)` for available options.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
)
|
||||
);
|
||||
description = ''
|
||||
The network definitions to automatically connect to when
|
||||
|
||||
@@ -13,8 +13,31 @@ let
|
||||
|
||||
naughtyPassphrase = ''!,./;'[]\-=<>?:"{}|_+@$%^&*()`~ # ceci n'est pas un commentaire'';
|
||||
|
||||
runBssidTest =
|
||||
name: expectedBssid: extraConfig:
|
||||
runSimulatorTest name extraConfig ''
|
||||
with subtest("Daemon can connect to the right access point"):
|
||||
machine.wait_for_unit("wpa_supplicant-wlan1.service")
|
||||
machine.wait_until_succeeds(
|
||||
"wpa_cli -i wlan1 status | grep -q wpa_state=COMPLETED"
|
||||
)
|
||||
machine.wait_until_succeeds(
|
||||
"wpa_cli -i wlan1 status | grep -q bssid=${expectedBssid}"
|
||||
)
|
||||
'';
|
||||
|
||||
runConnectionTest =
|
||||
name: extraConfig:
|
||||
runSimulatorTest name extraConfig ''
|
||||
with subtest("Daemon can connect to the access point"):
|
||||
machine.wait_for_unit("wpa_supplicant-wlan1.service")
|
||||
machine.wait_until_succeeds(
|
||||
"wpa_cli -i wlan1 status | grep -q wpa_state=COMPLETED"
|
||||
)
|
||||
'';
|
||||
|
||||
runSimulatorTest =
|
||||
name: extraConfig: extraTestScript:
|
||||
runTest {
|
||||
name = "wpa_supplicant-${name}";
|
||||
inherit meta;
|
||||
@@ -50,12 +73,22 @@ let
|
||||
bssid = "02:00:00:00:00:01";
|
||||
};
|
||||
wlan0-2 = {
|
||||
ssid = "nixos-test-mixed";
|
||||
authentication = {
|
||||
mode = "wpa3-sae-transition";
|
||||
saeAddToMacAllow = true;
|
||||
saePasswordsFile = pkgs.writeText "password" naughtyPassphrase;
|
||||
wpaPasswordFile = pkgs.writeText "password" naughtyPassphrase;
|
||||
};
|
||||
bssid = "02:00:00:00:00:02";
|
||||
};
|
||||
wlan0-3 = {
|
||||
ssid = "nixos-test-wpa2";
|
||||
authentication = {
|
||||
mode = "wpa2-sha256";
|
||||
wpaPassword = naughtyPassphrase;
|
||||
};
|
||||
bssid = "02:00:00:00:00:02";
|
||||
bssid = "02:00:00:00:00:03";
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -85,11 +118,7 @@ let
|
||||
machine.wait_for_unit("hostapd.service")
|
||||
machine.copy_from_vm("/run/hostapd/wlan0.hostapd.conf")
|
||||
|
||||
with subtest("Daemon can connect to the access point"):
|
||||
machine.wait_for_unit("wpa_supplicant-wlan1.service")
|
||||
machine.wait_until_succeeds(
|
||||
"wpa_cli -i wlan1 status | grep -q wpa_state=COMPLETED"
|
||||
)
|
||||
${extraTestScript}
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -129,6 +158,18 @@ in
|
||||
psk = "password";
|
||||
authProtocols = [ "SAE" ];
|
||||
};
|
||||
|
||||
# Test duplicate SSID generation
|
||||
duplicate1 = {
|
||||
ssid = "duplicate";
|
||||
bssid = "00:00:00:00:00:01";
|
||||
psk = "password";
|
||||
};
|
||||
duplicate2 = {
|
||||
ssid = "duplicate";
|
||||
bssid = "00:00:00:00:00:02";
|
||||
psk = "password";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -148,6 +189,12 @@ in
|
||||
assert int(machine.succeed(f"grep -c sae-only {config_file}")) == 1
|
||||
assert int(machine.succeed(f"grep -c mixed-wpa {config_file}")) == 2
|
||||
|
||||
with subtest("Duplicate SSID network blocks have been generated"):
|
||||
# more duplication due to fallbacks
|
||||
assert int(machine.succeed(f"grep -c duplicate {config_file}")) == 4
|
||||
assert int(machine.succeed(f"grep -c bssid=00:00:00:00:00:01 {config_file}")) == 2
|
||||
assert int(machine.succeed(f"grep -c bssid=00:00:00:00:00:02 {config_file}")) == 2
|
||||
|
||||
# save file for manual inspection
|
||||
machine.copy_from_vm(config_file)
|
||||
'';
|
||||
@@ -222,4 +269,23 @@ in
|
||||
authProtocols = [ "WPA-PSK-SHA256" ];
|
||||
};
|
||||
};
|
||||
|
||||
# Test connection with the highest prio "matching" network block found.
|
||||
# "Matching" meaning with the right SSID and BSSID
|
||||
bssidGuard = runBssidTest "bssid-guard" "02:00:00:00:00:02" {
|
||||
networks = {
|
||||
"1_first" = {
|
||||
ssid = "nixos-test-mixed";
|
||||
bssid = "02:00:00:00:00:01";
|
||||
pskRaw = "ext:psk_nixos_test";
|
||||
};
|
||||
"2_second" = {
|
||||
ssid = "nixos-test-mixed";
|
||||
bssid = "02:00:00:00:00:02";
|
||||
pskRaw = "ext:psk_nixos_test";
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "material-icon-theme";
|
||||
publisher = "PKief";
|
||||
version = "5.26.0";
|
||||
hash = "sha256-AXQ2md1lApIFW1NIY5gjVIWdKOv0fxs0rRpIbjmCgwM=";
|
||||
version = "5.27.0";
|
||||
hash = "sha256-vP5jMijMIKHUmvSaTX+eEO6Z3dzUCR6S/ZdPxjJHIT8=";
|
||||
};
|
||||
meta = {
|
||||
description = "Material Design Icons for Visual Studio Code";
|
||||
|
||||
@@ -54,11 +54,11 @@
|
||||
"vendorHash": "sha256-WT4sjem80445Qwlr3i/OuQMujrxEKqhws1GLpvbqKaU="
|
||||
},
|
||||
"alicloud": {
|
||||
"hash": "sha256-pCGmH70Ro4QSpcHBhUpoQtQBTos3QluJxfPJkJP3+ng=",
|
||||
"hash": "sha256-zh90t+oPTiQ7S3F3H00Y3/cGj1Dx3Jd8wZZ4CpuNVYQ=",
|
||||
"homepage": "https://registry.terraform.io/providers/aliyun/alicloud",
|
||||
"owner": "aliyun",
|
||||
"repo": "terraform-provider-alicloud",
|
||||
"rev": "v1.258.0",
|
||||
"rev": "v1.259.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-+Hc2NCCnJ0fB86fvgE4Kak8fwlsXIiv8avIhE/RoWeM="
|
||||
},
|
||||
@@ -840,11 +840,11 @@
|
||||
"vendorHash": "sha256-33hZ+MB96pFkHCG3UkKcnPp8wpE8POEHLz12OSF8ujI="
|
||||
},
|
||||
"minio": {
|
||||
"hash": "sha256-XYo+nn9rgK9OtwdowqcTyuMir+7KPPjVeMLwFeWvdEQ=",
|
||||
"hash": "sha256-+I1nTNxLVny0pgdMF7vXPC3WxkInSXnbeHcqgrWG55s=",
|
||||
"homepage": "https://registry.terraform.io/providers/aminueza/minio",
|
||||
"owner": "aminueza",
|
||||
"repo": "terraform-provider-minio",
|
||||
"rev": "v3.6.4",
|
||||
"rev": "v3.6.5",
|
||||
"spdx": "AGPL-3.0",
|
||||
"vendorHash": "sha256-QWBzQXx/dzWZr9dn3LHy8RIvZL1EA9xYqi7Ppzvju7g="
|
||||
},
|
||||
@@ -1111,11 +1111,11 @@
|
||||
"vendorHash": "sha256-j+3qtGlueKZgf0LuNps4Wc9G3EmpSgl8ZNSLqslyizI="
|
||||
},
|
||||
"rancher2": {
|
||||
"hash": "sha256-DIYIfBjNBt+GKflmgHeAEC3uqD/JZ7FhT77lV4J9w+0=",
|
||||
"hash": "sha256-durRRgJmbGK0GBvlzzeq7stic8fzxBMmswYhMYnEL6E=",
|
||||
"homepage": "https://registry.terraform.io/providers/rancher/rancher2",
|
||||
"owner": "rancher",
|
||||
"repo": "terraform-provider-rancher2",
|
||||
"rev": "v8.0.0",
|
||||
"rev": "v8.1.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-M2lJKmIR66lQKFkInjizn68ax2Gq4sim5Y3vZKyDhZ8="
|
||||
},
|
||||
@@ -1345,20 +1345,20 @@
|
||||
"vendorHash": "sha256-J2fLyYvlnefFIaJ6UwRfJ5nas86JCuOHAdWalr9T9fw="
|
||||
},
|
||||
"temporalcloud": {
|
||||
"hash": "sha256-tXNnDoUskOcmOKPpgBIcLcup0jMqRVWkhwSU3GKjAFI=",
|
||||
"hash": "sha256-MnfGps/PeTjhLXXcy37JHy38R3zDqjdLv99SY/F+jGM=",
|
||||
"homepage": "https://registry.terraform.io/providers/temporalio/temporalcloud",
|
||||
"owner": "temporalio",
|
||||
"repo": "terraform-provider-temporalcloud",
|
||||
"rev": "v1.0.0",
|
||||
"rev": "v1.1.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-M3wnvRxMyU0Yo733E9e8Q++xVTuSXD0W3fB2C14RDNU="
|
||||
},
|
||||
"tencentcloud": {
|
||||
"hash": "sha256-5Ue8PCe4RPA9ImzAuWj2LlxBbRCc0VQBb1AhX4vFB3g=",
|
||||
"hash": "sha256-Tw7fMcUZMn41nbiPoxJNyYkLte9T8AgU9Qy6HiqTDzY=",
|
||||
"homepage": "https://registry.terraform.io/providers/tencentcloudstack/tencentcloud",
|
||||
"owner": "tencentcloudstack",
|
||||
"repo": "terraform-provider-tencentcloud",
|
||||
"rev": "v1.82.20",
|
||||
"rev": "v1.82.22",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": null
|
||||
},
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "django-upgrade";
|
||||
version = "1.27.0";
|
||||
version = "1.28.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "adamchainz";
|
||||
repo = "django-upgrade";
|
||||
tag = version;
|
||||
hash = "sha256-QvjXDnXQuRqnpWbnmqeDL3gNFiYIlG87QQVXsYc99YQ=";
|
||||
hash = "sha256-GX8qIpkXD/XTxj5fp46xG+ZVEDnkuOeBJm4tS9uXC6Q=";
|
||||
};
|
||||
|
||||
build-system = [ python3Packages.setuptools ];
|
||||
|
||||
@@ -8,17 +8,17 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "gitea-actions-runner";
|
||||
version = "0.2.12";
|
||||
version = "0.2.13";
|
||||
|
||||
src = fetchFromGitea {
|
||||
domain = "gitea.com";
|
||||
owner = "gitea";
|
||||
repo = "act_runner";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-z/wEs110Y2IZ2Jm6bayxlD2sjyl2V/v+gP6l9pwGi5o=";
|
||||
hash = "sha256-S0pZddExNw4RQvigWJh4r1CPDS+eOCa1n/8278J3wR4=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-HuiL6OLShSeGtHb4dOeOFOpOgl55s3x18uYgM4X8G7M=";
|
||||
vendorHash = "sha256-F+rFv0s/GBY3InWiofk3MCADfyauAmL/TpilWhZB5vE=";
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "libcpuid";
|
||||
version = "0.8.0";
|
||||
version = "0.8.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "anrieff";
|
||||
repo = "libcpuid";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-m/4PJGknuoiWR40aIHtkaHuMEROjsYQ9ZgmJtHdzeSU=";
|
||||
hash = "sha256-+/TTlGk1ePPTHrSTSZmPHT2h3gKs9ouCF4ElvLWHF/g=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ autoreconfHook ];
|
||||
|
||||
@@ -21,16 +21,16 @@
|
||||
}:
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "ruffle";
|
||||
version = "0.2-nightly-2025-09-02";
|
||||
version = "0.2-nightly-2025-09-13";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ruffle-rs";
|
||||
repo = "ruffle";
|
||||
tag = lib.strings.removePrefix "0.2-" finalAttrs.version;
|
||||
hash = "sha256-QpX30big3hEL2KaUo6M4BfWrQOGMfnrxSluOQKoveaE=";
|
||||
hash = "sha256-Mzb5Ki6RyQIpeHRGtfGVURmvVMNuBBIjp+31M0m7oGw=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-celZXTEzjxDm804D39LE1MSsrGcqIZE9o6ZmoNgIMnA=";
|
||||
cargoHash = "sha256-y65rM5sfSN8OA13Dwrt1VhiiODzdF0UmAA1IJwycfL0=";
|
||||
cargoBuildFlags = lib.optional withRuffleTools "--workspace";
|
||||
|
||||
env =
|
||||
|
||||
@@ -9,16 +9,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "rustic";
|
||||
version = "0.9.5";
|
||||
version = "0.10.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "rustic-rs";
|
||||
repo = "rustic";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-HYPzgynCeWDRRNyACHqnzkjn6uZWS0TDHuJE9STJxbQ=";
|
||||
hash = "sha256-KyJce0pTTpPv3K0WXWQv2MPx8dDGhUVYEIjTeYH1KPY=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-+BlLVnvI2qBfwEtyxmZFNhR9MEzs0/a1Ce6ALOKtoPU=";
|
||||
cargoHash = "sha256-Axiq1Yu5pg3fZ/E8aYFGAuPi3KVIlotQ2TZs0pczG+4=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
||||
@@ -55,6 +55,6 @@ stdenv.mkDerivation rec {
|
||||
EGA/VGA-bold for 8x14 and 8x16.
|
||||
'';
|
||||
homepage = "https://terminus-font.sourceforge.net/";
|
||||
license = licenses.gpl2Plus;
|
||||
license = licenses.ofl;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "vopono";
|
||||
version = "0.10.14";
|
||||
version = "0.10.15";
|
||||
|
||||
src = fetchCrate {
|
||||
inherit pname version;
|
||||
hash = "sha256-EfbRSQtJA2ktpFzWnJWbUFLajdpaDdbpKeOykrorl2Q=";
|
||||
hash = "sha256-78G0Dm0WAEjjud+vrl7n3Uh6NnMQhs3uY4DIeSTKTJs=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-j7KFlFaxgXvrEzuknBTzfYgU1S57YhvVXkP73u888rc=";
|
||||
cargoHash = "sha256-2CeaDoDl8QyDXN8FHfHm6WRsJOfRiq6yRCKHsXXUV0w=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "Run applications through VPN connections in network namespaces";
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "xdg-desktop-portal-termfilechooser";
|
||||
version = "1.2.0";
|
||||
version = "1.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "hunkyburrito";
|
||||
repo = "xdg-desktop-portal-termfilechooser";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-3w6O9Su9COz5dKM8O8wGhSPJ4Cdb9nCU8oIBvuC6qC4=";
|
||||
hash = "sha256-IlPNNuQaGVW5QXcyA8cWiFJxwgXmviQoisDUWX9QP2s=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
}:
|
||||
let
|
||||
pname = "xremap";
|
||||
version = "0.10.16";
|
||||
version = "0.11.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "xremap";
|
||||
repo = "xremap";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-rBzjHrwAwFzHaF6JJzZDlfEFp+rSAkKaprOQk3kyDk8=";
|
||||
hash = "sha256-Uzs1Pao/CV0pQd8AAk8FXD2v0O/wlFvmZkbHlqYCOEQ=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-vGCoQG162riXe9zCh9IRWLmq5zgcNnYBnh44+2BNvwk=";
|
||||
cargoHash = "sha256-F1ao5YJv9UiU53Hg3UunE2gZc6iiB95zmCWjiHSkmHk=";
|
||||
|
||||
buildXremap =
|
||||
{
|
||||
|
||||
@@ -291,11 +291,11 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
runHook preInstall
|
||||
|
||||
python ./x.py --keep-stage=0 --stage=1 install library/std
|
||||
mkdir -v $out/bin $doc $man
|
||||
ln -s ${rustc.unwrapped}/bin/{rustc,rustdoc} $out/bin
|
||||
ln -s ${rustc.unwrapped}/libexec $out
|
||||
mkdir -v $doc $man
|
||||
ln -s ${rustc.unwrapped}/{bin,libexec} $out
|
||||
rm -rf -v $out/lib/rustlib/{manifest-rust-std-,}${stdenv.hostPlatform.rust.rustcTargetSpec}
|
||||
ln -s ${rustc.unwrapped}/lib/rustlib/{manifest-rust-std-,}${stdenv.hostPlatform.rust.rustcTargetSpec} $out/lib/rustlib/
|
||||
ln -s ${rustc.unwrapped}/lib/rustlib/etc $out/lib/rustlib/
|
||||
echo rust-std-${stdenv.hostPlatform.rust.rustcTargetSpec} >> $out/lib/rustlib/components
|
||||
lndir ${rustc.doc} $doc
|
||||
lndir ${rustc.man} $man
|
||||
|
||||
@@ -18,14 +18,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "eth-utils";
|
||||
version = "5.3.0";
|
||||
version = "5.3.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ethereum";
|
||||
repo = "eth-utils";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-VWNQyLfOEQTusdNHO/8/fWyGVFVwr1Cg1IfyNMSsfGQ=";
|
||||
hash = "sha256-uyUsX9jX2KumrERrIc6nXloH0G+rQeKzFMwex+Mh3eM=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "imeon-inverter-api";
|
||||
version = "0.3.16";
|
||||
version = "0.4.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Imeon-Inverters-for-Home-Assistant";
|
||||
repo = "inverter-api";
|
||||
tag = version;
|
||||
hash = "sha256-zaGmzp9uOzjtDxca1EWGKQ/PYsKqMldv5mnxQlwfcX4=";
|
||||
hash = "sha256-8tecWWDYFq+kAqWM9vKhM15LKnEVqaDBkH6jh0xwIsE=";
|
||||
};
|
||||
|
||||
build-system = [ pdm-pep517 ];
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "simsimd";
|
||||
version = "6.5.2";
|
||||
version = "6.5.3";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ashvardanian";
|
||||
repo = "SimSIMD";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-1x0uRFjoNoGkQv4YwQ/84lR8k1Z9wy5X9ZlwO3q6wqo=";
|
||||
hash = "sha256-vEtMBpBoPbnBjGaxGw7ApGTJ8RFJ7vQcAH0DF4AOIEE=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
|
||||
@@ -18,14 +18,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "spyder-kernels";
|
||||
version = "3.1.0a3";
|
||||
version = "3.1.0b1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "spyder-ide";
|
||||
repo = "spyder-kernels";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-7WFHvFf2L5/m/H0CNwkZHdJZd/jrEAXmmTcfRWQ+++w=";
|
||||
hash = "sha256-bYpNWE6KHDD9CkDmTDIX3gZumLOhAyxITCGyWuSU2+o=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
Reference in New Issue
Block a user