Merge 869d1be399 into haskell-updates
This commit is contained in:
@@ -214,12 +214,6 @@ code, while others choose not to.
|
||||
|
||||
In Nix, there are multiple approaches to building a Composer-based project.
|
||||
|
||||
::: {.warning}
|
||||
`buildComposerProject2` has a [known bug](https://github.com/NixOS/nixpkgs/issues/451395)
|
||||
where the `vendorHash` changes every time a Composer release happens that changes the
|
||||
`autoload.php` or vendored composer code.
|
||||
:::
|
||||
|
||||
One such method is the `php.buildComposerProject2` helper function, which serves
|
||||
as a wrapper around `mkDerivation`.
|
||||
|
||||
|
||||
@@ -207,6 +207,62 @@ following are specific to `buildPythonPackage`:
|
||||
* `setupPyGlobalFlags ? []`: List of flags passed to `setup.py` command.
|
||||
* `setupPyBuildFlags ? []`: List of flags passed to `setup.py build_ext` command.
|
||||
|
||||
##### Using fixed-point arguments {#buildpythonpackage-fixed-point-arguments}
|
||||
|
||||
Both `buildPythonPackage` and `buildPythonApplication` support [fixed-point arguments](#chap-build-helpers-finalAttrs), similar to `stdenv.mkDerivation`.
|
||||
This allows you to reference the final attributes of the derivation.
|
||||
|
||||
Instead of using `rec`:
|
||||
|
||||
```nix
|
||||
buildPythonPackage rec {
|
||||
pname = "pyspread";
|
||||
version = "2.4";
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-...";
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
You can use the `finalAttrs` pattern:
|
||||
|
||||
```nix
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "pyspread";
|
||||
version = "2.4";
|
||||
src = fetchPypi {
|
||||
pname = "pyspread";
|
||||
inherit (finalAttrs) version;
|
||||
hash = "sha256-...";
|
||||
};
|
||||
})
|
||||
```
|
||||
|
||||
See the [general documentation on fixed-point arguments](#chap-build-helpers-finalAttrs) for more details on the benefits of this pattern.
|
||||
|
||||
::: {.note}
|
||||
|
||||
Some `buildPythonPackage`/`buildPythonApplication` arguments are passed down indirectly to `stdenv.mkDerivation` via `passthru`.
|
||||
Therefore the final state of these attributes can be accessed via `finalAttrs.passthru.${name}`.
|
||||
[`<pkg>.overrideAttrs`](#sec-pkg-overrideAttrs) can override them using the `passthru = prevAttrs.passthru // { foo = "bar"; }` pattern.
|
||||
Such arguments include:
|
||||
|
||||
- `disabled`
|
||||
- `pyproject`
|
||||
- `format`
|
||||
- `build-system`
|
||||
- `dependencies`
|
||||
- `optional-dependencies`
|
||||
|
||||
<!--
|
||||
TODO(@doronbehar): When `.overridePythonAttrs` will be removed, the above text might need to be revised. See:
|
||||
|
||||
- https://github.com/NixOS/nixpkgs/pull/379637
|
||||
- https://github.com/NixOS/nixpkgs/pull/469804
|
||||
-->
|
||||
:::
|
||||
|
||||
The [`stdenv.mkDerivation`](#sec-using-stdenv) function accepts various parameters for describing
|
||||
build inputs (see "Specifying dependencies"). The following are of special
|
||||
interest for Python packages, either because these are primarily used, or
|
||||
@@ -237,29 +293,23 @@ the overrides for packages in the package set.
|
||||
```nix
|
||||
with import <nixpkgs> { };
|
||||
|
||||
(
|
||||
let
|
||||
python =
|
||||
let
|
||||
packageOverrides = self: super: {
|
||||
pandas = super.pandas.overridePythonAttrs (old: rec {
|
||||
version = "0.19.1";
|
||||
src = fetchPypi {
|
||||
pname = "pandas";
|
||||
inherit version;
|
||||
hash = "sha256-JQn+rtpy/OA2deLszSKEuxyttqBzcAil50H+JDHUdCE=";
|
||||
};
|
||||
});
|
||||
};
|
||||
in
|
||||
pkgs.python3.override {
|
||||
inherit packageOverrides;
|
||||
self = python;
|
||||
};
|
||||
|
||||
in
|
||||
python.withPackages (ps: [ ps.blaze ])
|
||||
).env
|
||||
let
|
||||
python = pkgs.python3.override {
|
||||
packageOverrides = self: super: {
|
||||
pandas = super.pandas.overridePythonAttrs (
|
||||
finalAttrs: prevAttrs: {
|
||||
version = "0.19.1";
|
||||
src = fetchPypi {
|
||||
pname = "pandas";
|
||||
inherit (finalAttrs) version;
|
||||
hash = "sha256-JQn+rtpy/OA2deLszSKEuxyttqBzcAil50H+JDHUdCE=";
|
||||
};
|
||||
}
|
||||
);
|
||||
};
|
||||
};
|
||||
in
|
||||
(python.withPackages (ps: [ ps.blaze ])).env
|
||||
```
|
||||
|
||||
The next example shows a non trivial overriding of the `blas` implementation to
|
||||
|
||||
@@ -4059,6 +4059,9 @@
|
||||
"buildpythonpackage-parameters": [
|
||||
"index.html#buildpythonpackage-parameters"
|
||||
],
|
||||
"buildpythonpackage-fixed-point-arguments": [
|
||||
"index.html#buildpythonpackage-fixed-point-arguments"
|
||||
],
|
||||
"overriding-python-build-helpers": [
|
||||
"index.html#overriding-python-build-helpers"
|
||||
],
|
||||
|
||||
@@ -264,11 +264,16 @@
|
||||
|
||||
- `python3packages.pillow-avif-plugin` has been removed as the functionality is included in `python3packages.pillow` directly since version 11.3.
|
||||
|
||||
- `wasistlos` (previously known as `whatsapp-for-linux`) has been removed because it was unmaintained and archived upstream.
|
||||
Multiple alternatives exist: `karere`, `whatsie` and `zapzap` among others.
|
||||
|
||||
- `light` has been removed because it was unmaintained.
|
||||
`brightnessctl` and `acpilight` provide similar functionality.
|
||||
|
||||
- `opensmtpd-filter-dkimsign` is now installed into `libexec/smtpd` instead of `libexec/opensmtpd` so that now it is properly linked into the environment built by `services.opensmtpd.procPackages`. If you hardcoded path to `filter-dkimsign` please consider using this option.
|
||||
|
||||
- `shisho` has been removed because it's archived. `semgrep`, `opengrep`, and `ast-grep` provide similar functionality.
|
||||
|
||||
- `services.openssh.settings.AcceptEnv` now explicitly defined as an option that takes a list of strings, to facilitate option merging. Setting it to a string value is no longer supported.
|
||||
|
||||
- All Xfce packages have been moved to top level (e.g. if you previously added `pkgs.xfce.xfce4-whiskermenu-plugin` to `environment.systemPackages`, you will need to change it to `pkgs.xfce4-whiskermenu-plugin`). The `xfce` scope will be removed in NixOS 26.11.
|
||||
|
||||
@@ -3971,6 +3971,12 @@
|
||||
name = "Joseph Madden";
|
||||
keys = [ { fingerprint = "3CF8 E983 2219 AB4B 0E19 158E 6112 1921 C9F8 117C"; } ];
|
||||
};
|
||||
brett = {
|
||||
email = "brett@librum.org";
|
||||
github = "brett";
|
||||
githubId = 523;
|
||||
name = "Brett Eisenberg";
|
||||
};
|
||||
brettlyons = {
|
||||
email = "blyons@fastmail.com";
|
||||
github = "brettlyons";
|
||||
@@ -13886,6 +13892,13 @@
|
||||
matrix = "@katexochen:matrix.org";
|
||||
name = "Paul Meyer";
|
||||
};
|
||||
katok = {
|
||||
name = "katok";
|
||||
email = "kat.ok.timofey@gmail.com";
|
||||
matrix = "@kat.ok:matrix.org";
|
||||
github = "Hi-Timofey";
|
||||
githubId = 43324422;
|
||||
};
|
||||
katrinafyi = {
|
||||
name = "katrinafyi";
|
||||
github = "katrinafyi";
|
||||
@@ -14278,6 +14291,13 @@
|
||||
githubId = 10689811;
|
||||
name = "Torben Schweren";
|
||||
};
|
||||
kittyandrew = {
|
||||
email = "alias.nixpkgs.maintainer@kittymail.me";
|
||||
github = "kittyandrew";
|
||||
githubId = 45767571;
|
||||
matrix = "@kittyandrew:ndrew.me";
|
||||
name = "kittyandrew";
|
||||
};
|
||||
kittywitch = {
|
||||
email = "kat@inskip.me";
|
||||
github = "kittywitch";
|
||||
@@ -26057,6 +26077,13 @@
|
||||
githubId = 26052996;
|
||||
name = "Erik Parawell";
|
||||
};
|
||||
stealthybox = {
|
||||
email = "leigh@null.net";
|
||||
github = "stealthybox";
|
||||
githubId = 2754700;
|
||||
name = "Leigh Capili";
|
||||
keys = [ { fingerprint = "05E7 89C9 142C DD05 8261 4EF8 5943 2144 444F B382"; } ];
|
||||
};
|
||||
steamwalker = {
|
||||
email = "steamwalker@xs4all.nl";
|
||||
github = "steamwalker";
|
||||
|
||||
@@ -1322,6 +1322,7 @@
|
||||
./services/networking/nix-store-gcs-proxy.nix
|
||||
./services/networking/nixops-dns.nix
|
||||
./services/networking/nm-file-secret-agent.nix
|
||||
./services/networking/nmtrust.nix
|
||||
./services/networking/nncp.nix
|
||||
./services/networking/nntp-proxy.nix
|
||||
./services/networking/nomad.nix
|
||||
|
||||
@@ -302,7 +302,9 @@ in
|
||||
fi
|
||||
'';
|
||||
packages =
|
||||
if config.documentation.nixos.enable && config.documentation.man.enable then
|
||||
if
|
||||
config.documentation.enable && config.documentation.nixos.enable && config.documentation.man.enable
|
||||
then
|
||||
builtins.filter (pkg: pkg != config.system.build.manual.nixos-configuration-reference-manpage) (
|
||||
cfge.systemPackages ++ cfg.extraCompletionPackages
|
||||
)
|
||||
|
||||
@@ -9,9 +9,11 @@ let
|
||||
cfg = config.services.grafana-to-ntfy;
|
||||
in
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [ kittyandrew ];
|
||||
|
||||
options = {
|
||||
services.grafana-to-ntfy = {
|
||||
enable = lib.mkEnableOption "Grafana-to-ntfy (ntfy.sh) alerts channel";
|
||||
enable = lib.mkEnableOption "grafana-to-ntfy, a Grafana/Alertmanager to ntfy.sh bridge";
|
||||
|
||||
package = lib.mkPackageOption pkgs "grafana-to-ntfy" { };
|
||||
|
||||
@@ -33,64 +35,127 @@ in
|
||||
};
|
||||
|
||||
ntfyBAuthPass = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
description = ''
|
||||
The path to the password for the specified ntfy-sh user.
|
||||
Setting this option is required when using a ntfy-sh instance with access control enabled.
|
||||
'';
|
||||
default = null;
|
||||
example = "/run/secrets/grafana-to-ntfy-ntfy-pass";
|
||||
};
|
||||
|
||||
bauthUser = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
description = ''
|
||||
The user that you will authenticate with in the Grafana webhook settings.
|
||||
You can set this to whatever you like, as this is not the same as the ntfy-sh user.
|
||||
The user for Basic Auth on incoming webhook requests from Grafana or Alertmanager.
|
||||
When set together with {option}`bauthPass`, incoming requests require Basic Auth.
|
||||
When both are null, the endpoint is open (unauthenticated).
|
||||
'';
|
||||
default = "admin";
|
||||
default = null;
|
||||
example = "admin";
|
||||
};
|
||||
|
||||
bauthPass = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
description = "The path to the password you will use in the Grafana webhook settings.";
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
description = ''
|
||||
Path to the password file for Basic Auth on incoming webhook requests.
|
||||
When set together with {option}`bauthUser`, incoming requests require Basic Auth.
|
||||
When both are null, the endpoint is open (unauthenticated).
|
||||
'';
|
||||
default = null;
|
||||
example = "/run/secrets/grafana-to-ntfy-bauth-pass";
|
||||
};
|
||||
|
||||
markdown = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
description = "Enable Markdown formatting in ntfy notifications. Sets the X-Markdown header.";
|
||||
default = false;
|
||||
};
|
||||
|
||||
port = lib.mkOption {
|
||||
type = lib.types.port;
|
||||
description = "Port to listen on.";
|
||||
default = 8080;
|
||||
};
|
||||
|
||||
address = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = "Address to listen on.";
|
||||
default = "127.0.0.1";
|
||||
example = "0.0.0.0";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
systemd.services.grafana-to-ntfy = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
assertions = [
|
||||
{
|
||||
assertion = (cfg.settings.bauthUser == null) == (cfg.settings.bauthPass == null);
|
||||
message = "services.grafana-to-ntfy: bauthUser and bauthPass must both be set or both be null";
|
||||
}
|
||||
{
|
||||
assertion = (cfg.settings.ntfyBAuthUser == null) == (cfg.settings.ntfyBAuthPass == null);
|
||||
message = "services.grafana-to-ntfy: ntfyBAuthUser and ntfyBAuthPass must both be set or both be null";
|
||||
}
|
||||
];
|
||||
|
||||
script = ''
|
||||
export BAUTH_PASS=$(${lib.getExe' config.systemd.package "systemd-creds"} cat BAUTH_PASS_FILE)
|
||||
${lib.optionalString (cfg.settings.ntfyBAuthPass != null) ''
|
||||
export NTFY_BAUTH_PASS=$(${lib.getExe' config.systemd.package "systemd-creds"} cat NTFY_BAUTH_PASS_FILE)
|
||||
''}
|
||||
exec ${lib.getExe cfg.package}
|
||||
'';
|
||||
systemd.services.grafana-to-ntfy = {
|
||||
description = "Grafana/Alertmanager to ntfy.sh bridge";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
|
||||
script =
|
||||
let
|
||||
optionalCred = name: envVar: ''
|
||||
export ${envVar}="$(${lib.getExe' config.systemd.package "systemd-creds"} cat ${name})"
|
||||
'';
|
||||
in
|
||||
''
|
||||
${lib.optionalString (cfg.settings.bauthPass != null) (optionalCred "BAUTH_PASS_FILE" "BAUTH_PASS")}
|
||||
${lib.optionalString (cfg.settings.ntfyBAuthPass != null) (
|
||||
optionalCred "NTFY_BAUTH_PASS_FILE" "NTFY_BAUTH_PASS"
|
||||
)}
|
||||
exec ${lib.getExe cfg.package}
|
||||
'';
|
||||
|
||||
environment = {
|
||||
NTFY_URL = cfg.settings.ntfyUrl;
|
||||
ROCKET_PORT = toString cfg.settings.port;
|
||||
ROCKET_ADDRESS = cfg.settings.address;
|
||||
}
|
||||
// lib.optionalAttrs (cfg.settings.bauthUser != null) {
|
||||
BAUTH_USER = cfg.settings.bauthUser;
|
||||
}
|
||||
// lib.optionalAttrs (cfg.settings.ntfyBAuthUser != null) {
|
||||
NTFY_BAUTH_USER = cfg.settings.ntfyBAuthUser;
|
||||
}
|
||||
// lib.optionalAttrs cfg.settings.markdown {
|
||||
MARKDOWN = "true";
|
||||
};
|
||||
|
||||
serviceConfig = {
|
||||
LoadCredential = [
|
||||
"BAUTH_PASS_FILE:${cfg.settings.bauthPass}"
|
||||
]
|
||||
++ lib.optional (
|
||||
cfg.settings.ntfyBAuthPass != null
|
||||
) "NTFY_BAUTH_PASS_FILE:${cfg.settings.ntfyBAuthPass}";
|
||||
LoadCredential =
|
||||
lib.optional (cfg.settings.bauthPass != null) "BAUTH_PASS_FILE:${cfg.settings.bauthPass}"
|
||||
++ lib.optional (
|
||||
cfg.settings.ntfyBAuthPass != null
|
||||
) "NTFY_BAUTH_PASS_FILE:${cfg.settings.ntfyBAuthPass}";
|
||||
|
||||
DynamicUser = true;
|
||||
|
||||
Restart = "always";
|
||||
RestartSec = 5;
|
||||
|
||||
# Hardening
|
||||
AmbientCapabilities = [ "" ];
|
||||
CapabilityBoundingSet = [ "" ];
|
||||
DeviceAllow = "";
|
||||
DevicePolicy = "closed";
|
||||
LockPersonality = true;
|
||||
MemoryDenyWriteExecute = true;
|
||||
NoNewPrivileges = true;
|
||||
PrivateDevices = true;
|
||||
PrivateTmp = true;
|
||||
PrivateUsers = true;
|
||||
ProcSubset = "pid";
|
||||
ProtectClock = true;
|
||||
@@ -101,6 +166,8 @@ in
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectProc = "invisible";
|
||||
ProtectSystem = "strict";
|
||||
RemoveIPC = true;
|
||||
RestrictAddressFamilies = [
|
||||
"AF_INET"
|
||||
"AF_INET6"
|
||||
@@ -108,11 +175,12 @@ in
|
||||
];
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
MemoryDenyWriteExecute = true;
|
||||
RestrictSUIDSGID = true;
|
||||
SystemCallArchitectures = "native";
|
||||
SystemCallFilter = [
|
||||
"@system-service"
|
||||
"~@privileged"
|
||||
"~@resources"
|
||||
];
|
||||
UMask = "0077";
|
||||
};
|
||||
|
||||
@@ -0,0 +1,389 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
cfg = config.services.nmtrust;
|
||||
|
||||
# Resolve trusted UUIDs from ensureProfiles + extra
|
||||
profileUUIDs = map (
|
||||
name: config.networking.networkmanager.ensureProfiles.profiles.${name}.connection.uuid
|
||||
) cfg.trustedConnections;
|
||||
|
||||
trustedUUIDs = profileUUIDs ++ cfg.trustedUUIDsExtra;
|
||||
|
||||
userNames = builtins.attrNames cfg.userUnits;
|
||||
|
||||
# The package reads config from /etc/nmtrust/config at runtime
|
||||
trustHelper = pkgs.nmtrust;
|
||||
|
||||
# Trust target names
|
||||
trustTargets = [
|
||||
"nmtrust-trusted"
|
||||
"nmtrust-untrusted"
|
||||
"nmtrust-offline"
|
||||
];
|
||||
|
||||
# Generate Conflicts= for a target (all other trust targets)
|
||||
conflictsFor = target: map (t: "${t}.target") (builtins.filter (t: t != target) trustTargets);
|
||||
|
||||
# Generate systemd unit overrides for a system unit.
|
||||
# Uses StopWhenUnneeded instead of PartOf to avoid same-transaction
|
||||
# issues: when transitioning between targets that both want a unit
|
||||
# (e.g. offline -> trusted for allowOffline units), PartOf on the
|
||||
# old target would stop the unit before WantedBy on the new target
|
||||
# can restart it. StopWhenUnneeded only stops the unit when NO
|
||||
# active target wants it.
|
||||
mkSystemUnitOverrides =
|
||||
unitName: unitCfg:
|
||||
let
|
||||
targets = [
|
||||
"nmtrust-trusted.target"
|
||||
]
|
||||
++ lib.optional unitCfg.allowOffline "nmtrust-offline.target";
|
||||
in
|
||||
{
|
||||
unitConfig.StopWhenUnneeded = true;
|
||||
wantedBy = targets;
|
||||
};
|
||||
|
||||
# Generate user unit overrides
|
||||
mkUserUnitOverrides =
|
||||
unitName: unitCfg:
|
||||
let
|
||||
targets = [
|
||||
"nmtrust-trusted.target"
|
||||
]
|
||||
++ lib.optional unitCfg.allowOffline "nmtrust-offline.target";
|
||||
in
|
||||
{
|
||||
unitConfig.StopWhenUnneeded = true;
|
||||
wantedBy = targets;
|
||||
};
|
||||
|
||||
# NM dispatcher script
|
||||
dispatcherScript = pkgs.writeShellScript "nmtrust-dispatcher" ''
|
||||
case "$2" in
|
||||
up|down|vpn-up|vpn-down|connectivity-change)
|
||||
${config.systemd.package}/bin/systemd-run \
|
||||
--no-block \
|
||||
--on-active=1s \
|
||||
--unit=nmtrust-apply-debounce \
|
||||
${config.systemd.package}/bin/systemctl start nmtrust-apply.service \
|
||||
2>/dev/null || true
|
||||
;;
|
||||
esac
|
||||
'';
|
||||
|
||||
in
|
||||
{
|
||||
|
||||
#
|
||||
# Options
|
||||
#
|
||||
|
||||
options.services.nmtrust = {
|
||||
|
||||
enable = lib.mkEnableOption "network trust management";
|
||||
|
||||
trustedConnections = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [ ];
|
||||
description = ''
|
||||
List of NetworkManager profile names from
|
||||
{option}`networking.networkmanager.ensureProfiles`.
|
||||
UUIDs are resolved at evaluation time.
|
||||
'';
|
||||
};
|
||||
|
||||
trustedUUIDsExtra = lib.mkOption {
|
||||
type = lib.types.listOf (
|
||||
lib.types.strMatching "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
|
||||
);
|
||||
default = [ ];
|
||||
description = ''
|
||||
Additional trusted connection UUIDs not managed via
|
||||
{option}`networking.networkmanager.ensureProfiles`.
|
||||
Must be valid UUID format.
|
||||
'';
|
||||
};
|
||||
|
||||
excludedConnectionPatterns = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [ ];
|
||||
description = ''
|
||||
Glob patterns matched against connection names at runtime using
|
||||
fnmatch(3) with FNM_NOESCAPE. Connection names are treated as
|
||||
literal strings (no backslash interpretation).
|
||||
Matching connections are ignored when computing trust state.
|
||||
'';
|
||||
};
|
||||
|
||||
mixedPolicy = lib.mkOption {
|
||||
type = lib.types.enum [
|
||||
"trusted"
|
||||
"untrusted"
|
||||
];
|
||||
default = "untrusted";
|
||||
description = ''
|
||||
How to treat mixed trust state (some connections trusted,
|
||||
some untrusted).
|
||||
'';
|
||||
};
|
||||
|
||||
evalFailurePolicy = lib.mkOption {
|
||||
type = lib.types.enum [
|
||||
"untrusted"
|
||||
"offline"
|
||||
];
|
||||
default = "untrusted";
|
||||
description = ''
|
||||
How to handle trust evaluation failures (D-Bus errors, NM
|
||||
unavailable). `"untrusted"` (default) is fail-closed: trusted-only
|
||||
units stop. `"offline"` allows units with
|
||||
{option}`allowOffline` to run.
|
||||
'';
|
||||
};
|
||||
|
||||
systemUnits = lib.mkOption {
|
||||
type = lib.types.attrsOf (
|
||||
lib.types.submodule {
|
||||
options.allowOffline = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Whether this unit should also run when offline.";
|
||||
};
|
||||
}
|
||||
);
|
||||
default = { };
|
||||
description = ''
|
||||
System units to bind to the trusted network target.
|
||||
Keys are systemd unit names.
|
||||
'';
|
||||
};
|
||||
|
||||
userUnits = lib.mkOption {
|
||||
type = lib.types.attrsOf (
|
||||
lib.types.attrsOf (
|
||||
lib.types.submodule {
|
||||
options.allowOffline = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Whether this unit should also run when offline.";
|
||||
};
|
||||
}
|
||||
)
|
||||
);
|
||||
default = { };
|
||||
example = lib.literalExpression ''
|
||||
{
|
||||
alice = {
|
||||
"etesync-dav.service" = { };
|
||||
"syncthing.service" = { allowOffline = true; };
|
||||
};
|
||||
}
|
||||
'';
|
||||
description = ''
|
||||
Per-user units to bind to the trusted network target.
|
||||
Outer keys are usernames, inner keys are systemd unit names.
|
||||
Users must have linger enabled
|
||||
({option}`users.users.<name>.linger`).
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
#
|
||||
# Config
|
||||
#
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
|
||||
# --- Assertions ---
|
||||
|
||||
assertions =
|
||||
# NetworkManager is required
|
||||
[
|
||||
{
|
||||
assertion = config.networking.networkmanager.enable;
|
||||
message = "services.nmtrust requires networking.networkmanager.enable = true.";
|
||||
}
|
||||
]
|
||||
++
|
||||
# trustedConnections -> ensureProfiles UUID resolution
|
||||
(map (name: {
|
||||
assertion =
|
||||
config.networking.networkmanager.ensureProfiles.profiles ? ${name}
|
||||
&& config.networking.networkmanager.ensureProfiles.profiles.${name}.connection ? uuid;
|
||||
message =
|
||||
"services.nmtrust.trustedConnections references '${name}' "
|
||||
+ "but no matching networking.networkmanager.ensureProfiles entry with a UUID exists.";
|
||||
}) cfg.trustedConnections)
|
||||
++
|
||||
# userUnits -> user existence
|
||||
(map (username: {
|
||||
assertion = config.users.users ? ${username};
|
||||
message =
|
||||
"services.nmtrust.userUnits references user '${username}' "
|
||||
+ "but no matching users.users entry exists.";
|
||||
}) userNames)
|
||||
++
|
||||
# userUnits -> linger enabled
|
||||
(map (username: {
|
||||
assertion =
|
||||
let
|
||||
l = config.users.users.${username}.linger;
|
||||
in
|
||||
l != null && l;
|
||||
message =
|
||||
"services.nmtrust.userUnits references user '${username}' but "
|
||||
+ "linger is not enabled. Set users.users.${username}.linger = true to "
|
||||
+ "ensure the user's systemd instance is running for trust-based unit management. "
|
||||
+ "Note: enabling linger causes ALL of this user's enabled user services to run "
|
||||
+ "persistently, not just trust-managed units.";
|
||||
}) (builtins.filter (u: config.users.users ? ${u}) userNames));
|
||||
|
||||
# --- Helper package on PATH ---
|
||||
|
||||
environment.systemPackages = [ trustHelper ];
|
||||
|
||||
# --- Runtime config file ---
|
||||
|
||||
environment.etc."nmtrust/config" = {
|
||||
text =
|
||||
let
|
||||
toBashArray = xs: "(" + lib.concatMapStringsSep " " (x: lib.escapeShellArg x) xs + ")";
|
||||
in
|
||||
''
|
||||
# Generated by NixOS module — do not edit
|
||||
TRUSTED_UUIDS=${toBashArray trustedUUIDs}
|
||||
EXCLUDED_PATTERNS=${toBashArray (cfg.excludedConnectionPatterns)}
|
||||
MIXED_POLICY=${lib.escapeShellArg cfg.mixedPolicy}
|
||||
EVAL_FAILURE_POLICY=${lib.escapeShellArg cfg.evalFailurePolicy}
|
||||
MANAGED_USERS=${toBashArray userNames}
|
||||
'';
|
||||
};
|
||||
|
||||
# --- tmpfiles.d ---
|
||||
|
||||
systemd.tmpfiles.rules = [
|
||||
"d /run/nmtrust 0700 root root -"
|
||||
];
|
||||
|
||||
# --- System trust targets ---
|
||||
|
||||
systemd.targets = lib.listToAttrs (
|
||||
map (target: {
|
||||
name = target;
|
||||
value = {
|
||||
description = "Network Trust State: ${
|
||||
if target == "nmtrust-trusted" then
|
||||
"Trusted"
|
||||
else if target == "nmtrust-untrusted" then
|
||||
"Untrusted"
|
||||
else
|
||||
"Offline"
|
||||
}";
|
||||
unitConfig.Conflicts = conflictsFor target;
|
||||
};
|
||||
}) trustTargets
|
||||
);
|
||||
|
||||
# --- User trust targets ---
|
||||
|
||||
systemd.user.targets = lib.listToAttrs (
|
||||
map (target: {
|
||||
name = target;
|
||||
value = {
|
||||
description = "Network Trust State: ${
|
||||
if target == "nmtrust-trusted" then
|
||||
"Trusted (User)"
|
||||
else if target == "nmtrust-untrusted" then
|
||||
"Untrusted (User)"
|
||||
else
|
||||
"Offline (User)"
|
||||
}";
|
||||
unitConfig.Conflicts = conflictsFor target;
|
||||
};
|
||||
}) trustTargets
|
||||
);
|
||||
|
||||
# --- System unit overrides + services ---
|
||||
|
||||
# Strip .service/.timer/.socket suffixes — NixOS appends them automatically
|
||||
systemd.services =
|
||||
lib.mapAttrs' (name: value: {
|
||||
name = lib.removeSuffix ".service" (lib.removeSuffix ".timer" (lib.removeSuffix ".socket" name));
|
||||
value = mkSystemUnitOverrides name value;
|
||||
}) cfg.systemUnits
|
||||
// {
|
||||
nmtrust-apply = {
|
||||
description = "Evaluate and apply network trust state";
|
||||
after = [ "NetworkManager.service" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "${trustHelper}/bin/nmtrust apply";
|
||||
ProtectSystem = "strict";
|
||||
ReadWritePaths = [ "/run/nmtrust" ];
|
||||
ProtectHome = true;
|
||||
NoNewPrivileges = true;
|
||||
PrivateTmp = true;
|
||||
};
|
||||
};
|
||||
nmtrust-eval = {
|
||||
description = "Evaluate network trust state on boot";
|
||||
wantedBy = [ "network-online.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [
|
||||
"NetworkManager.service"
|
||||
"network-online.target"
|
||||
];
|
||||
restartTriggers = [
|
||||
config.environment.etc."nmtrust/config".source
|
||||
];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
ExecStart = "${trustHelper}/bin/nmtrust apply";
|
||||
ProtectSystem = "strict";
|
||||
ReadWritePaths = [ "/run/nmtrust" ];
|
||||
ProtectHome = true;
|
||||
NoNewPrivileges = true;
|
||||
PrivateTmp = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# --- User unit overrides ---
|
||||
|
||||
systemd.user.services = lib.foldl' (
|
||||
acc: username:
|
||||
lib.foldl' (
|
||||
acc': unitName:
|
||||
let
|
||||
strippedName = lib.removeSuffix ".service" (
|
||||
lib.removeSuffix ".timer" (lib.removeSuffix ".socket" unitName)
|
||||
);
|
||||
in
|
||||
acc'
|
||||
// {
|
||||
${strippedName} = mkUserUnitOverrides unitName cfg.userUnits.${username}.${unitName};
|
||||
}
|
||||
) acc (builtins.attrNames cfg.userUnits.${username})
|
||||
) { } userNames;
|
||||
|
||||
# --- NM dispatcher ---
|
||||
|
||||
networking.networkmanager.dispatcherScripts = [
|
||||
{
|
||||
source = dispatcherScript;
|
||||
type = "basic";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
meta.maintainers = [ lib.maintainers.brett ];
|
||||
|
||||
}
|
||||
@@ -277,6 +277,10 @@ in
|
||||
"zfs"
|
||||
"enableUnstable"
|
||||
] "Instead set `boot.zfs.package = pkgs.zfs_unstable;`")
|
||||
(lib.mkRenamedOptionModule
|
||||
[ "boot" "zfs" "allowHibernation" ]
|
||||
[ "boot" "zfs" "unsafeAllowHibernation" ]
|
||||
)
|
||||
];
|
||||
|
||||
###### interface
|
||||
@@ -305,12 +309,12 @@ in
|
||||
description = "True if ZFS filesystem support is enabled";
|
||||
};
|
||||
|
||||
allowHibernation = lib.mkOption {
|
||||
unsafeAllowHibernation = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Allow hibernation support, this may be a unsafe option depending on your
|
||||
setup. Make sure to NOT use Swap on ZFS.
|
||||
Allow hibernation (suspend to disk) support. This is generally considered **UNSAFE**,
|
||||
is not well supported by openzfs, and could lead to corruption and data loss.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -350,19 +354,18 @@ in
|
||||
|
||||
forceImportRoot = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
default = lib.versionOlder config.system.stateVersion "26.11";
|
||||
defaultText = lib.literalExpression ''lib.versionOlder config.system.stateVersion "26.11"'';
|
||||
description = ''
|
||||
Forcibly import the ZFS root pool(s) during early boot.
|
||||
|
||||
This is enabled by default for backwards compatibility purposes, but it is highly
|
||||
recommended to disable this option, as it bypasses some of the safeguards ZFS uses
|
||||
to protect your ZFS pools.
|
||||
It is highly recommended to keep this option disabled as it bypasses ZFS
|
||||
safeguard that protect your pools.
|
||||
|
||||
If you set this option to `false` and NixOS subsequently fails to
|
||||
boot because it cannot import the root pool, you should boot with the
|
||||
`zfs_force=1` option as a kernel parameter (e.g. by manually
|
||||
editing the kernel params in grub during boot). You should only need to do this
|
||||
once.
|
||||
If NixOS fails to boot because it cannot import the root pool, you should boot
|
||||
with the `zfs_force=1` option as a kernel parameter (e.g. by manually
|
||||
editing the kernel params via your bootloader).
|
||||
You should only need to do this after unclean shutdowns.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -372,10 +375,10 @@ in
|
||||
description = ''
|
||||
Forcibly import all ZFS pool(s).
|
||||
|
||||
If you set this option to `false` and NixOS subsequently fails to
|
||||
import your non-root ZFS pool(s), you should manually import each pool with
|
||||
"zpool import -f \<pool-name\>", and then reboot. You should only need to do
|
||||
this once.
|
||||
It is highly recommended to keep this option disabled as it bypasses ZFS
|
||||
safeguard that protect your pools.
|
||||
|
||||
See {option}`boot.zfs.forceImportRoot` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -672,12 +675,12 @@ in
|
||||
message = "ZFS requires networking.hostId to be set";
|
||||
}
|
||||
{
|
||||
assertion = !cfgZfs.forceImportAll || cfgZfs.forceImportRoot;
|
||||
assertion = cfgZfs.forceImportAll -> cfgZfs.forceImportRoot;
|
||||
message = "If you enable boot.zfs.forceImportAll, you must also enable boot.zfs.forceImportRoot";
|
||||
}
|
||||
{
|
||||
assertion = cfgZfs.allowHibernation -> !cfgZfs.forceImportRoot && !cfgZfs.forceImportAll;
|
||||
message = "boot.zfs.allowHibernation while force importing is enabled will cause data corruption";
|
||||
assertion = cfgZfs.unsafeAllowHibernation -> !cfgZfs.forceImportRoot && !cfgZfs.forceImportAll;
|
||||
message = "boot.zfs.unsafeAllowHibernation while force importing is enabled will cause data corruption";
|
||||
}
|
||||
{
|
||||
assertion = !(lib.elem "" allPools);
|
||||
@@ -694,12 +697,25 @@ in
|
||||
}
|
||||
];
|
||||
|
||||
warnings =
|
||||
lib.optional
|
||||
(
|
||||
options.boot.zfs.forceImportRoot.definitionsWithLocations == [
|
||||
{
|
||||
inherit (__curPos) file;
|
||||
value = true;
|
||||
}
|
||||
]
|
||||
)
|
||||
"`boot.zfs.forceImportRoot` is using the default value of `true`. It is highly recommended to set it to `false`, the new default from 26.11 on, to reduce the risk of data loss. Alternatively, you can silence this warning by explicitly setting it to `true`.";
|
||||
|
||||
boot = {
|
||||
kernelModules = [ "zfs" ];
|
||||
# https://github.com/openzfs/zfs/issues/260
|
||||
# https://github.com/openzfs/zfs/issues/260#issuecomment-982142240
|
||||
# https://github.com/openzfs/zfs/issues/12842
|
||||
# https://github.com/openzfs/zfs/issues/14118#issuecomment-1301576647
|
||||
# https://github.com/NixOS/nixpkgs/issues/106093
|
||||
kernelParams = lib.optionals (!config.boot.zfs.allowHibernation) [ "nohibernate" ];
|
||||
kernelParams = lib.optionals (!config.boot.zfs.unsafeAllowHibernation) [ "nohibernate" ];
|
||||
|
||||
extraModulePackages = [
|
||||
cfgZfs.modulePackage
|
||||
|
||||
@@ -54,8 +54,6 @@ let
|
||||
lvm2
|
||||
lz4
|
||||
lxcfs
|
||||
minio
|
||||
minio-client
|
||||
nftables
|
||||
qemu-utils
|
||||
qemu_kvm
|
||||
@@ -99,6 +97,10 @@ let
|
||||
]
|
||||
++ lib.optionals nvidiaEnabled [
|
||||
libnvidia-container
|
||||
]
|
||||
++ lib.optionals cfg.bucketSupport [
|
||||
minio
|
||||
minio-client
|
||||
];
|
||||
|
||||
# https://github.com/lxc/incus/blob/cff35a29ee3d7a2af1f937cbb6cf23776941854b/internal/server/instance/drivers/driver_qemu.go#L123
|
||||
@@ -211,6 +213,13 @@ in
|
||||
description = "The incus client package to use. This package is added to PATH.";
|
||||
};
|
||||
|
||||
bucketSupport = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
description = "Enable bucket support using minio, which is an insecure and unmaintained S3 provider.";
|
||||
default = if lib.versionAtLeast config.system.stateVersion "26.11" then false else null;
|
||||
defaultText = lib.literalExpression ''if lib.versionAtLeast config.system.stateVersion "26.11" then false else null;'';
|
||||
};
|
||||
|
||||
softDaemonRestart = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
|
||||
@@ -678,6 +678,7 @@ in
|
||||
gotosocial = runTest ./web-apps/gotosocial.nix;
|
||||
goupile = runTest ./web-apps/goupile;
|
||||
grafana = handleTest ./grafana { };
|
||||
grafana-to-ntfy = runTest ./grafana-to-ntfy.nix;
|
||||
graphite = runTest ./graphite.nix;
|
||||
grav = runTest ./web-apps/grav.nix;
|
||||
graylog = runTest ./graylog.nix;
|
||||
@@ -1140,6 +1141,7 @@ in
|
||||
pkgs.callPackage ../../pkgs/stdenv/generic/check-meta-test.nix
|
||||
{ };
|
||||
nixseparatedebuginfod2 = runTest ./nixseparatedebuginfod2.nix;
|
||||
nmtrust = runTest ./nmtrust.nix;
|
||||
node-red = runTest ./node-red.nix;
|
||||
nohang = runTest ./nohang.nix;
|
||||
nomad = runTest ./nomad.nix;
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
{ lib, ... }:
|
||||
|
||||
let
|
||||
ports = {
|
||||
grafana-to-ntfy = 8080;
|
||||
ntfy-sh = 8081;
|
||||
grafana = 3000;
|
||||
alertmanager = 9093;
|
||||
};
|
||||
ntfyTopic = "grafana-alerts";
|
||||
in
|
||||
|
||||
{
|
||||
name = "grafana-to-ntfy";
|
||||
meta.maintainers = with lib.maintainers; [ kittyandrew ];
|
||||
|
||||
nodes.machine = {
|
||||
services.grafana-to-ntfy = {
|
||||
enable = true;
|
||||
settings = {
|
||||
ntfyUrl = "http://127.0.0.1:${toString ports.ntfy-sh}/${ntfyTopic}";
|
||||
port = ports.grafana-to-ntfy;
|
||||
address = "127.0.0.1";
|
||||
};
|
||||
};
|
||||
|
||||
services.ntfy-sh = {
|
||||
enable = true;
|
||||
settings = {
|
||||
listen-http = "127.0.0.1:${toString ports.ntfy-sh}";
|
||||
base-url = "http://127.0.0.1:${toString ports.ntfy-sh}";
|
||||
};
|
||||
};
|
||||
|
||||
services.grafana = {
|
||||
enable = true;
|
||||
settings = {
|
||||
server.http_port = ports.grafana;
|
||||
server.http_addr = "127.0.0.1";
|
||||
security.admin_user = "admin";
|
||||
security.admin_password = "admin";
|
||||
security.secret_key = "test-only-dummy-key";
|
||||
};
|
||||
provision.alerting = {
|
||||
contactPoints.settings = {
|
||||
apiVersion = 1;
|
||||
contactPoints = [
|
||||
{
|
||||
orgId = 1;
|
||||
name = "grafana-to-ntfy";
|
||||
receivers = [
|
||||
{
|
||||
uid = "cp_webhook";
|
||||
type = "webhook";
|
||||
disableResolveMessage = false;
|
||||
settings = {
|
||||
url = "http://127.0.0.1:${toString ports.grafana-to-ntfy}";
|
||||
httpMethod = "POST";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
policies.settings = {
|
||||
apiVersion = 1;
|
||||
policies = [
|
||||
{
|
||||
orgId = 1;
|
||||
receiver = "grafana-to-ntfy";
|
||||
group_by = [ "..." ];
|
||||
group_wait = "0s";
|
||||
group_interval = "1s";
|
||||
repeat_interval = "1h";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.prometheus.alertmanager = {
|
||||
enable = true;
|
||||
listenAddress = "127.0.0.1";
|
||||
port = ports.alertmanager;
|
||||
configuration = {
|
||||
route = {
|
||||
receiver = "grafana-to-ntfy";
|
||||
group_by = [ "..." ];
|
||||
group_wait = "0s";
|
||||
group_interval = "1s";
|
||||
repeat_interval = "2h";
|
||||
};
|
||||
receivers = [
|
||||
{
|
||||
name = "grafana-to-ntfy";
|
||||
webhook_configs = [
|
||||
{ url = "http://127.0.0.1:${toString ports.grafana-to-ntfy}"; }
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
interactive.nodes.machine = {
|
||||
services.grafana-to-ntfy.settings.address = lib.mkForce "0.0.0.0";
|
||||
services.grafana.settings.server.http_addr = lib.mkForce "0.0.0.0";
|
||||
services.prometheus.alertmanager.listenAddress = lib.mkForce "0.0.0.0";
|
||||
services.ntfy-sh.settings.listen-http = lib.mkForce "0.0.0.0:${toString ports.ntfy-sh}";
|
||||
networking.firewall.enable = false;
|
||||
virtualisation.forwardPorts = lib.mapAttrsToList (_: port: {
|
||||
from = "host";
|
||||
host = { inherit port; };
|
||||
guest = { inherit port; };
|
||||
}) ports;
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
import json
|
||||
|
||||
machine.wait_for_unit("grafana-to-ntfy.service")
|
||||
machine.wait_for_unit("ntfy-sh.service")
|
||||
machine.wait_for_unit("grafana.service")
|
||||
machine.wait_for_unit("alertmanager.service")
|
||||
machine.wait_for_open_port(${toString ports.grafana-to-ntfy})
|
||||
machine.wait_for_open_port(${toString ports.ntfy-sh})
|
||||
machine.wait_for_open_port(${toString ports.grafana})
|
||||
machine.wait_for_open_port(${toString ports.alertmanager})
|
||||
|
||||
with subtest("Health endpoint returns 200"):
|
||||
machine.succeed("curl -sf http://127.0.0.1:${toString ports.grafana-to-ntfy}/health")
|
||||
|
||||
with subtest("Alertmanager alert arrives at ntfy"):
|
||||
machine.succeed(
|
||||
"curl -sf http://127.0.0.1:${toString ports.alertmanager}/api/v2/alerts"
|
||||
" -X POST -H 'Content-Type: application/json'"
|
||||
" -d '[{\"labels\": {\"alertname\": \"TestAlertFromAM\"}}]'"
|
||||
)
|
||||
# grep makes wait_until_succeeds retry: ntfy returns 200 with empty body when no messages exist
|
||||
resp = machine.wait_until_succeeds(
|
||||
"curl -sf 'http://127.0.0.1:${toString ports.ntfy-sh}/${ntfyTopic}/json?poll=1'"
|
||||
" | grep '\"title\":\"Alertmanager\"'"
|
||||
)
|
||||
msg = json.loads(resp.strip())
|
||||
assert msg["title"] == "Alertmanager", f"Expected title 'Alertmanager', got '{msg['title']}'"
|
||||
assert "warning" in msg["tags"], f"Expected 'warning' in tags, got {msg['tags']}"
|
||||
assert "firing" in msg["tags"], f"Expected 'firing' in tags, got {msg['tags']}"
|
||||
|
||||
with subtest("Grafana alert arrives at ntfy"):
|
||||
machine.succeed(
|
||||
"curl -sf http://127.0.0.1:${toString ports.grafana}/api/alertmanager/grafana/config/api/v1/receivers/test"
|
||||
" -u admin:admin"
|
||||
" -X POST -H 'Content-Type: application/json'"
|
||||
""" -d '{"receivers": [{"name": "grafana-to-ntfy", "grafana_managed_receiver_configs": [{"uid": "cp_webhook", "name": "webhook", "type": "webhook", "disableResolveMessage": false, "settings": {"url": "http://127.0.0.1:${toString ports.grafana-to-ntfy}", "httpMethod": "POST"}}]}]}'"""
|
||||
)
|
||||
# grep ensures we wait for the Grafana message specifically (see above)
|
||||
resp = machine.wait_until_succeeds(
|
||||
"curl -sf 'http://127.0.0.1:${toString ports.ntfy-sh}/${ntfyTopic}/json?poll=1'"
|
||||
" | grep 'FIRING'"
|
||||
)
|
||||
msg = json.loads(resp.strip())
|
||||
assert "[FIRING:1]" in msg["title"], f"Expected Grafana title with '[FIRING:1]', got '{msg['title']}'"
|
||||
assert "warning" in msg["tags"], f"Expected 'warning' in tags, got {msg['tags']}"
|
||||
assert "firing" in msg["tags"], f"Expected 'firing' in tags, got {msg['tags']}"
|
||||
'';
|
||||
}
|
||||
@@ -51,6 +51,7 @@ in
|
||||
incus = {
|
||||
enable = true;
|
||||
package = cfg.package;
|
||||
bucketSupport = false;
|
||||
|
||||
preseed = {
|
||||
networks = [
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
name = "nmtrust";
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
networking.networkmanager.enable = true;
|
||||
|
||||
# Prevent the VM's built-in interfaces from polluting trust state.
|
||||
networking.networkmanager.unmanaged = [
|
||||
"eth0"
|
||||
"eth1"
|
||||
"lo"
|
||||
];
|
||||
|
||||
networking.networkmanager.ensureProfiles.profiles = {
|
||||
trusted-net = {
|
||||
connection = {
|
||||
id = "trusted-net";
|
||||
uuid = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
|
||||
type = "dummy";
|
||||
interface-name = "dummy-trusted";
|
||||
autoconnect = "false";
|
||||
};
|
||||
ipv4.method = "manual";
|
||||
ipv4.addresses = "10.99.1.1/24";
|
||||
};
|
||||
untrusted-net = {
|
||||
connection = {
|
||||
id = "untrusted-net";
|
||||
uuid = "11111111-2222-3333-4444-555555555555";
|
||||
type = "dummy";
|
||||
interface-name = "dummy-untrusted";
|
||||
autoconnect = "false";
|
||||
};
|
||||
ipv4.method = "manual";
|
||||
ipv4.addresses = "10.99.2.1/24";
|
||||
};
|
||||
};
|
||||
|
||||
services.nmtrust = {
|
||||
enable = true;
|
||||
trustedConnections = [ "trusted-net" ];
|
||||
systemUnits."trust-canary.service" = { };
|
||||
};
|
||||
|
||||
# Canary service: runs only while the trusted target is active.
|
||||
systemd.services.trust-canary = {
|
||||
description = "nmtrust test canary";
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
ExecStart = "${pkgs.coreutils}/bin/sleep infinity";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
import time
|
||||
|
||||
def apply(machine):
|
||||
"""Trigger nmtrust-apply and wait for it to finish."""
|
||||
time.sleep(1)
|
||||
machine.succeed("systemctl start nmtrust-apply.service")
|
||||
machine.wait_until_succeeds(
|
||||
"systemctl show nmtrust-apply.service -p ActiveState --value | grep -q inactive",
|
||||
timeout=10,
|
||||
)
|
||||
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
|
||||
with subtest("offline on boot with no connections active"):
|
||||
apply(machine)
|
||||
machine.succeed("systemctl is-active nmtrust-offline.target")
|
||||
machine.fail("systemctl is-active trust-canary.service")
|
||||
|
||||
with subtest("trusted when trusted connection is up"):
|
||||
machine.succeed("nmcli connection up trusted-net")
|
||||
apply(machine)
|
||||
machine.succeed("systemctl is-active nmtrust-trusted.target")
|
||||
machine.succeed("systemctl is-active trust-canary.service")
|
||||
|
||||
with subtest("untrusted when untrusted connection replaces trusted"):
|
||||
machine.succeed("nmcli connection down trusted-net")
|
||||
machine.succeed("nmcli connection up untrusted-net")
|
||||
apply(machine)
|
||||
machine.succeed("systemctl is-active nmtrust-untrusted.target")
|
||||
machine.fail("systemctl is-active trust-canary.service")
|
||||
'';
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ brett ];
|
||||
}
|
||||
+3
-2
@@ -23,7 +23,6 @@ let
|
||||
|
||||
nodes.machine =
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
@@ -54,6 +53,8 @@ let
|
||||
# /dev/disk/by-id doesn't get populated in the NixOS test framework
|
||||
boot.zfs.devNodes = "/dev/disk/by-uuid";
|
||||
|
||||
boot.zfs.forceImportRoot = lib.mkDefault false;
|
||||
|
||||
specialisation.samba.configuration = {
|
||||
services.samba = {
|
||||
enable = true;
|
||||
@@ -101,6 +102,7 @@ let
|
||||
systemd.services.zfs-import-forcepool.wantedBy = lib.mkVMOverride [ "forcepool.mount" ];
|
||||
systemd.targets.zfs.wantedBy = lib.mkVMOverride [ ];
|
||||
boot.zfs.forceImportAll = true;
|
||||
boot.zfs.forceImportRoot = true;
|
||||
virtualisation.fileSystems."/forcepool" = {
|
||||
device = "forcepool";
|
||||
fsType = "zfs";
|
||||
@@ -203,7 +205,6 @@ let
|
||||
|
||||
in
|
||||
{
|
||||
|
||||
series_2_3 = makeZfsTest {
|
||||
zfsPackage = pkgs.zfs_2_3;
|
||||
kernelPackages = pkgs.linuxPackages;
|
||||
|
||||
@@ -45,7 +45,7 @@ let
|
||||
};
|
||||
});
|
||||
|
||||
jbr = jetbrains.jdk-no-jcef;
|
||||
jbr = jetbrains.jdk-no-jcef-21;
|
||||
|
||||
ideaSrc = fetchFromGitHub {
|
||||
owner = "jetbrains";
|
||||
|
||||
@@ -23716,13 +23716,12 @@ final: prev: {
|
||||
vim-solarized8 = buildVimPlugin {
|
||||
pname = "vim-solarized8";
|
||||
version = "1.6.4-unstable-2026-03-11";
|
||||
src = fetchFromGitHub {
|
||||
owner = "lifepillar";
|
||||
repo = "vim-solarized8";
|
||||
rev = "4433b4411de92b2446a4d32f0d8bf1b25c476bf9";
|
||||
hash = "sha256-Og6qmrSIfhtGgait/nwJg+uNrUtY/j83cUWZj2TwUFY=";
|
||||
src = fetchgit {
|
||||
url = "https://codeberg.org/lifepillar/vim-solarized8/";
|
||||
rev = "5dfbfb00be8237619c680302fc9250e391b1686a";
|
||||
hash = "sha256-qJLlHsXKcLC+bpirfcuBj3igK9dDk8L9oVGPzWhtkEI=";
|
||||
};
|
||||
meta.homepage = "https://github.com/lifepillar/vim-solarized8/";
|
||||
meta.homepage = "https://codeberg.org/lifepillar/vim-solarized8/";
|
||||
meta.license = lib.licenses.unfree;
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
@@ -209,6 +209,12 @@ assertNoAdditions {
|
||||
dependencies = [ self.middleclass ];
|
||||
};
|
||||
|
||||
argtextobj-vim = super.argtextobj-vim.overrideAttrs (old: {
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
});
|
||||
|
||||
arrow-nvim = super.arrow-nvim.overrideAttrs (old: {
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.gpl3Plus;
|
||||
@@ -447,6 +453,12 @@ assertNoAdditions {
|
||||
};
|
||||
});
|
||||
|
||||
camelcasemotion = super.camelcasemotion.overrideAttrs (old: {
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.vim;
|
||||
};
|
||||
});
|
||||
|
||||
catppuccin-nvim = super.catppuccin-nvim.overrideAttrs {
|
||||
nvimSkipModules = [
|
||||
"catppuccin.groups.integrations.noice"
|
||||
@@ -2219,6 +2231,12 @@ assertNoAdditions {
|
||||
dependencies = [ self.plenary-nvim ];
|
||||
};
|
||||
|
||||
lsp-format-nvim = super.lsp-format-nvim.overrideAttrs (old: {
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
});
|
||||
|
||||
lsp_extensions-nvim = super.lsp_extensions-nvim.overrideAttrs {
|
||||
dependencies = [ self.plenary-nvim ];
|
||||
};
|
||||
@@ -4477,6 +4495,12 @@ assertNoAdditions {
|
||||
nvimSkipModules = "tsc.better-messages-test";
|
||||
};
|
||||
|
||||
tslime-vim = super.tslime-vim.overrideAttrs (old: {
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.wtfpl;
|
||||
};
|
||||
});
|
||||
|
||||
tsuquyomi = super.tsuquyomi.overrideAttrs (old: {
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.mit;
|
||||
@@ -4709,9 +4733,12 @@ assertNoAdditions {
|
||||
};
|
||||
});
|
||||
|
||||
vim-beancount = super.vim-beancount.overrideAttrs {
|
||||
vim-beancount = super.vim-beancount.overrideAttrs (old: {
|
||||
passthru.python3Dependencies = ps: with ps; [ beancount ];
|
||||
};
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.vim;
|
||||
};
|
||||
});
|
||||
|
||||
vim-bepoptimist = super.vim-bepoptimist.overrideAttrs (old: {
|
||||
meta = old.meta // {
|
||||
@@ -4852,6 +4879,12 @@ assertNoAdditions {
|
||||
};
|
||||
});
|
||||
|
||||
vim-easymotion = super.vim-easymotion.overrideAttrs (old: {
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
});
|
||||
|
||||
vim-easytags = super.vim-easytags.overrideAttrs (old: {
|
||||
dependencies = [ self.vim-misc ];
|
||||
patches = [
|
||||
@@ -5039,6 +5072,12 @@ assertNoAdditions {
|
||||
runtimeDeps = [ jq ];
|
||||
};
|
||||
|
||||
vim-indentwise = super.vim-indentwise.overrideAttrs (old: {
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.gpl3Plus;
|
||||
};
|
||||
});
|
||||
|
||||
vim-isort = super.vim-isort.overrideAttrs {
|
||||
postPatch = ''
|
||||
substituteInPlace autoload/vimisort.vim \
|
||||
@@ -5328,6 +5367,12 @@ assertNoAdditions {
|
||||
};
|
||||
});
|
||||
|
||||
vim-textobj-user = super.vim-textobj-user.overrideAttrs (old: {
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
});
|
||||
|
||||
vim-tpipeline = super.vim-tpipeline.overrideAttrs {
|
||||
# Requires global variable
|
||||
nvimSkipModules = "tpipeline.main";
|
||||
@@ -5506,6 +5551,12 @@ assertNoAdditions {
|
||||
nvimSkipModules = "virt-column.config.types";
|
||||
};
|
||||
|
||||
vis = super.vis.overrideAttrs (old: {
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.vim;
|
||||
};
|
||||
});
|
||||
|
||||
vs-tasks-nvim = super.vs-tasks-nvim.overrideAttrs {
|
||||
checkInputs = [
|
||||
# Optional telescope integration
|
||||
|
||||
@@ -1691,7 +1691,7 @@ https://github.com/bohlender/vim-smt2/,,
|
||||
https://github.com/justinmk/vim-sneak/,,
|
||||
https://github.com/garbas/vim-snipmate/,,
|
||||
https://github.com/honza/vim-snippets/,,
|
||||
https://github.com/lifepillar/vim-solarized8/,,
|
||||
https://codeberg.org/lifepillar/vim-solarized8/,,
|
||||
https://github.com/tomlion/vim-solidity/,,
|
||||
https://github.com/christoomey/vim-sort-motion/,,
|
||||
https://github.com/tpope/vim-speeddating/,,
|
||||
|
||||
@@ -1,39 +1,55 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
stdenvNoCC,
|
||||
autoPatchelfHook,
|
||||
alsa-lib,
|
||||
testers,
|
||||
vscode-utils,
|
||||
}:
|
||||
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
|
||||
nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];
|
||||
|
||||
buildInputs = lib.optionals stdenv.hostPlatform.isLinux [
|
||||
(lib.getLib stdenv.cc.cc)
|
||||
alsa-lib
|
||||
];
|
||||
|
||||
mktplcRef =
|
||||
let
|
||||
sources = {
|
||||
"x86_64-linux" = {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-w4kUYNnQW4KkIlzxnTASTBFxL3m3/NBwBET7/8ealIY=";
|
||||
hash = "sha256-J9QdRxN0NdCRfSUBUE7Ox2BG0vdnaWGq27jcR779qRw=";
|
||||
};
|
||||
"aarch64-linux" = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-ZsVR7Qajv78A0+UfR+DqaUZyV1FFRjNs2+vJInboh6U=";
|
||||
hash = "sha256-53SJDBILWKVqz8EyXO/DF8+j+EK7iVJ47cjhlZhrIWw=";
|
||||
};
|
||||
"x86_64-darwin" = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-8zvhF5cs1XOGa/l2M27K2Mv2cgusNy51glFZf1OVdWI=";
|
||||
hash = "sha256-/82zwt92T5JYGxhnvSmqTA/7ahut6P3SAU5POxUFowM=";
|
||||
};
|
||||
"aarch64-darwin" = {
|
||||
arch = "darwin-arm64";
|
||||
hash = "sha256-Csb9F6HGWAgvPDjtsu35gjtGCuDLu0WQD1NNX/+S7F8=";
|
||||
hash = "sha256-2ppC1sDDtDKAWpAW3RHGHeszhoKAVYnRoKw94ZOCaAs=";
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
name = "claude-code";
|
||||
publisher = "anthropic";
|
||||
version = "2.1.119";
|
||||
version = "2.1.121";
|
||||
}
|
||||
// sources.${stdenvNoCC.hostPlatform.system}
|
||||
or (throw "Unsupported system ${stdenvNoCC.hostPlatform.system}");
|
||||
|
||||
passthru.tests.bundled-claude-runs = testers.testVersion {
|
||||
package = finalAttrs.finalPackage;
|
||||
command = "${finalAttrs.finalPackage}/share/vscode/extensions/anthropic.claude-code/resources/native-binary/claude --version";
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Harness the power of Claude Code without leaving your IDE";
|
||||
homepage = "https://docs.anthropic.com/s/claude-code";
|
||||
@@ -48,4 +64,4 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
"aarch64-darwin"
|
||||
];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -85,7 +85,7 @@ let
|
||||
};
|
||||
};
|
||||
|
||||
"42crunch".vscode-openapi = buildVscodeMarketplaceExtension {
|
||||
"42crunch".vscode-openapi = buildVscodeMarketplaceExtension rec {
|
||||
mktplcRef = {
|
||||
publisher = "42Crunch";
|
||||
name = "vscode-openapi";
|
||||
@@ -93,7 +93,7 @@ let
|
||||
hash = "sha256-nV7RZpDd+15YmINKrFSIlFurC955bnE4A8esrKWYVnE=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/42Crunch.vscode-openapi/changelog";
|
||||
changelog = "https://github.com/42Crunch/vscode-openapi/blob/v${mktplcRef.version}/CHANGELOG.md";
|
||||
description = "Visual Studio Code extension with rich support for the OpenAPI Specification (OAS)";
|
||||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=42Crunch.vscode-openapi";
|
||||
homepage = "https://github.com/42Crunch/vscode-openapi";
|
||||
@@ -1174,8 +1174,8 @@ let
|
||||
mktplcRef = {
|
||||
publisher = "DanielSanMedium";
|
||||
name = "dscodegpt";
|
||||
version = "3.17.20";
|
||||
hash = "sha256-7nJlPP1Xap0lSJz+HQmKKC9OZ5UfMCq8nf1B/bkyNXU=";
|
||||
version = "3.17.36";
|
||||
hash = "sha256-7+Ja5/zeGq+W1aCIzZu0x+CU1ERwZhwvOaZKaGSWK4c=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/DanielSanMedium.dscodegpt/changelog";
|
||||
|
||||
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "claude-dev";
|
||||
publisher = "saoudrizwan";
|
||||
version = "3.79.0";
|
||||
hash = "sha256-BqIJNUkq7q2/WlsWqN/dHZtYqHvDm3v7CesEM4XJ1Es=";
|
||||
version = "3.81.0";
|
||||
hash = "sha256-gVQmKuyUH+bXpr7X2Z23U2oKFnAV2mxhckjef2uL8KQ=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
}:
|
||||
mkLibretroCore {
|
||||
core = "mednafen-pce-fast";
|
||||
version = "0-unstable-2026-04-17";
|
||||
version = "0-unstable-2026-04-20";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "beetle-pce-fast-libretro";
|
||||
rev = "906b6465f1d4da2d04d8735b0d24ca0af0533590";
|
||||
hash = "sha256-xg+irszrpUu689MyP2iJDl9a/YHR4RRqLJmRdu6/4Nw=";
|
||||
rev = "95b5274dfeda36f7e77c70daa666a63302ad83cf";
|
||||
hash = "sha256-BEt2g63jBOrgWk0tYp8DJVC65AbeSVRQz9rIMwjj2Sg=";
|
||||
};
|
||||
|
||||
makefile = "Makefile";
|
||||
|
||||
@@ -26,13 +26,14 @@
|
||||
}:
|
||||
mkLibretroCore {
|
||||
core = "dolphin";
|
||||
version = "0-unstable-2025-08-05";
|
||||
version = "0-unstable-2026-04-08";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "dolphin";
|
||||
rev = "83438f9b1a2c832319876a1fda130a5e33d4ef87";
|
||||
hash = "sha256-q4y+3uJ1tQ2OvlEvi/JNyIO/RfuWNIEKfVZ6xEWKFCg=";
|
||||
rev = "0cd3bb89c29535db9b7552fc86871867ccf5b471";
|
||||
hash = "sha256-cSiJO/EvspNvHopo/RLfuz8ONpbXk2NrrSDhkiAm7/s=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
extraNativeBuildInputs = [
|
||||
@@ -82,8 +83,6 @@ mkLibretroCore {
|
||||
(cmakeFeature "CMAKE_POLICY_VERSION_MINIMUM" "3.5")
|
||||
];
|
||||
|
||||
dontUseCmakeBuildDir = true;
|
||||
|
||||
meta = {
|
||||
description = "Port of Dolphin to libretro";
|
||||
homepage = "https://github.com/libretro/dolphin";
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
}:
|
||||
mkLibretroCore {
|
||||
core = "mesen-s";
|
||||
version = "0-unstable-2024-10-21";
|
||||
version = "0-unstable-2026-04-20";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "mesen-s";
|
||||
rev = "d4fca31a6004041d99b02199688f84c009c55967";
|
||||
hash = "sha256-mGGTLBRJCsNJg57LWSFndIv/LLzEmVRnv6gNbllkV/Y=";
|
||||
rev = "1d475abd174d16ecb1fb030961ff26076ab51ee6";
|
||||
hash = "sha256-JSXkh6OyclYl3X/sJLRZsb5sdbSfanbJAKlhaFFjSrI=";
|
||||
};
|
||||
|
||||
makefile = "Makefile";
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
}:
|
||||
mkLibretroCore {
|
||||
core = "pcsx-rearmed";
|
||||
version = "0-unstable-2026-04-15";
|
||||
version = "0-unstable-2026-04-25";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "pcsx_rearmed";
|
||||
rev = "00512d47f9d4d220efa4f2418b4a5896f9cd2e75";
|
||||
hash = "sha256-ERllT1RkoLMafnHx2HSHdURoWdnF8fJlZ80pfiw18gQ=";
|
||||
rev = "a97efbb0646dd7766bd66fe9e93118206edec36a";
|
||||
hash = "sha256-2MAj/UdEg/kRZuGZcVQ+hBMe2pRlZWvEQnXeqb+444Y=";
|
||||
};
|
||||
|
||||
dontConfigure = true;
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
}:
|
||||
mkLibretroCore {
|
||||
core = "prosystem";
|
||||
version = "0-unstable-2026-03-31";
|
||||
version = "0-unstable-2026-04-20";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "prosystem-libretro";
|
||||
rev = "980edb381b0bf9ea7992caab24039a537aeb510e";
|
||||
hash = "sha256-uuh5YLKHW5aVe01GH12TqAlSp83s/PF/8Mlw105HIJg=";
|
||||
rev = "3f465db9c82fc6764cd90c53fc66eb630e0b3710";
|
||||
hash = "sha256-uamxOzJt5NbMGxDqyGk/8XJbN/fiFoB81DNeULIfL1U=";
|
||||
};
|
||||
|
||||
makefile = "Makefile";
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
}:
|
||||
mkLibretroCore {
|
||||
core = "stella";
|
||||
version = "0-unstable-2026-04-19";
|
||||
version = "0-unstable-2026-04-28";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "stella-emu";
|
||||
repo = "stella";
|
||||
rev = "8b7bc991d2500cbf2e861c25f96ff81e0d13f273";
|
||||
hash = "sha256-jeu/7hHuPfSoJg2/6UxUqHWOGMSe0vX6cgWLmVYHABQ=";
|
||||
rev = "0c1b944387b5ac2b1bf753c2c4221db4fdc10f79";
|
||||
hash = "sha256-mohkp6oOP8MtRs/WHw4Rxs3FrB6h4X6/ENrRdjiiXlQ=";
|
||||
};
|
||||
|
||||
makefile = "Makefile";
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
}:
|
||||
mkLibretroCore {
|
||||
core = "thepowdertoy";
|
||||
version = "0-unstable-2025-09-16";
|
||||
version = "0-unstable-2026-04-20";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "ThePowderToy";
|
||||
rev = "cb3cd4c2e5beddb98b34e6b800fa24e8f96322d9";
|
||||
hash = "sha256-k3XWkkSuQC3IBhhI96qkTrlGH/oJu941HaAvR28V5i0=";
|
||||
rev = "dcb5e41f1f9800192ea07ea43459413c5a065d9f";
|
||||
hash = "sha256-FDotG/ngmrxgyN7YQ8SK/ZQHKWkwZ5hhg0qsNNXmaNc=";
|
||||
};
|
||||
|
||||
extraNativeBuildInputs = [ cmake ];
|
||||
|
||||
@@ -400,13 +400,13 @@
|
||||
"vendorHash": null
|
||||
},
|
||||
"fastly_fastly": {
|
||||
"hash": "sha256-2QfgzzWYXPOCMAX2EBodDPVEtcIHHPT4Lbh0W1+q2to=",
|
||||
"hash": "sha256-deph1BQ/aUgTOf4Bgaxpac4V2fmy4dSdbBRa/qvvKdk=",
|
||||
"homepage": "https://registry.terraform.io/providers/fastly/fastly",
|
||||
"owner": "fastly",
|
||||
"repo": "terraform-provider-fastly",
|
||||
"rev": "v9.1.0",
|
||||
"rev": "v9.1.1",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-E64AMHGFpAhg6UNYHJXAdRWPdWWdZineW/b+Gs2O2jk="
|
||||
"vendorHash": "sha256-lxBvfkuvf1eoprkCuPtYqOw6P7sTzS70VXTYGToazf8="
|
||||
},
|
||||
"flexibleenginecloud_flexibleengine": {
|
||||
"hash": "sha256-yEZ9JiUSqFFbfqzOOD59ZBv4yFCeUBBKlp6aiUqDqiM=",
|
||||
|
||||
@@ -200,9 +200,9 @@ rec {
|
||||
mkTerraform = attrs: pluggable (generic attrs);
|
||||
|
||||
terraform_1 = mkTerraform {
|
||||
version = "1.14.9";
|
||||
hash = "sha256-OvKc+71DxbYgdOs06RkM4doF4OTkY0NI/LR0Wgpr7tA=";
|
||||
vendorHash = "sha256-Ajjh8k2lOKf+BGIk3Vyp8H2unljeOMUN0vXwGjs7ZHc=";
|
||||
version = "1.15.0";
|
||||
hash = "sha256-cKgZFCPLusXXSjcff/PmKGIdSm3wRY1DpduXBRrgcDc=";
|
||||
vendorHash = "sha256-Gv6V5aXqTuQoG1StbD/7Ln2QrLpMsW6fbUJUkyZMkvk=";
|
||||
patches = [ ./provider-path-0_15.patch ];
|
||||
passthru = {
|
||||
inherit plugins;
|
||||
|
||||
@@ -22,6 +22,21 @@ let
|
||||
];
|
||||
} (builtins.readFile ./replace-workspace-values.py);
|
||||
|
||||
nix-prefetch-git' = nix-prefetch-git.override {
|
||||
git = gitMinimal;
|
||||
# break loop of nix-prefetch-git -> git-lfs -> asciidoctor -> ruby (yjit) -> fetchCargoVendor -> nix-prefetch-git
|
||||
# Cargo does not currently handle git-lfs: https://github.com/rust-lang/cargo/issues/9692
|
||||
git-lfs = null;
|
||||
};
|
||||
|
||||
removedArgs = [
|
||||
"name"
|
||||
"pname"
|
||||
"version"
|
||||
"nativeBuildInputs"
|
||||
"hash"
|
||||
];
|
||||
|
||||
mkFetchCargoVendorUtil =
|
||||
name: src:
|
||||
writers.writePython3Bin name {
|
||||
@@ -57,14 +72,6 @@ in
|
||||
# TODO: add asserts about pname version and name
|
||||
|
||||
let
|
||||
removedArgs = [
|
||||
"name"
|
||||
"pname"
|
||||
"version"
|
||||
"nativeBuildInputs"
|
||||
"hash"
|
||||
];
|
||||
|
||||
vendorStaging = stdenvNoCC.mkDerivation (
|
||||
{
|
||||
name = "${name}-vendor-staging";
|
||||
@@ -74,12 +81,7 @@ let
|
||||
nativeBuildInputs = [
|
||||
fetchCargoVendorUtilV2
|
||||
cacert
|
||||
(nix-prefetch-git.override {
|
||||
git = gitMinimal;
|
||||
# break loop of nix-prefetch-git -> git-lfs -> asciidoctor -> ruby (yjit) -> fetchCargoVendor -> nix-prefetch-git
|
||||
# Cargo does not currently handle git-lfs: https://github.com/rust-lang/cargo/issues/9692
|
||||
git-lfs = null;
|
||||
})
|
||||
nix-prefetch-git'
|
||||
]
|
||||
++ nativeBuildInputs;
|
||||
|
||||
@@ -108,7 +110,6 @@ let
|
||||
// removeAttrs args removedArgs
|
||||
);
|
||||
in
|
||||
|
||||
runCommand "${name}-vendor"
|
||||
{
|
||||
inherit vendorStaging;
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "aliyun-cli";
|
||||
version = "3.3.8";
|
||||
version = "3.3.11";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "aliyun";
|
||||
repo = "aliyun-cli";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-5RFGpfeW3nLubN920hrBVyEdJEPa/V3Dz2YdxCh9YLU=";
|
||||
hash = "sha256-jksC63DFSbZcBjQvV7BBMSMbPMeSqUQMWN9HcIcFZSU=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
||||
@@ -16,16 +16,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "amdgpu_top";
|
||||
version = "0.11.3";
|
||||
version = "0.11.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Umio-Yasuno";
|
||||
repo = "amdgpu_top";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-k+/y8YaEP8DJuW8n/Xq/Ea9DWG79Cux+PgZbSP4m3pQ=";
|
||||
hash = "sha256-ap1X53Ou/eWhHvXOnHY7zGb6i+ZLs8LeSNpOJWm+IKc=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-+eMItSemE69UGfGF9CeKyEvUxvhiZjkJJPeZoVfa+dk=";
|
||||
cargoHash = "sha256-b9OO//9M/LyS4ZMQzppvLHJHL3JyPVoSOIPVlrX1Wes=";
|
||||
|
||||
buildInputs = [
|
||||
libdrm
|
||||
|
||||
@@ -142,12 +142,12 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
};
|
||||
|
||||
env = {
|
||||
JAVA_HOME = jetbrains.jdk;
|
||||
JAVA_HOME = jetbrains.jdk-21;
|
||||
ANDROID_SDK_HOME = "$(pwd)";
|
||||
};
|
||||
|
||||
gradleFlags = [
|
||||
"-Dorg.gradle.java.home=${jetbrains.jdk}"
|
||||
"-Dorg.gradle.java.home=${jetbrains.jdk-21}"
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
@@ -282,5 +282,8 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
];
|
||||
# Mark broken due to a breaking change in JetBrains JCEF
|
||||
# https://github.com/NixOS/nixpkgs/pull/485812#issuecomment-4211365591
|
||||
broken = true;
|
||||
};
|
||||
})
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
# https://github.com/nianeyna/ao3downloader/blob/f8399bb8aca276ae7359157b90afd13925c90056/pyproject.toml#L8
|
||||
python312Packages.buildPythonApplication (finalAttrs: {
|
||||
pname = "ao3downloader";
|
||||
version = "2026.4.7";
|
||||
version = "2026.4.9";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "nianeyna";
|
||||
repo = "ao3downloader";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-PlMVhvUX/XeNrKfwe+/sFv8Y4k7GEzCR+xIO/zuspxM=";
|
||||
hash = "sha256-StaF62Ho/xz8kKE5NrLo8G5PdBv493VBshR6gdK9J20=";
|
||||
};
|
||||
|
||||
build-system = with python312Packages; [
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
|
||||
let
|
||||
pname = "apidog";
|
||||
version = "2.8.24";
|
||||
version = "2.8.26";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://file-assets.apidog.com/download/${version}/Apidog-${version}.AppImage";
|
||||
hash = "sha256-gGhA++wfgURhibGF2tXAmH0orX2VSUiJsAo3wAu6t1g=";
|
||||
hash = "sha256-u+J5OKgqOKEE35IhMpL7LUB4UgaX2XZKfnUczfLhjoU=";
|
||||
};
|
||||
|
||||
appimageContents = appimageTools.extract {
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "apt-swarm";
|
||||
version = "0.5.1";
|
||||
version = "0.6.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kpcyrd";
|
||||
repo = "apt-swarm";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-zb0X6vIRKeI5Ysc88sTCJBlr9r8hrsTq5YR7YCg1L30=";
|
||||
hash = "sha256-tDIwx+Eb/5EH9p407+FfKAwU6ZjNxyKtfFe5h7eTnHg=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-PELTEzhsFa1nl7iqrjnuXEI0U7L8rL9XW9XqQ04rz/s=";
|
||||
cargoHash = "sha256-43TFrddQvmzUzk2JnggKKWljBNzO+7IYF8HsTwez7a4=";
|
||||
|
||||
meta = {
|
||||
description = "Experimental p2p gossip network for OpenPGP signature transparency";
|
||||
|
||||
@@ -13,7 +13,7 @@ buildGoModule (finalAttrs: {
|
||||
src = fetchFromGitHub {
|
||||
owner = "controlplaneio";
|
||||
repo = "badrobot";
|
||||
rev = "v${finalAttrs.version}";
|
||||
tag = "v${finalAttrs.version}";
|
||||
sha256 = "sha256-U3b5Xw+GjnAEXteivztHdcAcXx7DYtgaUbW5oax0mIk=";
|
||||
};
|
||||
vendorHash = "sha256-oYdkCEdrw1eE5tnKveeJM3upRy8hOVc24JNN1bLX+ec=";
|
||||
@@ -35,7 +35,7 @@ buildGoModule (finalAttrs: {
|
||||
|
||||
meta = {
|
||||
homepage = "https://github.com/controlplaneio/badrobot";
|
||||
changelog = "https://github.com/controlplaneio/badrobot/blob/v${finalAttrs.version}/CHANGELOG.md";
|
||||
changelog = "https://github.com/controlplaneio/badrobot/releases/tag/v${finalAttrs.src.tag}";
|
||||
description = "Operator Security Audit Tool";
|
||||
mainProgram = "badrobot";
|
||||
longDescription = ''
|
||||
@@ -47,6 +47,8 @@ buildGoModule (finalAttrs: {
|
||||
cluster permissions.
|
||||
'';
|
||||
license = with lib.licenses; [ asl20 ];
|
||||
maintainers = with lib.maintainers; [ jk ];
|
||||
maintainers = with lib.maintainers; [
|
||||
jk
|
||||
];
|
||||
};
|
||||
})
|
||||
|
||||
@@ -11,16 +11,16 @@
|
||||
}:
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "biome";
|
||||
version = "2.4.12";
|
||||
version = "2.4.13";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "biomejs";
|
||||
repo = "biome";
|
||||
rev = "@biomejs/biome@${finalAttrs.version}";
|
||||
hash = "sha256-PVax57P496gDksvyGskW3MeR9YDZFE0E8yiv2zW6L/o=";
|
||||
hash = "sha256-Pie1oc1mc6lsdmSiOu04ci67DToDYRt36hdHsU0ZGXw=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-638M2/qRXTZSD4/2/PWkfo5DbsLzWlhwwSBGlkUaLBc=";
|
||||
cargoHash = "sha256-ayFCjh1gBLOJoUnDKm+kwUzshGS0utqTewfe5wEdvQ0=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
|
||||
@@ -28,14 +28,14 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "boinc";
|
||||
version = "8.2.10";
|
||||
version = "8.2.11";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
name = "${pname}-${version}-src";
|
||||
owner = "BOINC";
|
||||
repo = "boinc";
|
||||
rev = "client_release/${lib.versions.majorMinor version}/${version}";
|
||||
hash = "sha256-+/EuGJluTXhEWZT97P60vE6e8uX3+GdCyJwf9nzsh4E=";
|
||||
hash = "sha256-xWEAjTWEUCTTtxfCFFMcrJD0DRVmUAgi2vE0GifTX2Q=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "boulder";
|
||||
version = "0.20260413.0";
|
||||
version = "0.20260428.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "letsencrypt";
|
||||
@@ -22,7 +22,7 @@ buildGoModule (finalAttrs: {
|
||||
find $out -name .git -print0 | xargs -0 rm -rf
|
||||
popd
|
||||
'';
|
||||
hash = "sha256-8saRz7g0KsXNr5oR4a2qd4kKDR686J0TIFMzsX/zlV0=";
|
||||
hash = "sha256-ky6geY8pIBhnpwQ4bbzQN0+EQgOfwlo8EQ0rTZdtNIA=";
|
||||
};
|
||||
|
||||
vendorHash = null;
|
||||
|
||||
@@ -44,7 +44,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
meta = {
|
||||
description = "Bandwidth Test server and client";
|
||||
homepage = "https://github.com/manawenuz/btest-rs";
|
||||
changelog = "https://github.com/manawenuz/btest-rs/releases/tag/v${finalAttrs.src.tag}";
|
||||
changelog = "https://github.com/manawenuz/btest-rs/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "btest";
|
||||
|
||||
@@ -44,7 +44,6 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
be used to filter and format appointments, making it suitable for use in scripts.
|
||||
'';
|
||||
homepage = "https://calcurse.org/";
|
||||
changelog = "https://git.calcurse.org/calcurse.git/plain/CHANGES.md?h=v${finalAttrs.version}";
|
||||
license = lib.licenses.bsd2;
|
||||
platforms = lib.platforms.unix;
|
||||
maintainers = [ lib.maintainers.matthiasbeyer ];
|
||||
|
||||
@@ -12,16 +12,16 @@
|
||||
}:
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "cantus";
|
||||
version = "0.6.5";
|
||||
version = "0.6.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "CodedNil";
|
||||
repo = "cantus";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-pnc/fjmi932tZQsAfvvAoZ1PXEP8gckGuauR+5btei8=";
|
||||
hash = "sha256-4bnIYOHVOPawDg4s5mPKYXURpDSVgyTmoh1WiGj/Zl8=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-sDZF5cWlhsBblAe0sreGbfgXKIip5raM0r9ZeJrLrLQ=";
|
||||
cargoHash = "sha256-TbbXZGToQTH0k6KxpCsjcG/kOFY0c4L/P8QUpDyQ+2E=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
|
||||
@@ -31,7 +31,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
description = "Cargo subcommand to show crates info from crates.io";
|
||||
mainProgram = "cargo-info";
|
||||
homepage = "https://gitlab.com/imp/cargo-info";
|
||||
changelog = "https://gitlab.com/imp/cargo-info/-/blob/${finalAttrs.src.rev}/CHANGELOG.md";
|
||||
changelog = "https://gitlab.com/imp/cargo-info/-/blob/${finalAttrs.src.tag}/CHANGELOG.md";
|
||||
license = with lib.licenses; [
|
||||
mit
|
||||
asl20
|
||||
|
||||
@@ -10,20 +10,20 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "cargo-mobile2";
|
||||
version = "0.22.3";
|
||||
version = "0.22.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "tauri-apps";
|
||||
repo = "cargo-mobile2";
|
||||
rev = "cargo-mobile2-v${finalAttrs.version}";
|
||||
hash = "sha256-rPLGh7/lGsmoidtr+UNrxzUgqtiHvkqZs2/la4L6zQM=";
|
||||
hash = "sha256-DjoWjdgfNHLZkaWUjPq4tNrmHsifKKhBaRjK25WRdiE=";
|
||||
};
|
||||
|
||||
# Manually specify the sourceRoot since this crate depends on other crates in the workspace. Relevant info at
|
||||
# https://discourse.nixos.org/t/difficulty-using-buildrustpackage-with-a-src-containing-multiple-cargo-workspaces/10202
|
||||
# sourceRoot = "${src.name}/tooling/cli";
|
||||
|
||||
cargoHash = "sha256-ht9ofFa4H/Ux6a31vMNdKNhrX48yoYM1qAPoxCjude0=";
|
||||
cargoHash = "sha256-m+9wPfheH9t7zxTsW7vHe4td/gyeC/nXFDHRGjK5XBg=";
|
||||
|
||||
buildInputs = [ openssl ];
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -31,8 +31,8 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
meta = {
|
||||
description = "List and diff the public API of Rust library crates between releases and commits. Detect breaking API changes and semver violations";
|
||||
mainProgram = "cargo-public-api";
|
||||
homepage = "https://github.com/Enselic/cargo-public-api";
|
||||
changelog = "https://github.com/Enselic/cargo-public-api/releases/tag/v${finalAttrs.version}";
|
||||
homepage = "https://github.com/cargo-public-api/cargo-public-api";
|
||||
changelog = "https://github.com/cargo-public-api/cargo-public-api/blob/v${finalAttrs.version}/CHANGELOG.md";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ matthiasbeyer ];
|
||||
};
|
||||
|
||||
@@ -10,16 +10,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "cargo-udeps";
|
||||
version = "0.1.60";
|
||||
version = "0.1.61";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "est31";
|
||||
repo = "cargo-udeps";
|
||||
rev = "v${finalAttrs.version}";
|
||||
sha256 = "sha256-NW9yjFUV+o7vv5bYD8nxSWHOXOBnDEk36xze90wYuNg=";
|
||||
sha256 = "sha256-yT/EJWGGhQapbU1o1Gus1Vk5cAhso5ALTBecB3BH46g=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-vQvtc/CwV1aHeREzmzO8k1FcebbEp3FKMAJb0v2aQig=";
|
||||
cargoHash = "sha256-DGfAsBucFRFJkjmJkpTpNfQO79jaNa5NezXKf7hYYeM=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "chroma";
|
||||
version = "2.23.1";
|
||||
version = "2.24.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "alecthomas";
|
||||
repo = "chroma";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-Znmcds0ru9VyH/0qE7KnW7l0QeRDoh9PnUPHTYPAA6w=";
|
||||
hash = "sha256-KfojHrRJjGT03WeBobvBO9pHsJP6I7fSxzcSlmCsaxE=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-3mmO5hjjIqVqKiSOrFFQH8OaQTviJVHrznMYsgHP82A=";
|
||||
vendorHash = "sha256-Vq5k4Jz4r5iZs7Yy175Ubj92eSr4v1xCtbLYhfo3OAg=";
|
||||
|
||||
modRoot = "./cmd/chroma";
|
||||
|
||||
|
||||
@@ -1,47 +1,47 @@
|
||||
{
|
||||
"version": "2.1.119",
|
||||
"commit": "6f68554839756189e277b8285a18fe47acd9a5a1",
|
||||
"buildDate": "2026-04-23T20:45:14Z",
|
||||
"version": "2.1.121",
|
||||
"commit": "16ffea721a0a39bc787a236dc19fb62307180b75",
|
||||
"buildDate": "2026-04-27T01:51:03Z",
|
||||
"platforms": {
|
||||
"darwin-arm64": {
|
||||
"binary": "claude",
|
||||
"checksum": "31db3444309d5d0f8b85e8782e2dcd86f31f7e48c1a1e83d69b09268c7b4f9a2",
|
||||
"size": 213404000
|
||||
"checksum": "3810e55d47ed4d413de6dc037e34d58948f779a4c6bdeeacf1748d850c5daad6",
|
||||
"size": 215417984
|
||||
},
|
||||
"darwin-x64": {
|
||||
"binary": "claude",
|
||||
"checksum": "52b3b75cfe80c626982b2ffb3a6ce1c797824f257dc275cf0a3c32c202b6a3df",
|
||||
"size": 214951760
|
||||
"checksum": "59d817dde54eeef0d752e7bd3869586e6eb5fa2b1d785c06fb9cda8804166037",
|
||||
"size": 216982224
|
||||
},
|
||||
"linux-arm64": {
|
||||
"binary": "claude",
|
||||
"checksum": "382aa73ea4b07fd8d698e3159b5ef9e1b8739fae7505ba8ddd28b8a6a62819ce",
|
||||
"size": 245500480
|
||||
"checksum": "71b78e6364f97a227b17be40dfcc237461f8d2b1d109444d24b42af0fdefac31",
|
||||
"size": 247466560
|
||||
},
|
||||
"linux-x64": {
|
||||
"binary": "claude",
|
||||
"checksum": "cca43053f062949495596b11b6fd1b59cf79102adb13bacbe66997e6fae41e4a",
|
||||
"size": 245230208
|
||||
"checksum": "b4b684bbcb3a88029ec419dbc08824b2f3c69656a0aa2374860f9525fc67c98f",
|
||||
"size": 247265920
|
||||
},
|
||||
"linux-arm64-musl": {
|
||||
"binary": "claude",
|
||||
"checksum": "e09bfaedd8bfdeaebe5f1cf9bb81ebeb718312c68fffce379fb51786263143d0",
|
||||
"size": 238225856
|
||||
"checksum": "2f8e2a81f7d41a9cf3e9269fb3237df968194cc7bf8ba478392cd5217d55e8d1",
|
||||
"size": 240191872
|
||||
},
|
||||
"linux-x64-musl": {
|
||||
"binary": "claude",
|
||||
"checksum": "ef41a11653b39c14db2d343f1f5e2a3af7eb9871c63e64deb6e65919670a4e0b",
|
||||
"size": 239495616
|
||||
"checksum": "d5ad436e256291df5e2248d1026a971229dde43544db3267892afd5c89934eb1",
|
||||
"size": 241531264
|
||||
},
|
||||
"win32-x64": {
|
||||
"binary": "claude.exe",
|
||||
"checksum": "e18c7dcfad4a3f5d33d202ec2dde630b648cf5b41622154d6210e793c7cceadc",
|
||||
"size": 254478496
|
||||
"checksum": "0a85980a38e9d8fbb2ba51f1d27c3425c7870f75e053ae4be266d23e10edde4a",
|
||||
"size": 253241504
|
||||
},
|
||||
"win32-arm64": {
|
||||
"binary": "claude.exe",
|
||||
"checksum": "9e0deb10c45108612484ce558fad378206d5ac23feb203067450e6c38d001241",
|
||||
"size": 251203232
|
||||
"checksum": "9c9e1c68d50bb80f5e8d4a91645f042d4802a4fb0f87c34a504ecbb69a54860a",
|
||||
"size": 249304224
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,11 +29,11 @@ let
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "clightning";
|
||||
version = "26.04";
|
||||
version = "26.04.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/ElementsProject/lightning/releases/download/v${finalAttrs.version}/clightning-v${finalAttrs.version}.zip";
|
||||
hash = "sha256-6dxnhLkXIrfxqXi+UoBKsJw1YFIanOVGBYizJB0X3oU=";
|
||||
hash = "sha256-MEsZ5GPCY6q/SNO+xcktfGiCZUVgl4p7pdMOiqIqFJM=";
|
||||
};
|
||||
|
||||
# when building on darwin we need cctools to provide the correct libtool
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "cloudprober";
|
||||
version = "0.14.1";
|
||||
version = "0.14.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cloudprober";
|
||||
repo = "cloudprober";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-XFMjUwsRfWAnrNsegUPqWz8Bcc/naEBhytqq/o21ras=";
|
||||
hash = "sha256-dMogW0NQAMiSBC7//7gGmadvK5vS2H+170aW0RK58fU=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-+EVcYFnWPSNfxUzxuL3tAHjCCDad/7K11y3dk2CUtrU=";
|
||||
vendorHash = "sha256-YEueI/Ms350bNkKPmLNzLljr9FDL0R7zACF4HQwHLdk=";
|
||||
|
||||
checkFlags =
|
||||
let
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "clusterlint";
|
||||
version = "0.14.0";
|
||||
version = "0.15.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "digitalocean";
|
||||
repo = "clusterlint";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-iOd0mjVJDtALxdsmG6+ruJ8CxoNe17D9grkjRW+N34A=";
|
||||
hash = "sha256-6QgWWSiwVZv8rYJNvfzxNsrxCqJbR/MBcCr3ESrO6Fc=";
|
||||
};
|
||||
|
||||
vendorHash = null;
|
||||
|
||||
@@ -8,16 +8,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "coldsnap";
|
||||
version = "0.9.0";
|
||||
version = "0.10.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "awslabs";
|
||||
repo = "coldsnap";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-8+YPKjHi3VURzSOflIa0x4uBkoDMYGFJiFcNJ+8NJ7Q=";
|
||||
hash = "sha256-QQWH8cWBskXOmiZygvkNDyBX4WdsgnA0/ec6/UnmwIA=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-4w79zZcgIulLIArY2ErOHwaWA8g/mA2cSKCzJx4X9vM=";
|
||||
cargoHash = "sha256-U5MinzKQYTHRXM3WndkMEbvoT9tPwIIB3QxEOwWA3zE=";
|
||||
|
||||
buildInputs = [ openssl ];
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
}:
|
||||
rustPlatform.buildRustPackage {
|
||||
pname = "cosmic-ext-applet-weather";
|
||||
version = "0-unstable-2026-03-23";
|
||||
version = "0-unstable-2026-04-27";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cosmic-utils";
|
||||
repo = "cosmic-ext-applet-weather";
|
||||
rev = "e98c57c586180df0abf6efbe3ee479fc4849f4f7";
|
||||
hash = "sha256-8m1L98wt0uf1vnZ7z4meb/9hU+k5bqe7x7Pidf1lBGM=";
|
||||
rev = "943041c6e1e49d4a6ae267350d7818213e197bc5";
|
||||
hash = "sha256-ZTZ3IjEte3Knkm77i/C0Qq5lx8g3je6GsRlSSrWpFRQ=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-DmPUA9qRgCMqVqBNVfyQg4UZkqnZXZvokoSAqPxg0Zc=";
|
||||
|
||||
@@ -8,16 +8,16 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "dgop";
|
||||
version = "0.2.0";
|
||||
version = "0.2.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "AvengeMedia";
|
||||
repo = "dgop";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-CxTvTx7WYKj9usa1uZDUmCqS9+W0QoIeTGDlkhHLVho=";
|
||||
hash = "sha256-kYEFJvJApcgVgFu6QpSoNk2t0hv7AlmBARc5HPe/n+s=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-4GslUKwUCO8oOqylsclJmAZL/ds0plenzcTAwAXKtrc=";
|
||||
vendorHash = "sha256-OxcSnBIDwbPbsXRHDML/Yaxcc5caoKMIDVHLFXaoSsc=";
|
||||
|
||||
ldflags = [
|
||||
"-w"
|
||||
@@ -28,8 +28,6 @@ buildGoModule (finalAttrs: {
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
postInstall = ''
|
||||
mv $out/bin/{cli,dgop}
|
||||
|
||||
installShellCompletion --cmd dgop \
|
||||
--bash <($out/bin/dgop completion bash) \
|
||||
--fish <($out/bin/dgop completion fish) \
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
}:
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "di-tui";
|
||||
version = "1.13.3";
|
||||
version = "1.13.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "acaloiaro";
|
||||
repo = "di-tui";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-rT9iH9kkkWtg4H7YJUD2ElvWLUIzFHGSlH31A68pDDo=";
|
||||
hash = "sha256-0PIKPprAqGbVFiGFxwzgmS4fYKTHfpdpWWUMuxK67tQ=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-b7dG0nSjPQpjWUbOlIxWudPZWKqtq96sQaJxKvsQT9I=";
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "directx-shader-compiler";
|
||||
version = "1.9.2602";
|
||||
version = "1.10.2605.2";
|
||||
|
||||
# Put headers in dev, there are lot of them which aren't necessary for
|
||||
# using the compiler binary.
|
||||
@@ -23,7 +23,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
owner = "microsoft";
|
||||
repo = "DirectXShaderCompiler";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-S3ar1LTV/9fYU2B5y8x0ESB20lMnAx8XQw9n3G4z0nk=";
|
||||
hash = "sha256-FzfXxfhAyJw7rouWJEyeVdikG5TBM81yC+9iRg5tK3c=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
||||
@@ -28,13 +28,13 @@ buildGoModule (
|
||||
in
|
||||
{
|
||||
pname = "dms-shell";
|
||||
version = "1.4.5";
|
||||
version = "1.4.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "AvengeMedia";
|
||||
repo = "DankMaterialShell";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-K/DtFratLxaZ4+YS9G+HZA37banWacXYznmul3XPKKM=";
|
||||
hash = "sha256-g6r/Gx8PTDzO3jCNzzySA+Ff1lmLF9nDlMCNyyoQjoE=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/core";
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
|
||||
buildNpmPackage (finalAttrs: {
|
||||
pname = "dotenvx";
|
||||
version = "1.61.5";
|
||||
version = "1.64.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "dotenvx";
|
||||
repo = "dotenvx";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-yyAlEgIbPQocPnZvDbmK2MIYpglESkQGMYE7PmJDdEM=";
|
||||
hash = "sha256-Xa3xtDzvSbgba083R2g3vV8Jtv86NMEbZ/EhYxmGsKA=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-YQ3b7Fm33Mfp2l2LQ/+iYal+iBTZn5v7lUyZ2geY46A=";
|
||||
npmDepsHash = "sha256-WeqODrueKqDFvIsXHlzWhHSdqPY/uS+VM+wCp69LN9M=";
|
||||
|
||||
dontNpmBuild = true;
|
||||
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "feishu-cli";
|
||||
version = "1.21.0";
|
||||
version = "1.22.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "riba2534";
|
||||
repo = "feishu-cli";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-4+YEU0gRL3WF19a949QweVIdtXt8BWMummjK9ypBHXQ=";
|
||||
hash = "sha256-n7CqaVpuzJg5oPI7RixvDp8xSA93292yY9K8jmzd+68=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-MZv772U+3+Fcanaiuhz+OCqfIsYyCG7B4iZOnEftbi8=";
|
||||
|
||||
@@ -9,10 +9,10 @@
|
||||
}:
|
||||
|
||||
let
|
||||
version = "2.8.5";
|
||||
srcHash = "sha256-2Q6l+egcRntGjieXpXz/frGGw4GMhGXxQAUOAZfxBE4=";
|
||||
vendorHash = "sha256-D92vOyTvlpOou/1WHS6xpb4e8igZMQhm4DP7SVSLKPI=";
|
||||
manifestsHash = "sha256-X0Cf8UZufqUWKLxYVjblYNCz5IU/s+mI+h6TpTeks5k=";
|
||||
version = "2.8.6";
|
||||
srcHash = "sha256-pKP4g2pTMYtx/B/Y3ow7tvDdhCSuwbszzeLVXB0W7Bo=";
|
||||
vendorHash = "sha256-VBafft9/AuXaHWvZymy7P9gaSuO8D6IZHfK68Ixp3mI=";
|
||||
manifestsHash = "sha256-h/HR/rJwPWXiuoj9T+LajdsdT4Jo8/EuN+O1I7e9sjI=";
|
||||
|
||||
manifests = fetchzip {
|
||||
url = "https://github.com/fluxcd/flux2/releases/download/v${version}/manifests.tar.gz";
|
||||
@@ -82,6 +82,7 @@ buildGoModule rec {
|
||||
jlesquembre
|
||||
ryan4yin
|
||||
SchahinRohani
|
||||
stealthybox
|
||||
superherointj
|
||||
];
|
||||
mainProgram = "flux";
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "flyctl";
|
||||
version = "0.4.36";
|
||||
version = "0.4.42";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "superfly";
|
||||
@@ -22,11 +22,11 @@ buildGoModule rec {
|
||||
cd "$out"
|
||||
git rev-parse HEAD > COMMIT
|
||||
'';
|
||||
hash = "sha256-WMENTGVwMICIrgMbl31cEaBpznyv3+XFtAhP8AajWyo=";
|
||||
hash = "sha256-yAzd7bytBKxOBGs8ja48QPVdmJSvRfIzi8K2DoC0O+Y=";
|
||||
};
|
||||
|
||||
proxyVendor = true;
|
||||
vendorHash = "sha256-qGG+xOBe8JLt+F4iTNMEC1XTs5H/rfLtUZO7QXYAaZg=";
|
||||
vendorHash = "sha256-TUlOdRfexuxC2Of6ZHPYChCr3i1IGapLZz1/lAhnUxk=";
|
||||
|
||||
subPackages = [ "." ];
|
||||
|
||||
|
||||
@@ -126,6 +126,7 @@ buildGoModule rec {
|
||||
"TestDNSUpdate" # requires network: release.forgejo.org
|
||||
"TestMigrateWhiteBlocklist" # requires network: gitlab.com (DNS)
|
||||
"TestURLAllowedSSH/Pushmirror_URL" # requires network git.gay (DNS)
|
||||
"TestBleveDeleteIssue" # Known Flake-y https://github.com/NixOS/nixpkgs/issues/509878
|
||||
];
|
||||
in
|
||||
[ "-skip=^${builtins.concatStringsSep "$|^" skippedTests}$" ];
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import ./generic.nix {
|
||||
version = "15.0.0";
|
||||
hash = "sha256-KAGHascGFj4X6b4BpRqQ8yCedNh0nvHfQgbzJh9fxAc=";
|
||||
npmDepsHash = "sha256-AWvLcAS7EEy796kAQfiQ8sFSh/s+6zNCJEqe4qzQL3s=";
|
||||
vendorHash = "sha256-bP7cykWKwNQrWm9jJT4YYAHRV66HaTwGkvhBqSHgWAA=";
|
||||
version = "15.0.1";
|
||||
hash = "sha256-40hyQ6MPskyty/LsMVczuDpbu2q3Syoj3c00HUS+pVE=";
|
||||
npmDepsHash = "sha256-xWbnSX11RkLjtJ62qG6rD+xQAOnUuI99r9uEHakkZPY=";
|
||||
vendorHash = "sha256-JUBAcRYgflrvoAK0OvaU/Xr6/BakgaUtYwtvBF9vyk0=";
|
||||
lts = true;
|
||||
nixUpdateExtraArgs = [
|
||||
"--override-filename"
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "newt";
|
||||
version = "1.12.0";
|
||||
version = "1.12.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "fosrl";
|
||||
repo = "newt";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-csD7QcSQE4/eRw3EHX0m2nI3JjglFxXlnyuS4xpCmRY=";
|
||||
hash = "sha256-5+B1sderUwy6hJPKFRK8fV0bX2+rgHh3WmAjgQqVsR4=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-+zMSzNbqmWm/DXL2xMUd5uPP5tSIybsRokwJ2zd0pf0=";
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
}:
|
||||
python3Packages.buildPythonApplication (finalAttrs: {
|
||||
pname = "gaphor";
|
||||
version = "3.3.0";
|
||||
version = "3.3.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "gaphor";
|
||||
repo = "gaphor";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-bgcri0mgFKz4jtGJSWtlStS3f4FzYH+ZPE1BsK+S1DI=";
|
||||
hash = "sha256-oGOi1vyLOrElj/kbqHgPEyAwtVvVA3a1j9VSWMts/bM=";
|
||||
};
|
||||
|
||||
pythonRelaxDeps = [
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
}:
|
||||
python3Packages.buildPythonPackage rec {
|
||||
pname = "garmin-grafana";
|
||||
version = "0.3.0";
|
||||
version = "0.5.0";
|
||||
|
||||
pyproject = true;
|
||||
|
||||
@@ -13,7 +13,7 @@ python3Packages.buildPythonPackage rec {
|
||||
owner = "arpanghosh8453";
|
||||
repo = "garmin-grafana";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-nuVT6LK9KIs/FwUbdfI4xpKru4jfAyj1/vmk7ji43zk=";
|
||||
hash = "sha256-NrT4erpdWwqFBUumQdd5GqpmhIayszzkPd8fUgDRwXY=";
|
||||
};
|
||||
|
||||
build-system = with python3Packages; [
|
||||
|
||||
@@ -16,13 +16,13 @@ let
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "gearboy";
|
||||
version = "3.8.2";
|
||||
version = "3.8.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "drhelius";
|
||||
repo = "Gearboy";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-JgvTt/nUV2CiSJNC3NnKpoa28xAMhRxEh9txqE9FPzU=";
|
||||
hash = "sha256-3wyAwK61lusmVYbt9m10H4I4KUHAUAlC0bP9LqGB/OE=";
|
||||
};
|
||||
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "gefyra";
|
||||
version = "2.4.1";
|
||||
version = "2.4.3";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/gefyrahq/gefyra/releases/download/${finalAttrs.version}/gefyra-${finalAttrs.version}-linux-amd64.zip";
|
||||
hash = "sha256-XS+vtwb6UIJK7f3R3QLoyX9+P4n79Fh+v7odiot7Yic=";
|
||||
hash = "sha256-HWcW4JX8XglcB3OkJKdaKtZ6D9Mdg3jff0nqHOS4ESg=";
|
||||
stripRoot = false;
|
||||
};
|
||||
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
}:
|
||||
python3Packages.buildPythonApplication (finalAttrs: {
|
||||
pname = "gh-cherry-pick";
|
||||
version = "1.4.0";
|
||||
version = "1.5.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "PerchunPak";
|
||||
repo = "gh-cherry-pick";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-ec9q+3nd1zJ2K3dyWqLsdTH5GBJ4B1b8D/4Wd6d8PcA=";
|
||||
hash = "sha256-a2vhQ9upJYc+t4Juq+eukNc7dzq6MafNxDUULPZs9sQ=";
|
||||
};
|
||||
|
||||
build-system = with python3Packages; [
|
||||
@@ -25,10 +25,18 @@ python3Packages.buildPythonApplication (finalAttrs: {
|
||||
httpx
|
||||
];
|
||||
|
||||
# upstream has strict dependency pins, but it doesn't break with slightly
|
||||
# newer/older versions
|
||||
# (c) upstream maintainer
|
||||
pythonRelaxDeps = true;
|
||||
|
||||
nativeCheckInputs = with python3Packages; [
|
||||
pytestCheckHook
|
||||
faker
|
||||
pytest-asyncio
|
||||
pytest-cov-stub
|
||||
pytest-httpx
|
||||
pytest-mock
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "gh_cherry_pick" ];
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
fetchFromCodeberg,
|
||||
rustPlatform,
|
||||
}:
|
||||
|
||||
@@ -8,7 +8,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "git-gone";
|
||||
version = "1.3.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
src = fetchFromCodeberg {
|
||||
owner = "swsnr";
|
||||
repo = "git-gone";
|
||||
tag = "v${finalAttrs.version}";
|
||||
@@ -19,8 +19,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
|
||||
meta = {
|
||||
description = "Cleanup stale Git branches of merge requests";
|
||||
homepage = "https://github.com/swsnr/git-gone";
|
||||
changelog = "https://github.com/swsnr/git-gone/raw/v${finalAttrs.version}/CHANGELOG.md";
|
||||
homepage = "https://codeberg.org/swsnr/git-gone";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [
|
||||
cafkafk
|
||||
|
||||
@@ -40,7 +40,6 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
meta = {
|
||||
description = "Create `.gitignore` files using one or more templates from TopTal, GitHub or your own collection";
|
||||
homepage = "https://github.com/reemus-dev/gitnr";
|
||||
changelog = "https://github.com/reemus-dev/gitnr/blob/${finalAttrs.src.rev}/CHANGELOG.md";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [
|
||||
matthiasbeyer
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "glab";
|
||||
version = "1.92.1";
|
||||
version = "1.93.0";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "gitlab-org";
|
||||
repo = "cli";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-4DUEsh2T5rx/0u79+edMLAjTRUmXxlbA0SVH/EwoeVo=";
|
||||
hash = "sha256-ra+cXfB5DtFXmpgxSTZuXUgRY8Uzsxc84cmmAGq06AE=";
|
||||
leaveDotGit = true;
|
||||
postFetch = ''
|
||||
cd "$out"
|
||||
@@ -28,7 +28,7 @@ buildGoModule (finalAttrs: {
|
||||
'';
|
||||
};
|
||||
|
||||
vendorHash = "sha256-fnVY1WEwzuRjHXQSGLl1c7bQXxzOHFEPlb/DhntYm2U=";
|
||||
vendorHash = "sha256-FBYTwTGQ2ma4dEeCGpvduGAPux5g7MsxBHQy8QXXVgQ=";
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
|
||||
@@ -38,7 +38,7 @@ buildGoModule (finalAttrs: {
|
||||
description = "TUI log analysis tool";
|
||||
homepage = "https://gonzo.controltheory.com/";
|
||||
downloadPage = "https://github.com/control-theory/gonzo";
|
||||
changelog = "https://github.com/control-theory/gonzo/releases/tag/v${finalAttrs.src.tag}";
|
||||
changelog = "https://github.com/control-theory/gonzo/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ kpbaks ];
|
||||
mainProgram = "gonzo";
|
||||
|
||||
@@ -184,11 +184,11 @@ let
|
||||
|
||||
linux = stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
inherit pname meta passthru;
|
||||
version = "147.0.7727.116";
|
||||
version = "147.0.7727.137";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${finalAttrs.version}-1_amd64.deb";
|
||||
hash = "sha256-f4lIdknIXTTv3yxvs754n6/a01h5xxWWOvnjwQcIPnw=";
|
||||
hash = "sha256-2QKA8nk+O10cGr0gGOMSlLkxpO+WHFG1yul9a3VGq64=";
|
||||
};
|
||||
|
||||
# With strictDeps on, some shebangs were not being patched correctly
|
||||
@@ -302,11 +302,11 @@ let
|
||||
|
||||
darwin = stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
inherit pname meta passthru;
|
||||
version = "147.0.7727.117";
|
||||
version = "147.0.7727.138";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://dl.google.com/release2/chrome/hlfggraqploqe3bea7acbi5wei_147.0.7727.117/GoogleChrome-147.0.7727.117.dmg";
|
||||
hash = "sha256-GCdZAiqNSDcC6qgsJGS5renRrl3kLoH4X9VHX7aLXTw=";
|
||||
url = "http://dl.google.com/release2/chrome/ackheqvxll25dzx6s76qfgpa4oxa_147.0.7727.138/GoogleChrome-147.0.7727.138.dmg";
|
||||
hash = "sha256-1WOkBxAs79ByJ3quXgh+ZR64ysIE2/2wMeIhl3sYh5o=";
|
||||
};
|
||||
|
||||
dontPatch = true;
|
||||
|
||||
@@ -1,28 +1,39 @@
|
||||
{
|
||||
lib,
|
||||
rustPlatform,
|
||||
fetchFromGitHub,
|
||||
rustPlatform,
|
||||
nixosTests,
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage {
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "grafana-to-ntfy";
|
||||
version = "0-unstable-2025-01-25";
|
||||
version = "2026.4.29";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kittyandrew";
|
||||
repo = "grafana-to-ntfy";
|
||||
rev = "64d11f553776bbf7695d9febd74da1bad659352d";
|
||||
hash = "sha256-GO9VE9wymRk+QKGFyDpd0wS9GCY3pjpFUe37KIcnKxc=";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-ac0T8SNCDH9kQTKIfYn9KinnrSCYIBpNByO6NQ8UntA=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-w4HSxdihElPz0q05vWjajQ9arZjAzd82L0kEKk1Uk8s=";
|
||||
cargoHash = "sha256-RuWXlofcruR69sg+RO2v1DBgxaPEyu8TeZEiZP7rBV8=";
|
||||
|
||||
# No unit tests; all testing is NixOS VM-based integration tests
|
||||
doCheck = false;
|
||||
|
||||
passthru = {
|
||||
tests.grafana-to-ntfy = nixosTests.grafana-to-ntfy;
|
||||
updateScript = nix-update-script { };
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Bridge to forward Grafana alerts to ntfy.sh notification service";
|
||||
description = "Bridge to forward Grafana and Prometheus Alertmanager alerts to ntfy.sh";
|
||||
homepage = "https://github.com/kittyandrew/grafana-to-ntfy";
|
||||
changelog = "https://github.com/kittyandrew/grafana-to-ntfy/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.agpl3Only;
|
||||
platforms = lib.platforms.linux;
|
||||
maintainers = [ ];
|
||||
maintainers = with lib.maintainers; [ kittyandrew ];
|
||||
mainProgram = "grafana-to-ntfy";
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -34,6 +34,10 @@ let
|
||||
tag = "20200910";
|
||||
hash = "sha256-YQl5IDtodcbTV3D6vtJi7CwxVtHHl58fG6qCAoSaP4U=";
|
||||
};
|
||||
nativeGroffBinPath = lib.makeBinPath [
|
||||
buildPackages.groff
|
||||
(lib.getOutput "perl" buildPackages.groff)
|
||||
];
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "groff";
|
||||
@@ -125,13 +129,18 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
# Move mom docs instead of linking them to avoid dangling symlinks
|
||||
substituteInPlace Makefile \
|
||||
--replace-fail '$(LN_S) $(exampledir)' 'mv $(exampledir)'
|
||||
''
|
||||
+ lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
|
||||
# pdfmom uses GROFF_COMMAND to find the groff executable internally.
|
||||
substituteInPlace Makefile \
|
||||
--replace-fail 'GROFF_COMMAND=test-groff \' 'GROFF_COMMAND=$(GROFFBIN) \'
|
||||
'';
|
||||
|
||||
makeFlags = lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
|
||||
# Trick to get the build system find the proper 'native' groff
|
||||
# http://www.mail-archive.com/bug-groff@gnu.org/msg01335.html
|
||||
"GROFF_BIN_PATH=${lib.getBin buildPackages.groff}/bin"
|
||||
"GROFFBIN=${lib.getExe buildPackages.groff}"
|
||||
"GROFF_BIN_PATH=${nativeGroffBinPath}"
|
||||
"GROFFBIN=${lib.getExe' buildPackages.groff "groff"}"
|
||||
];
|
||||
|
||||
doCheck = true;
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
grub2,
|
||||
...
|
||||
}@args:
|
||||
|
||||
grub2.override (
|
||||
{
|
||||
efiSupport = true;
|
||||
}
|
||||
// removeAttrs args [ "grub2" ]
|
||||
)
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
grub2,
|
||||
...
|
||||
}@args:
|
||||
|
||||
grub2.override (
|
||||
{
|
||||
ieee1275Support = true;
|
||||
}
|
||||
// removeAttrs args [ "grub2" ]
|
||||
)
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
grub2,
|
||||
...
|
||||
}@args:
|
||||
|
||||
grub2.override (
|
||||
{
|
||||
zfsSupport = false;
|
||||
}
|
||||
// removeAttrs args [ "grub2" ]
|
||||
)
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
grub2_pvhgrub_image,
|
||||
...
|
||||
}@args:
|
||||
|
||||
grub2_pvhgrub_image.override (
|
||||
{
|
||||
grubPlatform = "xen";
|
||||
}
|
||||
// removeAttrs args [ "grub2_pvhgrub_image" ]
|
||||
)
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
grub2,
|
||||
...
|
||||
}@args:
|
||||
|
||||
grub2.override (
|
||||
{
|
||||
xenSupport = true;
|
||||
}
|
||||
// removeAttrs args [ "grub2" ]
|
||||
)
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
grub2,
|
||||
...
|
||||
}@args:
|
||||
|
||||
grub2.override (
|
||||
{
|
||||
xenPvhSupport = true;
|
||||
}
|
||||
// removeAttrs args [ "grub2" ]
|
||||
)
|
||||
@@ -7,27 +7,28 @@
|
||||
|
||||
python3Packages.buildPythonApplication (finalAttrs: {
|
||||
pname = "ha-mcp";
|
||||
version = "6.7.1";
|
||||
version = "7.3.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "homeassistant-ai";
|
||||
repo = "ha-mcp";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-CQbjPEtCos0Fi6aAaIWSRMCUQKmjYviYkvJZzbCZg6Y=";
|
||||
hash = "sha256-boWqv8lSN/UiqSRhVBgbucX+RC6q14Oa4WzkJPeZzVw=";
|
||||
};
|
||||
|
||||
build-system = with python3Packages; [
|
||||
setuptools
|
||||
];
|
||||
|
||||
pythonRelaxDeps = true;
|
||||
|
||||
dependencies =
|
||||
with python3Packages;
|
||||
[
|
||||
cryptography
|
||||
fastmcp
|
||||
httpx
|
||||
jq
|
||||
pydantic
|
||||
python-dotenv
|
||||
truststore
|
||||
@@ -39,7 +40,10 @@ python3Packages.buildPythonApplication (finalAttrs: {
|
||||
doCheck = false;
|
||||
|
||||
passthru.updateScript = nix-update-script {
|
||||
extraArgs = [ "--version-regex=^v([0-9]+\\.[0-9]+\\.[0-9]+)$" ];
|
||||
extraArgs = [
|
||||
"--use-github-releases"
|
||||
"--version-regex=^v([0-9]+\\.[0-9]+\\.[0-9]+)$"
|
||||
];
|
||||
};
|
||||
|
||||
pythonImportsCheck = [ "ha_mcp" ];
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "halo";
|
||||
version = "2.23.1";
|
||||
version = "2.24.0";
|
||||
src = fetchurl {
|
||||
url = "https://github.com/halo-dev/halo/releases/download/v${finalAttrs.version}/halo-${finalAttrs.version}.jar";
|
||||
hash = "sha256-oU3MdmHnpf0TOwdEJb8UD2LIqEJ2BQ0puMIs1BBmA2M=";
|
||||
hash = "sha256-71br2gG8vl3EyvC+AYzqJOtgHnhdEmcRAjXSXXXqI5s=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -51,7 +51,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
meta = {
|
||||
description = "Matrix bot which can generate \"This Week in X\" like blog posts ";
|
||||
homepage = "https://github.com/haecker-felix/hebbot";
|
||||
changelog = "https://github.com/haecker-felix/hebbot/releases/tag/v${finalAttrs.version}";
|
||||
changelog = "https://github.com/haecker-felix/hebbot/releases/tag/v2.1";
|
||||
license = with lib.licenses; [ agpl3Only ];
|
||||
mainProgram = "hebbot";
|
||||
maintainers = with lib.maintainers; [ a-kenji ];
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
}:
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "hysteria";
|
||||
version = "2.8.1";
|
||||
version = "2.8.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "apernet";
|
||||
repo = "hysteria";
|
||||
rev = "app/v${finalAttrs.version}";
|
||||
hash = "sha256-KxCf9btvEbwP+oWL6A6rWpQsRJPifohFLDIdr+0XwzM=";
|
||||
hash = "sha256-HgZVwaHL5q8aOxHhVt6RaHaBxoj83ujHaqLemQkLRUM=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-NXBxrKptXTZzEXZ5hYHtC3wbFIYgL9avJay6DJHRMLU=";
|
||||
vendorHash = "sha256-oHxnawchsHU/M1PZ0zXR5luopso1FptXi+PL5pNgdj0=";
|
||||
proxyVendor = true;
|
||||
|
||||
ldflags =
|
||||
|
||||
@@ -51,7 +51,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
|
||||
meta = {
|
||||
description = "Run pre-commit.com before `jj git push`";
|
||||
homepage = "https://github.com/acarapetis/jj-pre-push";
|
||||
changelog = "https://github.com/acarapetis/jj-pre-push/releases/tag/v${finalAttrs.src.tag}";
|
||||
changelog = "https://github.com/acarapetis/jj-pre-push/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ xanderio ];
|
||||
mainProgram = "jj-pre-push";
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
lib,
|
||||
buildGoModule,
|
||||
fetchFromGitHub,
|
||||
makeWrapper,
|
||||
prettier,
|
||||
bun,
|
||||
nodejs,
|
||||
}:
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "jxscout";
|
||||
version = "0.9.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "francisconeves97";
|
||||
repo = "jxscout";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-DvvhcnjBHRHUEW5mWHLa7ufC+7yzYwKKOV79Syk5zME=";
|
||||
};
|
||||
|
||||
subPackages = [ "cmd/jxscout" ];
|
||||
|
||||
vendorHash = null;
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
doCheck = true;
|
||||
|
||||
postInstall = ''
|
||||
wrapProgram $out/bin/jxscout --prefix PATH : ${
|
||||
lib.makeBinPath [
|
||||
prettier
|
||||
bun
|
||||
nodejs
|
||||
]
|
||||
}
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "jxscout superpowers JavaScript analysis for security researchers (free version)";
|
||||
homepage = "https://jxscout.app/";
|
||||
downloadPage = "https://github.com/francisconeves97/jxscout";
|
||||
changelog = "https://github.com/francisconeves97/jxscout/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
mainProgram = "jxscout";
|
||||
maintainers = with lib.maintainers; [ katok ];
|
||||
platforms = lib.platforms.linux ++ lib.platforms.darwin ++ lib.platforms.windows;
|
||||
};
|
||||
})
|
||||
@@ -36,11 +36,11 @@ let
|
||||
# TODO: we could cut the `let` short here, but it would de-indent everything.
|
||||
unwrapped = stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "knot-resolver_6";
|
||||
version = "6.2.0";
|
||||
version = "6.3.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://secure.nic.cz/files/knot-resolver/knot-resolver-${finalAttrs.version}.tar.xz";
|
||||
hash = "sha256-tEYzvIQxgMC8fHfPexX+VxJDrpkrTdt0r97kz6gDcBs=";
|
||||
hash = "sha256-uHMGGX90NrSQecYzNkvF33GjkyNvsl6fzn0ESAvHUY4=";
|
||||
};
|
||||
|
||||
outputs = [
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
clinfo,
|
||||
gdk-pixbuf,
|
||||
gtk4,
|
||||
libadwaita,
|
||||
libdrm,
|
||||
ocl-icd,
|
||||
vulkan-loader,
|
||||
@@ -24,16 +25,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "lact";
|
||||
version = "0.8.4";
|
||||
version = "0.9.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ilya-zlobintsev";
|
||||
repo = "LACT";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-5z4IAiApUjlsSL0EX1PQH6rceeQxAD8f3CKmYO2x8gQ=";
|
||||
hash = "sha256-c5GJf8AYgaAN3O6AVSEbJybEYb6lSHf7R24/1PKYhyM=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-mCmAj9yLei0ZNtsBh+YeVlCmbHyT69LIHFnwbAk+Ido=";
|
||||
cargoHash = "sha256-Y+XdCmaDXdP7x22bYm//Ov7+IzlCr8GpFOgCXGFCfbA=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
@@ -45,6 +46,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
buildInputs = [
|
||||
gdk-pixbuf
|
||||
gtk4
|
||||
libadwaita
|
||||
libdrm
|
||||
ocl-icd
|
||||
vulkan-loader
|
||||
|
||||
@@ -30,7 +30,7 @@ buildGoModule rec {
|
||||
meta = {
|
||||
description = "Tool to detect and remediate misconfigurations and security risks of GitHub assets";
|
||||
homepage = "https://github.com/Legit-Labs/legitify";
|
||||
changelog = "https://github.com/Legit-Labs/legitify/releases/tag/v${src.tag}";
|
||||
changelog = "https://github.com/Legit-Labs/legitify/releases/tag/${src.tag}";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "legitify";
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
|
||||
stdenvNoCC.mkDerivation {
|
||||
pname = "libretro-shaders-slang";
|
||||
version = "0-unstable-2026-04-17";
|
||||
version = "0-unstable-2026-04-26";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "slang-shaders";
|
||||
rev = "12b0869495c1ea8238b53179ec33888205f6800f";
|
||||
hash = "sha256-9b/c+DCmy61Wsy70MU5efNhPKQa5C03P1eZZPwJDNvA=";
|
||||
rev = "cc71b5eff24a962bd055a92d2032f806635fdf97";
|
||||
hash = "sha256-PeG6H5XArKdptbSicMgXPFtnrkglmkwZieGKSr0aPaQ=";
|
||||
};
|
||||
|
||||
dontConfigure = true;
|
||||
|
||||
@@ -10,16 +10,16 @@
|
||||
|
||||
buildNpmPackage (finalAttrs: {
|
||||
pname = "liteparse";
|
||||
version = "1.4.6";
|
||||
version = "1.5.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "run-llama";
|
||||
repo = "liteparse";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-GUtqJsmAOrbxLc/aAIre95QD6aaFsj5ClqZfo7jdwB4=";
|
||||
hash = "sha256-e3c8ak4kww8vQDfYT8S9m7Tv7vnBiox2qaI73yUb23U=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-Wz46n7BbubC3Cq1CHOHM2q/dVOvOVNQTloHZfkAwzpg=";
|
||||
npmDepsHash = "sha256-KhtwPl1J9ZZMT9xT5bQJjPa3fYTvi9oRnxijCm0o+2c=";
|
||||
npmBuildScript = "build";
|
||||
|
||||
nativeBuildInputs = [ makeBinaryWrapper ];
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user