mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-07-06 17:13:24 -05:00
Merge 3ab9d06032 into haskell-updates
This commit is contained in:
commit
f1cd3a542b
344 changed files with 10350 additions and 1491 deletions
|
|
@ -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
|
||||
|
|
|
|||
5
doc/hooks/writable-tmpdir-as-home-hook.section.md
Normal file
5
doc/hooks/writable-tmpdir-as-home-hook.section.md
Normal 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.
|
||||
|
|
@ -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"
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
)
|
||||
)
|
||||
))
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
12
lib/tests/modules/declare-attrList-type-merge.nix
Normal file
12
lib/tests/modules/declare-attrList-type-merge.nix
Normal 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; }; }
|
||||
];
|
||||
}
|
||||
925
lib/tests/modules/declare-attrList.nix
Normal file
925
lib/tests/modules/declare-attrList.nix
Normal 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";
|
||||
};
|
||||
}
|
||||
|
|
@ -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";
|
||||
|
|
|
|||
180
lib/types.nix
180
lib/types.nix
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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,,,,,,
|
||||
|
|
|
|||
|
|
|
@ -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`*
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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 ];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
name = "docker-tools-overlay";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [
|
||||
lnl7
|
||||
roberth
|
||||
];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -91,7 +91,6 @@ in
|
|||
name = "docker-tools";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [
|
||||
lnl7
|
||||
roberth
|
||||
];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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'")
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
name = "uwsgi";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ lnl7 ];
|
||||
meta = {
|
||||
maintainers = [ ];
|
||||
};
|
||||
|
||||
nodes.machine =
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
name = "vault-dev";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [
|
||||
lnl7
|
||||
mic92
|
||||
];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
name = "vault-postgresql";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [
|
||||
lnl7
|
||||
roberth
|
||||
];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
name = "vault";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ lnl7 ];
|
||||
meta = {
|
||||
maintainers = [ ];
|
||||
};
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
nodes = {
|
||||
server = {
|
||||
security.pam.services.vsftpd.enable = true;
|
||||
|
||||
services.vsftpd = {
|
||||
enable = true;
|
||||
userlistDeny = false;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ stdenv.mkDerivation {
|
|||
libxmlxx3
|
||||
];
|
||||
|
||||
NIX_CFLAGS_COMPILE = "-Wno-incompatible-pointer-types";
|
||||
env.NIX_CFLAGS_COMPILE = "-Wno-incompatible-pointer-types";
|
||||
|
||||
buildFlags = [ "gtk3" ];
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -288,6 +288,7 @@ let
|
|||
|
||||
toNvimTreesitterGrammar = makeSetupHook {
|
||||
name = "to-nvim-treesitter-grammar";
|
||||
meta.license = lib.licenses.mit;
|
||||
} ./to-nvim-treesitter-grammar.sh;
|
||||
in
|
||||
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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
|
||||
) { };
|
||||
|
||||
|
|
|
|||
|
|
@ -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 = ''
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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="
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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"]
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
) { };
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
|
|
|
|||
|
|
@ -11,4 +11,5 @@ makeSetupHook {
|
|||
shell = lib.getExe bash;
|
||||
patchcil = lib.getExe patchcil;
|
||||
};
|
||||
meta.license = lib.licenses.mit;
|
||||
} ./auto-patchcil.sh
|
||||
|
|
|
|||
|
|
@ -15,4 +15,5 @@ makeSetupHook {
|
|||
coreutils
|
||||
];
|
||||
};
|
||||
meta.license = lib.licenses.mit;
|
||||
} ./dotnet-hook.sh
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -249,5 +249,6 @@ in
|
|||
npmArch = stdenvNoCC.targetPlatform.node.arch;
|
||||
npmPlatform = stdenvNoCC.targetPlatform.node.platform;
|
||||
};
|
||||
meta.license = lib.licenses.mit;
|
||||
} ./pnpm-config-hook.sh;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
[
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
53
pkgs/by-name/ac/acl2/0002-sbcl-fp-trap-fallback.patch
Normal file
53
pkgs/by-name/ac/acl2/0002-sbcl-fp-trap-fallback.patch
Normal 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)
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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/
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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 ];
|
||||
};
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
6
pkgs/by-name/ap/applgrid/TFileStringLinkDef.h
Normal file
6
pkgs/by-name/ap/applgrid/TFileStringLinkDef.h
Normal 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
|
||||
6
pkgs/by-name/ap/applgrid/TFileVectorLinkDef.h
Normal file
6
pkgs/by-name/ap/applgrid/TFileVectorLinkDef.h
Normal 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
|
||||
10
pkgs/by-name/ap/applgrid/no-m64.patch
Normal file
10
pkgs/by-name/ap/applgrid/no-m64.patch
Normal 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 "
|
||||
|
||||
|
||||
|
||||
|
|
@ -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>'
|
||||
'';
|
||||
|
||||
|
|
|
|||
11
pkgs/by-name/ap/applgrid/rootcling-linkdef.patch
Normal file
11
pkgs/by-name/ap/applgrid/rootcling-linkdef.patch
Normal 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
|
||||
|
||||
51
pkgs/by-name/as/asyncapi/package.nix
Normal file
51
pkgs/by-name/as/asyncapi/package.nix
Normal 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";
|
||||
};
|
||||
})
|
||||
|
|
@ -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 { };
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,5 +1,9 @@
|
|||
{ makeSetupHook }:
|
||||
{
|
||||
lib,
|
||||
makeSetupHook,
|
||||
}:
|
||||
|
||||
makeSetupHook {
|
||||
name = "auto-fix-elf-files";
|
||||
meta.license = lib.licenses.mit;
|
||||
} ./auto-fix-elf-files.sh
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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 = [
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 = [
|
||||
|
|
|
|||
|
|
@ -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 ];
|
||||
};
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
@ -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 ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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/" ];
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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" ];
|
||||
|
|
|
|||
35
pkgs/by-name/cl/clash-rs/skip-npm-ci.patch
Normal file
35
pkgs/by-name/cl/clash-rs/skip-npm-ci.patch
Normal 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)
|
||||
|
|
@ -207,7 +207,6 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
license = lib.licenses.bsd3;
|
||||
maintainers = with lib.maintainers; [
|
||||
ttuegel
|
||||
lnl7
|
||||
];
|
||||
platforms = lib.platforms.all;
|
||||
mainProgram = "cmake";
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue