Merge 3ab9d06032 into haskell-updates

This commit is contained in:
nixpkgs-ci[bot] 2026-05-26 00:48:54 +00:00 committed by GitHub
commit f1cd3a542b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
344 changed files with 10350 additions and 1491 deletions

View file

@ -48,6 +48,7 @@ unzip.section.md
validatePkgConfig.section.md
versionCheckHook.section.md
waf.section.md
writable-tmpdir-as-home-hook.section.md
zig.section.md
xcbuild.section.md
xfce4-dev-tools.section.md

View file

@ -0,0 +1,5 @@
# writableTmpDirAsHomeHook {#writableTmpDirAsHomeHook}
This setup hook provides a writable home directory for packages that require it.
To use, just add the hook to the `nativeBuildInputs` of the package.

View file

@ -1040,6 +1040,9 @@
"tar-files": [
"index.html#tar-files"
],
"writableTmpDirAsHomeHook": [
"index.html#writableTmpDirAsHomeHook"
],
"x86_64-darwin-26.05": [
"release-notes.html#x86_64-darwin-26.05"
],

View file

@ -1598,6 +1598,28 @@ let
inherit priority content;
};
/**
Applies a function to the value inside a definition,
preserving all surrounding properties (`mkForce`, `mkOrder`, `mkIf`, etc.).
*/
mapDefinitionValue =
f: def:
if def ? _type then
if def._type == "merge" then
def // { contents = map (mapDefinitionValue f) def.contents; }
else if def._type == "if" then
def // { content = mapDefinitionValue f def.content; }
else if def._type == "override" then
def // { content = mapDefinitionValue f def.content; }
else if def._type == "order" then
def // { content = mapDefinitionValue f def.content; }
else if def._type == "definition" then
def // { value = mapDefinitionValue f def.value; }
else
f def
else
f def;
mkBefore = mkOrder 500;
defaultOrderPriority = 1000;
mkAfter = mkOrder 1500;
@ -2302,6 +2324,7 @@ private
importApply
importJSON
importTOML
mapDefinitionValue
mergeDefinitions
mergeAttrDefinitionsWithPrio
mergeOptionDecls # should be private?

View file

@ -5114,4 +5114,96 @@ runTests {
);
expected = false;
};
# mapDefinitionValue
testMapDefinitionValuePlain = {
expr = lib.modules.mapDefinitionValue (x: x + 1) 5;
expected = 6;
};
testMapDefinitionValueMkForce = {
expr = lib.modules.mapDefinitionValue (x: x + 1) (lib.mkForce 5);
expected = lib.mkForce 6;
};
testMapDefinitionValueMkDefault = {
expr = lib.modules.mapDefinitionValue (x: x + 1) (lib.mkDefault 5);
expected = lib.mkDefault 6;
};
testMapDefinitionValueMkOrder = {
expr = lib.modules.mapDefinitionValue (x: x + 1) (lib.mkOrder 500 5);
expected = lib.mkOrder 500 6;
};
testMapDefinitionValueMkOverrideNested = {
expr = lib.modules.mapDefinitionValue (x: x + 1) (lib.mkForce (lib.mkOrder 500 5));
expected = lib.mkForce (lib.mkOrder 500 6);
};
testMapDefinitionValueMkIf = {
expr = lib.modules.mapDefinitionValue (x: x + 1) (lib.mkIf true 5);
expected = lib.mkIf true 6;
};
testMapDefinitionValueMkMerge = {
expr = lib.modules.mapDefinitionValue (x: x + 1) (
lib.mkMerge [
5
10
]
);
expected = lib.mkMerge [
6
11
];
};
testMapDefinitionValueMkDefinition = {
expr = lib.modules.mapDefinitionValue (x: x + 1) (
lib.mkDefinition {
file = "test";
value = 5;
}
);
expected = lib.mkDefinition {
file = "test";
value = 6;
};
};
testMapDefinitionValueDeep = {
expr = lib.modules.mapDefinitionValue (x: x + 1) (lib.mkIf true (lib.mkForce (lib.mkOrder 500 5)));
expected = lib.mkIf true (lib.mkForce (lib.mkOrder 500 6));
};
testMapDefinitionValueAllNested = {
expr = lib.modules.mapDefinitionValue (x: x + 1) (
lib.mkMerge [
(lib.mkIf true (
lib.mkForce (
lib.mkOrder 500 (
lib.mkDefinition {
file = "test";
value = lib.mkBefore 5;
}
)
)
))
]
);
expected = lib.mkMerge [
(lib.mkIf true (
lib.mkForce (
lib.mkOrder 500 (
lib.mkDefinition {
file = "test";
value = lib.mkBefore 6;
}
)
)
))
];
};
}

View file

@ -899,6 +899,19 @@ checkConfigError 'Did you mean .enable., .ebe. or .enabled.\?' config ./error-ty
checkConfigError 'Did you mean .services\.myservice\.port. or .services\.myservice\.enable.\?' config.services.myservice ./error-typo-submodule.nix
checkConfigError 'Did you mean .services\.nginx\.virtualHosts\."example\.com"\.ssl\.certificate. or .services\.nginx\.virtualHosts\."example\.com"\.ssl\.certificateKey.\?' config.services.nginx.virtualHosts.\"example.com\" ./error-typo-deeply-nested.nix
# types.attrListOf
checkConfigOutput '"ok"' config.assertions ./declare-attrList.nix
checkConfigError 'A definition for option .attrListInt.badValue.a. is not of type .signed integer.. Definition values:' config.attrListIntStrict.badValue ./declare-attrList.nix
checkConfigError 'A definition for option .attrList.badListElem. is not of type .attribute list of string.. Each list element must be a single-key attribute set, but got 2 keys' config.attrListStrict.badListElem ./declare-attrList.nix
checkConfigError 'A definition for option .attrList.badString. is not of type .attribute list of string.. TypeError: Definition values:' config.attrListStrict.badString ./declare-attrList.nix
checkConfigError 'A definition for option .attrList.badListString. is not of type .attribute list of string.. Each list element must be an attribute set, but got string' config.attrListStrict.badListString ./declare-attrList.nix
# attrListWith valueMeta.definitions: file propagation
checkConfigError 'the-defs-file\.nix' config.argv ./attrList-valueMeta-definitions-file-diagnostic-forwarding.nix
# attrListOf does not support type merging
checkConfigError 'The option .merged. in .*/declare-attrList-type-merge.nix. is already declared in .*/declare-attrList-type-merge.nix' config.merged ./declare-attrList-type-merge.nix
cat <<EOF
====== module tests ======
$pass Pass

View file

@ -0,0 +1,25 @@
{ lib, options, ... }:
let
inherit (lib) mkOption mkMerge types;
in
{
imports = [
{
_file = "the-defs-file.nix";
config.flags.my-flag = 3.14;
}
];
options.flags = mkOption {
type = types.attrListWith {
elemType = types.anything;
asAttrs = true;
mergeAttrValues = _name: vs: lib.head vs;
};
};
options.argv = mkOption { type = types.listOf types.str; };
# Feed definitions into argv; the float from the-defs-file.nix should cause
# a type error mentioning that file
config.argv = mkMerge options.flags.valueMeta.definitions;
}

View file

@ -0,0 +1,12 @@
# Test that attrListOf does not support type merging:
# two declarations of the same option should fail.
{ lib, ... }:
let
inherit (lib) mkOption types;
in
{
imports = [
{ options.merged = mkOption { type = types.attrListOf types.str; }; }
{ options.merged = mkOption { type = types.attrListOf types.str; }; }
];
}

View file

@ -0,0 +1,925 @@
# Run with:
# cd nixpkgs
# ./lib/tests/modules.sh
{ lib, config, ... }:
let
inherit (lib)
mkOption
mkOrder
mkMerge
mkBefore
mkAfter
mkIf
mkOverride
mkDefault
mkForce
types
;
in
{
options = {
attrList = mkOption {
type = types.lazyAttrsOf (types.attrListOf types.str);
};
attrListInt = mkOption {
type = types.lazyAttrsOf (types.attrListOf types.int);
};
attrListSubmodule = mkOption {
type = types.attrListOf (
types.submodule {
options.port = mkOption {
type = types.int;
description = "Port number";
};
options.host = mkOption {
type = types.str;
default = "localhost";
description = "Hostname";
};
}
);
};
# asAttrs: value is a merged attrset, ordered list in valueMeta
asAttrs = mkOption {
type = types.lazyAttrsOf (
types.attrListWith {
elemType = types.str;
asAttrs = true;
mergeAttrValues = _name: values: lib.last values;
}
);
};
# asAttrs with default mergeAttrValues: duplicates collected into lists
asAttrsDefault = mkOption {
type = types.lazyAttrsOf (
types.attrListWith {
elemType = types.int;
asAttrs = true;
}
);
};
# Strict wrappers that force deep evaluation, for testing error cases
attrListStrict = mkOption {
type = types.lazyAttrsOf types.raw;
};
attrListIntStrict = mkOption {
type = types.lazyAttrsOf types.raw;
};
# either picks attrList when input is list/attrset, int when input is int
eitherAttrListOrInt = mkOption {
type = types.either (types.attrListOf types.str) types.int;
};
eitherAttrListOrIntFallback = mkOption {
type = types.either (types.attrListOf types.str) types.int;
};
eitherIntOrAttrList = mkOption {
type = types.either types.int (types.attrListOf types.str);
};
eitherIntOrAttrListFallback = mkOption {
type = types.either types.int (types.attrListOf types.str);
};
assertions = mkOption { };
};
imports = [
# Second module contributing to multiModule
{
attrListInt.multiModule = [
{ b = 2; }
];
}
];
config = {
# List input: pass-through
attrList.listInput = [
{ a = "alpha"; }
{ b = "beta"; }
];
# Attrset input with explicit ordering
attrList.attrsetOrdered = {
x = mkOrder 200 "x-val";
y = mkOrder 100 "y-val";
};
# Mixed: list elements at default priority, attrset with mkOrder
attrList.mixed = mkMerge [
[
{ m = "from-list"; }
]
{
n = mkOrder 50 "from-attrset";
}
];
# Multiple list definitions from separate modules
attrListInt.multiModule = [
{ a = 1; }
];
# Attrset without mkOrder uses default priority
attrList.attrsetNoOrder = {
foo = "bar";
baz = "qux";
};
# Empty list
attrList.empty = [ ];
# Ordering test: lower priority first
attrList.ordering = mkMerge [
{
last = mkOrder 1500 "last";
}
{
first = mkOrder 500 "first";
}
[
{ middle = "middle"; }
]
];
# List elements support mkOrder/mkBefore/mkAfter
attrList.listOrdering = [
(mkAfter { z = "after"; })
{ m = "default"; }
(mkBefore { a = "before"; })
];
# Plain list entries land at default priority (1000):
# they appear after mkOrder 999 and before mkOrder 1001.
attrList.listDefaultPrio = mkMerge [
{ after = mkOrder 1001 "after"; }
[
{ mid = "list-entry"; }
]
{ before = mkOrder 999 "before"; }
];
# mkBefore and mkAfter
attrList.beforeAfter = mkMerge [
{
z = mkAfter "after";
}
{
a = mkBefore "before";
}
[
{ m = "default"; }
]
];
# mkIf: conditional definition
attrList.withMkIf = mkMerge [
(mkIf true [
{ yes = "included"; }
])
(mkIf false [
{ no = "excluded"; }
])
];
# mkOverride: higher priority override wins
attrList.withOverride = mkMerge [
(mkOverride 100 [
{ replaced = "gone"; }
])
(mkOverride 50 [
{ winner = "wins"; }
])
];
# mkDefault: lower priority than normal
attrList.withDefault = mkMerge [
(mkDefault [
{ default = "overridden"; }
])
[
{ normal = "wins"; }
]
];
# mkForce on the whole option (should discard other defs)
attrList.withForce = mkMerge [
[
{ discarded = "gone"; }
]
(mkForce [
{ forced = "wins"; }
])
];
# mkForce with mkOrder inside
attrList.forceWithOrder = mkForce [
(mkAfter { second = "after"; })
(mkBefore { first = "before"; })
];
# mkForce on individual element values; non-forced entries are discarded.
# Discarded values use a mix of: plain value, mkDefault(abort ...), mkOverride 100 (abort ...).
# The abort variants verify laziness: peelProperties sees the wrapper without forcing the content.
attrListInt.forceElementValue = [
{ a = mkDefault (abort "overridden by mkForce; laziness guarantee: MUST NOT be evaluated"); }
{ a = mkForce 42; }
{ a = mkOverride 100 (abort "overridden by mkForce; laziness guarantee: MUST NOT be evaluated"); }
{ b = 2; }
];
# mkForce on attrset format
attrList.forceAttrset = mkMerge [
[
{ discarded = "gone"; }
]
(mkForce {
x = mkOrder 200 "x-val";
y = mkOrder 100 "y-val";
})
];
# mkForce on repeated key: forced entries override non-forced
attrList.forceRepeatedKey = [
{ x = mkOverride 100 (abort "overridden by mkForce; laziness guarantee: MUST NOT be evaluated"); }
{ x = mkForce "wins"; }
{ x = mkForce "wins 2"; }
];
# mkForce on repeated key across mkMerge
attrList.forceRepeatedKeyMerge = mkMerge [
[
{ x = "unused: overridden by mkForce"; }
{ x = mkDefault (abort "overridden by mkForce; laziness guarantee: MUST NOT be evaluated"); }
]
[
{ x = mkOverride 100 (abort "overridden by mkForce; laziness guarantee: MUST NOT be evaluated"); }
]
[
{ x = mkForce "forced"; }
]
];
# mkForce on repeated key in attrset format across mkMerge
attrList.forceRepeatedKeyAttrs = mkMerge [
{
x = mkDefault (abort "overridden by mkForce; laziness guarantee: MUST NOT be evaluated");
y = "kept";
}
{ x = mkForce "forced"; }
];
# mkForce only affects the key it's on, other keys survive
attrList.forcePartialAttrs = mkMerge [
{
x = "unused: overridden by mkForce";
y = "normal y";
}
{ x = mkForce "forced x"; }
];
# mkForce in attrset format overrides same key from list format
attrList.forceMixedFormats = mkMerge [
[
{ x = mkOverride 100 (abort "overridden by mkForce; laziness guarantee: MUST NOT be evaluated"); }
{ y = "list y"; }
]
{ x = mkForce "attrset forced x"; }
];
# Nesting: list format, mkOrder on element + mkForce on value
attrList.nestListOrderForce = mkMerge [
[
{ x = mkDefault (abort "overridden by mkForce; laziness guarantee: MUST NOT be evaluated"); }
(mkOrder 500 { x = mkForce "forced-early"; })
(mkOrder 1500 { y = "late"; })
]
[
(mkOrder 100 { z = "earliest"; })
]
];
# Nesting: list format, mkOrder(mkForce(val)) on value
attrList.nestListOrderOfForce = mkMerge [
[
{ x = mkOverride 100 (abort "overridden by mkForce; laziness guarantee: MUST NOT be evaluated"); }
{ y = "plain-early"; }
]
[
{ x = mkOrder 1500 (mkForce "forced-late"); }
{ z = mkOrder 500 "earliest"; }
]
[
{ x = "unused: overridden by mkForce"; }
{ w = mkOrder 1200 "mid"; }
]
];
# Nesting: list format, mkForce(mkOrder(val)) on value
attrList.nestListForceOfOrder = mkMerge [
[
{ x = "unused: overridden by mkForce"; }
{ y = "plain-early"; }
]
[
{ x = mkForce (mkOrder 1500 "forced-late"); }
{ z = mkOrder 500 "earliest"; }
]
[
{ x = mkDefault (abort "overridden by mkForce; laziness guarantee: MUST NOT be evaluated"); }
{ w = mkOrder 1200 "mid"; }
]
];
# Nesting: attrset format, mkOrder wrapping mkForce
attrList.nestAttrsOrderOfForce = mkMerge [
{
x = mkOverride 100 (abort "overridden by mkForce; laziness guarantee: MUST NOT be evaluated");
y = "plain-early";
}
{
x = mkOrder 1500 (mkForce "forced-late");
z = mkOrder 500 "earliest";
}
{
x = "unused: overridden by mkForce";
w = mkOrder 1200 "mid";
}
];
# Nesting: attrset format, mkForce wrapping mkOrder
attrList.nestAttrsForceOfOrder = mkMerge [
{
x = "unused: overridden by mkForce";
y = "plain-early";
}
{
x = mkForce (mkOrder 1500 "forced-late");
z = mkOrder 500 "earliest";
}
{
x = mkDefault (abort "overridden by mkForce; laziness guarantee: MUST NOT be evaluated");
w = mkOrder 1200 "mid";
}
];
# mkIf false on individual element value filters it out (list format)
attrListInt.optionalValueList = [
{ a = mkIf true 1; }
{ b = mkIf false 2; }
{ c = 3; }
];
# mkIf false on individual element value filters it out (attrset format)
attrListInt.optionalValueAttrs = {
a = mkIf true 1;
b = mkIf false 2;
c = 3;
};
# submodule elemType: produces real valueMeta
attrListSubmodule = [
{
web = {
port = 80;
};
}
{
db = {
port = 5432;
host = "dbhost";
};
}
];
# asAttrs: unique keys — value is a plain attrset
asAttrs.unique = [
{ a = "alpha"; }
{ b = "beta"; }
];
# asAttrs: duplicate keys — last in order wins
asAttrs.duplicateKeys = mkMerge [
{ x = mkOrder 500 "first"; }
{ x = mkOrder 1500 "last"; }
{ y = "only"; }
];
# asAttrs: with ordering — value is attrset, ordered list in valueMeta
asAttrs.ordered = {
z = mkOrder 200 "z-val";
a = mkOrder 100 "a-val";
};
# asAttrs: with mkForce — forced key overrides
asAttrs.withForce = mkMerge [
{ x = "unused: overridden by mkForce"; }
{
x = mkForce "forced";
y = "kept";
}
];
# asAttrs: empty
asAttrs.empty = [ ];
# asAttrsDefault: unique keys
asAttrsDefault.unique = [
{ a = 1; }
{ b = 2; }
];
# asAttrsDefault: duplicate keys — default collects into lists
asAttrsDefault.duplicates = mkMerge [
{ x = mkOrder 500 10; }
{ x = mkOrder 1500 30; }
{ y = 99; }
[
{ x = 20; }
]
];
# either: attrList branch matches for list input
eitherAttrListOrInt = [
{ a = "hello"; }
{ b = "world"; }
];
# either: int input falls through to int branch
eitherAttrListOrIntFallback = 42;
# either (swapped): int first, attrList second — int input matches int
eitherIntOrAttrList = 42;
# either (swapped): list input falls through to attrList branch
eitherIntOrAttrListFallback = [
{ a = "hello"; }
];
# Bad: string where int expected
attrListInt.badValue = [
{ a = "not-an-int"; }
];
# Bad: list element with multiple keys
attrList.badListElem = [
{
a = "ok";
b = "extra";
}
];
# Bad: plain string instead of list or attrset
attrList.badString = "not-a-container";
# Bad: list element is a bare string, not a singleton attrset
attrList.badListString = [
"not a singleton attribute"
];
attrListStrict = builtins.mapAttrs (k: v: builtins.deepSeq v v) config.attrList;
attrListIntStrict = builtins.mapAttrs (k: v: builtins.deepSeq v v) config.attrListInt;
assertions =
let
c = lib.evalModules {
modules = [ ./declare-attrList.nix ];
};
cfg = c.config;
in
# List input preserves elements
assert
cfg.attrList.listInput == [
{ a = "alpha"; }
{ b = "beta"; }
];
# Attrset input with mkOrder: lower priority comes first
assert
cfg.attrList.attrsetOrdered == [
{ y = "y-val"; }
{ x = "x-val"; }
];
# Mixed input: mkOrder 50 < default 1000
assert
cfg.attrList.mixed == [
{ n = "from-attrset"; }
{ m = "from-list"; }
];
# Multiple definitions from separate modules concatenate
# (import module's definition comes before this module's)
assert
cfg.attrListInt.multiModule == [
{ b = 2; }
{ a = 1; }
];
# Attrset without mkOrder: all at default priority
assert builtins.length cfg.attrList.attrsetNoOrder == 2;
# Empty list stays empty
assert cfg.attrList.empty == [ ];
# List elements support mkOrder/mkBefore/mkAfter
assert
cfg.attrList.listOrdering == [
{ a = "before"; }
{ m = "default"; }
{ z = "after"; }
];
# Plain list entries are at default priority (1000)
assert
cfg.attrList.listDefaultPrio == [
{ before = "before"; }
{ mid = "list-entry"; }
{ after = "after"; }
];
# Ordering: 500 < 1000 (default) < 1500
assert
cfg.attrList.ordering == [
{ first = "first"; }
{ middle = "middle"; }
{ last = "last"; }
];
# mkBefore (500) < default (1000) < mkAfter (1500)
assert
cfg.attrList.beforeAfter == [
{ a = "before"; }
{ m = "default"; }
{ z = "after"; }
];
# mkIf true includes, mkIf false excludes
assert
cfg.attrList.withMkIf == [
{ yes = "included"; }
];
# mkOverride: only lowest priority override survives
assert
cfg.attrList.withOverride == [
{ winner = "wins"; }
];
# mkDefault is overridden by normal definitions
assert
cfg.attrList.withDefault == [
{ normal = "wins"; }
];
# mkForce discards other definitions
assert
cfg.attrList.withForce == [
{ forced = "wins"; }
];
# mkForce with mkOrder inside: ordering still works
assert
cfg.attrList.forceWithOrder == [
{ first = "before"; }
{ second = "after"; }
];
# mkForce on individual element values passes through
assert
cfg.attrListInt.forceElementValue == [
{ a = 42; }
{ b = 2; }
];
# mkForce on attrset format: discards other defs, ordering preserved
assert
cfg.attrList.forceAttrset == [
{ y = "y-val"; }
{ x = "x-val"; }
];
# mkForce on repeated key: forced entries override non-forced
assert
cfg.attrList.forceRepeatedKey == [
{ x = "wins"; }
{ x = "wins 2"; }
];
# mkForce on repeated key across mkMerge: forced wins
assert
cfg.attrList.forceRepeatedKeyMerge == [
{ x = "forced"; }
];
# mkForce on repeated key in attrset format: discards other x, keeps y
assert
cfg.attrList.forceRepeatedKeyAttrs == [
{ y = "kept"; }
{ x = "forced"; }
];
# mkForce only affects its own key
assert
cfg.attrList.forcePartialAttrs == [
{ y = "normal y"; }
{ x = "forced x"; }
];
# mkForce in attrset format overrides same key from list format
assert
cfg.attrList.forceMixedFormats == [
{ y = "list y"; }
{ x = "attrset forced x"; }
];
# Nesting: list format, mkOrder on element + mkForce on value
# z(100) < x-forced(500) < y(1500); x-discarded filtered by mkForce
assert
cfg.attrList.nestListOrderForce == [
{ z = "earliest"; }
{ x = "forced-early"; }
{ y = "late"; }
];
# Nesting: list format, mkOrder(mkForce(val)) on value
# z(500) < y(1000) < w(1200) < x-forced(1500); x-discarded entries filtered
assert
cfg.attrList.nestListOrderOfForce == [
{ z = "earliest"; }
{ y = "plain-early"; }
{ w = "mid"; }
{ x = "forced-late"; }
];
# Nesting: list format, mkForce(mkOrder(val)) on value
# z(500) < y(1000) < w(1200) < x-forced(1500); x-discarded entries filtered
assert
cfg.attrList.nestListForceOfOrder == [
{ z = "earliest"; }
{ y = "plain-early"; }
{ w = "mid"; }
{ x = "forced-late"; }
];
# Nesting: attrset format, mkOrder(mkForce(val))
# z(500) < y(1000) < w(1200) < x-forced(1500); x-discarded entries filtered
assert
cfg.attrList.nestAttrsOrderOfForce == [
{ z = "earliest"; }
{ y = "plain-early"; }
{ w = "mid"; }
{ x = "forced-late"; }
];
# Nesting: attrset format, mkForce(mkOrder(val))
# z(500) < y(1000) < w(1200) < x-forced(1500); x-discarded entries filtered
assert
cfg.attrList.nestAttrsForceOfOrder == [
{ z = "earliest"; }
{ y = "plain-early"; }
{ w = "mid"; }
{ x = "forced-late"; }
];
# mkIf false on individual element value filters it out (list format)
assert
cfg.attrListInt.optionalValueList == [
{ a = 1; }
{ c = 3; }
];
# mkIf false on individual element value filters it out (attrset format)
assert
cfg.attrListInt.optionalValueAttrs == [
{ a = 1; }
{ c = 3; }
];
# submodule: value, option descriptions, and valueMeta with real configuration metadata
assert
cfg.attrListSubmodule == [
{
web = {
host = "localhost";
port = 80;
};
}
{
db = {
host = "dbhost";
port = 5432;
};
}
];
assert
builtins.map (m: m.configuration.config) c.options.attrListSubmodule.valueMeta.attrList == [
{
host = "localhost";
port = 80;
}
{
host = "dbhost";
port = 5432;
}
];
assert
builtins.map (
m:
builtins.mapAttrs (n: o: o.description) (builtins.removeAttrs m.configuration.options [ "_module" ])
) c.options.attrListSubmodule.valueMeta.attrList == [
{
host = "Hostname";
port = "Port number";
}
{
host = "Hostname";
port = "Port number";
}
];
# valueMeta.attrList has one entry per (non-filtered) element
assert
c.options.attrList.valueMeta.attrs.listInput.attrList == [
{ }
{ }
];
assert
c.options.attrList.valueMeta.attrs.attrsetOrdered.attrList == [
{ }
{ }
];
assert
c.options.attrList.valueMeta.attrs.mixed.attrList == [
{ }
{ }
];
assert c.options.attrList.valueMeta.attrs.empty.attrList == [ ];
assert
c.options.attrListInt.valueMeta.attrs.optionalValueList.attrList == [
{ }
{ }
];
# either: headError is null for valid attrList input, so attrList branch is picked
assert
cfg.eitherAttrListOrInt == [
{ a = "hello"; }
{ b = "world"; }
];
# either: headError is non-null for int input, so int branch is picked
assert cfg.eitherAttrListOrIntFallback == 42;
# either (swapped): int first — int input matches
assert cfg.eitherIntOrAttrList == 42;
# either (swapped): list input falls through to attrList branch
assert
cfg.eitherIntOrAttrListFallback == [
{ a = "hello"; }
];
# asAttrs: unique keys — value is a plain attrset
assert
cfg.asAttrs.unique == {
a = "alpha";
b = "beta";
};
# ordered list preserved in valueMeta
assert
c.options.asAttrs.valueMeta.attrs.unique.attrListValue == [
{ a = "alpha"; }
{ b = "beta"; }
];
# asAttrs: duplicate keys — last in order wins
assert
cfg.asAttrs.duplicateKeys == {
x = "last";
y = "only";
};
assert
c.options.asAttrs.valueMeta.attrs.duplicateKeys.attrListValue == [
{ x = "first"; }
{ y = "only"; }
{ x = "last"; }
];
# asAttrs: ordered — value is attrset (unordered), list in valueMeta preserves order
assert
cfg.asAttrs.ordered == {
a = "a-val";
z = "z-val";
};
assert
c.options.asAttrs.valueMeta.attrs.ordered.attrListValue == [
{ a = "a-val"; }
{ z = "z-val"; }
];
# asAttrs: mkForce — forced key overrides, value is attrset
assert
cfg.asAttrs.withForce == {
x = "forced";
y = "kept";
};
# asAttrs: empty — value is empty attrset
assert cfg.asAttrs.empty == { };
# asAttrsDefault: unique keys — each value wrapped in singleton list
assert
cfg.asAttrsDefault.unique == {
a = [ 1 ];
b = [ 2 ];
};
# asAttrsDefault: duplicate keys — values collected into list in order
assert
cfg.asAttrsDefault.duplicates == {
x = [
10
20
30
];
y = [ 99 ];
};
assert
c.options.asAttrsDefault.valueMeta.attrs.duplicates.attrListValue == [
{ x = 10; }
{ y = 99; }
{ x = 20; }
{ x = 30; }
];
# valueMeta.definitions: mkDefinition records with mkOrder-wrapped single-key attrsets
# Use duplicateKeys which has mixed priorities and repeated keys
assert
let
defs = c.options.asAttrs.valueMeta.attrs.duplicateKeys.definitions;
extract = d: {
prio = d.value.priority;
value = d.value.content;
};
in
map extract defs == [
{
prio = 500;
value = {
x = "first";
};
}
{
prio = 1000;
value = {
y = "only";
};
}
{
prio = 1500;
value = {
x = "last";
};
}
];
# Round-trip: feed definitions through mapDefinitionValue + mkMerge into a listOf option
assert
let
rendered = lib.modules.mapDefinitionValue (attr: lib.cli.toCommandLineGNU { } attr) (
mkMerge c.options.asAttrs.valueMeta.attrs.duplicateKeys.definitions
);
result =
(lib.evalModules {
modules = [
{ options.out = mkOption { type = types.listOf types.str; }; }
{ config.out = rendered; }
# Interleave: mkOrder 800 lands between x(500) and y(1000)
{ config.out = mkOrder 800 [ "--interleaved" ]; }
];
}).config.out;
in
result == [
"-xfirst"
"--interleaved"
"-yonly"
"-xlast"
];
# Error cases are tested via checkConfigError in modules.sh
"ok";
};
}

View file

@ -167,6 +167,28 @@ in
elemType = str;
lazy = false;
}).description == "attribute set of string";
assert (attrListOf str).description == "attribute list of string";
assert (attrListOf int).description == "attribute list of signed integer";
assert (attrListOf bool).description == "attribute list of boolean";
assert (attrListOf (either int str)).description == "attribute list of (signed integer or string)";
assert (attrListOf (nullOr str)).description == "attribute list of (null or string)";
assert (attrListOf (listOf str)).description == "attribute list of list of string";
assert
(attrListOf (attrsOf int)).description == "attribute list of attribute set of signed integer";
assert (attrListOf (attrListOf str)).description == "attribute list of attribute list of string";
assert (attrListOf ints.positive).description == "attribute list of (positive integer, meaning >0)";
assert
(attrListOf (enum [
"a"
"b"
])).description == "attribute list of (one of \"a\", \"b\")";
assert
(attrListOf (strMatching "[0-9]+")).description
== "attribute list of string matching the pattern [0-9]+";
assert
(attrListOf (nonEmptyListOf str)).description == "attribute list of non-empty (list of string)";
assert (attrListOf (submodule { })).description == "attribute list of (submodule)";
assert (coercedTo str abort int).description == "signed integer or string convertible to it";
assert (coercedTo int abort str).description == "string or signed integer convertible to it";
assert (coercedTo bool abort str).description == "string or boolean convertible to it";

View file

@ -20,6 +20,7 @@ let
isStorePath
isString
substring
sort
throwIf
toDerivation
toList
@ -27,6 +28,7 @@ let
;
inherit (lib.lists)
concatLists
concatMap
elemAt
filter
foldl'
@ -70,6 +72,11 @@ let
mergeDefinitions
fixupOptionType
mergeOptionDecls
defaultOrderPriority
defaultOverridePriority
mkDefinition
mkOrder
mkOverride
;
inherit (lib.fileset)
isFileset
@ -805,6 +812,179 @@ rec {
substSubModules = m: nonEmptyListOf (elemType.substSubModules m);
};
attrListOf = elemType: attrListWith { inherit elemType; };
attrListWith =
{
elemType,
asAttrs ? false,
mergeAttrValues ? _name: values: values,
}:
mkOptionType rec {
name = "attrListOf";
description = "attribute list of ${
optionDescriptionPhrase (class: class == "noun" || class == "composite") elemType
}";
descriptionClass = "composite";
check = {
__functor = _self: x: isList x || isAttrs x;
isV2MergeCoherent = true;
};
merge = {
__functor =
self: loc: defs:
(self.v2 { inherit loc defs; }).value;
v2 =
{ loc, defs }:
let
# Peel order and override properties from a value in any nesting order.
# Returns { value, prio, overridePrio }.
# mkOrder is stripped (we consume it for sorting).
# mkOverride is preserved in value (mergeDefinitions strips it).
peelProperties =
value:
let
type = value._type or null;
in
if type == "order" then
let
inner = peelProperties value.content;
in
{
inherit (inner) value overridePrio;
prio = value.priority;
}
else if type == "override" then
let
inner = peelProperties value.content;
in
{
inherit (inner) prio;
overridePrio = value.priority;
# Re-wrap mkOverride around the inner value (with mkOrder stripped)
value = mkOverride value.priority inner.value;
}
else
{
inherit value;
prio = defaultOrderPriority;
overridePrio = defaultOverridePriority;
};
# Extract { file, key, value, prio, overridePrio } from a single-key attrset,
# optionally wrapped in mkOrder at the element level (list format).
extractItem =
file: raw:
let
hasOrder = isType "order" raw;
item = if hasOrder then raw.content else raw;
key = head (attrNames item);
peeled = peelProperties item.${key};
in
if isAttrs item && length (attrNames item) == 1 then
peeled
// {
inherit file key;
prio = if hasOrder then raw.priority else peeled.prio;
}
else
throw "A definition for option `${showOption loc}' is not of type `${description}'. ${
if !isAttrs item then
"Each list element must be an attribute set, but got ${builtins.typeOf item}"
else
"Each list element must be a single-key attribute set, but got ${toString (length (attrNames item))} keys"
}.${
showDefs [
{
inherit file;
value = raw;
}
]
}";
# Convert a definition to a flat list of { file, key, value, prio, overridePrio }
defToItems =
def:
if isList def.value then
map (extractItem def.file) def.value
else
# isAttrs: properties are on the values directly
map (
key:
peelProperties def.value.${key}
// {
inherit (def) file;
inherit key;
}
) (attrNames def.value);
allItems = concatMap defToItems defs;
# Per key, find the highest override priority (lowest number)
winningOverridePrio = foldl' (
acc: item:
let
prev = acc.${item.key} or defaultOverridePriority;
in
if item.overridePrio < prev then
acc // { ${item.key} = item.overridePrio; }
else
# minimize `//` operations
acc
) { } allItems;
# Keep only items at the winning override priority for their key
items = sort (a: b: a.prio < b.prio) (
filter (
item: item.overridePrio == winningOverridePrio.${item.key} or defaultOverridePriority
) allItems
);
evals = filter (e: e.eval.optionalValue ? value) (
map (item: {
inherit (item) key file prio;
eval = mergeDefinitions (loc ++ [ item.key ]) elemType [
{
inherit (item) file value;
}
];
}) items
);
attrListValue = map (e: { ${e.key} = e.eval.optionalValue.value or e.eval.mergedValue; }) evals;
in
{
headError = checkDefsForError check loc defs;
value = if asAttrs then zipAttrsWith mergeAttrValues attrListValue else attrListValue;
valueMeta.attrList = map (e: e.eval.checkedAndMerged.valueMeta) evals;
/**
The ordered list representation, especially useful when asAttrs is set.
*/
valueMeta.attrListValue = attrListValue;
valueMeta.definitions = map (
e:
mkDefinition {
inherit (e) file;
value = mkOrder e.prio { ${e.key} = e.eval.optionalValue.value or e.eval.mergedValue; };
}
) evals;
};
};
emptyValue = {
value = if asAttrs then { } else [ ];
};
getSubOptions = prefix: elemType.getSubOptions (prefix ++ [ "*" ]);
getSubModules = elemType.getSubModules;
substSubModules =
m:
attrListWith {
inherit asAttrs mergeAttrValues;
elemType = elemType.substSubModules m;
};
typeMerge = t: null; # Disable type merging
nestedTypes.elemType = elemType;
};
attrsOf = elemType: attrsWith { inherit elemType; };
# A version of attrsOf that's lazy in its values at the expense of

View file

