Merge remote-tracking branch 'origin/staging-next' into staging
This commit is contained in:
@@ -12,9 +12,14 @@ on:
|
||||
mergedSha:
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN:
|
||||
targetSha:
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
# Should only be provided in the merge queue, not in pull requests,
|
||||
# where we're evaluating untrusted code.
|
||||
CACHIX_AUTH_TOKEN_GHA:
|
||||
required: false
|
||||
|
||||
permissions: {}
|
||||
|
||||
@@ -55,21 +60,22 @@ jobs:
|
||||
uses: ./.github/actions/checkout
|
||||
with:
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
target-as-trusted-at: ${{ inputs.targetSha }}
|
||||
|
||||
- uses: cachix/install-nix-action@456688f15bc354bef6d396e4a35f4f89d40bf2b7 # v31
|
||||
- uses: cachix/install-nix-action@7ec16f2c061ab07b235a7245e06ed46fe9a1cab6 # v31
|
||||
with:
|
||||
# Sandbox is disabled on MacOS by default.
|
||||
extra_nix_config: sandbox = true
|
||||
|
||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
||||
with:
|
||||
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
|
||||
extraPullNames: nixpkgs-ci
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
# The nixpkgs-gha cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-gha' }}
|
||||
extraPullNames: nixpkgs-gha
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN_GHA }}
|
||||
pushFilter: '(-source$|-nixpkgs-tarball-)'
|
||||
|
||||
- run: nix-env --install -f nixpkgs/untrusted-pinned -A nix-build-uncached
|
||||
- run: nix-env --install -f nixpkgs/trusted-pinned -A nix-build-uncached
|
||||
|
||||
- name: Build shell
|
||||
if: contains(matrix.builds, 'shell')
|
||||
|
||||
@@ -4,10 +4,10 @@ on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
baseBranch:
|
||||
required: true
|
||||
required: false
|
||||
type: string
|
||||
headBranch:
|
||||
required: true
|
||||
required: false
|
||||
type: string
|
||||
mergedSha:
|
||||
required: true
|
||||
@@ -16,8 +16,10 @@ on:
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN:
|
||||
required: true
|
||||
# Should only be provided in the merge queue, not in pull requests,
|
||||
# where we're evaluating untrusted code.
|
||||
CACHIX_AUTH_TOKEN_GHA:
|
||||
required: false
|
||||
|
||||
permissions: {}
|
||||
|
||||
@@ -27,6 +29,7 @@ defaults:
|
||||
|
||||
jobs:
|
||||
commits:
|
||||
if: inputs.baseBranch && inputs.headBranch
|
||||
permissions:
|
||||
pull-requests: write
|
||||
runs-on: ubuntu-24.04-arm
|
||||
@@ -82,14 +85,14 @@ jobs:
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
target-as-trusted-at: ${{ inputs.targetSha }}
|
||||
|
||||
- uses: cachix/install-nix-action@456688f15bc354bef6d396e4a35f4f89d40bf2b7 # v31
|
||||
- uses: cachix/install-nix-action@7ec16f2c061ab07b235a7245e06ed46fe9a1cab6 # v31
|
||||
|
||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
||||
with:
|
||||
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
|
||||
extraPullNames: nixpkgs-ci
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
# The nixpkgs-gha cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-gha' }}
|
||||
extraPullNames: nixpkgs-gha
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN_GHA }}
|
||||
pushFilter: -source$
|
||||
|
||||
- name: Build codeowners validator
|
||||
|
||||
+12
-10
@@ -19,8 +19,10 @@ on:
|
||||
default: false
|
||||
type: boolean
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN:
|
||||
required: true
|
||||
# Should only be provided in the merge queue, not in pull requests,
|
||||
# where we're evaluating untrusted code.
|
||||
CACHIX_AUTH_TOKEN_GHA:
|
||||
required: false
|
||||
|
||||
permissions: {}
|
||||
|
||||
@@ -52,7 +54,7 @@ jobs:
|
||||
ci/pinned.json
|
||||
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@456688f15bc354bef6d396e4a35f4f89d40bf2b7 # v31
|
||||
uses: cachix/install-nix-action@7ec16f2c061ab07b235a7245e06ed46fe9a1cab6 # v31
|
||||
|
||||
- name: Load supported versions
|
||||
id: versions
|
||||
@@ -98,14 +100,14 @@ jobs:
|
||||
target-as-trusted-at: ${{ inputs.targetSha }}
|
||||
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@456688f15bc354bef6d396e4a35f4f89d40bf2b7 # v31
|
||||
uses: cachix/install-nix-action@7ec16f2c061ab07b235a7245e06ed46fe9a1cab6 # v31
|
||||
|
||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
||||
with:
|
||||
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
|
||||
extraPullNames: nixpkgs-ci
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
# The nixpkgs-gha cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-gha' }}
|
||||
extraPullNames: nixpkgs-gha
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN_GHA }}
|
||||
pushFilter: '(-source|-single-chunk)$'
|
||||
|
||||
- name: Evaluate the ${{ matrix.system }} output paths at the merge commit
|
||||
@@ -186,7 +188,7 @@ jobs:
|
||||
merge-multiple: true
|
||||
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@456688f15bc354bef6d396e4a35f4f89d40bf2b7 # v31
|
||||
uses: cachix/install-nix-action@7ec16f2c061ab07b235a7245e06ed46fe9a1cab6 # v31
|
||||
|
||||
- name: Combine all output paths and eval stats
|
||||
run: |
|
||||
@@ -349,7 +351,7 @@ jobs:
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
|
||||
- name: Install Nix
|
||||
uses: cachix/install-nix-action@456688f15bc354bef6d396e4a35f4f89d40bf2b7 # v31
|
||||
uses: cachix/install-nix-action@7ec16f2c061ab07b235a7245e06ed46fe9a1cab6 # v31
|
||||
|
||||
- name: Run misc eval tasks in parallel
|
||||
run: |
|
||||
|
||||
+15
-13
@@ -10,8 +10,10 @@ on:
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN:
|
||||
required: true
|
||||
# Should only be provided in the merge queue, not in pull requests,
|
||||
# where we're evaluating untrusted code.
|
||||
CACHIX_AUTH_TOKEN_GHA:
|
||||
required: false
|
||||
|
||||
permissions: {}
|
||||
|
||||
@@ -33,7 +35,7 @@ jobs:
|
||||
with:
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
|
||||
- uses: cachix/install-nix-action@456688f15bc354bef6d396e4a35f4f89d40bf2b7 # v31
|
||||
- uses: cachix/install-nix-action@7ec16f2c061ab07b235a7245e06ed46fe9a1cab6 # v31
|
||||
|
||||
# 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.
|
||||
@@ -68,14 +70,14 @@ jobs:
|
||||
with:
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
|
||||
- uses: cachix/install-nix-action@456688f15bc354bef6d396e4a35f4f89d40bf2b7 # v31
|
||||
- uses: cachix/install-nix-action@7ec16f2c061ab07b235a7245e06ed46fe9a1cab6 # v31
|
||||
|
||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
||||
with:
|
||||
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
|
||||
extraPullNames: nixpkgs-ci
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
# The nixpkgs-gha cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-gha' }}
|
||||
extraPullNames: nixpkgs-gha
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN_GHA }}
|
||||
pushFilter: -source$
|
||||
|
||||
- name: Parse all nix files
|
||||
@@ -97,14 +99,14 @@ jobs:
|
||||
merged-as-untrusted-at: ${{ inputs.mergedSha }}
|
||||
target-as-trusted-at: ${{ inputs.targetSha }}
|
||||
|
||||
- uses: cachix/install-nix-action@456688f15bc354bef6d396e4a35f4f89d40bf2b7 # v31
|
||||
- uses: cachix/install-nix-action@7ec16f2c061ab07b235a7245e06ed46fe9a1cab6 # v31
|
||||
|
||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
||||
with:
|
||||
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
|
||||
extraPullNames: nixpkgs-ci
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
# The nixpkgs-gha cache should not be trusted or used outside of Nixpkgs and its forks' CI.
|
||||
name: ${{ vars.CACHIX_NAME || 'nixpkgs-gha' }}
|
||||
extraPullNames: nixpkgs-gha
|
||||
authToken: ${{ secrets.CACHIX_AUTH_TOKEN_GHA }}
|
||||
pushFilter: -source$
|
||||
|
||||
- name: Running nixpkgs-vet
|
||||
|
||||
@@ -13,9 +13,6 @@ on:
|
||||
targetSha:
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN:
|
||||
required: true
|
||||
|
||||
permissions: {}
|
||||
|
||||
@@ -23,7 +20,10 @@ jobs:
|
||||
prepare:
|
||||
runs-on: ubuntu-24.04-arm
|
||||
outputs:
|
||||
systems: ${{ steps.systems.outputs.systems }}
|
||||
baseBranch: ${{ steps.prepare.outputs.base }}
|
||||
mergedSha: ${{ steps.prepare.outputs.mergedSha }}
|
||||
targetSha: ${{ steps.prepare.outputs.targetSha }}
|
||||
systems: ${{ steps.prepare.outputs.systems }}
|
||||
steps:
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
@@ -31,19 +31,50 @@ jobs:
|
||||
sparse-checkout: |
|
||||
ci/supportedSystems.json
|
||||
|
||||
- name: Load supported systems
|
||||
id: systems
|
||||
run: |
|
||||
echo "systems=$(jq -c <ci/supportedSystems.json)" >> "$GITHUB_OUTPUT"
|
||||
- id: prepare
|
||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
||||
env:
|
||||
MERGED_SHA: ${{ inputs.mergedSha }}
|
||||
TARGET_SHA: ${{ inputs.targetSha }}
|
||||
with:
|
||||
script: |
|
||||
const { classify } = require('./ci/supportedBranches.js')
|
||||
const baseBranch = (
|
||||
context.payload.merge_group?.base_ref ??
|
||||
context.payload.pull_request.base.ref
|
||||
).replace(/^refs\/heads\//, '')
|
||||
const baseClassification = classify(baseBranch)
|
||||
core.setOutput('base', baseClassification)
|
||||
core.info('base classification:', baseClassification)
|
||||
|
||||
core.setOutput('mergedSha', context.payload.merge_group?.head_sha ?? process.env.MERGED_SHA)
|
||||
core.info(`mergedSha: ${context.payload.merge_group?.head_sha ?? process.env.MERGED_SHA}`)
|
||||
core.setOutput('targetSha', context.payload.merge_group?.base_sha ?? process.env.TARGET_SHA)
|
||||
core.info(`targetSha: ${context.payload.merge_group?.base_sha ?? process.env.TARGET_SHA}`)
|
||||
core.setOutput('systems', require('./ci/supportedSystems.json'))
|
||||
|
||||
check:
|
||||
name: Check
|
||||
needs: [prepare]
|
||||
uses: ./.github/workflows/check.yml
|
||||
permissions:
|
||||
# cherry-picks; formality right now, but unused
|
||||
pull-requests: write
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN_GHA: ${{ secrets.CACHIX_AUTH_TOKEN_GHA }}
|
||||
with:
|
||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
||||
targetSha: ${{ needs.prepare.outputs.targetSha }}
|
||||
|
||||
lint:
|
||||
name: Lint
|
||||
needs: [prepare]
|
||||
uses: ./.github/workflows/lint.yml
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
CACHIX_AUTH_TOKEN_GHA: ${{ secrets.CACHIX_AUTH_TOKEN_GHA }}
|
||||
with:
|
||||
mergedSha: ${{ inputs.mergedSha || github.event.merge_group.head_sha }}
|
||||
targetSha: ${{ inputs.targetSha || github.event.merge_group.base_sha }}
|
||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
||||
targetSha: ${{ needs.prepare.outputs.targetSha }}
|
||||
|
||||
eval:
|
||||
name: Eval
|
||||
@@ -55,13 +86,25 @@ jobs:
|
||||
# compare
|
||||
statuses: write
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
CACHIX_AUTH_TOKEN_GHA: ${{ secrets.CACHIX_AUTH_TOKEN_GHA }}
|
||||
with:
|
||||
artifact-prefix: ${{ inputs.artifact-prefix }}
|
||||
mergedSha: ${{ inputs.mergedSha || github.event.merge_group.head_sha }}
|
||||
targetSha: ${{ inputs.targetSha || github.event.merge_group.base_sha }}
|
||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
||||
targetSha: ${{ needs.prepare.outputs.targetSha }}
|
||||
systems: ${{ needs.prepare.outputs.systems }}
|
||||
|
||||
build:
|
||||
name: Build
|
||||
needs: [prepare]
|
||||
uses: ./.github/workflows/build.yml
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN_GHA: ${{ secrets.CACHIX_AUTH_TOKEN_GHA }}
|
||||
with:
|
||||
artifact-prefix: ${{ inputs.artifact-prefix }}
|
||||
baseBranch: ${{ needs.prepare.outputs.baseBranch }}
|
||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
||||
targetSha: ${{ needs.prepare.outputs.targetSha }}
|
||||
|
||||
# This job's only purpose is to create the target for the "Required Status Checks" branch ruleset.
|
||||
# It "needs" all the jobs that should block the Merge Queue.
|
||||
unlock:
|
||||
|
||||
@@ -35,6 +35,10 @@ jobs:
|
||||
into: staging-next-25.05
|
||||
- from: staging-next-25.05
|
||||
into: staging-25.05
|
||||
- from: master
|
||||
into: staging-next-25.11
|
||||
- from: staging-next-25.11
|
||||
into: staging-25.11
|
||||
- name: merge-base(master,staging) → haskell-updates
|
||||
from: master staging
|
||||
into: haskell-updates
|
||||
|
||||
@@ -8,8 +8,6 @@ on:
|
||||
required: true
|
||||
type: string
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN:
|
||||
required: true
|
||||
NIXPKGS_CI_APP_PRIVATE_KEY:
|
||||
required: true
|
||||
|
||||
@@ -63,8 +61,6 @@ jobs:
|
||||
permissions:
|
||||
# cherry-picks
|
||||
pull-requests: write
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
with:
|
||||
baseBranch: ${{ needs.prepare.outputs.baseBranch }}
|
||||
headBranch: ${{ needs.prepare.outputs.headBranch }}
|
||||
@@ -75,8 +71,6 @@ jobs:
|
||||
name: Lint
|
||||
needs: [prepare]
|
||||
uses: ./.github/workflows/lint.yml
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
with:
|
||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
||||
targetSha: ${{ needs.prepare.outputs.targetSha }}
|
||||
@@ -88,8 +82,6 @@ jobs:
|
||||
permissions:
|
||||
# compare
|
||||
statuses: write
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
with:
|
||||
artifact-prefix: ${{ inputs.artifact-prefix }}
|
||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
||||
@@ -113,12 +105,11 @@ jobs:
|
||||
name: Build
|
||||
needs: [prepare]
|
||||
uses: ./.github/workflows/build.yml
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
with:
|
||||
artifact-prefix: ${{ inputs.artifact-prefix }}
|
||||
baseBranch: ${{ needs.prepare.outputs.baseBranch }}
|
||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
||||
targetSha: ${{ needs.prepare.outputs.targetSha }}
|
||||
|
||||
# This job's only purpose is to create the target for the "Required Status Checks" branch ruleset.
|
||||
# It "needs" all the jobs that should block merging a PR.
|
||||
|
||||
@@ -82,9 +82,8 @@ jobs:
|
||||
uses: ./.github/workflows/merge-group.yml
|
||||
# Those are actually only used on the merge_group event, but will throw an error if not set.
|
||||
permissions:
|
||||
pull-requests: write
|
||||
statuses: write
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
with:
|
||||
artifact-prefix: mg-
|
||||
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
|
||||
@@ -101,7 +100,6 @@ jobs:
|
||||
pull-requests: write
|
||||
statuses: write
|
||||
secrets:
|
||||
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
|
||||
NIXPKGS_CI_APP_PRIVATE_KEY: ${{ secrets.NIXPKGS_CI_APP_PRIVATE_KEY }}
|
||||
with:
|
||||
artifact-prefix: pr-
|
||||
|
||||
@@ -507,8 +507,14 @@ pkgs/servers/authelia/ @06kellyjac @dit7ya @nicomem
|
||||
pkgs/by-name/oc/octodns/ @anthonyroussel
|
||||
|
||||
# Teleport
|
||||
/pkgs/build-support/teleport @arianvp @justinas @sigma @tomberek @freezeboy @techknowlogick @JuliusFreudenberger
|
||||
pkgs/by-name/te/teleport* @arianvp @justinas @sigma @tomberek @freezeboy @techknowlogick @JuliusFreudenberger
|
||||
/pkgs/build-support/teleport @arianvp @justinas @sigma @tomberek @techknowlogick @JuliusFreudenberger
|
||||
pkgs/by-name/te/teleport* @arianvp @justinas @sigma @tomberek @techknowlogick @JuliusFreudenberger
|
||||
|
||||
# Warp-terminal
|
||||
pkgs/by-name/wa/warp-terminal/ @emilytrau @imadnyc @FlameFlag @johnrtitor
|
||||
|
||||
# Nim
|
||||
/doc/languages-frameworks/nim.section.md @NixOS/nim
|
||||
/pkgs/build-support/build-nim-package.nix @NixOS/nim
|
||||
/pkgs/build-support/build-nim-sbom.nix @NixOS/nim
|
||||
/pkgs/top-level/nim-overrides.nix @NixOS/nim
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
Nixpkgs includes Julia as the `julia` derivation.
|
||||
You can get specific versions by looking at the other `julia*` top-level derivations available.
|
||||
For example, `julia_19` corresponds to Julia 1.9.
|
||||
For example, `julia_112` corresponds to Julia 1.12.
|
||||
We also provide the current stable version as `julia-stable`, and an LTS version as `julia-lts`.
|
||||
|
||||
Occasionally, a Julia version has been too difficult to build from source in Nixpkgs and has been fetched prebuilt instead.
|
||||
|
||||
@@ -43,12 +43,12 @@ Here is a simple package example.
|
||||
|
||||
- It uses the `fetchFromGitHub` fetcher to get its source.
|
||||
|
||||
- It also accepts a `duneVersion` parameter (valid values are `"1"`, `"2"`, and
|
||||
`"3"`). The recommended practice is to set it only if you don't want the default
|
||||
value and/or it depends on something else like package version. You might see
|
||||
a not-supported argument `useDune2`. The behavior was `useDune2 = true;` =>
|
||||
`duneVersion = "2";` and `useDune2 = false;` => `duneVersion = "1";`. It was
|
||||
used at the time when dune3 didn't exist.
|
||||
- It also accepts a `duneVersion` parameter (valid values are `"2"`, and
|
||||
`"3"`). The recommended practice is to set it only if you don't want the
|
||||
default value and/or it depends on something else like package version. You
|
||||
might see a not-supported argument `useDune2`. The behavior was `useDune2 =
|
||||
true;` => `duneVersion = "2";` and `useDune2 = false;` => `duneVersion =
|
||||
"1";`. It was used at the time when dune3 didn't exist.
|
||||
|
||||
- It sets the optional `doCheck` attribute such that tests will be run with
|
||||
`dune runtest -p angstrom` after the build (`dune build -p angstrom`) is
|
||||
|
||||
@@ -104,6 +104,8 @@
|
||||
|
||||
- `mx-puppet-discord` was removed from Nixpkgs along with its NixOS module as it was unmaintained and was the only user of sha1 hashes in tree.
|
||||
|
||||
- `notary` has been removed because it was [archived upstream](https://github.com/notaryproject/.github/issues/70). Upstream recommends [`notation`](https://github.com/notaryproject/notation/) instead.
|
||||
|
||||
- `gradience` has been removed because it was archived upstream.
|
||||
|
||||
- `kbd` package's `outputs` now include a `man` and `scripts` outputs. The `unicode_start` and `unicode_stop` Bash scripts are now part of the `scripts` output, allowing most usages of the `kbd` package to not pull in `bash`.
|
||||
@@ -287,6 +289,8 @@
|
||||
Use `python3Packages.ddgs` instead.
|
||||
See [release note for v9.0.0](https://github.com/deedy5/ddgs/releases/tag/v9.0.0)
|
||||
|
||||
- `ra-multiplex` has been renamed to/replaced by `lspmux`. Its wrapper no longer includes `rust-analyzer`.
|
||||
|
||||
## Other Notable Changes {#sec-nixpkgs-release-25.11-notable-changes}
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
# Nixpkgs 26.05 (2026.05/??) {#sec-nixpkgs-release-26.05}
|
||||
|
||||
## Highlights {#sec-nixpkgs-release-26.05-highlights}
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
|
||||
## Backward Incompatibilities {#sec-nixpkgs-release-26.05-incompatibilities}
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
- `spoof` has been removed, as there are many issues upstream with it working on modern OS versions, and it appears to be unmaintained.
|
||||
|
||||
## Other Notable Changes {#sec-nixpkgs-release-26.05-notable-changes}
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
|
||||
## Nixpkgs Library {#sec-nixpkgs-release-26.05-lib}
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
### Breaking changes {#sec-nixpkgs-release-26.05-lib-breaking}
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
|
||||
|
||||
### Deprecations {#sec-nixpkgs-release-26.05-lib-deprecations}
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
|
||||
|
||||
### Additions and Improvements {#sec-nixpkgs-release-26.05-lib-additions-improvements}
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
+125
@@ -16,6 +16,7 @@
|
||||
{ lib }:
|
||||
let
|
||||
inherit (lib)
|
||||
concatMapStringsSep
|
||||
isList
|
||||
isAttrs
|
||||
substring
|
||||
@@ -23,6 +24,7 @@ let
|
||||
concatLists
|
||||
const
|
||||
elem
|
||||
foldl'
|
||||
generators
|
||||
id
|
||||
mapAttrs
|
||||
@@ -454,6 +456,129 @@ rec {
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
Pretty-print a list of test failures.
|
||||
|
||||
This takes an attribute set containing `failures` (a list of test failures
|
||||
produced by `runTests`) and pretty-prints each failing test, before
|
||||
throwing an error containing the raw test data as JSON.
|
||||
|
||||
If the input list is empty, `null` is returned.
|
||||
|
||||
# Inputs
|
||||
|
||||
`failures`
|
||||
|
||||
: A list of test failures (produced `runTests`), each containing `name`,
|
||||
`expected`, and `result` attributes.
|
||||
|
||||
# Type
|
||||
|
||||
```
|
||||
throwTestFailures :: {
|
||||
failures = [
|
||||
{
|
||||
name :: String;
|
||||
expected :: a;
|
||||
result :: a;
|
||||
}
|
||||
];
|
||||
}
|
||||
->
|
||||
null
|
||||
```
|
||||
|
||||
# Examples
|
||||
:::{.example}
|
||||
|
||||
## `lib.debug.throwTestFailures` usage example
|
||||
|
||||
```nix
|
||||
throwTestFailures {
|
||||
failures = [
|
||||
{
|
||||
name = "testDerivation";
|
||||
expected = derivation {
|
||||
name = "a";
|
||||
builder = "bash";
|
||||
system = "x86_64-linux";
|
||||
};
|
||||
result = derivation {
|
||||
name = "b";
|
||||
builder = "bash";
|
||||
system = "x86_64-linux";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
->
|
||||
trace: FAIL testDerivation:
|
||||
Expected: <derivation a>
|
||||
Result: <derivation b>
|
||||
|
||||
error:
|
||||
… while evaluating the file '...':
|
||||
|
||||
… caused by explicit throw
|
||||
at /nix/store/.../lib/debug.nix:528:7:
|
||||
527| in
|
||||
528| throw (
|
||||
| ^
|
||||
529| builtins.seq traceFailures (
|
||||
|
||||
error: 1 tests failed:
|
||||
- testDerivation
|
||||
|
||||
[{"expected":"/nix/store/xh7kyqp69mxkwspmi81a94m9xx74r8dr-a","name":"testDerivation","result":"/nix/store/503l84nir4zw57d1shfhai25bxxn16c6-b"}]
|
||||
null
|
||||
```
|
||||
|
||||
:::
|
||||
*/
|
||||
throwTestFailures =
|
||||
{
|
||||
failures,
|
||||
description ? "tests",
|
||||
...
|
||||
}:
|
||||
if failures == [ ] then
|
||||
null
|
||||
else
|
||||
let
|
||||
toPretty =
|
||||
value:
|
||||
# Thanks to @Ma27 for this:
|
||||
#
|
||||
# > The `unsafeDiscardStringContext` is useful when the `toPretty`
|
||||
# > stumbles upon a derivation that would be realized without it (I
|
||||
# > ran into the problem when writing a test for a flake helper where
|
||||
# > I creating a bunch of "mock" derivations for different systems
|
||||
# > and Nix then tried to build those when the error-string got
|
||||
# > forced).
|
||||
#
|
||||
# See: https://github.com/NixOS/nixpkgs/pull/416207#discussion_r2145942389
|
||||
builtins.unsafeDiscardStringContext (generators.toPretty { allowPrettyValues = true; } value);
|
||||
|
||||
failureToPretty = failure: ''
|
||||
FAIL ${toPretty failure.name}:
|
||||
Expected:
|
||||
${toPretty failure.expected}
|
||||
|
||||
Result:
|
||||
${toPretty failure.result}
|
||||
'';
|
||||
|
||||
traceFailures = foldl' (_accumulator: failure: traceVal (failureToPretty failure)) null failures;
|
||||
in
|
||||
throw (
|
||||
builtins.seq traceFailures (
|
||||
"${builtins.toString (builtins.length failures)} ${description} failed:\n- "
|
||||
+ (concatMapStringsSep "\n- " (failure: failure.name) failures)
|
||||
+ "\n\n"
|
||||
+ builtins.toJSON failures
|
||||
)
|
||||
);
|
||||
|
||||
/**
|
||||
Create a test assuming that list elements are `true`.
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ let
|
||||
# This is not allowed generally, but we're in the tests here, so we'll allow ourselves.
|
||||
storeDirPath = /. + builtins.storeDir;
|
||||
|
||||
cases = lib.runTests {
|
||||
failures = lib.runTests {
|
||||
# Test examples from the lib.path.append documentation
|
||||
testAppendExample1 = {
|
||||
expr = append /foo "bar/baz";
|
||||
@@ -326,7 +326,6 @@ let
|
||||
};
|
||||
};
|
||||
in
|
||||
if cases == [ ] then
|
||||
"Unit tests successful"
|
||||
else
|
||||
throw "Path unit tests failed: ${lib.generators.toPretty { } cases}"
|
||||
lib.debug.throwTestFailures {
|
||||
inherit failures;
|
||||
}
|
||||
|
||||
+27
-2
@@ -4741,8 +4741,6 @@ runTests {
|
||||
expected = "/non-existent/this/does/not/exist/for/real/please-dont-mess-with-your-local-fs/default.nix";
|
||||
};
|
||||
|
||||
# Tests for cross index utilities
|
||||
|
||||
testRenameCrossIndexFrom = {
|
||||
expr = lib.renameCrossIndexFrom "pkgs" {
|
||||
pkgsBuildBuild = "dummy-build-build";
|
||||
@@ -4819,4 +4817,31 @@ runTests {
|
||||
};
|
||||
};
|
||||
|
||||
testThrowTestFailuresEmpty = {
|
||||
expr = lib.debug.throwTestFailures {
|
||||
failures = [ ];
|
||||
};
|
||||
|
||||
expected = null;
|
||||
};
|
||||
|
||||
testThrowTestFailures = testingThrow (
|
||||
lib.debug.throwTestFailures {
|
||||
failures = [
|
||||
{
|
||||
name = "testDerivation";
|
||||
expected = builtins.derivation {
|
||||
name = "a";
|
||||
builder = "bash";
|
||||
system = "x86_64-linux";
|
||||
};
|
||||
result = builtins.derivation {
|
||||
name = "b";
|
||||
builder = "bash";
|
||||
system = "x86_64-linux";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@@ -241,7 +241,6 @@
|
||||
"mirkolenz": 5160954,
|
||||
"mstone": 412508,
|
||||
"n8henrie": 1234956,
|
||||
"niklaskorz": 590517,
|
||||
"ofalvai": 1694986,
|
||||
"pasqui23": 6931743,
|
||||
"prusnak": 42201,
|
||||
@@ -665,6 +664,18 @@
|
||||
},
|
||||
"name": "neovim"
|
||||
},
|
||||
"nim": {
|
||||
"description": "Maintains the nim language and build tooling",
|
||||
"id": 14913434,
|
||||
"maintainers": {
|
||||
"eclairevoyant": 848000
|
||||
},
|
||||
"members": {
|
||||
"Eveeifyeve": 88671402,
|
||||
"daylinmorgan": 47667941
|
||||
},
|
||||
"name": "nim"
|
||||
},
|
||||
"nix-formatting": {
|
||||
"description": "Maintain the official Nix formatter and apply it to Nixpkgs: https://nixos.org/community/teams/formatting/",
|
||||
"id": 9676823,
|
||||
@@ -676,8 +687,7 @@
|
||||
"0x4A6F": 9675338,
|
||||
"MattSturgeon": 5046562,
|
||||
"Sereja313": 112060595,
|
||||
"dasJ": 4971975,
|
||||
"piegamesde": 14054505
|
||||
"dasJ": 4971975
|
||||
},
|
||||
"name": "nix-formatting"
|
||||
},
|
||||
|
||||
@@ -3232,12 +3232,6 @@
|
||||
githubId = 10439709;
|
||||
name = "Bert Moens";
|
||||
};
|
||||
berdario = {
|
||||
email = "berdario@gmail.com";
|
||||
github = "berdario";
|
||||
githubId = 752835;
|
||||
name = "Dario Bertini";
|
||||
};
|
||||
bergey = {
|
||||
email = "bergey@teallabs.org";
|
||||
github = "bergey";
|
||||
@@ -3498,6 +3492,12 @@
|
||||
githubId = 37768199;
|
||||
name = "Christian Bergschneider";
|
||||
};
|
||||
bloominstrong = {
|
||||
email = "github@mail.bloominstrong.net";
|
||||
github = "bloominstrong";
|
||||
githubId = 114744388;
|
||||
name = "bloominstrong";
|
||||
};
|
||||
bloveless = {
|
||||
email = "brennon.loveless@gmail.com";
|
||||
github = "bloveless";
|
||||
@@ -3821,6 +3821,12 @@
|
||||
github = "britter";
|
||||
githubId = 1327662;
|
||||
};
|
||||
brittonr = {
|
||||
name = "Britton Robitzsch";
|
||||
email = "b@robitzs.ch";
|
||||
github = "brittonr";
|
||||
githubId = 4730485;
|
||||
};
|
||||
brodes = {
|
||||
email = "me@brod.es";
|
||||
github = "brhoades";
|
||||
@@ -5628,7 +5634,7 @@
|
||||
email = "nix@theriault.codes";
|
||||
github = "Dan-Theriault";
|
||||
githubId = 13945563;
|
||||
matrix = "@dan:matrix.org";
|
||||
matrix = "@Dan:matrix.org";
|
||||
name = "Daniel Theriault";
|
||||
};
|
||||
danbst = {
|
||||
@@ -6165,6 +6171,12 @@
|
||||
github = "deifactor";
|
||||
githubId = 30192992;
|
||||
};
|
||||
deimelias = {
|
||||
name = "Deim Elias";
|
||||
github = "DeimElias";
|
||||
email = "deimelias@gmail.com";
|
||||
githubId = 100871962;
|
||||
};
|
||||
deinferno = {
|
||||
name = "deinferno";
|
||||
github = "deinferno";
|
||||
@@ -8825,11 +8837,6 @@
|
||||
githubId = 32936898;
|
||||
name = "Wu Zhenyu";
|
||||
};
|
||||
freezeboy = {
|
||||
github = "freezeboy";
|
||||
githubId = 13279982;
|
||||
name = "freezeboy";
|
||||
};
|
||||
frenetic00 = {
|
||||
github = "frenetic00";
|
||||
githubId = 50942055;
|
||||
@@ -10112,12 +10119,6 @@
|
||||
githubId = 79340822;
|
||||
keys = [ { fingerprint = "3582 5B85 66C8 4F36 45C7 EC42 809F 7938 9CB1 8650"; } ];
|
||||
};
|
||||
havvy = {
|
||||
email = "ryan.havvy@gmail.com";
|
||||
github = "Havvy";
|
||||
githubId = 731722;
|
||||
name = "Ryan Scheel";
|
||||
};
|
||||
hawkw = {
|
||||
email = "eliza@elizas.website";
|
||||
github = "hawkw";
|
||||
@@ -11410,12 +11411,6 @@
|
||||
githubId = 8095978;
|
||||
name = "j-mendez";
|
||||
};
|
||||
j03 = {
|
||||
email = "github@johannesloetzsch.de";
|
||||
github = "johannesloetzsch";
|
||||
githubId = 175537;
|
||||
name = "Johannes Lötzsch";
|
||||
};
|
||||
j0hax = {
|
||||
name = "Johannes Arnold";
|
||||
email = "johannes.arnold@stud.uni-hannover.de";
|
||||
@@ -13285,12 +13280,6 @@
|
||||
githubId = 54859825;
|
||||
keys = [ { fingerprint = "B2D0 AA53 8DBE 60B0 0811 3FC0 2D52 5F67 791E 5834"; } ];
|
||||
};
|
||||
kampfschlaefer = {
|
||||
email = "arnold@arnoldarts.de";
|
||||
github = "kampfschlaefer";
|
||||
githubId = 3831860;
|
||||
name = "Arnold Krille";
|
||||
};
|
||||
kanashimia = {
|
||||
email = "chad@redpilled.dev";
|
||||
github = "kanashimia";
|
||||
@@ -13314,6 +13303,13 @@
|
||||
githubId = 34152449;
|
||||
name = "Karl Hallsby";
|
||||
};
|
||||
karpfediem = {
|
||||
name = "Karpfen";
|
||||
github = "karpfediem";
|
||||
githubId = 11753414;
|
||||
email = "nixos@karpfen.dev";
|
||||
matrix = "@karpfen:matrix.org";
|
||||
};
|
||||
kashw2 = {
|
||||
email = "supra4keanu@hotmail.com";
|
||||
github = "kashw2";
|
||||
@@ -14512,12 +14508,6 @@
|
||||
githubId = 736291;
|
||||
name = "Lee Machin";
|
||||
};
|
||||
leenaars = {
|
||||
email = "ml.software@leenaa.rs";
|
||||
github = "leenaars";
|
||||
githubId = 4158274;
|
||||
name = "Michiel Leenaars";
|
||||
};
|
||||
legojames = {
|
||||
github = "jrobinson-uk";
|
||||
githubId = 4701504;
|
||||
@@ -14755,6 +14745,18 @@
|
||||
matrix = "@libjared:matrix.org";
|
||||
name = "Jared Perry";
|
||||
};
|
||||
liferooter = {
|
||||
name = "Gleb Smirnov";
|
||||
github = "liferooter";
|
||||
githubId = 54807745;
|
||||
email = "glebsmirnov0708@gmail.com";
|
||||
matrix = "@liferooter:vanutp.dev";
|
||||
keys = [
|
||||
{
|
||||
fingerprint = "B793 3BBD DE3F 524F 69BD CEAB FF5A EB4C 68AC 0F8D";
|
||||
}
|
||||
];
|
||||
};
|
||||
liff = {
|
||||
email = "liff@iki.fi";
|
||||
github = "liff";
|
||||
@@ -15075,6 +15077,12 @@
|
||||
github = "lorenz";
|
||||
githubId = 5228892;
|
||||
};
|
||||
LorenzBischof = {
|
||||
name = "Lorenz Bischof";
|
||||
email = "nix@lorenzbischof.ch";
|
||||
github = "LorenzBischof";
|
||||
githubId = 1837725;
|
||||
};
|
||||
lorenzleutgeb = {
|
||||
email = "lorenz@leutgeb.xyz";
|
||||
github = "lorenzleutgeb";
|
||||
@@ -15648,12 +15656,6 @@
|
||||
githubId = 1433367;
|
||||
name = "Marc Fontaine";
|
||||
};
|
||||
magenbluten = {
|
||||
email = "magenbluten@codemonkey.cc";
|
||||
github = "magenbluten";
|
||||
githubId = 1140462;
|
||||
name = "magenbluten";
|
||||
};
|
||||
magicquark = {
|
||||
name = "magicquark";
|
||||
github = "magicquark";
|
||||
@@ -16389,6 +16391,12 @@
|
||||
githubId = 65052855;
|
||||
name = "maxicode";
|
||||
};
|
||||
maximiliancf = {
|
||||
email = "maximiliancf.dev@icloud.com";
|
||||
github = "MaximilianCF";
|
||||
githubId = 92341177;
|
||||
name = "Maximilian Canez Fernandes";
|
||||
};
|
||||
maximsmol = {
|
||||
email = "maximsmol@gmail.com";
|
||||
github = "maximsmol";
|
||||
@@ -16724,6 +16732,12 @@
|
||||
github = "merrkry";
|
||||
githubId = 124278440;
|
||||
};
|
||||
messemar = {
|
||||
email = "martin.messer@cyberus-technology.de";
|
||||
name = "messemar";
|
||||
github = "messemar";
|
||||
githubId = 22659757;
|
||||
};
|
||||
metalmatze = {
|
||||
email = "matthias.loibl@polarsignals.com";
|
||||
name = "Matthias Loibl";
|
||||
@@ -17395,12 +17409,6 @@
|
||||
githubId = 14153763;
|
||||
name = "modderme123";
|
||||
};
|
||||
modulistic = {
|
||||
email = "modulistic@gmail.com";
|
||||
github = "modulistic";
|
||||
githubId = 1902456;
|
||||
name = "Pablo Costa";
|
||||
};
|
||||
mog = {
|
||||
email = "mog-lists@rldn.net";
|
||||
github = "mogorman";
|
||||
@@ -20153,12 +20161,6 @@
|
||||
githubId = 121009904;
|
||||
name = "penalty1083";
|
||||
};
|
||||
penguwin = {
|
||||
email = "penguwin@penguwin.eu";
|
||||
github = "penguwin";
|
||||
githubId = 13225611;
|
||||
name = "Nicolas Martin";
|
||||
};
|
||||
pentane = {
|
||||
email = "cyclopentane@aidoskyneen.eu";
|
||||
github = "cyclic-pentane";
|
||||
@@ -20613,6 +20615,13 @@
|
||||
github = "plamper";
|
||||
githubId = 59016721;
|
||||
};
|
||||
PlasmaPower = {
|
||||
name = "Lee Bousfield";
|
||||
github = "PlasmaPower";
|
||||
githubId = 6006498;
|
||||
email = "ljbousfield+nix@gmail.com";
|
||||
matrix = "@plasmapower:matrix.org";
|
||||
};
|
||||
plchldr = {
|
||||
email = "mail@oddco.de";
|
||||
github = "plchldr";
|
||||
@@ -22698,6 +22707,12 @@
|
||||
github = "rudolfvesely";
|
||||
githubId = 13966949;
|
||||
};
|
||||
ruiiiijiiiiang = {
|
||||
name = "Rui Jiang";
|
||||
email = "me@ruijiang.me";
|
||||
github = "ruiiiijiiiiang";
|
||||
githubId = 911199;
|
||||
};
|
||||
Ruixi-rebirth = {
|
||||
name = "Ruixi-rebirth";
|
||||
email = "ruixirebirth@gmail.com";
|
||||
@@ -24971,6 +24986,14 @@
|
||||
githubId = 1694705;
|
||||
name = "Sam Stites";
|
||||
};
|
||||
storopoli = {
|
||||
email = "jose@storopoli.com";
|
||||
github = "storopoli";
|
||||
githubId = 43353831;
|
||||
name = "Jose Storopoli";
|
||||
keys = [ { fingerprint = "B8C0 1A87 C046 33C9 F6CD 0DA2 1BD3 8BE8 D065 3A7A"; } ];
|
||||
matrix = "@jose:storopoli.com";
|
||||
};
|
||||
strager = {
|
||||
email = "strager.nds@gmail.com";
|
||||
github = "strager";
|
||||
@@ -27734,6 +27757,11 @@
|
||||
githubId = 51289041;
|
||||
name = "Vuks";
|
||||
};
|
||||
vv01f = {
|
||||
github = "vv01f";
|
||||
githubId = 3034896;
|
||||
name = "Wolf";
|
||||
};
|
||||
vyorkin = {
|
||||
email = "vasiliy.yorkin@gmail.com";
|
||||
github = "vyorkin";
|
||||
|
||||
@@ -226,6 +226,18 @@ with lib.maintainers;
|
||||
shortName = "Cosmopolitan";
|
||||
};
|
||||
|
||||
ctrl-os = {
|
||||
# Existing members may approve additions.
|
||||
members = [
|
||||
blitz
|
||||
messemar
|
||||
flyfloh
|
||||
];
|
||||
|
||||
scope = "Team of Cyberus Technology employees that maintain packages relevant to CTRL-OS";
|
||||
shortName = "CTRL-OS";
|
||||
};
|
||||
|
||||
cuda = {
|
||||
github = "cuda-maintainers";
|
||||
};
|
||||
@@ -234,7 +246,6 @@ with lib.maintainers;
|
||||
# Verify additions by approval of an already existing member of the team.
|
||||
members = [
|
||||
xanderio
|
||||
blitz
|
||||
snu
|
||||
e1mo
|
||||
];
|
||||
@@ -620,7 +631,6 @@ with lib.maintainers;
|
||||
mate = {
|
||||
members = [
|
||||
bobby285271
|
||||
j03
|
||||
romildo
|
||||
];
|
||||
scope = "Maintain Mate desktop environment and related packages.";
|
||||
@@ -706,6 +716,11 @@ with lib.maintainers;
|
||||
shortName = "NGI";
|
||||
};
|
||||
|
||||
nim = {
|
||||
github = "nim";
|
||||
enableFeatureFreezePing = true;
|
||||
};
|
||||
|
||||
# same as https://github.com/orgs/NixOS/teams/nix-team
|
||||
nix = {
|
||||
members = [
|
||||
|
||||
@@ -138,6 +138,8 @@
|
||||
|
||||
- [dwl](https://codeberg.org/dwl/dwl), a compact, hackable compositor for Wayland based on wlroots. Available as [programs.dwl](#opt-programs.dwl.enable).
|
||||
|
||||
- [nebula-lighthouse-service](https://github.com/manuels/nebula-lighthouse-service), a public Nebula VPN lighthouse service. Available as [services.nebula-lighthouse-service](#opt-services.nebula-lighthouse-service.enable).
|
||||
|
||||
- [angrr](https://github.com/linyinfeng/angrr), a service that automatically cleans up old auto GC roots. Available as [services.angrr](#opt-services.angrr.enable).
|
||||
|
||||
- [Sharkey](https://joinsharkey.org), a Sharkish microblogging platform. Available as [services.sharkey](#opt-services.sharkey.enable).
|
||||
@@ -164,6 +166,8 @@
|
||||
|
||||
- [conman](https://github.com/dun/conman), a serial console management program. Available as [services.conman](#opt-services.conman.enable).
|
||||
|
||||
- [Prometheus Tailscale Exporter](https://github.com/adinhodovic/tailscale-exporter), a Prometheus exporter for Tailscale Tailnet metrics.
|
||||
|
||||
- [KMinion](https://github.com/redpanda-data/kminion), feature-rich Prometheus exporter for Apache Kafka. Available as [services.prometheus.exporters.kafka](options.html#opt-services.prometheus.exporters.kafka).
|
||||
|
||||
- [Beszel](https://beszel.dev), a lightweight server monitoring hub with historical data, docker stats, and alerts. Available as [`services.beszel.agent`](options.html#opt-services.beszel.agent.enable) and [`services.beszel.hub`](options.html#opt-services.beszel.hub.enable).
|
||||
@@ -200,6 +204,10 @@
|
||||
|
||||
- Linux 5.4 and all its variants have been removed since mainline will reach its end of life within the support-span of 25.11.
|
||||
|
||||
- The `services.nginx.sso` module has switched to generating its configuration
|
||||
file in `/run`. You should manually delete `/var/lib/nginx-sso/config.yaml` to
|
||||
avoid storing secret values to disk.
|
||||
|
||||
- The `services.polipo` module has been removed as `polipo` is unmaintained and archived upstream.
|
||||
|
||||
- `boot.enableContainers` is only turned on when a declarative NixOS container is defined in `containers`.
|
||||
@@ -395,6 +403,8 @@ and [release notes for v18](https://goteleport.com/docs/changelog/#1800-070325).
|
||||
- In all other cases, you'll need to set this option to `true` yourself.
|
||||
- `boot.isNspawnContainer` being `true` implies [](#opt-boot.isContainer) being `true`.
|
||||
|
||||
- `users.users.*.linger` now defaults to `null` rather than `false`, meaning NixOS will not attempt to enable or disable lingering for that user account, instead allowing for imperative control over lingering using the `loginctl` commands. In practice, this is unlikely to make a difference for most people, as new users are created without lingering configured. There is a new, related option, `users.manageLingering`, which can be used to prevent NixOS attempting to manage lingering entirely.
|
||||
|
||||
- Due to [deprecation of gnome-session X11 support](https://blogs.gnome.org/alatiera/2025/06/08/the-x11-session-removal/), `services.desktopManager.pantheon` now defaults to pantheon-wayland session. The X11 session has been removed, see [this issue](https://github.com/elementary/session-settings/issues/91) for details.
|
||||
|
||||
- `bcachefs` file systems will now use the out-of-tree module for supported kernels. The in-tree module has been removed, and users will need to switch to kernels that support the out-of-tree module.
|
||||
@@ -456,6 +466,8 @@ and [release notes for v18](https://goteleport.com/docs/changelog/#1800-070325).
|
||||
|
||||
- `linux_libre` & `linux_latest_libre` have been removed due to a lack of maintenance.
|
||||
|
||||
- `services.nebula.networks.<name>` will now store configuration files in `/etc/nebula/<name>.yml` and supports config reloading.
|
||||
|
||||
- `services.pds` has been renamed to `services.bluesky-pds`.
|
||||
|
||||
- `services.xserver.desktopManager.deepin` and associated packages have been removed due to being unmaintained. See issue [#422090](https://github.com/NixOS/nixpkgs/issues/422090) for more details.
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
# Release 26.05 (2026.05/??) {#sec-release-26.05}
|
||||
|
||||
## Highlights {#sec-release-26.05-highlights}
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
|
||||
## New Modules {#sec-release-26.05-new-modules}
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
|
||||
## Backward Incompatibilities {#sec-release-26.05-incompatibilities}
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
|
||||
## Other Notable Changes {#sec-release-26.05-notable-changes}
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
@@ -194,8 +194,7 @@ class StartCommand:
|
||||
|
||||
|
||||
class NixStartScript(StartCommand):
|
||||
"""A start script from nixos/modules/virtualiation/qemu-vm.nix
|
||||
that also satisfies the requirement of the BaseStartCommand.
|
||||
"""A start script from nixos/modules/virtualiation/qemu-vm.nix.
|
||||
These Nix commands have the particular characteristic that the
|
||||
machine name can be extracted out of them via a regex match.
|
||||
(Admittedly a _very_ implicit contract, evtl. TODO fix)
|
||||
|
||||
@@ -11,6 +11,7 @@ let
|
||||
any
|
||||
attrNames
|
||||
attrValues
|
||||
boolToString
|
||||
concatMap
|
||||
concatMapStringsSep
|
||||
concatStrings
|
||||
@@ -43,6 +44,7 @@ let
|
||||
stringLength
|
||||
trace
|
||||
types
|
||||
versionOlder
|
||||
xor
|
||||
;
|
||||
|
||||
@@ -455,16 +457,21 @@ let
|
||||
};
|
||||
|
||||
linger = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
type = types.nullOr types.bool;
|
||||
example = true;
|
||||
default = null;
|
||||
description = ''
|
||||
Whether to enable lingering for this user. If true, systemd user
|
||||
units will start at boot, rather than starting at login and stopping
|
||||
at logout. This is the declarative equivalent of running
|
||||
`loginctl enable-linger` for this user.
|
||||
Whether to enable or disable lingering for this user. Without
|
||||
lingering, user units will not be started until the user logs in,
|
||||
and may be stopped on logout depending on the settings in
|
||||
`logind.conf`.
|
||||
|
||||
If false, user units will not be started until the user logs in, and
|
||||
may be stopped on logout depending on the settings in `logind.conf`.
|
||||
By default, NixOS will not manage lingering, new users will default
|
||||
to not lingering, and lingering can be configured imperatively using
|
||||
`loginctl enable-linger` or `loginctl disable-linger`. Setting
|
||||
this option to `true` or `false` is the declarative equivalent of
|
||||
running `loginctl enable-linger` or `loginctl disable-linger`
|
||||
respectively.
|
||||
'';
|
||||
};
|
||||
};
|
||||
@@ -661,8 +668,6 @@ let
|
||||
shells = mapAttrsToList (_: u: u.shell) cfg.users;
|
||||
in
|
||||
filter types.shellPackage.check shells;
|
||||
|
||||
lingeringUsers = map (u: u.name) (attrValues (flip filterAttrs cfg.users (n: u: u.linger)));
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
@@ -710,6 +715,13 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
users.manageLingering = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Whether to manage whether users linger or not.";
|
||||
example = false;
|
||||
};
|
||||
|
||||
users.users = mkOption {
|
||||
default = { };
|
||||
type = with types; attrsOf (submodule userOpts);
|
||||
@@ -894,32 +906,52 @@ in
|
||||
else
|
||||
""; # keep around for backwards compatibility
|
||||
|
||||
systemd.services.linger-users = lib.mkIf ((length lingeringUsers) > 0) {
|
||||
systemd.services.linger-users = lib.mkIf cfg.manageLingering {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "systemd-logind.service" ];
|
||||
requires = [ "systemd-logind.service" ];
|
||||
|
||||
script =
|
||||
let
|
||||
lingerDir = "/var/lib/systemd/linger";
|
||||
lingeringUsersFile = builtins.toFile "lingering-users" (
|
||||
concatStrings (map (s: "${s}\n") (sort (a: b: a < b) lingeringUsers))
|
||||
); # this sorting is important for `comm` to work correctly
|
||||
lingeringUsers = filterAttrs (n: v: v.linger == true) cfg.users;
|
||||
nonLingeringUsers = filterAttrs (n: v: v.linger == false) cfg.users;
|
||||
lingeringUserNames = mapAttrsToList (n: v: v.name) lingeringUsers;
|
||||
nonLingeringUserNames = mapAttrsToList (n: v: v.name) nonLingeringUsers;
|
||||
in
|
||||
''
|
||||
mkdir -vp ${lingerDir}
|
||||
cd ${lingerDir}
|
||||
for user in $(ls); do
|
||||
if ! id "$user" >/dev/null; then
|
||||
echo "Removing linger for missing user $user"
|
||||
rm --force -- "$user"
|
||||
fi
|
||||
${lib.strings.toShellVars { inherit lingeringUserNames nonLingeringUserNames; }}
|
||||
|
||||
user_configured () {
|
||||
# Use `id` to check if the user exists rather than checking the
|
||||
# NixOS configuration, as it may be that the user has been
|
||||
# manually configured, which is permitted if users.mutableUsers
|
||||
# is true (the default).
|
||||
id "$1" >/dev/null
|
||||
}
|
||||
|
||||
shopt -s dotglob nullglob
|
||||
for user in *; do
|
||||
if ! user_configured "$user"; then
|
||||
# systemd has this user configured to linger despite them not
|
||||
# existing.
|
||||
echo "Removing linger for missing user $user" >&2
|
||||
rm -- "$user"
|
||||
fi
|
||||
done
|
||||
ls | sort | comm -3 -1 ${lingeringUsersFile} - | xargs -r ${pkgs.systemd}/bin/loginctl disable-linger
|
||||
ls | sort | comm -3 -2 ${lingeringUsersFile} - | xargs -r ${pkgs.systemd}/bin/loginctl enable-linger
|
||||
|
||||
if (( ''${#nonLingeringUserNames[*]} > 0 )); then
|
||||
${config.systemd.package}/bin/loginctl disable-linger "''${nonLingeringUserNames[@]}"
|
||||
fi
|
||||
if (( ''${#lingeringUserNames[*]} > 0 )); then
|
||||
${config.systemd.package}/bin/loginctl enable-linger "''${lingeringUserNames[@]}"
|
||||
fi
|
||||
'';
|
||||
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
StateDirectory = "systemd/linger";
|
||||
WorkingDirectory = "/var/lib/systemd/linger";
|
||||
};
|
||||
};
|
||||
|
||||
# Warn about user accounts with deprecated password hashing schemes
|
||||
@@ -1163,6 +1195,22 @@ in
|
||||
users.groups.${user.name} = {};
|
||||
'';
|
||||
}
|
||||
{
|
||||
assertion = user.linger != null -> cfg.manageLingering;
|
||||
message = ''
|
||||
users.manageLingering is set to false, but
|
||||
users.users.${user.name}.linger is configured.
|
||||
|
||||
If you want NixOS to manage whether user accounts linger or
|
||||
not, you must set users.manageLingering to true. This is the
|
||||
default setting.
|
||||
|
||||
If you do not want NixOS to manage whether user accounts linger
|
||||
or not, you must set users.users.${user.name}.linger to null.
|
||||
This is the default setting provided system.stateVersion is at
|
||||
least "25.11".
|
||||
'';
|
||||
}
|
||||
]
|
||||
++ (map
|
||||
(shell: {
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
with lib;
|
||||
|
||||
let
|
||||
rootfsImage = pkgs.callPackage ../../../lib/make-ext4-fs.nix (
|
||||
rootfsImage = pkgs.callPackage config.sdImage.rootFilesystemCreator (
|
||||
{
|
||||
inherit (config.sdImage) storePaths;
|
||||
compressImage = config.sdImage.compressImage;
|
||||
@@ -128,6 +128,29 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
rootFilesystemCreator = mkOption {
|
||||
type = types.oneOf [
|
||||
types.package
|
||||
types.path
|
||||
];
|
||||
default = ../../../lib/make-ext4-fs.nix;
|
||||
example = ''
|
||||
nixpkgs/nixos/lib/make-btrfs-fs.nix
|
||||
'';
|
||||
description = ''
|
||||
The filesystem creator used for the root partition.
|
||||
'';
|
||||
};
|
||||
|
||||
rootFilesystemImage = mkOption {
|
||||
type = types.package;
|
||||
default = rootfsImage;
|
||||
description = ''
|
||||
The finished root partition image with all custom fileystem modifications.
|
||||
Used to override the filesystem creator itself.
|
||||
'';
|
||||
};
|
||||
|
||||
firmwareSize = mkOption {
|
||||
type = types.int;
|
||||
# As of 2019-08-18 the Raspberry pi firmware + u-boot takes ~18MiB
|
||||
@@ -254,11 +277,11 @@ in
|
||||
echo "file sd-image $img" >> $out/nix-support/hydra-build-products
|
||||
fi
|
||||
|
||||
root_fs=${rootfsImage}
|
||||
root_fs=${config.sdImage.rootFilesystemImage}
|
||||
${lib.optionalString config.sdImage.compressImage ''
|
||||
root_fs=./root-fs.img
|
||||
echo "Decompressing rootfs image"
|
||||
zstd -d --no-progress "${rootfsImage}" -o $root_fs
|
||||
zstd -d --no-progress "${config.sdImage.rootFilesystemImage}" -o $root_fs
|
||||
''}
|
||||
|
||||
# Gap in front of the first partition, in MiB
|
||||
|
||||
@@ -269,7 +269,6 @@
|
||||
./programs/nano.nix
|
||||
./programs/nautilus-open-any-terminal.nix
|
||||
./programs/nbd.nix
|
||||
./programs/nekoray.nix
|
||||
./programs/neovim.nix
|
||||
./programs/nethoscope.nix
|
||||
./programs/nexttrace.nix
|
||||
@@ -327,6 +326,7 @@
|
||||
./programs/systemtap.nix
|
||||
./programs/tcpdump.nix
|
||||
./programs/television.nix
|
||||
./programs/throne.nix
|
||||
./programs/thunar.nix
|
||||
./programs/thunderbird.nix
|
||||
./programs/tmux.nix
|
||||
@@ -1268,6 +1268,7 @@
|
||||
./services/networking/ncdns.nix
|
||||
./services/networking/ncps.nix
|
||||
./services/networking/ndppd.nix
|
||||
./services/networking/nebula-lighthouse-service.nix
|
||||
./services/networking/nebula.nix
|
||||
./services/networking/netbird.nix
|
||||
./services/networking/netbird/server.nix
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
boot.kexec.enable = lib.mkDefault false;
|
||||
# Relies on bash scripts
|
||||
powerManagement.enable = lib.mkDefault false;
|
||||
users.manageLingering = lib.mkDefault false;
|
||||
# Relies on the gzip command which depends on bash
|
||||
services.logrotate.enable = lib.mkDefault false;
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
}:
|
||||
|
||||
let
|
||||
|
||||
cfge = config.environment;
|
||||
|
||||
cfg = config.programs.fish;
|
||||
@@ -27,6 +26,14 @@ let
|
||||
|
||||
envInteractiveShellInit = pkgs.writeText "interactiveShellInit" cfge.interactiveShellInit;
|
||||
|
||||
indentFishFile =
|
||||
name: text:
|
||||
pkgs.runCommand name {
|
||||
nativeBuildInputs = [ cfg.package ];
|
||||
inherit text;
|
||||
passAsFile = [ "text" ];
|
||||
} "fish_indent < $textPath > $out";
|
||||
|
||||
sourceEnv =
|
||||
file:
|
||||
if cfg.useBabelfish then
|
||||
@@ -46,13 +53,9 @@ let
|
||||
} "babelfish < ${path} > $out;";
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
options = {
|
||||
|
||||
programs.fish = {
|
||||
|
||||
enable = lib.mkOption {
|
||||
default = false;
|
||||
description = ''
|
||||
@@ -153,13 +156,10 @@ in
|
||||
'';
|
||||
type = lib.types.lines;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
|
||||
programs.fish.shellAliases = lib.mapAttrs (name: lib.mkDefault) cfge.shellAliases;
|
||||
|
||||
# Required for man completions
|
||||
@@ -182,16 +182,16 @@ in
|
||||
})
|
||||
|
||||
{
|
||||
etc."fish/nixos-env-preinit.fish".text =
|
||||
etc."fish/nixos-env-preinit.fish".source =
|
||||
if cfg.useBabelfish then
|
||||
''
|
||||
indentFishFile "nixos-env-preinit.fish" ''
|
||||
# source the NixOS environment config
|
||||
if [ -z "$__NIXOS_SET_ENVIRONMENT_DONE" ]
|
||||
source /etc/fish/setEnvironment.fish
|
||||
end
|
||||
''
|
||||
else
|
||||
''
|
||||
indentFishFile "nixos-env-preinit.fish" ''
|
||||
# This happens before $__fish_datadir/config.fish sets fish_function_path, so it is currently
|
||||
# unset. We set it and then completely erase it, leaving its configuration to $__fish_datadir/config.fish
|
||||
set fish_function_path ${pkgs.fishPlugins.foreign-env}/share/fish/vendor_functions.d $__fish_datadir/functions
|
||||
@@ -207,7 +207,7 @@ in
|
||||
}
|
||||
|
||||
{
|
||||
etc."fish/config.fish".text = ''
|
||||
etc."fish/config.fish".source = indentFishFile "config.fish" ''
|
||||
# /etc/fish/config.fish: DO NOT EDIT -- this file has been generated automatically.
|
||||
|
||||
# if we haven't sourced the general config, do it
|
||||
@@ -259,7 +259,6 @@ in
|
||||
name = "fish_patched-completion-generator";
|
||||
srcs = [
|
||||
"${cfg.package}/share/fish/tools/create_manpage_completions.py"
|
||||
"${cfg.package}/share/fish/tools/deroff.py"
|
||||
];
|
||||
unpackCmd = "cp $curSrc $(basename $curSrc)";
|
||||
sourceRoot = ".";
|
||||
|
||||
@@ -6,20 +6,24 @@
|
||||
}:
|
||||
|
||||
let
|
||||
cfg = config.programs.nekoray;
|
||||
cfg = config.programs.throne;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
programs.nekoray = {
|
||||
enable = lib.mkEnableOption "nekoray, a GUI proxy configuration manager";
|
||||
imports = [
|
||||
(lib.mkRenamedOptionModule [ "programs" "nekoray" ] [ "programs" "throne" ])
|
||||
];
|
||||
|
||||
package = lib.mkPackageOption pkgs "nekoray" { };
|
||||
options = {
|
||||
programs.throne = {
|
||||
enable = lib.mkEnableOption "Throne, a GUI proxy configuration manager";
|
||||
|
||||
package = lib.mkPackageOption pkgs "throne" { };
|
||||
|
||||
tunMode = {
|
||||
enable = lib.mkEnableOption "TUN mode of nekoray";
|
||||
enable = lib.mkEnableOption "TUN mode of Throne";
|
||||
|
||||
setuid = lib.mkEnableOption ''
|
||||
setting suid bit for nekobox_core to run as root, which is less
|
||||
setting suid bit for throne-core to run as root, which is less
|
||||
secure than default setcap method but closer to upstream assumptions.
|
||||
Enable this if you find the default setcap method configured in
|
||||
this module doesn't work for you
|
||||
@@ -29,10 +33,11 @@ in
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
|
||||
security.wrappers.nekobox_core = lib.mkIf cfg.tunMode.enable {
|
||||
source = "${cfg.package}/share/nekoray/nekobox_core";
|
||||
security.wrappers.throne-core = lib.mkIf cfg.tunMode.enable {
|
||||
source = "${cfg.package}/share/throne/Core";
|
||||
owner = "root";
|
||||
group = "root";
|
||||
setuid = lib.mkIf cfg.tunMode.setuid true;
|
||||
@@ -44,7 +49,7 @@ in
|
||||
|
||||
# avoid resolvectl password prompt popping up three times
|
||||
# https://github.com/SagerNet/sing-tun/blob/0686f8c4f210f4e7039c352d42d762252f9d9cf5/tun_linux.go#L1062
|
||||
# We use a hack here to determine whether the requested process is nekobox_core
|
||||
# We use a hack here to determine whether the requested process is throne-core
|
||||
# Detect whether its capabilities contain at least `net_admin` and `net_raw`.
|
||||
# This does not reduce security, as we can already bypass `resolved` with them.
|
||||
# Alternatives to consider:
|
||||
@@ -56,9 +61,9 @@ in
|
||||
# change its own cmdline. `/proc/<pid>/exe` is reliable but kernel forbids
|
||||
# checking that entry of process from different users, and polkit runs `spawn`
|
||||
# as an unprivileged user.
|
||||
# 3. Put nekobox_core into a systemd service, and let polkit check service name.
|
||||
# 3. Put throne-core into a systemd service, and let polkit check service name.
|
||||
# This is the most secure and convenient way but requires heavy modification
|
||||
# to nekoray source code. Would be good to let upstream support that eventually.
|
||||
# to Throne source code. Would be good to let upstream support that eventually.
|
||||
security.polkit.extraConfig =
|
||||
lib.mkIf (cfg.tunMode.enable && (!cfg.tunMode.setuid) && config.services.resolved.enable)
|
||||
''
|
||||
@@ -4,7 +4,7 @@
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.security.ipa;
|
||||
|
||||
@@ -30,17 +30,17 @@ in
|
||||
{
|
||||
options = {
|
||||
security.ipa = {
|
||||
enable = mkEnableOption "FreeIPA domain integration";
|
||||
enable = lib.mkEnableOption "FreeIPA domain integration";
|
||||
|
||||
certificate = mkOption {
|
||||
type = types.package;
|
||||
certificate = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
description = ''
|
||||
IPA server CA certificate.
|
||||
|
||||
Use `nix-prefetch-url http://$server/ipa/config/ca.crt` to
|
||||
obtain the file and the hash.
|
||||
'';
|
||||
example = literalExpression ''
|
||||
example = lib.literalExpression ''
|
||||
pkgs.fetchurl {
|
||||
url = "http://ipa.example.com/ipa/config/ca.crt";
|
||||
hash = lib.fakeHash;
|
||||
@@ -48,87 +48,93 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
domain = mkOption {
|
||||
type = types.str;
|
||||
domain = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = "example.com";
|
||||
description = "Domain of the IPA server.";
|
||||
};
|
||||
|
||||
realm = mkOption {
|
||||
type = types.str;
|
||||
realm = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = "EXAMPLE.COM";
|
||||
description = "Kerberos realm.";
|
||||
};
|
||||
|
||||
server = mkOption {
|
||||
type = types.str;
|
||||
server = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = "ipa.example.com";
|
||||
description = "IPA Server hostname.";
|
||||
};
|
||||
|
||||
basedn = mkOption {
|
||||
type = types.str;
|
||||
basedn = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = "dc=example,dc=com";
|
||||
description = "Base DN to use when performing LDAP operations.";
|
||||
};
|
||||
|
||||
offlinePasswords = mkOption {
|
||||
type = types.bool;
|
||||
offlinePasswords = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether to store offline passwords when the server is down.";
|
||||
};
|
||||
|
||||
cacheCredentials = mkOption {
|
||||
type = types.bool;
|
||||
cacheCredentials = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether to cache credentials.";
|
||||
};
|
||||
|
||||
ipaHostname = mkOption {
|
||||
type = types.str;
|
||||
useAsTimeserver = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether to add the IPA server to the timeserver.";
|
||||
};
|
||||
|
||||
ipaHostname = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = "myworkstation.example.com";
|
||||
default =
|
||||
if config.networking.domain != null then
|
||||
config.networking.fqdn
|
||||
else
|
||||
"${config.networking.hostName}.${cfg.domain}";
|
||||
defaultText = literalExpression ''
|
||||
defaultText = lib.literalExpression ''
|
||||
if config.networking.domain != null then config.networking.fqdn
|
||||
else "''${networking.hostName}.''${security.ipa.domain}"
|
||||
'';
|
||||
description = "Fully-qualified hostname used to identify this host in the IPA domain.";
|
||||
};
|
||||
|
||||
ifpAllowedUids = mkOption {
|
||||
type = types.listOf types.str;
|
||||
ifpAllowedUids = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [ "root" ];
|
||||
description = "A list of users allowed to access the ifp dbus interface.";
|
||||
};
|
||||
|
||||
dyndns = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether to enable FreeIPA automatic hostname updates.";
|
||||
};
|
||||
|
||||
interface = mkOption {
|
||||
type = types.str;
|
||||
interface = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = "eth0";
|
||||
default = "*";
|
||||
description = "Network interface to perform hostname updates through.";
|
||||
};
|
||||
};
|
||||
|
||||
chromiumSupport = mkOption {
|
||||
type = types.bool;
|
||||
chromiumSupport = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Whether to whitelist the FreeIPA domain in Chromium.";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
config = lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = !config.security.krb5.enable;
|
||||
@@ -141,21 +147,24 @@ in
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
krb5Full
|
||||
krb5
|
||||
freeipa
|
||||
];
|
||||
|
||||
environment.etc = {
|
||||
"ipa/default.conf".text = ''
|
||||
[global]
|
||||
basedn = ${cfg.basedn}
|
||||
realm = ${cfg.realm}
|
||||
domain = ${cfg.domain}
|
||||
server = ${cfg.server}
|
||||
host = ${config.networking.hostName}
|
||||
xmlrpc_uri = https://${cfg.server}/ipa/xml
|
||||
enable_ra = True
|
||||
'';
|
||||
"ipa/default.conf".text = lib.generators.toINI { } {
|
||||
global = {
|
||||
inherit (cfg)
|
||||
basedn
|
||||
realm
|
||||
domain
|
||||
server
|
||||
;
|
||||
host = cfg.ipaHostname;
|
||||
xmlrpc_uri = "https://${cfg.server}/ipa/xml";
|
||||
enable_ra = "True";
|
||||
};
|
||||
};
|
||||
|
||||
"ipa/nssdb".source = nssDb;
|
||||
|
||||
@@ -191,7 +200,7 @@ in
|
||||
|
||||
"ldap.conf".source = ldapConf;
|
||||
|
||||
"chromium/policies/managed/freeipa.json" = mkIf cfg.chromiumSupport {
|
||||
"chromium/policies/managed/freeipa.json" = lib.mkIf cfg.chromiumSupport {
|
||||
text = builtins.toJSON {
|
||||
AuthServerWhitelist = "*.${cfg.domain}";
|
||||
};
|
||||
@@ -248,7 +257,7 @@ in
|
||||
|
||||
cache_credentials = cfg.cacheCredentials;
|
||||
krb5_store_password_if_offline = cfg.offlinePasswords;
|
||||
krb5_realm = lib.mkIf ((toLower cfg.domain) != (toLower cfg.realm)) cfg.realm;
|
||||
krb5_realm = lib.mkIf ((lib.toLower cfg.domain) != (lib.toLower cfg.realm)) cfg.realm;
|
||||
|
||||
dyndns_update = cfg.dyndns.enable;
|
||||
dyndns_iface = cfg.dyndns.interface;
|
||||
@@ -279,13 +288,13 @@ in
|
||||
|
||||
ifp = {
|
||||
user_attributes = "+mail, +telephoneNumber, +givenname, +sn, +lock";
|
||||
allowed_uids = concatStringsSep ", " cfg.ifpAllowedUids;
|
||||
allowed_uids = lib.concatStringsSep ", " cfg.ifpAllowedUids;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
networking.timeServers = singleton cfg.server;
|
||||
networking.timeServers = lib.optional cfg.useAsTimeserver cfg.server;
|
||||
|
||||
security.pki.certificateFiles = singleton cfg.certificate;
|
||||
security.pki.certificateFiles = lib.singleton cfg.certificate;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -126,7 +126,8 @@ in
|
||||
ReadWritePaths = "";
|
||||
BindPaths =
|
||||
optional (cfg.settings ? DataFolder) cfg.settings.DataFolder
|
||||
++ optional (cfg.settings ? CacheFolder) cfg.settings.CacheFolder;
|
||||
++ optional (cfg.settings ? CacheFolder) cfg.settings.CacheFolder
|
||||
++ optional (cfg.settings ? Backup.Path) cfg.settings.Backup.Path;
|
||||
BindReadOnlyPaths = [
|
||||
# navidrome uses online services to download additional album metadata / covers
|
||||
"${config.security.pki.caBundle}:/etc/ssl/certs/ca-certificates.crt"
|
||||
|
||||
@@ -89,19 +89,24 @@ let
|
||||
${cfg.postInit}
|
||||
fi
|
||||
''
|
||||
+ ''
|
||||
(
|
||||
set -o pipefail
|
||||
${lib.optionalString (cfg.dumpCommand != null) ''${lib.escapeShellArg cfg.dumpCommand} | \''}
|
||||
borgWrapper create "''${extraArgs[@]}" \
|
||||
--compression ${cfg.compression} \
|
||||
--exclude-from ${mkExcludeFile cfg} \
|
||||
--patterns-from ${mkPatternsFile cfg} \
|
||||
"''${extraCreateArgs[@]}" \
|
||||
"::$archiveName$archiveSuffix" \
|
||||
${if cfg.paths == null then "-" else lib.escapeShellArgs cfg.paths}
|
||||
)
|
||||
''
|
||||
+ (
|
||||
let
|
||||
import-tar = cfg.createCommand == "import-tar";
|
||||
in
|
||||
''
|
||||
(
|
||||
set -o pipefail
|
||||
${lib.optionalString (cfg.dumpCommand != null) ''${lib.escapeShellArg cfg.dumpCommand} | \''}
|
||||
borgWrapper ${lib.escapeShellArg cfg.createCommand} "''${extraArgs[@]}" \
|
||||
--compression ${cfg.compression} \
|
||||
${lib.optionalString (!import-tar) "--exclude-from ${mkExcludeFile cfg}"} \
|
||||
${lib.optionalString (!import-tar) "--patterns-from ${mkPatternsFile cfg}"} \
|
||||
"''${extraCreateArgs[@]}" \
|
||||
"::$archiveName$archiveSuffix" \
|
||||
${if cfg.paths == null then "-" else lib.escapeShellArgs cfg.paths}
|
||||
)
|
||||
''
|
||||
)
|
||||
+ lib.optionalString cfg.appendFailedSuffix ''
|
||||
borgWrapper rename "''${extraArgs[@]}" \
|
||||
"::$archiveName$archiveSuffix" "$archiveName"
|
||||
@@ -310,6 +315,23 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
mkCreateCommandImportTarDumpCommandAssertion = name: cfg: {
|
||||
assertion = cfg.createCommand != "import-tar" || cfg.dumpCommand != null;
|
||||
message = ''
|
||||
Option borgbackup.jobs.${name}.dumpCommand is required when createCommand
|
||||
is set to "import-tar".
|
||||
'';
|
||||
};
|
||||
|
||||
mkCreateCommandImportTarExclusionsAssertion = name: cfg: {
|
||||
assertion = cfg.createCommand != "import-tar" || (cfg.exclude == [ ] && cfg.patterns == [ ]);
|
||||
message = ''
|
||||
Options borgbackup.jobs.${name}.exclude and
|
||||
borgbackup.jobs.${name}.patterns have no effect when createCommand is set
|
||||
to "import-tar".
|
||||
'';
|
||||
};
|
||||
|
||||
mkRemovableDeviceAssertions = name: cfg: {
|
||||
assertion = !(isLocalPath cfg.repo) -> !cfg.removableDevice;
|
||||
message = ''
|
||||
@@ -377,6 +399,25 @@ in
|
||||
{ name, config, ... }:
|
||||
{
|
||||
options = {
|
||||
createCommand = lib.mkOption {
|
||||
type = lib.types.enum [
|
||||
"create"
|
||||
"import-tar"
|
||||
];
|
||||
description = ''
|
||||
Borg command to use for archive creation. The default (`create`)
|
||||
creates a regular Borg archive.
|
||||
|
||||
Use `import-tar` to instead read a tar archive stream from
|
||||
{option}`dumpCommand` output and import its contents into the
|
||||
repository.
|
||||
|
||||
`import-tar` can not be used together with {option}`exclude` or
|
||||
{option}`patterns`.
|
||||
'';
|
||||
default = "create";
|
||||
example = "import-tar";
|
||||
};
|
||||
|
||||
paths = lib.mkOption {
|
||||
type = with lib.types; nullOr (coercedTo str lib.singleton (listOf str));
|
||||
@@ -556,6 +597,9 @@ in
|
||||
description = ''
|
||||
Exclude paths matching any of the given patterns. See
|
||||
{command}`borg help patterns` for pattern syntax.
|
||||
|
||||
Can not be set when {option}`createCommand` is set to
|
||||
`import-tar`.
|
||||
'';
|
||||
default = [ ];
|
||||
example = [
|
||||
@@ -571,6 +615,9 @@ in
|
||||
matching patterns is used, so if an include pattern (prefix `+`)
|
||||
matches before an exclude pattern (prefix `-`), the file is
|
||||
backed up. See [{command}`borg help patterns`](https://borgbackup.readthedocs.io/en/stable/usage/help.html#borg-patterns) for pattern syntax.
|
||||
|
||||
Can not be set when {option}`createCommand` is set to
|
||||
`import-tar`.
|
||||
'';
|
||||
default = [ ];
|
||||
example = [
|
||||
@@ -888,6 +935,8 @@ in
|
||||
lib.mapAttrsToList mkPassAssertion jobs
|
||||
++ lib.mapAttrsToList mkKeysAssertion repos
|
||||
++ lib.mapAttrsToList mkSourceAssertions jobs
|
||||
++ lib.mapAttrsToList mkCreateCommandImportTarDumpCommandAssertion jobs
|
||||
++ lib.mapAttrsToList mkCreateCommandImportTarExclusionsAssertion jobs
|
||||
++ lib.mapAttrsToList mkRemovableDeviceAssertions jobs;
|
||||
|
||||
systemd.tmpfiles.settings = lib.mapAttrs' mkTmpfiles jobs;
|
||||
|
||||
@@ -559,8 +559,7 @@ in
|
||||
];
|
||||
RestrictNamespaces = true;
|
||||
LockPersonality = true;
|
||||
# we need to disable MemoryDenyWriteExecute for keydb
|
||||
MemoryDenyWriteExecute = cfg.package.pname != "keydb";
|
||||
MemoryDenyWriteExecute = true;
|
||||
RestrictRealtime = true;
|
||||
RestrictSUIDSGID = true;
|
||||
PrivateMounts = true;
|
||||
|
||||
@@ -82,8 +82,19 @@ in
|
||||
};
|
||||
default = { };
|
||||
description = ''
|
||||
Configuration settings for the generated config
|
||||
file.
|
||||
Configuration settings for the generated config file.
|
||||
|
||||
This config is combined with the contents of `secretsConfigFile` and
|
||||
passed to zwave-js-server via `--config`. The project's README [1]
|
||||
states that the config must follow the Z-Wave JS config format [2].
|
||||
|
||||
[1]: https://github.com/zwave-js/zwave-js-server/tree/master
|
||||
[2]: https://zwave-js.github.io/node-zwave-js/#/api/driver?id=zwaveoptions
|
||||
|
||||
::: {.warning}
|
||||
Secrets should go in `secretsConfigFile`. The contents of `settings` is
|
||||
written to the nix store, which is world-readable.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -972,7 +972,7 @@ in
|
||||
${lib.concatStringsSep "\n" (
|
||||
lib.mapAttrsToList (to: from: ''
|
||||
ln -sf ${from} /var/lib/postfix/conf/${to}
|
||||
${lib.getExe' cfg.package "postmap"} -o -p /var/lib/postfix/conf/${to}
|
||||
${lib.getExe' cfg.package "postmap"} /var/lib/postfix/conf/${to}
|
||||
'') cfg.mapFiles
|
||||
)}
|
||||
|
||||
|
||||
@@ -11,6 +11,9 @@ let
|
||||
format = pkgs.formats.yaml { };
|
||||
stateDir = "/var/lib/recyclarr";
|
||||
configPath = "${stateDir}/config.json";
|
||||
secretsReplacement = utils.genJqSecretsReplacement {
|
||||
loadCredential = true;
|
||||
} cfg.configuration configPath;
|
||||
in
|
||||
{
|
||||
options.services.recyclarr = {
|
||||
@@ -47,14 +50,7 @@ in
|
||||
For detailed configuration options and examples, see the
|
||||
[official configuration reference](https://recyclarr.dev/wiki/yaml/config-reference/).
|
||||
|
||||
The configuration is processed using [utils.genJqSecretsReplacementSnippet](https://github.com/NixOS/nixpkgs/blob/master/nixos/lib/utils.nix#L232-L331) to handle secret substitution.
|
||||
|
||||
To avoid permission issues, secrets should be provided via systemd's credential mechanism:
|
||||
|
||||
```nix
|
||||
systemd.services.recyclarr.serviceConfig.LoadCredential = [
|
||||
"radarr-api_key:''${config.sops.secrets.radarr-api_key.path}"
|
||||
];
|
||||
The configuration is processed using [utils.genJqSecretsReplacement](https://github.com/NixOS/nixpkgs/blob/master/nixos/lib/utils.nix#L232-L331) to handle secret substitution.
|
||||
```
|
||||
'';
|
||||
};
|
||||
@@ -103,7 +99,7 @@ in
|
||||
description = "Recyclarr Service";
|
||||
|
||||
# YAML is a JSON super-set
|
||||
preStart = utils.genJqSecretsReplacementSnippet cfg.configuration configPath;
|
||||
preStart = secretsReplacement.script;
|
||||
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
@@ -111,6 +107,7 @@ in
|
||||
Group = cfg.group;
|
||||
StateDirectory = "recyclarr";
|
||||
ExecStart = "${lib.getExe cfg.package} ${cfg.command} --app-data ${stateDir} --config ${configPath}";
|
||||
LoadCredential = secretsReplacement.credentials;
|
||||
|
||||
ProtectSystem = "strict";
|
||||
ProtectHome = true;
|
||||
|
||||
@@ -127,6 +127,7 @@ let
|
||||
"storagebox"
|
||||
"surfboard"
|
||||
"systemd"
|
||||
"tailscale"
|
||||
"tibber"
|
||||
"unbound"
|
||||
"unpoller"
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
utils,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (lib)
|
||||
getExe
|
||||
mkOption
|
||||
mkPackageOption
|
||||
types
|
||||
;
|
||||
|
||||
inherit (utils) escapeSystemdExecArgs;
|
||||
|
||||
cfg = config.services.prometheus.exporters.tailscale;
|
||||
in
|
||||
{
|
||||
port = 9250;
|
||||
extraOpts = with types; {
|
||||
package = mkPackageOption pkgs "prometheus-tailscale-exporter" { };
|
||||
environmentFile = mkOption {
|
||||
type = path;
|
||||
description = ''
|
||||
Environment file containg at least the TAILSCALE_TAILNET,
|
||||
TAILSCALE_OAUTH_CLIENT_ID, and TAILSCALE_OAUTH_CLIENT_SECRET
|
||||
environment variables.
|
||||
'';
|
||||
};
|
||||
};
|
||||
serviceOpts = {
|
||||
serviceConfig = {
|
||||
EnvironmentFile = cfg.environmentFile;
|
||||
ExecStart = escapeSystemdExecArgs (
|
||||
[
|
||||
(getExe cfg.package)
|
||||
"--listen-address"
|
||||
"${cfg.listenAddress}:${toString cfg.port}"
|
||||
]
|
||||
++ cfg.extraFlags
|
||||
);
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -35,8 +35,7 @@ let
|
||||
user = "sa";
|
||||
};
|
||||
logger.console = "true";
|
||||
media.path = "${stateDirectory}/media";
|
||||
templates.root = "${stateDirectory}/templates";
|
||||
web.override = "${stateDirectory}/override";
|
||||
};
|
||||
|
||||
in
|
||||
@@ -95,11 +94,9 @@ in
|
||||
wants = [ "network-online.target" ];
|
||||
|
||||
preStart = ''
|
||||
# Copy new templates into our state directory.
|
||||
cp -a --update=none ${pkgs.traccar}/templates ${stateDirectory}
|
||||
test -f '${configFilePath}' && rm -f '${configFilePath}'
|
||||
|
||||
# Substitute the configFile from Envvars read from EnvironmentFile
|
||||
# Perform envvars substition read from environmentFile
|
||||
old_umask=$(umask)
|
||||
umask 0177
|
||||
${lib.getExe pkgs.envsubst} \
|
||||
@@ -110,6 +107,7 @@ in
|
||||
|
||||
serviceConfig = {
|
||||
DynamicUser = true;
|
||||
WorkingDirectory = "${pkgs.traccar}";
|
||||
EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile;
|
||||
ExecStart = "${lib.getExe pkgs.traccar} ${configFilePath}";
|
||||
LockPersonality = true;
|
||||
@@ -132,11 +130,6 @@ in
|
||||
StateDirectory = "traccar";
|
||||
SuccessExitStatus = 143;
|
||||
Type = "simple";
|
||||
# Set the working directory to traccar's package.
|
||||
# Traccar only searches for the DB migrations relative to it's WorkingDirectory and nothing worked to
|
||||
# work around this. To avoid copying the migrations over to the state directory, we use the package as
|
||||
# WorkingDirectory.
|
||||
WorkingDirectory = "${pkgs.traccar}";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -223,6 +223,23 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
edgeIPVersion = lib.mkOption {
|
||||
type = lib.types.enum [
|
||||
"auto"
|
||||
"4"
|
||||
"6"
|
||||
];
|
||||
default = "4";
|
||||
description = ''
|
||||
Specifies the IP address version (IPv4 or IPv6) used to establish a connection between `cloudflared` and the Cloudflare global network.
|
||||
|
||||
The value `auto` relies on the host operating system to determine which IP version to select. The first IP version returned from the DNS resolution of the region lookup will be used as the primary set. In dual IPv6 and IPv4 network setups, `cloudflared` will separate the IP versions into two address sets that will be used to fallback in connectivity failure scenarios.
|
||||
|
||||
See [Tunnel run parameters](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/configure-tunnels/cloudflared-parameters/run-parameters/#edge-ip-version).
|
||||
'';
|
||||
example = "auto";
|
||||
};
|
||||
|
||||
default = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = ''
|
||||
@@ -377,7 +394,10 @@ in
|
||||
DynamicUser = true;
|
||||
};
|
||||
|
||||
environment.TUNNEL_ORIGIN_CERT = lib.mkIf (certFile != null) ''%d/cert.pem'';
|
||||
environment = {
|
||||
TUNNEL_ORIGIN_CERT = lib.mkIf (certFile != null) ''%d/cert.pem'';
|
||||
TUNNEL_EDGE_IP_VERSION = tunnel.edgeIPVersion;
|
||||
};
|
||||
}
|
||||
) config.services.cloudflared.tunnels;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (lib) types;
|
||||
|
||||
cfg = config.services.nebula-lighthouse-service;
|
||||
settingsFormat = pkgs.formats.yaml { };
|
||||
in
|
||||
{
|
||||
|
||||
options.services.nebula-lighthouse-service = {
|
||||
enable = lib.mkEnableOption "nebula-lighthouse-service";
|
||||
user = lib.mkOption {
|
||||
type = types.str;
|
||||
default = "nebula-lighthouse";
|
||||
description = ''
|
||||
The user and group to run nebula-lighthouse-service as.
|
||||
'';
|
||||
example = "nebula-lighthouse";
|
||||
};
|
||||
settings = lib.mkOption {
|
||||
type = settingsFormat.type;
|
||||
default = { };
|
||||
description = ''
|
||||
Configuration for nebula-lighthouse-service.
|
||||
'';
|
||||
example = {
|
||||
max-port = 65535;
|
||||
min-port = 49152;
|
||||
"webserver.ip" = "127.0.0.1";
|
||||
"webserver.port" = 8080;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.nebula-lighthouse-service.settings = {
|
||||
min-port = lib.mkDefault 49152;
|
||||
max-port = lib.mkDefault 65535;
|
||||
"webserver.port" = lib.mkDefault 8080;
|
||||
"webserver.ip" = lib.mkDefault "127.0.0.1";
|
||||
};
|
||||
environment.etc."nebula-lighthouse-service/config.yaml".source =
|
||||
settingsFormat.generate "nebula-lighthouse-service-config.yaml" cfg.settings;
|
||||
systemd.services.nebula-lighthouse-service = {
|
||||
description = "Run nebula-lighthouse-service";
|
||||
wants = [ "basic.target" ];
|
||||
after = [
|
||||
"basic.target"
|
||||
"network.target"
|
||||
];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
Type = "exec";
|
||||
Restart = "always";
|
||||
ExecStart = "${pkgs.nebula-lighthouse-service}/bin/nebula-lighthouse-service";
|
||||
StateDirectory = "nebula-lighthouse-service";
|
||||
User = cfg.user;
|
||||
Group = cfg.user;
|
||||
};
|
||||
};
|
||||
users.users.${cfg.user} = {
|
||||
group = cfg.user;
|
||||
description = "nebula-lighthouse-service user";
|
||||
isSystemUser = true;
|
||||
};
|
||||
users.groups.${cfg.user} = { };
|
||||
};
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
bloominstrong
|
||||
];
|
||||
}
|
||||
@@ -9,8 +9,54 @@ let
|
||||
cfg = config.services.nebula;
|
||||
enabledNetworks = lib.filterAttrs (n: v: v.enable) cfg.networks;
|
||||
|
||||
genSettings =
|
||||
netName: netCfg:
|
||||
lib.recursiveUpdate {
|
||||
pki = {
|
||||
ca = netCfg.ca;
|
||||
cert = netCfg.cert;
|
||||
key = netCfg.key;
|
||||
};
|
||||
static_host_map = netCfg.staticHostMap;
|
||||
lighthouse = {
|
||||
am_lighthouse = netCfg.isLighthouse;
|
||||
hosts = netCfg.lighthouses;
|
||||
serve_dns = netCfg.lighthouse.dns.enable;
|
||||
dns.host = netCfg.lighthouse.dns.host;
|
||||
dns.port = netCfg.lighthouse.dns.port;
|
||||
};
|
||||
relay = {
|
||||
am_relay = netCfg.isRelay;
|
||||
relays = netCfg.relays;
|
||||
use_relays = true;
|
||||
};
|
||||
listen = {
|
||||
host = netCfg.listen.host;
|
||||
port = resolveFinalPort netCfg;
|
||||
};
|
||||
tun = {
|
||||
disabled = netCfg.tun.disable;
|
||||
dev = if (netCfg.tun.device != null) then netCfg.tun.device else "nebula.${netName}";
|
||||
};
|
||||
firewall = {
|
||||
inbound = netCfg.firewall.inbound;
|
||||
outbound = netCfg.firewall.outbound;
|
||||
};
|
||||
} netCfg.settings;
|
||||
format = pkgs.formats.yaml { };
|
||||
|
||||
genConfigFile =
|
||||
netName: settings:
|
||||
format.generate "nebula-config-${netName}.yml" (
|
||||
lib.warnIf
|
||||
((settings.lighthouse.am_lighthouse || settings.relay.am_relay) && settings.listen.port == 0)
|
||||
''
|
||||
Nebula network '${netName}' is configured as a lighthouse or relay, and its port is ${builtins.toString settings.listen.port}.
|
||||
You will likely experience connectivity issues: https://nebula.defined.net/docs/config/listen/#listenport
|
||||
''
|
||||
settings
|
||||
);
|
||||
|
||||
nameToId = netName: "nebula-${netName}";
|
||||
|
||||
resolveFinalPort =
|
||||
@@ -60,6 +106,16 @@ in
|
||||
example = "/etc/nebula/host.key";
|
||||
};
|
||||
|
||||
enableReload = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enable automatic config reload on config change.
|
||||
This setting is not enabled by default as nix cannot determine if the config change is reloadable.
|
||||
Please refer to the [config reference](https://nebula.defined.net/docs/config/) for documentation on reloadable changes.
|
||||
'';
|
||||
};
|
||||
|
||||
staticHostMap = lib.mkOption {
|
||||
type = lib.types.attrsOf (lib.types.listOf (lib.types.str));
|
||||
default = { };
|
||||
@@ -212,47 +268,13 @@ in
|
||||
netName: netCfg:
|
||||
let
|
||||
networkId = nameToId netName;
|
||||
settings = lib.recursiveUpdate {
|
||||
pki = {
|
||||
ca = netCfg.ca;
|
||||
cert = netCfg.cert;
|
||||
key = netCfg.key;
|
||||
};
|
||||
static_host_map = netCfg.staticHostMap;
|
||||
lighthouse = {
|
||||
am_lighthouse = netCfg.isLighthouse;
|
||||
hosts = netCfg.lighthouses;
|
||||
serve_dns = netCfg.lighthouse.dns.enable;
|
||||
dns.host = netCfg.lighthouse.dns.host;
|
||||
dns.port = netCfg.lighthouse.dns.port;
|
||||
};
|
||||
relay = {
|
||||
am_relay = netCfg.isRelay;
|
||||
relays = netCfg.relays;
|
||||
use_relays = true;
|
||||
};
|
||||
listen = {
|
||||
host = netCfg.listen.host;
|
||||
port = resolveFinalPort netCfg;
|
||||
};
|
||||
tun = {
|
||||
disabled = netCfg.tun.disable;
|
||||
dev = if (netCfg.tun.device != null) then netCfg.tun.device else "nebula.${netName}";
|
||||
};
|
||||
firewall = {
|
||||
inbound = netCfg.firewall.inbound;
|
||||
outbound = netCfg.firewall.outbound;
|
||||
};
|
||||
} netCfg.settings;
|
||||
configFile = format.generate "nebula-config-${netName}.yml" (
|
||||
lib.warnIf
|
||||
((settings.lighthouse.am_lighthouse || settings.relay.am_relay) && settings.listen.port == 0)
|
||||
''
|
||||
Nebula network '${netName}' is configured as a lighthouse or relay, and its port is ${builtins.toString settings.listen.port}.
|
||||
You will likely experience connectivity issues: https://nebula.defined.net/docs/config/listen/#listenport
|
||||
''
|
||||
settings
|
||||
);
|
||||
settings = genSettings netName netCfg;
|
||||
generatedConfigFile = genConfigFile netName settings;
|
||||
configFile =
|
||||
if ((lib.versionAtLeast config.system.stateVersion "25.11") || netCfg.enableReload) then
|
||||
"/etc/nebula/${netName}.yml"
|
||||
else
|
||||
generatedConfigFile;
|
||||
capabilities =
|
||||
let
|
||||
nebulaPort = if !settings.tun.disabled then settings.listen.port else 0;
|
||||
@@ -278,6 +300,8 @@ in
|
||||
];
|
||||
before = [ "sshd.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
restartTriggers = lib.optional (!netCfg.enableReload) generatedConfigFile;
|
||||
reloadTriggers = lib.optional netCfg.enableReload generatedConfigFile;
|
||||
serviceConfig = {
|
||||
Type = "notify";
|
||||
Restart = "always";
|
||||
@@ -313,6 +337,22 @@ in
|
||||
) enabledNetworks
|
||||
);
|
||||
|
||||
environment.etc = lib.mkMerge (
|
||||
lib.mapAttrsToList
|
||||
(netName: netCfg: {
|
||||
"nebula/${netName}.yml" = {
|
||||
source = genConfigFile netName (genSettings netName netCfg);
|
||||
mode = "0440";
|
||||
user = nameToId netName;
|
||||
};
|
||||
})
|
||||
(
|
||||
lib.filterAttrs (
|
||||
_: netCfg: netCfg.enableReload || (lib.versionAtLeast config.system.stateVersion "25.11")
|
||||
) enabledNetworks
|
||||
)
|
||||
);
|
||||
|
||||
# Open the chosen ports for UDP.
|
||||
networking.firewall.allowedUDPPorts = lib.unique (
|
||||
lib.filter (port: port > 0) (
|
||||
|
||||
@@ -213,7 +213,7 @@ in
|
||||
if [[ "$state" != "$lastState" ]]; then
|
||||
# https://github.com/tailscale/tailscale/blob/v1.72.1/ipn/backend.go#L24-L32
|
||||
case "$state" in
|
||||
NeedsLogin)
|
||||
NeedsLogin|NeedsMachineAuth|Stopped)
|
||||
echo "Server needs authentication, sending auth key"
|
||||
tailscale up --auth-key "$(cat ${cfg.authKeyFile})${params}" ${escapeShellArgs cfg.extraUpFlags}
|
||||
;;
|
||||
@@ -226,8 +226,8 @@ in
|
||||
echo "Waiting for Tailscale State = Running or systemd timeout"
|
||||
;;
|
||||
esac
|
||||
echo "State = $state"
|
||||
fi
|
||||
echo "State = $state"
|
||||
lastState="$state"
|
||||
sleep .5
|
||||
done
|
||||
@@ -235,7 +235,10 @@ in
|
||||
};
|
||||
|
||||
systemd.services.tailscaled-set = mkIf (cfg.extraSetFlags != [ ]) {
|
||||
after = [ "tailscaled.service" ];
|
||||
after = [
|
||||
"tailscaled.service"
|
||||
"tailscaled-autoconnect.service"
|
||||
];
|
||||
wants = [ "tailscaled.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
|
||||
@@ -29,6 +29,13 @@ let
|
||||
|
||||
escapeCredentialName = input: replaceStrings [ "\\" ] [ "_" ] input;
|
||||
|
||||
fwMarkFromHexOrNum =
|
||||
fwMark:
|
||||
if (lib.hasPrefix "0x" fwMark) then
|
||||
lib.fromHexString fwMark
|
||||
else
|
||||
(builtins.fromTOML "v=${fwMark}").v;
|
||||
|
||||
privateKeyCredential = interfaceName: escapeCredentialName "wireguard-${interfaceName}-private-key";
|
||||
presharedKeyCredential =
|
||||
interfaceName: peer: escapeCredentialName "wireguard-${interfaceName}-${peer.name}-preshared-key";
|
||||
@@ -52,7 +59,7 @@ let
|
||||
wireguardConfig = removeNulls {
|
||||
PrivateKey = "@${privateKeyCredential name}";
|
||||
ListenPort = interface.listenPort;
|
||||
FirewallMark = interface.fwMark;
|
||||
FirewallMark = if interface.fwMark == null then null else (fwMarkFromHexOrNum interface.fwMark);
|
||||
RouteTable = if interface.allowedIPsAsRoutes then interface.table else null;
|
||||
RouteMetric = interface.metric;
|
||||
};
|
||||
|
||||
@@ -65,6 +65,34 @@ in
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
clamonacc = {
|
||||
enable = lib.mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
description = ''
|
||||
Whether to enable ClamAV on-access scanner.
|
||||
|
||||
The settings for ClamAV's on-access scanner is configured in `clamd.conf` via `services.clamav.daemon.settings`.
|
||||
Refer to <https://docs.clamav.net/manual/OnAccess.html> on how to configure it.
|
||||
|
||||
Example to scan `/home/foo/Downloads` (and block access until scanning is completed) would be:
|
||||
```
|
||||
services.clamav = {
|
||||
daemon.enable = true;
|
||||
clamonacc.enable = true;
|
||||
|
||||
daemon.settings = {
|
||||
OnAccessPrevention = true;
|
||||
OnAccessIncludePath = "/home/foo/Downloads";
|
||||
};
|
||||
};
|
||||
```
|
||||
'';
|
||||
type = lib.types.bool;
|
||||
};
|
||||
};
|
||||
|
||||
updater = {
|
||||
enable = lib.mkEnableOption "ClamAV freshclam updater";
|
||||
|
||||
@@ -172,6 +200,17 @@ in
|
||||
};
|
||||
|
||||
config = lib.mkIf (cfg.updater.enable || cfg.daemon.enable) {
|
||||
assertions = [
|
||||
{
|
||||
assertion = cfg.scanner.enable -> cfg.daemon.enable;
|
||||
message = "ClamAV scanner requires ClamAV daemon to operate";
|
||||
}
|
||||
{
|
||||
assertion = cfg.clamonacc.enable -> cfg.daemon.enable;
|
||||
message = "ClamAV on-access scanner requires ClamAV daemon to operate";
|
||||
}
|
||||
];
|
||||
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
|
||||
users.users.${clamavUser} = {
|
||||
@@ -189,8 +228,10 @@ in
|
||||
DatabaseDirectory = stateDir;
|
||||
LocalSocket = "/run/clamav/clamd.ctl";
|
||||
PidFile = "/run/clamav/clamd.pid";
|
||||
User = "clamav";
|
||||
User = clamavUser;
|
||||
Foreground = true;
|
||||
# Prevent infinite recursion in scanning
|
||||
OnAccessExcludeUname = clamavUser;
|
||||
};
|
||||
|
||||
services.clamav.updater.settings = {
|
||||
@@ -216,11 +257,26 @@ in
|
||||
description = "ClamAV Antivirus Slice";
|
||||
};
|
||||
|
||||
systemd.sockets.clamav-daemon = lib.mkIf cfg.daemon.enable {
|
||||
description = "Socket for ClamAV daemon (clamd)";
|
||||
wantedBy = [ "sockets.target" ];
|
||||
listenStreams = [
|
||||
cfg.daemon.settings.LocalSocket
|
||||
];
|
||||
socketConfig = {
|
||||
SocketUser = clamavUser;
|
||||
SocketGroup = clamavGroup;
|
||||
# LocalSocketMode setting in clamd.conf is not prefixed with octal 0, add it here.
|
||||
SocketMode = "0${cfg.daemon.settings.LocalSocketMode or "666"}";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.clamav-daemon = lib.mkIf cfg.daemon.enable {
|
||||
description = "ClamAV daemon (clamd)";
|
||||
documentation = [ "man:clamd(8)" ];
|
||||
after = lib.optionals cfg.updater.enable [ "clamav-freshclam.service" ];
|
||||
wants = lib.optionals cfg.updater.enable [ "clamav-freshclam.service" ];
|
||||
requires = [ "clamav-daemon.socket" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
restartTriggers = [ clamdConfigFile ];
|
||||
|
||||
@@ -238,6 +294,20 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.clamav-clamonacc = lib.mkIf cfg.clamonacc.enable {
|
||||
description = "ClamAV on-access scanner (clamonacc)";
|
||||
after = [ "clamav-daemon.socket" ];
|
||||
requires = [ "clamav-daemon.socket" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
restartTriggers = [ clamdConfigFile ];
|
||||
|
||||
# This unit must start as root to be able to use fanotify.
|
||||
serviceConfig = {
|
||||
ExecStart = "${cfg.package}/bin/clamonacc -F --fdpass";
|
||||
Slice = "system-clamav.slice";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.timers.clamav-freshclam = lib.mkIf cfg.updater.enable {
|
||||
description = "Timer for ClamAV virus database updater (freshclam)";
|
||||
wantedBy = [ "timers.target" ];
|
||||
|
||||
@@ -8,7 +8,10 @@
|
||||
let
|
||||
cfg = config.services.nginx.sso;
|
||||
format = pkgs.formats.yaml { };
|
||||
configPath = "/var/lib/nginx-sso/config.yaml";
|
||||
configPath = "/run/nginx-sso/config.yaml";
|
||||
secretsReplacement = utils.genJqSecretsReplacement {
|
||||
loadCredential = true;
|
||||
} cfg.configuration configPath;
|
||||
in
|
||||
{
|
||||
options.services.nginx.sso = {
|
||||
@@ -47,7 +50,7 @@ in
|
||||
Options containing secret data should be set to an attribute set
|
||||
with the singleton attribute `_secret` - a string value set to the path
|
||||
to the file containing the secret value which should be used in the
|
||||
configuration. This file must be readable by `nginx-sso`.
|
||||
configuration.
|
||||
'';
|
||||
};
|
||||
};
|
||||
@@ -57,30 +60,20 @@ in
|
||||
description = "Nginx SSO Backend";
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
preStart = secretsReplacement.script;
|
||||
serviceConfig = {
|
||||
StateDirectory = "nginx-sso";
|
||||
WorkingDirectory = "/var/lib/nginx-sso";
|
||||
ExecStartPre = pkgs.writeShellScript "merge-nginx-sso-config" ''
|
||||
rm -f '${configPath}'
|
||||
# Relies on YAML being a superset of JSON
|
||||
${utils.genJqSecretsReplacementSnippet cfg.configuration configPath}
|
||||
'';
|
||||
RuntimeDirectory = "nginx-sso";
|
||||
ExecStart = ''
|
||||
${lib.getExe cfg.package} \
|
||||
--config ${configPath} \
|
||||
--frontend-dir ${lib.getBin cfg.package}/share/frontend
|
||||
'';
|
||||
LoadCredential = secretsReplacement.credentials;
|
||||
Restart = "always";
|
||||
User = "nginx-sso";
|
||||
Group = "nginx-sso";
|
||||
DynamicUser = true;
|
||||
};
|
||||
};
|
||||
|
||||
users.users.nginx-sso = {
|
||||
isSystemUser = true;
|
||||
group = "nginx-sso";
|
||||
};
|
||||
|
||||
users.groups.nginx-sso = { };
|
||||
};
|
||||
}
|
||||
|
||||
@@ -456,6 +456,8 @@ in
|
||||
|
||||
package = lib.mkPackageOption pkgs "tor" { };
|
||||
|
||||
obfs4Package = lib.mkPackageOption pkgs "obfs4" { };
|
||||
|
||||
enableGeoIP =
|
||||
lib.mkEnableOption ''
|
||||
use of GeoIP databases.
|
||||
@@ -1055,7 +1057,11 @@ in
|
||||
options.MaxClientCircuitsPending = optionInt "MaxClientCircuitsPending";
|
||||
options.NATDPort = optionIsolablePorts "NATDPort";
|
||||
options.NewCircuitPeriod = optionInt "NewCircuitPeriod";
|
||||
options.Nickname = optionString "Nickname";
|
||||
options.Nickname = lib.mkOption {
|
||||
type = with lib.types; nullOr (strMatching "^[a-zA-Z0-9]{1,19}$");
|
||||
default = null;
|
||||
description = (descriptionGeneric "Nickname");
|
||||
};
|
||||
options.ORPort = optionORPort "ORPort";
|
||||
options.OfflineMasterKey = optionBool "OfflineMasterKey";
|
||||
options.OptimisticData = optionBool "OptimisticData"; # default is null and like "auto"
|
||||
@@ -1249,7 +1255,7 @@ in
|
||||
BridgeRelay = true;
|
||||
ExtORPort.port = lib.mkDefault "auto";
|
||||
ServerTransportPlugin.transports = lib.mkDefault [ "obfs4" ];
|
||||
ServerTransportPlugin.exec = lib.mkDefault "${lib.getExe pkgs.obfs4} managed";
|
||||
ServerTransportPlugin.exec = lib.mkDefault "${lib.getExe cfg.obfs4Package} managed";
|
||||
}
|
||||
// lib.optionalAttrs (cfg.relay.role == "private-bridge") {
|
||||
ExtraInfoStatistics = false;
|
||||
@@ -1322,7 +1328,7 @@ in
|
||||
systemd.services.tor = {
|
||||
description = "Tor Daemon";
|
||||
documentation = [ "man:tor(8)" ];
|
||||
path = [ pkgs.tor ];
|
||||
path = [ cfg.package ];
|
||||
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" ];
|
||||
|
||||
@@ -73,7 +73,7 @@ in
|
||||
|
||||
PDS_BLOB_UPLOAD_LIMIT = mkOption {
|
||||
type = types.str;
|
||||
default = "52428800";
|
||||
default = "104857600";
|
||||
description = "Size limit of uploaded blobs in bytes";
|
||||
};
|
||||
|
||||
|
||||
@@ -446,7 +446,7 @@ in
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
inherit (cfg.machine-learning) environment;
|
||||
serviceConfig = commonServiceConfig // {
|
||||
ExecStart = lib.getExe (cfg.package.machine-learning.override { immich = cfg.package; });
|
||||
ExecStart = lib.getExe cfg.package.machine-learning;
|
||||
Slice = "system-immich.slice";
|
||||
CacheDirectory = "immich";
|
||||
User = cfg.user;
|
||||
|
||||
@@ -550,6 +550,7 @@ in
|
||||
"pm.min_spare_servers" = "6";
|
||||
"pm.max_spare_servers" = "18";
|
||||
"pm.max_requests" = "500";
|
||||
"pm.status_path" = "/status";
|
||||
};
|
||||
description = ''
|
||||
Options for nextcloud's PHP pool. See the documentation on `php-fpm.conf` for details on
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
|
||||
let
|
||||
cfg = config.services.onlyoffice;
|
||||
defaultNginxNonceFileContent = "set $secure_link_secret \"mynonce\";";
|
||||
defaultNginxNonceFile = pkgs.writeText "onlyoffice-nonce-nginx.conf" ''
|
||||
${defaultNginxNonceFileContent}
|
||||
'';
|
||||
in
|
||||
{
|
||||
options.services.onlyoffice = {
|
||||
@@ -20,6 +24,22 @@ in
|
||||
description = "FQDN for the OnlyOffice instance.";
|
||||
};
|
||||
|
||||
securityNonceFile = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "${defaultNginxNonceFile}";
|
||||
defaultText = lib.literalExpression ''
|
||||
(pkgs.writeText "onlyoffice-nonce-nginx.conf" \'\'
|
||||
${defaultNginxNonceFileContent}
|
||||
\'\').outPath;
|
||||
'';
|
||||
description = ''
|
||||
Path to a file that contains a secret to sign web requests.
|
||||
This file should set a 'secure_link_secret' nginx variable,
|
||||
and ideally be managed by a
|
||||
[secret managing scheme](https://wiki.nixos.org/wiki/Comparison_of_secret_managing_schemes).
|
||||
'';
|
||||
};
|
||||
|
||||
jwtSecretFile = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
@@ -83,6 +103,12 @@ in
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
warnings = [
|
||||
(lib.optionalString (cfg.securityNonceFile == "${defaultNginxNonceFile}") ''
|
||||
Please set `options.services.onlyoffice.securityNonceFile`
|
||||
to avoid an (albeit unlikely) information disclosure issue.
|
||||
'')
|
||||
];
|
||||
services = {
|
||||
nginx = {
|
||||
enable = lib.mkDefault true;
|
||||
@@ -147,7 +173,7 @@ in
|
||||
alias /var/lib/onlyoffice/documentserver/App_Data$1;
|
||||
more_set_headers "Content-Disposition: attachment; filename*=UTF-8''$arg_filename";
|
||||
|
||||
set $secure_link_secret verysecretstring;
|
||||
include ${cfg.securityNonceFile};
|
||||
secure_link $arg_md5,$arg_expires;
|
||||
secure_link_md5 "$secure_link_expires$uri$secure_link_secret";
|
||||
|
||||
@@ -279,7 +305,9 @@ in
|
||||
|
||||
# for a mapping of environment variables from the docker container to json options see
|
||||
# https://github.com/ONLYOFFICE/Docker-DocumentServer/blob/master/run-document-server.sh
|
||||
FS_SECRET_STRING=$(cut -d '"' -f 2 < ${cfg.securityNonceFile})
|
||||
jq '
|
||||
.storage.fs.secretString = "'$FS_SECRET_STRING'" |
|
||||
.services.CoAuthoring.server.port = ${toString cfg.port} |
|
||||
.services.CoAuthoring.sql.dbHost = "${cfg.postgresHost}" |
|
||||
.services.CoAuthoring.sql.dbName = "${cfg.postgresName}" |
|
||||
@@ -343,4 +371,6 @@ in
|
||||
|
||||
users.groups.onlyoffice = { };
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ raboof ];
|
||||
}
|
||||
|
||||
@@ -41,6 +41,16 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
environmentFile = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
example = "/secrets/trilium.env";
|
||||
description = ''
|
||||
File to load as the environment file. This allows you to pass secrets in without writing
|
||||
to the nix store.
|
||||
'';
|
||||
};
|
||||
|
||||
instanceName = mkOption {
|
||||
type = types.str;
|
||||
default = "Trilium";
|
||||
@@ -126,6 +136,7 @@ in
|
||||
environment.TRILIUM_DATA_DIR = cfg.dataDir;
|
||||
serviceConfig = {
|
||||
ExecStart = lib.getExe cfg.package;
|
||||
EnvironmentFile = cfg.environmentFile;
|
||||
User = "trilium";
|
||||
Group = "trilium";
|
||||
PrivateTmp = "true";
|
||||
|
||||
@@ -36,7 +36,6 @@ in
|
||||
apply =
|
||||
pkg:
|
||||
pkg.override {
|
||||
databaseType = cfg.settings.DATABASE_TYPE;
|
||||
collectApiEndpoint = optionalString (
|
||||
cfg.settings.COLLECT_API_ENDPOINT != null
|
||||
) cfg.settings.COLLECT_API_ENDPOINT;
|
||||
@@ -95,10 +94,7 @@ in
|
||||
type = types.nullOr (
|
||||
types.str
|
||||
// {
|
||||
check =
|
||||
it:
|
||||
isString it
|
||||
&& ((hasPrefix "postgresql://" it) || (hasPrefix "postgres://" it) || (hasPrefix "mysql://" it));
|
||||
check = it: isString it && ((hasPrefix "postgresql://" it) || (hasPrefix "postgres://" it));
|
||||
}
|
||||
);
|
||||
# For some reason, Prisma requires the username in the connection string
|
||||
@@ -111,8 +107,7 @@ in
|
||||
defaultText = literalExpression ''if config.services.umami.createPostgresqlDatabase then "postgresql://umami@localhost/umami?host=/run/postgresql" else null'';
|
||||
example = "postgresql://root:root@localhost/umami";
|
||||
description = ''
|
||||
Connection string for the database. Must start with `postgresql://`, `postgres://`
|
||||
or `mysql://`.
|
||||
Connection string for the database. Must start with `postgresql://` or `postgres://`.
|
||||
'';
|
||||
};
|
||||
DATABASE_URL_FILE = mkOption {
|
||||
@@ -128,31 +123,11 @@ in
|
||||
example = "/run/secrets/umamiDatabaseUrl";
|
||||
description = ''
|
||||
A file containing a connection string for the database. The connection string
|
||||
must start with `postgresql://`, `postgres://` or `mysql://`.
|
||||
If using this, then DATABASE_TYPE must be set to the appropriate value.
|
||||
must start with `postgresql://` or `postgres://`.
|
||||
The contents of the file are read through systemd credentials, therefore the
|
||||
user running umami does not need permissions to read the file.
|
||||
'';
|
||||
};
|
||||
DATABASE_TYPE = mkOption {
|
||||
type = types.nullOr (
|
||||
types.enum [
|
||||
"postgresql"
|
||||
"mysql"
|
||||
]
|
||||
);
|
||||
default =
|
||||
if cfg.settings.DATABASE_URL != null && hasPrefix "mysql://" cfg.settings.DATABASE_URL then
|
||||
"mysql"
|
||||
else
|
||||
"postgresql";
|
||||
defaultText = literalExpression ''if config.services.umami.settings.DATABASE_URL != null && hasPrefix "mysql://" config.services.umami.settings.DATABASE_URL then "mysql" else "postgresql"'';
|
||||
example = "mysql";
|
||||
description = ''
|
||||
The type of database to use. This is automatically inferred from DATABASE_URL, but
|
||||
must be set manually if you are using DATABASE_URL_FILE.
|
||||
'';
|
||||
};
|
||||
COLLECT_API_ENDPOINT = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
@@ -239,6 +214,10 @@ in
|
||||
-> cfg.settings.DATABASE_URL == "postgresql://umami@localhost/umami?host=/run/postgresql";
|
||||
message = "The option config.services.umami.createPostgresqlDatabase is enabled, but config.services.umami.settings.DATABASE_URL has been modified.";
|
||||
}
|
||||
{
|
||||
assertion = cfg.settings.DATABASE_TYPE or null != "mysql";
|
||||
message = "Umami only supports PostgreSQL as of 3.0.0. Follow migration instructions if you are using MySQL: https://umami.is/docs/guides/migrate-mysql-postgresql";
|
||||
}
|
||||
];
|
||||
|
||||
services.postgresql = mkIf cfg.createPostgresqlDatabase {
|
||||
|
||||
@@ -1089,7 +1089,7 @@ in
|
||||
example = "1:2:2";
|
||||
description = ''
|
||||
The levels parameter defines structure of subdirectories in cache: from
|
||||
1 to 3, each level accepts values 1 or 2. Сan be used any combination of
|
||||
1 to 3, each level accepts values 1 or 2. Can be used any combination of
|
||||
1 and 2 in these formats: x, x:x and x:x:x.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -211,6 +211,7 @@ in
|
||||
mint-x-icons
|
||||
mint-y-icons
|
||||
xapp # provides some xapp-* icons
|
||||
xapp-symbolic-icons
|
||||
] config.environment.cinnamon.excludePackages
|
||||
);
|
||||
|
||||
|
||||
@@ -53,8 +53,6 @@ let
|
||||
${config.boot.bootspec.writer}
|
||||
${optionalString config.boot.bootspec.enableValidation ''${config.boot.bootspec.validator} "$out/${config.boot.bootspec.filename}"''}
|
||||
''}
|
||||
|
||||
${config.system.extraSystemBuilderCmds}
|
||||
'';
|
||||
|
||||
# Putting it all together. This builds a store path containing
|
||||
@@ -129,6 +127,7 @@ in
|
||||
[ "system" "replaceRuntimeDependencies" ]
|
||||
[ "system" "replaceDependencies" "replacements" ]
|
||||
)
|
||||
(mkRenamedOptionModule [ "system" "extraSystemBuilderCmds" ] [ "system" "systemBuilderCommands" ])
|
||||
];
|
||||
|
||||
options = {
|
||||
@@ -213,15 +212,6 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
system.extraSystemBuilderCmds = mkOption {
|
||||
type = types.lines;
|
||||
internal = true;
|
||||
default = "";
|
||||
description = ''
|
||||
This code will be added to the builder creating the system store path.
|
||||
'';
|
||||
};
|
||||
|
||||
system.extraDependencies = mkOption {
|
||||
type = types.listOf types.pathInStore;
|
||||
default = [ ];
|
||||
@@ -343,7 +333,7 @@ in
|
||||
}
|
||||
];
|
||||
|
||||
system.extraSystemBuilderCmds =
|
||||
system.systemBuilderCommands =
|
||||
optionalString config.system.copySystemConfiguration ''
|
||||
ln -s '${import ../../../lib/from-env.nix "NIXOS_CONFIG" <nixos-config>}' \
|
||||
"$out/configuration.nix"
|
||||
|
||||
@@ -26,8 +26,9 @@
|
||||
services.openssh.enable = lib.mkDefault true;
|
||||
services.openssh.startWhenNeeded = lib.mkDefault true;
|
||||
|
||||
# As this is intended as a standalone image, undo some of the minimal profile stuff
|
||||
documentation.enable = lib.mkDefault true;
|
||||
documentation.nixos.enable = lib.mkDefault true;
|
||||
# friendlier defaults than minimal profile provides
|
||||
# but we can't use mkDefault since minimal uses it
|
||||
documentation.enable = lib.mkOverride 890 true;
|
||||
documentation.nixos.enable = lib.mkOverride 890 true;
|
||||
services.logrotate.enable = true;
|
||||
}
|
||||
|
||||
@@ -100,7 +100,6 @@ rec {
|
||||
(onFullSupported "nixos.tests.fontconfig-default-fonts")
|
||||
(onFullSupported "nixos.tests.gitlab")
|
||||
(onFullSupported "nixos.tests.gnome")
|
||||
(onFullSupported "nixos.tests.gnome-xorg")
|
||||
(onSystems [ "x86_64-linux" ] "nixos.tests.hibernate")
|
||||
(onFullSupported "nixos.tests.i3wm")
|
||||
(onSystems [ "aarch64-linux" ] "nixos.tests.installer.simpleUefiSystemdBoot")
|
||||
|
||||
@@ -359,6 +359,7 @@ in
|
||||
cinnamon = runTest ./cinnamon.nix;
|
||||
cinnamon-wayland = runTest ./cinnamon-wayland.nix;
|
||||
cjdns = runTest ./cjdns.nix;
|
||||
clamav = runTest ./clamav.nix;
|
||||
clatd = runTest ./clatd.nix;
|
||||
clickhouse = import ./clickhouse {
|
||||
inherit runTest;
|
||||
@@ -642,7 +643,6 @@ in
|
||||
gnome = runTest ./gnome.nix;
|
||||
gnome-extensions = runTest ./gnome-extensions.nix;
|
||||
gnome-flashback = runTest ./gnome-flashback.nix;
|
||||
gnome-xorg = runTest ./gnome-xorg.nix;
|
||||
gns3-server = runTest ./gns3-server.nix;
|
||||
gnupg = runTest ./gnupg.nix;
|
||||
go-camo = runTest ./go-camo.nix;
|
||||
@@ -889,7 +889,7 @@ in
|
||||
lorri = handleTest ./lorri/default.nix { };
|
||||
luks = runTest ./luks.nix;
|
||||
lvm2 = handleTest ./lvm2 { };
|
||||
lxc = handleTest ./lxc { };
|
||||
lxc = runTestOn [ "x86_64-linux" "aarch64-linux" ] ./lxc;
|
||||
lxd-image-server = runTest ./lxd-image-server.nix;
|
||||
lxqt = runTest ./lxqt.nix;
|
||||
ly = runTest ./ly.nix;
|
||||
@@ -1011,7 +1011,9 @@ in
|
||||
defaults.services.ncps.cache.dataPath = "/path/to/ncps";
|
||||
};
|
||||
ndppd = runTest ./ndppd.nix;
|
||||
nebula = runTest ./nebula.nix;
|
||||
nebula-lighthouse-service = runTest ./nebula-lighthouse-service.nix;
|
||||
nebula.connectivity = runTest ./nebula/connectivity.nix;
|
||||
nebula.reload = runTest ./nebula/reload.nix;
|
||||
neo4j = runTest ./neo4j.nix;
|
||||
netbird = runTest ./netbird.nix;
|
||||
netbox-upgrade = runTest ./web-apps/netbox-upgrade.nix;
|
||||
@@ -1520,6 +1522,7 @@ in
|
||||
systemd-sysusers-password-option-override-ordering = runTest ./systemd-sysusers-password-option-override-ordering.nix;
|
||||
systemd-timesyncd-nscd-dnssec = runTest ./systemd-timesyncd-nscd-dnssec.nix;
|
||||
systemd-user-linger = runTest ./systemd-user-linger.nix;
|
||||
systemd-user-linger-purge = runTest ./systemd-user-linger-purge.nix;
|
||||
systemd-user-tmpfiles-rules = runTest ./systemd-user-tmpfiles-rules.nix;
|
||||
systemd-userdbd = runTest ./systemd-userdbd.nix;
|
||||
systemtap = handleTest ./systemtap.nix { };
|
||||
@@ -1555,6 +1558,7 @@ in
|
||||
tor = runTest ./tor.nix;
|
||||
tpm-ek = handleTest ./tpm-ek { };
|
||||
tpm2 = runTest ./tpm2.nix;
|
||||
traccar = runTest ./traccar.nix;
|
||||
# tracee requires bpf
|
||||
tracee = handleTestOn [ "x86_64-linux" ] ./tracee.nix { };
|
||||
traefik = runTestOn [ "aarch64-linux" "x86_64-linux" ] ./traefik.nix;
|
||||
|
||||
@@ -9,6 +9,7 @@ let
|
||||
keepFile = "important_file";
|
||||
keepFileData = "important_data";
|
||||
localRepo = "/root/back:up";
|
||||
localTarRepo = "/root/backup-tar";
|
||||
# a repository on a file system which is not mounted automatically
|
||||
localRepoMount = "/noAutoMount";
|
||||
archiveName = "my_archive";
|
||||
@@ -47,7 +48,7 @@ in
|
||||
|
||||
nodes = {
|
||||
client =
|
||||
{ ... }:
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
virtualisation.fileSystems.${localRepoMount} = {
|
||||
device = "tmpfs";
|
||||
@@ -93,6 +94,20 @@ in
|
||||
startAt = [ ];
|
||||
};
|
||||
|
||||
localTar = {
|
||||
dumpCommand = pkgs.writeScript "createTarArchive" ''
|
||||
${lib.getExe pkgs.gnutar} cf - ${dataDir}
|
||||
'';
|
||||
createCommand = "import-tar";
|
||||
repo = localTarRepo;
|
||||
# Make sure in import-tar mode encryption flags are still respected.
|
||||
encryption = {
|
||||
mode = "repokey";
|
||||
inherit passphrase;
|
||||
};
|
||||
startAt = [ ]; # Do not run automatically
|
||||
};
|
||||
|
||||
remote = {
|
||||
paths = dataDir;
|
||||
repo = remoteRepo;
|
||||
@@ -231,6 +246,19 @@ in
|
||||
# Make sure disabling wrapper works
|
||||
client.fail("command -v borg-job-localMount")
|
||||
|
||||
with subtest("localTar"):
|
||||
borg = "BORG_PASSPHRASE='${passphrase}' borg"
|
||||
client.systemctl("start --wait borgbackup-job-localTar")
|
||||
client.fail("systemctl is-failed borgbackup-job-localTar")
|
||||
archiveName, = client.succeed("{} list --format '{{archive}}{{NL}}' '${localTarRepo}'".format(borg)).strip().split("\n")
|
||||
# Since excludes are not supported by import-tar, we expect to find exclude file, too
|
||||
client.succeed(
|
||||
"{} list '${localTarRepo}::{}' | grep -qF '${excludeFile}'".format(borg, archiveName)
|
||||
)
|
||||
# Make sure keepFile has the correct content
|
||||
client.succeed("{} extract '${localTarRepo}::{}'".format(borg, archiveName))
|
||||
assert "${keepFileData}" in client.succeed("cat ${dataDir}/${keepFile}")
|
||||
|
||||
with subtest("remote"):
|
||||
borg = "BORG_RSH='ssh -oStrictHostKeyChecking=no -i /root/id_ed25519' borg"
|
||||
server.wait_for_unit("sshd.service")
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
# Test ClamAV.
|
||||
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
name = "clamav";
|
||||
nodes = {
|
||||
machine = {
|
||||
services.clamav = {
|
||||
daemon.enable = true;
|
||||
clamonacc.enable = true;
|
||||
|
||||
daemon.settings = {
|
||||
OnAccessPrevention = true;
|
||||
OnAccessIncludePath = "/opt";
|
||||
};
|
||||
};
|
||||
|
||||
# Add the definition for our test file.
|
||||
# We cannot download definitions from Internet using freshclam in sandboxed test.
|
||||
systemd.tmpfiles.settings."10-eicar"."/var/lib/clamav/test.hdb".L.argument = "${pkgs.runCommand
|
||||
"test.hdb"
|
||||
{ }
|
||||
''
|
||||
echo CLAMAVTEST > testfile
|
||||
${lib.getExe' pkgs.clamav "sigtool"} --sha256 testfile > $out
|
||||
''
|
||||
}";
|
||||
|
||||
# Test using /opt as the ClamAV on-access scanner-protected directory.
|
||||
systemd.tmpfiles.settings."10-testdir"."/opt".d = { };
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
machine.wait_for_unit("default.target")
|
||||
|
||||
# Write test file into the test directory.
|
||||
# This won't trigger ClamAV as it scans on file open.
|
||||
machine.succeed("echo CLAMAVTEST > /opt/testfile")
|
||||
|
||||
machine.fail("cat /opt/testfile")
|
||||
'';
|
||||
}
|
||||
@@ -12,7 +12,6 @@ in
|
||||
maintainers = with lib.maintainers; [
|
||||
aristid
|
||||
aszlig
|
||||
kampfschlaefer
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
{
|
||||
name = "containers-extra_veth";
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ kampfschlaefer ];
|
||||
};
|
||||
|
||||
nodes.machine =
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
maintainers = with lib.maintainers; [
|
||||
aristid
|
||||
aszlig
|
||||
kampfschlaefer
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ in
|
||||
maintainers = with lib.maintainers; [
|
||||
aristid
|
||||
aszlig
|
||||
kampfschlaefer
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
{
|
||||
name = "containers-physical_interfaces";
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ kampfschlaefer ];
|
||||
};
|
||||
|
||||
nodes = {
|
||||
|
||||
@@ -12,7 +12,6 @@ in
|
||||
maintainers = with lib.maintainers; [
|
||||
aristid
|
||||
aszlig
|
||||
kampfschlaefer
|
||||
ianwookim
|
||||
];
|
||||
};
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
{
|
||||
name = "containers-restart_networking";
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ kampfschlaefer ];
|
||||
};
|
||||
|
||||
nodes = {
|
||||
|
||||
@@ -22,7 +22,9 @@
|
||||
machine.wait_for_file("/etc/fish/generated_completions/coreutils.fish")
|
||||
machine.wait_for_file("/etc/fish/generated_completions/kill.fish")
|
||||
machine.succeed(
|
||||
"fish -ic 'echo $fish_complete_path' | grep -q '/share/fish/completions /etc/fish/generated_completions /root/.cache/fish/generated_completions$'"
|
||||
"fish -ic 'echo $fish_complete_path' | grep -q '/share/fish/vendor_completions.d /etc/fish/generated_completions /root/.cache/fish/generated_completions$'"
|
||||
)
|
||||
machine.wait_for_file("/etc/fish/config.fish")
|
||||
config = machine.succeed("fish_indent -c /etc/fish/config.fish")
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
name = "gnome-xorg";
|
||||
meta = {
|
||||
maintainers = lib.teams.gnome.members;
|
||||
};
|
||||
|
||||
nodes.machine =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.machine.users.users.alice;
|
||||
in
|
||||
|
||||
{
|
||||
imports = [ ./common/user-account.nix ];
|
||||
|
||||
services.xserver.enable = true;
|
||||
|
||||
services.displayManager.gdm = {
|
||||
enable = true;
|
||||
debug = true;
|
||||
};
|
||||
|
||||
services.displayManager.autoLogin = {
|
||||
enable = true;
|
||||
user = user.name;
|
||||
};
|
||||
|
||||
services.desktopManager.gnome.enable = true;
|
||||
services.desktopManager.gnome.debug = true;
|
||||
services.displayManager.defaultSession = "gnome-xorg";
|
||||
|
||||
systemd.user.services = {
|
||||
"org.gnome.Shell@x11" = {
|
||||
serviceConfig = {
|
||||
ExecStart = [
|
||||
# Clear the list before overriding it.
|
||||
""
|
||||
# Eval API is now internal so Shell needs to run in unsafe mode.
|
||||
# TODO: improve test driver so that it supports openqa-like manipulation
|
||||
# that would allow us to drop this mess.
|
||||
"${pkgs.gnome-shell}/bin/gnome-shell --unsafe-mode"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
user = nodes.machine.users.users.alice;
|
||||
uid = toString user.uid;
|
||||
bus = "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/${uid}/bus";
|
||||
xauthority = "/run/user/${uid}/gdm/Xauthority";
|
||||
display = "DISPLAY=:0.0";
|
||||
env = "${bus} XAUTHORITY=${xauthority} ${display}";
|
||||
# Run a command in the appropriate user environment
|
||||
run = command: "su - ${user.name} -c '${bus} ${command}'";
|
||||
|
||||
# Call javascript in gnome shell, returns a tuple (success, output), where
|
||||
# `success` is true if the dbus call was successful and output is what the
|
||||
# javascript evaluates to.
|
||||
eval =
|
||||
command:
|
||||
run "gdbus call --session -d org.gnome.Shell -o /org/gnome/Shell -m org.gnome.Shell.Eval ${command}";
|
||||
|
||||
# False when startup is done
|
||||
startingUp = eval "Main.layoutManager._startingUp";
|
||||
|
||||
# Start Console
|
||||
launchConsole = run "gapplication launch org.gnome.Console";
|
||||
|
||||
# Hopefully Console's wm class
|
||||
wmClass = eval "global.display.focus_window.wm_class";
|
||||
in
|
||||
''
|
||||
with subtest("Login to GNOME Xorg with GDM"):
|
||||
machine.wait_for_x()
|
||||
# Wait for alice to be logged in"
|
||||
machine.wait_for_unit("default.target", "${user.name}")
|
||||
machine.wait_for_file("${xauthority}")
|
||||
machine.succeed("xauth merge ${xauthority}")
|
||||
# Check that logging in has given the user ownership of devices
|
||||
# Change back to /dev/snd/timer after systemd-258.1
|
||||
assert "alice" in machine.succeed("getfacl -p /dev/dri/card0")
|
||||
|
||||
with subtest("Wait for GNOME Shell"):
|
||||
# correct output should be (true, 'false')
|
||||
machine.wait_until_succeeds(
|
||||
"${startingUp} | grep -q 'true,..false'"
|
||||
)
|
||||
|
||||
with subtest("Open Console"):
|
||||
# Close the Activities view so that Shell can correctly track the focused window.
|
||||
machine.send_key("esc")
|
||||
|
||||
machine.succeed(
|
||||
"${launchConsole}"
|
||||
)
|
||||
# correct output should be (true, '"kgx"')
|
||||
# For some reason, this deviates from Wayland.
|
||||
machine.wait_until_succeeds(
|
||||
"${wmClass} | grep -q 'true,...kgx'"
|
||||
)
|
||||
machine.sleep(20)
|
||||
machine.screenshot("screen")
|
||||
'';
|
||||
}
|
||||
@@ -38,10 +38,13 @@ in
|
||||
settings = {
|
||||
server_url = "https://headscale";
|
||||
ip_prefixes = [ "100.64.0.0/10" ];
|
||||
derp.server = {
|
||||
enabled = true;
|
||||
region_id = 999;
|
||||
stun_listen_addr = "0.0.0.0:${toString stunPort}";
|
||||
derp = {
|
||||
server = {
|
||||
enabled = true;
|
||||
region_id = 999;
|
||||
stun_listen_addr = "0.0.0.0:${toString stunPort}";
|
||||
};
|
||||
urls = [ ];
|
||||
};
|
||||
dns = {
|
||||
base_domain = "tailnet";
|
||||
|
||||
+116
-112
@@ -1,124 +1,128 @@
|
||||
import ../make-test-python.nix (
|
||||
{ pkgs, lib, ... }:
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
releases = import ../../release.nix {
|
||||
configuration = {
|
||||
# Building documentation makes the test unnecessarily take a longer time:
|
||||
documentation.enable = lib.mkForce false;
|
||||
let
|
||||
releases = import ../../release.nix {
|
||||
configuration = {
|
||||
# Building documentation makes the test unnecessarily take a longer time:
|
||||
documentation.enable = lib.mkForce false;
|
||||
documentation.nixos.enable = lib.mkForce false;
|
||||
# including a channel forces images to be rebuilt on any changes
|
||||
system.installer.channel.enable = lib.mkForce false;
|
||||
};
|
||||
};
|
||||
|
||||
lxc-image-metadata =
|
||||
releases.incusContainerMeta.${pkgs.stdenv.hostPlatform.system}
|
||||
+ "/tarball/nixos-image-lxc-*-${pkgs.stdenv.hostPlatform.system}.tar.xz";
|
||||
# the incus container rootfs is in squashfs, but lxc requires tar.xz so use containerTarball
|
||||
lxc-image-rootfs =
|
||||
releases.containerTarball.${pkgs.stdenv.hostPlatform.system}
|
||||
+ "/tarball/nixos-image-lxc-*-${pkgs.stdenv.hostPlatform.system}.tar.xz";
|
||||
|
||||
in
|
||||
{
|
||||
name = "lxc-container-unprivileged";
|
||||
|
||||
meta = {
|
||||
maintainers = lib.teams.lxc.members;
|
||||
};
|
||||
|
||||
nodes.machine = {
|
||||
virtualisation = {
|
||||
diskSize = 6144;
|
||||
cores = 2;
|
||||
memorySize = 512;
|
||||
writableStore = true;
|
||||
|
||||
lxc = {
|
||||
enable = true;
|
||||
unprivilegedContainers = true;
|
||||
systemConfig = ''
|
||||
lxc.lxcpath = /tmp/lxc
|
||||
'';
|
||||
defaultConfig = ''
|
||||
lxc.net.0.type = veth
|
||||
lxc.net.0.link = lxcbr0
|
||||
lxc.net.0.flags = up
|
||||
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
|
||||
lxc.idmap = u 0 100000 65536
|
||||
lxc.idmap = g 0 100000 65536
|
||||
'';
|
||||
# Permit user alice to connect to bridge
|
||||
usernetConfig = ''
|
||||
@lxc-user veth lxcbr0 10
|
||||
'';
|
||||
bridgeConfig = ''
|
||||
LXC_IPV6_ADDR=""
|
||||
LXC_IPV6_MASK=""
|
||||
LXC_IPV6_NETWORK=""
|
||||
LXC_IPV6_NAT="false"
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
lxc-image-metadata = releases.incusContainerMeta.${pkgs.stdenv.hostPlatform.system};
|
||||
lxc-image-rootfs = releases.incusContainerImage.${pkgs.stdenv.hostPlatform.system};
|
||||
# Needed for lxc
|
||||
environment.systemPackages = [
|
||||
pkgs.wget
|
||||
pkgs.dnsmasq
|
||||
];
|
||||
|
||||
in
|
||||
{
|
||||
name = "lxc-container-unprivileged";
|
||||
|
||||
meta = {
|
||||
maintainers = lib.teams.lxc.members;
|
||||
# Create user for test
|
||||
users.users.alice = {
|
||||
isNormalUser = true;
|
||||
password = "test";
|
||||
description = "Lxc unprivileged user with access to lxcbr0";
|
||||
extraGroups = [ "lxc-user" ];
|
||||
subGidRanges = [
|
||||
{
|
||||
startGid = 100000;
|
||||
count = 65536;
|
||||
}
|
||||
];
|
||||
subUidRanges = [
|
||||
{
|
||||
startUid = 100000;
|
||||
count = 65536;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
nodes.machine =
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
virtualisation = {
|
||||
diskSize = 6144;
|
||||
cores = 2;
|
||||
memorySize = 512;
|
||||
writableStore = true;
|
||||
users.users.bob = {
|
||||
isNormalUser = true;
|
||||
password = "test";
|
||||
description = "Lxc unprivileged user without access to lxcbr0";
|
||||
subGidRanges = [
|
||||
{
|
||||
startGid = 100000;
|
||||
count = 65536;
|
||||
}
|
||||
];
|
||||
subUidRanges = [
|
||||
{
|
||||
startUid = 100000;
|
||||
count = 65536;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
lxc = {
|
||||
enable = true;
|
||||
unprivilegedContainers = true;
|
||||
systemConfig = ''
|
||||
lxc.lxcpath = /tmp/lxc
|
||||
'';
|
||||
defaultConfig = ''
|
||||
lxc.net.0.type = veth
|
||||
lxc.net.0.link = lxcbr0
|
||||
lxc.net.0.flags = up
|
||||
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx
|
||||
lxc.idmap = u 0 100000 65536
|
||||
lxc.idmap = g 0 100000 65536
|
||||
'';
|
||||
# Permit user alice to connect to bridge
|
||||
usernetConfig = ''
|
||||
@lxc-user veth lxcbr0 10
|
||||
'';
|
||||
bridgeConfig = ''
|
||||
LXC_IPV6_ADDR=""
|
||||
LXC_IPV6_MASK=""
|
||||
LXC_IPV6_NETWORK=""
|
||||
LXC_IPV6_NAT="false"
|
||||
'';
|
||||
};
|
||||
};
|
||||
testScript = ''
|
||||
machine.wait_for_unit("lxc-net.service")
|
||||
|
||||
# Needed for lxc
|
||||
environment.systemPackages = [
|
||||
pkgs.wget
|
||||
pkgs.dnsmasq
|
||||
];
|
||||
# Copy config files for alice
|
||||
machine.execute("su -- alice -c 'mkdir -p ~/.config/lxc'")
|
||||
machine.execute("su -- alice -c 'cp /etc/lxc/default.conf ~/.config/lxc/'")
|
||||
machine.execute("su -- alice -c 'cp /etc/lxc/lxc.conf ~/.config/lxc/'")
|
||||
|
||||
# Create user for test
|
||||
users.users.alice = {
|
||||
isNormalUser = true;
|
||||
password = "test";
|
||||
description = "Lxc unprivileged user with access to lxcbr0";
|
||||
extraGroups = [ "lxc-user" ];
|
||||
subGidRanges = [
|
||||
{
|
||||
startGid = 100000;
|
||||
count = 65536;
|
||||
}
|
||||
];
|
||||
subUidRanges = [
|
||||
{
|
||||
startUid = 100000;
|
||||
count = 65536;
|
||||
}
|
||||
];
|
||||
};
|
||||
machine.succeed("su -- alice -c 'lxc-create -t local -n test -- --metadata ${lxc-image-metadata} --fstree ${lxc-image-rootfs}'")
|
||||
machine.succeed("su -- alice -c 'lxc-start test'")
|
||||
machine.succeed("su -- alice -c 'lxc-stop test'")
|
||||
|
||||
users.users.bob = {
|
||||
isNormalUser = true;
|
||||
password = "test";
|
||||
description = "Lxc unprivileged user without access to lxcbr0";
|
||||
subGidRanges = [
|
||||
{
|
||||
startGid = 100000;
|
||||
count = 65536;
|
||||
}
|
||||
];
|
||||
subUidRanges = [
|
||||
{
|
||||
startUid = 100000;
|
||||
count = 65536;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
# Copy config files for bob
|
||||
machine.execute("su -- bob -c 'mkdir -p ~/.config/lxc'")
|
||||
machine.execute("su -- bob -c 'cp /etc/lxc/default.conf ~/.config/lxc/'")
|
||||
machine.execute("su -- bob -c 'cp /etc/lxc/lxc.conf ~/.config/lxc/'")
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("lxc-net.service")
|
||||
|
||||
# Copy config files for alice
|
||||
machine.execute("su -- alice -c 'mkdir -p ~/.config/lxc'")
|
||||
machine.execute("su -- alice -c 'cp /etc/lxc/default.conf ~/.config/lxc/'")
|
||||
machine.execute("su -- alice -c 'cp /etc/lxc/lxc.conf ~/.config/lxc/'")
|
||||
|
||||
machine.succeed("su -- alice -c 'lxc-create -t local -n test -- --metadata ${lxc-image-metadata}/*/*.tar.xz --fstree ${lxc-image-rootfs}/*/*.tar.xz'")
|
||||
machine.succeed("su -- alice -c 'lxc-start test'")
|
||||
machine.succeed("su -- alice -c 'lxc-stop test'")
|
||||
|
||||
# Copy config files for bob
|
||||
machine.execute("su -- bob -c 'mkdir -p ~/.config/lxc'")
|
||||
machine.execute("su -- bob -c 'cp /etc/lxc/default.conf ~/.config/lxc/'")
|
||||
machine.execute("su -- bob -c 'cp /etc/lxc/lxc.conf ~/.config/lxc/'")
|
||||
|
||||
machine.fail("su -- bob -c 'lxc-start test'")
|
||||
'';
|
||||
}
|
||||
)
|
||||
machine.fail("su -- bob -c 'lxc-start test'")
|
||||
'';
|
||||
}
|
||||
|
||||
+17
-13
@@ -14,6 +14,7 @@ in
|
||||
let
|
||||
inherit (config.networking) hostName;
|
||||
cfg = config.services.molly-brown;
|
||||
openssl = pkgs.lib.getExe pkgs.openssl;
|
||||
in
|
||||
{
|
||||
|
||||
@@ -47,22 +48,25 @@ in
|
||||
|
||||
services.molly-brown = {
|
||||
enable = true;
|
||||
docBase = "/tmp/docs";
|
||||
certPath = "/tmp/cert.pem";
|
||||
keyPath = "/tmp/key.pem";
|
||||
docBase = "/var/lib/molly-brown/docs";
|
||||
certPath = "/var/lib/molly-brown/cert.pem";
|
||||
keyPath = "/var/lib/molly-brown/key.pem";
|
||||
};
|
||||
|
||||
systemd.services.molly-brown.preStart = ''
|
||||
${pkgs.openssl}/bin/openssl genrsa -out "/tmp/key.pem"
|
||||
${pkgs.openssl}/bin/openssl req -new \
|
||||
-subj "/CN=${config.networking.hostName}" \
|
||||
-key "/tmp/key.pem" -out /tmp/request.pem
|
||||
${pkgs.openssl}/bin/openssl x509 -req -days 3650 \
|
||||
-in /tmp/request.pem -signkey "/tmp/key.pem" -out "/tmp/cert.pem"
|
||||
systemd.services.molly-brown = {
|
||||
serviceConfig.StateDirectory = "molly-brown";
|
||||
preStart = ''
|
||||
${openssl} genrsa -out "$STATE_DIRECTORY/key.pem"
|
||||
${openssl} req -new \
|
||||
-subj "/CN=${hostName}" \
|
||||
-key "$STATE_DIRECTORY/key.pem" -out "$STATE_DIRECTORY/request.pem"
|
||||
${openssl} x509 -req -days 3650 \
|
||||
-in "$STATE_DIRECTORY/request.pem" -signkey "$STATE_DIRECTORY/key.pem" -out "$STATE_DIRECTORY/cert.pem"
|
||||
|
||||
mkdir -p "${cfg.settings.DocBase}"
|
||||
echo "${testString}" > "${cfg.settings.DocBase}/test.gmi"
|
||||
'';
|
||||
mkdir -p "${cfg.settings.DocBase}"
|
||||
echo "${testString}" > "${cfg.settings.DocBase}/test.gmi"
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
testScript = ''
|
||||
|
||||
+1
-4
@@ -5,10 +5,7 @@ let
|
||||
in
|
||||
{
|
||||
name = "n8n";
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
freezeboy
|
||||
k900
|
||||
];
|
||||
meta.maintainers = with lib.maintainers; [ k900 ];
|
||||
|
||||
node.pkgsReadOnly = false;
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
name = "nebula-lighthouse-service";
|
||||
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
bloominstrong
|
||||
];
|
||||
|
||||
nodes.machine =
|
||||
{ ... }:
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
nebula
|
||||
];
|
||||
services.nebula-lighthouse-service.enable = true;
|
||||
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
machine.succeed(
|
||||
'nebula-cert ca -duration $((10*365*24*60))m -name "NLS Test" -out-crt ca.crt -out-key ca.key',
|
||||
'nebula-cert sign -duration $((365*24*60))m -ca-crt ca.crt -ca-key ca.key -name "lighthouse" -groups "lighthouse" -ip "10.0.100.1/24" -out-crt lighthouse.crt -out-key lighthouse.key'
|
||||
)
|
||||
machine.wait_for_unit("nebula-lighthouse-service.service")
|
||||
machine.wait_for_open_port(8080)
|
||||
machine.succeed(
|
||||
'curl -X POST "http://127.0.0.1:8080/lighthouse/" -F ca_crt=@./ca.crt -F host_crt=@./lighthouse.crt -F host_key=@./lighthouse.key',
|
||||
'curl -X GET "http://127.0.0.1:8080/lighthouse/" -F ca_crt=@./ca.crt -F host_crt=@./lighthouse.crt -F host_key=@./lighthouse.key',
|
||||
'pgrep -x nebula'
|
||||
)
|
||||
'';
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
let
|
||||
|
||||
# We'll need to be able to trade cert files between nodes via scp.
|
||||
inherit (import ./ssh-keys.nix pkgs)
|
||||
inherit (import ../ssh-keys.nix pkgs)
|
||||
snakeOilPrivateKey
|
||||
snakeOilPublicKey
|
||||
;
|
||||
@@ -0,0 +1,92 @@
|
||||
{ pkgs, lib, ... }:
|
||||
let
|
||||
|
||||
inherit (import ../ssh-keys.nix pkgs)
|
||||
snakeOilPrivateKey
|
||||
snakeOilPublicKey
|
||||
;
|
||||
|
||||
in
|
||||
{
|
||||
name = "nebula";
|
||||
|
||||
nodes = {
|
||||
lighthouse =
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
{
|
||||
environment.systemPackages = [ pkgs.nebula ];
|
||||
environment.etc."nebula-key" = {
|
||||
user = "nebula-smoke";
|
||||
group = "nebula-smoke";
|
||||
source = snakeOilPrivateKey;
|
||||
mode = "0600";
|
||||
};
|
||||
|
||||
services.nebula.networks.smoke = {
|
||||
# Note that these paths won't exist when the machine is first booted.
|
||||
ca = "/etc/nebula/ca.crt";
|
||||
cert = "/etc/nebula/lighthouse.crt";
|
||||
key = "/etc/nebula/lighthouse.key";
|
||||
isLighthouse = true;
|
||||
listen = {
|
||||
host = "0.0.0.0";
|
||||
port = 4242;
|
||||
};
|
||||
enableReload = true;
|
||||
settings.sshd = {
|
||||
enabled = true;
|
||||
listen = "127.0.0.1:2222";
|
||||
host_key = "/etc/nebula-key";
|
||||
};
|
||||
};
|
||||
|
||||
# We will test that nebula is reloaded by switching specialisations.
|
||||
specialisation.sshd-off.configuration = {
|
||||
services.nebula.networks.smoke.settings.sshd.enabled = lib.mkForce false;
|
||||
};
|
||||
specialisation.sshd-on.configuration = {
|
||||
services.nebula.networks.smoke.settings.sshd.enabled = lib.mkForce true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript =
|
||||
{ nodes, ... }:
|
||||
let
|
||||
sshd-on = "${nodes.lighthouse.system.build.toplevel}/specialisation/sshd-on";
|
||||
sshd-off = "${nodes.lighthouse.system.build.toplevel}/specialisation/sshd-off";
|
||||
in
|
||||
''
|
||||
# Create the certificate and sign the lighthouse's keys.
|
||||
lighthouse.succeed(
|
||||
"mkdir -p /etc/nebula",
|
||||
'nebula-cert ca -duration $((10*365*24*60))m -name "Smoke Test" -out-crt /etc/nebula/ca.crt -out-key /etc/nebula/ca.key',
|
||||
'nebula-cert sign -duration $((365*24*60))m -ca-crt /etc/nebula/ca.crt -ca-key /etc/nebula/ca.key -name "lighthouse" -groups "lighthouse" -ip "10.0.100.1/24" -out-crt /etc/nebula/lighthouse.crt -out-key /etc/nebula/lighthouse.key',
|
||||
'chown -R nebula-smoke:nebula-smoke /etc/nebula'
|
||||
)
|
||||
|
||||
# Restart nebula to pick up the keys.
|
||||
lighthouse.systemctl("restart nebula@smoke.service")
|
||||
lighthouse.succeed("ping -c5 10.0.100.1")
|
||||
|
||||
# Verify that nebula's ssh interface is up.
|
||||
lighthouse.succeed("${pkgs.nmap}/bin/nmap 127.0.0.1 | grep 2222/tcp")
|
||||
|
||||
# Switch configuration, verify nebula was reloaded and not restarted.
|
||||
lighthouse.succeed("${sshd-off}/bin/switch-to-configuration test 2>&1 | grep 'nebula' | grep 'reload'")
|
||||
|
||||
# Verify that nebula's ssh interface is no longer up.
|
||||
lighthouse.fail("${pkgs.nmap}/bin/nmap 127.0.0.1 | grep 2222/tcp")
|
||||
|
||||
# Switch configuration, verify reload again.
|
||||
lighthouse.succeed("${sshd-on}/bin/switch-to-configuration test 2>&1 | grep 'nebula' | grep 'reload'")
|
||||
|
||||
# Verify that ssh is back.
|
||||
lighthouse.succeed("${pkgs.nmap}/bin/nmap 127.0.0.1 | grep 2222/tcp")
|
||||
'';
|
||||
}
|
||||
@@ -50,7 +50,7 @@ in
|
||||
|
||||
# octoprint takes some time to start. This makes sure we'll retry just in case it takes longer
|
||||
# retry-all-errors in necessary, since octoprint will report a 404 error when not yet ready
|
||||
curl_cmd = "curl --retry-all-errors --connect-timeout 5 --max-time 10 --retry 5 --retry-delay 0 \
|
||||
curl_cmd = "curl --retry-all-errors --connect-timeout 5 --max-time 10 --retry 5 --retry-delay 5 \
|
||||
--retry-max-time 40 -X GET --header 'X-API-Key: ${apikey}' "
|
||||
|
||||
# used to fail early, in case octoprint first starts and then crashes
|
||||
|
||||
@@ -103,18 +103,17 @@ in
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
import crypt
|
||||
|
||||
def assert_password_match(machine, username, password):
|
||||
def assert_password_sha512crypt_match(machine, username, password):
|
||||
shadow_entry = machine.succeed(f"getent shadow {username}")
|
||||
print(shadow_entry)
|
||||
hash = shadow_entry.split(":")[1]
|
||||
seed = "$".join(hash.split("$")[:-1])
|
||||
assert crypt.crypt(password, seed) == hash, f"{username} user password does not match"
|
||||
stored_hash = shadow_entry.split(":")[1]
|
||||
salt = stored_hash.split("$")[2]
|
||||
pass_hash = machine.succeed(f"mkpasswd -m sha512crypt {password} {salt}").strip()
|
||||
assert stored_hash == pass_hash, f"{username} user password does not match"
|
||||
|
||||
with subtest("alice user has correct password"):
|
||||
for machine in machines:
|
||||
assert_password_match(machine, "alice", "${password1}")
|
||||
assert_password_sha512crypt_match(machine, "alice", "${password1}")
|
||||
assert "${hashed_sha512crypt}" not in machine.succeed("getent shadow alice"), f"{machine}: alice user password is not correct"
|
||||
|
||||
with subtest("bob user has correct password"):
|
||||
@@ -136,7 +135,7 @@ in
|
||||
print(mutable.succeed("getent shadow greg"))
|
||||
assert "${hashed_sha512crypt}" in mutable.succeed("getent shadow greg"), "greg user password is not correct"
|
||||
|
||||
assert_password_match(immutable, "greg", "${password1}")
|
||||
assert_password_sha512crypt_match(immutable, "greg", "${password1}")
|
||||
assert "${hashed_sha512crypt}" not in immutable.succeed("getent shadow greg"), "greg user password is not correct"
|
||||
|
||||
for machine in machines:
|
||||
|
||||
@@ -10,11 +10,14 @@
|
||||
enable = true;
|
||||
port = 8080;
|
||||
originalsPath = "/media/photos/";
|
||||
passwordFile = pkgs.writeText "password" "secret";
|
||||
passwordFile = "/etc/photoprism-password";
|
||||
};
|
||||
environment = {
|
||||
etc."photoprism-password".text = "secret";
|
||||
extraInit = ''
|
||||
mkdir -p /media/photos
|
||||
'';
|
||||
};
|
||||
environment.extraInit = ''
|
||||
mkdir -p /media/photos
|
||||
'';
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{ lib, ... }:
|
||||
{
|
||||
name = "plikd";
|
||||
meta = with lib.maintainers; {
|
||||
maintainers = [ freezeboy ];
|
||||
meta = {
|
||||
maintainers = [ ];
|
||||
};
|
||||
|
||||
nodes.machine =
|
||||
|
||||
@@ -1757,6 +1757,51 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
tailscale = {
|
||||
exporterConfig = {
|
||||
package = pkgs.prometheus-tailscale-exporter.overrideAttrs {
|
||||
patches = [
|
||||
# This patch prevents the exporter from exiting immediately upon
|
||||
# startup when no credentials are provided, which is useful for
|
||||
# testing the NixOS module.
|
||||
(pkgs.writeText "allow-running-without-credentials" ''
|
||||
diff --git a/cmd/tailscale-exporter/root.go b/cmd/tailscale-exporter/root.go
|
||||
index 2ff11cb..2fb576f 100644
|
||||
--- a/cmd/tailscale-exporter/root.go
|
||||
+++ b/cmd/tailscale-exporter/root.go
|
||||
@@ -137,14 +137,6 @@ func runExporter(cmd *cobra.Command, args []string) error {
|
||||
''\t// Create HTTP client that automatically handles token refresh
|
||||
''\thttpClient := oauthConfig.Client(context.Background())
|
||||
|
||||
-''\t// Test OAuth token generation
|
||||
-''\ttoken, err := oauthConfig.Token(context.Background())
|
||||
-''\tif err != nil {
|
||||
-''\t''\treturn fmt.Errorf("failed to obtain OAuth token: %w", err)
|
||||
-''\t}
|
||||
-''\tlogger.Info("OAuth token obtained", "token_type", token.TokenType)
|
||||
-''\tlogger.Info("Successfully obtained OAuth token", "expires", token.Expiry)
|
||||
-
|
||||
''\t// Default labels for all metrics
|
||||
''\tdefaultLabels := prometheus.Labels{"tailnet": tailnet}
|
||||
''\treg := prometheus.WrapRegistererWith(
|
||||
'')
|
||||
];
|
||||
};
|
||||
enable = true;
|
||||
environmentFile = pkgs.writeText "tailscale-exporter-env" ''
|
||||
TAILSCALE_OAUTH_CLIENT_ID=12345678
|
||||
TAILSCALE_OAUTH_CLIENT_SECRET=12345678
|
||||
TAILSCALE_TAILNET=example.com
|
||||
'';
|
||||
};
|
||||
|
||||
exporterTest = ''
|
||||
wait_for_unit("prometheus-tailscale-exporter.service")
|
||||
wait_for_open_port(9250)
|
||||
succeed("curl -sSf localhost:9250/metrics | grep 'tailscale_up{tailnet=\"example.com\"} 1'")
|
||||
'';
|
||||
};
|
||||
|
||||
unpoller = {
|
||||
nodeName = "unpoller";
|
||||
exporterConfig.enable = true;
|
||||
|
||||
@@ -10,7 +10,7 @@ let
|
||||
mkTestName =
|
||||
pkg: "${pkg.pname}_${builtins.replaceStrings [ "." ] [ "" ] (lib.versions.majorMinor pkg.version)}";
|
||||
redisPackages = {
|
||||
inherit (pkgs) redis keydb valkey;
|
||||
inherit (pkgs) redis valkey;
|
||||
};
|
||||
makeRedisTest =
|
||||
{
|
||||
|
||||
@@ -362,7 +362,7 @@ in
|
||||
client.wait_until_succeeds("curl -sSf http://server:${toString httpPort}/web/client/login")
|
||||
|
||||
# Ensure sftpgo found the static folder
|
||||
client.wait_until_succeeds("curl -o /dev/null -sSf http://server:${toString httpPort}/static/favicon.ico")
|
||||
client.wait_until_succeeds("curl -o /dev/null -sSf http://server:${toString httpPort}/static/favicon.png")
|
||||
|
||||
with subtest("Setup SSH keys"):
|
||||
client.succeed("mkdir -m 700 /root/.ssh")
|
||||
|
||||
@@ -64,7 +64,7 @@ in
|
||||
boot.loader.grub.enable = false;
|
||||
|
||||
specialisation = rec {
|
||||
brokenInitInterface.configuration.config.system.extraSystemBuilderCmds = ''
|
||||
brokenInitInterface.configuration.config.system.systemBuilderCommands = ''
|
||||
echo "systemd 0" > $out/init-interface-version
|
||||
'';
|
||||
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
# This test checks #418101, where lingering users would not be cleared up if
|
||||
# the configuration is updated to remove lingering from all users.
|
||||
rec {
|
||||
name = "systemd-user-linger-purge";
|
||||
|
||||
nodes.machine = {
|
||||
users.users = {
|
||||
bob = {
|
||||
isNormalUser = true;
|
||||
linger = false;
|
||||
uid = 1001;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript =
|
||||
let
|
||||
uidStrings = builtins.mapAttrs (k: v: builtins.toString v.uid) nodes.machine.users.users;
|
||||
in
|
||||
''
|
||||
machine.fail("test -e /var/lib/systemd/linger/bob")
|
||||
machine.fail("systemctl status user-${uidStrings.bob}.slice")
|
||||
|
||||
with subtest("missing users have linger purged"):
|
||||
machine.succeed("touch /var/lib/systemd/linger/alice")
|
||||
machine.systemctl("restart linger-users")
|
||||
machine.succeed("test ! -e /var/lib/systemd/linger/alice")
|
||||
|
||||
with subtest("mutable users can linger"):
|
||||
machine.succeed("useradd alice")
|
||||
machine.succeed("test ! -e /var/lib/systemd/linger/alice")
|
||||
machine.succeed("loginctl enable-linger alice")
|
||||
machine.succeed("test -e /var/lib/systemd/linger/alice")
|
||||
machine.systemctl("restart linger-users")
|
||||
machine.succeed("test -e /var/lib/systemd/linger/alice")
|
||||
'';
|
||||
}
|
||||
@@ -1,37 +1,39 @@
|
||||
{ lib, ... }:
|
||||
{
|
||||
rec {
|
||||
name = "systemd-user-linger";
|
||||
|
||||
nodes.machine =
|
||||
{ ... }:
|
||||
{
|
||||
users.users = {
|
||||
alice = {
|
||||
isNormalUser = true;
|
||||
linger = true;
|
||||
uid = 1000;
|
||||
};
|
||||
nodes.machine = {
|
||||
users.users = {
|
||||
alice = {
|
||||
isNormalUser = true;
|
||||
linger = true;
|
||||
uid = 1000;
|
||||
};
|
||||
|
||||
bob = {
|
||||
isNormalUser = true;
|
||||
linger = false;
|
||||
uid = 10001;
|
||||
};
|
||||
bob = {
|
||||
isNormalUser = true;
|
||||
linger = false;
|
||||
uid = 1001;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript =
|
||||
{ ... }:
|
||||
let
|
||||
uidStrings = builtins.mapAttrs (k: v: builtins.toString v.uid) nodes.machine.users.users;
|
||||
in
|
||||
''
|
||||
machine.wait_for_file("/var/lib/systemd/linger/alice")
|
||||
machine.succeed("systemctl status user-1000.slice")
|
||||
machine.succeed("systemctl status user-${uidStrings.alice}.slice")
|
||||
|
||||
machine.fail("test -e /var/lib/systemd/linger/bob")
|
||||
machine.fail("systemctl status user-1001.slice")
|
||||
machine.fail("systemctl status user-${uidStrings.bob}.slice")
|
||||
|
||||
with subtest("missing users have linger purged"):
|
||||
machine.succeed("touch /var/lib/systemd/linger/missing")
|
||||
with subtest("mutable users can linger"):
|
||||
machine.succeed("useradd clare")
|
||||
machine.succeed("test ! -e /var/lib/systemd/linger/clare")
|
||||
machine.succeed("loginctl enable-linger clare")
|
||||
machine.succeed("test -e /var/lib/systemd/linger/clare")
|
||||
machine.systemctl("restart linger-users")
|
||||
machine.succeed("test ! -e /var/lib/systemd/linger/missing")
|
||||
machine.succeed("test -e /var/lib/systemd/linger/clare")
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
name = "traccar";
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ frederictobiasc ];
|
||||
};
|
||||
nodes.machine = {
|
||||
services.traccar = {
|
||||
enable = true;
|
||||
settings.mail.smtp.host = "$SMTP_HOST";
|
||||
environmentFile = pkgs.writeText "traccar.env" ''
|
||||
SMTP_HOST=smtp.example.com
|
||||
'';
|
||||
};
|
||||
};
|
||||
testScript = ''
|
||||
machine.wait_for_unit("traccar.service")
|
||||
|
||||
# Check that environment variables were substituted
|
||||
t.assertIn("smtp.example.com", machine.succeed("cat /var/lib/traccar/config.xml"), "environment substitution failed")
|
||||
|
||||
machine.wait_for_open_port(8082)
|
||||
|
||||
# Check that we get the traccar login page
|
||||
t.assertIn("Traccar", machine.wait_until_succeeds("curl -sf http://localhost:8082/"), "Traccar frontend seems unreachable")
|
||||
|
||||
# Register the first admin user
|
||||
register_data = """
|
||||
{
|
||||
"email": "admin@example.com",
|
||||
"name": "admin",
|
||||
"password": "admin123"
|
||||
}
|
||||
"""
|
||||
|
||||
t.assertIn(
|
||||
"\"administrator\":true",
|
||||
machine.succeed(
|
||||
"curl -s -X POST "
|
||||
"-H 'Content-Type: application/json' "
|
||||
f"-d '{register_data}' "
|
||||
"http://localhost:8082/api/users"
|
||||
),
|
||||
"Unexpected registration response"
|
||||
)
|
||||
'';
|
||||
}
|
||||
@@ -162,7 +162,7 @@ let
|
||||
cp "${cfg.system.build.kernel}/bzImage" /mnt/linux
|
||||
cp "${cfg.system.build.initialRamdisk}/initrd" /mnt/initrd
|
||||
|
||||
${pkgs.grub2}/bin/grub-install --boot-directory=/mnt /dev/vda
|
||||
${pkgs.grub2}/bin/grub-install --target=i386-pc --boot-directory=/mnt /dev/vda
|
||||
|
||||
cat > /mnt/grub/grub.cfg <<GRUB
|
||||
set root=hd0,1
|
||||
|
||||
@@ -27,6 +27,7 @@ in
|
||||
"fc00::1/128"
|
||||
];
|
||||
listenPort = 23542;
|
||||
fwMark = "0x6e6978";
|
||||
|
||||
# !!! Don't do this with real keys. The /nix store is world-readable!
|
||||
privateKeyFile = toString (pkgs.writeText "privateKey" wg-snakeoil-keys.peer0.privateKey);
|
||||
@@ -60,6 +61,7 @@ in
|
||||
"fc00::2/128"
|
||||
];
|
||||
listenPort = 23542;
|
||||
fwMark = "30567";
|
||||
|
||||
# !!! Don't do this with real keys. The /nix store is world-readable!
|
||||
privateKeyFile = toString (pkgs.writeText "privateKey" wg-snakeoil-keys.peer1.privateKey);
|
||||
@@ -97,5 +99,9 @@ in
|
||||
with subtest("Has PSK set"):
|
||||
peer0.succeed("wg | grep 'preshared key'")
|
||||
peer1.succeed("wg | grep 'preshared key'")
|
||||
|
||||
with subtest("Has FwMark set"):
|
||||
peer0.succeed("wg | grep '0x6e6978'")
|
||||
peer1.succeed("wg | grep '0x7767'")
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -127,6 +127,10 @@ stdenv.mkDerivation rec {
|
||||
mkdir $out/bin
|
||||
ln -s $out/opt/REAPER/reaper $out/bin/
|
||||
|
||||
# Avoid store path in Exec, since we already link to $out/bin
|
||||
substituteInPlace $out/share/applications/cockos-reaper.desktop \
|
||||
--replace-fail "Exec=\"$out/opt/REAPER/reaper\"" "Exec=reaper"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
|
||||
@@ -19,6 +19,10 @@
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "timeshift";
|
||||
version = "25.07.7";
|
||||
outputs = [
|
||||
"out"
|
||||
"man"
|
||||
];
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "linuxmint";
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
timeshift-unwrapped: runtimeDeps:
|
||||
stdenvNoCC.mkDerivation {
|
||||
inherit (timeshift-unwrapped) pname version;
|
||||
inherit (timeshift-unwrapped) pname version outputs;
|
||||
|
||||
dontUnpack = true;
|
||||
|
||||
@@ -21,8 +21,12 @@ stdenvNoCC.mkDerivation {
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p "$out"
|
||||
lndir "${timeshift-unwrapped}" "$out"
|
||||
''
|
||||
+ lib.concatMapStrings (outputName: ''
|
||||
mkdir -p "''$${outputName}"
|
||||
lndir -silent "${timeshift-unwrapped.${outputName}}" "''$${outputName}"
|
||||
'') timeshift-unwrapped.outputs
|
||||
+ ''
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
|
||||
@@ -32,19 +32,18 @@
|
||||
# The list can be found at https://github.com/bitcoinknots/guix.sigs/tree/knots/builder-keys
|
||||
builderKeys ? [
|
||||
"1A3E761F19D2CC7785C5502EA291A2C45D0C504A" # luke-jr.gpg
|
||||
"C1BCB7169AF1A07A0C5E471A047509FA0A6D7350" # ataraxia
|
||||
"DAED928C727D3E613EC46635F5073C4F4882FFFC" # leo-haf.gpg
|
||||
],
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = if withGui then "bitcoin-knots" else "bitcoind-knots";
|
||||
version = "29.2.knots20251010";
|
||||
version = "29.2.knots20251110";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://bitcoinknots.org/files/29.x/${finalAttrs.version}/bitcoin-${finalAttrs.version}.tar.gz";
|
||||
# hash retrieved from signed SHA256SUMS
|
||||
hash = "sha256-p3omcfgX57reHXQX3IG8FPmMy8MHSCN0+D9Hhb24Wck=";
|
||||
hash = "sha256-ZoFQsrNSkIFdSkiwMX64UnWtjVZu+g+64AV7OjtCcBI=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
@@ -89,18 +88,18 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
publicKeys = fetchFromGitHub {
|
||||
owner = "bitcoinknots";
|
||||
repo = "guix.sigs";
|
||||
rev = "251a8f2141e5f8439175fdd7b6cd6819d743cc01";
|
||||
sha256 = "sha256-pZOK/lD1m9x8mz1IB39kLA/27fBnLvEL3qrwTRjL9Ec=";
|
||||
rev = "cc710f4715ff5ff74a9e89d8b6798884fe1e9d40";
|
||||
sha256 = "sha256-PVvsqY//75dv+VrtapCNroD1z1zUaA/UBGvfq3zNySo=";
|
||||
};
|
||||
|
||||
checksums = fetchurl {
|
||||
url = "https://bitcoinknots.org/files/${majorVersion}.x/${finalAttrs.version}/SHA256SUMS";
|
||||
hash = "sha256-DQQg2Iahp2H5jDYA9XX5n/ypRzmFggincGNoIH2t5iU=";
|
||||
hash = "sha256-A6UPWZtdm3/P62JmEvzIxHC8zdPpHdLnbdD/xXMMo+I=";
|
||||
};
|
||||
|
||||
signatures = fetchurl {
|
||||
url = "https://bitcoinknots.org/files/${majorVersion}.x/${finalAttrs.version}/SHA256SUMS.asc";
|
||||
hash = "sha256-fSjYdscQ4viuXutP43prWjrNT7cMaJ9J8SsUykNjJtw";
|
||||
hash = "sha256-tEw/GnnwDf1G16fx6NzXPCvAnOzWY16iW93CowoFfA8=";
|
||||
};
|
||||
|
||||
verifyBuilderKeys =
|
||||
|
||||
@@ -27,10 +27,10 @@
|
||||
"dataspell": {
|
||||
"update-channel": "DataSpell RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/dataspell-{version}.tar.gz",
|
||||
"version": "2025.2.2",
|
||||
"sha256": "32cdc6178f4046b3056c50184fd5157eef0658875a6ff17c64eb451d1fb0f4fb",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.2.2.tar.gz",
|
||||
"build_number": "252.27397.107"
|
||||
"version": "2025.2.3",
|
||||
"sha256": "1e4bc499da1ce8c63e8a4526159c20ef8a797315dc6d3ab4c8eb109f323faba6",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.2.3.tar.gz",
|
||||
"build_number": "252.27397.129"
|
||||
},
|
||||
"gateway": {
|
||||
"update-channel": "Gateway RELEASE",
|
||||
@@ -100,10 +100,10 @@
|
||||
"rider": {
|
||||
"update-channel": "Rider RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}.tar.gz",
|
||||
"version": "2025.2.4",
|
||||
"sha256": "cd428f7d6db5055cd2594c3d1ef91241843d263cb6301369d3121a847ffb6589",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.4.tar.gz",
|
||||
"build_number": "252.27397.121"
|
||||
"version": "2025.3",
|
||||
"sha256": "bf7be76634ec70dc33008505a08dcc024d4d7ec2bf0e4ace8a71f219d2f40706",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.3.tar.gz",
|
||||
"build_number": "253.28294.88"
|
||||
},
|
||||
"ruby-mine": {
|
||||
"update-channel": "RubyMine RELEASE",
|
||||
@@ -116,10 +116,10 @@
|
||||
"rust-rover": {
|
||||
"update-channel": "RustRover RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/rustrover/RustRover-{version}.tar.gz",
|
||||
"version": "2025.2.4",
|
||||
"sha256": "3da078b5e68bac2283c0dd60fe3ff17d6025d92d6237bc6fab74f1f35ff6fbe5",
|
||||
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.4.tar.gz",
|
||||
"build_number": "252.27397.120"
|
||||
"version": "2025.2.4.1",
|
||||
"sha256": "a51a62af4801f7f4caf8586dde0354d06f6bc351660b75feff554e756874cb37",
|
||||
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.4.1.tar.gz",
|
||||
"build_number": "252.27397.133"
|
||||
},
|
||||
"webstorm": {
|
||||
"update-channel": "WebStorm RELEASE",
|
||||
@@ -166,10 +166,10 @@
|
||||
"dataspell": {
|
||||
"update-channel": "DataSpell RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/dataspell-{version}-aarch64.tar.gz",
|
||||
"version": "2025.2.2",
|
||||
"sha256": "6881781e1020272cf3ceb4e50da66e24cbc4f35535e568131353cbfbd9d81968",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.2.2-aarch64.tar.gz",
|
||||
"build_number": "252.27397.107"
|
||||
"version": "2025.2.3",
|
||||
"sha256": "4bebb406617b4179791d4b6560dc50355760773ef37f6ce9f27bd0d1fd638750",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.2.3-aarch64.tar.gz",
|
||||
"build_number": "252.27397.129"
|
||||
},
|
||||
"gateway": {
|
||||
"update-channel": "Gateway RELEASE",
|
||||
@@ -239,10 +239,10 @@
|
||||
"rider": {
|
||||
"update-channel": "Rider RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}-aarch64.tar.gz",
|
||||
"version": "2025.2.4",
|
||||
"sha256": "75c38a2bd94e31200fc4e3a6cfad83b35c65d36c9d61b9a7b208e3ec82f8c81a",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.4-aarch64.tar.gz",
|
||||
"build_number": "252.27397.121"
|
||||
"version": "2025.3",
|
||||
"sha256": "bce1eed1a6fac3cc0850fc2b38ef557e1c51872c4b619a86ce36d002f6cbcbcb",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.3-aarch64.tar.gz",
|
||||
"build_number": "253.28294.88"
|
||||
},
|
||||
"ruby-mine": {
|
||||
"update-channel": "RubyMine RELEASE",
|
||||
@@ -255,10 +255,10 @@
|
||||
"rust-rover": {
|
||||
"update-channel": "RustRover RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/rustrover/RustRover-{version}-aarch64.tar.gz",
|
||||
"version": "2025.2.4",
|
||||
"sha256": "03052ead61bd13eaa616d1126add5b6b6fa9dbc6ef591109b358005d5b630606",
|
||||
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.4-aarch64.tar.gz",
|
||||
"build_number": "252.27397.120"
|
||||
"version": "2025.2.4.1",
|
||||
"sha256": "83d868b92b79907dc42d9e4aacc2a2aae3f9838d392c5a7593487bf4cbb8c641",
|
||||
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.4.1-aarch64.tar.gz",
|
||||
"build_number": "252.27397.133"
|
||||
},
|
||||
"webstorm": {
|
||||
"update-channel": "WebStorm RELEASE",
|
||||
@@ -305,10 +305,10 @@
|
||||
"dataspell": {
|
||||
"update-channel": "DataSpell RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/dataspell-{version}.dmg",
|
||||
"version": "2025.2.2",
|
||||
"sha256": "9573f0450a6eb1877bf53705533c886962ea5985c83c7a2ef642cea796b8eae0",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.2.2.dmg",
|
||||
"build_number": "252.27397.107"
|
||||
"version": "2025.2.3",
|
||||
"sha256": "7d1a60c4367a1e1bd43aec494177c4c30744cb5bf904a3c71d2a3d13439a7b12",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.2.3.dmg",
|
||||
"build_number": "252.27397.129"
|
||||
},
|
||||
"gateway": {
|
||||
"update-channel": "Gateway RELEASE",
|
||||
@@ -378,10 +378,10 @@
|
||||
"rider": {
|
||||
"update-channel": "Rider RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}.dmg",
|
||||
"version": "2025.2.4",
|
||||
"sha256": "f8cabc370393b6be2bd244413fd5692714c02e11cf24eb9c32438367d2895750",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.4.dmg",
|
||||
"build_number": "252.27397.121"
|
||||
"version": "2025.3",
|
||||
"sha256": "add7e6e67b9f2588979782d86a7ff680a263ef41cd13664ed703975a6498976e",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.3.dmg",
|
||||
"build_number": "253.28294.88"
|
||||
},
|
||||
"ruby-mine": {
|
||||
"update-channel": "RubyMine RELEASE",
|
||||
@@ -394,10 +394,10 @@
|
||||
"rust-rover": {
|
||||
"update-channel": "RustRover RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/rustrover/RustRover-{version}.dmg",
|
||||
"version": "2025.2.4",
|
||||
"sha256": "71f0735c546b659d4d1ed9ce58411848146ac0216b4b971583ce682311e9e075",
|
||||
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.4.dmg",
|
||||
"build_number": "252.27397.120"
|
||||
"version": "2025.2.4.1",
|
||||
"sha256": "ec6faaaf119306c8b102b63492a530d8a1cf62f63c6f082543408c5c94e704bf",
|
||||
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.4.1.dmg",
|
||||
"build_number": "252.27397.133"
|
||||
},
|
||||
"webstorm": {
|
||||
"update-channel": "WebStorm RELEASE",
|
||||
@@ -444,10 +444,10 @@
|
||||
"dataspell": {
|
||||
"update-channel": "DataSpell RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/python/dataspell-{version}-aarch64.dmg",
|
||||
"version": "2025.2.2",
|
||||
"sha256": "a2a9cc1c0c515399206568e66add7693718918cef58fc16025effde3d768371b",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.2.2-aarch64.dmg",
|
||||
"build_number": "252.27397.107"
|
||||
"version": "2025.2.3",
|
||||
"sha256": "ad8a2d8403c7d44f66d0905ab6d28a3e888e78b9cc140725e7ca744257c6ce58",
|
||||
"url": "https://download.jetbrains.com/python/dataspell-2025.2.3-aarch64.dmg",
|
||||
"build_number": "252.27397.129"
|
||||
},
|
||||
"gateway": {
|
||||
"update-channel": "Gateway RELEASE",
|
||||
@@ -517,10 +517,10 @@
|
||||
"rider": {
|
||||
"update-channel": "Rider RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}-aarch64.dmg",
|
||||
"version": "2025.2.4",
|
||||
"sha256": "e6bd0a07f5922c05c73d9170bbaa2219534fa8e5350b99f37c6a4bc9eb7c0870",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.4-aarch64.dmg",
|
||||
"build_number": "252.27397.121"
|
||||
"version": "2025.3",
|
||||
"sha256": "033f8dad94b9fec826ba9bd87025dfe668ef6d063a5cb49e7d33f7122ec2885e",
|
||||
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.3-aarch64.dmg",
|
||||
"build_number": "253.28294.88"
|
||||
},
|
||||
"ruby-mine": {
|
||||
"update-channel": "RubyMine RELEASE",
|
||||
@@ -533,10 +533,10 @@
|
||||
"rust-rover": {
|
||||
"update-channel": "RustRover RELEASE",
|
||||
"url-template": "https://download.jetbrains.com/rustrover/RustRover-{version}-aarch64.dmg",
|
||||
"version": "2025.2.4",
|
||||
"sha256": "8bad55d714d388c115c0d35c297eb5bdb140bc024b2bf602efc8d07a3327cad9",
|
||||
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.4-aarch64.dmg",
|
||||
"build_number": "252.27397.120"
|
||||
"version": "2025.2.4.1",
|
||||
"sha256": "0d4fe97c97c4cc66ec2d5a06fccc664557cae181cdf59177c9b24bff29ad5848",
|
||||
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.4.1-aarch64.dmg",
|
||||
"build_number": "252.27397.133"
|
||||
},
|
||||
"webstorm": {
|
||||
"update-channel": "WebStorm RELEASE",
|
||||
|
||||
@@ -45,7 +45,7 @@ let
|
||||
|
||||
products = versions.${system} or (throw "Unsupported system: ${system}");
|
||||
|
||||
dotnet-sdk = dotnetCorePackages.sdk_8_0-source;
|
||||
dotnet-sdk = dotnetCorePackages.sdk_9_0-source;
|
||||
|
||||
package = if stdenv.hostPlatform.isDarwin then ./bin/darwin.nix else ./bin/linux.nix;
|
||||
mkJetBrainsProductCore = callPackage package { inherit vmopts; };
|
||||
@@ -175,7 +175,9 @@ let
|
||||
$out/*/plugins/*/bin/*/linux/*/lib/python3.8/lib-dynload/* |
|
||||
xargs patchelf \
|
||||
--replace-needed libssl.so.10 libssl.so \
|
||||
--replace-needed libssl.so.1.1 libssl.so \
|
||||
--replace-needed libcrypto.so.10 libcrypto.so \
|
||||
--replace-needed libcrypto.so.1.1 libcrypto.so \
|
||||
--replace-needed libcrypt.so.1 libcrypt.so \
|
||||
${lib.optionalString stdenv.hostPlatform.isAarch "--replace-needed libxml2.so.2 libxml2.so"}
|
||||
'';
|
||||
|
||||
@@ -25,9 +25,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/164/835262/IdeaVIM-2.27.2.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/164/835262/IdeaVIM-2.27.2.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/164/835262/IdeaVIM-2.27.2.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/164/835262/IdeaVIM-2.27.2.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/164/835262/IdeaVIM-2.27.2.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/164/835262/IdeaVIM-2.27.2.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/164/835262/IdeaVIM-2.27.2.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/164/835262/IdeaVIM-2.27.2.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/164/835262/IdeaVIM-2.27.2.zip"
|
||||
},
|
||||
"name": "ideavim"
|
||||
},
|
||||
@@ -46,7 +46,7 @@
|
||||
"idea-ultimate"
|
||||
],
|
||||
"builds": {
|
||||
"251.25410.129": "https://plugins.jetbrains.com/files/1347/770332/scala-intellij-bin-2025.1.25.zip",
|
||||
"251.25410.129": null,
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/1347/882283/scala-intellij-bin-2025.2.48.zip"
|
||||
},
|
||||
"name": "scala"
|
||||
@@ -76,9 +76,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/2162/820000/StringManipulation-9.16.0.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/2162/820000/StringManipulation-9.16.0.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/2162/820000/StringManipulation-9.16.0.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/2162/820000/StringManipulation-9.16.0.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/2162/820000/StringManipulation-9.16.0.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/2162/820000/StringManipulation-9.16.0.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/2162/820000/StringManipulation-9.16.0.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/2162/820000/StringManipulation-9.16.0.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/2162/820000/StringManipulation-9.16.0.zip"
|
||||
},
|
||||
"name": "stringmanipulation"
|
||||
},
|
||||
@@ -107,9 +107,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/6884/796395/handlebars-252.23892.201.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/6884/796395/handlebars-252.23892.201.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/6884/796395/handlebars-252.23892.201.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/6884/796395/handlebars-252.23892.201.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/6884/796395/handlebars-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/6884/796395/handlebars-252.23892.201.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/6884/796395/handlebars-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/6884/796395/handlebars-252.23892.201.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/6884/889746/handlebars-253.28294.51.zip"
|
||||
},
|
||||
"name": "handlebars-mustache"
|
||||
},
|
||||
@@ -138,9 +138,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/6954/882364/Kotlin-252.27397.103-IJ.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/6954/882364/Kotlin-252.27397.103-IJ.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/6954/882364/Kotlin-252.27397.103-IJ.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/6954/882364/Kotlin-252.27397.103-IJ.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/6954/882364/Kotlin-252.27397.103-IJ.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/6954/882364/Kotlin-252.27397.103-IJ.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/6954/882364/Kotlin-252.27397.103-IJ.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/6954/882364/Kotlin-252.27397.103-IJ.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/6954/889899/Kotlin-253.28294.51-IJ.zip"
|
||||
},
|
||||
"name": "kotlin"
|
||||
},
|
||||
@@ -163,15 +163,15 @@
|
||||
"251.25410.129": null,
|
||||
"252.26199.587": null,
|
||||
"252.26830.46": "https://plugins.jetbrains.com/files/6981/871946/ini-252.26830.99.zip",
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/6981/882710/ini-252.27397.112.zip",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/6981/882710/ini-252.27397.112.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/6981/882710/ini-252.27397.112.zip",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/6981/882710/ini-252.27397.112.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/6981/882710/ini-252.27397.112.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/6981/882710/ini-252.27397.112.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/6981/882710/ini-252.27397.112.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/6981/882710/ini-252.27397.112.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/6981/882710/ini-252.27397.112.zip"
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/6981/884814/ini-252.27397.129.zip",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/6981/884814/ini-252.27397.129.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/6981/884814/ini-252.27397.129.zip",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/6981/884814/ini-252.27397.129.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/6981/884814/ini-252.27397.129.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/6981/884814/ini-252.27397.129.zip",
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/6981/884814/ini-252.27397.129.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/6981/884814/ini-252.27397.129.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/6981/889727/ini-253.28294.51.zip"
|
||||
},
|
||||
"name": "ini"
|
||||
},
|
||||
@@ -200,9 +200,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/7086/738977/AceJump.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/7086/738977/AceJump.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/7086/738977/AceJump.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/7086/738977/AceJump.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/7086/738977/AceJump.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7086/738977/AceJump.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/7086/738977/AceJump.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7086/738977/AceJump.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/7086/738977/AceJump.zip"
|
||||
},
|
||||
"name": "acejump"
|
||||
},
|
||||
@@ -231,9 +231,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/7125/819837/GrepConsole-13.3.0-IJ2023.3.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/7125/819837/GrepConsole-13.3.0-IJ2023.3.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/7125/819837/GrepConsole-13.3.0-IJ2023.3.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/7125/819837/GrepConsole-13.3.0-IJ2023.3.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/7125/819837/GrepConsole-13.3.0-IJ2023.3.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7125/819837/GrepConsole-13.3.0-IJ2023.3.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/7125/819837/GrepConsole-13.3.0-IJ2023.3.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7125/819837/GrepConsole-13.3.0-IJ2023.3.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/7125/819837/GrepConsole-13.3.0-IJ2023.3.zip"
|
||||
},
|
||||
"name": "grep-console"
|
||||
},
|
||||
@@ -262,9 +262,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/7177/796349/fileWatcher-252.23892.201.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/7177/796349/fileWatcher-252.23892.201.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/7177/796349/fileWatcher-252.23892.201.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/7177/796349/fileWatcher-252.23892.201.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/7177/796349/fileWatcher-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7177/796349/fileWatcher-252.23892.201.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/7177/796349/fileWatcher-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7177/796349/fileWatcher-252.23892.201.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/7177/889979/fileWatcher-253.28294.51.zip"
|
||||
},
|
||||
"name": "file-watchers"
|
||||
},
|
||||
@@ -304,9 +304,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/7212/809131/cucumber-java-252.23892.360.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/7212/809131/cucumber-java-252.23892.360.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/7212/809131/cucumber-java-252.23892.360.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/7212/809131/cucumber-java-252.23892.360.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/7212/809131/cucumber-java-252.23892.360.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7212/809131/cucumber-java-252.23892.360.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/7212/809131/cucumber-java-252.23892.360.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7212/809131/cucumber-java-252.23892.360.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/7212/889840/cucumber-java-253.28294.51.zip"
|
||||
},
|
||||
"name": "cucumber-for-java"
|
||||
},
|
||||
@@ -351,9 +351,9 @@
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/7322/882365/python-ce-252.27397.103.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/7322/882365/python-ce-252.27397.103.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/7322/882365/python-ce-252.27397.103.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/7322/882365/python-ce-252.27397.103.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/7322/882365/python-ce-252.27397.103.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7322/882365/python-ce-252.27397.103.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/7322/882365/python-ce-252.27397.103.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7322/882365/python-ce-252.27397.103.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/7322/889972/python-ce-253.28294.51.zip"
|
||||
},
|
||||
"name": "python-community-edition"
|
||||
},
|
||||
@@ -382,9 +382,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/7391/880448/asciidoctor-intellij-plugin-0.44.10.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/7391/880448/asciidoctor-intellij-plugin-0.44.10.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/7391/880448/asciidoctor-intellij-plugin-0.44.10.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/7391/880448/asciidoctor-intellij-plugin-0.44.10.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/7391/880448/asciidoctor-intellij-plugin-0.44.10.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7391/880448/asciidoctor-intellij-plugin-0.44.10.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/7391/880448/asciidoctor-intellij-plugin-0.44.10.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7391/880448/asciidoctor-intellij-plugin-0.44.10.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/7391/880451/asciidoctor-intellij-plugin-0.45.1.zip"
|
||||
},
|
||||
"name": "asciidoc"
|
||||
},
|
||||
@@ -413,9 +413,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/7425/760442/WakaTime.jar",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/7425/760442/WakaTime.jar",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/7425/760442/WakaTime.jar",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/7425/760442/WakaTime.jar",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/7425/760442/WakaTime.jar",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7425/760442/WakaTime.jar"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/7425/760442/WakaTime.jar",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7425/760442/WakaTime.jar",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/7425/760442/WakaTime.jar"
|
||||
},
|
||||
"name": "wakatime"
|
||||
},
|
||||
@@ -435,18 +435,18 @@
|
||||
"webstorm"
|
||||
],
|
||||
"builds": {
|
||||
"251.25410.129": "https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip",
|
||||
"252.26199.587": "https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip",
|
||||
"252.26830.46": "https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip",
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip"
|
||||
"251.25410.129": "https://plugins.jetbrains.com/files/7499/883982/gittoolbox-600.1.13_243-signed.zip",
|
||||
"252.26199.587": "https://plugins.jetbrains.com/files/7499/883982/gittoolbox-600.1.13_243-signed.zip",
|
||||
"252.26830.46": "https://plugins.jetbrains.com/files/7499/883982/gittoolbox-600.1.13_243-signed.zip",
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/7499/883982/gittoolbox-600.1.13_243-signed.zip",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/7499/883982/gittoolbox-600.1.13_243-signed.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/7499/883982/gittoolbox-600.1.13_243-signed.zip",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/7499/883982/gittoolbox-600.1.13_243-signed.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/7499/883982/gittoolbox-600.1.13_243-signed.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/7499/883982/gittoolbox-600.1.13_243-signed.zip",
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/7499/883982/gittoolbox-600.1.13_243-signed.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7499/883982/gittoolbox-600.1.13_243-signed.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/7499/877840/gittoolbox-600.2.0_253-signed.zip"
|
||||
},
|
||||
"name": "gittoolbox"
|
||||
},
|
||||
@@ -469,15 +469,15 @@
|
||||
"251.25410.129": null,
|
||||
"252.26199.587": null,
|
||||
"252.26830.46": "https://plugins.jetbrains.com/files/7724/871939/clouds-docker-impl-252.26830.99.zip",
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/7724/882712/clouds-docker-impl-252.27397.112.zip",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/7724/882712/clouds-docker-impl-252.27397.112.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/7724/882712/clouds-docker-impl-252.27397.112.zip",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/7724/882712/clouds-docker-impl-252.27397.112.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/7724/882712/clouds-docker-impl-252.27397.112.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/7724/882712/clouds-docker-impl-252.27397.112.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/7724/882712/clouds-docker-impl-252.27397.112.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/7724/882712/clouds-docker-impl-252.27397.112.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7724/882712/clouds-docker-impl-252.27397.112.zip"
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/7724/884806/clouds-docker-impl-252.27397.129.zip",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/7724/884806/clouds-docker-impl-252.27397.129.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/7724/884806/clouds-docker-impl-252.27397.129.zip",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/7724/884806/clouds-docker-impl-252.27397.129.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/7724/884806/clouds-docker-impl-252.27397.129.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/7724/884806/clouds-docker-impl-252.27397.129.zip",
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/7724/884806/clouds-docker-impl-252.27397.129.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/7724/884806/clouds-docker-impl-252.27397.129.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/7724/891767/clouds-docker-impl-253.28294.90.zip"
|
||||
},
|
||||
"name": "docker"
|
||||
},
|
||||
@@ -506,9 +506,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/8097/827445/graphql-252.25557.23.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/8097/827445/graphql-252.25557.23.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/8097/827445/graphql-252.25557.23.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/8097/827445/graphql-252.25557.23.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/8097/827445/graphql-252.25557.23.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/8097/827445/graphql-252.25557.23.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/8097/827445/graphql-252.25557.23.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/8097/827445/graphql-252.25557.23.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/8097/889919/graphql-253.28294.51.zip"
|
||||
},
|
||||
"name": "graphql"
|
||||
},
|
||||
@@ -536,8 +536,8 @@
|
||||
"252.27397.109": null,
|
||||
"252.27397.112": null,
|
||||
"252.27397.114": null,
|
||||
"252.27397.121": null,
|
||||
"252.27397.92": null
|
||||
"252.27397.92": null,
|
||||
"253.28294.88": null
|
||||
},
|
||||
"name": "-deprecated-rust"
|
||||
},
|
||||
@@ -565,8 +565,8 @@
|
||||
"252.27397.109": null,
|
||||
"252.27397.112": null,
|
||||
"252.27397.114": null,
|
||||
"252.27397.121": null,
|
||||
"252.27397.92": null
|
||||
"252.27397.92": null,
|
||||
"253.28294.88": null
|
||||
},
|
||||
"name": "-deprecated-rust-beta"
|
||||
},
|
||||
@@ -595,9 +595,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/8195/882551/toml-252.27397.109.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/8195/882551/toml-252.27397.109.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/8195/882551/toml-252.27397.109.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/8195/882551/toml-252.27397.109.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/8195/882551/toml-252.27397.109.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/8195/882551/toml-252.27397.109.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/8195/882551/toml-252.27397.109.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/8195/882551/toml-252.27397.109.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/8195/891234/toml-253.28294.86.zip"
|
||||
},
|
||||
"name": "toml"
|
||||
},
|
||||
@@ -637,9 +637,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/8554/871926/featuresTrainer-252.26830.95.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/8554/871926/featuresTrainer-252.26830.95.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/8554/871926/featuresTrainer-252.26830.95.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/8554/871926/featuresTrainer-252.26830.95.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/8554/871926/featuresTrainer-252.26830.95.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/8554/871926/featuresTrainer-252.26830.95.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/8554/871926/featuresTrainer-252.26830.95.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/8554/871926/featuresTrainer-252.26830.95.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/8554/891759/featuresTrainer-253.28294.90.zip"
|
||||
},
|
||||
"name": "ide-features-trainer"
|
||||
},
|
||||
@@ -668,9 +668,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/8607/786671/NixIDEA-0.4.0.18.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/8607/786671/NixIDEA-0.4.0.18.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/8607/786671/NixIDEA-0.4.0.18.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/8607/786671/NixIDEA-0.4.0.18.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/8607/786671/NixIDEA-0.4.0.18.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/8607/786671/NixIDEA-0.4.0.18.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/8607/786671/NixIDEA-0.4.0.18.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/8607/786671/NixIDEA-0.4.0.18.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/8607/786671/NixIDEA-0.4.0.18.zip"
|
||||
},
|
||||
"name": "nixidea"
|
||||
},
|
||||
@@ -699,9 +699,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/9164/827451/gherkin-252.25557.23.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/9164/827451/gherkin-252.25557.23.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/9164/827451/gherkin-252.25557.23.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/9164/827451/gherkin-252.25557.23.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/9164/827451/gherkin-252.25557.23.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/9164/827451/gherkin-252.25557.23.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/9164/827451/gherkin-252.25557.23.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/9164/827451/gherkin-252.25557.23.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/9164/889873/gherkin-253.28294.51.zip"
|
||||
},
|
||||
"name": "gherkin"
|
||||
},
|
||||
@@ -730,9 +730,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/9525/796325/dotenv-252.23892.201.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/9525/796325/dotenv-252.23892.201.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/9525/796325/dotenv-252.23892.201.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/9525/796325/dotenv-252.23892.201.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/9525/796325/dotenv-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/9525/796325/dotenv-252.23892.201.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/9525/796325/dotenv-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/9525/796325/dotenv-252.23892.201.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/9525/889789/dotenv-253.28294.51.zip"
|
||||
},
|
||||
"name": "-env-files"
|
||||
},
|
||||
@@ -772,9 +772,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/9707/767822/ANSI_Highlighter_Premium-25.2.1.jar",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/9707/767822/ANSI_Highlighter_Premium-25.2.1.jar",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/9707/767822/ANSI_Highlighter_Premium-25.2.1.jar",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/9707/767822/ANSI_Highlighter_Premium-25.2.1.jar",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/9707/767822/ANSI_Highlighter_Premium-25.2.1.jar",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/9707/767822/ANSI_Highlighter_Premium-25.2.1.jar"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/9707/767822/ANSI_Highlighter_Premium-25.2.1.jar",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/9707/767822/ANSI_Highlighter_Premium-25.2.1.jar",
|
||||
"253.28294.88": null
|
||||
},
|
||||
"name": "ansi-highlighter-premium"
|
||||
},
|
||||
@@ -803,9 +803,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/9792/633158/Key_Promoter_X-2024.2.2.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/9792/633158/Key_Promoter_X-2024.2.2.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/9792/633158/Key_Promoter_X-2024.2.2.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/9792/633158/Key_Promoter_X-2024.2.2.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/9792/633158/Key_Promoter_X-2024.2.2.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/9792/633158/Key_Promoter_X-2024.2.2.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/9792/633158/Key_Promoter_X-2024.2.2.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/9792/633158/Key_Promoter_X-2024.2.2.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/9792/633158/Key_Promoter_X-2024.2.2.zip"
|
||||
},
|
||||
"name": "key-promoter-x"
|
||||
},
|
||||
@@ -834,9 +834,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/9836/840770/intellij-randomness-3.4.2.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/9836/840770/intellij-randomness-3.4.2.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/9836/840770/intellij-randomness-3.4.2.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/9836/840770/intellij-randomness-3.4.2.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/9836/840770/intellij-randomness-3.4.2.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/9836/840770/intellij-randomness-3.4.2.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/9836/840770/intellij-randomness-3.4.2.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/9836/840770/intellij-randomness-3.4.2.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/9836/840770/intellij-randomness-3.4.2.zip"
|
||||
},
|
||||
"name": "randomness"
|
||||
},
|
||||
@@ -865,9 +865,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/10037/851933/intellij-csv-validator-4.1.0.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/10037/851933/intellij-csv-validator-4.1.0.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/10037/851933/intellij-csv-validator-4.1.0.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/10037/851933/intellij-csv-validator-4.1.0.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/10037/851933/intellij-csv-validator-4.1.0.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/10037/851933/intellij-csv-validator-4.1.0.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/10037/851933/intellij-csv-validator-4.1.0.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/10037/851933/intellij-csv-validator-4.1.0.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/10037/851933/intellij-csv-validator-4.1.0.zip"
|
||||
},
|
||||
"name": "csv-editor"
|
||||
},
|
||||
@@ -887,18 +887,18 @@
|
||||
"webstorm"
|
||||
],
|
||||
"builds": {
|
||||
"251.25410.129": "https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip",
|
||||
"252.26199.587": "https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip",
|
||||
"252.26830.46": "https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip",
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip"
|
||||
"251.25410.129": "https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip",
|
||||
"252.26199.587": "https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip",
|
||||
"252.26830.46": "https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip",
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip",
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip"
|
||||
},
|
||||
"name": "rainbow-brackets"
|
||||
},
|
||||
@@ -927,9 +927,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/10312/581013/dotplugin-1.5.4.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/10312/581013/dotplugin-1.5.4.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/10312/581013/dotplugin-1.5.4.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/10312/581013/dotplugin-1.5.4.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/10312/581013/dotplugin-1.5.4.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/10312/581013/dotplugin-1.5.4.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/10312/581013/dotplugin-1.5.4.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/10312/581013/dotplugin-1.5.4.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/10312/581013/dotplugin-1.5.4.zip"
|
||||
},
|
||||
"name": "dot-language"
|
||||
},
|
||||
@@ -958,9 +958,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/10481/671222/intellij-hocon-2025.1.0.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/10481/671222/intellij-hocon-2025.1.0.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/10481/671222/intellij-hocon-2025.1.0.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/10481/671222/intellij-hocon-2025.1.0.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/10481/671222/intellij-hocon-2025.1.0.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/10481/671222/intellij-hocon-2025.1.0.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/10481/671222/intellij-hocon-2025.1.0.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/10481/671222/intellij-hocon-2025.1.0.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/10481/671222/intellij-hocon-2025.1.0.zip"
|
||||
},
|
||||
"name": "hocon"
|
||||
},
|
||||
@@ -987,9 +987,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/10581/796391/go-template-252.23892.201.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/10581/796391/go-template-252.23892.201.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/10581/796391/go-template-252.23892.201.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/10581/796391/go-template-252.23892.201.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/10581/796391/go-template-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/10581/796391/go-template-252.23892.201.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/10581/796391/go-template-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/10581/796391/go-template-252.23892.201.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/10581/889752/go-template-253.28294.51.zip"
|
||||
},
|
||||
"name": "go-template"
|
||||
},
|
||||
@@ -1018,9 +1018,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/11058/878842/Extra_Icons-2025.1.16.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/11058/878842/Extra_Icons-2025.1.16.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/11058/878842/Extra_Icons-2025.1.16.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/11058/878842/Extra_Icons-2025.1.16.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/11058/878842/Extra_Icons-2025.1.16.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/11058/878842/Extra_Icons-2025.1.16.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/11058/878842/Extra_Icons-2025.1.16.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/11058/878842/Extra_Icons-2025.1.16.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/11058/878842/Extra_Icons-2025.1.16.zip"
|
||||
},
|
||||
"name": "extra-icons"
|
||||
},
|
||||
@@ -1049,9 +1049,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/11349/879071/aws-toolkit-jetbrains-standalone-3.97.252.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/11349/879071/aws-toolkit-jetbrains-standalone-3.97.252.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/11349/879071/aws-toolkit-jetbrains-standalone-3.97.252.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/11349/879071/aws-toolkit-jetbrains-standalone-3.97.252.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/11349/879071/aws-toolkit-jetbrains-standalone-3.97.252.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/11349/879071/aws-toolkit-jetbrains-standalone-3.97.252.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/11349/879071/aws-toolkit-jetbrains-standalone-3.97.252.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/11349/879071/aws-toolkit-jetbrains-standalone-3.97.252.zip",
|
||||
"253.28294.88": null
|
||||
},
|
||||
"name": "aws-toolkit"
|
||||
},
|
||||
@@ -1060,7 +1060,7 @@
|
||||
"rider"
|
||||
],
|
||||
"builds": {
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/12024/834783/ReSharperPlugin.CognitiveComplexity-2025.2.0.zip"
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/12024/834783/ReSharperPlugin.CognitiveComplexity-2025.2.0.zip"
|
||||
},
|
||||
"name": "cognitivecomplexity"
|
||||
},
|
||||
@@ -1089,9 +1089,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/12062/796429/keymap-vscode-252.23892.201.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/12062/796429/keymap-vscode-252.23892.201.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/12062/796429/keymap-vscode-252.23892.201.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/12062/796429/keymap-vscode-252.23892.201.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/12062/796429/keymap-vscode-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/12062/796429/keymap-vscode-252.23892.201.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/12062/796429/keymap-vscode-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/12062/796429/keymap-vscode-252.23892.201.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/12062/889778/keymap-vscode-253.28294.51.zip"
|
||||
},
|
||||
"name": "vscode-keymap"
|
||||
},
|
||||
@@ -1120,9 +1120,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/12559/796343/keymap-eclipse-252.23892.201.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/12559/796343/keymap-eclipse-252.23892.201.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/12559/796343/keymap-eclipse-252.23892.201.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/12559/796343/keymap-eclipse-252.23892.201.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/12559/796343/keymap-eclipse-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/12559/796343/keymap-eclipse-252.23892.201.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/12559/796343/keymap-eclipse-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/12559/796343/keymap-eclipse-252.23892.201.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/12559/891762/keymap-eclipse-253.28294.90.zip"
|
||||
},
|
||||
"name": "eclipse-keymap"
|
||||
},
|
||||
@@ -1151,9 +1151,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/12896/173977/RainbowCSV.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/12896/173977/RainbowCSV.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/12896/173977/RainbowCSV.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/12896/173977/RainbowCSV.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/12896/173977/RainbowCSV.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/12896/173977/RainbowCSV.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/12896/173977/RainbowCSV.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/12896/173977/RainbowCSV.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/12896/173977/RainbowCSV.zip"
|
||||
},
|
||||
"name": "rainbow-csv"
|
||||
},
|
||||
@@ -1182,9 +1182,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/13017/796396/keymap-visualStudio-252.23892.201.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/13017/796396/keymap-visualStudio-252.23892.201.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/13017/796396/keymap-visualStudio-252.23892.201.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/13017/796396/keymap-visualStudio-252.23892.201.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/13017/796396/keymap-visualStudio-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/13017/796396/keymap-visualStudio-252.23892.201.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/13017/796396/keymap-visualStudio-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/13017/796396/keymap-visualStudio-252.23892.201.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/13017/891738/keymap-visualStudio-253.28294.90.zip"
|
||||
},
|
||||
"name": "visual-studio-keymap"
|
||||
},
|
||||
@@ -1213,9 +1213,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/13308/370912/Indent_Rainbow-2.2.0-signed.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/13308/370912/Indent_Rainbow-2.2.0-signed.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/13308/370912/Indent_Rainbow-2.2.0-signed.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/13308/370912/Indent_Rainbow-2.2.0-signed.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/13308/370912/Indent_Rainbow-2.2.0-signed.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/13308/370912/Indent_Rainbow-2.2.0-signed.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/13308/370912/Indent_Rainbow-2.2.0-signed.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/13308/370912/Indent_Rainbow-2.2.0-signed.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/13308/370912/Indent_Rainbow-2.2.0-signed.zip"
|
||||
},
|
||||
"name": "indent-rainbow"
|
||||
},
|
||||
@@ -1244,9 +1244,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/14004/796340/protoeditor-252.23892.201.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/14004/796340/protoeditor-252.23892.201.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/14004/796340/protoeditor-252.23892.201.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/14004/796340/protoeditor-252.23892.201.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/14004/796340/protoeditor-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/14004/796340/protoeditor-252.23892.201.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/14004/796340/protoeditor-252.23892.201.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/14004/796340/protoeditor-252.23892.201.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/14004/891226/protoeditor-253.28294.86.zip"
|
||||
},
|
||||
"name": "protocol-buffers"
|
||||
},
|
||||
@@ -1275,9 +1275,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar"
|
||||
},
|
||||
"name": "darcula-pitch-black"
|
||||
},
|
||||
@@ -1306,9 +1306,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/14708/475401/MarioProgressBar-1.9.jar",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/14708/475401/MarioProgressBar-1.9.jar",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/14708/475401/MarioProgressBar-1.9.jar",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/14708/475401/MarioProgressBar-1.9.jar",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/14708/475401/MarioProgressBar-1.9.jar",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/14708/475401/MarioProgressBar-1.9.jar"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/14708/475401/MarioProgressBar-1.9.jar",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/14708/475401/MarioProgressBar-1.9.jar",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/14708/475401/MarioProgressBar-1.9.jar"
|
||||
},
|
||||
"name": "mario-progress-bar"
|
||||
},
|
||||
@@ -1337,9 +1337,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/15976/851109/IDEA_Which-Key-0.11.2.jar",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/15976/851109/IDEA_Which-Key-0.11.2.jar",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/15976/851109/IDEA_Which-Key-0.11.2.jar",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/15976/851109/IDEA_Which-Key-0.11.2.jar",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/15976/851109/IDEA_Which-Key-0.11.2.jar",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/15976/851109/IDEA_Which-Key-0.11.2.jar"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/15976/851109/IDEA_Which-Key-0.11.2.jar",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/15976/851109/IDEA_Which-Key-0.11.2.jar",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/15976/851109/IDEA_Which-Key-0.11.2.jar"
|
||||
},
|
||||
"name": "which-key"
|
||||
},
|
||||
@@ -1368,9 +1368,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/16604/878839/Extra_ToolWindow_Colorful_Icons_Subscription-2025.1.15.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/16604/878839/Extra_ToolWindow_Colorful_Icons_Subscription-2025.1.15.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/16604/878839/Extra_ToolWindow_Colorful_Icons_Subscription-2025.1.15.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/16604/878839/Extra_ToolWindow_Colorful_Icons_Subscription-2025.1.15.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/16604/878839/Extra_ToolWindow_Colorful_Icons_Subscription-2025.1.15.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/16604/878839/Extra_ToolWindow_Colorful_Icons_Subscription-2025.1.15.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/16604/878839/Extra_ToolWindow_Colorful_Icons_Subscription-2025.1.15.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/16604/878839/Extra_ToolWindow_Colorful_Icons_Subscription-2025.1.15.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/16604/878839/Extra_ToolWindow_Colorful_Icons_Subscription-2025.1.15.zip"
|
||||
},
|
||||
"name": "extra-toolwindow-colorful-icons"
|
||||
},
|
||||
@@ -1399,11 +1399,11 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/17718/882517/github-copilot-intellij-1.5.59-243.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/17718/882517/github-copilot-intellij-1.5.59-243.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/17718/882517/github-copilot-intellij-1.5.59-243.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/17718/882517/github-copilot-intellij-1.5.59-243.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/17718/882517/github-copilot-intellij-1.5.59-243.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/17718/882517/github-copilot-intellij-1.5.59-243.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/17718/882517/github-copilot-intellij-1.5.59-243.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/17718/882517/github-copilot-intellij-1.5.59-243.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/17718/882517/github-copilot-intellij-1.5.59-243.zip"
|
||||
},
|
||||
"name": "github-copilot"
|
||||
"name": "github-copilot--your-ai-pair-programmer"
|
||||
},
|
||||
"18444": {
|
||||
"compatible": [
|
||||
@@ -1430,9 +1430,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip"
|
||||
},
|
||||
"name": "netbeans-6-5-keymap"
|
||||
},
|
||||
@@ -1461,9 +1461,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/18682/864736/Catppuccin_Theme-3.5.2.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/18682/864736/Catppuccin_Theme-3.5.2.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/18682/864736/Catppuccin_Theme-3.5.2.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/18682/864736/Catppuccin_Theme-3.5.2.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/18682/864736/Catppuccin_Theme-3.5.2.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/18682/864736/Catppuccin_Theme-3.5.2.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/18682/864736/Catppuccin_Theme-3.5.2.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/18682/864736/Catppuccin_Theme-3.5.2.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/18682/864736/Catppuccin_Theme-3.5.2.zip"
|
||||
},
|
||||
"name": "catppuccin-theme"
|
||||
},
|
||||
@@ -1483,18 +1483,18 @@
|
||||
"webstorm"
|
||||
],
|
||||
"builds": {
|
||||
"251.25410.129": "https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip",
|
||||
"252.26199.587": "https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip",
|
||||
"252.26830.46": "https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip",
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip"
|
||||
"251.25410.129": "https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip",
|
||||
"252.26199.587": "https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip",
|
||||
"252.26830.46": "https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip",
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip",
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip"
|
||||
},
|
||||
"name": "codeglance-pro"
|
||||
},
|
||||
@@ -1514,18 +1514,18 @@
|
||||
"webstorm"
|
||||
],
|
||||
"builds": {
|
||||
"251.25410.129": "https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar",
|
||||
"252.26199.587": "https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar",
|
||||
"252.26830.46": "https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar",
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar"
|
||||
"251.25410.129": "https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar",
|
||||
"252.26199.587": "https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar",
|
||||
"252.26830.46": "https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar",
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar",
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar"
|
||||
},
|
||||
"name": "gerry-themes"
|
||||
},
|
||||
@@ -1554,9 +1554,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/19275/355572/better_direnv-1.2.2-signed.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/19275/355572/better_direnv-1.2.2-signed.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/19275/355572/better_direnv-1.2.2-signed.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/19275/355572/better_direnv-1.2.2-signed.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/19275/355572/better_direnv-1.2.2-signed.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/19275/355572/better_direnv-1.2.2-signed.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/19275/355572/better_direnv-1.2.2-signed.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/19275/355572/better_direnv-1.2.2-signed.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/19275/355572/better_direnv-1.2.2-signed.zip"
|
||||
},
|
||||
"name": "better-direnv"
|
||||
},
|
||||
@@ -1585,9 +1585,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/20146/811306/Mermaid-0.0.26_IJ.252.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/20146/811306/Mermaid-0.0.26_IJ.252.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/20146/811306/Mermaid-0.0.26_IJ.252.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/20146/811306/Mermaid-0.0.26_IJ.252.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/20146/811306/Mermaid-0.0.26_IJ.252.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/20146/811306/Mermaid-0.0.26_IJ.252.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/20146/811306/Mermaid-0.0.26_IJ.252.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/20146/811306/Mermaid-0.0.26_IJ.252.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/20146/811306/Mermaid-0.0.26_IJ.252.zip"
|
||||
},
|
||||
"name": "mermaid"
|
||||
},
|
||||
@@ -1616,9 +1616,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/21551/323564/ferris-2021.1.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/21551/323564/ferris-2021.1.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/21551/323564/ferris-2021.1.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/21551/323564/ferris-2021.1.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/21551/323564/ferris-2021.1.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/21551/323564/ferris-2021.1.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/21551/323564/ferris-2021.1.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/21551/323564/ferris-2021.1.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/21551/323564/ferris-2021.1.zip"
|
||||
},
|
||||
"name": "ferris"
|
||||
},
|
||||
@@ -1647,9 +1647,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/21667/818221/code-complexity-plugin-1.6.3.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/21667/818221/code-complexity-plugin-1.6.3.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/21667/818221/code-complexity-plugin-1.6.3.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/21667/818221/code-complexity-plugin-1.6.3.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/21667/818221/code-complexity-plugin-1.6.3.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/21667/818221/code-complexity-plugin-1.6.3.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/21667/818221/code-complexity-plugin-1.6.3.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/21667/818221/code-complexity-plugin-1.6.3.zip",
|
||||
"253.28294.88": null
|
||||
},
|
||||
"name": "code-complexity"
|
||||
},
|
||||
@@ -1678,9 +1678,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/21904/744652/intellij-developer-tools-plugin-7.1.0-signed.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/21904/744652/intellij-developer-tools-plugin-7.1.0-signed.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/21904/744652/intellij-developer-tools-plugin-7.1.0-signed.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/21904/744652/intellij-developer-tools-plugin-7.1.0-signed.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/21904/744652/intellij-developer-tools-plugin-7.1.0-signed.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/21904/744652/intellij-developer-tools-plugin-7.1.0-signed.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/21904/744652/intellij-developer-tools-plugin-7.1.0-signed.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/21904/744652/intellij-developer-tools-plugin-7.1.0-signed.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/21904/744652/intellij-developer-tools-plugin-7.1.0-signed.zip"
|
||||
},
|
||||
"name": "developer-tools"
|
||||
},
|
||||
@@ -1701,9 +1701,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/21962/828479/clouds-docker-gateway-252.25557.34.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/21962/828479/clouds-docker-gateway-252.25557.34.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/21962/828479/clouds-docker-gateway-252.25557.34.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/21962/828479/clouds-docker-gateway-252.25557.34.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/21962/828479/clouds-docker-gateway-252.25557.34.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/21962/828479/clouds-docker-gateway-252.25557.34.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/21962/828479/clouds-docker-gateway-252.25557.34.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/21962/828479/clouds-docker-gateway-252.25557.34.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/21962/891736/clouds-docker-gateway-253.28294.90.zip"
|
||||
},
|
||||
"name": "dev-containers"
|
||||
},
|
||||
@@ -1714,9 +1714,9 @@
|
||||
"rust-rover"
|
||||
],
|
||||
"builds": {
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/22407/883703/intellij-rust-252.27397.120.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/22407/883703/intellij-rust-252.27397.120.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/22407/883703/intellij-rust-252.27397.120.zip"
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/22407/887323/intellij-rust-252.27397.133.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/22407/887323/intellij-rust-252.27397.133.zip",
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/22407/887323/intellij-rust-252.27397.133.zip"
|
||||
},
|
||||
"name": "rust"
|
||||
},
|
||||
@@ -1736,18 +1736,18 @@
|
||||
"webstorm"
|
||||
],
|
||||
"builds": {
|
||||
"251.25410.129": "https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip",
|
||||
"252.26199.587": "https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip",
|
||||
"252.26830.46": "https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip",
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip"
|
||||
"251.25410.129": "https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip",
|
||||
"252.26199.587": "https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip",
|
||||
"252.26830.46": "https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip",
|
||||
"252.27397.100": "https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip",
|
||||
"252.27397.103": "https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip",
|
||||
"252.27397.106": "https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip",
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip",
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip"
|
||||
},
|
||||
"name": "continue"
|
||||
},
|
||||
@@ -1776,9 +1776,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/22857/871944/vcs-gitlab-IU-252.26830.99-IU.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/22857/871944/vcs-gitlab-IU-252.26830.99-IU.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/22857/871944/vcs-gitlab-IU-252.26830.99-IU.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/22857/871944/vcs-gitlab-IU-252.26830.99-IU.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/22857/871944/vcs-gitlab-IU-252.26830.99-IU.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/22857/871944/vcs-gitlab-IU-252.26830.99-IU.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/22857/871944/vcs-gitlab-IU-252.26830.99-IU.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/22857/871944/vcs-gitlab-IU-252.26830.99-IU.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/22857/891754/vcs-gitlab-253.28294.90.zip"
|
||||
},
|
||||
"name": "gitlab"
|
||||
},
|
||||
@@ -1807,9 +1807,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/23029/876768/Catppuccin_Icons-1.13.0.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/23029/876768/Catppuccin_Icons-1.13.0.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/23029/876768/Catppuccin_Icons-1.13.0.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/23029/876768/Catppuccin_Icons-1.13.0.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/23029/876768/Catppuccin_Icons-1.13.0.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/23029/876768/Catppuccin_Icons-1.13.0.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/23029/876768/Catppuccin_Icons-1.13.0.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/23029/876768/Catppuccin_Icons-1.13.0.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/23029/876768/Catppuccin_Icons-1.13.0.zip"
|
||||
},
|
||||
"name": "catppuccin-icons"
|
||||
},
|
||||
@@ -1838,9 +1838,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/23043/635877/MermaidChart-1.1.8.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/23043/635877/MermaidChart-1.1.8.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/23043/635877/MermaidChart-1.1.8.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/23043/635877/MermaidChart-1.1.8.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/23043/635877/MermaidChart-1.1.8.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/23043/635877/MermaidChart-1.1.8.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/23043/635877/MermaidChart-1.1.8.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/23043/635877/MermaidChart-1.1.8.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/23043/635877/MermaidChart-1.1.8.zip"
|
||||
},
|
||||
"name": "mermaid-chart"
|
||||
},
|
||||
@@ -1869,9 +1869,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/23806/867921/Oxocarbon-1.4.7.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/23806/867921/Oxocarbon-1.4.7.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/23806/867921/Oxocarbon-1.4.7.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/23806/867921/Oxocarbon-1.4.7.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/23806/867921/Oxocarbon-1.4.7.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/23806/867921/Oxocarbon-1.4.7.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/23806/867921/Oxocarbon-1.4.7.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/23806/867921/Oxocarbon-1.4.7.zip",
|
||||
"253.28294.88": null
|
||||
},
|
||||
"name": "oxocarbon"
|
||||
},
|
||||
@@ -1900,9 +1900,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/23927/878837/Extra_IDE_Tweaks_Subscription-2025.1.14.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/23927/878837/Extra_IDE_Tweaks_Subscription-2025.1.14.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/23927/878837/Extra_IDE_Tweaks_Subscription-2025.1.14.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/23927/878837/Extra_IDE_Tweaks_Subscription-2025.1.14.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/23927/878837/Extra_IDE_Tweaks_Subscription-2025.1.14.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/23927/878837/Extra_IDE_Tweaks_Subscription-2025.1.14.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/23927/878837/Extra_IDE_Tweaks_Subscription-2025.1.14.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/23927/878837/Extra_IDE_Tweaks_Subscription-2025.1.14.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/23927/878837/Extra_IDE_Tweaks_Subscription-2025.1.14.zip"
|
||||
},
|
||||
"name": "extra-ide-tweaks"
|
||||
},
|
||||
@@ -1931,9 +1931,9 @@
|
||||
"252.27397.109": "https://plugins.jetbrains.com/files/24559/878844/Extra_Tools_Pack-2025.1.18.zip",
|
||||
"252.27397.112": "https://plugins.jetbrains.com/files/24559/878844/Extra_Tools_Pack-2025.1.18.zip",
|
||||
"252.27397.114": "https://plugins.jetbrains.com/files/24559/878844/Extra_Tools_Pack-2025.1.18.zip",
|
||||
"252.27397.120": "https://plugins.jetbrains.com/files/24559/878844/Extra_Tools_Pack-2025.1.18.zip",
|
||||
"252.27397.121": "https://plugins.jetbrains.com/files/24559/878844/Extra_Tools_Pack-2025.1.18.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/24559/878844/Extra_Tools_Pack-2025.1.18.zip"
|
||||
"252.27397.133": "https://plugins.jetbrains.com/files/24559/878844/Extra_Tools_Pack-2025.1.18.zip",
|
||||
"252.27397.92": "https://plugins.jetbrains.com/files/24559/878844/Extra_Tools_Pack-2025.1.18.zip",
|
||||
"253.28294.88": "https://plugins.jetbrains.com/files/24559/878844/Extra_Tools_Pack-2025.1.18.zip"
|
||||
},
|
||||
"name": "extra-tools-pack"
|
||||
},
|
||||
@@ -1956,9 +1956,9 @@
|
||||
"252.27397.109": null,
|
||||
"252.27397.112": null,
|
||||
"252.27397.114": null,
|
||||
"252.27397.120": null,
|
||||
"252.27397.121": null,
|
||||
"252.27397.92": null
|
||||
"252.27397.133": null,
|
||||
"252.27397.92": null,
|
||||
"253.28294.88": null
|
||||
},
|
||||
"name": "nix-lsp"
|
||||
},
|
||||
@@ -1985,36 +1985,40 @@
|
||||
"252.27397.109": null,
|
||||
"252.27397.112": null,
|
||||
"252.27397.114": null,
|
||||
"252.27397.120": null,
|
||||
"252.27397.121": null,
|
||||
"252.27397.92": null
|
||||
"252.27397.133": null,
|
||||
"252.27397.92": null,
|
||||
"253.28294.88": null
|
||||
},
|
||||
"name": "markdtask"
|
||||
}
|
||||
},
|
||||
"files": {
|
||||
"https://plugins.jetbrains.com/files/10037/851933/intellij-csv-validator-4.1.0.zip": "sha256-jk5JisClylJCL6PdQIUC5pyKb9ccEYJl7T7AyAkAkEE=",
|
||||
"https://plugins.jetbrains.com/files/10080/867937/intellij-rainbow-brackets-2025.3.5.zip": "sha256-50IFDt9PC6IpjFLL8ggbybhf8dCi4U3ceKDfbDjEK6Q=",
|
||||
"https://plugins.jetbrains.com/files/10080/887330/intellij-rainbow-brackets-2025.3.6.zip": "sha256-MOW8OwMdeBKr9jsc2lWnuiRRkmbg7rSUsKbZMftKzHU=",
|
||||
"https://plugins.jetbrains.com/files/10312/581013/dotplugin-1.5.4.zip": "sha256-25vtwXuBNiYL9E0pKG4dqJDkwX1FckAErdqRPKXybQA=",
|
||||
"https://plugins.jetbrains.com/files/10481/671222/intellij-hocon-2025.1.0.zip": "sha256-GO0bXJsHx9O1A6M9NUCv9m4JwKHs5plwSssgx+InNqE=",
|
||||
"https://plugins.jetbrains.com/files/10581/711019/go-template-251.23774.318.zip": "sha256-zX1nEdq84wwQvGhV664V5bNBPVTI4zWo306JtjXcGkE=",
|
||||
"https://plugins.jetbrains.com/files/10581/796391/go-template-252.23892.201.zip": "sha256-XKv4jEKOk2O++VdHycGoLgICsusULbWRlQ0J5p+KgAE=",
|
||||
"https://plugins.jetbrains.com/files/10581/889752/go-template-253.28294.51.zip": "sha256-SpZAnJBO4GLA8504kdzHIgITAkTlQ9jw/YnAsnQFkrY=",
|
||||
"https://plugins.jetbrains.com/files/11058/878842/Extra_Icons-2025.1.16.zip": "sha256-kc/C/c9zsMVO0ZrPI6XH/P9X4XaoprJxo3v9ZlWVCiw=",
|
||||
"https://plugins.jetbrains.com/files/11349/879071/aws-toolkit-jetbrains-standalone-3.97.252.zip": "sha256-Un5ZwdJNDuR6Gkox9WiY6Ab8IY9YwBiSIogbeaYeciM=",
|
||||
"https://plugins.jetbrains.com/files/11349/879073/aws-toolkit-jetbrains-standalone-3.97.251.zip": "sha256-QV0oxBSRsQVU+kLzRgaOSU0f7NcQPBXWHBiUvcry3KA=",
|
||||
"https://plugins.jetbrains.com/files/12024/834783/ReSharperPlugin.CognitiveComplexity-2025.2.0.zip": "sha256-XDBmYpBpLhuLGTB8aP0csK1NBEncmMUPKWoPJx2AVao=",
|
||||
"https://plugins.jetbrains.com/files/12062/711097/keymap-vscode-251.23774.318.zip": "sha256-obbLL8n6gK8oFw8NnJbdAylPHfTv4GheBDnVFOUpwL0=",
|
||||
"https://plugins.jetbrains.com/files/12062/796429/keymap-vscode-252.23892.201.zip": "sha256-V3Vk6UYLUSiSmypD+g0DCX1sPw3/wZqvLxFhbkTqY34=",
|
||||
"https://plugins.jetbrains.com/files/12062/889778/keymap-vscode-253.28294.51.zip": "sha256-Y3x4zXyZ7iXn26/Rd4AP5DV5hoTxj51mCmZDBhPaACc=",
|
||||
"https://plugins.jetbrains.com/files/12559/711714/keymap-eclipse-251.23774.329.zip": "sha256-HC1s5FqSLVgPNKc5Wiw0RFC6KpozxmjKzbh9rS9nFwc=",
|
||||
"https://plugins.jetbrains.com/files/12559/796343/keymap-eclipse-252.23892.201.zip": "sha256-VotPAC/wcz5QveJMlgzGZktKHRpqW/KalckEMRU66cU=",
|
||||
"https://plugins.jetbrains.com/files/12559/891762/keymap-eclipse-253.28294.90.zip": "sha256-MN+Ln7VS5340A1V5yQCoPNMT84yy/PoOX7C+4NqyC+c=",
|
||||
"https://plugins.jetbrains.com/files/12896/173977/RainbowCSV.zip": "sha256-Q+gqKG/2bHD49Xtn9MNlYJQGtNF/7tIay9F7ndi8uwA=",
|
||||
"https://plugins.jetbrains.com/files/13017/711726/keymap-visualStudio-251.23774.329.zip": "sha256-DKkgt0z/ui0bOLSbnKy51RL7+9HIqeriroi2otZ64mQ=",
|
||||
"https://plugins.jetbrains.com/files/13017/796396/keymap-visualStudio-252.23892.201.zip": "sha256-5qDjLRMNwn+1QVN8cKUYlakQ8aBRiTyGuA7se3l9BI0=",
|
||||
"https://plugins.jetbrains.com/files/13017/891738/keymap-visualStudio-253.28294.90.zip": "sha256-YMMwxwwxrIBMnF0ljd5iHS2AJg7xiTYx4+eAdIJRpJg=",
|
||||
"https://plugins.jetbrains.com/files/13308/370912/Indent_Rainbow-2.2.0-signed.zip": "sha256-eKwDE+PMtYhrGbDDZPS5cimssH+1xV4GF6RXXg/3urU=",
|
||||
"https://plugins.jetbrains.com/files/1347/770332/scala-intellij-bin-2025.1.25.zip": "sha256-h9GNGjqTc+h+x/0TRilKmqGoPsxhPmXIKoGC/s4/PKg=",
|
||||
"https://plugins.jetbrains.com/files/1347/882283/scala-intellij-bin-2025.2.48.zip": "sha256-FUirdeHtISeqLDzBKNEViFg9EMqMGlh2xD9PhIMD9ZA=",
|
||||
"https://plugins.jetbrains.com/files/14004/711000/protoeditor-251.23774.318.zip": "sha256-ZYn365EY8+VP1TKM4wBotMj1hYbSSr4J1K5oIZlE2SE=",
|
||||
"https://plugins.jetbrains.com/files/14004/796340/protoeditor-252.23892.201.zip": "sha256-WK9ukN6g2tCmeljFXwv3F+xFI/VZKlIeFs8DXqPcIKA=",
|
||||
"https://plugins.jetbrains.com/files/14004/891226/protoeditor-253.28294.86.zip": "sha256-dSQwkaDQDyhbBv7wvtDvgb360trisZFQ6mIkDGV1fPU=",
|
||||
"https://plugins.jetbrains.com/files/14059/82616/darcula-pitch-black.jar": "sha256-eXInfAqY3yEZRXCAuv3KGldM1pNKEioNwPB0rIGgJFw=",
|
||||
"https://plugins.jetbrains.com/files/14708/475401/MarioProgressBar-1.9.jar": "sha256-mB09zvUg1hLXl9lgW1NEU+DyVel1utZv6s+mFykckYY=",
|
||||
"https://plugins.jetbrains.com/files/15976/851109/IDEA_Which-Key-0.11.2.jar": "sha256-Qujmu2j8nrgkbsRc+ei/musrNAI1UPC3vhwIjv53zxY=",
|
||||
@@ -2023,8 +2027,8 @@
|
||||
"https://plugins.jetbrains.com/files/17718/882517/github-copilot-intellij-1.5.59-243.zip": "sha256-PArPmySjlt/i/GKwm7qZxzjJh9xN2QAKaWTCFMN+yuE=",
|
||||
"https://plugins.jetbrains.com/files/18444/165585/NetBeans6.5Keymap.zip": "sha256-KrzZTKZMQqoEMw+vDUv2jjs0EX0leaPBkU8H/ecq/oI=",
|
||||
"https://plugins.jetbrains.com/files/18682/864736/Catppuccin_Theme-3.5.2.zip": "sha256-F37RoWSV96ofEw7ckvhSS4nHaXUJOBuWecEhzaH2Zk4=",
|
||||
"https://plugins.jetbrains.com/files/18824/865849/CodeGlancePro-2.0.0-signed.zip": "sha256-v/BwU04VevdH7I40yiU7wOMn6CsFmSc63TKAVAcMiJI=",
|
||||
"https://plugins.jetbrains.com/files/18922/881168/GerryThemes.jar": "sha256-ohVw2m/BeXssfTfsBm28RXrEW0gmqUmI/Q3Ob/SdTC4=",
|
||||
"https://plugins.jetbrains.com/files/18824/887070/CodeGlancePro-2.0.1-signed.zip": "sha256-V92Co+yG64FfOoCZ8EG7MmBbMP80x2EfdJrNcN5VEJM=",
|
||||
"https://plugins.jetbrains.com/files/18922/891154/GerryThemes.jar": "sha256-CZKPa1WrZxEYeU7CipgIpW0F7sTmJKAZ+cJGwJgazqM=",
|
||||
"https://plugins.jetbrains.com/files/19275/355572/better_direnv-1.2.2-signed.zip": "sha256-hoFfIid7lClHDiT+ZH3H+tFSvWYb1tSRZH1iif+kWrM=",
|
||||
"https://plugins.jetbrains.com/files/20146/811306/Mermaid-0.0.26_IJ.252.zip": "sha256-QTh77pyi4lh7V0DGPFx9kERjFCop219d76wTDwD0SYY=",
|
||||
"https://plugins.jetbrains.com/files/21551/323564/ferris-2021.1.zip": "sha256-N66Bh0AwHmg5N9PNguRAGtpJ/dLMWMp3rxjTgz9poFo=",
|
||||
@@ -2032,10 +2036,12 @@
|
||||
"https://plugins.jetbrains.com/files/21667/818221/code-complexity-plugin-1.6.3.zip": "sha256-8agNBVenqaV9DlvRmFP7ul3IZfj9Dij8v/h8QMUb72E=",
|
||||
"https://plugins.jetbrains.com/files/21904/744652/intellij-developer-tools-plugin-7.1.0-signed.zip": "sha256-lOPUSxlbgagD0SuXTw+fEdwTxxfUHP1Kl6L+u/oa4fs=",
|
||||
"https://plugins.jetbrains.com/files/21962/828479/clouds-docker-gateway-252.25557.34.zip": "sha256-uwonawWIgXi9OXZlQaZl/GDt/iHqsyAKV7ifCgcMqWU=",
|
||||
"https://plugins.jetbrains.com/files/22407/883703/intellij-rust-252.27397.120.zip": "sha256-gpfWoNR/RiWe36Og5eL9MROtrqKVlZRHxVqeFCaS7lo=",
|
||||
"https://plugins.jetbrains.com/files/22707/878331/continue-intellij-extension-1.0.48.zip": "sha256-7553kxXry5sEJJn+Za4RsfUJGn/roAap8qDkaHjhfXQ=",
|
||||
"https://plugins.jetbrains.com/files/21962/891736/clouds-docker-gateway-253.28294.90.zip": "sha256-fXR4Dyc/OGFXKyQ058KPW5IbdhqIbG5aIB8USrAOSJ4=",
|
||||
"https://plugins.jetbrains.com/files/22407/887323/intellij-rust-252.27397.133.zip": "sha256-szclZHKYcQl8JzswLxMUvUFqY6VtZNmo+eX10W2NiS0=",
|
||||
"https://plugins.jetbrains.com/files/22707/888295/continue-intellij-extension-1.0.52.zip": "sha256-zI+fXMr19+yjxJZRP0HeGGsVBwm96Zo7+1DyxeRtU/0=",
|
||||
"https://plugins.jetbrains.com/files/22857/856960/vcs-gitlab-IU-252.26199.97-IU.zip": "sha256-dJM8j5aLWD6elv46HtXUhPvYWTdAE77m/jwRqztIwDk=",
|
||||
"https://plugins.jetbrains.com/files/22857/871944/vcs-gitlab-IU-252.26830.99-IU.zip": "sha256-bTqJlTkoOyBm370Ks6kFpvxzRJJ7CSucT298YBQtl/M=",
|
||||
"https://plugins.jetbrains.com/files/22857/891754/vcs-gitlab-253.28294.90.zip": "sha256-U6aCeCUS7aq8NqeE1mRT1svmg4PhFMdHvQik+RauN5M=",
|
||||
"https://plugins.jetbrains.com/files/23029/876768/Catppuccin_Icons-1.13.0.zip": "sha256-fE0M8jYTYVIC0bbBDY9fWB+mgGcVIFkeee0VTAMXt2E=",
|
||||
"https://plugins.jetbrains.com/files/23043/635877/MermaidChart-1.1.8.zip": "sha256-ssaSY1I6FopLBgVKHUyjBrqzxHLSuI/swtDfQWJ7gxU=",
|
||||
"https://plugins.jetbrains.com/files/23806/867921/Oxocarbon-1.4.7.zip": "sha256-952sONSgui6bSVFYfRhx1PbHWHas24y0SdHl5QhNIdQ=",
|
||||
@@ -2045,39 +2051,53 @@
|
||||
"https://plugins.jetbrains.com/files/631/882374/python-252.27397.103.zip": "sha256-v3EO4oMT8CaJJRWikKYKC4TyQ2uyCnP+o5nxLg94+1E=",
|
||||
"https://plugins.jetbrains.com/files/6884/711128/handlebars-251.23774.318.zip": "sha256-34s7pOsqMaGoVYhCuAZtylNwplQOtNQJUppepsl4F4Q=",
|
||||
"https://plugins.jetbrains.com/files/6884/796395/handlebars-252.23892.201.zip": "sha256-iWKLgk+eWhUmv/lH9+B2HI97d++EYvLwGgtRsJf4aSE=",
|
||||
"https://plugins.jetbrains.com/files/6884/889746/handlebars-253.28294.51.zip": "sha256-2g76+qxNiiV5HYwNH59Jn36fzk6XleVoIjvj9jnTr8Q=",
|
||||
"https://plugins.jetbrains.com/files/6954/861041/Kotlin-252.26199.169-IJ.zip": "sha256-Fk/Df5MthwTWnhxv/u8/n2ITMLzZXKogj0tRRyPi5Zw=",
|
||||
"https://plugins.jetbrains.com/files/6954/870901/Kotlin-252.26830.84-IJ.zip": "sha256-C1JXMUNESJ29psA661Z8/R5Jj1155YjVXdgDFcBY01k=",
|
||||
"https://plugins.jetbrains.com/files/6954/882364/Kotlin-252.27397.103-IJ.zip": "sha256-zzSRwttzhbdhyV/De6a1TDSg5746iosG91LBSAeLcUQ=",
|
||||
"https://plugins.jetbrains.com/files/6954/889899/Kotlin-253.28294.51-IJ.zip": "sha256-95kmr+jdrX8ISZrRDXNahdEPVl1Sr4zz8OzZdERCeqw=",
|
||||
"https://plugins.jetbrains.com/files/6981/871946/ini-252.26830.99.zip": "sha256-hETXYiz7bXDOWXjK9tUWST/VzaKdfU4hluuDWF3FTGY=",
|
||||
"https://plugins.jetbrains.com/files/6981/882710/ini-252.27397.112.zip": "sha256-GaYYYsyBjAcWsBY3W+qx1Frx7GGbNdGIHg+gHnPHdJg=",
|
||||
"https://plugins.jetbrains.com/files/6981/884814/ini-252.27397.129.zip": "sha256-MvKnIEcZhJN/MaEa0okxjf41WKVw7lbBuOJI77rLLoY=",
|
||||
"https://plugins.jetbrains.com/files/6981/889727/ini-253.28294.51.zip": "sha256-LcrnMWhI2K8Png1hnPczaYGdjxZGYiylTP4jXiIECTM=",
|
||||
"https://plugins.jetbrains.com/files/7086/738977/AceJump.zip": "sha256-BW47ZEUINVnhV0RZ1np7Dkf3lfyrtKoZ9ej/SVct2Xs=",
|
||||
"https://plugins.jetbrains.com/files/7125/819837/GrepConsole-13.3.0-IJ2023.3.zip": "sha256-KcRoHqvCcC6qRz58DHkQ6AFqnpyqPhETekuMWBQYYw8=",
|
||||
"https://plugins.jetbrains.com/files/7177/711086/fileWatcher-251.23774.318.zip": "sha256-jNHP/vaCaolmvNUQRGmIgSR1ykjDtKqyJ69UIn5cz70=",
|
||||
"https://plugins.jetbrains.com/files/7177/796349/fileWatcher-252.23892.201.zip": "sha256-ac4h2uwF6h2L5Cax40t36wTBNFzQn38EVGEL2gts8jQ=",
|
||||
"https://plugins.jetbrains.com/files/7177/889979/fileWatcher-253.28294.51.zip": "sha256-bC0F5tTAp8idkHruKMNABVPYIftIKIniJvBmmLBN7do=",
|
||||
"https://plugins.jetbrains.com/files/7179/767851/MavenHelper-4.30.0-IJ2022.2.zip": "sha256-Xsw4P/KddgOuwcNBzT3UWkaQBYXLqGop+fQhoL65Dfg=",
|
||||
"https://plugins.jetbrains.com/files/7212/711023/cucumber-java-251.23774.318.zip": "sha256-I7gwjCnW8OXzM5eioM7h6RW9qYaQX0MWJPfHOOL9KJA=",
|
||||
"https://plugins.jetbrains.com/files/7212/809131/cucumber-java-252.23892.360.zip": "sha256-ypJOPmcl4881TpMboomVvmspJ3I1sfm5a26l54cfFpo=",
|
||||
"https://plugins.jetbrains.com/files/7212/889840/cucumber-java-253.28294.51.zip": "sha256-TTVywD9dqJ/WA/OS19ga4+WNHcCZIY+eS+Vr9xegCLI=",
|
||||
"https://plugins.jetbrains.com/files/7219/770179/Symfony_Plugin-2025.1.280.zip": "sha256-SgldikXjVx6hUw3LqcN8/NxLLBfnr/LUc/SrIIACl7k=",
|
||||
"https://plugins.jetbrains.com/files/7320/855846/PHP_Annotations-12.0.1.zip": "sha256-FQmHb4oo9TgXiJ4b7EEEELagOx31C9iQtsTRoqxCnO4=",
|
||||
"https://plugins.jetbrains.com/files/7322/866568/python-ce-252.26830.24.zip": "sha256-7Tkcnl2km29lxQtBIX0ahKXShy16Lk1EBiwmKZBjpIc=",
|
||||
"https://plugins.jetbrains.com/files/7322/882365/python-ce-252.27397.103.zip": "sha256-RjzA95Pc+UWa1XJklCw2qs6cLL0X8rlMedaxYt5L/G8=",
|
||||
"https://plugins.jetbrains.com/files/7322/889972/python-ce-253.28294.51.zip": "sha256-zhBMPM5oxNtZUa9+gfSiba7iw+5mwrID0a539YhDetE=",
|
||||
"https://plugins.jetbrains.com/files/7391/880448/asciidoctor-intellij-plugin-0.44.10.zip": "sha256-k2nL2OupoiqQHkLAauo/bLJ2hQ5HVAXrGEQMkVel0eE=",
|
||||
"https://plugins.jetbrains.com/files/7391/880451/asciidoctor-intellij-plugin-0.45.1.zip": "sha256-wXu+Sebzyjc3ZzTFi2yqAyRP5q9tR/f9m+IYVwp9grM=",
|
||||
"https://plugins.jetbrains.com/files/7425/760442/WakaTime.jar": "sha256-DobKZKokueqq0z75d2Fo3BD8mWX9+LpGdT9C7Eu2fHc=",
|
||||
"https://plugins.jetbrains.com/files/7499/875436/gittoolbox-600.1.12_243-signed.zip": "sha256-o6HEc0RuM/GRZL0ke+Zrr8uSZGMLL0dDlubuwHdnGJc=",
|
||||
"https://plugins.jetbrains.com/files/7499/877840/gittoolbox-600.2.0_253-signed.zip": "sha256-FoZIkhtYqEQWOTBKmp3oy2sOPLmPIHF8QjaYAWW8o38=",
|
||||
"https://plugins.jetbrains.com/files/7499/883982/gittoolbox-600.1.13_243-signed.zip": "sha256-GJfaRzhKVqXK1boiqUi6TDfPIJ8YymG/vqbY3jau5sI=",
|
||||
"https://plugins.jetbrains.com/files/7724/871939/clouds-docker-impl-252.26830.99.zip": "sha256-abY9ZqQ0z80B2l6HNUJxF3ZyLdLjCYo0K6Y5mlDOZvc=",
|
||||
"https://plugins.jetbrains.com/files/7724/882712/clouds-docker-impl-252.27397.112.zip": "sha256-Y8yrKgPQVa/VnJIxoIBYsukBGlSPoX6GWnEdypTOUC0=",
|
||||
"https://plugins.jetbrains.com/files/7724/884806/clouds-docker-impl-252.27397.129.zip": "sha256-Ltu7OsDfQD15FTzLNDvwOgqwhctXmQZ6G6IXX7kBtZo=",
|
||||
"https://plugins.jetbrains.com/files/7724/891767/clouds-docker-impl-253.28294.90.zip": "sha256-o+F9+09g8mCv0mfpdED2A4g8VA4C0qHEyJ6tE+Xf6No=",
|
||||
"https://plugins.jetbrains.com/files/8097/827445/graphql-252.25557.23.zip": "sha256-wN3+7++f6i0MvEmOTiWZgAW1QzM5HiD7jSAMS8jWC5s=",
|
||||
"https://plugins.jetbrains.com/files/8097/889919/graphql-253.28294.51.zip": "sha256-fFNhWfjr8EQR5z056ib1JP0eXxio0ooq/FeiMaQqKgw=",
|
||||
"https://plugins.jetbrains.com/files/8195/871151/toml-252.26830.93.zip": "sha256-trwXodrcUo1SHloOm6hQa3IUBS9F+VxK5jYvOxtSOI8=",
|
||||
"https://plugins.jetbrains.com/files/8195/882551/toml-252.27397.109.zip": "sha256-MVzOzED2tWhoq6p0p2j5f6Gd/TPbIyom4Cu/jdNwekk=",
|
||||
"https://plugins.jetbrains.com/files/8195/891234/toml-253.28294.86.zip": "sha256-CP4BHBg3VWMUBSRRHyYmWLYZBapXzTsX27kWzES2T9M=",
|
||||
"https://plugins.jetbrains.com/files/8327/809293/Minecraft_Development-2025.1-1.8.6.zip": "sha256-mePVZa+63bheH85ylkbX9oOX1Nq/IYLAGHHseOJx520=",
|
||||
"https://plugins.jetbrains.com/files/8327/809294/Minecraft_Development-2025.2-1.8.6.zip": "sha256-NOuzQ+CL+Z8n5gwMBaberLyMvS5KNmXKwZ+j88+SFqU=",
|
||||
"https://plugins.jetbrains.com/files/8554/854483/featuresTrainer-252.26199.84.zip": "sha256-euvA9ZNcFcQ6iZ5AC6tpyeJKTkAGzIq4jJ2sdLF0Fno=",
|
||||
"https://plugins.jetbrains.com/files/8554/871926/featuresTrainer-252.26830.95.zip": "sha256-evHs8vwjnUSjN20ewZaMCpKHQbbjOmN+TspNqOMhihM=",
|
||||
"https://plugins.jetbrains.com/files/8554/891759/featuresTrainer-253.28294.90.zip": "sha256-3BbZcICo42Qti0t1bBsJOgA6PnXo81iG/u5rINMp3WQ=",
|
||||
"https://plugins.jetbrains.com/files/8607/786671/NixIDEA-0.4.0.18.zip": "sha256-JShheBoOBiWM9HubMUJvBn4H3DnWykvqPyrmetaCZiM=",
|
||||
"https://plugins.jetbrains.com/files/9164/710996/gherkin-251.23774.318.zip": "sha256-Boy61dRieXmWrnTMfqqYZbdG/DNQ24KdguKN2fcZ+eg=",
|
||||
"https://plugins.jetbrains.com/files/9164/827451/gherkin-252.25557.23.zip": "sha256-y66kYTYD+R9Sert2JHWGwFFIgc5UJTssZrjgvzOjljk=",
|
||||
"https://plugins.jetbrains.com/files/9164/889873/gherkin-253.28294.51.zip": "sha256-hLFqui1ivtBn35CZ86faqT9supJuItSxISRvy20wd8w=",
|
||||
"https://plugins.jetbrains.com/files/9525/711041/dotenv-251.23774.318.zip": "sha256-0c/2qbuu+M6z0gvpme+Mkv23JlQKNTUU+9GL9mh2IFw=",
|
||||
"https://plugins.jetbrains.com/files/9525/796325/dotenv-252.23892.201.zip": "sha256-N0DNEtF3FDcRirfjfSCCVUbDIA4SB35F/9XY1tPXXmg=",
|
||||
"https://plugins.jetbrains.com/files/9525/889789/dotenv-253.28294.51.zip": "sha256-GaezfHralpd6MIbjP2ztPZi2WNTiL2GGfETh/HFYKgA=",
|
||||
"https://plugins.jetbrains.com/files/9568/882349/go-plugin-252.27397.103.zip": "sha256-bEDB8GfqxmY1Pqco2mYW55QQvleidHYOdjyj6sWEpKE=",
|
||||
"https://plugins.jetbrains.com/files/9707/702581/ANSI_Highlighter_Premium-25.1.5.jar": "sha256-XYCD4kOHDeIKhti0T175xhBHR8uscaFN4c9CNlUaCDs=",
|
||||
"https://plugins.jetbrains.com/files/9707/767822/ANSI_Highlighter_Premium-25.2.1.jar": "sha256-mp1k2BdksxbGH4zUp/7DnjcGi5OXJ7UekCfX6dWZOtU=",
|
||||
|
||||
@@ -78,6 +78,7 @@ mapAliases (
|
||||
feline-nvim = throw "feline.nvim has been removed: upstream deleted repository. Consider using lualine"; # Added 2025-02-09
|
||||
fugitive = vim-fugitive;
|
||||
floating-nvim = throw "floating.nvim has been removed: abandoned by upstream. Use popup-nvim or nui-nvim"; # Added 2024-11-26
|
||||
fruzzy = throw "vimPlugins.fruzzy did not update since 2019-10-28 and uses EOL version of Nim"; # Added 2025-11-12
|
||||
fzfWrapper = fzf-wrapper;
|
||||
ghc-mod-vim = ghcmod-vim;
|
||||
ghcmod = ghcmod-vim;
|
||||
|
||||
@@ -5464,19 +5464,6 @@ final: prev: {
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
fruzzy = buildVimPlugin {
|
||||
pname = "fruzzy";
|
||||
version = "2020-08-31";
|
||||
src = fetchFromGitHub {
|
||||
owner = "raghur";
|
||||
repo = "fruzzy";
|
||||
rev = "4cdfee7b828a5cace22bfd93cf23fee0b2b233c4";
|
||||
sha256 = "1dmxz283ypz1klcmdf4jk699aifr3dywkh9y8v8v8vyflampqwwp";
|
||||
};
|
||||
meta.homepage = "https://github.com/raghur/fruzzy/";
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
fugit2-nvim = buildVimPlugin {
|
||||
pname = "fugit2.nvim";
|
||||
version = "2025-09-02";
|
||||
@@ -5854,6 +5841,19 @@ final: prev: {
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
gitportal-nvim = buildVimPlugin {
|
||||
pname = "gitportal.nvim";
|
||||
version = "2025-11-11";
|
||||
src = fetchFromGitHub {
|
||||
owner = "trevorhauter";
|
||||
repo = "gitportal.nvim";
|
||||
rev = "3abb1b87a48a8c07f042eb8c570dfe325ebf8702";
|
||||
sha256 = "04f8yls7498v8ccs472zl1phr1c5p5nf37r05dpv4kr1wqlkmdq4";
|
||||
};
|
||||
meta.homepage = "https://github.com/trevorhauter/gitportal.nvim/";
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
gitv = buildVimPlugin {
|
||||
pname = "gitv";
|
||||
version = "2019-08-22";
|
||||
|
||||
@@ -7,9 +7,7 @@ final: prev:
|
||||
let
|
||||
nodePackageNames = [
|
||||
"coc-go"
|
||||
"coc-ltex"
|
||||
"coc-tsserver"
|
||||
"coc-ultisnips"
|
||||
];
|
||||
in
|
||||
lib.genAttrs nodePackageNames (
|
||||
|
||||
@@ -8,18 +8,18 @@
|
||||
gitMinimal,
|
||||
}:
|
||||
let
|
||||
version = "1.7.0";
|
||||
version = "1.8.0";
|
||||
src = fetchFromGitHub {
|
||||
owner = "Saghen";
|
||||
repo = "blink.cmp";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-eMUOjG2CtedCGVU1Pdp8PCCgGoFbjeVvK7lMS8E+ogg=";
|
||||
hash = "sha256-JjlcPj7v9J+v1SDBYIub6jFEslLhZGHmsipV1atUAFo=";
|
||||
};
|
||||
blink-fuzzy-lib = rustPlatform.buildRustPackage {
|
||||
inherit version src;
|
||||
pname = "blink-fuzzy-lib";
|
||||
|
||||
cargoHash = "sha256-zWZHT+Y8ENN/nFEtJnkEUHXRuU6FUQ/ITHo+V4zJ6f8=";
|
||||
cargoHash = "sha256-Qdt8O7IGj2HySb1jxsv3m33ZxJg96Ckw26oTEEyQjfs=";
|
||||
|
||||
nativeBuildInputs = [ gitMinimal ];
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user