Merge commit '24c32abce296e4e182b1cbd0f1236ba65703a711' into haskell-updates

This commit is contained in:
Michael Daniels
2026-02-17 19:57:04 -05:00
763 changed files with 19130 additions and 6776 deletions
+1 -1
View File
@@ -49,7 +49,7 @@ jobs:
- name: Create backport PRs
id: backport
uses: korthout/backport-action@c656f5d5851037b2b38fb5db2691a03fa229e3b2 # v4.0.1
uses: korthout/backport-action@01619ebc9a6e3f6820274221b9956b3e7365000a # v4.1.0
with:
# Config README: https://github.com/korthout/backport-action#backport-action
copy_labels_pattern: 'severity:\ssecurity'
+1 -1
View File
@@ -53,7 +53,7 @@ jobs:
ci/github-script
- name: Install dependencies
run: npm install @actions/artifact@5.0.3 bottleneck
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@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
+1 -1
View File
@@ -62,7 +62,7 @@ jobs:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
target-as-trusted-at: ${{ inputs.targetSha }}
- uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31
- uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1
with:
# Sandbox is disabled on MacOS by default.
extra_nix_config: sandbox = true
+2 -2
View File
@@ -43,7 +43,7 @@ jobs:
ci/github-script
- name: Install dependencies
run: npm install bottleneck
run: npm install bottleneck@2.19.5
- name: Log current API rate limits
env:
@@ -85,7 +85,7 @@ jobs:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
target-as-trusted-at: ${{ inputs.targetSha }}
- uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31
- uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1
- uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16
continue-on-error: true
+4 -4
View File
@@ -132,7 +132,7 @@ jobs:
core.info(`Found pinned.json commit: ${ciPinBumpCommit}`)
- name: Install Nix
uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31
uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1
- name: Load supported versions
id: versions
@@ -180,7 +180,7 @@ jobs:
target-as-trusted-at: ${{ inputs.targetSha }}
- name: Install Nix
uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31
uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1
- uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16
continue-on-error: true
@@ -270,7 +270,7 @@ jobs:
merge-multiple: true
- name: Install Nix
uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31
uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1
- name: Combine all output paths and eval stats
run: |
@@ -451,7 +451,7 @@ jobs:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
- name: Install Nix
uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31
uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1
- name: Ensure flake outputs on all systems still evaluate
run: nix flake check --all-systems --no-build './nixpkgs/untrusted?shallow=1'
+3 -3
View File
@@ -35,7 +35,7 @@ jobs:
with:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
- uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31
- uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1
# TODO: Figure out how to best enable caching for the treefmt job. Cachix won't work well,
# because the cache would be invalidated on every commit - treefmt checks every file.
@@ -70,7 +70,7 @@ jobs:
with:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
- uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31
- uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1
- uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16
continue-on-error: true
@@ -100,7 +100,7 @@ jobs:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
target-as-trusted-at: ${{ inputs.targetSha }}
- uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31
- uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1
- uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16
continue-on-error: true
+1 -1
View File
@@ -38,7 +38,7 @@ jobs:
maintainers/github-teams.json
- name: Install dependencies
run: npm install bottleneck
run: npm install bottleneck@2.19.5
- name: Synchronise teams
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
Regular → Executable
View File
+261 -313
View File
@@ -5,43 +5,76 @@
"packages": {
"": {
"dependencies": {
"@actions/artifact": "2.3.2",
"@actions/artifact": "5.0.3",
"@actions/core": "1.11.1",
"@actions/github": "6.0.1",
"bottleneck": "2.19.5",
"commander": "14.0.0"
"commander": "14.0.3"
}
},
"node_modules/@actions/artifact": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/@actions/artifact/-/artifact-2.3.2.tgz",
"integrity": "sha512-uX2Mr5KEPcwnzqa0Og9wOTEKIae6C/yx9P/m8bIglzCS5nZDkcQC/zRWjjoEsyVecL6oQpBx5BuqQj/yuVm0gw==",
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/@actions/artifact/-/artifact-5.0.3.tgz",
"integrity": "sha512-FIEG8Kum0wABZnktJvFi1xuVPc31xrunhZwLCvjrCGISQOm0ifyo7cjqf6PHiEeqoWMa5HIGOsB+lGM4aKCseA==",
"license": "MIT",
"dependencies": {
"@actions/core": "^1.10.0",
"@actions/github": "^5.1.1",
"@actions/http-client": "^2.1.0",
"@azure/storage-blob": "^12.15.0",
"@octokit/core": "^3.5.1",
"@actions/core": "^2.0.0",
"@actions/github": "^6.0.1",
"@actions/http-client": "^3.0.2",
"@azure/storage-blob": "^12.29.1",
"@octokit/core": "^5.2.1",
"@octokit/plugin-request-log": "^1.0.4",
"@octokit/plugin-retry": "^3.0.9",
"@octokit/request-error": "^5.0.0",
"@octokit/request": "^8.4.1",
"@octokit/request-error": "^5.1.1",
"@protobuf-ts/plugin": "^2.2.3-alpha.1",
"archiver": "^7.0.1",
"jwt-decode": "^3.1.2",
"unzip-stream": "^0.3.1"
}
},
"node_modules/@actions/artifact/node_modules/@actions/github": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@actions/github/-/github-5.1.1.tgz",
"integrity": "sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==",
"node_modules/@actions/artifact/node_modules/@actions/core": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-2.0.3.tgz",
"integrity": "sha512-Od9Thc3T1mQJYddvVPM4QGiLUewdh+3txmDYHHxoNdkqysR1MbCT+rFOtNUxYAz+7+6RIsqipVahY2GJqGPyxA==",
"license": "MIT",
"dependencies": {
"@actions/http-client": "^2.0.1",
"@octokit/core": "^3.6.0",
"@octokit/plugin-paginate-rest": "^2.17.0",
"@octokit/plugin-rest-endpoint-methods": "^5.13.0"
"@actions/exec": "^2.0.0",
"@actions/http-client": "^3.0.2"
}
},
"node_modules/@actions/artifact/node_modules/@actions/exec": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@actions/exec/-/exec-2.0.0.tgz",
"integrity": "sha512-k8ngrX2voJ/RIN6r9xB82NVqKpnMRtxDoiO+g3olkIUpQNqjArXrCQceduQZCQj3P3xm32pChRLqRrtXTlqhIw==",
"license": "MIT",
"dependencies": {
"@actions/io": "^2.0.0"
}
},
"node_modules/@actions/artifact/node_modules/@actions/http-client": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-3.0.2.tgz",
"integrity": "sha512-JP38FYYpyqvUsz+Igqlc/JG6YO9PaKuvqjM3iGvaLqFnJ7TFmcLyy2IDrY0bI0qCQug8E9K+elv5ZNfw62ZJzA==",
"license": "MIT",
"dependencies": {
"tunnel": "^0.0.6",
"undici": "^6.23.0"
}
},
"node_modules/@actions/artifact/node_modules/@actions/io": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@actions/io/-/io-2.0.0.tgz",
"integrity": "sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg==",
"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==",
"license": "MIT",
"engines": {
"node": ">=18.17"
}
},
"node_modules/@actions/core": {
@@ -78,66 +111,6 @@
"undici": "^5.28.5"
}
},
"node_modules/@actions/github/node_modules/@octokit/auth-token": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz",
"integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==",
"license": "MIT",
"engines": {
"node": ">= 18"
}
},
"node_modules/@actions/github/node_modules/@octokit/core": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.1.tgz",
"integrity": "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ==",
"license": "MIT",
"dependencies": {
"@octokit/auth-token": "^4.0.0",
"@octokit/graphql": "^7.1.0",
"@octokit/request": "^8.4.1",
"@octokit/request-error": "^5.1.1",
"@octokit/types": "^13.0.0",
"before-after-hook": "^2.2.0",
"universal-user-agent": "^6.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@actions/github/node_modules/@octokit/endpoint": {
"version": "9.0.6",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz",
"integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==",
"license": "MIT",
"dependencies": {
"@octokit/types": "^13.1.0",
"universal-user-agent": "^6.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@actions/github/node_modules/@octokit/graphql": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz",
"integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==",
"license": "MIT",
"dependencies": {
"@octokit/request": "^8.4.1",
"@octokit/types": "^13.0.0",
"universal-user-agent": "^6.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@actions/github/node_modules/@octokit/openapi-types": {
"version": "24.2.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
"integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
"license": "MIT"
},
"node_modules/@actions/github/node_modules/@octokit/plugin-paginate-rest": {
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz",
@@ -198,30 +171,6 @@
"@octokit/openapi-types": "^20.0.0"
}
},
"node_modules/@actions/github/node_modules/@octokit/request": {
"version": "8.4.1",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz",
"integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==",
"license": "MIT",
"dependencies": {
"@octokit/endpoint": "^9.0.6",
"@octokit/request-error": "^5.1.1",
"@octokit/types": "^13.1.0",
"universal-user-agent": "^6.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@actions/github/node_modules/@octokit/types": {
"version": "13.10.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
"integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
"license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^24.2.0"
}
},
"node_modules/@actions/http-client": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz",
@@ -251,49 +200,52 @@
}
},
"node_modules/@azure/core-auth": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz",
"integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==",
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz",
"integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==",
"license": "MIT",
"dependencies": {
"@azure/abort-controller": "^2.0.0",
"@azure/core-util": "^1.11.0",
"@azure/abort-controller": "^2.1.2",
"@azure/core-util": "^1.13.0",
"tslib": "^2.6.2"
},
"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
}
},
"node_modules/@azure/core-client": {
"version": "1.9.4",
"resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.4.tgz",
"integrity": "sha512-f7IxTD15Qdux30s2qFARH+JxgwxWLG2Rlr4oSkPGuLWm+1p5y1+C04XGLA0vmX6EtqfutmjvpNmAfgwVIS5hpw==",
"version": "1.10.1",
"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.0.0",
"@azure/core-auth": "^1.4.0",
"@azure/core-rest-pipeline": "^1.20.0",
"@azure/core-tracing": "^1.0.0",
"@azure/core-util": "^1.6.1",
"@azure/logger": "^1.0.0",
"@azure/abort-controller": "^2.1.2",
"@azure/core-auth": "^1.10.0",
"@azure/core-rest-pipeline": "^1.22.0",
"@azure/core-tracing": "^1.3.0",
"@azure/core-util": "^1.13.0",
"@azure/logger": "^1.3.0",
"tslib": "^2.6.2"
},
"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
}
},
"node_modules/@azure/core-http-compat": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.0.tgz",
"integrity": "sha512-qLQujmUypBBG0gxHd0j6/Jdmul6ttl24c8WGiLXIk7IHXdBlfoBqW27hyz3Xn6xbfdyVSarl1Ttbk0AwnZBYCw==",
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.2.tgz",
"integrity": "sha512-Tf6ltdKzOJEgxZeWLCjMxrxbodB/ZeCbzzA1A2qHbhzAjzjHoBVSUeSl/baT/oHAxhc4qdqVaDKnc2+iE932gw==",
"license": "MIT",
"dependencies": {
"@azure/abort-controller": "^2.0.0",
"@azure/core-client": "^1.3.0",
"@azure/core-rest-pipeline": "^1.20.0"
"@azure/abort-controller": "^2.1.2"
},
"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
},
"peerDependencies": {
"@azure/core-client": "^1.10.0",
"@azure/core-rest-pipeline": "^1.22.0"
}
},
"node_modules/@azure/core-lro": {
@@ -324,97 +276,119 @@
}
},
"node_modules/@azure/core-rest-pipeline": {
"version": "1.21.0",
"resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.21.0.tgz",
"integrity": "sha512-a4MBwe/5WKbq9MIxikzgxLBbruC5qlkFYlBdI7Ev50Y7ib5Vo/Jvt5jnJo7NaWeJ908LCHL0S1Us4UMf1VoTfg==",
"version": "1.22.2",
"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.0.0",
"@azure/core-auth": "^1.8.0",
"@azure/core-tracing": "^1.0.1",
"@azure/core-util": "^1.11.0",
"@azure/logger": "^1.0.0",
"@typespec/ts-http-runtime": "^0.2.3",
"@azure/abort-controller": "^2.1.2",
"@azure/core-auth": "^1.10.0",
"@azure/core-tracing": "^1.3.0",
"@azure/core-util": "^1.13.0",
"@azure/logger": "^1.3.0",
"@typespec/ts-http-runtime": "^0.3.0",
"tslib": "^2.6.2"
},
"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
}
},
"node_modules/@azure/core-tracing": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz",
"integrity": "sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==",
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz",
"integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==",
"license": "MIT",
"dependencies": {
"tslib": "^2.6.2"
},
"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
}
},
"node_modules/@azure/core-util": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.12.0.tgz",
"integrity": "sha512-13IyjTQgABPARvG90+N2dXpC+hwp466XCdQXPCRlbWHgd3SJd5Q1VvaBGv6k1BIa4MQm6hAF1UBU1m8QUxV8sQ==",
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz",
"integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==",
"license": "MIT",
"dependencies": {
"@azure/abort-controller": "^2.0.0",
"@typespec/ts-http-runtime": "^0.2.2",
"@azure/abort-controller": "^2.1.2",
"@typespec/ts-http-runtime": "^0.3.0",
"tslib": "^2.6.2"
},
"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
}
},
"node_modules/@azure/core-xml": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/@azure/core-xml/-/core-xml-1.4.5.tgz",
"integrity": "sha512-gT4H8mTaSXRz7eGTuQyq1aIJnJqeXzpOe9Ay7Z3FrCouer14CbV3VzjnJrNrQfbBpGBLO9oy8BmrY75A0p53cA==",
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@azure/core-xml/-/core-xml-1.5.0.tgz",
"integrity": "sha512-D/sdlJBMJfx7gqoj66PKVmhDDaU6TKA49ptcolxdas29X7AfvLTmfAGLjAcIMBK7UZ2o4lygHIqVckOlQU3xWw==",
"license": "MIT",
"dependencies": {
"fast-xml-parser": "^5.0.7",
"tslib": "^2.8.1"
},
"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
}
},
"node_modules/@azure/logger": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.2.0.tgz",
"integrity": "sha512-0hKEzLhpw+ZTAfNJyRrn6s+V0nDWzXk9OjBr2TiGIu0OfMr5s2V4FpKLTAK3Ca5r5OKLbf4hkOGDPyiRjie/jA==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz",
"integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==",
"license": "MIT",
"dependencies": {
"@typespec/ts-http-runtime": "^0.2.2",
"@typespec/ts-http-runtime": "^0.3.0",
"tslib": "^2.6.2"
},
"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
}
},
"node_modules/@azure/storage-blob": {
"version": "12.27.0",
"resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.27.0.tgz",
"integrity": "sha512-IQjj9RIzAKatmNca3D6bT0qJ+Pkox1WZGOg2esJF2YLHb45pQKOwGPIAV+w3rfgkj7zV3RMxpn/c6iftzSOZJQ==",
"version": "12.31.0",
"resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.31.0.tgz",
"integrity": "sha512-DBgNv10aCSxopt92DkTDD0o9xScXeBqPKGmR50FPZQaEcH4JLQ+GEOGEDv19V5BMkB7kxr+m4h6il/cCDPvmHg==",
"license": "MIT",
"dependencies": {
"@azure/abort-controller": "^2.1.2",
"@azure/core-auth": "^1.4.0",
"@azure/core-client": "^1.6.2",
"@azure/core-http-compat": "^2.0.0",
"@azure/core-auth": "^1.9.0",
"@azure/core-client": "^1.9.3",
"@azure/core-http-compat": "^2.2.0",
"@azure/core-lro": "^2.2.0",
"@azure/core-paging": "^1.1.1",
"@azure/core-rest-pipeline": "^1.10.1",
"@azure/core-tracing": "^1.1.2",
"@azure/core-util": "^1.6.1",
"@azure/core-xml": "^1.4.3",
"@azure/logger": "^1.0.0",
"@azure/core-paging": "^1.6.2",
"@azure/core-rest-pipeline": "^1.19.1",
"@azure/core-tracing": "^1.2.0",
"@azure/core-util": "^1.11.0",
"@azure/core-xml": "^1.4.5",
"@azure/logger": "^1.1.4",
"@azure/storage-common": "^12.3.0",
"events": "^3.0.0",
"tslib": "^2.2.0"
"tslib": "^2.8.1"
},
"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
}
},
"node_modules/@azure/storage-common": {
"version": "12.3.0",
"resolved": "https://registry.npmjs.org/@azure/storage-common/-/storage-common-12.3.0.tgz",
"integrity": "sha512-/OFHhy86aG5Pe8dP5tsp+BuJ25JOAl9yaMU3WZbkeoiFMHFtJ7tu5ili7qEdBXNW9G5lDB19trwyI6V49F/8iQ==",
"license": "MIT",
"dependencies": {
"@azure/abort-controller": "^2.1.2",
"@azure/core-auth": "^1.9.0",
"@azure/core-http-compat": "^2.2.0",
"@azure/core-rest-pipeline": "^1.19.1",
"@azure/core-tracing": "^1.2.0",
"@azure/core-util": "^1.11.0",
"@azure/logger": "^1.1.4",
"events": "^3.3.0",
"tslib": "^2.8.1"
},
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/@bufbuild/protobuf": {
@@ -474,60 +448,103 @@
}
},
"node_modules/@octokit/auth-token": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
"integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz",
"integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==",
"license": "MIT",
"dependencies": {
"@octokit/types": "^6.0.3"
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/core": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz",
"integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==",
"version": "5.2.2",
"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": "^2.4.4",
"@octokit/graphql": "^4.5.8",
"@octokit/request": "^5.6.3",
"@octokit/request-error": "^2.0.5",
"@octokit/types": "^6.0.3",
"@octokit/auth-token": "^4.0.0",
"@octokit/graphql": "^7.1.0",
"@octokit/request": "^8.4.1",
"@octokit/request-error": "^5.1.1",
"@octokit/types": "^13.0.0",
"before-after-hook": "^2.2.0",
"universal-user-agent": "^6.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/core/node_modules/@octokit/request-error": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
"node_modules/@octokit/core/node_modules/@octokit/openapi-types": {
"version": "24.2.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
"integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
"license": "MIT"
},
"node_modules/@octokit/core/node_modules/@octokit/types": {
"version": "13.10.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
"integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
"license": "MIT",
"dependencies": {
"@octokit/types": "^6.0.3",
"deprecation": "^2.0.0",
"once": "^1.4.0"
"@octokit/openapi-types": "^24.2.0"
}
},
"node_modules/@octokit/endpoint": {
"version": "6.0.12",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
"integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
"version": "9.0.6",
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz",
"integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==",
"license": "MIT",
"dependencies": {
"@octokit/types": "^6.0.3",
"is-plain-object": "^5.0.0",
"@octokit/types": "^13.1.0",
"universal-user-agent": "^6.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": {
"version": "24.2.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
"integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
"license": "MIT"
},
"node_modules/@octokit/endpoint/node_modules/@octokit/types": {
"version": "13.10.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
"integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
"license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^24.2.0"
}
},
"node_modules/@octokit/graphql": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
"integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz",
"integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==",
"license": "MIT",
"dependencies": {
"@octokit/request": "^5.6.0",
"@octokit/types": "^6.0.3",
"@octokit/request": "^8.4.1",
"@octokit/types": "^13.0.0",
"universal-user-agent": "^6.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": {
"version": "24.2.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
"integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
"license": "MIT"
},
"node_modules/@octokit/graphql/node_modules/@octokit/types": {
"version": "13.10.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
"integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
"license": "MIT",
"dependencies": {
"@octokit/openapi-types": "^24.2.0"
}
},
"node_modules/@octokit/openapi-types": {
@@ -536,18 +553,6 @@
"integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==",
"license": "MIT"
},
"node_modules/@octokit/plugin-paginate-rest": {
"version": "2.21.3",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz",
"integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==",
"license": "MIT",
"dependencies": {
"@octokit/types": "^6.40.0"
},
"peerDependencies": {
"@octokit/core": ">=2"
}
},
"node_modules/@octokit/plugin-request-log": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
@@ -557,19 +562,6 @@
"@octokit/core": ">=3"
}
},
"node_modules/@octokit/plugin-rest-endpoint-methods": {
"version": "5.16.2",
"resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz",
"integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==",
"license": "MIT",
"dependencies": {
"@octokit/types": "^6.39.0",
"deprecation": "^2.3.1"
},
"peerDependencies": {
"@octokit/core": ">=3"
}
},
"node_modules/@octokit/plugin-retry": {
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz",
@@ -581,17 +573,18 @@
}
},
"node_modules/@octokit/request": {
"version": "5.6.3",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
"integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
"version": "8.4.1",
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz",
"integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==",
"license": "MIT",
"dependencies": {
"@octokit/endpoint": "^6.0.1",
"@octokit/request-error": "^2.1.0",
"@octokit/types": "^6.16.1",
"is-plain-object": "^5.0.0",
"node-fetch": "^2.6.7",
"@octokit/endpoint": "^9.0.6",
"@octokit/request-error": "^5.1.1",
"@octokit/types": "^13.1.0",
"universal-user-agent": "^6.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/request-error": {
@@ -623,15 +616,19 @@
"@octokit/openapi-types": "^24.2.0"
}
},
"node_modules/@octokit/request/node_modules/@octokit/request-error": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
"integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
"node_modules/@octokit/request/node_modules/@octokit/openapi-types": {
"version": "24.2.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz",
"integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
"license": "MIT"
},
"node_modules/@octokit/request/node_modules/@octokit/types": {
"version": "13.10.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz",
"integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==",
"license": "MIT",
"dependencies": {
"@octokit/types": "^6.0.3",
"deprecation": "^2.0.0",
"once": "^1.4.0"
"@octokit/openapi-types": "^24.2.0"
}
},
"node_modules/@octokit/types": {
@@ -708,9 +705,9 @@
}
},
"node_modules/@typespec/ts-http-runtime": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.2.3.tgz",
"integrity": "sha512-oRhjSzcVjX8ExyaF8hC0zzTqxlVuRlgMHL/Bh4w3xB9+wjbm0FpXylVU/lBrn+kgphwYTrOk3tp+AVShGmlYCg==",
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.3.tgz",
"integrity": "sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==",
"license": "MIT",
"dependencies": {
"http-proxy-agent": "^7.0.0",
@@ -718,7 +715,7 @@
"tslib": "^2.6.2"
},
"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
}
},
"node_modules/abort-controller": {
@@ -734,9 +731,9 @@
}
},
"node_modules/agent-base": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
"integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
"version": "7.1.4",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
"integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
"license": "MIT",
"engines": {
"node": ">= 14"
@@ -953,9 +950,9 @@
"license": "MIT"
},
"node_modules/commander": {
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz",
"integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==",
"version": "14.0.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz",
"integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==",
"license": "MIT",
"engines": {
"node": ">=20"
@@ -1082,9 +1079,9 @@
"license": "MIT"
},
"node_modules/fast-xml-parser": {
"version": "5.2.5",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz",
"integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==",
"version": "5.3.6",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz",
"integrity": "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==",
"funding": [
{
"type": "github",
@@ -1093,7 +1090,7 @@
],
"license": "MIT",
"dependencies": {
"strnum": "^2.1.0"
"strnum": "^2.1.2"
},
"bin": {
"fxparser": "src/cli/cli.js"
@@ -1116,9 +1113,10 @@
}
},
"node_modules/glob": {
"version": "10.4.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"version": "10.5.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
"integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
"deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"license": "ISC",
"dependencies": {
"foreground-child": "^3.1.0",
@@ -1202,15 +1200,6 @@
"node": ">=8"
}
},
"node_modules/is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -1299,9 +1288,9 @@
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"version": "4.17.23",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"license": "MIT"
},
"node_modules/lru-cache": {
@@ -1361,26 +1350,6 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"license": "MIT"
},
"node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"license": "MIT",
"dependencies": {
"whatwg-url": "^5.0.0"
},
"engines": {
"node": "4.x || >=6.0.0"
},
"peerDependencies": {
"encoding": "^0.1.0"
},
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
}
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -1654,9 +1623,9 @@
}
},
"node_modules/strnum": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz",
"integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==",
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz",
"integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==",
"funding": [
{
"type": "github",
@@ -1685,12 +1654,6 @@
"b4a": "^1.6.4"
}
},
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"license": "MIT"
},
"node_modules/traverse": {
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
@@ -1720,6 +1683,7 @@
"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"
@@ -1762,22 +1726,6 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"license": "MIT"
},
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"license": "BSD-2-Clause"
},
"node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"license": "MIT",
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+8 -2
View File
@@ -1,10 +1,16 @@
{
"private": true,
"//": [
"Keep `@actions/core` and `@actions/github` in sync with",
"https://github.com/actions/github-script/blob/main/package.json.",
"Keep `@actions/artifact` and `bottleneck` in sync with",
"`.github/workflows/bot.yml`."
],
"dependencies": {
"@actions/artifact": "2.3.2",
"@actions/artifact": "5.0.3",
"@actions/core": "1.11.1",
"@actions/github": "6.0.1",
"bottleneck": "2.19.5",
"commander": "14.0.0"
"commander": "14.0.3"
}
}
+1 -1
View File
@@ -54,7 +54,7 @@ stdenvNoCC.mkDerivation (
};
in
{
inherit (lib.trivial) version;
version = lib.trivial.release;
pname = "nixpkgs-manual";
nativeBuildInputs = [ nixos-render-docs ];
+4
View File
@@ -70,6 +70,8 @@
- `spoof` has been removed, as there are many issues upstream with it working on modern OS versions, and it appears to be unmaintained.
- `nodePackages.coc-go` and `nodePackages.coc-tsserver`, along with their vim plugins, have been removed from nixpkgs due to being unmaintained.
- `nodePackages.wavedrom-cli` has been removed, as it was unmaintained within nixpkgs.
- `arti` has been updated to major version 2, which removed the long-deprecated `proxy.socks_port` and `proxy.dns_port` and the legacy syntax for specifying directory authorities. For more information, see the [changelog for 2.0.0](https://gitlab.torproject.org/tpo/core/arti/-/blob/arti-v2.0.0/CHANGELOG.md).
@@ -127,6 +129,8 @@
- `pocket-id` has been updated to version 2 that contains [breaking changes](https://pocket-id.org/docs/setup/major-releases/migrate-v2).
- `services.xserver` will now throw an error if an X11 driver specified in `videoDriver(s)` cannot be found. Previously, unknown drivers would be silently ignored.
- `asio` (standalone version of `boost::asio`) has been updated from 1.24.0 to 1.36.0. Some breaking changes were introduced between these
two versions, and the one affected most was the removal of `asio::io_service` in favor of `asio::io_context` in 1.33.0. `asio_1_32_0` is
retained for packages that have not completed migration. `asio_1_10` has been removed as no packages depend on it anymore.
+27 -1
View File
@@ -54,6 +54,32 @@ let
missingGithubIds = lib.concatLists (lib.mapAttrsToList checkMaintainer lib.maintainers);
uniqueFields = [
"github"
"githubId"
"email"
"matrix"
];
nonUniqueFields = lib.filterAttrs (field: nonUnique: nonUnique != { }) (
lib.genAttrs uniqueFields (
field:
lib.pipe lib.maintainers [
(lib.mapAttrsToList (handle: m: m // { inherit handle; }))
(lib.groupBy (m: toString (m.${field} or null)))
(lib.filterAttrs (v: ms: v != "" && lib.length ms > 1))
(lib.mapAttrs (v: ms: map (m: m.handle) ms))
]
)
);
uniquenessError =
value:
if nonUniqueFields == { } then
value
else
throw "lib.maintainers has non-unique fields: ${lib.generators.toPretty { } nonUniqueFields}";
success = pkgs.runCommand "checked-maintainers-success" { } "mkdir $out";
failure =
@@ -73,4 +99,4 @@ let
exit 1
'';
in
if missingGithubIds == [ ] then success else failure
uniquenessError (if missingGithubIds == [ ] then success else failure)
+98 -19
View File
@@ -1444,6 +1444,13 @@
githubId = 373;
name = "Alexandre Girard Davila";
};
alyamanmas = {
email = "alyaman.maasarani@gmail.com";
github = "AlyamanMas";
githubId = 33905034;
name = "Alyaman Huzaifa Massarani";
keys = [ { fingerprint = "570D 147B 9514 08C6 2CD8 D530 515E 428A C916 D39C"; } ];
};
amaanq = {
email = "contact@amaanq.com";
github = "amaanq";
@@ -6942,13 +6949,6 @@
githubId = 126339;
name = "Domen Kozar";
};
DomesticMoth = {
name = "Andrew";
email = "silkmoth@protonmail.com";
github = "asciimoth";
githubId = 91414737;
keys = [ { fingerprint = "7D6B AE0A A98A FDE9 3396 E721 F87E 15B8 3AA7 3087"; } ];
};
dominikh = {
email = "dominik@honnef.co";
github = "dominikh";
@@ -7095,6 +7095,12 @@
githubId = 69208565;
name = "Clément Boillot";
};
drdo = {
email = "drdo@drdo.eu";
github = "drdo";
githubId = 446083;
name = "Daniel Rebelo de Oliveira";
};
drets = {
email = "dmitryrets@gmail.com";
github = "drets";
@@ -7741,7 +7747,7 @@
name = "Elnu";
};
elpdt852 = {
email = "nix@pdtpartners.com";
email = "nix+elpdt852@pdtpartners.com";
github = "elpdt852";
githubId = 122112154;
name = "Edgar Lee";
@@ -8879,6 +8885,12 @@
githubId = 74379;
name = "Florian Pester";
};
flyingpeakock = {
email = "nix@phlipphlop.me";
github = "flyingpeakock";
githubId = 21244519;
name = "Philip Johansson";
};
fmhoeger = {
email = "fmhoeger@mirsem.org";
name = "fmhoeger";
@@ -10173,6 +10185,12 @@
githubId = 1742172;
name = "Hamish Hutchings";
};
hamidr = {
email = "hamidr.dev@gmail.com";
github = "hamidr";
githubId = 298427;
name = "Hamid Davoodi";
};
hamzaremmal = {
email = "hamza.remmal@epfl.ch";
github = "hamzaremmal";
@@ -11105,6 +11123,12 @@
githubId = 7481521;
name = "Balázs Lengyel";
};
ilai-deutel = {
github = "ilai-deutel";
githubId = 10098207;
name = "Ilaï Deutel";
keys = [ { fingerprint = "1025 8841 8FF7 E165 6964 90A2 06E8 A973 4948 08A2"; } ];
};
ilarvne = {
email = "ilarvne@proton.me";
github = "ilarvne";
@@ -12569,6 +12593,12 @@
githubId = 43830312;
name = "Joël Miramon";
};
jmmv = {
email = "julio@meroh.net";
github = "jmmv";
githubId = 879272;
name = "Julio Merino";
};
jn-sena = {
email = "jn-sena@proton.me";
github = "jn-sena";
@@ -14427,6 +14457,11 @@
githubId = 629430;
keys = [ { fingerprint = "2843 750C B1AB E256 94BE 40E2 D843 D30B 42CA 0E2D"; } ];
};
kulczwoj = {
name = "Wojciech Kulczycki";
github = "kulczwoj";
githubId = 58049191;
};
KunyaKud = {
name = "KunyaKud";
email = "wafuu@posteo.net";
@@ -14720,7 +14755,7 @@
name = "Luka Blaskovic";
};
lbpdt = {
email = "nix@pdtpartners.com";
email = "nix+lbpdt@pdtpartners.com";
github = "lbpdt";
githubId = 45168934;
name = "Louis Blin";
@@ -17071,7 +17106,7 @@
githubId = 22659757;
};
metalmatze = {
email = "matthias.loibl@polarsignals.com";
email = "mail@matthiasloibl.com";
name = "Matthias Loibl";
github = "metalmatze";
githubId = 872251;
@@ -17158,6 +17193,13 @@
githubId = 20536514;
name = "Magdalena Haselsteiner";
};
mhdask = {
email = "nixpkgs@mdask.dk";
matrix = "@mhdask:matrix.org";
github = "mhdask";
githubId = 55240757;
name = "mhdask";
};
mhemeryck = {
email = "martijn.hemeryck@gmail.com";
github = "mhemeryck";
@@ -18215,7 +18257,7 @@
keys = [ { fingerprint = "5658 4D09 71AF E45F CC29 6BD7 4CE6 2A90 EFC0 B9B2"; } ];
};
mupdt = {
email = "nix@pdtpartners.com";
email = "nix+mupdt@pdtpartners.com";
github = "mupdt";
githubId = 25388474;
name = "Matej Urbas";
@@ -19246,6 +19288,12 @@
githubId = 810877;
name = "Tom Doggett";
};
noderyos = {
email = "vincent.bsod@gmail.com";
github = "Noderyos";
githubId = 56077132;
name = "Noderyos";
};
noiioiu = {
github = "noiioiu";
githubId = 151288161;
@@ -19512,6 +19560,12 @@
github = "nullishamy";
githubId = 99221043;
};
numbleroot = {
email = "hello@lennartoldenburg.de";
name = "Lennart Oldenburg";
github = "numbleroot";
githubId = 1864826;
};
numinit = {
email = "me+nixpkgs@numin.it";
name = "Morgan Jones";
@@ -20405,12 +20459,6 @@
name = "Patrick";
keys = [ { fingerprint = "5E4C 3D74 80C2 35FE 2F0B D23F 7DD6 A72E C899 617D"; } ];
};
patricksjackson = {
email = "patrick@jackson.dev";
github = "arcuru";
githubId = 160646;
name = "Patrick Jackson";
};
patryk27 = {
email = "pwychowaniec@pm.me";
github = "Patryk27";
@@ -22828,6 +22876,12 @@
githubId = 496447;
name = "Robert Hensing";
};
robertjakub = {
email = "rjakub@pm.me";
github = "robertjakub";
githubId = 7160579;
name = "Robert Jakub";
};
robertodr = {
email = "roberto.diremigio@gmail.com";
github = "robertodr";
@@ -24352,6 +24406,17 @@
githubId = 6292;
name = "Andrey Petrov";
};
sheeeng = {
email = "leonard.sheng.sheng.lee@gmail.com";
github = "sheeeng";
githubId = 305414;
keys = [
{ fingerprint = "444E 47CF 8B37 E775 83B2 4F15 0CDB E529 04CA 3543"; }
{ fingerprint = "B4C7 C8B9 F60F 1C8D B9F4 7E63 F104 C3F6 5943 8426"; }
];
matrix = "@sheeeng:matrix.org";
name = "Leonard Sheng Sheng Lee";
};
sheepforce = {
email = "phillip.seeber@googlemail.com";
github = "sheepforce";
@@ -24619,6 +24684,13 @@
github = "Silver-Golden";
githubId = 7858375;
};
silverhadch = {
email = "hadichokr@icloud.com";
matrix = "@silverhadch07:matrix.org";
name = "Hadi Chokr";
github = "silverhadch";
githubId = 158838697;
};
simarra = {
name = "simarra";
email = "loic.martel@protonmail.com";
@@ -27771,10 +27843,11 @@
githubId = 68829907;
};
v3rm1n0 = {
name = "Niklas Choinowski";
email = "niklas.choinowski@proton.me";
name = "V3RM1N";
email = "mail@v3rm1n.dev";
github = "v3rm1n0";
githubId = 57269010;
keys = [ { fingerprint = "58E4 2840 D274 49A5 5948 78AA 85F3 7D09 1304 5718"; } ];
};
vaavaav = {
name = "Pedro Peixoto";
@@ -29437,6 +29510,12 @@
githubId = 8006928;
name = "Yuannan (Brandon) Lin";
};
yujonpradhananga = {
email = "yujonpradhan123@gmail.com";
github = "Yujonpradhananga";
githubId = 139200034;
name = "Yujon Pradhananga";
};
yuka = {
email = "yuka@yuka.dev";
matrix = "@yuka:yuka.dev";
@@ -42,6 +42,8 @@
- [Dunst](https://github.com/dunst-project/dunst), a lightweight and customizable notification daemon. Available as [services.dunst](#opt-services.dunst.enable).
- [cocoon](https://github.com/haileyok/cocoon), is a PDS (personal data server) that is a alternative to the bluesky pds. Available as [services.cocoon](#opt-services.cocoon.enable).
- [Ente Auth](https://ente.io/auth/), an open source 2FA authenticator, with end-to-end encrypted backups. Available as [programs.ente-auth](#opt-programs.ente-auth.enable).
- [Dawarich](https://dawarich.app/), a self-hostable location history tracker. Available as [services.dawarich](#opt-services.dawarich.enable).
@@ -68,8 +70,6 @@
- The packages `iw` and `wirelesstools` (`iwconfig`, `iwlist`, etc.) are no longer installed implicitly if wireless networking has been enabled.
- The Traefik module now features new ways to deploy the dynamic and static configuration files. Move your existing declarative static and dynamic configurations to `services.traefik.static.settings` and `services.traefik.dynamic.files."my-application".settings` respectively. The `services.traefik.dynamic.settings` option is available for a simpler migration without needing to define a filename like `my-application`, but this option will be removed in NixOS 26.11.
- `services.kubernetes.addons.dns.coredns` has been renamed to `services.kubernetes.addons.dns.corednsImage` and now expects a
package instead of attrs. Now, by default, nixpkgs.coredns in conjunction with dockerTools.buildImage is used, instead
of pulling the upstream container image from Docker Hub. If you want the old behavior, you can set:
@@ -144,6 +144,8 @@ See <https://github.com/NixOS/nixpkgs/issues/481673>.
- `services.angrr` now uses TOML for configuration. Define policies with `services.angrr.settings` (generate TOML file) or point to a file using `services.angrr.configFile`. The legacy options `services.angrr.period`, `services.angrr.ownedOnly`, and `services.angrr.removeRoot` have been removed. See `man 5 angrr` and the description of `services.angrr.settings` options for examples and details.
- `services.homepage-dashboard.environmentFile` has been renamed to `services.homepage-dashboard.environmentFiles`, and now expects a list of strings.
- `services.pingvin-share` has been removed as the `pingvin-share.backend` package was broken and the project was archived upstream.
- `geph` package's built-in GUI `geph5-client-gui` has been [removed](https://github.com/geph-official/geph5/commit/f2221fb8386312daf2cef05483ebb353ff48bdb4) by the upstream. All users who wish to continue using the GUI should install the `gephgui-wry`, which is consistent with the official release version.
+30 -6
View File
@@ -62,6 +62,19 @@ in
config = lib.mkIf cfg.enable {
warnings = lib.optional (cfg.powerUpCommands != "") ''
powerManagement.powerUpCommands is deprecated due to it having unclear ordering semantics.
It will be removed in NixOS 26.11.
It is recommended to create an explicit systemd oneshot service instead,
that is pulled in at the right time during the boot process.
See https://www.freedesktop.org/software/systemd/man/latest/systemd.special.html
for more information on possible targets that can be used for this.
If you also want to run this service upon waking up from resume, the recommended
method to do so is described here:
https://www.freedesktop.org/software/systemd/man/latest/systemd.special.html#sleep.target
'';
systemd.targets.post-resume = {
description = "Post-Resume Actions";
requires = [ "post-resume.service" ];
@@ -81,14 +94,25 @@ in
serviceConfig.Type = "oneshot";
};
systemd.services.post-boot = {
description = "Post-boot Actions";
# It's not well defined at what point in the bootup sequence this should run
# we should eventually just remove this.
wantedBy = [ "multi-user.target" ];
restartIfChanged = false;
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
};
script = ''
${cfg.powerUpCommands}
'';
};
systemd.services.post-resume = {
description = "Post-Resume Actions";
after = [
"suspend.target"
"hibernate.target"
"hybrid-sleep.target"
"suspend-then-hibernate.target"
];
# Pulled in by post-resume.service above
after = [ "sleep.target" ];
script = ''
/run/current-system/systemd/bin/systemctl try-restart --no-block post-resume.target
${cfg.resumeCommands}
@@ -11,7 +11,7 @@
# Automatically login as nixos.
services.displayManager = {
sddm.enable = true;
plasma-login-manager.enable = true;
autoLogin = {
enable = true;
user = "nixos";
@@ -19,9 +19,8 @@
};
environment.systemPackages = [
# FIXME: using Qt5 builds of Maliit as upstream has not ported to Qt6 yet
pkgs.maliit-framework
pkgs.maliit-keyboard
# provide onscreen keyboard
pkgs.kdePackages.plasma-keyboard
];
environment.plasma6.excludePackages = [
+3
View File
@@ -619,6 +619,7 @@
./services/display-managers/greetd.nix
./services/display-managers/lemurs.nix
./services/display-managers/ly.nix
./services/display-managers/plasma-login-manager.nix
./services/display-managers/sddm.nix
./services/editors/emacs.nix
./services/editors/haste.nix
@@ -1514,6 +1515,7 @@
./services/security/reaction.nix
./services/security/shibboleth-sp.nix
./services/security/sks.nix
./services/security/ssh-agent-switcher.nix
./services/security/sshguard.nix
./services/security/sslmate-agent.nix
./services/security/step-ca.nix
@@ -1598,6 +1600,7 @@
./services/web-apps/changedetection-io.nix
./services/web-apps/chhoto-url.nix
./services/web-apps/cloudlog.nix
./services/web-apps/cocoon.nix
./services/web-apps/code-server.nix
./services/web-apps/coder.nix
./services/web-apps/collabora-online.nix
+1 -1
View File
@@ -10,7 +10,7 @@
};
services = {
displayManager.sddm.enable = true;
displayManager.plasma-login-manager.enable = true;
libinput.enable = true; # for touchpad support on many laptops
};
+1 -1
View File
@@ -118,7 +118,7 @@ in
if [[ ! -f "$HOME/.config/starship.toml" ]]; then
export STARSHIP_CONFIG=${settingsFile}
fi
eval "$(${cfg.package}/bin/starship init bash)"
eval "$(${cfg.package}/bin/starship init bash --print-full-init)"
fi
'';
+15 -12
View File
@@ -24,6 +24,19 @@ let
passthru.providedSessions = [ "${opts.name}-uwsm" ];
};
});
desktopEntries = lib.mapAttrsToList (
name: value:
mk_uwsm_desktop_entry {
inherit name;
inherit (value)
prettyName
comment
binPath
extraArgs
;
}
) cfg.waylandCompositors;
in
{
options.programs.uwsm = {
@@ -126,18 +139,8 @@ in
}
(lib.mkIf (cfg.waylandCompositors != { }) {
environment.systemPackages = lib.mapAttrsToList (
name: value:
mk_uwsm_desktop_entry {
inherit name;
inherit (value)
prettyName
comment
binPath
extraArgs
;
}
) cfg.waylandCompositors;
environment.systemPackages = desktopEntries;
services.displayManager.sessionPackages = desktopEntries;
})
]
);
@@ -0,0 +1,123 @@
{
config,
lib,
pkgs,
...
}:
let
inherit (lib)
mkIf
mkEnableOption
mkOption
mkPackageOption
optionalAttrs
;
cfg = config.services.displayManager.plasma-login-manager;
xcfg = config.services.xserver;
dmcfg = config.services.displayManager;
iniFmt = pkgs.formats.ini { };
defaultConfig =
optionalAttrs xcfg.enable {
X11.ServerPath = xcfg.displayManager.xserverBin;
}
// optionalAttrs dmcfg.autoLogin.enable {
Autologin = {
User = dmcfg.autoLogin.user;
Session = "${dmcfg.sessionData.autologinSession}.desktop";
};
};
defaultConfigFile = iniFmt.generate "00-nixos-defaults.conf" defaultConfig;
userConfigFile = iniFmt.generate "99-user.conf" cfg.settings;
in
{
options.services.displayManager.plasma-login-manager = {
enable = mkEnableOption "Plasma Login Manager";
package = mkPackageOption pkgs [
"kdePackages"
"plasma-login-manager"
] { };
settings = mkOption {
type = iniFmt.type;
default = { };
example = {
Users.ReuseSession = false;
};
description = "Additional settings for Plasma Login Manager (see `man plasmalogin.conf`)";
};
};
config = mkIf cfg.enable {
services.displayManager.enable = true;
environment.systemPackages = [ cfg.package ];
systemd.packages = [ cfg.package ];
systemd.tmpfiles.packages = [ cfg.package ];
services.dbus.packages = [ cfg.package ];
systemd.services.plasmalogin = {
aliases = [ "display-manager.service" ];
path = [ cfg.package ];
wantedBy = [ "graphical.target" ];
restartIfChanged = false;
};
systemd.defaultUnit = "graphical.target";
environment.etc."plasmalogin.conf.d/00-nixos-defaults.conf".source = defaultConfigFile;
environment.etc."plasmalogin.conf.d/99-user.conf".source = userConfigFile;
security.pam.services = {
plasmalogin.text = ''
auth substack login
account include login
password substack login
session include login
'';
plasmalogin-autologin.text = ''
auth requisite pam_nologin.so
auth required pam_permit.so
account include plasmalogin
password include plasmalogin
session include plasmalogin
'';
plasmalogin-greeter.text = ''
# Load environment from /etc/environment and ~/.pam_environment
auth required pam_env.so conffile=/etc/pam/environment readenv=0
# Always let the greeter start without authentication
auth required pam_permit.so
# No action required for account management
account required pam_permit.so
# Can't change password
password required pam_deny.so
# Setup session
session required pam_unix.so
session optional ${config.systemd.package}/lib/security/pam_systemd.so
'';
};
# FIXME: use upstream sysusers
users = {
users.plasmalogin = {
name = "plasmalogin";
isSystemUser = true;
group = "plasmalogin";
description = "Plasma Login Manager greeter user";
home = "/var/lib/plasmalogin";
};
groups.plasmalogin = { };
};
};
}
+8 -10
View File
@@ -37,6 +37,7 @@ let
# Dependencies needed by specific checks
dependenciesForChecks = {
"Ping" = [ pkgs.iputils ];
"Smb" = pkgs.samba;
"XIdleTime" = [
pkgs.xprintidle
@@ -225,6 +226,13 @@ in
};
config = mkIf cfg.enable {
assertions = [
{
assertion = cfg.checks != { };
message = "`services.autosuspend.checks` must contain at least one activity check.";
}
];
systemd.services.autosuspend = {
description = "A daemon to suspend your server in case of inactivity";
documentation = [ "https://autosuspend.readthedocs.io/en/latest/systemd_integration.html" ];
@@ -235,16 +243,6 @@ in
ExecStart = "${autosuspend}/bin/autosuspend -l ${autosuspend}/etc/autosuspend-logging.conf -c ${autosuspend-conf} daemon";
};
};
systemd.services.autosuspend-detect-suspend = {
description = "Notifies autosuspend about suspension";
documentation = [ "https://autosuspend.readthedocs.io/en/latest/systemd_integration.html" ];
wantedBy = [ "sleep.target" ];
after = [ "sleep.target" ];
serviceConfig = {
ExecStart = "${autosuspend}/bin/autosuspend -l ${autosuspend}/etc/autosuspend-logging.conf -c ${autosuspend-conf} presuspend";
};
};
};
meta = {
@@ -10,6 +10,14 @@ let
settingsFormat = pkgs.formats.yaml { };
in
{
imports = [
(lib.mkChangedOptionModule
[ "services" "homepage-dashboard" "environmentFile" ]
[ "services" "homepage-dashboard" "environmentFiles" ]
(config: [ config.services.homepage-dashboard.environmentFile ])
)
];
options = {
services.homepage-dashboard = {
enable = lib.mkEnableOption "Homepage Dashboard, a highly customizable application dashboard";
@@ -41,10 +49,10 @@ in
'';
};
environmentFile = lib.mkOption {
type = lib.types.str;
environmentFiles = lib.mkOption {
type = lib.types.listOf lib.types.path;
description = ''
The path to an environment file that contains environment variables to pass
A list of paths to environment files that contain environment variables to pass
to the homepage-dashboard service, for the purpose of passing secrets to
the service.
@@ -52,7 +60,7 @@ in
<https://gethomepage.dev/installation/docker/#using-environment-secrets>
'';
default = "";
default = [ ];
};
customCSS = lib.mkOption {
@@ -243,7 +251,7 @@ in
serviceConfig = {
Type = "simple";
EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile;
EnvironmentFile = cfg.environmentFiles;
StateDirectory = "homepage-dashboard";
CacheDirectory = "homepage-dashboard";
ExecStart = lib.getExe cfg.package;
+12
View File
@@ -92,6 +92,18 @@ in
"127.0.0.1:''${config.services.omnom.port}"
'';
};
# NOTE: this can't be empty, because it will be overwritten by
# Omnom's internal default config.
base_url = lib.mkOption {
type = lib.types.str;
internal = true;
default = "http://127.0.0.1:${toString cfg.port}/";
description = "Full server URL.";
example = "https://local.omnom/xy/";
defaultText = lib.literalExpression ''
"http://''${config.services.omnom.settings.server.address}/"
'';
};
secure_cookie = lib.mkOption {
type = lib.types.bool;
default = true;
@@ -64,6 +64,40 @@ in
EnvironmentFile = cfg.environmentFiles;
ExecStart = "${cfg.package}/bin/Radarr -nobrowser -data='${cfg.dataDir}'";
Restart = "on-failure";
# Hardening
CapabilityBoundingSet = "";
NoNewPrivileges = true;
ProtectHome = true;
ProtectClock = true;
ProtectKernelLogs = true;
PrivateTmp = true;
PrivateDevices = true;
PrivateUsers = true;
ProtectKernelTunables = true;
ProtectKernelModules = true;
ProtectControlGroups = true;
RestrictSUIDSGID = true;
RemoveIPC = true;
UMask = "0022";
ProtectHostname = true;
ProtectProc = "invisible";
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
"AF_UNIX"
];
RestrictNamespaces = true;
RestrictRealtime = true;
LockPersonality = true;
SystemCallArchitectures = "native";
SystemCallFilter = [
"@system-service"
"~@privileged"
"~@debug"
"~@mount"
"@chown"
];
};
};
@@ -86,6 +86,40 @@ in
"-data=${cfg.dataDir}"
];
Restart = "on-failure";
# Hardening
CapabilityBoundingSet = "";
NoNewPrivileges = true;
ProtectHome = true;
ProtectClock = true;
ProtectKernelLogs = true;
PrivateTmp = true;
PrivateDevices = true;
PrivateUsers = true;
ProtectKernelTunables = true;
ProtectKernelModules = true;
ProtectControlGroups = true;
RestrictSUIDSGID = true;
RemoveIPC = true;
UMask = "0022";
ProtectHostname = true;
ProtectProc = "invisible";
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
"AF_UNIX"
];
RestrictNamespaces = true;
RestrictRealtime = true;
LockPersonality = true;
SystemCallArchitectures = "native";
SystemCallFilter = [
"@system-service"
"~@privileged"
"~@debug"
"~@mount"
"@chown"
];
}
// lib.optionalAttrs (cfg.dataDir == "/var/lib/sonarr/.config/NzbDrone") {
StateDirectory = "sonarr";
@@ -97,7 +97,7 @@ let
++ (
if (cfg.enableAgentMode) then
[
"--enable-feature=agent"
"--agent"
]
else
[
@@ -24,7 +24,7 @@ let
else if (cfg.passwordFile != null) then
"password=@password_placeholder@"
else if (cfg.secretsFile != null) then
"password=@secrets_placeholder@"
"@secrets_placeholder@"
else
""
}
+10 -7
View File
@@ -201,10 +201,13 @@ in
isSystemUser = true;
};
};
groups.fossorial.members = [
"pangolin"
"gerbil"
];
groups.fossorial = {
members = [
"pangolin"
"gerbil"
"traefik"
];
};
};
# order is as follows
# "pangolin.service"
@@ -428,9 +431,9 @@ in
services.traefik = {
enable = true;
supplementaryGroups = [ "fossorial" ];
group = "fossorial";
dataDir = "${cfg.dataDir}/config/traefik";
static.settings = {
staticConfigOptions = {
providers.http = {
endpoint = "http://localhost:${toString finalSettings.server.internal_port}/api/v1/traefik-config";
pollInterval = "5s";
@@ -468,7 +471,7 @@ in
};
};
};
dynamic.files."pangolin".settings = {
dynamicConfigOptions = {
http = {
middlewares.redirect-to-https.redirectScheme.scheme = "https";
routers = {
View File
@@ -742,6 +742,8 @@ in
};
systemd = {
generatorPath = [ cfg.package ];
sockets.sshd = lib.mkIf cfg.startWhenNeeded {
description = "SSH Socket";
wantedBy = [ "sockets.target" ];
@@ -0,0 +1,43 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.ssh-agent-switcher;
in
{
meta.maintainers = [ lib.maintainers.jmmv ];
options = {
services.ssh-agent-switcher = {
enable = lib.mkEnableOption "ssh-agent-switcher daemon" // {
description = ''
Whether to enable ssh-agent-switcher, a daemon that proxies SSH agent
connections to forwarded agents. This allows tmux/screen sessions to
access SSH agents across reconnections.
This is a per-user service that automatically starts when you log in
via SSH and sets SSH_AUTH_SOCK to point to a stable socket location.
Note: This only activates for SSH sessions, not graphical or console logins.
'';
};
package = lib.mkPackageOption pkgs "ssh-agent-switcher" { };
};
};
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
environment.loginShellInit = ''
if [ -n "$SSH_CONNECTION" ]; then
mkdir -p "''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"
export SSH_AUTH_SOCK="''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/ssh-agent-switcher.sock"
${lib.getExe cfg.package} --daemon --socket-path="$SSH_AUTH_SOCK" 2>/dev/null || true
fi
'';
};
}
+210
View File
@@ -0,0 +1,210 @@
{
lib,
pkgs,
config,
...
}:
let
cfg = config.services.cocoon;
inherit (lib)
getExe
mkEnableOption
mkIf
mkOption
mkPackageOption
types
optional
;
in
{
options.services.cocoon = {
enable = mkEnableOption "cocoon";
package = mkPackageOption pkgs "cocoon" { };
settings = mkOption {
type = types.submodule {
freeformType = types.attrsOf (types.nullOr (types.either types.str types.path));
options = {
COCOON_ADDR = mkOption {
type = types.str;
default = ":8080";
example = ":3000";
description = "Address to bind the Cocoon instance to";
};
COCOON_DID = mkOption {
type = types.nullOr types.str;
example = "did:web:cocoon.example.com";
description = "DID web address for the Cocoon instance";
};
COCOON_HOSTNAME = mkOption {
type = types.nullOr types.str;
example = "cocoon.example.com";
description = "Hostname for the Cocoon instance";
};
COCOON_ROTATION_KEY_PATH = mkOption {
type = types.either types.path types.str;
default = "/var/lib/cocoon/rotation.key";
description = ''
Path to the rotation key file.
Generate it with:
```
cocoon create-rotation-key --out /var/lib/cocoon/rotation.key
```
'';
};
COCOON_JWK_PATH = mkOption {
type = types.either types.path types.str;
default = "/var/lib/cocoon/jwk.key";
description = ''
Path to the JWK key file
Generate it with:
```
cocoon create-private-jwk --out /var/lib/cocoon/jwk.key
```
'';
};
COCOON_CONTACT_EMAIL = mkOption {
type = types.str;
example = "me@example.com";
description = "Contact email for the Cocoon instance";
};
COCOON_RELAYS = mkOption {
type = types.str;
default = "https://bsky.network";
description = "Comma-separated list of Nostr relays to connect to";
};
COCOON_SESSION_COOKIE_KEY = mkOption {
type = types.str;
default = "session";
description = "Name of the session cookie";
};
COCOON_DB_TYPE = mkOption {
type = types.str;
default = "sqlite";
description = "Type of database to use (sqlite or postgres)";
};
COCOON_DB_NAME = mkOption {
type = types.str;
default = "/var/lib/cocoon/cocoon.db";
description = "Name of the SQLite database file (if using sqlite)";
};
COCOON_DATABASE_URL = mkOption {
type = types.nullOr types.str;
default = null;
example = "postgres://cocoon:password@localhost:5432/cocoon?sslmode=disable";
description = "Database connection URL";
};
};
};
description = ''
Environment variables to set for the service. Secrets should be
specified using {option}`environmentFile`.
Refer to <https://github.com/haileyok/cocoon/blob/main/.env.example>
and <https://github.com/haileyok/cocoon/blob/main/README.md> for
available environment variables.
'';
};
environmentFiles = mkOption {
type = types.listOf types.path;
default = [ ];
description = ''
File to load environment variables from. Loaded variables override
values set in {option}`environment`.
Use it to set values of `COCOON_ADMIN_PASSWORD` and `COCOON_SESSION_SECRE`.
Generate `COCOON_ADMIN_PASSWORD` with
```
openssl rand -hex 16
```
Generate `COCOON_SESSION_SECRET` with
```
openssl rand -hex 32
```
'';
};
};
config = mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
systemd.services.cocoon = {
description = "cocoon";
after = [
"network-online.target"
]
++ optional (cfg.settings.COCOON_DB_TYPE == "postgres") "postgresql.service";
wants = [
"network-online.target"
]
++ optional (cfg.settings.COCOON_DB_TYPE == "postgres") "postgresql.service";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${getExe cfg.package} run";
Environment = lib.mapAttrsToList (k: v: "${k}=${if builtins.isInt v then toString v else v}") (
lib.filterAttrs (_: v: v != null) cfg.settings
);
EnvironmentFile = cfg.environmentFiles;
StateDirectory = "cocoon";
StateDirectoryMode = "0755";
Restart = "always";
# Hardening
RemoveIPC = true;
CapabilityBoundingSet = [ "CAP_NET_BIND_SERVICE" ];
NoNewPrivileges = true;
PrivateDevices = true;
ProtectClock = true;
ProtectKernelLogs = true;
ProtectControlGroups = true;
ProtectKernelModules = true;
PrivateMounts = true;
SystemCallArchitectures = [ "native" ];
MemoryDenyWriteExecute = true;
RestrictNamespaces = true;
RestrictSUIDSGID = true;
ProtectHostname = true;
LockPersonality = true;
ProtectKernelTunables = true;
RestrictAddressFamilies = [
"AF_UNIX"
"AF_INET"
"AF_INET6"
];
RestrictRealtime = true;
DeviceAllow = [ "" ];
ProtectSystem = "strict";
ProtectProc = "invisible";
ProcSubset = "pid";
ProtectHome = true;
PrivateUsers = true;
PrivateTmp = true;
UMask = "0077";
};
};
};
meta.maintainers = with lib.maintainers; [ isabelroses ];
}
@@ -267,6 +267,7 @@ in
"${cfg.dataDir}/storage/framework/sessions"
"${cfg.dataDir}/storage/framework/testing"
"${cfg.dataDir}/storage/framework/views"
"${cfg.dataDir}/storage/import-jobs"
"${cfg.dataDir}/storage/jobs"
"${cfg.dataDir}/storage/logs"
"${cfg.dataDir}/storage/submission-routines"
@@ -130,8 +130,12 @@ let
inherit (finalPackage) GI_TYPELIB_PATH;
};
# Packages needed at runtime
weblatePath = with pkgs; [
gitSVN
subversion
gettext
fontconfig
borgbackup
#optional
@@ -141,6 +145,7 @@ let
mercurial
openssh
];
in
{
+90 -450
View File
@@ -1,528 +1,168 @@
{
options,
config,
lib,
pkgs,
...
}:
with lib;
let
inherit (lib.types)
attrsOf
bool
listOf
nullOr
path
str
submodule
;
inherit (lib)
concatMapStringsSep
concatStringsSep
filter
getExe
literalExpression
maintainers
mapAttrs'
mkDefault
mkEnableOption
mkIf
mkMerge
mkOption
mkPackageOption
mkRenamedOptionModule
nameValuePair
optional
optionalAttrs
remove
;
cfg = config.services.traefik;
opt = options.services.traefik;
# JSON is considered valid YAML by Traefik.
format = pkgs.formats.json { };
format = pkgs.formats.toml { };
staticFile =
if cfg.static.file == null then
format.generate "static_config.json" cfg.static.settings
dynamicConfigFile =
if cfg.dynamicConfigFile == null then
format.generate "config.toml" cfg.dynamicConfigOptions
else
cfg.static.file;
cfg.dynamicConfigFile;
finalStaticFile = if cfg.useEnvSubst then "/run/traefik/config.json" else staticFile;
staticConfigFile =
if cfg.staticConfigFile == null then
format.generate "config.toml" (
recursiveUpdate cfg.staticConfigOptions {
providers.file.filename = "${dynamicConfigFile}";
}
)
else
cfg.staticConfigFile;
finalStaticConfigFile =
if cfg.environmentFiles == [ ] then staticConfigFile else "/run/traefik/config.toml";
in
{
imports = [
(mkRenamedOptionModule
[
"services"
"traefik"
"staticConfigFile"
]
[
"services"
"traefik"
"static"
"file"
]
)
(mkRenamedOptionModule
[
"services"
"traefik"
"staticConfigOptions"
]
[
"services"
"traefik"
"static"
"settings"
]
)
(mkRenamedOptionModule
[
"services"
"traefik"
"dynamicConfigFile"
]
[
"services"
"traefik"
"dynamic"
"file"
]
)
(mkRenamedOptionModule
[
"services"
"traefik"
"dynamicConfigOptions"
]
[
"services"
"traefik"
"dynamic"
"settings"
]
)
];
options.services.traefik = {
enable = mkEnableOption "Traefik web server";
package = mkPackageOption pkgs "traefik" { };
static = {
file = mkOption {
default = null;
example = literalExpression "/path/to/static_config.toml";
type = nullOr path;
description = ''
Path to Traefik's static configuration file.
staticConfigFile = mkOption {
default = null;
example = literalExpression "/path/to/static_config.toml";
type = types.nullOr types.path;
description = ''
Path to traefik's static configuration to use.
(Using that option has precedence over `staticConfigOptions` and `dynamicConfigOptions`)
'';
};
::: {.note}
Using this option has precedence over {option}`services.traefik.static.settings`.
:::
'';
staticConfigOptions = mkOption {
description = ''
Static configuration for Traefik.
'';
type = format.type;
default = {
entryPoints.http.address = ":80";
};
settings = mkOption {
description = ''
Static configuration for Traefik, written in Nix.
example = {
entryPoints.web.address = ":8080";
entryPoints.http.address = ":80";
::: {.note}
This will be serialized to JSON (which is considered valid YAML) at build, and passed to Traefik as `--configfile`.
:::
'';
type = format.type;
default = {
entryPoints.http.address = ":80";
};
example = {
entryPoints = {
"web" = {
address = ":80";
http.redirections.entryPoint = {
permanent = true;
scheme = "https";
to = "websecure";
};
};
"websecure" = {
address = ":443";
asDefault = true;
};
};
};
api = { };
};
};
dynamic = {
file = mkOption {
default = null;
example = literalExpression "/path/to/dynamic_config.toml";
type = nullOr path;
description = ''
Path to Traefik's dynamic configuration file.
dynamicConfigFile = mkOption {
default = null;
example = literalExpression "/path/to/dynamic_config.toml";
type = types.nullOr types.path;
description = ''
Path to traefik's dynamic configuration to use.
(Using that option has precedence over `dynamicConfigOptions`)
'';
};
::: {.note}
You cannot use this option alongside the declarative configuration options.
:::
'';
};
dir = mkOption {
default = null;
example = literalExpression "/var/lib/traefik/dynamic";
type = nullOr path;
description = ''
Path to the directory Traefik should watch for configuration files.
::: {.warning}
Files in this directory matching the glob `_nixos-*` (reserved for Nix-managed dynamic configurations) will be deleted as part of
`systemd-tmpfiles-resetup.service`, _**regardless of their origin.**_.
:::
'';
};
files = mkOption {
type = attrsOf (submodule {
options.settings = mkOption {
type = format.type;
description = ''
Dynamic configuration for Traefik, written in Nix.
::: {.note}
This will be serialized to JSON (which is considered valid YAML) at build, and passed as part of the static file.
:::
'';
example = {
http.routers."api" = {
service = "api@internal";
rule = "Host(`localhost`)";
};
};
};
});
default = { };
example = {
"dashboard".settings = {
http.routers."api" = {
service = "api@internal";
rule = "Host(`198.51.100.1`)";
};
};
dynamicConfigOptions = mkOption {
description = ''
Dynamic configuration for Traefik.
'';
type = format.type;
default = { };
example = {
http.routers.router1 = {
rule = "Host(`localhost`)";
service = "service1";
};
description = ''
Dynamic configuration files to write. These are symlinked in `services.traefik.dynamic.dir` upon activation,
allowing configuration to be upated without restarting the primary daemon.
::: {.note}
Due to [a limitation in Traefik](https://github.com/traefik/traefik/issues/10890); any syntax error in a dynamic configuration will cause the _**entire file provider**_ to be ignored.
This may cause interuption in service, which may include access to the Traefik dashboard, if [enabled and configured](https://doc.traefik.io/traefik/operations/dashboard).
:::
'';
};
# TODO: Drop in 26.11.
settings = mkOption {
type = format.type;
description = ''
Dynamic configuration for Traefik, written in Nix.
This option is intended for easily migrating pre-26.05 Traefik configurations, and will be removed in NixOS 26.11.
::: {.note}
Configurations added here will be translated into a file for {option}`services.traefik.dynamic.files`, named `custom-migrated`.
:::
'';
default = { };
example = {
http.routers."api" = {
service = "api@internal";
rule = "Host(`localhost`)";
};
};
http.services.service1.loadBalancer.servers = [ { url = "http://localhost:8080"; } ];
};
};
dataDir = mkOption {
default = "/var/lib/traefik";
type = path;
type = types.path;
description = ''
Location for any persistent data Traefik creates, such as the ACME certificate store.
::: {.note}
If left as the default value, this directory will automatically be created
before the Traefik server starts, otherwise you are responsible for ensuring
the directory exists with appropriate ownership and permissions.
:::
'';
};
user = mkOption {
default = "traefik";
example = "docker";
type = str;
description = ''
User under which Traefik runs.
::: {.note}
If left as the default value this user will automatically be created
on system activation, otherwise you are responsible for
ensuring the user exists before the Traefik service starts.
:::
Location for any persistent data traefik creates, ie. acme
'';
};
group = mkOption {
default = "traefik";
type = str;
type = types.str;
example = "docker";
description = ''
Primary group under which Traefik runs.
For the Docker backend, use {option}`services.traefik.supplementaryGroups` instead of overriding this option.
::: {.note}
If left as the default value this group will automatically be created
on system activation, otherwise you are responsible for
ensuring the group exists before the Traefik service starts.
:::
Set the group that traefik runs under.
For the docker backend this needs to be set to `docker` instead.
'';
};
supplementaryGroups = mkOption {
default = [ ];
type = listOf str;
example = [ "docker" ];
description = ''
Additional groups under which Traefik runs.
This can be used to give additional permissions, such as the group required by the `docker` provider.
::: {.note}
With the `docker` provider, Traefik manages connection to containers via the Docker socket,
which requires membership of the `docker` group for write access.
:::
'';
};
package = mkPackageOption pkgs "traefik" { };
environmentFiles = mkOption {
default = [ ];
type = listOf path;
type = types.listOf types.path;
example = [ "/run/secrets/traefik.env" ];
description = ''
Files to load as an environment file just before Traefik starts.
This can be used to pass secrets such as [DNS challenge API tokens](https://doc.traefik.io/traefik/https/acme/#providers) or [EAB credentials](https://doc.traefik.io/traefik/reference/static-configuration/env/).
```
DESEC_TOKEN=
TRAEFIK_CERTIFICATESRESOLVERS_<NAME>_ACME_EAB_HMACENCODED=
TRAEFIK_CERTIFICATESRESOLVERS_<NAME>_ACME_EAB_KID=
```
::: {.warn}
The traefik static configuration methods (env, CLI, and file) are mutually exclusive.
:::
Rather than setting secret values with the traefik environment variable syntax,
it is recommended to set arbitrary environment variables, then reference them with `$VARNAME` in e.g.
{option}`services.traefik.static.settings`, like so:
```nix
{
services.traefik = {
static.settings.somesecretvalue = "$SECRETNAME";
useEnvSubst = true; # Necessary in order to use environment variables in the Traefik config.
environmentFiles = [ /path/to/file/that/defines/SECRETNAME ];
};
}
```
'';
};
useEnvSubst = mkOption {
default = cfg.environmentFiles != [ ];
defaultText = "config.services.traefik.environmentFiles != [ ]";
type = bool;
example = true;
description = ''
Whether to use `envSubst` in the `ExecStartPre` phase to augment the generated static config. See {option}`services.traefik.environmentFiles`.
::: {.note}
If you use environment files with Traefik but *do not* utilise environment variables in the static config, this can safely be disabled to reduce startup time.
:::
Files to load as environment file. Environment variables from this file
will be substituted into the static configuration file using envsubst.
'';
};
};
config = mkIf cfg.enable {
assertions = [
{
assertion =
cfg.static.file != opt.static.file.default -> cfg.static.settings == opt.static.settings.default;
message = ''
The 'services.traefik.static.file' and 'services.traefik.static.settings'
options are mutually exclusive for the Traefik static config.
It is recommended to use 'settings'.
'';
}
{
assertion =
cfg.static.file != opt.static.file.default
-> (
cfg.dynamic.files == opt.dynamic.files.default
&& cfg.dynamic.dir == opt.dynamic.dir.default
&& cfg.dynamic.file == opt.dynamic.file.default
);
message = ''
None of the dynamic configuration options may be used if Traefik is being managed imperatively.
The following options have non-default values:
- ${
concatMapStringsSep "\n - " (str: "'services.traefik.dynamic.${str}'") (
filter (attr: cfg.dynamic.${attr} != opt.dynamic.${attr}.default) [
"files"
"dir"
"file"
"settings" # TODO: Drop in 26.11.
]
)
}
'';
}
{
assertion =
cfg.dynamic.file != opt.dynamic.file.default -> cfg.dynamic.dir == opt.dynamic.dir.default;
message = ''
The 'services.traefik.dynamic.file' and 'services.traefik.dynamic.dir' options
are mutually exclusive for the Traefik dynamic config. It is recommended to use
'services.traefik.dynamic.dir' with 'services.traefik.dynamic.files'.
'';
}
{
assertion =
cfg.dynamic.files != opt.dynamic.files.default -> cfg.dynamic.dir != opt.dynamic.dir.default;
message = ''
'services.traefik.dynamic.files' requires the dynamic file provider to be set
to a directory. Please set a path for 'services.traefik.dynamic.dir'.
'';
}
{
assertion = cfg.group != "docker";
message = ''
Setting the primary group to 'docker' will cause files, such as those generated
by 'services.traefik.dynamic.files', to be owned by the group 'docker', which
may be a security risk. Use 'services.traefik.supplementaryGroups' instead.
'';
}
];
warnings =
optional (!(builtins.elem "docker" cfg.supplementaryGroups -> config.virtualisation.docker.enable))
"'services.traefik.supplementaryGroups' contains the 'docker' group, but 'services.docker' is not enabled."
++ optional (cfg.dynamic.settings != opt.dynamic.settings.default) ''
'services.traefik.dynamic.settings' is in use, but that option is deprecated.
Please migrate your configuration to an explicit file instead.
You may do so by moving the value of 'services.traefik.dynamic.settings' to
'services.traefik.dynamic.files.<name>.settings', where <name> is an arbitrary
string that ideally identifies the configuration's purpose.
The following files define 'services.traefik.dynamic.settings' and should be migrated:
- ${
concatStringsSep "\n - " (
remove ./traefik.nix (map (attr: attr.file) opt.dynamic.settings.definitionsWithLocations)
)
}
'';
# https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes
boot.kernel.sysctl = {
"net.core.rmem_max" = 2500000;
"net.core.wmem_max" = 2500000;
};
# If a dynamic file or directory has been set, add it as a provider in the static configuration
services.traefik = mkIf (cfg.static.file == opt.static.file.default) {
dynamic.files = mkIf (cfg.dynamic.settings != opt.dynamic.settings.default) {
"custom-migrated".settings = cfg.dynamic.settings;
};
static.settings =
mkIf (cfg.dynamic.dir != opt.dynamic.dir.default || cfg.dynamic.file != opt.dynamic.file.default)
{
providers.file = {
directory = mkIf (cfg.dynamic.dir != opt.dynamic.dir.default) cfg.dynamic.dir;
filename = mkIf (cfg.dynamic.file != opt.dynamic.file.default) cfg.dynamic.file;
watch = mkDefault true;
};
};
};
systemd.tmpfiles.rules = [ "d '${cfg.dataDir}' 0700 traefik traefik - -" ];
systemd.services.traefik = {
description = "Traefik reverse proxy";
description = "Traefik web server";
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
startLimitIntervalSec = 86400;
startLimitBurst = 5;
serviceConfig = {
Documentation = "https://doc.traefik.io/traefik/";
EnvironmentFile = cfg.environmentFiles;
ExecStartPre = optional cfg.useEnvSubst "${getExe pkgs.envsubst} -i '${staticFile}' > '${finalStaticFile}'";
ExecStart = "${getExe cfg.package} --configfile=${finalStaticFile}";
Type = "notify";
User = cfg.user;
ExecStartPre = lib.optional (cfg.environmentFiles != [ ]) (
pkgs.writeShellScript "pre-start" ''
umask 077
${pkgs.envsubst}/bin/envsubst -i "${staticConfigFile}" > "${finalStaticConfigFile}"
''
);
ExecStart = "${cfg.package}/bin/traefik --configfile=${finalStaticConfigFile}";
Type = "simple";
User = "traefik";
Group = cfg.group;
SupplementaryGroups = mkIf (cfg.supplementaryGroups != [ ]) cfg.supplementaryGroups;
Restart = "always";
Restart = "on-failure";
AmbientCapabilities = "cap_net_bind_service";
CapabilityBoundingSet = "cap_net_bind_service";
NoNewPrivileges = true;
TasksMax = 64;
LimitNPROC = 64;
LimitNOFILE = 1048576;
PrivateTmp = true;
PrivateDevices = true;
ProtectHome = true;
ProtectSystem = "strict";
ProtectKernelTunables = true;
ProtectControlGroups = true;
ProtectSystem = "full";
ReadWritePaths = [ cfg.dataDir ];
ReadOnlyPaths = optional (cfg.dynamic.dir != null) cfg.dynamic.dir;
RuntimeDirectoryMode = "0700";
RuntimeDirectory = "traefik";
WorkingDirectory = cfg.dataDir;
WatchdogSec = "1s";
};
};
systemd.tmpfiles.settings."10-traefik" = mkMerge [
(mkIf (cfg.user == "traefik") {
${cfg.dataDir}.d = {
inherit (cfg) user group;
mode = "0700";
};
})
(mkIf (cfg.dynamic.dir != null) (
{
${cfg.dynamic.dir}.d = {
inherit (cfg) user group;
mode = "0700";
};
"${cfg.dynamic.dir}/_nixos-*".r = { };
}
// (mapAttrs' (
name: value:
nameValuePair "${cfg.dynamic.dir}/_nixos-${name}.yml" {
"L+" = {
mode = "0444";
argument = toString (format.generate name value.settings);
};
}
) cfg.dynamic.files)
))
];
users = {
users = optionalAttrs (cfg.user == "traefik") {
traefik = {
inherit (cfg) group;
isSystemUser = true;
};
};
groups = optionalAttrs (cfg.group == "traefik") { traefik = { }; };
users.users.traefik = {
group = "traefik";
home = cfg.dataDir;
createHome = true;
isSystemUser = true;
};
users.groups.traefik = { };
};
meta.maintainers = with maintainers; [
jackr
therealgramdalf
];
}
+8 -2
View File
@@ -823,13 +823,15 @@ in
|| config.services.greetd.enable
|| config.services.displayManager.ly.enable
|| config.services.displayManager.lemurs.enable
|| config.services.displayManager.plasma-login-manager.enable
);
in
mkIf default (mkDefault true);
services.xserver.videoDrivers = mkIf (cfg.videoDriver != null) [ cfg.videoDriver ];
# FIXME: somehow check for unknown driver names.
# We ignore unknown drivers here because they may be resolved by other modules (e.g., the Nvidia
# module). We assert that all specified drivers were eventually found in the assertions below.
services.xserver.drivers = flip concatMap cfg.videoDrivers (
name:
lib.optional (videoDrivers ? ${name}) (
@@ -861,7 +863,11 @@ in
assertion = cfg.upscaleDefaultCursor -> cfg.dpi != null;
message = "Specify `config.services.xserver.dpi` to upscale the default cursor.";
}
];
]
++ map (driver: {
assertion = builtins.elem driver (builtins.catAttrs "name" cfg.drivers);
message = "Unknown X11 driver ${driver} specified in `services.xserver.videoDrivers`.";
}) cfg.videoDrivers;
environment.etc =
(optionalAttrs cfg.exportConfiguration {
@@ -58,10 +58,6 @@ in
assertion = config.boot.postBootCommands == "";
message = "nixos-init cannot be used with boot.postBootCommands";
}
{
assertion = config.powerManagement.powerUpCommands == "";
message = "nixos-init cannot be used with powerManagement.powerUpCommands";
}
];
})
];
-1
View File
@@ -30,7 +30,6 @@ let
);
postBootCommands = pkgs.writeText "local-cmds" ''
${config.boot.postBootCommands}
${config.powerManagement.powerUpCommands}
'';
};
};
+41 -6
View File
@@ -233,6 +233,8 @@ let
proxy_env = config.networking.proxy.envVars;
json = pkgs.formats.json { };
in
{
@@ -356,6 +358,28 @@ in
'';
};
generatorEnvironment = mkOption {
type = types.attrsOf types.str;
default = { };
example = {
MY_VAR = "my-value";
};
description = ''
Environment variables for systemd generators.
The `PATH` environment variable is populated via `systemd.generatorPath`.
'';
};
generatorPath = mkOption {
type = types.listOf types.package;
default = [ ];
example = lib.literalExpression "[ pkgs.hello ]";
description = ''
Packages added to the `PATH` environment variable of all systemd generators.
'';
};
shutdown = mkOption {
type = types.attrsOf types.path;
default = { };
@@ -636,6 +660,12 @@ in
"systemd/user-preset/00-nixos.preset".text = ''
ignore *
'';
"systemd/generator-environment.json".source =
json.generate "systemd-generator-environment.json" cfg.generatorEnvironment;
"systemd/system-environment-generators/env-generator".source =
"${config.system.nixos-init.package}/bin/env-generator";
};
services.dbus.enable = true;
@@ -683,12 +713,7 @@ in
systemd.managerEnvironment = {
# Doesn't contain systemd itself - everything works so it seems to use the compiled-in value for its tools
# util-linux is needed for the main fsck utility wrapping the fs-specific ones
PATH = lib.makeBinPath (
config.system.fsPackages
++ [ cfg.package.util-linux ]
# systemd-ssh-generator needs sshd in PATH
++ lib.optional config.services.openssh.enable config.services.openssh.package
);
PATH = lib.makeBinPath (config.system.fsPackages ++ [ cfg.package.util-linux ]);
LOCALE_ARCHIVE = "/run/current-system/sw/lib/locale/locale-archive";
TZDIR = "/etc/zoneinfo";
# If SYSTEMD_UNIT_PATH ends with an empty component (":"), the usual unit load path will be appended to the contents of the variable
@@ -704,6 +729,16 @@ in
DefaultIPAccounting = lib.mkDefault true;
};
# These are needed for systemd-fstab-generator to schedule systemd-fsck@
# units.
systemd.generatorPath = config.system.fsPackages ++ [
cfg.package.util-linux
];
systemd.generatorEnvironment = {
PATH = lib.makeBinPath cfg.generatorPath;
};
system.requiredKernelConfig = map config.lib.kernelConfig.isEnabled [
"DEVTMPFS"
"CGROUPS"
@@ -92,6 +92,7 @@ let
# Declare root explicitly to avoid shellcheck warnings, it comes from the env
declare root
mkdir -p "$root/usr/bin"
mkdir -p "$root/etc" "$root/var/lib"
chmod 0755 "$root/etc" "$root/var/lib"
mkdir -p "$root/var/lib/private" "$root/root" /run/nixos-containers
+2
View File
@@ -257,6 +257,7 @@ in
authelia = runTest ./authelia.nix;
auto-cpufreq = runTest ./auto-cpufreq.nix;
autobrr = runTest ./autobrr.nix;
autosuspend = runTest ./autosuspend.nix;
avahi = runTest {
imports = [ ./avahi.nix ];
_module.args.networkd = false;
@@ -382,6 +383,7 @@ in
};
cockpit = runTest ./cockpit.nix;
cockroachdb = runTestOn [ "x86_64-linux" ] ./cockroachdb.nix;
cocoon = runTest ./cocoon.nix;
code-server = runTest ./code-server.nix;
coder = runTest ./coder.nix;
collectd = runTest ./collectd.nix;
+30
View File
@@ -0,0 +1,30 @@
{ lib, pkgs, ... }:
{
name = "autosuspend";
meta.maintainers = [ lib.maintainers.anthonyroussel ];
nodes = {
machine = {
services.autosuspend = {
enable = true;
settings = {
interval = 5;
idle_time = 5;
suspend_cmd = "${pkgs.coreutils}/bin/touch /tmp/suspended";
};
# Return exit code 1 to trigger suspend
checks.ExternalCommand.command = "exit 1";
};
};
};
testScript = ''
start_all()
machine.wait_for_unit("autosuspend.service")
machine.wait_for_file("/tmp/suspended")
'';
}
+37
View File
@@ -0,0 +1,37 @@
{ lib, ... }:
{
name = "cocoon";
nodes.machine =
{ pkgs, ... }:
{
services.cocoon = {
enable = true;
settings = {
COCOON_DID = "did:web:cocoon.example.com";
COCOON_HOSTNAME = "cocoon.example.com";
COCOON_CONTACT_EMAIL = "test@example.com";
# Snake oil testing credentials
COCOON_ADMIN_PASSWORD = "84f54c1229e02b662214e2af2df97cb6";
COCOON_SESSION_SECRET = "8ed099b41bb67939bf4e796fd4bd618add775a9265bcb32c63d00341a0f71b6c";
COCOON_ROTATION_KEY_PATH =
pkgs.runCommand "rotation-key" { nativeBuildInputs = [ pkgs.cocoon ]; }
''
cocoon create-rotation-key --out $out
'';
COCOON_JWK_PATH = pkgs.runCommand "jwk-key" { nativeBuildInputs = [ pkgs.cocoon ]; } ''
cocoon create-private-jwk --out $out
'';
};
};
};
testScript = ''
machine.wait_for_unit("cocoon.service")
machine.wait_for_open_port(8080)
machine.succeed("curl --fail http://localhost:8080")
'';
meta.maintainers = [ lib.maintainers.isabelroses ];
}
+1 -1
View File
@@ -25,7 +25,7 @@ makeTest {
./common/auto-format-root-device.nix
];
systemd.services.backdoor.conflicts = [ "sleep.target" ];
powerManagement.powerDownCommands = "systemctl --no-block stop backdoor.service";
powerManagement.resumeCommands = "systemctl --no-block restart backdoor.service";
virtualisation.emptyDiskImages = [ (2 * config.virtualisation.memorySize) ];
+2 -3
View File
@@ -19,8 +19,6 @@ in
nodes.machine =
{ pkgs, ... }:
{
imports = lib.optionals (!systemdStage1) [ ./common/auto-format-root-device.nix ];
virtualisation = {
emptyDiskImages = [ 512 ];
useBootLoader = true;
@@ -30,7 +28,6 @@ in
# the new root device is /dev/vdb
# an empty 512MiB drive, containing no Nix store.
mountHostNixStore = true;
fileSystems."/".autoFormat = lib.mkIf systemdStage1 true;
};
boot.loader.systemd-boot.enable = true;
@@ -90,6 +87,8 @@ in
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo "" | cryptsetup luksFormat /dev/vdb --batch-mode")
machine.succeed("echo "" | cryptsetup luksOpen /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks-wrong-keyfile.conf")
machine.succeed("sync")
machine.crash()
+5 -1
View File
@@ -5,7 +5,6 @@
nodes.machine =
{ pkgs, ... }:
{
imports = [ ./common/auto-format-root-device.nix ];
# Use systemd-boot
virtualisation = {
@@ -48,7 +47,12 @@
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdc -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdc cryptroot2")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot2")
# Boot from the encrypted disk
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks.conf")
+5 -7
View File
@@ -1,6 +1,8 @@
{ lib, ... }:
let
name = "continuwuity";
user = "alice";
pass = "my-secret-password";
in
{
inherit name;
@@ -12,8 +14,7 @@ in
settings.global = {
server_name = name;
address = [ "0.0.0.0" ];
allow_registration = true;
yes_i_am_very_very_sure_i_want_an_open_registration_server_prone_to_abuse = true;
admin_execute = [ "users create ${user} ${pass}" ];
};
extraEnvironment.RUST_BACKTRACE = "yes";
};
@@ -30,13 +31,10 @@ in
async def main() -> None:
# Connect to continuwuity
client = nio.AsyncClient("http://continuwuity:6167", "alice")
# Register as user alice
response = await client.register("alice", "my-secret-password")
client = nio.AsyncClient("http://continuwuity:6167", "${user}")
# Log in as user alice
response = await client.login("my-secret-password")
response = await client.login("${pass}")
# Create a new room
response = await client.room_create(federate=False)
+12 -12
View File
@@ -28,18 +28,18 @@
def open_omnom():
# Add-ons Manager
server.succeed("xdotool mousemove --sync 960 90 click 1")
server.succeed("xdotool mousemove --sync 1221 83 click 1")
server.sleep(10)
# omnom
server.succeed("xdotool mousemove --sync 700 190 click 1")
server.succeed("xdotool mousemove --sync 877 184 click 1")
server.sleep(10)
service_url = "http://127.0.0.1:${toString port}"
service_url = "http://127.0.0.1:${port}/"
server.start()
server.wait_for_unit("omnom.service")
server.wait_for_open_port(${toString port})
server.wait_for_open_port(${port})
server.succeed(f"curl -sf '{service_url}'")
output = server.succeed("omnom create-user user user@example.com")
@@ -59,23 +59,23 @@
open_omnom()
# token
server.succeed("xdotool mousemove --sync 700 350 click 1")
server.succeed("xdotool mousemove --sync 943 345 click 1")
server.succeed(f"xdotool type {token}")
server.sleep(10)
# url
server.succeed("xdotool mousemove --sync 700 470 click 1")
server.succeed("xdotool mousemove --sync 943 452 click 1")
server.succeed(f"xdotool type '{service_url}'")
server.sleep(10)
# submit
server.succeed("xdotool mousemove --sync 900 520 click 1")
server.succeed("xdotool mousemove --sync 1156 485 click 1")
server.sleep(10)
open_omnom()
# save
server.succeed("xdotool mousemove --sync 900 520 click 1")
server.succeed("xdotool mousemove --sync 1151 459 click 1")
server.sleep(10)
# refresh
@@ -85,19 +85,19 @@
server.screenshot("home.png")
# view bookmarks
server.succeed("xdotool mousemove --sync 300 130 click 1")
server.succeed("xdotool mousemove --sync 377 133 click 1")
server.sleep(10)
# view snapshot
server.succeed("xdotool mousemove --sync 970 230 click 1")
server.succeed("xdotool mousemove --sync 414 307 click 1")
server.sleep(10)
server.succeed("xdotool mousemove --sync 160 340 click 1")
server.succeed("xdotool mousemove --sync 993 510 click 1")
server.sleep(10)
server.screenshot("screenshot.png")
# view details
server.succeed("xdotool mousemove --sync 290 200 click 1")
server.succeed("xdotool mousemove --sync 400 230 click 1")
server.sleep(10)
server.screenshot("snapshot_details.png")
+1 -1
View File
@@ -12,7 +12,7 @@
{
imports = [ ./common/user-account.nix ];
services.xserver.enable = true;
services.displayManager.sddm.enable = true;
services.displayManager.plasma-login-manager.enable = true;
# FIXME: this should be testing Wayland
services.displayManager.defaultSession = "plasmax11";
services.desktopManager.plasma6.enable = true;
+2 -1
View File
@@ -38,7 +38,6 @@ in
};
};
virtualisation.rootDevice = "/dev/mapper/cryptroot";
virtualisation.fileSystems."/".autoFormat = true;
boot.initrd.secrets."/etc/cryptroot.key" = keyfile;
};
};
@@ -47,6 +46,8 @@ in
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("cryptsetup luksFormat -q --iter-time=1 -d ${keyfile} /dev/vdb")
machine.succeed("cryptsetup luksOpen --key-file ${keyfile} /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
# Boot from the encrypted disk
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks.conf")
+4 -1
View File
@@ -31,7 +31,6 @@
cryptroot2.device = "/dev/vdc";
};
virtualisation.rootDevice = "/dev/mapper/cryptroot";
virtualisation.fileSystems."/".autoFormat = true;
# test mounting device unlocked in initrd after switching root
virtualisation.fileSystems."/cryptroot2".device = "/dev/mapper/cryptroot2";
};
@@ -40,7 +39,11 @@
testScript = ''
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdc -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdc cryptroot2")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot2")
+2 -1
View File
@@ -32,7 +32,6 @@
};
};
virtualisation.rootDevice = "/dev/mapper/cryptroot";
virtualisation.fileSystems."/".autoFormat = true;
};
};
@@ -40,6 +39,8 @@
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("PASSWORD=supersecret SYSTEMD_LOG_LEVEL=debug systemd-cryptenroll --tpm2-pcrs= --tpm2-device=auto /dev/vdb |& systemd-cat")
# Boot from the encrypted disk
+4 -1
View File
@@ -79,9 +79,12 @@ in
};
testScript = ''
# Create encrypted volume
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n ${passphrase} | cryptsetup luksFormat -q --iter-time=1 /dev/vdb -")
machine.succeed("echo -n ${passphrase} | cryptsetup luksOpen -q /dev/vdb cryptroot")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot")
machine.succeed("echo -n ${passphrase} | cryptsetup luksFormat -q --iter-time=1 /dev/vdc -")
machine.succeed("echo -n ${passphrase} | cryptsetup luksOpen -q /dev/vdc cryptroot2")
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot2")
+5
View File
@@ -19,6 +19,7 @@ in
nodes = {
virthost = {
environment.systemPackages = [ pkgs.jq ];
services.openssh = {
enable = true;
settings.PermitRootLogin = "prohibit-password";
@@ -48,6 +49,10 @@ in
virthost.succeed("cp '${snakeOilEd25519PrivateKey}' ~/.ssh/id_ed25519")
virthost.succeed("chmod 600 ~/.ssh/id_ed25519")
with subtest("Check the environment generator"):
print(virthost.succeed("jq '.' /etc/systemd/generator-environment.json"))
print(virthost.succeed("/etc/systemd/system-environment-generators/env-generator"))
with subtest("ssh into a container with AF_UNIX"):
virthost.wait_for_unit("container@guest.service")
virthost.wait_until_succeeds("ssh -i ~/.ssh/id_ed25519 unix/run/systemd/nspawn/unix-export/guest/ssh echo meow | grep meow")
+3 -1
View File
@@ -59,7 +59,9 @@ stdenv.mkDerivation rec {
++ lib.optional pipewireSupport pipewire
++ lib.optional stdenv.hostPlatform.isLinux alsa-lib;
TARGET = lib.optionalString stdenv.hostPlatform.isDarwin "MACOS";
env = lib.optionalAttrs stdenv.hostPlatform.isDarwin {
TARGET = "MACOS";
};
cmakeFlags = [
(lib.cmakeBool "BUILD_WITH_PULSE" pulseaudioSupport)
@@ -26,13 +26,13 @@
stdenv.mkDerivation rec {
pname = if withGui then "elements" else "elementsd";
version = "23.3.1";
version = "23.3.2";
src = fetchFromGitHub {
owner = "ElementsProject";
repo = "elements";
rev = "elements-${version}";
sha256 = "sha256-hqHKH9B6EITwZ4F+YdPJI4n3Z3EeXdPYbzRoNODlThY=";
sha256 = "sha256-NLLM+stYOXcnAjEfXRerjvgMXM8jFSOyZhu/A0ZTnRw=";
};
nativeBuildInputs = [
@@ -11717,6 +11717,19 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
nvim-next = buildVimPlugin {
pname = "nvim-next";
version = "0-unstable-2024-10-09";
src = fetchFromGitHub {
owner = "ghostbuster91";
repo = "nvim-next";
rev = "9c71ab7dd934ed82376cb4a26d3a8baa0048f0e1";
hash = "sha256-ACDsnUqTYok+uea9O/vW4qu/GJgV9d6WTdUCRjSALvo=";
};
meta.homepage = "https://github.com/ghostbuster91/nvim-next/";
meta.hydraPlatforms = [ ];
};
nvim-nonicons = buildVimPlugin {
pname = "nvim-nonicons";
version = "0-unstable-2026-02-12";
@@ -10,13 +10,13 @@
}:
vimUtils.buildVimPlugin rec {
pname = "codediff.nvim";
version = "2.19.0";
version = "2.25.0";
src = fetchFromGitHub {
owner = "esmuellert";
repo = "codediff.nvim";
tag = "v${version}";
hash = "sha256-l8bP8NNCoE7SLRMRh+Nq5OxUD+xdJ2qYyWbA140aFV0=";
hash = "sha256-ofAmNyVlq2Ta4b2bdr1N2U658xXm+wEmIpg3z/X0QgI=";
};
dependencies = [ vimPlugins.nui-nvim ];
@@ -900,6 +900,7 @@ https://github.com/gpanders/nvim-moonwalk/,,
https://github.com/SmiteshP/nvim-navbuddy/,,
https://github.com/smiteshp/nvim-navic/,HEAD,
https://github.com/AckslD/nvim-neoclip.lua/,,
https://github.com/ghostbuster91/nvim-next/,HEAD,
https://github.com/ya2s/nvim-nonicons/,,
https://github.com/rcarriga/nvim-notify/,,
https://github.com/LhKipp/nvim-nu/,HEAD,
@@ -0,0 +1,21 @@
{
lib,
vscode-utils,
}:
vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "packaging";
publisher = "claui";
version = "0.2.5";
hash = "sha256-WGs00Q1oa8Nz9dpKn3iZSjrhR0VKUwJWPGdm+wWtoxs=";
};
meta = {
changelog = "https://github.com/claui/vscode-packaging/releases";
description = "Visual Studio Code extension for PKGBUILDs in the Arch User Repository (AUR)";
downloadPage = "https://marketplace.visualstudio.com/items?itemName=claui.packaging";
homepage = "https://github.com/claui/vscode-packaging";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ ilai-deutel ];
};
}
@@ -989,6 +989,8 @@ let
};
};
claui.packaging = callPackage ./claui.packaging { };
cmschuetz12.wal = buildVscodeMarketplaceExtension {
mktplcRef = {
name = "wal";
@@ -1141,8 +1143,8 @@ let
mktplcRef = {
publisher = "DanielGavin";
name = "ols";
version = "0.1.44";
hash = "sha256-b8zf6p5N51VHSgyFWsFBmCd3GvRgBeFpikt8GfoG7J0=";
version = "0.1.45";
hash = "sha256-YfaP9QCLW4vZKfMyE/MEqEyiA9M5xlnS5Uxph+RT89s=";
};
meta = {
description = "Visual Studio Code extension for Odin language";
@@ -2516,6 +2518,8 @@ let
};
};
jjk.jjk = callPackage ./jjk.jjk { };
jkillian.custom-local-formatters = buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "jkillian";
@@ -2611,8 +2615,8 @@ let
mktplcRef = {
name = "language-julia";
publisher = "julialang";
version = "1.180.2";
hash = "sha256-4F4xZrB13+jAt/LhYigLygZoGZqQPfs8LJJzRqMUFaQ=";
version = "1.182.2";
hash = "sha256-PIhaYlGxOGycuE9YKyJ0xD7QEjKgmtHX7l4x/xs0GjU=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/julialang.language-julia/changelog";
@@ -4629,8 +4633,8 @@ let
mktplcRef = {
name = "ayu";
publisher = "teabyii";
version = "1.1.8";
sha256 = "sha256-md6G6Zf9E8oVyBvDQZfu9jTO6ZseNM+xJ/kx9efkuHA=";
version = "1.1.9";
sha256 = "sha256-mxypPqumN9SvgaFLItGmILH7PtRehgnnzkGtG3C07QI=";
};
meta = {
description = "Simple theme with bright colors and comes in three versions dark, light and mirage for all day long comfortable work";
@@ -0,0 +1,21 @@
{
lib,
vscode-utils,
}:
vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "jjk";
publisher = "jjk";
version = "0.8.2";
hash = "sha256-6Fb6HP0vGxuskg+mox4sKutX0nEX4PSmgF49cuJ5vtI=";
};
meta = {
changelog = "https://github.com/keanemind/jjk/releases";
description = "Visual Studio Code extension for the Jujutsu (jj) version control system";
downloadPage = "https://marketplace.visualstudio.com/items?itemName=jjk.jjk";
homepage = "https://github.com/keanemind/jjk";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ ilai-deutel ];
};
}
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "sourcegraph";
name = "amp";
version = "0.0.1770596843";
hash = "sha256-FLajygfJM+EPOXSU7g5I7Yo1YU7zYvTuw2cfY3B17BE=";
version = "0.0.1771217285";
hash = "sha256-eTvkYFir8ZNNjWCaQ20WiJe/pJ8Gbtqvx74dq9S9Llw=";
};
meta = {
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "fbneo";
version = "0-unstable-2026-02-08";
version = "0-unstable-2026-02-15";
src = fetchFromGitHub {
owner = "libretro";
repo = "fbneo";
rev = "e21e3f3c40eb4422b93b8984ef46fe04cdaee9db";
hash = "sha256-7hZ2TJwHtgyHd+CZahazXZnKhfNpWZqfev9jtTHlmag=";
rev = "946de34101cd59701d66a8d2ec38394a6057740f";
hash = "sha256-Alzl84MAkSAr8CkqursthVc1eWn7McsNangjxFAaAQA=";
};
makefile = "Makefile";
@@ -8,13 +8,13 @@
}:
mkLibretroCore {
core = "flycast";
version = "0-unstable-2026-02-06";
version = "0-unstable-2026-02-16";
src = fetchFromGitHub {
owner = "flyinghead";
repo = "flycast";
rev = "c577e29f43edc5a86c6ed4edca46706000d214b2";
hash = "sha256-nHMtXwtrgxoN/tuY1d+DqZAJFag8vmHAP/9tS2j3ErU=";
rev = "ba5b3c71ecc966e52f698f41443e7cc9b81bf824";
hash = "sha256-tbq+NgbZDKMg0K0cWF1+7h80QTaAaO5BD9nf94z5fc0=";
fetchSubmodules = true;
};
File diff suppressed because it is too large Load Diff
@@ -10,11 +10,11 @@
buildMozillaMach rec {
pname = "firefox-beta";
binaryName = "firefox-beta";
version = "148.0b14";
version = "148.0b15";
applicationName = "Firefox Beta";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
sha512 = "a28ac52a1c74b1a24959bf20c993311df5b87110677f0027cdea6b59d017f5365888d9ea07fb0f8b0c8f5d35266ee793fb072e2872712a6ef2e9c5d69521a6b7";
sha512 = "5853818905193b7ab0da2198e3175f039a7b8e56399a6bb0edd50f0168766ff062755b0e383553641d9f6d4ab8b4fdb802e02065da76432d1d4c395c8cc1a543";
};
meta = {
@@ -9,10 +9,10 @@
buildMozillaMach rec {
pname = "firefox";
version = "147.0.3";
version = "147.0.4";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
sha512 = "37e39c47d694eccdcabb7d8a0a4cfe1b02860a97f604653f364c60f4e98796ffc7f1c6ab51226b2e5034a4b4805ccc6ec3983f0d830c9f36692df2ec261273d9";
sha512 = "981368916582e1566594ab8e2c03cab471aaf04613d2c77a0d4e067ab159bb81b5929a801bbac20ef0506ef048cde91b2e2f89598fa8d4e8d66a8c8016bb9b33";
};
meta = {
@@ -6,13 +6,13 @@
buildGoModule rec {
pname = "helm-cm-push";
version = "0.11.0";
version = "0.11.1";
src = fetchFromGitHub {
owner = "chartmuseum";
repo = "helm-push";
rev = "v${version}";
hash = "sha256-0HskUSj1+5YZMLb0OMMhkNfN7J36GzE5Rdd9uLTO1Ys=";
hash = "sha256-a3+07/Kc0m679ONDldjRs9+E2sqFGsUWuEQPutM+jK4=";
};
vendorHash = "sha256-W7nWiWCLrzevunxYoDAqVbG5LhG+VXCAeI1D78fQQvw=";
@@ -73,13 +73,13 @@
"vendorHash": "sha256-gVzj5x95MNgCbxwqiqakrUnhF/x+vXnAurv4pUt8kV4="
},
"auth0_auth0": {
"hash": "sha256-c/sHF8yqb+A8SsVMo5KobHXaZpJwIHg11Ct1nsFqXWM=",
"hash": "sha256-d93MvkFn2+slFh2yvllcwthVTY15ezLn+q8Jm3MPQ+0=",
"homepage": "https://registry.terraform.io/providers/auth0/auth0",
"owner": "auth0",
"repo": "terraform-provider-auth0",
"rev": "v1.39.0",
"rev": "v1.39.1",
"spdx": "MPL-2.0",
"vendorHash": "sha256-kBML2tmAqiaoVxBvbVwMmL5dL6eRBKTgi09u6jZCBL4="
"vendorHash": "sha256-XtPow6ysRcy9MWYFnH7GewtWu2c1LaZih8njbbEzAu8="
},
"aviatrixsystems_aviatrix": {
"hash": "sha256-46djOfAj/5kfeoKLQHbeKefzdGbmlBATR+uN/IaAn8I=",
@@ -382,11 +382,11 @@
"vendorHash": "sha256-M5cX70GwfdEJ22V8CwoaNEdEWb1CX7wsBgvj3GvjE0Q="
},
"exoscale_exoscale": {
"hash": "sha256-V7mG584wyr99myizr/jx9AadkAnBCZvUvAKF0sX/CIA=",
"hash": "sha256-qjevix8bIRY3MKLlTZK/uUHS8nmKgjPk/rgqNWRdKes=",
"homepage": "https://registry.terraform.io/providers/exoscale/exoscale",
"owner": "exoscale",
"repo": "terraform-provider-exoscale",
"rev": "v0.67.2",
"rev": "v0.68.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -571,13 +571,13 @@
"vendorHash": "sha256-xIagZvWtlNpz5SQfxbA7r9ojAeS3CW2pwV337ObKOwU="
},
"hashicorp_google": {
"hash": "sha256-VJ9RGR7wmX8CkNvntxlbhGuIyrCALMVH+E7zRRbD1bY=",
"hash": "sha256-SeShEZVFMn/f/ATUY08Jl1wwXBJFmyTpRh7U46ftM60=",
"homepage": "https://registry.terraform.io/providers/hashicorp/google",
"owner": "hashicorp",
"repo": "terraform-provider-google",
"rev": "v7.17.0",
"rev": "v7.19.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-u85rqTYpYFeTLGElOVojpsqUMZsopjpmsKwijsyLlz8="
"vendorHash": "sha256-lhTdDrTwTbRuWngQ+NGuh+x5Z5HZfVTtNi+mZqIENbg="
},
"hashicorp_google-beta": {
"hash": "sha256-NRTnx5nqdCtjz0mGZjuA96jEzW1rKR+M0AY2//TAYk4=",
@@ -959,11 +959,11 @@
"vendorHash": "sha256-OAd8SeTqTrH0kMoM2LsK3vM2PI23b3gl57FaJYM9hM0="
},
"newrelic_newrelic": {
"hash": "sha256-R9xV26gr+jJnNm8hLl6xMdjSEm/U45Ph+IBAB8S4t5A=",
"hash": "sha256-OqV20sYIi9M+U1f00neShv0Cm3NyVD6HucqYoxLKC64=",
"homepage": "https://registry.terraform.io/providers/newrelic/newrelic",
"owner": "newrelic",
"repo": "terraform-provider-newrelic",
"rev": "v3.79.0",
"rev": "v3.80.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-fh0QEWSwdoWKED/39OBT5kMADbsUDvhJUYMfWR9P5os="
},
@@ -1049,11 +1049,11 @@
"vendorHash": null
},
"oracle_oci": {
"hash": "sha256-2uSMK9GvqCdIPjr/PI4FlOM5qXhPsEY6dnY3S795/vg=",
"hash": "sha256-Ew7W4Jk8ygNS50SFxNctHeyyYpNckxpWtms6ImwJdBU=",
"homepage": "https://registry.terraform.io/providers/oracle/oci",
"owner": "oracle",
"repo": "terraform-provider-oci",
"rev": "v8.0.0",
"rev": "v8.1.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -1166,13 +1166,13 @@
"vendorHash": "sha256-WDyULPLN+uZ5OaE/j3FgurHbXKRU93S3nbXk8mW5dc4="
},
"sap_btp": {
"hash": "sha256-jN/tvfzVnzJTLpAriT68F2HwAS5lxL+iMU1yGR6P8ww=",
"hash": "sha256-5b8XFH7aPnjuf/yaMBecjM964e36KBclZZC+/kyhZDk=",
"homepage": "https://registry.terraform.io/providers/SAP/btp",
"owner": "SAP",
"repo": "terraform-provider-btp",
"rev": "v1.18.1",
"rev": "v1.19.0",
"spdx": "Apache-2.0",
"vendorHash": "sha256-f3b4NULINH8XworCn46fiz4GmBM31ROdAJy1j4GKkx4="
"vendorHash": "sha256-PdfdEb8XyoNbAgGqEgU0Lr6mmAmK1A9GkaRelvyunZM="
},
"scaleway_scaleway": {
"hash": "sha256-y58Q3VyXRVThSBm3e6aEUJu/VqbrwyIYPyXKiUz+9QA=",
@@ -1283,13 +1283,13 @@
"vendorHash": "sha256-rWiafaFE1RolO9JUN1WoW4EWJjR7kpfeVEOTLf21j50="
},
"tailscale_tailscale": {
"hash": "sha256-hw8psXRFtFkBF3x1gj/72bxcnFkuZ5RYXENNeiWB7gc=",
"hash": "sha256-iWiZ0FizqJbY80pL6vVwzw3h/WpXJFjHF7vwJOpxD7k=",
"homepage": "https://registry.terraform.io/providers/tailscale/tailscale",
"owner": "tailscale",
"repo": "terraform-provider-tailscale",
"rev": "v0.26.0",
"rev": "v0.27.0",
"spdx": "MIT",
"vendorHash": "sha256-gc8JCbYzA0nz0JBSNBSZsK0VLTAPmXRhXW2MZiadC90="
"vendorHash": "sha256-oAMg/9YnUmkR5Pcb9EIuTgrghM7vS5h8N2NO24szabs="
},
"telmate_proxmox": {
"hash": "sha256-1aKKlOIk1mH4yx66eD635d1IaUWXIiBGHEt4A2F2mGM=",
@@ -1445,13 +1445,13 @@
"vendorHash": "sha256-B4W8rzWHucYqA0HXrMrtKQ91ZfFAgcxHqFMvMnVuGfk="
},
"vmware_avi": {
"hash": "sha256-RJ3qPBIJheOMN+MqW5ew8bWb+LlNfMTE+o6laM30pxY=",
"hash": "sha256-Zc9kvJgUeoYApurIAgghKoicpLuPoU+e52MedqPWhyA=",
"homepage": "https://registry.terraform.io/providers/vmware/avi",
"owner": "vmware",
"repo": "terraform-provider-avi",
"rev": "v31.2.1",
"rev": "v31.2.2",
"spdx": "MPL-2.0",
"vendorHash": "sha256-AiI/O9393xrg8ZdLMGLPWWMnOLSv+EkVyH/voaAe4VM="
"vendorHash": "sha256-bmMJcNmB9Pt4Y14YLGrZt2ynnLbSm4rmrqPtdrbDU08="
},
"vmware_vcd": {
"hash": "sha256-W+ffIT70IaePg3xfOaQgCjPTWTN3iSAYwkf+s+zkB84=",
@@ -82,25 +82,25 @@ stdenv.mkDerivation {
postInstall =
lib.strings.optionalString withOpenASAR ''
cp -f ${openasar} $out/Applications/${desktopName}.app/Contents/Resources/app.asar
cp -f ${openasar} "$out/Applications/${desktopName}.app/Contents/Resources/app.asar"
''
+ lib.strings.optionalString withVencord ''
mv $out/Applications/${desktopName}.app/Contents/Resources/app.asar $out/Applications/${desktopName}.app/Contents/Resources/_app.asar
mkdir $out/Applications/${desktopName}.app/Contents/Resources/app.asar
echo '{"name":"discord","main":"index.js"}' > $out/Applications/${desktopName}.app/Contents/Resources/app.asar/package.json
echo 'require("${vencord}/patcher.js")' > $out/Applications/${desktopName}.app/Contents/Resources/app.asar/index.js
mv "$out/Applications/${desktopName}.app/Contents/Resources/app.asar" "$out/Applications/${desktopName}.app/Contents/Resources/_app.asar"
mkdir "$out/Applications/${desktopName}.app/Contents/Resources/app.asar"
echo '{"name":"discord","main":"index.js"}' > "$out/Applications/${desktopName}.app/Contents/Resources/app.asar/package.json"
echo 'require("${vencord}/patcher.js")' > "$out/Applications/${desktopName}.app/Contents/Resources/app.asar/index.js"
''
+ lib.strings.optionalString withEquicord ''
mv $out/Applications/${desktopName}.app/Contents/Resources/app.asar $out/Applications/${desktopName}.app/Contents/Resources/_app.asar
mkdir $out/Applications/${desktopName}.app/Contents/Resources/app.asar
echo '{"name":"discord","main":"index.js"}' > $out/Applications/${desktopName}.app/Contents/Resources/app.asar/package.json
echo 'require("${equicord}/desktop/patcher.js")' > $out/Applications/${desktopName}.app/Contents/Resources/app.asar/index.js
mv "$out/Applications/${desktopName}.app/Contents/Resources/app.asar" "$out/Applications/${desktopName}.app/Contents/Resources/_app.asar"
mkdir "$out/Applications/${desktopName}.app/Contents/Resources/app.asar"
echo '{"name":"discord","main":"index.js"}' > "$out/Applications/${desktopName}.app/Contents/Resources/app.asar/package.json"
echo 'require("${equicord}/desktop/patcher.js")' > "$out/Applications/${desktopName}.app/Contents/Resources/app.asar/index.js"
''
+ lib.strings.optionalString withMoonlight ''
mv $out/Applications/${desktopName}.app/Contents/Resources/app.asar $out/Applications/${desktopName}.app/Contents/Resources/_app.asar
mkdir $out/Applications/${desktopName}.app/Contents/Resources/app.asar
echo '{"name":"discord","main":"injector.js","private": true}' > $out/Applications/${desktopName}.app/Contents/Resources/app.asar/package.json
echo 'require("${moonlight}/injector.js").inject(require("path").join(__dirname, "../_app.asar"));' > $out/Applications/${desktopName}.app/Contents/Resources/app.asar/injector.js
mv "$out/Applications/${desktopName}.app/Contents/Resources/app.asar" "$out/Applications/${desktopName}.app/Contents/Resources/_app.asar"
mkdir "$out/Applications/${desktopName}.app/Contents/Resources/app.asar"
echo '{"name":"discord","main":"injector.js","private": true}' > "$out/Applications/${desktopName}.app/Contents/Resources/app.asar/package.json"
echo 'require("${moonlight}/injector.js").inject(require("path").join(__dirname, "../_app.asar"));' > "$out/Applications/${desktopName}.app/Contents/Resources/app.asar/injector.js"
'';
passthru = {
@@ -181,7 +181,7 @@ stdenv.mkDerivation (finalAttrs: {
installPhase = ''
runHook preInstall
mkdir -p $out/{bin,opt/${binaryName},share/pixmaps,share/icons/hicolor/256x256/apps}
mkdir -p $out/{bin,opt/${binaryName},share/icons/hicolor/256x256/apps}
mv * $out/opt/${binaryName}
chmod +x $out/opt/${binaryName}/${binaryName}
@@ -205,7 +205,6 @@ stdenv.mkDerivation (finalAttrs: {
# Without || true the install would fail on case-insensitive filesystems
ln -s $out/opt/${binaryName}/${binaryName} $out/bin/${lib.strings.toLower binaryName} || true
ln -s $out/opt/${binaryName}/discord.png $out/share/pixmaps/${pname}.png
ln -s $out/opt/${binaryName}/discord.png $out/share/icons/hicolor/256x256/apps/${pname}.png
ln -s "$desktopItem/share/applications" $out/share/
@@ -33,13 +33,13 @@
stdenv.mkDerivation {
pname = "tg_owt";
version = "0-unstable-2025-06-02";
version = "0-unstable-2025-12-12";
src = fetchFromGitHub {
owner = "desktop-app";
repo = "tg_owt";
rev = "62321fd7128ab2650b459d4195781af8185e46b5";
hash = "sha256-l6EdHJLd42TU+4pLakdU3a5PLVxrxjta0CSRy5hVBFU=";
rev = "d888bc3f79b4aa80333d8903410fa439db5f6696";
hash = "sha256-ZiZ0HD4UNPJj1ZtoGroJRQBYeL/nwpp4B9GtXFcCA7M=";
fetchSubmodules = true;
};
@@ -42,14 +42,14 @@
stdenv.mkDerivation (finalAttrs: {
pname = "telegram-desktop-unwrapped";
version = "6.4.1";
version = "6.5.1";
src = fetchFromGitHub {
owner = "telegramdesktop";
repo = "tdesktop";
rev = "v${finalAttrs.version}";
fetchSubmodules = true;
hash = "sha256-jmUj0kTyok5CsOe/to6bTN3jH/RMF7jE+AnFJi2nW90=";
hash = "sha256-y2sf2wDJ6dYxRdDLKIr78z9tPBIoh2WICg4zJBmb85Q=";
};
nativeBuildInputs = [
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
xapian
zlib
];
XAPIAN_CONFIG = "${xapian}/bin/xapian-config";
env.XAPIAN_CONFIG = "${xapian}/bin/xapian-config";
meta = {
description = "Synchronize maildirs and notmuch databases";
mainProgram = "muchsync";
@@ -79,8 +79,8 @@ rec {
thunderbird-140 = common {
applicationName = "Thunderbird ESR";
version = "140.7.0esr";
sha512 = "92746d87ca2d5a59082c25aa3c3a816e5bf24ae3e095f8ec478a60c5cd890faea392ff98b5b510cc9a89b155240dce9d06c7ddd0f17f564722acc65105fb6cd2";
version = "140.7.1esr";
sha512 = "2d0f61758b0428eb4eb8294c58d914e03842c9ad7685cd2eec26c723cc1491634f90fc9fcf5ad6d3f13738e141e96c692cd8ff1599869346e3247a0cae2349f4";
updateScript = callPackage ./update.nix {
attrPath = "thunderbirdPackages.thunderbird-140";
@@ -48,6 +48,7 @@ let
apparmorRules = apparmorRulesFromClosure { name = "transmission-daemon"; } (
[
crc32c
curl
libdeflate
libevent
+7 -4
View File
@@ -13,14 +13,15 @@
hamlib,
libv4l,
fftwFloat,
imagemagick,
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
version = "9.5.8";
pname = "qsstv";
src = fetchurl {
url = "https://www.qsl.net/o/on4qz/qsstv/downloads/qsstv_${version}.tar.gz";
url = "https://www.qsl.net/o/on4qz/qsstv/downloads/qsstv_${finalAttrs.version}.tar.gz";
sha256 = "0s3sivc0xan6amibdiwfnknrl3248wzgy98w6gyxikl0qsjpygy0";
};
@@ -28,6 +29,7 @@ stdenv.mkDerivation rec {
qmake
pkg-config
wrapQtAppsHook
imagemagick
];
buildInputs = [
@@ -43,7 +45,8 @@ stdenv.mkDerivation rec {
postInstall = ''
# Install desktop icon
install -D icons/qsstv.png $out/share/pixmaps/qsstv.png
mkdir -p $out/share/icons/hicolor/32x32/apps
magick icons/qsstv.png -resize 32x32 $out/share/icons/hicolor/32x32/apps/qsstv.png
install -D qsstv.desktop $out/share/applications/qsstv.desktop
'';
@@ -55,4 +58,4 @@ stdenv.mkDerivation rec {
license = lib.licenses.gpl3;
maintainers = with lib.maintainers; [ hax404 ];
};
}
})
@@ -367,6 +367,8 @@ let
# Exposed for tarsum build on non-linux systems (build-support/docker/default.nix)
inherit moby-src;
tests = lib.optionalAttrs (!clientOnly) { inherit (nixosTests) docker; };
# run with: nix-shell ./maintainers/scripts/update.nix --argstr package docker
updateScript = ./update.sh;
};
meta = docker-meta // {
@@ -436,14 +438,14 @@ in
docker_29 =
let
version = "29.2.0";
version = "29.2.1";
in
callPackage dockerGen {
inherit version;
cliRev = "v${version}";
cliHash = "sha256-GbXPe8DlhV4WnwJO8OVAdbXZ18IOUlXszenMGvPvSMQ=";
cliHash = "sha256-9foA1MThtq1sQnwki+cxPuU1dZbukOgdMg99Z1EElxk=";
mobyRev = "docker-v${version}";
mobyHash = "sha256-Uilc5cxKuctSkjVxY3R5aezlmGHhLhHY4opVkTYRVIY=";
mobyHash = "sha256-LN/IVgKdBwpTR2fUq2Syi6zWP4YN7DQS4bfJVk8Agtg=";
runcRev = "v1.3.4";
runcHash = "sha256-1IfY08sBoDpbLrwz1AKBRSTuCZyOgQzYPHTDUI6fOZ8=";
containerdRev = "v2.2.1";
+73
View File
@@ -0,0 +1,73 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl jq nix-prefetch-github gawk
set -euo pipefail
# Updates docker packages (docker_29, docker_30, etc.)
# Fetches component versions from moby's Dockerfile and updates all hashes
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DEFAULT_NIX="$SCRIPT_DIR/default.nix"
# Determine which docker version to update
ATTR="${1:-${UPDATE_NIX_ATTR_PATH:-docker}}"
# Handle "docker" alias -> use the last docker_XX in the file (latest version)
if [[ "$ATTR" == "docker" ]]; then
ATTR=$(grep -oE 'docker_[0-9]+' "$DEFAULT_NIX" | tail -1)
fi
ATTR=$(echo "$ATTR" | grep -oE 'docker_[0-9]+' | head -1)
[[ -z "$ATTR" ]] && { echo "Error: Could not determine docker version"; exit 1; }
MAJOR="${ATTR#docker_}"
echo "Updating $ATTR (major version: $MAJOR)"
# Get current and latest versions
CURRENT=$(awk -v a="$ATTR" '$0~a" ="{f=1} f&&/version = "/{match($0,/"[^"]+"/);print substr($0,RSTART+1,RLENGTH-2);exit}' "$DEFAULT_NIX")
LATEST=$(curl -s ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} "https://api.github.com/repos/moby/moby/releases" | \
jq -r --arg m "$MAJOR" '[.[]|select(.tag_name|startswith("docker-v"+$m+"."))|select(.prerelease==false)][0].tag_name|sub("docker-v";"")')
echo "Current: $CURRENT, Latest: $LATEST"
[[ "$CURRENT" == "$LATEST" ]] && { echo "Already up to date!"; exit 0; }
# Fetch component versions from Dockerfile
DOCKERFILE=$(curl -sL "https://raw.githubusercontent.com/moby/moby/docker-v$LATEST/Dockerfile")
RUNC_REV=$(echo "$DOCKERFILE" | sed -n 's/^ARG RUNC_VERSION=//p' | head -1)
CONTAINERD_REV=$(echo "$DOCKERFILE" | sed -n 's/^ARG CONTAINERD_VERSION=//p' | head -1)
echo "Components: runc=$RUNC_REV, containerd=$CONTAINERD_REV"
# Prefetch helper
prefetch() { nix-prefetch-github "$1" "$2" --rev "$3" 2>/dev/null | jq -r '.hash'; }
echo "Prefetching sources..."
CLI_HASH=$(prefetch docker cli "v$LATEST")
MOBY_HASH=$(prefetch moby moby "docker-v$LATEST")
RUNC_HASH=$(prefetch opencontainers runc "$RUNC_REV")
CONTAINERD_HASH=$(prefetch containerd containerd "$CONTAINERD_REV")
# Validate all hashes
for h in "$CLI_HASH" "$MOBY_HASH" "$RUNC_HASH" "$CONTAINERD_HASH"; do
[[ -z "$h" || "$h" == "null" ]] && { echo "Failed to prefetch a source"; exit 1; }
done
# Update default.nix
echo "Updating $DEFAULT_NIX..."
awk -v attr="$ATTR" -v ver="$LATEST" -v cli="$CLI_HASH" -v moby="$MOBY_HASH" \
-v runcR="$RUNC_REV" -v runcH="$RUNC_HASH" -v ctrdR="$CONTAINERD_REV" -v ctrdH="$CONTAINERD_HASH" \
-v old="$CURRENT" '
$0 ~ attr" =" { in_block=1 }
in_block && /^ docker_[0-9]/ && $0 !~ attr { in_block=0 }
in_block && /^}$/ { in_block=0 }
in_block && /version = "/ { gsub(old, ver) }
in_block && /cliHash = "sha256-/ { gsub(/sha256-[^"]*/, cli) }
in_block && /mobyHash = "sha256-/ { gsub(/sha256-[^"]*/, moby) }
in_block && /runcRev = "/ { gsub(/"v[^"]*"/, "\"" runcR "\"") }
in_block && /runcHash = "sha256-/ { gsub(/sha256-[^"]*/, runcH) }
in_block && /containerdRev = "/ { gsub(/"v[^"]*"/, "\"" ctrdR "\"") }
in_block && /containerdHash = "sha256-/ { gsub(/sha256-[^"]*/, ctrdH) }
{ print }
' "$DEFAULT_NIX" > "$DEFAULT_NIX.tmp" && mv "$DEFAULT_NIX.tmp" "$DEFAULT_NIX"
echo "Updated $ATTR to $LATEST (cli=$CLI_HASH, moby=$MOBY_HASH, runc=$RUNC_REV, containerd=$CONTAINERD_REV)"
@@ -136,11 +136,11 @@ stdenv.mkDerivation (finalAttrs: {
+ lib.optionalString nixosTestRunner "-for-vm-tests"
+ lib.optionalString toolsOnly "-utils"
+ lib.optionalString userOnly "-user";
version = "10.2.0";
version = "10.2.1";
src = fetchurl {
url = "https://download.qemu.org/qemu-${finalAttrs.version}.tar.xz";
hash = "sha256-njCtG4ufe0RjABWC0aspfznPzOpdCFQMDKbWZyeFiDo=";
hash = "sha256-o3F0d9jiyE1jC//7wg9s0yk+tFqh5trG0MwnaJmRyeE=";
};
depsBuildBuild = [
@@ -267,50 +267,6 @@ stdenv.mkDerivation (finalAttrs: {
sha256 = "sha256-oC+bRjEHixv1QEFO9XAm4HHOwoiT+NkhknKGPydnZ5E=";
revert = true;
})
# Implement termios2 (TCGETS2 etc) for glibc 2.42 compatibility. Should be in the next release.
# https://gitlab.com/qemu-project/qemu/-/issues/3065
# https://lore.kernel.org/qemu-devel/20260103153239.15787-1-dilfridge@gentoo.org/t/#u
(fetchpatch {
name = "0001-Add-termios2-support-to-linux-user.patch";
url = "https://gitlab.com/qemu-project/qemu/-/commit/e9a8a10e84c1bf6e2e8be000e4dd5c83ba0d8470.patch";
hash = "sha256-Zc+ZjiSug3uT/F7+mmoYc2VXqw2MV6UubYqB+pr2dNY=";
})
(fetchpatch {
name = "0002-Add-termios2-support-to-alpha-target.patch";
url = "https://gitlab.com/qemu-project/qemu/-/commit/8d8c6aeee8599a099e49ec4411f3d1e087ae40ad.patch";
hash = "sha256-5e5vUp9nr96ZmVA98W/ETReLbkofayysJXlx1Ck9gDs=";
})
(fetchpatch {
name = "0003-Add-termios2-support-to-hppa-target.patch";
url = "https://gitlab.com/qemu-project/qemu/-/commit/edc741710acedd61011f937967b960d154794258.patch";
hash = "sha256-nls6eTOB06eqACjQ/r1sQvb9YaYmrpJcegsDGqKAOaI=";
})
(fetchpatch {
name = "0004-Add-termios2-support-to-mips-target.patch";
url = "https://gitlab.com/qemu-project/qemu/-/commit/edf9184f4feb691b0f70dc544443db2380891598.patch";
hash = "sha256-GrBhyMq2QiCc+WlUwaB9j4G8vB3ipxJRV5Hvyab/5Fk=";
})
(fetchpatch {
name = "0005-Add-termios2-support-to-sh4-target.patch";
url = "https://gitlab.com/qemu-project/qemu/-/commit/afbe0ff81c29d674b9c18a588bcaab34ddcb8a7b.patch";
hash = "sha256-h+9eC6H8/GJ85Lt1Y0ggdJbbgTIvDfIJkPQfX/FgO4c=";
})
(fetchpatch {
name = "0006-Add-termios2-support-to-sparc-target.patch";
url = "https://gitlab.com/qemu-project/qemu/-/commit/947b971cad90375040f399899909a3f1f32b483f.patch";
hash = "sha256-/JvF25aSR2mBSvkpqupDySMJYZI+lv7L0YwhqiaDk3A=";
})
(fetchpatch {
name = "0007-linux-user-Add-missing-termios-baud-rates.patch";
url = "https://gitlab.com/qemu-project/qemu/-/commit/4f22fcb5c67f40a36e6654f6cfaee23f9f9e93d1.patch";
hash = "sha256-CM81yL0/i+fmQe8qzemre13N3A74J1HIC7ilCbb7ESQ=";
})
(fetchpatch {
name = "0008-linux-user-fixup-termios2-related-things-on-PowerPC.patch";
url = "https://gitlab.com/qemu-project/qemu/-/commit/d68f0e2e906939bef076d0cd52f902d433c8c3da.patch";
hash = "sha256-vF47CKqg0wBBOUkHeJ3hv3nUHCftl2OwD3Nh0dL1PNk=";
})
]
++ lib.optional nixosTestRunner ./force-uid0-on-9p.patch;
@@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
# upstream lacks an install method
install -D -t $out/share/applications qtemu.desktop
install -D -t $out/share/pixmaps qtemu.png
install -D -t $out/share/icons/hicolor/32x32/apps qtemu.png
install -D -t $out/bin qtemu
# make sure that the qemu-* executables are found
@@ -16,7 +16,7 @@ in
runCommand "dub-to-nix"
{
pname = "dub-to-nix";
version = lib.trivial.version;
version = lib.trivial.release;
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ python3 ];
}
+36 -31
View File
@@ -16,7 +16,6 @@ in
pkgsBuildHost,
makeInitrdNGTool,
binutils,
runCommand,
# Name of the derivation (not of the resulting file!)
name ? "initrd",
@@ -74,47 +73,53 @@ in
_compressorMeta.ubootName
or (throw "Unrecognised compressor ${_compressorName}, please specify uInitrdCompression"),
}:
runCommand name
{
compress = "${_compressorExecutable} ${lib.escapeShellArgs _compressorArgsReal}";
passthru = {
compressorExecutableFunction = _compressorFunction;
compressorArgs = _compressorArgsReal;
};
stdenvNoCC.mkDerivation (finalAttrs: {
__structuredAttrs = true;
inherit
extension
makeUInitrd
uInitrdArch
prepend
;
${if makeUInitrd then "uInitrdCompression" else null} = uInitrdCompression;
# the initrd will be self-contained so we can drop references
# to the closure that was used to build it
unsafeDiscardReferences.out = true;
passAsFile = [ "contents" ];
contents = builtins.toJSON contents;
inherit
name
extension
makeUInitrd
uInitrdArch
prepend
;
${if makeUInitrd then "uInitrdCompression" else null} = uInitrdCompression;
nativeBuildInputs = [
makeInitrdNGTool
cpio
]
++ lib.optional makeUInitrd ubootTools;
}
''
compress = "${_compressorExecutable} ${lib.escapeShellArgs _compressorArgsReal}";
contentsJSON = builtins.toJSON contents;
nativeBuildInputs = [
makeInitrdNGTool
cpio
]
++ lib.optional makeUInitrd ubootTools;
buildCommand = ''
mkdir -p ./root/{run,tmp,var/empty}
ln -s ../run ./root/var/run
make-initrd-ng "$contentsPath" ./root
make-initrd-ng <(echo "$contentsJSON") ./root
mkdir "$out"
(cd root && find . -exec touch -h -d '@1' '{}' +)
for PREP in $prepend; do
for PREP in ''${prepend[@]}; do
cat $PREP >> $out/initrd
done
(cd root && find . -print0 | sort -z | cpio --quiet -o -H newc -R +0:+0 --reproducible --null | eval -- $compress >> "$out/initrd")
if [ -n "$makeUInitrd" ]; then
mkimage -A "$uInitrdArch" -O linux -T ramdisk -C "$uInitrdCompression" -d "$out/initrd" $out/initrd.img
# Compatibility symlink
ln -sf "initrd.img" "$out/initrd"
mkimage -A "$uInitrdArch" -O linux -T ramdisk -C "$uInitrdCompression" -d "$out/initrd" $out/initrd.img
# Compatibility symlink
ln -sf "initrd.img" "$out/initrd"
else
ln -s "initrd" "$out/initrd$extension"
ln -s "initrd" "$out/initrd$extension"
fi
''
'';
passthru = {
compressorExecutableFunction = _compressorFunction;
compressorArgs = _compressorArgsReal;
};
})
+35 -33
View File
@@ -81,42 +81,44 @@ in
_compressorMeta.ubootName
or (throw "Unrecognised compressor ${_compressorName}, please specify uInitrdCompression"),
}:
stdenvNoCC.mkDerivation (
rec {
inherit
name
makeUInitrd
extension
uInitrdArch
prepend
;
stdenvNoCC.mkDerivation (finalAttrs: {
__structuredAttrs = true;
builder = ./make-initrd.sh;
# the initrd will be self-contained so we can drop references
# to the closure that was used to build it
unsafeDiscardReferences.out = true;
nativeBuildInputs = [
cpio
]
++ lib.optional makeUInitrd ubootTools;
inherit
name
extension
makeUInitrd
uInitrdArch
prepend
;
${if makeUInitrd then "uInitrdCompression" else null} = uInitrdCompression;
compress = "${_compressorExecutable} ${lib.escapeShellArgs _compressorArgsReal}";
builder = ./make-initrd.sh;
# Pass the function through, for reuse in append-initrd-secrets. The
# function is used instead of the string, in order to support
# cross-compilation (append-initrd-secrets running on a different
# architecture than what the main initramfs is built on).
passthru = {
compressorExecutableFunction = _compressorFunction;
compressorArgs = _compressorArgsReal;
};
nativeBuildInputs = [
cpio
]
++ lib.optional makeUInitrd ubootTools;
# !!! should use XML.
objects = map (x: x.object) contents;
symlinks = map (x: x.symlink) contents;
suffices = map (x: if x ? suffix then x.suffix else "none") contents;
compress = "${_compressorExecutable} ${lib.escapeShellArgs _compressorArgsReal}";
closureInfo = "${pkgsBuildHost.closureInfo { rootPaths = objects; }}";
}
// lib.optionalAttrs makeUInitrd {
uInitrdCompression = uInitrdCompression;
}
)
# !!! should use XML.
objects = map (x: x.object) contents;
symlinks = map (x: x.symlink) contents;
suffices = map (x: if x ? suffix then x.suffix else "none") contents;
closureInfo = "${pkgsBuildHost.closureInfo { rootPaths = finalAttrs.objects; }}";
# Pass the function through, for reuse in append-initrd-secrets. The
# function is used instead of the string, in order to support
# cross-compilation (append-initrd-secrets running on a different
# architecture than what the main initramfs is built on).
passthru = {
compressorExecutableFunction = _compressorFunction;
compressorArgs = _compressorArgsReal;
};
})
+12 -16
View File
@@ -1,9 +1,5 @@
set -o pipefail
objects=($objects)
symlinks=($symlinks)
suffices=($suffices)
mkdir root
# Needed for splash_helper, which gets run before init.
@@ -12,14 +8,14 @@ mkdir root/sys
mkdir root/proc
for ((n = 0; n < ${#objects[*]}; n++)); do
object=${objects[$n]}
symlink=${symlinks[$n]}
suffix=${suffices[$n]}
if test "$suffix" = none; then suffix=; fi
for ((n = 0; n < ${#objects[@]}; n++)); do
object=${objects[n]}
symlink=${symlinks[n]}
suffix=${suffices[n]}
if test "$suffix" = none; then suffix=; fi
mkdir -p $(dirname root/$symlink)
ln -s $object$suffix root/$symlink
mkdir -p $(dirname root/$symlink)
ln -s $object$suffix root/$symlink
done
@@ -34,16 +30,16 @@ storePaths="$(cat $closureInfo/store-paths)"
# Put the closure in a gzipped cpio archive.
mkdir -p $out
for PREP in $prepend; do
for PREP in ${prepend[@]}; do
cat $PREP >> $out/initrd
done
(cd root && find * .[^.*] -exec touch -h -d '@1' '{}' +)
(cd root && find * .[^.*] -print0 | sort -z | cpio --quiet -o -H newc -R +0:+0 --reproducible --null | eval -- $compress >> "$out/initrd")
if [ -n "$makeUInitrd" ]; then
mkimage -A "$uInitrdArch" -O linux -T ramdisk -C "$uInitrdCompression" -d "$out/initrd" $out/initrd.img
# Compatibility symlink
ln -sf "initrd.img" "$out/initrd"
mkimage -A "$uInitrdArch" -O linux -T ramdisk -C "$uInitrdCompression" -d "$out/initrd" $out/initrd.img
# Compatibility symlink
ln -sf "initrd.img" "$out/initrd"
else
ln -s "initrd" "$out/initrd$extension"
ln -s "initrd" "$out/initrd$extension"
fi
@@ -31,7 +31,7 @@ in
{
prefetch-yarn-deps = stdenv.mkDerivation {
pname = "prefetch-yarn-deps";
inherit (lib.trivial) version;
version = lib.trivial.release;
dontUnpack = true;
dontBuild = true;
@@ -68,7 +68,7 @@ in
fixup-yarn-lock = stdenv.mkDerivation {
pname = "fixup-yarn-lock";
inherit (lib.trivial) version;
version = lib.trivial.release;
dontUnpack = true;
dontBuild = true;
@@ -136,8 +136,11 @@ in
prefetch-yarn-deps
cacert
];
GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt";
NODE_EXTRA_CA_CERTS = "${cacert}/etc/ssl/certs/ca-bundle.crt";
env = {
GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt";
NODE_EXTRA_CA_CERTS = "${cacert}/etc/ssl/certs/ca-bundle.crt";
};
buildPhase = ''
runHook preBuild
+119 -119
View File
@@ -572,69 +572,76 @@ rec {
other derivations. A derivation created with linkFarm is often used in CI
as a easy way to build multiple derivations at once.
*/
symlinkJoin =
args_@{
name ?
assert lib.assertMsg (
args_ ? pname && args_ ? version
) "symlinkJoin requires either a `name` OR `pname` and `version`";
"${args_.pname}-${args_.version}",
paths,
stripPrefix ? "",
preferLocalBuild ? true,
allowSubstitutes ? false,
postBuild ? "",
failOnMissing ? stripPrefix == "",
...
}:
assert lib.assertMsg (stripPrefix != "" -> (hasPrefix "/" stripPrefix && stripPrefix != "/")) ''
stripPrefix must be either an empty string (disable stripping behavior), or relative path prefixed with /.
symlinkJoin = lib.extendMkDerivation {
constructDrv = stdenvNoCC.mkDerivation;
Ensure that the path starts with / and specifies path to the subdirectory.
'';
excludeDrvArgNames = [
"postBuild"
"stripPrefix"
"paths"
"failOnMissing"
];
let
mapPaths =
f: paths:
map (
path:
if path == null then
null
else if isList path then
mapPaths f path
else
f path
) paths;
args =
removeAttrs args_ [
"name"
"postBuild"
"stripPrefix"
"paths"
"failOnMissing"
]
// {
# Allow getting the proper position of the output derivation.
# Since one of these are required, it should be fairly accurate.
pos =
if args_ ? pname then
builtins.unsafeGetAttrPos "pname" args_
extendDrvArgs =
finalAttrs:
args@{
name ?
assert lib.assertMsg (
finalAttrs ? pname && finalAttrs ? version
) "symlinkJoin requires either a `name` OR `pname` and `version`";
"${finalAttrs.pname}-${finalAttrs.version}",
paths,
stripPrefix ? "",
preferLocalBuild ? true,
allowSubstitutes ? false,
postBuild ? "",
failOnMissing ? stripPrefix == "",
...
}:
assert lib.assertMsg (stripPrefix != "" -> (hasPrefix "/" stripPrefix && stripPrefix != "/")) ''
stripPrefix must be either an empty string (disable stripping behavior), or relative path prefixed with /.
Ensure that the path starts with / and specifies path to the subdirectory.
'';
let
mapPaths =
f:
map (
path:
if path == null then
null
else if isList path then
mapPaths f path
else
builtins.unsafeGetAttrPos "name" args_;
inherit preferLocalBuild allowSubstitutes;
paths = mapPaths (path: "${path}${stripPrefix}") paths;
passAsFile = [ "paths" ];
}; # pass the defaults
in
runCommand name args ''
mkdir -p $out
for i in $(cat $pathsPath); do
${optionalString (!failOnMissing) "if test -d $i; then "}${lndir}/bin/lndir -silent $i $out${
optionalString (!failOnMissing) "; fi"
}
done
${postBuild}
'';
f path
);
in
{
enableParallelBuilding = true;
inherit name allowSubstitutes preferLocalBuild;
passAsFile = [
"buildCommand"
"paths"
];
paths = mapPaths (path: "${path}${stripPrefix}") paths;
buildCommand = ''
mkdir -p $out
for i in $(cat $pathsPath); do
${optionalString (!failOnMissing) "if test -d $i; then "}${lndir}/bin/lndir -silent $i $out${
optionalString (!failOnMissing) "; fi"
}
done
${postBuild}
'';
}
// lib.optionalAttrs (!args ? meta) {
pos =
if args ? pname then
builtins.unsafeGetAttrPos "pname" args
else
builtins.unsafeGetAttrPos "name" args;
};
};
# TODO: move linkFarm docs to the Nixpkgs manual
/*
@@ -687,7 +694,7 @@ rec {
# This is the best we can do since the other attrs are either defined here, or curried values that
# we cannot extract a position from
pos =
if lib.isAttrs entries then
if (lib.isAttrs entries) && (entries != { }) then
builtins.unsafeGetAttrPos (builtins.head (builtins.attrNames entries)) entries
else
null;
@@ -1021,76 +1028,69 @@ rec {
];
}
*/
applyPatches =
{
src,
name ?
(
if builtins.typeOf src == "path" then
baseNameOf src
else if builtins.isAttrs src && builtins.hasAttr "name" src then
src.name
else
throw "applyPatches: please supply a `name` argument because a default name can only be computed when the `src` is a path or is an attribute set with a `name` attribute."
)
+ "-patched",
patches ? [ ],
prePatch ? "",
postPatch ? "",
...
}@args:
assert lib.assertMsg (
!args ? meta
) "applyPatches will not merge 'meta', change it in 'src' instead";
assert lib.assertMsg (
!args ? passthru
) "applyPatches will not merge 'passthru', change it in 'src' instead";
if patches == [ ] && prePatch == "" && postPatch == "" then
src # nothing to do, so use original src to avoid additional drv
else
applyPatches = lib.extendMkDerivation {
constructDrv = stdenvNoCC.mkDerivation;
extendDrvArgs =
finalAttrs:
{
src,
...
}@args:
assert lib.assertMsg (
!args ? meta
) "applyPatches will not merge 'meta', change it in 'src' instead";
assert lib.assertMsg (
!args ? passthru
) "applyPatches will not merge 'passthru', change it in 'src' instead";
let
keepAttrs = names: lib.filterAttrs (name: val: lib.elem name names);
# enables tools like nix-update to determine what src attributes to replace
extraPassthru = lib.optionalAttrs (lib.isAttrs src) (
extraPassthru = lib.optionalAttrs (lib.isAttrs finalAttrs.src) (
keepAttrs [
"rev"
"tag"
"url"
"outputHash"
"outputHashAlgo"
] src
] finalAttrs.src
);
in
stdenvNoCC.mkDerivation (
{
inherit
name
src
patches
prePatch
postPatch
;
preferLocalBuild = true;
allowSubstitutes = false;
phases = "unpackPhase patchPhase installPhase";
installPhase = "cp -R ./ $out";
}
{
name =
args.name or (
if builtins.isPath finalAttrs.src then
baseNameOf finalAttrs.src + "-patched"
else if builtins.isAttrs finalAttrs.src && (finalAttrs.src ? name) then
finalAttrs.src.name + "-patched"
else
throw "applyPatches: please supply a `name` argument because a default name can only be computed when the `src` is a path or is an attribute set with a `name` attribute."
);
# Manually setting `name` can mess up positioning.
# This should fix it.
pos = builtins.unsafeGetAttrPos "src" args;
preferLocalBuild = true;
allowSubstitutes = false;
# unconditionally disable phases that are we don't want
phases = [
"unpackPhase"
"patchPhase"
"installPhase"
];
installPhase = "cp -R ./ $out";
# passthru the git and hash info for nix-update, as well
# as all the src's passthru attrs.
passthru = extraPassthru // finalAttrs.src.passthru or { };
# Carry (and merge) information from the underlying `src` if present.
// (optionalAttrs (src ? meta) {
inherit (src) meta;
})
// (optionalAttrs (extraPassthru != { } || src ? passthru) {
passthru = extraPassthru // src.passthru or { };
})
# Forward any additional arguments to the derivation
// (removeAttrs args [
"src"
"name"
"patches"
"prePatch"
"postPatch"
])
);
meta = lib.optionalAttrs (src ? meta) (removeAttrs finalAttrs.src.meta [ "position" ]);
};
};
# TODO: move docs to Nixpkgs manual
# An immutable file in the store with a length of 0 bytes.
+1 -1
View File
@@ -212,7 +212,7 @@ stdenv.mkDerivation (finalAttrs: {
postInstall = ''
mkdir -p $out/bin
ln -s $out/2s2h/2s2h.elf $out/bin/2s2h
install -Dm644 ../mm/linux/2s2hIcon.png $out/share/pixmaps/2s2h.png
install -Dm644 ../mm/linux/2s2hIcon.png $out/share/icons/hicolor/512x512/apps/2s2h.png
install -Dm644 -t $out/share/licenses/2ship2harkinian ../LICENSE
install -Dm644 -t $out/share/licenses/2ship2harkinian/OTRExporter ../OTRExporter/LICENSE
+2 -2
View File
@@ -10,13 +10,13 @@ telegram-desktop.override {
inherit withWebkit;
unwrapped = telegram-desktop.unwrapped.overrideAttrs (old: rec {
pname = "64gram-unwrapped";
version = "1.1.93";
version = "1.1.94";
src = fetchFromGitHub {
owner = "TDesktop-x64";
repo = "tdesktop";
tag = "v${version}";
hash = "sha256-AwzTmEaN6MsJNq1W+cyAbg+QkYrPaV2LXmt3NzKc/vQ=";
hash = "sha256-pMcG0B3YxrvvaLsC2yWJsm9wHpv5+xLtp+wQhRtJ38Q=";
fetchSubmodules = true;
};
+1 -2
View File
@@ -93,8 +93,7 @@ stdenv.mkDerivation (finalAttrs: {
--set-rpath ${lib.makeLibraryPath finalAttrs.buildInputs} \
$out/share/a-keys-path/a-keys-path
mkdir -p $out/share/pixmaps
cp icon.png $out/share/pixmaps/a-keys-path.png
install -D icon.png $out/share/icons/hicolor/256x256/apps/a-keys-path.png
install -Dm644 ${finalAttrs.desktopItem}/share/applications/a-keys-path.desktop \
$out/share/applications/a-keys-path.desktop
+1 -1
View File
@@ -53,7 +53,7 @@ stdenv.mkDerivation (finalAttrs: {
substituteAll "${./abuse.sh}" $out/bin/abuse
chmod +x $out/bin/abuse
install -Dm644 ${finalAttrs.data}/doc/abuse.png $out/share/pixmaps/abuse.png
install -Dm644 ${finalAttrs.data}/doc/abuse.png -t $out/share/icons/hicolor/32x32/apps
'';
env.NIX_CFLAGS_COMPILE = "-I${lib.getDev SDL2}/include/SDL2";
@@ -1,18 +1,18 @@
{
lib,
stdenv,
gccStdenv,
fetchurl,
libbsd,
libressl,
pkg-config,
}:
stdenv.mkDerivation rec {
gccStdenv.mkDerivation (finalAttrs: {
pname = "acme-client";
version = "1.3.3";
src = fetchurl {
url = "https://data.wolfsden.cz/sources/acme-client-${version}.tar.gz";
url = "https://data.wolfsden.cz/sources/acme-client-${finalAttrs.version}.tar.gz";
hash = "sha256-HJOk2vlDD7ADrLdf/eLEp+teu9XN0KrghEe6y4FIDoI=";
};
@@ -37,4 +37,4 @@ stdenv.mkDerivation rec {
maintainers = with lib.maintainers; [ pmahoney ];
mainProgram = "acme-client";
};
}
})
+3 -3
View File
@@ -11,7 +11,7 @@
buildGoModule (finalAttrs: {
pname = "actionlint";
version = "1.7.10";
version = "1.7.11";
subPackages = [ "cmd/actionlint" ];
@@ -19,10 +19,10 @@ buildGoModule (finalAttrs: {
owner = "rhysd";
repo = "actionlint";
tag = "v${finalAttrs.version}";
hash = "sha256-KnvFzV1VDivt7JL1lavM9wgaxdsdnEiLAk/pmzkXi+c=";
hash = "sha256-oBl+9vHynm6I3I4sF2ZyszogOxKh5kiDsdHwgWjVhVI=";
};
vendorHash = "sha256-McXlYsJvANyPAXAaXM8/NCFxbDs9IgSgFvt68h8mGek=";
vendorHash = "sha256-cUeGRwPiqeO3BGjWbbD5YtGC/B4v00/hKu09uDETMm8=";
nativeBuildInputs = [
makeWrapper
@@ -62,8 +62,10 @@ stdenv.mkDerivation (finalAttrs: {
touch $XDG_CONFIG_HOME/icedtea-web/deployment.properties
'';
HOME = "/build";
XDG_CONFIG_HOME = "/build";
env = {
HOME = "/build";
XDG_CONFIG_HOME = "/build";
};
configureFlags = [
"--with-itw-libs=DISTRIBUTION"
+7 -2
View File
@@ -7,6 +7,7 @@
makeDesktopItem,
runCommand,
yq-go,
imagemagick,
_experimental-update-script-combinators,
nix-update-script,
}:
@@ -26,7 +27,10 @@ flutter332.buildFlutterApplication {
pubspecLock = lib.importJSON ./pubspec.lock.json;
nativeBuildInputs = [ copyDesktopItems ];
nativeBuildInputs = [
imagemagick
copyDesktopItems
];
buildInputs = [ libayatana-appindicator ];
@@ -44,7 +48,8 @@ flutter332.buildFlutterApplication {
];
postInstall = ''
install -D --mode=0644 assets/alisthelper.png -t $out/share/pixmaps
mkdir -p $out/share/icons/hicolor/1024x1024/apps
magick assets/alisthelper.png -resize 1024x1024 $out/share/icons/hicolor/1024x1024/apps/alisthelper.png
'';
passthru = {
+2 -2
View File
@@ -151,11 +151,11 @@ stdenv.mkDerivation (finalAttrs: {
installPhase = ''
runHook preInstall
mkdir -p $out/bin $out/libexec $out/share/applications $out/share/pixmaps $out/lib/systemd/system
mkdir -p $out/bin $out/libexec $out/share/applications $out/lib/systemd/system
install -m555 client/AmneziaVPN service/server/AmneziaVPN-service $out/bin/
install -m555 ../deploy/data/linux/client/bin/update-resolv-conf.sh $out/libexec/
install -m444 ../AppDir/AmneziaVPN.desktop $out/share/applications/
install -m444 ../deploy/data/linux/AmneziaVPN.png $out/share/pixmaps/
install -Dm444 ../deploy/data/linux/AmneziaVPN.png -t $out/share/icons/hicolor/512x512/apps
install -m444 ../deploy/data/linux/AmneziaVPN.service $out/lib/systemd/system/
runHook postInstall
+4 -4
View File
@@ -5,7 +5,7 @@
"packages": {
"": {
"dependencies": {
"@sourcegraph/amp": "^0.0.1770552107-g48e892"
"@sourcegraph/amp": "^0.0.1771171343-gd84e58"
}
},
"node_modules/@napi-rs/keyring": {
@@ -228,9 +228,9 @@
}
},
"node_modules/@sourcegraph/amp": {
"version": "0.0.1770552107-g48e892",
"resolved": "https://registry.npmjs.org/@sourcegraph/amp/-/amp-0.0.1770552107-g48e892.tgz",
"integrity": "sha512-LyMsJgGM8gXV6q2alsQW1KgXu1mIeLptZfROgqos7EERv0ogWleSIqolGJe1veaH3xC63d0LJsqI2LEYClExfw==",
"version": "0.0.1771171343-gd84e58",
"resolved": "https://registry.npmjs.org/@sourcegraph/amp/-/amp-0.0.1771171343-gd84e58.tgz",
"integrity": "sha512-1R2+pFx5p879/usZeKT/qb8h96aTriPxyVB7iPMGLfxUwGtV8kcgtoWs99tyib4Awz4ro+4eqLnm+k0N6p68xg==",
"license": "Amp Commercial License",
"dependencies": {
"@napi-rs/keyring": "1.1.9"

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