@ -8657,6 +8657,13 @@
githubId = 88741530;
name = "Fabian Rigoll";
};
fabiob = {
email = "fabio@atelie.dev.br";
github = "fabiob";
githubId = 140875;
name = "Fábio Batista";
keys = [ { fingerprint = "D2D8 69D8 5EEC 30AD D327 B4A5 6CD5 5257 DB01 8B72"; } ];
};
fallenbagel = {
name = "fallenbagel";
github = "fallenbagel";
@ -15594,12 +15601,6 @@
githubId = 4312404;
name = "Chris Rendle-Short";
};
lightdiscord = {
email = "root@arnaud.sh";
github = "lightdiscord";
githubId = 24509182;
name = "Arnaud Pascal";
};
lightquantum = {
email = "self@lightquantum.me";
github = "PhotonQuantum";
@ -15806,12 +15807,6 @@
githubId = 23727619;
name = "Luca Ruperto";
};
lnl7 = {
email = "daiderd@gmail.com";
github = "LnL7";
githubId = 689294;
name = "Daiderd Jordan";
};
lo1tuma = {
email = "schreck.mathias@gmail.com";
github = "lo1tuma";
@ -17392,12 +17387,6 @@
githubId = 613740;
name = "Martin Baillie";
};
mbbx6spp = {
email = "me@susanpotter.net";
github = "mbbx6spp";
githubId = 564;
name = "Susan Potter";
};
mbe = {
email = "brandonedens@gmail.com";
github = "brandonedens";
@ -19249,6 +19238,12 @@
name = "Naufal Fikri";
keys = [ { fingerprint = "1575 D651 E31EC 6117A CF0AA C1A3B 8BBC A515 8835"; } ];
};
naurissteins = {
name = "Nauris Steins";
email = "me@naurissteins.com";
github = "naurissteins";
githubId = 5653746;
};
naxdy = {
name = "Naxdy";
email = "naxdy@naxdy.org";

View file

@ -49,6 +49,7 @@ lpeglabel,,,,1.6.0,,
lrexlib-gnu,,,,,,
lrexlib-oniguruma,,,,,,junestepp
lrexlib-pcre,,,,,,
lrexlib-pcre2,,,,,,wishstudio
lrexlib-posix,,,,,,
lsp-progress.nvim,,,,,5.1,gepbird
lsqlite3,,,,,,

1 name rockspec ref server version luaversion maintainers
49 lrexlib-gnu
50 lrexlib-oniguruma junestepp
51 lrexlib-pcre
52 lrexlib-pcre2 wishstudio
53 lrexlib-posix
54 lsp-progress.nvim 5.1 gepbird
55 lsqlite3

View file

@ -494,6 +494,47 @@ Composed types are types that take a type as parameter. `listOf
Displays the option as `foo.<id>` in the manual.
`types.attrListOf` *`t`*
: An ordered list of single-attribute attribute sets, where each value is of *`t`* type.
The output is always `[ { name1 = value1; } { name2 = value2; } ... ]`.
Definitions can be provided in two formats, which may be mixed via `lib.mkMerge`, `imports`, etc:
- **List format**: `[ { a = 1; } { b = 2; } ]` — each element must be a single-attribute attribute set.
Elements may be wrapped in `lib.mkOrder` (or `lib.mkBefore`/`lib.mkAfter`) to control ordering;
unwrapped elements use the default order priority.
- **Attribute set format**: `{ a = lib.mkOrder 100 1; b = 2; }` — each name-value pair becomes a single-attribute attribute set in the output.
Values may be wrapped in `lib.mkOrder` (or `lib.mkBefore`/`lib.mkAfter`) to control ordering.
Values without `lib.mkOrder` use the default priority.
Multiple definitions of the same option are concatenated and then sorted by priority.
Entries at the same priority level preserve their definition order.
`types.attrListWith` { *`elemType`*, *`asAttrs`* ? false, *`mergeAttrValues`* ? _name: values: values }
: An ordered list of single-attribute attribute sets, where each value is of *`elemType`* type.
**Parameters**
`elemType` (Required)
: Specifies the type of each value in the attribute list.
`asAttrs`
: When `true`, the option value is an attribute set instead of a list.
Duplicate keys are merged using `mergeAttrValues`.
The ordered list is always available via `valueMeta.attrListValue`.
`mergeAttrValues`
: A function `name: values: mergedValue` that controls how duplicate keys
are combined when `asAttrs = true`. This is passed as the callback to
`lib.zipAttrsWith`. The `values` list is in order of priority.
By default, all values are collected into a list.
**Behavior**
- `attrListWith { elemType = t; }` is equivalent to `attrListOf t`
`types.uniq` *`t`*

View file

@ -223,6 +223,8 @@
- `post-resume.target` has been removed. See {manpage}`systemd.special(7)` about `sleep.target` for instructions on ordering a process after resume with `ExecStop=`.
- `services.vsftpd` no longer automatically configures a PAM module. This means configurations using `services.vsftpd.localUsers` will no longer work unless `services.vsftpd.enableVirtualUsers` and `services.vsftpd.userDbPath` are also configured. The old behaviour can be restored by setting `security.pam.services.vsftpd.enable = true`, although this only ever worked by accident and may not be secure.
- `services.kubernetes.addons.dns.coredns` has been renamed to `services.kubernetes.addons.dns.corednsImage` and now expects a
package instead of attrs. Now, by default, nixpkgs.coredns in conjunction with dockerTools.buildImage is used, instead
of pulling the upstream container image from Docker Hub. If you want the old behavior, you can set:

View file

@ -33,7 +33,10 @@ in
enable = lib.mkOption {
type = lib.types.bool;
default = false;
default = builtins.pathExists config.programs.command-not-found.dbPath;
defaultText = lib.literalExpression ''
builtins.pathExists config.programs.command-not-found.dbPath
'';
description = ''
Whether interactive shells should show which Nix package (if
any) provides a missing command.
@ -45,6 +48,11 @@ in
};
dbPath = lib.mkOption {
type = lib.types.path;
default = pkgs.path + "/programs.sqlite";
defaultText = lib.literalExpression ''
pkgs.path + "/programs.sqlite"
'';
description = ''
Absolute path to `programs.sqlite`, which contains mappings from binary names to package names.
@ -54,39 +62,29 @@ in
`/nix/var/nix/profiles/per-user/root/channels/nixos/programs.sqlite`.
If you do so, you can update it with `sudo nix-channels --update`.
'';
type = lib.types.path;
};
};
config = lib.mkMerge [
{
programs.command-not-found = {
enable = lib.mkDefault (builtins.pathExists cfg.dbPath);
dbPath = pkgs.path + "/programs.sqlite";
};
}
config = lib.mkIf cfg.enable {
programs.bash.interactiveShellInit = ''
command_not_found_handle() {
'${commandNotFound}/bin/command-not-found' "$@"
}
'';
(lib.mkIf cfg.enable {
programs.bash.interactiveShellInit = ''
command_not_found_handle() {
'${commandNotFound}/bin/command-not-found' "$@"
}
'';
programs.zsh.interactiveShellInit = ''
command_not_found_handler() {
'${commandNotFound}/bin/command-not-found' "$@"
}
'';
programs.zsh.interactiveShellInit = ''
command_not_found_handler() {
'${commandNotFound}/bin/command-not-found' "$@"
}
'';
# NOTE: Fish by itself checks for nixos command-not-found, let's instead makes it explicit.
programs.fish.interactiveShellInit = ''
function fish_command_not_found
"${commandNotFound}/bin/command-not-found" $argv
end
'';
# NOTE: Fish by itself checks for nixos command-not-found, let's instead makes it explicit.
programs.fish.interactiveShellInit = ''
function fish_command_not_found
"${commandNotFound}/bin/command-not-found" $argv
end
'';
environment.systemPackages = [ commandNotFound ];
})
];
environment.systemPackages = [ commandNotFound ];
};
}

View file

@ -47,6 +47,9 @@ in
{
config = lib.mkIf (cfg.enable && nixPackage.pname == "lix") {
# Require the tun kernel module for pasta, can be disabled if pasta is not used.
boot.kernelModules.tun = lib.mkDefault true;
environment.systemPackages = [
nixPackage
pkgs.nix-info

View file

@ -249,8 +249,8 @@ in
setopt ${builtins.concatStringsSep " " cfg.setOptions}
''}
# Alternative method of determining short and full hostname.
HOST=${config.networking.fqdnOrHostName}
# Determine current fqdn hostname
HOST=$(hostname --fqdn)
# Setup command line history.
# Don't export these, otherwise other shells (bash) will try to use same HISTFILE.

View file

@ -13,8 +13,8 @@
# +--|---
# | eth2 Address: 2001:db8::1/64
# Router |
# | nat64 Address: 64:ff9b::1/128
# | Route: 64:ff9b::/96
# | nat64 Address: fde7:6c52:047e::1/128
# | Route: fde7:6c52:047e::/96
# | Address: 192.0.2.0/32
# | Route: 192.0.2.0/24
# |
@ -37,11 +37,7 @@
];
nodes = {
# The server is configured with static IPv4 addresses. RFC 6052 Section 3.1
# disallows the mapping of non-global IPv4 addresses like RFC 1918 into the
# Well-Known Prefix 64:ff9b::/96. TAYGA also does not allow the mapping of
# documentation space (RFC 5737). To circumvent this, 100.64.0.2/24 from
# RFC 6589 (Carrier Grade NAT) is used here.
# The server is configured with static IPv4 addresses.
# To reach the IPv4 address pool of the NAT64 gateway, there is a static
# route configured. In normal cases, where the router would also source NAT
# the pool addresses to one IPv4 addresses, this would not be needed.
@ -73,7 +69,7 @@
# The router is configured with static IPv4 addresses towards the server
# and IPv6 addresses towards the client. DNS64 is exposed towards the
# client so clatd is able to auto-discover the PLAT prefix. For NAT64, the
# Well-Known prefix 64:ff9b::/96 is used. NAT64 is done with TAYGA which
# ULA prefix fde7:6c52:047e::/96 is used. NAT64 is done with TAYGA which
# provides the tun-interface nat64 and does the translation over it. The
# IPv6 packets are sent to this interfaces and received as IPv4 packets and
# vice versa. As TAYGA only translates IPv6 addresses to dedicated IPv4
@ -121,7 +117,7 @@
systemd.network.networks."40-eth2" = {
networkConfig.IPv6SendRA = true;
ipv6Prefixes = [ { Prefix = "2001:db8::/64"; } ];
ipv6PREF64Prefixes = [ { Prefix = "64:ff9b::/96"; } ];
ipv6PREF64Prefixes = [ { Prefix = "fde7:6c52:047e::/96"; } ];
ipv6SendRAConfig = {
EmitDNS = true;
DNS = "_link_local";
@ -141,7 +137,7 @@
.:53 {
bind ::
hosts /etc/hosts
dns64 64:ff9b::/96
dns64 fde7:6c52:047e::/96
}
'';
};
@ -161,10 +157,10 @@
ipv6 = {
address = "2001:db8::1";
router = {
address = "64:ff9b::1";
address = "fde7:6c52:047e::1";
};
pool = {
address = "64:ff9b::";
address = "fde7:6c52:047e::";
prefixLength = 96;
};
};
@ -221,7 +217,7 @@
with subtest("networkd exports PREF64 prefix"):
assert json.loads(client.succeed("networkctl status eth1 --json=short"))[
"NDisc"
]["PREF64"][0]["Prefix"] == [0x0, 0x64, 0xFF, 0x9B] + ([0] * 12)
]["PREF64"][0]["Prefix"] == [0xfd, 0xe7, 0x6c, 0x52, 0x04, 0x7e] + ([0] * 10)
with subtest("Test ICMP"):
client.wait_until_succeeds("ping -c3 100.64.0.2 >&2")

View file

@ -4,7 +4,6 @@
name = "docker-tools-overlay";
meta = with pkgs.lib.maintainers; {
maintainers = [
lnl7
roberth
];
};

View file

@ -91,7 +91,6 @@ in
name = "docker-tools";
meta = with pkgs.lib.maintainers; {
maintainers = [
lnl7
roberth
];
};

View file

@ -4,13 +4,11 @@
# 2. whether the ETag header is properly generated whenever we're serving
# files in Nix store paths
# 3. nginx doesn't restart on configuration changes (only reloads)
{ pkgs, ... }:
{ ... }:
{
name = "nginx";
meta = with pkgs.lib.maintainers; {
maintainers = [
mbbx6spp
];
meta = {
maintainers = [ ];
};
nodes = {

View file

@ -11,6 +11,7 @@ in
{ ... }:
{
boot.supportedFilesystems = [ "zfs" ];
boot.zfs.forceImportRoot = false;
networking.hostId = "12345678";
@ -42,10 +43,10 @@ in
machine.succeed("truncate -s 64M /testpool.img")
machine.succeed("zpool create -O canmount=off '${pool}' /testpool.img")
machine.succeed("zfs create -o canmount=off -p '${homes}'")
machine.succeed("echo ${userPassword} | zfs create -o canmount=noauto -o encryption=on -o keyformat=passphrase '${homes}/alice'")
machine.succeed("zfs unload-key '${homes}/alice'")
machine.succeed("echo ${mismatchPass} | zfs create -o canmount=noauto -o encryption=on -o keyformat=passphrase '${homes}/bob'")
machine.succeed("zfs unload-key '${homes}/bob'")
machine.succeed("echo ${userPassword} | zfs create -o encryption=on -o keyformat=passphrase '${homes}/alice'")
machine.succeed("zfs unmount '${homes}/alice' && zfs unload-key '${homes}/alice'")
machine.succeed("echo ${mismatchPass} | zfs create -o encryption=on -o keyformat=passphrase '${homes}/bob'")
machine.succeed("zfs unmount '${homes}/bob' && zfs unload-key '${homes}/bob'")
with subtest("Switch to tty2"):
machine.fail("pgrep -f 'agetty.*tty2'")

View file

@ -1,8 +1,8 @@
{ pkgs, ... }:
{
name = "uwsgi";
meta = with pkgs.lib.maintainers; {
maintainers = [ lnl7 ];
meta = {
maintainers = [ ];
};
nodes.machine =

View file

@ -3,7 +3,6 @@
name = "vault-dev";
meta = with pkgs.lib.maintainers; {
maintainers = [
lnl7
mic92
];
};

View file

@ -11,7 +11,6 @@
name = "vault-postgresql";
meta = with pkgs.lib.maintainers; {
maintainers = [
lnl7
roberth
];
};

View file

@ -1,8 +1,8 @@
{ pkgs, ... }:
{
name = "vault";
meta = with pkgs.lib.maintainers; {
maintainers = [ lnl7 ];
meta = {
maintainers = [ ];
};
nodes.machine =
{ pkgs, ... }:

View file

@ -4,6 +4,8 @@
nodes = {
server = {
security.pam.services.vsftpd.enable = true;
services.vsftpd = {
enable = true;
userlistDeny = false;

View file

@ -26,7 +26,7 @@ stdenv.mkDerivation {
libxmlxx3
];
NIX_CFLAGS_COMPILE = "-Wno-incompatible-pointer-types";
env.NIX_CFLAGS_COMPILE = "-Wno-incompatible-pointer-types";
buildFlags = [ "gtk3" ];

View file

@ -29,7 +29,7 @@ stdenv.mkDerivation {
];
makeFlags = [ "gtk3" ];
NIX_CFLAGS_COMPILE = "-Wno-incompatible-pointer-types";
env.NIX_CFLAGS_COMPILE = "-Wno-incompatible-pointer-types";
installPhase = ''
runHook preInstall

View file

@ -21,9 +21,9 @@ let
url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2025.3.4.7/android-studio-panda4-patch1-linux.tar.gz";
};
betaVersion = {
version = "2025.3.4.5"; # "Android Studio Panda 4 | 2025.3.4 RC 1"
sha256Hash = "sha256-NiNq1j+rzPU4KsLKYymfi5/Vx2Bn3hK8I3OVIUFloX0=";
url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2025.3.4.5/android-studio-panda4-rc1-linux.tar.gz";
version = "2026.1.1.6"; # "Android Studio Quail 1 | 2026.1.1 RC 1"
sha256Hash = "sha256-b6PVgBTTjIgm6BI171RL7T6GJD9ApnTWGOTqvt703PQ=";
url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2026.1.1.6/android-studio-quail1-rc1-linux.tar.gz";
};
latestVersion = {
version = "2026.1.2.2"; # "Android Studio Quail 2 | 2026.1.2 Canary 2"

View file

@ -288,6 +288,7 @@ let
toNvimTreesitterGrammar = makeSetupHook {
name = "to-nvim-treesitter-grammar";
meta.license = lib.licenses.mit;
} ./to-nvim-treesitter-grammar.sh;
in

View file

@ -446,12 +446,12 @@ final: prev: {
SchemaStore-nvim = buildVimPlugin {
pname = "SchemaStore.nvim";
version = "0-unstable-2026-05-19";
version = "0-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "b0o";
repo = "SchemaStore.nvim";
rev = "05a0a69ca52c31aa687e8251ae11dd913df10061";
hash = "sha256-eM8plzS2vjOsNCzicPXfJbCs86Hc+plJeQOl+6diSJ8=";
rev = "68ba9015c0cc77a0fe954bd2578dfa7a5c24134f";
hash = "sha256-Odk14VqfchdeGwSAaQyNmIX42GaJSm/1xpX7jth6oxU=";
};
meta.homepage = "https://github.com/b0o/SchemaStore.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@ -755,12 +755,12 @@ final: prev: {
aerial-nvim = buildVimPlugin {
pname = "aerial.nvim";
version = "3.1.0";
version = "4.0.0";
src = fetchFromGitHub {
owner = "stevearc";
repo = "aerial.nvim";
tag = "v3.1.0";
hash = "sha256-ugzNA/+Z2ReIy/8ks9wHEtmpTwpr8qqVR0xemw+GrUc=";
tag = "v4.0.0";
hash = "sha256-rFVYNwNkIYqJxH6bSNmXJ/e2T919NTeH+Uz1nF/JC+0=";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/stevearc/aerial.nvim/";
@ -1260,12 +1260,12 @@ final: prev: {
asynctasks-vim = buildVimPlugin {
pname = "asynctasks.vim";
version = "0-unstable-2026-04-29";
version = "0-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "skywind3000";
repo = "asynctasks.vim";
rev = "14892013f671614afae315f91ed5ef700334e773";
hash = "sha256-RsZ8NjOH4j4m9gO4PiQCJVzdatvhiveoSL2gESaon/8=";
rev = "281cca79bf98ffe3913427b76adae59413823bd7";
hash = "sha256-6859GtjXxM7Pxp6U95Oz+/hg8FClulT2t2R2FY4yq7A=";
};
meta.homepage = "https://github.com/skywind3000/asynctasks.vim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -1400,12 +1400,12 @@ final: prev: {
auto-session = buildVimPlugin {
pname = "auto-session";
version = "2.5.1-unstable-2026-05-05";
version = "2.5.1-unstable-2026-05-21";
src = fetchFromGitHub {
owner = "rmagatti";
repo = "auto-session";
rev = "daa7c996a0395e26342934843938647d0f1e87f4";
hash = "sha256-Dy538JjSm47paDiXbPw+gM+UiPQlM4dM7bcRWzYY9w8=";
rev = "3e145ee9af42eb6764908a1a481f53fe7f0bdbe5";
hash = "sha256-Ew7l61hyWpF1YkyvDEzh8U1+zIslPP5UQpOt7O242Qs=";
};
meta.homepage = "https://github.com/rmagatti/auto-session/";
meta.license = getLicenseFromSpdxId "MIT";
@ -3470,12 +3470,12 @@ final: prev: {
coc-nvim = buildVimPlugin {
pname = "coc.nvim";
version = "0.0.82-unstable-2026-05-12";
version = "0.0.82-unstable-2026-05-22";
src = fetchFromGitHub {
owner = "neoclide";
repo = "coc.nvim";
rev = "269f4465f304f7f2412b9cc46fbdc98667b84546";
hash = "sha256-3YaXdNL7Kh2aVZAU1hVtdWfMLB12NGrknts6OUiTtYg=";
rev = "a23e8e5c3a7ee77073862c98800948ef20a5e7e6";
hash = "sha256-3l0e0jbtVvALHVfOHeCiWY3/Z5MfPCJqI43UrKk3FKM=";
};
meta.homepage = "https://github.com/neoclide/coc.nvim/";
meta.license = unfree;
@ -3946,12 +3946,12 @@ final: prev: {
conform-nvim = buildVimPlugin {
pname = "conform.nvim";
version = "9.1.0-unstable-2026-05-15";
version = "9.1.0-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "stevearc";
repo = "conform.nvim";
rev = "18aeab3d63d350dcf44d64c462cc489a3412af40";
hash = "sha256-+NzRZItrF344sp+xt07vKcu+EbHO1wtSGolYtIz0CP4=";
rev = "24c70347f6b2128679f47d2eb765156ef34bf9e0";
hash = "sha256-Jky3GonVfO4M5G9KD8JQYorNav9PKSe4NvZXVbn9EYg=";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/stevearc/conform.nvim/";
@ -4563,12 +4563,12 @@ final: prev: {
ddc-source-file = buildVimPlugin {
pname = "ddc-source-file";
version = "0-unstable-2025-09-03";
version = "0-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "LumaKernel";
repo = "ddc-source-file";
rev = "e2386ed1e6739f48d4f3cfea9cc961fb5785480a";
hash = "sha256-UndfTc+awrlzJUziPEv5FFwwDjQTSqOVZXheQ/CERpg=";
rev = "294a3274eaff4b3a37d1a033effd07f4d0d6cec1";
hash = "sha256-y03JT0/QOEjfxOBPzwN7c5xorCkSOUKkcZs+OVh5Q6A=";
};
meta.homepage = "https://github.com/LumaKernel/ddc-source-file/";
meta.license = getLicenseFromSpdxId "MIT";
@ -4577,12 +4577,12 @@ final: prev: {
ddc-source-lsp = buildVimPlugin {
pname = "ddc-source-lsp";
version = "1.2.0-unstable-2026-05-15";
version = "1.2.0-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "Shougo";
repo = "ddc-source-lsp";
rev = "1debc85415b3175cd76b6313efda70dbb5bfdfeb";
hash = "sha256-bzAkGV0N6HS+lQg28szTIQwFaHUIzaEmIMOdH/kio+U=";
rev = "a8fef26851f3b648e064fa3aeb7c8c054684e846";
hash = "sha256-vB3sCEJw67kJLON+AXo6B/38jBAFq079EouVxaI9QlQ=";
};
meta.homepage = "https://github.com/Shougo/ddc-source-lsp/";
meta.license = unfree;
@ -5391,12 +5391,12 @@ final: prev: {
easy-dotnet-nvim = buildVimPlugin {
pname = "easy-dotnet.nvim";
version = "0-unstable-2026-05-18";
version = "0-unstable-2026-05-22";
src = fetchFromGitHub {
owner = "GustavEikaas";
repo = "easy-dotnet.nvim";
rev = "5bdd2b8f6891c64607393698be7fd0f441443c1d";
hash = "sha256-dp4N8fn9c7/uGM1G8HT2tM/zjCN089eik6I6M8w3ncQ=";
rev = "5d5b3e2491a81efe252004e1876bd67af7dfc9c1";
hash = "sha256-0rvkOKGWSYrB/GoV48Q4JSwbcz5SKIJGvXPwR7vJROM=";
};
meta.homepage = "https://github.com/GustavEikaas/easy-dotnet.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -5518,12 +5518,12 @@ final: prev: {
efmls-configs-nvim = buildVimPlugin {
pname = "efmls-configs-nvim";
version = "1.11.1-unstable-2026-04-10";
version = "1.11.1-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "creativenull";
repo = "efmls-configs-nvim";
rev = "5dc52088c231f2721f545570fcb541b04802ce6b";
hash = "sha256-QO4R/+qAMXV+NN3gsMcKz7Z2BHZbwbwNBoD1AxfA/aY=";
rev = "2f5dc31042cc76fc3d5a859842a8416085c4d41f";
hash = "sha256-mtHihfpaV9gJFqZBD0h90dAC6kECNxbFPH3OYJoKVT0=";
};
meta.homepage = "https://github.com/creativenull/efmls-configs-nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -6206,12 +6206,12 @@ final: prev: {
fugit2-nvim = buildVimPlugin {
pname = "fugit2.nvim";
version = "0.2.1-unstable-2026-05-03";
version = "0.2.1-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "SuperBo";
repo = "fugit2.nvim";
rev = "e1543df308f36a02a3b2c1128c6e7a54de5c764c";
hash = "sha256-LFgwf7TNuL/Z1CsJF2OCb0Hb7Zu+06cE843Qa+v5UH0=";
rev = "d6513bfc443470a85426ab366be591aadd444053";
hash = "sha256-bvr/iosdWFGUEfbwELCdV/tnlxeDfg/94AssXGVZSEw=";
};
meta.homepage = "https://github.com/SuperBo/fugit2.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -6332,12 +6332,12 @@ final: prev: {
fzf-vim = buildVimPlugin {
pname = "fzf.vim";
version = "0-unstable-2026-04-10";
version = "0-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "junegunn";
repo = "fzf.vim";
rev = "b9624aa012ddcbae9e79964bfd30cc1fbe3cf263";
hash = "sha256-VPxTYXdJaVbr2U7d6VuO4CpIyTC62uo3TAuf1MYiAXI=";
rev = "e5b53de3d3b402d2ef9f74da91c2bb808d0afb34";
hash = "sha256-6xu9+EC4V9CaqlogvVSCb0U7YJU35UWPMGrrdam4Ug0=";
};
meta.homepage = "https://github.com/junegunn/fzf.vim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -6626,11 +6626,11 @@ final: prev: {
gitlab-vim = buildVimPlugin {
pname = "gitlab.vim";
version = "1.1.0-unstable-2026-05-13";
version = "1.1.0-unstable-2026-05-21";
src = fetchgit {
url = "https://gitlab.com/gitlab-org/editor-extensions/gitlab.vim";
rev = "915a6265430a578fa4a1d7f8063e9e6fabca1184";
hash = "sha256-9dmIWXQNUEp0IfZ3nJaA5HYzDVejNZfS/ueorremBNM=";
rev = "9e196cf8497eb99c4a0834f801d2f55499630cc9";
hash = "sha256-yXVtP6SZ5H121VWUiFTDcWZ2l/xst1O38jI3iBav6VA=";
};
meta.homepage = "https://gitlab.com/gitlab-org/editor-extensions/gitlab.vim";
meta.license = unfree;
@ -7017,12 +7017,12 @@ final: prev: {
guihua-lua = buildVimPlugin {
pname = "guihua.lua";
version = "0.1-unstable-2026-05-19";
version = "0.1-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "ray-x";
repo = "guihua.lua";
rev = "26e2e557f5b1a0c5cb25cab41d71ddba61523cba";
hash = "sha256-9VeU2HS1IRyixmbt1/jblHU5SNoqc+FJI52fAOq85aI=";
rev = "8c34ebbb59990c6cb70110d786ad82b2a7182c78";
hash = "sha256-TWXsHAYXz4UejiRpsMyuYKA70wFrXGvVMXsFL8qnGyY=";
};
meta.homepage = "https://github.com/ray-x/guihua.lua/";
meta.license = getLicenseFromSpdxId "MIT";
@ -8348,12 +8348,12 @@ final: prev: {
kulala-nvim = buildVimPlugin {
pname = "kulala.nvim";
version = "6.1.0";
version = "6.2.0";
src = fetchFromGitHub {
owner = "mistweaverco";
repo = "kulala.nvim";
tag = "v6.1.0";
hash = "sha256-0wr4MdsKnS6qcmmhhRgPlSEhlyY64zQ+fArbjvdusOE=";
tag = "v6.2.0";
hash = "sha256-Uh2Lt6VZv5X9eqlbaquL40wNfJX8kON8vU9h+cHhlHg=";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/mistweaverco/kulala.nvim/";
@ -8559,11 +8559,11 @@ final: prev: {
leap-nvim = buildVimPlugin {
pname = "leap.nvim";
version = "0-unstable-2026-05-09";
version = "0-unstable-2026-05-17";
src = fetchgit {
url = "https://codeberg.org/andyg/leap.nvim/";
rev = "940bc5e716a8cde63bd47e1b13f30fd9075ec0c8";
hash = "sha256-bwyZzOq0OGYMqJks3ijEWD3wgdbTNhUwNT96tWUNXK4=";
rev = "59d70b1bdf8e76e0637e6ebcc150fb6767f67fc5";
hash = "sha256-B3nwquR/ilBtuIPXw0r0048Ougt1VZ7FUFhT66yAH+8=";
};
meta.homepage = "https://codeberg.org/andyg/leap.nvim/";
meta.license = unfree;
@ -9496,12 +9496,12 @@ final: prev: {
mason-nvim = buildVimPlugin {
pname = "mason.nvim";
version = "2.2.1-unstable-2026-05-18";
version = "2.3.0";
src = fetchFromGitHub {
owner = "mason-org";
repo = "mason.nvim";
rev = "cbf8d285e1462dd24acf3507817be2bbcb035919";
hash = "sha256-DLhPbrp591zwn9STDiyOXcKmLFy/AtGscsWn3vU2U+E=";
tag = "v2.3.0";
hash = "sha256-O+11o3c0iNZ4tMZV80QbzwuMV3mP2Ml4lXQKHz4uR54=";
};
meta.homepage = "https://github.com/mason-org/mason.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@ -9706,12 +9706,12 @@ final: prev: {
mini-ai = buildVimPlugin {
pname = "mini.ai";
version = "0.17.0-unstable-2026-05-12";
version = "0.17.0-unstable-2026-05-21";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.ai";
rev = "a783ce6e1a5b3bc90519f20b51f4a5f6702734af";
hash = "sha256-mxc3ZO9vwJd7GvwOFmiFUYtMaYj8uMje3eQSSgJwdwQ=";
rev = "4ce4c35e411ea329a15d4b15e9c89c2a3089e437";
hash = "sha256-mLdjjacl8Lx5wJG0nfYnD4l+h3xIUQjw09iqKJx1uRs=";
};
meta.homepage = "https://github.com/nvim-mini/mini.ai/";
meta.license = getLicenseFromSpdxId "MIT";
@ -9762,12 +9762,12 @@ final: prev: {
mini-basics = buildVimPlugin {
pname = "mini.basics";
version = "0.17.0-unstable-2026-05-18";
version = "0.17.0-unstable-2026-05-21";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.basics";
rev = "69d3f97431788b27df5edf90e9922ba4af38f990";
hash = "sha256-r3UxzMl8Z171XzkBlPfxw7dyrnt0TKCXPWAtTIneUDs=";
rev = "4255727accba14db930823da4168c7f1ea68ff80";
hash = "sha256-UVZkMfRub44plD0+wOd+//P7BejCqwf3mxCH9fMiosw=";
};
meta.homepage = "https://github.com/nvim-mini/mini.basics/";
meta.license = getLicenseFromSpdxId "MIT";
@ -9930,12 +9930,12 @@ final: prev: {
mini-extra = buildVimPlugin {
pname = "mini.extra";
version = "0.17.0-unstable-2026-05-12";
version = "0.17.0-unstable-2026-05-21";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.extra";
rev = "cf027da13fd217cfe3af6ef978d0e947c7ee0f7a";
hash = "sha256-LSbcIx/1GtTDWhZGKzFPOdiDp2qglcI+1ymn9k2dAio=";
rev = "5b0acf09d7f7958946973367c66bf5aafe4209dd";
hash = "sha256-+uTcSFEYSgfk72rg6t+1+TMNzeqJUplg2WKCulw778g=";
};
meta.homepage = "https://github.com/nvim-mini/mini.extra/";
meta.license = getLicenseFromSpdxId "MIT";
@ -10140,12 +10140,12 @@ final: prev: {
mini-nvim = buildVimPlugin {
pname = "mini.nvim";
version = "0.17.0-unstable-2026-05-19";
version = "0.17.0-unstable-2026-05-23";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.nvim";
rev = "264b5c8fc6e82212af0dc5c345145cfa916efeb6";
hash = "sha256-2E8EYYWQcN3rpsKqV8AYzPPAF7PalLpDTe3t3Lo9SmE=";
rev = "44657837c7338e52727facc85c1d95bec1f6bd7c";
hash = "sha256-BjGHDUWVyyodTJmTbMqUWDy70Ug5iCqpPkCJwhOLTaI=";
};
meta.homepage = "https://github.com/nvim-mini/mini.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -10182,12 +10182,12 @@ final: prev: {
mini-pick = buildVimPlugin {
pname = "mini.pick";
version = "0.17.0-unstable-2026-05-19";
version = "0.17.0-unstable-2026-05-21";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.pick";
rev = "0e25916ec4b0f3ad81329e529db55ef350ac9901";
hash = "sha256-OmGZQ3MK++mgtSNgLQhdWsQkbHr81iTfsQnLl8gBxoM=";
rev = "4522d9ab65224675df2cf1ede8c12f0410aae2be";
hash = "sha256-ppt7E8v/8deRpKbx0aknqGvZ7FM8a3T1jsMsoitaizA=";
};
meta.homepage = "https://github.com/nvim-mini/mini.pick/";
meta.license = getLicenseFromSpdxId "MIT";
@ -10266,12 +10266,12 @@ final: prev: {
mini-surround = buildVimPlugin {
pname = "mini.surround";
version = "0.17.0-unstable-2026-05-19";
version = "0.17.0-unstable-2026-05-22";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.surround";
rev = "c375ea503646fe8393593b5fb8a40406eaa437b2";
hash = "sha256-uwip1qJ6qGbVmOrttjCCoOybQ1/3vYsIO+fJ5Xnrs2g=";
rev = "1e37ade260e2b655c3a9b8407ba7e6b0fb995b28";
hash = "sha256-ruFYkITEmjRC3Luat1X3fW2vXBUBe785c9DRn6fWjIE=";
};
meta.homepage = "https://github.com/nvim-mini/mini.surround/";
meta.license = getLicenseFromSpdxId "MIT";
@ -10896,12 +10896,12 @@ final: prev: {
neoconf-nvim = buildVimPlugin {
pname = "neoconf.nvim";
version = "1.4.0-unstable-2026-05-19";
version = "1.4.0-unstable-2026-05-20";
src = fetchFromGitHub {
owner = "folke";
repo = "neoconf.nvim";
rev = "39609069a03ac7fc7604a2b45944df15b67f3ed8";
hash = "sha256-KbQ97HC/66cVH+McpIzACYtWsffVgcImNJ9P33zctT0=";
rev = "de6cd4ce8491116a7df44b714b4b963dbad50393";
hash = "sha256-8RJ/jjbFa6C389u7CfYAqx+yM33Lijh40egIg+Vt1sU=";
};
meta.homepage = "https://github.com/folke/neoconf.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@ -11347,12 +11347,12 @@ final: prev: {
neotest-java = buildVimPlugin {
pname = "neotest-java";
version = "0.37.1";
version = "0.37.3";
src = fetchFromGitHub {
owner = "rcasia";
repo = "neotest-java";
tag = "v0.37.1";
hash = "sha256-t+nqylLLHITU8li1cOl97jFKkZRmvmDbSAwvmv1yk+M=";
tag = "v0.37.3";
hash = "sha256-ALVudtC49gAQOGwucOh7zvhbUyZX0lTGyizhn+QCPl4=";
};
meta.homepage = "https://github.com/rcasia/neotest-java/";
meta.license = getLicenseFromSpdxId "MIT";
@ -11808,12 +11808,12 @@ final: prev: {
nightfly = buildVimPlugin {
pname = "nightfly";
version = "0-unstable-2026-04-26";
version = "0-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "bluz71";
repo = "vim-nightfly-colors";
rev = "4980ccc6de5f361fc9da116240ce7592e7d9a53a";
hash = "sha256-UGGHRCSZXq7vxgWntXTZDTiKuIDBs0MhWdeOucO3cxo=";
rev = "e197d138ecdac92c28de82fbebdc9ba2de77162a";
hash = "sha256-P424oLG8GefnMyol3uEMpKXHoIWbgOSqKx9ob3Yu4ko=";
};
meta.homepage = "https://github.com/bluz71/vim-nightfly-colors/";
meta.license = getLicenseFromSpdxId "MIT";
@ -12354,11 +12354,11 @@ final: prev: {
nvim-dap = buildVimPlugin {
pname = "nvim-dap";
version = "0.10.0-unstable-2026-04-06";
version = "0.10.0-unstable-2026-05-20";
src = fetchgit {
url = "https://codeberg.org/mfussenegger/nvim-dap/";
rev = "45a69eba683a2c448dd9ecfc4de89511f0646b5f";
hash = "sha256-9NF0+QoHOEAg6pd+oRBxr3ExWLqbvRrIMoMSZvNdqX4=";
rev = "531771530d4f82ad2d21e436e3cc052d68d7aebb";
hash = "sha256-pgD51NWFyjK1FrXZ8MFFIM9DX2OBxL7cd7JlST2Twvc=";
};
meta.homepage = "https://codeberg.org/mfussenegger/nvim-dap/";
meta.license = unfree;
@ -12477,12 +12477,12 @@ final: prev: {
nvim-dap-ruby = buildVimPlugin {
pname = "nvim-dap-ruby";
version = "0-unstable-2025-07-08";
version = "0-unstable-2026-05-20";
src = fetchFromGitHub {
owner = "suketa";
repo = "nvim-dap-ruby";
rev = "ba36f9905ca9c6d89e5af5467a52fceeb2bbbf6d";
hash = "sha256-57BBhdrikDEswZe2QW+jHMSgfXIjauc6iDNpWS0YUaU=";
rev = "fa73da2f5124d10a4cd09ce589441b5901df706a";
hash = "sha256-oLohNzCdLu8kGG90NvFoRgpWov2waXfTENi5XvwWLS8=";
};
meta.homepage = "https://github.com/suketa/nvim-dap-ruby/";
meta.license = getLicenseFromSpdxId "MIT";
@ -12799,11 +12799,11 @@ final: prev: {
nvim-jdtls = buildVimPlugin {
pname = "nvim-jdtls";
version = "0.2.0-unstable-2026-02-10";
version = "0.2.0-unstable-2026-05-20";
src = fetchgit {
url = "https://codeberg.org/mfussenegger/nvim-jdtls/";
rev = "77ccaeb422f8c81b647605da5ddb4a7f725cda90";
hash = "sha256-ySaJ/eKtYmFoTWEKoFiiNWf+B8YIwUEqg/tKUOTcFfI=";
rev = "6e9d953f0b82bccdb834cfde0e893f3119c22592";
hash = "sha256-4EQxTo9MQagXCdWGs8oCR153VHhEm745dzgr2FdlS0s=";
};
meta.homepage = "https://codeberg.org/mfussenegger/nvim-jdtls/";
meta.license = unfree;
@ -12937,11 +12937,11 @@ final: prev: {
nvim-lint = buildVimPlugin {
pname = "nvim-lint";
version = "05-unstable-2026-05-18";
version = "05-unstable-2026-05-19";
src = fetchgit {
url = "https://codeberg.org/mfussenegger/nvim-lint/";
rev = "8b06eeec3c674744b993caecd73343df108c052d";
hash = "sha256-aDMmKNQSwo+evuHJtub85rX1eQGVSIhx2gvmWhlM/vA=";
rev = "d48f3a76189d03b2239f6df1b2f7e3fa8353743b";
hash = "sha256-5mlNCE0KFGfJTocV5NMlczZMmZKGzxqVdUO23KVZ4O8=";
};
meta.homepage = "https://codeberg.org/mfussenegger/nvim-lint/";
meta.license = unfree;
@ -13412,12 +13412,12 @@ final: prev: {
nvim-sioyek-highlights = buildVimPlugin {
pname = "nvim-sioyek-highlights";
version = "0-unstable-2026-05-17";
version = "0-unstable-2026-05-20";
src = fetchFromGitHub {
owner = "jbuck95";
repo = "nvim-sioyek-highlights";
rev = "1dc885c08e895178f2d5b2474bc366a962077849";
hash = "sha256-9wEFRB4OSBnRYLW8BbUgGjs5XbiZ6ZpxC5LPXJ/Mi7k=";
rev = "753f5d309d08229325134e5992cd032d06f72ee8";
hash = "sha256-JiHBw/3LqYW4oxT+ObvU3IsDU1Q5JaKr4TDBZautNV0=";
};
meta.homepage = "https://github.com/jbuck95/nvim-sioyek-highlights/";
meta.license = getLicenseFromSpdxId "MIT";
@ -14294,12 +14294,12 @@ final: prev: {
opencode-nvim = buildVimPlugin {
pname = "opencode.nvim";
version = "0.10.0";
version = "0.10.1";
src = fetchFromGitHub {
owner = "nickjvandyke";
repo = "opencode.nvim";
tag = "v0.10.0";
hash = "sha256-H++d+0xdqfkYM7XjnDRN5MgHOTIJA3fBNRY1zBgGonk=";
tag = "v0.10.1";
hash = "sha256-hpRlUUI1wEluMyWfAnxjztbozIVgN7Yan2zH+HmEsSw=";
};
meta.homepage = "https://github.com/nickjvandyke/opencode.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -14406,12 +14406,12 @@ final: prev: {
overseer-nvim = buildVimPlugin {
pname = "overseer.nvim";
version = "2.1.0-unstable-2026-05-14";
version = "2.1.0-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "stevearc";
repo = "overseer.nvim";
rev = "3d0c7e7bbfe1a1c6f9bfecd0af8709171a97df71";
hash = "sha256-hxVnBKiyIFtb2PkRHOlClVXSJ20Gtg2w7QzuwpiVqsQ=";
rev = "473944a838d7efa112a6c8e481d27f1a76236a90";
hash = "sha256-Ie4yhebBv+Pq7pqBx+TGHA7p3HUCU1+nQ5d/IpcjUqU=";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/stevearc/overseer.nvim/";
@ -14547,12 +14547,12 @@ final: prev: {
parrot-nvim = buildVimPlugin {
pname = "parrot.nvim";
version = "2.5.1-unstable-2026-01-21";
version = "2.5.1-unstable-2026-05-20";
src = fetchFromGitHub {
owner = "frankroeder";
repo = "parrot.nvim";
rev = "34bff8b294d85f445843cb70faa205e07e22d4f0";
hash = "sha256-xXrjfZQOzqXfm0vq1eQjwjyMxQMSrzF3CNBBd3LgG9Y=";
rev = "964675ca588efae2a50bef35b01729acc36cb3d5";
hash = "sha256-EPrisAicCUpUPl0q5h/uBBSpQuuzOlSCbQpu0ispwvU=";
};
meta.homepage = "https://github.com/frankroeder/parrot.nvim/";
meta.license = unfree;
@ -15010,12 +15010,12 @@ final: prev: {
pum-vim = buildVimPlugin {
pname = "pum.vim";
version = "2.0-unstable-2026-05-02";
version = "2.0-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "Shougo";
repo = "pum.vim";
rev = "16a70a73d98e08f0327a7317450590a449ebcbb9";
hash = "sha256-Qa0AYO91rUsLgDpUsD0hqMLJQhwo6jg/72nolnc2Jh0=";
rev = "f3c2436bd93f6d4818a91e480f991ccc3b20338e";
hash = "sha256-cfd3yckABLaG8CQtDwyUgivAH6rHxPSubqVvNJrzxdk=";
};
meta.homepage = "https://github.com/Shougo/pum.vim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -15137,12 +15137,12 @@ final: prev: {
quicker-nvim = buildVimPlugin {
pname = "quicker.nvim";
version = "1.5.0-unstable-2026-05-15";
version = "1.5.1";
src = fetchFromGitHub {
owner = "stevearc";
repo = "quicker.nvim";
rev = "1c9322b7e2967472548ba9bccd1ccd40e49d0a49";
hash = "sha256-K1jaWpTSNCni6CgR9mlNguiPyhQ1BMjj4p3/V+6XoMA=";
tag = "v1.5.1";
hash = "sha256-CVW0GJhSD/J4iSFgGpXlTWViPePIlw+Wu3tF9urWMIE=";
};
meta.homepage = "https://github.com/stevearc/quicker.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -15332,12 +15332,12 @@ final: prev: {
refactoring-nvim = buildVimPlugin {
pname = "refactoring.nvim";
version = "0-unstable-2026-05-13";
version = "0-unstable-2026-05-23";
src = fetchFromGitHub {
owner = "theprimeagen";
repo = "refactoring.nvim";
rev = "f5b54f3605d9ed709521db1827b8686dea283622";
hash = "sha256-h2ZOwdva5f3VeZASKjq/DhBiuaZI2Ovpc/vzBMerv9g=";
rev = "8f2045241fb105ab092021e3e58b5b99f34f07d0";
hash = "sha256-ZYEX22JJ1d+BeTq1aaTR/sKwjVCUlJMnEOtyVBrVt9A=";
};
meta.homepage = "https://github.com/theprimeagen/refactoring.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -15458,12 +15458,12 @@ final: prev: {
resession-nvim = buildVimPlugin {
pname = "resession.nvim";
version = "1.2.1-unstable-2025-11-05";
version = "1.2.1-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "stevearc";
repo = "resession.nvim";
rev = "05adc14db5c2d0eae064765101dd5e9c594c7851";
hash = "sha256-7Wa3PwTWEueRkhKBhOMbvstT5vFj2sxyiHoJOrdcJAc=";
rev = "0983fbdd3fe938c80fb7dd33817f08f428426ac8";
hash = "sha256-uvKyEgd/tnRZvYS/+vR5airpgE8cFo5CqGxNWBKbMdQ=";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/stevearc/resession.nvim/";
@ -15557,12 +15557,12 @@ final: prev: {
roslyn-nvim = buildVimPlugin {
pname = "roslyn.nvim";
version = "0-unstable-2026-05-18";
version = "0-unstable-2026-05-22";
src = fetchFromGitHub {
owner = "seblyng";
repo = "roslyn.nvim";
rev = "49526a2958893d0c8000d03b16ed923340ce13cc";
hash = "sha256-MUosD7oF1hBA9sYl5RAAogxco+jLiyu0YKKpzui6Vs4=";
rev = "426984d6c1e8ee88a394a562eb925e687340f91e";
hash = "sha256-gbYRc8l0MrP7cnp3ggpjXBmXB8IZUXHD8bHgMiu16FM=";
};
meta.homepage = "https://github.com/seblyng/roslyn.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -15906,12 +15906,12 @@ final: prev: {
seoul256-vim = buildVimPlugin {
pname = "seoul256.vim";
version = "0-unstable-2026-04-17";
version = "0-unstable-2026-05-20";
src = fetchFromGitHub {
owner = "junegunn";
repo = "seoul256.vim";
rev = "d8499250154f0b26a398cd76769861afd8fb68fd";
hash = "sha256-dPwFpT8O91uxnxJ9drKvou+quM4iFqFW9EyeAFdWNoU=";
rev = "88997adf362f57c3eadedde6b8c1393fe218c02c";
hash = "sha256-Em9vpXJmUyLfBHOLHVQQUGsOuluwyx+J4Q5vU8akyS0=";
};
meta.homepage = "https://github.com/junegunn/seoul256.vim/";
meta.license = unfree;
@ -16033,12 +16033,12 @@ final: prev: {
smart-splits-nvim = buildVimPlugin {
pname = "smart-splits.nvim";
version = "2.1.0-unstable-2026-05-15";
version = "2.1.0-unstable-2026-05-22";
src = fetchFromGitHub {
owner = "mrjones2014";
repo = "smart-splits.nvim";
rev = "3151100591670148cb0065388117622212208ee3";
hash = "sha256-uRMQy89pDA2LwgDKj2mcvrTLCf7LyCIM2EHdq8EBcq4=";
rev = "b24335c3186b6c35522fa108af63646a2f70b3b6";
hash = "sha256-GNcTzTqwHaiDbMW9tHUYDb0AQsBc3eA608cthW2vN8U=";
};
meta.homepage = "https://github.com/mrjones2014/smart-splits.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -16103,12 +16103,12 @@ final: prev: {
snacks-nvim = buildVimPlugin {
pname = "snacks.nvim";
version = "2.31.0-unstable-2026-03-21";
version = "2.31.0-unstable-2026-05-21";
src = fetchFromGitHub {
owner = "folke";
repo = "snacks.nvim";
rev = "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e";
hash = "sha256-7lDH1JlTM+H/LWjMlAQPNY6A+xmS/cp+wChy4buGYIU=";
rev = "0770753c88228f7f15449c6a5b242e3f7cd0d71c";
hash = "sha256-lMCozVT9RRgJwsudAUrrinI6WdiPb+gykcQe46OmRh4=";
};
meta.homepage = "https://github.com/folke/snacks.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@ -16368,12 +16368,12 @@ final: prev: {
splitjoin-vim = buildVimPlugin {
pname = "splitjoin.vim";
version = "1.2.0-unstable-2026-04-10";
version = "1.2.0-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "AndrewRadev";
repo = "splitjoin.vim";
rev = "8c4c87e72d20d8d5eee8b29c320eb61767578841";
hash = "sha256-6QLiYYanMcJjPcw1pWaYCcsqPijox8E85BF7PwTzyfA=";
rev = "b26971a7fdc7ca645b766459e3ed7949300c404f";
hash = "sha256-IWBFDaltzAhM0QSTPTgb7wdrCM4CysQpaZ3kw0NkQAU=";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/AndrewRadev/splitjoin.vim/";
@ -17142,12 +17142,12 @@ final: prev: {
telescope-frecency-nvim = buildVimPlugin {
pname = "telescope-frecency.nvim";
version = "1.2.2-unstable-2026-05-10";
version = "1.2.2-unstable-2026-05-21";
src = fetchFromGitHub {
owner = "nvim-telescope";
repo = "telescope-frecency.nvim";
rev = "ab7b69366f46a8749e3c3ec21ba0cbc59a440ddd";
hash = "sha256-FVo2odnwxImjSd+mYciHznwrRwY8W80mn4lJtQKAEZE=";
rev = "5479d8a269e30479280c59e44f805396127653e6";
hash = "sha256-gC3pmeBCUPDFvBSNNn6RXAbbeBRcIqiAyZVCO3TKJz4=";
};
meta.homepage = "https://github.com/nvim-telescope/telescope-frecency.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -17231,7 +17231,7 @@ final: prev: {
src = fetchFromGitHub {
owner = "alduraibi";
repo = "telescope-glyph.nvim";
rev = "f63f01e129e71cc25b79637610674bbf0be5ce9d";
rev = "6e0bdece0d0382e664b2dc716a9c5641994148c9";
hash = "sha256-6H4afMXtaZn066oBq3z8vvR7WH7WhqZkvziyOXlsNVg=";
};
meta.homepage = "https://github.com/alduraibi/telescope-glyph.nvim/";
@ -18042,12 +18042,12 @@ final: prev: {
treewalker-nvim = buildVimPlugin {
pname = "treewalker.nvim";
version = "0-unstable-2026-05-08";
version = "0-unstable-2026-05-20";
src = fetchFromGitHub {
owner = "aaronik";
repo = "treewalker.nvim";
rev = "fcaa112f8c3dfba3a91c52a5a95701a7917f61e3";
hash = "sha256-5s3P1xekniVgtEfAwuxbOwGsSi90UuutctVLgXC/C0g=";
rev = "0b081bf6c6875cf3e478b633796a9e2b64b730e8";
hash = "sha256-+TwgQm109yt1LXOWzU+vWjWYVKmZ5snsqRrikUZfVJE=";
};
meta.homepage = "https://github.com/aaronik/treewalker.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -18436,12 +18436,12 @@ final: prev: {
unified-nvim = buildVimPlugin {
pname = "unified.nvim";
version = "0.0.2-unstable-2026-03-05";
version = "0.0.4";
src = fetchFromGitHub {
owner = "axkirillov";
repo = "unified.nvim";
rev = "d4427c8d0d89fc3737bb5f53d56a2ea153c94ec7";
hash = "sha256-BPoSViNDO678SWVaGl9FHfSzWLEbqFR39v+MmfOPSo4=";
tag = "0.0.4";
hash = "sha256-CmMq6Kw5q6vKDj4Tktu7q4YeQHmLVJYa9AN5BTb4V2E=";
};
meta.homepage = "https://github.com/axkirillov/unified.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -18478,12 +18478,12 @@ final: prev: {
unison = buildVimPlugin {
pname = "unison";
version = "1.2.0";
version = "1.3.0";
src = fetchFromGitHub {
owner = "unisonweb";
repo = "unison";
tag = "release/1.2.0";
hash = "sha256-ku6Bxg3jJruYOgrBRUzsankQtNryDmv1nWWjhvdskXs=";
tag = "release/1.3.0";
hash = "sha256-uw1QBTY6Shj2liDdLaoNjqkEAYr5pMG7SfrLuhdDi8k=";
};
meta.homepage = "https://github.com/unisonweb/unison/";
meta.license = unfree;
@ -18618,12 +18618,12 @@ final: prev: {
venv-selector-nvim = buildVimPlugin {
pname = "venv-selector.nvim";
version = "0-unstable-2026-05-18";
version = "0-unstable-2026-05-20";
src = fetchFromGitHub {
owner = "linux-cultist";
repo = "venv-selector.nvim";
rev = "a46c77978abc1aa1b3e17918d964bd30287abb42";
hash = "sha256-dyB/2aPr0XNTi6W1ikRcHQtxaYpe2JiVT5NZhSLpsKg=";
rev = "cc4bb3975de8835291f9bb45889e96c6b2795fc4";
hash = "sha256-+GRJuvsO4nf+RczyDOojfUc+nfsM9JIENUv43fEZPYU=";
};
meta.homepage = "https://github.com/linux-cultist/venv-selector.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@ -22022,12 +22022,12 @@ final: prev: {
vim-lsp-settings = buildVimPlugin {
pname = "vim-lsp-settings";
version = "0.0.1-unstable-2026-04-04";
version = "0.0.1-unstable-2026-05-21";
src = fetchFromGitHub {
owner = "mattn";
repo = "vim-lsp-settings";
rev = "a0ec2ee4e75a14f2471896a1192c1970d7be4258";
hash = "sha256-G7+ToiCUgdwANcPtVZFqBsAEcON+mwgpaRQtOaXtpb8=";
rev = "1558bbaba4cbb593901e3dfc4d0f1a0cd212b09c";
hash = "sha256-wMF4y4eMz7UR50GpBvStDsQ0SpKUt48tll6rqEr6AHY=";
};
meta.homepage = "https://github.com/mattn/vim-lsp-settings/";
meta.license = getLicenseFromSpdxId "MIT";
@ -22162,12 +22162,12 @@ final: prev: {
vim-matchup = buildVimPlugin {
pname = "vim-matchup";
version = "0.8.0-unstable-2026-04-10";
version = "0.8.0-unstable-2026-05-19";
src = fetchFromGitHub {
owner = "andymass";
repo = "vim-matchup";
rev = "dccb2d12ef2a703d2f076b3cda36a3339449d1eb";
hash = "sha256-REbSURtBOLWhjyZyJdEQ4VQXifX6e3bv9+B9PpKlq8o=";
rev = "a2d618496223386844acb5a6763cfc3cc1357af1";
hash = "sha256-6v4kWrOxGvrtSkL7itcxXgOarKWmb0y++8mLnyc1XRI=";
};
meta.homepage = "https://github.com/andymass/vim-matchup/";
meta.license = getLicenseFromSpdxId "MIT";
@ -22302,12 +22302,12 @@ final: prev: {
vim-moonfly-colors = buildVimPlugin {
pname = "vim-moonfly-colors";
version = "0-unstable-2026-04-26";
version = "0-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "bluz71";
repo = "vim-moonfly-colors";
rev = "4ed07bc0c6083cdd547c63f5c245e02c068b0c45";
hash = "sha256-78F44cldvn+D/cfeaSe4A7LURMArCvkUJER22oTUuyM=";
rev = "1c0a9994bb6bb5b43859c67924aabd061c4b7905";
hash = "sha256-x3IbuNHg+y0NtNguJnWCpz3bsj9aR41ecTToUYFQlNM=";
};
meta.homepage = "https://github.com/bluz71/vim-moonfly-colors/";
meta.license = getLicenseFromSpdxId "MIT";
@ -22918,12 +22918,12 @@ final: prev: {
vim-plug = buildVimPlugin {
pname = "vim-plug";
version = "0.14.0-unstable-2026-05-17";
version = "0.14.0-unstable-2026-05-22";
src = fetchFromGitHub {
owner = "junegunn";
repo = "vim-plug";
rev = "d7db1b637c68f7c9a6b4c2c2bc73d8c18e7b40c0";
hash = "sha256-MqmNRtjN/tvDJKZjiUqqzVuq/tvD9OO5bgWmN2Fa058=";
rev = "88e31471818e9a29a8a20a0ee61360cfd7bdc1cd";
hash = "sha256-zdk3aAAH3N8oBxd1if8p42Cp9FIuRCdk5wgivX6IyVw=";
};
meta.homepage = "https://github.com/junegunn/vim-plug/";
meta.license = getLicenseFromSpdxId "MIT";
@ -23827,12 +23827,12 @@ final: prev: {
vim-spirv = buildVimPlugin {
pname = "vim-spirv";
version = "0.5.2-unstable-2026-05-16";
version = "0.5.2-unstable-2026-05-21";
src = fetchFromGitHub {
owner = "kbenzie";
repo = "vim-spirv";
rev = "46a58ad2e5b173ada034e6bfe23f746c29df94a1";
hash = "sha256-DDOxzEp0L1M3hJYkOF1BeEscShaTx5oINuJPE0haJBk=";
rev = "4f35017d1a52c3fa836329a50c29783fc765da5e";
hash = "sha256-xIoJeN7wOM5piBFGBJNzuzguCanAZfBZCZGUPJpV8Jk=";
};
meta.homepage = "https://github.com/kbenzie/vim-spirv/";
meta.license = getLicenseFromSpdxId "MIT";
@ -23841,12 +23841,12 @@ final: prev: {
vim-splunk = buildVimPlugin {
pname = "vim-splunk";
version = "0-unstable-2025-08-25";
version = "0-unstable-2026-05-24";
src = fetchFromGitHub {
owner = "yorokobi";
repo = "vim-splunk";
rev = "b6306fc0105caa3ff9d8a2bb0a858a691a98a4af";
hash = "sha256-cacNP4C9vl4h36GzWrrSZlRg53HelyYt+oXX0krHnyA=";
rev = "003bc863caa442dbcbb711d8c61ad8895c0da47a";
hash = "sha256-KRF707b0O9FuS5R7m688+9x7RxNzRlDFI3Nz2g6nels=";
};
meta.homepage = "https://github.com/yorokobi/vim-splunk/";
meta.license = getLicenseFromSpdxId "Unlicense";
@ -25689,12 +25689,12 @@ final: prev: {
yanky-nvim = buildVimPlugin {
pname = "yanky.nvim";
version = "2.0.0-unstable-2026-03-12";
version = "2.0.0-unstable-2026-05-20";
src = fetchFromGitHub {
owner = "gbprod";
repo = "yanky.nvim";
rev = "784188e0a7363e762e53140f39124d786aec0832";
hash = "sha256-oGiXbSXo48NbaImzIKquEvplPCotLeIs4scvbhO6wyA=";
rev = "b13d318dc7c816e2eee626dde61fa0a7237bc77e";
hash = "sha256-6WukBxyEIc9vEay0vN8R0zfxxU54+bkxLAQzsqc6AA8=";
};
meta.homepage = "https://github.com/gbprod/yanky.nvim/";
meta.license = getLicenseFromSpdxId "WTFPL";
@ -25718,12 +25718,12 @@ final: prev: {
yazi-nvim = buildVimPlugin {
pname = "yazi.nvim";
version = "13.1.5-unstable-2026-05-19";
version = "13.1.6";
src = fetchFromGitHub {
owner = "mikavilpas";
repo = "yazi.nvim";
rev = "cad24771df41423022233f11078087c4c8400e51";
hash = "sha256-ln4eMzgrrdMCQBWJrJaCb3q5VLYFkmWExgTYcp1dL+g=";
tag = "v13.1.6";
hash = "sha256-8NDBtyAWddj4t76Sl0phUdA9pTbEf4Q1RvodDd/bN4w=";
};
meta.homepage = "https://github.com/mikavilpas/yazi.nvim/";
meta.license = getLicenseFromSpdxId "MIT";

View file

@ -446,6 +446,7 @@ rec {
vimBinary = "${vim}/bin/vim";
inherit rtpPath;
};
meta.license = lib.licenses.mit;
} ../hooks/vim-gen-doc-hook.sh
) { };
@ -458,6 +459,7 @@ rec {
vimBinary = "${neovim-unwrapped}/bin/nvim";
inherit rtpPath;
};
meta.license = lib.licenses.mit;
} ../hooks/vim-command-check-hook.sh
) { };
@ -470,6 +472,7 @@ rec {
nvimBinary = "${neovim-unwrapped}/bin/nvim";
inherit rtpPath;
};
meta.license = lib.licenses.mit;
} ../hooks/neovim-require-check-hook.sh
) { };

View file

@ -84,8 +84,8 @@ buildVscodeMarketplaceExtension {
mktplcRef = {
name = "remote-ssh";
publisher = "ms-vscode-remote";
version = "0.122.0";
hash = "sha256-apSBO3hsCSS2XTMQrqr+qqSnv3vRUJQ4U/ZOd4KlUJg=";
version = "0.123.0";
hash = "sha256-/9NyRSNUCx65FOA6w86e2DvrynAHRleIULzDpneV25E=";
};
postPatch = ''

View file

@ -18,6 +18,7 @@ let
substitutions = {
unzip = "${buildPackages.unzip}/bin/unzip";
};
meta.license = lib.licenses.mit;
} ./unpack-vsix-setup-hook.sh;
buildVscodeExtension = lib.extendMkDerivation {
constructDrv = stdenv.mkDerivation;

View file

@ -13,13 +13,13 @@
}:
mkLibretroCore {
core = "ppsspp";
version = "0-unstable-2026-05-17";
version = "0-unstable-2026-05-25";
src = fetchFromGitHub {
owner = "hrydgard";
repo = "ppsspp";
rev = "4fb74aa5a90c8eaededa5ad6883683e6a4271ef0";
hash = "sha256-5xgLQQye9LTQq1QLSphbmNb5vzG6m3MvUslHdeSHpZE=";
rev = "68296a4f75cc3c30b39ea6e82dac8c4e83fd41a4";
hash = "sha256-mME2g2a1HLGsby2ZV5S/brYAeHBhBCIUF5plQMQWLac=";
fetchSubmodules = true;
};

View file

@ -6,13 +6,13 @@
}:
mkLibretroCore {
core = "vice-${type}";
version = "0-unstable-2026-04-23";
version = "0-unstable-2026-05-21";
src = fetchFromGitHub {
owner = "libretro";
repo = "vice-libretro";
rev = "626ee68726035e0bec8c05b702ed3cb378daf4f5";
hash = "sha256-vOZ6EEaJWdMZKIlF7oi3MKkLMjjJfVD1+yxOW+/ZNmU=";
rev = "b0d88812a0af0dcba40041d78709480ad1d90833";
hash = "sha256-OD1OB68g8WxpXLyJ0YIQ9Ys6D4eoARFjjFx+gAdeYGg=";
};
makefile = "Makefile";

View file

@ -78,6 +78,7 @@ let
darwinSuffixSalt = stdenv.cc.suffixSalt;
mingwGccsSuffixSalts = map (gcc: gcc.suffixSalt) mingwGccs;
};
meta.license = lib.licenses.mit;
} ./setup-hook-darwin.sh;
# Building Wine with these flags isn't supported on Darwin. Using any of them will result in an evaluation failures

View file

@ -319,11 +319,11 @@
"vendorHash": null
},
"digitalocean_digitalocean": {
"hash": "sha256-HGPoP6vJ7fVgFrqL92ZeO8Kno6bSGhcsHjqZipo0XoY=",
"hash": "sha256-Ekuvv1D3f+ePvTpuye207/y5HGf+2WqtdeFgQCtjQ2w=",
"homepage": "https://registry.terraform.io/providers/digitalocean/digitalocean",
"owner": "digitalocean",
"repo": "terraform-provider-digitalocean",
"rev": "v2.86.0",
"rev": "v2.87.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
@ -517,11 +517,11 @@
"vendorHash": "sha256-ieYDog2HS8OwfKvzPIsXZcSAsT7D9qzXPXuHhtfthV0="
},
"hashicorp_awscc": {
"hash": "sha256-OC57nzpz8l+26/oBXVCFUMNK+gMlgpEK35uIyG1sFOo=",
"hash": "sha256-kpLC5NdlpBNXj2V0hR8ZvsJjyVgKCXFt7xK8Z7AOyoQ=",
"homepage": "https://registry.terraform.io/providers/hashicorp/awscc",
"owner": "hashicorp",
"repo": "terraform-provider-awscc",
"rev": "v1.84.0",
"rev": "v1.85.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-ryLMz2eh5LO0e6OLJJUoMbM+U53uDTq9sHNcnSuuWt4="
},

View file

@ -74,8 +74,7 @@ stdenv.mkDerivation (finalAttrs: {
meta = {
description = "Advanced IRC bouncer";
homepage = "https://wiki.znc.in/ZNC";
maintainers = with lib.maintainers; [
lnl7
maintainers = [
];
license = lib.licenses.asl20;
platforms = lib.platforms.unix;

View file

@ -0,0 +1,72 @@
diff --git a/aw_notify/main.py b/aw_notify/main.py
index c749725..44dce5a 100644
--- a/aw_notify/main.py
+++ b/aw_notify/main.py
@@ -3,6 +3,7 @@
and send notifications to the user on predefined conditions.
"""
+import asyncio
import logging
import sys
import threading
@@ -23,7 +24,7 @@
import aw_client.queries
import click
from aw_core.log import setup_logging
-from desktop_notifier import DesktopNotifier
+from desktop_notifier import DesktopNotifier, Icon
from typing_extensions import TypeAlias
logger = logging.getLogger(__name__)
@@ -149,11 +150,20 @@ def notify(title: str, msg: str):
if notifier is None:
notifier = DesktopNotifier(
app_name="AW",
- app_icon=f"file://{icon_path}",
+ app_icon=Icon(uri=f"file://{icon_path}"),
notification_limit=10,
)
logger.info(f'Showing: "{title} - {msg}"')
- notifier.send_sync(title=title, message=msg)
+
+ # Get or create event loop
+ try:
+ loop = asyncio.get_running_loop()
+ except RuntimeError:
+ loop = asyncio.new_event_loop()
+ asyncio.set_event_loop(loop)
+
+ # Send notification
+ loop.run_until_complete(notifier.send(title=title, message=msg))
class CategoryAlert:
diff --git a/pyproject.toml b/pyproject.toml
index 314fe2f..0d6d5a9 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -13,15 +13,15 @@ packages = [{include = "aw_notify"}]
aw-notify = "aw_notify.main:main"
[tool.poetry.dependencies]
-python = "^3.9,<3.12"
-aw-client = "^0.5.13"
-desktop-notifier = "^3.4.2"
-rubicon-objc = { version = "^0.4.0", platform = "darwin" }
+python = ">=3.9,<3.14"
+aw-client = "^0.5.15"
+desktop-notifier = "^6.0.0"
+rubicon-objc = { version = "^0.5.0", platform = "darwin" }
[tool.poetry.group.dev.dependencies]
black = "*"
mypy = "*"
-pyinstaller = "^6.6"
-pytest = "^7.4"
+pyinstaller = "^6.12.0"
+pytest = "*"
[build-system]
requires = ["poetry-core"]

View file

@ -159,6 +159,12 @@ rec {
pyproject = true;
build-system = [ python3Packages.poetry-core ];
patches = [
# Backport desktop-notifier 6 / rubicon-objc 0.5 support.
# https://github.com/ActivityWatch/aw-notify/pull/10
./aw-notify-desktop-notifier-6.patch
];
dependencies = with python3Packages; [
aw-client
desktop-notifier

View file

@ -400,7 +400,7 @@ in
# https://github.com/moby/moby/tree/${mobyRev}/Dockerfile
docker_25 =
let
version = "25.0.13";
version = "25.0.16";
in
callPackage dockerGen {
inherit version;
@ -409,7 +409,7 @@ in
cliRev = "43987fca488a535d810c429f75743d8c7b63bf4f";
cliHash = "sha256-OwufdfuUPbPtgqfPeiKrQVkOOacU2g4ommHb770gV40=";
mobyRev = "v${version}";
mobyHash = "sha256-X+1QG/toJt+VNLktR5vun8sG3PRoTVBAcekFXxocJdU=";
mobyHash = "sha256-St5yLoxo8QUTu7PjNcblS/EzZm98T189RPl1y+pAyHA=";
runcRev = "v1.2.5";
runcHash = "sha256-J/QmOZxYnMPpzm87HhPTkYdt+fN+yeSUu2sv6aUeTY4=";
containerdRev = "v1.7.27";

View file

@ -15,16 +15,20 @@
substitutions.python3 = lib.getExe (python3.withPackages (ps: with ps; [ pyyaml ]));
substitutions.packageGraphScript = ../../pub2nix/package-graph.py;
substitutions.workspacePackageConfigScript = ../workspace-package-config.py;
meta.license = lib.licenses.mit;
} ./dart-config-hook.sh;
dartBuildHook = makeSetupHook {
name = "dart-build-hook";
substitutions.yq = "${yq}/bin/yq";
substitutions.jq = "${jq}/bin/jq";
meta.license = lib.licenses.mit;
} ./dart-build-hook.sh;
dartInstallHook = makeSetupHook {
name = "dart-install-hook";
meta.license = lib.licenses.mit;
} ./dart-install-hook.sh;
dartFixupHook = makeSetupHook {
name = "dart-fixup-hook";
meta.license = lib.licenses.mit;
} ./dart-fixup-hook.sh;
}

View file

@ -1,10 +1,11 @@
{ callPackage }:
{ lib, callPackage }:
{
dubSetupHook = callPackage (
{ makeSetupHook }:
makeSetupHook {
name = "dub-setup-hook";
meta.license = lib.licenses.mit;
} ./dub-setup-hook.sh
) { };
@ -13,6 +14,7 @@
makeSetupHook {
name = "dub-build-hook";
propagatedBuildInputs = [ dub ];
meta.license = lib.licenses.mit;
} ./dub-build-hook.sh
) { };
@ -21,6 +23,7 @@
makeSetupHook {
name = "dub-check-hook";
propagatedBuildInputs = [ dub ];
meta.license = lib.licenses.mit;
} ./dub-check-hook.sh
) { };
}

View file

@ -1,8 +1,8 @@
{ callPackage }:
{ lib, callPackage }:
{
dub-to-nix = callPackage ./dub-to-nix { };
importDubLock = callPackage ./builddubpackage/import-dub-lock.nix { };
buildDubPackage = callPackage ./builddubpackage { };
}
// import ./builddubpackage/hooks { inherit callPackage; }
// import ./builddubpackage/hooks { inherit lib callPackage; }

View file

@ -11,4 +11,5 @@ makeSetupHook {
shell = lib.getExe bash;
patchcil = lib.getExe patchcil;
};
meta.license = lib.licenses.mit;
} ./auto-patchcil.sh

View file

@ -15,4 +15,5 @@ makeSetupHook {
coreutils
];
};
meta.license = lib.licenses.mit;
} ./dotnet-hook.sh

View file

@ -31,10 +31,12 @@
nodeVersion = nodejs.version;
nodeVersionMajor = lib.versions.major nodejs.version;
};
meta.license = lib.licenses.mit;
} ./npm-config-hook.sh;
npmBuildHook = makeSetupHook {
name = "npm-build-hook";
meta.license = lib.licenses.mit;
} ./npm-build-hook.sh;
npmInstallHook = makeSetupHook {
@ -50,5 +52,6 @@
substitutions = {
jq = "${jq}/bin/jq";
};
meta.license = lib.licenses.mit;
} ./npm-install-hook.sh;
}

View file

@ -249,5 +249,6 @@ in
npmArch = stdenvNoCC.targetPlatform.node.arch;
npmPlatform = stdenvNoCC.targetPlatform.node.platform;
};
meta.license = lib.licenses.mit;
} ./pnpm-config-hook.sh;
}

View file

@ -180,6 +180,7 @@ in
};
meta = {
description = "Install nodejs dependencies from an offline yarn cache produced by fetchYarnDeps";
license = lib.licenses.mit;
};
} ./yarn-config-hook.sh;
@ -187,6 +188,7 @@ in
name = "yarn-build-hook";
meta = {
description = "Run yarn build in buildPhase";
license = lib.licenses.mit;
};
} ./yarn-build-hook.sh;
@ -202,6 +204,7 @@ in
};
meta = {
description = "Prune yarn dependencies and install files for packages using Yarn 1";
license = lib.licenses.mit;
};
} ./yarn-install-hook.sh;
}

View file

@ -14,6 +14,7 @@
canonicalizeSymlinksScript = ./canonicalize-symlinks.js;
storePrefix = builtins.storeDir;
};
meta.license = lib.licenses.mit;
} ./npm-config-hook.sh;
linkNodeModulesHook = makeSetupHook {
@ -23,5 +24,6 @@
script = ./link-node-modules.js;
storePrefix = builtins.storeDir;
};
meta.license = lib.licenses.mit;
} ./link-node-modules-hook.sh;
}

View file

@ -26,6 +26,7 @@ in
substitutions = {
phpScriptUtils = lib.getExe php-script-utils;
};
meta.license = lib.licenses.mit;
} ./composer-repository-hook.sh;
composerInstallHook = makeSetupHook {
@ -42,6 +43,7 @@ in
cmp = "${lib.getBin buildPackages.diffutils}/bin/cmp";
phpScriptUtils = lib.getExe php-script-utils;
};
meta.license = lib.licenses.mit;
} ./composer-install-hook.sh;
composerWithPluginVendorHook = makeSetupHook {
@ -58,5 +60,6 @@ in
cmp = "${lib.getBin buildPackages.diffutils}/bin/cmp";
phpScriptUtils = lib.getExe php-script-utils;
};
meta.license = lib.licenses.mit;
} ./composer-with-plugin-vendor-hook.sh;
}

View file

@ -26,6 +26,7 @@ in
substitutions = {
phpScriptUtils = lib.getExe php-script-utils;
};
meta.license = lib.licenses.mit;
} ./composer-vendor-hook.sh;
composerInstallHook = makeSetupHook {
@ -42,5 +43,6 @@ in
cmp = "${lib.getBin buildPackages.diffutils}/bin/cmp";
phpScriptUtils = lib.getExe php-script-utils;
};
meta.license = lib.licenses.mit;
} ./composer-install-hook.sh;
}

View file

@ -107,6 +107,7 @@ stdenv.mkDerivation {
wrapperName
;
};
meta.license = lib.licenses.mit;
} ../setup-hooks/role.bash;
setupHook = makeSetupHook {
name = "pkgs-config-setup-hook";
@ -116,6 +117,7 @@ stdenv.mkDerivation {
baseBinName
;
};
meta.license = lib.licenses.mit;
} ./setup-hook.sh;
in
[

View file

@ -30,6 +30,7 @@
// lib.optionalAttrs (stdenv.hostPlatform.isLinux) {
testCross = pkgsCross.riscv64.tests.rust-hooks.cargoBuildHook;
};
meta.license = lib.licenses.mit;
} ./cargo-build-hook.sh;
cargoCheckHook = makeSetupHook {
@ -44,6 +45,7 @@
// lib.optionalAttrs (stdenv.hostPlatform.isLinux) {
testCross = pkgsCross.riscv64.tests.rust-hooks.cargoCheckHook;
};
meta.license = lib.licenses.mit;
} ./cargo-check-hook.sh;
cargoInstallHook = makeSetupHook {
@ -57,6 +59,7 @@
// lib.optionalAttrs (stdenv.hostPlatform.isLinux) {
testCross = pkgsCross.riscv64.tests.rust-hooks.cargoInstallHook;
};
meta.license = lib.licenses.mit;
} ./cargo-install-hook.sh;
cargoNextestHook = makeSetupHook {
@ -71,6 +74,7 @@
// lib.optionalAttrs (stdenv.hostPlatform.isLinux) {
testCross = pkgsCross.riscv64.tests.rust-hooks.cargoNextestHook;
};
meta.license = lib.licenses.mit;
} ./cargo-nextest-hook.sh;
cargoSetupHook = makeSetupHook {
@ -110,6 +114,7 @@
// lib.optionalAttrs (stdenv.hostPlatform.isLinux) {
testCross = pkgsCross.riscv64.tests.rust-hooks.cargoSetupHook;
};
meta.license = lib.licenses.mit;
} ./cargo-setup-hook.sh;
maturinBuildHook = makeSetupHook {
@ -124,6 +129,7 @@
inherit (rust.envVars) setEnv;
};
meta.license = lib.licenses.mit;
} ./maturin-build-hook.sh;
bindgenHook = makeSetupHook {
@ -132,5 +138,6 @@
libclang = (lib.getLib clang.cc);
inherit clang;
};
meta.license = lib.licenses.mit;
} ./rust-bindgen-hook.sh;
}

View file

@ -1,4 +1,5 @@
{
lib,
callPackages,
isDeclaredArray,
makeSetupHook,
@ -11,5 +12,8 @@ makeSetupHook {
patchelf
];
passthru.tests = callPackages ./tests.nix { };
meta.description = "Appends runpath entries of a file to an array";
meta = {
description = "Appends runpath entries of a file to an array";
license = lib.licenses.mit;
};
} ./getRunpathEntries.bash

View file

@ -1,4 +1,5 @@
{
lib,
callPackages,
isDeclaredArray,
isDeclaredMap,
@ -13,5 +14,8 @@ makeSetupHook {
sortArray
];
passthru.tests = callPackages ./tests.nix { };
meta.description = "Gets the sorted indices of an associative array";
meta = {
description = "Gets the sorted indices of an associative array";
license = lib.licenses.mit;
};
} ./getSortedMapKeys.bash

View file

@ -1,9 +1,13 @@
{
lib,
callPackages,
makeSetupHook,
}:
makeSetupHook {
name = "isDeclaredArray";
passthru.tests = callPackages ./tests.nix { };
meta.description = "Tests if an array is declared";
meta = {
description = "Tests if an array is declared";
license = lib.licenses.mit;
};
} ./isDeclaredArray.bash

View file

@ -1,9 +1,13 @@
{
lib,
callPackages,
makeSetupHook,
}:
makeSetupHook {
name = "isDeclaredMap";
passthru.tests = callPackages ./tests.nix { };
meta.description = "Tests if an associative array is declared";
meta = {
description = "Tests if an associative array is declared";
license = lib.licenses.mit;
};
} ./isDeclaredMap.bash

View file

@ -1,4 +1,5 @@
{
lib,
callPackages,
isDeclaredArray,
makeSetupHook,
@ -7,5 +8,8 @@ makeSetupHook {
name = "sortArray";
propagatedBuildInputs = [ isDeclaredArray ];
passthru.tests = callPackages ./tests.nix { };
meta.description = "Sorts an array";
meta = {
description = "Sorts an array";
license = lib.licenses.mit;
};
} ./sortArray.bash

View file

@ -1,2 +1,8 @@
{ makeSetupHook }:
makeSetupHook { name = "flatten-include-hack-hook"; } ./flatten-include-hack-hook.sh
{
lib,
makeSetupHook,
}:
makeSetupHook {
name = "flatten-include-hack-hook";
meta.license = lib.licenses.mit;
} ./flatten-include-hack-hook.sh

View file

@ -12,6 +12,7 @@ in
name = "patch-rc-path-bash";
meta = {
description = "Setup-hook to inject source-time PATH prefix to a Bash/Ksh/Zsh script";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ ShamrockLee ];
};
passthru.tests = {
@ -25,6 +26,7 @@ in
};
meta = {
description = "Setup-hook to inject source-time PATH prefix to a Csh script";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ ShamrockLee ];
};
passthru.tests = {
@ -35,6 +37,7 @@ in
name = "patch-rc-path-fish";
meta = {
description = "Setup-hook to inject source-time PATH prefix to a Fish script";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ ShamrockLee ];
};
passthru.tests = {
@ -48,6 +51,7 @@ in
};
meta = {
description = "Setup-hook to inject source-time PATH prefix to a POSIX shell script";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ ShamrockLee ];
};
passthru.tests = {

View file

@ -51,6 +51,7 @@ makeSetupHook {
# D-Bus service enabled globally (e.g. through a NixOS module).
dconf.lib
];
meta.license = lib.licenses.mit;
passthru = {
tests =
let

View file

@ -0,0 +1,53 @@
diff --git a/acl2.lisp b/acl2.lisp
index 036657d902..c2b7e4fad9 100644
--- a/acl2.lisp
+++ b/acl2.lisp
@@ -1963,11 +1963,7 @@ ACL2 from scratch.")
(* *my-most-positive-double-float*
*my-most-positive-double-float*)
(error () 0.0d0))
- 'double-float))
- #+sbcl
- (member :overflow
- (cadr (member :traps
- (sb-int:get-floating-point-modes)))))
+ 'double-float)))
(error "This Lisp is unsuitable for ACL2, because it failed ~%a check that ~
floating-point overflow causes an error."))
diff --git a/float-raw.lisp b/float-raw.lisp
index 1364491fdf..e6d0417971 100644
--- a/float-raw.lisp
+++ b/float-raw.lisp
@@ -46,13 +46,13 @@
; #.*infinity-double* and #.*negative-infinity-double*), so we do so, but we
; don't bother testing for Nan in LispWorks.
-; We return form unchanged in other than Allegro CL and LispWorks, because we
+; We return form unchanged in other than Allegro CL, LispWorks, and SBCL, because we
; already know that an error is signalled on overflow for other Lisps that host
; ACL2; see break-on-overflow-and-nan.
- #-(or allegro lispworks)
+ #-(or allegro lispworks sbcl)
(declare (ignore op))
- #-(or allegro lispworks)
+ #-(or allegro lispworks sbcl)
form
#+allegro
`(let ((result ,form))
@@ -65,6 +65,14 @@
(when (or (= result +1D++0) (= result -1D++0))
(error "Floating-point overflow for a call of ~s"
',op))
+ result)
+ #+sbcl
+ `(let ((result ,form))
+ (when (or (sb-ext:float-nan-p result)
+ (= result sb-ext:double-float-positive-infinity)
+ (= result sb-ext:double-float-negative-infinity))
+ (error "Floating-point exception for a call of ~s"
+ ',op))
result))
(defmacro defun-df-binary (name op)

View file

@ -62,6 +62,13 @@ stdenv.mkDerivation rec {
libssl = "${lib.getLib openssl}/lib/libssl${stdenv.hostPlatform.extensions.sharedLibrary}";
libcrypto = "${lib.getLib openssl}/lib/libcrypto${stdenv.hostPlatform.extensions.sharedLibrary}";
})
]
++ lib.optionals (stdenv.hostPlatform.system == "aarch64-linux") [
# ACL2 8.6 assumes SBCL can enable floating-point traps. On
# aarch64-linux, SBCL can leave :TRAPS NIL after enabling them, so use
# ACL2's existing exceptional-float checking path instead. See:
# https://github.com/acl2-devel/acl2-devel/commit/0632b37adffb6b5fd71d8438d519133281f837ec
./0002-sbcl-fp-trap-fallback.patch
];
# We need the timestamps on the source tree to be stable for certification to

View file

@ -11,4 +11,6 @@ makeSetupHook {
# hardware drivers installed by NixOS
driverLink = "/run/opengl-driver" + lib.optionalString stdenv.hostPlatform.isi686 "-32";
};
meta.license = lib.licenses.mit;
} ./setup-hook.sh

View file

@ -9,15 +9,15 @@
buildGoModule (finalAttrs: {
pname = "adguardhome";
version = "0.107.74";
version = "0.107.76";
src = fetchFromGitHub {
owner = "AdguardTeam";
repo = "AdGuardHome";
tag = "v${finalAttrs.version}";
hash = "sha256-cAuthACY/rBVRTSv/UIarhScm+EoTUhnkQ0RUtvhAFg=";
hash = "sha256-CF1Ieu7oCnzvXwoHzX5126gQGcgXL+giMtUciKBZ2ZU=";
};
vendorHash = "sha256-o4hpiqQEt8gkYFeAkxPDisvLWbi7WOBZ7xMXrPt6Cdo=";
vendorHash = "sha256-tHabP5I7PZtDkVucF95StRyXGEsfbuc6Z3AhQZ/g2f8=";
dashboard = buildNpmPackage {
inherit (finalAttrs) src version;
@ -25,7 +25,7 @@ buildGoModule (finalAttrs: {
postPatch = ''
cd client
'';
npmDepsHash = "sha256-SOHmXvGLpjs8h0X+AJ6/jAYpxzoizhwRjIzx4SqJOCo=";
npmDepsHash = "sha256-Yyv8dTKhZ9IlIW/x/57cl/+cpvjjycaFLSyOR0IiIPk=";
npmBuildScript = "build-prod";
postBuild = ''
mkdir -p $out/build/

View file

@ -48,7 +48,7 @@ stdenv.mkDerivation (finalAttrs: {
];
# To avoid compiler error in LoadDataBase.c:366:27
env.NIX_CFLAGS_COMPILE = "-Wno-incompatible-pointer-types";
env.NIX_CFLAGS_COMPILE = "-std=gnu99 -Wno-incompatible-pointer-types";
postPatch = ''
# texlive for docs seems extreme
@ -77,6 +77,5 @@ stdenv.mkDerivation (finalAttrs: {
license = with lib.licenses; gpl2Plus;
maintainers = [ ];
platforms = with lib.platforms; linux;
broken = true;
};
})

View file

@ -52,7 +52,7 @@ stdenv.mkDerivation (finalAttrs: {
installPhase = ''
runHook preInstall
install -Dm755 antigravity $out/bin/antigravity-cli
install -Dm755 antigravity $out/bin/agy
runHook postInstall
'';
@ -70,7 +70,7 @@ stdenv.mkDerivation (finalAttrs: {
license = lib.licenses.unfree;
maintainers = with lib.maintainers; [ u3kkasha ];
platforms = lib.attrNames sources;
mainProgram = "antigravity-cli";
mainProgram = "agy";
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
})

View file

@ -1,9 +1,14 @@
{ makeSetupHook, sdkVersion }:
{
lib,
makeSetupHook,
sdkVersion,
}:
self: super: {
passthru = super.passthru or { } // {
privateFrameworksHook = makeSetupHook {
name = "apple-sdk-private-frameworks-hook";
meta.license = lib.licenses.mit;
} ../setup-hooks/add-private-frameworks.sh;
};
}

View file

@ -0,0 +1,6 @@
#ifdef __CLING__
#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ class TFileString+;
#endif

View file

@ -0,0 +1,6 @@
#ifdef __CLING__
#pragma link off all globals;
#pragma link off all classes;
#pragma link off all functions;
#pragma link C++ class TFileVector+;
#endif

View file

@ -0,0 +1,10 @@
--- a/configure
+++ b/configure
@@ -16130,7 +16130,6 @@
$as_echo "$as_me: WARNING: ****************************************************************" >&2;}
fi
-( echo $CXXFLAGS | grep -q "m64" ) || CXXFLAGS+=" -m64 "

View file

@ -18,7 +18,26 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-h+ZNGj33FIwg4fOCyfGJrUKM2vDDQl76JcLhtboAOtc=";
};
patches = [
# Upstream's configure unconditionally injects `-m64` into CXXFLAGS, which is
# invalid on aarch64 (and redundant on x86_64). The line was added in r1946
# for applgrid 1.6.17 with the commit message "add default m64 compilation".
# There is no public bug tracker upstream, and the line is still present in
# trunk. We patch only the generated `configure` (not `configure.ac`) so
# that make doesn't try to re-run autotools during the build.
./no-m64.patch
# ROOT 6.40 made rootcling fail when no selection rules are provided
# (https://root.cern/doc/v640/release-notes.html#core-libraries). The patch
# appends $*LinkDef.h to the dictionary pattern rule so rootcint picks up
# the LinkDef.h files we drop into src/ in postPatch.
./rootcling-linkdef.patch
];
postPatch = ''
cp ${./TFileStringLinkDef.h} src/TFileStringLinkDef.h
cp ${./TFileVectorLinkDef.h} src/TFileVectorLinkDef.h
sed -i appl_grid/serialise_base.h -e '1i#include <cstdint>'
'';

View file

@ -0,0 +1,11 @@
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1027,7 +1027,7 @@
$(CC) $(AM_CFLAGS) -c $<
@USE_ROOT_TRUE@%Dict.cxx : %.h %.cxx
-@USE_ROOT_TRUE@ $(CINT) -f $@ -c $< -I..
+@USE_ROOT_TRUE@ $(CINT) -f $@ -c $< -I.. $*LinkDef.h
#../appl_grid/$*LinkDef.h

View file

@ -0,0 +1,51 @@
{
lib,
buildNpmPackage,
fetchFromGitHub,
versionCheckHook,
}:
buildNpmPackage (finalAttrs: {
pname = "asyncapi";
version = "6.0.0";
src = fetchFromGitHub {
owner = "asyncapi";
repo = "cli";
tag = "v${finalAttrs.version}";
hash = "sha256-AvEzwUMXZZRexlcYbD4iW2GYmndN0usFxYJclXst57g=";
};
npmDepsHash = "sha256-f+1KRqPIufMoSv6pa7CAd8fvG8uigNjr6QE6leVCtUI=";
env.PUPPETEER_SKIP_DOWNLOAD = "true";
postPatch = ''
# The build script fetches AsyncAPI examples from the internet.
# Replace with a no-op since the CLI works without bundled examples.
mkdir -p assets/examples
echo '[]' > assets/examples/examples.json
substituteInPlace package.json \
--replace-fail "node scripts/fetch-asyncapi-example.js && " ""
# The logger tries to create a logs directory relative to __dirname,
# which ends up inside the read-only Nix store. Use a writable path instead.
substituteInPlace src/utils/logger.ts \
--replace-fail "path.join(__dirname, config.has('log.dir') ? config.get('log.dir') : 'logs')" \
"path.join(process.env.XDG_STATE_HOME || path.join(require('os').homedir(), '.local', 'state'), 'asyncapi', 'logs')" \
--replace-fail "fs.mkdirSync(logDir)" \
"fs.mkdirSync(logDir, { recursive: true })"
'';
doInstallCheck = true;
nativeInstallCheckInputs = [ versionCheckHook ];
meta = {
description = "CLI to work with your AsyncAPI files. You can validate them and in the future use a generator and even bootstrap a new file";
homepage = "https://www.asyncapi.com/tools/cli";
changelog = "https://github.com/asyncapi/cli/releases/tag/v${finalAttrs.version}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ pmyjavec ];
mainProgram = "asyncapi";
};
})

View file

@ -18,13 +18,13 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "attyx";
version = "0.4.0";
version = "0.4.2";
src = fetchFromGitHub {
owner = "semos-labs";
repo = "attyx";
tag = "v${finalAttrs.version}";
hash = "sha256-9OTvpkkIo6pb9G2mvlNeZrwyOwIhAM7f9zy1LJzxJG0=";
hash = "sha256-b8a/fLW4jeek5KckBWmd+fIhN6S2JoNvxAW2zBCokiY=";
};
deps = callPackage ./build.zig.zon.nix { };

View file

@ -10,16 +10,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "atuin";
version = "18.15.2";
version = "18.16.1";
src = fetchFromGitHub {
owner = "atuinsh";
repo = "atuin";
tag = "v${finalAttrs.version}";
hash = "sha256-EzN42LMe21XqxlAwhAdk1bO4nsV2WumuBKjazHcoe+4=";
hash = "sha256-XrJFetPs7TsbX5Cxekj+h3hlmQLoOpB7U+c36NM/jeA=";
};
cargoHash = "sha256-QMLEbki3QhAxEd0Wuzfs7UN1O/MaEQ/ggxA6cFGDL6U=";
cargoHash = "sha256-eqxeE7+UxBTdaYjlonOz6pYQ3mar8lNUd/K0CSuzquc=";
# atuin's default features include 'check-updates', which do not make sense
# for distribution builds. List all other default features.

View file

@ -1,4 +1,5 @@
{
lib,
addDriverRunpath,
autoFixElfFiles,
makeSetupHook,
@ -10,4 +11,5 @@ makeSetupHook {
addDriverRunpath
autoFixElfFiles
];
meta.license = lib.licenses.mit;
} ./auto-add-driver-runpath-hook.sh

View file

@ -1,5 +1,9 @@
{ makeSetupHook }:
{
lib,
makeSetupHook,
}:
makeSetupHook {
name = "auto-fix-elf-files";
meta.license = lib.licenses.mit;
} ./auto-fix-elf-files.sh

View file

@ -10,15 +10,15 @@
}:
buildGoModule (finalAttrs: {
pname = "aws-sso-cli";
version = "2.1.0";
version = "2.2.4";
src = fetchFromGitHub {
owner = "synfinatic";
repo = "aws-sso-cli";
rev = "v${finalAttrs.version}";
hash = "sha256-MomH4Zcc6iyVmLfA0PPsWgEqMBAAaPd+21NX4GdnFk0=";
hash = "sha256-JkCHzIbIeFvmXrIkQaybjUtPDzmZ2XPv6tz3fA6ni44=";
};
vendorHash = "sha256-Le5BOD/iBIMQwTNmb7JcW8xJS7WG5isf4HXpJxyvez0=";
vendorHash = "sha256-euqhgbyz8H/fQ1RAP0k4GMOjOu7gVeYzQv75tjCh5z0=";
nativeBuildInputs = [
makeWrapper
@ -46,14 +46,18 @@ buildGoModule (finalAttrs: {
checkFlags =
let
skippedTests = [
"TestAWSConsoleUrl"
"TestAWSFederatedUrl"
"TestServerWithSSL" # https://github.com/synfinatic/aws-sso-cli/issues/1030 -- remove when version >= 2.x
"TestAWSConsoleUrlChina"
"TestAWSConsoleUrlEU"
"TestAWSConsoleUrlUSEast"
"TestAWSConsoleUrlUSGov"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [ "TestDetectShellBash" ];
in
[ "-skip=^${builtins.concatStringsSep "$|^" skippedTests}$" ];
__darwinAllowLocalNetworking = true;
meta = {
homepage = "https://github.com/synfinatic/aws-sso-cli";
description = "AWS SSO CLI is a secure replacement for using the aws configure sso wizard";

View file

@ -3,7 +3,8 @@
lib,
stdenv,
libiconv,
texliveFull,
libxslt,
texliveBasic,
xercesc,
}:
@ -21,13 +22,13 @@ stdenv.mkDerivation (finalAttrs: {
postPatch =
lib.optionalString stdenv.cc.isClang ''
substituteInPlace makefile \
--replace "\$(CXX)" "\$(CXX) -std=c++98"
--replace-fail "\$(CXX)" "\$(CXX) -std=c++98"
''
+
# fix the doc build on TeX Live 2023
''
substituteInPlace Documentation/manual.tex \
--replace '\usepackage[utf8x]{inputenc}' '\usepackage[utf8]{inputenc}'
--replace-fail '\usepackage[utf8x]{inputenc}' '\usepackage[utf8]{inputenc}'
'';
outputs = [
@ -35,7 +36,13 @@ stdenv.mkDerivation (finalAttrs: {
"doc"
];
nativeBuildInputs = [ texliveFull ]; # scheme-full needed for ucs package
nativeBuildInputs = [
libxslt
(texliveBasic.withPackages (ps: [
ps.cm-super
ps.ucs
]))
];
buildInputs = [ xercesc ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ libiconv ];
buildFlags = [

View file

@ -9,6 +9,7 @@
wrapGAppsHook4,
appstream-glib,
desktop-file-utils,
fvs2,
librsvg,
gtk4,
gtksourceview5,
@ -87,7 +88,6 @@ python3Packages.buildPythonApplication (finalAttrs: {
icoextract
patool
pathvalidate
fvs
orjson
pycairo
pygobject3
@ -110,6 +110,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
gamescope
mangohud
vmtouch
fvs2
# Undocumented (subprocess.Popen())
lsb-release

View file

@ -22,7 +22,10 @@ in
makeSetupHook {
name = "breakpoint-hook";
meta.broken = !stdenv.buildPlatform.isLinux;
meta = {
broken = !stdenv.buildPlatform.isLinux;
license = lib.licenses.mit;
};
substitutions = {
attach = "${attach}/bin/attach";
# The default interactive shell in case $debugShell is not set in the derivation.

View file

@ -1,6 +1,13 @@
{ stdenv, makeSetupHook }:
{
lib,
stdenv,
makeSetupHook,
}:
makeSetupHook {
name = "breakpoint-hook";
meta.broken = !stdenv.buildPlatform.isLinux;
meta = {
broken = !stdenv.buildPlatform.isLinux;
license = lib.licenses.mit;
};
} ./breakpoint-hook.sh

View file

@ -23,13 +23,13 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "buildbox";
version = "1.4.6";
version = "1.4.7";
src = fetchFromGitLab {
owner = "BuildGrid";
repo = "buildbox/buildbox";
tag = finalAttrs.version;
hash = "sha256-zNZMk9C/KsiqqGZOzc6B1WjL4wemWmdrr0a+CMA2BlQ=";
hash = "sha256-+OK9rmAGGLq/rJIHs++dbdyvh6WFu+Xhcp48TpnYV0w=";
};
nativeBuildInputs = [

View file

@ -5,7 +5,7 @@
}:
buildGoModule (finalAttrs: {
pname = "buildkite-agent-metrics";
version = "5.12.2";
version = "5.12.3";
__darwinAllowLocalNetworking = true;
@ -18,7 +18,7 @@ buildGoModule (finalAttrs: {
owner = "buildkite";
repo = "buildkite-agent-metrics";
rev = "v${finalAttrs.version}";
hash = "sha256-O/6YGxX7sJEaqmMMzOPxkiIWJs1VRa+tgZ2w8UjfoKk=";
hash = "sha256-h6RPAqRNCcsT49d+D+q3FShoPZK4z7e8JCkB1FOHgNY=";
};
vendorHash = "sha256-2os2V1iyw1k6XwX2wLz0abMnu+X5p+Aqau7ajC3JIRc=";
@ -35,5 +35,6 @@ buildGoModule (finalAttrs: {
description = "Command-line tool (and Lambda) for collecting Buildkite agent metrics";
homepage = "https://github.com/buildkite/buildkite-agent-metrics";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ cbrxyz ];
};
})

View file

@ -23,7 +23,7 @@
optipng,
piper-tts,
pkg-config,
podofo_0_10,
podofo0,
poppler-utils,
python314Packages,
qt6,
@ -103,7 +103,7 @@ stdenv.mkDerivation (finalAttrs: {
libuchardet
libusb1
onnxruntime
podofo_0_10
podofo0
poppler-utils
qt6.qtbase
qt6.qtwayland
@ -170,8 +170,8 @@ stdenv.mkDerivation (finalAttrs: {
MAGICK_LIB = "${lib.getLib imagemagick}/lib";
FC_INC_DIR = "${lib.getDev fontconfig}/include/fontconfig";
FC_LIB_DIR = "${lib.getLib fontconfig}/lib";
PODOFO_INC_DIR = "${lib.getDev podofo_0_10}/include/podofo";
PODOFO_LIB_DIR = "${lib.getLib podofo_0_10}/lib";
PODOFO_INC_DIR = "${lib.getDev podofo0}/include/podofo";
PODOFO_LIB_DIR = "${lib.getLib podofo0}/lib";
XDG_DATA_HOME = "${placeholder "out"}/share";
XDG_UTILS_INSTALL_MODE = "user";
}

View file

@ -14,16 +14,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "cargo-dist";
version = "0.31.0";
version = "0.32.0";
src = fetchFromGitHub {
owner = "axodotdev";
repo = "cargo-dist";
tag = "v${finalAttrs.version}";
hash = "sha256-BSE3pXo7Kk104v7VEh5WUk+Km1/n/kNf8NJGVGjUKoc=";
hash = "sha256-WNbo3sm5tSNYQMLB4bjiNtLwp5pD4KAoyG2lwWYEpzk=";
};
cargoHash = "sha256-bfX2Yt0wrPg1pbvYdr2O9VUqYlCFVRh4PIABWxZTgjg=";
cargoHash = "sha256-gzaDAGAjWDcJyoES0foFOyhTP4HDsaQHrrwCQmAzXZA=";
nativeBuildInputs = [
pkg-config

View file

@ -77,5 +77,6 @@ makeSetupHook {
inherit (cargo-tauri.meta) maintainers broken;
# Platforms that Tauri supports bundles for
platforms = lib.platforms.darwin ++ lib.platforms.linux;
license = lib.licenses.mit;
};
} ./hook.sh

View file

@ -1,24 +0,0 @@
diff --git a/cccc/cccc_tbl.cc b/cccc/cccc_tbl.cc
index df98e2b..59f2572 100644
--- a/cccc/cccc_tbl.cc
+++ b/cccc/cccc_tbl.cc
@@ -96,7 +96,7 @@ bool CCCC_Table<T>::remove(T* old_item_ptr)
typename map_t::iterator value_iterator=map_t::find(old_item_ptr->key());
if(value_iterator!=map_t::end())
{
- erase(value_iterator);
+ map_t::erase(value_iterator);
retval=true;
}
return retval;
diff --git a/makefile b/makefile
index 23ad004..2cca469 100644
--- a/makefile
+++ b/makefile
@@ -20,5 +20,5 @@ test :
cd test ; make -f posix.mak
install :
- cd install ; su root -c "make -f install.mak"
+ cd install ; make -f install.mak

View file

@ -1,31 +1,38 @@
{
lib,
stdenv,
fetchurl,
fetchFromGitHub,
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "cccc";
version = "3.1.4";
version = "3.2.0";
src = fetchurl {
url = "mirror://sourceforge/cccc/${version}/cccc-${version}.tar.gz";
sha256 = "1gsdzzisrk95kajs3gfxks3bjvfd9g680fin6a9pjrism2lyrcr7";
src = fetchFromGitHub {
owner = "sarnold";
repo = "cccc";
tag = finalAttrs.version;
sha256 = "sha256-5UgCz9zURD+LsMB3kLSdkS1zFOTCuU16hK253GFu9HU";
};
hardeningDisable = [ "format" ];
patches = [ ./cccc.patch ];
preConfigure = ''
substituteInPlace install/install.mak --replace /usr/local/bin $out/bin
substituteInPlace install/install.mak --replace MKDIR=mkdir "MKDIR=mkdir -p"
'';
buildFlags = [
"CCC=c++"
"LD=c++"
];
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp cccc/cccc $out/bin/
runHook postInstall
'';
env.NIX_CFLAGS_COMPILE = "-Wno-register " + lib.optionalString stdenv.cc.isGNU "-std=gnu17";
meta = {
description = "C and C++ Code Counter";
mainProgram = "cccc";
@ -34,13 +41,9 @@ stdenv.mkDerivation rec {
on various metrics of the code. Metrics supported include lines of code, McCabe's
complexity and metrics proposed by Chidamber&Kemerer and Henry&Kafura.
'';
homepage = "https://cccc.sourceforge.net/";
homepage = "https://github.com/sarnold/cccc";
license = lib.licenses.gpl2;
platforms = lib.platforms.unix;
maintainers = [ ];
# The last successful Darwin Hydra build was in 2023
# On linux fails to build on gcc-15, needs porting to c23, but
# the upstream code did not update since 2006.
broken = true;
maintainers = with lib.maintainers; [ tbutter ];
};
}
})

View file

@ -6,16 +6,16 @@
buildGoModule (finalAttrs: {
pname = "cdncheck";
version = "1.2.36";
version = "1.2.37";
src = fetchFromGitHub {
owner = "projectdiscovery";
repo = "cdncheck";
tag = "v${finalAttrs.version}";
hash = "sha256-hDcGf7orlVsIOd0iROikrlXcBVsU5n9IHzfkWejXUGg=";
hash = "sha256-gw3WhhuCXFTAaqO4Sp8TDZ1W6xTCvH91hK5R/GEgoY0=";
};
vendorHash = "sha256-aolS1mhIM8/fOeHeLQgiS8z/zO++U+36Th7wNpKlkFU=";
vendorHash = "sha256-gCq1m+9XCo4HGL1sT5AEMP0M430sy+5aKeOHwUWlme4=";
subPackages = [ "cmd/cdncheck/" ];

View file

@ -15,7 +15,7 @@
libxml2,
openssl,
pcsclite,
podofo_0_10,
podofo0,
ghostscript,
}:
@ -54,7 +54,7 @@ stdenv.mkDerivation {
buildInputs = [
cryptopp
fontconfig
podofo_0_10
podofo0
openssl
pcsclite
curl

View file

@ -6,25 +6,44 @@
versionCheckHook,
cmake,
pkg-config,
nodejs,
fetchNpmDeps,
npmHooks,
nix-update-script,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "clash-rs";
version = "0.10.0";
version = "0.10.6";
src = fetchFromGitHub {
owner = "Watfaq";
repo = "clash-rs";
tag = "v${finalAttrs.version}";
hash = "sha256-r+9tFw4B/7g/4EEYnX0Zcv4jPeGbcVgdtpAcSyk/cxA=";
hash = "sha256-ncMJxVNHAgeXWhqZgWt3nth4BXqrrBaAEWmOVF/KsPg=";
};
cargoHash = "sha256-D/TalJ0fBD4ZoHwU6uj5P0O6xFwinL9hE91bQhxC7s8=";
patches = [
# Remove the `npm ci` call in build.rs as it fails.
./skip-npm-ci.patch
];
cargoHash = "sha256-WI+wg6cu0cBFrZYyN3GXlfHOmo/cVo2uMLn1D5YTOCQ=";
npmDeps = fetchNpmDeps {
name = "${finalAttrs.pname}-${finalAttrs.version}-npm-deps";
inherit (finalAttrs) src;
sourceRoot = "${finalAttrs.src.name}/clash-dashboard";
hash = "sha256-8fDeO7Yx+m2s0mzTO7MkQOQ0UYs8B2vFnNevHHZFghc=";
};
npmRoot = "clash-dashboard";
nativeBuildInputs = [
cmake
pkg-config
rustPlatform.bindgenHook
nodejs
npmHooks.npmConfigHook
];
nativeInstallCheckInputs = [
@ -33,8 +52,9 @@ rustPlatform.buildRustPackage (finalAttrs: {
];
env = {
# requires features: sync_unsafe_cell, unbounded_shifts, let_chains, ip
# requires features: sync_unsafe_cell, unbounded_shifts, let_chains, ip, if_let_guard
RUSTC_BOOTSTRAP = 1;
RUSTFLAGS = "-Zcrate-attr=feature(if_let_guard)";
};
buildFeatures = [ "plus" ];

View file

@ -0,0 +1,35 @@
diff --git a/clash-lib/build.rs b/clash-lib/build.rs
index e8c8d44..adf9a74 100644
--- a/clash-lib/build.rs
+++ b/clash-lib/build.rs
@@ -81,25 +81,11 @@ fn build_dashboard() -> anyhow::Result<()> {
// On Windows npm is a .cmd script, not a binary.
let npm = if cfg!(windows) { "npm.cmd" } else { "npm" };
- // Use /tmp for the npm cache so that non-root users inside cross containers
- // (which run as UID 1001) are not blocked by a root-owned /.npm directory
- // that the nodesource pre-build step may have created.
- let npm_cache = std::env::temp_dir().join("npm-cache");
-
- // Run `npm ci` to install dependencies (no-op if already up to date).
- let status = match std::process::Command::new(npm)
- .args(["ci", "--prefer-offline", "--cache"])
- .arg(&npm_cache)
- .current_dir(&dashboard_dir)
- .status()
- {
- Ok(s) => s,
- Err(e) => {
- anyhow::bail!("npm not found; is Node.js installed? ({e})");
- }
- };
-
- anyhow::ensure!(status.success(), "`npm ci` failed with status {status}");
+ // Use npm_config_cache from the environment if available (Nix),
+ // otherwise fall back to /tmp for the npm cache.
+ let npm_cache = std::env::var_os("npm_config_cache")
+ .map(std::path::PathBuf::from)
+ .unwrap_or_else(|| std::env::temp_dir().join("npm-cache"));
// Run `npm run build`.
let status = std::process::Command::new(npm)

View file

@ -207,7 +207,6 @@ stdenv.mkDerivation (finalAttrs: {
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [
ttuegel
lnl7
];
platforms = lib.platforms.all;
mainProgram = "cmake";

View file

@ -7,13 +7,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "cmark";
version = "0.31.1";
version = "0.31.2";
src = fetchFromGitHub {
owner = "commonmark";
repo = "cmark";
rev = finalAttrs.version;
sha256 = "sha256-+JLw7zCjjozjq1RhRQGFqHj/MTUTq3t7A0V3T2U2PQk=";
sha256 = "sha256-d7oL7qWUcuEzTAp61iJMvX0VvcoYpHJw2w5UmODmLdo=";
};
nativeBuildInputs = [ cmake ];

Some files were not shown because too many files have changed in this diff Show more