Merge commit '24c32abce296e4e182b1cbd0f1236ba65703a711' into haskell-updates
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
Generated
+261
-313
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ stdenvNoCC.mkDerivation (
|
||||
};
|
||||
in
|
||||
{
|
||||
inherit (lib.trivial) version;
|
||||
version = lib.trivial.release;
|
||||
pname = "nixpkgs-manual";
|
||||
|
||||
nativeBuildInputs = [ nixos-render-docs ];
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
};
|
||||
|
||||
services = {
|
||||
displayManager.sddm.enable = true;
|
||||
displayManager.plasma-login-manager.enable = true;
|
||||
libinput.enable = true; # for touchpad support on many laptops
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
'';
|
||||
|
||||
|
||||
@@ -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 = { };
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
""
|
||||
}
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Executable → Regular
@@ -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
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
|
||||
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
];
|
||||
})
|
||||
];
|
||||
|
||||
@@ -30,7 +30,6 @@ let
|
||||
);
|
||||
postBootCommands = pkgs.writeText "local-cmds" ''
|
||||
${config.boot.postBootCommands}
|
||||
${config.powerManagement.powerUpCommands}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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")
|
||||
'';
|
||||
}
|
||||
@@ -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 ];
|
||||
}
|
||||
@@ -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) ];
|
||||
|
||||
@@ -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,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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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/
|
||||
|
||||
+3
-3
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
@@ -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
@@ -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 ];
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
})
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
})
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
+4
-4
@@ -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";
|
||||
};
|
||||
}
|
||||
})
|
||||
@@ -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,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 = {
|
||||
|
||||
@@ -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
@@ -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
Reference in New Issue
Block a user