mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-07-06 17:13:24 -05:00
Merge commit 'f9710d1500' into haskell-updates
This commit is contained in:
commit
2e0690adfb
1039 changed files with 21022 additions and 14017 deletions
4
.github/workflows/backport.yml
vendored
4
.github/workflows/backport.yml
vendored
|
|
@ -27,7 +27,7 @@ jobs:
|
|||
steps:
|
||||
# Use a GitHub App to create the PR so that CI gets triggered
|
||||
# The App is scoped to Repository > Contents and Pull Requests: write for Nixpkgs
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ vars.NIXPKGS_CI_APP_ID }}
|
||||
|
|
@ -49,7 +49,7 @@ jobs:
|
|||
|
||||
- name: Create backport PRs
|
||||
id: backport
|
||||
uses: korthout/backport-action@bf97bcfb53d5250af8b9a15fab0f56158a63b224 # v4.5.1
|
||||
uses: korthout/backport-action@66065406958f46e82238fd59546f5a99e69e22aa # v4.5.2
|
||||
with:
|
||||
# Config README: https://github.com/korthout/backport-action#backport-action
|
||||
add_author_as_reviewer: true
|
||||
|
|
|
|||
2
.github/workflows/bot.yml
vendored
2
.github/workflows/bot.yml
vendored
|
|
@ -56,7 +56,7 @@ jobs:
|
|||
run: npm install @actions/artifact@5.0.3 bottleneck@2.19.5
|
||||
|
||||
# Use a GitHub App, because it has much higher rate limits: 12,500 instead of 5,000 req / hour.
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
||||
if: github.event_name != 'pull_request' && vars.NIXPKGS_CI_APP_ID
|
||||
id: app-token
|
||||
with:
|
||||
|
|
|
|||
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
|
|
@ -67,7 +67,7 @@ jobs:
|
|||
# Sandbox is disabled on MacOS by default.
|
||||
extra_nix_config: sandbox = true
|
||||
|
||||
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
||||
- uses: cachix/cachix-action@5f2d7c5294214f71b873db4b969586b980625e71 # v17
|
||||
continue-on-error: true
|
||||
with:
|
||||
# The nixpkgs-gha cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
|
|
|
|||
6
.github/workflows/check.yml
vendored
6
.github/workflows/check.yml
vendored
|
|
@ -53,7 +53,7 @@ jobs:
|
|||
- name: Install dependencies
|
||||
run: npm install bottleneck@2.19.5
|
||||
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
||||
if: github.event_name != 'pull_request' && vars.NIXPKGS_COMMIT_CHECK_CLIENT_ID
|
||||
id: app-token
|
||||
with:
|
||||
|
|
@ -102,7 +102,7 @@ jobs:
|
|||
sparse-checkout: |
|
||||
ci/github-script
|
||||
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
||||
if: github.event_name != 'pull_request' && vars.NIXPKGS_MANUAL_EDIT_CHECK_CLIENT_ID
|
||||
id: app-token
|
||||
with:
|
||||
|
|
@ -149,7 +149,7 @@ jobs:
|
|||
|
||||
- uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
|
||||
|
||||
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
||||
- uses: cachix/cachix-action@5f2d7c5294214f71b873db4b969586b980625e71 # v17
|
||||
continue-on-error: true
|
||||
with:
|
||||
# The nixpkgs-gha cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
|
|
|
|||
2
.github/workflows/comment.yml
vendored
2
.github/workflows/comment.yml
vendored
|
|
@ -30,7 +30,7 @@ jobs:
|
|||
ci/github-script
|
||||
|
||||
# Use the GitHub App to make sure the reaction happens with the same user who will later merge.
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
||||
if: github.event_name != 'pull_request' && vars.NIXPKGS_CI_APP_ID
|
||||
id: app-token
|
||||
with:
|
||||
|
|
|
|||
2
.github/workflows/edited.yml
vendored
2
.github/workflows/edited.yml
vendored
|
|
@ -36,7 +36,7 @@ jobs:
|
|||
# Use a GitHub App to create the PR so that CI gets triggered
|
||||
# The App is scoped to Repository > Contents and Pull Requests: write for Nixpkgs
|
||||
# We only need Pull Requests: write here, but the app is also used for backports.
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ vars.NIXPKGS_CI_APP_ID }}
|
||||
|
|
|
|||
4
.github/workflows/eval.yml
vendored
4
.github/workflows/eval.yml
vendored
|
|
@ -186,7 +186,7 @@ jobs:
|
|||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
|
||||
|
||||
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
||||
- uses: cachix/cachix-action@5f2d7c5294214f71b873db4b969586b980625e71 # v17
|
||||
continue-on-error: true
|
||||
with:
|
||||
# The nixpkgs-gha cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
|
|
@ -354,7 +354,7 @@ jobs:
|
|||
target_url
|
||||
})
|
||||
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
||||
if: github.event_name == 'pull_request_target' && vars.NIXPKGS_BRANCH_CHECK_CLIENT_ID
|
||||
id: app-token
|
||||
with:
|
||||
|
|
|
|||
4
.github/workflows/lint.yml
vendored
4
.github/workflows/lint.yml
vendored
|
|
@ -72,7 +72,7 @@ jobs:
|
|||
|
||||
- uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
|
||||
|
||||
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
||||
- uses: cachix/cachix-action@5f2d7c5294214f71b873db4b969586b980625e71 # v17
|
||||
continue-on-error: true
|
||||
with:
|
||||
# The nixpkgs-gha cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
|
|
@ -102,7 +102,7 @@ jobs:
|
|||
|
||||
- uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
|
||||
|
||||
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
|
||||
- uses: cachix/cachix-action@5f2d7c5294214f71b873db4b969586b980625e71 # v17
|
||||
continue-on-error: true
|
||||
with:
|
||||
# The nixpkgs-gha cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
|
|
|
|||
2
.github/workflows/periodic-merge.yml
vendored
2
.github/workflows/periodic-merge.yml
vendored
|
|
@ -26,7 +26,7 @@ jobs:
|
|||
steps:
|
||||
# Use a GitHub App to create the PR so that CI gets triggered
|
||||
# The App is scoped to Repository > Contents and Pull Requests: write for Nixpkgs
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ vars.NIXPKGS_CI_APP_ID }}
|
||||
|
|
|
|||
4
.github/workflows/pull-request-target.yml
vendored
4
.github/workflows/pull-request-target.yml
vendored
|
|
@ -45,8 +45,8 @@ jobs:
|
|||
|
||||
# It's fine to reuse this app in the 'eval / compare' job,
|
||||
# because this job has to run before that one.
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
if: vars.NIXPKGS_BRANCH_CHECK_CLIENT_ID
|
||||
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
||||
if: vars.NIXPKGS_BRANCH_CHECK_CLIENT_ID && github.actor != 'dependabot[bot]'
|
||||
id: app-token
|
||||
with:
|
||||
client-id: ${{ vars.NIXPKGS_BRANCH_CHECK_CLIENT_ID }}
|
||||
|
|
|
|||
2
.github/workflows/review.yml
vendored
2
.github/workflows/review.yml
vendored
|
|
@ -27,7 +27,7 @@ jobs:
|
|||
ci/github-script
|
||||
|
||||
# Use the GitHub App to make sure the reaction happens with the same user who will later merge.
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
||||
if: github.event_name != 'pull_request' && vars.NIXPKGS_CI_APP_ID
|
||||
id: app-token
|
||||
with:
|
||||
|
|
|
|||
2
.github/workflows/teams.yml
vendored
2
.github/workflows/teams.yml
vendored
|
|
@ -19,7 +19,7 @@ jobs:
|
|||
steps:
|
||||
# Use a GitHub App to create the PR so that CI gets triggered and to
|
||||
# request team member lists.
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ vars.NIXPKGS_CI_APP_ID }}
|
||||
|
|
|
|||
1
.mailmap
1
.mailmap
|
|
@ -22,6 +22,7 @@ Lin Jian <me@linj.tech> <75130626+jian-lin@users.noreply.github.com>
|
|||
Martin Weinelt <hexa@darmstadt.ccc.de> <mweinelt@users.noreply.github.com>
|
||||
Martin Häcker <spamfaenger@gmx.de> <spamfaenger@gmx.de>
|
||||
moni <lythe1107@gmail.com> <lythe1107@icloud.com>
|
||||
Noah Biewesch <dev@noahbiewesch.com> <90870942+trueNAHO@users.noreply.github.com>
|
||||
quantenzitrone <nix@dev.quantenzitrone.eu>
|
||||
quantenzitrone <nix@dev.quantenzitrone.eu> <74491719+Quantenzitrone@users.noreply.github.com>
|
||||
quantenzitrone <nix@dev.quantenzitrone.eu> <74491719+quantenzitrone@users.noreply.github.com>
|
||||
|
|
|
|||
|
|
@ -505,7 +505,7 @@ pkgs/development/interpreters/elixir/ @NixOS/beam
|
|||
pkgs/development/interpreters/lfe/ @NixOS/beam
|
||||
|
||||
# Authelia
|
||||
pkgs/by-name/au/authelia/ @06kellyjac @dit7ya @nicomem
|
||||
pkgs/by-name/au/authelia/ @06kellyjac @nicomem
|
||||
|
||||
# OctoDNS
|
||||
pkgs/by-name/oc/octodns/ @anthonyroussel
|
||||
|
|
|
|||
115
ci/github-script/package-lock.json
generated
115
ci/github-script/package-lock.json
generated
|
|
@ -4,6 +4,7 @@
|
|||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "github-script",
|
||||
"dependencies": {
|
||||
"@actions/artifact": "5.0.3",
|
||||
"@actions/core": "1.11.1",
|
||||
|
|
@ -69,9 +70,9 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@actions/artifact/node_modules/undici": {
|
||||
"version": "6.23.0",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz",
|
||||
"integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==",
|
||||
"version": "6.25.0",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-6.25.0.tgz",
|
||||
"integrity": "sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18.17"
|
||||
|
|
@ -218,7 +219,6 @@
|
|||
"resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz",
|
||||
"integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@azure/abort-controller": "^2.1.2",
|
||||
"@azure/core-auth": "^1.10.0",
|
||||
|
|
@ -280,7 +280,6 @@
|
|||
"resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz",
|
||||
"integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@azure/abort-controller": "^2.1.2",
|
||||
"@azure/core-auth": "^1.10.0",
|
||||
|
|
@ -447,6 +446,18 @@
|
|||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@nodable/entities": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz",
|
||||
"integrity": "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/nodable"
|
||||
}
|
||||
],
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@octokit/auth-token": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz",
|
||||
|
|
@ -461,7 +472,6 @@
|
|||
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz",
|
||||
"integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@octokit/auth-token": "^4.0.0",
|
||||
"@octokit/graphql": "^7.1.0",
|
||||
|
|
@ -870,9 +880,9 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz",
|
||||
"integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0"
|
||||
|
|
@ -1078,10 +1088,10 @@
|
|||
"integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/fast-xml-parser": {
|
||||
"version": "5.3.6",
|
||||
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz",
|
||||
"integrity": "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==",
|
||||
"node_modules/fast-xml-builder": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz",
|
||||
"integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
|
|
@ -1090,7 +1100,27 @@
|
|||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"strnum": "^2.1.2"
|
||||
"path-expression-matcher": "^1.5.0",
|
||||
"xml-naming": "^0.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/fast-xml-parser": {
|
||||
"version": "5.8.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.8.0.tgz",
|
||||
"integrity": "sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/NaturalIntelligence"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@nodable/entities": "^2.1.0",
|
||||
"fast-xml-builder": "^1.2.0",
|
||||
"path-expression-matcher": "^1.5.0",
|
||||
"strnum": "^2.3.0",
|
||||
"xml-naming": "^0.1.0"
|
||||
},
|
||||
"bin": {
|
||||
"fxparser": "src/cli/cli.js"
|
||||
|
|
@ -1288,9 +1318,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/lodash": {
|
||||
"version": "4.17.23",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
|
||||
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
|
||||
"version": "4.18.1",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
|
||||
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lru-cache": {
|
||||
|
|
@ -1300,12 +1330,12 @@
|
|||
"license": "ISC"
|
||||
},
|
||||
"node_modules/minimatch": {
|
||||
"version": "9.0.5",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
|
||||
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
|
||||
"version": "9.0.9",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
|
||||
"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^2.0.1"
|
||||
"brace-expansion": "^2.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16 || 14 >=14.17"
|
||||
|
|
@ -1374,6 +1404,21 @@
|
|||
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
|
||||
"license": "BlueOak-1.0.0"
|
||||
},
|
||||
"node_modules/path-expression-matcher": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz",
|
||||
"integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/NaturalIntelligence"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/path-key": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
||||
|
|
@ -1440,9 +1485,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/readdir-glob/node_modules/minimatch": {
|
||||
"version": "5.1.6",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
|
||||
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
|
||||
"version": "5.1.9",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz",
|
||||
"integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^2.0.1"
|
||||
|
|
@ -1623,9 +1668,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/strnum": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz",
|
||||
"integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==",
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz",
|
||||
"integrity": "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
|
|
@ -1683,7 +1728,6 @@
|
|||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
|
||||
"integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
|
||||
"license": "Apache-2.0",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
|
|
@ -1838,6 +1882,21 @@
|
|||
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/xml-naming": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz",
|
||||
"integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/NaturalIntelligence"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/zip-stream": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz",
|
||||
|
|
|
|||
|
|
@ -181,9 +181,9 @@ module.exports = async ({ github, context, core, dry }) => {
|
|||
event: 'REQUEST_CHANGES',
|
||||
reviewKey,
|
||||
})
|
||||
} else {
|
||||
await dismissReviews({ github, context, core, dry, reviewKey })
|
||||
}
|
||||
} else {
|
||||
await dismissReviews({ github, context, core, dry, reviewKey })
|
||||
}
|
||||
|
||||
let mergedSha, targetSha
|
||||
|
|
|
|||
|
|
@ -197,6 +197,8 @@
|
|||
|
||||
- `python3Packages.pikepdf` no longer builds with mupdf support by default, which may be nice in Jupyter and iPython. Build with `withMupdf = true` if this is required.
|
||||
|
||||
- `python3Packages.django-mdeditor` has been removed, as it was unmaintained upstream and the latest release was vulnerable to a [critical security vulnerability](https://github.com/NixOS/nixpkgs/issues/515462).
|
||||
|
||||
- `vicinae` has been updated to v0.20. This includes, among several other breaking changes, a complete overhaul of the configuration system. For update instructions, see the [upstream configuration documentation](https://docs.vicinae.com/config#migration-from-v0-16-x-to-v0-17-x).
|
||||
|
||||
- `percona-server_8_4` has been removed. Please update to `percona-server_8_0`, `mysql84` or `mariadb`.
|
||||
|
|
|
|||
|
|
@ -10,7 +10,9 @@
|
|||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
- `pqos-wrapper` was removed
|
||||
as it has been unmaintained since 2022
|
||||
and not widely used.
|
||||
|
||||
## Other Notable Changes {#sec-nixpkgs-release-26.11-notable-changes}
|
||||
|
||||
|
|
|
|||
|
|
@ -1726,11 +1726,21 @@ let
|
|||
|
||||
`from`
|
||||
|
||||
: 1\. Function argument
|
||||
: The "from" option path as list of strings.
|
||||
Option must not exist in the current module set.
|
||||
|
||||
`to`
|
||||
|
||||
: 2\. Function argument
|
||||
: The "to" option path as list of strings.
|
||||
Option must already exist in the current module set.
|
||||
|
||||
# Limitations
|
||||
|
||||
- The "to" option must already be declared.
|
||||
- The "from" option should not be declared, as this function will declare it.
|
||||
- "to" Options whose types don't support merging at any level of their structure (like `types.raw`,
|
||||
or `types.attrsOf types.raw` where the attribute values can't merge) are not well-supported
|
||||
because this function wraps aliased definitions in `mkMerge`.
|
||||
*/
|
||||
mkRenamedOptionModule =
|
||||
from: to:
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
let
|
||||
inherit (lib)
|
||||
any
|
||||
foldl
|
||||
foldl'
|
||||
hasInfix
|
||||
isAttrs
|
||||
isList
|
||||
|
|
@ -85,11 +85,12 @@ let
|
|||
let
|
||||
allArgs = systemToAttrs systemOrArgs;
|
||||
|
||||
# Those two will always be derived from "config", if given, so they should NOT
|
||||
# be overridden further down with "// args".
|
||||
# These attributes are derived from other inputs, so they should NOT be
|
||||
# overridden further down with "// args".
|
||||
args = removeAttrs allArgs [
|
||||
"parsed"
|
||||
"system"
|
||||
"_withoutFunctions"
|
||||
];
|
||||
|
||||
# TODO: deprecate args.rustc in favour of args.rust after 23.05 is EOL.
|
||||
|
|
@ -692,7 +693,7 @@ let
|
|||
};
|
||||
in
|
||||
assert final.useAndroidPrebuilt -> final.isAndroid;
|
||||
assert foldl (pass: { assertion, message }: if assertion final then pass else throw message) true (
|
||||
assert foldl' (pass: { assertion, message }: if assertion final then pass else throw message) true (
|
||||
final.parsed.abi.assertions or [ ]
|
||||
);
|
||||
final;
|
||||
|
|
|
|||
|
|
@ -266,6 +266,22 @@ lib.runTests (
|
|||
}).parsed.cpu.arch;
|
||||
expected = "i686";
|
||||
};
|
||||
test_equals_reelaborate_overridden_platform = {
|
||||
expr =
|
||||
let
|
||||
base = lib.systems.elaborate "x86_64-linux";
|
||||
in
|
||||
lib.systems.equals base (
|
||||
lib.systems.elaborate (
|
||||
base
|
||||
// {
|
||||
useLLVM = true;
|
||||
linker = "lld";
|
||||
}
|
||||
)
|
||||
);
|
||||
expected = false;
|
||||
};
|
||||
}
|
||||
// {
|
||||
# equals.functionNames must list exactly the function-valued attrs of an
|
||||
|
|
|
|||
|
|
@ -501,8 +501,8 @@ rec {
|
|||
};
|
||||
u8 = unsign 8 256;
|
||||
u16 = unsign 16 65536;
|
||||
# the biggest int Nix accepts is 2^63 - 1 (9223372036854775808)
|
||||
# the smallest int Nix accepts is -2^63 (-9223372036854775807)
|
||||
# the biggest int Nix accepts is 2^63 - 1 (9223372036854775807)
|
||||
# the smallest int Nix accepts is -2^63 (-9223372036854775808)
|
||||
u32 = unsign 32 4294967296;
|
||||
# u64 = unsign 64 18446744073709551616;
|
||||
|
||||
|
|
|
|||
|
|
@ -1852,13 +1852,6 @@
|
|||
githubId = 102513;
|
||||
keys = [ { fingerprint = "B7B7 582E 564E 789B FCB8 71AB 0C6D FE2F B234 534A"; } ];
|
||||
};
|
||||
anhdle14 = {
|
||||
name = "Le Anh Duc";
|
||||
email = "anhdle14@icloud.com";
|
||||
github = "anhdle14";
|
||||
githubId = 9645992;
|
||||
keys = [ { fingerprint = "AA4B 8EC3 F971 D350 482E 4E20 0299 AFF9 ECBB 5169"; } ];
|
||||
};
|
||||
anhduy = {
|
||||
email = "vo@anhduy.io";
|
||||
github = "voanhduy1512";
|
||||
|
|
@ -1974,12 +1967,6 @@
|
|||
githubId = 14838767;
|
||||
name = "Jacopo Scannella";
|
||||
};
|
||||
antoinerg = {
|
||||
email = "roygobeil.antoine@gmail.com";
|
||||
github = "antoinerg";
|
||||
githubId = 301546;
|
||||
name = "Antoine Roy-Gobeil";
|
||||
};
|
||||
anton-4 = {
|
||||
name = "Anton";
|
||||
github = "Anton-4";
|
||||
|
|
@ -6989,12 +6976,6 @@
|
|||
githubId = 40633781;
|
||||
name = "Sergei S.";
|
||||
};
|
||||
dit7ya = {
|
||||
email = "7rat13@gmail.com";
|
||||
github = "dit7ya";
|
||||
githubId = 14034137;
|
||||
name = "Mostly Void";
|
||||
};
|
||||
ditsuke = {
|
||||
name = "Tushar";
|
||||
email = "hello@ditsuke.com";
|
||||
|
|
@ -8542,9 +8523,9 @@
|
|||
email = "evysgarden@protonmail.com";
|
||||
};
|
||||
ewok = {
|
||||
email = "ewok@ewok.ru";
|
||||
github = "ewok-old";
|
||||
githubId = 454695;
|
||||
email = "github@in.ewok.email";
|
||||
github = "ewok";
|
||||
githubId = 125148819;
|
||||
name = "Artur Taranchiev";
|
||||
};
|
||||
ewuuwe = {
|
||||
|
|
@ -11582,6 +11563,13 @@
|
|||
name = "Noah Fontes";
|
||||
keys = [ { fingerprint = "F5B2 BE1B 9AAD 98FE 2916 5597 3665 FFF7 9D38 7BAA"; } ];
|
||||
};
|
||||
implr = {
|
||||
email = "bartoszstebel@gmail.com";
|
||||
matrix = "@implr:hackerspace.pl";
|
||||
github = "implr";
|
||||
githubId = 2821175;
|
||||
name = "Bartosz Stebel";
|
||||
};
|
||||
imrying = {
|
||||
email = "philiprying@gmail.com";
|
||||
github = "imrying";
|
||||
|
|
@ -11952,6 +11940,11 @@
|
|||
github = "j0xaf";
|
||||
githubId = 932697;
|
||||
};
|
||||
j10ccc = {
|
||||
name = "popWheat";
|
||||
github = "j10ccc";
|
||||
githubId = 49830650;
|
||||
};
|
||||
j1nxie = {
|
||||
email = "rylie@rylie.moe";
|
||||
name = "Nguyen Pham Quoc An";
|
||||
|
|
@ -13144,6 +13137,13 @@
|
|||
githubId = 168684553;
|
||||
name = "João Marques";
|
||||
};
|
||||
joibel = {
|
||||
email = "alan@clucas.org";
|
||||
github = "Joibel";
|
||||
githubId = 1827156;
|
||||
name = "Alan Clucas";
|
||||
keys = [ { fingerprint = "EBE6 85B9 4904 22E1 EC94 7B17 79C7 9CBD BAF6 4C13"; } ];
|
||||
};
|
||||
joinemm = {
|
||||
email = "joonas@rautiola.co";
|
||||
github = "joinemm";
|
||||
|
|
@ -16882,6 +16882,11 @@
|
|||
name = "Marcus";
|
||||
matrix = "@marker06:matrix.org";
|
||||
};
|
||||
markhakansson = {
|
||||
name = "Mark Håkansson";
|
||||
github = "markhakansson";
|
||||
githubId = 44841869;
|
||||
};
|
||||
markus1189 = {
|
||||
email = "markus1189@gmail.com";
|
||||
github = "markus1189";
|
||||
|
|
@ -18318,12 +18323,6 @@
|
|||
githubId = 104795;
|
||||
name = "Marek Mahut";
|
||||
};
|
||||
mmai = {
|
||||
email = "henri.bourcereau@gmail.com";
|
||||
github = "mmai";
|
||||
githubId = 117842;
|
||||
name = "Henri Bourcereau";
|
||||
};
|
||||
mmesch = {
|
||||
github = "MMesch";
|
||||
githubId = 2597803;
|
||||
|
|
@ -18947,6 +18946,11 @@
|
|||
githubId = 13910387;
|
||||
keys = [ { fingerprint = "086E EF20 D54E D348 E5BA 6263 16E9 43E6 596F FB4E"; } ];
|
||||
};
|
||||
myul = {
|
||||
github = "myul";
|
||||
githubId = 27887735;
|
||||
name = "myul";
|
||||
};
|
||||
myypo = {
|
||||
email = "nikirsmcgl@gmail.com";
|
||||
github = "myypo";
|
||||
|
|
@ -19075,12 +19079,6 @@
|
|||
github = "nagymathev";
|
||||
githubId = 49335802;
|
||||
};
|
||||
naho = {
|
||||
github = "trueNAHO";
|
||||
githubId = 90870942;
|
||||
name = "Noah Pierre Biewesch";
|
||||
keys = [ { fingerprint = "5FC6 088A FB1A 609D 4532 F919 0C1C 177B 3B64 68E0"; } ];
|
||||
};
|
||||
nalbyuites = {
|
||||
email = "ashijit007@gmail.com";
|
||||
github = "nalbyuites";
|
||||
|
|
@ -19901,6 +19899,13 @@
|
|||
github = "Noah765";
|
||||
githubId = 99338019;
|
||||
};
|
||||
noahbiewesch = {
|
||||
github = "trueNAHO";
|
||||
githubId = 90870942;
|
||||
name = "Noah Biewesch";
|
||||
email = "nix@noahbiewesch.com";
|
||||
keys = [ { fingerprint = "5FC6 088A FB1A 609D 4532 F919 0C1C 177B 3B64 68E0"; } ];
|
||||
};
|
||||
noahfraiture = {
|
||||
name = "Noahcode";
|
||||
email = "pro@noahcode.dev";
|
||||
|
|
@ -20235,11 +20240,13 @@
|
|||
github = "numinit";
|
||||
githubId = 369111;
|
||||
keys = [
|
||||
# >=2025, stays in one place
|
||||
# SSH
|
||||
{ fingerprint = "XX/0lMz82MpucPqf0KG+5EJoozzNRi8i/t59byD2kNo"; }
|
||||
# GPG, >=2025, stays in one place
|
||||
{ fingerprint = "FD28 F9C9 81C5 D78E 56E8 8311 5C3E B94D 198F 1491"; }
|
||||
# >=2025, travels with me
|
||||
# GPG, >=2025, travels with me
|
||||
{ fingerprint = "C48F 475F 30A9 B192 3213 D5D5 C6E2 4809 77B2 F2F4"; }
|
||||
# <=2024
|
||||
# GPG, <=2024
|
||||
{ fingerprint = "190B DA97 F616 DE35 6899 ED17 F819 F1AF 2FC1 C1FF"; }
|
||||
];
|
||||
};
|
||||
|
|
@ -20507,7 +20514,7 @@
|
|||
name = "Erik Timan";
|
||||
};
|
||||
olduser101 = {
|
||||
email = "nathan.j.gill@outlook.com";
|
||||
email = "n@ngill.net";
|
||||
github = "OldUser101";
|
||||
githubId = 64069240;
|
||||
matrix = "@olduser101:matrix.org";
|
||||
|
|
@ -21026,6 +21033,12 @@
|
|||
githubId = 79252025;
|
||||
name = "Nicolas Benes";
|
||||
};
|
||||
panicrune = {
|
||||
email = "panicrune@tutamail.com";
|
||||
github = "panicrune";
|
||||
githubId = 161863235;
|
||||
name = "panicrune";
|
||||
};
|
||||
panky = {
|
||||
email = "dev@pankajraghav.com";
|
||||
github = "Panky-codes";
|
||||
|
|
@ -24803,12 +24816,6 @@
|
|||
name = "Sebastian Rutofski";
|
||||
keys = [ { fingerprint = "F1D4 8061 2830 3AF6 42DC 3867 C37F 3374 2A95 C547"; } ];
|
||||
};
|
||||
sebtm = {
|
||||
email = "mail@sebastian-sellmeier.de";
|
||||
github = "SebTM";
|
||||
githubId = 17243347;
|
||||
name = "Sebastian Sellmeier";
|
||||
};
|
||||
secona = {
|
||||
email = "secona00+nixpkgs@gmail.com";
|
||||
github = "secona";
|
||||
|
|
@ -25581,12 +25588,6 @@
|
|||
githubId = 74881555;
|
||||
name = "Fofanov Sergey";
|
||||
};
|
||||
sitaaax = {
|
||||
email = "johannes@kle1n.com";
|
||||
github = "SitAAAx";
|
||||
githubId = 74413170;
|
||||
name = "Johannes Klein";
|
||||
};
|
||||
sith-lord-vader = {
|
||||
email = "nixpkgs@xpertsre.rocks";
|
||||
github = "sith-lord-vader";
|
||||
|
|
@ -26925,12 +26926,6 @@
|
|||
}
|
||||
];
|
||||
};
|
||||
taliyahwebb = {
|
||||
email = "taliyahmail@proton.me";
|
||||
github = "taliyahwebb";
|
||||
githubId = 161863235;
|
||||
name = "Taliyah Webb";
|
||||
};
|
||||
talkara = {
|
||||
email = "taito.horiuchi@relexsolutions.com";
|
||||
github = "talkara";
|
||||
|
|
@ -28231,12 +28226,6 @@
|
|||
githubId = 16036882;
|
||||
name = "Thibault Gagnaux";
|
||||
};
|
||||
trino = {
|
||||
email = "muehlhans.hubert@ekodia.de";
|
||||
github = "hmuehlhans";
|
||||
githubId = 9870613;
|
||||
name = "Hubert Mühlhans";
|
||||
};
|
||||
tris203 = {
|
||||
email = "admin@snappeh.com";
|
||||
github = "tris203";
|
||||
|
|
@ -28951,6 +28940,13 @@
|
|||
githubId = 123554;
|
||||
name = "Thibaut Smith";
|
||||
};
|
||||
viena = {
|
||||
name = "Viena";
|
||||
email = "theviena96@gmail.com";
|
||||
github = "devnchill";
|
||||
githubId = 169875752;
|
||||
keys = [ { fingerprint = "BF79 8CD0 CA25 2106 99E1 ED9E F826 F032 DDDA 5560"; } ];
|
||||
};
|
||||
vieta = {
|
||||
email = "vieta@4d2.org";
|
||||
github = "yVieta";
|
||||
|
|
@ -29843,6 +29839,12 @@
|
|||
{ fingerprint = "34DB 8D31 F782 2B61 FF06 9503 8B5C 43DC 9105 2999"; }
|
||||
];
|
||||
};
|
||||
wrench-exile-legacy = {
|
||||
email = "user@wrench-exile-legacy.site";
|
||||
github = "wrench-exile-legacy";
|
||||
githubId = 280737824;
|
||||
name = "wrench";
|
||||
};
|
||||
wrmilling = {
|
||||
name = "Winston R. Milling";
|
||||
email = "Winston@Milli.ng";
|
||||
|
|
@ -30887,6 +30889,13 @@
|
|||
githubId = 873857;
|
||||
name = "Zack Newman";
|
||||
};
|
||||
Zocker1999NET = {
|
||||
github = "Zocker1999NET";
|
||||
githubId = 1645646;
|
||||
name = "Felix Stupp";
|
||||
email = "felix.stupp@banananet.work";
|
||||
keys = [ { fingerprint = "73D0 9948 B239 2D68 8A45 DC83 93E1 BD26 F6B0 2FB7"; } ];
|
||||
};
|
||||
zodman = {
|
||||
github = "zodman";
|
||||
githubId = 44167;
|
||||
|
|
|
|||
|
|
@ -358,7 +358,6 @@ with lib.maintainers;
|
|||
home-assistant = {
|
||||
members = [
|
||||
dotlambda
|
||||
fab
|
||||
hexa
|
||||
];
|
||||
scope = "Maintain the Home Assistant ecosystem";
|
||||
|
|
|
|||
|
|
@ -1,14 +1,24 @@
|
|||
# Ad-Hoc Configuration {#ad-hoc-network-config}
|
||||
|
||||
You can use [](#opt-networking.localCommands) to
|
||||
specify shell commands to be run at the end of `network-setup.service`. This
|
||||
is useful for doing network configuration not covered by the existing NixOS
|
||||
modules. For instance, to statically configure an IPv6 address:
|
||||
You can use [](#opt-networking.localCommands) to specify shell commands to be
|
||||
run after the network interfaces have been created, but not necessarily fully
|
||||
configured.
|
||||
This is useful for doing network configuration not covered by the existing
|
||||
NixOS modules. For example, you can create a network namespace and a pair
|
||||
of virtual ethernet devices like this:
|
||||
|
||||
```nix
|
||||
{
|
||||
networking.localCommands = ''
|
||||
ip -6 addr add 2001:610:685:1::1/64 dev eth0
|
||||
ip netns add mynet
|
||||
ip link add name veth-in type veth peer name veth-out
|
||||
ip link set dev veth-out netns mynet
|
||||
'';
|
||||
}
|
||||
```
|
||||
|
||||
::: {.note}
|
||||
The commands should ideally be idempotent, so it's recommended to perform
|
||||
cleanups of the state you create (e.g. virtual interfaces), or at least make
|
||||
sure possible failures are handled.
|
||||
:::
|
||||
|
|
|
|||
|
|
@ -26,9 +26,16 @@ servers:
|
|||
```
|
||||
|
||||
::: {.note}
|
||||
Statically configured interfaces are set up by the systemd service
|
||||
`interface-name-cfg.service`. The default gateway and name server
|
||||
configuration is performed by `network-setup.service`.
|
||||
Addresses and routes for statically configured interfaces and the default
|
||||
gateway are set up by systemd services named
|
||||
`network-addresses-<interface>.service`. The name servers configuration,
|
||||
instead, is performed by `network-local-commands.service` using resolvconf.
|
||||
:::
|
||||
|
||||
::: {.note}
|
||||
If needed, for example if addresses/routes were added/removed,
|
||||
you can reset the network configuration by running
|
||||
`systemctl restart networking-scripted.target`
|
||||
:::
|
||||
|
||||
The host name is set using [](#opt-networking.hostName):
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ The pre-existing `services.ankisyncd` has been marked deprecated and will be dro
|
|||
- [BenchExec](https://github.com/sosy-lab/benchexec), a framework for reliable benchmarking and resource measurement, available as [programs.benchexec](#opt-programs.benchexec.enable),
|
||||
as well as related programs
|
||||
[CPU Energy Meter](https://github.com/sosy-lab/cpu-energy-meter), available as [programs.cpu-energy-meter](#opt-programs.cpu-energy-meter.enable), and
|
||||
[PQoS Wrapper](https://gitlab.com/sosy-lab/software/pqos-wrapper), available as [programs.pqos-wrapper](#opt-programs.pqos-wrapper.enable).
|
||||
[PQoS Wrapper](https://gitlab.com/sosy-lab/software/pqos-wrapper), available as `programs.pqos-wrapper`.
|
||||
|
||||
- [Bluemap](https://bluemap.bluecolored.de/), a 3D minecraft map renderer. Available as [services.bluemap](#opt-services.bluemap.enable).
|
||||
|
||||
|
|
|
|||
|
|
@ -306,6 +306,8 @@ See <https://github.com/NixOS/nixpkgs/issues/481673>.
|
|||
|
||||
- support for `ecryptfs` in nixpkgs has been removed.
|
||||
|
||||
- `services.xserver.cmt` has been removed as the `xf86-input-cmt` package was broken and unmaintained upstream.
|
||||
|
||||
- `programs.light` was removed from nixpkgs due to the corresponding package being unmaintained upstream. `brightnessctl` and `programs.acpilight` offer replacements.
|
||||
|
||||
- `ceph` has been upgraded to v20. See the [Ceph "tentacle" release notes](https://docs.ceph.com/en/latest/releases/tentacle/#v20-2-0-tentacle) for details and recommended upgrade procedure.
|
||||
|
|
@ -326,6 +328,13 @@ See <https://github.com/NixOS/nixpkgs/issues/481673>.
|
|||
|
||||
Note for NetworkManager users: before these changes NetworkManager used to spawn its own wpa_supplicant daemon, but now it relies on `networking.wireless`. So, if you had `networking.wireless.enable = false` in your configuration, you should remove that line.
|
||||
|
||||
- Some implementation details of the NixOS network-interfaces module have been changed:
|
||||
|
||||
- In the "scripted" backend, `network-setup.service` has been removed and the network configuration services are now part of `network.target`, which is now directly pulled into `multi-user.target`.
|
||||
- Interface addresses, routes and default gateways are now configured asynchronously as soon as the underlying network devices become available (fixes issue [#154737](https://github.com/NixOS/nixpkgs/issues/154737)).
|
||||
- In both "networkd" and "scripted" backends, the configuration of name servers is now part of `network-local-commands.service` (fixes issue [#445496](https://github.com/NixOS/nixpkgs/issues/445496)).
|
||||
- The issue that resulted in a completely unconfigured network if both `resolvconf` was disabled and no default gateway configured, has also been fixed.
|
||||
|
||||
- `kratos` has been updated from 1.3.1 to [25.4.0](https://github.com/ory/kratos/releases/tag/v25.4.0). Upstream switched to a new versioning scheme (year.major.minor). Notable breaking changes:
|
||||
|
||||
- The `migrate sql` CLI command is now `migrate sql up`
|
||||
|
|
|
|||
|
|
@ -16,7 +16,12 @@
|
|||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
- `programs.pqos-wrapper` module has been deleted
|
||||
as the corresponding package has been dropped from nixpkgs.
|
||||
|
||||
- `programs.benchexec.enable = true`
|
||||
no longer sets `programs.pqos-wrapper.enable = true`
|
||||
as the corresponding module has been deleted.
|
||||
|
||||
## Other Notable Changes {#sec-release-26.11-notable-changes}
|
||||
|
||||
|
|
|
|||
|
|
@ -221,12 +221,12 @@ let
|
|||
};
|
||||
}) mountable;
|
||||
};
|
||||
passAsFile = [ "filesystems" ];
|
||||
__structuredAttrs = true;
|
||||
}
|
||||
''
|
||||
(
|
||||
echo "builtins.fromJSON '''"
|
||||
jq . < "$filesystemsPath"
|
||||
printf "%s" "$filesystems" | jq .
|
||||
echo "'''"
|
||||
) > $out
|
||||
|
||||
|
|
|
|||
|
|
@ -209,12 +209,12 @@ let
|
|||
};
|
||||
}) mountable;
|
||||
};
|
||||
passAsFile = [ "filesystems" ];
|
||||
__structuredAttrs = true;
|
||||
}
|
||||
''
|
||||
(
|
||||
echo "builtins.fromJSON '''"
|
||||
jq . < "$filesystemsPath"
|
||||
printf "%s" "$filesystems" | jq .
|
||||
echo "'''"
|
||||
) > $out
|
||||
|
||||
|
|
|
|||
|
|
@ -1495,6 +1495,17 @@ class NspawnMachine(BaseMachine):
|
|||
self.logger.info(f"kill NspawnMachine (pid {self.pid})")
|
||||
assert self.process is not None
|
||||
self.process.terminate()
|
||||
# Wait for the wrapper to finish its context-manager cleanups
|
||||
# (veth/bridge/netns teardown) before returning, so the driver's
|
||||
# subsequent vlan teardown does not race against it.
|
||||
try:
|
||||
self.process.wait(timeout=30)
|
||||
except subprocess.TimeoutExpired:
|
||||
self.logger.error(
|
||||
f"NspawnMachine {self.name} (pid {self.pid}) did not exit after SIGTERM; sending SIGKILL"
|
||||
)
|
||||
self.process.kill()
|
||||
self.process.wait()
|
||||
self.process = None
|
||||
|
||||
def is_up(self) -> bool:
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ in
|
|||
{
|
||||
imports = [
|
||||
../../modules/testing/test-instrumentation.nix # !!! should only get added for automated test runs
|
||||
../../modules/virtualisation/guest-networking-options.nix
|
||||
{
|
||||
key = "no-manual";
|
||||
documentation.nixos.enable = false;
|
||||
|
|
|
|||
|
|
@ -37,93 +37,94 @@ let
|
|||
in
|
||||
hostToGuest.${hostPlatform.system} or (throw message);
|
||||
|
||||
baseOS = import ../eval-config.nix {
|
||||
inherit lib;
|
||||
system = null; # use modularly defined system
|
||||
inherit (config.node) specialArgs;
|
||||
modules = [ config.defaults ];
|
||||
baseModules = (import ../../modules/module-list.nix) ++ [
|
||||
./nixos-test-base.nix
|
||||
{
|
||||
key = "nodes";
|
||||
_module.args = {
|
||||
inherit (config) containers;
|
||||
nodes = config.nodesCompat;
|
||||
};
|
||||
}
|
||||
(
|
||||
{ options, ... }:
|
||||
{
|
||||
key = "nodes.nix-pkgs";
|
||||
config = optionalAttrs (!config.node.pkgsReadOnly) (
|
||||
mkIf (!options.nixpkgs.pkgs.isDefined) {
|
||||
# TODO: switch to nixpkgs.hostPlatform and make sure containers-imperative test still evaluates.
|
||||
nixpkgs.system = guestSystem;
|
||||
baseOS =
|
||||
extraBaseModules:
|
||||
import ../eval-config.nix {
|
||||
inherit lib;
|
||||
system = null; # use modularly defined system
|
||||
inherit (config.node) specialArgs;
|
||||
modules = [ config.defaults ];
|
||||
baseModules =
|
||||
(import ../../modules/module-list.nix)
|
||||
++ [
|
||||
./nixos-test-base.nix
|
||||
{
|
||||
key = "nodes";
|
||||
_module.args = {
|
||||
inherit (config) containers;
|
||||
nodes = config.nodesCompat;
|
||||
};
|
||||
}
|
||||
(
|
||||
{ options, ... }:
|
||||
{
|
||||
key = "nodes.nix-pkgs";
|
||||
config = optionalAttrs (!config.node.pkgsReadOnly) (
|
||||
mkIf (!options.nixpkgs.pkgs.isDefined) {
|
||||
# TODO: switch to nixpkgs.hostPlatform and make sure containers-imperative test still evaluates.
|
||||
nixpkgs.system = guestSystem;
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
)
|
||||
testModuleArgs.config.extraBaseModules
|
||||
];
|
||||
};
|
||||
baseQemuOS = baseOS.extendModules {
|
||||
modules = [
|
||||
../../modules/virtualisation/qemu-vm.nix
|
||||
config.nodeDefaults
|
||||
)
|
||||
testModuleArgs.config.extraBaseModules
|
||||
]
|
||||
++ extraBaseModules;
|
||||
};
|
||||
baseQemuOS = baseOS [
|
||||
../../modules/virtualisation/qemu-vm.nix
|
||||
testModuleArgs.config.extraBaseNodeModules
|
||||
config.nodeDefaults
|
||||
{
|
||||
key = "base-qemu";
|
||||
virtualisation.qemu = {
|
||||
inherit (testModuleArgs.config.qemu) package forceAccel;
|
||||
};
|
||||
virtualisation.host.pkgs = hostPkgs;
|
||||
}
|
||||
];
|
||||
baseNspawnOS = baseOS [
|
||||
../../modules/virtualisation/nspawn-container
|
||||
config.containerDefaults
|
||||
(
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
key = "base-qemu";
|
||||
virtualisation.qemu = {
|
||||
inherit (testModuleArgs.config.qemu) package forceAccel;
|
||||
key = "base-nspawn";
|
||||
|
||||
# PAM requires setuid and doesn't work in the build sandbox.
|
||||
# https://github.com/NixOS/nix/blob/959c244a1265f4048390f3ad21679219d7b27a99/src/libstore/unix/build/linux-derivation-builder.cc#L63
|
||||
services.openssh.settings.UsePAM = false;
|
||||
|
||||
# Networking for tests is statically configured by default.
|
||||
# dhcpcd times out after blocking for a long time, which slows down tests.
|
||||
# See https://github.com/NixOS/nixpkgs/pull/478109#discussion_r2867570799
|
||||
networking.useDHCP = lib.mkDefault false;
|
||||
|
||||
# Disable Info manual directory generation to prevent build failures.
|
||||
#
|
||||
# Context: 'install-info' (from texinfo) is triggered during system-path
|
||||
# generation to index manuals, but it requires 'gzip' in the $PATH to
|
||||
# decompress them.
|
||||
# When 'networking.useDHCP' is set to false, transitive dependencies
|
||||
# (like dhcpcd or other network tools) that normally pull 'gzip' into
|
||||
# the system environment are removed. This leaves 'install-info'
|
||||
# stranded without 'gzip', causing the 'system-path' derivation to fail.
|
||||
# Since nspawn containers are typically minimal, disabling 'info'
|
||||
# is a cleaner fix than explicitly adding 'gzip' to systemPackages.
|
||||
documentation.info.enable = lib.mkDefault false;
|
||||
|
||||
# Gross, insecure hack to make login work. See above.
|
||||
security.pam.services.login = {
|
||||
text = ''
|
||||
auth sufficient ${pkgs.linux-pam}/lib/security/pam_permit.so
|
||||
account sufficient ${pkgs.linux-pam}/lib/security/pam_permit.so
|
||||
password sufficient ${pkgs.linux-pam}/lib/security/pam_permit.so
|
||||
session sufficient ${pkgs.linux-pam}/lib/security/pam_permit.so
|
||||
'';
|
||||
};
|
||||
virtualisation.host.pkgs = hostPkgs;
|
||||
}
|
||||
testModuleArgs.config.extraBaseNodeModules
|
||||
];
|
||||
};
|
||||
baseNspawnOS = baseOS.extendModules {
|
||||
modules = [
|
||||
../../modules/virtualisation/nspawn-container
|
||||
config.containerDefaults
|
||||
(
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
key = "base-nspawn";
|
||||
|
||||
# PAM requires setuid and doesn't work in the build sandbox.
|
||||
# https://github.com/NixOS/nix/blob/959c244a1265f4048390f3ad21679219d7b27a99/src/libstore/unix/build/linux-derivation-builder.cc#L63
|
||||
services.openssh.settings.UsePAM = false;
|
||||
|
||||
# Networking for tests is statically configured by default.
|
||||
# dhcpcd times out after blocking for a long time, which slows down tests.
|
||||
# See https://github.com/NixOS/nixpkgs/pull/478109#discussion_r2867570799
|
||||
networking.useDHCP = lib.mkDefault false;
|
||||
|
||||
# Disable Info manual directory generation to prevent build failures.
|
||||
#
|
||||
# Context: 'install-info' (from texinfo) is triggered during system-path
|
||||
# generation to index manuals, but it requires 'gzip' in the $PATH to
|
||||
# decompress them.
|
||||
# When 'networking.useDHCP' is set to false, transitive dependencies
|
||||
# (like dhcpcd or other network tools) that normally pull 'gzip' into
|
||||
# the system environment are removed. This leaves 'install-info'
|
||||
# stranded without 'gzip', causing the 'system-path' derivation to fail.
|
||||
# Since nspawn containers are typically minimal, disabling 'info'
|
||||
# is a cleaner fix than explicitly adding 'gzip' to systemPackages.
|
||||
documentation.info.enable = lib.mkDefault false;
|
||||
|
||||
# Gross, insecure hack to make login work. See above.
|
||||
security.pam.services.login = {
|
||||
text = ''
|
||||
auth sufficient ${pkgs.linux-pam}/lib/security/pam_permit.so
|
||||
account sufficient ${pkgs.linux-pam}/lib/security/pam_permit.so
|
||||
password sufficient ${pkgs.linux-pam}/lib/security/pam_permit.so
|
||||
session sufficient ${pkgs.linux-pam}/lib/security/pam_permit.so
|
||||
'';
|
||||
};
|
||||
}
|
||||
)
|
||||
];
|
||||
};
|
||||
)
|
||||
];
|
||||
|
||||
# TODO (lib): Dedup with run.nix, add to lib/options.nix
|
||||
mkOneUp = opt: f: lib.mkOverride (opt.highestPrio - 1) (f opt.value);
|
||||
|
|
|
|||
|
|
@ -24,10 +24,12 @@ let
|
|||
'';
|
||||
|
||||
# Sadly, systemd-vconsole-setup doesn't support binary keymaps.
|
||||
vconsoleConf = pkgs.writeText "vconsole.conf" ''
|
||||
KEYMAP=${cfg.keyMap}
|
||||
${lib.optionalString (cfg.font != null) "FONT=${cfg.font}"}
|
||||
'';
|
||||
vconsoleConf =
|
||||
withFont:
|
||||
pkgs.writeText "vconsole.conf" ''
|
||||
KEYMAP=${cfg.keyMap}
|
||||
${lib.optionalString (withFont && cfg.font != null) "FONT=${cfg.font}"}
|
||||
'';
|
||||
|
||||
consoleEnv =
|
||||
kbd:
|
||||
|
|
@ -165,7 +167,7 @@ in
|
|||
# Let systemd-vconsole-setup.service do the work of setting up the
|
||||
# virtual consoles. Skip when imperative so localectl can manage it.
|
||||
environment.etc."vconsole.conf" = lib.mkIf (!i18nCfg.imperativeLocale) {
|
||||
source = vconsoleConf;
|
||||
source = vconsoleConf true;
|
||||
};
|
||||
# Provide kbd with additional packages.
|
||||
environment.etc.kbd.source = "${consoleEnv pkgs.kbd}/share";
|
||||
|
|
@ -183,7 +185,7 @@ in
|
|||
);
|
||||
|
||||
boot.initrd.systemd.contents = {
|
||||
"/etc/vconsole.conf".source = vconsoleConf;
|
||||
"/etc/vconsole.conf".source = vconsoleConf cfg.earlySetup;
|
||||
# Add everything if we want full console setup...
|
||||
"/etc/kbd" = lib.mkIf cfg.earlySetup {
|
||||
source = "${consoleEnv config.boot.initrd.systemd.package.kbd}/share";
|
||||
|
|
@ -192,9 +194,6 @@ in
|
|||
"/etc/kbd/keymaps" = lib.mkIf (!cfg.earlySetup) {
|
||||
source = "${consoleEnv config.boot.initrd.systemd.package.kbd}/share/keymaps";
|
||||
};
|
||||
"/etc/kbd/consolefonts" = lib.mkIf (!cfg.earlySetup && cfg.font != null) {
|
||||
source = "${consoleEnv config.boot.initrd.systemd.package.kbd}/share/consolefonts";
|
||||
};
|
||||
};
|
||||
boot.initrd.systemd.additionalUpstreamUnits = [
|
||||
"systemd-vconsole-setup.service"
|
||||
|
|
@ -204,7 +203,7 @@ in
|
|||
"${config.boot.initrd.systemd.package.kbd}/bin/setfont"
|
||||
"${config.boot.initrd.systemd.package.kbd}/bin/loadkeys"
|
||||
]
|
||||
++ lib.optionals (cfg.font != null && lib.hasPrefix builtins.storeDir cfg.font) [
|
||||
++ lib.optionals (cfg.font != null && cfg.earlySetup && lib.hasPrefix builtins.storeDir cfg.font) [
|
||||
"${cfg.font}"
|
||||
]
|
||||
++ lib.optionals (lib.hasPrefix builtins.storeDir cfg.keyMap) [
|
||||
|
|
@ -226,7 +225,7 @@ in
|
|||
wantedBy = [ "multi-user.target" ];
|
||||
restartTriggers =
|
||||
lib.optionals (!i18nCfg.imperativeLocale) [
|
||||
vconsoleConf
|
||||
(config.environment.etc."vconsole.conf".source)
|
||||
]
|
||||
++ [
|
||||
(consoleEnv pkgs.kbd)
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ let
|
|||
{
|
||||
inputs = {
|
||||
# This is pointing to an unstable release.
|
||||
# If you prefer a stable release instead, you can this to the latest number shown here: https://nixos.org/download
|
||||
# If you prefer a stable release instead, you can change the word unstable to the latest number shown here: https://nixos.org/download
|
||||
# i.e. nixos-24.11
|
||||
# Use `nix flake update` to update the flake to the latest revision of the chosen release channel.
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
|
|
|
|||
|
|
@ -296,7 +296,6 @@
|
|||
./programs/pay-respects.nix
|
||||
./programs/plotinus.nix
|
||||
./programs/pmount.nix
|
||||
./programs/pqos-wrapper.nix
|
||||
./programs/projecteur.nix
|
||||
./programs/proxychains.nix
|
||||
./programs/pulseview.nix
|
||||
|
|
@ -1857,7 +1856,6 @@
|
|||
./services/x11/display-managers/xpra.nix
|
||||
./services/x11/extra-layouts.nix
|
||||
./services/x11/fractalart.nix
|
||||
./services/x11/hardware/cmt.nix
|
||||
./services/x11/hardware/digimend.nix
|
||||
./services/x11/hardware/synaptics.nix
|
||||
./services/x11/hardware/wacom.nix
|
||||
|
|
|
|||
|
|
@ -85,7 +85,6 @@ in
|
|||
# See <https://github.com/sosy-lab/benchexec/blob/3.18/doc/INSTALL.md#requirements>.
|
||||
programs = {
|
||||
cpu-energy-meter.enable = lib.mkDefault true;
|
||||
pqos-wrapper.enable = lib.mkDefault true;
|
||||
};
|
||||
|
||||
# See <https://github.com/sosy-lab/benchexec/blob/3.18/doc/INSTALL.md#kernel-requirements>.
|
||||
|
|
|
|||
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.programs.pqos-wrapper;
|
||||
in
|
||||
{
|
||||
options.programs.pqos-wrapper = {
|
||||
enable = lib.mkEnableOption "PQoS Wrapper for BenchExec";
|
||||
package = lib.mkPackageOption pkgs "pqos-wrapper" { };
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
hardware.cpu.x86.msr.enable = true;
|
||||
|
||||
security.wrappers.${cfg.package.meta.mainProgram} = {
|
||||
owner = "nobody";
|
||||
group = config.hardware.cpu.x86.msr.group;
|
||||
source = lib.getExe cfg.package;
|
||||
capabilities = "cap_sys_rawio=eip";
|
||||
};
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ lorenzleutgeb ];
|
||||
}
|
||||
|
|
@ -82,6 +82,10 @@ in
|
|||
"programs"
|
||||
"gnome-documents"
|
||||
] "The corresponding package was removed from nixpkgs.")
|
||||
(mkRemovedOptionModule [
|
||||
"programs"
|
||||
"pqos-wrapper"
|
||||
] "The corresponding package was removed from nixpkgs.") # added 2026-05-13
|
||||
(mkRemovedOptionModule
|
||||
[
|
||||
"services"
|
||||
|
|
@ -386,6 +390,10 @@ in
|
|||
as the underlying package isn't being maintained. Working alternatives are
|
||||
libinput and synaptics.
|
||||
'')
|
||||
(mkRemovedOptionModule [ "services" "xserver" "windowManager" "ragnarwm" ] ''
|
||||
The services.xserver.windowManager.ragnarwm module has been removed
|
||||
because the corresponding package was removed from nixpkgs.
|
||||
'')
|
||||
(mkRemovedOptionModule [
|
||||
"services"
|
||||
"xmr-stak"
|
||||
|
|
@ -510,6 +518,9 @@ in
|
|||
(mkRemovedOptionModule [ "services" "xtreemfs" ] ''
|
||||
services.xtreemfs has been removed as it was broken and unmaintained upstream
|
||||
'')
|
||||
(mkRemovedOptionModule [ "services" "xserver" "cmt" ] ''
|
||||
services.xserver.cmt has been removed as it was broken and unmaintained upstream
|
||||
'')
|
||||
# Do NOT add any option renames here, see top of the file
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ let
|
|||
attrValues
|
||||
concatStringsSep
|
||||
escapeShellArg
|
||||
getExe
|
||||
hasInfix
|
||||
hasSuffix
|
||||
optionalAttrs
|
||||
|
|
@ -36,7 +37,7 @@ let
|
|||
|
||||
# Check whether any runner instance label requires a container runtime
|
||||
# Empty label strings result in the upstream defined defaultLabels, which require docker
|
||||
# https://gitea.com/gitea/act_runner/src/tag/v0.1.5/internal/app/cmd/register.go#L93-L98
|
||||
# https://gitea.com/gitea/runner/src/tag/v0.1.5/internal/app/cmd/register.go#L93-L98
|
||||
hasDockerScheme =
|
||||
instance: instance.labels == [ ] || any (label: hasInfix ":docker:" label) instance.labels;
|
||||
wantsContainerRuntime = any hasDockerScheme (attrValues cfg.instances);
|
||||
|
|
@ -53,7 +54,7 @@ let
|
|||
|| (instance.token != null && instance.tokenFile == null);
|
||||
in
|
||||
{
|
||||
meta.maintainers = [ ];
|
||||
meta.maintainers = pkgs.gitea-actions-runner.meta.maintainers;
|
||||
|
||||
options.services.gitea-actions-runner = with types; {
|
||||
package = mkPackageOption pkgs "gitea-actions-runner" { };
|
||||
|
|
@ -123,8 +124,8 @@ in
|
|||
};
|
||||
settings = mkOption {
|
||||
description = ''
|
||||
Configuration for `act_runner daemon`.
|
||||
See <https://gitea.com/gitea/act_runner/src/branch/main/internal/pkg/config/config.example.yaml> for an example configuration
|
||||
Configuration for gitea-runner daemon.
|
||||
See <https://gitea.com/gitea/runner/src/branch/main/internal/pkg/config/config.example.yaml> for an example configuration
|
||||
'';
|
||||
|
||||
type = types.submodule {
|
||||
|
|
@ -252,7 +253,7 @@ in
|
|||
rm -v "$INSTANCE_DIR/.runner" || true
|
||||
|
||||
# perform the registration
|
||||
${cfg.package}/bin/act_runner register --no-interactive \
|
||||
${getExe cfg.package} register --no-interactive \
|
||||
--instance ${escapeShellArg instance.url} \
|
||||
--token "$TOKEN" \
|
||||
--name ${escapeShellArg instance.name} \
|
||||
|
|
@ -266,7 +267,7 @@ in
|
|||
|
||||
'')
|
||||
];
|
||||
ExecStart = "${cfg.package}/bin/act_runner daemon --config ${configFile}";
|
||||
ExecStart = "${getExe cfg.package} daemon --config ${configFile}";
|
||||
SupplementaryGroups =
|
||||
optionals wantsDocker [
|
||||
"docker"
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ let
|
|||
fpm = config.services.phpfpm.pools.roundcube;
|
||||
localDB = cfg.database.host == "localhost";
|
||||
user = cfg.database.username;
|
||||
phpWithPspell = pkgs.php83.withExtensions ({ enabled, all }: [ all.pspell ] ++ enabled);
|
||||
phpWithPspell = pkgs.php84.withExtensions ({ enabled, all }: [ all.pspell ] ++ enabled);
|
||||
|
||||
env = {
|
||||
ASPELL_CONF = "dict-dir ${pkgs.aspellWithDicts (_: cfg.dicts)}/lib/aspell";
|
||||
|
|
@ -184,28 +184,14 @@ in
|
|||
${cfg.hostName} = {
|
||||
forceSSL = lib.mkDefault true;
|
||||
enableACME = lib.mkDefault true;
|
||||
root = cfg.package;
|
||||
root = cfg.package + "/public_html";
|
||||
locations."/" = {
|
||||
index = "index.php";
|
||||
priority = 1100;
|
||||
extraConfig = ''
|
||||
add_header Cache-Control 'public, max-age=604800, must-revalidate';
|
||||
client_max_body_size ${toString cfg.maxAttachmentSize};
|
||||
'';
|
||||
};
|
||||
locations."~ ^/(SQL|bin|config|logs|temp|vendor)/" = {
|
||||
priority = 3110;
|
||||
extraConfig = ''
|
||||
return 404;
|
||||
'';
|
||||
};
|
||||
locations."~ ^/(CHANGELOG.md|INSTALL|LICENSE|README.md|SECURITY.md|UPGRADING|composer.json|composer.lock)" =
|
||||
{
|
||||
priority = 3120;
|
||||
extraConfig = ''
|
||||
return 404;
|
||||
'';
|
||||
};
|
||||
locations."~* \\.php(/|$)" = {
|
||||
priority = 3130;
|
||||
extraConfig = ''
|
||||
|
|
@ -213,6 +199,8 @@ in
|
|||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||
include ${config.services.nginx.package}/conf/fastcgi.conf;
|
||||
|
||||
client_max_body_size ${toString cfg.maxAttachmentSize};
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ let
|
|||
|
||||
in
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [ sebtm ];
|
||||
meta.maintainers = [ ];
|
||||
|
||||
options = {
|
||||
services.tp-auto-kbbl = {
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ let
|
|||
"smartctl"
|
||||
"smokeping"
|
||||
"snmp"
|
||||
"speedtest"
|
||||
"sql"
|
||||
"statsd"
|
||||
"storagebox"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
cfg = config.services.prometheus.exporters.speedtest;
|
||||
inherit (lib)
|
||||
mkOption
|
||||
types
|
||||
concatStringsSep
|
||||
optionalString
|
||||
;
|
||||
in
|
||||
{
|
||||
port = 9798;
|
||||
|
||||
extraOpts = {
|
||||
serverID = mkOption {
|
||||
type = types.int;
|
||||
default = -1;
|
||||
description = ''
|
||||
Speedtest.net server ID to run tests against.
|
||||
-1 picks the closest server to your location.
|
||||
'';
|
||||
};
|
||||
|
||||
serverFallback = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
If the configured serverID is unavailable, fall back to the closest available server.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
serviceOpts = {
|
||||
serviceConfig = {
|
||||
ExecStart = ''
|
||||
${pkgs.prometheus-speedtest-exporter}/bin/speedtest_exporter \
|
||||
-listen-address ${cfg.listenAddress} \
|
||||
-port ${toString cfg.port} \
|
||||
-server_id ${toString cfg.serverID} \
|
||||
${optionalString cfg.serverFallback "-server_fallback"} \
|
||||
${concatStringsSep " \\\n " cfg.extraFlags}
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -39,7 +39,7 @@ with lib;
|
|||
};
|
||||
|
||||
package = mkPackageOption pkgs "mullvad" {
|
||||
example = "mullvad-vpn";
|
||||
example = "pkgs.mullvad-vpn";
|
||||
extraDescription = ''
|
||||
`pkgs.mullvad` only provides the CLI tool, `pkgs.mullvad-vpn` provides both the CLI and the GUI.
|
||||
'';
|
||||
|
|
|
|||
|
|
@ -76,22 +76,23 @@ in
|
|||
default = null;
|
||||
apply = v: if v != null then lib.concatStringsSep "," v else null;
|
||||
description = ''
|
||||
Blob MIME types that can be served.
|
||||
Blob mimetypes that can be served. Wildcards are supported "*/*", "image/*", etc.
|
||||
|
||||
Validation is done loosely via content inference. Further validation can be done by
|
||||
a layer above this proxy, such as an image transformation service. When inference
|
||||
fails, the blob's type falls back to `application/octet-stream`. When that type is
|
||||
allowed, blobs failing inference can still be served.
|
||||
Validation is done loosely via content sniffing. Further validation can be done by a layer
|
||||
above this proxy, such as an image transformation service. When inference fails, the blob's
|
||||
type falls back to `application/octet-stream`. When that type is allowed, blobs failing
|
||||
inference can still be served.
|
||||
'';
|
||||
};
|
||||
PORXIE_BLOB_MAX_SIZE = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
Maximum blob size that can be fetched and served.
|
||||
Maximum blob size that can be served.
|
||||
|
||||
Blobs that exceed this limit will return HTTP 413. The minimum value is 512kb
|
||||
and the maximum is the system's total memory.
|
||||
Blobs that exceed this limit will return HTTP 413.
|
||||
|
||||
The minimum value is 512kb and the maximum is the system's total memory.
|
||||
'';
|
||||
};
|
||||
PORXIE_BLOB_CACHE_HEADER = lib.mkOption {
|
||||
|
|
|
|||
|
|
@ -108,6 +108,18 @@ in
|
|||
default = [ ];
|
||||
description = "Extra arguments passed to the Radicale daemon.";
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "radicale";
|
||||
description = "User account under which Radicale runs.";
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
type = types.str;
|
||||
default = "radicale";
|
||||
description = "Group under which Radicale runs.";
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
|
@ -155,12 +167,16 @@ in
|
|||
|
||||
environment.systemPackages = [ pkg ];
|
||||
|
||||
users.users.radicale = {
|
||||
isSystemUser = true;
|
||||
group = "radicale";
|
||||
users.users = mkIf (cfg.user == "radicale") {
|
||||
radicale = {
|
||||
group = cfg.group;
|
||||
isSystemUser = true;
|
||||
};
|
||||
};
|
||||
|
||||
users.groups.radicale = { };
|
||||
users.groups = mkIf (cfg.group == "radicale") {
|
||||
radicale = { };
|
||||
};
|
||||
|
||||
systemd.services.radicale = {
|
||||
description = "A Simple Calendar and Contact Server";
|
||||
|
|
@ -176,8 +192,8 @@ in
|
|||
]
|
||||
++ (map escapeShellArg cfg.extraArgs)
|
||||
);
|
||||
User = "radicale";
|
||||
Group = "radicale";
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
StateDirectory = "radicale/collections";
|
||||
StateDirectoryMode = "0750";
|
||||
# Hardening
|
||||
|
|
|
|||
|
|
@ -490,7 +490,6 @@ in
|
|||
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
jk
|
||||
dit7ya
|
||||
nicomem
|
||||
connor-grady
|
||||
];
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ let
|
|||
pass-basic-auth = passBasicAuth;
|
||||
pass-host-header = passHostHeader;
|
||||
reverse-proxy = reverseProxy;
|
||||
trusted-proxy-ip = trustedProxyIP;
|
||||
proxy-prefix = proxyPrefix;
|
||||
profile-url = profileURL;
|
||||
oidc-issuer-url = oidcIssuerUrl;
|
||||
|
|
@ -495,6 +496,16 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
trustedProxyIP = lib.mkOption {
|
||||
type = with lib.types; listOf str;
|
||||
default = [ ];
|
||||
description = ''
|
||||
List of IPs or CIDR ranges allowed to supply X-Forwarded-* headers when reverseProxy is enabled.
|
||||
If not set, OAuth2 Proxy preserves backwards compatibility by trusting all source IPs (0.0.0.0/0, ::/0) and logs a warning at startup.
|
||||
Configure this to your reverse proxy addresses to prevent forwarded header spoofing.
|
||||
'';
|
||||
};
|
||||
|
||||
proxyPrefix = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "/oauth2";
|
||||
|
|
@ -618,6 +629,13 @@ in
|
|||
}
|
||||
];
|
||||
|
||||
warnings = lib.mkIf (cfg.reverseProxy && cfg.trustedProxyIP == [ ]) [
|
||||
''
|
||||
When config.services.oauth2-proxy.reverseProxy is enabled, configure config.services.oauth2-proxy.trustedProxyIP to the IPs or CIDR range(s) of the reverse proxies that are allowed to send X-Forwarded-* headers.
|
||||
If you leave it unset, OAuth2 Proxy currently trusts all source IPs for backwards compatibility, which means a client that can reach OAuth2 Proxy directly may be able to spoof forwarded headers.
|
||||
''
|
||||
];
|
||||
|
||||
users.users.oauth2-proxy = {
|
||||
description = "OAuth2 Proxy";
|
||||
isSystemUser = true;
|
||||
|
|
|
|||
|
|
@ -393,7 +393,6 @@ in
|
|||
};
|
||||
|
||||
serviceConfig = {
|
||||
Type = "notify";
|
||||
# Use "+" because credentialsFile may not be accessible to User= or Group=.
|
||||
ExecStartPre = [
|
||||
(
|
||||
|
|
@ -407,7 +406,6 @@ in
|
|||
)
|
||||
];
|
||||
ExecStart = "${cfg.package}/bin/transmission-daemon -f -g ${cfg.home}/${settingsDir} ${escapeShellArgs cfg.extraFlags}";
|
||||
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
# Create rootDir in the host's mount namespace.
|
||||
|
|
@ -513,7 +511,18 @@ in
|
|||
"quotactl"
|
||||
];
|
||||
SystemCallArchitectures = "native";
|
||||
};
|
||||
}
|
||||
// (
|
||||
if lib.versionAtLeast cfg.package.version "4.1.1" then
|
||||
{
|
||||
Type = "notify-reload";
|
||||
}
|
||||
else
|
||||
{
|
||||
Type = "notify";
|
||||
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
# It's useful to have transmission in path, e.g. for remote control
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ in
|
|||
packages = {
|
||||
motioneye = lib.mkPackageOption pkgs "motioneye" { };
|
||||
motion = lib.mkPackageOption pkgs "motion" { };
|
||||
ffmpeg = lib.mkPackageOption pkgs "ffmpeg" { };
|
||||
ffmpeg = lib.mkPackageOption pkgs "ffmpeg-headless" { };
|
||||
};
|
||||
|
||||
user = lib.mkOption {
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
let
|
||||
inherit (lib)
|
||||
getExe
|
||||
hasAttr
|
||||
mapAttrs
|
||||
match
|
||||
mkEnableOption
|
||||
|
|
@ -362,6 +363,15 @@ in
|
|||
|
||||
config = mkIf cfg.enable {
|
||||
environment.systemPackages = [ manage ];
|
||||
|
||||
# Some settings options in LaSuite has been renamed in 5.0.0
|
||||
# Show warnings if those settings are not renamed
|
||||
# TODO: remove it when the retrocompatibility options will be gone
|
||||
warnings =
|
||||
(optional (hasAttr "AI_API_KEY" cfg.settings) "AI_API_KEY has been renamed as OPENAI_SDK_API_KEY in LaSuite Docs")
|
||||
++ (optional (hasAttr "AI_API_KEY_FILE" cfg.settings) "AI_API_KEY_FILE has been renamed as OPENAI_SDK_API_KEY_FILE in LaSuite Docs")
|
||||
++ (optional (hasAttr "AI_BASE_URL" cfg.settings) "AI_BASE_URL has been renamed as OPENAI_SDK_BASE_URL in LaSuite Docs");
|
||||
|
||||
systemd.services.lasuite-docs-postgresql-setup = mkIf cfg.postgresql.createLocally {
|
||||
wantedBy = [ "lasuite-docs.target" ];
|
||||
requiredBy = [ "lasuite-docs.service" ];
|
||||
|
|
|
|||
|
|
@ -1,114 +0,0 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
cfg = config.services.xserver.cmt;
|
||||
etcPath = "X11/xorg.conf.d";
|
||||
|
||||
in
|
||||
{
|
||||
|
||||
options = {
|
||||
|
||||
services.xserver.cmt = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Enable chrome multitouch input (cmt). Touchpad drivers that are configured for chromebooks.";
|
||||
};
|
||||
models = mkOption {
|
||||
type = types.enum [
|
||||
"atlas"
|
||||
"banjo"
|
||||
"candy"
|
||||
"caroline"
|
||||
"cave"
|
||||
"celes"
|
||||
"clapper"
|
||||
"cyan"
|
||||
"daisy"
|
||||
"elan"
|
||||
"elm"
|
||||
"enguarde"
|
||||
"eve"
|
||||
"expresso"
|
||||
"falco"
|
||||
"gandof"
|
||||
"glimmer"
|
||||
"gnawty"
|
||||
"heli"
|
||||
"kevin"
|
||||
"kip"
|
||||
"leon"
|
||||
"lulu"
|
||||
"orco"
|
||||
"pbody"
|
||||
"peppy"
|
||||
"pi"
|
||||
"pit"
|
||||
"puppy"
|
||||
"quawks"
|
||||
"rambi"
|
||||
"samus"
|
||||
"snappy"
|
||||
"spring"
|
||||
"squawks"
|
||||
"swanky"
|
||||
"winky"
|
||||
"wolf"
|
||||
"auron_paine"
|
||||
"auron_yuna"
|
||||
"daisy_skate"
|
||||
"nyan_big"
|
||||
"nyan_blaze"
|
||||
"veyron_jaq"
|
||||
"veyron_jerry"
|
||||
"veyron_mighty"
|
||||
"veyron_minnie"
|
||||
"veyron_speedy"
|
||||
];
|
||||
example = "banjo";
|
||||
description = ''
|
||||
Which models to enable cmt for. Enter the Code Name for your Chromebook.
|
||||
Code Name can be found at <https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices>.
|
||||
'';
|
||||
};
|
||||
}; # closes services
|
||||
}; # closes options
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
services.xserver.modules = [ pkgs.xf86-input-cmt ];
|
||||
|
||||
environment.etc = {
|
||||
"${etcPath}/40-touchpad-cmt.conf" = {
|
||||
source = "${pkgs.chromium-xorg-conf}/40-touchpad-cmt.conf";
|
||||
};
|
||||
"${etcPath}/50-touchpad-cmt-${cfg.models}.conf" = {
|
||||
source = "${pkgs.chromium-xorg-conf}/50-touchpad-cmt-${cfg.models}.conf";
|
||||
};
|
||||
"${etcPath}/60-touchpad-cmt-${cfg.models}.conf" = {
|
||||
source = "${pkgs.chromium-xorg-conf}/60-touchpad-cmt-${cfg.models}.conf";
|
||||
};
|
||||
};
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = !config.services.libinput.enable;
|
||||
message = ''
|
||||
cmt and libinput are incompatible, meaning you cannot enable them both.
|
||||
To use cmt you need to disable libinput with `services.libinput.enable = false`
|
||||
If you haven't enabled it in configuration.nix, it's enabled by default on a
|
||||
different xserver module.
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
@ -34,7 +34,6 @@ in
|
|||
./openbox.nix
|
||||
./pekwm.nix
|
||||
./notion.nix
|
||||
./ragnarwm.nix
|
||||
./ratpoison.nix
|
||||
./sawfish.nix
|
||||
./smallwm.nix
|
||||
|
|
|
|||
|
|
@ -1,31 +0,0 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.xserver.windowManager.ragnarwm;
|
||||
in
|
||||
{
|
||||
###### interface
|
||||
|
||||
options = {
|
||||
services.xserver.windowManager.ragnarwm = {
|
||||
enable = mkEnableOption "ragnarwm";
|
||||
package = mkPackageOption pkgs "ragnarwm" { };
|
||||
};
|
||||
};
|
||||
|
||||
###### implementation
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
services.displayManager.sessionPackages = [ cfg.package ];
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ sigmanificient ];
|
||||
}
|
||||
|
|
@ -143,6 +143,8 @@ let
|
|||
"final.target"
|
||||
"kexec.target"
|
||||
"systemd-kexec.service"
|
||||
"soft-reboot.target"
|
||||
"systemd-soft-reboot.service"
|
||||
]
|
||||
++ lib.optional cfg.package.withUtmp "systemd-update-utmp.service"
|
||||
++ [
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
|
|
@ -51,6 +50,9 @@
|
|||
];
|
||||
|
||||
boot.initrd.systemd = {
|
||||
storePaths = lib.mkIf config.system.etc.overlay.mutable [
|
||||
"${config.system.nixos-init.package}/bin/clear-etc-opaque"
|
||||
];
|
||||
mounts = [
|
||||
{
|
||||
where = "/run/nixos-etc-metadata";
|
||||
|
|
@ -131,13 +133,20 @@
|
|||
before = [ "initrd-fs.target" ];
|
||||
unitConfig = {
|
||||
DefaultDependencies = false;
|
||||
RequiresMountsFor = "/sysroot";
|
||||
RequiresMountsFor = [
|
||||
"/sysroot"
|
||||
# Needed so we can clear stale opaque markers from the
|
||||
# upperdir based on the contents of the new metadata layer
|
||||
# before the overlay is mounted.
|
||||
"/run/nixos-etc-metadata"
|
||||
];
|
||||
};
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = ''
|
||||
/bin/mkdir -p -m 0755 /sysroot/.rw-etc/upper /sysroot/.rw-etc/work
|
||||
'';
|
||||
ExecStart = [
|
||||
"/bin/mkdir -p -m 0755 /sysroot/.rw-etc/upper /sysroot/.rw-etc/work"
|
||||
"${config.system.nixos-init.package}/bin/clear-etc-opaque /run/nixos-etc-metadata /sysroot/.rw-etc/upper"
|
||||
];
|
||||
};
|
||||
};
|
||||
})
|
||||
|
|
|
|||
|
|
@ -285,6 +285,13 @@ in
|
|||
tmpMetadataMount=$(TMPDIR="/run" mktemp --directory -t nixos-etc-metadata.XXXXXXXXXX)
|
||||
mount --type erofs --options ro,nodev,nosuid ${config.system.build.etcMetadataImage} "$tmpMetadataMount"
|
||||
|
||||
${lib.optionalString config.system.etc.overlay.mutable ''
|
||||
# Clear stale opaque markers from the upperdir so that lowerdir
|
||||
# entries added by the new generation are not hidden.
|
||||
# See https://github.com/NixOS/nixpkgs/issues/505475
|
||||
${config.system.nixos-init.package}/bin/clear-etc-opaque "$tmpMetadataMount" /.rw-etc/upper
|
||||
''}
|
||||
|
||||
# There was no previous /etc mounted. This happens when we're called
|
||||
# directly without an initrd, like with nixos-enter.
|
||||
if ! mountpoint -q /etc; then
|
||||
|
|
|
|||
|
|
@ -51,6 +51,71 @@ let
|
|||
(lib.concatStringsSep " ")
|
||||
];
|
||||
|
||||
# Converts an IPv4 address literal to a list of bits
|
||||
parseAddr.ipv4 =
|
||||
addr:
|
||||
let
|
||||
pad = b: lib.replicate (8 - builtins.length b) 0 ++ b;
|
||||
toBin = n: pad (lib.toBaseDigits 2 (lib.toInt n));
|
||||
in
|
||||
lib.concatMap toBin (builtins.splitVersion addr);
|
||||
|
||||
# Converts an IPv6 address literal to a list of bits
|
||||
parseAddr.ipv6 =
|
||||
addr:
|
||||
let
|
||||
pad = b: lib.replicate (16 - builtins.length b) 0 ++ b;
|
||||
fromHex = n: (builtins.fromTOML "n = 0x${n}").n;
|
||||
toBin = n: pad (lib.toBaseDigits 2 (fromHex n));
|
||||
normal = (lib.network.ipv6.fromString addr).address;
|
||||
in
|
||||
lib.concatMap toBin (lib.splitString ":" normal);
|
||||
|
||||
# Checks if `addr` is part of the `net` subnet
|
||||
inSubnet =
|
||||
v: net: addr:
|
||||
let
|
||||
prefix = lib.take net.prefixLength (parseAddr.${v} net.address);
|
||||
match = lib.zipListsWith (a: b: a == b) prefix (parseAddr.${v} addr);
|
||||
in
|
||||
lib.all lib.id match;
|
||||
|
||||
# Checks if the netmask of all addresses on interface `iface` includes
|
||||
# the IP address of `gateway`
|
||||
#
|
||||
# Note: this is used to check whether networking.defaultGateway relies on
|
||||
# the given interface, either explicitly, via the `interface` (optional),
|
||||
# or explicitly, by using an address in a subnet of this interface.
|
||||
#
|
||||
# Configuration of the default gateway is then performed as part of that
|
||||
# interface setup in `configureAddrs`, below.
|
||||
isGateway =
|
||||
v: gateway: iface:
|
||||
lib.any lib.id (
|
||||
[ (iface.name == gateway.interface) ]
|
||||
++ map (net: inSubnet v net gateway.address) iface.${v}.addresses
|
||||
);
|
||||
|
||||
# Checks if `gateway` uses an address from `iface` as default source
|
||||
#
|
||||
# Note: this is needed to delay the configuration of the gateway and default
|
||||
# source until the right interfaces and address have been set up, otherwise
|
||||
# the commands will fail.
|
||||
hasSource =
|
||||
v: gateway: iface:
|
||||
builtins.elem gateway.source (map (i: i.address) iface.${v}.addresses);
|
||||
|
||||
# Interfaces corresponding to the default gateways
|
||||
gateway4Iface = builtins.filter (isGateway "ipv4" cfg.defaultGateway) interfaces;
|
||||
gateway6Iface = builtins.filter (isGateway "ipv6" cfg.defaultGateway6) interfaces;
|
||||
|
||||
# Interfaces corresponding to the default source addresses
|
||||
#
|
||||
# Note: the use of `head` here is safe because these expressions
|
||||
# are evaluated only when `needsSourceIface`, see `configureAddrs` below.
|
||||
source4Iface = builtins.head (builtins.filter (hasSource "ipv4" cfg.defaultGateway) interfaces);
|
||||
source6Iface = builtins.head (builtins.filter (hasSource "ipv6" cfg.defaultGateway6) interfaces);
|
||||
|
||||
# warn that these attributes are deprecated (2017-2-2)
|
||||
# Should be removed in the release after next
|
||||
bondDeprecation = rec {
|
||||
|
|
@ -118,121 +183,71 @@ let
|
|||
else
|
||||
optional (!config.boot.isContainer) (subsystemDevice dev);
|
||||
|
||||
hasDefaultGatewaySet =
|
||||
(cfg.defaultGateway != null && cfg.defaultGateway.address != "")
|
||||
|| (cfg.enableIPv6 && cfg.defaultGateway6 != null && cfg.defaultGateway6.address != "");
|
||||
|
||||
needNetworkSetup =
|
||||
cfg.resolvconf.enable || cfg.defaultGateway != null || cfg.defaultGateway6 != null;
|
||||
|
||||
networkLocalCommands = lib.mkIf needNetworkSetup {
|
||||
after = [ "network-setup.service" ];
|
||||
bindsTo = [ "network-setup.service" ];
|
||||
};
|
||||
|
||||
networkSetup = lib.mkIf needNetworkSetup {
|
||||
description = "Networking Setup";
|
||||
|
||||
after = [ "network-pre.target" ];
|
||||
before = [
|
||||
"network.target"
|
||||
"shutdown.target"
|
||||
];
|
||||
wants = [ "network.target" ];
|
||||
# exclude bridges from the partOf relationship to fix container networking bug #47210
|
||||
partOf = map (i: "network-addresses-${i.name}.service") (
|
||||
filter (i: !(hasAttr i.name cfg.bridges)) interfaces
|
||||
);
|
||||
conflicts = [ "shutdown.target" ];
|
||||
wantedBy = [ "multi-user.target" ] ++ optional hasDefaultGatewaySet "network-online.target";
|
||||
|
||||
unitConfig.ConditionCapability = "CAP_NET_ADMIN";
|
||||
|
||||
path = [ pkgs.iproute2 ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
|
||||
unitConfig.DefaultDependencies = false;
|
||||
|
||||
script = ''
|
||||
${optionalString config.networking.resolvconf.enable ''
|
||||
# Set the static DNS configuration, if given.
|
||||
${pkgs.openresolv}/sbin/resolvconf -m 1 -a static <<EOF
|
||||
${optionalString (cfg.nameservers != [ ] && cfg.domain != null) ''
|
||||
domain ${cfg.domain}
|
||||
''}
|
||||
${optionalString (cfg.search != [ ]) ("search " + concatStringsSep " " cfg.search)}
|
||||
${flip concatMapStrings cfg.nameservers (ns: ''
|
||||
nameserver ${ns}
|
||||
'')}
|
||||
EOF
|
||||
''}
|
||||
|
||||
# Set the default gateway
|
||||
${flip concatMapStrings
|
||||
[
|
||||
{
|
||||
version = "-4";
|
||||
gateway = cfg.defaultGateway;
|
||||
}
|
||||
{
|
||||
version = "-6";
|
||||
gateway = cfg.defaultGateway6;
|
||||
}
|
||||
]
|
||||
(
|
||||
{ version, gateway }:
|
||||
optionalString (gateway != null && gateway.address != "") ''
|
||||
${optionalString (gateway.interface != null) ''
|
||||
ip ${version} route replace ${gateway.address} proto static ${
|
||||
formatIpArgs {
|
||||
metric = gateway.metric;
|
||||
dev = gateway.interface;
|
||||
}
|
||||
}
|
||||
''}
|
||||
ip ${version} route replace default proto static ${
|
||||
formatIpArgs {
|
||||
metric = gateway.metric;
|
||||
via = gateway.address;
|
||||
window = cfg.defaultGatewayWindowSize;
|
||||
dev = gateway.interface;
|
||||
src = gateway.source;
|
||||
}
|
||||
}
|
||||
''
|
||||
)
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
# For each interface <foo>, create a job ‘network-addresses-<foo>.service"
|
||||
# that performs static address configuration. It has a "wants"
|
||||
# dependency on ‘<foo>.service’, which is supposed to create
|
||||
# the interface and need not exist (i.e. for hardware
|
||||
# interfaces). It has a binds-to dependency on the actual
|
||||
# network device, so it only gets started after the interface
|
||||
# has appeared, and it's stopped when the interface
|
||||
# disappears.
|
||||
# For each interface <foo>, creates a network-addresses-<foo>.service
|
||||
# job that performs static address configuration.
|
||||
#
|
||||
# It has a Wants dependency on <foo>-netdev.service, which creates
|
||||
# create the interface, or on a device unit (for hardware interfaces).
|
||||
# It also has a BindsTo dependency on the device unit: so, it only gets
|
||||
# started after the interface has appeared and it's stopped when the
|
||||
# interface disappears.
|
||||
#
|
||||
# Unless in a container, the job is not made part of network.target, so
|
||||
# if an interface is not found (e.g. a USB interface not plugged in) it
|
||||
# will not hang the boot sequence.
|
||||
#
|
||||
# If the interface is the default gateway, the job will also set the
|
||||
# default gateway and delay network-online.target.
|
||||
configureAddrs =
|
||||
i:
|
||||
let
|
||||
ips = interfaceIps i;
|
||||
isDefaultGateway4 = cfg.defaultGateway != null && builtins.elem i gateway4Iface;
|
||||
isDefaultGateway6 = cfg.defaultGateway6 != null && builtins.elem i gateway6Iface;
|
||||
needsSourceIface4 =
|
||||
isDefaultGateway4 && cfg.defaultGateway.source != null && i.name != source4Iface.name;
|
||||
needsSourceIface6 =
|
||||
isDefaultGateway6 && cfg.defaultGateway6.source != null && i.name != source6Iface.name;
|
||||
|
||||
configureGateway =
|
||||
version: gateway:
|
||||
optionalString (gateway.address != "") ''
|
||||
echo -n "setting ${i.name} as default IPv${version} gateway... "
|
||||
${optionalString (gateway.interface != null) ''
|
||||
ip -${version} route replace ${gateway.address} proto static ${
|
||||
formatIpArgs {
|
||||
metric = gateway.metric;
|
||||
dev = gateway.interface;
|
||||
}
|
||||
}
|
||||
''}
|
||||
ip -${version} route replace default proto static ${
|
||||
formatIpArgs {
|
||||
metric = gateway.metric;
|
||||
via = gateway.address;
|
||||
window = cfg.defaultGatewayWindowSize;
|
||||
dev = gateway.interface;
|
||||
src = gateway.source;
|
||||
}
|
||||
}
|
||||
echo "done"
|
||||
'';
|
||||
in
|
||||
nameValuePair "network-addresses-${i.name}" {
|
||||
description = "Address configuration of ${i.name}";
|
||||
wantedBy = [
|
||||
"network-setup.service"
|
||||
"network.target"
|
||||
];
|
||||
# order before network-setup because the routes that are configured
|
||||
# there may need ip addresses configured
|
||||
before = [ "network-setup.service" ];
|
||||
|
||||
wantedBy =
|
||||
deviceDependency i.name
|
||||
++ optional config.boot.isContainer "network.target"
|
||||
++ optional (isDefaultGateway4 || isDefaultGateway6) "network-online.target";
|
||||
bindsTo = deviceDependency i.name;
|
||||
after = [ "network-pre.target" ] ++ (deviceDependency i.name);
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [
|
||||
"network-pre.target"
|
||||
]
|
||||
++ optional needsSourceIface4 "network-addresses-${source4Iface.name}.service"
|
||||
++ optional needsSourceIface6 "network-addresses-${source6Iface.name}.service"
|
||||
++ deviceDependency i.name;
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
# Restart rather than stop+start this unit to prevent the
|
||||
|
|
@ -284,6 +299,10 @@ let
|
|||
fi
|
||||
''
|
||||
)}
|
||||
|
||||
# Set the default gateway
|
||||
${optionalString isDefaultGateway4 (configureGateway "4" cfg.defaultGateway)}
|
||||
${optionalString isDefaultGateway6 (configureGateway "6" cfg.defaultGateway6)}
|
||||
'';
|
||||
preStop = ''
|
||||
state="/run/nixos/network/routes/${i.name}"
|
||||
|
|
@ -311,13 +330,13 @@ let
|
|||
nameValuePair "${i.name}-netdev" {
|
||||
description = "Virtual Network Interface ${i.name}";
|
||||
bindsTo = optional (!config.boot.isContainer) "dev-net-tun.device";
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = optional (!config.boot.isContainer) "dev-net-tun.device" ++ [ "network-pre.target" ];
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice i.name)
|
||||
];
|
||||
before = [ "network-setup.service" ];
|
||||
before = [ "network.target" ];
|
||||
path = [ pkgs.iproute2 ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
|
|
@ -343,18 +362,21 @@ let
|
|||
description = "Bridge Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps ++ optional v.rstp "mstpd.service";
|
||||
partOf = [ "network-setup.service" ] ++ optional v.rstp "mstpd.service";
|
||||
partOf = [
|
||||
"network.target"
|
||||
"networking-scripted.target"
|
||||
]
|
||||
++ optional v.rstp "mstpd.service";
|
||||
after = [
|
||||
"network-pre.target"
|
||||
]
|
||||
++ deps
|
||||
++ optional v.rstp "mstpd.service"
|
||||
++ map (i: "network-addresses-${i}.service") v.interfaces;
|
||||
before = [ "network-setup.service" ];
|
||||
before = [ "network.target" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
|
|
@ -448,15 +470,14 @@ let
|
|||
description = "Open vSwitch Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
]
|
||||
++ internalConfigs;
|
||||
# before = [ "network-setup.service" ];
|
||||
# should work without internalConfigs dependencies because address/link configuration depends
|
||||
# on the device, which is created by ovs-vswitchd with type=internal, but it does not...
|
||||
before = [ "network-setup.service" ] ++ internalConfigs;
|
||||
partOf = [ "network-setup.service" ]; # shutdown the bridge when network is shutdown
|
||||
before = [ "network.target" ] ++ internalConfigs;
|
||||
partOf = [
|
||||
"network.target"
|
||||
"networking-scripted.target"
|
||||
]; # shutdown the bridge when network is shutdown
|
||||
bindsTo = [ "ovs-vswitchd.service" ]; # requires ovs-vswitchd to be alive at all times
|
||||
after = [
|
||||
"network-pre.target"
|
||||
|
|
@ -521,12 +542,12 @@ let
|
|||
description = "Bond Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [ "network-pre.target" ] ++ deps ++ map (i: "network-addresses-${i}.service") v.interfaces;
|
||||
before = [ "network-setup.service" ];
|
||||
before = [ "network.target" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [
|
||||
|
|
@ -570,12 +591,12 @@ let
|
|||
description = "MACVLAN Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network-setup.service" ];
|
||||
before = [ "network.target" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
|
|
@ -602,12 +623,12 @@ let
|
|||
description = "IPVLAN Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network-setup.service" ];
|
||||
before = [ "network.target" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
|
|
@ -647,12 +668,12 @@ let
|
|||
description = "FOU endpoint ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network-setup.service" ];
|
||||
before = [ "network.target" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
|
|
@ -677,12 +698,11 @@ let
|
|||
description = "IPv6 in IPv4 Tunnel Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network-setup.service" ];
|
||||
before = [ "network.target" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
|
|
@ -720,12 +740,12 @@ let
|
|||
description = "IP in IP Tunnel Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network-setup.service" ];
|
||||
before = [ "network.target" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
|
|
@ -768,12 +788,12 @@ let
|
|||
description = "GRE Tunnel Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network-setup.service" ];
|
||||
before = [ "network.target" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
|
|
@ -803,13 +823,15 @@ let
|
|||
description = "VLAN Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "network-setup.service" ];
|
||||
partOf = [
|
||||
"network.target"
|
||||
"networking-scripted.target"
|
||||
];
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network-setup.service" ];
|
||||
before = [ "network.target" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
|
|
@ -845,13 +867,39 @@ let
|
|||
// mapAttrs' createGreDevice cfg.greTunnels
|
||||
// mapAttrs' createVlanDevice cfg.vlans
|
||||
// {
|
||||
network-setup = networkSetup;
|
||||
network-local-commands = networkLocalCommands;
|
||||
network-local-commands = {
|
||||
after = [ "network-pre.target" ];
|
||||
wantedBy = [ "network.target" ];
|
||||
};
|
||||
};
|
||||
|
||||
services.udev.extraRules = ''
|
||||
KERNEL=="tun", TAG+="systemd"
|
||||
'';
|
||||
# Note: the scripted networking backend consistent of many
|
||||
# independent services that are linked to the network.target.
|
||||
# Since there is no daemon (e.g systemd-networkd) that is
|
||||
# started as part of the system and pulls in network.target.
|
||||
# Thus, to start these services we link network.target directly
|
||||
# to multi-user.target, this has the same result.
|
||||
systemd.targets.network.wantedBy = [ "multi-user.target" ];
|
||||
|
||||
# This target serves no purpose during the boot, but can be
|
||||
# used to quickly reset the network configuration by running
|
||||
# systemctl restart networking-scripted.target
|
||||
systemd.targets.networking-scripted = {
|
||||
description = "NixOS scripted networking setup";
|
||||
};
|
||||
|
||||
services.udev.extraRules = lib.concatStringsSep "\n" (
|
||||
[ ''KERNEL=="tun", TAG+="systemd"'' ]
|
||||
# This creates a udev rule to start each service with a WantedBy
|
||||
# dependency on a device unit. It's needed because if the service
|
||||
# unit is loaded in stage 2 but its device was already up by
|
||||
# stage 1, systemd will not automatically start it.
|
||||
++ lib.forEach (lib.attrNames cfg.interfaces) (
|
||||
iface:
|
||||
''ACTION=="add", SUBSYSTEM=="net", KERNEL=="${iface}", ''
|
||||
+ ''ENV{SYSTEMD_WANTS}="network-addresses-${iface}.service"''
|
||||
)
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -747,10 +747,9 @@ in
|
|||
default = "";
|
||||
example = "text=anything; echo You can put $text here.";
|
||||
description = ''
|
||||
Shell commands to be executed at the end of the
|
||||
`network-setup` systemd service. Note that if
|
||||
you are using DHCP to obtain the network configuration,
|
||||
interfaces may not be fully configured yet.
|
||||
Shell commands to be executed after all the network
|
||||
interfaces have been created, but not necessarily
|
||||
fully configured.
|
||||
'';
|
||||
};
|
||||
|
||||
|
|
@ -1853,6 +1852,20 @@ in
|
|||
'';
|
||||
};
|
||||
};
|
||||
|
||||
networking.localCommands = lib.mkIf config.networking.resolvconf.enable ''
|
||||
# Set the static DNS configuration, if given.
|
||||
${pkgs.openresolv}/sbin/resolvconf -m 1 -a static <<EOF
|
||||
${optionalString (cfg.nameservers != [ ] && cfg.domain != null) ''
|
||||
domain ${cfg.domain}
|
||||
''}
|
||||
${optionalString (cfg.search != [ ]) ("search " + concatStringsSep " " cfg.search)}
|
||||
${flip concatMapStrings cfg.nameservers (ns: ''
|
||||
nameserver ${ns}
|
||||
'')}
|
||||
EOF
|
||||
'';
|
||||
|
||||
services.mstpd = mkIf needsMstpd { enable = true; };
|
||||
|
||||
virtualisation.vswitch = mkIf (cfg.vswitches != { }) { enable = true; };
|
||||
|
|
|
|||
|
|
@ -157,6 +157,14 @@ in
|
|||
Whether to periodically prune Docker resources. If enabled, a
|
||||
systemd timer will run `docker system prune -f`
|
||||
as specified by the `dates` option.
|
||||
|
||||
NOTE: by default this does not prune volumes. Anonymous volumes
|
||||
can be pruned by passing "--volumes" to [autoPrune.flags](#opt-virtualisation.docker.autoPrune.flags).
|
||||
|
||||
To prune all volumes (not just anonymous ones) [`autoPrune.allVolumes.enable`](#opt-virtualisation.docker.autoPrune.allVolumes.enable)
|
||||
must be used.
|
||||
|
||||
See [upstream documentation](https://docs.docker.com/reference/cli/docker/system/prune/#description) for further information.
|
||||
'';
|
||||
};
|
||||
|
||||
|
|
@ -206,6 +214,28 @@ in
|
|||
system was powered down.
|
||||
'';
|
||||
};
|
||||
|
||||
allVolumes = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to periodically prune all Docker volumes when auto pruning other docker resources
|
||||
by running {command}`docker volume prune --force --all`
|
||||
|
||||
To prune only anonymous volumes, instead pass `--volumes` to `autoPrune.flags`
|
||||
'';
|
||||
};
|
||||
|
||||
flags = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
example = [ "--filter=label=<label>" ];
|
||||
description = ''
|
||||
Any additional flags passed to {command}`docker volume prune --force --all`.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
package = mkPackageOption pkgs "docker" { };
|
||||
|
|
@ -312,15 +342,29 @@ in
|
|||
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = utils.escapeSystemdExecArgs (
|
||||
[
|
||||
(lib.getExe cfg.package)
|
||||
"system"
|
||||
"prune"
|
||||
"-f"
|
||||
]
|
||||
++ cfg.autoPrune.flags
|
||||
);
|
||||
ExecStart = [
|
||||
(utils.escapeSystemdExecArgs (
|
||||
[
|
||||
(lib.getExe cfg.package)
|
||||
"system"
|
||||
"prune"
|
||||
"-f"
|
||||
]
|
||||
++ cfg.autoPrune.flags
|
||||
))
|
||||
]
|
||||
++ (optionals cfg.autoPrune.allVolumes.enable [
|
||||
(utils.escapeSystemdExecArgs (
|
||||
[
|
||||
(lib.getExe cfg.package)
|
||||
"volume"
|
||||
"prune"
|
||||
"--force"
|
||||
"--all"
|
||||
]
|
||||
++ cfg.autoPrune.allVolumes.flags
|
||||
))
|
||||
]);
|
||||
};
|
||||
|
||||
startAt = optional cfg.autoPrune.enable cfg.autoPrune.dates;
|
||||
|
|
@ -342,6 +386,10 @@ in
|
|||
-> config.hardware.graphics.enable32Bit or false;
|
||||
message = "Option enableNvidia on x86_64 requires 32-bit support libraries";
|
||||
}
|
||||
{
|
||||
assertion = cfg.autoPrune.allVolumes.enable -> cfg.autoPrune.enable;
|
||||
message = "Option autoPrune.allVolumes.enable requires autoPrune.enable";
|
||||
}
|
||||
];
|
||||
|
||||
virtualisation.docker.daemon.settings = {
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ let
|
|||
cfg = config.virtualisation;
|
||||
in
|
||||
{
|
||||
imports = [ ../guest-networking-options.nix ];
|
||||
|
||||
options = {
|
||||
|
||||
virtualisation.cmdline = lib.mkOption {
|
||||
|
|
|
|||
|
|
@ -101,8 +101,17 @@ def ensure_vlan_bridge(vlan: int) -> typing.Generator[str, None, None]:
|
|||
# releasing this vlan, grab an exclusive lock.
|
||||
with vlan_lock(vlan):
|
||||
if bridge_path.exists():
|
||||
child_intf_count = len(list((bridge_path / "brif").iterdir()))
|
||||
if child_intf_count == 0:
|
||||
# The VDE tap is owned by the test driver's vde_plug2tap
|
||||
# and shares its lifetime with the vlan, not with any
|
||||
# container. Don't count it when deciding whether the
|
||||
# bridge is still in use, otherwise the bridge would
|
||||
# never be deleted as long as vde_plug2tap is alive.
|
||||
child_intfs = [
|
||||
p.name
|
||||
for p in (bridge_path / "brif").iterdir()
|
||||
if p.name != tap_name
|
||||
]
|
||||
if not child_intfs:
|
||||
logger.info("deleting bridge %s", bridge_name)
|
||||
run_ip("link", "delete", bridge_name)
|
||||
|
||||
|
|
|
|||
|
|
@ -399,7 +399,6 @@ in
|
|||
imports = [
|
||||
../profiles/qemu-guest.nix
|
||||
./disk-size-option.nix
|
||||
./guest-networking-options.nix
|
||||
(mkRenamedOptionModule
|
||||
[
|
||||
"virtualisation"
|
||||
|
|
|
|||
|
|
@ -27,6 +27,12 @@
|
|||
|
||||
specialisation.new-generation.configuration = {
|
||||
environment.etc."newgen".text = "newgen";
|
||||
# Regression test for https://github.com/NixOS/nixpkgs/issues/505475:
|
||||
# A symlink in a subdirectory that does not exist in the base generation's
|
||||
# lowerdir. If something creates that subdirectory at runtime before
|
||||
# switching (e.g. stage-2-init.sh creating /etc/nixos), overlayfs makes it
|
||||
# opaque, hiding lowerdir content added by the new generation.
|
||||
environment.etc."nixos/newlink".source = pkgs.emptyDirectory;
|
||||
};
|
||||
specialisation.newer-generation.configuration = {
|
||||
environment.etc."newergen".text = "newergen";
|
||||
|
|
@ -53,6 +59,13 @@
|
|||
machine.succeed("stat --format '%F' /etc/modetest2 | tee /dev/stderr | grep -Eq '^regular file$'")
|
||||
machine.succeed("stat --format '%a' /etc/modetest2 | tee /dev/stderr | grep -Eq '^300$'")
|
||||
|
||||
with subtest("/etc/nixos created by stage-2-init is opaque in upperdir"):
|
||||
# stage-2-init.sh unconditionally runs `install -d /etc/nixos`. Since
|
||||
# /nixos is not in the lowerdir, overlayfs creates it as an opaque dir
|
||||
# in the upperdir. Verify this precondition for the regression test below.
|
||||
machine.succeed("test -d /.rw-etc/upper/nixos")
|
||||
print(machine.succeed("getfattr -h -d -m 'trusted.overlay' /.rw-etc/upper/nixos 2>&1 || true"))
|
||||
|
||||
with subtest("switching to the same generation"):
|
||||
machine.succeed("/run/current-system/bin/switch-to-configuration test")
|
||||
|
||||
|
|
@ -77,6 +90,15 @@
|
|||
assert machine.succeed("cat /etc/newgen") == "newgen"
|
||||
assert machine.succeed("cat /etc/mutable") == "mutable"
|
||||
|
||||
# Regression test for https://github.com/NixOS/nixpkgs/issues/505475:
|
||||
# The opaque /etc/nixos in the upperdir (created by stage-2-init.sh
|
||||
# before /nixos existed in the lowerdir) must not hide lowerdir entries
|
||||
# added by the new generation. The activation script must have cleared
|
||||
# the stale opaque marker.
|
||||
print(machine.succeed("ls -la /etc/nixos/"))
|
||||
machine.succeed("test -L /etc/nixos/newlink")
|
||||
machine.fail("getfattr -h -n trusted.overlay.opaque /.rw-etc/upper/nixos")
|
||||
|
||||
print(machine.succeed("findmnt /etc/mountpoint"))
|
||||
print(machine.succeed("stat /etc/mountpoint/extra-file"))
|
||||
print(machine.succeed("findmnt /etc/filemount"))
|
||||
|
|
@ -93,5 +115,23 @@
|
|||
numOfMetaMounts = len(metaMounts.splitlines())
|
||||
assert numOfTmpMounts == 0, f"Found {numOfTmpMounts} remaining tmpmounts"
|
||||
assert numOfMetaMounts == 1, f"Found {numOfMetaMounts} remaining metamounts"
|
||||
|
||||
with subtest("stale opaque markers are cleared by initrd on boot (NixOS/nixpkgs#505475)"):
|
||||
# Simulate the bug precondition: an opaque /pam.d in the upperdir.
|
||||
# /pam.d is guaranteed to exist as a directory in the metadata layer.
|
||||
machine.succeed("mkdir -p /.rw-etc/upper/pam.d")
|
||||
machine.succeed("setfattr -h -n trusted.overlay.opaque -v y /.rw-etc/upper/pam.d")
|
||||
machine.succeed("getfattr -h -n trusted.overlay.opaque /.rw-etc/upper/pam.d")
|
||||
# Also create a non-opaque upperdir directory that exists in the
|
||||
# metadata layer, to ensure clear-etc-opaque tolerates the
|
||||
# already-clear case.
|
||||
machine.succeed("mkdir -p /.rw-etc/upper/systemd")
|
||||
|
||||
# Reboot and verify the initrd rw-etc service cleared the opaque marker.
|
||||
machine.shutdown()
|
||||
machine.start()
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
machine.fail("getfattr -h -n trusted.overlay.opaque /.rw-etc/upper/pam.d")
|
||||
machine.succeed("test -e /etc/pam.d/login")
|
||||
'';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -468,6 +468,7 @@ in
|
|||
dnsdist = import ./dnsdist.nix { inherit pkgs runTest; };
|
||||
doas = runTest ./doas.nix;
|
||||
docker = runTestOn [ "aarch64-linux" "x86_64-linux" ] ./docker.nix;
|
||||
docker-autoprune = runTestOn [ "aarch64-linux" "x86_64-linux" ] ./docker-autoprune.nix;
|
||||
docker-registry = runTest ./docker-registry.nix;
|
||||
docker-rootless = runTestOn [ "aarch64-linux" "x86_64-linux" ] ./docker-rootless.nix;
|
||||
docker-tools = runTestOn [ "x86_64-linux" ] ./docker-tools.nix;
|
||||
|
|
@ -1416,7 +1417,6 @@ in
|
|||
radicale = runTest ./radicale.nix;
|
||||
radicle = runTest ./radicle.nix;
|
||||
radicle-ci-broker = runTest ./radicle-ci-broker.nix;
|
||||
ragnarwm = runTestOn [ "x86_64-linux" "aarch64-linux" ] ./ragnarwm.nix;
|
||||
rasdaemon = runTest ./rasdaemon.nix;
|
||||
rathole = runTest ./rathole.nix;
|
||||
rauc = runTest ./rauc.nix;
|
||||
|
|
@ -1770,6 +1770,7 @@ in
|
|||
vector = import ./vector { inherit runTest; };
|
||||
velocity = runTest ./velocity.nix;
|
||||
vengi-tools = runTest ./vengi-tools.nix;
|
||||
veroroute = runTest ./veroroute.nix;
|
||||
victorialogs = import ./victorialogs { inherit runTest; };
|
||||
victoriametrics = import ./victoriametrics { inherit runTest; };
|
||||
victoriatraces = import ./victoriatraces { inherit runTest; };
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
position = "start-of-file";
|
||||
}
|
||||
];
|
||||
vendorHash = "sha256-MGgFbglyW/1CMhT1b83ETH70gRkz89s/Gp4seR2g7xI=";
|
||||
vendorHash = "sha256-66WNU+t/frHfbxexYdiXzgXKLxPyLnN6JuKnlG/kSQY=";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
57
nixos/tests/docker-autoprune.nix
Normal file
57
nixos/tests/docker-autoprune.nix
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
# This test validates the docker autoprune service, testing whether
|
||||
# the default configuration cleans up images, while leaving volumes intact
|
||||
# and whether the allVolumes option enables cleaning up volumes as well
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
name = "docker";
|
||||
|
||||
nodes = {
|
||||
prune =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
virtualisation.docker = {
|
||||
enable = true;
|
||||
package = pkgs.docker;
|
||||
autoPrune = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
prunevolumes =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
virtualisation.docker = {
|
||||
enable = true;
|
||||
package = pkgs.docker;
|
||||
autoPrune = {
|
||||
enable = true;
|
||||
allVolumes.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
with subtest("Check whether autoPrune works. Volumes should be left unpruned."):
|
||||
prune.wait_for_unit("sockets.target")
|
||||
prune.succeed("docker network create testnetwork")
|
||||
prune.succeed("docker network list --format json | grep testnetwork")
|
||||
prune.succeed("docker volume create testvolume")
|
||||
prune.succeed("docker volume list --format json | grep testvolume")
|
||||
|
||||
prune.succeed("systemctl start -v docker-prune")
|
||||
prune.fail("docker network list --format json | grep testnetwork")
|
||||
# the volume has been left alone
|
||||
prune.succeed("docker volume list --format json | grep testvolume")
|
||||
|
||||
with subtest("Check whether autoPrune including volumes works"):
|
||||
prunevolumes.wait_for_unit("sockets.target")
|
||||
prunevolumes.succeed("docker volume create testvolume")
|
||||
prunevolumes.succeed("docker volume list --format json | grep testvolume")
|
||||
|
||||
prunevolumes.succeed("systemctl start -v docker-prune")
|
||||
prunevolumes.fail("docker volume list --format json | grep testvolume")
|
||||
'';
|
||||
}
|
||||
|
|
@ -77,7 +77,7 @@
|
|||
machine.send_chars("pgp_p4ssphrase")
|
||||
machine.wait_until_tty_matches("1", "Passphrases match")
|
||||
machine.send_chars("\n")
|
||||
machine.wait_until_tty_matches("1", "public and secret key created")
|
||||
machine.wait_until_tty_matches("1", "secret key created and signed")
|
||||
|
||||
with subtest("Confirm the key is in the keyring"):
|
||||
machine.wait_until_succeeds(as_alice("gpg --list-secret-keys | grep -q alice@machine"))
|
||||
|
|
@ -92,7 +92,7 @@
|
|||
|
||||
# Note: again, this needs a tty because of pinentry
|
||||
machine.send_chars("ssh-add alice\n")
|
||||
machine.wait_until_tty_matches("1", "Enter passphrase")
|
||||
machine.wait_until_tty_matches("1", "passphrase for")
|
||||
machine.send_chars("ssh_p4ssphrase\n")
|
||||
machine.wait_until_tty_matches("1", "Please enter")
|
||||
machine.send_chars("ssh_agent_p4ssphrase")
|
||||
|
|
|
|||
|
|
@ -44,17 +44,13 @@ let
|
|||
defaultGateway6 = {
|
||||
address = "fd00:1234:5678:1::1";
|
||||
interface = "enp1s0";
|
||||
source = "fd00:1234:5678:1::3";
|
||||
source = "fd00:1234:5678:1::3"; # implicit dependency on enp2s0
|
||||
};
|
||||
interfaces.enp1s0.ipv6.addresses = [
|
||||
{
|
||||
address = "fd00:1234:5678:1::2";
|
||||
prefixLength = 64;
|
||||
}
|
||||
{
|
||||
address = "fd00:1234:5678:1::3";
|
||||
prefixLength = 128;
|
||||
}
|
||||
];
|
||||
interfaces.enp1s0.ipv4.addresses = [
|
||||
{
|
||||
|
|
@ -76,6 +72,12 @@ let
|
|||
prefixLength = 24;
|
||||
}
|
||||
];
|
||||
interfaces.enp2s0.ipv6.addresses = [
|
||||
{
|
||||
address = "fd00:1234:5678:1::3";
|
||||
prefixLength = 128;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
testScript = ''
|
||||
|
|
@ -108,6 +110,41 @@ let
|
|||
client.succeed("ip -6 route show default | grep -q 'src fd00:1234:5678:1::3'")
|
||||
'';
|
||||
};
|
||||
dynamicInterface = {
|
||||
name = "dynamicInterface";
|
||||
nodes.machine = clientConfig {
|
||||
networking.interfaces.usb0 = {
|
||||
ipv6.addresses = lib.singleton {
|
||||
address = "fd::1";
|
||||
prefixLength = 127;
|
||||
};
|
||||
};
|
||||
networking.defaultGateway6 = {
|
||||
address = "fd::";
|
||||
interface = "usb0";
|
||||
source = "fd::1";
|
||||
};
|
||||
};
|
||||
testScript = ''
|
||||
with subtest("Network comes up without usb0"):
|
||||
machine.wait_for_unit("network.target")
|
||||
|
||||
with subtest("multi-user.target does not hang"):
|
||||
machine.require_unit_state("multi-user.target", "active")
|
||||
|
||||
with subtest("usb0 is configured when plugged in"):
|
||||
machine.succeed("ip link add usb0 type sit local 1.2.3.4")
|
||||
machine.wait_until_succeeds("ip addr show dev usb0 | grep -q fd::1")
|
||||
|
||||
with subtest("Network is now online"):
|
||||
machine.systemctl("start network-online.target")
|
||||
machine.require_unit_state("network-online.target", "active")
|
||||
|
||||
with subtest("Default gateway is now set"):
|
||||
machine.succeed("ip -6 route show default | grep -q 'via fd::'")
|
||||
machine.succeed("ip -6 route show default | grep -q 'src fd::1'")
|
||||
'';
|
||||
};
|
||||
routeType = {
|
||||
name = "RouteType";
|
||||
nodes.client = clientConfig {
|
||||
|
|
|
|||
|
|
@ -1737,6 +1737,16 @@ let
|
|||
enable = true;
|
||||
tokenFile = "/tmp/faketoken";
|
||||
};
|
||||
metricProvider = {
|
||||
networking = {
|
||||
# The exporter tries to access Hetzner on startup and crashes.
|
||||
# Blocking this on the firewall level allows the exporter to start.
|
||||
extraHosts = "127.0.0.1 api.hetzner.com";
|
||||
firewall.extraCommands = ''
|
||||
iptables -A OUTPUT -p tcp --dport 443 -d 127.0.0.1 -j DROP
|
||||
'';
|
||||
};
|
||||
};
|
||||
exporterTest = ''
|
||||
succeed(
|
||||
'echo faketoken > /tmp/faketoken'
|
||||
|
|
|
|||
|
|
@ -1,38 +0,0 @@
|
|||
{ lib, ... }:
|
||||
{
|
||||
name = "ragnarwm";
|
||||
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ sigmanificient ];
|
||||
};
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
./common/user-account.nix
|
||||
];
|
||||
test-support.displayManager.auto.user = "alice";
|
||||
services.displayManager.defaultSession = lib.mkForce "ragnar";
|
||||
services.xserver.windowManager.ragnarwm.enable = true;
|
||||
|
||||
# Setup the default terminal of Ragnar
|
||||
environment.systemPackages = [ pkgs.alacritty ];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
with subtest("ensure x starts"):
|
||||
machine.wait_for_x()
|
||||
machine.wait_for_file("/home/alice/.Xauthority")
|
||||
machine.succeed("xauth merge ~alice/.Xauthority")
|
||||
|
||||
with subtest("ensure we can open a new terminal"):
|
||||
# Sleeping a bit before the test, as it may help for sending keys
|
||||
machine.sleep(2)
|
||||
machine.send_key("meta_l-ret")
|
||||
machine.wait_for_window(r"alice.*?machine")
|
||||
machine.sleep(2)
|
||||
machine.screenshot("terminal")
|
||||
'';
|
||||
}
|
||||
|
|
@ -33,6 +33,6 @@
|
|||
roundcube.wait_for_unit("postgresql.target")
|
||||
roundcube.wait_for_unit("phpfpm-roundcube.service")
|
||||
roundcube.wait_for_unit("nginx.service")
|
||||
roundcube.succeed("curl -sSfL http://roundcube/ | grep 'Keep me logged in'")
|
||||
t.assertIn("Keep me logged in", roundcube.succeed("curl -sSfL http://roundcube/"))
|
||||
'';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,24 +87,42 @@ let
|
|||
# Pre-generate keys for all directory authorities
|
||||
daKeysets = lib.genAttrs daNames mkDAKeys;
|
||||
|
||||
# Read a fingerprint text file from a derivation output
|
||||
readFP = keys: file: builtins.readFile "${keys}/${file}";
|
||||
# Script that writes /run/tor/dirauth.conf by reading the DA fingerprints
|
||||
# from the pre-generated key derivations at runtime. The ${daKeysets.<name>}
|
||||
# interpolations resolve to store-path strings at evaluation time (the
|
||||
# derivations become build dependencies of the node closure), but their
|
||||
# contents are only read when the script runs on the VM, so no
|
||||
# import-from-derivation is required.
|
||||
#
|
||||
# Written into /run/tor (tor's RuntimeDirectory, which systemd bind-mounts
|
||||
# into the service's chroot at RootDirectory=/run/tor/root) so that tor
|
||||
# can read the file despite ProtectSystem=strict.
|
||||
torDirAuthExecStartPre = pkgs.writeShellScript "tor-dirauth-conf" ''
|
||||
set -eu
|
||||
{
|
||||
${lib.concatMapStringsSep "\n" (name: ''
|
||||
printf 'DirAuthority %s orport=9001 ipv6=[%s]:9001 v3ident=%s %s:80 %s\n' \
|
||||
${name} \
|
||||
'${nodeIPv6 name}' \
|
||||
"$(tr -d '\n' < ${daKeysets.${name}}/v3ident)" \
|
||||
'${nodeIP name}' \
|
||||
"$(tr -d '\n' < ${daKeysets.${name}}/relay-fingerprint)"
|
||||
'') daNames}
|
||||
} > /run/tor/dirauth.conf
|
||||
chown tor:tor /run/tor/dirauth.conf
|
||||
chmod 0400 /run/tor/dirauth.conf
|
||||
'';
|
||||
|
||||
# Build DirAuthority lines from the pre-generated keys.
|
||||
# Format: nickname orport=PORT v3ident=V3IDENT ip:dirport RELAY_FINGERPRINT
|
||||
dirAuthorityLines = lib.mapAttrsToList (
|
||||
name: keys:
|
||||
"${name} orport=9001 ipv6=[${nodeIPv6 name}]:9001 v3ident=${readFP keys "v3ident"} ${nodeIP name}:80 ${readFP keys "relay-fingerprint"}"
|
||||
) daKeysets;
|
||||
|
||||
# Tor settings shared by all node types
|
||||
# Tor settings shared by all node types. DirAuthority lines are loaded
|
||||
# from /run/tor/dirauth.conf, written by torDirAuthExecStartPre before
|
||||
# tor starts.
|
||||
commonTorSettings = {
|
||||
TestingTorNetwork = true;
|
||||
AssumeReachable = true;
|
||||
AssumeReachableIPv6 = true;
|
||||
ControlPort = 9051;
|
||||
CookieAuthentication = true;
|
||||
DirAuthority = dirAuthorityLines;
|
||||
"%include" = "/run/tor/dirauth.conf";
|
||||
};
|
||||
|
||||
# Tor settings shared by non-DA nodes (relays and exits)
|
||||
|
|
@ -277,8 +295,10 @@ let
|
|||
};
|
||||
};
|
||||
|
||||
# Arti configuration
|
||||
artiConfig = (pkgs.formats.toml { }).generate "arti.toml" {
|
||||
# Arti configuration - static parts only. The tor_network section
|
||||
# embeds fingerprints from the DA key derivations, so it is generated
|
||||
# at service startup instead (see artiNetworkConfigScript) to avoid IFD.
|
||||
artiStaticConfig = (pkgs.formats.toml { }).generate "arti.toml" {
|
||||
proxy.socks_listen = 9150;
|
||||
|
||||
storage = {
|
||||
|
|
@ -308,34 +328,36 @@ let
|
|||
guard-min-filtered-sample-size = 2;
|
||||
guard-n-primary-guards-to-use = 2;
|
||||
};
|
||||
|
||||
tor_network = {
|
||||
authorities = {
|
||||
v3idents = lib.mapAttrsToList (_: keys: readFP keys "v3ident") daKeysets;
|
||||
uploads = lib.mapAttrsToList (name: _: [
|
||||
"${nodeIP name}:80"
|
||||
"[${nodeIPv6 name}]:80"
|
||||
]) daKeysets;
|
||||
downloads = lib.mapAttrsToList (name: _: [
|
||||
"${nodeIP name}:80"
|
||||
"[${nodeIPv6 name}]:80"
|
||||
]) daKeysets;
|
||||
votes = lib.mapAttrsToList (name: _: [
|
||||
"${nodeIP name}:80"
|
||||
"[${nodeIPv6 name}]:80"
|
||||
]) daKeysets;
|
||||
};
|
||||
fallback_caches = lib.mapAttrsToList (name: keys: {
|
||||
rsa_identity = readFP keys "relay-fingerprint";
|
||||
ed_identity = readFP keys "ed25519-identity";
|
||||
orports = [
|
||||
"${nodeIP name}:9001"
|
||||
"[${nodeIPv6 name}]:9001"
|
||||
];
|
||||
}) daKeysets;
|
||||
};
|
||||
};
|
||||
|
||||
# Emit the tor_network section of the arti config at service startup,
|
||||
# reading fingerprints from the DA key derivations at runtime. The
|
||||
# ${daKeysets.<name>} interpolations resolve to store paths at
|
||||
# evaluation time (build dependencies), but their contents are only
|
||||
# read by the shell when the script runs - no import-from-derivation.
|
||||
artiNetworkConfigScript = pkgs.writeShellScript "arti-network-config" ''
|
||||
set -eu
|
||||
out=/run/arti/network.toml
|
||||
daIpPorts='[["${nodeIP "da1"}:80", "[${nodeIPv6 "da1"}]:80"], ["${nodeIP "da2"}:80", "[${nodeIPv6 "da2"}]:80"], ["${nodeIP "da3"}:80", "[${nodeIPv6 "da3"}]:80"]]'
|
||||
{
|
||||
echo '[tor_network.authorities]'
|
||||
printf 'v3idents = ["%s", "%s", "%s"]\n' \
|
||||
"$(tr -d '\n' < ${daKeysets.da1}/v3ident)" \
|
||||
"$(tr -d '\n' < ${daKeysets.da2}/v3ident)" \
|
||||
"$(tr -d '\n' < ${daKeysets.da3}/v3ident)"
|
||||
echo "uploads = $daIpPorts"
|
||||
echo "downloads = $daIpPorts"
|
||||
echo "votes = $daIpPorts"
|
||||
${lib.concatMapStringsSep "\n" (name: ''
|
||||
echo
|
||||
echo '[[tor_network.fallback_caches]]'
|
||||
printf 'rsa_identity = "%s"\n' "$(tr -d '\n' < ${daKeysets.${name}}/relay-fingerprint)"
|
||||
printf 'ed_identity = "%s"\n' "$(tr -d '\n' < ${daKeysets.${name}}/ed25519-identity)"
|
||||
echo 'orports = ["${nodeIP name}:9001", "[${nodeIPv6 name}]:9001"]'
|
||||
'') daNames}
|
||||
} > "$out"
|
||||
'';
|
||||
|
||||
# Arti client node
|
||||
mkArtiClientNode = {
|
||||
environment.systemPackages = [ pkgs.curl ];
|
||||
|
|
@ -347,7 +369,9 @@ let
|
|||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
ExecStart = "${lib.getExe pkgs.arti} proxy -c ${artiConfig}";
|
||||
RuntimeDirectory = "arti";
|
||||
ExecStartPre = artiNetworkConfigScript;
|
||||
ExecStart = "${lib.getExe pkgs.arti} proxy -c ${artiStaticConfig} -c /run/arti/network.toml";
|
||||
DynamicUser = true;
|
||||
StateDirectory = "arti";
|
||||
CacheDirectory = "arti";
|
||||
|
|
@ -359,6 +383,18 @@ in
|
|||
name = "tor";
|
||||
meta.maintainers = with lib.maintainers; [ jpds ];
|
||||
|
||||
defaults =
|
||||
{ config, ... }:
|
||||
lib.mkIf config.services.tor.enable {
|
||||
# Generate /run/tor/dirauth.conf before tor's own `--verify-config`
|
||||
# ExecStartPre runs. The `+` prefix makes this run as root in the
|
||||
# full system context so it can write into tor's RuntimeDirectory
|
||||
# and chown the file to tor:tor.
|
||||
systemd.services.tor.serviceConfig.ExecStartPre = lib.mkBefore [
|
||||
"+${torDirAuthExecStartPre}"
|
||||
];
|
||||
};
|
||||
|
||||
nodes =
|
||||
lib.genAttrs daNames mkDANode
|
||||
// lib.genAttrs relayNames mkRelayNode
|
||||
|
|
|
|||
31
nixos/tests/veroroute.nix
Normal file
31
nixos/tests/veroroute.nix
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
name = "veroroute";
|
||||
meta.maintainers = with pkgs.lib.maintainers; [ nh2 ];
|
||||
|
||||
enableOCR = true;
|
||||
|
||||
nodes.machine =
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./common/x11.nix
|
||||
];
|
||||
|
||||
services.xserver.enable = true;
|
||||
environment.systemPackages = [
|
||||
pkgs.veroroute
|
||||
pkgs.xdotool
|
||||
];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
machine.wait_for_x()
|
||||
|
||||
machine.execute("veroroute >&2 &")
|
||||
machine.wait_until_succeeds("xdotool search --pid $(pidof veroroute)")
|
||||
machine.wait_for_text("File") # menu entry renders correctly
|
||||
machine.screenshot("screen")
|
||||
'';
|
||||
}
|
||||
|
|
@ -14,5 +14,7 @@
|
|||
machine.wait_for_x()
|
||||
machine.execute("zoom >&2 &")
|
||||
machine.wait_for_window("Zoom Workplace")
|
||||
machine.sleep(20)
|
||||
machine.wait_for_window("Zoom Workplace")
|
||||
'';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,9 +16,9 @@ let
|
|||
inherit tiling_wm;
|
||||
};
|
||||
stableVersion = {
|
||||
version = "2025.3.4.6"; # "Android Studio Panda 4 | 2025.3.4"
|
||||
sha256Hash = "sha256-Mqf/CayqOLSNYciIK+5+ITAiqLoNHxbABzOA+stQn9M=";
|
||||
url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2025.3.4.6/android-studio-panda4-linux.tar.gz";
|
||||
version = "2025.3.4.7"; # "Android Studio Panda 4 | 2025.3.4 Patch 1"
|
||||
sha256Hash = "sha256-qujzMvEkr9I8pJXcdwkVpFbadIDI+FngFTWtQvy0ygY=";
|
||||
url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2025.3.4.7/android-studio-panda4-patch1-linux.tar.gz";
|
||||
};
|
||||
betaVersion = {
|
||||
version = "2025.3.4.5"; # "Android Studio Panda 4 | 2025.3.4 RC 1"
|
||||
|
|
@ -26,9 +26,9 @@ let
|
|||
url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2025.3.4.5/android-studio-panda4-rc1-linux.tar.gz";
|
||||
};
|
||||
latestVersion = {
|
||||
version = "2026.1.1.2"; # "Android Studio Quail 1 | 2026.1.1 Canary 2"
|
||||
sha256Hash = "sha256-jdbxyK7V4EJI5sCk31oo77lH6uXTM0QjljUgWn5Bl3M=";
|
||||
url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2026.1.1.2/android-studio-quail1-canary2-linux.tar.gz";
|
||||
version = "2026.1.1.5"; # "Android Studio Quail 1 | 2026.1.1 Canary 5"
|
||||
sha256Hash = "sha256-k4rM0MyTh0wnpsK8m6Hs1nSdwYpqUiQ+z7oiO6hn9YQ=";
|
||||
url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2026.1.1.5/android-studio-quail1-canary5-linux.tar.gz";
|
||||
};
|
||||
in
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,11 +28,12 @@ let
|
|||
version = attrs.version or old.version;
|
||||
__intentionallyOverridingVersion = true;
|
||||
rockspecVersion = old.rockspecVersion;
|
||||
|
||||
extraConfig = ''
|
||||
-- to create a flat hierarchy
|
||||
lua_modules_path = "lua"
|
||||
'';
|
||||
luarocksConfig = (old.luarocksConfig or { }) // {
|
||||
# to create a flat hierarchy
|
||||
lua_modules_path = "lua";
|
||||
# neovim expects C modules to also be in the lua directory
|
||||
lib_modules_path = "lua";
|
||||
};
|
||||
});
|
||||
|
||||
finalDrv = toVimPlugin (
|
||||
|
|
|
|||
|
|
@ -446,12 +446,12 @@ final: prev: {
|
|||
|
||||
SchemaStore-nvim = buildVimPlugin {
|
||||
pname = "SchemaStore.nvim";
|
||||
version = "0-unstable-2026-05-12";
|
||||
version = "0-unstable-2026-05-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "b0o";
|
||||
repo = "SchemaStore.nvim";
|
||||
rev = "afbdf2ae4391bf8639eaf9b0a5296aa4869a2b7f";
|
||||
hash = "sha256-XOvnccf9KFE4WMwsTMGsLaNN5yMy6pMw3xoEZka94Ww=";
|
||||
rev = "1c28767e3a7f3c9b7c5cc66e7f16b268c964e2c9";
|
||||
hash = "sha256-vPqMyuCNI3iTgPCkLH+TtjPO217DDFG0HIIJmUkryww=";
|
||||
};
|
||||
meta.homepage = "https://github.com/b0o/SchemaStore.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "Apache-2.0";
|
||||
|
|
@ -868,12 +868,12 @@ final: prev: {
|
|||
|
||||
ale = buildVimPlugin {
|
||||
pname = "ale";
|
||||
version = "4.0.0-unstable-2026-05-12";
|
||||
version = "4.0.0-unstable-2026-05-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "dense-analysis";
|
||||
repo = "ale";
|
||||
rev = "78122497f57d17257c77301a08ddb7562f625f7e";
|
||||
hash = "sha256-HKaQminhMI6H1/sDj/5sh2xlCoZtVL4XJVinMNxKcAo=";
|
||||
rev = "916c8764ce9d395f788eae9adf207a4bfe8a038e";
|
||||
hash = "sha256-xuNo4VOHrSnQBv6DZEMR6U3QfoBa46js+RVsE2z7Yv4=";
|
||||
};
|
||||
meta.homepage = "https://github.com/dense-analysis/ale/";
|
||||
meta.license = getLicenseFromSpdxId "BSD-2-Clause";
|
||||
|
|
@ -3904,12 +3904,12 @@ final: prev: {
|
|||
|
||||
conform-nvim = buildVimPlugin {
|
||||
pname = "conform.nvim";
|
||||
version = "9.1.0-unstable-2026-04-23";
|
||||
version = "9.1.0-unstable-2026-05-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "stevearc";
|
||||
repo = "conform.nvim";
|
||||
rev = "dca1a190aa85f9065979ef35802fb77131911106";
|
||||
hash = "sha256-pV7Yr2LSBDqKGeYoS4CWHGUSs8Yx4wsVXCXySt9yz0M=";
|
||||
rev = "18aeab3d63d350dcf44d64c462cc489a3412af40";
|
||||
hash = "sha256-+NzRZItrF344sp+xt07vKcu+EbHO1wtSGolYtIz0CP4=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
meta.homepage = "https://github.com/stevearc/conform.nvim/";
|
||||
|
|
@ -4017,12 +4017,12 @@ final: prev: {
|
|||
|
||||
copilot-lua = buildVimPlugin {
|
||||
pname = "copilot.lua";
|
||||
version = "2.0.3";
|
||||
version = "2.0.4";
|
||||
src = fetchFromGitHub {
|
||||
owner = "zbirenbaum";
|
||||
repo = "copilot.lua";
|
||||
tag = "v2.0.3";
|
||||
hash = "sha256-sYcKs46PF+j9wvP+UQ+asGUNgZHD5JLnq9KQOube0mA=";
|
||||
tag = "v2.0.4";
|
||||
hash = "sha256-+hQ4Og0ZZS/tvs4z5733qRu5+W4D24HgHHPIL5vd0Eo=";
|
||||
};
|
||||
meta.homepage = "https://github.com/zbirenbaum/copilot.lua/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -4535,12 +4535,12 @@ final: prev: {
|
|||
|
||||
ddc-source-lsp = buildVimPlugin {
|
||||
pname = "ddc-source-lsp";
|
||||
version = "1.2.0-unstable-2026-03-22";
|
||||
version = "1.2.0-unstable-2026-05-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "Shougo";
|
||||
repo = "ddc-source-lsp";
|
||||
rev = "352f804c08dbc6ce516234bb97309a5b78a1863f";
|
||||
hash = "sha256-oj+L2dy6FpOYv/j0E/tsSD0BfP9qTtWCKwrLZSsCUsc=";
|
||||
rev = "1debc85415b3175cd76b6313efda70dbb5bfdfeb";
|
||||
hash = "sha256-bzAkGV0N6HS+lQg28szTIQwFaHUIzaEmIMOdH/kio+U=";
|
||||
};
|
||||
meta.homepage = "https://github.com/Shougo/ddc-source-lsp/";
|
||||
meta.license = unfree;
|
||||
|
|
@ -5153,12 +5153,12 @@ final: prev: {
|
|||
|
||||
diffs-nvim = buildVimPlugin {
|
||||
pname = "diffs.nvim";
|
||||
version = "0.3.2";
|
||||
version = "0.3.3";
|
||||
src = fetchFromGitHub {
|
||||
owner = "barrettruth";
|
||||
repo = "diffs.nvim";
|
||||
tag = "v0.3.2";
|
||||
hash = "sha256-DZpDaQ8nV+i2k969TTo19UnBSaK5jQwzP9c/bCsRFAQ=";
|
||||
tag = "v0.3.3";
|
||||
hash = "sha256-g/kXdeNT2NLgQ+iPTI1GdlJyzvSHrcJoCLa0tPDj3gM=";
|
||||
};
|
||||
meta.homepage = "https://github.com/barrettruth/diffs.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -5349,12 +5349,12 @@ final: prev: {
|
|||
|
||||
easy-dotnet-nvim = buildVimPlugin {
|
||||
pname = "easy-dotnet.nvim";
|
||||
version = "0-unstable-2026-05-12";
|
||||
version = "0-unstable-2026-05-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "GustavEikaas";
|
||||
repo = "easy-dotnet.nvim";
|
||||
rev = "153be96f0b28090ae5f046dffda189221a387083";
|
||||
hash = "sha256-gQnO/bPH5FdOIPvet3WUAWrgAnOuxRQUtP+X4qfl8tM=";
|
||||
rev = "381f691d504ff33a578d833c159bf86c3bec95de";
|
||||
hash = "sha256-jWaEuCeLZ3E0M91NOSdDs2uTfhnk4O1ZRi/S8Cxw23Q=";
|
||||
};
|
||||
meta.homepage = "https://github.com/GustavEikaas/easy-dotnet.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -6584,11 +6584,11 @@ final: prev: {
|
|||
|
||||
gitlab-vim = buildVimPlugin {
|
||||
pname = "gitlab.vim";
|
||||
version = "1.1.0-unstable-2026-03-17";
|
||||
version = "1.1.0-unstable-2026-05-13";
|
||||
src = fetchgit {
|
||||
url = "https://gitlab.com/gitlab-org/editor-extensions/gitlab.vim";
|
||||
rev = "cb750761acf8dc17f4f1051d1b4ade6c0aaeb432";
|
||||
hash = "sha256-rhYz3Z1Dcffvo8E3390gOBcqfFclWJ19wTKwp6L/874=";
|
||||
rev = "915a6265430a578fa4a1d7f8063e9e6fabca1184";
|
||||
hash = "sha256-9dmIWXQNUEp0IfZ3nJaA5HYzDVejNZfS/ueorremBNM=";
|
||||
};
|
||||
meta.homepage = "https://gitlab.com/gitlab-org/editor-extensions/gitlab.vim";
|
||||
meta.license = unfree;
|
||||
|
|
@ -6975,12 +6975,12 @@ final: prev: {
|
|||
|
||||
guihua-lua = buildVimPlugin {
|
||||
pname = "guihua.lua";
|
||||
version = "0.1-unstable-2026-04-28";
|
||||
version = "0.1-unstable-2026-05-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "ray-x";
|
||||
repo = "guihua.lua";
|
||||
rev = "7c364432c2f9153ed068f4eab1989edd9f3fd302";
|
||||
hash = "sha256-rgxqLQf7psUtXwnFOiDBt6CpMyaAMdz2pg3PKj12IzE=";
|
||||
rev = "ae1a09035709a5952ae6f2fab742c2097c31a8f2";
|
||||
hash = "sha256-LSds5HBIex4mGL6zDSEEZT16Jd69kpEuAwQIWy7aDaA=";
|
||||
};
|
||||
meta.homepage = "https://github.com/ray-x/guihua.lua/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -7227,12 +7227,12 @@ final: prev: {
|
|||
|
||||
helpview-nvim = buildVimPlugin {
|
||||
pname = "helpview.nvim";
|
||||
version = "2.1.2-unstable-2025-09-26";
|
||||
version = "2.1.2-unstable-2026-05-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "OXY2DEV";
|
||||
repo = "helpview.nvim";
|
||||
rev = "518789535a0cb146224a428edf93a70f98b795db";
|
||||
hash = "sha256-kKTAbc1Sy2IVyWgeTAkvhgffPxJjBSdctG88eU2Gxn0=";
|
||||
rev = "0057599e169ea6ffd53fef77f279cb13b61e174a";
|
||||
hash = "sha256-F3mdFqzMZhdT0ag+d7Ze9Knv4NW9/YBGVjqRYcQpCCI=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
meta.homepage = "https://github.com/OXY2DEV/helpview.nvim/";
|
||||
|
|
@ -8208,12 +8208,12 @@ final: prev: {
|
|||
|
||||
kitty-scrollback-nvim = buildVimPlugin {
|
||||
pname = "kitty-scrollback.nvim";
|
||||
version = "9.1.0";
|
||||
version = "9.2.0";
|
||||
src = fetchFromGitHub {
|
||||
owner = "mikesmithgh";
|
||||
repo = "kitty-scrollback.nvim";
|
||||
tag = "v9.1.0";
|
||||
hash = "sha256-2OIfeY5V9xBQGatoEeZQUB1fUxdupHLBPOITzDriNPo=";
|
||||
tag = "v9.2.0";
|
||||
hash = "sha256-M/sd8lUv7leapzI3uD0VNkMAwaFhPmXsktFnHMPJz0U=";
|
||||
};
|
||||
meta.homepage = "https://github.com/mikesmithgh/kitty-scrollback.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "Apache-2.0";
|
||||
|
|
@ -8264,12 +8264,12 @@ final: prev: {
|
|||
|
||||
koda-nvim = buildVimPlugin {
|
||||
pname = "koda.nvim";
|
||||
version = "2.10.1";
|
||||
version = "2.10.2";
|
||||
src = fetchFromGitHub {
|
||||
owner = "oskarnurm";
|
||||
repo = "koda.nvim";
|
||||
tag = "v2.10.1";
|
||||
hash = "sha256-qUMAudof+WhyBuHJ0O8LcBOPybJAEVXYAmdIcHK2gP4=";
|
||||
tag = "v2.10.2";
|
||||
hash = "sha256-Um8lD0/RMvtHQLYyT5xToQzp/6bI4H7xZVnqT8CagR0=";
|
||||
};
|
||||
meta.homepage = "https://github.com/oskarnurm/koda.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -9034,12 +9034,12 @@ final: prev: {
|
|||
|
||||
lsp-overloads-nvim = buildVimPlugin {
|
||||
pname = "lsp-overloads.nvim";
|
||||
version = "2.0.2-unstable-2026-05-10";
|
||||
version = "2.0.2-unstable-2026-05-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "Issafalcon";
|
||||
repo = "lsp-overloads.nvim";
|
||||
rev = "4a9277c52455785096ddc4df13208c67fd696343";
|
||||
hash = "sha256-eVgWK7kxu8nrALPKpZrmrEhsXMzqLmx9RvcsUXDFODg=";
|
||||
rev = "1c3c4140437e0317447a9b5cd2285b9488e8c82b";
|
||||
hash = "sha256-FWld6xCSf4HcNwm+da226UMy4FSIyLaJrgLpfH8lYHk=";
|
||||
};
|
||||
meta.homepage = "https://github.com/Issafalcon/lsp-overloads.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -9173,12 +9173,12 @@ final: prev: {
|
|||
|
||||
lspsaga-nvim = buildVimPlugin {
|
||||
pname = "lspsaga.nvim";
|
||||
version = "0-unstable-2026-05-04";
|
||||
version = "0-unstable-2026-05-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "nvimdev";
|
||||
repo = "lspsaga.nvim";
|
||||
rev = "e6c04f88836d79f2fd7e46fd170e7ee986c789d4";
|
||||
hash = "sha256-aDf2JgqfxegMwzK8updAsyrwxU7HnSPtJQKzEDSTy14=";
|
||||
rev = "3e33a6a6c5d379f3d4fae77fae6b53b762a0a30f";
|
||||
hash = "sha256-hkXvv5NgW+wnbR7wGtAs+aUDv/4o/T5Mv7rGhk1qR3U=";
|
||||
};
|
||||
meta.homepage = "https://github.com/nvimdev/lspsaga.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -9454,12 +9454,12 @@ final: prev: {
|
|||
|
||||
mason-nvim = buildVimPlugin {
|
||||
pname = "mason.nvim";
|
||||
version = "2.2.1-unstable-2026-05-07";
|
||||
version = "2.2.1-unstable-2026-05-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "mason-org";
|
||||
repo = "mason.nvim";
|
||||
rev = "e54f5bf5f12c560da31c17eee5b3e1bd369f3ff9";
|
||||
hash = "sha256-rWo4W+rF7PYAHbqAaa6YSITFO2sTCiBn/ydIElkJAFw=";
|
||||
rev = "8e921c2b68571e978db5d4d3fef9c9a7f8755473";
|
||||
hash = "sha256-I+Epz266R+ZIT95gyxlKl1kCPNNSdF9FduHH87ueiyg=";
|
||||
};
|
||||
meta.homepage = "https://github.com/mason-org/mason.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "Apache-2.0";
|
||||
|
|
@ -9902,12 +9902,12 @@ final: prev: {
|
|||
|
||||
mini-files = buildVimPlugin {
|
||||
pname = "mini.files";
|
||||
version = "0.17.0-unstable-2026-05-12";
|
||||
version = "0.17.0-unstable-2026-05-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "nvim-mini";
|
||||
repo = "mini.files";
|
||||
rev = "f9f0ccbef0fd24eaddc8675accca83fa1f310c3f";
|
||||
hash = "sha256-CoaEUky+atHwBGGXdR8yNlPKjsR79iHHdMZzSpzIXqc=";
|
||||
rev = "5e0f0d264166e71d37ca35d84c54b1887ea76b40";
|
||||
hash = "sha256-PXRVOf2tGwukhqRkre5Dd2ULMAplH5utK00a2+iUz/o=";
|
||||
};
|
||||
meta.homepage = "https://github.com/nvim-mini/mini.files/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -10098,12 +10098,12 @@ final: prev: {
|
|||
|
||||
mini-nvim = buildVimPlugin {
|
||||
pname = "mini.nvim";
|
||||
version = "0.17.0-unstable-2026-05-12";
|
||||
version = "0.17.0-unstable-2026-05-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "nvim-mini";
|
||||
repo = "mini.nvim";
|
||||
rev = "17c448b0f3f29c0857a3436fc64e1d7cb9267ec3";
|
||||
hash = "sha256-AjAgXk818MQFGHJd1cCflt6Skpi1W9JSfM0cygcgp1Y=";
|
||||
rev = "18797ed18f347d0d0da27fec28a67979b1207f70";
|
||||
hash = "sha256-YkE1XwxpWukp19juZB2eIUpomybE0L9sz/+jCc/fx0k=";
|
||||
};
|
||||
meta.homepage = "https://github.com/nvim-mini/mini.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -10826,12 +10826,12 @@ final: prev: {
|
|||
|
||||
neo-tree-nvim = buildVimPlugin {
|
||||
pname = "neo-tree.nvim";
|
||||
version = "3.40.0";
|
||||
version = "3.41.0";
|
||||
src = fetchFromGitHub {
|
||||
owner = "nvim-neo-tree";
|
||||
repo = "neo-tree.nvim";
|
||||
tag = "3.40.0";
|
||||
hash = "sha256-/TNl/IX81qr7Mcoy0dhF3bcsewXEnPSy2n+dm31eyyw=";
|
||||
tag = "3.41.0";
|
||||
hash = "sha256-OVYt5QMWHRs/ivFcblHcgbqNkg+xzohG+IifPJBfY3o=";
|
||||
};
|
||||
meta.homepage = "https://github.com/nvim-neo-tree/neo-tree.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -10854,12 +10854,12 @@ final: prev: {
|
|||
|
||||
neoconf-nvim = buildVimPlugin {
|
||||
pname = "neoconf.nvim";
|
||||
version = "1.4.0-unstable-2026-05-12";
|
||||
version = "1.4.0-unstable-2026-05-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "folke";
|
||||
repo = "neoconf.nvim";
|
||||
rev = "978a10c6e26d2a566a2e491d6a2a298568af8b74";
|
||||
hash = "sha256-lIy0WwPprPyZKHYiX6ZhXJTtQ8cJBQIpVMm8Nr9GSeM=";
|
||||
rev = "eaed67d3f44a707ef6fe596e64ec8979f0c24a6e";
|
||||
hash = "sha256-83QOT8lHwdlFyHHz7pEpNk+H+Ri2WV/os3tKgBdy9Pw=";
|
||||
};
|
||||
meta.homepage = "https://github.com/folke/neoconf.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "Apache-2.0";
|
||||
|
|
@ -10938,12 +10938,12 @@ final: prev: {
|
|||
|
||||
neogit = buildVimPlugin {
|
||||
pname = "neogit";
|
||||
version = "3.0.0-unstable-2026-05-07";
|
||||
version = "3.0.0-unstable-2026-05-13";
|
||||
src = fetchFromGitHub {
|
||||
owner = "NeogitOrg";
|
||||
repo = "neogit";
|
||||
rev = "395ac481e197784e410b59b987fadaf9e7481df1";
|
||||
hash = "sha256-sioCf8OgFMnB64oWjROoVyive6Quj2OaSJLeGrd48vg=";
|
||||
rev = "99326a1310fb2d616b455d2fd16d01bf00682f06";
|
||||
hash = "sha256-ZKK4JbeuMGYvUjG1B6vLZTeSMeQTXQGFQAlIMqqN660=";
|
||||
};
|
||||
meta.homepage = "https://github.com/NeogitOrg/neogit/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -11641,12 +11641,12 @@ final: prev: {
|
|||
|
||||
nerdy-nvim = buildVimPlugin {
|
||||
pname = "nerdy.nvim";
|
||||
version = "1.6-unstable-2026-01-20";
|
||||
version = "1.6-unstable-2026-05-13";
|
||||
src = fetchFromGitHub {
|
||||
owner = "2KAbhishek";
|
||||
repo = "nerdy.nvim";
|
||||
rev = "97b0914dece80204a777f04c94b9980da0f7ac88";
|
||||
hash = "sha256-/wahSooqgIAKaHw+OfRlhF2bUxjyPwe4OEm9zK9Jcv0=";
|
||||
rev = "0fe9cc24c08a14ceb002362b07a34e481f870fae";
|
||||
hash = "sha256-ErtJlYp8uCNYREn7+rIx5b2Pm9lCnZ7dss/+CdP+b2U=";
|
||||
};
|
||||
meta.homepage = "https://github.com/2KAbhishek/nerdy.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
|
||||
|
|
@ -12882,11 +12882,11 @@ final: prev: {
|
|||
|
||||
nvim-lint = buildVimPlugin {
|
||||
pname = "nvim-lint";
|
||||
version = "05-unstable-2026-04-09";
|
||||
version = "05-unstable-2026-05-13";
|
||||
src = fetchgit {
|
||||
url = "https://codeberg.org/mfussenegger/nvim-lint/";
|
||||
rev = "eab58b48eb11d7745c11c505e0f3057165902461";
|
||||
hash = "sha256-5bVnAw7xxTntwmYYDZGt+3HOizlddqMOIyg/zqGbSEM=";
|
||||
rev = "665525810630701b84181e4d9eefd24b49845b29";
|
||||
hash = "sha256-lFMtmAVGU2HKOsImNINH9xeEiFTvrd8G2l2m5mT7cMY=";
|
||||
};
|
||||
meta.homepage = "https://codeberg.org/mfussenegger/nvim-lint/";
|
||||
meta.license = unfree;
|
||||
|
|
@ -13735,12 +13735,12 @@ final: prev: {
|
|||
|
||||
nvim-unception = buildVimPlugin {
|
||||
pname = "nvim-unception";
|
||||
version = "1.0.0-unstable-2026-04-04";
|
||||
version = "1.0.0-unstable-2026-05-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "samjwill";
|
||||
repo = "nvim-unception";
|
||||
rev = "59f9f64a7ff4c7f853d3d1a941132648059fc799";
|
||||
hash = "sha256-xaKMcgGI++yrNnmVa3h7ohLKTSkNolcr2zofuJgYRZo=";
|
||||
rev = "f14eeb22238d2c2bdafe9a2e5e1f4bd200d0e450";
|
||||
hash = "sha256-hoaguD4TWEFkgKBH+LWYR4MHTBXDK8OTtnm+4lF6r1I=";
|
||||
};
|
||||
meta.homepage = "https://github.com/samjwill/nvim-unception/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -14197,12 +14197,12 @@ final: prev: {
|
|||
|
||||
onenord-nvim = buildVimPlugin {
|
||||
pname = "onenord.nvim";
|
||||
version = "0.7.0-unstable-2025-12-25";
|
||||
version = "0.7.0-unstable-2026-05-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "rmehri01";
|
||||
repo = "onenord.nvim";
|
||||
rev = "b68f1e66736840e837c2a77ebff59c932fcb70c7";
|
||||
hash = "sha256-IjY0QUfe122oT+bQd0/iE7ZoRK59WUWrUSRgIKOvN2M=";
|
||||
rev = "8b6fe1e0f260ca0b8201ef6a8e2c97e0f38ea35d";
|
||||
hash = "sha256-iqnWSAV16m5RTHs3YeYolF+amXvHbsnkHNtVa2mBhyY=";
|
||||
};
|
||||
meta.homepage = "https://github.com/rmehri01/onenord.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -14351,12 +14351,12 @@ final: prev: {
|
|||
|
||||
overseer-nvim = buildVimPlugin {
|
||||
pname = "overseer.nvim";
|
||||
version = "2.1.0-unstable-2026-04-01";
|
||||
version = "2.1.0-unstable-2026-05-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "stevearc";
|
||||
repo = "overseer.nvim";
|
||||
rev = "f818eefff81f4b12fb7cf236f1b6c16768a2fcbc";
|
||||
hash = "sha256-f7uEyEAh+iVdtY9OtyfnmsGAN/XeCOFv30p0y493A+g=";
|
||||
rev = "3d0c7e7bbfe1a1c6f9bfecd0af8709171a97df71";
|
||||
hash = "sha256-hxVnBKiyIFtb2PkRHOlClVXSJ20Gtg2w7QzuwpiVqsQ=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
meta.homepage = "https://github.com/stevearc/overseer.nvim/";
|
||||
|
|
@ -14674,12 +14674,12 @@ final: prev: {
|
|||
|
||||
pi-nvim = buildVimPlugin {
|
||||
pname = "pi.nvim";
|
||||
version = "0-unstable-2026-05-12";
|
||||
version = "0-unstable-2026-05-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "pablopunk";
|
||||
repo = "pi.nvim";
|
||||
rev = "1922e69569fe8ca8219d7934201f00cd38a30565";
|
||||
hash = "sha256-bS+x0jbzhj3FghGSuwfvn34ty3U8RpN1x3AwQdadS1o=";
|
||||
rev = "8d13ed4a5c0c5bd8709fd1fef9773899e0bef65b";
|
||||
hash = "sha256-9Pdj66T53ZFWRWGPm6FWusugXWOvPkdAh68+/+UJ8eY=";
|
||||
};
|
||||
meta.homepage = "https://github.com/pablopunk/pi.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -14899,12 +14899,12 @@ final: prev: {
|
|||
|
||||
project-nvim = buildVimPlugin {
|
||||
pname = "project.nvim";
|
||||
version = "3.5.0-1";
|
||||
version = "4.1.0-1";
|
||||
src = fetchFromGitHub {
|
||||
owner = "DrKJeff16";
|
||||
repo = "project.nvim";
|
||||
tag = "v3.5.0-1";
|
||||
hash = "sha256-lmnduaG6jmsLPQYyhAG/MnRwVfSJ3VOjNtas0d+ry4w=";
|
||||
tag = "v4.1.0-1";
|
||||
hash = "sha256-Fb9kZ2MVTFO8fj5eDKQW3cRHz1c/7xw/fJ9LkNrI4Sw=";
|
||||
};
|
||||
meta.homepage = "https://github.com/DrKJeff16/project.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "Apache-2.0";
|
||||
|
|
@ -15082,12 +15082,12 @@ final: prev: {
|
|||
|
||||
quicker-nvim = buildVimPlugin {
|
||||
pname = "quicker.nvim";
|
||||
version = "1.5.0-unstable-2026-03-10";
|
||||
version = "1.5.0-unstable-2026-05-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "stevearc";
|
||||
repo = "quicker.nvim";
|
||||
rev = "063cc44da1eef8681bbd653b29d3bc961780886a";
|
||||
hash = "sha256-ldKDPSzv3QTZbeesRRZbHynESlrZSogdDP+zUq5mPzA=";
|
||||
rev = "1c9322b7e2967472548ba9bccd1ccd40e49d0a49";
|
||||
hash = "sha256-K1jaWpTSNCni6CgR9mlNguiPyhQ1BMjj4p3/V+6XoMA=";
|
||||
};
|
||||
meta.homepage = "https://github.com/stevearc/quicker.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -15277,12 +15277,12 @@ final: prev: {
|
|||
|
||||
refactoring-nvim = buildVimPlugin {
|
||||
pname = "refactoring.nvim";
|
||||
version = "0-unstable-2026-05-06";
|
||||
version = "0-unstable-2026-05-13";
|
||||
src = fetchFromGitHub {
|
||||
owner = "theprimeagen";
|
||||
repo = "refactoring.nvim";
|
||||
rev = "29bada48407a9e00d670207d00bbdc0c46c5dc58";
|
||||
hash = "sha256-d/browY8XA8JXDSVI0MVyCVrQc8ENaGDHEFjj6UYDho=";
|
||||
rev = "f5b54f3605d9ed709521db1827b8686dea283622";
|
||||
hash = "sha256-h2ZOwdva5f3VeZASKjq/DhBiuaZI2Ovpc/vzBMerv9g=";
|
||||
};
|
||||
meta.homepage = "https://github.com/theprimeagen/refactoring.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -15488,12 +15488,12 @@ final: prev: {
|
|||
|
||||
rose-pine = buildVimPlugin {
|
||||
pname = "rose-pine";
|
||||
version = "3.0.2-unstable-2026-04-29";
|
||||
version = "3.0.2-unstable-2026-05-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "rose-pine";
|
||||
repo = "neovim";
|
||||
rev = "6a961effd67f6130d36df6d1c05c48c739796dd2";
|
||||
hash = "sha256-Jf5jycFdPGugGjGH36owtD+27qptBDjADiam2KxQ/L4=";
|
||||
rev = "ff483051a47e27d84bdef47703538df1ed9f4a47";
|
||||
hash = "sha256-uFIave5TaC5WJj6zPrb3OBJKM/Z8tnhNoeIGaHJFym0=";
|
||||
};
|
||||
meta.homepage = "https://github.com/rose-pine/neovim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -15502,12 +15502,12 @@ final: prev: {
|
|||
|
||||
roslyn-nvim = buildVimPlugin {
|
||||
pname = "roslyn.nvim";
|
||||
version = "0-unstable-2026-04-21";
|
||||
version = "0-unstable-2026-05-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "seblyng";
|
||||
repo = "roslyn.nvim";
|
||||
rev = "b62d1a588765f0aa1b46ed260252c9e456408835";
|
||||
hash = "sha256-j5+Kg4B1flk4TwkZKRDW7tHbaoUyE5dKGypXsd9+qSw=";
|
||||
rev = "90d43d35f0ebb5ecf1df734194cb568a162de4cb";
|
||||
hash = "sha256-McG9zWKxX+f6IeHK9x/fEQmnWNILuv3WOZmYKf/Ghh8=";
|
||||
};
|
||||
meta.homepage = "https://github.com/seblyng/roslyn.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -15669,12 +15669,12 @@ final: prev: {
|
|||
|
||||
schema-companion-nvim = buildVimPlugin {
|
||||
pname = "schema-companion.nvim";
|
||||
version = "0-unstable-2026-04-05";
|
||||
version = "0-unstable-2026-05-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "cenk1cenk2";
|
||||
repo = "schema-companion.nvim";
|
||||
rev = "bcccfe46a1796f86b81dc3be6ab80ece3664d3b2";
|
||||
hash = "sha256-NpucvX0HBCu779Uk6qwBnjEp2RP6djlk6+GL+kGTlgM=";
|
||||
rev = "375f98a3aa8c9c0a0991dd0161089daa3e027742";
|
||||
hash = "sha256-o4jOp22xZRSaRfWvp1oSLlCLZPSzD28Hfa0x+Hopb0o=";
|
||||
};
|
||||
meta.homepage = "https://github.com/cenk1cenk2/schema-companion.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -23451,12 +23451,12 @@ final: prev: {
|
|||
|
||||
vim-sexp = buildVimPlugin {
|
||||
pname = "vim-sexp";
|
||||
version = "0-unstable-2026-05-10";
|
||||
version = "0-unstable-2026-05-13";
|
||||
src = fetchFromGitHub {
|
||||
owner = "guns";
|
||||
repo = "vim-sexp";
|
||||
rev = "0284743c84bebaf04b4862743f692718a3774d30";
|
||||
hash = "sha256-h2xeox9wJoHpYQtbegCPYxqfLDdA8Qo7g27NoLf4IEY=";
|
||||
rev = "2328c1b7236eec847e0ee9abda0ae83a0a77dea9";
|
||||
hash = "sha256-letPTt+fWw51eA/+JkGZ4OuPKyZY2RGJtIF1ekMn+9s=";
|
||||
};
|
||||
meta.homepage = "https://github.com/guns/vim-sexp/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -23772,12 +23772,12 @@ final: prev: {
|
|||
|
||||
vim-spirv = buildVimPlugin {
|
||||
pname = "vim-spirv";
|
||||
version = "0.5.2-unstable-2026-04-30";
|
||||
version = "0.5.2-unstable-2026-05-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "kbenzie";
|
||||
repo = "vim-spirv";
|
||||
rev = "6fab3521a18b2a3ba3ad59cbad5c05e1e0e9744d";
|
||||
hash = "sha256-FiaQLxqANOOwTdlZgRSxrD0uCJHA5zHDnnrurctMFW8=";
|
||||
rev = "bdd077d8720bd87923408d3a38cd90de634d1e54";
|
||||
hash = "sha256-af0NSvJVv22BNxzPWxsSfEqoY4VlrDX7Ico+VAoVuxU=";
|
||||
};
|
||||
meta.homepage = "https://github.com/kbenzie/vim-spirv/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
@ -24401,12 +24401,12 @@ final: prev: {
|
|||
|
||||
vim-twiggy = buildVimPlugin {
|
||||
pname = "vim-twiggy";
|
||||
version = "0.4-unstable-2022-01-10";
|
||||
version = "0.4-unstable-2026-05-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "sodapopcan";
|
||||
repo = "vim-twiggy";
|
||||
rev = "7a2161991722a811c4ff06b3ce0119dd180729fd";
|
||||
hash = "sha256-3my/0EOsuB4MBAJQDflIAHg3/Rd7wkk0nW6yqElQY7o=";
|
||||
rev = "32a2b9a0222fa6afd374c8345f7cfa305f3b1655";
|
||||
hash = "sha256-Q3XJIkKruQOotJjWBNyZ/pTfUbiqB/YbR9d9ojFEx/w=";
|
||||
};
|
||||
meta.homepage = "https://github.com/sodapopcan/vim-twiggy/";
|
||||
meta.license = unfree;
|
||||
|
|
@ -25284,15 +25284,15 @@ final: prev: {
|
|||
|
||||
whitespace-nvim = buildVimPlugin {
|
||||
pname = "whitespace.nvim";
|
||||
version = "0.4.2";
|
||||
version = "0.5.0";
|
||||
src = fetchFromGitHub {
|
||||
owner = "johnfrankmorgan";
|
||||
repo = "whitespace.nvim";
|
||||
tag = "0.4.2";
|
||||
hash = "sha256-9Dtf6x2daQ6bP7qq6jKiDY8RpKNG03r1z8AzqM6/Oaw=";
|
||||
tag = "0.5.0";
|
||||
hash = "sha256-d+jbLU5N4qJ4WzPPHWZWPTesZ++h6TiYc5z5sYlbDgE=";
|
||||
};
|
||||
meta.homepage = "https://github.com/johnfrankmorgan/whitespace.nvim/";
|
||||
meta.license = unfree;
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
|
|
@ -25663,12 +25663,12 @@ final: prev: {
|
|||
|
||||
yazi-nvim = buildVimPlugin {
|
||||
pname = "yazi.nvim";
|
||||
version = "13.1.5-unstable-2026-05-12";
|
||||
version = "13.1.5-unstable-2026-05-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "mikavilpas";
|
||||
repo = "yazi.nvim";
|
||||
rev = "25f370e6e84ca7ebca5927ec66cd93e2fa16fd3d";
|
||||
hash = "sha256-togJQq+HhpkqZJD4GZ9F9NNjulur+sbcUB3PulmQvLU=";
|
||||
rev = "09d8ce930b48ea6724e94bff6dbb578304e0b478";
|
||||
hash = "sha256-rGDM4CNLQI7PxqfiJVHHiU3Y99aeWWvmq96330nEOYQ=";
|
||||
};
|
||||
meta.homepage = "https://github.com/mikavilpas/yazi.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
|
|
|
|||
|
|
@ -13,18 +13,18 @@
|
|||
writableTmpDirAsHomeHook,
|
||||
}:
|
||||
let
|
||||
version = "0.6.4";
|
||||
version = "0.8.0";
|
||||
src = fetchFromGitHub {
|
||||
owner = "dmtrKovalenko";
|
||||
repo = "fff.nvim";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-vu5yqOvVAPXHMi8sZFQuH9rNsFDffh3Ja74Be0Cs64c=";
|
||||
hash = "sha256-JbV2dTQhTyZgDZYvFoR1mz9CeM2IPv59Qmp2iiJC8a0=";
|
||||
};
|
||||
fff-nvim-lib = rustPlatform.buildRustPackage {
|
||||
pname = "fff-nvim-lib";
|
||||
inherit version src;
|
||||
|
||||
cargoHash = "sha256-w6KwiE0rAT00fiRa1rT8uthVgcMB7EFGoG3+M5MYEBo=";
|
||||
cargoHash = "sha256-L/Ens/wzw/jKaa1T3A2pLIBKs09saPEk/0bRhgRezPQ=";
|
||||
|
||||
cargoBuildFlags = [
|
||||
"-p"
|
||||
|
|
@ -45,8 +45,14 @@ let
|
|||
perl
|
||||
rustPlatform.bindgenHook
|
||||
writableTmpDirAsHomeHook
|
||||
zig
|
||||
];
|
||||
|
||||
dontUseZigConfigure = true;
|
||||
dontUseZigBuild = true;
|
||||
dontUseZigCheck = true;
|
||||
dontUseZigInstall = true;
|
||||
|
||||
# Some tests need git
|
||||
nativeCheckInputs = [ gitMinimal ];
|
||||
|
||||
|
|
@ -69,8 +75,6 @@ let
|
|||
|
||||
# Allow undefined symbols on Darwin - they will be provided by Neovim's LuaJIT runtime
|
||||
RUSTFLAGS = lib.optionalString stdenv.hostPlatform.isDarwin "-C link-arg=-undefined -C link-arg=dynamic_lookup";
|
||||
|
||||
ZIG = lib.getExe zig; # zlob requires zig
|
||||
};
|
||||
};
|
||||
in
|
||||
|
|
|
|||
|
|
@ -21,26 +21,26 @@ vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
|
|||
sources = {
|
||||
"x86_64-linux" = {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-av844ENiMjenpHu5HOFHotAZ2OcZETpuxhfrKW/GYRk=";
|
||||
hash = "sha256-pGJ1coic0kdjXUI6HCEkQsyQC5YU0jnA1hmN6MaPfwg=";
|
||||
};
|
||||
"aarch64-linux" = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-LKGZ2TWJWVhn2D6NmQFszB3B/kf3FJd6+PR6ZZ2r1Hc=";
|
||||
hash = "sha256-NppbZ/gCZYGZna8bs/nUASxyqd6Bv0AOYTEbfaqJWyI=";
|
||||
};
|
||||
"x86_64-darwin" = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-n/wWN6SeRPUTX2X/0eXDRUy4UM0nYT3Yk8gVxy4wyXc=";
|
||||
hash = "sha256-oM2H7CJBS0G8ieiI6twqpA257QWWytdbpkV2Q2D7R6o=";
|
||||
};
|
||||
"aarch64-darwin" = {
|
||||
arch = "darwin-arm64";
|
||||
hash = "sha256-oW16SY7D7q6/3PyWSBz04/JU1T8x6DnIkTe3+T/RSzY=";
|
||||
hash = "sha256-lRChL8hGIc4zJ/CBwPkLYY1U5YhfM0DrW//C1dNi//A=";
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
name = "claude-code";
|
||||
publisher = "anthropic";
|
||||
version = "2.1.140";
|
||||
version = "2.1.141";
|
||||
}
|
||||
// sources.${stdenvNoCC.hostPlatform.system}
|
||||
or (throw "Unsupported system ${stdenvNoCC.hostPlatform.system}");
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ let
|
|||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=adzero.vscode-sievehighlight";
|
||||
homepage = "https://github.com/adzero/vscode-sievehighlight";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.sebtm ];
|
||||
maintainers = [ ];
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -413,8 +413,8 @@ let
|
|||
mktplcRef = {
|
||||
name = "vscode-neovim";
|
||||
publisher = "asvetliakov";
|
||||
version = "1.18.24";
|
||||
hash = "sha256-oqsqcB2i8zS2pBElTFHh/diffTLFE9IRDjcQv/IcMgU=";
|
||||
version = "1.19.0";
|
||||
hash = "sha256-PTuOqbvhN2lutShMn76uxune/gd5sTc5KSfA2xLhmH8=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/asvetliakov.vscode-neovim/changelog";
|
||||
|
|
@ -797,7 +797,7 @@ let
|
|||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=BrandonKirbyson.solarized-palenight";
|
||||
homepage = "https://github.com/BrandonKirbyson/Solarized-Palenight";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.sebtm ];
|
||||
maintainers = [ ];
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -1145,8 +1145,8 @@ let
|
|||
mktplcRef = {
|
||||
name = "vscode-database-client2";
|
||||
publisher = "cweijan";
|
||||
version = "8.4.5";
|
||||
hash = "sha256-CViXcQ8k4eTd5adFvSK4cCFJDRov09wK80QBveziom4=";
|
||||
version = "8.4.6";
|
||||
hash = "sha256-GBz0hS75VgfuGuHY/K/VHxp5sFptUCJaz/CXrm6wFPc=";
|
||||
};
|
||||
meta = {
|
||||
description = "Database Client For Visual Studio Code";
|
||||
|
|
@ -1174,8 +1174,8 @@ let
|
|||
mktplcRef = {
|
||||
publisher = "DanielSanMedium";
|
||||
name = "dscodegpt";
|
||||
version = "3.17.36";
|
||||
hash = "sha256-7+Ja5/zeGq+W1aCIzZu0x+CU1ERwZhwvOaZKaGSWK4c=";
|
||||
version = "3.20.6";
|
||||
hash = "sha256-QDs+zi2Kb2APYxZOzvBnrEZqlmhzNFmQ3bpSfIaPjlc=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/DanielSanMedium.dscodegpt/changelog";
|
||||
|
|
@ -1226,8 +1226,8 @@ let
|
|||
mktplcRef = {
|
||||
name = "databricks";
|
||||
publisher = "databricks";
|
||||
version = "2.10.6";
|
||||
hash = "sha256-6D8QRH8x2LCZehkkaKf3s3yKzmAkiBg9gFaUCIzGJB4=";
|
||||
version = "2.10.7";
|
||||
hash = "sha256-ODAUmYiomllLMGbncU4T+8SfLZnhULggFB6Mfw7vn1o=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/databricks.databricks/changelog";
|
||||
|
|
@ -1760,8 +1760,8 @@ let
|
|||
mktplcRef = {
|
||||
name = "foam-vscode";
|
||||
publisher = "foam";
|
||||
version = "0.40.3";
|
||||
hash = "sha256-NGC6uW1biseqQ04fD3K4mK4D4rcGVqt0LBlGFC1Exu8=";
|
||||
version = "0.40.4";
|
||||
hash = "sha256-WqFIWt3c3XtdsXys+V4tQWxzDMefYOQ88MzTSPDHOKE=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/foam.foam-vscode/changelog";
|
||||
|
|
@ -1998,8 +1998,8 @@ let
|
|||
mktplcRef = {
|
||||
name = "gitlab-workflow";
|
||||
publisher = "gitlab";
|
||||
version = "6.75.3";
|
||||
hash = "sha256-UrcrHL46ZtQl6Zazec/2rkZLtnPK9BsmyT+9nhTncsA=";
|
||||
version = "6.78.1";
|
||||
hash = "sha256-N6M8HLSpnfUqMaPaWZuedWbA7ITwKhLS1n+uuwudpkU=";
|
||||
};
|
||||
meta = {
|
||||
description = "GitLab extension for Visual Studio Code";
|
||||
|
|
@ -2570,8 +2570,8 @@ let
|
|||
mktplcRef = {
|
||||
publisher = "jnoortheen";
|
||||
name = "nix-ide";
|
||||
version = "0.5.5";
|
||||
hash = "sha256-epdEMPAkSo0IXsd+ozicI8bjPPquDKIzB3ONRUYWwn8=";
|
||||
version = "0.5.9";
|
||||
hash = "sha256-hPOcp6Yksgfu1+In21/gJ3MthV8JUV5WaRpYHvo5GGk=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/jnoortheen.nix-ide/changelog";
|
||||
|
|
@ -3239,6 +3239,8 @@ let
|
|||
|
||||
ms-python.vscode-pylance = callPackage ./ms-python.vscode-pylance { };
|
||||
|
||||
ms-python.vscode-python-envs = callPackage ./ms-python.vscode-python-envs { };
|
||||
|
||||
ms-toolsai.datawrangler = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "datawrangler";
|
||||
|
|
@ -3707,6 +3709,8 @@ let
|
|||
|
||||
oracle.oracle-java = callPackage ./oracle.oracle-java { };
|
||||
|
||||
oxc.oxc-vscode = callPackage ./oxc.oxc-vscode { };
|
||||
|
||||
ph-hawkins.arc-plus = callPackage ./ph-hawkins.arc-plus { };
|
||||
|
||||
phind.phind = buildVscodeMarketplaceExtension {
|
||||
|
|
@ -4218,8 +4222,8 @@ let
|
|||
mktplcRef = {
|
||||
publisher = "shd101wyy";
|
||||
name = "markdown-preview-enhanced";
|
||||
version = "0.8.25";
|
||||
hash = "sha256-0yOtvHL24eJizmzXAC956Tx9eNJaWDPl/OAhmFv2KJk=";
|
||||
version = "0.8.26";
|
||||
hash = "sha256-OZMUHqc8l8BrpLONlOIeImnsJVa0TLN1R51ulQ5n8h4=";
|
||||
};
|
||||
meta = {
|
||||
description = "Provides a live preview of markdown using either markdown-it or pandoc";
|
||||
|
|
@ -4357,8 +4361,8 @@ let
|
|||
mktplcRef = {
|
||||
publisher = "sonarsource";
|
||||
name = "sonarlint-vscode";
|
||||
version = "5.2.1";
|
||||
hash = "sha256-GVuFP0n2Su6YAh/KwtkEFvZK9hAyVDIWfoBjaPQyUFM=";
|
||||
version = "5.2.3";
|
||||
hash = "sha256-HSQjoYIQa8CVw6Fjb3H+et6U3urptNjrIT8HLgHirxA=";
|
||||
};
|
||||
meta.license = lib.licenses.lgpl3Only;
|
||||
};
|
||||
|
|
@ -4863,8 +4867,8 @@ let
|
|||
mktplcRef = {
|
||||
name = "uiua-vscode";
|
||||
publisher = "uiua-lang";
|
||||
version = "0.0.68";
|
||||
hash = "sha256-5qzMT7aue8PO4mpMsoBc/18J7yhxrmKwA+KE+LeK0mU=";
|
||||
version = "0.0.69";
|
||||
hash = "sha256-wP2Mw4K0Fh4xKaffzl1OwrWnWu6npZ2PyVDaT5LUeeY=";
|
||||
};
|
||||
meta = {
|
||||
description = "VSCode language extension for Uiua";
|
||||
|
|
@ -5106,8 +5110,8 @@ let
|
|||
mktplcRef = {
|
||||
publisher = "vscjava";
|
||||
name = "vscode-java-dependency";
|
||||
version = "0.27.2";
|
||||
hash = "sha256-1ix/MtZ801uX0Q1/t+S6AG3sSkILDugouecOq9BO1IQ=";
|
||||
version = "0.27.3";
|
||||
hash = "sha256-8ZkdAZLplf9RI5sFGqsjVMlsletck/qXJ6D1Dxz9AuI=";
|
||||
};
|
||||
meta = {
|
||||
license = lib.licenses.mit;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
}:
|
||||
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-python-envs";
|
||||
publisher = "ms-python";
|
||||
version = "1.33.2026051501";
|
||||
hash = "sha256-V5anlwzLt0V08HsO6TCBIUPD3VPhyohg7YnSc/1++GE=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Provides a unified python environment experience";
|
||||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-python-envs";
|
||||
homepage = "https://github.com/microsoft/vscode-python-environments";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [
|
||||
Zocker1999NET
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
@ -1,9 +1,8 @@
|
|||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
jq,
|
||||
buildPackages,
|
||||
python3,
|
||||
moreutils,
|
||||
}:
|
||||
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
|
|
@ -16,7 +15,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
|||
|
||||
postInstall = ''
|
||||
cd "$out/$installPrefix"
|
||||
${lib.getExe jq} '.contributes.configuration.properties."scheme-fmt.pythonPath".default = "${lib.getExe python3}"' package.json | ${lib.getExe' moreutils "sponge"} package.json
|
||||
${lib.getExe buildPackages.jq} '.contributes.configuration.properties."scheme-fmt.pythonPath".default = "${lib.getExe python3}"' package.json | ${lib.getExe' buildPackages.moreutils "sponge"} package.json
|
||||
'';
|
||||
|
||||
meta = {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
jaq,
|
||||
moreutils,
|
||||
oxlint,
|
||||
oxfmt,
|
||||
}:
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
publisher = "oxc";
|
||||
name = "oxc-vscode";
|
||||
version = "1.55.0";
|
||||
hash = "sha256-QAuN9Qe1AErcGIbbqsYYO6kikgaEiX0Y3ddnNhuOB6Q=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
jaq
|
||||
moreutils
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
jaq \
|
||||
--arg oxlint "${lib.getExe oxlint}" \
|
||||
--arg oxfmt "${lib.getExe oxfmt}" \
|
||||
'
|
||||
.contributes.configuration.properties."oxc.path.oxlint".default = $oxlint |
|
||||
.contributes.configuration.properties."oxc.path.oxfmt".default = $oxfmt
|
||||
' package.json | sponge package.json
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Oxlint and Oxfmt editor integration";
|
||||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=oxc.oxc-vscode";
|
||||
homepage = "https://github.com/oxc-project/oxc-vscode";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.drupol ];
|
||||
};
|
||||
}
|
||||
|
|
@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
|||
mktplcRef = {
|
||||
name = "claude-dev";
|
||||
publisher = "saoudrizwan";
|
||||
version = "3.82.0";
|
||||
hash = "sha256-+CtWfRGumMTFckmU9Z8TAwrn35WiUrri1x6XL9khOnM=";
|
||||
version = "3.83.0";
|
||||
hash = "sha256-d9b8mXi/PI87T9J67yzI2yID7hhd6OPdM2+Na3I5Wg8=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
writeShellScriptBin,
|
||||
fetchurl,
|
||||
vscode,
|
||||
buildPackages,
|
||||
unzip,
|
||||
makeSetupHook,
|
||||
writeScript,
|
||||
|
|
@ -15,7 +16,7 @@ let
|
|||
unpackVsixSetupHook = makeSetupHook {
|
||||
name = "unpack-vsix-setup-hook";
|
||||
substitutions = {
|
||||
unzip = "${unzip}/bin/unzip";
|
||||
unzip = "${buildPackages.unzip}/bin/unzip";
|
||||
};
|
||||
} ./unpack-vsix-setup-hook.sh;
|
||||
buildVscodeExtension = lib.extendMkDerivation {
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "mednafen-pce-fast";
|
||||
version = "0-unstable-2026-05-01";
|
||||
version = "0-unstable-2026-05-16";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "beetle-pce-fast-libretro";
|
||||
rev = "9ba79648d6ec85e833aef719d7f359117498d89c";
|
||||
hash = "sha256-VSZelshWjMxIe8sumNZZ6WHm1WTE9r2xm62og0YLGlY=";
|
||||
rev = "82cbe149648969fa55d60b955d455f15fd125b1d";
|
||||
hash = "sha256-odOMCxLl2fCBdalnW/ykOeVmB+G8N/lGbZqCTr2mdow=";
|
||||
};
|
||||
|
||||
makefile = "Makefile";
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "gambatte";
|
||||
version = "0-unstable-2026-04-24";
|
||||
version = "0-unstable-2026-05-12";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "gambatte-libretro";
|
||||
rev = "5ba6bd1ad745e04b7069d0eb2b44091364fc997a";
|
||||
hash = "sha256-A9OQx0eXVgrGcmpMTtTe97rHCjrV3Ksi/ooLefsysbQ=";
|
||||
rev = "4c1b4c26c8db94663196bad187b58fe8e9162b4f";
|
||||
hash = "sha256-uJoHwHJ2KtNk83eEDdWPPxAViMCp8bVq06wsBxQZEPw=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
|
|
|||
|
|
@ -12,13 +12,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "mupen64plus-next";
|
||||
version = "0-unstable-2026-04-02";
|
||||
version = "0-unstable-2026-05-12";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "mupen64plus-libretro-nx";
|
||||
rev = "58b9daf940fb43f09c3984c6a7c730f4b4c24861";
|
||||
hash = "sha256-9d1gbDDK2rOt/a9NNRQVJJmiE+UdohM/yPI5WstNmtA=";
|
||||
rev = "8cdfadf266a784cd1849f7fef8adae2912240b18";
|
||||
hash = "sha256-37A9ScN8jRX1i2aocyNr3VAJsJ7xoMsmzVgPILpoqmQ=";
|
||||
};
|
||||
|
||||
# Fix for GCC 14
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore rec {
|
||||
core = "np2kai";
|
||||
version = "0-unstable-2026-04-01";
|
||||
version = "0-unstable-2026-05-09";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "AZO234";
|
||||
repo = "NP2kai";
|
||||
rev = "cbadd7572e0b13de0c0c011a86758ca4dc4a74ae";
|
||||
hash = "sha256-4p5SpXgGzfj2lc+0yAgwrRLDkYWrIkZi+XREQpNhdKA=";
|
||||
rev = "eebb95c060f82df45a5615be676c3fa4b7bb7ae0";
|
||||
hash = "sha256-KBvxqxCeYyIKCTHdcczwpgHBIZds6xMfHt6LblRRoFc=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "pcsx-rearmed";
|
||||
version = "0-unstable-2026-04-25";
|
||||
version = "0-unstable-2026-05-15";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "pcsx_rearmed";
|
||||
rev = "a97efbb0646dd7766bd66fe9e93118206edec36a";
|
||||
hash = "sha256-2MAj/UdEg/kRZuGZcVQ+hBMe2pRlZWvEQnXeqb+444Y=";
|
||||
rev = "c88070df8e0e84106ecc4b6394860a413a7bc046";
|
||||
hash = "sha256-ZngYExWmL4NlmSfaRbTpSthNY1QRwKXtSiSX8zS/teo=";
|
||||
};
|
||||
|
||||
dontConfigure = true;
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "stella";
|
||||
version = "0-unstable-2026-04-28";
|
||||
version = "0-unstable-2026-05-16";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "stella-emu";
|
||||
repo = "stella";
|
||||
rev = "0c1b944387b5ac2b1bf753c2c4221db4fdc10f79";
|
||||
hash = "sha256-mohkp6oOP8MtRs/WHw4Rxs3FrB6h4X6/ENrRdjiiXlQ=";
|
||||
rev = "03dbb069fd2d6fee0d58c5d96077bdf9c686a1e2";
|
||||
hash = "sha256-BiyicKZsoRXd/w0U2uvCjd0E3gzNvfNPbAt34nGdXdw=";
|
||||
};
|
||||
|
||||
makefile = "Makefile";
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "tgbdual";
|
||||
version = "0-unstable-2026-04-20";
|
||||
version = "0-unstable-2026-05-11";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "tgbdual-libretro";
|
||||
rev = "12540f0b2d3783259a0dce34ac8aa7a86beeaa11";
|
||||
hash = "sha256-l+WiFC5GxbdY9ulmtdqd2iKU7qKoVWqcf4YR/waSVhQ=";
|
||||
rev = "bf816b096f1dca55ea805337d7c9e78d6b98d839";
|
||||
hash = "sha256-HpvgFN37lPZpJqwUdM8qFSGcqUkYsqSCKCLMFHD6ggM=";
|
||||
};
|
||||
|
||||
makefile = "Makefile";
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
stdenv,
|
||||
lib,
|
||||
callPackage,
|
||||
installFonts,
|
||||
}:
|
||||
let
|
||||
src = (callPackage ./sources.nix { }).stable;
|
||||
|
|
@ -13,9 +14,9 @@ stdenv.mkDerivation {
|
|||
sourceRoot = "wine-${src.version}/fonts";
|
||||
inherit src;
|
||||
|
||||
installPhase = ''
|
||||
install *.ttf -Dt $out/share/fonts/wine
|
||||
'';
|
||||
nativeBuildInputs = [
|
||||
installFonts
|
||||
];
|
||||
|
||||
meta = {
|
||||
description = "Microsoft replacement fonts by the Wine project";
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ let
|
|||
];
|
||||
in
|
||||
mkDerivation rec {
|
||||
version = "3.44.9";
|
||||
version = "3.44.10";
|
||||
pname = "qgis-ltr-unwrapped";
|
||||
outputs = [ "out" ] ++ lib.optional (!stdenv.hostPlatform.isDarwin) "man";
|
||||
|
||||
|
|
@ -93,7 +93,7 @@ mkDerivation rec {
|
|||
owner = "qgis";
|
||||
repo = "QGIS";
|
||||
rev = "final-${lib.replaceStrings [ "." ] [ "_" ] version}";
|
||||
hash = "sha256-aeTWjzYRCKcgdB9sknrcqO5oWEuwU7OuvrvAi8W4bWE=";
|
||||
hash = "sha256-wWLbnZpLIchm0NXuU7jEXCBctrI6G1z8iqf9R2YhS8Y=";
|
||||
};
|
||||
|
||||
passthru = {
|
||||
|
|
|
|||
|
|
@ -89,14 +89,14 @@ let
|
|||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "qgis-unwrapped";
|
||||
version = "4.0.1";
|
||||
version = "4.0.2";
|
||||
outputs = [ "out" ] ++ lib.optional (!stdenv.hostPlatform.isDarwin) "man";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "qgis";
|
||||
repo = "QGIS";
|
||||
rev = "final-${lib.replaceStrings [ "." ] [ "_" ] version}";
|
||||
hash = "sha256-pH48EhH2kmlscFPYiLStGIqXrmO9zgpidtkWVf1K5Mo=";
|
||||
hash = "sha256-4tQ7Jv03/S6+xt3NU7jZLsZk3rQyaj+XsVnpCWW1uqg=";
|
||||
};
|
||||
|
||||
passthru = {
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ stdenv.mkDerivation rec {
|
|||
install -Dpm755 -D diffpdf $out/bin/diffpdf
|
||||
install -Dpm644 -D diffpdf.1 $out/share/man/man1/diffpdf.1
|
||||
|
||||
install -dpm755 $out/share/doc/${pname}-${version} $out/share/licenses/${pname}-${version} $out/share/icons $out/share/pixmaps $out/share/applications
|
||||
install -dpm755 $out/share/doc/${pname}-${version} $out/share/licenses/${pname}-${version} $out/share/icons $out/share/applications
|
||||
install -Dpm644 CHANGES README help.html $out/share/doc/${pname}-${version}/
|
||||
install -Dpm644 gpl-2.0.txt $out/share/licenses/${pname}-${version}/
|
||||
install -Dpm644 images/icon.png $out/share/icons/hicolor/64x64/apps/diffpdf.png
|
||||
|
|
@ -67,7 +67,7 @@ stdenv.mkDerivation rec {
|
|||
Name=diffpdf
|
||||
Icon=diffpdf
|
||||
Comment=PDF diffing tool
|
||||
Exec=$out/bin/diffpdf
|
||||
Exec=diffpdf
|
||||
Terminal=false
|
||||
EOF
|
||||
'';
|
||||
|
|
|
|||
|
|
@ -7,40 +7,41 @@
|
|||
python3,
|
||||
python3Packages,
|
||||
ruby,
|
||||
wrapQtAppsHook,
|
||||
qtbase,
|
||||
qtmultimedia,
|
||||
qtsvg,
|
||||
qttools,
|
||||
qtxmlpatterns,
|
||||
qmake,
|
||||
which,
|
||||
perl,
|
||||
libgit2,
|
||||
libpng,
|
||||
expat,
|
||||
curl,
|
||||
zlib,
|
||||
wrapQtAppsHook,
|
||||
qmake,
|
||||
qtbase,
|
||||
qtmultimedia,
|
||||
qtsvg,
|
||||
qttools,
|
||||
qt5compat,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "klayout";
|
||||
version = "0.30.7";
|
||||
version = "0.30.8";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "KLayout";
|
||||
repo = "klayout";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-W8ry1+wxVOUxg4hXMd0OpcaWcVr6wUBC3eGgDney2Xc=";
|
||||
hash = "sha256-RjMH6hrc0jyCLgG1D6cztBp5Fb3W5HgTxVTfI2bxgCs=";
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace src/klayout.pri --replace "-Wno-reserved-user-defined-literal" ""
|
||||
patchShebangs .
|
||||
patchShebangs --build .
|
||||
'';
|
||||
|
||||
dontUseQmakeConfigure = true;
|
||||
dontWrapQtApps = stdenv.hostPlatform.isDarwin;
|
||||
|
||||
nativeBuildInputs = [
|
||||
(python3.withPackages (ps: [ ps.tomli ]))
|
||||
|
|
@ -54,7 +55,7 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
qtmultimedia
|
||||
qtsvg
|
||||
qttools
|
||||
qtxmlpatterns
|
||||
qt5compat
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
|
|
@ -62,11 +63,12 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
qtmultimedia
|
||||
qtsvg
|
||||
qttools
|
||||
qtxmlpatterns
|
||||
qt5compat
|
||||
libgit2
|
||||
libpng
|
||||
expat
|
||||
curl
|
||||
zlib
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
|
|
@ -107,7 +109,10 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
wrapQtApp "$out/Applications/klayout.app/Contents/MacOS/klayout"
|
||||
'';
|
||||
|
||||
env.NIX_CFLAGS_COMPILE = toString [ "-Wno-parentheses" ];
|
||||
env = {
|
||||
NIX_CFLAGS_COMPILE = toString [ "-Wno-parentheses" ];
|
||||
NIX_LDFLAGS = lib.optionalString stdenv.hostPlatform.isDarwin "-headerpad_max_install_names";
|
||||
};
|
||||
|
||||
# Installation is handled manually in buildPhase/postBuild via build.sh -prefix
|
||||
dontInstall = true;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue