mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-07-14 12:48:57 +00:00
Compare commits
633 Commits
wip-emily/
...
python-upd
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c82adc2cea | ||
|
|
ac74a2a3c9 | ||
|
|
e8c038dd02 | ||
|
|
26b3a328b0 | ||
|
|
9247df61be | ||
|
|
4071ff3814 | ||
|
|
c81e5c1e41 | ||
|
|
bab6dfd65b | ||
|
|
d6bac7c36a | ||
|
|
e6cfebb8ae | ||
|
|
89688537d3 | ||
|
|
cb6531a20a | ||
|
|
83b9fd686d | ||
|
|
911b219ff7 | ||
|
|
1e497ade9e | ||
|
|
8e480d9c39 | ||
|
|
e8057a4d25 | ||
|
|
f1ef241fb4 | ||
|
|
9b50898c9e | ||
|
|
e368ea850e | ||
|
|
ca3f1ae567 | ||
|
|
fab32e67f0 | ||
|
|
6a4c1b7f86 | ||
|
|
5c2c968e6c | ||
|
|
b3e3bb77cd | ||
|
|
5533c19fd3 | ||
|
|
1a0fd55faf | ||
|
|
c344ad208b | ||
|
|
dca6d3ddcd | ||
|
|
cb4262635d | ||
|
|
a0e087ac90 | ||
|
|
a33b84bc60 | ||
|
|
4970b0e394 | ||
|
|
e69dc14b2e | ||
|
|
b97fced9ad | ||
|
|
269eca4ab9 | ||
|
|
12fa6f6b1f | ||
|
|
564e4f866c | ||
|
|
8f6b14bc04 | ||
|
|
2656782d1d | ||
|
|
28194e305f | ||
|
|
734595339e | ||
|
|
d3632e9487 | ||
|
|
bc57b3c3b3 | ||
|
|
3d143a907f | ||
|
|
f101144358 | ||
|
|
eecda9f0c0 | ||
|
|
1f46082105 | ||
|
|
ceaabd748d | ||
|
|
839c76d10f | ||
|
|
63b104e790 | ||
|
|
430ee4ec95 | ||
|
|
8e807f7750 | ||
|
|
0be693311d | ||
|
|
26f58a8b3e | ||
|
|
281a136113 | ||
|
|
98c7b0b606 | ||
|
|
a149eb8608 | ||
|
|
ace54f483f | ||
|
|
54c531de5e | ||
|
|
583c64bcb4 | ||
|
|
dc531f3ed0 | ||
|
|
33d7059a89 | ||
|
|
9ba100b5e9 | ||
|
|
99c6695469 | ||
|
|
c035f6cdbf | ||
|
|
a1d627fbb1 | ||
|
|
5de0c6a6d9 | ||
|
|
23bbef69c2 | ||
|
|
59278a553b | ||
|
|
71e051199f | ||
|
|
c42b6bbbf3 | ||
|
|
21bc71ff24 | ||
|
|
58fb166190 | ||
|
|
30205348b8 | ||
|
|
f9557eb03f | ||
|
|
b205fb4cb1 | ||
|
|
9f62a4495a | ||
|
|
5fa91555fe | ||
|
|
dd0c0ea310 | ||
|
|
494721e3ed | ||
|
|
6db7f713f4 | ||
|
|
3c2c21f413 | ||
|
|
a4d724317b | ||
|
|
2464849269 | ||
|
|
faa550a1d5 | ||
|
|
216e67dedb | ||
|
|
6ad347676d | ||
|
|
e4d8fbd812 | ||
|
|
96c111180e | ||
|
|
7d90cee00f | ||
|
|
edd74ceecb | ||
|
|
f2cdf6e6a0 | ||
|
|
2cceec4904 | ||
|
|
b4f201a91c | ||
|
|
2af6233f0c | ||
|
|
f4174cf923 | ||
|
|
e0ec28947e | ||
|
|
bdfeff3f48 | ||
|
|
9067115f13 | ||
|
|
85f5a453b9 | ||
|
|
ca4f1bf8b2 | ||
|
|
e9324b3c6a | ||
|
|
6273473d44 | ||
|
|
d9d92e2e86 | ||
|
|
cad1025b88 | ||
|
|
d25e95d9df | ||
|
|
9da40d3d98 | ||
|
|
b0f18c2b60 | ||
|
|
6b07c44ce1 | ||
|
|
d36a9bd3f2 | ||
|
|
b1b350327c | ||
|
|
74fa744028 | ||
|
|
3b70512b0d | ||
|
|
c6bb340b30 | ||
|
|
120609c426 | ||
|
|
42f548971d | ||
|
|
c29b59f67b | ||
|
|
e9e4c95f54 | ||
|
|
953221cb14 | ||
|
|
184cc91cc9 | ||
|
|
a1a08898f2 | ||
|
|
e84b76a221 | ||
|
|
84de46bcbf | ||
|
|
2acf9673a0 | ||
|
|
cab53ea4df | ||
|
|
9efe17c2ce | ||
|
|
f90c896147 | ||
|
|
15a572cb05 | ||
|
|
d415ff4e7c | ||
|
|
3d272d582c | ||
|
|
1ffb644dc3 | ||
|
|
a5c60ca2a7 | ||
|
|
2e31196af9 | ||
|
|
f32f162c23 | ||
|
|
acd1811713 | ||
|
|
191db85435 | ||
|
|
98367cee86 | ||
|
|
44b390cb20 | ||
|
|
c6dc9b4ca8 | ||
|
|
49b878ed50 | ||
|
|
a8cbb0469e | ||
|
|
e949d55455 | ||
|
|
df2b27f648 | ||
|
|
da0a669a71 | ||
|
|
96e2c2918e | ||
|
|
5d0aeca7be | ||
|
|
66d862bd41 | ||
|
|
2b5ba33dae | ||
|
|
f59dfacbf6 | ||
|
|
a0d032ff70 | ||
|
|
3a6e656a1d | ||
|
|
304cad4843 | ||
|
|
2c2cba1082 | ||
|
|
f465258b54 | ||
|
|
74bcdc4f0e | ||
|
|
0877af23d6 | ||
|
|
ba6fe55193 | ||
|
|
a8ebc98dcc | ||
|
|
6071049718 | ||
|
|
caacaa2a16 | ||
|
|
0d0d4193e9 | ||
|
|
08f2ba1573 | ||
|
|
48ae00dbb2 | ||
|
|
3a103ff57b | ||
|
|
a80ccdd1b9 | ||
|
|
083476dd13 | ||
|
|
dda336e772 | ||
|
|
17c5975cd6 | ||
|
|
2acedaf7fa | ||
|
|
a25b642864 | ||
|
|
f6fa032284 | ||
|
|
75069910b5 | ||
|
|
0412805b43 | ||
|
|
3799c8b976 | ||
|
|
964db35491 | ||
|
|
4a0c0b9676 | ||
|
|
f31bf27009 | ||
|
|
4399e8a2fd | ||
|
|
0892db1d96 | ||
|
|
bdca81ac39 | ||
|
|
7b79306e5f | ||
|
|
c42381d5a6 | ||
|
|
c42a60aae8 | ||
|
|
6a795827e1 | ||
|
|
b2aa7d612f | ||
|
|
4dd3598eee | ||
|
|
8a8a740ccd | ||
|
|
f63f6e1641 | ||
|
|
5404288f5e | ||
|
|
1df445dcd2 | ||
|
|
6c7efaded5 | ||
|
|
02303b8a37 | ||
|
|
62b5ae0312 | ||
|
|
35fc9a69bd | ||
|
|
989d20762c | ||
|
|
4158e3c919 | ||
|
|
e72e5977c6 | ||
|
|
8e268b6bdd | ||
|
|
6cd9336e97 | ||
|
|
2326926a17 | ||
|
|
94b51d8e93 | ||
|
|
c15d02f0b9 | ||
|
|
8c6facdd06 | ||
|
|
28dafa4fce | ||
|
|
327c03003a | ||
|
|
bb3f97e646 | ||
|
|
f30862e939 | ||
|
|
cd5fb14d05 | ||
|
|
6dc816e305 | ||
|
|
31540b6631 | ||
|
|
28242e231f | ||
|
|
7bba2e29ef | ||
|
|
df67add3cd | ||
|
|
670d8d78d2 | ||
|
|
d1cbb3ba37 | ||
|
|
81641ed1be | ||
|
|
93f445f31c | ||
|
|
d1710f8f14 | ||
|
|
466693502d | ||
|
|
3a6d676fec | ||
|
|
49f857db92 | ||
|
|
e84d602bdc | ||
|
|
e6b27c6933 | ||
|
|
0e4e7eeeab | ||
|
|
71e000c9d0 | ||
|
|
f161fd908c | ||
|
|
2987a2e9bb | ||
|
|
c56d6b91f7 | ||
|
|
5a944f2bc4 | ||
|
|
1b3955414e | ||
|
|
0973b8a641 | ||
|
|
05180ba482 | ||
|
|
ef2d4cd63a | ||
|
|
a187cae4ae | ||
|
|
f86c4d8b29 | ||
|
|
d0e90fac00 | ||
|
|
85ea91b158 | ||
|
|
4e26cb7489 | ||
|
|
b74f0ab33c | ||
|
|
bed497736d | ||
|
|
b1c249ab19 | ||
|
|
3433cdf533 | ||
|
|
5e54e68ffe | ||
|
|
56bb2cc56a | ||
|
|
c02559f1f0 | ||
|
|
c181c999d9 | ||
|
|
5e53adb250 | ||
|
|
05aec69820 | ||
|
|
1c231e4ab1 | ||
|
|
eb0dbe6935 | ||
|
|
54eb644221 | ||
|
|
0f9a3c53a3 | ||
|
|
282593c507 | ||
|
|
790756f505 | ||
|
|
b249ced44a | ||
|
|
c282797b16 | ||
|
|
5fdb3bc2f4 | ||
|
|
b96ed4d602 | ||
|
|
1d05796574 | ||
|
|
8a597f5ae6 | ||
|
|
5d0c21d222 | ||
|
|
bdd297d0ff | ||
|
|
8fe06cd8ba | ||
|
|
c8ce539c62 | ||
|
|
ac819cafd0 | ||
|
|
c2191b114b | ||
|
|
b5b4b56795 | ||
|
|
6b7ce51244 | ||
|
|
d3ef1479a9 | ||
|
|
5bffa343a1 | ||
|
|
c1f7c0ec1d | ||
|
|
49abeb2ebc | ||
|
|
b71eecfbbe | ||
|
|
2b69b6b928 | ||
|
|
fdf6502eb3 | ||
|
|
ad865d0009 | ||
|
|
eca8a86b7a | ||
|
|
6e22635a6f | ||
|
|
0eb9fc4c11 | ||
|
|
2a5eb18dbf | ||
|
|
e68c39840e | ||
|
|
84d051dfe8 | ||
|
|
ecdd169da0 | ||
|
|
2b92585264 | ||
|
|
b0b1fcd402 | ||
|
|
672778a273 | ||
|
|
b076d257c0 | ||
|
|
dbe230e5f7 | ||
|
|
38f72584a7 | ||
|
|
10f52e1ff0 | ||
|
|
4d1475e1ce | ||
|
|
dc3e183262 | ||
|
|
1297b0e3ea | ||
|
|
4cf7f131b7 | ||
|
|
dc9b2d36d5 | ||
|
|
f43e09c13b | ||
|
|
6dd6e9ec1a | ||
|
|
38af1bb8e4 | ||
|
|
576e53b263 | ||
|
|
5c560639cc | ||
|
|
09ffbef1de | ||
|
|
cb157f07f9 | ||
|
|
842f062743 | ||
|
|
2248791fc5 | ||
|
|
3ba12cd3e4 | ||
|
|
6552955c76 | ||
|
|
e5a478dc03 | ||
|
|
75395c0592 | ||
|
|
6f4a56db8e | ||
|
|
4f5c0a4447 | ||
|
|
2736b2e922 | ||
|
|
d4b703e784 | ||
|
|
34af3065e5 | ||
|
|
46488a9344 | ||
|
|
7c0a098ada | ||
|
|
5c418480fb | ||
|
|
ba7c0447e4 | ||
|
|
715961232d | ||
|
|
b99e56874c | ||
|
|
84b47fef2f | ||
|
|
d4856b14c2 | ||
|
|
64c320b8d2 | ||
|
|
efa4c69a95 | ||
|
|
5acdac6455 | ||
|
|
5c2746b34c | ||
|
|
7991a73099 | ||
|
|
694bc89ebc | ||
|
|
be1222f4f6 | ||
|
|
e1b40f5381 | ||
|
|
00766a5d4f | ||
|
|
691f9d4a8a | ||
|
|
8ca5e47471 | ||
|
|
1f07ef191f | ||
|
|
5f2bcd2a01 | ||
|
|
a8ea58d366 | ||
|
|
61ac5736f4 | ||
|
|
a372dc5edb | ||
|
|
b29ec61921 | ||
|
|
e6bf6e9fdc | ||
|
|
434bdf3e31 | ||
|
|
a3d3227668 | ||
|
|
16294a2525 | ||
|
|
152201b5f8 | ||
|
|
6d8fcd0ed4 | ||
|
|
db5d42a1fb | ||
|
|
f6229cee1b | ||
|
|
40abd3e2cb | ||
|
|
34f55ec38c | ||
|
|
d8f24a5dd0 | ||
|
|
00278dcc75 | ||
|
|
4ec747bd48 | ||
|
|
388a73241c | ||
|
|
0763df0110 | ||
|
|
cc89337b56 | ||
|
|
fe92563706 | ||
|
|
12efcad243 | ||
|
|
4bc8a3b4ac | ||
|
|
66086b79ba | ||
|
|
94d27db015 | ||
|
|
2538c000a6 | ||
|
|
3a4ada4f4d | ||
|
|
f0c9c59635 | ||
|
|
a55f8f39bf | ||
|
|
a16de1dccf | ||
|
|
5f0ee84259 | ||
|
|
fb290d5d24 | ||
|
|
9650af3a29 | ||
|
|
b973eed9ea | ||
|
|
c2e63d6bcb | ||
|
|
889ea4c031 | ||
|
|
978b351bf7 | ||
|
|
72dcf41a6f | ||
|
|
528e62cee4 | ||
|
|
f4b20637d7 | ||
|
|
fd360c4429 | ||
|
|
701ebd45f1 | ||
|
|
f121b630ae | ||
|
|
2a50b443b5 | ||
|
|
20f348252a | ||
|
|
ab4ae03bc7 | ||
|
|
0fdd6cabaa | ||
|
|
ac36e0ac03 | ||
|
|
9f1baceb91 | ||
|
|
8121751fd4 | ||
|
|
3f0f7cef47 | ||
|
|
a1c6e43548 | ||
|
|
38911fbe61 | ||
|
|
51adff44f6 | ||
|
|
757cb598d7 | ||
|
|
d7951b35db | ||
|
|
b5e21ce95d | ||
|
|
bb997bc7d7 | ||
|
|
1995f3e0bb | ||
|
|
2bb7a68648 | ||
|
|
52573cc0e7 | ||
|
|
4087f5d72d | ||
|
|
9e255a89dd | ||
|
|
eb8b88ae6b | ||
|
|
596866e0a8 | ||
|
|
0130888692 | ||
|
|
46bac7fdab | ||
|
|
6c3967b670 | ||
|
|
c9cf113518 | ||
|
|
a4c7bb7c2d | ||
|
|
ca7c1b884a | ||
|
|
70feff9540 | ||
|
|
20382e39ad | ||
|
|
d43850d6ed | ||
|
|
b21d0c8739 | ||
|
|
0ab3722264 | ||
|
|
6ac3a34121 | ||
|
|
b72cbb85d8 | ||
|
|
4752f97962 | ||
|
|
006c7936a2 | ||
|
|
02be72a9e5 | ||
|
|
33db82a7fb | ||
|
|
ddab585265 | ||
|
|
ab52c90582 | ||
|
|
58fccdd72d | ||
|
|
efa0af5a81 | ||
|
|
e64d912def | ||
|
|
13b1951166 | ||
|
|
d07523fb0f | ||
|
|
7350dc17b2 | ||
|
|
338d7b777a | ||
|
|
5285fba241 | ||
|
|
bf0b785901 | ||
|
|
1e7d467566 | ||
|
|
41c8b60446 | ||
|
|
b989afae40 | ||
|
|
6f45cf3b46 | ||
|
|
97b993b6de | ||
|
|
eb8d97ca2d | ||
|
|
2460cec5c9 | ||
|
|
4fca7cee9b | ||
|
|
0dafa129ec | ||
|
|
75344375d5 | ||
|
|
d7e253a814 | ||
|
|
8f026f4d4f | ||
|
|
46ab45db9e | ||
|
|
d1e40d5bca | ||
|
|
03b8f6d6d2 | ||
|
|
0e60258826 | ||
|
|
8e7420ee4a | ||
|
|
172a7c1da7 | ||
|
|
0a09558e36 | ||
|
|
4f9c25ce13 | ||
|
|
b7511a628d | ||
|
|
1eb5929281 | ||
|
|
26317899f1 | ||
|
|
82c2d18f05 | ||
|
|
47f7109d73 | ||
|
|
e923a383a2 | ||
|
|
af10cefe2e | ||
|
|
c9bccd97ca | ||
|
|
efc0e2338c | ||
|
|
b699a21608 | ||
|
|
22ab7ac180 | ||
|
|
40d7bc5a60 | ||
|
|
0c409ea618 | ||
|
|
1b2bc271ce | ||
|
|
3ef896f1e6 | ||
|
|
79d1bc837b | ||
|
|
dc3fc077f4 | ||
|
|
4d9499f3a3 | ||
|
|
f8219af848 | ||
|
|
f5332861db | ||
|
|
47331eb8bb | ||
|
|
bd08be1bd2 | ||
|
|
6f7345c8a6 | ||
|
|
3ab262f723 | ||
|
|
a2904ce42c | ||
|
|
206fd6070d | ||
|
|
ff663716f7 | ||
|
|
3cddb329e8 | ||
|
|
c4b827fa89 | ||
|
|
16b27381f0 | ||
|
|
19fef913d7 | ||
|
|
d15b45bb33 | ||
|
|
b70af925f2 | ||
|
|
d857df2041 | ||
|
|
c4e2dc82fa | ||
|
|
74ebbfaf0b | ||
|
|
a6735426ca | ||
|
|
18f68151ec | ||
|
|
cea24fefd1 | ||
|
|
9fb8d43cff | ||
|
|
15e6b0bad9 | ||
|
|
f30659ca7c | ||
|
|
17e6e533cc | ||
|
|
8746d3caee | ||
|
|
8ad0c2a646 | ||
|
|
b90a446f81 | ||
|
|
754bb1790e | ||
|
|
95512c9829 | ||
|
|
d6f4cb7151 | ||
|
|
5985f54958 | ||
|
|
08c17b3d48 | ||
|
|
da8e7ca876 | ||
|
|
fc6e831527 | ||
|
|
c106989163 | ||
|
|
38e13031b5 | ||
|
|
690eb2f7b3 | ||
|
|
dac44d4a95 | ||
|
|
a95886ca2f | ||
|
|
ad560d3c16 | ||
|
|
2e8b48cd62 | ||
|
|
83c911be36 | ||
|
|
a40ca2a795 | ||
|
|
af92041495 | ||
|
|
b9d7f2b1a0 | ||
|
|
3e4be31224 | ||
|
|
d0a2b56b4f | ||
|
|
e085df16b3 | ||
|
|
9784a83e6e | ||
|
|
76fd246bc5 | ||
|
|
b9a46241e4 | ||
|
|
443edeffde | ||
|
|
dd405da7eb | ||
|
|
40cb04dfa0 | ||
|
|
c516683a6a | ||
|
|
b71ffc69fd | ||
|
|
4fadb90a41 | ||
|
|
a7a6bd99a2 | ||
|
|
4c551237f8 | ||
|
|
12425f1be9 | ||
|
|
0559b83f73 | ||
|
|
a2d18d7dea | ||
|
|
d1e81cb2d5 | ||
|
|
8e58d07c4c | ||
|
|
2555c86506 | ||
|
|
490c011ce3 | ||
|
|
620dc9f455 | ||
|
|
6c27ebc956 | ||
|
|
b494a67c17 | ||
|
|
b7b9f65c48 | ||
|
|
f23e8ad032 | ||
|
|
782207ca52 | ||
|
|
92ff23e587 | ||
|
|
b2635b4976 | ||
|
|
0005075f86 | ||
|
|
c57c87c729 | ||
|
|
5c62da7ead | ||
|
|
827631d242 | ||
|
|
0c20c79236 | ||
|
|
0d19ffd8ad | ||
|
|
f1921ed922 | ||
|
|
8ee90271be | ||
|
|
a74c47e5d1 | ||
|
|
b71417e791 | ||
|
|
4236c602ca | ||
|
|
785ed9f0c0 | ||
|
|
61bf491213 | ||
|
|
df62a84d7e | ||
|
|
3e9573a974 | ||
|
|
eb58007af7 | ||
|
|
977b9e5271 | ||
|
|
4ddd9cf248 | ||
|
|
c057afbc4d | ||
|
|
9788ceafce | ||
|
|
5499574b39 | ||
|
|
d0c0d01afc | ||
|
|
135034ac71 | ||
|
|
67e5f7660c | ||
|
|
f6a9db5a5b | ||
|
|
a8f768361e | ||
|
|
1aaeceaa79 | ||
|
|
194322d2a3 | ||
|
|
b13e34b8d9 | ||
|
|
ef5e576fc2 | ||
|
|
c6983d7c79 | ||
|
|
a7f82d501c | ||
|
|
38c44143d7 | ||
|
|
01eb57cba2 | ||
|
|
1021330c20 | ||
|
|
22eda77d98 | ||
|
|
eeff68cc68 | ||
|
|
964949b656 | ||
|
|
2a7a7b11e8 | ||
|
|
f2c880e5b1 | ||
|
|
ba13cc996e | ||
|
|
329a50f3f0 | ||
|
|
7ea4c90475 | ||
|
|
ede972bd9e | ||
|
|
c3b03cd3dd | ||
|
|
86a2720d85 | ||
|
|
2a90ef803f | ||
|
|
15d080f250 | ||
|
|
91916cd915 | ||
|
|
9714f07c1f | ||
|
|
9f6e938e3b | ||
|
|
cb7ec1e718 | ||
|
|
703a55ddf4 | ||
|
|
55e369901a | ||
|
|
09614c7c7d | ||
|
|
504f6c9307 | ||
|
|
b545bebf42 | ||
|
|
2ff3dd5224 | ||
|
|
57f78a87b5 | ||
|
|
931ac3bead | ||
|
|
321652d161 | ||
|
|
aac123ef69 | ||
|
|
fd5878533a | ||
|
|
cba47cf5e8 | ||
|
|
f9e1063171 | ||
|
|
2c9c1c82ef | ||
|
|
5fa3ac888c | ||
|
|
559ec51b02 | ||
|
|
e197a90da7 | ||
|
|
81fbb6a0c3 | ||
|
|
523a4dc418 | ||
|
|
ff85c2b93b | ||
|
|
2d80d64878 | ||
|
|
745f12467c | ||
|
|
0150e1894f | ||
|
|
09c2f24013 | ||
|
|
bf6855be79 | ||
|
|
341ec4198d | ||
|
|
3cb487b5a9 | ||
|
|
4f7994e44a | ||
|
|
f52e868a2e | ||
|
|
e837217263 | ||
|
|
cf414a6ba8 | ||
|
|
19d080de23 | ||
|
|
126bd3b578 | ||
|
|
8eb3c82575 | ||
|
|
e749b0a6c7 | ||
|
|
4564ed7a76 | ||
|
|
8eba8a5341 | ||
|
|
3d38015f90 | ||
|
|
bd17e51cde | ||
|
|
8748d67aac |
4
.github/workflows/check.yml
vendored
4
.github/workflows/check.yml
vendored
@@ -92,8 +92,8 @@ jobs:
|
||||
if: inputs.baseBranch && inputs.headBranch
|
||||
permissions:
|
||||
pull-requests: write
|
||||
runs-on: ubuntu-24.04-arm
|
||||
timeout-minutes: 8
|
||||
runs-on: ubuntu-slim
|
||||
timeout-minutes: 3
|
||||
steps:
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
|
||||
4
.github/workflows/lint.yml
vendored
4
.github/workflows/lint.yml
vendored
@@ -131,8 +131,8 @@ jobs:
|
||||
# Luckily there's no need to lint commit messages in the Merge Queue, because
|
||||
# changes to the target branch can't change commit messages on the base branch.
|
||||
if: ${{ github.event.pull_request.number }}
|
||||
runs-on: ubuntu-24.04-arm
|
||||
timeout-minutes: 8
|
||||
runs-on: ubuntu-slim
|
||||
timeout-minutes: 5
|
||||
steps:
|
||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||
with:
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
<div class="manual-header">
|
||||
<nav class="manual-header--tabs">
|
||||
<a class="manual-header--tab manual-header--tab-active" href="#">Nixpkgs</a>
|
||||
<a class="manual-header--tab" href="https://nixos.org/manual/nixos/stable/">NixOS</a>
|
||||
</nav>
|
||||
<span class="manual-header--title">Nixpkgs Manual</span>
|
||||
</div>
|
||||
@@ -119,8 +119,6 @@ stdenvNoCC.mkDerivation (
|
||||
--script ./anchor-use.js \
|
||||
--sidebar-depth 3 \
|
||||
--nav ./nav.json \
|
||||
--header ${./header.html}\
|
||||
--no-navheader \
|
||||
manual.md \
|
||||
out/index.html
|
||||
|
||||
|
||||
24
doc/hooks/check-phase-thread-limit-hook.section.md
Normal file
24
doc/hooks/check-phase-thread-limit-hook.section.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# checkPhaseThreadLimitHook {#setup-hook-check-phase-thread-limit}
|
||||
|
||||
This hook defaults a variety of environment variables known
|
||||
to control thread counts to 1. Many of these otherwise default
|
||||
to `$(nproc)`, which causes massive overloads on build machines
|
||||
if nix build jobs and build cores are already tuned to fully utilize
|
||||
compute capacity of a builder without additional parallelism.
|
||||
|
||||
Currently sets the following environment variables:
|
||||
- [`OMP_NUM_THREADS`](https://www.openmp.org/spec-html/5.0/openmpse50.html)
|
||||
- [`OPENBLAS_NUM_THREADS`](https://github.com/OpenMathLib/OpenBLAS/blob/e7b45174355edec1f04de1cabcf5ca6a98ea7fbc/USAGE.md#how-can-i-use-openblas-in-multi-threaded-applications)
|
||||
- [`MKL_NUM_THREADS`](https://www.intel.com/content/www/us/en/docs/onemkl/developer-guide-linux/2023-0/mkl-domain-num-threads.html)
|
||||
- [`BLIS_NUM_THREADS`](https://github.com/flame/blis/blob/b8b75b4e19459f5d618b57aa814ca38b1d82eb82/docs/Multithreading.md#specifying-multithreading)
|
||||
- `VECLIB_MAXIMUM_THREADS`: Only affects darwin, see [`man 7 Accelerate`](https://manp.gs/mac/7/Accelerate)
|
||||
- [`NUMBA_NUM_THREADS`](https://numba.readthedocs.io/en/stable/reference/envvars.html#threading-control)
|
||||
- [`NUMEXPR_NUM_THREADS`](https://numexpr.readthedocs.io/en/latest/user_guide.html#threadpool-configuration)
|
||||
|
||||
The `NIX_CHECK_PHASE_DEFAULT_NUM_THREADS` environment variable
|
||||
can be used to override the default thread count limit.
|
||||
`dontLimitCheckPhaseThreads = true;` can be used to disable
|
||||
thread limiting on an individual package.
|
||||
|
||||
This hook will not attempt to override already existing
|
||||
definitions for thread count environment variables.
|
||||
@@ -13,6 +13,7 @@ aws-c-common.section.md
|
||||
bmake.section.md
|
||||
breakpoint.section.md
|
||||
cernlib.section.md
|
||||
check-phase-thread-limit-hook.section.md
|
||||
cmake.section.md
|
||||
desktop-file-utils.section.md
|
||||
gdk-pixbuf.section.md
|
||||
@@ -34,7 +35,6 @@ nodejs-install-manuals.section.md
|
||||
npm-build-hook.section.md
|
||||
npm-config-hook.section.md
|
||||
npm-install-hook.section.md
|
||||
openmp-check-hook.section.md
|
||||
patch-rc-path-hooks.section.md
|
||||
perl.section.md
|
||||
pkg-config.section.md
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
# openmpCheckPhaseHook {#setup-hook-omp-check}
|
||||
|
||||
|
||||
This hook can be used to setup a check phase that
|
||||
requires running a OpenMP application. It mostly
|
||||
serves to limit `OMP_NUM_THREADS` to avoid overloading
|
||||
build machines.
|
||||
|
||||
This hook will not attempt to override an already existing
|
||||
definition of `OMP_NUM_THREADS` in the environment.
|
||||
@@ -305,7 +305,7 @@ This package puts the corepack wrappers for pnpm and yarn in your PATH, and they
|
||||
|
||||
### pnpm {#javascript-pnpm}
|
||||
|
||||
pnpm is available as the top-level package `pnpm`. Additionally, there are variants pinned to certain major versions, like `pnpm_9`, `pnpm_10`, `pnpm_10_29_2` and `pnpm_11`, which support different sets of lock file versions.
|
||||
pnpm is available as the top-level package `pnpm`. Additionally, there are variants pinned to certain major versions, like `pnpm_8`, `pnpm_9`, `pnpm_10`, `pnpm_10_29_2` and `pnpm_11`, which support different sets of lock file versions.
|
||||
|
||||
When packaging an application that includes a `pnpm-lock.yaml`, you need to fetch the pnpm store for that project using a fixed-output-derivation. The function `fetchPnpmDeps` can create this pnpm store derivation. In conjunction, the setup hook `pnpmConfigHook` will prepare the build environment to install the pre-fetched dependencies store. Here is an example for a package that contains `package.json` and a `pnpm-lock.yaml` files using the fetcher and setup hook above:
|
||||
|
||||
|
||||
@@ -74,8 +74,6 @@ The recommended way of defining a derivation for a Rocq library, is to use the `
|
||||
* `enableParallelBuilding` (optional, defaults to `true`), since it is activated by default, we provide a way to disable it.
|
||||
* `extraInstallFlags` (optional), allows to extend `installFlags` which initializes the variables `COQLIBINSTALL` and `COQPLUGININSTALL` so as to install in the proper subdirectory. Indeed Rocq libraries should be installed in `$(out)/lib/coq/${rocq-core.rocq-version}/user-contrib/`. Such directories are automatically added to the `$ROCQPATH` environment variable by the hook defined in the Rocq derivation.
|
||||
* `setROCQBIN` (optional, defaults to `true`), by default, the environment variable `$ROCQBIN` is set to the current Rocq's binary, but one can disable this behavior by setting it to `false`,
|
||||
* `useCoq` (optional, defaults to `false`), adds the Coq compatibility binaries to the build environment, which is necessary for some packages that still depend on them and sets `COQBIN` to the path of the `coqc` binary (if `setROCQBIN` is also set to `true`). A wrapper `mkCoqDerivation` is provided that sets this option to `true`.
|
||||
* `useCoqifVersion` (optional, defaults to `(x: false)`), adds the Coq compatibility binaries to the build environment if the provided predicate evaluates to true on the version. This can be useful for supporting old package versions that need the Coq compatibility binaries, while newer versions do not.
|
||||
* `useMelquiondRemake` (optional, default to `null`) is an attribute set, which, if given, overloads the `preConfigurePhases`, `configureFlags`, `buildPhase`, and `installPhase` attributes of the derivation for a specific use in libraries using `remake` as set up by Guillaume Melquiond for `flocq`, `gappalib`, `interval`, and `coquelicot` (see the corresponding derivation for concrete examples of use of this option). For backward compatibility, the attribute `useMelquiondRemake.logpath` must be set to the logical root of the library (otherwise, one can pass `useMelquiondRemake = {}` to activate this without backward compatibility).
|
||||
* `dropAttrs`, `keepAttrs`, `dropDerivationAttrs` are all optional and allow to tune which attribute is added or removed from the final call to `mkDerivation`.
|
||||
|
||||
|
||||
@@ -2920,7 +2920,8 @@
|
||||
"setup-hook-mpi-check": [
|
||||
"index.html#setup-hook-mpi-check"
|
||||
],
|
||||
"setup-hook-omp-check": [
|
||||
"setup-hook-check-phase-thread-limit": [
|
||||
"index.html#setup-hook-check-phase-thread-limit",
|
||||
"index.html#setup-hook-omp-check"
|
||||
],
|
||||
"ninja": [
|
||||
|
||||
@@ -31,6 +31,9 @@
|
||||
By the time of this release, Homebrew will offer only limited [Tier 3](https://docs.brew.sh/Support-Tiers#tier-3) support for the platform, but MacPorts will likely continue to support it for a long time.
|
||||
We also recommend users consider installing NixOS, which should continue to run on essentially all Intel Macs, especially after Apple stops security support for macOS 26 in 2028.
|
||||
|
||||
- `bundlerApp` now sets `__structuredAttrs = true` for its result package.
|
||||
Out-of-tree packages passing `postBuild` to `bundlerApp` should examine if their `postBuild` commands are compatible with structured attributes.
|
||||
|
||||
- `databricks-cli` has been updated from `0.290.2` to `1.x.x`, the first major release. OAuth tokens for interactive logins (`auth_type = databricks-cli`) are now stored in the OS-native secure store by default (Secret Service on Linux) instead of `~/.databricks/token-cache.json`; cached tokens from older versions are not migrated, so run `databricks auth login` once per profile after upgrading. To keep the previous file-backed storage, set `DATABRICKS_AUTH_STORAGE=plaintext` or add `auth_storage = plaintext` under `[__settings__]` in `~/.databrickscfg`. Additionally, the `vector_search_endpoints` DABs resource renamed `min_qps` to `target_qps` (and the `vector-search-endpoints` command renamed `--min-qps` to `--target-qps`). See the [upstream changelog](https://github.com/databricks/cli/blob/main/CHANGELOG.md) for details.
|
||||
|
||||
- `hurl` has been updated to `8.x.x` which has some breaking changes. See [upstream changelog](https://github.com/Orange-OpenSource/hurl/releases/tag/8.0.0) for details.
|
||||
@@ -44,8 +47,6 @@
|
||||
|
||||
- `libgdata` has been removed, as it was archived upstream and relied on the insecure libsoup 2.4.
|
||||
|
||||
- `mcphost` has been removed, as it was archived upstream and declared unmaintained.
|
||||
|
||||
- `services.mysql` now sets `root@localhost` authentication to `auth_socket` when used with `mysql` or `percona-server`.
|
||||
Existing deployments will also be adjusted if possible. See the [security advisory GHSA-6qxx-6rg8-c4p8](https://github.com/NixOS/nixpkgs/security/advisories/GHSA-6qxx-6rg8-c4p8) for more information.
|
||||
|
||||
@@ -108,7 +109,6 @@
|
||||
- Starting with v14, `flameshot` will primarily utilise xdg-desktop-portal calls for screenshotting. This will directly affect users on X11 window managers due to the lack of a compatible portal with Screenshot feature. See [upstream changelog](https://github.com/flameshot-org/flameshot/releases/tag/v14.0.0) or [NixOS Flameshot](https://wiki.nixos.org/wiki/Flameshot) wiki page for workarounds.
|
||||
- `nim1` and respective aliases have been removed due to entering EOL; please migrate to `nim` or `nim-unwrapped` (nim 2).
|
||||
- `nim-2_0` & `nim-2_2` and respective aliases have been removed; please migrate to `nim` or `nim-unwrapped` (nim 2.2.10).
|
||||
- `domoticz` has been updated from `2024.7` to `2026.x`, breaking third party applications and scripts using the old RType calls. Review the [release notes](https://github.com/domoticz/domoticz/blob/2026.2/History.txt#L398) for more information.
|
||||
|
||||
- `vimacs` has been removed, as it has not been maintained in 10 years and was built for an old version of vim (6.0).
|
||||
|
||||
@@ -145,11 +145,10 @@
|
||||
|
||||
### Deprecations {#sec-nixpkgs-release-26.11-lib-deprecations}
|
||||
|
||||
- Setting `config.allowBrokenPredicate` is deprecated in favor of
|
||||
using `config.problems.handlers.PackageName.broken = "warn"` (or `=
|
||||
"ignore"`). For more information see [](#sec-allow-broken).
|
||||
- Create the first release note entry in this section!
|
||||
|
||||
|
||||
### Additions and Improvements {#sec-nixpkgs-release-26.11-lib-additions-improvements}
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
|
||||
|
||||
171
doc/style.css
171
doc/style.css
@@ -23,14 +23,14 @@ body {
|
||||
@media screen and (min-width: 992px) {
|
||||
.book,
|
||||
.appendix {
|
||||
max-width: 55rem;
|
||||
max-width: 60rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1200px) {
|
||||
.book,
|
||||
.appendix {
|
||||
max-width: 55rem;
|
||||
max-width: 73rem;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ html {
|
||||
body {
|
||||
font-size: 1rem;
|
||||
font-family: "Roboto", sans-serif;
|
||||
font-weight: 400;
|
||||
font-weight: 300;
|
||||
color: var(--main-text-color);
|
||||
background-color: var(--background);
|
||||
min-height: 100vh;
|
||||
@@ -184,52 +184,59 @@ hr {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-weight: 800;
|
||||
line-height: 1.1;
|
||||
margin: 1.5rem 0 0.5rem;
|
||||
}
|
||||
|
||||
/*
|
||||
Major-second scale see: https://typescale.com/
|
||||
rounded to .025rem (0.4px)
|
||||
*/
|
||||
h1 {
|
||||
font-size: 2rem;
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
font-size: 200%;
|
||||
margin-bottom: 1rem;
|
||||
color: var(--heading-color);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.8rem;
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
font-size: 170%;
|
||||
margin-bottom: 0.625rem;
|
||||
color: var(--heading-color);
|
||||
}
|
||||
|
||||
h2:not(:first-child) {
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.6rem;
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 150%;
|
||||
color: var(--heading-color);
|
||||
}
|
||||
|
||||
:is(.note, .tip, .warning, .caution, .important) h3 {
|
||||
font-size: 120%;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 1.425rem;
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 140%;
|
||||
color: var(--heading-color);
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.275rem;
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 130%;
|
||||
color: var(--small-heading-color);
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1.125rem;
|
||||
}
|
||||
|
||||
:is(.note, .tip, .warning, .caution, .important) h3 {
|
||||
font-size: 1.425rem;
|
||||
font-weight: 800;
|
||||
line-height: 110%;
|
||||
margin-bottom: 1rem;
|
||||
font-size: 120%;
|
||||
}
|
||||
|
||||
strong {
|
||||
@@ -257,9 +264,13 @@ code {
|
||||
}
|
||||
|
||||
code {
|
||||
padding: 0.2em 0.4em;
|
||||
background: var(--inline-code-background);
|
||||
border-radius: 0.375rem;
|
||||
color: #ff8657;
|
||||
background: #f4f4f4;
|
||||
display: inline-block;
|
||||
padding: 0 0.5rem;
|
||||
border: 1px solid #d8d8d8;
|
||||
border-radius: 0.5rem;
|
||||
line-height: 1.57777778;
|
||||
}
|
||||
|
||||
div.book .programlisting,
|
||||
@@ -319,6 +330,11 @@ div.appendix .programlisting {
|
||||
background: var(--caution-background);
|
||||
}
|
||||
|
||||
div.book .section,
|
||||
div.appendix .section {
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
||||
div.book div.example,
|
||||
div.appendix div.example {
|
||||
margin-top: 1.5em;
|
||||
@@ -362,6 +378,11 @@ div.appendix dt {
|
||||
|
||||
div.book code,
|
||||
div.appendix code {
|
||||
padding: 0;
|
||||
border: 0;
|
||||
background-color: inherit;
|
||||
color: inherit;
|
||||
font-size: 100%;
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
hyphens: none;
|
||||
@@ -398,7 +419,6 @@ div.appendix .variablelist .term {
|
||||
|
||||
:root {
|
||||
--sidebar-width: 20rem;
|
||||
--header-height: 3rem;
|
||||
--background: #fff;
|
||||
--main-text-color: #000;
|
||||
--link-color: #405d99;
|
||||
@@ -421,7 +441,6 @@ div.appendix .variablelist .term {
|
||||
--caution-background: #ffebe8;
|
||||
--codeblock-background: #f2f8fd;
|
||||
--codeblock-text-color: #000;
|
||||
--inline-code-background: #818b981f;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
@@ -447,7 +466,6 @@ div.appendix .variablelist .term {
|
||||
--caution-background: #422522;
|
||||
--codeblock-background: #393939;
|
||||
--codeblock-text-color: #fff;
|
||||
--inline-code-background: #656c7633;
|
||||
}
|
||||
|
||||
:is(.note, .tip, .warning, .caution, .important) {
|
||||
@@ -458,12 +476,7 @@ div.appendix .variablelist .term {
|
||||
|
||||
@font-face {
|
||||
font-family: Roboto;
|
||||
src:
|
||||
url(Roboto.ttf) format("truetype") tech(variations),
|
||||
url(Roboto.ttf) format("truetype-variations");
|
||||
font-weight: 100 900;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
src: url(Roboto.ttf);
|
||||
}
|
||||
|
||||
.chapter {
|
||||
@@ -529,7 +542,7 @@ nav.toc-sidebar summary {
|
||||
min-height: 0;
|
||||
display: grid;
|
||||
grid-template-columns: minmax(0, 1fr);
|
||||
grid-template-rows: var(--header-height) auto minmax(0, 1fr);
|
||||
grid-template-rows: auto minmax(0, 1fr);
|
||||
}
|
||||
|
||||
body:has(> nav.toc-sidebar) {
|
||||
@@ -538,7 +551,7 @@ nav.toc-sidebar summary {
|
||||
|
||||
.navheader {
|
||||
grid-column: 1 / -1;
|
||||
grid-row: 2;
|
||||
grid-row: 1;
|
||||
}
|
||||
|
||||
nav.toc-sidebar {
|
||||
@@ -549,7 +562,7 @@ nav.toc-sidebar summary {
|
||||
/* */
|
||||
margin: 0;
|
||||
grid-column: 1;
|
||||
grid-row: 3;
|
||||
grid-row: 2;
|
||||
max-height: none;
|
||||
overflow-y: auto;
|
||||
border: none;
|
||||
@@ -563,7 +576,7 @@ nav.toc-sidebar summary {
|
||||
|
||||
main.content {
|
||||
grid-column: 1 / -1;
|
||||
grid-row: 3;
|
||||
grid-row: 2;
|
||||
overflow-y: auto;
|
||||
padding: 0 1rem;
|
||||
}
|
||||
@@ -572,73 +585,3 @@ nav.toc-sidebar summary {
|
||||
grid-column: 2;
|
||||
}
|
||||
}
|
||||
|
||||
.manual-header {
|
||||
background-color: var(--background);
|
||||
border-bottom: 0.0625rem solid #d8d8d8;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.manual-header--title {
|
||||
order: -1;
|
||||
padding: 0.5rem 1rem 0;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
color: var(--small-heading-color);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.manual-header--tabs {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
justify-content: space-around;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.manual-header--tab {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 1rem;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
color: var(--main-text-color);
|
||||
text-decoration: none;
|
||||
border-bottom: 0.1875rem solid transparent;
|
||||
border-top: 0.1875rem solid transparent;
|
||||
transition: border-bottom-color 0.15s ease;
|
||||
}
|
||||
|
||||
.manual-header--tab:hover {
|
||||
border-bottom-color: var(--heading-color);
|
||||
color: var(--main-text-color);
|
||||
}
|
||||
|
||||
.manual-header--tab-active {
|
||||
border-bottom-color: var(--heading-color);
|
||||
color: var(--heading-color);
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 768px) {
|
||||
.manual-header {
|
||||
height: var(--header-height);
|
||||
flex-direction: row;
|
||||
align-items: stretch;
|
||||
grid-column: 1 / -1;
|
||||
grid-row: 1;
|
||||
}
|
||||
|
||||
.manual-header--title {
|
||||
order: 0;
|
||||
margin-left: auto;
|
||||
padding: 0 1rem;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.manual-header--tabs {
|
||||
justify-content: flex-start;
|
||||
padding: 0 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1052,11 +1052,6 @@ lib.mapAttrs mkLicense (
|
||||
fullName = "MIT License";
|
||||
};
|
||||
|
||||
mit-click = {
|
||||
spdxId = "MIT-Click";
|
||||
fullName = "MIT Click License";
|
||||
};
|
||||
|
||||
mit-cmu = {
|
||||
spdxId = "MIT-CMU";
|
||||
fullName = "CMU License";
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
# The module
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
let
|
||||
@@ -50,53 +49,6 @@ in
|
||||
a shell script or `importas` from `pkgs.execline`.
|
||||
'';
|
||||
};
|
||||
|
||||
reloadSignal = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = "HUP";
|
||||
description = ''
|
||||
Configures the reload signal to send to the service manager.
|
||||
'';
|
||||
};
|
||||
|
||||
reloadCommand = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = lib.literalExpression ''"''${pkgs.coreutils}/bin/kill -HUP $MAINPID"'';
|
||||
|
||||
description = ''
|
||||
Command used for reloading in the underlying service manager to reload.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
notificationProtocol = mkOption {
|
||||
type = types.listOf (
|
||||
types.enum [
|
||||
"systemd"
|
||||
"s6"
|
||||
]
|
||||
);
|
||||
|
||||
default = [ ];
|
||||
apply = v: lib.unique v;
|
||||
description = ''
|
||||
Notification protocol that this service supports with the underlying service manager.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
assertions = [
|
||||
{
|
||||
assertion = config.process.reloadSignal != null && config.process.reloadCommand != null;
|
||||
message = "reloadSignal conflicts with reloadCommand. Please either use reloadSignal or reloadCommand.";
|
||||
}
|
||||
];
|
||||
|
||||
process.reloadCommand = (lib.mkIf config.process.reloadSignal != null) (
|
||||
lib.mkForce "${pkgs.coreutils}/bin/kill -${config.process.reloadSignal} $MAINPID"
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"samuela": 226872
|
||||
},
|
||||
"members": {
|
||||
"ethancedwards8": 60861925,
|
||||
"prusnak": 42201
|
||||
},
|
||||
"name": "cuda-maintainers"
|
||||
@@ -366,10 +365,10 @@
|
||||
"freedesktop": {
|
||||
"description": "Maintain Freedesktop.org packages for graphical desktop.",
|
||||
"id": 3806136,
|
||||
"maintainers": {
|
||||
"maintainers": {},
|
||||
"members": {
|
||||
"jtojnar": 705123
|
||||
},
|
||||
"members": {},
|
||||
"name": "Freedesktop"
|
||||
},
|
||||
"geospatial": {
|
||||
|
||||
@@ -209,12 +209,6 @@
|
||||
github = "2hexed";
|
||||
githubId = 54501296;
|
||||
};
|
||||
_2zqa = {
|
||||
name = "Marijn Kok";
|
||||
email = "hkju4b4ds@mozmail.com";
|
||||
github = "2zqa";
|
||||
githubId = 25235249;
|
||||
};
|
||||
_30350n = {
|
||||
name = "Max Schlecht";
|
||||
github = "30350n";
|
||||
@@ -263,10 +257,11 @@
|
||||
name = "Eske Nielsen";
|
||||
};
|
||||
_4evy = {
|
||||
name = "4evy";
|
||||
email = "git@evy.pink";
|
||||
github = "4evy";
|
||||
name = "_4evy";
|
||||
email = "git@ps1.sh";
|
||||
github = "_4evy";
|
||||
githubId = 57304299;
|
||||
matrix = "@donteatoreo:matrix.org";
|
||||
};
|
||||
_4r7if3x = {
|
||||
email = "the.artifex@proton.me";
|
||||
@@ -1943,11 +1938,6 @@
|
||||
githubId = 143312793;
|
||||
name = "Annin";
|
||||
};
|
||||
anntnzrb = {
|
||||
github = "anntnzrb";
|
||||
githubId = 51257127;
|
||||
name = "anntnzrb";
|
||||
};
|
||||
anoa = {
|
||||
matrix = "@andrewm:amorgan.xyz";
|
||||
email = "andrew@amorgan.xyz";
|
||||
@@ -4645,13 +4635,6 @@
|
||||
githubId = 53847249;
|
||||
name = "Casey Avila";
|
||||
};
|
||||
cassandracomar = {
|
||||
name = "Cassandra Comar";
|
||||
github = "cassandracomar";
|
||||
githubId = 320772;
|
||||
email = "cass@mountclare.net";
|
||||
keys = [ { fingerprint = "104E E74E 24A0 372B EAF5 5533 B019 18F7 7E04 AC99"; } ];
|
||||
};
|
||||
castorNova2 = {
|
||||
email = "solemnsquire@gmail.com";
|
||||
github = "castorNova2";
|
||||
@@ -7048,6 +7031,12 @@
|
||||
github = "DimitarNestorov";
|
||||
githubId = 8790386;
|
||||
};
|
||||
diniamo = {
|
||||
name = "diniamo";
|
||||
email = "diniamo53@gmail.com";
|
||||
github = "diniamo";
|
||||
githubId = 55629891;
|
||||
};
|
||||
diogomdp = {
|
||||
email = "me@diogodp.dev";
|
||||
github = "diogomdp";
|
||||
@@ -7753,7 +7742,6 @@
|
||||
name = "EarthGman";
|
||||
github = "EarthGman";
|
||||
githubId = 117403037;
|
||||
keys = [ { fingerprint = "A06C 1E72 4626 7B4C EE16 CC2E 4862 31CD BCE3 AA32"; } ];
|
||||
};
|
||||
EBADBEEF = {
|
||||
name = "EBADBEEF";
|
||||
@@ -8853,13 +8841,6 @@
|
||||
githubId = 345808;
|
||||
name = "Jakub Okoński";
|
||||
};
|
||||
FatBoyXPC = {
|
||||
name = "FatBoyXPC";
|
||||
email = "fatboyxpc@gmail.com";
|
||||
github = "FatBoyXPC";
|
||||
githubId = 744962;
|
||||
keys = [ { fingerprint = "0E08 1B81 CBCA 1CF7 9568 A13F C4ED 3CA2 3211 8969"; } ];
|
||||
};
|
||||
faukah = {
|
||||
github = "faukah";
|
||||
name = "faukah";
|
||||
@@ -9040,11 +9021,6 @@
|
||||
githubId = 5198058;
|
||||
name = "Udo Sauer";
|
||||
};
|
||||
fernvenue = {
|
||||
github = "fernvenue";
|
||||
githubId = 84565547;
|
||||
name = "fernvenue";
|
||||
};
|
||||
feyorsh = {
|
||||
email = "george@feyor.sh";
|
||||
github = "Feyorsh";
|
||||
@@ -10410,12 +10386,6 @@
|
||||
githubId = 273582;
|
||||
name = "greg";
|
||||
};
|
||||
gregshuflin = {
|
||||
email = "greg@everdayimshuflin.com";
|
||||
github = "neunenak";
|
||||
githubId = 311545;
|
||||
name = "Greg Shuflin";
|
||||
};
|
||||
greizgh = {
|
||||
email = "greizgh@ephax.org";
|
||||
github = "greizgh";
|
||||
@@ -11475,11 +11445,6 @@
|
||||
githubId = 69209;
|
||||
name = "Ian Duncan";
|
||||
};
|
||||
IanHollow = {
|
||||
github = "IanHollow";
|
||||
githubId = 72767437;
|
||||
name = "Ian Holloway";
|
||||
};
|
||||
ianliu = {
|
||||
email = "ian.liu88@gmail.com";
|
||||
github = "ianliu";
|
||||
@@ -12780,12 +12745,6 @@
|
||||
githubId = 5741620;
|
||||
name = "Jeremy Schlatter";
|
||||
};
|
||||
jeremystucki = {
|
||||
email = "dev@jeremystucki.ch";
|
||||
github = "jeremystucki";
|
||||
githubId = 7629727;
|
||||
name = "Jeremy Stucki";
|
||||
};
|
||||
jerith666 = {
|
||||
email = "github@matt.mchenryfamily.org";
|
||||
github = "jerith666";
|
||||
@@ -14137,14 +14096,6 @@
|
||||
name = "Kenichi Kamiya";
|
||||
keys = [ { fingerprint = "9121 5D87 20CA B405 C63F 24D2 EF6E 574D 040A E2A5"; } ];
|
||||
};
|
||||
kacper-uminski = {
|
||||
name = "Kacper Uminski";
|
||||
email = "kacper+nixpkgs@lysator.liu.se";
|
||||
github = "kacper-uminski";
|
||||
githubId = 57466578;
|
||||
matrix = "@kacper.uminski:matrix.org";
|
||||
keys = [ { fingerprint = "3DF9 3DEB CAA9 81FA B3E2 A7F0 87DA 201D E02F 14B1"; } ];
|
||||
};
|
||||
kaction = {
|
||||
name = "Dmitry Bogatov";
|
||||
email = "KAction@disroot.org";
|
||||
@@ -15430,7 +15381,7 @@
|
||||
};
|
||||
lactose = {
|
||||
name = "lactose";
|
||||
email = "mail@lactose.dev";
|
||||
email = "lactose@allthingslinux.com";
|
||||
github = "juuyokka";
|
||||
githubId = 15185244;
|
||||
};
|
||||
@@ -17869,12 +17820,6 @@
|
||||
{ fingerprint = "838A FE0D 55DC 074E 360F 943A 84B6 9CE6 F3F6 B767"; }
|
||||
];
|
||||
};
|
||||
mcuste = {
|
||||
email = "github@muratcanuste.com";
|
||||
github = "mcuste";
|
||||
githubId = 10829864;
|
||||
name = "Murat Can Üste";
|
||||
};
|
||||
mcwitt = {
|
||||
email = "mcwitt@gmail.com";
|
||||
github = "mcwitt";
|
||||
@@ -18857,12 +18802,6 @@
|
||||
githubId = 830082;
|
||||
name = "Nathan Moos";
|
||||
};
|
||||
mootfrost = {
|
||||
email = "hello@mootfrost.dev";
|
||||
github = "mootfrost";
|
||||
githubId = 75925945;
|
||||
name = "Andrew Semeykin";
|
||||
};
|
||||
moraxyc = {
|
||||
name = "Moraxyc Xu";
|
||||
email = "i@qaq.li";
|
||||
@@ -20358,12 +20297,6 @@
|
||||
githubId = 4242897;
|
||||
name = "Nikolai Mishin";
|
||||
};
|
||||
nmoya = {
|
||||
email = "nikolasmoya@gmail.com";
|
||||
github = "nmoya";
|
||||
githubId = 1767648;
|
||||
name = "Nikolas Moya";
|
||||
};
|
||||
noaccos = {
|
||||
name = "Francesco Noacco";
|
||||
email = "francesco.noacco2000@gmail.com";
|
||||
@@ -25663,6 +25596,12 @@
|
||||
githubId = 106669955;
|
||||
name = "Léon Gessner";
|
||||
};
|
||||
shardy = {
|
||||
email = "shardul@baral.ca";
|
||||
github = "shardulbee";
|
||||
githubId = 16765155;
|
||||
name = "Shardul Baral";
|
||||
};
|
||||
sharpchen = {
|
||||
github = "sharpchen";
|
||||
githubId = 77432836;
|
||||
@@ -26432,14 +26371,6 @@
|
||||
githubId = 7116239;
|
||||
keys = [ { fingerprint = "E067 520F 5EF2 C175 3F60 50C0 BA46 725F 6A26 7442"; } ];
|
||||
};
|
||||
Soliprem = {
|
||||
email = "me@soliprem.eu";
|
||||
matrix = "@soliprem:soliprem.eu";
|
||||
name = "Francesco Prem Solidoro";
|
||||
github = "Soliprem";
|
||||
githubId = 73885403;
|
||||
keys = [ { fingerprint = "F779 4E05 D8BB A608 73D0 1312 4FD6 B0D5 1C9A B6BD"; } ];
|
||||
};
|
||||
solson = {
|
||||
email = "scott@solson.me";
|
||||
matrix = "@solson:matrix.org";
|
||||
@@ -27335,11 +27266,6 @@
|
||||
githubId = 203195;
|
||||
name = "Szczyp";
|
||||
};
|
||||
szhekpisov = {
|
||||
github = "szhekpisov";
|
||||
githubId = 87662520;
|
||||
name = "Sergei Zhekpisov";
|
||||
};
|
||||
szkiba = {
|
||||
email = "iszkiba@gmail.com";
|
||||
github = "szkiba";
|
||||
|
||||
@@ -202,8 +202,6 @@ rec {
|
||||
--script ./anchor.min.js \
|
||||
--script ./anchor-use.js \
|
||||
--sidebar-depth 2 \
|
||||
--header ${./header.html}\
|
||||
--no-navheader \
|
||||
./manual.md \
|
||||
$dst/${common.indexPath}
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
<div class="manual-header">
|
||||
<nav class="manual-header--tabs">
|
||||
<a class="manual-header--tab" href="https://nixos.org/manual/nixos/stable/">Nixpkgs</a>
|
||||
<a class="manual-header--tab manual-header--tab-active" href="#">NixOS</a>
|
||||
</nav>
|
||||
<span class="manual-header--title">Nixos Manual</span>
|
||||
</div>
|
||||
@@ -1891,9 +1891,6 @@
|
||||
"sec-kubernetes": [
|
||||
"index.html#sec-kubernetes"
|
||||
],
|
||||
"module-services-nordvpn": [
|
||||
"index.html#module-services-nordvpn"
|
||||
],
|
||||
"ch-running": [
|
||||
"index.html#ch-running"
|
||||
],
|
||||
|
||||
@@ -110,8 +110,6 @@
|
||||
|
||||
- [clevis-luks-askpass](https://github.com/latchset/clevis), automatic LUKS unlocking in initrd using clevis token bindings stored in LUKS headers. Available as [boot.initrd.clevisLuksAskpass](#opt-boot.initrd.clevisLuksAskpass.enable).
|
||||
|
||||
- [passless](https://github.com/pando85/passless), a daemon for using Webauthn Passkeys backed by password-store.
|
||||
|
||||
- [bentopdf](https://github.com/alam00000/bentopdf), a privacy-first PDF toolkit running completely in-browser. Available as [services.bentopdf](#opt-services.bentopdf.enable).
|
||||
|
||||
- [hyprwhspr-rs](https://github.com/better-slop/hyprwhspr-rs), a keybind activated speech-to-text voice dictation utility built for use with Hyprland. Available as [services.hyprwhspr-rs](#opt-services.hyprwhspr-rs.enable).
|
||||
|
||||
@@ -32,8 +32,6 @@
|
||||
|
||||
- [Nezha](https://github.com/nezhahq/nezha), a self-hosted, lightweight server and website monitoring and O&M tool. Available as [services.nezha](#opt-services.nezha.enable).
|
||||
|
||||
- [Watt](https://github.com/NotAShelf/watt), a CPU frequency and power management daemon for Linux. Available as [services.watt](#opt-services.watt.enable).
|
||||
|
||||
- [mail-tlsa-check-exporter](https://github.com/ietf-tools/mail-tlsa-check-exporter), validates SMTP / IMAP server certificates against a TLSA record as a Prometheus exporter. Available as [services.prometheus.exporters.mail-tlsa-check](#opt-services.prometheus.exporters.mail-tlsa-check.enable).
|
||||
|
||||
- [CastSponsorSkip](https://github.com/gabe565/CastSponsorSkip/), skips YouTube sponsorships (and sometimes ads) on all local Google Cast devices.
|
||||
@@ -56,8 +54,6 @@
|
||||
|
||||
- [OO7](https://github.com/linux-credentials/oo7) is a desktop-agnostic Secret Service provider. Available as [services.oo7](#opt-services.oo7.enable)
|
||||
|
||||
- [NordVPN](https://github.com/NordSecurity/nordvpn-linux), a NordVPN client for linux. Available as [services.nordvpn](options.html#opt-services.nordvpn.enable).
|
||||
|
||||
## Backward Incompatibilities {#sec-release-26.11-incompatibilities}
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
@@ -85,8 +81,6 @@
|
||||
|
||||
- When Avahi's mDNS resolver is enabled (`services.avahi.nssmdns4` or `services.avahi.nssmdns6`), only the minimal mDNS resolver is enabled by default to avoid adding a 5 second delay to every failed reverse hostname lookup (e.g., delaying ping by 5 seconds). The "full" mDNS resolver now remains disabled unless `services.avahi.nssmdnsFull` is also enabled. Users who have customized [`/etc/mdns.allow`](https://github.com/avahi/nss-mdns/tree/master#etcmdnsallow) to allow mDNS domains not ending `.local` must enable `services.avahi.nssmdnsFull` to continue to resolve such domains.
|
||||
|
||||
- String values passed to `services.phpfpm.settings`, `services.phpfpm.pools.<name>.phpEnv`, and `services.phpfpm.pools.<name>.settings` are now properly quoted and escaped, except for the `${}` syntax that is left as-is. If you are manually escaping these values, please adjust accordingly.
|
||||
|
||||
- `systemd.user.extraConfig` has been removed in favor of the structured [](#opt-systemd.user.settings.Manager) option. Use `systemd.user.settings.Manager` to set any `systemd-user.conf(5)` option directly. For example, replace `systemd.user.extraConfig = "DefaultTimeoutStartSec=60";` with `systemd.user.settings.Manager.DefaultTimeoutStartSec = 60;`.
|
||||
|
||||
- `matrix-appservice-discord` was removed from nixpkgs along with its NixOS module (`services.matrix-appservice-discord`) as it is no longer actively maintained upstream. Use the actively-maintained puppeting bridge [`mautrix-discord`](#opt-services.mautrix-discord.enable) instead.
|
||||
@@ -105,9 +99,6 @@
|
||||
|
||||
- `komodo` has been updated to the v2 release line (2.x). See the [upstream v1 → v2 upgrade guide](https://github.com/moghtech/komodo/releases/tag/v2.0.0).
|
||||
|
||||
- `temporal` has been updated to the 1.31 release line. Always consult the [upstream upgrade
|
||||
notes](https://docs.temporal.io/self-hosted-guide/upgrade-server) before upgrading between versions.
|
||||
|
||||
- The `shell_interact()` function on interactive runs of NixOS VM tests has been deprecated. Use the SSH backdoor instead.
|
||||
|
||||
- [services.netbox](#opt-services.netbox.enable) has received a number of updates:
|
||||
@@ -143,10 +134,3 @@
|
||||
- The `newuidmap` and `newgidmap` security wrappers are now installed with `cap_setuid`/`cap_setgid` file capabilities instead of the setuid-root bit, matching shadow's `--with-fcaps` install mode and other major distributions. Rootless containers (podman, docker-rootless, unprivileged user namespaces) are unaffected. The only behavioural change is that mapping host uid 0 via `/etc/subuid` (which NixOS never configures by default) additionally requires `cap_setfcap`; users who explicitly grant uid 0 in a subuid range can restore the previous behaviour with `security.wrappers.newuidmap.capabilities = lib.mkForce "cap_setuid,cap_setfcap+ep";`.
|
||||
|
||||
- `zoneminder` has been updated to 1.38.x release. See [upstream release note](https://github.com/ZoneMinder/zoneminder/releases/tag/1.38.0). While database migration should happen automatically, it's recommended that you make a backup of the database before upgrading your system.
|
||||
|
||||
- The latest available version of Nextcloud is v34 (available as `pkgs.nextcloud34`). The installation logic is as follows:
|
||||
- If [`services.nextcloud.package`](#opt-services.nextcloud.package) is specified explicitly, this package will be installed (**recommended**)
|
||||
- If `system.stateVersion` is >=26.11, `pkgs.nextcloud34` will be installed by default.
|
||||
- If [`system.stateVersion`](#opt-system.stateVersion) is >=26.05, `pkgs.nextcloud33` will be installed by default.
|
||||
- If [`system.stateVersion`](#opt-system.stateVersion) is >=25.11, `pkgs.nextcloud32` will be installed by default.
|
||||
- Please note that Nextcloud prohibits skipping major versions while upgrading. You can upgrade to specific versions by declaring `services.nextcloud.package = pkgs.nextcloud33;`.
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
utils,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
@@ -60,7 +59,7 @@ in
|
||||
};
|
||||
|
||||
output = lib.mkOption {
|
||||
type = lib.types.externalPath;
|
||||
type = lib.types.path;
|
||||
default = "/var/cache/locatedb";
|
||||
description = ''
|
||||
The database file to build.
|
||||
@@ -250,35 +249,27 @@ in
|
||||
systemd.services.update-locatedb = {
|
||||
description = "Update Locate Database";
|
||||
|
||||
serviceConfig = {
|
||||
# mlocate's updatedb takes flags via a configuration file or
|
||||
# on the command line, but not by environment variable.
|
||||
ExecStart =
|
||||
let
|
||||
toFlags =
|
||||
x:
|
||||
lib.optionals (cfg.${x} != [ ]) [
|
||||
"--${lib.toLower x}"
|
||||
(lib.concatStringsSep " " cfg.${x})
|
||||
];
|
||||
args = lib.concatMap toFlags [
|
||||
# mlocate's updatedb takes flags via a configuration file or
|
||||
# on the command line, but not by environment variable.
|
||||
script =
|
||||
let
|
||||
toFlags =
|
||||
x: lib.optional (cfg.${x} != [ ]) "--${lib.toLower x} '${lib.concatStringsSep " " cfg.${x}}'";
|
||||
args = lib.concatLists (
|
||||
map toFlags [
|
||||
"pruneFS"
|
||||
"pruneNames"
|
||||
"prunePaths"
|
||||
];
|
||||
in
|
||||
utils.escapeSystemdExecArgs (
|
||||
[
|
||||
(lib.getExe' cfg.package "updatedb")
|
||||
"--output"
|
||||
cfg.output
|
||||
"--prune-bind-mounts"
|
||||
(lib.boolToYesNo cfg.pruneBindMounts)
|
||||
]
|
||||
++ args
|
||||
++ cfg.extraFlags
|
||||
);
|
||||
|
||||
in
|
||||
''
|
||||
exec ${cfg.package}/bin/updatedb \
|
||||
--output ${toString cfg.output} ${lib.concatStringsSep " " args} \
|
||||
--prune-bind-mounts ${lib.boolToYesNo cfg.pruneBindMounts} \
|
||||
${lib.concatStringsSep " " cfg.extraFlags}
|
||||
'';
|
||||
serviceConfig = {
|
||||
CapabilityBoundingSet = "CAP_DAC_READ_SEARCH CAP_CHOWN";
|
||||
Nice = 19;
|
||||
IOSchedulingClass = "idle";
|
||||
|
||||
@@ -296,7 +296,6 @@
|
||||
./programs/opengamepadui.nix
|
||||
./programs/openvpn3.nix
|
||||
./programs/partition-manager.nix
|
||||
./programs/passless.nix
|
||||
./programs/pay-respects.nix
|
||||
./programs/plotinus.nix
|
||||
./programs/pmount.nix
|
||||
@@ -358,7 +357,6 @@
|
||||
./programs/wayland/mangowc.nix
|
||||
./programs/wayland/miracle-wm.nix
|
||||
./programs/wayland/niri.nix
|
||||
./programs/wayland/pinnacle.nix
|
||||
./programs/wayland/river.nix
|
||||
./programs/wayland/sway.nix
|
||||
./programs/wayland/uwsm.nix
|
||||
@@ -732,7 +730,6 @@
|
||||
./services/hardware/usbmuxd.nix
|
||||
./services/hardware/usbrelayd.nix
|
||||
./services/hardware/vdr.nix
|
||||
./services/hardware/watt.nix
|
||||
./services/home-automation/deye-dummycloud.nix
|
||||
./services/home-automation/ebusd.nix
|
||||
./services/home-automation/esphome.nix
|
||||
@@ -824,7 +821,6 @@
|
||||
./services/matrix/mautrix-whatsapp.nix
|
||||
./services/matrix/mjolnir.nix
|
||||
./services/matrix/pantalaimon.nix
|
||||
./services/matrix/rust-federation-tester.nix
|
||||
./services/matrix/synapse-auto-compressor.nix
|
||||
./services/matrix/synapse.nix
|
||||
./services/matrix/tuwunel.nix
|
||||
@@ -1344,7 +1340,6 @@
|
||||
./services/networking/nncp.nix
|
||||
./services/networking/nntp-proxy.nix
|
||||
./services/networking/nomad.nix
|
||||
./services/networking/nordvpn.nix
|
||||
./services/networking/nsd.nix
|
||||
./services/networking/ntopng.nix
|
||||
./services/networking/ntp/chrony.nix
|
||||
|
||||
@@ -1,134 +0,0 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.programs.passless;
|
||||
settingsFormat = pkgs.formats.toml { };
|
||||
settingsFile = settingsFormat.generate "passless.toml" cfg.settings;
|
||||
in
|
||||
{
|
||||
|
||||
options.programs.passless = {
|
||||
enable = lib.mkEnableOption "passless";
|
||||
|
||||
package = lib.mkPackageOption pkgs "passless" { };
|
||||
|
||||
users = lib.options.mkOption {
|
||||
type = with lib.types; listOf str;
|
||||
description = ''
|
||||
Users that intend to use passless and should be added to the fido group.
|
||||
'';
|
||||
default = [ ];
|
||||
example = [ "alice" ];
|
||||
};
|
||||
|
||||
settings = lib.mkOption {
|
||||
inherit (settingsFormat) type;
|
||||
default = { };
|
||||
example = {
|
||||
pass.store-path = "/home/alice/.local/share/password-store";
|
||||
};
|
||||
description = ''
|
||||
Configuration included in `config.toml`.
|
||||
|
||||
See <https://github.com/pando85/passless#configuration-1> for documentation or run `passless config print` to see default configuration.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf config.programs.passless.enable {
|
||||
users.groups.fido.members = cfg.users;
|
||||
|
||||
boot.kernelModules = [ "uhid" ];
|
||||
|
||||
services.udev.extraRules = ''
|
||||
KERNEL=="uhid", GROUP="fido", MODE="0660"
|
||||
'';
|
||||
|
||||
# From https://github.com/pando85/passless/blob/master/contrib/systemd/passless.service
|
||||
systemd.user.services.passless = {
|
||||
description = "Passless FIDO2 Software Authenticator";
|
||||
documentation = [ "https://github.com/pando85/passless" ];
|
||||
after = [ "network-online.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
wantedBy = [ "default.target" ];
|
||||
path = [ config.programs.gnupg.package ];
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
ExecStart = "${lib.getExe cfg.package} --config-path ${settingsFile}";
|
||||
Restart = "on-failure";
|
||||
RestartSec = "5s";
|
||||
# Security hardening
|
||||
# The application already handles its own memory locking and core dump prevention
|
||||
# but we can add additional systemd protections
|
||||
NoNewPrivileges = true;
|
||||
LimitMEMLOCK = "2M";
|
||||
SyslogIdentifier = "passless";
|
||||
|
||||
# Found with shh
|
||||
ProtectSystem = "strict";
|
||||
PrivateTmp = "disconnected";
|
||||
PrivateMounts = "true";
|
||||
ProtectKernelTunables = "true";
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelLogs = true;
|
||||
LockPersonality = true;
|
||||
RestrictRealtime = true;
|
||||
ProtectClock = true;
|
||||
MemoryDenyWriteExecute = true;
|
||||
RestrictAddressFamilies = "AF_UNIX";
|
||||
SocketBindDeny = [
|
||||
"ipv4:tcp"
|
||||
"ipv4:udp"
|
||||
"ipv6:tcp"
|
||||
"ipv6:udp"
|
||||
];
|
||||
CapabilityBoundingSet = [
|
||||
"~CAP_BLOCK_SUSPEND"
|
||||
"CAP_BPF"
|
||||
"CAP_CHOWN"
|
||||
"CAP_MKNOD"
|
||||
"CAP_NET_RAW"
|
||||
"CAP_PERFMON"
|
||||
"CAP_SYS_BOOT"
|
||||
"CAP_SYS_CHROOT"
|
||||
"CAP_SYS_MODULE"
|
||||
"CAP_SYS_NICE"
|
||||
"CAP_SYS_PACCT"
|
||||
"CAP_SYS_PTRACE"
|
||||
"CAP_SYS_TIME"
|
||||
"CAP_SYSLOG"
|
||||
"CAP_WAKE_ALARM"
|
||||
];
|
||||
SystemCallFilter = [
|
||||
"~@aio:EPERM"
|
||||
"@chown:EPERM"
|
||||
"@clock:EPERM"
|
||||
"@cpu-emulation:EPERM"
|
||||
"@debug:EPERM"
|
||||
"@ipc:EPERM"
|
||||
"@keyring:EPERM"
|
||||
"@module:EPERM"
|
||||
"@mount:EPERM"
|
||||
"@obsolete:EPERM"
|
||||
"@pkey:EPERM"
|
||||
"@privileged:EPERM"
|
||||
"@raw-io:EPERM"
|
||||
"@reboot:EPERM"
|
||||
"@resources:EPERM"
|
||||
"@sandbox:EPERM"
|
||||
"@setuid:EPERM"
|
||||
"@swap:EPERM"
|
||||
"@sync:EPERM"
|
||||
];
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ erictapen ];
|
||||
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.programs.pinnacle;
|
||||
inherit (lib.options) mkEnableOption mkPackageOption;
|
||||
in
|
||||
{
|
||||
options.programs.pinnacle = {
|
||||
enable = mkEnableOption "pinnacle";
|
||||
package = mkPackageOption pkgs "pinnacle" {
|
||||
default = "pinnacle";
|
||||
example = "pkgs.pinnacle";
|
||||
extraDescription = "package containing the pinnacle server binary";
|
||||
};
|
||||
xdg-portals.enable = mkEnableOption "enable xdg-portals for pinnacle";
|
||||
withUWSM = mkEnableOption ''
|
||||
manage the pinnacle session with [UWSM](https://github.com/Vladimir-csp/uwsm) instead
|
||||
of independent systemd services and targets.
|
||||
'';
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable (
|
||||
lib.mkMerge [
|
||||
{
|
||||
environment.systemPackages = [
|
||||
cfg.package
|
||||
pkgs.protobuf
|
||||
cfg.package.lua-client-api
|
||||
];
|
||||
environment.pathsToLink = [
|
||||
# For /run/current-system/sw/share/pinnacle protobuf files - for
|
||||
# pinnacle to be able to launch with a non-default config out of the
|
||||
# box.
|
||||
"/share/pinnacle"
|
||||
];
|
||||
xdg.portal = lib.mkIf cfg.xdg-portals.enable {
|
||||
enable = true;
|
||||
wlr.enable = true;
|
||||
configPackages = [ cfg.package ];
|
||||
extraPortals = [
|
||||
pkgs.xdg-desktop-portal-wlr
|
||||
pkgs.xdg-desktop-portal-gtk
|
||||
pkgs.gnome-keyring
|
||||
];
|
||||
};
|
||||
}
|
||||
(lib.mkIf (cfg.withUWSM) {
|
||||
programs.uwsm.enable = true;
|
||||
# Configure UWSM to launch Pinnacle from a display manager like SDDM
|
||||
programs.uwsm.waylandCompositors = {
|
||||
pinnacle = {
|
||||
prettyName = "Pinnacle";
|
||||
comment = "Pinnacle compositor managed by UWSM";
|
||||
binPath = "/run/current-system/sw/bin/pinnacle";
|
||||
extraArgs = [ "--session" ];
|
||||
};
|
||||
};
|
||||
})
|
||||
(lib.mkIf (!cfg.withUWSM) {
|
||||
services.displayManager.sessionPackages = [ cfg.package ];
|
||||
})
|
||||
]
|
||||
);
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ cassandracomar ];
|
||||
}
|
||||
@@ -10,32 +10,32 @@ in
|
||||
{
|
||||
options.services.oo7 = {
|
||||
enable = lib.mkEnableOption ''
|
||||
oo7, a service providing the Secret Service D-Bus API
|
||||
oo7, a service providing the Secret Service D-Bus API.
|
||||
'';
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = [ pkgs.oo7 ];
|
||||
services.dbus.packages = [ pkgs.oo7-server ];
|
||||
|
||||
systemd = {
|
||||
packages = [ pkgs.oo7-server ];
|
||||
user.services.oo7-daemon.wantedBy = [ "default.target" ];
|
||||
};
|
||||
systemd.packages = [ pkgs.oo7-server ];
|
||||
|
||||
security = {
|
||||
pam.services.login.oo7.enable = true;
|
||||
|
||||
wrappers.oo7-daemon = {
|
||||
owner = "root";
|
||||
group = "root";
|
||||
capabilities = "cap_ipc_lock=ep";
|
||||
source = "${pkgs.oo7-server}/libexec/oo7-daemon";
|
||||
};
|
||||
};
|
||||
systemd.user.services.oo7-daemon.wantedBy = [ "default.target" ];
|
||||
|
||||
xdg.portal.extraPortals = [ pkgs.oo7-portal ];
|
||||
|
||||
security.pam.services.login.oo7.enable = true;
|
||||
|
||||
security.wrappers.oo7-daemon = {
|
||||
owner = "root";
|
||||
group = "root";
|
||||
capabilities = "cap_ipc_lock=ep";
|
||||
source = "${pkgs.oo7-server}/libexec/oo7-daemon";
|
||||
};
|
||||
};
|
||||
|
||||
meta = { inherit (pkgs.oo7.meta) maintainers; };
|
||||
meta = {
|
||||
inherit (pkgs.oo7.meta)
|
||||
maintainers
|
||||
;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -80,9 +80,6 @@ in
|
||||
unitConfig = lib.optionalAttrs cfg.startWithGraphical {
|
||||
After = "graphical-session.target";
|
||||
};
|
||||
|
||||
# Long-lived session that ought to only be restarted manually
|
||||
restartIfChanged = false;
|
||||
}
|
||||
// lib.optionalAttrs cfg.enable {
|
||||
wantedBy = if cfg.startWithGraphical then [ "graphical-session.target" ] else [ "default.target" ];
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
inherit (lib)
|
||||
mkIf
|
||||
mkOption
|
||||
mkEnableOption
|
||||
mkPackageOption
|
||||
getExe
|
||||
;
|
||||
inherit (lib.types) submodule;
|
||||
|
||||
cfg = config.services.watt;
|
||||
|
||||
format = pkgs.formats.toml { };
|
||||
cfgFile = format.generate "watt-config.toml" cfg.settings;
|
||||
|
||||
conflictingServices = [
|
||||
"power-profiles-daemon"
|
||||
"auto-cpufreq"
|
||||
"tlp"
|
||||
"cpupower-gui"
|
||||
"thermald"
|
||||
];
|
||||
|
||||
in
|
||||
{
|
||||
options.services.watt = {
|
||||
enable = mkEnableOption "automatic CPU speed & power optimizer for Linux";
|
||||
package = mkPackageOption pkgs "watt" { };
|
||||
|
||||
settings = mkOption {
|
||||
default = { };
|
||||
type = submodule { freeformType = format.type; };
|
||||
description = "Configuration for Watt. Options at https://github.com/notaShelf/watt";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
assertions = map (service: {
|
||||
assertion = !config.services.${service}.enable;
|
||||
message = "You have set services.${service}.enable = true; which conflicts with Watt.";
|
||||
}) conflictingServices;
|
||||
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
|
||||
# This is necessary for the Watt CLI. The environment variable
|
||||
# passed to the systemd service will take priority in read order.
|
||||
environment.etc."watt.toml".source = cfgFile;
|
||||
|
||||
services.dbus.packages = [ cfg.package ];
|
||||
|
||||
systemd.services.watt = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
conflicts = map (service: "${service}.service") conflictingServices;
|
||||
serviceConfig = {
|
||||
WorkingDirectory = "";
|
||||
ExecStart = getExe cfg.package;
|
||||
Restart = "on-failure";
|
||||
|
||||
RuntimeDirectory = "watt";
|
||||
RuntimeDirectoryMode = "0755";
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
}
|
||||
@@ -281,7 +281,7 @@ in
|
||||
environment.etc."postsrsd.conf".source = configFile;
|
||||
|
||||
systemd.services.postsrsd = {
|
||||
description = "Sender Rewriting Scheme daemon for Postfix";
|
||||
description = "PostSRSd SRS rewriting server";
|
||||
after = [
|
||||
"network.target"
|
||||
"postsrsd-generate-secrets.service"
|
||||
@@ -289,20 +289,14 @@ in
|
||||
before = [ "postfix.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
requires = [ "postsrsd-generate-secrets.service" ];
|
||||
reloadTriggers = [ configFile ];
|
||||
restartTriggers = [ configFile ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "notify-reload";
|
||||
ExecStart = utils.escapeSystemdExecArgs [
|
||||
(lib.getExe cfg.package)
|
||||
"-C"
|
||||
"/etc/postsrsd.conf"
|
||||
];
|
||||
ExecReload = toString [
|
||||
(lib.getExe' pkgs.coreutils "kill")
|
||||
"-SIGHUP"
|
||||
"$MAINPID"
|
||||
];
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
RuntimeDirectory = "postsrsd";
|
||||
@@ -325,7 +319,7 @@ in
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectSystem = "strict";
|
||||
ProtectProc = "noaccess";
|
||||
ProtectProc = "invisible";
|
||||
ProcSubset = "pid";
|
||||
RemoveIPC = true;
|
||||
RestrictAddressFamilies =
|
||||
|
||||
@@ -13,7 +13,6 @@ in
|
||||
{
|
||||
options.services.dendrite = {
|
||||
enable = lib.mkEnableOption "matrix.org dendrite";
|
||||
package = lib.mkPackageOption pkgs "dendrite" { };
|
||||
httpPort = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.port;
|
||||
default = 8008;
|
||||
@@ -322,7 +321,7 @@ in
|
||||
];
|
||||
ExecStart = lib.strings.concatStringsSep " " (
|
||||
[
|
||||
(lib.getExe cfg.package)
|
||||
"${pkgs.dendrite}/bin/dendrite"
|
||||
"--config /run/dendrite/dendrite.yaml"
|
||||
]
|
||||
++ lib.optionals (cfg.httpPort != null) [
|
||||
|
||||
@@ -1,153 +0,0 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
utils,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
cfg = config.services.rust-federation-tester;
|
||||
|
||||
configFile = "/run/rust-federation-tester/config.yaml";
|
||||
commonServiceConfig = {
|
||||
DynamicUser = true;
|
||||
RuntimeDirectory = "rust-federation-tester";
|
||||
RuntimeDirectoryPreserve = true;
|
||||
StateDirectory = "rust-federation-tester";
|
||||
User = "rust-federation-tester";
|
||||
WorkingDirectory = "%t/rust-federation-tester";
|
||||
|
||||
# Hardening
|
||||
UMask = "0077";
|
||||
CapabilityBoundingSet = [ "" ];
|
||||
DevicePolicy = "closed";
|
||||
PrivateTmp = true;
|
||||
ProtectHome = true;
|
||||
ProtectSystem = "strict";
|
||||
MemoryDenyWriteExecute = true;
|
||||
NoNewPrivileges = true;
|
||||
LockPersonality = true;
|
||||
PrivateDevices = true;
|
||||
PrivateMounts = true;
|
||||
ProcSubset = "pid";
|
||||
ProtectClock = true;
|
||||
ProtectControlGroups = true;
|
||||
ProtectHostname = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectProc = "invisible";
|
||||
RemoveIPC = true;
|
||||
RestrictAddressFamilies = [
|
||||
"AF_INET"
|
||||
"AF_INET6"
|
||||
"AF_UNIX"
|
||||
];
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
RestrictSUIDSGID = true;
|
||||
SystemCallArchitectures = "native";
|
||||
SystemCallFilter = [
|
||||
"@system-service"
|
||||
];
|
||||
};
|
||||
|
||||
secretsInjection = utils.genJqSecretsReplacement {
|
||||
loadCredential = true;
|
||||
} cfg.settings configFile;
|
||||
in
|
||||
{
|
||||
options.services.rust-federation-tester = {
|
||||
enable = lib.mkEnableOption "rust-federation-tester";
|
||||
|
||||
settings = lib.mkOption {
|
||||
type = lib.types.submodule {
|
||||
freeformType = lib.types.json;
|
||||
options = {
|
||||
frontend_url = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = "federation-tester.example.org";
|
||||
description = ''
|
||||
URL of the service's frontend.
|
||||
'';
|
||||
};
|
||||
|
||||
database_url = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "sqlite:///var/lib/rust-federation-tester/db?mode=rwc";
|
||||
example = "postgres://localhost/db?currentSchema=schema";
|
||||
description = ''
|
||||
The database to store accounts and statistics.
|
||||
'';
|
||||
};
|
||||
|
||||
smtp = {
|
||||
enabled = lib.mkEnableOption "mail delivery for configured alerts";
|
||||
};
|
||||
|
||||
listen_addr = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "[::]:8080";
|
||||
example = "unix:/run/rust-federation-tester/rust-federation-tester.sock";
|
||||
description = ''
|
||||
Address the API server should listen on.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
description = ''
|
||||
Settings representing the values in {file}`config.yaml` of the service.
|
||||
|
||||
Refer to [`config.yaml.example`] for supported values.
|
||||
|
||||
[`config.yaml.example`]: https://github.com/MTRNord/rust-federation-tester/blob/main/config.yaml.example
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
systemd.sockets.rust-federation-tester = {
|
||||
description = "Matrix-Federation-Tester in Rust socket";
|
||||
wantedBy = [ "sockets.target" ];
|
||||
listenStreams = [ (lib.removePrefix "unix:" cfg.settings.listen_addr) ];
|
||||
};
|
||||
|
||||
systemd.services.rust-federation-tester-setup = {
|
||||
description = "Matrix-Federation-Tester in Rust";
|
||||
path = [ pkgs.rust-federation-tester ];
|
||||
|
||||
serviceConfig = lib.mkMerge [
|
||||
commonServiceConfig
|
||||
{
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
LoadCredential = secretsInjection.credentials;
|
||||
ExecStart = "${pkgs.writeShellScript "rust-federation-tester-setup" ''
|
||||
${secretsInjection.script}
|
||||
|
||||
migration up
|
||||
''}";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
systemd.services.rust-federation-tester = {
|
||||
description = "Matrix-Federation-Tester in Rust";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
documentation = [ "https://github.com/MTRNord/rust-federation-tester" ];
|
||||
after = [ "rust-federation-tester-setup.service" ];
|
||||
requires = [ "rust-federation-tester-setup.service" ];
|
||||
|
||||
serviceConfig = lib.mkMerge [
|
||||
commonServiceConfig
|
||||
{
|
||||
ExecSearchPath = lib.makeBinPath [ pkgs.rust-federation-tester ];
|
||||
ExecStart = "rust-federation-tester";
|
||||
Restart = "on-failure";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -245,19 +245,19 @@ in
|
||||
};
|
||||
|
||||
components = {
|
||||
subversion = lib.mkEnableOption "Subversion integration";
|
||||
subversion = lib.mkEnableOption "Subversion integration.";
|
||||
|
||||
mercurial = lib.mkEnableOption "Mercurial integration";
|
||||
mercurial = lib.mkEnableOption "Mercurial integration.";
|
||||
|
||||
git = lib.mkEnableOption "git integration";
|
||||
git = lib.mkEnableOption "git integration.";
|
||||
|
||||
cvs = lib.mkEnableOption "cvs integration";
|
||||
cvs = lib.mkEnableOption "cvs integration.";
|
||||
|
||||
breezy = lib.mkEnableOption "bazaar integration";
|
||||
breezy = lib.mkEnableOption "bazaar integration.";
|
||||
|
||||
imagemagick = lib.mkEnableOption "exporting Gant diagrams as PNG";
|
||||
imagemagick = lib.mkEnableOption "exporting Gant diagrams as PNG.";
|
||||
|
||||
ghostscript = lib.mkEnableOption "exporting Gant diagrams as PDF";
|
||||
ghostscript = lib.mkEnableOption "exporting Gant diagrams as PDF.";
|
||||
|
||||
minimagick_font_path = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
@@ -265,8 +265,6 @@ in
|
||||
description = "MiniMagick font path";
|
||||
example = "/run/current-system/sw/share/X11/fonts/LiberationSans-Regular.ttf";
|
||||
};
|
||||
|
||||
pandoc = lib.mkEnableOption "pandoc integration for previewing LibreOffice and Microsoft Office documents";
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -312,7 +310,6 @@ in
|
||||
imagemagick_convert_command = lib.optionalString cfg.components.imagemagick "${pkgs.imagemagick}/bin/convert";
|
||||
gs_command = lib.optionalString cfg.components.ghostscript "${pkgs.ghostscript}/bin/gs";
|
||||
minimagick_font_path = "${cfg.components.minimagick_font_path}";
|
||||
pandoc_command = lib.optionalString cfg.components.pandoc "${pkgs.pandoc}/bin/pandoc";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -90,5 +90,8 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ nanoyaki ];
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
diniamo
|
||||
nanoyaki
|
||||
];
|
||||
}
|
||||
|
||||
@@ -6,14 +6,6 @@
|
||||
}:
|
||||
let
|
||||
|
||||
attrsToExports = lib.concatMapAttrsStringSep "\n" (
|
||||
exportPoint: clientsAndOptions:
|
||||
exportPoint
|
||||
+ lib.concatMapAttrsStringSep "" (
|
||||
client: options: " ${client}(${lib.concatStringsSep "," options})"
|
||||
) clientsAndOptions
|
||||
);
|
||||
|
||||
cfg = config.services.nfs.server;
|
||||
|
||||
exports = pkgs.writeText "exports" cfg.exports;
|
||||
@@ -56,26 +48,12 @@ in
|
||||
};
|
||||
|
||||
exports = lib.mkOption {
|
||||
type = with lib.types; coercedTo (attrsOf (attrsOf (listOf str))) attrsToExports lines;
|
||||
type = lib.types.lines;
|
||||
default = "";
|
||||
description = ''
|
||||
Contents of the /etc/exports file. See
|
||||
{manpage}`exports(5)` for the format.
|
||||
'';
|
||||
example = {
|
||||
"/usr" = {
|
||||
"*.local.domain" = [ "ro" ];
|
||||
"@trusted" = [ "rw" ];
|
||||
};
|
||||
"/home/joe" = {
|
||||
"pc001" = [
|
||||
"rw"
|
||||
"all_squash"
|
||||
"anonuid=150"
|
||||
"anongid=100"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
hostName = lib.mkOption {
|
||||
|
||||
@@ -93,10 +93,6 @@ in
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
warnings = mkIf (!config.networking.useNetworkd) [
|
||||
"services.networkd-dispatcher will not execute any scripts unless networking.useNetworkd is enabled."
|
||||
];
|
||||
|
||||
systemd = {
|
||||
packages = [ pkgs.networkd-dispatcher ];
|
||||
services.networkd-dispatcher = {
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
# NordVPN {#module-services-nordvpn}
|
||||
|
||||
*Source:* {file}`modules/services/networking/nordvpn.nix`
|
||||
|
||||
*Upstream documentation:* <https://github.com/NordSecurity/nordvpn-linux>
|
||||
|
||||
NordVPN offers a paid virtual private network (VPN) service.
|
||||
The service operates as closed-source,
|
||||
but the Linux client uses open-source code licensed under GPLv3.
|
||||
A minimal configuration in NixOS appears as follows:
|
||||
|
||||
```nix
|
||||
{
|
||||
services.nordvpn.enable = true;
|
||||
networking.firewall.enable = true;
|
||||
networking.firewall.checkReversePath = "loose";
|
||||
}
|
||||
```
|
||||
|
||||
When using a firewall, set `networking.firewall.checkReversePath` to `"loose"` or `false`.
|
||||
NordVPN includes a `kill-switch` feature that blocks all packets not associated with the VPN connection.
|
||||
|
||||
Additionally, add your user to the `nordvpn` group.
|
||||
|
||||
```nix
|
||||
{
|
||||
users.users.yourUser = {
|
||||
#..
|
||||
extraGroups = [
|
||||
#..
|
||||
"nordvpn"
|
||||
];
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
If you prefer to use your own user and group, you can do so using
|
||||
|
||||
```nix
|
||||
{
|
||||
services.nordvpn.user = "SOME-USER";
|
||||
services.nordvpn.group = "SOME-GROUP";
|
||||
}
|
||||
```
|
||||
|
||||
NordVPN provides several useful CLI commands, including:
|
||||
|
||||
```bash
|
||||
nordvpn login # Log in using an OAuth URL
|
||||
nordvpn login --token <token> # Log in with a token obtained from your NordVPN account
|
||||
nordvpn c # Connect to the VPN
|
||||
nordvpn c ie # Connect to a NordVPN server in Ireland
|
||||
nordvpn d # Disconnect from the VPN
|
||||
nordvpn set technology openvpn # Switch to OpenVPN technology
|
||||
nordvpn c # Reconnect after changing technology
|
||||
```
|
||||
|
||||
Additionally, if you prefer to use the friendly GUI,
|
||||
|
||||
```bash
|
||||
nordvpn-gui
|
||||
```
|
||||
|
||||
**Disclaimer:** NixOS currently does not support meshnet.
|
||||
Contributions welcome!
|
||||
@@ -1,171 +0,0 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.services.nordvpn;
|
||||
defaultUser = "nordvpn";
|
||||
defaultGroup = "nordvpn";
|
||||
|
||||
nordvpn =
|
||||
let
|
||||
cli = cfg.package.cli.overrideAttrs (old: {
|
||||
preBuild =
|
||||
let
|
||||
extraPreBuild = lib.optionalString (cfg.group != defaultGroup) ''
|
||||
substituteInPlace internal/permissions.go \
|
||||
--replace-fail \
|
||||
'string{"nordvpn"}' \
|
||||
'string{"${cfg.group}"}'
|
||||
|
||||
substituteInPlace internal/constants.go \
|
||||
--replace-fail \
|
||||
'NordvpnGroup = "nordvpn"' \
|
||||
'NordvpnGroup = "${cfg.group}"'
|
||||
'';
|
||||
in
|
||||
extraPreBuild + (old.preBuild or "");
|
||||
|
||||
# postFixup wraps nordvpnd so that it can find binaries that it calls.
|
||||
# here, instead, use systemd to update the path to those binaries.
|
||||
postFixup = "";
|
||||
});
|
||||
in
|
||||
pkgs.symlinkJoin {
|
||||
inherit (cfg.package) pname version meta;
|
||||
paths = [
|
||||
cli
|
||||
cfg.package.gui
|
||||
];
|
||||
};
|
||||
in
|
||||
{
|
||||
options.services.nordvpn = {
|
||||
enable = lib.mkEnableOption "Enable NordVPN";
|
||||
package = lib.mkPackageOption pkgs "nordvpn" { };
|
||||
user = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = defaultUser;
|
||||
description = ''
|
||||
The User that owns the `nordvpnd` systemd process.
|
||||
If overriding the default, a user with the same name must exist.
|
||||
'';
|
||||
};
|
||||
group = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = defaultGroup;
|
||||
description = ''
|
||||
The Group that owns the `nordvpnd` systemd process.
|
||||
If overriding the default, a group with the same name must exist.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
|
||||
# create the default user if that's the one used
|
||||
users.users = lib.mkIf (cfg.user == defaultUser) {
|
||||
${defaultUser} = {
|
||||
description = "User that runs `nordvpnd`.";
|
||||
group = cfg.group;
|
||||
isSystemUser = true;
|
||||
};
|
||||
};
|
||||
|
||||
# create the default group if that's the one used
|
||||
users.groups = lib.mkIf (cfg.group == defaultGroup) {
|
||||
${defaultGroup} = { };
|
||||
};
|
||||
|
||||
# nordvpnd uses resolved to configure dns
|
||||
services.resolved.enable = true;
|
||||
|
||||
# policy that allows nordvpnd to configure dns
|
||||
security.polkit = {
|
||||
enable = true;
|
||||
extraConfig = ''
|
||||
polkit.addRule(function(action, subject) {
|
||||
if (action.id == "org.freedesktop.resolve1.set-dns-servers"
|
||||
&& subject.isInGroup("${cfg.group}")) {
|
||||
return polkit.Result.YES;
|
||||
}
|
||||
});
|
||||
'';
|
||||
};
|
||||
|
||||
environment.systemPackages = [
|
||||
nordvpn
|
||||
];
|
||||
|
||||
systemd.services.nordvpnd = {
|
||||
after = [ "network-online.target" ];
|
||||
description = "NordVPN daemon.";
|
||||
path = (
|
||||
with pkgs;
|
||||
[
|
||||
e2fsprogs
|
||||
iproute2
|
||||
libxslt
|
||||
nftables
|
||||
procps
|
||||
wireguard-tools
|
||||
]
|
||||
++ [ nordvpn ]
|
||||
);
|
||||
serviceConfig = {
|
||||
# nordvpnd needs CAP_NET_ADMIN to configure network interfaces
|
||||
AmbientCapabilities = "CAP_NET_ADMIN";
|
||||
CapabilityBoundingSet = "CAP_NET_ADMIN";
|
||||
ExecStart = lib.getExe' nordvpn "nordvpnd";
|
||||
Group = cfg.group;
|
||||
KillMode = "process";
|
||||
NonBlocking = true;
|
||||
Requires = "nordvpnd.socket";
|
||||
Restart = "on-failure";
|
||||
RestartSec = 5;
|
||||
RuntimeDirectory = "nordvpn";
|
||||
RuntimeDirectoryMode = "0750";
|
||||
StateDirectory = "nordvpn";
|
||||
StateDirectoryMode = "0750";
|
||||
User = cfg.user;
|
||||
};
|
||||
wantedBy = [ "default.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
};
|
||||
|
||||
systemd.sockets.nordvpnd = {
|
||||
description = "NordVPN Daemon Socket";
|
||||
listenStreams = [ "/run/nordvpn/nordvpnd.sock" ];
|
||||
partOf = [ "nordvpnd.service" ];
|
||||
socketConfig = {
|
||||
DirectoryMode = "0750";
|
||||
NoDelay = true;
|
||||
SocketGroup = cfg.group;
|
||||
SocketMode = "0770";
|
||||
SocketUser = cfg.user;
|
||||
};
|
||||
wantedBy = [ "sockets.target" ];
|
||||
};
|
||||
|
||||
systemd.user.services.norduserd = {
|
||||
after = [ "network-online.target" ];
|
||||
description = "NordUserD Service";
|
||||
serviceConfig = {
|
||||
ExecStart = lib.getExe' nordvpn "norduserd";
|
||||
NonBlocking = true;
|
||||
Restart = "on-failure";
|
||||
RestartSec = 5;
|
||||
};
|
||||
wantedBy = [ "graphical-session.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
meta = {
|
||||
doc = ./nordvpn.md;
|
||||
maintainers = with lib.maintainers; [ different-error ];
|
||||
};
|
||||
}
|
||||
@@ -25,10 +25,10 @@ let
|
||||
if
|
||||
isUnixGui
|
||||
# if cfg.guiAddress is a unix socket, tell curl explicitly about it
|
||||
# note that the syncthing.local in front of `${path}` is the hostname, which is
|
||||
# note that the dot in front of `${path}` is the hostname, which is
|
||||
# required.
|
||||
then
|
||||
"--unix-socket ${lib.strings.removePrefix "unix://" cfg.guiAddress} http://syncthing.local${path}"
|
||||
"--unix-socket ${lib.strings.removePrefix "unix://" cfg.guiAddress} http://.${path}"
|
||||
# no adjustments are needed if cfg.guiAddress is a network address
|
||||
else
|
||||
"${cfg.guiAddress}${path}";
|
||||
|
||||
@@ -65,7 +65,6 @@ in
|
||||
DynamicUser = true;
|
||||
|
||||
StateDirectory = "technitium-dns-server";
|
||||
LogsDirectory = "technitium";
|
||||
|
||||
Restart = "always";
|
||||
RestartSec = 10;
|
||||
@@ -103,8 +102,5 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
fabianrig
|
||||
awildleon
|
||||
];
|
||||
meta.maintainers = with lib.maintainers; [ fabianrig ];
|
||||
}
|
||||
|
||||
@@ -96,13 +96,13 @@ with lib;
|
||||
config = mkIf cfg.enable {
|
||||
services.tor = mkIf cfg.tor {
|
||||
enable = true;
|
||||
controlPort = 9051;
|
||||
|
||||
settings = {
|
||||
ControlPort = 9051;
|
||||
CacheDirectoryGroupReadable = true;
|
||||
CookieAuthentication = true;
|
||||
CookieAuthFileGroupReadable = true;
|
||||
};
|
||||
extraConfig = ''
|
||||
CacheDirectoryGroupReadable 1
|
||||
CookieAuthentication 1
|
||||
CookieAuthFileGroupReadable 1
|
||||
'';
|
||||
};
|
||||
|
||||
systemd.services.zeronet = {
|
||||
|
||||
@@ -76,24 +76,6 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Include getty in the system.
|
||||
|
||||
getty is quiescent until called into action and does not have
|
||||
runtime costs if it is not used. The benefit of disabling it is
|
||||
in reducing closure size.
|
||||
|
||||
Disabling getty means that console login may not be possible,
|
||||
`machinectl shell` and `login` may not work, and other ills.
|
||||
It is only recommended for lights-out, headless containers,
|
||||
appliances, and similar configurations not meant for any human
|
||||
interaction ever.
|
||||
'';
|
||||
};
|
||||
|
||||
loginProgram = mkOption {
|
||||
type = types.path;
|
||||
default = "${pkgs.shadow}/bin/login";
|
||||
@@ -151,7 +133,7 @@ in
|
||||
|
||||
###### implementation
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
config = {
|
||||
# Note: this is set here rather than up there so that changing
|
||||
# nixos.label would not rebuild manual pages
|
||||
services.getty.greetingLine = mkDefault ''<<< Welcome to ${config.system.nixos.distroName} ${config.system.nixos.label} (\m) - \l >>>'';
|
||||
|
||||
@@ -37,8 +37,6 @@ in
|
||||
|
||||
See [Isso Server Configuration](https://posativ.org/isso/docs/configuration/server/)
|
||||
for supported values.
|
||||
You can set secrets using the secretFile option with environment variables following
|
||||
[the documentation](https://isso-comments.de/docs/reference/server-config/#environment-variables).
|
||||
'';
|
||||
|
||||
type = types.submodule {
|
||||
@@ -53,16 +51,6 @@ in
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
secretFile = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
A file containing secrets as environment variables that will be used in the configuration.
|
||||
See [the documentation](https://isso-comments.de/docs/reference/server-config/#environment-variables) for details.
|
||||
'';
|
||||
example = "/run/secrets/isso.env";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -77,8 +65,6 @@ in
|
||||
User = "isso";
|
||||
Group = "isso";
|
||||
|
||||
EnvironmentFile = mkIf (cfg.secretFile != null) [ cfg.secretFile ];
|
||||
|
||||
DynamicUser = true;
|
||||
|
||||
StateDirectory = "isso";
|
||||
|
||||
@@ -50,6 +50,7 @@ let
|
||||
environment = pythonEnvironment;
|
||||
|
||||
serviceConfig = {
|
||||
RuntimeDirectory = "lasuite-meet";
|
||||
StateDirectory = "lasuite-meet";
|
||||
WorkingDirectory = "/var/lib/lasuite-meet";
|
||||
|
||||
@@ -381,8 +382,6 @@ in
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
# needs to be here so that cronjobs don't nuke it
|
||||
RuntimeDirectory = "lasuite-meet";
|
||||
BindReadOnlyPaths = "${cfg.package}/share/static:/var/lib/lasuite-meet/static";
|
||||
|
||||
ExecStart = utils.escapeSystemdExecArgs (
|
||||
|
||||
@@ -5,7 +5,7 @@ self-hostable cloud platform. The server setup can be automated using
|
||||
[services.nextcloud](#opt-services.nextcloud.enable). A
|
||||
desktop client is packaged at `pkgs.nextcloud-client`.
|
||||
|
||||
The current default by NixOS is `nextcloud34` which is also the latest
|
||||
The current default by NixOS is `nextcloud33` which is also the latest
|
||||
major version available.
|
||||
|
||||
## Basic usage {#module-services-nextcloud-basic-usage}
|
||||
|
||||
@@ -467,7 +467,6 @@ in
|
||||
relatedPackages = [
|
||||
"nextcloud32"
|
||||
"nextcloud33"
|
||||
"nextcloud34"
|
||||
];
|
||||
};
|
||||
phpPackage = lib.mkPackageOption pkgs "php" {
|
||||
@@ -1196,7 +1195,7 @@ in
|
||||
{
|
||||
warnings =
|
||||
let
|
||||
latest = 34;
|
||||
latest = 33;
|
||||
upgradeWarning = major: nixos: ''
|
||||
A legacy Nextcloud install (from before NixOS ${nixos}) may be installed.
|
||||
|
||||
@@ -1229,8 +1228,7 @@ in
|
||||
++ (lib.optional (lib.versionOlder cfg.package.version "30") (upgradeWarning 29 "24.11"))
|
||||
++ (lib.optional (lib.versionOlder cfg.package.version "31") (upgradeWarning 30 "25.05"))
|
||||
++ (lib.optional (lib.versionOlder cfg.package.version "32") (upgradeWarning 31 "25.11"))
|
||||
++ (lib.optional (lib.versionOlder cfg.package.version "33") (upgradeWarning 32 "26.05"))
|
||||
++ (lib.optional (lib.versionOlder cfg.package.version "34") (upgradeWarning 33 "26.11"));
|
||||
++ (lib.optional (lib.versionOlder cfg.package.version "33") (upgradeWarning 32 "26.05"));
|
||||
|
||||
services.nextcloud.package = lib.mkDefault (
|
||||
if pkgs ? nextcloud then
|
||||
@@ -1243,10 +1241,8 @@ in
|
||||
pkgs.nextcloud31
|
||||
else if lib.versionOlder stateVersion "26.05" then
|
||||
pkgs.nextcloud32
|
||||
else if lib.versionOlder stateVersion "26.11" then
|
||||
pkgs.nextcloud33
|
||||
else
|
||||
pkgs.nextcloud34
|
||||
pkgs.nextcloud33
|
||||
);
|
||||
|
||||
services.nextcloud.phpOptions = lib.mkMerge [
|
||||
|
||||
@@ -1617,7 +1617,6 @@ in
|
||||
MemoryDenyWriteExecute =
|
||||
!(
|
||||
(builtins.any (mod: (mod.allowMemoryWriteExecute or false)) cfg.package.modules)
|
||||
|| cfg.lua.enable
|
||||
|| (cfg.package == pkgs.openresty)
|
||||
);
|
||||
RestrictRealtime = true;
|
||||
|
||||
@@ -18,15 +18,6 @@ let
|
||||
"yes"
|
||||
else if false == value then
|
||||
"no"
|
||||
else if isString value then
|
||||
# Escape according to https://www.php.net/manual/en/function.parse-ini-file.php
|
||||
# Not escaping `$` since users might want to use that to interpolate environment variables.
|
||||
# Additionally, php-fpm applies post-processing to env values that start with `$` and replaces
|
||||
# them with the respective env variable, with no way to escape: https://github.com/php/php-src/blob/631c366f9f58c8ba4078a48d1f56187cfbf8e549/sapi/fpm/fpm/fpm_env.c#L171-L180
|
||||
# In all platforms except for Windows, PHP_EOL is the line feed `\n` character,
|
||||
# which we use here as an escape value since php-fpm parses the config line-by-line.
|
||||
# See https://github.com/NixOS/nixpkgs/pull/516530#issuecomment-4878738511 for more information.
|
||||
''"${replaceString "\n" ''" PHP_EOL "'' (escape [ "\"" "\\" ] value)}"''
|
||||
else
|
||||
toString value;
|
||||
|
||||
|
||||
@@ -141,10 +141,6 @@ in
|
||||
services.libinput.enable = mkDefault true;
|
||||
|
||||
security.pam.services.mate-screensaver.unixAuth = true;
|
||||
security.polkit = {
|
||||
enable = true;
|
||||
enablePkexecWrapper = mkDefault true;
|
||||
};
|
||||
|
||||
xdg.portal.configPackages = mkDefault [ pkgs.mate-desktop ];
|
||||
|
||||
|
||||
@@ -347,7 +347,7 @@ def config_entry(levels: int, bootspec: BootSpec, label: str, time: str) -> str:
|
||||
os.path.basename(bootspec.toplevel) + "-secrets"
|
||||
)
|
||||
|
||||
if subprocess.run([bootspec.initrdSecrets, initrd_secrets_path_temp]).returncode != 0:
|
||||
if os.system(bootspec.initrdSecrets + " " + initrd_secrets_path_temp) != 0:
|
||||
print(
|
||||
f'warning: failed to create initrd secrets for "{label}"',
|
||||
file=sys.stderr,
|
||||
|
||||
@@ -113,48 +113,6 @@ in
|
||||
defaultText = lib.literalExpression "config.systemd.lib.escapeSystemdExecArgs config.process.argv";
|
||||
};
|
||||
|
||||
systemd.mainExecReload = mkOption {
|
||||
description = ''
|
||||
Main command line for systemd's ExecReload with systemd's specifier and
|
||||
environment variable substitution enabled.
|
||||
|
||||
This option sets the primary ExecRestart entry. Additional ExecReload entries
|
||||
can be added via `systemd.service.serviceConfig.ExecReload` with `lib.mkBefore`
|
||||
or `lib.mkAfter`.
|
||||
|
||||
This option allows you to use systemd specifiers like `%n` (unit name),
|
||||
`%i` (instance), `%t` (runtime directory), and environment variables using
|
||||
`''${VAR}` syntax in your command line.
|
||||
|
||||
By default, it is either set to null or this is set to the escaped version of {option}`process.reloadCommand`
|
||||
when specified to prevent systemd substitution. Set this option explicitly to enable
|
||||
systemd's substitution features.
|
||||
|
||||
To extend {option}`process.reloadCommand` with systemd specifiers, you can append
|
||||
to the escaped arguments:
|
||||
|
||||
```nix
|
||||
systemd.mainExecReload =
|
||||
config.systemd.lib.escapeSystemdExecArgs config.process.reload + " --systemd-unit %n";
|
||||
```
|
||||
|
||||
This pattern allows you to pass the unit name (or other systemd specifiers)
|
||||
as additional arguments while keeping the base command from {option}`process.argv`
|
||||
properly escaped.
|
||||
|
||||
See {manpage}`systemd.service(5)` (section "COMMAND LINES") for details on
|
||||
variable substitution and {manpage}`systemd.unit(5)` (section "SPECIFIERS")
|
||||
for available specifiers like `%n`, `%i`, `%t`.
|
||||
'';
|
||||
type = types.nullOr types.str;
|
||||
default =
|
||||
if config.process.reloadCommand then
|
||||
config.systemd.lib.escapeSystemdExecArgs config.process.reloadCommand
|
||||
else
|
||||
"";
|
||||
defaultText = lib.literalExpression "config.systemd.lib.escapeSystemdExecArgs config.process.reloadCommand";
|
||||
};
|
||||
|
||||
systemd.services = mkOption {
|
||||
description = ''
|
||||
This module configures systemd services, with the notable difference that their unit names will be prefixed with the abstract service name.
|
||||
@@ -212,10 +170,7 @@ in
|
||||
# TODO description;
|
||||
wantedBy = lib.mkDefault [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
ExecReload = config.systemd.mainExecReload;
|
||||
Type = lib.mkDefault (
|
||||
if (config.serviceManager.notificationProtocol == "systemd") then "notify" else "simple"
|
||||
);
|
||||
Type = lib.mkDefault "simple";
|
||||
Restart = lib.mkDefault "always";
|
||||
RestartSec = lib.mkDefault "5";
|
||||
ExecStart = [
|
||||
|
||||
@@ -63,7 +63,7 @@ let
|
||||
- `config.node.pkgs.<name>` or `config.nodes.foo.nixpkgs.pkgs.<name>` to refer
|
||||
to the Nixpkgs used on the VM guest(s).
|
||||
- `hostPkgs.<name>` when invoking commands on the VM host (e.g. in Python
|
||||
`subprocess.run(["foo"])`)
|
||||
`os.system("foo")`)
|
||||
- Since the runTest argument is a module instead of a function, arguments
|
||||
must be passed as option definitions.
|
||||
You may declare explicit `options` for the test parameter(s), or use the
|
||||
@@ -1005,6 +1005,7 @@ in
|
||||
matrix-conduit = runTest ./matrix/conduit.nix;
|
||||
matrix-continuwuity = runTest ./matrix/continuwuity.nix;
|
||||
matrix-synapse = runTest ./matrix/synapse.nix;
|
||||
matrix-synapse-workers = runTest ./matrix/synapse-workers.nix;
|
||||
matrix-tuwunel = runTest ./matrix/tuwunel.nix;
|
||||
matter-server = runTest ./matter-server.nix;
|
||||
matterjs-server = runTest ./matterjs-server.nix;
|
||||
@@ -1205,7 +1206,6 @@ in
|
||||
nominatim = runTest ./nominatim.nix;
|
||||
non-default-filesystems = handleTest ./non-default-filesystems.nix { };
|
||||
non-switchable-system = runTest ./non-switchable-system.nix;
|
||||
nordvpn = runTest ./nordvpn.nix;
|
||||
noto-fonts = runTest ./noto-fonts.nix;
|
||||
noto-fonts-cjk-qt-default-weight = runTest ./noto-fonts-cjk-qt-default-weight.nix;
|
||||
novacomd = handleTestOn [ "x86_64-linux" ] ./novacomd.nix { };
|
||||
@@ -1852,7 +1852,6 @@ in
|
||||
wasabibackend = runTest ./wasabibackend.nix;
|
||||
wastebin = runTest ./wastebin.nix;
|
||||
watchdogd = runTest ./watchdogd.nix;
|
||||
watt = runTest ./watt.nix;
|
||||
webhook = runTest ./webhook.nix;
|
||||
weblate = runTest ./web-apps/weblate.nix;
|
||||
wg-access-server = runTest ./wg-access-server.nix;
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
]
|
||||
++ teams.ngi.members;
|
||||
|
||||
containers.machine = {
|
||||
nodes.machine = {
|
||||
environment.systemPackages = with pkgs; [
|
||||
blint
|
||||
jq
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{
|
||||
name = "PDS";
|
||||
|
||||
containers.machine = {
|
||||
nodes.machine = {
|
||||
services.bluesky-pds = {
|
||||
enable = true;
|
||||
settings = {
|
||||
|
||||
@@ -203,26 +203,11 @@ in
|
||||
makeTest {
|
||||
name = "boot-uboot-extlinux";
|
||||
nodes = { };
|
||||
testScript = /* py */ ''
|
||||
import subprocess
|
||||
testScript = ''
|
||||
import os
|
||||
|
||||
# Create a mutable linked image backed by the read-only SD image
|
||||
if (
|
||||
subprocess.run(
|
||||
[
|
||||
"${pkgs.qemu}/bin/qemu-img",
|
||||
"create",
|
||||
"-f",
|
||||
"qcow2",
|
||||
"-F",
|
||||
"raw",
|
||||
"-b",
|
||||
"${sdImage}",
|
||||
"${mutableImage}",
|
||||
]
|
||||
).returncode
|
||||
!= 0
|
||||
):
|
||||
if os.system("${pkgs.qemu}/bin/qemu-img create -f qcow2 -F raw -b ${sdImage} ${mutableImage}") != 0:
|
||||
raise RuntimeError("Could not create mutable linked image")
|
||||
|
||||
machine = create_machine("${startCommand}")
|
||||
|
||||
@@ -135,17 +135,7 @@ in
|
||||
public_key = os.path.join(key_dir, "id_ed25519.pub")
|
||||
|
||||
# Generate key pair using host SSH tools
|
||||
ret = subprocess.run(
|
||||
[
|
||||
"${hostPkgs.openssh}/bin/ssh-keygen",
|
||||
"-t",
|
||||
"ed25519",
|
||||
"-f",
|
||||
private_key,
|
||||
"-N",
|
||||
""
|
||||
]
|
||||
).returncode
|
||||
ret = os.system(f"${hostPkgs.openssh}/bin/ssh-keygen -t ed25519 -f {private_key} -N \"\"")
|
||||
if ret != 0:
|
||||
raise Exception("Failed to generate SSH key pair")
|
||||
|
||||
|
||||
@@ -54,13 +54,13 @@
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
import subprocess
|
||||
import os
|
||||
|
||||
# prepare certificates
|
||||
|
||||
def cmd(command):
|
||||
print(f"+{command}")
|
||||
r = subprocess.run(command, shell=True).returncode
|
||||
r = os.system(command)
|
||||
if r != 0:
|
||||
raise Exception(f"Command {command} failed with exit code {r}")
|
||||
|
||||
|
||||
@@ -48,13 +48,13 @@
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
import subprocess
|
||||
import os
|
||||
|
||||
# prepare certificates
|
||||
|
||||
def cmd(command):
|
||||
print(f"+{command}")
|
||||
r = subprocess.run(command, shell=True).returncode
|
||||
r = os.system(command)
|
||||
if r != 0:
|
||||
raise Exception(f"Command {command} failed with exit code {r}")
|
||||
|
||||
|
||||
@@ -69,12 +69,12 @@
|
||||
};
|
||||
};
|
||||
testScript = ''
|
||||
import subprocess
|
||||
import os
|
||||
|
||||
# Helpers
|
||||
def cmd(command):
|
||||
print(f"+{command}")
|
||||
r = subprocess.run(command, shell=True).returncode
|
||||
r = os.system(command)
|
||||
if r != 0:
|
||||
raise Exception(f"Command {command} failed with exit code {r}")
|
||||
|
||||
|
||||
@@ -20,66 +20,61 @@ in
|
||||
};
|
||||
networking.firewall.allowedTCPPorts = [ 6167 ];
|
||||
};
|
||||
|
||||
client =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
environment.systemPackages = [
|
||||
(pkgs.writers.writePython3Bin "do_test" { libraries = [ pkgs.python3Packages.mautrix ]; } ''
|
||||
(pkgs.writers.writePython3Bin "do_test" { libraries = [ pkgs.python3Packages.matrix-nio ]; } ''
|
||||
import asyncio
|
||||
|
||||
from mautrix.client import Client
|
||||
from mautrix.types import EventType, RoomFilter
|
||||
import nio
|
||||
|
||||
|
||||
async def main() -> None:
|
||||
# Connect to continuwuity
|
||||
client = Client(
|
||||
mxid="@${user}:${name}",
|
||||
base_url="http://continuwuity:6167",
|
||||
)
|
||||
client = nio.AsyncClient("http://continuwuity:6167", "${user}")
|
||||
|
||||
# Log in as user alice
|
||||
await client.login(password="${pass}")
|
||||
response = await client.login("${pass}")
|
||||
|
||||
# Create a new room
|
||||
room_id = await client.create_room()
|
||||
print("Created room:", room_id)
|
||||
response = await client.room_create(federate=False)
|
||||
print("Matrix room create response:", response)
|
||||
assert isinstance(response, nio.RoomCreateResponse)
|
||||
room_id = response.room_id
|
||||
|
||||
# Join the room
|
||||
await client.join_room_by_id(room_id)
|
||||
print("Joined room")
|
||||
response = await client.join(room_id)
|
||||
print("Matrix join response:", response)
|
||||
assert isinstance(response, nio.JoinResponse)
|
||||
|
||||
# Send a message to the room
|
||||
received = asyncio.Event()
|
||||
msg = "Hello continuwuity!"
|
||||
response = await client.room_send(
|
||||
room_id=room_id,
|
||||
message_type="m.room.message",
|
||||
content={
|
||||
"msgtype": "m.text",
|
||||
"body": "Hello continuwuity!"
|
||||
}
|
||||
)
|
||||
print("Matrix room send response:", response)
|
||||
assert isinstance(response, nio.RoomSendResponse)
|
||||
|
||||
async def on_message(evt):
|
||||
if (
|
||||
evt.room_id != room_id
|
||||
or evt.sender != client.mxid
|
||||
or evt.type != EventType.ROOM_MESSAGE
|
||||
):
|
||||
return
|
||||
# Sync responses
|
||||
response = await client.sync(timeout=30000)
|
||||
print("Matrix sync response:", response)
|
||||
assert isinstance(response, nio.SyncResponse)
|
||||
|
||||
assert evt.content.body == msg
|
||||
received.set()
|
||||
|
||||
client.add_event_handler(EventType.ROOM_MESSAGE, on_message)
|
||||
sync_task = client.start(RoomFilter(rooms=[room_id]))
|
||||
|
||||
await client.send_text(room_id, msg)
|
||||
|
||||
# Sync until message is received
|
||||
await asyncio.wait_for(received.wait(), timeout=30)
|
||||
# Check the message was received by continuwuity
|
||||
last_message = response.rooms.join[room_id].timeline.events[-1].body
|
||||
assert last_message == "Hello continuwuity!"
|
||||
|
||||
# Leave the room
|
||||
await client.leave_room(room_id)
|
||||
print("Left room")
|
||||
response = await client.room_leave(room_id)
|
||||
print("Matrix room leave response:", response)
|
||||
assert isinstance(response, nio.RoomLeaveResponse)
|
||||
|
||||
# Close the client
|
||||
client.stop()
|
||||
await sync_task
|
||||
await client.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
@@ -101,7 +96,6 @@ in
|
||||
'';
|
||||
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
bartoostveen
|
||||
nyabinary
|
||||
snaki
|
||||
];
|
||||
|
||||
53
nixos/tests/matrix/synapse-workers.nix
Normal file
53
nixos/tests/matrix/synapse-workers.nix
Normal file
@@ -0,0 +1,53 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "matrix-synapse-workers";
|
||||
meta = {
|
||||
inherit (pkgs.matrix-synapse.meta) maintainers;
|
||||
};
|
||||
|
||||
nodes = {
|
||||
homeserver =
|
||||
{
|
||||
pkgs,
|
||||
nodes,
|
||||
...
|
||||
}:
|
||||
{
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
initialScript = pkgs.writeText "synapse-init.sql" ''
|
||||
CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse';
|
||||
CREATE DATABASE "matrix-synapse" WITH OWNER "matrix-synapse"
|
||||
TEMPLATE template0
|
||||
LC_COLLATE = "C"
|
||||
LC_CTYPE = "C";
|
||||
'';
|
||||
};
|
||||
|
||||
services.matrix-synapse = {
|
||||
enable = true;
|
||||
settings = {
|
||||
database = {
|
||||
name = "psycopg2";
|
||||
args.password = "synapse";
|
||||
};
|
||||
enable_registration = true;
|
||||
enable_registration_without_verification = true;
|
||||
|
||||
federation_sender_instances = [ "federation_sender" ];
|
||||
};
|
||||
configureRedisLocally = true;
|
||||
workers = {
|
||||
"federation_sender" = { };
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
homeserver.wait_for_unit("matrix-synapse.service");
|
||||
homeserver.wait_for_unit("matrix-synapse-worker-federation_sender.service");
|
||||
'';
|
||||
}
|
||||
@@ -1,194 +1,101 @@
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
|
||||
ca_key = mailerCerts.ca.key;
|
||||
ca_pem = mailerCerts.ca.cert;
|
||||
|
||||
aliceName = "alice";
|
||||
alicePassword = "alicealice";
|
||||
aliceEmail = "alice@example.com";
|
||||
|
||||
bobName = "bob";
|
||||
bobPassword = "hunter2";
|
||||
|
||||
mkBundle =
|
||||
domain:
|
||||
pkgs.runCommand "bundle-${domain}"
|
||||
bundle =
|
||||
pkgs.runCommand "bundle"
|
||||
{
|
||||
nativeBuildInputs = [ pkgs.minica ];
|
||||
}
|
||||
''
|
||||
minica -ca-cert ${ca_pem} -ca-key ${ca_key} \
|
||||
-domains ${domain}
|
||||
install -Dm444 -t $out ${domain}/{key,cert}.pem
|
||||
-domains localhost
|
||||
install -Dm444 -t $out localhost/{key,cert}.pem
|
||||
'';
|
||||
|
||||
mailerCerts = import ../common/acme/server/snakeoil-certs.nix;
|
||||
mailerDomain = mailerCerts.domain;
|
||||
registrationSharedSecret = "unsecure123";
|
||||
testUser = "alice";
|
||||
testPassword = "alicealice";
|
||||
testEmail = "alice@example.com";
|
||||
|
||||
anonHash = "hunter2hunter2hunter2";
|
||||
anonHashF = pkgs.writeText "hash" anonHash;
|
||||
|
||||
mkHomeserverBase =
|
||||
domain: nodes:
|
||||
let
|
||||
bundle = mkBundle domain;
|
||||
in
|
||||
{ lib, ... }:
|
||||
listeners = [
|
||||
{
|
||||
security.pki.certificateFiles = [
|
||||
mailerCerts.ca.cert
|
||||
port = 8448;
|
||||
bind_addresses = [
|
||||
"127.0.0.1"
|
||||
"::1"
|
||||
];
|
||||
type = "http";
|
||||
tls = true;
|
||||
x_forwarded = false;
|
||||
resources = [
|
||||
{
|
||||
names = [
|
||||
"client"
|
||||
];
|
||||
compress = true;
|
||||
}
|
||||
{
|
||||
names = [
|
||||
"federation"
|
||||
];
|
||||
compress = false;
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
|
||||
networking = {
|
||||
hostName = lib.head (lib.strings.splitString "." domain);
|
||||
domain = lib.last (lib.strings.splitString "." domain);
|
||||
firewall.allowedTCPPorts = [
|
||||
80
|
||||
443
|
||||
8448
|
||||
];
|
||||
};
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
virtualHosts."${domain}" = {
|
||||
sslCertificate = "${bundle}/cert.pem";
|
||||
sslCertificateKey = "${bundle}/key.pem";
|
||||
addSSL = true;
|
||||
locations."/.well-known/matrix/server".extraConfig = ''
|
||||
default_type application/json;
|
||||
return 200 '${
|
||||
builtins.toJSON {
|
||||
"m.server" = "${domain}:8448";
|
||||
}
|
||||
}';
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mkSynapseConfig =
|
||||
domain: primaryIP:
|
||||
let
|
||||
bundle = mkBundle domain;
|
||||
in
|
||||
{
|
||||
enable = true;
|
||||
settings = {
|
||||
# We're in a test environment with local machines, so
|
||||
# we actually _want_ to use RFC1918 addresses.
|
||||
ip_range_blacklist = [ ];
|
||||
|
||||
trusted_key_servers = [
|
||||
{ server_name = "hs1.test"; }
|
||||
{ server_name = "hs2.test"; }
|
||||
];
|
||||
|
||||
registration_shared_secret = registrationSharedSecret;
|
||||
public_baseurl = "https://${domain}";
|
||||
tls_certificate_path = "${bundle}/cert.pem";
|
||||
tls_private_key_path = "${bundle}/key.pem";
|
||||
listeners = [
|
||||
# Using a local listener, otherwise matrix-synapse-register_new_matrix_user will
|
||||
# fail because it'll try to connect to the first bind address, but via TLS resulting
|
||||
# in a signature verification failure.
|
||||
{
|
||||
port = 8008;
|
||||
type = "http";
|
||||
tls = false;
|
||||
resources = [
|
||||
{
|
||||
names = [ "client" ];
|
||||
compress = true;
|
||||
}
|
||||
];
|
||||
bind_addresses = [ "::1" ];
|
||||
}
|
||||
{
|
||||
port = 8448;
|
||||
bind_addresses = [
|
||||
primaryIP
|
||||
];
|
||||
type = "http";
|
||||
tls = true;
|
||||
x_forwarded = false;
|
||||
resources = [
|
||||
{
|
||||
names = [
|
||||
"client"
|
||||
];
|
||||
compress = true;
|
||||
}
|
||||
{
|
||||
names = [
|
||||
"federation"
|
||||
];
|
||||
compress = false;
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
|
||||
name = "matrix-synapse";
|
||||
meta = {
|
||||
inherit (pkgs.matrix-synapse.meta) maintainers;
|
||||
};
|
||||
|
||||
nodes = {
|
||||
synapse-with-workers =
|
||||
# Since 0.33.0, matrix-synapse doesn't allow underscores in server names
|
||||
serverpostgres =
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
nodes,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
let
|
||||
mailserverIP = nodes.mailserver.networking.primaryIPAddress;
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
(mkHomeserverBase "hs1.test" nodes)
|
||||
];
|
||||
|
||||
services.matrix-synapse = lib.mkMerge [
|
||||
(mkSynapseConfig "hs1.test" config.networking.primaryIPAddress)
|
||||
{
|
||||
settings = {
|
||||
server_name = "hs1.test";
|
||||
email = {
|
||||
smtp_host = mailerDomain;
|
||||
smtp_port = 25;
|
||||
require_transport_security = true;
|
||||
notif_from = "matrix <matrix@${mailerDomain}>";
|
||||
app_name = "Matrix";
|
||||
};
|
||||
listeners = [
|
||||
{
|
||||
path = "/run/matrix-synapse/main_replication.sock";
|
||||
type = "http";
|
||||
resources = [
|
||||
{
|
||||
names = [ "replication" ];
|
||||
compress = false;
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
database = {
|
||||
name = "psycopg2";
|
||||
args.password = "synapse";
|
||||
};
|
||||
federation_sender_instances = [ "federation_sender" ];
|
||||
services.matrix-synapse = {
|
||||
enable = true;
|
||||
settings = {
|
||||
inherit listeners;
|
||||
database = {
|
||||
name = "psycopg2";
|
||||
args.password = "synapse";
|
||||
};
|
||||
configureRedisLocally = true;
|
||||
workers = {
|
||||
"federation_sender" = { };
|
||||
redis = {
|
||||
enabled = true;
|
||||
host = "localhost";
|
||||
port = config.services.redis.servers.matrix-synapse.port;
|
||||
};
|
||||
}
|
||||
];
|
||||
|
||||
tls_certificate_path = "${bundle}/cert.pem";
|
||||
tls_private_key_path = "${bundle}/key.pem";
|
||||
registration_shared_secret = registrationSharedSecret;
|
||||
public_baseurl = "https://example.com";
|
||||
email = {
|
||||
smtp_host = mailerDomain;
|
||||
smtp_port = 25;
|
||||
require_transport_security = true;
|
||||
notif_from = "matrix <matrix@${mailerDomain}>";
|
||||
app_name = "Matrix";
|
||||
};
|
||||
};
|
||||
};
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
|
||||
@@ -206,6 +113,20 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
services.redis.servers.matrix-synapse = {
|
||||
enable = true;
|
||||
port = 6380;
|
||||
};
|
||||
|
||||
networking.extraHosts = ''
|
||||
${mailserverIP} ${mailerDomain}
|
||||
'';
|
||||
|
||||
security.pki.certificateFiles = [
|
||||
mailerCerts.ca.cert
|
||||
ca_pem
|
||||
];
|
||||
|
||||
environment.systemPackages =
|
||||
let
|
||||
sendTestMailStarttls = pkgs.writeScriptBin "send-testmail-starttls" ''
|
||||
@@ -219,7 +140,7 @@ in
|
||||
smtp.ehlo()
|
||||
smtp.starttls(context=ctx)
|
||||
smtp.ehlo()
|
||||
smtp.sendmail('matrix@${mailerDomain}', '${aliceEmail}', 'Subject: Test STARTTLS\n\nTest data.')
|
||||
smtp.sendmail('matrix@${mailerDomain}', '${testEmail}', 'Subject: Test STARTTLS\n\nTest data.')
|
||||
smtp.quit()
|
||||
'';
|
||||
|
||||
@@ -228,14 +149,16 @@ in
|
||||
# adding the email through the API is quite complicated as it involves more than one step and some
|
||||
# client-side calculation
|
||||
insertEmailForAlice = pkgs.writeText "alice-email.sql" ''
|
||||
INSERT INTO user_threepids (user_id, medium, address, validated_at, added_at) VALUES ('${aliceName}@serverpostgres', 'email', '${aliceEmail}', '1629149927271', '1629149927270');
|
||||
INSERT INTO user_threepids (user_id, medium, address, validated_at, added_at) VALUES ('${testUser}@serverpostgres', 'email', '${testEmail}', '1629149927271', '1629149927270');
|
||||
'';
|
||||
in
|
||||
pkgs.writeScriptBin "obtain-token-and-register-email" ''
|
||||
#!${pkgs.runtimeShell}
|
||||
set -euxo pipefail
|
||||
set -o errexit
|
||||
set -o pipefail
|
||||
set -o nounset
|
||||
su postgres -c "psql -d matrix-synapse -f ${insertEmailForAlice}"
|
||||
curl --fail -XPOST 'https://hs1.test:8448/_matrix/client/r0/account/password/email/requestToken' -d '{"email":"${aliceEmail}","client_secret":"foobar","send_attempt":1}' -v
|
||||
curl --fail -XPOST 'https://localhost:8448/_matrix/client/r0/account/password/email/requestToken' -d '{"email":"${testEmail}","client_secret":"foobar","send_attempt":1}' -v
|
||||
'';
|
||||
in
|
||||
[
|
||||
@@ -245,189 +168,74 @@ in
|
||||
];
|
||||
};
|
||||
|
||||
mailserver =
|
||||
{ lib, ... }:
|
||||
{
|
||||
security.pki.certificateFiles = [
|
||||
mailerCerts.ca.cert
|
||||
];
|
||||
# test mail delivery
|
||||
mailserver = args: {
|
||||
security.pki.certificateFiles = [
|
||||
mailerCerts.ca.cert
|
||||
];
|
||||
|
||||
networking = {
|
||||
hostName = lib.head (lib.strings.splitString "." mailerDomain);
|
||||
domain = lib.last (lib.strings.splitString "." mailerDomain);
|
||||
firewall.enable = false;
|
||||
};
|
||||
networking.firewall.enable = false;
|
||||
|
||||
services.postfix = {
|
||||
enable = true;
|
||||
enableSubmission = true;
|
||||
services.postfix = {
|
||||
enable = true;
|
||||
enableSubmission = true;
|
||||
|
||||
# blackhole transport
|
||||
transport = "example.com discard:silently";
|
||||
# blackhole transport
|
||||
transport = "example.com discard:silently";
|
||||
|
||||
settings.main = {
|
||||
myhostname = "${mailerDomain}";
|
||||
# open relay for subnet
|
||||
mynetworks_style = "subnet";
|
||||
debug_peer_level = "10";
|
||||
smtpd_relay_restrictions = [
|
||||
"permit_mynetworks"
|
||||
"reject_unauth_destination"
|
||||
];
|
||||
settings.main = {
|
||||
myhostname = "${mailerDomain}";
|
||||
# open relay for subnet
|
||||
mynetworks_style = "subnet";
|
||||
debug_peer_level = "10";
|
||||
smtpd_relay_restrictions = [
|
||||
"permit_mynetworks"
|
||||
"reject_unauth_destination"
|
||||
];
|
||||
|
||||
# disable obsolete protocols, something old versions of twisted are still using
|
||||
smtpd_tls_protocols = "TLSv1.3, TLSv1.2, !TLSv1.1, !TLSv1, !SSLv2, !SSLv3";
|
||||
smtpd_tls_mandatory_protocols = "TLSv1.3, TLSv1.2, !TLSv1.1, !TLSv1, !SSLv2, !SSLv3";
|
||||
smtpd_tls_chain_files = [
|
||||
"${mailerCerts.${mailerDomain}.key}"
|
||||
"${mailerCerts.${mailerDomain}.cert}"
|
||||
];
|
||||
};
|
||||
# disable obsolete protocols, something old versions of twisted are still using
|
||||
smtpd_tls_protocols = "TLSv1.3, TLSv1.2, !TLSv1.1, !TLSv1, !SSLv2, !SSLv3";
|
||||
smtpd_tls_mandatory_protocols = "TLSv1.3, TLSv1.2, !TLSv1.1, !TLSv1, !SSLv2, !SSLv3";
|
||||
smtpd_tls_chain_files = [
|
||||
"${mailerCerts.${mailerDomain}.key}"
|
||||
"${mailerCerts.${mailerDomain}.cert}"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
synapse-minimal =
|
||||
{
|
||||
nodes,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
(mkHomeserverBase "hs2.test" nodes)
|
||||
];
|
||||
|
||||
services.matrix-synapse = lib.mkMerge [
|
||||
(mkSynapseConfig "hs2.test" config.networking.primaryIPAddress)
|
||||
{
|
||||
settings = {
|
||||
database.name = "sqlite3";
|
||||
server_name = "hs2.test";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
client =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
environment.systemPackages = [
|
||||
# `pkgs.olm` is cached on c.n.o, even if this test isn't built due
|
||||
# to it being allow-listed in `pkgs/top-level/release.nix`.
|
||||
(import pkgs.path {
|
||||
config = pkgs.config // {
|
||||
permittedInsecurePackages = [ "olm-3.2.16" ];
|
||||
};
|
||||
}).matrix-commander
|
||||
pkgs.jq
|
||||
];
|
||||
|
||||
security.pki.certificateFiles = [ mailerCerts.ca.cert ];
|
||||
|
||||
users.users = {
|
||||
alice.isNormalUser = true;
|
||||
bob.isNormalUser = true;
|
||||
};
|
||||
|
||||
networking.useNetworkd = true;
|
||||
services.rust-federation-tester = {
|
||||
enable = true;
|
||||
settings = {
|
||||
listen_addr = "unix:/run/rust-federation-tester/rust-federation-tester.sock";
|
||||
frontend_url = "http://localhost:8080";
|
||||
database_url = "sqlite:///var/lib/rust-federation-tester/db?mode=rwc";
|
||||
magic_token_secret = "foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar";
|
||||
statistics = {
|
||||
enabled = true;
|
||||
prometheus_enabled = true;
|
||||
anonymization_salt._secret = "${anonHashF}";
|
||||
raw_retention_days = 30;
|
||||
};
|
||||
};
|
||||
serversqlite = args: {
|
||||
services.matrix-synapse = {
|
||||
enable = true;
|
||||
settings = {
|
||||
inherit listeners;
|
||||
database.name = "sqlite3";
|
||||
tls_certificate_path = "${bundle}/cert.pem";
|
||||
tls_private_key_path = "${bundle}/key.pem";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
import json
|
||||
from pprint import pprint
|
||||
|
||||
start_all()
|
||||
|
||||
synapse_with_workers.wait_for_unit("multi-user.target")
|
||||
synapse_minimal.wait_for_unit("multi-user.target")
|
||||
mailserver.wait_for_unit("multi-user.target")
|
||||
|
||||
synapse_with_workers.wait_until_succeeds(
|
||||
mailserver.wait_for_unit("postfix.service")
|
||||
serverpostgres.succeed("send-testmail-starttls")
|
||||
serverpostgres.wait_for_unit("matrix-synapse.service")
|
||||
serverpostgres.wait_until_succeeds(
|
||||
"curl --fail -L --cacert ${ca_pem} https://localhost:8448/"
|
||||
)
|
||||
serverpostgres.wait_until_succeeds(
|
||||
"journalctl -u matrix-synapse.service | grep -q 'Connected to redis'"
|
||||
)
|
||||
synapse_with_workers.wait_for_unit("matrix-synapse-worker-federation_sender.service");
|
||||
|
||||
with subtest("register user with email confirmation"):
|
||||
synapse_with_workers.succeed("send-testmail-starttls")
|
||||
synapse_with_workers.succeed("REQUESTS_CA_BUNDLE=${mailerCerts.ca.cert} register_new_matrix_user -u ${aliceName} -p ${alicePassword} -a -k ${registrationSharedSecret} https://hs1.test:8448/")
|
||||
synapse_with_workers.succeed("obtain-token-and-register-email")
|
||||
|
||||
with subtest("matrix-synapse-register_new_matrix_user"):
|
||||
synapse_minimal.succeed("matrix-synapse-register_new_matrix_user -u ${bobName} -p ${bobPassword} --no-admin")
|
||||
synapse_minimal.succeed("[ -e /var/lib/matrix-synapse/homeserver.db ]")
|
||||
|
||||
with subtest("Federation tester"):
|
||||
expected_anonymization_hashes = {
|
||||
"hs1.test": "0558582846d6e2d90612900d449871dfcbf9878ba78de4a8469d8aba2d9c037b",
|
||||
"hs2.test": "d3d88c2033c03b74ec1e086e15c0251514de060de5e51cb381e896f892a5b0cd",
|
||||
}
|
||||
|
||||
# /metrics are cached for up to 30 seconds
|
||||
for n, domain in enumerate(["hs2.test", "hs1.test"], start=3):
|
||||
result = json.loads(
|
||||
client.succeed(
|
||||
f"curl --fail --unix-socket /run/rust-federation-tester/rust-federation-tester.sock 'http://localhost:8080/api/federation/report?server_name={domain}&stats_opt_in=true'"
|
||||
)
|
||||
)
|
||||
pprint(result)
|
||||
t.assertTrue(result["FederationOK"])
|
||||
t.assertTrue(result["ConnectionReports"][f"192.168.1.{n}:8448"]["Checks"]["AllChecksOK"])
|
||||
t.assertEqual(f"{domain}:8448", result["WellKnownResult"][f"192.168.1.{n}:443"]["m.server"])
|
||||
|
||||
client.sleep(30)
|
||||
# /metrics are cached for up to 30 seconds
|
||||
for domain in ["hs2.test", "hs1.test"]:
|
||||
metrics = client.succeed("curl --unix-socket /run/rust-federation-tester/rust-federation-tester.sock http://localhost:8080/metrics --fail")
|
||||
t.assertRegex(
|
||||
metrics,
|
||||
f'federation_request_total\\{{server=\\"{expected_anonymization_hashes[domain]}\\",result=\\"success\\",[^}}]+\\}} 1'
|
||||
)
|
||||
|
||||
def run_as_alice(cmd):
|
||||
return client.succeed(f"sudo -u alice matrix-commander -c /home/alice/credentials.json -s /home/alice/matrix {cmd}")
|
||||
|
||||
def run_as_bob(cmd):
|
||||
return client.succeed(f"sudo -u bob matrix-commander -c /home/bob/credentials.json -s /home/bob/matrix {cmd}")
|
||||
|
||||
with subtest("Login"):
|
||||
run_as_alice("--login password --homeserver https://hs1.test:8448 --user-login @${aliceName}:hs1.test --password ${alicePassword} --device commander --room-default '#welcome:hs1.test'")
|
||||
run_as_bob("--login password --homeserver https://hs2.test:8448 --user-login @${bobName}:hs2.test --password ${bobPassword} --device commander --room-default '#welcome:hs1.test'")
|
||||
|
||||
with subtest("Create/Invite/Join"):
|
||||
run_as_alice("--room-create '#welcome:hs1.test'")
|
||||
|
||||
run_as_alice("--room-invite '#welcome:hs1.test' -u @${bobName}:hs2.test")
|
||||
run_as_bob("--listen once --room-invites 'list+join'")
|
||||
|
||||
with subtest("Send/receive messages"):
|
||||
senders = {
|
||||
"alice": ("hs1", run_as_alice),
|
||||
"bob": ("hs2", run_as_bob),
|
||||
}
|
||||
|
||||
for name, (hs, fn) in senders.items():
|
||||
fn(f"-m 'hello, I am {name}'")
|
||||
for _, run in senders.values():
|
||||
msg_data = json.loads(run("--listen once --listen-self --output json"))
|
||||
pprint(msg_data)
|
||||
t.assertEqual(msg_data["source"]["content"]["body"], f"hello, I am {name}")
|
||||
t.assertEqual(msg_data["source"]["sender"], f"@{name}:{hs}.test")
|
||||
serverpostgres.require_unit_state("postgresql.target")
|
||||
serverpostgres.succeed("REQUESTS_CA_BUNDLE=${ca_pem} register_new_matrix_user -u ${testUser} -p ${testPassword} -a -k ${registrationSharedSecret} https://localhost:8448/")
|
||||
serverpostgres.succeed("obtain-token-and-register-email")
|
||||
serversqlite.wait_for_unit("matrix-synapse.service")
|
||||
serversqlite.wait_until_succeeds(
|
||||
"curl --fail -L --cacert ${ca_pem} https://localhost:8448/"
|
||||
)
|
||||
serversqlite.succeed("[ -e /var/lib/matrix-synapse/homeserver.db ]")
|
||||
'';
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
chipVersion = pkgs.python3Packages.home-assistant-chip-core.version;
|
||||
chipVersion = pkgs.python311Packages.home-assistant-chip-core.version;
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
@@ -149,6 +149,5 @@ listToAttrs (
|
||||
concatMap genTests [
|
||||
32
|
||||
33
|
||||
34
|
||||
]
|
||||
)
|
||||
|
||||
@@ -83,16 +83,9 @@ import ../make-test-python.nix (
|
||||
|
||||
services.nfs.server.enable = true;
|
||||
services.nfs.server.createMountPoints = true;
|
||||
services.nfs.server.exports = {
|
||||
"/data" = {
|
||||
"*" = [
|
||||
"rw"
|
||||
"no_root_squash"
|
||||
"fsid=0"
|
||||
"sec=krb5p"
|
||||
];
|
||||
};
|
||||
};
|
||||
services.nfs.server.exports = ''
|
||||
/data *(rw,no_root_squash,fsid=0,sec=krb5p)
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -37,16 +37,9 @@ import ../make-test-python.nix (
|
||||
{ ... }:
|
||||
{
|
||||
services.nfs.server.enable = true;
|
||||
services.nfs.server.exports = {
|
||||
"/data" = {
|
||||
"192.168.1.0/255.255.255.0" = [
|
||||
"rw"
|
||||
"no_root_squash"
|
||||
"no_subtree_check"
|
||||
"fsid=0"
|
||||
];
|
||||
};
|
||||
};
|
||||
services.nfs.server.exports = ''
|
||||
/data 192.168.1.0/255.255.255.0(rw,no_root_squash,no_subtree_check,fsid=0)
|
||||
'';
|
||||
services.nfs.server.createMountPoints = true;
|
||||
networking.firewall.enable = false; # FIXME: figure out what ports need to be allowed
|
||||
};
|
||||
|
||||
@@ -1,129 +0,0 @@
|
||||
{ lib, ... }:
|
||||
{
|
||||
name = "nordvpn";
|
||||
meta.maintainers = with lib.maintainers; [ different-error ];
|
||||
nodes =
|
||||
let
|
||||
commonConfig = user: {
|
||||
# norduserd reads DBUS_SESSION_BUS_ADDRESS which the
|
||||
# desktopManager sets on user session creation (i.e. login)
|
||||
services.xserver.enable = true;
|
||||
services.desktopManager.plasma6.enable = true;
|
||||
services.displayManager.gdm.enable = true;
|
||||
services.displayManager.autoLogin = {
|
||||
enable = true;
|
||||
user = user;
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
nada = { ... }: { };
|
||||
basic =
|
||||
{ ... }:
|
||||
lib.recursiveUpdate {
|
||||
users.users.alice = {
|
||||
extraGroups = [ "nordvpn" ];
|
||||
isNormalUser = true;
|
||||
};
|
||||
# default: run nordvpnd as nordvpn:nordvpn
|
||||
services.nordvpn.enable = true;
|
||||
} (commonConfig "alice");
|
||||
userOnly =
|
||||
{ ... }:
|
||||
lib.recursiveUpdate {
|
||||
users.users.kanye = {
|
||||
extraGroups = [ "nordvpn" ];
|
||||
isNormalUser = true;
|
||||
};
|
||||
# run nordvpnd as kanye:nordvpn
|
||||
services.nordvpn = {
|
||||
enable = true;
|
||||
user = "kanye";
|
||||
};
|
||||
} (commonConfig "kanye");
|
||||
groupOnly =
|
||||
{ ... }:
|
||||
lib.recursiveUpdate {
|
||||
users.users.alice = {
|
||||
extraGroups = [ "kanye" ];
|
||||
isNormalUser = true;
|
||||
};
|
||||
users.groups.kanye = { };
|
||||
# run nordvpnd as nordvpn:kanye
|
||||
services.nordvpn = {
|
||||
enable = true;
|
||||
group = "kanye";
|
||||
};
|
||||
} (commonConfig "alice");
|
||||
userAndGroup =
|
||||
{ ... }:
|
||||
lib.recursiveUpdate {
|
||||
users.users.kanye = {
|
||||
group = "kanye";
|
||||
isNormalUser = true;
|
||||
};
|
||||
users.groups.kanye = { };
|
||||
# run nordvpnd as kanye:kanye
|
||||
services.nordvpn = {
|
||||
enable = true;
|
||||
group = "kanye";
|
||||
user = "kanye";
|
||||
};
|
||||
} (commonConfig "kanye");
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
class UserGroupTestCase:
|
||||
def __init__(self, machine, user, has_nordvpn_usr, has_nordvpn_gp):
|
||||
self.machine = machine
|
||||
self.user = user
|
||||
self.has_nordvpn_usr = has_nordvpn_usr
|
||||
self.has_nordvpn_gp = has_nordvpn_gp
|
||||
|
||||
def run(self):
|
||||
self.machine.start()
|
||||
self.verify_nordvpn_user()
|
||||
self.verify_nordvpn_group()
|
||||
self.verify_services()
|
||||
self.machine.shutdown()
|
||||
|
||||
def verify_nordvpn_user(self):
|
||||
if self.has_nordvpn_usr:
|
||||
self.machine.succeed("id nordvpn")
|
||||
else:
|
||||
self.machine.fail("id nordvpn")
|
||||
|
||||
def verify_nordvpn_group(self):
|
||||
group_str = self.machine.succeed(f"sudo -u {self.user} groups")
|
||||
groups = [x.strip() for x in group_str.split(" ")]
|
||||
if self.has_nordvpn_gp:
|
||||
assert "nordvpn" in groups, f"nordvpn is not in {groups} but should be"
|
||||
else:
|
||||
assert "nordvpn" not in groups, f"nordvpn is in {groups} but should not be"
|
||||
|
||||
def verify_services(self):
|
||||
self.machine.wait_for_unit("nordvpnd", timeout=60)
|
||||
self.machine.wait_for_unit("norduserd", self.user, timeout=90)
|
||||
# verify can talk to nordvpnd. give nordvpnd at most 5s to initialize.
|
||||
self.machine.wait_until_succeeds("nordvpn status", timeout=5)
|
||||
self.machine.succeed("nordvpn status")
|
||||
|
||||
test_cases = [
|
||||
UserGroupTestCase(basic, "alice", has_nordvpn_usr=True, has_nordvpn_gp=True),
|
||||
UserGroupTestCase(userOnly, "kanye", has_nordvpn_usr=False, has_nordvpn_gp=True),
|
||||
UserGroupTestCase(groupOnly, "alice", has_nordvpn_usr=True, has_nordvpn_gp=False),
|
||||
UserGroupTestCase(userAndGroup, "kanye", has_nordvpn_usr=False, has_nordvpn_gp=False),
|
||||
]
|
||||
|
||||
# NADA
|
||||
nada.start()
|
||||
nada.wait_for_unit("multi-user.target", timeout=60)
|
||||
nada.fail("nordvpnd")
|
||||
nada.fail("nordvpn")
|
||||
nada.fail("norduserd")
|
||||
nada.shutdown()
|
||||
|
||||
for test_case in test_cases:
|
||||
test_case.run()
|
||||
'';
|
||||
}
|
||||
@@ -44,13 +44,6 @@
|
||||
"pm.min_spare_servers" = 1;
|
||||
"pm.start_servers" = 2;
|
||||
};
|
||||
phpEnv = {
|
||||
# check that keywords and special characters are escaped properly
|
||||
keyword = "false";
|
||||
characters = "^ = \\";
|
||||
quoted = "\"'";
|
||||
newline = "hello\nworld";
|
||||
};
|
||||
};
|
||||
};
|
||||
testScript =
|
||||
@@ -63,15 +56,6 @@
|
||||
response = machine.wait_until_succeeds("curl -fvvv -s http://127.0.0.1:80/")
|
||||
t.assertIn("PHP Version ${php.version}", response, "PHP version not detected")
|
||||
|
||||
expected_env = {
|
||||
"keyword": "false",
|
||||
"characters": "^ = \\",
|
||||
"quoted": ""'",
|
||||
"newline": "hello\nworld",
|
||||
}
|
||||
for env, value in expected_env.items():
|
||||
assert f'<tr><td class="e">{env} </td><td class="v">{value} </td></tr>' in response, f"phpEnv.{env} not detected"
|
||||
|
||||
# Check so we have database and some other extensions loaded
|
||||
for ext in ["json", "opcache", "pdo_mysql", "pdo_pgsql", "pdo_sqlite", "apcu"]:
|
||||
assert ext in response, f"Missing {ext} extension"
|
||||
|
||||
@@ -17,7 +17,10 @@
|
||||
machine.succeed("curl --fail http://localhost:8111")
|
||||
'';
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ nanoyaki ];
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
diniamo
|
||||
nanoyaki
|
||||
];
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ ethancedwards8 ];
|
||||
|
||||
containers.machine = {
|
||||
nodes.machine = {
|
||||
environment.systemPackages = with pkgs; [ slipshow ];
|
||||
|
||||
environment.etc."slipshow".source = pkgs.fetchFromGitHub {
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
name = "watt";
|
||||
meta.maintainers = with lib.maintainers; [ Soliprem ];
|
||||
|
||||
nodes.machine = _: {
|
||||
services.watt.enable = true;
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("watt.service")
|
||||
machine.succeed("watt --version | grep ${pkgs.watt.version}")
|
||||
machine.wait_until_succeeds("busctl --system status net.hadess.PowerProfiles")
|
||||
machine.wait_until_succeeds("busctl --system status dev.notashelf.Watt")
|
||||
machine.succeed("busctl --system introspect net.hadess.PowerProfiles /net/hadess/PowerProfiles net.hadess.PowerProfiles")
|
||||
machine.succeed("busctl --system introspect dev.notashelf.Watt /dev/notashelf/Watt dev.notashelf.Watt")
|
||||
machine.succeed("busctl --system get-property dev.notashelf.Watt /dev/notashelf/Watt dev.notashelf.Watt Version | grep ${pkgs.watt.version}")
|
||||
'';
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
fetchurl,
|
||||
unzip,
|
||||
puredata,
|
||||
fftwSinglePrec,
|
||||
fftw,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
@@ -16,30 +16,29 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
sha256 = "14k2xk5zrzrw1zprdbwx45hrlc7ck8vq4drpd3l455i5r8yk4y6b";
|
||||
};
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
nativeBuildInputs = [ unzip ];
|
||||
buildInputs = [
|
||||
puredata
|
||||
fftwSinglePrec
|
||||
fftw
|
||||
];
|
||||
|
||||
makeFlags = [
|
||||
"tIDLib.o"
|
||||
"all"
|
||||
];
|
||||
unpackPhase = ''
|
||||
mkdir source
|
||||
cd source
|
||||
unzip $src
|
||||
'';
|
||||
|
||||
enableParallelBuilding = true;
|
||||
buildPhase = ''
|
||||
make tIDLib.o all
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out/
|
||||
cp -r *.pd $out/
|
||||
cp -r *.pd_linux $out/
|
||||
cp -r audio/ $out/
|
||||
cp -r data/ $out/
|
||||
cp -r doc/ $out/
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
@@ -50,7 +49,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
meta = {
|
||||
description = "Collection of audio feature analysis externals for puredata";
|
||||
homepage = "http://williambrent.conflations.com/pages/research.html";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
license = lib.licenses.gpl3;
|
||||
maintainers = [ lib.maintainers.magnetophon ];
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
@@ -47,6 +47,7 @@ melpaBuild (finalAttrs: {
|
||||
platforms = [
|
||||
"aarch64-darwin"
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"x86_64-linux"
|
||||
"x86_64-windows"
|
||||
];
|
||||
|
||||
@@ -28,6 +28,10 @@ let
|
||||
url = "https://download.jetbrains.com/cpp/CLion-2026.1.4-aarch64.tar.gz";
|
||||
hash = "sha256-I6IKQng4lNtRlQIq08K5bueqgKI/q1awX4EuRnyAnOk=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/cpp/CLion-2026.1.4.dmg";
|
||||
hash = "sha256-AJt+K1zv4eyjdzubUeFGwB9mqzvOeb3ffA2k0MajPBs=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/cpp/CLion-2026.1.4-aarch64.dmg";
|
||||
hash = "sha256-i3stX7dyRgSOJkFTMD9/hkw6e2mGNqn13S7X/vJ66RQ=";
|
||||
|
||||
@@ -19,6 +19,10 @@ let
|
||||
url = "https://download.jetbrains.com/datagrip/datagrip-2026.1.3-aarch64.tar.gz";
|
||||
hash = "sha256-G+tinD/+qM5HVR4u2E0cNXtdVsbwgK8/PdZ3ic6hf4M=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/datagrip/datagrip-2026.1.3.dmg";
|
||||
hash = "sha256-vW2LEonl0D9S0VxbeJX4jRrwhELGBwlOXwiHslvh06E=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/datagrip/datagrip-2026.1.3-aarch64.dmg";
|
||||
hash = "sha256-Kyt3fYPXzwTVxPFVKd+atiHWb/i7gjGahz1MJ4iXxy8=";
|
||||
|
||||
@@ -21,6 +21,10 @@ let
|
||||
url = "https://download.jetbrains.com/python/dataspell-2026.1.2-aarch64.tar.gz";
|
||||
hash = "sha256-SSmIPF0pDMolxeXL21UaHMbZdtYbChWVxTKZOsPhH+I=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/python/dataspell-2026.1.2.dmg";
|
||||
hash = "sha256-2qzwzGMYuy1qEuTprxwNa5gOPgCZq2MadSKN8FT8w8c=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/python/dataspell-2026.1.2-aarch64.dmg";
|
||||
hash = "sha256-MGWufS0nlswdqhACNQWtlXJwfPiYw8wUx7olIxPS15k=";
|
||||
|
||||
@@ -19,6 +19,10 @@ let
|
||||
url = "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2026.1.3-aarch64.tar.gz";
|
||||
hash = "sha256-CSe04BBo4jS1cIhu4NfZqaSHMaNue2eFUPa+1gOxuoo=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2026.1.3.dmg";
|
||||
hash = "sha256-WKwIP19y5EKO98JgEm468ofaRp/JO5z8lqNhtpsH4tY=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2026.1.3-aarch64.dmg";
|
||||
hash = "sha256-AHY/lY0ARkW0VoSgy0t7LLNXA965PLooWBSWxBKBV5M=";
|
||||
|
||||
@@ -19,6 +19,10 @@ let
|
||||
url = "https://download.jetbrains.com/go/goland-2026.1.4-aarch64.tar.gz";
|
||||
hash = "sha256-7s98kY08aKjdRGQLDkffeVhgj1FWurLmTTYmtb5Qx6c=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/go/goland-2026.1.4.dmg";
|
||||
hash = "sha256-RbvcLpLVyeL4B1DJ2/9Ub/6Cz6fJGXMPCHsJ705GsAo=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/go/goland-2026.1.4-aarch64.dmg";
|
||||
hash = "sha256-y7mEke0z0MvQs+kMtrmrq7EeAtJUbgo6sGZrOB0MraM=";
|
||||
|
||||
@@ -22,6 +22,10 @@ let
|
||||
url = "https://download.jetbrains.com/idea/ideaIU-2026.1.4-aarch64.tar.gz";
|
||||
hash = "sha256-MDZFuLrUxcCIc0Zhi4QhgKPeU7Pgs9oJ/FxQH1n3gBM=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/idea/ideaIU-2026.1.4.dmg";
|
||||
hash = "sha256-8K+LiewiINP4S9eqV0kGWtfy2Ff/zvBwX89iX7mYZ78=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/idea/ideaIU-2026.1.4-aarch64.dmg";
|
||||
hash = "sha256-XIBK/+Lxaz9dX+Lxl7HXsl+Z3Z7GBzSuDxNssb/4A2s=";
|
||||
|
||||
@@ -19,6 +19,10 @@ let
|
||||
url = "https://download.jetbrains.com/mps/2025.3/MPS-2025.3.tar.gz";
|
||||
hash = "sha256-xAI+UrTheCTWHSdoI4YZvhTlrlc121M+OVFkfzd7a3k=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/mps/2025.3/MPS-2025.3-macos.dmg";
|
||||
hash = "sha256-whYAjKkF79mrknHflZnvOOy2bLosYUguelZDSuPt3uY=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/mps/2025.3/MPS-2025.3-macos-aarch64.dmg";
|
||||
hash = "sha256-3HnEHOhRRI9IYjBhc5FO7h5j4jBBDtZTVkmO/S1fBEQ=";
|
||||
|
||||
@@ -19,6 +19,10 @@ let
|
||||
url = "https://download.jetbrains.com/webide/PhpStorm-2026.1.4-aarch64.tar.gz";
|
||||
hash = "sha256-T9q3/nxv/AA6y7CHWtOhUibR7bnKN8OZmfN3NWYTsIQ=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/webide/PhpStorm-2026.1.4.dmg";
|
||||
hash = "sha256-W7EwYu7S3hs1564tXq8H1Uok/Gwx/8QJO4brUGOfFY4=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/webide/PhpStorm-2026.1.4-aarch64.dmg";
|
||||
hash = "sha256-XGcfEWHHeLugvkT/WlQDsVRN33F46b1PCNhINQitqSY=";
|
||||
|
||||
@@ -20,6 +20,10 @@ let
|
||||
url = "https://download.jetbrains.com/python/pycharm-2026.1.4-aarch64.tar.gz";
|
||||
hash = "sha256-71FbYpN0seJ5k/yZA7aoXgU4W/N1BhjtKl7W7Hic9UE=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/python/pycharm-2026.1.4.dmg";
|
||||
hash = "sha256-Q5hTcYoNUzmAxwcsXJNS4medQjFKWc/Sgkybt4PQPfg=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/python/pycharm-2026.1.4-aarch64.dmg";
|
||||
hash = "sha256-qxSgp8r4S0KXjCCTIoAiEZFCn3uBE/0pWLLA6td0Fq0=";
|
||||
|
||||
@@ -31,6 +31,10 @@ let
|
||||
url = "https://download.jetbrains.com/rider/JetBrains.Rider-2026.1.4-aarch64.tar.gz";
|
||||
hash = "sha256-GXmyBrqxUpwK4djjwllvK+pnfktDrDHpLJKoe4D2xFo=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/rider/JetBrains.Rider-2026.1.4.dmg";
|
||||
hash = "sha256-GfQ5WpKunJ+JhE1VcArm3UxZ5udCbfnS1Kw3D4gZorA=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/rider/JetBrains.Rider-2026.1.4-aarch64.dmg";
|
||||
hash = "sha256-cfwT22BN1jzKZzrZHMQqYFJPGuRwta/sqoOJOp+PfBE=";
|
||||
|
||||
@@ -19,6 +19,10 @@ let
|
||||
url = "https://download.jetbrains.com/ruby/RubyMine-2026.1.4-aarch64.tar.gz";
|
||||
hash = "sha256-oSu19pkGVWt31vWBdAffSZsu4QzsUznVbUSwDy98nug=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/ruby/RubyMine-2026.1.4.dmg";
|
||||
hash = "sha256-BLo2weIJK8gQAcMtAiETM7FMdhw9aoFIGh5Yqjv3k7s=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/ruby/RubyMine-2026.1.4-aarch64.dmg";
|
||||
hash = "sha256-4wEnwcPRtwp0wxePUMiLow6sMxirwndRMdmJL8LBh9k=";
|
||||
|
||||
@@ -25,6 +25,10 @@ let
|
||||
url = "https://download.jetbrains.com/rustrover/RustRover-2026.1.4-aarch64.tar.gz";
|
||||
hash = "sha256-KpF3jCnLKCEeEXkBdB8ZsPPqP9FOVRTwRV/FQLKyh1Q=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/rustrover/RustRover-2026.1.4.dmg";
|
||||
hash = "sha256-2BwgAD0xF9IxRJh+gW4vLzBW13rFQSzQPbEwdmQGvLU=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/rustrover/RustRover-2026.1.4-aarch64.dmg";
|
||||
hash = "sha256-Hly4NBv9mg/RMmxCM6m9w5eS/CQ7ycxp7V2VQZwyGQE=";
|
||||
|
||||
@@ -12,16 +12,20 @@ let
|
||||
# update-script-start: urls
|
||||
urls = {
|
||||
x86_64-linux = {
|
||||
url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.4.tar.gz";
|
||||
hash = "sha256-BPuMTwZ3Xkk4SBRCdgZ8vCoEYjhTa3d8CFOqrGlcGg0=";
|
||||
url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.3.tar.gz";
|
||||
hash = "sha256-lryIoVxoytyDyfgjnobQ3e94wIIohmIKL88fwf2I49w=";
|
||||
};
|
||||
aarch64-linux = {
|
||||
url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.4-aarch64.tar.gz";
|
||||
hash = "sha256-f9KenMq1gtldzpBraSBwOb/186WQwh1ps5Ypj5JoOU0=";
|
||||
url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.3-aarch64.tar.gz";
|
||||
hash = "sha256-oZQaxpVV0O4WlDE6Ia+KzHIF0SfWQBubBFIopSRMbvE=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.3.dmg";
|
||||
hash = "sha256-KUcQRWYUD/+4HHWnkGuqoltqL2an0WQkUEfUcttwjCI=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.4-aarch64.dmg";
|
||||
hash = "sha256-ZYen6Ew0GYbBAmuGCDACPBsygxZ6sT787o6gqF9DJzw=";
|
||||
url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.3-aarch64.dmg";
|
||||
hash = "sha256-1N1RtN1QLvuJ1QL8jbN5TdbOHAHSN84W9XEK2PEPijI=";
|
||||
};
|
||||
};
|
||||
# update-script-end: urls
|
||||
@@ -35,8 +39,8 @@ mkJetBrainsProduct {
|
||||
product = "WebStorm";
|
||||
|
||||
# update-script-start: version
|
||||
version = "2026.1.4";
|
||||
buildNumber = "261.26222.58";
|
||||
version = "2026.1.3";
|
||||
buildNumber = "261.25134.101";
|
||||
# update-script-end: version
|
||||
|
||||
src = fetchurl (urls.${system} or (throw "Unsupported system: ${system}"));
|
||||
|
||||
@@ -78,5 +78,7 @@ Any comments or other manual changes between these markers will be removed when
|
||||
- on `aarch64-linux`:
|
||||
- from source build
|
||||
- see if build (binary or source) works without expat
|
||||
- on `x86_64-darwin`:
|
||||
- from source build
|
||||
- on `aarch64-darwin`:
|
||||
- from source build
|
||||
|
||||
@@ -3,7 +3,7 @@ import os
|
||||
import dataclasses
|
||||
from pathlib import Path
|
||||
|
||||
SUPPORTED_SYSTEMS = ["x86_64-linux", "aarch64-linux", "aarch64-darwin"]
|
||||
SUPPORTED_SYSTEMS = ["x86_64-linux", "aarch64-linux", "x86_64-darwin", "aarch64-darwin"]
|
||||
|
||||
|
||||
def find_nixpkgs(current_path: Path) -> Path:
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/cpp/CLion-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/cpp/CLion-{version}-aarch64.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/cpp/CLion-{version}.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/cpp/CLion-{version}-aarch64.dmg"
|
||||
}
|
||||
},
|
||||
@@ -12,6 +13,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/datagrip/datagrip-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/datagrip/datagrip-{version}-aarch64.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/datagrip/datagrip-{version}.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/datagrip/datagrip-{version}-aarch64.dmg"
|
||||
}
|
||||
},
|
||||
@@ -20,6 +22,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/python/dataspell-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/python/dataspell-{version}-aarch64.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/python/dataspell-{version}.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/python/dataspell-{version}-aarch64.dmg"
|
||||
}
|
||||
},
|
||||
@@ -28,6 +31,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}-aarch64.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}-aarch64.dmg"
|
||||
}
|
||||
},
|
||||
@@ -36,6 +40,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/go/goland-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/go/goland-{version}-aarch64.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/go/goland-{version}.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/go/goland-{version}-aarch64.dmg"
|
||||
}
|
||||
},
|
||||
@@ -44,6 +49,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/idea/ideaIU-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/idea/ideaIU-{version}-aarch64.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/idea/ideaIU-{version}.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/idea/ideaIU-{version}-aarch64.dmg"
|
||||
}
|
||||
},
|
||||
@@ -56,6 +62,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/mps/{versionMajorMinor}/MPS-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/mps/{versionMajorMinor}/MPS-{version}.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/mps/{versionMajorMinor}/MPS-{version}-macos.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/mps/{versionMajorMinor}/MPS-{version}-macos-aarch64.dmg"
|
||||
}
|
||||
},
|
||||
@@ -64,6 +71,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/webide/PhpStorm-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/webide/PhpStorm-{version}-aarch64.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/webide/PhpStorm-{version}.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/webide/PhpStorm-{version}-aarch64.dmg"
|
||||
}
|
||||
},
|
||||
@@ -72,6 +80,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/python/pycharm-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/python/pycharm-{version}-aarch64.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/python/pycharm-{version}.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/python/pycharm-{version}-aarch64.dmg"
|
||||
}
|
||||
},
|
||||
@@ -84,6 +93,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}-aarch64.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}-aarch64.dmg"
|
||||
}
|
||||
},
|
||||
@@ -92,6 +102,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/ruby/RubyMine-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/ruby/RubyMine-{version}-aarch64.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/ruby/RubyMine-{version}.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/ruby/RubyMine-{version}-aarch64.dmg"
|
||||
}
|
||||
},
|
||||
@@ -100,6 +111,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/rustrover/RustRover-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/rustrover/RustRover-{version}-aarch64.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/rustrover/RustRover-{version}.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/rustrover/RustRover-{version}-aarch64.dmg"
|
||||
}
|
||||
},
|
||||
@@ -108,6 +120,7 @@
|
||||
"urls": {
|
||||
"x86_64-linux": "https://download.jetbrains.com/webstorm/WebStorm-{version}.tar.gz",
|
||||
"aarch64-linux": "https://download.jetbrains.com/webstorm/WebStorm-{version}-aarch64.tar.gz",
|
||||
"x86_64-darwin": "https://download.jetbrains.com/webstorm/WebStorm-{version}.dmg",
|
||||
"aarch64-darwin": "https://download.jetbrains.com/webstorm/WebStorm-{version}-aarch64.dmg"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ let
|
||||
codeiumHashes = {
|
||||
x86_64-linux = "sha256-IeNK7UQtOhqC/eQv7MAya4jB1WIGykSR7IgutZatmHM=";
|
||||
aarch64-linux = "sha256-ujTFki/3V79El2WCkG0PJhbaMT0knC9mrS9E7Uv9HD4=";
|
||||
x86_64-darwin = "sha256-r2KloEQsUku9sk8h76kwyQuMTHcq/vwfTSK2dkiXDzE=";
|
||||
aarch64-darwin = "sha256-1jNH0Up8mAahDgvPF6g42LV+RVDVsPqDM54lE2KYY48=";
|
||||
};
|
||||
|
||||
@@ -29,6 +30,7 @@ let
|
||||
{
|
||||
x86_64-linux = "linux_x64";
|
||||
aarch64-linux = "linux_arm";
|
||||
x86_64-darwin = "macos_x64";
|
||||
aarch64-darwin = "macos_arm";
|
||||
}
|
||||
.${system} or throwSystem;
|
||||
|
||||
@@ -3316,7 +3316,6 @@ assertNoAdditions {
|
||||
};
|
||||
|
||||
nvim-jdtls = super.nvim-jdtls.overrideAttrs (old: {
|
||||
runtimeDeps = [ python3 ];
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.gpl3Only;
|
||||
};
|
||||
|
||||
@@ -21,22 +21,26 @@ vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
|
||||
sources = {
|
||||
"x86_64-linux" = {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-QxZa6ugaMC7otLQmDZU54Fv3OGMNYO5iyjqjCLDNdbI=";
|
||||
hash = "sha256-OY34TyyPj0Vjc6rLdR7uaVYsgmCXQFTS/1+QLA9pGgk=";
|
||||
};
|
||||
"aarch64-linux" = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-lgE5dld8lvt/dyGVNjR1ZiV2qtBu9pMZayNe5dBfHo0=";
|
||||
hash = "sha256-A8CrNx6GfFmaFWe1Awck/2B0VuJhNX6HHI5YNSG1qVo=";
|
||||
};
|
||||
"x86_64-darwin" = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-egXg308OJWvMyMqLHiANNEIGCSza/yKPFIqWq1X6JdE=";
|
||||
};
|
||||
"aarch64-darwin" = {
|
||||
arch = "darwin-arm64";
|
||||
hash = "sha256-KKuUXjfIsngnKrSLTMYNzb6XVZkJszUwIihCGHQJ0gU=";
|
||||
hash = "sha256-BmI7NTlKUVMnTBS8nf2jqYYSA+LT3qP9Yu5gQIv7Mxo=";
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
name = "claude-code";
|
||||
publisher = "anthropic";
|
||||
version = "2.1.207";
|
||||
version = "2.1.206";
|
||||
}
|
||||
// sources.${stdenvNoCC.hostPlatform.system}
|
||||
or (throw "Unsupported system ${stdenvNoCC.hostPlatform.system}");
|
||||
@@ -56,6 +60,7 @@ vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
};
|
||||
|
||||
@@ -14,6 +14,10 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-lhDt8XEF90y4pj8RLUZgfZNmHkV1XlmHsYuT6sGJMRc=";
|
||||
};
|
||||
"x86_64-darwin" = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-SqFRn5FVQ+LcpmYT7/AIdIKTOxbapaKvPi+I360dVW8=";
|
||||
};
|
||||
"aarch64-linux" = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-iuYVCG4YWPFI8o4GmuNjkbXvzJsAre0gSSEWq6CUk2E=";
|
||||
@@ -53,6 +57,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
"aarch64-linux"
|
||||
"aarch64-darwin"
|
||||
"x86_64-linux"
|
||||
"x86_64-darwin"
|
||||
];
|
||||
maintainers = [ lib.maintainers.azd325 ];
|
||||
};
|
||||
|
||||
@@ -13,6 +13,10 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-4GiTNT+UPdTth9VDhHTXfqhQ5gM6vfLAaU5Cy3VMTCI=";
|
||||
};
|
||||
"x86_64-darwin" = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-XJfDXWYpxYV5YHIBINqNJdyVho7Xd9OGMu11WE0LENM=";
|
||||
};
|
||||
"aarch64-linux" = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-QngCharrjiDKrY7RgWtKzIJxjXazuRvpuHVUAxknWfA=";
|
||||
@@ -40,6 +44,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
maintainers = with lib.maintainers; [ flacks ];
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
"aarch64-linux"
|
||||
];
|
||||
|
||||
@@ -1007,8 +1007,8 @@ let
|
||||
mktplcRef = {
|
||||
name = "coder-remote";
|
||||
publisher = "coder";
|
||||
version = "1.15.2";
|
||||
hash = "sha256-mBACvGUQF3LoaFJ9MIewN9zu4jDTWfUgyd1MQvZQUvk=";
|
||||
version = "1.15.0";
|
||||
hash = "sha256-Nw1aXRIJI6kBJl3yp2hripZLf+wIecb8gmIjT5zVBjk=";
|
||||
};
|
||||
meta = {
|
||||
description = "Extension for Visual Studio Code to open any Coder workspace in VS Code with a single click";
|
||||
@@ -1346,8 +1346,8 @@ let
|
||||
mktplcRef = {
|
||||
publisher = "discloud";
|
||||
name = "discloud";
|
||||
version = "2.29.8";
|
||||
hash = "sha256-dvyIdixtmg5ZTo/REB/E5QlHJu2xZ+Ui5qwJegoHTfk=";
|
||||
version = "2.29.7";
|
||||
hash = "sha256-l0CTWC16Aw2u8uob5tKauYIT3KaDsptV/L8WR54eN64=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/discloud.discloud/changelog";
|
||||
@@ -1950,8 +1950,8 @@ let
|
||||
mktplcRef = {
|
||||
publisher = "github";
|
||||
name = "codespaces";
|
||||
version = "1.18.15";
|
||||
hash = "sha256-NcW2XVQ6F7s6k4mIesEXhCkVVRfudwFr3glqB+TjrqM=";
|
||||
version = "1.18.14";
|
||||
hash = "sha256-i/J5inu6iJ3CPgoBf+pMFuM33Ex/0KqhfzfRl/BIe7Y=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
@@ -3190,6 +3190,10 @@ let
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-pmA7BNwyHiaU93j61/MyrBV5kH0DlW+7BA6HNlKGnso=";
|
||||
};
|
||||
"x86_64-darwin" = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-E2KRzjIxLFmwArzEKittjejacrCOFFNNzphWw8v5CpE=";
|
||||
};
|
||||
"aarch64-linux" = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-pnQP1OKr3NJgUuXzO1InYqGA49OuMFn2iEf8wpl4PqM=";
|
||||
@@ -3220,6 +3224,7 @@ let
|
||||
maintainers = [ lib.maintainers.magnouvean ];
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
"aarch64-linux"
|
||||
];
|
||||
|
||||
@@ -8,8 +8,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "basedpyright";
|
||||
publisher = "detachhead";
|
||||
version = "1.39.9";
|
||||
hash = "sha256-Iycuj7EXzRwVgvpk0KXa3dNw2rL21DnG4ohqIExS6Go=";
|
||||
version = "1.39.8";
|
||||
hash = "sha256-MiCa1OuLvXYC5HmXNzM7LCL72weG40tDTgLWWl9Kxug=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://github.com/detachhead/basedpyright/releases";
|
||||
|
||||
@@ -10,6 +10,10 @@ let
|
||||
hash = "sha256-jfjd2V7IJ4GQlz/pXmrY/LlBjQ2qtlsQV4ZRD8RiWTg=";
|
||||
arch = "linux-x64";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
hash = "sha256-aOFoTLVaaMFsdGoWV0OC31/nmOHXUhr2Y8K4SWcNil8=";
|
||||
arch = "darwin-x64";
|
||||
};
|
||||
aarch64-linux = {
|
||||
hash = "sha256-ugluaghNNZ/VrQORVIhc0Fuv3rHo++LO3Uwg2ujmsQc=";
|
||||
arch = "linux-arm64";
|
||||
|
||||
@@ -45,6 +45,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
};
|
||||
|
||||
@@ -14,6 +14,10 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-uPmJyEq7X6uJzE1M5Xywax1mrnTcg6jOb9MlpKZ0WRk=";
|
||||
};
|
||||
"x86_64-darwin" = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-oEVt3VbRUPD4tfQs0EU7RX6671fCJiMi38wF+76RzZI=";
|
||||
};
|
||||
"aarch64-linux" = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-b46f0f99rjBivewC9jUbAFiKK+DS1XKv+AynUlKHliw=";
|
||||
@@ -48,6 +52,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
"aarch64-linux"
|
||||
"aarch64-darwin"
|
||||
"x86_64-linux"
|
||||
"x86_64-darwin"
|
||||
];
|
||||
maintainers = with lib.maintainers; [ xiaoxiangmoe ];
|
||||
};
|
||||
|
||||
@@ -22,6 +22,10 @@ let
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-1zz9xrMALIOXzMpArWSwO12WmRE+0ldbIwUFH1G2GQI=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-3PoSbp8M2X4bhSQyxvNC7jtNDVNEuEKeYRZQMFOmbtQ=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
arch = "darwin-arm64";
|
||||
hash = "sha256-F4CsyiX46SpjilJNV+qYps1JAw09pVruLmW+muN9/B4=";
|
||||
@@ -134,6 +138,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
};
|
||||
|
||||
@@ -24,6 +24,10 @@ let
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-EV3745OXbwrRmc8P5e13DZbomyJGcYQUF07WflRWU1Q=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-i2cALeaSXfwIdfXNeWfND99nFYIiOFwsxbqU7/Effx8=";
|
||||
};
|
||||
aarch64-darwin = {
|
||||
arch = "darwin-arm64";
|
||||
hash = "sha256-KCIkjBmYZPiuFmQ3/aDycARYIHPyDTmMkoGcuG5DQX8=";
|
||||
@@ -155,6 +159,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
};
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user