diff --git a/.github/ISSUE_TEMPLATE/04_build_failure.yml b/.github/ISSUE_TEMPLATE/04_build_failure.yml
index e095322c2e82..fca7254928ad 100644
--- a/.github/ISSUE_TEMPLATE/04_build_failure.yml
+++ b/.github/ISSUE_TEMPLATE/04_build_failure.yml
@@ -56,12 +56,12 @@ body:
description: |
Can [Hydra](https://hydra.nixos.org), Nixpkgs' Continuous Integration system, reproduce this build failure?
Please use the search function in the header bar to locate the last build job for the package in question.
- - If there's a
icon near the package entry, say '**Yes, Hydra can reproduce this build failure.**'
- - If there's a
icon near the package entry, then the build failure occurs with another package, and you need to track the original failing package by going down the chain of 'Cached failures' until you reach the final package in the failing dependency chain. Once you locate the failing package, re-write this report against that package and say '**Yes, Hydra can reproduce this build failure.**'
- - If there's a
icon near the package entry, then it most likely means it's a local issue with your system. (Maybe you ran out of space?)
+ - If there's a
icon near the package entry, say '**Yes, Hydra can reproduce this build failure.**'
+ - If there's a
icon near the package entry, then the build failure occurs with another package, and you need to track the original failing package by going down the chain of 'Cached failures' until you reach the final package in the failing dependency chain. Once you locate the failing package, re-write this report against that package and say '**Yes, Hydra can reproduce this build failure.**'
+ - If there's a
icon near the package entry, then it most likely means it's a local issue with your system. (Maybe you ran out of space?)
You can still open a build failure report, but please say '**No, Hydra cannot reproduce this build failure.**' below.
- - If there's a
icon near the package entry, say '**Hydra is currently rebuilding this package.**'
- - If there's a
icon near the package entry, then the build job was stopped manually. If this occurs, please coordinate with the [Infrastructure Team](https://matrix.to/#/#infra:nixos.org), and say '**The last build job was manually cancelled.**'
+ - If there's a
icon near the package entry, say '**Hydra is currently rebuilding this package.**'
+ - If there's a
icon near the package entry, then the build job was stopped manually. If this occurs, please coordinate with the [Infrastructure Team](https://matrix.to/#/#infra:nixos.org), and say '**The last build job was manually cancelled.**'
- If Hydra isn't supposed to build the package at all, say '**Hydra doesn’t try to build the package.**'
options:
- "Please select the Hydra Status."
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 8f2c6648efe4..6fd8fc786a8d 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -13,7 +13,6 @@ For new packages please briefly describe the package or provide a link to its ho
- Built on platform:
- [ ] x86_64-linux
- [ ] aarch64-linux
- - [ ] x86_64-darwin
- [ ] aarch64-darwin
- Tested, as applicable:
- [ ] [NixOS tests] in [nixos/tests].
diff --git a/.github/actions/checkout/action.yml b/.github/actions/checkout/action.yml
index 5b8d2f2d8c65..83995b1cb31c 100644
--- a/.github/actions/checkout/action.yml
+++ b/.github/actions/checkout/action.yml
@@ -19,6 +19,7 @@ runs:
TARGET_SHA: ${{ inputs.target-as-trusted-at }}
PIN_BUMP_SHA: ${{ inputs.untrusted-pin-bump }}
with:
+ retries: 3
script: |
const { rm, writeFile } = require('node:fs/promises')
const { spawn } = require('node:child_process')
diff --git a/.github/labeler-no-sync.yml b/.github/labeler-no-sync.yml
index 77d09a0ef8c0..88a2b267484a 100644
--- a/.github/labeler-no-sync.yml
+++ b/.github/labeler-no-sync.yml
@@ -22,17 +22,6 @@
- doc/**/*
- nixos/doc/**/*
-"backport release-25.11":
- - all:
- - changed-files:
- - any-glob-to-any-file:
- - .github/actions/**/*
- - .github/workflows/*
- - .github/labeler*.yml
- - ci/**/*.*
- - maintainers/github-teams.json
- - base-branch: ['master']
-
"backport release-26.05":
- all:
- changed-files:
diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml
index a769a95de428..5805401b08c7 100644
--- a/.github/workflows/backport.yml
+++ b/.github/workflows/backport.yml
@@ -49,7 +49,7 @@ jobs:
- name: Create backport PRs
id: backport
- uses: korthout/backport-action@66065406958f46e82238fd59546f5a99e69e22aa # v4.5.2
+ uses: korthout/backport-action@2e830a1d0b8269505846ddd407a70876913ad1f8 # v4.6.0
with:
# Config README: https://github.com/korthout/backport-action#backport-action
add_author_as_reviewer: true
diff --git a/.github/workflows/bot.yml b/.github/workflows/bot.yml
index 17ad49c55151..a333688f0344 100644
--- a/.github/workflows/bot.yml
+++ b/.github/workflows/bot.yml
@@ -41,10 +41,6 @@ jobs:
run:
runs-on: ubuntu-slim
if: github.event_name != 'schedule' || github.repository_owner == 'NixOS'
- env:
- # TODO: Remove after 2026-03-04, when Node 24 becomes the default.
- # https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
- FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
@@ -53,7 +49,8 @@ jobs:
ci/github-script
- name: Install dependencies
- run: npm install @actions/artifact@6.2.1 bottleneck@2.19.5
+ run: npm ci --package-lock-only=false @actions/artifact bottleneck
+ working-directory: ci/github-script
# Use a GitHub App, because it has much higher rate limits: 12,500 instead of 5,000 req / hour.
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
@@ -91,7 +88,7 @@ jobs:
GH_TOKEN: ${{ steps.app-token.outputs.token || github.token }}
run: gh api /rate_limit | jq
- - uses: actions/labeler@f27b608878404679385c85cfa523b85ccb86e213 # v6.1.0
+ - uses: actions/labeler@b8dd2d9be0f68b860e7dae5dae7d772984eacd6d # v6.2.0
name: Labels from touched files
if: |
github.event_name == 'pull_request_target' &&
@@ -101,7 +98,7 @@ jobs:
configuration-path: .github/labeler.yml # default
sync-labels: true
- - uses: actions/labeler@f27b608878404679385c85cfa523b85ccb86e213 # v6.1.0
+ - uses: actions/labeler@b8dd2d9be0f68b860e7dae5dae7d772984eacd6d # v6.2.0
name: Labels from touched files (no sync)
if: |
github.event_name == 'pull_request_target' &&
@@ -111,7 +108,7 @@ jobs:
configuration-path: .github/labeler-no-sync.yml
sync-labels: false
- - uses: actions/labeler@f27b608878404679385c85cfa523b85ccb86e213 # v6.1.0
+ - uses: actions/labeler@b8dd2d9be0f68b860e7dae5dae7d772984eacd6d # v6.2.0
name: Labels from touched files (development branches)
# Development branches like staging-next, haskell-updates and python-updates get special labels.
# This is to avoid the mass of labels there, which is mostly useless - and really annoying for
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index b5a9e5c05687..85d97df66d60 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -34,21 +34,18 @@ jobs:
matrix:
include:
- runner: ubuntu-24.04
- name: x86_64-linux
- systems: x86_64-linux
+ system: x86_64-linux
builds: [shell, manual-nixos, lib-tests, tarball]
desc: shell, docs, lib, tarball
- runner: ubuntu-24.04-arm
- name: aarch64-linux
- systems: aarch64-linux
+ system: aarch64-linux
builds: [shell, manual-nixos, manual-nixpkgs]
desc: shell, docs
- runner: macos-14
- name: darwin
- systems: aarch64-darwin x86_64-darwin
+ system: aarch64-darwin
builds: [shell]
desc: shell
- name: '${{ matrix.name }}: ${{ matrix.desc }}'
+ name: '${{ matrix.system }}: ${{ matrix.desc }}'
runs-on: ${{ matrix.runner }}
timeout-minutes: 60
steps:
@@ -62,7 +59,7 @@ jobs:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
target-as-trusted-at: ${{ inputs.targetSha }}
- - uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
+ - uses: cachix/install-nix-action@630ae543ea3a38a9a4166f03376c02c50f408342 # v31.11.0
with:
# Sandbox is disabled on MacOS by default.
extra_nix_config: sandbox = true
@@ -80,7 +77,9 @@ jobs:
- name: Build shell
if: contains(matrix.builds, 'shell')
- run: echo "${{ matrix.systems }}" | xargs -n1 nix-build-uncached nixpkgs/untrusted/ci --arg nixpkgs ./nixpkgs/untrusted-pinned -A shell --argstr system
+ env:
+ system: ${{ matrix.system }}
+ run: nix-build-uncached nixpkgs/untrusted/ci --arg nixpkgs ./nixpkgs/untrusted-pinned -A shell --argstr system "$system"
- name: Build NixOS manual
if: |
@@ -108,5 +107,5 @@ jobs:
contains(fromJSON(inputs.baseBranch).type, 'primary')
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
- name: ${{ inputs.artifact-prefix }}nixos-manual-${{ matrix.name }}
+ name: ${{ inputs.artifact-prefix }}nixos-manual-${{ matrix.system }}
path: nixos-manual
diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index 4ca2db65c165..0fd3e4acfbc9 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -51,7 +51,8 @@ jobs:
ci/github-script
- name: Install dependencies
- run: npm install bottleneck@2.19.5
+ run: npm ci --package-lock-only=false bottleneck
+ working-directory: trusted/ci/github-script
- uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
if: github.event_name != 'pull_request' && vars.NIXPKGS_COMMIT_CHECK_CLIENT_ID
@@ -92,8 +93,8 @@ jobs:
if: inputs.baseBranch && inputs.headBranch
permissions:
pull-requests: write
- runs-on: ubuntu-slim
- timeout-minutes: 3
+ runs-on: ubuntu-24.04-arm
+ timeout-minutes: 8
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
@@ -147,7 +148,7 @@ jobs:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
target-as-trusted-at: ${{ inputs.targetSha }}
- - uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
+ - uses: cachix/install-nix-action@630ae543ea3a38a9a4166f03376c02c50f408342 # v31.11.0
- uses: cachix/cachix-action@5f2d7c5294214f71b873db4b969586b980625e71 # v17
continue-on-error: true
diff --git a/.github/workflows/eval.yml b/.github/workflows/eval.yml
index dd2ea029dcd6..eee506a87165 100644
--- a/.github/workflows/eval.yml
+++ b/.github/workflows/eval.yml
@@ -15,6 +15,9 @@ on:
targetSha:
required: true
type: string
+ baseBranch:
+ required: true
+ type: string
systems:
required: true
type: string
@@ -136,7 +139,7 @@ jobs:
core.info(`Found pinned.json commit: ${ciPinBumpCommit}`)
- name: Install Nix
- uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
+ uses: cachix/install-nix-action@630ae543ea3a38a9a4166f03376c02c50f408342 # v31.11.0
- name: Load supported versions
id: versions
@@ -184,7 +187,7 @@ jobs:
target-as-trusted-at: ${{ inputs.targetSha }}
- name: Install Nix
- uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
+ uses: cachix/install-nix-action@630ae543ea3a38a9a4166f03376c02c50f408342 # v31.11.0
- uses: cachix/cachix-action@5f2d7c5294214f71b873db4b969586b980625e71 # v17
continue-on-error: true
@@ -274,7 +277,7 @@ jobs:
merge-multiple: true
- name: Install Nix
- uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
+ uses: cachix/install-nix-action@630ae543ea3a38a9a4166f03376c02c50f408342 # v31.11.0
- name: Combine all output paths and eval stats
run: |
@@ -291,6 +294,7 @@ jobs:
- name: Compare against the target branch
env:
TARGET_SHA: ${{ inputs.mergedSha }}
+ BASE_BRANCH: ${{ fromJSON(inputs.baseBranch).branch }}
run: |
git -C nixpkgs/trusted diff --name-only "$TARGET_SHA" \
| jq --raw-input --slurp 'split("\n")[:-1]' > touched-files.json
@@ -299,6 +303,7 @@ jobs:
nix-build nixpkgs/trusted/ci --arg nixpkgs ./nixpkgs/trusted-pinned -A eval.compare \
--arg combinedDir ./combined \
--arg touchedFilesJson ./touched-files.json \
+ --argstr baseBranch "$BASE_BRANCH" \
--out-link comparison
cat comparison/step-summary.md >> "$GITHUB_STEP_SUMMARY"
@@ -481,7 +486,7 @@ jobs:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
- name: Install Nix
- uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
+ uses: cachix/install-nix-action@630ae543ea3a38a9a4166f03376c02c50f408342 # v31.11.0
- name: Ensure flake outputs on all systems still evaluate
run: nix flake check --all-systems --no-build './nixpkgs/untrusted?shallow=1'
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 0e0fcfc30d22..79b7cc295650 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -35,7 +35,7 @@ jobs:
with:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
- - uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
+ - uses: cachix/install-nix-action@630ae543ea3a38a9a4166f03376c02c50f408342 # v31.11.0
# TODO: Figure out how to best enable caching for the treefmt job. Cachix won't work well,
# because the cache would be invalidated on every commit - treefmt checks every file.
@@ -70,7 +70,7 @@ jobs:
with:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
- - uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
+ - uses: cachix/install-nix-action@630ae543ea3a38a9a4166f03376c02c50f408342 # v31.11.0
- uses: cachix/cachix-action@5f2d7c5294214f71b873db4b969586b980625e71 # v17
continue-on-error: true
@@ -100,7 +100,7 @@ jobs:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
target-as-trusted-at: ${{ inputs.targetSha }}
- - uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
+ - uses: cachix/install-nix-action@630ae543ea3a38a9a4166f03376c02c50f408342 # v31.11.0
- uses: cachix/cachix-action@5f2d7c5294214f71b873db4b969586b980625e71 # v17
continue-on-error: true
@@ -131,8 +131,8 @@ jobs:
# Luckily there's no need to lint commit messages in the Merge Queue, because
# changes to the target branch can't change commit messages on the base branch.
if: ${{ github.event.pull_request.number }}
- runs-on: ubuntu-slim
- timeout-minutes: 5
+ runs-on: ubuntu-24.04-arm
+ timeout-minutes: 8
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
diff --git a/.github/workflows/merge-group.yml b/.github/workflows/merge-group.yml
index 6ff67aefae60..196bf3040068 100644
--- a/.github/workflows/merge-group.yml
+++ b/.github/workflows/merge-group.yml
@@ -97,6 +97,7 @@ jobs:
artifact-prefix: ${{ inputs.artifact-prefix }}
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
targetSha: ${{ needs.prepare.outputs.targetSha }}
+ baseBranch: ${{ needs.prepare.outputs.baseBranch }}
systems: ${{ needs.prepare.outputs.systems }}
build:
diff --git a/.github/workflows/periodic-merge-24h.yml b/.github/workflows/periodic-merge-24h.yml
index 3aac3ccf8b73..d14c482df755 100644
--- a/.github/workflows/periodic-merge-24h.yml
+++ b/.github/workflows/periodic-merge-24h.yml
@@ -31,12 +31,6 @@ jobs:
max-parallel: 1
matrix:
pairs:
- - from: release-25.11
- into: staging-next-25.11
- - from: staging-next-25.11
- into: staging-25.11
- - from: release-25.11
- into: staging-nixos-25.11
- from: release-26.05
into: staging-next-26.05
- from: staging-next-26.05
diff --git a/.github/workflows/pull-request-target.yml b/.github/workflows/pull-request-target.yml
index 8edde367c13b..d4fda08d2e01 100644
--- a/.github/workflows/pull-request-target.yml
+++ b/.github/workflows/pull-request-target.yml
@@ -110,6 +110,7 @@ jobs:
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
headSha: ${{ github.event.pull_request.head.sha }}
targetSha: ${{ needs.prepare.outputs.targetSha }}
+ baseBranch: ${{ needs.prepare.outputs.baseBranch }}
systems: ${{ needs.prepare.outputs.systems }}
testVersions: ${{ contains(fromJSON(needs.prepare.outputs.touched), 'pinned') && !contains(fromJSON(needs.prepare.outputs.headBranch).type, 'development') }}
diff --git a/.github/workflows/teams.yml b/.github/workflows/teams.yml
index 09657b8049db..93c6d89e0a5d 100644
--- a/.github/workflows/teams.yml
+++ b/.github/workflows/teams.yml
@@ -38,7 +38,8 @@ jobs:
maintainers/github-teams.json
- name: Install dependencies
- run: npm install bottleneck@2.19.5
+ run: npm ci --package-lock-only=false bottleneck
+ working-directory: ci/github-script
- name: Synchronise teams
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 2aeebf59968e..46a399cb7752 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -64,6 +64,7 @@ jobs:
'ci/github-script/supportedSystems.js',
'ci/pinned.json',
'ci/supportedBranches.js',
+ 'pkgs/top-level/release-supported-systems.json',
].includes(file))) core.setOutput('merge-group', true)
if (files.some(file => [
@@ -88,6 +89,7 @@ jobs:
'ci/github-script/withRateLimit.js',
'ci/pinned.json',
'ci/supportedBranches.js',
+ 'pkgs/top-level/release-supported-systems.json',
].includes(file))) core.setOutput('pr', true)
merge-group:
diff --git a/.gitignore b/.gitignore
index 4327aeb119e5..4792063f47d8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,6 +27,9 @@ tags
.mypy_cache
__pycache__
+/AGENTS.md
+/CLAUDE.md
+
/pkgs/development/libraries/qt-5/*/tmp/
/pkgs/desktops/kde-5/*/tmp/
/pkgs/development/mobile/androidenv/xml/*
diff --git a/ci/OWNERS b/ci/OWNERS
index e08961b38210..2d1a46e2ccff 100644
--- a/ci/OWNERS
+++ b/ci/OWNERS
@@ -25,26 +25,27 @@
/shell.nix @infinisil @NixOS/Security
# Libraries
-/lib @infinisil @hsjobeki
-/lib/generators.nix @infinisil @hsjobeki
-/lib/cli.nix @infinisil @hsjobeki
-/lib/debug.nix @infinisil @hsjobeki
-/lib/asserts.nix @infinisil @hsjobeki
-/lib/path/* @infinisil @hsjobeki
-/lib/fileset @infinisil @hsjobeki
-/maintainers/github-teams.json @infinisil
-/maintainers/computed-team-list.nix @infinisil
+/lib @infinisil @hsjobeki @llakala
+/lib/generators.nix @infinisil @hsjobeki @llakala
+/lib/cli.nix @infinisil @hsjobeki @llakala
+/lib/debug.nix @infinisil @hsjobeki @llakala
+/lib/asserts.nix @infinisil @hsjobeki @llakala
+/lib/path/* @infinisil @hsjobeki @llakala
+/lib/fileset @infinisil @hsjobeki @llakala
+/maintainers/github-teams.json @infinisil @llakala
+/maintainers/computed-team-list.nix @infinisil @llakala
## Standard environment–related libraries
-/lib/customisation.nix @alyssais @NixOS/stdenv
-/lib/derivations.nix @NixOS/stdenv
-/lib/fetchers.nix @alyssais @NixOS/stdenv
-/lib/meta.nix @alyssais @NixOS/stdenv
-/lib/source-types.nix @alyssais @NixOS/stdenv
+/lib/customisation.nix @alyssais @NixOS/stdenv @llakala
+/lib/derivations.nix @NixOS/stdenv @llakala
+/lib/fetchers.nix @alyssais @NixOS/stdenv @llakala
+/lib/meta.nix @alyssais @NixOS/stdenv @llakala
+/lib/meta-types.nix @infinisil @adisbladis @NixOS/stdenv @llakala
+/lib/source-types.nix @alyssais @NixOS/stdenv @llakala
/lib/systems @alyssais @NixOS/stdenv
## Libraries / Module system
-/lib/modules.nix @infinisil @roberth @hsjobeki
-/lib/types.nix @infinisil @roberth @hsjobeki
-/lib/options.nix @infinisil @roberth @hsjobeki
+/lib/modules.nix @infinisil @roberth @hsjobeki @llakala
+/lib/types.nix @infinisil @roberth @hsjobeki @llakala
+/lib/options.nix @infinisil @roberth @hsjobeki @llakala
/lib/tests/modules.sh @infinisil @roberth @hsjobeki
/lib/tests/modules @infinisil @roberth @hsjobeki
@@ -62,20 +63,17 @@
/pkgs/top-level/packages-info.nix @jopejoe1
/pkgs/top-level/release-lib.nix @jopejoe1
/pkgs/top-level/release.nix @jopejoe1
-/pkgs/stdenv @philiptaron @NixOS/stdenv
-/pkgs/stdenv/generic @Ericson2314 @NixOS/stdenv
-/pkgs/stdenv/generic/problems.nix @infinisil
+/pkgs/stdenv @philiptaron @NixOS/stdenv @llakala
+/pkgs/stdenv/generic @Ericson2314 @NixOS/stdenv @llakala
+/pkgs/stdenv/generic/problems.nix @infinisil @llakala
/pkgs/test/problems @infinisil
-/pkgs/stdenv/generic/check-meta.nix @infinisil @Ericson2314 @adisbladis @NixOS/stdenv
-/pkgs/stdenv/generic/meta-types.nix @infinisil @adisbladis @NixOS/stdenv
+/pkgs/stdenv/generic/check-meta.nix @infinisil @Ericson2314 @adisbladis @NixOS/stdenv @llakala
/pkgs/stdenv/cross @Ericson2314 @NixOS/stdenv
/pkgs/build-support @philiptaron
/pkgs/build-support/cc-wrapper @Ericson2314
/pkgs/build-support/bintools-wrapper @Ericson2314
/pkgs/build-support/setup-hooks @Ericson2314
/pkgs/build-support/setup-hooks/arrayUtilities @ConnorBaker
-/pkgs/build-support/setup-hooks/auto-patchelf.sh @layus
-/pkgs/by-name/au/auto-patchelf @layus
## Format generators/serializers
/pkgs/pkgs-lib @Stunkymonkey @h7x4
@@ -84,10 +82,6 @@
# Nixpkgs build-support
/pkgs/build-support/writers @lassulus
-# Nixpkgs make-disk-image
-/doc/build-helpers/images/makediskimage.section.md @raitobezarius
-/nixos/lib/make-disk-image.nix @raitobezarius
-
# Nix, the package manager
# @raitobezarius is not "code owner", but is listed here to be notified of changes
# pertaining to the Nix package manager.
@@ -101,16 +95,16 @@ nixos/modules/installer/tools/nix-fallback-paths.nix @Artturin @Ericson2314 @lo
/maintainers/scripts/doc @jtojnar @ryantm
# Contributor documentation
-/CONTRIBUTING.md @infinisil
-/.github/PULL_REQUEST_TEMPLATE.md @infinisil
-/doc/contributing/ @infinisil
-/doc/contributing/contributing-to-documentation.chapter.md @jtojnar @infinisil
-/lib/README.md @infinisil
-/doc/README.md @infinisil
-/nixos/README.md @infinisil
-/pkgs/README.md @infinisil
-/pkgs/by-name/README.md @infinisil
-/maintainers/README.md @infinisil
+/CONTRIBUTING.md
+/.github/PULL_REQUEST_TEMPLATE.md
+/doc/contributing/
+/doc/contributing/contributing-to-documentation.chapter.md @jtojnar
+/lib/README.md
+/doc/README.md
+/nixos/README.md
+/pkgs/README.md
+/pkgs/by-name/README.md
+/maintainers/README.md
# User-facing development documentation
/doc/development.md @infinisil
@@ -129,10 +123,6 @@ nixos/modules/installer/tools/nix-fallback-paths.nix @Artturin @Ericson2314 @lo
/doc/redirects.json @GetPsyched
/nixos/doc/manual/redirects.json @GetPsyched
-# NixOS integration test driver
-/nixos/lib/test-driver @tfc
-/nixos/lib/testing @tfc
-
# NixOS QEMU virtualisation
/nixos/modules/virtualisation/qemu-vm.nix @raitobezarius
/nixos/modules/services/backup/libvirtd-autosnapshot.nix @6543
@@ -192,10 +182,10 @@ nixos/modules/installer/tools/nix-fallback-paths.nix @Artturin @Ericson2314 @lo
/pkgs/by-name/an/android* @NixOS/android
# Python-related code and docs
-/doc/languages-frameworks/python.section.md @mweinelt @natsukium
-/maintainers/scripts/update-python-libraries @mweinelt @natsukium
-/pkgs/by-name/up/update-python-libraries @mweinelt @natsukium
-/pkgs/development/interpreters/python @mweinelt @natsukium
+/doc/languages-frameworks/python.section.md @mweinelt
+/maintainers/scripts/update-python-libraries @mweinelt
+/pkgs/by-name/up/update-python-libraries @mweinelt
+/pkgs/development/interpreters/python @mweinelt
# CUDA
/pkgs/top-level/cuda-packages.nix @NixOS/cuda-maintainers
@@ -225,10 +215,10 @@ nixos/modules/installer/tools/nix-fallback-paths.nix @Artturin @Ericson2314 @lo
/pkgs/development/r-modules @jbedo
# Rust
-/pkgs/development/compilers/rust @alyssais @Mic92 @winterqt
-/pkgs/build-support/rust @winterqt
+/pkgs/development/compilers/rust @NixOS/rust @alyssais
+/pkgs/build-support/rust @NixOS/rust
/pkgs/build-support/rust/fetch-cargo-vendor* @TomaSajt
-/doc/languages-frameworks/rust.section.md @winterqt
+/doc/languages-frameworks/rust.section.md @NixOS/rust
# Tcl
/pkgs/development/interpreters/tcl @fgaz
@@ -240,14 +230,10 @@ nixos/modules/installer/tools/nix-fallback-paths.nix @Artturin @Ericson2314 @lo
# C compilers
/pkgs/development/compilers/gcc
/pkgs/development/compilers/llvm @NixOS/llvm
-/pkgs/development/compilers/emscripten @raitobezarius
/doc/toolchains/llvm.chapter.md @NixOS/llvm
-/doc/languages-frameworks/emscripten.section.md @raitobezarius
# Audio
-/nixos/modules/services/audio/botamusique.nix @mweinelt
/nixos/modules/services/audio/snapserver.nix @mweinelt
-/nixos/tests/botamusique.nix @mweinelt
/nixos/tests/snapcast.nix @mweinelt
# Browsers
@@ -336,9 +322,9 @@ pkgs/development/python-modules/buildcatrust/ @ajs124 @lukegb @mweinelt
/nixos/tests/knot.nix @mweinelt
# Web servers
-/doc/packages/nginx.section.md @raitobezarius
-/pkgs/servers/http/nginx/ @raitobezarius
-/nixos/modules/services/web-servers/nginx/ @raitobezarius
+/doc/packages/nginx.section.md @leona-ya @Ma27
+/pkgs/servers/http/nginx/ @helsinki-Jo @leona-ya @Ma27
+/nixos/modules/services/web-servers/nginx/ @leona-ya @Ma27
# D
/pkgs/build-support/dlang @jtbx @TomaSajt
@@ -378,7 +364,8 @@ pkgs/development/python-modules/buildcatrust/ @ajs124 @lukegb @mweinelt
/pkgs/development/lua-modules @NixOS/lua
# Neovim
-/pkgs/applications/editors/neovim @NixOS/neovim
+/pkgs/applications/editors/neovim @NixOS/neovim
+/doc/languages-frameworks/neovim.section.md @NixOS/neovim
# VimPlugins
/pkgs/applications/editors/vim/plugins @NixOS/neovim
@@ -519,7 +506,7 @@ pkgs/by-name/oc/octodns/ @anthonyroussel
pkgs/by-name/te/teleport* @arianvp @justinas @sigma @tomberek @techknowlogick @JuliusFreudenberger
# Warp-terminal
-pkgs/by-name/wa/warp-terminal/ @emilytrau @imadnyc @FlameFlag @johnrtitor
+pkgs/by-name/wa/warp-terminal/ @emilytrau @imadnyc @4evy @johnrtitor
# Nim
/doc/languages-frameworks/nim.section.md @NixOS/nim
@@ -533,3 +520,9 @@ pkgs/by-name/wa/warp-terminal/ @emilytrau @imadnyc @FlameFlag @johnrtitor
# Zellij plugins
/pkgs/by-name/ze/zellij/plugins/ @PerchunPak
+
+# Test-driver
+/nixos/lib/test-driver @NixOS/test-driver
+/nixos/lib/testing @NixOS/test-driver
+/nixos/tests/nixos-test-driver @NixOS/test-driver
+/nixos/modules/virtualisation/nspawn-container/run-nspawn @NixOS/test-driver
diff --git a/ci/README.md b/ci/README.md
index be0e8e4c4fca..6fbdca39800c 100644
--- a/ci/README.md
+++ b/ci/README.md
@@ -51,6 +51,16 @@ To ensure security and a focused utility, the bot adheres to specific limitation
- opened by [@r-ryantm](https://nix-community.github.io/nixpkgs-update/r-ryantm/).
- The user attempting to merge is a member of [@NixOS/nixpkgs-maintainers].
- The user attempting to merge is a maintainer of all packages touched by the PR.
+- No [committer][@NixOS/nixpkgs-committers] has an outstanding "changes requested" review.
+ These block both the merge queue and auto-merge, so the bot refuses to merge until the review is addressed or dismissed.
+
+Once these constraints are met, the bot picks a merge strategy based on the `no PR failures` commit status:
+
+- CI passing: the PR is added to the merge queue.
+- CI unfinished (pending or missing status): the bot enables [Auto Merge], which queues the PR once required checks succeed.
+ Note that if CI later fails, nothing happens until it is fixed and passes.
+- CI already failing (`error`/`failure` status): the bot does not enable Auto Merge, because it would never trigger, and fixing CI requires a new push that invalidates the merge command.
+ A fresh `@NixOS/nixpkgs-merge-bot merge` comment is needed once CI is green again.
### Approving merge bot changes
@@ -104,3 +114,4 @@ This script can also be run locally to print basic test cases.
[@NixOS/nixpkgs-ci]: https://github.com/orgs/NixOS/teams/nixpkgs-ci
[@NixOS/nixpkgs-core]: https://github.com/orgs/NixOS/teams/nixpkgs-core
[RFC 172]: https://github.com/NixOS/rfcs/pull/172
+[Auto Merge]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/automatically-merging-a-pull-request
diff --git a/ci/default.nix b/ci/default.nix
index c91c82867e8e..06fa75bbc38f 100644
--- a/ci/default.nix
+++ b/ci/default.nix
@@ -26,11 +26,7 @@ let
fmt =
let
- treefmtNixSrc = fetchTarball {
- inherit (pinned.treefmt-nix) url;
- sha256 = pinned.treefmt-nix.hash;
- };
- treefmtEval = (import treefmtNixSrc).evalModule pkgs ./treefmt.nix;
+ treefmt = pkgs.treefmt.withConfig ./treefmt.nix;
fs = pkgs.lib.fileset;
nixFilesSrc = fs.toSource {
root = ../.;
@@ -38,14 +34,24 @@ let
};
in
{
- shell = treefmtEval.config.build.devShell;
- pkg = treefmtEval.config.build.wrapper;
- check = treefmtEval.config.build.check nixFilesSrc;
+ pkg = treefmt;
+ check = treefmt.check nixFilesSrc;
};
+ # nixos-render-docs and nixos-render-docs-redirects
+ # Should be used from tree to build the matching in-tree documentation
+ docPkgs = pkgs.extend (
+ final: prev: {
+ nixos-render-docs = final.callPackage ../pkgs/by-name/ni/nixos-render-docs/package.nix { };
+ nixos-render-docs-redirects =
+ final.callPackage ../pkgs/by-name/ni/nixos-render-docs-redirects/package.nix
+ { };
+ }
+ );
+
in
rec {
- inherit pkgs fmt;
+ inherit pkgs docPkgs fmt;
codeownersValidator = pkgs.callPackage ./codeowners-validator { };
# FIXME(lf-): it might be useful to test other Nix implementations
@@ -58,13 +64,13 @@ rec {
# CI jobs
lib-tests = import ../lib/tests/release.nix { inherit pkgs; };
manual-nixos = (import ../nixos/release.nix { }).manual.${system} or null;
- manual-nixpkgs = (import ../doc { inherit pkgs; });
+ manual-nixpkgs = (import ../doc { pkgs = docPkgs; });
nixpkgs-vet = pkgs.callPackage ./nixpkgs-vet.nix {
nix = pkgs.nixVersions.latest;
};
parse = pkgs.lib.recurseIntoAttrs {
nix_latest = pkgs.callPackage ./parse.nix { nix = pkgs.nixVersions.latest; };
- nix_2_28 = pkgs.callPackage ./parse.nix { nix = pkgs.nixVersions.nix_2_28; };
+ stable = pkgs.callPackage ./parse.nix { nix = pkgs.nixVersions.stable; };
lix = pkgs.callPackage ./parse.nix { nix = pkgs.lix; };
lix_latest = pkgs.callPackage ./parse.nix { nix = pkgs.lixPackageSets.latest.lix; };
};
diff --git a/ci/eval/attrpaths.nix b/ci/eval/attrpaths.nix
deleted file mode 100644
index ff1bdabbb350..000000000000
--- a/ci/eval/attrpaths.nix
+++ /dev/null
@@ -1,85 +0,0 @@
-# This expression will, as efficiently as possible, dump a
-# *superset* of all attrpaths of derivations which might be
-# part of a release on *any* platform.
-#
-# This expression runs single-threaded under all current Nix
-# implementations, but much faster and with much less memory
-# used than ./outpaths.nix itself.
-#
-# Once you have the list of attrnames you can split it up into
-# $NUM_CORES batches and evaluate the outpaths separately for each
-# batch, in parallel.
-#
-# To dump the attrnames:
-#
-# nix-instantiate --eval --strict --json ci/eval/attrpaths.nix -A names
-#
-{
- lib ? import (path + "/lib"),
- trace ? false,
- path ? ./../..,
- extraNixpkgsConfigJson ? "{}",
-}:
-let
-
- # TODO: Use mapAttrsToListRecursiveCond when this PR lands:
- # https://github.com/NixOS/nixpkgs/pull/395160
- justAttrNames =
- path: value:
- let
- result =
- if path == [ "AAAAAASomeThingsFailToEvaluate" ] || !(lib.isAttrs value) then
- [ ]
- else if lib.isDerivation value then
- [ path ]
- else
- lib.pipe value [
- (lib.mapAttrsToList (
- name: value:
- lib.addErrorContext "while evaluating package set attribute path '${
- lib.showAttrPath (path ++ [ name ])
- }'" (justAttrNames (path ++ [ name ]) value)
- ))
- lib.concatLists
- ];
- in
- lib.traceIf trace "** ${lib.showAttrPath path}" result;
-
- outpaths = import ./outpaths.nix {
- inherit path;
- extraNixpkgsConfig = builtins.fromJSON extraNixpkgsConfigJson;
- attrNamesOnly = true;
- };
-
- paths = [
- # Some of the following are based on variants, which are disabled with `attrNamesOnly = true`.
- # Until these have been removed from release.nix / hydra, we manually add them to the list.
- [
- "pkgsLLVM"
- "stdenv"
- ]
- [
- "pkgsArocc"
- "stdenv"
- ]
- [
- "pkgsZig"
- "stdenv"
- ]
- [
- "pkgsStatic"
- "stdenv"
- ]
- [
- "pkgsMusl"
- "stdenv"
- ]
- ]
- ++ justAttrNames [ ] outpaths;
-
- names = map lib.showAttrPath paths;
-
-in
-{
- inherit paths names;
-}
diff --git a/ci/eval/chunk.nix b/ci/eval/chunk.nix
index e1759c2c6615..9bea26ce3180 100644
--- a/ci/eval/chunk.nix
+++ b/ci/eval/chunk.nix
@@ -2,8 +2,8 @@
{
lib ? import ../../lib,
path ? ../..,
- # The file containing all available attribute paths, which are split into chunks here
- attrpathFile,
+ # The file containing the preEval result
+ preEvalFile,
chunkSize,
myChunk,
includeBroken,
@@ -12,12 +12,13 @@
}:
let
- attrpaths = lib.importJSON attrpathFile;
- myAttrpaths = lib.sublist (chunkSize * myChunk) chunkSize attrpaths;
+ preEvalResult = lib.importJSON preEvalFile;
+ myAttrpaths = lib.sublist (chunkSize * myChunk) chunkSize preEvalResult.paths;
unfiltered = import ./outpaths.nix {
inherit path;
inherit includeBroken systems;
+ inherit (preEvalResult) attrPathsDisallowedForInternalUse;
extraNixpkgsConfig = builtins.fromJSON extraNixpkgsConfigJson;
};
diff --git a/ci/eval/compare/default.nix b/ci/eval/compare/default.nix
index 856969ee8695..183e3bab8d41 100644
--- a/ci/eval/compare/default.nix
+++ b/ci/eval/compare/default.nix
@@ -49,6 +49,7 @@ in
{
combinedDir,
touchedFilesJson,
+ baseBranch,
ownersFile ? ../../OWNERS,
}:
let
@@ -242,7 +243,7 @@ runCommand "compare"
echo
echo "# Performance comparison"
echo
- echo "This compares the performance of this branch against its pull request base branch (e.g., 'master')"
+ echo "This compares the performance of this branch against the \`${baseBranch}\` branch."
echo
} >> $out/step-summary.md
diff --git a/ci/eval/default.nix b/ci/eval/default.nix
index 7c0a2e9f3139..2c3ea0ff0732 100644
--- a/ci/eval/default.nix
+++ b/ci/eval/default.nix
@@ -17,6 +17,7 @@
busybox,
jq,
nix,
+ perf,
}:
{
@@ -38,7 +39,7 @@ let
fileset = unions (
map (lib.path.append ../..) [
".version"
- "ci/eval/attrpaths.nix"
+ "ci/eval/pre-eval.nix"
"ci/eval/chunk.nix"
"ci/eval/outpaths.nix"
"default.nix"
@@ -56,11 +57,11 @@ let
builtins.readFile ../../pkgs/top-level/release-supported-systems.json
);
- attrpathsSuperset =
+ preEval =
{
evalSystem,
}:
- runCommand "attrpaths-superset.json"
+ runCommand "pre-eval"
{
src = nixpkgs;
# Don't depend on -dev outputs to reduce closure size for CI.
@@ -73,15 +74,15 @@ let
export NIX_STATE_DIR=$(mktemp -d)
mkdir $out
export GC_INITIAL_HEAP_SIZE=4g
- command time -f "Attribute eval done [%MKB max resident, %Es elapsed] %C" \
+ command time -f "Pre-eval done [%MKB max resident, %Es elapsed] %C" \
nix-instantiate --eval --strict --json --show-trace \
- "$src/ci/eval/attrpaths.nix" \
- -A paths \
+ "$src/ci/eval/pre-eval.nix" \
+ -A result \
-I "$src" \
--argstr extraNixpkgsConfigJson ${lib.escapeShellArg (builtins.toJSON extraNixpkgsConfig)} \
--option restrict-eval true \
--option allow-import-from-derivation false \
- --option eval-system "${evalSystem}" > $out/paths.json
+ --option eval-system "${evalSystem}" > $out/result.json
'';
singleSystem =
@@ -90,8 +91,10 @@ let
# Note that this is intentionally not called `system`,
# because `--argstr system` would only be passed to the ci/default.nix file!
evalSystem ? builtins.currentSystem,
- # The path to the `paths.json` file from `attrpathsSuperset`
- attrpathFile ? "${attrpathsSuperset { inherit evalSystem; }}/paths.json",
+ # The path to the `result.json` file from `preEval`
+ preEvalFile ? "${preEval { inherit evalSystem; }}/result.json",
+ # Output the number of assembly instructions executed during evaluation
+ countInstructions ? false,
}:
let
singleChunk = writeShellScript "single-chunk" ''
@@ -100,6 +103,7 @@ let
myChunk=$2
system=$3
outputDir=$4
+ preEvalFile=$5
# Default is 5, higher values effectively disable the warning.
# This randomly breaks Eval.
@@ -121,12 +125,12 @@ let
--show-trace \
--arg chunkSize "$chunkSize" \
--arg myChunk "$myChunk" \
- --arg attrpathFile "${attrpathFile}" \
+ --arg preEvalFile "$preEvalFile" \
--arg systems "[ \"$system\" ]" \
--arg includeBroken ${lib.boolToString includeBroken} \
--argstr extraNixpkgsConfigJson ${lib.escapeShellArg (builtins.toJSON extraNixpkgsConfig)} \
-I ${nixpkgs} \
- -I ${attrpathFile} \
+ -I "$preEvalFile" \
> "$outputDir/result/$myChunk" \
2> "$outputDir/stderr/$myChunk"
exitCode=$?
@@ -146,13 +150,16 @@ let
runCommand "nixpkgs-eval-${evalSystem}"
{
# Don't depend on -dev outputs to reduce closure size for CI.
- nativeBuildInputs = map lib.getBin [
- busybox
- jq
- nix
- ];
+ nativeBuildInputs = map lib.getBin (
+ [
+ busybox
+ jq
+ nix
+ ]
+ ++ lib.optionals countInstructions [ perf ]
+ );
env = {
- inherit evalSystem chunkSize;
+ inherit evalSystem chunkSize countInstructions;
};
__structuredAttrs = true;
unsafeDiscardReferences.out = true;
@@ -164,12 +171,6 @@ let
echo "System: $evalSystem"
cores=$NIX_BUILD_CORES
echo "Cores: $cores"
- attrCount=$(jq length "${attrpathFile}")
- echo "Attribute count: $attrCount"
- echo "Chunk size: $chunkSize"
- # Same as `attrCount / chunkSize` but rounded up
- chunkCount=$(( (attrCount - 1) / chunkSize + 1 ))
- echo "Chunk count: $chunkCount"
mkdir -p $out/${evalSystem}
@@ -190,29 +191,78 @@ let
done
) &
- seq_end=$(( chunkCount - 1 ))
+ chunkedEval() {
+ local chunkOutputDir=$1
+ local preEvalFile=$2
- ${lib.optionalString quickTest ''
- seq_end=0
- ''}
+ local attrCount=$(jq '.paths | length' "$preEvalFile")
+ echo "Attribute count: $attrCount"
+ echo "Chunk size: $chunkSize"
+ # Same as `attrCount / chunkSize` but rounded up
+ local chunkCount=$(( (attrCount - 1) / chunkSize + 1 ))
+ echo "Chunk count: $chunkCount"
- chunkOutputDir=$(mktemp -d)
- mkdir "$chunkOutputDir"/{result,stats,timestats,stderr}
+ local seq_end=$(( chunkCount - 1 ))
+ ${lib.optionalString quickTest ''
+ seq_end=0
+ ''}
- seq -w 0 "$seq_end" |
- command time -f "%e" -o "$out/${evalSystem}/total-time" \
- xargs -I{} -P"$cores" \
- ${singleChunk} "$chunkSize" {} "$evalSystem" "$chunkOutputDir"
+ mkdir -p "$chunkOutputDir"/{result,stats,timestats,stderr}
- cp -r "$chunkOutputDir"/stats $out/${evalSystem}/stats-by-chunk
+ runAllChunks() {
+ seq -w 0 "$seq_end" |
+ xargs -I{} -P"$cores" \
+ ${singleChunk} "$chunkSize" {} "$evalSystem" "$chunkOutputDir" "$preEvalFile"
+ }
- if (( chunkSize * chunkCount != attrCount )); then
- # A final incomplete chunk would mess up the stats, don't include it
- rm "$chunkOutputDir"/stats/"$seq_end"
+ if [[ -n "$countInstructions" ]]; then
+ export seq_end cores chunkSize evalSystem chunkOutputDir preEvalFile
+ export -f runAllChunks
+ perf stat \
+ --event instructions:u --field-separator , --output "$chunkOutputDir"/perf-output-file \
+ bash -c runAllChunks
+ cat "$chunkOutputDir"/perf-output-file | tail -n 1 | cut -d, -f1 > "$chunkOutputDir"/instructions
+ rm "$chunkOutputDir"/perf-output-file
+ else
+ runAllChunks
+ fi
+
+ if (( chunkSize * chunkCount != attrCount )); then
+ # A final incomplete chunk would mess up the stats, don't include it
+ rm "$chunkOutputDir"/stats/"$seq_end"
+ fi
+ }
+
+ chunkOutputDirs=$(mktemp -d)
+
+ # Preparation for the second eval
+ disallowedAttributesPreEvalFile=$(mktemp)
+ jq '{
+ paths: (.attrPathsDisallowedForInternalUse | map(.attrPath)),
+ attrPathsDisallowedForInternalUse: []
+ }' ${preEvalFile} > "$disallowedAttributesPreEvalFile"
+
+ startEpoch=$(date +%s)
+
+ # The first eval evaluates only attributes that are not disallowed for internal Nixpkgs use, ensuring that they don't depend on disallowed attributes
+ # Because the first eval doesn't evaluate the disallowed attributes themselves, but we still want to check that they don't fail evaluation, we evaluate them separately in a second eval
+ # The reason we need two evals is because we want disallowed attributes to be able to depend on other disallowed attributes, which inherently needs a separate Nixpkgs instantiation
+ # And while we could interleave that instantiation into a single eval, that would ~double memory usage for all chunks, while doing it separately doesn't
+ echo "Evaluating the internally allowed attributes"
+ chunkedEval "$chunkOutputDirs"/allowed ${preEvalFile}
+ echo "Evaluating the internally disallowed attributes"
+ chunkedEval "$chunkOutputDirs"/disallowed "$disallowedAttributesPreEvalFile"
+
+ echo $(( $(date +%s) - startEpoch )) > "$out/${evalSystem}/total-time"
+
+ # We only use the stats from the allowed attrs eval, because the disallowed attrs are generally not even a full chunk
+ cp -r "$chunkOutputDirs"/allowed/stats $out/${evalSystem}/stats-by-chunk
+ if [[ -f "$chunkOutputDirs"/allowed/instructions ]]; then
+ cp "$chunkOutputDirs"/allowed/instructions $out/${evalSystem}/instructions
fi
- cat "$chunkOutputDir"/result/* | jq -s 'add | map_values(.outputs)' > $out/${evalSystem}/paths.json
- cat "$chunkOutputDir"/result/* | jq -s 'add | map_values(.meta)' > $out/${evalSystem}/meta.json
+ cat "$chunkOutputDirs"/*/result/* | jq -s 'add | map_values(.outputs)' > $out/${evalSystem}/paths.json
+ cat "$chunkOutputDirs"/*/result/* | jq -s 'add | map_values(.meta)' > $out/${evalSystem}/meta.json
'';
diff = callPackage ./diff.nix { };
@@ -249,14 +299,20 @@ let
}) | from_entries
' > $out/maintainers.json
- mkdir -p $out/before/stats
+ mkdir -p $out/before/stats $out/before/instructions
for d in ${diffDir}/before/*; do
cp -r "$d"/stats-by-chunk $out/before/stats/$(basename "$d")
+ if [[ -f "$d"/instructions ]]; then
+ cp "$d"/instructions $out/before/instructions/$(basename "$d")
+ fi
done
- mkdir -p $out/after/stats
+ mkdir -p $out/after/stats $out/after/instructions
for d in ${diffDir}/after/*; do
cp -r "$d"/stats-by-chunk $out/after/stats/$(basename "$d")
+ if [[ -f "$d"/instructions ]]; then
+ cp "$d"/instructions $out/after/instructions/$(basename "$d")
+ fi
done
'';
@@ -266,13 +322,16 @@ let
{
# Whether to evaluate on a specific set of systems, by default all are evaluated
evalSystems ? if quickTest then [ "x86_64-linux" ] else supportedSystems,
+ # Output the number of assembly instructions executed during evaluation on
+ # each system
+ countInstructions ? false,
}:
symlinkJoin {
name = "nixpkgs-eval-baseline";
paths = map (
evalSystem:
singleSystem {
- inherit evalSystem;
+ inherit evalSystem countInstructions;
}
) evalSystems;
};
@@ -288,6 +347,12 @@ let
# | jq --raw-input --slurp 'split("\n")[:-1]' > touched-files.json
# ```
touchedFilesJson ? builtins.toFile "touched-files.json" "[ ]",
+ # The branch the local comparison is made against; matches the `master`
+ # used in the touched-files expression above.
+ baseBranch ? "master",
+ # Output the number of assembly instructions executed during evaluation on
+ # each system
+ countInstructions ? false,
}:
let
diffs = symlinkJoin {
@@ -298,14 +363,14 @@ let
inherit evalSystem;
beforeDir = baseline;
afterDir = singleSystem {
- inherit evalSystem;
+ inherit evalSystem countInstructions;
};
}
) evalSystems;
};
comparisonReport = compare {
combinedDir = combine { diffDir = diffs; };
- inherit touchedFilesJson;
+ inherit touchedFilesJson baseBranch;
};
in
comparisonReport;
@@ -313,7 +378,7 @@ let
in
{
inherit
- attrpathsSuperset
+ preEval
singleSystem
diff
combine
diff --git a/ci/eval/outpaths.nix b/ci/eval/outpaths.nix
index afbce48f3321..512290ce450a 100755
--- a/ci/eval/outpaths.nix
+++ b/ci/eval/outpaths.nix
@@ -6,7 +6,7 @@
includeBroken ? true, # set this to false to exclude meta.broken packages from the output
path ? ./../..,
- # used by ./attrpaths.nix
+ # used by ./pre-eval.nix
attrNamesOnly ? false,
# Set this to `null` to build for builtins.currentSystem only
@@ -14,6 +14,8 @@
builtins.readFile (path + "/pkgs/top-level/release-supported-systems.json")
),
+ attrPathsDisallowedForInternalUse ? [ ],
+
# Customize the config used to evaluate nixpkgs
extraNixpkgsConfig ? { },
}:
@@ -35,6 +37,22 @@ let
allowVariants = !attrNamesOnly;
checkMeta = true;
+ # We don't need to care about problems being caught using the
+ # standard mechanism, because any problems whose kind is not
+ # nixpkgsInternalUseAllowed cause the corresponding attributes to
+ # be disallowed entirely for internal use with
+ # attrPathsDisallowedForInternalUse, see also ./pre-eval.nix
+ problems.matchers = lib.mkForce [
+ # We only need to set the broken handler to error, so that CI
+ # doesn't evaluate those. No reason it couldn't evaluate them
+ # afaik, but this is how it's been before.
+ {
+ kind = "broken";
+ handler = "error";
+ }
+ ];
+ inherit attrPathsDisallowedForInternalUse;
+
# Silence the `x86_64-darwin` deprecation warning.
allowDeprecatedx86_64Darwin = true;
diff --git a/ci/eval/pre-eval.nix b/ci/eval/pre-eval.nix
new file mode 100644
index 000000000000..eff8204a7bd5
--- /dev/null
+++ b/ci/eval/pre-eval.nix
@@ -0,0 +1,128 @@
+# This file does a fast pre-evaluation of Nixpkgs to determine:
+# - paths: A *superset* of all attrpaths of derivations which might be part of a release on *any* platform.
+# - attrPathsDisallowedForInternalUse: Attribute paths whose meta.problems has problems whose kinds should not be used internally in Nixpkgs
+#
+# This expression runs single-threaded under all current Nix
+# implementations, but much faster and with much less memory
+# used than ./outpaths.nix itself.
+#
+# Once you have the list of attrnames you can split it up into
+# $NUM_CORES batches and evaluate the outpaths separately for each
+# batch, in parallel.
+#
+# To dump the result:
+#
+# nix-instantiate --eval --strict --json ci/eval/pre-eval.nix -A result
+#
+{
+ lib ? import (path + "/lib"),
+ trace ? false,
+ path ? ./../..,
+ extraNixpkgsConfigJson ? "{}",
+}:
+let
+
+ # TODO: Use mapAttrsToListRecursiveCond when this PR lands:
+ # https://github.com/NixOS/nixpkgs/pull/395160
+ listAttrs =
+ path: value:
+ let
+ result =
+ if path == [ "AAAAAASomeThingsFailToEvaluate" ] || !(lib.isAttrs value) then
+ [ ]
+ else if lib.isDerivation value then
+ [
+ {
+ inherit path value;
+ }
+ ]
+ else
+ lib.pipe value [
+ (lib.mapAttrsToList (
+ name: value:
+ lib.addErrorContext "while evaluating package set attribute path '${
+ lib.showAttrPath (path ++ [ name ])
+ }'" (listAttrs (path ++ [ name ]) value)
+ ))
+ lib.concatLists
+ ];
+ in
+ lib.traceIf trace "** ${lib.showAttrPath path}" result;
+
+ outpaths = import ./outpaths.nix {
+ inherit path;
+ extraNixpkgsConfig = builtins.fromJSON extraNixpkgsConfigJson;
+ attrNamesOnly = true;
+ };
+
+ list =
+ map
+ (path: {
+ inherit path;
+ # This looks a bit weird, but the only reason we care about this value
+ # is for the meta.problems check below, and stdenv's certainly don't
+ # have any problems, so this is fine :)
+ value = { };
+ })
+ [
+ # Some of the following are based on variants, which are disabled with `attrNamesOnly = true`.
+ # Until these have been removed from release.nix / hydra, we manually add them to the list.
+ [
+ "pkgsLLVM"
+ "stdenv"
+ ]
+ [
+ "pkgsArocc"
+ "stdenv"
+ ]
+ [
+ "pkgsZig"
+ "stdenv"
+ ]
+ [
+ "pkgsStatic"
+ "stdenv"
+ ]
+ [
+ "pkgsMusl"
+ "stdenv"
+ ]
+ ]
+ ++ listAttrs [ ] outpaths;
+ paths = map (attrs: attrs.path) list;
+ names = map lib.showAttrPath paths;
+
+ inherit (import ../../pkgs/stdenv/generic/problems.nix { inherit lib; })
+ disallowNixpkgsInternalUseKinds
+ ;
+
+ # Determine the list of attributes whose packages have any meta.problems
+ # with a kind that's disallowed from internal Nixpkgs use
+ attrPathsDisallowedForInternalUse = lib.pipe list [
+ (lib.map (
+ attrs:
+ attrs
+ // {
+ problematicProblems = builtins.tryEval (
+ lib.filterAttrs (name: problem: disallowNixpkgsInternalUseKinds ? ${problem.kind}) (
+ attrs.value.meta.problems or { }
+ )
+ );
+ }
+ ))
+ (lib.filter (attrs: attrs.problematicProblems.success && attrs.problematicProblems.value != { }))
+ (lib.map (attrs: {
+ attrPath = attrs.path;
+ reason = "it has certain meta.problems whose kinds are disallowed: ${
+ lib.generators.toPretty { } attrs.problematicProblems.value
+ }";
+ }))
+ ];
+in
+{
+ # TODO: Do we still need these? Probably not
+ inherit paths names;
+ result = {
+ inherit paths attrPathsDisallowedForInternalUse;
+ };
+}
diff --git a/ci/github-script/bot.js b/ci/github-script/bot.js
index c952499cec54..684e3e33179a 100644
--- a/ci/github-script/bot.js
+++ b/ci/github-script/bot.js
@@ -206,20 +206,8 @@ module.exports = async ({ github, context, core, dry }) => {
const maintainers = await getMaintainerMap(pull_request.base.ref)
- const merge_bot_eligible = await handleMerge({
- github,
- context,
- core,
- log,
- dry,
- pull_request,
- events,
- maintainers,
- getTeamMembers,
- getUser,
- })
-
// Check for any human reviews other than the PR author, GitHub actions and other GitHub apps.
+ // `commit { oid }` is needed by handleMerge to verify approvals are against the current head.
const reviews = (
await github.graphql(
`query($owner: String!, $repo: String!, $pr: Int!) {
@@ -231,6 +219,7 @@ module.exports = async ({ github, context, core, dry }) => {
reviews(first: 100) {
nodes {
state
+ commit { oid }
user: author {
# Only get users, no bots
... on User {
@@ -266,6 +255,20 @@ module.exports = async ({ github, context, core, dry }) => {
r.user.id !== pull_request.user?.id,
)
+ const merge_bot_eligible = await handleMerge({
+ github,
+ context,
+ core,
+ log,
+ dry,
+ pull_request,
+ events,
+ reviews,
+ maintainers,
+ getTeamMembers,
+ getUser,
+ })
+
const approvals = new Set(
reviews
.filter((review) => review.state === 'APPROVED')
@@ -392,6 +395,13 @@ module.exports = async ({ github, context, core, dry }) => {
pull_number,
per_page: 100,
})
+
+ // label llm-assisted PRs accordingly
+ const assistedByPattern = /Assisted-by: (?!nix-init)/i
+ evalLabels['llm-assisted'] = prCommits.some((c) =>
+ assistedByPattern.test(c.commit.message),
+ )
+
const commitSubjects = prCommits.map(
(c) => c.commit.message.split('\n')[0],
)
diff --git a/ci/github-script/lint-commits.js b/ci/github-script/lint-commits.js
index 0828db23a2bc..51c81332490d 100644
--- a/ci/github-script/lint-commits.js
+++ b/ci/github-script/lint-commits.js
@@ -74,8 +74,10 @@ async function checkCommitMessages({ commits, core }) {
'fix',
'perf',
'refactor',
+ 'services',
'style',
'test',
+ 'update',
]
/**
diff --git a/ci/github-script/merge.js b/ci/github-script/merge.js
index ee861e21187d..180a12b0fe4a 100644
--- a/ci/github-script/merge.js
+++ b/ci/github-script/merge.js
@@ -2,11 +2,11 @@ const { classify } = require('../supportedBranches.js')
function runChecklist({
committers,
- events,
files,
pull_request,
log,
maintainers,
+ reviews,
user,
userIsMaintainer,
}) {
@@ -27,18 +27,35 @@ function runChecklist({
.reduce((acc, cur) => acc?.intersection(cur) ?? cur)
const approvals = new Set(
- events
+ reviews
.filter(
- ({ event, state, commit_id }) =>
- event === 'reviewed' &&
- state === 'approved' &&
+ ({ state, commit }) =>
+ state === 'APPROVED' &&
// Only approvals for the current head SHA count, otherwise authors could push
// bad code between the approval and the merge.
- commit_id === pull_request.head.sha,
+ commit?.oid === pull_request.head.sha,
)
- .map(({ user }) => user?.id)
- // Some users have been deleted, so filter these out.
- .filter(Boolean),
+ .map(({ user }) => user.id),
+ )
+
+ // A "changes requested" review from a committer blocks both the merge queue and
+ // auto-merge, even if it was made on an older commit (unlike approvals, GitHub does
+ // not auto-dismiss changes-requested reviews on push). For each committer, take their
+ // latest actionable review; if it's CHANGES_REQUESTED, they're blocking the PR.
+ // Dismissed reviews surface as DISMISSED and comment-only follow-ups as COMMENTED, so
+ // both are skipped naturally — the prior actionable review still stands until the
+ // committer explicitly approves or requests changes again.
+ const committerReviewState = new Map()
+ for (const { user, state } of reviews) {
+ if (
+ committers.has(user.id) &&
+ ['APPROVED', 'CHANGES_REQUESTED'].includes(state)
+ ) {
+ committerReviewState.set(user.id, state)
+ }
+ }
+ const noBlockingReviews = !Array.from(committerReviewState.values()).includes(
+ 'CHANGES_REQUESTED',
)
const checklist = {
@@ -57,6 +74,11 @@ function runChecklist({
pull_request.user.login === 'r-ryantm',
},
'PR is not a draft': !pull_request.draft,
+ // CI state is intentionally *not* a checklist item: auto-merge exists precisely to
+ // cover unfinished CI, and an already-failed CI is reported via the merge message
+ // (see merge() below) rather than a blanket refusal.
+ 'PR is not blocked by a "changes requested" review from a [committer](https://github.com/orgs/NixOS/teams/nixpkgs-committers).':
+ noBlockingReviews,
}
if (user) {
@@ -123,6 +145,7 @@ async function handleMerge({
dry,
pull_request,
events,
+ reviews,
maintainers,
getTeamMembers,
getUser,
@@ -148,6 +171,14 @@ async function handleMerge({
// including an early exit when the first non-by-name file is found.
if (files.length >= 100) return false
+ const noPrFailuresState = (
+ await github.rest.repos.listCommitStatusesForRef({
+ ...context.repo,
+ ref: pull_request.head.sha,
+ per_page: 100,
+ })
+ ).data.find(({ context }) => context === 'no PR failures')?.state
+
// Only look through comments *after* the latest (force) push.
const lastPush = events.findLastIndex(
({ event, sha, commit_id }) =>
@@ -173,10 +204,12 @@ async function handleMerge({
)),
)
+ // Returns `{ reaction, messages }`: the reaction to leave on the merge comment and the
+ // lines to append to the bot's reply. Throws only on an unexpected API error.
async function merge() {
if (dry) {
core.info(`Merging #${pull_number}... (dry)`)
- return ['Merge completed (dry)']
+ return { reaction: 'ROCKET', messages: ['Merge completed (dry)'] }
}
// Using GraphQL mutations instead of the REST /merge endpoint, because the latter
@@ -197,16 +230,37 @@ async function handleMerge({
{ node_id: pull_request.node_id, sha: pull_request.head.sha },
)
log('merge', 'Queued for merge')
- return [
- `:heavy_check_mark: [Queued](${resp.enqueuePullRequest.mergeQueueEntry.mergeQueue.url}) for merge (#306934)`,
- ]
+ return {
+ reaction: 'ROCKET',
+ messages: [
+ `:heavy_check_mark: [Queued](${resp.enqueuePullRequest.mergeQueueEntry.mergeQueue.url}) for merge (#306934)`,
+ ],
+ }
} catch (e) {
log('Enqueuing failed', e.response.errors[0].message)
}
- // If required status checks are not satisfied, yet, the above will fail. In this case
- // we can enable auto-merge. We could also only use auto-merge, but this often gets
- // stuck for no apparent reason.
+ // Enqueuing fails when the required status checks are not satisfied, yet. If CI has
+ // already failed, enabling auto-merge would be pointless: it would never fire, and
+ // fixing CI requires a new push, which invalidates this merge command anyway (we only
+ // act on comments after the latest push). So we don't enable auto-merge and instead
+ // ask for a fresh command once CI is green again.
+ if (['error', 'failure'].includes(noPrFailuresState)) {
+ log('merge', 'CI has failed, not enabling auto-merge')
+ return {
+ reaction: 'THUMBS_DOWN',
+ messages: [
+ ':x: Pull Request could not be merged: CI has failed (#305350).',
+ '',
+ '> [!TIP]',
+ '> PRs cannot be merged while CI is failing.',
+ '> Once CI is passing, comment `@NixOS/nixpkgs-merge-bot merge` again.',
+ ],
+ }
+ }
+
+ // CI has not finished yet, so we enable auto-merge. We could also only use auto-merge,
+ // but this often gets stuck for no apparent reason.
try {
await github.graphql(
`mutation($node_id: ID!, $sha: GitObjectID) {
@@ -219,12 +273,17 @@ async function handleMerge({
{ node_id: pull_request.node_id, sha: pull_request.head.sha },
)
log('merge', 'Auto-merge enabled')
- return [
- `:heavy_check_mark: Enabled Auto Merge (#306934)`,
- '',
- '> [!TIP]',
- '> Sometimes GitHub gets stuck after enabling Auto Merge. In this case, leaving another approval should trigger the merge.',
- ]
+ return {
+ reaction: 'ROCKET',
+ messages: [
+ `:heavy_check_mark: Enabled Auto Merge (#306934)`,
+ '',
+ '> [!TIP]',
+ '> [Auto Merge](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/automatically-merging-a-pull-request) will queue this PR once required CI checks succeed.',
+ '> If CI fails instead, fixing it needs a new push, which disables Auto Merge and invalidates this command — comment `@NixOS/nixpkgs-merge-bot merge` again once CI is green.',
+ '> If GitHub gets stuck even though CI passed (it sometimes does), leaving another approval should kick off the merge.',
+ ],
+ }
} catch (e) {
log('Auto Merge failed', e.response.errors[0].message)
throw new Error(e.response.errors[0].message)
@@ -267,11 +326,11 @@ async function handleMerge({
const { result, eligible, checklist } = runChecklist({
committers,
- events,
files,
pull_request,
log,
maintainers,
+ reviews,
user: comment.user,
userIsMaintainer: await isMaintainer(comment.user.login),
})
@@ -308,10 +367,12 @@ async function handleMerge({
}
if (result) {
- await react('ROCKET')
try {
- body.push(...(await merge()))
+ const { reaction, messages } = await merge()
+ await react(reaction)
+ body.push(...messages)
} catch (e) {
+ await react('THUMBS_DOWN')
// Remove the HTML comment with node_id reference to allow retrying this merge on the next run.
body.shift()
body.push(`:x: Merge failed with: ${e} (#371492)`)
@@ -336,11 +397,11 @@ async function handleMerge({
const { result } = runChecklist({
committers,
- events,
files,
pull_request,
log,
maintainers,
+ reviews,
})
// Returns a boolean, which indicates whether the PR is merge-bot eligible in principle.
diff --git a/ci/github-script/package-lock.json b/ci/github-script/package-lock.json
index 9e354e74ae46..a557931231b6 100644
--- a/ci/github-script/package-lock.json
+++ b/ci/github-script/package-lock.json
@@ -4,7 +4,6 @@
"requires": true,
"packages": {
"": {
- "name": "github-script",
"dependencies": {
"@actions/artifact": "6.2.1",
"@actions/core": "1.10.1",
diff --git a/ci/github-script/package.json b/ci/github-script/package.json
index 290ef068e90b..b5fb5e4a586a 100644
--- a/ci/github-script/package.json
+++ b/ci/github-script/package.json
@@ -2,9 +2,7 @@
"private": true,
"//": [
"Keep `@actions/core` and `@actions/github` in sync with",
- "https://github.com/actions/github-script/blob/main/package.json.",
- "Keep `@actions/artifact` and `bottleneck` in sync with",
- "`.github/workflows/bot.yml`."
+ "https://github.com/actions/github-script/blob/main/package.json."
],
"dependencies": {
"@actions/artifact": "6.2.1",
diff --git a/ci/pinned.json b/ci/pinned.json
index 0e8f2b8ff61c..6f50e7e09f51 100644
--- a/ci/pinned.json
+++ b/ci/pinned.json
@@ -9,22 +9,9 @@
},
"branch": "nixpkgs-unstable",
"submodules": false,
- "revision": "8c91a71d13451abc40eb9dae8910f972f979852f",
- "url": "https://github.com/NixOS/nixpkgs/archive/8c91a71d13451abc40eb9dae8910f972f979852f.tar.gz",
- "hash": "sha256-fnzKKPvS+oieI/pTzotA5tkoM47EB1NpaBcgk4R97hE="
- },
- "treefmt-nix": {
- "type": "Git",
- "repository": {
- "type": "GitHub",
- "owner": "numtide",
- "repo": "treefmt-nix"
- },
- "branch": "main",
- "submodules": false,
- "revision": "db947814a175b7ca6ded66e21383d938df01c227",
- "url": "https://github.com/numtide/treefmt-nix/archive/db947814a175b7ca6ded66e21383d938df01c227.tar.gz",
- "hash": "sha256-eynAfOmbmxJnkp7YewvCEbShNnnYJ9gLLqkzsYtBPeM="
+ "revision": "421eebfd0ec7bccd4abe826ce62d7e6e83129493",
+ "url": "https://github.com/NixOS/nixpkgs/archive/421eebfd0ec7bccd4abe826ce62d7e6e83129493.tar.gz",
+ "hash": "sha256:1lxfhfgiv1sz2v7fg43gny57sa6wf59n98q7ldsyb2p06f4sal7w"
}
},
"version": 8
diff --git a/ci/treefmt.nix b/ci/treefmt.nix
index 9575e99d8680..a0d4ffbc1ef2 100644
--- a/ci/treefmt.nix
+++ b/ci/treefmt.nix
@@ -1,122 +1,175 @@
-{ pkgs, ... }: {
- # Important: The auto-rebase script uses `git filter-branch --tree-filter`,
- # which creates trees within the Git repository under `.git-rewrite/t`,
- # notably without having a `.git` themselves.
- # So if this projectRootFile were the default `.git/config`,
- # having the auto-rebase script use treefmt on such a tree would make it
- # format all files in the _parent_ Git tree as well.
- projectRootFile = ".git-blame-ignore-revs";
-
- # Be a bit more verbose by default, so we can see progress happening
- settings.verbose = 1;
-
- # By default it's info, which is too noisy since we have many unmatched files
- settings.on-unmatched = "debug";
-
- programs.actionlint.enable = true;
-
- programs.biome = {
- enable = true;
- # Disable settings validation because its inputs are liable to hash mismatch
- validate.enable = false;
- settings.formatter = {
- useEditorconfig = true;
- };
- settings.javascript.formatter = {
- quoteStyle = "single";
- semicolons = "asNeeded";
- };
- settings.json.formatter.enabled = false;
- };
- settings.formatter.biome.excludes = [
- "*.min.js"
- "pkgs/*"
+{
+ lib,
+ pkgs,
+ ...
+}:
+{
+ runtimeInputs = [
+ # tree-root uses `git rev-parse --show-toplevel`
+ pkgs.gitMinimal
];
- programs.keep-sorted.enable = true;
-
- # This uses nixfmt underneath, the default formatter for Nix code.
- # See https://github.com/NixOS/nixfmt
- programs.nixfmt = {
- enable = true;
- package = pkgs.nixfmt;
- };
-
- programs.yamlfmt = {
- enable = true;
- settings.formatter = {
- retain_line_breaks = true;
- };
- };
- settings.formatter.yamlfmt.excludes = [
- # Aligns comments with whitespace
- "pkgs/development/haskell-modules/configuration-hackage2nix/main.yaml"
- # TODO: Fix formatting for auto-generated file
- "pkgs/development/haskell-modules/configuration-hackage2nix/transitive-broken.yaml"
- ];
-
- programs.nixf-diagnose = {
- enable = true;
- ignore = [
- # Rule names can currently be looked up here:
- # https://github.com/nix-community/nixd/blob/main/libnixf/src/Basic/diagnostic.py
- # TODO: Remove the following and fix things.
- "sema-unused-def-lambda-noarg-formal"
- "sema-unused-def-lambda-witharg-arg"
- "sema-unused-def-lambda-witharg-formal"
- "sema-unused-def-let"
- # Keep this rule, because we have `lib.or`.
- "or-identifier"
- # TODO: remove after outstanding prelude diagnostics issues are fixed:
- # https://github.com/nix-community/nixd/issues/761
- # https://github.com/nix-community/nixd/issues/762
- "sema-primop-removed-prefix"
- "sema-primop-overridden"
- "sema-constant-overridden"
- "sema-primop-unknown"
- ];
- };
- settings.formatter.nixf-diagnose = {
- # Ensure nixfmt cleans up after nixf-diagnose.
- priority = -1;
+ settings = {
+ # numtide/treefmt-nix defaults
excludes = [
- # Auto-generated; violates sema-extra-with
- # Can only sensibly be removed when --auto-fix supports multiple fixes at once:
- # https://github.com/inclyc/nixf-diagnose/issues/13
- "pkgs/servers/home-assistant/component-packages.nix"
- # https://github.com/nix-community/nixd/issues/708
- "nixos/maintainers/scripts/azure-new/examples/basic/system.nix"
+ "*.lock"
+ "*.patch"
+ "*.diff"
+ "package-lock.json"
+ "go.mod"
+ "go.sum"
+ ".gitattributes"
+ ".gitignore"
+ ".gitmodules"
+ "COPYING"
+ "LICENSE"
];
- };
- settings.formatter.editorconfig-checker = {
- command = "${pkgs.lib.getExe pkgs.editorconfig-checker}";
- options = [
- "-disable-indent-size"
- # TODO: Remove this once this upstream issue is fixed:
- # https://github.com/editorconfig-checker/editorconfig-checker/issues/505
- "-disable-charset"
- ];
- includes = [ "*" ];
- priority = 1;
- };
+ # Be a bit more verbose by default, so we can see progress happening
+ verbose = 1;
- # TODO: Upstream this into treefmt-nix eventually:
- # https://github.com/numtide/treefmt-nix/issues/387
- settings.formatter.markdown-code-runner = {
- command = pkgs.lib.getExe pkgs.markdown-code-runner;
- options =
- let
- config = pkgs.writers.writeTOML "markdown-code-runner-config" {
- presets.nixfmt = {
- language = "nix";
- command = [ (pkgs.lib.getExe pkgs.nixfmt) ];
- };
- };
- in
- [ "--config=${config}" ];
- includes = [ "*.md" ];
- };
+ # By default it's info, which is too noisy since we have many unmatched files
+ on-unmatched = "debug";
- programs.zizmor.enable = true;
+ formatter = {
+ # keep-sorted start block=yes newline_separated=yes
+ actionlint = {
+ command = lib.getExe pkgs.actionlint;
+ includes = [
+ ".github/workflows/*.yml"
+ ".github/workflows/*.yaml"
+ ];
+ };
+
+ biome = {
+ command = lib.getExe pkgs.biome;
+ excludes = [
+ "*.min.js"
+ "pkgs/*"
+ ];
+ includes = [
+ "*.js"
+ "*.ts"
+ "*.mjs"
+ "*.mts"
+ "*.cjs"
+ "*.cts"
+ "*.jsx"
+ "*.tsx"
+ "*.d.ts"
+ "*.d.cts"
+ "*.d.mts"
+ "*.css"
+ ];
+ options = [
+ "check"
+ "--write"
+ "--no-errors-on-unmatched"
+ "--use-editorconfig=true"
+ "--javascript-formatter-quote-style=single"
+ "--semicolons=as-needed"
+ ];
+ };
+
+ editorconfig-checker = {
+ command = lib.getExe pkgs.editorconfig-checker;
+ options = [
+ "-disable-indent-size"
+ # TODO: Remove this once this upstream issue is fixed:
+ # https://github.com/editorconfig-checker/editorconfig-checker/issues/505
+ "-disable-charset"
+ ];
+ includes = [ "*" ];
+ priority = 1;
+ };
+
+ keep-sorted = {
+ command = lib.getExe pkgs.keep-sorted;
+ includes = [ "*" ];
+ };
+
+ markdown-code-runner = {
+ command = lib.getExe pkgs.markdown-code-runner;
+ options =
+ let
+ config = pkgs.writers.writeTOML "markdown-code-runner-config" {
+ presets.nixfmt = {
+ language = "nix";
+ command = [ (lib.getExe pkgs.nixfmt) ];
+ };
+ };
+ in
+ [ "--config=${config}" ];
+ includes = [ "*.md" ];
+ };
+
+ nixf-diagnose = {
+ command = lib.getExe pkgs.nixf-diagnose;
+ excludes = [
+ # Auto-generated; violates sema-extra-with
+ # Can only sensibly be removed when --auto-fix supports multiple fixes at once:
+ # https://github.com/inclyc/nixf-diagnose/issues/13
+ "pkgs/servers/home-assistant/component-packages.nix"
+ # https://github.com/nix-community/nixd/issues/708
+ "nixos/maintainers/scripts/azure-new/examples/basic/system.nix"
+ ];
+ includes = [ "*.nix" ];
+ options = [
+ "--auto-fix"
+ # Rule names can currently be looked up here:
+ # https://github.com/nix-community/nixd/blob/main/libnixf/src/Basic/diagnostic.py
+ # TODO: Remove the following and fix things.
+ "--ignore=sema-unused-def-lambda-noarg-formal"
+ "--ignore=sema-unused-def-lambda-witharg-arg"
+ "--ignore=sema-unused-def-lambda-witharg-formal"
+ "--ignore=sema-unused-def-let"
+ # TODO: remove after outstanding prelude diagnostics issues are fixed:
+ # https://github.com/nix-community/nixd/issues/761
+ # https://github.com/nix-community/nixd/issues/762
+ "--ignore=sema-primop-removed-prefix"
+ "--ignore=sema-primop-overridden"
+ "--ignore=sema-constant-overridden"
+ "--ignore=sema-primop-unknown"
+ ];
+ # Ensure nixfmt cleans up after nixf-diagnose.
+ priority = -1;
+ };
+
+ # This uses nixfmt underneath, the default formatter for Nix code.
+ # See https://github.com/NixOS/nixfmt
+ nixfmt = {
+ command = lib.getExe pkgs.nixfmt;
+ includes = [ "*.nix" ];
+ };
+
+ yamlfmt = {
+ command = lib.getExe pkgs.yamlfmt;
+ excludes = [
+ # Aligns comments with whitespace
+ "pkgs/development/haskell-modules/configuration-hackage2nix/main.yaml"
+ # TODO: Fix formatting for auto-generated file
+ "pkgs/development/haskell-modules/configuration-hackage2nix/transitive-broken.yaml"
+ ];
+ includes = [
+ "*.yaml"
+ "*.yml"
+ ];
+ options = [
+ "-formatter"
+ "retain_line_breaks=true"
+ ];
+ };
+
+ zizmor = {
+ command = lib.getExe pkgs.zizmor;
+ includes = [
+ ".github/workflows/*.yml"
+ ".github/workflows/*.yaml"
+ ".github/actions/**/*.yml"
+ ".github/actions/**/*.yaml"
+ ];
+ };
+ # keep-sorted end
+ };
+ };
}
diff --git a/ci/update-pinned.sh b/ci/update-pinned.sh
index 69ba7df9131d..51c99b0da98d 100755
--- a/ci/update-pinned.sh
+++ b/ci/update-pinned.sh
@@ -1,5 +1,5 @@
#!/usr/bin/env nix-shell
-#!nix-shell -i bash -p npins -I nixpkgs=../
+#!nix-shell -i bash -E 'with import ../. {}; mkShell { packages = [ npins ]; }'
set -euo pipefail
diff --git a/doc/README.md b/doc/README.md
index 4fafb9f575b8..4b124deaa3ce 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -1,21 +1,32 @@
-# Contributing to the Nixpkgs reference manual
+# Contributing to the Nixpkgs manual
-This directory houses the source files for the Nixpkgs reference manual.
+This directory houses the source files for the Nixpkgs manual.
-> [!IMPORTANT]
-> We are actively restructuring our documentation to follow the [Diátaxis framework](https://diataxis.fr/)
+> [!NOTE]
>
-> Going forward, this directory should **only** contain [reference documentation](https://nix.dev/contributing/documentation/diataxis#reference).
-> For tutorials, guides and explanations, contribute to instead.
+> We are actively restructuring our documentation to be more beginner friendly.
>
-> We are actively working to generate **all** reference documentation from the [doc-comments](https://github.com/NixOS/rfcs/blob/master/rfcs/0145-doc-strings.md) present in code.
-> This also provides the benefit of using `:doc` in the `nix repl` to view reference documentation locally on the fly.
-For documentation only relevant for contributors, use Markdown files next to the source and regular code comments.
+When writing new docs use **Progressive Disclosure**
-> [!TIP]
-> Feedback for improving support for parsing and rendering doc-comments is highly appreciated.
-> [Open an issue](https://github.com/NixOS/nixpkgs/issues/new?labels=6.topic%3A+documentation&title=Doc%3A+) to request bugfixes or new features.
+Start simple, pick up beginners.
+Use **examples** first to show how to get something done. Keep **Explanation** lean.
+
+Use our [styleguide](./styleguide.md) for more in depth guidance on writing good documentation.
+
+This directory contains **guides** and **reference** documentation for Nixpkgs.
+
+Borrowing from [Diátaxis framework](https://diataxis.fr/) what suits our needs:
+
+**Guides** are task-oriented. They can be tutorial-style walkthroughs or how-to sections.
+Explanations appear as prose after examples.
+
+**Reference** documentation is the specification of functions and attributes.
+
+We are actively working to generate **all** reference documentation from the [doc-comments](https://github.com/NixOS/rfcs/blob/master/rfcs/0145-doc-strings.md) present in code.
+This also provides the benefit of using `:doc` in the `nix repl` to view reference documentation locally on the fly.
+
+See [Document structure](#document-structure) for a structural template.
Rendered documentation:
- [Unstable (from master)](https://nixos.org/manual/nixpkgs/unstable/)
@@ -36,7 +47,7 @@ If the build succeeds, the manual will be in `./result/share/doc/nixpkgs/manual.
### Development environment
-In order to reduce repetition, consider using tools from the provided development environment:
+To reduce repetition, consider using tools from the provided development environment:
Load it from the Nixpkgs documentation directory with
@@ -54,9 +65,11 @@ Make sure that your local files aren't added to Git history by adding the follow
/**/.direnv
```
-#### `devmode`
+#### Live preview
-Use [`devmode`](../pkgs/by-name/de/devmode/README.md) for a live preview when editing the manual.
+Run [`devmode`](../pkgs/by-name/de/devmode/README.md) for a live preview while editing the manual: it rebuilds on every change and reloads the page in your browser automatically.
+
+Changes to the renderer 'pkgs/by-name/ni/nixos-render-docs' need a manual restart. Run: `devmode` again.
### Testing redirects
@@ -209,6 +222,62 @@ You, as the writer of documentation, are still in charge of its content.
**For prose style, see the [documentation styleguide](./styleguide.md).**
+### Document structure
+
+Organize each chapter as guide sections first, then a single `## Reference` section.
+
+A well-structured chapter looks like this:
+
+````markdown
+# Foo {#foo}
+
+`foo` builds Foo projects from a `foo.toml`.
+
+## Package a Foo application {#foo-packaging}
+
+:::{.example #ex-foo-packaging}
+
+# Package the hello app
+
+```nix
+{ foo }:
+buildFooPackage {
+ pname = "hello";
+ version = "1.0";
+}
+```
+
+:::
+
+`buildFooPackage` needs `pname` and `version`.
+Keep explanation short, and place it after the example.
+
+## Reference {#foo-reference}
+
+### `buildFooPackage` {#foo-buildFooPackage}
+
+Builds a Foo application from source.
+
+#### Inputs {#foo-buildFooPackage-inputs}
+
+`pname` (String)
+: The program name.
+
+#### Examples {#foo-buildFooPackage-examples}
+
+See [](#ex-foo-packaging).
+````
+
+Examples live in one place: the guide owns them and the reference links to them.
+
+Guides introduce minimal working examples that are goal-oriented (typical usage).
+
+Reference may introduce additional examples that are unit-oriented. (minimal usage, edge-cases).
+If the guide example is already sufficient, just link to it from the reference.
+
+Follow this structure strictly; to deviate, ping @NixOS/documentation-team.
+
+
### One sentence per line
Put each sentence in its own line.
@@ -284,7 +353,15 @@ Use the [admonition syntax](#admonitions) for callouts and examples.
### `callPackage`-compatible examples
-Provide at least one example per function.
+Provide at least one example per function, in its doc-comment.
+
+Keep each example at the level it documents:
+
+- A **reference example** might sometimes live in a doc-comment and show function call shape.
+- A **guide example** lives in a guide section and shows a complete task that may compose several functions.
+
+When the task is nothing more than the call itself, the guide example is enough.
+The reference example links to the guide example.
Example code should be such that it can be passed to `pkgs.callPackage`.
Instead of something like:
diff --git a/doc/build-helpers.md b/doc/build-helpers.md
index f11deafdc24d..8b38a79ceff4 100644
--- a/doc/build-helpers.md
+++ b/doc/build-helpers.md
@@ -25,6 +25,5 @@ build-helpers/dev-shell-tools.chapter.md
build-helpers/special.md
build-helpers/images.md
hooks/index.md
-languages-frameworks/index.md
packages/index.md
```
diff --git a/doc/build-helpers/dev-shell-tools.chapter.md b/doc/build-helpers/dev-shell-tools.chapter.md
index 2571380a3e06..9de64474d218 100644
--- a/doc/build-helpers/dev-shell-tools.chapter.md
+++ b/doc/build-helpers/dev-shell-tools.chapter.md
@@ -2,7 +2,7 @@
The `nix-shell` command has popularized the concept of transient shell environments for development or testing purposes.
-- Create the first release note entry in this section!
+- The {file}`nixexprs.tar.xz` tarball will be discontinued together with Nixpkgs
+ 27.05 after 2027-12-31. Migrate to the {file}`nixexprs.tar.zst` tarball
+ instead.
+
+ This affects for example users who pull Nixpkgs as a flake input from
+ https://channels.nixos.org:
+
+ ```diff
+ -nixpkgs.url = "https://channels.nixos.org/nixos-26.05/nixexprs.tar.xz";
+ +nixpkgs.url = "https://channels.nixos.org/nixos-26.05/nixexprs.tar.zst";
+ ```
## Backward Incompatibilities {#sec-nixpkgs-release-26.11-incompatibilities}
+- []{#x86_64-darwin-26.11}
+
+ Support for `x86_64-darwin` has been dropped, due to Apple’s deprecation of the platform and limited build infrastructure and developer time.
+ We will no longer build packages for the platform or support building them from source.
+
+ The Nixpkgs 26.05 stable branch will still maintain platform support and binaries will be built until it goes out of support at the end of 2026.
+ Users of `x86_64-darwin` will receive an error message explaining how to switch to 26.05.
+
+ By the time of this release, Homebrew will offer only limited [Tier 3](https://docs.brew.sh/Support-Tiers#tier-3) support for the platform, but MacPorts will likely continue to support it for a long time.
+ We also recommend users consider installing NixOS, which should continue to run on essentially all Intel Macs, especially after Apple stops security support for macOS 26 in 2028.
+
+- `bundlerApp` now sets `__structuredAttrs = true` for its result package.
+ Out-of-tree packages passing `postBuild` to `bundlerApp` should examine if their `postBuild` commands are compatible with structured attributes.
+
- `databricks-cli` has been updated from `0.290.2` to `1.x.x`, the first major release. OAuth tokens for interactive logins (`auth_type = databricks-cli`) are now stored in the OS-native secure store by default (Secret Service on Linux) instead of `~/.databricks/token-cache.json`; cached tokens from older versions are not migrated, so run `databricks auth login` once per profile after upgrading. To keep the previous file-backed storage, set `DATABRICKS_AUTH_STORAGE=plaintext` or add `auth_storage = plaintext` under `[__settings__]` in `~/.databrickscfg`. Additionally, the `vector_search_endpoints` DABs resource renamed `min_qps` to `target_qps` (and the `vector-search-endpoints` command renamed `--min-qps` to `--target-qps`). See the [upstream changelog](https://github.com/databricks/cli/blob/main/CHANGELOG.md) for details.
- `hurl` has been updated to `8.x.x` which has some breaking changes. See [upstream changelog](https://github.com/Orange-OpenSource/hurl/releases/tag/8.0.0) for details.
+
+- `gotosocial` has been updated to 0.22.0. This release contains a very long database migration, which should not be cancelled or interrupted under any circumstances.
+ - Postgres users: Following the migration, if you encounter slowdown on Postgres specifically (ie., timing out while loading timelines) you may need to run some manual database maintenance steps. Please check https://docs.gotosocial.org/en/stable/admin/database_maintenance/#postgres.
+
+- `xsecurelock` no longer supports authentication via htaccess files (`~/.xsecurelock.pw`) or via the `pamtester` program by default. Only the recommended PAM module is supported unless rebuilt with `withHtaccess` or `withPamtester`.
+
- `python3Packages.django-health-check` has been updated to major version 4. See its [migration guide](https://codingjoe.dev/django-health-check/migrate-to-v4/) and [changelog](https://github.com/codingjoe/django-health-check/releases/tag/4.0.0) for breaking changes.
+- `jmtpfs` has been removed due to lack of maintenance and fuse3 support.
+
- `libgdata` has been removed, as it was archived upstream and relied on the insecure libsoup 2.4.
+- `mcphost` has been removed, as it was archived upstream and declared unmaintained.
+
+- `fflogs` has been removed because it was no longer functional. Users should switch to `archon-lite`.
+
+- `services.mysql` now sets `root@localhost` authentication to `auth_socket` when used with `mysql` or `percona-server`.
+ Existing deployments will also be adjusted if possible. See the [security advisory GHSA-6qxx-6rg8-c4p8](https://github.com/NixOS/nixpkgs/security/advisories/GHSA-6qxx-6rg8-c4p8) for more information.
+
+- `zerofs` has been updated from `1.x` to `2.x` which is a breaking change. Volumes created by earlier releases are refused at open with a clear error. There is no migration tool; older volumes remain readable and writable by the release that created them.
+
+- `keycloak.plugins.keycloak-metrics-spi` has been removed. Keycloak exposes Prometheus metrics natively on its management interface; enable them with the `metrics-enabled` setting (and `event-metrics-user-enabled` for login and event counters). See [Gaining insights with metrics](https://www.keycloak.org/observability/configuration-metrics).
+
+- `alps` has been rewritten upstream, see [upstream repository](https://github.com/migadu/alps) for documentation.
+
- `uhttpmock` providing 0.0 ABI was removed. `uhttpmock_1_0` providing 1.0 ABI was renamed to `uhttpmock` and `uhttpmock_1_0` was kept as an alias.
+- `nix-serve-ng` (and `haskellPackages.nix-serve-ng`) is now built against Lix instead of CppNix, following upstream which has switched to Lix as its supported Nix implementation.
+
- Linux kernel configuration has been moved out of the `linux-kernel` field of the platform structure into the kernel builders:
- `linux-kernel.name` has been removed.
- `linux-kernel.target` is available as the `target` parameter and passthru attribute on the kernel builders.
@@ -34,12 +81,32 @@
`lib.systems.{examples,platforms}.{sheevaplug,pogoplug4}` have been unified into `lib.systems.examples.armv5tel-multiplatform`.
Note that there is no official support for ARMv5 and it is not possible to build even a simple NixOS configuration out of the box.
+- `pdns` has been updated from `5.0.x` to `5.1.x`. Please be sure to review the [Upgrade Notes](https://doc.powerdns.com/authoritative/upgrading.html#to-5-1-0) before upgrading. Namely LUA record updates are no longer allowed by default, and the embedded webserver no longer includes a `access-control-allow-origin: *` header by default.
+
- Support for the legacy U‐Boot image format has been removed from the Linux kernel builders, as it is deprecated upstream and no longer used by any platform in Nixpkgs.
+- `etcd_3_4` package was dropped, as it's gone EOL. Please upgrade to either 3.5 or 3.6. See [migration notes](https://etcd.io/docs/v3.6/upgrades/upgrade_3_6/) for incompatibilities and upgrade procedure.
+
+- `rke2` retires ingress-nginx and transitions to Traefik starting in `rke2_1_36`. Because ingress-nginx was retired upstream as of March 2026, Traefik is now the default
+ for new clusters starting in v1.36 (existing clusters will keep their current ingress upon upgrade to avoid breakage). This transition brings the following structural changes:
+ - Airgapped Environments: The rke2-images-core tarball now contains Traefik images instead of ingress-nginx. The standalone rke2-images-traefik tarball has been removed.
+ Users who must continue using ingress-nginx will now need to manually provide the rke2-images-ingress-nginx tarball.
+ - Future Removal: The ingress-nginx chart will not receive any additional updates and will be completely removed in v1.37 for community users.
+
+- `buildFHSEnvChroot` has been removed after deprecation in 23.05.
+
+- `gh-actions-cache` has been removed since its functionality has been integrated directly into `gh` (`gh cache`). See [upstream readme](https://github.com/actions/gh-actions-cache).
+
- `requireFile` now sets `meta.license = lib.licenses.unfree` by default. Users of `requireFile`-based derivations that preserve this default will need to explicitly allow their evaluation as described in [](#sec-allow-unfree).
+- `texlive.combine` is deprecated and scheduled for removal in 27.05. Please migrate to `texliveSmall.withPackages` (see [](#sec-language-texlive-user-guide)).
+
+- `keycloak` was updated to >= 26.7.0 and includes some breaking internal (API) changes. See the [upstream migration guide](https://www.keycloak.org/docs/latest/upgrading/#migrating-to-26-7-0) for more information.
+
- `librest` providing 0.7 ABI was removed. `librest_1_0` providing 1.0 ABI was renamed to `librest` and `librest_1_0` was kept as an alias.
+- `pnpm_10` was upgraded to version 10.34.1+, which introduced stricter integrity checks. If you encounter `ERR_PNPM_MISSING_TARBALL_INTEGRITY`, you can fall back to the older `pnpm_10_34_0`.
+
- `fetchPnpmDeps`' `fetcherVersion = 1` and `fetcherVersion = 2` have been
removed, as announced in the 26.05 release. Packages still using them now
throw an evaluation error and must migrate to `fetcherVersion = 3` (or later)
@@ -47,31 +114,52 @@
[pnpm `fetcherVersion` section](#javascript-pnpm-fetcherVersion) of the manual
for details.
+- `rebuilderd` has been updated to 0.27.0 introducing breaking changes. See upstream changelog for details: [0.26.0](https://github.com/kpcyrd/rebuilderd/releases/tag/v0.26.0), [0.27.0](https://github.com/kpcyrd/rebuilderd/releases/tag/v0.27.0)
+
+- Starting with v14, `flameshot` will primarily utilise xdg-desktop-portal calls for screenshotting. This will directly affect users on X11 window managers due to the lack of a compatible portal with Screenshot feature. See [upstream changelog](https://github.com/flameshot-org/flameshot/releases/tag/v14.0.0) or [NixOS Flameshot](https://wiki.nixos.org/wiki/Flameshot) wiki page for workarounds.
+- `nim1` and respective aliases have been removed due to entering EOL; please migrate to `nim` or `nim-unwrapped` (nim 2).
+- `nim-2_0` & `nim-2_2` and respective aliases have been removed; please migrate to `nim` or `nim-unwrapped` (nim 2.2.10).
+- `domoticz` has been updated from `2024.7` to `2026.x`, breaking third party applications and scripts using the old RType calls. Review the [release notes](https://github.com/domoticz/domoticz/blob/2026.2/History.txt#L398) for more information.
+
+- `vimacs` has been removed, as it has not been maintained in 10 years and was built for an old version of vim (6.0).
+
## Other Notable Changes {#sec-nixpkgs-release-26.11-notable-changes}
+- `super-productivity` has been updated. The binary has been renamed from `super-productivity` to `superproductivity`. A symlink from the old name is provided for backward compatibility.
+
- Package-URL (PURL, https://github.com/package-url/purl-spec) metadata identifier has been added for `fetchgit`, `fetchpypi` and `fetchFromGithub` fetchers.
`mkDerivation` has been adjusted to reuse this information.
Package-URLs allow reliably identifying and locating software packages.
Maintainers of derivations using the adapted fetchers should rely on the `drv.src.meta.identifiers.v1.purl` default identifier and can enhance their `drv.meta.identifiers.v1.purls` list once they would like to have additional identifiers.
Maintainers using `fetchurl` for `drv.src` are urged to adapt their `drv.meta.identifiers.purlParts` for proper identification.
+- Emacs loads the `early-default` library after `early-init.el`.
+ Users can add `early-init.el` via `emacs.pkgs.withPackages`
+ by packaging `early-init.el` into a library named `early-default`.
+ To prevent loading the `early-default` library,
+ set `inhibit-early-default-init` in `early-init.el`.
+
+- `services.ceph` enabled the generation of Ceph log files at `/var/log/ceph/`.
+ They were missing before because Ceph omitted logs when this directory was missing.
+ Ceph logs can grow large, so you may want to configure rotation of these logs.
+
## Nixpkgs Library {#sec-nixpkgs-release-26.11-lib}
### Breaking changes {#sec-nixpkgs-release-26.11-lib-breaking}
-- Create the first release note entry in this section!
-
+- `fittrackee` 1.0.0 now requires postgres with postgis. The [upgrade guide](https://docs.fittrackee.org/en/upgrading-to-1.0.0.html) has steps to prepare for this upgrade.
### Deprecations {#sec-nixpkgs-release-26.11-lib-deprecations}
-- Create the first release note entry in this section!
+- Setting `config.allowBrokenPredicate` is deprecated in favor of
+ using `config.problems.handlers.PackageName.broken = "warn"` (or `=
+ "ignore"`). For more information see [](#sec-allow-broken).
### Additions and Improvements {#sec-nixpkgs-release-26.11-lib-additions-improvements}
- Create the first release note entry in this section!
-
diff --git a/doc/stdenv/cross-compilation.chapter.md b/doc/stdenv/cross-compilation.chapter.md
index 18f3b2344607..ea707ceba677 100644
--- a/doc/stdenv/cross-compilation.chapter.md
+++ b/doc/stdenv/cross-compilation.chapter.md
@@ -50,7 +50,7 @@ The exact schema these fields follow is a bit ill-defined due to a long and conv
`system`
-: This is a two-component shorthand for the platform. Examples of this would be "x86_64-darwin" and "i686-linux"; see `lib.systems.doubles` for more. The first component corresponds to the CPU architecture of the platform and the second to the operating system of the platform (`[cpu]-[os]`). This format has built-in support in Nix, such as the `builtins.currentSystem` impure string.
+: This is a two-component shorthand for the platform. Examples of this would be "aarch64-darwin" and "i686-linux"; see `lib.systems.doubles` for more. The first component corresponds to the CPU architecture of the platform and the second to the operating system of the platform (`[cpu]-[os]`). This format has built-in support in Nix, such as the `builtins.currentSystem` impure string.
`config`
diff --git a/doc/stdenv/stdenv.chapter.md b/doc/stdenv/stdenv.chapter.md
index afcc6cf807c1..d470f69d033d 100644
--- a/doc/stdenv/stdenv.chapter.md
+++ b/doc/stdenv/stdenv.chapter.md
@@ -776,7 +776,7 @@ By default, the flag `--disable-dependency-tracking` is added to the configure f
##### `dontFixLibtool` {#var-stdenv-dontFixLibtool}
-By default, the configure phase applies some special hackery to all files called `ltmain.sh` before running the configure script in order to improve the purity of Libtool-based packages [^footnote-stdenv-sys-lib-search-path] . If this is undesirable, set this variable to true.
+By default, the configure phase applies some special hackery to all files called `ltmain.sh` before running the configure script to improve the purity of Libtool-based packages [^footnote-stdenv-sys-lib-search-path] . If this is undesirable, set this variable to true.
##### `dontDisableStatic` {#var-stdenv-dontDisableStatic}
@@ -939,7 +939,7 @@ The fixup phase performs (Nix-specific) post-processing actions on the files ins
- It moves the `man/`, `doc/` and `info/` subdirectories of `$out` to `share/`.
- It strips libraries and executables of debug information.
-- On Linux, it applies the `patchelf` command to ELF executables and libraries to remove unused directories from the `RPATH` in order to prevent unnecessary runtime dependencies.
+- On Linux, it applies the `patchelf` command to ELF executables and libraries to remove unused directories from the `RPATH` to prevent unnecessary runtime dependencies.
- It rewrites the interpreter paths of shell scripts to paths found in `PATH`. E.g., `/usr/bin/perl` will be rewritten to `/nix/store/some-perl/bin/perl` found in `PATH`. See [](#patch-shebangs.sh) for details.
#### Variables controlling the fixup phase {#variables-controlling-the-fixup-phase}
@@ -1345,7 +1345,7 @@ $ echo $configureFlags
Nix itself considers a build-time dependency as merely something that should previously be built and accessible at build time—packages themselves are on their own to perform any additional setup. In most cases, that is fine, and the downstream derivation can deal with its own dependencies. But for a few common tasks, that would result in almost every package doing the same sort of setup work—depending not on the package itself, but entirely on which dependencies were used.
-In order to alleviate this burden, the setup hook mechanism was written, where any package can include a shell script that \[by convention rather than enforcement by Nix\], any downstream reverse-dependency will source as part of its build process. That allows the downstream dependency to merely specify its dependencies, and lets those dependencies effectively initialize themselves. No boilerplate mirroring the list of dependencies is needed.
+To alleviate this burden, the setup hook mechanism was written, where any package can include a shell script that \[by convention rather than enforcement by Nix\], any downstream reverse-dependency will source as part of its build process. That allows the downstream dependency to merely specify its dependencies, and lets those dependencies effectively initialize themselves. No boilerplate mirroring the list of dependencies is needed.
The setup hook mechanism is a bit of a sledgehammer though: a powerful feature with a broad and indiscriminate area of effect. The combination of its power and implicit use may be expedient, but isn’t without costs. Nix itself is unchanged, but the spirit of added dependencies being effect-free is violated even if the latter isn’t. For example, if a derivation path is mentioned more than once, Nix itself doesn’t care and makes sure the dependency derivation is already built just the same—depending is just needing something to exist, and needing is idempotent. However, a dependency specified twice will have its setup hook run twice, and that could easily change the build environment (though a well-written setup hook will therefore strive to be idempotent so this is in fact not observable). More broadly, setup hooks are anti-modular in that multiple dependencies, whether the same or different, should not interfere and yet their setup hooks may well do so.
diff --git a/doc/style.css b/doc/style.css
index 96b6979474db..5ca664ed61f7 100644
--- a/doc/style.css
+++ b/doc/style.css
@@ -23,21 +23,17 @@ body {
@media screen and (min-width: 992px) {
.book,
.appendix {
- max-width: 60rem;
+ max-width: 55rem;
}
}
@media screen and (min-width: 1200px) {
.book,
.appendix {
- max-width: 73rem;
+ max-width: 55rem;
}
}
-.book .list-of-examples {
- display: none;
-}
-
h1 {
font-size: 2em;
margin: 0.67em 0;
@@ -118,7 +114,7 @@ html {
body {
font-size: 1rem;
font-family: "Roboto", sans-serif;
- font-weight: 300;
+ font-weight: 400;
color: var(--main-text-color);
background-color: var(--background);
min-height: 100vh;
@@ -131,11 +127,36 @@ body {
padding-left: 1rem;
padding-right: 1rem;
}
+
+ /*
+ See: https://developer.mozilla.org/en-US/docs/Web/API/Popover_API
+
+ - :popover-open pseudo-class matches a popover element when it is in the showing state
+ - ::backdrop full-screen element placed directly behind popover
+ */
+ nav.toc-sidebar:popover-open {
+ position: fixed;
+ inset: 0 auto 0 0;
+ width: min(20rem, 85vw);
+ height: 100dvh;
+ max-height: none;
+ margin: 0;
+ padding: 1rem;
+ overflow-y: auto;
+ overscroll-behavior: contain;
+ background: var(--background);
+ border: 0;
+ border-right: 0.0625rem solid #d8d8d8;
+ box-shadow: 0 0 1.5rem rgb(0 0 0 / 0.35);
+ }
+
+ nav.toc-sidebar::backdrop {
+ background: rgb(0 0 0 / 0.5);
+ }
}
a {
- text-decoration: none;
- border-bottom: 1px solid;
+ text-decoration: underline;
color: var(--link-color);
}
@@ -162,63 +183,52 @@ hr {
margin-bottom: 1rem;
}
-h1 {
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
font-weight: 800;
- line-height: 110%;
- font-size: 200%;
- margin-bottom: 1rem;
+ line-height: 1.1;
+ margin: 1.5rem 0 0.5rem;
+}
+
+/*
+ Major-second scale see: https://typescale.com/
+ rounded to .025rem (0.4px)
+*/
+h1 {
+ font-size: 2rem;
color: var(--heading-color);
}
h2 {
- font-weight: 800;
- line-height: 110%;
- font-size: 170%;
- margin-bottom: 0.625rem;
+ font-size: 1.8rem;
color: var(--heading-color);
}
-h2:not(:first-child) {
- margin-top: 1rem;
-}
-
h3 {
- font-weight: 800;
- line-height: 110%;
- margin-bottom: 1rem;
- font-size: 150%;
+ font-size: 1.6rem;
color: var(--heading-color);
}
-.note h3,
-.tip h3,
-.warning h3,
-.caution h3,
-.important h3 {
- font-size: 120%;
-}
-
h4 {
- font-weight: 800;
- line-height: 110%;
- margin-bottom: 1rem;
- font-size: 140%;
+ font-size: 1.425rem;
color: var(--heading-color);
}
h5 {
- font-weight: 800;
- line-height: 110%;
- margin-bottom: 1rem;
- font-size: 130%;
+ font-size: 1.275rem;
color: var(--small-heading-color);
}
h6 {
- font-weight: 800;
- line-height: 110%;
- margin-bottom: 1rem;
- font-size: 120%;
+ font-size: 1.125rem;
+}
+
+:is(.note, .tip, .warning, .caution, .important) h3 {
+ font-size: 1.425rem;
}
strong {
@@ -246,13 +256,9 @@ code {
}
code {
- color: #ff8657;
- background: #f4f4f4;
- display: inline-block;
- padding: 0 0.5rem;
- border: 1px solid #d8d8d8;
- border-radius: 0.5rem;
- line-height: 1.57777778;
+ padding: 0.2em 0.4em;
+ background: var(--inline-code-background);
+ border-radius: 0.375rem;
}
div.book .programlisting,
@@ -264,16 +270,7 @@ div.appendix .programlisting {
color: var(--codeblock-text-color);
}
-div.book .note,
-div.book .tip,
-div.book .warning,
-div.book .caution,
-div.book .important,
-div.appendix .note,
-div.appendix .tip,
-div.appendix .warning,
-div.appendix .caution,
-div.appendix .important {
+:is(.note, .tip, .warning, .caution, .important) {
margin-bottom: 1rem;
border-radius: 0.5rem;
padding: 1.5rem;
@@ -281,69 +278,44 @@ div.appendix .important {
background: #f4f4f4;
}
-div.book .note > .title,
-div.book .tip > .title,
-div.book .warning > .title,
-div.book .caution > .title,
-div.book .important > .title,
-div.appendix .note > .title,
-div.appendix .tip > .title,
-div.appendix .warning > .title,
-div.appendix .caution > .title,
-div.appendix .important > .title {
+:is(.note, .tip, .warning, .caution, .important) > .title {
font-weight: 800;
line-height: 110%;
color: inherit;
margin-bottom: 0;
}
-div.book .note > :first-child,
-div.book .tip > :first-child,
-div.book .warning > :first-child,
-div.book .caution > :first-child,
-div.book .important > :first-child,
-div.appendix .note > :first-child,
-div.appendix .tip > :first-child,
-div.appendix .warning > :first-child,
-div.appendix .caution > :first-child,
-div.appendix .important > :first-child {
+:is(.note, .tip, .warning, .caution, .important) > :first-child {
margin-top: 0;
}
-div.book .note > :last-child,
-div.book .tip > :last-child,
-div.book .warning > :last-child,
-div.book .caution > :last-child,
-div.book .important > :last-child,
-div.appendix .note > :last-child,
-div.appendix .tip > :last-child,
-div.appendix .warning > :last-child,
-div.appendix .caution > :last-child,
-div.appendix .important > :last-child {
+:is(.note, .tip, .warning, .caution, .important) > :last-child {
margin-bottom: 0;
}
-div.book .note,
-div.book .tip,
-div.book .important,
-div.appendix .note,
-div.appendix .tip,
-div.appendix .important {
+.note {
color: var(--note-text-color);
background: var(--note-background);
}
-div.book .warning,
-div.book .caution,
-div.appendix .warning,
-div.appendix .caution {
- color: var(--warning-text-color);
- background-color: var(--warning-background);
+.tip {
+ color: var(--tip-text-color);
+ background: var(--tip-background);
}
-div.book .section,
-div.appendix .section {
- margin-top: 2em;
+.important {
+ color: var(--important-text-color);
+ background: var(--important-background);
+}
+
+.warning {
+ color: var(--warning-text-color);
+ background: var(--warning-background);
+}
+
+.caution {
+ color: var(--caution-text-color);
+ background: var(--caution-background);
}
div.book div.example,
@@ -387,39 +359,13 @@ div.appendix dt {
margin-top: 1em;
}
-div.book .toc dt,
-div.appendix .toc dt {
- margin-top: 0;
-}
-
-div.book .list-of-examples dt,
-div.appendix .list-of-examples dt {
- margin-top: 0;
-}
-
div.book code,
div.appendix code {
- padding: 0;
- border: 0;
- background-color: inherit;
- color: inherit;
- font-size: 100%;
-webkit-hyphens: none;
-moz-hyphens: none;
hyphens: none;
}
-div.book div.toc,
-div.appendix div.toc {
- margin-bottom: 3em;
- border-bottom: 0.0625rem solid #d8d8d8;
-}
-
-div.book div.toc dd,
-div.appendix div.toc dd {
- margin-left: 2em;
-}
-
div.book span.command,
div.appendix span.command {
font-family: monospace;
@@ -450,17 +396,31 @@ div.appendix .variablelist .term {
}
:root {
+ --sidebar-width: 20rem;
+ --header-height: 3rem;
--background: #fff;
--main-text-color: #000;
--link-color: #405d99;
--heading-color: #6586c8;
--small-heading-color: #6a6a6a;
- --note-text-color: #5277c3;
- --note-background: #f2f8fd;
- --warning-text-color: #cc3900;
- --warning-background: #fff5e1;
+ /* NOTE */
+ --note-text-color: #0065d2;
+ --note-background: #e4f5ff;
+ /* TIP */
+ --tip-text-color: #188000;
+ --tip-background: #e8fae3;
+ /* IMPORTANT */
+ --important-text-color: #8a3db8;
+ --important-background: #fbedff;
+ /* WARNING */
+ --warning-text-color: #aa4a00;
+ --warning-background: #fff0db;
+ /* CAUTION */
+ --caution-text-color: #be222a;
+ --caution-background: #ffebe8;
--codeblock-background: #f2f8fd;
--codeblock-text-color: #000;
+ --inline-code-background: #818b981f;
}
@media (prefers-color-scheme: dark) {
@@ -469,20 +429,27 @@ div.appendix .variablelist .term {
--main-text-color: #fff;
--link-color: #6586c8;
--small-heading-color: #fff;
- --note-background: none;
- --warning-background: none;
+ /* NOTE */
+ --note-text-color: #66c6ff;
+ --note-background: #1e2f44;
+ /* TIP */
+ --tip-text-color: #80e05f;
+ --tip-background: #22331d;
+ /* IMPORTANT */
+ --important-text-color: #ea9dff;
+ --important-background: #35273f;
+ /* WARNING */
+ --warning-text-color: #ffaa00;
+ --warning-background: #3c2a13;
+ /* CAUTION */
+ --caution-text-color: #ff8c84;
+ --caution-background: #422522;
--codeblock-background: #393939;
--codeblock-text-color: #fff;
+ --inline-code-background: #656c7633;
}
- div.book .note,
- div.book .tip,
- div.appendix .note,
- div.appendix .tip,
- div.book .warning,
- div.book .caution,
- div.appendix .warning,
- div.appendix .caution {
+ :is(.note, .tip, .warning, .caution, .important) {
border: 2px solid;
font-weight: 400;
}
@@ -490,9 +457,241 @@ div.appendix .variablelist .term {
@font-face {
font-family: Roboto;
- src: url(Roboto.ttf);
+ src:
+ url(Roboto.ttf) format("truetype") tech(variations),
+ url(Roboto.ttf) format("truetype-variations");
+ font-weight: 100 900;
+ font-style: normal;
+ font-display: swap;
}
.chapter {
content-visibility: auto;
}
+
+.navheader {
+ position: sticky;
+ top: 0;
+ z-index: 1;
+ background-color: var(--background);
+}
+
+nav.toc-sidebar {
+ height: 100%;
+ padding: 0 1rem 2rem;
+ background-color: var(--background);
+ color: var(--main-text-color);
+}
+
+/* menu button, shown on mobile, hidden on desktop */
+.toc-toggle {
+ display: inline-flex;
+ align-items: center;
+ margin: 0.75rem 0 0;
+ padding: 0.4rem 0.8rem;
+ border: 0.0625rem solid #d8d8d8;
+ border-radius: 0.25rem;
+ background: var(--background);
+ color: var(--main-text-color);
+ font: inherit;
+ cursor: pointer;
+ position: fixed;
+ top: 0.5rem;
+ left: 0.8rem;
+ z-index: 2;
+}
+
+nav.toc-sidebar .toc {
+ margin-bottom: 0;
+}
+
+nav.toc-sidebar ol.toc,
+nav.toc-sidebar ol.toc ol {
+ list-style: none;
+ margin: 0;
+ padding-left: 0;
+}
+
+nav.toc-sidebar ol.toc ol {
+ padding-left: 1em;
+}
+
+nav.toc-sidebar li {
+ margin: 0;
+}
+
+nav.toc-sidebar summary {
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ list-style: none;
+}
+
+nav.toc-sidebar summary::before {
+ content: "▸";
+ flex: none;
+ font-size: 0.75em;
+}
+nav.toc-sidebar details[open] > summary::before {
+ content: "▾";
+}
+
+nav.toc-sidebar a {
+ display: block;
+ width: 100%;
+ padding: 3px 8px;
+ border-left: 3px solid transparent;
+ border-radius: 3px;
+ color: inherit;
+ transition:
+ background-color 120ms ease,
+ border-color 120ms ease;
+}
+nav.toc-sidebar a:hover {
+ background-color: #f2f2f2 !important;
+}
+
+nav.toc-sidebar a.active {
+ background-color: #d8d8d8;
+ border-left-color: #444;
+ font-weight: 600;
+}
+nav.toc-sidebar a.active-trail {
+ border-left-color: #bbb;
+ background-color: #e8e8e8;
+}
+
+@media (prefers-color-scheme: dark) {
+ nav.toc-sidebar a:hover {
+ /* hover should win over scroll selectors despite beeing less specific */
+ background-color: #606060 !important;
+ }
+ nav.toc-sidebar a.active {
+ background-color: #373737;
+ border-left-color: #eee;
+ font-weight: 600;
+ }
+ nav.toc-sidebar a.active-trail {
+ border-left-color: #eee;
+ background-color: #323232;
+ }
+}
+
+@media screen and (min-width: 768px) {
+ body {
+ height: 100vh;
+ min-height: 0;
+ display: grid;
+ grid-template-columns: minmax(0, 1fr);
+ grid-template-rows: var(--header-height) auto minmax(0, 1fr);
+ }
+
+ body:has(> nav.toc-sidebar) {
+ grid-template-columns: var(--sidebar-width) minmax(0, 1fr);
+ }
+
+ .navheader {
+ grid-column: 1 / -1;
+ grid-row: 2;
+ }
+
+ nav.toc-sidebar {
+ /* un-pop the drawer */
+ display: block;
+ position: static;
+ inset: auto;
+ /* */
+ margin: 0;
+ grid-column: 1;
+ grid-row: 3;
+ max-height: none;
+ overflow-y: auto;
+ border: none;
+ }
+
+ /* Hide the toggle button on desktop */
+ .toc-toggle {
+ display: none;
+ }
+
+ main.content {
+ grid-column: 1 / -1;
+ grid-row: 3;
+ overflow-y: auto;
+ padding: 0 1rem;
+ }
+
+ body:has(> nav.toc-sidebar) main.content {
+ grid-column: 2;
+ }
+}
+
+.manual-header {
+ background-color: var(--background);
+ border-bottom: 0.0625rem solid #d8d8d8;
+ display: flex;
+ flex-direction: column;
+}
+
+.manual-header--title {
+ order: -1;
+ padding: 0.5rem 1rem 0;
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: var(--small-heading-color);
+ text-align: center;
+}
+
+.manual-header--tabs {
+ display: flex;
+ align-items: stretch;
+ justify-content: space-around;
+ margin: 0;
+ padding: 0;
+}
+
+.manual-header--tab {
+ display: flex;
+ align-items: center;
+ padding: 0 1rem;
+ font-size: 0.875rem;
+ font-weight: 500;
+ color: var(--main-text-color);
+ text-decoration: none;
+ border-bottom: 0.1875rem solid transparent;
+ border-top: 0.1875rem solid transparent;
+ transition: border-bottom-color 0.15s ease;
+}
+
+.manual-header--tab:hover {
+ border-bottom-color: var(--heading-color);
+ color: var(--main-text-color);
+}
+
+.manual-header--tab-active {
+ border-bottom-color: var(--heading-color);
+ color: var(--heading-color);
+ font-weight: 700;
+}
+
+@media screen and (min-width: 768px) {
+ .manual-header {
+ height: var(--header-height);
+ flex-direction: row;
+ align-items: stretch;
+ grid-column: 1 / -1;
+ grid-row: 1;
+ }
+
+ .manual-header--title {
+ order: 0;
+ margin-left: auto;
+ padding: 0 1rem;
+ align-self: center;
+ }
+
+ .manual-header--tabs {
+ justify-content: flex-start;
+ padding: 0 1rem;
+ }
+}
diff --git a/doc/using-nixpkgs.md b/doc/using-nixpkgs.md
index f850b2e83c28..a8546d0cc0f1 100644
--- a/doc/using-nixpkgs.md
+++ b/doc/using-nixpkgs.md
@@ -1,6 +1,7 @@
# Using Nixpkgs {#part-using}
```{=include=} chapters
+channels.chapter.md
using/platform-support.chapter.md
using/configuration.chapter.md
using/overlays.chapter.md
diff --git a/doc/using/platform-support.chapter.md b/doc/using/platform-support.chapter.md
index d5a985c90d35..4422694e6288 100644
--- a/doc/using/platform-support.chapter.md
+++ b/doc/using/platform-support.chapter.md
@@ -1,16 +1,16 @@
# Platform Support {#chap-platform-support}
-Packages receive varying degrees of support, both in terms of maintainer attention and available computation resources for continuous integration (CI). We have 7 defined tiers denoting how well supported each platform is.
+Packages receive varying degrees of support, both in terms of maintainer and security team attention and available computation resources for continuous integration (CI). We have 7 defined tiers denoting how well supported each platform is.
## Tiers {#sec-platform-tiers}
### Tier 1 {#sec-platform-tier1}
-[Tier 1](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-1) platforms receive the highest level of support where problems can block updates, platform-specific patches are freely applied, and most packages are expected to work.
+[Tier 1](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-1) platforms receive the highest level of support where problems can block updates, security fixes are treated with urgency, platform-specific patches are freely applied, and most packages are expected to work.
### Tier 2 {#sec-platform-tier2}
-[Tier 2](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-2) platforms are expected to remain functional with updates, receive platform-specific patches as needed, and have many packages built by Hydra with full ofBorg support.
+[Tier 2](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-2) platforms are expected to remain functional and secure with updates, receive platform-specific patches as needed, and have many packages built by Hydra with full ofBorg support.
### Tier 3 {#sec-platform-tier3}
@@ -22,28 +22,25 @@ Platform Tiers [4 through 7](https://github.com/NixOS/rfcs/blob/master/rfcs/0046
## Breakdown {#sec-platform-breakdown}
-| Triple | Support Tier | Channel Blockers | Hydra Support | Ofborg Support | Bootstrap Tarballs | Cross Compiling Support |
-| ------------------------------------- | ------------ | ---------------- | ------------- | -------------- | ------------------ | ----------------------- |
-| `x86_64-unknown-linux-gnu` | [Tier 1](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-1) | Many | ✔️ | ✔️ | ✔️ | ✔️ |
-| `aarch64-unknown-linux-gnu` | [Tier 2](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-2) | Some | ✔️ | ✔️ | ✔️ | ✔️ |
-| `x86_64-unknown-linux-musl` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | Limited | ❌ | ✔️ | ✔️ |
-| `aarch64-unknown-linux-musl` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | Limited | ❌ | ✔️ | ✔️ |
-| `x86_64-unknown-unknown-freebsd` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-| `arm64-apple-darwin` | [Tier 2](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-2) | Some | ✔️ | ✔️ | ✔️ | ❌\* |
-| `x86_64-apple-darwin` | [Tier 2](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-2) | Some | ✔️ | ✔️ | ✔️ | ❌\* |
-| `i686-unknown-linux-gnu` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | Limited | ❌ | ✔️ | ✔️ |
-| `riscv32-unknown-linux-gnu` | [Tier 4](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-4) | None | ❌ | ❌ | ❌ | ✔️ |
-| `riscv64-unknown-linux-gnu` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-| `loongarch64-unknown-linux-gnu` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-| `armv6l-unknown-linux-gnueabihf` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-| `armv6l-unknown-linux-musleabihf` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-| `armv7l-unknown-linux-gnueabihf` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-| `armv5tel-unknown-linux-gnueabi` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-| `mips64el-unknown-linux-gnuabi64` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-| `mips64el-unknown-linux-gnuabin32` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-| `mipsel-unknown-linux-gnu` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-| `powerpc64-unknown-linux-gnuabielfv2` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-| `powerpc64le-unknown-linux-gnu` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-| `s390x-unknown-linux-gnu` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ✔️ | ✔️ |
-
-\* - Cross compiling is only supported on Darwin hosts.
+| Triple | Support Tier | Channel Blockers | Hydra Support | Security Support | Ofborg Support | Bootstrap Tarballs | Cross Compiling Support |
+|---------------------------------------|------------------------------------------------------------------------------------------------|------------------|---------------|------------------|----------------|--------------------|-------------------------|
+| `x86_64-unknown-linux-gnu` | [Tier 1](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-1) | Many | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| `aarch64-unknown-linux-gnu` | [Tier 2](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-2) | Some | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| `x86_64-unknown-linux-musl` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | Limited | ❌ | ❌ | ✔️ | ✔️ |
+| `aarch64-unknown-linux-musl` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | Limited | ❌ | ❌ | ✔️ | ✔️ |
+| `x86_64-unknown-unknown-freebsd` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
+| `arm64-apple-darwin` | [Tier 2](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-2) | Some | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
+| `i686-unknown-linux-gnu` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | Limited | ❌ | ❌ | ✔️ | ✔️ |
+| `riscv32-unknown-linux-gnu` | [Tier 4](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-4) | None | ❌ | ❌ | ❌ | ❌ | ✔️ |
+| `riscv64-unknown-linux-gnu` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
+| `loongarch64-unknown-linux-gnu` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
+| `armv6l-unknown-linux-gnueabihf` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
+| `armv6l-unknown-linux-musleabihf` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
+| `armv7l-unknown-linux-gnueabihf` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
+| `armv5tel-unknown-linux-gnueabi` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
+| `mips64el-unknown-linux-gnuabi64` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
+| `mips64el-unknown-linux-gnuabin32` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
+| `mipsel-unknown-linux-gnu` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
+| `powerpc64-unknown-linux-gnuabielfv2` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
+| `powerpc64le-unknown-linux-gnu` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
+| `s390x-unknown-linux-gnu` | [Tier 3](https://github.com/NixOS/rfcs/blob/master/rfcs/0046-platform-support-tiers.md#tier-3) | None | ❌ | ❌ | ❌ | ✔️ | ✔️ |
diff --git a/flake.nix b/flake.nix
index b8e348845bc8..6c3321e8c7fe 100644
--- a/flake.nix
+++ b/flake.nix
@@ -220,17 +220,25 @@
evaluation. Evaluating the attribute value tends to require a significant
amount of computation, even considering lazy evaluation.
*/
- legacyPackages = forAllSystems (
- system:
- (import ./. {
- inherit system;
- overlays = import ./pkgs/top-level/impure-overlays.nix ++ [
- (final: prev: {
- lib = prev.lib.extend libVersionInfoOverlay;
- })
- ];
- })
- );
+ legacyPackages =
+ let
+ # We include `x86_64-darwin` here to ensure that users get a
+ # good error message for the 26.11 deprecation of the platform,
+ # while excluding it from `lib.systems.flakeExposed` so that we
+ # don’t break `nix flake check` for downstream users.
+ forAllSystems' = lib.genAttrs (lib.systems.flakeExposed ++ [ "x86_64-darwin" ]);
+ in
+ forAllSystems' (
+ system:
+ (import ./. {
+ inherit system;
+ overlays = import ./pkgs/top-level/impure-overlays.nix ++ [
+ (final: prev: {
+ lib = prev.lib.extend libVersionInfoOverlay;
+ })
+ ];
+ })
+ );
/**
Optional modules that can be imported into a NixOS configuration.
diff --git a/lib/attrsets.nix b/lib/attrsets.nix
index 7dae595c9e39..d006ed79a2ae 100644
--- a/lib/attrsets.nix
+++ b/lib/attrsets.nix
@@ -5,7 +5,6 @@
let
inherit (builtins) head length;
- inherit (lib.trivial) mergeAttrs;
inherit (lib.strings)
concatStringsSep
concatMapStringsSep
@@ -13,16 +12,18 @@ let
sanitizeDerivationName
;
inherit (lib.lists)
- filter
- foldr
- foldl'
+ all
+ concatLists
concatMap
elemAt
- all
- partition
- groupBy
- take
+ filter
foldl
+ foldl'
+ foldr
+ groupBy
+ partition
+ reverseList
+ take
;
in
@@ -370,7 +371,11 @@ rec {
:::
*/
- concatMapAttrs = f: v: foldl' mergeAttrs { } (attrValues (mapAttrs f v));
+ concatMapAttrs =
+ f: v:
+ listToAttrs (
+ concatLists (reverseList (mapAttrsToList (name: value: attrsToList (f name value)) v))
+ );
/**
Update or set specific paths of an attribute set.
@@ -1135,7 +1140,7 @@ rec {
For a function that gives you control over what counts as a leaf, see `mapAttrsRecursiveCond`.
- :::{#map-attrs-recursive-example .example}
+ ::: {.example #map-attrs-recursive-example}
# Map over leaf attributes
```nix
@@ -1160,7 +1165,7 @@ rec {
If the predicate returns false, `mapAttrsRecursiveCond` does not recurse, but instead applies the mapping function.
If the predicate returns true, it does recurse, and does not apply the mapping function.
- :::{#map-attrs-recursive-cond-example .example}
+ ::: {.example #map-attrs-recursive-cond-example}
# Map over an leaf attributes defined by a condition
Map derivations to their `name` attribute.
@@ -1800,22 +1805,28 @@ rec {
:::
*/
matchAttrs =
- pattern: attrs:
+ let
+ recurse =
+ pattern: attrs:
+ all (
+ # Compare equality between `pattern` & `attrs`.
+ attr:
+ # Missing attr, not equal.
+ attrs ? ${attr}
+ && (
+ let
+ lhs = pattern.${attr};
+ rhs = attrs.${attr};
+ in
+ # Simple equality check is primarily for non-attrsets, but we run it
+ # on attrsets too, since it may let us avoid recursing
+ lhs == rhs || isAttrs lhs && isAttrs rhs && recurse lhs rhs
+ )
+ ) (attrNames pattern);
+ in
+ pattern:
assert isAttrs pattern;
- all (
- # Compare equality between `pattern` & `attrs`.
- attr:
- # Missing attr, not equal.
- attrs ? ${attr}
- && (
- let
- lhs = pattern.${attr};
- rhs = attrs.${attr};
- in
- # If attrset check recursively
- if isAttrs lhs then isAttrs rhs && matchAttrs lhs rhs else lhs == rhs
- )
- ) (attrNames pattern);
+ recurse pattern;
/**
Override only the attributes that are already present in the old set
diff --git a/lib/cli.nix b/lib/cli.nix
index 37f9e270a313..fe2a03a7beef 100644
--- a/lib/cli.nix
+++ b/lib/cli.nix
@@ -1,6 +1,22 @@
{ lib }:
-{
+let
+ inherit (lib)
+ concatLists
+ concatMap
+ escapeShellArgs
+ isBool
+ isList
+ mapAttrsToList
+ oldestSupportedReleaseIsAtLeast
+ optional
+ stringLength
+ warnIf
+ ;
+ inherit (lib.generators) mkValueStringDefault;
+ mkValueString = mkValueStringDefault { };
+in
+rec {
/**
Automatically convert an attribute set to command-line options.
@@ -40,9 +56,9 @@
:::
*/
toGNUCommandLineShell =
- lib.warnIf (lib.oldestSupportedReleaseIsAtLeast 2511)
+ warnIf (oldestSupportedReleaseIsAtLeast 2511)
"lib.cli.toGNUCommandLineShell is deprecated, please use lib.cli.toCommandLineShell or lib.cli.toCommandLineShellGNU instead."
- (options: attrs: lib.escapeShellArgs (lib.cli.toGNUCommandLine options attrs));
+ (options: attrs: escapeShellArgs (toGNUCommandLine options attrs));
/**
Automatically convert an attribute set to a list of command-line options.
@@ -116,15 +132,15 @@
:::
*/
toGNUCommandLine =
- lib.warnIf (lib.oldestSupportedReleaseIsAtLeast 2511)
+ warnIf (oldestSupportedReleaseIsAtLeast 2511)
"lib.cli.toGNUCommandLine is deprecated, please use lib.cli.toCommandLine or lib.cli.toCommandLineShellGNU instead."
(
{
- mkOptionName ? k: if builtins.stringLength k == 1 then "-${k}" else "--${k}",
+ mkOptionName ? k: if stringLength k == 1 then "-${k}" else "--${k}",
- mkBool ? k: v: lib.optional v (mkOptionName k),
+ mkBool ? k: v: optional v (mkOptionName k),
- mkList ? k: v: lib.concatMap (mkOption k) v,
+ mkList ? k: concatMap (mkOption k),
mkOption ?
k: v:
@@ -133,26 +149,24 @@
else if optionValueSeparator == null then
[
(mkOptionName k)
- (lib.generators.mkValueStringDefault { } v)
+ (mkValueString v)
]
else
- [ "${mkOptionName k}${optionValueSeparator}${lib.generators.mkValueStringDefault { } v}" ],
+ [ "${mkOptionName k}${optionValueSeparator}${mkValueString v}" ],
optionValueSeparator ? null,
}:
- options:
let
render =
k: v:
- if builtins.isBool v then
+ if isBool v then
mkBool k v
- else if builtins.isList v then
+ else if isList v then
mkList k v
else
mkOption k v;
-
in
- builtins.concatLists (lib.mapAttrsToList render options)
+ options: concatLists (mapAttrsToList render options)
);
/**
@@ -163,8 +177,7 @@
For further reference see:
[`lib.cli.toCommandLineGNU`](#function-library-lib.cli.toCommandLineGNU)
*/
- toCommandLineShellGNU =
- options: attrs: lib.escapeShellArgs (lib.cli.toCommandLineGNU options attrs);
+ toCommandLineShellGNU = options: attrs: escapeShellArgs (toCommandLineGNU options attrs);
/**
Converts an attribute set into a list of GNU-style command-line arguments.
@@ -227,9 +240,9 @@
*/
toCommandLineGNU =
{
- isLong ? optionName: builtins.stringLength optionName > 1,
+ isLong ? optionName: stringLength optionName > 1,
explicitBool ? false,
- formatArg ? lib.generators.mkValueStringDefault { },
+ formatArg ? mkValueString,
}:
let
optionFormat = optionName: {
@@ -238,7 +251,7 @@
inherit explicitBool formatArg;
};
in
- lib.cli.toCommandLine optionFormat;
+ toCommandLine optionFormat;
/**
Converts the given attributes into a single shell-escaped command-line
@@ -248,8 +261,7 @@
For further reference see:
[`lib.cli.toCommandLine`](#function-library-lib.cli.toCommandLine)
*/
- toCommandLineShell =
- optionFormat: attrs: lib.escapeShellArgs (lib.cli.toCommandLine optionFormat attrs);
+ toCommandLineShell = optionFormat: attrs: escapeShellArgs (toCommandLine optionFormat attrs);
/**
Converts an attribute set into a list of command-line arguments.
@@ -421,14 +433,14 @@
- `lib.cli.toCommandLineShellGNU`
*/
toCommandLine =
- optionFormat: attrs:
+ optionFormat:
let
handlePair =
k: v:
if k == "" then
- lib.throw "lib.cli.toCommandLine only accepts non-empty option names."
- else if builtins.isList v then
- builtins.concatMap (handleOption k) v
+ throw "lib.cli.toCommandLine only accepts non-empty option names."
+ else if isList v then
+ concatMap (handleOption k) v
else
handleOption k v;
@@ -439,7 +451,7 @@
option,
sep,
explicitBool,
- formatArg ? lib.generators.mkValueStringDefault { },
+ formatArg ? mkValueString,
}:
k: v:
if v == null || (!explicitBool && v == false) then
@@ -458,5 +470,5 @@
arg
];
in
- builtins.concatLists (lib.mapAttrsToList handlePair attrs);
+ attrs: concatLists (mapAttrsToList handlePair attrs);
}
diff --git a/lib/customisation.nix b/lib/customisation.nix
index 9bb7e01d8f13..883f99928a49 100644
--- a/lib/customisation.nix
+++ b/lib/customisation.nix
@@ -564,7 +564,7 @@ rec {
# Examples
- :::{#ex-makeScope .example}
+ :::{.example #ex-makeScope}
# Create an interdependent package set on top of `pkgs`
The functions in `foo.nix` and `bar.nix` can depend on each other, in the sense that `foo.nix` can contain a function that expects `bar` as an attribute in its argument.
@@ -593,7 +593,7 @@ rec {
```
:::
- :::{#ex-makeScope-callPackage .example}
+ :::{.example #ex-makeScope-callPackage}
# Using `callPackage` from a scope
```nix
diff --git a/lib/derivations.nix b/lib/derivations.nix
index 053625a2be0e..15c3495163a8 100644
--- a/lib/derivations.nix
+++ b/lib/derivations.nix
@@ -6,7 +6,6 @@ let
isString
mapAttrs
removeAttrs
- throwIfNot
;
showMaybeAttrPosPre =
@@ -108,18 +107,18 @@ in
# attrset spine returned by lazyDerivation does not depend on it.
# Instead, the individual derivation attributes do depend on it.
checked =
- throwIfNot (derivation.type or null == "derivation") "lazyDerivation: input must be a derivation."
- throwIfNot
- # NOTE: Technically we could require our outputs to be a subset of the
- # actual ones, or even leave them unchecked and fail on a lazy basis.
- # However, consider the case where an output is added in the underlying
- # derivation, such as dev. lazyDerivation would remove it and cause it
- # to fail as a buildInputs item, without any indication as to what
- # happened. Hence the more stringent condition. We could consider
- # adding a flag to control this behavior if there's a valid case for it,
- # but the documentation must have a note like this.
- (derivation.outputs == outputs)
- ''
+ if derivation.type or null != "derivation" then
+ throw "lazyDerivation: input must be a derivation."
+ # NOTE: Technically we could require our outputs to be a subset of the
+ # actual ones, or even leave them unchecked and fail on a lazy basis.
+ # However, consider the case where an output is added in the underlying
+ # derivation, such as dev. lazyDerivation would remove it and cause it
+ # to fail as a buildInputs item, without any indication as to what
+ # happened. Hence the more stringent condition. We could consider
+ # adding a flag to control this behavior if there's a valid case for it,
+ # but the documentation must have a note like this.
+ else if derivation.outputs != outputs then
+ throw ''
lib.lazyDerivation: The derivation ${derivation.name or ""} has outputs that don't match the assumed outputs.
Assumed outputs passed to lazyDerivation${showMaybeAttrPosPre ",\n at " "outputs" args}:
@@ -142,6 +141,7 @@ in
If none of the above works for you, replace the lib.lazyDerivation call by the
expression in the derivation argument.
''
+ else
derivation;
in
{
diff --git a/lib/fetchers.nix b/lib/fetchers.nix
index 0f4192cc6822..24f257a1f883 100644
--- a/lib/fetchers.nix
+++ b/lib/fetchers.nix
@@ -22,7 +22,6 @@ let
concatMapStringsSep
head
length
- throwIf
;
inherit (lib.attrsets)
attrsToList
@@ -130,7 +129,7 @@ rec {
hashesAsNVPairs = attrsToList (intersectAttrs hashSet args);
in
if hashesAsNVPairs == [ ] then
- throwIf required "fetcher called without `hash`" null
+ if required then throw "fetcher called without `hash`" else null
else if length hashesAsNVPairs != 1 then
throw "fetcher called with mutually-incompatible arguments: ${
concatMapStringsSep ", " (a: a.name) hashesAsNVPairs
diff --git a/lib/generators.nix b/lib/generators.nix
index 0e15a56db312..d20abb6264ab 100644
--- a/lib/generators.nix
+++ b/lib/generators.nix
@@ -24,7 +24,6 @@ let
inherit (lib)
addErrorContext
any
- assertMsg
attrNames
attrValues
concatLists
@@ -64,7 +63,6 @@ let
reverseList
splitString
tail
- toList
;
inherit (lib.strings)
@@ -849,7 +847,7 @@ rec {
_type == "lua-inline";
generatedBindings =
- assert assertMsg (badVarNames == [ ]) "Bad Lua var names: ${toPretty { } badVarNames}";
+ assert badVarNames == [ ] || throw "Bad Lua var names: ${toPretty { } badVarNames}";
concatStrings (mapAttrsToList (key: value: "${indent}${key} = ${toLua innerArgs value}\n") v);
# https://en.wikibooks.org/wiki/Lua_Programming/variable#Variable_names
diff --git a/lib/gvariant.nix b/lib/gvariant.nix
index f64808347ee8..d47d5120ef9a 100644
--- a/lib/gvariant.nix
+++ b/lib/gvariant.nix
@@ -191,10 +191,15 @@ rec {
mkArray =
elems:
let
- vs = map mkValue (lib.throwIf (elems == [ ]) "Please create empty array with mkEmptyArray." elems);
- elemType = lib.throwIfNot (lib.all (t: (head vs).type == t) (
- map (v: v.type) vs
- )) "Elements in a list should have same type." (head vs).type;
+ vs = map mkValue (
+ if elems == [ ] then throw "Please create empty array with mkEmptyArray." else elems
+ );
+ firstType = (head vs).type;
+ elemType =
+ if lib.any (v: v.type != firstType) vs then
+ throw "Elements in a list should have same type."
+ else
+ firstType;
in
mkPrimitive (type.arrayOf elemType) vs
// {
diff --git a/lib/licenses/licenses.nix b/lib/licenses/licenses.nix
index 282b41b6f3b4..01f530fa8044 100644
--- a/lib/licenses/licenses.nix
+++ b/lib/licenses/licenses.nix
@@ -310,6 +310,11 @@ lib.mapAttrs mkLicense (
redistributable = true;
};
+ buddy = {
+ spdxId = "Buddy";
+ fullName = "Buddy License";
+ };
+
bzip2 = {
spdxId = "bzip2-1.0.6";
fullName = "bzip2 and libbzip2 License v1.0.6";
@@ -382,6 +387,13 @@ lib.mapAttrs mkLicense (
free = false;
};
+ cc-by-nc-30-igo = {
+ # Currently does not have a spdxID will get one in the future https://github.com/spdx/license-list-XML/issues/2845
+ # spdxId = "CC-BY-NC-3.0-IGO";
+ fullName = "Creative Commons Attribution Non Commercial 3.0 IGO";
+ free = false;
+ };
+
cc-by-nc-40 = {
spdxId = "CC-BY-NC-4.0";
fullName = "Creative Commons Attribution Non Commercial 4.0 International";
@@ -926,6 +938,11 @@ lib.mapAttrs mkLicense (
free = false;
};
+ jpl-image = {
+ fullName = "JPL Image Use Policy";
+ spdxId = "JPL-image";
+ };
+
knuth = {
fullName = "Knuth CTAN License";
spdxId = "Knuth-CTAN";
@@ -1052,6 +1069,11 @@ lib.mapAttrs mkLicense (
fullName = "MIT License";
};
+ mit-click = {
+ spdxId = "MIT-Click";
+ fullName = "MIT Click License";
+ };
+
mit-cmu = {
spdxId = "MIT-CMU";
fullName = "CMU License";
@@ -1168,6 +1190,11 @@ lib.mapAttrs mkLicense (
fullName = "Nethack General Public License";
};
+ ngrep = {
+ spdxId = "ngrep";
+ fullName = "ngrep License";
+ };
+
nistSoftware = {
spdxId = "NIST-Software";
fullName = "NIST Software License";
@@ -1323,6 +1350,17 @@ lib.mapAttrs mkLicense (
fullName = "Qwt exception 1.0";
};
+ reticulum = {
+ # The Reticulum License restricts certain fields of use, notably systems
+ # intended to harm human beings and AI/ML training datasets. Such usage
+ # restrictions are incompatible with the Open Source Definition
+ # (https://opensource.org/osd), in particular "No Discrimination Against
+ # Fields of Endeavor".
+ free = false;
+ fullName = "Reticulum License";
+ url = "https://reticulum.network/license";
+ };
+
ruby = {
spdxId = "Ruby";
fullName = "Ruby License";
@@ -1590,6 +1628,11 @@ lib.mapAttrs mkLicense (
url = "https://fedoraproject.org/wiki/Licensing:Wadalab?rd=Licensing/Wadalab";
};
+ wordnet = {
+ spdxId = "WordNet";
+ fullName = "WordNet License";
+ };
+
wtfpl = {
spdxId = "WTFPL";
fullName = "Do What The F*ck You Want To Public License";
diff --git a/lib/lists.nix b/lib/lists.nix
index abd9aceed0e3..e2e24244ff28 100644
--- a/lib/lists.nix
+++ b/lib/lists.nix
@@ -6,12 +6,12 @@ let
inherit (lib.strings) toInt;
inherit (lib.trivial)
compare
- min
id
+ min
+ seq
warn
;
inherit (lib.attrsets) mapAttrs attrNames attrValues;
- inherit (lib) max;
in
rec {
@@ -276,11 +276,14 @@ rec {
:::
*/
foldl' =
+ let
+ inherit (builtins) foldl';
+ in
op: acc:
# The builtin `foldl'` is a bit lazier than one might expect.
# See https://github.com/NixOS/nix/pull/7158.
# In particular, the initial accumulator value is not forced before the first iteration starts.
- builtins.seq acc (builtins.foldl' op acc);
+ seq acc (foldl' op acc);
/**
Map with index starting from 0
@@ -442,7 +445,7 @@ rec {
:::
*/
- flatten = x: if isList x then concatMap (y: flatten y) x else [ x ];
+ flatten = x: if isList x then concatMap flatten x else [ x ];
/**
Remove elements equal to `e` from a list. Useful for `buildInputs`.
@@ -1122,9 +1125,10 @@ rec {
reverseList =
xs:
let
- l = length xs;
+ # subtract one to save an __sub call on every element
+ lastIndex = length xs - 1;
in
- genList (n: elemAt xs (l - n - 1)) l;
+ genList (n: elemAt xs (lastIndex - n)) (lastIndex + 1);
/**
Depth-First Search (DFS) for lists `list != []`.
@@ -1181,13 +1185,13 @@ rec {
c = filter (x: before x us) visited;
b = partition (x: before x us) rest;
in
- if stopOnCycles && (length c > 0) then
+ if stopOnCycles && c != [ ] then
{
cycle = us;
loops = c;
inherit visited rest;
}
- else if length b.right == 0 then
+ else if b.right == [ ] then
# nothing is before us
{
minimal = us;
@@ -1244,27 +1248,33 @@ rec {
:::
*/
toposort =
- before: list:
+ before:
let
- dfsthis = listDfs true before list;
- toporest = toposort before (dfsthis.visited ++ dfsthis.rest);
+ dfs = listDfs true before;
+ recurse =
+ list:
+ let
+ dfsthis = dfs list;
+ toporest = recurse (dfsthis.visited ++ dfsthis.rest);
+ in
+ if length list < 2 then
+ # finish
+ { result = list; }
+ else if dfsthis ? cycle then
+ # there's a cycle, starting from the current vertex, return it
+ {
+ cycle = reverseList dfsthis.visited ++ [ dfsthis.cycle ];
+ inherit (dfsthis) loops;
+ }
+ else if toporest ? cycle then
+ # there's a cycle somewhere else in the graph, return it
+ toporest
+ # Slow, but short. Can be made a bit faster with an explicit stack.
+ else
+ # there are no cycles
+ { result = [ dfsthis.minimal ] ++ toporest.result; };
in
- if length list < 2 then
- # finish
- { result = list; }
- else if dfsthis ? cycle then
- # there's a cycle, starting from the current vertex, return it
- {
- cycle = reverseList ([ dfsthis.cycle ] ++ dfsthis.visited);
- inherit (dfsthis) loops;
- }
- else if toporest ? cycle then
- # there's a cycle somewhere else in the graph, return it
- toporest
- # Slow, but short. Can be made a bit faster with an explicit stack.
- else
- # there are no cycles
- { result = [ dfsthis.minimal ] ++ toporest.result; };
+ recurse;
/**
Sort a list based on a comparator function which compares two
@@ -1504,7 +1514,12 @@ rec {
:::
*/
- take = count: sublist 0 count;
+ take =
+ count: list:
+ let
+ len = length list;
+ in
+ genList (elemAt list) (if count > len then len else count);
/**
Returns the last (at most) N elements of a list.
@@ -1538,7 +1553,13 @@ rec {
:::
*/
- takeEnd = n: xs: drop (max 0 (length xs - n)) xs;
+ takeEnd =
+ count: list:
+ let
+ len = length list;
+ start = if count > len then 0 else len - count;
+ in
+ genList (i: elemAt list (start + i)) (if start > len then 0 else len - start);
/**
Remove the first (at most) N elements of a list.
@@ -1572,7 +1593,12 @@ rec {
:::
*/
- drop = count: list: sublist count (length list) list;
+ drop =
+ count: list:
+ let
+ len = length list;
+ in
+ genList (n: elemAt list (n + count)) (if count > len then 0 else len - count);
/**
Remove the last (at most) N elements of a list.
@@ -1606,7 +1632,19 @@ rec {
```
:::
*/
- dropEnd = n: xs: take (max 0 (length xs - n)) xs;
+ dropEnd =
+ n: list:
+ let
+ len = length list;
+ in
+ genList (elemAt list) (
+ if n > len then
+ 0
+ else if n < 0 then
+ len
+ else
+ len - n
+ );
/**
Whether the first list is a prefix of the second list.
@@ -1810,7 +1848,7 @@ rec {
*/
last =
list:
- assert lib.assertMsg (list != [ ]) "lists.last: list must not be empty!";
+ assert list != [ ] || throw "lists.last: list must not be empty!";
elemAt list (length list - 1);
/**
@@ -1843,8 +1881,8 @@ rec {
*/
init =
list:
- assert lib.assertMsg (list != [ ]) "lists.init: list must not be empty!";
- take (length list - 1) list;
+ assert list != [ ] || throw "lists.init: list must not be empty!";
+ genList (elemAt list) (length list - 1);
/**
Returns the image of the cross product of some lists by a function.
@@ -2119,7 +2157,8 @@ rec {
*/
replaceElemAt =
list: idx: newElem:
- assert lib.assertMsg (idx >= 0 && idx < length list)
- "'lists.replaceElemAt' called with index ${toString idx} on a list of size ${toString (length list)}";
+ assert
+ idx >= 0 && idx < length list
+ || throw "'lists.replaceElemAt' called with index ${toString idx} on a list of size ${toString (length list)}";
genList (i: if i == idx then newElem else elemAt list i) (length list);
}
diff --git a/pkgs/stdenv/generic/meta-types.nix b/lib/meta-types.nix
similarity index 84%
rename from pkgs/stdenv/generic/meta-types.nix
rename to lib/meta-types.nix
index 1396243e3002..264c921eb54e 100644
--- a/pkgs/stdenv/generic/meta-types.nix
+++ b/lib/meta-types.nix
@@ -1,6 +1,7 @@
{ lib }:
# Simple internal type checks for meta.
-# This file is not a stable interface and may be changed arbitrarily.
+# This file is only intended for internal nixpkgs use.
+# It is not a stable interface and may be changed arbitrarily.
#
# TODO: add a method to the module system types
# see https://github.com/NixOS/nixpkgs/pull/273935#issuecomment-1854173100
@@ -159,6 +160,32 @@ lib.fix (self: {
verify = v: all (func: func v) funcs;
};
+ either =
+ t1: t2:
+ assert isTypeDef t1 && isTypeDef t2;
+ let
+ # Store the functions directly so we don't have to pay the cost of attrset lookups at runtime.
+ v1 = t1.verify;
+ v2 = t2.verify;
+ in
+ {
+ name = "either<${t1.name},${t2.name}>";
+ verify = v: v1 v || v2 v;
+ };
+
+ both =
+ t1: t2:
+ assert isTypeDef t1 && isTypeDef t2;
+ let
+ # Store the functions directly so we don't have to pay the cost of attrset lookups at runtime.
+ v1 = t1.verify;
+ v2 = t2.verify;
+ in
+ {
+ name = "both<${t1.name},${t2.name}>";
+ verify = v: v1 v && v2 v;
+ };
+
not =
t:
assert isTypeDef t;
@@ -172,10 +199,10 @@ lib.fix (self: {
enum =
values:
- assert isList values && all isString values;
+ assert isList values;
{
- name = "enum<${concatStringsSep "," values}>";
- verify = v: isString v && elem v values;
+ name = if all isString values then "enum<${concatStringsSep "," values}>" else "enum";
+ verify = v: elem v values;
};
record =
diff --git a/lib/meta.nix b/lib/meta.nix
index 5697b915061c..1defd305abc0 100644
--- a/lib/meta.nix
+++ b/lib/meta.nix
@@ -12,7 +12,6 @@ let
all
isDerivation
getBin
- assertMsg
;
inherit (lib.attrsets) mapAttrs' filterAttrs;
inherit (builtins)
@@ -571,12 +570,15 @@ rec {
*/
getExe' =
x: y:
- assert assertMsg (isDerivation x)
- "lib.meta.getExe': The first argument is of type ${typeOf x}, but it should be a derivation instead.";
- assert assertMsg (isString y)
- "lib.meta.getExe': The second argument is of type ${typeOf y}, but it should be a string instead.";
- assert assertMsg (match ".*/.*" y == null)
- "lib.meta.getExe': The second argument \"${y}\" is a nested path with a \"/\" character, but it should just be the name of the executable instead.";
+ assert
+ isDerivation x
+ || throw "lib.meta.getExe': The first argument is of type ${typeOf x}, but it should be a derivation instead.";
+ assert
+ isString y
+ || throw "lib.meta.getExe': The second argument is of type ${typeOf y}, but it should be a string instead.";
+ assert
+ match ".*/.*" y == null
+ || throw "lib.meta.getExe': The second argument \"${y}\" is a nested path with a \"/\" character, but it should just be the name of the executable instead.";
"${getBin x}/bin/${y}";
/**
diff --git a/lib/modules.nix b/lib/modules.nix
index c5c935144ea6..a206ed6ed8e2 100644
--- a/lib/modules.nix
+++ b/lib/modules.nix
@@ -46,7 +46,6 @@ let
setAttrByPath
substring
take
- throwIfNot
trace
typeOf
types
@@ -680,8 +679,11 @@ let
config = addFreeformType (addMeta (m.config or { }));
}
else
- # shorthand syntax
- throwIfNot (isAttrs m) "module ${file} (${key}) does not look like a module." {
+ # shorthand syntax
+ if !isAttrs m then
+ throw "module ${file} (${key}) does not look like a module."
+ else
+ {
_file = toString m._file or file;
_class = m._class or null;
key = toString m.key or key;
diff --git a/lib/network/internal.nix b/lib/network/internal.nix
index adda711444fd..d22b2739c3f4 100644
--- a/lib/network/internal.nix
+++ b/lib/network/internal.nix
@@ -104,9 +104,9 @@ let
*/
parseExpandedIpv6 =
addr:
- assert lib.assertMsg (
+ assert
length addr == ipv6Pieces
- ) "parseExpandedIpv6: expected list of integers with ${ipv6Pieces} elements";
+ || throw "parseExpandedIpv6: expected list of integers with ${ipv6Pieces} elements";
let
u16FromHexStr =
hex:
diff --git a/lib/options.nix b/lib/options.nix
index accbb56ff34a..6e5383fab455 100644
--- a/lib/options.nix
+++ b/lib/options.nix
@@ -90,12 +90,12 @@ rec {
`defaultText`
: Substitute for documenting the `default`, if evaluating the default value during documentation rendering is not possible.
: Can be any nix value that evaluates.
- : Usage with `lib.literalMD` or `lib.literalExpression` is supported
+ : Usage with `lib.literalMD`, `lib.literalExpression`, or `lib.literalCode` is supported
`example`
: Optional example value used in the manual.
: Can be any nix value that evaluates.
- : Usage with `lib.literalMD` or `lib.literalExpression` is supported
+ : Usage with `lib.literalMD`, `lib.literalExpression`, or `lib.literalCode` is supported
`description`
: Optional string describing the option. This is required if option documentation is generated.
diff --git a/lib/path/default.nix b/lib/path/default.nix
index 60c56948d68e..9cefcaa07314 100644
--- a/lib/path/default.nix
+++ b/lib/path/default.nix
@@ -32,10 +32,6 @@ let
substring
;
- inherit (lib.asserts)
- assertMsg
- ;
-
inherit (lib.path.subpath)
isValid
;
@@ -238,11 +234,14 @@ in
path:
# The subpath string to append
subpath:
- assert assertMsg (isPath path)
- "lib.path.append: The first argument is of type ${builtins.typeOf path}, but a path was expected";
- assert assertMsg (isValid subpath) ''
- lib.path.append: Second argument is not a valid subpath string:
- ${subpathInvalidReason subpath}'';
+ assert
+ isPath path
+ || throw "lib.path.append: The first argument is of type ${builtins.typeOf path}, but a path was expected";
+ assert
+ isValid subpath
+ || throw ''
+ lib.path.append: Second argument is not a valid subpath string:
+ ${subpathInvalidReason subpath}'';
path + ("/" + subpath);
/**
@@ -285,21 +284,25 @@ in
*/
hasPrefix =
path1:
- assert assertMsg (isPath path1)
- "lib.path.hasPrefix: First argument is of type ${typeOf path1}, but a path was expected";
+ assert
+ isPath path1
+ || throw "lib.path.hasPrefix: First argument is of type ${typeOf path1}, but a path was expected";
let
path1Deconstructed = deconstructPath path1;
in
path2:
- assert assertMsg (isPath path2)
- "lib.path.hasPrefix: Second argument is of type ${typeOf path2}, but a path was expected";
+ assert
+ isPath path2
+ || throw "lib.path.hasPrefix: Second argument is of type ${typeOf path2}, but a path was expected";
let
path2Deconstructed = deconstructPath path2;
in
- assert assertMsg (path1Deconstructed.root == path2Deconstructed.root) ''
- lib.path.hasPrefix: Filesystem roots must be the same for both paths, but paths with different roots were given:
- first argument: "${toString path1}" with root "${toString path1Deconstructed.root}"
- second argument: "${toString path2}" with root "${toString path2Deconstructed.root}"'';
+ assert
+ path1Deconstructed.root == path2Deconstructed.root
+ || throw ''
+ lib.path.hasPrefix: Filesystem roots must be the same for both paths, but paths with different roots were given:
+ first argument: "${toString path1}" with root "${toString path1Deconstructed.root}"
+ second argument: "${toString path2}" with root "${toString path2Deconstructed.root}"'';
take (length path1Deconstructed.components) path2Deconstructed.components
== path1Deconstructed.components;
@@ -344,15 +347,17 @@ in
*/
removePrefix =
path1:
- assert assertMsg (isPath path1)
- "lib.path.removePrefix: First argument is of type ${typeOf path1}, but a path was expected.";
+ assert
+ isPath path1
+ || throw "lib.path.removePrefix: First argument is of type ${typeOf path1}, but a path was expected.";
let
path1Deconstructed = deconstructPath path1;
path1Length = length path1Deconstructed.components;
in
path2:
- assert assertMsg (isPath path2)
- "lib.path.removePrefix: Second argument is of type ${typeOf path2}, but a path was expected.";
+ assert
+ isPath path2
+ || throw "lib.path.removePrefix: Second argument is of type ${typeOf path2}, but a path was expected.";
let
path2Deconstructed = deconstructPath path2;
success = take path1Length path2Deconstructed.components == path1Deconstructed.components;
@@ -362,10 +367,12 @@ in
else
throw ''lib.path.removePrefix: The first path argument "${toString path1}" is not a component-wise prefix of the second path argument "${toString path2}".'';
in
- assert assertMsg (path1Deconstructed.root == path2Deconstructed.root) ''
- lib.path.removePrefix: Filesystem roots must be the same for both paths, but paths with different roots were given:
- first argument: "${toString path1}" with root "${toString path1Deconstructed.root}"
- second argument: "${toString path2}" with root "${toString path2Deconstructed.root}"'';
+ assert
+ path1Deconstructed.root == path2Deconstructed.root
+ || throw ''
+ lib.path.removePrefix: Filesystem roots must be the same for both paths, but paths with different roots were given:
+ first argument: "${toString path1}" with root "${toString path1Deconstructed.root}"
+ second argument: "${toString path2}" with root "${toString path2Deconstructed.root}"'';
joinRelPath components;
/**
@@ -422,8 +429,9 @@ in
splitRoot =
# The path to split the root off of
path:
- assert assertMsg (isPath path)
- "lib.path.splitRoot: Argument is of type ${typeOf path}, but a path was expected";
+ assert
+ isPath path
+ || throw "lib.path.splitRoot: Argument is of type ${typeOf path}, but a path was expected";
let
deconstructed = deconstructPath path;
in
@@ -494,14 +502,15 @@ in
let
deconstructed = deconstructPath path;
in
- assert assertMsg (isPath path)
- "lib.path.hasStorePathPrefix: Argument is of type ${typeOf path}, but a path was expected";
- assert assertMsg
+ assert
+ isPath path
+ || throw "lib.path.hasStorePathPrefix: Argument is of type ${typeOf path}, but a path was expected";
+ assert
# This function likely breaks or needs adjustment if used with other filesystem roots, if they ever get implemented.
# Let's try to error nicely in such a case, though it's unclear how an implementation would work even and whether this could be detected.
# See also https://github.com/NixOS/nix/pull/6530#discussion_r1422843117
- (deconstructed.root == /. && toString deconstructed.root == "/")
- "lib.path.hasStorePathPrefix: Argument has a filesystem root (${toString deconstructed.root}) that's not /, which is currently not supported.";
+ deconstructed.root == /. && toString deconstructed.root == "/"
+ || throw "lib.path.hasStorePathPrefix: Argument has a filesystem root (${toString deconstructed.root}) that's not /, which is currently not supported.";
componentsHaveStorePathPrefix deconstructed.components;
/**
@@ -702,9 +711,11 @@ in
subpath.components =
# The subpath string to split into components
subpath:
- assert assertMsg (isValid subpath) ''
- lib.path.subpath.components: Argument is not a valid subpath string:
- ${subpathInvalidReason subpath}'';
+ assert
+ isValid subpath
+ || throw ''
+ lib.path.subpath.components: Argument is not a valid subpath string:
+ ${subpathInvalidReason subpath}'';
splitRelPath subpath;
/**
@@ -799,9 +810,11 @@ in
subpath.normalise =
# The subpath string to normalise
subpath:
- assert assertMsg (isValid subpath) ''
- lib.path.subpath.normalise: Argument is not a valid subpath string:
- ${subpathInvalidReason subpath}'';
+ assert
+ isValid subpath
+ || throw ''
+ lib.path.subpath.normalise: Argument is not a valid subpath string:
+ ${subpathInvalidReason subpath}'';
joinRelPath (splitRelPath subpath);
}
diff --git a/lib/services/service.nix b/lib/services/service.nix
index 1bcf0845f0d7..5911202547fe 100644
--- a/lib/services/service.nix
+++ b/lib/services/service.nix
@@ -6,10 +6,12 @@
# The module
{
lib,
+ config,
+ options,
...
}:
let
- inherit (lib) mkOption types;
+ inherit (lib) mkEnableOption mkOption types;
pathOrStr = types.coercedTo types.path (x: "${x}") types.str;
in
{
@@ -39,7 +41,7 @@ in
visible = "shallow";
};
process = {
- argv = lib.mkOption {
+ argv = mkOption {
type = types.listOf pathOrStr;
example = lib.literalExpression ''[ (lib.getExe config.package) "--nobackground" ]'';
description = ''
@@ -49,6 +51,57 @@ in
a shell script or `importas` from `pkgs.execline`.
'';
};
+
+ reloadSignal = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ example = "HUP";
+ description = ''
+ Configures the reload signal to send to the service manager.
+ '';
+ };
+
+ reloadCommand = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ example = lib.literalExpression ''"''${pkgs.coreutils}/bin/kill -HUP $MAINPID"'';
+
+ description = ''
+ Command used for reloading in the underlying service manager to reload.
+ '';
+ };
+ };
+
+ notificationProtocol = mkOption {
+ type = types.submodule {
+ options = {
+ systemd = mkEnableOption "Whether the service supports systemd-notify.";
+ s6 = mkEnableOption "Whether the service supports s6-notify.";
+ };
+ };
+ description = ''
+ Notification protocol that this service supports with the underlying service manager.
+ '';
};
};
+
+ config = {
+ assertions = [
+ {
+ # `reloadSignal` derives `reloadCommand` at `mkDefault` priority below, so a
+ # conflict only exists when the user *also* set `reloadCommand` explicitly.
+ # An explicit (non-`mkDefault`) definition has `defaultOverridePriority`.
+ assertion =
+ !(
+ config.process.reloadSignal != null
+ && options.process.reloadCommand.highestPrio <= lib.modules.defaultOverridePriority
+ );
+ message = "reloadSignal conflicts with reloadCommand. Please either use reloadSignal or reloadCommand.";
+ }
+ ];
+
+ process.reloadCommand = lib.mkIf (config.process.reloadSignal != null) (
+ lib.mkDefault "${pkgs.coreutils}/bin/kill -${config.process.reloadSignal} $MAINPID"
+ );
+ };
}
diff --git a/lib/sources.nix b/lib/sources.nix
index 81b8a8c77178..9846e9c586f7 100644
--- a/lib/sources.nix
+++ b/lib/sources.nix
@@ -4,22 +4,31 @@
# Tested in lib/tests/sources.sh
let
inherit (lib.strings)
- match
- split
- storeDir
escapeRegex
+ hasPrefix
+ hasSuffix
+ match
removePrefix
+ removeSuffix
+ split
+ splitString
+ storeDir
+ stringLength
+ substring
;
inherit (lib)
- boolToString
- filter
- isString
- readFile
- concatStrings
- length
- elemAt
- isList
any
+ boolToString
+ concatStrings
+ elemAt
+ fileContents
+ filter
+ head
+ isList
+ isString
+ last
+ length
+ readFile
;
inherit (lib.filesystem)
pathIsRegularFile
@@ -41,6 +50,12 @@ let
: 2\. Function argument
*/
cleanSourceFilter =
+ let
+ hasEmacsBackupFileSuffix = hasSuffix "~";
+ hasObjectSuffix = hasSuffix ".o";
+ hasSharedObjectSuffix = hasSuffix ".so";
+ hasResultPrefix = hasPrefix "result";
+ in
name: type:
let
baseName = baseNameOf name;
@@ -62,17 +77,15 @@ let
)
||
# Filter out editor backup / swap files.
- lib.hasSuffix "~" baseName
+ hasEmacsBackupFileSuffix baseName
|| match "^\\.sw[a-z]$" baseName != null
|| match "^\\..*\\.sw[a-z]$" baseName != null
- ||
-
- # Filter out generates files.
- lib.hasSuffix ".o" baseName
- || lib.hasSuffix ".so" baseName
+ # Filter out generated files.
+ || hasObjectSuffix baseName
+ || hasSharedObjectSuffix baseName
||
# Filter out nix-build result symlinks
- (type == "symlink" && lib.hasPrefix "result" baseName)
+ (type == "symlink" && hasResultPrefix baseName)
||
# Filter out sockets and other types of files we can't have in the store.
(type == "unknown")
@@ -133,13 +146,13 @@ let
{
# A path or cleanSourceWith result to filter and/or rename.
src,
- # Optional with default value: constant true (include everything)
+ # Optional with default value of null (include everything)
# The function will be combined with the && operator such
# that src.filter is called lazily.
# For implementing a filter, see
# https://nixos.org/nix/manual/#builtin-filterSource
# Type: A function (Path -> Type -> Bool)
- filter ? _path: _type: true,
+ filter ? null,
# Optional name to use as part of the store path.
# This defaults to `src.name` or otherwise `"source"`.
name ? null,
@@ -149,7 +162,13 @@ let
in
fromSourceAttributes {
inherit (orig) origSrc;
- filter = path: type: filter path type && orig.filter path type;
+ filter =
+ if orig.filter == null then
+ filter
+ else if filter == null then
+ orig.filter
+ else
+ path: type: filter path type && orig.filter path type;
name = if name != null then name else orig.name;
};
@@ -178,11 +197,14 @@ let
attrs
// {
filter =
- path: type:
- let
- r = attrs.filter path type;
- in
- builtins.trace "${attrs.name}.filter ${path} = ${boolToString r}" r;
+ if attrs.filter == null then
+ path: type: builtins.trace "${attrs.name}.filter ${path} = true" true
+ else
+ path: type:
+ let
+ r = attrs.filter path type;
+ in
+ builtins.trace "${attrs.name}.filter ${path} = ${boolToString r}" r;
}
)
// {
@@ -218,13 +240,13 @@ let
isFiltered = src ? _isLibCleanSourceWith;
origSrc = if isFiltered then src.origSrc else src;
in
- lib.cleanSourceWith {
+ cleanSourceWith {
filter = (
path: type:
let
- relPath = lib.removePrefix (toString origSrc + "/") (toString path);
+ relPath = removePrefix (toString origSrc + "/") (toString path);
in
- lib.any (re: match re relPath != null) regexes
+ any (re: match re relPath != null) regexes
);
inherit src;
};
@@ -272,7 +294,7 @@ let
let
base = baseNameOf name;
in
- type == "directory" || lib.any (ext: lib.hasSuffix ext base) exts;
+ type == "directory" || any (ext: hasSuffix ext base) exts;
in
cleanSourceWith { inherit filter src; };
@@ -319,9 +341,9 @@ let
packedRefsName = path + "/packed-refs";
absolutePath =
base: path:
- if lib.hasPrefix "/" path then
+ if hasPrefix "/" path then
path
- else if lib.hasPrefix "/" base then
+ else if hasPrefix "/" base then
"${base}/${path}"
else
"/${base}/${path}";
@@ -337,12 +359,12 @@ let
{ error = "File contains no gitdir reference: " + path; }
else
let
- gitDir = absolutePath (dirOf path) (lib.head m);
+ gitDir = absolutePath (dirOf path) (head m);
commonDir'' =
- if pathIsRegularFile "${gitDir}/commondir" then lib.fileContents "${gitDir}/commondir" else gitDir;
- commonDir' = lib.removeSuffix "/" commonDir'';
+ if pathIsRegularFile "${gitDir}/commondir" then fileContents "${gitDir}/commondir" else gitDir;
+ commonDir' = removeSuffix "/" commonDir'';
commonDir = absolutePath gitDir commonDir';
- refFile = lib.removePrefix "${commonDir}/" "${gitDir}/${file}";
+ refFile = removePrefix "${commonDir}/" "${gitDir}/${file}";
in
readCommitFromFile refFile commonDir
@@ -352,10 +374,10 @@ let
# sometimes it stores something like: «ref: refs/heads/branch-name»
then
let
- fileContent = lib.fileContents fileName;
+ fileContent = fileContents fileName;
matchRef = match "^ref: (.*)$" fileContent;
in
- if matchRef == null then { value = fileContent; } else readCommitFromFile (lib.head matchRef) path
+ if matchRef == null then { value = fileContent; } else readCommitFromFile (head matchRef) path
else if
pathIsRegularFile packedRefsName
@@ -373,14 +395,14 @@ let
if refs == [ ] then
{ error = "Could not find " + file + " in " + packedRefsName; }
else
- { value = lib.head (matchRef (lib.head refs)); }
+ { value = head (matchRef (head refs)); }
else
{ error = "Not a .git directory: " + toString path; };
in
readCommitFromFile "HEAD";
- pathHasContext = builtins.hasContext or (lib.hasPrefix storeDir);
+ pathHasContext = builtins.hasContext or (hasPrefix storeDir);
canCleanSource = src: src ? _isLibCleanSourceWith || !(pathHasContext (toString src));
@@ -403,7 +425,7 @@ let
{
# The original path
origSrc = if isFiltered then src.origSrc else src;
- filter = if isFiltered then src.filter else _: _: true;
+ filter = if isFiltered then src.filter else null; # make sure to handle this!
name = if isFiltered then src.name else "source";
};
@@ -411,6 +433,9 @@ let
#
# Inverse of toSourceAttributes for Source objects.
fromSourceAttributes =
+ let
+ inherit (builtins) path;
+ in
{
origSrc,
filter,
@@ -418,9 +443,13 @@ let
}:
{
_isLibCleanSourceWith = true;
- inherit origSrc filter name;
- outPath = builtins.path {
- inherit filter name;
+ inherit origSrc name;
+ # preserve outside checks, since a filter of null looks odd for
+ # comparisons
+ filter = if filter == null then _: _: true else filter;
+ outPath = path {
+ inherit name;
+ ${if filter != null then "filter" else null} = filter;
path = origSrc;
};
};
@@ -431,15 +460,14 @@ let
urlToName =
url:
let
- inherit (lib.strings) stringLength;
- base = baseNameOf (lib.removeSuffix "/" (lib.last (lib.splitString ":" (toString url))));
+ base = baseNameOf (removeSuffix "/" (last (splitString ":" (toString url))));
# chop away one git or archive-related extension
removeExt =
name:
let
matchExt = match "(.*)\\.(git|tar|zip|gz|tgz|bz|tbz|bz2|tbz2|lzma|txz|xz|zstd)$" name;
in
- if matchExt != null then lib.head matchExt else name;
+ if matchExt != null then head matchExt else name;
# apply function f to string x while the result shrinks
shrink =
f: x:
@@ -461,9 +489,9 @@ let
matchVer = match "([A-Za-z]+[-_. ]?)*(v)?([0-9.]+.*)" baseRev;
in
if matchHash != null then
- builtins.substring 0 7 baseRev
+ substring 0 7 baseRev
else if matchVer != null then
- lib.last matchVer
+ last matchVer
else
baseRev;
@@ -623,7 +651,7 @@ let
in
src: patterns:
- lib.cleanSourceWith {
+ cleanSourceWith {
filter = mkSourceFilter src patterns;
inherit src;
};
diff --git a/lib/strings.nix b/lib/strings.nix
index 4c78c909b4be..59a458aecf80 100644
--- a/lib/strings.nix
+++ b/lib/strings.nix
@@ -6,8 +6,6 @@ let
inherit (builtins) length;
- inherit (lib.trivial) warnIf;
-
asciiTable = import ./ascii-table.nix;
in
@@ -16,6 +14,7 @@ rec {
inherit (builtins)
compareVersions
+ concatMap
elem
elemAt
filter
@@ -564,7 +563,10 @@ rec {
:::
*/
makeSearchPath =
- subDir: paths: concatStringsSep ":" (map (path: path + "/" + subDir) (filter (x: x != null) paths));
+ subDir: paths:
+ concatStringsSep ":" (
+ concatMap (path: if path != null then [ (path + "/" + subDir) ] else [ ]) paths
+ );
/**
Construct a Unix-style search path by appending the given
@@ -602,8 +604,14 @@ rec {
:::
*/
makeSearchPathOutput =
- output: subDir: pkgs:
- makeSearchPath subDir (map (lib.getOutput output) pkgs);
+ output:
+ let
+ getOutput' = lib.getOutput output;
+ in
+ subDir: pkgs:
+ concatStringsSep ":" (
+ concatMap (path: if path != null then [ (getOutput' path + "/" + subDir) ] else [ ]) pkgs
+ );
/**
Construct a library search path (such as RPATH) containing the
@@ -721,15 +729,17 @@ rec {
:::
*/
normalizePath =
+ let
+ startsWithSlash = hasSuffix "/";
+ in
s:
- warnIf (isPath s)
- ''
+ if isPath s then
+ throw ''
lib.strings.normalizePath: The argument (${toString s}) is a path value, but only strings are supported.
- Path values are always normalised in Nix, so there's no need to call this function on them.
- This function also copies the path to the Nix store and returns the store path, the same as "''${path}" will, which may not be what you want.
- This behavior is deprecated and will throw an error in the future.''
- (
- builtins.foldl' (x: y: if y == "/" && hasSuffix "/" x then x else x + y) "" (stringToCharacters s)
+ Path values are always normalised in Nix, so there's no need to call this function on them.''
+ else
+ builtins.foldl' (x: y: if y == "/" && startsWithSlash x then x else x + y) "" (
+ stringToCharacters s
);
/**
@@ -796,17 +806,18 @@ rec {
:::
*/
hasPrefix =
- pref: str:
- # Before 23.05, paths would be copied to the store before converting them
- # to strings and comparing. This was surprising and confusing.
- warnIf (isPath pref)
- ''
+ pref:
+ let
+ lenPrefix = stringLength pref;
+ in
+ if isPath pref then
+ # Before 23.05, paths would be copied to the store before converting them
+ # to strings and comparing. This was surprising and confusing.
+ throw ''
lib.strings.hasPrefix: The first argument (${toString pref}) is a path value, but only strings are supported.
- There is almost certainly a bug in the calling code, since this function always returns `false` in such a case.
- This function also copies the path to the Nix store, which may not be what you want.
- This behavior is deprecated and will throw an error in the future.
You might want to use `lib.path.hasPrefix` instead, which correctly supports paths.''
- (substring 0 (stringLength pref) str == pref);
+ else
+ str: substring 0 lenPrefix str == pref;
/**
Determine whether a string has given suffix.
@@ -839,20 +850,23 @@ rec {
:::
*/
hasSuffix =
- suffix: content:
+ suffix:
let
- lenContent = stringLength content;
lenSuffix = stringLength suffix;
in
- # Before 23.05, paths would be copied to the store before converting them
- # to strings and comparing. This was surprising and confusing.
- warnIf (isPath suffix)
- ''
+ if isPath suffix then
+ # Before 23.05, paths would be copied to the store before converting them
+ # to strings and comparing. This was surprising and confusing.
+ throw ''
lib.strings.hasSuffix: The first argument (${toString suffix}) is a path value, but only strings are supported.
- There is almost certainly a bug in the calling code, since this function always returns `false` in such a case.
- This function also copies the path to the Nix store, which may not be what you want.
- This behavior is deprecated and will throw an error in the future.''
- (lenContent >= lenSuffix && substring (lenContent - lenSuffix) lenContent content == suffix);
+ There is almost certainly a bug in the calling code, since this function always returns `false` in such a case.
+ This function also copies the path to the Nix store, which may not be what you want.''
+ else
+ content:
+ let
+ lenContent = stringLength content;
+ in
+ lenContent >= lenSuffix && substring (lenContent - lenSuffix) lenContent content == suffix;
/**
Determine whether a string contains the given infix
@@ -889,16 +903,19 @@ rec {
:::
*/
hasInfix =
- infix: content:
- # Before 23.05, paths would be copied to the store before converting them
- # to strings and comparing. This was surprising and confusing.
- warnIf (isPath infix)
- ''
+ infix:
+ let
+ escapedInfix = escapeRegex infix;
+ in
+ if isPath infix then
+ # Before 23.05, paths would be copied to the store before converting them
+ # to strings and comparing. This was surprising and confusing.
+ throw ''
lib.strings.hasInfix: The first argument (${toString infix}) is a path value, but only strings are supported.
There is almost certainly a bug in the calling code, since this function always returns `false` in such a case.
- This function also copies the path to the Nix store, which may not be what you want.
- This behavior is deprecated and will throw an error in the future.''
- (builtins.match ".*${escapeRegex infix}.*" "${content}" != null);
+ This function also copies the path to the Nix store, which may not be what you want.''
+ else
+ content: builtins.match ".*${escapedInfix}.*" "${content}" != null;
/**
Convert a string `s` to a list of characters (i.e. singleton strings).
@@ -1303,8 +1320,11 @@ rec {
:::
*/
toShellVar =
- name: value:
- lib.throwIfNot (isValidPosixName name) "toShellVar: ${name} is not a valid shell variable name" (
+ name:
+ if (!isValidPosixName name) then
+ throw "toShellVar: ${name} is not a valid shell variable name"
+ else
+ value:
if isAttrs value && !isStringLike value then
"declare -A ${name}=(${
concatStringsSep " " (lib.mapAttrsToList (n: v: "[${escapeShellArg n}]=${escapeShellArg v}") value)
@@ -1312,8 +1332,7 @@ rec {
else if isList value then
"declare -a ${name}=(${escapeShellArgs value})"
else
- "${name}=${escapeShellArg value}"
- );
+ "${name}=${escapeShellArg value}";
/**
Translate an attribute set `vars` into corresponding shell variable declarations
@@ -1570,15 +1589,14 @@ rec {
*/
toSentenceCase =
str:
- lib.throwIfNot (isString str)
- "toSentenceCase does only accepts string values, but got ${typeOf str}"
- (
- let
- firstChar = substring 0 1 str;
- rest = substring 1 (stringLength str) str;
- in
- addContextFrom str (toUpper firstChar + toLower rest)
- );
+ if !isString str then
+ throw "toSentenceCase does only accepts string values, but got ${typeOf str}"
+ else
+ let
+ firstChar = substring 0 1 str;
+ rest = substring 1 (-1) str; # -1 takes till the end of the string
+ in
+ toUpper firstChar + toLower rest;
/**
Converts a string to camelCase. Handles snake_case, PascalCase,
@@ -1614,7 +1632,9 @@ rec {
*/
toCamelCase =
str:
- lib.throwIfNot (isString str) "toCamelCase does only accepts string values, but got ${typeOf str}" (
+ if !isString str then
+ throw "toCamelCase does only accepts string values, but got ${typeOf str}"
+ else
let
separators = splitStringBy (
prev: curr:
@@ -1634,8 +1654,7 @@ rec {
first = if length parts > 0 then toLower (head parts) else "";
rest = if length parts > 1 then map toSentenceCase (tail parts) else [ ];
in
- concatStrings (map (addContextFrom str) ([ first ] ++ rest))
- );
+ concatStrings ([ first ] ++ rest);
/**
Appends string context from string like object `src` to `target`.
@@ -1721,13 +1740,11 @@ rec {
:::
*/
splitString =
- sep: s:
+ sep:
let
- splits = builtins.filter builtins.isString (
- builtins.split (escapeRegex (toString sep)) (toString s)
- );
+ escapedSep = escapeRegex (toString sep);
in
- map (addContextFrom s) splits;
+ s: map (addContextFrom s) (filter isString (split escapedSep (toString s)));
/**
Splits a string into substrings based on a predicate that examines adjacent characters.
@@ -1794,31 +1811,27 @@ rec {
predicate: keepSplit: str:
let
len = stringLength str;
+ withContext = addContextFrom str;
# Helper function that processes the string character by character
go =
pos: currentPart: result:
# Base case: reached end of string
if pos == len then
- result ++ [ currentPart ]
+ result ++ [ (withContext currentPart) ]
else
let
currChar = substring pos 1 str;
prevChar = if pos > 0 then substring (pos - 1) 1 str else "";
- isSplit = predicate prevChar currChar;
in
- if isSplit then
+ if predicate prevChar currChar then
# Split here - add current part to results and start a new one
- let
- newResult = result ++ [ currentPart ];
- newCurrentPart = if keepSplit then currChar else "";
- in
- go (pos + 1) newCurrentPart newResult
+ go (pos + 1) (if keepSplit then currChar else "") (result ++ [ (withContext currentPart) ])
else
# Keep building current part
go (pos + 1) (currentPart + currChar) result;
in
- if len == 0 then [ (addContextFrom str "") ] else map (addContextFrom str) (go 0 "" [ ]);
+ if len == 0 then [ (withContext "") ] else go 0 "" [ ];
/**
Returns a string without the specified prefix, if the prefix matches.
@@ -1851,25 +1864,24 @@ rec {
:::
*/
removePrefix =
- prefix: str:
- # Before 23.05, paths would be copied to the store before converting them
- # to strings and comparing. This was surprising and confusing.
- warnIf (isPath prefix)
- ''
+ prefix:
+ let
+ preLen = stringLength prefix;
+ in
+ if isPath prefix then
+ # Before 23.05, paths would be copied to the store before converting them
+ # to strings and comparing. This was surprising and confusing.
+ throw ''
lib.strings.removePrefix: The first argument (${toString prefix}) is a path value, but only strings are supported.
There is almost certainly a bug in the calling code, since this function never removes any prefix in such a case.
- This function also copies the path to the Nix store, which may not be what you want.
- This behavior is deprecated and will throw an error in the future.''
- (
- let
- preLen = stringLength prefix;
- in
- if substring 0 preLen str == prefix then
- # -1 will take the string until the end
- substring preLen (-1) str
- else
- str
- );
+ This function also copies the path to the Nix store, which may not be what you want.''
+ else
+ str:
+ if substring 0 preLen str == prefix then
+ # -1 will take the string until the end
+ substring preLen (-1) str
+ else
+ str;
/**
Returns a string without the specified suffix, if the suffix matches.
@@ -1902,25 +1914,26 @@ rec {
:::
*/
removeSuffix =
- suffix: str:
- # Before 23.05, paths would be copied to the store before converting them
- # to strings and comparing. This was surprising and confusing.
- warnIf (isPath suffix)
- ''
+ suffix:
+ let
+ sufLen = stringLength suffix;
+ in
+ if isPath suffix then
+ # Before 23.05, paths would be copied to the store before converting them
+ # to strings and comparing. This was surprising and confusing.
+ throw ''
lib.strings.removeSuffix: The first argument (${toString suffix}) is a path value, but only strings are supported.
There is almost certainly a bug in the calling code, since this function never removes any suffix in such a case.
- This function also copies the path to the Nix store, which may not be what you want.
- This behavior is deprecated and will throw an error in the future.''
- (
- let
- sufLen = stringLength suffix;
- sLen = stringLength str;
- in
- if sufLen <= sLen && suffix == substring (sLen - sufLen) sufLen str then
- substring 0 (sLen - sufLen) str
- else
- str
- );
+ This function also copies the path to the Nix store, which may not be what you want.''
+ else
+ str:
+ let
+ sLen = stringLength str;
+ in
+ if sufLen <= sLen && suffix == substring (sLen - sufLen) sufLen str then
+ substring 0 (sLen - sufLen) str
+ else
+ str;
/**
Returns true if string `v1` denotes a version older than `v2`.
@@ -1986,7 +1999,7 @@ rec {
:::
*/
- versionAtLeast = v1: v2: !versionOlder v1 v2;
+ versionAtLeast = v1: v2: compareVersions v2 v1 != 1;
/**
This function takes an argument `x` that's either a derivation or a
@@ -2149,8 +2162,9 @@ rec {
"LIST"
];
in
- type: feature: value:
+ type:
assert (elem (toUpper type) types);
+ feature: value:
assert (isString feature);
assert (isString value);
"-D${feature}:${toUpper type}=${value}";
@@ -2186,9 +2200,8 @@ rec {
*/
cmakeBool =
condition: flag:
- assert (lib.isString condition);
assert (lib.isBool flag);
- cmakeOptionType "bool" condition (lib.toUpper (lib.boolToString flag));
+ cmakeOptionType "bool" condition (if flag then "TRUE" else "FALSE");
/**
Create a `"-D:STRING="` string that can be passed to typical
@@ -2220,11 +2233,7 @@ rec {
:::
*/
- cmakeFeature =
- feature: value:
- assert (lib.isString feature);
- assert (lib.isString value);
- cmakeOptionType "string" feature value;
+ cmakeFeature = cmakeOptionType "string";
/**
Create a `"-D="` string that can be passed to typical Meson
@@ -2294,7 +2303,6 @@ rec {
*/
mesonBool =
condition: flag:
- assert (lib.isString condition);
assert (lib.isBool flag);
mesonOption condition (lib.boolToString flag);
@@ -2331,7 +2339,6 @@ rec {
*/
mesonEnable =
feature: flag:
- assert (lib.isString feature);
assert (lib.isBool flag);
mesonOption feature (if flag then "enabled" else "disabled");
@@ -2525,8 +2532,9 @@ rec {
strw = lib.stringLength str;
reqWidth = width - (lib.stringLength filler);
in
- assert lib.assertMsg (strw <= width)
- "fixedWidthString: requested string length (${toString width}) must not be shorter than actual length (${toString strw})";
+ assert
+ strw <= width
+ || throw "fixedWidthString: requested string length (${toString width}) must not be shorter than actual length (${toString strw})";
if strw == width then str else filler + fixedWidthString reqWidth filler str;
/**
diff --git a/lib/systems/default.nix b/lib/systems/default.nix
index 53c095711aef..05da6815ceba 100644
--- a/lib/systems/default.nix
+++ b/lib/systems/default.nix
@@ -17,12 +17,17 @@ let
inherit (lib.strings) toJSON;
+ inherit (lib.trivial)
+ oldestSupportedReleaseIsAtLeast
+ ;
+
doubles = import ./doubles.nix { inherit lib; };
parse = import ./parse.nix { inherit lib; };
inspect = import ./inspect.nix { inherit lib; };
platforms = import ./platforms.nix { inherit lib; };
examples = import ./examples.nix { inherit lib; };
architectures = import ./architectures.nix { inherit lib; };
+ rustc-target-env = import ./rustc-target-env.nix;
/**
Elaborated systems contain functions, which means that they don't satisfy
@@ -449,6 +454,16 @@ let
else
final.parsed.cpu.name;
+ # https://doc.rust-lang.org/reference/conditional-compilation.html#target_env
+ # Accomodate system definitions written before Nixpkgs learned about target_env.
+ env =
+ if rust ? platform.env then
+ rust.platform.env
+ else if rustc-target-env ? ${final.rust.rustcTargetSpec} then
+ rustc-target-env.${final.rust.rustcTargetSpec}
+ else
+ "";
+
# https://doc.rust-lang.org/reference/conditional-compilation.html#target_os
os =
if rust ? platform then
@@ -690,9 +705,12 @@ let
};
};
in
- # TODO: Remove in 27.05.
+ # Platforms elaborated by pre-26.11 Nixpkgs will include the `linux-kernel` attr,
+ # so we can't assert its absence until 26.11 is the oldest supported release.
+ # Assertion will activate during the 27.05 cycle, when 26.05 support ends.
+ # TODO: Remove assertion in the 27.11 cycle.
assert
- args ? linux-kernel
+ oldestSupportedReleaseIsAtLeast 2611 && args ? linux-kernel
-> throw "lib.systems.elaborate: linux-kernel has been removed; see the 26.11 release notes";
assert final.useAndroidPrebuilt -> final.isAndroid;
diff --git a/lib/systems/doubles.nix b/lib/systems/doubles.nix
index e9fa908dfc88..3970b69735a9 100644
--- a/lib/systems/doubles.nix
+++ b/lib/systems/doubles.nix
@@ -1,19 +1,29 @@
{ lib }:
let
- inherit (lib) lists;
+ inherit (lib)
+ lists
+ splitString
+ ;
inherit (lib.systems) parse;
+ inherit (parse)
+ mkSystemFromSkeleton
+ mkSkeletonFromList
+ doubleFromSystem
+ ;
inherit (lib.systems.inspect) predicates;
inherit (lib.attrsets) matchAttrs;
all = [
+ # our primary systems. at the top of the list for fastest matching
+ # inside check-meta
+ "x86_64-linux"
+ "aarch64-darwin"
+ "aarch64-linux"
+
# Cygwin
"i686-cygwin"
"x86_64-cygwin"
- # Darwin
- "x86_64-darwin"
- "aarch64-darwin"
-
# FreeBSD
"i686-freebsd"
"x86_64-freebsd"
@@ -30,8 +40,7 @@ let
# JS
"javascript-ghcjs"
- # Linux
- "aarch64-linux"
+ # Linux (excluding the primary two at the top)
"arc-linux"
"armv5tel-linux"
"armv6l-linux"
@@ -54,7 +63,6 @@ let
"riscv64-linux"
"s390-linux"
"s390x-linux"
- "x86_64-linux"
# MMIXware
"mmix-mmixware"
@@ -117,9 +125,17 @@ let
"x86_64-uefi"
];
- allParsed = map parse.mkSystemFromString all;
+ uncheckedSystemFromString =
+ let
+ systemType = {
+ _type = "system";
+ };
+ in
+ s: mkSystemFromSkeleton (mkSkeletonFromList (splitString "-" s)) // systemType;
- filterDoubles = f: map parse.doubleFromSystem (lists.filter f allParsed);
+ allParsed = map uncheckedSystemFromString all;
+
+ filterDoubles = f: map doubleFromSystem (lists.filter f allParsed);
in
{
diff --git a/lib/systems/examples.nix b/lib/systems/examples.nix
index 055f727d53c9..ab062f82bce3 100644
--- a/lib/systems/examples.nix
+++ b/lib/systems/examples.nix
@@ -332,12 +332,6 @@ rec {
platform = { };
};
- x86_64-darwin = {
- config = "x86_64-apple-darwin";
- xcodePlatform = "MacOSX";
- platform = { };
- };
-
#
# UEFI
#
diff --git a/lib/systems/flake-systems.nix b/lib/systems/flake-systems.nix
index 851dc1af7181..1589ff23baa4 100644
--- a/lib/systems/flake-systems.nix
+++ b/lib/systems/flake-systems.nix
@@ -11,7 +11,6 @@
"x86_64-linux"
# Tier 2
"aarch64-linux"
- "x86_64-darwin"
# Tier 3
"armv6l-linux"
"armv7l-linux"
diff --git a/lib/systems/inspect.nix b/lib/systems/inspect.nix
index 36a4036f210a..98b3fc050bc1 100644
--- a/lib/systems/inspect.nix
+++ b/lib/systems/inspect.nix
@@ -2,14 +2,17 @@
let
inherit (lib)
+ all
any
+ attrNames
attrValues
concatMap
filter
+ flip
hasPrefix
+ isAttrs
isList
mapAttrs
- matchAttrs
recursiveUpdateUntil
toList
;
@@ -24,19 +27,49 @@ let
execFormats
;
- abis = mapAttrs (_: abi: removeAttrs abi [ "assertions" ]) lib.systems.parse.abis;
+ # Based on lib.attrsets.matchAttrs, but with:
+ # - the initial isAttrs assertion removed, since this function is only ever
+ # called with attrsets
+ # - isAttrs only performed on one side when recursing, since our input data
+ # will always share a structure
+ matchAttrsUnchecked =
+ pattern: attrs:
+ all (
+ # Compare equality between `pattern` & `attrs`.
+ attr:
+ # Missing attr, not equal.
+ attrs ? ${attr}
+ && (
+ let
+ lhs = pattern.${attr};
+ rhs = attrs.${attr};
+ in
+ # Simple equality check is primarily for non-attrsets, but we run it
+ # on attrsets too, since it may let us avoid recursing
+ lhs == rhs || isAttrs lhs && matchAttrsUnchecked lhs rhs
+ )
+ ) (attrNames pattern);
+
+ removeAssertions = flip removeAttrs [ "assertions" ];
+ abis = mapAttrs (
+ _: abi: if abi ? assertions then removeAssertions abi else abi
+ ) lib.systems.parse.abis;
in
rec {
# these patterns are to be matched against {host,build,target}Platform.parsed
+ #
+ # Note: All toplevel attributes within a pattern are expected to be attrsets.
+ # matchAttrsUnchecked should be changed if a pattern is ever added that
+ # doesn't follow this axiom
patterns = rec {
# The patterns below are lists in sum-of-products form.
#
# Each attribute is list of product conditions; non-list values are treated
# as a singleton list. If *any* product condition in the list matches then
# the predicate matches. Each product condition is tested by
- # `lib.attrsets.matchAttrs`, which requires a match on *all* attributes of
- # the product.
+ # `matchAttrsUnchecked`, which requires a match on *all* attributes of the
+ # product.
isi686 = {
cpu = cpuTypes.i686;
@@ -489,14 +522,40 @@ rec {
) pat2
) pat1;
- matchAnyAttrs =
- patterns:
- if isList patterns then
- attrs: any (pattern: matchAttrs pattern attrs) patterns
- else
- matchAttrs patterns;
+ matchAnyPattern =
+ let
+ # same as matchAttrsUnchecked definition at the top of the file, but:
+ # - pattern names are cached and reused for multiple attrset calls
+ # - avoid running isAttrs since all patterns are nested attrsets
+ matchPattern =
+ pattern:
+ let
+ names = attrNames pattern;
+ in
+ attrs:
+ all (
+ attr:
+ attrs ? ${attr}
+ && (
+ let
+ lhs = pattern.${attr};
+ rhs = attrs.${attr};
+ in
+ lhs == rhs || matchAttrsUnchecked lhs rhs
+ )
+ ) names;
- predicates = mapAttrs (_: matchAnyAttrs) patterns;
+ in
+ pattern:
+ if isList pattern then
+ let
+ cachedPatterns = map matchPattern pattern;
+ in
+ attrs: any (pattern: pattern attrs) cachedPatterns
+ else
+ matchPattern pattern;
+
+ predicates = mapAttrs (_: matchAnyPattern) patterns;
# these patterns are to be matched against the entire
# {host,build,target}Platform structure; they include a `parsed={}` marker so
diff --git a/lib/systems/parse.nix b/lib/systems/parse.nix
index 98db2595235f..cdfeafe7c18d 100644
--- a/lib/systems/parse.nix
+++ b/lib/systems/parse.nix
@@ -17,6 +17,9 @@
{ lib }:
let
+ inherit (import ../meta-types.nix { inherit lib; })
+ enum
+ ;
inherit (lib)
all
any
@@ -28,7 +31,6 @@ let
id
length
mapAttrs
- mergeOneOption
optionalString
splitString
versionAtLeast
@@ -46,20 +48,19 @@ let
isCygwin
;
- inherit (lib.types)
- enum
- isType
- mkOptionType
- setType
- ;
-
setTypes =
type:
- mapAttrs (
- name: value:
- assert type.check value;
- setType type.name ({ inherit name; } // value)
- );
+ if type ? verify then
+ let
+ inherit (type) verify;
+ in
+ mapAttrs (
+ name: value:
+ assert verify value;
+ { inherit name; } // value
+ )
+ else
+ mapAttrs (name: value: { inherit name; } // value);
# gnu-config will ignore the portion of a triple matching the
# regex `e?abi.*$` when determining the validity of a triple. In
@@ -76,11 +77,9 @@ in
rec {
################################################################################
-
- types.openSignificantByte = mkOptionType {
+ types.openSignificantByte = {
name = "significant-byte";
description = "Endianness";
- merge = mergeOneOption;
};
types.significantByte = enum (attrValues significantBytes);
@@ -103,21 +102,24 @@ rec {
################################################################################
- types.openCpuType = mkOptionType {
+ types.openCpuType = {
name = "cpu-type";
description = "instruction set architecture name and information";
- merge = mergeOneOption;
- check =
- x:
- types.bitWidth.check x.bits
- && (if 8 < x.bits then types.significantByte.check x.significantByte else !(x ? significantByte));
+ verify =
+ let
+ verifyBitWidth = types.bitWidth.verify;
+ verifySignificantByte = types.significantByte.verify;
+ in
+ v:
+ verifyBitWidth v.bits
+ && (if 8 < v.bits then verifySignificantByte v.significantByte else !(v ? significantByte));
};
types.cpuType = enum (attrValues cpuTypes);
cpuTypes =
let
- inherit (significantBytes) bigEndian littleEndian;
+ inherit (significantBytes) littleEndian bigEndian;
in
setTypes types.openCpuType {
arm = {
@@ -487,10 +489,9 @@ rec {
################################################################################
- types.openVendor = mkOptionType {
+ types.openVendor = {
name = "vendor";
description = "vendor for the platform";
- merge = mergeOneOption;
};
types.vendor = enum (attrValues vendors);
@@ -499,23 +500,19 @@ rec {
apple = { };
pc = { };
knuth = { };
-
# Actually matters, unlocking some MinGW-w64-specific options in GCC. See
# bottom of https://sourceforge.net/p/mingw-w64/wiki2/Unicode%20apps/
w64 = { };
-
none = { };
unknown = { };
};
################################################################################
- types.openExecFormat = mkOptionType {
+ types.openExecFormat = {
name = "exec-format";
description = "executable container used by the kernel";
- merge = mergeOneOption;
};
-
types.execFormat = enum (attrValues execFormats);
execFormats = setTypes types.openExecFormat {
@@ -524,16 +521,14 @@ rec {
macho = { };
pe = { };
wasm = { };
-
unknown = { };
};
################################################################################
- types.openKernelFamily = mkOptionType {
+ types.openKernelFamily = {
name = "exec-format";
description = "executable container used by the kernel";
- merge = mergeOneOption;
};
types.kernelFamily = enum (attrValues kernelFamilies);
@@ -545,12 +540,15 @@ rec {
################################################################################
- types.openKernel = mkOptionType {
- name = "kernel";
+ types.openKernel = {
+ name = "open-kernel";
description = "kernel name and information";
- merge = mergeOneOption;
- check =
- x: types.execFormat.check x.execFormat && all types.kernelFamily.check (attrValues x.families);
+ verify =
+ let
+ verifyExecFormat = types.execFormat.verify;
+ verifyKernelFamily = types.kernelFamily.verify;
+ in
+ v: verifyExecFormat v.execFormat && all verifyKernelFamily (attrValues v.families);
};
types.kernel = enum (attrValues kernels);
@@ -647,10 +645,9 @@ rec {
################################################################################
- types.openAbi = mkOptionType {
+ types.openAbi = {
name = "abi";
description = "binary interface for compiled code and syscalls";
- merge = mergeOneOption;
};
types.abi = enum (attrValues abis);
@@ -760,119 +757,138 @@ rec {
################################################################################
- types.parsedPlatform = mkOptionType {
+ types.parsedPlatform = {
name = "system";
description = "fully parsed representation of llvm- or nix-style platform tuple";
- merge = mergeOneOption;
- check =
+ verify =
+ let
+ verifyCpu = types.cpuType.verify;
+ verifyVendor = types.vendor.verify;
+ verifyKernel = types.kernel.verify;
+ verifyAbi = types.abi.verify;
+ in
{
cpu,
vendor,
kernel,
abi,
}:
- types.cpuType.check cpu
- && types.vendor.check vendor
- && types.kernel.check kernel
- && types.abi.check abi;
+ verifyCpu cpu && verifyVendor vendor && verifyKernel kernel && verifyAbi abi;
};
- isSystem = isType "system";
+ isSystem = v: v._type or null == "system";
mkSystem =
+ let
+ inherit (types.parsedPlatform) verify;
+ in
components:
- assert types.parsedPlatform.check components;
- setType "system" components;
+ assert verify components;
+ components
+ // {
+ _type = "system";
+ };
mkSkeletonFromList =
+ let
+ linuxComponents = [
+ "eabi"
+ "eabihf"
+ "elf"
+ "gnu"
+ ];
+ appleComponents = [
+ "redox"
+ "mmixware"
+ "ghcjs"
+ "mingw32"
+ "uefi"
+ ];
+ in
l:
{
"1" =
- if head l == "avr" then
+ let
+ firstComponent = head l;
+ in
+ if firstComponent == "avr" then
{
- cpu = head l;
+ cpu = firstComponent;
kernel = "none";
abi = "unknown";
}
else
throw "system string '${lib.concatStringsSep "-" l}' with 1 component is ambiguous";
"2" = # We only do 2-part hacks for things Nix already supports
- if elemAt l 1 == "cygwin" then
+ let
+ secondComponent = elemAt l 1;
+ in
+ if secondComponent == "cygwin" then
mkSkeletonFromList [
(head l)
"pc"
- "cygwin"
+ secondComponent
]
# MSVC ought to be the default ABI so this case isn't needed. But then it
# becomes difficult to handle the gnu* variants for Aarch32 correctly for
# minGW. So it's easier to make gnu* the default for the MinGW, but
# hack-in MSVC for the non-MinGW case right here.
- else if elemAt l 1 == "windows" then
+ else if secondComponent == "windows" then
{
cpu = head l;
- kernel = "windows";
+ kernel = secondComponent;
abi = "msvc";
}
- else if (elemAt l 1) == "elf" then
+ else if secondComponent == "elf" then
{
cpu = head l;
vendor = "unknown";
kernel = "none";
- abi = elemAt l 1;
+ abi = secondComponent;
}
else
{
cpu = head l;
- kernel = elemAt l 1;
+ kernel = secondComponent;
};
"3" =
+ let
+ secondComponent = elemAt l 1;
+ thirdComponent = elemAt l 2;
+ in
# cpu-kernel-environment
- if
- elemAt l 1 == "linux"
- || elem (elemAt l 2) [
- "eabi"
- "eabihf"
- "elf"
- "gnu"
- ]
- then
+ if secondComponent == "linux" || elem thirdComponent linuxComponents then
{
cpu = head l;
- kernel = elemAt l 1;
- abi = elemAt l 2;
+ kernel = secondComponent;
+ abi = thirdComponent;
vendor = "unknown";
}
# cpu-vendor-os
else if
- elemAt l 1 == "apple"
- || elem (elemAt l 2) [
- "redox"
- "mmixware"
- "ghcjs"
- "mingw32"
- "uefi"
- ]
- || hasPrefix "freebsd" (elemAt l 2)
- || hasPrefix "netbsd" (elemAt l 2)
- || hasPrefix "openbsd" (elemAt l 2)
- || hasPrefix "genode" (elemAt l 2)
- || hasPrefix "wasm32" (elemAt l 0)
+ secondComponent == "apple"
+ || elem thirdComponent appleComponents
+ || hasPrefix "freebsd" thirdComponent
+ || hasPrefix "netbsd" thirdComponent
+ || hasPrefix "openbsd" thirdComponent
+ || hasPrefix "genode" thirdComponent
+ || hasPrefix "wasm32" (head l)
then
{
cpu = head l;
- vendor = elemAt l 1;
+ vendor = secondComponent;
kernel =
- if elemAt l 2 == "mingw32" then
+ if thirdComponent == "mingw32" then
"windows" # autotools breaks on -gnu for window
else
- elemAt l 2;
+ thirdComponent;
}
# lots of tools expect a triplet for Cygwin, even though the vendor is just "pc"
- else if elemAt l 2 == "cygwin" then
+ else if thirdComponent == "cygwin" then
{
cpu = head l;
- vendor = elemAt l 1;
- kernel = "cygwin";
+ vendor = secondComponent;
+ kernel = thirdComponent;
}
else
throw "system string '${lib.concatStringsSep "-" l}' with 3 components is ambiguous";
@@ -887,7 +903,17 @@ rec {
or (throw "system string '${lib.concatStringsSep "-" l}' has invalid number of hyphen-separated components");
# This should revert the job done by config.guess from the gcc compiler.
+ # Note: this does _not_ verify that the system is valid
+ # `mkSystemFromString` is recommended for external use
mkSystemFromSkeleton =
+ let
+ getCpu = name: cpuTypes.${name} or (throw "Unknown CPU type: ${name}");
+ getVendor = name: vendors.${name} or (throw "Unknown vendor: ${name}");
+ getKernel = name: kernels.${name} or (throw "Unknown kernel: ${name}");
+ getAbi = name: abis.${name} or (throw "Unknown ABI: ${name}");
+ hasDarwinPrefix = hasPrefix "darwin";
+ hasBsdPrefix = hasPrefix "netbsd";
+ in
{
cpu,
# Optional, but fallback too complex for here.
@@ -902,11 +928,6 @@ rec {
null,
}@args:
let
- getCpu = name: cpuTypes.${name} or (throw "Unknown CPU type: ${name}");
- getVendor = name: vendors.${name} or (throw "Unknown vendor: ${name}");
- getKernel = name: kernels.${name} or (throw "Unknown kernel: ${name}");
- getAbi = name: abis.${name} or (throw "Unknown ABI: ${name}");
-
parsed = {
cpu = getCpu args.cpu;
vendor =
@@ -919,10 +940,10 @@ rec {
else
vendors.unknown;
kernel =
- if hasPrefix "darwin" args.kernel then
- getKernel "darwin"
- else if hasPrefix "netbsd" args.kernel then
- getKernel "netbsd"
+ if hasDarwinPrefix args.kernel then
+ kernels.darwin
+ else if hasBsdPrefix args.kernel then
+ kernels.netbsd
else
getKernel (removeAbiSuffix args.kernel);
abi =
@@ -941,11 +962,12 @@ rec {
};
in
- mkSystem parsed;
+ parsed;
- mkSystemFromString = s: mkSystemFromSkeleton (mkSkeletonFromList (splitString "-" s));
+ mkSystemFromString = s: mkSystem (mkSystemFromSkeleton (mkSkeletonFromList (splitString "-" s)));
- kernelName = kernel: kernel.name + toString (kernel.version or "");
+ kernelName =
+ kernel: if kernel ? version then kernel.name + toString kernel.version else kernel.name;
darwinArch = cpu: if cpu.name == "aarch64" then "arm64" else cpu.name;
diff --git a/lib/systems/rustc-target-env.nix b/lib/systems/rustc-target-env.nix
new file mode 100644
index 000000000000..a0bb0b66dc9c
--- /dev/null
+++ b/lib/systems/rustc-target-env.nix
@@ -0,0 +1,160 @@
+# As of rustc 1.96.0. Empty `target_env` values are omitted.
+#
+# Generation script:
+# #!/bin/bash
+# rustc --print target-list | while read -r target ; do
+# env=$(rustc --print cfg --target "$target" | grep '^target_env=' | sed 's/# ^target_env="//;s/"$//')
+# [[ -z "$env" ]] && continue
+# printf ' %s = "%s";\n' "$target" "$env"
+# done
+{
+ aarch64-apple-ios-macabi = "macabi";
+ aarch64-apple-ios-sim = "sim";
+ aarch64-apple-tvos-sim = "sim";
+ aarch64-apple-visionos-sim = "sim";
+ aarch64-apple-watchos-sim = "sim";
+ aarch64-pc-windows-gnullvm = "gnu";
+ aarch64-pc-windows-msvc = "msvc";
+ aarch64-unknown-linux-gnu = "gnu";
+ aarch64-unknown-linux-gnu_ilp32 = "gnu";
+ aarch64-unknown-linux-musl = "musl";
+ aarch64-unknown-linux-ohos = "ohos";
+ aarch64-unknown-managarm-mlibc = "mlibc";
+ aarch64-unknown-nto-qnx700 = "nto70";
+ aarch64-unknown-nto-qnx710 = "nto71";
+ aarch64-unknown-nto-qnx710_iosock = "nto71_iosock";
+ aarch64-unknown-nto-qnx800 = "nto80";
+ aarch64-unknown-redox = "relibc";
+ aarch64-uwp-windows-msvc = "msvc";
+ aarch64-wrs-vxworks = "gnu";
+ aarch64_be-unknown-linux-gnu = "gnu";
+ aarch64_be-unknown-linux-gnu_ilp32 = "gnu";
+ aarch64_be-unknown-linux-musl = "musl";
+ arm-unknown-linux-gnueabi = "gnu";
+ arm-unknown-linux-gnueabihf = "gnu";
+ arm-unknown-linux-musleabi = "musl";
+ arm-unknown-linux-musleabihf = "musl";
+ arm64ec-pc-windows-msvc = "msvc";
+ armeb-unknown-linux-gnueabi = "gnu";
+ armv4t-unknown-linux-gnueabi = "gnu";
+ armv5te-unknown-linux-gnueabi = "gnu";
+ armv5te-unknown-linux-musleabi = "musl";
+ armv5te-unknown-linux-uclibceabi = "uclibc";
+ armv6k-nintendo-3ds = "newlib";
+ armv7-rtems-eabihf = "newlib";
+ armv7-sony-vita-newlibeabihf = "newlib";
+ armv7-unknown-linux-gnueabi = "gnu";
+ armv7-unknown-linux-gnueabihf = "gnu";
+ armv7-unknown-linux-musleabi = "musl";
+ armv7-unknown-linux-musleabihf = "musl";
+ armv7-unknown-linux-ohos = "ohos";
+ armv7-unknown-linux-uclibceabi = "uclibc";
+ armv7-unknown-linux-uclibceabihf = "uclibc";
+ armv7-wrs-vxworks-eabihf = "gnu";
+ armv7a-vex-v5 = "v5";
+ csky-unknown-linux-gnuabiv2 = "gnu";
+ csky-unknown-linux-gnuabiv2hf = "gnu";
+ hexagon-unknown-linux-musl = "musl";
+ i386-apple-ios = "sim";
+ i586-unknown-linux-gnu = "gnu";
+ i586-unknown-linux-musl = "musl";
+ i586-unknown-redox = "relibc";
+ i686-pc-nto-qnx700 = "nto70";
+ i686-pc-windows-gnu = "gnu";
+ i686-pc-windows-gnullvm = "gnu";
+ i686-pc-windows-msvc = "msvc";
+ i686-unknown-hurd-gnu = "gnu";
+ i686-unknown-linux-gnu = "gnu";
+ i686-unknown-linux-musl = "musl";
+ i686-uwp-windows-gnu = "gnu";
+ i686-uwp-windows-msvc = "msvc";
+ i686-win7-windows-gnu = "gnu";
+ i686-win7-windows-msvc = "msvc";
+ i686-wrs-vxworks = "gnu";
+ loongarch64-unknown-linux-gnu = "gnu";
+ loongarch64-unknown-linux-musl = "musl";
+ loongarch64-unknown-linux-ohos = "ohos";
+ m68k-unknown-linux-gnu = "gnu";
+ mips-unknown-linux-gnu = "gnu";
+ mips-unknown-linux-musl = "musl";
+ mips-unknown-linux-uclibc = "uclibc";
+ mips64-openwrt-linux-musl = "musl";
+ mips64-unknown-linux-gnuabi64 = "gnu";
+ mips64-unknown-linux-muslabi64 = "musl";
+ mips64el-unknown-linux-gnuabi64 = "gnu";
+ mips64el-unknown-linux-muslabi64 = "musl";
+ mipsel-unknown-linux-gnu = "gnu";
+ mipsel-unknown-linux-musl = "musl";
+ mipsel-unknown-linux-uclibc = "uclibc";
+ mipsisa32r6-unknown-linux-gnu = "gnu";
+ mipsisa32r6el-unknown-linux-gnu = "gnu";
+ mipsisa64r6-unknown-linux-gnuabi64 = "gnu";
+ mipsisa64r6el-unknown-linux-gnuabi64 = "gnu";
+ powerpc-unknown-linux-gnu = "gnu";
+ powerpc-unknown-linux-gnuspe = "gnu";
+ powerpc-unknown-linux-musl = "musl";
+ powerpc-unknown-linux-muslspe = "musl";
+ powerpc-wrs-vxworks = "gnu";
+ powerpc-wrs-vxworks-spe = "gnu";
+ powerpc64-unknown-linux-gnu = "gnu";
+ powerpc64-unknown-linux-musl = "musl";
+ powerpc64-wrs-vxworks = "gnu";
+ powerpc64le-unknown-linux-gnu = "gnu";
+ powerpc64le-unknown-linux-musl = "musl";
+ riscv32-wrs-vxworks = "gnu";
+ riscv32gc-unknown-linux-gnu = "gnu";
+ riscv32gc-unknown-linux-musl = "musl";
+ riscv32imac-esp-espidf = "newlib";
+ riscv32imafc-esp-espidf = "newlib";
+ riscv32imc-esp-espidf = "newlib";
+ riscv64-wrs-vxworks = "gnu";
+ riscv64a23-unknown-linux-gnu = "gnu";
+ riscv64gc-unknown-linux-gnu = "gnu";
+ riscv64gc-unknown-linux-musl = "musl";
+ riscv64gc-unknown-managarm-mlibc = "mlibc";
+ riscv64gc-unknown-redox = "relibc";
+ s390x-unknown-linux-gnu = "gnu";
+ s390x-unknown-linux-musl = "musl";
+ sparc-unknown-linux-gnu = "gnu";
+ sparc64-unknown-linux-gnu = "gnu";
+ thumbv7a-pc-windows-msvc = "msvc";
+ thumbv7a-uwp-windows-msvc = "msvc";
+ thumbv7neon-unknown-linux-gnueabihf = "gnu";
+ thumbv7neon-unknown-linux-musleabihf = "musl";
+ wasm32-wali-linux-musl = "musl";
+ wasm32-wasip1 = "p1";
+ wasm32-wasip1-threads = "p1";
+ wasm32-wasip2 = "p2";
+ wasm32-wasip3 = "p3";
+ x86_64-apple-ios = "sim";
+ x86_64-apple-ios-macabi = "macabi";
+ x86_64-apple-tvos = "sim";
+ x86_64-apple-watchos-sim = "sim";
+ x86_64-fortanix-unknown-sgx = "sgx";
+ x86_64-pc-nto-qnx710 = "nto71";
+ x86_64-pc-nto-qnx710_iosock = "nto71_iosock";
+ x86_64-pc-nto-qnx800 = "nto80";
+ x86_64-pc-windows-gnu = "gnu";
+ x86_64-pc-windows-gnullvm = "gnu";
+ x86_64-pc-windows-msvc = "msvc";
+ x86_64-unikraft-linux-musl = "musl";
+ x86_64-unknown-hurd-gnu = "gnu";
+ x86_64-unknown-l4re-uclibc = "uclibc";
+ x86_64-unknown-linux-gnu = "gnu";
+ x86_64-unknown-linux-gnuasan = "gnu";
+ x86_64-unknown-linux-gnumsan = "gnu";
+ x86_64-unknown-linux-gnutsan = "gnu";
+ x86_64-unknown-linux-gnux32 = "gnu";
+ x86_64-unknown-linux-musl = "musl";
+ x86_64-unknown-linux-ohos = "ohos";
+ x86_64-unknown-managarm-mlibc = "mlibc";
+ x86_64-unknown-redox = "relibc";
+ x86_64-uwp-windows-gnu = "gnu";
+ x86_64-uwp-windows-msvc = "msvc";
+ x86_64-win7-windows-gnu = "gnu";
+ x86_64-win7-windows-msvc = "msvc";
+ x86_64-wrs-vxworks = "gnu";
+ xtensa-esp32-espidf = "newlib";
+ xtensa-esp32s2-espidf = "newlib";
+ xtensa-esp32s3-espidf = "newlib";
+}
diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix
index 021a7eca25b8..4223f517b839 100644
--- a/lib/tests/misc.nix
+++ b/lib/tests/misc.nix
@@ -2164,6 +2164,21 @@ runTests {
};
};
+ testConcatMapAttrsDuplicates = {
+ expr =
+ concatMapAttrs
+ (name: value: {
+ final = value;
+ })
+ {
+ a = 1;
+ b = 2;
+ };
+ expected = {
+ final = 2;
+ };
+ };
+
testFilterAttrs = {
expr = filterAttrs (n: v: n != "a" && (v.hello or false) == true) {
a.hello = true;
@@ -4672,7 +4687,7 @@ runTests {
};
testPlatformMatchNoMatch = {
- expr = meta.platformMatch { system = "x86_64-darwin"; } "x86_64-linux";
+ expr = meta.platformMatch { system = "x86_64-freebsd"; } "x86_64-linux";
expected = false;
};
diff --git a/lib/tests/modules/types-attrTag.nix b/lib/tests/modules/types-attrTag.nix
index d48badae391f..167f839c027c 100644
--- a/lib/tests/modules/types-attrTag.nix
+++ b/lib/tests/modules/types-attrTag.nix
@@ -120,7 +120,17 @@ in
assert config.merged.positive == { yay = 100; };
assert config.merged.extensi-foo == { extensible = "foo"; };
assert config.merged.extensi-bar == { extensible = "bar"; };
+ assert config.docs."submodules..foo.bar".declarations == [ __curPos.file ];
assert config.docs."submodules..foo.bar".type == "signed integer";
+ assert
+ lib.length
+ (options.submodules.type.nestedTypes.elemType.nestedTypes.foo.type.getSubOptions [ ])
+ .bar.declarationPositions == 1;
+ assert
+ (lib.head
+ (options.submodules.type.nestedTypes.elemType.nestedTypes.foo.type.getSubOptions [ ])
+ .bar.declarationPositions
+ ).file == __curPos.file;
assert config.docs."submodules..qux".type == "string";
assert config.docs."submodules..qux".declarations == [ __curPos.file ];
assert
@@ -133,8 +143,11 @@ in
assert config.docs."submodules..qux".description == "A qux for when you don't want a foo";
assert config.docs."submodules..qux".readOnly == false;
assert config.docs."submodules..qux".visible == true;
- # Not available (yet?)
- # assert config.docs."submodules..qux".declarationsWithPositions == [ ... ];
+ assert
+ lib.length options.submodules.type.nestedTypes.elemType.nestedTypes.qux.declarationPositions == 1;
+ assert
+ (lib.head options.submodules.type.nestedTypes.elemType.nestedTypes.qux.declarationPositions).file
+ == __curPos.file;
assert options.submodules.declarations == [ __curPos.file ];
assert lib.length options.submodules.declarationPositions == 1;
assert (lib.head options.submodules.declarationPositions).file == __curPos.file;
diff --git a/lib/tests/release.nix b/lib/tests/release.nix
index 54d62f87b3d5..280c88cee66b 100644
--- a/lib/tests/release.nix
+++ b/lib/tests/release.nix
@@ -9,7 +9,6 @@
pkgsBB ? pkgs.pkgsBuildBuild,
nix ? pkgs-nixVersions.stable,
nixVersions ? [
- pkgs-nixVersions.nix_2_28
nix
pkgs-nixVersions.latest
],
diff --git a/lib/tests/systems.nix b/lib/tests/systems.nix
index 3feef87d97c0..a27861b09253 100644
--- a/lib/tests/systems.nix
+++ b/lib/tests/systems.nix
@@ -127,7 +127,6 @@ lib.runTests (
];
testx86_64 = mseteq x86_64 [
"x86_64-linux"
- "x86_64-darwin"
"x86_64-freebsd"
"x86_64-genode"
"x86_64-redox"
@@ -145,7 +144,6 @@ lib.runTests (
"x86_64-cygwin"
];
testdarwin = mseteq darwin [
- "x86_64-darwin"
"aarch64-darwin"
];
testfreebsd = mseteq freebsd [
@@ -215,6 +213,22 @@ lib.runTests (
})
// {
+ test_platforms_pass_typecheck = {
+ # To improve performance, the result of parsing all 70+ systems in
+ # `lib.platforms` into their attrset representations aren't typechecked.
+ # The results are expected to be constant, and avoiding the slow
+ # validation gives a meaningful improvement to evaluation speed. We ensure
+ # that all systems pass validation here
+ expr = builtins.filter (
+ system:
+ let
+ evalResult = builtins.tryEval (lib.systems.parse.mkSystemFromString system);
+ in
+ evalResult.success == false
+ ) lib.platforms.all;
+
+ expected = [ ];
+ };
test_equals_example_x86_64-linux = {
expr = lib.systems.equals (lib.systems.elaborate "x86_64-linux") (
lib.systems.elaborate "x86_64-linux"
diff --git a/lib/trivial.nix b/lib/trivial.nix
index 9f0f5daf1332..9288a9e1b1db 100644
--- a/lib/trivial.nix
+++ b/lib/trivial.nix
@@ -474,7 +474,7 @@ in
*/
oldestSupportedRelease =
# Update on master only. Do not backport.
- 2511;
+ 2605;
/**
Whether a feature is supported in all supported releases (at the time of
diff --git a/lib/types.nix b/lib/types.nix
index f9ae3c82a172..8ed7bec21713 100644
--- a/lib/types.nix
+++ b/lib/types.nix
@@ -21,7 +21,6 @@ let
isString
substring
sort
- throwIf
toDerivation
toList
types
@@ -408,7 +407,7 @@ rec {
betweenDesc = lowest: highest: "${toString lowest} and ${toString highest} (both inclusive)";
between =
lowest: highest:
- assert lib.assertMsg (lowest <= highest) "ints.between: lowest must be smaller than highest";
+ assert lowest <= highest || throw "ints.between: lowest must be smaller than highest";
addCheck int (x: x >= lowest && x <= highest)
// {
name = "intBetween";
@@ -495,7 +494,7 @@ rec {
{
between =
lowest: highest:
- assert lib.assertMsg (lowest <= highest) "numbers.between: lowest must be smaller than highest";
+ assert lowest <= highest || throw "numbers.between: lowest must be smaller than highest";
addCheck number (x: x >= lowest && x <= highest)
// {
name = "numberBetween";
@@ -660,10 +659,10 @@ rec {
inStore ? null,
absolute ? null,
}:
- throwIf (inStore != null && absolute != null && inStore && !absolute)
- "In pathWith, inStore means the path must be absolute"
- mkOptionType
- {
+ if inStore != null && absolute != null && inStore && !absolute then
+ throw "In pathWith, inStore means the path must be absolute"
+ else
+ mkOptionType {
name = "path";
description = (
(if absolute == null then "" else (if absolute then "absolute " else "relative "))
@@ -1079,8 +1078,8 @@ rec {
builtins.addErrorContext
"while checking that attrTag tag ${lib.strings.escapeNixIdentifier n} is an option with a type${inAttrPosSuffix tags_ n}"
(
- throwIf (opt._type or null != "option")
- "In attrTag, each tag value must be an option, but tag ${lib.strings.escapeNixIdentifier n} ${
+ if opt._type or null != "option" then
+ throw "In attrTag, each tag value must be an option, but tag ${lib.strings.escapeNixIdentifier n} ${
if opt ? _type then
if opt._type == "option-type" then
"was a bare type, not wrapped in mkOption."
@@ -1089,23 +1088,24 @@ rec {
else
"was not."
}"
+ else
opt
- // {
- declarations =
- opt.declarations or (
- let
- pos = builtins.unsafeGetAttrPos n tags_;
- in
- if pos == null then [ ] else [ pos.file ]
- );
- declarationPositions =
- opt.declarationPositions or (
- let
- pos = builtins.unsafeGetAttrPos n tags_;
- in
- if pos == null then [ ] else [ pos ]
- );
- }
+ // {
+ declarations =
+ opt.declarations or (
+ let
+ pos = builtins.unsafeGetAttrPos n tags_;
+ in
+ if pos == null then [ ] else [ pos.file ]
+ );
+ declarationPositions =
+ opt.declarationPositions or (
+ let
+ pos = builtins.unsafeGetAttrPos n tags_;
+ in
+ if pos == null then [ ] else [ pos ]
+ );
+ }
)
) tags_;
choicesStr = concatMapStringsSep ", " lib.strings.escapeNixIdentifier (attrNames tags);
@@ -1140,6 +1140,27 @@ rec {
else
throw "The option `${showOption loc}` is defined as ${lib.strings.escapeNixIdentifier choice}, but ${lib.strings.escapeNixIdentifier choice} is not among the valid choices (${choicesStr}). Value ${choice} was defined in ${showFiles (getFiles defs)}.";
nestedTypes = tags;
+ getSubModules =
+ let
+ tagsWithSubModules = filterAttrs (_: mods: mods != null) (
+ mapAttrs (_: opt: opt.type.getSubModules) tags
+ );
+ in
+ if tagsWithSubModules == { } then null else [ tagsWithSubModules ];
+ substSubModules =
+ allWrappedModules:
+ let
+ tagsWithNewTypes = zipAttrsWith (tag: tags.${tag}.type.substSubModules) (
+ concatMap (
+ { _file, imports }: map (mapAttrs (_: imports: { inherit _file imports; })) imports
+ ) allWrappedModules
+ );
+ in
+ attrTag (
+ mapAttrs (
+ tag: opt: opt // (optionalAttrs (tagsWithNewTypes ? ${tag}) { type = tagsWithNewTypes.${tag}; })
+ ) tags
+ );
functor = defaultFunctor "attrTag" // {
type = { tags, ... }: lib.types.attrTag tags;
payload = { inherit tags; };
@@ -1728,9 +1749,9 @@ rec {
# converted to `finalType` using `coerceFunc`.
coercedTo =
coercedType: coerceFunc: finalType:
- assert lib.assertMsg (
+ assert
coercedType.getSubModules == null
- ) "coercedTo: coercedType must not have submodules (it’s a ${coercedType.description})";
+ || throw "coercedTo: coercedType must not have submodules (it’s a ${coercedType.description})";
mkOptionType rec {
name = "coercedTo";
description = "${optionDescriptionPhrase (class: class == "noun") finalType} or ${
diff --git a/maintainers/README.md b/maintainers/README.md
index 4c3e5cff9c2a..4959e6aa5892 100644
--- a/maintainers/README.md
+++ b/maintainers/README.md
@@ -160,7 +160,7 @@ Once approved, the team will have the right privileges to be pinged and requeste
> [!TIP]
> The team name should be as short as possible; because it is nested under the maintainers group, no -maintainers suffix is needed.
-After the first [weekly team sync](../.github/workflows/team-sync.yml) with the new team, it's then also possible to link it to the entry in `team-list.nix` by setting its `github` field to the GitHub team name.
+After the first [weekly team sync](../.github/workflows/teams.yml) with the new team, it's then also possible to link it to the entry in `team-list.nix` by setting its `github` field to the GitHub team name.
# Maintainer scripts
diff --git a/maintainers/github-teams.json b/maintainers/github-teams.json
index 9a9fc155a52c..8c1abf72ed9e 100644
--- a/maintainers/github-teams.json
+++ b/maintainers/github-teams.json
@@ -43,12 +43,9 @@
"id": 5468470,
"maintainers": {},
"members": {
- "aherrmann": 732652,
"avdv": 3471749,
- "ethercrow": 222467,
"groodt": 343415,
- "kalbasit": 87115,
- "mboes": 51356
+ "kalbasit": 87115
},
"name": "Bazel"
},
@@ -128,7 +125,6 @@
"Pandapip1": 45835846,
"a-kenji": 65275785,
"drakon64": 6444703,
- "michaelBelsanti": 62124625,
"thefossguy": 44400303
},
"name": "COSMIC"
@@ -155,6 +151,7 @@
"samuela": 226872
},
"members": {
+ "ethancedwards8": 60861925,
"prusnak": 42201
},
"name": "cuda-maintainers"
@@ -182,11 +179,12 @@
"members": {
"0xMRTT": 105598867,
"21CSM": 81891917,
+ "4evy": 57304299,
"Aleksanaa": 42209822,
+ "Br1ght0ne": 12615679,
"CorbanR": 1918683,
"Emin017": 99674037,
"Et7f3": 29592775,
- "FlameFlag": 57304299,
"Guanran928": 68757440,
"LnL7": 689294,
"Mastermindaxe": 33257997,
@@ -368,10 +366,10 @@
"freedesktop": {
"description": "Maintain Freedesktop.org packages for graphical desktop.",
"id": 3806136,
- "maintainers": {},
- "members": {
+ "maintainers": {
"jtojnar": 705123
},
+ "members": {},
"name": "Freedesktop"
},
"geospatial": {
@@ -414,6 +412,18 @@
},
"name": "GNOME"
},
+ "gnome-circle": {
+ "description": "Maintain GNOME Circle applications.",
+ "id": 18234720,
+ "maintainers": {
+ "Aleksanaa": 42209822,
+ "Hythera": 87016780,
+ "getchoo": 48872998,
+ "michaelgrahamevans": 5932424
+ },
+ "members": {},
+ "name": "GNOME Circle"
+ },
"golang": {
"description": "Maintain Golang compilers",
"id": 4020424,
@@ -560,8 +570,7 @@
"members": {
"Ericson2314": 1055245,
"peterwaller-arm": 52030119,
- "rrbutani": 7833358,
- "sternenseemann": 3154475
+ "rrbutani": 7833358
},
"name": "LLVM"
},
@@ -847,6 +856,18 @@
},
"name": "Radicle"
},
+ "redis": {
+ "description": "Maintain Redis, related packages, module, and tests.",
+ "id": 17932473,
+ "maintainers": {
+ "Hythera": 87016780,
+ "MiniHarinn": 52773156,
+ "debtquity": 225436867,
+ "kybe236": 118068228
+ },
+ "members": {},
+ "name": "Redis"
+ },
"reproducible": {
"description": "Team that is interested in reproducible builds",
"id": 7625643,
@@ -930,11 +951,11 @@
"description": "Reviews changes to core packages for Nixpkgs security vulnerabilities: https://github.com/NixOS/nixpkgs/issues/494349",
"id": 16430758,
"maintainers": {
- "balsoft": 18467667,
- "infinisil": 20525370
+ "balsoft": 18467667
},
"members": {
"andir": 638836,
+ "leona-ya": 11006031,
"pyrox0": 35778371
},
"name": "Security review"
@@ -989,6 +1010,17 @@
},
"name": "systemd"
},
+ "test-driver": {
+ "description": "Maintain the NixOS integration test driver.",
+ "id": 18201265,
+ "maintainers": {
+ "Ma27": 6025220,
+ "kmein": 10352507,
+ "tfc": 29044
+ },
+ "members": {},
+ "name": "test-driver"
+ },
"xen-project": {
"description": "Maintain the Xen Project Hypervisor and the related tooling ecosystem. Members listed as \"Maintainers\" are recipients of Xen Security Advisories sent to xsa@nixos.org.",
"id": 11127725,
diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix
index 98a3cbacd816..c82bed9ae9a0 100644
--- a/maintainers/maintainer-list.nix
+++ b/maintainers/maintainer-list.nix
@@ -93,6 +93,11 @@
github = "0x120581f";
githubId = 130835755;
};
+ _0x2B = {
+ name = "0x2B";
+ github = "0x2B-bin";
+ githubId = 49249957;
+ };
_0x3f = {
name = "0x3f";
github = "0x3fiona";
@@ -157,17 +162,18 @@
githubId = 105598867;
matrix = "@0xmrtt:envs.net";
};
+ _0xSA7 = {
+ name = "Saleh Diaa Ahmed";
+ github = "0xSA7";
+ githubId = 109046494;
+ email = "salehdiaaahmed@gmail.com";
+ };
_1000101 = {
email = "b1000101@pm.me";
github = "1000101";
githubId = 791309;
name = "Jan Hrnko";
};
- _1000teslas = {
- name = "Kevin Tran";
- github = "sledgehammervampire";
- githubId = 47207223;
- };
_13621 = {
name = "13621";
github = "13621";
@@ -208,6 +214,17 @@
github = "2hexed";
githubId = 54501296;
};
+ _2zqa = {
+ name = "Marijn Kok";
+ email = "hkju4b4ds@mozmail.com";
+ github = "2zqa";
+ githubId = 25235249;
+ };
+ _30350n = {
+ name = "Max Schlecht";
+ github = "30350n";
+ githubId = 34186858;
+ };
_360ied = {
name = "Brian Zhu";
email = "therealbarryplayer@gmail.com";
@@ -250,6 +267,12 @@
githubId = 3417013;
name = "Eske Nielsen";
};
+ _4evy = {
+ name = "4evy";
+ email = "git@evy.pink";
+ github = "4evy";
+ githubId = 57304299;
+ };
_4r7if3x = {
email = "the.artifex@proton.me";
matrix = "@4r7if3x:matrix.org";
@@ -283,6 +306,14 @@
githubId = 92977828;
name = "Mori Zen";
};
+ _74k1 = {
+ email = "git.t@betsumei.com";
+ github = "74k1";
+ githubId = 49000471;
+ keys = [ { fingerprint = "46F3 422F 63A3 1369 7EAB 83D5 1CF1 55F7 6F21 3503"; } ];
+ matrix = "@74k1:matrix.org";
+ name = "Tim";
+ };
_7591yj = {
email = "yeongjin.kim@proton.me";
github = "7591yj";
@@ -329,12 +360,6 @@
githubId = 381298;
name = "9R";
};
- _9yokuro = {
- email = "xzstd099@protonmail.com";
- github = "9yokuro";
- githubId = 119095935;
- name = "9yokuro";
- };
a-camarillo = {
name = "Anthony Camarillo";
email = "anthony.camarillo.96@gmail.com";
@@ -398,8 +423,8 @@
};
aaravrav = {
name = "aaravrav";
- github = "Aarav";
- githubId = 3279912;
+ github = "aaravrav";
+ githubId = 37036762;
};
aarnphm = {
email = "contact@aarnphm.xyz";
@@ -591,6 +616,12 @@
{ fingerprint = "CE85 54F7 B9BC AC0D D648 5661 AB5F C04C 3C94 443F"; }
];
};
+ ad030 = {
+ name = "Alex Dam";
+ github = "ad030";
+ githubId = 68517956;
+ email = "work.a.dam.030@proton.me";
+ };
adam-tj = {
github = "adam-tj";
githubId = 9314405;
@@ -764,12 +795,6 @@
githubId = 168;
name = "Alexander Flatter";
};
- afldcr = {
- email = "alex@fldcr.com";
- github = "afldcr";
- githubId = 335271;
- name = "James Alexander Feldman-Crough";
- };
afontain = {
email = "afontain@posteo.net";
github = "necessarily-equal";
@@ -807,6 +832,12 @@
github = "aftix";
githubId = 4008299;
};
+ agarmu = {
+ name = "Mukul Agarwal";
+ email = "vcs@agarmu.com";
+ github = "agarmu";
+ githubId = 55563106;
+ };
agbrooks = {
email = "andrewgrantbrooks@gmail.com";
github = "agbrooks";
@@ -838,12 +869,6 @@
githubId = 207841739;
name = "Savchenko Dmitriy";
};
- aherrmann = {
- email = "andreash87@gmx.ch";
- github = "aherrmann";
- githubId = 732652;
- name = "Andreas Herrmann";
- };
ahirner = {
email = "a.hirner+nixpkgs@gmail.com";
github = "ahirner";
@@ -875,6 +900,12 @@
matrix = "aiya:catgirl.cloud";
name = "aiya";
};
+ aietes = {
+ email = "stefan@standa.de";
+ github = "Aietes";
+ githubId = 5823770;
+ name = "Stefan Krüger";
+ };
aij = {
email = "aij+git@mrph.org";
github = "aij";
@@ -1263,6 +1294,12 @@
name = "Alexandru Tocar";
keys = [ { fingerprint = "B617 DD24 3AB0 2E3F 2E67 DBFD 1305 2A85 D7A4 2AA4"; } ];
};
+ AlexAntonik = {
+ email = "antonikavv@gmail.com";
+ github = "AlexAntonik";
+ githubId = 55547934;
+ name = "Alex Antonik";
+ };
alexarice = {
email = "alexrice999@hotmail.co.uk";
github = "alexarice";
@@ -1463,6 +1500,12 @@
githubId = 60479013;
name = "Alma Cemerlic";
};
+ aln730 = {
+ email = "arnsg730@proton.me";
+ github = "aln730";
+ githubId = 94751172;
+ name = "AGawas";
+ };
Alper-Celik = {
email = "alper@alper-celik.dev";
name = "Alper Çelik";
@@ -1560,6 +1603,12 @@
githubId = 153175;
name = "Andrew Marshall";
};
+ ambiso = {
+ email = "ambisotopy@gmail.com";
+ github = "ambiso";
+ githubId = 3750466;
+ name = "Robin Leander Schröder";
+ };
ambossmann = {
email = "timogottszky+git@gmail.com";
github = "Ambossmann";
@@ -1603,12 +1652,6 @@
githubId = 382798;
name = "amfl";
};
- amiddelk = {
- email = "amiddelk@gmail.com";
- github = "amiddelk";
- githubId = 1358320;
- name = "Arie Middelkoop";
- };
aminechikhaoui = {
email = "amine.chikhaoui91@gmail.com";
github = "AmineChikhaoui";
@@ -1893,12 +1936,6 @@
githubId = 750786;
name = "Justin Wood";
};
- anmonteiro = {
- email = "anmonteiro@gmail.com";
- github = "anmonteiro";
- githubId = 661909;
- name = "Antonio Nuno Monteiro";
- };
anna328p = {
email = "anna328p@gmail.com";
github = "anna328p";
@@ -1912,11 +1949,28 @@
githubId = 81317317;
name = "Anna Aurora";
};
+ anned20 = {
+ email = "annedouwe@bouma.tech";
+ github = "anned20";
+ githubId = 6921250;
+ name = "Anne Douwe Bouma";
+ };
anninzy = {
github = "anninzy";
githubId = 143312793;
name = "Annin";
};
+ anntnzrb = {
+ github = "anntnzrb";
+ githubId = 51257127;
+ name = "anntnzrb";
+ };
+ anntoin = {
+ email = "anntoin@gmail.com";
+ github = "Anntoin";
+ githubId = 3289027;
+ name = "Anntóin Wilkinson";
+ };
anoa = {
matrix = "@andrewm:amorgan.xyz";
email = "andrew@amorgan.xyz";
@@ -1976,6 +2030,12 @@
githubId = 14838767;
name = "Jacopo Scannella";
};
+ antoineco = {
+ email = "hello@acotten.com";
+ github = "antoineco";
+ githubId = 3299086;
+ name = "Antoine Cotten";
+ };
anton-4 = {
name = "Anton";
github = "Anton-4";
@@ -2674,6 +2734,11 @@
githubId = 574938;
name = "Jonathan Glines";
};
+ auscaster = {
+ github = "auscaster";
+ githubId = 100876;
+ name = "Kam Low";
+ };
auscyber = {
email = "ivyp@outlook.com.au";
github = "auscyber";
@@ -2867,7 +2932,7 @@
azahi = {
name = "Azat Bahawi";
email = "azat@bahawi.net";
- matrix = "@azahi:azahi.cc";
+ matrix = "@azahi:matrix.org";
github = "azahi";
githubId = 22211000;
keys = [ { fingerprint = "2688 0377 C31D 9E81 9BDF 83A8 C8C6 BDDB 3847 F72B"; } ];
@@ -3099,6 +3164,12 @@
githubId = 75235;
name = "Michael Walker";
};
+ barsikus007 = {
+ name = "barsikus007";
+ email = "barsikus07@gmail.com";
+ github = "barsikus007";
+ githubId = 37113583;
+ };
bartoostveen = {
name = "Bart Oostveen";
github = "bartoostveen";
@@ -3133,7 +3204,10 @@
email = "bastian@asmussen.tech";
github = "BastianAsmussen";
githubId = 76102128;
- keys = [ { fingerprint = "3B11 7469 0893 85E7 16C2 7CD9 0FE5 A355 DBC9 2568"; } ];
+ keys = [
+ { fingerprint = "3B11 7469 0893 85E7 16C2 7CD9 0FE5 A355 DBC9 2568"; }
+ { fingerprint = "220D 68EC DF94 20EE 1E6C B215 D92D 668B 77A2 9897"; }
+ ];
};
basvandijk = {
email = "v.dijk.bas@gmail.com";
@@ -3362,6 +3436,13 @@
githubId = 4313548;
name = "Ben Sparks";
};
+ benhaskins = {
+ name = "Ben Haskins";
+ email = "ben.haskins@spang.co.uk";
+ github = "benhaskins";
+ githubId = 179679961;
+ keys = [ { fingerprint = "bnYZE0VGodlVwh/eUlqGQsAHeSE0hBPbo2EN2LrGu0M"; } ];
+ };
benhiemer = {
name = "Benedikt Hiemer";
email = "ben.email@posteo.de";
@@ -3444,12 +3525,6 @@
githubId = 20448408;
keys = [ { fingerprint = "D446 E58D 87A0 31C7 EC15 88D7 B461 2924 45C6 E696"; } ];
};
- berce = {
- email = "bert.moens@gmail.com";
- github = "berce";
- githubId = 10439709;
- name = "Bert Moens";
- };
bergey = {
email = "bergey@teallabs.org";
github = "bergey";
@@ -3947,6 +4022,19 @@
githubId = 140968250;
keys = [ { fingerprint = "8321 ED3A 8DB9 99A5 1F3B F80F F268 2914 EA42 DE26"; } ];
};
+ bpmct = {
+ name = "Ben Potter";
+ email = "ben@coder.com";
+ github = "bpmct";
+ githubId = 22407953;
+ };
+ Br1ght0ne = {
+ name = "Oleksii Filonenko";
+ email = "nixpkgs@brightone.cloud";
+ matrix = "@br1ght0ne:matrix.org";
+ github = "Br1ght0ne";
+ githubId = 12615679;
+ };
br337 = {
email = "brian.porumb@proton.me";
github = "br337";
@@ -4103,6 +4191,12 @@
github = "brittonr";
githubId = 4730485;
};
+ BrockoliniMorgan = {
+ name = "Brock Morgan";
+ email = "brockjamesmorgan@gmail.com";
+ github = "BrockoliniMorgan";
+ githubId = 166275321;
+ };
brodes = {
email = "me@brod.es";
github = "brhoades";
@@ -4197,6 +4291,13 @@
githubId = 18356186;
name = "Gabriela Moreira";
};
+ buggymcbugfix = {
+ email = "nix@vilem.net";
+ github = "buggymcbugfix";
+ matrix = "@buggymcbugfix:matrix.org";
+ githubId = 17603372;
+ name = "Vilem Liepelt";
+ };
bugworm = {
email = "bugworm@zoho.com";
github = "bugworm";
@@ -4371,6 +4472,12 @@
{ fingerprint = "8916 F727 734E 77AB 437F A33A 19AB 76F5 CEE1 1392"; }
];
};
+ caguiclajmg = {
+ email = "jmg.caguicla@guarandoo.me";
+ github = "caguiclajmg";
+ githubId = 32662060;
+ name = "John Mark Gabriel Caguicla";
+ };
CaiqueFigueiredo = {
email = "public@caiquefigueiredo.me";
github = "caiquefigueiredo";
@@ -4383,6 +4490,13 @@
githubId = 48105979;
name = "Caitlin Davitt";
};
+ cakeforcat = {
+ email = "julia@cakeforcat.dev";
+ github = "cakeforcat";
+ githubId = 37912991;
+ name = "Julia Czarny";
+ matrix = "@cakeforcat:matrix.org";
+ };
calavera = {
email = "david.calavera@gmail.com";
github = "calavera";
@@ -4445,12 +4559,6 @@
githubId = 54632731;
name = "Cameron Dugan";
};
- cameronfyfe = {
- email = "cameron.j.fyfe@gmail.com";
- github = "cameronfyfe";
- githubId = 21013281;
- name = "Cameron Fyfe";
- };
cameronnemo = {
email = "cnemo@tutanota.com";
github = "CameronNemo";
@@ -4583,6 +4691,19 @@
githubId = 53847249;
name = "Casey Avila";
};
+ caspersonn = {
+ email = "lucakasper8@gmail.com";
+ github = "Caspersonn";
+ githubId = 96787412;
+ name = "Luca Kasper";
+ };
+ cassandracomar = {
+ name = "Cassandra Comar";
+ github = "cassandracomar";
+ githubId = 320772;
+ email = "cass@mountclare.net";
+ keys = [ { fingerprint = "104E E74E 24A0 372B EAF5 5533 B019 18F7 7E04 AC99"; } ];
+ };
castorNova2 = {
email = "solemnsquire@gmail.com";
github = "castorNova2";
@@ -4662,12 +4783,6 @@
githubId = 52760912;
name = "Cameron Brown";
};
- ccellado = {
- email = "annplague@gmail.com";
- github = "ccellado";
- githubId = 44584960;
- name = "Denis Khalmatov";
- };
ccicnce113424 = {
email = "ccicnce113424@gmail.com";
matrix = "@ccicnce113424:matrix.org";
@@ -4744,12 +4859,6 @@
githubId = 32384814;
name = "Nikita Mitasov";
};
- chaduffy = {
- email = "charles@dyfis.net";
- github = "charles-dyfis-net";
- githubId = 22370;
- name = "Charles Duffy";
- };
changlinli = {
email = "mail@changlinli.com";
github = "changlinli";
@@ -5157,6 +5266,12 @@
githubId = 1448923;
name = "Christian Kauhaus";
};
+ ckgxrg = {
+ email = "ckgxrg@ckgxrg.io";
+ github = "ckgxrg-salt";
+ githubId = 165614491;
+ name = "ckgxrg";
+ };
cko = {
email = "christine.koppelt@gmail.com";
github = "cko";
@@ -5273,13 +5388,6 @@
githubId = 3392199;
name = "Calum MacRae";
};
- cmars = {
- email = "nix@cmars.tech";
- github = "cmars";
- githubId = 23741;
- name = "Casey Marshall";
- keys = [ { fingerprint = "6B78 7E5F B493 FA4F D009 5D10 6DEC 2758 ACD5 A973"; } ];
- };
cmcdragonkai = {
email = "roger.qiu@matrix.ai";
github = "CMCDragonkai";
@@ -5551,6 +5659,11 @@
githubId = 5953003;
name = "Connor Nelson";
};
+ conny = {
+ github = "ConstantConstantin";
+ githubId = 162139822;
+ name = "Constantin-Paul Hertel";
+ };
conradmearns = {
email = "conradmearns+github@pm.me";
github = "ConradMearns";
@@ -5728,6 +5841,12 @@
githubId = 6821729;
github = "criyle";
};
+ crmne = {
+ email = "carmine@paolino.me";
+ github = "crmne";
+ githubId = 106617;
+ name = "Carmine Paolino";
+ };
croissong = {
email = "jan.moeller0@pm.me";
name = "Jan Möller";
@@ -5735,6 +5854,18 @@
githubId = 4162215;
keys = [ { fingerprint = "CE97 9DEE 904C 26AA 3716 78C2 96A4 38F9 EE72 572F"; } ];
};
+ croots = {
+ name = "Cameron Roots";
+ github = "croots";
+ githubId = 38054423;
+ keys = [ { fingerprint = "8496 ECF3 0961 115C A6DE 919F A01D C430 0605 1618"; } ];
+ };
+ crop = {
+ email = "crop_tech@proton.me";
+ name = "crop";
+ github = "crop2000";
+ githubId = 176233921;
+ };
crschnick = {
email = "crschnick@xpipe.io";
name = "Christopher Schnick";
@@ -6178,6 +6309,12 @@
github = "darkyzhou";
githubId = 7220778;
};
+ darshancode2005 = {
+ name = "Darshan Thakare";
+ email = "darshanthakaregsoc2023@gmail.com";
+ github = "DarshanCode2005";
+ githubId = 143271270;
+ };
daru-san = {
name = "Daru";
email = "zadarumaka@proton.me";
@@ -6217,7 +6354,7 @@
name = "Daniel Șerbănescu";
};
daskladas = {
- email = "xvzrsm@tutanota.de";
+ email = "mail@daskladas.de";
github = "daskladas";
githubId = 155686186;
name = "Eric Heinemann";
@@ -6283,6 +6420,12 @@
github = "David-Kopczynski";
githubId = 53194670;
};
+ David-Moody = {
+ name = "David Moody";
+ email = "david.moody@scot.me.uk";
+ github = "David-Moody";
+ githubId = 63956662;
+ };
david-sawatzke = {
email = "d-nix@sawatzke.dev";
github = "david-sawatzke";
@@ -6549,12 +6692,6 @@
githubId = 48378098;
name = "Danila Danko";
};
- deepfire = {
- email = "_deepfire@feelingofgreen.ru";
- github = "deepfire";
- githubId = 452652;
- name = "Kosyrev Serge";
- };
DeeUnderscore = {
email = "d.anzorge@gmail.com";
github = "DeeUnderscore";
@@ -6645,6 +6782,12 @@
githubId = 8864716;
name = "Duarte David";
};
+ demic-dev = {
+ email = "git@demic.dev";
+ github = "demic-dev";
+ githubId = 59309595;
+ name = "Michele De Cillis";
+ };
demin-dmitriy = {
email = "demindf@gmail.com";
github = "demin-dmitriy";
@@ -6717,6 +6860,13 @@
githubId = 77843198;
name = "Vasilis Manetas";
};
+ Deric-W = {
+ email = "robo-eric@gmx.de";
+ github = "Deric-W";
+ githubId = 42873573;
+ name = "Eric Wolf";
+ keys = [ { fingerprint = "ADAA B6F3 A955 5589 D66C CE61 80D2 DA42 8A4A 537F"; } ];
+ };
DerickEddington = {
email = "derick.eddington@pm.me";
github = "DerickEddington";
@@ -6795,6 +6945,12 @@
github = "developer-guy";
githubId = 16693043;
};
+ developmentcats = {
+ name = "Christofer";
+ email = "christofer@coder.com";
+ github = "DevelopmentCats";
+ githubId = 176868952;
+ };
devhell = {
email = ''"^"@regexmail.net'';
github = "devhell";
@@ -6837,6 +6993,12 @@
github = "dfithian";
githubId = 8409320;
};
+ dfjay = {
+ email = "github@dfjay.com";
+ name = "Pavel Yozhikov";
+ github = "dfjay";
+ githubId = 41841630;
+ };
dflores = {
email = "dflores.country455@passinbox.com";
name = "David Flores";
@@ -6938,6 +7100,11 @@
githubId = 2096594;
email = "Dietrich@Daroch.me";
};
+ different-error = {
+ name = "Sanfer D'souza";
+ github = "different-error";
+ githubId = 9338001;
+ };
different-name = {
name = "different-name";
email = "hello@different-name.dev";
@@ -6957,12 +7124,6 @@
github = "DimitarNestorov";
githubId = 8790386;
};
- diniamo = {
- name = "diniamo";
- email = "diniamo53@gmail.com";
- github = "diniamo";
- githubId = 55629891;
- };
diogomdp = {
email = "me@diogodp.dev";
github = "diogomdp";
@@ -7395,6 +7556,13 @@
github = "DSeeLP";
githubId = 46624152;
};
+ dshatz = {
+ email = "dev@dshatz.com";
+ github = "dshatz";
+ githubId = 23437798;
+ name = "Daniels Šatcs";
+ keys = [ { fingerprint = "7452B4B47EA8F6635AB545CA4B974CC26375BB06"; } ];
+ };
dsluijk = {
name = "Dany Sluijk";
email = "nix@dany.dev";
@@ -7661,6 +7829,7 @@
name = "EarthGman";
github = "EarthGman";
githubId = 117403037;
+ keys = [ { fingerprint = "A06C 1E72 4626 7B4C EE16 CC2E 4862 31CD BCE3 AA32"; } ];
};
EBADBEEF = {
name = "EBADBEEF";
@@ -7840,6 +8009,12 @@
name = "Edward Kimber";
githubId = 99987;
};
+ ekisu = {
+ email = "dts.ramon@gmail.com";
+ github = "ekisu";
+ name = "Ramon Dantas";
+ githubId = 5082637;
+ };
eklairs = {
name = "Eklairs";
email = "eklairs@proton.me";
@@ -7859,12 +8034,6 @@
githubId = 27162016;
name = "Ramdip Gill";
};
- elasticdog = {
- email = "aaron@elasticdog.com";
- github = "elasticdog";
- githubId = 4742;
- name = "Aaron Bull Schaefer";
- };
elatov = {
email = "elatov@gmail.com";
github = "elatov";
@@ -7909,6 +8078,11 @@
githubId = 183738665;
name = "Marcell Tóth";
};
+ ELHart05 = {
+ name = "Okba Allaoua";
+ github = "ELHart05";
+ githubId = 96151694;
+ };
eliandoran = {
email = "contact@eliandoran.me";
name = "Elian Doran";
@@ -8255,6 +8429,12 @@
githubId = 7820865;
name = "Eric Dallo";
};
+ erics118 = {
+ name = "Eric Shen";
+ github = "erics118";
+ githubId = 52634785;
+ email = "ericshen118@gmail.com";
+ };
ericson2314 = {
email = "John.Ericson@Obsidian.Systems";
matrix = "@Ericson2314:matrix.org";
@@ -8387,11 +8567,6 @@
githubId = 16175276;
keys = [ { fingerprint = "E4CE B0F0 B2EC 09A3 9678 F294 CC7A 7E3C 6CF3 1343"; } ];
};
- EstebanMacanek = {
- name = "Esteban Macanek";
- github = "EstebanMacanek";
- githubId = 75503218;
- };
esteve = {
name = "Esteve Fernandez";
email = "nixpkgs@nara.ac";
@@ -8409,12 +8584,6 @@
{ fingerprint = "2E51 F618 39D1 FA94 7A73 00C2 34C0 4305 D581 DBFE"; }
];
};
- ethercrow = {
- email = "ethercrow@gmail.com";
- github = "ethercrow";
- githubId = 222467;
- name = "Dmitry Ivanov";
- };
ethindp = {
name = "Ethin Probst";
email = "harlydavidsen@gmail.com";
@@ -8579,6 +8748,13 @@
githubId = 63652646;
name = "Xaver Oswald";
};
+ examosa = {
+ email = "examosa@fastmail.com";
+ github = "examosa";
+ githubId = 23395221;
+ matrix = "@jamonith:matrix.org";
+ name = "Jules Amonith";
+ };
exarkun = {
email = "exarkun@twistedmatrix.com";
github = "exarkun";
@@ -8664,12 +8840,6 @@
github = "f2k1de";
githubId = 11199213;
};
- f4814n = {
- email = "me@f4814n.de";
- github = "f4814";
- githubId = 11909469;
- name = "Fabian Geiselhart";
- };
f4z3r = {
email = "f4z3r-github@pm.me";
name = "Jakob Beckmann";
@@ -8721,6 +8891,12 @@
name = "Fábio Batista";
keys = [ { fingerprint = "D2D8 69D8 5EEC 30AD D327 B4A5 6CD5 5257 DB01 8B72"; } ];
};
+ FabricSoul = {
+ name = "FabricSoul";
+ github = "FabricSoul";
+ githubId = 114606360;
+ email = "fabric.soul7@gmail.com";
+ };
fallenbagel = {
name = "fallenbagel";
github = "fallenbagel";
@@ -8753,6 +8929,13 @@
githubId = 345808;
name = "Jakub Okoński";
};
+ FatBoyXPC = {
+ name = "FatBoyXPC";
+ email = "fatboyxpc@gmail.com";
+ github = "FatBoyXPC";
+ githubId = 744962;
+ keys = [ { fingerprint = "0E08 1B81 CBCA 1CF7 9568 A13F C4ED 3CA2 3211 8969"; } ];
+ };
faukah = {
github = "faukah";
name = "faukah";
@@ -8933,6 +9116,11 @@
githubId = 5198058;
name = "Udo Sauer";
};
+ fernvenue = {
+ github = "fernvenue";
+ githubId = 84565547;
+ name = "fernvenue";
+ };
feyorsh = {
email = "george@feyor.sh";
github = "Feyorsh";
@@ -8989,6 +9177,12 @@
githubId = 41450706;
name = "fin-w";
};
+ fiona = {
+ email = "mail@fiona.hamburg";
+ github = "Fiona42069";
+ githubId = 260108682;
+ name = "fiona";
+ };
fionera = {
email = "nix@fionera.de";
github = "fionera";
@@ -9071,13 +9265,6 @@
name = "Sebastian Neubauer";
keys = [ { fingerprint = "2F93 661D AC17 EA98 A104 F780 ECC7 55EE 583C 1672"; } ];
};
- FlameFlag = {
- name = "FlameFlag";
- email = "github@flameflag.dev";
- github = "FlameFlag";
- githubId = 57304299;
- matrix = "@donteatoreo:matrix.org";
- };
Flameopathic = {
email = "flameopathic@gmail.com";
github = "Flameopathic";
@@ -9296,7 +9483,7 @@
fraioveio = {
email = "francesco@vecchia.lol";
github = "FraioVeio";
- githubId = 181361445;
+ githubId = 44584365;
name = "Francesco Vecchia";
};
franciscod = {
@@ -9333,6 +9520,12 @@
github = "frectonz";
githubId = 53809656;
};
+ fred441a = {
+ email = "frederik@altofte.dk";
+ github = "fred441a";
+ githubId = 10808098;
+ name = "Frederik Hansen";
+ };
fredeb = {
email = "frederikbraendstrup@gmail.com";
github = "FredeHoey";
@@ -9455,11 +9648,12 @@
githubId = 2881922;
name = "Francis St-Amour";
};
- ftrvxmtrx = {
- email = "ftrvxmtrx@gmail.com";
- github = "ftrvxmtrx";
- githubId = 248148;
- name = "Sigrid Solveig Haflínudóttir";
+ fstracke = {
+ email = "fritz.stracke@rwth-aachen.de";
+ github = "fstracke";
+ githubId = 31512703;
+ name = "Fritz Stracke";
+ keys = [ { fingerprint = "7A9D 6DB2 0C5A AA55 7838 EEE6 B8CA 2D9A D8F0 506F"; } ];
};
ftsimas = {
name = "Filippos Tsimas";
@@ -9645,6 +9839,12 @@
githubId = 45048741;
name = "Alwanga Oyango";
};
+ galder = {
+ email = "galder@ibm.com";
+ github = "galderz";
+ githubId = 50187;
+ name = "Galder Zamarreño";
+ };
gale-username = {
name = "gale";
email = "git@galewebsite.com";
@@ -9733,6 +9933,12 @@
githubId = 16470252;
name = "Gemini Lasswell";
};
+ gbhu753 = {
+ email = "me@gurjotbhullar.com";
+ github = "GBHU753";
+ githubId = 100983240;
+ name = "Gurjot Bhullar";
+ };
gbtb = {
email = "goodbetterthebeast3@gmail.com";
github = "gbtb";
@@ -9899,6 +10105,12 @@
githubId = 3217744;
name = "Peter Ferenczy";
};
+ ghastrum = {
+ name = "Dennis Malmin";
+ email = "dennis.malmin@tuta.com";
+ github = "Ghastrum";
+ githubId = 276720856;
+ };
ghostbuster91 = {
name = "Kasper Kondzielski";
email = "kghost0@gmail.com";
@@ -9912,12 +10124,6 @@
name = "Will Owens";
keys = [ { fingerprint = "8E98 BB01 BFF8 AEA4 E303 FC4C 8074 09C9 2CE2 3033"; } ];
};
- ghuntley = {
- email = "ghuntley@ghuntley.com";
- github = "ghuntley";
- githubId = 127353;
- name = "Geoffrey Huntley";
- };
gibbert = {
email = "gbjgms@gmail.com";
github = "zgibberish";
@@ -10133,6 +10339,12 @@
githubId = 2041764;
name = "Andreas Wendleder";
};
+ goobertony = {
+ github = "goobertony";
+ email = "tonygameing@proton.me";
+ githubId = 133613491;
+ name = "Tonii Bittersweet";
+ };
goodrone = {
email = "goodrone@gmail.com";
github = "goodrone";
@@ -10227,6 +10439,11 @@
githubId = 13297896;
name = "David Isaksson";
};
+ grandjeanlab = {
+ github = "grandjeanlab";
+ githubId = 22633767;
+ name = "grandjeanlab";
+ };
gravndal = {
email = "gaute.ravndal+nixos@gmail.com";
github = "gravndal";
@@ -10269,6 +10486,12 @@
githubId = 273582;
name = "greg";
};
+ gregshuflin = {
+ email = "greg@everdayimshuflin.com";
+ github = "neunenak";
+ githubId = 311545;
+ name = "Greg Shuflin";
+ };
greizgh = {
email = "greizgh@ephax.org";
github = "greizgh";
@@ -10478,12 +10701,23 @@
githubId = 14929991;
keys = [ { fingerprint = "F7D3 7890 228A 9074 40E1 FD48 46B9 228E 814A 2AAC"; } ];
};
+ haansn08 = {
+ name = "Stefan Haan";
+ github = "haansn08";
+ githubId = 6215916;
+ };
hacker1024 = {
name = "hacker1024";
email = "hacker1024@users.sourceforge.net";
github = "hacker1024";
githubId = 20849728;
};
+ hadal84 = {
+ name = "hadal84";
+ email = "business.masses555@passinbox.com";
+ github = "hadal84";
+ githubId = 143954694;
+ };
hadilq = {
name = "Hadi Lashkari Ghouchani";
email = "hadilq.dev@gmail.com";
@@ -11035,6 +11269,12 @@
github = "HolgerPeters";
githubId = 4097049;
};
+ Holiu618 = {
+ email = "zvttt9db@anonaddy.me";
+ github = "Holiu618";
+ githubId = 165534185;
+ name = "Holiu";
+ };
hollowman6 = {
email = "hollowman@hollowman.ml";
github = "HollowMan6";
@@ -11250,12 +11490,6 @@
github = "hxtmdev";
githubId = 7771007;
};
- hypersw = {
- email = "baltic@hypersw.net";
- github = "hypersw";
- githubId = 2332070;
- name = "Serge Baltic";
- };
hythera = {
name = "Hythera";
github = "Hythera";
@@ -11317,6 +11551,18 @@
githubId = 69209;
name = "Ian Duncan";
};
+ IanHollow = {
+ github = "IanHollow";
+ githubId = 72767437;
+ name = "Ian Holloway";
+ };
+ iank = {
+ email = "iank@iank.org";
+ github = "iank";
+ githubId = 109598;
+ name = "Ian Kilgore";
+ keys = [ { fingerprint = "21F7 244E 095F 619E 8E3E 1EB4 9F3A 4AAB 4D90 D879"; } ];
+ };
ianliu = {
email = "ian.liu88@gmail.com";
github = "ianliu";
@@ -11727,12 +11973,6 @@
name = "Silvan Mosberger";
keys = [ { fingerprint = "6C2B 55D4 4E04 8266 6B7D DA1A 422E 9EDA E015 7170"; } ];
};
- iniw = {
- email = "git@vini.cat";
- github = "iniw";
- githubId = 30220881;
- name = "Vinicius Deolindo";
- };
insipx = {
email = "github@andrewplaza.dev";
github = "insipx";
@@ -11776,6 +12016,12 @@
githubId = 16307070;
name = "iosmanthus";
};
+ ipetkov = {
+ name = "Ivan Petkov";
+ github = "ipetkov";
+ githubId = 1638690;
+ email = "nixpkgs@ipetkov.dev";
+ };
ipsavitsky = {
email = "ipsavitsky234@gmail.com";
github = "ipsavitsky";
@@ -12077,6 +12323,12 @@
githubId = 67414100;
name = "Jachym Putta";
};
+ jack-avery = {
+ email = "jack.avery.business@gmail.com";
+ github = "jack-avery";
+ githubId = 47289484;
+ name = "Jack Avery";
+ };
jackcres = {
email = "crespomerchano@gmail.com";
github = "omarcresp";
@@ -12344,6 +12596,12 @@
github = "JaviMerino";
githubId = 44926;
};
+ jayadeep-km-sonarsource = {
+ email = "jayadeep.kinavoormadam@sonarsource.com";
+ name = "Jayadeep Kinavoor Madam";
+ github = "jayadeep-km-sonarsource";
+ githubId = 156662663;
+ };
jayesh-bhoot = {
name = "Jayesh Bhoot";
email = "jb@jayeshbhoot.com";
@@ -12617,6 +12875,12 @@
githubId = 5741620;
name = "Jeremy Schlatter";
};
+ jeremystucki = {
+ email = "dev@jeremystucki.ch";
+ github = "jeremystucki";
+ githubId = 7629727;
+ name = "Jeremy Stucki";
+ };
jerith666 = {
email = "github@matt.mchenryfamily.org";
github = "jerith666";
@@ -12821,6 +13085,11 @@
name = "Jonathan Hult";
keys = [ { fingerprint = "DEE7 054C 5D43 ABEA C0F9 8BE4 3512 C8F8 2E2F 2A16"; } ];
};
+ jiamingc = {
+ name = "Jiaming Chen";
+ github = "jiamingc";
+ githubId = 21327067;
+ };
jiegec = {
name = "Jiajie Chen";
email = "c@jia.je";
@@ -13031,12 +13300,6 @@
githubId = 879272;
name = "Julio Merino";
};
- jn-sena = {
- email = "jn-sena@proton.me";
- github = "jn-sena";
- githubId = 45771313;
- name = "Sena";
- };
jnsgruk = {
email = "jon@sgrs.uk";
github = "jnsgruk";
@@ -13068,6 +13331,13 @@
name = "João Moreira";
keys = [ { fingerprint = "F457 0A3A 5F89 22F8 F572 E075 EF8B F2C8 C5F4 097D"; } ];
};
+ joaosreis = {
+ email = "joaosreis@outlook.pt";
+ github = "joaosreis";
+ githubId = 3420596;
+ name = "João Santos Reis";
+ keys = [ { fingerprint = "9BEB F137 4CAC 96D6 A4ED EC49 BA2E 05BD B7F8 C0EE"; } ];
+ };
joaquintrinanes = {
email = "hi@joaquint.io";
github = "JoaquinTrinanes";
@@ -13116,6 +13386,12 @@
githubId = 310981;
name = "Joel Burget";
};
+ joelgranados = {
+ email = "joel.granados.oss@joelgranados.com";
+ github = "Joelgranados";
+ githubId = 356364;
+ name = "Joel Granados";
+ };
joelmo = {
email = "joel.moberg@gmail.com";
github = "joelmo";
@@ -13457,12 +13733,6 @@
github = "joshprk";
githubId = 123624726;
};
- joshuafern = {
- name = "Joshua Fern";
- email = "joshuafern@protonmail.com";
- github = "JoshuaFern";
- githubId = 4300747;
- };
joshvanl = {
email = " me@joshvanl.dev ";
github = "JoshVanL";
@@ -13569,6 +13839,11 @@
githubId = 4611077;
name = "Raymond Gauthier";
};
+ jromer = {
+ github = "jelleromer";
+ githubId = 11951893;
+ name = "Jelle Römer";
+ };
jrpotter = {
email = "jrpotter2112@gmail.com";
github = "jrpotter";
@@ -13861,6 +14136,13 @@
githubId = 2396926;
name = "Justin Woo";
};
+ justkrysteq = {
+ email = "justkrysteq@proton.me";
+ github = "justkrysteq";
+ githubId = 43525126;
+ name = "Krysteq";
+ matrix = "@krysteq:matrix.org";
+ };
jvanbruegge = {
email = "supermanitu@gmail.com";
github = "jvanbruegge";
@@ -13944,6 +14226,14 @@
name = "Kenichi Kamiya";
keys = [ { fingerprint = "9121 5D87 20CA B405 C63F 24D2 EF6E 574D 040A E2A5"; } ];
};
+ kacper-uminski = {
+ name = "Kacper Uminski";
+ email = "kacper+nixpkgs@lysator.liu.se";
+ github = "kacper-uminski";
+ githubId = 57466578;
+ matrix = "@kacper.uminski:matrix.org";
+ keys = [ { fingerprint = "3DF9 3DEB CAA9 81FA B3E2 A7F0 87DA 201D E02F 14B1"; } ];
+ };
kaction = {
name = "Dmitry Bogatov";
email = "KAction@disroot.org";
@@ -14110,6 +14400,12 @@
githubId = 48174247;
name = "Aleksandar Nesovic";
};
+ kayoubi13 = {
+ email = "nix@foss-daily.org";
+ github = "kayoubi13";
+ githubId = 299534864;
+ name = "Kayoubi13";
+ };
kazcw = {
email = "kaz@lambdaverse.org";
github = "kazcw";
@@ -14177,6 +14473,12 @@
github = "keller00";
githubId = 8452750;
};
+ kenis1108 = {
+ email = "1836362346@qq.com";
+ github = "kenis1108";
+ githubId = 45393183;
+ name = "kenis";
+ };
kenran = {
email = "johannes.maier@mailbox.org";
github = "kenranunderscore";
@@ -14241,6 +14543,12 @@
githubId = 8211181;
name = "Kevin Kandlbinder";
};
+ kevinpita = {
+ email = "gitkevin@pm.me";
+ github = "kevinpita";
+ githubId = 69063372;
+ name = "Kevin Pita";
+ };
keyruu = {
name = "Lucas";
email = "me@keyruu.de";
@@ -14347,6 +14655,11 @@
githubId = 464625;
name = "Enric Morales";
};
+ kikos0 = {
+ github = "KiKoS0";
+ githubId = 22998716;
+ name = "Riadh Daghmoura";
+ };
kilianar = {
email = "mail@kilianar.de";
github = "kilianar";
@@ -14395,6 +14708,12 @@
githubId = 691290;
name = "Keshav Kini";
};
+ kinnrai = {
+ email = "me@kinnrai.com";
+ github = "kinnrai";
+ githubId = 72676584;
+ name = "kinnrai";
+ };
kintrix = {
email = "kintrix007@proton.me";
github = "kintrix007";
@@ -14426,6 +14745,12 @@
github = "kiranshila";
githubId = 6305359;
};
+ KirCK = {
+ email = "Arikkenebas09@gmail.com";
+ github = "AristarhKenebas";
+ githubId = 142233116;
+ name = "Aristarh Kenebas";
+ };
kirelagin = {
email = "kirelagin@gmail.com";
matrix = "@kirelagin:matrix.org";
@@ -14455,6 +14780,13 @@
githubId = 7587245;
name = "Kit Langton";
};
+ Kitsune = {
+ name = "Lunae V";
+ github = "KitsuneDev";
+ githubId = 11809449;
+ email = "kitsune@akitsune.dev";
+ matrix = "@kitsune:akitsune.dev";
+ };
kitsunoff = {
github = "kitsunoff";
githubId = 58953114;
@@ -14578,6 +14910,12 @@
github = "kmicklas";
githubId = 929096;
};
+ kmjayadeep = {
+ email = "kmjayadeep@gmail.com";
+ name = "Jayadeep KM";
+ github = "kmjayadeep";
+ githubId = 6793260;
+ };
kmogged = {
name = "Kevin";
github = "kmogged";
@@ -14595,6 +14933,12 @@
github = "svelterust";
githubId = 85593302;
};
+ knightfemale = {
+ email = "2067834160@qq.com";
+ github = "knightfemale";
+ githubId = 124773040;
+ name = "骑士姬";
+ };
knightpp = {
email = "knightpp@proton.me";
github = "knightpp";
@@ -14614,8 +14958,7 @@
};
koi = {
name = "june";
- email = "me@koi.rip";
- matrix = "@koi:nelliel.cv";
+ email = "packages@koi.rip";
github = "koibtw";
githubId = 75480869;
keys = [
@@ -15137,6 +15480,11 @@
githubId = 27364685;
name = "Lorenzo Pasqui";
};
+ l1n = {
+ github = "l1n";
+ githubId = 1367322;
+ name = "Nova DasSarma";
+ };
l1npengtul = {
email = "l1npengtul@l1npengtul.lol";
github = "l1npengtul";
@@ -15177,7 +15525,7 @@
};
lactose = {
name = "lactose";
- email = "lactose@allthingslinux.com";
+ email = "mail@lactose.dev";
github = "juuyokka";
githubId = 15185244;
};
@@ -15287,6 +15635,12 @@
githubId = 632767;
name = "Guillaume Maudoux";
};
+ layzyoldman = {
+ email = "ricardopaivacampos@gmail.com";
+ github = "layzyoldman";
+ githubId = 193278607;
+ name = "Ricardo Campos";
+ };
LazilyStableProton = {
email = "LazilyStable@proton.me";
github = "LazyStability";
@@ -15671,6 +16025,17 @@
githubId = 124475;
name = "Olli Helenius";
};
+ ligerothetiger = {
+ email = "ligero@ligerothetiger.com";
+ name = "LigeroTheTiger";
+ github = "LigeroTheTiger";
+ githubId = 42996211;
+ keys = [
+ {
+ fingerprint = "5zLV9yqjL18GsG1qan0tGM5341niQNYnU/hiBCscn04";
+ }
+ ];
+ };
lightbulbjim = {
email = "chris@killred.net";
github = "lightbulbjim";
@@ -16059,6 +16424,13 @@
name = "Bernardo Meurer";
keys = [ { fingerprint = "F193 7596 57D5 6DA4 CCD4 786B F4C0 D53B 8D14 C246"; } ];
};
+ lovistovis = {
+ email = "love.lysell.berglund@gmail.com";
+ github = "lovistovis";
+ githubId = 64896699;
+ name = "Love Lysell Berglund";
+ keys = [ { fingerprint = "7958 2B47 1D85 3CC9 A3FB 30D5 7B54 D564 D46D 9880"; } ];
+ };
lowfatcomputing = {
email = "andreas.wagner@lowfatcomputing.org";
github = "lowfatcomputing";
@@ -16135,6 +16507,11 @@
githubId = 83420438;
name = "Lewis";
};
+ lubsch = {
+ github = "lubsch";
+ githubId = 33580245;
+ name = "Benjamin Lohmar";
+ };
luc65r = {
email = "lucas@ransan.fr";
github = "luc65r";
@@ -16286,6 +16663,12 @@
githubId = 30468956;
name = "Lukas Heiligenbrunner";
};
+ lukas-sgx = {
+ email = "lukas.soigneux@epitech.eu";
+ github = "lukas-sgx";
+ githubId = 68616614;
+ name = "Lukas Soigneux";
+ };
lukaslihotzki = {
email = "lukas@lihotzki.de";
github = "lukaslihotzki";
@@ -16341,17 +16724,17 @@
githubId = 10746692;
name = "Leopold Luley";
};
- lumi = {
- email = "lumi@pew.im";
- github = "lumi-me-not";
- githubId = 26020062;
- name = "lumi";
- };
luminarleaf = {
github = "LuminarLeaf";
githubId = 80571430;
name = "Luminar Leaf";
};
+ luna-the-tuna = {
+ email = "contact@luna.fish";
+ github = "luna-the-tuna";
+ githubId = 112084382;
+ name = "Luna Heyman";
+ };
luna_1024 = {
email = "contact@luna.computer";
github = "luna-1024";
@@ -16408,6 +16791,12 @@
githubId = 115777584;
name = "Lutz Berger";
};
+ luuumine = {
+ email = "nix@luuumine.com";
+ github = "luuumine";
+ githubId = 55056797;
+ name = "Romain Delhommais";
+ };
lux = {
email = "lux@lux.name";
github = "luxzeitlos";
@@ -17067,6 +17456,12 @@
githubId = 110860;
name = "Martin Jesper Low Madsen";
};
+ martinkontsek = {
+ email = "martinkontsek@gmail.com";
+ github = "martinkontsek";
+ githubId = 9106867;
+ name = "Martin Kontšek";
+ };
martinramm = {
email = "martin-ramm@gmx.de";
github = "MartinRamm";
@@ -17191,6 +17586,12 @@
github = "matrss";
githubId = 9308656;
};
+ matshch = {
+ name = "Artem Leshchev";
+ github = "matshch";
+ githubId = 2412121;
+ email = "matshch@gmail.com";
+ };
matt-snider = {
email = "matt.snider@protonmail.com";
github = "matt-snider";
@@ -17497,12 +17898,6 @@
githubId = 9051309;
name = "Maximilian Bode";
};
- mboes = {
- email = "mboes@tweag.net";
- github = "mboes";
- githubId = 51356;
- name = "Mathieu Boespflug";
- };
mBornand = {
email = "dev.mbornand@systemb.ch";
github = "mBornand";
@@ -17574,6 +17969,12 @@
{ fingerprint = "838A FE0D 55DC 074E 360F 943A 84B6 9CE6 F3F6 B767"; }
];
};
+ mcuste = {
+ email = "github@muratcanuste.com";
+ github = "mcuste";
+ githubId = 10829864;
+ name = "Murat Can Üste";
+ };
mcwitt = {
email = "mcwitt@gmail.com";
github = "mcwitt";
@@ -17753,6 +18154,12 @@
github = "merrkry";
githubId = 124278440;
};
+ mert-kurttutan = {
+ email = "mert-kurttutan@gmail.com";
+ name = "Mert Kurttutan";
+ github = "mert-kurttutan";
+ githubId = 88637659;
+ };
messemar = {
email = "martin.messer@cyberus-technology.de";
name = "messemar";
@@ -17914,6 +18321,12 @@
githubId = 1575834;
name = "Michael Adler";
};
+ michaelAllen = {
+ name = "Michael Allen";
+ email = "mcallen71398@gmail.com";
+ github = "That1LinuxGuy";
+ githubId = 207959559;
+ };
michaelBelsanti = {
email = "mbels03@protonmail.com";
name = "Mike Belsanti";
@@ -18064,12 +18477,6 @@
githubId = 14096356;
name = "Michael McLeod";
};
- mikefaille = {
- email = "michael@faille.io";
- github = "mikefaille";
- githubId = 978196;
- name = "Michaël Faille";
- };
mikehorn = {
email = "mikehornproton@proton.me";
github = "MikeHorn-git";
@@ -18372,6 +18779,13 @@
github = "mkleczek";
githubId = 11559480;
};
+ mkoppmann = {
+ email = "dev@mkoppmann.at";
+ github = "mkoppmann";
+ githubId = 21209717;
+ matrix = "@shibayashi:ncrypt.at";
+ name = "Michael Koppmann";
+ };
mksafavi = {
name = "MK Safavi";
email = "mksafavi@gmail.com";
@@ -18495,13 +18909,6 @@
github = "mohe2015";
githubId = 13287984;
};
- momeemt = {
- name = "Mutsuha Asada";
- email = "me@momee.mt";
- github = "momeemt";
- githubId = 43488453;
- keys = [ { fingerprint = "D94F EA9F 5B08 F6A1 7B8F EB8B ACB5 4F0C BC6A A7C6"; } ];
- };
monaaraj = {
name = "Mon Aaraj";
email = "owo69uwu69@gmail.com";
@@ -18550,6 +18957,12 @@
githubId = 830082;
name = "Nathan Moos";
};
+ mootfrost = {
+ email = "hello@mootfrost.dev";
+ github = "mootfrost";
+ githubId = 75925945;
+ name = "Andrew Semeykin";
+ };
moraxyc = {
name = "Moraxyc Xu";
email = "i@qaq.li";
@@ -18639,12 +19052,24 @@
githubId = 2072185;
name = "Marc Scholten";
};
+ Mr-Stoneman = {
+ email = "mrstoneman@sten.rocks";
+ github = "Mr-Stoneman";
+ githubId = 72991726;
+ name = "Mr-Stoneman";
+ };
mrbenjadmin = {
email = "mrbenjadmin@gmail.com";
github = "mrbenjadmin";
githubId = 68156310;
name = "Benjamin Strachan";
};
+ mrbjarksen = {
+ email = "bjarki@harksen.is";
+ github = "mrbjarksen";
+ githubId = 62466569;
+ name = "Bjarki B. Harksen";
+ };
mrcjkb = {
email = "marc@jakobi.dev";
matrix = "@mrcjk:matrix.org";
@@ -18897,6 +19322,12 @@
githubId = 220262;
name = "Ion Mudreac";
};
+ mugaizzo = {
+ email = "mugahedman@hotmail.com";
+ github = "mugaizzo";
+ githubId = 15838537;
+ name = "Mugahed Izzeldin";
+ };
mulatta = {
email = "seungwon@mulatta.io";
github = "mulatta";
@@ -19042,7 +19473,8 @@
};
MysteryBlokHed = {
name = "Adam Thompson-Sharpe";
- email = "hi@adamts.me";
+ email = "nix@adamts.me";
+ matrix = "@adam:adamts.me";
github = "MysteryBlokHed";
githubId = 13910387;
keys = [ { fingerprint = "086E EF20 D54E D348 E5BA 6263 16E9 43E6 596F FB4E"; } ];
@@ -19090,6 +19522,12 @@
githubId = 61601147;
name = "basti n00b0ss";
};
+ n0pl4c3 = {
+ email = "mail@n0pl4c3.net";
+ github = "n0pl4c3";
+ githubId = 69087176;
+ name = "n0pl4c3";
+ };
n3oney = {
name = "Michał Minarowski";
email = "nixpkgs@neoney.dev";
@@ -19259,12 +19697,6 @@
name = "Nasir Hussain";
keys = [ { fingerprint = "7A10 AB8E 0BEC 566B 090C 9BE3 D812 6E55 9CE7 C35D"; } ];
};
- nasrally = {
- email = "suffer.ring@ya.ru";
- github = "nasrally";
- githubId = 50599445;
- name = "Nikita Grishko";
- };
nat-418 = {
github = "nat-418";
githubId = 93013864;
@@ -19393,12 +19825,24 @@
githubId = 364510;
name = "Tobias Geerinckx-Rice";
};
+ ndavd = {
+ email = "email@ndavd.com";
+ github = "ndavd";
+ githubId = 74260683;
+ name = "Nuno David";
+ };
ndl = {
email = "ndl@endl.ch";
github = "ndl";
githubId = 137805;
name = "Alexander Tsvyashchenko";
};
+ ndom91 = {
+ email = "nix@ndo.dev";
+ github = "ndom91";
+ githubId = 7415984;
+ name = "Nico Domino";
+ };
nealfennimore = {
email = "hi@neal.codes";
github = "nealfennimore";
@@ -19499,6 +19943,12 @@
name = "neo";
email = "chojs990222@gmail.com";
};
+ neobrain = {
+ github = "neobrain";
+ githubId = 4840017;
+ matrix = "@neobrain:matrix.org";
+ name = "Tony Wasserka";
+ };
neonvoid = {
email = "me@neonvoid.dev";
github = "neonvoidx";
@@ -19784,6 +20234,11 @@
name = "Jakub Kądziołka";
keys = [ { fingerprint = "E576 BFB2 CF6E B13D F571 33B9 E315 A758 4613 1564"; } ];
};
+ nielmin = {
+ name = "Daniel Hwang";
+ github = "nielmin";
+ githubId = 81798555;
+ };
nielsegberts = {
email = "nix@nielsegberts.nl";
github = "nielsegberts";
@@ -19796,6 +20251,12 @@
github = "nigelgbanks";
githubId = 487373;
};
+ nightconcept = {
+ email = "dark@nightconcept.net";
+ github = "nightconcept";
+ githubId = 486025;
+ name = "Danny Solivan";
+ };
nikhilmaddirala = {
name = "Nikhil Maddirala";
github = "nikhilmaddirala";
@@ -19847,12 +20308,6 @@
githubId = 70602908;
github = "nikolaizombie1";
};
- niksingh710 = {
- email = "nik.singh710@gmail.com";
- name = "Nikhil Singh";
- github = "niksingh710";
- githubId = 60490474;
- };
nikstur = {
email = "nikstur@outlook.com";
name = "nikstur";
@@ -19904,7 +20359,7 @@
name = "Nindouja";
};
ninelore = {
- email = "9l+nix@9lo.re";
+ email = "9l@9lo.re";
matrix = "@9lore:tchncs.de";
github = "ninelore";
githubId = 21343557;
@@ -20027,6 +20482,12 @@
githubId = 4242897;
name = "Nikolai Mishin";
};
+ nmoya = {
+ email = "nikolasmoya@gmail.com";
+ github = "nmoya";
+ githubId = 1767648;
+ name = "Nikolas Moya";
+ };
noaccos = {
name = "Francesco Noacco";
email = "francesco.noacco2000@gmail.com";
@@ -20134,6 +20595,12 @@
githubId = 47303199;
name = "Simon Gutgesell";
};
+ nonplay = {
+ name = "Artem Ostrasev";
+ email = "nonplay@bxteam.org";
+ github = "NONPLAYT";
+ githubId = 76615486;
+ };
noodlez1232 = {
email = "contact@nathanielbarragan.xyz";
matrix = "@noodlez1232:matrix.org";
@@ -20379,8 +20846,9 @@
github = "numinit";
githubId = 369111;
keys = [
- # SSH
+ # SSH, per-machine yubikey ecdsa-sk keys
{ fingerprint = "XX/0lMz82MpucPqf0KG+5EJoozzNRi8i/t59byD2kNo"; }
+ { fingerprint = "dye2C1N4RQaf+8ht5Ipd52BbnnuwBtdXxocPzk8b2mw"; }
# GPG, >=2025, stays in one place
{ fingerprint = "FD28 F9C9 81C5 D78E 56E8 8311 5C3E B94D 198F 1491"; }
# GPG, >=2025, travels with me
@@ -20634,6 +21102,11 @@
githubId = 31112680;
name = "oidro";
};
+ ojii3 = {
+ github = "OJII3";
+ githubId = 84656786;
+ name = "OJII3";
+ };
ojsef39 = {
name = "Josef Hofer";
github = "ojsef39";
@@ -20665,12 +21138,6 @@
matrix = "@olduser101:matrix.org";
name = "Nathan Gill";
};
- olebedev = {
- email = "ole6edev@gmail.com";
- github = "olebedev";
- githubId = 848535;
- name = "Oleg Lebedev";
- };
oleina = {
email = "antholeinik@gmail.com";
github = "antholeole";
@@ -20859,12 +21326,6 @@
githubId = 19862;
name = "KJ Ørbekk";
};
- orbitz = {
- email = "mmatalka@gmail.com";
- github = "orbitz";
- githubId = 75299;
- name = "Malcolm Matalka";
- };
orhun = {
email = "orhunparmaksiz@gmail.com";
github = "orhun";
@@ -21683,6 +22144,12 @@
githubId = 421510;
name = "Noé Rubinstein";
};
+ phluxjr = {
+ email = "phluxjr@phluxjr.net";
+ github = "phluxjr";
+ githubId = 185956030;
+ name = "phluxjr";
+ };
pho = {
email = "phofin@gmail.com";
github = "pho";
@@ -21695,6 +22162,12 @@
githubId = 2997905;
name = "Petr Hodina";
};
+ phorcys420 = {
+ name = "Phorcys";
+ email = "nixpkgs@phorcys.net";
+ github = "phorcys420";
+ githubId = 57866459;
+ };
photex = {
email = "photex@gmail.com";
github = "photex";
@@ -22211,7 +22684,7 @@
githubId = 38916722;
};
pradyuman = {
- email = "me@pradyuman.co";
+ email = "me@pmn.co";
github = "pradyuman";
githubId = 9904569;
name = "Pradyuman Vig";
@@ -22326,18 +22799,18 @@
githubId = 406946;
name = "Valentin Lorentz";
};
+ proitheus = {
+ email = "me@mail.proitheus.top";
+ github = "proitheus";
+ githubId = 50539150;
+ name = "proitheus";
+ };
projectinitiative = {
name = "ProjectInitiative";
github = "ProjectInitiative";
githubId = 6314611;
keys = [ { fingerprint = "EEC7 53FC EAAA FD9E 4DC0 9BB5 CAEB 4185 C226 D76B"; } ];
};
- prominentretail = {
- email = "me@jakepark.me";
- github = "ProminentRetail";
- githubId = 94048404;
- name = "Jake Park";
- };
proofconstruction = {
email = "source@proof.construction";
github = "proofconstruction";
@@ -22786,11 +23259,6 @@
matrix = "@qyriad:katesiria.org";
name = "Qyriad";
};
- qzylinra = {
- github = "qzylinra";
- githubId = 225773816;
- name = "qzylinra";
- };
r-aizawa = {
github = "Xantibody";
githubId = 109563705;
@@ -23031,12 +23499,6 @@
githubId = 1246959;
name = "Raquel García";
};
- rardiol = {
- email = "ricardo.ardissone@gmail.com";
- github = "rardiol";
- githubId = 11351304;
- name = "Ricardo Ardissone";
- };
raskin = {
email = "7c6f434c@mail.ru";
github = "7c6f434c";
@@ -23196,6 +23658,11 @@
githubId = 77415970;
name = "Redhawk";
};
+ redhood = {
+ name = "Alice Liddell";
+ github = "petalmaya";
+ githubId = 258934709;
+ };
redianthus = {
github = "redianthus";
githubId = 16472988;
@@ -23857,6 +24324,12 @@
githubId = 64620440;
name = "RoGreat";
};
+ rohan-datar = {
+ email = "me@rohandatar.com";
+ github = "rohan-datar";
+ githubId = 37545071;
+ name = "Rohan Datar";
+ };
rohanssrao = {
email = "rohanssrao@gmail.com";
github = "rohanssrao";
@@ -23887,6 +24360,12 @@
githubId = 7335;
name = "Roman Gonzalez";
};
+ roman-16 = {
+ email = "roman@lerchster.dev";
+ github = "roman-16";
+ githubId = 15262665;
+ name = "Roman";
+ };
romildo = {
email = "malaquias@gmail.com";
github = "romildo";
@@ -24050,6 +24529,12 @@
githubId = 20300874;
name = "Mohammad Rafiq";
};
+ rsahwe = {
+ email = "rsahwe@gmx.net";
+ github = "rsahwe";
+ githubId = 201613730;
+ name = "rsahwe";
+ };
rseichter = {
email = "nixos.org@seichter.de";
github = "rseichter";
@@ -24296,6 +24781,7 @@
};
ryand56 = {
email = "git@ryand.ca";
+ matrix = "@ryan:ryand.ca";
github = "ryand56";
githubId = 22267679;
name = "Ryan Omasta";
@@ -24526,6 +25012,12 @@
githubId = 47582;
name = "Samir Talwar";
};
+ samiser = {
+ email = "nixos@me.samiser.xyz";
+ github = "samiser";
+ githubId = 32001364;
+ name = "Sam";
+ };
samlich = {
email = "nixos@samli.ch";
github = "samlich";
@@ -24873,6 +25365,19 @@
githubId = 149248;
name = "Christian Rackerseder";
};
+ screwys = {
+ email = "screwygit@proton.me";
+ github = "screwys";
+ githubId = 254296947;
+ name = "screwy";
+ };
+ Scriptkiddi = {
+ email = "nixos@scriptkiddi.de";
+ matrix = "@fritz.otlinghaus:helsinki-systems.de";
+ github = "Scriptkiddi";
+ githubId = 3598650;
+ name = "Fritz Otlinghaus";
+ };
Scrumplex = {
name = "Sefa Eyeoglu";
email = "contact@scrumplex.net";
@@ -25041,6 +25546,12 @@
githubId = 33031;
name = "Greg Pfeil";
};
+ semi710 = {
+ email = "nik.singh710@gmail.com";
+ name = "Nikhil Singh";
+ github = "semi710";
+ githubId = 60490474;
+ };
sempiternal-aurora = {
email = "myrialsarvay@gmail.com";
github = "sempiternal-aurora";
@@ -25097,6 +25608,13 @@
githubId = 35622998;
name = "Suwon Park";
};
+ sepointon = {
+ email = "sampointon@gmail.com";
+ github = "sepointon";
+ githubId = 209542026;
+ matrix = "sampointon:matrix.org";
+ name = "Sam Pointon";
+ };
seppeljordan = {
email = "sebastian.jordan.mail@googlemail.com";
github = "seppeljordan";
@@ -25282,12 +25800,6 @@
githubId = 106669955;
name = "Léon Gessner";
};
- shardy = {
- email = "shardul@baral.ca";
- github = "shardulbee";
- githubId = 16765155;
- name = "Shardul Baral";
- };
sharpchen = {
github = "sharpchen";
githubId = 77432836;
@@ -25587,6 +26099,12 @@
name = "Nikolay Korotkiy";
keys = [ { fingerprint = "ADF4 C13D 0E36 1240 BD01 9B51 D1DE 6D7F 6936 63A5"; } ];
};
+ silicalet = {
+ name = "Mr. why";
+ email = "silicalet@outlook.com";
+ github = "silicalet";
+ githubId = 188071249;
+ };
silky = {
name = "Noon van der Silk";
email = "noonsilk+nixpkgs@gmail.com";
@@ -25849,6 +26367,11 @@
githubId = 20123683;
name = "Shenleban Tongying";
};
+ sledgehammervampire = {
+ name = "Kevin Tran";
+ github = "sledgehammervampire";
+ githubId = 47207223;
+ };
sleexyz = {
email = "freshdried@gmail.com";
github = "sleexyz";
@@ -25991,6 +26514,12 @@
github = "snpschaaf";
githubId = 105843013;
};
+ sntx = {
+ name = "sntx";
+ email = "sntx@sntx.space";
+ github = "Sntx626";
+ githubId = 48636286;
+ };
snu = {
email = "kabelfrickler@gmail.com";
github = "snue";
@@ -26046,6 +26575,14 @@
githubId = 7116239;
keys = [ { fingerprint = "E067 520F 5EF2 C175 3F60 50C0 BA46 725F 6A26 7442"; } ];
};
+ Soliprem = {
+ email = "me@soliprem.eu";
+ matrix = "@soliprem:soliprem.eu";
+ name = "Francesco Prem Solidoro";
+ github = "Soliprem";
+ githubId = 73885403;
+ keys = [ { fingerprint = "F779 4E05 D8BB A608 73D0 1312 4FD6 B0D5 1C9A B6BD"; } ];
+ };
solson = {
email = "scott@solson.me";
matrix = "@solson:matrix.org";
@@ -26079,6 +26616,12 @@
githubId = 13762043;
matrix = "@sophie:nue.soopy.moe";
};
+ sophiebsw = {
+ name = "Sophia";
+ email = "nixpkgs@drifter.dev";
+ github = "sophiebsw";
+ githubId = 4594464;
+ };
sophronesis = {
email = "oleksandr.buzynnyi@gmail.com";
github = "sophronesis";
@@ -26097,6 +26640,12 @@
githubId = 115308;
name = "Richard Marko";
};
+ sorooris = {
+ email = "nixpkgs@pm.me";
+ github = "sorooris";
+ githubId = 10185314;
+ name = "Seb Soroori";
+ };
sorpaas = {
email = "hi@that.world";
github = "sorpaas";
@@ -26226,12 +26775,6 @@
github = "spreetin";
githubId = 7392173;
};
- sprock = {
- email = "rmason@mun.ca";
- github = "sprock";
- githubId = 6391601;
- name = "Roger Mason";
- };
sputn1ck = {
email = "kon@kon.ninja";
github = "sputn1ck";
@@ -26305,6 +26848,12 @@
githubId = 4061736;
name = "Severen Redwood";
};
+ ssnoer = {
+ email = "ssnoer@proton.me";
+ github = "Seba244c";
+ githubId = 23051740;
+ name = "Sebastian August Snoer";
+ };
sstef = {
email = "stephane@nix.frozenid.net";
github = "haskelious";
@@ -26497,6 +27046,11 @@
github = "StephenWithPH";
githubId = 2990492;
};
+ stephsi = {
+ name = "Stephan Siegl";
+ github = "stephsi";
+ githubId = 3120909;
+ };
sterfield = {
email = "sterfield@gmail.com";
github = "sterfield";
@@ -26709,13 +27263,6 @@
githubId = 36031171;
name = "Supa";
};
- superherointj = {
- email = "sergiomarcelo@yandex.com";
- github = "superherointj";
- githubId = 5861043;
- matrix = "@superherointj:matrix.org";
- name = "Sérgio Marcelo";
- };
supermarin = {
email = "git+nixpkgs@mar.in";
name = "marin";
@@ -26802,6 +27349,13 @@
githubId = 36695359;
name = "Vasyl Solovei";
};
+ swaggeroo = {
+ email = "swaggerooo@pm.me";
+ github = "swaggeroo";
+ githubId = 57057662;
+ name = "Swaggeroo";
+ keys = [ { fingerprint = "D221 99EC 4FFF EF4D F29D 2435 5208 74E7 3291 4E0B"; } ];
+ };
swarren83 = {
email = "shawn.w.warren@gmail.com";
github = "swarren83";
@@ -26925,6 +27479,11 @@
githubId = 203195;
name = "Szczyp";
};
+ szhekpisov = {
+ github = "szhekpisov";
+ githubId = 87662520;
+ name = "Sergei Zhekpisov";
+ };
szkiba = {
email = "iszkiba@gmail.com";
github = "szkiba";
@@ -27188,12 +27747,6 @@
githubId = 101565936;
name = "Tautvydas Cerniauskas";
};
- tcbravo = {
- email = "tomas.bravo@protonmail.ch";
- github = "tcbravo";
- githubId = 66133083;
- name = "Tomas Bravo";
- };
tchab = {
email = "dev@chabs.name";
github = "t-chab";
@@ -27303,6 +27856,12 @@
github = "tembleking";
githubId = 2988780;
};
+ temidaradev = {
+ name = "temidaradev";
+ email = "temidaradev@proton.me";
+ github = "temidaradev";
+ githubId = 118509044;
+ };
tengkuizdihar = {
name = "Tengku Izdihar";
email = "tengkuizdihar@gmail.com";
@@ -27358,6 +27917,11 @@
githubId = 3889585;
name = "Cheng Shao";
};
+ terrorw0lf = {
+ name = "duckling";
+ github = "TERRORW0LF";
+ githubId = 61637480;
+ };
terryg = {
name = "Terry Garcia";
email = "terry@terryg.org";
@@ -27471,6 +28035,13 @@
github = "thattemperature";
githubId = 125476238;
};
+ thbemme = {
+ name = "Thomas Bemme";
+ email = "thomas.bemme@gmail.com";
+ matrix = "@riza:chaos.jetzt";
+ github = "thbemme";
+ githubId = 14074615;
+ };
thblt = {
name = "Thibault Polge";
email = "thibault@thb.lt";
@@ -27971,6 +28542,12 @@
githubId = 1334474;
name = "Timothy Stott";
};
+ tiptenbrink = {
+ email = "tip@tenbrinkmeijs.com";
+ github = "tiptenbrink";
+ githubId = 75669206;
+ name = "Tip ten Brink";
+ };
tiramiseb = {
email = "sebastien@maccagnoni.eu";
github = "tiramiseb";
@@ -28239,12 +28816,6 @@
githubId = 38566841;
name = "Anthony Butt";
};
- toodeluna = {
- email = "luna@toodeluna.net";
- github = "toodeluna";
- githubId = 112084382;
- name = "Luna Heyman";
- };
toonn = {
email = "nixpkgs@toonn.io";
matrix = "@toonn:matrix.org";
@@ -28252,6 +28823,12 @@
githubId = 1486805;
name = "Toon Nolten";
};
+ tophcodes = {
+ email = "toki@toph.so";
+ github = "tophcodes";
+ githubId = 3678770;
+ name = "Christopher Mühl";
+ };
tornax = {
email = "tornax@pm.me";
github = "TornaxO7";
@@ -28281,12 +28858,6 @@
github = "toXel";
githubId = 2300709;
};
- ToxicFrog = {
- email = "toxicfrog@ancilla.ca";
- github = "ToxicFrog";
- githubId = 90456;
- name = "Rebecca (Bex) Kelly";
- };
toyboot4e = {
email = "toyboot4e@gmail.com";
github = "toyboot4e";
@@ -28340,18 +28911,18 @@
githubId = 5623227;
name = "Quentin Boyer";
};
+ tree-sapii = {
+ email = "supersapiiiiii@gmail.com";
+ github = "tree-sapii";
+ githubId = 144389458;
+ name = "sapii";
+ };
treemo = {
email = "matthieu.chevrier@treemo.fr";
github = "treemo";
githubId = 207457;
name = "Matthieu Chevrier";
};
- trepetti = {
- email = "trepetti@cs.columbia.edu";
- github = "trepetti";
- githubId = 25440339;
- name = "Tom Repetti";
- };
trespaul = {
email = "paul@trespaul.com";
github = "trespaul";
@@ -28612,6 +29183,12 @@
github = "TyberiusPrime";
githubId = 1257580;
};
+ tyceherrman = {
+ email = "Tyce.Herrman@pm.me";
+ github = "TyceHerrman";
+ githubId = 22066434;
+ name = "Tyce Herrman";
+ };
tye-exe = {
name = "Tye";
email = "nixpkgs-fr@tye-home.xyz";
@@ -28695,7 +29272,7 @@
uku3lig = {
name = "uku";
email = "hi@uku.moe";
- matrix = "@uku:m.uku.moe";
+ matrix = "@uku:rei.uku.moe";
github = "uku3lig";
githubId = 61147779;
};
@@ -28813,6 +29390,12 @@
githubId = 17836748;
name = "Mason Mackaman";
};
+ username-generic = {
+ name = "username-generic";
+ email = "username-generic@tuta.io";
+ github = "username-generic";
+ githubId = 202454830;
+ };
usertam = {
name = "Samuel Tam";
email = "code@usertam.dev";
@@ -28884,6 +29467,12 @@
github = "uxodb";
githubId = 20535246;
};
+ uzlkav = {
+ name = "Uzlkav";
+ github = "Uzlkav";
+ githubId = 177883133;
+ matrix = "@capybara_squash:unredacted.org";
+ };
V = {
name = "V";
email = "v@anomalous.eu";
@@ -28984,6 +29573,11 @@
githubId = 223833;
name = "Klaas van Schelven";
};
+ VarNepvius = {
+ name = "VarNapvius";
+ github = "VarNapvius";
+ githubId = 14352929;
+ };
varunpatro = {
email = "varun.kumar.patro@gmail.com";
github = "varunpatro";
@@ -28996,18 +29590,20 @@
githubId = 110242808;
name = "Vasilii Pustovoit";
};
+ vavakado = {
+ email = "xor@vavakado.xyz";
+ github = "vavakado";
+ githubId = 80159210;
+ name = "Vladimir Rubin";
+ matrix = "@vavakado:imagisphe.re";
+ keys = [ { fingerprint = "A054 0374 CD37 2C71 FE6D E0CF CAB7 4472 7F36 B524"; } ];
+ };
vbgl = {
email = "Vincent.Laporte@gmail.com";
github = "vbgl";
githubId = 2612464;
name = "Vincent Laporte";
};
- vbmithr = {
- email = "vb@luminar.eu.org";
- github = "vbmithr";
- githubId = 797581;
- name = "Vincent Bernardoff";
- };
vbrandl = {
name = "Valentin Brandl";
email = "mail+nixpkgs@vbrandl.net";
@@ -29257,12 +29853,6 @@
githubId = 20145996;
name = "Victor Fuentes";
};
- vlstill = {
- email = "xstill@fi.muni.cz";
- github = "vlstill";
- githubId = 4070422;
- name = "Vladimír Štill";
- };
vmandela = {
email = "venkat.mandela@gmail.com";
github = "vmandela";
@@ -29306,6 +29896,12 @@
githubId = 45292658;
name = "Julius Schmitt";
};
+ voidlily = {
+ github = "voidlily";
+ githubId = 221749;
+ name = "voidlily";
+ keys = [ { fingerprint = "E735 CD3F A78C 0919 4012 ADF3 3FBF B3CC E12E 7D19"; } ];
+ };
voidnoi = {
email = "voidnoi@proton.me";
github = "VoidNoi";
@@ -29318,6 +29914,11 @@
githubId = 7038383;
name = "Vojta Káně";
};
+ vokinn = {
+ github = "vokinn";
+ githubId = 113241287;
+ name = "vokin";
+ };
volfyd = {
email = "lb.nix@lisbethmail.com";
github = "volfyd";
@@ -29404,12 +30005,6 @@
name = "Vince Rose";
githubId = 9831420;
};
- vrthra = {
- email = "rahul@gopinath.org";
- github = "vrthra";
- githubId = 70410;
- name = "Rahul Gopinath";
- };
vsharathchandra = {
email = "chandrasharath.v@gmail.com";
github = "vsharathchandra";
@@ -29460,7 +30055,7 @@
VZstless = {
name = "VZstless";
email = "i@vzstless.moe";
- github = "atlarator";
+ github = "VZstless";
githubId = 233668878;
};
w-lfchen = {
@@ -29606,6 +30201,14 @@
github = "weitzj";
githubId = 829277;
};
+ Wekuz = {
+ name = "Wekuz";
+ github = "Wekuz";
+ githubId = 89638089;
+ email = "wekuz@duck.com";
+ matrix = "@wekuz:matrix.org";
+ keys = [ { fingerprint = "0CCE 1200 AB5E 7B05 9A22 B0D8 2E50 2F2A ABD3 2DF9"; } ];
+ };
wellmannmathis = {
email = "wellmannmathis@gmail.com";
github = "MathisWellmann";
@@ -29840,6 +30443,12 @@
githubId = 22803888;
name = "Lu Hongxu";
};
+ wini = {
+ email = "dev@vini.cat";
+ github = "iniw";
+ githubId = 30220881;
+ name = "Vinicius Deolindo";
+ };
winpat = {
email = "patrickwinter@posteo.ch";
github = "winpat";
@@ -29858,6 +30467,12 @@
name = "Edward";
keys = [ { fingerprint = "0BC2F3C6AE5D73DAE870CB0E8AE4DE0EFB6CC443"; } ];
};
+ WiredMic = {
+ name = "Rasmus Enevoldsen";
+ github = "WiredMic";
+ githubId = 111731519;
+ email = "rasmus@enev.dk";
+ };
wirew0rm = {
email = "alex@wirew0rm.de";
github = "wirew0rm";
@@ -29882,6 +30497,12 @@
githubId = 36118348;
keys = [ { fingerprint = "69C9 876B 5797 1B2E 11C5 7C39 80A1 F76F C9F9 54AE"; } ];
};
+ wiyba = {
+ name = "Dmitry Shmakov";
+ email = "contact@wiyba.org";
+ github = "wiyba";
+ githubId = 81859776;
+ };
wizardlink = {
name = "wizardlink";
email = "contact@thewizard.link";
@@ -29899,6 +30520,11 @@
githubId = 168610;
name = "Ricardo M. Correia";
};
+ wjohnsto = {
+ name = "Will Johnston";
+ github = "wjohnsto";
+ githubId = 785258;
+ };
wkral = {
email = "william.kral@gmail.com";
github = "wkral";
@@ -30125,6 +30751,13 @@
github = "x807x";
githubId = 86676478;
};
+ xaltsc = {
+ email = "hey+dev@xaltsc.dev";
+ matrix = "@xaltsc:matrix.org";
+ name = "xaltsc";
+ github = "xaltsc";
+ githubId = 41400742;
+ };
xanderio = {
name = "Alexander Sieg";
email = "alex@xanderio.de";
@@ -30294,6 +30927,11 @@
githubId = 106241330;
name = "Success Kingsley";
};
+ xqtc161 = {
+ github = "xqtc161";
+ githubId = 65857432;
+ name = "tila";
+ };
xrelkd = {
github = "xrelkd";
githubId = 46590321;
@@ -30404,6 +31042,12 @@
github = "yarektyshchenko";
githubId = 185304;
};
+ yarn = {
+ name = "yarncat";
+ github = "yaaaarn";
+ githubId = 30006414;
+ email = "nix@yarncat.moe";
+ };
yarny = {
github = "Yarny0";
githubId = 41838844;
@@ -30519,12 +31163,6 @@
githubId = 1742643;
name = "Ravi Peters";
};
- ylecornec = {
- email = "yves.stan.lecornec@tweag.io";
- github = "ylecornec";
- githubId = 5978566;
- name = "Yves-Stan Le Cornec";
- };
ylh = {
email = "nixpkgs@ylh.io";
github = "ylh";
@@ -30586,6 +31224,13 @@
{ fingerprint = "D2A8 A906 ACA7 B6D6 575E 9A2F 3A49 5054 6EA6 9E5C"; }
];
};
+ yoquec = {
+ email = "alvaro.viejo@yoquec.com";
+ github = "yoquec";
+ githubId = 59575696;
+ name = "Alvaro Viejo";
+ matrix = "@yoquec.com:matrix.org";
+ };
yorickvp = {
email = "yorickvanpelt@gmail.com";
matrix = "@yorickvp:matrix.org";
@@ -30756,6 +31401,12 @@
githubId = 65394961;
name = "Yves Straten";
};
+ yvnth = {
+ email = "yashupress@gmail.com";
+ github = "yvnth";
+ githubId = 201552597;
+ name = "Yashwanth Prasannakumar";
+ };
yzx9 = {
email = "yuan.zx@outlook.com";
github = "yzx9";
@@ -30918,6 +31569,11 @@
githubId = 25164338;
keys = [ { fingerprint = "065A 0A98 FE61 E1C1 41B0 AFE7 64FA BC62 F457 2875"; } ];
};
+ zehuajun = {
+ github = "zehuajun";
+ githubId = 87254340;
+ name = "zehuajun";
+ };
zelkourban = {
name = "zelkourban";
email = "zelo.urban@gmail.com";
@@ -31185,6 +31841,12 @@
github = "zuzuleinen";
githubId = 944919;
};
+ zwang20 = {
+ name = "Michael Wang";
+ github = "zwang20";
+ githubId = 41721295;
+ matrix = "@michael_wzq:matrix.org";
+ };
zx2c4 = {
email = "Jason@zx2c4.com";
github = "zx2c4";
diff --git a/maintainers/scripts/haskell/hydra-report.hs b/maintainers/scripts/haskell/hydra-report.hs
index 263d0aa50e6e..5ef28baa41e0 100755
--- a/maintainers/scripts/haskell/hydra-report.hs
+++ b/maintainers/scripts/haskell/hydra-report.hs
@@ -272,7 +272,7 @@ instance FromJSON JobMaintainers where
-- @@
-- fromList
-- [ ("arion.aarch64-linux", ["rob22"])
--- , ("conduit.x86_64-darwin", ["snoyb", "webber"])
+-- , ("conduit.aarch64-darwin", ["snoyb", "webber"])
-- ]
-- @@
type MaintainerMap = Map JobName (NonEmpty Text)
@@ -404,15 +404,13 @@ platformIcon :: Platform -> Text
platformIcon (Platform x) = case x of
"x86_64-linux" -> "🐧"
"aarch64-linux" -> "📱"
- "x86_64-darwin" -> "🍎"
- "aarch64-darwin" -> "🍏"
+ "aarch64-darwin" -> "🍎"
_ -> x
platformIsOS :: OS -> Platform -> Bool
platformIsOS os (Platform x) = case (os, x) of
(Linux, "x86_64-linux") -> True
(Linux, "aarch64-linux") -> True
- (Darwin, "x86_64-darwin") -> True
(Darwin, "aarch64-darwin") -> True
_ -> False
diff --git a/maintainers/scripts/kde/collect-logs.nu b/maintainers/scripts/kde/collect-logs.nu
index 1d07fa9d2caf..656a97a0ce38 100755
--- a/maintainers/scripts/kde/collect-logs.nu
+++ b/maintainers/scripts/kde/collect-logs.nu
@@ -6,6 +6,8 @@ mkdir logs
nix-env -qaP -f . -A kdePackages --json --out-path | from json | values | par-each { |it|
echo $"Processing ($it.pname)..."
if "outputs" in $it {
- nix-store --read-log $it.outputs.out | save -f $"logs/($it.pname).log"
+ try {
+ nix-store --read-log $it.outputs.out | save -f $"logs/($it.pname).log"
+ }
}
}
diff --git a/maintainers/scripts/kde/generate-sources.py b/maintainers/scripts/kde/generate-sources.py
index 2966e7ef9675..11a24f7c47ed 100755
--- a/maintainers/scripts/kde/generate-sources.py
+++ b/maintainers/scripts/kde/generate-sources.py
@@ -37,6 +37,7 @@ PROJECTS_WITH_RUST = {
"akonadi-search",
"angelfish",
"kdepim-addons",
+ "kdeplasma-addons",
}
def to_sri(hash):
diff --git a/maintainers/scripts/luarocks-packages.csv b/maintainers/scripts/luarocks-packages.csv
index 5a7ff4b27883..7e42800e5db3 100644
--- a/maintainers/scripts/luarocks-packages.csv
+++ b/maintainers/scripts/luarocks-packages.csv
@@ -6,12 +6,13 @@ basexx,,,,,,
bcrypt,,,,,,ulysseszhan
binaryheap,,,,,,vcunat
bit32,,,,,5.1,lblasc
-busted,,,,,,
+busted,,,,,,alerque
busted-htest,,,,,,mrcjkb
+canola.nvim,,,,,,saadndm
cassowary,,,,,,alerque
cldr,,,,,,alerque
commons.nvim,,,,,5.1,mrcjkb
-compat53,,,,,,vcunat
+compat53,,,,,,vcunat alerque
coop.nvim,,,,,,
cosmo,,,,,,
coxpcall,,,,1.17.0-1,,
@@ -35,8 +36,9 @@ haskell-tools.nvim,,,,,5.1,mrcjkb
http,,,,0.4-0,,vcunat
inspect,,,,,,
jsregexp,,,,0.0.7-2,,
+kulala.nvim,,,,,,
ldbus,,,https://luarocks.org/dev,,,
-ldoc,,,,,,
+ldoc,,,,,,alerque
lgi,,,,,,
linenoise,https://raw.githubusercontent.com/hoelzro/lua-linenoise/master/linenoise-0.9-1.rockspec,,,,,
ljsyscall,,,,,5.1,lblasc
@@ -60,7 +62,7 @@ lua-cjson,,,,,,
lua-cmsgpack,,,,,,
lua-curl,,,,,,
lua-ffi-zlib,,,,,,
-lua-iconv,,,,7.0.0,,
+lua-iconv,,,,7.0.0,,alerque
lua-lsp,,,,,,
lua-messagepack,,,,,,
lua-protobuf,,,,,,lockejan
@@ -76,10 +78,10 @@ lua-toml,,,,,,
lua-utils.nvim,,,,,,mrcjkb
lua-yajl,,,,,,pstn
lua-zlib,,,,,,koral
-lua_cliargs,,,,,,
+lua_cliargs,,,,,,alerque
luabitop,https://raw.githubusercontent.com/teto/luabitop/master/luabitop-1.0.2-3.rockspec,,,,,
-luacheck,,,,,,
-luacov,,,,,,
+luacheck,,,,,,alerque
+luacov,,,,,,alerque
luacov-reporter-lcov,,,,,,ulysseszhan
luadbi,,,,,,
luadbi-mysql,,,,,,
@@ -89,7 +91,7 @@ luaepnf,,,,,,
luaevent,,,,,,
luaexpat,,,,,,arobyn flosse
luaffi,,,https://luarocks.org/dev,,,
-luafilesystem,,,,,,flosse
+luafilesystem,,,,,,flosse alerque
lualdap,,,,,,aanderse
lualine.nvim,,,https://luarocks.org/dev,,,
lualogging,,,,,,
@@ -102,12 +104,12 @@ luarocks-build-rust-mlua,,,,,,mrcjkb
luarocks-build-tree-sitter-cli,,,,,,
luarocks-build-treesitter-parser,,,,,,mrcjkb
luarocks-build-treesitter-parser-cpp,,,,,,mrcjkb
-luasec,,,,,,flosse
+luasec,,,,,,flosse alerque
luasnip,,,,,,
-luasocket,,,,,,
+luasocket,,,,,,alerque
luasql-sqlite3,,,,,,
-luassert,,,,,,
-luasystem,,,,,,
+luassert,,,,,,alerque
+luasystem,,,,,,alerque
luatext,,,,,,
luaunbound,,,,,,
luaunit,,,,,,lockejan
@@ -135,6 +137,7 @@ mpack,,,,,,
neorg,,,,,5.1,GaetanLepage
neorg-interim-ls,,,,,,
neotest,,,,,5.1,mrcjkb
+neotest-nix,,,,,,khaneliman
nginx-lua-prometheus,,,,,,ulysseszhan
nlua,,,,,,teto
nui.nvim,,,,,5.1,mrcjkb
@@ -156,7 +159,7 @@ rocks-git.nvim,,,,,5.1,mrcjkb
rocks.nvim,,,,,5.1,mrcjkb
rtp.nvim,,,,,5.1,mrcjkb
rustaceanvim,,,,,5.1,mrcjkb
-say,,,,,,
+say,,,,,,alerque
serpent,,,,,,lockejan
sofa,,,,,,f4z3r
sqlite,,,,,,
@@ -172,6 +175,7 @@ toml-edit,,,,,5.1,mrcjkb
tomlua,,,,,,birdee
tree-sitter-cli,,,,,,
tree-sitter-http,,,,0.0.33-1,,
+tree-sitter-kulala_http,,,,,,
tree-sitter-norg,,,,,5.1,mrcjkb
tree-sitter-norg-meta,,,,,,
tree-sitter-orgmode,,,,,5.1,
diff --git a/maintainers/scripts/update.nix b/maintainers/scripts/update.nix
index ca231c9e735a..50ab53bc7bad 100644
--- a/maintainers/scripts/update.nix
+++ b/maintainers/scripts/update.nix
@@ -13,9 +13,9 @@
path ? null,
max-workers ? null,
include-overlays ? false,
- keep-going ? null,
- commit ? null,
- skip-prompt ? null,
+ keep-going ? false,
+ commit ? false,
+ skip-prompt ? false,
order ? null,
}:
@@ -206,18 +206,18 @@ let
to increase the number of jobs in parallel, or
- --argstr keep-going true
+ --arg keep-going true
to continue running when a single update fails.
You can also make the updater automatically commit on your behalf from updateScripts
that support it by adding
- --argstr commit true
+ --arg commit true
- to skip prompt:
+ To skip the prompt, you can add
- --argstr skip-prompt true
+ --arg skip-prompt true
By default, the updater will update the packages in arbitrary order. Alternately, you can force a specific order based on the packages’ dependency relations:
@@ -250,11 +250,15 @@ let
# JSON file with data for update.py.
packagesJson = pkgs.writeText "packages.json" (builtins.toJSON (map packageData packages));
+ # Allow boolean arguments to be provided with either --arg or --argstr.
+ # The ability to use the string "true" will be deprecated.
+ isTrue = arg: arg == true || arg == "true";
+
optionalArgs =
lib.optional (max-workers != null) "--max-workers=${max-workers}"
- ++ lib.optional (keep-going == "true") "--keep-going"
- ++ lib.optional (commit == "true") "--commit"
- ++ lib.optional (skip-prompt == "true") "--skip-prompt"
+ ++ lib.optional (isTrue keep-going) "--keep-going"
+ ++ lib.optional (isTrue commit) "--commit"
+ ++ lib.optional (isTrue skip-prompt) "--skip-prompt"
++ lib.optional (order != null) "--order=${order}";
args = [ packagesJson ] ++ optionalArgs;
diff --git a/maintainers/scripts/update.py b/maintainers/scripts/update.py
index ca35f04d1285..bf52c01bb56f 100644
--- a/maintainers/scripts/update.py
+++ b/maintainers/scripts/update.py
@@ -307,7 +307,7 @@ async def commit_changes(
commit_message = "{attrPath}: {oldVersion} -> {newVersion}".format(**change)
if "commitMessage" in change:
commit_message = change["commitMessage"]
- elif "commitBody" in change:
+ if "commitBody" in change:
commit_message = commit_message + "\n\n" + change["commitBody"]
await check_subprocess_output(
"git",
diff --git a/maintainers/team-list.nix b/maintainers/team-list.nix
index d48fc406b57a..0cec2e3f5fda 100644
--- a/maintainers/team-list.nix
+++ b/maintainers/team-list.nix
@@ -68,12 +68,8 @@ with lib.maintainers;
bazel = {
members = [
- mboes
cbley
- olebedev
groodt
- aherrmann
- ylecornec
boltzmannrain
];
scope = "Bazel build tool & related tools https://bazel.build/";
@@ -510,12 +506,12 @@ with lib.maintainers;
matrix = {
members = [
ma27
- mguentner
- dandellion
nickcao
teutat3s
+ transcaffeine
+ skowalak
];
- scope = "Maintain the ecosystem around Matrix, a decentralized messenger.";
+ scope = "Maintain the foundational packages of the Matrix ecosystem.";
shortName = "Matrix";
};
@@ -567,7 +563,6 @@ with lib.maintainers;
ethancedwards8
phanirithvij
prince213
- wegank
];
scope = "Maintain NGI-supported software.";
shortName = "NGI";
@@ -690,6 +685,10 @@ with lib.maintainers;
github = "radicle";
};
+ redis = {
+ github = "redis";
+ };
+
rocm = {
github = "rocm";
};
@@ -718,6 +717,15 @@ with lib.maintainers;
github = "security-review";
};
+ stardust-xr = {
+ members = [
+ pandapip1
+ technobaboo
+ ];
+ scope = "Maintain Stardust XR packages";
+ shortName = "StardustXR";
+ };
+
stdenv = {
enableFeatureFreezePing = true;
github = "stdenv";
@@ -738,7 +746,6 @@ with lib.maintainers;
dduan
samasaur
stephank
- trepetti
];
scope = "Maintain Swift compiler suite for NixOS.";
shortName = "Swift";
@@ -749,10 +756,8 @@ with lib.maintainers;
enableFeatureFreezePing = true;
};
- tests = {
- members = [ tfc ];
- scope = "Maintain the NixOS VM test runner.";
- shortName = "NixOS tests";
+ test-driver = {
+ github = "test-driver";
enableFeatureFreezePing = true;
};
diff --git a/nixos/doc/manual/configuration/file-systems.chapter.md b/nixos/doc/manual/configuration/file-systems.chapter.md
index 8a63a2b849cd..8b6a06c5720a 100644
--- a/nixos/doc/manual/configuration/file-systems.chapter.md
+++ b/nixos/doc/manual/configuration/file-systems.chapter.md
@@ -41,5 +41,6 @@ and non-critical by adding `options = [ "nofail" ];`.
```{=include=} sections
luks-file-systems.section.md
sshfs-file-systems.section.md
+nfs-file-systems.section.md
overlayfs.section.md
```
diff --git a/nixos/doc/manual/configuration/nfs-file-systems.section.md b/nixos/doc/manual/configuration/nfs-file-systems.section.md
new file mode 100644
index 000000000000..3ac6792e0167
--- /dev/null
+++ b/nixos/doc/manual/configuration/nfs-file-systems.section.md
@@ -0,0 +1,52 @@
+# NFS File Systems {#sec-nfs-file-systems}
+
+[NFS][nfs] (Network File System) allows you to mount directories from remote machines over the network.
+
+[nfs]: https://en.wikipedia.org/wiki/Network_File_System
+[nfs-man]: https://man7.org/linux/man-pages/man5/nfs.5.html
+
+To mount NFS filesystems persistently, use the `fileSystems` option:
+
+```nix
+{
+ fileSystems."/mnt/data" = {
+ device = "server.example.com:/export/data";
+ fsType = "nfs";
+ };
+}
+```
+
+## Automounting {#sec-nfs-automount}
+
+To have NFS filesystems mounted on-demand instead of at boot, add the `noauto` and `x-systemd.automount` options:
+
+```nix
+{
+ fileSystems."/mnt/data" = {
+ device = "server.example.com:/export/data";
+ fsType = "nfs";
+ options = [
+ "noauto"
+ "x-systemd.automount"
+ ];
+ };
+}
+```
+
+## Ad-hoc Mounting {#sec-nfs-adhoc}
+
+To mount NFS filesystems ad-hoc using the `mount` command, enable NFS and required RPC services:
+
+```nix
+{
+ boot.supportedFilesystems = [ "nfs" ];
+}
+```
+
+Then you can mount filesystems manually:
+
+```shell
+$ sudo mount -t nfs server.example.com:/export/data /mnt/data
+```
+
+For more information on NFS mount options, see the [nfs(5) man page][nfs-man].
diff --git a/nixos/doc/manual/contributing-to-this-manual.chapter.md b/nixos/doc/manual/contributing-to-this-manual.chapter.md
index 19549c32f277..a98ce7fc9923 100644
--- a/nixos/doc/manual/contributing-to-this-manual.chapter.md
+++ b/nixos/doc/manual/contributing-to-this-manual.chapter.md
@@ -35,9 +35,11 @@ Make sure that your local files aren't added to Git history by adding the follow
/**/.direnv
```
-### `devmode` {#sec-contributing-devmode}
+### Live preview {#sec-contributing-devmode}
-Use [`devmode`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/de/devmode/README.md) for a live preview when editing the manual.
+Run [`devmode`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/de/devmode/README.md) for a live preview while editing the manual: it rebuilds on every change and reloads the page in your browser automatically.
+
+Changes to the renderer 'pkgs/by-name/ni/nixos-render-docs' need a manual restart. Run: `devmode` again.
## Testing redirects {#sec-contributing-redirects}
diff --git a/nixos/doc/manual/default.nix b/nixos/doc/manual/default.nix
index c8afe6167a7d..78f44ad9ad74 100644
--- a/nixos/doc/manual/default.nix
+++ b/nixos/doc/manual/default.nix
@@ -201,8 +201,9 @@ rec {
--script ./highlightjs/loader.js \
--script ./anchor.min.js \
--script ./anchor-use.js \
- --toc-depth 1 \
- --chunk-toc-depth 1 \
+ --sidebar-depth 2 \
+ --header ${./header.html}\
+ --no-navheader \
./manual.md \
$dst/${common.indexPath}
diff --git a/nixos/doc/manual/development/running-nixos-tests-interactively.section.md b/nixos/doc/manual/development/running-nixos-tests-interactively.section.md
index 121abd51c804..78df8d3d77c7 100644
--- a/nixos/doc/manual/development/running-nixos-tests-interactively.section.md
+++ b/nixos/doc/manual/development/running-nixos-tests-interactively.section.md
@@ -43,6 +43,11 @@ test script).
## Shell access to VMs in interactive mode {#sec-nixos-test-shell-access}
+::: {.warning}
+Using `shell_interact()` is deprecated. Use the
+[interactive SSH backdoor](#sec-nixos-test-ssh-access) instead.
+:::
+
The function `.shell_interact()` grants access to a shell running
inside a virtual machine. To use it, replace `` with the name of a
virtual machine defined in the test, for example: `machine.shell_interact()`.
diff --git a/nixos/doc/manual/development/settings-options.section.md b/nixos/doc/manual/development/settings-options.section.md
index f3257a56d71b..e5532f00f371 100644
--- a/nixos/doc/manual/development/settings-options.section.md
+++ b/nixos/doc/manual/development/settings-options.section.md
@@ -322,6 +322,14 @@ have a predefined type and string generator already declared under
The attribute `lib.type.atom` contains the used INI atom.
+`pkgs.formats.configobj` { }
+
+: A function taking an attribute set with values
+
+ It returns a set with [ConfigObj](https://pypi.org/project/configobj/)-specific attributes `type` and `generate` as specified [below](#pkgs-formats-result).
+ The type of the input is an attribute mapping supporting both atoms and nested attribute sets (sections/subsections), as supported by ConfigObj.
+ The renderer is based on Python's `configobj` module.
+
`pkgs.formats.iniWithGlobalSection` { *`listsAsDuplicateKeys`* ? false, *`listToValue`* ? null, \.\.\. }
: A function taking an attribute set with values
@@ -553,7 +561,7 @@ in
default = { };
description = ''
Configuration for foo, see
-
+
for supported settings.
'';
};
@@ -628,7 +636,7 @@ up in the manual.
default = { };
description = ''
Configuration for Foo, see
-
+
for supported values.
'';
};
diff --git a/nixos/doc/manual/development/writing-nixos-tests.section.md b/nixos/doc/manual/development/writing-nixos-tests.section.md
index 8296b4904d3a..c43f6bb34299 100644
--- a/nixos/doc/manual/development/writing-nixos-tests.section.md
+++ b/nixos/doc/manual/development/writing-nixos-tests.section.md
@@ -146,7 +146,7 @@ Some advantages of virtual machines over containers are:
(kernel modules, etc.).
- Virtual machines support testing graphical applications on X11.
- Virtual machines allow testing NixOS modules that use systemd's namespacing options (such as `ProtectSystem=` or `MountAPIVFS=`).
-- Virtual machines allow testing [`spcialisation`](options.html#opt-specialisation).
+- Virtual machines allow testing [`specialisation`](options.html#opt-specialisation).
(Switching to a specialisation requires the creation of SUID/SGID wrappers, which is disallowed in `systemd-nspawn` within the Nix sandbox.)
- Virtual machines allow the execution of `setuid` binaries.
diff --git a/nixos/doc/manual/header.html b/nixos/doc/manual/header.html
new file mode 100644
index 000000000000..acc029f5c3e4
--- /dev/null
+++ b/nixos/doc/manual/header.html
@@ -0,0 +1,7 @@
+
diff --git a/nixos/doc/manual/installation/installing-from-other-distro.section.md b/nixos/doc/manual/installation/installing-from-other-distro.section.md
index 2b9d3171264a..3ccb16cbe50e 100644
--- a/nixos/doc/manual/installation/installing-from-other-distro.section.md
+++ b/nixos/doc/manual/installation/installing-from-other-distro.section.md
@@ -47,7 +47,7 @@ The first steps to all these are the same:
Where `` corresponds to the latest version available on [channels.nixos.org](https://channels.nixos.org/).
- You may want to throw in a `nix-channel --update` for good measure.
+ You must run `$ nix-channel --update` for the channel change to take effect.
1. Install the NixOS installation tools:
diff --git a/nixos/doc/manual/redirects.json b/nixos/doc/manual/redirects.json
index 264b17c856e8..27be44d30b25 100644
--- a/nixos/doc/manual/redirects.json
+++ b/nixos/doc/manual/redirects.json
@@ -101,6 +101,9 @@
"module-services-mautrix-discord-troubleshooting": [
"index.html#module-services-mautrix-discord-troubleshooting"
],
+ "module-services-onedrive": [
+ "index.html#module-services-onedrive"
+ ],
"module-services-tandoor-recipes-migrating-media-option-move": [
"index.html#module-services-tandoor-recipes-migrating-media-option-move",
"index.html#module-services-tandoor-recipes-migrating-media-option-1"
@@ -616,6 +619,15 @@
"sec-luks-file-systems-fido2-systemd": [
"index.html#sec-luks-file-systems-fido2-systemd"
],
+ "sec-nfs-file-systems": [
+ "index.html#sec-nfs-file-systems"
+ ],
+ "sec-nfs-automount": [
+ "index.html#sec-nfs-automount"
+ ],
+ "sec-nfs-adhoc": [
+ "index.html#sec-nfs-adhoc"
+ ],
"sec-sshfs-file-systems": [
"index.html#sec-sshfs-file-systems"
],
@@ -1888,6 +1900,9 @@
"sec-kubernetes": [
"index.html#sec-kubernetes"
],
+ "module-services-nordvpn": [
+ "index.html#module-services-nordvpn"
+ ],
"ch-running": [
"index.html#ch-running"
],
@@ -2291,6 +2306,9 @@
"test-opt-meta.hydraPlatforms": [
"index.html#test-opt-meta.hydraPlatforms"
],
+ "test-opt-meta.teams": [
+ "index.html#test-opt-meta.teams"
+ ],
"test-opt-meta.timeout": [
"index.html#test-opt-meta.timeout"
],
diff --git a/nixos/doc/manual/release-notes/rl-2605.section.md b/nixos/doc/manual/release-notes/rl-2605.section.md
index 412afda72e2a..8cdd2f9b64d6 100644
--- a/nixos/doc/manual/release-notes/rl-2605.section.md
+++ b/nixos/doc/manual/release-notes/rl-2605.section.md
@@ -24,11 +24,11 @@
# Pinned Nixpkgs archive
#
# Use `curl -I https://channels.nixos.org/nixos-26.05` to get the
- # latest commit of the stable channel and `nix --extra-experimental-features nix-command store prefetch-file --unpack`
- # to compute its hash.
+ # latest commit of the stable channel and `nix-prefetch-url --unpack`
+ # to compute its sha256 hash.
nixpkgs = builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/c217913993d6.tar.gz";
- hash = "sha256-D1PA3xQv/s4W3lnR9yJFSld8UOLr0a/cBWMQMXS+1Qg=";
+ sha256 = "026mprs324330pfazlgbw987qmsa8ligglarvqbcxzig2kgw0lqg";
};
in
import "${nixpkgs}/nixos" {
@@ -57,6 +57,8 @@
Container-based tests also run fine on Nix builders that are themselves VMs without KVM, and because containers can bind-mount host device nodes, they make it possible to exercise GPU/CUDA workloads from within NixOS integration tests.
See [the NixOS manual section on writing tests](https://nixos.org/manual/nixos/stable/#sec-writing-nixos-tests) for details on how to opt in and on the limitations of the container backend.
+ - Coincidentally the driver now exposes machines to the testScript using their attr name used in the test module. E.g. a machine declared with `nodes. = …` is now available as ``. Before, the test driver used their `system.name` option value. They both default to the same value, but if you have set both independently, you might need to adapt your testScript.
+
## New Modules {#sec-release-26.05-new-modules}
@@ -78,6 +80,8 @@
- [ImmichFrame](https://immichframe.dev/), display your photos from Immich as a digital photo frame. Available as [services.immichframe](#opt-services.immichframe.enable).
+- [adw-bluetooth](https://github.com/ezratweaver/adw-bluetooth), a GNOME-inspired LibAdwaita Bluetooth applet. Available as [services.adw-bluetooth](#opt-services.adw-bluetooth.enable).
+
- [PdfDing](https://www.pdfding.com/), manage, view and edit your PDFs seamlessly on all your devices wherever you are. Available as [services.pdfding](#opt-services.pdfding.enable).
- [mangowc](https://github.com/DreamMaoMao/mangowc), a lightweight and feature-rich Wayland compositor based on dwl. Available as [programs.mangowc](#opt-programs.mangowc.enable).
@@ -106,6 +110,8 @@
- [clevis-luks-askpass](https://github.com/latchset/clevis), automatic LUKS unlocking in initrd using clevis token bindings stored in LUKS headers. Available as [boot.initrd.clevisLuksAskpass](#opt-boot.initrd.clevisLuksAskpass.enable).
+- [passless](https://github.com/pando85/passless), a daemon for using Webauthn Passkeys backed by password-store.
+
- [bentopdf](https://github.com/alam00000/bentopdf), a privacy-first PDF toolkit running completely in-browser. Available as [services.bentopdf](#opt-services.bentopdf.enable).
- [hyprwhspr-rs](https://github.com/better-slop/hyprwhspr-rs), a keybind activated speech-to-text voice dictation utility built for use with Hyprland. Available as [services.hyprwhspr-rs](#opt-services.hyprwhspr-rs.enable).
diff --git a/nixos/doc/manual/release-notes/rl-2611.section.md b/nixos/doc/manual/release-notes/rl-2611.section.md
index 939b86f7d236..2b7750602776 100644
--- a/nixos/doc/manual/release-notes/rl-2611.section.md
+++ b/nixos/doc/manual/release-notes/rl-2611.section.md
@@ -4,7 +4,19 @@
-- Create the first release note entry in this section!
+- The default PostgreSQL version for new NixOS installations (i.e. with `system.stateVersion >= 26.11`) is v18.
+
+- The {file}`nixexprs.tar.xz` tarball will be discontinued together with Nixpkgs
+ 27.05 after 2027-12-31. Migrate to the {file}`nixexprs.tar.zst` tarball
+ instead.
+
+ This affects for example users who pull Nixpkgs as a flake input from
+ https://channels.nixos.org:
+
+ ```diff
+ -nixpkgs.url = "https://channels.nixos.org/nixos-26.05/nixexprs.tar.xz";
+ +nixpkgs.url = "https://channels.nixos.org/nixos-26.05/nixexprs.tar.zst";
+ ```
## New Modules {#sec-release-26.11-new-modules}
@@ -12,36 +24,147 @@
- [tranquil](https://tangled.org/tranquil.farm/tranquil-pds) is an ATProto PDS (personal data server) implementation in Rust. A featureful, spec conscious and community driven alternative to the Bluesky reference implementation PDS. Available as [services.tranquil-pds](#opt-services.tranquil-pds.enable).
+- [Moonlight Qt](https://moonlight-stream.org/), a client for playing your PC games on almost any device. Available as [programs.moonlight-qt](#opt-programs.moonlight-qt.enable).
+
- [scx_loader](https://github.com/sched-ext/scx-loader), a system daemon and DBus-based loader for sched_ext schedulers. `scxctl` is the command-line client for interacting with the loader, allowing users to switch schedulers, modes, and arguments dynamically. Available as [services.scx-loader](#opt-services.scx-loader.enable)
+- [tap](https://github.com/bluesky-social/indigo/tree/main/cmd/tap), an ATProtocol firehose synchronisation utility. Available as [services.tap](#opt-services.tap.enable).
+
+- [Nezha](https://github.com/nezhahq/nezha), a self-hosted, lightweight server and website monitoring and O&M tool. Available as [services.nezha](#opt-services.nezha.enable).
+
+- [Watt](https://github.com/NotAShelf/watt), a CPU frequency and power management daemon for Linux. Available as [services.watt](#opt-services.watt.enable).
+
+- [mail-tlsa-check-exporter](https://github.com/ietf-tools/mail-tlsa-check-exporter), validates SMTP / IMAP server certificates against a TLSA record as a Prometheus exporter. Available as [services.prometheus.exporters.mail-tlsa-check](#opt-services.prometheus.exporters.mail-tlsa-check.enable).
+
+- [CastSponsorSkip](https://github.com/gabe565/CastSponsorSkip/), skips YouTube sponsorships (and sometimes ads) on all local Google Cast devices.
+
+- [Stump](https://www.stumpapp.dev/), a free and open source comics, manga and digital book server with OPDS support. Available as [services.stump](#opt-services.stump.enable).
+
+- [Freescout](https://freescout.net/), a free, open source Helpdesk and shared mailbox. Available as [services.freescout](#opt-services.freescout.enable).
+
+- [Koito](https://koito.io/), a modern, themeable scrobbler that you can use with any program that scrobbles to a custom ListenBrainz URL. Available as [services.koito](#opt-services.koito.enable).
+
- [FlapAlerted](https://github.com/Kioubit/FlapAlerted), detects BGP flapping events and provides statistics based on BGP update messages. Available as [services.flap-alerted](#opt-services.flap-alerted.enable).
+- [gocron](https://github.com/flohoss/gocron), a task scheduler with web interface. Available as [services.gocron](#opt-services.gocron.enable).
+
+- [Unpackerr](https://unpackerr.zip), extracts downloads for Radarr, Sonarr, Lidarr, Readarr, and/or a Watch folder. Available as [services.unpackerr](#opt-services.unpackerr.enable).
+
+- [Matrix Authentication Service](https://github.com/element-hq/matrix-authentication-service) is an OAuth2.0 and OpenID Connect provider for Matrix homeservers (such as Synapse). It replaces standard password authentication with modern OpenID Connect flows, and can delegate authentication to upstream OIDC providers. Available as [services.matrix-authentication-service](#opt-services.matrix-authentication-service.enable).
+
+- [stash-clipboard](https://github.com/NotAShelf/stash), a Wayland clipboard "manager" with fast persistent history and multi-media support. Available as [services.stash-clipboard](#opt-services.stash-clipboard.enable).
+
+- [OO7](https://github.com/linux-credentials/oo7) is a desktop-agnostic Secret Service provider. Available as [services.oo7](#opt-services.oo7.enable)
+
+- [NordVPN](https://github.com/NordSecurity/nordvpn-linux), a NordVPN client for linux. Available as [services.nordvpn](options.html#opt-services.nordvpn.enable).
+
## Backward Incompatibilities {#sec-release-26.11-incompatibilities}
- `boot.vesa` has been removed. It was deprecated in 2020 because Xorg now works better with kernel modesetting. If you still need the legacy VESA 800x600 fallback, set `boot.kernelParams = [ "vga=0x317" "nomodeset" ];` directly.
+- `authentik` has been updated to 2026.5.3, which changes the default listen address from `0.0.0.0` to `[::]`.
+ IPv4-only deployments might need to adjust their listen settings.
+ Deployments running the server and worker in the same network namespace must also set at least the worker
+ `AUTHENTIK_LISTEN__HTTP` address so that the server and worker do not bind to the same address.
+
+- `services.alps` has been rewritten, see [upstream repository](https://github.com/migadu/alps) for configuration.
+
- Support for the legacy U‐Boot image format has been removed from the initrd generators, as it is deprecated upstream and no longer used by any platform in Nixpkgs.
- Rustical migrates from `settings.http.host` and `settings.http.port` to `settings.http.bind` to support UNIX domain sockets as well as TCP sockets in one setting.
-- `services.llama-cpp` is now configured using structured `services.llama-cpp.settings` attribute.
+- A number of options for `services.llama-cpp` have been removed in favor of the structured [](#opt-services.llama-cpp.settings) option, attributes from which are used as arguments to `llama-server` executable, you can see all available options by running `llama-server --help`. Configuring model presets using Nix attribute set via `services.llama-cpp.modelsPreset` is no longer supported, please use `services.llama-cpp.settings.models-preset` with a path to an INI file containing desired options.
+
+- The `NIX_XDG_DESKTOP_PORTAL_DIR` environment variable is no longer used in the `xdg-desktop-portal` package and is therefore no longer set in `xdg.portal` module.
+ Instead the `XDG_DATA_DIRS` environment variable is used to find xdg-portals.
+
+ If you were relying on `NIX_XDG_DESKTOP_PORTAL_DIR` to point at custom portal
+ definitions, add the package providing them to `xdg.portal.extraPortals`.
- Python 2 has been removed from the top-level package set, as it is long past end-of-life. The `python2`, `python27`, `python2Full`, `python27Full`, `python2Packages`, and `python27Packages` attributes, along with the legacy `python`, `pythonFull`, and `pythonPackages` aliases, now throw an error directing you to `python3`. The `isPy2` and `isPy27` package flags have been removed accordingly. The only remaining Python 2 interpreter is vendored inside the `resholve` package for its `oil` dependency and is not exposed for general use.
+- `security.polkit.enablePkexecWrapper` has been introduced, making the `pkexec` setuid wrapper opt-in.
+
+- Apache Kafka has dropped support for ZooKeeper mode. The `apacheKafka_3_9` and `apacheKafka_4_0` packages have been removed, as every remaining packaged version is KRaft-only. The `services.apache-kafka.zookeeper` option (previously an alias for `services.apache-kafka.settings."zookeeper.connect"`) has been removed; migrate your cluster to [KRaft](#module-services-apache-kafka-kraft) mode instead.
+
+- `virtualisation.registries.block` / `insecure` / `search` were deprecated,
+ because they mapped to the deprecated V1 `registries.conf` format.
+ See the new option {option}`virtualisation.registries.settings`
+ and [containers-registries.conf(5)](https://github.com/containers/image/blob/main/docs/containers-registries.conf.5.md)
+ to migrate to the new configuration format.
+
+- When Avahi's mDNS resolver is enabled (`services.avahi.nssmdns4` or `services.avahi.nssmdns6`), only the minimal mDNS resolver is enabled by default to avoid adding a 5 second delay to every failed reverse hostname lookup (e.g., delaying ping by 5 seconds). The "full" mDNS resolver now remains disabled unless `services.avahi.nssmdnsFull` is also enabled. Users who have customized [`/etc/mdns.allow`](https://github.com/avahi/nss-mdns/tree/master#etcmdnsallow) to allow mDNS domains not ending `.local` must enable `services.avahi.nssmdnsFull` to continue to resolve such domains.
+
+- String values passed to `services.phpfpm.settings`, `services.phpfpm.pools..phpEnv`, and `services.phpfpm.pools..settings` are now properly quoted and escaped, except for the `${}` syntax that is left as-is. If you are manually escaping these values, please adjust accordingly.
+
- `systemd.user.extraConfig` has been removed in favor of the structured [](#opt-systemd.user.settings.Manager) option. Use `systemd.user.settings.Manager` to set any `systemd-user.conf(5)` option directly. For example, replace `systemd.user.extraConfig = "DefaultTimeoutStartSec=60";` with `systemd.user.settings.Manager.DefaultTimeoutStartSec = 60;`.
+- `matrix-appservice-discord` was removed from nixpkgs along with its NixOS module (`services.matrix-appservice-discord`) as it is no longer actively maintained upstream. Use the actively-maintained puppeting bridge [`mautrix-discord`](#opt-services.mautrix-discord.enable) instead.
+
- `services.timesyncd.extraConfig` has been removed in favor of the structured [](#opt-services.timesyncd.settings.Time) option. Use `services.timesyncd.settings.Time` to set any `timesyncd.conf(5)` option directly. For example, replace `services.timesyncd.extraConfig = "PollIntervalMaxSec=180";` with `services.timesyncd.settings.Time.PollIntervalMaxSec = 180;`.
- `services.firezone.server.provision` has been removed due to it being unmaintanable. Remove all uses of provisioning and use the WebUI to configure firezone.
- The `services.syncthing` module now updates the Syncthing REST API using partial updates (`PATCH`) instead of full replacements (`PUT`) for general settings. Updating these settings was broken and prone to errors after updates, see [#428808](https://github.com/NixOS/nixpkgs/issues/428808) and [#528889](https://github.com/NixOS/nixpkgs/issues/528889). As a result, settings modified manually through the Syncthing Web UI that are not explicitly defined in your Nix configuration will now persist across rebuilds.
+- `services.plantuml-server.packages.jetty` now supports `jetty_12`, it no longer supports `jetty_11`.
+
+- `services.komodo-periphery` has been updated to support version 2.0.0. Some options have been renamed to match the new configuration structure; compatibility aliases are provided for the renamed options. The `passkeys` and `outbound.onboardingKey` options have been removed; use `passkeyFiles`, `auth.privateKey`/`auth.corePublicKeys`, or `outbound.onboardingKeyFile` instead. New outbound mode configuration is available under `outbound.*`.
+
## Other Notable Changes {#sec-release-26.11-notable-changes}
+- `komodo` has been updated to the v2 release line (2.x). See the [upstream v1 → v2 upgrade guide](https://github.com/moghtech/komodo/releases/tag/v2.0.0).
+
+- `temporal` has been updated to the 1.31 release line. Always consult the [upstream upgrade
+ notes](https://docs.temporal.io/self-hosted-guide/upgrade-server) before upgrading between versions.
+
+- The `shell_interact()` function on interactive runs of NixOS VM tests has been deprecated. Use the SSH backdoor instead.
+
+- [services.netbox](#opt-services.netbox.enable) has received a number of updates:
+ - Default settings can now be introspected at [](#opt-services.netbox.settings).
+ - Environment files can now be passed at [](#opt-services.netbox.environmentFiles).
+ - When Django [secret key](#opt-services.netbox.secretKeyFile) or [API token peppers](#opt-services.netbox.apiTokenPepperFiles)
+ remain unset, random values will automatically be generated and stored below `/var/lib/netbox`.
+ - Multiple peppers can now be maintained, which allows for pepper rotation.
+ - All options to bind the gunicorn socket have been unified in [](#opt-services.netbox.bind)
+ and the default changed to a UNIX domain socket.
+ - A cookie-cutter nginx vhost can be enabled at [](#opt-services.netbox.nginx.enable).
+
+- `security.run0.enableSudoAlias` now uses the `run0-sudo-shim` instead of a shell-script to improve compatibility.
+
+- With `system.etc.overlay.mutable = false`, NixOS now ships an empty `/etc/machine-id` in the image. Previously the file was absent and systemd logged `System cannot boot: Missing /etc/machine-id and /etc/ is read-only` while `ConditionFirstBoot` fired on every boot. With this change, systemd now overlays a transient ID from `/run/machine-id` for the session, and `systemd-machine-id-commit.service` has `ConditionFirstBoot` so it writes the machine-id through to a persistent backing file when one is bind-mounted over `/etc/machine-id`. To persist the machine-id across reboots, bind-mount a writable file containing `uninitialized` over `/etc/machine-id` from the initrd, or set `systemd.machine_id=` on the kernel command line (use `systemd.machine_id=firmware` to derive a stable ID on hardware that supports it).
+
+- `security.run0.persistentAuth` options have been added to support persistent Authentication of session. Timeout configurable via `security.polkit.settings.Polkitd.ExpirationSeconds`.
+
- `boot.loader.systemd-boot` gained support for [Automatic Boot Assessment](https://systemd.io/AUTOMATIC_BOOT_ASSESSMENT/) via the new [`boot.loader.systemd-boot.bootCounting`](#opt-boot.loader.systemd-boot.bootCounting.enable) options, allowing automatic detection of and recovery from bad NixOS generations. As part of this change, boot loader entries on the ESP/XBOOTLDR partition are now named `nixos-.conf` instead of `nixos-generation-.conf`; existing entries are migrated automatically on the next `nixos-rebuild boot`/`switch`.
+- `services.nginx` gained a [`lua`](#opt-services.nginx.lua.enable) option to enable Lua scripting via OpenResty's lua-nginx-module on a stock nginx, configuring `lua_package_path`/`lua_package_cpath` from the packages listed in [`services.nginx.lua.extraPackages`](#opt-services.nginx.lua.extraPackages). Use this to add Lua to a regular nginx; for the full OpenResty platform (libraries that rely on its bundled lualib, such as `lua-resty-openidc`), set `services.nginx.package` to `pkgs.openresty` instead — the option configures the Lua search path for it too.
+
+- `security.polkit.settings` added for RFC42 style configuration of the polkitd daemon.
+
+- `boot.supportedFilesystems.ntfs` installs `ntfsprogs-plus` instead of `ntfs3g` on kernel version 7.1 and later, unless `boot.supportedFilesystems.ntfs-3g` is explicitly enabled.
+
+- The `programs.fuse` module, which provides the `fusermount3` executable and the `/etc/fuse.conf` config file, is now opt-in. The obligation to enable it has been shifted to its various consumers (e.g. gvfs, flatpak, appimage, sshfs). This can break fuse consumers at runtime, that don't explicitly declare that dependency with a module, e.g the mounting functionality in various backup tools (borg, restic, rclone, ...).
+
+- `services.plausible` can now again seed an initial admin user declaratively via [`services.plausible.adminUser.email`](#opt-services.plausible.adminUser.email).
+ This makes fully declarative deployments safer: Otherwise the user needed to either accept Plausible's unauthenticated "first launch" setup wizard, which lets anyone reaching the instance create the first admin account, or do more work (deploying with NixOS's default binding to `localhost` without exposing it publicly, going through the wizard, and then deploying Plausible exposed to the Internet).
+ This option was previously removed with NixOS 25.05 due to an upstream Plausible change making declarative admin creation more difficult, but this change re-implements the admin creation directly.
+
- The `newuidmap` and `newgidmap` security wrappers are now installed with `cap_setuid`/`cap_setgid` file capabilities instead of the setuid-root bit, matching shadow's `--with-fcaps` install mode and other major distributions. Rootless containers (podman, docker-rootless, unprivileged user namespaces) are unaffected. The only behavioural change is that mapping host uid 0 via `/etc/subuid` (which NixOS never configures by default) additionally requires `cap_setfcap`; users who explicitly grant uid 0 in a subuid range can restore the previous behaviour with `security.wrappers.newuidmap.capabilities = lib.mkForce "cap_setuid,cap_setfcap+ep";`.
+
+- The `authelia` module now uses systemd's `LoadCredential` to load all files defined in `secrets`. As such, these files no longer need to be readable by the authelia user and group: they can for example be set to be only readable by the root user.
+
+- `zoneminder` has been updated to 1.38.x release. See [upstream release note](https://github.com/ZoneMinder/zoneminder/releases/tag/1.38.0). While database migration should happen automatically, it's recommended that you make a backup of the database before upgrading your system.
+
+- The latest available version of Nextcloud is v34 (available as `pkgs.nextcloud34`). The installation logic is as follows:
+ - If [`services.nextcloud.package`](#opt-services.nextcloud.package) is specified explicitly, this package will be installed (**recommended**)
+ - If `system.stateVersion` is >=26.11, `pkgs.nextcloud34` will be installed by default.
+ - If [`system.stateVersion`](#opt-system.stateVersion) is >=26.05, `pkgs.nextcloud33` will be installed by default.
+ - If [`system.stateVersion`](#opt-system.stateVersion) is >=25.11, `pkgs.nextcloud32` will be installed by default.
+ - Please note that Nextcloud prohibits skipping major versions while upgrading. You can upgrade to specific versions by declaring `services.nextcloud.package = pkgs.nextcloud33;`.
+
+- `trilium-desktop` and `trilium-server` have been updated to 0.104.0. This release includes security hardening fixes that may break functionality. [See upstream release note for details](https://github.com/TriliumNext/Trilium/releases/tag/v0.104.0).
diff --git a/nixos/lib/make-channel.nix b/nixos/lib/make-channel.nix
index e366006e908c..098be3237dae 100644
--- a/nixos/lib/make-channel.nix
+++ b/nixos/lib/make-channel.nix
@@ -18,7 +18,10 @@ pkgs.releaseTools.makeSourceTarball {
officialRelease = false; # FIXME: fix this in makeSourceTarball
inherit version versionSuffix;
- buildInputs = [ pkgs.nix ];
+ buildInputs = with pkgs; [
+ nix
+ zstd
+ ];
distPhase = ''
rm -rf .git
@@ -32,6 +35,35 @@ pkgs.releaseTools.makeSourceTarball {
NIX_STATE_DIR=$TMPDIR nix-env -f ../$releaseName/default.nix -qaP --meta --show-trace --xml \* > /dev/null
cd ..
chmod -R u+w $releaseName
- tar cfJ $out/tarballs/$releaseName.tar.xz $releaseName
+
+ # The compression tasks are shortlived; use all available CPUs (-T0) to
+ # prioritize fast channel advancement.
+ XZ_OPT="-T0" tar \
+ --create \
+ --file=$out/tarballs/$releaseName.tar.xz \
+ --xz \
+ --absolute-names \
+ --owner=0 \
+ --group=0 \
+ --numeric-owner \
+ --format=gnu \
+ --sort=name \
+ --mtime="@$SOURCE_DATE_EPOCH" \
+ --hard-dereference \
+ $releaseName
+
+ tar \
+ --create \
+ --file="$out/tarballs/$releaseName.tar.zst" \
+ --use-compress-program="zstd -19 -T0" \
+ --absolute-names \
+ --owner=0 \
+ --group=0 \
+ --numeric-owner \
+ --format=gnu \
+ --sort=name \
+ --mtime="@$SOURCE_DATE_EPOCH" \
+ --hard-dereference \
+ $releaseName
'';
}
diff --git a/nixos/lib/qemu-common.nix b/nixos/lib/qemu-common.nix
index 9ff482b83f3a..346d3ffcef5a 100644
--- a/nixos/lib/qemu-common.nix
+++ b/nixos/lib/qemu-common.nix
@@ -46,15 +46,10 @@ rec {
powerpc64-linux = "${qemuPkg}/bin/qemu-system-ppc64 -machine powernv";
riscv32-linux = "${qemuPkg}/bin/qemu-system-riscv32 -machine virt";
riscv64-linux = "${qemuPkg}/bin/qemu-system-riscv64 -machine virt";
- x86_64-darwin = "${qemuPkg}/bin/qemu-system-x86_64 -machine accel=${accel "kvm"} -cpu max";
};
otherHostGuestMatrix = {
aarch64-darwin = {
aarch64-linux = "${qemuPkg}/bin/qemu-system-aarch64 -machine virt,gic-version=2,accel=${accel "hvf"} -cpu max";
- inherit (otherHostGuestMatrix.x86_64-darwin) x86_64-linux;
- };
- x86_64-darwin = {
- x86_64-linux = "${qemuPkg}/bin/qemu-system-x86_64 -machine type=q35,accel=${accel "hvf"} -cpu max";
};
};
diff --git a/nixos/lib/systemd-lib.nix b/nixos/lib/systemd-lib.nix
index 5c974f41dda5..99cc42c48a1d 100644
--- a/nixos/lib/systemd-lib.nix
+++ b/nixos/lib/systemd-lib.nix
@@ -78,16 +78,13 @@ rec {
{
preferLocalBuild = true;
allowSubstitutes = false;
- # unit.text can be null. But variables that are null listed in
- # passAsFile are ignored by nix, resulting in no file being created,
- # making the mv operation fail.
- text = optionalString (unit.text != null) unit.text;
- passAsFile = [ "text" ];
+ text = unit.text or "";
+ __structuredAttrs = true;
}
''
name=${shellEscape name}
mkdir -p "$out/$(dirname -- "$name")"
- mv "$textPath" "$out/$name"
+ printf "%s" "$text" > "$out/$name"
''
else
pkgs.runCommand "unit-${mkPathSafeName name}-disabled"
diff --git a/nixos/lib/systemd-unit-options.nix b/nixos/lib/systemd-unit-options.nix
index 8538c8519c53..86bb255a84c3 100644
--- a/nixos/lib/systemd-unit-options.nix
+++ b/nixos/lib/systemd-unit-options.nix
@@ -625,7 +625,7 @@ rec {
listenStreams = mkOption {
default = [ ];
- type = types.listOf types.str;
+ type = types.listOf (types.coercedTo types.port toString types.str);
example = [
"0.0.0.0:993"
"/run/my-socket"
diff --git a/nixos/lib/test-driver/default.nix b/nixos/lib/test-driver/default.nix
index 77638397d11c..efc7d8fa9a85 100644
--- a/nixos/lib/test-driver/default.nix
+++ b/nixos/lib/test-driver/default.nix
@@ -11,6 +11,7 @@
ptpython,
pydantic,
python,
+ ovmfvartool,
remote-pdb,
ruff,
ty,
@@ -18,8 +19,6 @@
netpbm,
vhost-device-vsock,
nixosTests,
- qemu_pkg ? qemu_test,
- qemu_test,
setuptools,
socat,
systemd,
@@ -49,6 +48,7 @@ buildPythonApplication {
junit-xml
ptpython
pydantic
+ ovmfvartool
remote-pdb
]
++ extraPythonPackages python.pkgs;
@@ -56,7 +56,6 @@ buildPythonApplication {
propagatedBuildInputs = [
coreutils
netpbm
- qemu_pkg
socat
util-linux
vde2
diff --git a/nixos/lib/test-driver/src/test_driver/__init__.py b/nixos/lib/test-driver/src/test_driver/__init__.py
index 62c2a6073e6c..774f3afdf49e 100644
--- a/nixos/lib/test-driver/src/test_driver/__init__.py
+++ b/nixos/lib/test-driver/src/test_driver/__init__.py
@@ -6,6 +6,7 @@ import warnings
from pathlib import Path
import ptpython.ipython
+import ptpython.repl
from colorama import Fore, Style
from test_driver.debug import Debug, DebugAbstract, DebugNop
@@ -174,6 +175,7 @@ def main() -> None:
if args.interactive:
history_dir = os.getcwd()
history_path = os.path.join(history_dir, ".nixos-test-history")
+ ptpython.repl.enable_deprecation_warnings()
ptpython.ipython.embed(
user_ns=driver.test_symbols(),
history_filename=history_path,
diff --git a/nixos/lib/test-driver/src/test_driver/efi.py b/nixos/lib/test-driver/src/test_driver/efi.py
new file mode 100644
index 000000000000..fb547ded5dd9
--- /dev/null
+++ b/nixos/lib/test-driver/src/test_driver/efi.py
@@ -0,0 +1,233 @@
+import binascii
+import io
+import os.path
+import uuid
+from collections.abc import Generator
+from contextlib import contextmanager
+from pathlib import Path
+from typing import IO, Any, TypeVar
+
+from ovmfvartool import (
+ AuthenticatedVariable,
+ FirmwareVolumeHeader,
+ UEFITime,
+ VariableStoreHeader,
+ resolveUUID,
+)
+
+import test_driver.machine
+from test_driver.errors import RequestedAssertionFailed
+
+EfiVariableT = TypeVar("EfiVariableT", bound="EfiVariable")
+
+# See edk2.git/OvmfPkg/Bhyve/VarStore.fdf.inc
+_NV_FTW_WORKING_OFFSET = 0x41000
+_NV_FTW_WORKING_VALUE = binascii.unhexlify(
+ b"2b29589e687c7d49a0ce6500fd9f1b952caf2c64feffffffe00f000000000000"
+)
+_NV_FTW_SIZE = 0x42000
+_NV_FTW_MAIN_PLUS_SPARE_SIZE = _NV_FTW_SIZE * 2
+
+
+class EfiVariable(AuthenticatedVariable):
+ class Flags:
+ NON_VOLATILE = 0x1
+ BOOTSERVICE_ACCESS = 0x2
+ RUNTIME_ACCESS = 0x4
+ TIME_BASED_AUTHENTICATED_WRITE_ACCESS = 0x20
+
+ class State:
+ VAR_HEADER_VALID_ONLY = 0x7F
+ VAR_ADDED = 0x3F
+
+ volatile = False
+ boot_access = False
+ runtime_access = False
+ hardware_error_record = False
+ authenticated_write_access = False
+ time_based_authenticated_write_access = False
+ append_write = False
+
+ def __init__(
+ self,
+ vendor_uuid: uuid.UUID | None = None,
+ name: str | None = None,
+ data: bytes | None = None,
+ state: int | None = None,
+ flags: int | None = None,
+ ) -> None:
+ self.magic = 0x55AA
+ self.reserved1 = 0
+ self.monotonicCount = 0
+ self.timestamp = UEFITime()
+ self.pubKeyIdx = 0
+ self.state = 0
+ self.flags = 0
+
+ if vendor_uuid is not None:
+ self.vendorUUID = uuid.UUID(bytes=vendor_uuid.bytes_le)
+
+ if state is not None:
+ self.state = state ^ 0xFF
+ else:
+ self.state = (0x40 | 0x80) ^ 0xFF
+
+ if flags is not None:
+ self.flags = flags
+
+ if name is not None:
+ self.name = name
+ self.nameLen = len(name) * 2 + 2
+
+ if data is not None:
+ self.data = data
+ self.dataLen = len(data)
+
+ def _read_flags(self) -> None:
+ if not (self.flags & 0x1):
+ self.volatile = True
+ if self.flags & 0x2:
+ self.boot_access = True
+ if self.flags & 0x4:
+ self.runtime_access = True
+ if self.flags & 0x8:
+ self.hardware_error_record = True
+ if self.flags & 0x10:
+ self.authenticated_write_access = True
+ if self.flags & 0x20:
+ self.time_based_authenticated_write_access = True
+ if self.flags & 0x40:
+ self.append_write = True
+
+ self.flags &= ~(0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20 | 0x40)
+
+ @classmethod
+ def deserialize(cls: type[EfiVariableT], f: Any) -> EfiVariableT | None:
+ # pylint: disable=no-member
+ # false positive https://github.com/PyCQA/pylint/issues/981
+ ret = super().deserialize(f)
+ if ret:
+ ret._read_flags()
+ return ret
+
+ @classmethod
+ def deserializeFromDocument( # noqa: N802
+ cls: type[EfiVariableT],
+ vendorID: str, # noqa: N803
+ name: str,
+ doc: dict[str, Any],
+ ) -> EfiVariableT:
+ # pylint: disable=no-member
+ # false positive https://github.com/PyCQA/pylint/issues/981
+ ret = super(cls, cls).deserializeFromDocument(vendorID, name, doc)
+ if ret:
+ ret._read_flags()
+ return ret
+
+
+class EfiVars:
+ """A container around the ovmf variables"""
+
+ state_path: Path
+ machine: "test_driver.machine.QemuMachine"
+
+ def __init__(self, state_path: Path, machine: Any):
+ self.state_path = state_path
+ self.machine = machine
+
+ def _assert_stopped(self) -> None:
+ if self.machine.booted:
+ raise RequestedAssertionFailed(
+ "System is currently running and concurrent reads / writes to the OVMF variables is unsupported"
+ )
+
+ def read_content(self) -> dict[str, dict[str, EfiVariable]] | None:
+ self._assert_stopped()
+ try:
+ with open(self.state_path, "rb") as f:
+ fvh = FirmwareVolumeHeader.deserialize(f)
+ vsh = VariableStoreHeader.deserialize(f)
+ _ = fvh
+ _ = vsh
+ variables: dict[str, dict[str, EfiVariable]] = {}
+
+ while True:
+ v = EfiVariable.deserialize(f)
+ if not v:
+ break
+ if v.isDeleted:
+ continue
+
+ k = resolveUUID(v.vendorUUID)
+ variables.setdefault(k, {})
+ variables[k][v.name] = v
+
+ return variables
+
+ except FileNotFoundError:
+ return None
+
+ @contextmanager
+ def _write_store(self, *args, **kwargs) -> Generator[IO[bytes]]:
+ with open(self.state_path, "wb") as fo:
+ fm = io.BytesIO(b"\xff" * _NV_FTW_MAIN_PLUS_SPARE_SIZE)
+ fm.write(FirmwareVolumeHeader.create().serialize())
+ fm.write(VariableStoreHeader.create().serialize())
+
+ try:
+ yield fm
+ finally:
+ fm.seek(_NV_FTW_WORKING_OFFSET)
+ fm.write(_NV_FTW_WORKING_VALUE)
+ fm.seek(0)
+ fo.write(fm.read())
+
+ def create_empty(self) -> None:
+ self._assert_stopped()
+
+ if os.path.exists(self.state_path):
+ raise RequestedAssertionFailed("OVMF variables store exists")
+
+ with self._write_store():
+ pass
+
+ def write(self, add: list[EfiVariable]) -> None:
+ self._assert_stopped()
+
+ variables = self.read_content()
+ if not variables:
+ variables = {}
+
+ for var in add:
+ k = resolveUUID(var.vendorUUID)
+ variables.setdefault(k, {})
+ variables[k][var.name] = var
+
+ with self._write_store() as fm:
+ for _, vendor in variables.items():
+ for _, v in vendor.items():
+ fm.write(v.serialize())
+ if fm.tell() % 4:
+ fm.write(b"\xff" * (4 - (fm.tell() % 4)))
+ assert (fm.tell() % 4) == 0
+
+
+class EfiGuid:
+ from ovmfvartool import (
+ gEdkiiVarErrorFlagGuid,
+ gEfiAuthenticatedVariableGuid,
+ gEfiCertDbGuid,
+ gEfiCustomModeEnableGuid,
+ gEfiGlobalVariableGuid,
+ gEfiImageSecurityDatabaseGuid,
+ gEfiIp4Config2ProtocolGuid,
+ gEfiIScsiInitiatorNameProtocolGuid,
+ gEfiMemoryTypeInformationGuid,
+ gEfiSecureBootEnableDisableGuid,
+ gEfiSystemNvDataFvGuid,
+ gEfiVendorKeysNvGuid,
+ gIScsiConfigGuid,
+ gMicrosoftVendorGuid,
+ gMtcVendorGuid,
+ mBmHardDriveBootVariableGuid,
+ )
diff --git a/nixos/lib/test-driver/src/test_driver/machine/__init__.py b/nixos/lib/test-driver/src/test_driver/machine/__init__.py
index db96445af912..d1f519c803b9 100644
--- a/nixos/lib/test-driver/src/test_driver/machine/__init__.py
+++ b/nixos/lib/test-driver/src/test_driver/machine/__init__.py
@@ -22,6 +22,7 @@ from pathlib import Path
from queue import Queue
from typing import Any
+from test_driver.efi import EfiVariable, EfiVars
from test_driver.errors import MachineError, RequestedAssertionFailed
from test_driver.logger import AbstractLogger
from test_driver.machine.ocr import (
@@ -192,6 +193,7 @@ class QemuStartCommand:
def build_environment(
state_dir: Path,
shared_dir: Path,
+ efi_vars_path: Path | None = None,
) -> dict:
# We make a copy to not update the current environment
env = dict(os.environ)
@@ -202,6 +204,13 @@ class QemuStartCommand:
"USE_TMPDIR": "1",
}
)
+ if efi_vars_path is not None:
+ env.update(
+ {
+ "NIX_EFI_VARS": str(efi_vars_path),
+ }
+ )
+
return env
def run(
@@ -212,6 +221,7 @@ class QemuStartCommand:
qmp_socket_path: Path,
shell_socket_path: Path,
allow_reboot: bool,
+ efi_vars_path: Path | None = None,
vsock_guest: Path | None = None,
) -> subprocess.Popen:
return subprocess.Popen(
@@ -227,7 +237,9 @@ class QemuStartCommand:
stderr=subprocess.STDOUT,
shell=True,
cwd=state_dir,
- env=self.build_environment(state_dir, shared_dir),
+ env=self.build_environment(
+ state_dir, shared_dir, efi_vars_path=efi_vars_path
+ ),
)
@@ -750,6 +762,9 @@ class QemuMachine(BaseMachine):
# Store all console output for full log retrieval
full_console_log: list[str]
+ efi_vars_path: Path
+ efi_vars: EfiVars
+
def __init__(
self,
out_dir: Path,
@@ -791,6 +806,9 @@ class QemuMachine(BaseMachine):
self.booted = False
self.connected = False
+ self.efi_vars_path = self.state_dir / f"{self.name}-efi-vars.fd"
+ self.efi_vars = EfiVars(self.efi_vars_path, self)
+
def ssh_backdoor_command(self) -> str:
assert self.vsock_host is not None
return f"ssh -o User=root vsock-mux/{self.vsock_host}"
@@ -908,6 +926,7 @@ class QemuMachine(BaseMachine):
return (rc, output.decode(errors="replace"))
+ @warnings.deprecated("Use the SSH backdoor instead")
def shell_interact(self, address: str | None = None) -> None:
"""
Allows you to directly interact with the guest shell. This should
@@ -1044,12 +1063,16 @@ class QemuMachine(BaseMachine):
assert self.shell
tic = time.time()
- # TODO: do we want to bail after a set number of attempts?
- while not shell_ready(timeout_secs=30):
+
+ for _ in range(10):
+ if shell_ready(timeout_secs=30):
+ break
self.log("Guest root shell did not produce any data yet...")
self.log(
" To debug, enter the VM and run 'systemctl status backdoor.service'."
)
+ else:
+ raise RuntimeError("Shell did not start in time")
while True:
chunk = self.shell.recv(1024)
@@ -1164,24 +1187,25 @@ class QemuMachine(BaseMachine):
# to match multiline regexes.
console = io.StringIO()
- def console_matches(_last_try: bool) -> bool:
+ def console_matches(_last_try: bool, block: bool = False) -> bool:
nonlocal console
try:
- # This will return as soon as possible and
- # sleep 1 second.
- console.write(self.last_lines.get(block=False))
+ while True:
+ # This will return as soon as possible and
+ # sleep 1 second.
+ console.write(self.last_lines.get(block=block))
+ console.seek(0)
+ matches = re.search(regex, console.read())
+ if matches is not None:
+ return True
except queue.Empty:
- pass
- console.seek(0)
- matches = re.search(regex, console.read())
- return matches is not None
+ return False
with self.nested(f"waiting for {regex} to appear on console"):
if timeout is not None:
retry(console_matches, timeout)
else:
- while not console_matches(False):
- pass
+ console_matches(False, block=True)
def get_console_log(self) -> str:
"""
@@ -1248,6 +1272,7 @@ class QemuMachine(BaseMachine):
self.qmp_path,
self.shell_path,
allow_reboot,
+ self.efi_vars_path,
self.vsock_guest,
)
@@ -1432,6 +1457,28 @@ class QemuMachine(BaseMachine):
self.connected = False
self.connect()
+ def dump_efi_vars(self) -> None:
+ for var in self.read_efi_vars():
+ var.print()
+
+ def read_efi_vars(self) -> list[EfiVariable]:
+ config = self.efi_vars.read_content()
+ if not config:
+ return []
+
+ out = []
+ for vendor, variables in config.items():
+ for name, v in variables.items():
+ out.append(v)
+
+ return out
+
+ def create_efi_vars(self) -> None:
+ self.efi_vars.create_empty()
+
+ def write_efi_vars(self, add: list[EfiVariable]) -> None:
+ self.efi_vars.write(add)
+
class NspawnMachine(BaseMachine):
"""
@@ -1446,6 +1493,7 @@ class NspawnMachine(BaseMachine):
machine_sock_path: Path
machine_sock: socket.socket | None
+ notify_thread: threading.Thread | None
@staticmethod
def machine_name_from_start_command(start_command: str) -> str:
@@ -1476,6 +1524,12 @@ class NspawnMachine(BaseMachine):
self.start_command = start_command
self.process = None
+ self.notify_thread = None
+ # State maintained by the notify-socket drainer thread (see
+ # `_drain_notify_socket`). Guarded by `_notify_lock`.
+ self._notify_lock = threading.Lock()
+ self._notify_ready = False
+ self._notify_leader_pid: int | None = None
self.machine_sock_path = self.tmp_dir / f"{self.name}-nspawn.sock"
@@ -1510,43 +1564,76 @@ class NspawnMachine(BaseMachine):
def is_up(self) -> bool:
return self.process is not None
- def _poll_socket(self) -> tuple[bool, int | None]:
- """Non-blocking check of container status via socket.
- Returns (is_ready, leader_pid).
+ def _drain_notify_socket(self) -> None:
+ """Continuously drain the container's `sd_notify` socket (NOTIFY_SOCKET)
+ for the whole lifetime of the container, recording readiness and the
+ leader PID as they arrive.
+
+ Draining must not stop after boot: the container's PID 1 re-sends
+ `READY=1` on every `systemctl daemon-reexec` (the same Manager.Reexecute
+ that switch-to-configuration issues on a systemd change). If nothing
+ reads the socket, its receive buffer fills and PID 1 blocks in
+ `sendmsg()` to NOTIFY_SOCKET while re-executing -- it never finishes
+ re-initializing, and every later `systemctl` call inside the container
+ hangs or fails with `Transport endpoint is not connected`.
"""
assert self.machine_sock is not None
- ready = False
- leader_pid = None
- try:
- data, _ = self.machine_sock.recvfrom(4096)
- msg = data.decode()
- for line in msg.splitlines():
+ sock = self.machine_sock
+ proc = self.process
+ assert proc is not None
+ # Bound the thread to the container's lifetime: on
+ # `wait_for_shutdown()` only non-None `proc.poll()` ends the loop.
+ # On exit of PID 1, any datagrams still queued are stale, so drop them.
+ while proc.poll() is None:
+ try:
+ # Block (with a timeout so we notice the container exiting)
+ # rather than busy-poll; we just need to keep the buffer empty.
+ sock.settimeout(0.5)
+ data, _ = sock.recvfrom(4096)
+ except (TimeoutError, BlockingIOError):
+ continue
+ except OSError:
+ break
+ ready = False
+ leader_pid = None
+ for line in data.decode(errors="replace").splitlines():
if line == "READY=1":
ready = True
if line.startswith("X_NSPAWN_LEADER_PID="):
leader_pid = int(line.split("=")[1])
- except OSError:
- pass
- return ready, leader_pid
+ if ready or leader_pid is not None:
+ with self._notify_lock:
+ if ready:
+ self._notify_ready = True
+ if leader_pid is not None:
+ self._notify_leader_pid = leader_pid
@cached_property
def get_systemd_process(self) -> int:
- """Block until startup is complete and return the PID of the container's systemd process."""
- assert self.process is not None
+ """Block until startup is complete and return the PID of the container's systemd process.
- container_pid: int | None = None
- is_ready = False
+ Readiness and the leader PID are reported over NOTIFY_SOCKET, which is
+ drained by `_drain_notify_socket` (started in `start()`); we just wait
+ for that thread to record both.
+ """
+ assert self.process is not None
start_time = time.monotonic()
last_warning = start_time
delay = 0.01
max_delay = 0.5
- while not is_ready or container_pid is None:
- # Poll the socket until we have the container leader PID
+ # Poll the socket until we have the container leader PID
+ while True:
if self.process.poll() is not None:
raise MachineError("systemd-nspawn process exited unexpectedly")
+ with self._notify_lock:
+ is_ready = self._notify_ready
+ container_pid = self._notify_leader_pid
+ if is_ready and container_pid is not None:
+ return container_pid
+
# Print periodic warnings every 10s so the user knows we aren't deadlocked
now = time.monotonic()
if now - last_warning > 10.0:
@@ -1555,18 +1642,8 @@ class NspawnMachine(BaseMachine):
)
last_warning = now
- # Poll and update our local tracking variables
- ready_now, pid_now = self._poll_socket()
- if ready_now:
- is_ready = True
- if pid_now:
- container_pid = pid_now
-
- if not (is_ready and container_pid):
- time.sleep(delay)
- delay = min(delay * 2, max_delay)
-
- return container_pid
+ time.sleep(delay)
+ delay = min(delay * 2, max_delay)
def _execute(
self,
@@ -1587,7 +1664,7 @@ class NspawnMachine(BaseMachine):
# NOTE If the test calls switch-to-configuration (with a differently configured specialization)
# this will use the /etc/profile of the new specialisation while `QemuMachine` nodes
# will continue to use the original /etc/profile.
- command = f"set -eo pipefail; source /etc/profile; set -u; {command}"
+ command = f"set -eo pipefail; USER=root HOME=/root source /etc/profile; set -u; {command}"
cp = subprocess.run(
[
@@ -1680,10 +1757,10 @@ class NspawnMachine(BaseMachine):
self.machine_sock = socket.socket(family=socket.AF_UNIX, type=socket.SOCK_DGRAM)
self.machine_sock.bind(str(self.machine_sock_path))
- self.machine_sock.setblocking(False)
self.process = subprocess.Popen(
[self.start_command],
+ cwd=self.state_dir,
env={
"RUN_NSPAWN_ROOT_DIR": str(self.state_dir),
"RUN_NSPAWN_SHARED_DIR": str(self.shared_dir),
@@ -1695,6 +1772,13 @@ class NspawnMachine(BaseMachine):
self.log(f"systemd-nspawn running (pid {self.process.pid})")
+ # Keep the notify socket drained for the container's whole lifetime, so
+ # PID 1 never blocks re-sending `READY=1` on `daemon-reexec`.
+ self.notify_thread = threading.Thread(
+ target=self._drain_notify_socket, daemon=True
+ )
+ self.notify_thread.start()
+
journal_thread = threading.Thread(target=self._stream_journal, daemon=True)
journal_thread.start()
diff --git a/nixos/lib/testing/driver.nix b/nixos/lib/testing/driver.nix
index 7a4c7e31a0e1..c15578f4fbfc 100644
--- a/nixos/lib/testing/driver.nix
+++ b/nixos/lib/testing/driver.nix
@@ -20,7 +20,6 @@ let
# the respective qemu version and with or without ocr support
testDriver = config.pythonTestDriverPackage.override {
inherit (config) enableOCR extraPythonPackages;
- qemu_pkg = config.qemu.package;
enableNspawn = config.containers != { };
};
diff --git a/nixos/lib/testing/meta.nix b/nixos/lib/testing/meta.nix
index 1e8f37cf9b51..2194c04f4eda 100644
--- a/nixos/lib/testing/meta.nix
+++ b/nixos/lib/testing/meta.nix
@@ -1,6 +1,20 @@
-{ lib, ... }:
+{ lib, options, ... }:
let
inherit (lib) types mkOption literalMD;
+
+ # Approximate position of meta.teams / meta.maintainers in nixos tests.
+ # Right now this assumes only one such position and ignores other definitions.
+ # FIXME allow having multiple `maintainersPosition` et al..
+ getPosition =
+ definitionsWithLocations:
+ if definitionsWithLocations == [ ] then
+ null
+ else
+ {
+ file = (lib.head definitionsWithLocations).file;
+ column = 0;
+ line = 1;
+ };
in
{
options = {
@@ -12,7 +26,7 @@ in
'';
apply = lib.filterAttrs (k: v: v != null);
type = types.submodule (
- { config, ... }:
+ { options, config, ... }:
{
options = {
maintainers = mkOption {
@@ -22,6 +36,25 @@ in
The [list of maintainers](https://nixos.org/manual/nixpkgs/stable/#var-meta-maintainers) for this test.
'';
};
+ maintainersPosition = mkOption {
+ internal = true;
+ readOnly = true;
+ type = types.nullOr types.attrs;
+ default = getPosition options.maintainers.definitionsWithLocations;
+ };
+ teams = mkOption {
+ type = types.listOf types.raw;
+ default = [ ];
+ description = ''
+ The [list of maintainer-teams](https://nixos.org/manual/nixpkgs/stable/#var-meta-teams) for this test.
+ '';
+ };
+ teamsPosition = mkOption {
+ internal = true;
+ readOnly = true;
+ type = types.nullOr types.attrs;
+ default = getPosition options.teams.definitionsWithLocations;
+ };
timeout = mkOption {
type = types.nullOr types.int;
default = 3600; # 1 hour
diff --git a/nixos/lib/testing/network.nix b/nixos/lib/testing/network.nix
index 570b854d8e28..86d65faf21ad 100644
--- a/nixos/lib/testing/network.nix
+++ b/nixos/lib/testing/network.nix
@@ -135,8 +135,13 @@ let
);
udevRules = map (
interface:
- # MAC Addresses for QEMU network devices are lowercase, and udev string comparison is case-sensitive.
- ''SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="${toLower (qemu-common.qemuNicMac interface.vlan config.virtualisation.test.nodeNumber)}",NAME="${interface.name}"''
+ lib.concatStringsSep ", " [
+ ''SUBSYSTEM=="net"''
+ ''ACTION=="add"''
+ # MAC Addresses for QEMU network devices are lowercase, and udev string comparison is case-sensitive.
+ ''ATTR{address}=="${toLower (qemu-common.qemuNicMac interface.vlan config.virtualisation.test.nodeNumber)}"''
+ ''NAME="${interface.name}"''
+ ]
) interfaces;
in
{
diff --git a/nixos/lib/testing/nodes.nix b/nixos/lib/testing/nodes.nix
index f83f268c88b3..6a90990b1829 100644
--- a/nixos/lib/testing/nodes.nix
+++ b/nixos/lib/testing/nodes.nix
@@ -27,7 +27,6 @@ let
else
let
hostToGuest = {
- "x86_64-darwin" = "x86_64-linux";
"aarch64-darwin" = "aarch64-linux";
};
diff --git a/nixos/modules/config/fonts/fontconfig.nix b/nixos/modules/config/fonts/fontconfig.nix
index 62214cacc101..16b22841ac14 100644
--- a/nixos/modules/config/fonts/fontconfig.nix
+++ b/nixos/modules/config/fonts/fontconfig.nix
@@ -127,6 +127,38 @@ let
'';
+ # user defined font aliases
+ # priority 53
+ aliases =
+ let
+ mkFontBlock =
+ key: fonts:
+ lib.optionalString ((builtins.length fonts) > 0) ''
+ <${key}>
+ ${lib.concatMapStrings (font: "${font}") fonts}
+ ${key}>
+ '';
+
+ mkAliasBlock = family: opts: ''
+
+ ${family}
+ ${mkFontBlock "prefer" opts.prefer}
+ ${mkFontBlock "accept" opts.accept}
+ ${mkFontBlock "default" opts.default}
+
+ '';
+ in
+ pkgs.writeText "fc-53-user-aliases.conf" ''
+
+
+
+
+
+ ${lib.concatStrings (lib.mapAttrsToList mkAliasBlock cfg.aliases)}
+
+
+ '';
+
# bitmap font options
# priority 53
rejectBitmaps = pkgs.writeText "fc-53-no-bitmaps.conf" ''
@@ -245,6 +277,9 @@ let
# 53-no-bitmaps.conf
ln -s ${rejectBitmaps} $dst/53-no-bitmaps.conf
+ # 53-user-aliases.conf
+ ln -s ${aliases} $dst/53-user-aliases.conf
+
${lib.optionalString (!cfg.allowType1) ''
# 53-nixos-reject-type1.conf
ln -s ${rejectType1} $dst/53-nixos-reject-type1.conf
@@ -522,6 +557,69 @@ in
description = "Use embedded bitmaps in fonts like Calibri.";
};
+ aliases = lib.mkOption {
+ type = lib.types.attrsOf (
+ lib.types.submodule {
+ options = {
+ binding = lib.mkOption {
+ type = lib.types.enum [
+ "same"
+ "weak"
+ "strong"
+ ];
+ default = "same";
+ description = ''
+ Binding precedence for this font family. See
+ fontconfig "Font Matching" section for details.
+ '';
+ };
+
+ prefer = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [ ];
+ description = ''
+ Fonts whose glyphs are chosen preferentially prior
+ to fonts which match the alias family.
+ '';
+ };
+
+ accept = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [ ];
+ description = ''
+ Fonts that are chosen if none of the preferred
+ fonts, nor the alias family could provide the
+ desired glyph.
+ '';
+ };
+
+ default = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [ ];
+ description = ''
+ Last chance fallback fonts which are chosen by
+ default if none of the other options could
+ provide the desired glyph.
+ '';
+ };
+ };
+ }
+ );
+ default = { };
+ example = lib.literalExpression ''
+ {
+ # use FreeSans for Greek symbols missing in Helvetica
+ "Helvetica" = {
+ default = [ "FreeSans" ];
+ };
+ };
+ '';
+ description = ''
+ Font aliases that can substitute preferential fonts,
+ or specify custom fallback fonts.
+ '';
+ };
+
};
};
@@ -557,6 +655,9 @@ in
# 52-nixos-default-fonts.conf
r ${defaultFontsConf},
+ # 53-user-aliases.conf
+ r ${aliases},
+
# 53-no-bitmaps.conf
r ${rejectBitmaps},
diff --git a/nixos/modules/config/swap.nix b/nixos/modules/config/swap.nix
index fa09b61ddec0..c99fd3ddf162 100644
--- a/nixos/modules/config/swap.nix
+++ b/nixos/modules/config/swap.nix
@@ -106,6 +106,11 @@ let
description = "Path of the device or swap file.";
};
+ isDevice = mkOption {
+ default = lib.substring 0 5 config.device == "/dev/";
+ internal = true;
+ };
+
label = mkOption {
example = "swap";
type = types.str;
@@ -329,6 +334,7 @@ in
)
} ${sw.device} ${sw.deviceName}
mkswap ${sw.realDevice}
+ ${lib.optionalString sw.isDevice "udevadm trigger ${sw.realDevice}"}
''}
'';
enableStrictShellChecks = true;
diff --git a/nixos/modules/config/sysctl.nix b/nixos/modules/config/sysctl.nix
index df4165fbbec5..05f99aff70f4 100644
--- a/nixos/modules/config/sysctl.nix
+++ b/nixos/modules/config/sysctl.nix
@@ -74,7 +74,9 @@ in
}
(
''
+ set +e
mmap_rnd_bits_max=$(grep "^CONFIG_ARCH_MMAP_RND_BITS_MAX=" $configfile | grep --only-matching "[0-9]*$")
+ set -e
if [[ -z "$mmap_rnd_bits_max" ]]; then
echo "Unable to determine mmap_rnd_bits_max. Check your kernel configfile is valid."
exit 1
@@ -83,7 +85,9 @@ in
''
# HAVE_ARCH_MMAP_RND_COMPAT_BITS is not defined on 32-bit architectures or LoongArch64
+ lib.optionalString (with pkgs.stdenv.hostPlatform; (!is32bit && !isLoongArch64)) ''
+ set +e
mmap_rnd_compat_bits_max=$(grep "^CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=" $configfile | grep --only-matching "[0-9]*$")
+ set -e
if [[ -z "$mmap_rnd_compat_bits_max" ]]; then
echo "Unable to determine mmap_rnd_compat_bits_max. Check your kernel configfile is valid."
exit 1
diff --git a/nixos/modules/config/xdg/autostart.nix b/nixos/modules/config/xdg/autostart.nix
index 8310c377d43b..46c90ae1793a 100644
--- a/nixos/modules/config/xdg/autostart.nix
+++ b/nixos/modules/config/xdg/autostart.nix
@@ -4,21 +4,33 @@
teams = [ lib.teams.freedesktop ];
};
- options = {
- xdg.autostart.enable = lib.mkOption {
- type = lib.types.bool;
- default = true;
- description = ''
- Whether to install files to support the
- [XDG Autostart specification](https://specifications.freedesktop.org/autostart-spec/latest).
- '';
- };
+ options.xdg.autostart = {
+ enable =
+ lib.mkEnableOption "auto-starting of desktop applications according to the [XDG Autostart specification](https://specifications.freedesktop.org/autostart-spec/latest)."
+ // lib.mkOption {
+ default = true;
+ };
+ install =
+ lib.mkEnableOption ''
+ install desktop files following the [XDG Autostart specification](https://specifications.freedesktop.org/autostart-spec/latest) into `/etc/xdg/autostart/`.
+
+ These are handled by your desktop environment or [`systemd-xdg-autostart-generator`](https://www.freedesktop.org/software/systemd/man/latest/systemd-xdg-autostart-generator.html).
+ ''
+ // lib.mkOption {
+ default = true;
+ };
};
- config = lib.mkIf config.xdg.autostart.enable {
- environment.pathsToLink = [
+ config = {
+ # FIXME this does not actually work because "/etc/xdg" is linked
+ # unconditionally in `nixos/modules/config/system-path.nix`
+ environment.pathsToLink = lib.mkIf config.xdg.autostart.install [
"/etc/xdg/autostart"
];
- };
+ # On by default
+ systemd.user.generators.systemd-xdg-autostart-generator = lib.mkIf (!config.xdg.autostart.enable) (
+ lib.mkDefault "/dev/null"
+ );
+ };
}
diff --git a/nixos/modules/config/xdg/portal.nix b/nixos/modules/config/xdg/portal.nix
index 6bc6ce5e33e7..1c240f41c3a7 100644
--- a/nixos/modules/config/xdg/portal.nix
+++ b/nixos/modules/config/xdg/portal.nix
@@ -116,6 +116,8 @@ in
packages = [ pkgs.xdg-desktop-portal ] ++ cfg.extraPortals;
in
mkIf cfg.enable {
+ programs.fuse.enable = true;
+
warnings = lib.optional (cfg.configPackages == [ ] && cfg.config == { }) ''
xdg-desktop-portal 1.17 reworked how portal implementations are loaded, you
should either set `xdg.portal.config` or `xdg.portal.configPackages`
@@ -150,7 +152,6 @@ in
sessionVariables = {
NIXOS_XDG_OPEN_USE_PORTAL = mkIf cfg.xdgOpenUsePortal "1";
- NIX_XDG_DESKTOP_PORTAL_DIR = "/run/current-system/sw/share/xdg-desktop-portal/portals";
};
etc = lib.concatMapAttrs (
diff --git a/nixos/modules/hardware/all-hardware.nix b/nixos/modules/hardware/all-hardware.nix
index b8e364e430d1..8f6ead303c40 100644
--- a/nixos/modules/hardware/all-hardware.nix
+++ b/nixos/modules/hardware/all-hardware.nix
@@ -79,6 +79,7 @@ in
# USB support, especially for booting from USB CD-ROM
# drives.
"uas"
+ "xhci-pci-renesas"
# SD cards.
"sdhci_pci"
@@ -158,9 +159,6 @@ in
"pinctrl-axp209"
"mp8859"
- # USB drivers
- "xhci-pci-renesas"
-
# Reset controllers
"reset-raspberrypi" # Triggers USB chip firmware load.
diff --git a/nixos/modules/hardware/opentabletdriver.nix b/nixos/modules/hardware/opentabletdriver.nix
index aac29cac7f2f..44e28b31b387 100644
--- a/nixos/modules/hardware/opentabletdriver.nix
+++ b/nixos/modules/hardware/opentabletdriver.nix
@@ -61,16 +61,27 @@ in
wantedBy = [ "graphical-session.target" ];
partOf = [ "graphical-session.target" ];
+ unitConfig = {
+ After = "graphical-session.target";
+ ConditionEnvironment = [
+ "|WAYLAND_DISPLAY"
+ "|DISPLAY"
+ ];
+ };
+
serviceConfig = {
Type = "simple";
- # workaround for https://github.com/NixOS/nixpkgs/issues/469340
- ExecStartPre = pkgs.writeShellScript "disable-for-gdm-greeter" ''
- if [[ "$USER" = "gdm-greeter"* ]]; then
+ # workaround for https://github.com/NixOS/nixpkgs/issues/469340 and
+ # https://github.com/OpenTabletDriver/OpenTabletDriver/issues/4885
+ ExecStartPre = pkgs.writeShellScript "poll-for-non-gdm-greeter-display" ''
+ if [[ "$USER" = "gdm-greeter"* \
+ || ( "$${XDG_SESSION_TYPE}" = wayland && -z "$${WAYLAND_DISPLAY}" ) ]]; then
exit 1
fi
'';
ExecStart = lib.getExe' cfg.package "otd-daemon";
Restart = "on-failure";
+ RestartSec = 3;
};
};
};
diff --git a/nixos/modules/i18n/input-method/default.nix b/nixos/modules/i18n/input-method/default.nix
index 4bbc5f59b0bb..42d974b23d95 100644
--- a/nixos/modules/i18n/input-method/default.nix
+++ b/nixos/modules/i18n/input-method/default.nix
@@ -23,11 +23,16 @@ let
allowSubstitutes = false;
buildInputs = [
cfg.package
+ pkgs.gtk2
+ ];
+
+ disallowedReferences = [
+ (lib.getDev pkgs.gtk2)
];
}
''
mkdir -p $out/etc/gtk-2.0/
- GTK_PATH=${cfg.package}/lib/gtk-2.0/ ${pkgs.stdenv.hostPlatform.emulator pkgs.buildPackages} ${lib.getExe' pkgs.gtk2.dev "gtk-query-immodules-2.0"} > $out/etc/gtk-2.0/immodules.cache
+ GTK_PATH=${cfg.package}/lib/gtk-2.0/ ${pkgs.stdenv.hostPlatform.emulator pkgs.buildPackages} gtk-query-immodules-2.0 > $out/etc/gtk-2.0/immodules.cache
'';
gtk3_cache =
@@ -37,11 +42,16 @@ let
allowSubstitutes = false;
buildInputs = [
cfg.package
+ pkgs.gtk3
+ ];
+
+ disallowedReferences = [
+ (lib.getDev pkgs.gtk3)
];
}
''
mkdir -p $out/etc/gtk-3.0/
- GTK_PATH=${cfg.package}/lib/gtk-3.0/ ${pkgs.stdenv.hostPlatform.emulator pkgs.buildPackages} ${lib.getExe' pkgs.gtk3.dev "gtk-query-immodules-3.0"} > $out/etc/gtk-3.0/immodules.cache
+ GTK_PATH=${cfg.package}/lib/gtk-3.0/ ${pkgs.stdenv.hostPlatform.emulator pkgs.buildPackages} gtk-query-immodules-3.0 > $out/etc/gtk-3.0/immodules.cache
'';
in
diff --git a/nixos/modules/i18n/input-method/fcitx5.nix b/nixos/modules/i18n/input-method/fcitx5.nix
index 989e5fbf8239..a4c9c7787eff 100644
--- a/nixos/modules/i18n/input-method/fcitx5.nix
+++ b/nixos/modules/i18n/input-method/fcitx5.nix
@@ -109,7 +109,8 @@ in
(pkgs.writeTextDir "share/fcitx5/data/QuickPhrase.mb" (
lib.concatStringsSep "\n" (
lib.mapAttrsToList (
- name: value: "${name} ${builtins.replaceStrings [ "\\" "\n" ] [ "\\\\" "\\n" ] value}"
+ name: value:
+ "${name} \"${builtins.replaceStrings [ "\\" "\n" "\"" ] [ "\\\\" "\\n" "\\\"" ] value}\""
) cfg.quickPhrase
)
))
diff --git a/nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares.nix b/nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares.nix
index 097a4eca51d5..59e050fe2846 100644
--- a/nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares.nix
+++ b/nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares.nix
@@ -11,6 +11,9 @@ in
{
imports = [ ./installation-cd-graphical-base.nix ];
+ # required for calamares
+ security.polkit.enablePkexecWrapper = true;
+
# required for kpmcore to work correctly
programs.partition-manager.enable = true;
diff --git a/nixos/modules/installer/cd-dvd/sd-image-aarch64-new-kernel.nix b/nixos/modules/installer/cd-dvd/sd-image-aarch64-new-kernel.nix
deleted file mode 100644
index 997423e45257..000000000000
--- a/nixos/modules/installer/cd-dvd/sd-image-aarch64-new-kernel.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{ config, ... }:
-{
- imports = [
- ../sd-card/sd-image-aarch64-new-kernel-installer.nix
- ];
- config = {
- warnings = [
- ''
- .../cd-dvd/sd-image-aarch64-new-kernel.nix is deprecated and will eventually be removed.
- Please switch to .../sd-card/sd-image-aarch64-new-kernel-installer.nix, instead.
- ''
- ];
- };
-}
diff --git a/nixos/modules/installer/cd-dvd/sd-image-aarch64.nix b/nixos/modules/installer/cd-dvd/sd-image-aarch64.nix
deleted file mode 100644
index e7afffb81a5a..000000000000
--- a/nixos/modules/installer/cd-dvd/sd-image-aarch64.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{ config, ... }:
-{
- imports = [
- ../sd-card/sd-image-aarch64-installer.nix
- ];
- config = {
- warnings = [
- ''
- .../cd-dvd/sd-image-aarch64.nix is deprecated and will eventually be removed.
- Please switch to .../sd-card/sd-image-aarch64-installer.nix, instead.
- ''
- ];
- };
-}
diff --git a/nixos/modules/installer/cd-dvd/sd-image-armv7l-multiplatform.nix b/nixos/modules/installer/cd-dvd/sd-image-armv7l-multiplatform.nix
deleted file mode 100644
index c16b82256b4f..000000000000
--- a/nixos/modules/installer/cd-dvd/sd-image-armv7l-multiplatform.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{ config, ... }:
-{
- imports = [
- ../sd-card/sd-image-armv7l-multiplatform-installer.nix
- ];
- config = {
- warnings = [
- ''
- .../cd-dvd/sd-image-armv7l-multiplatform.nix is deprecated and will eventually be removed.
- Please switch to .../sd-card/sd-image-armv7l-multiplatform-installer.nix, instead.
- ''
- ];
- };
-}
diff --git a/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix b/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix
deleted file mode 100644
index b870d3a8b24e..000000000000
--- a/nixos/modules/installer/cd-dvd/sd-image-raspberrypi.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{ config, ... }:
-{
- imports = [
- ../sd-card/sd-image-raspberrypi-installer.nix
- ];
- config = {
- warnings = [
- ''
- .../cd-dvd/sd-image-raspberrypi.nix is deprecated and will eventually be removed.
- Please switch to .../sd-card/sd-image-raspberrypi-installer.nix, instead.
- ''
- ];
- };
-}
diff --git a/nixos/modules/installer/cd-dvd/sd-image.nix b/nixos/modules/installer/cd-dvd/sd-image.nix
deleted file mode 100644
index 8f8efff4d41d..000000000000
--- a/nixos/modules/installer/cd-dvd/sd-image.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{ config, ... }:
-{
- imports = [
- ../sd-card/sd-image.nix
- ];
- config = {
- warnings = [
- ''
- .../cd-dvd/sd-image.nix is deprecated and will eventually be removed.
- Please switch to .../sd-card/sd-image.nix, instead.
- ''
- ];
- };
-}
diff --git a/nixos/modules/installer/sd-card/sd-image-aarch64.nix b/nixos/modules/installer/sd-card/sd-image-aarch64.nix
index 2f6db6ed8abf..107879c188f1 100644
--- a/nixos/modules/installer/sd-card/sd-image-aarch64.nix
+++ b/nixos/modules/installer/sd-card/sd-image-aarch64.nix
@@ -31,17 +31,25 @@
populateFirmwareCommands =
let
configTxt = pkgs.writeText "config.txt" ''
- [pi3]
- kernel=u-boot-rpi3.bin
+ kernel=u-boot.bin
+ # Boot in 64-bit mode.
+ arm_64bit=1
+
+ # U-Boot needs this to work, regardless of whether UART is actually used or not.
+ # Look in arch/arm/mach-bcm283x/Kconfig in the U-Boot tree to see if this is still
+ # a requirement in the future.
+ enable_uart=1
+
+ # Prevent the firmware from smashing the framebuffer setup done by the mainline kernel
+ # when attempting to show low-voltage or overtemperature warnings.
+ avoid_warnings=1
+
+ [pi3]
# Otherwise the serial output will be garbled.
core_freq=250
- [pi02]
- kernel=u-boot-rpi3.bin
-
[pi4]
- kernel=u-boot-rpi4.bin
enable_gic=1
armstub=armstub8-gic.bin
@@ -58,28 +66,24 @@
# (e.g. for USB device mode) or if USB support is not required.
otg_mode=1
- [all]
- # Boot in 64-bit mode.
- arm_64bit=1
+ [cm5]
+ dtoverlay=dwc2,dr_mode=host
- # U-Boot needs this to work, regardless of whether UART is actually used or not.
- # Look in arch/arm/mach-bcm283x/Kconfig in the U-Boot tree to see if this is still
- # a requirement in the future.
- enable_uart=1
-
- # Prevent the firmware from smashing the framebuffer setup done by the mainline kernel
- # when attempting to show low-voltage or overtemperature warnings.
- avoid_warnings=1
+ [pi5]
+ # On some revisions of the RPi5, U-Boot interprets picks up
+ # ghost inputs from the uart, interrupting the boot process.
+ # https://bugzilla.opensuse.org/show_bug.cgi?id=1251192
+ enable_uart=0
'';
in
''
(cd ${pkgs.raspberrypifw}/share/raspberrypi/boot && cp bootcode.bin fixup*.dat start*.elf $NIX_BUILD_TOP/firmware/)
+ cp ${pkgs.ubootRaspberryPiAarch64}/u-boot.bin firmware/u-boot.bin
# Add the config
cp ${configTxt} firmware/config.txt
# Add pi3 specific files
- cp ${pkgs.ubootRaspberryPi3_64bit}/u-boot.bin firmware/u-boot-rpi3.bin
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2710-rpi-2-b.dtb firmware/
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2710-rpi-3-b.dtb firmware/
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2710-rpi-3-b-plus.dtb firmware/
@@ -88,12 +92,20 @@
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2710-rpi-zero-2-w.dtb firmware/
# Add pi4 specific files
- cp ${pkgs.ubootRaspberryPi4_64bit}/u-boot.bin firmware/u-boot-rpi4.bin
cp ${pkgs.raspberrypi-armstubs}/armstub8-gic.bin firmware/armstub8-gic.bin
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-4-b.dtb firmware/
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-400.dtb firmware/
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-cm4.dtb firmware/
cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-cm4s.dtb firmware/
+
+ # Add pi5 specific files
+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2712-d-rpi-5-b.dtb firmware/
+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2712-rpi-5-b.dtb firmware/
+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2712-rpi-500.dtb firmware/
+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2712-rpi-cm5-cm4io.dtb firmware/
+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2712-rpi-cm5-cm5io.dtb firmware/
+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2712-rpi-cm5l-cm4io.dtb firmware/
+ cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2712-rpi-cm5l-cm5io.dtb firmware/
'';
populateRootCommands = ''
mkdir -p ./files/boot
diff --git a/nixos/modules/installer/tools/nix-fallback-paths.nix b/nixos/modules/installer/tools/nix-fallback-paths.nix
index d64afef1e1f8..b9b8307c3ed1 100644
--- a/nixos/modules/installer/tools/nix-fallback-paths.nix
+++ b/nixos/modules/installer/tools/nix-fallback-paths.nix
@@ -1,8 +1,8 @@
{
- x86_64-linux = "/nix/store/6qpfa1c19q4idpjij6s6yywkfvhp820s-nix-2.34.7";
- i686-linux = "/nix/store/npdbf892fhicd1pw8flpywzbvhcdx469-nix-2.34.7";
- aarch64-linux = "/nix/store/5i60qiqjx9bjkcy31fwvnx28ijljlbs3-nix-2.34.7";
- riscv64-linux = "/nix/store/xvl2f539v978jwflp2d9r7znk35br00i-nix-riscv64-unknown-linux-gnu-2.34.7";
- x86_64-darwin = "/nix/store/j9rh0z3zy9rq00lz9ckcsa1g1hn35cyw-nix-2.34.7";
- aarch64-darwin = "/nix/store/yxgyagiaffxkbrff4d7mrg718wdj3llj-nix-2.34.7";
+ x86_64-linux = "/nix/store/09hmdfh1i61532nvhi1p1f37l9hjl6z7-nix-2.34.8";
+ i686-linux = "/nix/store/5f24f8nk8wnm6fimnx36cl1yhv0i3pli-nix-2.34.8";
+ aarch64-linux = "/nix/store/61m1ki4yy2b9gybx42p6czw8irmj7p5i-nix-2.34.8";
+ riscv64-linux = "/nix/store/gf1ja21cvli7zl978a8bm0ixl5k69kgg-nix-riscv64-unknown-linux-gnu-2.34.8";
+ x86_64-darwin = "/nix/store/kcnnz1r3sgp0bdpf3vjwqgqmk2m02rn8-nix-2.34.8";
+ aarch64-darwin = "/nix/store/bfh32jcac5an863033jknr92qg729wl0-nix-2.34.8";
}
diff --git a/nixos/modules/installer/tools/nixos-generate-config.pl b/nixos/modules/installer/tools/nixos-generate-config.pl
index 3d0f4a9f7d86..96d0d68e5c93 100644
--- a/nixos/modules/installer/tools/nixos-generate-config.pl
+++ b/nixos/modules/installer/tools/nixos-generate-config.pl
@@ -505,7 +505,7 @@ EOF
# This should work for single and multi-device systems.
# still needs subvolume support
if ($fsType eq "bcachefs") {
- my ($status, @info) = runCommand("bcachefs fs usage $rootDir$mountPoint");
+ my ($status, @info) = runCommand("@bcachefs@ fs usage $rootDir$mountPoint");
my $UUID = $info[0];
if ($status == 0 && $UUID =~ /^Filesystem:[ \t\n]*([0-9a-z-]+)/) {
diff --git a/nixos/modules/installer/tools/tools.nix b/nixos/modules/installer/tools/tools.nix
index 8fd268ee0d2d..da2e3288936d 100644
--- a/nixos/modules/installer/tools/tools.nix
+++ b/nixos/modules/installer/tools/tools.nix
@@ -30,15 +30,20 @@ let
name = "nixos-generate-config";
src = ./nixos-generate-config.pl;
replacements = {
- perl = "${
+ perl = lib.getExe (
pkgs.perl.withPackages (p: [
p.FileSlurp
p.ConfigIniFiles
])
- }/bin/perl";
+ );
hostPlatformSystem = pkgs.stdenv.hostPlatform.system;
- detectvirt = "${config.systemd.package}/bin/systemd-detect-virt";
- btrfs = "${pkgs.btrfs-progs}/bin/btrfs";
+ detectvirt = lib.getExe' config.systemd.package "systemd-detect-virt";
+ bcachefs =
+ if pkgs.bcachefs-tools.meta.broken then
+ lib.getExe' pkgs.coreutils "false"
+ else
+ lib.getExe pkgs.bcachefs-tools;
+ btrfs = lib.getExe pkgs.btrfs-progs;
inherit (config.system.nixos-generate-config) configuration desktopConfiguration flake;
xserverEnabled = config.services.xserver.enable;
};
@@ -330,7 +335,7 @@ in
'';
config = lib.mkIf config.system.tools.nixos-rebuild.enableRun0Elevation {
- security.polkit.enable = lib.mkDefault true;
+ security.run0.enable = lib.mkDefault true;
environment.systemPackages = [ pkgs.polkit-stdin-agent ];
};
}
diff --git a/nixos/modules/misc/documentation/modular-services.nix b/nixos/modules/misc/documentation/modular-services.nix
index edc60d3bb592..102fa396a758 100644
--- a/nixos/modules/misc/documentation/modular-services.nix
+++ b/nixos/modules/misc/documentation/modular-services.nix
@@ -19,6 +19,10 @@ let
modularServicesModule = {
options = {
+ "" =
+ fakeSubmodule pkgs.autopush-rs.services.autoconnect;
+ "" =
+ fakeSubmodule pkgs.autopush-rs.services.autoendpoint;
"" = fakeSubmodule pkgs.ghostunnel.services.default;
"" = fakeSubmodule pkgs.ktls-utils.services.default;
"" = fakeSubmodule pkgs.php.services.default;
diff --git a/nixos/modules/misc/locate.nix b/nixos/modules/misc/locate.nix
index 1affb234e418..f12ca95d6ea0 100644
--- a/nixos/modules/misc/locate.nix
+++ b/nixos/modules/misc/locate.nix
@@ -1,6 +1,7 @@
{
config,
lib,
+ utils,
pkgs,
...
}:
@@ -59,7 +60,7 @@ in
};
output = lib.mkOption {
- type = lib.types.path;
+ type = lib.types.externalPath;
default = "/var/cache/locatedb";
description = ''
The database file to build.
@@ -249,27 +250,35 @@ in
systemd.services.update-locatedb = {
description = "Update Locate Database";
- # mlocate's updatedb takes flags via a configuration file or
- # on the command line, but not by environment variable.
- script =
- let
- toFlags =
- x: lib.optional (cfg.${x} != [ ]) "--${lib.toLower x} '${lib.concatStringsSep " " cfg.${x}}'";
- args = lib.concatLists (
- map toFlags [
+ serviceConfig = {
+ # mlocate's updatedb takes flags via a configuration file or
+ # on the command line, but not by environment variable.
+ ExecStart =
+ let
+ toFlags =
+ x:
+ lib.optionals (cfg.${x} != [ ]) [
+ "--${lib.toLower x}"
+ (lib.concatStringsSep " " cfg.${x})
+ ];
+ args = lib.concatMap toFlags [
"pruneFS"
"pruneNames"
"prunePaths"
+ ];
+ in
+ utils.escapeSystemdExecArgs (
+ [
+ (lib.getExe' cfg.package "updatedb")
+ "--output"
+ cfg.output
+ "--prune-bind-mounts"
+ (lib.boolToYesNo cfg.pruneBindMounts)
]
+ ++ args
+ ++ cfg.extraFlags
);
- in
- ''
- exec ${cfg.package}/bin/updatedb \
- --output ${toString cfg.output} ${lib.concatStringsSep " " args} \
- --prune-bind-mounts ${lib.boolToYesNo cfg.pruneBindMounts} \
- ${lib.concatStringsSep " " cfg.extraFlags}
- '';
- serviceConfig = {
+
CapabilityBoundingSet = "CAP_DAC_READ_SEARCH CAP_CHOWN";
Nice = 19;
IOSchedulingClass = "idle";
diff --git a/nixos/modules/misc/nixpkgs/test.nix b/nixos/modules/misc/nixpkgs/test.nix
index 1d4eff6a72cd..96c461cf795b 100644
--- a/nixos/modules/misc/nixpkgs/test.nix
+++ b/nixos/modules/misc/nixpkgs/test.nix
@@ -36,7 +36,7 @@ let
nixpkgs.hostPlatform = "aarch64-linux";
nixpkgs.buildPlatform = "aarch64-darwin";
nixpkgs.system = "x86_64-linux";
- nixpkgs.localSystem.system = "x86_64-darwin";
+ nixpkgs.localSystem.system = "x86_64-freebsd";
nixpkgs.crossSystem.system = "i686-linux";
imports = [
{
diff --git a/nixos/modules/misc/version.nix b/nixos/modules/misc/version.nix
index c563ce901dca..898c0326cf0b 100644
--- a/nixos/modules/misc/version.nix
+++ b/nixos/modules/misc/version.nix
@@ -54,7 +54,8 @@ let
BUG_REPORT_URL = optionalString isNixos "https://github.com/NixOS/nixpkgs/issues";
ANSI_COLOR = optionalString isNixos "0;38;2;126;186;228";
IMAGE_ID = optionalString (config.system.image.id != null) config.system.image.id;
- IMAGE_VERSION = optionalString (config.system.image.version != null) config.system.image.version;
+ ${if config.system.image.version != null then "IMAGE_VERSION" else null} =
+ config.system.image.version;
VARIANT = optionalString (cfg.variantName != null) cfg.variantName;
VARIANT_ID = optionalString (cfg.variant_id != null) cfg.variant_id;
DEFAULT_HOSTNAME = config.system.nixos.distroId;
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index a96e30cac837..de6172266d5e 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -193,6 +193,7 @@
./programs/chrysalis.nix
./programs/clash-verge.nix
./programs/cnping.nix
+ ./programs/comma.nix
./programs/command-not-found/command-not-found.nix
./programs/coolercontrol.nix
./programs/corefreq.nix
@@ -267,6 +268,7 @@
./programs/mininet.nix
./programs/minipro.nix
./programs/miriway.nix
+ ./programs/moonlight-qt.nix
./programs/mosh.nix
./programs/mouse-actions.nix
./programs/msmtp.nix
@@ -294,6 +296,7 @@
./programs/opengamepadui.nix
./programs/openvpn3.nix
./programs/partition-manager.nix
+ ./programs/passless.nix
./programs/pay-respects.nix
./programs/plotinus.nix
./programs/pmount.nix
@@ -328,6 +331,7 @@
./programs/sysdig.nix
./programs/system-config-printer.nix
./programs/systemtap.nix
+ ./programs/tack.nix
./programs/tcpdump.nix
./programs/television.nix
./programs/throne.nix
@@ -354,6 +358,7 @@
./programs/wayland/mangowc.nix
./programs/wayland/miracle-wm.nix
./programs/wayland/niri.nix
+ ./programs/wayland/pinnacle.nix
./programs/wayland/river.nix
./programs/wayland/sway.nix
./programs/wayland/uwsm.nix
@@ -387,6 +392,7 @@
./programs/zsh/zsh-syntax-highlighting.nix
./programs/zsh/zsh.nix
./rename.nix
+ ./security/account-utils.nix
./security/acme
./security/agnos.nix
./security/apparmor.nix
@@ -428,7 +434,6 @@
./services/amqp/activemq/default.nix
./services/amqp/rabbitmq.nix
./services/audio/alsa.nix
- ./services/audio/botamusique.nix
./services/audio/gmediarender.nix
./services/audio/gonic.nix
./services/audio/goxlr-utility.nix
@@ -558,6 +563,7 @@
./services/databases/victoriametrics.nix
./services/databases/victoriatraces.nix
./services/desktops/accountsservice.nix
+ ./services/desktops/adw-bluetooth.nix
./services/desktops/ayatana-indicators.nix
./services/desktops/bamf.nix
./services/desktops/blueman.nix
@@ -590,6 +596,7 @@
./services/desktops/linyaps.nix
./services/desktops/malcontent.nix
./services/desktops/neard.nix
+ ./services/desktops/oo7.nix
./services/desktops/pipewire/pipewire.nix
./services/desktops/pipewire/wireplumber.nix
./services/desktops/playerctld.nix
@@ -725,6 +732,7 @@
./services/hardware/usbmuxd.nix
./services/hardware/usbrelayd.nix
./services/hardware/vdr.nix
+ ./services/hardware/watt.nix
./services/home-automation/deye-dummycloud.nix
./services/home-automation/ebusd.nix
./services/home-automation/esphome.nix
@@ -798,7 +806,6 @@
./services/mail/sympa.nix
./services/mail/tlsrpt.nix
./services/mail/zeyple.nix
- ./services/matrix/appservice-discord.nix
./services/matrix/appservice-irc.nix
./services/matrix/conduit.nix
./services/matrix/continuwuity.nix
@@ -808,6 +815,7 @@
./services/matrix/hookshot.nix
./services/matrix/lk-jwt-service.nix
./services/matrix/matrix-alertmanager.nix
+ ./services/matrix/matrix-authentication-service.nix
./services/matrix/maubot.nix
./services/matrix/mautrix-discord.nix
./services/matrix/mautrix-meta.nix
@@ -816,6 +824,7 @@
./services/matrix/mautrix-whatsapp.nix
./services/matrix/mjolnir.nix
./services/matrix/pantalaimon.nix
+ ./services/matrix/rust-federation-tester.nix
./services/matrix/synapse-auto-compressor.nix
./services/matrix/synapse.nix
./services/matrix/tuwunel.nix
@@ -838,6 +847,7 @@
./services/misc/blenderfarm.nix
./services/misc/calibre-server.nix
./services/misc/canto-daemon.nix
+ ./services/misc/castsponsorskip.nix
./services/misc/cfdyndns.nix
./services/misc/cgminer.nix
./services/misc/clipcat.nix
@@ -977,6 +987,7 @@
./services/misc/spice-webdavd.nix
./services/misc/spoolman.nix
./services/misc/sssd.nix
+ ./services/misc/stash-clipboard.nix
./services/misc/subsonic.nix
./services/misc/sundtek.nix
./services/misc/svnserve.nix
@@ -996,6 +1007,7 @@
./services/misc/tuxclocker.nix
./services/misc/tzupdate.nix
./services/misc/uhub.nix
+ ./services/misc/unpackerr.nix
./services/misc/wastebin.nix
./services/misc/weechat.nix
./services/misc/workout-tracker.nix
@@ -1052,6 +1064,7 @@
./services/monitoring/nagios.nix
./services/monitoring/netdata.nix
./services/monitoring/nezha-agent.nix
+ ./services/monitoring/nezha.nix
./services/monitoring/ocsinventory-agent.nix
./services/monitoring/opentelemetry-collector.nix
./services/monitoring/osquery.nix
@@ -1331,6 +1344,7 @@
./services/networking/nncp.nix
./services/networking/nntp-proxy.nix
./services/networking/nomad.nix
+ ./services/networking/nordvpn.nix
./services/networking/nsd.nix
./services/networking/ntopng.nix
./services/networking/ntp/chrony.nix
@@ -1423,6 +1437,7 @@
./services/networking/tailscale-derper.nix
./services/networking/tailscale-serve.nix
./services/networking/tailscale.nix
+ ./services/networking/tap.nix
./services/networking/tayga.nix
./services/networking/tcpcrypt.nix
./services/networking/teamspeak3.nix
@@ -1486,6 +1501,7 @@
./services/scheduling/atd.nix
./services/scheduling/cron.nix
./services/scheduling/fcron.nix
+ ./services/scheduling/gocron.nix
./services/scheduling/prefect.nix
./services/scheduling/scx-loader.nix
./services/scheduling/scx.nix
@@ -1658,10 +1674,12 @@
./services/web-apps/firefly-iii.nix
./services/web-apps/flarum.nix
./services/web-apps/fluidd.nix
+ ./services/web-apps/freescout.nix
./services/web-apps/freshrss.nix
./services/web-apps/froide-govplan.nix
./services/web-apps/galene.nix
./services/web-apps/gancio.nix
+ ./services/web-apps/geoserver.nix
./services/web-apps/gerrit.nix
./services/web-apps/glance.nix
./services/web-apps/glitchtip.nix
@@ -1700,6 +1718,7 @@
./services/web-apps/kavita.nix
./services/web-apps/keycloak.nix
./services/web-apps/kimai.nix
+ ./services/web-apps/koito.nix
./services/web-apps/komga.nix
./services/web-apps/lanraragi.nix
./services/web-apps/lasuite-docs.nix
@@ -1795,6 +1814,7 @@
./services/web-apps/stirling-pdf.nix
./services/web-apps/strfry.nix
./services/web-apps/strichliste.nix
+ ./services/web-apps/stump.nix
./services/web-apps/suwayomi-server.nix
./services/web-apps/szurubooru.nix
./services/web-apps/tabbyapi.nix
@@ -1805,6 +1825,7 @@
./services/web-apps/umami.nix
./services/web-apps/vikunja.nix
./services/web-apps/wakapi.nix
+ ./services/web-apps/wealthfolio.nix
./services/web-apps/weblate.nix
./services/web-apps/websurfx.nix
./services/web-apps/whitebophir.nix
@@ -1837,10 +1858,10 @@
./services/web-servers/minio.nix
./services/web-servers/molly-brown.nix
./services/web-servers/nginx/default.nix
- ./services/web-servers/nginx/gitweb.nix
./services/web-servers/nginx/tailscale-auth.nix
./services/web-servers/phpfpm/default.nix
./services/web-servers/pomerium.nix
+ ./services/web-servers/rustfs.nix
./services/web-servers/rustus.nix
./services/web-servers/send.nix
./services/web-servers/stargazer.nix
@@ -1908,6 +1929,7 @@
./system/boot/clevis-luks-askpass.nix
./system/boot/clevis.nix
./system/boot/emergency-mode.nix
+ ./system/boot/extra-initrd.nix
./system/boot/grow-partition.nix
./system/boot/initrd-network.nix
./system/boot/initrd-openvpn.nix
@@ -1961,6 +1983,7 @@
./system/boot/systemd/userdbd.nix
./system/boot/timesyncd.nix
./system/boot/tmp.nix
+ ./system/boot/tzpfms.nix
./system/boot/uki.nix
./system/boot/unl0kr.nix
./system/boot/uvesafb.nix
diff --git a/nixos/modules/profiles/bashless.nix b/nixos/modules/profiles/bashless.nix
index 501563b97b3d..20f2f7256f07 100644
--- a/nixos/modules/profiles/bashless.nix
+++ b/nixos/modules/profiles/bashless.nix
@@ -15,8 +15,6 @@
environment.corePackages = lib.mkForce [ ];
# Contains bash completions
nix.enable = lib.mkDefault false;
- # The fuse{,3} package contains a runtime dependency on bash.
- programs.fuse.enable = lib.mkDefault false;
documentation.man.man-db.enable = lib.mkDefault false;
# autovt depends on bash
console.enable = lib.mkDefault false;
diff --git a/nixos/modules/programs/appimage.nix b/nixos/modules/programs/appimage.nix
index c0379557c97a..4662a6c3d8cc 100644
--- a/nixos/modules/programs/appimage.nix
+++ b/nixos/modules/programs/appimage.nix
@@ -43,6 +43,8 @@ in
}
);
environment.systemPackages = [ cfg.package ];
+
+ programs.fuse.enable = true;
};
meta.maintainers = with lib.maintainers; [
diff --git a/nixos/modules/programs/bat.nix b/nixos/modules/programs/bat.nix
index cbe6ac48e909..3ebc0424a3fd 100644
--- a/nixos/modules/programs/bat.nix
+++ b/nixos/modules/programs/bat.nix
@@ -8,6 +8,7 @@ let
inherit (builtins) isList;
inherit (lib)
concatMapStrings
+ escapeShellArg
literalExpression
maintainers
mapAttrs'
@@ -34,7 +35,7 @@ let
else if isBool value then
boolToString value
else
- toString value;
+ escapeShellArg (toString value);
in
{
options.programs.bat = {
diff --git a/nixos/modules/programs/captive-browser.nix b/nixos/modules/programs/captive-browser.nix
index 368994e8829f..95c5c37e92be 100644
--- a/nixos/modules/programs/captive-browser.nix
+++ b/nixos/modules/programs/captive-browser.nix
@@ -21,8 +21,6 @@ let
types
;
- requiresSetcapWrapper = config.boot.kernelPackages.kernelOlder "5.7" && cfg.bindInterface;
-
browserDefault =
chromium:
concatStringsSep " " [
@@ -30,11 +28,20 @@ let
"${chromium}/bin/chromium"
"--user-data-dir=\${XDG_DATA_HOME:-$HOME/.local/share}/chromium-captive"
''--proxy-server="socks5://$PROXY"''
- ''--host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE localhost"''
+ ''--proxy-bypass-list="<-loopback>"''
"--no-first-run"
"--new-window"
"--incognito"
"-no-default-browser-check"
+ "--no-crash-upload"
+ "--disable-extensions"
+ "--disable-sync"
+ "--disable-background-networking"
+ "--disable-client-side-phishing-detection"
+ "--disable-component-update"
+ "--disable-translate"
+ "--disable-web-resources"
+ "--safebrowsing-disable-auto-update"
"http://cache.nixos.org/"
];
@@ -144,12 +151,5 @@ in
else
throw "programs.captive-browser.dhcp-dns must be set"
);
-
- security.wrappers.captive-browser = mkIf requiresSetcapWrapper {
- owner = "root";
- group = "root";
- capabilities = "cap_net_raw+p";
- source = "${captive-browser-configured}/bin/captive-browser";
- };
};
}
diff --git a/nixos/modules/programs/clash-verge.nix b/nixos/modules/programs/clash-verge.nix
index b54643679279..511599efc9ac 100644
--- a/nixos/modules/programs/clash-verge.nix
+++ b/nixos/modules/programs/clash-verge.nix
@@ -21,7 +21,15 @@
defaultText = lib.literalExpression "pkgs.clash-verge-rev";
};
serviceMode = lib.mkEnableOption "Service Mode";
- tunMode = lib.mkEnableOption "Setcap for TUN Mode. DNS settings won't work on this way";
+ tunMode = lib.mkEnableOption "" // {
+ description = ''
+ Whether to set the capabilities required for TUN mode.
+
+ Without these capabilities, Clash Verge's DNS settings will not work in TUN mode.
+
+ When enabled, reverse path filtering will be set to loose instead of strict.
+ '';
+ };
autoStart = lib.mkEnableOption "Clash Verge auto launch";
group = lib.mkOption {
type = lib.types.str;
@@ -59,6 +67,22 @@
source = "${lib.getExe cfg.package}";
};
+ assertions = [
+ {
+ assertion =
+ cfg.tunMode
+ ->
+ config.networking.firewall.checkReversePath != true
+ && config.networking.firewall.checkReversePath != "strict";
+ message = ''
+ {option}`programs.clash-verge.tunMode` requires {option}`networking.firewall.checkReversePath`
+ to be set to `false` or `"loose"`.
+ '';
+ }
+ ];
+
+ networking.firewall.checkReversePath = lib.mkIf cfg.tunMode (lib.mkDefault "loose");
+
systemd.services.clash-verge = lib.mkIf cfg.serviceMode {
enable = true;
description = "Clash Verge Service Mode";
diff --git a/nixos/modules/programs/comma.nix b/nixos/modules/programs/comma.nix
new file mode 100644
index 000000000000..89fa20fd4812
--- /dev/null
+++ b/nixos/modules/programs/comma.nix
@@ -0,0 +1,52 @@
+{
+ lib,
+ config,
+ pkgs,
+ ...
+}:
+
+let
+ cfg = config.programs.comma;
+in
+{
+ options.programs.comma = {
+ enable = lib.mkEnableOption "comma";
+ package = lib.mkPackageOption pkgs "comma" { };
+ enableBashIntegration = lib.mkEnableOption "comma command-not-found handler for bash" // {
+ default = true;
+ };
+ enableZshIntegration = lib.mkEnableOption "comma command-not-found handler for zsh" // {
+ default = true;
+ };
+ enableFishIntegration = lib.mkEnableOption "comma command-not-found handler for fish" // {
+ default = true;
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ environment.systemPackages = [ cfg.package ];
+ programs = {
+ bash.interactiveShellInit = lib.mkIf cfg.enableBashIntegration ''
+ source ${cfg.package}/share/comma/command-not-found.sh
+ '';
+ zsh.interactiveShellInit = lib.mkIf cfg.enableZshIntegration ''
+ source ${cfg.package}/share/comma/command-not-found.sh
+ '';
+ fish.interactiveShellInit = ''
+ source ${cfg.package}/share/comma/command-not-found.fish
+ '';
+
+ # Disable *other* command-not-found handlers
+ command-not-found.enable = lib.mkIf (
+ cfg.enableBashIntegration || cfg.enableZshIntegration || cfg.enableFishIntegration
+ ) (lib.mkDefault false);
+ nix-index = {
+ enableBashIntegration = lib.mkIf (cfg.enableBashIntegration) (lib.mkDefault false);
+ enableZshIntegration = lib.mkIf (cfg.enableZshIntegration) (lib.mkDefault false);
+ enableFishIntegration = lib.mkIf (cfg.enableFishIntegration) (lib.mkDefault false);
+ };
+ };
+ };
+
+ meta.maintainers = with lib.maintainers; [ pandapip1 ];
+}
diff --git a/nixos/modules/programs/corefreq.nix b/nixos/modules/programs/corefreq.nix
index c656b4a13da1..b062ca22aa5e 100644
--- a/nixos/modules/programs/corefreq.nix
+++ b/nixos/modules/programs/corefreq.nix
@@ -12,7 +12,7 @@ in
{
options = {
programs.corefreq = {
- enable = lib.mkEnableOption "Whether to enable the corefreq daemon and kernel module";
+ enable = lib.mkEnableOption "the corefreq daemon and kernel module";
package = lib.mkOption {
type = lib.types.package;
diff --git a/nixos/modules/programs/firefox.nix b/nixos/modules/programs/firefox.nix
index 180e61231b07..243231e51470 100644
--- a/nixos/modules/programs/firefox.nix
+++ b/nixos/modules/programs/firefox.nix
@@ -327,7 +327,6 @@ in
};
meta.maintainers = with lib.maintainers; [
- danth
linsui
];
}
diff --git a/nixos/modules/programs/fish.nix b/nixos/modules/programs/fish.nix
index 86c29477ebcc..734d19bdc92d 100644
--- a/nixos/modules/programs/fish.nix
+++ b/nixos/modules/programs/fish.nix
@@ -262,22 +262,17 @@ in
(lib.mkIf cfg.generateCompletions {
etc."fish/generated_completions".source =
let
- patchedGenerator = pkgs.stdenv.mkDerivation {
- name = "fish_patched-completion-generator";
- srcs = [
- "${cfg.package}/share/fish/tools/create_manpage_completions.py"
- ];
- unpackCmd = "cp $curSrc $(basename $curSrc)";
- sourceRoot = ".";
- patches = [ ./fish_completion-generator.patch ]; # to prevent collisions of identical completion files
- dontBuild = true;
- installPhase = ''
- mkdir -p $out
- cp * $out/
- '';
- preferLocalBuild = true;
- allowSubstitutes = false;
- };
+ # fish embeds the generator script in the binary, so extract it.
+ generator =
+ pkgs.runCommandLocal "fish_completion-generator"
+ {
+ nativeBuildInputs = [ cfg.package ];
+ }
+ ''
+ mkdir -p $out
+ fish --no-config -c 'status get-file tools/create_manpage_completions.py' \
+ > $out/create_manpage_completions.py
+ '';
generateCompletions =
package:
pkgs.runCommandLocal
@@ -298,8 +293,25 @@ in
''
mkdir -p $out
if [ -d $package/share/man ]; then
- find -L $package/share/man -type f | xargs ${pkgs.python3.pythonOnBuildForHost.interpreter} ${patchedGenerator}/create_manpage_completions.py --directory $out >/dev/null
+ find -L $package/share/man -type f -print0 \
+ | xargs -0 ${pkgs.python3.pythonOnBuildForHost.interpreter} \
+ ${generator}/create_manpage_completions.py --directory $out \
+ >/dev/null
fi
+
+ # The generator emits a header comment containing the man page store
+ # path. Strip it so identical completions from different packages
+ # don't collide and so we don't retain runtime references to the
+ # inputs. Fail if generated files lack the expected header so that a
+ # change in the upstream format gets noticed.
+ shopt -s nullglob
+ for f in $out/*.fish; do
+ if ! grep -q '^# Autogenerated from ' "$f"; then
+ echo "error: expected '# Autogenerated from' header not found in $f" >&2
+ exit 1
+ fi
+ sed -i '/^# Autogenerated from /d' "$f"
+ done
'';
packages =
if
diff --git a/nixos/modules/programs/fish_completion-generator.patch b/nixos/modules/programs/fish_completion-generator.patch
deleted file mode 100644
index fa207e484c99..000000000000
--- a/nixos/modules/programs/fish_completion-generator.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/create_manpage_completions.py
-+++ b/create_manpage_completions.py
-@@ -879,10 +879,6 @@ def parse_manpage_at_path(manpage_path, output_directory):
- )
- return False
-
-- # Output the magic word Autogenerated so we can tell if we can overwrite this
-- built_command_output.insert(
-- 0, "# " + CMDNAME + "\n# Autogenerated from man page " + manpage_path
-- )
- # built_command_output.insert(2, "# using " + parser.__class__.__name__) # XXX MISATTRIBUTES THE CULPABLE PARSER! Was really using Type2 but reporting TypeDeroffManParser
-
- for line in built_command_output:
-
diff --git a/nixos/modules/programs/foot/bashrc b/nixos/modules/programs/foot/bashrc
index e35bc29f117b..d3fb0ffcb4bf 100644
--- a/nixos/modules/programs/foot/bashrc
+++ b/nixos/modules/programs/foot/bashrc
@@ -1,3 +1,8 @@
+case "$TERM" in
+ foot*) : ;;
+ *) return 0 ;;
+esac
+
osc7_cwd() {
local strlen=${#PWD}
local encoded=""
diff --git a/nixos/modules/programs/foot/config.fish b/nixos/modules/programs/foot/config.fish
index c7d45211327f..92f614421268 100644
--- a/nixos/modules/programs/foot/config.fish
+++ b/nixos/modules/programs/foot/config.fish
@@ -1,3 +1,7 @@
+if ! string match -q "foot*" "$TERM"
+ return 0
+end
+
function update_cwd_osc --on-variable PWD --description 'Notify terminals when $PWD changes'
if status --is-command-substitution || set -q INSIDE_EMACS
return
diff --git a/nixos/modules/programs/foot/zshrc b/nixos/modules/programs/foot/zshrc
index 186f21c987e5..935dd49aaed5 100644
--- a/nixos/modules/programs/foot/zshrc
+++ b/nixos/modules/programs/foot/zshrc
@@ -1,3 +1,8 @@
+case "$TERM" in
+ foot*) : ;;
+ *) return 0 ;;
+esac
+
function osc7-pwd() {
emulate -L zsh # also sets localoptions for us
setopt extendedglob
diff --git a/nixos/modules/programs/fuse.nix b/nixos/modules/programs/fuse.nix
index e7e317d7ef9b..07026cbd33db 100644
--- a/nixos/modules/programs/fuse.nix
+++ b/nixos/modules/programs/fuse.nix
@@ -12,9 +12,7 @@ in
meta.maintainers = [ ];
options.programs.fuse = {
- enable = lib.mkEnableOption "fuse" // {
- default = true;
- };
+ enable = lib.mkEnableOption "fuse";
mountMax = lib.mkOption {
# In the C code it's an "int" (i.e. signed and at least 16 bit), but
diff --git a/nixos/modules/programs/gamemode.nix b/nixos/modules/programs/gamemode.nix
index 834ae6f54a1d..3e568f9a68aa 100644
--- a/nixos/modules/programs/gamemode.nix
+++ b/nixos/modules/programs/gamemode.nix
@@ -60,7 +60,10 @@ in
};
security = {
- polkit.enable = true;
+ polkit = {
+ enable = true;
+ enablePkexecWrapper = lib.mkDefault true;
+ };
wrappers = lib.mkIf cfg.enableRenice {
gamemoded = {
owner = "root";
diff --git a/nixos/modules/programs/immersed.nix b/nixos/modules/programs/immersed.nix
index 0fb217b91d54..7c7b8d13592d 100644
--- a/nixos/modules/programs/immersed.nix
+++ b/nixos/modules/programs/immersed.nix
@@ -26,6 +26,12 @@ in
programs.immersed = {
enable = lib.mkEnableOption "immersed";
+ openFirewall = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = "Whether to open firewall ports for Immersed";
+ };
+
package = lib.mkPackageOption pkgs "immersed" { };
};
};
@@ -43,6 +49,15 @@ in
};
environment.systemPackages = [ cfg.package ];
+
+ # https://immersed.helpscoutdocs.com/article/23-connection-troubleshooting-linux
+ networking.firewall = lib.mkIf cfg.openFirewall {
+ allowedTCPPorts = [ 21000 ];
+ allowedUDPPorts = [
+ 21000
+ 21010
+ ];
+ };
};
meta.maintainers = pkgs.immersed.meta.maintainers;
diff --git a/nixos/modules/programs/moonlight-qt.nix b/nixos/modules/programs/moonlight-qt.nix
new file mode 100644
index 000000000000..e836869f2661
--- /dev/null
+++ b/nixos/modules/programs/moonlight-qt.nix
@@ -0,0 +1,39 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+
+let
+ cfg = config.programs.moonlight-qt;
+in
+{
+ options.programs.moonlight-qt = {
+ enable = lib.mkEnableOption "Moonlight Qt, a client for playing your PC games on almost any device";
+
+ package = lib.mkPackageOption pkgs "moonlight-qt" { };
+
+ capSysNice = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Add the CAP_SYS_NICE capability to Moonlight Qt so that it may raise
+ its scheduling priority.
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ environment.systemPackages = [ cfg.package ];
+
+ security.wrappers.moonlight = lib.mkIf cfg.capSysNice {
+ owner = "root";
+ group = "root";
+ source = lib.getExe cfg.package;
+ capabilities = "cap_sys_nice+ep";
+ };
+ };
+
+ meta.maintainers = with lib.maintainers; [ aaravrav ];
+}
diff --git a/nixos/modules/programs/mouse-actions.nix b/nixos/modules/programs/mouse-actions.nix
index 3022a1059b1f..625c30308c37 100644
--- a/nixos/modules/programs/mouse-actions.nix
+++ b/nixos/modules/programs/mouse-actions.nix
@@ -17,9 +17,7 @@ in
Note that only users in the "uinput" group will be able to use the package
'';
};
- package = lib.mkPackageOption pkgs "mouse-actions" {
- example = "mouse-actions-gui";
- };
+ package = lib.mkPackageOption pkgs "mouse-actions" { };
autorun = lib.mkOption {
type = lib.types.bool;
default = false;
diff --git a/nixos/modules/programs/passless.nix b/nixos/modules/programs/passless.nix
new file mode 100644
index 000000000000..b25b2bd3d15d
--- /dev/null
+++ b/nixos/modules/programs/passless.nix
@@ -0,0 +1,134 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.programs.passless;
+ settingsFormat = pkgs.formats.toml { };
+ settingsFile = settingsFormat.generate "passless.toml" cfg.settings;
+in
+{
+
+ options.programs.passless = {
+ enable = lib.mkEnableOption "passless";
+
+ package = lib.mkPackageOption pkgs "passless" { };
+
+ users = lib.options.mkOption {
+ type = with lib.types; listOf str;
+ description = ''
+ Users that intend to use passless and should be added to the fido group.
+ '';
+ default = [ ];
+ example = [ "alice" ];
+ };
+
+ settings = lib.mkOption {
+ inherit (settingsFormat) type;
+ default = { };
+ example = {
+ pass.store-path = "/home/alice/.local/share/password-store";
+ };
+ description = ''
+ Configuration included in `config.toml`.
+
+ See for documentation or run `passless config print` to see default configuration.
+ '';
+ };
+ };
+
+ config = lib.mkIf config.programs.passless.enable {
+ users.groups.fido.members = cfg.users;
+
+ boot.kernelModules = [ "uhid" ];
+
+ services.udev.extraRules = ''
+ KERNEL=="uhid", GROUP="fido", MODE="0660"
+ '';
+
+ # From https://github.com/pando85/passless/blob/master/contrib/systemd/passless.service
+ systemd.user.services.passless = {
+ description = "Passless FIDO2 Software Authenticator";
+ documentation = [ "https://github.com/pando85/passless" ];
+ after = [ "network-online.target" ];
+ wants = [ "network-online.target" ];
+ wantedBy = [ "default.target" ];
+ path = [ config.programs.gnupg.package ];
+ serviceConfig = {
+ Type = "simple";
+ ExecStart = "${lib.getExe cfg.package} --config-path ${settingsFile}";
+ Restart = "on-failure";
+ RestartSec = "5s";
+ # Security hardening
+ # The application already handles its own memory locking and core dump prevention
+ # but we can add additional systemd protections
+ NoNewPrivileges = true;
+ LimitMEMLOCK = "2M";
+ SyslogIdentifier = "passless";
+
+ # Found with shh
+ ProtectSystem = "strict";
+ PrivateTmp = "disconnected";
+ PrivateMounts = "true";
+ ProtectKernelTunables = "true";
+ ProtectKernelModules = true;
+ ProtectKernelLogs = true;
+ LockPersonality = true;
+ RestrictRealtime = true;
+ ProtectClock = true;
+ MemoryDenyWriteExecute = true;
+ RestrictAddressFamilies = "AF_UNIX";
+ SocketBindDeny = [
+ "ipv4:tcp"
+ "ipv4:udp"
+ "ipv6:tcp"
+ "ipv6:udp"
+ ];
+ CapabilityBoundingSet = [
+ "~CAP_BLOCK_SUSPEND"
+ "CAP_BPF"
+ "CAP_CHOWN"
+ "CAP_MKNOD"
+ "CAP_NET_RAW"
+ "CAP_PERFMON"
+ "CAP_SYS_BOOT"
+ "CAP_SYS_CHROOT"
+ "CAP_SYS_MODULE"
+ "CAP_SYS_NICE"
+ "CAP_SYS_PACCT"
+ "CAP_SYS_PTRACE"
+ "CAP_SYS_TIME"
+ "CAP_SYSLOG"
+ "CAP_WAKE_ALARM"
+ ];
+ SystemCallFilter = [
+ "~@aio:EPERM"
+ "@chown:EPERM"
+ "@clock:EPERM"
+ "@cpu-emulation:EPERM"
+ "@debug:EPERM"
+ "@ipc:EPERM"
+ "@keyring:EPERM"
+ "@module:EPERM"
+ "@mount:EPERM"
+ "@obsolete:EPERM"
+ "@pkey:EPERM"
+ "@privileged:EPERM"
+ "@raw-io:EPERM"
+ "@reboot:EPERM"
+ "@resources:EPERM"
+ "@sandbox:EPERM"
+ "@setuid:EPERM"
+ "@swap:EPERM"
+ "@sync:EPERM"
+ ];
+
+ };
+ };
+ };
+
+ meta.maintainers = with lib.maintainers; [ erictapen ];
+
+}
diff --git a/nixos/modules/programs/sniffnet.nix b/nixos/modules/programs/sniffnet.nix
index 91d56871dac6..6258bcb67c95 100644
--- a/nixos/modules/programs/sniffnet.nix
+++ b/nixos/modules/programs/sniffnet.nix
@@ -17,6 +17,8 @@ in
};
config = lib.mkIf cfg.enable {
+ environment.systemPackages = [ pkgs.sniffnet ];
+
security.wrappers.sniffnet = {
owner = "root";
group = "root";
diff --git a/nixos/modules/programs/tack.nix b/nixos/modules/programs/tack.nix
new file mode 100644
index 000000000000..6b39c72bda4e
--- /dev/null
+++ b/nixos/modules/programs/tack.nix
@@ -0,0 +1,26 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.programs.tack;
+in
+{
+ options.programs.tack = {
+ enable = lib.mkEnableOption "tack, flake-like toml nix pins";
+
+ package = lib.mkPackageOption pkgs "tack" { };
+
+ nixConfTokens = lib.mkEnableOption "tack reading access tokens from nix.conf (significantly improves comparison speed)";
+ };
+
+ config = lib.mkIf cfg.enable {
+ environment.systemPackages = [ cfg.package ];
+
+ environment.sessionVariables = lib.mkIf cfg.nixConfTokens {
+ TACK_NIX_CONF_TOKENS = "1";
+ };
+ };
+}
diff --git a/nixos/modules/programs/throne.nix b/nixos/modules/programs/throne.nix
index 2023055892dd..a64178c77757 100644
--- a/nixos/modules/programs/throne.nix
+++ b/nixos/modules/programs/throne.nix
@@ -64,32 +64,36 @@ in
# 3. Put ThroneCore into a systemd service, and let polkit check service name.
# This is the most secure and convenient way but requires heavy modification
# 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)
- ''
- polkit.addRule(function(action, subject) {
- const allowedActionIds = [
- "org.freedesktop.resolve1.revert",
- "org.freedesktop.resolve1.set-domains",
- "org.freedesktop.resolve1.set-default-route",
- "org.freedesktop.resolve1.set-dns-servers"
- ];
+ security.polkit = {
+ enable = true;
+ enablePkexecWrapper = lib.mkDefault true;
+ extraConfig =
+ lib.mkIf (cfg.tunMode.enable && (!cfg.tunMode.setuid) && config.services.resolved.enable)
+ ''
+ polkit.addRule(function(action, subject) {
+ const allowedActionIds = [
+ "org.freedesktop.resolve1.revert",
+ "org.freedesktop.resolve1.set-domains",
+ "org.freedesktop.resolve1.set-default-route",
+ "org.freedesktop.resolve1.set-dns-servers"
+ ];
- if (allowedActionIds.indexOf(action.id) !== -1) {
- try {
- var parentPid = polkit.spawn(["${lib.getExe' pkgs.procps "ps"}", "-o", "ppid=", subject.pid]).trim();
- var parentCap = polkit.spawn(["${lib.getExe' pkgs.libcap "getpcaps"}", parentPid]).trim();
- if (parentCap.includes("cap_net_admin") && parentCap.includes("cap_net_raw")) {
- return polkit.Result.YES;
- } else {
+ if (allowedActionIds.indexOf(action.id) !== -1) {
+ try {
+ var parentPid = polkit.spawn(["${lib.getExe' pkgs.procps "ps"}", "-o", "ppid=", subject.pid]).trim();
+ var parentCap = polkit.spawn(["${lib.getExe' pkgs.libcap "getpcaps"}", parentPid]).trim();
+ if (parentCap.includes("cap_net_admin") && parentCap.includes("cap_net_raw")) {
+ return polkit.Result.YES;
+ } else {
+ return polkit.Result.NOT_HANDLED;
+ }
+ } catch (e) {
return polkit.Result.NOT_HANDLED;
}
- } catch (e) {
- return polkit.Result.NOT_HANDLED;
}
- }
- })
- '';
+ })
+ '';
+ };
};
meta.maintainers = with lib.maintainers; [ aleksana ];
diff --git a/nixos/modules/programs/vscode.nix b/nixos/modules/programs/vscode.nix
index a20b6b055b10..087278a6d4d0 100644
--- a/nixos/modules/programs/vscode.nix
+++ b/nixos/modules/programs/vscode.nix
@@ -7,6 +7,7 @@
let
cfg = config.programs.vscode;
+ jsonFormat = pkgs.formats.json { };
in
{
options.programs.vscode = {
@@ -36,6 +37,21 @@ in
description = "List of extensions to install.";
};
+ enterprisePolicies = lib.mkOption {
+ type = jsonFormat.type;
+ default = { };
+ example = lib.literalExpression ''
+ {
+ "UpdateMode" = "none";
+ "TelemetryLevel" = "off";
+ }
+ '';
+ description = ''
+ System-wide policies for VSCode in `/etc/vscode/policy.json`.
+ See for more information.
+ '';
+ };
+
finalPackage = lib.mkOption {
type = lib.types.package;
visible = false;
@@ -45,13 +61,19 @@ in
};
config = lib.mkIf cfg.enable {
- environment.systemPackages = [
- cfg.finalPackage
- ];
+ environment = {
+ systemPackages = [
+ cfg.finalPackage
+ ];
- environment.sessionVariables.EDITOR = lib.mkIf cfg.defaultEditor (
- lib.mkOverride 900 cfg.finalPackage.meta.mainProgram
- );
+ sessionVariables.EDITOR = lib.mkIf cfg.defaultEditor (
+ lib.mkOverride 900 cfg.finalPackage.meta.mainProgram
+ );
+
+ etc."vscode/policy.json" = lib.mkIf (cfg.enterprisePolicies != { }) {
+ source = jsonFormat.generate "vscode-policy.json" cfg.enterprisePolicies;
+ };
+ };
programs.vscode.finalPackage = pkgs.vscode-with-extensions.override {
vscode = cfg.package;
diff --git a/nixos/modules/programs/wayland/pinnacle.nix b/nixos/modules/programs/wayland/pinnacle.nix
new file mode 100644
index 000000000000..2b341136c583
--- /dev/null
+++ b/nixos/modules/programs/wayland/pinnacle.nix
@@ -0,0 +1,70 @@
+{
+ pkgs,
+ config,
+ lib,
+ ...
+}:
+let
+ cfg = config.programs.pinnacle;
+ inherit (lib.options) mkEnableOption mkPackageOption;
+in
+{
+ options.programs.pinnacle = {
+ enable = mkEnableOption "pinnacle";
+ package = mkPackageOption pkgs "pinnacle" {
+ default = "pinnacle";
+ example = "pkgs.pinnacle";
+ extraDescription = "package containing the pinnacle server binary";
+ };
+ xdg-portals.enable = mkEnableOption "enable xdg-portals for pinnacle";
+ withUWSM = mkEnableOption ''
+ manage the pinnacle session with [UWSM](https://github.com/Vladimir-csp/uwsm) instead
+ of independent systemd services and targets.
+ '';
+ };
+
+ config = lib.mkIf cfg.enable (
+ lib.mkMerge [
+ {
+ environment.systemPackages = [
+ cfg.package
+ pkgs.protobuf
+ cfg.package.lua-client-api
+ ];
+ environment.pathsToLink = [
+ # For /run/current-system/sw/share/pinnacle protobuf files - for
+ # pinnacle to be able to launch with a non-default config out of the
+ # box.
+ "/share/pinnacle"
+ ];
+ xdg.portal = lib.mkIf cfg.xdg-portals.enable {
+ enable = true;
+ wlr.enable = true;
+ configPackages = [ cfg.package ];
+ extraPortals = [
+ pkgs.xdg-desktop-portal-wlr
+ pkgs.xdg-desktop-portal-gtk
+ pkgs.gnome-keyring
+ ];
+ };
+ }
+ (lib.mkIf (cfg.withUWSM) {
+ programs.uwsm.enable = true;
+ # Configure UWSM to launch Pinnacle from a display manager like SDDM
+ programs.uwsm.waylandCompositors = {
+ pinnacle = {
+ prettyName = "Pinnacle";
+ comment = "Pinnacle compositor managed by UWSM";
+ binPath = "/run/current-system/sw/bin/pinnacle";
+ extraArgs = [ "--session" ];
+ };
+ };
+ })
+ (lib.mkIf (!cfg.withUWSM) {
+ services.displayManager.sessionPackages = [ cfg.package ];
+ })
+ ]
+ );
+
+ meta.maintainers = with lib.maintainers; [ cassandracomar ];
+}
diff --git a/nixos/modules/programs/wayland/uwsm.nix b/nixos/modules/programs/wayland/uwsm.nix
index 2ed6a643f39a..838ac2ef01de 100644
--- a/nixos/modules/programs/wayland/uwsm.nix
+++ b/nixos/modules/programs/wayland/uwsm.nix
@@ -37,6 +37,11 @@ let
;
}
) cfg.waylandCompositors;
+
+ sessionServices = [
+ "wayland-wm@"
+ "wayland-session-bindpid@"
+ ];
in
{
options.programs.uwsm = {
@@ -136,6 +141,17 @@ in
# UWSM recommends dbus broker for better compatibility
services.dbus.implementation = "broker";
+
+ # Restarting these kills the graphical session, same treatment as the
+ # display-manager modules.
+ systemd.user.services = lib.genAttrs sessionServices (_: {
+ restartIfChanged = false;
+ # Defining the units here generates drop-ins; without this they
+ # would carry the NixOS default Environment="PATH=coreutils:…",
+ # clobbering the PATH that uwsm imported into the user manager
+ # and breaking spawn actions that rely on it.
+ enableDefaultPath = false;
+ });
}
(lib.mkIf (cfg.waylandCompositors != { }) {
diff --git a/nixos/modules/rename.nix b/nixos/modules/rename.nix
index bacb7275cea0..54664ae769ba 100644
--- a/nixos/modules/rename.nix
+++ b/nixos/modules/rename.nix
@@ -150,6 +150,9 @@ in
] "The baget module was removed due to the upstream package being unmaintained.")
(mkRemovedOptionModule [ "services" "beegfs" ] "The BeeGFS module has been removed")
(mkRemovedOptionModule [ "services" "beegfsEnable" ] "The BeeGFS module has been removed")
+ (mkRemovedOptionModule [ "services" "botamusique" ]
+ "The botamusique module has been removed. The project was archived upstream in 2024: https://github.com/azlux/botamusique"
+ )
(mkRemovedOptionModule [
"services"
"cgmanager"
@@ -274,6 +277,13 @@ in
"services"
"marathon"
] "The corresponding package was removed from nixpkgs.")
+ (mkRemovedOptionModule
+ [
+ "services"
+ "matrix-appservice-discord"
+ ]
+ "The matrix-appservice-discord package has been removed as it is no longer actively maintained upstream. Use `services.mautrix-discord` instead."
+ )
(mkRemovedOptionModule [ "services" "mathics" ] "The Mathics module has been removed")
(mkRemovedOptionModule [ "services" "matrix-sliding-sync" ]
"The matrix-sliding-sync package has been removed, since matrix-synapse incorporated its functionality. Remove `services.sliding-sync` from your NixOS Configuration, and the `.well-known` record for `org.matrix.msc3575.proxy` from your webserver"
@@ -501,7 +511,7 @@ in
services.simplesamlphp has been vulnerable and unmaintained in nixpkgs.
'')
(mkRemovedOptionModule [ "security" "pam" "enableEcryptfs" ] ''
- security.pam.enableFscrypt was removed since it was unmaintained in nixpkgs.
+ security.pam.enableEcryptfs was removed since it was unmaintained in nixpkgs.
'')
(mkRemovedOptionModule [ "security" "rngd" ] ''
rngd is not necessary for any device that the kernel recognises
diff --git a/nixos/modules/security/account-utils.nix b/nixos/modules/security/account-utils.nix
new file mode 100644
index 000000000000..42daaf188ca6
--- /dev/null
+++ b/nixos/modules/security/account-utils.nix
@@ -0,0 +1,78 @@
+{
+ lib,
+ config,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.security.account-utils;
+ format = pkgs.formats.ini { };
+in
+{
+ options.security.account-utils = {
+ enable = lib.mkEnableOption "the account-utils implementation of Unix user authentication and management";
+ package = lib.mkPackageOption pkgs "account-utils" { };
+ extraArgs = lib.mkOption {
+ type = lib.types.listOf lib.types.nonEmptyStr;
+ default = [ ];
+ example = [
+ "--debug"
+ "-v"
+ ];
+ description = ''
+ List of arguments to pass to the socket activated service executables.
+ ::: {.note}
+ This is passed to both pwupdd and pwaccessd, which support identical flags.
+ :::
+ '';
+ };
+ pwaccessd.settings = lib.mkOption {
+ description = ''
+ Options for pwaccessd.
+ See {manpage}`pwaccessd.conf(5)` for available options.
+ '';
+ type = lib.types.submodule {
+ freeformType = format.type;
+ };
+ default = { };
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ # use account-utils reimplementation of pam_unix
+ security.pam = {
+ pam_unixModulePath = "${cfg.package}/lib/security/pam_unix_ng.so";
+ enableLegacySettings = false;
+ };
+
+ systemd = {
+ packages = [ cfg.package ];
+ sockets.pwaccessd.wantedBy = [ "sockets.target" ];
+ sockets.pwupdd.wantedBy = lib.optional config.users.mutableUsers "sockets.target"; # immutable users do not need password updating
+ sockets.newidmapd.wantedBy = [ "sockets.target" ];
+ services."pwupdd@".environment.PWUPDD_OPTS = lib.escapeShellArgs cfg.extraArgs;
+ services."pwaccessd".environment.PWACCESSD_OPTS = lib.escapeShellArgs cfg.extraArgs;
+ };
+
+ environment.systemPackages = [ cfg.package ];
+ environment.etc."account-utils/pwaccessd.conf".source =
+ format.generate "pwaccessd.conf" cfg.pwaccessd.settings;
+
+ security.pam.services = {
+ pwupd-passwd = { };
+ pwupd-chsh = { };
+ pwupd-chfn = { };
+ };
+
+ # covered by account-utils via socket-activated service
+ security.wrappers = {
+ # shadow suid binaries are no longer necessary, but disabling the entire shadow module is too intrusive
+ newuidmap.enable = false;
+ newgidmap.enable = false;
+ chsh.enable = false;
+ passwd.enable = false;
+
+ unix_chkpwd.enable = false; # Not necessary when using pam_unix_ng.so
+ };
+ };
+}
diff --git a/nixos/modules/security/acme/default.nix b/nixos/modules/security/acme/default.nix
index 13012e176753..7bce714b2a0b 100644
--- a/nixos/modules/security/acme/default.nix
+++ b/nixos/modules/security/acme/default.nix
@@ -2,13 +2,11 @@
config,
lib,
pkgs,
- options,
...
}:
let
cfg = config.security.acme;
- opt = options.security.acme;
user = if cfg.useRoot then "root" else "acme";
# Used to calculate timer accuracy for coalescing
@@ -826,8 +824,8 @@ let
type = lib.types.attrsOf (lib.types.path);
inherit (defaultAndText "credentialFiles" { }) default defaultText;
description = ''
- Environment variables suffixed by "_FILE" to set for the cert's service
- for your selected dnsProvider.
+ Environment variables suffixed by "_FILE" or "_PATH" to set for the
+ cert's service for your selected dnsProvider.
To find out what values you need to set, consult the documentation at
for the corresponding dnsProvider.
This allows to securely pass credential files to lego by leveraging systemd
@@ -1186,10 +1184,13 @@ in
}
)
{
- assertion = lib.all (lib.hasSuffix "_FILE") (lib.attrNames data.credentialFiles);
+ assertion = lib.all (n: lib.hasSuffix "_FILE" n || lib.hasSuffix "_PATH" n) (
+ lib.attrNames data.credentialFiles
+ );
+
message = ''
Option `security.acme.certs.${cert}.credentialFiles` can only be
- used for variables suffixed by "_FILE".
+ used for variables suffixed by "_FILE" or "_PATH".
'';
}
diff --git a/nixos/modules/security/apparmor.nix b/nixos/modules/security/apparmor.nix
index 12e634c5e2d9..341c343adb44 100644
--- a/nixos/modules/security/apparmor.nix
+++ b/nixos/modules/security/apparmor.nix
@@ -241,7 +241,7 @@ in
{
Type = "oneshot";
RemainAfterExit = "yes";
- ExecStartPre = "${pkgs.apparmor-utils}/bin/aa-teardown";
+ ExecStartPre = lib.getExe' pkgs.apparmor-init "aa-teardown";
ExecStart = lib.mapAttrsToList (
n: p: "${pkgs.apparmor-parser}/bin/apparmor_parser --add ${commonOpts n p}"
) enabledPolicies;
@@ -262,7 +262,7 @@ in
# Optionally kill the processes which are unconfined but now have a profile loaded
# (because AppArmor can only start to confine new processes).
lib.optional cfg.killUnconfinedConfinables killUnconfinedConfinables;
- ExecStop = "${pkgs.apparmor-utils}/bin/aa-teardown";
+ ExecStop = lib.getExe' pkgs.apparmor-init "aa-teardown";
CacheDirectory = [
"apparmor"
"apparmor/logprof"
diff --git a/nixos/modules/security/auditd.nix b/nixos/modules/security/auditd.nix
index ba556da99c0c..e79b0a2c9231 100644
--- a/nixos/modules/security/auditd.nix
+++ b/nixos/modules/security/auditd.nix
@@ -18,7 +18,7 @@ let
pluginOptions = lib.types.submodule {
options = {
- active = lib.mkEnableOption "Whether to enable this plugin";
+ active = lib.mkEnableOption "this plugin";
direction = lib.mkOption {
type = lib.types.enum [
"in"
diff --git a/nixos/modules/security/default.nix b/nixos/modules/security/default.nix
index 5170383d6f5e..c1a4f7cf34a1 100644
--- a/nixos/modules/security/default.nix
+++ b/nixos/modules/security/default.nix
@@ -1,4 +1,8 @@
-{ config, lib, ... }:
+{
+ config,
+ lib,
+ ...
+}:
let
cfg = config.security;
in
@@ -16,10 +20,16 @@ in
config = lib.mkMerge [
{
# We set the default LSM's here due to them not being present if set when enabling AppArmor.
- security.lsm = [
- "landlock"
- "yama"
- "bpf"
+ security.lsm = lib.mkMerge [
+ [
+ "landlock"
+ "yama"
+ ]
+ # Load BPF last unconditionally. See: https://github.com/NixOS/nixpkgs/pull/533428.
+ # Apparmor (and potentially other modules) will load incorrectly if they are not before BPF.
+ # It is believed that there was a regression between kernel 6.12 and 6.18 which caused the
+ # passthrough stub or LSM stacking of the BPF module to interact with other modules incorrectly.
+ (lib.mkAfter [ "bpf" ])
];
}
(lib.mkIf (lib.lists.length cfg.lsm > 0) {
diff --git a/nixos/modules/security/pam.nix b/nixos/modules/security/pam.nix
index 586ae6fd9ede..240020c19374 100644
--- a/nixos/modules/security/pam.nix
+++ b/nixos/modules/security/pam.nix
@@ -678,6 +678,14 @@ let
'';
};
+ oo7 = {
+ enable = lib.mkEnableOption ''
+ automatically unlock the user's default Session Keyring using pam_oo7.
+ If the user's login password does not match their keyring password,
+ oo7 will prompt separately after login.
+ '';
+ };
+
enableUMask = lib.mkOption {
default = config.security.pam.enableUMask;
defaultText = lib.literalExpression "config.security.pam.enableUMask";
@@ -1008,7 +1016,7 @@ let
{
name = "unix";
control = "required";
- modulePath = "${package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
}
# pam_slurm_adopt must be the last module in the account stack.
{
@@ -1198,6 +1206,7 @@ let
|| cfg.pamMount
|| cfg.kwallet.enable
|| cfg.enableGnomeKeyring
+ || cfg.oo7.enable
|| config.services.intune.enable
|| cfg.googleAuthenticator.enable
|| cfg.gnupg.enable
@@ -1217,11 +1226,11 @@ let
name = "unix-early";
enable = cfg.unixAuth;
control = "optional";
- modulePath = "${package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
settings = {
nullok = cfg.allowNullPassword;
inherit (cfg) nodelay;
- likeauth = true;
+ likeauth = lib.mkIf config.security.pam.enableLegacySettings true;
};
}
{
@@ -1261,6 +1270,12 @@ let
control = "optional";
modulePath = "${pkgs.gnome-keyring}/lib/security/pam_gnome_keyring.so";
}
+ {
+ name = "oo7";
+ enable = cfg.oo7.enable;
+ control = "optional";
+ modulePath = "${pkgs.oo7-pam}/lib/security/pam_oo7.so";
+ }
{
name = "intune";
enable = config.services.intune.enable;
@@ -1315,11 +1330,11 @@ let
name = "unix";
enable = cfg.unixAuth;
control = "sufficient";
- modulePath = "${package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
settings = {
nullok = cfg.allowNullPassword;
inherit (cfg) nodelay;
- likeauth = true;
+ likeauth = lib.mkIf config.security.pam.enableLegacySettings true;
try_first_pass = true;
};
}
@@ -1404,10 +1419,10 @@ let
{
name = "unix";
control = "sufficient";
- modulePath = "${package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
settings = {
nullok = true;
- yescrypt = true;
+ yescrypt = lib.mkIf config.security.pam.enableLegacySettings true;
};
}
{
@@ -1477,6 +1492,12 @@ let
use_authtok = true;
};
}
+ {
+ name = "oo7";
+ enable = cfg.oo7.enable;
+ control = "optional";
+ modulePath = "${pkgs.oo7-pam}/lib/security/pam_oo7.so";
+ }
];
session = utils.pam.autoOrderRules [
@@ -1493,7 +1514,7 @@ let
{
name = "unix";
control = "required";
- modulePath = "${package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
}
{
name = "loginuid";
@@ -1695,6 +1716,15 @@ let
auto_start = true;
};
}
+ {
+ name = "oo7";
+ enable = cfg.oo7.enable;
+ control = "optional";
+ modulePath = "${pkgs.oo7-pam}/lib/security/pam_oo7.so";
+ settings = {
+ auto_start = true;
+ };
+ }
{
name = "gnupg";
enable = cfg.gnupg.enable;
@@ -1802,11 +1832,6 @@ let
else
config.users.motdFile;
- makePAMService = name: service: {
- name = "pam.d/${name}";
- value.source = pkgs.writeText "${name}.pam" service.text;
- };
-
optionalSudoConfigForSSHAgentAuth =
lib.optionalString (config.security.pam.sshAgentAuth.enable || config.security.pam.rssh.enable)
''
@@ -1858,8 +1883,27 @@ in
options = {
+ security.pam.enable = lib.mkOption {
+ default = true;
+ type = lib.types.bool;
+
+ description = ''
+ Whether to enable PAM, or entirely disable it.
+
+ Unless you're building a container image, you probably don't want to disable PAM.
+ '';
+ };
+
security.pam.package = lib.mkPackageOption pkgs "pam" { };
+ security.pam.pam_unixModulePath = lib.mkOption {
+ type = lib.types.pathInStore;
+ default = "${package}/lib/security/pam_unix.so";
+ defaultText = "\${config.security.pam.package}/lib/security/pam_unix.so";
+ description = "The pam_unix module to use in all the default pam services.";
+ internal = true;
+ };
+
security.pam.loginLimits = lib.mkOption {
default = [ ];
type = limitsType;
@@ -1904,6 +1948,19 @@ in
'';
};
+ security.pam.enableLegacySettings = lib.mkOption {
+ default = true;
+ type = lib.types.bool;
+ description = ''
+ Alternative implementations of pam_unix may not support all legacy arguments.
+ This option will disable all known legacy settings.
+ ::: {.note}
+ Setting this option to false will omit arguments, such as `yescrypt`.
+ Doing so is only safe if the defaults used by pam_unix are sensible.
+ :::
+ '';
+ };
+
security.pam.makeHomeDir.skelDirectory = lib.mkOption {
type = lib.types.str;
default = "/var/empty";
@@ -2218,6 +2275,30 @@ in
'';
};
+ prompt = lib.mkOption {
+ default = null;
+ type = with lib.types; nullOr str;
+ description = ''
+ Set individual prompt message for interactive mode.
+ By setting this option, you can set a message to be shown by the
+ {option}`security.pam.u2f.settings.interactive` option.
+
+ Requires {option}`security.pam.u2f.settings.interactive` to be set to `true`.
+ '';
+ };
+
+ cue_prompt = lib.mkOption {
+ default = null;
+ type = with lib.types; nullOr str;
+ description = ''
+ Set individual prompt message for cue mode.
+ By setting this option, you can set a message to be shown by the
+ {option}`security.pam.u2f.settings.cue` option.
+
+ Requires {option}`security.pam.u2f.settings.cue` to be set to `true`.
+ '';
+ };
+
cue = lib.mkOption {
default = false;
type = lib.types.bool;
@@ -2479,7 +2560,7 @@ in
###### implementation
- config = {
+ config = lib.mkIf config.security.pam.enable {
assertions = [
{
assertion = config.users.motd == "" || config.users.motdFile == null;
@@ -2562,7 +2643,26 @@ in
};
};
- environment.etc = lib.mapAttrs' makePAMService enabledServices;
+ environment.etc =
+ let
+ # Write all pam config in a single derivation for performance
+ pamd =
+ pkgs.runCommand "pam.d"
+ {
+ __structuredAttrs = true;
+ services = lib.mapAttrs (_: svc: svc.text) enabledServices;
+ }
+ ''
+ mkdir $out
+ for i in "''${!services[@]}"; do
+ printf '%s' "''${services[$i]}" > "$out/$i"
+ done
+ '';
+ in
+ lib.mapAttrs' (name: service: {
+ name = "pam.d/${name}";
+ value.source = "${pamd}/${name}";
+ }) enabledServices;
systemd =
lib.mkIf (lib.any (service: service.lastlog.enable) (lib.attrValues config.security.pam.services))
diff --git a/nixos/modules/security/polkit.nix b/nixos/modules/security/polkit.nix
index c2bbe706529f..94237502160e 100644
--- a/nixos/modules/security/polkit.nix
+++ b/nixos/modules/security/polkit.nix
@@ -6,27 +6,69 @@
}:
let
+ inherit (lib)
+ mkEnableOption
+ mkOption
+ mkIf
+ mkPackageOption
+ mkRemovedOptionModule
+ types
+ ;
+
cfg = config.security.polkit;
+ iniFmt = pkgs.formats.ini { };
in
{
+ imports = [
+ (mkRemovedOptionModule [ "security" "polkit" "debug" ] "Use security.polkit.extraArgs instead")
+ ];
- options = {
+ options.security.polkit = {
+ enable = mkEnableOption "polkit";
- security.polkit.enable = lib.mkEnableOption "polkit";
+ enablePkexecWrapper = mkEnableOption "the setuid pkexec wrapper";
- security.polkit.package = lib.mkPackageOption pkgs "polkit" { };
+ package = mkPackageOption pkgs "polkit" { };
- security.polkit.debug = lib.mkEnableOption "debug logs from polkit. This is required in order to see log messages from rule definitions";
+ settings = mkOption {
+ description = ''
+ Options for polkitd.
+ See {manpage}`polkitd.conf(5)` for available options.
+ '';
+ type = types.submodule {
+ freeformType = iniFmt.type;
+ options.Polkitd.ExpirationSeconds = lib.mkOption {
+ description = "Expiration timeout of authenticated sesssions.";
+ type = types.ints.positive;
+ default = 300; # current polkit upstream default
+ };
+ };
+ };
- security.polkit.extraConfig = lib.mkOption {
- type = lib.types.lines;
+ extraArgs = mkOption {
+ type = types.listOf types.str;
+ default = [
+ "--no-debug"
+ "--log-level=notice"
+ ];
+ description = ''
+ List of arguments to pass to the polkitd executable.
+
+ ::: {.note}
+ To see debug logs you need to negate the default `--no-debug` setting.
+ :::
+ '';
+ };
+
+ extraConfig = mkOption {
+ type = types.lines;
default = "";
example = ''
/* Log authorization checks. */
polkit.addRule(function(action, subject) {
- // Make sure to set { security.polkit.debug = true; } in configuration.nix
+ // Make sure to negate --no-debug in services.polkit.extraArgs: { security.polkit.extraArgs = [ "--log-level=notice" ]; }
polkit.log("user " + subject.user + " is attempting action " + action.id + " from PID " + subject.pid);
});
@@ -41,8 +83,8 @@ in
'';
};
- security.polkit.adminIdentities = lib.mkOption {
- type = lib.types.listOf lib.types.str;
+ adminIdentities = mkOption {
+ type = with types; listOf str;
default = [ "unix-group:wheel" ];
example = [
"unix-user:alice"
@@ -58,25 +100,34 @@ in
};
- config = lib.mkIf cfg.enable {
+ config = mkIf cfg.enable {
environment.systemPackages = [
cfg.package.bin
cfg.package.out
];
+ services.dbus.packages = [ cfg.package.out ];
+
systemd.packages = [ cfg.package.out ];
- systemd.services.polkit.serviceConfig.ExecStart = [
- ""
- "${cfg.package.out}/lib/polkit-1/polkitd ${lib.optionalString (!cfg.debug) "--no-debug"}"
- ];
-
- systemd.services.polkit.restartTriggers = [ config.system.path ];
- systemd.services.polkit.reloadTriggers = [
- config.environment.etc."polkit-1/rules.d/10-nixos.rules".source
- ];
- systemd.services.polkit.stopIfChanged = false;
+ systemd.services.polkit = {
+ restartTriggers = [ config.system.path ];
+ reloadTriggers = [
+ config.environment.etc."polkit-1/rules.d/10-nixos.rules".source
+ ];
+ serviceConfig.ExecStart = [
+ # nuke default ExecStart
+ ""
+ # provide our own instead
+ (toString (
+ [
+ "${lib.getLib cfg.package}/lib/polkit-1/polkitd"
+ ]
+ ++ cfg.extraArgs
+ ))
+ ];
+ };
systemd.sockets."polkit-agent-helper".wantedBy = [ "sockets.target" ];
@@ -89,7 +140,7 @@ in
# The upstream unit uses PrivateDevices=yes and ProtectHome=yes,
# which prevents PAM modules from accessing hardware (e.g. FIDO
# tokens via /dev/hidraw*) or reading key files from home directories.
- (lib.mkIf config.security.pam.u2f.enable {
+ (mkIf config.security.pam.u2f.enable {
# Override upstream PrivateDevices=yes to allow access to /dev/hidraw*
PrivateDevices = false;
DeviceAllow = [
@@ -100,7 +151,7 @@ in
# ~/.config/Yubico/u2f_keys (the default key file location)
ProtectHome = "read-only";
})
- (lib.mkIf config.security.pam.zfs.enable {
+ (mkIf config.security.pam.zfs.enable {
PrivateDevices = false;
DeviceAllow = [
"/dev/zfs rw"
@@ -120,23 +171,17 @@ in
${cfg.extraConfig}
''; # TODO: validation on compilation (at least against typos)
- services.dbus.packages = [ cfg.package.out ];
-
+ environment.etc."polkit-1/polkitd.conf".source = iniFmt.generate "polkitd.conf" cfg.settings;
security.pam.services.polkit-1 = { };
security.wrappers.pkexec = {
+ enable = cfg.enablePkexecWrapper;
setuid = true;
owner = "root";
group = "root";
- source = "${cfg.package.bin}/bin/pkexec";
+ source = lib.getExe' cfg.package "pkexec";
};
- systemd.tmpfiles.rules = [
- # Probably no more needed, clean up
- "R /var/lib/polkit-1"
- "R /var/lib/PolicyKit"
- ];
-
users.users.polkituser = {
description = "PolKit daemon";
uid = config.ids.uids.polkituser;
@@ -146,4 +191,7 @@ in
users.groups.polkituser = { };
};
+ meta = {
+ maintainers = with lib.maintainers; [ zimward ];
+ };
}
diff --git a/nixos/modules/security/run0.nix b/nixos/modules/security/run0.nix
index 22296a76c95e..478fae3db67d 100644
--- a/nixos/modules/security/run0.nix
+++ b/nixos/modules/security/run0.nix
@@ -6,19 +6,29 @@
}:
let
- cfg = config.security.run0;
+ inherit (lib)
+ mkEnableOption
+ mkIf
+ mkMerge
+ mkOption
+ mkPackageOption
+ mkAliasOptionModule
+ optionalString
+ ;
- sudoAlias = pkgs.writeShellScriptBin "sudo" ''
- if [[ "$1" == -* ]]; then
- echo "This script is a sudo-alias to systemd's run0 and does not support any sudo parameters."
- exit 1
- fi
- exec run0 "$@"
- '';
+ cfg = config.security.run0;
in
{
options.security.run0 = {
- wheelNeedsPassword = lib.mkOption {
+ enable = mkEnableOption "support for run0";
+
+ persistentAuth.enable = mkEnableOption ''
+ persistent authentication for sessions.
+ Timeout configurable via {option}`security.polkit.settings.Polkitd.ExpirationSeconds`
+ '';
+ persistentAuth.enableRemote = mkEnableOption "persistent authentication for remote sessions";
+
+ wheelNeedsPassword = mkOption {
type = lib.types.bool;
default = true;
description = ''
@@ -27,26 +37,72 @@ in
'';
};
- enableSudoAlias = lib.mkEnableOption "make {command}`sudo` an alias to {command}`run0`.";
+ sudo-shim.enable = mkEnableOption "make {command}`sudo` an alias to {command}`run0`.";
+ sudo-shim.package = mkPackageOption pkgs "run0-sudo-shim" { };
};
- config = {
- assertions = [
- {
- assertion =
- cfg.enableSudoAlias -> (!config.security.sudo.enable && !config.security.sudo-rs.enable);
- message = "`security.run0.enableSudoAlias` cannot be enabled if `security.sudo` or `security.sudo-rs` are enabled.";
- }
- ];
+ imports = [
+ (mkAliasOptionModule
+ [ "security" "run0" "enableSudoAlias" ]
+ [ "security" "run0" "sudo-shim" "enable" ]
+ )
+ ];
- security.polkit.extraConfig = lib.mkIf (!cfg.wheelNeedsPassword) ''
- polkit.addRule(function(action, subject) {
- if (action.id == "org.freedesktop.systemd1.manage-units" && subject.isInGroup("wheel")) {
- return polkit.Result.YES;
+ config = mkMerge [
+ {
+ # Late introduction of the enable toggle, this should help during migration.
+ # TODO: Remove after 26.11 release
+ assertions = [
+ {
+ assertion = !cfg.wheelNeedsPassword -> cfg.enable;
+ message = "`security.run0.enable` is currently disabled, but is required for the `security.run0.wheelNeedsPassword` option to take effect";
}
- });
- '';
+ {
+ assertion = cfg.enableSudoAlias -> cfg.enable;
+ message = "`security.run0.enableSudoAlias` depends on `security.run0.enable`, which is disabled.";
+ }
+ ];
+ }
+ (mkIf cfg.enable {
+ assertions = [
+ {
+ assertion =
+ cfg.sudo-shim.enable -> (!config.security.sudo.enable && !config.security.sudo-rs.enable);
+ message = "`security.run0.sudo-shim.enable` cannot be enabled if `security.sudo` or `security.sudo-rs` are enabled.";
+ }
+ ];
- environment.systemPackages = lib.optional cfg.enableSudoAlias sudoAlias;
+ security.polkit = {
+ enable = true;
+ extraConfig = lib.concatLines [
+ (optionalString (!cfg.wheelNeedsPassword) ''
+ polkit.addRule(function(action, subject) {
+ if (action.id == "org.freedesktop.systemd1.manage-units" && subject.isInGroup("wheel")) {
+ return polkit.Result.YES;
+ }
+ });
+ '')
+ (optionalString cfg.persistentAuth.enable ''
+ polkit.addRule(function(action, subject) {
+ if (action.id == "org.freedesktop.systemd1.manage-units" && subject.active ${
+ optionalString (!cfg.persistentAuth.enableRemote) "&& subject.local"
+ }) {
+ return polkit.Result.AUTH_ADMIN_KEEP;
+ }
+ });
+ '')
+ ];
+ };
+
+ environment.systemPackages = lib.optional cfg.sudo-shim.enable cfg.sudo-shim.package;
+ })
+ ];
+
+ meta = {
+ maintainers = with lib.maintainers; [
+ zimward
+ grimmauld
+ kuflierl
+ ];
};
}
diff --git a/nixos/modules/services/admin/komodo-periphery.nix b/nixos/modules/services/admin/komodo-periphery.nix
index 5b7643baeea6..d4b0426903da 100644
--- a/nixos/modules/services/admin/komodo-periphery.nix
+++ b/nixos/modules/services/admin/komodo-periphery.nix
@@ -8,41 +8,65 @@ let
cfg = config.services.komodo-periphery;
settingsFormat = pkgs.formats.toml { };
+ actualRepoDir = if cfg.repoDir != null then cfg.repoDir else "${cfg.rootDirectory}/repos";
+ actualStackDir = if cfg.stackDir != null then cfg.stackDir else "${cfg.rootDirectory}/stacks";
+ actualBuildDir = if cfg.buildDir != null then cfg.buildDir else "${cfg.rootDirectory}/builds";
+
genFinalSettings =
let
+ actualServerEnabled =
+ if cfg.inbound.serverEnabled != null then
+ cfg.inbound.serverEnabled
+ else
+ (cfg.outbound.coreAddress == "");
+
+ hasAnyPrivateKey = cfg.auth.privateKey != "";
+
baseSettings = {
- port = cfg.port;
- bind_ip = cfg.bindIp;
- root_directory = cfg.rootDirectory;
- repo_dir = "${cfg.rootDirectory}/repos";
- stack_dir = "${cfg.rootDirectory}/stacks";
- ssl_enabled = cfg.ssl.enable;
+ default_terminal_command = cfg.defaultTerminalCommand;
+ disable_terminals = cfg.disableTerminals;
+ disable_container_terminals = cfg.disableContainerTerminals;
+
+ stats_polling_rate = cfg.statsPollingRate;
+ container_stats_polling_rate = cfg.containerStatsPollingRate;
+ legacy_compose_cli = cfg.legacyComposeCli;
+
+ include_disk_mounts = cfg.includeDiskMounts;
+ exclude_disk_mounts = cfg.excludeDiskMounts;
+
+ # When a private key is explicitly configured, it's passed via env var.
+ # Otherwise, use the default file path so Periphery auto-generates a key.
+ private_key = if !hasAnyPrivateKey then "file:${cfg.rootDirectory}/keys/periphery.key" else "";
+ core_public_keys = [ ];
+ passkeys = [ ];
+
+ server_enabled = actualServerEnabled;
+ port = cfg.inbound.port;
+ bind_ip = cfg.inbound.bindIp;
+ allowed_ips = cfg.inbound.allowedIps;
+ ssl_enabled = cfg.inbound.ssl.enable;
}
- // lib.optionalAttrs cfg.ssl.enable {
- ssl_key_file = cfg.ssl.keyFile;
- ssl_cert_file = cfg.ssl.certFile;
+ // {
+ core_address = cfg.outbound.coreAddress;
+ connect_as = cfg.outbound.connectAs;
+ onboarding_key = "";
}
// {
logging = {
level = cfg.logging.level;
stdio = cfg.logging.stdio;
+ opentelemetry_service_name = cfg.logging.opentelemetryServiceName;
+ opentelemetry_scope_name = cfg.logging.opentelemetryScopeName;
+ pretty = cfg.logging.pretty;
}
// lib.optionalAttrs (cfg.logging.otlpEndpoint != "") {
otlp_endpoint = cfg.logging.otlpEndpoint;
};
- allowed_ips = cfg.allowedIps;
- passkeys = cfg.passkeys;
- disable_terminals = cfg.disableTerminals;
- disable_container_exec = cfg.disableContainerExec;
- stats_polling_rate = cfg.statsPollingRate;
- container_stats_polling_rate = cfg.containerStatsPollingRate;
- legacy_compose_cli = cfg.legacyComposeCli;
- include_disk_mounts = cfg.includeDiskMounts;
- exclude_disk_mounts = cfg.excludeDiskMounts;
+ pretty_startup_config = cfg.prettyStartupConfig;
}
// cfg.extraSettings;
in
- lib.filterAttrsRecursive (_: v: v != null && v != { } && v != [ ]) baseSettings;
+ lib.filterAttrsRecursive (_: v: v != null && v != { } && v != [ ] && v != "") baseSettings;
configFile =
if cfg.configFile == null then
@@ -51,36 +75,98 @@ let
cfg.configFile;
in
{
+ imports = with lib; [
+ (mkRenamedOptionModule
+ [ "services" "komodo-periphery" "port" ]
+ [ "services" "komodo-periphery" "inbound" "port" ]
+ )
+ (mkRenamedOptionModule
+ [ "services" "komodo-periphery" "bindIp" ]
+ [ "services" "komodo-periphery" "inbound" "bindIp" ]
+ )
+ (mkRenamedOptionModule
+ [ "services" "komodo-periphery" "allowedIps" ]
+ [ "services" "komodo-periphery" "inbound" "allowedIps" ]
+ )
+ (mkRenamedOptionModule
+ [ "services" "komodo-periphery" "ssl" "enable" ]
+ [ "services" "komodo-periphery" "inbound" "ssl" "enable" ]
+ )
+ (mkRenamedOptionModule
+ [ "services" "komodo-periphery" "ssl" "keyFile" ]
+ [ "services" "komodo-periphery" "inbound" "ssl" "keyFile" ]
+ )
+ (mkRenamedOptionModule
+ [ "services" "komodo-periphery" "ssl" "certFile" ]
+ [ "services" "komodo-periphery" "inbound" "ssl" "certFile" ]
+ )
+ (mkRenamedOptionModule
+ [ "services" "komodo-periphery" "serverEnabled" ]
+ [ "services" "komodo-periphery" "inbound" "serverEnabled" ]
+ )
+ (mkRenamedOptionModule
+ [ "services" "komodo-periphery" "disableContainerExec" ]
+ [ "services" "komodo-periphery" "disableContainerTerminals" ]
+ )
+ (mkRemovedOptionModule [ "services" "komodo-periphery" "passkeys" ]
+ "services.komodo-periphery.passkeys has been removed. Use passkeyFiles for v1.X compatibility, or migrate to auth.privateKey and auth.corePublicKeys (v2.0+)."
+ )
+ (mkRemovedOptionModule [ "services" "komodo-periphery" "outbound" "onboardingKey" ]
+ "services.komodo-periphery.outbound.onboardingKey has been removed. Use outbound.onboardingKeyFile instead for better security."
+ )
+ ];
+
options.services.komodo-periphery = {
enable = lib.mkEnableOption "Periphery, a multi-server Docker and Git deployment agent by Komodo";
package = lib.mkPackageOption pkgs "komodo" { };
- configFile = lib.mkOption {
- type = lib.types.nullOr lib.types.path;
+ dockerHost = lib.mkOption {
+ type = lib.types.nullOr lib.types.str;
default = null;
- description = "Path to the periphery configuration file. If null, a configuration file will be generated from the module options.";
+ description = ''
+ Docker host socket URI to use for container operations.
+ If null, uses the default Docker socket and automatically enables Docker.
+ Set this to use alternative container runtimes like Podman or remote Docker hosts.
+ '';
example = lib.literalExpression ''
- pkgs.writeText "periphery.toml" '''
- port = 8120
- bind_ip = "[::]"
- ssl_enabled = true
- [logging]
- level = "info"
- '''
+ # Podman rootless
+ "unix:///run/user/1000/podman/podman.sock"
+
+ # Podman rootful
+ "unix:///run/podman/podman.sock"
+
+ # Remote Docker
+ "tcp://192.168.1.100:2375"
'';
};
- port = lib.mkOption {
- type = lib.types.port;
- default = 8120;
- description = "Port for the Periphery agent to listen on.";
- };
+ configFile = lib.mkOption {
+ type = lib.types.nullOr lib.types.path;
+ default = null;
+ description = ''
+ Path to the Periphery configuration file.
- bindIp = lib.mkOption {
- type = lib.types.str;
- default = "[::]";
- description = "IP address to bind to.";
+ - If `null` (default), a configuration file will be automatically generated
+ from the module options (recommended for most users).
+ - If set to a path, that file will be used directly as the configuration file.
+ - You can also use `pkgs.writeText` to write configuration inline in your NixOS configuration.
+
+ When using a custom config file, all other module options (except `package`, `user`, `group`,
+ `environment`, and `environmentFile`) will be ignored.
+ '';
+ example = lib.literalExpression ''
+ # Option 1: Use an existing config file
+ "/etc/komodo/periphery.toml"
+
+ # Option 2: Write config inline using pkgs.writeText
+ pkgs.writeText "periphery.toml" '''
+ root_directory = "/var/lib/komodo-periphery"
+
+ logging.level = "info"
+ logging.stdio = "standard"
+ '''
+ '';
};
rootDirectory = lib.mkOption {
@@ -89,24 +175,25 @@ in
description = "Root directory for Komodo Periphery data.";
};
- ssl = {
- enable = lib.mkEnableOption "SSL/TLS support" // {
- default = true;
- };
+ repoDir = lib.mkOption {
+ type = lib.types.nullOr lib.types.path;
+ default = null;
+ defaultText = lib.literalExpression ''"''${config.services.komodo-periphery.rootDirectory}/repos"'';
+ description = "Directory for Komodo Periphery to manage repos. If null, defaults to `\${rootDirectory}/repos`.";
+ };
- keyFile = lib.mkOption {
- type = lib.types.path;
- default = "${cfg.rootDirectory}/ssl/key.pem";
- defaultText = lib.literalExpression ''"''${config.services.komodo-periphery.rootDirectory}/ssl/key.pem"'';
- description = "Path to SSL key file.";
- };
+ stackDir = lib.mkOption {
+ type = lib.types.nullOr lib.types.path;
+ default = null;
+ defaultText = lib.literalExpression ''"''${config.services.komodo-periphery.rootDirectory}/stacks"'';
+ description = "Directory for Komodo Periphery to manage stacks. If null, defaults to `\${rootDirectory}/stacks`.";
+ };
- certFile = lib.mkOption {
- type = lib.types.path;
- default = "${cfg.rootDirectory}/ssl/cert.pem";
- defaultText = lib.literalExpression ''"''${config.services.komodo-periphery.rootDirectory}/ssl/cert.pem"'';
- description = "Path to SSL certificate file.";
- };
+ buildDir = lib.mkOption {
+ type = lib.types.nullOr lib.types.path;
+ default = null;
+ defaultText = lib.literalExpression ''"''${config.services.komodo-periphery.rootDirectory}/builds"'';
+ description = "Directory for Komodo Periphery to manage builds. If null, defaults to `\${rootDirectory}/builds`.";
};
logging = {
@@ -139,26 +226,41 @@ in
description = "OpenTelemetry OTLP endpoint for traces.";
example = "http://localhost:4317";
};
+
+ opentelemetryServiceName = lib.mkOption {
+ type = lib.types.str;
+ default = "Periphery";
+ description = "(v2.0+) OpenTelemetry service name attached to telemetry.";
+ };
+
+ opentelemetryScopeName = lib.mkOption {
+ type = lib.types.str;
+ default = "Komodo";
+ description = "(v2.0+) OpenTelemetry scope name attached to telemetry.";
+ };
+
+ pretty = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = "(v2.0+) Enable human-readable logging (multi-line).";
+ };
};
- allowedIps = lib.mkOption {
- type = lib.types.listOf lib.types.str;
- default = [ ];
- description = "IP addresses or subnets allowed to call the periphery API. Empty list allows all.";
- example = [
- "::ffff:12.34.56.78"
- "10.0.10.0/24"
- ];
+ prettyStartupConfig = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = "(v2.0+) Enable human-readable startup config log (multi-line).";
};
- passkeys = lib.mkOption {
- type = lib.types.listOf lib.types.str;
- default = [ ];
+ passkeyFiles = lib.mkOption {
+ type = lib.types.nullOr lib.types.path;
+ default = null;
description = ''
- Passkeys required to access the periphery API.
- WARNING: These will be stored in the Nix store in plain text!
+ Path to file containing passkeys (v1.X compatibility).
+ This will be passed via `PERIPHERY_PASSKEYS_FILE` environment variable.
+ Consider migrating to the new v2.0+ authentication mechanism.
'';
- example = [ "your-secure-passkey" ];
+ example = "/run/secrets/komodo-passkey";
};
extraSettings = lib.mkOption {
@@ -170,16 +272,23 @@ in
};
};
+ defaultTerminalCommand = lib.mkOption {
+ type = lib.types.str;
+ default = "bash";
+ description = "(v2.0+) Default terminal command used to initialize the shell.";
+ example = "zsh";
+ };
+
disableTerminals = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Disable remote shell access through Periphery.";
};
- disableContainerExec = lib.mkOption {
+ disableContainerTerminals = lib.mkOption {
type = lib.types.bool;
default = false;
- description = "Disable remote container shell access through Periphery.";
+ description = "(v2.0+) Disable remote container shell access through Periphery.";
};
statsPollingRate = lib.mkOption {
@@ -222,6 +331,147 @@ in
];
};
+ auth = {
+ privateKey = lib.mkOption {
+ type = lib.types.str;
+ default = "";
+ description = ''
+ (v2.0+) Private key used with the Noise handshake.
+
+ Use `file:/path/to/file` prefix to load from a file. If the file doesn't exist,
+ Periphery will generate and write a new key to the path.
+
+ If empty, defaults to `file:''${rootDirectory}/keys/periphery.key`.
+ '';
+ example = lib.literalExpression ''
+ # Reference a secret file
+ "file:''${config.age.secrets.komodo-private-key.path}"
+
+ # Or direct path
+ "file:/run/secrets/komodo-private-key"
+ '';
+ };
+
+ corePublicKeys = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [ ];
+ description = ''
+ (v2.0+) Accepted public keys to allow Core(s) to connect.
+ Accepts Spki base64 DER directly or can reference files using `file:/path/to/core.pub` prefix.
+ You can mix direct keys and file references.
+
+ For better security, use the `file:` prefix to reference secret files.
+ '';
+ example = lib.literalExpression ''
+ [
+ # Direct key value
+ "MCowBQYDK2VuAyEATZgrjGHeF0KJUe0+n77+qAWOg3YzEzXOmQWaRgO3OGQ="
+ # Reference secret files
+ "file:''${config.age.secrets.komodo-core1-pub.path}"
+ "file:''${config.age.secrets.komodo-core2-pub.path}"
+ ]
+ '';
+ };
+ };
+
+ inbound = {
+ serverEnabled = lib.mkOption {
+ type = lib.types.nullOr lib.types.bool;
+ default = null;
+ description = ''
+ Enable the inbound connection server for Core -> Periphery connections.
+ If null, defaults to false when `outbound.coreAddress` is defined, otherwise true.
+ '';
+ };
+
+ port = lib.mkOption {
+ type = lib.types.port;
+ default = 8120;
+ description = "Port for the inbound Periphery server to listen on.";
+ };
+
+ bindIp = lib.mkOption {
+ type = lib.types.str;
+ default = "[::]";
+ description = ''
+ IP address the periphery server will bind to.
+ The default allows external IPv4 and IPv6 connections.
+ '';
+ };
+
+ allowedIps = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [ ];
+ description = ''
+ Limit the IP addresses which can connect to Periphery.
+ Supports IPv4/IPv6 addresses and subnets.
+ Empty list allows all connections.
+ '';
+ example = [
+ "::ffff:12.34.56.78"
+ "10.0.10.0/24"
+ ];
+ };
+
+ ssl = {
+ enable = lib.mkEnableOption "(v2.0+) SSL/TLS support for inbound connections" // {
+ default = true;
+ };
+
+ keyFile = lib.mkOption {
+ type = lib.types.path;
+ default = "${cfg.rootDirectory}/ssl/key.pem";
+ defaultText = lib.literalExpression ''"''${config.services.komodo-periphery.rootDirectory}/ssl/key.pem"'';
+ description = ''
+ Path to SSL key file.
+ If the file doesn't exist and SSL is enabled, self-signed keys will be generated using openssl.
+ '';
+ };
+
+ certFile = lib.mkOption {
+ type = lib.types.path;
+ default = "${cfg.rootDirectory}/ssl/cert.pem";
+ defaultText = lib.literalExpression ''"''${config.services.komodo-periphery.rootDirectory}/ssl/cert.pem"'';
+ description = ''
+ Path to SSL certificate file.
+ If the file doesn't exist and SSL is enabled, self-signed certificate will be generated using openssl.
+ '';
+ };
+ };
+ };
+
+ outbound = {
+ coreAddress = lib.mkOption {
+ type = lib.types.str;
+ default = "";
+ description = ''
+ (v2.0+) The address of Komodo Core. Must be reachable from this host.
+ If provided, Periphery will operate in outbound mode.
+ '';
+ example = "demo.komo.do";
+ };
+
+ connectAs = lib.mkOption {
+ type = lib.types.str;
+ default = "";
+ description = ''
+ (v2.0+) The Server this Periphery agent should connect as.
+ Must match an existing Server name or id.
+ '';
+ example = "server-name";
+ };
+
+ onboardingKeyFile = lib.mkOption {
+ type = lib.types.nullOr lib.types.path;
+ default = null;
+ description = ''
+ (v2.0+) Path to file containing the onboarding key.
+ This will be passed via `PERIPHERY_ONBOARDING_KEY_FILE` environment variable.
+ '';
+ example = lib.literalExpression ''"''${config.age.secrets.komodo-onboarding.path}"'';
+ };
+ };
+
user = lib.mkOption {
type = lib.types.str;
default = "komodo-periphery";
@@ -253,14 +503,14 @@ in
};
config = lib.mkIf cfg.enable {
- virtualisation.docker.enable = true;
+ virtualisation.docker.enable = lib.mkDefault (cfg.dockerHost == null);
users.users.${cfg.user} = lib.mkIf (cfg.user == "komodo-periphery") {
isSystemUser = true;
group = cfg.group;
description = "Komodo Periphery service user";
home = cfg.rootDirectory;
- extraGroups = [ "docker" ];
+ extraGroups = lib.optional (cfg.dockerHost == null) "docker";
};
users.groups.${cfg.group} = lib.mkIf (cfg.group == "komodo-periphery") { };
@@ -271,16 +521,26 @@ in
user = cfg.user;
group = cfg.group;
};
- "${cfg.rootDirectory}/repos".d = {
+ "${actualRepoDir}".d = {
mode = "0755";
user = cfg.user;
group = cfg.group;
};
- "${cfg.rootDirectory}/stacks".d = {
+ "${actualStackDir}".d = {
mode = "0755";
user = cfg.user;
group = cfg.group;
};
+ "${actualBuildDir}".d = {
+ mode = "0755";
+ user = cfg.user;
+ group = cfg.group;
+ };
+ "${cfg.rootDirectory}/keys".d = {
+ mode = "0700";
+ user = cfg.user;
+ group = cfg.group;
+ };
"${cfg.rootDirectory}/ssl".d = {
mode = "0700";
user = cfg.user;
@@ -292,35 +552,63 @@ in
description = "Komodo Periphery - Multi-server Docker and Git deployment agent";
after = [
"network-online.target"
- "docker.service"
- ];
+ ]
+ ++ lib.optional (cfg.dockerHost == null) "docker.service";
wants = [
"network-online.target"
- "docker.service"
- ];
+ ]
+ ++ lib.optional (cfg.dockerHost == null) "docker.service";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
User = cfg.user;
Group = cfg.group;
- SupplementaryGroups = [ "docker" ];
+ SupplementaryGroups = lib.mkIf (cfg.dockerHost == null) [ "docker" ];
Restart = "on-failure";
RestartSec = "10s";
WorkingDirectory = cfg.rootDirectory;
ExecStart = lib.escapeShellArgs [
- "${lib.getExe' cfg.package "periphery"}"
+ (lib.getExe' cfg.package "periphery")
"--config-path"
- (if cfg.configFile != null then cfg.configFile else configFile)
+ configFile
];
Environment = lib.mapAttrsToList (name: value: "${name}=${value}") (
- cfg.environment
- // lib.optionalAttrs (!cfg.disableTerminals) {
- PATH = "/run/current-system/sw/bin:/run/wrappers/bin";
+ lib.optionalAttrs (cfg.configFile == null) {
+ PERIPHERY_ROOT_DIRECTORY = cfg.rootDirectory;
+ PERIPHERY_REPO_DIR = actualRepoDir;
+ PERIPHERY_STACK_DIR = actualStackDir;
+ PERIPHERY_BUILD_DIR = actualBuildDir;
}
+ // lib.optionalAttrs (cfg.configFile == null && cfg.inbound.ssl.enable) {
+ PERIPHERY_SSL_KEY_FILE = cfg.inbound.ssl.keyFile;
+ PERIPHERY_SSL_CERT_FILE = cfg.inbound.ssl.certFile;
+ }
+ // lib.optionalAttrs (cfg.dockerHost != null) {
+ DOCKER_HOST = cfg.dockerHost;
+ }
+ // lib.optionalAttrs (cfg.passkeyFiles != null) {
+ PERIPHERY_PASSKEYS_FILE = cfg.passkeyFiles;
+ }
+ // lib.optionalAttrs (cfg.auth.privateKey != "") {
+ PERIPHERY_PRIVATE_KEY = cfg.auth.privateKey;
+ }
+ // lib.optionalAttrs (cfg.auth.corePublicKeys != [ ]) {
+ PERIPHERY_CORE_PUBLIC_KEYS = lib.concatStringsSep "," cfg.auth.corePublicKeys;
+ }
+ // lib.optionalAttrs (cfg.outbound.onboardingKeyFile != null) {
+ PERIPHERY_ONBOARDING_KEY_FILE = cfg.outbound.onboardingKeyFile;
+ }
+ // cfg.environment
);
+
+ ExecSearchPath = lib.mkIf (!cfg.disableTerminals) [
+ "/run/current-system/sw/bin"
+ "/run/wrappers/bin"
+ ];
+
EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile;
StateDirectory = "komodo-periphery";
@@ -329,7 +617,7 @@ in
NoNewPrivileges = true;
PrivateTmp = true;
ProtectSystem = "full";
- ProtectHome = true;
+ ProtectHome = "read-only";
};
};
};
diff --git a/nixos/modules/services/audio/botamusique.nix b/nixos/modules/services/audio/botamusique.nix
deleted file mode 100644
index 1017d8d6fd0b..000000000000
--- a/nixos/modules/services/audio/botamusique.nix
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-let
- cfg = config.services.botamusique;
-
- format = pkgs.formats.ini { };
- configFile = format.generate "botamusique.ini" cfg.settings;
-in
-{
- options.services.botamusique = {
- enable = lib.mkEnableOption "botamusique, a bot to play audio streams on mumble";
-
- package = lib.mkPackageOption pkgs "botamusique" { };
-
- settings = lib.mkOption {
- type =
- with lib.types;
- submodule {
- freeformType = format.type;
- options = {
- server.host = lib.mkOption {
- type = types.str;
- default = "localhost";
- example = "mumble.example.com";
- description = "Hostname of the mumble server to connect to.";
- };
-
- server.port = lib.mkOption {
- type = types.port;
- default = 64738;
- description = "Port of the mumble server to connect to.";
- };
-
- bot.username = lib.mkOption {
- type = types.str;
- default = "botamusique";
- description = "Name the bot should appear with.";
- };
-
- bot.comment = lib.mkOption {
- type = types.str;
- default = "Hi, I'm here to play radio, local music or youtube/soundcloud music. Have fun!";
- description = "Comment displayed for the bot.";
- };
- };
- };
- default = { };
- description = ''
- Your {file}`configuration.ini` as a Nix attribute set. Look up
- possible options in the [configuration.example.ini](https://github.com/azlux/botamusique/blob/master/configuration.example.ini).
- '';
- };
- };
-
- config = lib.mkIf cfg.enable {
- systemd.services.botamusique = {
- after = [ "network.target" ];
- wantedBy = [ "multi-user.target" ];
-
- unitConfig.Documentation = "https://github.com/azlux/botamusique/wiki";
-
- environment.HOME = "/var/lib/botamusique";
-
- serviceConfig = {
- ExecStart = "${cfg.package}/bin/botamusique --config ${configFile}";
- Restart = "always"; # the bot exits when the server connection is lost
-
- # Hardening
- CapabilityBoundingSet = [ "" ];
- DynamicUser = true;
- IPAddressDeny = [
- "link-local"
- "multicast"
- ];
- LockPersonality = true;
- MemoryDenyWriteExecute = true;
- ProcSubset = "pid";
- PrivateDevices = true;
- PrivateUsers = true;
- PrivateTmp = true;
- ProtectClock = true;
- ProtectControlGroups = true;
- ProtectHome = true;
- ProtectHostname = true;
- ProtectKernelLogs = true;
- ProtectKernelModules = true;
- ProtectKernelTunables = true;
- ProtectProc = "invisible";
- ProtectSystem = "strict";
- RestrictNamespaces = true;
- RestrictRealtime = true;
- RestrictAddressFamilies = [
- "AF_INET"
- "AF_INET6"
- ];
- StateDirectory = "botamusique";
- SystemCallArchitectures = "native";
- SystemCallFilter = [
- "@system-service @resources"
- "~@privileged"
- ];
- UMask = "0077";
- WorkingDirectory = "/var/lib/botamusique";
- };
- };
- };
-}
diff --git a/nixos/modules/services/audio/gonic.nix b/nixos/modules/services/audio/gonic.nix
index da259d6957d9..d1b150b6501f 100644
--- a/nixos/modules/services/audio/gonic.nix
+++ b/nixos/modules/services/audio/gonic.nix
@@ -93,6 +93,7 @@ in
];
RestrictNamespaces = true;
PrivateDevices = true;
+ PrivateTmp = true;
PrivateUsers = true;
ProtectClock = true;
ProtectControlGroups = true;
diff --git a/nixos/modules/services/audio/music-assistant.nix b/nixos/modules/services/audio/music-assistant.nix
index a2a383bce8cd..be69ad9ba057 100644
--- a/nixos/modules/services/audio/music-assistant.nix
+++ b/nixos/modules/services/audio/music-assistant.nix
@@ -83,7 +83,18 @@ in
lib.optional cfg.enable 8097 # Music Assistant stream port
++ lib.optional (lib.elem "airplay" cfg.providers) 7000
++ lib.optional (lib.elem "sendspin" cfg.providers) 8927
- ++ lib.optional (lib.elem "snapcast" cfg.providers) 1780;
+ ++ lib.optional (lib.elem "snapcast" cfg.providers) 1780
+ ++ lib.optionals (lib.elem "squeezelite" cfg.providers) [
+ # https://lyrion.org/reference/slimproto-protocol/
+ 3483 # Slimproto control
+ # https://lyrion.org/reference/cli/using-the-cli/
+ 9000 # Slimproto JSON-RPC
+ 9090 # Slimproto CLI
+ ];
+ allowedUDPPorts = lib.optionals (lib.elem "squeezelite" cfg.providers) [
+ # https://lyrion.org/reference/slimproto-protocol/
+ 3483 # Slimproto discovery
+ ];
# The information published by Apple 1 seem to not apply to libraop.
# The closest we could find that represents the port range being used as observed by tcpdump is the ephemeral port range.
# 1: https://support.apple.com/en-us/103229#:~:text=49152%E2%80%93-,65535,-TCP%2C%20UDP
@@ -96,13 +107,17 @@ in
];
};
- services.avahi = lib.mkIf (lib.elem "airplay_receiver" cfg.providers) {
- enable = true;
- openFirewall = lib.mkIf cfg.openFirewall true;
- publish = {
+ services = {
+ avahi = lib.mkIf (lib.elem "airplay_receiver" cfg.providers) {
enable = true;
- userServices = true;
+ openFirewall = lib.mkIf cfg.openFirewall true;
+ publish = {
+ enable = true;
+ userServices = true;
+ };
};
+
+ music-assistant.providers = cfg.package.providersBuiltins;
};
systemd.services.music-assistant = {
@@ -131,9 +146,12 @@ in
++ lib.optionals (lib.elem "airplay_receiver" cfg.providers) [
shairport-sync
]
- ++ lib.optionals (lib.elem "spotify" cfg.providers || lib.elem "spotify_connect" cfg.providers) [
+ ++ lib.optionals (lib.elem "spotify" cfg.providers) [
librespot-ma
]
+ ++ lib.optionals (lib.elem "spotify_connect" cfg.providers) [
+ go-librespot
+ ]
++ lib.optionals (lib.elem "snapcast" cfg.providers) [
snapcast
]
@@ -156,8 +174,12 @@ in
DevicePolicy = "closed";
LockPersonality = true;
# breaks pyopenssl's cffi calls, used in remote access feature
+ # not compatible with llvmlite which is required by numba -> librosa
MemoryDenyWriteExecute = false;
- ProcSubset = "pid";
+ # required for torch to properly detect the supported engines
+ # allows Music-Assistant to warn, if x86_64-v2 cpu features are missing
+ BindReadOnlyPaths = [ "/proc/cpuinfo" ];
+ ProcSubset = "all";
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
@@ -179,7 +201,7 @@ in
SystemCallArchitectures = "native";
SystemCallFilter = [
"@system-service"
- "~@privileged @resources"
+ "~@privileged"
"mbind"
]
++ lib.optionals useYTMusic [
diff --git a/nixos/modules/services/backup/duplicati.nix b/nixos/modules/services/backup/duplicati.nix
index b69510f0aecb..7ee92591d35a 100644
--- a/nixos/modules/services/backup/duplicati.nix
+++ b/nixos/modules/services/backup/duplicati.nix
@@ -72,7 +72,7 @@ in
Each line in this option should be of the format --option=value.
The options in this file take precedence over the options provided
through command line arguments.
- Duplicati docs: parameters-file
+ [Duplicati docs: parameters-file](https://duplicati.readthedocs.io/en/latest/06-advanced-options/#parameters-file)
'';
};
@@ -85,7 +85,7 @@ in
Each line in the file option should be of the format --option=value.
The options in this file take precedence over the options provided
through command line arguments.
- Duplicati docs: parameters-file
+ [Duplicati docs: parameters-file](https://duplicati.readthedocs.io/en/latest/06-advanced-options/#parameters-file)
'';
};
};
diff --git a/nixos/modules/services/backup/sanoid.nix b/nixos/modules/services/backup/sanoid.nix
index b8b64075b1d5..ff033e0e2a94 100644
--- a/nixos/modules/services/backup/sanoid.nix
+++ b/nixos/modules/services/backup/sanoid.nix
@@ -275,7 +275,7 @@ in
"${cfg.package}/bin/sanoid"
"--cron"
"--configdir"
- (pkgs.writeTextDir "sanoid.conf" configFile)
+ "/etc/sanoid"
]
++ cfg.extraArgs
);
@@ -290,6 +290,8 @@ in
after = [ "zfs.target" ];
startAt = cfg.interval;
};
+
+ environment.etc."sanoid/sanoid.conf".text = configFile;
};
meta.maintainers = with lib.maintainers; [ lopsided98 ];
diff --git a/nixos/modules/services/backup/syncoid.nix b/nixos/modules/services/backup/syncoid.nix
index 4fda57e8214c..8bfb3d70a6e6 100644
--- a/nixos/modules/services/backup/syncoid.nix
+++ b/nixos/modules/services/backup/syncoid.nix
@@ -459,7 +459,8 @@ in
"~@privileged"
"~@resources"
"~@setuid"
- "~@timer"
+ # NB: pv after 1.11.0 uses timer syscalls (specifically setitimer)
+ # "~@timer"
];
SystemCallArchitectures = "native";
# This is for BindPaths= and BindReadOnlyPaths=
diff --git a/nixos/modules/services/continuous-integration/hydra/default.nix b/nixos/modules/services/continuous-integration/hydra/default.nix
index 2fd38e50459d..65df56ef39f1 100644
--- a/nixos/modules/services/continuous-integration/hydra/default.nix
+++ b/nixos/modules/services/continuous-integration/hydra/default.nix
@@ -360,7 +360,7 @@ in
${lib.optionalString haveLocalDB ''
if ! [ -e ${baseDir}/.db-created ]; then
runuser -u ${config.services.postgresql.superUser} ${config.services.postgresql.package}/bin/createuser hydra
- runuser -u ${config.services.postgresql.superUser} ${config.services.postgresql.package}/bin/createdb -O hydra hydra
+ runuser -u ${config.services.postgresql.superUser} ${config.services.postgresql.package}/bin/createdb -- -O hydra hydra
touch ${baseDir}/.db-created
fi
echo "create extension if not exists pg_trgm" | runuser -u ${config.services.postgresql.superUser} -- ${config.services.postgresql.package}/bin/psql hydra
diff --git a/nixos/modules/services/databases/mysql.nix b/nixos/modules/services/databases/mysql.nix
index 4a196efc7758..cfd7c8c76af3 100644
--- a/nixos/modules/services/databases/mysql.nix
+++ b/nixos/modules/services/databases/mysql.nix
@@ -293,6 +293,19 @@ in
'';
};
+ secureSuperUserByDefault = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = ''
+ Whether to automatically secure the root@localhost user with auth_socket authentication.
+
+ ::: {.note}
+ When enabled (default), the module will ensure root@localhost uses socket authentication,
+ preventing any local user from connecting as root without proper credentials.
+ :::
+ '';
+ };
+
replication = {
role = lib.mkOption {
type = lib.types.enum [
@@ -411,6 +424,10 @@ in
assertion = !cfg.galeraCluster.enable || isMariaDB;
message = "'services.mysql.galeraCluster.enable' expect services.mysql.package to be an mariadb variant";
}
+ {
+ assertion = !isMariaDB || cfg.secureSuperUserByDefault == true;
+ message = "'services.mysql.secureSuperUserByDefault' has no effect on MariaDB (which is already secure by default)";
+ }
]
# galeraCluster options checks
++ lib.optionals cfg.galeraCluster.enable [
@@ -571,6 +588,7 @@ in
let
# The super user account to use on *first* run of MySQL server
superUser = if isMariaDB then cfg.user else "root";
+ isStateVersion2611Plus = lib.versionAtLeast config.system.stateVersion "26.11";
in
''
${lib.optionalString isMariaDB ''
@@ -651,9 +669,35 @@ in
cat ${toString cfg.initialScript} | ${cfg.package}/bin/mysql -u ${superUser} -N
''}
+ # Secure root@localhost for MySQL/Percona on first initialization
+ ${lib.optionalString (cfg.secureSuperUserByDefault && !isMariaDB) ''
+ echo "ALTER USER root@localhost IDENTIFIED WITH auth_socket;" | ${cfg.package}/bin/mysql -u ${superUser} -N
+ ''}
+
rm ${cfg.dataDir}/mysql_init
fi
+ ${lib.optionalString (cfg.secureSuperUserByDefault && !isMariaDB) ''
+ # We try to detect if we are in the default insecure auth mode for MySQL (all users can connect with password)
+ # If the configuration has been moved to the socket-peer credential authentication we do nothing
+ # If we are not able to connect it also means the default setup has been adjusted, so we also skip and do not do any changes
+ if plugin_info=$(${cfg.package}/bin/mysql -u ${superUser} --skip-column-names 2>/dev/null -e "SELECT plugin FROM mysql.user WHERE user = 'root' AND host = 'localhost';"); then
+ case "$plugin_info" in
+ *auth_socket*) ;;
+ *)
+ ${lib.optionalString isStateVersion2611Plus ''
+ # Attempt to auto-fix to prevent local authentication without a password
+ echo "Securing root@localhost with auth_socket to local connection without password, see https://github.com/NixOS/nixpkgs/security/advisories/GHSA-6qxx-6rg8-c4p8" >&2
+ echo "ALTER USER root@localhost IDENTIFIED WITH auth_socket;" | ${cfg.package}/bin/mysql -u ${superUser} -N
+ ''}
+ ${lib.optionalString (!isStateVersion2611Plus) ''
+ echo "Security warning: root@localhost seems to have open authentication, consider adjusting your configuration. See https://github.com/NixOS/nixpkgs/security/advisories/GHSA-6qxx-6rg8-c4p8" >&2
+ ''}
+ ;;
+ esac
+ fi
+ ''}
+
${lib.optionalString (cfg.ensureDatabases != [ ]) ''
(
${lib.concatMapStrings (database: ''
diff --git a/nixos/modules/services/databases/postgresql.md b/nixos/modules/services/databases/postgresql.md
index 27fe409579f1..96cdff8a3e82 100644
--- a/nixos/modules/services/databases/postgresql.md
+++ b/nixos/modules/services/databases/postgresql.md
@@ -194,7 +194,7 @@ For an upgrade, a script like this can be used to simplify the process:
# XXX specify the postgresql package you'd like to upgrade to.
# Do not forget to list the extensions you need.
newPostgres = pkgs.postgresql_15.withPackages (pp: [
- # pp.plv8
+ # pp.pl_cron
]);
cfg = config.services.postgresql;
in
diff --git a/nixos/modules/services/databases/postgresql.nix b/nixos/modules/services/databases/postgresql.nix
index 2040d2be5bb1..f5350ad727ad 100644
--- a/nixos/modules/services/databases/postgresql.nix
+++ b/nixos/modules/services/databases/postgresql.nix
@@ -204,7 +204,9 @@ in
type = types.package;
example = literalExpression "pkgs.postgresql_15";
defaultText = literalExpression ''
- if versionAtLeast config.system.stateVersion "25.11" then
+ if versionAtLeast config.system.stateVersion "26.11" then
+ pkgs.postgresql_18
+ else if versionAtLeast config.system.stateVersion "25.11" then
pkgs.postgresql_17
else if versionAtLeast config.system.stateVersion "24.11" then
pkgs.postgresql_16
@@ -657,7 +659,9 @@ in
'';
base =
# XXX Don't forget to keep `defaultText` of `services.postgresql.package` up to date!
- if versionAtLeast config.system.stateVersion "25.11" then
+ if versionAtLeast config.system.stateVersion "26.11" then
+ pkgs.postgresql_18
+ else if versionAtLeast config.system.stateVersion "25.11" then
pkgs.postgresql_17
else if versionAtLeast config.system.stateVersion "24.11" then
pkgs.postgresql_16
@@ -705,9 +709,6 @@ in
"~@privileged" = true;
"~@resources" = true;
})
- (mkIf (any extensionInstalled [ "plv8" ]) {
- "@pkey" = true;
- })
(mkIf (any extensionInstalled [ "citus" ]) {
"getpriority" = true;
"setpriority" = true;
@@ -807,9 +808,7 @@ in
PrivateTmp = true;
ProtectHome = true;
ProtectSystem = "strict";
- MemoryDenyWriteExecute = lib.mkDefault (
- cfg.settings.jit == "off" && (!any extensionInstalled [ "plv8" ])
- );
+ MemoryDenyWriteExecute = lib.mkDefault (cfg.settings.jit == "off");
NoNewPrivileges = true;
LockPersonality = true;
PrivateDevices = true;
diff --git a/nixos/modules/services/databases/redis.nix b/nixos/modules/services/databases/redis.nix
index b735ffd79e70..0eab7103edda 100644
--- a/nixos/modules/services/databases/redis.nix
+++ b/nixos/modules/services/databases/redis.nix
@@ -30,6 +30,8 @@ let
in
{
+ meta.teams = [ lib.teams.redis ];
+
imports = [
(lib.mkRemovedOptionModule [
"services"
diff --git a/nixos/modules/services/desktop-managers/budgie.nix b/nixos/modules/services/desktop-managers/budgie.nix
index 29bdb469d7f1..807d6b019b72 100644
--- a/nixos/modules/services/desktop-managers/budgie.nix
+++ b/nixos/modules/services/desktop-managers/budgie.nix
@@ -243,6 +243,8 @@ in
# Required by Budgie's Polkit Dialog.
security.polkit.enable = mkDefault true;
+ # Required by Budige's Control Center and Desktop
+ security.polkit.enablePkexecWrapper = mkDefault true;
# Required by Budgie Panel plugins and/or Budgie Control Center panels.
networking.networkmanager.enable = mkDefault true; # for BCC's Network panel.
diff --git a/nixos/modules/services/desktop-managers/cosmic.nix b/nixos/modules/services/desktop-managers/cosmic.nix
index c780a5164922..98bc4b933500 100644
--- a/nixos/modules/services/desktop-managers/cosmic.nix
+++ b/nixos/modules/services/desktop-managers/cosmic.nix
@@ -20,7 +20,7 @@ let
with pkgs;
[
cosmic-applets
- cosmic-applibrary
+ cosmic-app-library
cosmic-bg
cosmic-comp
cosmic-files
@@ -84,6 +84,7 @@ in
alsa-utils
cosmic-edit
cosmic-icons
+ cosmic-monitor
cosmic-player
cosmic-randr
cosmic-reader
@@ -124,16 +125,7 @@ in
};
};
- systemd = {
- packages = [ pkgs.cosmic-session ];
- user.targets = {
- # TODO: remove when upstream has XDG autostart support
- cosmic-session = {
- wants = [ "xdg-desktop-autostart.target" ];
- before = [ "xdg-desktop-autostart.target" ];
- };
- };
- };
+ systemd.packages = [ pkgs.cosmic-session ];
fonts.packages = with pkgs; [
fira
@@ -146,7 +138,10 @@ in
environment.sessionVariables.X11_EXTRA_RULES_XML = "${config.services.xserver.xkb.dir}/rules/base.extras.xml";
programs.dconf.enable = true;
programs.dconf.packages = [ pkgs.cosmic-session ];
- security.polkit.enable = true;
+ security.polkit = {
+ enable = true;
+ enablePkexecWrapper = lib.mkDefault true;
+ };
security.rtkit.enable = true;
services.accounts-daemon.enable = true;
services.displayManager.sessionPackages = [ pkgs.cosmic-session ];
diff --git a/nixos/modules/services/desktop-managers/gnome.nix b/nixos/modules/services/desktop-managers/gnome.nix
index 3747a491098f..1d850f1f26e5 100644
--- a/nixos/modules/services/desktop-managers/gnome.nix
+++ b/nixos/modules/services/desktop-managers/gnome.nix
@@ -325,7 +325,11 @@ in
i18n.inputMethod.enable = mkDefault true;
i18n.inputMethod.type = mkDefault "ibus";
programs.dconf.enable = true;
- security.polkit.enable = true;
+ security.polkit = {
+ enable = true;
+ # Required by gnome-initial-setup, gnome-system-monitor, gvfs for admin://
+ enablePkexecWrapper = lib.mkDefault true;
+ };
security.rtkit.enable = mkDefault true;
services.accounts-daemon.enable = true;
services.dleyna.enable = mkDefault true;
diff --git a/nixos/modules/services/desktop-managers/plasma6.nix b/nixos/modules/services/desktop-managers/plasma6.nix
index 0785f4f809d1..f6106d3e83fe 100644
--- a/nixos/modules/services/desktop-managers/plasma6.nix
+++ b/nixos/modules/services/desktop-managers/plasma6.nix
@@ -172,6 +172,9 @@ in
# touch keyboard
plasma-keyboard
qtvirtualkeyboard # used by plasma-keyboard KCM
+
+ # experimental(?) Union theme
+ union
]
++ lib.optional config.networking.networkmanager.enable qrca
++ lib.optionals config.hardware.sensor.iio.enable [
@@ -271,6 +274,7 @@ in
services.power-profiles-daemon.enable = mkDefault true;
services.system-config-printer.enable = mkIf config.services.printing.enable (mkDefault true);
+ programs.fuse.enable = true;
services.udisks2.enable = true;
services.upower.enable = config.powerManagement.enable;
services.libinput.enable = mkDefault true;
diff --git a/nixos/modules/services/desktops/adw-bluetooth.nix b/nixos/modules/services/desktops/adw-bluetooth.nix
new file mode 100644
index 000000000000..43c6cfe4e436
--- /dev/null
+++ b/nixos/modules/services/desktops/adw-bluetooth.nix
@@ -0,0 +1,34 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+
+let
+ cfg = config.services.adw-bluetooth;
+in
+{
+ meta.maintainers = with lib.maintainers; [ ezratweaver ];
+
+ options.services.adw-bluetooth = {
+ enable = lib.mkEnableOption "Adwaita Bluetooth daemon";
+ package = lib.mkPackageOption pkgs "adw-bluetooth" { };
+ };
+
+ config = lib.mkIf cfg.enable {
+ environment.systemPackages = [ cfg.package ];
+ services.dbus.packages = [ cfg.package ];
+
+ systemd.user.services.adw-bluetooth-daemon = {
+ description = "AdwBluetooth Daemon";
+ wantedBy = [ "default.target" ];
+ after = [ "bluetooth.target" ];
+ serviceConfig = {
+ Type = "dbus";
+ BusName = "com.ezratweaver.AdwBluetoothDaemon";
+ ExecStart = "${cfg.package}/libexec/adw-bluetooth-daemon";
+ };
+ };
+ };
+}
diff --git a/nixos/modules/services/desktops/flatpak.nix b/nixos/modules/services/desktops/flatpak.nix
index 5756738c9fda..e874cbac7a4f 100644
--- a/nixos/modules/services/desktops/flatpak.nix
+++ b/nixos/modules/services/desktops/flatpak.nix
@@ -40,6 +40,8 @@ in
pkgs.fuse3
];
+ programs.fuse.enable = true;
+
security.polkit.enable = true;
fonts.fontDir.enable = true;
diff --git a/nixos/modules/services/desktops/gnome/gnome-remote-desktop.nix b/nixos/modules/services/desktops/gnome/gnome-remote-desktop.nix
index 958fbb546dc3..eaa9399862a4 100644
--- a/nixos/modules/services/desktops/gnome/gnome-remote-desktop.nix
+++ b/nixos/modules/services/desktops/gnome/gnome-remote-desktop.nix
@@ -22,6 +22,10 @@
config = lib.mkIf config.services.gnome.gnome-remote-desktop.enable {
services.pipewire.enable = true;
services.dbus.packages = [ pkgs.gnome-remote-desktop ];
+ security.polkit = {
+ enable = true;
+ enablePkexecWrapper = lib.mkDefault true;
+ };
environment.systemPackages = [ pkgs.gnome-remote-desktop ];
diff --git a/nixos/modules/services/desktops/gvfs.nix b/nixos/modules/services/desktops/gvfs.nix
index 004810327798..cebfb0820229 100644
--- a/nixos/modules/services/desktops/gvfs.nix
+++ b/nixos/modules/services/desktops/gvfs.nix
@@ -40,6 +40,8 @@ in
environment.systemPackages = [ cfg.package ];
+ programs.fuse.enable = true;
+
services.dbus.packages = [ cfg.package ];
systemd.packages = [ cfg.package ];
diff --git a/nixos/modules/services/desktops/oo7.nix b/nixos/modules/services/desktops/oo7.nix
new file mode 100644
index 000000000000..3053354a18d7
--- /dev/null
+++ b/nixos/modules/services/desktops/oo7.nix
@@ -0,0 +1,41 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
+let
+ cfg = config.services.oo7;
+in
+{
+ options.services.oo7 = {
+ enable = lib.mkEnableOption ''
+ oo7, a service providing the Secret Service D-Bus API
+ '';
+ };
+
+ config = lib.mkIf cfg.enable {
+ environment.systemPackages = [ pkgs.oo7 ];
+ services.dbus.packages = [ pkgs.oo7-server ];
+
+ systemd = {
+ packages = [ pkgs.oo7-server ];
+ user.services.oo7-daemon.wantedBy = [ "default.target" ];
+ };
+
+ security = {
+ pam.services.login.oo7.enable = true;
+
+ wrappers.oo7-daemon = {
+ owner = "root";
+ group = "root";
+ capabilities = "cap_ipc_lock=ep";
+ source = "${pkgs.oo7-server}/libexec/oo7-daemon";
+ };
+ };
+
+ xdg.portal.extraPortals = [ pkgs.oo7-portal ];
+ };
+
+ meta = { inherit (pkgs.oo7.meta) maintainers; };
+}
diff --git a/nixos/modules/services/desktops/pipewire/pipewire.nix b/nixos/modules/services/desktops/pipewire/pipewire.nix
index 4449c273c7ec..fb72bd695cec 100644
--- a/nixos/modules/services/desktops/pipewire/pipewire.nix
+++ b/nixos/modules/services/desktops/pipewire/pipewire.nix
@@ -11,11 +11,17 @@ let
inherit (lib) maintainers teams;
inherit (lib.attrsets)
attrByPath
- attrsToList
concatMapAttrs
filterAttrs
+ mapAttrs'
+ nameValuePair
+ ;
+ inherit (lib.lists)
+ elem
+ flatten
+ optional
+ optionals
;
- inherit (lib.lists) flatten optional optionals;
inherit (lib.modules) mkIf mkRemovedOptionModule;
inherit (lib.options)
literalExpression
@@ -23,7 +29,7 @@ let
mkOption
mkPackageOption
;
- inherit (lib.strings) concatMapStringsSep hasPrefix optionalString;
+ inherit (lib.strings) hasPrefix optionalString;
inherit (lib.types)
attrsOf
bool
@@ -32,17 +38,6 @@ let
;
json = pkgs.formats.json { };
- mapToFiles =
- location: config:
- concatMapAttrs (name: value: {
- "share/pipewire/${location}.conf.d/${name}.conf" = json.generate "${name}" value;
- }) config;
- extraConfigPkgFromFiles =
- locations: filesSet:
- pkgs.runCommand "pipewire-extra-config" { } ''
- mkdir -p ${concatMapStringsSep " " (l: "$out/share/pipewire/${l}.conf.d") locations}
- ${concatMapStringsSep ";" ({ name, value }: "ln -s ${value} $out/${name}") (attrsToList filesSet)}
- '';
cfg = config.services.pipewire;
enable32BitAlsaPlugins =
cfg.alsa.support32Bit && pkgs.stdenv.hostPlatform.isx86_64 && pkgs.pkgsi686Linux.pipewire != null;
@@ -58,11 +53,24 @@ let
configPackages = cfg.configPackages;
- extraConfigPkg = extraConfigPkgFromFiles [ "pipewire" "client" "jack" "pipewire-pulse" ] (
- mapToFiles "pipewire" cfg.extraConfig.pipewire
- // mapToFiles "client" cfg.extraConfig.client
- // mapToFiles "jack" cfg.extraConfig.jack
- // mapToFiles "pipewire-pulse" cfg.extraConfig.pipewire-pulse
+ extraConfigPkg = pkgs.linkFarm "pipewire-extra-config" (
+ concatMapAttrs
+ (
+ location: config:
+ mapAttrs' (
+ name: value:
+ nameValuePair "share/pipewire/${location}.conf.d/${name}.conf" (json.generate name value)
+ ) config
+ )
+ # cfg.extraConfig contains deprecated options, i.e. client-rt
+ {
+ inherit (cfg.extraConfig)
+ pipewire
+ client
+ jack
+ pipewire-pulse
+ ;
+ }
);
configs = pkgs.buildEnv {
diff --git a/nixos/modules/services/desktops/seatd.nix b/nixos/modules/services/desktops/seatd.nix
index bedcc9a43120..939b9f338af9 100644
--- a/nixos/modules/services/desktops/seatd.nix
+++ b/nixos/modules/services/desktops/seatd.nix
@@ -40,7 +40,6 @@ in
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
seatd
- sdnotify-wrapper
];
users.groups.seat = lib.mkIf (cfg.group == "seat") { };
@@ -55,7 +54,7 @@ in
Type = "notify";
NotifyAccess = "all";
SyslogIdentifier = "seatd";
- ExecStart = "${pkgs.sdnotify-wrapper}/bin/sdnotify-wrapper ${pkgs.seatd.bin}/bin/seatd -n 1 -u ${cfg.user} -g ${cfg.group} -l ${cfg.logLevel}";
+ ExecStart = "${lib.getExe' pkgs.s6 "s6-notify-socket-from-fd"} ${pkgs.seatd.bin}/bin/seatd -n 1 -u ${cfg.user} -g ${cfg.group} -l ${cfg.logLevel}";
RestartSec = 1;
Restart = "always";
};
diff --git a/nixos/modules/services/display-managers/dms-greeter.nix b/nixos/modules/services/display-managers/dms-greeter.nix
index 5706c900c6f2..9814e5cdc25a 100644
--- a/nixos/modules/services/display-managers/dms-greeter.nix
+++ b/nixos/modules/services/display-managers/dms-greeter.nix
@@ -4,7 +4,6 @@
pkgs,
...
}:
-
let
inherit (lib)
types
@@ -24,13 +23,27 @@ let
cfgAutoLogin = config.services.displayManager.autoLogin;
sessionData = config.services.displayManager.sessionData;
+ # Miracle WM is nested under `programs.wayland.miracle-wm` unlike the rest
+ compositorOption =
+ if cfg.compositor.name == "miracle-wm" then "wayland.miracle-wm" else "${cfg.compositor.name}";
cacheDir = "/var/lib/dms-greeter";
+ # Not all compositor packages match the name they use and Miracle does not have a package option
+ compositorPkg =
+ if cfg.compositor.name == "miracle-wm" then
+ pkgs.miracle-wm
+ else
+ lib.attrByPath [
+ "programs"
+ cfg.compositor.name
+ "package"
+ ] null config;
+
greeterScript = pkgs.writeShellScriptBin "dms-greeter-start" ''
export PATH=$PATH:${
makeBinPath [
cfg.quickshell.package
- config.programs.${cfg.compositor.name}.package
+ compositorPkg
]
}
${
@@ -123,6 +136,9 @@ in
"niri"
"hyprland"
"sway"
+ "mangowc"
+ "miracle-wm"
+ "labwc"
];
example = "niri";
description = ''
@@ -135,6 +151,9 @@ in
- niri: A scrollable-tiling Wayland compositor
- hyprland: A dynamic tiling Wayland compositor
- sway: An i3-compatible Wayland compositor
+ - mango: A dwm-inspired Wayland compositor with modern config options and multiple layouts
+ - miracle-wm: A keyboard-driven Wayland compositor with smooth animations and extensibility
+ - labwc: Lightweight stacking Wayland compositor inspired by Openbox
'';
};
@@ -242,12 +261,16 @@ in
config = mkIf cfg.enable {
assertions = [
{
- assertion = config.programs.${cfg.compositor.name}.enable or false;
+ assertion =
+ # Assemble the full attribute structure because miracle-wm is not nested in the same location as the others
+ lib.attrByPath (
+ [ "programs" ] ++ lib.splitString "." compositorOption ++ [ "enable" ]
+ ) false config;
message = ''
DankMaterialShell greeter: The compositor "${cfg.compositor.name}" is not enabled.
Please enable the compositor via:
- programs.${cfg.compositor.name}.enable = true;
+ programs.${compositorOption}.enable = true;
'';
}
{
diff --git a/nixos/modules/services/display-managers/gdm.nix b/nixos/modules/services/display-managers/gdm.nix
index b10c60436919..ea912d70b0af 100644
--- a/nixos/modules/services/display-managers/gdm.nix
+++ b/nixos/modules/services/display-managers/gdm.nix
@@ -200,8 +200,6 @@ in
config = lib.mkIf cfg.enable {
- warnings = lib.optional config.services.pulseaudio.enable "Support for Pulseaudio + gdm will be removed in NixOS 26.11";
-
services.xserver.displayManager.lightdm.enable = false;
users.users = lib.mkMerge [
@@ -423,7 +421,7 @@ in
{
name = "unix";
control = "sufficient";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
}
];
@@ -569,7 +567,7 @@ in
{
name = "unix";
control = "sufficient";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
}
];
@@ -577,7 +575,7 @@ in
{
name = "unix";
control = "requisite";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
settings.nullok = true;
settings.yescrypt = true;
}
diff --git a/nixos/modules/services/display-managers/plasma-login-manager.nix b/nixos/modules/services/display-managers/plasma-login-manager.nix
index 65a16671bda0..b0d2fb01b76e 100644
--- a/nixos/modules/services/display-managers/plasma-login-manager.nix
+++ b/nixos/modules/services/display-managers/plasma-login-manager.nix
@@ -201,7 +201,7 @@ in
# Setup session
name = "unix";
control = "required";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
}
{
name = "systemd";
diff --git a/nixos/modules/services/display-managers/sddm.nix b/nixos/modules/services/display-managers/sddm.nix
index 38725bf280f5..11a1089b4598 100644
--- a/nixos/modules/services/display-managers/sddm.nix
+++ b/nixos/modules/services/display-managers/sddm.nix
@@ -442,7 +442,7 @@ in
{
name = "unix";
control = "sufficient";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
}
];
diff --git a/nixos/modules/services/editors/emacs.nix b/nixos/modules/services/editors/emacs.nix
index 2cf753484a80..c47577a6ce09 100644
--- a/nixos/modules/services/editors/emacs.nix
+++ b/nixos/modules/services/editors/emacs.nix
@@ -80,6 +80,9 @@ in
unitConfig = lib.optionalAttrs cfg.startWithGraphical {
After = "graphical-session.target";
};
+
+ # Long-lived session that ought to only be restarted manually
+ restartIfChanged = false;
}
// lib.optionalAttrs cfg.enable {
wantedBy = if cfg.startWithGraphical then [ "graphical-session.target" ] else [ "default.target" ];
diff --git a/nixos/modules/services/games/quake3-server.nix b/nixos/modules/services/games/quake3-server.nix
index 9a94ce2293db..43aad73a4b04 100644
--- a/nixos/modules/services/games/quake3-server.nix
+++ b/nixos/modules/services/games/quake3-server.nix
@@ -127,6 +127,4 @@ in
};
};
};
-
- meta.maintainers = with lib.maintainers; [ f4814n ];
}
diff --git a/nixos/modules/services/hardware/pcscd.nix b/nixos/modules/services/hardware/pcscd.nix
index f7e23df84f01..0b9aae8e2bbd 100644
--- a/nixos/modules/services/hardware/pcscd.nix
+++ b/nixos/modules/services/hardware/pcscd.nix
@@ -10,8 +10,6 @@ let
builtins.concatStringsSep "\n\n" config.services.pcscd.readerConfigs
);
- package = if config.security.polkit.enable then pkgs.pcscliteWithPolkit else pkgs.pcsclite;
-
pluginEnv = pkgs.buildEnv {
name = "pcscd-plugins";
paths = map (p: "${p}/pcsc/drivers") config.services.pcscd.plugins;
@@ -36,6 +34,11 @@ in
options.services.pcscd = {
enable = lib.mkEnableOption "PCSC-Lite daemon, to access smart cards using SCard API (PC/SC)";
+ package = (lib.mkPackageOption pkgs "pcsclite" { }) // {
+ default = if config.security.polkit.enable then pkgs.pcscliteWithPolkit else pkgs.pcsclite;
+ defaultText = lib.literalExpression "if config.security.polkit.enable then pkgs.pcscliteWithPolkit else pkgs.pcsclite";
+ };
+
plugins = lib.mkOption {
type = lib.types.listOf lib.types.package;
defaultText = lib.literalExpression "[ pkgs.ccid ]";
@@ -101,8 +104,8 @@ in
config = lib.mkIf config.services.pcscd.enable {
environment.etc."reader.conf".source = cfgFile;
- environment.systemPackages = [ package ];
- systemd.packages = [ package ];
+ environment.systemPackages = [ cfg.package ];
+ systemd.packages = [ cfg.package ];
services.pcscd.plugins = [ pkgs.ccid ];
@@ -133,7 +136,7 @@ in
# https://github.com/NixOS/nixpkgs/issues/121088
serviceConfig.ExecStart = [
""
- "${lib.getExe package} -f -x -c ${cfgFile} ${lib.escapeShellArgs cfg.extraArgs}"
+ "${lib.getExe cfg.package} -f -x -c ${cfgFile} ${lib.escapeShellArgs cfg.extraArgs}"
];
};
diff --git a/nixos/modules/services/hardware/sane_extra_backends/brscan5_etc_files.nix b/nixos/modules/services/hardware/sane_extra_backends/brscan5_etc_files.nix
index 074126518b45..fe156c0c9e32 100644
--- a/nixos/modules/services/hardware/sane_extra_backends/brscan5_etc_files.nix
+++ b/nixos/modules/services/hardware/sane_extra_backends/brscan5_etc_files.nix
@@ -58,17 +58,17 @@ stdenv.mkDerivation {
dontConfigure = true;
buildPhase = ''
- TARGET_DIR="$out/etc/opt/brother/scanner/brscan5"
+ TARGET_DIR="$out/tmp"
mkdir -p "$TARGET_DIR"
cp -rp "./models" "$TARGET_DIR"
cp -rp "./brscan5.ini" "$TARGET_DIR"
cp -rp "./brsanenetdevice.cfg" "$TARGET_DIR"
-
export NIX_REDIRECTS="/etc/opt/brother/scanner/brscan5/=$TARGET_DIR/"
-
printf '${addAllNetDev netDevices}\n'
-
${addAllNetDev netDevices}
+
+ mkdir -p "$out/etc/opt/brother/scanner/brscan5"
+ mv -T "$TARGET_DIR" "$out/etc/opt/brother/scanner/brscan5"
'';
dontInstall = true;
diff --git a/nixos/modules/services/hardware/tuned.nix b/nixos/modules/services/hardware/tuned.nix
index 65a857f4fde8..f399dc55c306 100644
--- a/nixos/modules/services/hardware/tuned.nix
+++ b/nixos/modules/services/hardware/tuned.nix
@@ -246,7 +246,10 @@ in
systemPackages = [ cfg.package ];
};
- security.polkit.enable = lib.mkDefault true;
+ security.polkit = {
+ enable = lib.mkDefault true;
+ enablePkexecWrapper = lib.mkDefault true;
+ };
services = {
dbus.packages = [ cfg.package ];
diff --git a/nixos/modules/services/hardware/udev.nix b/nixos/modules/services/hardware/udev.nix
index 1299a5115a5f..1f28286b059d 100644
--- a/nixos/modules/services/hardware/udev.nix
+++ b/nixos/modules/services/hardware/udev.nix
@@ -461,10 +461,17 @@ in
"${config.boot.initrd.systemd.package}/lib/systemd/systemd-udevd"
"${config.boot.initrd.systemd.package}/lib/udev/ata_id"
"${config.boot.initrd.systemd.package}/lib/udev/cdrom_id"
- "${config.boot.initrd.systemd.package}/lib/udev/dmi_memory_id"
"${config.boot.initrd.systemd.package}/lib/udev/scsi_id"
"${config.boot.initrd.systemd.package}/lib/udev/rules.d"
]
+ ++ lib.optional (
+ # https://github.com/systemd/systemd/blob/v259/meson.build#L1529-L1530
+ pkgs.stdenv.hostPlatform.isx86
+ || pkgs.stdenv.hostPlatform.isAarch
+ || pkgs.stdenv.hostPlatform.isLoongArch64
+ || pkgs.stdenv.hostPlatform.isMips
+ || pkgs.stdenv.hostPlatform.isRiscV64
+ ) "${config.boot.initrd.systemd.package}/lib/udev/dmi_memory_id"
++ map (x: "${x}/bin") config.boot.initrd.services.udev.binPackages;
# Generate the udev rules for the initrd
diff --git a/nixos/modules/services/hardware/watt.nix b/nixos/modules/services/hardware/watt.nix
new file mode 100644
index 000000000000..56b3d6f5036d
--- /dev/null
+++ b/nixos/modules/services/hardware/watt.nix
@@ -0,0 +1,71 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
+let
+ inherit (lib)
+ mkIf
+ mkOption
+ mkEnableOption
+ mkPackageOption
+ getExe
+ ;
+ inherit (lib.types) submodule;
+
+ cfg = config.services.watt;
+
+ format = pkgs.formats.toml { };
+ cfgFile = format.generate "watt-config.toml" cfg.settings;
+
+ conflictingServices = [
+ "power-profiles-daemon"
+ "auto-cpufreq"
+ "tlp"
+ "cpupower-gui"
+ "thermald"
+ ];
+
+in
+{
+ options.services.watt = {
+ enable = mkEnableOption "automatic CPU speed & power optimizer for Linux";
+ package = mkPackageOption pkgs "watt" { };
+
+ settings = mkOption {
+ default = { };
+ type = submodule { freeformType = format.type; };
+ description = "Configuration for Watt. Options at https://github.com/notaShelf/watt";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ assertions = map (service: {
+ assertion = !config.services.${service}.enable;
+ message = "You have set services.${service}.enable = true; which conflicts with Watt.";
+ }) conflictingServices;
+
+ environment.systemPackages = [ cfg.package ];
+
+ # This is necessary for the Watt CLI. The environment variable
+ # passed to the systemd service will take priority in read order.
+ environment.etc."watt.toml".source = cfgFile;
+
+ services.dbus.packages = [ cfg.package ];
+
+ systemd.services.watt = {
+ wantedBy = [ "multi-user.target" ];
+ conflicts = map (service: "${service}.service") conflictingServices;
+ serviceConfig = {
+ WorkingDirectory = "";
+ ExecStart = getExe cfg.package;
+ Restart = "on-failure";
+
+ RuntimeDirectory = "watt";
+ RuntimeDirectoryMode = "0755";
+ };
+ };
+
+ };
+}
diff --git a/nixos/modules/services/home-automation/wyoming/faster-whisper.nix b/nixos/modules/services/home-automation/wyoming/faster-whisper.nix
index 834cd7c6b774..c0851d190ec8 100644
--- a/nixos/modules/services/home-automation/wyoming/faster-whisper.nix
+++ b/nixos/modules/services/home-automation/wyoming/faster-whisper.nix
@@ -39,6 +39,17 @@ in
options = {
enable = mkEnableOption "Wyoming faster-whisper server";
+ task = mkOption {
+ type = enum [
+ "transcribe"
+ "translate"
+ ];
+ default = "transcribe";
+ description = ''
+ Whisper task to perform.
+ '';
+ };
+
zeroconf = {
enable = mkEnableOption "zeroconf discovery" // {
default = true;
@@ -349,6 +360,8 @@ in
options.uri
"--device"
options.device
+ "--whisper-task"
+ options.task
"--stt-library"
options.sttLibrary
"--model"
diff --git a/nixos/modules/services/home-automation/zigbee2mqtt.nix b/nixos/modules/services/home-automation/zigbee2mqtt.nix
index 1372d2a8d097..5fe8b3a68db7 100644
--- a/nixos/modules/services/home-automation/zigbee2mqtt.nix
+++ b/nixos/modules/services/home-automation/zigbee2mqtt.nix
@@ -84,6 +84,7 @@ in
StateDirectory = "zigbee2mqtt";
StateDirectoryMode = "0700";
Restart = "on-failure";
+ RestartSec = 10;
# Hardening
CapabilityBoundingSet = "";
@@ -113,6 +114,7 @@ in
"AF_INET"
"AF_INET6"
"AF_NETLINK"
+ "AF_UNIX"
];
RestrictNamespaces = true;
RestrictRealtime = true;
diff --git a/nixos/modules/services/mail/dovecot.nix b/nixos/modules/services/mail/dovecot.nix
index 2c00b3ee6529..48b0795c53c1 100644
--- a/nixos/modules/services/mail/dovecot.nix
+++ b/nixos/modules/services/mail/dovecot.nix
@@ -7,7 +7,6 @@
let
inherit (lib)
- all
attrsToList
concatMapStringsSep
concatStringsSep
@@ -19,7 +18,6 @@ let
isBool
isDerivation
isInt
- isList
isPath
isString
listToAttrs
@@ -98,53 +96,67 @@ let
i: n: v:
"${i}${toString n} = ${v}";
- formatKeyValue =
- indent: n: v:
- if (v == null) then
- ""
- else if isInt v then
- toOption indent n (toString v)
+ isPrimitive = v: !isAttrs v || isDerivation v;
+
+ formatPrimitive =
+ v:
+ if isInt v then
+ toString v
else if isBool v then
- toOption indent n (yesOrNo v)
+ yesOrNo v
else if isString v then
- toOption indent n v
- else if isList v then
- if all isString v then
- toOption indent n (concatStringsSep " " v)
- else
- map (formatKeyValue indent n) v
+ v
else if isPath v || isDerivation v then
# paths -> copy to store
# derivations -> just use output path instead of looping over the attrs
- toOption indent n "${v}"
- else if isAttrs v && v ? _section then
- let
- sectionType = v._section.type;
- sectionName = v._section.name;
- sectionTitle = concatStringsSep " " (
- filter (s: s != null) [
- sectionType
- sectionName
- ]
- );
- in
- concatStringsSep "\n" (
- [
- "${indent}${sectionTitle} {"
- ]
- ++ (mapAttrsToList (formatKeyValue "${indent} ") (removeAttrs v [ "_section" ]))
- ++ [ "${indent}}" ]
- )
- else if isAttrs v then
- concatStringsSep "\n" (
- [
- "${indent}${n} {"
- ]
- ++ (mapAttrsToList (formatKeyValue "${indent} ") v)
- ++ [ "${indent}}" ]
- )
+ "${v}"
else
- throw (traceSeq v "services.dovecot2.settings: unexpected type");
+ throw (traceSeq v "services.dovecot2.settings: unexpected primitive type");
+
+ formatSection =
+ indent: n: v:
+ let
+ sectionTitle =
+ if v ? _section then
+ concatStringsSep " " (
+ filter (s: s != null) [
+ v._section.type
+ v._section.name
+ ]
+ )
+ else
+ n;
+ inner = removeAttrs v [ "_section" ];
+ in
+ concatStringsSep "\n" (
+ [ "${indent}${sectionTitle} {" ]
+ ++ flatten (mapAttrsToList (primitiveLinesFor "${indent} ") inner)
+ ++ flatten (mapAttrsToList (sectionLinesFor "${indent} ") inner)
+ ++ [ "${indent}}" ]
+ );
+
+ # emit lines for a k=v pair only when the value is a primitive
+ primitiveLinesFor =
+ indent: n: v:
+ let
+ primitives = filter isPrimitive (flatten [ v ]);
+ hasOnlySections = primitives == [ ] && v != [ ];
+ in
+ # Only emit an empty list if the original entry was also an empty list.
+ # This is so that values like k = [{ ... }] will not produce an output
+ # here, but k = [] will, even though they result in the same
+ # primitives = [].
+ optional (!hasOnlySections && v != null) (
+ toOption indent n (concatMapStringsSep " " formatPrimitive primitives)
+ );
+
+ # emit lines for a k=v pair only when the value is *not* a primitive
+ sectionLinesFor =
+ indent: n: v:
+ let
+ sections = filter (e: !isPrimitive e) (flatten [ v ]);
+ in
+ map (e: formatSection indent n e) sections;
doveConf =
let
@@ -156,10 +168,13 @@ let
];
in
concatStringsSep "\n" (
- optional (configVersion != null) (formatKeyValue "" "dovecot_config_version" configVersion)
- ++ optional (storageVersion != null) (formatKeyValue "" "dovecot_storage_version" storageVersion)
+ optionals (configVersion != null) (primitiveLinesFor "" "dovecot_config_version" configVersion)
+ ++ optionals (storageVersion != null) (
+ primitiveLinesFor "" "dovecot_storage_version" storageVersion
+ )
++ optionals (cfg.includeFiles != [ ]) (map (f: "!include ${f}") cfg.includeFiles)
- ++ flatten (mapAttrsToList (formatKeyValue "") remainingSettings)
+ ++ flatten (mapAttrsToList (primitiveLinesFor "") remainingSettings)
+ ++ flatten (mapAttrsToList (sectionLinesFor "") remainingSettings)
);
isPre24 = versionOlder cfg.package.version "2.4";
diff --git a/nixos/modules/services/mail/maddy.nix b/nixos/modules/services/mail/maddy.nix
index 32dcf0347d2e..61bab0e531d7 100644
--- a/nixos/modules/services/mail/maddy.nix
+++ b/nixos/modules/services/mail/maddy.nix
@@ -350,11 +350,13 @@ in
};
secrets = lib.mkOption {
- type = with lib.types; listOf path;
+ type = with lib.types; listOf (either str path);
description = ''
A list of files containing the various secrets. Should be in the format
expected by systemd's `EnvironmentFile` directory. Secrets can be
referenced in the format `{env:VAR}`.
+
+ Paths can be prefixed with `-` to ignore errors if the file does not exist.
'';
default = [ ];
};
diff --git a/nixos/modules/services/mail/postfix-tlspol.nix b/nixos/modules/services/mail/postfix-tlspol.nix
index 23753897b229..f49a17991842 100644
--- a/nixos/modules/services/mail/postfix-tlspol.nix
+++ b/nixos/modules/services/mail/postfix-tlspol.nix
@@ -164,6 +164,20 @@ in
};
users.groups.postfix-tlspol = { };
+ systemd.sockets.postfix-tlspol = {
+ wantedBy = [ "sockets.target" ];
+ socketConfig = {
+ Accept = false;
+ ListenStream = [
+ (lib.removePrefix "unix:" cfg.settings.server.address)
+ ];
+ SocketUser = "postfix-tlspol";
+ SocketGroup = "postfix-tlspol";
+ SocketMode = cfg.settings.server.socket-permissions;
+ DirectoryMode = "0755";
+ };
+ };
+
systemd.services.postfix-tlspol = {
after = [
"nss-lookup.target"
@@ -173,7 +187,6 @@ in
"nss-lookup.target"
"network-online.target"
];
- wantedBy = [ "multi-user.target" ];
description = "Postfix DANE/MTA-STS TLS policy socketmap service";
documentation = [ "https://github.com/Zuplu/postfix-tlspol" ];
@@ -217,9 +230,6 @@ in
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
- ]
- ++ lib.optionals (lib.hasPrefix "unix:" cfg.settings.server.address) [
- "AF_UNIX"
];
RestrictNamespaces = true;
RestrictRealtime = true;
@@ -237,7 +247,7 @@ in
RuntimeDirectory = "postfix-tlspol";
RuntimeDirectoryMode = "1750";
WorkingDirectory = "/var/cache/postfix-tlspol";
- UMask = "0117";
+ UMask = "0077";
};
};
})
diff --git a/nixos/modules/services/mail/postsrsd.nix b/nixos/modules/services/mail/postsrsd.nix
index dac11fdea236..9cf435e4893a 100644
--- a/nixos/modules/services/mail/postsrsd.nix
+++ b/nixos/modules/services/mail/postsrsd.nix
@@ -281,7 +281,7 @@ in
environment.etc."postsrsd.conf".source = configFile;
systemd.services.postsrsd = {
- description = "PostSRSd SRS rewriting server";
+ description = "Sender Rewriting Scheme daemon for Postfix";
after = [
"network.target"
"postsrsd-generate-secrets.service"
@@ -289,14 +289,20 @@ in
before = [ "postfix.service" ];
wantedBy = [ "multi-user.target" ];
requires = [ "postsrsd-generate-secrets.service" ];
- restartTriggers = [ configFile ];
+ reloadTriggers = [ configFile ];
serviceConfig = {
+ Type = "notify-reload";
ExecStart = utils.escapeSystemdExecArgs [
(lib.getExe cfg.package)
"-C"
"/etc/postsrsd.conf"
];
+ ExecReload = toString [
+ (lib.getExe' pkgs.coreutils "kill")
+ "-SIGHUP"
+ "$MAINPID"
+ ];
User = cfg.user;
Group = cfg.group;
RuntimeDirectory = "postsrsd";
@@ -319,7 +325,7 @@ in
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectSystem = "strict";
- ProtectProc = "invisible";
+ ProtectProc = "noaccess";
ProcSubset = "pid";
RemoveIPC = true;
RestrictAddressFamilies =
diff --git a/nixos/modules/services/mail/rspamd.nix b/nixos/modules/services/mail/rspamd.nix
index 189d2c078e0d..11867a6601ac 100644
--- a/nixos/modules/services/mail/rspamd.nix
+++ b/nixos/modules/services/mail/rspamd.nix
@@ -506,6 +506,7 @@ in
CapabilityBoundingSet = "";
DevicePolicy = "closed";
LockPersonality = true;
+ MemoryDenyWriteExecute = false; # pcre2 jit
NoNewPrivileges = true;
PrivateDevices = true;
PrivateMounts = true;
diff --git a/nixos/modules/services/mail/stalwart.nix b/nixos/modules/services/mail/stalwart.nix
index 4e596ad3e572..d4b3bf801042 100644
--- a/nixos/modules/services/mail/stalwart.nix
+++ b/nixos/modules/services/mail/stalwart.nix
@@ -57,7 +57,7 @@ in
default = { };
description = ''
Configuration options for the Stalwart server.
- See for available options.
+ See for available options.
By default, the module is configured to store everything locally.
'';
diff --git a/nixos/modules/services/matrix/appservice-discord.nix b/nixos/modules/services/matrix/appservice-discord.nix
deleted file mode 100644
index cf3c8ea20eae..000000000000
--- a/nixos/modules/services/matrix/appservice-discord.nix
+++ /dev/null
@@ -1,163 +0,0 @@
-{
- config,
- options,
- pkgs,
- lib,
- ...
-}:
-let
- dataDir = "/var/lib/matrix-appservice-discord";
- registrationFile = "${dataDir}/discord-registration.yaml";
- cfg = config.services.matrix-appservice-discord;
- opt = options.services.matrix-appservice-discord;
- # TODO: switch to configGen.json once RFC42 is implemented
- settingsFile = pkgs.writeText "matrix-appservice-discord-settings.json" (
- builtins.toJSON cfg.settings
- );
-
-in
-{
- options = {
- services.matrix-appservice-discord = {
- enable = lib.mkEnableOption "a bridge between Matrix and Discord";
-
- package = lib.mkPackageOption pkgs "matrix-appservice-discord" { };
-
- settings = lib.mkOption rec {
- # TODO: switch to lib.types.config.json as prescribed by RFC42 once it's implemented
- type = lib.types.attrs;
- apply = lib.recursiveUpdate default;
- default = {
- database = {
- filename = "${dataDir}/discord.db";
- };
-
- # empty values necessary for registration file generation
- # actual values defined in environmentFile
- auth = {
- clientID = "";
- botToken = "";
- };
- };
- example = lib.literalExpression ''
- {
- bridge = {
- domain = "public-domain.tld";
- homeserverUrl = "http://public-domain.tld:8008";
- };
- }
- '';
- description = ''
- {file}`config.yaml` configuration as a Nix attribute set.
-
- Configuration options should match those described in
- [config.sample.yaml](https://github.com/Half-Shot/matrix-appservice-discord/blob/master/config/config.sample.yaml).
-
- {option}`config.bridge.domain` and {option}`config.bridge.homeserverUrl`
- should be set to match the public host name of the Matrix homeserver for webhooks and avatars to work.
-
- Secret tokens should be specified using {option}`environmentFile`
- instead of this world-readable attribute set.
- '';
- };
-
- environmentFile = lib.mkOption {
- type = lib.types.nullOr lib.types.path;
- default = null;
- description = ''
- File containing environment variables to be passed to the matrix-appservice-discord service,
- in which secret tokens can be specified securely by defining values for
- `APPSERVICE_DISCORD_AUTH_CLIENT_I_D` and
- `APPSERVICE_DISCORD_AUTH_BOT_TOKEN`.
- '';
- };
-
- url = lib.mkOption {
- type = lib.types.str;
- default = "http://localhost:${toString cfg.port}";
- defaultText = lib.literalExpression ''"http://localhost:''${toString config.${opt.port}}"'';
- description = ''
- The URL where the application service is listening for HS requests.
- '';
- };
-
- port = lib.mkOption {
- type = lib.types.port;
- default = 9005; # from https://github.com/Half-Shot/matrix-appservice-discord/blob/master/package.json#L11
- description = ''
- Port number on which the bridge should listen for internal communication with the Matrix homeserver.
- '';
- };
-
- localpart = lib.mkOption {
- type = with lib.types; nullOr str;
- default = null;
- description = ''
- The user_id localpart to assign to the AS.
- '';
- };
-
- serviceDependencies = lib.mkOption {
- type = with lib.types; listOf str;
- default = lib.optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit;
- defaultText = lib.literalExpression ''
- lib.optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit
- '';
- description = ''
- List of Systemd services to require and wait for when starting the application service,
- such as the Matrix homeserver if it's running on the same host.
- '';
- };
- };
- };
-
- config = lib.mkIf cfg.enable {
- systemd.services.matrix-appservice-discord = {
- description = "A bridge between Matrix and Discord.";
-
- wantedBy = [ "multi-user.target" ];
- wants = [ "network-online.target" ] ++ cfg.serviceDependencies;
- after = [ "network-online.target" ] ++ cfg.serviceDependencies;
-
- preStart = ''
- if [ ! -f '${registrationFile}' ]; then
- ${cfg.package}/bin/matrix-appservice-discord \
- --generate-registration \
- --url=${lib.escapeShellArg cfg.url} \
- ${
- lib.optionalString (cfg.localpart != null) "--localpart=${lib.escapeShellArg cfg.localpart}"
- } \
- --config='${settingsFile}' \
- --file='${registrationFile}'
- fi
- '';
-
- serviceConfig = {
- Type = "simple";
- Restart = "always";
-
- ProtectSystem = "strict";
- ProtectHome = true;
- ProtectKernelTunables = true;
- ProtectKernelModules = true;
- ProtectControlGroups = true;
-
- DynamicUser = true;
- PrivateTmp = true;
- WorkingDirectory = "${cfg.package}/${cfg.package.passthru.nodeAppDir}";
- StateDirectory = baseNameOf dataDir;
- UMask = "0027";
- EnvironmentFile = cfg.environmentFile;
-
- ExecStart = ''
- ${cfg.package}/bin/matrix-appservice-discord \
- --file='${registrationFile}' \
- --config='${settingsFile}' \
- --port='${toString cfg.port}'
- '';
- };
- };
- };
-
- meta.maintainers = with lib.maintainers; [ euxane ];
-}
diff --git a/nixos/modules/services/matrix/dendrite.nix b/nixos/modules/services/matrix/dendrite.nix
index 302bd42b5e37..671c3821da4d 100644
--- a/nixos/modules/services/matrix/dendrite.nix
+++ b/nixos/modules/services/matrix/dendrite.nix
@@ -13,6 +13,7 @@ in
{
options.services.dendrite = {
enable = lib.mkEnableOption "matrix.org dendrite";
+ package = lib.mkPackageOption pkgs "dendrite" { };
httpPort = lib.mkOption {
type = lib.types.nullOr lib.types.port;
default = 8008;
@@ -321,7 +322,7 @@ in
];
ExecStart = lib.strings.concatStringsSep " " (
[
- "${pkgs.dendrite}/bin/dendrite"
+ (lib.getExe cfg.package)
"--config /run/dendrite/dendrite.yaml"
]
++ lib.optionals (cfg.httpPort != null) [
@@ -341,5 +342,4 @@ in
};
};
};
- meta.teams = [ lib.teams.matrix ];
}
diff --git a/nixos/modules/services/matrix/hebbot.nix b/nixos/modules/services/matrix/hebbot.nix
index efd22c906acc..d4c2daf47ab4 100644
--- a/nixos/modules/services/matrix/hebbot.nix
+++ b/nixos/modules/services/matrix/hebbot.nix
@@ -25,7 +25,7 @@ let
};
in
{
- meta.maintainers = [ lib.maintainers.raitobezarius ];
+ meta.maintainers = [ ];
options.services.hebbot = {
enable = mkEnableOption "hebbot";
package = lib.mkPackageOption pkgs "hebbot" { };
diff --git a/nixos/modules/services/matrix/matrix-authentication-service.nix b/nixos/modules/services/matrix/matrix-authentication-service.nix
new file mode 100644
index 000000000000..ee3c1a5d8232
--- /dev/null
+++ b/nixos/modules/services/matrix/matrix-authentication-service.nix
@@ -0,0 +1,474 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+
+let
+ inherit (lib)
+ concatMapStringsSep
+ filter
+ filterAttrs
+ getExe
+ getExe'
+ isAttrs
+ isList
+ mapAttrs
+ mkEnableOption
+ mkIf
+ mkOption
+ mkPackageOption
+ optional
+ types
+ ;
+
+ cfg = config.services.matrix-authentication-service;
+ format = pkgs.formats.yaml { };
+ filterRecursiveNull =
+ o:
+ if isAttrs o then
+ mapAttrs (_: v: filterRecursiveNull v) (filterAttrs (_: v: v != null) o)
+ else if isList o then
+ map filterRecursiveNull (filter (v: v != null) o)
+ else
+ o;
+
+ # remove null values from the final configuration
+ finalSettings =
+ let
+ pruned = filterRecursiveNull cfg.settings;
+ in
+ if pruned ? upstream_oauth2 && pruned.upstream_oauth2 == { } then
+ removeAttrs pruned [ "upstream_oauth2" ]
+ else
+ pruned;
+ configFile = format.generate "config.yaml" finalSettings;
+
+ extraConfigFiles = lib.imap0 (
+ i: _: "\${CREDENTIALS_DIRECTORY}/config-${toString i}"
+ ) cfg.extraConfigFiles;
+ runtimeConfig = "/run/matrix-authentication-service/config.yaml";
+in
+{
+ meta.maintainers = with lib.maintainers; [
+ eymeric
+ flashonfire
+ mkoppmann
+ skowalak
+ ];
+ meta.teams = [ lib.teams.matrix ];
+
+ options.services.matrix-authentication-service = {
+ enable = mkEnableOption "Matrix Authentication Service";
+
+ package = mkPackageOption pkgs "matrix-authentication-service" { };
+
+ settings = mkOption {
+ default = { };
+ description = ''
+ The primary mas configuration. See the
+ [configuration reference](https://element-hq.github.io/matrix-authentication-service/usage/configuration.html)
+ for possible values.
+
+ Secrets should be passed in by using the `extraConfigFiles` option.
+ '';
+ type = types.submodule {
+ freeformType = format.type;
+
+ options = {
+ http.public_base = mkOption {
+ type = types.str;
+ default = "http://[::]:8080/";
+ description = ''
+ Public URL base used when building absolute public URLs.
+ '';
+ };
+ http.trusted_proxies = mkOption {
+ type = types.listOf types.str;
+ default = [
+ "127.0.0.1/8"
+ "::1/128"
+ ];
+ description = ''
+ MAS can infer the client IP address from the X-Forwarded-For header. It will trust the value for this header only if the request comes from a trusted reverse proxy listed here.
+ '';
+ };
+ http.listeners = mkOption {
+ type = types.listOf (
+ types.submodule {
+ freeformType = format.type;
+ options = {
+ name = mkOption {
+ type = types.str;
+ example = "web";
+ description = ''
+ The name of the listener, used in logs and metrics.
+ '';
+ };
+ proxy_protocol = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to enable the PROXY protocol on the listener.
+ '';
+ };
+ resources = mkOption {
+ type = types.listOf (
+ types.submodule {
+ freeformType = format.type;
+ options = {
+ name = mkOption {
+ type = types.str;
+ description = ''
+ Serve the given resource.
+ '';
+ };
+ };
+ }
+ );
+ description = ''
+ List of resources to serve.
+ '';
+ };
+ binds = mkOption {
+ type = types.listOf (
+ types.submodule {
+ freeformType = format.type;
+ options = {
+ host = mkOption {
+ type = types.nullOr types.str;
+ description = ''
+ Listen on the given host.
+ '';
+ };
+ port = mkOption {
+ type = types.nullOr types.port;
+ description = ''
+ Listen on the given port.
+ '';
+ };
+ };
+ }
+ );
+ description = ''
+ List of addresses and ports to listen to.
+ '';
+ };
+ };
+ }
+ );
+ default = [
+ {
+ name = "web";
+ resources = [
+ { name = "discovery"; }
+ { name = "human"; }
+ { name = "oauth"; }
+ { name = "compat"; }
+ { name = "graphql"; }
+ { name = "assets"; }
+ ];
+ binds = [
+ {
+ host = "0.0.0.0";
+ port = 8080;
+ }
+ ];
+ proxy_protocol = false;
+ }
+ {
+ name = "internal";
+ resources = [
+ { name = "health"; }
+ ];
+ binds = [
+ {
+ host = "0.0.0.0";
+ port = 8081;
+ }
+ ];
+ proxy_protocol = false;
+ }
+ ];
+ description = ''
+ Each listener can serve multiple resources, and listen on multiple TCP ports or UNIX sockets.
+ '';
+ };
+
+ database.uri = mkOption {
+ type = types.str;
+ default = "postgresql:///matrix-authentication-service?host=/run/postgresql";
+ description = ''
+ The postgres connection string.
+ Refer to .
+ If you need to put secrets in the uri, please use the `extraConfigFiles` option.
+ '';
+ };
+
+ database.max_connections = mkOption {
+ type = types.ints.unsigned;
+ default = 10;
+ description = ''
+ Maximum number of connections for the connection pool.
+ '';
+ };
+
+ database.min_connections = mkOption {
+ type = types.ints.unsigned;
+ default = 0;
+ description = ''
+ Minimum number of connections for the connection pool.
+ '';
+ };
+
+ database.connect_timeout = mkOption {
+ type = types.ints.unsigned;
+ default = 30;
+ description = ''
+ Connection timeout for the connection pool.
+ '';
+ };
+
+ database.idle_timeout = mkOption {
+ type = types.ints.unsigned;
+ default = 600;
+ description = ''
+ Idle timeout for the connection pool.
+ '';
+ };
+
+ database.max_lifetime = mkOption {
+ type = types.ints.unsigned;
+ default = 1800;
+ description = ''
+ Maximum lifetime for the connection pool.
+ '';
+ };
+
+ passwords.enabled = mkOption {
+ type = types.bool;
+ default = true;
+ description = ''
+ Whether to enable the password database. If disabled, users will only be able to log in using upstream OIDC providers.
+ '';
+ };
+
+ passwords.schemes = mkOption {
+ type = types.listOf (
+ types.submodule {
+ freeformType = format.type;
+ options = {
+ version = mkOption {
+ type = types.ints.unsigned;
+ description = ''
+ Password scheme version.
+ '';
+ };
+ algorithm = mkOption {
+ type = types.str;
+ description = ''
+ Password scheme algorithm.
+ '';
+ };
+ };
+ }
+ );
+ default = [
+ {
+ version = 1;
+ algorithm = "argon2id";
+ }
+ ];
+ description = ''
+ List of password hashing schemes being used. Only change this if you know what you're doing.
+ '';
+ };
+
+ passwords.minimum_complexity = mkOption {
+ type = types.enum [
+ 0
+ 1
+ 2
+ 3
+ 4
+ ];
+ default = 3;
+ description = ''
+ Minimum complexity required for passwords, estimated by the zxcvbn algorithm.
+ Must be between 0 and 4, default is 3. See for more information.
+ '';
+ };
+
+ matrix.homeserver = mkOption {
+ type = types.str;
+ default = "";
+ description = ''
+ Corresponds to the server_name in the Synapse configuration file.
+ '';
+ };
+ matrix.endpoint = mkOption {
+ type = types.str;
+ default = "";
+ description = ''
+ The URL to which the homeserver is accessible from the service.
+ '';
+ };
+ upstream_oauth2.providers = mkOption {
+ default = null;
+ type = types.nullOr (
+ types.listOf (
+ types.submodule {
+ freeformType = format.type;
+ options = {
+ id = mkOption {
+ type = types.nullOr types.str;
+ example = "01H8PKNWKKRPCBW4YGH1RWV279";
+ default = null;
+ description = ''
+ Unique id for the provider, must be a ULID, and can be generated using online tools like .
+ '';
+ };
+ };
+ }
+ )
+ );
+ description = ''
+ Configuration of upstream providers
+ '';
+ };
+ };
+ };
+ };
+
+ createDatabase = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to enable and configure `services.postgresql` to ensure that the database user `matrix-authentication-service`
+ and the database `matrix-authentication-service` exist.
+ '';
+ };
+
+ extraConfigFiles = mkOption {
+ type = types.listOf types.str;
+ default = [ ];
+ description = ''
+ Extra config files to include.
+
+ The configuration files will be included based on the command line
+ argument --config. This allows to configure secrets without
+ having to go through the Nix store, e.g. based on deployment keys if
+ NixOps is in use.
+ '';
+ };
+
+ serviceDependencies = mkOption {
+ type = types.listOf types.str;
+ default = optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit;
+ defaultText = lib.literalExpression ''
+ lib.optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit
+ '';
+ description = ''
+ List of Systemd services to require and wait for when starting the application service,
+ such as the Matrix homeserver if it's running on the same host.
+ '';
+ };
+
+ credentials = lib.mkOption {
+ type = lib.types.attrsOf lib.types.str;
+ default = { };
+ description = ''
+ Mapping of credential name to source file-path. Exposed to the unit via LoadCredential and
+ readable inside the service at `''${CREDENTIALS_DIRECTORY}/`.
+
+ For example:
+
+ ```
+ services.matrix-authentication-service.credentials."synapse-secret" = "/run/agenix/synapse-shared";
+ services.matrix-authentication-service.settings.matrix.secret_file =
+ "\''${CREDENTIALS_DIRECTORY}/synapse-secret";
+ ```
+ '';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ services.postgresql = mkIf cfg.createDatabase {
+ enable = true;
+ ensureDatabases = [ "matrix-authentication-service" ];
+ ensureUsers = [
+ {
+ name = "matrix-authentication-service";
+ ensureDBOwnership = true;
+ }
+ ];
+ };
+
+ systemd.services.matrix-authentication-service = rec {
+ after = optional cfg.createDatabase "postgresql.service" ++ cfg.serviceDependencies;
+ wants = after;
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ DynamicUser = true;
+ LoadCredential =
+ (lib.imap0 (i: path: "config-${toString i}:${path}") cfg.extraConfigFiles)
+ ++ (lib.mapAttrsToList (name: path: "${name}:${path}") cfg.credentials);
+ ExecStartPre = pkgs.writeShellScript "mas-prepare" ''
+ ${getExe' pkgs.gettext "envsubst"} \
+ '$CREDENTIALS_DIRECTORY' \
+ < ${configFile} \
+ > /run/matrix-authentication-service/config.yaml
+ ${getExe cfg.package} config check --config ${runtimeConfig} \
+ ${concatMapStringsSep " " (x: "--config ${x}") extraConfigFiles}
+ '';
+ ExecStart = ''
+ ${getExe cfg.package} server --config ${runtimeConfig} \
+ ${concatMapStringsSep " " (x: "--config ${x}") extraConfigFiles}
+ '';
+ Restart = "on-failure";
+ RestartSec = "1s";
+
+ # Security Hardening
+ CapabilityBoundingSet = "";
+ AmbientCapabilities = "";
+ LockPersonality = true;
+ NoNewPrivileges = true;
+ PrivateTmp = true;
+ PrivateDevices = true;
+ PrivateMounts = true;
+ ProtectClock = true;
+ ProtectControlGroups = true;
+ ProtectHome = true;
+ ProtectHostname = true;
+ ProtectKernelLogs = true;
+ ProtectKernelModules = true;
+ ProtectKernelTunables = true;
+ ProtectProc = "invisible";
+ ProcSubset = "pid";
+ ProtectSystem = "strict";
+ RemoveIPC = true;
+ RestrictAddressFamilies = [
+ "AF_UNIX"
+ "AF_INET"
+ "AF_INET6"
+ ];
+ RestrictNamespaces = true;
+ RestrictRealtime = true;
+ RestrictSUIDSGID = true;
+ SystemCallArchitectures = "native";
+ SystemCallErrorNumber = "EPERM";
+ SystemCallFilter = [
+ "@system-service"
+ ];
+ UMask = "0077";
+
+ # Working and state directories
+ StateDirectory = "matrix-authentication-service";
+ StateDirectoryMode = "0700";
+ RuntimeDirectory = "matrix-authentication-service";
+ WorkingDirectory = "/var/lib/matrix-authentication-service";
+ };
+ };
+ };
+}
diff --git a/nixos/modules/services/matrix/rust-federation-tester.nix b/nixos/modules/services/matrix/rust-federation-tester.nix
new file mode 100644
index 000000000000..4b7a3420d2e0
--- /dev/null
+++ b/nixos/modules/services/matrix/rust-federation-tester.nix
@@ -0,0 +1,153 @@
+{
+ config,
+ lib,
+ pkgs,
+ utils,
+ ...
+}:
+
+let
+ cfg = config.services.rust-federation-tester;
+
+ configFile = "/run/rust-federation-tester/config.yaml";
+ commonServiceConfig = {
+ DynamicUser = true;
+ RuntimeDirectory = "rust-federation-tester";
+ RuntimeDirectoryPreserve = true;
+ StateDirectory = "rust-federation-tester";
+ User = "rust-federation-tester";
+ WorkingDirectory = "%t/rust-federation-tester";
+
+ # Hardening
+ UMask = "0077";
+ CapabilityBoundingSet = [ "" ];
+ DevicePolicy = "closed";
+ PrivateTmp = true;
+ ProtectHome = true;
+ ProtectSystem = "strict";
+ MemoryDenyWriteExecute = true;
+ NoNewPrivileges = true;
+ LockPersonality = true;
+ PrivateDevices = true;
+ PrivateMounts = true;
+ ProcSubset = "pid";
+ ProtectClock = true;
+ ProtectControlGroups = true;
+ ProtectHostname = true;
+ ProtectKernelLogs = true;
+ ProtectKernelModules = true;
+ ProtectKernelTunables = true;
+ ProtectProc = "invisible";
+ RemoveIPC = true;
+ RestrictAddressFamilies = [
+ "AF_INET"
+ "AF_INET6"
+ "AF_UNIX"
+ ];
+ RestrictNamespaces = true;
+ RestrictRealtime = true;
+ RestrictSUIDSGID = true;
+ SystemCallArchitectures = "native";
+ SystemCallFilter = [
+ "@system-service"
+ ];
+ };
+
+ secretsInjection = utils.genJqSecretsReplacement {
+ loadCredential = true;
+ } cfg.settings configFile;
+in
+{
+ options.services.rust-federation-tester = {
+ enable = lib.mkEnableOption "rust-federation-tester";
+
+ settings = lib.mkOption {
+ type = lib.types.submodule {
+ freeformType = lib.types.json;
+ options = {
+ frontend_url = lib.mkOption {
+ type = lib.types.str;
+ example = "federation-tester.example.org";
+ description = ''
+ URL of the service's frontend.
+ '';
+ };
+
+ database_url = lib.mkOption {
+ type = lib.types.str;
+ default = "sqlite:///var/lib/rust-federation-tester/db?mode=rwc";
+ example = "postgres://localhost/db?currentSchema=schema";
+ description = ''
+ The database to store accounts and statistics.
+ '';
+ };
+
+ smtp = {
+ enabled = lib.mkEnableOption "mail delivery for configured alerts";
+ };
+
+ listen_addr = lib.mkOption {
+ type = lib.types.str;
+ default = "[::]:8080";
+ example = "unix:/run/rust-federation-tester/rust-federation-tester.sock";
+ description = ''
+ Address the API server should listen on.
+ '';
+ };
+ };
+ };
+
+ description = ''
+ Settings representing the values in {file}`config.yaml` of the service.
+
+ Refer to [`config.yaml.example`] for supported values.
+
+ [`config.yaml.example`]: https://github.com/MTRNord/rust-federation-tester/blob/main/config.yaml.example
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ systemd.sockets.rust-federation-tester = {
+ description = "Matrix-Federation-Tester in Rust socket";
+ wantedBy = [ "sockets.target" ];
+ listenStreams = [ (lib.removePrefix "unix:" cfg.settings.listen_addr) ];
+ };
+
+ systemd.services.rust-federation-tester-setup = {
+ description = "Matrix-Federation-Tester in Rust";
+ path = [ pkgs.rust-federation-tester ];
+
+ serviceConfig = lib.mkMerge [
+ commonServiceConfig
+ {
+ Type = "oneshot";
+ RemainAfterExit = true;
+ LoadCredential = secretsInjection.credentials;
+ ExecStart = "${pkgs.writeShellScript "rust-federation-tester-setup" ''
+ ${secretsInjection.script}
+
+ migration up
+ ''}";
+ }
+ ];
+ };
+
+ systemd.services.rust-federation-tester = {
+ description = "Matrix-Federation-Tester in Rust";
+ wantedBy = [ "multi-user.target" ];
+ documentation = [ "https://github.com/MTRNord/rust-federation-tester" ];
+ after = [ "rust-federation-tester-setup.service" ];
+ requires = [ "rust-federation-tester-setup.service" ];
+
+ serviceConfig = lib.mkMerge [
+ commonServiceConfig
+ {
+ ExecSearchPath = lib.makeBinPath [ pkgs.rust-federation-tester ];
+ ExecStart = "rust-federation-tester";
+ Restart = "on-failure";
+ }
+ ];
+ };
+ };
+}
diff --git a/nixos/modules/services/matrix/tuwunel.nix b/nixos/modules/services/matrix/tuwunel.nix
index 6296fd6cb6cf..6a17ac5f726d 100644
--- a/nixos/modules/services/matrix/tuwunel.nix
+++ b/nixos/modules/services/matrix/tuwunel.nix
@@ -62,6 +62,19 @@ in
};
};
+ environmentFile = lib.mkOption {
+ type = lib.types.nullOr lib.types.path;
+ default = null;
+ example = "/run/secrets/matrix-tuwunel.env";
+ description = ''
+ Path to a file containing sensitive environment variables as described in {manpage}`systemd.exec(5).
+
+ Refer to
+
+ for specifying options as environment variables.
+ '';
+ };
+
settings = lib.mkOption {
type = lib.types.submodule {
freeformType = format.type;
@@ -255,6 +268,7 @@ in
ExecStart = lib.getExe cfg.package;
Restart = "on-failure";
RestartSec = 10;
+ EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile;
};
};
};
diff --git a/nixos/modules/services/misc/angrr.nix b/nixos/modules/services/misc/angrr.nix
index 92e371efdf2d..55e0687eef2e 100644
--- a/nixos/modules/services/misc/angrr.nix
+++ b/nixos/modules/services/misc/angrr.nix
@@ -27,6 +27,16 @@ let
keep-latest-n = 5;
keep-booted-system = true;
keep-current-system = true;
+ keep-n-per-bucket = [
+ {
+ bucket-window = "1 day";
+ bucket-amount = 7;
+ }
+ {
+ bucket-window = "1 week";
+ bucket-amount = 4;
+ }
+ ];
};
user = {
enable = false;
@@ -198,6 +208,13 @@ let
Whether to keep the last booted system generation. Only useful for system profiles.
'';
};
+ keep-n-per-bucket = lib.mkOption {
+ type = with lib.types; listOf (submodule keepNPerBucketOptions);
+ default = [ ];
+ description = ''
+ Specify a list of rules having n, bucket-window, and bucket-amount attributes.
+ '';
+ };
};
};
filterOptions = {
@@ -218,6 +235,31 @@ let
};
};
};
+ keepNPerBucketOptions = {
+ freeformType = toml.type;
+ options = {
+ n = lib.mkOption {
+ type = lib.types.int;
+ default = 1;
+ description = ''
+ Retain n generations every bucket-window duration for bucket-amount buckets.
+ '';
+ };
+ bucket-window = lib.mkOption {
+ type = lib.types.str;
+ description = ''
+ The duration of the bucket window.
+ '';
+ };
+ bucket-amount = lib.mkOption {
+ type = lib.types.int;
+ default = 1;
+ description = ''
+ The number of buckets to keep.
+ '';
+ };
+ };
+ };
# toml.generate does not support null values, we need to filter them out first
filteredSettings = lib.filterAttrsRecursive (name: value: value != null) cfg.settings;
@@ -236,7 +278,6 @@ in
{
meta.maintainers = pkgs.angrr.meta.maintainers;
imports = [
- (lib.mkRemovedOptionModule [ "services" "angrr" "period" ] configFileMigrationMsg)
(lib.mkRemovedOptionModule [ "services" "angrr" "removeRoot" ] configFileMigrationMsg)
(lib.mkRemovedOptionModule [ "services" "angrr" "ownedOnly" ] configFileMigrationMsg)
];
@@ -267,6 +308,15 @@ in
Extra command-line arguments pass to angrr.
'';
};
+ period = lib.mkOption {
+ type = with lib.types; nullOr str;
+ default = null;
+ description = ''
+ If set, it configures {option}`services.angrr.settings` to a preset that
+ monitor .direnv, results, system, and user profiles,
+ retaining GC roots that are younger than the specified period.
+ '';
+ };
settings = lib.mkOption {
type = lib.types.submodule settingsOptions;
example = exampleSettings;
@@ -372,6 +422,38 @@ in
_angrr_auto_use "$@"
'';
})
+
+ # When period is set, configure a preset retention policy
+ # Users can still override settings via services.angrr.settings
+ (lib.mkIf (cfg.period != null) {
+ services.angrr.settings = {
+ temporary-root-policies = {
+ direnv = {
+ path-regex = "/\\.direnv/";
+ period = cfg.period;
+ };
+ result = {
+ path-regex = "/result[^/]*$";
+ period = cfg.period;
+ };
+ };
+ profile-policies = {
+ system = {
+ profile-paths = [ "/nix/var/nix/profiles/system" ];
+ keep-since = cfg.period;
+ keep-booted-system = true;
+ keep-current-system = true;
+ };
+ user = {
+ profile-paths = [
+ "~/.local/state/nix/profiles/profile"
+ "/nix/var/nix/profiles/per-user/root/profile"
+ ];
+ keep-since = cfg.period;
+ };
+ };
+ };
+ })
]
);
}
diff --git a/nixos/modules/services/misc/apache-kafka.nix b/nixos/modules/services/misc/apache-kafka.nix
index 5b52ee478560..acb3c17354cc 100644
--- a/nixos/modules/services/misc/apache-kafka.nix
+++ b/nixos/modules/services/misc/apache-kafka.nix
@@ -63,7 +63,7 @@ in
options = {
"broker.id" = lib.mkOption {
- description = "Broker ID. -1 or null to auto-allocate in zookeeper mode.";
+ description = "Broker ID.";
default = null;
type = with lib.types; nullOr int;
};
@@ -172,9 +172,13 @@ in
[ "services" "apache-kafka" "logDirs" ]
[ "services" "apache-kafka" "settings" "log.dirs" ]
)
- (lib.mkRenamedOptionModule
- [ "services" "apache-kafka" "zookeeper" ]
- [ "services" "apache-kafka" "settings" "zookeeper.connect" ]
+ (lib.mkRemovedOptionModule
+ [
+ "services"
+ "apache-kafka"
+ "zookeeper"
+ ]
+ "ZooKeeper mode is no longer supported by any packaged Apache Kafka version; please migrate to KRaft mode instead"
)
(lib.mkRemovedOptionModule [
diff --git a/nixos/modules/services/misc/autosuspend.nix b/nixos/modules/services/misc/autosuspend.nix
index 9bbc9b2e7af8..29380a35347f 100644
--- a/nixos/modules/services/misc/autosuspend.nix
+++ b/nixos/modules/services/misc/autosuspend.nix
@@ -240,12 +240,15 @@ in
after = [ "network.target" ];
path = flatten (attrValues (filterAttrs (n: _: hasCheck n) dependenciesForChecks));
serviceConfig = {
- ExecStart = "${autosuspend}/bin/autosuspend -l ${autosuspend}/etc/autosuspend-logging.conf -c ${autosuspend-conf} daemon";
+ ExecStart = "${autosuspend}/bin/autosuspend --logging ${autosuspend}/etc/autosuspend-logging.conf daemon --config ${autosuspend-conf}";
};
};
};
meta = {
- maintainers = with maintainers; [ xlambein ];
+ maintainers = with maintainers; [
+ xlambein
+ adamcstephens
+ ];
};
}
diff --git a/nixos/modules/services/misc/bees.nix b/nixos/modules/services/misc/bees.nix
index 1bf794988aa5..a5099db3e2ad 100644
--- a/nixos/modules/services/misc/bees.nix
+++ b/nixos/modules/services/misc/bees.nix
@@ -17,6 +17,7 @@ let
notice = 5;
info = 6;
debug = 7;
+ trace = 8;
};
fsOptions = with lib.types; {
diff --git a/nixos/modules/services/misc/castsponsorskip.nix b/nixos/modules/services/misc/castsponsorskip.nix
new file mode 100644
index 000000000000..0b7eb39de9c8
--- /dev/null
+++ b/nixos/modules/services/misc/castsponsorskip.nix
@@ -0,0 +1,49 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
+let
+ cfg = config.services.castsponsorskip;
+in
+{
+ options = {
+ services.castsponsorskip = {
+ enable = lib.mkEnableOption "castsponsorskip";
+ package = lib.mkPackageOption pkgs "castsponsorskip" { };
+ config = lib.mkOption {
+ type = (pkgs.formats.yaml { }).type;
+ default = { };
+ example = {
+ CSS_SKIP_SPONSORS = false;
+ };
+ description = "Configuration for the service. List of options all options .";
+ };
+ };
+ };
+ config = lib.mkIf cfg.enable {
+ systemd.services.castsponsorskip =
+ let
+ # Needed, even if empty, to avoid searching for a file in
+ # the user home directory, which doesn't exist for
+ # dynamic users
+ config = (pkgs.formats.yaml cfg.config).generate "config.yaml" { };
+ in
+ {
+ description = "Skip YouTube ads and sponsorships on all local Google Cast devices";
+ after = [ "network.target" ];
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ DynamicUser = true;
+ Restart = "always";
+ ExecStart = "${lib.getExe cfg.package} --config=${config}";
+ TimeoutStopSec = "20s";
+ };
+ };
+ };
+
+ meta = {
+ maintainers = with lib.maintainers; [ wariuccio ];
+ };
+}
diff --git a/nixos/modules/services/misc/errbot.nix b/nixos/modules/services/misc/errbot.nix
index aa94368d61d2..270375256159 100644
--- a/nixos/modules/services/misc/errbot.nix
+++ b/nixos/modules/services/misc/errbot.nix
@@ -91,6 +91,20 @@ in
};
users.groups.errbot = { };
+ systemd.tmpfiles.settings = {
+ "10-errbot" = lib.mapAttrs' (
+ name: instanceCfg:
+ let
+ dataDir = if instanceCfg.dataDir != null then instanceCfg.dataDir else "/var/lib/errbot/${name}";
+ in
+ lib.nameValuePair "${dataDir}".d {
+ group = "errbot";
+ user = "errbot";
+ mode = "0755";
+ }
+ ) cfg.instances;
+ };
+
systemd.services = lib.mapAttrs' (
name: instanceCfg:
lib.nameValuePair "errbot-${name}" (
@@ -103,12 +117,7 @@ in
serviceConfig = {
User = "errbot";
Restart = "on-failure";
- ExecStartPre = [
- "${lib.getExe' pkgs.coreutils "mkdir"} -p ${dataDir}"
- "${lib.getExe' pkgs.coreutils "chown"} -R errbot:errbot ${dataDir}"
- ];
ExecStart = "${pkgs.errbot}/bin/errbot -c ${mkConfigDir instanceCfg dataDir}/config.py";
- PermissionsStartOnly = true;
};
}
)
diff --git a/nixos/modules/services/misc/gitweb.nix b/nixos/modules/services/misc/gitweb.nix
index 3030dc5c8285..65f923add2d5 100644
--- a/nixos/modules/services/misc/gitweb.nix
+++ b/nixos/modules/services/misc/gitweb.nix
@@ -6,7 +6,12 @@
}:
let
cfg = config.services.gitweb;
-
+ cfgNginx = config.services.gitweb.nginx;
+ package = pkgs.gitweb.override (
+ lib.optionalAttrs cfg.gitwebTheme {
+ gitwebTheme = true;
+ }
+ );
in
{
@@ -55,6 +60,104 @@ in
internal = true;
};
+ nginx = {
+ enable = lib.mkOption {
+ default = false;
+ type = lib.types.bool;
+ description = ''
+ If true, enable gitweb in nginx.
+ '';
+ };
+
+ location = lib.mkOption {
+ default = "/gitweb";
+ type = lib.types.str;
+ description = ''
+ Location to serve gitweb on.
+ '';
+ };
+
+ user = lib.mkOption {
+ default = "nginx";
+ type = lib.types.str;
+ description = ''
+ Existing user that the CGI process will belong to. (Default almost surely will do.)
+ '';
+ };
+
+ group = lib.mkOption {
+ default = "nginx";
+ type = lib.types.str;
+ description = ''
+ Group that the CGI process will belong to. (Set to `config.services.gitolite.group` if you are using gitolite.)
+ '';
+ };
+
+ virtualHost = lib.mkOption {
+ default = "_";
+ type = lib.types.str;
+ description = ''
+ VirtualHost to serve gitweb on. Default is catch-all.
+ '';
+ };
+ };
+
+ };
+
+ imports = [
+ (lib.mkRenamedOptionModule
+ [ "services" "nginx" "gitweb" "enable" ]
+ [ "services" "gitweb" "nginx" "enable" ]
+ )
+ (lib.mkRenamedOptionModule
+ [ "services" "nginx" "gitweb" "location" ]
+ [ "services" "gitweb" "nginx" "location" ]
+ )
+ (lib.mkRenamedOptionModule
+ [ "services" "nginx" "gitweb" "user" ]
+ [ "services" "gitweb" "nginx" "user" ]
+ )
+ (lib.mkRenamedOptionModule
+ [ "services" "nginx" "gitweb" "group" ]
+ [ "services" "gitweb" "nginx" "group" ]
+ )
+ (lib.mkRenamedOptionModule
+ [ "services" "nginx" "gitweb" "virtualHost" ]
+ [ "services" "gitweb" "nginx" "virtualHost" ]
+ )
+ ];
+
+ config = lib.mkIf cfgNginx.enable {
+
+ systemd.services.gitweb = {
+ description = "GitWeb service";
+ script = "${package}/gitweb.cgi --fastcgi --nproc=1";
+ environment = {
+ FCGI_SOCKET_PATH = "/run/gitweb/gitweb.sock";
+ };
+ serviceConfig = {
+ User = cfgNginx.user;
+ Group = cfgNginx.group;
+ RuntimeDirectory = [ "gitweb" ];
+ };
+ wantedBy = [ "multi-user.target" ];
+ };
+
+ services.nginx = {
+ virtualHosts.${cfgNginx.virtualHost} = {
+ locations."${cfgNginx.location}/static/" = {
+ alias = "${package}/static/";
+ };
+ locations."${cfgNginx.location}/" = {
+ extraConfig = ''
+ include ${config.services.nginx.package}/conf/fastcgi_params;
+ fastcgi_param GITWEB_CONFIG ${cfg.gitwebConfigFile};
+ fastcgi_pass unix:/run/gitweb/gitweb.sock;
+ '';
+ };
+ };
+ };
+
};
meta.maintainers = [ ];
diff --git a/nixos/modules/services/misc/graphical-desktop.nix b/nixos/modules/services/misc/graphical-desktop.nix
index e26050c123de..906601d1fc0c 100644
--- a/nixos/modules/services/misc/graphical-desktop.nix
+++ b/nixos/modules/services/misc/graphical-desktop.nix
@@ -22,17 +22,23 @@ in
config = lib.mkIf cfg.enable {
environment = {
- # localectl looks into 00-keyboard.conf
- etc."X11/xorg.conf.d/00-keyboard.conf".text = ''
- Section "InputClass"
- Identifier "Keyboard catchall"
- MatchIsKeyboard "on"
- Option "XkbModel" "${xcfg.xkb.model}"
- Option "XkbLayout" "${xcfg.xkb.layout}"
- Option "XkbOptions" "${xcfg.xkb.options}"
- Option "XkbVariant" "${xcfg.xkb.variant}"
- EndSection
- '';
+ # systemd-localed looks into 00-keyboard.conf
+ # systemd-localed does not like if Option values are ""
+ etc."X11/xorg.conf.d/00-keyboard.conf".text =
+ let
+ optionLine =
+ name: value: lib.optionalString (value != null && value != "") ''Option "${name}" "${value}"'';
+ in
+ ''
+ Section "InputClass"
+ Identifier "Keyboard catchall"
+ MatchIsKeyboard "on"
+ ${optionLine "XkbModel" xcfg.xkb.model}
+ ${optionLine "XkbLayout" xcfg.xkb.layout}
+ ${optionLine "XkbOptions" xcfg.xkb.options}
+ ${optionLine "XkbVariant" xcfg.xkb.variant}
+ EndSection
+ '';
systemPackages = with pkgs; [
nixos-icons # needed for gnome and pantheon about dialog, nixos-manual and maybe more
xdg-utils
diff --git a/nixos/modules/services/misc/jellyfin.nix b/nixos/modules/services/misc/jellyfin.nix
index d9e76154f0a8..7a6c5dae8536 100644
--- a/nixos/modules/services/misc/jellyfin.nix
+++ b/nixos/modules/services/misc/jellyfin.nix
@@ -33,7 +33,11 @@ let
;
cfg = config.services.jellyfin;
filteredDecodingCodecs = builtins.filter (
- c: c != "hevcRExt10bit" && c != "hevcRExt12bit" && cfg.transcoding.hardwareDecodingCodecs.${c}
+ c:
+ c != "hevc10bit"
+ && c != "hevcRExt10bit"
+ && c != "hevcRExt12bit"
+ && cfg.transcoding.hardwareDecodingCodecs.${c}
) (builtins.attrNames cfg.transcoding.hardwareDecodingCodecs);
encodingXmlText = ''
@@ -58,6 +62,7 @@ let
${boolToString cfg.transcoding.hardwareEncodingCodecs.av1}
${boolToString cfg.transcoding.enableIntelLowPowerEncoding}
${boolToString cfg.transcoding.enableIntelLowPowerEncoding}
+ ${boolToString cfg.transcoding.hardwareDecodingCodecs.hevc10bit}
${boolToString cfg.transcoding.hardwareDecodingCodecs.hevcRExt10bit}
${boolToString cfg.transcoding.hardwareDecodingCodecs.hevcRExt12bit}
diff --git a/nixos/modules/services/misc/kafka.md b/nixos/modules/services/misc/kafka.md
index 370bb3b482d2..a5d8f699f65d 100644
--- a/nixos/modules/services/misc/kafka.md
+++ b/nixos/modules/services/misc/kafka.md
@@ -12,10 +12,9 @@ manual](https://kafka.apache.org/documentation/#configuration) broker settings.
## KRaft {#module-services-apache-kafka-kraft}
-Unlike in Zookeeper mode, Kafka in
-[KRaft](https://kafka.apache.org/documentation/#kraft) mode requires each log
-dir to be "formatted" (which means a cluster-specific a metadata file must
-exist in each log dir)
+Kafka in [KRaft](https://kafka.apache.org/documentation/#kraft) mode requires
+each log dir to be "formatted" (which means a cluster-specific a metadata file
+must exist in each log dir)
The upstream intention is for users to execute the [storage
tool](https://kafka.apache.org/documentation/#kraft_storage) to achieve this,
@@ -59,5 +58,4 @@ Notable changes to be aware of include:
- [Upstream docs](https://kafka.apache.org/documentation.html#brokerconfigs_broker.id)
- Removal of `services.apache-kafka.zookeeper`
- - Translate using: `services.apache-kafka.settings."zookeeper.connect"`
- - [Upstream docs](https://kafka.apache.org/documentation.html#brokerconfigs_zookeeper.connect)
+ - ZooKeeper mode is no longer supported; migrate to [KRaft](#module-services-apache-kafka-kraft) mode instead.
diff --git a/nixos/modules/services/misc/ntfy-sh.nix b/nixos/modules/services/misc/ntfy-sh.nix
index 8e10576f54e4..69919c83e779 100644
--- a/nixos/modules/services/misc/ntfy-sh.nix
+++ b/nixos/modules/services/misc/ntfy-sh.nix
@@ -103,6 +103,7 @@ in
ExecStart = "${cfg.package}/bin/ntfy serve -c ${configuration}";
User = cfg.user;
StateDirectory = "ntfy-sh";
+ RuntimeDirectory = "ntfy-sh";
DynamicUser = true;
AmbientCapabilities = "CAP_NET_BIND_SERVICE";
diff --git a/nixos/modules/services/misc/ollama.nix b/nixos/modules/services/misc/ollama.nix
index bc1693f1902e..547f4e0799e4 100644
--- a/nixos/modules/services/misc/ollama.nix
+++ b/nixos/modules/services/misc/ollama.nix
@@ -37,6 +37,18 @@ in
"ollama"
"acceleration"
] "Set `services.ollama.package` to one of `pkgs.ollama[,-vulkan,-rocm,-cuda,-cpu]` instead.")
+ (lib.mkRenamedOptionModule
+ [
+ "services"
+ "ollama"
+ "models"
+ ]
+ [
+ "services"
+ "ollama"
+ "modelsDir"
+ ]
+ )
];
options = {
@@ -91,7 +103,7 @@ in
The home directory that the ollama service is started in.
'';
};
- models = lib.mkOption {
+ modelsDir = lib.mkOption {
type = types.str;
default = "${cfg.home}/models";
defaultText = "\${config.services.ollama.home}/models";
@@ -207,7 +219,7 @@ in
cfg.environmentVariables
// {
HOME = cfg.home;
- OLLAMA_MODELS = cfg.models;
+ OLLAMA_MODELS = cfg.modelsDir;
OLLAMA_HOST = "${cfg.host}:${toString cfg.port}";
}
// lib.optionalAttrs (cfg.rocmOverrideGfx != null) {
@@ -226,7 +238,7 @@ in
StateDirectory = [ "ollama" ];
ReadWritePaths = [
cfg.home
- cfg.models
+ cfg.modelsDir
];
CapabilityBoundingSet = [ "" ];
@@ -306,16 +318,18 @@ in
script =
let
binaryInputs = lib.mapAttrs (_: lib.getExe) {
- parallel = pkgs.parallel;
awk = pkgs.gawk;
sed = pkgs.gnused;
};
+
inherit (binaryInputs)
- parallel
awk
sed
;
+ nproc = lib.getExe' pkgs.coreutils "nproc";
+ xargs = lib.getExe' pkgs.findutils "xargs";
+
declaredModelsRegex = lib.pipe cfg.loadModels [
(map lib.escapeRegex)
(lib.concatStringsSep "|")
@@ -344,7 +358,7 @@ in
fi
''}
- '${parallel}' --tag '${ollama}' pull ::: ${lib.escapeShellArgs cfg.loadModels}
+ printf "%s\0" ${lib.escapeShellArgs cfg.loadModels} | '${xargs}' -0 -r -n 1 -P "$('${nproc}')" '${ollama}' pull
'';
};
diff --git a/nixos/modules/services/misc/paperless.nix b/nixos/modules/services/misc/paperless.nix
index 9df4e99ff9a5..bfe8b651b350 100644
--- a/nixos/modules/services/misc/paperless.nix
+++ b/nixos/modules/services/misc/paperless.nix
@@ -24,6 +24,8 @@ let
GRANIAN_HOST = cfg.address;
GRANIAN_PORT = toString cfg.port;
GRANIAN_WORKERS_KILL_TIMEOUT = "60";
+ # django-allauth uses python requests, which doesn't use the systems CA bundle by default: https://requests.readthedocs.io/en/latest/user/advanced/#ca-certificates
+ REQUESTS_CA_BUNDLE = config.security.pki.caBundle;
}
// lib.optionalAttrs (config.time.timeZone != null) {
PAPERLESS_TIME_ZONE = config.time.timeZone;
@@ -621,7 +623,7 @@ in
PrivateNetwork = false;
};
environment = env // {
- PYTHONPATH = "${cfg.package.python.pkgs.makePythonPath cfg.package.propagatedBuildInputs}:${cfg.package}/lib/paperless-ngx/src";
+ PYTHONPATH = "${cfg.package.python.pkgs.makePythonPath cfg.package.passthru.dependencies}:${cfg.package}/lib/paperless-ngx/src";
};
# Allow the web interface to access the private /tmp directory of the server.
# This is required to support uploading files via the web interface.
diff --git a/nixos/modules/services/misc/redmine.nix b/nixos/modules/services/misc/redmine.nix
index c017dd333e1a..731bd895c761 100644
--- a/nixos/modules/services/misc/redmine.nix
+++ b/nixos/modules/services/misc/redmine.nix
@@ -245,19 +245,19 @@ in
};
components = {
- subversion = lib.mkEnableOption "Subversion integration.";
+ subversion = lib.mkEnableOption "Subversion integration";
- mercurial = lib.mkEnableOption "Mercurial integration.";
+ mercurial = lib.mkEnableOption "Mercurial integration";
- git = lib.mkEnableOption "git integration.";
+ git = lib.mkEnableOption "git integration";
- cvs = lib.mkEnableOption "cvs integration.";
+ cvs = lib.mkEnableOption "cvs integration";
- breezy = lib.mkEnableOption "bazaar integration.";
+ breezy = lib.mkEnableOption "bazaar integration";
- imagemagick = lib.mkEnableOption "exporting Gant diagrams as PNG.";
+ imagemagick = lib.mkEnableOption "exporting Gant diagrams as PNG";
- ghostscript = lib.mkEnableOption "exporting Gant diagrams as PDF.";
+ ghostscript = lib.mkEnableOption "exporting Gant diagrams as PDF";
minimagick_font_path = lib.mkOption {
type = lib.types.str;
@@ -265,6 +265,8 @@ in
description = "MiniMagick font path";
example = "/run/current-system/sw/share/X11/fonts/LiberationSans-Regular.ttf";
};
+
+ pandoc = lib.mkEnableOption "pandoc integration for previewing LibreOffice and Microsoft Office documents";
};
};
};
@@ -310,6 +312,7 @@ in
imagemagick_convert_command = lib.optionalString cfg.components.imagemagick "${pkgs.imagemagick}/bin/convert";
gs_command = lib.optionalString cfg.components.ghostscript "${pkgs.ghostscript}/bin/gs";
minimagick_font_path = "${cfg.components.minimagick_font_path}";
+ pandoc_command = lib.optionalString cfg.components.pandoc "${pkgs.pandoc}/bin/pandoc";
};
};
@@ -457,7 +460,7 @@ in
Group = cfg.group;
TimeoutSec = "300";
WorkingDirectory = "${cfg.package}/share/redmine";
- ExecStart = "${bundle} exec rails server -u webrick -e production -b ${toString cfg.address} -p ${toString cfg.port} -P '${cfg.stateDir}/redmine.pid'";
+ ExecStart = "${bundle} exec rails server -u webrick -e production -b ${toString cfg.address} -p ${toString cfg.port}";
RuntimeDirectory = "redmine";
RuntimeDirectoryMode = "0750";
AmbientCapabilities = "";
diff --git a/nixos/modules/services/misc/shoko.nix b/nixos/modules/services/misc/shoko.nix
index 2b9ab971e212..9b41d45ca9c1 100644
--- a/nixos/modules/services/misc/shoko.nix
+++ b/nixos/modules/services/misc/shoko.nix
@@ -90,8 +90,5 @@ in
};
};
- meta.maintainers = with lib.maintainers; [
- diniamo
- nanoyaki
- ];
+ meta.maintainers = with lib.maintainers; [ nanoyaki ];
}
diff --git a/nixos/modules/services/misc/stash-clipboard.nix b/nixos/modules/services/misc/stash-clipboard.nix
new file mode 100644
index 000000000000..634f6433f118
--- /dev/null
+++ b/nixos/modules/services/misc/stash-clipboard.nix
@@ -0,0 +1,73 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.services.stash-clipboard;
+ inherit (lib)
+ mkPackageOption
+ mkEnableOption
+ mkOption
+ types
+ mkIf
+ getExe
+ concatStringsSep
+ ;
+in
+{
+ options.services.stash-clipboard = {
+ enable = mkEnableOption "stash, a Wayland clipboard manager";
+
+ package = mkPackageOption pkgs [ "stash-clipboard" ] { };
+
+ arguments = mkOption {
+ type = types.listOf types.str;
+ default = [ ];
+ example = [ "--max-items 10" ];
+ description = "A list of arguments to pass to stash watch.";
+ };
+
+ filterFile = mkOption {
+ type = types.str;
+ default = "";
+ example = "/etc/stash/clipboard_filter";
+ description = ''
+ Stash can be configured to avoid storing clipboard entries that match a sensitive pattern, using a regular expression.
+ The file set here should contain your regex pattern (no quotes).
+
+ Example regex to block common password patterns:
+ - (password|secret|api[_-]?key|token)[=: ]+[^\s]+
+ '';
+ };
+
+ excludedApps = mkOption {
+ type = types.listOf types.str;
+ default = [ ];
+ example = [ "Bitwarden" ];
+ description = ''
+ List of application classes to exclude from the database.
+ Entries from these apps are still copied to the clipboard, but it will never be put inside the database.
+ '';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ environment.systemPackages = [ cfg.package ];
+ systemd = {
+ user.services.stash-clipboard = {
+ description = "Stash clipboard manager daemon";
+ wantedBy = [ "graphical-session.target" ];
+ after = [ "graphical-session.target" ];
+ serviceConfig = {
+ ExecStart = "${getExe cfg.package} ${concatStringsSep " " cfg.arguments} watch";
+ LoadCredential = mkIf (cfg.filterFile != "") "clipboard_filter:${cfg.filterFile}";
+ };
+ environment = mkIf (cfg.excludedApps != [ ]) {
+ STASH_EXCLUDED_APPS = concatStringsSep "," cfg.excludedApps;
+ };
+ };
+ };
+ };
+}
diff --git a/nixos/modules/services/misc/unpackerr.nix b/nixos/modules/services/misc/unpackerr.nix
new file mode 100644
index 000000000000..710c44346b66
--- /dev/null
+++ b/nixos/modules/services/misc/unpackerr.nix
@@ -0,0 +1,102 @@
+{
+ config,
+ pkgs,
+ lib,
+ utils,
+ ...
+}:
+
+let
+ cfg = config.services.unpackerr;
+ configFormat = pkgs.formats.toml { };
+ configFile = configFormat.generate "unpackerr.conf" cfg.settings;
+ inherit (lib)
+ mkEnableOption
+ mkOption
+ mkPackageOption
+ mkIf
+ getExe
+ types
+ ;
+in
+{
+ options = {
+ services.unpackerr = {
+ enable = mkEnableOption "Unpackerr";
+
+ settings = mkOption {
+ type = configFormat.type;
+ default = { };
+ example = {
+ radarr = [
+ {
+ url = "http://127.0.0.1:8989";
+ api_key = "0123456789abcdef0123456789abcdef";
+ }
+ ];
+ sonarr = [
+ {
+ url = "http://127.0.0.1:7878";
+ api_key = "0123456789abcdef0123456789abcdef";
+ }
+ ];
+ };
+ description = ''
+ Unpackerr TOML configuration as a Nix attribute set.
+ Refer to [Unpackerr docs](https://unpackerr.zip/docs/install/configuration) for details.
+ For setting secrets refer to this [section](https://unpackerr.zip/docs/install/configuration/#secrets-and-passwords).
+ '';
+ };
+
+ user = mkOption {
+ type = types.str;
+ default = "unpackerr";
+ description = "User account under which Unpackerr runs.";
+ };
+
+ group = mkOption {
+ type = types.str;
+ default = "unpackerr";
+ description = "Group under which Unpackerr runs.";
+ };
+
+ package = mkPackageOption pkgs "unpackerr" { };
+ };
+ };
+
+ config = mkIf cfg.enable {
+ # Upstream service: https://github.com/Unpackerr/unpackerr/blob/main/init/systemd/unpackerr.service
+ systemd = {
+ services.unpackerr = {
+ description = "Unpackerr - archive extraction daemon";
+ wants = [ "network.target" ];
+ after = [ "network.target" ];
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ Type = "exec";
+ User = cfg.user;
+ Group = cfg.group;
+ ExecStart = utils.escapeSystemdExecArgs [
+ (getExe cfg.package)
+ "--config=${configFile}"
+ ];
+ Restart = "always";
+ RestartSec = 10;
+ };
+ };
+ };
+
+ users.users = mkIf (cfg.user == "unpackerr") {
+ unpackerr = {
+ inherit (cfg) group;
+ isSystemUser = true;
+ };
+ };
+
+ users.groups = mkIf (cfg.group == "unpackerr") {
+ unpackerr = { };
+ };
+ };
+
+ meta.maintainers = with lib.maintainers; [ Wekuz ];
+}
diff --git a/nixos/modules/services/monitoring/nezha.nix b/nixos/modules/services/monitoring/nezha.nix
new file mode 100644
index 000000000000..b4ed76b031e7
--- /dev/null
+++ b/nixos/modules/services/monitoring/nezha.nix
@@ -0,0 +1,179 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.services.nezha;
+
+ # nezha uses yaml as the configuration file format.
+ # Since we need to use jq to update the content, so here we generate json
+ settingsFormat = pkgs.formats.json { };
+ configFile = settingsFormat.generate "config.json" cfg.settings;
+in
+{
+ meta.maintainers = with lib.maintainers; [ moraxyc ];
+ options = {
+ services.nezha = {
+ enable = lib.mkEnableOption "Nezha Monitoring";
+
+ package = lib.mkPackageOption pkgs "nezha" { };
+
+ debug = lib.mkEnableOption "verbose log";
+
+ settings = lib.mkOption {
+ description = ''
+ Generate to {file}`config.yaml` as a Nix attribute set.
+ Check the [guide](https://nezha.wiki/en_US/guide/dashboard.html)
+ for possible options.
+ '';
+ type = lib.types.submodule {
+ freeformType = settingsFormat.type;
+
+ options = {
+ listenhost = lib.mkOption {
+ type = lib.types.str;
+ default = "127.0.0.1";
+ description = ''
+ Host on which the nezha web interface and grpc should listen.
+ '';
+ };
+ listenport = lib.mkOption {
+ type = lib.types.port;
+ default = 8008;
+ description = ''
+ Port on which the nezha web interface and grpc should listen.
+ '';
+ };
+
+ };
+ };
+ };
+
+ mutableConfig = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = ''
+ Whether the config.yaml is writable by Nezha.
+
+ If this option is disabled, changes on the web interface won't
+ be possible. If an config.yaml is present, it will be overwritten.
+ '';
+ };
+
+ jwtSecretFile = lib.mkOption {
+ type = lib.types.path;
+ default = null;
+ description = ''
+ Path to the file containing the secret to sign web requests using JSON Web Tokens.
+ '';
+ };
+
+ agentSecretFile = lib.mkOption {
+ type = lib.types.path;
+ default = null;
+ description = ''
+ Path to the file containing the secret used by agents to connect.
+ '';
+ };
+
+ extraThemes = lib.mkOption {
+ type = lib.types.listOf lib.types.package;
+ default = [ ];
+ example = lib.literalExpression "[ pkgs.nezha-theme-nazhua ]";
+ description = ''
+ A list of additional themes.
+ '';
+ };
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ services.nezha.settings.debug = cfg.debug;
+
+ systemd.services.nezha = {
+ serviceConfig = {
+ Restart = "on-failure";
+ StateDirectory = "nezha";
+ RuntimeDirectory = "nezha";
+ ConfigurationDirectory = "nezha";
+ WorkingDirectory = "/var/lib/nezha";
+ ReadWritePaths = [
+ "/var/lib/nezha"
+ "/etc/nezha"
+ ];
+
+ LoadCredential = [
+ "jwt-secret:${cfg.jwtSecretFile}"
+ "agent-secret:${cfg.agentSecretFile}"
+ ];
+
+ # Hardening
+ ProcSubset = "pid";
+ DynamicUser = true;
+ RemoveIPC = true;
+ LockPersonality = true;
+ ProtectClock = true;
+ MemoryDenyWriteExecute = true;
+ PrivateUsers = cfg.settings.listenport >= 1024; # incompatible with CAP_NET_BIND_SERVICE
+ ProtectHostname = true;
+ RestrictSUIDSGID = true;
+ CapabilityBoundingSet = lib.optionalString (cfg.settings.listenport < 1024) "CAP_NET_BIND_SERVICE";
+ AmbientCapabilities = lib.optionalString (cfg.settings.listenport < 1024) "CAP_NET_BIND_SERVICE";
+ NoNewPrivileges = true;
+ PrivateTmp = true;
+ ProtectControlGroups = true;
+ ProtectHome = true;
+ ProtectKernelLogs = true;
+ ProtectKernelModules = true;
+ ProtectKernelTunables = true;
+ ProtectProc = "invisible";
+ ProtectSystem = "strict";
+ RestrictNamespaces = true;
+ RestrictRealtime = true;
+ SystemCallArchitectures = "native";
+ UMask = "0066";
+ SystemCallFilter = [
+ "@system-service"
+ "~@privileged"
+ ]
+ ++ lib.optional (cfg.settings ? tsdb) "mincore";
+ RestrictAddressFamilies = [
+ "AF_INET"
+ "AF_INET6"
+ ];
+ PrivateDevices = "yes";
+
+ ExecStart =
+ let
+ package = cfg.package.override { withThemes = cfg.extraThemes; };
+ in
+ ''${lib.getExe package} -c "''${CONFIGURATION_DIRECTORY}"/config.yaml -db "''${STATE_DIRECTORY}"/sqlite.db'';
+ };
+ enableStrictShellChecks = true;
+ startLimitIntervalSec = 10;
+ startLimitBurst = 3;
+ preStart = ''
+ cp "${configFile}" "''${RUNTIME_DIRECTORY}"/new
+ ${lib.getExe pkgs.jq} \
+ --arg jwt_secret "$(<"''${CREDENTIALS_DIRECTORY}"/jwt-secret)" \
+ --arg agent_secret "$(<"''${CREDENTIALS_DIRECTORY}"/agent-secret)" \
+ '. + { jwtsecretkey: $jwt_secret, agentsecretkey: $agent_secret }' \
+ < "''${RUNTIME_DIRECTORY}"/new > "''${RUNTIME_DIRECTORY}"/tmp
+ mv "''${RUNTIME_DIRECTORY}"/tmp "''${RUNTIME_DIRECTORY}"/new
+
+ ${lib.optionalString cfg.mutableConfig ''
+ [ -e "''${CONFIGURATION_DIRECTORY}"/config.yaml ] && \
+ ${lib.getExe pkgs.yj} < "''${CONFIGURATION_DIRECTORY}"/config.yaml > "''${RUNTIME_DIRECTORY}"/old && \
+ ${lib.getExe pkgs.jq} -s '.[0] * .[1]' \
+ "''${RUNTIME_DIRECTORY}"/old "''${RUNTIME_DIRECTORY}"/new > "''${RUNTIME_DIRECTORY}"/tmp
+ [ -e "''${RUNTIME_DIRECTORY}"/old ] && rm "''${RUNTIME_DIRECTORY}"/old
+ [ -e "''${RUNTIME_DIRECTORY}"/tmp ] && mv "''${RUNTIME_DIRECTORY}"/tmp "''${RUNTIME_DIRECTORY}"/new
+ ''}
+ mv "''${RUNTIME_DIRECTORY}"/new "''${CONFIGURATION_DIRECTORY}"/config.yaml
+ '';
+ wantedBy = [ "multi-user.target" ];
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters.nix b/nixos/modules/services/monitoring/prometheus/exporters.nix
index a625111fc2f0..b1d7f62b582e 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters.nix
@@ -86,6 +86,7 @@ let
"lnd"
"mail"
"mailman3"
+ "mail-tlsa-check"
"mikrotik"
"modemmanager"
"mongodb"
@@ -114,7 +115,6 @@ let
"restic"
"rtl_433"
"sabnzbd"
- "scaphandre"
"script"
"shelly"
"smartctl"
@@ -521,26 +521,6 @@ in
'services.prometheus.exporters.sql.configFile'
'';
}
- {
- assertion = cfg.scaphandre.enable -> (pkgs.stdenv.targetPlatform.isx86_64 == true);
- message = ''
- Scaphandre only support x86_64 architectures.
- '';
- }
- {
- assertion =
- cfg.scaphandre.enable
- -> ((lib.kernel.whenHelpers pkgs.linux.version).whenOlder "5.11" true).condition == false;
- message = ''
- Scaphandre requires a kernel version newer than '5.11', '${pkgs.linux.version}' given.
- '';
- }
- {
- assertion = cfg.scaphandre.enable -> (builtins.elem "intel_rapl_common" config.boot.kernelModules);
- message = ''
- Scaphandre needs 'intel_rapl_common' kernel module to be enabled. Please add it in 'boot.kernelModules'.
- '';
- }
{
assertion =
cfg.idrac.enable -> ((cfg.idrac.configurationPath == null) != (cfg.idrac.configuration == null));
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/bind.nix b/nixos/modules/services/monitoring/prometheus/exporters/bind.nix
index 3390374172c4..935ebff7e5bd 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/bind.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/bind.nix
@@ -17,7 +17,7 @@ in
type = types.str;
default = "http://localhost:8053/";
description = ''
- HTTP XML API address of an Bind server.
+ HTTP API address of a BIND server.
'';
};
bindTimeout = mkOption {
@@ -29,13 +29,14 @@ in
};
bindVersion = mkOption {
type = types.enum [
- "xml.v2"
+ "json"
+ "xml"
"xml.v3"
"auto"
];
- default = "auto";
+ default = "json";
description = ''
- BIND statistics version. Can be detected automatically.
+ BIND statistics version. Defaults to JSON.
'';
};
bindGroups = mkOption {
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/imap-mailstat.nix b/nixos/modules/services/monitoring/prometheus/exporters/imap-mailstat.nix
index c5d97dc12238..eaec8041d294 100644
--- a/nixos/modules/services/monitoring/prometheus/exporters/imap-mailstat.nix
+++ b/nixos/modules/services/monitoring/prometheus/exporters/imap-mailstat.nix
@@ -94,8 +94,8 @@ in
serviceConfig = {
ExecStart = ''
${pkgs.prometheus-imap-mailstat-exporter}/bin/imap-mailstat-exporter \
- -config ${createConfigFile cfg.accounts} \
- ${optionalString cfg.oldestUnseenDate "-oldestunseendate"} \
+ --config.file="${createConfigFile cfg.accounts}" \
+ ${optionalString cfg.oldestUnseenDate "--oldestunseen.feature"} \
${concatStringsSep " \\\n " cfg.extraFlags}
'';
};
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/mail-tlsa-check.nix b/nixos/modules/services/monitoring/prometheus/exporters/mail-tlsa-check.nix
new file mode 100644
index 000000000000..aa66a45daee2
--- /dev/null
+++ b/nixos/modules/services/monitoring/prometheus/exporters/mail-tlsa-check.nix
@@ -0,0 +1,164 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+
+let
+ cfg = config.services.prometheus.exporters.mail-tlsa-check;
+
+ inherit (lib)
+ boolToString
+ collect
+ concatStringsSep
+ getExe
+ isBool
+ isList
+ isString
+ listToAttrs
+ mapAttrsRecursive
+ mkForce
+ mkOption
+ mkPackageOption
+ optionalAttrs
+ pipe
+ toUpper
+ types
+ ;
+
+ environment = pipe cfg.settings [
+ (mapAttrsRecursive (
+ path: value:
+ optionalAttrs (value != null) {
+ name = toUpper "MTCE_${concatStringsSep "_" path}";
+ value =
+ if isList value then
+ concatStringsSep "," value
+ else if isBool value then
+ boolToString value
+ else
+ toString value;
+ }
+ ))
+ (collect (x: isString x.name or false && isString x.value or false))
+ listToAttrs
+ ];
+in
+{
+ port = 19309;
+ extraOpts = {
+ package = mkPackageOption pkgs "mail-tlsa-check-exporter" { };
+ settings = mkOption {
+ description = "Settings for the mail-tlsa-check-exporter";
+ type = types.submodule {
+ freeformType = types.attrs;
+
+ options = {
+ tlsa.record = mkOption {
+ description = "The TLSA record to monitor";
+ type = types.str;
+ example = "_25._tcp.smtp.example.org";
+ };
+ check.timeout = mkOption {
+ description = "Timeout for validation checks to complete before giving up, in milliseconds (e.g. 15000 for 15 seconds)";
+ type = types.ints.positive;
+ default = 15000;
+ example = 10000;
+ };
+ ipv4.enabled = mkOption {
+ description = "Whether to enable monitoring over IPv4";
+ type = types.bool;
+ default = true;
+ example = false;
+ };
+ ipv6.enabled = mkOption {
+ description = "Whether to enable monitoring over IPv6";
+ type = types.bool;
+ default = true;
+ example = false;
+ };
+ server.port = mkOption {
+ description = ''
+ The port that the exporter listens on.
+
+ ::: {.note}
+ This is a read-only option that is read from {option}`services.prometheus.exporters.mail-tlsa-check.port`.
+ :::
+ '';
+ type = types.port;
+ default = cfg.port;
+ defaultText = lib.literalExpression "config.services.prometheus.exporters.mail-tlsa-check.port";
+ readOnly = true;
+ };
+ smtp = {
+ hostname = mkOption {
+ description = "The SMTP hostname to monitor";
+ type = types.nullOr types.str;
+ default = null;
+ example = "smtp.example.org";
+ };
+ port = mkOption {
+ description = ''
+ The SMTP port to monitor
+
+ ::: {.note}
+ The exporter currently only supports explicit TLS (StartTLS), see
+ :::
+ '';
+ type = types.port;
+ default = 587;
+ example = 465;
+ };
+ client = mkOption {
+ description = "The host to send in the SMTP EHLO command (name/domain/IP address)";
+ type = types.str;
+ default = "tlsa-smtp-synthetics-probe";
+ example = "tlsa-exporter";
+ };
+ };
+ imap = {
+ hostname = mkOption {
+ description = "The IMAP hostname to monitor";
+ type = types.nullOr types.str;
+ default = null;
+ example = "imap.example.org";
+ };
+ port = mkOption {
+ description = ''
+ The IMAP port to monitor
+
+ ::: {.note}
+ The exporter currently only supports explicit TLS (StartTLS), see
+ :::
+ '';
+ type = types.port;
+ default = 143;
+ };
+ };
+ };
+ };
+ };
+ };
+
+ assertions = [
+ {
+ assertion = cfg.settings.ipv4.enabled || cfg.ipv6.enabled;
+ message = "Both IPv4 and IPv6 are disabled, this is not possible as it won't monitor anything";
+ }
+ {
+ assertion = cfg.settings.smtp.hostname != null || cfg.settings.imap.hostname != null;
+ message = "Both SMTP and IMAP are disabled, this is not possible as it won't monitor anything";
+ }
+ ];
+
+ serviceOpts = {
+ inherit environment;
+
+ serviceConfig = {
+ ExecStart = getExe cfg.package;
+ MemoryDenyWriteExecute = mkForce false; # because v8 won't start otherwise
+ Restart = "always"; # because apparently, this service crashes and is intended to do so, see the upstream systemd unit
+ };
+ };
+}
diff --git a/nixos/modules/services/monitoring/prometheus/exporters/scaphandre.nix b/nixos/modules/services/monitoring/prometheus/exporters/scaphandre.nix
deleted file mode 100644
index a3dadccfda19..000000000000
--- a/nixos/modules/services/monitoring/prometheus/exporters/scaphandre.nix
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- config,
- lib,
- pkgs,
- options,
- ...
-}:
-
-let
- logPrefix = "services.prometheus.exporter.scaphandre";
- cfg = config.services.prometheus.exporters.scaphandre;
-in
-{
- port = 8080;
- extraOpts = {
- telemetryPath = lib.mkOption {
- type = lib.types.str;
- default = "/metrics";
- description = ''
- Path under which to expose metrics.
- '';
- };
- };
-
- serviceOpts = {
- serviceConfig = {
- ExecStart = ''
- ${pkgs.scaphandre}/bin/scaphandre prometheus \
- --address ${cfg.listenAddress} \
- --port ${toString cfg.port} \
- --suffix ${cfg.telemetryPath} \
- ${lib.concatStringsSep " \\\n " cfg.extraFlags}
- '';
- };
- };
-}
diff --git a/nixos/modules/services/monitoring/traccar.nix b/nixos/modules/services/monitoring/traccar.nix
index e1e73dc93e02..12622da99eb8 100644
--- a/nixos/modules/services/monitoring/traccar.nix
+++ b/nixos/modules/services/monitoring/traccar.nix
@@ -102,7 +102,7 @@ in
${lib.getExe pkgs.envsubst} \
-i ${configuration} \
-o ${configFilePath}
- umask $old_umask
+ umask "$old_umask"
'';
serviceConfig = {
diff --git a/nixos/modules/services/monitoring/vnstat.nix b/nixos/modules/services/monitoring/vnstat.nix
index 062d181b059a..4aaa89668c19 100644
--- a/nixos/modules/services/monitoring/vnstat.nix
+++ b/nixos/modules/services/monitoring/vnstat.nix
@@ -6,17 +6,32 @@
}:
let
cfg = config.services.vnstat;
+ settingsFormat = pkgs.formats.keyValue { };
in
{
options.services.vnstat = {
enable = lib.mkEnableOption "update of network usage statistics via vnstatd";
package = lib.mkPackageOption pkgs "vnstat" { };
+ settings = lib.mkOption {
+ type = lib.types.submodule { freeformType = settingsFormat.type; };
+ default = { };
+ description = ''
+ Configuration for vnstat. Refer to
+ [https://humdi.net/vnstat/man/vnstat.conf.html]
+ or {manpage}`vnstat.conf(5)` for more information.
+ '';
+ example = {
+ AlwaysAddNewInterfaces = 1;
+ };
+ };
};
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
+ environment.etc."vnstat.conf".source = settingsFormat.generate "vnstat.conf" cfg.settings;
+
users = {
groups.vnstatd = { };
@@ -59,4 +74,8 @@ in
};
};
};
+
+ meta = {
+ maintainers = with lib.maintainers; [ hmenke ];
+ };
}
diff --git a/nixos/modules/services/network-filesystems/ceph.nix b/nixos/modules/services/network-filesystems/ceph.nix
index c5d7e365fe67..328b33ee7d70 100644
--- a/nixos/modules/services/network-filesystems/ceph.nix
+++ b/nixos/modules/services/network-filesystems/ceph.nix
@@ -481,6 +481,15 @@ in
"/run/ceph".d = defaultConfig // {
mode = "0770";
};
+ # Ceph daemons log to files under `/var/log/ceph` by default
+ # (`log_to_file = true`, `log_file = /var/log/ceph/$cluster-$name.log`).
+ # The daemons run as the unprivileged `ceph` user under
+ # `ProtectSystem=full` and cannot create this directory themselves, and
+ # Ceph silently discards its logs if the directory is missing; it does
+ # not even warn; the `::open()` failure in `Log::reopen_log_file()` is
+ # ignored, see https://github.com/ceph/ceph/blob/v20.2.1/src/log/Log.cc#L165-L174.
+ # Create the directory so logging works out of the box.
+ "/var/log/ceph".d = defaultConfig;
"/var/lib/ceph".d = defaultConfig;
"/var/lib/ceph/mgr".d = lib.mkIf (cfg.mgr.enable) defaultConfig;
"/var/lib/ceph/mon".d = lib.mkIf (cfg.mon.enable) defaultConfig;
diff --git a/nixos/modules/services/network-filesystems/glusterfs.nix b/nixos/modules/services/network-filesystems/glusterfs.nix
index db00cdc11abb..c218d5505566 100644
--- a/nixos/modules/services/network-filesystems/glusterfs.nix
+++ b/nixos/modules/services/network-filesystems/glusterfs.nix
@@ -180,7 +180,9 @@ in
# Excludes one hook due to missing SELinux binaries.
+ ''
mkdir -p /var/lib/glusterd/hooks/
- ${rsync}/bin/rsync -a --exclude="S10selinux-label-brick.sh" ${glusterfs}/var/lib/glusterd/hooks/ /var/lib/glusterd/hooks/
+ # --copy-unsafe-links: the glusterfind hook is a symlink into the package's
+ # libexec that would dangle once copied verbatim into / (#257863).
+ ${rsync}/bin/rsync -a --copy-unsafe-links --exclude="S10selinux-label-brick.sh" ${glusterfs}/var/lib/glusterd/hooks/ /var/lib/glusterd/hooks/
${tlsCmd}
''
@@ -189,6 +191,12 @@ in
+ ''
mkdir -p /var/lib/glusterd/glusterfind/.keys
mkdir -p /var/lib/glusterd/hooks/1/delete/post/
+ ''
+ # Volume option presets, installed by upstream under $out/var; copy them so
+ # `gluster volume set group ` works (#33159).
+ + ''
+ mkdir -p /var/lib/glusterd/groups/
+ ${rsync}/bin/rsync -a ${glusterfs}/var/lib/glusterd/groups/ /var/lib/glusterd/groups/
'';
serviceConfig = {
diff --git a/nixos/modules/services/network-filesystems/kubo.nix b/nixos/modules/services/network-filesystems/kubo.nix
index 3c75423f3ffa..9c08028a0842 100644
--- a/nixos/modules/services/network-filesystems/kubo.nix
+++ b/nixos/modules/services/network-filesystems/kubo.nix
@@ -332,8 +332,9 @@ in
boot.kernel.sysctl."net.core.rmem_max" = lib.mkDefault 7500000;
boot.kernel.sysctl."net.core.wmem_max" = lib.mkDefault 7500000;
- programs.fuse = lib.mkIf (cfg.autoMount && cfg.settings.Mounts.FuseAllowOther) {
- userAllowOther = true;
+ programs.fuse = {
+ enable = lib.mkIf cfg.autoMount true;
+ userAllowOther = lib.mkIf cfg.settings.Mounts.FuseAllowOther true;
};
users.users = lib.mkIf (cfg.user == "ipfs") {
diff --git a/nixos/modules/services/network-filesystems/nfsd.nix b/nixos/modules/services/network-filesystems/nfsd.nix
index 9d3c3f9e4188..38986dcd85f8 100644
--- a/nixos/modules/services/network-filesystems/nfsd.nix
+++ b/nixos/modules/services/network-filesystems/nfsd.nix
@@ -6,6 +6,14 @@
}:
let
+ attrsToExports = lib.concatMapAttrsStringSep "\n" (
+ exportPoint: clientsAndOptions:
+ exportPoint
+ + lib.concatMapAttrsStringSep "" (
+ client: options: " ${client}(${lib.concatStringsSep "," options})"
+ ) clientsAndOptions
+ );
+
cfg = config.services.nfs.server;
exports = pkgs.writeText "exports" cfg.exports;
@@ -48,12 +56,26 @@ in
};
exports = lib.mkOption {
- type = lib.types.lines;
+ type = with lib.types; coercedTo (attrsOf (attrsOf (listOf str))) attrsToExports lines;
default = "";
description = ''
Contents of the /etc/exports file. See
{manpage}`exports(5)` for the format.
'';
+ example = {
+ "/usr" = {
+ "*.local.domain" = [ "ro" ];
+ "@trusted" = [ "rw" ];
+ };
+ "/home/joe" = {
+ "pc001" = [
+ "rw"
+ "all_squash"
+ "anonuid=150"
+ "anongid=100"
+ ];
+ };
+ };
};
hostName = lib.mkOption {
diff --git a/nixos/modules/services/network-filesystems/rsyncd.nix b/nixos/modules/services/network-filesystems/rsyncd.nix
index c3d81cb15302..8bae90b6cfda 100644
--- a/nixos/modules/services/network-filesystems/rsyncd.nix
+++ b/nixos/modules/services/network-filesystems/rsyncd.nix
@@ -132,7 +132,7 @@ in
description = "socket for fast remote file copy program daemon";
conflicts = [ "rsync.service" ];
- listenStreams = [ (toString cfg.port) ];
+ listenStreams = [ cfg.port ];
socketConfig.Accept = true;
wantedBy = [ "sockets.target" ];
diff --git a/nixos/modules/services/networking/adguardhome.nix b/nixos/modules/services/networking/adguardhome.nix
index 1df503146b54..caab4ba0c953 100644
--- a/nixos/modules/services/networking/adguardhome.nix
+++ b/nixos/modules/services/networking/adguardhome.nix
@@ -176,22 +176,32 @@ in
StartLimitBurst = 10;
};
- preStart = lib.optionalString (settings != null) ''
- if [ -e "$STATE_DIRECTORY/AdGuardHome.yaml" ] \
- && [ "${toString cfg.mutableSettings}" = "1" ]; then
- # First run a schema_version update on the existing configuration
- # This ensures that both the new config and the existing one have the same schema_version
- # Note: --check-config has the side effect of modifying the file at rest!
- ${lib.getExe cfg.package} -c "$STATE_DIRECTORY/AdGuardHome.yaml" --check-config
+ preStart =
+ let
+ installFresh = ''
+ cp --force "${configFile}" "$STATE_DIRECTORY/AdGuardHome.yaml"
+ chmod 600 "$STATE_DIRECTORY/AdGuardHome.yaml"
+ '';
+ in
+ lib.optionalString (settings != null) (
+ if cfg.mutableSettings then
+ ''
+ if [ -e "$STATE_DIRECTORY/AdGuardHome.yaml" ]; then
+ # First run a schema_version update on the existing configuration
+ # This ensures that both the new config and the existing one have the same schema_version
+ # Note: --check-config has the side effect of modifying the file at rest!
+ ${lib.getExe cfg.package} -c "$STATE_DIRECTORY/AdGuardHome.yaml" --check-config
- # Writing directly to AdGuardHome.yaml results in empty file
- ${lib.getExe pkgs.yaml-merge} "$STATE_DIRECTORY/AdGuardHome.yaml" "${configFile}" > "$STATE_DIRECTORY/AdGuardHome.yaml.tmp"
- mv "$STATE_DIRECTORY/AdGuardHome.yaml.tmp" "$STATE_DIRECTORY/AdGuardHome.yaml"
- else
- cp --force "${configFile}" "$STATE_DIRECTORY/AdGuardHome.yaml"
- chmod 600 "$STATE_DIRECTORY/AdGuardHome.yaml"
- fi
- '';
+ # Writing directly to AdGuardHome.yaml results in empty file
+ ${lib.getExe pkgs.yaml-merge} "$STATE_DIRECTORY/AdGuardHome.yaml" "${configFile}" > "$STATE_DIRECTORY/AdGuardHome.yaml.tmp"
+ mv "$STATE_DIRECTORY/AdGuardHome.yaml.tmp" "$STATE_DIRECTORY/AdGuardHome.yaml"
+ else
+ ${installFresh}
+ fi
+ ''
+ else
+ installFresh
+ );
serviceConfig = {
DynamicUser = true;
diff --git a/nixos/modules/services/networking/anubis.nix b/nixos/modules/services/networking/anubis.nix
index 5c207a27ec25..08f8e8bc87d9 100644
--- a/nixos/modules/services/networking/anubis.nix
+++ b/nixos/modules/services/networking/anubis.nix
@@ -374,6 +374,10 @@ in
anubis = { };
};
+ systemd.slices.system-anubis = {
+ description = "Anubis AI Firewall System Slice";
+ documentation = [ "https://anubis.techaro.lol" ];
+ };
systemd.services = lib.mapAttrs' (
name: instance:
lib.nameValuePair "${instanceName name}" {
@@ -396,6 +400,7 @@ in
);
serviceConfig = {
+ Slice = "system-anubis.slice";
User = instance.user;
Group = instance.group;
DynamicUser = true;
diff --git a/nixos/modules/services/networking/avahi-daemon.nix b/nixos/modules/services/networking/avahi-daemon.nix
index 6ff86daf6a9e..2e61b39835a2 100644
--- a/nixos/modules/services/networking/avahi-daemon.nix
+++ b/nixos/modules/services/networking/avahi-daemon.nix
@@ -262,6 +262,28 @@ in
'';
};
+ nssmdnsFull = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Whether to enable the full mDNS NSS (Name Service Switch) plug-in.
+
+ By default, only the minimal module is enabled. The minimal module
+ will only resolve `.local` domains and only perform reverse hostname
+ lookups for `169.254.0.0/16`. The full module will use mDNS to resolve any
+ domain allowed by [`/etc/mdns.allow`][1] and will perform reverse hostname
+ lookups for any IP address.
+
+ [1]: https://github.com/avahi/nss-mdns/tree/master#etcmdnsallow
+
+ ::: {.note}
+ Enabling this option will introduce a 5 second delay to failed reverse
+ hostname lookups. For example, this will often add a 5 second delay to
+ ping.
+ :::
+ '';
+ };
+
cacheEntriesMax = lib.mkOption {
type = lib.types.nullOr lib.types.int;
default = null;
@@ -287,6 +309,15 @@ in
(lib.mkIf cfg.wideArea "Enabling `services.avahi.wideArea` exposes this system to `CVE-2024-52615`.")
];
+ assertions = [
+ {
+ assertion = cfg.nssmdnsFull -> (cfg.nssmdns4 || cfg.nssmdns6);
+ message = ''
+ `services.avahi.nssmdnsFull` requires one or both of `services.avahi.nssmdns4` and/or `services.avahi.nssmdns6` to be enabled.
+ '';
+ }
+ ];
+
users.users.avahi = {
description = "avahi-daemon privilege separation user";
home = "/var/empty";
@@ -312,7 +343,7 @@ in
lib.optionals (cfg.nssmdns4 || cfg.nssmdns6) (
lib.mkMerge [
(lib.mkBefore [ "${mdns}_minimal [NOTFOUND=return]" ]) # before resolve
- (lib.mkAfter [ "${mdns}" ]) # after dns
+ (lib.mkAfter (lib.optional cfg.nssmdnsFull "${mdns}")) # after dns
]
);
diff --git a/nixos/modules/services/networking/cloudflared.nix b/nixos/modules/services/networking/cloudflared.nix
index 37889c7308da..26662e563356 100644
--- a/nixos/modules/services/networking/cloudflared.nix
+++ b/nixos/modules/services/networking/cloudflared.nix
@@ -240,6 +240,25 @@ in
example = "auto";
};
+ protocol = lib.mkOption {
+ type = lib.types.enum [
+ "auto"
+ "http2"
+ "quic"
+ ];
+ default = "auto";
+ description = ''
+ Specifies the protocol used to establish a connection between `cloudflared` and the Cloudflare global network.
+
+ The value `auto` lets `cloudflared` choose the protocol (currently QUIC, falling back to HTTP/2).
+ Set to `http2` to work around QUIC/UDP connectivity issues, such as restrictive firewalls, broken UDP path MTU, or QUIC interop bugs.
+ Set to `quic` to force QUIC.
+
+ See [Tunnel run parameters](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/configure-tunnels/cloudflared-parameters/run-parameters/#protocol).
+ '';
+ example = "http2";
+ };
+
default = lib.mkOption {
type = lib.types.str;
description = ''
@@ -397,6 +416,7 @@ in
environment = {
TUNNEL_ORIGIN_CERT = lib.mkIf (certFile != null) "%d/cert.pem";
TUNNEL_EDGE_IP_VERSION = tunnel.edgeIPVersion;
+ TUNNEL_TRANSPORT_PROTOCOL = tunnel.protocol;
};
}
) config.services.cloudflared.tunnels;
diff --git a/nixos/modules/services/networking/epmd.nix b/nixos/modules/services/networking/epmd.nix
index 08e9400702da..0d92a4586fe4 100644
--- a/nixos/modules/services/networking/epmd.nix
+++ b/nixos/modules/services/networking/epmd.nix
@@ -21,7 +21,7 @@ in
Erlang computations.
'';
};
- package = lib.mkPackageOption pkgs "erlang" { };
+ package = lib.mkPackageOption pkgs [ "beamPackages" "erlang" ] { };
listenStream = lib.mkOption {
type = oneOf [
str
diff --git a/nixos/modules/services/networking/frp.nix b/nixos/modules/services/networking/frp.nix
index f43a102d741d..fa636bbe06fc 100644
--- a/nixos/modules/services/networking/frp.nix
+++ b/nixos/modules/services/networking/frp.nix
@@ -76,6 +76,26 @@ in
];
};
};
+
+ extraConfig = lib.mkOption {
+ type = lib.types.lines;
+ default = "";
+ description = ''
+ Extra frp TOML configuration included at the end of the generated configuration file.
+ Especially useful for [port range mapping].
+
+ [port range mapping]: https://github.com/fatedier/frp#port-range-mapping
+ '';
+ example = ''
+ {{- range $_, $v := parseNumberRangePair "6000-6006,6007" "6000-6006,6007" }}
+ [[proxies]]
+ name = "tcp-{{ $v.First }}"
+ type = "tcp"
+ localPort = {{ $v.First }}
+ remotePort = {{ $v.Second }}
+ {{- end }}
+ '';
+ };
};
}
);
@@ -94,7 +114,18 @@ in
instance: options:
let
serviceName = "frp" + lib.optionalString (instance != "") ("-" + instance);
- configFile = settingsFormat.generate "${serviceName}.toml" options.settings;
+ baseConfigFile = settingsFormat.generate "${serviceName}-base.toml" options.settings;
+ configFile =
+ if options.extraConfig == "" then
+ baseConfigFile
+ else
+ pkgs.writeText "${serviceName}.toml" ''
+ # Nixos Module settings
+ ${builtins.readFile baseConfigFile}
+
+ # Nixos Module extraConfig
+ ${options.extraConfig}
+ '';
isClient = (options.role == "client");
isServer = (options.role == "server");
serviceCapability = lib.optionals isServer [ "CAP_NET_BIND_SERVICE" ];
@@ -144,5 +175,8 @@ in
) enabledInstances;
};
- meta.maintainers = with lib.maintainers; [ zaldnoay ];
+ meta.maintainers = with lib.maintainers; [
+ zaldnoay
+ epireyn
+ ];
}
diff --git a/nixos/modules/services/networking/ghostunnel.nix b/nixos/modules/services/networking/ghostunnel.nix
index 72d1494632ea..815118ac3d38 100644
--- a/nixos/modules/services/networking/ghostunnel.nix
+++ b/nixos/modules/services/networking/ghostunnel.nix
@@ -192,7 +192,12 @@ let
++ optional (config.cacert != null) "cacert:${config.cacert}";
};
script = concatStringsSep " " (
- [ "${mainCfg.package}/bin/ghostunnel" ]
+ [
+ "${mainCfg.package}/bin/ghostunnel"
+ # ghostunnel's landlock rules don't like reading the CA certs from /etc
+ # because they are links to /nix/store, which isn't part of its rules
+ "--disable-landlock"
+ ]
++ optional (config.keystore != null) "--keystore=$CREDENTIALS_DIRECTORY/keystore"
++ optional (config.cert != null) "--cert=$CREDENTIALS_DIRECTORY/cert"
++ optional (config.key != null) "--key=$CREDENTIALS_DIRECTORY/key"
diff --git a/nixos/modules/services/networking/gokapi.nix b/nixos/modules/services/networking/gokapi.nix
index d90588b55ba0..9ff12df5c036 100644
--- a/nixos/modules/services/networking/gokapi.nix
+++ b/nixos/modules/services/networking/gokapi.nix
@@ -82,7 +82,7 @@ in
config = lib.mkIf cfg.enable {
systemd.services.gokapi = {
- wantedBy = [ "default.target" ];
+ wantedBy = [ "multi-user.target" ];
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
environment = lib.mapAttrs (_: value: toString value) cfg.environment;
diff --git a/nixos/modules/services/networking/headplane.nix b/nixos/modules/services/networking/headplane.nix
index 19e131fcab8d..7285accb5962 100644
--- a/nixos/modules/services/networking/headplane.nix
+++ b/nixos/modules/services/networking/headplane.nix
@@ -44,7 +44,7 @@ in
settings = mkOption {
description = ''
Headplane configuration options. Generates a YAML config file.
- See: https://github.com/tale/headplane/blob/main/config.example.yaml
+ See .
'';
type = types.submodule {
options = {
@@ -129,6 +129,16 @@ in
headscale = mkOption {
type = types.submodule {
options = {
+ api_key_path = mkOption {
+ type = types.nullOr types.path;
+ default = null;
+ description = ''
+ Path to a file containing a Headscale API key.
+ This is required for OIDC authentication aswell for the Headplane agent.
+ '';
+ example = lib.literalExpression "config.sops.secrets.headplane_pre_authkey.path";
+ };
+
url = mkOption {
type = types.str;
default = "http://127.0.0.1:${toString config.services.headscale.port}";
@@ -211,15 +221,6 @@ in
'';
};
- pre_authkey_path = mkOption {
- type = types.nullOr types.path;
- default = null;
- description = ''
- Path to a file containing a Headscale pre-auth key for the agent.
- '';
- example = lib.literalExpression "config.sops.secrets.headplane_pre_authkey.path";
- };
-
executable_path = mkOption {
type = types.path;
readOnly = true;
@@ -237,20 +238,14 @@ in
};
cache_ttl = mkOption {
- type = types.nullOr types.int;
- default = null;
+ type = types.ints.positive;
+ default = 180000;
description = ''
- Deprecated cache TTL for the agent. This option is accepted
- by Headplane 0.6.2 but has no effect.
+ How long to cache agent information (in milliseconds).
+ If you want data to update faster, reduce the TTL, but this will increase the frequency of requests to Headscale.
'';
};
- cache_path = mkOption {
- type = types.path;
- default = "/var/lib/headplane/agent_cache.json";
- description = "The path to store the agent's cache.";
- };
-
work_dir = mkOption {
type = types.path;
default = "/var/lib/headplane/agent";
@@ -325,16 +320,6 @@ in
example = lib.literalExpression "config.sops.secrets.oidc_client_secret.path";
};
- headscale_api_key_path = mkOption {
- type = types.nullOr types.path;
- default = null;
- description = ''
- Path to a file containing the Headscale API key.
- Required for OIDC authentication.
- '';
- example = lib.literalExpression "config.sops.secrets.headscale_api_key.path";
- };
-
disable_api_key_login = mkOption {
type = types.bool;
default = false;
@@ -366,25 +351,6 @@ in
'';
};
- redirect_uri = mkOption {
- type = types.nullOr types.str;
- default = null;
- description = ''
- Deprecated OIDC redirect URI. Use services.headplane.settings.server.base_url
- instead; Headplane derives the callback URL from it.
- '';
- example = "https://headplane.example.com/admin/oidc/callback";
- };
-
- strict_validation = mkOption {
- type = types.nullOr types.bool;
- default = null;
- description = ''
- Deprecated OIDC validation setting. This option is accepted
- by Headplane 0.6.2 but has no effect.
- '';
- };
-
profile_picture_source = mkOption {
type = types.enum [
"oidc"
@@ -429,16 +395,6 @@ in
description = "Custom userinfo endpoint URL.";
example = "https://provider.example.com/userinfo";
};
-
- user_storage_file = mkOption {
- type = types.nullOr types.path;
- default = null;
- description = ''
- Deprecated path to the pre-0.6.2 JSON user database.
- Headplane uses this once to migrate users into its internal database.
- '';
- example = "/var/lib/headplane/users.json";
- };
};
}
);
@@ -452,33 +408,6 @@ in
};
config = mkIf cfg.enable {
- warnings =
- lib.optionals (cfg.settings.oidc != null && cfg.settings.oidc.redirect_uri != null) [
- ''
- services.headplane.settings.oidc.redirect_uri is deprecated by Headplane 0.6.2.
- Use services.headplane.settings.server.base_url instead; Headplane derives
- the OIDC callback URL from it.
- ''
- ]
- ++ lib.optionals (cfg.settings.oidc != null && cfg.settings.oidc.strict_validation != null) [
- ''
- services.headplane.settings.oidc.strict_validation is deprecated and has no effect
- in Headplane 0.6.2.
- ''
- ]
- ++ lib.optionals (cfg.settings.oidc != null && cfg.settings.oidc.user_storage_file != null) [
- ''
- services.headplane.settings.oidc.user_storage_file is deprecated. Headplane 0.6.2
- uses it only to migrate the pre-0.6.2 JSON user database into the internal database.
- ''
- ]
- ++ lib.optionals (agentSettings != null && agentSettings.cache_ttl != null) [
- ''
- services.headplane.settings.integration.agent.cache_ttl is deprecated and has no
- effect in Headplane 0.6.2.
- ''
- ];
-
assertions = [
{
assertion = config.services.headscale.enable;
@@ -502,26 +431,25 @@ in
'';
}
{
- assertion = cfg.settings.oidc == null || cfg.settings.oidc.headscale_api_key_path != null;
+ assertion = cfg.settings.oidc == null || cfg.settings.headscale.api_key_path != null;
message = ''
- services.headplane.settings.oidc.headscale_api_key_path must be set
- when services.headplane.settings.oidc is non-null. Headplane's OIDC
- flow requires a Headscale API key to mint sessions.
+ services.headplane.settings.headscale.api_key_path must be set
+ when services.headplane.settings.oidc is non-null.
+ Headplane's OIDC flow requires a Headscale API key to mint sessions.
'';
}
{
assertion =
- agentSettings == null || !agentSettings.enabled || agentSettings.pre_authkey_path != null;
+ agentSettings == null || !agentSettings.enabled || cfg.settings.headscale.api_key_path != null;
message = ''
- services.headplane.settings.integration.agent.pre_authkey_path must be set
- when the agent is enabled.
+ services.headplane.settings.headscale.api_key_path must be set when the agent is enabled.
'';
}
];
environment = {
systemPackages = [ cfg.package ];
- etc."headplane/config.yaml".source = "${settingsFile}";
+ etc."headplane/config.yaml".source = settingsFile;
};
systemd.services.headplane = {
@@ -534,6 +462,7 @@ in
config.systemd.services.headscale.name
];
requires = [ config.systemd.services.headscale.name ];
+ restartTriggers = [ settingsFile ];
environment = {
HEADPLANE_DEBUG_LOG = toString cfg.debug;
diff --git a/nixos/modules/services/networking/headscale.nix b/nixos/modules/services/networking/headscale.nix
index b4873b854dd1..be868cfff8a6 100644
--- a/nixos/modules/services/networking/headscale.nix
+++ b/nixos/modules/services/networking/headscale.nix
@@ -36,8 +36,10 @@ in
configFile = lib.mkOption {
type = lib.types.path;
readOnly = true;
- default = settingsFormat.generate "headscale.yaml" cfg.settings;
- defaultText = lib.literalExpression ''(pkgs.formats.yaml { }).generate "headscale.yaml" config.services.headscale.settings'';
+ default = settingsFormat.generate "headscale.yaml" (
+ lib.filterAttrsRecursive (n: v: v != null) cfg.settings
+ );
+ defaultText = lib.literalExpression ''(pkgs.formats.yaml { }).generate "headscale.yaml" (lib.filterAttrsRecursive (n: v: v != null) config.services.headscale.settings)'';
description = ''
Path to the configuration file of headscale.
'';
@@ -398,6 +400,16 @@ in
'';
};
+ extra_records_path = lib.mkOption {
+ type = lib.types.nullOr lib.types.str;
+ default = null;
+ description = ''
+ Path to a JSON file containing extra DNS records.
+ This is mutually exclusive with {option}`extra_records`.
+ '';
+ example = "/run/headscale/records.json";
+ };
+
search_domains = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
@@ -657,6 +669,10 @@ in
assertion = with cfg.settings; dns.override_local_dns -> dns.nameservers.global != [ ];
message = "dns.nameservers.global must be set when overriding local DNS";
}
+ {
+ assertion = with cfg.settings; dns.extra_records_path == null || dns.extra_records == null;
+ message = "dns.extra_records and dns.extra_records_path are mutually exclusive";
+ }
(assertRemovedOption [ "settings" "acl_policy_path" ] "Use `policy.path` instead.")
(assertRemovedOption [ "settings" "db_host" ] "Use `database.postgres.host` instead.")
(assertRemovedOption [ "settings" "db_name" ] "Use `database.postgres.name` instead.")
diff --git a/nixos/modules/services/networking/kea.nix b/nixos/modules/services/networking/kea.nix
index 99d938c14036..6612de82ffec 100644
--- a/nixos/modules/services/networking/kea.nix
+++ b/nixos/modules/services/networking/kea.nix
@@ -12,12 +12,6 @@ let
chooseNotNull = x: y: if x != null then x else y;
- ctrlAgentConfig = chooseNotNull cfg.ctrl-agent.configFile (
- format.generate "kea-ctrl-agent.conf" {
- Control-agent = cfg.ctrl-agent.settings;
- }
- );
-
dhcp4Config = chooseNotNull cfg.dhcp4.configFile (
format.generate "kea-dhcp4.conf" {
Dhcp4 = cfg.dhcp4.settings;
@@ -37,48 +31,15 @@ let
);
in
{
+ imports = [
+ (lib.mkRemovedOptionModule [ "services" "kea" "ctrl-agent" ] ''
+ https://kb.isc.org/docs/things-to-be-aware-of-when-upgrading-to-kea-3-2#the-kea-control-agent-ca
+ '')
+ ];
+
options.services.kea = with lib.types; {
package = lib.mkPackageOption pkgs "kea" { };
- ctrl-agent = lib.mkOption {
- description = ''
- Kea Control Agent configuration
- '';
- default = { };
- type = submodule {
- options = {
- enable = lib.mkEnableOption "Kea Control Agent";
-
- extraArgs = lib.mkOption {
- type = listOf str;
- default = [ ];
- description = ''
- List of additional arguments to pass to the daemon.
- '';
- };
-
- configFile = lib.mkOption {
- type = nullOr path;
- default = null;
- description = ''
- Kea Control Agent configuration as a path, see .
-
- Takes preference over [settings](#opt-services.kea.ctrl-agent.settings).
- Most users should prefer using [settings](#opt-services.kea.ctrl-agent.settings) instead.
- '';
- };
-
- settings = lib.mkOption {
- type = format.type;
- default = null;
- description = ''
- Kea Control Agent configuration as an attribute set, see .
- '';
- };
- };
- };
- };
-
dhcp4 = lib.mkOption {
description = ''
DHCP4 Server configuration
@@ -290,7 +251,7 @@ in
UMask = "0077";
};
in
- lib.mkIf (cfg.ctrl-agent.enable || cfg.dhcp4.enable || cfg.dhcp6.enable || cfg.dhcp-ddns.enable) (
+ lib.mkIf (cfg.dhcp4.enable || cfg.dhcp6.enable || cfg.dhcp-ddns.enable) (
lib.mkMerge [
{
environment.systemPackages = [ cfg.package ];
@@ -302,58 +263,6 @@ in
users.groups.kea = { };
}
- (lib.mkIf cfg.ctrl-agent.enable {
- assertions = [
- {
- assertion = lib.xor (cfg.ctrl-agent.settings == null) (cfg.ctrl-agent.configFile == null);
- message = "Either services.kea.ctrl-agent.settings or services.kea.ctrl-agent.configFile must be set to a non-null value.";
- }
- ];
-
- environment.etc."kea/ctrl-agent.conf".source = ctrlAgentConfig;
-
- systemd.services.kea-ctrl-agent = {
- description = "Kea Control Agent";
- documentation = [
- "man:kea-ctrl-agent(8)"
- "https://kea.readthedocs.io/en/kea-${cfg.package.version}/arm/agent.html"
- ];
-
- wants = [
- "network-online.target"
- ];
- after = [
- "network-online.target"
- "time-sync.target"
- ];
- wantedBy = [
- "kea-dhcp4-server.service"
- "kea-dhcp6-server.service"
- "kea-dhcp-ddns-server.service"
- ];
-
- environment = commonEnvironment;
-
- restartTriggers = [
- ctrlAgentConfig
- ];
-
- serviceConfig = {
- ExecStart = utils.escapeSystemdExecArgs (
- [
- (lib.getExe' cfg.package "kea-ctrl-agent")
- "-c"
- "/etc/kea/ctrl-agent.conf"
- ]
- ++ cfg.ctrl-agent.extraArgs
- );
- KillMode = "process";
- Restart = "on-failure";
- }
- // commonServiceConfig;
- };
- })
-
(lib.mkIf cfg.dhcp4.enable {
assertions = [
{
diff --git a/nixos/modules/services/networking/keepalived/default.nix b/nixos/modules/services/networking/keepalived/default.nix
index 61f9d0b5afd9..6c4a44ca6c72 100644
--- a/nixos/modules/services/networking/keepalived/default.nix
+++ b/nixos/modules/services/networking/keepalived/default.nix
@@ -325,18 +325,28 @@ in
assertions = flatten (map vrrpInstanceAssertions vrrpInstances);
- networking.firewall = lib.mkIf cfg.openFirewall {
- extraCommands = ''
- # Allow VRRP and AH packets
- ip46tables -A nixos-fw -p vrrp -m comment --comment "services.keepalived.openFirewall" -j ACCEPT
- ip46tables -A nixos-fw -p ah -m comment --comment "services.keepalived.openFirewall" -j ACCEPT
- '';
+ networking.firewall = lib.mkIf cfg.openFirewall (
+ if config.networking.nftables.enable then
+ {
+ extraInputRules = ''
+ meta l4proto vrrp counter accept comment "services.keepalived.openFirewall"
+ meta l4proto ah counter accept comment "services.keepalived.openFirewall"
+ '';
+ }
+ else
+ {
+ extraCommands = ''
+ # Allow VRRP and AH packets
+ ip46tables -A nixos-fw -p vrrp -m comment --comment "services.keepalived.openFirewall" -j ACCEPT
+ ip46tables -A nixos-fw -p ah -m comment --comment "services.keepalived.openFirewall" -j ACCEPT
+ '';
- extraStopCommands = ''
- ip46tables -D nixos-fw -p vrrp -m comment --comment "services.keepalived.openFirewall" -j ACCEPT
- ip46tables -D nixos-fw -p ah -m comment --comment "services.keepalived.openFirewall" -j ACCEPT
- '';
- };
+ extraStopCommands = ''
+ ip46tables -D nixos-fw -p vrrp -m comment --comment "services.keepalived.openFirewall" -j ACCEPT
+ ip46tables -D nixos-fw -p ah -m comment --comment "services.keepalived.openFirewall" -j ACCEPT
+ '';
+ }
+ );
systemd.timers.keepalived-boot-delay = {
description = "Keepalive Daemon delay to avoid instant transition to MASTER state";
diff --git a/nixos/modules/services/networking/llama-swap.nix b/nixos/modules/services/networking/llama-swap.nix
index 3739e1b3f5de..b1ca322756db 100644
--- a/nixos/modules/services/networking/llama-swap.nix
+++ b/nixos/modules/services/networking/llama-swap.nix
@@ -42,6 +42,15 @@ in
'';
};
+ useLlamaCppCacheDir = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Whether to use {file}`/var/cache/llama-cpp` as {env}`LLAMA_CACHE` instead
+ of {file}`/var/cache/llama-swap` to share models and other cache with {option}`services.llama-cpp`.
+ '';
+ };
+
tls = {
enable = lib.mkEnableOption "TLS encryption";
@@ -113,6 +122,10 @@ in
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
+ environment = {
+ LLAMA_CACHE = lib.mkDefault "/var/cache/${config.systemd.services.llama-swap.serviceConfig.CacheDirectory}";
+ };
+
serviceConfig = {
Type = "exec";
ExecStart = "${lib.getExe cfg.package} ${
@@ -130,6 +143,12 @@ in
Restart = "on-failure";
RestartSec = 3;
+ CacheDirectory =
+ if cfg.useLlamaCppCacheDir then
+ config.systemd.services.llama-cpp.serviceConfig.CacheDirectory
+ else
+ "llama-swap";
+
# for GPU acceleration
PrivateDevices = false;
diff --git a/nixos/modules/services/networking/mjpg-streamer.nix b/nixos/modules/services/networking/mjpg-streamer.nix
index 4f0747d8a262..b7f0d93c0d7d 100644
--- a/nixos/modules/services/networking/mjpg-streamer.nix
+++ b/nixos/modules/services/networking/mjpg-streamer.nix
@@ -20,6 +20,8 @@ in
enable = mkEnableOption "mjpg-streamer webcam streamer";
+ package = mkPackageOption pkgs "mjpg-streamer" { };
+
inputPlugin = mkOption {
type = types.str;
default = "input_uvc.so";
@@ -77,7 +79,7 @@ in
IPLUGIN="${cfg.inputPlugin}"
OPLUGIN="${cfg.outputPlugin}"
OPLUGIN="''${OPLUGIN//@www@/${pkgs.mjpg-streamer}/share/mjpg-streamer/www}"
- exec ${pkgs.mjpg-streamer}/bin/mjpg_streamer -i "$IPLUGIN" -o "$OPLUGIN"
+ exec ${lib.getExe cfg.package} -i "$IPLUGIN" -o "$OPLUGIN"
'';
};
diff --git a/nixos/modules/services/networking/mptcpd.nix b/nixos/modules/services/networking/mptcpd.nix
index 04279388d9de..429a3e856a91 100644
--- a/nixos/modules/services/networking/mptcpd.nix
+++ b/nixos/modules/services/networking/mptcpd.nix
@@ -5,11 +5,9 @@
...
}:
let
-
cfg = config.services.mptcpd;
-
+ settingsFormat = pkgs.formats.ini { };
in
-
{
options = {
@@ -20,15 +18,57 @@ in
package = lib.mkPackageOption pkgs "mptcpd" { };
+ settings = lib.mkOption {
+ type = settingsFormat.type;
+ default = { };
+ example = lib.literalExpression ''
+ {
+ core = {
+ "addr-flags" = "subflow";
+ "notify-flags" = "existing,skip_link_local,skip_loopback,check_route";
+ "load-plugins" = "addr_adv,sspi";
+ };
+ }
+ '';
+ description = ''
+ mptcpd configuration written to {file}`/etc/mptcpd/mptcpd.conf`.
+
+ See {manpage}`mptcpd(8)` for details about available options and syntax.
+ '';
+ };
+
};
};
config = lib.mkIf cfg.enable {
+ # Disable NetworkManager from configuring the MPTCP endpoints.
+ # See https://github.com/multipath-tcp/mptcpd/blob/48942b2110805af236ca41164fde67830efd7507/README.md?plain=1#L19-L38
+ networking.networkmanager.connectionConfig = {
+ "connection.mptcp-flags" = 1;
+ };
+
+ environment.etc."mptcpd/mptcpd.conf".source = settingsFormat.generate "mptcpd.conf" cfg.settings;
+
environment.systemPackages = [ cfg.package ];
+ services.mptcpd.settings = {
+ core = {
+ log = lib.mkDefault "journal";
+ "plugin-dir" = "${cfg.package}/lib/mptcpd";
+ "path-manager" = lib.mkDefault "addr_adv";
+ };
+ };
+
systemd.packages = [ cfg.package ];
+ systemd.services.mptcp = {
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig.ExecStart = [
+ ""
+ "${cfg.package}/libexec/mptcpd"
+ ];
+ };
};
diff --git a/nixos/modules/services/networking/netbird.nix b/nixos/modules/services/networking/netbird.nix
index d7514f2360d3..c96be69162cf 100644
--- a/nixos/modules/services/networking/netbird.nix
+++ b/nixos/modules/services/networking/netbird.nix
@@ -340,7 +340,8 @@ in
substitute ${cfg.ui.package}/share/applications/netbird.desktop \
"$out/share/applications/${mkBin "netbird"}.desktop" \
--replace-fail 'Name=Netbird' "Name=NetBird @ ${client.service.name}" \
- --replace-fail 'Icon=netbird' "Icon=${cfg.ui.package}/share/pixmaps/netbird.png"
+ --replace-fail 'Icon=netbird' "Icon=${cfg.ui.package}/share/icons/hicolor/256x256/apps/netbird.png" \
+ --replace-fail 'Exec=netbird-ui' "Exec=${mkBin "netbird-ui"}"
'')
];
};
diff --git a/nixos/modules/services/networking/networkd-dispatcher.nix b/nixos/modules/services/networking/networkd-dispatcher.nix
index eb874447bb3a..e2f766463e38 100644
--- a/nixos/modules/services/networking/networkd-dispatcher.nix
+++ b/nixos/modules/services/networking/networkd-dispatcher.nix
@@ -93,6 +93,10 @@ in
config = mkIf cfg.enable {
+ warnings = mkIf (!config.systemd.network.enable) [
+ "services.networkd-dispatcher will not execute any scripts unless networkd is enabled, either via `systemd.network.enable` or via `networking.useNetworkd`."
+ ];
+
systemd = {
packages = [ pkgs.networkd-dispatcher ];
services.networkd-dispatcher = {
diff --git a/nixos/modules/services/networking/nordvpn.md b/nixos/modules/services/networking/nordvpn.md
new file mode 100644
index 000000000000..06016098894a
--- /dev/null
+++ b/nixos/modules/services/networking/nordvpn.md
@@ -0,0 +1,65 @@
+# NordVPN {#module-services-nordvpn}
+
+*Source:* {file}`modules/services/networking/nordvpn.nix`
+
+*Upstream documentation:*
+
+NordVPN offers a paid virtual private network (VPN) service.
+The service operates as closed-source,
+but the Linux client uses open-source code licensed under GPLv3.
+A minimal configuration in NixOS appears as follows:
+
+```nix
+{
+ services.nordvpn.enable = true;
+ networking.firewall.enable = true;
+ networking.firewall.checkReversePath = "loose";
+}
+```
+
+When using a firewall, set `networking.firewall.checkReversePath` to `"loose"` or `false`.
+NordVPN includes a `kill-switch` feature that blocks all packets not associated with the VPN connection.
+
+Additionally, add your user to the `nordvpn` group.
+
+```nix
+{
+ users.users.yourUser = {
+ #..
+ extraGroups = [
+ #..
+ "nordvpn"
+ ];
+ };
+}
+```
+
+If you prefer to use your own user and group, you can do so using
+
+```nix
+{
+ services.nordvpn.user = "SOME-USER";
+ services.nordvpn.group = "SOME-GROUP";
+}
+```
+
+NordVPN provides several useful CLI commands, including:
+
+```bash
+nordvpn login # Log in using an OAuth URL
+nordvpn login --token # Log in with a token obtained from your NordVPN account
+nordvpn c # Connect to the VPN
+nordvpn c ie # Connect to a NordVPN server in Ireland
+nordvpn d # Disconnect from the VPN
+nordvpn set technology openvpn # Switch to OpenVPN technology
+nordvpn c # Reconnect after changing technology
+```
+
+Additionally, if you prefer to use the friendly GUI,
+
+```bash
+nordvpn-gui
+```
+
+**Disclaimer:** NixOS currently does not support meshnet.
+Contributions welcome!
diff --git a/nixos/modules/services/networking/nordvpn.nix b/nixos/modules/services/networking/nordvpn.nix
new file mode 100644
index 000000000000..b38d75dd519d
--- /dev/null
+++ b/nixos/modules/services/networking/nordvpn.nix
@@ -0,0 +1,171 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.services.nordvpn;
+ defaultUser = "nordvpn";
+ defaultGroup = "nordvpn";
+
+ nordvpn =
+ let
+ cli = cfg.package.cli.overrideAttrs (old: {
+ preBuild =
+ let
+ extraPreBuild = lib.optionalString (cfg.group != defaultGroup) ''
+ substituteInPlace internal/permissions.go \
+ --replace-fail \
+ 'string{"nordvpn"}' \
+ 'string{"${cfg.group}"}'
+
+ substituteInPlace internal/constants.go \
+ --replace-fail \
+ 'NordvpnGroup = "nordvpn"' \
+ 'NordvpnGroup = "${cfg.group}"'
+ '';
+ in
+ extraPreBuild + (old.preBuild or "");
+
+ # postFixup wraps nordvpnd so that it can find binaries that it calls.
+ # here, instead, use systemd to update the path to those binaries.
+ postFixup = "";
+ });
+ in
+ pkgs.symlinkJoin {
+ inherit (cfg.package) pname version meta;
+ paths = [
+ cli
+ cfg.package.gui
+ ];
+ };
+in
+{
+ options.services.nordvpn = {
+ enable = lib.mkEnableOption "Enable NordVPN";
+ package = lib.mkPackageOption pkgs "nordvpn" { };
+ user = lib.mkOption {
+ type = lib.types.str;
+ default = defaultUser;
+ description = ''
+ The User that owns the `nordvpnd` systemd process.
+ If overriding the default, a user with the same name must exist.
+ '';
+ };
+ group = lib.mkOption {
+ type = lib.types.str;
+ default = defaultGroup;
+ description = ''
+ The Group that owns the `nordvpnd` systemd process.
+ If overriding the default, a group with the same name must exist.
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+
+ # create the default user if that's the one used
+ users.users = lib.mkIf (cfg.user == defaultUser) {
+ ${defaultUser} = {
+ description = "User that runs `nordvpnd`.";
+ group = cfg.group;
+ isSystemUser = true;
+ };
+ };
+
+ # create the default group if that's the one used
+ users.groups = lib.mkIf (cfg.group == defaultGroup) {
+ ${defaultGroup} = { };
+ };
+
+ # nordvpnd uses resolved to configure dns
+ services.resolved.enable = true;
+
+ # policy that allows nordvpnd to configure dns
+ security.polkit = {
+ enable = true;
+ extraConfig = ''
+ polkit.addRule(function(action, subject) {
+ if (action.id == "org.freedesktop.resolve1.set-dns-servers"
+ && subject.isInGroup("${cfg.group}")) {
+ return polkit.Result.YES;
+ }
+ });
+ '';
+ };
+
+ environment.systemPackages = [
+ nordvpn
+ ];
+
+ systemd.services.nordvpnd = {
+ after = [ "network-online.target" ];
+ description = "NordVPN daemon.";
+ path = (
+ with pkgs;
+ [
+ e2fsprogs
+ iproute2
+ libxslt
+ nftables
+ procps
+ wireguard-tools
+ ]
+ ++ [ nordvpn ]
+ );
+ serviceConfig = {
+ # nordvpnd needs CAP_NET_ADMIN to configure network interfaces
+ AmbientCapabilities = "CAP_NET_ADMIN";
+ CapabilityBoundingSet = "CAP_NET_ADMIN";
+ ExecStart = lib.getExe' nordvpn "nordvpnd";
+ Group = cfg.group;
+ KillMode = "process";
+ NonBlocking = true;
+ Requires = "nordvpnd.socket";
+ Restart = "on-failure";
+ RestartSec = 5;
+ RuntimeDirectory = "nordvpn";
+ RuntimeDirectoryMode = "0750";
+ StateDirectory = "nordvpn";
+ StateDirectoryMode = "0750";
+ User = cfg.user;
+ };
+ wantedBy = [ "default.target" ];
+ wants = [ "network-online.target" ];
+ };
+
+ systemd.sockets.nordvpnd = {
+ description = "NordVPN Daemon Socket";
+ listenStreams = [ "/run/nordvpn/nordvpnd.sock" ];
+ partOf = [ "nordvpnd.service" ];
+ socketConfig = {
+ DirectoryMode = "0750";
+ NoDelay = true;
+ SocketGroup = cfg.group;
+ SocketMode = "0770";
+ SocketUser = cfg.user;
+ };
+ wantedBy = [ "sockets.target" ];
+ };
+
+ systemd.user.services.norduserd = {
+ after = [ "network-online.target" ];
+ description = "NordUserD Service";
+ serviceConfig = {
+ ExecStart = lib.getExe' nordvpn "norduserd";
+ NonBlocking = true;
+ Restart = "on-failure";
+ RestartSec = 5;
+ };
+ wantedBy = [ "graphical-session.target" ];
+ wants = [ "network-online.target" ];
+ };
+
+ };
+
+ meta = {
+ doc = ./nordvpn.md;
+ maintainers = with lib.maintainers; [ different-error ];
+ };
+}
diff --git a/nixos/modules/services/networking/ntp/chrony.nix b/nixos/modules/services/networking/ntp/chrony.nix
index 8dac1de5c574..628fb09ed156 100644
--- a/nixos/modules/services/networking/ntp/chrony.nix
+++ b/nixos/modules/services/networking/ntp/chrony.nix
@@ -300,6 +300,7 @@ in
serviceConfig = {
Type = "notify";
ExecStart = "${chronyPkg}/bin/chronyd ${toString chronyFlags}";
+ Restart = "on-failure";
# Proc filesystem
ProcSubset = "pid";
diff --git a/nixos/modules/services/networking/ntp/ntpd-rs.nix b/nixos/modules/services/networking/ntp/ntpd-rs.nix
index 89735696616c..d68b7762805e 100644
--- a/nixos/modules/services/networking/ntp/ntpd-rs.nix
+++ b/nixos/modules/services/networking/ntp/ntpd-rs.nix
@@ -70,6 +70,7 @@ in
services.ntpd-rs.settings = {
observability = {
+ log-level = lib.mkDefault "warn";
observation-path = lib.mkDefault "/var/run/ntpd-rs/observe";
};
source = lib.mkIf cfg.useNetworkingTimeServers (
diff --git a/nixos/modules/services/networking/onedrive.md b/nixos/modules/services/networking/onedrive.md
new file mode 100644
index 000000000000..2a114230c85f
--- /dev/null
+++ b/nixos/modules/services/networking/onedrive.md
@@ -0,0 +1,39 @@
+# Microsoft OneDrive {#module-services-onedrive}
+
+Microsoft Onedrive is a popular cloud file-hosting service, used by 85%
+of Fortune 500 companies. NixOS uses a popular OneDrive client for Linux
+maintained by github user abraunegg. The Linux client is excellent and
+allows customization of which files or paths to download, not much
+unlike the default Windows OneDrive client by Microsoft itself. The
+client allows syncing with multiple onedrive accounts at the same time,
+of any type- OneDrive personal, OneDrive business, Office365 and
+Sharepoint libraries, without any additional charge.
+
+For more information, guides and documentation, see .
+
+To enable OneDrive support, add the following to your
+`configuration.nix`: {option}`services.onedrive.enable` = true;
+
+This installs the `onedrive` package and a service `onedriveLauncher`
+which will instantiate a `onedrive` service for all your OneDrive
+accounts. Follow the steps in documentation of the onedrive client to
+setup your accounts. To use the service with multiple accounts, create a
+file named `onedrive-launcher` in `~/.config` and add the filename of
+the config directory, relative to `~/.config`. For example, if you have
+two OneDrive accounts with configs in `~/.config/onedrive_bob_work` and
+`~/.config/onedrive_bob_personal`, add the following lines:
+
+```
+onedrive_bob_work
+# Not in use:
+# onedrive_bob_office365
+onedrive_bob_personal
+```
+
+No such file needs to be created if you are using only a single OneDrive
+account with config in the default location `~/.config/onedrive`, in the
+absence of `~/.config/onedrive-launcher`, only a single service is
+instantiated, with default config path.
+
+If you wish to use a custom OneDrive package, say from another channel,
+add the following line: {option}`services.onedrive.package` = pkgs.unstable.onedrive;
diff --git a/nixos/modules/services/networking/onedrive.nix b/nixos/modules/services/networking/onedrive.nix
index f7d1f0d0de5c..b466f4db5918 100644
--- a/nixos/modules/services/networking/onedrive.nix
+++ b/nixos/modules/services/networking/onedrive.nix
@@ -23,17 +23,13 @@ let
in
{
- ### Documentation
- # meta.doc = ./onedrive.xml;
-
- ### Interface
+ meta.doc = ./onedrive.md;
options.services.onedrive = {
enable = lib.mkEnableOption "OneDrive service";
package = lib.mkPackageOption pkgs "onedrive" { };
};
- ### Implementation
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
diff --git a/nixos/modules/services/networking/sabnzbd/default.nix b/nixos/modules/services/networking/sabnzbd/default.nix
index d4a894faf96f..3775ba680758 100644
--- a/nixos/modules/services/networking/sabnzbd/default.nix
+++ b/nixos/modules/services/networking/sabnzbd/default.nix
@@ -29,71 +29,24 @@ let
cfg = config.services.sabnzbd;
+ # Sabnzbd expects 0/1 instead of true/false
+ fixupSettings = lib.mapAttrsRecursive (
+ path: value:
+ if value == true then
+ 1
+ else if value == false then
+ 0
+ else
+ value
+ );
+
mandatoryGlobalSettings = {
"__version__" = 19;
"__encoding__" = "utf-8";
};
- allSettings = mandatoryGlobalSettings // cfg.settings;
+ allSettings = fixupSettings (mandatoryGlobalSettings // cfg.settings);
- # sabnzbd uses configobj type inis, which support
- # nested sections specified by increasing numbers
- # of square brackets (but not toml style dotted paths)
- configObjAtom = types.oneOf [
- types.str
- types.int
- types.bool
- ];
-
- configObjValue =
- let
- valueType =
- types.oneOf [
- types.str
- types.int
- types.bool
- (types.listOf configObjAtom)
- (types.attrsOf valueType)
- ]
- // {
- description = "ConfigObj type";
- };
- in
- valueType;
-
- configObjIni =
- { }:
- let
- extractAtoms = lib.filterAttrs (k: v: v != null && !lib.isAttrs v);
- extractSections = lib.filterAttrs (k: v: lib.isAttrs v);
- mkValueString = (
- v:
- if true == v then
- "1"
- else if false == v then
- "0"
- else
- mkValueStringDefault { } v
- );
- mkKeyValue = mkKeyValueDefault { inherit mkValueString; } "=";
- mkSection = (
- depth: attrs:
- let
- sections = extractSections attrs;
- sectionHeadingLeft = lib.concatStrings (lib.replicate (depth + 1) "[");
- sectionHeadingRight = lib.concatStrings (lib.replicate (depth + 1) "]");
- mkSectionHeading =
- name: "${sectionHeadingLeft}${lib.escape [ "[" "]" ] name}${sectionHeadingRight}";
- mkSubsection = name: attrs: (mkSectionHeading name) + "\n" + (mkSection (depth + 1) attrs) + "\n";
- in
- toKeyValue { inherit mkKeyValue; } (extractAtoms attrs)
- + "\n"
- + lib.concatStrings (lib.mapAttrsToList mkSubsection sections)
- );
- in
- {
- type = types.attrsOf configObjValue;
- generate = name: attrs: pkgs.writeText name (mkSection 0 attrs);
- };
+ configObjIni = pkgs.formats.configobj;
publicSettingsIni =
if cfg.configFile != null then
@@ -164,6 +117,28 @@ in
default = [ ];
};
+ secretValues = mkOption {
+ type = with types; attrsOf path;
+ description = ''
+ Attrset of patterns in the settings that should be replaced at
+ runtime, just before the service starts, with values read from the
+ given files. The files must be readable by the service user.
+
+ Compared to the secretFiles option, secretValues allows having the
+ full settings structure in Nix, and only externalizing the secret
+ values themselves.
+ '';
+ default = { };
+ example = lib.literalExpression ''
+ {
+ "@my_server_password@" = "/run/secrets/my_server_password";
+ "@my_server_username@" = "/run/secrets/my_server_username";
+ "@sabnzbd_api_key@" = "/run/secrets/sabnzbd_api_key";
+ "@sabnzbd_nzb_key@" = "/run/secrets/sabnzbd_nzb_key";
+ }
+ '';
+ };
+
allowConfigWrite = mkOption {
type = types.bool;
description = ''
@@ -548,6 +523,12 @@ in
"''${files[@]}" \
> "$tmpfile"
+ ${lib.concatStringsSep "\n" (
+ lib.mapAttrsToList (n: v: ''
+ "${lib.getExe pkgs.replace-secret}" "${n}" "${v}" "$tmpfile"
+ '') cfg.secretValues
+ )}
+
install -D \
-m ${if cfg.allowConfigWrite then "600" else "400"} \
-o '${cfg.user}' -g '${cfg.group}' \
diff --git a/nixos/modules/services/networking/searx.nix b/nixos/modules/services/networking/searx.nix
index da48474d776c..6baf331187ec 100644
--- a/nixos/modules/services/networking/searx.nix
+++ b/nixos/modules/services/networking/searx.nix
@@ -5,44 +5,50 @@
pkgs,
...
}:
-
-with lib;
-
let
+ inherit (lib)
+ literalExpression
+ mkDefault
+ mkIf
+ mkOption
+ mkPackageOption
+ mkRenamedOptionModule
+ optionalAttrs
+ types
+ ;
+
runDir = "/run/searx";
cfg = config.services.searx;
+ yamlFormat = pkgs.formats.yaml { };
+ tomlFormat = pkgs.formats.toml { };
- settingsFile = pkgs.writeText "settings.yml" (
- builtins.toJSON (removeAttrs cfg.settings [ "redis" ])
- );
+ settingsFile = yamlFormat.generate "settings.yml" (builtins.removeAttrs cfg.settings [ "redis" ]);
- faviconsSettingsFile = (pkgs.formats.toml { }).generate "favicons.toml" cfg.faviconsSettings;
- limiterSettingsFile = (pkgs.formats.toml { }).generate "limiter.toml" cfg.limiterSettings;
+ faviconsSettingsFile = tomlFormat.generate "favicons.toml" cfg.faviconsSettings;
+ limiterSettingsFile = tomlFormat.generate "limiter.toml" cfg.limiterSettings;
generateConfig = ''
cd ${runDir}
- # write NixOS settings as JSON
+ # write NixOS settings
(
umask 077
- ${pkgs.envsubst}/bin/envsubst < ${settingsFile} > settings.yml
+ ${lib.getExe pkgs.envsubst} < ${settingsFile} > settings.yml
+ ${
+ if (cfg.faviconsSettings != { }) then
+ "ln -sf ${faviconsSettingsFile} favicons.toml"
+ else
+ "rm -f favicons.toml"
+ }
+ ${
+ if (cfg.limiterSettings != { }) then
+ "ln -sf ${limiterSettingsFile} limiter.toml"
+ else
+ "rm -f limiter.toml"
+ }
)
'';
-
- settingType =
- with types;
- (oneOf [
- bool
- int
- float
- str
- (listOf settingType)
- (attrsOf settingType)
- ])
- // {
- description = "JSON value";
- };
in
{
options = {
@@ -107,7 +113,7 @@ in
lib.warn "Obsolete option `services.searx.settings.redis' is used. It was renamed to `services.searx.settings.valkey'" config.redis
);
- freeformType = settingType;
+ freeformType = yamlFormat.type;
}
);
default = { };
@@ -136,25 +142,25 @@ in
'';
};
- settingsFile = mkOption {
+ settingsPath = mkOption {
type = types.path;
- default = "${runDir}/settings.yml";
+ default = runDir;
description = ''
- The path of the Searx server settings.yml file.
- If no file is specified, a default file is used (default config file has debug mode enabled).
+ The path of the SearXNG settings directory or the settings.yml file.
+ If no path is specified, a default one is used (default config file has debug mode enabled).
::: {.note}
Setting this options overrides [](#opt-services.searx.settings).
:::
::: {.warning}
- This file, along with any secret key it contains, will be copied into the world-readable Nix store.
+ This path, along with any secret keys it contains, will be copied into the world-readable Nix store.
:::
'';
};
faviconsSettings = mkOption {
- type = types.attrsOf settingType;
+ type = types.attrsOf tomlFormat.type;
default = { };
example = literalExpression ''
{
@@ -182,18 +188,23 @@ in
};
limiterSettings = mkOption {
- type = types.attrsOf settingType;
+ type = types.attrsOf tomlFormat.type;
default = { };
example = literalExpression ''
{
- real_ip = {
- x_for = 1;
+ botdetection = {
ipv4_prefix = 32;
ipv6_prefix = 56;
- }
- botdetection.ip_lists.block_ip = [
- # "93.184.216.34" # example.org
- ];
+
+ trusted_proxies = [
+ "127.0.0.0/8"
+ "::1"
+ ];
+
+ ip_lists.block_ip = [
+ # "93.184.216.34" # example.org
+ ];
+ };
}
'';
description = ''
@@ -252,6 +263,7 @@ in
};
imports = [
+ (mkRenamedOptionModule [ "services" "searx" "settingsFile" ] [ "services" "searx" "settingsPath" ])
(mkRenamedOptionModule [ "services" "searx" "configFile" ] [ "services" "searx" "settingsFile" ])
(mkRenamedOptionModule [ "services" "searx" "runInUwsgi" ] [ "services" "searx" "configureUwsgi" ])
];
@@ -264,17 +276,7 @@ in
}
];
- environment = {
- etc = {
- "searxng/favicons.toml" = lib.mkIf (cfg.faviconsSettings != { }) {
- source = faviconsSettingsFile;
- };
- "searxng/limiter.toml" = lib.mkIf (cfg.limiterSettings != { }) {
- source = limiterSettingsFile;
- };
- };
- systemPackages = [ cfg.package ];
- };
+ environment.systemPackages = [ cfg.package ];
services = {
nginx = lib.mkIf cfg.configureNginx {
@@ -338,7 +340,7 @@ in
enable-threads = true;
module = "searx.webapp";
env = [
- "SEARXNG_SETTINGS_PATH=${cfg.settingsFile}"
+ "SEARXNG_SETTINGS_PATH=${cfg.settingsPath}"
];
buffer-size = 32768;
pythonPackages = _: [ cfg.package ];
@@ -379,17 +381,60 @@ in
after = [
"searx-init.service"
"network.target"
- ];
+ ]
+ ++ lib.optionals cfg.redisCreateLocally [ "redis-searx.service" ];
serviceConfig = {
User = "searx";
+ DynamicUser = true;
Group = "searx";
ExecStart = lib.getExe cfg.package;
+
+ CacheDirectory = "searx";
+ CacheDirectoryMode = "0700";
+
+ ReadOnlyPaths = [ cfg.settingsPath ];
+ ReadWritePaths = lib.optional cfg.redisCreateLocally config.services.redis.servers.searx.unixSocket;
+
+ CapabilityBoundingSet = null;
+ DevicePolicy = "closed";
+ LockPersonality = true;
+ MemoryDenyWriteExecute = true;
+ NoNewPrivileges = true;
+ ProtectClock = true;
+ ProtectControlGroups = true;
+ ProtectHome = true;
+ ProtectHostname = true;
+ ProtectKernelLogs = true;
+ ProtectKernelModules = true;
+ ProtectKernelTunables = true;
+ ProtectProc = "invisible";
+ ProtectSystem = "strict";
+ PrivateDevices = true;
+ PrivateMounts = true;
+ PrivateTmp = true;
+ PrivateUsers = true;
+ PrivateIPC = true;
+ RemoveIPC = true;
+ RestrictAddressFamilies = [
+ "AF_INET"
+ "AF_INET6"
+ "AF_UNIX"
+ ];
+ RestrictNamespaces = true;
+ RestrictRealtime = true;
+ SystemCallArchitectures = "native";
+ SystemCallErrorNumber = "EPERM";
+ SystemCallFilter = [
+ "@system-service"
+ "~@privileged @resources"
+ ];
+ UMask = "0077";
}
// optionalAttrs (cfg.environmentFile != null) {
EnvironmentFile = cfg.environmentFile;
};
environment = {
- SEARXNG_SETTINGS_PATH = cfg.settingsFile;
+ SEARXNG_SETTINGS_PATH = cfg.settingsPath;
};
};
@@ -398,7 +443,7 @@ in
after = [ "searx-init.service" ];
restartTriggers = [
cfg.package
- cfg.settingsFile
+ cfg.settingsPath
]
++ lib.optional (cfg.environmentFile != null) cfg.environmentFile;
};
@@ -416,7 +461,7 @@ in
networking.firewall = lib.mkIf cfg.openFirewall { allowedTCPPorts = [ cfg.settings.server.port ]; };
};
- meta.maintainers = with maintainers; [
+ meta.maintainers = with lib.maintainers; [
SuperSandro2000
_999eagle
];
diff --git a/nixos/modules/services/networking/sing-box.nix b/nixos/modules/services/networking/sing-box.nix
index c6ae9cb5c290..3076d94e83b9 100644
--- a/nixos/modules/services/networking/sing-box.nix
+++ b/nixos/modules/services/networking/sing-box.nix
@@ -50,6 +50,7 @@ in
serviceConfig = {
User = "sing-box";
Group = "sing-box";
+ ConfigurationDirectory = "sing-box";
StateDirectory = "sing-box";
StateDirectoryMode = "0700";
RuntimeDirectory = "sing-box";
@@ -62,11 +63,15 @@ in
chown --reference=/run/sing-box /run/sing-box/config.json
'';
in
- "+${script}";
- ExecStart = [
- ""
- "${lib.getExe cfg.package} -D \${STATE_DIRECTORY} -C \${RUNTIME_DIRECTORY} run"
- ];
+ lib.mkIf (cfg.settings != { }) "+${script}";
+ ExecStart =
+ let
+ configDir = if cfg.settings != { } then "RUNTIME_DIRECTORY" else "CONFIGURATION_DIRECTORY";
+ in
+ [
+ ""
+ "${lib.getExe cfg.package} -D \${STATE_DIRECTORY} -C \${${configDir}} run"
+ ];
};
# After= is specified by upstream
requires = [ "network-online.target" ];
diff --git a/nixos/modules/services/networking/ssh/sshd.nix b/nixos/modules/services/networking/ssh/sshd.nix
index a948cd02bc4f..72702b605f3d 100644
--- a/nixos/modules/services/networking/ssh/sshd.nix
+++ b/nixos/modules/services/networking/ssh/sshd.nix
@@ -232,6 +232,10 @@ in
"openssh"
"banner"
] "Use services.openssh.settings.Banner instead.")
+ (lib.mkRenamedOptionModule
+ [ "services" "openssh" "moduliFile" ]
+ [ "services" "openssh" "settings" "ModuliFile" ]
+ )
];
###### interface
@@ -729,6 +733,14 @@ in
'';
example = "/etc/ssh/banner";
};
+ ModuliFile = lib.mkOption {
+ type = lib.types.path;
+ default = "${config.services.openssh.package}/etc/ssh/moduli";
+ defaultText = lib.literalExpression ''"''${config.services.openssh.package}/etc/ssh/moduli"'';
+ description = ''
+ Specifies the {manpage}`moduli(5)` file to use for Diffie-Hellman key exchange.
+ '';
+ };
};
}
);
@@ -740,16 +752,6 @@ in
description = "Verbatim contents of {file}`sshd_config`.";
};
- moduliFile = lib.mkOption {
- example = "/etc/my-local-ssh-moduli;";
- type = lib.types.path;
- description = ''
- Path to `moduli` file to install in
- `/etc/ssh/moduli`. If this option is unset, then
- the `moduli` file shipped with OpenSSH will be used.
- '';
- };
-
};
users.users = lib.mkOption {
@@ -770,14 +772,12 @@ in
};
users.groups.sshd = { };
- services.openssh.moduliFile = lib.mkDefault "${cfg.package}/etc/ssh/moduli";
services.openssh.sftpServerExecutable = lib.mkDefault "${cfg.package}/libexec/sftp-server";
environment.etc =
authKeysFiles
// authPrincipalsFiles
// {
- "ssh/moduli".source = cfg.moduliFile;
"ssh/sshd_config".source = sshconf;
};
diff --git a/nixos/modules/services/networking/syncthing.nix b/nixos/modules/services/networking/syncthing.nix
index b96718675e15..413ac1795bf2 100644
--- a/nixos/modules/services/networking/syncthing.nix
+++ b/nixos/modules/services/networking/syncthing.nix
@@ -25,10 +25,10 @@ let
if
isUnixGui
# if cfg.guiAddress is a unix socket, tell curl explicitly about it
- # note that the dot in front of `${path}` is the hostname, which is
+ # note that the syncthing.local in front of `${path}` is the hostname, which is
# required.
then
- "--unix-socket ${lib.strings.removePrefix "unix://" cfg.guiAddress} http://.${path}"
+ "--unix-socket ${lib.strings.removePrefix "unix://" cfg.guiAddress} http://syncthing.local${path}"
# no adjustments are needed if cfg.guiAddress is a network address
else
"${cfg.guiAddress}${path}";
@@ -46,6 +46,19 @@ let
folders = lib.pipe cfg.settings.folders [
(lib.filterAttrs (_: folder: folder.enable))
builtins.attrValues
+ (map (
+ folder:
+ folder
+ // {
+ devices = map (
+ device:
+ if builtins.isString device then
+ { deviceId = cfg.settings.devices.${device}.id; }
+ else
+ { deviceId = cfg.settings.devices.${device.name}.id; } // device
+ ) folder.devices;
+ }
+ ))
];
jq = "${pkgs.jq}/bin/jq";
diff --git a/nixos/modules/services/networking/tap.nix b/nixos/modules/services/networking/tap.nix
new file mode 100644
index 000000000000..bea84531014d
--- /dev/null
+++ b/nixos/modules/services/networking/tap.nix
@@ -0,0 +1,131 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+
+let
+ cfg = config.services.tap;
+in
+{
+ options.services.tap = {
+ enable = lib.mkEnableOption "Tap, ATProtocol firehose sync utility";
+
+ package = lib.mkPackageOption pkgs "tap" { };
+
+ environmentFiles = lib.mkOption {
+ type = lib.types.listOf lib.types.path;
+ default = [ ];
+ description = ''
+ Files to load environment variables from. Use for secrets such as
+ {env}`TAP_ADMIN_PASSWORD` that should not be readable in the Nix store.
+ '';
+ };
+
+ settings = lib.mkOption {
+ default = { };
+ description = ''
+ Configuration for Tap as environment variables. See the
+ [README](https://github.com/bluesky-social/indigo/blob/main/cmd/tap/README.md)
+ for all available options.
+
+ Secrets such as {option}`settings.TAP_ADMIN_PASSWORD` should be set via
+ {option}`environmentFiles` rather than here, as values set here will
+ be readable in the Nix store.
+ '';
+ type = lib.types.submodule {
+ freeformType = lib.types.attrsOf (
+ lib.types.nullOr (
+ lib.types.oneOf [
+ lib.types.bool
+ lib.types.int
+ lib.types.float
+ lib.types.str
+ ]
+ )
+ );
+
+ options = {
+ TAP_BIND = lib.mkOption {
+ type = lib.types.str;
+ default = "127.0.0.1:2480";
+ description = "Address and port the HTTP server will listen on.";
+ };
+
+ TAP_DATABASE_URL = lib.mkOption {
+ type = lib.types.str;
+ default = "sqlite:///var/lib/tap/tap.db";
+ description = ''
+ Database connection string. Accepts SQLite (`sqlite://path`) or
+ PostgreSQL (`postgres://...`) connection strings.
+ '';
+ };
+ };
+ };
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ systemd.services.tap = {
+ description = "Tap - ATProtocol firehose sync utility";
+ after = [ "network-online.target" ];
+ wants = [ "network-online.target" ];
+ wantedBy = [ "multi-user.target" ];
+
+ serviceConfig = {
+ User = "tap";
+ DynamicUser = true;
+
+ ExecStart = "${lib.getExe cfg.package} run";
+ Environment = lib.mapAttrsToList (
+ k: v: "${k}=${if lib.isBool v then lib.boolToString v else toString v}"
+ ) (lib.filterAttrs (_: v: v != null) cfg.settings);
+ EnvironmentFile = cfg.environmentFiles;
+
+ Restart = "on-failure";
+ RestartSec = 5;
+ StateDirectory = "tap";
+ StateDirectoryMode = "0750";
+
+ ProtectClock = true;
+ ProtectControlGroups = true;
+ ProtectHome = true;
+ ProtectHostname = true;
+ ProtectKernelLogs = true;
+ ProtectKernelModules = true;
+ ProtectKernelTunables = true;
+ ProtectProc = "invisible";
+ ProcSubset = "pid";
+ ProtectSystem = "strict";
+
+ PrivateDevices = true;
+ PrivateTmp = true;
+ PrivateUsers = true;
+
+ RestrictNamespaces = true;
+ RestrictRealtime = true;
+ RestrictSUIDSGID = true;
+ RestrictAddressFamilies = [
+ "AF_INET"
+ "AF_INET6"
+ "AF_UNIX"
+ ];
+
+ LockPersonality = true;
+ NoNewPrivileges = true;
+ AmbientCapabilities = "";
+ CapabilityBoundingSet = "";
+ RemoveIPC = true;
+ SystemCallArchitectures = "native";
+ SystemCallFilter = [
+ "@system-service"
+ "~@privileged"
+ ];
+ UMask = "0077";
+ };
+ };
+ };
+
+ meta.maintainers = with lib.maintainers; [ blooym ];
+}
diff --git a/nixos/modules/services/networking/technitium-dns-server.nix b/nixos/modules/services/networking/technitium-dns-server.nix
index 143b0c43cfdc..32aa247989aa 100644
--- a/nixos/modules/services/networking/technitium-dns-server.nix
+++ b/nixos/modules/services/networking/technitium-dns-server.nix
@@ -65,6 +65,7 @@ in
DynamicUser = true;
StateDirectory = "technitium-dns-server";
+ LogsDirectory = "technitium";
Restart = "always";
RestartSec = 10;
@@ -102,5 +103,8 @@ in
};
};
- meta.maintainers = with lib.maintainers; [ fabianrig ];
+ meta.maintainers = with lib.maintainers; [
+ fabianrig
+ awildleon
+ ];
}
diff --git a/nixos/modules/services/networking/tetrd.nix b/nixos/modules/services/networking/tetrd.nix
index 77cf6722e404..18414c92d1dc 100644
--- a/nixos/modules/services/networking/tetrd.nix
+++ b/nixos/modules/services/networking/tetrd.nix
@@ -5,13 +5,19 @@
...
}:
+let
+ cfg = config.services.tetrd;
+in
{
- options.services.tetrd.enable = lib.mkEnableOption "tetrd";
+ options.services.tetrd = {
+ enable = lib.mkEnableOption "tetrd";
+ package = lib.mkPackageOption pkgs "tetrd" { };
+ };
- config = lib.mkIf config.services.tetrd.enable {
+ config = lib.mkIf cfg.enable {
environment = {
- systemPackages = [ pkgs.tetrd ];
- etc."resolv.conf".source = "/etc/tetrd/resolv.conf";
+ systemPackages = [ cfg.package ];
+ # etc."resolv.conf".source = "/etc/tetrd/resolv.conf"; # Disabled overwriting of resolve.conf since otherwise tetrd disables your dns when its not connected to a device.
};
# Our resolv.conf will override resolvconf's version.
@@ -21,11 +27,11 @@
tmpfiles.rules = [ "f /etc/tetrd/resolv.conf - - -" ];
services.tetrd = {
- description = pkgs.tetrd.meta.description;
+ description = cfg.package.meta.description;
wantedBy = [ "multi-user.target" ];
serviceConfig = {
- ExecStart = "${pkgs.tetrd}/opt/Tetrd/bin/tetrd";
+ ExecStart = "${cfg.package}/opt/Tetrd/bin/tetrd";
Restart = "always";
RuntimeDirectory = "tetrd";
RootDirectory = "/run/tetrd";
diff --git a/nixos/modules/services/networking/tinc.nix b/nixos/modules/services/networking/tinc.nix
index e082214b5eca..22398f2ff5b0 100644
--- a/nixos/modules/services/networking/tinc.nix
+++ b/nixos/modules/services/networking/tinc.nix
@@ -421,10 +421,7 @@ in
ExecStart = "${data.package}/bin/tincd -D -U tinc-${network} -n ${network} ${optionalString (data.chroot) "-R"} --pidfile /run/tinc.${network}.pid -d ${toString data.debugLevel}";
};
preStart = ''
- mkdir -p /etc/tinc/${network}/hosts
- chown tinc-${network} /etc/tinc/${network}/hosts
- mkdir -p /etc/tinc/${network}/invitations
- chown tinc-${network} /etc/tinc/${network}/invitations
+ install -d -o tinc-${network} /etc/tinc/${network} /etc/tinc/${network}/hosts /etc/tinc/${network}/invitations
# Determine how we should generate our keys
if type tinc >/dev/null 2>&1; then
diff --git a/nixos/modules/services/networking/unifi.nix b/nixos/modules/services/networking/unifi.nix
index eaee405f8bda..ff489fe5db92 100644
--- a/nixos/modules/services/networking/unifi.nix
+++ b/nixos/modules/services/networking/unifi.nix
@@ -4,6 +4,7 @@
lib,
pkgs,
utils,
+ jdk25_headless,
...
}:
let
@@ -29,21 +30,16 @@ let
);
in
{
-
options = {
+ services.unifi.enable = lib.mkEnableOption "UniFi controller service";
+
+ services.unifi.jrePackage = lib.mkOption {
+ type = lib.types.package;
+ default = cfg.unifiPackage.passthru.jrePackage or jdk25_headless;
+ defaultText = lib.literalExpression "unifiPackage.passthru.jrePackage";
- services.unifi.enable = lib.mkOption {
- type = lib.types.bool;
- default = false;
description = ''
- Whether or not to enable the unifi controller service.
- '';
- };
-
- services.unifi.jrePackage = lib.mkPackageOption pkgs "jdk" {
- default = "jdk25_headless";
- extraDescription = ''
- Check the UniFi controller release notes to ensure it is supported.
+ Which Java runtime to use.
'';
};
@@ -56,6 +52,7 @@ in
services.unifi.openFirewall = lib.mkOption {
type = lib.types.bool;
default = false;
+
description = ''
Whether or not to open the minimum required ports on the firewall.
@@ -69,6 +66,7 @@ in
type = with lib.types; nullOr int;
default = null;
example = 1024;
+
description = ''
Set the initial heap size for the JVM in MB. If this option isn't set, the
JVM will decide this value at runtime.
@@ -79,6 +77,7 @@ in
type = with lib.types; nullOr int;
default = null;
example = 4096;
+
description = ''
Set the maximum heap size for the JVM in MB. If this option isn't set, the
JVM will decide this value at runtime.
@@ -89,15 +88,14 @@ in
type = with lib.types; listOf str;
default = [ ];
example = lib.literalExpression ''["-Xlog:gc"]'';
+
description = ''
Set extra options to pass to the JVM.
'';
};
-
};
config = lib.mkIf cfg.enable {
-
assertions = [
{
assertion =
@@ -128,16 +126,18 @@ in
description = "UniFi controller daemon user";
home = "${stateDir}";
};
+
users.groups.unifi = { };
+ # https://help.ubnt.com/hc/en-us/articles/218506997
networking.firewall = lib.mkIf cfg.openFirewall {
- # https://help.ubnt.com/hc/en-us/articles/218506997
allowedTCPPorts = [
8080 # Port for UAP to inform controller.
8880 # Port for HTTP portal redirect, if guest portal is enabled.
8843 # Port for HTTPS portal redirect, ditto.
6789 # Port for UniFi mobile speed test.
];
+
allowedUDPPorts = [
3478 # UDP port used for STUN.
10001 # UDP port used for device discovery.
@@ -151,6 +151,7 @@ in
# This a HACK to fix missing dependencies of dynamic libs extracted from jars
environment.LD_LIBRARY_PATH = with pkgs.stdenv; "${cc.cc.lib}/lib";
+
# Make sure package upgrades trigger a service restart
restartTriggers = [
cfg.unifiPackage
@@ -220,12 +221,13 @@ in
# Needs network access
PrivateNetwork = false;
+
# Cannot be true due to OpenJDK
MemoryDenyWriteExecute = false;
};
};
-
};
+
imports = [
(lib.mkRemovedOptionModule [
"services"
diff --git a/nixos/modules/services/networking/veilid.nix b/nixos/modules/services/networking/veilid.nix
index e270fe7c076c..78c9e7ed9a65 100644
--- a/nixos/modules/services/networking/veilid.nix
+++ b/nixos/modules/services/networking/veilid.nix
@@ -92,7 +92,7 @@ in
settings = mkOption {
description = ''
Build veilid-server.conf with nix expression.
- Check Configuration Keys.
+ Check [Configuration Keys](https://veilid.gitlab.io/developer-book/admin/config.html#configuration-keys).
'';
type = types.submodule {
freeformType = settingsFormat.type;
diff --git a/nixos/modules/services/networking/xrdp.nix b/nixos/modules/services/networking/xrdp.nix
index a1e9f9c23d80..8938293fee28 100644
--- a/nixos/modules/services/networking/xrdp.nix
+++ b/nixos/modules/services/networking/xrdp.nix
@@ -19,7 +19,7 @@ let
cat > $out/startwm.sh < for more details.
+ '';
+ type = lib.types.either lib.types.str lib.types.bool;
+ default = true;
+ example = "read-only";
+ };
+ ProtectSystem = lib.mkOption {
+ description = ''
+ Whether to make several system directories inaccessible to the service.
+ See for more details.
+ '';
+ type = lib.types.either lib.types.str lib.types.bool;
+ default = true;
+ example = "full";
+ };
+ };
+ };
+ };
+in
+{
+
+ options.services.gocron = {
+ enable = lib.mkEnableOption "gocron, a task scheduler";
+
+ package = lib.mkOption {
+ default = pkgs.gocron;
+ defaultText = lib.literalExpression "pkgs.gocron";
+ type = lib.types.package;
+ description = ''
+ gocron package to use.
+ '';
+ };
+
+ openFirewall = lib.mkOption {
+ description = "Whether to open the firewall port to access the web ui.";
+ type = lib.types.bool;
+ default = false;
+ };
+
+ user = lib.mkOption {
+ description = "Unix User to run the server under";
+ type = lib.types.str;
+ default = defaultUser;
+ };
+
+ group = lib.mkOption {
+ description = "Unix Group to run the server under";
+ type = lib.types.str;
+ default = defaultGroup;
+ };
+
+ extraGroups = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [ ];
+ example = [ "backup" ];
+ description = ''
+ Additional groups for the systemd service.
+ '';
+ };
+
+ hardening = hardeningOptions;
+
+ settings = lib.mkOption {
+ # Setting this type allows for correct merging behavior
+ type = settingsFormat.type;
+ default = { };
+ description = ''
+ Configuration for gocron, see
+
+ for supported settings.
+ '';
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ assertions = [
+ {
+ assertion = !lib.hasAttr "software" cfg.settings;
+ message = "Software installation configuration is only supported for traditional distros by upstream.";
+ }
+ ];
+
+ services.gocron.settings = {
+ time_zone = if timeZone != null then timeZone else lib.mkDefault "Etc/UTC";
+ server = {
+ address = lib.mkDefault "127.0.0.1";
+ port = lib.mkDefault 8156;
+ };
+ db.location = lib.mkDefault "/var/lib/gocron";
+ };
+
+ systemd.services.gocron = {
+ after = [ "network.target" ];
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ ExecStart = "${lib.getExe pkgs.gocron} --config '${gocronConf}'";
+ User = cfg.user;
+ Group = cfg.group;
+ DeviceAllow = "";
+ LockPersonality = true;
+ MemoryDenyWriteExecute = true;
+ MountAPIVFS = true;
+ NoNewPrivileges = true;
+ PrivateDevices = true;
+ PrivateMounts = true;
+ PrivateNetwork = lib.mkDefault false;
+ PrivateTmp = true;
+ PrivateUsers = true;
+ ProcSubset = "pid";
+ ProtectClock = true;
+ ProtectControlGroups = true;
+ ProtectHome = cfg.hardening.ProtectHome;
+ ProtectHostname = true;
+ ProtectKernelLogs = true;
+ ProtectKernelModules = true;
+ ProtectKernelTunables = true;
+ ProtectProc = "invisible";
+ ProtectSystem = cfg.hardening.ProtectSystem;
+ RemoveIPC = true;
+ RestrictAddressFamilies = [
+ "AF_INET"
+ "AF_INET6"
+ ];
+ RestrictNamespaces = true;
+ RestrictRealtime = true;
+ RestrictSUIDSGID = true;
+ UMask = "0077";
+ StateDirectory = lib.mkIf (cfg.settings.db.location == "/var/lib/gocron") "gocron";
+ SystemCallArchitectures = "native";
+ SystemCallErrorNumber = "EPERM";
+ SystemCallFilter = [
+ "@system-service"
+ ];
+ };
+ };
+
+ networking.firewall.allowedTCPPorts = lib.mkIf cfg.openFirewall [ cfg.settings.server.port ];
+
+ users.users.${cfg.user} = {
+ isSystemUser = true;
+ inherit (cfg) group;
+ };
+
+ users.groups.${cfg.group} = { };
+
+ meta = {
+ buildDocsInSandbox = true;
+ maintainers = with lib.maintainers; [ juliusfreudenberger ];
+ };
+ };
+}
diff --git a/nixos/modules/services/scheduling/scx-loader.nix b/nixos/modules/services/scheduling/scx-loader.nix
index 70c4df00c3bb..55f9bb7bd065 100644
--- a/nixos/modules/services/scheduling/scx-loader.nix
+++ b/nixos/modules/services/scheduling/scx-loader.nix
@@ -75,7 +75,11 @@ in
}
];
- environment.systemPackages = [ cfg.package ] ++ cfg.schedsPackages;
+ environment = {
+ systemPackages = [ cfg.package ] ++ cfg.schedsPackages;
+ etc."scx_loader.toml".source = configFile;
+ };
+
systemd.packages = [ cfg.package ];
services.dbus.packages = [ cfg.package ];
@@ -84,10 +88,6 @@ in
systemd.services.scx_loader = {
path = cfg.schedsPackages;
wantedBy = [ "multi-user.target" ];
- serviceConfig = {
- TemporaryFileSystem = [ "/etc" ];
- BindReadOnlyPaths = [ "${configFile.outPath}:/etc/scx_loader.toml" ];
- };
};
};
diff --git a/nixos/modules/services/security/authelia.nix b/nixos/modules/services/security/authelia.nix
index f8bcc4bb15b9..5fe0d6bc23e3 100644
--- a/nixos/modules/services/security/authelia.nix
+++ b/nixos/modules/services/security/authelia.nix
@@ -268,15 +268,6 @@ let
};
};
- writeOidcJwksConfigFile =
- oidcIssuerPrivateKeyFile:
- pkgs.writeText "oidc-jwks.yaml" ''
- identity_providers:
- oidc:
- jwks:
- - key: {{ secret "${oidcIssuerPrivateKeyFile}" | mindent 10 "|" | msquote }}
- '';
-
# Remove an attribute in a nested set
# https://discourse.nixos.org/t/modify-an-attrset-in-nix/29919/5
removeAttrByPath =
@@ -362,7 +353,12 @@ in
execCommand = "${instance.package}/bin/authelia";
configFile = format.generate "config.yml" cleanedSettings;
oidcJwksConfigFile = lib.optional (instance.secrets.oidcIssuerPrivateKeyFile != null) (
- writeOidcJwksConfigFile instance.secrets.oidcIssuerPrivateKeyFile
+ pkgs.writeText "oidc-jwks.yaml" ''
+ identity_providers:
+ oidc:
+ jwks:
+ - key: {{ mustEnv "CREDENTIALS_DIRECTORY" | printf "%s/oidcIssuerPrivateKeyFile" | secret | mindent 10 "|" | msquote }}
+ ''
);
configArg = "--config ${
builtins.concatStringsSep "," (
@@ -373,21 +369,25 @@ in
]
)
}";
+ # Mapping between the Authelia env variables and the secret keys defined in the module
+ envSecretsMap = {
+ AUTHELIA_IDENTITY_VALIDATION_RESET_PASSWORD_JWT_SECRET_FILE = "jwtSecretFile";
+ AUTHELIA_STORAGE_ENCRYPTION_KEY_FILE = "storageEncryptionKeyFile";
+ AUTHELIA_SESSION_SECRET_FILE = "sessionSecretFile";
+ AUTHELIA_IDENTITY_PROVIDERS_OIDC_HMAC_SECRET_FILE = "oidcHmacSecretFile";
+ };
+ nonNullEnvSecretsMap = lib.filterAttrs (_: v: instance.secrets.${v} != null) envSecretsMap;
in
{
description = "Authelia authentication and authorization server";
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ]; # Checks SMTP notifier creds during startup
wants = [ "network-online.target" ];
- environment =
- (lib.filterAttrs (_: v: v != null) {
- X_AUTHELIA_CONFIG_FILTERS = lib.mkIf (oidcJwksConfigFile != [ ]) "template";
- AUTHELIA_IDENTITY_VALIDATION_RESET_PASSWORD_JWT_SECRET_FILE = instance.secrets.jwtSecretFile;
- AUTHELIA_STORAGE_ENCRYPTION_KEY_FILE = instance.secrets.storageEncryptionKeyFile;
- AUTHELIA_SESSION_SECRET_FILE = instance.secrets.sessionSecretFile;
- AUTHELIA_IDENTITY_PROVIDERS_OIDC_HMAC_SECRET_FILE = instance.secrets.oidcHmacSecretFile;
- })
- // instance.environmentVariables;
+ environment = {
+ X_AUTHELIA_CONFIG_FILTERS = lib.mkIf (oidcJwksConfigFile != [ ]) "template";
+ }
+ // lib.mapAttrs (_: v: "%d/${v}") nonNullEnvSecretsMap
+ // instance.environmentVariables;
preStart = "${execCommand} ${configArg} validate-config";
serviceConfig = {
@@ -399,6 +399,12 @@ in
StateDirectory = autheliaName instance.name;
StateDirectoryMode = "0700";
+ LoadCredential =
+ lib.optional (
+ instance.secrets.oidcIssuerPrivateKeyFile != null
+ ) "oidcIssuerPrivateKeyFile:${instance.secrets.oidcIssuerPrivateKeyFile}"
+ ++ lib.mapAttrsToList (_: v: "${v}:${instance.secrets.${v}}") nonNullEnvSecretsMap;
+
# Security options:
AmbientCapabilities = "";
CapabilityBoundingSet = "";
diff --git a/nixos/modules/services/security/endlessh-go.nix b/nixos/modules/services/security/endlessh-go.nix
index 5c69d412a7d3..d1650654a62e 100644
--- a/nixos/modules/services/security/endlessh-go.nix
+++ b/nixos/modules/services/security/endlessh-go.nix
@@ -158,5 +158,5 @@ in
networking.firewall.allowedTCPPorts = with cfg; lib.optionals openFirewall [ port ];
};
- meta.maintainers = with lib.maintainers; [ azahi ];
+ meta.maintainers = [ ];
}
diff --git a/nixos/modules/services/security/pocket-id.nix b/nixos/modules/services/security/pocket-id.nix
index 9396185c2469..547b3df6db54 100644
--- a/nixos/modules/services/security/pocket-id.nix
+++ b/nixos/modules/services/security/pocket-id.nix
@@ -70,10 +70,13 @@ in
ENCRYPTION_KEY = "/run/secrets/pocket-id/encryption-key";
};
description = ''
- Environment variables which are loaded from the contents of the specified file paths.
+ Credentials which are loaded from the contents of the specified file paths.
+
This can be used to securely store tokens and secrets outside of the world-readable Nix store.
- See [PocketID environment variables](https://pocket-id.org/docs/configuration/environment-variables).
+ See [PocketID environment variables](https://pocket-id.org/docs/configuration/environment-variables) (all with the `_FILE` suffix).
+
+ Accepts an attrset mapping from the variable name *without its `_FILE` suffix* to the path on disk.
Alternatively you can use `services.pocket-id.environmentFile` to define all the variables in a single file.
'';
diff --git a/nixos/modules/services/security/vaultwarden/default.nix b/nixos/modules/services/security/vaultwarden/default.nix
index b43ecc58f156..5c1b9e1ed114 100644
--- a/nixos/modules/services/security/vaultwarden/default.nix
+++ b/nixos/modules/services/security/vaultwarden/default.nix
@@ -173,6 +173,7 @@ in
domain = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
+ example = "bitwarden.example.com";
description = "The domain under which VaultWarden will be reachable.";
};
diff --git a/nixos/modules/services/system/userborn.nix b/nixos/modules/services/system/userborn.nix
index 5649b438965b..eeb0f6a40f35 100644
--- a/nixos/modules/services/system/userborn.nix
+++ b/nixos/modules/services/system/userborn.nix
@@ -86,7 +86,7 @@ in
The primary motivation for this is an immutable `/etc`, where we cannot
write the files directly to `/etc`.
- However this an also serve other use cases, e.g. when `/etc` is on a `tmpfs`.
+ However this can also serve other use cases, e.g. when `/etc` is on a `tmpfs`.
'';
};
diff --git a/nixos/modules/services/torrent/rtorrent.nix b/nixos/modules/services/torrent/rtorrent.nix
index 07825ecbc897..2b672d6a6584 100644
--- a/nixos/modules/services/torrent/rtorrent.nix
+++ b/nixos/modules/services/torrent/rtorrent.nix
@@ -149,13 +149,6 @@ in
protocol.encryption.set = allow_incoming,try_outgoing,enable_retry
- # Limits for file handle resources, this is optimized for
- # an `ulimit` of 1024 (a common default). You MUST leave
- # a ceiling of handles reserved for rTorrent's internal needs!
- network.http.max_open.set = 50
- network.max_open_files.set = 600
- network.max_open_sockets.set = 3000
-
# Memory resource usage (increase if you have a large number of items loaded,
# and/or the available resources to spend)
pieces.memory.max.set = 1800M
@@ -169,15 +162,14 @@ in
execute.nothrow = sh, -c, (cat, "echo >", (session.path), "rtorrent.pid", " ", (system.pid))
# Other operational settings (check & adapt)
- encoding.add = utf8
system.umask.set = 0027
system.cwd.set = (cfg.basedir)
network.http.dns_cache_timeout.set = 25
- schedule2 = monitor_diskspace, 15, 60, ((close_low_diskspace, 1000M))
+ schedule = monitor_diskspace, 15, 60, ((close_low_diskspace, 1000M))
# Watch directories (add more as you like, but use unique schedule names)
- #schedule2 = watch_start, 10, 10, ((load.start, (cat, (cfg.watch), "start/*.torrent")))
- #schedule2 = watch_load, 11, 10, ((load.normal, (cat, (cfg.watch), "load/*.torrent")))
+ #schedule = watch_start, 10, 10, ((load.start, (cat, (cfg.watch), "start/*.torrent")))
+ #schedule = watch_load, 11, 10, ((load.normal, (cat, (cfg.watch), "load/*.torrent")))
# Logging:
# Levels = critical error warn notice info debug
@@ -218,6 +210,10 @@ in
RuntimeDirectory = "rtorrent";
RuntimeDirectoryMode = 750;
+ # rtorrent derives socket limits from this value since 0.16.15; see table in
+ # https://github.com/rakshasa/rtorrent/wiki/Socket-Manager-and-Resource-Allocation
+ LimitNOFILE = lib.mkDefault 16384;
+
CapabilityBoundingSet = [ "" ];
LockPersonality = true;
NoNewPrivileges = true;
diff --git a/nixos/modules/services/ttys/getty.nix b/nixos/modules/services/ttys/getty.nix
index 35759716e08b..693716e738d7 100644
--- a/nixos/modules/services/ttys/getty.nix
+++ b/nixos/modules/services/ttys/getty.nix
@@ -76,6 +76,24 @@ in
'';
};
+ enable = mkOption {
+ type = types.bool;
+ default = true;
+ description = ''
+ Include getty in the system.
+
+ getty is quiescent until called into action and does not have
+ runtime costs if it is not used. The benefit of disabling it is
+ in reducing closure size.
+
+ Disabling getty means that console login may not be possible,
+ `machinectl shell` and `login` may not work, and other ills.
+ It is only recommended for lights-out, headless containers,
+ appliances, and similar configurations not meant for any human
+ interaction ever.
+ '';
+ };
+
loginProgram = mkOption {
type = types.path;
default = "${pkgs.shadow}/bin/login";
@@ -133,7 +151,7 @@ in
###### implementation
- config = mkIf config.console.enable {
+ config = mkIf cfg.enable {
# Note: this is set here rather than up there so that changing
# nixos.label would not rebuild manual pages
services.getty.greetingLine = mkDefault ''<<< Welcome to ${config.system.nixos.distroName} ${config.system.nixos.label} (\m) - \l >>>'';
diff --git a/nixos/modules/services/ttys/kmscon.nix b/nixos/modules/services/ttys/kmscon.nix
index 931fac1123c6..c52434c46a11 100644
--- a/nixos/modules/services/ttys/kmscon.nix
+++ b/nixos/modules/services/ttys/kmscon.nix
@@ -214,7 +214,7 @@ in
{
name = "unix";
control = "required";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
}
];
session = utils.pam.autoOrderRules [
@@ -230,7 +230,7 @@ in
{
name = "unix";
control = "required";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
}
{
name = "systemd";
diff --git a/nixos/modules/services/video/wivrn.nix b/nixos/modules/services/video/wivrn.nix
index 0515d93d71cb..82e356d419d4 100644
--- a/nixos/modules/services/video/wivrn.nix
+++ b/nixos/modules/services/video/wivrn.nix
@@ -24,6 +24,7 @@ let
getExe
types
maintainers
+ makeBinPath
;
cfg = config.services.wivrn;
configFormat = pkgs.formats.json { };
@@ -63,13 +64,24 @@ let
enabledConfig = optionalString cfg.config.enable "-f ${configFile}";
# Manage server executables and flags
- serverExec = concatStringsSep " " (
+ serverCmdline = concatStringsSep " " (
[
serverPackageExe
enabledConfig
]
++ cfg.extraServerFlags
);
+ serverExec =
+ if cfg.steam.enable then
+ lib.getExe (
+ pkgs.writeShellScriptBin "start-wivrn-server" ''
+ # The server needs Steam in PATH to open Steam games from the application launcher
+ export PATH="${makeBinPath [ cfg.steam.package ]}:$PATH"
+ exec -a wivrn-server ${serverCmdline}
+ ''
+ )
+ else
+ serverCmdline;
in
{
imports = [
@@ -184,6 +196,13 @@ in
IPC_EXIT_ON_DISCONNECT = "off";
PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES = mkIf cfg.steam.importOXRRuntimes "1";
} cfg.monadoEnvironment;
+ # WiVRn scans for .desktop files in $XDG_DATA_DIRS for the application launcher,
+ # which will execute the command in Exec when selected in the headset. If the
+ # Exec path isn't absolute, it will be resolved relative to $PATH, so we must
+ # not override the value of $PATH.
+ enableDefaultPath = false;
+
+ unitConfig.ConditionUser = "!@system";
serviceConfig = (
if cfg.highPriority then
{
@@ -211,8 +230,6 @@ in
RestrictSUIDSGID = true;
}
);
- # Needs Steam in the PATH to allow launching games from the headset
- path = mkIf cfg.steam.enable [ cfg.steam.package ];
wantedBy = mkIf cfg.autoStart [ "default.target" ];
restartTriggers = [
cfg.package
diff --git a/nixos/modules/services/wayland/cage.nix b/nixos/modules/services/wayland/cage.nix
index 006520ea9b63..a084de9b7383 100644
--- a/nixos/modules/services/wayland/cage.nix
+++ b/nixos/modules/services/wayland/cage.nix
@@ -113,7 +113,7 @@ in
{
name = "unix";
control = "required";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
settings.nullok = true;
}
];
@@ -121,14 +121,14 @@ in
{
name = "unix";
control = "required";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
}
];
session = utils.pam.autoOrderRules [
{
name = "unix";
control = "required";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
}
{
name = "env";
diff --git a/nixos/modules/services/web-apps/agorakit.nix b/nixos/modules/services/web-apps/agorakit.nix
index 84bda144718f..24bce060da33 100644
--- a/nixos/modules/services/web-apps/agorakit.nix
+++ b/nixos/modules/services/web-apps/agorakit.nix
@@ -272,15 +272,15 @@ in
Agorakit configuration options to set in the
.env file.
- Refer to
+ Refer to
for details on supported values.
Settings containing secret data should be set to an attribute
- set containing the attribute _secret - a
+ set containing the attribute `_secret` - a
string pointing to a file containing the value the option
should be set to. See the example to get a better picture of
this: in the resulting .env file, the
- OIDC_CLIENT_SECRET key will be set to the
+ `OIDC_CLIENT_SECRET` key will be set to the
contents of the /run/keys/oidc_secret
file.
'';
diff --git a/nixos/modules/services/web-apps/akkoma.md b/nixos/modules/services/web-apps/akkoma.md
index 7f07f2c73df8..c8419fe94ecc 100644
--- a/nixos/modules/services/web-apps/akkoma.md
+++ b/nixos/modules/services/web-apps/akkoma.md
@@ -27,7 +27,7 @@ be run behind a HTTP proxy on `fediverse.example.com`.
name = "My Akkoma instance";
description = "More detailed description";
email = "admin@example.com";
- registration_open = false;
+ registrations_open = false;
};
"Pleroma.Web.Endpoint" = {
@@ -221,17 +221,28 @@ of the fediverse and providing a pleasant experience to the users of an instance
":mrf_simple" = {
# Tag all media as sensitive
- media_nsfw = mkMap { "nsfw.weird.kinky" = "Untagged NSFW content"; };
+ media_nsfw = map mkTuple [
+ [
+ "nsfw.weird.kinky"
+ "Untagged NSFW content"
+ ]
+ ];
# Reject all activities except deletes
- reject = mkMap {
- "kiwifarms.cc" = "Persistent harassment of users, no moderation";
- };
+ reject = map mkTuple [
+ [
+ "kiwifarms.cc"
+ "Persistent harassment of users, no moderation"
+ ]
+ ];
# Force posts to be visible by followers only
- followers_only = mkMap {
- "beta.birdsite.live" = "Avoid polluting timelines with Twitter posts";
- };
+ followers_only = map mkTuple [
+ [
+ "beta.birdsite.live"
+ "Avoid polluting timelines with Twitter posts"
+ ]
+ ];
};
};
}
diff --git a/nixos/modules/services/web-apps/alps.nix b/nixos/modules/services/web-apps/alps.nix
index 0a0925856e71..8359809fa010 100644
--- a/nixos/modules/services/web-apps/alps.nix
+++ b/nixos/modules/services/web-apps/alps.nix
@@ -1,151 +1,108 @@
{
+ config,
lib,
pkgs,
- config,
+ utils,
...
}:
-
-with lib;
-
let
cfg = config.services.alps;
in
{
+ imports = [
+ (lib.mkRemovedOptionModule [ "services" "alps" "port" ] ''
+ Use `services.alps.settings.server.addr` instead.
+ '')
+ (lib.mkRemovedOptionModule [ "services" "alps" "bindIP" ] ''
+ Use `services.alps.settings.server.addr` instead.
+ '')
+ (lib.mkRemovedOptionModule [ "services" "alps" "theme" ] ''
+ Themes are no longer customizable.
+ '')
+ (lib.mkRemovedOptionModule [ "services" "alps" "imaps" "port" ] ''
+ Use `services.alps.settings.provider.imap.server` instead.
+ '')
+ (lib.mkRemovedOptionModule [ "services" "alps" "imaps" "host" ] ''
+ Use `services.alps.settings.provider.imap.server` instead.
+ '')
+ (lib.mkRemovedOptionModule [ "services" "alps" "smtps" "port" ] ''
+ Use `services.alps.settings.smtp.server` instead.
+ '')
+ (lib.mkRemovedOptionModule [ "services" "alps" "smtps" "host" ] ''
+ Use `services.alps.settings.smtp.server` instead.
+ '')
+ (lib.mkRemovedOptionModule [ "services" "alps" "args" ] ''
+ Use `services.alps.settings` instead.
+ '')
+ ];
+
options.services.alps = {
- enable = mkEnableOption "alps";
+ enable = lib.mkEnableOption "alps";
+ package = lib.mkPackageOption pkgs "alps" { };
- port = mkOption {
- type = types.port;
- default = 1323;
+ settings = lib.mkOption {
description = ''
- TCP port the service should listen on.
+ The ALPS configuration, see for documentation.
+
+ Options containing secret data should be set to an attribute set
+ containing the attribute `_secret` - a string pointing to a file
+ containing the value the option should be set to.
'';
- };
-
- bindIP = mkOption {
- default = "[::]";
- type = types.str;
- description = ''
- The IP the service should listen on.
- '';
- };
-
- theme = mkOption {
- type = types.enum [
- "alps"
- "sourcehut"
- ];
- default = "sourcehut";
- description = ''
- The frontend's theme to use.
- '';
- };
-
- imaps = {
- port = mkOption {
- type = types.port;
- default = 993;
- description = ''
- The IMAPS server port.
- '';
+ default = { };
+ type = lib.types.submodule {
+ freeformType = lib.types.toml;
+ options = { };
};
-
- host = mkOption {
- type = types.str;
- default = "[::1]";
- example = "mail.example.org";
- description = ''
- The IMAPS server address.
- '';
- };
- };
-
- smtps = {
- port = mkOption {
- type = types.port;
- default = 465;
- description = ''
- The SMTPS server port.
- '';
- };
-
- host = mkOption {
- type = types.str;
- default = cfg.imaps.host;
- defaultText = "services.alps.imaps.host";
- example = "mail.example.org";
- description = ''
- The SMTPS server address.
- '';
- };
- };
-
- package = mkOption {
- internal = true;
- type = types.package;
- default = pkgs.alps;
- };
-
- args = mkOption {
- internal = true;
- type = types.listOf types.str;
- default = [
- "-addr"
- "${cfg.bindIP}:${toString cfg.port}"
- "-theme"
- "${cfg.theme}"
- "imaps://${cfg.imaps.host}:${toString cfg.imaps.port}"
- "smtps://${cfg.smtps.host}:${toString cfg.smtps.port}"
- ];
};
};
- config = mkIf cfg.enable {
+ config = lib.mkIf cfg.enable {
+ systemd.packages = [ cfg.package ];
+
systemd.services.alps = {
- description = "alps is a simple and extensible webmail.";
- documentation = [ "https://git.sr.ht/~migadu/alps" ];
wantedBy = [ "multi-user.target" ];
- wants = [ "network-online.target" ];
- after = [
- "network.target"
- "network-online.target"
- ];
serviceConfig = {
- ExecStart = "${cfg.package}/bin/alps ${escapeShellArgs cfg.args}";
- AmbientCapabilities = "";
- CapabilityBoundingSet = "";
DynamicUser = true;
+ RuntimeDirectory = "alps";
+ ExecStartPre =
+ let
+ script = pkgs.writeShellScript "alps-pre-start" ''
+ ${utils.genJqSecretsReplacementSnippet cfg.settings "/run/alps/config.json"}
+ ${lib.getExe pkgs.remarshal} -f json -t toml /run/alps/config.json /run/alps/config.toml
+ chown --reference=/run/alps /run/alps/config.json /run/alps/config.toml
+ '';
+ in
+ "+${script}";
+ ExecStart = [
+ ""
+ "${lib.getExe cfg.package} -config \${RUNTIME_DIRECTORY}/config.toml"
+ ];
+
LockPersonality = true;
MemoryDenyWriteExecute = true;
- NoNewPrivileges = true;
PrivateDevices = true;
PrivateIPC = true;
- PrivateTmp = true;
PrivateUsers = true;
+ ProcSubset = "pid";
ProtectClock = true;
ProtectControlGroups = true;
- ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
- ProtectSystem = "strict";
- RemoveIPC = true;
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
];
RestrictNamespaces = true;
RestrictRealtime = true;
- RestrictSUIDSGID = true;
- SocketBindAllow = cfg.port;
- SocketBindDeny = "any";
- SystemCallArchitectures = "native";
+ SystemCallArchitectures = [ "native" ];
SystemCallFilter = [
"@system-service"
- "~@privileged @obsolete"
+ "~@privileged"
+ "~@resources"
];
};
};
diff --git a/nixos/modules/services/web-apps/bentopdf.nix b/nixos/modules/services/web-apps/bentopdf.nix
index bf03beccc938..5281bf4efdcf 100644
--- a/nixos/modules/services/web-apps/bentopdf.nix
+++ b/nixos/modules/services/web-apps/bentopdf.nix
@@ -60,7 +60,7 @@ in
services.nginx = lib.mkIf cfg.nginx.enable {
enable = lib.mkDefault true;
virtualHosts."${cfg.domain}" = lib.mkMerge [
- cfg.nginx.virtualHost
+ (lib.mapAttrsRecursive (_: lib.mkDefault) cfg.nginx.virtualHost)
{
root = lib.mkForce "${cfg.package}";
@@ -82,7 +82,7 @@ in
services.caddy = lib.mkIf cfg.caddy.enable {
enable = lib.mkDefault true;
virtualHosts."${cfg.domain}" = lib.mkMerge [
- cfg.caddy.virtualHost
+ (lib.mapAttrsRecursive (_: lib.mkDefault) cfg.caddy.virtualHost)
{
hostName = lib.mkForce cfg.domain;
extraConfig = ''
diff --git a/nixos/modules/services/web-apps/chhoto-url.nix b/nixos/modules/services/web-apps/chhoto-url.nix
index 8b6df98dc53e..54cb6bd81e00 100644
--- a/nixos/modules/services/web-apps/chhoto-url.nix
+++ b/nixos/modules/services/web-apps/chhoto-url.nix
@@ -30,7 +30,7 @@ in
settings = lib.mkOption {
description = ''
Configuration of Chhoto URL.
- See for a list of options.
+ See for a list of options.
'';
example = {
port = 4567;
@@ -152,7 +152,7 @@ in
description = ''
Files to load environment variables from in addition to [](#opt-services.chhoto-url.settings).
This is useful to avoid putting secrets into the nix store.
- See for a list of options.
+ See for a list of options.
'';
};
};
diff --git a/nixos/modules/services/web-apps/cloudlog.nix b/nixos/modules/services/web-apps/cloudlog.nix
index bafe5420d7f7..8b750aaacfc5 100644
--- a/nixos/modules/services/web-apps/cloudlog.nix
+++ b/nixos/modules/services/web-apps/cloudlog.nix
@@ -62,17 +62,14 @@ let
ln -s ${configFile} $out/application/config/config.php
ln -s ${dbFile} $out/application/config/database.php
+ # make a copy of the original assets/json to prime the datadir
+ cp -a "$out/assets/json/" "$out/assets/json.original/"
+
# link writable directories
- for directory in updates uploads backup logbook; do
+ for directory in updates uploads backup logbook assets/qslcard images/eqsl_card_images assets/sstvimages assets/json; do
rm -rf $out/$directory
ln -s ${cfg.dataDir}/$directory $out/$directory
done
-
- # link writable asset files
- for asset in dok sota wwff; do
- rm -rf $out/assets/json/$asset.txt
- ln -s ${cfg.dataDir}/assets/json/$asset.txt $out/assets/json/$asset.txt
- done
'';
};
in
@@ -503,13 +500,26 @@ in
group = config.services.nginx.group;
in
[
- "d ${cfg.dataDir} 0750 ${cfg.user} ${group} - -"
- "d ${cfg.dataDir}/updates 0750 ${cfg.user} ${group} - -"
- "d ${cfg.dataDir}/uploads 0750 ${cfg.user} ${group} - -"
- "d ${cfg.dataDir}/backup 0750 ${cfg.user} ${group} - -"
- "d ${cfg.dataDir}/logbook 0750 ${cfg.user} ${group} - -"
- "d ${cfg.dataDir}/assets/json 0750 ${cfg.user} ${group} - -"
- "d ${cfg.dataDir}/assets/qslcard 0750 ${cfg.user} ${group} - -"
+ "d ${cfg.dataDir} 0750 ${cfg.user} ${group} - -"
+ "d ${cfg.dataDir}/updates 0750 ${cfg.user} ${group} - -"
+ "d ${cfg.dataDir}/uploads 0750 ${cfg.user} ${group} - -"
+ "d ${cfg.dataDir}/backup 0750 ${cfg.user} ${group} - -"
+ "d ${cfg.dataDir}/logbook 0750 ${cfg.user} ${group} - -"
+ "d ${cfg.dataDir}/assets 0750 ${cfg.user} ${group} - -"
+ "d ${cfg.dataDir}/assets/json 0750 ${cfg.user} ${group} - -"
+ "d ${cfg.dataDir}/assets/qslcard 0750 ${cfg.user} ${group} - -"
+ "d ${cfg.dataDir}/assets/sstvimages 0750 ${cfg.user} ${group} - -"
+ "d ${cfg.dataDir}/images 0750 ${cfg.user} ${group} - -"
+ "d ${cfg.dataDir}/images/eqsl_card_images 0750 ${cfg.user} ${group} - -"
+ "C ${cfg.dataDir}/assets/json/dok.txt 0640 ${cfg.user} ${group} - ${package}/assets/json.original/dok.txt"
+ "C ${cfg.dataDir}/assets/json/pota.txt 0640 ${cfg.user} ${group} - ${package}/assets/json.original/pota.txt"
+ "C ${cfg.dataDir}/assets/json/satellite_data.json 0640 ${cfg.user} ${group} - ${package}/assets/json.original/satellite_data.json"
+ "C ${cfg.dataDir}/assets/json/sota.txt 0640 ${cfg.user} ${group} - ${package}/assets/json.original/sota.txt"
+ "C ${cfg.dataDir}/assets/json/US_counties.csv 0640 ${cfg.user} ${group} - ${package}/assets/json.original/US_counties.csv"
+ "C ${cfg.dataDir}/assets/json/us_national_parksontheair.csv 0640 ${cfg.user} ${group} - ${package}/assets/json.original/us_national_parksontheair.csv"
+ "C ${cfg.dataDir}/assets/json/WABSquares.geojson 0640 ${cfg.user} ${group} - ${package}/assets/json.original/WABSquares.geojson"
+ "C ${cfg.dataDir}/assets/json/wwff.txt 0640 ${cfg.user} ${group} - ${package}/assets/json.original/wwff.txt"
+ "C+ ${cfg.dataDir}/assets/json/datatables_languages 0750 ${cfg.user} ${group} - ${package}/assets/json.original/datatables_languages"
];
};
diff --git a/nixos/modules/services/web-apps/davis.nix b/nixos/modules/services/web-apps/davis.nix
index feb13b8bf87c..6a596f56d1b5 100644
--- a/nixos/modules/services/web-apps/davis.nix
+++ b/nixos/modules/services/web-apps/davis.nix
@@ -189,7 +189,7 @@ in
name = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = "davis";
- description = "Database name, only used when the databse is created locally.";
+ description = "Database name, only used when the database is created locally.";
};
createLocally = lib.mkOption {
type = lib.types.bool;
diff --git a/nixos/modules/services/web-apps/flarum.nix b/nixos/modules/services/web-apps/flarum.nix
index c4c05826d8cd..1c7065c910bc 100644
--- a/nixos/modules/services/web-apps/flarum.nix
+++ b/nixos/modules/services/web-apps/flarum.nix
@@ -10,16 +10,23 @@ with lib;
let
cfg = config.services.flarum;
+ # Only placeholders reach the world-readable Nix store; the install
+ # script substitutes the real secrets at runtime.
flarumInstallConfig = pkgs.writeText "config.json" (
builtins.toJSON {
debug = false;
offline = false;
baseUrl = cfg.baseUrl;
- databaseConfiguration = cfg.database;
+ databaseConfiguration =
+ cfg.database
+ // optionalAttrs (cfg.databasePasswordFile != null) {
+ password = "@databasePassword@";
+ };
adminUser = {
username = cfg.adminUser;
- password = cfg.initialAdminPassword;
+ password =
+ if cfg.initialAdminPasswordFile != null then "@adminPassword@" else cfg.initialAdminPassword;
email = cfg.adminEmail;
};
settings = {
@@ -69,7 +76,26 @@ in
initialAdminPassword = mkOption {
type = types.str;
default = "flarum";
- description = "Initial password for the adminUser";
+ description = ''
+ Initial password for the adminUser.
+
+ WARNING: This is stored world-readable in the Nix store.
+ Use {option}`initialAdminPasswordFile` instead.
+ '';
+ };
+
+ initialAdminPasswordFile = mkOption {
+ type = types.nullOr types.path;
+ default = null;
+ example = "/run/secrets/flarum-admin-password";
+ description = ''
+ File containing the initial password for adminUser.
+ Must be readable by the flarum user.
+ Takes precedence over {option}`initialAdminPassword`.
+
+ The password must not contain `"` or `\` characters, as it is
+ substituted into a JSON installation config verbatim.
+ '';
};
user = mkOption {
@@ -98,7 +124,12 @@ in
bool
int
]);
- description = "MySQL database parameters";
+ description = ''
+ MySQL database parameters.
+
+ WARNING: A `password` set here is stored world-readable in the
+ Nix store. Use {option}`databasePasswordFile` instead.
+ '';
default = {
# the database driver; i.e. MySQL; MariaDB...
driver = "mysql";
@@ -118,6 +149,20 @@ in
};
};
+ databasePasswordFile = mkOption {
+ type = types.nullOr types.path;
+ default = null;
+ example = "/run/secrets/flarum-db-password";
+ description = ''
+ File containing the database password.
+ Must be readable by the flarum user.
+ Takes precedence over `database.password`.
+
+ The password must not contain `"` or `\` characters, as it is
+ substituted into a JSON installation config verbatim.
+ '';
+ };
+
createDatabaseLocally = mkOption {
type = types.bool;
default = false;
@@ -210,6 +255,8 @@ in
Type = "oneshot";
User = cfg.user;
Group = cfg.group;
+ # The secret-filled install config is staged in /tmp
+ PrivateTmp = true;
};
path = [ config.services.phpfpm.phpPackage ];
script = ''
@@ -222,7 +269,18 @@ in
''
+ optionalString (cfg.createDatabaseLocally && cfg.database.driver == "mysql") ''
if [ ! -f config.php ]; then
- php flarum install --file=${flarumInstallConfig}
+ install -m 0600 ${flarumInstallConfig} /tmp/flarum-install.json
+ ${optionalString (cfg.initialAdminPasswordFile != null) ''
+ ${pkgs.replace-secret}/bin/replace-secret '@adminPassword@' \
+ ${escapeShellArg cfg.initialAdminPasswordFile} /tmp/flarum-install.json
+ ''}
+ ${optionalString (cfg.databasePasswordFile != null) ''
+ ${pkgs.replace-secret}/bin/replace-secret '@databasePassword@' \
+ ${escapeShellArg cfg.databasePasswordFile} /tmp/flarum-install.json
+ ''}
+ php flarum install --file=/tmp/flarum-install.json
+ # config.php contains the database password; stateDir is world-readable
+ chmod 600 config.php
fi
''
+ ''
diff --git a/nixos/modules/services/web-apps/freescout.nix b/nixos/modules/services/web-apps/freescout.nix
new file mode 100644
index 000000000000..7c1339604c5f
--- /dev/null
+++ b/nixos/modules/services/web-apps/freescout.nix
@@ -0,0 +1,487 @@
+{
+ lib,
+ config,
+ pkgs,
+ ...
+}:
+
+let
+ # Simple alias variables
+ user = "freescout";
+ group = user;
+ cfg = config.services.freescout;
+ datadir = "/var/lib/freescout";
+ cachedir = "/var/cache/freescout";
+ fpmService = "phpfpm-${user}";
+
+ # Generated config and more complex templates / default variables
+ autoDb = if !cfg.databaseSetup.enable then false else cfg.databaseSetup.kind;
+ dbService = lib.optional (autoDb != false) (
+ if autoDb == "mysql" then "mysql.service" else "postgresql.service"
+ );
+ db_config = lib.optionalAttrs (autoDb != false) (
+ if autoDb == "mysql" then
+ {
+ DB_CONNECTION = "mysql";
+ DB_HOST = "";
+ DB_SOCKET = "/run/mysqld/mysqld.sock";
+ DB_USERNAME = user;
+ DB_DATABASE = user;
+ }
+ else
+ {
+ DB_CONNECTION = "pgsql";
+ DB_HOST = "/run/postgresql";
+ DB_DATABASE = user;
+ DB_USERNAME = user;
+ }
+ );
+
+ raw_config = {
+ APP_ENV = "production";
+ APP_FORCE_HTTPS = true;
+ APP_URL = "https://${cfg.domain}";
+ APP_TIMEZONE = config.time.timeZone;
+ APP_DISABLE_UPDATING = true;
+ }
+ // cfg.settings
+ // db_config;
+ app_config = dropNull raw_config;
+ baseService = {
+ path = [
+ pkgs.ps
+ artisanWrapped
+ ];
+ requires = [
+ # Using requires (instead of wants) since a failing config
+ # is indeed critical and should not allow this service to continue
+ "freescout-setup.service"
+ ]
+ ++ dbService;
+ serviceConfig = {
+ User = user;
+ Group = group;
+ };
+ };
+
+ # Custom built packages / files / scripts
+ phpPackage = cfg.phpPackage.buildEnv {
+ # As of php8.5 opcache is required and automatically compiled in and thus is not available in
+ # all anymore. To keep compatibility with older versions, still add if available.
+ extensions =
+ { all, enabled }: enabled ++ [ all.iconv ] ++ (lib.optional (all ? opcache) all.opcache);
+ # Don't log anything because we are not sure, if this may leak secrets
+ # Logging can be increased, if we have time to check the logging library
+ extraConfig = ''
+ error_reporting = 0
+ '';
+ };
+
+ package = cfg.package.overrideAttrs (prev: {
+ pname = "${prev.pname}-${cfg.domain}";
+ postInstall = prev.postInstall or "" + ''
+ ln -s ${datadir} $out/share/freescout/data
+ '';
+ });
+
+ artisanWrapped = pkgs.writeShellApplication {
+ name = "artisan-wrapped";
+ runtimeInputs = with pkgs; [
+ util-linux
+ ];
+ text = ''
+ cd ${datadir}
+ _runuser='exec'
+ if [[ "$USER" != ${user} ]]; then
+ _runuser='exec runuser --user ${user}'
+ fi
+ ''${_runuser} ${lib.getExe phpPackage} ${package}/share/freescout/artisan "$@"
+ '';
+ };
+ configFile = mkEnvFile "freescout.env" app_config;
+ allSecrets = lib.catAttrs "_secret" (lib.collect isSecret app_config);
+
+ configSetupScript = pkgs.writeShellScript "freescout-config-setup" ''
+ set -o errexit -o pipefail -o nounset -o errtrace
+ shopt -s inherit_errexit
+ PATH=${lib.makeBinPath [ pkgs.replace-secret ]}:$PATH
+ cp ${configFile} "/tmp/raw.env";
+ ${mkSecretsReplacement "/tmp/raw.env" allSecrets}
+ install -T --mode 400 -o ${user} -g ${group} "/tmp/raw.env" "${datadir}/.env"
+ rm "/tmp/raw.env"
+ '';
+
+ freescoutSetupScript =
+ let
+ rwPaths = [
+ "storage/app"
+ "storage/framework"
+ "storage/framework/sessions"
+ "storage/framework/views"
+ "storage/framework/cache/data"
+ "storage/logs"
+ "bootstrap/cache"
+ "public/css/builds"
+ "public/js/builds"
+ "Modules"
+ "public/modules"
+ ];
+ in
+ ''
+ set -x
+ umask 027
+ # Working arround https://github.com/freescout-helpdesk/freescout/issues/2547
+ # and having to manually clear cache when migrating from something around
+ # ~1.8.159 (╯°□°)╯︵ ┻━┻
+ # See: https://github.com/freescout-help-desk/freescout/issues/4366#issuecomment-2495993397
+ rm -f ${datadir}/bootstrap/cache.php ${datadir}/bootstrap/cache/{config,packages,services}.php
+
+ ln -sf "${artisanWrapped}/bin/artisan-wrapped" "${datadir}/artisan"
+ ${lib.concatMapStringsSep "\n" (p: "mkdir -p ${datadir}/${p}") rwPaths}
+
+ # Migrate database and stuff
+ # This does migrate, cache:clear, queue:restart
+ ${lib.getExe artisanWrapped} freescout:after-app-update
+ '';
+
+ # Helper functions
+ isSecret = v: lib.isAttrs v && v ? _secret && lib.strings.isConvertibleWithToString v._secret;
+ hashSecret = p: builtins.hashString "sha256" (toString p);
+ dropNull = lib.filterAttrsRecursive (
+ _: v:
+ !lib.elem v [
+ null
+ [ ]
+ { }
+ ]
+ );
+ mkEnvVars = lib.generators.toKeyValue {
+ mkKeyValue =
+ k: v:
+ let
+ value =
+ with builtins;
+ if isInt v then
+ toString v
+ else if isString v then
+ v
+ else if isBool v then
+ lib.boolToString v
+ else if isSecret v then
+ hashSecret v._secret
+ else
+ throw "freescout: ${k} has unsupported type ${typeOf v}: ${(lib.generators.toPretty { }) v}";
+ in
+ "${k}=${value}";
+ };
+ mkEnvFile = fname: values: pkgs.writeText fname (mkEnvVars values);
+ mkSecretsReplacement =
+ filePath:
+ lib.concatMapStringsSep "\n" (
+ sp:
+ "replace-secret ${
+ lib.escapeShellArgs [
+ (hashSecret sp)
+ sp
+ ]
+ } ${filePath}"
+ );
+in
+{
+ options.services.freescout = with lib; {
+ enable = mkEnableOption "FreeScout helpdesk application";
+
+ package = mkPackageOption pkgs "freescout" { };
+
+ phpPackage = mkOption {
+ type = types.package;
+ default = pkgs.php;
+ description = "The php package to use";
+ defaultText = literalExpression "pkgs.php";
+ };
+
+ domain = mkOption {
+ type = types.str;
+ description = "Domain the freescout installation will run under";
+ example = "support.mydomain.net";
+ };
+
+ settings = mkOption {
+ type = with types; attrsOf anything;
+ apply = mapAttrs' (
+ k: v: {
+ name = toUpper k;
+ value = v;
+ }
+ );
+ default = { };
+ description = ''
+ Settings to be set in the `.env` file. See
+
+ for reference on available environment variables.
+
+ Will be merged with the shown defaults.
+ '';
+ defaultText = lib.literalExpression ''
+ {
+ APP_ENV = "production";
+ APP_FORCE_HTTPS = true;
+ APP_URL = "https://''${config.services.freescout.domain}";
+ APP_TIMEZONE = config.time.timeZone;
+ APP_DISABLE_UPDATING = true;
+ }
+ '';
+ example = lib.literalExpression ''
+ {
+ # NOTE: MUST be 256 bits (32 bytes) in length, the form of base64: is recommended.
+ # You can generate a valid one using `echo "base64:$(openssl rand -base64 32)"`
+ APP_KEY_FILE = "/run/secret/freescout/app_key";
+ DB_CONNECTION = "mysql";
+ DB_HOST = "localhost";
+ DB_PORT = 3306;
+ DB_DATABASE = "freescout";
+ DB_USERNAME = "freescout";
+ DB_PASSWORD._secret = "/run/secret/freescout/db_pass";
+ }
+ '';
+ };
+
+ poolConfig = mkOption {
+ type =
+ with types;
+ attrsOf (oneOf [
+ str
+ int
+ bool
+ ]);
+ default = {
+ "pm" = "ondemand";
+ "pm.max_children" = 32;
+ "pm.process_idle_timeout" = "120s";
+ "pm.max_requests" = 500;
+ };
+ description = ''
+ Options for the freescout PHP pool. See the documentation on `php-fpm.conf`
+ for details on configuration directives.
+ '';
+ };
+
+ databaseSetup = {
+ enable = mkOption {
+ type = types.bool;
+ description = "Whether to enable automatic database setup and configuration";
+ default = true;
+ };
+
+ kind = mkOption {
+ type = types.enum [
+ "mysql"
+ "pgsql"
+ ];
+ default = "pgsql";
+ example = "mysql";
+ description = "Type of database to automatically set up";
+ };
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ assertions = [
+ {
+ assertion = (app_config ? "APP_KEY" || app_config ? "APP_KEY_FILE");
+ message = "`services.freescout.settings.APP_KEY_FILE` is required!";
+ }
+ ];
+
+ warnings =
+ lib.optional (app_config ? "APP_KEY" && lib.isString app_config.APP_KEY)
+ "`services.freescout.settings.APP_KEY` will be stored in the world readable nix store. Use `APP_KEY._secret` or `APP_KEY_FILE` instead!";
+
+ users.users.${user} = {
+ inherit group;
+ isSystemUser = true;
+ createHome = true;
+ home = datadir;
+ homeMode = "750";
+ };
+ users.users.${config.services.nginx.user}.extraGroups = [ group ];
+ users.groups.${group} = { };
+
+ services.postgresql = lib.mkIf (autoDb == "pgsql") {
+ enable = true;
+ ensureUsers = [
+ {
+ name = user;
+ ensureDBOwnership = true;
+ }
+ ];
+ ensureDatabases = [
+ app_config.DB_DATABASE
+ ];
+ };
+
+ services.mysql = lib.mkIf (autoDb == "mysql") {
+ enable = true;
+ package = lib.mkDefault pkgs.mariadb;
+ ensureUsers = [
+ {
+ name = user;
+ ensurePermissions = {
+ "${app_config.DB_DATABASE}.*" = "ALL PRIVILEGES";
+ };
+ }
+ ];
+ ensureDatabases = [
+ app_config.DB_DATABASE
+ ];
+ };
+
+ services.phpfpm.pools.${user} = {
+ inherit phpPackage user group;
+
+ phpOptions = ''
+ display_errors = On
+ display_startup_errors = On
+ '';
+ settings = {
+ "listen.owner" = user;
+ "listen.group" = config.services.nginx.group;
+ "catch_workers_output" = true;
+ }
+ // cfg.poolConfig;
+ };
+
+ systemd.services.${fpmService} = {
+ # Somehow the webinterface shows
+ inherit (baseService) path;
+ };
+
+ systemd.services.freescout-setup = lib.recursiveUpdate baseService {
+ description = "Preparational tasks for freescout";
+ requires = dbService;
+ wantedBy = [ "multi-user.target" ];
+ after = dbService;
+ script = freescoutSetupScript;
+ serviceConfig = {
+ PrivateTmp = true;
+ Type = "oneshot";
+ RemainAfterExit = true;
+ ExecStartPre = "+${configSetupScript}";
+ };
+ };
+
+ # This needs to be manually started again and again
+ # Freescout has its own scheduler built in to ensure tasks run at the desired frequency
+ # --no-interaction makes sure, that the queue worker is not executed.
+ # This is needed, because otherweise the queue worker process would continue running
+ # thus block further schedule invocations until the queue worker terminates.
+ # See https://github.com/freescout-help-desk/freescout/blob/74fa4b7d4f8288f8d3fb1d343308d3289c4d72e2/app/Console/Kernel.php#L195-L267
+ systemd.services."freescout-schedule-run" = baseService // {
+ startAt = "minutely";
+ script = "${lib.getExe artisanWrapped} schedule:run --no-interaction";
+ };
+
+ # This is both long-running but also stops quite frequently.
+ # Seeing job restart counts in the thousands here is normal.
+ systemd.services."freescout-queue" = lib.recursiveUpdate baseService {
+ # Copying the output to storage/logs because it makes
+ # debugging connection issues easier for the user.
+ script = ''
+ ${lib.getExe artisanWrapped} \
+ queue:work \
+ --queue emails,default \
+ --sleep=5 \
+ -vv \
+ --tries=20 \
+ | tee -a ${datadir}/storage/logs/queue-jobs.log
+ '';
+ serviceConfig = {
+ RestartSec = "15s";
+ RuntimeMaxSec = "1h";
+ Restart = "always";
+ };
+ wantedBy = [ "multi-user.target" ];
+ after = [ "freescout-setup.service" ] ++ dbService;
+ };
+
+ services.nginx = {
+ enable = true;
+ virtualHosts.${cfg.domain} =
+ let
+ vhostCfg = config.services.nginx.virtualHosts.${cfg.domain};
+ optSsl = lib.optionalString (vhostCfg.forceSSL || vhostCfg.onlySSL) "fastcgi_param HTTPS on;";
+ in
+ {
+ root = lib.mkForce "${package}/share/freescout/public";
+
+ locations = {
+ "/" = {
+ index = "index.php";
+ tryFiles = "$uri $uri/ /index.php$is_args$args";
+
+ extraConfig = ''
+ # Defeats E-Mail open tracking or possibly "real" exploits
+ add_header X-XSS-Protection "1; mode=block" always;
+ add_header X-Content-Type-Options "nosniff" always;
+ add_header Referrer-Policy "no-referrer-when-downgrade" always;
+ add_header Content-Security-Policy "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'";
+ '';
+ };
+
+ "~ \\.php$" = {
+ tryFiles = "$uri $uri/ =404";
+ extraConfig = ''
+ fastcgi_index index.php;
+ include ${pkgs.nginx}/conf/fastcgi_params;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ fastcgi_pass unix:${config.services.phpfpm.pools.${user}.socket};
+ ${optSsl}
+
+ # Defeats E-Mail open tracking or possibly "real" exploits
+ add_header X-XSS-Protection "1; mode=block" always;
+ add_header X-Content-Type-Options "nosniff" always;
+ add_header Referrer-Policy "no-referrer-when-downgrade" always;
+ add_header Content-Security-Policy "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'";
+ '';
+ };
+
+ "~* ^/storage/attachment/" = {
+ tryFiles = "$uri $uri/ /index.php?$query_string";
+ extraConfig = ''
+ expires 1M;
+ access_log off;
+ '';
+ };
+
+ "~* ^/(?:css|js)/.*\\.(?:css|js)$".extraConfig = ''
+ expires 2d;
+ access_log off;
+ add_header Cache-Control "public, must-revalidate";
+ # Defeats E-Mail open tracking or possibly "real" exploits
+ add_header X-XSS-Protection "1; mode=block" always;
+ add_header X-Content-Type-Options "nosniff" always;
+ add_header Referrer-Policy "no-referrer-when-downgrade" always;
+ add_header Content-Security-Policy "default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'";
+ '';
+
+ "~* ^/(?:css|fonts|img|installer|js|modules)$".extraConfig = ''
+ expires 1M;
+ access_log off;
+ add_header Cache-Control "public, must-revalidate";
+ '';
+
+ "~ /\\.".extraConfig = ''
+ deny all;
+ '';
+ "^~ /(css|js)/builds/".root = "${cachedir}/public/";
+ "^~ /storage/app/attachment/" = {
+ alias = "${datadir}/storage/app/attachment/";
+ extraConfig = ''
+ internal;
+ '';
+ };
+ };
+ };
+ };
+ };
+}
diff --git a/nixos/modules/services/web-apps/geoserver.nix b/nixos/modules/services/web-apps/geoserver.nix
new file mode 100644
index 000000000000..578c6d69c9bc
--- /dev/null
+++ b/nixos/modules/services/web-apps/geoserver.nix
@@ -0,0 +1,81 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+
+with lib;
+
+let
+
+ cfg = config.services.geoserver;
+
+in
+{
+ options = {
+ services.geoserver = {
+ enable = mkEnableOption "Geoserver service";
+
+ package = lib.mkPackageOption pkgs "geoserver" { };
+
+ user = mkOption {
+ type = types.str;
+ default = "geoserver";
+ description = "The (system) user that will run the service.";
+ };
+
+ group = mkOption {
+ type = types.str;
+ default = "geoserver";
+ description = "The user's group.";
+ };
+
+ jvmOpts = mkOption {
+ type = types.lines;
+ default = "";
+ description = "Any options passed to the JVM via the `JAVA_OPTS` environment variable. See [startup.sh](https://github.com/geoserver/geoserver/blob/main/src/release/bin/startup.sh) for details.";
+ };
+
+ jettyOpts = mkOption {
+ type = types.lines;
+ default = "";
+ example = "jetty.http.port=1234";
+ description = "Any options passed to the Jetty web server via the `JETTY_OPTS` environment variable. See [startup.sh](https://github.com/geoserver/geoserver/blob/main/src/release/bin/startup.sh) for details.";
+ };
+ };
+ };
+
+ config = mkIf cfg.enable {
+
+ users.users."${cfg.user}" = {
+ group = cfg.group;
+ isSystemUser = true;
+ };
+ users.groups."${cfg.group}" = { };
+
+ systemd.services.geoserver = {
+ description = "Geoserver";
+
+ wantedBy = [ "multi-user.target" ];
+
+ environment = {
+ GEOSERVER_HOME = "${cfg.package}/share/geoserver";
+ GEOSERVER_DATA_DIR = "/var/lib/geoserver";
+ JAVA_OPTS = "${cfg.jvmOpts}";
+ JETTY_OPTS = "${cfg.jettyOpts}";
+ };
+
+ serviceConfig = {
+ ExecStart = "${cfg.package}/bin/geoserver-startup";
+ User = cfg.user;
+ Group = cfg.group;
+ NoNewPrivileges = true;
+ ProtectHome = true; # true=deny access to /home, /root, /run/user
+ StateDirectory = "geoserver";
+ };
+ };
+ };
+
+ meta.teams = [ lib.teams.geospatial ];
+}
diff --git a/nixos/modules/services/web-apps/hatsu.nix b/nixos/modules/services/web-apps/hatsu.nix
index 093ae150cfdc..fb83dfa8bc03 100644
--- a/nixos/modules/services/web-apps/hatsu.nix
+++ b/nixos/modules/services/web-apps/hatsu.nix
@@ -66,7 +66,7 @@ in
description = ''
Configuration for Hatsu, see
-
+
for supported values.
'';
};
diff --git a/nixos/modules/services/web-apps/homer.nix b/nixos/modules/services/web-apps/homer.nix
index e34e43435d12..a89f51dd832d 100644
--- a/nixos/modules/services/web-apps/homer.nix
+++ b/nixos/modules/services/web-apps/homer.nix
@@ -169,11 +169,25 @@ in
enable = true;
virtualHosts."${cfg.virtualHost.domain}".extraConfig = ''
root * ${cfg.package}
- file_server
+ encode zstd gzip
+
+ @immutable path /resources/*
+ header @immutable Cache-Control "public, max-age=31536000, immutable"
+
+ @html not path /resources/*
+ header @html Cache-Control "no-store"
+
+ header {
+ -ETag
+ -Last-Modified
+ }
+
handle_path /assets/config.yml {
root * ${configFile}
file_server
}
+
+ file_server
'';
};
};
diff --git a/nixos/modules/services/web-apps/immichframe.nix b/nixos/modules/services/web-apps/immichframe.nix
index cbe7d57bab7b..fb3257f80594 100644
--- a/nixos/modules/services/web-apps/immichframe.nix
+++ b/nixos/modules/services/web-apps/immichframe.nix
@@ -134,6 +134,40 @@ in
Type = "simple";
Restart = "on-failure";
RestartSec = 3;
+
+ # systemd hardening, based on jellyfin (also .NET) but stricter
+ CapabilityBoundingSet = [ "" ];
+ DevicePolicy = "closed";
+ LockPersonality = true;
+ NoNewPrivileges = true;
+ PrivateDevices = true;
+ PrivateUsers = true;
+ ProcSubset = "pid";
+ ProtectClock = true;
+ ProtectControlGroups = !config.boot.isContainer;
+ ProtectHome = true;
+ ProtectHostname = true;
+ ProtectKernelLogs = true;
+ ProtectKernelModules = !config.boot.isContainer;
+ ProtectKernelTunables = !config.boot.isContainer;
+ ProtectProc = "invisible";
+ ProtectSystem = "strict";
+ # no AF_NETLINK here since there's no network connection monitoring
+ RestrictAddressFamilies = [
+ "AF_INET"
+ "AF_INET6"
+ "AF_UNIX"
+ ];
+ RestrictNamespaces = !config.boot.isContainer;
+ RestrictRealtime = true;
+ RestrictSUIDSGID = true;
+ SystemCallArchitectures = "native";
+ SystemCallErrorNumber = "EPERM";
+ SystemCallFilter = [
+ "@system-service"
+ "~@privileged"
+ ];
+ UMask = "0077";
};
};
};
diff --git a/nixos/modules/services/web-apps/isso.nix b/nixos/modules/services/web-apps/isso.nix
index 87804b7ea7cf..97076eaba37c 100644
--- a/nixos/modules/services/web-apps/isso.nix
+++ b/nixos/modules/services/web-apps/isso.nix
@@ -37,6 +37,8 @@ in
See [Isso Server Configuration](https://posativ.org/isso/docs/configuration/server/)
for supported values.
+ You can set secrets using the secretFile option with environment variables following
+ [the documentation](https://isso-comments.de/docs/reference/server-config/#environment-variables).
'';
type = types.submodule {
@@ -51,6 +53,16 @@ in
}
'';
};
+
+ secretFile = mkOption {
+ type = types.nullOr types.str;
+ default = null;
+ description = ''
+ A file containing secrets as environment variables that will be used in the configuration.
+ See [the documentation](https://isso-comments.de/docs/reference/server-config/#environment-variables) for details.
+ '';
+ example = "/run/secrets/isso.env";
+ };
};
};
@@ -65,6 +77,8 @@ in
User = "isso";
Group = "isso";
+ EnvironmentFile = mkIf (cfg.secretFile != null) [ cfg.secretFile ];
+
DynamicUser = true;
StateDirectory = "isso";
diff --git a/nixos/modules/services/web-apps/jitsi-meet.nix b/nixos/modules/services/web-apps/jitsi-meet.nix
index 18da068fa5c6..b7da3b47371e 100644
--- a/nixos/modules/services/web-apps/jitsi-meet.nix
+++ b/nixos/modules/services/web-apps/jitsi-meet.nix
@@ -651,19 +651,17 @@ in
};
};
- services.jitsi-meet.config =
- recursiveUpdate
- (mkIf cfg.excalidraw.enable {
- whiteboard = {
- enabled = true;
- collabServerBaseUrl = "https://${cfg.hostName}";
- };
- })
- (
- mkIf cfg.secureDomain.enable {
- hosts.anonymousdomain = "guest.${cfg.hostName}";
- }
- );
+ services.jitsi-meet.config = mkMerge [
+ (mkIf cfg.excalidraw.enable {
+ whiteboard = {
+ enabled = true;
+ collabServerBaseUrl = "https://${cfg.hostName}";
+ };
+ })
+ (mkIf cfg.secureDomain.enable {
+ hosts.anonymousdomain = "guest.${cfg.hostName}";
+ })
+ ];
services.jitsi-videobridge = mkIf cfg.videobridge.enable {
enable = true;
diff --git a/nixos/modules/services/web-apps/koito.nix b/nixos/modules/services/web-apps/koito.nix
new file mode 100644
index 000000000000..f4b78770aed5
--- /dev/null
+++ b/nixos/modules/services/web-apps/koito.nix
@@ -0,0 +1,140 @@
+{
+ lib,
+ config,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.services.koito;
+
+ inherit (lib)
+ getExe
+ mkEnableOption
+ mkIf
+ mkOption
+ mkPackageOption
+ types
+ ;
+in
+{
+ options.services.koito = {
+ enable = mkEnableOption "koito";
+
+ package = mkPackageOption pkgs "koito" { };
+
+ openFirewall = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Open the appropriate ports in the firewall for Koito.";
+ };
+
+ environment = mkOption {
+ type = types.submodule {
+ freeformType = types.attrsOf types.str;
+ options = {
+ KOITO_BIND_ADDR = mkOption {
+ type = types.str;
+ default = "127.0.0.1";
+ example = "0.0.0.0";
+ description = "The IP address to bind the Koito server to.";
+ };
+ KOITO_LISTEN_PORT = mkOption {
+ type = types.port;
+ default = 4110;
+ description = "TCP port for the Koito server.";
+ };
+ KOITO_CONFIG_DIR = mkOption {
+ type = types.path;
+ default = "/var/lib/koito";
+ description = "Directory for Koito import folders and image caches.";
+ };
+ };
+ };
+ default = { };
+ example = {
+ KOITO_DEFAULT_THEME = "black";
+ KOITO_LOGIN_GATE = "true";
+ };
+ description = ''
+ Environment variables to pass to the Koito service.
+ See for available options.
+ '';
+ };
+
+ environmentFile = mkOption {
+ type = types.nullOr types.path;
+ example = "/run/secrets/koito";
+ default = null;
+ description = ''
+ Path of a file with extra environment variables to be loaded from disk.
+ This file is not added to the nix store, so it can be used to pass secrets to Koito.
+ See for available options.
+ '';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ systemd.services.koito = {
+ description = "Koito - modern scrobbler";
+ after = [ "network-online.target" ];
+ wants = [ "network-online.target" ];
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ Environment = lib.mapAttrsToList (k: v: "${k}=${if builtins.isInt v then toString v else v}") (
+ lib.filterAttrs (_: v: v != null) cfg.environment
+ );
+ DynamicUser = true;
+ ExecStart = getExe cfg.package;
+ StateDirectory = "koito";
+ EnvironmentFile = cfg.environmentFile;
+
+ ProtectSystem = "strict";
+ ProtectHome = true;
+ PrivateTmp = true;
+ PrivateDevices = true;
+ PrivateMounts = true;
+ ProtectControlGroups = true;
+ ProtectKernelTunables = true;
+ RestrictSUIDSGID = true;
+ RemoveIPC = true;
+ UMask = "0077";
+
+ CapabilityBoundingSet = [ "" ];
+ NoNewPrivileges = true;
+
+ ProtectKernelModules = true;
+ ProtectKernelLogs = true;
+ ProtectClock = true;
+ SystemCallArchitectures = "native";
+ SystemCallFilter = [
+ "@system-service"
+ "~@privileged"
+ "~@resources"
+ ];
+
+ RestrictAddressFamilies = [
+ "AF_INET"
+ "AF_INET6"
+ "AF_UNIX"
+ ];
+
+ PrivateUsers = true;
+
+ LockPersonality = true;
+ ProtectHostname = true;
+ RestrictRealtime = true;
+ RestrictNamespaces = true;
+ ProtectProc = "invisible";
+ ProcSubset = "pid";
+ DeviceAllow = [ "" ];
+ };
+ };
+ networking.firewall = lib.mkIf cfg.openFirewall {
+ allowedTCPPorts = [ cfg.environment.KOITO_LISTEN_PORT ];
+ };
+ };
+
+ meta = {
+ maintainers = with lib.maintainers; [ iv-nn ];
+ };
+}
diff --git a/nixos/modules/services/web-apps/lasuite-meet.nix b/nixos/modules/services/web-apps/lasuite-meet.nix
index 421af1596483..9fff0e8a0b7a 100644
--- a/nixos/modules/services/web-apps/lasuite-meet.nix
+++ b/nixos/modules/services/web-apps/lasuite-meet.nix
@@ -36,48 +36,61 @@ let
toString value
) cfg.settings;
- commonServiceConfig = {
- RuntimeDirectory = "lasuite-meet";
- StateDirectory = "lasuite-meet";
- WorkingDirectory = "/var/lib/lasuite-meet";
+ commonSystemdConfig = {
+ after = [
+ "network.target"
+ ]
+ ++ (optional cfg.postgresql.createLocally "postgresql.service")
+ ++ (optional cfg.redis.createLocally "redis-lasuite-meet.service");
- User = "lasuite-meet";
- DynamicUser = true;
- SupplementaryGroups = mkIf cfg.redis.createLocally [
- config.services.redis.servers.lasuite-meet.group
- ];
- # hardening
- AmbientCapabilities = "";
- CapabilityBoundingSet = [ "" ];
- DevicePolicy = "closed";
- LockPersonality = true;
- NoNewPrivileges = true;
- PrivateDevices = true;
- PrivateTmp = true;
- PrivateUsers = true;
- ProcSubset = "pid";
- ProtectClock = true;
- ProtectControlGroups = true;
- ProtectHome = true;
- ProtectHostname = true;
- ProtectKernelLogs = true;
- ProtectKernelModules = true;
- ProtectKernelTunables = true;
- ProtectProc = "invisible";
- ProtectSystem = "strict";
- RemoveIPC = true;
- RestrictAddressFamilies = [
- "AF_INET"
- "AF_INET6"
- "AF_UNIX"
- ];
- RestrictNamespaces = true;
- RestrictRealtime = true;
- RestrictSUIDSGID = true;
- SystemCallArchitectures = "native";
- MemoryDenyWriteExecute = true;
- EnvironmentFile = optional (cfg.environmentFile != null) cfg.environmentFile;
- UMask = "0077";
+ wants =
+ (optional cfg.postgresql.createLocally "postgresql.service")
+ ++ (optional cfg.redis.createLocally "redis-lasuite-meet.service");
+
+ environment = pythonEnvironment;
+
+ serviceConfig = {
+ StateDirectory = "lasuite-meet";
+ WorkingDirectory = "/var/lib/lasuite-meet";
+
+ User = "lasuite-meet";
+ DynamicUser = true;
+ SupplementaryGroups = mkIf cfg.redis.createLocally [
+ config.services.redis.servers.lasuite-meet.group
+ ];
+ # hardening
+ AmbientCapabilities = "";
+ CapabilityBoundingSet = [ "" ];
+ DevicePolicy = "closed";
+ LockPersonality = true;
+ NoNewPrivileges = true;
+ PrivateDevices = true;
+ PrivateTmp = true;
+ PrivateUsers = true;
+ ProcSubset = "pid";
+ ProtectClock = true;
+ ProtectControlGroups = true;
+ ProtectHome = true;
+ ProtectHostname = true;
+ ProtectKernelLogs = true;
+ ProtectKernelModules = true;
+ ProtectKernelTunables = true;
+ ProtectProc = "invisible";
+ ProtectSystem = "strict";
+ RemoveIPC = true;
+ RestrictAddressFamilies = [
+ "AF_INET"
+ "AF_INET6"
+ "AF_UNIX"
+ ];
+ RestrictNamespaces = true;
+ RestrictRealtime = true;
+ RestrictSUIDSGID = true;
+ SystemCallArchitectures = "native";
+ MemoryDenyWriteExecute = true;
+ EnvironmentFile = optional (cfg.environmentFile != null) cfg.environmentFile;
+ UMask = "0077";
+ };
};
in
{
@@ -342,74 +355,56 @@ in
};
config = mkIf cfg.enable {
- systemd.services.lasuite-meet = {
- description = "Meet from SuiteNumérique";
- after = [
- "network.target"
- ]
- ++ (optional cfg.postgresql.createLocally "postgresql.service")
- ++ (optional cfg.redis.createLocally "redis-lasuite-meet.service");
+ systemd.services.lasuite-meet = lib.mkMerge [
+ {
+ description = "Meet from SuiteNumérique";
- wants =
- (optional cfg.postgresql.createLocally "postgresql.service")
- ++ (optional cfg.redis.createLocally "redis-lasuite-meet.service");
+ wantedBy = [ "multi-user.target" ];
- wantedBy = [ "multi-user.target" ];
-
- preStart = ''
- if [ ! -f .version ]; then
- touch .version
- fi
-
- ${optionalString (cfg.secretKeyPath == null) ''
- if [[ ! -f /var/lib/lasuite-meet/django_secret_key ]]; then
- (
- umask 0377
- tr -dc A-Za-z0-9 < /dev/urandom | head -c64 | ${pkgs.moreutils}/bin/sponge /var/lib/lasuite-meet/django_secret_key
- )
+ preStart = ''
+ if [ ! -f .version ]; then
+ touch .version
fi
- ''}
- if [ "${cfg.package.version}" != "$(cat .version)" ]; then
- ${getExe cfg.package} migrate
- echo -n "${cfg.package.version}" > .version
- fi
- '';
- environment = pythonEnvironment;
+ ${optionalString (cfg.secretKeyPath == null) ''
+ if [[ ! -f /var/lib/lasuite-meet/django_secret_key ]]; then
+ (
+ umask 0377
+ tr -dc A-Za-z0-9 < /dev/urandom | head -c64 | ${pkgs.moreutils}/bin/sponge /var/lib/lasuite-meet/django_secret_key
+ )
+ fi
+ ''}
+ if [ "${cfg.package.version}" != "$(cat .version)" ]; then
+ ${getExe cfg.package} migrate
+ echo -n "${cfg.package.version}" > .version
+ fi
+ '';
- serviceConfig = {
- BindReadOnlyPaths = "${cfg.package}/share/static:/var/lib/lasuite-meet/static";
+ serviceConfig = {
+ # needs to be here so that cronjobs don't nuke it
+ RuntimeDirectory = "lasuite-meet";
+ BindReadOnlyPaths = "${cfg.package}/share/static:/var/lib/lasuite-meet/static";
- ExecStart = utils.escapeSystemdExecArgs (
- [
- (lib.getExe' cfg.package "gunicorn")
- "--bind=${cfg.bind}"
- ]
- ++ cfg.gunicorn.extraArgs
- ++ [ "meet.wsgi:application" ]
- );
+ ExecStart = utils.escapeSystemdExecArgs (
+ [
+ (lib.getExe' cfg.package "gunicorn")
+ "--bind=${cfg.bind}"
+ ]
+ ++ cfg.gunicorn.extraArgs
+ ++ [ "meet.wsgi:application" ]
+ );
+ };
}
- // commonServiceConfig;
- };
+ commonSystemdConfig
+ ];
- systemd.services.lasuite-meet-celery = {
- description = "Meet Celery broker from SuiteNumérique";
- after = [
- "network.target"
- ]
- ++ (optional cfg.postgresql.createLocally "postgresql.service")
- ++ (optional cfg.redis.createLocally "redis-lasuite-meet.service");
+ systemd.services.lasuite-meet-celery = lib.mkMerge [
+ {
+ description = "Meet Celery broker from SuiteNumérique";
- wants =
- (optional cfg.postgresql.createLocally "postgresql.service")
- ++ (optional cfg.redis.createLocally "redis-lasuite-meet.service");
+ wantedBy = [ "multi-user.target" ];
- wantedBy = [ "multi-user.target" ];
-
- environment = pythonEnvironment;
-
- serviceConfig = {
- ExecStart = utils.escapeSystemdExecArgs (
+ serviceConfig.ExecStart = utils.escapeSystemdExecArgs (
[ (lib.getExe' cfg.package "celery") ]
++ cfg.celery.extraArgs
++ [
@@ -418,8 +413,26 @@ in
]
);
}
- // commonServiceConfig;
- };
+ commonSystemdConfig
+ ];
+
+ systemd.services.lasuite-meet-clean-pending-files = lib.mkMerge [
+ {
+ description = "Scheduled job to clean up pending uploads from LaSuite Meet";
+ startAt = "daily";
+ serviceConfig.ExecStart = "${getExe cfg.package} clean_pending_files";
+ }
+ commonSystemdConfig
+ ];
+
+ systemd.services.lasuite-meet-purge-deleted-files = lib.mkMerge [
+ {
+ description = "Scheduled job to purge deleted files from LaSuite Meet";
+ startAt = "daily";
+ serviceConfig.ExecStart = "${getExe cfg.package} purge_deleted_files";
+ }
+ commonSystemdConfig
+ ];
services.postgresql = mkIf cfg.postgresql.createLocally {
enable = true;
diff --git a/nixos/modules/services/web-apps/lemmy.md b/nixos/modules/services/web-apps/lemmy.md
index a3924448ceb5..02696d4601f1 100644
--- a/nixos/modules/services/web-apps/lemmy.md
+++ b/nixos/modules/services/web-apps/lemmy.md
@@ -1,26 +1,24 @@
# Lemmy {#module-services-lemmy}
-Lemmy is a federated alternative to reddit in rust.
+Lemmy is a federated alternative to Reddit in Rust.
## Quickstart {#module-services-lemmy-quickstart}
-The minimum to start lemmy is
+The minimum to start Lemmy is
```nix
{
services.lemmy = {
enable = true;
- settings = {
- hostname = "lemmy.union.rocks";
- database.createLocally = true;
- };
+ settings.hostname = "lemmy.union.rocks";
+ database.createLocally = true;
caddy.enable = true;
};
}
```
This will start the backend on port 8536 and the frontend on port 1234.
-It will expose your instance with a caddy reverse proxy to the hostname you've provided.
+It will expose your instance with a Caddy reverse proxy to the hostname you've provided.
Postgres will be initialized on that same instance automatically.
## Usage {#module-services-lemmy-usage}
@@ -29,5 +27,4 @@ On first connection you will be asked to define an admin user.
## Missing {#module-services-lemmy-missing}
-- Exposing with nginx is not implemented yet.
-- This has been tested using a local database with a unix socket connection. Using different database settings will likely require modifications
+- This has been tested using a local database with a Unix socket connection. Using different database settings will likely require modifications.
diff --git a/nixos/modules/services/web-apps/mediawiki.nix b/nixos/modules/services/web-apps/mediawiki.nix
index af1dbcd223a7..b5a3e69209a6 100644
--- a/nixos/modules/services/web-apps/mediawiki.nix
+++ b/nixos/modules/services/web-apps/mediawiki.nix
@@ -616,7 +616,7 @@ in
++ lib.optional (cfg.database.type != "sqlite" && cfg.database.path != null) ''
The services.mediawiki.database.path option will be ignored because services.mediawiki.database.type is not "sqlite".
''
- ++ lib.optional (cfg.database.type == "mysql" && cfg.database.tablePrefix != null) ''
+ ++ lib.optional (cfg.database.type != "mysql" && cfg.database.tablePrefix != null) ''
The services.mediawiki.database.tablePrefix option has no effect when the services.mediawiki.database.type is not "mysql".
'';
diff --git a/nixos/modules/services/web-apps/monica.nix b/nixos/modules/services/web-apps/monica.nix
index 2b0b1976422f..43bc381176db 100644
--- a/nixos/modules/services/web-apps/monica.nix
+++ b/nixos/modules/services/web-apps/monica.nix
@@ -274,15 +274,15 @@ in
monica configuration options to set in the
.env file.
- Refer to
+ Refer to
for details on supported values.
Settings containing secret data should be set to an attribute
- set containing the attribute _secret - a
+ set containing the attribute `_secret` - a
string pointing to a file containing the value the option
should be set to. See the example to get a better picture of
this: in the resulting .env file, the
- OIDC_CLIENT_SECRET key will be set to the
+ `OIDC_CLIENT_SECRET` key will be set to the
contents of the /run/keys/oidc_secret
file.
'';
diff --git a/nixos/modules/services/web-apps/netbox.nix b/nixos/modules/services/web-apps/netbox.nix
index 65f761373cda..d74c9c926b80 100644
--- a/nixos/modules/services/web-apps/netbox.nix
+++ b/nixos/modules/services/web-apps/netbox.nix
@@ -6,118 +6,433 @@
}:
let
- cfg = config.services.netbox;
- pythonFmt = pkgs.formats.pythonVars { };
- staticDir = cfg.dataDir + "/static";
+ inherit (lib)
+ any
+ attrValues
+ mkChangedOptionModule
+ mkEnableOption
+ mkOption
+ mkRemovedOptionModule
+ mkRenamedOptionModule
+ optionalString
+ types
+ ;
- settingsFile = pythonFmt.generate "netbox-settings.py" cfg.settings;
+ cfg = config.services.netbox;
+ pythonVars = pkgs.formats.pythonVars { };
+
+ settingsFile = pythonVars.generate "netbox-settings.py" cfg.settings;
extraConfigFile = pkgs.writeTextFile {
name = "netbox-extraConfig.py";
text = cfg.extraConfig;
};
configFile = pkgs.concatText "configuration.py" [
+ nixosOptionsConfig
settingsFile
extraConfigFile
];
+ secretKeyFile =
+ if cfg.secretKeyFile != null then cfg.secretKeyFile else "${cfg.dataDir}/secret.key";
- pkg =
- (cfg.package.overrideAttrs (old: {
+ nixosOptionsConfig = pkgs.writeTextFile {
+ name = "netbox-nixos-options.py";
+ text = ''
+ with open("${secretKeyFile}", "r") as file:
+ SECRET_KEY = file.readline()
+
+ API_TOKEN_PEPPERS = {
+ ${lib.concatStringsSep "\n" (
+ lib.mapAttrsToList (id: file: ''
+ ${id}: open("${file}", "r").read().strip(),
+ '') cfg.apiTokenPepperFiles
+ )}
+ }
+ '';
+ };
+
+ enableLDAP = cfg.ldapConfigFile != null;
+
+ finalPackage =
+ (cfg.package.overrideAttrs (prev: {
installPhase =
- old.installPhase
+ prev.installPhase
+ ''
ln -s ${configFile} $out/opt/netbox/netbox/netbox/configuration.py
''
- + lib.optionalString cfg.enableLdap ''
- ln -s ${cfg.ldapConfigPath} $out/opt/netbox/netbox/netbox/ldap_config.py
+ + lib.optionalString enableLDAP ''
+ ln -s ${cfg.ldapConfigFile} $out/opt/netbox/netbox/netbox/ldap_config.py
'';
})).override
{
inherit (cfg) plugins;
};
- netboxManageScript =
- with pkgs;
- (writeScriptBin "netbox-manage" ''
- #!${stdenv.shell}
- export PYTHONPATH=${pkg.pythonPath}
+
+ netboxManageScript = (
+ pkgs.writeShellScriptBin "netbox-manage" ''
+ set -a
+ ${lib.concatMapStringsSep "\n" (envFile: ''
+ . "${envFile}"
+ '') cfg.environmentFiles}
+ set +a
+ export PYTHONPATH=${finalPackage.pythonPath}
case "$(whoami)" in
- "root")
- ${util-linux}/bin/runuser -u netbox -- ${pkg}/bin/netbox "$@";;
- "netbox")
- ${pkg}/bin/netbox "$@";;
- *)
- echo "This must be run by either by root 'netbox' user"
+ "root")
+ ${lib.getExe' pkgs.util-linux "runuser"} ${
+ lib.cli.toCommandLineShellGNU { } {
+ preserve-environment = true;
+ user = "netbox";
+ supp-group = if cfg.redis.createLocally then config.services.redis.servers.netbox.group else null;
+ }
+ } -- ${finalPackage}/bin/netbox "$@";;
+ "netbox")
+ exec ${finalPackage}/bin/netbox "$@";;
+ *)
+ echo "This must be run by either the root or the 'netbox' user." >&2
+ exit 1
esac
- '');
+ ''
+ );
in
{
+ imports = [
+ (mkChangedOptionModule
+ [ "services" "netbox" "apiTokenPeppersFile" ]
+ [ "services" "netbox" "apiTokenPepperFiles" ]
+ (config: {
+ "1" = config.services.netbox.apiTokenPeppersFile;
+ })
+ )
+ (mkRemovedOptionModule [ "services" "netbox" "listenAddress" ] ''
+ Use `services.netbox.bind` with : format instead.
+ '')
+ (mkRemovedOptionModule [ "services" "netbox" "port" ] ''
+ Use `services.netbox.bind` with : format instead.
+ '')
+ (mkRemovedOptionModule [ "services" "netbox" "unixSocket" ] ''
+ Use `services.netbox.bind` with unix: format instead.
+ '')
+ (mkRemovedOptionModule [ "services" "netbox" "keycloakClientSecret" ] ''
+ Too much granularity hurts maintainability. Please configure secret key loading via `services.netbox.extraConfig` instead.
+ '')
+ (mkRemovedOptionModule [ "services" "netbox" "enableLdap" ] ''
+ LDAP support is automatically enabled when `services.netbox.ldapConfigFile` is configured.
+ '')
+ (mkRenamedOptionModule
+ [ "services" "netbox" "ldapConfigPath" ]
+ [ "services" "netbox" "ldapConfigFile" ]
+ )
+ (mkRemovedOptionModule [ "services" "nginx" "gunicornArgs" ] ''
+ Removed in favor of `services.netbox.gunicorn.extraArgs`, an attribute set passed to `lib.cli.toCommandLineGNU`.
+ '')
+ ];
+
options.services.netbox = {
enable = lib.mkOption {
- type = lib.types.bool;
+ type = types.bool;
default = false;
description = ''
- Enable Netbox.
+ Whether to enable Netbox, a DCIM and IPAM source of truth.
- This module requires a reverse proxy that serves `/static` separately.
- See this [example](https://github.com/netbox-community/netbox/blob/develop/contrib/nginx.conf/) on how to configure this.
+ This module requires setting up a reverse proxy and has native support
+ for nginx. Additionally, the NetBox project has example configurations
+ for [nginx] and the [Apache httpd] server.
+
+ The important change to make is to serve `/static` from
+ `''${config.services.netbox.settings.STATIC_ROOT}`.
+
+ [nginx]: https://github.com/netbox-community/netbox/blob/main/contrib/nginx.conf
+ [Apache httpd]: https://github.com/netbox-community/netbox/blob/main/contrib/apache.conf
+ '';
+ };
+
+ environmentFiles = mkOption {
+ type = with types; listOf path;
+ default = [ ];
+ description = ''
+ Environment files loaded into all NetBox services and consumable in
+ {option}`services.netbox.extraConfig`.
'';
};
settings = lib.mkOption {
description = ''
- Configuration options to set in `configuration.py`.
- See the [documentation](https://docs.netbox.dev/en/stable/configuration/) for more possible options.
+ The main {file}`configuration.py` to set up NetBox.
+
+ Can be used to define flat and nested key-value pairs. Check the \
+ [NetBox documentation] for possible options.
+
+ ::: {.tip}
+ Use {option}`services.netbox.extraConfig` to extend this file with Python code.
+ :::
+
+ [NetBox documentation]: https://netboxlabs.com/docs/netbox/configuration/#configuration-file
'';
-
default = { };
-
- type = lib.types.submodule {
- freeformType = pythonFmt.type;
-
+ type = types.submodule {
+ freeformType = pythonVars.type;
options = {
ALLOWED_HOSTS = lib.mkOption {
- type = with lib.types; listOf str;
+ type = with types; listOf str;
default = [ "*" ];
description = ''
A list of valid fully-qualified domain names (FQDNs) and/or IP
addresses that can be used to reach the NetBox service.
'';
};
+
+ STATIC_ROOT = mkOption {
+ type = types.path;
+ readOnly = true;
+ default = "${cfg.dataDir}/static/";
+ defaultText = lib.literalExpression "$${config.services.netbox.dataDir}/static/";
+ description = ''
+ Path to the collected static assets, served below `/static/`.
+ '';
+ };
+
+ MEDIA_ROOT = mkOption {
+ type = types.path;
+ readOnly = true;
+ default = "${cfg.dataDir}/media/";
+ defaultText = lib.literalExpression "$${config.services.netbox.dataDir}/media";
+ description = ''
+ Path where uploaded media is stored.
+ '';
+ };
+
+ REPORTS_ROOT = mkOption {
+ type = types.path;
+ readOnly = true;
+ default = "${cfg.dataDir}/reports/";
+ defaultText = lib.literalExpression "$${config.services.netbox.dataDir}/reports";
+ description = ''
+ Path where generated reports are stored.
+ '';
+ };
+
+ SCRIPTS_ROOT = mkOption {
+ type = types.path;
+ readOnly = true;
+ default = "${cfg.dataDir}/scripts/";
+ defaultText = lib.literalExpression "$${config.services.netbox.dataDir}/scripts";
+ description = ''
+ Path where scripts are stored.
+ '';
+ };
+
+ DATABASES = mkOption {
+ type = with types; attrsOf (attrsOf str);
+ default = {
+ "default" = {
+ NAME = "netbox";
+ USER = "netbox";
+ HOST = "/run/postgresql";
+ };
+ };
+ description = ''
+ Configuration for one or multiple [database] backends.
+
+ At least one database named `default` must be defined.
+
+ [database]: https://netbox.readthedocs.io/en/stable/configuration/required-parameters/#database
+ '';
+ };
+
+ # Redis database settings. Redis is used for caching and for queuing
+ # background tasks such as webhook events. A separate configuration
+ # exists for each. Full connection details are required in both
+ # sections, and it is strongly recommended to use two separate database
+ # IDs.
+ REDIS = {
+ tasks = {
+ URL = mkOption {
+ type = types.str;
+ default = "unix://${config.services.redis.servers.netbox.unixSocket}?db=0";
+ defaultText = lib.literalExpression "unix://$${config.services.redis.servers.netbox.unixSocket}?db=0";
+ description = ''
+ Redis database connection for queuing background tasks.
+
+ > It is highly recommended to keep the task and cache
+ > databases separate. Using the same database number on the
+ > same Redis instance for both may result in queued background
+ > tasks being lost during cache flushing events.
+
+
+ '';
+ };
+ };
+ caching = {
+ URL = mkOption {
+ type = types.str;
+ default = "unix://${config.services.redis.servers.netbox.unixSocket}?db=1";
+ defaultText = "unix://$${config.services.redis.servers.netbox.unixSocket}?db=0";
+ description = ''
+ Redis database connection for caching.
+
+ > It is highly recommended to keep the task and cache
+ > databases separate. Using the same database number on the
+ > same Redis instance for both may result in queued background
+ > tasks being lost during cache flushing events.
+
+
+ '';
+ };
+ };
+ };
+
+ REMOTE_AUTH_BACKEND = mkOption {
+ type =
+ with types;
+ oneOf [
+ str
+ (listOf str)
+ ];
+ default =
+ if enableLDAP then
+ "netbox.authentication.LDAPBackend"
+ else
+ "netbox.authentication.RemoteUserBackend";
+ defaultText = lib.literalExpression ''
+ if config.services.netbox.ldapConfigFile != null then
+ "netbox.authentication.LDAPBackend"
+ else
+ "netbox.authentication.RemoteUserBackend"
+ '';
+ description = ''
+ One or multiple [backends] used for authenticating external users.
+
+ When multiple backends are specified, they are tried in order.
+
+ [backends]: https://netbox.readthedocs.io/en/stable/configuration/remote-authentication/#remote_auth_backend
+ '';
+ };
+
+ LOGGING = mkOption {
+ type = pythonVars.type;
+ default = {
+ version = 1;
+
+ formatters.precise.format = "[%(levelname)s@%(name)s] %(message)s";
+
+ handlers.console = {
+ class = "logging.StreamHandler";
+ formatter = "precise";
+ };
+
+ # log to console/systemd instead of file
+ root = {
+ level = "INFO";
+ handlers = [ "console" ];
+ };
+ };
+ description = ''
+ [Logging configuration] based on the Python [`logging.config`] module.
+
+ [`logging.config`]: https://docs.python.org/3/library/logging.config.html
+ [Logging configuration]: https://netboxlabs.com/docs/netbox/configuration/system/#logging
+ '';
+ };
};
};
};
- listenAddress = lib.mkOption {
- type = lib.types.str;
- default = "[::1]";
+ extraConfig = lib.mkOption {
+ type = types.lines;
+ default = "";
+ example = ''
+ from os import environ
+
+ # https://python-social-auth.readthedocs.io/en/latest/backends/oidc.html
+ # From the environment:
+ SOCIAL_AUTH_OIDC_SECRET = environ.get("OIDC_CLIENT_SECRET")
+
+ # From a file:
+ with open("/run/keys/oidc-client-secret") as fd:
+ SOCIAL_AUTH_OIDC_SECRET = fd.read().strip()
+ '';
description = ''
- Address the server will listen on.
- Ignored if `unixSocket` is set.
+ Additional lines that are appended to {file}`configuration.py`.
+
+ This option supports native Python code and can be used for reading
+ secrets from files or the environment into configuration variables:
+
+ Possible options can be found in the [NetBox documentation] or, for
+ authentication purposes, in the [Python Social Auth] documentation.
+
+ [NetBox documentation]: https://netboxlabs.com/docs/netbox/configuration/
+ [Python Social Auth]: https://python-social-auth.readthedocs.io/en/latest/backends/index.html#
'';
};
- unixSocket = lib.mkOption {
- type = lib.types.nullOr lib.types.str;
- default = null;
+ bind = lib.mkOption {
+ type = types.str;
+ default = "unix:/run/netbox/netbox.sock";
+ example = "[::1]:8001";
description = ''
- Enable Unix Socket for the server to listen on.
- `listenAddress` and `port` will be ignored.
+ IP and port or Unix domain socket path to bind the HTTP socket to.
+
+ ::: {.tip}
+ This setting will be passed to gunicorn's [--bind] flag.
+ :::
+
+ [--bind]: https://gunicorn.org/reference/settings/#bind
'';
- example = "/run/netbox/netbox.sock";
};
- gunicornArgs = lib.mkOption {
- type = lib.types.listOf lib.types.str;
- default = [ ];
- description = "extra args for gunicorn when serving netbox";
- example = [
- "--workers"
- "9"
- ];
+ gunicorn.extraArgs = lib.mkOption {
+ type = types.attrsOf types.str;
+ default = { };
+ description = ''
+ Extra arguments passed the Gunicorn process that runs NetBox.
+
+ See for possible flags.
+ '';
+ example = lib.literalExpression ''
+ {
+ workers = 9;
+ ];
+ '';
+ };
+
+ nginx = {
+ enable = mkEnableOption "nginx and configure a virtual host";
+
+ hostname = mkOption {
+ type = types.str;
+ example = "netbox.example.com";
+ description = ''
+ The hostname for which an nginx virtual host should be created.
+
+ ::: {.tip}
+ Customize the virtual host through
+ `services.nginx.virtualHosts.''${config.services.netbox.nginx.hostname}`.
+ :::
+ '';
+ };
+ };
+
+ redis.createLocally = mkOption {
+ type = types.bool;
+ default = true;
+ description = ''
+ Whether to enable and set up a Redis database for NetBox locally.
+ '';
+ };
+
+ postgresql.createLocally = mkOption {
+ type = types.bool;
+ default = true;
+ description = ''
+ Whether to enable and set up PostgreSQL locally.
+
+ This will automatically created a database and a local user, that can
+ authenticate over Unix domain sockets with `SO_PEERCRED`.
+ '';
};
package = lib.mkOption {
- type = lib.types.package;
+ type = types.package;
default =
if lib.versionAtLeast config.system.stateVersion "26.05" then pkgs.netbox_4_5 else pkgs.netbox_4_4;
defaultText = lib.literalExpression ''
@@ -130,17 +445,8 @@ in
'';
};
- port = lib.mkOption {
- type = lib.types.port;
- default = 8001;
- description = ''
- Port the server will listen on.
- Ignored if `unixSocket` is set.
- '';
- };
-
plugins = lib.mkOption {
- type = with lib.types; functionTo (listOf package);
+ type = with types; functionTo (listOf package);
default = _: [ ];
defaultText = lib.literalExpression ''
python3Packages: with python3Packages; [];
@@ -151,7 +457,7 @@ in
};
dataDir = lib.mkOption {
- type = lib.types.str;
+ type = types.str;
default = "/var/lib/netbox";
description = ''
Storage path of netbox.
@@ -159,46 +465,71 @@ in
};
secretKeyFile = lib.mkOption {
- type = lib.types.path;
+ type =
+ with types;
+ nullOr (pathWith {
+ inStore = false;
+ });
+ default = null;
description = ''
- Path to a file containing the secret key.
+ Path to a file containing the [secret key].
+
+ The secret key is used for hashing passwords and signing HTTP cookies.
+ It can be rotated without data loss; however all existing user sessions
+ will be invalidated.
+
+ ::: {.note}
+ If unset, a random secret will be created automatically at
+ `/var/lib/netbox/secret.key`.
+ :::
+
+ [secret key]: https://netboxlabs.com/docs/netbox/configuration/required-parameters/#secret_key
'';
};
- apiTokenPeppersFile = lib.mkOption {
- type = with lib.types; nullOr path;
+ apiTokenPepperFiles = lib.mkOption {
+ type =
+ with types;
+ attrsOf (pathWith {
+ inStore = false;
+ });
+ default = {
+ "1" = "${cfg.dataDir}/pepper.1";
+ };
+ defaultText = lib.literalExpression ''
+ {
+ "1" = "''${config.services.netbox.dataDir}/pepper.1";
+ }
+ '';
+ example = {
+ "1" = "/run/keys/netbox-pepper-old";
+ "2" = "/run/keys/netbox-pepper-current";
+ };
description = ''
- Path to a file containing the API_TOKEN_PEPPER that will be configured for the pepper_id with the id 1.
- This is required for netbox >= 4.5. For generating this pepper,
- [consider using `$INSTALL_ROOT/netbox/generate_secret_key.py`](https://netboxlabs.com/docs/netbox/configuration/required-parameters/#api_token_peppers)
+ Mapping of cryptographic pepper IDs to files containing the pepper values.
+
+ Peppers provide an additional secret input in hashing operations. They
+ are required for v2 API tokens (NetBox 4.5+).
+
+ ::: {.note}
+ By default a random pepper will be created automatically at
+ `/var/lib/netbox/pepper.1` and configured with pepper ID 1.
+ :::
+
+ [cryptographic peppers]: https://netboxlabs.com/docs/netbox/configuration/required-parameters/#api_token_peppers
'';
};
- extraConfig = lib.mkOption {
- type = lib.types.lines;
- default = "";
+ ldapConfigFile = lib.mkOption {
+ type = with types; nullOr path;
+ default = null;
description = ''
- Additional lines of configuration appended to the `configuration.py`.
- See the [documentation](https://docs.netbox.dev/en/stable/configuration/) for more possible options.
- '';
- };
+ Path to the [LDAP configuration] file, also known as {file}`ldap_config.py`.
- enableLdap = lib.mkOption {
- type = lib.types.bool;
- default = false;
- description = ''
- Enable LDAP-Authentication for Netbox.
+ When set, will automatically load the `django-auth-ldap` plugin and
+ configure {option}`services.netbox.settings.REMOTE_AUTH_BACKEND`.
- This requires a configuration file being pass through `ldapConfigPath`.
- '';
- };
-
- ldapConfigPath = lib.mkOption {
- type = lib.types.path;
- default = "";
- description = ''
- Path to the Configuration-File for LDAP-Authentication, will be loaded as `ldap_config.py`.
- See the [documentation](https://netbox.readthedocs.io/en/stable/installation/6-ldap/#configuration) for possible options.
+ [LDAP configuration]: https://netbox.readthedocs.io/en/stable/installation/6-ldap/#configuration
'';
example = ''
import ldap
@@ -226,197 +557,206 @@ in
AUTH_LDAP_FIND_GROUP_PERMS = True
'';
};
- keycloakClientSecret = lib.mkOption {
- type = with lib.types; nullOr path;
- default = null;
- description = ''
- File that contains the keycloak client secret.
- '';
- };
};
- config = lib.mkIf cfg.enable {
- services.netbox = {
- plugins = lib.mkIf cfg.enableLdap (ps: [ ps.django-auth-ldap ]);
- settings = {
- STATIC_ROOT = staticDir;
- MEDIA_ROOT = "${cfg.dataDir}/media";
- REPORTS_ROOT = "${cfg.dataDir}/reports";
- SCRIPTS_ROOT = "${cfg.dataDir}/scripts";
-
- GIT_PATH = "${pkgs.gitMinimal}/bin/git";
-
- DATABASES = {
- "default" = {
- NAME = "netbox";
- USER = "netbox";
- HOST = "/run/postgresql";
- };
- };
-
- # Redis database settings. Redis is used for caching and for queuing
- # background tasks such as webhook events. A separate configuration
- # exists for each. Full connection details are required in both
- # sections, and it is strongly recommended to use two separate database
- # IDs.
- REDIS = {
- tasks = {
- URL = "unix://${config.services.redis.servers.netbox.unixSocket}?db=0";
- SSL = false;
- };
- caching = {
- URL = "unix://${config.services.redis.servers.netbox.unixSocket}?db=1";
- SSL = false;
- };
- };
-
- REMOTE_AUTH_BACKEND = lib.mkIf cfg.enableLdap "netbox.authentication.LDAPBackend";
-
- LOGGING = lib.mkDefault {
- version = 1;
-
- formatters.precise.format = "[%(levelname)s@%(name)s] %(message)s";
-
- handlers.console = {
- class = "logging.StreamHandler";
- formatter = "precise";
- };
-
- # log to console/systemd instead of file
- root = {
- level = "INFO";
- handlers = [ "console" ];
- };
- };
- };
-
- extraConfig = ''
- with open("${cfg.secretKeyFile}", "r") as file:
- SECRET_KEY = file.readline()
- ''
- + (lib.optionalString (cfg.apiTokenPeppersFile != null) ''
- with open("${cfg.apiTokenPeppersFile}", "r") as pepper_file:
- API_TOKEN_PEPPERS = {
- 1: pepper_file.readline(),
- };
- '')
- + (lib.optionalString (cfg.keycloakClientSecret != null) ''
- with open("${cfg.keycloakClientSecret}", "r") as file:
- SOCIAL_AUTH_KEYCLOAK_SECRET = file.readline()
- '');
- };
-
- services.redis.servers.netbox.enable = true;
-
- services.postgresql = {
- enable = true;
- ensureDatabases = [ "netbox" ];
- ensureUsers = [
- {
- name = "netbox";
- ensureDBOwnership = true;
- }
- ];
- };
-
- environment.systemPackages = [ netboxManageScript ];
-
- systemd.targets.netbox = {
- description = "Target for all NetBox services";
- wantedBy = [ "multi-user.target" ];
- wants = [ "network-online.target" ];
- after = [
- "network-online.target"
- "redis-netbox.service"
- ];
- };
-
- systemd.services =
- let
- defaultServiceConfig = {
- WorkingDirectory = "${cfg.dataDir}";
- User = "netbox";
- Group = "netbox";
- StateDirectory = "netbox";
- StateDirectoryMode = "0750";
- Restart = "on-failure";
- RestartSec = 30;
- };
- in
+ config = lib.mkIf cfg.enable (
+ lib.mkMerge [
{
- netbox = {
- description = "NetBox WSGI Service";
- documentation = [ "https://docs.netbox.dev/" ];
+ services.netbox.plugins = lib.mkIf enableLDAP (ps: [ ps.django-auth-ldap ]);
- wantedBy = [ "netbox.target" ];
+ services.redis.servers.netbox.enable = cfg.redis.createLocally;
- after = [ "network-online.target" ];
- wants = [ "network-online.target" ];
-
- environment.PYTHONPATH = pkg.pythonPath;
-
- preStart = ''
- # On the first run, or on upgrade / downgrade, run migrations and related.
- # This mostly correspond to upstream NetBox's 'upgrade.sh' script.
- versionFile="${cfg.dataDir}/version"
-
- if [[ -h "$versionFile" && "$(readlink -- "$versionFile")" == "${cfg.package}" ]]; then
- exit 0
- fi
-
- ${pkg}/bin/netbox migrate
- ${pkg}/bin/netbox trace_paths --no-input
- ${pkg}/bin/netbox collectstatic --clear --no-input
- ${pkg}/bin/netbox remove_stale_contenttypes --no-input
- ${pkg}/bin/netbox reindex --lazy
- ${pkg}/bin/netbox clearsessions
- ${lib.optionalString
- # The clearcache command was removed in 3.7.0:
- # https://github.com/netbox-community/netbox/issues/14458
- (lib.versionOlder cfg.package.version "3.7.0")
- "${pkg}/bin/netbox clearcache"
+ services.postgresql = lib.mkIf cfg.postgresql.createLocally {
+ enable = true;
+ ensureDatabases = [ "netbox" ];
+ ensureUsers = [
+ {
+ name = "netbox";
+ ensureDBOwnership = true;
}
-
- ln -sfn "${cfg.package}" "$versionFile"
- '';
-
- serviceConfig = defaultServiceConfig // {
- ExecStart = ''
- ${pkg.gunicorn}/bin/gunicorn netbox.wsgi \
- --bind ${
- if (cfg.unixSocket != null) then
- "unix:${cfg.unixSocket}"
- else
- "${cfg.listenAddress}:${toString cfg.port}"
- } \
- --pythonpath ${pkg}/opt/netbox/netbox \
- ${lib.concatStringsSep " " cfg.gunicornArgs}
- '';
- PrivateTmp = true;
- TimeoutStartSec = lib.mkDefault "10min";
- };
+ ];
};
- netbox-rq = {
- description = "NetBox Request Queue Worker";
- documentation = [ "https://docs.netbox.dev/" ];
+ environment.systemPackages = [ netboxManageScript ];
- wantedBy = [ "netbox.target" ];
- after = [ "netbox.service" ];
-
- environment.PYTHONPATH = pkg.pythonPath;
-
- serviceConfig = defaultServiceConfig // {
- ExecStart = ''
- ${pkg}/bin/netbox rqworker high default low
- '';
- PrivateTmp = true;
- };
+ systemd.slices.system-netbox = {
+ description = "Netbox DCIM/IPAM";
};
- netbox-housekeeping = {
- description = "NetBox housekeeping job";
- documentation = [ "https://docs.netbox.dev/" ];
+ systemd.targets.netbox = {
+ description = "Target for all NetBox services";
+ wantedBy = [ "multi-user.target" ];
+ wants = [ "network-online.target" ];
+ after = [
+ "network-online.target"
+ "redis-netbox.service"
+ ];
+ };
+
+ systemd.services =
+ let
+ defaultUnitConfig = {
+ documentation = [ "https://netboxlabs.com/docs/netbox/" ];
+ environment.PYTHONPATH = finalPackage.pythonPath;
+ };
+ defaultServiceConfig = {
+ WorkingDirectory = "${cfg.dataDir}";
+ User = "netbox";
+ Group = "netbox";
+ StateDirectory = "netbox";
+ StateDirectoryMode = "0750";
+ Restart = "on-failure";
+ RestartSec = 30;
+ Slice = "system-netbox.slice";
+ EnvironmentFile = cfg.environmentFiles;
+ SupplementaryGroups = lib.optionals cfg.redis.createLocally [
+ config.services.redis.servers.netbox.group
+ ];
+
+ AmbientCapabilities = [ "" ];
+ CapabilityBoundingSet = [ "" ];
+ DevicePolicy = "closed";
+ LockPersonality = true;
+ MemoryDenyWriteExecute = true;
+ NoNewPrivileges = true;
+ PrivateDevices = true;
+ PrivateTmp = true;
+ ProcSubset = "pid";
+ ProtectClock = true;
+ ProtectControlGroups = true;
+ ProtectHome = true;
+ ProtectHostname = true;
+ ProtectKernelLogs = true;
+ ProtectKernelModules = true;
+ ProtectKernelTunables = true;
+ ProtectProc = "invisible";
+ ProtectSystem = "strict";
+ RemoveIPC = true;
+ RestrictAddressFamilies = [
+ "AF_INET"
+ "AF_INET6"
+ "AF_UNIX"
+ ];
+ RestrictNamespaces = true;
+ RestrictRealtime = true;
+ RestrictSUIDSGID = true;
+ SystemCallArchitectures = "native";
+ SystemCallErrorNumber = "EPERM";
+ SystemCallFilter = [
+ "@system-service"
+ "~@privileged"
+ "~@resources"
+ "@chown"
+ ];
+ UMask = "0027";
+ };
+ in
+ {
+ netbox = defaultUnitConfig // {
+ description = "NetBox WSGI Service";
+
+ wantedBy = [ "netbox.target" ];
+
+ after = [ "network-online.target" ];
+ wants = [ "network-online.target" ];
+
+ preStart = ''
+ # Generate random default secrets, if the user didn't supply any.
+ ${optionalString (cfg.secretKeyFile == null) ''
+ if [ ! -e "${secretKeyFile}" ]; then
+ ${finalPackage}/opt/netbox/netbox/generate_secret_key.py > "${secretKeyFile}"
+ fi
+ ''}
+ ${optionalString
+ (any (path: path == "${cfg.dataDir}/pepper.1") (attrValues cfg.apiTokenPepperFiles))
+ ''
+ if [ ! -e "${cfg.dataDir}/pepper.1" ]; then
+ ${finalPackage}/opt/netbox/netbox/generate_secret_key.py > "${cfg.dataDir}/pepper.1"
+ fi
+ ''
+ }
+
+ # On the first run, or on upgrade / downgrade, run migrations and related.
+ # This mostly correspond to upstream NetBox's 'upgrade.sh' script.
+ versionFile="${cfg.dataDir}/version"
+
+ if [[ -h "$versionFile" && "$(readlink -- "$versionFile")" == "${cfg.package}" ]]; then
+ exit 0
+ fi
+
+ ${lib.getExe finalPackage} migrate
+ ${lib.getExe finalPackage} trace_paths --no-input
+ ${lib.getExe finalPackage} collectstatic --clear --no-input
+ ${lib.getExe finalPackage} remove_stale_contenttypes --no-input
+ ${lib.getExe finalPackage} reindex --lazy
+ ${lib.getExe finalPackage} clearsessions
+
+ ln -sfn "${cfg.package}" "$versionFile"
+ '';
+
+ serviceConfig = defaultServiceConfig // {
+ ExecStart = toString (
+ [
+ (lib.getExe finalPackage.gunicorn)
+ "netbox.wsgi"
+ ]
+ ++ lib.cli.toCommandLineGNU { } (
+ {
+ inherit (cfg) bind;
+ pythonpath = "${finalPackage}/opt/netbox/netbox";
+ }
+ // cfg.gunicorn.extraArgs
+ )
+ );
+ PrivateTmp = true;
+ RuntimeDirectory = "netbox";
+ RuntimeDirectoryMode = "0750";
+ TimeoutStartSec = lib.mkDefault "10min";
+ };
+ };
+
+ netbox-rq = defaultUnitConfig // {
+ description = "NetBox Request Queue Worker";
+
+ wantedBy = [ "netbox.target" ];
+ after = [ "netbox.service" ];
+
+ serviceConfig = defaultServiceConfig // {
+ ExecStart = toString [
+ (lib.getExe finalPackage)
+ "rqworker"
+ "high"
+ "default"
+ "low"
+ ];
+ PrivateTmp = true;
+ };
+ };
+
+ netbox-housekeeping = defaultUnitConfig // {
+ description = "NetBox housekeeping job";
+
+ wantedBy = [ "multi-user.target" ];
+
+ after = [
+ "network-online.target"
+ "netbox.service"
+ ];
+ wants = [ "network-online.target" ];
+
+ serviceConfig = defaultServiceConfig // {
+ Type = "oneshot";
+ ExecStart = toString [
+ (lib.getExe finalPackage)
+ "housekeeping"
+ ];
+ };
+ };
+ };
+
+ systemd.timers.netbox-housekeeping = {
+ description = "Run NetBox housekeeping job";
+ documentation = [ "https://netboxlabs.com/docs/netbox/" ];
wantedBy = [ "multi-user.target" ];
@@ -426,49 +766,35 @@ in
];
wants = [ "network-online.target" ];
- environment.PYTHONPATH = pkg.pythonPath;
-
- serviceConfig = defaultServiceConfig // {
- Type = "oneshot";
- ExecStart = ''
- ${pkg}/bin/netbox housekeeping
- '';
+ timerConfig = {
+ OnCalendar = "daily";
+ AccuracySec = "1h";
+ Persistent = true;
};
};
- };
- systemd.timers.netbox-housekeeping = {
- description = "Run NetBox housekeeping job";
- documentation = [ "https://docs.netbox.dev/" ];
-
- wantedBy = [ "multi-user.target" ];
-
- after = [
- "network-online.target"
- "netbox.service"
- ];
- wants = [ "network-online.target" ];
-
- timerConfig = {
- OnCalendar = "daily";
- AccuracySec = "1h";
- Persistent = true;
- };
- };
-
- users.users.netbox = {
- home = "${cfg.dataDir}";
- isSystemUser = true;
- group = "netbox";
- };
- users.groups.netbox = { };
- users.groups."${config.services.redis.servers.netbox.user}".members = [ "netbox" ];
-
- assertions = [
- {
- assertion = (lib.versionAtLeast cfg.package.version "4.5") -> (cfg.apiTokenPeppersFile != null);
- message = "NetBox 4.5 or newer require setting `services.netbox.apiTokenPeppersFile`";
+ users.users.netbox = {
+ home = "${cfg.dataDir}";
+ isSystemUser = true;
+ group = "netbox";
+ };
+ users.groups.netbox = { };
}
- ];
- };
+
+ (lib.mkIf cfg.nginx.enable {
+ # Access to STATIC_ROOT and the UNIX domain socket
+ systemd.services.nginx.serviceConfig.SupplementaryGroups = [ "netbox" ];
+
+ services.nginx = {
+ enable = true;
+ recommendedProxySettings = true;
+
+ virtualHosts.${cfg.nginx.hostname} = {
+ locations."/".proxyPass = "http://${toString config.services.netbox.bind}";
+ locations."/static/".alias = cfg.settings.STATIC_ROOT;
+ };
+ };
+ })
+ ]
+ );
}
diff --git a/nixos/modules/services/web-apps/nextcloud.md b/nixos/modules/services/web-apps/nextcloud.md
index 69d7053d1adc..ad2b66ec941c 100644
--- a/nixos/modules/services/web-apps/nextcloud.md
+++ b/nixos/modules/services/web-apps/nextcloud.md
@@ -5,7 +5,7 @@ self-hostable cloud platform. The server setup can be automated using
[services.nextcloud](#opt-services.nextcloud.enable). A
desktop client is packaged at `pkgs.nextcloud-client`.
-The current default by NixOS is `nextcloud33` which is also the latest
+The current default by NixOS is `nextcloud34` which is also the latest
major version available.
## Basic usage {#module-services-nextcloud-basic-usage}
diff --git a/nixos/modules/services/web-apps/nextcloud.nix b/nixos/modules/services/web-apps/nextcloud.nix
index a35f32f594ef..ab087cbce682 100644
--- a/nixos/modules/services/web-apps/nextcloud.nix
+++ b/nixos/modules/services/web-apps/nextcloud.nix
@@ -467,6 +467,7 @@ in
relatedPackages = [
"nextcloud32"
"nextcloud33"
+ "nextcloud34"
];
};
phpPackage = lib.mkPackageOption pkgs "php" {
@@ -1195,7 +1196,7 @@ in
{
warnings =
let
- latest = 33;
+ latest = 34;
upgradeWarning = major: nixos: ''
A legacy Nextcloud install (from before NixOS ${nixos}) may be installed.
@@ -1228,7 +1229,8 @@ in
++ (lib.optional (lib.versionOlder cfg.package.version "30") (upgradeWarning 29 "24.11"))
++ (lib.optional (lib.versionOlder cfg.package.version "31") (upgradeWarning 30 "25.05"))
++ (lib.optional (lib.versionOlder cfg.package.version "32") (upgradeWarning 31 "25.11"))
- ++ (lib.optional (lib.versionOlder cfg.package.version "33") (upgradeWarning 32 "26.05"));
+ ++ (lib.optional (lib.versionOlder cfg.package.version "33") (upgradeWarning 32 "26.05"))
+ ++ (lib.optional (lib.versionOlder cfg.package.version "34") (upgradeWarning 33 "26.11"));
services.nextcloud.package = lib.mkDefault (
if pkgs ? nextcloud then
@@ -1241,8 +1243,10 @@ in
pkgs.nextcloud31
else if lib.versionOlder stateVersion "26.05" then
pkgs.nextcloud32
- else
+ else if lib.versionOlder stateVersion "26.11" then
pkgs.nextcloud33
+ else
+ pkgs.nextcloud34
);
services.nextcloud.phpOptions = lib.mkMerge [
diff --git a/nixos/modules/services/web-apps/ocis.nix b/nixos/modules/services/web-apps/ocis.nix
index 98cc7d43d200..004010abc157 100644
--- a/nixos/modules/services/web-apps/ocis.nix
+++ b/nixos/modules/services/web-apps/ocis.nix
@@ -202,7 +202,6 @@ in
meta.maintainers = with lib.maintainers; [
bhankas
- danth
ramblurr
];
}
diff --git a/nixos/modules/services/web-apps/outline.nix b/nixos/modules/services/web-apps/outline.nix
index e1bfa8ab47d3..bb0ab5f2751c 100644
--- a/nixos/modules/services/web-apps/outline.nix
+++ b/nixos/modules/services/web-apps/outline.nix
@@ -836,13 +836,17 @@ in
${
if (cfg.databaseUrl == "local") then
''
- DATABASE_URL=${lib.escapeShellArg localPostgresqlUrl}
+ if [ -z "''${DATABASE_URL:-}" ]; then
+ DATABASE_URL=${lib.escapeShellArg localPostgresqlUrl}
+ fi
export DATABASE_URL
- export PGSSLMODE=disable
+ export PGSSLMODE="''${PGSSLMODE:-disable}"
''
else
''
- DATABASE_URL=${lib.escapeShellArg cfg.databaseUrl}
+ if [ -z "''${DATABASE_URL:-}" ]; then
+ DATABASE_URL=${lib.escapeShellArg cfg.databaseUrl}
+ fi
export DATABASE_URL
''
}
diff --git a/nixos/modules/services/web-apps/papra.nix b/nixos/modules/services/web-apps/papra.nix
index 8ee55736f1eb..a9a4d2b66ccb 100644
--- a/nixos/modules/services/web-apps/papra.nix
+++ b/nixos/modules/services/web-apps/papra.nix
@@ -80,8 +80,8 @@ in
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Restart = "on-failure";
- ExecStartPre = "${lib.getExe pkgs.tsx} ${cfg.package}/lib/src/scripts/migrate-up.script.ts";
- ExecStart = "${cfg.package}/bin/papra";
+ ExecStartPre = "${lib.getExe' cfg.package "papra-migrate-up"}";
+ ExecStart = "${lib.getExe' cfg.package "papra"}";
User = cfg.user;
Group = cfg.group;
StateDirectory = "papra";
diff --git a/nixos/modules/services/web-apps/part-db.nix b/nixos/modules/services/web-apps/part-db.nix
index b4b128dfa03d..006481e6dda7 100644
--- a/nixos/modules/services/web-apps/part-db.nix
+++ b/nixos/modules/services/web-apps/part-db.nix
@@ -8,6 +8,11 @@ let
cfg = config.services.part-db;
pkg = cfg.package;
+ envFile = pkgs.writeText "part-db-env" (
+ lib.concatStringsSep "\n" (lib.mapAttrsToList (key: value: "${key}=\"${value}\"") cfg.settings)
+ + "\n"
+ );
+
inherit (lib)
mkEnableOption
mkPackageOption
@@ -62,6 +67,17 @@ in
'';
};
+ environmentFile = mkOption {
+ type = types.nullOr types.path;
+ default = null;
+ example = "/run/secrets/part-db.env";
+ description = ''
+ Path to a file containing extra Part-DB environment variables in dotenv
+ format. This can be used for secrets such as `APP_SECRET` without
+ putting them in the Nix store.
+ '';
+ };
+
poolConfig = lib.mkOption {
type = lib.types.attrsOf (
lib.types.oneOf [
@@ -176,18 +192,34 @@ in
root = "${pkg}/public";
locations = {
"/" = {
- tryFiles = "$uri $uri/ /index.php?$query_string";
+ tryFiles = "$uri $uri/ /index.php$is_args$args";
index = "index.php";
extraConfig = ''
+ add_header Content-Security-Policy "default-src 'self'; script-src 'none'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; sandbox;" always;
+ add_header X-Content-Type-Options "nosniff" always;
sendfile off;
'';
};
- "~ \\.php$" = {
+ "= /index.php" = {
extraConfig = ''
- include ${config.services.nginx.package}/conf/fastcgi_params ;
- fastcgi_param SCRIPT_FILENAME $request_filename;
- fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
+ include ${config.services.nginx.package}/conf/fastcgi_params;
+ fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
+ fastcgi_param DOCUMENT_ROOT $realpath_root;
+ fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
fastcgi_pass unix:${config.services.phpfpm.pools.part-db.socket};
+ internal;
+ '';
+ };
+ "~ \\.php$" = {
+ return = "404";
+ };
+ "~* ^/media/.*\\.(php[3-8]?|phar|phtml|pht|phps)$" = {
+ return = "403";
+ };
+ "~* \\.svg$" = {
+ extraConfig = ''
+ add_header Content-Security-Policy "default-src 'self'; script-src 'none'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; frame-ancestors 'none'; sandbox;" always;
+ add_header X-Content-Type-Options "nosniff" always;
'';
};
};
@@ -197,10 +229,32 @@ in
systemd = {
services = {
+ part-db-setup = {
+ before = [ "part-db-migrate.service" ];
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ Type = "oneshot";
+ RemainAfterExit = true;
+ };
+ restartTriggers = [ envFile ];
+ script = ''
+ install -Dm0600 -o part-db -g part-db ${envFile} /var/lib/part-db/env.local
+ ''
+ + lib.optionalString (cfg.environmentFile != null) ''
+ cat ${lib.escapeShellArg cfg.environmentFile} >> /var/lib/part-db/env.local
+ '';
+ };
+
part-db-migrate = {
before = [ "phpfpm-part-db.service" ];
- after = [ "postgresql.target" ];
- requires = [ "postgresql.target" ];
+ after = [
+ "postgresql.target"
+ "part-db-setup.service"
+ ];
+ requires = [
+ "postgresql.target"
+ "part-db-setup.service"
+ ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "oneshot";
@@ -235,10 +289,30 @@ in
user = "part-db";
group = "part-db";
};
- "/var/lib/part-db/env.local"."L+" = {
- argument = "${pkgs.writeText "part-db-env" (
- lib.concatStringsSep "\n" (lib.mapAttrsToList (key: value: "${key}=\"${value}\"") cfg.settings)
- )}";
+ "/var/lib/part-db/".d = {
+ mode = "0755";
+ user = "part-db";
+ group = "part-db";
+ };
+ "/var/lib/part-db/public/".d = {
+ mode = "0755";
+ user = "part-db";
+ group = "part-db";
+ };
+ "/var/lib/part-db/public/media/".d = {
+ mode = "0755";
+ user = "part-db";
+ group = "part-db";
+ };
+ "/var/lib/part-db/uploads/".d = {
+ mode = "0750";
+ user = "part-db";
+ group = "part-db";
+ };
+ "/var/lib/part-db/share/".d = {
+ mode = "0750";
+ user = "part-db";
+ group = "part-db";
};
"/var/log/part-db/".d = {
mode = "0750";
diff --git a/nixos/modules/services/web-apps/plantuml-server.nix b/nixos/modules/services/web-apps/plantuml-server.nix
index 184787d94c0e..59e8bc94c541 100644
--- a/nixos/modules/services/web-apps/plantuml-server.nix
+++ b/nixos/modules/services/web-apps/plantuml-server.nix
@@ -37,15 +37,7 @@ in
packages = {
jdk = mkPackageOption pkgs "jdk" { };
jetty = mkPackageOption pkgs "jetty" {
- default = [ "jetty_11" ];
- extraDescription = ''
- At the time of writing (v1.2023.12), PlantUML Server does not support
- Jetty versions higher than 12.x.
-
- Jetty 12.x has introduced major breaking changes, see
- and
-
- '';
+ default = [ "jetty_12" ];
};
};
@@ -115,11 +107,11 @@ in
script = ''
${cfg.packages.jdk}/bin/java \
-jar ${cfg.packages.jetty}/start.jar \
- --module=deploy,http,jsp \
- jetty.home=${cfg.packages.jetty} \
- jetty.base=${cfg.package} \
- jetty.http.host=${cfg.listenHost} \
- jetty.http.port=${toString cfg.listenPort}
+ --module=http,ee11-deploy,ee11-jsp \
+ -Djetty.home=${cfg.packages.jetty} \
+ -Djetty.base=${cfg.package} \
+ -Djetty.http.host=${cfg.listenHost} \
+ -Djetty.http.port=${toString cfg.listenPort}
'';
serviceConfig = {
diff --git a/nixos/modules/services/web-apps/plausible.md b/nixos/modules/services/web-apps/plausible.md
index 90e71c0d6d8d..f6cebac1e62a 100644
--- a/nixos/modules/services/web-apps/plausible.md
+++ b/nixos/modules/services/web-apps/plausible.md
@@ -20,6 +20,19 @@ After that, `plausible` can be deployed like this:
# secretKeybaseFile is a path to the file which contains the secret generated
# with openssl as described above.
secretKeybaseFile = "/run/secrets/plausible-secret-key-base";
+ # With an admin user seeded (below), registration can be locked down
+ # so only invited users (or nobody) can create further accounts.
+ disableRegistration = "invite_only";
+ };
+ # If you do not declare `adminUser`, Plausible shows an unauthenticated
+ # "first launch" setup wizard where anybody reaching the instance can create
+ # the first admin account. That may be convenient, but is also a security
+ # risk if somebody else uses it before you do.
+ adminUser = {
+ email = "admin@analytics.example.org";
+ # passwordHashFile is a path to a file containing the bcrypt hash of the
+ # admin user's password, e.g. generated with `mkpasswd -m bcrypt`.
+ passwordHashFile = "/run/secrets/plausible-admin-password-hash";
};
};
}
diff --git a/nixos/modules/services/web-apps/plausible.nix b/nixos/modules/services/web-apps/plausible.nix
index 23510534a24d..d72c28113130 100644
--- a/nixos/modules/services/web-apps/plausible.nix
+++ b/nixos/modules/services/web-apps/plausible.nix
@@ -10,6 +10,68 @@ with lib;
let
cfg = config.services.plausible;
+ seedAdminEnabled = cfg.adminUser.email != null;
+
+ # Note [plausible-seed-admin-no-wizard-race]:
+ # Plausible Community Edition shows an unauthenticated "first launch" setup
+ # wizard to create the admin user whenever no user exists in the database
+ # (`Plausible.Release.should_be_first_launch?` is
+ # `not Repo.exists?(Plausible.Auth.User)`, and `PlausibleWeb.FirstLaunchPlug`
+ # 302-redirects every page to `/register` while that is true). On an instance
+ # reachable over the network this lets any stranger create the first admin
+ # account.
+ #
+ # `DISABLE_REGISTRATION` does NOT gate this wizard (it must not, otherwise the
+ # first user could never be created), so the only robust fix is to ensure a
+ # user already exists before the web server accepts any connection.
+ #
+ # We therefore seed the admin user inside the service's main `script`, after
+ # the DB migrations and strictly before `exec plausible start`. This
+ # guarantees there is no time window in which the wizard is reachable. The
+ # seed is idempotent (it only inserts when no user exists), so it is safe to
+ # run on every (re)start.
+ #
+ # We insert the precomputed bcrypt `password_hash` directly rather than going
+ # through `Plausible.Auth.User.new/1`, so the plaintext password never has to
+ # be stored on disk. `email_verified` is set to `true` because self-hosted
+ # Plausible does not require email verification by default.
+ #
+ # This Elixir script may need updating as newer Plausible versions get
+ # released (e.g. if the `Plausible.Auth.User` schema changes). The NixOS VM
+ # test `nixos/tests/plausible.nix` validates that the wizard is unreachable
+ # once an admin user is configured.
+ seedAdminScript = pkgs.writeText "plausible-seed-admin.exs" ''
+ # This script runs via `plausible eval`, which evaluates it WITHOUT
+ # starting the `:plausible` application or its Ecto repos. We therefore
+ # start them ourselves before querying/inserting, mirroring the private
+ # `Plausible.Release.prepare/0` (the same startup the release uses for its
+ # `migrate`/`seed` commands): load the app, start the DB-related apps and
+ # start each Ecto repo. Otherwise `Repo.exists?/1` raises
+ # `could not lookup Ecto repo Plausible.Repo because it was not started`.
+ :ok = Application.ensure_loaded(:plausible)
+ Enum.each([:ssl, :postgrex, :ch, :ecto], &Application.ensure_all_started/1)
+ Enum.each(Application.fetch_env!(:plausible, :ecto_repos), & &1.start_link(pool_size: 2))
+
+ alias Plausible.Repo
+ alias Plausible.Auth.User
+
+ unless Repo.exists?(User) do
+ email = System.fetch_env!("SEED_ADMIN_USER_EMAIL")
+ name = System.fetch_env!("SEED_ADMIN_USER_NAME")
+ password_hash = System.fetch_env!("SEED_ADMIN_USER_PASSWORD_HASH")
+
+ %User{
+ email: email,
+ name: name,
+ password_hash: password_hash,
+ email_verified: true
+ }
+ |> Repo.insert!()
+
+ IO.puts("plausible: seeded admin user #{email}")
+ end
+ '';
+
in
{
options.services.plausible = {
@@ -51,6 +113,57 @@ in
};
};
+ adminUser = {
+ email = mkOption {
+ default = null;
+ type = types.nullOr types.str;
+ description = ''
+ Email address of an admin user to seed into the database before the
+ Plausible web server starts accepting connections.
+
+ Plausible Community Edition shows an unauthenticated "first launch"
+ setup wizard whenever no user exists in the database, which redirects
+ every page to `/register` and lets anyone reaching the instance over
+ the network create the first admin account. Setting this option (and
+ {option}`services.plausible.adminUser.passwordHashFile`) seeds an
+ admin user before the port is opened, so the wizard is never reachable
+ by strangers.
+
+ When `null`, no user is seeded and Plausible's setup wizard is used as
+ usual.
+
+ Seeding is idempotent: if any user already exists, no user is created.
+ '';
+ example = "admin@example.org";
+ };
+
+ name = mkOption {
+ default = "Admin";
+ type = types.str;
+ description = ''
+ Display name of the seeded admin user (see
+ {option}`services.plausible.adminUser.email`).
+ '';
+ };
+
+ passwordHashFile = mkOption {
+ default = null;
+ type = with types; nullOr (either str path);
+ description = ''
+ Path to a file containing the bcrypt hash of the seeded admin user's
+ password (see {option}`services.plausible.adminUser.email`).
+
+ Using a hash file (rather than the plaintext password) means the
+ plaintext never has to be stored on disk or in the Nix store. Generate
+ a hash e.g. with `mkpasswd -m bcrypt` (the resulting `$2b$...` string).
+
+ This file is read via systemd's `LoadCredential`, so it does not enter
+ the Nix store.
+ '';
+ example = "/run/secrets/plausible-admin-password-hash";
+ };
+ };
+
server = {
disableRegistration = mkOption {
default = true;
@@ -150,33 +263,34 @@ in
(mkRemovedOptionModule [ "services" "plausible" "releaseCookiePath" ]
"Plausible uses no distributed Erlang features, so this option is no longer necessary and was removed"
)
- (mkRemovedOptionModule [
- "services"
- "plausible"
- "adminUser"
- "name"
- ] "Admin user is now created using first start wizard")
- (mkRemovedOptionModule [
- "services"
- "plausible"
- "adminUser"
- "email"
- ] "Admin user is now created using first start wizard")
- (mkRemovedOptionModule [
- "services"
- "plausible"
- "adminUser"
- "passwordFile"
- ] "Admin user is now created using first start wizard")
- (mkRemovedOptionModule [
- "services"
- "plausible"
- "adminUser"
- "activate"
- ] "Admin user is now created using first start wizard")
+ (mkRemovedOptionModule
+ [
+ "services"
+ "plausible"
+ "adminUser"
+ "passwordFile"
+ ]
+ "Use services.plausible.adminUser.passwordHashFile instead, which keeps the plaintext password out of the Nix store"
+ )
+ (mkRemovedOptionModule
+ [
+ "services"
+ "plausible"
+ "adminUser"
+ "activate"
+ ]
+ "The seeded admin user is always created as email-verified; self-hosted Plausible does not require email verification"
+ )
];
config = mkIf cfg.enable {
+ assertions = [
+ {
+ assertion = seedAdminEnabled -> (cfg.adminUser.passwordHashFile != null);
+ message = "services.plausible.adminUser.passwordHashFile must be set when services.plausible.adminUser.email is set.";
+ }
+ ];
+
services.postgresql = mkIf cfg.database.postgres.setup {
enable = true;
};
@@ -285,6 +399,18 @@ in
''}
${cfg.package}/migrate.sh
+
+ ${lib.optionalString seedAdminEnabled ''
+ # Seed the admin user before the web server starts, so the
+ # unauthenticated "first launch" setup wizard is never reachable;
+ # see note [plausible-seed-admin-no-wizard-race].
+ export SEED_ADMIN_USER_EMAIL=${lib.escapeShellArg cfg.adminUser.email}
+ export SEED_ADMIN_USER_NAME=${lib.escapeShellArg cfg.adminUser.name}
+ SEED_ADMIN_USER_PASSWORD_HASH="$(< "$CREDENTIALS_DIRECTORY/ADMIN_USER_PASSWORD_HASH" )"
+ export SEED_ADMIN_USER_PASSWORD_HASH
+ plausible eval "$(< ${seedAdminScript} )"
+ ''}
+
export IP_GEOLOCATION_DB=${pkgs.dbip-country-lite}/share/dbip/dbip-country-lite.mmdb
exec plausible start
@@ -300,6 +426,9 @@ in
]
++ lib.optionals (cfg.mail.smtp.passwordFile != null) [
"SMTP_USER_PWD:${cfg.mail.smtp.passwordFile}"
+ ]
+ ++ lib.optionals seedAdminEnabled [
+ "ADMIN_USER_PASSWORD_HASH:${cfg.adminUser.passwordHashFile}"
];
};
};
@@ -330,9 +459,6 @@ in
];
};
- meta.maintainers = with lib.maintainers; [
- e1mo
- xanderio
- ];
+ meta.maintainers = [ ];
meta.doc = ./plausible.md;
}
diff --git a/nixos/modules/services/web-apps/pretalx.nix b/nixos/modules/services/web-apps/pretalx.nix
index 37527a4e1688..53990f88bea5 100644
--- a/nixos/modules/services/web-apps/pretalx.nix
+++ b/nixos/modules/services/web-apps/pretalx.nix
@@ -21,17 +21,47 @@ let
(toPythonModule finalPackage)
gunicorn
]
- ++ finalPackage.optional-dependencies.redis
- ++ lib.optionals cfg.celery.enable [ celery ]
++ lib.optionals (
cfg.settings.database.backend == "postgresql"
) finalPackage.optional-dependencies.postgres;
};
+
+ pretalxManageWrapper = pkgs.writeShellApplication {
+ name = "pretalx-manage";
+ runtimeInputs = with pkgs; [
+ util-linux
+ ];
+ text = ''
+ cd ${cfg.settings.filesystem.data}
+ set -a
+ ${lib.concatMapStringsSep "\n" (file: ''
+ . ${lib.escapeShellArg file}
+ '') cfg.environmentFiles}
+ set +a
+ export PRETALX_CONFIG_FILE=${configFile}
+ exec runuser ${
+ lib.cli.toCommandLineShellGNU { } {
+ inherit (cfg) user;
+ preserve-environment = true;
+ }
+ } -- ${lib.getExe' pythonEnv "pretalx-manage"} "$@"
+ '';
+ excludeShellChecks = [
+ # Not following: /run/agenix/pretalx-env was not specified as input
+ "SC1091"
+ ];
+ };
in
{
meta.maintainers = pkgs.pretalx.meta.maintainers;
+ imports = [
+ (lib.mkRemovedOptionModule [ "services" "pretalx" "celery" "enable" ] ''
+ Celery is now always required.
+ '')
+ ];
+
options.services.pretalx = {
enable = lib.mkEnableOption "pretalx";
@@ -110,15 +140,6 @@ in
};
celery = {
- enable = lib.mkOption {
- type = lib.types.bool;
- default = true;
- example = false;
- description = ''
- Whether to set up celery as an asynchronous task runner.
- '';
- };
-
extraArgs = lib.mkOption {
type = with lib.types; listOf str;
default = [ ];
@@ -255,10 +276,8 @@ in
celery = {
backend = lib.mkOption {
type = with lib.types; nullOr str;
- default = lib.optionalString cfg.celery.enable "redis+socket://${config.services.redis.servers.pretalx.unixSocket}?virtual_host=1";
- defaultText = lib.literalExpression ''
- optionalString config.services.pretalx.celery.enable "redis+socket://''${config.services.redis.servers.pretalx.unixSocket}?virtual_host=1"
- '';
+ default = "redis+socket://${config.services.redis.servers.pretalx.unixSocket}?virtual_host=1";
+ defaultText = lib.literalExpression "redis+socket://\${config.services.redis.servers.pretalx.unixSocket}?virtual_host=1";
description = ''
URI to the celery backend used for the asynchronous job queue.
'';
@@ -266,10 +285,8 @@ in
broker = lib.mkOption {
type = with lib.types; nullOr str;
- default = lib.optionalString cfg.celery.enable "redis+socket://${config.services.redis.servers.pretalx.unixSocket}?virtual_host=2";
- defaultText = lib.literalExpression ''
- optionalString config.services.pretalx.celery.enable "redis+socket://''${config.services.redis.servers.pretalx.unixSocket}?virtual_host=2"
- '';
+ default = "redis+socket://${config.services.redis.servers.pretalx.unixSocket}?virtual_host=2";
+ defaultText = lib.literalExpression "redis+socket://\${config.services.redis.servers.pretalx.unixSocket}?virtual_host=2";
description = ''
URI to the celery broker used for the asynchronous job queue.
'';
@@ -325,18 +342,7 @@ in
# https://docs.pretalx.org/administrator/installation/
environment.systemPackages = [
- (pkgs.writeScriptBin "pretalx-manage" ''
- cd ${cfg.settings.filesystem.data}
- sudo=exec
- if [[ "$USER" != ${cfg.user} ]]; then
- sudo='exec /run/wrappers/bin/sudo -u ${cfg.user} --preserve-env=PRETALX_CONFIG_FILE'
- fi
- set -a
- ${lib.concatMapStringsSep "\n" (file: ". ${lib.escapeShellArg file}") cfg.environmentFiles}
- set +a
- export PRETALX_CONFIG_FILE=${configFile}
- $sudo ${lib.getExe' pythonEnv "pretalx-manage"} "$@"
- '')
+ pretalxManageWrapper
];
services.logrotate.settings.pretalx = {
@@ -370,6 +376,15 @@ in
access_log off;
more_set_headers 'Content-Disposition: attachment; filename="$1"';
expires 7d;
+ types {
+ # prevent xss through file uploads
+ text/plain html;
+ text/plain htm;
+ text/plain svg;
+ text/plain svgz;
+ text/plain js;
+ text/plain mjs;
+ }
'';
};
"/static/" = {
@@ -508,23 +523,21 @@ in
};
};
- pretalx-worker = lib.mkIf cfg.celery.enable (
- lib.recursiveUpdate commonUnitConfig {
- description = "pretalx asynchronous job runner";
- after = [
- "network.target"
- "redis-pretalx.service"
- ]
- ++ lib.optionals (cfg.settings.database.backend == "postgresql") [
- "postgresql.target"
- ]
- ++ lib.optionals (cfg.settings.database.backend == "mysql") [
- "mysql.service"
- ];
- wantedBy = [ "multi-user.target" ];
- serviceConfig.ExecStart = "${lib.getExe' pythonEnv "celery"} -A pretalx.celery_app worker ${cfg.celery.extraArgs}";
- }
- );
+ pretalx-worker = lib.recursiveUpdate commonUnitConfig {
+ description = "pretalx asynchronous job runner";
+ after = [
+ "network.target"
+ "redis-pretalx.service"
+ ]
+ ++ lib.optionals (cfg.settings.database.backend == "postgresql") [
+ "postgresql.target"
+ ]
+ ++ lib.optionals (cfg.settings.database.backend == "mysql") [
+ "mysql.service"
+ ];
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig.ExecStart = "${lib.getExe' pythonEnv "celery"} -A pretalx.celery_app worker ${cfg.celery.extraArgs}";
+ };
nginx.serviceConfig.SupplementaryGroups = lib.mkIf cfg.nginx.enable [ "pretalx" ];
};
diff --git a/nixos/modules/services/web-apps/pretix.nix b/nixos/modules/services/web-apps/pretix.nix
index c62ae9bcc49e..9649f98349f8 100644
--- a/nixos/modules/services/web-apps/pretix.nix
+++ b/nixos/modules/services/web-apps/pretix.nix
@@ -24,7 +24,6 @@ let
mkOption
mkPackageOption
optionals
- optionalString
recursiveUpdate
types
;
@@ -60,6 +59,24 @@ let
};
withRedis = cfg.settings.redis.location != null;
+
+ pretixManageWrapper = pkgs.writeShellApplication {
+ name = "pretix-manage";
+ runtimeInputs = with pkgs; [
+ util-linux
+ ];
+ text = ''
+ cd ${cfg.settings.pretix.datadir}
+ export PRETIX_CONFIG_FILE=${configFile}
+ exec runuser ${
+ lib.cli.toCommandLineShellGNU { } {
+ inherit (cfg) user;
+ supp-group = if withRedis then config.services.redis.servers.pretix.group else null;
+ whitelist-environment = "PRETIX_CONFIG_FILE";
+ }
+ } -- ${getExe' pythonEnv "pretix-manage"} "$@"
+ '';
+ };
in
{
meta = {
@@ -396,15 +413,7 @@ in
# https://docs.pretix.eu/en/latest/admin/installation/index.html
environment.systemPackages = [
- (pkgs.writeScriptBin "pretix-manage" ''
- cd ${cfg.settings.pretix.datadir}
- sudo=exec
- if [[ "$USER" != ${cfg.user} ]]; then
- sudo='exec /run/wrappers/bin/sudo -u ${cfg.user} ${optionalString withRedis "-g redis-pretix"} --preserve-env=PRETIX_CONFIG_FILE'
- fi
- export PRETIX_CONFIG_FILE=${configFile}
- $sudo ${getExe' pythonEnv "pretix-manage"} "$@"
- '')
+ pretixManageWrapper
];
services.logrotate.settings.pretix = {
diff --git a/nixos/modules/services/web-apps/rustical.nix b/nixos/modules/services/web-apps/rustical.nix
index a92daf8c07b4..56661c9c24d6 100644
--- a/nixos/modules/services/web-apps/rustical.nix
+++ b/nixos/modules/services/web-apps/rustical.nix
@@ -149,6 +149,8 @@ in
EnvironmentFile = cfg.environmentFiles;
Restart = "on-failure";
StateDirectory = "rustical";
+ RuntimeDirectory = "rustical";
+ RuntimeDirectoryMode = "0750";
CapabilityBoundingSet = "";
DevicePolicy = "closed";
@@ -172,6 +174,7 @@ in
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
+ "AF_UNIX"
];
RestrictNamespaces = true;
RestrictRealtime = true;
@@ -181,7 +184,7 @@ in
"~@privileged @resources"
];
SystemCallErrorNumber = "EPERM";
- UMask = "0077";
+ UMask = "0007";
};
};
};
diff --git a/nixos/modules/services/web-apps/rutorrent.nix b/nixos/modules/services/web-apps/rutorrent.nix
index 82684f884980..c27f22324d3c 100644
--- a/nixos/modules/services/web-apps/rutorrent.nix
+++ b/nixos/modules/services/web-apps/rutorrent.nix
@@ -75,8 +75,8 @@ in
default = [ "httprpc" ];
example = literalExpression ''[ "httprpc" "data" "diskspace" "edit" "erasedata" "theme" "trafic" ]'';
description = ''
- List of plugins to enable. See the list of available plugins. Note: the unpack plugin needs the nonfree unrar package.
- You need to either enable one of the rpc or httprpc plugin or enable the option.
+ List of plugins to enable. See the list of [available plugins](https://github.com/Novik/ruTorrent/wiki/Plugins#currently-there-are-the-following-plugins). Note: the `unpack` plugin needs the nonfree `unrar` package.
+ You need to either enable one of the `rpc` or `httprpc` plugin or enable the {option}`services.rutorrent.nginx.exposeInsecureRPC2mount` option.
'';
};
@@ -97,7 +97,7 @@ in
"pm.max_requests" = 500;
};
description = ''
- Options for ruTorrent's PHP pool. See the documentation on php-fpm.conf for details on configuration directives.
+ Options for ruTorrent's PHP pool. See the documentation on `php-fpm.conf` for details on configuration directives.
'';
};
@@ -107,8 +107,8 @@ in
default = false;
description = ''
Whether to enable nginx virtual host management.
- Further nginx configuration can be done by adapting services.nginx.virtualHosts.<name>.
- See for further information.
+ Further nginx configuration can be done by adapting `services.nginx.virtualHosts.`.
+ See {option}`services.nginx.virtualHosts` for further information.
'';
};
@@ -116,8 +116,8 @@ in
type = types.bool;
default = false;
description = ''
- If you do not enable one of the rpc or httprpc plugins you need to expose an RPC mount through scgi using this option.
- Warning: This allow to run arbitrary commands, as the rtorrent user, so make sure to use authentification. The simplest way would be to use the services.nginx.virtualHosts.<name>.basicAuth option.
+ If you do not enable one of the `rpc` or `httprpc` plugins you need to expose an RPC mount through scgi using this option.
+ Warning: This allow to run arbitrary commands, as the rtorrent user, so make sure to use authentication. The simplest way would be to use the {option}`services.nginx.virtualHosts..basicAuth` option.
'';
};
};
diff --git a/nixos/modules/services/web-apps/strichliste.nix b/nixos/modules/services/web-apps/strichliste.nix
index e32a2a169169..8aa78f62bcd0 100644
--- a/nixos/modules/services/web-apps/strichliste.nix
+++ b/nixos/modules/services/web-apps/strichliste.nix
@@ -128,21 +128,23 @@ in
};
account = {
- lower = mkOption {
- type = types.int;
- default = -200000;
- example = 0;
- description = ''
- The credit limit for user accounts.
- '';
- };
+ boundary = {
+ lower = mkOption {
+ type = types.int;
+ default = -200000;
+ example = 0;
+ description = ''
+ The credit limit for user accounts.
+ '';
+ };
- upper = mkOption {
- type = types.ints.positive;
- default = 200000;
- description = ''
- The maximum balance on a user account.
- '';
+ upper = mkOption {
+ type = types.ints.positive;
+ default = 200000;
+ description = ''
+ The maximum balance on a user account.
+ '';
+ };
};
};
@@ -256,7 +258,7 @@ in
};
};
- transaction = {
+ transactions = {
enabled = mkOption {
type = types.bool;
default = true;
@@ -476,20 +478,15 @@ in
inherit (cfg) environment;
serviceConfig = {
Type = "oneshot";
+ RemainAfterExit = true;
User = "strichliste";
Group = "strichliste";
EnvironmentFile = cfg.environmentFiles;
- ExecStart = map toString [
- [
- (lib.getExe cfg.packages.backend)
- "cache:clear"
- ]
- [
- (lib.getExe cfg.packages.backend)
- "doctrine:migrations:migrate"
- "--allow-no-migration"
- "--no-interaction"
- ]
+ ExecStart = toString [
+ (lib.getExe cfg.packages.backend)
+ "doctrine:migrations:migrate"
+ "--allow-no-migration"
+ "--no-interaction"
];
};
};
@@ -497,6 +494,11 @@ in
systemd.services.phpfpm-strichliste = {
inherit (cfg) environment;
serviceConfig.EnvironmentFile = cfg.environmentFiles;
+ restartTriggers = [ settingsFile ];
+ preStart = toString [
+ (lib.getExe cfg.packages.backend)
+ "cache:clear"
+ ];
};
services.phpfpm.pools.strichliste = {
diff --git a/nixos/modules/services/web-apps/stump.nix b/nixos/modules/services/web-apps/stump.nix
new file mode 100644
index 000000000000..8dbf1dfcb7da
--- /dev/null
+++ b/nixos/modules/services/web-apps/stump.nix
@@ -0,0 +1,172 @@
+{
+ lib,
+ config,
+ pkgs,
+ ...
+}:
+
+let
+ cfg = config.services.stump;
+
+ inherit (lib)
+ types
+ mkIf
+ mkOption
+ mkEnableOption
+ ;
+
+ secret = types.nullOr (
+ types.str
+ // {
+ # We don't want users to be able to pass a path literal here but
+ # it should look like a path.
+ check = it: lib.isString it && lib.types.path.check it;
+ }
+ );
+in
+{
+ options.services.stump = {
+ enable = mkEnableOption "Stump";
+ package = lib.mkPackageOption pkgs "stump" { };
+
+ configLocation = mkOption {
+ type = types.path;
+ default = "/var/lib/stump";
+ description = "Directory used to store the database and configuration files. If it is not the default, the directory has to be created manually such that the stump user is able to read and write to it.";
+ };
+
+ environment = mkOption {
+ type = types.attrsOf types.str;
+ default = { };
+ example = {
+ STUMP_VERBOSITY = "2";
+ };
+ description = ''
+ Extra configuration environment variables. Refer to the [documentation](https://www.stumpapp.dev/docs/guides/configuration/server-config) for options.
+ '';
+ };
+
+ environmentFile = mkOption {
+ type = secret;
+ example = "/run/secrets/stump";
+ default = null;
+ description = ''
+ Path of a file with extra environment variables to be loaded from disk.
+ This file is not added to the nix store, so it can be used to pass secrets to stump.
+ Refer to the [documentation](https://www.stumpapp.dev/docs/guides/configuration/server-config) for options.
+ '';
+ };
+
+ secretFiles = mkOption {
+ type = types.attrsOf secret;
+ example = {
+ STUMP_OIDC_CLIENT_SECRET = "/run/secrets/stump_client_secret";
+ };
+ default = { };
+ description = ''
+ Attribute set containing paths to files to add to the environment of stump.
+ The files are not added to the nix store, so they can be used to pass secrets to stump.
+ Refer to the [documentation](https://www.stumpapp.dev/docs/guides/configuration/server-config) for options.
+ '';
+ };
+
+ ip = mkOption {
+ type = types.str;
+ default = "127.0.0.1";
+ description = "The IP address that Stump will listen on.";
+ };
+ port = mkOption {
+ type = types.port;
+ default = 10001;
+ description = "The port that Stump will listen on.";
+ };
+ openFirewall = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Whether to open the Stump port in the firewall";
+ };
+ user = mkOption {
+ type = types.str;
+ default = "stump";
+ description = "The user Stump should run as.";
+ };
+ group = mkOption {
+ type = types.str;
+ default = "stump";
+ description = "The group stump should run as.";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.port ];
+
+ services.stump.environment = {
+ STUMP_IP = cfg.ip;
+ STUMP_PORT = toString cfg.port;
+ STUMP_CONFIG_DIR = cfg.configLocation;
+ };
+
+ systemd.services.stump = {
+ description = "Stump (A free and open source comics, manga and digital book server with OPDS support)";
+ requires = [ "network-online.target" ];
+ after = [ "network-online.target" ];
+ wantedBy = [ "multi-user.target" ];
+ environment = cfg.environment;
+ serviceConfig = {
+ Type = "simple";
+ Restart = "on-failure";
+ RestartSec = 3;
+
+ ExecStart =
+ if cfg.secretFiles == { } then
+ "${lib.getExe cfg.package}"
+ else
+ pkgs.writeShellScript "stump-env" ''
+ ${lib.strings.concatStringsSep "\n" (
+ lib.attrsets.mapAttrsToList (key: path: "export ${key}=$(< \"${path}\")") cfg.secretFiles
+ )}
+ ${lib.getExe cfg.package}
+ '';
+ EnvironmentFile = cfg.environmentFile;
+ StateDirectory = "stump";
+ User = cfg.user;
+ Group = cfg.group;
+
+ # Hardening
+ CapabilityBoundingSet = "";
+ NoNewPrivileges = true;
+ PrivateUsers = true;
+ PrivateTmp = true;
+ PrivateDevices = true;
+ PrivateMounts = true;
+ ProtectClock = true;
+ ProtectControlGroups = true;
+ ProtectHome = true;
+ ProtectHostname = true;
+ ProtectKernelLogs = true;
+ ProtectKernelModules = true;
+ ProtectKernelTunables = true;
+ RestrictAddressFamilies = [
+ "AF_INET"
+ "AF_INET6"
+ "AF_UNIX"
+ "AF_NETLINK" # is used to determine local ip
+ ];
+ RestrictNamespaces = true;
+ RestrictRealtime = true;
+ RestrictSUIDSGID = true;
+ };
+ };
+
+ users.users = mkIf (cfg.user == "stump") {
+ stump = {
+ name = "stump";
+ group = cfg.group;
+ isSystemUser = true;
+ };
+ };
+ users.groups = mkIf (cfg.group == "stump") { stump = { }; };
+
+ meta.maintainers = with lib.maintainers; [ jvanbruegge ];
+ };
+}
diff --git a/nixos/modules/services/web-apps/tabbyapi.nix b/nixos/modules/services/web-apps/tabbyapi.nix
index 0340e69775a7..a955afe463b5 100644
--- a/nixos/modules/services/web-apps/tabbyapi.nix
+++ b/nixos/modules/services/web-apps/tabbyapi.nix
@@ -34,7 +34,7 @@ in
host = lib.mkOption {
type = lib.types.str;
default = "127.0.0.1";
- description = "The IP to host on. Use 0.0.0.0 to expose on all adapters.";
+ description = "The IP to host on. Use 0.0.0.0 to expose on all network adapters.";
};
port = lib.mkOption {
@@ -46,13 +46,22 @@ in
disable_auth = lib.mkOption {
type = lib.types.bool;
default = false;
- description = "Disable HTTP token authentication. WARNING: Vulnerable if exposed.";
+ description = ''
+ Disable HTTP token authentication with requests.
+ WARNING: This will make your instance vulnerable! Only turn this on if you are ONLY connecting from localhost.
+ '';
+ };
+
+ disable_fetch_requests = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = "Disable fetching external content in response to requests, such as images from URLs.";
};
api_servers = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ "OAI" ];
- description = "Select API servers to enable. Options: OAI, Kobold.";
+ description = "Select API servers to enable. Possible values: OAI, Kobold.";
};
};
@@ -66,7 +75,18 @@ in
log_requests = lib.mkOption {
type = lib.types.bool;
default = false;
- description = "Enable request logging. Only use for debug.";
+ description = "Enable request logging. NOTE: Only use this for debugging!";
+ };
+
+ log_chat_completion_requests = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Write every /v1/chat/completions request to logs/debug/ as JSON.
+ PRIVACY WARNING: Enabling this creates a comprehensive request log, including the
+ full message history and generation parameters. API keys are redacted, but prompts
+ and user-provided content are preserved for bug-report reproduction.
+ '';
};
};
@@ -111,35 +131,94 @@ in
'';
};
+ inline_model_loading = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Allow direct loading of models from a completion or chat completion request.
+ This method of loading is strict by default; enable dummy models to add
+ exceptions for invalid model names.
+ '';
+ };
+
model_name = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
- description = "The initial model to load on startup. Must exist in model_dir.";
+ description = ''
+ An initial model to load. Make sure the model is located in the model directory!
+ REQUIRED: This must be filled out to load a model on startup.
+ '';
example = "Qwen3_5-9B";
};
max_seq_len = lib.mkOption {
type = lib.types.nullOr lib.types.int;
default = null;
- description = "Max sequence length. Set null to use model defaults.";
+ description = ''
+ Max sequence length (default: min(max_position_embeddings, cache_size)).
+ Set to -1 to fetch from the model's config.json.
+ '';
};
cache_mode = lib.mkOption {
type = lib.types.str;
default = "FP16";
- description = "Cache mode for VRAM savings. ExLlamaV2: FP16, Q8, Q6, Q4. ExLlamaV3: specific pair string (e.g., '8,8').";
+ description = ''
+ Enable different cache modes for VRAM savings.
+ Specify the pair k_bits,v_bits where k_bits and v_bits are integers from 2-8 (e.g. '8,8').
+ The legacy values 'FP16', 'Q8', 'Q6', 'Q4' are also accepted.
+ '';
+ };
+
+ tensor_parallel = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Load model with tensor parallelism.
+ Falls back to autosplit if GPU split isn't provided. This ignores the gpu_split_auto value.
+ '';
};
gpu_split_auto = lib.mkOption {
type = lib.types.bool;
default = true;
- description = "Automatically allocate resources to GPUs.";
+ description = "Automatically allocate resources to GPUs. Not parsed for single GPU users.";
};
dummy_model_names = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ "gpt-3.5-turbo" ];
- description = "List of fake model names sent via the /v1/models endpoint.";
+ description = ''
+ A list of fake model names that are sent via the /v1/models endpoint.
+ Also used as bypasses for strict mode if inline_model_loading is true.
+ '';
+ };
+
+ vision = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = "Enables vision support if the model supports it.";
+ };
+
+ reasoning = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = ''
+ Enable reasoning parser.
+ Do NOT enable this if the model is not a reasoning model (e.g. deepseek-r1 series).
+ '';
+ };
+
+ reasoning_start_token = lib.mkOption {
+ type = lib.types.str;
+ default = "";
+ description = "The start token for reasoning content.";
+ };
+
+ reasoning_end_token = lib.mkOption {
+ type = lib.types.str;
+ default = "";
+ description = "The end token for reasoning content.";
};
};
};
@@ -167,6 +246,13 @@ in
wantedBy = [ "multi-user.target" ];
description = "TabbyAPI - OAI compatible server for Exllama";
+ # Triton & huggingface downloader need writable cache folders
+ environment = {
+ HOME = "/var/lib/tabbyapi";
+ XDG_CACHE_HOME = "/var/lib/tabbyapi/.cache";
+ TRITON_CACHE_DIR = "/tmp/triton";
+ };
+
serviceConfig = {
ExecStart = "${lib.getExe cfg.package} --config=${configFile}";
Restart = "on-failure";
diff --git a/nixos/modules/services/web-apps/wealthfolio.nix b/nixos/modules/services/web-apps/wealthfolio.nix
new file mode 100644
index 000000000000..61d488595a90
--- /dev/null
+++ b/nixos/modules/services/web-apps/wealthfolio.nix
@@ -0,0 +1,184 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.services.wealthfolio;
+in
+{
+ options.services.wealthfolio = {
+ enable = lib.mkEnableOption "Wealthfolio personal investment tracker";
+ package = lib.mkPackageOption pkgs "wealthfolio-server" { };
+
+ address = lib.mkOption {
+ type = lib.types.str;
+ default = "127.0.0.1";
+ description = "The IP address the Wealthfolio server binds to.";
+ };
+
+ port = lib.mkOption {
+ type = lib.types.port;
+ default = 8088;
+ description = "The port the Wealthfolio server listens on.";
+ };
+
+ openFirewall = lib.mkOption {
+ type = lib.types.bool;
+ default = false;
+ description = "Whether to automatically open the specified port in the system firewall.";
+ };
+
+ secretKeyFile = lib.mkOption {
+ type = lib.types.nullOr lib.types.path;
+ default = null;
+ example = lib.literalExpression "config.age.secrets.wealthfolio-key.path";
+ description = ''
+ Path to a file containing the 32-byte secret key used for encrypting sensitive data
+ at rest (broker credentials, API keys) and signing JWT tokens.
+
+ Generate with: `openssl rand -base64 32`.
+
+ Note: Losing this key means losing access to all stored encrypted secrets.
+ There is no recovery.
+ '';
+ };
+
+ authPasswordHashFile = lib.mkOption {
+ type = lib.types.nullOr lib.types.path;
+ default = null;
+ example = lib.literalExpression "config.age.secrets.wealthfolio-hash.path";
+ description = ''
+ Path to a file containing the Argon2id PHC string defining the login password.
+ Required for web access unless `authRequired` is false.
+
+ Generate with: `printf 'your-password' | argon2 yoursalt16chars! -id -e`
+ '';
+ };
+
+ authRequired = lib.mkOption {
+ type = lib.types.bool;
+ default = true;
+ description = ''
+ Whether to require internal authentication.
+
+ Security Note: The server panics at startup if the listener is bound to a
+ non-loopback address and authentication is disabled. Set this to `false`
+ only if a reverse proxy handles authentication for you.
+ '';
+ };
+
+ corsAllowOrigins = lib.mkOption {
+ type = lib.types.str;
+ default = "*";
+ example = "https://wealthfolio.example.com";
+ description = ''
+ Comma-separated list of allowed CORS origins.
+
+ Security Note: The server panics at startup if `*` is used while authentication
+ is enabled, as this is a CSRF vector. Set explicit origins matching your
+ deployment URL (scheme + host + port).
+ '';
+ };
+
+ authTokenTtlMinutes = lib.mkOption {
+ type = lib.types.ints.positive;
+ default = 60;
+ description = "JWT access token lifetime in minutes. (e.g., 1440 for 24h, 10080 for 7d).";
+ };
+
+ cookieSecure = lib.mkOption {
+ type = lib.types.enum [
+ "auto"
+ "true"
+ "false"
+ ];
+ default = "auto";
+ description = ''
+ Controls the Secure attribute on the authentication session cookie.
+ - auto: Sets Secure based on HTTPS protocol.
+ - true: Always sets Secure (Use behind a reverse proxy that terminates HTTPS).
+ - false: Never sets Secure (Not recommended).
+ '';
+ };
+
+ requestTimeoutMs = lib.mkOption {
+ type = lib.types.ints.positive;
+ default = 300000;
+ description = "HTTP request timeout in milliseconds. Default (5m) accommodates large broker syncs.";
+ };
+
+ logFormat = lib.mkOption {
+ type = lib.types.enum [
+ "text"
+ "json"
+ ];
+ default = "text";
+ description = "Log output format. `json` is recommended if shipping to log aggregators.";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ networking.firewall.allowedTCPPorts = lib.optional cfg.openFirewall cfg.port;
+
+ assertions = [
+ {
+ assertion = cfg.secretKeyFile != null;
+ message = "services.wealthfolio: secretKeyFile must be provided.";
+ }
+ {
+ assertion = cfg.authRequired -> cfg.authPasswordHashFile != null;
+ message = "services.wealthfolio: authPasswordHashFile must be provided when authRequired is true.";
+ }
+ {
+ assertion = cfg.authRequired -> cfg.corsAllowOrigins != "*";
+ message = "services.wealthfolio: corsAllowOrigins cannot be '*' when authRequired is true. Provide an explicit domain.";
+ }
+ ];
+
+ systemd.services.wealthfolio = {
+ description = "Wealthfolio server service daemon.";
+ after = [ "network.target" ];
+ wantedBy = [ "multi-user.target" ];
+
+ environment = {
+ WF_LISTEN_ADDR = "${cfg.address}:${toString cfg.port}";
+ WF_DB_PATH = "/var/lib/wealthfolio/wealthfolio.db";
+ WF_AUTH_REQUIRED = lib.boolToString cfg.authRequired;
+ WF_CORS_ALLOW_ORIGINS = cfg.corsAllowOrigins;
+ WF_AUTH_TOKEN_TTL_MINUTES = toString cfg.authTokenTtlMinutes;
+ WF_COOKIE_SECURE = cfg.cookieSecure;
+ WF_REQUEST_TIMEOUT_MS = toString cfg.requestTimeoutMs;
+ WF_LOG_FORMAT = cfg.logFormat;
+ };
+
+ script = ''
+ ${lib.optionalString (
+ cfg.secretKeyFile != null
+ ) "export WF_SECRET_KEY=$(<\"$CREDENTIALS_DIRECTORY/secret_key\")"}
+ ${lib.optionalString (
+ cfg.authPasswordHashFile != null
+ ) "export WF_AUTH_PASSWORD_HASH=$(<\"$CREDENTIALS_DIRECTORY/auth_hash\")"}
+
+ exec ${lib.getExe cfg.package}
+ '';
+
+ serviceConfig = {
+ LoadCredential =
+ lib.optional (cfg.secretKeyFile != null) "secret_key:${cfg.secretKeyFile}"
+ ++ lib.optional (cfg.authPasswordHashFile != null) "auth_hash:${cfg.authPasswordHashFile}";
+
+ DynamicUser = true;
+ StateDirectory = "wealthfolio";
+ ProtectSystem = "strict";
+ ProtectHome = true;
+ PrivateTmp = true;
+ };
+ };
+ };
+
+ meta = {
+ maintainers = with lib.maintainers; [ luuumine ];
+ };
+}
diff --git a/nixos/modules/services/web-servers/caddy/default.nix b/nixos/modules/services/web-servers/caddy/default.nix
index 2ff45efd4e43..d707a6c4635c 100644
--- a/nixos/modules/services/web-servers/caddy/default.nix
+++ b/nixos/modules/services/web-servers/caddy/default.nix
@@ -448,8 +448,8 @@ in
'';
# https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes
- boot.kernel.sysctl."net.core.rmem_max" = mkDefault 2500000;
- boot.kernel.sysctl."net.core.wmem_max" = mkDefault 2500000;
+ boot.kernel.sysctl."net.core.rmem_max" = mkDefault 7500000;
+ boot.kernel.sysctl."net.core.wmem_max" = mkDefault 7500000;
systemd.packages = [ cfg.package ];
systemd.services.caddy = {
diff --git a/nixos/modules/services/web-servers/nginx/default.nix b/nixos/modules/services/web-servers/nginx/default.nix
index 73efd441d23d..9553090e8c85 100644
--- a/nixos/modules/services/web-servers/nginx/default.nix
+++ b/nixos/modules/services/web-servers/nginx/default.nix
@@ -126,6 +126,28 @@ let
'') (filterAttrs (name: conf: conf.enable) cfg.proxyCachePath)
);
+ # openresty bundles the lua module and resty.core; stock nginx needs them added.
+ packageBundlesLua = p: lib.getName p == "openresty";
+ luaEnv = pkgs.luajit_openresty.withPackages (
+ ps:
+ lib.optional (cfg.lua.enable && !packageBundlesLua cfg.package) ps.lua-resty-core
+ ++ cfg.lua.extraPackages ps
+ );
+ luaVersion = pkgs.luajit_openresty.luaversion;
+ # Lua modules install under lib/lua or share/lua depending on the package; ;; keeps nginx's defaults.
+ luaConfig = ''
+ lua_package_path '${
+ lib.concatMapStringsSep ";" (s: "${luaEnv}/${s}") [
+ "lib/lua/${luaVersion}/?.lua"
+ "lib/lua/${luaVersion}/?/init.lua"
+ "share/lua/${luaVersion}/?.lua"
+ "share/lua/${luaVersion}/?/init.lua"
+ ]
+ };;';
+ lua_package_cpath '${luaEnv}/lib/lua/${luaVersion}/?.so;;';
+ lua_ssl_trusted_certificate ${config.security.pki.caBundle};
+ '';
+
toUpstreamParameter =
key: value:
if builtins.isBool value then lib.optionalString value key else "${key}=${toString value}";
@@ -295,6 +317,8 @@ let
server_tokens ${if cfg.serverTokens then "on" else "off"};
+ ${optionalString cfg.lua.enable luaConfig}
+
${cfg.commonHttpConfig}
${proxyCachePathConfig}
@@ -388,7 +412,7 @@ let
"
listen ${addr}${optionalString (port != null) ":${toString port}"} quic "
+ optionalString vhost.default "default_server "
- + optionalString vhost.reuseport "reuseport "
+ + optionalString (vhost.reuseport && !(lib.hasPrefix "unix:" addr)) "reuseport "
+ optionalString (extraParameters != [ ]) (
concatStringsSep " " (
let
@@ -414,7 +438,7 @@ let
+ optionalString (ssl && vhost.http2 && oldHTTP2) "http2 "
+ optionalString ssl "ssl "
+ optionalString vhost.default "default_server "
- + optionalString vhost.reuseport "reuseport "
+ + optionalString (vhost.reuseport && !(lib.hasPrefix "unix:" addr)) "reuseport "
+ optionalString proxyProtocol "proxy_protocol "
+ optionalString (extraParameters != [ ]) (concatStringsSep " " extraParameters)
+ ";";
@@ -771,7 +795,11 @@ in
apply =
p:
p.override {
- modules = lib.unique (p.modules ++ cfg.additionalModules);
+ modules = lib.unique (
+ p.modules
+ ++ cfg.additionalModules
+ ++ lib.optional (cfg.lua.enable && !packageBundlesLua p) pkgs.nginxModules.lua
+ );
};
description = ''
Nginx package to use. This defaults to the stable version. Note
@@ -791,6 +819,36 @@ in
'';
};
+ lua = {
+ enable = mkEnableOption ''
+ Lua scripting in nginx via OpenResty's lua-nginx-module,
+ wiring up `lua_package_path`/`lua_package_cpath` for
+ {option}`services.nginx.lua.extraPackages`.
+
+ Use this to add Lua to a stock nginx. For the full OpenResty platform —
+ required by libraries that depend on its bundled lualib (for example
+ `lua-resty-openidc`, which needs `resty.string` and friends) — set
+ {option}`services.nginx.package` to `pkgs.openresty` instead; this option
+ then only sets up the search path and leaves OpenResty's built-in Lua
+ module in place
+ '';
+
+ extraPackages = mkOption {
+ type = types.functionTo (types.listOf types.package);
+ default = ps: [ ];
+ defaultText = literalExpression "ps: [ ]";
+ example = literalExpression ''
+ ps: with ps; [ lua-resty-openidc ]
+ '';
+ description = ''
+ Extra Lua packages to put on `lua_package_path` / `lua_package_cpath`,
+ for both stock nginx and `pkgs.openresty`. Packages are selected from
+ `pkgs.luajit_openresty.pkgs`. `lua-resty-core`, which the Lua module
+ requires to start, is added automatically.
+ '';
+ };
+ };
+
logError = mkOption {
default = "stderr";
type = types.str;
@@ -1559,7 +1617,7 @@ in
MemoryDenyWriteExecute =
!(
(builtins.any (mod: (mod.allowMemoryWriteExecute or false)) cfg.package.modules)
- || (cfg.package == pkgs.openresty)
+ || (lib.getName cfg.package == "openresty")
);
RestrictRealtime = true;
RestrictSUIDSGID = true;
@@ -1633,9 +1691,7 @@ in
)
);
- environment.etc."nginx/nginx.conf" = mkIf cfg.enableReload {
- source = configFile;
- };
+ environment.etc."nginx/nginx.conf".source = configFile;
security.acme.certs =
let
@@ -1699,4 +1755,8 @@ in
postrotate = "[ ! -f /var/run/nginx/nginx.pid ] || kill -USR1 `cat /var/run/nginx/nginx.pid`";
};
};
+ meta.maintainers = [
+ lib.maintainers.leona
+ lib.maintainers.ma27
+ ];
}
diff --git a/nixos/modules/services/web-servers/nginx/gitweb.nix b/nixos/modules/services/web-servers/nginx/gitweb.nix
deleted file mode 100644
index c379245c5bff..000000000000
--- a/nixos/modules/services/web-servers/nginx/gitweb.nix
+++ /dev/null
@@ -1,101 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-
-with lib;
-
-let
- cfg = config.services.nginx.gitweb;
- gitwebConfig = config.services.gitweb;
- package = pkgs.gitweb.override (
- optionalAttrs gitwebConfig.gitwebTheme {
- gitwebTheme = true;
- }
- );
-
-in
-{
-
- options.services.nginx.gitweb = {
-
- enable = mkOption {
- default = false;
- type = types.bool;
- description = ''
- If true, enable gitweb in nginx.
- '';
- };
-
- location = mkOption {
- default = "/gitweb";
- type = types.str;
- description = ''
- Location to serve gitweb on.
- '';
- };
-
- user = mkOption {
- default = "nginx";
- type = types.str;
- description = ''
- Existing user that the CGI process will belong to. (Default almost surely will do.)
- '';
- };
-
- group = mkOption {
- default = "nginx";
- type = types.str;
- description = ''
- Group that the CGI process will belong to. (Set to `config.services.gitolite.group` if you are using gitolite.)
- '';
- };
-
- virtualHost = mkOption {
- default = "_";
- type = types.str;
- description = ''
- VirtualHost to serve gitweb on. Default is catch-all.
- '';
- };
-
- };
-
- config = mkIf cfg.enable {
-
- systemd.services.gitweb = {
- description = "GitWeb service";
- script = "${package}/gitweb.cgi --fastcgi --nproc=1";
- environment = {
- FCGI_SOCKET_PATH = "/run/gitweb/gitweb.sock";
- };
- serviceConfig = {
- User = cfg.user;
- Group = cfg.group;
- RuntimeDirectory = [ "gitweb" ];
- };
- wantedBy = [ "multi-user.target" ];
- };
-
- services.nginx = {
- virtualHosts.${cfg.virtualHost} = {
- locations."${cfg.location}/static/" = {
- alias = "${package}/static/";
- };
- locations."${cfg.location}/" = {
- extraConfig = ''
- include ${config.services.nginx.package}/conf/fastcgi_params;
- fastcgi_param GITWEB_CONFIG ${gitwebConfig.gitwebConfigFile};
- fastcgi_pass unix:/run/gitweb/gitweb.sock;
- '';
- };
- };
- };
-
- };
-
- meta.maintainers = [ ];
-
-}
diff --git a/nixos/modules/services/web-servers/phpfpm/default.nix b/nixos/modules/services/web-servers/phpfpm/default.nix
index 34845589fabe..43d394ad39f4 100644
--- a/nixos/modules/services/web-servers/phpfpm/default.nix
+++ b/nixos/modules/services/web-servers/phpfpm/default.nix
@@ -18,6 +18,15 @@ let
"yes"
else if false == value then
"no"
+ else if isString value then
+ # Escape according to https://www.php.net/manual/en/function.parse-ini-file.php
+ # Not escaping `$` since users might want to use that to interpolate environment variables.
+ # Additionally, php-fpm applies post-processing to env values that start with `$` and replaces
+ # them with the respective env variable, with no way to escape: https://github.com/php/php-src/blob/631c366f9f58c8ba4078a48d1f56187cfbf8e549/sapi/fpm/fpm/fpm_env.c#L171-L180
+ # In all platforms except for Windows, PHP_EOL is the line feed `\n` character,
+ # which we use here as an escape value since php-fpm parses the config line-by-line.
+ # See https://github.com/NixOS/nixpkgs/pull/516530#issuecomment-4878738511 for more information.
+ ''"${replaceString "\n" ''" PHP_EOL "'' (escape [ "\"" "\\" ] value)}"''
else
toString value;
diff --git a/nixos/modules/services/web-servers/rustfs.nix b/nixos/modules/services/web-servers/rustfs.nix
new file mode 100644
index 000000000000..675a6314426b
--- /dev/null
+++ b/nixos/modules/services/web-servers/rustfs.nix
@@ -0,0 +1,151 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+
+let
+ cfg = config.services.rustfs;
+in
+{
+ meta.maintainers = with lib.maintainers; [
+ marcel
+ ];
+
+ options.services.rustfs = {
+ enable = lib.mkEnableOption "RustFS Object Storage Server";
+
+ package = lib.mkPackageOption pkgs "rustfs" { };
+
+ user = lib.mkOption {
+ type = lib.types.str;
+ default = "rustfs";
+ description = "The user RustFS should run as.";
+ };
+
+ group = lib.mkOption {
+ type = lib.types.str;
+ default = "rustfs";
+ description = "The group RustFS should run as.";
+ };
+
+ settings = lib.mkOption {
+ default = { };
+ description = ''
+ Options for RustFS configuration. Refer to
+
+ for details on supported values.
+ '';
+ example = lib.literalExpression ''
+ {
+ RUSTFS_CONSOLE_ENABLE = "true";
+ RUSTFS_VOLUMES = "/mnt/rustfs";
+ }
+ '';
+ type = lib.types.submodule {
+ freeformType = lib.types.attrsOf (
+ lib.types.oneOf [
+ lib.types.str
+ lib.types.int
+ ]
+ );
+ options = {
+ RUSTFS_VOLUMES = lib.mkOption {
+ type = lib.types.path;
+ default = "/var/lib/rustfs";
+ description = "The directory where RustFS stores it's data.";
+ };
+ };
+ };
+ };
+
+ environmentFile = lib.mkOption {
+ type = lib.types.str;
+ description = "Path to environment file containing secrets like RUSTFS_ACCESS_KEY or RUSTFS_SECRET_KEY.";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ assertions = [
+ {
+ assertion = !(cfg.settings ? RUSTFS_ACCESS_KEY);
+ message = "RUSTFS_ACCESS_KEY must not be set in services.rustfs.settings. Use environmentFile instead.";
+ }
+ {
+ assertion = !(cfg.settings ? RUSTFS_SECRET_KEY);
+ message = "RUSTFS_SECRET_KEY must not be set in services.rustfs.settings. Use environmentFile instead.";
+ }
+ ];
+
+ systemd = {
+ tmpfiles.settings."10-rustfs".${cfg.settings.RUSTFS_VOLUMES}.d = {
+ inherit (cfg) user group;
+ };
+
+ # https://docs.rustfs.com/installation/linux/single-node-single-disk.html#_6-configure-system-service
+ services.rustfs = {
+ description = "RustFS Object Storage Server";
+ documentation = [ "https://rustfs.com/docs/" ];
+
+ after = [ "network-online.target" ];
+ wants = [ "network-online.target" ];
+
+ wantedBy = [ "multi-user.target" ];
+
+ environment = cfg.settings;
+
+ preStart = ''
+ if [ -z "$RUSTFS_ACCESS_KEY" ] || [ -z "$RUSTFS_SECRET_KEY" ]; then
+ echo "RustFS uses well-known default values for RUSTFS_ACCESS_KEY and RUSTFS_SECRET_KEY,"
+ echo "please configure them using services.rustfs.environmentFile."
+ exit 1
+ fi
+ '';
+
+ serviceConfig = {
+ Type = "notify";
+ NotifyAccess = "main";
+ User = cfg.user;
+ Group = cfg.group;
+
+ EnvironmentFile = cfg.environmentFile;
+ ExecStart = lib.getExe cfg.package;
+
+ LimitNOFILE = 1048576;
+ LimitNPROC = 32768;
+ TasksMax = "infinity";
+
+ Restart = "always";
+ RestartSec = "10s";
+
+ OOMScoreAdjust = "-1000";
+ SendSIGKILL = false;
+
+ TimeoutStartSec = "30s";
+ TimeoutStopSec = "30s";
+
+ NoNewPrivileges = true;
+
+ ProtectHome = true;
+ PrivateTmp = true;
+ PrivateDevices = true;
+ ProtectClock = true;
+ ProtectKernelTunables = true;
+ ProtectKernelModules = true;
+ ProtectControlGroups = true;
+ RestrictSUIDSGID = true;
+ RestrictRealtime = true;
+ };
+ };
+ };
+
+ users = {
+ users.${cfg.user} = {
+ isSystemUser = true;
+ inherit (cfg) group;
+ };
+ groups.${cfg.group} = { };
+ };
+ };
+}
diff --git a/nixos/modules/services/x11/desktop-managers/cinnamon.nix b/nixos/modules/services/x11/desktop-managers/cinnamon.nix
index a91fa045aa7a..1fb9a39782e7 100644
--- a/nixos/modules/services/x11/desktop-managers/cinnamon.nix
+++ b/nixos/modules/services/x11/desktop-managers/cinnamon.nix
@@ -111,15 +111,26 @@ in
services.blueman.enable = mkDefault (notExcluded pkgs.blueman);
services.hardware.bolt.enable = mkDefault (notExcluded pkgs.bolt);
hardware.bluetooth.enable = mkDefault true;
- security.polkit.enable = true;
+ security.polkit = {
+ enable = true;
+ enablePkexecWrapper = lib.mkDefault true;
+ };
services.accounts-daemon.enable = true;
- services.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true));
services.dbus.packages = with pkgs; [
cinnamon
cinnamon-screensaver
nemo-with-extensions
xapp
];
+ systemd.packages =
+ with pkgs;
+ [
+ cinnamon-session
+ ]
+ ++ utils.removePackagesByName [
+ xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/
+ xdg-user-dirs-gtk
+ ] config.environment.cinnamon.excludePackages;
services.cinnamon.apps.enable = mkDefault true;
services.gnome.evolution-data-server.enable = true;
services.gnome.glib-networking.enable = true;
@@ -215,9 +226,13 @@ in
mint-y-icons
xapp # provides some xapp-* icons
xapp-symbolic-icons
+ xdg-user-dirs-gtk
] config.environment.cinnamon.excludePackages
);
+ # For printers@cinnamon.org applet
+ programs.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true));
+
xdg.mime.enable = true;
xdg.icons.enable = true;
diff --git a/nixos/modules/services/x11/desktop-managers/default.nix b/nixos/modules/services/x11/desktop-managers/default.nix
index 7ff8cabe244a..0d94ce74a856 100644
--- a/nixos/modules/services/x11/desktop-managers/default.nix
+++ b/nixos/modules/services/x11/desktop-managers/default.nix
@@ -13,7 +13,7 @@ let
# If desktop manager `d' isn't capable of setting a background and
# the xserver is enabled, `feh' or `xsetroot' are used as a fallback.
- needBGCond = d: !(d ? bgSupport && d.bgSupport) && xcfg.enable;
+ needBGCond = d: !(d ? bgSupport && d.bgSupport) && xcfg.enable && cfg.wallpaper.enable;
in
@@ -48,6 +48,16 @@ in
services.xserver.desktopManager = {
wallpaper = {
+ enable = mkOption {
+ type = types.bool;
+ default = true;
+ description = ''
+ The file {file}`~/.background-image` is used as a background image.
+ The `mode` option specifies the placement of this image onto your desktop.
+ To disable this, set this option to `false`.
+ '';
+ };
+
mode = mkOption {
type = types.enum [
"center"
@@ -59,9 +69,6 @@ in
default = "scale";
example = "fill";
description = ''
- The file {file}`~/.background-image` is used as a background image.
- This option specifies the placement of this image onto your desktop.
-
Possible values:
`center`: Center the image on the background. If it is too small, it will be surrounded by a black border.
`fill`: Like `scale`, but preserves aspect ratio by zooming the image until it fits. Either a horizontal or a vertical part of the image will be cut off.
diff --git a/nixos/modules/services/x11/desktop-managers/mate.nix b/nixos/modules/services/x11/desktop-managers/mate.nix
index 764e903cc2c5..be5ed185e68d 100644
--- a/nixos/modules/services/x11/desktop-managers/mate.nix
+++ b/nixos/modules/services/x11/desktop-managers/mate.nix
@@ -141,6 +141,10 @@ in
services.libinput.enable = mkDefault true;
security.pam.services.mate-screensaver.unixAuth = true;
+ security.polkit = {
+ enable = true;
+ enablePkexecWrapper = mkDefault true;
+ };
xdg.portal.configPackages = mkDefault [ pkgs.mate-desktop ];
diff --git a/nixos/modules/services/x11/desktop-managers/xfce.nix b/nixos/modules/services/x11/desktop-managers/xfce.nix
index 2d53eb58f287..3dcc5431e7c8 100644
--- a/nixos/modules/services/x11/desktop-managers/xfce.nix
+++ b/nixos/modules/services/x11/desktop-managers/xfce.nix
@@ -220,7 +220,10 @@ in
# Enable helpful DBus services.
services.udisks2.enable = true;
- security.polkit.enable = true;
+ security.polkit = {
+ enable = true;
+ enablePkexecWrapper = lib.mkDefault true;
+ };
services.accounts-daemon.enable = true;
services.upower.enable = config.powerManagement.enable;
services.gnome.glib-networking.enable = true;
diff --git a/nixos/modules/services/x11/display-managers/default.nix b/nixos/modules/services/x11/display-managers/default.nix
index 2f9a8dcb210a..d5c1277a459c 100644
--- a/nixos/modules/services/x11/display-managers/default.nix
+++ b/nixos/modules/services/x11/display-managers/default.nix
@@ -48,7 +48,7 @@ let
IFS=:
for i in $XDG_CURRENT_DESKTOP; do
case $i in
- KDE|GNOME|Pantheon|Hyprland|niri|X-NIXOS-SYSTEMD-AWARE) echo "1"; exit; ;;
+ KDE|GNOME|Pantheon|Hyprland|niri|X-Cinnamon|X-NIXOS-SYSTEMD-AWARE) echo "1"; exit; ;;
*) ;;
esac
done
diff --git a/nixos/modules/services/x11/display-managers/lightdm-greeters/enso-os.nix b/nixos/modules/services/x11/display-managers/lightdm-greeters/enso-os.nix
deleted file mode 100644
index 977042a074bd..000000000000
--- a/nixos/modules/services/x11/display-managers/lightdm-greeters/enso-os.nix
+++ /dev/null
@@ -1,122 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-
-with lib;
-let
- dmcfg = config.services.xserver.displayManager;
- ldmcfg = dmcfg.lightdm;
- cfg = ldmcfg.greeters.enso;
-
- theme = cfg.theme.package;
- icons = cfg.iconTheme.package;
- cursors = cfg.cursorTheme.package;
-
- ensoGreeterConf = pkgs.writeText "lightdm-enso-os-greeter.conf" ''
- [greeter]
- default-wallpaper=${ldmcfg.background}
- gtk-theme=${cfg.theme.name}
- icon-theme=${cfg.iconTheme.name}
- cursor-theme=${cfg.cursorTheme.name}
- blur=${toString cfg.blur}
- brightness=${toString cfg.brightness}
- ${cfg.extraConfig}
- '';
-in
-{
- options = {
- services.xserver.displayManager.lightdm.greeters.enso = {
- enable = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Whether to enable enso-os-greeter as the lightdm greeter
- '';
- };
-
- theme = {
- package = mkPackageOption pkgs "gnome-themes-extra" { };
- name = mkOption {
- type = types.str;
- default = "Adwaita";
- description = ''
- Name of the theme to use for the lightdm-enso-os-greeter
- '';
- };
- };
-
- iconTheme = {
- package = mkPackageOption pkgs "papirus-icon-theme" { };
- name = mkOption {
- type = types.str;
- default = "ePapirus";
- description = ''
- Name of the icon theme to use for the lightdm-enso-os-greeter
- '';
- };
- };
-
- cursorTheme = {
- package = mkPackageOption pkgs "capitaine-cursors" { };
- name = mkOption {
- type = types.str;
- default = "capitane-cursors";
- description = ''
- Name of the cursor theme to use for the lightdm-enso-os-greeter
- '';
- };
- };
-
- blur = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Whether or not to enable blur
- '';
- };
-
- brightness = mkOption {
- type = types.int;
- default = 7;
- description = ''
- Brightness
- '';
- };
-
- extraConfig = mkOption {
- type = types.lines;
- default = "";
- description = ''
- Extra configuration that should be put in the greeter.conf
- configuration file
- '';
- };
- };
- };
-
- config = mkIf (ldmcfg.enable && cfg.enable) {
- environment.etc."lightdm/greeter.conf".source = ensoGreeterConf;
-
- environment.systemPackages = [
- cursors
- icons
- theme
- ];
-
- services.xserver.displayManager.lightdm = {
- greeter = mkDefault {
- package = pkgs.lightdm-enso-os-greeter.xgreeters;
- name = "pantheon-greeter";
- };
-
- greeters = {
- gtk = {
- enable = mkDefault false;
- };
- };
- };
- };
-}
diff --git a/nixos/modules/services/x11/display-managers/lightdm.nix b/nixos/modules/services/x11/display-managers/lightdm.nix
index 699a9a9a07f3..d0d2d8de4411 100644
--- a/nixos/modules/services/x11/display-managers/lightdm.nix
+++ b/nixos/modules/services/x11/display-managers/lightdm.nix
@@ -83,7 +83,6 @@ in
imports = [
./lightdm-greeters/gtk.nix
./lightdm-greeters/mini.nix
- ./lightdm-greeters/enso-os.nix
./lightdm-greeters/pantheon.nix
./lightdm-greeters/lomiri.nix
./lightdm-greeters/tiny.nix
@@ -107,6 +106,9 @@ in
"user"
]
)
+ (lib.mkRemovedOptionModule [ "services" "xserver" "displayManager" "lightdm" "greeters" "enso" ]
+ "services.xserver.displayManager.lightdm.greeters.enso has been removed following removal of the corresponding package."
+ )
];
options = {
@@ -362,7 +364,7 @@ in
{
name = "unix";
control = "sufficient";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
}
];
@@ -446,7 +448,7 @@ in
{
name = "unix";
control = "sufficient";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
}
];
@@ -454,7 +456,7 @@ in
{
name = "unix";
control = "requisite";
- modulePath = "${config.security.pam.package}/lib/security/pam_unix.so";
+ modulePath = config.security.pam.pam_unixModulePath;
settings.nullok = true;
settings.yescrypt = true;
}
diff --git a/nixos/modules/system/boot/extra-initrd.nix b/nixos/modules/system/boot/extra-initrd.nix
new file mode 100644
index 000000000000..22451c64da7d
--- /dev/null
+++ b/nixos/modules/system/boot/extra-initrd.nix
@@ -0,0 +1,21 @@
+{ config, lib, ... }:
+{
+ options.system.boot.extraInitrd = {
+ paths = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = [ ];
+ description = ''
+ List of paths relative to the ESP that are combined with the NixOS
+ main initrd before being passed to the kernel.
+ '';
+ };
+ };
+
+ config = {
+ boot.bootspec.extensions = lib.mkIf (config.system.boot.extraInitrd.paths != [ ]) {
+ "org.nixos.extra-initrd.v1" = {
+ inherit (config.system.boot.extraInitrd) paths;
+ };
+ };
+ };
+}
diff --git a/nixos/modules/system/boot/loader/limine/limine-install.py b/nixos/modules/system/boot/loader/limine/limine-install.py
index 7b2e263e401e..dacf4a339d0e 100644
--- a/nixos/modules/system/boot/loader/limine/limine-install.py
+++ b/nixos/modules/system/boot/loader/limine/limine-install.py
@@ -1,7 +1,7 @@
#!@python3@/bin/python3 -B
from dataclasses import dataclass
-from typing import Any, Callable, Dict, List, Optional, Tuple
+from typing import Any, Dict, List, Optional, Tuple
import datetime
import hashlib
@@ -16,6 +16,7 @@ import sys
import tempfile
import textwrap
+
@dataclass
class XenBootSpec:
"""Represent the bootspec extension for Xen dom0 kernels"""
@@ -25,6 +26,7 @@ class XenBootSpec:
params: List[str]
version: str
+
@dataclass
class BootSpec:
system: str
@@ -34,17 +36,20 @@ class BootSpec:
label: str
toplevel: str
specialisations: Dict[str, "BootSpec"]
+ extraInitrdPaths: list[str]
xen: XenBootSpec | None
initrd: str | None = None
initrdSecrets: str | None = None
-install_config = json.load(open('@configPath@', 'r'))
+
+install_config = json.load(open("@configPath@", "r"))
libc = CDLL("libc.so.6")
limine_install_dir: Optional[str] = None
can_use_direct_paths = False
paths: Dict[str, bool] = {}
+
def config(*path: str) -> Optional[Any]:
result = install_config
for component in path:
@@ -53,60 +58,69 @@ def config(*path: str) -> Optional[Any]:
def bool_to_yes_no(value: bool) -> str:
- return 'yes' if value else 'no'
+ return "yes" if value else "no"
-def get_system_path(profile: str = 'system', gen: Optional[str] = None, spec: Optional[str] = None) -> str:
- basename = f'{profile}-{gen}-link' if gen is not None else profile
- profiles_dir = '/nix/var/nix/profiles'
- if profile == 'system':
+def get_system_path(
+ profile: str = "system", gen: Optional[str] = None, spec: Optional[str] = None
+) -> str:
+ basename = f"{profile}-{gen}-link" if gen is not None else profile
+ profiles_dir = "/nix/var/nix/profiles"
+ if profile == "system":
result = os.path.join(profiles_dir, basename)
else:
- result = os.path.join(profiles_dir, 'system-profiles', basename)
+ result = os.path.join(profiles_dir, "system-profiles", basename)
if spec is not None:
- result = os.path.join(result, 'specialisation', spec)
+ result = os.path.join(result, "specialisation", spec)
return result
def get_profiles() -> List[str]:
- profiles_dir = '/nix/var/nix/profiles/system-profiles/'
+ profiles_dir = "/nix/var/nix/profiles/system-profiles/"
dirs = os.listdir(profiles_dir) if os.path.isdir(profiles_dir) else []
- return [path for path in dirs if not path.endswith('-link')]
+ return [path for path in dirs if not path.endswith("-link")]
-def get_gens(profile: str = 'system') -> List[Tuple[int, List[str]]]:
- nix_env = os.path.join(str(config('nixPath')), 'bin', 'nix-env')
- output = subprocess.check_output([
- nix_env, '--list-generations',
- '-p', get_system_path(profile),
- '--option', 'build-users-group', '',
- ], universal_newlines=True)
+def get_gens(profile: str = "system") -> List[Tuple[int, List[str]]]:
+ nix_env = os.path.join(str(config("nixPath")), "bin", "nix-env")
+ output = subprocess.check_output(
+ [
+ nix_env,
+ "--list-generations",
+ "-p",
+ get_system_path(profile),
+ "--option",
+ "build-users-group",
+ "",
+ ],
+ universal_newlines=True,
+ )
gen_lines = output.splitlines()
gen_nums = [int(line.split()[0]) for line in gen_lines]
- return [gen for gen in gen_nums][-config('maxGenerations'):]
+ return [gen for gen in gen_nums][-config("maxGenerations") :]
def is_encrypted(device: str) -> bool:
- for name in config('luksDevices'):
- if os.readlink(os.path.join('/dev/mapper', name)) == os.readlink(device):
+ for name in config("luksDevices"):
+ if os.readlink(os.path.join("/dev/mapper", name)) == os.readlink(device):
return True
return False
def is_fs_type_supported(fs_type: str) -> bool:
- return fs_type.startswith('vfat')
+ return fs_type.startswith("vfat")
def get_dest_file(path: str) -> str:
package_id = os.path.basename(os.path.dirname(path))
suffix = os.path.basename(path)
- return f'{package_id}-{suffix}'
+ return f"{package_id}-{suffix}"
def get_dest_path(path: str, target: str) -> str:
@@ -115,7 +129,7 @@ def get_dest_path(path: str, target: str) -> str:
def get_copied_path_uri(path: str, target: str) -> str:
- result = ''
+ result = ""
dest_file = get_dest_file(path)
dest_path = get_dest_path(path, target)
@@ -125,15 +139,15 @@ def get_copied_path_uri(path: str, target: str) -> str:
else:
paths[dest_path] = True
- path_with_prefix = os.path.join('/limine', target, dest_file)
- result = f'boot():{path_with_prefix}'
+ path_with_prefix = os.path.join("/limine", target, dest_file)
+ result = f"boot():{path_with_prefix}"
- if config('validateChecksums'):
- with open(path, 'rb') as file:
+ if config("validateChecksums"):
+ with open(path, "rb") as file:
b2sum = hashlib.blake2b()
b2sum.update(file.read())
- result += f'#{b2sum.hexdigest()}'
+ result += f"#{b2sum.hexdigest()}"
return result
@@ -142,7 +156,9 @@ def get_path_uri(path: str) -> str:
return get_copied_path_uri(path, "")
-def get_file_uri(profile: str, gen: Optional[str], spec: Optional[str], name: str) -> str:
+def get_file_uri(
+ profile: str, gen: Optional[str], spec: Optional[str], name: str
+) -> str:
gen_path = get_system_path(profile, gen, spec)
path_in_store = os.path.realpath(os.path.join(gen_path, name))
return get_path_uri(path_in_store)
@@ -151,22 +167,26 @@ def get_file_uri(profile: str, gen: Optional[str], spec: Optional[str], name: st
def get_kernel_uri(kernel_path: str) -> str:
return get_copied_path_uri(kernel_path, "kernels")
+
def bootjson_to_bootspec(bootjson: dict) -> BootSpec:
- specialisations = bootjson['org.nixos.specialisation.v1']
+ specialisations = bootjson["org.nixos.specialisation.v1"]
specialisations = {k: bootjson_to_bootspec(v) for k, v in specialisations.items()}
xen = None
- if 'org.xenproject.bootspec.v2' in bootjson:
- xen = bootjson['org.xenproject.bootspec.v2']
+ if "org.xenproject.bootspec.v2" in bootjson:
+ xen = bootjson["org.xenproject.bootspec.v2"]
+
+ extraInitrdExtension = bootjson.get("org.nixos.extra-initrd.v1", {})
+ extraInitrdPaths = extraInitrdExtension.get("paths", [])
+
return BootSpec(
- **bootjson['org.nixos.bootspec.v1'],
+ **bootjson["org.nixos.bootspec.v1"],
specialisations=specialisations,
xen=xen,
+ extraInitrdPaths=extraInitrdPaths,
)
-def generate_xen_efi_files(
- bootspec: BootSpec,
- gen: str
- ) -> str:
+
+def generate_xen_efi_files(bootspec: BootSpec, gen: str) -> str:
"""Generate a Xen EFI xen.cfg file, and copy required files in place.
Assumes the bootspec has already been validated as having the requried
@@ -179,43 +199,43 @@ def generate_xen_efi_files(
Returns the path to the Xen EFI binary
"""
- xen_efi_boot_path = get_copied_path_uri(bootspec.xen['efiPath'], f'xen/{gen}')
- xen_efi_path = get_dest_path(bootspec.xen['efiPath'], f'xen/{gen}')
+ xen_efi_boot_path = get_copied_path_uri(bootspec.xen["efiPath"], f"xen/{gen}")
+ xen_efi_path = get_dest_path(bootspec.xen["efiPath"], f"xen/{gen}")
xen_efi_cfg_dir = os.path.dirname(xen_efi_path)
- xen_efi_cfg_path = xen_efi_path[:-4] + '.cfg'
+ xen_efi_cfg_path = xen_efi_path[:-4] + ".cfg"
if not os.path.exists(xen_efi_cfg_dir):
os.makedirs(xen_efi_cfg_dir)
- xen_efi_cfg = (
- f'default=nixos{gen}\n\n' +
- f'[nixos{gen}]\n'
- )
+ xen_efi_cfg = f"default=nixos{gen}\n\n" + f"[nixos{gen}]\n"
# set xen dom0 parameters
- if 'params' in bootspec.xen and len(bootspec.xen['params']) > 0:
- xen_efi_cfg += 'options=' + ' '.join(bootspec.xen['params']).strip() + '\n'
+ if "params" in bootspec.xen and len(bootspec.xen["params"]) > 0:
+ xen_efi_cfg += "options=" + " ".join(bootspec.xen["params"]).strip() + "\n"
# set kernel and copy in-place
- xen_efi_kernel_path = get_dest_path(bootspec.kernel, f'xen/{gen}')
+ xen_efi_kernel_path = get_dest_path(bootspec.kernel, f"xen/{gen}")
copy_file(bootspec.kernel, xen_efi_kernel_path)
xen_efi_cfg += (
- 'kernel=' + os.path.basename(xen_efi_kernel_path) + ' '
- + ' '.join(['init=' + bootspec.init] + bootspec.kernelParams).strip()
- + '\n'
+ "kernel="
+ + os.path.basename(xen_efi_kernel_path)
+ + " "
+ + " ".join(["init=" + bootspec.init] + bootspec.kernelParams).strip()
+ + "\n"
)
# set ramdisk and copy initrd in-place
if bootspec.initrd:
- xen_efi_initrd_path = get_dest_path(bootspec.initrd, f'xen/{gen}')
+ xen_efi_initrd_path = get_dest_path(bootspec.initrd, f"xen/{gen}")
copy_file(bootspec.initrd, xen_efi_initrd_path)
- xen_efi_cfg += 'ramdisk=' + os.path.basename(xen_efi_initrd_path) + '\n'
+ xen_efi_cfg += "ramdisk=" + os.path.basename(xen_efi_initrd_path) + "\n"
- with open(xen_efi_cfg_path, 'w') as xen_efi_cfg_file:
+ with open(xen_efi_cfg_path, "w") as xen_efi_cfg_file:
xen_efi_cfg_file.write(xen_efi_cfg)
return xen_efi_boot_path
+
def xen_config_entry(
levels: int, bootspec: BootSpec, xenVersion: str, gen: str, time: str, efi: bool
) -> str:
@@ -230,15 +250,19 @@ def xen_config_entry(
efi -- True if EFI protocol should be used for this entry
"""
# generate Xen menu label for the current generation
- entry = '/' * levels + f'Generation {gen} with Xen {xenVersion}' + (' EFI\n' if efi else '\n')
- entry += f'comment: Xen {xenVersion} {bootspec.label}, built on {time}\n'
+ entry = (
+ "/" * levels
+ + f"Generation {gen} with Xen {xenVersion}"
+ + (" EFI\n" if efi else "\n")
+ )
+ entry += f"comment: Xen {xenVersion} {bootspec.label}, built on {time}\n"
# load Xen dom0 as the executable, using multiboot for EFI & BIOS
if (
- efi and
- 'multibootPath' in bootspec.xen and
- len(bootspec.xen['multibootPath']) > 0 and
- os.path.exists(bootspec.xen['multibootPath'])
- ):
+ efi
+ and "multibootPath" in bootspec.xen
+ and len(bootspec.xen["multibootPath"]) > 0
+ and os.path.exists(bootspec.xen["multibootPath"])
+ ):
# Use the EFI protocol and generate Xen EFI configuration
# files and directories which are loaded by Xen's EFI binary
# directly.
@@ -247,84 +271,107 @@ def xen_config_entry(
# an entry-point in Xen's multiboot binary, and multiboot1
# doesn't work under EFI.
# Upstream Limine issue #482
- entry += 'protocol: efi\n'
- entry += (
- 'path: ' + generate_xen_efi_files(bootspec, gen) + '\n'
- )
+ entry += "protocol: efi\n"
+ entry += "path: " + generate_xen_efi_files(bootspec, gen) + "\n"
elif (
- 'multibootPath' in bootspec.xen and
- len(bootspec.xen['multibootPath']) > 0 and
- os.path.exists(bootspec.xen['multibootPath'])
- ):
+ "multibootPath" in bootspec.xen
+ and len(bootspec.xen["multibootPath"]) > 0
+ and os.path.exists(bootspec.xen["multibootPath"])
+ ):
# Use multiboot1 if not generating an EFI entry, as multiboot2
# doesn't work under Limine for booting Xen.
# Upstream Limine issue #483
- entry += 'protocol: multiboot\n'
+ entry += "protocol: multiboot\n"
entry += (
- 'path: ' + get_copied_path_uri(bootspec.xen['multibootPath'], f'xen/{gen}') + '\n'
+ "path: "
+ + get_copied_path_uri(bootspec.xen["multibootPath"], f"xen/{gen}")
+ + "\n"
)
# set params as the multiboot executable's parameters
- if 'params' in bootspec.xen and len(bootspec.xen['params']) > 0:
+ if "params" in bootspec.xen and len(bootspec.xen["params"]) > 0:
# TODO: Understand why the first argument is ignored below?
# --- to work around first argument being ignored
- entry += (
- 'cmdline: -- ' + ' '.join(bootspec.xen['params']).strip() + '\n'
- )
+ entry += "cmdline: -- " + " ".join(bootspec.xen["params"]).strip() + "\n"
# load the linux kernel as the second module
- entry += 'module_path: ' + get_kernel_uri(bootspec.kernel) + '\n'
+ entry += "module_path: " + get_kernel_uri(bootspec.kernel) + "\n"
# set kernel parameters as the parameters to the first module
# TODO: Understand why the first argument is ignored below?
# --- to work around first argument being ignored
entry += (
- 'module_string: -- '
- + ' '.join(['init=' + bootspec.init] + bootspec.kernelParams).strip()
- + '\n'
+ "module_string: -- "
+ + " ".join(["init=" + bootspec.init] + bootspec.kernelParams).strip()
+ + "\n"
)
if bootspec.initrd:
# the final module is the initrd
- entry += 'module_path: ' + get_kernel_uri(bootspec.initrd) + '\n'
+ entry += "module_path: " + get_kernel_uri(bootspec.initrd) + "\n"
+
+ for p in bootspec.extraInitrdPaths:
+ entry += f"module_path: boot():/{p}\n"
+
return entry
+
def config_entry(levels: int, bootspec: BootSpec, label: str, time: str) -> str:
- entry = '/' * levels + label + '\n'
- entry += 'protocol: linux\n'
- entry += f'comment: {bootspec.label}, built on {time}\n'
- entry += 'kernel_path: ' + get_kernel_uri(bootspec.kernel) + '\n'
- entry += 'cmdline: ' + ' '.join(['init=' + bootspec.init] + bootspec.kernelParams).strip() + '\n'
+ entry = "/" * levels + label + "\n"
+ entry += "protocol: linux\n"
+ entry += f"comment: {bootspec.label}, built on {time}\n"
+ entry += "kernel_path: " + get_kernel_uri(bootspec.kernel) + "\n"
+ entry += (
+ "cmdline: "
+ + " ".join(["init=" + bootspec.init] + bootspec.kernelParams).strip()
+ + "\n"
+ )
# Set framebuffer resolution for Linux boot entries if configured
- resolution = config('resolution')
+ resolution = config("resolution")
if resolution is not None:
- entry += f'resolution: {resolution}\n'
+ entry += f"resolution: {resolution}\n"
if bootspec.initrd:
- entry += f'module_path: ' + get_kernel_uri(bootspec.initrd) + '\n'
+ entry += f"module_path: " + get_kernel_uri(bootspec.initrd) + "\n"
+
+ for p in bootspec.extraInitrdPaths:
+ entry += f"module_path: boot():/{p}\n"
if bootspec.initrdSecrets:
- base_path = str(limine_install_dir) + '/kernels/'
- initrd_secrets_path = base_path + os.path.basename(bootspec.toplevel) + '-secrets'
+ base_path = str(limine_install_dir) + "/kernels/"
+ initrd_secrets_path = (
+ base_path + os.path.basename(bootspec.toplevel) + "-secrets"
+ )
if not os.path.exists(base_path):
os.makedirs(base_path)
old_umask = os.umask(0o137)
- initrd_secrets_path_temp = tempfile.mktemp(os.path.basename(bootspec.toplevel) + '-secrets')
+ initrd_secrets_path_temp = tempfile.mktemp(
+ os.path.basename(bootspec.toplevel) + "-secrets"
+ )
- if os.system(bootspec.initrdSecrets + " " + initrd_secrets_path_temp) != 0:
- print(f'warning: failed to create initrd secrets for "{label}"', file=sys.stderr)
- print(f'note: if this is an older generation there is nothing to worry about')
+ if subprocess.run([bootspec.initrdSecrets, initrd_secrets_path_temp]).returncode != 0:
+ print(
+ f'warning: failed to create initrd secrets for "{label}"',
+ file=sys.stderr,
+ )
+ print(
+ f"note: if this is an older generation there is nothing to worry about"
+ )
if os.path.exists(initrd_secrets_path_temp):
copy_file(initrd_secrets_path_temp, initrd_secrets_path)
os.unlink(initrd_secrets_path_temp)
- entry += 'module_path: ' + get_kernel_uri(initrd_secrets_path) + '\n'
+ entry += "module_path: " + get_kernel_uri(initrd_secrets_path) + "\n"
os.umask(old_umask)
return entry
def generate_config_entry(profile: str, gen: str, special: bool) -> str:
- time = datetime.datetime.fromtimestamp(os.stat(get_system_path(profile,gen), follow_symlinks=False).st_mtime).strftime("%F %H:%M:%S")
- boot_json = json.load(open(os.path.join(get_system_path(profile, gen), 'boot.json'), 'r'))
+ time = datetime.datetime.fromtimestamp(
+ os.stat(get_system_path(profile, gen), follow_symlinks=False).st_mtime
+ ).strftime("%F %H:%M:%S")
+ boot_json = json.load(
+ open(os.path.join(get_system_path(profile, gen), "boot.json"), "r")
+ )
boot_spec = bootjson_to_bootspec(boot_json)
specialisation_list = boot_spec.specialisations.items()
@@ -332,37 +379,37 @@ def generate_config_entry(profile: str, gen: str, special: bool) -> str:
entry = ""
# Xen, if configured, should be listed first for each generation
- if boot_spec.xen and 'version' in boot_spec.xen:
- xen_version = boot_spec.xen['version']
- if config('efiSupport'):
+ if boot_spec.xen and "version" in boot_spec.xen:
+ xen_version = boot_spec.xen["version"]
+ if config("efiSupport"):
entry += xen_config_entry(2, boot_spec, xen_version, gen, time, True)
entry += xen_config_entry(2, boot_spec, xen_version, gen, time, False)
if len(specialisation_list) > 0:
depth += 1
- entry += '/' * (depth-1)
+ entry += "/" * (depth - 1)
if special:
- entry += '+'
+ entry += "+"
- entry += f'Generation {gen}' + '\n'
- entry += config_entry(depth, boot_spec, f'Default', str(time))
+ entry += f"Generation {gen}" + "\n"
+ entry += config_entry(depth, boot_spec, f"Default", str(time))
else:
- entry += config_entry(depth, boot_spec, f'Generation {gen}', str(time))
+ entry += config_entry(depth, boot_spec, f"Generation {gen}", str(time))
for spec, spec_boot_spec in specialisation_list:
- entry += config_entry(depth, spec_boot_spec, f'{spec}', str(time))
+ entry += config_entry(depth, spec_boot_spec, f"{spec}", str(time))
return entry
def find_disk_device(part: str) -> str:
part = os.path.realpath(part)
- part = part.removeprefix('/dev/')
- disk = os.path.realpath(os.path.join('/sys', 'class', 'block', part))
+ part = part.removeprefix("/dev/")
+ disk = os.path.realpath(os.path.join("/sys", "class", "block", part))
disk = os.path.dirname(disk)
- return os.path.join('/dev', os.path.basename(disk))
+ return os.path.join("/dev", os.path.basename(disk))
def find_mounted_device(path: str) -> str:
@@ -403,34 +450,48 @@ def install_bootloader() -> None:
boot_fs = None
- for mount_point, fs in config('fileSystems').items():
- if mount_point == '/boot':
+ for mount_point, fs in config("fileSystems").items():
+ if mount_point == "/boot":
boot_fs = fs
- if config('efiSupport'):
- limine_install_dir = os.path.join(str(config('efiMountPoint')), 'limine')
- elif boot_fs and is_fs_type_supported(boot_fs['fsType']) and not is_encrypted(boot_fs['device']):
- limine_install_dir = '/boot/limine'
+ if config("efiSupport"):
+ limine_install_dir = os.path.join(str(config("efiMountPoint")), "limine")
+ elif (
+ boot_fs
+ and is_fs_type_supported(boot_fs["fsType"])
+ and not is_encrypted(boot_fs["device"])
+ ):
+ limine_install_dir = "/boot/limine"
else:
possible_causes = []
if not boot_fs:
- possible_causes.append(f'/limine on the boot partition (not present)')
+ possible_causes.append(f"/limine on the boot partition (not present)")
else:
- is_boot_fs_type_ok = is_fs_type_supported(boot_fs['fsType'])
- is_boot_fs_encrypted = is_encrypted(boot_fs['device'])
- possible_causes.append(f'/limine on the boot partition ({is_boot_fs_type_ok=} {is_boot_fs_encrypted=})')
+ is_boot_fs_type_ok = is_fs_type_supported(boot_fs["fsType"])
+ is_boot_fs_encrypted = is_encrypted(boot_fs["device"])
+ possible_causes.append(
+ f"/limine on the boot partition ({is_boot_fs_type_ok=} {is_boot_fs_encrypted=})"
+ )
- causes_str = textwrap.indent('\n'.join(possible_causes), ' - ')
+ causes_str = textwrap.indent("\n".join(possible_causes), " - ")
- raise Exception(textwrap.dedent('''
+ raise Exception(
+ textwrap.dedent("""
Could not find a valid place for Limine configuration files!'
Possible candidates that were ruled out:
- ''') + causes_str + textwrap.dedent('''
+ """)
+ + causes_str
+ + textwrap.dedent("""
Limine cannot be installed on a system without an unencrypted
partition formatted as FAT.
- '''))
+ """)
+ )
- if config('secureBoot', 'enable') and not config('secureBoot', 'autoGenerateKeys') and not os.path.exists("/var/lib/sbctl"):
+ if (
+ config("secureBoot", "enable")
+ and not config("secureBoot", "autoGenerateKeys")
+ and not os.path.exists("/var/lib/sbctl")
+ ):
print("There are no sbctl secure boot keys present. Please generate some.")
sys.exit(1)
@@ -441,65 +502,103 @@ def install_bootloader() -> None:
for file in files:
paths[os.path.join(dir, file)] = False
- limine_xen_dir = os.path.join(limine_install_dir, 'xen')
+ limine_xen_dir = os.path.join(limine_install_dir, "xen")
if os.path.exists(limine_xen_dir):
- print(f'cleaning {limine_xen_dir}')
+ print(f"cleaning {limine_xen_dir}")
shutil.rmtree(limine_xen_dir)
os.makedirs(limine_xen_dir)
- profiles = [('system', get_gens())]
+ profiles = [("system", get_gens())]
for profile in get_profiles():
profiles += [(profile, get_gens(profile))]
- timeout = config('timeout')
- editor_enabled = bool_to_yes_no(config('enableEditor'))
- hash_mismatch_panic = bool_to_yes_no(config('panicOnChecksumMismatch'))
+ timeout = config("timeout")
+ editor_enabled = bool_to_yes_no(config("enableEditor"))
+ hash_mismatch_panic = bool_to_yes_no(config("panicOnChecksumMismatch"))
last_gen = get_gens()[-1]
- last_gen_json = json.load(open(os.path.join(get_system_path('system', last_gen), 'boot.json'), 'r'))
+ last_gen_json = json.load(
+ open(os.path.join(get_system_path("system", last_gen), "boot.json"), "r")
+ )
last_gen_boot_spec = bootjson_to_bootspec(last_gen_json)
- config_file = str(config('extraConfig')) + '\n'
- config_file += textwrap.dedent(f'''
+ config_file = str(config("extraConfig")) + "\n"
+ config_file += textwrap.dedent(f"""
timeout: {timeout}
editor_enabled: {editor_enabled}
hash_mismatch_panic: {hash_mismatch_panic}
graphics: yes
default_entry: {3 if len(last_gen_boot_spec.specialisations.items()) > 0 else 2}
- ''')
+ """)
- for wallpaper in config('style', 'wallpapers'):
- config_file += f'''wallpaper: {get_copied_path_uri(wallpaper, 'wallpapers')}\n'''
+ for wallpaper in config("style", "wallpapers"):
+ config_file += (
+ f"""wallpaper: {get_copied_path_uri(wallpaper, "wallpapers")}\n"""
+ )
- config_file += option_from_config('wallpaper_style', ['style', 'wallpaperStyle'])
- config_file += option_from_config('backdrop', ['style', 'backdrop'])
+ config_file += option_from_config("wallpaper_style", ["style", "wallpaperStyle"])
+ config_file += option_from_config("backdrop", ["style", "backdrop"])
- config_file += option_from_config('interface_resolution', ['style', 'interface', 'resolution'])
- config_file += option_from_config('interface_branding', ['style', 'interface', 'branding'])
- config_file += option_from_config('interface_branding_colour', ['style', 'interface', 'brandingColor'])
- config_file += option_from_config('interface_help_colour', ['style', 'interface', 'helpColor'])
- config_file += option_from_config('interface_help_colour_bright', ['style', 'interface', 'helpColorBright'])
- config_file += option_from_config('interface_help_hidden', ['style', 'interface', 'helpHidden'])
- config_file += option_from_config('term_font_scale', ['style', 'graphicalTerminal', 'font', 'scale'])
- config_file += option_from_config('term_font_spacing', ['style', 'graphicalTerminal', 'font', 'spacing'])
- config_file += option_from_config('term_palette', ['style', 'graphicalTerminal', 'palette'])
- config_file += option_from_config('term_palette_bright', ['style', 'graphicalTerminal', 'brightPalette'])
- config_file += option_from_config('term_foreground', ['style', 'graphicalTerminal', 'foreground'])
- config_file += option_from_config('term_background', ['style', 'graphicalTerminal', 'background'])
- config_file += option_from_config('term_foreground_bright', ['style', 'graphicalTerminal', 'brightForeground'])
- config_file += option_from_config('term_background_bright', ['style', 'graphicalTerminal', 'brightBackground'])
- config_file += option_from_config('term_margin', ['style', 'graphicalTerminal', 'margin'])
- config_file += option_from_config('term_margin_gradient', ['style', 'graphicalTerminal', 'marginGradient'])
+ config_file += option_from_config(
+ "interface_resolution", ["style", "interface", "resolution"]
+ )
+ config_file += option_from_config(
+ "interface_branding", ["style", "interface", "branding"]
+ )
+ config_file += option_from_config(
+ "interface_branding_colour", ["style", "interface", "brandingColor"]
+ )
+ config_file += option_from_config(
+ "interface_help_colour", ["style", "interface", "helpColor"]
+ )
+ config_file += option_from_config(
+ "interface_help_colour_bright", ["style", "interface", "helpColorBright"]
+ )
+ config_file += option_from_config(
+ "interface_help_hidden", ["style", "interface", "helpHidden"]
+ )
+ config_file += option_from_config(
+ "term_font_scale", ["style", "graphicalTerminal", "font", "scale"]
+ )
+ config_file += option_from_config(
+ "term_font_spacing", ["style", "graphicalTerminal", "font", "spacing"]
+ )
+ config_file += option_from_config(
+ "term_palette", ["style", "graphicalTerminal", "palette"]
+ )
+ config_file += option_from_config(
+ "term_palette_bright", ["style", "graphicalTerminal", "brightPalette"]
+ )
+ config_file += option_from_config(
+ "term_foreground", ["style", "graphicalTerminal", "foreground"]
+ )
+ config_file += option_from_config(
+ "term_background", ["style", "graphicalTerminal", "background"]
+ )
+ config_file += option_from_config(
+ "term_foreground_bright", ["style", "graphicalTerminal", "brightForeground"]
+ )
+ config_file += option_from_config(
+ "term_background_bright", ["style", "graphicalTerminal", "brightBackground"]
+ )
+ config_file += option_from_config(
+ "term_margin", ["style", "graphicalTerminal", "margin"]
+ )
+ config_file += option_from_config(
+ "term_margin_gradient", ["style", "graphicalTerminal", "marginGradient"]
+ )
- config_file += textwrap.dedent(f'''
- # {config('distroName')} boot entries start here
- ''')
+ config_file += textwrap.dedent(f"""
+ # {config("distroName")} boot entries start here
+ """)
- for (profile, gens) in profiles:
- group_name = 'default profile' if profile == 'system' else f"profile '{profile}'"
- config_file += f'/+{config('distroName')} {group_name}\n'
+ for profile, gens in profiles:
+ group_name = (
+ "default profile" if profile == "system" else f"profile '{profile}'"
+ )
+ config_file += f"/+{config('distroName')} {group_name}\n"
isFirst = True
@@ -507,12 +606,12 @@ def install_bootloader() -> None:
config_file += generate_config_entry(profile, gen, isFirst)
isFirst = False
- config_file_path = os.path.join(limine_install_dir, 'limine.conf')
- config_file += f'\n# {config('distroName')} boot entries end here\n\n'
+ config_file_path = os.path.join(limine_install_dir, "limine.conf")
+ config_file += f"\n# {config('distroName')} boot entries end here\n\n"
- config_file += str(config('extraEntries'))
+ config_file += str(config("extraEntries"))
- with open(f"{config_file_path}.tmp", 'w') as file:
+ with open(f"{config_file_path}.tmp", "w") as file:
file.truncate()
file.write(config_file.strip())
file.flush()
@@ -521,150 +620,208 @@ def install_bootloader() -> None:
paths[config_file_path] = True
- for dest_path, source_path in config('additionalFiles').items():
- dest_path = os.path.join(limine_install_dir, dest_path)
+ for dest_path, source_path in config("additionalFiles").items():
+ dest_path = os.path.join(str(config("efiMountPoint")), dest_path)
copy_file(source_path, dest_path)
- limine_binary = os.path.join(str(config('liminePath')), 'bin', 'limine')
- cpu_family = config('hostArchitecture', 'family')
- if config('efiSupport'):
+ limine_binary = os.path.join(str(config("liminePath")), "bin", "limine")
+ cpu_family = config("hostArchitecture", "family")
+ if config("efiSupport"):
boot_file = ""
- if cpu_family == 'x86':
- if config('hostArchitecture', 'bits') == 32:
- boot_file = 'BOOTIA32.EFI'
- elif config('hostArchitecture', 'bits') == 64:
- boot_file = 'BOOTX64.EFI'
- elif cpu_family == 'arm':
- if config('hostArchitecture', 'arch') == 'armv8-a' and config('hostArchitecture', 'bits') == 64:
- boot_file = 'BOOTAA64.EFI'
+ if cpu_family == "x86":
+ if config("hostArchitecture", "bits") == 32:
+ boot_file = "BOOTIA32.EFI"
+ elif config("hostArchitecture", "bits") == 64:
+ boot_file = "BOOTX64.EFI"
+ elif cpu_family == "arm":
+ if (
+ config("hostArchitecture", "arch") == "armv8-a"
+ and config("hostArchitecture", "bits") == 64
+ ):
+ boot_file = "BOOTAA64.EFI"
else:
- raise Exception(f'Unsupported CPU arch: {config("hostArchitecture", "arch")}')
+ raise Exception(
+ f"Unsupported CPU arch: {config('hostArchitecture', 'arch')}"
+ )
else:
- raise Exception(f'Unsupported CPU family: {cpu_family}')
+ raise Exception(f"Unsupported CPU family: {cpu_family}")
- efi_path = os.path.join(str(config('liminePath')), 'share', 'limine', boot_file)
- dest_path = os.path.join(str(config('efiMountPoint')), 'efi', 'boot' if config('efiRemovable') else 'limine', boot_file)
+ efi_path = os.path.join(str(config("liminePath")), "share", "limine", boot_file)
+ dest_path = os.path.join(
+ str(config("efiMountPoint")),
+ "efi",
+ "boot" if config("efiRemovable") else "limine",
+ boot_file,
+ )
copy_file(efi_path, dest_path)
- if config('enrollConfig'):
+ if config("enrollConfig"):
b2sum = hashlib.blake2b()
b2sum.update(config_file.strip().encode())
try:
- subprocess.run([limine_binary, 'enroll-config', dest_path, b2sum.hexdigest()])
+ subprocess.run(
+ [limine_binary, "enroll-config", dest_path, b2sum.hexdigest()]
+ )
except:
- print('error: failed to enroll limine config.', file=sys.stderr)
+ print("error: failed to enroll limine config.", file=sys.stderr)
sys.exit(1)
- if config('secureBoot', 'enable'):
- sbctl = os.path.join(str(config('secureBoot', 'sbctl')), 'bin', 'sbctl')
- if not os.path.exists("/var/lib/sbctl") and config('secureBoot', 'autoGenerateKeys'):
- print('auto generating keys')
+ if config("secureBoot", "enable"):
+ sbctl = os.path.join(str(config("secureBoot", "sbctl")), "bin", "sbctl")
+ if not os.path.exists("/var/lib/sbctl/keys") and config(
+ "secureBoot", "autoGenerateKeys"
+ ):
+ print("auto generating keys")
try:
- subprocess.run([sbctl, 'create-keys'])
+ subprocess.run([sbctl, "create-keys"])
except:
- print('error: failed to create keys', file=sys.stderr)
+ print("error: failed to create keys", file=sys.stderr)
sys.exit(1)
- if config('secureBoot', 'autoEnrollKeys', 'enable'):
+ if config("secureBoot", "autoEnrollKeys", "enable"):
try:
- command = [sbctl, 'enroll-keys']
- command.extend(config('secureBoot', 'autoEnrollKeys', 'extraArgs'))
+ command = [sbctl, "enroll-keys"]
+ command.extend(
+ config("secureBoot", "autoEnrollKeys", "extraArgs")
+ )
subprocess.run(command)
except:
- print('error: failed to enroll keys', file=sys.stderr)
+ print("error: failed to enroll keys", file=sys.stderr)
sys.exit(1)
- print('signing limine...')
+ print("signing limine...")
try:
- subprocess.run([sbctl, 'sign', dest_path])
+ subprocess.run([sbctl, "sign", dest_path])
except:
- print('error: failed to sign limine', file=sys.stderr)
+ print("error: failed to sign limine", file=sys.stderr)
sys.exit(1)
- if not config('efiRemovable') and not config('canTouchEfiVariables'):
- print('warning: boot.loader.efi.canTouchEfiVariables is set to false while boot.loader.limine.efiInstallAsRemovable.\n This may render the system unbootable.')
+ if not config("efiRemovable") and not config("canTouchEfiVariables"):
+ print(
+ "warning: boot.loader.efi.canTouchEfiVariables is set to false while boot.loader.limine.efiInstallAsRemovable.\n This may render the system unbootable."
+ )
- if config('canTouchEfiVariables'):
- if config('efiRemovable'):
- print('note: boot.loader.limine.efiInstallAsRemovable is true, no need to add EFI entry.')
+ if config("canTouchEfiVariables"):
+ if config("efiRemovable"):
+ print(
+ "note: boot.loader.limine.efiInstallAsRemovable is true, no need to add EFI entry."
+ )
else:
- efibootmgr = os.path.join(str(config('efiBootMgrPath')), 'bin', 'efibootmgr')
- efi_partition = find_mounted_device(str(config('efiMountPoint')))
+ efibootmgr = os.path.join(
+ str(config("efiBootMgrPath")), "bin", "efibootmgr"
+ )
+ efi_partition = find_mounted_device(str(config("efiMountPoint")))
efi_disk = find_disk_device(efi_partition)
- efibootmgr_output = subprocess.check_output([efibootmgr], stderr=subprocess.STDOUT, universal_newlines=True)
+ efibootmgr_output = subprocess.check_output(
+ [efibootmgr], stderr=subprocess.STDOUT, universal_newlines=True
+ )
# Check the output of `efibootmgr` to find if limine is already installed and present in the boot record
limine_boot_entry = None
- if matches := re.findall(r'Boot([0-9a-fA-F]{4})\*? Limine', efibootmgr_output):
+ if matches := re.findall(
+ r"Boot([0-9a-fA-F]{4})\*? Limine", efibootmgr_output
+ ):
limine_boot_entry = matches[0]
# If there's already a Limine entry, replace it
if limine_boot_entry:
- boot_order = re.findall(r'BootOrder: ((?:[0-9a-fA-F]{4},?)*)', efibootmgr_output)[0]
+ boot_order = re.findall(
+ r"BootOrder: ((?:[0-9a-fA-F]{4},?)*)", efibootmgr_output
+ )[0]
- efibootmgr_output = subprocess.check_output([
- efibootmgr,
- '-b', limine_boot_entry,
- '-B',
- ], stderr=subprocess.STDOUT, universal_newlines=True)
+ efibootmgr_output = subprocess.check_output(
+ [
+ efibootmgr,
+ "-b",
+ limine_boot_entry,
+ "-B",
+ ],
+ stderr=subprocess.STDOUT,
+ universal_newlines=True,
+ )
- efibootmgr_output = subprocess.check_output([
- efibootmgr,
- '-c',
- '-b', limine_boot_entry,
- '-d', efi_disk,
- '-p', efi_partition.removeprefix(efi_disk).removeprefix('p'),
- '-l', f'\\efi\\limine\\{boot_file}',
- '-L', 'Limine',
- '-o', boot_order,
- ], stderr=subprocess.STDOUT, universal_newlines=True)
+ efibootmgr_output = subprocess.check_output(
+ [
+ efibootmgr,
+ "-c",
+ "-b",
+ limine_boot_entry,
+ "-d",
+ efi_disk,
+ "-p",
+ efi_partition.removeprefix(efi_disk).removeprefix("p"),
+ "-l",
+ f"\\efi\\limine\\{boot_file}",
+ "-L",
+ "Limine",
+ "-o",
+ boot_order,
+ ],
+ stderr=subprocess.STDOUT,
+ universal_newlines=True,
+ )
else:
- efibootmgr_output = subprocess.check_output([
- efibootmgr,
- '-c',
- '-d', efi_disk,
- '-p', efi_partition.removeprefix(efi_disk).removeprefix('p'),
- '-l', f'\\efi\\limine\\{boot_file}',
- '-L', 'Limine',
- ], stderr=subprocess.STDOUT, universal_newlines=True)
+ efibootmgr_output = subprocess.check_output(
+ [
+ efibootmgr,
+ "-c",
+ "-d",
+ efi_disk,
+ "-p",
+ efi_partition.removeprefix(efi_disk).removeprefix("p"),
+ "-l",
+ f"\\efi\\limine\\{boot_file}",
+ "-L",
+ "Limine",
+ ],
+ stderr=subprocess.STDOUT,
+ universal_newlines=True,
+ )
- if config('biosSupport'):
- if cpu_family != 'x86':
- raise Exception(f'Unsupported CPU family for BIOS install: {cpu_family}')
+ if config("biosSupport"):
+ if cpu_family != "x86":
+ raise Exception(f"Unsupported CPU family for BIOS install: {cpu_family}")
- limine_sys = os.path.join(str(config('liminePath')), 'share', 'limine', 'limine-bios.sys')
- limine_sys_dest = os.path.join(limine_install_dir, 'limine-bios.sys')
+ limine_sys = os.path.join(
+ str(config("liminePath")), "share", "limine", "limine-bios.sys"
+ )
+ limine_sys_dest = os.path.join(limine_install_dir, "limine-bios.sys")
copy_file(limine_sys, limine_sys_dest)
- device = str(config('biosDevice'))
+ device = str(config("biosDevice"))
- if device == 'nodev':
- print("note: boot.loader.limine.biosSupport is set, but device is set to nodev, only the stage 2 bootloader will be installed.", file=sys.stderr)
+ if device == "nodev":
+ print(
+ "note: boot.loader.limine.biosSupport is set, but device is set to nodev, only the stage 2 bootloader will be installed.",
+ file=sys.stderr,
+ )
return
- limine_deploy_args: List[str] = [limine_binary, 'bios-install', device]
+ limine_deploy_args: List[str] = [limine_binary, "bios-install", device]
- if config('partitionIndex'):
- limine_deploy_args.append(str(config('partitionIndex')))
+ if config("partitionIndex"):
+ limine_deploy_args.append(str(config("partitionIndex")))
- if config('force'):
- limine_deploy_args.append('--force')
+ if config("force"):
+ limine_deploy_args.append("--force")
try:
subprocess.run(limine_deploy_args)
except:
raise Exception(
- 'Failed to deploy BIOS stage 1 Limine bootloader!\n' +
- 'You might want to try enabling the `boot.loader.limine.force` option.')
+ "Failed to deploy BIOS stage 1 Limine bootloader!\n"
+ + "You might want to try enabling the `boot.loader.limine.force` option."
+ )
print("removing unused boot files...")
for path in paths:
if not paths[path] and os.path.exists(path):
os.remove(path)
+
def main() -> None:
try:
install_bootloader()
@@ -675,7 +832,11 @@ def main() -> None:
# event sync the efi filesystem after each update.
rc = libc.syncfs(os.open(f"{str(config('efiMountPoint'))}", os.O_RDONLY))
if rc != 0:
- print(f"could not sync {str(config('efiMountPoint'))}: {os.strerror(rc)}", file=sys.stderr)
+ print(
+ f"could not sync {str(config('efiMountPoint'))}: {os.strerror(rc)}",
+ file=sys.stderr,
+ )
-if __name__ == '__main__':
+
+if __name__ == "__main__":
main()
diff --git a/nixos/modules/system/boot/loader/limine/limine.nix b/nixos/modules/system/boot/loader/limine/limine.nix
index c9725a6fee00..956fa78800ef 100644
--- a/nixos/modules/system/boot/loader/limine/limine.nix
+++ b/nixos/modules/system/boot/loader/limine/limine.nix
@@ -205,6 +205,17 @@ in
'';
};
+ extraInstallCommands = lib.mkOption {
+ default = "";
+ type = lib.types.lines;
+ description = ''
+ Additional shell commands inserted in the bootloader installer
+ script after generating menu entries. It can be used to expand
+ on extra boot entries that cannot incorporate certain pieces of
+ information (such as the resulting `init=` kernel parameter).
+ '';
+ };
+
secureBoot = {
enable = lib.mkEnableOption null // {
description = ''
@@ -443,14 +454,25 @@ in
system = {
boot.loader.id = "limine";
- build.installBootLoader = pkgs.replaceVarsWith {
- src = ./limine-install.py;
- isExecutable = true;
- replacements = {
- python3 = pkgs.python3.withPackages (python-packages: [ python-packages.psutil ]);
- configPath = limineInstallConfig;
- };
- };
+ build.installBootLoader =
+ let
+ install = pkgs.replaceVarsWith {
+ src = ./limine-install.py;
+ isExecutable = true;
+ replacements = {
+ python3 = pkgs.python3.withPackages (python-packages: [ python-packages.psutil ]);
+ configPath = limineInstallConfig;
+ };
+ };
+
+ final = pkgs.writeScript "limine-install.sh" ''
+ #!${pkgs.runtimeShell}
+ set -euo pipefail
+ ${install} "$@"
+ ${cfg.extraInstallCommands}
+ '';
+ in
+ final;
};
})
(lib.mkIf (cfg.enable && cfg.secureBoot.enable) {
diff --git a/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py b/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
index 06c15ee6674b..3e917a7cf48f 100644
--- a/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
+++ b/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
@@ -45,6 +45,7 @@ BOOT_COUNTING = "@bootCounting@" == "True"
class BootSpec:
init: Path
initrd: Path
+ extraInitrdPaths: list[Path]
kernel: Path
kernelParams: list[str] # noqa: N815
label: str
@@ -242,6 +243,38 @@ def run(
return subprocess.run(cmd, check=True, text=True, stdout=stdout, stderr=sys.stderr)
+def bootctl_varlink_call(method: str, parameters: dict[str, Any]) -> dict[str, Any]:
+ # Spawn bootctl as a Varlink server on stdio, mirroring what varlinkctl
+ # does when given an executable path. We cannot talk to a running
+ # systemd-bootctl.socket because that would use bootctl from the booted
+ # system rather than the closure we are switching to, does not let us set
+ # SYSTEMD_ESP_PATH/SYSTEMD_XBOOTLDR_PATH, and is unavailable inside
+ # nixos-enter anyway.
+ env = os.environ | {
+ "SYSTEMD_VARLINK_LISTEN": "-",
+ "SYSTEMD_ESP_PATH": str(EFI_SYS_MOUNT_POINT),
+ }
+ if BOOT_MOUNT_POINT != EFI_SYS_MOUNT_POINT:
+ env["SYSTEMD_XBOOTLDR_PATH"] = str(BOOT_MOUNT_POINT)
+
+ proc = subprocess.Popen(
+ [f"{SYSTEMD}/bin/bootctl"],
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=sys.stderr,
+ env=env,
+ )
+ assert proc.stdin is not None and proc.stdout is not None
+ request = json.dumps({"method": method, "parameters": parameters}).encode()
+ out, _ = proc.communicate(request + b"\0")
+ reply, _, _ = out.partition(b"\0")
+ if not reply:
+ raise RuntimeError(
+ f"bootctl exited with status {proc.returncode} without a Varlink reply"
+ )
+ return json.loads(reply)
+
+
def generation_dir(profile: str | None, generation: int) -> Path:
if profile:
return Path(
@@ -306,9 +339,7 @@ def get_bootspec(profile: str | None, generation: int) -> BootSpec | None:
try:
bootspec_json = json.load(f)
except ValueError as e:
- print(
- f"error: Malformed Json: {e}, in {boot_json_path}", file=sys.stderr
- )
+ print(f"error: Malformed Json: {e}, in {boot_json_path}", file=sys.stderr)
sys.exit(1)
return bootspec_from_json(bootspec_json)
@@ -320,6 +351,11 @@ def bootspec_from_json(bootspec_json: dict[str, Any]) -> BootSpec:
sortKey = systemdBootExtension.get("sortKey", "nixos")
devicetree = systemdBootExtension.get("devicetree")
+ extraInitrdExtension = bootspec_json.get("org.nixos.extra-initrd.v1", {})
+ extraInitrdPaths = list(
+ map(lambda path: Path(path), extraInitrdExtension.get("paths", []))
+ )
+
if devicetree:
devicetree = Path(devicetree)
@@ -332,6 +368,7 @@ def bootspec_from_json(bootspec_json: dict[str, Any]) -> BootSpec:
specialisations=specialisations,
sortKey=sortKey,
devicetree=devicetree,
+ extraInitrdPaths=extraInitrdPaths,
)
@@ -374,16 +411,21 @@ def boot_file(
specialisation=" (%s)" % specialisation if specialisation else "",
)
description = f"Generation {generation} {bootspec.label}, built on {build_date}"
- boot_entry = [
- f"title {title}",
- f"version {description}",
- f"linux /{str(kernel.path)}",
- f"initrd /{str(initrd.path)}",
- f"options {kernel_params}",
- f"machine-id {machine_id}" if machine_id is not None else None,
- f"devicetree /{str(devicetree.path)}" if devicetree is not None else None,
- f"sort-key {bootspec.sortKey}",
- ]
+ boot_entry = (
+ [
+ f"title {title}",
+ f"version {description}",
+ f"linux /{str(kernel.path)}",
+ f"initrd /{str(initrd.path)}",
+ ]
+ + list(map(lambda initrd: f"initrd /{initrd}", bootspec.extraInitrdPaths))
+ + [
+ f"options {kernel_params}",
+ f"machine-id {machine_id}" if machine_id is not None else None,
+ f"devicetree /{str(devicetree.path)}" if devicetree is not None else None,
+ f"sort-key {bootspec.sortKey}",
+ ]
+ )
contents = "\n".join(filter(None, boot_entry))
entry, bootctl_id = BootFile.from_entry(contents.encode("utf-8"))
return (list(filter(None, [kernel, initrd, devicetree, entry])), bootctl_id)
@@ -469,55 +511,29 @@ def install_bootloader(args: argparse.Namespace) -> None:
+ ["install"]
)
else:
- # Update bootloader to latest if needed
- available_out = run(
- [f"{SYSTEMD}/bin/bootctl", "--version"], stdout=subprocess.PIPE
- ).stdout.split()[2]
- installed_out = run(
- [f"{SYSTEMD}/bin/bootctl", f"--esp-path={EFI_SYS_MOUNT_POINT}", "status"],
- stdout=subprocess.PIPE,
- ).stdout
+ # Let bootctl compare versions itself. Over Varlink, an already
+ # current binary comes back as an io.systemd.System error carrying
+ # ESTALE, which we can tell apart from real failures.
+ params: dict[str, Any] = {"operation": "update"}
+ if not CAN_TOUCH_EFI_VARIABLES:
+ params["touchVariables"] = False
+ if GRACEFUL:
+ params["graceful"] = True
+ reply = bootctl_varlink_call("io.systemd.BootControl.Install", params)
- # See status_binaries() in systemd bootctl.c for code which generates this
- # Matches
- # Available Boot Loaders on ESP:
- # ESP: /boot (/dev/disk/by-partuuid/9b39b4c4-c48b-4ebf-bfea-a56b2395b7e0)
- # File: └─/EFI/systemd/systemd-bootx64.efi (systemd-boot 255.2)
- # But also:
- # Available Boot Loaders on ESP:
- # ESP: /boot (/dev/disk/by-partuuid/9b39b4c4-c48b-4ebf-bfea-a56b2395b7e0)
- # File: ├─/EFI/systemd/HashTool.efi
- # └─/EFI/systemd/systemd-bootx64.efi (systemd-boot 255.2)
- installed_match = re.search(
- r"^\W+.*/EFI/(?:BOOT|systemd)/.*\.efi \(systemd-boot ([\d.]+[^)]*)\)$",
- installed_out,
- re.IGNORECASE | re.MULTILINE,
- )
-
- available_match = re.search(r"^\((.*)\)$", available_out)
-
- if installed_match is None:
- raise Exception(
- "Could not find any previously installed systemd-boot. If you are switching to systemd-boot from a different bootloader, you need to run `nixos-rebuild switch --install-bootloader`"
- )
-
- if available_match is None:
- raise Exception("could not determine systemd-boot version")
-
- installed_version = installed_match.group(1)
- available_version = available_match.group(1)
-
- if installed_version < available_version:
- print(
- "updating systemd-boot from %s to %s"
- % (installed_version, available_version),
- file=sys.stderr,
- )
- run(
- [f"{SYSTEMD}/bin/bootctl", f"--esp-path={EFI_SYS_MOUNT_POINT}"]
- + bootctl_flags
- + ["update"]
- )
+ error = reply.get("error")
+ if error is not None:
+ error_params = reply.get("parameters") or {}
+ if (
+ error == "io.systemd.System"
+ and error_params.get("errno") == errno.ESTALE
+ ):
+ # Same or newer boot loader version already in place.
+ pass
+ else:
+ raise RuntimeError(
+ f"bootctl update failed: {error} {json.dumps(error_params)}"
+ )
(BOOT_MOUNT_POINT / NIXOS_DIR).mkdir(parents=True, exist_ok=True)
(BOOT_MOUNT_POINT / "loader/entries").mkdir(parents=True, exist_ok=True)
diff --git a/nixos/modules/system/boot/luksroot.nix b/nixos/modules/system/boot/luksroot.nix
index 18116432d358..9108f0e6d2a2 100644
--- a/nixos/modules/system/boot/luksroot.nix
+++ b/nixos/modules/system/boot/luksroot.nix
@@ -1100,7 +1100,9 @@ in
}
{
assertion = config.boot.initrd.systemd.enable -> all (dev: dev.preLVM) (attrValues luks.devices);
- message = "boot.initrd.luks.devices..preLVM is not used by systemd stage 1.";
+ message = ''
+ boot.initrd.luks.devices..preLVM has no effect with systemd stage 1. It can be safely removed from your configuration, and systemd will discover LVM devices automatically at runtime, whether they come before or after LUKS. The preLVM option will be removed in 26.11 along with scripted stage 1.
+ '';
}
{
assertion =
diff --git a/nixos/modules/system/boot/networkd.nix b/nixos/modules/system/boot/networkd.nix
index 2b14caac86fa..4a22d6585eb9 100644
--- a/nixos/modules/system/boot/networkd.nix
+++ b/nixos/modules/system/boot/networkd.nix
@@ -4231,8 +4231,10 @@ let
"systemd-networkd-wait-online@.service"
"systemd-networkd.service"
"systemd-networkd.socket"
- "systemd-networkd-persistent-storage.service"
+ "systemd-networkd-resolve-hook.socket"
"systemd-networkd-varlink-metrics.socket"
+ "systemd-networkd-varlink.socket"
+ "systemd-networkd-persistent-storage.service"
];
systemd.sockets.systemd-networkd-varlink-metrics.wantedBy = [ "sockets.target" ];
@@ -4314,6 +4316,9 @@ let
systemd.additionalUpstreamUnits = [
"systemd-networkd-wait-online.service"
"systemd-networkd.service"
+ "systemd-networkd-resolve-hook.socket"
+ "systemd-networkd-varlink-metrics.socket"
+ "systemd-networkd-varlink.socket"
"systemd-networkd.socket"
"systemd-network-generator.service"
"network-online.target"
diff --git a/nixos/modules/system/boot/plymouth.nix b/nixos/modules/system/boot/plymouth.nix
index 3636503992c5..f4923c55e149 100644
--- a/nixos/modules/system/boot/plymouth.nix
+++ b/nixos/modules/system/boot/plymouth.nix
@@ -68,7 +68,7 @@ let
configFile = pkgs.writeText "plymouthd.conf" ''
[Daemon]
- ShowDelay=0
+ ShowDelay=${toString cfg.showDelay}
DeviceTimeout=8
Theme=${cfg.theme}
${cfg.extraConfig}
@@ -166,6 +166,15 @@ in
'';
};
+ showDelay = mkOption {
+ type = types.numbers.nonnegative;
+ default = 0;
+ example = 0.5;
+ description = ''
+ Time (in seconds) to delay the splash screen.
+ '';
+ };
+
extraConfig = mkOption {
type = types.lines;
default = "";
diff --git a/nixos/modules/system/boot/resolved.nix b/nixos/modules/system/boot/resolved.nix
index da2b57285a76..5e4dbe7d97f1 100644
--- a/nixos/modules/system/boot/resolved.nix
+++ b/nixos/modules/system/boot/resolved.nix
@@ -30,9 +30,8 @@ let
dnsmasqResolve = config.services.dnsmasq.enable && config.services.dnsmasq.resolveLocalQueries;
- transformSettings =
- settings:
- lib.mapAttrs (
+ transformSettings = settings: {
+ Resolve = lib.mapAttrs (
key: value:
# concat lists for options that should result in space-separated values
if
@@ -46,7 +45,8 @@ let
concatStringsSep " " value
else
value
- ) settings;
+ ) settings.Resolve;
+ };
resolvedConf = settingsToSections (transformSettings cfg.settings);
in
@@ -185,7 +185,11 @@ in
# added with order 501 to allow modules to go before with mkBefore
system.nssDatabases.hosts = (mkOrder 501 [ "resolve [!UNAVAIL=return]" ]);
- systemd.additionalUpstreamSystemUnits = [ "systemd-resolved.service" ];
+ systemd.additionalUpstreamSystemUnits = [
+ "systemd-resolved.service"
+ "systemd-resolved-monitor.socket"
+ "systemd-resolved-varlink.socket"
+ ];
systemd.services.systemd-resolved = {
wantedBy = [ "sysinit.target" ];
@@ -248,7 +252,12 @@ in
tmpfiles.settings.systemd-resolved-stub."/etc/resolv.conf".L.argument =
"/run/systemd/resolve/stub-resolv.conf";
- additionalUpstreamUnits = [ "systemd-resolved.service" ];
+ additionalUpstreamUnits = [
+ "systemd-resolved.service"
+ "systemd-resolved-monitor.socket"
+ "systemd-resolved-varlink.socket"
+ ];
+
users.systemd-resolve = { };
groups.systemd-resolve = { };
storePaths = [ "${config.boot.initrd.systemd.package}/lib/systemd/systemd-resolved" ];
diff --git a/nixos/modules/system/boot/systemd.nix b/nixos/modules/system/boot/systemd.nix
index 75b4143d6810..acfb213b98e0 100644
--- a/nixos/modules/system/boot/systemd.nix
+++ b/nixos/modules/system/boot/systemd.nix
@@ -65,6 +65,7 @@ let
# Udev.
"systemd-udevd-control.socket"
"systemd-udevd-kernel.socket"
+ "systemd-udevd-varlink.socket"
"systemd-udevd.service"
]
++ (optional (!config.boot.isContainer) "systemd-udev-trigger.service")
@@ -157,6 +158,8 @@ let
"systemd-ask-password-wall.service"
# Varlink APIs
+ "systemd-ask-password@.service"
+ "systemd-ask-password.socket"
]
++ lib.optionals cfg.package.withBootloader [
"systemd-bootctl@.service"
@@ -178,11 +181,13 @@ let
]
++ optionals cfg.package.withImportd [
"systemd-importd.service"
+ "systemd-importd.socket"
]
++ optionals cfg.package.withMachined [
"machine.slice"
"machines.target"
"systemd-machined.service"
+ "systemd-machined.socket"
]
++ optionals cfg.package.withNspawn [
"systemd-nspawn@.service"
@@ -191,6 +196,9 @@ let
# Misc.
"systemd-sysctl.service"
"systemd-machine-id-commit.service"
+
+ "systemd-mute-console@.service"
+ "systemd-mute-console.socket"
]
++ optionals cfg.package.withTimedated [
"dbus-org.freedesktop.timedate1.service"
@@ -209,6 +217,11 @@ let
"dbus-org.freedesktop.portable1.service"
"systemd-portabled.service"
]
+ ++ optionals cfg.package.withRepart [
+ # Varlink APIs
+ "systemd-repart@.service"
+ "systemd-repart.socket"
+ ]
++ [
"systemd-exit.service"
"systemd-update-done.service"
@@ -221,6 +234,8 @@ let
"factory-reset.target"
"systemd-factory-reset-request.service"
"systemd-factory-reset-reboot.service"
+ "systemd-factory-reset@.service"
+ "systemd-factory-reset.socket"
]
++ cfg.additionalUpstreamSystemUnits;
diff --git a/nixos/modules/system/boot/systemd/fido2.nix b/nixos/modules/system/boot/systemd/fido2.nix
index 02b4a1389fba..e665d1bbb793 100644
--- a/nixos/modules/system/boot/systemd/fido2.nix
+++ b/nixos/modules/system/boot/systemd/fido2.nix
@@ -27,6 +27,8 @@ in
"${cfg.package}/lib/udev/fido_id"
"${cfg.package}/lib/cryptsetup/libcryptsetup-token-systemd-fido2.so"
"${pkgs.libfido2}/lib/libfido2.so.1"
+ # dlopened by the libpcsclite.so.1 shim, invisible to make-initrd-ng
+ "${lib.getLib pkgs.pcsclite}/lib/libpcsclite_real.so.1"
];
};
}
diff --git a/nixos/modules/system/boot/systemd/initrd.nix b/nixos/modules/system/boot/systemd/initrd.nix
index f242cb8c6a5b..311bf9cc9aa1 100644
--- a/nixos/modules/system/boot/systemd/initrd.nix
+++ b/nixos/modules/system/boot/systemd/initrd.nix
@@ -124,6 +124,16 @@ let
jobScripts = concatLists (
mapAttrsToList (_: unit: unit.jobScripts or [ ]) (filterAttrs (_: v: v.enable) cfg.services)
);
+ unitEnv = pkgs.buildEnv {
+ name = "initrd-unit-env";
+ paths = concatLists (
+ mapAttrsToList (_: unit: unit.path or [ ]) (filterAttrs (_: v: v.enable) cfg.services)
+ );
+ pathsToLink = [
+ "/bin"
+ "/sbin"
+ ];
+ };
stage1Units = generateUnits {
type = "initrd";
@@ -636,6 +646,7 @@ in
"${pkgs.bashNonInteractive}/bin"
]
++ jobScripts
+ ++ [ unitEnv ]
++ map (c: removeAttrs c [ "text" ]) (builtins.attrValues cfg.contents)
++ lib.optional (pkgs.stdenv.hostPlatform.libc == "glibc") "${pkgs.glibc}/lib/libnss_files.so.2";
@@ -763,6 +774,7 @@ in
];
};
serviceConfig.Type = "oneshot";
+ serviceConfig.EnvironmentFile = "-/etc/switch-root.conf";
description = "NixOS Activation";
script = # bash
@@ -770,6 +782,14 @@ in
set -uo pipefail
export PATH="/bin:${cfg.package.util-linux}/bin"
+ # A non-NixOS closure (e.g. init=/bin/sh) has no prepare-root;
+ # initrd-find-nixos-closure records this as a non-empty NEW_INIT.
+ # Skip activation and let initrd-switch-root hand over to it directly.
+ if [ -n "''${NEW_INIT:-}" ]; then
+ echo "$NEW_INIT is not a NixOS system - not activating"
+ exit 0
+ fi
+
closure="$(realpath /nixos-closure)"
# Initialize the system
diff --git a/nixos/modules/system/boot/systemd/journald-gateway.nix b/nixos/modules/system/boot/systemd/journald-gateway.nix
index cede0a65f510..76a858e1b471 100644
--- a/nixos/modules/system/boot/systemd/journald-gateway.nix
+++ b/nixos/modules/system/boot/systemd/journald-gateway.nix
@@ -9,16 +9,19 @@ let
cfg = config.services.journald.gateway;
cliArgs = lib.cli.toCommandLineShellGNU { } {
- # If either of these are null / false, they are not passed in the command-line
+ # If either of these are false, they are not passed in the command-line
inherit (cfg)
- cert
- key
- trust
system
user
merge
;
};
+
+ tlsOptionRemovedMessage = ''
+ systemd in Nixpkgs is built without GnuTLS, so systemd-journal-gatewayd
+ cannot serve HTTPS. Use a reverse proxy (such as nginx) to terminate TLS
+ in front of the gateway if you need encrypted access.
+ '';
in
{
imports = [
@@ -26,9 +29,12 @@ in
[ "services" "journald" "enableHttpGateway" ]
[ "services" "journald" "gateway" "enable" ]
)
+ (lib.mkRemovedOptionModule [ "services" "journald" "gateway" "cert" ] tlsOptionRemovedMessage)
+ (lib.mkRemovedOptionModule [ "services" "journald" "gateway" "key" ] tlsOptionRemovedMessage)
+ (lib.mkRemovedOptionModule [ "services" "journald" "gateway" "trust" ] tlsOptionRemovedMessage)
];
- meta.maintainers = [ lib.maintainers.raitobezarius ];
+ meta.maintainers = [ ];
options.services.journald.gateway = {
enable = lib.mkEnableOption "the HTTP gateway to the journal";
@@ -40,47 +46,6 @@ in
'';
};
- cert = lib.mkOption {
- default = null;
- type = with lib.types; nullOr str;
- description = ''
- The path to a file or `AF_UNIX` stream socket to read the server
- certificate from.
-
- The certificate must be in PEM format. This option switches
- `systemd-journal-gatewayd` into HTTPS mode and must be used together
- with {option}`services.journald.gateway.key`.
- '';
- };
-
- key = lib.mkOption {
- default = null;
- type = with lib.types; nullOr str;
- description = ''
- Specify the path to a file or `AF_UNIX` stream socket to read the
- secret server key corresponding to the certificate specified with
- {option}`services.journald.gateway.cert` from.
-
- The key must be in PEM format.
-
- This key should not be world-readable, and must be readably by the
- `systemd-journal-gateway` user.
- '';
- };
-
- trust = lib.mkOption {
- default = null;
- type = with lib.types; nullOr str;
- description = ''
- Specify the path to a file or `AF_UNIX` stream socket to read a CA
- certificate from.
-
- The certificate must be in PEM format.
-
- Setting this option enforces client certificate checking.
- '';
- };
-
system = lib.mkOption {
default = false;
type = lib.types.bool;
diff --git a/nixos/modules/system/boot/systemd/journald-remote.nix b/nixos/modules/system/boot/systemd/journald-remote.nix
index 7216c179b3a0..fbb444b6400b 100644
--- a/nixos/modules/system/boot/systemd/journald-remote.nix
+++ b/nixos/modules/system/boot/systemd/journald-remote.nix
@@ -12,25 +12,30 @@ let
cliArgs = lib.cli.toCommandLineShellGNU { } {
inherit (cfg) output;
# "-3" specifies the file descriptor from the .socket unit.
- "listen-${cfg.listen}" = "-3";
+ "listen-http" = "-3";
};
+
+ tlsOptionRemovedMessage = ''
+ systemd in Nixpkgs is built without GnuTLS, so systemd-journal-remote
+ cannot accept HTTPS connections or validate client certificates. Use a
+ reverse proxy (such as nginx) to terminate TLS in front of journal-remote
+ if you need encrypted ingestion.
+ '';
in
{
- meta.maintainers = [ lib.maintainers.raitobezarius ];
+ meta.maintainers = [ ];
+ imports = [
+ (lib.mkRemovedOptionModule [
+ "services"
+ "journald"
+ "remote"
+ "listen"
+ ] tlsOptionRemovedMessage)
+ ];
+
options.services.journald.remote = {
enable = lib.mkEnableOption "receiving systemd journals from the network";
- listen = lib.mkOption {
- default = "https";
- type = lib.types.enum [
- "https"
- "http"
- ];
- description = ''
- Which protocol to listen to.
- '';
- };
-
output = lib.mkOption {
default = "/var/log/journal/remote/";
type = lib.types.str;
@@ -50,10 +55,6 @@ in
type = lib.types.port;
description = ''
The port to listen to.
-
- Note that this option is used only if
- {option}`services.journald.upload.listen` is configured to be either
- "https" or "http".
'';
};
@@ -92,55 +93,28 @@ in
one output journal file is used.
'';
};
-
- ServerKeyFile = lib.mkOption {
- default = "/etc/ssl/private/journal-remote.pem";
- type = lib.types.str;
- description = ''
- A path to a SSL secret key file in PEM format.
-
- Note that due to security reasons, `systemd-journal-remote` will
- refuse files from the world-readable `/nix/store`. This file
- should be readable by the "" user.
-
- This option can be used with `listen = "https"`. If the path
- refers to an `AF_UNIX` stream socket in the file system a
- connection is made to it and the key read from it.
- '';
- };
-
- ServerCertificateFile = lib.mkOption {
- default = "/etc/ssl/certs/journal-remote.pem";
- type = lib.types.str;
- description = ''
- A path to a SSL certificate file in PEM format.
-
- This option can be used with `listen = "https"`. If the path
- refers to an `AF_UNIX` stream socket in the file system a
- connection is made to it and the certificate read from it.
- '';
- };
-
- TrustedCertificateFile = lib.mkOption {
- default = "/etc/ssl/ca/trusted.pem";
- type = lib.types.str;
- description = ''
- A path to a SSL CA certificate file in PEM format, or `all`.
-
- If `all` is set, then client certificate checking will be
- disabled.
-
- This option can be used with `listen = "https"`. If the path
- refers to an `AF_UNIX` stream socket in the file system a
- connection is made to it and the certificate read from it.
- '';
- };
};
};
};
};
config = lib.mkIf cfg.enable {
+ assertions =
+ map
+ (key: {
+ assertion = !(cfg.settings ? Remote.${key});
+ message = ''
+ The option definition `services.journald.remote.settings.Remote.${key}'
+ no longer has any effect; please remove it.
+ ${tlsOptionRemovedMessage}
+ '';
+ })
+ [
+ "ServerKeyFile"
+ "ServerCertificateFile"
+ "TrustedCertificateFile"
+ ];
+
systemd.additionalUpstreamSystemUnits = [
"systemd-journal-remote.service"
"systemd-journal-remote.socket"
diff --git a/nixos/modules/system/boot/systemd/journald-upload.nix b/nixos/modules/system/boot/systemd/journald-upload.nix
index 8cd67918f4f0..b18bfd1c141d 100644
--- a/nixos/modules/system/boot/systemd/journald-upload.nix
+++ b/nixos/modules/system/boot/systemd/journald-upload.nix
@@ -10,7 +10,7 @@ let
format = pkgs.formats.systemd { };
in
{
- meta.maintainers = [ lib.maintainers.raitobezarius ];
+ meta.maintainers = [ ];
options.services.journald.upload = {
enable = lib.mkEnableOption "uploading the systemd journal to a remote server";
diff --git a/nixos/modules/system/boot/systemd/repart.nix b/nixos/modules/system/boot/systemd/repart.nix
index fce8e417991d..2126464c5250 100644
--- a/nixos/modules/system/boot/systemd/repart.nix
+++ b/nixos/modules/system/boot/systemd/repart.nix
@@ -157,6 +157,12 @@ in
boot.initrd.systemd = lib.mkIf initrdCfg.enable {
additionalUpstreamUnits = [
"systemd-repart.service"
+ # Varlink APIs
+ # NOTE: compared to stage 2 where the IPC is enabled in the global location, initrd
+ # might be optimized to keep away the repart binary.
+ # As a result, we enable repart IPC in the initrd only if repart is enabled in the initrd.
+ "systemd-repart.socket"
+ "systemd-repart@.service"
];
storePaths = [
diff --git a/nixos/modules/system/boot/systemd/tmpfiles.nix b/nixos/modules/system/boot/systemd/tmpfiles.nix
index c606ff1ac50b..631a02645d9b 100644
--- a/nixos/modules/system/boot/systemd/tmpfiles.nix
+++ b/nixos/modules/system/boot/systemd/tmpfiles.nix
@@ -317,6 +317,7 @@ in
mkdir -p $out/lib/tmpfiles.d
cd $out/lib/tmpfiles.d
+ ln -s "${systemd}/example/tmpfiles.d/credstore.conf"
ln -s "${systemd}/example/tmpfiles.d/home.conf"
ln -s "${systemd}/example/tmpfiles.d/journal-nocow.conf"
ln -s "${systemd}/example/tmpfiles.d/portables.conf"
diff --git a/nixos/modules/system/boot/systemd/tpm2.nix b/nixos/modules/system/boot/systemd/tpm2.nix
index 2703d60428f1..3537dab80f13 100644
--- a/nixos/modules/system/boot/systemd/tpm2.nix
+++ b/nixos/modules/system/boot/systemd/tpm2.nix
@@ -43,6 +43,9 @@
"tpm2.target"
"systemd-tpm2-setup-early.service"
"systemd-tpm2-setup.service"
+ "systemd-pcrextend.socket"
+ "systemd-pcrextend@.service"
+ "systemd-pcrlogin@.service"
];
}
)
@@ -69,6 +72,8 @@
boot.initrd.systemd.additionalUpstreamUnits = [
"tpm2.target"
"systemd-tpm2-setup-early.service"
+ "systemd-pcrextend.socket"
+ "systemd-pcrextend@.service"
];
boot.initrd.availableKernelModules = [
@@ -81,6 +86,7 @@
pkgs.tpm2-tss
"${cfg.package}/lib/systemd/systemd-tpm2-setup"
"${cfg.package}/lib/systemd/system-generators/systemd-tpm2-generator"
+ "${cfg.package}/lib/systemd/systemd-pcrextend"
];
}
)
@@ -89,7 +95,9 @@
cfg = config.boot.initrd.systemd;
in
lib.mkIf (cfg.enable && cfg.tpm2.enable && cfg.tpm2.pcrphases.enable) {
- boot.initrd.systemd.additionalUpstreamUnits = [ "systemd-pcrphase-initrd.service" ];
+ boot.initrd.systemd.additionalUpstreamUnits = [
+ "systemd-pcrphase-initrd.service"
+ ];
boot.initrd.systemd.services.systemd-pcrphase-initrd.wantedBy = [ "initrd.target" ];
boot.initrd.systemd.storePaths = [ "${cfg.package}/lib/systemd/systemd-pcrextend" ];
}
diff --git a/nixos/modules/system/boot/tzpfms.nix b/nixos/modules/system/boot/tzpfms.nix
new file mode 100644
index 000000000000..e1ca02b3a209
--- /dev/null
+++ b/nixos/modules/system/boot/tzpfms.nix
@@ -0,0 +1,247 @@
+{
+ config,
+ lib,
+ pkgs,
+ utils,
+ ...
+}:
+
+# NOTE: the loading of keys is done in separate tzpfms systemd services
+# defined below rather than inline in the ZFS import scripts.
+
+let
+ cfgZFS = config.boot.zfs;
+ cfg = cfgZFS.tzpfms;
+
+ datasetToPool = x: lib.elemAt (lib.splitString "/" x) 0;
+
+ pools = lib.unique (map datasetToPool cfg.datasets);
+
+ # All ZFS filesystems
+ zfsFilesystems = lib.filter (x: x.fsType == "zfs") config.system.build.fileSystems;
+
+ # Pools that are already imported in initrd (have neededForBoot filesystems)
+ fsToPool = fs: lib.elemAt (lib.splitString "/" fs.device) 0;
+ rootPools = lib.unique (map fsToPool (lib.filter utils.fsNeededForBoot zfsFilesystems));
+
+ # Only include initrd resources if datasets belong to pools that need initrd import.
+ # A pool needs initrd import if it has neededForBoot filesystems.
+ initrdPools = lib.filter (pool: lib.elem pool rootPools) pools;
+ systemPools = lib.filter (pool: !(lib.elem pool rootPools)) pools;
+
+ needsInitrd = initrdPools != [ ];
+
+ datasetsByPool = lib.groupBy datasetToPool cfg.datasets;
+
+ # Goup neededForBoot filesystems by pool → initrd mount units
+ initrdMountsByPool = lib.foldl' (
+ acc: fs:
+ let
+ p = lib.elemAt (lib.splitString "/" fs.device) 0;
+ mount = "${utils.escapeSystemdPath ("/sysroot" + (lib.removeSuffix "/" fs.mountPoint))}.mount";
+ in
+ if utils.fsNeededForBoot fs then acc // { ${p} = (acc.${p} or [ ]) ++ [ mount ]; } else acc
+ ) { } zfsFilesystems;
+
+ # Group all ZFS filesystems by pool → system mount units
+ systemMountsByPool = lib.foldl' (
+ acc: fs:
+ let
+ pool = lib.elemAt (lib.splitString "/" fs.device) 0;
+ mount = "${utils.escapeSystemdPath (lib.removeSuffix "/" fs.mountPoint)}.mount";
+ in
+ acc // { ${pool} = (acc.${pool} or [ ]) ++ [ mount ]; }
+ ) { } zfsFilesystems;
+
+ # Generate tzpfms key-loading bash script
+ mkTzpfmsScript = datasets: /* bash */ ''
+ tzpfms_load_key() {
+ zfs-tpm-list -H ${backendArgs} "$@" 2>/dev/null | while IFS=$'\t' read -r name backend status _; do
+ case "$backend" in
+ ${lib.optionalString (lib.elem "TPM2" cfg.backends) /* bash */ ''
+ TPM2)
+ zfs-tpm2-load-key "$name" || true
+ ;;
+ ''}
+ ${lib.optionalString (lib.elem "TPM1.X" cfg.backends) /* bash */ ''
+ TPM1.X)
+ zfs-tpm1x-load-key "$name" || true
+ ;;
+ ''}
+ *)
+ echo "[WARN] boot.zfs.tzpfms: Unsupported tzpfms backend: “$backend”; “$name” not unlocked" >&2
+ ;;
+ esac
+ done
+ }
+
+ ${lib.concatMapStringsSep "\n" (ds: "tzpfms_load_key -u ${lib.escapeShellArg ds}") datasets}
+ '';
+
+ mkTzpfmsService =
+ {
+ pool,
+ mountUnits,
+ script,
+ }:
+ {
+ description = "Load TPM keys for ZFS pool “${pool}”";
+ after = [ "zfs-import-${pool}.service" ];
+ before = mountUnits ++ [ "zfs-import.target" ];
+ requiredBy = mountUnits ++ [ "zfs-import.target" ];
+ unitConfig.DefaultDependencies = "no";
+ serviceConfig = {
+ Type = "oneshot";
+ RemainAfterExit = true;
+ };
+ inherit script;
+ };
+
+ backendArgs = lib.escapeShellArgs (
+ lib.concatMap (b: [
+ "-b"
+ b
+ ]) cfg.backends
+ );
+in
+{
+ meta.maintainers = with lib.maintainers; [ toastal ];
+
+ options = {
+ boot.zfs.tzpfms = {
+ enable = lib.mkEnableOption ''
+ TPM-backed ZFS encryption using tzpfms.
+ Supports both TPM 2.0 & TPM 1.x.
+ '';
+
+ package = lib.mkPackageOption pkgs "tzpfms" { };
+
+ backends = lib.mkOption {
+ type =
+ with lib.types;
+ nonEmptyListOf (enum [
+ "TPM2"
+ "TPM1.X"
+ ]);
+ default = [
+ "TPM2"
+ ];
+ description = ''
+ TPM backends to include in for tzpfms.
+ '';
+ };
+
+ datasets = lib.mkOption {
+ # Needs to be explicit so we can build thy systemd services
+ type = with lib.types; nonEmptyListOf str;
+ example = [
+ "tank/root"
+ "tank/var"
+ ];
+ description = ''
+ Explicit list of ZFS datasets to unlock with TPM at boot.
+ '';
+ };
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ assertions = [
+ {
+ assertion =
+ config.boot.supportedFilesystems.zfs or config.boot.initrd.supportedFilesystems.zfs or false;
+ message = "ZFS filesystem support needs to be enabled for boot.tzpfms to work";
+ }
+ {
+ assertion = initrdPools != { } -> config.boot.initrd.systemd.enable;
+ message = "boot.zfs.tzpfms requires boot.initrd.systemd.enable = true";
+ }
+ {
+ assertion =
+ !(cfgZFS.requestEncryptionCredentials == true) || cfgZFS.requestEncryptionCredentials == [ ];
+ message = ''
+ boot.zfs.requestEncryptionCredentials = true would prompt for all
+ encrypted dataset passphrases at boot, which conflicts with automatic
+ TPM unlock via tzpfms. Either set it to false, or explicitly list the
+ datasets that still need passphrase prompting.
+ '';
+ }
+ (
+ let
+ intersected = lib.intersectLists cfg.datasets (
+ if lib.isList cfgZFS.requestEncryptionCredentials then cfgZFS.requestEncryptionCredentials else [ ]
+ );
+ in
+ {
+ assertion = builtins.length intersected == 0;
+ message = ''
+ The following datasets are listed in both boot.zfs.tzpfms.datasets
+ & boot.zfs.requestEncryptionCredentials, which would cause a
+ passphrase prompt to block boot before tzpfms can unlock them via
+ TPM:
+
+ ${lib.concatMapStringsSep "\n" (d: "• ${d}") intersected}
+
+ Remove them from boot.zfs.requestEncryptionCredentials to allow
+ automatic TPM unlock.
+ '';
+ }
+ )
+ ];
+
+ environment.systemPackages = [ cfg.package ];
+
+ # Automatically register pools from tzpfms datasets as extraPools
+ boot.zfs.extraPools = pools;
+
+ boot.initrd = lib.mkMerge [
+ (lib.mkIf cfg.enable {
+ availableKernelModules = [
+ "tpm_tis"
+ "tpm_crb"
+ ];
+ })
+ (lib.mkIf needsInitrd (
+ lib.mkMerge [
+ (lib.mkIf config.boot.initrd.systemd.enable {
+ systemd.extraBin = {
+ zfs-tpm-list = "${lib.getBin cfg.package}/bin/zfs-tpm-list";
+ }
+ // lib.optionalAttrs (lib.elem "TPM2" cfg.backends) {
+ zfs-tpm2-load-key = "${lib.getBin cfg.package}/bin/zfs-tpm2-load-key";
+ }
+ // lib.optionalAttrs (lib.elem "TPM1.X" cfg.backends) {
+ zfs-tpm1x-load-key = "${lib.getBin cfg.package}/bin/zfs-tpm1x-load-key";
+ };
+ systemd.storePaths =
+ lib.optional (lib.elem "TPM2" cfg.backends) pkgs.tpm2-tss
+ ++ lib.optional (lib.elem "TPM1.X" cfg.backends) pkgs.trousers;
+ systemd.services = lib.genAttrs' initrdPools (pool: {
+ name = "tzpfms-load-${pool}";
+ value = mkTzpfmsService {
+ inherit pool;
+ mountUnits = initrdMountsByPool.${pool} or [ ];
+ script = mkTzpfmsScript (datasetsByPool.${pool} or [ ]);
+ };
+ });
+ })
+ ]
+ ))
+ ];
+
+ systemd.services = lib.genAttrs' systemPools (
+ pool:
+ let
+ mnts = systemMountsByPool.${pool} or [ ];
+ in
+ {
+ name = "tzpfms-load-${pool}";
+ value = mkTzpfmsService {
+ inherit pool;
+ mountUnits = mnts;
+ script = mkTzpfmsScript (datasetsByPool.${pool} or [ ]);
+ };
+ }
+ );
+ };
+}
diff --git a/nixos/modules/system/boot/uki.nix b/nixos/modules/system/boot/uki.nix
index fa12c63b751a..a33822a9ba37 100644
--- a/nixos/modules/system/boot/uki.nix
+++ b/nixos/modules/system/boot/uki.nix
@@ -81,7 +81,7 @@ in
Linux = lib.mkOptionDefault "${config.boot.kernelPackages.kernel}/${config.system.boot.loader.kernelFile}";
Initrd = lib.mkOptionDefault "${config.system.build.initialRamdisk}/${config.system.boot.loader.initrdFile}";
Cmdline = lib.mkOptionDefault "init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams}";
- Stub = lib.mkOptionDefault "${pkgs.systemd}/lib/systemd/boot/efi/linux${efiArch}.efi.stub";
+ Stub = lib.mkOptionDefault "${config.systemd.package}/lib/systemd/boot/efi/linux${efiArch}.efi.stub";
Uname = lib.mkOptionDefault "${config.boot.kernelPackages.kernel.modDirVersion}";
OSRelease = lib.mkOptionDefault "@${config.system.build.etc}/etc/os-release";
# This is needed for cross compiling.
diff --git a/nixos/modules/system/etc/build-composefs-dump.py b/nixos/modules/system/etc/build-composefs-dump.py
index d8ede9aebf83..6b720f1c7631 100644
--- a/nixos/modules/system/etc/build-composefs-dump.py
+++ b/nixos/modules/system/etc/build-composefs-dump.py
@@ -20,6 +20,13 @@ from typing import Any
Attrs = dict[str, Any]
+# mkcomposefs hard-limits inline content to LCFS_INLINE_CONTENT_MAX (5000 bytes).
+# We stay a bit below that. Files larger than this are served from the basedir
+# data-only lower layer via an overlay redirect; files at or below it are
+# embedded directly into the erofs metadata image, avoiding the redirect
+# indirection at read time and keeping the basedir empty in the common case.
+INLINE_CONTENT_MAX = 4096
+
class FileType(Enum):
"""The filetype as defined by the `st_mode` stat field in octal
@@ -55,12 +62,14 @@ class ComposefsPath:
mode: str,
payload: str,
path: str | None = None,
+ content: str = "-",
):
if path is None:
path = attrs["target"]
self.path = path
self.size = size
self.filetype = filetype
+ self.content = content
match len(mode):
case 3 | 4:
@@ -95,6 +104,43 @@ def eprint(*args: Any, **kwargs: Any) -> None:
print(*args, **kwargs, file=sys.stderr)
+# Bytes that may appear unescaped in a composefs-dump field. Everything else
+# is encoded as \xHH. See composefs-dump(5).
+_DUMP_SHORT_ESCAPES: dict[int, str] = {
+ ord("\\"): r"\\",
+ ord("\n"): r"\n",
+ ord("\r"): r"\r",
+ ord("\t"): r"\t",
+}
+
+
+def escape_dump_field(data: bytes) -> str:
+ """Escape raw bytes for use as a composefs-dump field.
+
+ The dump format separates fields by a single space and lines by a single
+ newline, uses '\\' as the escape character and reserves '-' for unset
+ optional fields, so all of these (plus non-printable bytes and '=') must
+ be escaped.
+ """
+ if data == b"":
+ # An empty CONTENT field would be indistinguishable from two spaces
+ # between PAYLOAD and DIGEST; callers must emit '-' for size-0 files
+ # instead of inlining them.
+ raise ValueError("cannot escape empty content; emit '-' instead")
+ if data == b"-":
+ # A bare '-' means "unset"; escape it so it round-trips as content.
+ return r"\x2d"
+ out: list[str] = []
+ for b in data:
+ if b in _DUMP_SHORT_ESCAPES:
+ out.append(_DUMP_SHORT_ESCAPES[b])
+ elif b in (ord(" "), ord("=")) or not (0x20 <= b <= 0x7E):
+ out.append(f"\\x{b:02x}")
+ else:
+ out.append(chr(b))
+ return "".join(out)
+
+
def normalize_path(path: str) -> str:
return str("/" + os.path.normpath(path).lstrip("/"))
@@ -201,14 +247,37 @@ def main() -> None:
payload=source,
)
else:
- composefs_path = ComposefsPath(
- attrs,
- size=os.stat(source).st_size,
- filetype=FileType.file,
- mode=mode,
- # payload needs to be relative path in this case
- payload=target.lstrip("/"),
- )
+ size = os.stat(source).st_size
+ if size <= INLINE_CONTENT_MAX:
+ # Inline small files directly into the erofs image so they
+ # do not need to be served from the basedir data layer via
+ # an overlay redirect. Empty files need neither payload nor
+ # content; mkcomposefs treats size=0 as an empty inline
+ # file.
+ if size > 0:
+ with open(source, "rb") as fh:
+ raw = fh.read()
+ content = escape_dump_field(raw)
+ size = len(raw)
+ else:
+ content = "-"
+ composefs_path = ComposefsPath(
+ attrs,
+ size=size,
+ filetype=FileType.file,
+ mode=mode,
+ payload="-",
+ content=content,
+ )
+ else:
+ composefs_path = ComposefsPath(
+ attrs,
+ size=size,
+ filetype=FileType.file,
+ mode=mode,
+ # payload needs to be relative path in this case
+ payload=target.lstrip("/"),
+ )
paths[target] = composefs_path
add_leading_directories(target, attrs, paths)
diff --git a/nixos/modules/system/etc/etc-activation.nix b/nixos/modules/system/etc/etc-activation.nix
index b00c25e37802..6cff22a1c0c6 100644
--- a/nixos/modules/system/etc/etc-activation.nix
+++ b/nixos/modules/system/etc/etc-activation.nix
@@ -71,6 +71,10 @@
RequiresMountsFor = [
"/sysroot/nix/store"
];
+ # find-etc only creates this symlink for a NixOS init. For a
+ # non-NixOS init= (e.g. init=/bin/sh) it is absent, so skip the
+ # mount instead of failing the whole initrd.
+ ConditionPathExists = "/etc-metadata-image";
};
requires = [
config.boot.initrd.systemd.services.initrd-find-etc.name
@@ -123,6 +127,8 @@
"/run/nixos-etc-metadata"
];
DefaultDependencies = false;
+ # Skip for a non-NixOS init=, see the metadata mount above.
+ ConditionPathExists = "/etc-basedir";
};
}
];
@@ -140,6 +146,8 @@
# before the overlay is mounted.
"/run/nixos-etc-metadata"
];
+ # Skip for a non-NixOS init=, see the metadata mount above.
+ ConditionPathExists = "/etc-metadata-image";
};
serviceConfig = {
Type = "oneshot";
@@ -174,16 +182,37 @@
})
(lib.mkIf (config.system.etc.overlay.enable && !config.system.etc.overlay.mutable) {
- # Systemd requires /etc/machine-id exists or can be initialized on first
- # boot. This file should not be part of an image or system config because
- # it is unique to the machine, so it is initialized at first boot and
- # persisted in the system state directory, /var/lib/nixos.
- environment.etc."machine-id".source = lib.mkDefault "/var/lib/nixos/machine-id";
- boot.initrd.systemd.tmpfiles.settings.machine-id."/sysroot/var/lib/nixos/machine-id".f =
- lib.mkDefault
- {
- argument = "uninitialized";
- };
+ # An empty regular file means systemd will bind mount /run/machine-id
+ # on top, and ConditionFirstBoot will be false (the file will never
+ # change, so this makes sense). See machine-id(5) "First Boot
+ # Semantics". It also serves as a target to bind mount an actually
+ # persistent machine-id onto. A symlink doesn't work here since
+ # systemd-machine-id-commit checks /etc/machine-id itself for being a
+ # mountpoint without following symlinks, so it would never commit
+ # through a symlink.
+ environment.etc.machine-id = lib.mkDefault {
+ text = "";
+ mode = "0444";
+ };
+
+ # The upstream unit has ConditionPathIsReadWrite=/etc, which is always
+ # false here. Replace it with ConditionFirstBoot: with the empty
+ # placeholder above first-boot is "no" and commit stays skipped, but
+ # when a persistence module bind-mounts a writable file containing
+ # "uninitialized" over /etc/machine-id, first-boot is "yes" once and
+ # commit writes the generated ID through the bind mount.
+ #
+ # An empty Condition*= assignment resets *all* condition types, and
+ # this attrset is serialised in key order, so the reset goes through
+ # ConditionFirstBoot (sorts first) and we re-add the upstream
+ # ConditionPathIsMountPoint afterwards.
+ systemd.services.systemd-machine-id-commit.unitConfig = {
+ ConditionFirstBoot = lib.mkDefault [
+ ""
+ "true"
+ ];
+ ConditionPathIsMountPoint = lib.mkDefault "/etc/machine-id";
+ };
})
];
diff --git a/nixos/modules/system/etc/etc.nix b/nixos/modules/system/etc/etc.nix
index 9ab019171b4c..46cf116eabbb 100644
--- a/nixos/modules/system/etc/etc.nix
+++ b/nixos/modules/system/etc/etc.nix
@@ -69,6 +69,22 @@ let
etcHardlinks = lib.filter (f: f.mode != "symlink" && f.mode != "direct-symlink") etc';
+ # Regular files at or below this size are inlined into the erofs metadata
+ # image (see build-composefs-dump.py) and therefore do not need to be
+ # shipped in the basedir data-only lower layer. Keep this in sync with
+ # INLINE_CONTENT_MAX in build-composefs-dump.py.
+ etcInlineContentMax = 4096;
+
+ # Entries whose content we can prove at eval time will be served directly
+ # from the metadata image (inlined, or empty). Excluding them here keeps
+ # their source paths out of the basedir build script, so changing a small
+ # text-backed /etc file does not rebuild etc-lowerdir. Entries backed by
+ # `source` (size unknown at eval time) are kept and filtered at build time
+ # below.
+ isInlinedAtEvalTime = f: f.text != null && lib.stringLength f.text <= etcInlineContentMax;
+
+ etcBasedirEntries = lib.filter (f: !isInlinedAtEvalTime f) etcHardlinks;
+
in
{
@@ -371,6 +387,18 @@ in
src="$1"
target="$2"
+ if [[ -f "$src" ]]; then
+ # Small regular files are inlined into the erofs metadata image by
+ # build-composefs-dump.py and served directly from there, so we do
+ # not need a copy in the basedir data layer. Keep the size check in
+ # sync with INLINE_CONTENT_MAX in build-composefs-dump.py. Empty
+ # files need no backing copy either.
+ size=$(stat --dereference --format=%s "$src")
+ if (( size <= ${toString etcInlineContentMax} )); then
+ return
+ fi
+ fi
+
mkdir -p "$out/$(dirname "$target")"
cp "$src" "$out/$target"
}
@@ -384,7 +412,7 @@ in
"${etcEntry.source}"
etcEntry.target
]
- ) etcHardlinks}
+ ) etcBasedirEntries}
'';
system.build.etcMetadataImage =
diff --git a/nixos/modules/system/service/systemd/service.nix b/nixos/modules/system/service/systemd/service.nix
index 5fdf70c53b08..e7fa338ff97b 100644
--- a/nixos/modules/system/service/systemd/service.nix
+++ b/nixos/modules/system/service/systemd/service.nix
@@ -113,6 +113,44 @@ in
defaultText = lib.literalExpression "config.systemd.lib.escapeSystemdExecArgs config.process.argv";
};
+ systemd.mainExecReload = mkOption {
+ description = ''
+ Main command line for systemd's ExecReload with systemd's specifier and
+ environment variable substitution enabled.
+
+ This option sets the primary ExecRestart entry. Additional ExecReload entries
+ can be added via `systemd.service.serviceConfig.ExecReload` with `lib.mkBefore`
+ or `lib.mkAfter`.
+
+ This option allows you to use systemd specifiers like `%n` (unit name),
+ `%i` (instance), `%t` (runtime directory), and environment variables using
+ `''${VAR}` syntax in your command line.
+
+ By default, it is set to {option}`process.reloadCommand` when specified, or an
+ empty string otherwise. Because {option}`process.reloadCommand` is already a
+ command line (not an argument list), it is used verbatim so that references
+ like `$MAINPID` are preserved.
+
+ To extend {option}`process.reloadCommand` with systemd specifiers, you can append
+ to the command line:
+
+ ```nix
+ systemd.mainExecReload =
+ config.process.reloadCommand + " --systemd-unit %n";
+ ```
+
+ This pattern allows you to pass the unit name (or other systemd specifiers)
+ as additional arguments.
+
+ See {manpage}`systemd.service(5)` (section "COMMAND LINES") for details on
+ variable substitution and {manpage}`systemd.unit(5)` (section "SPECIFIERS")
+ for available specifiers like `%n`, `%i`, `%t`.
+ '';
+ type = types.nullOr types.str;
+ default = if config.process.reloadCommand != null then config.process.reloadCommand else "";
+ defaultText = lib.literalExpression "config.process.reloadCommand";
+ };
+
systemd.services = mkOption {
description = ''
This module configures systemd services, with the notable difference that their unit names will be prefixed with the abstract service name.
@@ -170,7 +208,8 @@ in
# TODO description;
wantedBy = lib.mkDefault [ "multi-user.target" ];
serviceConfig = {
- Type = lib.mkDefault "simple";
+ ExecReload = config.systemd.mainExecReload;
+ Type = lib.mkDefault (if config.notificationProtocol.systemd then "notify" else "simple");
Restart = lib.mkDefault "always";
RestartSec = lib.mkDefault "5";
ExecStart = [
diff --git a/nixos/modules/tasks/filesystems/ntfs.nix b/nixos/modules/tasks/filesystems/ntfs.nix
index 8ec839fed7eb..271680b56074 100644
--- a/nixos/modules/tasks/filesystems/ntfs.nix
+++ b/nixos/modules/tasks/filesystems/ntfs.nix
@@ -4,15 +4,24 @@
pkgs,
...
}:
-
-with lib;
-
+let
+ ntfsEnabled = config.boot.supportedFilesystems.ntfs or false;
+ ntfs3gEnabled = config.boot.supportedFilesystems.ntfs-3g or false;
+ ntfsPlusSupported = config.boot.kernelPackages.kernelAtLeast "7.1";
+ initrdSupport = config.boot.initrd.supportedFilesystems.ntfs or false;
+in
{
- config =
- mkIf (config.boot.supportedFilesystems.ntfs or config.boot.supportedFilesystems.ntfs-3g or false)
- {
+ config = lib.mkMerge [
+ (lib.mkIf (ntfsEnabled && ntfsPlusSupported && !ntfs3gEnabled) {
+ system.fsPackages = [ pkgs.ntfsprogs-plus ];
- system.fsPackages = [ pkgs.ntfs3g ];
+ boot.initrd.availableKernelModules = lib.optionals initrdSupport [ "ntfs" ];
+ })
- };
+ (lib.mkIf (ntfs3gEnabled || (ntfsEnabled && !ntfsPlusSupported)) {
+ system.fsPackages = [ pkgs.ntfs3g ];
+
+ boot.initrd.availableKernelModules = lib.optionals initrdSupport [ "ntfs3" ];
+ })
+ ];
}
diff --git a/nixos/modules/tasks/filesystems/sshfs.nix b/nixos/modules/tasks/filesystems/sshfs.nix
index f070779ecc54..917ceea7b691 100644
--- a/nixos/modules/tasks/filesystems/sshfs.nix
+++ b/nixos/modules/tasks/filesystems/sshfs.nix
@@ -10,6 +10,8 @@
lib.mkIf
(config.boot.supportedFilesystems.sshfs or config.boot.supportedFilesystems."fuse.sshfs" or false)
{
+ programs.fuse.enable = true;
+
system.fsPackages = [ pkgs.sshfs ];
};
}
diff --git a/nixos/modules/tasks/network-interfaces.nix b/nixos/modules/tasks/network-interfaces.nix
index 4887256b7be1..06b38deff6b6 100644
--- a/nixos/modules/tasks/network-interfaces.nix
+++ b/nixos/modules/tasks/network-interfaces.nix
@@ -1693,8 +1693,7 @@ in
type = types.bool;
description = ''
Whether we should use networkd as the network configuration backend or
- the legacy script based system. Note that this option is experimental,
- enable at your own risk.
+ the legacy script based system.
'';
};
diff --git a/nixos/modules/testing/test-instrumentation.nix b/nixos/modules/testing/test-instrumentation.nix
index 4d20b20090b4..de2cb3d2afc8 100644
--- a/nixos/modules/testing/test-instrumentation.nix
+++ b/nixos/modules/testing/test-instrumentation.nix
@@ -78,6 +78,8 @@ let
# Allow very slow start
DefaultTimeoutStartSec = 300;
DefaultDeviceTimeoutSec = 300;
+ # Don't enforce a minimum uptime before shutting down.
+ MinimumUptimeSec = 0;
};
in
diff --git a/nixos/modules/virtualisation/containers.nix b/nixos/modules/virtualisation/containers.nix
index 6386a57079f2..714169c2f554 100644
--- a/nixos/modules/virtualisation/containers.nix
+++ b/nixos/modules/virtualisation/containers.nix
@@ -9,6 +9,15 @@ let
inherit (lib) literalExpression mkOption types;
+ oldRegistriesOptionsUsed = lib.any (x: x != [ ]) (
+ with cfg.registries;
+ [
+ search
+ insecure
+ block
+ ]
+ );
+
toml = pkgs.formats.toml { };
in
{
@@ -61,30 +70,54 @@ in
};
registries = {
+ # TODO: remove those options in 26.11
search = mkOption {
+ visible = false;
type = types.listOf types.str;
- default = [
- "docker.io"
- "quay.io"
- ];
+ default = [ ];
description = ''
List of repositories to search.
+
+ Deprecated, examine {option}`virtualisation.registries.settings` instead.
'';
};
insecure = mkOption {
default = [ ];
+ visible = false;
type = types.listOf types.str;
description = ''
List of insecure repositories.
+
+ Deprecated, examine {option}`virtualisation.registries.settings` instead.
'';
};
block = mkOption {
default = [ ];
+ visible = false;
type = types.listOf types.str;
description = ''
List of blocked repositories.
+
+ Deprecated, examine {option}`virtualisation.registries.settings` instead.
+ '';
+ };
+
+ settings = mkOption {
+ type = toml.type;
+ default = {
+ registry = [
+ { location = "docker.io"; }
+ { location = "quay.io"; }
+ ];
+ };
+ description = ''
+ repositories.conf configuration.
+
+ Examine [containers-registries.conf(5)] for more information about the format.
+
+ [containers-registries.conf(5)]: https://github.com/containers/image/blob/main/docs/containers-registries.conf.5.md
'';
};
};
@@ -112,6 +145,15 @@ in
};
config = lib.mkIf cfg.enable {
+ warnings = lib.optional oldRegistriesOptionsUsed "the options virtualisation.registries.search / insecure / block are deprecated. See virtualisation.registries.settings instead.";
+
+ virtualisation.containers.registries.settings = lib.mkIf oldRegistriesOptionsUsed {
+ registries = {
+ block.registries = cfg.registries.block;
+ insecure.registries = cfg.registries.insecure;
+ search.registries = cfg.registries.search;
+ };
+ };
virtualisation.containers.containersConf.cniPlugins = [ pkgs.cni-plugins ];
@@ -136,9 +178,7 @@ in
"containers/storage.conf".source = toml.generate "storage.conf" cfg.storage.settings;
- "containers/registries.conf".source = toml.generate "registries.conf" {
- registries = lib.mapAttrs (n: v: { registries = v; }) cfg.registries;
- };
+ "containers/registries.conf".source = toml.generate "registries.conf" cfg.registries.settings;
"containers/policy.json".source =
if cfg.policy != { } then
diff --git a/nixos/modules/virtualisation/credentials-options.nix b/nixos/modules/virtualisation/credentials-options.nix
new file mode 100644
index 000000000000..3345f6933784
--- /dev/null
+++ b/nixos/modules/virtualisation/credentials-options.nix
@@ -0,0 +1,63 @@
+{ lib, pkgs, ... }:
+{
+ options.virtualisation.credentials = lib.mkOption {
+ description = ''
+ Credentials to pass to the VM or container using systemd's credential system.
+
+ See {manpage}`systemd.exec(5)`, {manpage}`systemd-creds(1)` and https://systemd.io/CREDENTIALS/ for more
+ information about systemd credentials.
+ '';
+ default = { };
+ example = lib.literalExpression ''
+ {
+ database-password = {
+ text = "my-secret-password";
+ };
+ ssl-cert = {
+ source = "./cert.pem";
+ };
+ binary-key = {
+ source = "./private.der";
+ };
+ }
+ '';
+ type = lib.types.attrsOf (
+ lib.types.submodule (
+ {
+ name,
+ options,
+ config,
+ ...
+ }:
+ {
+ options = {
+ source = lib.mkOption {
+ type = lib.types.nullOr (lib.types.pathWith { });
+ default = null;
+ description = ''
+ Source file on the host containing the credential data.
+ '';
+ };
+ text = lib.mkOption {
+ default = null;
+ type = lib.types.nullOr lib.types.str;
+ description = ''
+ Text content of the credential.
+
+ For binary data or when the credential content should come from
+ an existing file, use `source` instead.
+
+ ::: {.warning}
+ The text here is stored in the host's nix store as a file.
+ :::
+ '';
+ };
+ };
+ config.source = lib.mkIf (config.text != null) (
+ lib.mkDerivedConfig options.text (pkgs.writeText name)
+ );
+ }
+ )
+ );
+ };
+}
diff --git a/nixos/modules/virtualisation/incus.nix b/nixos/modules/virtualisation/incus.nix
index 83a5a731ccb7..ce414b8896f7 100644
--- a/nixos/modules/virtualisation/incus.nix
+++ b/nixos/modules/virtualisation/incus.nix
@@ -93,6 +93,9 @@ let
]
++ lib.optionals nvidiaEnabled [
libnvidia-container
+ ]
+ ++ lib.optionals cfg.storage.truenas.enable [
+ truenas-incus-ctl
];
# https://github.com/lxc/incus/blob/cff35a29ee3d7a2af1f937cbb6cf23776941854b/internal/server/instance/drivers/driver_qemu.go#L123
@@ -284,6 +287,8 @@ in
'';
};
+ storage.truenas.enable = lib.mkEnableOption "TrueNAS storage driver support";
+
ui = {
enable = lib.mkEnableOption "Incus Web UI";
@@ -314,6 +319,10 @@ in
);
message = "Incus on NixOS is unsupported using iptables. Set `networking.nftables.enable = true;`";
}
+ {
+ assertion = cfg.storage.truenas.enable -> config.services.openiscsi.enable;
+ messages = "`virtualisation.incus.storage.truenas.enable` requires `services.openiscsi.enable`";
+ }
];
# https://github.com/lxc/incus/blob/f145309929f849b9951658ad2ba3b8f10cbe69d1/doc/reference/server_settings.md
@@ -346,6 +355,9 @@ in
# gui console support
pkgs.spice-gtk
+ ]
+ ++ lib.optionals cfg.storage.truenas.enable [
+ pkgs.truenas-incus-ctl
];
# Note: the following options are also declared in virtualisation.lxc, but
@@ -363,22 +375,28 @@ in
include ${cfg.lxcPackage}/etc/apparmor.d/lxc-containers
'';
"incusd".profile = ''
- # This profile allows everything and only exists to give the
- # application a name instead of having the label "unconfined"
+ # incusd is deliberatly left unconfined, with NO named profile attached to the binary.
+ # Incus checks its own confinement at startup by reading /proc/self/attr/current
+ # (https://github.com/lxc/incus/blob/92b0cbbc5728ed45578fdeeec634606af8826404/internal/server/sys/apparmor.go).
+ # Anything other than "unconfined" makes Incus believe that the host process is
+ # itself confined, which sends every container down the "reuse my own profile" branch in
+ # https://github.com/lxc/incus/blob/92b0cbbc5728ed45578fdeeec634606af8826404/internal/server/instance/drivers/driver_lxc.go
+ # instead of generating a "proper" per-container profile. Furthermore,
+ # that branch only strips " (enforce)" suffix before handing the string to lxc.apparmor.profile
+ # (https://github.com/lxc/incus/blob/92b0cbbc5728ed45578fdeeec634606af8826404/internal/server/instance/drivers/driver_lxc.go#L96),
+ # so the named profile with flags=(unconfined) produces a literal string
+ # "incusd (unconfined)", which the kernel rejects at change_profile() time
+ # with "label not found", failing every `incus start` when AppArmor is enabled.
+ # This was not caught before as AppArmor was stifled by bpf.
+
+ # We keep this policy to pull in the per-container /
+ # per-archive profiles incusd generates at runtime so
+ # apparmor_parser loads them.
abi ,
include
- profile incusd ${lib.getExe' config.virtualisation.incus.package "incusd"} flags=(unconfined) {
- userns,
-
- include "/var/lib/incus/security/apparmor/cache"
-
- # Site-specific additions and overrides. See local/README for details.
- include if exists
- }
-
- include "/var/lib/incus/security/apparmor/profiles"
+ include if exists "/var/lib/incus/security/apparmor/profiles"
'';
};
includes."abstractions/base" = ''
@@ -428,6 +446,8 @@ in
]
++ lib.optionals (cfg.useACMEHost != null) [ "acme-${cfg.useACMEHost}.service" ];
+ stopIfChanged = lib.mkIf cfg.softDaemonRestart false;
+
serviceConfig = {
ExecStart = "${cfg.package}/bin/incusd --group incus-admin";
ExecStartPost = "${cfg.package}/bin/incusd waitready --timeout=${cfg.startTimeout}";
@@ -486,6 +506,7 @@ in
# restarting this service will affect instances
restartIfChanged = false;
+ stopIfChanged = false;
serviceConfig = {
ExecStart = "${incus-startup} start";
diff --git a/nixos/modules/virtualisation/nixos-containers.nix b/nixos/modules/virtualisation/nixos-containers.nix
index dd9177a5bd21..ea904528caec 100644
--- a/nixos/modules/virtualisation/nixos-containers.nix
+++ b/nixos/modules/virtualisation/nixos-containers.nix
@@ -520,7 +520,7 @@ let
hostAddress6 = null;
localAddress = null;
localAddress6 = null;
- localmacAddress = null;
+ localMacAddress = null;
tmpfs = null;
};
diff --git a/nixos/modules/virtualisation/nspawn-container/default.nix b/nixos/modules/virtualisation/nspawn-container/default.nix
index e1fdab1a6f1c..621f2bcb9f33 100644
--- a/nixos/modules/virtualisation/nspawn-container/default.nix
+++ b/nixos/modules/virtualisation/nspawn-container/default.nix
@@ -21,6 +21,10 @@ let
cfg = config.virtualisation;
in
{
+ imports = [
+ ../credentials-options.nix
+ ];
+
options = {
virtualisation.cmdline = lib.mkOption {
@@ -77,39 +81,8 @@ in
which is prohibited within the Nix build sandbox where the test is run.
'';
}
- {
- # Check every interface defined in allInterfaces.
- # Containers try to create a bridge "${config.system.name}-${interfaceName}"
- assertion = lib.all (
- iface:
- let
- hostName = "${config.system.name}-${iface.name}";
- in
- lib.stringLength hostName <= 15
- ) (lib.attrValues cfg.allInterfaces);
-
- message =
- let
- offendingInterfaces = lib.filter (
- iface: lib.stringLength "${config.system.name}-${iface.name}" > 15
- ) (lib.attrValues cfg.allInterfaces);
- offenderList = map (
- i:
- "${config.system.name}-${i.name} (${toString (lib.stringLength "${config.system.name}-${i.name}")} chars)"
- ) offendingInterfaces;
- in
- ''
- The following generated host interface names exceed the Linux 15-character limit:
- ${lib.concatStringsSep "\n " offenderList}
-
- Please shorten 'config.system.name' or the interface names in 'virtualisation.interfaces'.
- '';
- }
];
- # TODO(arianvp): Remove after https://github.com/NixOS/nixpkgs/pull/480686 is merged
- console.enable = true;
-
virtualisation.systemd-nspawn.options = [
"--private-network"
"--machine=${config.system.name}"
@@ -134,7 +107,8 @@ in
# Send a READY=1 notification to a socket when the container is fully booted.
"--notify-ready=yes"
- ];
+ ]
+ ++ lib.mapAttrsToList (name: cred: "--load-credential=${name}:${cred.source}") cfg.credentials;
system.build.nspawn =
let
diff --git a/nixos/modules/virtualisation/nspawn-container/run-nspawn/src/run_nspawn/__init__.py b/nixos/modules/virtualisation/nspawn-container/run-nspawn/src/run_nspawn/__init__.py
index f733ad1845c4..9d5d73433e66 100644
--- a/nixos/modules/virtualisation/nspawn-container/run-nspawn/src/run_nspawn/__init__.py
+++ b/nixos/modules/virtualisation/nspawn-container/run-nspawn/src/run_nspawn/__init__.py
@@ -1,6 +1,7 @@
import contextlib
import dataclasses
import fcntl
+import hashlib
import logging
import os
import signal
@@ -124,6 +125,13 @@ def mk_veth(
vlan: int,
) -> typing.Generator[None, None, None]:
host_intf_name = f"{container_name}-{container_intf_name}"
+ # If the names for systemd-nspawn containers are too long,
+ # the generated bridge interface names will surpass the
+ # kernel limit IFNAMSIZ (15 characters + '\0').
+ if len(host_intf_name) > 15:
+ hashed = hashlib.sha256(host_intf_name.encode()).hexdigest()[:6]
+ host_intf_name = f"{host_intf_name[:8]}-{hashed}"
+
with ensure_vlan_bridge(vlan) as bridge_name:
logger.info("creating interface %s", host_intf_name)
run_ip(
diff --git a/nixos/modules/virtualisation/qemu-vm.nix b/nixos/modules/virtualisation/qemu-vm.nix
index 8d2817c23bf0..59645757575f 100644
--- a/nixos/modules/virtualisation/qemu-vm.nix
+++ b/nixos/modules/virtualisation/qemu-vm.nix
@@ -399,6 +399,7 @@ in
imports = [
../profiles/qemu-guest.nix
./disk-size-option.nix
+ ./credentials-options.nix
(mkRenamedOptionModule
[
"virtualisation"
@@ -740,7 +741,7 @@ in
default = pkgs;
defaultText = literalExpression "pkgs";
example = literalExpression ''
- import pkgs.path { system = "x86_64-darwin"; }
+ import pkgs.path { system = "aarch64-darwin"; }
'';
description = ''
Package set to use for the host-specific packages of the VM runner.
@@ -1126,81 +1127,20 @@ in
};
virtualisation.credentials = mkOption {
- description = ''
- Credentials to pass to the VM using systemd's credential system.
-
- See {manpage}`systemd.exec(5)` , {manpage}`systemd-creds(1)` and https://systemd.io/CREDENTIALS/ for more
- information about systemd credentials.
- '';
- default = { };
- example = {
- database-password = {
- text = "my-secret-password";
- };
- ssl-cert = {
- source = "./cert.pem";
- };
- binary-key = {
- mechanism = "fw_cfg";
- source = "./private.der";
- };
- config-file = {
- mechanism = "smbios";
- text = ''
- [database]
- host=localhost
- port=5432
- '';
- };
- };
type = types.attrsOf (
- lib.types.submodule (
- {
- name,
- options,
- config,
- ...
- }:
- {
- options = {
- mechanism = lib.mkOption {
- type = lib.types.enum [
- "fw_cfg"
- "smbios"
- ];
- default = if pkgs.stdenv.hostPlatform.isx86 then "smbios" else "fw_cfg";
- defaultText = lib.literalExpression ''if pkgs.stdenv.hostPlatform.isx86 then "smbios" else "fw_cfg"'';
- description = ''
- The mechanism used to pass the credential to the VM.
- '';
- };
- source = lib.mkOption {
- type = lib.types.nullOr (lib.types.pathWith { });
- default = null;
- description = ''
- Source file on the host containing the credential data.
- '';
- };
- text = lib.mkOption {
- default = null;
- type = lib.types.nullOr lib.types.str;
- description = ''
- Text content of the credential.
-
- For binary data or when the credential content should come from
- an existing file, use `source` instead.
-
- ::: {.warning}
- The text here is stored in the host's nix store as a file.
- :::
- '';
- };
- };
- config.source = lib.mkIf (config.text != null) (
- lib.mkDerivedConfig options.text (pkgs.writeText name)
- );
- }
- )
+ lib.types.submodule {
+ options.mechanism = lib.mkOption {
+ type = lib.types.enum [
+ "fw_cfg"
+ "smbios"
+ ];
+ default = if pkgs.stdenv.hostPlatform.isx86 then "smbios" else "fw_cfg";
+ defaultText = lib.literalExpression ''if pkgs.stdenv.hostPlatform.isx86 then "smbios" else "fw_cfg"'';
+ description = ''
+ The mechanism used to pass the credential to the VM.
+ '';
+ };
+ }
);
};
diff --git a/nixos/release-combined.nix b/nixos/release-combined.nix
index d6ec21f82226..219f386f3789 100644
--- a/nixos/release-combined.nix
+++ b/nixos/release-combined.nix
@@ -201,7 +201,7 @@ rec {
(onFullSupported "nixos.tests.printing-socket")
(onFullSupported "nixos.tests.proxy")
(onFullSupported "nixos.tests.sddm.default")
- (onFullSupported "nixos.tests.shadow")
+ (onFullSupported "nixos.tests.shadow.login")
(onFullSupported "nixos.tests.simple-container")
(onFullSupported "nixos.tests.simple-vm")
(onFullSupported "nixos.tests.sway")
diff --git a/nixos/release.nix b/nixos/release.nix
index efc2570c5a70..f29e20efe19c 100644
--- a/nixos/release.nix
+++ b/nixos/release.nix
@@ -54,27 +54,6 @@ let
${system} = hydraJob test;
}
);
- }
- // {
- # for typechecking of the scripts and evaluation of
- # the nodes, without running VMs.
- allDrivers = import ./tests/all-tests.nix {
- inherit system;
- pkgs = import ./.. { inherit system; };
- callTest =
- config:
- let
- inherit (config) driver;
- in
- lib.optionalAttrs (builtins.elem system (getPlatforms driver)) (
- if attrNamesOnly then
- hydraJob driver
- else
- {
- ${system} = hydraJob driver;
- }
- );
- };
};
allTests = foldAttrs recursiveUpdate { } (
@@ -111,7 +90,7 @@ let
with import ./.. { inherit system; };
hydraJob (
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = makeModules module { };
}).config.system.build.isoImage
@@ -123,7 +102,7 @@ let
with import ./.. { inherit system; };
hydraJob (
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = makeModules module { };
}).config.system.build.sdImage
@@ -141,7 +120,7 @@ let
let
config =
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = makeModules module { };
}).config;
@@ -183,7 +162,7 @@ let
makeNetboot =
{ module, system, ... }:
let
- configEvaled = import lib/eval-config.nix {
+ configEvaled = import ./lib/eval-config.nix {
inherit system;
modules = makeModules module { };
};
@@ -209,7 +188,7 @@ let
in
rec {
- channel = import lib/make-channel.nix {
+ channel = import ./lib/make-channel.nix {
inherit
pkgs
nixpkgs
@@ -232,7 +211,7 @@ rec {
kexec = forMatchingSystems supportedSystems (
system:
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = [
./modules/installer/netboot/netboot-minimal.nix
@@ -312,7 +291,7 @@ rec {
with import ./.. { inherit system; };
hydraJob (
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = [
./modules/virtualisation/proxmox-image.nix
@@ -331,7 +310,7 @@ rec {
with import ./.. { inherit system; };
hydraJob (
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = [
./modules/virtualisation/proxmox-image.nix
@@ -346,7 +325,7 @@ rec {
with import ./.. { inherit system; };
hydraJob (
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = [
./modules/virtualisation/proxmox-lxc.nix
@@ -362,7 +341,7 @@ rec {
with import ./.. { inherit system; };
hydraJob (
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = [
configuration
@@ -379,7 +358,7 @@ rec {
with import ./.. { inherit system; };
hydraJob (
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = [
configuration
@@ -403,7 +382,7 @@ rec {
with import ./.. { inherit system; };
hydraJob (
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = [
configuration
@@ -427,7 +406,7 @@ rec {
with import ./.. { inherit system; };
hydraJob (
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = [
configuration
@@ -451,7 +430,7 @@ rec {
with import ./.. { inherit system; };
hydraJob (
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = [
configuration
@@ -475,7 +454,7 @@ rec {
with import ./.. { inherit system; };
hydraJob (
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = [
configuration
@@ -491,7 +470,7 @@ rec {
system:
pkgs.runCommand "dummy" {
toplevel =
- (import lib/eval-config.nix {
+ (import ./lib/eval-config.nix {
inherit system;
modules = singleton (
{ ... }:
@@ -539,14 +518,14 @@ rec {
{ ... }:
{
boot.isContainer = true;
- imports = [ modules/profiles/minimal.nix ];
+ imports = [ ./modules/profiles/minimal.nix ];
}
);
ec2 = makeClosure (
{ ... }:
{
- imports = [ modules/virtualisation/amazon-image.nix ];
+ imports = [ ./modules/virtualisation/amazon-image.nix ];
}
);
diff --git a/nixos/tests/accountsservice.nix b/nixos/tests/accountsservice.nix
new file mode 100644
index 000000000000..95da652b0a97
--- /dev/null
+++ b/nixos/tests/accountsservice.nix
@@ -0,0 +1,26 @@
+{ ... }:
+
+{
+ name = "accountsservice";
+
+ nodes.machine =
+ { pkgs, ... }:
+ {
+ environment.systemPackages = with pkgs; [ jq ];
+
+ services.accounts-daemon.enable = true;
+
+ users.users.alice = {
+ isNormalUser = true;
+ description = "Alice";
+ };
+ };
+
+ testScript = ''
+ machine.start_job("accounts-daemon.service")
+ machine.wait_for_unit("accounts-daemon.service")
+ user = machine.succeed("busctl call -j org.freedesktop.Accounts /org/freedesktop/Accounts org.freedesktop.Accounts FindUserByName s alice | jq -j '.data[]'")
+ name = machine.succeed(f"busctl get-property -j org.freedesktop.Accounts {user} org.freedesktop.Accounts.User RealName | jq -j .data")
+ t.assertEqual(name, "Alice")
+ '';
+}
diff --git a/nixos/tests/activation/etc-overlay-immutable.nix b/nixos/tests/activation/etc-overlay-immutable.nix
index a76c1ad297da..febac2e016f2 100644
--- a/nixos/tests/activation/etc-overlay-immutable.nix
+++ b/nixos/tests/activation/etc-overlay-immutable.nix
@@ -20,6 +20,23 @@
text = "foo";
mode = "0300";
};
+ # Small regular file: inlined into the metadata erofs image.
+ inlinetest = {
+ text = "inline-content\n";
+ mode = "0640";
+ };
+ # Empty regular file: served directly from the metadata erofs image
+ # without payload or content.
+ emptytest = {
+ text = "";
+ mode = "0644";
+ };
+ # Large regular file (>4096 bytes): served from the basedir data layer
+ # via overlay redirect, not inlined.
+ bigfile = {
+ text = lib.strings.replicate 5000 "a";
+ mode = "0644";
+ };
};
# Prerequisites
@@ -59,10 +76,40 @@
with subtest("/etc is mounted as an overlay"):
machine.succeed("findmnt --kernel --type overlay /etc")
+ with subtest("machine-id is set up without first-boot looping"):
+ # The baked-in placeholder is an empty regular file; systemd overlays
+ # /run/machine-id on top so the session has a valid ID while the
+ # commit service is condition-skipped (no writable /etc to commit to).
+ machine.succeed("stat --format '%F' /etc/machine-id | tee /dev/stderr | grep -q 'regular'")
+ machine.succeed("grep -qE '^[0-9a-f]{32}$' /etc/machine-id")
+ machine.fail("journalctl -b | grep -F 'System cannot boot: Missing /etc/machine-id'")
+ machine.fail("journalctl -b | grep -F 'Detected first boot'")
+ machine.fail("systemctl is-failed --quiet systemd-machine-id-commit.service")
+ assert machine.succeed(
+ "systemctl show -P ConditionResult systemd-machine-id-commit.service"
+ ).strip() == "no"
+
with subtest("modes work correctly"):
machine.succeed("stat --format '%F' /etc/modetest | tee /dev/stderr | grep -q 'regular file'")
machine.succeed("stat --format '%F' /etc/modetest2 | tee /dev/stderr | grep -q 'regular file'")
+ with subtest("small regular files are inlined into the metadata image"):
+ assert machine.succeed("cat /etc/inlinetest") == "inline-content\n"
+ machine.succeed("stat --format '%a' /etc/inlinetest | tee /dev/stderr | grep -Eq '^640$'")
+ # Inlined files are stored in the metadata erofs image, not redirected
+ # to the basedir data layer, so they carry no overlay redirect xattr.
+ machine.fail("getfattr -h -n trusted.overlay.redirect /run/nixos-etc-metadata/inlinetest")
+
+ with subtest("empty regular files are served from the metadata image"):
+ assert machine.succeed("cat /etc/emptytest") == ""
+ machine.succeed("stat --format '%F %s %a' /etc/emptytest | tee /dev/stderr | grep -Eq '^regular empty file 0 644$'")
+ machine.fail("getfattr -h -n trusted.overlay.redirect /run/nixos-etc-metadata/emptytest")
+
+ with subtest("large regular files are served from the basedir"):
+ assert machine.succeed("wc -c < /etc/bigfile").strip() == "5000"
+ assert machine.succeed("head -c 10 /etc/bigfile") == "aaaaaaaaaa"
+ machine.succeed("getfattr -h -n trusted.overlay.redirect /run/nixos-etc-metadata/bigfile")
+
with subtest("direct symlinks point to the target without indirection"):
assert machine.succeed("readlink -n /etc/localtime") == "/etc/zoneinfo/Utc"
diff --git a/nixos/tests/activation/etc-overlay-mutable.nix b/nixos/tests/activation/etc-overlay-mutable.nix
index b30ca7b4fd89..3bfe85db8fdd 100644
--- a/nixos/tests/activation/etc-overlay-mutable.nix
+++ b/nixos/tests/activation/etc-overlay-mutable.nix
@@ -20,6 +20,23 @@
text = "foo";
mode = "0300";
};
+ # Small regular file: inlined into the metadata erofs image.
+ inlinetest = {
+ text = "inline-content\n";
+ mode = "0640";
+ };
+ # Empty regular file: served directly from the metadata erofs image
+ # without payload or content.
+ emptytest = {
+ text = "";
+ mode = "0644";
+ };
+ # Large regular file (>4096 bytes): served from the basedir data layer
+ # via overlay redirect, not inlined.
+ bigfile = {
+ text = lib.strings.replicate 5000 "a";
+ mode = "0644";
+ };
};
# Prerequisites
@@ -66,6 +83,23 @@
machine.succeed("test -d /.rw-etc/upper/nixos")
print(machine.succeed("getfattr -h -d -m 'trusted.overlay' /.rw-etc/upper/nixos 2>&1 || true"))
+ with subtest("small regular files are inlined into the metadata image"):
+ assert machine.succeed("cat /etc/inlinetest") == "inline-content\n"
+ machine.succeed("stat --format '%a' /etc/inlinetest | tee /dev/stderr | grep -Eq '^640$'")
+ # Inlined files are stored in the metadata erofs image, not redirected
+ # to the basedir data layer, so they carry no overlay redirect xattr.
+ machine.fail("getfattr -h -n trusted.overlay.redirect /run/nixos-etc-metadata/inlinetest")
+
+ with subtest("empty regular files are served from the metadata image"):
+ assert machine.succeed("cat /etc/emptytest") == ""
+ machine.succeed("stat --format '%F %s %a' /etc/emptytest | tee /dev/stderr | grep -Eq '^regular empty file 0 644$'")
+ machine.fail("getfattr -h -n trusted.overlay.redirect /run/nixos-etc-metadata/emptytest")
+
+ with subtest("large regular files are served from the basedir"):
+ assert machine.succeed("wc -c < /etc/bigfile").strip() == "5000"
+ assert machine.succeed("head -c 10 /etc/bigfile") == "aaaaaaaaaa"
+ machine.succeed("getfattr -h -n trusted.overlay.redirect /run/nixos-etc-metadata/bigfile")
+
with subtest("switching to the same generation"):
machine.succeed("/run/current-system/bin/switch-to-configuration test")
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 96b117c3f9e5..f892390cefd5 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -63,7 +63,7 @@ let
- `config.node.pkgs.` or `config.nodes.foo.nixpkgs.pkgs.` to refer
to the Nixpkgs used on the VM guest(s).
- `hostPkgs.` when invoking commands on the VM host (e.g. in Python
- `os.system("foo")`)
+ `subprocess.run(["foo"])`)
- Since the runTest argument is a module instead of a function, arguments
must be passed as option definitions.
You may declare explicit `options` for the test parameter(s), or use the
@@ -152,7 +152,9 @@ in
ssh-backdoor = runTestOn [ "x86_64-linux" ] ./nixos-test-driver/ssh-backdoor.nix;
console-log = runTest ./nixos-test-driver/console-log.nix;
containers = runTest ./nixos-test-driver/containers.nix;
+ nspawn-daemon-reexec-dbus = runTest ./nspawn-daemon-reexec-dbus.nix;
skip-typecheck = runTest ./nixos-test-driver/skip-typecheck.nix;
+ console-timeout = runTest ./nixos-test-driver/console-timeout.nix;
options-doc-regression = import ./nixos-test-driver/options-doc-regression.nix { inherit pkgs; };
driver-timeout =
pkgs.runCommand "ensure-timeout-induced-failure"
@@ -167,6 +169,7 @@ in
[[ 143 = $(cat $failed/testBuildFailure.exit) ]]
touch $out
'';
+ efivars = runTestOn [ "x86_64-linux" ] ./nixos-test-driver/efivars.nix;
};
# NixOS vm tests and non-vm unit tests
@@ -174,6 +177,7 @@ in
# keep-sorted start case=no numeric=no block=yes
_3proxy = runTest ./3proxy.nix;
aaaaxy = runTest ./aaaaxy.nix;
+ accountsservice = runTest ./accountsservice.nix;
acl = pkgs.callPackage ./acl.nix { };
acme = import ./acme/default.nix {
inherit runTest;
@@ -303,7 +307,6 @@ in
bootspec = handleTestOn [ "x86_64-linux" ] ./bootspec.nix { };
borgbackup = runTest ./borgbackup.nix;
borgmatic = runTest ./borgmatic.nix;
- botamusique = runTest ./botamusique.nix;
bpf = runTestOn [ "x86_64-linux" "aarch64-linux" ] ./bpf.nix;
bpftune = runTest ./bpftune.nix;
breitbandmessung = runTest ./breitbandmessung.nix;
@@ -330,8 +333,16 @@ in
};
castopod = runTest ./castopod.nix;
centrifugo = runTest ./centrifugo.nix;
- ceph-multi-node = runTestOn [ "aarch64-linux" "x86_64-linux" ] ./ceph-multi-node.nix;
- ceph-single-node = runTestOn [ "aarch64-linux" "x86_64-linux" ] ./ceph-single-node.nix;
+ ceph-multi-node-bluestore = runTestOn [ "aarch64-linux" "x86_64-linux" ] (
+ import ./ceph-multi-node-bluestore.nix { }
+ );
+ ceph-multi-node-bluestore-cephfs = runTestOn [ "aarch64-linux" "x86_64-linux" ] (
+ import ./ceph-multi-node-bluestore.nix { withCephfs = true; }
+ );
+ ceph-multi-node-deprecated-filestore = runTestOn [
+ "aarch64-linux"
+ "x86_64-linux"
+ ] ./ceph-multi-node-deprecated-filestore.nix;
ceph-single-node-bluestore = runTestOn [
"aarch64-linux"
"x86_64-linux"
@@ -340,6 +351,10 @@ in
"aarch64-linux"
"x86_64-linux"
] ./ceph-single-node-bluestore-dmcrypt.nix;
+ ceph-single-node-deprecated-filestore = runTestOn [
+ "aarch64-linux"
+ "x86_64-linux"
+ ] ./ceph-single-node-deprecated-filestore.nix;
certmgr = import ./certmgr.nix { inherit pkgs runTest; };
cfssl = runTestOn [ "aarch64-linux" "x86_64-linux" ] ./cfssl.nix;
cgit = runTest ./cgit.nix;
@@ -364,6 +379,7 @@ in
};
cloud-init = runTest ./cloud-init.nix;
cloud-init-hostname = runTest ./cloud-init-hostname.nix;
+ cloudcompare = import ./cloudcompare.nix { inherit pkgs runTest; };
cloudlog = runTest ./cloudlog.nix;
cntr = import ./cntr.nix {
inherit (pkgs) lib;
@@ -408,31 +424,39 @@ in
corerad = runTest ./corerad.nix;
corteza = runTest ./corteza.nix;
cosmic = runTest {
- imports = [ ./cosmic.nix ];
+ imports = [ ./cosmic ];
_module.args.testName = "cosmic";
_module.args.enableAutologin = false;
_module.args.enableXWayland = true;
};
cosmic-autologin = runTest {
- imports = [ ./cosmic.nix ];
+ imports = [ ./cosmic ];
_module.args.testName = "cosmic-autologin";
_module.args.enableAutologin = true;
_module.args.enableXWayland = true;
};
cosmic-autologin-noxwayland = runTest {
- imports = [ ./cosmic.nix ];
+ imports = [ ./cosmic ];
_module.args.testName = "cosmic-autologin-noxwayland";
_module.args.enableAutologin = true;
_module.args.enableXWayland = false;
};
cosmic-noxwayland = runTest {
- imports = [ ./cosmic.nix ];
+ imports = [ ./cosmic ];
_module.args.testName = "cosmic-noxwayland";
_module.args.enableAutologin = false;
_module.args.enableXWayland = false;
};
coturn = runTest ./coturn.nix;
couchdb = runTest ./couchdb.nix;
+ credentials-fwcfg = runTest {
+ imports = [ ./credentials.nix ];
+ _module.args.mechanism = "fw_cfg";
+ };
+ credentials-smbios = runTestOn [ "x86_64-linux" ] {
+ imports = [ ./credentials.nix ];
+ _module.args.mechanism = "smbios";
+ };
cri-o = runTestOn [ "aarch64-linux" "x86_64-linux" ] ./cri-o.nix;
croc = runTest ./croc.nix;
cross-seed = runTest ./cross-seed.nix;
@@ -495,7 +519,7 @@ in
drupal = runTest ./drupal.nix;
dublin-traceroute = runTest ./dublin-traceroute.nix;
dwl = runTestOn [ "x86_64-linux" "aarch64-linux" ] ./dwl.nix;
- e57inspector = runTest ./e57inspector.nix;
+ e57inspector = import ./e57inspector.nix { inherit pkgs runTest; };
early-mount-options = runTest ./early-mount-options.nix;
earlyoom = runTestOn [ "x86_64-linux" ] ./earlyoom.nix;
easytier = runTest ./easytier.nix;
@@ -541,6 +565,9 @@ in
etebase-server = runTest ./etebase-server.nix;
etesync-dav = runTest ./etesync-dav.nix;
evcc = runTest ./evcc.nix;
+ extra-initrd = import ./extra-initrd.nix {
+ inherit runTest pkgs;
+ };
facter = runTest ./facter;
fail2ban = runTest ./fail2ban.nix;
fakeroute = runTest ./fakeroute.nix;
@@ -577,6 +604,10 @@ in
imports = [ ./firefox.nix ];
_module.args.firefoxPackage = pkgs.firefox-esr-140;
};
+ firefox-esr-153 = runTest {
+ imports = [ ./firefox.nix ];
+ _module.args.firefoxPackage = pkgs.firefox-esr-153;
+ };
firefox-syncserver = runTest ./firefox-syncserver.nix;
firefox_decrypt = runTest ./firefox_decrypt.nix;
firefoxpwa = runTest ./firefoxpwa.nix;
@@ -599,6 +630,7 @@ in
flannel = runTestOn [ "x86_64-linux" ] ./flannel.nix;
flap-alerted = runTest ./flap-alerted.nix;
flaresolverr = runTest ./flaresolverr.nix;
+ flarum = runTest ./flarum.nix;
flood = runTest ./flood.nix;
fluent-bit = runTest ./fluent-bit.nix;
fluentd = runTest ./fluentd.nix;
@@ -614,6 +646,9 @@ in
forgejoPackage = pkgs.forgejo-lts;
};
freenet = runTest ./freenet.nix;
+ freescout = import ./freescout {
+ inherit runTest;
+ };
freeswitch = runTest ./freeswitch.nix;
freetube = discoverTests (import ./freetube.nix);
freshrss = import ./freshrss { inherit runTest; };
@@ -675,6 +710,7 @@ in
gobgpd = runTest ./gobgpd.nix;
gocd-agent = runTest ./gocd-agent.nix;
gocd-server = runTest ./gocd-server.nix;
+ gocron = runTest ./gocron.nix;
gocryptfs = runTest ./gocryptfs.nix;
gokapi = runTest ./gokapi.nix;
gollum = runTest ./gollum.nix;
@@ -694,7 +730,13 @@ in
greetd-no-shadow = runTest ./greetd-no-shadow.nix;
grocy = runTest ./grocy.nix;
grow-partition = runTest ./grow-partition.nix;
- grub = runTest ./grub.nix;
+ grub = {
+ basic = runTest ./grub/basic.nix;
+ efi = runTest ./grub/efi.nix;
+ graphical = runTest ./grub/graphical.nix;
+ hashed-password = runTest ./grub/hashed-password.nix;
+ mirrored-boots = runTest ./grub/mirrored-boots.nix;
+ };
gs1200-exporter = runTest ./gs1200-exporter.nix;
guacamole-server = runTest ./guacamole-server.nix;
guix = handleTest ./guix { };
@@ -751,6 +793,7 @@ in
hitch = handleTest ./hitch { };
hledger-web = runTest ./hledger-web.nix;
hockeypuck = runTest ./hockeypuck.nix;
+ holo-daemon-modular-service = runTest ./holo-daemon-modular.nix;
home-assistant = runTest ./home-assistant.nix;
homebox = runTest ./homebox.nix;
homebridge = runTest ./homebridge.nix;
@@ -844,7 +887,7 @@ in
kbd-setfont-decompress = runTest ./kbd-setfont-decompress.nix;
kbd-update-search-paths-patch = runTest ./kbd-update-search-paths-patch.nix;
kea = runTest ./kea.nix;
- keepalived = runTest ./keepalived.nix;
+ keepalived = discoverTests (import ./keepalived.nix);
keepassxc = runTest ./keepassxc.nix;
kerberos = handleTest ./kerberos/default.nix { };
kernel-generic = handleTest ./kernel-generic { };
@@ -861,6 +904,7 @@ in
kmonad = runTest ./kmonad.nix;
kmscon = runTest ./kmscon.nix;
knot = runTest ./knot.nix;
+ koito = runTest ./web-apps/koito.nix;
komga = runTest ./komga.nix;
komodo-periphery = runTest ./komodo-periphery.nix;
krb5 = discoverTests (import ./krb5);
@@ -926,6 +970,7 @@ in
localsend = runTest ./localsend.nix;
locate = runTest ./locate.nix;
login = runTest ./login.nix;
+ login-nosuid = runTest ./login-nosuid.nix;
logkeys = runTest ./logkeys.nix;
logrotate = runTest ./logrotate.nix;
loki = runTest ./loki.nix;
@@ -943,6 +988,7 @@ in
lomiri-system-settings = runTest ./lomiri-system-settings.nix;
lorri = handleTest ./lorri/default.nix { };
luks = runTest ./luks.nix;
+ luks-suspend = runTest ./luks-suspend.nix;
lvm2 = import ./lvm2 { inherit pkgs runTest; };
lxc = runTestOn [ "x86_64-linux" "aarch64-linux" ] ./lxc;
lxd-image-server = runTest ./lxd-image-server.nix;
@@ -965,10 +1011,10 @@ in
matomo = runTest ./matomo.nix;
matrix-alertmanager = runTest ./matrix/matrix-alertmanager.nix;
matrix-appservice-irc = runTest ./matrix/appservice-irc.nix;
+ matrix-authentication-service = runTest ./matrix/matrix-authentication-service.nix;
matrix-conduit = runTest ./matrix/conduit.nix;
matrix-continuwuity = runTest ./matrix/continuwuity.nix;
matrix-synapse = runTest ./matrix/synapse.nix;
- matrix-synapse-workers = runTest ./matrix/synapse-workers.nix;
matrix-tuwunel = runTest ./matrix/tuwunel.nix;
matter-server = runTest ./matter-server.nix;
matterjs-server = runTest ./matterjs-server.nix;
@@ -1047,6 +1093,7 @@ in
mysql-autobackup = handleTest ./mysql/mysql-autobackup.nix { };
mysql-backup = handleTest ./mysql/mysql-backup.nix { };
mysql-replication = handleTest ./mysql/mysql-replication.nix { };
+ mysql-secure-root = handleTest ./mysql/mysql-secure-root.nix { };
n8n = runTest ./n8n.nix;
nagios = runTestOn [ "x86_64-linux" "aarch64-linux" ] ./nagios.nix;
nar-serve = runTest ./nar-serve.nix;
@@ -1098,6 +1145,7 @@ in
nextflow = runTestOn [ "x86_64-linux" ] ./nextflow.nix;
nextjs-ollama-llm-ui = runTest ./web-apps/nextjs-ollama-llm-ui.nix;
nexus = runTest ./nexus.nix;
+ nezha = runTest ./nezha.nix;
# TODO: Test nfsv3 + Kerberos
nfs3 = handleTest ./nfs { version = 3; };
nfs4 = handleTest ./nfs { version = 4; };
@@ -1108,6 +1156,7 @@ in
nginx-etag-compression = runTest ./nginx-etag-compression.nix;
nginx-globalredirect = runTest ./nginx-globalredirect.nix;
nginx-http3 = import ./nginx-http3.nix { inherit pkgs runTest; };
+ nginx-lua = runTest ./nginx-lua.nix;
nginx-mime = runTest ./nginx-mime.nix;
nginx-modsecurity = runTest ./nginx-modsecurity.nix;
nginx-moreheaders = runTest ./nginx-moreheaders.nix;
@@ -1166,6 +1215,7 @@ in
nominatim = runTest ./nominatim.nix;
non-default-filesystems = handleTest ./non-default-filesystems.nix { };
non-switchable-system = runTest ./non-switchable-system.nix;
+ nordvpn = runTest ./nordvpn.nix;
noto-fonts = runTest ./noto-fonts.nix;
noto-fonts-cjk-qt-default-weight = runTest ./noto-fonts-cjk-qt-default-weight.nix;
novacomd = handleTestOn [ "x86_64-linux" ] ./novacomd.nix { };
@@ -1326,7 +1376,7 @@ in
pixelfed = import ./web-apps/pixelfed { inherit runTestOn; };
plantuml-server = runTest ./plantuml-server.nix;
plasma6 = runTest ./plasma6.nix;
- plausible = runTest ./plausible.nix;
+ plausible = import ./plausible.nix { inherit runTest; };
playwright-python = runTest ./playwright-python.nix;
please = runTest ./please.nix;
pleroma = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./pleroma.nix { };
@@ -1398,14 +1448,6 @@ in
pykms = runTest ./pykms.nix;
qbittorrent = runTest ./qbittorrent.nix;
qboot = runTestOn [ "x86_64-linux" "i686-linux" ] ./qboot.nix;
- qemu-vm-credentials-fwcfg = runTest {
- imports = [ ./qemu-vm-credentials.nix ];
- _module.args.mechanism = "fw_cfg";
- };
- qemu-vm-credentials-smbios = runTestOn [ "x86_64-linux" ] {
- imports = [ ./qemu-vm-credentials.nix ];
- _module.args.mechanism = "smbios";
- };
qemu-vm-external-disk-image = runTest ./qemu-vm-external-disk-image.nix;
qemu-vm-restrictnetwork = handleTest ./qemu-vm-restrictnetwork.nix { };
qemu-vm-store = runTest ./qemu-vm-store.nix;
@@ -1480,6 +1522,7 @@ in
rtkit = runTest ./rtkit.nix;
rtorrent = runTest ./rtorrent.nix;
rush = runTest ./rush.nix;
+ rustfs = runTest ./rustfs.nix;
rustical = runTest ./web-apps/rustical.nix;
rustls-libssl = runTest ./rustls-libssl.nix;
rxe = runTest ./rxe.nix;
@@ -1491,7 +1534,6 @@ in
sanoid = runTest ./sanoid.nix;
saunafs = runTest ./saunafs.nix;
scanservjs = runTest ./scanservjs.nix;
- scaphandre = runTest ./scaphandre.nix;
schleuder = runTest ./schleuder.nix;
scion-freestanding-deployment = runTest ./scion/freestanding-deployment;
scrutiny = runTest ./scrutiny.nix;
@@ -1508,7 +1550,7 @@ in
sftpgo = runTest ./sftpgo.nix;
sfxr-qt = runTest ./sfxr-qt.nix;
sgt-puzzles = runTest ./sgt-puzzles.nix;
- shadow = runTest ./shadow.nix;
+ shadow = import ./shadow { inherit runTest; };
shadowsocks = handleTest ./shadowsocks { };
shadps4 = runTest ./shadps4.nix;
sharkey = runTest ./web-apps/sharkey.nix;
@@ -1554,6 +1596,8 @@ in
sssd-ldap = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./sssd-ldap.nix { };
sssd-legacy-config = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./sssd-legacy-config.nix { };
stalwart = runTest ./stalwart/stalwart.nix;
+ stardust-xr-atmosphere = runTest ./stardust-xr/atmosphere.nix;
+ stardust-xr-flatland = runTest ./stardust-xr/flatland.nix;
stargazer = runTest ./web-servers/stargazer.nix;
starship = runTest ./starship.nix;
startx = import ./startx.nix { inherit pkgs runTest; };
@@ -1565,6 +1609,7 @@ in
strichliste = runTest ./web-apps/strichliste.nix;
strongswan-swanctl = runTest ./strongswan-swanctl.nix;
stub-ld = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./stub-ld.nix { };
+ stump = runTest ./web-apps/stump.nix;
stunnel = import ./stunnel.nix { inherit runTest; };
sudo = runTest ./sudo.nix;
sudo-rs = runTest ./sudo-rs.nix;
@@ -1595,6 +1640,16 @@ in
syncthing-relay = runTest ./syncthing/relay.nix;
sysfs = runTest ./sysfs.nix;
sysinit-reactivation = runTest ./sysinit-reactivation.nix;
+ system-services-compliance = recurseIntoAttrs (
+ import ./system-services-compliance.nix {
+ inherit
+ pkgs
+ evalSystem
+ runTest
+ callTest
+ ;
+ }
+ );
systemd = runTest ./systemd.nix;
systemd-analyze = runTest ./systemd-analyze.nix;
systemd-binfmt = handleTestOn [ "x86_64-linux" ] ./systemd-binfmt.nix { };
@@ -1629,6 +1684,7 @@ in
"i686-linux"
] ./initrd-network-openvpn { systemdStage1 = true; };
systemd-initrd-networkd-ssh = runTest ./systemd-initrd-networkd-ssh.nix;
+ systemd-initrd-non-nixos = runTest ./systemd-initrd-non-nixos.nix;
systemd-initrd-shutdown = runTest {
imports = [ ./systemd-shutdown.nix ];
_module.args.systemdStage1 = true;
@@ -1641,6 +1697,7 @@ in
systemd-journal = runTest ./systemd-journal.nix;
systemd-journal-gateway = runTest ./systemd-journal-gateway.nix;
systemd-journal-upload = runTest ./systemd-journal-upload.nix;
+ systemd-localed = runTest ./systemd-localed.nix;
systemd-lock-handler = runTestOn [ "aarch64-linux" "x86_64-linux" ] ./systemd-lock-handler.nix;
systemd-machinectl = runTest ./systemd-machinectl.nix;
systemd-misc = runTest ./systemd-misc.nix;
@@ -1677,6 +1734,7 @@ in
systemd-user-settings = runTest ./systemd-user-settings.nix;
systemd-user-tmpfiles-rules = runTest ./systemd-user-tmpfiles-rules.nix;
systemd-userdbd = runTest ./systemd-userdbd.nix;
+ systemd-varlink = runTest ./systemd-varlink.nix;
systemtap = handleTest ./systemtap.nix { };
szurubooru = handleTest ./szurubooru.nix { };
taler = handleTest ./taler { };
@@ -1701,6 +1759,7 @@ in
tiddlywiki = runTest ./tiddlywiki.nix;
tigervnc = handleTest ./tigervnc.nix { };
tika = runTest ./tika.nix;
+ timekpr = runTest ./timekpr.nix;
timezone = runTest ./timezone.nix;
timidity = handleTestOn [ "aarch64-linux" "x86_64-linux" ] ./timidity { };
tinc = handleTest ./tinc { };
@@ -1740,6 +1799,7 @@ in
twingate = runTest ./twingate.nix;
txredisapi = runTest ./txredisapi.nix;
typesense = runTest ./typesense.nix;
+ tzpfms = runTest ./tzpfms.nix;
tzupdate = runTest ./tzupdate.nix;
ucarp = runTest ./ucarp.nix;
udisks2 = runTest ./udisks2.nix;
@@ -1751,6 +1811,7 @@ in
unifi = runTest ./unifi.nix;
unit-perl = runTest ./web-servers/unit-perl.nix;
unit-php = runTest ./web-servers/unit-php.nix;
+ unpackerr = runTest ./unpackerr.nix;
upnp.iptables = handleTest ./upnp.nix { useNftables = false; };
upnp.nftables = handleTest ./upnp.nix { useNftables = true; };
uptermd = runTest ./uptermd.nix;
@@ -1795,6 +1856,7 @@ in
};
virtualbox = handleTestOn [ "x86_64-linux" ] ./virtualbox.nix { };
vm-variant = handleTest ./vm-variant.nix { };
+ vnstat = runTest ./vnstat.nix;
vscode-remote-ssh = handleTestOn [ "x86_64-linux" ] ./vscode-remote-ssh.nix { };
vscodium = import ./vscodium.nix { inherit runTest; };
vsftpd = runTest ./vsftpd.nix;
@@ -1805,6 +1867,7 @@ in
wasabibackend = runTest ./wasabibackend.nix;
wastebin = runTest ./wastebin.nix;
watchdogd = runTest ./watchdogd.nix;
+ watt = runTest ./watt.nix;
webhook = runTest ./webhook.nix;
weblate = runTest ./web-apps/weblate.nix;
wg-access-server = runTest ./wg-access-server.nix;
diff --git a/nixos/tests/alps.nix b/nixos/tests/alps.nix
index ced254b1819c..b33428378bc2 100644
--- a/nixos/tests/alps.nix
+++ b/nixos/tests/alps.nix
@@ -1,12 +1,16 @@
+{ lib, ... }:
let
certs = import ./common/acme/server/snakeoil-certs.nix;
domain = certs.domain;
+ port = 1323;
in
-{ pkgs, ... }:
{
name = "alps";
- meta = with pkgs.lib.maintainers; {
- maintainers = [ hmenke ];
+ meta = {
+ maintainers = with lib.maintainers; [
+ hmenke
+ prince213
+ ];
};
nodes = {
@@ -53,43 +57,55 @@ in
};
};
};
-
client =
- { nodes, config, ... }:
+ { nodes, pkgs, ... }:
{
security.pki.certificateFiles = [
certs.ca.cert
];
networking.extraHosts = ''
- ${nodes.server.config.networking.primaryIPAddress} ${domain}
+ ${nodes.server.networking.primaryIPAddress} ${domain}
'';
services.alps = {
enable = true;
- theme = "alps";
- imaps = {
- host = domain;
- port = 993;
- };
- smtps = {
- host = domain;
- port = 465;
+ settings = {
+ server = {
+ addr = ":${toString port}";
+ };
+ provider = {
+ type = "imap";
+ imap = {
+ server = "imaps://${domain}:993";
+ };
+ };
+ smtp = {
+ server = "smtps://${domain}:465";
+ };
};
};
environment.systemPackages = [
(pkgs.writers.writePython3Bin "test-alps-login" { } ''
from urllib.request import build_opener, HTTPCookieProcessor, Request
- from urllib.parse import urlencode, urljoin
+ from urllib.parse import urljoin
from http.cookiejar import CookieJar
+ import json
- baseurl = "http://localhost:${toString config.services.alps.port}"
+ baseurl = "http://localhost:${toString port}"
username = "alice"
- password = "${nodes.server.config.users.users.alice.password}"
+ password = "${nodes.server.users.users.alice.password}"
cookiejar = CookieJar()
cookieprocessor = HTTPCookieProcessor(cookiejar)
opener = build_opener(cookieprocessor)
- data = urlencode({"username": username, "password": password}).encode()
- req = Request(urljoin(baseurl, "login"), data=data, method="POST")
+ data = json.dumps(
+ {"username": username, "password": password, "remember-me": ""}
+ ).encode()
+ req = Request(
+ urljoin(baseurl, "session"),
+ data=data,
+ headers={"Content-Type": "application/json"},
+ method="POST",
+ )
with opener.open(req) as ret:
# Check that the alps_session cookie is set
print(cookiejar)
@@ -102,9 +118,9 @@ in
assert any(cookie.name == "alps_session" for cookie in cookiejar)
# ...and that we have not been redirected back to the login page
print(ret.url)
- assert ret.url == urljoin(baseurl, "mailbox/INBOX")
+ assert ret.url != urljoin(baseurl, "#/login")
- req = Request(urljoin(baseurl, "logout"))
+ req = Request(urljoin(baseurl, "session"), method="DELETE")
with opener.open(req) as ret:
# Check that the alps_session cookie is now gone
print(cookiejar)
@@ -114,18 +130,16 @@ in
};
};
- testScript =
- { nodes, ... }:
- ''
- server.start()
- server.wait_for_unit("postfix.service")
- server.wait_for_unit("dovecot.service")
- server.wait_for_open_port(465)
- server.wait_for_open_port(993)
+ testScript = ''
+ server.start()
+ server.wait_for_unit("postfix.service")
+ server.wait_for_unit("dovecot.service")
+ server.wait_for_open_port(465)
+ server.wait_for_open_port(993)
- client.start()
- client.wait_for_unit("alps.service")
- client.wait_for_open_port(${toString nodes.client.config.services.alps.port})
- client.succeed("test-alps-login")
- '';
+ client.start()
+ client.wait_for_unit("alps.service")
+ client.wait_for_open_port(${toString port})
+ client.succeed("test-alps-login")
+ '';
}
diff --git a/nixos/tests/angrr.nix b/nixos/tests/angrr.nix
index 300f3643b0ba..362ffe276872 100644
--- a/nixos/tests/angrr.nix
+++ b/nixos/tests/angrr.nix
@@ -95,7 +95,7 @@ in
machine.succeed("su normal --command 'nix build /run/current-system --out-link /tmp/result-user-auto-gc-root-2'")
machine.systemctl("start nix-gc.service")
- # Not auto gc root will be removed
+ # No auto gc root will be removed
machine.succeed("readlink /tmp/result-root-auto-gc-root-1")
machine.succeed("readlink /tmp/result-root-auto-gc-root-2")
machine.succeed("readlink /tmp/result-user-auto-gc-root-1")
diff --git a/nixos/tests/authelia.nix b/nixos/tests/authelia.nix
index 98abca0fbc57..256c92cd706e 100644
--- a/nixos/tests/authelia.nix
+++ b/nixos/tests/authelia.nix
@@ -28,12 +28,10 @@
# This is purely for testing purposes!
environment.etc."authelia/storageEncryptionKeyFile" = {
mode = "0400";
- user = "authelia-testing";
text = "you_must_generate_a_random_string_of_more_than_twenty_chars_and_configure_this";
};
environment.etc."authelia/jwtSecretFile" = {
mode = "0400";
- user = "authelia-testing";
text = "a_very_important_secret";
};
environment.etc."authelia/users_database.yml" = {
diff --git a/nixos/tests/bentopdf/caddy.nix b/nixos/tests/bentopdf/caddy.nix
index 0f4fc88063db..9780f1e890a5 100644
--- a/nixos/tests/bentopdf/caddy.nix
+++ b/nixos/tests/bentopdf/caddy.nix
@@ -22,7 +22,7 @@ import ../make-test-python.nix (
machine.wait_for_unit("caddy.service")
machine.wait_for_open_port(80)
machine.succeed("curl -vvv --fail --show-error --silent --location --insecure http://localhost/")
- assert "BentoPDF - The Privacy First PDF Toolkit" in machine.succeed("curl --fail --show-error --silent --location --insecure http://localhost/")
+ assert "PDF Tools" in machine.succeed("curl --fail --show-error --silent --location --insecure http://localhost/")
'';
}
)
diff --git a/nixos/tests/bentopdf/nginx.nix b/nixos/tests/bentopdf/nginx.nix
index 257dc909894e..68720403a3a4 100644
--- a/nixos/tests/bentopdf/nginx.nix
+++ b/nixos/tests/bentopdf/nginx.nix
@@ -18,7 +18,7 @@ import ../make-test-python.nix (
testScript = ''
machine.wait_for_unit("nginx.service")
machine.wait_for_open_port(80)
- assert "BentoPDF - The Privacy First PDF Toolkit" in machine.succeed("curl --fail --show-error --silent --location --insecure http://localhost:80/")
+ assert "PDF Tools" in machine.succeed("curl --fail --show-error --silent --location --insecure http://localhost:80/")
'';
}
)
diff --git a/nixos/tests/blint.nix b/nixos/tests/blint.nix
index ea0a14cb4b1f..3438f4926f82 100644
--- a/nixos/tests/blint.nix
+++ b/nixos/tests/blint.nix
@@ -14,7 +14,7 @@
]
++ teams.ngi.members;
- nodes.machine = {
+ containers.machine = {
environment.systemPackages = with pkgs; [
blint
jq
diff --git a/nixos/tests/bluesky-pds.nix b/nixos/tests/bluesky-pds.nix
index b74c74955f54..aa791a43c27b 100644
--- a/nixos/tests/bluesky-pds.nix
+++ b/nixos/tests/bluesky-pds.nix
@@ -2,7 +2,7 @@
{
name = "PDS";
- nodes.machine = {
+ containers.machine = {
services.bluesky-pds = {
enable = true;
settings = {
diff --git a/nixos/tests/boot.nix b/nixos/tests/boot.nix
index d1ac1a8769fe..ecc6240fc888 100644
--- a/nixos/tests/boot.nix
+++ b/nixos/tests/boot.nix
@@ -203,11 +203,26 @@ in
makeTest {
name = "boot-uboot-extlinux";
nodes = { };
- testScript = ''
- import os
+ testScript = /* py */ ''
+ import subprocess
# Create a mutable linked image backed by the read-only SD image
- if os.system("qemu-img create -f qcow2 -F raw -b ${sdImage} ${mutableImage}") != 0:
+ if (
+ subprocess.run(
+ [
+ "${pkgs.qemu}/bin/qemu-img",
+ "create",
+ "-f",
+ "qcow2",
+ "-F",
+ "raw",
+ "-b",
+ "${sdImage}",
+ "${mutableImage}",
+ ]
+ ).returncode
+ != 0
+ ):
raise RuntimeError("Could not create mutable linked image")
machine = create_machine("${startCommand}")
diff --git a/nixos/tests/botamusique.nix b/nixos/tests/botamusique.nix
deleted file mode 100644
index 2a5c23000235..000000000000
--- a/nixos/tests/botamusique.nix
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- name = "botamusique";
-
- nodes = {
- machine = {
- networking.extraHosts = ''
- 127.0.0.1 all.api.radio-browser.info
- '';
-
- services.murmur = {
- enable = true;
- registerName = "NixOS tests";
- };
-
- services.botamusique = {
- enable = true;
- settings = {
- server = {
- channel = "NixOS tests";
- };
- bot = {
- version = false;
- auto_check_update = false;
- };
- };
- };
- };
- };
-
- testScript = ''
- start_all()
-
- machine.wait_for_unit("murmur.service")
- machine.wait_for_unit("botamusique.service")
-
- machine.sleep(10)
-
- machine.wait_until_succeeds(
- "journalctl -u murmur.service -e | grep -q '<1:botamusique(-1)> Authenticated'"
- )
-
- with subtest("Check systemd hardening"):
- output = machine.execute("systemctl show botamusique.service")[1]
- machine.log(output)
- output = machine.execute("systemd-analyze security botamusique.service")[1]
- machine.log(output)
- '';
-}
diff --git a/nixos/tests/caddy.nix b/nixos/tests/caddy.nix
index c719a1b233b1..d7f2b72ef6de 100644
--- a/nixos/tests/caddy.nix
+++ b/nixos/tests/caddy.nix
@@ -1,11 +1,11 @@
-{ pkgs, ... }:
+{ lib, ... }:
+
{
name = "caddy";
- meta = with pkgs.lib.maintainers; {
- maintainers = [
- stepbrobd
- ];
- };
+
+ meta.maintainers = with lib.maintainers; [
+ stepbrobd
+ ];
nodes = {
webserver =
@@ -69,24 +69,6 @@
respond "hello world"
'';
};
- specialisation.with-plugins.configuration = {
- services.caddy = {
- package = pkgs.caddy.withPlugins {
- plugins = [ "github.com/caddyserver/replace-response@v0.0.0-20250618171559-80962887e4c6" ];
- hash = "sha256-0N/bQAM5yT6g9UAteWsfxofGcelmU/NDTroS2oL43Gs=";
- };
- configFile = pkgs.writeText "Caddyfile" ''
- {
- order replace after encode
- }
-
- localhost:80 {
- respond "hello world"
- replace world caddy
- }
- '';
- };
- };
};
};
@@ -98,7 +80,6 @@
multipleConfigs = "${nodes.webserver.system.build.toplevel}/specialisation/multiple-configs";
multipleHostnames = "${nodes.webserver.system.build.toplevel}/specialisation/multiple-hostnames";
rfc42Config = "${nodes.webserver.system.build.toplevel}/specialisation/rfc42";
- withPluginsConfig = "${nodes.webserver.system.build.toplevel}/specialisation/with-plugins";
in
''
url = "http://localhost/example.html"
@@ -141,12 +122,5 @@
)
webserver.wait_for_open_port(80)
webserver.succeed("curl http://localhost | grep hello")
-
- with subtest("plugins are correctled installed and configurable"):
- webserver.succeed(
- "${withPluginsConfig}/bin/switch-to-configuration test >&2"
- )
- webserver.wait_for_open_port(80)
- webserver.succeed("curl http://localhost | grep caddy")
'';
}
diff --git a/nixos/tests/cage.nix b/nixos/tests/cage.nix
index 10fe997a71d7..fa0c8125862d 100644
--- a/nixos/tests/cage.nix
+++ b/nixos/tests/cage.nix
@@ -29,7 +29,7 @@
testScript =
{ nodes, ... }:
let
- user = nodes.machine.config.users.users.alice;
+ user = nodes.machine.users.users.alice;
in
''
with subtest("Wait for cage to boot up"):
diff --git a/nixos/tests/cagebreak.nix b/nixos/tests/cagebreak.nix
index 13012281a151..7a2c0a381836 100644
--- a/nixos/tests/cagebreak.nix
+++ b/nixos/tests/cagebreak.nix
@@ -47,7 +47,7 @@ in
testScript =
{ nodes, ... }:
let
- user = nodes.machine.config.users.users.alice;
+ user = nodes.machine.users.users.alice;
XDG_RUNTIME_DIR = "/run/user/${toString user.uid}";
in
''
diff --git a/nixos/tests/ceph-multi-node-bluestore.nix b/nixos/tests/ceph-multi-node-bluestore.nix
new file mode 100644
index 000000000000..96fefca78230
--- /dev/null
+++ b/nixos/tests/ceph-multi-node-bluestore.nix
@@ -0,0 +1,602 @@
+# Multi-node Ceph cluster test using BlueStore OSDs.
+{
+ withCephfs ? false,
+}:
+{ lib, ... }:
+let
+ # Development knobs:
+ # * `defaultTimeout` caps how long every `waitUntilSucceeds` waits before it
+ # gives up. Lower it for faster feedback while iterating on the test.
+ # * When `investigateFailures` is true, a `waitUntilSucceeds` that times out
+ # does NOT fail the test; instead it dumps each machine's full (multi-boot)
+ # journal and `/var/log/ceph` into a `test-failure-investigation/` directory
+ # inside the test's working/output directory and then lets the test succeed,
+ # so the collected logs end up in the build's store path for convenient
+ # reading. Keep this `false` for real CI runs.
+ defaultTimeout = 60;
+ investigateFailures = false;
+
+ cfg = {
+ clusterId = "066ae264-2a5d-4729-8001-6ad265f50b03";
+ monA = {
+ name = "a";
+ ip = "192.168.1.1";
+ };
+ osd0 = {
+ name = "0";
+ ip = "192.168.1.2";
+ key = "AQBCEJNa3s8nHRAANvdsr93KqzBznuIWm2gOGg==";
+ uuid = "55ba2294-3e24-478f-bee0-9dca4c231dd9";
+ };
+ osd1 = {
+ name = "1";
+ ip = "192.168.1.3";
+ key = "AQBEEJNac00kExAAXEgy943BGyOpVH1LLlHafQ==";
+ uuid = "5e97a838-85b6-43b0-8950-cb56d554d1e5";
+ };
+ osd2 = {
+ name = "2";
+ ip = "192.168.1.4";
+ key = "AQAdyhZeIaUlARAAGRoidDAmS6Vkp546UFEf5w==";
+ uuid = "ea999274-13d0-4dd5-9af9-ad25a324f72f";
+ };
+ # Client that mounts CephFS using the in-kernel client.
+ kclient = {
+ ip = "192.168.1.5";
+ };
+ # Client that mounts CephFS using the `ceph-fuse` client.
+ fuseclient = {
+ ip = "192.168.1.6";
+ };
+ };
+ generateCephConfig =
+ { daemonConfig }:
+ {
+ enable = true;
+ global = {
+ fsid = cfg.clusterId;
+ monHost = cfg.monA.ip;
+ monInitialMembers = cfg.monA.name;
+ };
+ }
+ // daemonConfig;
+
+ generateHost =
+ { cephConfig, networkConfig }:
+ { pkgs, ... }:
+ {
+ virtualisation = {
+ # A single raw block device per machine, consumed directly by BlueStore
+ # as `/dev/vdb`. Because BlueStore owns the raw device (there is no
+ # filesystem to mount), the OSD's on-disk state survives a hard
+ # crash/reboot and the OSD comes back automatically.
+ emptyDiskImages = [ 20480 ];
+ vlans = [ 1 ];
+ };
+
+ networking = networkConfig;
+
+ # TODO: Why do we need any of these? Shouldn't Ceph work independent of `systemPackages`? Only `sudo` and `ceph` are used in our own test code.
+ environment.systemPackages = with pkgs; [
+ bash
+ sudo
+ ceph
+ netcat
+ ];
+
+ services.ceph = cephConfig;
+
+ # Restart limits are unsuitable for daemons that must recover from
+ # arbitrary crash/network downtimes.
+ # Ensure all daemons have infinite restart limits.
+ # Otherwise the tests are flaky based on timing.
+ systemd.services =
+ let
+ daemonUnits =
+ lib.concatMap
+ (
+ daemonType:
+ lib.optionals (cephConfig.${daemonType}.enable or false) (
+ map (daemon: "ceph-${daemonType}-${daemon}") cephConfig.${daemonType}.daemons
+ )
+ )
+ [
+ "mon"
+ "mgr"
+ "osd"
+ "mds"
+ ];
+ in
+ lib.genAttrs daemonUnits (_: {
+ serviceConfig.Restart = lib.mkForce "always";
+ serviceConfig.RestartSec = lib.mkForce "1";
+ unitConfig.StartLimitIntervalSec = lib.mkForce 0; # Ensure Restart=always is always honoured (no start limit)
+ });
+ };
+
+ networkMonA = {
+ dhcpcd.enable = false;
+ interfaces.eth1.ipv4.addresses = lib.mkOverride 0 [
+ {
+ address = cfg.monA.ip;
+ prefixLength = 24;
+ }
+ ];
+ firewall = {
+ allowedTCPPorts = [
+ 6789
+ 3300
+ ];
+ allowedTCPPortRanges = [
+ {
+ from = 6800;
+ to = 7300;
+ }
+ ];
+ };
+ };
+ cephConfigMonA = generateCephConfig {
+ daemonConfig = {
+ mon = {
+ enable = true;
+ daemons = [ cfg.monA.name ];
+ };
+ mgr = {
+ enable = true;
+ daemons = [ cfg.monA.name ];
+ };
+ }
+ # The MDS daemon (which provides CephFS) is only configured in the CephFS
+ # variant of this test.
+ // lib.optionalAttrs withCephfs {
+ mds = {
+ enable = true;
+ daemons = [ cfg.monA.name ];
+ };
+ };
+ };
+
+ networkOsd = osd: {
+ dhcpcd.enable = false;
+ interfaces.eth1.ipv4.addresses = lib.mkOverride 0 [
+ {
+ address = osd.ip;
+ prefixLength = 24;
+ }
+ ];
+ firewall = {
+ allowedTCPPortRanges = [
+ {
+ from = 6800;
+ to = 7300;
+ }
+ ];
+ };
+ };
+
+ cephConfigOsd =
+ osd:
+ generateCephConfig {
+ daemonConfig = {
+ osd = {
+ enable = true;
+ daemons = [ osd.name ];
+ };
+ };
+ };
+
+ # The CephFS clients only need the ceph client tooling. They do not run any
+ # ceph daemon, so they only get a minimal ceph config pointing at the mon.
+ # The in-kernel ceph filesystem module is part of the default kernel and is
+ # autoloaded by `mount -t ceph`, so no extra modules are needed.
+ networkClient = client: {
+ dhcpcd.enable = false;
+ interfaces.eth1.ipv4.addresses = lib.mkOverride 0 [
+ {
+ address = client.ip;
+ prefixLength = 24;
+ }
+ ];
+ };
+
+ cephConfigClient = generateCephConfig { daemonConfig = { }; };
+
+ generateClientHost =
+ { networkConfig }:
+ { pkgs, ... }:
+ {
+ virtualisation = {
+ vlans = [ 1 ];
+ };
+
+ networking = networkConfig;
+
+ environment.systemPackages = with pkgs; [
+ ceph
+ ];
+
+ services.ceph = cephConfigClient;
+ };
+
+ # Python prelude that must run before any test code.
+ # It replaces every machine's `wait_until_succeeds()` with a wrapper that
+ # implements the "development knobs" above.
+ helperScript = ''
+ import os
+ import shutil
+
+ DEFAULT_TIMEOUT = ${toString defaultTimeout}
+ INVESTIGATE_FAILURES = ${if investigateFailures then "True" else "False"}
+
+ def collect_failure_investigation(failed_machine, command):
+ out_dir = os.path.join(driver.out_dir, "test-failure-investigation")
+ os.makedirs(out_dir, exist_ok=True)
+ with open(os.path.join(out_dir, "README.txt"), "w") as f:
+ f.write(
+ "wait_until_succeeds timed out on machine "
+ f"'{failed_machine.name}' running command:\n{command}\n"
+ )
+ for m in machines:
+ try:
+ m.execute("journalctl --no-pager --boot=all > /tmp/journal.txt 2>&1; true")
+ m.copy_from_machine("/tmp/journal.txt", out_dir)
+ shutil.move(
+ os.path.join(out_dir, "journal.txt"),
+ os.path.join(out_dir, f"{m.name}-journal.txt"),
+ )
+ except Exception as e:
+ m.log(f"could not collect journal: {e}")
+ try:
+ m.copy_from_machine("/var/log/ceph", out_dir)
+ shutil.move(
+ os.path.join(out_dir, "ceph"),
+ os.path.join(out_dir, f"{m.name}-ceph-logs"),
+ )
+ except Exception as e:
+ m.log(f"could not collect /var/log/ceph: {e}")
+
+ # Replace the test driver's `wait_until_succeeds` with our wrapper.
+ machine_class = machines[0].__class__
+ orig_wait_until_succeeds = machine_class.wait_until_succeeds
+
+ def patched_wait_until_succeeds(self, command: str, timeout: int = DEFAULT_TIMEOUT) -> str:
+ try:
+ return orig_wait_until_succeeds(self, command, timeout=timeout)
+ except Exception:
+ if not INVESTIGATE_FAILURES:
+ raise
+ self.log(
+ "wait_until_succeeds timed out; collecting logs into "
+ "test-failure-investigation/ and ending the test as 'passed' "
+ "(investigateFailures = true)"
+ )
+ collect_failure_investigation(self, command)
+ os._exit(0)
+
+ # Use `setattr` (rather than a plain attribute assignment) so the type
+ # checker does not treat this as implicitly shadowing the driver's
+ # `wait_until_succeeds`; the replacement is intentional.
+ setattr(machine_class, "wait_until_succeeds", patched_wait_until_succeeds)
+ '';
+
+ # Set up the cluster (mon, mgr, BlueStore OSDs) and perform a
+ # hard whole-cluster crash/recovery (failover) test.
+ #
+ # Based on the "manual deployment" approach from:
+ # https://docs.ceph.com/en/tentacle/install/manual-deployment/
+ baseScript = ''
+ start_all()
+
+ monA.wait_for_unit("network.target")
+ osd0.wait_for_unit("network.target")
+ osd1.wait_for_unit("network.target")
+ osd2.wait_for_unit("network.target")
+
+ # Bootstrap ceph-mon daemon
+ monA.succeed(
+ "sudo -u ceph ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'",
+ "sudo -u ceph ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'",
+ "sudo -u ceph ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring",
+ "monmaptool --create --add ${cfg.monA.name} ${cfg.monA.ip} --fsid ${cfg.clusterId} /tmp/monmap",
+ "sudo -u ceph ceph-mon --mkfs -i ${cfg.monA.name} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring",
+ "sudo -u ceph mkdir -p /var/lib/ceph/mgr/ceph-${cfg.monA.name}/",
+ "sudo -u ceph touch /var/lib/ceph/mon/ceph-${cfg.monA.name}/done",
+ "systemctl start ceph-mon-${cfg.monA.name}",
+ )
+ monA.wait_for_unit("ceph-mon-${cfg.monA.name}")
+ monA.succeed("ceph mon enable-msgr2")
+ monA.succeed("ceph config set mon auth_allow_insecure_global_id_reclaim false")
+
+ # Can't check ceph status until a mon is up
+ monA.succeed("ceph -s | grep 'mon: 1 daemons'")
+
+ # Start the ceph-mgr daemon, it has no deps and hardly any setup
+ monA.succeed(
+ "ceph auth get-or-create mgr.${cfg.monA.name} mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-${cfg.monA.name}/keyring",
+ "sync", # to ensure shell redirection above is durable
+ "systemctl start ceph-mgr-${cfg.monA.name}",
+ )
+ monA.wait_for_unit("ceph-mgr-a")
+ monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
+ monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
+
+ # Send the admin keyring to the OSD machines.
+ monA.succeed("cp /etc/ceph/ceph.client.admin.keyring /tmp/shared")
+ osd0.succeed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph")
+ osd1.succeed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph")
+ osd2.succeed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph")
+
+ # Bootstrap the BlueStore OSDs.
+ osd0.succeed(
+ "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
+ "echo bluestore > /var/lib/ceph/osd/ceph-${cfg.osd0.name}/type",
+ "ln -sf /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd0.name}/block",
+ "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd0.name}/keyring --name osd.${cfg.osd0.name} --add-key ${cfg.osd0.key}",
+ 'echo \'{"cephx_secret": "${cfg.osd0.key}"}\' | ceph osd new ${cfg.osd0.uuid} -i -',
+ )
+ osd1.succeed(
+ "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
+ "echo bluestore > /var/lib/ceph/osd/ceph-${cfg.osd1.name}/type",
+ "ln -sf /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd1.name}/block",
+ "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd1.name}/keyring --name osd.${cfg.osd1.name} --add-key ${cfg.osd1.key}",
+ 'echo \'{"cephx_secret": "${cfg.osd1.key}"}\' | ceph osd new ${cfg.osd1.uuid} -i -',
+ )
+ osd2.succeed(
+ "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd2.name}",
+ "echo bluestore > /var/lib/ceph/osd/ceph-${cfg.osd2.name}/type",
+ "ln -sf /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd2.name}/block",
+ "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd2.name}/keyring --name osd.${cfg.osd2.name} --add-key ${cfg.osd2.key}",
+ 'echo \'{"cephx_secret": "${cfg.osd2.key}"}\' | ceph osd new ${cfg.osd2.uuid} -i -',
+ )
+
+ # We `sync` so that the config survives the forced crashes below.
+ osd0.succeed(
+ "ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}",
+ "chown -R ceph:ceph /var/lib/ceph/osd",
+ "sync",
+ "systemctl start ceph-osd-${cfg.osd0.name}",
+ )
+ osd1.succeed(
+ "ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}",
+ "chown -R ceph:ceph /var/lib/ceph/osd",
+ "sync",
+ "systemctl start ceph-osd-${cfg.osd1.name}",
+ )
+ osd2.succeed(
+ "ceph-osd -i ${cfg.osd2.name} --mkfs --osd-uuid ${cfg.osd2.uuid}",
+ "chown -R ceph:ceph /var/lib/ceph/osd",
+ "sync",
+ "systemctl start ceph-osd-${cfg.osd2.name}",
+ )
+ monA.wait_until_succeeds("ceph osd stat | grep -e '3 osds: 3 up[^,]*, 3 in'")
+ monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
+ monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
+
+ monA.succeed(
+ "ceph osd pool create multi-node-test 32 32",
+ "ceph osd pool ls | grep 'multi-node-test'",
+
+ # A pool that has no application associated with it stays unhealthy in
+ # state POOL_APP_NOT_ENABLED. Ceph only auto-associates an application
+ # for pools it manages itself, such as CephFS data/metadata pools
+ # (application "cephfs") and the pools RGW creates (application "rgw"); see
+ # https://docs.ceph.com/en/tentacle/rados/operations/pools/#associating-a-pool-with-an-application
+ # This is a plain RADOS pool, so we have to associate an application
+ # with it ourselves. We use the custom application name "nixos-test".
+ "ceph osd pool application enable multi-node-test nixos-test",
+
+ "ceph osd pool rename multi-node-test multi-node-other-test",
+ "ceph osd pool ls | grep 'multi-node-other-test'",
+ )
+ monA.succeed("ceph osd pool set multi-node-other-test size 2")
+ monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
+ monA.wait_until_succeeds("! ceph -s | grep -e 'unknown' -e 'pgs inactive'")
+ monA.fail(
+ "ceph osd pool ls | grep 'multi-node-test'",
+ "ceph osd pool delete multi-node-other-test multi-node-other-test --yes-i-really-really-mean-it",
+ )
+
+ # Shut down ceph on all machines in a very unpolite way
+ monA.crash()
+ osd0.crash()
+ osd1.crash()
+ osd2.crash()
+
+ # Start it up
+ osd0.start()
+ osd1.start()
+ osd2.start()
+ monA.start()
+
+ # Ensure the cluster comes back up again.
+ monA.wait_until_succeeds("ceph -s | grep 'mon: 1 daemons'")
+ monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
+ monA.wait_until_succeeds("ceph osd stat | grep -e '3 osds: 3 up[^,]*, 3 in'")
+ monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
+ monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
+
+ # Verify the recovery.
+ monA.wait_until_succeeds("! ceph -s | grep -e 'unknown' -e 'pgs inactive'", timeout=60)
+ '';
+
+ # For `withCephfs = true`, after the regular failover, test CephFS and mounts:
+ # * bring up an MDS
+ # * create a CephFS
+ # * mount it via in-kernel ("kclient") and a `ceph-fuse` ("fuseclient")
+ # from 2 different nodes
+ # * verify bidirectional visibility of file changes
+ # * performs another crash/recovery test (without crashing the clients)
+ # * verifiy the mounts survive and keep working.
+ cephfsScript = ''
+ kclient.wait_for_unit("network.target")
+ fuseclient.wait_for_unit("network.target")
+
+ # Start the ceph-mds daemon (which provides CephFS), after creating
+ # its keyring and data dir.
+ monA.succeed(
+ "sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-${cfg.monA.name}/",
+ "ceph auth get-or-create mds.${cfg.monA.name} mon 'allow profile mds' mgr 'allow profile mds' osd 'allow rwx' mds 'allow' > /var/lib/ceph/mds/ceph-${cfg.monA.name}/keyring",
+ "chown ceph:ceph /var/lib/ceph/mds/ceph-${cfg.monA.name}/keyring",
+ "sync", # to ensure config survives the forced crashes below
+ "systemctl start ceph-mds-${cfg.monA.name}",
+ )
+ monA.wait_for_unit("ceph-mds-${cfg.monA.name}")
+
+ # Create a CephFS.
+ monA.succeed(
+ "ceph osd pool create cephfs-data 32 32",
+ "ceph osd pool create cephfs-metadata 32 32",
+ "ceph fs new cephfs cephfs-metadata cephfs-data",
+ )
+ # Wait for the MDS to claim the filesystem and become active.
+ monA.wait_until_succeeds("ceph fs status cephfs | grep -e 'active'", timeout=60)
+
+ # Distribute the admin keyring (and a plain secret file for the kernel
+ # client) to both client machines, so that they can authenticate.
+ monA.succeed(
+ "cp /etc/ceph/ceph.client.admin.keyring /tmp/shared",
+ "ceph-authtool -p /etc/ceph/ceph.client.admin.keyring > /tmp/shared/admin.secret",
+ )
+ kclient.succeed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph")
+ fuseclient.succeed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph")
+ kclient.succeed("cp /tmp/shared/admin.secret /etc/ceph/admin.secret")
+
+ # Mount CephFS on the kernel client.
+ # We force the messenger v2 protocol via "ms_mode=secure"; the cluster
+ # has msgr2 enabled (see "ceph mon enable-msgr2" above) and the legacy v1
+ # protocol apparently does not reconnect reliably after the servers are restarted.
+ # The msgr2 monitor listens on port 3300 (instead of legacy v1 port 6789),
+ # so we have to point the device string at that port explicitly.
+ # `recover_session=clean` makes the kernel client automatically reconnect
+ # (discarding its stale session) after the whole cluster has been down,
+ # which would otherwise leave the mount blocklisted and hanging forever.
+ # Real CephFS use may not prefer hanging `recover_session=clean`, and
+ # prefer manual de-blocklisting to avoid any failed OS syscalls,
+ # but for this test, discarding stale sessions is good enough.
+ kclient.succeed("mkdir -p /mnt/cephfs")
+ kclient.wait_until_succeeds(
+ "mount -t ceph ${cfg.monA.ip}:3300:/ /mnt/cephfs -o name=admin,secretfile=/etc/ceph/admin.secret,ms_mode=secure,recover_session=clean"
+ )
+ kclient.succeed("mountpoint /mnt/cephfs")
+
+ # Mount CephFS on the FUSE client using ceph-fuse.
+ fuseclient.succeed("mkdir -p /mnt/cephfs")
+ fuseclient.wait_until_succeeds(
+ "ceph-fuse --id admin -m ${cfg.monA.ip}:6789 /mnt/cephfs"
+ )
+ fuseclient.succeed("mountpoint /mnt/cephfs")
+
+ # Both clients mount the same CephFS, so files written by one must be
+ # visible to the other. Verify this in both directions.
+
+ # Kernel client writes, FUSE client reads.
+ kclient.succeed("echo 'written by kclient' > /mnt/cephfs/from-kclient")
+ fuseclient.wait_until_succeeds(
+ "test \"$(cat /mnt/cephfs/from-kclient)\" = 'written by kclient'"
+ )
+
+ # FUSE client writes, kernel client reads.
+ fuseclient.succeed("echo 'written by fuseclient' > /mnt/cephfs/from-fuseclient")
+ kclient.wait_until_succeeds(
+ "test \"$(cat /mnt/cephfs/from-fuseclient)\" = 'written by fuseclient'"
+ )
+
+ # Crash test with CephFS.
+ # We deliberately do not crash the CephFS clients here: Their mounts must
+ # survive the (temporary) outage of the ceph servers and resume working
+ # once the cluster is healthy again.
+ monA.crash()
+ osd0.crash()
+ osd1.crash()
+ osd2.crash()
+
+ # Start it up
+ osd0.start()
+ osd1.start()
+ osd2.start()
+ monA.start()
+
+ # Ensure the cluster comes back up again.
+ # See the note above on why this uses `wait_until_succeeds`.
+ monA.wait_until_succeeds("ceph -s | grep 'mon: 1 daemons'")
+ monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
+ monA.wait_until_succeeds("ceph osd stat | grep -e '3 osds: 3 up[^,]*, 3 in'")
+ monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
+
+ monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'", timeout=60)
+
+ # Ensure the MDS/CephFS comes back up again, too.
+ monA.wait_for_unit("ceph-mds-${cfg.monA.name}")
+ monA.wait_until_succeeds("ceph fs status cephfs | grep -e 'active'", timeout=60)
+ monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
+
+ # The clients kept running across the outage, so their CephFS mounts
+ # should still be present and should reconnect automatically.
+ kclient.succeed("mountpoint /mnt/cephfs")
+ fuseclient.succeed("mountpoint /mnt/cephfs")
+
+ # The files written before the crash must still have the correct content.
+ kclient.wait_until_succeeds(
+ "test \"$(cat /mnt/cephfs/from-fuseclient)\" = 'written by fuseclient'"
+ )
+ fuseclient.wait_until_succeeds(
+ "test \"$(cat /mnt/cephfs/from-kclient)\" = 'written by kclient'"
+ )
+
+ # Ensure the mounts are still writable after recovery, in both directions.
+ kclient.succeed("echo 'written by kclient after recovery' > /mnt/cephfs/from-kclient-2")
+ fuseclient.wait_until_succeeds(
+ "test \"$(cat /mnt/cephfs/from-kclient-2)\" = 'written by kclient after recovery'"
+ )
+ fuseclient.succeed("echo 'written by fuseclient after recovery' > /mnt/cephfs/from-fuseclient-2")
+ kclient.wait_until_succeeds(
+ "test \"$(cat /mnt/cephfs/from-fuseclient-2)\" = 'written by fuseclient after recovery'"
+ )
+ '';
+
+in
+{
+ name = "basic-multi-node-ceph-cluster-bluestore" + lib.optionalString withCephfs "-cephfs";
+ meta = {
+ maintainers = with lib.maintainers; [
+ nh2
+ benaryorg
+ ];
+ };
+
+ nodes = {
+ monA = generateHost {
+ cephConfig = cephConfigMonA;
+ networkConfig = networkMonA;
+ };
+ osd0 = generateHost {
+ cephConfig = cephConfigOsd cfg.osd0;
+ networkConfig = networkOsd cfg.osd0;
+ };
+ osd1 = generateHost {
+ cephConfig = cephConfigOsd cfg.osd1;
+ networkConfig = networkOsd cfg.osd1;
+ };
+ osd2 = generateHost {
+ cephConfig = cephConfigOsd cfg.osd2;
+ networkConfig = networkOsd cfg.osd2;
+ };
+ }
+ # CephFS client machines are only needed when testing CephFS.
+ // lib.optionalAttrs withCephfs {
+ kclient = generateClientHost {
+ networkConfig = networkClient cfg.kclient;
+ };
+ fuseclient = generateClientHost {
+ networkConfig = networkClient cfg.fuseclient;
+ };
+ };
+
+ testScript =
+ { ... }:
+ ''
+ ${helperScript}
+ ${baseScript}
+ ${lib.optionalString withCephfs cephfsScript}
+ '';
+}
diff --git a/nixos/tests/ceph-multi-node.nix b/nixos/tests/ceph-multi-node-deprecated-filestore.nix
similarity index 96%
rename from nixos/tests/ceph-multi-node.nix
rename to nixos/tests/ceph-multi-node-deprecated-filestore.nix
index 7aaf31c14d3e..992a74f72972 100644
--- a/nixos/tests/ceph-multi-node.nix
+++ b/nixos/tests/ceph-multi-node-deprecated-filestore.nix
@@ -1,3 +1,4 @@
+# Tests the legacy FileStore OSD backend.
{ lib, ... }:
let
cfg = {
@@ -159,6 +160,7 @@ let
# Start the ceph-mgr daemon, it has no deps and hardly any setup
monA.succeed(
"ceph auth get-or-create mgr.${cfg.monA.name} mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-${cfg.monA.name}/keyring",
+ "sync", # to ensure shell redirection above is durable
"systemctl start ceph-mgr-${cfg.monA.name}",
)
monA.wait_for_unit("ceph-mgr-a")
@@ -194,20 +196,23 @@ let
'echo \'{"cephx_secret": "${cfg.osd2.key}"}\' | ceph osd new ${cfg.osd2.uuid} -i -',
)
- # Initialize the OSDs with regular filestore
+ # We `sync` so that the config survives the forced crashes below.
osd0.succeed(
"ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}",
"chown -R ceph:ceph /var/lib/ceph/osd",
+ "sync",
"systemctl start ceph-osd-${cfg.osd0.name}",
)
osd1.succeed(
"ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}",
"chown -R ceph:ceph /var/lib/ceph/osd",
+ "sync",
"systemctl start ceph-osd-${cfg.osd1.name}",
)
osd2.succeed(
"ceph-osd -i ${cfg.osd2.name} --mkfs --osd-uuid ${cfg.osd2.uuid}",
"chown -R ceph:ceph /var/lib/ceph/osd",
+ "sync",
"systemctl start ceph-osd-${cfg.osd2.name}",
)
monA.wait_until_succeeds("ceph osd stat | grep -e '3 osds: 3 up[^,]*, 3 in'")
@@ -258,7 +263,7 @@ let
'';
in
{
- name = "basic-multi-node-ceph-cluster";
+ name = "basic-multi-node-ceph-cluster-deprecated-filestore";
meta = with lib.maintainers; {
maintainers = [ lejonet ];
};
diff --git a/nixos/tests/ceph-single-node.nix b/nixos/tests/ceph-single-node-deprecated-filestore.nix
similarity index 99%
rename from nixos/tests/ceph-single-node.nix
rename to nixos/tests/ceph-single-node-deprecated-filestore.nix
index c7d822230fde..c08238559155 100644
--- a/nixos/tests/ceph-single-node.nix
+++ b/nixos/tests/ceph-single-node-deprecated-filestore.nix
@@ -269,7 +269,7 @@ let
'';
in
{
- name = "basic-single-node-ceph-cluster";
+ name = "basic-single-node-ceph-cluster-deprecated-filestore";
meta = with lib.maintainers; {
maintainers = [
lejonet
diff --git a/nixos/tests/chhoto-url.nix b/nixos/tests/chhoto-url.nix
index a2f443e9b0da..883b71117906 100644
--- a/nixos/tests/chhoto-url.nix
+++ b/nixos/tests/chhoto-url.nix
@@ -18,7 +18,6 @@
};
interactive.nodes.machine = {
- services.glitchtip.listenAddress = "0.0.0.0";
networking.firewall.allowedTCPPorts = [ 8000 ];
virtualisation.forwardPorts = [
{
@@ -29,9 +28,13 @@
];
};
+ interactive.sshBackdoor.enable = true;
+ interactive.defaults.virtualisation.graphics = false;
+
testScript = ''
import json
import re
+ import time
machine.wait_for_unit("chhoto-url.service")
machine.wait_for_open_port(8000)
@@ -53,8 +56,10 @@
assert (match := re.search(r"(?m)^location: (.+?)\r?$", resp))
assert match[1] == "https://nixos.org/"
+ time.sleep(2)
resp = json.loads(machine.succeed(f"curl -H 'X-API-Key: api_key' localhost:8000/api/expand -d '{slug}'"))
assert resp["success"] is True
+ assert resp["longurl"] == "https://nixos.org/"
assert resp["hits"] == 1
'';
}
diff --git a/nixos/tests/cinnamon-wayland.nix b/nixos/tests/cinnamon-wayland.nix
index 632ab53cc529..d26d50dd9dc6 100644
--- a/nixos/tests/cinnamon-wayland.nix
+++ b/nixos/tests/cinnamon-wayland.nix
@@ -51,8 +51,9 @@
machine.wait_until_succeeds("${eval "Main.runState"} | grep -q 'true,..2'")
with subtest("Check if Cinnamon components actually start"):
- for i in ["csd-media-keys", "xapp-sn-watcher", "nemo-desktop"]:
- machine.wait_until_succeeds(f"pgrep -f {i}")
+ # https://unix.stackexchange.com/a/74186
+ for i in ["[c]sd-media-keys", "[x]app-sn-watcher", "[n]emo-desktop"]:
+ machine.wait_until_succeeds(f"pgrep -f \"{i}\"")
machine.wait_until_succeeds("journalctl -b --grep 'Loaded applet menu@cinnamon.org'")
machine.wait_until_succeeds("journalctl -b --grep 'calendar@cinnamon.org: Calendar events supported'")
@@ -84,6 +85,10 @@
machine.wait_until_succeeds("${eval "global.display.focus_window.wm_class"} | grep -i 'gnome-terminal'")
machine.sleep(2)
+ # Only can be tested after opening the above apps.
+ with subtest("Check if x-d-p actually starts"):
+ machine.wait_until_succeeds("pgrep -xf \"${pkgs.xdg-desktop-portal}/libexec/xdg-desktop-portal\"")
+
with subtest("Check if Cinnamon has ever coredumped"):
machine.fail("coredumpctl --json=short | grep -E 'cinnamon|nemo'")
'';
diff --git a/nixos/tests/cinnamon.nix b/nixos/tests/cinnamon.nix
index d8b52c261a42..da8bf8847a4b 100644
--- a/nixos/tests/cinnamon.nix
+++ b/nixos/tests/cinnamon.nix
@@ -62,8 +62,9 @@
machine.wait_until_succeeds("${eval "Main.runState"} | grep -q 'true,..2'")
with subtest("Check if Cinnamon components actually start"):
- for i in ["csd-media-keys", "cinnamon-killer-daemon", "xapp-sn-watcher", "nemo-desktop"]:
- machine.wait_until_succeeds(f"pgrep -f {i}")
+ # https://unix.stackexchange.com/a/74186
+ for i in ["[c]sd-media-keys", "[c]innamon-killer-daemon", "[x]app-sn-watcher", "[n]emo-desktop"]:
+ machine.wait_until_succeeds(f"pgrep -f \"{i}\"")
machine.wait_until_succeeds("journalctl -b --grep 'Loaded applet menu@cinnamon.org'")
machine.wait_until_succeeds("journalctl -b --grep 'calendar@cinnamon.org: Calendar events supported'")
@@ -104,6 +105,10 @@
machine.sleep(2)
machine.screenshot("cinnamon_virtual_keyboard")
+ # Only can be tested after opening the above apps.
+ with subtest("Check if x-d-p actually starts"):
+ machine.wait_until_succeeds("pgrep -xf \"${pkgs.xdg-desktop-portal}/libexec/xdg-desktop-portal\"")
+
with subtest("Check if Cinnamon has ever coredumped"):
machine.fail("coredumpctl --json=short | grep -E 'cinnamon|nemo'")
'';
diff --git a/nixos/tests/cloudcompare.nix b/nixos/tests/cloudcompare.nix
new file mode 100644
index 000000000000..0e9b72da3a41
--- /dev/null
+++ b/nixos/tests/cloudcompare.nix
@@ -0,0 +1,55 @@
+{ pkgs, runTest }:
+let
+ testFile = pkgs.fetchurl {
+ url = "https://raw.githubusercontent.com/asmaloney/libE57Format-test-data/bbcacec05d60f923869545c5eab33d94c390d50e/self/ColouredCubeFloat.e57";
+ hash = "sha256-bb95crNYvX3Qhkx4k6Sqe2GjOf1u4nxxswMfdjyXfTM=";
+ };
+
+ vmTest = runTest {
+ name = "cloudcompare-vm";
+ meta.maintainers = with pkgs.lib.maintainers; [
+ nh2
+ ];
+
+ enableOCR = true;
+
+ nodes.machine =
+ { ... }:
+ {
+ imports = [
+ ./common/x11.nix
+ ];
+
+ services.xserver.enable = true;
+ environment.systemPackages = [
+ pkgs.cloudcompare
+ ];
+ };
+
+ testScript = ''
+ start_all()
+ machine.wait_for_x()
+
+ machine.execute("CloudCompare ${testFile} >&2 &")
+ machine.wait_for_window("CloudCompare")
+
+ # Wait for the file to be loaded; CloudCompare shows "loaded successfully" in its log panel at the bottom.
+ machine.wait_for_text("loaded successfully")
+
+ machine.screenshot("screen.png")
+ '';
+ };
+in
+{
+ vm = vmTest;
+
+ screenshot-analysis = pkgs.callPackage ./vlm-screenshot-question.nix {
+ name = "cloudcompare-screenshot-analysis";
+ screenshot = "${vmTest}/screen.png";
+ question = ''
+ Look at this screenshot of a desktop application.
+ Answer: Does the application show a 3D point cloud viewer (CloudCompare) that has successfully loaded and is displaying a coloured point cloud?
+ Evidence of success: a 3D viewport with coloured points is visible AND there are no error dialogs or error messages.
+ '';
+ };
+}
diff --git a/nixos/tests/cockpit.nix b/nixos/tests/cockpit.nix
index 6144450d3469..1bce4e584c06 100644
--- a/nixos/tests/cockpit.nix
+++ b/nixos/tests/cockpit.nix
@@ -102,7 +102,6 @@ in
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
- from time import sleep
def log(msg):
@@ -129,7 +128,7 @@ in
wait.until(EC.presence_of_element_located((by, query)))
- def wait_title_contains(title, timeout=10):
+ def wait_title_contains(title, timeout=30):
wait = WebDriverWait(driver, timeout)
wait.until(EC.title_contains(title))
@@ -138,11 +137,6 @@ in
return driver.find_element(by, query)
- def set_value(elem, value):
- script = 'arguments[0].value = arguments[1]'
- return driver.execute_script(script, elem, value)
-
-
log("Waiting for the homepage to load")
# cockpit sets initial title as hostname
@@ -151,36 +145,45 @@ in
log("Homepage loaded!")
+ # Prefer send_keys over setting .value via JS: Cockpit's login
+ # form (and PatternFly widgets) do not always react to the latter.
log("Filling out username")
login_input = find_element(By.CSS_SELECTOR, 'input#login-user-input')
- set_value(login_input, "${user}")
+ login_input.clear()
+ login_input.send_keys("${user}")
log("Filling out password")
- password_input = find_element(By.CSS_SELECTOR, 'input#login-password-input')
- set_value(password_input, "${password}")
+ password_input = find_element(
+ By.CSS_SELECTOR, 'input#login-password-input'
+ )
+ password_input.clear()
+ password_input.send_keys("${password}")
log("Submitting credentials for login")
driver.find_element(By.CSS_SELECTOR, 'button#login-button').click()
- # driver.implicitly_wait(1)
- # driver.get("https://server:7890/system")
-
log("Waiting dashboard to load")
wait_title_contains("${user}@server")
- log("Waiting for the frontend to initialize")
- sleep(1)
-
log("Looking for that banner that tells about limited access")
- container_iframe = find_element(By.CSS_SELECTOR, 'iframe.container-frame')
+ wait_elem(By.CSS_SELECTOR, 'iframe.container-frame', timeout=30)
+ container_iframe = find_element(
+ By.CSS_SELECTOR, 'iframe.container-frame'
+ )
driver.switch_to.frame(container_iframe)
-
- assert "Web console is running in limited access mode" in driver.page_source
+ # Wait for the overview iframe to render the limited-access alert.
+ # Fixed sleeps were flaky after Cockpit 364 (slower SPA init).
+ phrase = "Web console is running in limited access mode"
+ WebDriverWait(driver, 30).until(
+ lambda d: phrase in d.page_source
+ )
log("Clicking the sudo button")
+ # Button label is "Turn on administrative access"
for button in driver.find_elements(By.TAG_NAME, "button"):
- if 'admin' in button.text:
+ if 'admin' in button.text.casefold():
button.click()
+ break
driver.switch_to.default_content()
log("Checking that /nonexistent is not a thing")
@@ -189,13 +192,17 @@ in
log("Checking plugin path")
driver.get("https://server:7890/hello-test")
- sleep(2)
+ wait_elem(By.CSS_SELECTOR, 'iframe.container-frame', timeout=30)
for iframe in driver.find_elements(By.TAG_NAME, "iframe"):
if "hello-test" in (iframe.get_attribute("src") or ""):
driver.switch_to.frame(iframe)
break
- text = driver.find_element(By.ID, "output").text
- sleep(1)
+ output = find_element(By.ID, "output")
+ WebDriverWait(driver, 30).until(
+ lambda d: "SUCCESS: Hello, world!" in output.text
+ or output.text.startswith("FAILED:")
+ )
+ text = output.text
assert "SUCCESS: Hello, world!" in text, f"Plugin failed: {text}"
driver.close()
@@ -215,8 +222,10 @@ in
server.wait_for_unit("sockets.target")
server.wait_for_open_port(7890)
+ # Port open is not enough: cockpit-ws may still be finishing startup.
+ server.wait_until_succeeds("curl -k https://127.0.0.1:7890 -o /dev/null")
- client.succeed("curl -k https://server:7890 -o /dev/stderr")
+ client.wait_until_succeeds("curl -k https://server:7890 -o /dev/stderr")
print(client.succeed("whoami"))
client.succeed('PYTHONUNBUFFERED=1 selenium-script')
'';
diff --git a/nixos/tests/common/ec2.nix b/nixos/tests/common/ec2.nix
index 864afc63cb8b..f28e094d455b 100644
--- a/nixos/tests/common/ec2.nix
+++ b/nixos/tests/common/ec2.nix
@@ -51,9 +51,11 @@ in
)
os.makedirs(image_dir, mode=0o700, exist_ok=True)
disk_image = os.path.join(image_dir, "machine.qcow2")
+ QEMU_BIN = "${pkgs.qemu}"
+ QEMU_IMG = f"{QEMU_BIN}/bin/qemu-img"
subprocess.check_call(
[
- "qemu-img",
+ QEMU_IMG,
"create",
"-f",
"qcow2",
@@ -64,7 +66,7 @@ in
disk_image,
]
)
- subprocess.check_call(["qemu-img", "resize", disk_image, "10G"])
+ subprocess.check_call([QEMU_IMG, "resize", disk_image, "10G"])
# Note: we use net=169.0.0.0/8 rather than
# net=169.254.0.0/16 to prevent dhcpcd from getting horribly
@@ -74,7 +76,7 @@ in
# turn off the DHCP server, but qemu does not have an option
# to do that.
start_command = (
- "qemu-kvm -m 1024"
+ f"{QEMU_BIN}/bin/qemu-kvm -m 1024"
+ " -device virtio-net-pci,netdev=vlan0"
+ " -netdev 'user,id=vlan0,net=169.0.0.0/8,guestfwd=tcp:169.254.169.254:80-cmd:${getExe imdsServer} ${metaData}'"
+ f" -drive file={disk_image},if=virtio,werror=report"
diff --git a/nixos/tests/common/openxr.nix b/nixos/tests/common/openxr.nix
new file mode 100644
index 000000000000..53b48d10e5fb
--- /dev/null
+++ b/nixos/tests/common/openxr.nix
@@ -0,0 +1,39 @@
+{
+ lib,
+ pkgs,
+ config,
+ ...
+}:
+
+{
+ imports = [
+ ./user-account.nix
+ ./x11.nix
+ ];
+ test-support.displayManager.auto.user = "alice";
+ systemd.user.targets.xdg-desktop-autostart = {
+ wantedBy = [ "graphical-session.target" ];
+ after = [ "graphical-session.target" ];
+ };
+
+ hardware.graphics.enable = true;
+
+ services.monado = {
+ enable = true;
+ defaultRuntime = true;
+ forceDefaultRuntime = true;
+ };
+ systemd.user.services.monado = {
+ requires = [ "graphical-session.target" ];
+ environment = {
+ # Stop Monado from probing for any hardware
+ SIMULATED_ENABLE = "1";
+ SIMULATED_LEFT = "simple";
+ SIMULATED_RIGHT = "simple";
+ # Run as X11 client rather than using direct mode
+ XRT_COMPOSITOR_FORCE_XCB = "1";
+ # And run fullscreen so that we can hide the DE
+ XRT_COMPOSITOR_XCB_FULLSCREEN = "1";
+ };
+ };
+}
diff --git a/nixos/tests/containers-ip.nix b/nixos/tests/containers-ip.nix
index 8dceda8db4c6..7465813775e0 100644
--- a/nixos/tests/containers-ip.nix
+++ b/nixos/tests/containers-ip.nix
@@ -47,9 +47,9 @@ in
# need to distinguish because show-ip won't work for ipv6
if container == "webserver4":
ip = machine.succeed(f"nixos-container show-ip {container}").rstrip()
- assert ip == "${nodes.machine.config.containers.webserver4.localAddress}"
+ assert ip == "${nodes.machine.containers.webserver4.localAddress}"
return ip
- return "${nodes.machine.config.containers.webserver6.localAddress}"
+ return "${nodes.machine.containers.webserver6.localAddress}"
for container in "webserver4", "webserver6":
diff --git a/nixos/tests/coredns.nix b/nixos/tests/coredns.nix
index 6ee6572d57c8..cb485ae34b5c 100644
--- a/nixos/tests/coredns.nix
+++ b/nixos/tests/coredns.nix
@@ -28,7 +28,7 @@
position = "start-of-file";
}
];
- vendorHash = "sha256-66WNU+t/frHfbxexYdiXzgXKLxPyLnN6JuKnlG/kSQY=";
+ vendorHash = "sha256-cvgq/Djlxjiu0C5QjaxrlEeG7O2mB6mGAwV7/reYlpY=";
};
};
};
diff --git a/nixos/tests/cosmic.nix b/nixos/tests/cosmic.nix
deleted file mode 100644
index f7fde6ca0e0f..000000000000
--- a/nixos/tests/cosmic.nix
+++ /dev/null
@@ -1,147 +0,0 @@
-{
- config,
- lib,
- testName,
- enableAutologin,
- enableXWayland,
- ...
-}:
-
-{
- name = testName;
-
- meta.maintainers = lib.teams.cosmic.members;
-
- nodes.machine = {
- imports = [ ./common/user-account.nix ];
-
- services = {
- # For `cosmic-store` to be added to `environment.systemPackages`
- # and for it to work correctly because Flatpak is a runtime
- # dependency of `cosmic-store`.
- flatpak.enable = true;
-
- displayManager.cosmic-greeter.enable = true;
- desktopManager.cosmic = {
- enable = true;
- xwayland.enable = enableXWayland;
- };
- };
-
- services.displayManager.autoLogin = lib.mkIf enableAutologin {
- enable = true;
- user = "alice";
- };
-
- environment.systemPackages = with config.node.pkgs; [
- # These two packages are used to check if a window was opened
- # under the COSMIC session or not. Kinda important.
- # TODO: Move the check from the test module to
- # `nixos/lib/test-driver/src/test_driver/machine.py` so more
- # Wayland-only testing can be done using the existing testing
- # infrastructure.
- jq
- lswt
- ];
-
- # So far, all COSMIC tests launch a few GUI applications. In doing
- # so, the default allocated memory to the guest of 1024M quickly
- # poses a very high risk of an OOM-shutdown which is worse than an
- # OOM-kill. Because now, the test failed, but not for a genuine
- # reason, but an OOM-shutdown. That's an inconclusive failure
- # which might possibly mask an actual failure. Not enabling
- # systemd-oomd because we need said applications running for a
- # few seconds. So instead, bump the allocated memory to the guest
- # from 1024M to 4x; 4096M.
- virtualisation.memorySize = 4096;
- };
-
- testScript =
- { nodes, ... }:
- let
- cfg = nodes.machine;
- user = cfg.users.users.alice;
- DISPLAY = lib.strings.optionalString enableXWayland (
- if enableAutologin then "DISPLAY=:0" else "DISPLAY=:1"
- );
- emptyPDF = config.node.pkgs.stdenvNoCC.mkDerivation {
- name = "empty-pdf";
- dontUnpack = true;
- nativeBuildInputs = [ config.node.pkgs.imagemagick ];
- buildPhase = ''
- magick xc:none -page Letter empty.pdf
- '';
- installPhase = ''
- mkdir $out
- mv empty.pdf $out/empty.pdf
- '';
- };
- in
- ''
- #testName: ${testName}
- ''
- + (
- if enableAutologin then
- ''
- with subtest("cosmic-greeter initialisation"):
- machine.wait_for_unit("graphical.target", timeout=120)
- ''
- else
- ''
- from time import sleep
-
- machine.wait_for_unit("graphical.target", timeout=120)
- machine.wait_until_succeeds("pgrep --uid ${toString cfg.users.users.cosmic-greeter.name} --full cosmic-greeter", timeout=30)
- # Sleep for 10 seconds for ensuring that `greetd` loads the
- # password prompt for the login screen properly.
- sleep(10)
-
- with subtest("cosmic-session login"):
- machine.send_chars("${user.password}\n", delay=0.2)
- ''
- )
- + ''
- # _One_ of the final processes to start as part of the
- # `cosmic-session` target is the Workspaces applet. So, wait
- # for it to start. The process existing means that COSMIC
- # now handles any opened windows from now on.
- machine.wait_until_succeeds("pgrep --uid ${toString user.uid} --full 'cosmic-panel-button com.system76.CosmicWorkspaces'", timeout=30)
-
- # The best way to test for Wayland and XWayland is to launch
- # the GUI applications and see the results yourself.
- with subtest("Launch applications"):
- # key: binary_name
- # value: "app-id" as reported by `lswt`
- gui_apps_to_launch = {}
-
- # We want to ensure that the first-party applications
- # start/launch properly.
- gui_apps_to_launch['cosmic-edit'] = 'com.system76.CosmicEdit'
- gui_apps_to_launch['cosmic-files'] = 'com.system76.CosmicFiles'
- gui_apps_to_launch['cosmic-player'] = 'com.system76.CosmicPlayer'
- gui_apps_to_launch['cosmic-reader'] = 'com.system76.CosmicReader'
- gui_apps_to_launch['cosmic-settings'] = 'com.system76.CosmicSettings'
- gui_apps_to_launch['cosmic-store'] = 'com.system76.CosmicStore'
- gui_apps_to_launch['cosmic-term'] = 'com.system76.CosmicTerm'
-
- for gui_app, app_id in gui_apps_to_launch.items():
- # Don't fail the test if binary is absent
- if machine.execute(f"su - ${user.name} -c 'command -v {gui_app}'", timeout=5)[0] == 0:
- match gui_app:
- case 'cosmic-reader':
- opt_arg = '${emptyPDF}/empty.pdf'
- case _:
- opt_arg = ""
-
- machine.succeed(f"su - ${user.name} -c 'WAYLAND_DISPLAY=wayland-1 XDG_RUNTIME_DIR=/run/user/${toString user.uid} ${DISPLAY} {gui_app} {opt_arg} >&2 &'", timeout=5)
- # Nix builds the following non-commented expression to the following:
- # `su - alice -c 'WAYLAND_DISPLAY=wayland-1 XDG_RUNTIME_DIR=/run/user/1000 lswt --json | jq ".toplevels" | grep "^ \\"app-id\\": \\"{app_id}\\"$"' `
- machine.wait_until_succeeds(f''''su - ${user.name} -c 'WAYLAND_DISPLAY=wayland-1 XDG_RUNTIME_DIR=/run/user/${toString user.uid} lswt --json | jq ".toplevels" | grep "^ \\"app-id\\": \\"{app_id}\\"$"' '''', timeout=60)
- machine.succeed(f"pkill {gui_app}", timeout=5)
-
- machine.succeed("echo 'test completed succeessfully' > /${testName}", timeout=5)
- machine.copy_from_machine('/${testName}')
-
- machine.shutdown()
- '';
-}
diff --git a/nixos/tests/cosmic/default.nix b/nixos/tests/cosmic/default.nix
new file mode 100644
index 000000000000..3b6dce9f55a4
--- /dev/null
+++ b/nixos/tests/cosmic/default.nix
@@ -0,0 +1,168 @@
+{
+ config,
+ lib,
+ testName,
+ enableAutologin,
+ enableXWayland,
+ ...
+}:
+
+let
+ user = config.nodes.machine.users.users.alice;
+ logFilePath = "/home/${user.name}/${testName}";
+ # Use `writeShellScriptBin` instead of `writeShellScript` so that the
+ # process name in the journald log appears as 'cosmicTest[$pid]'
+ cosmicTest = config.node.pkgs.writeShellScriptBin "cosmicTest" ''
+ exec ${lib.getExe config.node.pkgs.python3Minimal} ${./test-script.py} \
+ --log-file-path ${logFilePath} \
+ --cosmic-reader-pdf ${config.node.pkgs.empty-pdf} \
+ --polkit-agent-helper-path ${config.node.pkgs.polkit.out}/lib/polkit-1/polkit-agent-helper-1 \
+ --root-user-password ${user.password}
+ '';
+ cosmicTestDesktop = config.node.pkgs.makeDesktopItem {
+ name = "cosmicTest";
+ desktopName = "COSMIC NixOS VM test (${testName})";
+ exec = "cosmicTest";
+ };
+ cosmicTestAutostartItem = config.node.pkgs.makeAutostartItem {
+ name = "cosmicTest";
+ package = cosmicTestDesktop;
+ };
+in
+
+{
+ name = testName;
+
+ meta.maintainers = lib.teams.cosmic.members;
+
+ nodes.machine = {
+ imports = [ ../common/user-account.nix ];
+
+ services = {
+ # For `cosmic-store` to be added to `environment.systemPackages`
+ # and for it to work correctly because Flatpak is a runtime
+ # dependency of `cosmic-store`.
+ flatpak.enable = true;
+
+ displayManager.cosmic-greeter.enable = true;
+ desktopManager.cosmic = {
+ enable = true;
+ xwayland.enable = enableXWayland;
+ };
+ };
+
+ services.displayManager.autoLogin = lib.mkIf enableAutologin {
+ enable = true;
+ user = user.name;
+ };
+
+ users.users = {
+ alice.extraGroups = [
+ "uinput" # for ydotoold
+ ];
+
+ root.password = user.password;
+ root.hashedPasswordFile = lib.mkForce null;
+ };
+
+ hardware.uinput.enable = true;
+
+ environment.systemPackages = with config.node.pkgs; [
+ ydotool
+ cosmicTest
+ cosmicTestAutostartItem
+
+ # These two packages are used to check if a window was opened
+ # under the COSMIC session or not. Kinda important.
+ # TODO: Move the check from the test module to
+ # `nixos/lib/test-driver/src/test_driver/machine.py` so more
+ # Wayland-only testing can be done using the existing testing
+ # infrastructure.
+ jq
+ lswt
+ ];
+
+ # So far, all COSMIC tests launch a few GUI applications. In doing
+ # so, the default allocated memory to the guest of 1024M quickly
+ # poses a very high risk of an OOM-shutdown which is worse than an
+ # OOM-kill. Because now, the test failed, but not for a genuine
+ # reason, but an OOM-shutdown. That's an inconclusive failure
+ # which might possibly mask an actual failure. Not enabling
+ # systemd-oomd because we need said applications running for a
+ # few seconds. So instead, bump the allocated memory to the guest
+ # from 1024M to 4x; 4096M.
+ virtualisation.memorySize = 4096;
+ };
+
+ testScript =
+ { nodes, ... }:
+ ''
+ #testName: ${testName}
+ import sys
+ ''
+ + (
+ if enableAutologin then
+ ''
+ with subtest("cosmic-greeter initialisation"):
+ machine.wait_for_unit("graphical.target", timeout=120)
+ ''
+ else
+ ''
+ from time import sleep
+
+ machine.wait_for_unit("graphical.target", timeout=120)
+ machine.wait_until_succeeds("pgrep --uid ${config.nodes.machine.users.users.cosmic-greeter.name} --full cosmic-greeter", timeout=30)
+ # Sleep for 10 seconds for ensuring that `greetd` loads the
+ # password prompt for the login screen properly.
+ sleep(10)
+
+ with subtest("cosmic-session login"):
+ machine.send_chars("${user.password}\n", delay=0.2)
+ ''
+ )
+ + ''
+ with subtest("xdg autostart support in cosmic"):
+ # When checking the status of our `cosmicTest` package with:
+ # `machine.wait_for_unit("app-cosmicTest@autostart.service", user="${user.name}")`
+ # We are immediately greeted with the error:
+ # ```
+ # subtest: xdg autostart support in cosmic
+ # machine: waiting for unit app-cosmicTest@autostart.service with user alice
+ # machine # [ 26.497516] cosmic-comp[1352]: [EGL] 0x3008 (BAD_DISPLAY) eglCreateSync: _eglCreateSync
+ # machine # [ 26.511706] su[1416]: Successful su for alice by root
+ # machine # [ 26.528190] su[1416]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
+ # machine # Failed to connect to user scope bus via local transport: No such file or directory
+ # machine # [ 26.599563] su[1416]: pam_unix(su:session): session closed for user alice
+ # !!! Test "xdg autostart support in cosmic" failed with error: "retrieving systemctl property "ActiveState" for unit "app-cosmicTest@autostart.service" under user "alice" failed with exit code 1"
+ # ```
+ # Meaning, our session is extremely new and the D-Bus user
+ # session socket does not yet exist. Instead, lets poll for
+ # the log file that the test is guaranteed to write to, as
+ # soon as it starts.
+ machine.wait_for_file("${logFilePath}.log", timeout=120)
+
+ exit_code = 0
+ try:
+ machine.wait_for_file("${logFilePath}.done", timeout=700)
+ except Exception:
+ exit_code = 1
+
+ # The log file is created in the very beginning of the test
+ # script's execution. If we are here, it means that the
+ # `wait_for_unit`'s "guard" on the test script's autostart unit
+ # plus the 630 second combined timeout of other two
+ # `wait_for_file`s, make it extremely likely for the log file to
+ # be present.
+ machine.copy_from_machine("${logFilePath}.log")
+
+ machine.shutdown()
+
+ with open(f"{machine.out_dir}/${testName}.log") as test_log_file:
+ contents = test_log_file.read()
+ print(contents)
+ if any("Z [ERROR] [L:" in line for line in contents.splitlines()):
+ exit_code = 1
+
+ sys.exit(exit_code)
+ '';
+}
diff --git a/nixos/tests/cosmic/test-script.py b/nixos/tests/cosmic/test-script.py
new file mode 100644
index 000000000000..07377fa95fac
--- /dev/null
+++ b/nixos/tests/cosmic/test-script.py
@@ -0,0 +1,315 @@
+#!/usr/bin/env python3
+import argparse
+import logging
+import os
+import pathlib
+import subprocess
+import time
+
+
+def parse_cli_args() -> argparse.Namespace:
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ "--log-file-path",
+ required=True,
+ type=str,
+ help="The path to the log file (without the '.log' suffix/extension)",
+ )
+ parser.add_argument(
+ "--cosmic-reader-pdf",
+ required=True,
+ type=str,
+ help="The PDF that the `cosmic-reader` should open for testing",
+ )
+ parser.add_argument(
+ "--polkit-agent-helper-path",
+ required=True,
+ type=str,
+ help="The path to the polkit agent helper (`${pkgs.polkit.out}/lib/polkit-1/polkit-agent-helper-1`)",
+ )
+ parser.add_argument(
+ "--root-user-password", required=True, type=str, help="The root user's password"
+ )
+ args = parser.parse_args()
+ return args
+
+
+def start_ydotool_daemon() -> tuple[str, subprocess.Popen]:
+ """
+ The ydotool requires a daemon to be running.
+ """
+ xdg_runtime_dir = os.getenv("XDG_RUNTIME_DIR") or f"/run/user/{os.getuid()}"
+ ydotool_daemon_socket_path = f"{xdg_runtime_dir}/.ydotool_socket"
+ ydotool_daemon_process = subprocess.Popen(
+ [
+ "ydotoold",
+ "--socket-path",
+ ydotool_daemon_socket_path,
+ "--mouse-off",
+ ],
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL,
+ )
+ return ydotool_daemon_socket_path, ydotool_daemon_process
+
+
+def wait_for_cosmic_de_readiness() -> None:
+ """
+ Wait for the COSMIC DE to be ready, before running the tests. This
+ is done by waiting on the supposedly last component of the COSMIC
+ DE to be "ready." That component is the notification watcher, of
+ the `cosmic-applet` derivation.
+ """
+ logging.info("=" * 80)
+ logging.info("Waiting for COSMIC DE to complete initialization")
+
+ notification_watcher_wait_deadline = time.monotonic() + 360
+ notification_watcher_exists = False
+ while time.monotonic() < notification_watcher_wait_deadline:
+ busctl_process = subprocess.run(
+ ["busctl", "--user", "status", "com.system76.CosmicStatusNotifierWatcher"],
+ check=False,
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL,
+ )
+ if busctl_process.returncode == 0:
+ notification_watcher_exists = True
+ break
+ else:
+ time.sleep(1)
+ logging_msg = "The COSMIC DE is "
+ if notification_watcher_exists:
+ logging.info(f"{logging_msg} ready")
+ else:
+ logging.error(f"{logging_msg} not ready")
+ return
+
+
+def perform_polkit_authentication_test(
+ cli_args: argparse.Namespace,
+ ydotool_daemon_socket_path: str,
+ ydotool_daemon_process: subprocess.Popen,
+) -> None:
+ """
+ 1. Run `pkexec` as a background process that produces a specific
+ output to stdout upon successful completion.
+ 2. Wait unil it has been confimred that `cosmic-osd` has created
+ a pop-up requesting the root user's password.
+ 3. Use ydotool to type the root user's password in the pop-up
+ prompt.
+ 4. Ensure that the the `pkexec` background process' stdout matches
+ the output that we expect.
+
+ Any breakage in this flow is considered a failure of the polkit
+ authenticaion test.
+ """
+ logging.info("=" * 80)
+ logging.info("Performing polkit authentication test")
+
+ polkit_test_passed = False
+ polkit_test_command = [
+ "pkexec",
+ "--disable-internal-agent",
+ "bash",
+ "-c",
+ "echo -n 'polkit test was successful'",
+ ]
+ logging.info(f"Running: {polkit_test_command}")
+ polkit_test_process = subprocess.Popen(
+ polkit_test_command,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ text=True,
+ )
+
+ polkit_popup_deadline = time.monotonic() + 60
+ pop_up_msg = "the pop-up for polkit password authentication"
+ encountered_polkit_authentication_popup = False
+ while time.monotonic() < polkit_popup_deadline:
+ polkit_popup_check_process = subprocess.run(
+ [
+ "pgrep",
+ "-afx",
+ f"{cli_args.polkit_agent_helper_path} --socket-activated",
+ ],
+ check=False,
+ )
+ if polkit_popup_check_process.returncode == 0:
+ encountered_polkit_authentication_popup = True
+ logging.info(f"Noticed {pop_up_msg}")
+ if ydotool_daemon_process.poll() is None:
+ # The polkit-agent-helper process exists, but that
+ # doesn't necessarily mean that the pop-up is
+ # **rendered** and ready to accept the password. So we
+ # sleep for a few seconds.
+ time.sleep(20)
+ ydotool_process = subprocess.run(
+ [
+ "ydotool",
+ "type",
+ "--key-delay=500",
+ f"{cli_args.root_user_password}\n",
+ ],
+ env={
+ **os.environ.copy(),
+ "YDOTOOL_SOCKET": ydotool_daemon_socket_path,
+ },
+ check=False,
+ )
+ ydotool_msg = (
+ "the root user's password in the pop-up for polkit authentication"
+ )
+ if ydotool_process.returncode == 0:
+ logging.info(f"ydotool typed {ydotool_msg}")
+ else:
+ logging.error(f"ydotool did not type {ydotool_msg}")
+ else:
+ logging.error(
+ "The ydotool daemon exited for some reason before it could be used"
+ )
+ break
+ time.sleep(1)
+ if not encountered_polkit_authentication_popup:
+ logging.error(f"Did not notice {pop_up_msg}")
+
+ polkit_test_process_stdout = ""
+ polkit_test_process_stderr = ""
+ try:
+ polkit_test_process_stdout, polkit_test_process_stderr = (
+ polkit_test_process.communicate(timeout=45)
+ )
+ except subprocess.TimeoutExpired:
+ polkit_test_process.kill()
+ polkit_test_process_stdout, polkit_test_process_stderr = (
+ polkit_test_process.communicate()
+ )
+
+ logging.info(f"polkit stdout: '{polkit_test_process_stdout}'")
+ logging.info(f"polkit stderr: '{polkit_test_process_stderr}'")
+
+ if polkit_test_process_stdout:
+ logging.info(f"pkexec command stdout: {polkit_test_process_stdout}")
+ polkit_test_passed = "polkit test was successful" in polkit_test_process_stdout
+ else:
+ logging.warning("Could not capture stdout from the polkit test command")
+
+ if polkit_test_passed:
+ logging.info("The polkit authentication test passed")
+ else:
+ logging.error("The polkit authentication test failed")
+ return
+
+
+def perform_gui_application_test(cli_args: argparse.Namespace) -> None:
+ """
+ 1. Start one GUI application as a background process.
+ 2. Wait unil it has been confimred that the GUI application is
+ running.
+ 3. Kill the background process of the GUI application.
+
+ Any breakage in this flow is considered a failure of the test for
+ the GUI application.
+ """
+ logging.info("=" * 80)
+ logging.info("Performing test to launch GUI applications")
+
+ gui_apps_to_test = {
+ "com.system76.CosmicEdit": [
+ "cosmic-edit",
+ ],
+ "com.system76.CosmicFiles": [
+ "cosmic-files",
+ ],
+ "com.system76.CosmicPlayer": [
+ "cosmic-player",
+ ],
+ "com.system76.CosmicReader": [
+ "cosmic-reader",
+ cli_args.cosmic_reader_pdf,
+ ],
+ "com.system76.CosmicSettings": [
+ "cosmic-settings",
+ ],
+ "com.system76.CosmicStore": [
+ "cosmic-store",
+ ],
+ "com.system76.CosmicTerm": [
+ "cosmic-term",
+ ],
+ }
+
+ for gui_app_id, gui_app_command in gui_apps_to_test.items():
+ logging.info(f"Running: {gui_app_command}")
+ gui_app_bg_process = subprocess.Popen(
+ gui_app_command,
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL,
+ )
+ gui_app_bg_process_deadline = time.monotonic() + 30
+ gui_app_is_running = False
+
+ while time.monotonic() < gui_app_bg_process_deadline and not gui_app_is_running:
+ lswt_process = subprocess.run(
+ [
+ "lswt",
+ "--custom",
+ "a",
+ ],
+ check=False,
+ text=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.DEVNULL,
+ )
+ lswt_process_stdout = lswt_process.stdout.strip()
+ if lswt_process_stdout:
+ if gui_app_id in lswt_process_stdout.splitlines():
+ gui_app_is_running = True
+ time.sleep(1)
+ pkill_process = subprocess.run(
+ ["pkill", gui_app_command[0]],
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL,
+ check=False,
+ )
+
+ log_message = (
+ f"The GUI application test for '{gui_app_command[0]}' ({gui_app_id})"
+ )
+ if gui_app_is_running:
+ logging.info(f"{log_message} passed")
+ else:
+ logging.error(f"{log_message} failed")
+ return
+
+
+def main() -> None:
+ cli_args = parse_cli_args()
+ logging.basicConfig(
+ level=logging.INFO,
+ format=f"%(asctime)sZ [%(levelname)s] [L:%(lineno)d] %(message)s",
+ datefmt="%H:%M:%S",
+ handlers=[
+ logging.StreamHandler(),
+ logging.FileHandler(f"{cli_args.log_file_path}.log", mode="w"),
+ ],
+ )
+ logging.Formatter.converter = time.gmtime
+ logging.info(f"Logging to '{cli_args.log_file_path}.log'")
+
+ ydotool_daemon_socket_path, ydotool_daemon_process = start_ydotool_daemon()
+
+ # Wait for the DE to be ready
+ wait_for_cosmic_de_readiness()
+
+ # tests go here
+ perform_polkit_authentication_test(
+ cli_args, ydotool_daemon_socket_path, ydotool_daemon_process
+ )
+ perform_gui_application_test(cli_args)
+
+ pathlib.Path(f"{cli_args.log_file_path}.done").touch()
+ return
+
+
+if __name__ == "__main__":
+ main()
diff --git a/nixos/tests/credentials.nix b/nixos/tests/credentials.nix
new file mode 100644
index 000000000000..7984ffd03593
--- /dev/null
+++ b/nixos/tests/credentials.nix
@@ -0,0 +1,106 @@
+{
+ lib,
+ pkgs,
+ mechanism,
+ ...
+}:
+
+let
+ secret = ''
+ foo
+ bar
+ baz
+ '';
+ secret-file = "bar";
+
+ common-credentials = {
+ secret-default-mechanism = {
+ text = "default-mechanism";
+ };
+ secret-file-nix-store = {
+ source = pkgs.writeText "secret-file-nix-store" secret-file;
+ };
+ secret-file-host = {
+ source = "./secret-file-host";
+ };
+ secret-file-host-binary = {
+ source = "./secret-file-host-binary";
+ };
+ };
+in
+
+{
+ name = "credentials-${mechanism}";
+
+ meta.maintainers = with lib.maintainers; [ arianvp ];
+
+ # No VM<->container traffic in this test; credentials are static.
+ requiredFeatures.devnet = lib.mkForce false;
+
+ nodes.vm = {
+ virtualisation.credentials = common-credentials // {
+ secret = {
+ inherit mechanism;
+ text = secret;
+ };
+ };
+ };
+
+ containers.container = {
+ virtualisation.credentials = common-credentials // {
+ secret = {
+ text = secret;
+ };
+ };
+ };
+
+ testScript = ''
+ import base64
+
+ secret_file_host = "baz"
+ # Binary data with null bytes, high bytes, and other problematic characters.
+ secret_file_host_binary = bytes([
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0xDE, 0xAD, 0xBE, 0xEF,
+ 0xFF, 0xFE, 0xFD, 0xFC,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x81, 0x82, 0x83,
+ ])
+
+ def assert_credentials(m):
+ with open(m.state_dir / "secret-file-host", "w") as f:
+ f.write(secret_file_host)
+ with open(m.state_dir / "secret-file-host-binary", "wb") as f2:
+ f2.write(secret_file_host_binary)
+
+ t.assertEqual(
+ m.succeed("systemd-creds --system cat secret").strip(),
+ "foo\nbar\nbaz",
+ )
+ t.assertEqual(
+ m.succeed("systemd-creds --system cat secret-default-mechanism").strip(),
+ "default-mechanism",
+ )
+ t.assertEqual(
+ m.succeed("systemd-creds --system cat secret-file-nix-store").strip(),
+ "${secret-file}",
+ )
+ t.assertEqual(
+ m.succeed("systemd-creds --system cat secret-file-host").strip(),
+ secret_file_host,
+ )
+ result = m.succeed(
+ "systemd-creds --system cat secret-file-host-binary --transcode=base64"
+ ).strip()
+ expected = base64.b64encode(secret_file_host_binary).decode("ascii")
+ t.assertEqual(
+ result,
+ expected,
+ f"Binary credential mismatch: got {result}, expected {expected}",
+ )
+
+ assert_credentials(vm)
+ assert_credentials(container)
+ '';
+}
diff --git a/nixos/tests/croc.nix b/nixos/tests/croc.nix
index f5eec96d6cc3..bb5d5d6635e4 100644
--- a/nixos/tests/croc.nix
+++ b/nixos/tests/croc.nix
@@ -12,8 +12,8 @@ in
meta = with pkgs.lib.maintainers; {
maintainers = [
equirosa
- SuperSandro2000
ryan4yin
+ kaynetik
];
};
diff --git a/nixos/tests/dep-scan.nix b/nixos/tests/dep-scan.nix
index 8d7bdde8578e..05298c004285 100644
--- a/nixos/tests/dep-scan.nix
+++ b/nixos/tests/dep-scan.nix
@@ -14,7 +14,7 @@
]
++ teams.ngi.members;
- nodes.machine = {
+ containers.machine = {
environment.systemPackages = with pkgs; [
dep-scan
jq
diff --git a/nixos/tests/docker-rootless.nix b/nixos/tests/docker-rootless.nix
index fcd33476ae45..17fec3e04f65 100644
--- a/nixos/tests/docker-rootless.nix
+++ b/nixos/tests/docker-rootless.nix
@@ -22,7 +22,7 @@
testScript =
{ nodes, ... }:
let
- user = nodes.machine.config.users.users.alice;
+ user = nodes.machine.users.users.alice;
sudo = lib.concatStringsSep " " [
"XDG_RUNTIME_DIR=/run/user/${toString user.uid}"
"DOCKER_HOST=unix:///run/user/${toString user.uid}/docker.sock"
diff --git a/nixos/tests/e57inspector.nix b/nixos/tests/e57inspector.nix
index d421b69f2101..91c4bb90e996 100644
--- a/nixos/tests/e57inspector.nix
+++ b/nixos/tests/e57inspector.nix
@@ -1,38 +1,53 @@
-{ pkgs, ... }:
-{
- name = "e57inspector";
- meta.maintainers = with pkgs.lib.maintainers; [
- nh2
- chpatrick
- ];
+{ pkgs, runTest }:
+let
+ testFile = pkgs.fetchurl {
+ url = "https://raw.githubusercontent.com/asmaloney/libE57Format-test-data/bbcacec05d60f923869545c5eab33d94c390d50e/self/ColouredCubeFloat.e57";
+ hash = "sha256-bb95crNYvX3Qhkx4k6Sqe2GjOf1u4nxxswMfdjyXfTM=";
+ };
- nodes.machine =
- { ... }:
- {
- imports = [
- ./common/x11.nix
- ];
+ vmTest = runTest {
+ name = "e57inspector-vm";
+ meta.maintainers = with pkgs.lib.maintainers; [
+ nh2
+ chpatrick
+ ];
- services.xserver.enable = true;
- environment.systemPackages = [
- pkgs.e57inspector
- pkgs.xdotool
- ];
- };
+ nodes.machine =
+ { ... }:
+ {
+ imports = [
+ ./common/x11.nix
+ ];
- testScript =
- let
- testFile = pkgs.fetchurl {
- url = "https://raw.githubusercontent.com/asmaloney/libE57Format-test-data/bbcacec05d60f923869545c5eab33d94c390d50e/self/ColouredCubeFloat.e57";
- hash = "sha256-bb95crNYvX3Qhkx4k6Sqe2GjOf1u4nxxswMfdjyXfTM=";
+ services.xserver.enable = true;
+ environment.systemPackages = [
+ pkgs.e57inspector
+ ];
};
- in
- ''
+ enableOCR = true;
+
+ testScript = ''
start_all()
machine.wait_for_x()
machine.execute("e57inspector ${testFile} >&2 &")
- machine.wait_until_succeeds("xdotool search --pid $(pidof .e57inspector-wrapped)")
- machine.screenshot("screen")
+ machine.wait_for_text("File") # menu visible
+
+ machine.screenshot("screen.png")
'';
+ };
+in
+{
+ vm = vmTest;
+
+ screenshot-analysis = pkgs.callPackage ./vlm-screenshot-question.nix {
+ name = "e57inspector-screenshot-analysis";
+ screenshot = "${vmTest}/screen.png";
+ question = ''
+ Look at this screenshot of a desktop application.
+ Answer: Does the application show that a file was loaded into it successfully?
+ For this, only scans matter, as there are no images in the file.
+ The inspector on the left should show child elements below 'Data 3D'.
+ '';
+ };
}
diff --git a/nixos/tests/ec2-image.nix b/nixos/tests/ec2-image.nix
index b54b153bd52e..b711ceadc2d5 100644
--- a/nixos/tests/ec2-image.nix
+++ b/nixos/tests/ec2-image.nix
@@ -88,294 +88,308 @@ in
};
};
- testScript = ''
- import os
- import re
- import subprocess
- import tempfile
+ testScript =
+ { nodes, ... }:
+ ''
+ import os
+ import re
+ import subprocess
+ import tempfile
- # Instance Metadata Service (IMDSv2 with 1.0 metadata version)
- # TODO: Use 'latest' metadata version instead of '1.0'
- # TODO: [Test matrix] also test providing the host key through IMDS
- # - i.e. a test module argument to select between writing or reading the host key
- def create_ec2_metadata_dir(temp_dir, client_pubkey):
- """Create fake EC2 metadata directory structure with mock data"""
- metadata_dir = os.path.join(temp_dir.name, "ec2-metadata")
+ # Instance Metadata Service (IMDSv2 with 1.0 metadata version)
+ # TODO: Use 'latest' metadata version instead of '1.0'
+ # TODO: [Test matrix] also test providing the host key through IMDS
+ # - i.e. a test module argument to select between writing or reading the host key
+ def create_ec2_metadata_dir(temp_dir, client_pubkey):
+ """Create fake EC2 metadata directory structure with mock data"""
+ metadata_dir = os.path.join(temp_dir.name, "ec2-metadata")
- # Create directory structure
- os.makedirs(os.path.join(metadata_dir, "1.0", "meta-data", "public-keys", "0"), exist_ok=True)
- os.makedirs(os.path.join(metadata_dir, "latest", "api"), exist_ok=True)
+ # Create directory structure
+ os.makedirs(os.path.join(metadata_dir, "1.0", "meta-data", "public-keys", "0"), exist_ok=True)
+ os.makedirs(os.path.join(metadata_dir, "latest", "api"), exist_ok=True)
- # Metadata version 1.0 endpoints (what fetch-ec2-metadata.sh actually fetches)
- with open(os.path.join(metadata_dir, "1.0", "meta-data", "hostname"), "w") as f:
- f.write("test-instance")
- with open(os.path.join(metadata_dir, "1.0", "meta-data", "ami-manifest-path"), "w") as f:
- f.write("(test)")
- with open(os.path.join(metadata_dir, "1.0", "meta-data", "instance-id"), "w") as f:
- f.write("i-1234567890abcdef0")
- with open(os.path.join(metadata_dir, "1.0", "user-data"), "w") as f:
- f.write("")
- with open(os.path.join(metadata_dir, "1.0", "meta-data", "public-keys", "0", "openssh-key"), "w") as f:
- f.write(client_pubkey)
+ # Metadata version 1.0 endpoints (what fetch-ec2-metadata.sh actually fetches)
+ with open(os.path.join(metadata_dir, "1.0", "meta-data", "hostname"), "w") as f:
+ f.write("test-instance")
+ with open(os.path.join(metadata_dir, "1.0", "meta-data", "ami-manifest-path"), "w") as f:
+ f.write("(test)")
+ with open(os.path.join(metadata_dir, "1.0", "meta-data", "instance-id"), "w") as f:
+ f.write("i-1234567890abcdef0")
+ with open(os.path.join(metadata_dir, "1.0", "user-data"), "w") as f:
+ f.write("")
+ with open(os.path.join(metadata_dir, "1.0", "meta-data", "public-keys", "0", "openssh-key"), "w") as f:
+ f.write(client_pubkey)
- # IMDSv2 token endpoint - return a fake token
- with open(os.path.join(metadata_dir, "latest", "api", "token"), "w") as f:
- f.write("test-token-12345")
+ # IMDSv2 token endpoint - return a fake token
+ with open(os.path.join(metadata_dir, "latest", "api", "token"), "w") as f:
+ f.write("test-token-12345")
- return metadata_dir
+ return metadata_dir
- def generate_client_ssh_key():
- """Generate SSH key pair on VM host for client authentication"""
- # Use temporary directory for key generation
- import tempfile
- with tempfile.TemporaryDirectory() as key_dir:
- private_key = os.path.join(key_dir, "id_ed25519")
- public_key = os.path.join(key_dir, "id_ed25519.pub")
+ def generate_client_ssh_key():
+ """Generate SSH key pair on VM host for client authentication"""
+ # Use temporary directory for key generation
+ import tempfile
+ with tempfile.TemporaryDirectory() as key_dir:
+ private_key = os.path.join(key_dir, "id_ed25519")
+ public_key = os.path.join(key_dir, "id_ed25519.pub")
- # Generate key pair using host SSH tools
- ret = os.system(f"${hostPkgs.openssh}/bin/ssh-keygen -t ed25519 -f {private_key} -N \"\"")
- if ret != 0:
- raise Exception("Failed to generate SSH key pair")
+ # Generate key pair using host SSH tools
+ ret = subprocess.run(
+ [
+ "${hostPkgs.openssh}/bin/ssh-keygen",
+ "-t",
+ "ed25519",
+ "-f",
+ private_key,
+ "-N",
+ ""
+ ]
+ ).returncode
+ if ret != 0:
+ raise Exception("Failed to generate SSH key pair")
- # Read the generated public key
- with open(public_key, "r") as f:
- client_pubkey = f.read().strip()
+ # Read the generated public key
+ with open(public_key, "r") as f:
+ client_pubkey = f.read().strip()
- # Read the private key
- with open(private_key, "r") as f:
- client_private_key = f.read()
+ # Read the private key
+ with open(private_key, "r") as f:
+ client_private_key = f.read()
- return client_pubkey, client_private_key
+ return client_pubkey, client_private_key
- def setup_client_ssh_key(client, client_private_key):
- """Install the pre-generated SSH private key on client"""
- client.succeed("mkdir -p /root/.ssh")
- client.succeed(f"cat > /root/.ssh/id_ed25519 << 'EOF'\n{client_private_key}\nEOF")
- client.succeed("chmod 600 /root/.ssh/id_ed25519")
+ def setup_client_ssh_key(client, client_private_key):
+ """Install the pre-generated SSH private key on client"""
+ client.succeed("mkdir -p /root/.ssh")
+ client.succeed(f"cat > /root/.ssh/id_ed25519 << 'EOF'\n{client_private_key}\nEOF")
+ client.succeed("chmod 600 /root/.ssh/id_ed25519")
- def setup_machine(temp_dir, client_pubkey):
- """Initialize EC2 machine with disk image, metadata server, and networking"""
- # Set up disk image
- image_dir = os.path.join(
- os.environ.get("TMPDIR", tempfile.gettempdir()), "tmp", "vm-state-machine"
- )
- os.makedirs(image_dir, mode=0o700, exist_ok=True)
- disk_image = os.path.join(image_dir, "machine.qcow2")
- subprocess.check_call([
- "qemu-img", "create", "-f", "qcow2", "-F", "qcow2",
- "-o", "backing_file=${image}", disk_image
- ])
- subprocess.check_call(["qemu-img", "resize", disk_image, "10G"])
+ def setup_machine(temp_dir, client_pubkey):
+ """Initialize EC2 machine with disk image, metadata server, and networking"""
+ # Set up disk image
+ image_dir = os.path.join(
+ os.environ.get("TMPDIR", tempfile.gettempdir()), "tmp", "vm-state-machine"
+ )
+ os.makedirs(image_dir, mode=0o700, exist_ok=True)
+ disk_image = os.path.join(image_dir, "machine.qcow2")
+ QEMU = "${nodes.machine.virtualisation.qemu.package}"
+ QEMU_IMG = f"{QEMU}/bin/qemu-img"
+ subprocess.check_call([
+ QEMU_IMG, "create", "-f", "qcow2", "-F", "qcow2",
+ "-o", "backing_file=${image}", disk_image
+ ])
+ subprocess.check_call([QEMU_IMG, "resize", disk_image, "10G"])
- # Create fake EC2 metadata in temporary directory with client's public key
- metadata_dir = create_ec2_metadata_dir(temp_dir, client_pubkey)
+ # Create fake EC2 metadata in temporary directory with client's public key
+ metadata_dir = create_ec2_metadata_dir(temp_dir, client_pubkey)
- # Add both VLAN networking (matching test framework) and EC2 metadata server
- vlan_net = (
- " -device virtio-net-pci,netdev=vlan1,mac=52:54:00:12:01:02"
- + ' -netdev vde,id=vlan1,sock="$QEMU_VDE_SOCKET_1"'
- )
- metadata_net = (
- " -device virtio-net-pci,netdev=ec2meta"
- + f" -netdev 'user,id=ec2meta,net=169.0.0.0/8,guestfwd=tcp:169.254.169.254:80-cmd:${lib.getExe imdsServer} {metadata_dir}'"
- )
+ # Add both VLAN networking (matching test framework) and EC2 metadata server
+ vlan_net = (
+ " -device virtio-net-pci,netdev=vlan1,mac=52:54:00:12:01:02"
+ + ' -netdev vde,id=vlan1,sock="$QEMU_VDE_SOCKET_1"'
+ )
+ metadata_net = (
+ " -device virtio-net-pci,netdev=ec2meta"
+ + f" -netdev 'user,id=ec2meta,net=169.0.0.0/8,guestfwd=tcp:169.254.169.254:80-cmd:${lib.getExe imdsServer} {metadata_dir}'"
+ )
- start_command = (
- "qemu-kvm -m 1024"
- + f" -drive file={disk_image},if=virtio,werror=report"
- + vlan_net
- + metadata_net
- + " $QEMU_OPTS"
- )
+ start_command = (
+ f"{QEMU}/bin/qemu-kvm -m 1024"
+ + f" -drive file={disk_image},if=virtio,werror=report"
+ + vlan_net
+ + metadata_net
+ + " $QEMU_OPTS"
+ )
- return create_machine(start_command), metadata_dir
+ return create_machine(start_command), metadata_dir
- def test_userdata_decompression(machine, user_data_path, compressed_data, format_name):
- """Test that compressed user-data is decompressed by fetch-ec2-metadata"""
- test_marker = f"{format_name}-decompression-test"
- with open(user_data_path, "wb") as f:
- f.write(compressed_data)
- machine.succeed("systemctl reset-failed fetch-ec2-metadata; systemctl restart fetch-ec2-metadata")
- result = machine.succeed("cat /etc/ec2-metadata/user-data")
- assert test_marker in result, f"Expected '{test_marker}' in decompressed {format_name} content, got: {result}"
- journal = machine.succeed("journalctl -u fetch-ec2-metadata --no-pager -b")
- assert "decompressing:" in journal, f"Expected decompression log in journal for {format_name}"
+ def test_userdata_decompression(machine, user_data_path, compressed_data, format_name):
+ """Test that compressed user-data is decompressed by fetch-ec2-metadata"""
+ test_marker = f"{format_name}-decompression-test"
+ with open(user_data_path, "wb") as f:
+ f.write(compressed_data)
+ machine.succeed("systemctl reset-failed fetch-ec2-metadata; systemctl restart fetch-ec2-metadata")
+ result = machine.succeed("cat /etc/ec2-metadata/user-data")
+ assert test_marker in result, f"Expected '{test_marker}' in decompressed {format_name} content, got: {result}"
+ journal = machine.succeed("journalctl -u fetch-ec2-metadata --no-pager -b")
+ assert "decompressing:" in journal, f"Expected decompression log in journal for {format_name}"
- # Create temporary directory for metadata (scoped for cleanup)
- temp_dir = tempfile.TemporaryDirectory()
+ # Create temporary directory for metadata (scoped for cleanup)
+ temp_dir = tempfile.TemporaryDirectory()
- # Start client first (but don't wait for it to boot)
- client.start()
+ # Start client first (but don't wait for it to boot)
+ client.start()
- # Generate SSH key pair on VM host before starting machine
- client_pubkey, client_private_key = generate_client_ssh_key()
+ # Generate SSH key pair on VM host before starting machine
+ client_pubkey, client_private_key = generate_client_ssh_key()
- # Set up machine with client's public key in metadata service
- machine, metadata_dir = setup_machine(temp_dir, client_pubkey)
- user_data_path = os.path.join(metadata_dir, "1.0", "user-data")
+ # Set up machine with client's public key in metadata service
+ machine, metadata_dir = setup_machine(temp_dir, client_pubkey)
+ user_data_path = os.path.join(metadata_dir, "1.0", "user-data")
- try:
- machine.start()
+ try:
+ machine.start()
- # Wait for services to be ready
- machine.wait_for_unit("sshd.service")
- machine.wait_for_unit("print-host-key.service")
- machine.wait_for_unit("apply-ec2-data.service")
+ # Wait for services to be ready
+ machine.wait_for_unit("sshd.service")
+ machine.wait_for_unit("print-host-key.service")
+ machine.wait_for_unit("apply-ec2-data.service")
- # Extract shared variables outside subtests
- machine_ip = "${config.nodes.machine.networking.primaryIPAddress}"
+ # Extract shared variables outside subtests
+ machine_ip = "${config.nodes.machine.networking.primaryIPAddress}"
- with subtest("EC2 metadata service connectivity"):
- # Obtain an IMDSv2 token, then use it to fetch metadata
- imds_token = machine.succeed(
- "curl -sf -X PUT -H 'X-aws-ec2-metadata-token-ttl-seconds: 600'"
- " http://169.254.169.254/latest/api/token"
- ).strip()
- assert imds_token, "Failed to obtain IMDSv2 token"
- hostname_response = machine.succeed(
- f"curl -sf -H 'X-aws-ec2-metadata-token: {imds_token}'"
- " http://169.254.169.254/1.0/meta-data/hostname"
- )
- assert "test-instance" in hostname_response, f"Expected 'test-instance', got: {hostname_response}"
+ with subtest("EC2 metadata service connectivity"):
+ # Obtain an IMDSv2 token, then use it to fetch metadata
+ imds_token = machine.succeed(
+ "curl -sf -X PUT -H 'X-aws-ec2-metadata-token-ttl-seconds: 600'"
+ " http://169.254.169.254/latest/api/token"
+ ).strip()
+ assert imds_token, "Failed to obtain IMDSv2 token"
+ hostname_response = machine.succeed(
+ f"curl -sf -H 'X-aws-ec2-metadata-token: {imds_token}'"
+ " http://169.254.169.254/1.0/meta-data/hostname"
+ )
+ assert "test-instance" in hostname_response, f"Expected 'test-instance', got: {hostname_response}"
- with subtest("SSH host key extraction from console"):
- console_log = machine.get_console_log()
- assert "-----BEGIN SSH HOST KEY FINGERPRINTS-----" in console_log
- assert "-----END SSH HOST KEY FINGERPRINTS-----" in console_log
- assert "-----BEGIN SSH HOST KEY KEYS-----" in console_log
- assert "-----END SSH HOST KEY KEYS-----" in console_log
+ with subtest("SSH host key extraction from console"):
+ console_log = machine.get_console_log()
+ assert "-----BEGIN SSH HOST KEY FINGERPRINTS-----" in console_log
+ assert "-----END SSH HOST KEY FINGERPRINTS-----" in console_log
+ assert "-----BEGIN SSH HOST KEY KEYS-----" in console_log
+ assert "-----END SSH HOST KEY KEYS-----" in console_log
- keys_pattern = r"-----BEGIN SSH HOST KEY KEYS-----(.*?)-----END SSH HOST KEY KEYS-----"
- keys_match = re.search(keys_pattern, console_log, re.DOTALL)
- assert keys_match, "Could not find SSH host keys section"
- keys_content = keys_match.group(1).strip()
- assert "ssh-" in keys_content, "SSH keys should contain ssh- prefix"
+ keys_pattern = r"-----BEGIN SSH HOST KEY KEYS-----(.*?)-----END SSH HOST KEY KEYS-----"
+ keys_match = re.search(keys_pattern, console_log, re.DOTALL)
+ assert keys_match, "Could not find SSH host keys section"
+ keys_content = keys_match.group(1).strip()
+ assert "ssh-" in keys_content, "SSH keys should contain ssh- prefix"
- with subtest("Network connectivity"):
- client.succeed(f"ping -c 1 {machine_ip}")
+ with subtest("Network connectivity"):
+ client.succeed(f"ping -c 1 {machine_ip}")
- with subtest("SSH connectivity with strict host key checking"):
- # Install the pre-generated private key on client
- setup_client_ssh_key(client, client_private_key)
+ with subtest("SSH connectivity with strict host key checking"):
+ # Install the pre-generated private key on client
+ setup_client_ssh_key(client, client_private_key)
- # Get console log and extract host keys
- console_log = machine.get_console_log()
- keys_pattern = r"-----BEGIN SSH HOST KEY KEYS-----(.*?)-----END SSH HOST KEY KEYS-----"
- keys_match = re.search(keys_pattern, console_log, re.DOTALL)
- assert keys_match, "Could not find SSH host keys section"
+ # Get console log and extract host keys
+ console_log = machine.get_console_log()
+ keys_pattern = r"-----BEGIN SSH HOST KEY KEYS-----(.*?)-----END SSH HOST KEY KEYS-----"
+ keys_match = re.search(keys_pattern, console_log, re.DOTALL)
+ assert keys_match, "Could not find SSH host keys section"
- # Create known_hosts file from console-extracted host keys
- keys_content = keys_match.group(1).strip()
- known_hosts_entries = []
- for line in keys_content.split('\n'):
- if line.strip() and line.startswith('ssh-'):
- known_hosts_entries.append(f"{machine_ip} {line.strip()}")
+ # Create known_hosts file from console-extracted host keys
+ keys_content = keys_match.group(1).strip()
+ known_hosts_entries = []
+ for line in keys_content.split('\n'):
+ if line.strip() and line.startswith('ssh-'):
+ known_hosts_entries.append(f"{machine_ip} {line.strip()}")
- assert known_hosts_entries, "No SSH host keys found for known_hosts generation"
+ assert known_hosts_entries, "No SSH host keys found for known_hosts generation"
- known_hosts_content = '\n'.join(known_hosts_entries)
- client.succeed(f"cat > /root/.ssh/known_hosts << 'EOF'\n{known_hosts_content}\nEOF")
+ known_hosts_content = '\n'.join(known_hosts_entries)
+ client.succeed(f"cat > /root/.ssh/known_hosts << 'EOF'\n{known_hosts_content}\nEOF")
- # Test SSH connectivity with strict host key checking
- ssh_result = client.succeed(f"ssh -o ConnectTimeout=60 -o BatchMode=yes -i /root/.ssh/id_ed25519 root@{machine_ip} 'echo Hello from $(hostname)'")
- assert "Hello from test-instance" in ssh_result, f"Unexpected SSH result: {ssh_result}"
+ # Test SSH connectivity with strict host key checking
+ ssh_result = client.succeed(f"ssh -o ConnectTimeout=60 -o BatchMode=yes -i /root/.ssh/id_ed25519 root@{machine_ip} 'echo Hello from $(hostname)'")
+ assert "Hello from test-instance" in ssh_result, f"Unexpected SSH result: {ssh_result}"
- with subtest("Basic EC2 functionality"):
- machine.succeed("findmnt / -o SIZE -n | grep -E '[0-9]+G'")
+ with subtest("Basic EC2 functionality"):
+ machine.succeed("findmnt / -o SIZE -n | grep -E '[0-9]+G'")
- with subtest("Decompression of gzip-compressed user-data"):
- import gzip as gzip_mod
- test_data = b"#!/bin/bash\necho gzip-decompression-test\n"
- test_userdata_decompression(machine, user_data_path, gzip_mod.compress(test_data), "gzip")
+ with subtest("Decompression of gzip-compressed user-data"):
+ import gzip as gzip_mod
+ test_data = b"#!/bin/bash\necho gzip-decompression-test\n"
+ test_userdata_decompression(machine, user_data_path, gzip_mod.compress(test_data), "gzip")
- with subtest("Decompression of bzip2-compressed user-data"):
- import bz2
- test_data = b"#!/bin/bash\necho bzip2-decompression-test\n"
- test_userdata_decompression(machine, user_data_path, bz2.compress(test_data), "bzip2")
+ with subtest("Decompression of bzip2-compressed user-data"):
+ import bz2
+ test_data = b"#!/bin/bash\necho bzip2-decompression-test\n"
+ test_userdata_decompression(machine, user_data_path, bz2.compress(test_data), "bzip2")
- with subtest("Decompression of xz-compressed user-data"):
- import lzma
- test_data = b"#!/bin/bash\necho xz-decompression-test\n"
- test_userdata_decompression(machine, user_data_path, lzma.compress(test_data), "xz")
+ with subtest("Decompression of xz-compressed user-data"):
+ import lzma
+ test_data = b"#!/bin/bash\necho xz-decompression-test\n"
+ test_userdata_decompression(machine, user_data_path, lzma.compress(test_data), "xz")
- with subtest("Decompression of zstd-compressed user-data"):
- test_data = b"#!/bin/bash\necho zstd-decompression-test\n"
- proc = subprocess.run(
- ["${hostPkgs.zstd}/bin/zstd", "-c"],
- input=test_data, capture_output=True, check=True,
- )
- test_userdata_decompression(machine, user_data_path, proc.stdout, "zstd")
+ with subtest("Decompression of zstd-compressed user-data"):
+ test_data = b"#!/bin/bash\necho zstd-decompression-test\n"
+ proc = subprocess.run(
+ ["${hostPkgs.zstd}/bin/zstd", "-c"],
+ input=test_data, capture_output=True, check=True,
+ )
+ test_userdata_decompression(machine, user_data_path, proc.stdout, "zstd")
- with subtest("Decompression of lzip-compressed user-data"):
- test_data = b"#!/bin/bash\necho lzip-decompression-test\n"
- proc = subprocess.run(
- ["${hostPkgs.lzip}/bin/lzip", "-c"],
- input=test_data, capture_output=True, check=True,
- )
- test_userdata_decompression(machine, user_data_path, proc.stdout, "lzip")
+ with subtest("Decompression of lzip-compressed user-data"):
+ test_data = b"#!/bin/bash\necho lzip-decompression-test\n"
+ proc = subprocess.run(
+ ["${hostPkgs.lzip}/bin/lzip", "-c"],
+ input=test_data, capture_output=True, check=True,
+ )
+ test_userdata_decompression(machine, user_data_path, proc.stdout, "lzip")
- with subtest("IPv6 IMDS fallback"):
- # Save hostname fetched via IPv4 for later comparison
- original_hostname = machine.succeed("cat /etc/ec2-metadata/hostname").strip()
+ with subtest("IPv6 IMDS fallback"):
+ # Save hostname fetched via IPv4 for later comparison
+ original_hostname = machine.succeed("cat /etc/ec2-metadata/hostname").strip()
- # Assign the EC2 IPv6 IMDS address to loopback
- machine.succeed("ip -6 addr add fd00:ec2::254/128 dev lo")
+ # Assign the EC2 IPv6 IMDS address to loopback
+ machine.succeed("ip -6 addr add fd00:ec2::254/128 dev lo")
- # Create metadata directory structure for the IPv6 endpoint
- machine.succeed(
- "mkdir -p /tmp/ipv6-metadata/1.0/meta-data/public-keys/0"
- " && mkdir -p /tmp/ipv6-metadata/latest/api"
- " && cp /etc/ec2-metadata/hostname /tmp/ipv6-metadata/1.0/meta-data/hostname"
- " && cp /etc/ec2-metadata/ami-manifest-path /tmp/ipv6-metadata/1.0/meta-data/ami-manifest-path"
- " && echo i-1234567890abcdef0 > /tmp/ipv6-metadata/1.0/meta-data/instance-id"
- " && echo ipv6-test-token > /tmp/ipv6-metadata/latest/api/token"
- " && touch /tmp/ipv6-metadata/1.0/user-data"
- )
- machine.execute(
- "test -f /etc/ec2-metadata/public-keys-0-openssh-key"
- " && cp /etc/ec2-metadata/public-keys-0-openssh-key"
- " /tmp/ipv6-metadata/1.0/meta-data/public-keys/0/openssh-key"
- )
+ # Create metadata directory structure for the IPv6 endpoint
+ machine.succeed(
+ "mkdir -p /tmp/ipv6-metadata/1.0/meta-data/public-keys/0"
+ " && mkdir -p /tmp/ipv6-metadata/latest/api"
+ " && cp /etc/ec2-metadata/hostname /tmp/ipv6-metadata/1.0/meta-data/hostname"
+ " && cp /etc/ec2-metadata/ami-manifest-path /tmp/ipv6-metadata/1.0/meta-data/ami-manifest-path"
+ " && echo i-1234567890abcdef0 > /tmp/ipv6-metadata/1.0/meta-data/instance-id"
+ " && echo ipv6-test-token > /tmp/ipv6-metadata/latest/api/token"
+ " && touch /tmp/ipv6-metadata/1.0/user-data"
+ )
+ machine.execute(
+ "test -f /etc/ec2-metadata/public-keys-0-openssh-key"
+ " && cp /etc/ec2-metadata/public-keys-0-openssh-key"
+ " /tmp/ipv6-metadata/1.0/meta-data/public-keys/0/openssh-key"
+ )
- # Serve metadata on the IPv6 IMDS address via socat + imds-server (inetd-style)
- machine.succeed(
- "systemd-run --unit=ipv6-imds --"
- " socat TCP6-LISTEN:80,bind=[fd00:ec2::254],fork,reuseaddr"
- " SYSTEM:'${lib.getExe imdsServer} /tmp/ipv6-metadata'"
- )
+ # Serve metadata on the IPv6 IMDS address via socat + imds-server (inetd-style)
+ machine.succeed(
+ "systemd-run --unit=ipv6-imds --"
+ " socat TCP6-LISTEN:80,bind=[fd00:ec2::254],fork,reuseaddr"
+ " SYSTEM:'${lib.getExe imdsServer} /tmp/ipv6-metadata'"
+ )
- # Wait for IPv6 IMDS to become reachable (token endpoint doesn't require auth)
- machine.wait_until_succeeds(
- "curl -sf -X PUT -H 'X-aws-ec2-metadata-token-ttl-seconds: 600'"
- " http://[fd00:ec2::254]/latest/api/token"
- )
+ # Wait for IPv6 IMDS to become reachable (token endpoint doesn't require auth)
+ machine.wait_until_succeeds(
+ "curl -sf -X PUT -H 'X-aws-ec2-metadata-token-ttl-seconds: 600'"
+ " http://[fd00:ec2::254]/latest/api/token"
+ )
- # Block IPv4 IMDS to force fallback to IPv6
- machine.succeed(
- "iptables -I OUTPUT -d 169.254.169.254 -p tcp --dport 80 -j REJECT"
- )
+ # Block IPv4 IMDS to force fallback to IPv6
+ machine.succeed(
+ "iptables -I OUTPUT -d 169.254.169.254 -p tcp --dport 80 -j REJECT"
+ )
- # Verify IPv4 IMDS is now unreachable
- machine.fail(
- "curl -sf --connect-timeout 2 http://169.254.169.254/1.0/meta-data/hostname"
- )
+ # Verify IPv4 IMDS is now unreachable
+ machine.fail(
+ "curl -sf --connect-timeout 2 http://169.254.169.254/1.0/meta-data/hostname"
+ )
- # Clear fetched metadata and re-run the fetcher
- machine.succeed("rm -f /etc/ec2-metadata/*")
- machine.succeed("systemctl restart fetch-ec2-metadata")
+ # Clear fetched metadata and re-run the fetcher
+ machine.succeed("rm -f /etc/ec2-metadata/*")
+ machine.succeed("systemctl restart fetch-ec2-metadata")
- # Verify metadata was successfully re-fetched via IPv6
- hostname = machine.succeed("cat /etc/ec2-metadata/hostname").strip()
- assert hostname == original_hostname, f"Expected '{original_hostname}', got '{hostname}'"
+ # Verify metadata was successfully re-fetched via IPv6
+ hostname = machine.succeed("cat /etc/ec2-metadata/hostname").strip()
+ assert hostname == original_hostname, f"Expected '{original_hostname}', got '{hostname}'"
- # Clean up: restore IPv4 IMDS access
- machine.succeed(
- "iptables -D OUTPUT -d 169.254.169.254 -p tcp --dport 80 -j REJECT"
- )
- machine.succeed("systemctl stop ipv6-imds")
+ # Clean up: restore IPv4 IMDS access
+ machine.succeed(
+ "iptables -D OUTPUT -d 169.254.169.254 -p tcp --dport 80 -j REJECT"
+ )
+ machine.succeed("systemctl stop ipv6-imds")
- finally:
- machine.shutdown()
- temp_dir.cleanup()
- '';
+ finally:
+ machine.shutdown()
+ temp_dir.cleanup()
+ '';
}
diff --git a/nixos/tests/endlessh-go.nix b/nixos/tests/endlessh-go.nix
index 892d54af6101..f897b563b976 100644
--- a/nixos/tests/endlessh-go.nix
+++ b/nixos/tests/endlessh-go.nix
@@ -1,7 +1,7 @@
{ lib, pkgs, ... }:
{
name = "endlessh-go";
- meta.maintainers = with lib.maintainers; [ azahi ];
+ meta.maintainers = [ ];
nodes = {
server =
diff --git a/nixos/tests/enlightenment.nix b/nixos/tests/enlightenment.nix
index 41dfc754e7fe..e5e6589976f6 100644
--- a/nixos/tests/enlightenment.nix
+++ b/nixos/tests/enlightenment.nix
@@ -33,7 +33,7 @@
testScript =
{ nodes, ... }:
let
- user = nodes.machine.config.users.users.alice;
+ user = nodes.machine.users.users.alice;
in
''
with subtest("Ensure x starts"):
diff --git a/nixos/tests/etcd/default.nix b/nixos/tests/etcd/default.nix
index 96add9670a95..16e605550136 100644
--- a/nixos/tests/etcd/default.nix
+++ b/nixos/tests/etcd/default.nix
@@ -22,16 +22,11 @@ let
} (import path etcdPkgs)
);
testEtcdPkg = pkg: path: testEtcd path { etcd = pkg; };
- testEtcd_3_4 = testEtcdPkg pkgs.etcd_3_4;
testEtcd_3_5 = testEtcdPkg pkgs.etcd_3_5;
testEtcd_3_6 = testEtcdPkg pkgs.etcd_3_6;
in
{
- "3_4" = {
- multi-node = testEtcd_3_4 ./multi-node.nix;
- single-node = testEtcd_3_4 ./single-node.nix;
- };
"3_5" = {
multi-node = testEtcd_3_5 ./multi-node.nix;
single-node = testEtcd_3_5 ./single-node.nix;
diff --git a/nixos/tests/extra-initrd.nix b/nixos/tests/extra-initrd.nix
new file mode 100644
index 000000000000..20da3ad8d11b
--- /dev/null
+++ b/nixos/tests/extra-initrd.nix
@@ -0,0 +1,96 @@
+{
+ runTest,
+ ...
+}:
+let
+ common =
+ { config, pkgs, ... }:
+ {
+ virtualisation.useBootLoader = true;
+ virtualisation.useEFIBoot = true;
+ system.boot.extraInitrd.paths = [
+ extraInitrdPath
+ ];
+
+ boot.loader.timeout = 2;
+
+ boot.initrd.systemd.mounts = [
+ {
+ what = "/canary.txt";
+ where = "/sysroot/run/canary.txt";
+ type = "none";
+ options = "bind";
+ unitConfig = {
+ DefaultDependencies = false;
+ };
+ requiredBy = [ "initrd-fs.target" ];
+ before = [ "initrd-fs.target" ];
+ }
+ ];
+ };
+
+ extraInitrdPath = "custom.cpio";
+ canaryCpio =
+ pkgs:
+ pkgs.runCommand "canary.cpio"
+ {
+ nativeBuildInputs = [ pkgs.cpio ];
+ }
+ ''
+ echo canary > canary.txt
+ find . -print0 | cpio --null -o --format=newc > $out
+ '';
+
+ testScript =
+ # python
+ ''
+ machine.wait_for_unit("multi-user.target")
+
+ # Check that the extra cpio archive is on the ESP
+ machine.succeed("test -e /boot/custom.cpio")
+
+ # Check that the initrd that we booted with contained the file from
+ # the extra initrd and our initrd mount unit bound it into sysroot
+ assert machine.succeed("cat /run/canary.txt").strip() == "canary"
+ '';
+in
+{
+ systemd-boot = runTest (
+ { pkgs, ... }: {
+ name = "systemd-boot-extra-initrd";
+
+ nodes.machine = { config, ... }: {
+ imports = [ common ];
+
+ boot.loader.systemd-boot = {
+ enable = true;
+ extraInstallCommands = ''
+ cp ${canaryCpio pkgs} ${config.boot.loader.efi.efiSysMountPoint}/${extraInitrdPath}
+ '';
+ };
+ };
+
+ inherit testScript;
+ }
+ );
+
+ limine = runTest {
+ name = "limine-extra-initrd";
+
+ nodes.machine = { pkgs, config, ... }: {
+ imports = [ common ];
+
+ boot.loader.limine = {
+ enable = true;
+ efiSupport = true;
+ enableEditor = true;
+ extraInstallCommands = ''
+ cp ${canaryCpio pkgs} ${config.boot.loader.efi.efiSysMountPoint}/${extraInitrdPath}
+ '';
+ };
+
+ };
+
+ inherit testScript;
+ };
+}
diff --git a/nixos/tests/flarum.nix b/nixos/tests/flarum.nix
new file mode 100644
index 000000000000..cbebe29c0c3c
--- /dev/null
+++ b/nixos/tests/flarum.nix
@@ -0,0 +1,73 @@
+{ lib, ... }:
+{
+ name = "flarum";
+
+ meta = {
+ maintainers = with lib.maintainers; [
+ fsagbuya
+ jasonodoom
+ ];
+ };
+
+ nodes.machine =
+ { pkgs, ... }:
+ {
+ # Flarum installs and migrates the database on first boot and runs a
+ # MariaDB server alongside PHP-FPM and nginx, so give the VM some headroom.
+ virtualisation.memorySize = 2048;
+
+ services.flarum = {
+ enable = true;
+ forumTitle = "NixOS Flarum Test Forum";
+ domain = "localhost";
+ baseUrl = "http://localhost";
+
+ # Run `flarum install` against the locally provisioned MariaDB. Safe here
+ # because the VM always starts from a fresh, empty database.
+ createDatabaseLocally = true;
+
+ adminUser = "admin";
+ adminEmail = "admin@example.com";
+ # The trailing newline matches how secret managers typically write files.
+ initialAdminPasswordFile = "${pkgs.writeText "admin-pass" "flarum-admin-password\n"}";
+ # MariaDB authenticates via unix socket and never checks this password;
+ # setting it still exercises the substitution path.
+ databasePasswordFile = "${pkgs.writeText "db-pass" "flarum-db-password\n"}";
+ };
+ };
+
+ testScript = ''
+ start_all()
+
+ # PHP-FPM is ordered after the oneshot installer (Type=oneshot, no
+ # RemainAfterExit), so waiting on it implies the install/migrate finished.
+ machine.wait_for_unit("phpfpm-flarum.service")
+ machine.wait_for_unit("nginx.service")
+ machine.wait_for_open_port(80)
+
+ # The forum front page is server-rendered and embeds the configured title.
+ machine.wait_until_succeeds("curl -sf http://localhost/ -o /dev/null")
+ machine.succeed("curl -sf http://localhost/ | grep -F 'NixOS Flarum Test Forum'")
+
+ # The admin API endpoint should respond, confirming the app booted cleanly.
+ machine.succeed("curl -sf http://localhost/api -o /dev/null")
+
+ # Only the placeholders may appear in the install config in the Nix store.
+ machine.succeed("grep -q '@adminPassword@' /nix/store/*-config.json")
+ machine.succeed("grep -q '@databasePassword@' /nix/store/*-config.json")
+ machine.fail("grep -qe 'flarum-admin-password' -e 'flarum-db-password' /nix/store/*-config.json")
+
+ # A successful login proves the admin password was substituted intact.
+ machine.succeed(
+ "curl -sf http://localhost/api/token "
+ + "-H 'Content-Type: application/json' "
+ + "-d '{\"identification\": \"admin\", \"password\": \"flarum-admin-password\"}' "
+ + "| grep -F token"
+ )
+
+ # The database password must arrive intact in config.php, which must
+ # not be world-readable.
+ machine.succeed("grep -q 'flarum-db-password' /var/lib/flarum/config.php")
+ machine.succeed("[ $(stat -c %a /var/lib/flarum/config.php) = 600 ]")
+ '';
+}
diff --git a/nixos/tests/fontconfig-default-fonts.nix b/nixos/tests/fontconfig-default-fonts.nix
index 4a46b3e17172..9e6becd5ed02 100644
--- a/nixos/tests/fontconfig-default-fonts.nix
+++ b/nixos/tests/fontconfig-default-fonts.nix
@@ -6,20 +6,19 @@
jtojnar
];
- nodes.machine =
+ containers.machine =
{ config, pkgs, ... }:
{
fonts.enableDefaultPackages = true; # Background fonts
fonts.packages = with pkgs; [
noto-fonts-color-emoji
- cantarell-fonts
twitter-color-emoji
source-code-pro
gentium
];
fonts.fontconfig.defaultFonts = {
serif = [ "Gentium" ];
- sansSerif = [ "Cantarell" ];
+ sansSerif = [ "DejaVu Sans" ];
monospace = [ "Source Code Pro" ];
emoji = [ "Twitter Color Emoji" ];
};
@@ -27,7 +26,7 @@
testScript = ''
machine.succeed("fc-match serif | grep '\"Gentium\"'")
- machine.succeed("fc-match sans-serif | grep '\"Cantarell\"'")
+ machine.succeed("fc-match sans-serif | grep '\"DejaVu Sans\"'")
machine.succeed("fc-match monospace | grep '\"Source Code Pro\"'")
machine.succeed("fc-match emoji | grep '\"Twitter Color Emoji\"'")
'';
diff --git a/nixos/tests/freescout/default.nix b/nixos/tests/freescout/default.nix
new file mode 100644
index 000000000000..603f61131432
--- /dev/null
+++ b/nixos/tests/freescout/default.nix
@@ -0,0 +1,5 @@
+{ runTest }:
+{
+ integration = runTest ./integration.nix;
+ upgrade = runTest ./upgrade.nix;
+}
diff --git a/nixos/tests/freescout/integration.nix b/nixos/tests/freescout/integration.nix
new file mode 100644
index 000000000000..57d28f032c3a
--- /dev/null
+++ b/nixos/tests/freescout/integration.nix
@@ -0,0 +1,195 @@
+# This tests runs freescout and performs the following tests:
+# - Create amin user via the CLI
+# - Create mailbox, configured for sending and receiving
+# - Test if receiving, sending and notifications work
+{ pkgs, lib, ... }:
+
+let
+ mailDomain = "freemail.local";
+ freescoutDomain = "freescout.local";
+ sendInitial = pkgs.writeShellScriptBin "send-initial" ''
+ exec ${pkgs.dovecot}/libexec/dovecot/deliver -d freescout <&2")
+
+ machine.wait_for_unit("nginx")
+ machine.wait_for_unit("freescout-setup")
+
+ with subtest("Check new API version"):
+ machine.succeed("curl -fsSL --cookie-jar cjar --cookie cjar 'http://${freescoutDomain}/system/status' | grep ${newVersion}")
+ '';
+}
diff --git a/nixos/tests/frp.nix b/nixos/tests/frp.nix
index 48c4e2bc842c..00982a6e05bf 100644
--- a/nixos/tests/frp.nix
+++ b/nixos/tests/frp.nix
@@ -9,10 +9,14 @@ let
name = "secrets";
text = "token=${token}";
};
+ portRange = 6003;
in
{
name = "frp";
- meta.maintainers = with lib.maintainers; [ zaldnoay ];
+ meta.maintainers = with lib.maintainers; [
+ zaldnoay
+ epireyn
+ ];
nodes = {
frps = {
networking = {
@@ -56,14 +60,25 @@ in
services.httpd = {
enable = true;
adminAddr = "admin@example.com";
- virtualHosts."test-appication" =
+ virtualHosts =
let
testdir = pkgs.writeTextDir "web/index.php" " {log_file} 2>&1 &")
- machine.wait_until_succeeds(f"{curl_cmd} {base_url} 2>&1", timeout=60)
+ machine.wait_until_succeeds(f"{CURL_CMD} {BASE_URL_PKG} 2>&1", timeout=60)
yield
finally:
# We need to wait a little bit to make sure the server is properly
# shutdown before launching a new instance.
machine.execute(f"{pkg}/bin/geoserver-shutdown; sleep 1")
+ @contextmanager
+ def running_geoserver_service():
+ service_name = "geoserver"
+ try:
+ print(f"Launching service {service_name}...")
+ machine.execute(f"systemctl start {service_name} > tee {log_file} 2>&1")
+ machine.wait_until_succeeds(f"{CURL_CMD} {BASE_URL_SERVICE} 2>&1", timeout=60)
+ yield
+ finally:
+ # We need to wait a little bit to make sure the server is properly
+ # shutdown before launching a new instance.
+ machine.execute(f"systemctl stop {service_name}; sleep 1")
+
start_all()
- with running_geoserver("${geoserver}"):
- machine.succeed(f"{curl_cmd} {base_url}/ows?service=WMS&version=1.3.0&request=GetCapabilities")
+ with subtest("A standalone Geoserver installation without extensions can be started."):
+ with running_geoserver_pkg("${geoserver}"):
+ machine.succeed(f"{CURL_CMD} {BASE_URL_PKG}/ows?service=WMS&version=1.3.0&request=GetCapabilities")
- # No extensions yet.
- machine.fail(f"{curl_cmd_rest} {base_url}/rest/imports")
- machine.fail(f"{curl_cmd_rest} {base_url}/rest/monitor/requests.csv")
+ # No extensions yet.
+ machine.fail(f"{CURL_CMD_REST} {BASE_URL_PKG}/rest/imports")
+ machine.fail(f"{CURL_CMD_REST} {BASE_URL_PKG}/rest/monitor/requests.csv")
+ with subtest("A standalone Geoserver installation with numerous extensions can be started."):
+ with running_geoserver_pkg("${geoserverWithAllExtensions}"):
+ machine.succeed(f"{CURL_CMD_REST} {BASE_URL_PKG}/rest/imports")
+ machine.succeed(f"{CURL_CMD_REST} {BASE_URL_PKG}/rest/monitor/requests.csv")
+ _, stdout = machine.execute(f"cat {log_file}")
+ print(stdout.replace("\\n", "\n"))
+ assert "GDAL Native Library loaded" in stdout, "gdal"
+ assert "org.geotools.imageio.netcdf.utilities.NetCDFUtilities" in stdout, "netcdf"
+ assert "Unable to load library 'netcdf'" not in stdout, "netcdf"
- with running_geoserver("${geoserverWithImporterExtension}"):
- machine.succeed(f"{curl_cmd_rest} {base_url}/rest/imports")
- machine.fail(f"{curl_cmd_rest} {base_url}/rest/monitor/requests.csv")
+ # libjpeg-turbo is disabled as of 2.28.1.
+ # assert "The turbo jpeg encoder is available for usage" in stdout, "libjpeg-turbo"
- with running_geoserver("${geoserverWithAllExtensions}"):
- machine.succeed(f"{curl_cmd_rest} {base_url}/rest/imports")
- machine.succeed(f"{curl_cmd_rest} {base_url}/rest/monitor/requests.csv")
- _, stdout = machine.execute(f"cat {log_file}")
- print(stdout.replace("\\n", "\n"))
- assert "GDAL Native Library loaded" in stdout, "gdal"
- assert "org.geotools.imageio.netcdf.utilities.NetCDFUtilities" in stdout, "netcdf"
- assert "Unable to load library 'netcdf'" not in stdout, "netcdf"
+ with subtest("Geoserver can be run as a service. Some Extensions are available."):
+ with running_geoserver_service():
+ # Only the importer extension is available.
+ machine.succeed(f"{CURL_CMD_REST} {BASE_URL_SERVICE}/rest/imports")
+ machine.fail(f"{CURL_CMD_REST} {BASE_URL_SERVICE}/rest/monitor/requests.csv")
- # libjpeg-turbo is disabled as of 2.28.1.
- # assert "The turbo jpeg encoder is available for usage" in stdout, "libjpeg-turbo"
'';
}
diff --git a/nixos/tests/ghostunnel-modular.nix b/nixos/tests/ghostunnel-modular.nix
index bb4cef2a9f08..7fa301168a46 100644
--- a/nixos/tests/ghostunnel-modular.nix
+++ b/nixos/tests/ghostunnel-modular.nix
@@ -54,13 +54,13 @@
};
testScript = ''
- import os
+ import subprocess
# prepare certificates
def cmd(command):
print(f"+{command}")
- r = os.system(command)
+ r = subprocess.run(command, shell=True).returncode
if r != 0:
raise Exception(f"Command {command} failed with exit code {r}")
diff --git a/nixos/tests/ghostunnel.nix b/nixos/tests/ghostunnel.nix
index acd9c4331835..58749591ffbc 100644
--- a/nixos/tests/ghostunnel.nix
+++ b/nixos/tests/ghostunnel.nix
@@ -48,13 +48,13 @@
};
testScript = ''
- import os
+ import subprocess
# prepare certificates
def cmd(command):
print(f"+{command}")
- r = os.system(command)
+ r = subprocess.run(command, shell=True).returncode
if r != 0:
raise Exception(f"Command {command} failed with exit code {r}")
diff --git a/nixos/tests/glusterfs.nix b/nixos/tests/glusterfs.nix
index 9224797704e2..ac4c8e7024f7 100644
--- a/nixos/tests/glusterfs.nix
+++ b/nixos/tests/glusterfs.nix
@@ -49,6 +49,14 @@ in
server1.wait_for_unit("glusterd.service")
server2.wait_for_unit("glusterd.service")
+ # The glusterfind delete hook must be a real file, not the dangling
+ # symlink it used to be after being copied out of the package (#257863).
+ server1.succeed("test -f /var/lib/glusterd/hooks/1/delete/post/S57glusterfind-delete-post")
+ server1.fail("test -L /var/lib/glusterd/hooks/1/delete/post/S57glusterfind-delete-post")
+
+ # The volume option presets must be installed (#33159).
+ server1.succeed("test -f /var/lib/glusterd/groups/metadata-cache")
+
server1.wait_until_succeeds("gluster peer status")
server2.wait_until_succeeds("gluster peer status")
@@ -64,6 +72,9 @@ in
server1.succeed("gluster volume create gv0 server1:/data/vg0 server2:/data/vg0")
server1.succeed("gluster volume start gv0")
+ # Applying a group preset needs /var/lib/glusterd/groups populated (#33159).
+ server1.succeed("gluster volume set gv0 group metadata-cache")
+
# test clients
client1.wait_for_unit("gluster.mount")
client2.wait_for_unit("gluster.mount")
diff --git a/nixos/tests/gnome-extensions.nix b/nixos/tests/gnome-extensions.nix
index d3047abd39a6..ed94a2dbd19e 100644
--- a/nixos/tests/gnome-extensions.nix
+++ b/nixos/tests/gnome-extensions.nix
@@ -146,7 +146,7 @@
machine.succeed(f"${run "gnome-extensions enable {extension}"}")
wait_time = 5
- while getState(extension) == "ACTIVATING" and (wait_time := wait_time - 1) > 0:
+ while "ACTIVATING" in getState(extension) and (wait_time := wait_time - 1) > 0:
machine.log(f"Extension {extension} is still activating, waiting {wait_time} more seconds")
machine.sleep(1)
checkState("ACTIVE", extension)
diff --git a/nixos/tests/gocron.nix b/nixos/tests/gocron.nix
new file mode 100644
index 000000000000..2625dc474b53
--- /dev/null
+++ b/nixos/tests/gocron.nix
@@ -0,0 +1,58 @@
+{ pkgs, ... }:
+
+{
+ name = "gocron";
+ meta.maintainers = with pkgs.lib.maintainers; [ juliusfreudenberger ];
+
+ nodes.machine =
+ { pkgs, ... }:
+ {
+ environment.systemPackages = [ pkgs.jq ];
+ services.gocron = {
+ enable = true;
+ settings = {
+ jobs = [
+ {
+ name = "Test job";
+ disabled_cron = true;
+ commands = [
+ "echo 'Job runs successfully'"
+ ];
+ }
+ ];
+ };
+ };
+ };
+
+ testScript = ''
+ def gocron_is_up(_) -> bool:
+ status, _ = machine.execute("curl --fail http://localhost:8156")
+ return status == 0
+
+ def job_is_available() -> bool:
+ status, output = machine.execute("curl http://localhost:8156/api/jobs | jq '. | length'")
+ return status == 0 and int(output) == 1
+
+ def start_job():
+ machine.succeed("curl -X POST http://localhost:8156/api/jobs/Test%20job")
+
+ def job_ran_successfully() -> bool:
+ output = machine.succeed("curl http://localhost:8156/api/runs/Test%20job | jq '.[0].status_id, .[0].logs.[2].message'")
+ split_output = output.split('\n')
+ ran_successfully = int(split_output[0]) == 3
+ log_message_as_expected = "Job runs not successfully" in split_output[1]
+ return ran_successfully and log_message_as_expected
+
+ machine.wait_for_unit("gocron.service")
+ machine.wait_for_open_port(8156)
+ with machine.nested("Waiting for UI to work"):
+ retry(gocron_is_up)
+
+ with machine.nested("Test job"):
+ if not job_is_available():
+ exit(1)
+ start_job()
+ if not job_ran_successfully():
+ exit(1)
+ '';
+}
diff --git a/nixos/tests/gocryptfs.nix b/nixos/tests/gocryptfs.nix
index d0e5df5e40b5..763e1c1407fa 100644
--- a/nixos/tests/gocryptfs.nix
+++ b/nixos/tests/gocryptfs.nix
@@ -13,6 +13,8 @@
pkgs.openssl
];
+ programs.fuse.enable = true;
+
specialisation.fstab-test.configuration = {
# This can't be fileSytems, as the qemu machinery doesn't honor it.
virtualisation.fileSystems."/plain" = {
diff --git a/nixos/tests/grafana/basic.nix b/nixos/tests/grafana/basic.nix
index eb024be44fa9..2221960135c5 100644
--- a/nixos/tests/grafana/basic.nix
+++ b/nixos/tests/grafana/basic.nix
@@ -84,7 +84,7 @@ import ../make-test-python.nix (
};
};
- nodes = builtins.mapAttrs (
+ containers = builtins.mapAttrs (
_: val:
mkMerge [
val
@@ -97,7 +97,7 @@ import ../make-test-python.nix (
meta.maintainers = [ ];
- inherit nodes;
+ inherit containers;
testScript = ''
start_all()
diff --git a/nixos/tests/grafana/provision/default.nix b/nixos/tests/grafana/provision/default.nix
index 8fed76d5b282..9109aa58a99a 100644
--- a/nixos/tests/grafana/provision/default.nix
+++ b/nixos/tests/grafana/provision/default.nix
@@ -183,7 +183,7 @@ import ../../make-test-python.nix (
};
};
- nodes = builtins.mapAttrs (
+ containers = builtins.mapAttrs (
_: val:
mkMerge [
val
@@ -196,7 +196,7 @@ import ../../make-test-python.nix (
meta.maintainers = [ ];
- inherit nodes;
+ inherit containers;
testScript = ''
start_all()
diff --git a/nixos/tests/grub.nix b/nixos/tests/grub/basic.nix
similarity index 100%
rename from nixos/tests/grub.nix
rename to nixos/tests/grub/basic.nix
diff --git a/nixos/tests/grub/efi.nix b/nixos/tests/grub/efi.nix
new file mode 100644
index 000000000000..953548bb24bb
--- /dev/null
+++ b/nixos/tests/grub/efi.nix
@@ -0,0 +1,45 @@
+{ lib, ... }:
+{
+ name = "grub-efi";
+
+ meta = with lib.maintainers; {
+ maintainers = [
+ tomfitzhenry
+ rnhmjoj
+ ];
+ };
+
+ nodes.machine =
+ { ... }:
+ {
+ virtualisation.useBootLoader = true;
+ virtualisation.useEFIBoot = true;
+
+ boot.loader.grub = {
+ enable = true;
+ efiSupport = true;
+ device = "nodev";
+
+ # Read GRUB from the serial console so its output can be matched
+ # deterministically with wait_for_console_text, rather than via OCR.
+ extraConfig = "serial; terminal_output serial";
+ };
+ boot.loader.efi.canTouchEfiVariables = true;
+ };
+
+ testScript = ''
+ machine.start()
+
+ with subtest("Enters GRUB"):
+ machine.wait_for_console_text("GNU GRUB")
+
+ with subtest("Loads kernel"):
+ machine.wait_for_console_text("Linux version")
+
+ with subtest("Reaches multi-user target"):
+ machine.wait_for_unit("multi-user.target")
+
+ with subtest("Boots via UEFI"):
+ machine.succeed("test -d /sys/firmware/efi")
+ '';
+}
diff --git a/nixos/tests/grub/graphical.nix b/nixos/tests/grub/graphical.nix
new file mode 100644
index 000000000000..54d25ce3d843
--- /dev/null
+++ b/nixos/tests/grub/graphical.nix
@@ -0,0 +1,57 @@
+{ lib, ... }:
+{
+ name = "grub-graphical";
+
+ meta = with lib.maintainers; {
+ maintainers = [
+ tomfitzhenry
+ rnhmjoj
+ ];
+ };
+
+ nodes.machine =
+ { pkgs, ... }:
+ let
+ # GRUB only draws a background image when it is in graphical gfxterm
+ # mode. Bake a marker string into the splash so the OCR check below can
+ # only succeed when gfxterm actually rendered it; a silent fallback to
+ # text mode would show the plain menu without this image (and its text).
+ #
+ # The image must be an 8-bit sRGB PNG, otherwise GRUB's png module fails
+ # to load it and silently falls back to its default (non-graphical) menu.
+ splash = pkgs.runCommand "grub-gfxterm-splash.png" { nativeBuildInputs = [ pkgs.imagemagick ]; } ''
+ magick -size 1024x768 xc:'#2d2d2d' \
+ -font ${pkgs.dejavu_fonts.minimal}/share/fonts/truetype/DejaVuSans.ttf \
+ -gravity south -pointsize 48 -fill white \
+ -annotate +0+150 'GFXTERMOK' \
+ -depth 8 -type TrueColor PNG24:$out
+ '';
+ in
+ {
+ virtualisation.useBootLoader = true;
+
+ # Leave the menu up long enough for OCR to catch it; we boot early with a
+ # keypress once it has, so this does not slow the test down.
+ boot.loader.timeout = 30;
+ boot.loader.grub = {
+ enable = true;
+ splashImage = splash;
+ };
+ };
+
+ enableOCR = true;
+
+ testScript = ''
+ machine.start()
+
+ with subtest("GRUB renders its menu graphically (gfxterm), showing the splash"):
+ # The marker text lives inside the background image, so reading it back
+ # proves GRUB displayed the image rather than falling back to text mode.
+ machine.wait_for_text("GFXTERMOK")
+ machine.screenshot("grub_gfxterm")
+
+ with subtest("Machine boots into NixOS from GRUB"):
+ machine.send_key("ret")
+ machine.wait_for_unit("multi-user.target")
+ '';
+}
diff --git a/nixos/tests/grub/hashed-password.nix b/nixos/tests/grub/hashed-password.nix
new file mode 100644
index 000000000000..191468f8b69a
--- /dev/null
+++ b/nixos/tests/grub/hashed-password.nix
@@ -0,0 +1,77 @@
+{ lib, ... }:
+{
+ name = "grub-hashed-password";
+
+ meta = with lib.maintainers; {
+ maintainers = [
+ tomfitzhenry
+ rnhmjoj
+ ];
+ };
+
+ nodes.machine =
+ { pkgs, ... }:
+ let
+ mkGrubPbkdf2HashFile =
+ password:
+ toString (
+ pkgs.runCommandLocal "grub-pbkdf2-hash" { nativeBuildInputs = [ pkgs.grub2 ]; } ''
+ printf "%s\n%s\n" "${password}" "${password}" | grub-mkpasswd-pbkdf2 | grep -o 'grub\.pbkdf2\.[^[:space:]]*' > $out
+ ''
+ );
+ in
+ {
+ virtualisation.useBootLoader = true;
+
+ boot.loader.timeout = null;
+ boot.loader.grub = {
+ enable = true;
+ users.bob.hashedPasswordFile = mkGrubPbkdf2HashFile "bobsecret";
+
+ # Read GRUB from the serial console so its output can be matched
+ # deterministically; OCR would work but is flakier, which matters for
+ # the multi-step interactive login exercised below.
+ extraConfig = "serial; terminal_output serial";
+ };
+ };
+
+ testScript = ''
+ def grub_login_as(user, password):
+ """
+ Enters user and password to log into GRUB
+ """
+ machine.wait_for_console_text("Enter username:")
+ machine.send_chars(user + "\n")
+ machine.wait_for_console_text("Enter password:")
+ machine.send_chars(password + "\n")
+
+
+ def grub_select_all_configurations():
+ """
+ Selects "All configurations" from the GRUB menu
+ to trigger a login request.
+ """
+ machine.send_monitor_command("sendkey down")
+ machine.send_monitor_command("sendkey ret")
+
+
+ machine.start()
+
+ # wait for grub screen
+ machine.wait_for_console_text("GNU GRUB")
+
+ grub_select_all_configurations()
+ with subtest("Invalid hashedPassword credentials are rejected"):
+ grub_login_as("bob", "wrongsecret")
+ machine.wait_for_console_text("access denied")
+
+ grub_select_all_configurations()
+ with subtest("Valid hashedPassword credentials are accepted"):
+ grub_login_as("bob", "bobsecret")
+ machine.send_chars("\n") # press enter to boot
+ machine.wait_for_console_text("Linux version")
+
+ with subtest("Machine boots correctly"):
+ machine.wait_for_unit("multi-user.target")
+ '';
+}
diff --git a/nixos/tests/grub/mirrored-boots.nix b/nixos/tests/grub/mirrored-boots.nix
new file mode 100644
index 000000000000..f3059bf675bc
--- /dev/null
+++ b/nixos/tests/grub/mirrored-boots.nix
@@ -0,0 +1,61 @@
+{ lib, ... }:
+{
+ name = "grub-mirrored-boots";
+
+ meta = with lib.maintainers; {
+ maintainers = [
+ tomfitzhenry
+ rnhmjoj
+ ];
+ };
+
+ nodes.machine =
+ { lib, ... }:
+ {
+ virtualisation.useBootLoader = true;
+
+ boot.loader.timeout = null;
+ boot.loader.grub = {
+ enable = true;
+ device = lib.mkOverride 0 "";
+ mirroredBoots = [
+ {
+ path = "/boot1";
+ devices = [ "/dev/vda" ];
+ }
+ {
+ path = "/boot2";
+ devices = [ "nodev" ];
+ }
+ ];
+
+ # Read GRUB from the serial console so its output can be matched
+ # deterministically with wait_for_console_text, rather than via OCR.
+ extraConfig = "serial; terminal_output serial";
+ };
+ };
+
+ testScript = ''
+ machine.start()
+
+ # wait for grub screen
+ machine.wait_for_console_text("GNU GRUB")
+
+ machine.send_chars("\n") # press enter to boot default option
+
+ with subtest("Machine boots correctly"):
+ machine.wait_for_unit("multi-user.target")
+
+ with subtest("Verify boot path 1 GRUB installation and configuration"):
+ machine.succeed("test -d /boot1/grub")
+ machine.succeed("test -f /boot1/grub/grub.cfg")
+ machine.succeed("test -f /boot1/grub/state")
+ machine.succeed("grep -q 'menuentry' /boot1/grub/grub.cfg")
+
+ with subtest("Verify boot path 2 GRUB installation and configuration"):
+ machine.succeed("test -d /boot2/grub")
+ machine.succeed("test -f /boot2/grub/grub.cfg")
+ machine.succeed("test -f /boot2/grub/state")
+ machine.succeed("grep -q 'menuentry' /boot2/grub/grub.cfg")
+ '';
+}
diff --git a/nixos/tests/gs1200-exporter.nix b/nixos/tests/gs1200-exporter.nix
index 5f4b4c611c36..03185a4b3b04 100644
--- a/nixos/tests/gs1200-exporter.nix
+++ b/nixos/tests/gs1200-exporter.nix
@@ -2,7 +2,7 @@
{
name = "gs1200-exporter";
meta.maintainers = with lib.maintainers; [ DerGrumpf ];
- nodes.machine = _: {
+ containers.machine = {
services.gs1200-exporter = {
enable = true;
address = "192.168.2.4";
diff --git a/nixos/tests/haproxy.nix b/nixos/tests/haproxy.nix
index 107010528737..20bcd700bb58 100644
--- a/nixos/tests/haproxy.nix
+++ b/nixos/tests/haproxy.nix
@@ -69,12 +69,12 @@
};
};
testScript = ''
- import os
+ import subprocess
# Helpers
def cmd(command):
print(f"+{command}")
- r = os.system(command)
+ r = subprocess.run(command, shell=True).returncode
if r != 0:
raise Exception(f"Command {command} failed with exit code {r}")
diff --git a/nixos/tests/hedgedoc.nix b/nixos/tests/hedgedoc.nix
index 75a81e69b61c..b8701d866bdf 100644
--- a/nixos/tests/hedgedoc.nix
+++ b/nixos/tests/hedgedoc.nix
@@ -1,16 +1,16 @@
-{ pkgs, lib, ... }:
+{ pkgs, ... }:
{
name = "hedgedoc";
meta.maintainers = [ ];
- nodes = {
- hedgedocSqlite =
+ containers = {
+ sqlite =
{ ... }:
{
services.hedgedoc.enable = true;
};
- hedgedocPostgresWithTCPSocket =
+ pgsqltcp =
{ ... }:
{
systemd.services.hedgedoc.after = [ "postgresql.target" ];
@@ -44,7 +44,7 @@
};
};
- hedgedocPostgresWithUNIXSocket =
+ pgsqluds =
{ ... }:
{
systemd.services.hedgedoc.after = [ "postgresql.target" ];
@@ -78,22 +78,22 @@
start_all()
with subtest("HedgeDoc sqlite"):
- hedgedocSqlite.wait_for_unit("hedgedoc.service")
- hedgedocSqlite.wait_for_open_port(3000)
- hedgedocSqlite.wait_until_succeeds("curl -sSf http://localhost:3000/new")
+ sqlite.wait_for_unit("hedgedoc.service")
+ sqlite.wait_for_open_port(3000)
+ sqlite.wait_until_succeeds("curl -sSf http://localhost:3000/new")
with subtest("HedgeDoc postgres with TCP socket"):
- hedgedocPostgresWithTCPSocket.wait_for_unit("postgresql.target")
- hedgedocPostgresWithTCPSocket.wait_for_unit("hedgedoc.service")
- hedgedocPostgresWithTCPSocket.wait_for_open_port(5432)
- hedgedocPostgresWithTCPSocket.wait_for_open_port(3000)
- hedgedocPostgresWithTCPSocket.wait_until_succeeds("curl -sSf http://localhost:3000/new")
+ pgsqltcp.wait_for_unit("postgresql.target")
+ pgsqltcp.wait_for_unit("hedgedoc.service")
+ pgsqltcp.wait_for_open_port(5432)
+ pgsqltcp.wait_for_open_port(3000)
+ pgsqltcp.wait_until_succeeds("curl -sSf http://localhost:3000/new")
with subtest("HedgeDoc postgres with UNIX socket"):
- hedgedocPostgresWithUNIXSocket.wait_for_unit("postgresql.target")
- hedgedocPostgresWithUNIXSocket.wait_for_unit("hedgedoc.service")
- hedgedocPostgresWithUNIXSocket.wait_for_open_port(5432)
- hedgedocPostgresWithUNIXSocket.wait_for_open_port(3000)
- hedgedocPostgresWithUNIXSocket.wait_until_succeeds("curl -sSf http://localhost:3000/new")
+ pgsqluds.wait_for_unit("postgresql.target")
+ pgsqluds.wait_for_unit("hedgedoc.service")
+ pgsqluds.wait_for_open_port(5432)
+ pgsqluds.wait_for_open_port(3000)
+ pgsqluds.wait_until_succeeds("curl -sSf http://localhost:3000/new")
'';
}
diff --git a/nixos/tests/holo-daemon-modular.nix b/nixos/tests/holo-daemon-modular.nix
new file mode 100644
index 000000000000..af32d7e5d472
--- /dev/null
+++ b/nixos/tests/holo-daemon-modular.nix
@@ -0,0 +1,66 @@
+{ ... }:
+{
+ _class = "nixosTest";
+ name = "holo-daemon-modular-service-test";
+
+ nodes = {
+ machine =
+ { pkgs, ... }:
+ {
+ environment.systemPackages = [
+ pkgs.holo-daemon
+ pkgs.holo-cli
+ ];
+ system.services.holo-daemon = {
+ imports = [ pkgs.holo-daemon.services.default ];
+ };
+ users.users.holo = {
+ isSystemUser = true;
+ group = "holo";
+ home = "/var/lib/holo";
+ createHome = true;
+ };
+ users.groups.holo = { };
+ services.getty.autologinUser = "root";
+ };
+ };
+
+ testScript =
+ { nodes, ... }:
+ ''
+ import time
+
+ start_all()
+
+ # holo-cli connects to the daemon at startup
+ # features a bash-like editing functionality for interactive use
+ # uses -c option to execute arguments as commands
+
+ machine.wait_for_unit("multi-user.target")
+
+ machine.wait_for_unit("holo-daemon.service")
+
+ machine.succeed("holo-cli -V")
+
+ # wait for cli to connect to the daemon
+ machine.wait_for_open_port(50051)
+
+ # Test the running configuration is empty
+ machine.succeed("holo-cli -c 'show running format json'")
+
+ # Configure an OSPFv3 instance:
+ # as seen in https://asciinema.org/a/qYxmDu1QjGPBAt5gNyNKvXhHk
+
+ machine.send_chars("holo-cli\n", 1)
+ time.sleep(5)
+ machine.send_chars("configure\n", 1)
+ machine.send_chars("routing control-plane-protocols control-plane-protocol ietf-ospf:ospfv3 main\n", 1)
+ machine.send_chars("ospf preference inter-area 50\n", 1)
+ machine.send_chars("show changes\n", 1)
+ machine.send_chars("commit\n", 1)
+ machine.send_chars("exit\n", 1)
+
+ # Verify the configuration was applied (in interactive test)
+ machine.succeed("test \"$(holo-cli -c 'show running format json')\" != \"{}\"");
+ '';
+}
diff --git a/nixos/tests/installer.nix b/nixos/tests/installer.nix
index 76b3b62c0389..d90fbafd93e8 100644
--- a/nixos/tests/installer.nix
+++ b/nixos/tests/installer.nix
@@ -41,7 +41,7 @@ let
documentation.enable = false;
# To ensure that we can rebuild the grub configuration on the nixos-rebuild
- system.extraDependencies = with pkgs; [ stdenvNoCC ];
+ system.extraDependencies = with pkgs; [ stdenvNoCC hello ];
boot.initrd.systemd.enable = ${boolToString systemdStage1};
@@ -278,14 +278,14 @@ let
target.succeed("nix-store --verify --check-contents >&2")
with subtest("Check whether the channel works"):
- target.succeed("nix-env -iA nixos.procps >&2")
- assert ".nix-profile" in target.succeed("type -tP ps | tee /dev/stderr")
+ target.succeed("nix-env -iA nixos.hello >&2")
+ assert ".nix-profile" in target.succeed("type -tP hello | tee /dev/stderr")
with subtest(
"Check that the daemon works, and that non-root users can run builds "
"(this will build a new profile generation through the daemon)"
):
- target.succeed("su alice -l -c 'nix-env -iA nixos.procps' >&2")
+ target.succeed("su alice -l -c 'nix-env -iA nixos.hello' >&2")
with subtest("Configure system with writable Nix store on next boot"):
# we're not using copy_from_host here because the installer image
@@ -677,7 +677,6 @@ let
# non-EFI tests can only run on x86
platforms = mkIf (!isEfi) [
"x86_64-linux"
- "x86_64-darwin"
"i686-linux"
];
inherit broken;
@@ -745,6 +744,7 @@ let
desktop-file-utils
docbook5
docbook_xsl_ns
+ hello
kbd.dev
kmod.dev
libarchive.dev
@@ -1467,7 +1467,6 @@ in
# Full disk encryption (root, kernel and initrd encrypted) using GRUB, GPT/UEFI,
# LVM-on-LUKS and a keyfile in initrd.secrets to enter the passphrase once
fullDiskEncryption = makeInstallerTest "fullDiskEncryption" {
- broken = true;
createPartitions = ''
installer.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel gpt"
@@ -1508,6 +1507,53 @@ in
'';
enableOCR = true;
postBootCommands = ''
+ target.wait_for_text("Enter passphrase for")
+ # GRUB's EFI keyboard input appears to drop characters when typed at the
+ # default speed (producing an "Invalid passphrase" error), so type slowly.
+ target.send_chars("supersecret\n", 0.2)
+ '';
+ };
+
+ # Root, kernel and initrd encrypted using GRUB cryptodisk, MBR/legacy BIOS,
+ # plain LUKS and a keyfile in initrd.secrets to enter the passphrase once
+ grubCryptodiskLegacyBios = makeInstallerTest "grubCryptodiskLegacyBios" {
+ meta.maintainers = [ maintainers.tomfitzhenry ];
+ createPartitions = ''
+ installer.succeed(
+ "flock /dev/vda parted --script /dev/vda -- mklabel msdos mkpart primary ext4 1MiB -1GiB mkpart primary linux-swap -1GiB 100%",
+ "udevadm settle",
+ "echo -n supersecret | cryptsetup luksFormat -q --pbkdf-force-iterations 1000 --type luks1 /dev/vda1 -",
+ "echo -n supersecret | cryptsetup luksOpen /dev/vda1 cryptroot",
+ "mkfs.ext4 -L nixos /dev/mapper/cryptroot",
+ "mkswap -L swap /dev/vda2",
+ "swapon -L swap",
+ "mount LABEL=nixos /mnt",
+ "mkdir -p /mnt/etc/nixos",
+ # Add a keyfile so stage 1 can unlock the root device without a second,
+ # interactive prompt. This keeps the test independent of the stage 1
+ # implementation, which matters because the scripted and systemd
+ # initrds word their passphrase prompts differently. Only GRUB (which
+ # is stage 1 independent) then prompts interactively.
+ "dd if=/dev/urandom of=/mnt/etc/nixos/luks.key bs=256 count=1",
+ "echo -n supersecret | cryptsetup luksAddKey -q --pbkdf-force-iterations 1000 --key-file - /dev/vda1 /mnt/etc/nixos/luks.key",
+ )
+ '';
+ bootLoader = "grub";
+ # GRUB draws its cryptodisk passphrase prompt on the console terminal
+ # without a trailing newline, so the line-based wait_for_console_text can
+ # never observe it. Use OCR (wait_for_text) to read it off the screen.
+ enableOCR = true;
+ extraConfig = ''
+ boot.loader.grub.enableCryptodisk = true;
+ boot.initrd.secrets."/luks.key" = "/etc/nixos/luks.key";
+ boot.initrd.luks.devices.cryptroot = {
+ device = lib.mkForce "/dev/vda1";
+ keyFile = "/luks.key";
+ };
+ '';
+ postBootCommands = ''
+ # GRUB has to unlock the disk to read /boot before it can boot the kernel;
+ # stage 1 then unlocks the root device with the embedded keyfile.
target.wait_for_text("Enter passphrase for")
target.send_chars("supersecret\n")
'';
diff --git a/nixos/tests/iscsi-multipath-root.nix b/nixos/tests/iscsi-multipath-root.nix
index 90723bdbb604..08cd0c0f3f30 100644
--- a/nixos/tests/iscsi-multipath-root.nix
+++ b/nixos/tests/iscsi-multipath-root.nix
@@ -126,7 +126,7 @@ in
];
environment.etc."initiator-root-disk-closure".source =
- nodes.initiatorRootDisk.config.system.build.toplevel;
+ nodes.initiatorRootDisk.system.build.toplevel;
nix.settings = {
substituters = lib.mkForce [ ];
diff --git a/nixos/tests/iscsi-root.nix b/nixos/tests/iscsi-root.nix
index 571dbecad244..6872dfbda94c 100644
--- a/nixos/tests/iscsi-root.nix
+++ b/nixos/tests/iscsi-root.nix
@@ -169,7 +169,7 @@ in
initiatorAuto.succeed("mkfs.xfs /dev/sda")
initiatorAuto.succeed("mkdir /mnt && mount /dev/sda /mnt")
initiatorAuto.succeed(
- "nixos-install --no-bootloader --no-root-passwd --system ${nodes.initiatorRootDisk.config.system.build.toplevel}"
+ "nixos-install --no-bootloader --no-root-passwd --system ${nodes.initiatorRootDisk.system.build.toplevel}"
)
initiatorAuto.succeed("umount /mnt && rmdir /mnt")
initiatorAuto.shutdown()
diff --git a/nixos/tests/jellyfin.nix b/nixos/tests/jellyfin.nix
index 4896c13d4eca..7463b920727e 100644
--- a/nixos/tests/jellyfin.nix
+++ b/nixos/tests/jellyfin.nix
@@ -33,6 +33,7 @@
hardwareDecodingCodecs = {
h264 = true;
hevc = true;
+ hevc10bit = true;
vp9 = true;
hevcRExt10bit = true;
hevcRExt12bit = true;
@@ -174,7 +175,8 @@
assert config.get("EnableIntelLowPowerH264HwEncoder") == True, f"Intel low power H264: expected True, got '{config.get('EnableIntelLowPowerH264HwEncoder')}'"
assert config.get("EnableIntelLowPowerHevcHwEncoder") == True, f"Intel low power HEVC: expected True, got '{config.get('EnableIntelLowPowerHevcHwEncoder')}'"
- # HEVC RExt color depth verification
+ # HEVC color depth verification
+ assert config.get("EnableDecodingColorDepth10Hevc") == True, f"HEVC 10bit: expected True, got '{config.get('EnableDecodingColorDepth10Hevc')}'"
assert config.get("EnableDecodingColorDepth10HevcRext") == True, f"HEVC RExt 10bit: expected True, got '{config.get('EnableDecodingColorDepth10HevcRext')}'"
assert config.get("EnableDecodingColorDepth12HevcRext") == True, f"HEVC RExt 12bit: expected True, got '{config.get('EnableDecodingColorDepth12HevcRext')}'"
diff --git a/nixos/tests/kafka/base.nix b/nixos/tests/kafka/base.nix
index 678a28c31413..3a37048ca362 100644
--- a/nixos/tests/kafka/base.nix
+++ b/nixos/tests/kafka/base.nix
@@ -5,10 +5,7 @@ with pkgs.lib;
let
makeKafkaTest =
name:
- {
- kafkaPackage,
- mode ? "kraft",
- }:
+ { kafkaPackage }:
(import ../make-test-python.nix {
inherit name;
@@ -16,48 +13,36 @@ let
kafka =
{ ... }:
{
- services.apache-kafka = mkMerge [
- {
- enable = true;
- package = kafkaPackage;
- settings = {
- "offsets.topic.replication.factor" = 1;
- "log.dirs" = [
- "/var/lib/kafka/logdir1"
- "/var/lib/kafka/logdir2"
- ];
- };
- }
- (mkIf (mode == "zookeeper") {
- settings = {
- "zookeeper.session.timeout.ms" = 600000;
- "zookeeper.connect" = [ "zookeeper1:2181" ];
- };
- })
- (mkIf (mode == "kraft") {
- clusterId = "ak2fIHr4S8WWarOF_ODD0g";
- formatLogDirs = true;
- settings = {
- "node.id" = 1;
- "process.roles" = [
- "broker"
- "controller"
- ];
- "listeners" = [
- "PLAINTEXT://:9092"
- "CONTROLLER://:9093"
- ];
- "listener.security.protocol.map" = [
- "PLAINTEXT:PLAINTEXT"
- "CONTROLLER:PLAINTEXT"
- ];
- "controller.quorum.voters" = [
- "1@kafka:9093"
- ];
- "controller.listener.names" = [ "CONTROLLER" ];
- };
- })
- ];
+ services.apache-kafka = {
+ enable = true;
+ package = kafkaPackage;
+ clusterId = "ak2fIHr4S8WWarOF_ODD0g";
+ formatLogDirs = true;
+ settings = {
+ "offsets.topic.replication.factor" = 1;
+ "log.dirs" = [
+ "/var/lib/kafka/logdir1"
+ "/var/lib/kafka/logdir2"
+ ];
+ "node.id" = 1;
+ "process.roles" = [
+ "broker"
+ "controller"
+ ];
+ "listeners" = [
+ "PLAINTEXT://:9092"
+ "CONTROLLER://:9093"
+ ];
+ "listener.security.protocol.map" = [
+ "PLAINTEXT:PLAINTEXT"
+ "CONTROLLER:PLAINTEXT"
+ ];
+ "controller.quorum.voters" = [
+ "1@kafka:9093"
+ ];
+ "controller.listener.names" = [ "CONTROLLER" ];
+ };
+ };
networking.firewall.allowedTCPPorts = [
9092
@@ -67,29 +52,11 @@ let
# i686 tests: qemu-system-i386 can simulate max 2047MB RAM (not 2048)
virtualisation.memorySize = 2047;
};
- }
- // optionalAttrs (mode == "zookeeper") {
- zookeeper1 =
- { ... }:
- {
- services.zookeeper = {
- enable = true;
- };
-
- networking.firewall.allowedTCPPorts = [ 2181 ];
- virtualisation.diskSize = 1024;
- };
};
testScript = ''
start_all()
- ${optionalString (mode == "zookeeper") ''
- zookeeper1.wait_for_unit("default.target")
- zookeeper1.wait_for_unit("zookeeper.service")
- zookeeper1.wait_for_open_port(2181)
- ''}
-
kafka.wait_for_unit("default.target")
kafka.wait_for_unit("apache-kafka.service")
kafka.wait_for_open_port(9092)
@@ -115,12 +82,8 @@ let
in
with pkgs;
{
- kafka_3_9 = makeKafkaTest "kafka_3_9" {
- kafkaPackage = apacheKafka_3_9;
- mode = "zookeeper";
- };
- kafka_4_0 = makeKafkaTest "kafka_4_0" { kafkaPackage = apacheKafka_4_0; };
kafka_4_1 = makeKafkaTest "kafka_4_1" { kafkaPackage = apacheKafka_4_1; };
kafka_4_2 = makeKafkaTest "kafka_4_2" { kafkaPackage = apacheKafka_4_2; };
+ kafka_4_3 = makeKafkaTest "kafka_4_3" { kafkaPackage = apacheKafka_4_3; };
kafka = makeKafkaTest "kafka" { kafkaPackage = apacheKafka; };
}
diff --git a/nixos/tests/kea.nix b/nixos/tests/kea.nix
index bb361eba14fb..ec249f0c7150 100644
--- a/nixos/tests/kea.nix
+++ b/nixos/tests/kea.nix
@@ -6,7 +6,6 @@
# address.
{
- pkgs,
lib,
...
}:
@@ -15,7 +14,7 @@
name = "kea";
- nodes = {
+ containers = {
router =
{ config, pkgs, ... }:
{
@@ -26,6 +25,7 @@
firewall.allowedUDPPorts = [ 67 ];
};
+ services.resolved.enable = false;
systemd.network = {
enable = true;
networks = {
@@ -77,7 +77,7 @@
# Enable communication between dhcp4 and a local dhcp-ddns
# instance.
- # https://kea.readthedocs.io/en/kea-2.2.0/arm/dhcp4-srv.html#ddns-for-dhcpv4
+ # https://kea.readthedocs.io/en/kea-3.2.0/arm/dhcp4-srv.html#ddns-for-dhcpv4
dhcp-ddns = {
enable-updates = true;
};
@@ -93,7 +93,7 @@
forward-ddns = {
# Configure updates of a forward zone named `lan.nixos.test`
# hosted at the nameserver at 10.0.0.2
- # https://kea.readthedocs.io/en/kea-2.2.0/arm/ddns.html#adding-forward-dns-servers
+ # https://kea.readthedocs.io/en/kea-3.2.0/arm/ddns.html#adding-forward-dns-servers
ddns-domains = [
{
name = "lan.nixos.test.";
@@ -111,22 +111,10 @@
};
};
- services.kea.ctrl-agent = {
- enable = true;
- settings = {
- http-host = "127.0.0.1";
- http-port = 8000;
- control-sockets.dhcp4 = {
- socket-type = "unix";
- socket-name = "/run/kea/dhcp4.sock";
- };
- };
- };
-
services.prometheus.exporters.kea = {
enable = true;
controlSocketPaths = [
- "http://127.0.0.1:8000"
+ config.services.kea.dhcp4.settings.control-socket.socket-name
];
};
};
@@ -141,6 +129,7 @@
firewall.allowedUDPPorts = [ 53 ];
};
+ services.resolved.enable = false;
systemd.network = {
enable = true;
networks = {
@@ -153,8 +142,6 @@
};
};
- services.resolved.enable = false;
-
# Set up an authoritative nameserver, serving the `lan.nixos.test`
# zone and configure an ACL that allows dynamic updates from
# the router's ip address.
@@ -213,6 +200,7 @@
{
virtualisation.vlans = [ 1 ];
systemd.services.systemd-networkd.environment.SYSTEMD_LOG_LEVEL = "debug";
+ services.resolved.enable = false;
networking = {
useNetworkd = true;
useDHCP = false;
@@ -222,16 +210,23 @@
};
};
testScript =
- { ... }:
+ # python
''
start_all()
+
router.wait_for_unit("kea-dhcp4-server.service")
- client.systemctl("start systemd-networkd-wait-online.service")
- client.wait_for_unit("systemd-networkd-wait-online.service")
- client.wait_until_succeeds("ping -c 5 10.0.0.1")
- router.wait_until_succeeds("ping -c 5 10.0.0.3")
- nameserver.wait_until_succeeds("kdig +short client.lan.nixos.test @10.0.0.2 | grep -q 10.0.0.3")
- router.log(router.execute("curl 127.0.0.1:9547")[1])
- router.succeed("curl --no-buffer 127.0.0.1:9547 | grep -qE '^kea_dhcp4_addresses_assigned_total.*1.0$'")
+
+ with subtest("DHCPv4"):
+ client.systemctl("start systemd-networkd-wait-online.service")
+ client.wait_for_unit("systemd-networkd-wait-online.service")
+ client.wait_until_succeeds("ping -c 5 10.0.0.1")
+ router.wait_until_succeeds("ping -c 5 10.0.0.3")
+
+ with subtest("DDNS"):
+ nameserver.wait_until_succeeds("kdig +short client.lan.nixos.test @10.0.0.2 | grep -q 10.0.0.3")
+
+ with subtest("Prometheus Exporter"):
+ router.log(router.execute("curl 127.0.0.1:9547")[1])
+ router.succeed("curl --silent 127.0.0.1:9547 | grep -qE '^kea_dhcp4_addresses_assigned_total.*1.0$'")
'';
}
diff --git a/nixos/tests/keepalived.nix b/nixos/tests/keepalived.nix
index d5ffa6e9838d..2bc512446693 100644
--- a/nixos/tests/keepalived.nix
+++ b/nixos/tests/keepalived.nix
@@ -1,48 +1,60 @@
-{ pkgs, lib, ... }:
+let
+ mkTest =
+ { useNftables }:
+ import ./make-test-python.nix (
+ { pkgs, lib, ... }:
+ {
+ name = "keepalived-${if useNftables then "nftables" else "iptables"}";
+ meta.maintainers = [ lib.maintainers.raitobezarius ];
+
+ nodes = {
+ node1 =
+ { pkgs, ... }:
+ {
+ networking.nftables.enable = useNftables;
+ services.keepalived.enable = true;
+ services.keepalived.openFirewall = true;
+ services.keepalived.vrrpInstances.test = {
+ interface = "eth1";
+ state = "MASTER";
+ priority = 50;
+ virtualIps = [ { addr = "192.168.1.200"; } ];
+ virtualRouterId = 1;
+ };
+ environment.systemPackages = [ pkgs.tcpdump ];
+ };
+ node2 =
+ { pkgs, ... }:
+ {
+ networking.nftables.enable = useNftables;
+ services.keepalived.enable = true;
+ services.keepalived.openFirewall = true;
+ services.keepalived.vrrpInstances.test = {
+ interface = "eth1";
+ state = "MASTER";
+ priority = 100;
+ virtualIps = [ { addr = "192.168.1.200"; } ];
+ virtualRouterId = 1;
+ };
+ environment.systemPackages = [ pkgs.tcpdump ];
+ };
+ };
+
+ testScript = ''
+ # wait for boot time delay to pass
+ for node in [node1, node2]:
+ node.wait_until_succeeds(
+ "systemctl show -p LastTriggerUSecMonotonic keepalived-boot-delay.timer | grep -vq 'LastTriggerUSecMonotonic=0'"
+ )
+ node.wait_for_unit("keepalived")
+ node2.wait_until_succeeds("ip addr show dev eth1 | grep -q 192.168.1.200")
+ node1.fail("ip addr show dev eth1 | grep -q 192.168.1.200")
+ node1.succeed("ping -c1 192.168.1.200")
+ '';
+ }
+ );
+in
{
- name = "keepalived";
- meta.maintainers = [ lib.maintainers.raitobezarius ];
-
- nodes = {
- node1 =
- { pkgs, ... }:
- {
- services.keepalived.enable = true;
- services.keepalived.openFirewall = true;
- services.keepalived.vrrpInstances.test = {
- interface = "eth1";
- state = "MASTER";
- priority = 50;
- virtualIps = [ { addr = "192.168.1.200"; } ];
- virtualRouterId = 1;
- };
- environment.systemPackages = [ pkgs.tcpdump ];
- };
- node2 =
- { pkgs, ... }:
- {
- services.keepalived.enable = true;
- services.keepalived.openFirewall = true;
- services.keepalived.vrrpInstances.test = {
- interface = "eth1";
- state = "MASTER";
- priority = 100;
- virtualIps = [ { addr = "192.168.1.200"; } ];
- virtualRouterId = 1;
- };
- environment.systemPackages = [ pkgs.tcpdump ];
- };
- };
-
- testScript = ''
- # wait for boot time delay to pass
- for node in [node1, node2]:
- node.wait_until_succeeds(
- "systemctl show -p LastTriggerUSecMonotonic keepalived-boot-delay.timer | grep -vq 'LastTriggerUSecMonotonic=0'"
- )
- node.wait_for_unit("keepalived")
- node2.wait_until_succeeds("ip addr show dev eth1 | grep -q 192.168.1.200")
- node1.fail("ip addr show dev eth1 | grep -q 192.168.1.200")
- node1.succeed("ping -c1 192.168.1.200")
- '';
+ nftables = mkTest { useNftables = true; };
+ iptables = mkTest { useNftables = false; };
}
diff --git a/nixos/tests/kerberos/heimdal.nix b/nixos/tests/kerberos/heimdal.nix
index f12141d94627..e399bf0c3d67 100644
--- a/nixos/tests/kerberos/heimdal.nix
+++ b/nixos/tests/kerberos/heimdal.nix
@@ -169,7 +169,7 @@ import ../make-test-python.nix (
with subtest("Server: initialize host principal with keytab"):
server.send_chars("sudo ktutil get -p alice/admin host/server.foo.bar\n")
server.wait_until_tty_matches("1", "password for alice:")
- server.send_chars("${nodes.server.config.users.users.alice.password}\n")
+ server.send_chars("${nodes.server.users.users.alice.password}\n")
server.wait_until_tty_matches("1", "alice/admin@FOO.BAR's Password:")
server.send_chars(f'{alice_krb_admin_pw}\n')
server.wait_for_file("/etc/krb5.keytab")
@@ -194,7 +194,7 @@ import ../make-test-python.nix (
client.send_chars("sudo ktutil get -p alice/admin host/client.foo.bar\n")
client.wait_until_tty_matches("1", "password for alice:")
- client.send_chars("${nodes.client.config.users.users.alice.password}\n")
+ client.send_chars("${nodes.client.users.users.alice.password}\n")
client.wait_until_tty_matches("1", "alice/admin@FOO.BAR's Password:")
client.send_chars(f"{alice_krb_admin_pw}\n")
client.wait_for_file("/etc/krb5.keytab")
diff --git a/nixos/tests/keycloak.nix b/nixos/tests/keycloak.nix
index 28b47661f3d8..8c5227dd443e 100644
--- a/nixos/tests/keycloak.nix
+++ b/nixos/tests/keycloak.nix
@@ -38,6 +38,7 @@ let
enable = true;
settings = {
hostname = certs.domain;
+ metrics-enabled = true;
};
inherit initialAdminPassword;
sslCertificate = "${certs.${certs.domain}.cert}";
@@ -50,7 +51,6 @@ let
};
plugins = with config.services.keycloak.package.plugins; [
keycloak-discord
- keycloak-metrics-spi
];
};
environment.systemPackages = with pkgs; [
@@ -131,13 +131,7 @@ let
| jq -r '"Authorization: bearer " + .access_token' >admin_auth_header
""")
- # Register the metrics SPI
- keycloak.succeed(
- """${pkgs.jre}/bin/keytool -import -alias snakeoil -file ${certs.ca.cert} -storepass aaaaaa -keystore cacert.jks -noprompt""",
- """KC_OPTS='-Djavax.net.ssl.trustStore=cacert.jks -Djavax.net.ssl.trustStorePassword=aaaaaa' kcadm.sh config credentials --server '${frontendUrl}' --realm master --user admin --password "$(<${adminPasswordFile})" """,
- """KC_OPTS='-Djavax.net.ssl.trustStore=cacert.jks -Djavax.net.ssl.trustStorePassword=aaaaaa' kcadm.sh update events/config -s 'eventsEnabled=true' -s 'adminEventsEnabled=true' -s 'eventsListeners+=metrics-listener'""",
- """curl -sSf '${frontendUrl}/realms/master/metrics' | grep '^keycloak_admin_event_UPDATE'"""
- )
+ keycloak.succeed("curl -sSf https://${certs.domain}:9000/metrics | grep '^jvm_'")
# Publish the realm, including a test OIDC client and user
keycloak.succeed(
diff --git a/nixos/tests/knot.nix b/nixos/tests/knot.nix
index 651fccc21949..3c6217195464 100644
--- a/nixos/tests/knot.nix
+++ b/nixos/tests/knot.nix
@@ -209,11 +209,11 @@ in
testScript =
{ nodes, ... }:
let
- primary4 = (lib.head nodes.primary.config.networking.interfaces.eth1.ipv4.addresses).address;
- primary6 = (lib.head nodes.primary.config.networking.interfaces.eth1.ipv6.addresses).address;
+ primary4 = (lib.head nodes.primary.networking.interfaces.eth1.ipv4.addresses).address;
+ primary6 = (lib.head nodes.primary.networking.interfaces.eth1.ipv6.addresses).address;
- secondary4 = (lib.head nodes.secondary.config.networking.interfaces.eth1.ipv4.addresses).address;
- secondary6 = (lib.head nodes.secondary.config.networking.interfaces.eth1.ipv6.addresses).address;
+ secondary4 = (lib.head nodes.secondary.networking.interfaces.eth1.ipv4.addresses).address;
+ secondary6 = (lib.head nodes.secondary.networking.interfaces.eth1.ipv6.addresses).address;
in
''
import re
diff --git a/nixos/tests/komodo-periphery.nix b/nixos/tests/komodo-periphery.nix
index 64bcbfa7b6e3..e376ddee6506 100644
--- a/nixos/tests/komodo-periphery.nix
+++ b/nixos/tests/komodo-periphery.nix
@@ -5,22 +5,63 @@
maintainers = with lib.maintainers; [ channinghe ];
};
- nodes.machine =
- { config, pkgs, ... }:
- {
- virtualisation.docker.enable = true;
- services.komodo-periphery = {
- enable = true;
- bindIp = "127.0.0.1";
- port = 8120;
- ssl.enable = false;
- passkeys = [ "test-passkey" ];
+ nodes = {
+ periphery =
+ { ... }:
+ {
+ virtualisation.docker.enable = true;
+ services.komodo-periphery = {
+ enable = true;
+ inbound.bindIp = "127.0.0.1";
+ inbound.port = 8120;
+ inbound.ssl.enable = false;
+ inbound.serverEnabled = true;
+ disableTerminals = true;
+ disableContainerTerminals = true;
+ statsPollingRate = "10-sec";
+ containerStatsPollingRate = "1-min";
+ logging.level = "debug";
+ extraSettings = {
+ secrets.TEST_SECRET = "test-value";
+ };
+ auth.privateKey = "file:/var/lib/komodo-periphery/keys/test.key";
+ auth.corePublicKeys = [ "MCowBQYDK2VuAyEATZgrjGHeF0KJUe0+n77+qAWOg3YzEzXOmQWaRgO3OGQ=" ];
+ };
};
- };
+
+ peripheryOutbound =
+ { ... }:
+ {
+ virtualisation.docker.enable = true;
+ services.komodo-periphery = {
+ enable = true;
+ inbound.ssl.enable = false;
+ logging.level = "debug";
+ outbound.coreAddress = "core.invalid";
+ outbound.connectAs = "test-server";
+ };
+ };
+ };
testScript = ''
- machine.wait_for_unit("komodo-periphery.service")
- machine.wait_for_open_port(8120)
- machine.succeed("systemctl status komodo-periphery.service")
+ start_all()
+
+ with subtest("Inbound periphery starts and serves /version"):
+ periphery.wait_for_unit("komodo-periphery.service")
+ periphery.wait_for_open_port(8120)
+ periphery.succeed("curl -fsS --max-time 10 http://127.0.0.1:8120/version")
+
+ with subtest("Periphery creates managed directories"):
+ periphery.succeed("test -d /var/lib/komodo-periphery")
+ periphery.succeed("test -d /var/lib/komodo-periphery/repos")
+ periphery.succeed("test -d /var/lib/komodo-periphery/stacks")
+ periphery.succeed("test -d /var/lib/komodo-periphery/builds")
+ periphery.succeed("test -d /var/lib/komodo-periphery/keys")
+ periphery.succeed("test -d /var/lib/komodo-periphery/ssl")
+
+ with subtest("Outbound periphery stays active despite unreachable core"):
+ peripheryOutbound.wait_for_unit("komodo-periphery.service")
+ peripheryOutbound.sleep(15)
+ peripheryOutbound.succeed("systemctl is-active komodo-periphery")
'';
}
diff --git a/nixos/tests/libuiohook.nix b/nixos/tests/libuiohook.nix
index 34a200bd0349..47114bcd8e88 100644
--- a/nixos/tests/libuiohook.nix
+++ b/nixos/tests/libuiohook.nix
@@ -8,7 +8,7 @@
nodes.client =
{ nodes, ... }:
let
- user = nodes.client.config.users.users.alice;
+ user = nodes.client.users.users.alice;
in
{
imports = [
@@ -24,7 +24,7 @@
testScript =
{ nodes, ... }:
let
- user = nodes.client.config.users.users.alice;
+ user = nodes.client.users.users.alice;
in
''
client.wait_for_x()
diff --git a/nixos/tests/lightdm.nix b/nixos/tests/lightdm.nix
index 3d51924af8de..f561f89df221 100644
--- a/nixos/tests/lightdm.nix
+++ b/nixos/tests/lightdm.nix
@@ -20,7 +20,7 @@
testScript =
{ nodes, ... }:
let
- user = nodes.machine.config.users.users.alice;
+ user = nodes.machine.users.users.alice;
in
''
start_all()
diff --git a/nixos/tests/limine/additional-files.nix b/nixos/tests/limine/additional-files.nix
new file mode 100644
index 000000000000..9e7e00184185
--- /dev/null
+++ b/nixos/tests/limine/additional-files.nix
@@ -0,0 +1,51 @@
+{ pkgs, lib, ... }:
+{
+ name = "additionalFiles";
+ meta.maintainers = with lib.maintainers; [
+ flokli
+ ];
+ meta.platforms = [
+ "x86_64-linux"
+ ];
+ nodes.machine =
+ { ... }:
+ {
+ virtualisation.useBootLoader = true;
+ virtualisation.useEFIBoot = true;
+ boot.loader.limine.enable = true;
+ boot.loader.limine.efiSupport = true;
+ boot.loader.timeout = 0;
+
+ specialisation.withAdditionalFiles.configuration = { ... }: {
+ boot.loader.limine.additionalFiles = {
+ "efi/memtest86/memtest86.efi" = "${pkgs.memtest86-efi}/BOOTX64.efi";
+ };
+ };
+ specialisation.withAdditionalFilesOther.configuration = { ... }: {
+ boot.loader.limine.additionalFiles = {
+ "efi/memtest86/memtest86.efi" = "${builtins.toFile "some-file" "some-content"}";
+ };
+ };
+ };
+
+ testScript =
+ { nodes, ... }:
+ let
+ withAdditionalFiles =
+ nodes.machine.specialisation.withAdditionalFiles.configuration.system.build.toplevel;
+ withAdditionalFilesOther =
+ nodes.machine.specialisation.withAdditionalFilesOther.configuration.system.build.toplevel;
+ in
+ ''
+ machine.start()
+ machine.wait_for_unit("multi-user.target")
+
+ # switch to a generation with additional files and ensure they're present
+ machine.succeed("${withAdditionalFiles}/bin/switch-to-configuration switch")
+ machine.succeed("stat /boot/efi/memtest86/memtest86.efi")
+
+ # switch to the next generation with something else in there and ensure it got updated
+ machine.succeed("${withAdditionalFilesOther}/bin/switch-to-configuration switch")
+ assert machine.succeed("cat /boot/efi/memtest86/memtest86.efi").strip() == "some-content"
+ '';
+}
diff --git a/nixos/tests/limine/default.nix b/nixos/tests/limine/default.nix
index fd7a583f09c6..debce99b0fd8 100644
--- a/nixos/tests/limine/default.nix
+++ b/nixos/tests/limine/default.nix
@@ -3,6 +3,7 @@
...
}:
{
+ additionalFiles = runTest ./additional-files.nix;
bios = runTest ./bios.nix;
checksum = runTest ./checksum.nix;
secureBoot = runTest ./secure-boot.nix;
diff --git a/nixos/tests/listmonk.nix b/nixos/tests/listmonk.nix
index 7d4af8dce31b..7a43d09b7c22 100644
--- a/nixos/tests/listmonk.nix
+++ b/nixos/tests/listmonk.nix
@@ -2,7 +2,7 @@ import ./make-test-python.nix (
{ lib, ... }:
{
name = "listmonk";
- meta.maintainers = with lib.maintainers; [ raitobezarius ];
+ meta.maintainers = [ ];
nodes.machine =
{ pkgs, ... }:
diff --git a/nixos/tests/login-nosuid.nix b/nixos/tests/login-nosuid.nix
new file mode 100644
index 000000000000..f5582382891f
--- /dev/null
+++ b/nixos/tests/login-nosuid.nix
@@ -0,0 +1,113 @@
+{
+ name = "login-nosuid";
+ meta = {
+ maintainers = [ ];
+ };
+
+ # node.pkgsReadOnly = false; # needed when overriding pam to debug mode
+
+ nodes.machine =
+ { pkgs, ... }:
+ {
+ security.enableWrappers = false;
+ systemd.settings.Manager.NoNewPrivileges = true;
+ security.account-utils = {
+ enable = true;
+ pwaccessd.settings = {
+ ExpiredCheck.SpMin = true;
+ };
+ };
+ users.mutableUsers = true;
+ security.account-utils.extraArgs = [
+ "-v"
+ "--debug"
+ ];
+ security.loginDefs.chfnRestrict = "f"; # allow allice to change name
+
+ environment.systemPackages = [
+ pkgs.which
+ pkgs.fish # environment.shells does not actually link fish to /run/current-system/sw/bin, causing chsh to fail unexpectedly
+ ];
+ environment.shells = [ pkgs.fish ];
+
+ # pam debug without giant rebuild
+ # system.replaceDependencies.replacements = [
+ # {
+ # oldDependency = pkgs.linux-pam;
+ # newDependency = pkgs.linux-pam.override { debugMode = true; };
+ # }
+ # ];
+ };
+
+ testScript = ''
+ machine.start(allow_reboot = True)
+
+ machine.wait_for_unit("multi-user.target")
+ machine.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
+ machine.screenshot("postboot")
+
+ with subtest("account-utils passwd has priority"):
+ passwd_path = machine.succeed("realpath $(which passwd)")
+ print(f"passwd path is: {passwd_path}")
+ assert "account-utils" in passwd_path
+
+ with subtest("config file exists"):
+ machine.succeed("ls /etc/account-utils/pwaccessd.conf")
+
+ with subtest("create user"):
+ machine.succeed("useradd -m alice")
+ machine.succeed("(echo foobar; echo foobar) | passwd alice")
+
+ with subtest("Check whether switching VTs works"):
+ machine.fail("pgrep -f 'agetty.*tty2'")
+ machine.send_key("alt-f2")
+ machine.wait_until_succeeds("[ $(fgconsole) = 2 ]")
+ machine.wait_for_unit("getty@tty2.service")
+ machine.wait_until_succeeds("pgrep -f 'agetty.*tty2'")
+
+ with subtest("Log in as alice on a virtual console"):
+ machine.wait_until_tty_matches("2", "login: ")
+ machine.send_chars("alice\n")
+ machine.wait_until_tty_matches("2", "login: alice")
+ machine.wait_until_succeeds("pgrep login")
+ machine.wait_until_tty_matches("2", "Password: ")
+ machine.sleep(1) # something is racy here, so lets just sleep a bit... Not great, but seems to work
+ machine.send_chars("foobar\n")
+ machine.wait_until_succeeds("pgrep -u alice bash")
+ machine.send_chars("touch done\n")
+ machine.wait_for_file("/home/alice/done")
+
+ with subtest("Systemd gives and removes device ownership as needed"):
+ machine.succeed("getfacl /dev/snd/timer | grep -q alice")
+ machine.send_key("alt-f1")
+ machine.wait_until_succeeds("[ $(fgconsole) = 1 ]")
+ machine.fail("getfacl /dev/snd/timer | grep -q alice")
+ machine.succeed("chvt 2")
+ machine.wait_until_succeeds("getfacl /dev/snd/timer | grep -q alice")
+
+ with subtest("User can change their login shell"):
+ machine.send_chars("clear\n") # remove previous password prompts
+ machine.send_chars("chsh -s /run/current-system/sw/bin/fish\n")
+ machine.wait_until_tty_matches("2", "Password: ")
+ machine.send_chars("foobar\n")
+ machine.wait_until_fails("pgrep pwupdd")
+ login_shell = machine.succeed("getent passwd alice | cut -d: -f7").strip()
+ print(f"login shell of user alice: {login_shell}")
+ assert "/run/current-system/sw/bin/fish" == login_shell
+
+ with subtest("User can change their name"):
+ machine.send_chars("clear\n") # remove previous password prompts
+ machine.send_chars("chfn -f 'Alice in Wonderland'\n")
+ machine.wait_until_tty_matches("2", "Password: ")
+ machine.send_chars("foobar\n")
+ machine.wait_until_fails("pgrep pwupdd")
+ full_name = machine.succeed("getent passwd alice | cut -d: -f5").strip()
+ print(f"full name of user alice: {full_name}")
+ assert "Alice in Wonderland" == full_name
+
+ with subtest("Virtual console logout"):
+ machine.send_chars("exit\n")
+ machine.wait_until_fails("pgrep -u alice bash")
+ machine.screenshot("getty")
+ '';
+}
diff --git a/nixos/tests/lomiri.nix b/nixos/tests/lomiri.nix
index 5dc43286c0f3..61893abe91a1 100644
--- a/nixos/tests/lomiri.nix
+++ b/nixos/tests/lomiri.nix
@@ -669,7 +669,7 @@ in
# Doing this here, since we need an in-session shell & separately starting a terminal again wastes time
with subtest("polkit agent works"):
- machine.send_chars("pkexec touch /tmp/polkit-test\n")
+ machine.send_chars("run0 touch /tmp/polkit-test\n")
# There's an authentication notification here that gains focus, but we struggle with OCRing it
# Just hope that it's up after a short wait
machine.sleep(10)
diff --git a/nixos/tests/luks-suspend.nix b/nixos/tests/luks-suspend.nix
new file mode 100644
index 000000000000..d1aa4862a85e
--- /dev/null
+++ b/nixos/tests/luks-suspend.nix
@@ -0,0 +1,146 @@
+# Tests that `cryptsetup luksSuspend` successfully wipes the volume key from memory.
+{ pkgs, lib, ... }:
+
+let
+ # Fixed 64-byte volume key.
+ # Chosen by fair dice roll. Guaranteed to be random. :-)
+ # (tr -dc '0-9A-Za-z' ` captures all of guest RAM.
+ memorySizeMiB = 1024;
+
+ # A LUKS2 container with the known master key above.
+ luksImage =
+ pkgs.runCommand "luks-suspend-test-disk.img" { nativeBuildInputs = [ pkgs.cryptsetup ]; }
+ ''
+ truncate -s 64M $out
+
+ echo -n abc | cryptsetup luksFormat \
+ --batch-mode \
+ --uuid ${luksUUID} \
+ --pbkdf pbkdf2 --pbkdf-force-iterations 1000 \
+ --volume-key-file <(echo -n "${volumeKey}") \
+ $out
+ '';
+
+ commonMachine =
+ { pkgs, ... }:
+ {
+ environment.systemPackages = [ pkgs.cryptsetup ];
+ virtualisation.memorySize = memorySizeMiB;
+ virtualisation.qemu.drives = [
+ {
+ name = "luks";
+ file = "${luksImage}";
+ driveExtraOpts = {
+ format = "raw";
+ readonly = "on";
+ };
+ }
+ ];
+ };
+in
+{
+ name = "luks-suspend";
+ meta.maintainers = with lib.maintainers; [ iblech ];
+
+ nodes = {
+ # Variant 1: LUKS volume opened after boot via the cryptsetup CLI.
+ cli = commonMachine;
+
+ # Variant 2: LUKS volume opened during boot by systemd-cryptsetup,
+ # driven by the native NixOS LUKS module.
+ native =
+ { pkgs, lib, ... }:
+ {
+ imports = [ commonMachine ];
+ boot.initrd.systemd.enable = true;
+
+ # The test framework's qemu-vm module force-clears
+ # boot.initrd.luks.devices via mkVMOverride (priority 10) when
+ # virtualisation.useDefaultFilesystems is on (the default).
+ # Our setting should have priority.
+ boot.initrd.luks.devices = lib.mkOverride 5 {
+ foo = {
+ device = "/dev/disk/by-uuid/${luksUUID}";
+ keyFile = "/etc/luks-foo.key";
+ };
+ };
+
+ # Will produce (harmless) warnings about a world-readable keyFile.
+ boot.initrd.systemd.contents."/etc/luks-foo.key".source = pkgs.writeText "luks-foo-key" "abc";
+ };
+ };
+
+ testScript = ''
+ import mmap
+
+ MEM_BYTES = ${toString memorySizeMiB} * 1024 * 1024
+ VOLUME_KEY = b"${volumeKey}"
+ LUKS_DEV = "/dev/disk/by-uuid/${luksUUID}"
+
+ def count_occurrences(dump_path, needle):
+ count = 0
+ with open(dump_path, "rb") as f:
+ with mmap.mmap(f.fileno(), 0, prot=mmap.PROT_READ) as m:
+ i = m.find(needle)
+ while i != -1:
+ count += 1
+ i = m.find(needle, i + 1)
+ return count
+
+ def dump_and_count(machine, label):
+ path = machine.state_dir / f"ram-{machine.name}-{label}.raw"
+ reply = machine.send_monitor_command(f'pmemsave 0 {MEM_BYTES} "{path}"')
+ if not path.exists():
+ raise Exception(f"pmemsave wrote no dump; monitor replied: {reply!r}")
+ full = count_occurrences(path, VOLUME_KEY)
+ first = count_occurrences(path, VOLUME_KEY[:32])
+ second = count_occurrences(path, VOLUME_KEY[32:])
+ path.unlink()
+ print(
+ f"[{machine.name}/{label}] volume-key copies in RAM: "
+ f"full={full} first-half={first} second-half={second}"
+ )
+ return full, first, second
+
+ def check_suspend_wipes_key(machine):
+ # Precondition: `machine` reached multi-user.target with the LUKS
+ # volume open as /dev/mapper/foo.
+ machine.succeed("test -b /dev/mapper/foo")
+
+ # Give kernel-keyring garbage collection time to run.
+ machine.sleep(10)
+
+ before_full, before_first, before_second = dump_and_count(machine, "before-suspend")
+ assert (before_full, before_first, before_second) == (0, 1, 1), (
+ f"[{machine.name}] expected exactly one copy of the two parts of the volume key each "
+ f"while the volume is open, found {before_full} / {before_first} / {before_second}"
+ )
+
+ # Suspend the volume -- this must wipe the key from kernel memory.
+ machine.succeed("cryptsetup luksSuspend foo")
+
+ after_full, after_first, after_second = dump_and_count(machine, "after-suspend")
+ assert (after_full, after_first, after_second) == (0, 0, 0), (
+ f"[{machine.name}] volume key material still present in RAM after luksSuspend "
+ f"(full={after_full} first-half={after_first} second-half={after_second}) "
+ f"-- key-wipe bug is present"
+ )
+
+ # Variant 1
+ cli.start()
+ cli.wait_for_unit("multi-user.target")
+ cli.wait_for_file(LUKS_DEV)
+ cli.succeed(f"echo -n abc | cryptsetup luksOpen {LUKS_DEV} foo")
+ check_suspend_wipes_key(cli)
+
+ # Variant 2
+ native.start()
+ native.wait_for_unit("multi-user.target")
+ check_suspend_wipes_key(native)
+ '';
+}
diff --git a/nixos/tests/matrix/continuwuity.nix b/nixos/tests/matrix/continuwuity.nix
index cf07293b1ab0..80c46fb21362 100644
--- a/nixos/tests/matrix/continuwuity.nix
+++ b/nixos/tests/matrix/continuwuity.nix
@@ -20,61 +20,66 @@ in
};
networking.firewall.allowedTCPPorts = [ 6167 ];
};
+
client =
{ pkgs, ... }:
{
environment.systemPackages = [
- (pkgs.writers.writePython3Bin "do_test" { libraries = [ pkgs.python3Packages.matrix-nio ]; } ''
+ (pkgs.writers.writePython3Bin "do_test" { libraries = [ pkgs.python3Packages.mautrix ]; } ''
import asyncio
- import nio
+
+ from mautrix.client import Client
+ from mautrix.types import EventType, RoomFilter
async def main() -> None:
# Connect to continuwuity
- client = nio.AsyncClient("http://continuwuity:6167", "${user}")
+ client = Client(
+ mxid="@${user}:${name}",
+ base_url="http://continuwuity:6167",
+ )
# Log in as user alice
- response = await client.login("${pass}")
+ await client.login(password="${pass}")
# Create a new room
- response = await client.room_create(federate=False)
- print("Matrix room create response:", response)
- assert isinstance(response, nio.RoomCreateResponse)
- room_id = response.room_id
+ room_id = await client.create_room()
+ print("Created room:", room_id)
# Join the room
- response = await client.join(room_id)
- print("Matrix join response:", response)
- assert isinstance(response, nio.JoinResponse)
+ await client.join_room_by_id(room_id)
+ print("Joined room")
# Send a message to the room
- response = await client.room_send(
- room_id=room_id,
- message_type="m.room.message",
- content={
- "msgtype": "m.text",
- "body": "Hello continuwuity!"
- }
- )
- print("Matrix room send response:", response)
- assert isinstance(response, nio.RoomSendResponse)
+ received = asyncio.Event()
+ msg = "Hello continuwuity!"
- # Sync responses
- response = await client.sync(timeout=30000)
- print("Matrix sync response:", response)
- assert isinstance(response, nio.SyncResponse)
+ async def on_message(evt):
+ if (
+ evt.room_id != room_id
+ or evt.sender != client.mxid
+ or evt.type != EventType.ROOM_MESSAGE
+ ):
+ return
- # Check the message was received by continuwuity
- last_message = response.rooms.join[room_id].timeline.events[-1].body
- assert last_message == "Hello continuwuity!"
+ assert evt.content.body == msg
+ received.set()
+
+ client.add_event_handler(EventType.ROOM_MESSAGE, on_message)
+ sync_task = client.start(RoomFilter(rooms=[room_id]))
+
+ await client.send_text(room_id, msg)
+
+ # Sync until message is received
+ await asyncio.wait_for(received.wait(), timeout=30)
# Leave the room
- response = await client.room_leave(room_id)
- print("Matrix room leave response:", response)
- assert isinstance(response, nio.RoomLeaveResponse)
+ await client.leave_room(room_id)
+ print("Left room")
# Close the client
- await client.close()
+ client.stop()
+ await sync_task
if __name__ == "__main__":
@@ -96,6 +101,7 @@ in
'';
meta.maintainers = with lib.maintainers; [
+ bartoostveen
nyabinary
snaki
];
diff --git a/nixos/tests/matrix/matrix-authentication-service.nix b/nixos/tests/matrix/matrix-authentication-service.nix
new file mode 100644
index 000000000000..19900b5a9c18
--- /dev/null
+++ b/nixos/tests/matrix/matrix-authentication-service.nix
@@ -0,0 +1,438 @@
+{ pkgs, lib, ... }:
+let
+ mailerCerts = import ../common/acme/server/snakeoil-certs.nix;
+ ca_key = mailerCerts.ca.key;
+ ca_pem = mailerCerts.ca.cert;
+
+ mkBundle =
+ domain:
+ pkgs.runCommand "bundle-${domain}"
+ {
+ nativeBuildInputs = [ pkgs.minica ];
+ }
+ ''
+ minica -ca-cert ${ca_pem} -ca-key ${ca_key} \
+ -domains ${domain}
+ install -Dm444 -t $out ${domain}/{key,cert}.pem
+ '';
+
+ mkDexConfig =
+ domain: primaryIP:
+ let
+ bundle = mkBundle domain;
+ in
+ {
+ enable = true;
+ settings = {
+ issuer = "https://${dexDomain}:5556";
+ storage.type = "sqlite3";
+ web = {
+ https = "${primaryIP}:5556";
+ tlsCert = "${bundle}/cert.pem";
+ tlsKey = "${bundle}/key.pem";
+ };
+ oauth2.skipApprovalScreen = true;
+ connectors = [
+ {
+ type = "mockPassword";
+ id = "mock";
+ name = "Example";
+ config = {
+ username = "${testUser}";
+ password = "${testPassword}";
+ };
+ }
+ ];
+ };
+ };
+
+ testUser = "alice";
+ testPassword = "AliceSuperSecretPassword123!";
+
+ matrixSecret = "test_matrix_shared_secret_0123456789abcdef";
+
+ synapseDomain = "hs1.test";
+
+ masDomain = "mas1.test";
+ masULID = "01KVT6DSNT2MWD7WYMT2FY4SH5";
+
+ dexDomain = "dex1.test";
+ oidcClientID = "matrix-authentication-service";
+ oidcClientSecret = "lalalalalala";
+
+ loginCodeVerifier = "5kaYTTNVVehUrtJ8xi72ogdfwX8vxHMb3jEUBjyWcXQ";
+ loginCodeChallenge = "FbNLCROaJHe4LJQ7FEm7XjqDoWazb3emTE89x6Nx0Ng";
+in
+{
+
+ name = "matrix-authentication-service-upstream";
+ meta = {
+ teams = [ lib.teams.matrix ];
+ };
+
+ nodes = {
+ hs1 =
+ {
+ lib,
+ config,
+ pkgs,
+ nodes,
+ ...
+ }:
+ let
+ bundle = mkBundle synapseDomain;
+ in
+ {
+ networking = {
+ hostName = lib.head (lib.strings.splitString "." synapseDomain);
+ domain = lib.last (lib.strings.splitString "." synapseDomain);
+ firewall.allowedTCPPorts = [
+ 80
+ 443
+ 8448
+ ];
+ };
+
+ services.matrix-synapse = {
+ enable = true;
+ extras = [ "oidc" ];
+ settings = {
+ listeners = [
+ {
+ port = 8448;
+ bind_addresses = [
+ config.networking.primaryIPAddress
+ ];
+ type = "http";
+ tls = true;
+ x_forwarded = false;
+ resources = [
+ {
+ names = [
+ "client"
+ ];
+ compress = true;
+ }
+ {
+ names = [
+ "federation"
+ ];
+ compress = false;
+ }
+ ];
+ }
+ ];
+
+ database = {
+ name = "psycopg2";
+ args.password = "synapse";
+ };
+ redis = {
+ enabled = true;
+ host = "localhost";
+ port = config.services.redis.servers.matrix-synapse.port;
+ };
+ tls_certificate_path = "${bundle}/cert.pem";
+ tls_private_key_path = "${bundle}/key.pem";
+ public_baseurl = "https://${synapseDomain}:8448";
+
+ # Delegate authentication to MAS
+ matrix_authentication_service = {
+ enabled = true;
+ endpoint = "https://${masDomain}:8080";
+ force_http2 = true;
+ secret = matrixSecret;
+ };
+ };
+ };
+ services.postgresql = {
+ enable = true;
+ authentication = pkgs.lib.mkOverride 10 ''
+ local all all trust
+ host all all 127.0.0.1/32 trust
+ host all all ::1/128 trust
+ '';
+
+ # The database name and user are configured by the following options:
+ # - services.matrix-synapse.database_name
+ # - services.matrix-synapse.database_user
+ #
+ # The values used here represent the default values of the module.
+ initialScript = pkgs.writeText "synapse-init.sql" ''
+ CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse';
+ CREATE DATABASE "matrix-synapse" WITH OWNER "matrix-synapse"
+ TEMPLATE template0
+ LC_COLLATE = "C"
+ LC_CTYPE = "C";
+ '';
+ };
+ services.redis.servers.matrix-synapse = {
+ enable = true;
+ port = 6379;
+ };
+ security.pki.certificateFiles = [
+ ca_pem
+ ];
+ networking.extraHosts = ''
+ ${nodes.mas1.networking.primaryIPAddress} ${masDomain}
+ ${nodes.dex1.networking.primaryIPAddress} ${dexDomain}
+ ${nodes.hs1.networking.primaryIPAddress} ${synapseDomain}
+ '';
+
+ environment.systemPackages = [
+ pkgs.matrix-synapse
+ pkgs.matrix-authentication-service
+ ];
+ };
+
+ mas1 =
+ { nodes, ... }:
+ let
+ bundle = mkBundle masDomain;
+
+ extraConfig = pkgs.writeText "masExtraConfig.yml" (
+ builtins.toJSON {
+ secrets = {
+ encryption_file = "/var/lib/matrix-authentication-service/encryption";
+ keys = [
+ {
+ kid = "rsa-4096";
+ key_file = "/var/lib/matrix-authentication-service/key_rsa_4096";
+ }
+ ];
+ };
+ }
+ );
+ in
+ {
+ services.matrix-authentication-service = {
+ enable = true;
+ createDatabase = true;
+ extraConfigFiles = [ (toString extraConfig) ];
+ settings = {
+ http = {
+ public_base = "https://${masDomain}:8080/";
+ tls = {
+ certificate_file = "${bundle}/cert.pem";
+ key_file = "${bundle}/key.pem";
+ };
+ listeners = [
+ {
+ name = "web";
+ binds = [ { address = "0.0.0.0:8080"; } ];
+ resources = [
+ { name = "discovery"; }
+ { name = "human"; }
+ { name = "oauth"; }
+ ];
+ tls = {
+ certificate_file = "${bundle}/cert.pem";
+ key_file = "${bundle}/key.pem";
+ };
+ }
+ ];
+ };
+ matrix = {
+ homeserver = "hs1";
+ endpoint = "https://${synapseDomain}:8448/";
+ secret_file = "/var/lib/matrix-authentication-service/matrix_secret";
+ };
+ database.uri = "postgresql:///matrix-authentication-service?host=/run/postgresql&user=matrix-authentication-service";
+ # secrets is defined in extraConfigFiles
+ policy.data.client_registration.allow_insecure_uris = true;
+ upstream_oauth2.providers = [
+ {
+ id = masULID;
+ client_id = oidcClientID;
+ client_secret_file = "\${CREDENTIALS_DIRECTORY}/oidc_client_secret";
+ issuer = "https://${dexDomain}:5556";
+ scope = "openid email profile";
+ token_endpoint_auth_method = "client_secret_post";
+ }
+ ];
+ };
+ credentials.oidc_client_secret = "${pkgs.writeText "oidc-client-secret" oidcClientSecret}";
+ };
+ services.postgresql.authentication = pkgs.lib.mkOverride 10 ''
+ local all all trust
+ host all all 127.0.0.1/32 trust
+ host all all ::1/128 trust
+ '';
+ systemd.services.matrix-authentication-service.preStart = ''
+ echo -n '${matrixSecret}' > /var/lib/matrix-authentication-service/matrix_secret
+ echo -n '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' > /var/lib/matrix-authentication-service/encryption
+ ${pkgs.openssl}/bin/openssl genrsa -out /var/lib/matrix-authentication-service/key_rsa_4096 4096
+ '';
+ security.pki.certificateFiles = [ ca_pem ];
+ networking.extraHosts = ''
+ ${nodes.hs1.networking.primaryIPAddress} ${synapseDomain}
+ ${nodes.dex1.networking.primaryIPAddress} ${dexDomain}
+ '';
+ networking.firewall.allowedTCPPorts = [
+ 8080
+ 8081
+ ];
+ };
+
+ dex1 =
+ {
+ lib,
+ config,
+ nodes,
+ ...
+ }:
+ {
+ services.dex = lib.mkMerge [
+ (mkDexConfig dexDomain config.networking.primaryIPAddress)
+ {
+ settings.staticClients = [
+ {
+ id = oidcClientID;
+ name = "Matrix";
+ redirectURIs = [ "https://${masDomain}:8080/upstream/callback/${masULID}" ];
+ secret = oidcClientSecret;
+ }
+ ];
+ }
+ ];
+ security.pki.certificateFiles = [ ca_pem ];
+ networking.extraHosts = ''
+ ${nodes.hs1.networking.primaryIPAddress} ${synapseDomain}
+ ${nodes.mas1.networking.primaryIPAddress} ${masDomain}
+ ${nodes.dex1.networking.primaryIPAddress} ${dexDomain}
+ '';
+ networking.firewall.allowedTCPPorts = [ 5556 ];
+ };
+ };
+
+ testScript = ''
+ import json
+ import re
+
+
+ COOKIES = "-c /tmp/cookies.txt -b /tmp/cookies.txt"
+
+
+ def visit(url, *opts):
+ """Follow the whole redirect chain from `url`; return `effective_url` and response body."""
+ out = dex1.succeed(
+ f"curl -sL {COOKIES} {' '.join(opts)} -w '\\n%{{url_effective}}' '{url.strip()}'"
+ )
+ body, _, effective = out.rpartition("\n")
+ return effective.strip(), body
+
+
+ def location(url, *opts):
+ """Request `url` and return where it redirects, but don't follow it.
+
+ Used for the OAuth callback, which points at http://localhost:1234 where
+ nothing is listening, so `curl --location` would ultimately fail.
+ """
+ return dex1.succeed(
+ f"curl -s {COOKIES} -w '%{{redirect_url}}' -o /dev/null "
+ f"{' '.join(opts)} '{url.strip()}'"
+ ).strip()
+
+
+ def extract_csrf(html):
+ match = re.search(r'name="csrf" value="([^"]+)"', html)
+ assert match is not None, f"unable to find csrf token in {html}"
+ return match.group(1)
+
+
+ def authorize():
+ """Start the OIDC flow and return the first redirect URL."""
+ return dex1.succeed(
+ "scope='openid urn:matrix:org.matrix.msc2967.client:api:*'; "
+ "curl -fs -G -w '%{redirect_url}' -o /dev/null https://${masDomain}:8080/authorize "
+ f"-d response_type=code -d client_id={client_id} "
+ "-d redirect_uri=http://localhost:1234/callback "
+ '--data-urlencode "scope=$scope" '
+ "-d state=somestate -d code_challenge=${loginCodeChallenge} "
+ "-d code_challenge_method=S256"
+ )
+
+
+ start_all()
+
+ # wait locally until units are ready
+ dex1.wait_for_unit("dex.service")
+ hs1.wait_for_unit("matrix-synapse.service")
+ mas1.wait_for_unit("matrix-authentication-service.service")
+ hs1.wait_until_succeeds("curl --fail -s --cacert ${ca_pem} https://${synapseDomain}:8448/")
+ hs1.wait_until_succeeds("journalctl -u matrix-synapse.service | grep -q 'Connected to redis'")
+ hs1.require_unit_state("postgresql.target")
+ mas1.wait_for_open_port(8080)
+
+ # cross-node reachability
+ mas1.wait_until_succeeds("curl --fail --silent --show-error --cacert ${ca_pem} https://${dexDomain}:5556/.well-known/openid-configuration")
+ mas1.wait_until_succeeds("curl --fail --silent --show-error --cacert ${ca_pem} https://${synapseDomain}:8448/")
+ hs1.wait_until_succeeds("curl --fail --silent --show-error https://${masDomain}:8080/.well-known/openid-configuration")
+
+ # Register a fresh OAuth client and grab its client_id
+ client_id_resp = json.loads(dex1.succeed(
+ "curl -s -X POST https://${masDomain}:8080/oauth2/registration "
+ "-H 'Content-Type: application/json' "
+ "-d '{ \"client_name\": \"test_client\", \"client_uri\": \"http://localhost:1234/\", \"redirect_uris\": [\"http://localhost:1234/callback\"], \"response_types\": [\"code\"], \"grant_types\": [ \"authorization_code\" ], \"token_endpoint_auth_method\": \"none\" }'"
+ ))
+ t.assertIn("client_id", client_id_resp)
+ client_id = client_id_resp["client_id"]
+
+ with subtest("Register"):
+ location(authorize()) # follow /authorize to put the session cookie in the jar.
+
+ # To login with Upstream (Dex) the page returns a clickable link; we hardcode
+ # it here since we already know its shape.
+ upstream_url = f"https://${masDomain}:8080/upstream/authorize/${masULID}?id={client_id}&kind=continue_authorization_grant"
+ _, mock_body = visit(upstream_url)
+ _match = re.search(r'state=([^"&]+)', mock_body)
+ assert _match is not None, f"unable to find state in {mock_body}"
+ oidc_state = _match.group(1)
+
+ next_url, body = visit(
+ f"https://${dexDomain}:5556/auth/mock/login?back=&state={oidc_state}",
+ "-d 'login=${testUser}'",
+ "-d 'password=${testPassword}'",
+ )
+ next_url, body = visit(next_url, f"-d 'csrf={extract_csrf(body)}&action=register&username=${testUser}'")
+ visit(next_url, f"-d 'csrf={extract_csrf(body)}&action=set&display_name=Alice'")
+
+ with subtest("Login"):
+ consent_url, body = visit(authorize())
+
+ # Alice already has a session cookie, so /consent redirects straight to the callback.
+ callback_url = location(consent_url, f"-d 'csrf={extract_csrf(body)}&action=consent'")
+ _match = re.search(r'code=([^&]+)', callback_url)
+ assert _match is not None, f"unable to find code in {callback_url}"
+ code = _match.group(1)
+
+ access_token_resp = json.loads(dex1.succeed(
+ "curl -s -X POST https://${masDomain}:8080/oauth2/token "
+ "-d 'grant_type=authorization_code' "
+ f"-d 'client_id={client_id}' -d 'code={code}' "
+ "-d 'redirect_uri=http://localhost:1234/callback' "
+ "-d 'code_verifier=${loginCodeVerifier}'"
+ ))
+ t.assertIn("access_token", access_token_resp)
+ access_token = access_token_resp["access_token"]
+
+ with subtest("Create Room"):
+ room_id_resp = json.loads(dex1.succeed(
+ "curl --fail -s -X POST https://${synapseDomain}:8448/_matrix/client/v3/createRoom "
+ "-H 'Content-Type: application/json' "
+ f"-H 'Authorization: Bearer {access_token}' "
+ "-d '{}'"
+ ))
+ t.assertIn("room_id", room_id_resp)
+ room_id = room_id_resp["room_id"]
+
+ with subtest("Send Message"):
+ dex1.succeed(
+ "curl -fs -X POST "
+ f"https://${synapseDomain}:8448/_matrix/client/v3/rooms/{room_id}/send/m.room.message "
+ f"-H 'Authorization: Bearer {access_token}' "
+ "-H 'Content-Type: application/json' "
+ "-d '{\"msgtype\":\"m.text\",\"body\":\"hello from alice\"}' | grep event_id"
+ )
+ '';
+}
diff --git a/nixos/tests/matrix/pantalaimon.nix b/nixos/tests/matrix/pantalaimon.nix
index fdf2c4de7ad3..aac75ab28c9d 100644
--- a/nixos/tests/matrix/pantalaimon.nix
+++ b/nixos/tests/matrix/pantalaimon.nix
@@ -31,9 +31,6 @@ let
in
{
name = "pantalaimon";
- meta = {
- maintainers = pkgs.lib.teams.matrix.members;
- };
nodes.machine =
{ pkgs, ... }:
diff --git a/nixos/tests/matrix/synapse-workers.nix b/nixos/tests/matrix/synapse-workers.nix
deleted file mode 100644
index 949658caac47..000000000000
--- a/nixos/tests/matrix/synapse-workers.nix
+++ /dev/null
@@ -1,53 +0,0 @@
-{ pkgs, ... }:
-{
- name = "matrix-synapse-workers";
- meta = {
- inherit (pkgs.matrix-synapse.meta) maintainers;
- };
-
- nodes = {
- homeserver =
- {
- pkgs,
- nodes,
- ...
- }:
- {
- services.postgresql = {
- enable = true;
- initialScript = pkgs.writeText "synapse-init.sql" ''
- CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse';
- CREATE DATABASE "matrix-synapse" WITH OWNER "matrix-synapse"
- TEMPLATE template0
- LC_COLLATE = "C"
- LC_CTYPE = "C";
- '';
- };
-
- services.matrix-synapse = {
- enable = true;
- settings = {
- database = {
- name = "psycopg2";
- args.password = "synapse";
- };
- enable_registration = true;
- enable_registration_without_verification = true;
-
- federation_sender_instances = [ "federation_sender" ];
- };
- configureRedisLocally = true;
- workers = {
- "federation_sender" = { };
- };
- };
- };
- };
-
- testScript = ''
- start_all()
-
- homeserver.wait_for_unit("matrix-synapse.service");
- homeserver.wait_for_unit("matrix-synapse-worker-federation_sender.service");
- '';
-}
diff --git a/nixos/tests/matrix/synapse.nix b/nixos/tests/matrix/synapse.nix
index 7827705ffe21..961c0506ed9d 100644
--- a/nixos/tests/matrix/synapse.nix
+++ b/nixos/tests/matrix/synapse.nix
@@ -1,101 +1,194 @@
{ pkgs, ... }:
let
-
ca_key = mailerCerts.ca.key;
ca_pem = mailerCerts.ca.cert;
- bundle =
- pkgs.runCommand "bundle"
+ aliceName = "alice";
+ alicePassword = "alicealice";
+ aliceEmail = "alice@example.com";
+
+ bobName = "bob";
+ bobPassword = "hunter2";
+
+ mkBundle =
+ domain:
+ pkgs.runCommand "bundle-${domain}"
{
nativeBuildInputs = [ pkgs.minica ];
}
''
minica -ca-cert ${ca_pem} -ca-key ${ca_key} \
- -domains localhost
- install -Dm444 -t $out localhost/{key,cert}.pem
+ -domains ${domain}
+ install -Dm444 -t $out ${domain}/{key,cert}.pem
'';
mailerCerts = import ../common/acme/server/snakeoil-certs.nix;
mailerDomain = mailerCerts.domain;
registrationSharedSecret = "unsecure123";
- testUser = "alice";
- testPassword = "alicealice";
- testEmail = "alice@example.com";
- listeners = [
+ anonHash = "hunter2hunter2hunter2";
+ anonHashF = pkgs.writeText "hash" anonHash;
+
+ mkHomeserverBase =
+ domain: nodes:
+ let
+ bundle = mkBundle domain;
+ in
+ { lib, ... }:
{
- port = 8448;
- bind_addresses = [
- "127.0.0.1"
- "::1"
+ security.pki.certificateFiles = [
+ mailerCerts.ca.cert
];
- type = "http";
- tls = true;
- x_forwarded = false;
- resources = [
- {
- names = [
- "client"
- ];
- compress = true;
- }
- {
- names = [
- "federation"
- ];
- compress = false;
- }
- ];
- }
- ];
+ networking = {
+ hostName = lib.head (lib.strings.splitString "." domain);
+ domain = lib.last (lib.strings.splitString "." domain);
+ firewall.allowedTCPPorts = [
+ 80
+ 443
+ 8448
+ ];
+ };
+
+ services.nginx = {
+ enable = true;
+ virtualHosts."${domain}" = {
+ sslCertificate = "${bundle}/cert.pem";
+ sslCertificateKey = "${bundle}/key.pem";
+ addSSL = true;
+ locations."/.well-known/matrix/server".extraConfig = ''
+ default_type application/json;
+ return 200 '${
+ builtins.toJSON {
+ "m.server" = "${domain}:8448";
+ }
+ }';
+ '';
+ };
+ };
+ };
+
+ mkSynapseConfig =
+ domain: primaryIP:
+ let
+ bundle = mkBundle domain;
+ in
+ {
+ enable = true;
+ settings = {
+ # We're in a test environment with local machines, so
+ # we actually _want_ to use RFC1918 addresses.
+ ip_range_blacklist = [ ];
+
+ trusted_key_servers = [
+ { server_name = "hs1.test"; }
+ { server_name = "hs2.test"; }
+ ];
+
+ registration_shared_secret = registrationSharedSecret;
+ public_baseurl = "https://${domain}";
+ tls_certificate_path = "${bundle}/cert.pem";
+ tls_private_key_path = "${bundle}/key.pem";
+ listeners = [
+ # Using a local listener, otherwise matrix-synapse-register_new_matrix_user will
+ # fail because it'll try to connect to the first bind address, but via TLS resulting
+ # in a signature verification failure.
+ {
+ port = 8008;
+ type = "http";
+ tls = false;
+ resources = [
+ {
+ names = [ "client" ];
+ compress = true;
+ }
+ ];
+ bind_addresses = [ "::1" ];
+ }
+ {
+ port = 8448;
+ bind_addresses = [
+ primaryIP
+ ];
+ type = "http";
+ tls = true;
+ x_forwarded = false;
+ resources = [
+ {
+ names = [
+ "client"
+ ];
+ compress = true;
+ }
+ {
+ names = [
+ "federation"
+ ];
+ compress = false;
+ }
+ ];
+ }
+ ];
+ };
+ };
in
{
-
name = "matrix-synapse";
meta = {
inherit (pkgs.matrix-synapse.meta) maintainers;
};
nodes = {
- # Since 0.33.0, matrix-synapse doesn't allow underscores in server names
- serverpostgres =
+ synapse-with-workers =
{
+ lib,
+ config,
pkgs,
nodes,
- config,
...
}:
- let
- mailserverIP = nodes.mailserver.networking.primaryIPAddress;
- in
{
- services.matrix-synapse = {
- enable = true;
- settings = {
- inherit listeners;
- database = {
- name = "psycopg2";
- args.password = "synapse";
+ imports = [
+ (mkHomeserverBase "hs1.test" nodes)
+ ];
+
+ services.matrix-synapse = lib.mkMerge [
+ (mkSynapseConfig "hs1.test" config.networking.primaryIPAddress)
+ {
+ settings = {
+ server_name = "hs1.test";
+ email = {
+ smtp_host = mailerDomain;
+ smtp_port = 25;
+ require_transport_security = true;
+ notif_from = "matrix ";
+ app_name = "Matrix";
+ };
+ listeners = [
+ {
+ path = "/run/matrix-synapse/main_replication.sock";
+ type = "http";
+ resources = [
+ {
+ names = [ "replication" ];
+ compress = false;
+ }
+ ];
+ }
+ ];
+ database = {
+ name = "psycopg2";
+ args.password = "synapse";
+ };
+ federation_sender_instances = [ "federation_sender" ];
};
- redis = {
- enabled = true;
- host = "localhost";
- port = config.services.redis.servers.matrix-synapse.port;
+ configureRedisLocally = true;
+ workers = {
+ "federation_sender" = { };
};
- tls_certificate_path = "${bundle}/cert.pem";
- tls_private_key_path = "${bundle}/key.pem";
- registration_shared_secret = registrationSharedSecret;
- public_baseurl = "https://example.com";
- email = {
- smtp_host = mailerDomain;
- smtp_port = 25;
- require_transport_security = true;
- notif_from = "matrix ";
- app_name = "Matrix";
- };
- };
- };
+ }
+ ];
+
services.postgresql = {
enable = true;
@@ -113,20 +206,6 @@ in
'';
};
- services.redis.servers.matrix-synapse = {
- enable = true;
- port = 6380;
- };
-
- networking.extraHosts = ''
- ${mailserverIP} ${mailerDomain}
- '';
-
- security.pki.certificateFiles = [
- mailerCerts.ca.cert
- ca_pem
- ];
-
environment.systemPackages =
let
sendTestMailStarttls = pkgs.writeScriptBin "send-testmail-starttls" ''
@@ -140,7 +219,7 @@ in
smtp.ehlo()
smtp.starttls(context=ctx)
smtp.ehlo()
- smtp.sendmail('matrix@${mailerDomain}', '${testEmail}', 'Subject: Test STARTTLS\n\nTest data.')
+ smtp.sendmail('matrix@${mailerDomain}', '${aliceEmail}', 'Subject: Test STARTTLS\n\nTest data.')
smtp.quit()
'';
@@ -149,16 +228,14 @@ in
# adding the email through the API is quite complicated as it involves more than one step and some
# client-side calculation
insertEmailForAlice = pkgs.writeText "alice-email.sql" ''
- INSERT INTO user_threepids (user_id, medium, address, validated_at, added_at) VALUES ('${testUser}@serverpostgres', 'email', '${testEmail}', '1629149927271', '1629149927270');
+ INSERT INTO user_threepids (user_id, medium, address, validated_at, added_at) VALUES ('${aliceName}@serverpostgres', 'email', '${aliceEmail}', '1629149927271', '1629149927270');
'';
in
pkgs.writeScriptBin "obtain-token-and-register-email" ''
#!${pkgs.runtimeShell}
- set -o errexit
- set -o pipefail
- set -o nounset
+ set -euxo pipefail
su postgres -c "psql -d matrix-synapse -f ${insertEmailForAlice}"
- curl --fail -XPOST 'https://localhost:8448/_matrix/client/r0/account/password/email/requestToken' -d '{"email":"${testEmail}","client_secret":"foobar","send_attempt":1}' -v
+ curl --fail -XPOST 'https://hs1.test:8448/_matrix/client/r0/account/password/email/requestToken' -d '{"email":"${aliceEmail}","client_secret":"foobar","send_attempt":1}' -v
'';
in
[
@@ -168,74 +245,189 @@ in
];
};
- # test mail delivery
- mailserver = args: {
- security.pki.certificateFiles = [
- mailerCerts.ca.cert
- ];
+ mailserver =
+ { lib, ... }:
+ {
+ security.pki.certificateFiles = [
+ mailerCerts.ca.cert
+ ];
- networking.firewall.enable = false;
+ networking = {
+ hostName = lib.head (lib.strings.splitString "." mailerDomain);
+ domain = lib.last (lib.strings.splitString "." mailerDomain);
+ firewall.enable = false;
+ };
- services.postfix = {
- enable = true;
- enableSubmission = true;
+ services.postfix = {
+ enable = true;
+ enableSubmission = true;
- # blackhole transport
- transport = "example.com discard:silently";
+ # blackhole transport
+ transport = "example.com discard:silently";
- settings.main = {
- myhostname = "${mailerDomain}";
- # open relay for subnet
- mynetworks_style = "subnet";
- debug_peer_level = "10";
- smtpd_relay_restrictions = [
- "permit_mynetworks"
- "reject_unauth_destination"
- ];
+ settings.main = {
+ myhostname = "${mailerDomain}";
+ # open relay for subnet
+ mynetworks_style = "subnet";
+ debug_peer_level = "10";
+ smtpd_relay_restrictions = [
+ "permit_mynetworks"
+ "reject_unauth_destination"
+ ];
- # disable obsolete protocols, something old versions of twisted are still using
- smtpd_tls_protocols = "TLSv1.3, TLSv1.2, !TLSv1.1, !TLSv1, !SSLv2, !SSLv3";
- smtpd_tls_mandatory_protocols = "TLSv1.3, TLSv1.2, !TLSv1.1, !TLSv1, !SSLv2, !SSLv3";
- smtpd_tls_chain_files = [
- "${mailerCerts.${mailerDomain}.key}"
- "${mailerCerts.${mailerDomain}.cert}"
- ];
+ # disable obsolete protocols, something old versions of twisted are still using
+ smtpd_tls_protocols = "TLSv1.3, TLSv1.2, !TLSv1.1, !TLSv1, !SSLv2, !SSLv3";
+ smtpd_tls_mandatory_protocols = "TLSv1.3, TLSv1.2, !TLSv1.1, !TLSv1, !SSLv2, !SSLv3";
+ smtpd_tls_chain_files = [
+ "${mailerCerts.${mailerDomain}.key}"
+ "${mailerCerts.${mailerDomain}.cert}"
+ ];
+ };
};
};
- };
- serversqlite = args: {
- services.matrix-synapse = {
- enable = true;
- settings = {
- inherit listeners;
- database.name = "sqlite3";
- tls_certificate_path = "${bundle}/cert.pem";
- tls_private_key_path = "${bundle}/key.pem";
+ synapse-minimal =
+ {
+ nodes,
+ config,
+ lib,
+ ...
+ }:
+ {
+ imports = [
+ (mkHomeserverBase "hs2.test" nodes)
+ ];
+
+ services.matrix-synapse = lib.mkMerge [
+ (mkSynapseConfig "hs2.test" config.networking.primaryIPAddress)
+ {
+ settings = {
+ database.name = "sqlite3";
+ server_name = "hs2.test";
+ };
+ }
+ ];
+ };
+
+ client =
+ { pkgs, ... }:
+ {
+ environment.systemPackages = [
+ # `pkgs.olm` is cached on c.n.o, even if this test isn't built due
+ # to it being allow-listed in `pkgs/top-level/release.nix`.
+ (import pkgs.path {
+ config = pkgs.config // {
+ permittedInsecurePackages = [ "olm-3.2.16" ];
+ };
+ }).matrix-commander
+ pkgs.jq
+ ];
+
+ security.pki.certificateFiles = [ mailerCerts.ca.cert ];
+
+ users.users = {
+ alice.isNormalUser = true;
+ bob.isNormalUser = true;
+ };
+
+ networking.useNetworkd = true;
+ services.rust-federation-tester = {
+ enable = true;
+ settings = {
+ listen_addr = "unix:/run/rust-federation-tester/rust-federation-tester.sock";
+ frontend_url = "http://localhost:8080";
+ database_url = "sqlite:///var/lib/rust-federation-tester/db?mode=rwc";
+ magic_token_secret = "foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar";
+ statistics = {
+ enabled = true;
+ prometheus_enabled = true;
+ anonymization_salt._secret = "${anonHashF}";
+ raw_retention_days = 30;
+ };
+ };
};
};
- };
};
testScript = ''
+ import json
+ from pprint import pprint
+
start_all()
- mailserver.wait_for_unit("postfix.service")
- serverpostgres.succeed("send-testmail-starttls")
- serverpostgres.wait_for_unit("matrix-synapse.service")
- serverpostgres.wait_until_succeeds(
- "curl --fail -L --cacert ${ca_pem} https://localhost:8448/"
- )
- serverpostgres.wait_until_succeeds(
+
+ synapse_with_workers.wait_for_unit("multi-user.target")
+ synapse_minimal.wait_for_unit("multi-user.target")
+ mailserver.wait_for_unit("multi-user.target")
+
+ synapse_with_workers.wait_until_succeeds(
"journalctl -u matrix-synapse.service | grep -q 'Connected to redis'"
)
- serverpostgres.require_unit_state("postgresql.target")
- serverpostgres.succeed("REQUESTS_CA_BUNDLE=${ca_pem} register_new_matrix_user -u ${testUser} -p ${testPassword} -a -k ${registrationSharedSecret} https://localhost:8448/")
- serverpostgres.succeed("obtain-token-and-register-email")
- serversqlite.wait_for_unit("matrix-synapse.service")
- serversqlite.wait_until_succeeds(
- "curl --fail -L --cacert ${ca_pem} https://localhost:8448/"
- )
- serversqlite.succeed("[ -e /var/lib/matrix-synapse/homeserver.db ]")
- '';
+ synapse_with_workers.wait_for_unit("matrix-synapse-worker-federation_sender.service");
+ with subtest("register user with email confirmation"):
+ synapse_with_workers.succeed("send-testmail-starttls")
+ synapse_with_workers.succeed("REQUESTS_CA_BUNDLE=${mailerCerts.ca.cert} register_new_matrix_user -u ${aliceName} -p ${alicePassword} -a -k ${registrationSharedSecret} https://hs1.test:8448/")
+ synapse_with_workers.succeed("obtain-token-and-register-email")
+
+ with subtest("matrix-synapse-register_new_matrix_user"):
+ synapse_minimal.succeed("matrix-synapse-register_new_matrix_user -u ${bobName} -p ${bobPassword} --no-admin")
+ synapse_minimal.succeed("[ -e /var/lib/matrix-synapse/homeserver.db ]")
+
+ with subtest("Federation tester"):
+ expected_anonymization_hashes = {
+ "hs1.test": "0558582846d6e2d90612900d449871dfcbf9878ba78de4a8469d8aba2d9c037b",
+ "hs2.test": "d3d88c2033c03b74ec1e086e15c0251514de060de5e51cb381e896f892a5b0cd",
+ }
+
+ # /metrics are cached for up to 30 seconds
+ for n, domain in enumerate(["hs2.test", "hs1.test"], start=3):
+ result = json.loads(
+ client.succeed(
+ f"curl --fail --unix-socket /run/rust-federation-tester/rust-federation-tester.sock 'http://localhost:8080/api/federation/report?server_name={domain}&stats_opt_in=true'"
+ )
+ )
+ pprint(result)
+ t.assertTrue(result["FederationOK"])
+ t.assertTrue(result["ConnectionReports"][f"192.168.1.{n}:8448"]["Checks"]["AllChecksOK"])
+ t.assertEqual(f"{domain}:8448", result["WellKnownResult"][f"192.168.1.{n}:443"]["m.server"])
+
+ client.sleep(30)
+ # /metrics are cached for up to 30 seconds
+ for domain in ["hs2.test", "hs1.test"]:
+ metrics = client.succeed("curl --unix-socket /run/rust-federation-tester/rust-federation-tester.sock http://localhost:8080/metrics --fail")
+ t.assertRegex(
+ metrics,
+ f'federation_request_total\\{{server=\\"{expected_anonymization_hashes[domain]}\\",result=\\"success\\",[^}}]+\\}} 1'
+ )
+
+ def run_as_alice(cmd):
+ return client.succeed(f"sudo -u alice matrix-commander -c /home/alice/credentials.json -s /home/alice/matrix {cmd}")
+
+ def run_as_bob(cmd):
+ return client.succeed(f"sudo -u bob matrix-commander -c /home/bob/credentials.json -s /home/bob/matrix {cmd}")
+
+ with subtest("Login"):
+ run_as_alice("--login password --homeserver https://hs1.test:8448 --user-login @${aliceName}:hs1.test --password ${alicePassword} --device commander --room-default '#welcome:hs1.test'")
+ run_as_bob("--login password --homeserver https://hs2.test:8448 --user-login @${bobName}:hs2.test --password ${bobPassword} --device commander --room-default '#welcome:hs1.test'")
+
+ with subtest("Create/Invite/Join"):
+ run_as_alice("--room-create '#welcome:hs1.test'")
+
+ run_as_alice("--room-invite '#welcome:hs1.test' -u @${bobName}:hs2.test")
+ run_as_bob("--listen once --room-invites 'list+join'")
+
+ with subtest("Send/receive messages"):
+ senders = {
+ "alice": ("hs1", run_as_alice),
+ "bob": ("hs2", run_as_bob),
+ }
+
+ for name, (hs, fn) in senders.items():
+ fn(f"-m 'hello, I am {name}'")
+ for _, run in senders.values():
+ msg_data = json.loads(run("--listen once --listen-self --output json"))
+ pprint(msg_data)
+ t.assertEqual(msg_data["source"]["content"]["body"], f"hello, I am {name}")
+ t.assertEqual(msg_data["source"]["sender"], f"@{name}:{hs}.test")
+ '';
}
diff --git a/nixos/tests/matter-server.nix b/nixos/tests/matter-server.nix
index 5aeffaa97b42..ca4d55a161ce 100644
--- a/nixos/tests/matter-server.nix
+++ b/nixos/tests/matter-server.nix
@@ -1,7 +1,7 @@
{ pkgs, lib, ... }:
let
- chipVersion = pkgs.python311Packages.home-assistant-chip-core.version;
+ chipVersion = pkgs.python3Packages.home-assistant-chip-core.version;
in
{
diff --git a/nixos/tests/mattermost/default.nix b/nixos/tests/mattermost/default.nix
index 075781583c00..1fd46f19abfa 100644
--- a/nixos/tests/mattermost/default.nix
+++ b/nixos/tests/mattermost/default.nix
@@ -66,12 +66,7 @@ import ../make-test-python.nix (
# Upgrade to the latest Mattermost.
specialisation.latest.configuration = {
- services.mattermost.package = lib.mkForce (
- pkgs.mattermostLatest.override {
- removeFreeBadge = true;
- removeUserLimit = true;
- }
- );
+ services.mattermost.package = lib.mkForce pkgs.mattermostLatest;
system.stateVersion = lib.mkVMOverride (lib.versions.majorMinor lib.version);
};
}
diff --git a/nixos/tests/monado.nix b/nixos/tests/monado.nix
index 609b0fa647e5..ab73471215b1 100644
--- a/nixos/tests/monado.nix
+++ b/nixos/tests/monado.nix
@@ -3,47 +3,57 @@
name = "monado";
nodes.machine =
- { pkgs, ... }:
+ {
+ lib,
+ pkgs,
+ config,
+ ...
+ }:
{
- hardware.graphics.enable = true;
- users.users.alice = {
- isNormalUser = true;
- uid = 1000;
+ imports = [ ./common/openxr.nix ];
+
+ systemd.user.services.print-openxr-info = {
+ wantedBy = [ "xdg-desktop-autostart.target" ];
+ requires = [ "monado.service" ];
+ script = lib.getExe' pkgs.openxr-loader "openxr_runtime_list";
+ serviceConfig = {
+ Type = "oneshot";
+ RemainAfterExit = true;
+ };
};
- services.monado = {
- enable = true;
- defaultRuntime = true;
-
- forceDefaultRuntime = true;
+ systemd.user.services.xrgears = {
+ wantedBy = [ "xdg-desktop-autostart.target" ];
+ requires = [ "monado.service" ];
+ script = lib.getExe pkgs.xrgears;
};
- # Stop Monado from probing for any hardware
- systemd.user.services.monado.environment.SIMULATED_ENABLE = "1";
-
- environment.systemPackages = with pkgs; [ openxr-loader ];
};
testScript =
{ nodes, ... }:
- let
- userId = toString nodes.machine.users.users.alice.uid;
- runtimePath = "/run/user/${userId}";
- in
''
- # for defaultRuntime
- machine.succeed("stat /etc/xdg/openxr/1/active_runtime.json")
+ with subtest("Ensure X11 starts"):
+ start_all()
+ machine.succeed("loginctl enable-linger alice")
+ machine.wait_for_x()
- machine.succeed("loginctl enable-linger alice")
- machine.wait_for_unit("user@${userId}.service")
+ with subtest("Ensure default runtime present"):
+ machine.succeed("stat /etc/xdg/openxr/1/active_runtime.json")
- machine.wait_for_unit("monado.socket", "alice")
- machine.systemctl("start monado.service", "alice")
- machine.wait_for_unit("monado.service", "alice")
+ with subtest("Ensure forced runtime present"):
+ # Monado needs to be started to create the forced runtime file
+ machine.systemctl("start monado.service", "alice")
+ machine.wait_for_unit("monado.service", "alice")
+ machine.succeed("stat /home/alice/.config/openxr/1/active_runtime.json")
- # for forceDefaultRuntime
- machine.succeed("stat /home/alice/.config/openxr/1/active_runtime.json")
+ with subtest("Ensure openxr_runtime_list can find runtime"):
+ machine.wait_for_unit("print-openxr-info.service", "alice")
- machine.succeed("su -- alice -c env XDG_RUNTIME_DIR=${runtimePath} openxr_runtime_list")
+ with subtest("Ensure xrgears launches"):
+ machine.wait_for_unit("xrgears.service", "alice")
+ # TODO: 10 seconds should be long enough for anything, but this is theoretically flaky
+ machine.sleep(10)
+ machine.screenshot("screen")
'';
}
diff --git a/nixos/tests/mtp.nix b/nixos/tests/mtp.nix
index be2ed5b1f018..47cf10561eb6 100644
--- a/nixos/tests/mtp.nix
+++ b/nixos/tests/mtp.nix
@@ -23,7 +23,6 @@
environment.systemPackages = with pkgs; [
usbutils
glib
- jmtpfs
tree
];
services.gvfs.enable = true;
@@ -88,22 +87,6 @@
${unmountAllMtpDevices}
'';
};
- jmtpfs = {
- # jmtpfsTest:
- # 1. Mounts the device on a dir named `phone` using jmtpfs
- # 2. Puts the current Nixpkgs libmtp version into a file
- # 3. Checks for corruption with `diff`
- # 4. Prints the directory tree
- jmtpfsTest = pkgs.writeScript "jmtpfsTest.sh" ''
- set -e
- mkdir phone
- jmtpfs phone
- echo "${pkgs.libmtp.version}" > phone/tmp/testFile
- echo "${pkgs.libmtp.version}" > testFile
- diff phone/tmp/testFile testFile
- tree phone
- '';
- };
in
# Using >&2 allows the results of the scripts to be printed to the terminal
# when building this test with Nix. Scripts would otherwise complete
@@ -113,6 +96,5 @@
client.wait_for_unit("multi-user.target")
client.wait_for_unit("dbus.service")
client.succeed("${gvfs.gvfsTest} >&2")
- client.succeed("${jmtpfs.jmtpfsTest} >&2")
'';
}
diff --git a/nixos/tests/mysql/mysql-secure-root.nix b/nixos/tests/mysql/mysql-secure-root.nix
new file mode 100644
index 000000000000..faaf1bb3955e
--- /dev/null
+++ b/nixos/tests/mysql/mysql-secure-root.nix
@@ -0,0 +1,94 @@
+{
+ system ? builtins.currentSystem,
+ config ? { },
+ pkgs ? import ../../.. { inherit system config; },
+ lib ? pkgs.lib,
+}:
+
+let
+ makeTest = import ./../make-test-python.nix;
+ inherit (import ./common.nix { inherit pkgs lib; })
+ mysqlPackages
+ ;
+
+ makeSecureRootTest =
+ {
+ package,
+ name ? "mysql_secure_root_" + (builtins.replaceStrings [ "-" "." ] [ "_" "" ] package.pname),
+ }:
+ makeTest {
+ inherit name;
+
+ nodes.${name} = { pkgs, ... }: {
+ services.mysql = {
+ enable = true;
+ package = package;
+ };
+ };
+
+ testScript = ''
+ start_all()
+
+ machine = ${name}
+ machine.wait_for_unit("mysql")
+
+ # Verify that non-root user cannot connect as root
+ machine.fail("sudo -u nobody mysql -u root -e 'SELECT 1;' 2>&1")
+
+ # Verify that system root can connect as root via socket
+ machine.succeed("mysql -u root -e 'SELECT 1;'")
+
+ # Verify that root@localhost has auth_socket plugin
+ machine.succeed("[ \"$(mysql -u root -N -e \"SELECT plugin FROM mysql.user WHERE user = 'root' AND host = 'localhost';\")\" = \"auth_socket\" ]")
+
+ # Test service restart - verify it still works
+ machine.succeed("systemctl restart mysql")
+ machine.wait_for_unit("mysql")
+
+ # After restart, verify non-root user still cannot connect as root
+ machine.fail("sudo -u nobody mysql -u root -e 'SELECT 1;' 2>&1")
+
+ # After restart, verify system root can still connect
+ machine.succeed("mysql -u root -e 'SELECT 1;'")
+
+ # After restart, verify root@localhost still has auth_socket
+ machine.succeed("[ \"$(mysql -u root -N -e \"SELECT plugin FROM mysql.user WHERE user = 'root' AND host = 'localhost';\")\" = \"auth_socket\" ]")
+ '';
+ };
+
+ makeInsecureRootTest =
+ {
+ package,
+ name ? "mysql_insecure_root_" + (builtins.replaceStrings [ "-" "." ] [ "_" "" ] package.pname),
+ }:
+ makeTest {
+ inherit name;
+
+ nodes.${name} = { pkgs, ... }: {
+ services.mysql = {
+ enable = true;
+ package = package;
+ secureSuperUserByDefault = false;
+ };
+ };
+
+ testScript = ''
+ start_all()
+
+ machine = ${name}
+ machine.wait_for_unit("mysql")
+
+ # With secureRootByDefault = false, anyone can connect as root (default --initialize-insecure behavior)
+ machine.succeed("sudo -u nobody mysql -u root -e 'SELECT 1;' 2>&1")
+ '';
+ };
+
+in
+{
+ "secure-by-default" = lib.mapAttrs (
+ _: package: makeSecureRootTest { inherit package; }
+ ) mysqlPackages;
+ "can-be-insecure" = lib.mapAttrs (
+ _: package: makeInsecureRootTest { inherit package; }
+ ) mysqlPackages;
+}
diff --git a/nixos/tests/netdata.nix b/nixos/tests/netdata.nix
index 2a85c11f0542..f03894671709 100644
--- a/nixos/tests/netdata.nix
+++ b/nixos/tests/netdata.nix
@@ -6,7 +6,6 @@
meta = with pkgs.lib.maintainers; {
maintainers = [
cransom
- raitobezarius
];
};
diff --git a/nixos/tests/nextcloud/default.nix b/nixos/tests/nextcloud/default.nix
index 9a3785f89627..2cb226e353da 100644
--- a/nixos/tests/nextcloud/default.nix
+++ b/nixos/tests/nextcloud/default.nix
@@ -149,5 +149,6 @@ listToAttrs (
concatMap genTests [
32
33
+ 34
]
)
diff --git a/nixos/tests/nezha.nix b/nixos/tests/nezha.nix
new file mode 100644
index 000000000000..924cfc1d8300
--- /dev/null
+++ b/nixos/tests/nezha.nix
@@ -0,0 +1,114 @@
+{ lib, pkgs, ... }:
+let
+ agent_host = "agent.test";
+ dashboard_host = "dashboard.test";
+
+ agentSecret = pkgs.writeText "fakeagentsecret" "fakeagentsecret";
+
+ hosts = {
+ "${agent_host}" = "192.168.0.2";
+ "${dashboard_host}" = "192.168.0.1";
+ };
+ hostsEntries = lib.mapAttrs' (k: v: {
+ name = v;
+ value = lib.singleton k;
+ }) hosts;
+in
+{
+ name = "nezha";
+
+ meta.maintainers = with lib.maintainers; [ moraxyc ];
+
+ containers = {
+ agent = _: {
+ networking = {
+ hostName = builtins.elemAt (lib.splitString "." agent_host) 0;
+ domain = builtins.elemAt (lib.splitString "." agent_host) 1;
+ firewall.enable = false;
+ hosts = hostsEntries;
+ useDHCP = false;
+ interfaces.eth1.ipv4.addresses = lib.singleton {
+ address = hosts."${agent_host}";
+ prefixLength = 24;
+ };
+ };
+ services.nezha-agent = {
+ enable = true;
+ debug = true;
+ genUuid = true;
+ settings = {
+ server = hosts."${dashboard_host}" + ":80";
+ };
+ clientSecretFile = agentSecret;
+ };
+ };
+
+ dashboard =
+ { pkgs, ... }:
+ {
+ networking = {
+ firewall.enable = false;
+ hosts = hostsEntries;
+ useDHCP = false;
+ interfaces.eth1.ipv4.addresses = lib.singleton {
+ address = hosts."${dashboard_host}";
+ prefixLength = 24;
+ };
+ };
+ services.nezha = {
+ enable = true;
+ debug = true;
+ settings = {
+ listenhost = "0.0.0.0";
+ # Test CAP_NET_BIND_SERVICE
+ listenport = 80;
+ };
+ mutableConfig = true;
+ jwtSecretFile = pkgs.writeText "fakejwt" "fakejwt";
+ agentSecretFile = agentSecret;
+ };
+ };
+ };
+
+ testScript = ''
+ import json
+
+ with subtest("Wait for services and network"):
+ dashboard.wait_for_unit("nezha.service")
+ agent.wait_for_unit("nezha-agent.service")
+ dashboard.wait_for_open_port(80)
+ dashboard.wait_for_unit("network.target")
+ agent.wait_for_unit("network.target")
+ agent.succeed("curl --fail --max-time 10 http://dashboard.test/")
+
+ with subtest("Test mutableConfig"):
+ dashboard.succeed("systemctl stop nezha")
+ dashboard.succeed("""
+ echo '{"sitename": "Nezha on NixOS"}' > /etc/nezha/config.yaml
+ """)
+ dashboard.succeed("systemctl start nezha")
+ dashboard.wait_for_unit("nezha.service")
+ dashboard.wait_for_open_port(80)
+ result = json.loads(agent.succeed("""
+ curl --fail -X POST --json '{ "username": "admin", "password": "admin"}' \
+ 'http://dashboard.test/api/v1/login'
+ """))
+ token = result['data']['token']
+ result = json.loads(agent.succeed(f"""
+ curl --fail -X GET --header 'Authorization: Bearer {token}' \
+ 'http://dashboard.test/api/v1/setting'
+ """))
+ assert "Nezha on NixOS" == result['data']['config']['site_name']
+
+ with subtest("Verify connection and uuid"):
+ uuid = agent.succeed(
+ "${lib.getExe' pkgs.util-linux "uuidgen"} --md5 -n @dns -N ${agent_host}"
+ )
+ # remove unprintable characters
+ uuid = "".join([char for char in uuid if char.isprintable()])
+ agent.wait_until_succeeds(f"""
+ curl --fail -X GET --header 'Authorization: Bearer {token}' \
+ 'http://dashboard.test/api/v1/server' | grep {uuid}
+ """)
+ '';
+}
diff --git a/nixos/tests/nfs/kerberos.nix b/nixos/tests/nfs/kerberos.nix
index f9720cfb87e2..ae787f8b7436 100644
--- a/nixos/tests/nfs/kerberos.nix
+++ b/nixos/tests/nfs/kerberos.nix
@@ -83,9 +83,16 @@ import ../make-test-python.nix (
services.nfs.server.enable = true;
services.nfs.server.createMountPoints = true;
- services.nfs.server.exports = ''
- /data *(rw,no_root_squash,fsid=0,sec=krb5p)
- '';
+ services.nfs.server.exports = {
+ "/data" = {
+ "*" = [
+ "rw"
+ "no_root_squash"
+ "fsid=0"
+ "sec=krb5p"
+ ];
+ };
+ };
};
};
diff --git a/nixos/tests/nfs/simple.nix b/nixos/tests/nfs/simple.nix
index 3f2b8d3bbb1c..eebcb36cc0a5 100644
--- a/nixos/tests/nfs/simple.nix
+++ b/nixos/tests/nfs/simple.nix
@@ -37,9 +37,16 @@ import ../make-test-python.nix (
{ ... }:
{
services.nfs.server.enable = true;
- services.nfs.server.exports = ''
- /data 192.168.1.0/255.255.255.0(rw,no_root_squash,no_subtree_check,fsid=0)
- '';
+ services.nfs.server.exports = {
+ "/data" = {
+ "192.168.1.0/255.255.255.0" = [
+ "rw"
+ "no_root_squash"
+ "no_subtree_check"
+ "fsid=0"
+ ];
+ };
+ };
services.nfs.server.createMountPoints = true;
networking.firewall.enable = false; # FIXME: figure out what ports need to be allowed
};
diff --git a/nixos/tests/nginx-lua.nix b/nixos/tests/nginx-lua.nix
new file mode 100644
index 000000000000..8159882a7d5c
--- /dev/null
+++ b/nixos/tests/nginx-lua.nix
@@ -0,0 +1,37 @@
+{ lib, ... }:
+{
+ name = "nginx-lua";
+
+ meta.maintainers = [ lib.maintainers.kranzes ];
+
+ nodes.machine = {
+ services.nginx = {
+ enable = true;
+ lua = {
+ enable = true;
+ extraPackages = p: [
+ p.lua-resty-lrucache
+ p.lua-cjson
+ ];
+ };
+ virtualHosts."localhost".locations."/" = {
+ extraConfig = ''
+ default_type text/plain;
+ content_by_lua_block {
+ local cache = require("resty.lrucache").new(8)
+ cache:set("greeting", require("cjson").decode('"Hello world!"'))
+ ngx.say((cache:get("greeting")))
+ }
+ '';
+ };
+ };
+ };
+
+ testScript = ''
+ machine.wait_for_unit("nginx")
+ machine.wait_for_open_port(80)
+
+ response = machine.wait_until_succeeds("curl -fsS http://127.0.0.1/").strip()
+ assert response == "Hello world!", f"Expected 'Hello world!', got '{response}'"
+ '';
+}
diff --git a/nixos/tests/nixos-test-driver/console-timeout.nix b/nixos/tests/nixos-test-driver/console-timeout.nix
new file mode 100644
index 000000000000..504f4504bf9d
--- /dev/null
+++ b/nixos/tests/nixos-test-driver/console-timeout.nix
@@ -0,0 +1,26 @@
+{ pkgs, lib, ... }:
+{
+ name = "console-timeout";
+
+ nodes.machine = {
+ systemd.services.generate-output.script = ''
+ echo "match that"
+ sleep 1
+
+ for i in $(seq 15); do
+ echo "line $i"
+ done
+
+ echo "match this"
+ '';
+ };
+
+ testScript = ''
+ machine.start()
+ machine.wait_for_unit("multi-user.target")
+
+ machine.systemctl("start generate-output")
+ machine.wait_for_console_text("match that")
+ machine.wait_for_console_text("match this", timeout=10)
+ '';
+}
diff --git a/nixos/tests/nixos-test-driver/efivars.nix b/nixos/tests/nixos-test-driver/efivars.nix
new file mode 100644
index 000000000000..953c69a0257e
--- /dev/null
+++ b/nixos/tests/nixos-test-driver/efivars.nix
@@ -0,0 +1,110 @@
+{ pkgs, lib, ... }:
+let
+ vendorUuid = "a19f72f8-b554-4bd7-a0c2-2762bd854691";
+ varName = "Demo";
+ readWriteVar = pkgs.writers.writePython3 "read-increment-efi-var" { } ''
+ import os
+ import sys
+ import fcntl
+ import array
+
+ if len(sys.argv) != 3:
+ print(f"Usage: {sys.argv[0]} NAME UUID", file=sys.stderr)
+ sys.exit(1)
+
+ name = sys.argv[1]
+ uuid = sys.argv[2]
+ path = f"/sys/firmware/efi/efivars/{name}-{uuid}"
+
+ FS_IMMUTABLE_FL = 0x00000010
+ FS_IOC_GETFLAGS = 0x80086601
+ FS_IOC_SETFLAGS = 0x40086602
+
+ if not os.path.exists(path):
+ print(f"{path}: does not exist", file=sys.stderr)
+ sys.exit(1)
+
+ with open(path, "rb") as f:
+ data = f.read()
+
+ # The first 4 bytes are attributes, the rest is the data
+ if data[4:] != b"\x2a":
+ print(f"0x2a value expected, got {data[4:]!r}", file=sys.stderr)
+ sys.exit(1)
+
+ fd = os.open(path, os.O_RDONLY)
+ arg = array.array("L", [0])
+ fcntl.ioctl(fd, FS_IOC_GETFLAGS, arg)
+ if arg[0] & FS_IMMUTABLE_FL:
+ arg[0] &= ~FS_IMMUTABLE_FL
+ fcntl.ioctl(fd, FS_IOC_SETFLAGS, arg)
+ os.close(fd)
+
+ with open(path, "wb") as f:
+ # Write 0x2b
+ data = bytes(list(data[:4]) + [0x2b])
+ f.write(data)
+ '';
+in
+{
+ name = "efivars";
+
+ nodes.machine = {
+ boot.loader.efi.canTouchEfiVariables = true;
+ virtualisation.useEFIBoot = true;
+ };
+
+ testScript = ''
+ import uuid
+ import unittest
+
+ from test_driver.efi import EfiVariable
+ from test_driver.errors import RequestedAssertionFailed
+
+
+ class TestConcurrentRead(unittest.TestCase):
+ def __init__(self, machine):
+ super().__init__()
+ self.machine = machine
+
+ def test_concurrent_read(self):
+ with self.assertRaises(RequestedAssertionFailed):
+ self.machine.read_efi_vars()
+
+
+ vendor_uuid = uuid.UUID('${vendorUuid}')
+ machine.create_efi_vars()
+ machine.write_efi_vars([
+ EfiVariable(
+ vendor_uuid=vendor_uuid,
+ name="${varName}",
+ data=bytes([0x2a]),
+ flags=EfiVariable.Flags.NON_VOLATILE | EfiVariable.Flags.BOOTSERVICE_ACCESS | EfiVariable.Flags.RUNTIME_ACCESS,
+ )
+ ])
+
+ machine.start()
+ machine.wait_for_unit("multi-user.target")
+
+ print(machine.succeed('${readWriteVar} "${varName}" "${vendorUuid}"'))
+
+ TestConcurrentRead(machine).test_concurrent_read()
+ machine.crash()
+
+ machine.dump_efi_vars()
+ vars = machine.read_efi_vars()
+
+ guid = uuid.UUID(bytes=vendor_uuid.bytes_le)
+ predicate = lambda v: v.name == "${varName}" and v.vendorUUID == guid
+ var = next((v for v in vars if predicate(v)), None)
+
+ if var:
+ var.print()
+ if var.data == bytes([0x2b]):
+ print("Congrats!")
+ else:
+ raise ValueError("Value 0x2b expected")
+ else:
+ raise ValueError("Could not find ${varName} variable")
+ '';
+}
diff --git a/nixos/tests/nordvpn.nix b/nixos/tests/nordvpn.nix
new file mode 100644
index 000000000000..59af7c54660f
--- /dev/null
+++ b/nixos/tests/nordvpn.nix
@@ -0,0 +1,129 @@
+{ lib, ... }:
+{
+ name = "nordvpn";
+ meta.maintainers = with lib.maintainers; [ different-error ];
+ nodes =
+ let
+ commonConfig = user: {
+ # norduserd reads DBUS_SESSION_BUS_ADDRESS which the
+ # desktopManager sets on user session creation (i.e. login)
+ services.xserver.enable = true;
+ services.desktopManager.plasma6.enable = true;
+ services.displayManager.gdm.enable = true;
+ services.displayManager.autoLogin = {
+ enable = true;
+ user = user;
+ };
+ };
+ in
+ {
+ nada = { ... }: { };
+ basic =
+ { ... }:
+ lib.recursiveUpdate {
+ users.users.alice = {
+ extraGroups = [ "nordvpn" ];
+ isNormalUser = true;
+ };
+ # default: run nordvpnd as nordvpn:nordvpn
+ services.nordvpn.enable = true;
+ } (commonConfig "alice");
+ userOnly =
+ { ... }:
+ lib.recursiveUpdate {
+ users.users.kanye = {
+ extraGroups = [ "nordvpn" ];
+ isNormalUser = true;
+ };
+ # run nordvpnd as kanye:nordvpn
+ services.nordvpn = {
+ enable = true;
+ user = "kanye";
+ };
+ } (commonConfig "kanye");
+ groupOnly =
+ { ... }:
+ lib.recursiveUpdate {
+ users.users.alice = {
+ extraGroups = [ "kanye" ];
+ isNormalUser = true;
+ };
+ users.groups.kanye = { };
+ # run nordvpnd as nordvpn:kanye
+ services.nordvpn = {
+ enable = true;
+ group = "kanye";
+ };
+ } (commonConfig "alice");
+ userAndGroup =
+ { ... }:
+ lib.recursiveUpdate {
+ users.users.kanye = {
+ group = "kanye";
+ isNormalUser = true;
+ };
+ users.groups.kanye = { };
+ # run nordvpnd as kanye:kanye
+ services.nordvpn = {
+ enable = true;
+ group = "kanye";
+ user = "kanye";
+ };
+ } (commonConfig "kanye");
+ };
+
+ testScript = ''
+ class UserGroupTestCase:
+ def __init__(self, machine, user, has_nordvpn_usr, has_nordvpn_gp):
+ self.machine = machine
+ self.user = user
+ self.has_nordvpn_usr = has_nordvpn_usr
+ self.has_nordvpn_gp = has_nordvpn_gp
+
+ def run(self):
+ self.machine.start()
+ self.verify_nordvpn_user()
+ self.verify_nordvpn_group()
+ self.verify_services()
+ self.machine.shutdown()
+
+ def verify_nordvpn_user(self):
+ if self.has_nordvpn_usr:
+ self.machine.succeed("id nordvpn")
+ else:
+ self.machine.fail("id nordvpn")
+
+ def verify_nordvpn_group(self):
+ group_str = self.machine.succeed(f"sudo -u {self.user} groups")
+ groups = [x.strip() for x in group_str.split(" ")]
+ if self.has_nordvpn_gp:
+ assert "nordvpn" in groups, f"nordvpn is not in {groups} but should be"
+ else:
+ assert "nordvpn" not in groups, f"nordvpn is in {groups} but should not be"
+
+ def verify_services(self):
+ self.machine.wait_for_unit("nordvpnd", timeout=60)
+ self.machine.wait_for_unit("norduserd", self.user, timeout=90)
+ # verify can talk to nordvpnd. give nordvpnd at most 5s to initialize.
+ self.machine.wait_until_succeeds("nordvpn status", timeout=5)
+ self.machine.succeed("nordvpn status")
+
+ test_cases = [
+ UserGroupTestCase(basic, "alice", has_nordvpn_usr=True, has_nordvpn_gp=True),
+ UserGroupTestCase(userOnly, "kanye", has_nordvpn_usr=False, has_nordvpn_gp=True),
+ UserGroupTestCase(groupOnly, "alice", has_nordvpn_usr=True, has_nordvpn_gp=False),
+ UserGroupTestCase(userAndGroup, "kanye", has_nordvpn_usr=False, has_nordvpn_gp=False),
+ ]
+
+ # NADA
+ nada.start()
+ nada.wait_for_unit("multi-user.target", timeout=60)
+ nada.fail("nordvpnd")
+ nada.fail("nordvpn")
+ nada.fail("norduserd")
+ nada.shutdown()
+
+ for test_case in test_cases:
+ test_case.run()
+ '';
+}
diff --git a/nixos/tests/nsd.nix b/nixos/tests/nsd.nix
index 747d691a87d6..04e9fd7f1ba4 100644
--- a/nixos/tests/nsd.nix
+++ b/nixos/tests/nsd.nix
@@ -21,7 +21,7 @@ in
{
imports = [ common ];
networking.nameservers = lib.mkForce [
- (lib.head nodes.server.config.networking.interfaces.eth1.ipv4.addresses).address
+ (lib.head nodes.server.networking.interfaces.eth1.ipv4.addresses).address
];
networking.interfaces.eth1.ipv4.addresses = [
{
@@ -36,7 +36,7 @@ in
{
imports = [ common ];
networking.nameservers = lib.mkForce [
- (lib.head nodes.server.config.networking.interfaces.eth1.ipv6.addresses).address
+ (lib.head nodes.server.networking.interfaces.eth1.ipv6.addresses).address
];
networking.interfaces.eth1.ipv4.addresses = [
{
diff --git a/nixos/tests/nspawn-daemon-reexec-dbus.nix b/nixos/tests/nspawn-daemon-reexec-dbus.nix
new file mode 100644
index 000000000000..115deb778bb5
--- /dev/null
+++ b/nixos/tests/nspawn-daemon-reexec-dbus.nix
@@ -0,0 +1,79 @@
+# Regression test for an nspawn-only systemd re-exec failure that broke D-Bus.
+#
+# Demonstrates `systemctl show` keeps working on `daemon-reexec`.
+#
+# Trigger: `systemctl daemon-reexec` issues a D-Bus `Manager.Reexecute`, like
+# `switch-to-configuration-ng` on a systemd package change.
+#
+# Root cause: inside nspawn test containers PID 1 re-send `READY=1` on the
+# `NOTIFY_SOCKET` on re-exec. The test driver stopped draining that socket
+# after boot, so until drained its receive buffer filled and `systemctl` hung /
+# errored `Failed to connect to bus: Transport endpoint is not connected`.
+{ ... }:
+{
+ name = "nspawn-daemon-reexec-dbus";
+
+ # `containers.` => systemd-nspawn machine (vs `nodes.` => QEMU).
+ # An empty container boots full systemd + D-Bus, which is all we need.
+ containers.machine = { };
+
+ testScript = # python
+ ''
+ import re
+
+ BUS_BROKEN = re.compile(
+ r"Transport endpoint is not connected|Failed to connect to bus"
+ )
+
+ # Without the fix the notify socket's receive buffer fills after 10
+ # undrained `READY=1` resends, so PID 1 blocks then.
+ REEXECS = 10
+
+
+ def bus_broken():
+ """Whether the in-container D-Bus is unusable. A broken bus prints a
+ transport error or hangs until `timeout` kills it (status 124); both
+ count as broken."""
+ status, out = machine.execute(
+ "timeout 10 systemctl show -p ActiveState --value "
+ "multi-user.target 2>&1",
+ check_return=False,
+ timeout=20,
+ )
+ return status != 0 or bool(BUS_BROKEN.search(out)), status, out
+
+
+ machine.start()
+ machine.wait_for_unit("multi-user.target", timeout=120)
+
+ # Pre-reexec sanity: the bus works and shows no break.
+ broken, status, out = bus_broken()
+ assert not broken, (
+ f"bus already broken before any reexec: status={status} out={out!r}"
+ )
+ machine.log(f"pre-reexec sanity OK: {out.strip()!r}")
+
+ broke_at = None
+ for i in range(1, REEXECS + 1):
+ # The same D-Bus Manager.Reexecute that switch-to-configuration issues
+ # on a systemd change.
+ machine.execute(
+ "timeout 30 systemctl daemon-reexec",
+ check_return=False,
+ timeout=45,
+ )
+ broken, status, out = bus_broken()
+ machine.log(f"[reexec {i}] status={status} out={out.strip()!r}")
+ if broken:
+ broke_at = i
+ break
+
+ assert broke_at is None, (
+ f"nspawn D-Bus broke after daemon-reexec #{broke_at} of {REEXECS} "
+ "(systemctl hung or returned a bus transport error). The re-exec'd "
+ "PID 1 never finished re-initialising -- the test driver stopped "
+ "draining the notify socket, so PID 1's READY=1 resend blocked. "
+ "Never observed on QEMU."
+ )
+ '';
+}
diff --git a/nixos/tests/openresty-lua.nix b/nixos/tests/openresty-lua.nix
index 367154947371..999bd6963470 100644
--- a/nixos/tests/openresty-lua.nix
+++ b/nixos/tests/openresty-lua.nix
@@ -1,12 +1,4 @@
-{ pkgs, lib, ... }:
-let
- luaLibs = [
- pkgs.lua.pkgs.markdown
- ];
-
- getLuaPath = lib: "${lib}/share/lua/${pkgs.lua.luaversion}/?.lua";
- luaPath = lib.concatStringsSep ";" (map getLuaPath luaLibs);
-in
+{ pkgs, ... }:
{
name = "openresty-lua";
meta = with pkgs.lib.maintainers; {
@@ -15,7 +7,7 @@ in
nodes = {
webserver =
- { pkgs, lib, ... }:
+ { pkgs, ... }:
{
networking = {
extraHosts = ''
@@ -27,9 +19,10 @@ in
enable = true;
package = pkgs.openresty;
- commonHttpConfig = ''
- lua_package_path '${luaPath};;';
- '';
+ lua = {
+ enable = true;
+ extraPackages = p: [ p.markdown ];
+ };
virtualHosts."default.test" = {
default = true;
diff --git a/nixos/tests/optee.nix b/nixos/tests/optee.nix
index 2d7c80bda78c..08377a84a188 100644
--- a/nixos/tests/optee.nix
+++ b/nixos/tests/optee.nix
@@ -4,7 +4,6 @@
meta = {
maintainers = with lib.maintainers; [ jmbaur ];
- broken = pkgs.stdenv.hostPlatform.isAarch64;
};
nodes.machine =
@@ -17,7 +16,8 @@
uboot = ubootQemuAarch64.overrideAttrs (old: {
postPatch = (old.postPatch or "") + ''
substituteInPlace board/emulation/qemu-arm/qemu-arm.env \
- --replace-fail "ramdisk_addr_r=0x44000000" "ramdisk_addr_r=0x46000000"
+ --replace-fail "kernel_addr_r=0x40400000" "kernel_addr_r=0x50000000" \
+ --replace-fail "ramdisk_addr_r=0x44000000" "ramdisk_addr_r=0x58000000"
'';
});
@@ -53,6 +53,7 @@
# VM boots up via qfw
boot.loader.grub.enable = false;
+ boot.kernelModules = [ "optee" ];
services.tee-supplicant = {
enable = true;
diff --git a/nixos/tests/outline.nix b/nixos/tests/outline.nix
index 15abc22270d4..0956d2607f7b 100644
--- a/nixos/tests/outline.nix
+++ b/nixos/tests/outline.nix
@@ -7,10 +7,7 @@
xanderio
];
- node.pkgsReadOnly = false;
-
- nodes.outline = {
- virtualisation.memorySize = 2 * 1024;
+ containers.outline = {
services.outline = {
enable = true;
forceHttps = false;
diff --git a/nixos/tests/owi.nix b/nixos/tests/owi.nix
index 74e9d2d394fd..68945f721582 100644
--- a/nixos/tests/owi.nix
+++ b/nixos/tests/owi.nix
@@ -8,7 +8,7 @@
meta.maintainers = with lib.maintainers; [ ethancedwards8 ];
- nodes.machine = {
+ containers.machine = {
environment.systemPackages = with pkgs; [ owi ];
environment.etc."owipass.rs".source = pkgs.writeText "owi.rs" ''
diff --git a/nixos/tests/parsedmarc/default.nix b/nixos/tests/parsedmarc/default.nix
index 6018e2eef172..162d8b315a8b 100644
--- a/nixos/tests/parsedmarc/default.nix
+++ b/nixos/tests/parsedmarc/default.nix
@@ -93,8 +93,8 @@ in
testScript =
{ nodes, ... }:
let
- esPort = toString nodes.parsedmarc.config.services.elasticsearch.port;
- valueObject = lib.optionalString (lib.versionAtLeast nodes.parsedmarc.config.services.elasticsearch.package.version "7") ".value";
+ esPort = toString nodes.parsedmarc.services.elasticsearch.port;
+ valueObject = lib.optionalString (lib.versionAtLeast nodes.parsedmarc.services.elasticsearch.package.version "7") ".value";
in
''
parsedmarc.start()
@@ -143,7 +143,7 @@ in
networking.extraHosts = ''
127.0.0.1 ${parsedmarcDomain}
- ${nodes.mail.config.networking.primaryIPAddress} ${mailDomain}
+ ${nodes.mail.networking.primaryIPAddress} ${mailDomain}
'';
services.parsedmarc = {
@@ -170,7 +170,7 @@ in
networking.extraHosts = ''
127.0.0.1 ${mailDomain}
- ${nodes.parsedmarc.config.networking.primaryIPAddress} ${parsedmarcDomain}
+ ${nodes.parsedmarc.networking.primaryIPAddress} ${parsedmarcDomain}
'';
services.dovecot2 = {
@@ -204,8 +204,8 @@ in
testScript =
{ nodes, ... }:
let
- esPort = toString nodes.parsedmarc.config.services.elasticsearch.port;
- valueObject = lib.optionalString (lib.versionAtLeast nodes.parsedmarc.config.services.elasticsearch.package.version "7") ".value";
+ esPort = toString nodes.parsedmarc.services.elasticsearch.port;
+ valueObject = lib.optionalString (lib.versionAtLeast nodes.parsedmarc.services.elasticsearch.package.version "7") ".value";
in
''
mail.start()
diff --git a/nixos/tests/pass-secret-service.nix b/nixos/tests/pass-secret-service.nix
index 57c7ac8bdcbc..6ef896f78bf2 100644
--- a/nixos/tests/pass-secret-service.nix
+++ b/nixos/tests/pass-secret-service.nix
@@ -39,7 +39,7 @@
testScript =
{ nodes, ... }:
let
- user = nodes.machine.config.users.users.alice;
+ user = nodes.machine.users.users.alice;
gpg-uid = "alice@example.net";
gpg-pw = "foobar9000";
ready-file = "/tmp/secrets-dbus-init.done";
diff --git a/nixos/tests/php/fpm-modular.nix b/nixos/tests/php/fpm-modular.nix
index 360e664963cf..443594673e13 100644
--- a/nixos/tests/php/fpm-modular.nix
+++ b/nixos/tests/php/fpm-modular.nix
@@ -7,7 +7,7 @@
aanderse
];
- nodes.machine =
+ containers.machine =
{ config, pkgs, ... }:
{
environment.systemPackages = [ php ];
@@ -56,14 +56,14 @@
};
};
testScript =
- { ... }:
+ # python
''
machine.wait_for_unit("nginx.service")
machine.wait_for_unit("php-fpm.service")
# Check so we get an evaluated PHP back
- response = machine.succeed("curl -fvvv -s http://127.0.0.1:80/")
- assert "PHP Version ${php.version}" in response, "PHP version not detected"
+ response = machine.wait_until_succeeds("curl -fvvv -s http://127.0.0.1:80/")
+ t.assertIn("PHP Version ${php.version}", response, "PHP version not detected")
# Check so we have database and some other extensions loaded
for ext in ["json", "opcache", "pdo_mysql", "pdo_pgsql", "pdo_sqlite", "apcu"]:
diff --git a/nixos/tests/php/fpm.nix b/nixos/tests/php/fpm.nix
index 21336ade042b..16377ec19c24 100644
--- a/nixos/tests/php/fpm.nix
+++ b/nixos/tests/php/fpm.nix
@@ -3,7 +3,7 @@
name = "php-${php.version}-fpm-nginx-test";
meta.maintainers = lib.teams.php.members;
- nodes.machine =
+ containers.machine =
{ config, pkgs, ... }:
{
environment.systemPackages = [ php ];
@@ -44,17 +44,33 @@
"pm.min_spare_servers" = 1;
"pm.start_servers" = 2;
};
+ phpEnv = {
+ # check that keywords and special characters are escaped properly
+ keyword = "false";
+ characters = "^ = \\";
+ quoted = "\"'";
+ newline = "hello\nworld";
+ };
};
};
testScript =
- { ... }:
+ # python
''
machine.wait_for_unit("nginx.service")
machine.wait_for_unit("phpfpm-foobar.service")
# Check so we get an evaluated PHP back
- response = machine.succeed("curl -fvvv -s http://127.0.0.1:80/")
- assert "PHP Version ${php.version}" in response, "PHP version not detected"
+ response = machine.wait_until_succeeds("curl -fvvv -s http://127.0.0.1:80/")
+ t.assertIn("PHP Version ${php.version}", response, "PHP version not detected")
+
+ expected_env = {
+ "keyword": "false",
+ "characters": "^ = \\",
+ "quoted": ""'",
+ "newline": "hello\nworld",
+ }
+ for env, value in expected_env.items():
+ assert f'| {env} | {value} |
' in response, f"phpEnv.{env} not detected"
# Check so we have database and some other extensions loaded
for ext in ["json", "opcache", "pdo_mysql", "pdo_pgsql", "pdo_sqlite", "apcu"]:
diff --git a/nixos/tests/php/httpd.nix b/nixos/tests/php/httpd.nix
index 9ee157a01096..36381c15509f 100644
--- a/nixos/tests/php/httpd.nix
+++ b/nixos/tests/php/httpd.nix
@@ -7,7 +7,7 @@
name = "php-${php.version}-httpd-test";
meta.maintainers = lib.teams.php.members;
- nodes.machine =
+ containers.machine =
{
config,
pkgs,
@@ -32,13 +32,13 @@
};
};
testScript =
- { ... }:
+ # python
''
machine.wait_for_unit("httpd.service")
# Check so we get an evaluated PHP back
- response = machine.succeed("curl -fvvv -s http://127.0.0.1:80/")
- assert "PHP Version ${php.version}" in response, "PHP version not detected"
+ response = machine.wait_until_succeeds("curl -fvvv -s http://127.0.0.1:80/")
+ t.assertIn("PHP Version ${php.version}", response, "PHP version not detected")
# Check so we have database and some other extensions loaded
for ext in ["json", "opcache", "pdo_mysql", "pdo_pgsql", "pdo_sqlite"]:
diff --git a/nixos/tests/php/pcre.nix b/nixos/tests/php/pcre.nix
index e95ce76c7d7e..fb4c59e310da 100644
--- a/nixos/tests/php/pcre.nix
+++ b/nixos/tests/php/pcre.nix
@@ -11,7 +11,7 @@ in
name = "php-${php.version}-httpd-pcre-jit-test";
meta.maintainers = lib.teams.php.members;
- nodes.machine =
+ containers.machine =
{ pkgs, ... }:
{
time.timeZone = "UTC";
@@ -50,12 +50,13 @@ in
pcntl_wait($pid);
'';
in
+ # python
''
machine.wait_for_unit("httpd.service")
# Ensure php evaluation by matching on the var_dump syntax
- response = machine.succeed("curl -fvvv -s http://127.0.0.1:80/index.php")
+ response = machine.wait_until_succeeds("curl -fvvv -s http://127.0.0.1:80/index.php")
expected = 'string(${toString (builtins.stringLength testString)}) "${testString}"'
- assert expected in response, "Does not appear to be able to use subgroups."
- machine.succeed("${php}/bin/php -f ${pcreJitSeallocForkIssue}")
+ t.assertIn(expected, response, "Does not appear to be able to use subgroups.")
+ machine.succeed("${lib.getExe php} -f ${pcreJitSeallocForkIssue}")
'';
}
diff --git a/nixos/tests/plausible.nix b/nixos/tests/plausible.nix
index b7da2eb4bbb9..5b0d58464ae5 100644
--- a/nixos/tests/plausible.nix
+++ b/nixos/tests/plausible.nix
@@ -1,37 +1,142 @@
-{ lib, ... }:
-{
- name = "plausible";
- meta = {
- maintainers = with lib.maintainers; [
- e1mo
- xanderio
- ];
- };
+{ runTest }:
- nodes.machine =
- { pkgs, ... }:
+let
+ secretKeybase = "nannannannannannannannannannannannannannannannannannannan_batman!";
+
+ # A fixed bcrypt password hash is fine for a test; the plaintext is never
+ # needed because the test only checks that an admin user exists (and thus the
+ # "first launch" setup wizard is unreachable), not that login with the
+ # password works.
+ adminEmail = "admin@localhost";
+
+ mkPlausibleTest =
{
- virtualisation.memorySize = 4096;
- services.plausible = {
- enable = true;
- server = {
- baseUrl = "http://localhost:8000";
- secretKeybaseFile = "${pkgs.writeText "dont-try-this-at-home" "nannannannannannannannannannannannannannannannannannannan_batman!"}";
+ seedAdmin ? false,
+ }:
+ runTest (
+ { lib, pkgs, ... }:
+ let
+ adminPassword = "correct-horse-battery-staple";
+ adminPasswordHashFile = pkgs.runCommand "plausible-admin-password-hash" { } ''
+ ${lib.getExe pkgs.mkpasswd} -m bcrypt ${lib.escapeShellArg adminPassword} > "$out"
+ '';
+ in
+ {
+ name = "plausible" + lib.optionalString seedAdmin "-declarative-admin-user";
+ meta = {
+ maintainers = with lib.maintainers; [
+ nh2
+ stepbrobd
+ ];
};
- };
- };
- testScript = ''
- start_all()
- machine.wait_for_unit("plausible.service")
- machine.wait_for_open_port(8000)
+ nodes.machine = {
+ # On first boot, the ClickHouse migrations run by Plausible's
+ # `migrate.sh` intermittently fail with `(Mint.TransportError) socket
+ # closed`, which aborts startup before the web server opens its port.
+ # The failure is transient and succeeds on a subsequent attempt, so
+ # retry startup without a rate limit until the port opens. (Without
+ # this, the test is flaky.)
+ systemd.services.plausible.serviceConfig.Restart = lib.mkForce "always";
+ systemd.services.plausible.serviceConfig.RestartSec = 1;
+ systemd.services.plausible.unitConfig.StartLimitIntervalSec = 0;
- # Ensure that the software does not make not make the machine
- # listen on any public interfaces by default.
- machine.fail("ss -tlpn 'src = 0.0.0.0 or src = [::]' | grep LISTEN")
+ services.plausible = {
+ enable = true;
+ adminUser = lib.mkIf seedAdmin {
+ email = adminEmail;
+ name = "Test Admin";
+ passwordHashFile = "${adminPasswordHashFile}";
+ };
+ server = {
+ baseUrl = "http://localhost:8000";
+ secretKeybaseFile = builtins.toFile "plausible-test-secret-keybase-file" secretKeybase;
+ };
+ };
+ };
- machine.succeed("curl -f localhost:8000 >&2")
+ testScript = ''
+ machine.wait_for_unit("plausible.service")
+ machine.wait_for_open_port(8000)
- machine.succeed("curl -f localhost:8000/js/script.js >&2")
- '';
+ # Ensure that the software does not make the machine
+ # listen on any public interfaces by default.
+ machine.fail("ss -tlpn 'src = 0.0.0.0 or src = [::]' | grep LISTEN")
+
+ machine.succeed("curl -f localhost:8000 >&2")
+ machine.succeed("curl -f localhost:8000/js/script.js >&2")
+
+ def user_count():
+ # Plausible's "first launch" state is defined as "no user exists"
+ # (`Plausible.Release.should_be_first_launch?` is
+ # `not Repo.exists?(Plausible.Auth.User)`), so we inspect the `users`
+ # table directly. Local Postgres connections use `trust` auth in this
+ # VM, so the `postgres` superuser can query without a password.
+ return machine.succeed(
+ "sudo -u postgres psql --dbname plausible --tuples-only --no-align "
+ "--command 'SELECT count(*) FROM users'"
+ ).strip()
+
+ def login_redirect_url():
+ return machine.succeed(
+ "curl -s -o /dev/null -w '%{redirect_url}' localhost:8000/login"
+ ).strip()
+ ''
+ + (
+ if seedAdmin then
+ ''
+ with subtest("the admin user is seeded"):
+ assert user_count() == "1", "expected exactly one seeded admin user"
+ email = machine.succeed(
+ "sudo -u postgres psql --dbname plausible --tuples-only --no-align "
+ "--command 'SELECT email FROM users'"
+ ).strip()
+ assert email == "${adminEmail}", f"unexpected seeded admin email: {email!r}"
+
+ with subtest("the setup wizard is NOT reachable"):
+ # `/login` must render normally (HTTP 200) and must not redirect
+ # to the first-launch `/register` wizard.
+ status = machine.succeed(
+ "curl -s -o /dev/null -w '%{http_code}' localhost:8000/login"
+ ).strip()
+ assert status == "200", f"expected /login to render (200), got: {status!r}"
+ location = login_redirect_url()
+ assert "/register" not in location, (
+ f"/login unexpectedly redirected to the setup wizard: {location!r}"
+ )
+
+ with subtest("seeding is idempotent across restarts"):
+ machine.succeed("systemctl restart plausible.service")
+ machine.wait_for_open_port(8000)
+ assert user_count() == "1", "expected still exactly one user after restart"
+ ''
+ else
+ ''
+ with subtest("without an admin user, the setup wizard is reachable"):
+ assert user_count() == "0", "expected no users in first-launch state"
+ # With no user seeded, `should_be_first_launch?` is true and the
+ # browser pipeline's `FirstLaunchPlug` 302-redirects every page to
+ # `/register`.
+ location = login_redirect_url()
+ assert "/register" in location, (
+ f"expected /login to redirect to the setup wizard /register, but redirect was: {location!r}"
+ )
+ ''
+ );
+ }
+ );
+in
+{
+ # Basic test: Plausible without a declaratively configured admin user is in
+ # the "first launch" state, so the unauthenticated setup wizard is reachable.
+ # This also asserts that the way the `declarative-admin-user` test detects
+ # "wizard reachable" actually fires for this Plausible version, so a future
+ # Plausible change that breaks the detection would make that test fail rather
+ # than silently pass.
+ basic = mkPlausibleTest { seedAdmin = false; };
+
+ # Tests that a declaratively configured admin user is seeded before the web
+ # server accepts connections, so the unauthenticated "first launch" setup
+ # wizard is never reachable.
+ declarative-admin-user = mkPlausibleTest { seedAdmin = true; };
}
diff --git a/nixos/tests/playwright-python.nix b/nixos/tests/playwright-python.nix
index 7911dac1b428..018985020ddb 100644
--- a/nixos/tests/playwright-python.nix
+++ b/nixos/tests/playwright-python.nix
@@ -29,7 +29,7 @@
"firefox": {},
"webkit": {}
}
- needle = re.compile("Nix.*Reference Manual")
+ needle = re.compile("Nix.* Manual")
if len(sys.argv) != 3 or sys.argv[1] not in browsers.keys():
print(f"usage: {sys.argv[0]} [{'|'.join(browsers.keys())}] ")
sys.exit(1)
diff --git a/nixos/tests/podman/tls-ghostunnel.nix b/nixos/tests/podman/tls-ghostunnel.nix
index 1fcfd08f0efc..027683df4b25 100644
--- a/nixos/tests/podman/tls-ghostunnel.nix
+++ b/nixos/tests/podman/tls-ghostunnel.nix
@@ -83,7 +83,7 @@ import ../make-test-python.nix (
};
testScript = ''
- import os
+ import subprocess
import shlex
@@ -93,7 +93,7 @@ import ../make-test-python.nix (
def cmd(command):
print(f"+{command}")
- r = os.system(command)
+ r = subprocess.run(command, shell=True).returncode
if r != 0:
raise Exception(f"Command {command} failed with exit code {r}")
diff --git a/nixos/tests/postfix-tlspol.nix b/nixos/tests/postfix-tlspol.nix
index d1af9877adb3..76a99b920c75 100644
--- a/nixos/tests/postfix-tlspol.nix
+++ b/nixos/tests/postfix-tlspol.nix
@@ -9,7 +9,10 @@
containers.machine = {
services.postfix.enable = true;
- services.postfix-tlspol.enable = true;
+ services.postfix-tlspol = {
+ enable = true;
+ settings.server.metrics-address = "127.0.0.1:8642";
+ };
services.dnsmasq = {
enable = true;
@@ -26,13 +29,19 @@
with subtest("Interact with the service"):
machine.succeed("postfix-tlspol -purge")
- response = json.loads((machine.succeed("postfix-tlspol -query localhost")))
+ response = machine.log(machine.succeed("postfix-tlspol -query localhost"))
+ response = json.loads(machine.succeed("postfix-tlspol -query localhost"))
machine.log(json.dumps(response, indent=2))
assert response["dane"]["policy"] == "", f"Unexpected DANE policy for localhost: {response["dane"]["policy"]}"
assert response["mta-sts"]["policy"] == "TEMP", f"Unexpected MTA-STS policy for localhost: {response["mta-sts"]["policy"]}"
- machine.log(machine.execute("systemd-analyze security postfix-tlspol.service | grep -v ✓")[1])
+ with subtest("Metrics listener"):
+ machine.log(machine.succeed("curl --silent --fail http://localhost:8642/metrics | grep --quiet postfix_tlspol_queries_total"))
+
+
+ with subtest("Hardening"):
+ machine.log(machine.execute("systemd-analyze security postfix-tlspol.service | grep -v ✓")[1])
'';
}
diff --git a/nixos/tests/postgresql/postgresql.nix b/nixos/tests/postgresql/postgresql.nix
index d832f5caa4e9..6fa8351bcae0 100644
--- a/nixos/tests/postgresql/postgresql.nix
+++ b/nixos/tests/postgresql/postgresql.nix
@@ -31,17 +31,6 @@ let
INSERT INTO sth (id) VALUES (1);
CREATE TABLE xmltest ( doc xml );
INSERT INTO xmltest (doc) VALUES ('ok'); -- check if libxml2 enabled
-
- -- check if hardening gets relaxed
- CREATE EXTENSION plv8;
- -- try to trigger the V8 JIT, which requires MemoryDenyWriteExecute
- DO $$
- let xs = [];
- for (let i = 0, n = 400000; i < n; i++) {
- xs.push(Math.round(Math.random() * n))
- }
- console.log(xs.reduce((acc, x) => acc + x, 0));
- $$ LANGUAGE plv8;
'';
in
@@ -60,9 +49,6 @@ let
identMap = ''
postgres root postgres
'';
- # TODO(@Ma27) split this off into its own VM test and move a few other
- # extension tests to use postgresqlTestExtension.
- extensions = ps: with ps; [ plv8 ];
};
services.postgresqlBackup = {
diff --git a/nixos/tests/prometheus-exporters.nix b/nixos/tests/prometheus-exporters.nix
index ae2457265047..990dc02a5ab8 100644
--- a/nixos/tests/prometheus-exporters.nix
+++ b/nixos/tests/prometheus-exporters.nix
@@ -21,6 +21,9 @@ let
* `nodeName` (optional)
* override an incompatible testnode name
*
+ * `testBackend` (optional)
+ * whether to run in `containers` (default) or `nodes` scope
+ *
* Example:
* exporterTests. = {
* exporterConfig = {
@@ -108,7 +111,7 @@ let
wait_for_unit("prometheus-bind-exporter.service")
wait_for_open_port(9119)
succeed(
- "curl -sSf http://localhost:9119/metrics | grep 'bind_query_recursions_total 0'"
+ "curl -sSf http://localhost:9119/metrics | grep 'bind_up 1'"
)
'';
};
@@ -168,6 +171,7 @@ let
blackbox =
{ pkgs, ... }:
{
+ testBackend = "nodes";
exporterConfig = {
enable = true;
configFile = pkgs.writeText "config.yml" (
@@ -373,16 +377,23 @@ let
};
dovecot =
- { ... }:
+ { pkgs, ... }:
{
+ testBackend = "nodes";
exporterConfig = {
enable = true;
scopes = [ "global" ];
- socketPath = "/var/run/dovecot2/old-stats";
+ socketPath = "/var/run/dovecot2/stats-reader";
user = "root"; # <- don't use user root in production
};
metricProvider = {
- services.dovecot2.enable = true;
+ services.dovecot2 = {
+ enable = true;
+ settings = {
+ dovecot_config_version = pkgs.dovecot.version;
+ dovecot_storage_version = pkgs.dovecot.version;
+ };
+ };
};
exporterTest = ''
wait_for_unit("prometheus-dovecot-exporter.service")
@@ -423,6 +434,7 @@ let
ebpf =
{ ... }:
{
+ testBackend = "nodes";
exporterConfig = {
enable = true;
names = [ "timers" ];
@@ -447,7 +459,6 @@ let
# `services.elasticsearch` is unmaintained; OpenSearch is the same
# engine class and is explicitly supported by the exporter.
services.opensearch.enable = true;
- virtualisation.memorySize = 2048;
};
exporterTest = ''
wait_for_unit("opensearch.service")
@@ -463,6 +474,7 @@ let
fail2ban =
{ ... }:
{
+ testBackend = "nodes"; # setfacl
exporterConfig = {
enable = true;
exitOnError = true;
@@ -964,6 +976,7 @@ let
modemmanager =
{ ... }:
{
+ testBackend = "nodes";
exporterConfig = {
enable = true;
refreshRate = "10s";
@@ -1099,7 +1112,7 @@ let
wait_for_unit("nginx.service")
wait_for_unit("prometheus-nextcloud-exporter.service")
wait_for_open_port(9205)
- succeed("curl -sSf http://localhost:9205/metrics | grep 'nextcloud_up 1'")
+ wait_until_succeeds("curl -sSf http://localhost:9205/metrics | grep 'nextcloud_up 1'")
'';
};
@@ -1658,24 +1671,6 @@ let
'';
};
- scaphandre =
- { ... }:
- {
- exporterConfig = {
- enable = true;
- };
- metricProvider = {
- boot.kernelModules = [ "intel_rapl_common" ];
- };
- exporterTest = ''
- wait_for_unit("prometheus-scaphandre-exporter.service")
- wait_for_open_port(8080)
- wait_until_succeeds(
- "curl -sSf 'localhost:8080/metrics'"
- )
- '';
- };
-
shelly =
{ pkgs, ... }:
{
@@ -2143,6 +2138,7 @@ let
zfs =
{ ... }:
{
+ testBackend = "nodes"; # zfs kmod
exporterConfig = {
enable = true;
};
@@ -2165,13 +2161,14 @@ lib.mapAttrs (
{ pkgs, lib, ... }:
let
testConfig = testConfigFun { inherit pkgs lib; };
- nodeName = testConfig.nodeName or exporter;
+ testBackend = testConfig.testBackend or "containers";
+ nodeName = "machine";
in
{
name = "prometheus-${exporter}-exporter";
node.pkgsReadOnly = testConfig.pkgsReadOnly or true;
- nodes.${nodeName} = lib.mkMerge [
+ ${testBackend}.${nodeName} = lib.mkMerge [
{
services.prometheus.exporters.${exporter} = testConfig.exporterConfig;
}
@@ -2196,7 +2193,6 @@ lib.mapAttrs (
"${nodeName}.${line}"
) (lib.splitString "\n" (lib.removeSuffix "\n" testConfig.exporterTest))
)}
- ${nodeName}.shutdown()
'';
meta.maintainers = [ ];
diff --git a/nixos/tests/proxy.nix b/nixos/tests/proxy.nix
index f051d429a508..1e76c7811c79 100644
--- a/nixos/tests/proxy.nix
+++ b/nixos/tests/proxy.nix
@@ -41,8 +41,8 @@ in
Require all granted
- BalancerMember http://${nodes.backend1.config.networking.hostName} retry=0
- BalancerMember http://${nodes.backend2.config.networking.hostName} retry=0
+ BalancerMember http://${nodes.backend1.networking.hostName} retry=0
+ BalancerMember http://${nodes.backend2.networking.hostName} retry=0
ProxyStatus full
diff --git a/nixos/tests/qemu-vm-credentials.nix b/nixos/tests/qemu-vm-credentials.nix
deleted file mode 100644
index 9ee2d270d8f0..000000000000
--- a/nixos/tests/qemu-vm-credentials.nix
+++ /dev/null
@@ -1,83 +0,0 @@
-{
- lib,
- pkgs,
- mechanism,
- ...
-}:
-
-let
- secret = ''
- foo
- bar
- baz
- '';
- secret-file = "bar";
-in
-
-{
- name = "qemu-vm-credentials-${mechanism}";
-
- meta.maintainers = with lib.maintainers; [ arianvp ];
-
- nodes = {
- machine = {
- virtualisation.credentials = {
- secret = {
- inherit mechanism;
- text = secret;
- };
- secret-default-mechanism = {
- text = "default-mechanism";
- };
- secret-file-nix-store = {
- inherit mechanism;
- source = pkgs.writeText "secret-file-nix-store" secret-file;
- };
- secret-file-host = {
- inherit mechanism;
- source = "./secret-file-host";
- };
- secret-file-host-binary = {
- inherit mechanism;
- source = "./secret-file-host-binary";
- };
- };
- };
- };
-
- testScript = ''
- import base64
- secret_file_host = "baz"
- # Binary data with null bytes, high bytes, and all sorts of problematic characters
- secret_file_host_binary = bytes([
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, # null and control chars
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
- 0xDE, 0xAD, 0xBE, 0xEF, # classic binary pattern
- 0xFF, 0xFE, 0xFD, 0xFC, # high bytes
- 0x00, 0x00, 0x00, 0x00, # multiple nulls
- 0x80, 0x81, 0x82, 0x83, # more high bytes
- ])
-
- with open(machine.state_dir / "secret-file-host", "w") as f:
- f.write(secret_file_host)
- with open(machine.state_dir / "secret-file-host-binary", "wb") as f2:
- f2.write(secret_file_host_binary)
-
-
- # Test text credential
- t.assertEqual(machine.succeed("systemd-creds --system cat secret").strip(), "foo\nbar\nbaz")
-
- t.assertEqual(machine.succeed("systemd-creds --system cat secret-default-mechanism").strip(), "default-mechanism")
-
- # Test credential from nix store
- t.assertEqual(machine.succeed("systemd-creds --system cat secret-file-nix-store").strip(), "${secret-file}")
-
- # Test credential from host file
- t.assertEqual(machine.succeed("systemd-creds --system cat secret-file-host").strip(), secret_file_host)
-
- # Test binary credential - verify exact binary content
- result = machine.succeed("systemd-creds --system cat secret-file-host-binary --transcode=base64").strip()
- expected = base64.b64encode(secret_file_host_binary).decode('ascii')
- t.assertEqual(result, expected, f"Binary credential mismatch: got {result}, expected {expected}")
- '';
-}
diff --git a/nixos/tests/redis.nix b/nixos/tests/redis.nix
index f878509bce35..4ff35a509145 100644
--- a/nixos/tests/redis.nix
+++ b/nixos/tests/redis.nix
@@ -19,11 +19,7 @@ let
}:
makeTest {
inherit name;
- meta.maintainers = [
- lib.maintainers.das_j
- lib.maintainers.flokli
- lib.maintainers.helsinki-Jo
- ];
+ meta.maintainers = lib.teams.redis.members;
nodes = {
machine =
diff --git a/nixos/tests/rtkit.nix b/nixos/tests/rtkit.nix
index 74bf69e02a83..295fd36a1391 100644
--- a/nixos/tests/rtkit.nix
+++ b/nixos/tests/rtkit.nix
@@ -55,7 +55,7 @@
# Provide a little logging of polkit checks - otherwise it's
# impossible to know what's going on.
- security.polkit.debug = true;
+ security.polkit.extraArgs = [ "--log-level=notice" ];
security.polkit.extraConfig = ''
polkit.addRule(function(action, subject) {
const ns = "org.freedesktop.RealtimeKit1.";
diff --git a/nixos/tests/rustfs.nix b/nixos/tests/rustfs.nix
new file mode 100644
index 000000000000..7cace30e3bfc
--- /dev/null
+++ b/nixos/tests/rustfs.nix
@@ -0,0 +1,69 @@
+{ pkgs, ... }:
+
+let
+ accessKey = "BKIKJAA5BMMU2RHO6IBB";
+ secretKey = "V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12";
+
+ rustfsPythonScript =
+ pkgs.writers.writePython3 "rustfs-test" { libraries = with pkgs.python3Packages; [ minio ]; }
+ /* python */ ''
+ import io
+ import os
+ from minio import Minio
+
+ minioClient = Minio(
+ 'localhost:9000',
+ access_key='${accessKey}',
+ secret_key='${secretKey}',
+ secure=False
+ )
+ sio = io.BytesIO()
+ sio.write(b'Test from Python')
+ sio.seek(0, os.SEEK_END)
+ sio_len = sio.tell()
+ sio.seek(0)
+ minioClient.put_object(
+ 'test-bucket',
+ 'test.txt',
+ sio,
+ sio_len,
+ content_type='text/plain'
+ )
+ '';
+
+in
+{
+ name = "rustfs";
+ meta = with pkgs.lib.maintainers; {
+ maintainers = [
+ marcel
+ ];
+ };
+
+ containers.machine =
+ { pkgs, ... }:
+ {
+ services.rustfs = {
+ enable = true;
+ environmentFile = builtins.toString (
+ pkgs.writeText "rustfs-secrets.env" ''
+ RUSTFS_ACCESS_KEY=${accessKey}
+ RUSTFS_SECRET_KEY=${secretKey}
+ ''
+ );
+ };
+
+ environment.systemPackages = with pkgs; [ minio-client ];
+ };
+
+ testScript = /* python */ ''
+ machine.wait_for_unit("rustfs.service")
+
+ machine.succeed("mc alias set rustfs http://localhost:9000 ${accessKey} ${secretKey} --api s3v4")
+ machine.succeed("mc mb rustfs/test-bucket")
+ machine.succeed("${rustfsPythonScript}")
+ assert "test-bucket" in machine.succeed("mc ls rustfs")
+ assert "Test from Python" in machine.succeed("mc cat rustfs/test-bucket/test.txt")
+ machine.succeed("mc rb --force rustfs/test-bucket")
+ '';
+}
diff --git a/nixos/tests/sabnzbd-module.nix b/nixos/tests/sabnzbd-module.nix
index 3eb9bd21e2ff..4398c5401832 100644
--- a/nixos/tests/sabnzbd-module.nix
+++ b/nixos/tests/sabnzbd-module.nix
@@ -105,6 +105,26 @@ in
};
};
+ nodes.with_secret_values =
+ { pkgs, ... }:
+ {
+ config = {
+ services.sabnzbd = {
+ enable = true;
+ settings = {
+ misc.api_key = "@api_key@";
+ misc.nzb_key = "@nzb_key@";
+ };
+ secretValues = {
+ # Just for testing; don't use world readable files from the Nix
+ # store in production!
+ "@api_key@" = builtins.toFile "api_key" "dummyapikey";
+ "@nzb_key@" = builtins.toFile "nzb_key" "dummynzbkey";
+ };
+ };
+ };
+ };
+
testScript = ''
def wait_for_up(m):
m.wait_for_unit("sabnzbd.service")
@@ -113,9 +133,12 @@ in
wait_for_up(machine)
wait_for_up(with_writeable_config)
wait_for_up(with_raw_config_file)
+ wait_for_up(with_secret_values)
machine.succeed("do_test")
with_writeable_config.succeed("do_test")
with_raw_config_file.succeed("do_test_2")
+ with_secret_values.succeed("grep dummyapikey /var/lib/sabnzbd/sabnzbd.ini")
+ with_secret_values.succeed("grep dummynzbkey /var/lib/sabnzbd/sabnzbd.ini")
'';
}
diff --git a/nixos/tests/scaphandre.nix b/nixos/tests/scaphandre.nix
deleted file mode 100644
index bf9854b1c919..000000000000
--- a/nixos/tests/scaphandre.nix
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- name = "scaphandre";
-
- nodes.scaphandre =
- { pkgs, ... }:
- {
- boot.kernelModules = [ "intel_rapl_common" ];
-
- environment.systemPackages = [ pkgs.scaphandre ];
- };
-
- testScript = ''
- scaphandre.start()
- scaphandre.wait_until_succeeds(
- "scaphandre stdout -t 4",
- )
- '';
-}
diff --git a/nixos/tests/scx/default.nix b/nixos/tests/scx/default.nix
index 6865390737f8..41c7b84c90b7 100644
--- a/nixos/tests/scx/default.nix
+++ b/nixos/tests/scx/default.nix
@@ -13,16 +13,19 @@
specialisation = {
beerland.configuration.services.scx.scheduler = "scx_beerland";
bpfland.configuration.services.scx.scheduler = "scx_bpfland";
+ cake.configuration.services.scx.scheduler = "scx_cake";
+ chaos.configuration.services.scx.scheduler = "scx_chaos";
cosmos.configuration.services.scx.scheduler = "scx_cosmos";
flash.configuration.services.scx.scheduler = "scx_flash";
- flatcg.configuration.services.scx.scheduler = "scx_flatcg";
+ flow.configuration.services.scx.scheduler = "scx_flow";
+ forge.configuration.services.scx.scheduler = "scx_forge";
lavd.configuration.services.scx.scheduler = "scx_lavd";
- nest.configuration.services.scx.scheduler = "scx_nest";
p2dq.configuration.services.scx.scheduler = "scx_p2dq";
+ pandemonium.configuration.services.scx.scheduler = "scx_pandemonium";
rlfifo.configuration.services.scx.scheduler = "scx_rlfifo";
rustland.configuration.services.scx.scheduler = "scx_rustland";
rusty.configuration.services.scx.scheduler = "scx_rusty";
- simple.configuration.services.scx.scheduler = "scx_simple";
+ tickless.configuration.services.scx.scheduler = "scx_tickless";
};
};
@@ -30,16 +33,19 @@
specialisation = [
"beerland",
"bpfland",
+ "cake",
+ "chaos",
"cosmos",
"flash",
- "flatcg",
+ "flow",
+ "forge",
"lavd",
- "nest",
"p2dq",
+ "pandemonium",
"rlfifo",
"rustland",
"rusty",
- "simple"
+ "tickless",
]
def activate_specialisation(name: str):
diff --git a/nixos/tests/service-runner.nix b/nixos/tests/service-runner.nix
index e7a552b9e536..ce7fecdb143b 100644
--- a/nixos/tests/service-runner.nix
+++ b/nixos/tests/service-runner.nix
@@ -29,7 +29,7 @@
machine.succeed(
"""
mkdir -p /run/nginx /var/log/nginx /var/cache/nginx
- ${nodes.machine.config.systemd.services.nginx.runner} >&2 &
+ ${nodes.machine.systemd.services.nginx.runner} >&2 &
echo $!>my-nginx.pid
"""
)
diff --git a/nixos/tests/shadow/default.nix b/nixos/tests/shadow/default.nix
new file mode 100644
index 000000000000..ba773f93f073
--- /dev/null
+++ b/nixos/tests/shadow/default.nix
@@ -0,0 +1,5 @@
+{ runTest }:
+{
+ login = runTest ./login.nix;
+ system = runTest ./system.nix;
+}
diff --git a/nixos/tests/shadow.nix b/nixos/tests/shadow/login.nix
similarity index 100%
rename from nixos/tests/shadow.nix
rename to nixos/tests/shadow/login.nix
diff --git a/nixos/tests/shadow/system.nix b/nixos/tests/shadow/system.nix
new file mode 100644
index 000000000000..fbed9be8beba
--- /dev/null
+++ b/nixos/tests/shadow/system.nix
@@ -0,0 +1,147 @@
+{ pkgs, ... }:
+let
+ # Create a Python environment for the controller with all necessary test framework dependencies
+ controllerPython = pkgs.python3.withPackages (ps: [
+ ps.flaky
+ ps.jc
+ ps.pytest
+ ps.pytest-mh
+ ps.pytest-ticket
+ ]);
+
+ shadowHostName = "shadowhost";
+in
+{
+ name = "shadow-system-tests";
+
+ meta.maintainers = with pkgs.lib.maintainers; [ joaosreis ];
+
+ nodes = {
+ # The target host: runs sshd, has shadow and other test dependencies installed, mutable users, and some specific settings to match the expectations of the test suite
+ shadowhost =
+ { pkgs, ... }:
+ {
+ networking.hostName = shadowHostName;
+ services.openssh = {
+ enable = true;
+ settings = {
+ PermitRootLogin = "yes";
+ PasswordAuthentication = false;
+ };
+ };
+
+ users.mutableUsers = true;
+
+ environment.systemPackages = with pkgs; [
+ shadow
+ expect
+ ];
+
+ users.defaultUserShell = "/bin/sh";
+
+ security.loginDefs.settings = {
+ PASS_MAX_DAYS = 99999;
+ PASS_MIN_DAYS = 0;
+ PASS_WARN_AGE = 7;
+ USERGROUPS_ENAB = "yes";
+ CREATE_HOME = "yes";
+ UID_MIN = 1001;
+ GID_MIN = 1001;
+ };
+
+ security.pam.services = {
+ newusers.text = ''
+ auth required pam_permit.so
+ account required pam_permit.so
+ password required pam_permit.so
+ session required pam_permit.so
+ '';
+ };
+
+ services.envfs.enable = true;
+ };
+
+ # The controller: runs pytest-mh against the shadow host
+ controller =
+ { pkgs, ... }:
+ {
+ environment.systemPackages = [
+ controllerPython
+ pkgs.openssh
+ ];
+ };
+
+ };
+
+ testScript = ''
+ import textwrap
+
+ start_all()
+
+ # ------------------------------------------------------------------
+ # 1. Generate an SSH keypair on the controller and authorise it
+ # on the shadow host
+ # ------------------------------------------------------------------
+ controller.succeed("mkdir -p /root/.ssh && chmod 700 /root/.ssh")
+ controller.succeed(
+ "ssh-keygen -t ed25519 -N \'\' -f /root/.ssh/id_ed25519 2>&1"
+ )
+ pub_key = controller.succeed("cat /root/.ssh/id_ed25519.pub").strip()
+
+ # Inject the generated public key into the shadow host at runtime
+ shadowhost.succeed("mkdir -p /root/.ssh && chmod 700 /root/.ssh")
+ shadowhost.succeed(
+ f"echo '{pub_key}' >> /root/.ssh/authorized_keys && "
+ "chmod 600 /root/.ssh/authorized_keys"
+ )
+
+ # ------------------------------------------------------------------
+ # 2. Make sure the shadow host has a writable /etc/login.defs,
+ # since the test framework expects to be able to write to it.
+ # ------------------------------------------------------------------
+ shadowhost.succeed(
+ "cp --remove-destination $(readlink -f /etc/login.defs) /etc/login.defs && "
+ "chmod 644 /etc/login.defs"
+ )
+
+ # ------------------------------------------------------------------
+ # 3. Copy the upstream test suite onto the controller
+ # ------------------------------------------------------------------
+ controller.succeed(
+ "cp -r ${pkgs.shadow.passthru.testFramework} /root/shadow-tests && "
+ "chmod -R u+w /root/shadow-tests"
+ )
+
+ # ------------------------------------------------------------------
+ # 4. Write the mhc.yaml topology config
+ # This tells pytest-mh where the shadow host is and which role
+ # it plays. The hostname must match the NixOS node name.
+ # ------------------------------------------------------------------
+ controller.succeed(textwrap.dedent("""
+ cat > /root/shadow-tests/mhc.yaml << 'EOF'
+ domains:
+ - id: shadow
+ hosts:
+ - hostname: ${shadowHostName}
+ role: shadow
+ ssh:
+ user: root
+ private_key: /root/.ssh/id_ed25519
+ EOF
+ """))
+
+
+ # ------------------------------------------------------------------
+ # 5. Run the upstream pytest-mh test suite from the controller
+ # ------------------------------------------------------------------
+ shadowhost.wait_for_unit("sshd.service")
+ # gpasswd tests are disabled, since they rely on specific behavior of the gpasswd command that is not applicable to NixOS
+ controller.succeed(
+ "cd /root/shadow-tests && "
+ "${controllerPython}/bin/pytest "
+ "--mh-config=mhc.yaml "
+ "--deselect=tests/test_gpasswd.py "
+ "-v tests/"
+ )
+ '';
+}
diff --git a/nixos/tests/shoko.nix b/nixos/tests/shoko.nix
index dfddc19b83c5..7fe68abbbd52 100644
--- a/nixos/tests/shoko.nix
+++ b/nixos/tests/shoko.nix
@@ -17,10 +17,7 @@
machine.succeed("curl --fail http://localhost:8111")
'';
- meta.maintainers = with lib.maintainers; [
- diniamo
- nanoyaki
- ];
+ meta.maintainers = with lib.maintainers; [ nanoyaki ];
}
);
diff --git a/nixos/tests/signal-desktop.nix b/nixos/tests/signal-desktop.nix
index 398f8603308c..a6c5d08c0d30 100644
--- a/nixos/tests/signal-desktop.nix
+++ b/nixos/tests/signal-desktop.nix
@@ -42,7 +42,7 @@ in
testScript =
{ nodes, ... }:
let
- user = nodes.machine.config.users.users.alice;
+ user = nodes.machine.users.users.alice;
in
''
start_all()
diff --git a/nixos/tests/simple-container.nix b/nixos/tests/simple-container.nix
index 269853423651..5cd3478f3d40 100644
--- a/nixos/tests/simple-container.nix
+++ b/nixos/tests/simple-container.nix
@@ -1,11 +1,16 @@
{
name = "simple-container";
- containers.machine = { };
+ containers = {
+ machine = { pkgs, ... }: {
+ users.users.root.packages = [ pkgs.hello ];
+ };
+ noprofile = { };
+ };
testScript = ''
start_all()
- machine.wait_for_unit("multi-user.target")
- machine.shutdown()
+ machine.succeed("hello")
+ noprofile.fail("hello")
'';
}
diff --git a/nixos/tests/sing-box.nix b/nixos/tests/sing-box.nix
index cc890fa6fe69..820675d69a11 100644
--- a/nixos/tests/sing-box.nix
+++ b/nixos/tests/sing-box.nix
@@ -511,6 +511,31 @@ in
};
};
};
+
+ empty_settings =
+ { ... }:
+ {
+ environment.etc."sing-box/config.json".text = builtins.toJSON {
+ inbounds = [
+ {
+ type = "mixed";
+ listen = "127.0.0.1";
+ listen_port = 1088;
+ }
+ ];
+ outbounds = [
+ {
+ type = "direct";
+ tag = "outbound:direct";
+ }
+ ];
+ };
+
+ services.sing-box = {
+ enable = true;
+ settings = { };
+ };
+ };
};
testScript = ''
@@ -558,6 +583,9 @@ in
fakeip.wait_for_unit("sing-box.service")
fakeip.wait_until_succeeds("ip route get ${hosts."${target_host}"} | grep 'dev ${tunInbound.interface_name}'")
fakeip.succeed("dig +short A ${target_host} @${target_host} | grep '^198.18.'")
+
+ with subtest("empty settings"):
+ empty_settings.wait_for_unit("sing-box.service")
'';
}
diff --git a/nixos/tests/slipshow.nix b/nixos/tests/slipshow.nix
index abbbc6361e88..c8bd4158af5b 100644
--- a/nixos/tests/slipshow.nix
+++ b/nixos/tests/slipshow.nix
@@ -8,7 +8,7 @@
meta.maintainers = with lib.maintainers; [ ethancedwards8 ];
- nodes.machine = {
+ containers.machine = {
environment.systemPackages = with pkgs; [ slipshow ];
environment.etc."slipshow".source = pkgs.fetchFromGitHub {
diff --git a/nixos/tests/stardust-xr/atmosphere.nix b/nixos/tests/stardust-xr/atmosphere.nix
new file mode 100644
index 000000000000..7eb2f7b2778e
--- /dev/null
+++ b/nixos/tests/stardust-xr/atmosphere.nix
@@ -0,0 +1,54 @@
+{ ... }:
+{
+ name = "stardust-xr-atmosphere";
+
+ # Doesn't understand @polling_condition
+ skipTypeCheck = true;
+
+ nodes.machine =
+ {
+ lib,
+ pkgs,
+ config,
+ ...
+ }:
+
+ {
+ imports = [ ./common.nix ];
+
+ virtualisation.memorySize = 4096;
+
+ systemd.user.services.stardust-xr-atmosphere = {
+ wantedBy = [ "xdg-desktop-autostart.target" ];
+ requires = [ "stardust-xr-server.service" ];
+ after = [ "stardust-xr-server.service" ];
+ script = ''
+ set -eufx pipefail
+ ${lib.getExe pkgs.stardust-xr-atmosphere} install ${pkgs.stardust-xr-atmosphere}/share/atmosphere/default_envs/the_grid
+ ${lib.getExe pkgs.stardust-xr-atmosphere} set-default the_grid
+ ${lib.getExe pkgs.stardust-xr-atmosphere} show
+ '';
+ environment.RUST_BACKTRACE = "full";
+ };
+ };
+
+ testScript =
+ { nodes, ... }:
+ ''
+ @polling_condition()
+ def atmosphere_running():
+ machine.wait_for_unit("stardust-xr-atmosphere.service", "alice")
+
+ with subtest("Ensure X11 starts"):
+ start_all()
+ machine.succeed("loginctl enable-linger alice")
+ machine.wait_for_x()
+
+ with subtest("Ensure system works"):
+ with atmosphere_running:
+ # TODO(@Pandapip1): 20 seconds should be long enough for anything, but this is theoretically flaky
+ # Adding systemd notify support to stardust-xr-atmosphere should resolve this
+ machine.sleep(20)
+ machine.screenshot("screen")
+ '';
+}
diff --git a/nixos/tests/stardust-xr/common.nix b/nixos/tests/stardust-xr/common.nix
new file mode 100644
index 000000000000..bbc5af59b772
--- /dev/null
+++ b/nixos/tests/stardust-xr/common.nix
@@ -0,0 +1,23 @@
+{
+ lib,
+ pkgs,
+ ...
+}:
+
+{
+ imports = [ ../common/openxr.nix ];
+
+ # TODO(@Pandapip1): For the time being, Stardust doesn't like controllers rather than hand tracking
+ services.monado.enable = lib.mkForce false;
+
+ systemd.user.services.stardust-xr-server = {
+ wantedBy = [ "xdg-desktop-autostart.target" ];
+ # requires = [ "monado.service" ];
+ serviceConfig = {
+ Type = "notify";
+ NotifyAccess = "all";
+ ExecStart = "${lib.getExe pkgs.stardust-xr-server} -e ${pkgs.writeShellScript "notifyReady" "systemd-notify --ready"}";
+ };
+ environment.RUST_BACKTRACE = "full";
+ };
+}
diff --git a/nixos/tests/stardust-xr/flatland.nix b/nixos/tests/stardust-xr/flatland.nix
new file mode 100644
index 000000000000..748a1e0cbd84
--- /dev/null
+++ b/nixos/tests/stardust-xr/flatland.nix
@@ -0,0 +1,57 @@
+{ ... }:
+{
+ name = "stardust-xr-flatland";
+
+ # Doesn't understand @polling_condition
+ skipTypeCheck = true;
+
+ nodes.machine =
+ {
+ lib,
+ pkgs,
+ config,
+ ...
+ }:
+
+ {
+ imports = [ ./common.nix ];
+
+ systemd.user.services.stardust-xr-flatland = {
+ wantedBy = [ "xdg-desktop-autostart.target" ];
+ requires = [ "stardust-xr-server.service" ];
+ after = [ "stardust-xr-server.service" ];
+ script = lib.getExe pkgs.stardust-xr-flatland;
+ environment.RUST_BACKTRACE = "full";
+ };
+
+ systemd.user.services.test-wayland-app = {
+ wantedBy = [ "xdg-desktop-autostart.target" ];
+ requires = [ "stardust-xr-flatland.service" ];
+ after = [ "stardust-xr-flatland.service" ];
+ script = lib.getExe pkgs.wayland-colorbar;
+ environment = {
+ DISPLAY = "";
+ WAYLAND_DISPLAY = "wayland-0";
+ };
+ };
+ };
+
+ testScript =
+ { nodes, ... }:
+ ''
+ @polling_condition()
+ def wayland_client_running():
+ machine.wait_for_unit("test-wayland-app.service", "alice")
+
+ with subtest("Ensure X11 starts"):
+ start_all()
+ machine.succeed("loginctl enable-linger alice")
+ machine.wait_for_x()
+
+ with subtest("Ensure system works"):
+ with wayland_client_running:
+ # TODO: 20 seconds should be long enough for anything, but this is theoretically flaky
+ machine.sleep(20)
+ machine.screenshot("screen")
+ '';
+}
diff --git a/nixos/tests/sunshine.nix b/nixos/tests/sunshine.nix
index e310b94df1a7..80f8e96b89eb 100644
--- a/nixos/tests/sunshine.nix
+++ b/nixos/tests/sunshine.nix
@@ -40,9 +40,10 @@
./common/x11.nix
];
- environment.systemPackages = with pkgs; [
- moonlight-qt
- ];
+ programs.moonlight-qt = {
+ enable = true;
+ capSysNice = true;
+ };
};
@@ -52,6 +53,7 @@
# start the tests, wait for sunshine to be up
start_all()
sunshine.wait_for_open_port(48010,"localhost")
+ moonlight.succeed("${pkgs.libcap}/bin/getcap \"$(command -v moonlight)\" | grep -q 'cap_sys_nice'")
# set the admin username/password, restart sunshine
sunshine.execute("sunshine --creds sunshine sunshine")
diff --git a/nixos/tests/sway.nix b/nixos/tests/sway.nix
index 6de050418592..6427d688db7d 100644
--- a/nixos/tests/sway.nix
+++ b/nixos/tests/sway.nix
@@ -194,7 +194,7 @@
swaymsg("exec swaylock")
machine.wait_until_succeeds("pgrep -xf swaylock")
machine.sleep(3)
- machine.send_chars("${nodes.machine.config.users.users.alice.password}")
+ machine.send_chars("${nodes.machine.users.users.alice.password}")
machine.send_key("ret")
machine.wait_until_fails("pgrep -xf swaylock")
diff --git a/nixos/tests/switch-test.nix b/nixos/tests/switch-test.nix
index 2dbc9386f8ae..b81d84086f2e 100644
--- a/nixos/tests/switch-test.nix
+++ b/nixos/tests/switch-test.nix
@@ -43,6 +43,19 @@ let
server.serve_forever()
'';
+ # Per-connection (Accept=yes) socket-activated service that requires the
+ # connection socket to be passed via socket activation and fails when started
+ # without one. It greets the client and stays alive for as long as the
+ # connection is held open.
+ acceptSocketTest = pkgs.writeShellScript "accept-socket-test.sh" ''
+ if [ "''${LISTEN_FDS:-0}" -lt 1 ]; then
+ echo "Expected exactly one socket, got 0" >&2
+ exit 4
+ fi
+ printf hello >&3
+ exec ${lib.getExe' pkgs.coreutils "cat"} <&3 >/dev/null
+ '';
+
in
{
name = "switch-test";
@@ -508,6 +521,32 @@ in
};
};
+ accept-socket.configuration = {
+ systemd.sockets.accept-socket = {
+ wantedBy = [ "sockets.target" ];
+ listenStreams = [ "/run/accept-test.sock" ];
+ socketConfig = {
+ Accept = "yes";
+ SocketMode = "0777";
+ };
+ };
+ systemd.services."accept-socket@" = {
+ description = "A per-connection socket-activated service";
+ serviceConfig.ExecStart = acceptSocketTest;
+ };
+ };
+
+ accept-socket-service-modified.configuration = {
+ imports = [ accept-socket.configuration ];
+ systemd.services."accept-socket@".serviceConfig.X-Test = "test";
+ };
+
+ socket-activated-without-socket.configuration = {
+ imports = [ simple-socket.configuration ];
+ systemd.sockets.socket-activated.enable = false;
+ systemd.services.socket-activated.wantedBy = [ "multi-user.target" ];
+ };
+
mount.configuration = {
systemd.mounts = [
{
@@ -1587,6 +1626,49 @@ in
if machine.succeed("socat - UNIX-CONNECT:/run/test.sock") != "hello":
raise Exception("Socket was not properly activated after the service was restarted")
+ # A service transitioning to socket activation is not started directly,
+ # it's left for the newly started socket to activate on demand
+ switch_to_specialisation("${machine}", "socket-activated-without-socket")
+ machine.succeed("systemctl is-active socket-activated.service")
+ out = switch_to_specialisation("${machine}", "simple-socket-stop-if-changed")
+ assert_contains(out, "stopping the following units: socket-activated.service\n")
+ assert_lacks(out, "\nstarting the following units:")
+ assert_contains(out, "the following new units were started: socket-activated.socket\n")
+ machine.succeed("[ -S /run/test.sock ]")
+ if machine.succeed("socat - UNIX-CONNECT:/run/test.sock") != "hello":
+ raise Exception("Socket was not properly activated after the transition")
+
+ with subtest("socket-activated services with Accept=yes"):
+ # Socket-activated services don't get started, just the socket
+ machine.fail("[ -S /run/accept-test.sock ]")
+ out = switch_to_specialisation("${machine}", "accept-socket")
+ assert_contains(out, "the following new units were started: accept-socket.socket\n")
+ machine.succeed("[ -S /run/accept-test.sock ]")
+
+ # Hold a connection open so a per-connection instance keeps running
+ machine.succeed("socat EXEC:'sleep infinity' UNIX-CONNECT:/run/accept-test.sock >&2 &")
+ instance = machine.wait_until_succeeds(
+ "systemctl list-units --no-legend --state=running 'accept-socket@*.service' "
+ + "| grep -m1 -o 'accept-socket@[^ ]*\\.service'"
+ ).strip()
+
+ # Changing the templated service must stop the running instance and
+ # restart the socket instead of (re)starting the per-connection
+ # instance, which cannot be started without a connection socket
+ out = switch_to_specialisation("${machine}", "accept-socket-service-modified")
+ assert_contains(out, "stopping the following units:")
+ assert_contains(out, instance)
+ assert_contains(out, "accept-socket.socket")
+ assert_contains(out, "\nstarting the following units: accept-socket.socket\n")
+ assert_lacks(out, "NOT restarting the following changed units:")
+ assert_lacks(out, "\nrestarting the following units:")
+ # The per-connection instance must not be (re)started
+ starting = out[out.index("\nstarting the following units:") :]
+ assert instance not in starting, f"instance {instance} should not be (re)started"
+ # Socket-activation of the unit still works
+ if machine.succeed("socat - UNIX-CONNECT:/run/accept-test.sock &2
+ exit 1
+ '';
+ });
+in
+
+# Please the callTest pattern.
+#
+# runTest results already go through findTests/callTest.
+# For plain derivations like `eval`, we apply callTest directly.
+pkgs.lib.mapAttrs (
+ _: v:
+ if v ? test then
+ v
+ else
+ callTest {
+ test = v;
+ driver = v;
+ }
+) (suite // { systemd-eval = systemdEval; })
diff --git a/nixos/tests/systemd-boot.nix b/nixos/tests/systemd-boot.nix
index c2d9131f1974..f36d3870f98e 100644
--- a/nixos/tests/systemd-boot.nix
+++ b/nixos/tests/systemd-boot.nix
@@ -460,6 +460,9 @@ in
nodes.machine = common;
testScript =
+ let
+ oldVersion = "222";
+ in
# python
''
machine.succeed("mount -o remount,rw /boot")
@@ -469,13 +472,12 @@ in
machine.succeed(
"""
find /boot -iname '*boot*.efi' -print0 | \
- xargs -0 -I '{}' sed -i 's/#### LoaderInfo: systemd-boot .* ####/#### LoaderInfo: systemd-boot 000.0-1-notnixos ####/' '{}'
+ xargs -0 -I '{}' sed -i 's/#### LoaderInfo: systemd-boot .* ####/#### LoaderInfo: systemd-boot ${oldVersion} ####/' '{}'
"""
)
return machine.succeed("/run/current-system/bin/switch-to-configuration boot 2>&1")
output = switch()
- assert "updating systemd-boot from 000.0-1-notnixos to " in output, "Couldn't find systemd-boot update message"
assert 'to "/boot/EFI/systemd/systemd-bootx64.efi"' in output, "systemd-boot not copied to to /boot/EFI/systemd/systemd-bootx64.efi"
assert 'to "/boot/EFI/BOOT/BOOTX64.EFI"' in output, "systemd-boot not copied to to /boot/EFI/BOOT/BOOTX64.EFI"
@@ -486,9 +488,12 @@ in
"mv /boot/EFI/BOOT/bootx64.efi.new /boot/EFI/BOOT/bootx64.efi",
)
output = switch()
- assert "updating systemd-boot from 000.0-1-notnixos to " in output, "Couldn't find systemd-boot update message"
assert 'to "/boot/EFI/systemd/systemd-bootx64.efi"' in output, "systemd-boot not copied to to /boot/EFI/systemd/systemd-bootx64.efi"
assert 'to "/boot/EFI/BOOT/BOOTX64.EFI"' in output, "systemd-boot not copied to to /boot/EFI/BOOT/BOOTX64.EFI"
+
+ with subtest("Test that switching with an up-to-date bootloader is a no-op"):
+ output = machine.succeed("/run/current-system/bin/switch-to-configuration boot 2>&1")
+ assert "same boot loader version in place already" in output, "Expected bootctl to skip already-current binary"
'';
}
);
diff --git a/nixos/tests/systemd-initrd-non-nixos.nix b/nixos/tests/systemd-initrd-non-nixos.nix
new file mode 100644
index 000000000000..0f564af6504a
--- /dev/null
+++ b/nixos/tests/systemd-initrd-non-nixos.nix
@@ -0,0 +1,68 @@
+{ lib, pkgs, ... }:
+let
+ marker = "REACHED NON-NIXOS INIT AS PID 1";
+
+ # A non-NixOS init (no prepare-root). We use a store path, not literal
+ # /bin/sh: a fresh disk has no /bin/sh yet (it is created by the activation a
+ # non-NixOS init skips), while the store is always mounted; init=/bin/sh works
+ # the same on a real system. Writes a marker, then stays alive so PID 1 lives.
+ nonNixosInit = pkgs.writeShellScriptBin "non-nixos" ''
+ echo "${marker}" > /dev/console
+ exec ${pkgs.coreutils}/bin/sleep infinity
+ '';
+
+ common = {
+ boot.initrd.systemd.enable = true;
+
+ virtualisation = {
+ # tmpfs root, like real non-NixOS closure init= microvm consumers.
+ diskImage = null;
+
+ graphics = false;
+ };
+
+ # Speed up wait_for_console.
+ boot.consoleLogLevel = lib.mkForce 3;
+ boot.initrd.systemd.managerEnvironment.SYSTEMD_LOG_LEVEL = "warning";
+
+ # switch-root needs an os-release on the target root. A real system has one
+ # on disk; our fresh tmpfs does not, so create it.
+ boot.initrd.systemd.tmpfiles.settings."10-os-release"."/sysroot/etc/os-release".f = {
+ mode = "0644";
+ argument = "ID=test-non-nixos";
+ };
+ };
+in
+{
+ name = "systemd-initrd-non-nixos";
+
+ nodes = {
+ bashActivation = common;
+
+ nixosInit = {
+ imports = [ common ];
+ system.nixos-init.enable = true;
+ system.etc.overlay.enable = true;
+ services.userborn.enable = true;
+ };
+ };
+
+ testScript = ''
+ import os
+
+ # The last init= on the cmdline wins; QEMU_KERNEL_PARAMS is appended after
+ # the default one, so this boots our non-NixOS init.
+ os.environ["QEMU_KERNEL_PARAMS"] = "init=${lib.getExe nonNixosInit}"
+
+ start_all()
+
+ # If a code path does not skip the non-NixOS init, switch-root is blocked and
+ # the machine drops to emergency mode: the marker never appears and the wait
+ # times out.
+ with subtest("bash initrd-nixos-activation skips a non-NixOS init"):
+ bashActivation.wait_for_console_text("${marker}", timeout=300)
+
+ with subtest("nixos-init switches to a non-NixOS init directly"):
+ nixosInit.wait_for_console_text("${marker}", timeout=300)
+ '';
+}
diff --git a/nixos/tests/systemd-initrd-simple.nix b/nixos/tests/systemd-initrd-simple.nix
index 191a23abb2e4..b02616e1b772 100644
--- a/nixos/tests/systemd-initrd-simple.nix
+++ b/nixos/tests/systemd-initrd-simple.nix
@@ -1,15 +1,15 @@
+{ pkgs, ... }:
{
name = "systemd-initrd-simple";
- nodes.machine =
- { pkgs, ... }:
- {
- testing.initrdBackdoor = true;
- boot.initrd.systemd.enable = true;
- virtualisation.fileSystems."/".autoResize = true;
- };
+ nodes.machine = {
+ testing.initrdBackdoor = true;
+ boot.initrd.systemd.enable = true;
+ virtualisation.fileSystems."/".autoResize = true;
+ };
testScript =
+ { nodes, ... }:
# python
''
import subprocess
@@ -43,7 +43,7 @@
oldAvail = machine.succeed("df --output=avail / | sed 1d")
machine.shutdown()
- subprocess.check_call(["qemu-img", "resize", "vm-state-machine/machine.qcow2", "+1G"])
+ subprocess.check_call(["${nodes.machine.virtualisation.qemu.package}/bin/qemu-img", "resize", "vm-state-machine/machine.qcow2", "+1G"])
machine.start()
machine.switch_root()
diff --git a/nixos/tests/systemd-journal-gateway.nix b/nixos/tests/systemd-journal-gateway.nix
index 52c45033113c..17b454d9595e 100644
--- a/nixos/tests/systemd-journal-gateway.nix
+++ b/nixos/tests/systemd-journal-gateway.nix
@@ -1,71 +1,27 @@
-{ lib, pkgs, ... }:
+{ pkgs, ... }:
{
name = "systemd-journal-gateway";
meta = with pkgs.lib.maintainers; {
maintainers = [
minijackson
- raitobezarius
];
};
- # Named client for coherence with the systemd-journal-upload test, and for
- # certificate validation
+ # Named client for coherence with the systemd-journal-upload test.
nodes.client = {
- services.journald.gateway = {
- enable = true;
- cert = "/run/secrets/client/cert.pem";
- key = "/run/secrets/client/key.pem";
- trust = "/run/secrets/ca.cert.pem";
- };
+ services.journald.gateway.enable = true;
};
testScript = ''
import json
- import subprocess
- import tempfile
-
- tmpdir_o = tempfile.TemporaryDirectory()
- tmpdir = tmpdir_o.name
-
- def generate_pems(domain: str):
- subprocess.run(
- [
- "${pkgs.minica}/bin/minica",
- "--ca-key=ca.key.pem",
- "--ca-cert=ca.cert.pem",
- f"--domains={domain}",
- ],
- cwd=str(tmpdir),
- )
-
- with subtest("Creating keys and certificates"):
- generate_pems("server")
- generate_pems("client")
-
- client.wait_for_unit("multi-user.target")
-
- def copy_pem(file: str):
- client.copy_from_host(source=f"{tmpdir}/{file}", target=f"/run/secrets/{file}")
- client.succeed(f"chmod 600 /run/secrets/{file} && chown systemd-journal-gateway /run/secrets/{file}")
-
- with subtest("Copying keys and certificates"):
- client.succeed("mkdir -p /run/secrets/{client,server}")
- copy_pem("server/cert.pem")
- copy_pem("server/key.pem")
- copy_pem("client/cert.pem")
- copy_pem("client/key.pem")
- copy_pem("ca.cert.pem")
client.wait_for_unit("multi-user.target")
curl = '${pkgs.curl}/bin/curl'
accept_json = '--header "Accept: application/json"'
- cacert = '--cacert /run/secrets/ca.cert.pem'
- cert = '--cert /run/secrets/server/cert.pem'
- key = '--key /run/secrets/server/key.pem'
- base_url = 'https://client:19531'
+ base_url = 'http://client:19531'
- curl_cli = f"{curl} {accept_json} {cacert} {cert} {key} --fail"
+ curl_cli = f"{curl} {accept_json} --fail"
machine_info = client.succeed(f"{curl_cli} {base_url}/machine")
assert json.loads(machine_info)["hostname"] == "client", "wrong machine name"
@@ -79,11 +35,8 @@
client.succeed(f"systemd-cat --identifier={identifier} <<< '{message}'")
- # max-time is a workaround against a bug in systemd-journal-gatewayd where
- # if TLS is enabled, the connection is never closed. Since it will timeout,
- # we ignore the return code.
entries = client.succeed(
- f"{curl_cli} --max-time 5 {base_url}/entries?SYSLOG_IDENTIFIER={identifier} || true"
+ f"{curl_cli} {base_url}/entries?SYSLOG_IDENTIFIER={identifier}"
)
# Number of entries should be only 1
diff --git a/nixos/tests/systemd-journal-upload.nix b/nixos/tests/systemd-journal-upload.nix
index af7817bd97d8..f01ed17019f8 100644
--- a/nixos/tests/systemd-journal-upload.nix
+++ b/nixos/tests/systemd-journal-upload.nix
@@ -4,52 +4,87 @@
meta = with pkgs.lib.maintainers; {
maintainers = [
minijackson
- raitobezarius
];
};
+ # systemd in Nixpkgs is built without GnuTLS, so systemd-journal-remote
+ # cannot terminate TLS itself. We put nginx in front of it with mutual TLS
+ # and have systemd-journal-upload (which uses curl+openssl) talk HTTPS to
+ # nginx. This exercises both the recommended migration path and verifies
+ # that journal-upload's TLS support still works.
nodes.server =
- { nodes, ... }:
+ { lib, nodes, ... }:
{
+
services.journald.remote = {
enable = true;
- listen = "http";
settings.Remote = {
- ServerCertificateFile = "/run/secrets/sever.cert.pem";
- ServerKeyFile = "/run/secrets/sever.key.pem";
- TrustedCertificateFile = "/run/secrets/ca.cert.pem";
Seal = true;
};
};
- networking.firewall.allowedTCPPorts = [ nodes.server.services.journald.remote.port ];
- };
+ # Keep journal-remote loopback-only; only nginx is exposed to the network.
+ systemd.sockets.systemd-journal-remote.listenStreams = lib.mkForce [
+ ""
+ "127.0.0.1:${toString nodes.server.services.journald.remote.port}"
+ ];
- nodes.client =
- { lib, nodes, ... }:
- {
- services.journald.upload = {
+ virtualisation.credentials = {
+ "ca.cert.pem".source = "./ca.cert.pem";
+ "server.cert.pem".source = "./server.cert.pem";
+ "server.key.pem".source = "./server.key.pem";
+ };
+ systemd.services.nginx.serviceConfig.ImportCredential = [
+ "server.cert.pem"
+ "server.key.pem"
+ "ca.cert.pem"
+ ];
+ services.nginx = {
enable = true;
- settings.Upload = {
- URL = "http://server:${toString nodes.server.services.journald.remote.port}";
- ServerCertificateFile = "/run/secrets/client.cert.pem";
- ServerKeyFile = "/run/secrets/client.key.pem";
- TrustedCertificateFile = "/run/secrets/ca.cert.pem";
+ virtualHosts."server" = {
+ onlySSL = true;
+ http2 = false;
+ sslCertificate = "/run/credentials/nginx.service/server.cert.pem";
+ sslCertificateKey = "/run/credentials/nginx.service/server.key.pem";
+ extraConfig = ''
+ ssl_client_certificate /run/credentials/nginx.service/ca.cert.pem;
+ ssl_verify_client on;
+ '';
+ locations."/".proxyPass = "http://127.0.0.1:${toString nodes.server.services.journald.remote.port}";
};
};
- # Wait for the PEMs to arrive
- systemd.services.systemd-journal-upload.wantedBy = lib.mkForce [ ];
- systemd.paths.systemd-journal-upload = {
- wantedBy = [ "default.target" ];
- # This file must be copied last
- pathConfig.PathExists = [ "/run/secrets/ca.cert.pem" ];
+ networking.firewall.allowedTCPPorts = [ 443 ];
+ };
+
+ nodes.client =
+ { lib, ... }:
+ {
+ virtualisation.credentials = {
+ "ca.cert.pem".source = "./ca.cert.pem";
+ "client.cert.pem".source = "./client.cert.pem";
+ "client.key.pem".source = "./client.key.pem";
+ };
+ systemd.services.systemd-journal-upload.serviceConfig.ImportCredential = [
+ "client.cert.pem"
+ "client.key.pem"
+ "ca.cert.pem"
+ ];
+ services.journald.upload = {
+ enable = true;
+ settings.Upload = {
+ URL = "https://server:443";
+ ServerCertificateFile = "/run/credentials/systemd-journal-upload.service/client.cert.pem";
+ ServerKeyFile = "/run/credentials/systemd-journal-upload.service/client.key.pem";
+ TrustedCertificateFile = "/run/credentials/systemd-journal-upload.service/ca.cert.pem";
+ };
};
};
testScript = ''
import subprocess
import tempfile
+ import shutil
tmpdir_o = tempfile.TemporaryDirectory()
tmpdir = tmpdir_o.name
@@ -69,33 +104,17 @@
generate_pems("server")
generate_pems("client")
- server.wait_for_unit("multi-user.target")
- client.wait_for_unit("multi-user.target")
-
def copy_pems(machine: BaseMachine, domain: str):
- machine.succeed("mkdir /run/secrets")
- machine.copy_from_host(
- source=f"{tmpdir}/{domain}/cert.pem",
- target=f"/run/secrets/{domain}.cert.pem",
- )
- machine.copy_from_host(
- source=f"{tmpdir}/{domain}/key.pem",
- target=f"/run/secrets/{domain}.key.pem",
- )
- # Should be last
- machine.copy_from_host(
- source=f"{tmpdir}/ca.cert.pem",
- target="/run/secrets/ca.cert.pem",
- )
+ shutil.copy(f"{tmpdir}/{domain}/cert.pem", machine.state_dir / f"{domain}.cert.pem")
+ shutil.copy(f"{tmpdir}/{domain}/key.pem", machine.state_dir / f"{domain}.key.pem")
+ shutil.copy(f"{tmpdir}/ca.cert.pem", machine.state_dir / "ca.cert.pem")
with subtest("Copying keys and certificates"):
copy_pems(server, "server")
copy_pems(client, "client")
+ server.wait_for_unit("nginx.service")
client.wait_for_unit("systemd-journal-upload.service")
- # The journal upload should have started the remote service, triggered by
- # the .socket unit
- server.wait_for_unit("systemd-journal-remote.service")
identifier = "nixos-test"
message = "Hello from NixOS test infrastructure"
diff --git a/nixos/tests/systemd-localed.nix b/nixos/tests/systemd-localed.nix
new file mode 100644
index 000000000000..308d90122868
--- /dev/null
+++ b/nixos/tests/systemd-localed.nix
@@ -0,0 +1,23 @@
+{ lib, ... }:
+{
+ name = "systemd-localed";
+ meta.maintainers = [ lib.maintainers.haansn08 ];
+
+ nodes.machine = { ... }: {
+ # we don't use services.xserver.enable because some window managers like
+ # niri rely on systemd-localed for the keyboard layout:
+ # https://niri-wm.github.io/niri/Configuration%3A-Input.html#layout
+ services.graphical-desktop.enable = true;
+
+ services.xserver.xkb.layout = "jp";
+ };
+
+ testScript = ''
+ machine.start()
+ machine.wait_for_unit("default.target")
+ machine.wait_for_unit("dbus.socket")
+
+ status, stdout = machine.execute("localectl")
+ t.assertIn("X11 Layout: jp", stdout)
+ '';
+}
diff --git a/nixos/tests/systemd-machinectl.nix b/nixos/tests/systemd-machinectl.nix
index 4b6c8febbb04..8a525a036977 100644
--- a/nixos/tests/systemd-machinectl.nix
+++ b/nixos/tests/systemd-machinectl.nix
@@ -106,6 +106,8 @@ let
}
];
+ extraCommands = "mkdir -p usr";
+
contents = [
{
source = containerSystem + "/etc/os-release";
@@ -171,6 +173,7 @@ in
systemd.tmpfiles.rules = [
"d /var/lib/machines/shared-decl 0755 root root - -"
+ "d /var/lib/machines/shared-decl/usr 0755 root root - -"
];
systemd.nspawn.shared-decl = {
execConfig = {
@@ -228,7 +231,7 @@ in
machine.wait_until_succeeds("systemctl -M shared-decl is-active default.target");
machine.succeed("machinectl stop shared-decl");
- machine.succeed("mkdir -p ${containerRoot}");
+ machine.succeed("mkdir -p ${containerRoot}/usr");
# start container with shared nix store by using same arguments as for systemd-nspawn@.service
machine.succeed("systemd-run systemd-nspawn --machine=${containerName} --network-veth -U --bind-ro=/nix/store ${containerSystem}/init")
diff --git a/nixos/tests/systemd-networkd-ipv6-prefix-delegation.nix b/nixos/tests/systemd-networkd-ipv6-prefix-delegation.nix
index 5ab21bee0195..7b8c53283a79 100644
--- a/nixos/tests/systemd-networkd-ipv6-prefix-delegation.nix
+++ b/nixos/tests/systemd-networkd-ipv6-prefix-delegation.nix
@@ -17,7 +17,7 @@ import ./make-test-python.nix (
hexa
];
};
- nodes = {
+ containers = {
# The ISP's routers job is to delegate IPv6 prefixes via DHCPv6. Like with
# regular IPv6 auto-configuration it will also emit IPv6 router
@@ -38,6 +38,7 @@ import ./make-test-python.nix (
interfaces.eth1 = lib.mkForce { }; # Don't use scripted networking
};
+ services.resolved.enable = false;
systemd.network = {
enable = true;
@@ -204,6 +205,7 @@ import ./make-test-python.nix (
interfaces.eth1.ipv6.addresses = lib.mkForce [ ];
};
+ services.resolved.enable = false;
systemd.network = {
networks = {
# systemd-networkd will load the first network unit file
@@ -300,6 +302,7 @@ import ./make-test-python.nix (
client = {
virtualisation.vlans = [ 2 ];
systemd.services.systemd-networkd.environment.SYSTEMD_LOG_LEVEL = "debug";
+ services.resolved.enable = false;
networking = {
useNetworkd = true;
useDHCP = false;
diff --git a/nixos/tests/systemd-repart.nix b/nixos/tests/systemd-repart.nix
index a991709a5c66..ebc487a8c1bc 100644
--- a/nixos/tests/systemd-repart.nix
+++ b/nixos/tests/systemd-repart.nix
@@ -303,10 +303,14 @@ in
systemd = {
enable = true;
# avoids reaching cryptsetup.target before recreation of the
- # "state" volume completed, during the factory reset
+ # "state" volume completed, during the factory reset and tries to
+ # ensure that devices are retriggered before trying to work with them.
services.systemd-repart.before = [
"systemd-cryptsetup@state.service"
];
+ services.systemd-factory-reset-complete.before = [
+ "systemd-cryptsetup@state.service"
+ ];
repart = {
enable = true;
extraArgs = [
diff --git a/nixos/tests/systemd-varlink.nix b/nixos/tests/systemd-varlink.nix
new file mode 100644
index 000000000000..df5d7cbb73a3
--- /dev/null
+++ b/nixos/tests/systemd-varlink.nix
@@ -0,0 +1,46 @@
+{ lib, ... }:
+{
+ name = "systemd-varlink";
+ meta.maintainers = [ lib.maintainers.raitobezarius ];
+ nodes.machine =
+ { config, pkgs, ... }:
+ {
+ networking.useNetworkd = true;
+ services.resolved.enable = true;
+ systemd.network.enable = true;
+ };
+ testScript = ''
+ def list_interfaces(intf_path: str) -> list[str]:
+ return machine.succeed(f"varlinkctl list-interfaces {intf_path}").split('\n')
+
+ expected_reg_sd_interfaces = [
+ ("BootControl", "bootctl"),
+ ("Credentials", "creds"),
+ ("Hostname", "hostnamed"),
+ ("JournalAccess", "journald"),
+ ("Import", "importd"),
+ ("Machine", "machined"),
+ ("Resolve", "resolved-varlink"),
+ ("Resolve.Monitor", "resolved-monitor"),
+ ("Udev", "udevd-varlink"),
+ ("MuteConsole", "mute-console"),
+ ("FactoryReset", "factory-reset"),
+ ("AskPassword", "ask-password"),
+ ("Network", "networkd-varlink"),
+ ("Repart", "repart"),
+ ]
+ expected_priv_sd_interfaces = [
+ ("Login", None), # systemd-logind-varlink.socket exist but is not necessary.
+ ]
+ expected_interfaces = [
+ (f"io.systemd.{intf}", f"systemd-{socket_name}", f"/run/varlink/registry/io.systemd.{intf}") for intf, socket_name in expected_reg_sd_interfaces
+ ] + [
+ (f"io.systemd.{intf}", f"systemd-{socket_name}" if socket_name is not None else None, f"/run/systemd/io.systemd.{intf}") for intf, socket_name in expected_priv_sd_interfaces
+ ]
+
+ for intf, socket_name, intf_path in expected_interfaces:
+ if socket_name is not None:
+ machine.wait_for_unit(f"{socket_name}.socket")
+ assert intf in list_interfaces(intf_path), f"Interface '{intf}' not found in the Varlink registry"
+ '';
+}
diff --git a/nixos/tests/systemd.nix b/nixos/tests/systemd.nix
index 8cca68465802..b04b288e8939 100644
--- a/nixos/tests/systemd.nix
+++ b/nixos/tests/systemd.nix
@@ -38,21 +38,23 @@
services.journald.extraConfig = "Storage=volatile";
test-support.displayManager.auto.user = "alice";
- systemd.shutdown.test = pkgs.writeScript "test.shutdown" ''
- #!${pkgs.runtimeShell}
- PATH=${
- lib.makeBinPath (
- with pkgs;
- [
- util-linux
- coreutils
- ]
- )
- }
- mount -t 9p shared -o trans=virtio,version=9p2000.L /tmp/shared
- touch /tmp/shared/shutdown-test
- umount /tmp/shared
- '';
+ systemd.shutdownRamfs.contents."/etc/systemd/system-shutdown/test".source =
+ pkgs.writeShellScript "test.shutdown" ''
+ PATH=${
+ lib.makeBinPath (
+ with pkgs;
+ [
+ util-linux
+ coreutils
+ ]
+ )
+ }
+ mkdir -p /tmp/shared
+ mount -t 9p shared -o trans=virtio,version=9p2000.L /tmp/shared
+ touch /tmp/shared/shutdown-test
+ umount /tmp/shared
+ '';
+ systemd.shutdownRamfs.storePaths = [ "${pkgs.util-linux}/bin" ];
systemd.services.oncalendar-test = {
description = "calendar test";
@@ -147,7 +149,7 @@
subprocess.check_call(
[
- "qemu-img",
+ "${nodes.machine.virtualisation.qemu.package}/bin/qemu-img",
"convert",
"-O",
"raw",
diff --git a/nixos/tests/thanos.nix b/nixos/tests/thanos.nix
index 5f0edd0ddfba..b4b58a8e60b9 100644
--- a/nixos/tests/thanos.nix
+++ b/nixos/tests/thanos.nix
@@ -322,7 +322,7 @@ in
# and check if the blocks have the correct labels:
store.succeed(
"thanos tools bucket ls "
- + "--objstore.config-file=${nodes.store.config.services.thanos.store.objstore.config-file} "
+ + "--objstore.config-file=${nodes.store.services.thanos.store.objstore.config-file} "
+ "--output=json | "
+ "jq .thanos.labels.some_label | "
+ "grep 'required by thanos'"
diff --git a/nixos/tests/timekpr.nix b/nixos/tests/timekpr.nix
index 1ae793d8f70e..9f832d2b62dd 100644
--- a/nixos/tests/timekpr.nix
+++ b/nixos/tests/timekpr.nix
@@ -1,13 +1,15 @@
-{ pkgs, lib, ... }:
+{
+ lib,
+ ...
+}:
+
{
name = "timekpr";
meta.maintainers = [ lib.maintainers.atry ];
- nodes.machine =
- { pkgs, lib, ... }:
- {
- services.timekpr.enable = true;
- };
+ containers.machine = {
+ services.timekpr.enable = true;
+ };
testScript = ''
start_all()
diff --git a/nixos/tests/txredisapi.nix b/nixos/tests/txredisapi.nix
index 171d3efee78f..57a32e624c24 100644
--- a/nixos/tests/txredisapi.nix
+++ b/nixos/tests/txredisapi.nix
@@ -25,7 +25,7 @@
testScript =
{ nodes, ... }:
let
- inherit (nodes.machine.config.services) redis;
+ inherit (nodes.machine.services) redis;
in
''
start_all()
diff --git a/nixos/tests/tzpfms.nix b/nixos/tests/tzpfms.nix
new file mode 100644
index 000000000000..8bd9131140ec
--- /dev/null
+++ b/nixos/tests/tzpfms.nix
@@ -0,0 +1,135 @@
+{ lib, ... }:
+
+{
+ name = "tzpfms";
+
+ meta = {
+ maintainers = with lib.maintainers; [ toastal ];
+ };
+
+ nodes.machine =
+ { pkgs, ... }:
+ {
+ environment.systemPackages = [
+ pkgs.jq
+ pkgs.parted
+ pkgs.tzpfms
+ ];
+
+ boot = {
+ initrd.systemd.enable = true;
+ loader = {
+ systemd-boot.enable = true;
+ timeout = 0;
+ efi.canTouchEfiVariables = true;
+ };
+ supportedFilesystems = [ "zfs" ];
+ zfs = {
+ devNodes = "/dev";
+ forceImportRoot = lib.mkDefault false;
+ requestEncryptionCredentials = false;
+ };
+ };
+
+ networking.hostId = "deadbeef";
+
+ virtualisation = {
+ emptyDiskImages = [ 1024 ];
+ mountHostNixStore = true;
+ useBootLoader = true;
+ useEFIBoot = true;
+ tpm.enable = true;
+ };
+
+ specialisation.tzpfms-unlock.configuration = {
+ boot = {
+ kernelParams = [
+ "rd.debug"
+ "rd.log=all"
+ ];
+ zfs = {
+ devNodes = "/dev";
+ requestEncryptionCredentials = false;
+ tzpfms = {
+ enable = true;
+ datasets = [
+ "tpmpool/boot"
+ "tpmpool/data"
+ ];
+ };
+ };
+ };
+
+ virtualisation.fileSystems = {
+ "/bootz" = {
+ device = "tpmpool/boot";
+ fsType = "zfs";
+ options = [ "zfsutil" ];
+ neededForBoot = true;
+ };
+ "/dataz" = {
+ device = "tpmpool/data";
+ fsType = "zfs";
+ options = [ "zfsutil" ];
+ neededForBoot = false;
+ };
+ };
+ };
+ };
+
+ testScript = /* python */ ''
+ datasets = ["boot", "data"]
+
+ machine.start(allow_reboot=True)
+
+ machine.wait_for_unit("multi-user.target")
+
+ machine.succeed("test -e /dev/tpm0")
+ machine.succeed("test -e /dev/tpmrm0")
+
+ machine.succeed("parted --script /dev/vdb mklabel gpt")
+ machine.succeed("parted --script /dev/vdb -- mkpart primary 1M 100%")
+
+ with subtest("Create encrypted ZFS datasets"):
+ machine.succeed("zpool create -O mountpoint=none tpmpool /dev/vdb1")
+ for ds in datasets:
+ machine.succeed("echo aoeuhtns | zfs create -o encryption=aes-128-gcm -o keyformat=passphrase -o mountpoint=/" + ds + "z tpmpool/" + ds)
+
+ with subtest("Wrap keys to TPM with backup"):
+ for ds in datasets:
+ machine.succeed("printf '\\n\\n' | zfs-tpm2-change-key -b /tmp/tzpfms-backup-" + ds + ".key tpmpool/" + ds)
+ machine.succeed("test -f /tmp/tzpfms-backup-" + ds + ".key")
+ list = machine.succeed("zfs-tpm-list -H")
+ for ds in datasets:
+ assert "tpmpool/" + ds in list
+
+ with subtest("Verify backup keys work"):
+ for ds in datasets:
+ machine.succeed("zfs unmount tpmpool/" + ds + " || true")
+ machine.succeed("zfs unload-key tpmpool/" + ds)
+ machine.succeed("zfs load-key tpmpool/" + ds + " /tmp/file.txt && cd /tmp && zip /srv/unpackerr/test.zip ./file.txt && rm ./file.txt")
+ machine.wait_until_succeeds("[[ -d /srv/unpackerr/test ]]", timeout=120)
+ machine.succeed("""[[ 'unpackerr-test' == "$(< /srv/unpackerr/test/file.txt)" ]]""")
+ '';
+}
diff --git a/nixos/tests/victorialogs/local-write.nix b/nixos/tests/victorialogs/local-write.nix
index 894394e2365f..6afc8e33378a 100644
--- a/nixos/tests/victorialogs/local-write.nix
+++ b/nixos/tests/victorialogs/local-write.nix
@@ -3,7 +3,7 @@
name = "victorialogs-local-write";
meta.maintainers = with lib.maintainers; [ marie ];
- nodes.machine =
+ containers.machine =
{ pkgs, ... }:
{
services.victorialogs.enable = true;
diff --git a/nixos/tests/victorialogs/remote-write-with-vlagent.nix b/nixos/tests/victorialogs/remote-write-with-vlagent.nix
index e2bdc395d20e..115ce2665743 100644
--- a/nixos/tests/victorialogs/remote-write-with-vlagent.nix
+++ b/nixos/tests/victorialogs/remote-write-with-vlagent.nix
@@ -9,7 +9,7 @@ in
name = "victorialogs-remote-write-with-vlagent";
meta.maintainers = [ lib.maintainers.shawn8901 ];
- nodes.server =
+ containers.server =
{ pkgs, ... }:
{
networking.firewall.allowedTCPPorts = [ 9428 ];
@@ -20,7 +20,7 @@ in
};
};
- nodes.client =
+ containers.client =
{ pkgs, ... }:
{
services.vlagent = {
diff --git a/nixos/tests/victoriametrics/external-promscrape-config.nix b/nixos/tests/victoriametrics/external-promscrape-config.nix
index f645b8c839b9..15b8c9bde157 100644
--- a/nixos/tests/victoriametrics/external-promscrape-config.nix
+++ b/nixos/tests/victoriametrics/external-promscrape-config.nix
@@ -29,8 +29,8 @@ in
];
};
- nodes = {
- victoriametrics =
+ containers = {
+ vmserver =
{ pkgs, ... }:
{
environment.systemPackages = [ pkgs.jq ];
@@ -55,14 +55,14 @@ in
node.wait_for_unit("prometheus-node-exporter")
node.wait_for_open_port(${toString nodeExporterPort})
- victoriametrics.wait_for_unit("victoriametrics")
- victoriametrics.wait_for_open_port(8428)
+ vmserver.wait_for_unit("victoriametrics")
+ vmserver.wait_for_open_port(8428)
- promscrape_config = victoriametrics.succeed("journalctl -u victoriametrics -o cat | grep 'promscrape.config'")
+ promscrape_config = vmserver.succeed("journalctl -u victoriametrics -o cat | grep 'promscrape.config'")
assert '${toString promscrapeConfigYaml}' in promscrape_config
- victoriametrics.wait_until_succeeds(
+ vmserver.wait_until_succeeds(
"curl -sf 'http://localhost:8428/api/v1/query?query=node_exporter_build_info\{instance=\"node:9100\"\}' | "
+ "jq '.data.result[0].value[1]' | grep '\"1\"'"
)
diff --git a/nixos/tests/victoriametrics/remote-write.nix b/nixos/tests/victoriametrics/remote-write.nix
index 1788c9d8747c..721c4822c1d0 100644
--- a/nixos/tests/victoriametrics/remote-write.nix
+++ b/nixos/tests/victoriametrics/remote-write.nix
@@ -14,8 +14,8 @@ in
];
};
- nodes = {
- victoriametrics =
+ containers = {
+ vmserver =
{ pkgs, ... }:
{
environment.systemPackages = [ pkgs.jq ];
@@ -34,7 +34,7 @@ in
services.vmagent = {
enable = true;
remoteWrite = {
- url = "http://victoriametrics:8428/api/v1/write";
+ url = "http://vmserver:8428/api/v1/write";
basicAuthUsername = username;
basicAuthPasswordFile = toString passwordFile;
};
@@ -71,13 +71,13 @@ in
node.wait_for_unit("prometheus-node-exporter")
node.wait_for_open_port(9100)
- victoriametrics.wait_for_unit("victoriametrics")
- victoriametrics.wait_for_open_port(8428)
+ vmserver.wait_for_unit("victoriametrics")
+ vmserver.wait_for_open_port(8428)
vmagent.wait_for_unit("vmagent")
# check remote write
- victoriametrics.wait_until_succeeds(
+ vmserver.wait_until_succeeds(
"curl --user '${username}:${password}' -sf 'http://localhost:8428/api/v1/query?query=node_exporter_build_info\{instance=\"node:9100\"\}' | "
+ "jq '.data.result[0].value[1]' | grep '\"1\"'"
)
diff --git a/nixos/tests/victoriametrics/vmalert.nix b/nixos/tests/victoriametrics/vmalert.nix
index e6a0ab5d4e52..684b60d0a605 100644
--- a/nixos/tests/victoriametrics/vmalert.nix
+++ b/nixos/tests/victoriametrics/vmalert.nix
@@ -9,8 +9,8 @@
];
};
- nodes = {
- victoriametrics =
+ containers = {
+ vmserver =
{ config, pkgs, ... }:
{
environment.systemPackages = [ pkgs.jq ];
@@ -27,7 +27,7 @@
static_configs = [
{
targets = [
- "alertmanager:${toString config.services.prometheus.alertmanager.port}"
+ "alert:${toString config.services.prometheus.alertmanager.port}"
];
}
];
@@ -51,7 +51,7 @@
settings = {
"datasource.url" = "http://localhost:8428"; # victoriametrics' api
"notifier.url" = [
- "http://alertmanager:${toString config.services.prometheus.alertmanager.port}"
+ "http://alert:${toString config.services.prometheus.alertmanager.port}"
]; # alertmanager's api
rule = [
(pkgs.writeText "instance-down.yml" ''
@@ -71,7 +71,7 @@
};
};
- alertmanager = {
+ alert = {
services.prometheus.alertmanager = {
enable = true;
openFirewall = true;
@@ -115,33 +115,33 @@
};
testScript = ''
- alertmanager.wait_for_unit("alertmanager")
- alertmanager.wait_for_open_port(9093)
- alertmanager.wait_until_succeeds("curl -s http://127.0.0.1:9093/-/ready")
+ alert.wait_for_unit("alertmanager")
+ alert.wait_for_open_port(9093)
+ alert.wait_until_succeeds("curl -s http://127.0.0.1:9093/-/ready")
logger.wait_for_unit("alertmanager-webhook-logger")
logger.wait_for_open_port(6725)
- victoriametrics.wait_for_unit("victoriametrics")
- victoriametrics.wait_for_unit("vmalert")
- victoriametrics.wait_for_open_port(8428)
+ vmserver.wait_for_unit("victoriametrics")
+ vmserver.wait_for_unit("vmalert")
+ vmserver.wait_for_open_port(8428)
- victoriametrics.wait_until_succeeds(
+ vmserver.wait_until_succeeds(
"curl -sf 'http://127.0.0.1:8428/api/v1/query?query=count(up\{job=\"alertmanager\"\}==1)' | "
+ "jq '.data.result[0].value[1]' | grep '\"1\"'"
)
- victoriametrics.wait_until_succeeds(
+ vmserver.wait_until_succeeds(
"curl -sf 'http://127.0.0.1:8428/api/v1/query?query=sum(alertmanager_build_info)%20by%20(version)' | "
+ "jq '.data.result[0].metric.version' | grep '\"${pkgs.prometheus-alertmanager.version}\"'"
)
- victoriametrics.wait_until_succeeds(
+ vmserver.wait_until_succeeds(
"curl -sf 'http://127.0.0.1:8428/api/v1/query?query=count(up\{job=\"node\"\}!=1)' | "
+ "jq '.data.result[0].value[1]' | grep '\"1\"'"
)
- victoriametrics.wait_until_succeeds(
+ vmserver.wait_until_succeeds(
"curl -sf 'http://127.0.0.1:8428/api/v1/query?query=alertmanager_notifications_total\{integration=\"webhook\"\}' | "
+ "jq '.data.result[0].value[1]' | grep -v '\"0\"'"
)
@@ -152,6 +152,6 @@
logger.log(logger.succeed("systemd-analyze security alertmanager-webhook-logger.service | grep -v '✓'"))
- alertmanager.log(alertmanager.succeed("systemd-analyze security alertmanager.service | grep -v '✓'"))
+ alert.log(alert.succeed("systemd-analyze security alertmanager.service | grep -v '✓'"))
'';
}
diff --git a/nixos/tests/victoriatraces/otlp-ingestion.nix b/nixos/tests/victoriatraces/otlp-ingestion.nix
index d3807c6bde66..586348c58d8d 100644
--- a/nixos/tests/victoriatraces/otlp-ingestion.nix
+++ b/nixos/tests/victoriatraces/otlp-ingestion.nix
@@ -82,7 +82,7 @@ in
machine.wait_until_succeeds("""
curl -s 'http://localhost:10428/select/jaeger/api/services' | \
jq -e '.data[] | select(. == "test-service")'
- """, timeout=10)
+ """, timeout=20)
# Query for traces from our test service
machine.wait_until_succeeds("""
diff --git a/nixos/tests/vlm-screenshot-question.nix b/nixos/tests/vlm-screenshot-question.nix
new file mode 100644
index 000000000000..9009f4a21d84
--- /dev/null
+++ b/nixos/tests/vlm-screenshot-question.nix
@@ -0,0 +1,118 @@
+# Reusable VLM screenshot analysis derivation.
+#
+# Similar to `wait_for_text()` in NixOS VM tests.
+#
+# Runs a VLM (Vision Language Model) on a screenshot and asserts that the
+# model's answer to a yes/no question ends with "YES".
+#
+# This is useful to automatically test software that is otherwise
+# hard to test, e.g. "does this 3D program render the bunny correctly?".
+# It is especially useful to judge screenshots made in NixOS VM tests.
+{
+ lib,
+ writers,
+ fetchurl,
+ llama-cpp,
+ runCommand,
+ # VLM defaults, chosen to pick a model smart enough to be useful
+ # for screenshot analysis, but small enough to not consume too much RAM
+ # or be too slow for CI.
+ model ? (
+ fetchurl {
+ url = "https://huggingface.co/unsloth/gemma-4-E2B-it-GGUF/resolve/90f9618340396838ee7ff5b0ba2da27da62953d3/gemma-4-E2B-it-Q4_0.gguf";
+ hash = "sha256-nEwdSKRi9/iDsomErE9C02bJxXNDTqtoVT4POL9+tQw=";
+ }
+ ),
+ mmproj ? (
+ fetchurl {
+ url = "https://huggingface.co/unsloth/gemma-4-E2B-it-GGUF/resolve/90f9618340396838ee7ff5b0ba2da27da62953d3/mmproj-F16.gguf";
+ hash = "sha256-FAvo14SXQfiMUHV9UpuENz7o4nBSzCI2hVtTf0qCFfo=";
+ }
+ ),
+ # User-provided arguments:
+ name,
+ screenshot,
+ question,
+}:
+let
+
+ analysisScript =
+ writers.writePython3 "${name}-script" { flakeIgnore = [ "E501" ]; } # allow long lines
+ ''
+ import os
+ import re
+ import subprocess
+ import time
+
+ out = os.environ["out"]
+ screenshot = "${screenshot}"
+ # Using JSON here even permits preserving multi-line ASCII art questions and so on.
+ question = ${builtins.toJSON question}
+
+ # Build the full prompt with output markers for reliable extraction.
+ prompt = (
+ "Start your output with [output-start]."
+ f" {question}"
+ " Explain what you see, and your judgment."
+ " Then answer that question with exactly YES or NO, followed by [output-end]."
+ )
+
+ vlm_start = time.time()
+ result = subprocess.run(
+ [
+ "${lib.getExe llama-cpp}",
+ "--single-turn", "--no-display-prompt", "--log-verbosity", "0", "--jinja",
+ "--simple-io", # disables the spinner whose backspace chars would corrupt captured output
+ "--reasoning", "off", "--temp", "0",
+ "--threads", "1", # for determinism
+ "--n-gpu-layers", "0", # force CPU-only (results on GPUs might be different and nondeterministic, see https://github.com/ggml-org/llama.cpp/pull/16016#issuecomment-3293505238)
+ "--model", "${model}",
+ "--mmproj", "${mmproj}",
+ "--image", screenshot,
+ "-p", prompt,
+ ],
+ capture_output=True,
+ text=True,
+ # `OMP_NUM_THREADS=1` prevents OpenMP from spawning extra threads in the BLAS backend
+ # (OpenBLAS), which causes nondeterminism with `--image`; without `--image`, `--threads 1`
+ # alone is already deterministic (BLAS is not used for short text prompts).
+ # Relevant code: https://github.com/ggml-org/llama.cpp/blob/80afa33aadcc4f71212b17e5e52904491c76b63e/ggml/src/ggml-blas/ggml-blas.cpp#L30-L148
+ # PR to fix it in OpenBLAS: https://github.com/OpenMathLib/OpenBLAS/pull/5808
+ env={**os.environ, "OMP_NUM_THREADS": "1"},
+ )
+ vlm_elapsed = time.time() - vlm_start
+ output = result.stdout
+ print(f"VLM inference took {vlm_elapsed:.1f}s")
+ print(f"VLM raw output: {repr(output)}")
+ if result.returncode != 0:
+ print(f"VLM stderr: {result.stderr}")
+ assert result.returncode == 0, f"llama-cli failed with exit code {result.returncode}"
+
+ print()
+
+ # Post-process: extract the answer between `[output-start]` and `[output-end]` markers.
+ # This is needed because llama-cli prints UI noise (banner,
+ # spinner, stats) to stdout alongside the model's response.
+ # TODO: Replace with `--quiet` once https://github.com/ggml-org/llama.cpp/pull/22848 is merged;
+ # then also remove the markers from the prompt and the extraction below.
+ matches = re.findall(r"\[output-start\](.*?)\[output-end\]", output, re.DOTALL)
+ assert matches, (
+ f"VLM output did not contain [output-start]...[output-end] markers."
+ f" Raw output: {repr(output)}"
+ )
+ answer = matches[-1].strip() # use last match (first may be prompt echo)
+ print("VLM answer:")
+ print(answer)
+ assert answer.upper().endswith("YES"), (
+ f"VLM did not confirm expected answer. Answer: {answer}"
+ )
+
+ os.makedirs(out, exist_ok=True)
+ with open(os.path.join(out, "vlm-answer.txt"), "w") as f:
+ f.write(answer + "\n")
+ os.symlink(screenshot, os.path.join(out, "screen.png"))
+ '';
+in
+runCommand name { } ''
+ ${analysisScript}
+''
diff --git a/nixos/tests/vnstat.nix b/nixos/tests/vnstat.nix
new file mode 100644
index 000000000000..eae44e1a92d3
--- /dev/null
+++ b/nixos/tests/vnstat.nix
@@ -0,0 +1,26 @@
+{ lib, ... }:
+{
+ name = "vnstat";
+ meta.maintainers = with lib.maintainers; [ hmenke ];
+
+ containers.machine = {
+ services.vnstat = {
+ enable = true;
+ settings = {
+ AlwaysAddNewInterfaces = 1;
+ };
+ };
+ };
+
+ testScript = ''
+ start_all()
+
+ machine.wait_for_unit("vnstat.service")
+
+ machine.succeed("vnstat --iflist")
+ machine.fail("vnstat -i dummy0")
+ machine.succeed("ip link add dummy0 type dummy")
+ machine.succeed("ip link set dummy0 up")
+ machine.wait_until_succeeds("vnstat -i dummy0", timeout=10)
+ '';
+}
diff --git a/nixos/tests/watt.nix b/nixos/tests/watt.nix
new file mode 100644
index 000000000000..b06661b4b79f
--- /dev/null
+++ b/nixos/tests/watt.nix
@@ -0,0 +1,19 @@
+{ pkgs, lib, ... }:
+{
+ name = "watt";
+ meta.maintainers = with lib.maintainers; [ Soliprem ];
+
+ nodes.machine = _: {
+ services.watt.enable = true;
+ };
+
+ testScript = ''
+ machine.wait_for_unit("watt.service")
+ machine.succeed("watt --version | grep ${pkgs.watt.version}")
+ machine.wait_until_succeeds("busctl --system status net.hadess.PowerProfiles")
+ machine.wait_until_succeeds("busctl --system status dev.notashelf.Watt")
+ machine.succeed("busctl --system introspect net.hadess.PowerProfiles /net/hadess/PowerProfiles net.hadess.PowerProfiles")
+ machine.succeed("busctl --system introspect dev.notashelf.Watt /dev/notashelf/Watt dev.notashelf.Watt")
+ machine.succeed("busctl --system get-property dev.notashelf.Watt /dev/notashelf/Watt dev.notashelf.Watt Version | grep ${pkgs.watt.version}")
+ '';
+}
diff --git a/nixos/tests/web-apps/dashy.nix b/nixos/tests/web-apps/dashy.nix
index 39454b5b8d8a..d83c14d3294f 100644
--- a/nixos/tests/web-apps/dashy.nix
+++ b/nixos/tests/web-apps/dashy.nix
@@ -1,6 +1,5 @@
{ pkgs, lib, ... }:
let
-
customSettings = {
pageInfo = {
title = "My Custom Dashy Title";
@@ -45,29 +44,29 @@ in
}
];
};
- nodes = {
- machine = { };
+ containers = {
+ container = { };
- machine-custom = {
+ custom = {
services.dashy.settings = customSettings;
};
};
testScript = ''
start_all()
- machine.wait_for_unit("nginx.service")
- machine.wait_for_open_port(80)
+ container.wait_for_unit("nginx.service")
+ container.wait_for_open_port(80)
- actual = machine.succeed("curl -v --stderr - http://dashy.local/", timeout=10)
+ actual = container.succeed("curl -v --stderr - http://dashy.local/", timeout=10)
expected = "Dashy"
assert expected in actual, \
f"unexpected reply from Dashy, expected: '{expected}' got: '{actual}'"
- machine_custom.wait_for_unit("nginx.service")
- machine_custom.wait_for_open_port(80)
+ custom.wait_for_unit("nginx.service")
+ custom.wait_for_open_port(80)
- actual_custom = machine_custom.succeed("curl -s --stderr - http://dashy.local/conf.yml", timeout=10).strip()
- expected_custom = machine_custom.succeed("cat ${customSettingsYaml}").strip()
+ actual_custom = custom.succeed("curl -s --stderr - http://dashy.local/conf.yml", timeout=10).strip()
+ expected_custom = custom.succeed("cat ${customSettingsYaml}").strip()
assert expected_custom == actual_custom, \
f"unexpected reply from Dashy, expected: '{expected_custom}' got: '{actual_custom}'"
diff --git a/nixos/tests/web-apps/gotosocial.nix b/nixos/tests/web-apps/gotosocial.nix
index d9e50ecaa150..bf74bcf09887 100644
--- a/nixos/tests/web-apps/gotosocial.nix
+++ b/nixos/tests/web-apps/gotosocial.nix
@@ -3,7 +3,7 @@
name = "gotosocial";
meta.maintainers = with lib.maintainers; [ blakesmith ];
- nodes.machine =
+ containers.machine =
{ pkgs, ... }:
{
environment.systemPackages = [ pkgs.jq ];
diff --git a/nixos/tests/web-apps/immich-vectorchord-reindex.nix b/nixos/tests/web-apps/immich-vectorchord-reindex.nix
index 65308d11838f..da808cf64a8e 100644
--- a/nixos/tests/web-apps/immich-vectorchord-reindex.nix
+++ b/nixos/tests/web-apps/immich-vectorchord-reindex.nix
@@ -37,6 +37,10 @@
hash = "sha256-+BOuiinbKPZZaDl9aYsIoZPgvLZ4FA6Rb4/W+lAz4so=";
};
+ # Remove the patches currently used for vectorchord 1.1.1,
+ # as vectorchord 1.0.0 does not need them.
+ patches = [ ];
+
cargoDeps = pkgs.rustPlatform.fetchCargoVendor {
inherit (finalAttrs) src;
hash = "sha256-kwe2x7OTjpdPonZsvnR1C/89D5W/R5JswYF79YcSFEA=";
diff --git a/nixos/tests/web-apps/immich.nix b/nixos/tests/web-apps/immich.nix
index 406b51600c4e..bf8df063fa63 100644
--- a/nixos/tests/web-apps/immich.nix
+++ b/nixos/tests/web-apps/immich.nix
@@ -8,7 +8,7 @@
# These tests need a little more juice
virtualisation = {
cores = 2;
- memorySize = 2048;
+ memorySize = 4096;
diskSize = 4096;
};
diff --git a/nixos/tests/web-apps/immichframe.nix b/nixos/tests/web-apps/immichframe.nix
index f2f590470163..810fe24b796d 100644
--- a/nixos/tests/web-apps/immichframe.nix
+++ b/nixos/tests/web-apps/immichframe.nix
@@ -1,10 +1,21 @@
+{
+ lib,
+ ...
+}:
+
let
apiKeyFile = "/tmp/immich-api.key";
customInterval = 5;
+ user = "alice";
in
{
name = "immichframe";
+ meta.maintainers = with lib.maintainers; [
+ numinit
+ jfly
+ ];
+
enableOCR = true;
nodes.machine =
@@ -15,11 +26,22 @@ in
...
}:
{
- imports = [ ../common/x11.nix ];
+ imports = [
+ ../common/user-account.nix
+ ../common/x11.nix
+ ];
- # When setting this to 2500 I got "Kernel panic - not syncing: Out of
+ # When setting memory to 2500 I got "Kernel panic - not syncing: Out of
# memory: compulsory panic_on_oom is enabled".
- virtualisation.memorySize = 3000;
+ # Setting cores to 1 (the default) also makes immich take a long time to start up.
+ # If this breaks, keep synced with the immich test.
+ virtualisation = {
+ memorySize = 4096;
+ cores = 2;
+ };
+ hardware.graphics.enable = true;
+ environment.variables.XAUTHORITY = "/home/${user}/.Xauthority";
+ test-support.displayManager.auto.user = user;
environment.systemPackages = with pkgs; [
imagemagick
@@ -69,6 +91,7 @@ in
custom_interval = ${toString customInterval}
+ machine.wait_for_x()
machine.wait_for_unit("immich-server.service")
machine.wait_for_open_port(2283)
@@ -133,11 +156,7 @@ in
assert len(assets) == 2, assets
# Wait for a photo to be displayed.
- machine.wait_for_x()
- machine.execute("xterm -e 'firefox --kiosk http://localhost:8002' >&2 &")
- machine.wait_for_window("immichFrame")
- _, active_window = machine.execute("xdotool getactivewindow")
- machine.succeed(f"xdotool windowsize {quote(active_window.strip())} 100% 100%")
+ machine.execute("su - ${user} -c 'firefox --kiosk http://localhost:8002' >&2 & disown")
machine.wait_for_text('reproduce this moment')
machine.wait_for_text('with NixOS tests')
machine.screenshot("screen")
diff --git a/nixos/tests/web-apps/koito.nix b/nixos/tests/web-apps/koito.nix
new file mode 100644
index 000000000000..8839d4bfc57f
--- /dev/null
+++ b/nixos/tests/web-apps/koito.nix
@@ -0,0 +1,20 @@
+{ ... }:
+{
+ name = "koito";
+
+ nodes.machine = {
+ services.koito.enable = true;
+ };
+
+ testScript =
+ { nodes, ... }:
+ let
+ port = toString nodes.machine.services.koito.environment.KOITO_LISTEN_PORT;
+ in
+ ''
+ machine.wait_for_unit('koito.service')
+
+ machine.wait_for_open_port(${port})
+ machine.succeed('curl --fail http://localhost:${port}')
+ '';
+}
diff --git a/nixos/tests/web-apps/netbox-upgrade.nix b/nixos/tests/web-apps/netbox-upgrade.nix
index ee84a6b34fd8..ffea21a648cd 100644
--- a/nixos/tests/web-apps/netbox-upgrade.nix
+++ b/nixos/tests/web-apps/netbox-upgrade.nix
@@ -18,7 +18,6 @@ in
meta.maintainers = with lib.maintainers; [
minijackson
- raitobezarius
];
node.pkgsReadOnly = false;
@@ -35,23 +34,10 @@ in
# Pick the NetBox package from this config's "pkgs" argument,
# so that `nixpkgs.config.permittedInsecurePackages` works
package = pkgs.${oldNetbox};
- secretKeyFile = pkgs.writeText "secret" ''
- abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
- '';
- apiTokenPeppersFile = pkgs.writeText "pepper" ''
- kp7ht*76fiQAhUi5dHfASLlYUE_S^gI^(7J^K5M!LfoH@vl&b_
- '';
- };
- services.nginx = {
- enable = true;
-
- recommendedProxySettings = true;
-
- virtualHosts.netbox = {
- default = true;
- locations."/".proxyPass = "http://localhost:${toString config.services.netbox.port}";
- locations."/static/".alias = "/var/lib/netbox/static/";
+ nginx = {
+ enable = true;
+ hostname = "localhost";
};
};
@@ -82,7 +68,7 @@ in
headers = machine.succeed(
"curl -sSL http://localhost/api/ --head -H 'Content-Type: application/json'"
)
- assert api_version(headers) == version
+ t.assertEqual(api_version(headers), version)
with subtest("NetBox version is the old one"):
check_api_version("${oldApiVersion}")
diff --git a/nixos/tests/web-apps/netbox/default.nix b/nixos/tests/web-apps/netbox/default.nix
index 803cf5c25ed3..4b72f703df89 100644
--- a/nixos/tests/web-apps/netbox/default.nix
+++ b/nixos/tests/web-apps/netbox/default.nix
@@ -27,23 +27,23 @@ import ../../make-test-python.nix (
skipTypeCheck = true;
- nodes.machine =
+ containers.machine =
{ config, ... }:
{
- virtualisation.memorySize = 2048;
+ boot.kernelParams = [
+ # helps debugging seccomp filter issues
+ "audit=1"
+ ];
services.netbox = {
enable = true;
package = netbox;
- secretKeyFile = pkgs.writeText "secret" ''
- abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
- '';
- # Value from https://netbox.readthedocs.io/en/feature/configuration/required-parameters/#api_token_peppers
- apiTokenPeppersFile = pkgs.writeText "pepper" ''
- kp7ht*76fiQAhUi5dHfASLlYUE_S^gI^(7J^K5M!LfoH@vl&b_
- '';
- enableLdap = true;
- ldapConfigPath = pkgs.writeText "ldap_config.py" ''
+ nginx = {
+ enable = true;
+ hostname = "localhost";
+ };
+
+ ldapConfigFile = pkgs.writeText "ldap_config.py" ''
import ldap
from django_auth_ldap.config import LDAPSearch, PosixGroupType
@@ -70,18 +70,6 @@ import ../../make-test-python.nix (
'';
};
- services.nginx = {
- enable = true;
-
- recommendedProxySettings = true;
-
- virtualHosts.netbox = {
- default = true;
- locations."/".proxyPass = "http://localhost:${toString config.services.netbox.port}";
- locations."/static/".alias = "/var/lib/netbox/static/";
- };
- };
-
# Adapted from the sssd-ldap NixOS test
services.openldap = {
enable = true;
diff --git a/nixos/tests/web-apps/netbox/testScript.py b/nixos/tests/web-apps/netbox/testScript.py
index 4ff035a1f0cf..2e98cf4d87ef 100644
--- a/nixos/tests/web-apps/netbox/testScript.py
+++ b/nixos/tests/web-apps/netbox/testScript.py
@@ -62,11 +62,11 @@ def compare(a: str, b: str):
with subtest("Home screen loads"):
machine.wait_until_succeeds(
- "curl -sSfL http://[::1]:8001 | grep 'Home | NetBox'"
+ "curl -sSfL http://[::1]:80 | grep 'Home | NetBox'"
)
with subtest("Staticfiles are generated"):
- machine.succeed("test -e /var/lib/netbox/static/netbox.js")
+ machine.wait_for_file("/var/lib/netbox/static/netbox.js")
with subtest("Superuser can be created"):
machine.succeed(
@@ -155,7 +155,7 @@ def patch(uri: str, data: Dict[str, Any]):
return data_request(uri, "PATCH", data)
with subtest("Can retrieve netbox version"):
- assert netbox_version == get("/status/")["netbox-version"]
+ t.assertEqual(netbox_version, get("/status/")["netbox-version"])
with subtest("Can create objects"):
result = post("/dcim/sites/", {"name": "Test site", "slug": "test-site"})
@@ -196,28 +196,28 @@ with subtest("Can create objects"):
with subtest("Can list objects"):
result = get("/dcim/sites/")
- assert result["count"] == 1
- assert result["results"][0]["id"] == site_id
- assert result["results"][0]["name"] == "Test site"
- assert result["results"][0]["description"] == ""
+ t.assertEqual(result["count"], 1)
+ t.assertEqual(result["results"][0]["id"], site_id)
+ t.assertEqual(result["results"][0]["name"], "Test site")
+ t.assertEqual(result["results"][0]["description"], "")
result = get("/dcim/device-types/")
- assert result["count"] == 1
- assert result["results"][0]["id"] == device_type_id
- assert result["results"][0]["model"] == "Test device type"
+ t.assertEqual(result["count"], 1)
+ t.assertEqual(result["results"][0]["id"], device_type_id)
+ t.assertEqual(result["results"][0]["model"], "Test device type")
with subtest("Can update objects"):
new_description = "Test site description"
patch(f"/dcim/sites/{site_id}/", {"description": new_description})
result = get(f"/dcim/sites/{site_id}/")
- assert result["description"] == new_description
+ t.assertEqual(result["description"], new_description)
with subtest("Can delete objects"):
# Delete a device-type since no object depends on it
delete(f"/dcim/device-types/{device_type_id}/")
result = get("/dcim/device-types/")
- assert result["count"] == 0
+ t.assertEqual(result["count"], 0)
def request_graphql(query: str):
return machine.succeed(
@@ -252,10 +252,10 @@ if compare(netbox_version, '4.2.0') >= 0:
answer = request_graphql(graphql_query)
result = json.loads(answer)
- assert len(result["data"]["prefix_list"]) == 3
- assert test_objects["prefixes"]["v4-with-updated-desc"] in result["data"]["prefix_list"]
- assert test_objects["prefixes"]["v6-cidr-32"] in result["data"]["prefix_list"]
- assert test_objects["prefixes"]["v6-cidr-48"] in result["data"]["prefix_list"]
+ t.assertEqual(len(result["data"]["prefix_list"]), 3)
+ t.assertIn(test_objects["prefixes"]["v4-with-updated-desc"], result["data"]["prefix_list"])
+ t.assertIn(test_objects["prefixes"]["v6-cidr-32"], result["data"]["prefix_list"])
+ t.assertIn(test_objects["prefixes"]["v6-cidr-48"], result["data"]["prefix_list"])
if compare(netbox_version, '4.2.0') < 0:
with subtest("Can use the GraphQL API (Netbox <= 4.2.0)"):
@@ -270,8 +270,8 @@ if compare(netbox_version, '4.2.0') < 0:
''')
result = json.loads(answer)
print(result["data"]["prefix_list"][0])
- assert result["data"]["prefix_list"][0]["prefix"] == test_objects["prefixes"]["v4-with-updated-desc"]["prefix"]
- assert int(result["data"]["prefix_list"][0]["site"]["id"]) == int(test_objects["prefixes"]["v4-with-updated-desc"]["scope"]["id"])
+ t.assertEqual(result["data"]["prefix_list"][0]["prefix"], test_objects["prefixes"]["v4-with-updated-desc"]["prefix"])
+ t.assertEqual(int(result["data"]["prefix_list"][0]["site"]["id"]), int(test_objects["prefixes"]["v4-with-updated-desc"]["scope"]["id"]))
# With 4.5.2 and higher, obtaining a session cookie or token without supplying
# proper CSRF tokens on the frontend /login/ endpoint is no longer possible
@@ -283,5 +283,8 @@ if compare(netbox_version, '4.5.2') < 0:
with subtest("Can associate LDAP groups"):
result = get("/users/users/?username=${testUser}")
- assert result["count"] == 1
- assert any(group["name"] == "${testGroup}" for group in result["results"][0]["groups"])
+ t.assertEqual(result["count"], 1)
+ t.assertTrue(any(group["name"] == "${testGroup}" for group in result["results"][0]["groups"]))
+
+# Print systemd unit hardening state
+machine.log(machine.execute("systemd-analyze security netbox.service netbox-rq.service netbox-housekeeping.service | grep -v ✓")[1])
diff --git a/nixos/tests/web-apps/part-db.nix b/nixos/tests/web-apps/part-db.nix
index 66e43b09a50e..5e96774c2730 100644
--- a/nixos/tests/web-apps/part-db.nix
+++ b/nixos/tests/web-apps/part-db.nix
@@ -1,11 +1,16 @@
-{ lib, ... }:
+{ lib, pkgs, ... }:
{
name = "part-db";
meta.maintainers = with lib.maintainers; [ oddlama ];
nodes = {
machine = {
- services.part-db.enable = true;
+ services.part-db = {
+ enable = true;
+ environmentFile = pkgs.writeText "part-db.env" ''
+ APP_SECRET=0123456789abcdef0123456789abcdef
+ '';
+ };
};
};
@@ -15,8 +20,22 @@
machine.wait_for_unit("part-db-migrate.service")
machine.wait_for_unit("phpfpm-part-db.service")
machine.wait_for_unit("nginx.service")
+
+ machine.succeed("test -d /var/lib/part-db/public/media")
+ machine.succeed("test -d /var/lib/part-db/uploads")
+ machine.succeed("test -d /var/lib/part-db/share")
+ machine.succeed("test $(readlink ${pkgs.part-db}/public/media) = /var/lib/part-db/public/media/")
+ machine.succeed("test $(readlink ${pkgs.part-db}/uploads) = /var/lib/part-db/uploads/")
+ machine.succeed("grep APP_SECRET=0123456789abcdef0123456789abcdef /var/lib/part-db/env.local")
+ machine.succeed("test $(stat -c %a:%U:%G /var/lib/part-db/env.local) = 600:part-db:part-db")
+
machine.wait_for_open_port(80)
machine.succeed("curl -L --fail http://localhost | grep 'Part-DB'", timeout=10)
+ machine.succeed("echo static > /var/lib/part-db/public/media/static.txt")
+ machine.succeed("curl -I --fail http://localhost/media/static.txt | grep 'Content-Security-Policy'")
+ machine.succeed("curl -I --fail http://localhost/media/static.txt | grep 'X-Content-Type-Options: nosniff'")
+ machine.succeed("echo '' > /var/lib/part-db/public/media/shell.phar")
+ machine.succeed("curl -I http://localhost/media/shell.phar | grep 'HTTP/1.1 403 Forbidden'")
'';
}
diff --git a/nixos/tests/web-apps/pdfding/basic.nix b/nixos/tests/web-apps/pdfding/basic.nix
index 5dec3de378e3..10db93c5203b 100644
--- a/nixos/tests/web-apps/pdfding/basic.nix
+++ b/nixos/tests/web-apps/pdfding/basic.nix
@@ -17,6 +17,11 @@
secretKeyFile = pkgs.writeText "secretKeyFile" "test123";
};
+ # NOTE: on aarch64-linux github actions runer due to lack of kvm, we need to delay pdfding start and give it more time to finish
+ systemd.services.pdfding.wantedBy = lib.mkIf pkgs.stdenv.hostPlatform.isAarch64 (lib.mkForce [ ]);
+ systemd.services.pdfding.serviceConfig.TimeoutStartSec =
+ lib.mkIf pkgs.stdenv.hostPlatform.isAarch64 "900";
+
environment.systemPackages = with pkgs; [
sqlite
];
@@ -60,6 +65,7 @@
# create admin
machine.wait_for_unit("multi-user.target")
+ machine.succeed("systemctl start pdfding.service")
machine.wait_for_open_port(${toString port})
machine.succeed("DJANGO_SUPERUSER_PASSWORD=admin pdfding-manage createsuperuser --no-input --username admin --email admin@localhost")
diff --git a/nixos/tests/web-apps/pdfding/postgres.nix b/nixos/tests/web-apps/pdfding/postgres.nix
index c6a82fad839a..635799571315 100644
--- a/nixos/tests/web-apps/pdfding/postgres.nix
+++ b/nixos/tests/web-apps/pdfding/postgres.nix
@@ -22,6 +22,14 @@
installTestHelpers = true;
};
+ # NOTE: on aarch64-linux github actions runer due to lack of kvm, we need to delay pdfding start and give it more time to finish
+ systemd.services.pdfding.wantedBy = lib.mkIf pkgs.stdenv.hostPlatform.isAarch64 (lib.mkForce [ ]);
+ systemd.services.pdfding.serviceConfig.TimeoutStartSec =
+ lib.mkIf pkgs.stdenv.hostPlatform.isAarch64 "900";
+ systemd.services.pdfding-background.wantedBy = lib.mkIf pkgs.stdenv.hostPlatform.isAarch64 (
+ lib.mkForce [ ]
+ );
+
environment.systemPackages = [
config.services.postgresql.finalPackage
];
@@ -46,6 +54,8 @@
# create admin
machine.wait_for_unit("multi-user.target")
+ machine.succeed("systemctl start pdfding.service")
+ machine.succeed("systemctl start pdfding-background.service")
machine.wait_for_open_port(${toString port})
machine.succeed("DJANGO_SUPERUSER_PASSWORD=admin pdfding-manage createsuperuser --no-input --username admin --email admin@localhost")
diff --git a/nixos/tests/web-apps/pdfding/s3-backups.nix b/nixos/tests/web-apps/pdfding/s3-backups.nix
index a3955c968b0d..610acabc9abb 100644
--- a/nixos/tests/web-apps/pdfding/s3-backups.nix
+++ b/nixos/tests/web-apps/pdfding/s3-backups.nix
@@ -31,12 +31,20 @@ in
backup.schedule = "*/1 * * * *";
backup.endpoint = "[::]:3900";
extraEnvironment.BACKUP_BUCKET_NAME = "pdfding-bucket";
- extraEnvironment.BACKUP_REGION = "garage";
+ extraEnvironment.BACKUP_REGION = "us-east-1";
envFiles = [ pdfding-s3-keys ];
installTestHelpers = true;
};
+ # NOTE: on aarch64-linux github actions runer due to lack of kvm, we need to delay pdfding start and give it more time to finish
+ systemd.services.pdfding.wantedBy = lib.mkIf pkgs.stdenv.hostPlatform.isAarch64 (lib.mkForce [ ]);
+ systemd.services.pdfding.serviceConfig.TimeoutStartSec =
+ lib.mkIf pkgs.stdenv.hostPlatform.isAarch64 "900";
+ systemd.services.pdfding-background.wantedBy = lib.mkIf pkgs.stdenv.hostPlatform.isAarch64 (
+ lib.mkForce [ ]
+ );
+
# Setup a local garage service for the backup feature
# taken from garage nixosTest
services.garage = {
@@ -48,7 +56,7 @@ in
rpc_secret = "5c1915fa04d0b6739675c61bf5907eb0fe3d9c69850c83820f51b4d25d13868c";
s3_api = {
- s3_region = "garage";
+ s3_region = "us-east-1";
api_bind_addr = "[::]:3900";
root_domain = ".s3.garage";
};
@@ -113,6 +121,8 @@ in
# create admin
machine.wait_for_unit("multi-user.target")
+ machine.succeed("systemctl start pdfding.service")
+ machine.succeed("systemctl start pdfding-background.service")
machine.wait_for_open_port(${toString port})
machine.succeed("DJANGO_SUPERUSER_PASSWORD=admin pdfding-manage createsuperuser --no-input --username admin --email admin@localhost")
@@ -140,7 +150,7 @@ in
-F "description=" \
-F "collection=1" \
-F "use_file_name=on" \
- -F "name=test-upload" \
+ -F "name=dummy" \
-F "file=@{test_pdf};type=application/pdf" \
-F "csrfmiddlewaretoken=$csrf_token" \
-H "Referer: {endpoint}/pdf/add" \
diff --git a/nixos/tests/web-apps/pretalx.nix b/nixos/tests/web-apps/pretalx.nix
index 03fa6684b8b5..f6d61786e893 100644
--- a/nixos/tests/web-apps/pretalx.nix
+++ b/nixos/tests/web-apps/pretalx.nix
@@ -4,37 +4,38 @@
name = "pretalx";
meta.maintainers = pkgs.pretalx.meta.maintainers;
- nodes = {
- pretalx =
- { config, ... }:
- {
- networking.extraHosts = ''
- 127.0.0.1 talks.local
- '';
+ containers.pretalx =
+ { config, ... }:
+ {
+ networking.extraHosts = ''
+ 127.0.0.1 talks.local
+ '';
- services.pretalx = {
- enable = true;
- plugins = with config.services.pretalx.package.plugins; [
- pages
- ];
- nginx.domain = "talks.local";
- settings = {
- site.url = "http://talks.local";
- };
+ services.pretalx = {
+ enable = true;
+ plugins = with config.services.pretalx.package.plugins; [
+ pages
+ ];
+ nginx.domain = "talks.local";
+ settings = {
+ site.url = "http://talks.local";
};
};
- };
+ };
- testScript = ''
- start_all()
+ testScript =
+ # python
+ ''
+ start_all()
- pretalx.wait_for_unit("pretalx-web.service")
- pretalx.wait_for_unit("pretalx-worker.service")
+ pretalx.wait_for_unit("pretalx-web.service")
+ pretalx.wait_for_unit("pretalx-worker.service")
- pretalx.wait_until_succeeds("curl -q --fail http://talks.local/orga/")
+ pretalx.wait_until_succeeds("curl -q --fail http://talks.local/orga/")
- pretalx.succeed("pretalx-manage --help")
+ pretalx.log(pretalx.succeed("id"))
+ pretalx.succeed("pretalx-manage --help | grep -q 'createsuperuser'")
- pretalx.log(pretalx.succeed("systemd-analyze security pretalx-web.service"))
- '';
+ pretalx.log(pretalx.succeed("systemd-analyze security pretalx-web.service"))
+ '';
}
diff --git a/nixos/tests/web-apps/pretix.nix b/nixos/tests/web-apps/pretix.nix
index f99bb8733547..f58ad78146d2 100644
--- a/nixos/tests/web-apps/pretix.nix
+++ b/nixos/tests/web-apps/pretix.nix
@@ -1,50 +1,47 @@
{
- lib,
pkgs,
...
}:
{
name = "pretix";
- meta.maintainers = with lib.maintainers; [ hexa ];
+ meta.maintainers = pkgs.pretix.meta.maintainers;
- nodes = {
- pretix = {
- virtualisation.memorySize = 2048;
+ containers.pretix = {
+ networking.extraHosts = ''
+ 127.0.0.1 tickets.local
+ '';
- networking.extraHosts = ''
- 127.0.0.1 tickets.local
- '';
-
- services.pretix = {
- enable = true;
- nginx.domain = "tickets.local";
- plugins = with pkgs.pretix.plugins; [
- passbook
- pages
- zugferd
- ];
- settings = {
- pretix = {
- instance_name = "NixOS Test";
- url = "http://tickets.local";
- };
- mail.from = "hello@tickets.local";
+ services.pretix = {
+ enable = true;
+ nginx.domain = "tickets.local";
+ plugins = with pkgs.pretix.plugins; [
+ passbook
+ pages
+ zugferd
+ ];
+ settings = {
+ pretix = {
+ instance_name = "NixOS Test";
+ url = "http://tickets.local";
};
+ mail.from = "hello@tickets.local";
};
};
};
- testScript = ''
- start_all()
+ testScript =
+ # python
+ ''
+ start_all()
- pretix.wait_for_unit("pretix-web.service")
- pretix.wait_for_unit("pretix-worker.service")
+ pretix.wait_for_unit("pretix-web.service")
+ pretix.wait_for_unit("pretix-worker.service")
- pretix.wait_until_succeeds("curl -q --fail http://tickets.local")
+ pretix.wait_until_succeeds("curl -q --fail http://tickets.local")
- pretix.succeed("pretix-manage --help")
+ pretix.succeed("pretix-manage --help | grep -q 'createsuperuser'")
- pretix.log(pretix.succeed("systemd-analyze security pretix-web.service"))
- '';
+ pretix.log(pretix.succeed("systemd-analyze security pretix-web.service"))
+ '';
}
diff --git a/nixos/tests/web-apps/rustical.nix b/nixos/tests/web-apps/rustical.nix
index 15a718e87702..3213cfd61f09 100644
--- a/nixos/tests/web-apps/rustical.nix
+++ b/nixos/tests/web-apps/rustical.nix
@@ -4,10 +4,6 @@
...
}:
-let
- port = "4000";
-in
-
{
name = "rustical";
@@ -15,14 +11,21 @@ in
containers.machine =
{
+ config,
pkgs,
...
}:
{
- services.rustical = {
+ services.rustical.enable = true;
+ services.nginx = {
enable = true;
- settings.http.bind = "[::]:${port}";
+ virtualHosts."localhost" = {
+ locations."/" = {
+ proxyPass = "http://${config.services.rustical.settings.http.bind}";
+ };
+ };
};
+ systemd.services.nginx.serviceConfig.SupplementaryGroups = [ "rustical" ];
environment.systemPackages = with pkgs; [ calendar-cli ];
};
@@ -32,8 +35,6 @@ in
...
}:
let
- url = "http://localhost:${toString port}";
-
createPrincipalScript = pkgs.writeScript "rustical-create-principal" ''
#!${lib.getExe pkgs.expect}
spawn rustical principals create alice --password
@@ -45,30 +46,31 @@ in
calendarCliConfig = (pkgs.formats.json { }).generate "rustical-test-calendar-cli.json" {
default = {
caldav_user = "alice";
- caldav_url = "${url}/caldav/";
- calendar_url = "${url}/caldav/principal/alice";
+ caldav_url = "http://localhost/caldav/";
+ calendar_url = "http://localhost/caldav/principal/alice";
};
testcal = {
inherits = "default";
- calendar_url = "${url}/caldav/principal/alice/testcal";
+ calendar_url = "http://localhost/caldav/principal/alice/testcal";
};
};
in
# python
''
machine.wait_for_unit("rustical.service")
- machine.wait_for_open_port(${port})
+ machine.wait_for_file("${lib.removePrefix "unix:" containers.machine.services.rustical.settings.http.bind}")
+ machine.wait_for_open_port(80)
with subtest("Smoketest"):
- machine.succeed("curl --fail ${url}")
+ machine.succeed("curl --fail http://localhost")
with subtest("Create principal"):
machine.succeed("${createPrincipalScript}")
machine.succeed("rustical principals list | grep alice")
with subtest("Generate token for principal"):
- machine.succeed("curl -f -c cookies.txt -d 'username=alice&password=foobar' ${url}/frontend/login")
- machine.succeed("curl -f -b cookies.txt -d 'name=mytoken' ${url}/frontend/user/alice/app_token > token.txt")
+ machine.succeed("curl -f -c cookies.txt -d 'username=alice&password=foobar' http://localhost/frontend/login")
+ machine.succeed("curl -f -b cookies.txt -d 'name=mytoken' http://localhost/frontend/user/alice/app_token > token.txt")
with subtest("Interact with caldav"):
machine.succeed('calendar-cli --config-file ${calendarCliConfig} --caldav-pass "$(cat token.txt)" calendar create testcal')
diff --git a/nixos/tests/web-apps/stump.nix b/nixos/tests/web-apps/stump.nix
new file mode 100644
index 000000000000..ce67647404f0
--- /dev/null
+++ b/nixos/tests/web-apps/stump.nix
@@ -0,0 +1,26 @@
+{ ... }:
+{
+ name = "stump-nixos";
+
+ nodes.machine =
+ { ... }:
+ {
+ services.stump.enable = true;
+ };
+
+ testScript = ''
+ import json
+
+ machine.wait_for_unit("stump.service")
+
+ machine.wait_for_open_port(10001)
+ machine.succeed("curl --fail -s http://localhost:10001/")
+
+ machine.succeed("curl --fail -s --data '{\"username\":\"admin\",\"password\":\"admin\"}' -H 'Content-Type: application/json' -X POST http://localhost:10001/api/v2/auth/register")
+
+ response = machine.succeed("curl --fail -s -X GET http://localhost:10001/api/v2/claim")
+ is_claimed = json.loads(response)['isClaimed']
+
+ assert is_claimed
+ '';
+}
diff --git a/nixos/tests/xrdp-with-audio-pulseaudio.nix b/nixos/tests/xrdp-with-audio-pulseaudio.nix
index cc630143b990..3f7534c74bcf 100644
--- a/nixos/tests/xrdp-with-audio-pulseaudio.nix
+++ b/nixos/tests/xrdp-with-audio-pulseaudio.nix
@@ -10,8 +10,8 @@
# - Open a browser or something that plays sound. Ex: chromium
name = "xrdp-with-audio-pulseaudio";
- meta = with pkgs.lib.maintainers; {
- maintainers = [ lucasew ];
+ meta = {
+ maintainers = [ ];
};
nodes = {
@@ -73,7 +73,7 @@
testScript =
{ nodes, ... }:
let
- user = nodes.client.config.users.users.alice;
+ user = nodes.client.users.users.alice;
in
''
start_all()
diff --git a/nixos/tests/your_spotify.nix b/nixos/tests/your_spotify.nix
index c4935face7df..9fa13e453fb5 100644
--- a/nixos/tests/your_spotify.nix
+++ b/nixos/tests/your_spotify.nix
@@ -6,6 +6,7 @@
};
nodes.machine = {
+ services.mongodb.package = pkgs.mongodb-ce;
services.your_spotify = {
enable = true;
spotifySecretFile = pkgs.writeText "spotifySecretFile" "deadbeef";
diff --git a/pkgs/README.md b/pkgs/README.md
index 5578e8df3a96..2f1f0434d3e2 100644
--- a/pkgs/README.md
+++ b/pkgs/README.md
@@ -183,12 +183,18 @@ To add a package to Nixpkgs:
Examples:
* nginx: init at 2.0.1
+ * qt6Packages.qtdeclarative: fix build
* firefox: 54.0.1 -> 55.0
https://www.mozilla.org/en-US/firefox/55.0/releasenotes/
(using "→" instead of "->" is also accepted)
+For package sets with multiple versions, such as `perlPackages` (aliased to
+`perl5Packages`) and `python3Packages` (aliased to `python313Packages` at the
+time of writing), please use the unversioned attribute in your commit message
+unless the change is specific to one version.
+
Using the `(pkg-name):` prefix is important beyond just being a convention: it queues automatic builds by CI.
More sophisticated prefixes are also possible:
@@ -196,8 +202,8 @@ More sophisticated prefixes are also possible:
|--------------------------------------------------------------------------|------------------------------------------------------------|
| `vim: 1.0.0 -> 2.0.0` | `vim` |
| `vagrant: fix dependencies for version 2.0.2` | `vagrant` |
-| `python3{9,10}Packages.requests: 1.0.0 -> 2.0.0` | `python39Packages.requests`, `python310Packages.requests` |
-| `python312.pkgs.numpy,python313.pkgs.scipy: fix build` | `python312.pkgs.numpy` , `python313.pkgs.scipy` |
+| `python3Packages.requests: 1.0.0 -> 2.0.0` | `python3Packages.requests` |
+| `python3Packagess.{numpy,scipy}: fix build` | `python3Packages.numpy` , `python3Packages.scipy` |
When opening a PR with multiple commits, CI creates a single build job for all detected packages.
If `passthru.tests` attributes are available, these will be built as well.
@@ -906,10 +912,14 @@ stdenv.mkDerivation {
## Automatic package updates
[automatic-package-updates]: #automatic-package-updates
-Nixpkgs periodically tries to update all packages that have a `passthru.updateScript` attribute.
+The [community bot `r-ryantm`](https://nix-community.org/update-bot/), periodically tries to update all packages in Nixpkgs.
+`r-ryantm` runs the program [`nixpkgs-update`](https://nix-community.github.io/nixpkgs-update/) to find new versions of packages.
+In most cases, `nixpkgs-update` will be capable of finding new versions and perform the update with out any special instructions.
+Putting a `passthru.updateScript` attribute sets an explicit update procedure for `nixpkgs-update`, but this is not required for most cases.
+To learn more about the default update procedures, read their [FAQ for Nixpkgs maintainers](https://nix-community.github.io/nixpkgs-update/nixpkgs-maintainer-faq/).
> [!Note]
-> A common pattern is to use the [`nix-update-script`](../pkgs/by-name/ni/nix-update/nix-update-script.nix) attribute provided in Nixpkgs, which runs [`nix-update`](https://github.com/Mic92/nix-update):
+> A common pattern is to use the [`nix-update-script`](../pkgs/by-name/ni/nix-update/nix-update-script.nix) function provided in Nixpkgs, which makes automatic updates use [`nix-update`](https://github.com/Mic92/nix-update):
>
> ```nix
> { stdenv, nix-update-script }:
@@ -919,9 +929,10 @@ Nixpkgs periodically tries to update all packages that have a `passthru.updateSc
> }
> ```
>
-> For simple packages, this is often enough, and will ensure that the package is updated automatically by [`nixpkgs-update`](https://github.com/nix-community/nixpkgs-update) when a new version is released.
-> The [update bot](https://nix-community.org/update-bot) runs periodically to attempt to automatically update packages, and will run `passthru.updateScript` if set.
-> While not strictly necessary if the project is listed on [Repology](https://repology.org), using `nix-update-script` allows the package to update via many more sources (e.g. GitHub releases).
+> `nix-update` is a little bit more flexible than `nixpkgs-update` in performing updates, so it can be useful for cases such as:
+>
+> - A `nix-update` CLI flag like `--version branch` or `--version-regex` are needed to make the update work.
+> - You don't want to rely upon new versions to be listed in [Repology](https://repology.org/), and `nix-update` finds new versions easily (e.g GitLab projects).
The `passthru.updateScript` attribute can contain one of the following:
@@ -1019,7 +1030,7 @@ Furthermore each update script will be passed the following environment variable
> An update script will be usually run from the root of the Nixpkgs repository, but you should not rely on that.
> Also note that `update.nix` executes update scripts in parallel by default, so you should avoid running `git commit` or any other commands that cannot handle that.
-While update scripts should not create commits themselves, `update.nix` supports automatically creating commits when running it with `--argstr commit true`.
+While update scripts should not create commits themselves, `update.nix` supports automatically creating commits when running it with `--arg commit true`.
If you need to customize commit message, you can have the update script implement the `commit` feature.
### Supported features
@@ -1046,7 +1057,7 @@ If you need to customize commit message, you can have the update script implemen
```
:::
- When `update.nix` is run with `--argstr commit true`, it will create a separate commit for each of the objects.
+ When `update.nix` is run with `--arg commit true`, it will create a separate commit for each of the objects.
An empty list can be returned when the script did not update any files; for example, when the package is already at the latest version.
The commit object contains the following values:
diff --git a/pkgs/applications/audio/deadbeef/plugins/statusnotifier.nix b/pkgs/applications/audio/deadbeef/plugins/statusnotifier.nix
index f23e967d5687..3f7479882c59 100644
--- a/pkgs/applications/audio/deadbeef/plugins/statusnotifier.nix
+++ b/pkgs/applications/audio/deadbeef/plugins/statusnotifier.nix
@@ -11,13 +11,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "deadbeef-statusnotifier-plugin";
- version = "1.6";
+ version = "1.7";
src = fetchFromGitHub {
owner = "vovochka404";
repo = "deadbeef-statusnotifier-plugin";
rev = "v${finalAttrs.version}";
- sha256 = "sha256-6WEbY59vPNrL3W5GUwFQJimmSS+td8Ob+G46fPAxfV4=";
+ sha256 = "sha256-pDiQn+iHSTNWTO01j/fbEq3P374TMmnUiC5/Jn2hwBI=";
};
nativeBuildInputs = [ pkg-config ];
diff --git a/pkgs/applications/audio/deadbeef/plugins/vgmstream.nix b/pkgs/applications/audio/deadbeef/plugins/vgmstream.nix
index 665b685932f9..98669ee1c13d 100644
--- a/pkgs/applications/audio/deadbeef/plugins/vgmstream.nix
+++ b/pkgs/applications/audio/deadbeef/plugins/vgmstream.nix
@@ -13,13 +13,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "deadbeef-vgmstream-plugin";
- version = "2026-05-24";
+ version = "2026-06-22";
src = fetchFromGitHub {
owner = "jchv";
repo = "deadbeef-vgmstream";
rev = finalAttrs.version;
- hash = "sha256-wuyqAAcNQZH7HeDve4ZXXK5q28lFfSYracCVuGjxfbw=";
+ hash = "sha256-pX6uhrLgJ2sWwm2tR45YuYbICrP8fKgOD/TXV79bHn4=";
};
nativeBuildInputs = [ pkg-config ];
diff --git a/pkgs/applications/audio/mopidy/mopidy.nix b/pkgs/applications/audio/mopidy/mopidy.nix
index 2465b0256aa9..07c89dad0fce 100644
--- a/pkgs/applications/audio/mopidy/mopidy.nix
+++ b/pkgs/applications/audio/mopidy/mopidy.nix
@@ -51,7 +51,9 @@ pythonPackages.buildPythonApplication (finalAttrs: {
pygobject3
pykka
requests
- setuptools
+ # Provides pkg_resources required by Mopidy 3 and affected extensions.
+ # Remove when updating to Mopidy 4.
+ setuptools_80
tornado
]
++ lib.optionals (!stdenv.hostPlatform.isDarwin) [ dbus-python ];
diff --git a/pkgs/applications/audio/pianoteq/default.nix b/pkgs/applications/audio/pianoteq/default.nix
index 7778fed0e1c2..d596c8b20be0 100644
--- a/pkgs/applications/audio/pianoteq/default.nix
+++ b/pkgs/applications/audio/pianoteq/default.nix
@@ -13,6 +13,7 @@
makeDesktopItem,
makeWrapper,
p7zip,
+ gnutar,
writeShellScript,
}:
let
@@ -46,9 +47,17 @@ let
pname = "pianoteq-${name}";
- unpackPhase = ''
- ${p7zip}/bin/7z x $src
- '';
+ unpackPhase =
+ if lib.hasSuffix ".7z" src then
+ ''
+ ${p7zip}/bin/7z x $src
+ ''
+ else if lib.hasSuffix ".tar.xz" src then
+ ''
+ ${gnutar}/bin/tar -xf $src
+ ''
+ else
+ throw "unexpected file format";
nativeBuildInputs = [
autoPatchelfHook
@@ -243,6 +252,7 @@ let
version6 = "6.7.3";
version7 = "7.5.4";
version8 = "8.4.0";
+ version9 = "9.1.2";
mkStandard =
version: hash:
@@ -292,8 +302,35 @@ let
inherit hash;
};
};
+ mkTrial9 =
+ hash:
+ mkPianoteq {
+ name = "trial";
+ version = version9;
+ mainProgram = "Pianoteq 9";
+ startupWMClass = "Pianoteq Trial";
+ src = fetchPianoteqTrial {
+ name = "pianoteq_trial_v${versionForFile version9}.tar.xz";
+ inherit hash;
+ };
+ };
+ mkStage9 =
+ hash:
+ mkPianoteq {
+ name = "stage";
+ version = version9;
+ mainProgram = "Pianoteq 9 STAGE";
+ startupWMClass = "Pianoteq STAGE";
+ src = fetchPianoteqWithLogin {
+ name = "pianoteq_setup_v${versionForFile version9}.tar.xz";
+ inherit hash;
+ };
+ };
in
{
+ trial_9 = mkTrial9 "sha256-1ofPL6F12Gv+k2rZBadOa5Iyukuji6vdww87ufdKjM8=";
+ stage_9 = mkStage9 "sha256-Jvm/AhBwgj5INW8U48rJjgDB7j/Z1VnYKczvtrpl/AY=";
+
standard_8 = mkStandard version8 "sha256-ZDGB/SOOz+sWz7P+sNzyaipEH452n8zq5LleO3ztSXc=";
stage_8 = mkStage version8 "";
standard-trial_8 = mkStandardTrial version8 "sha256-K3LbAWxciXt9hVAyRayxSoE/IYJ38Fd03+j0s7ZsMuw=";
diff --git a/pkgs/applications/editors/android-studio/default.nix b/pkgs/applications/editors/android-studio/default.nix
index f3cecb980d19..fa043d3cdb9e 100644
--- a/pkgs/applications/editors/android-studio/default.nix
+++ b/pkgs/applications/editors/android-studio/default.nix
@@ -16,19 +16,19 @@ let
inherit tiling_wm;
};
stableVersion = {
- version = "2026.1.1.8"; # "Android Studio Quail 1 | 2026.1.1"
- sha256Hash = "sha256-DB+kujz6vQfkipDgCl+i6iqCzVhwgz2tpbApDIF9g9M=";
- url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2026.1.1.8/android-studio-quail1-linux.tar.gz";
+ version = "2026.1.2.10"; # "Android Studio Quail 2 | 2026.1.2"
+ sha256Hash = "sha256-ZERaVAkucFbG638aia0RbQ/uwu9flluOWU1iq9tYWQ8=";
+ url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2026.1.2.10/android-studio-quail2-linux.tar.gz";
};
betaVersion = {
- version = "2026.1.1.7"; # "Android Studio Quail 1 | 2026.1.1 RC 2"
- sha256Hash = "sha256-TB9hPynvVq1axv6oAw8un6WHVHakZPvEBjfPCs+Dwj0=";
- url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2026.1.1.7/android-studio-quail1-rc2-linux.tar.gz";
+ version = "2026.1.3.5"; # "Android Studio Quail 3 | 2026.1.3 RC 1"
+ sha256Hash = "sha256-P8YoUnG4YtCOPkbHLFBHfteZg8cJJeXuDgty+kmgbSw=";
+ url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2026.1.3.5/android-studio-quail3-rc1-linux.tar.gz";
};
latestVersion = {
- version = "2026.1.2.7"; # "Android Studio Quail 2 | 2026.1.2 Canary 7"
- sha256Hash = "sha256-LHszfAtM5ZLNbTZG0isb+aUW3uwp+zav/igHT4HDeEM=";
- url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2026.1.2.7/android-studio-quail2-canary7-linux.tar.gz";
+ version = "2026.1.4.1"; # "Android Studio Quail 4 | 2026.1.4 Canary 1"
+ sha256Hash = "sha256-ynHUoMDsTNgKKRAU948k37ktAIlIm9A+md8KyVBTjl4=";
+ url = "https://edgedl.me.gvt1.com/android/studio/ide-zips/2026.1.4.1/android-studio-quail4-canary1-linux.tar.gz";
};
in
{
diff --git a/pkgs/applications/editors/cudatext/deps.json b/pkgs/applications/editors/cudatext/deps.json
deleted file mode 100644
index 3a1e643c6f7f..000000000000
--- a/pkgs/applications/editors/cudatext/deps.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "EncConv": {
- "owner": "Alexey-T",
- "rev": "2023.04.16",
- "hash": "sha256-6KaYv4OO6Ctk+vgow67LKGkbEEd1+lFJ9B1wSk4m3pc="
- },
- "ATBinHex-Lazarus": {
- "owner": "Alexey-T",
- "rev": "2023.08.12",
- "hash": "sha256-dEwz052aYcJtKpRcP8t7gE2RHuHPQ4T0zHFMv6zVZ6g="
- },
- "ATFlatControls": {
- "owner": "Alexey-T",
- "rev": "2023.10.30",
- "hash": "sha256-fuTQnnuWjIsABx457y+n6luLxQf+b9TiZGLXYjNsUrw="
- },
- "ATSynEdit": {
- "owner": "Alexey-T",
- "rev": "2023.11.23",
- "hash": "sha256-LGYGCxEPdZL4BU3TGiFxydu7AN8g5kqOdW+dcbiCf7E="
- },
- "ATSynEdit_Cmp": {
- "owner": "Alexey-T",
- "rev": "2023.05.31",
- "hash": "sha256-QXu/p3o0RSwMyntFYrjIQBtOBGvL9rAsINaglG3fZvo="
- },
- "EControl": {
- "owner": "Alexey-T",
- "rev": "2023.11.16",
- "hash": "sha256-FxUV+K9JRsdr0xqQzvg1UI4bBHyhqxiVoPN58h2+WVg="
- },
- "ATSynEdit_Ex": {
- "owner": "Alexey-T",
- "rev": "2023.11.23",
- "hash": "sha256-RNXP8O3UF+hwA3TNzLorZqlt04Idnc4Z9LA87JJSsZE="
- },
- "Python-for-Lazarus": {
- "owner": "Alexey-T",
- "rev": "2023.06.30",
- "hash": "sha256-mO8/RNJjy9KtFuDUmV2Y8Ff+Jjm9yRd7GSrI6mOONUc="
- },
- "Emmet-Pascal": {
- "owner": "Alexey-T",
- "rev": "2023.08.12",
- "hash": "sha256-s9ZKrL+XIWIwejnLz+uuyDbbDuOZLJhiuiMChKB4Reg="
- },
- "CudaText-lexers": {
- "owner": "Alexey-T",
- "rev": "2021.07.09",
- "hash": "sha256-OyC85mTMi9m5kbtx8TAK2V4voL1i+J+TFoLVwxlHiD4="
- },
- "bgrabitmap": {
- "owner": "bgrabitmap",
- "rev": "v11.5.6",
- "hash": "sha256-7TuHCCaH8/RxiVQmDILPW4T6op/XW6djwA5iSh/Yb5w="
- }
-}
diff --git a/pkgs/applications/editors/emacs/elisp-packages/elpa-common-overrides.nix b/pkgs/applications/editors/emacs/elisp-packages/elpa-common-overrides.nix
index 818646630cc5..e8d8c46ff192 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/elpa-common-overrides.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/elpa-common-overrides.nix
@@ -323,8 +323,5 @@ in
'';
});
- # native-ice https://github.com/mattiase/xr/issues/9
- xr = ignoreCompilationError super.xr;
-
# keep-sorted end
}
diff --git a/pkgs/applications/editors/emacs/elisp-packages/elpa-devel-generated.nix b/pkgs/applications/editors/emacs/elisp-packages/elpa-devel-generated.nix
index 5f4e032acc72..52e108e746e2 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/elpa-devel-generated.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/elpa-devel-generated.nix
@@ -9,10 +9,10 @@
elpaBuild {
pname = "a68-mode";
ename = "a68-mode";
- version = "1.2.0.20260129.20653";
+ version = "1.3.0.20260710.2";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/a68-mode-1.2.0.20260129.20653.tar";
- sha256 = "03b4608ij5jiijasy41vndwcnzl92gwc0frh2pxs6112p7xk2sf0";
+ url = "https://elpa.gnu.org/devel/a68-mode-1.3.0.20260710.2.tar";
+ sha256 = "10qxsr316kv8317zfjwixj7pmsrqykycwf6pmw0wiv8w0vq0v9jr";
};
packageRequires = [ ];
meta = {
@@ -52,10 +52,10 @@
elpaBuild {
pname = "ack";
ename = "ack";
- version = "1.11.0.20220924.84123";
+ version = "1.11.0.20260429.83816";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/ack-1.11.0.20220924.84123.tar";
- sha256 = "0vic2izviakj6qh2l15jd8qm8yr0h0qhy4r8sx7zdngpi9i14r5v";
+ url = "https://elpa.gnu.org/devel/ack-1.11.0.20260429.83816.tar";
+ sha256 = "106m586p8ynjbsf9yknsfjpgvss6wxivgshc5kg7l8fg61d7c0nd";
};
packageRequires = [ ];
meta = {
@@ -74,10 +74,10 @@
elpaBuild {
pname = "activities";
ename = "activities";
- version = "0.8pre0.20251118.222434";
+ version = "0.8pre0.20251118.85";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/activities-0.8pre0.20251118.222434.tar";
- sha256 = "0062llgn5ljf18d8fcdp4mkmn6dr67gkh8d56s8gy6rdiw354k8p";
+ url = "https://elpa.gnu.org/devel/activities-0.8pre0.20251118.85.tar";
+ sha256 = "0v0s5vlfd2dv4shbmxqn37mcvfmfszdk0nwi1y184hwsp0bkvzqx";
};
packageRequires = [ persist ];
meta = {
@@ -207,10 +207,10 @@
elpaBuild {
pname = "aggressive-completion";
ename = "aggressive-completion";
- version = "1.7.0.20220417.71805";
+ version = "1.8.0.20260529.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/aggressive-completion-1.7.0.20220417.71805.tar";
- sha256 = "1nmh9as4m0xjvda1f0hda8s1wk1z973wlfxcfci768y45ffnjn0g";
+ url = "https://elpa.gnu.org/devel/aggressive-completion-1.8.0.20260529.0.tar";
+ sha256 = "0w567lldk16v5x80h7wm8vmz5947izxi842m3cwsx2hghpsp1rrq";
};
packageRequires = [ ];
meta = {
@@ -249,10 +249,10 @@
elpaBuild {
pname = "agitate";
ename = "agitate";
- version = "0.0.20241021.65229";
+ version = "0.0.20260424.102016";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/agitate-0.0.20241021.65229.tar";
- sha256 = "11f1yj937wfnn6d12845pwa8045wp5pk9mbcvzhigni3jkm8820p";
+ url = "https://elpa.gnu.org/devel/agitate-0.0.20260424.102016.tar";
+ sha256 = "1sgzy52irfd1p5nppqrlna05fhrscchmclr3wj9s5qh3wdpfwqv8";
};
packageRequires = [ ];
meta = {
@@ -291,10 +291,10 @@
elpaBuild {
pname = "aircon-theme";
ename = "aircon-theme";
- version = "0.0.6.0.20240613.140459";
+ version = "0.0.6.0.20260507.72645";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/aircon-theme-0.0.6.0.20240613.140459.tar";
- sha256 = "1npppgbs1dfixqpmdc0nfxx4vvnsvpy101q8lcf7h9i8br63mlqy";
+ url = "https://elpa.gnu.org/devel/aircon-theme-0.0.6.0.20260507.72645.tar";
+ sha256 = "1cld1ns2q4vkxpmc69s6scnhgghi36ibmscg8zjwwhbbp31ah0ir";
};
packageRequires = [ ];
meta = {
@@ -333,10 +333,10 @@
elpaBuild {
pname = "altcaps";
ename = "altcaps";
- version = "1.3.0.0.20260413.54314";
+ version = "1.3.0.0.20260424.102117";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/altcaps-1.3.0.0.20260413.54314.tar";
- sha256 = "1jj7321nhxy7gk2cchv81nyw8fzzw7zkikgwgnj6k7kki53rhp8c";
+ url = "https://elpa.gnu.org/devel/altcaps-1.3.0.0.20260424.102117.tar";
+ sha256 = "00bjfrm5hyp53779fg40yjaldlqdli4frl4dmf7371zvpd63184z";
};
packageRequires = [ ];
meta = {
@@ -461,10 +461,10 @@
elpaBuild {
pname = "auctex";
ename = "auctex";
- version = "14.1.2.0.20260331.191333";
+ version = "14.1.2.0.20260710.47";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/auctex-14.1.2.0.20260331.191333.tar";
- sha256 = "1xan7cfl5nhndngmdrgs2832xpfl7jvfb86kgjn8i8lm81djz5r9";
+ url = "https://elpa.gnu.org/devel/auctex-14.1.2.0.20260710.47.tar";
+ sha256 = "0vlx2mi7fvch1h6s2cyjrwk88zib8l5cmzwh9z0i0z6pgnx5d7nq";
};
packageRequires = [ ];
meta = {
@@ -483,10 +483,10 @@
elpaBuild {
pname = "auctex-cont-latexmk";
ename = "auctex-cont-latexmk";
- version = "0.3.0.20250115.185937";
+ version = "0.3.0.20260617.10";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/auctex-cont-latexmk-0.3.0.20250115.185937.tar";
- sha256 = "1rdnnc7ihg12dprivywjmhfl5s2cb58bl2n3fy7gf6h2wsjw0md5";
+ url = "https://elpa.gnu.org/devel/auctex-cont-latexmk-0.3.0.20260617.10.tar";
+ sha256 = "1dcppji0h1yd75iv6ihg7iyjzwf14l6h32cf7k4aiyb58d8x2ka6";
};
packageRequires = [ auctex ];
meta = {
@@ -505,10 +505,10 @@
elpaBuild {
pname = "auctex-label-numbers";
ename = "auctex-label-numbers";
- version = "0.2.0.20241019.12742";
+ version = "0.3.0.20260714.1";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/auctex-label-numbers-0.2.0.20241019.12742.tar";
- sha256 = "0y4y8267r3bmwshcb5qkfrpnaxs1zwy1rwdhngjci005n68bslk9";
+ url = "https://elpa.gnu.org/devel/auctex-label-numbers-0.3.0.20260714.1.tar";
+ sha256 = "1bqw342873z0cpjg6lg3inscbjilwrgm0dgd9bhc7bb8mas7hkaj";
};
packageRequires = [ auctex ];
meta = {
@@ -548,10 +548,10 @@
elpaBuild {
pname = "auth-source-xoauth2-plugin";
ename = "auth-source-xoauth2-plugin";
- version = "0.3.2.0.20251113.213445";
+ version = "0.4.1.0.20260526.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/auth-source-xoauth2-plugin-0.3.2.0.20251113.213445.tar";
- sha256 = "02g7qy4aj85jqzzsqka9ki712hbz58ygwvr8f56ncyy1xapcjpsz";
+ url = "https://elpa.gnu.org/devel/auth-source-xoauth2-plugin-0.4.1.0.20260526.0.tar";
+ sha256 = "058src50y1rynyrsfcdlrswbmsmf41ic1aa0bfkqg19dgaag81qy";
};
packageRequires = [ oauth2 ];
meta = {
@@ -719,10 +719,10 @@
elpaBuild {
pname = "beframe";
ename = "beframe";
- version = "1.5.0.0.20260413.54824";
+ version = "1.5.0.0.20260605.5";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/beframe-1.5.0.0.20260413.54824.tar";
- sha256 = "1nj3gn44bd867yx34d9nzzqcfk5k3fp89wg7k83lpcc7f2a6w3dw";
+ url = "https://elpa.gnu.org/devel/beframe-1.5.0.0.20260605.5.tar";
+ sha256 = "1i4dmcxbjd73gpkbj82qw6r95hc2dqm4zvcmkmka9ymwxdjamwi1";
};
packageRequires = [ ];
meta = {
@@ -740,10 +740,10 @@
elpaBuild {
pname = "bicep-ts-mode";
ename = "bicep-ts-mode";
- version = "0.1.4.0.20251121.60244";
+ version = "0.1.4.0.20260720.83";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/bicep-ts-mode-0.1.4.0.20251121.60244.tar";
- sha256 = "0423n65lcxd56xc4q1mihwb07y81y12wh2qiwgwc1n1b7wilbpkg";
+ url = "https://elpa.gnu.org/devel/bicep-ts-mode-0.1.4.0.20260720.83.tar";
+ sha256 = "19k83fn4i2vvvad6pz865ns165vpd9msa1cnjhmlcfv5cxsa7wk3";
};
packageRequires = [ ];
meta = {
@@ -902,10 +902,10 @@
elpaBuild {
pname = "breadcrumb";
ename = "breadcrumb";
- version = "1.0.1.0.20260110.120308";
+ version = "1.0.1.0.20260630.15";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/breadcrumb-1.0.1.0.20260110.120308.tar";
- sha256 = "0g5gcq3iqvrkfi6iwbiiyrcwac36czxrfqi9gybipd9k11fqplcr";
+ url = "https://elpa.gnu.org/devel/breadcrumb-1.0.1.0.20260630.15.tar";
+ sha256 = "12l1bi4gynmgfffbj7w6za21a3n6776iqixm33rh7zkbzfhafvxl";
};
packageRequires = [ project ];
meta = {
@@ -950,10 +950,10 @@
elpaBuild {
pname = "buffer-env";
ename = "buffer-env";
- version = "0.6.0.20250516.122320";
+ version = "0.6.0.20260604.5";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/buffer-env-0.6.0.20250516.122320.tar";
- sha256 = "0m1kb8h2mjjd5hznp86yxjdic0zngq89x67vd7srvikxxbj312d9";
+ url = "https://elpa.gnu.org/devel/buffer-env-0.6.0.20260604.5.tar";
+ sha256 = "0w0lbfqn3mn628w2mhcfgmsrzzl3915vsry84g64gfb1ga7r4ld3";
};
packageRequires = [ compat ];
meta = {
@@ -993,10 +993,10 @@
elpaBuild {
pname = "bufferlo";
ename = "bufferlo";
- version = "1.2.0.20260314.110439";
+ version = "1.2.0.20260531.20";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/bufferlo-1.2.0.20260314.110439.tar";
- sha256 = "0jf14ac09wrx8hc6bkrczaddf48fxglvgz7qik7bd2vb7w9dpn80";
+ url = "https://elpa.gnu.org/devel/bufferlo-1.2.0.20260531.20.tar";
+ sha256 = "04g5c2zar12k9b4jrka13zc8bd67kn4xhjsybhrjdz3fhphj5ivn";
};
packageRequires = [ ];
meta = {
@@ -1106,10 +1106,10 @@
elpaBuild {
pname = "cape";
ename = "cape";
- version = "2.6.0.20260419.184703";
+ version = "2.7.0.20260628.1";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/cape-2.6.0.20260419.184703.tar";
- sha256 = "143b5kxykz4mgx2y7gq6vidrqnnjnc0ay809hjzbqfmpvlnf86fn";
+ url = "https://elpa.gnu.org/devel/cape-2.7.0.20260628.1.tar";
+ sha256 = "1hbwh1752p1rjh4csn6vs4k9bv2qxa0ms6s914aclx72slqa2qvj";
};
packageRequires = [ compat ];
meta = {
@@ -1266,6 +1266,28 @@
};
}
) { };
+ cm-mode = callPackage (
+ {
+ cl-lib ? null,
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "cm-mode";
+ ename = "cm-mode";
+ version = "1.10.0.20260518.192037";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/devel/cm-mode-1.10.0.20260518.192037.tar";
+ sha256 = "17ck187x677s00lvk09lr76fgl9i0sx7p46dqhf033k70c46a4gj";
+ };
+ packageRequires = [ cl-lib ];
+ meta = {
+ homepage = "https://elpa.gnu.org/devel/cm-mode.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
cobol-mode = callPackage (
{
elpaBuild,
@@ -1311,6 +1333,7 @@
) { };
colorful-mode = callPackage (
{
+ cl-lib ? null,
compat,
elpaBuild,
fetchurl,
@@ -1319,12 +1342,15 @@
elpaBuild {
pname = "colorful-mode";
ename = "colorful-mode";
- version = "1.2.5.0.20260324.223335";
+ version = "1.2.5.0.20260508.152701";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/colorful-mode-1.2.5.0.20260324.223335.tar";
- sha256 = "0gyz2n3j4ja4diknh6rm5rlzyw49pqbxin2j7ykjz0iprzr5vgnw";
+ url = "https://elpa.gnu.org/devel/colorful-mode-1.2.5.0.20260508.152701.tar";
+ sha256 = "1yif2xib8czihif7ls2kw98akjjc76ml0ic69jr3qysi73p3n6iv";
};
- packageRequires = [ compat ];
+ packageRequires = [
+ cl-lib
+ compat
+ ];
meta = {
homepage = "https://elpa.gnu.org/devel/colorful-mode.html";
license = lib.licenses.free;
@@ -1383,16 +1409,17 @@
elpaBuild,
fetchurl,
lib,
+ posframe,
}:
elpaBuild {
pname = "company";
ename = "company";
- version = "1.0.2.0.20260331.24502";
+ version = "1.0.2.0.20260718.178";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/company-1.0.2.0.20260331.24502.tar";
- sha256 = "19apxj576hy09pk37rpnzybab0ffrw63j2ycad5vwz75y84dhjys";
+ url = "https://elpa.gnu.org/devel/company-1.0.2.0.20260718.178.tar";
+ sha256 = "15ymhxywy9kh33rpjrbnn6h545hkwgqcc7mbjpjp7p2kghh1xndj";
};
- packageRequires = [ ];
+ packageRequires = [ posframe ];
meta = {
homepage = "https://elpa.gnu.org/devel/company.html";
license = lib.licenses.free;
@@ -1478,17 +1505,16 @@
elpaBuild,
fetchurl,
lib,
- seq,
}:
elpaBuild {
pname = "compat";
ename = "compat";
- version = "30.1.0.1.0.20260411.151508";
+ version = "31.0.0.2.0.20260716.2";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/compat-30.1.0.1.0.20260411.151508.tar";
- sha256 = "14vim5vlv57q6zl83lixj2palwbxz2dkbpivyvs56cjwqck41bvd";
+ url = "https://elpa.gnu.org/devel/compat-31.0.0.2.0.20260716.2.tar";
+ sha256 = "179w1zim5nfj1crvc2qm9ipvwwh2yr9q3rs8wjffcvsfjipnym5d";
};
- packageRequires = [ seq ];
+ packageRequires = [ ];
meta = {
homepage = "https://elpa.gnu.org/devel/compat.html";
license = lib.licenses.free;
@@ -1504,10 +1530,10 @@
elpaBuild {
pname = "cond-star";
ename = "cond-star";
- version = "1.0.0.20260228.134355";
+ version = "1.0.0.20260523.114724";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/cond-star-1.0.0.20260228.134355.tar";
- sha256 = "1hl7m4rjjq8c99f1xqa1b8hn3hpixx3ryzlf6wiq2lc7fn4icail";
+ url = "https://elpa.gnu.org/devel/cond-star-1.0.0.20260523.114724.tar";
+ sha256 = "15gp54pkm50dq9141fknq4gy8ya6wrbr0nyzqax15rxz57gsf6cs";
};
packageRequires = [ ];
meta = {
@@ -1547,10 +1573,10 @@
elpaBuild {
pname = "consult";
ename = "consult";
- version = "3.4.0.20260421.111434";
+ version = "3.6.0.20260716.5";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/consult-3.4.0.20260421.111434.tar";
- sha256 = "16gz342an0vsdj7jdy5gcrv8wwcwfqabdzsyyg1dcfzrlmvxvfja";
+ url = "https://elpa.gnu.org/devel/consult-3.6.0.20260716.5.tar";
+ sha256 = "1hn04wqdbdbrim1idbcqj9b0lkicghhyaba0jpw7zdw682hfjcaf";
};
packageRequires = [ compat ];
meta = {
@@ -1570,10 +1596,10 @@
elpaBuild {
pname = "consult-denote";
ename = "consult-denote";
- version = "0.4.2.0.20260423.93857";
+ version = "0.5.1.0.20260704.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/consult-denote-0.4.2.0.20260423.93857.tar";
- sha256 = "1fcf1abqg71kp9g0nsxdnmb33m6g4kn0iwgvfd1cqslyhmdkk0c8";
+ url = "https://elpa.gnu.org/devel/consult-denote-0.5.1.0.20260704.0.tar";
+ sha256 = "0bfy6gzznxg356s1nqrv5ma26rlb9njf12dbkma6glpr8l7gpavv";
};
packageRequires = [
consult
@@ -1595,10 +1621,10 @@
elpaBuild {
pname = "consult-hoogle";
ename = "consult-hoogle";
- version = "0.6.0.0.20260410.130304";
+ version = "0.7.0.0.20260430.125841";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/consult-hoogle-0.6.0.0.20260410.130304.tar";
- sha256 = "1067wh3r087bdvg4zqbzwmzh6qssj7x7y12qs3fh96vpqrjw2a11";
+ url = "https://elpa.gnu.org/devel/consult-hoogle-0.7.0.0.20260430.125841.tar";
+ sha256 = "06kqrgbm80bpszqb9i1zx0mwaw4imi3i3lz802rwbfdfa6cg1vnh";
};
packageRequires = [ consult ];
meta = {
@@ -1660,10 +1686,10 @@
elpaBuild {
pname = "corfu";
ename = "corfu";
- version = "2.9.0.20260419.183827";
+ version = "2.10.0.20260719.16";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/corfu-2.9.0.20260419.183827.tar";
- sha256 = "06myb0qgv8q3iak83bdpkjmd8vplqcvypl9q1y1h7qfbcy2yvssh";
+ url = "https://elpa.gnu.org/devel/corfu-2.10.0.20260719.16.tar";
+ sha256 = "0h3mjsfk8zsviqcqccql4pcj87ja0am78ag3q2w8jw77bqvk5s4a";
};
packageRequires = [ compat ];
meta = {
@@ -1835,10 +1861,10 @@
elpaBuild {
pname = "csv-mode";
ename = "csv-mode";
- version = "1.27.0.20250307.75451";
+ version = "1.27.0.20260505.161621";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/csv-mode-1.27.0.20250307.75451.tar";
- sha256 = "089z16kqm12zs7wrs46hskmz3mc1jqx00mzilaap197xq9hqkc3m";
+ url = "https://elpa.gnu.org/devel/csv-mode-1.27.0.20260505.161621.tar";
+ sha256 = "0g166wcxh7fl8ixnbc1ap2dl5mrq9ahzkx3b5fzfcx7f6b3aw8ym";
};
packageRequires = [ cl-lib ];
meta = {
@@ -1877,10 +1903,10 @@
elpaBuild {
pname = "cursory";
ename = "cursory";
- version = "1.2.0.0.20260413.54607";
+ version = "1.2.0.0.20260701.4";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/cursory-1.2.0.0.20260413.54607.tar";
- sha256 = "00cxb53p6l3d395vkmza1zqjrpx9rq65xy5cnv410i7lricrwpfr";
+ url = "https://elpa.gnu.org/devel/cursory-1.2.0.0.20260701.4.tar";
+ sha256 = "0087hsy0qzzlhj7zsasmc6x41w6gnh21sb0in7zyahy2x0qrqwi4";
};
packageRequires = [ ];
meta = {
@@ -1941,10 +1967,10 @@
elpaBuild {
pname = "dape";
ename = "dape";
- version = "0.26.0.0.20260406.153653";
+ version = "0.27.1.0.20260719.8";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/dape-0.26.0.0.20260406.153653.tar";
- sha256 = "0hpssk2z4i4nalmf9h0iz6iwawks3wh2lkf7il9pvsmxfyi5qb1q";
+ url = "https://elpa.gnu.org/devel/dape-0.27.1.0.20260719.8.tar";
+ sha256 = "08y9z6l5qirz812v0wz1y3fklsqj9b0476scl2ziq8mvjdkv37bq";
};
packageRequires = [ jsonrpc ];
meta = {
@@ -2075,10 +2101,10 @@
elpaBuild {
pname = "denote";
ename = "denote";
- version = "4.1.3.0.20260423.182534";
+ version = "4.2.3.0.20260707.7";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/denote-4.1.3.0.20260423.182534.tar";
- sha256 = "1mh9sl4rhsmxniibrnym69xdwgswij8132b4n7k65lw75y0p05j9";
+ url = "https://elpa.gnu.org/devel/denote-4.2.3.0.20260707.7.tar";
+ sha256 = "0yrqdz1znd5nkrwqiwrzgsgb7d1yysqmy1lr05r2yj3rlfzhcnvi";
};
packageRequires = [ ];
meta = {
@@ -2097,10 +2123,10 @@
elpaBuild {
pname = "denote-journal";
ename = "denote-journal";
- version = "0.2.2.0.20260328.192346";
+ version = "0.3.0.0.20260520.123338";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/denote-journal-0.2.2.0.20260328.192346.tar";
- sha256 = "1cp907wdx6cqy5qadq1dsp292ms7wr0qy5znf8fjj4112gxv7ymd";
+ url = "https://elpa.gnu.org/devel/denote-journal-0.3.0.0.20260520.123338.tar";
+ sha256 = "11ad50v3p81vrana2dbnqi7xm07aly4iv03rw5kxblynjcarsd1i";
};
packageRequires = [ denote ];
meta = {
@@ -2119,10 +2145,10 @@
elpaBuild {
pname = "denote-markdown";
ename = "denote-markdown";
- version = "0.2.2.0.20260423.181135";
+ version = "0.3.0.0.20260520.123211";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/denote-markdown-0.2.2.0.20260423.181135.tar";
- sha256 = "18l9aymn3v5i3y3g4bx81b16zw4mdgrkkz3939xq5dxy4wwmiqjk";
+ url = "https://elpa.gnu.org/devel/denote-markdown-0.3.0.0.20260520.123211.tar";
+ sha256 = "0bbf5cycmjl5p6cl81x5cjac98y97cr9jkwnrgi5sy5rgxqfpj8k";
};
packageRequires = [ denote ];
meta = {
@@ -2163,10 +2189,10 @@
elpaBuild {
pname = "denote-org";
ename = "denote-org";
- version = "0.2.1.0.20260228.191514";
+ version = "0.3.0.0.20260520.123505";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/denote-org-0.2.1.0.20260228.191514.tar";
- sha256 = "1x42gak4mqs6b5zw3z2akpylf3g5pnscg926b92a20naj31j71np";
+ url = "https://elpa.gnu.org/devel/denote-org-0.3.0.0.20260520.123505.tar";
+ sha256 = "12g38pk2vg1g1p9b847r4aisxxr9l36rsbgg1s4aqavd2cd3b00g";
};
packageRequires = [ denote ];
meta = {
@@ -2229,10 +2255,10 @@
elpaBuild {
pname = "denote-sequence";
ename = "denote-sequence";
- version = "0.2.0.0.20260409.181206";
+ version = "0.3.3.0.20260523.202058";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/denote-sequence-0.2.0.0.20260409.181206.tar";
- sha256 = "0r3b31hsnp3c4fjsjcyvbpzbbbbs465fn29zja23xwfix3x0y0rp";
+ url = "https://elpa.gnu.org/devel/denote-sequence-0.3.3.0.20260523.202058.tar";
+ sha256 = "1iyfm6y37waq2vfb210kdwkkrr8gv9l443b4wq768f1kj4bns2gg";
};
packageRequires = [ denote ];
meta = {
@@ -2251,10 +2277,10 @@
elpaBuild {
pname = "denote-silo";
ename = "denote-silo";
- version = "0.2.0.0.20260111.93458";
+ version = "0.3.2.0.20260705.4";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/denote-silo-0.2.0.0.20260111.93458.tar";
- sha256 = "0f57s97k267vd4wm9ps9q57wsrq5djrcsxmmkwlqngmr1yrnnhla";
+ url = "https://elpa.gnu.org/devel/denote-silo-0.3.2.0.20260705.4.tar";
+ sha256 = "08zgg8jll6kdmzqrzx2j0q0g35sk6sfbp6qxd687sc8p9n9bx4yg";
};
packageRequires = [ denote ];
meta = {
@@ -2337,10 +2363,10 @@
elpaBuild {
pname = "dicom";
ename = "dicom";
- version = "1.3.0.20260330.63030";
+ version = "1.5.0.20260704.4";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/dicom-1.3.0.20260330.63030.tar";
- sha256 = "0xfvmxp1w730b5hgq3wnaa79mi2ib2v43z4as9py82ccvmcw2c40";
+ url = "https://elpa.gnu.org/devel/dicom-1.5.0.20260704.4.tar";
+ sha256 = "0b5mm81wfskhls44w951igz2y5yf4lx3g61fswyk9hjhm4sccgz5";
};
packageRequires = [ compat ];
meta = {
@@ -2387,10 +2413,10 @@
elpaBuild {
pname = "diff-hl";
ename = "diff-hl";
- version = "1.10.0.0.20260328.192544";
+ version = "1.10.0.0.20260627.186";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/diff-hl-1.10.0.0.20260328.192544.tar";
- sha256 = "1whznmdqlf3gnyq0k7n9pj71d8qb3avv27dmk86kmgvp1n2bq3c4";
+ url = "https://elpa.gnu.org/devel/diff-hl-1.10.0.0.20260627.186.tar";
+ sha256 = "0anq2hcihzsm3ff0g0smk8w72x5fi3frqymbm1dci679ssx4316v";
};
packageRequires = [ cl-lib ];
meta = {
@@ -2514,10 +2540,10 @@
elpaBuild {
pname = "dired-preview";
ename = "dired-preview";
- version = "0.6.0.0.20260413.54225";
+ version = "0.6.1.0.20260610.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/dired-preview-0.6.0.0.20260413.54225.tar";
- sha256 = "0x1s8b4swr62a833zszyk9kfnh2fx5kl5rwjdfhm4mgpib50nmcy";
+ url = "https://elpa.gnu.org/devel/dired-preview-0.6.1.0.20260610.0.tar";
+ sha256 = "061b09z60jjd8gggjln9nr5fb0r3rvip31mi8l7r9b1f49k8x730";
};
packageRequires = [ ];
meta = {
@@ -2621,10 +2647,10 @@
elpaBuild {
pname = "dmsg";
ename = "dmsg";
- version = "0.2.0.20260422.105206";
+ version = "0.3.0.20260515.181304";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/dmsg-0.2.0.20260422.105206.tar";
- sha256 = "0h8l75k00hh0j2cyc2jwqkrnr7qmkz0jydbhm2qwpm3bb5pyd6bq";
+ url = "https://elpa.gnu.org/devel/dmsg-0.3.0.20260515.181304.tar";
+ sha256 = "0f95v15bcyclap8zcz5iyaf09wq63px29q12w0s6aza3j5sslz6p";
};
packageRequires = [ ];
meta = {
@@ -2642,10 +2668,10 @@
elpaBuild {
pname = "do-at-point";
ename = "do-at-point";
- version = "0.2.0.0.20260302.225537";
+ version = "0.2.0.0.20260502.162532";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/do-at-point-0.2.0.0.20260302.225537.tar";
- sha256 = "093jsdpwv4caq46fhr7q0ymh59v45w78pfr5l1mrw9rl1cjh1b37";
+ url = "https://elpa.gnu.org/devel/do-at-point-0.2.0.0.20260502.162532.tar";
+ sha256 = "07mamgs1fhx9kkfliz9c9a3cdbxjbbydc8hr9zkjf8sy0gwy65da";
};
packageRequires = [ ];
meta = {
@@ -2684,10 +2710,10 @@
elpaBuild {
pname = "doc-view-follow";
ename = "doc-view-follow";
- version = "0.3.2.0.20250427.143824";
+ version = "0.3.2.0.20260708.1";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/doc-view-follow-0.3.2.0.20250427.143824.tar";
- sha256 = "04jk93rkv682w6zcfr283gpwgi5fiq5w3xdpv49zkwddx783crfa";
+ url = "https://elpa.gnu.org/devel/doc-view-follow-0.3.2.0.20260708.1.tar";
+ sha256 = "0xyd9w7fqaj22dp43788gm5i7rzbhch2sh2mmarhyw4xp9a7j83w";
};
packageRequires = [ ];
meta = {
@@ -2726,10 +2752,10 @@
elpaBuild {
pname = "doric-themes";
ename = "doric-themes";
- version = "1.1.0.0.20260325.70019";
+ version = "1.2.1.0.20260716.2";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/doric-themes-1.1.0.0.20260325.70019.tar";
- sha256 = "1775v235qd5v0zxakf992iwcmm7nwxppwm2ghx1l86iyfr4l80s4";
+ url = "https://elpa.gnu.org/devel/doric-themes-1.2.1.0.20260716.2.tar";
+ sha256 = "00jysh555i53hx32drdfwc25bf09jq4hm0q6w2q9h2pzrk8wmk85";
};
packageRequires = [ ];
meta = {
@@ -2748,10 +2774,10 @@
elpaBuild {
pname = "drepl";
ename = "drepl";
- version = "0.4.0.20251012.81518";
+ version = "0.4.0.20260715.8";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/drepl-0.4.0.20251012.81518.tar";
- sha256 = "0xq39hhxx8fpkxqkxnihgn0dw3gxxyzaglpw4cpbn5f6zx2x26yy";
+ url = "https://elpa.gnu.org/devel/drepl-0.4.0.20260715.8.tar";
+ sha256 = "01gbl3gqrlz2gimmjsk0nb6zyps8a89z96bwrxqfjph6w13d33gw";
};
packageRequires = [ comint-mime ];
meta = {
@@ -2950,10 +2976,10 @@
elpaBuild {
pname = "ef-themes";
ename = "ef-themes";
- version = "2.1.0.0.20260405.133650";
+ version = "2.2.0.0.20260621.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/ef-themes-2.1.0.0.20260405.133650.tar";
- sha256 = "0mg7zxw33swrwy195cbnpjsi9waydbw0aq8hvpwf58cwf6lnszzn";
+ url = "https://elpa.gnu.org/devel/ef-themes-2.2.0.0.20260621.0.tar";
+ sha256 = "0l4qcn558wwwq29n0kf5ws8xbw834dp5n8kzdn225kg9x6h9a5dd";
};
packageRequires = [ modus-themes ];
meta = {
@@ -2978,10 +3004,10 @@
elpaBuild {
pname = "eglot";
ename = "eglot";
- version = "1.23.0.20260422.80836";
+ version = "1.24.0.20260623.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/eglot-1.23.0.20260422.80836.tar";
- sha256 = "1w7pfbx6m68x6anxg1038cah2wbyb3f3mdgsqsrsj0dbh9qwzzq5";
+ url = "https://elpa.gnu.org/devel/eglot-1.24.0.20260623.0.tar";
+ sha256 = "16zcxb2xfxfxppkr0l00h72q5wgww6bi66zqf76h1j84k295mjwv";
};
packageRequires = [
eldoc
@@ -3054,10 +3080,10 @@
elpaBuild {
pname = "eldoc";
ename = "eldoc";
- version = "1.16.0.0.20260101.125434";
+ version = "1.16.0.0.20260709.6";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/eldoc-1.16.0.0.20260101.125434.tar";
- sha256 = "1c29yb3x2sfnqq690hgvw0f4wsf1aj327k137hwcz6pgc6llgg76";
+ url = "https://elpa.gnu.org/devel/eldoc-1.16.0.0.20260709.6.tar";
+ sha256 = "0i3bls6iq0lm03w09vrillqygx8xx9xpf2ixr8k2q3my4g8kszqx";
};
packageRequires = [ ];
meta = {
@@ -3152,10 +3178,10 @@
elpaBuild {
pname = "ellama";
ename = "ellama";
- version = "1.13.0.0.20260410.5454";
+ version = "1.30.0.0.20260712.1";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/ellama-1.13.0.0.20260410.5454.tar";
- sha256 = "05pvhjagzc0nb2nsagbd1xhxfqvrfhjn734881ph6njr3ns186ai";
+ url = "https://elpa.gnu.org/devel/ellama-1.30.0.0.20260712.1.tar";
+ sha256 = "0gn0jgi3li4ycqwjk2bbfwp47awxkr5pscyxpnxyy1qbjlv77s4d";
};
packageRequires = [
compat
@@ -3221,10 +3247,10 @@
elpaBuild {
pname = "emacs-lisp-intro-nl";
ename = "emacs-lisp-intro-nl";
- version = "0.0.20260419.193604";
+ version = "0.0.20260702.44";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/emacs-lisp-intro-nl-0.0.20260419.193604.tar";
- sha256 = "1spqwayvm830vzsyy7l768yd91f3h8agpd9wpaa6g0pd5pdhh42r";
+ url = "https://elpa.gnu.org/devel/emacs-lisp-intro-nl-0.0.20260702.44.tar";
+ sha256 = "1xsnp0pfsvs20wscbqcqsigl56ig5vacmkl86f3ljp338ka90d5f";
};
packageRequires = [ ];
meta = {
@@ -3243,10 +3269,10 @@
elpaBuild {
pname = "embark";
ename = "embark";
- version = "1.2.0.20260404.170203";
+ version = "1.2.0.20260609.21";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/embark-1.2.0.20260404.170203.tar";
- sha256 = "1ppb6axy1bwxm7qa0pw9cn2k0whl3dfnq69cw2qh62pqi1rnwvh6";
+ url = "https://elpa.gnu.org/devel/embark-1.2.0.20260609.21.tar";
+ sha256 = "1b4gkqrsjv21gxz6padf27wmzj46rryfy0pp662xf0fz9fab2ngp";
};
packageRequires = [ compat ];
meta = {
@@ -3267,10 +3293,10 @@
elpaBuild {
pname = "embark-consult";
ename = "embark-consult";
- version = "1.1.0.20260404.170203";
+ version = "1.2.0.20260609.20";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/embark-consult-1.1.0.20260404.170203.tar";
- sha256 = "1lh9jnqhb22yqwiacblcwwfj92lljxc12mamkzq6zk894hxnf9hd";
+ url = "https://elpa.gnu.org/devel/embark-consult-1.2.0.20260609.20.tar";
+ sha256 = "0507mv73swsdymlxqmqx40pr723jlrwmnwiy9qq294ihdk60npgd";
};
packageRequires = [
compat
@@ -3299,10 +3325,10 @@
elpaBuild {
pname = "ement";
ename = "ement";
- version = "0.18pre0.20251117.191748";
+ version = "0.18pre0.20251117.1";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/ement-0.18pre0.20251117.191748.tar";
- sha256 = "04qlw00maswc152fchhpf1028426qsg37ky1ap4lsbkpay3cfhqp";
+ url = "https://elpa.gnu.org/devel/ement-0.18pre0.20251117.1.tar";
+ sha256 = "0d5cgm00qq6rclpq63jkn8677kkhbql79xg6isij39d7nhrkfyp1";
};
packageRequires = [
map
@@ -3420,10 +3446,10 @@
elpaBuild {
pname = "erc";
ename = "erc";
- version = "5.6.2snapshot0.20260323.181457";
+ version = "5.7snapshot0.20260630.20";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/erc-5.6.2snapshot0.20260323.181457.tar";
- sha256 = "0i94a6g1k4gzfz3jzm975w9v21bj6kifajn6wqnnswyl4cis65n3";
+ url = "https://elpa.gnu.org/devel/erc-5.7snapshot0.20260630.20.tar";
+ sha256 = "0b8nibq9xrs6y0ia99fvf2vxx8wkvkj4vygzswb7130fdf7s3r5l";
};
packageRequires = [ compat ];
meta = {
@@ -3467,10 +3493,10 @@
elpaBuild {
pname = "ess";
ename = "ess";
- version = "26.1.0.0.20260423.92659";
+ version = "26.5.0.0.20260526.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/ess-26.1.0.0.20260423.92659.tar";
- sha256 = "0fmq3fp4dya40ab3rg511i7p3pi2mhx98dvl27fs186ya79bgvgq";
+ url = "https://elpa.gnu.org/devel/ess-26.5.0.0.20260526.0.tar";
+ sha256 = "08nkdqp7in2skkvs4z5q171i2yvmjhk0ycwa15ffvsjwanf328y7";
};
packageRequires = [ ];
meta = {
@@ -3539,10 +3565,10 @@
elpaBuild {
pname = "expreg";
ename = "expreg";
- version = "1.4.1.0.20250918.220913";
+ version = "1.4.1.0.20260619.7";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/expreg-1.4.1.0.20250918.220913.tar";
- sha256 = "1fdwxr3albv7ww87w8ib8r0rid8zkibcgbl3qhp29vm8g28s89ws";
+ url = "https://elpa.gnu.org/devel/expreg-1.4.1.0.20260619.7.tar";
+ sha256 = "0dxdr7ahhj17fvsvpb0w6ylh20qkgrvy53pc9a0r6m8pv97i6mx0";
};
packageRequires = [ ];
meta = {
@@ -3560,10 +3586,10 @@
elpaBuild {
pname = "external-completion";
ename = "external-completion";
- version = "0.1.0.20260101.125434";
+ version = "0.1.0.20260501.92309";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/external-completion-0.1.0.20260101.125434.tar";
- sha256 = "0ca24q2l56i5p03l4h1r5qvrqvsc5330csc7aj205hl94wpmhz1z";
+ url = "https://elpa.gnu.org/devel/external-completion-0.1.0.20260501.92309.tar";
+ sha256 = "1jdd1dixbyxfm8k1zcajajdi2r718vyqg1phxcp2mi61npwk9li0";
};
packageRequires = [ ];
meta = {
@@ -3583,10 +3609,10 @@
elpaBuild {
pname = "exwm";
ename = "exwm";
- version = "0.34.0.20260204.122929";
+ version = "0.35.0.20260718.3";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/exwm-0.34.0.20260204.122929.tar";
- sha256 = "1bmn6d7pjgjrh265y4w0g1ip8n21sx5z6xsl0vhfhvdf6h2w3c0b";
+ url = "https://elpa.gnu.org/devel/exwm-0.35.0.20260718.3.tar";
+ sha256 = "1kk9ggm9q32rz5dld2w2znpifwpjcncn7ih19rkw3bfd2q8bgirg";
};
packageRequires = [
compat
@@ -3620,6 +3646,27 @@
};
}
) { };
+ ffs = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "ffs";
+ ename = "ffs";
+ version = "0.2.3snapshot0.20260522.1";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/devel/ffs-0.2.3snapshot0.20260522.1.tar";
+ sha256 = "1csx6sxdi4aa68ajjbgfymb1y2l3n6w1ig566n1lhxkpn2mh5xji";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/devel/ffs.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
filechooser = callPackage (
{
compat,
@@ -3717,10 +3764,10 @@
elpaBuild {
pname = "flymake";
ename = "flymake";
- version = "1.4.5.0.20260326.141956";
+ version = "1.4.5.0.20260702.3";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/flymake-1.4.5.0.20260326.141956.tar";
- sha256 = "11cjgvqzp4jilw90hm82gzca68hr3dn0smg8wvfy8k0br8qq48nx";
+ url = "https://elpa.gnu.org/devel/flymake-1.4.5.0.20260702.3.tar";
+ sha256 = "1fddbgjlqkdr6kml7mbwhv1y6imkp5a73v6ynqhr7wkjh65vhryg";
};
packageRequires = [
eldoc
@@ -3784,10 +3831,10 @@
elpaBuild {
pname = "flymake-proselint";
ename = "flymake-proselint";
- version = "0.3.0.0.20230325.160756";
+ version = "0.3.0.0.20260704.11";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/flymake-proselint-0.3.0.0.20230325.160756.tar";
- sha256 = "1p3jpsv6w4hask7bk07dmafwgymbw3xl6i0vx0sjd0i5aa0xs9vz";
+ url = "https://elpa.gnu.org/devel/flymake-proselint-0.3.0.0.20260704.11.tar";
+ sha256 = "0n619yab8s9lr00b7zcbgywvm5phwrh19iww8rwm0sf1qhmg3azf";
};
packageRequires = [ ];
meta = {
@@ -3805,10 +3852,10 @@
elpaBuild {
pname = "fontaine";
ename = "fontaine";
- version = "3.0.1.0.20260413.54632";
+ version = "3.1.0.0.20260629.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/fontaine-3.0.1.0.20260413.54632.tar";
- sha256 = "1s7wz2807a49vhcj3zv7hx75kz4l9zkhi53fvppab46j2wyaw8qs";
+ url = "https://elpa.gnu.org/devel/fontaine-3.1.0.0.20260629.0.tar";
+ sha256 = "1d4jf8y02xp09c9gwa0rnp5c941rzpkpf9npk9zs07c6k1612j34";
};
packageRequires = [ ];
meta = {
@@ -3817,6 +3864,28 @@
};
}
) { };
+ forgejo = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ keymap-popup,
+ lib,
+ }:
+ elpaBuild {
+ pname = "forgejo";
+ ename = "forgejo";
+ version = "0.2.3.0.20260715.17";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/devel/forgejo-0.2.3.0.20260715.17.tar";
+ sha256 = "12vg44zkpr8s8i4wal2z3b6ii9gigdw674p10dx3zpj7zibjglry";
+ };
+ packageRequires = [ keymap-popup ];
+ meta = {
+ homepage = "https://elpa.gnu.org/devel/forgejo.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
frame-tabs = callPackage (
{
elpaBuild,
@@ -3916,10 +3985,10 @@
elpaBuild {
pname = "futur";
ename = "futur";
- version = "1.4.0.20260423.160640";
+ version = "1.7.0.20260622.8";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/futur-1.4.0.20260423.160640.tar";
- sha256 = "04z4660mjgnf5z4qyzbiwdi7cd9b42ncvxrvpxr9i9q51sky72jb";
+ url = "https://elpa.gnu.org/devel/futur-1.7.0.20260622.8.tar";
+ sha256 = "1wwkm6955wy31ig84x7kgm5sl56jvgkgi706awhbvji0nrrj2nys";
};
packageRequires = [ ];
meta = {
@@ -4105,17 +4174,21 @@
compat,
elpaBuild,
fetchurl,
+ keymap-popup,
lib,
}:
elpaBuild {
pname = "gnosis";
ename = "gnosis";
- version = "0.10.3.0.20260420.110309";
+ version = "0.10.6.0.20260707.26";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/gnosis-0.10.3.0.20260420.110309.tar";
- sha256 = "0inrv51wkjycbxhhlsivfig2479v18jcvps1dq2psjas0r2crsx3";
+ url = "https://elpa.gnu.org/devel/gnosis-0.10.6.0.20260707.26.tar";
+ sha256 = "1s3mf539ri3d7rq0b9w6f6kla2ybkxrzwkqzq2mi92vzvypjmbv0";
};
- packageRequires = [ compat ];
+ packageRequires = [
+ compat
+ keymap-popup
+ ];
meta = {
homepage = "https://elpa.gnu.org/devel/gnosis.html";
license = lib.licenses.free;
@@ -4318,10 +4391,10 @@
elpaBuild {
pname = "greader";
ename = "greader";
- version = "0.19.0.0.20260409.233021";
+ version = "0.19.5.0.20260627.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/greader-0.19.0.0.20260409.233021.tar";
- sha256 = "1lq10b8b3nkzf6lx9z1h3cv2537g4ymj5qw6xbclpxzrj07zalg7";
+ url = "https://elpa.gnu.org/devel/greader-0.19.5.0.20260627.0.tar";
+ sha256 = "1c37viwmwvhha7hra6zraim58yy3mf68ds738xky448ddbimrvl0";
};
packageRequires = [
compat
@@ -4386,10 +4459,10 @@
elpaBuild {
pname = "guess-language";
ename = "guess-language";
- version = "0.0.1.0.20240528.185800";
+ version = "0.0.1.0.20260625.150";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/guess-language-0.0.1.0.20240528.185800.tar";
- sha256 = "0hlcnd69mqs90ndp59pqcjdwl27cswnpqy6yjzaspmbya6plv3g6";
+ url = "https://elpa.gnu.org/devel/guess-language-0.0.1.0.20260625.150.tar";
+ sha256 = "0g3cvp1p1bpbf2h5vwrjcghj4bkhcpx00jqsivvrmyighpmgpxzs";
};
packageRequires = [
cl-lib
@@ -4580,10 +4653,10 @@
elpaBuild {
pname = "hyperbole";
ename = "hyperbole";
- version = "9.0.2pre0.20260422.74419";
+ version = "9.0.2pre0.20260712.1235";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/hyperbole-9.0.2pre0.20260422.74419.tar";
- sha256 = "1k6qcwb9bhf062bd0d6q69n1wbk68bkmb8d30c5hnd32s2m261xp";
+ url = "https://elpa.gnu.org/devel/hyperbole-9.0.2pre0.20260712.1235.tar";
+ sha256 = "0ca3kpkv2rzydn7rxqvn4dw8dgk72q51mdpvdbwdk9a18pjp0fam";
};
packageRequires = [ ];
meta = {
@@ -4592,6 +4665,27 @@
};
}
) { };
+ ibuffer-sidebar = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "ibuffer-sidebar";
+ ename = "ibuffer-sidebar";
+ version = "1.0.0.0.20260718.2";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/devel/ibuffer-sidebar-1.0.0.0.20260718.2.tar";
+ sha256 = "1l9wk75nqbl0n8k0zbqjvkd7fb2j6b2zsag62khk9zpya50gsap7";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/devel/ibuffer-sidebar.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
idlwave = callPackage (
{
elpaBuild,
@@ -4913,10 +5007,10 @@
elpaBuild {
pname = "jarchive";
ename = "jarchive";
- version = "0.12.0.0.20260419.91017";
+ version = "0.12.0.0.20260530.1";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/jarchive-0.12.0.0.20260419.91017.tar";
- sha256 = "0mdsfvggcv2iyia0vpp1lj1xarg8kjbksvxzl6w2b2q5k8j1gl8f";
+ url = "https://elpa.gnu.org/devel/jarchive-0.12.0.0.20260530.1.tar";
+ sha256 = "022msc0a39wl29j14sf4pfy1xc8p1bm8khx49f1qhlj3ppw3zr26";
};
packageRequires = [ ];
meta = {
@@ -4934,10 +5028,10 @@
elpaBuild {
pname = "javaimp";
ename = "javaimp";
- version = "0.9.1.0.20260403.224537";
+ version = "0.9.2.0.20260715.9";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/javaimp-0.9.1.0.20260403.224537.tar";
- sha256 = "0jkw3dklylz7l7wq162c16ak8fbjpp23g38y5fmpgrinrbfjpwmd";
+ url = "https://elpa.gnu.org/devel/javaimp-0.9.2.0.20260715.9.tar";
+ sha256 = "1fv10bx8f7y5f85zkyavav6ylkwxlznhfwbf4w4mybfj1p61mwha";
};
packageRequires = [ ];
meta = {
@@ -4978,10 +5072,10 @@
elpaBuild {
pname = "jinx";
ename = "jinx";
- version = "2.7.0.20260330.62245";
+ version = "2.8.0.20260628.1";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/jinx-2.7.0.20260330.62245.tar";
- sha256 = "1js65bg2pm4ql6rri6wvm91klhfnziv75n7cmix5z3lk0836qw7d";
+ url = "https://elpa.gnu.org/devel/jinx-2.8.0.20260628.1.tar";
+ sha256 = "0rgmkdiw7x0xknp9ndwzz1jvnkl9pyymzm7wrlzsigf5mzvx9n79";
};
packageRequires = [ compat ];
meta = {
@@ -5022,10 +5116,10 @@
elpaBuild {
pname = "js2-mode";
ename = "js2-mode";
- version = "20231224.0.20241205.14012";
+ version = "20231224.0.20260627.14";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/js2-mode-20231224.0.20241205.14012.tar";
- sha256 = "0kcxgkib56fjgv9c2ancr046ag3nwr6zw5x2dzw9gbnlma5w3x66";
+ url = "https://elpa.gnu.org/devel/js2-mode-20231224.0.20260627.14.tar";
+ sha256 = "1cjccwswizryk0wn6ps40clmbjgf1h2amfw1hp6akmzsq4hs9abi";
};
packageRequires = [ cl-lib ];
meta = {
@@ -5064,10 +5158,10 @@
elpaBuild {
pname = "jsonrpc";
ename = "jsonrpc";
- version = "1.0.28.0.20260416.174639";
+ version = "1.0.29.0.20260623.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/jsonrpc-1.0.28.0.20260416.174639.tar";
- sha256 = "0j7y9kcjdai6sd1634ln4ag0fg5x8ljzq50f25nc5miadaq93vw8";
+ url = "https://elpa.gnu.org/devel/jsonrpc-1.0.29.0.20260623.0.tar";
+ sha256 = "08l1xicms32yagpv20yi0b626nkyc5xwaljq4fda7ygndkhlm5a2";
};
packageRequires = [ ];
meta = {
@@ -5097,6 +5191,27 @@
};
}
) { };
+ keymap-popup = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "keymap-popup";
+ ename = "keymap-popup";
+ version = "0.4.0.0.20260715.2";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/devel/keymap-popup-0.4.0.0.20260715.2.tar";
+ sha256 = "02077lc09shc76y1gzh7gk9ij2ap0hkgqx40m6bsg79n25i55zgz";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/devel/keymap-popup.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
kind-icon = callPackage (
{
elpaBuild,
@@ -5171,10 +5286,10 @@
elpaBuild {
pname = "kubed";
ename = "kubed";
- version = "0.6.1.0.20260413.204601";
+ version = "0.7.1.0.20260619.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/kubed-0.6.1.0.20260413.204601.tar";
- sha256 = "1q7ykifs44ywrq94fhvdz4svpxm2j3yj4vmq74lz5d57q702xz9l";
+ url = "https://elpa.gnu.org/devel/kubed-0.7.1.0.20260619.0.tar";
+ sha256 = "0lgdl06lv66zxy5qcdnhrc118hxllaj7zjr7aphdm755lckd3f3i";
};
packageRequires = [ ];
meta = {
@@ -5215,10 +5330,10 @@
elpaBuild {
pname = "latex-table-wizard";
ename = "latex-table-wizard";
- version = "1.5.5.0.20260212.172924";
+ version = "1.6.0.0.20260503.212802";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/latex-table-wizard-1.5.5.0.20260212.172924.tar";
- sha256 = "0n2zvy43lmyvygy3npfgh3897gpwdvxpjd35n6011hbnm3b05s55";
+ url = "https://elpa.gnu.org/devel/latex-table-wizard-1.6.0.0.20260503.212802.tar";
+ sha256 = "0gsqgykvfg27c9gs83rjg8aaxm44a06r5d8ify7s7wcxpasdys1p";
};
packageRequires = [
auctex
@@ -5239,10 +5354,10 @@
elpaBuild {
pname = "leaf";
ename = "leaf";
- version = "4.5.5.0.20260302.65208";
+ version = "4.5.5.0.20260508.153103";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/leaf-4.5.5.0.20260302.65208.tar";
- sha256 = "0j2m24vhgn11w3cg8f3nsmvlgb0sfk6524xgfavqrhw528si1hj7";
+ url = "https://elpa.gnu.org/devel/leaf-4.5.5.0.20260508.153103.tar";
+ sha256 = "0zps0wiyplsv8nghyjfvv8m20rn0bsx7dapdfbvx3bkiqbmf8crq";
};
packageRequires = [ ];
meta = {
@@ -5312,10 +5427,10 @@
elpaBuild {
pname = "let-alist";
ename = "let-alist";
- version = "1.0.6.0.20260315.121536";
+ version = "1.0.6.0.20260523.93734";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/let-alist-1.0.6.0.20260315.121536.tar";
- sha256 = "1qx7979xjnb1xgk8jbxdizm7cdmnxhbgk39daclhv1322lj79w2s";
+ url = "https://elpa.gnu.org/devel/let-alist-1.0.6.0.20260523.93734.tar";
+ sha256 = "0wqim4mjy59yy5ykjiy5kl91c0841yp071cdh11p7mz54liw8yrc";
};
packageRequires = [ ];
meta = {
@@ -5333,10 +5448,10 @@
elpaBuild {
pname = "lex";
ename = "lex";
- version = "1.2.0.20240216.82808";
+ version = "1.3.0.20260601.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/lex-1.2.0.20240216.82808.tar";
- sha256 = "0mh2jk838216mwv6bab28mq9nb5617c5y7s0yqynkz3vkarnnxx1";
+ url = "https://elpa.gnu.org/devel/lex-1.3.0.20260601.0.tar";
+ sha256 = "1c79jqc7292qhs542nfgqg7va20k02sldb3n75vjsbhp13q05d6w";
};
packageRequires = [ ];
meta = {
@@ -5354,10 +5469,10 @@
elpaBuild {
pname = "lin";
ename = "lin";
- version = "2.0.0.0.20260413.54759";
+ version = "2.0.0.0.20260424.102712";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/lin-2.0.0.0.20260413.54759.tar";
- sha256 = "18im9kd79wvhk92p8wm0hxf67c85g6f2rlppx3dkn0r601hmpv2w";
+ url = "https://elpa.gnu.org/devel/lin-2.0.0.0.20260424.102712.tar";
+ sha256 = "11l840kmy06f59n1p2cac59fmdwqmwqyn1d7sx10k4xfx2i8f3pp";
};
packageRequires = [ ];
meta = {
@@ -5366,6 +5481,32 @@
};
}
) { };
+ lisp-ts-mode = callPackage (
+ {
+ compat,
+ cond-star,
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "lisp-ts-mode";
+ ename = "lisp-ts-mode";
+ version = "0.3.0.0.20260720.0";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/devel/lisp-ts-mode-0.3.0.0.20260720.0.tar";
+ sha256 = "09xnsw5rsvkwx8dvxw9m60fc3pwk21r0iydm0r55bj7sksb6z7id";
+ };
+ packageRequires = [
+ compat
+ cond-star
+ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/devel/lisp-ts-mode.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
listen = callPackage (
{
elpaBuild,
@@ -5430,10 +5571,10 @@
elpaBuild {
pname = "llm";
ename = "llm";
- version = "0.30.1.0.20260417.170756";
+ version = "0.31.2.0.20260718.2";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/llm-0.30.1.0.20260417.170756.tar";
- sha256 = "01dzr0qli82gdm24fdqiw7gn10w1gallgcss04v5d251idgfh87q";
+ url = "https://elpa.gnu.org/devel/llm-0.31.2.0.20260718.2.tar";
+ sha256 = "0zhf1a7n0x58hf56ln1lpf61pjfn2bj8mmy940w5k3kp8y3zyxz7";
};
packageRequires = [
compat
@@ -5563,10 +5704,10 @@
elpaBuild {
pname = "logos";
ename = "logos";
- version = "1.2.0.0.20260111.105252";
+ version = "1.2.0.0.20260424.102714";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/logos-1.2.0.0.20260111.105252.tar";
- sha256 = "0566wrazp2z0np1rx6fqv6541b6a37j1k4x9rrnylzk9sgcnr1qp";
+ url = "https://elpa.gnu.org/devel/logos-1.2.0.0.20260424.102714.tar";
+ sha256 = "0wk6b064sl8kjnqn6ihcxaps6m7cpr4h78np3ls4w4018na90rmi";
};
packageRequires = [ ];
meta = {
@@ -5670,10 +5811,10 @@
elpaBuild {
pname = "marginalia";
ename = "marginalia";
- version = "2.10.0.20260330.62326";
+ version = "2.11.0.20260628.1";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/marginalia-2.10.0.20260330.62326.tar";
- sha256 = "1vlzmpk04q2cgaqnlzdqdn6ll58jvkb3v93hnkifrldgzqkgd40n";
+ url = "https://elpa.gnu.org/devel/marginalia-2.11.0.20260628.1.tar";
+ sha256 = "1kya2x33xbp0ghjv46484jjy7qhqsh7xkcr0pnvi6m4dgcxrg6al";
};
packageRequires = [ compat ];
meta = {
@@ -5776,10 +5917,10 @@
elpaBuild {
pname = "matlab-mode";
ename = "matlab-mode";
- version = "8.2.0.0.20260419.100405";
+ version = "8.2.0.0.20260428.134050";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/matlab-mode-8.2.0.0.20260419.100405.tar";
- sha256 = "114s5ra2h4d8k0qn27blb8bzxjjlcgrrkmg1y647m2kzwfbp8hx5";
+ url = "https://elpa.gnu.org/devel/matlab-mode-8.2.0.0.20260428.134050.tar";
+ sha256 = "0caab8wxwn55zk6cd20qm20z2nkwff8a1y3jrwfd41i1kx18mcg4";
};
packageRequires = [ ];
meta = {
@@ -5797,10 +5938,10 @@
elpaBuild {
pname = "mct";
ename = "mct";
- version = "1.1.0.0.20260413.54251";
+ version = "1.1.1.0.20260629.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/mct-1.1.0.0.20260413.54251.tar";
- sha256 = "1wlyg28xcyig05248nic6jia4zw0q5k0rg8l3facskisbhild7dz";
+ url = "https://elpa.gnu.org/devel/mct-1.1.1.0.20260629.0.tar";
+ sha256 = "1dff7gm1cw1ljvsdw7j43laamhpck598c7f5r6679gf9zqm3bdfv";
};
packageRequires = [ ];
meta = {
@@ -5939,6 +6080,7 @@
) { };
minimail = callPackage (
{
+ compat,
elpaBuild,
fetchurl,
lib,
@@ -5947,12 +6089,15 @@
elpaBuild {
pname = "minimail";
ename = "minimail";
- version = "0.4.2.0.20260428.192238";
+ version = "0.5.0.20260513.113502";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/minimail-0.4.2.0.20260428.192238.tar";
- sha256 = "0wd5nay9x0sqr7l96ibi554qab5mfgh3dw493rcw7cs3cwiwsvhm";
+ url = "https://elpa.gnu.org/devel/minimail-0.5.0.20260513.113502.tar";
+ sha256 = "0b3npm8wsgl3nizvgvpb11i4kamg89js04nd52f28hb6f75mwjkh";
};
- packageRequires = [ transient ];
+ packageRequires = [
+ compat
+ transient
+ ];
meta = {
homepage = "https://elpa.gnu.org/devel/minimail.html";
license = lib.licenses.free;
@@ -5991,10 +6136,10 @@
elpaBuild {
pname = "minuet";
ename = "minuet";
- version = "0.7.1.0.20260424.3009";
+ version = "0.8.0.0.20260518.211153";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/minuet-0.7.1.0.20260424.3009.tar";
- sha256 = "0g9vqm9wby07pmhc6ai31krk473lif74273qbjrfzxzqbg4iavbk";
+ url = "https://elpa.gnu.org/devel/minuet-0.8.0.0.20260518.211153.tar";
+ sha256 = "1sxfwivmlpc2cdkx5bn1nmprkpqi43m8bp8zna6ba64ajm4i2k4c";
};
packageRequires = [
dash
@@ -6058,10 +6203,10 @@
elpaBuild {
pname = "modus-themes";
ename = "modus-themes";
- version = "5.2.0.0.20260418.131316";
+ version = "5.3.0.0.20260717.26";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/modus-themes-5.2.0.0.20260418.131316.tar";
- sha256 = "1qcb53pp05bk2fpjmli68kbmpk4wk8b7ll6iimvmgw8nlq4qzlhb";
+ url = "https://elpa.gnu.org/devel/modus-themes-5.3.0.0.20260717.26.tar";
+ sha256 = "0a3gd5cww0bifh9j3hxnsjb4csik7qlifa3i306l0lmj00sls1hl";
};
packageRequires = [ ];
meta = {
@@ -6079,10 +6224,10 @@
elpaBuild {
pname = "mpdired";
ename = "mpdired";
- version = "4pre0.20250502.114712";
+ version = "4pre0.20250502.1";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/mpdired-4pre0.20250502.114712.tar";
- sha256 = "1s831xln9vlxcchmxmis8ky751r3xwi5nlnnchdn7sjngkqjkl30";
+ url = "https://elpa.gnu.org/devel/mpdired-4pre0.20250502.1.tar";
+ sha256 = "1hrp0q5dql57hd40q838vbdrlbbyd1g7kfvf5w3zvhziq0dj61gx";
};
packageRequires = [ ];
meta = {
@@ -6400,10 +6545,10 @@
elpaBuild {
pname = "notmuch-indicator";
ename = "notmuch-indicator";
- version = "1.3.0.0.20260413.54903";
+ version = "1.3.0.0.20260424.102728";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/notmuch-indicator-1.3.0.0.20260413.54903.tar";
- sha256 = "091rlqqp7ngff0x1f8fh6axyyzbxrdvwnjqyqly5axazv8sm846n";
+ url = "https://elpa.gnu.org/devel/notmuch-indicator-1.3.0.0.20260424.102728.tar";
+ sha256 = "0iz3rzzb4rq7j5dwvyrdfyn2j1hag882204bc7fdldglwinic5zx";
};
packageRequires = [ ];
meta = {
@@ -6463,10 +6608,10 @@
elpaBuild {
pname = "oauth2";
ename = "oauth2";
- version = "0.18.4.0.20251120.214128";
+ version = "0.19.1snapshot0.20260526.1";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/oauth2-0.18.4.0.20251120.214128.tar";
- sha256 = "1x9v0s652al0ms37hafmqwla6wl97wpgvxh7w2ixpyrwrj206c93";
+ url = "https://elpa.gnu.org/devel/oauth2-0.19.1snapshot0.20260526.1.tar";
+ sha256 = "0fxrg7ypj642mxdpn06g31ynlb96w64na99fakpdcf9wa0a5ir2s";
};
packageRequires = [ ];
meta = {
@@ -6592,10 +6737,10 @@
elpaBuild {
pname = "orderless";
ename = "orderless";
- version = "1.6.0.20260127.172602";
+ version = "1.7.0.20260628.2";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/orderless-1.6.0.20260127.172602.tar";
- sha256 = "1arpnkw49vhrdgp7b9mpxbbv6q3mwnimn1d79cr3jjs97ngii980";
+ url = "https://elpa.gnu.org/devel/orderless-1.7.0.20260628.2.tar";
+ sha256 = "12xwkskpbwh6aav9zpl1f8alkv0bsh7aaw9q3hciab6ai6v6x723";
};
packageRequires = [ compat ];
meta = {
@@ -6613,10 +6758,10 @@
elpaBuild {
pname = "org";
ename = "org";
- version = "10.0pre0.20260421.184316";
+ version = "10.0pre0.20260715.383";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/org-10.0pre0.20260421.184316.tar";
- sha256 = "0809x9rw2smb5ya3x2272qcjjj6kx6xrj8ajlzzwiz2m1wdhz5w3";
+ url = "https://elpa.gnu.org/devel/org-10.0pre0.20260715.383.tar";
+ sha256 = "0dys9gg55z0bn7p9g7f2rw01v1my3ba3qmm3555g7xhpmy7gcfd6";
};
packageRequires = [ ];
meta = {
@@ -6684,10 +6829,10 @@
elpaBuild {
pname = "org-gnosis";
ename = "org-gnosis";
- version = "0.2.2.0.20260224.203152";
+ version = "0.2.2.0.20260711.6";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/org-gnosis-0.2.2.0.20260224.203152.tar";
- sha256 = "1ls3wnd4brn3aadafyfn4m4lkav5v5sm77irlijnm90rg2jdk7xc";
+ url = "https://elpa.gnu.org/devel/org-gnosis-0.2.2.0.20260711.6.tar";
+ sha256 = "0zh6wl8qcxx1av1x8pp6756wcdqnwa2h2yv6i8742l8rqi5xfybg";
};
packageRequires = [
compat
@@ -6760,10 +6905,10 @@
elpaBuild {
pname = "org-modern";
ename = "org-modern";
- version = "1.13.0.20260330.62401";
+ version = "1.14.0.20260707.5";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/org-modern-1.13.0.20260330.62401.tar";
- sha256 = "1lh1n09aqi8jxqpwsdv806910bflw25z6mcblplapk4lcd6al4y2";
+ url = "https://elpa.gnu.org/devel/org-modern-1.14.0.20260707.5.tar";
+ sha256 = "1hd30siq6jnqnxmkrgibp86cn3kjma1ifa216mw9fkl3bg8js506";
};
packageRequires = [
compat
@@ -6832,10 +6977,10 @@
elpaBuild {
pname = "org-remark";
ename = "org-remark";
- version = "1.3.0.0.20251214.30531";
+ version = "1.3.0.0.20260531.4";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/org-remark-1.3.0.0.20251214.30531.tar";
- sha256 = "1fs0k4a132bizm5pihp3gc7yzdgwzzfiwyqj3bawjqkzpgx2wlpl";
+ url = "https://elpa.gnu.org/devel/org-remark-1.3.0.0.20260531.4.tar";
+ sha256 = "1k69ndpwk6mrlzdcv727fpfb73glis2dgxm48kdnbgz5167blydg";
};
packageRequires = [ org ];
meta = {
@@ -6940,10 +7085,10 @@
elpaBuild {
pname = "osm";
ename = "osm";
- version = "2.2.0.20260330.62455";
+ version = "2.4.0.20260705.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/osm-2.2.0.20260330.62455.tar";
- sha256 = "0rj0zs5xmmj2swdjyk9pichljjd9c1qzbl836xaahxq2grcbqs5i";
+ url = "https://elpa.gnu.org/devel/osm-2.4.0.20260705.0.tar";
+ sha256 = "0s9m0j1r3hxllwmzarbg3k3yqfqrfnz93nqphpnf1p7lbwzk5v1c";
};
packageRequires = [ compat ];
meta = {
@@ -7174,10 +7319,10 @@
elpaBuild {
pname = "php-fill";
ename = "php-fill";
- version = "1.1.1.0.20260307.232207";
+ version = "1.1.2.0.20260624.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/php-fill-1.1.1.0.20260307.232207.tar";
- sha256 = "0vsq47s8cph31fc7ij3j34z4g3r830cr35498rkz9psrjzsr4jsy";
+ url = "https://elpa.gnu.org/devel/php-fill-1.1.2.0.20260624.0.tar";
+ sha256 = "016gy8dmvavw75h5ccyfzmhg3z634yhifwgkvydw87qnlrfm452p";
};
packageRequires = [ ];
meta = {
@@ -7259,10 +7404,10 @@
elpaBuild {
pname = "plz";
ename = "plz";
- version = "0.10pre0.20250318.183534";
+ version = "0.10pre0.20250318.18";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/plz-0.10pre0.20250318.183534.tar";
- sha256 = "08iyw80d2431k60fkw26i3z8zw0jk9czmxr1vi7z7hdfrqmw7gc0";
+ url = "https://elpa.gnu.org/devel/plz-0.10pre0.20250318.18.tar";
+ sha256 = "0lsaxls0dgj1hqm6fc03ns67k0wdp6jp688n9galiczk7zzllvpg";
};
packageRequires = [ ];
meta = {
@@ -7281,10 +7426,10 @@
elpaBuild {
pname = "plz-event-source";
ename = "plz-event-source";
- version = "0.1.4pre0.20250413.93107";
+ version = "0.1.4pre0.20250413.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/plz-event-source-0.1.4pre0.20250413.93107.tar";
- sha256 = "1g4bvdbdg5c0ch62l8314rv44b2wyymkbydyi0fkdjjb3a9ns4b0";
+ url = "https://elpa.gnu.org/devel/plz-event-source-0.1.4pre0.20250413.0.tar";
+ sha256 = "12f9ava513hiwb9cighnnliq7nn3d1kfy2hjg6npl89nhii82g5f";
};
packageRequires = [ plz-media-type ];
meta = {
@@ -7303,10 +7448,10 @@
elpaBuild {
pname = "plz-media-type";
ename = "plz-media-type";
- version = "0.2.5pre0.20250412.100044";
+ version = "0.2.5pre0.20250412.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/plz-media-type-0.2.5pre0.20250412.100044.tar";
- sha256 = "1w35bdxgsv1wvqwn64miyzplbb6gqry25wnl6l7dyd2n71h2hmxl";
+ url = "https://elpa.gnu.org/devel/plz-media-type-0.2.5pre0.20250412.0.tar";
+ sha256 = "1agd1m6pxmqd7vkqvrv382fg76wx0kz9dxkbz0pwpf5p9dlpl6mm";
};
packageRequires = [ plz ];
meta = {
@@ -7430,10 +7575,10 @@
elpaBuild {
pname = "polymode";
ename = "polymode";
- version = "0.2.2.0.20260302.104336";
+ version = "0.2.2.0.20260505.180301";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/polymode-0.2.2.0.20260302.104336.tar";
- sha256 = "04jfj25kmh55jq7bm5dq02xp4kgfvpbgsngx825qpgfsl3lkq6yi";
+ url = "https://elpa.gnu.org/devel/polymode-0.2.2.0.20260505.180301.tar";
+ sha256 = "00h3hyaz8rkv9wyvn0afg63v4v5ghz6h6hk1rds54wi8mb1501nc";
};
packageRequires = [ ];
meta = {
@@ -7472,10 +7617,10 @@
elpaBuild {
pname = "posframe";
ename = "posframe";
- version = "1.5.1.0.20260423.21349";
+ version = "1.5.2.0.20260527.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/posframe-1.5.1.0.20260423.21349.tar";
- sha256 = "0ylxj2spphywm7851lyrki34gkcznjd24xpd75f47pa1wcplkc48";
+ url = "https://elpa.gnu.org/devel/posframe-1.5.2.0.20260527.0.tar";
+ sha256 = "1gjj04a8sbngcvmkr9kfnx335k5z0knclabl6jz8rcnswj531ac6";
};
packageRequires = [ ];
meta = {
@@ -7493,10 +7638,10 @@
elpaBuild {
pname = "pq";
ename = "pq";
- version = "0.2.0.20240317.135839";
+ version = "0.2.0.20240911.1";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/pq-0.2.0.20240317.135839.tar";
- sha256 = "0hva6d8iqqdvnllm7cssxrmn21alcb2aa4d6874bqdfqjij2hw1z";
+ url = "https://elpa.gnu.org/devel/pq-0.2.0.20240911.1.tar";
+ sha256 = "07033s0lrns0ibmpvm7n02xfp1dwzkrb08vlsv5fj3lx7v0dk5g6";
};
packageRequires = [ ];
meta = {
@@ -7536,10 +7681,10 @@
elpaBuild {
pname = "preview-auto";
ename = "preview-auto";
- version = "0.4.2.0.20260327.92953";
+ version = "0.5.0.0.20260708.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/preview-auto-0.4.2.0.20260327.92953.tar";
- sha256 = "0mc0gwl3hk5fq9qfysxkphj9irzabm5bgkv8cz7m60k9s5g399rh";
+ url = "https://elpa.gnu.org/devel/preview-auto-0.5.0.0.20260708.0.tar";
+ sha256 = "1f4y9mrv7g46cvzjiygn703nfc293zha0ivsbkbj6qd6r78hklpf";
};
packageRequires = [ auctex ];
meta = {
@@ -7580,10 +7725,10 @@
elpaBuild {
pname = "project";
ename = "project";
- version = "0.11.2.0.20260407.143459";
+ version = "0.12.0.0.20260716.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/project-0.11.2.0.20260407.143459.tar";
- sha256 = "01pjihpy1496rwxyir9n1di1x2fkpmdb6c9gcmah3ygfg9gkqj7d";
+ url = "https://elpa.gnu.org/devel/project-0.12.0.0.20260716.0.tar";
+ sha256 = "0iaqw9ci3sbq3y3ry7r3pyv4ydlbx8b01p7chqq3b3h55vdi3i1d";
};
packageRequires = [ xref ];
meta = {
@@ -7643,10 +7788,10 @@
elpaBuild {
pname = "pulsar";
ename = "pulsar";
- version = "1.3.4.0.20260421.185730";
+ version = "1.3.4.0.20260426.51313";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/pulsar-1.3.4.0.20260421.185730.tar";
- sha256 = "100nyvpnap1bjc5k4ryni0h43dpacw1nbc6kyz73q82m19m78cnx";
+ url = "https://elpa.gnu.org/devel/pulsar-1.3.4.0.20260426.51313.tar";
+ sha256 = "0nw5hpxk5v334xp43gnnv2jknq88lgba69j8sn0i1625cvwpijiq";
};
packageRequires = [ ];
meta = {
@@ -7713,10 +7858,10 @@
elpaBuild {
pname = "python";
ename = "python";
- version = "0.30.0.20260307.113211";
+ version = "0.30.0.20260620.46";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/python-0.30.0.20260307.113211.tar";
- sha256 = "0rbq19sgxf3p9dnx8fkwyki6qmdajmxygmcn34f9gbwyg1ip2m2c";
+ url = "https://elpa.gnu.org/devel/python-0.30.0.20260620.46.tar";
+ sha256 = "00vdr03pbmfv6sbvjk410x13msfgm3d3f6qs8hpkb67pg4q87xzb";
};
packageRequires = [ compat ];
meta = {
@@ -7906,10 +8051,10 @@
elpaBuild {
pname = "realgud";
ename = "realgud";
- version = "1.6.0.0.20260411.181642";
+ version = "1.6.0.0.20260609.11";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/realgud-1.6.0.0.20260411.181642.tar";
- sha256 = "11rs4xcy7xz2ckvpii33mmy04flwfladpi5j70bxc5anmhn5fh68";
+ url = "https://elpa.gnu.org/devel/realgud-1.6.0.0.20260609.11.tar";
+ sha256 = "1j598wswb1s3gn2h2sk5hvz93nphlnmx3xqpa1nr2rg3jwpmv4zr";
};
packageRequires = [
load-relative
@@ -8250,10 +8395,10 @@
elpaBuild {
pname = "rnc-mode";
ename = "rnc-mode";
- version = "0.3.0.20221221.81910";
+ version = "0.4.0.20260610.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/rnc-mode-0.3.0.20221221.81910.tar";
- sha256 = "1rdz1g440sjzxcqc4p2s0vv525ala4k470ddn4h9ghljnncqbady";
+ url = "https://elpa.gnu.org/devel/rnc-mode-0.4.0.20260610.0.tar";
+ sha256 = "1yvkmcqykpvnfzpq2qra4dc14rviwhhvch2wb19iy781v6dryxj5";
};
packageRequires = [ ];
meta = {
@@ -8418,6 +8563,27 @@
};
}
) { };
+ sendai-theme = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "sendai-theme";
+ ename = "sendai-theme";
+ version = "0.1.1snapshot0.20260701.2";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/devel/sendai-theme-0.1.1snapshot0.20260701.2.tar";
+ sha256 = "08xpcxs280mbipllcjl06hmrxmpdzrwkfzcrvq6n9k2dv62x1cki";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/devel/sendai-theme.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
seq = callPackage (
{
elpaBuild,
@@ -8490,10 +8656,10 @@
elpaBuild {
pname = "shell-command-plus";
ename = "shell-command+";
- version = "2.5.0.0.20250930.194048";
+ version = "2.5.0.0.20260516.144445";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/shell-command+-2.5.0.0.20250930.194048.tar";
- sha256 = "1p6s6rp10mg23vvnls5pxgx014jf86x6427xbqms3bbdz0fpzn5j";
+ url = "https://elpa.gnu.org/devel/shell-command+-2.5.0.0.20260516.144445.tar";
+ sha256 = "1s6zwc08jgxjrbbdz7nbw4698vyd0z3zfqmkkkqx5ihklm1i1156";
};
packageRequires = [ ];
meta = {
@@ -8544,6 +8710,27 @@
};
}
) { };
+ shift-number = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "shift-number";
+ ename = "shift-number";
+ version = "0.3.0.20260621.19";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/devel/shift-number-0.3.0.20260621.19.tar";
+ sha256 = "08wc1kb8fvccfaw1c5n5cpmpxrjhzxaamsp9076lb59aa2ffgsz8";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/devel/shift-number.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
show-font = callPackage (
{
elpaBuild,
@@ -8553,10 +8740,10 @@
elpaBuild {
pname = "show-font";
ename = "show-font";
- version = "1.0.0.0.20260111.105401";
+ version = "1.0.0.0.20260424.102736";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/show-font-1.0.0.0.20260111.105401.tar";
- sha256 = "146mmg4kv3sz9bd4b1026fsws16w3nz99m4sbkhgwaf09mrr2bkl";
+ url = "https://elpa.gnu.org/devel/show-font-1.0.0.0.20260424.102736.tar";
+ sha256 = "06kf0hivajpb7g7ba3sc8nkaz1pny6j1imsr5jqf1nawfyb24qrd";
};
packageRequires = [ ];
meta = {
@@ -8830,10 +9017,10 @@
elpaBuild {
pname = "spacious-padding";
ename = "spacious-padding";
- version = "0.8.0.0.20260111.105014";
+ version = "0.8.0.0.20260505.183614";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/spacious-padding-0.8.0.0.20260111.105014.tar";
- sha256 = "0yxml44g1lc0r2jca9qwbkqv3d2jx79nvyhw1gxx6wjj76wlwzwf";
+ url = "https://elpa.gnu.org/devel/spacious-padding-0.8.0.0.20260505.183614.tar";
+ sha256 = "0pzcfd3z5w67cfcmp9hzyjjjxx5i5pxgl5k45hhxcwrfwm4x8h4l";
};
packageRequires = [ ];
meta = {
@@ -9027,10 +9214,10 @@
elpaBuild {
pname = "standard-themes";
ename = "standard-themes";
- version = "3.0.2.0.20260405.133615";
+ version = "3.0.2.0.20260424.102741";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/standard-themes-3.0.2.0.20260405.133615.tar";
- sha256 = "0b88iyisvqqv3ziciypkqdjz9i14xcgjlymaf0n3s34yycgglbsz";
+ url = "https://elpa.gnu.org/devel/standard-themes-3.0.2.0.20260424.102741.tar";
+ sha256 = "1h3q71b4g89av2a9i1864mhkww75669051xs2qzp78aglqnm8dr6";
};
packageRequires = [ modus-themes ];
meta = {
@@ -9069,10 +9256,10 @@
elpaBuild {
pname = "substitute";
ename = "substitute";
- version = "0.5.0.0.20260324.124253";
+ version = "0.5.0.0.20260424.102743";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/substitute-0.5.0.0.20260324.124253.tar";
- sha256 = "0m5jmchrzh1cwq6zd8jd65v7kaks6cgqjvw8094ijq8bc28ni3k7";
+ url = "https://elpa.gnu.org/devel/substitute-0.5.0.0.20260424.102743.tar";
+ sha256 = "1zl5hyq0919c3mp680v22xjmfggfkdn1mz13sf1ivbahgndjbddk";
};
packageRequires = [ ];
meta = {
@@ -9220,10 +9407,10 @@
elpaBuild {
pname = "sxhkdrc-mode";
ename = "sxhkdrc-mode";
- version = "1.2.0.0.20260111.105425";
+ version = "1.2.0.0.20260424.102746";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/sxhkdrc-mode-1.2.0.0.20260111.105425.tar";
- sha256 = "07a9ykifnan2wljglkrl7yk2s3ihb8ij47bqlkq7c6w74symgz7z";
+ url = "https://elpa.gnu.org/devel/sxhkdrc-mode-1.2.0.0.20260424.102746.tar";
+ sha256 = "1cr31122688fl5cyslqzawinaca7df64hxzqvszalzv32gimzm15";
};
packageRequires = [ ];
meta = {
@@ -9331,10 +9518,10 @@
elpaBuild {
pname = "taxy";
ename = "taxy";
- version = "0.11pre0.20251129.62050";
+ version = "0.11pre0.20251129.2";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/taxy-0.11pre0.20251129.62050.tar";
- sha256 = "1g937immy39j8qfmcq4skxc2xlkn0h57v2w6h7g3rsjgns50l5ca";
+ url = "https://elpa.gnu.org/devel/taxy-0.11pre0.20251129.2.tar";
+ sha256 = "1y4k68h5z1xc7x0rc3lx1cyvbpniirqglr2gik08m1m1570r6w4x";
};
packageRequires = [ ];
meta = {
@@ -9400,10 +9587,10 @@
elpaBuild {
pname = "tempel";
ename = "tempel";
- version = "1.12.0.20260330.62558";
+ version = "1.14.0.20260705.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/tempel-1.12.0.20260330.62558.tar";
- sha256 = "0f2gy05isba11k2sqgv7yjiw06i72p9fjbfzgwh3nrljpvndc2cf";
+ url = "https://elpa.gnu.org/devel/tempel-1.14.0.20260705.0.tar";
+ sha256 = "0bxj1qkxy9sd5js36rnvjlgxhvb8nza38l4ccbnnrj4p7h72n9hl";
};
packageRequires = [ compat ];
meta = {
@@ -9421,10 +9608,10 @@
elpaBuild {
pname = "termint";
ename = "termint";
- version = "0.2.2.0.20260411.234846";
+ version = "0.2.3.0.20260517.165016";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/termint-0.2.2.0.20260411.234846.tar";
- sha256 = "0xsrqxgndzmxskcmfx4184nb7yvwmv9lqdy40cjhpc8f3xwmzqwq";
+ url = "https://elpa.gnu.org/devel/termint-0.2.3.0.20260517.165016.tar";
+ sha256 = "0x3sg96qwrqiclw5gplakynfgsa1cfqa3yj4a4f705in9xaaswjr";
};
packageRequires = [ ];
meta = {
@@ -9485,10 +9672,10 @@
elpaBuild {
pname = "tex-parens";
ename = "tex-parens";
- version = "0.7.0.20250709.53958";
+ version = "0.7.0.20260225.9";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/tex-parens-0.7.0.20250709.53958.tar";
- sha256 = "0mbcgc17cy8imk7dzh9krwd62dy2h7fj5pzvfr1wggdczrs2zva8";
+ url = "https://elpa.gnu.org/devel/tex-parens-0.7.0.20260225.9.tar";
+ sha256 = "040997wgzhkc071hrlcidakicxm1p8fg3mdykr5476cw3ffx6ra1";
};
packageRequires = [ ];
meta = {
@@ -9527,10 +9714,10 @@
elpaBuild {
pname = "timeout";
ename = "timeout";
- version = "2.1.0.20251209.235840";
+ version = "2.1.6.0.20260504.161229";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/timeout-2.1.0.20251209.235840.tar";
- sha256 = "1i1yijhvq1i5z3mvhw587n8md3yric545r2bc5ik76gdm8rhslf0";
+ url = "https://elpa.gnu.org/devel/timeout-2.1.6.0.20260504.161229.tar";
+ sha256 = "00ygq747m4yhp1mjj083ai18av8jri76q33gp214skpac85dxdb5";
};
packageRequires = [ ];
meta = {
@@ -9591,10 +9778,10 @@
elpaBuild {
pname = "tmr";
ename = "tmr";
- version = "1.3.0.0.20260423.190529";
+ version = "1.3.0.0.20260529.24";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/tmr-1.3.0.0.20260423.190529.tar";
- sha256 = "1m6ymyrv2fc8j22w12ppj2l1j6cczld8kd6hn2imbxga04knni9z";
+ url = "https://elpa.gnu.org/devel/tmr-1.3.0.0.20260529.24.tar";
+ sha256 = "0ybzzynk6prnanly0izr59p0kajp4nbm8jk8vqrg4mliidl79fmw";
};
packageRequires = [ ];
meta = {
@@ -9680,10 +9867,10 @@
elpaBuild {
pname = "tramp";
ename = "tramp";
- version = "2.8.1.3.0.20260330.55054";
+ version = "2.8.2.0.20260720.2";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/tramp-2.8.1.3.0.20260330.55054.tar";
- sha256 = "01c5l03x5krzga9a9gg3klcn47k357p0k0ad09cd0g5qi4jmss5j";
+ url = "https://elpa.gnu.org/devel/tramp-2.8.2.0.20260720.2.tar";
+ sha256 = "01a6riczx8wvy72x9v56p314r37xnr7i8z6394li307xw3gkznzd";
};
packageRequires = [ ];
meta = {
@@ -9784,19 +9971,21 @@
elpaBuild,
fetchurl,
lib,
+ llama,
seq,
}:
elpaBuild {
pname = "transient";
ename = "transient";
- version = "0.13.0.0.20260422.164634";
+ version = "0.13.5.0.20260701.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/transient-0.13.0.0.20260422.164634.tar";
- sha256 = "1mqky3s852p8fw9h9s2wqn7f40fbk8zy5rz9yxwq88w55nyw2kw5";
+ url = "https://elpa.gnu.org/devel/transient-0.13.5.0.20260701.0.tar";
+ sha256 = "0hhb042jacadfz01fgc9dpjqcz441vpwn3gw0g7qyqaqjhh1i5ci";
};
packageRequires = [
compat
cond-let
+ llama
seq
];
meta = {
@@ -9814,10 +10003,10 @@
elpaBuild {
pname = "transient-cycles";
ename = "transient-cycles";
- version = "2.0.0.20250625.85410";
+ version = "2.1.0.20260625.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/transient-cycles-2.0.0.20250625.85410.tar";
- sha256 = "1782gr8hwidfxilggb83s2v9wzkvyhcxbv3nj8f4aylhcdahfzf8";
+ url = "https://elpa.gnu.org/devel/transient-cycles-2.1.0.20260625.0.tar";
+ sha256 = "1jadhnszdnc9hj6992bpdmdrqcrig0r172dis8cwxksfrcb0qpgs";
};
packageRequires = [ ];
meta = {
@@ -9918,6 +10107,27 @@
};
}
) { };
+ trust-manager = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "trust-manager";
+ ename = "trust-manager";
+ version = "0.4.1.0.20260426.120509";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/devel/trust-manager-0.4.1.0.20260426.120509.tar";
+ sha256 = "0dvn2x443czsamawylwm5ixayv77fs53ixvkkdg0yj4n6iv3kcg6";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/devel/trust-manager.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
ulisp-repl = callPackage (
{
elpaBuild,
@@ -10013,10 +10223,10 @@
elpaBuild {
pname = "urgrep";
ename = "urgrep";
- version = "0.6.1snapshot0.20260321.103449";
+ version = "0.6.1snapshot0.20260619.3";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/urgrep-0.6.1snapshot0.20260321.103449.tar";
- sha256 = "09ijxd7nzx7xps3db408i0hmr40m7rsc2phim67dm2sma622xl57";
+ url = "https://elpa.gnu.org/devel/urgrep-0.6.1snapshot0.20260619.3.tar";
+ sha256 = "0aks8nan0rjavz72s34c1d6wq4031z2wf2rbi73kr4sfq944yiss";
};
packageRequires = [ compat ];
meta = {
@@ -10232,10 +10442,10 @@
elpaBuild {
pname = "vc-jj";
ename = "vc-jj";
- version = "0.5.0.20260416.141453";
+ version = "0.5.0.20260531.62";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/vc-jj-0.5.0.20260416.141453.tar";
- sha256 = "0x5qj0a77wjfqxyr8wv9gswm205jj52cihlpmbkspn01a93ljr04";
+ url = "https://elpa.gnu.org/devel/vc-jj-0.5.0.20260531.62.tar";
+ sha256 = "120aln68dyj2faknjpjzfgdm6ln90ryh3v803lmgpfhpiph2w1dp";
};
packageRequires = [ compat ];
meta = {
@@ -10343,10 +10553,10 @@
elpaBuild {
pname = "verilog-mode";
ename = "verilog-mode";
- version = "2026.1.18.88738971.0.20260118.95917";
+ version = "2026.4.14.10117132.0.20260621.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/verilog-mode-2026.1.18.88738971.0.20260118.95917.tar";
- sha256 = "1h5mp70kg1w85g0kx6ipdczkza553d7mzffxx832j4wx3wr5afql";
+ url = "https://elpa.gnu.org/devel/verilog-mode-2026.4.14.10117132.0.20260621.0.tar";
+ sha256 = "1c5jkwxv3bpc9mpsbja9dzycz8zpccsjc7wg5ws5zxlzqbi2p46q";
};
packageRequires = [ ];
meta = {
@@ -10365,10 +10575,10 @@
elpaBuild {
pname = "vertico";
ename = "vertico";
- version = "2.8.0.20260419.183845";
+ version = "2.10.0.20260709.7";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/vertico-2.8.0.20260419.183845.tar";
- sha256 = "0mxhmknbx9sjsvxz9mc5vvg8pag9ijll0s71c2in307scdmp3lvk";
+ url = "https://elpa.gnu.org/devel/vertico-2.10.0.20260709.7.tar";
+ sha256 = "0jq13xdfbgrdf6b48sd70znax4mvcbf2p0h17mbc8vg006fs3xih";
};
packageRequires = [ compat ];
meta = {
@@ -10517,10 +10727,10 @@
elpaBuild {
pname = "wcheck-mode";
ename = "wcheck-mode";
- version = "2026.0.20260412.44645";
+ version = "2026.5.0.20260529.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/wcheck-mode-2026.0.20260412.44645.tar";
- sha256 = "0gbx80sv5kg8jnk5vzr3hr4lc25rhyl6jva14nr2c2v6bidfi97x";
+ url = "https://elpa.gnu.org/devel/wcheck-mode-2026.5.0.20260529.0.tar";
+ sha256 = "07pyq411jvpkdgwhhj0snpqdiaxjlfb2wklqqankc4c2qmck7nmv";
};
packageRequires = [ ];
meta = {
@@ -10769,6 +10979,27 @@
};
}
) { };
+ with-command-redo = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "with-command-redo";
+ ename = "with-command-redo";
+ version = "0.2.0.20260710.0";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/devel/with-command-redo-0.2.0.20260710.0.tar";
+ sha256 = "0zk18x8bplbishpxwy8r3m51i3kcai4crc6d4pipg927qdymry7z";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/devel/with-command-redo.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
wpuzzle = callPackage (
{
elpaBuild,
@@ -10863,10 +11094,10 @@
elpaBuild {
pname = "xelb";
ename = "xelb";
- version = "0.22.0.20260406.170713";
+ version = "0.23.0.20260627.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/xelb-0.22.0.20260406.170713.tar";
- sha256 = "1np8vw3f8xp5fxbx0zq62li7bq87f20pz4zjsn1n3h4scg5albba";
+ url = "https://elpa.gnu.org/devel/xelb-0.23.0.20260627.0.tar";
+ sha256 = "0q5z5mvdfgc411nqxqf9qi8gw43pdf3yqsg48riv67w58nnx11bv";
};
packageRequires = [ compat ];
meta = {
@@ -10973,10 +11204,10 @@
elpaBuild {
pname = "yaml";
ename = "yaml";
- version = "1.2.3.0.20260113.65351";
+ version = "1.2.4.0.20260605.0";
src = fetchurl {
- url = "https://elpa.gnu.org/devel/yaml-1.2.3.0.20260113.65351.tar";
- sha256 = "09ffagrz3qnbca8z4wm6bvxmdfnl2355sz9vgs9x3cavmy3pfy1x";
+ url = "https://elpa.gnu.org/devel/yaml-1.2.4.0.20260605.0.tar";
+ sha256 = "10hmq703w380gj1bns32k7qz2d5rvvaxd3hyyz76iahfnd574569";
};
packageRequires = [ ];
meta = {
diff --git a/pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix b/pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix
index 1b3e77cf6319..95b2b716ab6d 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/elpa-generated.nix
@@ -9,10 +9,10 @@
elpaBuild {
pname = "a68-mode";
ename = "a68-mode";
- version = "1.2";
+ version = "1.3";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/a68-mode-1.2.tar";
- sha256 = "1x40j0w6kzjxxrj7qdvll1psackq526cfrihfmacmq97c9g8xwm6";
+ url = "https://elpa.gnu.org/packages/a68-mode-1.3.tar";
+ sha256 = "0x5jj95bk07wnl9aqf35hcm9ajdwbrg74xm90i5kfn6nrxmnjmyp";
};
packageRequires = [ ];
meta = {
@@ -207,10 +207,10 @@
elpaBuild {
pname = "aggressive-completion";
ename = "aggressive-completion";
- version = "1.7";
+ version = "1.8";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/aggressive-completion-1.7.tar";
- sha256 = "0d388w0yjpjzhqlar9fjrxsjxma09j8as6758sswv01r084gpdbk";
+ url = "https://elpa.gnu.org/packages/aggressive-completion-1.8.tar";
+ sha256 = "07dqw6mvb1vp4fmii1y7wc074xxi9wfwalflszjpzcjbalklcqdq";
};
packageRequires = [ ];
meta = {
@@ -484,10 +484,10 @@
elpaBuild {
pname = "auctex-label-numbers";
ename = "auctex-label-numbers";
- version = "0.2";
+ version = "0.3";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/auctex-label-numbers-0.2.tar";
- sha256 = "1cd68yvpm061r9k4x6rvy3g2wdynv5gbjg2dyp06nkrgvakdb00x";
+ url = "https://elpa.gnu.org/packages/auctex-label-numbers-0.3.tar";
+ sha256 = "10dgq2jnzxd2w10a9raz9gj6nzlmyk048fzlv839sf5m73pjq89s";
};
packageRequires = [ auctex ];
meta = {
@@ -527,10 +527,10 @@
elpaBuild {
pname = "auth-source-xoauth2-plugin";
ename = "auth-source-xoauth2-plugin";
- version = "0.3.2";
+ version = "0.4.1";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/auth-source-xoauth2-plugin-0.3.2.tar";
- sha256 = "1k48kg6n72vzxaiqidg4m0w69c2s6ynvgcr08p4i8x2fsgaigcp2";
+ url = "https://elpa.gnu.org/packages/auth-source-xoauth2-plugin-0.4.1.tar";
+ sha256 = "038wikkg4lmgjjnwkliwwx8iif55vlc6720qz55lkr7pkrzp5vas";
};
packageRequires = [ oauth2 ];
meta = {
@@ -1085,10 +1085,10 @@
elpaBuild {
pname = "cape";
ename = "cape";
- version = "2.6";
+ version = "2.7";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/cape-2.6.tar";
- sha256 = "0n4j70w1q9ix9d8s276g4shkn1k7hv8d6wqpx65wchgilwbjx07z";
+ url = "https://elpa.gnu.org/packages/cape-2.7.tar";
+ sha256 = "0543x1j4pakdqm8vba0450yl9b30z527dx8x84mzjqkhksn40pzv";
};
packageRequires = [ compat ];
meta = {
@@ -1245,6 +1245,28 @@
};
}
) { };
+ cm-mode = callPackage (
+ {
+ cl-lib ? null,
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "cm-mode";
+ ename = "cm-mode";
+ version = "1.10";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/packages/cm-mode-1.10.tar";
+ sha256 = "1lg9rzv9hk89qi43msrbmi1hyy8zgr75740h7kj7rbl41v808bd7";
+ };
+ packageRequires = [ cl-lib ];
+ meta = {
+ homepage = "https://elpa.gnu.org/packages/cm-mode.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
cobol-mode = callPackage (
{
cl-lib ? null,
@@ -1458,17 +1480,16 @@
elpaBuild,
fetchurl,
lib,
- seq,
}:
elpaBuild {
pname = "compat";
ename = "compat";
- version = "30.1.0.1";
+ version = "31.0.0.2";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/compat-30.1.0.1.tar";
- sha256 = "1rj5i709i0l7drr7f571gsk8d6b5slwrd2l9flayv63kwk1gizhn";
+ url = "https://elpa.gnu.org/packages/compat-31.0.0.2.tar";
+ sha256 = "0f0gig6imlf5gx8qykvwajvhr66v52v7hsifqwh8nzq820x6kn27";
};
- packageRequires = [ seq ];
+ packageRequires = [ ];
meta = {
homepage = "https://elpa.gnu.org/packages/compat.html";
license = lib.licenses.free;
@@ -1527,10 +1548,10 @@
elpaBuild {
pname = "consult";
ename = "consult";
- version = "3.4";
+ version = "3.6";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/consult-3.4.tar";
- sha256 = "1silvwrss87fa5lss19a08bv72fwvnblkic24qn53c3z6zcd22zd";
+ url = "https://elpa.gnu.org/packages/consult-3.6.tar";
+ sha256 = "0c8pp537qv2zxkzk0nlrvzbn1v72v9ddhwf1nks3hwvwrff58db8";
};
packageRequires = [ compat ];
meta = {
@@ -1550,10 +1571,10 @@
elpaBuild {
pname = "consult-denote";
ename = "consult-denote";
- version = "0.4.2";
+ version = "0.5.1";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/consult-denote-0.4.2.tar";
- sha256 = "1vz96mcfw23y84dibnj6r3d7l0qj191fcnvx2piwhm26n0j43q8m";
+ url = "https://elpa.gnu.org/packages/consult-denote-0.5.1.tar";
+ sha256 = "0if1qfma6ssb4ciwviz5avm68k1yivj23sg2m2fmb9asry9zrvjd";
};
packageRequires = [
consult
@@ -1575,10 +1596,10 @@
elpaBuild {
pname = "consult-hoogle";
ename = "consult-hoogle";
- version = "0.6.0";
+ version = "0.7.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/consult-hoogle-0.6.0.tar";
- sha256 = "0iln71qlmcfmlys5z5bs4304av91ick0wq1ckhffh7d6xkxy0rv5";
+ url = "https://elpa.gnu.org/packages/consult-hoogle-0.7.0.tar";
+ sha256 = "17slksxs1vx19djf5q772hwq1fpaqsd0xpbh6zrrvvgv18h2ac8l";
};
packageRequires = [ consult ];
meta = {
@@ -1640,10 +1661,10 @@
elpaBuild {
pname = "corfu";
ename = "corfu";
- version = "2.9";
+ version = "2.10";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/corfu-2.9.tar";
- sha256 = "0h5vz8jyy06380m802jla9312h2rbn2k8fdskjfwkqd1v6dc0c8n";
+ url = "https://elpa.gnu.org/packages/corfu-2.10.tar";
+ sha256 = "0wp9jr1l81si8p1rxa5dkkwbx6k77rs0629q2lxk1l8lnb0j7h6n";
};
packageRequires = [ compat ];
meta = {
@@ -1900,10 +1921,10 @@
elpaBuild {
pname = "dape";
ename = "dape";
- version = "0.26.0";
+ version = "0.27.1";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/dape-0.26.0.tar";
- sha256 = "0arid8qwaf7ic76hsjzj7grn41krsphnzvihmjbgm4im6b7zzb37";
+ url = "https://elpa.gnu.org/packages/dape-0.27.1.tar";
+ sha256 = "1na3080gaygw4fsaymjjx9jgh9ai5k7gb0jmlrkbqnmdypag3mb7";
};
packageRequires = [ jsonrpc ];
meta = {
@@ -2034,10 +2055,10 @@
elpaBuild {
pname = "denote";
ename = "denote";
- version = "4.1.3";
+ version = "4.2.3";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/denote-4.1.3.tar";
- sha256 = "197m0bx1gxrzbqlfr5h52il3ivbixzg1pkhkrf488kidww8qmpvf";
+ url = "https://elpa.gnu.org/packages/denote-4.2.3.tar";
+ sha256 = "0r5p2iy7wssm6hl4dal1sav5x4vvijq54lyzqabg49v6lsbszf74";
};
packageRequires = [ ];
meta = {
@@ -2056,10 +2077,10 @@
elpaBuild {
pname = "denote-journal";
ename = "denote-journal";
- version = "0.2.2";
+ version = "0.3.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/denote-journal-0.2.2.tar";
- sha256 = "00rav8kachy85npcr96dwzb4kbgym0p2m5aw3v3pmg278nmc73v3";
+ url = "https://elpa.gnu.org/packages/denote-journal-0.3.0.tar";
+ sha256 = "1l2zrr5nczxyqsmr73m93jqphp6s79f55grpahig0xj2kji8d6gk";
};
packageRequires = [ denote ];
meta = {
@@ -2078,10 +2099,10 @@
elpaBuild {
pname = "denote-markdown";
ename = "denote-markdown";
- version = "0.2.2";
+ version = "0.3.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/denote-markdown-0.2.2.tar";
- sha256 = "1nb5rcjgkhw3nl2jva6lyblmfsl24cdryx3c16w8ydbx6fswhjpj";
+ url = "https://elpa.gnu.org/packages/denote-markdown-0.3.0.tar";
+ sha256 = "0adg2nr8s8rjynrpj0b37ni4jcm1igvls3zyyr313xifnrbiznym";
};
packageRequires = [ denote ];
meta = {
@@ -2122,10 +2143,10 @@
elpaBuild {
pname = "denote-org";
ename = "denote-org";
- version = "0.2.1";
+ version = "0.3.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/denote-org-0.2.1.tar";
- sha256 = "1cs1ml38xhj0c921qdsvqhqg42lm5r0qb7nf7sj1krvw1r9913bn";
+ url = "https://elpa.gnu.org/packages/denote-org-0.3.0.tar";
+ sha256 = "0r3idn17875hzmidi1xjb9hddifzby9i23j35ywzn88h9a33845k";
};
packageRequires = [ denote ];
meta = {
@@ -2188,10 +2209,10 @@
elpaBuild {
pname = "denote-sequence";
ename = "denote-sequence";
- version = "0.2.0";
+ version = "0.3.3";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/denote-sequence-0.2.0.tar";
- sha256 = "0i0vm1n48aw7j4y6laa8fvs0av5smimdky980qgp69pha6hcvph5";
+ url = "https://elpa.gnu.org/packages/denote-sequence-0.3.3.tar";
+ sha256 = "017h9bwaqv9lxv8ibbl739a9vkcknsv8ch2sqrbaybhri74a3mqk";
};
packageRequires = [ denote ];
meta = {
@@ -2210,10 +2231,10 @@
elpaBuild {
pname = "denote-silo";
ename = "denote-silo";
- version = "0.2.0";
+ version = "0.3.2";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/denote-silo-0.2.0.tar";
- sha256 = "10n4xv179dl6zz1k28lcbrgyqx8k3hfh3isd7q3qg1vcahlw04vl";
+ url = "https://elpa.gnu.org/packages/denote-silo-0.3.2.tar";
+ sha256 = "14qbzf336n62s5wp2v67fp8das28aa8a0ahv3nxg5w3fbdxdf03b";
};
packageRequires = [ denote ];
meta = {
@@ -2296,10 +2317,10 @@
elpaBuild {
pname = "dicom";
ename = "dicom";
- version = "1.3";
+ version = "1.5";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/dicom-1.3.tar";
- sha256 = "05n9azzj0wskzd0jzyqhfk3blss31wjzp8wkqam79hq0j6daf6g5";
+ url = "https://elpa.gnu.org/packages/dicom-1.5.tar";
+ sha256 = "02i90769952g80f8fjj9phwwm7ln8q6w65pc065r5vln1knjm7gd";
};
packageRequires = [ compat ];
meta = {
@@ -2473,10 +2494,10 @@
elpaBuild {
pname = "dired-preview";
ename = "dired-preview";
- version = "0.6.0";
+ version = "0.6.1";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/dired-preview-0.6.0.tar";
- sha256 = "1nlibx8jwyvb5n58sx8bg6vcazhnlj5dydmf36v7hzy0h4i460i0";
+ url = "https://elpa.gnu.org/packages/dired-preview-0.6.1.tar";
+ sha256 = "115cassm68rga9q8z7qr1ghi4f9j0immc8ccqwa21vnyvjj02q7a";
};
packageRequires = [ ];
meta = {
@@ -2558,10 +2579,10 @@
elpaBuild {
pname = "dmsg";
ename = "dmsg";
- version = "0.2";
+ version = "0.3";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/dmsg-0.2.tar";
- sha256 = "18wnbkd707n2qh9an72wizs0yp71hys6vg0y02iclqmj7igjg28k";
+ url = "https://elpa.gnu.org/packages/dmsg-0.3.tar";
+ sha256 = "18r81rdpw0jnhxca3fr7bxpalabicbj2y55z5gb2llqrh9plarq6";
};
packageRequires = [ ];
meta = {
@@ -2663,10 +2684,10 @@
elpaBuild {
pname = "doric-themes";
ename = "doric-themes";
- version = "1.1.0";
+ version = "1.2.1";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/doric-themes-1.1.0.tar";
- sha256 = "12rm5swbhn52yh4nvngqqbaiy8j97bi86a0k7swdb08vxmgp5kzh";
+ url = "https://elpa.gnu.org/packages/doric-themes-1.2.1.tar";
+ sha256 = "0p7qvn8g0hw7h1r3b0m2iif5f4739jmkqn0zih90qw5lbbjf4i86";
};
packageRequires = [ ];
meta = {
@@ -2887,10 +2908,10 @@
elpaBuild {
pname = "ef-themes";
ename = "ef-themes";
- version = "2.1.0";
+ version = "2.2.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/ef-themes-2.1.0.tar";
- sha256 = "09rb5pkqz63mc86f8n7969f8x27jdrhz51rh6vl0v3j4nvivv3dx";
+ url = "https://elpa.gnu.org/packages/ef-themes-2.2.0.tar";
+ sha256 = "0jm3hqg53cq0dfvmszmwzwrfi9n2mgdbz176qzxhjqm16rw2bwds";
};
packageRequires = [ modus-themes ];
meta = {
@@ -2915,10 +2936,10 @@
elpaBuild {
pname = "eglot";
ename = "eglot";
- version = "1.23";
+ version = "1.24";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/eglot-1.23.tar";
- sha256 = "1l83c90rdamlk576bd859jkg6406hgxi7w4c6ixlw509c66qr3s6";
+ url = "https://elpa.gnu.org/packages/eglot-1.24.tar";
+ sha256 = "0fi10gxw33lh15xvwv5bfqzv81wp7k3yibqc2mzbn59kwrja94gc";
};
packageRequires = [
eldoc
@@ -3089,10 +3110,10 @@
elpaBuild {
pname = "ellama";
ename = "ellama";
- version = "1.13.0";
+ version = "1.30.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/ellama-1.13.0.tar";
- sha256 = "0i3lzb68bwyr974wc0i8dn1kiryjs49zg79hli21wycm0j7a3six";
+ url = "https://elpa.gnu.org/packages/ellama-1.30.0.tar";
+ sha256 = "0xfyli6mzv5rdw6ddzy7q4w7332z4vniz1dmxlyr4r0dczyjq0pk";
};
packageRequires = [
compat
@@ -3183,10 +3204,10 @@
elpaBuild {
pname = "embark-consult";
ename = "embark-consult";
- version = "1.1";
+ version = "1.2";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/embark-consult-1.1.tar";
- sha256 = "06yh6w4zgvvkfllmcr0szsgjrfhh9rpjwgmcrf6h2gai2ps9xdqr";
+ url = "https://elpa.gnu.org/packages/embark-consult-1.2.tar";
+ sha256 = "1m6i8f49qmzfvqz0mq3ga0gcdi364pqsdph6arpwl4rr59r6sfwn";
};
packageRequires = [
compat
@@ -3336,10 +3357,10 @@
elpaBuild {
pname = "erc";
ename = "erc";
- version = "5.6.1";
+ version = "5.6.2";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/erc-5.6.1.tar";
- sha256 = "13dzip6xhj0mf8hs8wk08pfxny5gwpbzfsqkmz146xvl2d8m621x";
+ url = "https://elpa.gnu.org/packages/erc-5.6.2.tar";
+ sha256 = "0rm7aw6p8736ssp4z7vmfmwff93h4dwcv9pz3b83f9060i2svvvn";
};
packageRequires = [ compat ];
meta = {
@@ -3383,10 +3404,10 @@
elpaBuild {
pname = "ess";
ename = "ess";
- version = "26.1.0";
+ version = "26.5.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/ess-26.1.0.tar";
- sha256 = "1spyys37b2rzqzpa7y5ajrrjzckrsbp3hrhsvn28qav3g5d17463";
+ url = "https://elpa.gnu.org/packages/ess-26.5.0.tar";
+ sha256 = "07mfjhcnq3wn6q0dxc4yn5aqnvb9sfnwgi581b5283pfbszhxd29";
};
packageRequires = [ ];
meta = {
@@ -3499,10 +3520,10 @@
elpaBuild {
pname = "exwm";
ename = "exwm";
- version = "0.34";
+ version = "0.35";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/exwm-0.34.tar";
- sha256 = "1hp2ni9c6bn627275x37n6zhcismvni6vqp7cpdn3cx292n7sx6z";
+ url = "https://elpa.gnu.org/packages/exwm-0.35.tar";
+ sha256 = "05sfgprmsy3yc82qqm2ysg091yw91d0vb74cd612bqxyi3ifqa19";
};
packageRequires = [
compat
@@ -3535,6 +3556,27 @@
};
}
) { };
+ ffs = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "ffs";
+ ename = "ffs";
+ version = "0.2.2";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/packages/ffs-0.2.2.tar";
+ sha256 = "1mwjk877qfccdrp046j431pawr9g489gdz803wg55j0r12whh94a";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/packages/ffs.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
filechooser = callPackage (
{
compat,
@@ -3719,10 +3761,10 @@
elpaBuild {
pname = "fontaine";
ename = "fontaine";
- version = "3.0.1";
+ version = "3.1.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/fontaine-3.0.1.tar";
- sha256 = "0bgfg6pkw724id1d3igiw4g0204wnjwsbnabfy2rq6nrf99z1qwr";
+ url = "https://elpa.gnu.org/packages/fontaine-3.1.0.tar";
+ sha256 = "066q3pys9f4d7jkvm52yrj0df12jz8z22gv2f4jpb47g1iapkp9f";
};
packageRequires = [ ];
meta = {
@@ -3731,6 +3773,28 @@
};
}
) { };
+ forgejo = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ keymap-popup,
+ lib,
+ }:
+ elpaBuild {
+ pname = "forgejo";
+ ename = "forgejo";
+ version = "0.2.3";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/packages/forgejo-0.2.3.tar";
+ sha256 = "0q4y474acb759vx3d0xcqgikbq666nckka4hfashi1jwnas98qcg";
+ };
+ packageRequires = [ keymap-popup ];
+ meta = {
+ homepage = "https://elpa.gnu.org/packages/forgejo.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
frame-tabs = callPackage (
{
elpaBuild,
@@ -3830,10 +3894,10 @@
elpaBuild {
pname = "futur";
ename = "futur";
- version = "1.4";
+ version = "1.7";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/futur-1.4.tar";
- sha256 = "036b81cp5nbzhykfsj6rkhxb5b675k38njmb32bj20g9h7pkd1vl";
+ url = "https://elpa.gnu.org/packages/futur-1.7.tar";
+ sha256 = "1zb533jkhsi6p0ikx9jc7igz4yfq7b35apz9b8w7g0yrvq5jcl4i";
};
packageRequires = [ ];
meta = {
@@ -4019,17 +4083,21 @@
compat,
elpaBuild,
fetchurl,
+ keymap-popup,
lib,
}:
elpaBuild {
pname = "gnosis";
ename = "gnosis";
- version = "0.10.3";
+ version = "0.10.6";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/gnosis-0.10.3.tar";
- sha256 = "0642xdgpljfmzi27gfbzhngpyc82blpyyvkvqqbm6khiqac9wdxz";
+ url = "https://elpa.gnu.org/packages/gnosis-0.10.6.tar";
+ sha256 = "1g8zbvid2l7wfyagqynjd1jcjnd0m3zkh9ww0dadppj24n37k57n";
};
- packageRequires = [ compat ];
+ packageRequires = [
+ compat
+ keymap-popup
+ ];
meta = {
homepage = "https://elpa.gnu.org/packages/gnosis.html";
license = lib.licenses.free;
@@ -4232,10 +4300,10 @@
elpaBuild {
pname = "greader";
ename = "greader";
- version = "0.17.0";
+ version = "0.19.5";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/greader-0.17.0.tar";
- sha256 = "0kz9qvwkxfl3p4fwl235vxdv19iqrz2jrp9hk06z8bmwmdvj7nxd";
+ url = "https://elpa.gnu.org/packages/greader-0.19.5.tar";
+ sha256 = "1kzm63xp0fzryha5msyl0f4gdhhacz4ys0b0z1wf5phy832bc1w1";
};
packageRequires = [
compat
@@ -4510,6 +4578,27 @@
};
}
) { };
+ ibuffer-sidebar = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "ibuffer-sidebar";
+ ename = "ibuffer-sidebar";
+ version = "1.0.0";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/packages/ibuffer-sidebar-1.0.0.tar";
+ sha256 = "00wgka7g7gndk8vczrm3pvx09l46mv93yc0i4w3xlma30z0clivw";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/packages/ibuffer-sidebar.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
idlwave = callPackage (
{
elpaBuild,
@@ -4852,10 +4941,10 @@
elpaBuild {
pname = "javaimp";
ename = "javaimp";
- version = "0.9.1";
+ version = "0.9.2";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/javaimp-0.9.1.tar";
- sha256 = "1gy7qys9mzpgbqm5798fncmblmi32b350q51ccsyydq67yh69s3z";
+ url = "https://elpa.gnu.org/packages/javaimp-0.9.2.tar";
+ sha256 = "0y756psqlb2rn0bbrdndddsy6d22arv5f4qzaxgzp5p323vzjp7w";
};
packageRequires = [ ];
meta = {
@@ -4896,10 +4985,10 @@
elpaBuild {
pname = "jinx";
ename = "jinx";
- version = "2.7";
+ version = "2.8";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/jinx-2.7.tar";
- sha256 = "0ikyr5spj7vk0xycgmywr2sqn9gy1khg6h7kdlzjgy0mrjpxl32w";
+ url = "https://elpa.gnu.org/packages/jinx-2.8.tar";
+ sha256 = "0cxgj390zylr4lqjmfd7f8898z4zsjy1ln783fcjlhcpf94jjjmx";
};
packageRequires = [ compat ];
meta = {
@@ -4982,10 +5071,10 @@
elpaBuild {
pname = "jsonrpc";
ename = "jsonrpc";
- version = "1.0.28";
+ version = "1.0.29";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/jsonrpc-1.0.28.tar";
- sha256 = "13zdm9ss1sfpw55lwr8nrv1ha30qcj7v10m1ql8r9cbdxxkzxp8f";
+ url = "https://elpa.gnu.org/packages/jsonrpc-1.0.29.tar";
+ sha256 = "1cjxdzckxffiw2cjp68rf382iaf7qpg9iqkxm0yrz0rmw3vk3gcq";
};
packageRequires = [ ];
meta = {
@@ -5015,6 +5104,27 @@
};
}
) { };
+ keymap-popup = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "keymap-popup";
+ ename = "keymap-popup";
+ version = "0.4.0";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/packages/keymap-popup-0.4.0.tar";
+ sha256 = "0hdzppwrq78hzamr05jjj3nmdsv0fxbv93gs94gmwbc07jiq0937";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/packages/keymap-popup.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
kind-icon = callPackage (
{
elpaBuild,
@@ -5089,10 +5199,10 @@
elpaBuild {
pname = "kubed";
ename = "kubed";
- version = "0.6.1";
+ version = "0.7.1";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/kubed-0.6.1.tar";
- sha256 = "1filhadwzdkrw2dsma28b10nx62qnhxkp8g483r0il986ipnnshp";
+ url = "https://elpa.gnu.org/packages/kubed-0.7.1.tar";
+ sha256 = "1c8jr0wi52waa1yrz1y16gpyqabpqpyymmdf8c4apsja0i6345fk";
};
packageRequires = [ ];
meta = {
@@ -5133,10 +5243,10 @@
elpaBuild {
pname = "latex-table-wizard";
ename = "latex-table-wizard";
- version = "1.5.5";
+ version = "1.6.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/latex-table-wizard-1.5.5.tar";
- sha256 = "1fffbaqiz3f1f2ki26b8x0cmisqhaijpw5vrh73k769wqdv09g43";
+ url = "https://elpa.gnu.org/packages/latex-table-wizard-1.6.0.tar";
+ sha256 = "1zpf3x62ldqy12npypjk1x8dw7adfmqqhqj30cl2s659vq7gs4nb";
};
packageRequires = [
auctex
@@ -5251,10 +5361,10 @@
elpaBuild {
pname = "lex";
ename = "lex";
- version = "1.2";
+ version = "1.3";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/lex-1.2.tar";
- sha256 = "1pqjrlw558l4z4k40jmli8lmcqlzddhkr0mfm38rbycp7ghdr4zx";
+ url = "https://elpa.gnu.org/packages/lex-1.3.tar";
+ sha256 = "162y483d1gczjfcbds50y7iqbxmx7sfxi5mbdxyrhc2my6nq40lx";
};
packageRequires = [ ];
meta = {
@@ -5284,6 +5394,32 @@
};
}
) { };
+ lisp-ts-mode = callPackage (
+ {
+ compat,
+ cond-star,
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "lisp-ts-mode";
+ ename = "lisp-ts-mode";
+ version = "0.3.0";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/packages/lisp-ts-mode-0.3.0.tar";
+ sha256 = "0dh15bdmjgn4jmdc8xdf0wddj1zkbpi9xqw32m724h1y5511whh2";
+ };
+ packageRequires = [
+ compat
+ cond-star
+ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/packages/lisp-ts-mode.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
listen = callPackage (
{
elpaBuild,
@@ -5348,10 +5484,10 @@
elpaBuild {
pname = "llm";
ename = "llm";
- version = "0.30.1";
+ version = "0.31.2";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/llm-0.30.1.tar";
- sha256 = "11mmaw24dg9iwml8kx09xv8h9iyz9i9jw4m1kghq192fp9wy668i";
+ url = "https://elpa.gnu.org/packages/llm-0.31.2.tar";
+ sha256 = "08lc058w1xhiv3cxfkbcjaszplvwhmdyxpcwqkzw3x2sb11pn7rj";
};
packageRequires = [
compat
@@ -5586,10 +5722,10 @@
elpaBuild {
pname = "marginalia";
ename = "marginalia";
- version = "2.10";
+ version = "2.11";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/marginalia-2.10.tar";
- sha256 = "12did4rn4dp7km6shq7jvab2xbr0wxks4h1by19qz10rm5b0jl71";
+ url = "https://elpa.gnu.org/packages/marginalia-2.11.tar";
+ sha256 = "0h7jqgx95f5km90qc4g06ib3mi4acwggvx9yiwwirxj2mqwivifk";
};
packageRequires = [ compat ];
meta = {
@@ -5713,10 +5849,10 @@
elpaBuild {
pname = "mct";
ename = "mct";
- version = "1.1.0";
+ version = "1.1.1";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/mct-1.1.0.tar";
- sha256 = "0kv0j37bdsmc2jv7adpx5m48cp4h0kvjq2jfwv7d8nzpk5kk2d2p";
+ url = "https://elpa.gnu.org/packages/mct-1.1.1.tar";
+ sha256 = "18kwrm93vmkhm8l6gim1r3daizrj6k65lsq8xmja55a1jr60j1xi";
};
packageRequires = [ ];
meta = {
@@ -5855,6 +5991,7 @@
) { };
minimail = callPackage (
{
+ compat,
elpaBuild,
fetchurl,
lib,
@@ -5863,12 +6000,15 @@
elpaBuild {
pname = "minimail";
ename = "minimail";
- version = "0.4.2";
+ version = "0.5";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/minimail-0.4.2.tar";
- sha256 = "1ri424g6v55405d4zr4qhnvdswd5hc9n4hs2xds40ps0h6qp05hm";
+ url = "https://elpa.gnu.org/packages/minimail-0.5.tar";
+ sha256 = "1m1yn8f9mn3zqf7zc0691qaya5l504ry3afz2nmjycavzh8hzk5h";
};
- packageRequires = [ transient ];
+ packageRequires = [
+ compat
+ transient
+ ];
meta = {
homepage = "https://elpa.gnu.org/packages/minimail.html";
license = lib.licenses.free;
@@ -5907,10 +6047,10 @@
elpaBuild {
pname = "minuet";
ename = "minuet";
- version = "0.7.1";
+ version = "0.8.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/minuet-0.7.1.tar";
- sha256 = "0g18hfpjryg2kjj5gqr4jf1vgfjglaczd4w19g76233m31kd8f0n";
+ url = "https://elpa.gnu.org/packages/minuet-0.8.0.tar";
+ sha256 = "0vk118qd7g2b7vsaygj0lwnzj818p5nlsm36s1c7cm5inz1h6mfc";
};
packageRequires = [
dash
@@ -5953,10 +6093,10 @@
elpaBuild {
pname = "modus-themes";
ename = "modus-themes";
- version = "5.2.0";
+ version = "5.3.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/modus-themes-5.2.0.tar";
- sha256 = "1715x863mbvcc2lqf61lll5j50zhpc0jysdgd7v0ajznx40kqmxv";
+ url = "https://elpa.gnu.org/packages/modus-themes-5.3.0.tar";
+ sha256 = "04561ndfxq2y17drklkb3wl9kl6hdc05d4b6rrlqs3fdxcs6q6mx";
};
packageRequires = [ ];
meta = {
@@ -6355,10 +6495,10 @@
elpaBuild {
pname = "oauth2";
ename = "oauth2";
- version = "0.18.4";
+ version = "0.19";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/oauth2-0.18.4.tar";
- sha256 = "1hhfk7glp3m9f4aqf1dvqs5f7qp4s2gvbxamyxjalw3sj6pbv92n";
+ url = "https://elpa.gnu.org/packages/oauth2-0.19.tar";
+ sha256 = "0fjs2wk2ayhzh9ba8fa8pki4c5cyavcw0vqsscj93894s7xv9xgz";
};
packageRequires = [ ];
meta = {
@@ -6484,10 +6624,10 @@
elpaBuild {
pname = "orderless";
ename = "orderless";
- version = "1.6";
+ version = "1.7";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/orderless-1.6.tar";
- sha256 = "15gif01ivwg03h45azrj3kw2lgj7xnkr6p9r95m36fmfbg31csdh";
+ url = "https://elpa.gnu.org/packages/orderless-1.7.tar";
+ sha256 = "0g1klijlvv44fd7xjvlh6v97zjvca37710bxlgk629v6k4kl2rbz";
};
packageRequires = [ compat ];
meta = {
@@ -6505,10 +6645,10 @@
elpaBuild {
pname = "org";
ename = "org";
- version = "9.8.3";
+ version = "9.8.7";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/org-9.8.3.tar";
- sha256 = "0csfrn0k1fysjfwf8xmdnmizfjz62scr3kjawpafwv58gvizk32z";
+ url = "https://elpa.gnu.org/packages/org-9.8.7.tar";
+ sha256 = "1y7sf3p9jqkfw8k6wddy2p9hfskiq4a5hkx8sq39dgb4sri6v03d";
};
packageRequires = [ ];
meta = {
@@ -6652,10 +6792,10 @@
elpaBuild {
pname = "org-modern";
ename = "org-modern";
- version = "1.13";
+ version = "1.14";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/org-modern-1.13.tar";
- sha256 = "0cl6dqk8zq213j9ph07689dbzh1q1xr96kf512vvmgkln0himfqj";
+ url = "https://elpa.gnu.org/packages/org-modern-1.14.tar";
+ sha256 = "08rvxrr67ypvncrg7znl3in8c314l7x1a18m6hr458wqc1xb57zx";
};
packageRequires = [
compat
@@ -6832,10 +6972,10 @@
elpaBuild {
pname = "osm";
ename = "osm";
- version = "2.2";
+ version = "2.4";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/osm-2.2.tar";
- sha256 = "0xq5gzhgxgv52kxprik15b5ijrdw7c5262ifzdcjg3vv3qv0hwy8";
+ url = "https://elpa.gnu.org/packages/osm-2.4.tar";
+ sha256 = "1w270bjnxxlwi3vbgfb0aih6lkr8bgs872yrwfpl423x9wkrk48j";
};
packageRequires = [ compat ];
meta = {
@@ -7066,10 +7206,10 @@
elpaBuild {
pname = "php-fill";
ename = "php-fill";
- version = "1.1.1";
+ version = "1.1.2";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/php-fill-1.1.1.tar";
- sha256 = "130q6nyx5837wvhvis0nlzsqky7hic00z1jakik66asqpyrl7ncj";
+ url = "https://elpa.gnu.org/packages/php-fill-1.1.2.tar";
+ sha256 = "0r1zmin3wv8sqzgw6zbvbb7wix7d6h6s798f9r05w6g9m1vf0r5r";
};
packageRequires = [ ];
meta = {
@@ -7343,10 +7483,10 @@
elpaBuild {
pname = "posframe";
ename = "posframe";
- version = "1.5.1";
+ version = "1.5.2";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/posframe-1.5.1.tar";
- sha256 = "1g1pcf83w4fv299ykvx7b93kxkc58fkr6yk39sxny5g16d4gl80g";
+ url = "https://elpa.gnu.org/packages/posframe-1.5.2.tar";
+ sha256 = "0ywbcwm3sh01vc4nc2ra3b09gri2lgz838gjxgsflv9g3si1918x";
};
packageRequires = [ ];
meta = {
@@ -7386,10 +7526,10 @@
elpaBuild {
pname = "preview-auto";
ename = "preview-auto";
- version = "0.4.2";
+ version = "0.5.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/preview-auto-0.4.2.tar";
- sha256 = "1fg4nxzqjk13q9yvhrjmm9qqrszf9xd2n9jfji2v31f0rphlkc3p";
+ url = "https://elpa.gnu.org/packages/preview-auto-0.5.0.tar";
+ sha256 = "1d8rm22aqvgyg46r4vdf2w3ywxmqiny46y0p030i9q26xc2xq7my";
};
packageRequires = [ auctex ];
meta = {
@@ -7430,10 +7570,10 @@
elpaBuild {
pname = "project";
ename = "project";
- version = "0.11.2";
+ version = "0.12.0";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/project-0.11.2.tar";
- sha256 = "0gyjdqxsblsmh2higkr2a6vfl051hpqzm0pxrzwsg2766xmldgqk";
+ url = "https://elpa.gnu.org/packages/project-0.12.0.tar";
+ sha256 = "0g7in5lzv21j4mrmqp60bl02gwrh2mrs6fw1ysj6pwaqlza9hw4w";
};
packageRequires = [ xref ];
meta = {
@@ -8081,10 +8221,10 @@
elpaBuild {
pname = "rnc-mode";
ename = "rnc-mode";
- version = "0.3";
+ version = "0.4";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/rnc-mode-0.3.tar";
- sha256 = "1p03g451888v86k9z6g8gj375p1pcdvikgk1phxkhipwi5hbf5g8";
+ url = "https://elpa.gnu.org/packages/rnc-mode-0.4.tar";
+ sha256 = "1igg829mm6n35mpfp254276ib3x7x7wxdg9zm38yf5n3bmjq7cxf";
};
packageRequires = [ ];
meta = {
@@ -8249,6 +8389,27 @@
};
}
) { };
+ sendai-theme = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "sendai-theme";
+ ename = "sendai-theme";
+ version = "0.1.0";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/packages/sendai-theme-0.1.0.tar";
+ sha256 = "0c8k19pj5l148g34isi6w309msrq6q3z65427ilky47xzs067faz";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/packages/sendai-theme.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
seq = callPackage (
{
elpaBuild,
@@ -8354,6 +8515,27 @@
};
}
) { };
+ shift-number = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "shift-number";
+ ename = "shift-number";
+ version = "0.3";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/packages/shift-number-0.3.tar";
+ sha256 = "0vqwy0ai4f1ga4j2inl2s1ly0v9i3fmqyd0p28fgyx3f23c83jqn";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/packages/shift-number.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
show-font = callPackage (
{
elpaBuild,
@@ -9164,10 +9346,10 @@
elpaBuild {
pname = "tempel";
ename = "tempel";
- version = "1.12";
+ version = "1.14";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/tempel-1.12.tar";
- sha256 = "1ghlnf7533i6iarzmsgyc0d366bzc3jbyvn6bq650c10ci4wjzsm";
+ url = "https://elpa.gnu.org/packages/tempel-1.14.tar";
+ sha256 = "1m2zy53drrpcjqky7a2pfhrnrynhj7hdksl68kfz8r6lp5id6xf3";
};
packageRequires = [ compat ];
meta = {
@@ -9185,10 +9367,10 @@
elpaBuild {
pname = "termint";
ename = "termint";
- version = "0.2.2";
+ version = "0.2.3";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/termint-0.2.2.tar";
- sha256 = "0iavnximqsx6vl6yx36n829h67x4pyfmm8xcp5fzjwphdmgfdann";
+ url = "https://elpa.gnu.org/packages/termint-0.2.3.tar";
+ sha256 = "1yir074lihlr2y78a58jm233a6s807j8d8fvlvv6b62wm0036frk";
};
packageRequires = [ ];
meta = {
@@ -9291,10 +9473,10 @@
elpaBuild {
pname = "timeout";
ename = "timeout";
- version = "2.1";
+ version = "2.1.6";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/timeout-2.1.tar";
- sha256 = "1mm4yp1spw512dnav1p3wnxqrsyls918i14azg03by4v32r9945p";
+ url = "https://elpa.gnu.org/packages/timeout-2.1.6.tar";
+ sha256 = "08lijbbbx2wx64jn6l5820phkmi6cagym1239zj1hx25h28b2h0r";
};
packageRequires = [ ];
meta = {
@@ -9444,10 +9626,10 @@
elpaBuild {
pname = "tramp";
ename = "tramp";
- version = "2.8.1.3";
+ version = "2.8.2";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/tramp-2.8.1.3.tar";
- sha256 = "1jjbgg48q6dlfp9rpn0pla4mlclw60079d51bgnb84q3pv3zdqwj";
+ url = "https://elpa.gnu.org/packages/tramp-2.8.2.tar";
+ sha256 = "1d9mki1ik8ck891jq7kzkf93aqalfm0i9vqdbm5km8g317wqpaqn";
};
packageRequires = [ ];
meta = {
@@ -9548,19 +9730,21 @@
elpaBuild,
fetchurl,
lib,
+ llama,
seq,
}:
elpaBuild {
pname = "transient";
ename = "transient";
- version = "0.13.0";
+ version = "0.13.5";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/transient-0.13.0.tar";
- sha256 = "0rwb7l823d4nkk7zmnyi5j7id7kswxrc0h9crqyd63n14w78bksi";
+ url = "https://elpa.gnu.org/packages/transient-0.13.5.tar";
+ sha256 = "15mdg6q6ns6sqyrikvxvn4l76dxz5gai9a9hqvf61vgk35vkgz47";
};
packageRequires = [
compat
cond-let
+ llama
seq
];
meta = {
@@ -9578,10 +9762,10 @@
elpaBuild {
pname = "transient-cycles";
ename = "transient-cycles";
- version = "2.0";
+ version = "2.1";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/transient-cycles-2.0.tar";
- sha256 = "0cq2k77rgbw3fx84a2d33nbb75wqxynrc1mx4gb32a9ysm0sa4s3";
+ url = "https://elpa.gnu.org/packages/transient-cycles-2.1.tar";
+ sha256 = "12g22ajwf3lsqi3c9bajqq30n1aaq96r15mfd1z2bbzpn1gfahkf";
};
packageRequires = [ ];
meta = {
@@ -9682,6 +9866,27 @@
};
}
) { };
+ trust-manager = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "trust-manager";
+ ename = "trust-manager";
+ version = "0.4.1";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/packages/trust-manager-0.4.1.tar";
+ sha256 = "1azp3kzkw76xbwsn6j94liy33d3swajc1v2h8ghczvxv8sw8khgj";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/packages/trust-manager.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
ulisp-repl = callPackage (
{
elpaBuild,
@@ -10111,10 +10316,10 @@
elpaBuild {
pname = "verilog-mode";
ename = "verilog-mode";
- version = "2026.1.18.88738971";
+ version = "2026.4.14.10117132";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/verilog-mode-2026.1.18.88738971.tar";
- sha256 = "1m215m38mia2wiq1zzyy85k268pch10yzf3p4i0nk5s7ijxl6ls4";
+ url = "https://elpa.gnu.org/packages/verilog-mode-2026.4.14.10117132.tar";
+ sha256 = "0n699kpqhh1b023wswm938f7kxc983faw0bv4x70kq12y7h3slj1";
};
packageRequires = [ ];
meta = {
@@ -10133,10 +10338,10 @@
elpaBuild {
pname = "vertico";
ename = "vertico";
- version = "2.8";
+ version = "2.10";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/vertico-2.8.tar";
- sha256 = "0v19z3sh4npjmvii03r5v9mbmg8g3bp1ay82ydalw864hlcwgb71";
+ url = "https://elpa.gnu.org/packages/vertico-2.10.tar";
+ sha256 = "1kwmlpfxjnjkv05hfqhxmxw5d1vlhqvdmyc3p34qhp3bj2xafwm0";
};
packageRequires = [ compat ];
meta = {
@@ -10285,10 +10490,10 @@
elpaBuild {
pname = "wcheck-mode";
ename = "wcheck-mode";
- version = "2026";
+ version = "2026.5";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/wcheck-mode-2026.tar";
- sha256 = "019lsaihpl9w17qfhn8c5j8rp8nrvlmb16w6r8sb1iril31997sz";
+ url = "https://elpa.gnu.org/packages/wcheck-mode-2026.5.tar";
+ sha256 = "0yxg6s4s5103zfa8m82gaxc46d9gjpiknmvgm2lcb21dckdsay13";
};
packageRequires = [ ];
meta = {
@@ -10536,6 +10741,27 @@
};
}
) { };
+ with-command-redo = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "with-command-redo";
+ ename = "with-command-redo";
+ version = "0.2";
+ src = fetchurl {
+ url = "https://elpa.gnu.org/packages/with-command-redo-0.2.tar";
+ sha256 = "1da6xklk9yf9xazspr9d987rsfxl8m2y556g99cnf3cj6bx8npa3";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.gnu.org/packages/with-command-redo.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
wpuzzle = callPackage (
{
elpaBuild,
@@ -10630,10 +10856,10 @@
elpaBuild {
pname = "xelb";
ename = "xelb";
- version = "0.22";
+ version = "0.23";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/xelb-0.22.tar";
- sha256 = "0vd0dsigr2lvwvvm32kf20dyg5bvafinb2xhz491f8wj2w99fjx4";
+ url = "https://elpa.gnu.org/packages/xelb-0.23.tar";
+ sha256 = "1fsqs06g2hx248sngp7lqkx1m63m96jvmdks28xcamw1j1p8h0v0";
};
packageRequires = [ compat ];
meta = {
@@ -10740,10 +10966,10 @@
elpaBuild {
pname = "yaml";
ename = "yaml";
- version = "1.2.3";
+ version = "1.2.4";
src = fetchurl {
- url = "https://elpa.gnu.org/packages/yaml-1.2.3.tar";
- sha256 = "0wyvhh4ij22wdd3g5jkg2mnyglbk2k7mf2jv48jkpb5jc4kf6jvr";
+ url = "https://elpa.gnu.org/packages/yaml-1.2.4.tar";
+ sha256 = "12ji680hjm1isc5k3yapvnp2m7pk23syfxwhi95bizhka02n0qly";
};
packageRequires = [ ];
meta = {
diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/color-theme-solarized/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/color-theme-solarized/package.nix
index 2bbfb02d7f96..6b67b2605c15 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/color-theme-solarized/package.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/color-theme-solarized/package.nix
@@ -18,9 +18,6 @@ melpaBuild {
files = ''(:defaults (:exclude "color-theme-solarized-pkg.el"))'';
- # https://github.com/NixOS/nixpkgs/issues/335408
- ignoreCompilationError = true;
-
meta = {
homepage = "http://ethanschoonover.com/solarized";
description = "Precision colors for machines and people; Emacs implementation";
diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/copilot/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/copilot/package.nix
index 07bf31827567..1115f32c61d0 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/copilot/package.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/copilot/package.nix
@@ -12,13 +12,13 @@
}:
melpaBuild (finalAttrs: {
pname = "copilot";
- version = "0.5.0";
+ version = "0.9.0";
src = fetchFromGitHub {
owner = "copilot-emacs";
repo = "copilot.el";
rev = "v${finalAttrs.version}";
- sha256 = "sha256-1uHPtz0F0pim7KlotB1+pmls1i7H3hRhZ0DX1h53cPc=";
+ sha256 = "sha256-x2Lzhz8Yi3/EsahkJZ/pJoaJuVb1xIHgNt50qi0ndeo=";
};
files = ''(:defaults "dist")'';
@@ -47,7 +47,6 @@ melpaBuild (finalAttrs: {
platforms = [
"aarch64-darwin"
"aarch64-linux"
- "x86_64-darwin"
"x86_64-linux"
"x86_64-windows"
];
diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ebuild-mode/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ebuild-mode/package.nix
index 83f2b5da36df..c9b05825c7df 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ebuild-mode/package.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ebuild-mode/package.nix
@@ -6,11 +6,11 @@
melpaBuild (finalAttrs: {
pname = "ebuild-mode";
- version = "1.83";
+ version = "1.84";
src = fetchzip {
url = "https://gitweb.gentoo.org/proj/ebuild-mode.git/snapshot/ebuild-mode-${finalAttrs.version}.tar.bz2";
- hash = "sha256-xZA3Vkh8frgXzyGZs5UELdBh0vrcsXJN/2aJX56QH0Y=";
+ hash = "sha256-+WbKgOR0eCIvBgQrXzVOk8k2mV7INObY59vc46KvMYo=";
};
meta = {
diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix
index cbb23ee3e9ff..588218f3f05a 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix
@@ -6,6 +6,7 @@
stdenv,
zig_0_15,
emacs,
+ xcbuild,
}:
let
@@ -13,13 +14,13 @@ let
pname = "ghostel";
- version = "0.34.0-unstable-2026-06-08";
+ version = "0.44.0";
src = fetchFromGitHub {
owner = "dakra";
repo = "ghostel";
- rev = "f7800f6430b6ab85dbfc2db2129625e8a28ac17e";
- hash = "sha256-o9EQFA6xunwt/chdA5z8bqadr9V3COBPjRqiAY3jkp0=";
+ tag = "v${version}";
+ hash = "sha256-vRGZoQtjsL42ga07fOfEjccKRidAhqgwHBoKs++62Ls=";
};
module = stdenv.mkDerivation (finalAttrs: {
@@ -28,10 +29,10 @@ let
deps = zig.fetchDeps {
inherit (finalAttrs) src pname version;
fetchAll = true;
- hash = "sha256-CTsG3dXu3DECDbklBAtr2fYou82WNvQ1Q3JET0TmuyM=";
+ hash = "sha256-yrVgiofdmVjTGJ+PGPGRCc8gb/JcEca1uAzIoPgHHqU=";
};
- nativeBuildInputs = [ zig ];
+ nativeBuildInputs = [ zig ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcbuild ];
env.EMACS_INCLUDE_DIR = "${emacs}/include";
@@ -59,15 +60,16 @@ melpaBuild {
inherit pname version src;
files = ''
- (:defaults "etc" "ghostel-module${libExt}")
+ (:defaults "etc" "ghostel-module${libExt}" "ghostel-module.version")
'';
preBuild = ''
- install ${module}/lib/libghostel-module${libExt} ghostel-module${libExt}
+ install ${module}/ghostel-module${libExt} ghostel-module${libExt}
+ install --mode=444 ${module}/ghostel-module.version ghostel-module.version
'';
passthru = {
- updateScript = nix-update-script { extraArgs = [ "--version=branch=main" ]; };
+ updateScript = nix-update-script { };
inherit module;
};
@@ -75,7 +77,10 @@ melpaBuild {
meta = {
homepage = "https://github.com/dakra/ghostel";
description = "Terminal emulator powered by libghostty";
- maintainers = with lib.maintainers; [ vonfry ];
+ maintainers = with lib.maintainers; [
+ rohan-datar
+ vonfry
+ ];
license = lib.licenses.gpl3Plus;
};
}
diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/holo-layer/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/holo-layer/package.nix
index 082579c45068..0b20ac1d399c 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/holo-layer/package.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/holo-layer/package.nix
@@ -22,7 +22,7 @@ let
pyqt6-sip
sexpdata
six
- xlib
+ python-xlib
];
pythonEnv = python3.withPackages pythonPkgs;
diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/majutsu/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/majutsu/package.nix
new file mode 100644
index 000000000000..46aa2e404c91
--- /dev/null
+++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/majutsu/package.nix
@@ -0,0 +1,35 @@
+{
+ lib,
+ melpaBuild,
+ fetchFromGitHub,
+ nix-update-script,
+ magit,
+ transient,
+ with-editor,
+}:
+melpaBuild {
+ pname = "majutsu";
+ version = "0.6.0-unstable-2026-07-09";
+
+ src = fetchFromGitHub {
+ owner = "0WD0";
+ repo = "majutsu";
+ rev = "59aff9b93eac575fbccc1f4ab2d48d048e0ead9b";
+ hash = "sha256-GJ62hsHgLEFIY0ghij0VPFt1jMUGRKhI2eCroBjkxtc=";
+ };
+
+ packageRequires = [
+ magit
+ transient
+ with-editor
+ ];
+
+ passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch=main" ]; };
+
+ meta = {
+ description = "Magit for jujutsu";
+ homepage = "https://github.com/0WD0/majutsu";
+ maintainers = [ lib.maintainers.shunueda ];
+ license = lib.licenses.gpl3Plus;
+ };
+}
diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/modus-themes-exporter/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/modus-themes-exporter/package.nix
new file mode 100644
index 000000000000..67b3c50b35d5
--- /dev/null
+++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/modus-themes-exporter/package.nix
@@ -0,0 +1,28 @@
+{
+ lib,
+ melpaBuild,
+ fetchFromGitHub,
+ modus-themes,
+ nix-update-script,
+}:
+melpaBuild {
+ pname = "modus-themes-exporter";
+ version = "0-unstable-2026-04-24";
+
+ src = fetchFromGitHub {
+ owner = "protesilaos";
+ repo = "modus-themes-exporter";
+ rev = "a19c4b0f22d353afcd441fbbc6c0565858a86c9b";
+ hash = "sha256-/PCCArQUV1uhhbOC3fqSuUkgDqc4+QlLubTtjx8/vGc=";
+ };
+
+ packageRequires = [ modus-themes ];
+ passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch=main" ]; };
+
+ meta = {
+ description = "Export a Modus themes to another application";
+ homepage = "https://github.com/protesilaos/modus-themes-exporter";
+ maintainers = [ lib.maintainers.HeitorAugustoLN ];
+ license = lib.licenses.gpl3Plus;
+ };
+}
diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/session-management-for-emacs/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/session-management-for-emacs/package.nix
index f66bf92548bd..d0198a8adbaf 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/session-management-for-emacs/package.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/session-management-for-emacs/package.nix
@@ -7,17 +7,14 @@
melpaBuild (finalAttrs: {
pname = "session-management-for-emacs";
ename = "session";
- version = "2.2a";
- melpaVersion = "2.2"; # default value derived from version is not valid for Emacs
+ version = "2.4b";
+ melpaVersion = "2.4"; # default value derived from version is not valid for Emacs
src = fetchzip {
url = "mirror://sourceforge/emacs-session/session-${finalAttrs.version}.tar.gz";
- hash = "sha256-lc6NIX+lx97qCs5JqG7x0iVE6ki09Gy7DEQuPW2c+7s=";
+ hash = "sha256-xF/hyUyerZPXgklOn2DElJtbyPZqSG/6S2PPxh971F0=";
};
- # https://github.com/NixOS/nixpkgs/issues/335421
- ignoreCompilationError = true;
-
meta = {
/*
installation: add to your ~/.emacs
diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/treesit-grammars/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/treesit-grammars/package.nix
index aa1931869d6b..ed8e4eaa3521 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/treesit-grammars/package.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/treesit-grammars/package.nix
@@ -15,9 +15,9 @@ let
# Usage:
# treesit-grammars.with-grammars (p: [ p.tree-sitter-bash p.tree-sitter-c ... ])
- with-grammars = fn: grammarPackage (fn pkgs.tree-sitter.builtGrammars);
+ with-grammars = fn: grammarPackage (fn pkgs.tree-sitter-grammars.derivations);
- with-all-grammars = grammarPackage pkgs.tree-sitter.allGrammars;
+ with-all-grammars = grammarPackage pkgs.tree-sitter-grammars.allGrammars;
in
{
inherit with-grammars with-all-grammars;
diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/package.nix
index 35e9335e4e5f..287631bea6ae 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/package.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/package.nix
@@ -12,16 +12,16 @@ let
tsc-dyn = rustPlatform.buildRustPackage (finalAttrs: {
pname = "tsc-dyn";
- version = "0.18.0";
+ version = "0.19.4";
src = fetchFromGitHub {
owner = "emacs-tree-sitter";
repo = "emacs-tree-sitter";
tag = finalAttrs.version;
- hash = "sha256-LrakDpP3ZhRQqz47dPcyoQnu5lROdaNlxGaQfQT6u+k=";
+ hash = "sha256-7B9Q8ke8gY9cFIAjpyH21P240goKUEKgppfqP3PSxYA=";
};
- cargoHash = "sha256-Tua3ZFfSyWVYXU9mPLWXE6ejGlXowTNe3nvZBaicmSQ=";
+ cargoHash = "sha256-mjR8PehbhY1o/5L2l/OMh/NwjjmQXErPHh00cAD94pw=";
sourceRoot = "${finalAttrs.src.name}/core";
diff --git a/pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix b/pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix
index fae91613fd19..66941ed76987 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix
@@ -1536,6 +1536,8 @@ let
org-change = ignoreCompilationError super.org-change; # elisp error
+ org-cite-overlay = ignoreCompilationError super.org-cite-overlay; # native-ice
+
org-edit-latex = mkHome super.org-edit-latex;
# https://github.com/GuiltyDolphin/org-evil/issues/24
@@ -1701,6 +1703,9 @@ let
shampoo = ignoreCompilationError super.shampoo; # elisp error
+ # missing optional dependencies
+ shexc-ts-mode = addPackageRequires super.shexc-ts-mode [ self.yaml ];
+
# missing optional dependencies and one of them (mew) is not on any ELPA
shimbun = ignoreCompilationError (
addPackageRequires super.shimbun [
diff --git a/pkgs/applications/editors/emacs/elisp-packages/nongnu-common-overrides.nix b/pkgs/applications/editors/emacs/elisp-packages/nongnu-common-overrides.nix
index 06c66787c3f1..5c71f117ea75 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/nongnu-common-overrides.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/nongnu-common-overrides.nix
@@ -20,5 +20,22 @@ in
yasnippet
]
);
+
+ # requires optional dependency for OMEMO support.
+ jabber = super.jabber.overrideAttrs (old: {
+ buildInputs = old.buildInputs ++ [ pkgs.mbedtls ];
+ nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.pkg-config ];
+
+ # We need to run this in postInstall for package directory to become available
+ postInstall =
+ (old.postInstall or "")
+ + "\n"
+ + ''
+ pushd $out/share/emacs/site-lisp/elpa/jabber-*/src
+ make CC=$CC
+ rm -r $out/share/emacs/site-lisp/elpa/jabber-*/src
+ popd
+ '';
+ });
# keep-sorted end
}
diff --git a/pkgs/applications/editors/emacs/elisp-packages/nongnu-devel-generated.nix b/pkgs/applications/editors/emacs/elisp-packages/nongnu-devel-generated.nix
index f870cacfbf89..093cb083cc8e 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/nongnu-devel-generated.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/nongnu-devel-generated.nix
@@ -9,10 +9,10 @@
elpaBuild {
pname = "adoc-mode";
ename = "adoc-mode";
- version = "0.8.0.0.20260221.220754";
+ version = "0.9.0.0.20260612.26";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/adoc-mode-0.8.0.0.20260221.220754.tar";
- sha256 = "19cn5vm963pygzi42r7zw0n7g1adipa0k8f8chwlwibhzwmx3vyz";
+ url = "https://elpa.nongnu.org/nongnu-devel/adoc-mode-0.9.0.0.20260612.26.tar";
+ sha256 = "0ivn3j21cn5xqd4bwr2razaxg2sljg18d70vwksgrb74zyz3lkxy";
};
packageRequires = [ ];
meta = {
@@ -75,10 +75,10 @@
elpaBuild {
pname = "aidermacs";
ename = "aidermacs";
- version = "1.6.0.20251203.181819";
+ version = "1.9.0.20260719.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/aidermacs-1.6.0.20251203.181819.tar";
- sha256 = "0kyy5fw8397hcahm4wlvl51ch2fbrlw2r8arvcxflssngy7cbbaa";
+ url = "https://elpa.nongnu.org/nongnu-devel/aidermacs-1.9.0.20260719.1.tar";
+ sha256 = "1rian9r2vvdnrk0hqmrgpsp2lbi7ci5gr8jzg9ghgpkz7bjsa8w1";
};
packageRequires = [
compat
@@ -121,10 +121,10 @@
elpaBuild {
pname = "ample-theme";
ename = "ample-theme";
- version = "0.3.0.0.20240426.84530";
+ version = "0.3.0.0.20260611.50";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/ample-theme-0.3.0.0.20240426.84530.tar";
- sha256 = "00h1za3qdqjgaxr2c3qlmz374gl9fhrgg7r453wvkz1fy6n9vp5i";
+ url = "https://elpa.nongnu.org/nongnu-devel/ample-theme-0.3.0.0.20260611.50.tar";
+ sha256 = "1r0sw8iwrpxwvpr3ijxadh0ldkpljyd9j9wviga7j9c2q9248xkw";
};
packageRequires = [ ];
meta = {
@@ -142,10 +142,10 @@
elpaBuild {
pname = "annotate";
ename = "annotate";
- version = "2.4.5.0.20251111.163545";
+ version = "2.5.0.0.20260514.132017";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/annotate-2.4.5.0.20251111.163545.tar";
- sha256 = "09jghlf5bjiiah1qqvr1s3lkjqzywf9cxrfzpfq192ms1hzs1wmd";
+ url = "https://elpa.nongnu.org/nongnu-devel/annotate-2.5.0.0.20260514.132017.tar";
+ sha256 = "0rsgi0slvnjccv414f1229nm98yd9icla0py1nd11zqqi5n8a0c4";
};
packageRequires = [ ];
meta = {
@@ -205,10 +205,10 @@
elpaBuild {
pname = "apache-mode";
ename = "apache-mode";
- version = "2.2.0.0.20251120.174624";
+ version = "2.2.0.0.20260618.15";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/apache-mode-2.2.0.0.20251120.174624.tar";
- sha256 = "0f536bc064ykjajsgyxcbdjxch14wi2kkxhva9szi802l78zkdhh";
+ url = "https://elpa.nongnu.org/nongnu-devel/apache-mode-2.2.0.0.20260618.15.tar";
+ sha256 = "10n61089a40jh3n8ail15m7vy5k0lxgyw4jd31p4zihd45q4hhx1";
};
packageRequires = [ ];
meta = {
@@ -269,10 +269,10 @@
elpaBuild {
pname = "auto-dim-other-buffers";
ename = "auto-dim-other-buffers";
- version = "2.2.1.0.20250116.140242";
+ version = "2.2.2.0.20260624.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/auto-dim-other-buffers-2.2.1.0.20250116.140242.tar";
- sha256 = "07v5n7d3whk79by6xwd1gak1m73k4zpcscwfminfidj3f6rmkj92";
+ url = "https://elpa.nongnu.org/nongnu-devel/auto-dim-other-buffers-2.2.2.0.20260624.0.tar";
+ sha256 = "1kpglnqss61dx9px0v2agbnfnjymjynslr31mpc73p6qjv0fqgcv";
};
packageRequires = [ ];
meta = {
@@ -291,10 +291,10 @@
elpaBuild {
pname = "autothemer";
ename = "autothemer";
- version = "0.2.18.0.20251114.41509";
+ version = "0.2.18.0.20260620.7";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/autothemer-0.2.18.0.20251114.41509.tar";
- sha256 = "0ix8byl6fa2qpcjvcf93afbsk2f9frnsbq9mcnhxmx17l48fzl06";
+ url = "https://elpa.nongnu.org/nongnu-devel/autothemer-0.2.18.0.20260620.7.tar";
+ sha256 = "1awdmkxy2gdrk20j63k8fjclfsmnkx33hm55x636fmcrh2niqcg7";
};
packageRequires = [ dash ];
meta = {
@@ -333,10 +333,10 @@
elpaBuild {
pname = "bash-completion";
ename = "bash-completion";
- version = "3.2.1snapshot0.20260325.162703";
+ version = "3.2.1snapshot0.20260325.20";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/bash-completion-3.2.1snapshot0.20260325.162703.tar";
- sha256 = "1w2ymxz5pcpdfxw2jaqqg5c8i1dkj4cp23y15sk80q9mfcyfmkxj";
+ url = "https://elpa.nongnu.org/nongnu-devel/bash-completion-3.2.1snapshot0.20260325.20.tar";
+ sha256 = "1ircxf1kgdjbrkx1i16z3lv62vbdsspyhl6hh589827031lsz0sj";
};
packageRequires = [ ];
meta = {
@@ -354,10 +354,10 @@
elpaBuild {
pname = "beancount";
ename = "beancount";
- version = "0.9.0.0.20251027.80859";
+ version = "0.9.0.0.20260517.140330";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/beancount-0.9.0.0.20251027.80859.tar";
- sha256 = "19lklnmqpxzxgwdjb3wzaarkklxqswnl9ff11pg854rr7kivlmwl";
+ url = "https://elpa.nongnu.org/nongnu-devel/beancount-0.9.0.0.20260517.140330.tar";
+ sha256 = "0rziax9ci1vi5z6v686j7nmbvx8cym7zpi8479md52gpsd58daqn";
};
packageRequires = [ ];
meta = {
@@ -501,10 +501,10 @@
elpaBuild {
pname = "buttercup";
ename = "buttercup";
- version = "1.40.0.20260411.203013";
+ version = "1.40.0.20260512.214133";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/buttercup-1.40.0.20260411.203013.tar";
- sha256 = "13s30dv7vhzbm80f4brza2mk7lpf3l7ffbzbjv4ln2s8rgsh6g64";
+ url = "https://elpa.nongnu.org/nongnu-devel/buttercup-1.40.0.20260512.214133.tar";
+ sha256 = "0fays43ygmxp14gsv75zgwmhg2iycl758684g3b3xvgiq8k6dlw8";
};
packageRequires = [ ];
meta = {
@@ -543,10 +543,10 @@
elpaBuild {
pname = "caml";
ename = "caml";
- version = "4.10snapshot0.20250227.123439";
+ version = "4.10snapshot0.20250227.11";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/caml-4.10snapshot0.20250227.123439.tar";
- sha256 = "1bg8vf7sh6f7s7jghfyqhb5da38kr8f3bbizzy7xfim2jy1i4ci7";
+ url = "https://elpa.nongnu.org/nongnu-devel/caml-4.10snapshot0.20250227.11.tar";
+ sha256 = "06r646gvwkqmsiiln434c6x6w17f8in0rqaymxpgyfhrxmx6skbb";
};
packageRequires = [ ];
meta = {
@@ -566,10 +566,10 @@
elpaBuild {
pname = "casual";
ename = "casual";
- version = "2.16.0.0.20260415.182614";
+ version = "2.17.1.0.20260718.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/casual-2.16.0.0.20260415.182614.tar";
- sha256 = "0a0ba4b506pbv4nff8qspqjfzlfng77i3nqs3vwg1ybz6rhj7cwj";
+ url = "https://elpa.nongnu.org/nongnu-devel/casual-2.17.1.0.20260718.0.tar";
+ sha256 = "031vpnhf498lic2ngh9bmg0917561dsnrn3apsdv0id3rl7vsd35";
};
packageRequires = [
csv-mode
@@ -619,10 +619,10 @@
elpaBuild {
pname = "cider";
ename = "cider";
- version = "1.22.0snapshot0.20260420.43551";
+ version = "2.0.1snapshot0.20260718.7";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/cider-1.22.0snapshot0.20260420.43551.tar";
- sha256 = "14vhww7sm3hzvrag671m8l4sbh4mi4iy395vnqhpyn6wxp0z9m91";
+ url = "https://elpa.nongnu.org/nongnu-devel/cider-2.0.1snapshot0.20260718.7.tar";
+ sha256 = "1y5bp14z67xky44nv419hwjry2n0md2ff54pi8mnfffcd0ikvp97";
};
packageRequires = [
clojure-mode
@@ -649,10 +649,10 @@
elpaBuild {
pname = "clojure-mode";
ename = "clojure-mode";
- version = "5.23.0.0.20260325.143544";
+ version = "5.23.0.0.20260709.7";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/clojure-mode-5.23.0.0.20260325.143544.tar";
- sha256 = "0rapsgj8kxnf7c9zvpjn9adjw7gxb9q3bpxwv1r610l8gdz9haj5";
+ url = "https://elpa.nongnu.org/nongnu-devel/clojure-mode-5.23.0.0.20260709.7.tar";
+ sha256 = "0rw17p4kgifzyxz393say6dbv5m5csvfwbyj9l96cyi9x71llz19";
};
packageRequires = [ ];
meta = {
@@ -670,10 +670,10 @@
elpaBuild {
pname = "clojure-ts-mode";
ename = "clojure-ts-mode";
- version = "0.6.0.0.20260325.210727";
+ version = "0.6.0.0.20260709.48";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/clojure-ts-mode-0.6.0.0.20260325.210727.tar";
- sha256 = "06fi1l2dzd9gbkjafvnmhmhcc9i5iwlk5kgfbcavm8a9cvfrdv1q";
+ url = "https://elpa.nongnu.org/nongnu-devel/clojure-ts-mode-0.6.0.0.20260709.48.tar";
+ sha256 = "0ia909an1q6zig3ysvnjf6nrv0gyz7jm7k3xzqfnqb0idm0sllx7";
};
packageRequires = [ ];
meta = {
@@ -712,10 +712,10 @@
elpaBuild {
pname = "cond-let";
ename = "cond-let";
- version = "0.2.2.0.20260420.135245";
+ version = "1.1.3.0.20260701.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/cond-let-0.2.2.0.20260420.135245.tar";
- sha256 = "1zm81zgmf5k6akh4pngjln1xp7p561h97hkcrsbc78v7nq48x8kb";
+ url = "https://elpa.nongnu.org/nongnu-devel/cond-let-1.1.3.0.20260701.0.tar";
+ sha256 = "1swmpvpx2437js3vn93vnfj5aqnwaf1xxw1ynyr0i2g4nr27qc7s";
};
packageRequires = [ ];
meta = {
@@ -735,10 +735,10 @@
elpaBuild {
pname = "consult-flycheck";
ename = "consult-flycheck";
- version = "1.1.0.20260330.61817";
+ version = "1.2.0.20260628.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/consult-flycheck-1.1.0.20260330.61817.tar";
- sha256 = "0qibwl60kwyj3azpz7zph3frb8ia7ll7qr70mfj6brdng0wdc9b1";
+ url = "https://elpa.nongnu.org/nongnu-devel/consult-flycheck-1.2.0.20260628.1.tar";
+ sha256 = "0vffihzsnpnjcfkj2gc9qyx4hh274zhfq3nsgddygsl7dcbjv8xp";
};
packageRequires = [
consult
@@ -785,10 +785,10 @@
elpaBuild {
pname = "crux";
ename = "crux";
- version = "0.6.0snapshot0.20260315.62204";
+ version = "0.6.0snapshot0.20260315.12";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/crux-0.6.0snapshot0.20260315.62204.tar";
- sha256 = "0pk55r3yr4nl43r61ay29rhx0kw77k0490w3j2gq60h89b605rjm";
+ url = "https://elpa.nongnu.org/nongnu-devel/crux-0.6.0snapshot0.20260315.12.tar";
+ sha256 = "09anj5a7p0waqyg0cng6x8231078xk4p6ig0ayancspbgyi9yp4d";
};
packageRequires = [ ];
meta = {
@@ -807,10 +807,10 @@
elpaBuild {
pname = "csv2ledger";
ename = "csv2ledger";
- version = "1.5.4.0.20250417.171625";
+ version = "1.5.5.0.20260621.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/csv2ledger-1.5.4.0.20250417.171625.tar";
- sha256 = "1m72znfi5hd9pwavc99g8amxwc0jdyly7gsww2aq0fw4q971kiaf";
+ url = "https://elpa.nongnu.org/nongnu-devel/csv2ledger-1.5.5.0.20260621.0.tar";
+ sha256 = "0mvyzsr02allsf6a6ac4b8cb1cbzajcs4v082qnklf7dwmcya8dg";
};
packageRequires = [ csv-mode ];
meta = {
@@ -850,10 +850,10 @@
elpaBuild {
pname = "cycle-at-point";
ename = "cycle-at-point";
- version = "0.2.0.20260111.124011";
+ version = "0.2.0.20260502.92709";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/cycle-at-point-0.2.0.20260111.124011.tar";
- sha256 = "0jnd8r1xpyyklbpvy18mxz3slcl0jz6zi41vymzgmv9a6xig5cvs";
+ url = "https://elpa.nongnu.org/nongnu-devel/cycle-at-point-0.2.0.20260502.92709.tar";
+ sha256 = "0nyk8p55xjkfzxyrpgz7dy2k7scgdi3h4x9hiw1xcrbcfxnlaxks";
};
packageRequires = [ recomplete ];
meta = {
@@ -892,10 +892,10 @@
elpaBuild {
pname = "dart-mode";
ename = "dart-mode";
- version = "1.0.7.0.20251203.195437";
+ version = "1.0.7.0.20260619.52";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/dart-mode-1.0.7.0.20251203.195437.tar";
- sha256 = "1l4p4ybw69ni2vx016bi2nz3kjqziy6nk3vv1nr9gjbslpmkck5k";
+ url = "https://elpa.nongnu.org/nongnu-devel/dart-mode-1.0.7.0.20260619.52.tar";
+ sha256 = "114dh5k5b1b7gkbqn96k2ncgsav05hcgz6304br2czkdx0xcacid";
};
packageRequires = [ ];
meta = {
@@ -914,10 +914,10 @@
elpaBuild {
pname = "datetime";
ename = "datetime";
- version = "0.10.3snapshot0.20250203.204701";
+ version = "0.10.3snapshot0.20250203.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/datetime-0.10.3snapshot0.20250203.204701.tar";
- sha256 = "0l9z5bqbxbn456rin27x4zfa5pjvqjr2vhzxpgssrndm7bprm614";
+ url = "https://elpa.nongnu.org/nongnu-devel/datetime-0.10.3snapshot0.20250203.0.tar";
+ sha256 = "0d3vi2fg17rv4id78jdq9xv44skc1ndkajq9plf6x9bsgbbf3mcz";
};
packageRequires = [ extmap ];
meta = {
@@ -978,10 +978,10 @@
elpaBuild {
pname = "devil";
ename = "devil";
- version = "0.7.0beta3.0.20240129.2809";
+ version = "0.7.0beta3.0.20240129.11";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/devil-0.7.0beta3.0.20240129.2809.tar";
- sha256 = "1fhvp1kvvli5g9a3575bsa8zyfnf1q0p5wn15819zvncjp1912nl";
+ url = "https://elpa.nongnu.org/nongnu-devel/devil-0.7.0beta3.0.20240129.11.tar";
+ sha256 = "174wkr002wif8h62dlj34c5h7a1a52zs097n8flncm014l6m3y3i";
};
packageRequires = [ ];
meta = {
@@ -999,10 +999,10 @@
elpaBuild {
pname = "diff-ansi";
ename = "diff-ansi";
- version = "0.2.0.20260108.151229";
+ version = "0.2.0.20260713.62";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/diff-ansi-0.2.0.20260108.151229.tar";
- sha256 = "0b1i031fyjszinpngz804di4fng6i71pcmckq05z75p3gjjfyx2j";
+ url = "https://elpa.nongnu.org/nongnu-devel/diff-ansi-0.2.0.20260713.62.tar";
+ sha256 = "0gxf2cjk96c5kx80qsn4w9ckg738zis2hhvbp26dgzkppmwxdwyk";
};
packageRequires = [ ];
meta = {
@@ -1021,10 +1021,10 @@
elpaBuild {
pname = "dirvish";
ename = "dirvish";
- version = "2.3.0.0.20250504.80741";
+ version = "2.3.0.0.20260716.9";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/dirvish-2.3.0.0.20250504.80741.tar";
- sha256 = "0h8ap8bnqy2czvgkc71l49ms3kwk8lciz0ydzi2yy5xgh5pvs71k";
+ url = "https://elpa.nongnu.org/nongnu-devel/dirvish-2.3.0.0.20260716.9.tar";
+ sha256 = "0yr5x846v1zynyacfpgn8zhhrzsw5qw3fqnr1w9cscljzfwlajs8";
};
packageRequires = [ compat ];
meta = {
@@ -1084,10 +1084,10 @@
elpaBuild {
pname = "dracula-theme";
ename = "dracula-theme";
- version = "1.8.3.0.20260224.145537";
+ version = "1.8.3.0.20260701.10";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/dracula-theme-1.8.3.0.20260224.145537.tar";
- sha256 = "0g83cgcackysjh5x35j0vniqyysk1lgijk0mhmgnwnhm2fji1b74";
+ url = "https://elpa.nongnu.org/nongnu-devel/dracula-theme-1.8.3.0.20260701.10.tar";
+ sha256 = "0m26r1swffj2ax3rl3yikgqi2rq796y8vwazisfsb1lsx06hwyyn";
};
packageRequires = [ ];
meta = {
@@ -1256,10 +1256,10 @@
elpaBuild {
pname = "eldoc-mouse";
ename = "eldoc-mouse";
- version = "3.0.7.0.20260402.102509";
+ version = "3.0.8.0.20260612.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/eldoc-mouse-3.0.7.0.20260402.102509.tar";
- sha256 = "1frp7dkqf1wzlfijlqra1himvl5qba0cj3s172kh8yyncpvjvnqj";
+ url = "https://elpa.nongnu.org/nongnu-devel/eldoc-mouse-3.0.8.0.20260612.0.tar";
+ sha256 = "0w0c30vxqbca8zgj6zql4lxqfj2nz1xh9lcllzz09k2pydki0f4n";
};
packageRequires = [
eglot
@@ -1297,6 +1297,56 @@
};
}
) { };
+ elfeed = callPackage (
+ {
+ compat,
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "elfeed";
+ ename = "elfeed";
+ version = "4.1.0.0.20260714.9";
+ src = fetchurl {
+ url = "https://elpa.nongnu.org/nongnu-devel/elfeed-4.1.0.0.20260714.9.tar";
+ sha256 = "05y0j3hmz1ch2fsv4gryf6d4ygk1xc5vh6zi5fn7ydyxkp49pnqr";
+ };
+ packageRequires = [ compat ];
+ meta = {
+ homepage = "https://elpa.nongnu.org/nongnu-devel/elfeed.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
+ elfeed-web = callPackage (
+ {
+ compat,
+ elfeed,
+ elpaBuild,
+ fetchurl,
+ lib,
+ simple-httpd,
+ }:
+ elpaBuild {
+ pname = "elfeed-web";
+ ename = "elfeed-web";
+ version = "4.0.0.0.20260628.4";
+ src = fetchurl {
+ url = "https://elpa.nongnu.org/nongnu-devel/elfeed-web-4.0.0.0.20260628.4.tar";
+ sha256 = "0vwd5k1h47xcj6jz5wqcppm9cv2ywiliq4x3mszbharqklw83wmx";
+ };
+ packageRequires = [
+ compat
+ elfeed
+ simple-httpd
+ ];
+ meta = {
+ homepage = "https://elpa.nongnu.org/nongnu-devel/elfeed-web.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
elixir-mode = callPackage (
{
elpaBuild,
@@ -1348,10 +1398,10 @@
elpaBuild {
pname = "emacsql";
ename = "emacsql";
- version = "4.3.6.0.20260401.122028";
+ version = "4.4.1.0.20260601.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/emacsql-4.3.6.0.20260401.122028.tar";
- sha256 = "0n9m33wlygpdj8id31sfxkj328j1dzf1gzkwkvr99ncvcn6qr0l6";
+ url = "https://elpa.nongnu.org/nongnu-devel/emacsql-4.4.1.0.20260601.0.tar";
+ sha256 = "0fnj6ysv7a0pwcklr9rdb1fybfpv0z6gw60r8jgjgb0y2j4204rz";
};
packageRequires = [ ];
meta = {
@@ -1381,6 +1431,27 @@
};
}
) { };
+ eprolog = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "eprolog";
+ ename = "eprolog";
+ version = "0.3.2.0.20260308.150317";
+ src = fetchurl {
+ url = "https://elpa.nongnu.org/nongnu-devel/eprolog-0.3.2.0.20260308.150317.tar";
+ sha256 = "0d5y5dz602npmfxpp9cbrg5dp6axb97v8v9nagindkmh3m7yymkz";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.nongnu.org/nongnu-devel/eprolog.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
esxml = callPackage (
{
cl-lib ? null,
@@ -1415,10 +1486,10 @@
elpaBuild {
pname = "evil";
ename = "evil";
- version = "1.15.0.0.20251108.13841";
+ version = "1.15.0.0.20260603.296";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/evil-1.15.0.0.20251108.13841.tar";
- sha256 = "0vh9pmwsapdg2pn1cnp03jv9y35ddi57niwacrikn12g7niwh8jn";
+ url = "https://elpa.nongnu.org/nongnu-devel/evil-1.15.0.0.20260603.296.tar";
+ sha256 = "08l0w089647g8h61wfpcjs0zwcrx3dxjp14shdw4k7p0g6ijrdxs";
};
packageRequires = [
cl-lib
@@ -1479,6 +1550,28 @@
};
}
) { };
+ evil-collection = callPackage (
+ {
+ elpaBuild,
+ evil,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "evil-collection";
+ ename = "evil-collection";
+ version = "3.0.0.0.20260719.2";
+ src = fetchurl {
+ url = "https://elpa.nongnu.org/nongnu-devel/evil-collection-3.0.0.0.20260719.2.tar";
+ sha256 = "0xccbmkxzqdw5nqzaink8yab4ga3j0cg7djgiqrzdcd2cc44vqgx";
+ };
+ packageRequires = [ evil ];
+ meta = {
+ homepage = "https://elpa.nongnu.org/nongnu-devel/evil-collection.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
evil-emacs-cursor-model-mode = callPackage (
{
elpaBuild,
@@ -1685,10 +1778,10 @@
elpaBuild {
pname = "evil-nerd-commenter";
ename = "evil-nerd-commenter";
- version = "3.6.1.0.20240216.114656";
+ version = "3.6.1.0.20260507.41457";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/evil-nerd-commenter-3.6.1.0.20240216.114656.tar";
- sha256 = "0wav3c5k2iz4xzrkwj7nj3xg5zp9nldynxag2gl7p3nkz4scg49r";
+ url = "https://elpa.nongnu.org/nongnu-devel/evil-nerd-commenter-3.6.1.0.20260507.41457.tar";
+ sha256 = "023gd3br1i6pvbnan83c9825jfc20q1w5xn472qsi0035lmi6wj2";
};
packageRequires = [ ];
meta = {
@@ -1703,16 +1796,20 @@
evil,
fetchurl,
lib,
+ shift-number,
}:
elpaBuild {
pname = "evil-numbers";
ename = "evil-numbers";
- version = "0.7.0.20260102.82951";
+ version = "0.8.0.20260103.85055";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/evil-numbers-0.7.0.20260102.82951.tar";
- sha256 = "03nxzdaxnlfmn6w3sgwixmqqv275rskxkjc93zwac55i9h3xn0kb";
+ url = "https://elpa.nongnu.org/nongnu-devel/evil-numbers-0.8.0.20260103.85055.tar";
+ sha256 = "1kr89paj83kiy27yd9rbq0xgda7xrifnxh5nyv3lik4sqd8ds7sm";
};
- packageRequires = [ evil ];
+ packageRequires = [
+ evil
+ shift-number
+ ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu-devel/evil-numbers.html";
license = lib.licenses.free;
@@ -1729,10 +1826,10 @@
elpaBuild {
pname = "evil-surround";
ename = "evil-surround";
- version = "1.0.4.0.20240325.85222";
+ version = "1.0.4.0.20260607.25";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/evil-surround-1.0.4.0.20240325.85222.tar";
- sha256 = "0ji4pp9dp0284km585a3iay60m9v0xzsn42g3fw431vadbs0y5ym";
+ url = "https://elpa.nongnu.org/nongnu-devel/evil-surround-1.0.4.0.20260607.25.tar";
+ sha256 = "0q14djyjciywxh7sb4ljgwfv09233nr2jprkk5h4pjn4a3ymsjv3";
};
packageRequires = [ evil ];
meta = {
@@ -1798,10 +1895,10 @@
elpaBuild {
pname = "exec-path-from-shell";
ename = "exec-path-from-shell";
- version = "2.2.0.20260423.183347";
+ version = "2.2.0.20260619.14";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/exec-path-from-shell-2.2.0.20260423.183347.tar";
- sha256 = "0s80hah6795p2k97qpnqj3baaw1cy9c54g38vbcczq4mn8faimk6";
+ url = "https://elpa.nongnu.org/nongnu-devel/exec-path-from-shell-2.2.0.20260619.14.tar";
+ sha256 = "197f0zlb9lkllssmzvc3zllsxn7i1glpvsm75aa54hylzyfiys1j";
};
packageRequires = [ ];
meta = {
@@ -1819,10 +1916,10 @@
elpaBuild {
pname = "extmap";
ename = "extmap";
- version = "1.3.1snapshot0.20250203.193959";
+ version = "1.3.1snapshot0.20250203.2";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/extmap-1.3.1snapshot0.20250203.193959.tar";
- sha256 = "16sfa2zv0g7dz1zflg848dh643c8vfrb93blqvnd1vmlmf3bsyqy";
+ url = "https://elpa.nongnu.org/nongnu-devel/extmap-1.3.1snapshot0.20250203.2.tar";
+ sha256 = "07davhhx3nq15b3i7mfckxy9cnsq12y5cds8m0m4bw61sz8svxvi";
};
packageRequires = [ ];
meta = {
@@ -1841,10 +1938,10 @@
elpaBuild {
pname = "fedi";
ename = "fedi";
- version = "0.3.0.20260223.132625";
+ version = "0.4.0.20260509.80113";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/fedi-0.3.0.20260223.132625.tar";
- sha256 = "15cvwfyvixac3vvfjnmz0fvfzk5iq9sndnryzi3zlp3njjjds0wv";
+ url = "https://elpa.nongnu.org/nongnu-devel/fedi-0.4.0.20260509.80113.tar";
+ sha256 = "0c3zn9cb320zqy3p339npzlhp8z7jwd31l8p77hix6cnczx66z7y";
};
packageRequires = [ markdown-mode ];
meta = {
@@ -1866,10 +1963,10 @@
elpaBuild {
pname = "fj";
ename = "fj";
- version = "0.34.0.20260327.90645";
+ version = "0.37.0.20260509.74153";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/fj-0.34.0.20260327.90645.tar";
- sha256 = "0wigq0746npxkbqkqdarw4l89vk04ywd7cx01irc3v7ci9s192xk";
+ url = "https://elpa.nongnu.org/nongnu-devel/fj-0.37.0.20260509.74153.tar";
+ sha256 = "0fwklcgc11lynkfp00wwjrsbdkxsdhi5vis2qcmlcnh5l4lwmi7y";
};
packageRequires = [
fedi
@@ -1883,6 +1980,27 @@
};
}
) { };
+ flamegraph = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "flamegraph";
+ ename = "flamegraph";
+ version = "0.2.0.20260609.2";
+ src = fetchurl {
+ url = "https://elpa.nongnu.org/nongnu-devel/flamegraph-0.2.0.20260609.2.tar";
+ sha256 = "09akb8akgvrh8gigchalkb29ipfa90b7r8li9vxdh7d7ginq5mw6";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.nongnu.org/nongnu-devel/flamegraph.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
flx = callPackage (
{
cl-lib ? null,
@@ -1941,10 +2059,10 @@
elpaBuild {
pname = "flycheck";
ename = "flycheck";
- version = "36.0.0.20260320.171504";
+ version = "37.0.0.20260720.8";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/flycheck-36.0.0.20260320.171504.tar";
- sha256 = "1pzwhry986dfkvibfdqwb6nllmmn2yc3kpzgd046jnyq25xikgig";
+ url = "https://elpa.nongnu.org/nongnu-devel/flycheck-37.0.0.20260720.8.tar";
+ sha256 = "1d7pb6kqz5s862d43l0ywzvhcd15xj2y8ixgc9zy42yz3rwnqlbj";
};
packageRequires = [ seq ];
meta = {
@@ -2142,10 +2260,10 @@
elpaBuild {
pname = "geiser";
ename = "geiser";
- version = "0.32.0.20251220.230156";
+ version = "0.33.1.0.20260718.4";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/geiser-0.32.0.20251220.230156.tar";
- sha256 = "1a6l6b659h9mf0dqc6yvq2pc75x3rw3ysn6k9ap5pyrsdz7286f5";
+ url = "https://elpa.nongnu.org/nongnu-devel/geiser-0.33.1.0.20260718.4.tar";
+ sha256 = "14sipclbj37v0f0yc1pk0fl1p704f1gzpd3r21zyh3wkgfj2vjf5";
};
packageRequires = [ project ];
meta = {
@@ -2186,10 +2304,10 @@
elpaBuild {
pname = "geiser-chibi";
ename = "geiser-chibi";
- version = "0.17.0.20240521.155242";
+ version = "0.17.0.20260706.3";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/geiser-chibi-0.17.0.20240521.155242.tar";
- sha256 = "0xiaikj274ypfj546snxpi6h30jlc9hifhnw8ljj1zxsafr1wzqq";
+ url = "https://elpa.nongnu.org/nongnu-devel/geiser-chibi-0.17.0.20260706.3.tar";
+ sha256 = "08rhpfr9zsgdmz8j4f8va07ww7lk9kbxcpnm3wxjl940n56nhji9";
};
packageRequires = [ geiser ];
meta = {
@@ -2275,10 +2393,10 @@
elpaBuild {
pname = "geiser-guile";
ename = "geiser-guile";
- version = "0.28.3.0.20240920.3540";
+ version = "0.28.5.0.20260516.1909";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/geiser-guile-0.28.3.0.20240920.3540.tar";
- sha256 = "1ijrhz86nva194qsdch2zm9v4bzdppcg3vslnh03ss4f6qkcrfzz";
+ url = "https://elpa.nongnu.org/nongnu-devel/geiser-guile-0.28.5.0.20260516.1909.tar";
+ sha256 = "1pvpji1py4ghxkpvxf08fpdg8j37qcn2lc8dc9i47b7b9w5x9bpg";
};
packageRequires = [
geiser
@@ -2418,10 +2536,10 @@
elpaBuild {
pname = "git-modes";
ename = "git-modes";
- version = "1.4.8.0.20260101.183425";
+ version = "1.5.0.0.20260601.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/git-modes-1.4.8.0.20260101.183425.tar";
- sha256 = "1lw8cwrg66gw4pxbf6kwzglddc9jszz55nw1z0hpaiaz24yi17lg";
+ url = "https://elpa.nongnu.org/nongnu-devel/git-modes-1.5.0.0.20260601.0.tar";
+ sha256 = "1wwqr0w7vdspv0lkznh6srb0mil0ydirr7mb6wy1yacpz5mlzvwz";
};
packageRequires = [ compat ];
meta = {
@@ -2512,10 +2630,10 @@
elpaBuild {
pname = "gnuplot";
ename = "gnuplot";
- version = "0.11.0.20260330.71827";
+ version = "0.12.0.20260628.3";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/gnuplot-0.11.0.20260330.71827.tar";
- sha256 = "16m7jnsd9rv7f7fnbcm8sbphb21sl63igpzcbki27rcvhp3r5y4i";
+ url = "https://elpa.nongnu.org/nongnu-devel/gnuplot-0.12.0.20260628.3.tar";
+ sha256 = "1gmivwm8xv4x3gab3xnlxnjsqxivb9xdkk6gb8nc6a3rl87py19w";
};
packageRequires = [ compat ];
meta = {
@@ -2533,10 +2651,10 @@
elpaBuild {
pname = "go-mode";
ename = "go-mode";
- version = "1.6.0.0.20250311.20239";
+ version = "1.6.0.0.20260529.24";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/go-mode-1.6.0.0.20250311.20239.tar";
- sha256 = "1viwxqbp6jdhbmapjgcgrjyrzn4m2r68b5vb0814y3w4gi55rzgq";
+ url = "https://elpa.nongnu.org/nongnu-devel/go-mode-1.6.0.0.20260529.24.tar";
+ sha256 = "0m69khwj17fp6fhl6xgqsmxqc3729x679rpxph7gv5hgdpqks7ha";
};
packageRequires = [ ];
meta = {
@@ -2619,10 +2737,10 @@
elpaBuild {
pname = "gptel";
ename = "gptel";
- version = "0.9.9.4.0.20260422.5643";
+ version = "0.9.9.5.0.20260715.65";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/gptel-0.9.9.4.0.20260422.5643.tar";
- sha256 = "07drqy9aksqsvfgg7a6r7bp430qccs6bngrs367dp0vr46mx6kw0";
+ url = "https://elpa.nongnu.org/nongnu-devel/gptel-0.9.9.5.0.20260715.65.tar";
+ sha256 = "0ax0i8v68ibx4mh6pyz8lqjrkjw7zz9chwkricmjkcn7kha3l6l2";
};
packageRequires = [
compat
@@ -2643,10 +2761,10 @@
elpaBuild {
pname = "graphql-mode";
ename = "graphql-mode";
- version = "1.0.0.0.20260330.140853";
+ version = "1.0.0.0.20260524.82344";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/graphql-mode-1.0.0.0.20260330.140853.tar";
- sha256 = "07rwy23fglwq5h8x16syvgl9nb0lg5gqfx4d1qqls0c6gha7pal1";
+ url = "https://elpa.nongnu.org/nongnu-devel/graphql-mode-1.0.0.0.20260524.82344.tar";
+ sha256 = "0zr62g3jhf47d7cjjcx3a8m1kqp4h14k4k7jdqqiivg6hc1k43qv";
};
packageRequires = [ ];
meta = {
@@ -2750,10 +2868,10 @@
elpaBuild {
pname = "haskell-mode";
ename = "haskell-mode";
- version = "17.5.0.20260206.105045";
+ version = "17.5.0.20260619.67";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/haskell-mode-17.5.0.20260206.105045.tar";
- sha256 = "012w356crya0ik9p16xlkykk1xv9yk4w3k029xrmjhjw1jqvkybd";
+ url = "https://elpa.nongnu.org/nongnu-devel/haskell-mode-17.5.0.20260619.67.tar";
+ sha256 = "1v4ksswhi8d17did2fz3j3yqm30jd0yqj83h2093dqnhyphha9dl";
};
packageRequires = [ ];
meta = {
@@ -2816,10 +2934,10 @@
elpaBuild {
pname = "helm";
ename = "helm";
- version = "4.0.6.0.20260424.61638";
+ version = "4.0.7.0.20260716.25";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/helm-4.0.6.0.20260424.61638.tar";
- sha256 = "1h45ffmj2myiv1yg0gy1kfxwky41xfzdzy4vhzc67w1a6g6kh9jq";
+ url = "https://elpa.nongnu.org/nongnu-devel/helm-4.0.7.0.20260716.25.tar";
+ sha256 = "0g3qmffjwfyrw3iqwrp2ai8pm7q6wan2x0w62vlbacvkziqy7vgf";
};
packageRequires = [
helm-core
@@ -2841,10 +2959,10 @@
elpaBuild {
pname = "helm-core";
ename = "helm-core";
- version = "4.0.6.0.20260424.61638";
+ version = "4.0.7.0.20260716.25";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/helm-core-4.0.6.0.20260424.61638.tar";
- sha256 = "1484qsigbybnxlcb0jrx8v62fa7dqv7szia7p1lghp3q76cjlfv7";
+ url = "https://elpa.nongnu.org/nongnu-devel/helm-core-4.0.7.0.20260716.25.tar";
+ sha256 = "0qrcc87av7s3xmrl9290rsjljlh68hdh4wyrfjk0g988kpdpbyqx";
};
packageRequires = [ async ];
meta = {
@@ -2974,10 +3092,10 @@
elpaBuild {
pname = "hyperdrive";
ename = "hyperdrive";
- version = "0.6pre0.20251120.145618";
+ version = "0.6pre0.20251120.26";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/hyperdrive-0.6pre0.20251120.145618.tar";
- sha256 = "1s57c6m6fh593b9ax5skc5v1k3l0w983iq6mp3vx2a6g276qa44l";
+ url = "https://elpa.nongnu.org/nongnu-devel/hyperdrive-0.6pre0.20251120.26.tar";
+ sha256 = "0j8zglxc2bjvbfdzw9lzy5lksda6hq6xjwcmiyg489yfrx1n5gk5";
};
packageRequires = [
compat
@@ -3052,10 +3170,10 @@
elpaBuild {
pname = "idris-mode";
ename = "idris-mode";
- version = "1.1.0.0.20260209.110723";
+ version = "1.1.0.0.20260506.203306";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/idris-mode-1.1.0.0.20260209.110723.tar";
- sha256 = "19rw6k40qkn4b11vhr95w71rdfqdmrr27ga8vdj7imb812wcdqyy";
+ url = "https://elpa.nongnu.org/nongnu-devel/idris-mode-1.1.0.0.20260506.203306.tar";
+ sha256 = "11mcszs9l8cw90v1kp4dnsjw3y86dspbjbb87fz7za8yrizki0id";
};
packageRequires = [
cl-lib
@@ -3098,10 +3216,10 @@
elpaBuild {
pname = "inf-clojure";
ename = "inf-clojure";
- version = "3.4.0.0.20260227.65854";
+ version = "3.4.0.0.20260507.60144";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/inf-clojure-3.4.0.0.20260227.65854.tar";
- sha256 = "1115nzzddmwz8rxvln6lgn0halnxjdlf6cgjprfnjm60ajfa861h";
+ url = "https://elpa.nongnu.org/nongnu-devel/inf-clojure-3.4.0.0.20260507.60144.tar";
+ sha256 = "031kf4yqnvggrk9flxcfwgz3ps2wpl6sxsvdkwxymdaahywv5yp2";
};
packageRequires = [ clojure-mode ];
meta = {
@@ -3161,10 +3279,10 @@
elpaBuild {
pname = "isl";
ename = "isl";
- version = "1.6.0.20260414.62054";
+ version = "1.7.0.20260524.35203";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/isl-1.6.0.20260414.62054.tar";
- sha256 = "149fcgwl3r5wiw8zwb1cgy4g96nv90a8wpjk8qh0dgcdz1vgsiqq";
+ url = "https://elpa.nongnu.org/nongnu-devel/isl-1.7.0.20260524.35203.tar";
+ sha256 = "1hr6nngd0z266vwz2h76xzvjx5zgy8ljjf04q6338kmzb16m24wr";
};
packageRequires = [ ];
meta = {
@@ -3225,17 +3343,21 @@
elpaBuild,
fetchurl,
fsm,
+ keymap-popup,
lib,
}:
elpaBuild {
pname = "jabber";
ename = "jabber";
- version = "0.10.5.0.20260423.192938";
+ version = "0.12.2.0.20260715.2";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/jabber-0.10.5.0.20260423.192938.tar";
- sha256 = "1q79iv4znishj6rdz1m76r0c8h72i2g47xfh6xfw2gqxbkkyilv3";
+ url = "https://elpa.nongnu.org/nongnu-devel/jabber-0.12.2.0.20260715.2.tar";
+ sha256 = "1d07y9qax62hgyxmcyfdk8w30y0p7qn4x0al2qzh1k0slvw12yjy";
};
- packageRequires = [ fsm ];
+ packageRequires = [
+ fsm
+ keymap-popup
+ ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu-devel/jabber.html";
license = lib.licenses.free;
@@ -3314,10 +3436,10 @@
elpaBuild {
pname = "julia-mode";
ename = "julia-mode";
- version = "1.1.0.0.20260226.104209";
+ version = "1.1.0.0.20260529.7";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/julia-mode-1.1.0.0.20260226.104209.tar";
- sha256 = "0ks6a1h9mfcc5fjjs6dwg0gv4w5l56kifxl59gpxfn3ahca3y2z0";
+ url = "https://elpa.nongnu.org/nongnu-devel/julia-mode-1.1.0.0.20260529.7.tar";
+ sha256 = "0h0aahyw658zqkzk7h39lsc5vmab4b9jzkqrmwn3q5zgnqy5nfcr";
};
packageRequires = [ ];
meta = {
@@ -3329,6 +3451,7 @@
keycast = callPackage (
{
compat,
+ cond-let,
elpaBuild,
fetchurl,
lib,
@@ -3336,12 +3459,15 @@
elpaBuild {
pname = "keycast";
ename = "keycast";
- version = "1.4.7.0.20260101.183551";
+ version = "1.4.8.0.20260601.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/keycast-1.4.7.0.20260101.183551.tar";
- sha256 = "1p0kzw0ciygp5xgyv2c7z9byn7x1x8zdrd7x3mlizjh3mpmwyl3k";
+ url = "https://elpa.nongnu.org/nongnu-devel/keycast-1.4.8.0.20260601.0.tar";
+ sha256 = "1b27wp1y2c0sh29f7chpks3zmdxksg8v8xyy9r62r7mdy2aylm2z";
};
- packageRequires = [ compat ];
+ packageRequires = [
+ compat
+ cond-let
+ ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu-devel/keycast.html";
license = lib.licenses.free;
@@ -3380,10 +3506,10 @@
elpaBuild {
pname = "lem";
ename = "lem";
- version = "0.24.0.20250806.92416";
+ version = "0.25.0.20260509.75856";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/lem-0.24.0.20250806.92416.tar";
- sha256 = "0hamh1xvwir0dhf91vn0fch39hxs7k443q4x9anfv44006fsgd3f";
+ url = "https://elpa.nongnu.org/nongnu-devel/lem-0.25.0.20260509.75856.tar";
+ sha256 = "0l6kg0y6y268hgyifxbkwjx1wk1d5d6wq86kykfq9fngwy8d5359";
};
packageRequires = [
fedi
@@ -3405,10 +3531,10 @@
elpaBuild {
pname = "llama";
ename = "llama";
- version = "1.0.4.0.20260301.125328";
+ version = "1.0.5.0.20260601.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/llama-1.0.4.0.20260301.125328.tar";
- sha256 = "04g5qakdxc4dfarkiv4d4jmfw609hbfxad1582aykfrzqngma2sd";
+ url = "https://elpa.nongnu.org/nongnu-devel/llama-1.0.5.0.20260601.0.tar";
+ sha256 = "0fv7agjcfj59wbis1sw175j6v36zdg0qp84dkv1l3ql6fixcwqh1";
};
packageRequires = [ compat ];
meta = {
@@ -3429,10 +3555,10 @@
elpaBuild {
pname = "logview";
ename = "logview";
- version = "0.19.4snapshot0.20260218.201306";
+ version = "0.19.4snapshot0.20260218.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/logview-0.19.4snapshot0.20260218.201306.tar";
- sha256 = "1f49zs4w4wmn7famsc3ay8n7834c8zk2z3xmw74sk3744ygrc8d3";
+ url = "https://elpa.nongnu.org/nongnu-devel/logview-0.19.4snapshot0.20260218.1.tar";
+ sha256 = "1z9qplw6gbkvq5dmh2pwiwjva36bzy2dcfc4xrc79l1m0c0nffks";
};
packageRequires = [
compat
@@ -3458,10 +3584,10 @@
elpaBuild {
pname = "loopy";
ename = "loopy";
- version = "0.15.0.0.20260312.10626";
+ version = "0.16.1.0.20260718.10";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/loopy-0.15.0.0.20260312.10626.tar";
- sha256 = "1s16v7g2lszhq3qxp9fyfqk0f8l1x4599zgvbnplnamll0jsi7z3";
+ url = "https://elpa.nongnu.org/nongnu-devel/loopy-0.16.1.0.20260718.10.tar";
+ sha256 = "1gcw2if57rf30n0clxjfg372zb41nkrbx2q1ygh792l1cxlhbr51";
};
packageRequires = [
compat
@@ -3486,10 +3612,10 @@
elpaBuild {
pname = "loopy-dash";
ename = "loopy-dash";
- version = "0.13.0.0.20260312.12155";
+ version = "0.13.0.0.20260718.11";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/loopy-dash-0.13.0.0.20260312.12155.tar";
- sha256 = "1rg98wgrh5s6slafz8g8piazz04pa6fwiymgpic6hcrmf842fgpy";
+ url = "https://elpa.nongnu.org/nongnu-devel/loopy-dash-0.13.0.0.20260718.11.tar";
+ sha256 = "0ph9w0505yljnaiykmas8hjfj0d4rnbxv7xdw3j5aglffshl626z";
};
packageRequires = [
dash
@@ -3585,10 +3711,10 @@
elpaBuild {
pname = "magit";
ename = "magit";
- version = "4.5.0.0.20260422.220622";
+ version = "4.6.0.0.20260718.46";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/magit-4.5.0.0.20260422.220622.tar";
- sha256 = "1sm2ixy8hnamzvapy4i2j58ydharg47xb3s1981yr2d948dl2kxd";
+ url = "https://elpa.nongnu.org/nongnu-devel/magit-4.6.0.0.20260718.46.tar";
+ sha256 = "1ln6p4y19z2j2x9hj63v4p5d9kl83vzw993bwirbljf59gwn60qz";
};
packageRequires = [
compat
@@ -3618,10 +3744,10 @@
elpaBuild {
pname = "magit-section";
ename = "magit-section";
- version = "4.5.0.0.20260422.220622";
+ version = "4.6.0.0.20260718.46";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/magit-section-4.5.0.0.20260422.220622.tar";
- sha256 = "13hzbc26wi6llab43gy8m6jpnm5faji7bqk5xlaxwinfqhzjfb2a";
+ url = "https://elpa.nongnu.org/nongnu-devel/magit-section-4.6.0.0.20260718.46.tar";
+ sha256 = "02glfja6slz17qv3qzrwjz32a5j3yqj135z430nm2bz015c4k2gv";
};
packageRequires = [
compat
@@ -3644,10 +3770,10 @@
elpaBuild {
pname = "markdown-mode";
ename = "markdown-mode";
- version = "2.9alpha0.20260423.150805";
+ version = "2.9alpha0.20260425.11";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/markdown-mode-2.9alpha0.20260423.150805.tar";
- sha256 = "1ap384fyxbny1pn59grjj6x8y29hcfl1vlhim4r177j2killr4sh";
+ url = "https://elpa.nongnu.org/nongnu-devel/markdown-mode-2.9alpha0.20260425.11.tar";
+ sha256 = "0gfaxz089cm7rzwdz9dva4kz8i1cndlq67svcb0fnyca03p6lgkr";
};
packageRequires = [ ];
meta = {
@@ -3667,10 +3793,10 @@
elpaBuild {
pname = "mastodon";
ename = "mastodon";
- version = "2.0.16.0.20260406.85635";
+ version = "2.0.17.0.20260509.74935";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/mastodon-2.0.16.0.20260406.85635.tar";
- sha256 = "0wlb1pd08m0bhn5fjxynhq285z7c210k5i8g08wj7b5gsjxmqqkx";
+ url = "https://elpa.nongnu.org/nongnu-devel/mastodon-2.0.17.0.20260509.74935.tar";
+ sha256 = "1i656xma6mw8fis91fwvzz9c1fpihxcgpwx78vm10k939j1ghhpg";
};
packageRequires = [
persist
@@ -3742,10 +3868,10 @@
elpaBuild {
pname = "meow";
ename = "meow";
- version = "1.5.0.0.20250914.165407";
+ version = "1.5.0.0.20260714.67";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/meow-1.5.0.0.20250914.165407.tar";
- sha256 = "02wq0az10vqa7m55mga89aipjfqdwbw83rrf0xdyzc1f1r8841bm";
+ url = "https://elpa.nongnu.org/nongnu-devel/meow-1.5.0.0.20260714.67.tar";
+ sha256 = "1w91jlbpp37p4c11z15njvn8icd78hhwkldx70d6y28ngk14q9g3";
};
packageRequires = [ ];
meta = {
@@ -3784,10 +3910,10 @@
elpaBuild {
pname = "moe-theme";
ename = "moe-theme";
- version = "1.1.0.0.20260304.151933";
+ version = "1.1.0.0.20260515.84137";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/moe-theme-1.1.0.0.20260304.151933.tar";
- sha256 = "1chfka5hgda9bclgvlkvs76zn6w7ra4rqnsrhmn8bn6s9s1k8chj";
+ url = "https://elpa.nongnu.org/nongnu-devel/moe-theme-1.1.0.0.20260515.84137.tar";
+ sha256 = "0q8sdm7sd82xgas83z0i5rrjq26b9crvakr5iqdcms9pnckqkfl8";
};
packageRequires = [ ];
meta = {
@@ -3869,10 +3995,10 @@
elpaBuild {
pname = "nasm-mode";
ename = "nasm-mode";
- version = "1.1.1.0.20250320.164627";
+ version = "1.1.1.0.20260509.95321";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/nasm-mode-1.1.1.0.20250320.164627.tar";
- sha256 = "0dm1zg15q18v9y4mx2p8hdqvql4dikw8chkj3i3jb1jp9d0v2rf3";
+ url = "https://elpa.nongnu.org/nongnu-devel/nasm-mode-1.1.1.0.20260509.95321.tar";
+ sha256 = "0gp5mn9p9k647042nizvnzx0ns0fhlg9h266vzbkzpimhn8a7pp2";
};
packageRequires = [ ];
meta = {
@@ -3980,10 +4106,10 @@
elpaBuild {
pname = "opam-switch-mode";
ename = "opam-switch-mode";
- version = "1.8snapshot0.20230802.91729";
+ version = "1.8snapshot0.20230802.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/opam-switch-mode-1.8snapshot0.20230802.91729.tar";
- sha256 = "01ccpzlanc42na9hdm8f8ys4b1lsxqx5f2ks3ya3f5yr580amy1w";
+ url = "https://elpa.nongnu.org/nongnu-devel/opam-switch-mode-1.8snapshot0.20230802.1.tar";
+ sha256 = "11nvx2rp6zc4m78nkf5c9gbpfyrg68rkrwfvg6iqsga4aw4mr5z8";
};
packageRequires = [ ];
meta = {
@@ -4024,10 +4150,10 @@
elpaBuild {
pname = "org-contrib";
ename = "org-contrib";
- version = "0.8.0.20260221.192041";
+ version = "0.8.0.20260505.72437";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/org-contrib-0.8.0.20260221.192041.tar";
- sha256 = "15mrdfmj4nxqh7ayyc2nyhxak5ymfsa9ym8dl8gwjsc8xym9jidd";
+ url = "https://elpa.nongnu.org/nongnu-devel/org-contrib-0.8.0.20260505.72437.tar";
+ sha256 = "1qx4vnbqczn313pjx1fky78d83ixyr39807hr88sd81h98ggq61f";
};
packageRequires = [ org ];
meta = {
@@ -4162,10 +4288,10 @@
elpaBuild {
pname = "org-transclusion-http";
ename = "org-transclusion-http";
- version = "0.5pre0.20240630.140904";
+ version = "0.5pre0.20240630.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/org-transclusion-http-0.5pre0.20240630.140904.tar";
- sha256 = "1gkh5flmbj0gah8vbw6ghqagak220ljym8rsgpwmpxmqzwjhp5kp";
+ url = "https://elpa.nongnu.org/nongnu-devel/org-transclusion-http-0.5pre0.20240630.1.tar";
+ sha256 = "06cnyym38nrli2hb74g8qpwaajy3brg64sfkfr5rmbrqyqwlqspp";
};
packageRequires = [
org-transclusion
@@ -4205,20 +4331,22 @@
elpaBuild,
fetchurl,
lib,
+ llama,
magit,
org,
}:
elpaBuild {
pname = "orgit";
ename = "orgit";
- version = "2.1.2.0.20260301.125552";
+ version = "2.2.0.0.20260701.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/orgit-2.1.2.0.20260301.125552.tar";
- sha256 = "1yy549phcdkm6sn70bb92lm1yrfc1k1d716kcblmrl6p2vd450l7";
+ url = "https://elpa.nongnu.org/nongnu-devel/orgit-2.2.0.0.20260701.0.tar";
+ sha256 = "143w8vvgn9qfyfrdd8ccs4grpgnksbvjby9sb077ciqjnzimnx5d";
};
packageRequires = [
compat
cond-let
+ llama
magit
org
];
@@ -4259,10 +4387,10 @@
elpaBuild {
pname = "package-lint";
ename = "package-lint";
- version = "0.26.0.20251205.172019";
+ version = "0.26.0.20260619.23";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/package-lint-0.26.0.20251205.172019.tar";
- sha256 = "1b8pdsy3ym66vcf7f98prlr9hia710zxksyjsnf6r9mnddk2hry4";
+ url = "https://elpa.nongnu.org/nongnu-devel/package-lint-0.26.0.20260619.23.tar";
+ sha256 = "1a1lbk0ypicqwx6afavwfqwibp0pvyry84372s441bmd89xp072k";
};
packageRequires = [ let-alist ];
meta = {
@@ -4302,10 +4430,10 @@
elpaBuild {
pname = "page-break-lines";
ename = "page-break-lines";
- version = "0.15.0.20251121.212752";
+ version = "0.15.0.20260619.18";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/page-break-lines-0.15.0.20251121.212752.tar";
- sha256 = "0jzga42sd4p4nibbypi0f6427pfibdmpdjrcxnygvj8rc3wk1qv6";
+ url = "https://elpa.nongnu.org/nongnu-devel/page-break-lines-0.15.0.20260619.18.tar";
+ sha256 = "0x9b97wgxjvm42k9910fyfyd6ddwkh3fiwc5g7ix7izzxvsx511g";
};
packageRequires = [ ];
meta = {
@@ -4323,10 +4451,10 @@
elpaBuild {
pname = "paredit";
ename = "paredit";
- version = "27beta0.20241103.213959";
+ version = "27beta0.20241103.20";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/paredit-27beta0.20241103.213959.tar";
- sha256 = "00xb4lzkbfsz7f7pnsjfzbhigp4r2piimj7cplq7fxjl80j39lka";
+ url = "https://elpa.nongnu.org/nongnu-devel/paredit-27beta0.20241103.20.tar";
+ sha256 = "0dmqfcir64pb9nw577wqnh0g0d6kvvzc4v8hca4bcl17ipa0wjkz";
};
packageRequires = [ ];
meta = {
@@ -4344,10 +4472,10 @@
elpaBuild {
pname = "parseclj";
ename = "parseclj";
- version = "1.1.1.0.20231203.190509";
+ version = "1.1.1.0.20260526.2";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/parseclj-1.1.1.0.20231203.190509.tar";
- sha256 = "1h0lfy17613s7ls55ca77nqmc87v3kdwz1cvymzf2jp4xckgcsvw";
+ url = "https://elpa.nongnu.org/nongnu-devel/parseclj-1.1.1.0.20260526.2.tar";
+ sha256 = "0w6d1bvjdl1sg17iz77bf6n7j1k8j7x2jp7iki1r1lipi0ygfrmv";
};
packageRequires = [ ];
meta = {
@@ -4367,10 +4495,10 @@
elpaBuild {
pname = "parseedn";
ename = "parseedn";
- version = "1.2.1.0.20231203.190947";
+ version = "1.2.1.0.20260601.4";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/parseedn-1.2.1.0.20231203.190947.tar";
- sha256 = "0l8w1qr2nqngpcdcw1052dpx8q69xyz20mr2vvqayr5jmsgbvaad";
+ url = "https://elpa.nongnu.org/nongnu-devel/parseedn-1.2.1.0.20260601.4.tar";
+ sha256 = "0im6p06rh0vzqc5rdz5ydgqlys69dfcibkl4lz7isd3yndalwqwy";
};
packageRequires = [
map
@@ -4460,10 +4588,10 @@
elpaBuild {
pname = "pg";
ename = "pg";
- version = "0.65.0.20260421.212130";
+ version = "0.68.0.20260719.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/pg-0.65.0.20260421.212130.tar";
- sha256 = "13a88q1hx7mkc58a3ry5ym56kn5ppqr32j18n2ms69a5if301nhs";
+ url = "https://elpa.nongnu.org/nongnu-devel/pg-0.68.0.20260719.0.tar";
+ sha256 = "1awd1rsb95vka0raf8pdgpyj1mmx8s3nqqhgqcxs4h44v8fppyc6";
};
packageRequires = [ peg ];
meta = {
@@ -4481,10 +4609,10 @@
elpaBuild {
pname = "php-mode";
ename = "php-mode";
- version = "1.26.1.0.20251112.64638";
+ version = "1.26.1.0.20260719.80";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/php-mode-1.26.1.0.20251112.64638.tar";
- sha256 = "1vh7ynpbpps46jw5g9qwzzhyb4kll0dpppj5493kpjj3d87xclir";
+ url = "https://elpa.nongnu.org/nongnu-devel/php-mode-1.26.1.0.20260719.80.tar";
+ sha256 = "0wsid2y7lybyzk6kf61k9jc80vk3qz3bqsr2rgqy6hln5rv8g5q8";
};
packageRequires = [ ];
meta = {
@@ -4523,10 +4651,10 @@
elpaBuild {
pname = "popup";
ename = "popup";
- version = "0.5.9.0.20251231.162233";
+ version = "0.5.9.0.20260619.57";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/popup-0.5.9.0.20251231.162233.tar";
- sha256 = "0w6f04gx4k3das0p8hdx178ldvwwx8jbzns1n1kwwgc1i5x8fl51";
+ url = "https://elpa.nongnu.org/nongnu-devel/popup-0.5.9.0.20260619.57.tar";
+ sha256 = "01pjvxcsrvcp8j8xrh096x6c4fd94wwihvzphqcxmbrdkhvsgbhh";
};
packageRequires = [ ];
meta = {
@@ -4566,10 +4694,10 @@
elpaBuild {
pname = "projectile";
ename = "projectile";
- version = "2.10.0snapshot0.20260310.85858";
+ version = "3.3.0snapshot0.20260720.5";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/projectile-2.10.0snapshot0.20260310.85858.tar";
- sha256 = "081aljvri52f6l4jj9w16lv67gzihmw1afymzpr6c8ak5q02c5vd";
+ url = "https://elpa.nongnu.org/nongnu-devel/projectile-3.3.0snapshot0.20260720.5.tar";
+ sha256 = "1n26lg4i2k8nh5sw3yxjrjdmqdylmf0wdbijc0gkqzlafa3nh6qg";
};
packageRequires = [ compat ];
meta = {
@@ -4587,10 +4715,10 @@
elpaBuild {
pname = "proof-general";
ename = "proof-general";
- version = "4.6snapshot0.20260124.135141";
+ version = "4.6snapshot0.20260622.265";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/proof-general-4.6snapshot0.20260124.135141.tar";
- sha256 = "0wjjip6pph8s8j613md5j6f5ba40cl88v44i88s6s11ixrmd73sl";
+ url = "https://elpa.nongnu.org/nongnu-devel/proof-general-4.6snapshot0.20260622.265.tar";
+ sha256 = "1w3xbgzq9ibhdb4b06f658lvg79c0gyacicmaljp8pz3548dcly8";
};
packageRequires = [ ];
meta = {
@@ -4631,10 +4759,10 @@
elpaBuild {
pname = "racket-mode";
ename = "racket-mode";
- version = "1.0.20260303.123213";
+ version = "1.0.20260626.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/racket-mode-1.0.20260303.123213.tar";
- sha256 = "1iqbrsy5sivv9mm6sk48vj1mv4magh7bg7346i1a02plr0hg8qml";
+ url = "https://elpa.nongnu.org/nongnu-devel/racket-mode-1.0.20260626.0.tar";
+ sha256 = "19lbiv2wd1fs1jzr4j9q89j41hbhvlgfg9h48bjxki8dqs96d668";
};
packageRequires = [ compat ];
meta = {
@@ -4711,16 +4839,17 @@
elpaBuild,
fetchurl,
lib,
+ with-command-redo,
}:
elpaBuild {
pname = "recomplete";
ename = "recomplete";
- version = "0.2.0.20260403.113038";
+ version = "0.2.0.20260504.120143";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/recomplete-0.2.0.20260403.113038.tar";
- sha256 = "1mnd8d2hyfcjribvgq955sn0vm1265xs0jqc55rylwpkr4cff779";
+ url = "https://elpa.nongnu.org/nongnu-devel/recomplete-0.2.0.20260504.120143.tar";
+ sha256 = "0za4w629nwd1yra59qrn9j8ll9w8bl10skx9xk16lcli7g479j2s";
};
- packageRequires = [ ];
+ packageRequires = [ with-command-redo ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu-devel/recomplete.html";
license = lib.licenses.free;
@@ -4736,10 +4865,10 @@
elpaBuild {
pname = "reformatter";
ename = "reformatter";
- version = "0.8.0.20251121.93526";
+ version = "0.8.0.20260619.30";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/reformatter-0.8.0.20251121.93526.tar";
- sha256 = "11s23mply7aaa68y6miwzn6bld5m1rynk19l5jj2i1mwjk2plrlk";
+ url = "https://elpa.nongnu.org/nongnu-devel/reformatter-0.8.0.20260619.30.tar";
+ sha256 = "0lqigd7kr1xyzz3asy376ng5r9flda4l8njxpflgaly137ifzil3";
};
packageRequires = [ ];
meta = {
@@ -4778,10 +4907,10 @@
elpaBuild {
pname = "rfc-mode";
ename = "rfc-mode";
- version = "1.4.2.0.20260127.180740";
+ version = "1.4.2.0.20260617.2";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/rfc-mode-1.4.2.0.20260127.180740.tar";
- sha256 = "1i01x9k208zasil586q1jz28hdl5hpx964a6bgb6wwgf9ya79xlx";
+ url = "https://elpa.nongnu.org/nongnu-devel/rfc-mode-1.4.2.0.20260617.2.tar";
+ sha256 = "1kk70niw36vb2ldrclk34r6hy4555hcqkcbss2dn1mfbp9sf54d6";
};
packageRequires = [ ];
meta = {
@@ -4800,10 +4929,10 @@
elpaBuild {
pname = "rpm-spec-mode";
ename = "rpm-spec-mode";
- version = "0.16.0.20260423.74352";
+ version = "0.16.0.20260616.59";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/rpm-spec-mode-0.16.0.20260423.74352.tar";
- sha256 = "0pqq31x60g3ig7fmd4jh7kjz051m020kqs3pfpbiznwhjh8v63ad";
+ url = "https://elpa.nongnu.org/nongnu-devel/rpm-spec-mode-0.16.0.20260616.59.tar";
+ sha256 = "1yn9ihrbviyzyadh2yc6c85sjh94pdbp9h7jzlmmims6xhkmjk24";
};
packageRequires = [ compat ];
meta = {
@@ -4821,10 +4950,10 @@
elpaBuild {
pname = "rubocop";
ename = "rubocop";
- version = "0.7.0snapshot0.20210309.124149";
+ version = "0.7.0snapshot0.20210309.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/rubocop-0.7.0snapshot0.20210309.124149.tar";
- sha256 = "110rfww9kl2f8mj45nf1irwmwj4bfgla6glc52dhqi2ibvpik1h5";
+ url = "https://elpa.nongnu.org/nongnu-devel/rubocop-0.7.0snapshot0.20210309.1.tar";
+ sha256 = "0bggy6nc2wsng83df3vrqw8ygs5ys87i09511kl5d9xfhds7fx4j";
};
packageRequires = [ ];
meta = {
@@ -4842,10 +4971,10 @@
elpaBuild {
pname = "rust-mode";
ename = "rust-mode";
- version = "1.0.6.0.20260416.50503";
+ version = "1.0.6.0.20260618.49";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/rust-mode-1.0.6.0.20260416.50503.tar";
- sha256 = "12bcjfi7s7gisx31rwncvcs7j7m57kcs7rs5jfhmmpfsm8n24yba";
+ url = "https://elpa.nongnu.org/nongnu-devel/rust-mode-1.0.6.0.20260618.49.tar";
+ sha256 = "1ldkx6plsvaijibb4szyjs2b3hcl6svmbd8fn0j4015558shif4q";
};
packageRequires = [ ];
meta = {
@@ -4890,10 +5019,10 @@
elpaBuild {
pname = "scad-mode";
ename = "scad-mode";
- version = "98.0.0.20260330.71707";
+ version = "99.0.0.20260628.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/scad-mode-98.0.0.20260330.71707.tar";
- sha256 = "05fcw1wc6n0k9acjm6hmmidfp7pp0zgshwd63ijpz5d8l0plim29";
+ url = "https://elpa.nongnu.org/nongnu-devel/scad-mode-99.0.0.20260628.1.tar";
+ sha256 = "0pwx9vknh5w1m3cqp1081dq07061qwn7y292y0x85cvisak8hkcs";
};
packageRequires = [ compat ];
meta = {
@@ -4995,10 +5124,10 @@
elpaBuild {
pname = "sesman";
ename = "sesman";
- version = "0.3.3snapshot0.20240417.172323";
+ version = "0.3.3snapshot0.20260616.21";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/sesman-0.3.3snapshot0.20240417.172323.tar";
- sha256 = "1d4c3ymxas4xsjbkg7yj80x6lgly5rch7fvyvi495yvk3mzd9yzk";
+ url = "https://elpa.nongnu.org/nongnu-devel/sesman-0.3.3snapshot0.20260616.21.tar";
+ sha256 = "1nc2h58dcjwvi9kjqgmw79cvdc9i1ja8xkxs69hjhyq7y0wp85kf";
};
packageRequires = [ ];
meta = {
@@ -5028,6 +5157,28 @@
};
}
) { };
+ simple-httpd = callPackage (
+ {
+ compat,
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "simple-httpd";
+ ename = "simple-httpd";
+ version = "1.6.0.20260709.3";
+ src = fetchurl {
+ url = "https://elpa.nongnu.org/nongnu-devel/simple-httpd-1.6.0.20260709.3.tar";
+ sha256 = "0fyl4r8x0k074cb5h7agfm9zdpny68n0sm24wb9mc089fx9j9q5c";
+ };
+ packageRequires = [ compat ];
+ meta = {
+ homepage = "https://elpa.nongnu.org/nongnu-devel/simple-httpd.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
slime = callPackage (
{
elpaBuild,
@@ -5038,10 +5189,10 @@
elpaBuild {
pname = "slime";
ename = "slime";
- version = "2.32snapshot0.20260421.225639";
+ version = "2.32snapshot0.20260719.53";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/slime-2.32snapshot0.20260421.225639.tar";
- sha256 = "0gqj2nd82wljvfrqwah3qczkjq8q4i1k3cprypydxzlfh45k13jf";
+ url = "https://elpa.nongnu.org/nongnu-devel/slime-2.32snapshot0.20260719.53.tar";
+ sha256 = "06isvwjq37vzf636ci5jb8fkzc926fnjzwx0fszlfax4hy00mlqf";
};
packageRequires = [ macrostep ];
meta = {
@@ -5102,10 +5253,10 @@
elpaBuild {
pname = "solarized-theme";
ename = "solarized-theme";
- version = "2.1.0.0.20260329.155902";
+ version = "2.1.0.0.20260703.8";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/solarized-theme-2.1.0.0.20260329.155902.tar";
- sha256 = "19bj5hfz6ydhxd6qcrkw1lgpfbhjm5iwq96i6i4z56yffm7ijl9k";
+ url = "https://elpa.nongnu.org/nongnu-devel/solarized-theme-2.1.0.0.20260703.8.tar";
+ sha256 = "0iqgpdjxn6an3vn0pmy7iya5xs1ihjc9rj0kiyk6xlfswzc5pyfk";
};
packageRequires = [ ];
meta = {
@@ -5123,10 +5274,10 @@
elpaBuild {
pname = "spacemacs-theme";
ename = "spacemacs-theme";
- version = "0.2.0.20260414.205200";
+ version = "0.2.0.20260523.125627";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/spacemacs-theme-0.2.0.20260414.205200.tar";
- sha256 = "076nbpp16wy6j9ic3bhj9cj58bmah6ivhh842lkh7y7lgp6f7q7j";
+ url = "https://elpa.nongnu.org/nongnu-devel/spacemacs-theme-0.2.0.20260523.125627.tar";
+ sha256 = "0rxvvfcssxvgfi8djd3y5ncd5hhhbqclprp3529zw390m8qlcicd";
};
packageRequires = [ ];
meta = {
@@ -5144,10 +5295,10 @@
elpaBuild {
pname = "spell-fu";
ename = "spell-fu";
- version = "0.3.0.20260108.133641";
+ version = "0.3.0.20260524.63613";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/spell-fu-0.3.0.20260108.133641.tar";
- sha256 = "1yrv1a3k6nk92bhs4gsqpb1gc7x55gpp365ykpx6zj0hiapfhq80";
+ url = "https://elpa.nongnu.org/nongnu-devel/spell-fu-0.3.0.20260524.63613.tar";
+ sha256 = "1s2x3ymj1zb5iczwsrq00s0ynx1n6s3ls7y2nxrhxf04x93swqbf";
};
packageRequires = [ ];
meta = {
@@ -5249,10 +5400,10 @@
elpaBuild {
pname = "subed";
ename = "subed";
- version = "1.4.2.0.20260418.123100";
+ version = "1.5.1.0.20260618.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/subed-1.4.2.0.20260418.123100.tar";
- sha256 = "1xdz1vglwza0lik5zqx6f8x8w3a7yq8x7wkd7zr5k932pjmhqbnd";
+ url = "https://elpa.nongnu.org/nongnu-devel/subed-1.5.1.0.20260618.1.tar";
+ sha256 = "1b74rndjdjawxl6fbksw7816135hyyk9sffijcrfyfd5c9k0c5zn";
};
packageRequires = [ ];
meta = {
@@ -5271,10 +5422,10 @@
elpaBuild {
pname = "sweeprolog";
ename = "sweeprolog";
- version = "0.27.6.0.20250624.64526";
+ version = "0.27.6.0.20260510.162905";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/sweeprolog-0.27.6.0.20250624.64526.tar";
- sha256 = "1ywcwm4r7hd21bayilvmw530axa2gc8f689fr5swxfyig49qjqz5";
+ url = "https://elpa.nongnu.org/nongnu-devel/sweeprolog-0.27.6.0.20260510.162905.tar";
+ sha256 = "1x38q2hrrapfzb8ky7bzfw58pi00yyj4qnwrpsqcc1hhaxq6h1dr";
};
packageRequires = [ compat ];
meta = {
@@ -5292,10 +5443,10 @@
elpaBuild {
pname = "swift-mode";
ename = "swift-mode";
- version = "9.4.0.0.20251122.85713";
+ version = "10.0.0.0.20260608.3";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/swift-mode-9.4.0.0.20251122.85713.tar";
- sha256 = "1sn7lm6srrlnbxfdjpqdr503plkml61bz79ivwgz9rs9fqkbrvgg";
+ url = "https://elpa.nongnu.org/nongnu-devel/swift-mode-10.0.0.0.20260608.3.tar";
+ sha256 = "0xla80pyl6x1jmni7n4n7kxshhn7yb5zsmbck5dxmc1jh6cfvjp6";
};
packageRequires = [ ];
meta = {
@@ -5314,10 +5465,10 @@
elpaBuild {
pname = "symbol-overlay";
ename = "symbol-overlay";
- version = "4.3.0.20260423.145452";
+ version = "4.3.0.20260703.4";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/symbol-overlay-4.3.0.20260423.145452.tar";
- sha256 = "16gm3gj84wd7v6qhf3p0sz2jgbbyi60kqwkb41rfiz7n79qlijpg";
+ url = "https://elpa.nongnu.org/nongnu-devel/symbol-overlay-4.3.0.20260703.4.tar";
+ sha256 = "1mg02vrf7lhqiqkqlnl9czd11aw9i3gsa00f53fbn80vy123hixb";
};
packageRequires = [ seq ];
meta = {
@@ -5489,10 +5640,10 @@
elpaBuild {
pname = "toc-org";
ename = "toc-org";
- version = "1.1.0.20230831.75249";
+ version = "1.1.0.20260514.144504";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/toc-org-1.1.0.20230831.75249.tar";
- sha256 = "1kscz2s87l8a8w0d4s3g8ilspd63p0ij2vgncvzvb8hjld4pdcfh";
+ url = "https://elpa.nongnu.org/nongnu-devel/toc-org-1.1.0.20260514.144504.tar";
+ sha256 = "0rjzk0lzxppj5xvkh80nkaipf1m1d7wascx09hljrsk4fg583idb";
};
packageRequires = [ ];
meta = {
@@ -5533,10 +5684,10 @@
elpaBuild {
pname = "tp";
ename = "tp";
- version = "0.8.0.20260219.143500";
+ version = "0.9.0.20260509.80242";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/tp-0.8.0.20260219.143500.tar";
- sha256 = "15szb0li4ibsaja39699rc85nvk2s466g303dp0si62h9ipha68w";
+ url = "https://elpa.nongnu.org/nongnu-devel/tp-0.9.0.20260509.80242.tar";
+ sha256 = "15yw87gayvm79i2ah5qkvgvcsma3l6iwa34732bs3r0yqcgwfw9q";
};
packageRequires = [ transient ];
meta = {
@@ -5554,10 +5705,10 @@
elpaBuild {
pname = "treepy";
ename = "treepy";
- version = "0.1.3.0.20260313.91605";
+ version = "0.1.3.0.20260531.3";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/treepy-0.1.3.0.20260313.91605.tar";
- sha256 = "0bxp1xf2ckq4pa7bm5sc5i8y1nlyy36zyfavjndc2fihskr7d6pm";
+ url = "https://elpa.nongnu.org/nongnu-devel/treepy-0.1.3.0.20260531.3.tar";
+ sha256 = "0zzz43pdxirljmjn0zwf2rdnd2gm14nk5gzafsshbw9mzys1r2vq";
};
packageRequires = [ ];
meta = {
@@ -5575,10 +5726,10 @@
elpaBuild {
pname = "treesit-fold";
ename = "treesit-fold";
- version = "0.2.1.0.20260417.100827";
+ version = "0.2.1.0.20260619.51";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/treesit-fold-0.2.1.0.20260417.100827.tar";
- sha256 = "04v6yqj6a4aahff2kbpmj3k8jzqxa6idfgpfsd6l98yb3kqldil7";
+ url = "https://elpa.nongnu.org/nongnu-devel/treesit-fold-0.2.1.0.20260619.51.tar";
+ sha256 = "0zjkpa07dd3lk9clf10gb3l5s626yg2qyzwxczmymy4lla8njjnr";
};
packageRequires = [ ];
meta = {
@@ -5610,7 +5761,6 @@
) { };
tuareg = callPackage (
{
- caml,
elpaBuild,
fetchurl,
lib,
@@ -5618,12 +5768,12 @@
elpaBuild {
pname = "tuareg";
ename = "tuareg";
- version = "3.0.2snapshot0.20250910.140516";
+ version = "3.1.1snapshot0.20260626.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/tuareg-3.0.2snapshot0.20250910.140516.tar";
- sha256 = "0m9xid4s6qqdw8vlpgzsf2lc877shf7dvfxk8b9bhiva56dhrqfw";
+ url = "https://elpa.nongnu.org/nongnu-devel/tuareg-3.1.1snapshot0.20260626.1.tar";
+ sha256 = "0y1ygn4d8dcw0zgq0y2f65kmx64id5dcv2d23kvk2sddr53qya8f";
};
- packageRequires = [ caml ];
+ packageRequires = [ ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu-devel/tuareg.html";
license = lib.licenses.free;
@@ -5660,10 +5810,10 @@
elpaBuild {
pname = "typst-ts-mode";
ename = "typst-ts-mode";
- version = "0.12.2.0.20260415.103532";
+ version = "0.12.2.0.20260624.24";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/typst-ts-mode-0.12.2.0.20260415.103532.tar";
- sha256 = "190jabvm3p74cd96rrbj45y68myg32zvlxjrq01zvi3jv29xbpf6";
+ url = "https://elpa.nongnu.org/nongnu-devel/typst-ts-mode-0.12.2.0.20260624.24.tar";
+ sha256 = "13amyfg5zkbxwp1gipnyn01wpwpyv0p0w4sv97xpfiyazhs5w4bn";
};
packageRequires = [ ];
meta = {
@@ -5808,10 +5958,10 @@
elpaBuild {
pname = "vm";
ename = "vm";
- version = "8.3.3snapshot0.20260420.63204";
+ version = "8.3.3snapshot0.20260716.51";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/vm-8.3.3snapshot0.20260420.63204.tar";
- sha256 = "03804kmfwp994szv5gdgsg1sxmmdhzam8aq17r402chj6lhpla1x";
+ url = "https://elpa.nongnu.org/nongnu-devel/vm-8.3.3snapshot0.20260716.51.tar";
+ sha256 = "04pq2a39czffcj4rwv0c7bg53vc95mjyk4jqqp25blk4v4l9ygs2";
};
packageRequires = [ vcard ];
meta = {
@@ -5829,10 +5979,10 @@
elpaBuild {
pname = "web-mode";
ename = "web-mode";
- version = "17.3.23.0.20260331.144101";
+ version = "17.3.24.0.20260623.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/web-mode-17.3.23.0.20260331.144101.tar";
- sha256 = "1yk7dcsgry69dz3scx32p4zqp1ay6354rr017ygqffkl0fcqhgdg";
+ url = "https://elpa.nongnu.org/nongnu-devel/web-mode-17.3.24.0.20260623.0.tar";
+ sha256 = "0k6p06qbcclc2hywplpk09iz266k80zhlw4031whrrrmij9700j6";
};
packageRequires = [ ];
meta = {
@@ -5876,10 +6026,10 @@
elpaBuild {
pname = "wfnames";
ename = "wfnames";
- version = "1.2.0.20260105.45812";
+ version = "1.2.0.20260706.4";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/wfnames-1.2.0.20260105.45812.tar";
- sha256 = "116d5j1sqb0fbqlfaxxiaraw8c6mg69nw5mn412zwrvbq4vgpp4c";
+ url = "https://elpa.nongnu.org/nongnu-devel/wfnames-1.2.0.20260706.4.tar";
+ sha256 = "1gzypbg4nkf7yyscyq8p9n5ckclg0rcks5s8rilsljb0csnx35nz";
};
packageRequires = [ ];
meta = {
@@ -5933,19 +6083,25 @@
with-editor = callPackage (
{
compat,
+ cond-let,
elpaBuild,
fetchurl,
lib,
+ llama,
}:
elpaBuild {
pname = "with-editor";
ename = "with-editor";
- version = "3.4.9.0.20260422.182143";
+ version = "3.5.2.0.20260701.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/with-editor-3.4.9.0.20260422.182143.tar";
- sha256 = "10zb39gwdbamb11msxkayzspi09fpagip93xm90lc39w850xmbbm";
+ url = "https://elpa.nongnu.org/nongnu-devel/with-editor-3.5.2.0.20260701.0.tar";
+ sha256 = "067x2q0ykrp9llva4gn1cjyxwnhb0yh1cxr6ghdd4yccbfdi4y85";
};
- packageRequires = [ compat ];
+ packageRequires = [
+ compat
+ cond-let
+ llama
+ ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu-devel/with-editor.html";
license = lib.licenses.free;
@@ -6050,10 +6206,10 @@
elpaBuild {
pname = "xah-fly-keys";
ename = "xah-fly-keys";
- version = "28.11.20260416140940.0.20260416.141130";
+ version = "28.11.20260712150256.0.20260712.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/xah-fly-keys-28.11.20260416140940.0.20260416.141130.tar";
- sha256 = "0mrfn3z60jgk2f9lccb3qcaa52rvh366ys97ypz5lgjlxal1sr5r";
+ url = "https://elpa.nongnu.org/nongnu-devel/xah-fly-keys-28.11.20260712150256.0.20260712.0.tar";
+ sha256 = "0g4lfqm81kpszwlkapvr25c8c0b4rmg00zrr62ziz16bplvgy3ky";
};
packageRequires = [ ];
meta = {
@@ -6093,10 +6249,10 @@
elpaBuild {
pname = "xml-rpc";
ename = "xml-rpc";
- version = "1.6.17.0.20251122.185743";
+ version = "1.6.17.0.20260619.13";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/xml-rpc-1.6.17.0.20251122.185743.tar";
- sha256 = "1sshmzg6v27v8l0q3lq2apfvpbkkg71dyn7mk99a56qab4ajm6zs";
+ url = "https://elpa.nongnu.org/nongnu-devel/xml-rpc-1.6.17.0.20260619.13.tar";
+ sha256 = "0h0l1xlifl12n2bhjr9yx8nffl0wbhi1mnlj0f1w7f9b3vdgcn1a";
};
packageRequires = [ ];
meta = {
@@ -6157,10 +6313,10 @@
elpaBuild {
pname = "zenburn-theme";
ename = "zenburn-theme";
- version = "2.9.0.0.20260329.183806";
+ version = "2.10.0.0.20260704.2";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/zenburn-theme-2.9.0.0.20260329.183806.tar";
- sha256 = "16ma8gishgdbaalk1slqci7dciyjjnbifvn15iyby4ccqy3dc8gz";
+ url = "https://elpa.nongnu.org/nongnu-devel/zenburn-theme-2.10.0.0.20260704.2.tar";
+ sha256 = "17wp8z3nycqr3rva4npq3gi8ddv93fwzqh45bfgcr6a0zv4pfxp4";
};
packageRequires = [ ];
meta = {
@@ -6179,10 +6335,10 @@
elpaBuild {
pname = "zig-mode";
ename = "zig-mode";
- version = "0.0.8.0.20251128.25646";
+ version = "0.0.8.0.20260717.49";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu-devel/zig-mode-0.0.8.0.20251128.25646.tar";
- sha256 = "03nqzy5xyqsr7ax1m0sprk75ygkyspj824vixgkrflqnrhyj5b2s";
+ url = "https://elpa.nongnu.org/nongnu-devel/zig-mode-0.0.8.0.20260717.49.tar";
+ sha256 = "182rhhax10ldn763fraa5fc2vqlglzm9iq2yq2rvndgklqlf5bsc";
};
packageRequires = [ reformatter ];
meta = {
diff --git a/pkgs/applications/editors/emacs/elisp-packages/nongnu-generated.nix b/pkgs/applications/editors/emacs/elisp-packages/nongnu-generated.nix
index e5dfa1df3392..ce5821da02a2 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/nongnu-generated.nix
+++ b/pkgs/applications/editors/emacs/elisp-packages/nongnu-generated.nix
@@ -9,10 +9,10 @@
elpaBuild {
pname = "adoc-mode";
ename = "adoc-mode";
- version = "0.8.0";
+ version = "0.9.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/adoc-mode-0.8.0.tar";
- sha256 = "16459ial82gybqjm8ib0cxry6daipak4baxiz2wnldgy5vpgjnrd";
+ url = "https://elpa.nongnu.org/nongnu/adoc-mode-0.9.0.tar";
+ sha256 = "11anl5b9ka9aww2w2jv0clrvq98f2vsa9ri3n1xxdll5z77rvw56";
};
packageRequires = [ ];
meta = {
@@ -75,10 +75,10 @@
elpaBuild {
pname = "aidermacs";
ename = "aidermacs";
- version = "1.6";
+ version = "1.9";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/aidermacs-1.6.tar";
- sha256 = "07ql2kv7naza7jigmsw9x1k3md0hz2c302qrc0cy1a1h07567nli";
+ url = "https://elpa.nongnu.org/nongnu/aidermacs-1.9.tar";
+ sha256 = "05ff2kfy97870qgvv89ysrk8cwnr3zxh1f01lvp7rk7siln0w10d";
};
packageRequires = [
compat
@@ -142,10 +142,10 @@
elpaBuild {
pname = "annotate";
ename = "annotate";
- version = "2.4.5";
+ version = "2.5.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/annotate-2.4.5.tar";
- sha256 = "0pdhwlz792sf5zipv8s449bah7xm9klbpicx9203fhsc0ad82d0j";
+ url = "https://elpa.nongnu.org/nongnu/annotate-2.5.0.tar";
+ sha256 = "0nydnnjx1p4fkiix70zg0apxxd0sprlzxk111lvgnamp3c4hxf93";
};
packageRequires = [ ];
meta = {
@@ -269,10 +269,10 @@
elpaBuild {
pname = "auto-dim-other-buffers";
ename = "auto-dim-other-buffers";
- version = "2.2.1";
+ version = "2.2.2";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/auto-dim-other-buffers-2.2.1.tar";
- sha256 = "00x0niv1zd47b2xl19k3fi0xxskdndiabns107cxzwb7pnkp4f0m";
+ url = "https://elpa.nongnu.org/nongnu/auto-dim-other-buffers-2.2.2.tar";
+ sha256 = "1464kwsdkzh4v0w2y8sv2v5w1s552a2pq1q81jpbfwh2md47ais2";
};
packageRequires = [ ];
meta = {
@@ -566,10 +566,10 @@
elpaBuild {
pname = "casual";
ename = "casual";
- version = "2.16.0";
+ version = "2.17.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/casual-2.16.0.tar";
- sha256 = "1s0d5c3aacyh1n5qy7ka4xwnmdbx3qrh0z0z41bc958zmay6mgpa";
+ url = "https://elpa.nongnu.org/nongnu/casual-2.17.1.tar";
+ sha256 = "0wnr7lqb3c6wzcbjh19cj00jdh3rhplzyxq2khk009pfld861pa3";
};
packageRequires = [
csv-mode
@@ -605,6 +605,7 @@
cider = callPackage (
{
clojure-mode,
+ compat,
elpaBuild,
fetchurl,
lib,
@@ -618,13 +619,14 @@
elpaBuild {
pname = "cider";
ename = "cider";
- version = "1.21.0";
+ version = "2.0.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/cider-1.21.0.tar";
- sha256 = "0rfjq6fqvam9v7mcx1459p377ryzi9wf7p2dn68nd51f324hx0gj";
+ url = "https://elpa.nongnu.org/nongnu/cider-2.0.0.tar";
+ sha256 = "1i8drgg7fbj4l4y7mgh47fw94bajwd5sdacfkvii0d6pc8sda2if";
};
packageRequires = [
clojure-mode
+ compat
parseedn
queue
seq
@@ -733,10 +735,10 @@
elpaBuild {
pname = "cond-let";
ename = "cond-let";
- version = "0.2.2";
+ version = "1.1.3";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/cond-let-0.2.2.tar";
- sha256 = "0ip5k8jhdgq1zkc6cj4ax8rv4236cxla2dapj83y526ra321gkzy";
+ url = "https://elpa.nongnu.org/nongnu/cond-let-1.1.3.tar";
+ sha256 = "0zxirrq3rps48irxab1m1hkvbxjfahibfaynl4qb0lrz0bv8dzcf";
};
packageRequires = [ ];
meta = {
@@ -756,10 +758,10 @@
elpaBuild {
pname = "consult-flycheck";
ename = "consult-flycheck";
- version = "1.1";
+ version = "1.2";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/consult-flycheck-1.1.tar";
- sha256 = "0nanxx0fbj6w9sxzz4ys8nxpv63al3m4lliy30y4ydiaig2a0abc";
+ url = "https://elpa.nongnu.org/nongnu/consult-flycheck-1.2.tar";
+ sha256 = "0g5lb3p4g91ax0c4zkkyvi2l4hkq5b9r2bciddgg1h4bsmrs6vhx";
};
packageRequires = [
consult
@@ -828,10 +830,10 @@
elpaBuild {
pname = "csv2ledger";
ename = "csv2ledger";
- version = "1.5.4";
+ version = "1.5.5";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/csv2ledger-1.5.4.tar";
- sha256 = "1h935g97fjrs1q0yz0q071zp91bhsb3yg13zqpp8il5gif20qqls";
+ url = "https://elpa.nongnu.org/nongnu/csv2ledger-1.5.5.tar";
+ sha256 = "09k7q33jxwrcf52csgf25kd9wqcs9bicl8azmkbrmm8d9jqgg3md";
};
packageRequires = [ csv-mode ];
meta = {
@@ -1278,10 +1280,10 @@
elpaBuild {
pname = "eldoc-mouse";
ename = "eldoc-mouse";
- version = "3.0.7";
+ version = "3.0.8";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/eldoc-mouse-3.0.7.tar";
- sha256 = "17s3iqkdswjfcdiyaa732v27pcpmxa96i17mwpzi34vw53a1r3wl";
+ url = "https://elpa.nongnu.org/nongnu/eldoc-mouse-3.0.8.tar";
+ sha256 = "1snacbxjqp8ykic5z1nzhg0fnd5fnafsgwxmfd9vy4rsm0ag9mrl";
};
packageRequires = [
eglot
@@ -1319,6 +1321,56 @@
};
}
) { };
+ elfeed = callPackage (
+ {
+ compat,
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "elfeed";
+ ename = "elfeed";
+ version = "4.1.0";
+ src = fetchurl {
+ url = "https://elpa.nongnu.org/nongnu/elfeed-4.1.0.tar";
+ sha256 = "0bwmhba975rsj9pk3s6wq7lsa38v4s0737hvhhdbzx1i66z45hmx";
+ };
+ packageRequires = [ compat ];
+ meta = {
+ homepage = "https://elpa.nongnu.org/nongnu/elfeed.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
+ elfeed-web = callPackage (
+ {
+ compat,
+ elfeed,
+ elpaBuild,
+ fetchurl,
+ lib,
+ simple-httpd,
+ }:
+ elpaBuild {
+ pname = "elfeed-web";
+ ename = "elfeed-web";
+ version = "4.0.0";
+ src = fetchurl {
+ url = "https://elpa.nongnu.org/nongnu/elfeed-web-4.0.0.tar";
+ sha256 = "0ah6zjcihxfra34zglqrj6pnxqnakgc58dlkgjzgrxdamx4dxfwg";
+ };
+ packageRequires = [
+ compat
+ elfeed
+ simple-httpd
+ ];
+ meta = {
+ homepage = "https://elpa.nongnu.org/nongnu/elfeed-web.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
elixir-mode = callPackage (
{
elpaBuild,
@@ -1370,10 +1422,10 @@
elpaBuild {
pname = "emacsql";
ename = "emacsql";
- version = "4.3.6";
+ version = "4.4.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/emacsql-4.3.6.tar";
- sha256 = "1zj04kqq3c5915n9pj5qx63rw8hnnpag2y5qca4d4y9h1lqnj2pp";
+ url = "https://elpa.nongnu.org/nongnu/emacsql-4.4.1.tar";
+ sha256 = "1gja15jyalzrlcs85ng98p6g7b0id4rayj4shwf7x1ic30sv12p3";
};
packageRequires = [ ];
meta = {
@@ -1404,6 +1456,27 @@
};
}
) { };
+ eprolog = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "eprolog";
+ ename = "eprolog";
+ version = "0.3.2";
+ src = fetchurl {
+ url = "https://elpa.nongnu.org/nongnu/eprolog-0.3.2.tar";
+ sha256 = "1vbnbdpmxvqgay5m01bcm1wlsyz16nn4fydv7ipd8kzr4lw59qyg";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.nongnu.org/nongnu/eprolog.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
esxml = callPackage (
{
cl-lib ? null,
@@ -1495,6 +1568,28 @@
};
}
) { };
+ evil-collection = callPackage (
+ {
+ elpaBuild,
+ evil,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "evil-collection";
+ ename = "evil-collection";
+ version = "3.0.0";
+ src = fetchurl {
+ url = "https://elpa.nongnu.org/nongnu/evil-collection-3.0.0.tar";
+ sha256 = "1a347yznrgw8b5y8jwj4rbryidr24c7g8c2is9pd4470v5h7jnfd";
+ };
+ packageRequires = [ evil ];
+ meta = {
+ homepage = "https://elpa.nongnu.org/nongnu/evil-collection.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
evil-emacs-cursor-model-mode = callPackage (
{
elpaBuild,
@@ -1719,16 +1814,20 @@
evil,
fetchurl,
lib,
+ shift-number,
}:
elpaBuild {
pname = "evil-numbers";
ename = "evil-numbers";
- version = "0.7";
+ version = "0.8";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/evil-numbers-0.7.tar";
- sha256 = "1k5vrh8bj9kldqq8kxn1qi3k82i7k4v4h6nkk9hng8p90zhac02i";
+ url = "https://elpa.nongnu.org/nongnu/evil-numbers-0.8.tar";
+ sha256 = "0l1ik0fz1bzpxnz9rnn0817j8ghpwhf3qv3lidzb3vpbynkas5a1";
};
- packageRequires = [ evil ];
+ packageRequires = [
+ evil
+ shift-number
+ ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu/evil-numbers.html";
license = lib.licenses.free;
@@ -1857,10 +1956,10 @@
elpaBuild {
pname = "fedi";
ename = "fedi";
- version = "0.3";
+ version = "0.4";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/fedi-0.3.tar";
- sha256 = "1s1dn7n860b18cwyahc20lbl1bhv4y5h8jijs4iqbbgbk8w7hsjg";
+ url = "https://elpa.nongnu.org/nongnu/fedi-0.4.tar";
+ sha256 = "0zh2rkkj1wyj7csg72gg54mxlrd5kav54z3qhk6lp6j8h3zxkdvd";
};
packageRequires = [ markdown-mode ];
meta = {
@@ -1882,10 +1981,10 @@
elpaBuild {
pname = "fj";
ename = "fj";
- version = "0.34";
+ version = "0.37";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/fj-0.34.tar";
- sha256 = "0aqfipcpbsxp2pm05p44fdybhldpbvii2x2m0az9s3gkm7dvwg87";
+ url = "https://elpa.nongnu.org/nongnu/fj-0.37.tar";
+ sha256 = "1kya5xif5ffiqv9fk4mxwx6x6gqshkpji21z0q84q438hfbxpwl9";
};
packageRequires = [
fedi
@@ -1899,6 +1998,27 @@
};
}
) { };
+ flamegraph = callPackage (
+ {
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "flamegraph";
+ ename = "flamegraph";
+ version = "0.2";
+ src = fetchurl {
+ url = "https://elpa.nongnu.org/nongnu/flamegraph-0.2.tar";
+ sha256 = "0zlji7iq7zrxix4mzw6z25rqgrmlnxnrc7skflkj0nv90z5w3fsh";
+ };
+ packageRequires = [ ];
+ meta = {
+ homepage = "https://elpa.nongnu.org/nongnu/flamegraph.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
flx = callPackage (
{
cl-lib ? null,
@@ -1957,10 +2077,10 @@
elpaBuild {
pname = "flycheck";
ename = "flycheck";
- version = "36.0";
+ version = "37.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/flycheck-36.0.tar";
- sha256 = "0172y6qzkys77cbvdla1iiiznpxpscjzmsdr66m66s8g4bf7f1p2";
+ url = "https://elpa.nongnu.org/nongnu/flycheck-37.0.tar";
+ sha256 = "0x565wcnxkmdsf87dzv555r6m86lmlwz4c16isgac8dn1qp7l5jb";
};
packageRequires = [ seq ];
meta = {
@@ -2158,10 +2278,10 @@
elpaBuild {
pname = "geiser";
ename = "geiser";
- version = "0.32";
+ version = "0.33.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/geiser-0.32.tar";
- sha256 = "1mija2lp2fqhzi9bifl0ipkjhj3gx89qz41mk0phb5y5cws6nar1";
+ url = "https://elpa.nongnu.org/nongnu/geiser-0.33.1.tar";
+ sha256 = "0mh701hp587ahiqf0znnc4jm46i49z85nwac4bxn7sxxjid3xffl";
};
packageRequires = [ project ];
meta = {
@@ -2291,10 +2411,10 @@
elpaBuild {
pname = "geiser-guile";
ename = "geiser-guile";
- version = "0.28.3";
+ version = "0.28.5";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/geiser-guile-0.28.3.tar";
- sha256 = "163p8ll68qdgpz6l1ixwcmffcsv1kas095davgwgq001hfx9db5x";
+ url = "https://elpa.nongnu.org/nongnu/geiser-guile-0.28.5.tar";
+ sha256 = "078hmmqg6m428bg2sf640bwylrh4y64qanbz00prvjhgkrp1awnn";
};
packageRequires = [
geiser
@@ -2434,10 +2554,10 @@
elpaBuild {
pname = "git-modes";
ename = "git-modes";
- version = "1.4.8";
+ version = "1.5.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/git-modes-1.4.8.tar";
- sha256 = "08bgjpns90c36cdb6qbc24d41z1jg94mwsc91irpsmsvivxw1ksr";
+ url = "https://elpa.nongnu.org/nongnu/git-modes-1.5.0.tar";
+ sha256 = "0fxvv451pf8izn5q16ly21dxjax43l2p7qav11hi7qmygrrhxsc6";
};
packageRequires = [ compat ];
meta = {
@@ -2528,10 +2648,10 @@
elpaBuild {
pname = "gnuplot";
ename = "gnuplot";
- version = "0.11";
+ version = "0.12";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/gnuplot-0.11.tar";
- sha256 = "10zjkf0ba7jaqx41csa815apx58s0b87svvmzzld3i3xf91sash7";
+ url = "https://elpa.nongnu.org/nongnu/gnuplot-0.12.tar";
+ sha256 = "13pbnlwg9z7yc8s1hr1fq031cl9swld2jgxdd74jra49vvh6a3ar";
};
packageRequires = [ compat ];
meta = {
@@ -2635,10 +2755,10 @@
elpaBuild {
pname = "gptel";
ename = "gptel";
- version = "0.9.9.4";
+ version = "0.9.9.5";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/gptel-0.9.9.4.tar";
- sha256 = "0j410b0bynq91dxwakrrzp92m3p2lznzvmyq41viscjm0gjng4kn";
+ url = "https://elpa.nongnu.org/nongnu/gptel-0.9.9.5.tar";
+ sha256 = "1x1sd8g5fbgidj40ri9xg0rvyxdyjpxxnr45i0dj8d333nvssdq0";
};
packageRequires = [
compat
@@ -2831,10 +2951,10 @@
elpaBuild {
pname = "helm";
ename = "helm";
- version = "4.0.6";
+ version = "4.0.7";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/helm-4.0.6.tar";
- sha256 = "1nnkhffns1yj24slfln5rywqdw514jfklys3g5kmrl90i9apd5cp";
+ url = "https://elpa.nongnu.org/nongnu/helm-4.0.7.tar";
+ sha256 = "1x1wg3z6y5rb4r17ifwvz79pa3m6w9kkvxlfivznqh4ajgafrnn5";
};
packageRequires = [
helm-core
@@ -2856,10 +2976,10 @@
elpaBuild {
pname = "helm-core";
ename = "helm-core";
- version = "4.0.6";
+ version = "4.0.7";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/helm-core-4.0.6.tar";
- sha256 = "0b39k4wwl3sjw5c19g36a0lsxiascrqw23cf3hgksrpzp3amipbz";
+ url = "https://elpa.nongnu.org/nongnu/helm-core-4.0.7.tar";
+ sha256 = "1d7a61rbc7rlr144v9qm6c89dnchn7xwcv05gl6kdapb7gir9l8f";
};
packageRequires = [ async ];
meta = {
@@ -3176,10 +3296,10 @@
elpaBuild {
pname = "isl";
ename = "isl";
- version = "1.6";
+ version = "1.7";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/isl-1.6.tar";
- sha256 = "1bsqq3i7flpbihvcmvcwb1s3gabq6wslwpamcqhcf15j30znwhb1";
+ url = "https://elpa.nongnu.org/nongnu/isl-1.7.tar";
+ sha256 = "1nksczxv2bq6l8wg855a0ahzp1w3dhai4vwni8hyrp5fk2z0gcan";
};
packageRequires = [ ];
meta = {
@@ -3240,17 +3360,21 @@
elpaBuild,
fetchurl,
fsm,
+ keymap-popup,
lib,
}:
elpaBuild {
pname = "jabber";
ename = "jabber";
- version = "0.10.5";
+ version = "0.12.2";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/jabber-0.10.5.tar";
- sha256 = "1vjmajcls0l6mwccqdp7gr4g4r1z6f2qaf2palnimjb7w3gzh4mk";
+ url = "https://elpa.nongnu.org/nongnu/jabber-0.12.2.tar";
+ sha256 = "0klii5m93g5dva7wrf7v0habb9pghrpa6kw63c5x1ym2w7sh8v6q";
};
- packageRequires = [ fsm ];
+ packageRequires = [
+ fsm
+ keymap-popup
+ ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu/jabber.html";
license = lib.licenses.free;
@@ -3344,6 +3468,7 @@
keycast = callPackage (
{
compat,
+ cond-let,
elpaBuild,
fetchurl,
lib,
@@ -3351,12 +3476,15 @@
elpaBuild {
pname = "keycast";
ename = "keycast";
- version = "1.4.7";
+ version = "1.4.8";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/keycast-1.4.7.tar";
- sha256 = "0ipjn0b9jr6m7a88f76mz6j5na20hix94h8c5ghv705izjlqla0w";
+ url = "https://elpa.nongnu.org/nongnu/keycast-1.4.8.tar";
+ sha256 = "0rgaqc2d7n8a498n8jb14890gp6z49nqnpzk1h0xw03hnh8smz90";
};
- packageRequires = [ compat ];
+ packageRequires = [
+ compat
+ cond-let
+ ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu/keycast.html";
license = lib.licenses.free;
@@ -3395,10 +3523,10 @@
elpaBuild {
pname = "lem";
ename = "lem";
- version = "0.24";
+ version = "0.25";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/lem-0.24.tar";
- sha256 = "1ykyahpd7y43lf3vk3a0w9rjim4lsm35mlw1qqljbixci2izk797";
+ url = "https://elpa.nongnu.org/nongnu/lem-0.25.tar";
+ sha256 = "1hrnq46bmz10a3w89flhw85rqs58wpnywslx3p8g16196ln348sd";
};
packageRequires = [
fedi
@@ -3420,10 +3548,10 @@
elpaBuild {
pname = "llama";
ename = "llama";
- version = "1.0.4";
+ version = "1.0.5";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/llama-1.0.4.tar";
- sha256 = "0kxrbsck78f4r4npssywai2paf9mlyx59zpnfvmkgv50gphrwx7h";
+ url = "https://elpa.nongnu.org/nongnu/llama-1.0.5.tar";
+ sha256 = "10ysi2a7aifp9ixrhygfcas7zn9dfqy1zpiycwz3gamlzkvjzw2l";
};
packageRequires = [ compat ];
meta = {
@@ -3473,10 +3601,10 @@
elpaBuild {
pname = "loopy";
ename = "loopy";
- version = "0.15.0";
+ version = "0.16.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/loopy-0.15.0.tar";
- sha256 = "18l1bml8xiji0mgmm6fb669iwyidg7pay231kv14kbv1agiwfkbp";
+ url = "https://elpa.nongnu.org/nongnu/loopy-0.16.1.tar";
+ sha256 = "17p5km90v2pwwqr66x39h2ca6dx47xig1rkpvk1m4nlw32nqv1dh";
};
packageRequires = [
compat
@@ -3600,10 +3728,10 @@
elpaBuild {
pname = "magit";
ename = "magit";
- version = "4.5.0";
+ version = "4.6.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/magit-4.5.0.tar";
- sha256 = "080hc0y9pah86g7nw1x1gh2issap54r8dg9vzpm2l923cxy9jnbp";
+ url = "https://elpa.nongnu.org/nongnu/magit-4.6.0.tar";
+ sha256 = "0m7n3jvdf8d40wzglz67addk1nwwbvb7wkm0nq1mjpayqvwqyjml";
};
packageRequires = [
compat
@@ -3633,10 +3761,10 @@
elpaBuild {
pname = "magit-section";
ename = "magit-section";
- version = "4.5.0";
+ version = "4.6.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/magit-section-4.5.0.tar";
- sha256 = "1k63g8ayvg152r16ml5ph8q07qs5a424vs4i5q32icvl78v6cn2z";
+ url = "https://elpa.nongnu.org/nongnu/magit-section-4.6.0.tar";
+ sha256 = "085fr4fnk2wcd9z5l4ks20q69r501sx96abhyw80lshbd9rzj59z";
};
packageRequires = [
compat
@@ -3682,10 +3810,10 @@
elpaBuild {
pname = "mastodon";
ename = "mastodon";
- version = "2.0.16";
+ version = "2.0.17";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/mastodon-2.0.16.tar";
- sha256 = "0zyqqfxg7b22pj8y181x30rhy81ijbm21ai70l7cq79dr2a3yr96";
+ url = "https://elpa.nongnu.org/nongnu/mastodon-2.0.17.tar";
+ sha256 = "1yg1fylz1dp7my8zfnscnvd1sdhjhi45xw10sqn3rmqmmrwd87d9";
};
packageRequires = [
persist
@@ -4227,20 +4355,22 @@
elpaBuild,
fetchurl,
lib,
+ llama,
magit,
org,
}:
elpaBuild {
pname = "orgit";
ename = "orgit";
- version = "2.1.2";
+ version = "2.2.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/orgit-2.1.2.tar";
- sha256 = "10cc70538mq89ypwcb22x4797qa38z60mw0h67xdf2zisdiw5c6z";
+ url = "https://elpa.nongnu.org/nongnu/orgit-2.2.0.tar";
+ sha256 = "0lw6mp6war3aqsad8vbdpz33nx7kki8df39xm7gnq1ja2dkgf9ah";
};
packageRequires = [
compat
cond-let
+ llama
magit
org
];
@@ -4482,10 +4612,10 @@
elpaBuild {
pname = "pg";
ename = "pg";
- version = "0.65";
+ version = "0.68";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/pg-0.65.tar";
- sha256 = "1gf93xsldhx105r5m03hiq3lzlzb3r5pjd3j99jl0gs3z8pmn8ic";
+ url = "https://elpa.nongnu.org/nongnu/pg-0.68.tar";
+ sha256 = "0nnr5gz4bm0hfdwj8f0vkfwb2apbk5sv3l85q7b420nwcs7d546r";
};
packageRequires = [ peg ];
meta = {
@@ -4580,6 +4710,7 @@
) { };
projectile = callPackage (
{
+ compat,
elpaBuild,
fetchurl,
lib,
@@ -4587,12 +4718,12 @@
elpaBuild {
pname = "projectile";
ename = "projectile";
- version = "2.9.1";
+ version = "3.2.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/projectile-2.9.1.tar";
- sha256 = "07icp9baa7jkyqnz4b1sxl1dg88y5vzzhiwyfb12q349flbkkkb1";
+ url = "https://elpa.nongnu.org/nongnu/projectile-3.2.1.tar";
+ sha256 = "07hfhfbig1zw1fs0k7m22n3wqdyk4fj5fbpcrg0x4q2dw05r5bbj";
};
- packageRequires = [ ];
+ packageRequires = [ compat ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu/projectile.html";
license = lib.licenses.free;
@@ -4652,10 +4783,10 @@
elpaBuild {
pname = "racket-mode";
ename = "racket-mode";
- version = "1.0.20260303.123213";
+ version = "1.0.20260626.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/racket-mode-1.0.20260303.123213.tar";
- sha256 = "1wxhdrwm2fr3rnv7ghziibnpbx99z9qdaa54zd11jzjpkjgf2jxs";
+ url = "https://elpa.nongnu.org/nongnu/racket-mode-1.0.20260626.0.tar";
+ sha256 = "0y45m019fl0rdgjdz9ap1cr5agqg0gssfi04p33xqdcjkwrf51d0";
};
packageRequires = [ compat ];
meta = {
@@ -4906,10 +5037,10 @@
elpaBuild {
pname = "scad-mode";
ename = "scad-mode";
- version = "98.0";
+ version = "99.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/scad-mode-98.0.tar";
- sha256 = "0ksiz8rxxykm2lnc2lil1qndpl0lxcw8fa9nlh420xva9m3s9sda";
+ url = "https://elpa.nongnu.org/nongnu/scad-mode-99.0.tar";
+ sha256 = "1wdb7ri2716r4m22asj370c3mnjchcsnxjwbw3m13rgvkj2ax6j4";
};
packageRequires = [ compat ];
meta = {
@@ -5044,6 +5175,28 @@
};
}
) { };
+ simple-httpd = callPackage (
+ {
+ compat,
+ elpaBuild,
+ fetchurl,
+ lib,
+ }:
+ elpaBuild {
+ pname = "simple-httpd";
+ ename = "simple-httpd";
+ version = "1.6";
+ src = fetchurl {
+ url = "https://elpa.nongnu.org/nongnu/simple-httpd-1.6.tar";
+ sha256 = "08rkqid2c11dl0sm8795jzkiilj02kbq6xy56b3bh83pc09wfmay";
+ };
+ packageRequires = [ compat ];
+ meta = {
+ homepage = "https://elpa.nongnu.org/nongnu/simple-httpd.html";
+ license = lib.licenses.free;
+ };
+ }
+ ) { };
slime = callPackage (
{
elpaBuild,
@@ -5265,10 +5418,10 @@
elpaBuild {
pname = "subed";
ename = "subed";
- version = "1.4.2";
+ version = "1.5.1";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/subed-1.4.2.tar";
- sha256 = "0crpgxqk164z602iajhx7b0zxdjs5f9g8hv0q6n1vjrsby87pl1x";
+ url = "https://elpa.nongnu.org/nongnu/subed-1.5.1.tar";
+ sha256 = "0gk9r2dvmrxpz4gpypnnzjgph6xasn5f9i51cx1hnd9r5zim2qy3";
};
packageRequires = [ ];
meta = {
@@ -5304,17 +5457,16 @@
elpaBuild,
fetchurl,
lib,
- seq,
}:
elpaBuild {
pname = "swift-mode";
ename = "swift-mode";
- version = "9.4.0";
+ version = "10.0.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/swift-mode-9.4.0.tar";
- sha256 = "0zfwzz5n98svv1if9wwj37hraiw2in06ks7n3mnk1jjik54kmpxd";
+ url = "https://elpa.nongnu.org/nongnu/swift-mode-10.0.0.tar";
+ sha256 = "07wydsy8ihfmr1i4hya270f9v5dy9mfn6kzbmyj3kf9kx5grhybl";
};
- packageRequires = [ seq ];
+ packageRequires = [ ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu/swift-mode.html";
license = lib.licenses.free;
@@ -5572,10 +5724,10 @@
elpaBuild {
pname = "tp";
ename = "tp";
- version = "0.8";
+ version = "0.9";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/tp-0.8.tar";
- sha256 = "1psa4sdia1vx3l2v1lklc8wy8nqbq6g83fyj46xii20rfm4db9hk";
+ url = "https://elpa.nongnu.org/nongnu/tp-0.9.tar";
+ sha256 = "0xaqynvw65l5dm3hxba6v8jrh2pvn6b2q0npsf9sdwryjg2zlk41";
};
packageRequires = [ transient ];
meta = {
@@ -5649,7 +5801,6 @@
) { };
tuareg = callPackage (
{
- caml,
elpaBuild,
fetchurl,
lib,
@@ -5657,12 +5808,12 @@
elpaBuild {
pname = "tuareg";
ename = "tuareg";
- version = "3.0.1";
+ version = "3.1.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/tuareg-3.0.1.tar";
- sha256 = "04lb71cafg4bqicx3q3rb9jpxbq6hmdrzw88f52sjqxq5c4cqdkj";
+ url = "https://elpa.nongnu.org/nongnu/tuareg-3.1.0.tar";
+ sha256 = "1fhw143rmdzrfrh6y3jdsyq6yqwv1dy6m6sg4s3mbqhnhxawc9sm";
};
- packageRequires = [ caml ];
+ packageRequires = [ ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu/tuareg.html";
license = lib.licenses.free;
@@ -5868,10 +6019,10 @@
elpaBuild {
pname = "web-mode";
ename = "web-mode";
- version = "17.3.23";
+ version = "17.3.24";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/web-mode-17.3.23.tar";
- sha256 = "17l0lda5p8nf239b0x43w8fx9a87rmk9rk282983nqi4f57iyzb2";
+ url = "https://elpa.nongnu.org/nongnu/web-mode-17.3.24.tar";
+ sha256 = "129hz6h2ygmqhn3bbjxx2gpdnvh0gifc4xaipsjz0716rj1s0k81";
};
packageRequires = [ ];
meta = {
@@ -5972,19 +6123,25 @@
with-editor = callPackage (
{
compat,
+ cond-let,
elpaBuild,
fetchurl,
lib,
+ llama,
}:
elpaBuild {
pname = "with-editor";
ename = "with-editor";
- version = "3.4.9";
+ version = "3.5.2";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/with-editor-3.4.9.tar";
- sha256 = "0bzwxy67x8yvs1qv2m5mzkcssk9r3dm1zvq2map6kpscqgc15gq8";
+ url = "https://elpa.nongnu.org/nongnu/with-editor-3.5.2.tar";
+ sha256 = "1qibgsb67zh8k8mpk3ghy2ilmrmf3dxz75clfvn2qji5ds2qlkzq";
};
- packageRequires = [ compat ];
+ packageRequires = [
+ compat
+ cond-let
+ llama
+ ];
meta = {
homepage = "https://elpa.nongnu.org/nongnu/with-editor.html";
license = lib.licenses.free;
@@ -6089,10 +6246,10 @@
elpaBuild {
pname = "xah-fly-keys";
ename = "xah-fly-keys";
- version = "28.11.20260416140940";
+ version = "28.11.20260712150256";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/xah-fly-keys-28.11.20260416140940.tar";
- sha256 = "0zzdwrd4h12bqlxzpj7xs4m5cdgx9nbljrnyld6qs5b19352izyl";
+ url = "https://elpa.nongnu.org/nongnu/xah-fly-keys-28.11.20260712150256.tar";
+ sha256 = "1c4xsvmc92ydil78j2kk6avgswgz4ll5fx4mrlsmrq1z57v99ca1";
};
packageRequires = [ ];
meta = {
@@ -6196,10 +6353,10 @@
elpaBuild {
pname = "zenburn-theme";
ename = "zenburn-theme";
- version = "2.9.0";
+ version = "2.10.0";
src = fetchurl {
- url = "https://elpa.nongnu.org/nongnu/zenburn-theme-2.9.0.tar";
- sha256 = "0nldp5id0lkajnqpzw8agmpdjm0jfb70ma2wip06nh5zqcrrpg6s";
+ url = "https://elpa.nongnu.org/nongnu/zenburn-theme-2.10.0.tar";
+ sha256 = "0h1qd1xay2ci51y3vdq480afbx6hq40ywplsh76m85mr199pf751";
};
packageRequires = [ ];
meta = {
diff --git a/pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json b/pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json
index 4487c767c79c..74789be8df6c 100644
--- a/pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json
+++ b/pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json
@@ -1599,20 +1599,20 @@
"repo": "xenodium/acp.el",
"unstable": {
"version": [
- 20260325,
- 1158
+ 20260719,
+ 342
],
- "commit": "c32fbf8df34ed0095853a8cf55dc783e68b67d90",
- "sha256": "0hr1176sy8xrx6wkqadmvwdjm1sv7aq8ddrw8h3ha6sn74glx8ws"
+ "commit": "a29cb161ac95f1819f34481a98666707661c5cf8",
+ "sha256": "0mbhra3nnvfwja3bamhcg8nfgrh4l19sv5cvir452xhab0y9rs7a"
},
"stable": {
"version": [
0,
- 11,
- 3
+ 12,
+ 2
],
- "commit": "c32fbf8df34ed0095853a8cf55dc783e68b67d90",
- "sha256": "0hr1176sy8xrx6wkqadmvwdjm1sv7aq8ddrw8h3ha6sn74glx8ws"
+ "commit": "c8ee1d7f70105fba8efa964ca63f38ca94a1e759",
+ "sha256": "1zxns3y4wgfq7mndyvia3yhmc1qzlk9f7rw3khlyl1sxr0rnim42"
}
},
{
@@ -1728,11 +1728,11 @@
"repo": "brownts/ada-ts-mode",
"unstable": {
"version": [
- 20251125,
- 2018
+ 20260627,
+ 1553
],
- "commit": "52e0fd11604ab1d51a34c89e05692446d9dc5ecb",
- "sha256": "064lbyywnlcgjfz86bwhk13waqsc651jrnpf9liqc55r8i97igxi"
+ "commit": "32fcf68dba7463902481b256cdecad08e4b5b0a7",
+ "sha256": "05qj0zv33f6f8gknfbpz1fdz4nx7c3zzpl62qdxb5zvdsrmmdj0a"
},
"stable": {
"version": [
@@ -1883,20 +1883,20 @@
"repo": "bbatsov/adoc-mode",
"unstable": {
"version": [
- 20260221,
- 2207
+ 20260612,
+ 638
],
- "commit": "50b601dd92f99dd9534ff44de5f411480ca32b09",
- "sha256": "1sgmhsvr0kbkv86zgp82r5bs3wpn4sn7mm15fdn7mv3dsjkngssv"
+ "commit": "5c1484b8982845845ccd0be02629e21f1d5bed81",
+ "sha256": "174930vgjf35ix2q3ra40zb9n2r1x7ynnb2h8p7dp37x31v38lhv"
},
"stable": {
"version": [
0,
- 8,
+ 9,
0
],
- "commit": "6fc5ebc9478de17b1971222485e7729f04fbcf57",
- "sha256": "0hjhjg9kdx849qbdhzryfv8c21h2xq02991hixykmxf1b2xv1y69"
+ "commit": "ba362d87d5970fa2c3287d46950063b2b686179c",
+ "sha256": "1d0r3nffpxzvshg72xp951fk4g8dyy7ynp6xvz65fbnsnw1sm7g7"
}
},
{
@@ -1969,25 +1969,25 @@
"repo": "minad/affe",
"unstable": {
"version": [
- 20260322,
- 19
+ 20260519,
+ 1026
],
"deps": [
"consult"
],
- "commit": "6e06b8efcd5b57160ba267e42cbf3b982a4b89a1",
- "sha256": "1bm3fcmr8kspd09qzvxfklblapm1p3z7p9div651450pbwn0ccnx"
+ "commit": "ccc6e4dc3dc7c87bdd4733d174274f4710f9e99e",
+ "sha256": "07f3z5cp98nlmxbii8fnsq9p87v4j29pydadzic2kzckzp5rcymw"
},
"stable": {
"version": [
0,
- 9
+ 10
],
"deps": [
"consult"
],
- "commit": "a1607fbc66789408128e12c9224b6a6c51d12bcb",
- "sha256": "166v7d120hbk6vczj1iam85xivk6wwpvga8m0vxgcii19issh5b3"
+ "commit": "ccc6e4dc3dc7c87bdd4733d174274f4710f9e99e",
+ "sha256": "07f3z5cp98nlmxbii8fnsq9p87v4j29pydadzic2kzckzp5rcymw"
}
},
{
@@ -2152,14 +2152,26 @@
"repo": "Marx-A00/agent-recall",
"unstable": {
"version": [
- 20260420,
- 1713
+ 20260710,
+ 1707
],
"deps": [
"agent-shell"
],
- "commit": "a90c86c53e65f95fd19c67587ba7d904b939db3d",
- "sha256": "15p23fvf6mc461j5rl4jzhhq2lkznfllhrcd9pagzzqwp0mjy8l1"
+ "commit": "166f421bce4a6550507e0bd2b896956d0d9d4a94",
+ "sha256": "1pyzipf18sjlcrgkzldgfb8dvk0j1m9g88v28r5iha99hbglg4pk"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 6,
+ 1
+ ],
+ "deps": [
+ "agent-shell"
+ ],
+ "commit": "166f421bce4a6550507e0bd2b896956d0d9d4a94",
+ "sha256": "1pyzipf18sjlcrgkzldgfb8dvk0j1m9g88v28r5iha99hbglg4pk"
}
},
{
@@ -2170,28 +2182,28 @@
"repo": "xenodium/agent-shell",
"unstable": {
"version": [
- 20260423,
- 2254
+ 20260719,
+ 1729
],
"deps": [
"acp",
"shell-maker"
],
- "commit": "21a8c8b4e735cf3f35ac857b4857817971432265",
- "sha256": "0f8ds25x4fl1195jm4jn13wx791zn76my26f9xnxfslmiam6f36a"
+ "commit": "d5675782a24e6e6ea850d5015e6b7cacf305854c",
+ "sha256": "1l6pv6zr5630lygaf7lmbaic2pbjxbf5n873c8lzg60cfswfydnz"
},
"stable": {
"version": [
0,
- 50,
+ 62,
1
],
"deps": [
"acp",
"shell-maker"
],
- "commit": "68b8c394a4838fb54f7dbfc70cee38e7310f03a3",
- "sha256": "0njajpz51pbz4hqaq7lcvwaypilq1c9sdxsk6sdxgk1xpivqlxfb"
+ "commit": "4a4b98b008ce9dba2edf22dc3a265abd1679ab0d",
+ "sha256": "0i46dw0a1djr8yx239x51i3cqd11zqs1lcrdzi87r8gvy82bd7wk"
}
},
{
@@ -2244,16 +2256,16 @@
"repo": "halvin/agitjo",
"unstable": {
"version": [
- 20260415,
- 1451
+ 20260523,
+ 2048
],
"deps": [
"magit",
"markdown-mode",
"transient"
],
- "commit": "47f20e04ed09724b0859cade3cb52eae31274c13",
- "sha256": "046fcrhm0fhnq2fygbswbcyl21davbjirjl9mq7cdx5cl5x4kg5q"
+ "commit": "fa9737479f44c62f76e2dc6561ffb340d8eead3e",
+ "sha256": "07hf538qbj2anb3007i7vafmbb87szs5n4cimpmh2g97j2vzxwah"
},
"stable": {
"version": [
@@ -2365,33 +2377,33 @@
},
{
"ename": "ai-code",
- "commit": "3751d27902c40d37f780bc8304d9a54fb23cc929",
- "sha256": "1ans15163afvmh3l6mn1j8h5sbkivxqmf9v9wcbgs33xrnl6xc85",
+ "commit": "091b5d894f5a30a31790d1d834f14e2405955a3c",
+ "sha256": "039bx5s9pwjrf6cfbaiq10vx7jrgg8z05xyvv8i5p7pqmc3c06vn",
"fetcher": "github",
"repo": "tninja/ai-code-interface.el",
"unstable": {
"version": [
- 20260423,
- 1511
+ 20260719,
+ 2236
],
"deps": [
"magit",
"transient"
],
- "commit": "bb725e376479d0c6ac50f47fd89b7f8972db2465",
- "sha256": "0lzxd2v7v5fysna2ywh8zks5s51kf2naqw9mp3mcmbx482n5sv86"
+ "commit": "0a7839ccc93f9769a27aa382da581518bcbf7390",
+ "sha256": "14dfcwv0zb4hv15az1vwg6xvznxli8hfyjhl3s9g3f2l3qp5rqxf"
},
"stable": {
"version": [
1,
- 74
+ 900
],
"deps": [
"magit",
"transient"
],
- "commit": "e44a49ef51ab795538cb39238c9290c0ac2783c9",
- "sha256": "1ra6r227d5b7g0rynb8a3ngb9cpa3zjjjrbvb778bkc3h1fr6mz6"
+ "commit": "0a7839ccc93f9769a27aa382da581518bcbf7390",
+ "sha256": "14dfcwv0zb4hv15az1vwg6xvznxli8hfyjhl3s9g3f2l3qp5rqxf"
}
},
{
@@ -2438,29 +2450,29 @@
"repo": "MatthewZMD/aidermacs",
"unstable": {
"version": [
- 20251203,
- 2318
+ 20260719,
+ 1435
],
"deps": [
"compat",
"markdown-mode",
"transient"
],
- "commit": "6d0c41d1cfd24821fb32933edf8c0c2a9bb8c847",
- "sha256": "0mwh2ikw3kkbphm2f8grgygmib51azwisp5s7nljb17aq7ncdk3h"
+ "commit": "c548c5cf0d4a427a9c59d6e384ac1d96c285adbe",
+ "sha256": "0rk8h2vjzkrwzmqsrw2pf3hikbj10v5n6z7jjjjil8pqj146whjy"
},
"stable": {
"version": [
1,
- 6
+ 8
],
"deps": [
"compat",
"markdown-mode",
"transient"
],
- "commit": "9cd6796833b7f830b55d2e3dcc6ef05693bed61b",
- "sha256": "0fbhigzba5mj9303bvwn999dain916zqc59hvl2gk7v2i5gr1wmb"
+ "commit": "7496878820661a950ef1b28ce8814177b3010825",
+ "sha256": "0rn0va9k69bf5021w4b8g76m5lsvp2h8ch5ch4kb0060xmdnc2gb"
}
},
{
@@ -2609,15 +2621,15 @@
"repo": "alan-platform/AlanForEmacs",
"unstable": {
"version": [
- 20260209,
- 1113
+ 20260523,
+ 1330
],
"deps": [
"flycheck",
"s"
],
- "commit": "87eed317ea7eac483a33680fd230ffc9f0eb3297",
- "sha256": "1ky2znrnmsjl9vahlbkcrmab6cbjf5j7ja3iixb2wir3d712fifv"
+ "commit": "10d7a0a51451e9b023ac3dc0b24fdba9d81ecb2c",
+ "sha256": "11413241wr0sa913nvilkn5b0x70b22xhpr0gwn6c6f4qhzpw49c"
},
"stable": {
"version": [
@@ -2748,14 +2760,14 @@
"repo": "cpitclaudel/alectryon",
"unstable": {
"version": [
- 20260406,
- 2342
+ 20260525,
+ 2000
],
"deps": [
"flycheck"
],
- "commit": "86bac4eae28c2d6f27859a4ca8821a374e8b1c4f",
- "sha256": "1gfsrr9w2xj0synd9i0xzrrva7k6ngdf53j4aidh66wg75iihws1"
+ "commit": "bf99e72c54579460769984ba668e46c235ad18d8",
+ "sha256": "0nnzxhp3y98ay9sykig8v5fh468ysdn98dka3mb3wj4l3kwwf7qj"
},
"stable": {
"version": [
@@ -3091,15 +3103,15 @@
"repo": "mohkale/all-the-icons-nerd-fonts",
"unstable": {
"version": [
- 20240210,
- 1127
+ 20260614,
+ 1246
],
"deps": [
"all-the-icons",
"nerd-icons"
],
- "commit": "67a9cc9de2d2d4516cbfb752879b1355234cb42a",
- "sha256": "00klvdalj8051axxg50dq4wdbzzrfr7ayzq8a6zzpnbhzlq7j2f6"
+ "commit": "4583cf5e8cce73c35e8ec3195915ce693d703bb1",
+ "sha256": "0lc770zw5v3k97mi39ppkgag3p9i49wwxrmycw1n9264xpjvqcjk"
}
},
{
@@ -3283,11 +3295,11 @@
"repo": "jordonbiondo/ample-theme",
"unstable": {
"version": [
- 20240426,
- 1545
+ 20260611,
+ 1532
],
- "commit": "39ac29cf9a1229bb076964335fbd71cfb52e498b",
- "sha256": "1s2k1r3wwvwa3rkfsyg5y9386fl0v4qzlqriwldblpq5glyg40qq"
+ "commit": "6952b29a588c854084ca1360bed16c9bc2d48e37",
+ "sha256": "1jxlfqbgjwc4s5y8b7v3qhpqgx5klq5hfkxlqn9gygg2plc726xy"
}
},
{
@@ -3438,11 +3450,11 @@
"repo": "rolandwalker/anaphora",
"unstable": {
"version": [
- 20240120,
- 1744
+ 20260720,
+ 903
],
- "commit": "a755afa7db7f3fa515f8dd2c0518113be0b027f6",
- "sha256": "1mmil5ckb623wxxmvw1cfi1fycxiz7aalfjm768h7wc73xfa7ks4"
+ "commit": "d22ae8afd3b3bf6a383f6a6c27522893b57130b1",
+ "sha256": "10nn49csvxqljhj17v1qlqzhmzrx5lz7yzp5fa33xjy7gn7j1v8d"
},
"stable": {
"version": [
@@ -3596,28 +3608,28 @@
"repo": "kickingvegas/anju",
"unstable": {
"version": [
- 20260424,
- 156
+ 20260701,
+ 2139
],
"deps": [
"casual",
"markdown-mode"
],
- "commit": "7a700608e9143f8e29a533bdeee9a6f175df6d06",
- "sha256": "1gfwd0j1bwnggj0sjw1kcwx462qcvxjg1px2vfzmsh41zbxlv02x"
+ "commit": "f5d27108ffe5facb6886fab191068efd1faea39f",
+ "sha256": "0agkin9ph1mhfl3dr4p2ljs48npjgm70kpxd43vl5xgyz1dhkkfl"
},
"stable": {
"version": [
1,
- 2,
+ 8,
0
],
"deps": [
"casual",
"markdown-mode"
],
- "commit": "7a700608e9143f8e29a533bdeee9a6f175df6d06",
- "sha256": "1gfwd0j1bwnggj0sjw1kcwx462qcvxjg1px2vfzmsh41zbxlv02x"
+ "commit": "f5d27108ffe5facb6886fab191068efd1faea39f",
+ "sha256": "0agkin9ph1mhfl3dr4p2ljs48npjgm70kpxd43vl5xgyz1dhkkfl"
}
},
{
@@ -3643,11 +3655,11 @@
"repo": "anki-editor/anki-editor",
"unstable": {
"version": [
- 20260317,
- 715
+ 20260714,
+ 1156
],
- "commit": "982a9d141fe87b1378f6695c3804e30446cbeac2",
- "sha256": "14bcsx9f0lcbmw709qgjb20yrqdc0dfkbv7dgq7qva0j86z0gkih"
+ "commit": "4a55c3f937b176d31e36d484c196682cae9f9104",
+ "sha256": "02q4qh3hliah8h4648vbn13mw5xspps54kwp1k9gvxmnmz8ch85f"
}
},
{
@@ -3728,14 +3740,14 @@
"repo": "noctuid/annalist.el",
"unstable": {
"version": [
- 20240501,
- 1201
+ 20260531,
+ 1558
],
"deps": [
"cl-lib"
],
- "commit": "e1ef5dad75fa502d761f70d9ddf1aeb1c423f41d",
- "sha256": "1di8wknirx3ql9bqp940yy5p07n2x82wgqyvfmdxblagh7pcp8a8"
+ "commit": "0d958732b710a8e9edc4c70b2318570e1c7d4923",
+ "sha256": "062rxrs0hcd9zgjpb7bnyrlkvmsh66mp7lixfjal8v71fbvd8j77"
},
"stable": {
"version": [
@@ -3758,11 +3770,11 @@
"repo": "bastibe/annotate.el",
"unstable": {
"version": [
- 20251111,
- 1635
+ 20260514,
+ 1320
],
- "commit": "9c80b465297dce20901abaf0389a48951b6e030f",
- "sha256": "04d8737kjqavg8j062wf6z1fd7k8l25bcc7h82fgg9w485c953qk"
+ "commit": "347525024f319ab50735ef324e8900aecda3724c",
+ "sha256": "0b6mzkfk4wabhrriwya8gzly5sp5nvc80p491fw0ib8p3cg39504"
},
"stable": {
"version": [
@@ -3879,28 +3891,28 @@
"repo": "emacs-ansible/emacs-ansible",
"unstable": {
"version": [
- 20250613,
- 2354
+ 20260607,
+ 1852
],
"deps": [
"f",
"s"
],
- "commit": "7385222a4f209eca6d72d412c03da99097e2755f",
- "sha256": "0b5rrkxygxhnixbwhv5gsz3d216l2j6ljbvipdyysmvzv4fxmgwj"
+ "commit": "0d7bc93ad963677880d99c846a30ea6e6ed9eec5",
+ "sha256": "04zr6vswxnh3jqf180lv32s4f6bap8913fym2d2gnmjv7nb6wb3i"
},
"stable": {
"version": [
0,
4,
- 2
+ 3
],
"deps": [
"f",
"s"
],
- "commit": "7385222a4f209eca6d72d412c03da99097e2755f",
- "sha256": "0b5rrkxygxhnixbwhv5gsz3d216l2j6ljbvipdyysmvzv4fxmgwj"
+ "commit": "0d7bc93ad963677880d99c846a30ea6e6ed9eec5",
+ "sha256": "04zr6vswxnh3jqf180lv32s4f6bap8913fym2d2gnmjv7nb6wb3i"
}
},
{
@@ -4176,20 +4188,20 @@
"repo": "radian-software/apheleia",
"unstable": {
"version": [
- 20260422,
- 253
+ 20260619,
+ 1935
],
- "commit": "1720200b1271a9e70ebfc86c0f942ff02aefcdd1",
- "sha256": "19wwb71v7jpwhrk3y1pn39sb0knizfg1vrgscflgvcgk3qc8l3kr"
+ "commit": "14a0bb4454fb2cc3b5b377619288b742ce117da5",
+ "sha256": "0yp74vmwiav15igwcmgjngzylixw11ayrhyj3wg97w07sqxivlcr"
},
"stable": {
"version": [
4,
- 4,
- 3
+ 5,
+ 0
],
- "commit": "2bc2bb4cc2caad111e6f2f1b9daf20ec388101ff",
- "sha256": "1vs532hjkwj19laigqvvk11r0gwhv5vd8v6wh5598dzmfw3yh4bm"
+ "commit": "b5d120a419816f9d6b3d0e45f0951dd3d6a10b77",
+ "sha256": "181whpb774gv3k2xxswxkjhd3075r2dpgvdfmpsjqyl2s1jpn5fj"
}
},
{
@@ -4267,11 +4279,26 @@
"repo": "apparmor/apparmor-mode",
"unstable": {
"version": [
- 20260311,
- 140
+ 20260515,
+ 454
],
- "commit": "fd9c6f142602bf5ed730305419b2b7cad2269e57",
- "sha256": "1xw2v51m7x68xx36z41qqxy1vwd3aszfz4qkx8bhdic7n7xqv9xy"
+ "commit": "b0e4bbcd30aafd71f484c74164351af40ef885bf",
+ "sha256": "04kz786xwmsv8w879c9nwspgv0dgfkqmrg2frplhvyizdi0cfinl"
+ }
+ },
+ {
+ "ename": "apple-container-tramp",
+ "commit": "497d8e93d2e3faaa2bf6c63548bf43c5f6862f5b",
+ "sha256": "0kzx8dvrv36nppvw3l5zqfzri1clql2wr0x7513cp43k9971f70f",
+ "fetcher": "github",
+ "repo": "major1201/apple-container-tramp.el",
+ "unstable": {
+ "version": [
+ 20260504,
+ 1350
+ ],
+ "commit": "f47d58d029c594f4c9e9b1cfff79630de68a9cb5",
+ "sha256": "0545qhdnwdm3cqxa25mkll8qkr818za1wmp8vmnqbs0q9qckyf61"
}
},
{
@@ -4464,11 +4491,11 @@
"repo": "motform/arduino-cli-mode",
"unstable": {
"version": [
- 20250524,
- 901
+ 20260628,
+ 2219
],
- "commit": "aa93d49dc90c54e61b70f40fe88967fc0ae04927",
- "sha256": "1b84gaz8libqfapkgxfbbsbn5pvzxnm6b7c96vbxa0ry3jc0bd34"
+ "commit": "d5614acdca80871cf4db65843227223b5a0e3a2c",
+ "sha256": "03av4cy826kxi8lxl3asay044dxnax5wxlx3i7hbmya20rckczqh"
}
},
{
@@ -4680,20 +4707,20 @@
"repo": "bbatsov/asciidoc-mode",
"unstable": {
"version": [
- 20260222,
- 1804
+ 20260612,
+ 645
],
- "commit": "4b5e89bedc0453e63147e08cdd759cbf2e31be26",
- "sha256": "0gn8lcx2j6yrgh0wggnb6hjs5x1hwhvbc6g2f7vk42hsgz5skng4"
+ "commit": "8914fad451f9c7f9c2286cf18db5edaa51a92cd7",
+ "sha256": "07mmc2xg0dyrxsas5xqvfa3bmscww240707l5kf0l1k18dbxa06f"
},
"stable": {
"version": [
0,
- 1,
+ 4,
0
],
- "commit": "4b5e89bedc0453e63147e08cdd759cbf2e31be26",
- "sha256": "0gn8lcx2j6yrgh0wggnb6hjs5x1hwhvbc6g2f7vk42hsgz5skng4"
+ "commit": "aa836bb0aa25427914ef3a938ed218aedd9123d9",
+ "sha256": "07imzld1j3jkr2p327ha1h1qikzw8jn3hxqzin9rs4m8av5fn38g"
}
},
{
@@ -4835,20 +4862,20 @@
"repo": "SunskyXH/ast-grep.el",
"unstable": {
"version": [
- 20250703,
- 723
+ 20260702,
+ 238
],
- "commit": "3682f0cab0147e85d3f8ffc6b68b1dc30ffba5cd",
- "sha256": "01hcdqd4wccpynhfjgbvcm7rn343qkbfh61p2bkmsll29ias3lcs"
+ "commit": "28bc6e9ac21acf1d1ef58b962b6acd670c27e80f",
+ "sha256": "1li2aj2aaicpc291igzkfsvjdr85nnd27kc976389zn0ngqngyd4"
},
"stable": {
"version": [
0,
- 1,
- 2
+ 6,
+ 0
],
- "commit": "cb9e9c453abaf7852dda84707152e52ad7f9e910",
- "sha256": "08akfj0g27qy7a2l6p5rssinh5l2rgambzx95ggpdzg1rbzxw8yd"
+ "commit": "28bc6e9ac21acf1d1ef58b962b6acd670c27e80f",
+ "sha256": "1li2aj2aaicpc291igzkfsvjdr85nnd27kc976389zn0ngqngyd4"
}
},
{
@@ -5403,27 +5430,25 @@
"repo": "alezost/aurel",
"unstable": {
"version": [
- 20170114,
- 937
+ 20260429,
+ 458
],
"deps": [
- "bui",
- "dash"
+ "bui"
],
- "commit": "fc7ad208f43f8525f84a18941c9b55f956df8961",
- "sha256": "0mcbw8p4wrnnr39wzkfz9kc899w0k1jb00q1926mchf202cmnz94"
+ "commit": "c571cc44ea3b9aa96399056bff22919efffbbb06",
+ "sha256": "1h2x0424s9ia6wb4yd3rsq9xn90fzbydhqlqikgrf4mk1ab7pnl3"
},
"stable": {
"version": [
0,
- 9
+ 10
],
"deps": [
- "bui",
- "dash"
+ "bui"
],
- "commit": "fc7ad208f43f8525f84a18941c9b55f956df8961",
- "sha256": "0mcbw8p4wrnnr39wzkfz9kc899w0k1jb00q1926mchf202cmnz94"
+ "commit": "c571cc44ea3b9aa96399056bff22919efffbbb06",
+ "sha256": "1h2x0424s9ia6wb4yd3rsq9xn90fzbydhqlqikgrf4mk1ab7pnl3"
}
},
{
@@ -5619,26 +5644,26 @@
},
{
"ename": "auto-compile",
- "commit": "57a2fb9524df3fdfdc54c403112e12bd70888b23",
- "sha256": "08k9wqk4yysps8n5n50v7lpadwsnm553pv9p7m242fwbgbsgz6nf",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "0d7l6vc1vp0kg1rlh7nl6bf9w08sw67wci1q16br0g584bwh8cjz",
"fetcher": "github",
"repo": "emacscollective/auto-compile",
"unstable": {
"version": [
- 20260301,
- 1252
+ 20260601,
+ 1449
],
- "commit": "cc51aea86617cab6cb1ef76672a343f2bf3206c1",
- "sha256": "0pccv3jgl6grfl1rh0yspdcg2kfap0sn24gj5ps5vz6mqli85221"
+ "commit": "4db3a0e497feecc8b3dbeeefacdf363ae60a6392",
+ "sha256": "1kcmr2jb79qg6jx8pfw2yxgsiwx3hwgwglbjwamr8hv9swj5jdl1"
},
"stable": {
"version": [
2,
1,
- 3
+ 4
],
- "commit": "cc51aea86617cab6cb1ef76672a343f2bf3206c1",
- "sha256": "0pccv3jgl6grfl1rh0yspdcg2kfap0sn24gj5ps5vz6mqli85221"
+ "commit": "4db3a0e497feecc8b3dbeeefacdf363ae60a6392",
+ "sha256": "1kcmr2jb79qg6jx8pfw2yxgsiwx3hwgwglbjwamr8hv9swj5jdl1"
}
},
{
@@ -5986,11 +6011,11 @@
"repo": "mina86/auto-dim-other-buffers.el",
"unstable": {
"version": [
- 20250116,
- 1402
+ 20260624,
+ 950
],
- "commit": "d8591d048f97478e75c71830fb6d7c009351c73d",
- "sha256": "0ipx6gpgbap5jxkvhxxifllhcjyap552835jz26h9w3ppa4q1hig"
+ "commit": "cf0263073470190b85f6013066856126aac67d19",
+ "sha256": "047zvky0m51c31y6ai7g2y2y4zndrx3fv9ymvv1nlk595qc4rg4r"
}
},
{
@@ -6091,14 +6116,14 @@
"repo": "rranelli/auto-package-update.el",
"unstable": {
"version": [
- 20211108,
- 2025
+ 20260601,
+ 1804
],
"deps": [
"dash"
],
- "commit": "ad95435fefe2bb501d1d787b08272f9c1b7df488",
- "sha256": "00456kxd1zb5lcwkm211mhdgkl0b01pp4fbkl1ryvdnhddn83ipv"
+ "commit": "e966c6c95de1742d867250dc15b1c6bd570b6ea5",
+ "sha256": "06ndbwk6agzzymdw1zk1j12xa2cc8q2118bv482sjhvlm8asv7bj"
},
"stable": {
"version": [
@@ -6136,14 +6161,14 @@
"repo": "zonuexe/auto-read-only.el",
"unstable": {
"version": [
- 20200827,
- 1754
+ 20260521,
+ 1659
],
"deps": [
"cl-lib"
],
- "commit": "db209bf5b7f76f4c3dc4d0892fc6a24430779f29",
- "sha256": "0zb8n97x5ji9clyls7k5pj7pq3yms82b6wgkww6djcabb26b5xb4"
+ "commit": "206d4559762fe6ef9e91de8f9dc43e1e41c0f42c",
+ "sha256": "1vgi84yvpbvmsaydwhpzc5vwcj62lwijw91wpw4182gqfzbva9pf"
}
},
{
@@ -6540,14 +6565,14 @@
"repo": "jasonm23/autothemer",
"unstable": {
"version": [
- 20251114,
- 415
+ 20260530,
+ 2349
],
"deps": [
"dash"
],
- "commit": "e62bf83414abd8b1cefafb7480612faa30ed7878",
- "sha256": "0w7qrfl38qc64a6bansrmvzxcdrlfpkd4l41scgr242dgy4dnq45"
+ "commit": "99fd9b45ef6cc931fcf030b1a6c050ca3c17ce04",
+ "sha256": "1cw9j6vfkppzrcaxacb9hjnxwcds6nx1xwgyvhb9wv79pnigr7z6"
},
"stable": {
"version": [
@@ -6839,15 +6864,14 @@
"repo": "zkry/awqat",
"unstable": {
"version": [
- 20250727,
- 1902
+ 20260613,
+ 2054
],
"deps": [
- "alert",
- "s"
+ "alert"
],
- "commit": "52754b230c5796eb9c8aaeda87083855c4235f32",
- "sha256": "1r2q2amn3qry6k7z1wyyfmabb6kq5ggr8068apwpb1vc4jgc5prn"
+ "commit": "0ef8501dc31774cbc6b17f8b899609a45c1fe0c7",
+ "sha256": "03jm1hpl9mymbb1kfnf8a7kqd4j5zp18p35jff3642zh4bgwycy9"
}
},
{
@@ -7069,28 +7093,28 @@
"repo": "tarsius/backline",
"unstable": {
"version": [
- 20260101,
- 1825
+ 20260601,
+ 1450
],
"deps": [
"compat",
"outline-minor-faces"
],
- "commit": "ba263f5ea3dc1818c7a61b50acec52fe2cce02ca",
- "sha256": "02wk8qhy1ns1dfbgid7z77hjiywmx5ngv3bvli5h5js1zkj9fcr9"
+ "commit": "cc6e54e40bdbb725cdaf0cc95cef8cd48dce413f",
+ "sha256": "1jnxp817jc5b38xmfp67n17fyzib06fg5waly6zalnmcrsqdm2cq"
},
"stable": {
"version": [
1,
2,
- 2
+ 3
],
"deps": [
"compat",
"outline-minor-faces"
],
- "commit": "ba263f5ea3dc1818c7a61b50acec52fe2cce02ca",
- "sha256": "02wk8qhy1ns1dfbgid7z77hjiywmx5ngv3bvli5h5js1zkj9fcr9"
+ "commit": "cc6e54e40bdbb725cdaf0cc95cef8cd48dce413f",
+ "sha256": "1jnxp817jc5b38xmfp67n17fyzib06fg5waly6zalnmcrsqdm2cq"
}
},
{
@@ -7220,11 +7244,20 @@
"repo": "wbolster/emacs-balanced-windows",
"unstable": {
"version": [
- 20190903,
- 1120
+ 20260706,
+ 1545
],
- "commit": "1da5354ad8a9235d13928e2ee0863f3642ccdd13",
- "sha256": "1hsjg48jlfi6lc6izp9xcfqvxj7c0ivjrfsr2q3yv3s1iy2fz37l"
+ "commit": "f94f9cbe832147396bb0d67e687a9dc33ec2a2c5",
+ "sha256": "081k5qdvjp3f9swnn45azsy233x9sza9y1qj7sy85bj7xcrmz82q"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 1,
+ 0
+ ],
+ "commit": "f94f9cbe832147396bb0d67e687a9dc33ec2a2c5",
+ "sha256": "081k5qdvjp3f9swnn45azsy233x9sza9y1qj7sy85bj7xcrmz82q"
}
},
{
@@ -7334,11 +7367,11 @@
"repo": "tinted-theming/base16-emacs",
"unstable": {
"version": [
- 20260419,
+ 20260719,
235
],
- "commit": "8461432c62353f302b79bf0b2db2f99b83183dbe",
- "sha256": "1n36k7fax231x07n82licps5kvm682nz1adr93ly7np5434m0926"
+ "commit": "0fa7a37a5140cc64f44ef404309b8961d2e46562",
+ "sha256": "1ahay37adsv3givhcpc1jzl054sw9n8rslk3m786fjvqn4zn5h92"
},
"stable": {
"version": [
@@ -7505,11 +7538,11 @@
"repo": "bbatsov/batppuccin-emacs",
"unstable": {
"version": [
- 20260421,
- 1706
+ 20260703,
+ 608
],
- "commit": "4e9c240c332e745d58cf47ad900fdeefb01f707a",
- "sha256": "0xlhiybbnxgjgiqh88h9fp8q5gdkgwrjir2pm3afqmrhhzr3d933"
+ "commit": "5fc17c1c403bed4b7728ee0afbb4563749fd381d",
+ "sha256": "1gg69xxdalb5ylh2h7kii0ncp5ffj2501f0vzpmcwz31w47510w1"
},
"stable": {
"version": [
@@ -7992,15 +8025,28 @@
"repo": "pastor/ben.el",
"unstable": {
"version": [
- 20260424,
- 826
+ 20260626,
+ 1926
],
"deps": [
"inheritenv",
"seq"
],
- "commit": "139dcfef116e376138abddc7cc179cbe68f457fd",
- "sha256": "0mscx327acxv74c54lnb0xzsqnkbzrkrwngw6qkrkbqsllbyagwc"
+ "commit": "247054fe5da00ee4aee4607da0075935541017a9",
+ "sha256": "1rzs21l032awcpyq7alh2xy7ibkzqlhmph9jx8rbs6ml8wzyc0l6"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 12,
+ 13
+ ],
+ "deps": [
+ "inheritenv",
+ "seq"
+ ],
+ "commit": "247054fe5da00ee4aee4607da0075935541017a9",
+ "sha256": "1rzs21l032awcpyq7alh2xy7ibkzqlhmph9jx8rbs6ml8wzyc0l6"
}
},
{
@@ -8133,11 +8179,11 @@
"repo": "technomancy/better-defaults",
"unstable": {
"version": [
- 20251012,
- 2227
+ 20260621,
+ 1647
],
- "commit": "b4e566ddd368609c7df711c4f0d9cc345455aa0f",
- "sha256": "1jn2cp2hj62yl3ari0q7jdjw0cmnwzidd9xd1d2w3xwc998j8har"
+ "commit": "faf5c664472d01d978442b5e567470a51f9566c2",
+ "sha256": "02shdak3cy53qswbzyq6zzm1s26fwrwjf9mdzjmkfq5ddmdim1qz"
}
},
{
@@ -8274,20 +8320,20 @@
"repo": "kristjoc/bible-gateway",
"unstable": {
"version": [
- 20260404,
- 2018
+ 20260601,
+ 825
],
- "commit": "dcae05a4a3bae4d07cb6d7144f54d14651c56f61",
- "sha256": "1lnrl70qzx5c9j08gisyd1mzxm86wz6s2vimsk0c08z7kn58yhdb"
+ "commit": "2df8d0500aa842fbb60109e863a70c705dfe998d",
+ "sha256": "1d8wxk169gpv5h24fwav2532njl6hgl39pxk14rvljkw72bi6h9p"
},
"stable": {
"version": [
1,
6,
- 4
+ 7
],
- "commit": "fdca45e4f84c7743b4a57c3318114fa987fafb95",
- "sha256": "1lbfig3sz9n5lhw29p1q3c2rl4b1y9q47lgf3wpwca4hmdlz0zgk"
+ "commit": "2df8d0500aa842fbb60109e863a70c705dfe998d",
+ "sha256": "1d8wxk169gpv5h24fwav2532njl6hgl39pxk14rvljkw72bi6h9p"
}
},
{
@@ -8449,9 +8495,9 @@
},
{
"ename": "bibtex-capf",
- "commit": "a400d5b255b8aba48aa32fe0a503df476053e4eb",
- "sha256": "1014wj9wa8jv3vp9ddwqj205s37br7msfklv33ppwi14salqq9y5",
- "fetcher": "github",
+ "commit": "bbf2574e8c8be0f19149e4971ae6f1f2e7bd2b54",
+ "sha256": "07s0hnvyb4pc0awf9v78clgl9hhbvn8r2pn44nrllh5y6vxsr5s1",
+ "fetcher": "codeberg",
"repo": "mclear-tools/bibtex-capf",
"unstable": {
"version": [
@@ -8528,26 +8574,26 @@
"repo": "tarsius/bicycle",
"unstable": {
"version": [
- 20260101,
- 1825
+ 20260601,
+ 1451
],
"deps": [
"compat"
],
- "commit": "9da65dcb0e8ea6a9fe2b02d3be3cd4f2f4e29977",
- "sha256": "113aj4mc3dz199826sy69nja9qys3637947alq3mv185gbaz4gdd"
+ "commit": "b8919e56e7f20e4164002e9b4dba0268779b5645",
+ "sha256": "1mw1826lfvqibg0gxwa39mbas4d3m83xix3pgmscvpphidpnl61h"
},
"stable": {
"version": [
1,
1,
- 2
+ 3
],
"deps": [
"compat"
],
- "commit": "9da65dcb0e8ea6a9fe2b02d3be3cd4f2f4e29977",
- "sha256": "113aj4mc3dz199826sy69nja9qys3637947alq3mv185gbaz4gdd"
+ "commit": "b8919e56e7f20e4164002e9b4dba0268779b5645",
+ "sha256": "1mw1826lfvqibg0gxwa39mbas4d3m83xix3pgmscvpphidpnl61h"
}
},
{
@@ -8779,14 +8825,14 @@
"repo": "eki3z/binky.el",
"unstable": {
"version": [
- 20250123,
- 1928
+ 20260719,
+ 1537
],
"deps": [
"dash"
],
- "commit": "29f2492366ced8ff13802faf4a1c6df5e0c9cb07",
- "sha256": "16qvz52lqrv3gv9fvnm8hfxghlnim7gf05y7l0i3zwgcmc2nhk3n"
+ "commit": "e24c4691d231f4b0f649e155d2c93cd83d3dc073",
+ "sha256": "1wrp3ys5lv10ny2fspg5sqbwcxlmn315q7g8icjsjnk64dbdicvs"
},
"stable": {
"version": [
@@ -8809,8 +8855,8 @@
"repo": "SqrtMinusOne/biome",
"unstable": {
"version": [
- 20250623,
- 1954
+ 20260607,
+ 1500
],
"deps": [
"compat",
@@ -8818,8 +8864,8 @@
"request",
"transient"
],
- "commit": "b26c0a6ec533ba5c3524721af224708de9362979",
- "sha256": "0fsh21fgrqw0mlh1kwn7idk0sdah5yxlwwcz8f847pj0w1n4rvxg"
+ "commit": "77a94f3c5210b80b63d5002c4780e542cd98a65f",
+ "sha256": "1n2am7gf28nlz7pxb02x5nvy0911x0z61az9vasl9i47ff9yzch4"
}
},
{
@@ -8895,22 +8941,22 @@
},
{
"ename": "bitbake",
- "commit": "da099b66180ed537f8962ab4ca727d2441f9691d",
- "sha256": "1k2n1i8g0jc78sp1icm64rlhi1q0vqar2a889nldp134a1l7bfah",
+ "commit": "a5308691e59a7803320af6792a92546d004317af",
+ "sha256": "0xqpgg5b5ahqilvfc71sva0can04cbr5l9h3mgg1l44csmvgz4wb",
"fetcher": "github",
- "repo": "canatella/bitbake-el",
+ "repo": "danielcmccarthy/bitbake-el",
"unstable": {
"version": [
- 20251230,
- 1237
+ 20260712,
+ 1615
],
"deps": [
"dash",
- "mmm-mode",
+ "polymode",
"s"
],
- "commit": "44513a330d3bb2bceb1bfd99b4eb63b37f681369",
- "sha256": "0zbbxgi87594aikvc89fq66sky9xp1kfmif74jbdkyfjjkydkzz0"
+ "commit": "f626d37727df0550aa2afd3f1b0ce81f38be18a3",
+ "sha256": "0jzig4hyia6zi31qygh8c62jzfas7vz7kp3nfh8s1fvqx8pj8lrk"
}
},
{
@@ -9045,11 +9091,11 @@
"repo": "gdonald/blackjack-el",
"unstable": {
"version": [
- 20260418,
- 1402
+ 20260705,
+ 2046
],
- "commit": "3930d197d1f8f37de0dbb6c9875ef5279e16cdfa",
- "sha256": "0zxpiz9kjicyf2lhq2rclj2cqaf3f518xwlm48dcrkr1hjn6yqac"
+ "commit": "7f98c9d15fa2d42abb2643235f73a9513b46c227",
+ "sha256": "0zsia1p1vch1ph24k7nq0q0cb7f4kz2dk75sywkh9rdfcs8cijgm"
},
"stable": {
"version": [
@@ -9084,6 +9130,30 @@
"sha256": "0n0889vsm3lzswkcdgdykgv3vz4pb9s88wwkinc5bn70vc187byp"
}
},
+ {
+ "ename": "blamee",
+ "commit": "6a860645041c1ca63437f4ce06ad73bfdd3ff356",
+ "sha256": "1hv320apk7lj7sk3yqpam33bw1b4czqqakc5m5m13x71m06c4s3v",
+ "fetcher": "github",
+ "repo": "fvi-att/blamee",
+ "unstable": {
+ "version": [
+ 20260619,
+ 227
+ ],
+ "commit": "60bb7e7dd29e0e0fabd172e91d362b00fac363c4",
+ "sha256": "0i5kaidka9668wiarpkkj0s9s35r7hmmp78z57nhz3nqn7nc7315"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 0,
+ 5
+ ],
+ "commit": "60bb7e7dd29e0e0fabd172e91d362b00fac363c4",
+ "sha256": "0i5kaidka9668wiarpkkj0s9s35r7hmmp78z57nhz3nqn7nc7315"
+ }
+ },
{
"ename": "blamer",
"commit": "412fea9e0564929310918096bae95636ba885a7c",
@@ -9312,14 +9382,48 @@
"repo": "lapislazuli/blue.el",
"unstable": {
"version": [
- 20260422,
- 644
+ 20260709,
+ 1248
],
"deps": [
"magit-section"
],
- "commit": "16c7092e7483cf7b29511374bbc8c80a1359b6b9",
- "sha256": "1f0glcg6y081wqgidakn56bdy6cx87fxw4zhdxc4l0vcsr98rc7m"
+ "commit": "3668ca7f627f3497d907293f38dcfbe33fb6f4f7",
+ "sha256": "1gqcbxr3dr2wi1r0fqzm4zvgsqhw6l9zph81h5k23nzw62aryx0i"
+ }
+ },
+ {
+ "ename": "bluesky",
+ "commit": "100e7d9b24c01f98456197ad904983c6758219ff",
+ "sha256": "07mhiqyv7mxv7hplsykmfnqpblgyhr63g6crrgl5fn7sl9fd3ysn",
+ "fetcher": "github",
+ "repo": "ahyatt/emacs-bluesky",
+ "unstable": {
+ "version": [
+ 20260618,
+ 147
+ ],
+ "deps": [
+ "futur",
+ "plz",
+ "vui"
+ ],
+ "commit": "b4b7957a3af0533918535486f44afcb808d38d24",
+ "sha256": "1vrbspbn58b90fx6vvwnndlvzp05znvsr0gyz3akk7p9s8a0svvn"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 1,
+ 3
+ ],
+ "deps": [
+ "futur",
+ "plz",
+ "vui"
+ ],
+ "commit": "f88486f57bde983f24d1cad04525039ca5d37344",
+ "sha256": "1frmgg7zy1a2mc620v2rr0hr3m2m88521if40v2imysf9lp429ny"
}
},
{
@@ -9330,11 +9434,11 @@
"repo": "rwv/bluesound-el",
"unstable": {
"version": [
- 20251022,
- 1406
+ 20260616,
+ 831
],
- "commit": "60d7f422483bd7f3cf23983160e28ecff9c14b38",
- "sha256": "1bg2y0ny4yszs03hj7aiq8mm57zbind5i0pk17bms12sl2ahkm82"
+ "commit": "3a99edc4232d41a9cd13b846c7a4f27036256d29",
+ "sha256": "0jrch7sbry41r630yxwvcqzzi1w6nszr615xmx4v2dly70w3khj0"
},
"stable": {
"version": [
@@ -9722,28 +9826,28 @@
"repo": "emacscollective/borg",
"unstable": {
"version": [
- 20260422,
- 1711
+ 20260701,
+ 1437
],
"deps": [
"epkg",
"magit"
],
- "commit": "5aa950cf07c3f16528232a81dcedd792f74c0471",
- "sha256": "1ygv5hvbr9ygkdab4mqc94f6z7h10yfbllxv8v48wfx902ys4wjs"
+ "commit": "a844569c8ef24408ba0df31d5cd58be9d955efce",
+ "sha256": "1sywja538dm77p4jmd83hvymmj98hqzpvmnsg3zigrjyd0ywr28y"
},
"stable": {
"version": [
4,
- 4,
- 3
+ 5,
+ 2
],
"deps": [
"epkg",
"magit"
],
- "commit": "8d0e26e6c16c1e503785b3e6b62a9a6d55b4e472",
- "sha256": "094ykn4niknciqy71v74ry70imj6xri6wrm477yavwanzdr4b2rc"
+ "commit": "a844569c8ef24408ba0df31d5cd58be9d955efce",
+ "sha256": "1sywja538dm77p4jmd83hvymmj98hqzpvmnsg3zigrjyd0ywr28y"
}
},
{
@@ -9754,11 +9858,11 @@
"repo": "fourier/borland-blue-theme",
"unstable": {
"version": [
- 20160117,
- 1321
+ 20260620,
+ 1425
],
- "commit": "db74eefebbc89d3c62575f8f50b319e87b4a3470",
- "sha256": "0yzfxxv2bw4x320268bixfc7yf97851804bz3829vbdhnr4kp6y5"
+ "commit": "c24ef5aa16fed6727696b0ea71bf154889e4ee0a",
+ "sha256": "1hwyyv20xkb4ygqfk0nyp2z59bmxxiycnca6yi9iifq7cwwiq7yi"
}
},
{
@@ -9890,17 +9994,26 @@
},
{
"ename": "bracket-face",
- "commit": "890e94376ea0b6ada2c49a0a3e11b2a59aab7caa",
- "sha256": "1j9iczccp494yqviqawphhndzyz6hsd21fqvsj7cd20balgz2g3g",
+ "commit": "fefa3d4feab1be45b0169c31781a1e995d0963ae",
+ "sha256": "1wj0mmn8wz7srm2rzh1hj2wd3szhnbrrj7xj77n94r3cmzffaaq7",
"fetcher": "github",
"repo": "tarsius/paren-face",
"unstable": {
"version": [
- 20260101,
- 1846
+ 20260601,
+ 1519
],
- "commit": "2c279a236404b2eebacb435aa92d5e9c97939c03",
- "sha256": "06ypi3hgrr9rigcb9gy5j4l9f3z7lnz1rssv1pqda55srkvcp39x"
+ "commit": "57307b5ea75e07d2dc0c64c7e3eeadee3369a7aa",
+ "sha256": "11g3wg79kvg4nkm2knabpzsf0lcpnak94kkdb5cscp3w3fg3x5a7"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 2,
+ 4
+ ],
+ "commit": "57307b5ea75e07d2dc0c64c7e3eeadee3369a7aa",
+ "sha256": "11g3wg79kvg4nkm2knabpzsf0lcpnak94kkdb5cscp3w3fg3x5a7"
}
},
{
@@ -10115,20 +10228,20 @@
"repo": "browse-kill-ring/browse-kill-ring",
"unstable": {
"version": [
- 20251208,
- 1041
+ 20260503,
+ 1620
],
- "commit": "26ea5759c996e782abadc61b85c5f9324d1d1dae",
- "sha256": "1wr0adcbb6l9ma5lnjq37w0f7m7w7vw77f7jvm53x3vw0cpz3mmv"
+ "commit": "39d65a830b93530c9bd68a7dc14353cbffd1d01f",
+ "sha256": "01v64b8p0nzqczv3sjd6qacdh6lm635w5hndqk76ydxz5nga89n5"
},
"stable": {
"version": [
2,
- 0,
+ 1,
0
],
- "commit": "2a7acf98c348c4f405a6b2ab216224ca14915be8",
- "sha256": "0y9m6cv70pzcm0v2v8nwmyh1xx40831chx72m85h5ic5db03gy7b"
+ "commit": "1fa2c611f80ccdadfe766e3e7f4272b0f5d1dd28",
+ "sha256": "0xm857gs7xj5z9l8zfkdh87j3r6kszj1jwzzx4w0wafr69dnyjwc"
}
},
{
@@ -10161,6 +10274,25 @@
"sha256": "08qz9l0gb7fvknzkp67srhldzkk8cylnbn0qwkflxgcs6ndfk95y"
}
},
+ {
+ "ename": "browsel",
+ "commit": "d771cf4923d77a6908addf93352ddb88f24f0275",
+ "sha256": "0w6p75nnv6qyjczqs8ypibn636lwk75wl3zzb1wk0cxxjbywa1cs",
+ "fetcher": "github",
+ "repo": "dmgerman/browsel",
+ "unstable": {
+ "version": [
+ 20260629,
+ 542
+ ],
+ "deps": [
+ "org",
+ "websocket"
+ ],
+ "commit": "805a4162762c3a1e60ebb791007c788bde0d0be0",
+ "sha256": "0n6bb6pj9giynxkxxkr6zw6h16i4sjb9a9kh1665kp8lisk2wkdj"
+ }
+ },
{
"ename": "browser-hist",
"commit": "bc155dcf3df95ab12a305d0f2cf67a04bf4bc82a",
@@ -10169,11 +10301,11 @@
"repo": "agzam/browser-hist.el",
"unstable": {
"version": [
- 20250501,
- 1450
+ 20260425,
+ 1930
],
- "commit": "1cd80081feaab99fef9e8eadd55d68b3cef90144",
- "sha256": "12jarw5sca6r171lzba727xbii6xjlv432j8frgkph4r0k0946id"
+ "commit": "aab0a364077bfbf5559085086545d30bbaf7ac5e",
+ "sha256": "04xmn00pvnzralw4y8j3ilf7lprv5h01kmasyxnnr99ndphs8q62"
}
},
{
@@ -10318,14 +10450,14 @@
"repo": "astoff/buffer-env",
"unstable": {
"version": [
- 20250516,
- 1223
+ 20260604,
+ 645
],
"deps": [
"compat"
],
- "commit": "fc5cab4db55f0b95c4b97fbe3104e394da34b91a",
- "sha256": "0a30li0s06qviz44cdnbw1mh0kxlap9zzwa2cfdd79xj8aj5r3z4"
+ "commit": "81968582b2dbfd5171b57206b44a4bb8fc31cc69",
+ "sha256": "1bfc9yxirwm2z5q58w3v9lr6sb4v4yivirmmpk56qw6zxk9c7jbj"
}
},
{
@@ -10362,20 +10494,20 @@
"repo": "jamescherti/buffer-guardian.el",
"unstable": {
"version": [
- 20260316,
- 1912
+ 20260715,
+ 1805
],
- "commit": "0bffb2bf0ab5b54e1dd61b773cb453f8dff33636",
- "sha256": "1xp8hhys1x278dskwzfrc5f92jzzjhq2csnndjhy1n3fxqi3gabi"
+ "commit": "e56fe46b8588dd851406e5d5264644898730ea20",
+ "sha256": "10a48yfn0x55mv56aiwpza9pchlxb8532psg0rfjzhdq3psx4rmi"
},
"stable": {
"version": [
1,
0,
- 0
+ 1
],
- "commit": "0bffb2bf0ab5b54e1dd61b773cb453f8dff33636",
- "sha256": "1xp8hhys1x278dskwzfrc5f92jzzjhq2csnndjhy1n3fxqi3gabi"
+ "commit": "44a692448659e529a9b6d5a1b36b40a66601376f",
+ "sha256": "16lb8f38qgf8rnh9k9ik00g6qrilv1dx91qpsia94kld85ympwqn"
}
},
{
@@ -10386,27 +10518,28 @@
"repo": "plandes/buffer-manage",
"unstable": {
"version": [
- 20241019,
- 1748
+ 20260713,
+ 121
],
"deps": [
"choice-program",
"dash"
],
- "commit": "3d338b1e64f256ccb70adf81de4c04bcda7eb8d8",
- "sha256": "122nwyakicv72jxwrrjcg5j2arlhqqzlislfsy48920jjz47ngk0"
+ "commit": "f32c756a261aebca0a864e41958097b30690e171",
+ "sha256": "0sq3h0r7nr2x129f5b8gcjxmq90myixrmi9xggf9q40861jqjqwp"
},
"stable": {
"version": [
1,
+ 2,
1
],
"deps": [
"choice-program",
"dash"
],
- "commit": "819bbfd9ae2f028361f484bc3b60d751623a2df5",
- "sha256": "0g79xcq0jf8p1cpsz3fifjpyaidkr0b2zm8sf11n8li4hfqmr10d"
+ "commit": "f32c756a261aebca0a864e41958097b30690e171",
+ "sha256": "0sq3h0r7nr2x129f5b8gcjxmq90myixrmi9xggf9q40861jqjqwp"
}
},
{
@@ -10500,14 +10633,14 @@
"stable": {
"version": [
3,
- 7,
- 2
+ 8,
+ 0
],
"deps": [
"cl-lib"
],
- "commit": "cdc66804b8a1ec7ddf94d99c7f24b801148b64df",
- "sha256": "0lz7bjmxzxkri6mvqk6lrl6dp58as6py3i41hkfkj9zjmjvsl589"
+ "commit": "8d67ed8c9ea182abdcf457e0c247ab44675def9e",
+ "sha256": "07rjf3j44kpgcizx0cmdhccbyf0dd9pxv7i6zic2vlq1jvhj9mci"
}
},
{
@@ -10518,20 +10651,20 @@
"repo": "jamescherti/buffer-terminator.el",
"unstable": {
"version": [
- 20260404,
- 1551
+ 20260715,
+ 1822
],
- "commit": "19ff0cc0096ceed961e2a4ea95124cd3a38ce966",
- "sha256": "1y9398p87sl2gxkg1qyk0vam7s9rja2vx3zgzrliipc26s4rvx75"
+ "commit": "68dbf7e34babe0467886132c641c54372d369acb",
+ "sha256": "100gypdg3v9w3pmv4ryy8fjv6k79mff8r2zjx0ayx7j4q2mcm3az"
},
"stable": {
"version": [
1,
2,
- 4
+ 5
],
- "commit": "f4f3733863e90dcf90e2d6b3cdbdf67d036f37ad",
- "sha256": "08cyrvz9bnf3s1b99zamyi77jvlcy7fq8wkj962bk19ykwqf3dbn"
+ "commit": "0f31cbbb1a8368f08b486525f419dc3d059f05df",
+ "sha256": "0m7l6a6dmjaxq76g2kxnx2g9ayp3h2r8v9liz8djskdllaxkxvyd"
}
},
{
@@ -10635,20 +10768,20 @@
"repo": "jamescherti/bufferfile.el",
"unstable": {
"version": [
- 20260401,
- 233
+ 20260627,
+ 1319
],
- "commit": "05b893762ede97f59923684868a4ba26e82c4f75",
- "sha256": "1py13x9bdmxjs1j1awplqpvvq6gd7c7b8vxxvm1n0lvpggb2sgqh"
+ "commit": "e60be7084d5395617565531efab49718fe7c1a36",
+ "sha256": "0lhcq7z61s1z3n41nskc8lkpp6k2a4766cjibbij1sjhrfhlgbj6"
},
"stable": {
"version": [
1,
0,
- 6
+ 8
],
- "commit": "5a78bf05443d60d651aaadcb8855d84b39bab182",
- "sha256": "157hs1wigczs7l674j3aml7hlng806kafdryix939v9xrv58z8lx"
+ "commit": "e60be7084d5395617565531efab49718fe7c1a36",
+ "sha256": "0lhcq7z61s1z3n41nskc8lkpp6k2a4766cjibbij1sjhrfhlgbj6"
}
},
{
@@ -10745,26 +10878,19 @@
"repo": "alezost/bui.el",
"unstable": {
"version": [
- 20210108,
- 1141
+ 20260502,
+ 730
],
- "deps": [
- "dash"
- ],
- "commit": "ab62fcefc3c7ddf5e5d64c18045148a3c297592d",
- "sha256": "1vcfrm776y108kibkiabdzq0rbgqx0wwx6hqm2r87bbsfqxhbbrz"
+ "commit": "4319e1bf3ff94ff0568eed280ac1f980a4b68679",
+ "sha256": "1645v8h2szhmy2ahzf6f2izc834k00gpik5qmmpdysw50p90d3n3"
},
"stable": {
"version": [
1,
- 2,
- 1
+ 3
],
- "deps": [
- "dash"
- ],
- "commit": "9162c24b75799857d54838d961c60776ffcd657e",
- "sha256": "0sszdl4kvqbihdh8d7mybpp0d8yw2p3gyiipjcxz9xhvvmw3ww4x"
+ "commit": "5be69e47d5fa4e48a6c8f75d6b85f4c32a31398c",
+ "sha256": "1dwmx7fmfg6jcwplk2pds56vvcy425plhfzajm52i5ysi2qka6p1"
}
},
{
@@ -10975,11 +11101,11 @@
"repo": "jorgenschaefer/emacs-buttercup",
"unstable": {
"version": [
- 20260411,
- 2019
+ 20260512,
+ 2141
],
- "commit": "57d03004cc730678bcdefb91ad294824975cfea4",
- "sha256": "1b55cfh4wr40max2c42crvaa6wid7a83g28yximsin98i32q5f5r"
+ "commit": "39c8e762408a166a5afa03b8e79dd8d1a0de5caa",
+ "sha256": "1k5x12mn8xp4wyalxwjc86zl96ai3f62ia06mfavkkzm7s90smlg"
},
"stable": {
"version": [
@@ -11214,11 +11340,11 @@
"repo": "Michael-Garibaldi/cacao-theme",
"unstable": {
"version": [
- 20251104,
- 2135
+ 20260519,
+ 1959
],
- "commit": "72c1cff056fcfbada298d32811b14988dff1cf6d",
- "sha256": "1xx5zqppl91bj9flrphr215i62z7zw3lcq2iar0l452q5jqxyygd"
+ "commit": "73d8f81b7c9d2957cf7201d89a7a81bb673af03f",
+ "sha256": "0k6kgx2lxikirp5isqc5jk9fmkdlphsdmvrsww5r4gnp45wjcd85"
}
},
{
@@ -11552,14 +11678,14 @@
"repo": "kiwanami/emacs-calfw",
"unstable": {
"version": [
- 20251030,
- 845
+ 20260426,
+ 925
],
"deps": [
"calfw"
],
- "commit": "57be107b20625c13ed010cb0f70a603a61d47629",
- "sha256": "0hr55mwqk8h2hx2lwdlwrwq2hjwrxvjjbnwzzv4rr0ywqpxf6g5r"
+ "commit": "24fa167af96a6e677aea7c6b9385f669b550ee2f",
+ "sha256": "1i4ww2r26xr1f8nh1fssh679h0j08h3r3mqkynxaxvjc3bz794s6"
},
"stable": {
"version": [
@@ -11651,31 +11777,30 @@
"repo": "beacoder/call-graph",
"unstable": {
"version": [
- 20260212,
- 649
+ 20260713,
+ 638
],
"deps": [
"beacon",
"ivy",
"tree-mode"
],
- "commit": "38cb7a4488af63208d7ee1766a141453518e0abc",
- "sha256": "00yn00kgski6nyfxjjqr1cxyf725dnl81v6chy0kc94mxnww8ybr"
+ "commit": "99cab0f3829632f39f0e76f4e992c7bd988203a7",
+ "sha256": "0y3lmb8232qv2gkqc35qc3ipmc8jlp1cni4dbhl1aqgvhwjma1jq"
},
"stable": {
"version": [
- 0,
1,
- 0
+ 0,
+ 6
],
"deps": [
- "cl-lib",
- "hierarchy",
+ "beacon",
"ivy",
"tree-mode"
],
- "commit": "0bbe292b1b9c7ba1d8a65ed5e475f6a53f5f9f27",
- "sha256": "0kckjs7yg8d04nir5z3f00k05272kgma98794g0ycgfn1vrck0h0"
+ "commit": "99cab0f3829632f39f0e76f4e992c7bd988203a7",
+ "sha256": "0y3lmb8232qv2gkqc35qc3ipmc8jlp1cni4dbhl1aqgvhwjma1jq"
}
},
{
@@ -11686,20 +11811,20 @@
"repo": "kickingvegas/calle24",
"unstable": {
"version": [
- 20260326,
- 1749
+ 20260506,
+ 2210
],
- "commit": "1ebc385496a600ee492df4abd55cbf7b899145d5",
- "sha256": "06cbdpysya1kkh3g0cjih5k88al30xc8jcr2arslmdn4zn50ifcm"
+ "commit": "24d6240209b46c5005121d14cba3fae0e0ff257f",
+ "sha256": "18scb447smgg9lmpvk3mymh85k9yb230kc30a4c0ksbr692ppfx8"
},
"stable": {
"version": [
1,
1,
- 3
+ 4
],
- "commit": "1ebc385496a600ee492df4abd55cbf7b899145d5",
- "sha256": "06cbdpysya1kkh3g0cjih5k88al30xc8jcr2arslmdn4zn50ifcm"
+ "commit": "24d6240209b46c5005121d14cba3fae0e0ff257f",
+ "sha256": "18scb447smgg9lmpvk3mymh85k9yb230kc30a4c0ksbr692ppfx8"
}
},
{
@@ -11813,25 +11938,25 @@
"repo": "minad/cape",
"unstable": {
"version": [
- 20260419,
- 1847
+ 20260519,
+ 1021
],
"deps": [
"compat"
],
- "commit": "2e15e1909754752f66096dde1b8d639d6eb25f35",
- "sha256": "0lhjavwiyp5vd9i6xcr1g4mcb53fxmqyq0yx5f5sp00mcp6y3kg5"
+ "commit": "c99911b08831c26179145686b4beffa96f1f8a68",
+ "sha256": "1qnqn27jay3gffqj5vm1bfsd8qaqx7jixja2y2i9f0r7hlh399ny"
},
"stable": {
"version": [
2,
- 6
+ 7
],
"deps": [
"compat"
],
- "commit": "2b2a5c5bef16eddcce507d9b5804e5a0cc9481ae",
- "sha256": "18pdm8dlvzjry7xxx3yyka7rmrx94cvwkhwiagxcfprk6yinx21z"
+ "commit": "c99911b08831c26179145686b4beffa96f1f8a68",
+ "sha256": "1qnqn27jay3gffqj5vm1bfsd8qaqx7jixja2y2i9f0r7hlh399ny"
}
},
{
@@ -11851,11 +11976,11 @@
"stable": {
"version": [
1,
- 4,
+ 5,
0
],
- "commit": "8b892a8a11a632f5d52b877a49728808a142379a",
- "sha256": "17dmyq3v6xj2zphbr52rirbq7bwxw9gg0lalwsv03y8lkhw4ms0a"
+ "commit": "373e61ec89e2359f1c362e9b2eadc552f4779306",
+ "sha256": "0p6zb9icy2cjj6y8bj2ai7csghak5aix8wld3jhvddf00diwb7fq"
}
},
{
@@ -11950,11 +12075,11 @@
"repo": "peterstuart/cargo-transient",
"unstable": {
"version": [
- 20241204,
- 1217
+ 20260718,
+ 1155
],
- "commit": "b75511f911189b6b6c47976dd970eeb80ccfb3ee",
- "sha256": "1s1kjc7xg55lnwn5ngdp89hnh2qp42x10cyqlji268xiglx0xzs2"
+ "commit": "a1fac6ce76d32317fd9f6bcdcc86fca46460c709",
+ "sha256": "1k3mzxj49f680dxzla58xn1yg9s93rs1qj2ig0a9ay12z3zpr5mr"
}
},
{
@@ -12141,28 +12266,28 @@
"repo": "kickingvegas/casual",
"unstable": {
"version": [
- 20260416,
- 126
+ 20260718,
+ 1803
],
"deps": [
"csv-mode",
"transient"
],
- "commit": "6a3fbb40d3369614f36d9a37035942fa57572c5b",
- "sha256": "06i7zv7x8cs87qjpvsjqg2bi68pyw2j0z9pnzbsjj81pafmm2xdy"
+ "commit": "cadbeab2ec45804e63a328202c9a82fbed2413c5",
+ "sha256": "1dr4bdxm5c69kpn0312a9jxl1ds6m66dr0x1571993qga4m67aqn"
},
"stable": {
"version": [
2,
- 16,
- 0
+ 17,
+ 1
],
"deps": [
"csv-mode",
"transient"
],
- "commit": "6a3fbb40d3369614f36d9a37035942fa57572c5b",
- "sha256": "06i7zv7x8cs87qjpvsjqg2bi68pyw2j0z9pnzbsjj81pafmm2xdy"
+ "commit": "cadbeab2ec45804e63a328202c9a82fbed2413c5",
+ "sha256": "1dr4bdxm5c69kpn0312a9jxl1ds6m66dr0x1571993qga4m67aqn"
}
},
{
@@ -12408,15 +12533,15 @@
"repo": "emacs-lsp/emacs-ccls",
"unstable": {
"version": [
- 20250825,
- 531
+ 20260507,
+ 1746
],
"deps": [
"dash",
"lsp-mode"
],
- "commit": "80981d751198b59a7960a5437cb42a4d9974f254",
- "sha256": "02crd43hxk2b8pdwnihp3lchb1wbba0whj3jwhg4yzxn32zlgw1y"
+ "commit": "f728c92e33844f1da54cb47ecb4e44160f2042a8",
+ "sha256": "1mmz7dxj577lr8viyqpcjdqxla1jabm96fhdxvxw13qvfm0c2v2s"
}
},
{
@@ -12784,7 +12909,7 @@
"repo": "worr/cfn-mode",
"unstable": {
"version": [
- 20260419,
+ 20260705,
807
],
"deps": [
@@ -12792,8 +12917,8 @@
"s",
"yaml-mode"
],
- "commit": "2813707d1f2c98562fa873624abc79ce49db969c",
- "sha256": "0kc3mb0q86wc9ajmdvb26wpd0fg4gllgg8s3pfb49w8qgz7z02ba"
+ "commit": "407094bd072103d43fddb3e186077d65f4f62f26",
+ "sha256": "0igcfj6c89mbvw5wpfhqihfwjxi851k89dagj3mfchdwrbfn7xvs"
},
"stable": {
"version": [
@@ -13498,26 +13623,26 @@
"repo": "breatheoutbreathein/chordpro-mode.el",
"unstable": {
"version": [
- 20250814,
- 301
+ 20260711,
+ 623
],
"deps": [
"compat"
],
- "commit": "ae6db74f2078e4ee3d6262ac1344df9c1ab87527",
- "sha256": "03aqw9385f5xdhphhm352n66yi2fmah6n43wrnr850d3mq5485g0"
+ "commit": "9d7b242b06453aaaa3fb3d1cca438ebcd478979b",
+ "sha256": "13447a0cc0jhxxmjhazv0hshbr13vpx22r30xhxm38c4hq7rfalk"
},
"stable": {
"version": [
2,
- 6,
+ 7,
0
],
"deps": [
"compat"
],
- "commit": "c4167676831c790240610cfb4b5bbef93b5ddd49",
- "sha256": "0x0a1990fip335ajd6zs90wq6lzb89gxaxr28nniyifrix8q8cxb"
+ "commit": "7a412da298dcc290050c4c6ba3571c0975a815a9",
+ "sha256": "14cy93yzzb7qy01mig9kkwnahmr8awh5ip4fxkky0a4c16pcw4dr"
}
},
{
@@ -13745,8 +13870,8 @@
"repo": "clojure-emacs/cider",
"unstable": {
"version": [
- 20260417,
- 1318
+ 20260718,
+ 1302
],
"deps": [
"clojure-mode",
@@ -13758,17 +13883,18 @@
"spinner",
"transient"
],
- "commit": "b9e8a26197f5a2a6a8d1dfb21ef5eae6fe17e0b6",
- "sha256": "11v3d5gl4p2iqfym9nxcdwyvyyzal9dkri6wwfd74w0cgkgrlw46"
+ "commit": "03bffb62b7c30250979a9b4512c210f165dc36c9",
+ "sha256": "1251fs6namlghmgy581mw7lijv9fnwn68pfah6pjgn8vmqdzk041"
},
"stable": {
"version": [
- 1,
- 21,
+ 2,
+ 0,
0
],
"deps": [
"clojure-mode",
+ "compat",
"parseedn",
"queue",
"seq",
@@ -13776,8 +13902,8 @@
"spinner",
"transient"
],
- "commit": "c71bc65af7709667b0cc77306f4e3d5befe86d27",
- "sha256": "19wx9mc488qipm08s7hc0zrfmiylw577lmf3jpvqcjq7amx14jgc"
+ "commit": "39c70c0f5f7985704c14e3254ca8a1fbd15d1088",
+ "sha256": "18i5ajdns4mhh7d8jnrg1c1im7cwmk8yq3myz4m8lbxmka7gv6g7"
}
},
{
@@ -13980,14 +14106,14 @@
"repo": "emacs-circe/circe",
"unstable": {
"version": [
- 20260315,
- 1435
+ 20260525,
+ 1114
],
"deps": [
"cl-lib"
],
- "commit": "f717332348e4b59499dbf60c56155d9f03cd9303",
- "sha256": "01z41abbhp2plsa9qq28rx16mzflzr1vmy4b2h1fmw4qiqafs9r4"
+ "commit": "4bd1e964066fe8985d8112ed9172db3a1ecf58c8",
+ "sha256": "0gs270kpbr8a574y58bdh3jwz3ma4n2fz5r2zp2z2pflhf9vk9kg"
},
"stable": {
"version": [
@@ -14073,17 +14199,16 @@
"repo": "emacs-citar/citar",
"unstable": {
"version": [
- 20260328,
- 1759
+ 20260706,
+ 1221
],
"deps": [
"citeproc",
- "compat",
"org",
"parsebib"
],
- "commit": "58df8b9b8af8a2636b28ed5c6005eddef7f579f7",
- "sha256": "0b7gkik5p087hp08v40lll66sryy8yhnari5wqnkq984z1qwhsad"
+ "commit": "d2289669fea76ae7b2f7ad04794fcc230d65e055",
+ "sha256": "0gnh7lajg6sirr1dyygl3bczp13zdll9wq5zimylvh7l916x03y9"
},
"stable": {
"version": [
@@ -14371,11 +14496,11 @@
"repo": "universal-ctags/citre",
"unstable": {
"version": [
- 20260220,
- 1324
+ 20260530,
+ 602
],
- "commit": "72375aac87cb245b4f49a4737456f626091a0a42",
- "sha256": "0gslc3xqdbwjyb0rci1877ihinp8zlvjgf7maxbbmdgjgqpdlmwh"
+ "commit": "be0d9c6dc9b1ac67d76fc7ed315f2369d5c3bde8",
+ "sha256": "1zgkbx9slm2kgcxjarvjxq01j00v6xggiixvsvxnacy7pqm23s66"
},
"stable": {
"version": [
@@ -14509,6 +14634,30 @@
"sha256": "0acgncalbdd74abd25max11l1q6vdcxsnr7g49gnq7v55qv0spqw"
}
},
+ {
+ "ename": "clatter",
+ "commit": "94c60de3a59fb002f2c1e8bbf7996079feba2d38",
+ "sha256": "1l99xvnbm6swrjid4rrv48g1skxa2an67sirnih4ijjfrxh82pg9",
+ "fetcher": "github",
+ "repo": "parenworks/clatter.el",
+ "unstable": {
+ "version": [
+ 20260720,
+ 457
+ ],
+ "commit": "9b81c45c423755333929dbe4e2e204ae0246c016",
+ "sha256": "0qpwslixsbyypc8z67yjnhxz3a2v5yg66q1jii26knkqjg216x32"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 6,
+ 0
+ ],
+ "commit": "6b1c8466d283b052e2dbba44e6df06f5fe0c16df",
+ "sha256": "1baq6i5nsqd4qzp8zdb5zl199jipnjhfwk88nq11pd3v5xskl2my"
+ }
+ },
{
"ename": "claude-code",
"commit": "ad463328e858a1df77d95da55cfde40ccae31cc9",
@@ -14517,8 +14666,8 @@
"repo": "yuya373/claude-code-emacs",
"unstable": {
"version": [
- 20260227,
- 1055
+ 20260526,
+ 1329
],
"deps": [
"markdown-mode",
@@ -14526,13 +14675,13 @@
"transient",
"vterm"
],
- "commit": "0c3019819ce870619d4425cebf7286e03e531c66",
- "sha256": "08l8pg2v7gi25nvijbxfazqw9syqkkjbrqld3hz5h7w1nyiwp35q"
+ "commit": "4d460e2fa56e6919a9fc4f9b985592a983f9f724",
+ "sha256": "076xb0193bjav8g03l6sjlb4pgwhnkbvri69lj3lcn8mqj2swxcz"
},
"stable": {
"version": [
0,
- 8,
+ 9,
1
],
"deps": [
@@ -14541,8 +14690,23 @@
"transient",
"vterm"
],
- "commit": "0c3019819ce870619d4425cebf7286e03e531c66",
- "sha256": "08l8pg2v7gi25nvijbxfazqw9syqkkjbrqld3hz5h7w1nyiwp35q"
+ "commit": "4d460e2fa56e6919a9fc4f9b985592a983f9f724",
+ "sha256": "076xb0193bjav8g03l6sjlb4pgwhnkbvri69lj3lcn8mqj2swxcz"
+ }
+ },
+ {
+ "ename": "claude-code-context",
+ "commit": "6082e33dbf835c4a86d13d15c8f17df0c392a19f",
+ "sha256": "0h8al6ifiag66pgcw51y0bq1f7favg00idx32pkwykkvhgj9dl4l",
+ "fetcher": "github",
+ "repo": "lukehoersten/claude-code-context",
+ "unstable": {
+ "version": [
+ 20260503,
+ 2210
+ ],
+ "commit": "1e9062b0bc5e0d4f3f9f98a349b6ed9c775360ca",
+ "sha256": "01m86vy5dv2i9phzhir9rm23gqpn9zymn5l2g4r3qpi2bkajwqfc"
}
},
{
@@ -14926,41 +15090,38 @@
"repo": "clojure-emacs/clj-refactor.el",
"unstable": {
"version": [
- 20260403,
- 830
+ 20260716,
+ 1545
],
"deps": [
"cider",
"clojure-mode",
- "hydra",
- "inflections",
- "multiple-cursors",
"paredit",
"parseedn",
+ "spinner",
+ "transient",
"yasnippet"
],
- "commit": "39c9688c79e1d00965621d04c04fe1ddde4b571f",
- "sha256": "1im1l9910asx9bvgcdrrznmrm52kb9jrgkicb3jmplbvay2xyxzv"
+ "commit": "2805bd5f505fdb199a8c5a25fca398ec9c161e5b",
+ "sha256": "0v4j0y81m0bk3v0rp1f32imymplqd7p1i9p3k9xix254cnpq0ywg"
},
"stable": {
"version": [
- 3,
- 12,
+ 4,
+ 0,
0
],
"deps": [
"cider",
"clojure-mode",
- "hydra",
- "inflections",
- "multiple-cursors",
"paredit",
"parseedn",
- "seq",
+ "spinner",
+ "transient",
"yasnippet"
],
- "commit": "dc1bbc8cdaa723bdbb6669ea7d280625c370755d",
- "sha256": "0mha1wqn5hd9g8y0fp35qkhlnxlrwli62x7mbifman279h16gaml"
+ "commit": "2805bd5f505fdb199a8c5a25fca398ec9c161e5b",
+ "sha256": "0v4j0y81m0bk3v0rp1f32imymplqd7p1i9p3k9xix254cnpq0ywg"
}
},
{
@@ -15031,24 +15192,6 @@
"sha256": "0flnfivz6w3pkham3g08m3xzy3jg1rzvxfa00vkr7ll8iyv4ypqc"
}
},
- {
- "ename": "cljstyle-format",
- "commit": "dbc850fd5711658cd4f04a5c796ec5062fb71469",
- "sha256": "145p63r2arn3cpn3i6d7d5mvsj4030fpqn6aj9dyqyx5minmd0zq",
- "fetcher": "github",
- "repo": "dpassen/cljstyle-format",
- "unstable": {
- "version": [
- 20220706,
- 309
- ],
- "deps": [
- "reformatter"
- ],
- "commit": "31a43dfbeea12bbd4639dcec4fbb043cc0ff86d3",
- "sha256": "0gjyxbwmidl1g4ld88rfg2rgc3fjzanw189xj9v1psv0dpbgv4yx"
- }
- },
{
"ename": "clmemo",
"commit": "890ec47013f1638d3b12f2d08118bf64c104be2b",
@@ -15254,11 +15397,11 @@
"repo": "clojure-emacs/clojure-mode",
"unstable": {
"version": [
- 20260325,
- 811
+ 20260709,
+ 952
],
- "commit": "9146525680b29a0c6b72a1126d075b54f8066710",
- "sha256": "1nl51qmm50n2l4wmwbm35lhpjy3k56nji2ncb9iz67hlivncvb5h"
+ "commit": "38c72d3284367459a8b116deb660c3163f6653ea",
+ "sha256": "03c6a12jlg0jvq4f146d9q2iq1waw047jcaja8b8vbpchfr40hl7"
},
"stable": {
"version": [
@@ -15371,11 +15514,11 @@
"repo": "clojure-emacs/clojure-ts-mode",
"unstable": {
"version": [
- 20260325,
- 2107
+ 20260616,
+ 1927
],
- "commit": "ba6de87b0acb5aa5483f6012611b30f6bf0414f3",
- "sha256": "0bqcw4ljvnks5ngbv6rr01c4v2chxr5g7f7h0y34cyklcrv50yyp"
+ "commit": "af00860cd85a46d7b95af1e4f966d3ddccdab9b4",
+ "sha256": "0fxl153gszq8clnqmhzp7lnki34zzfa788x3jh6wiw2nd0hidsvl"
},
"stable": {
"version": [
@@ -15430,30 +15573,32 @@
"repo": "magit/closql",
"unstable": {
"version": [
- 20260101,
- 1828
+ 20260601,
+ 1540
],
"deps": [
"compat",
"cond-let",
- "emacsql"
+ "emacsql",
+ "llama"
],
- "commit": "947426d0c93e5ad5374c464b2f121c36cdaf2132",
- "sha256": "08zxrzwpsixcc9ma7zps21krm0fn7l97aawhhacn2yf1mjja0p5s"
+ "commit": "d382e7427f5d375ffc872851b049e9f9c4a43dfc",
+ "sha256": "0jh5qkcxxmdql7jfizqfkiix6ikwli8qgk5z5k9sxn4kpniisvjk"
},
"stable": {
"version": [
2,
4,
- 0
+ 1
],
"deps": [
"compat",
"cond-let",
- "emacsql"
+ "emacsql",
+ "llama"
],
- "commit": "947426d0c93e5ad5374c464b2f121c36cdaf2132",
- "sha256": "08zxrzwpsixcc9ma7zps21krm0fn7l97aawhhacn2yf1mjja0p5s"
+ "commit": "d382e7427f5d375ffc872851b049e9f9c4a43dfc",
+ "sha256": "0jh5qkcxxmdql7jfizqfkiix6ikwli8qgk5z5k9sxn4kpniisvjk"
}
},
{
@@ -15525,6 +15670,36 @@
"sha256": "118k5bnlk9sc2n04saaxjncmc1a4m1wlf2y7xyklpffkazbd0m72"
}
},
+ {
+ "ename": "clutch",
+ "commit": "08801af1c2c10c1cc6f456392680d05bc57398a7",
+ "sha256": "1637jb2ggxlaabla0w9yfbxvlda21yy5vayhvivhx7mwsnp02yik",
+ "fetcher": "github",
+ "repo": "LuciusChen/clutch",
+ "unstable": {
+ "version": [
+ 20260719,
+ 1018
+ ],
+ "deps": [
+ "transient"
+ ],
+ "commit": "f64414e20c58a6b92255fd3f634785b0855ea8f5",
+ "sha256": "0akgrdhrbmwjwl7g4zlym5blpja3q9p55mygcck17xxqrl40z4fw"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 2,
+ 4
+ ],
+ "deps": [
+ "transient"
+ ],
+ "commit": "a4dfac80ebbf54df48f6fbf7936da0d6f1b6f321",
+ "sha256": "1cyjawbrfphdqcrwg10nrhcvmr45hlhjr3v1g8k0ypcgmfa7cmjs"
+ }
+ },
{
"ename": "cm-mode",
"commit": "42dda804ec0c7338c39c57eec6ba479609a38555",
@@ -15533,25 +15708,25 @@
"repo": "joostkremers/criticmarkup-emacs",
"unstable": {
"version": [
- 20251229,
- 930
+ 20260518,
+ 1920
],
"deps": [
"cl-lib"
],
- "commit": "5c9fadbae23d5ba51b65a4620354621ee8c1907d",
- "sha256": "1lg22rj7axrpay8r5gdpiffm9lz27pmkv86nmh72am2bb4094c1p"
+ "commit": "a5816175548a821bf62d374b40d6974e4956c44b",
+ "sha256": "1nxfjfwfmzf68rfhbmb3qk26g0z5pdgn5jwzzcqv43s6iz55dxgm"
},
"stable": {
"version": [
1,
- 9
+ 10
],
"deps": [
"cl-lib"
],
- "commit": "5c2decacdd1a48c9e4ed2ce2289622aa5915ea24",
- "sha256": "1lblkdp0xim22xc71xxgiwlvqrs500rirqz1in546d10ij445ygq"
+ "commit": "a5816175548a821bf62d374b40d6974e4956c44b",
+ "sha256": "1nxfjfwfmzf68rfhbmb3qk26g0z5pdgn5jwzzcqv43s6iz55dxgm"
}
},
{
@@ -15626,20 +15801,20 @@
"url": "https://gitlab.kitware.com/cmake/cmake.git",
"unstable": {
"version": [
- 20260421,
- 1337
+ 20260709,
+ 1724
],
- "commit": "8d3c68cc0f36108f7ebb23ba7a6bc08b9b1d81e4",
- "sha256": "15q1qgjsgqzirq6f59q6y402bhcw6q3pvmpdh8zs5va70a37p7j5"
+ "commit": "44125a9e977c834f06ac1e5fe8db55355261ef87",
+ "sha256": "1b356mjzcsdj9im4404h2y51gfphqxg83s6cmgrlnmm3bycj71bg"
},
"stable": {
"version": [
4,
- 3,
- 2
+ 4,
+ 0
],
- "commit": "8d3c68cc0f36108f7ebb23ba7a6bc08b9b1d81e4",
- "sha256": "15q1qgjsgqzirq6f59q6y402bhcw6q3pvmpdh8zs5va70a37p7j5"
+ "commit": "44125a9e977c834f06ac1e5fe8db55355261ef87",
+ "sha256": "1b356mjzcsdj9im4404h2y51gfphqxg83s6cmgrlnmm3bycj71bg"
}
},
{
@@ -15755,20 +15930,20 @@
},
{
"ename": "coc-dc",
- "commit": "df9255e363e96363a7d976abd3276a3cb08dd601",
- "sha256": "1zfd2pzgmisksq7jprwhrpx7x92fhjfk4camrjqhlkwmanlbql67",
+ "commit": "bb59486eac3592dde53412b52bdd49e7589887f9",
+ "sha256": "1d41ws61xlpbly5p0m9sxd2iqc8a56vjlx8m5p2vhhacyycgnawv",
"fetcher": "github",
- "repo": "S0mbr3/coc-damage-calculator",
+ "repo": "lejicore/coc-damage-calculator",
"unstable": {
"version": [
- 20241104,
- 1739
+ 20260629,
+ 1344
],
"deps": [
"hydra"
],
- "commit": "097bc2496263fc1e69a04d0528b41baf2fd08115",
- "sha256": "0y8x197zlmg0ipbk6jjcjcwmw2ncfplbdpjhpdk4lj684hacxsr9"
+ "commit": "c5bb252b1ed39c17796ef2b4dcaf66e1202cbd89",
+ "sha256": "1ri6nym15laavfqvmzipyf3ndak9s9ymbsi7a4ilkldwz6by5wsr"
}
},
{
@@ -15827,8 +16002,8 @@
"repo": "ag91/code-compass",
"unstable": {
"version": [
- 20250227,
- 1124
+ 20260520,
+ 1418
],
"deps": [
"async",
@@ -15836,8 +16011,8 @@
"s",
"simple-httpd"
],
- "commit": "6b741978c83f0359c7e555ab78708eed6ced8486",
- "sha256": "0g8bw01jpp488y95m14nbizq0acx9grqhk34g37lwn8imshl9hi6"
+ "commit": "f5b96ab2f0866ab3dcae170a9953d7eb0ef52dbf",
+ "sha256": "1fxg7hkgv9lmjjbakg2i7wfi4xdj7bm1wnnb8aav16zwx45vighw"
}
},
{
@@ -16308,11 +16483,11 @@
"repo": "purcell/color-theme-sanityinc-tomorrow",
"unstable": {
"version": [
- 20260211,
- 1131
+ 20260710,
+ 1606
],
- "commit": "7aec77ed89402bebf0ed879848329ac336f44188",
- "sha256": "04a0mvff2k9dg3flx953w1yfnwp345za7k8220zcwxmpi5rcnzz5"
+ "commit": "d32469ec6529e3a7f84b45277f233497b74f5bab",
+ "sha256": "0l7jbsq3992sjrj0afldb7q746wq44ir02cdrqdfzn1d0ndm62yb"
},
"stable": {
"version": [
@@ -16495,14 +16670,14 @@
"repo": "NicholasBHubbard/comint-histories",
"unstable": {
"version": [
- 20260330,
- 1650
+ 20260608,
+ 1833
],
"deps": [
"f"
],
- "commit": "da9dddafa825a40cd1e25261bb088701c08a80d8",
- "sha256": "0j64ia11p7jlxvkyvjn3bls03qpin2j5amg7liy7fzc17hpjx5iy"
+ "commit": "e13c5ac7f812bc6f7da57c4640600b97356bd02b",
+ "sha256": "0axi8nkywysvbw311b9gbjpk0zr0mwqb93rd485mzpq93di537kp"
}
},
{
@@ -16810,11 +16985,14 @@
"repo": "company-mode/company-mode",
"unstable": {
"version": [
- 20260331,
- 245
+ 20260718,
+ 1243
],
- "commit": "59626254bbac187fc2b8d7a189aca90976ab36a8",
- "sha256": "13dd87hcad91y5ay6gxrzkn98d5h90ib4k7nsfkzf955rdpxqvrr"
+ "deps": [
+ "posframe"
+ ],
+ "commit": "24a4a6b129546a1ce2fcb3e3c5948259dff00685",
+ "sha256": "0qjqk4zh3fk1m7rhkj4sp6wdrsk3ki6jwdc5fly3gng3fjlc5lz1"
},
"stable": {
"version": [
@@ -16985,14 +17163,14 @@
"repo": "randomphrase/company-c-headers",
"unstable": {
"version": [
- 20190825,
- 1631
+ 20260511,
+ 1117
],
"deps": [
"company"
],
- "commit": "5e676ab0c2f287c868b1e3931afd4c78895910cd",
- "sha256": "18zyzhjnlbwblgqgr876ynrc7k736lg5s6bgxmxph7gymdz4fb4h"
+ "commit": "986cef8c7aae821ae65b193ea15e7f4a7097821c",
+ "sha256": "1imsk4c5dpggi92pljzmv035i55pvmhs3a0xnjk6519g6j54yzzr"
}
},
{
@@ -18046,28 +18224,28 @@
"repo": "radian-software/prescient.el",
"unstable": {
"version": [
- 20250816,
- 19
+ 20260628,
+ 2243
],
"deps": [
"company",
"prescient"
],
- "commit": "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18",
- "sha256": "0f4wi8aq3yfykxfza4y4c5yhcs50cs3gpfj0qrmvfq9hvkhzj52w"
+ "commit": "5649977fa7789e4615efeca09397ed7eccd06dfc",
+ "sha256": "199150yng81f6n3kb120s37yf2dqs0i9k91f2gzkk8kjn6hvrsj8"
},
"stable": {
"version": [
6,
3,
- 2
+ 3
],
"deps": [
"company",
"prescient"
],
- "commit": "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18",
- "sha256": "0f4wi8aq3yfykxfza4y4c5yhcs50cs3gpfj0qrmvfq9hvkhzj52w"
+ "commit": "5649977fa7789e4615efeca09397ed7eccd06dfc",
+ "sha256": "199150yng81f6n3kb120s37yf2dqs0i9k91f2gzkk8kjn6hvrsj8"
}
},
{
@@ -18732,20 +18910,20 @@
"repo": "jamescherti/compile-angel.el",
"unstable": {
"version": [
- 20260421,
- 1222
+ 20260710,
+ 1459
],
- "commit": "e17764996ec7a0f74f0ad4399cfdd7e44e11d8ae",
- "sha256": "054546x4d11mrva52kg8ja3ik13v6yii34pnv56ml5wkscpsq2v9"
+ "commit": "fc469061a294a2a9888736d9b9c4ff9b9e6971ce",
+ "sha256": "0xcq3pbw52fbk54xk1hdq24wbcg87yl8zk3j02xhi65dqih8qj3m"
},
"stable": {
"version": [
1,
2,
- 0
+ 1
],
- "commit": "520e516fb794336ddaef4a4e7b02e3e9d60eda04",
- "sha256": "18bhhsw8qfj4rx6fmvr3cp419pw5yn5lfvdwdi8dcczi8bf1f7dh"
+ "commit": "a75f4fe69abc0e8b15c739e3d07bc237a974e052",
+ "sha256": "1vzs2j9xwgxd54gm6j73dpxs5si77l3ywkf3g4af5hmrqpshb6c0"
}
},
{
@@ -18779,14 +18957,14 @@
"repo": "mohkale/compile-multi",
"unstable": {
"version": [
- 20250101,
- 2156
+ 20251004,
+ 2121
],
"deps": [
"all-the-icons-completion"
],
- "commit": "19d16d8871b5f19f5625e1a66c1dc46a7c3f6a3a",
- "sha256": "0zs7s8k5vf0wl3jh374p62vaak0l6p5xy525ys2nv7mghgbv5a53"
+ "commit": "2976058c416b19f9761d5b8cf596210803afd2d7",
+ "sha256": "01jhkygrddsrw0m3y6aa10vy4qjgigsszyl5z50hl8xglfc3pijm"
},
"stable": {
"version": [
@@ -18839,14 +19017,14 @@
"repo": "mohkale/compile-multi",
"unstable": {
"version": [
- 20250101,
- 2156
+ 20251004,
+ 2121
],
"deps": [
"nerd-icons-completion"
],
- "commit": "19d16d8871b5f19f5625e1a66c1dc46a7c3f6a3a",
- "sha256": "0zs7s8k5vf0wl3jh374p62vaak0l6p5xy525ys2nv7mghgbv5a53"
+ "commit": "2976058c416b19f9761d5b8cf596210803afd2d7",
+ "sha256": "01jhkygrddsrw0m3y6aa10vy4qjgigsszyl5z50hl8xglfc3pijm"
},
"stable": {
"version": [
@@ -19029,20 +19207,20 @@
"repo": "tarsius/cond-let",
"unstable": {
"version": [
- 20260201,
- 1500
+ 20260701,
+ 1237
],
- "commit": "8bf87d45e169ebc091103b2aae325aece3aa804d",
- "sha256": "08ay78mbypfs1nl31dsv4b7bixnsl5kp1xkg0jkk7fvbsfv22679"
+ "commit": "c48600dfab6372670225f046cace263700c78eab",
+ "sha256": "1d5daj00qkpyjqhdy24rng08ynpqxc44d30sv5f1y92nmlhswmdv"
},
"stable": {
"version": [
- 0,
- 2,
- 2
+ 1,
+ 1,
+ 3
],
- "commit": "8bf87d45e169ebc091103b2aae325aece3aa804d",
- "sha256": "08ay78mbypfs1nl31dsv4b7bixnsl5kp1xkg0jkk7fvbsfv22679"
+ "commit": "c48600dfab6372670225f046cace263700c78eab",
+ "sha256": "1d5daj00qkpyjqhdy24rng08ynpqxc44d30sv5f1y92nmlhswmdv"
}
},
{
@@ -19291,25 +19469,25 @@
"repo": "minad/consult",
"unstable": {
"version": [
- 20260421,
+ 20260716,
1105
],
"deps": [
"compat"
],
- "commit": "14131ab6247e1b4b0f28134fba5e92a4707dbc1d",
- "sha256": "01bjr30ka1xljwk93yzfqvb210fyc6ln9jik9gi9cinp27hmaap7"
+ "commit": "8c6787edc690097ccfcf2255fecf623a8ab29c7e",
+ "sha256": "0pl4fxggmjjfmad9qwvpsjjihz86j6gcigb1xylml9q9rrnh3yf7"
},
"stable": {
"version": [
3,
- 4
+ 6
],
"deps": [
"compat"
],
- "commit": "f8c2ef57e83af3d45e345e5c14089f2f9973682b",
- "sha256": "0la70jnf14aqaa23ym5phamjay4l4fy3vmizplljli63q8jf89qk"
+ "commit": "9bb68cf3941eb618fff18bd7626164951c70eb8a",
+ "sha256": "02ain9sqvivhhy1fbxv7ayl6mshaiz484y2gcifvml1wjrnygwr2"
}
},
{
@@ -19479,16 +19657,16 @@
"repo": "mohkale/consult-eglot",
"unstable": {
"version": [
- 20250831,
- 924
+ 20260613,
+ 1443
],
"deps": [
"consult",
"eglot",
"project"
],
- "commit": "d7296fef3f9c4280229df51f32fc0b5db2392c22",
- "sha256": "1x5v82zrjqlckshy4sjpkwkj6mqqk6njiz00z68n1a8383f1jlik"
+ "commit": "3e4d9a40911b897c0a2c5d20199d0f7c30bfc1c2",
+ "sha256": "0rbsh5v836jdfwiy9p92f4wra33p4v6x4d77jmsys2sl92d57qx0"
},
"stable": {
"version": [
@@ -19545,27 +19723,27 @@
"repo": "minad/consult-flycheck",
"unstable": {
"version": [
- 20260322,
- 16
+ 20260605,
+ 1858
],
"deps": [
"consult",
"flycheck"
],
- "commit": "21c74a96e787606f8572453b17f6912c3755be42",
- "sha256": "1sxkyxqkgxcysqyapjsylwanas419wz8y59q9prdld0sm57npjsa"
+ "commit": "9dd95361669f87e14230376f4f93c6b9a222c497",
+ "sha256": "1n8n9wd4rn3x8kqyrlimb1hhm3nwgh7vawg7hjy63mfmvcfgrlqk"
},
"stable": {
"version": [
1,
- 1
+ 2
],
"deps": [
"consult",
"flycheck"
],
- "commit": "9fe96c4b75c8566170ad41a04c3849d2e2606104",
- "sha256": "0ga6mqskgmq979nj6ri89x85chcfw0pxhx2vz1xgssz10hwpbla9"
+ "commit": "9dd95361669f87e14230376f4f93c6b9a222c497",
+ "sha256": "1n8n9wd4rn3x8kqyrlimb1hhm3nwgh7vawg7hjy63mfmvcfgrlqk"
}
},
{
@@ -19594,8 +19772,8 @@
"repo": "armindarvish/consult-gh",
"unstable": {
"version": [
- 20250915,
- 2043
+ 20260625,
+ 257
],
"deps": [
"consult",
@@ -19603,8 +19781,8 @@
"ox-gfm",
"yaml"
],
- "commit": "699af6c2b179c6a7888352e78413b7e3f76ae6ba",
- "sha256": "1brv97np4l3cfby88izwdqc4k1h6ikbx5h08i01j858bkpzkwbnz"
+ "commit": "7042619362cd47314d3d0f706fa9cac5bf07950c",
+ "sha256": "0xa7z2zhz44i2fhgiag3a96jkhz71z294qfnphqjxw96cqcq3mb7"
},
"stable": {
"version": [
@@ -19629,8 +19807,8 @@
"repo": "armindarvish/consult-gh",
"unstable": {
"version": [
- 20250906,
- 1805
+ 20260623,
+ 1820
],
"deps": [
"consult",
@@ -19638,8 +19816,8 @@
"embark-consult",
"which-key"
],
- "commit": "2b625a0331c9a92c67fef8ea2e694b28d5006421",
- "sha256": "1p9lcjrzwxgscxpy0x992g8sxy6h3mcin1vffxf6nx28akwz13in"
+ "commit": "7b0fba0dc81a446c95cd39fa2a6adcd39501df9d",
+ "sha256": "18bmk52z2fx23mnbg8c8cv78fp68l958j2zkhk7wxcip7zzjnr7q"
},
"stable": {
"version": [
@@ -19728,16 +19906,16 @@
"repo": "armindarvish/consult-gh",
"unstable": {
"version": [
- 20250906,
- 1805
+ 20260623,
+ 1742
],
"deps": [
"consult",
"consult-gh",
"pr-review"
],
- "commit": "2b625a0331c9a92c67fef8ea2e694b28d5006421",
- "sha256": "1p9lcjrzwxgscxpy0x992g8sxy6h3mcin1vffxf6nx28akwz13in"
+ "commit": "a9e9144fd9d0a689d26818eeb8eb108cd4696718",
+ "sha256": "1jd2ky32l51vd89lxgk95dl9q8yh4mghdyfx7y11pzmjrw9nbljp"
},
"stable": {
"version": [
@@ -19896,16 +20074,16 @@
"repo": "gagbo/consult-lsp",
"unstable": {
"version": [
- 20251025,
- 719
+ 20260619,
+ 643
],
"deps": [
"consult",
"f",
"lsp-mode"
],
- "commit": "d11102c9db33c4ca7817296a2edafc3e26a61117",
- "sha256": "1lswbg18f1f3xg25hlgbn4rrlm4h4p5y27msx2g2gm49bk6ybfdi"
+ "commit": "f41a3946987a3880068f95f3725bbb7b0d4b0b22",
+ "sha256": "1az6p9m1vf78a2p11apvh0105vys5ibbifvzbljilifjs5mfb07w"
},
"stable": {
"version": [
@@ -19923,22 +20101,22 @@
},
{
"ename": "consult-notes",
- "commit": "bd01544509dfe92d007d1edd47cfff0686a057f5",
- "sha256": "0s13l1xdbihyp48k9nkflfw257q008imhv2zpfa86g9j04n4h0rz",
- "fetcher": "github",
+ "commit": "e5b575433d962e6c281731daf227f82a57f2ce7d",
+ "sha256": "0v2vij3hdn47343xps5xm7mk4vig98y8mv39bw5h273ndc73yad2",
+ "fetcher": "codeberg",
"repo": "mclear-tools/consult-notes",
"unstable": {
"version": [
- 20260222,
- 1928
+ 20260706,
+ 1837
],
"deps": [
"consult",
"dash",
"s"
],
- "commit": "94e5b19ec84363438eb7114e59c059a67f3d7c59",
- "sha256": "1cvvmk3nf3fidcfc2x8wvsb1yc98cilhhcl7kgawzlwmy8r0libr"
+ "commit": "1e095562c5d8245e9f85c043cbaa9aa4dc0b9ded",
+ "sha256": "1f5jl777akjpx0ays16wy1hiv684x33v0c4g0mzlxmb9zify65d9"
}
},
{
@@ -20000,15 +20178,15 @@
"repo": "Qkessler/consult-project-extra",
"unstable": {
"version": [
- 20260117,
- 813
+ 20260428,
+ 2007
],
"deps": [
"consult",
"project"
],
- "commit": "2b3fa36fd3a14deacf594f4acd54d220d6890c55",
- "sha256": "1k1z8rsqqri4dpvc7vnrgc2s53h538vyllvc700wci1zk5pa9khj"
+ "commit": "52c453b7f85dea90cc53ff8fba750795606415df",
+ "sha256": "0j14ama1n79w7h3kdmknx3hrjp6a2vfcmmwaa1y5df2ymhnc2bkq"
},
"stable": {
"version": [
@@ -20098,14 +20276,14 @@
"repo": "guibor/consult-spotlight",
"unstable": {
"version": [
- 20260202,
- 2318
+ 20260708,
+ 2142
],
"deps": [
"consult"
],
- "commit": "b60fef973c19e22225cae395217ff01bd32a0ef5",
- "sha256": "0dsd12kj7blnd6mhs3kgww5x4bz7xl8qbj2xg3xra8jgdic03njk"
+ "commit": "c6d8cb34e223608708c5424e4d03d04d6d6648f7",
+ "sha256": "0fps3yhla3d9wawm3fchgfqxhd4wih48lp7ib2qzk7bj1i9yhihw"
}
},
{
@@ -20257,15 +20435,45 @@
"repo": "mohkale/consult-yasnippet",
"unstable": {
"version": [
- 20250411,
- 1922
+ 20260613,
+ 1436
],
"deps": [
"consult",
"yasnippet"
],
- "commit": "a3482dfbdcbe487ba5ff934a1bb6047066ff2194",
- "sha256": "0cyzyxmdrk7dcpsw51pv1vz1f6px5yjmbmsa6r74vmshfdmljm3j"
+ "commit": "89e39887c87e25d18861216a4d72e5d174f13751",
+ "sha256": "1x72lgk79j215l5gn0mzqakf20h06fbhjg7afkwcywm5gpqhnind"
+ }
+ },
+ {
+ "ename": "context-clues",
+ "commit": "095357945ea2d37ff4bec125c10a3d5d6e7b7738",
+ "sha256": "10mwins3ssg75sgdm3imvvlz24x4fh3id4akalmyqq1kzlbhrf1n",
+ "fetcher": "github",
+ "repo": "mrcnski/context-clues",
+ "unstable": {
+ "version": [
+ 20260719,
+ 2046
+ ],
+ "deps": [
+ "transient"
+ ],
+ "commit": "51fa7a434a234d64c70054dd8d99ca4792bb7ee1",
+ "sha256": "1zgk58myqh8b4nnx8r8bj77cqsdrfswwsw8yi493f0cqwasgc9vy"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 3,
+ 0
+ ],
+ "deps": [
+ "transient"
+ ],
+ "commit": "55483a68c18e4c5960bfb89c0ea95265a89db0ab",
+ "sha256": "19pps2wjzlv1ghl6nlrl9fndz8ankfyxmvkgwcl87ba7bhbm4d67"
}
},
{
@@ -20428,8 +20636,8 @@
"repo": "copilot-emacs/copilot.el",
"unstable": {
"version": [
- 20260331,
- 713
+ 20260707,
+ 516
],
"deps": [
"compat",
@@ -20437,13 +20645,13 @@
"jsonrpc",
"track-changes"
],
- "commit": "ab5c58bc969f52f6d75e972658f2c3381c70b4fa",
- "sha256": "1glqr4x7r2f0wgcn0mbcvphdidirpnq1b771ig5ly4s3zaxnqxl5"
+ "commit": "277ca357422ba34bcf7fe650cb720580994eea84",
+ "sha256": "0fj6h3v3v3h0cczs9mc728bcx5zkqlh4yi11la347wah39wdk21d"
},
"stable": {
"version": [
0,
- 5,
+ 9,
0
],
"deps": [
@@ -20452,16 +20660,16 @@
"jsonrpc",
"track-changes"
],
- "commit": "c8c06efaa508569e13d7191882ae33435bb14543",
- "sha256": "1xvhfwgddms0cxhi9pn75vb6qsd6gqfv8s59xjk9ilh57nvwzqfn"
+ "commit": "15a4be6bbe13220d9781e10d6e2086c21c3bc7ee",
+ "sha256": "1skm4wnslx6y6vh83i7maswqk1i6x6gjar58n727z2qq7y3z6qn7"
}
},
{
"ename": "copilot-chat",
- "commit": "6e3852d02866ef577717fae04a56c876efa4217d",
- "sha256": "1xzaa9rn8bnbjlcvlir2nnvidnmyhhcjqi7yi7xadv5i0rw66zxz",
+ "commit": "b5b0b336a5c9cbe201c26449eca9d7a854d4ac0a",
+ "sha256": "1cwixa30d6k9915wbv31wzzllb75i8rp27ssrs30vdxiz3a46z0h",
"fetcher": "github",
- "repo": "chep/copilot-chat.el",
+ "repo": "chep/gh-copilot-chat.el",
"unstable": {
"version": [
20260401,
@@ -20649,25 +20857,25 @@
"repo": "minad/corfu",
"unstable": {
"version": [
- 20260419,
- 1808
+ 20260719,
+ 2241
],
"deps": [
"compat"
],
- "commit": "1466f6f7effc0a783c8acda66471be0db11f789a",
- "sha256": "1qsq3cay6khphq008nyfybg4iafsmszk9j4dr35sr1bzfdq0wml2"
+ "commit": "991224fc0387f005f4ffa896b35eca70b54c651a",
+ "sha256": "0bmbljl6xz7ml312sisy6j9sl9lsfzh7g6hk15fda4464lfx8jcl"
},
"stable": {
"version": [
2,
- 9
+ 10
],
"deps": [
"compat"
],
- "commit": "d2a995c5c732d0fc439efe09440870a9de779a74",
- "sha256": "0hb9ycq6v28nkx0qbczfks4hz26g1d1bdb48ylxb9pd26irxb9pm"
+ "commit": "4a9c67da16eb64cadaa4bfcc16713188145c83da",
+ "sha256": "1qw0xzlxr6fh9iiszqnl4hfjm2h0rd08warhanq99q34nz4iviny"
}
},
{
@@ -20707,28 +20915,28 @@
"repo": "radian-software/prescient.el",
"unstable": {
"version": [
- 20250816,
- 19
+ 20260628,
+ 2243
],
"deps": [
"corfu",
"prescient"
],
- "commit": "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18",
- "sha256": "0f4wi8aq3yfykxfza4y4c5yhcs50cs3gpfj0qrmvfq9hvkhzj52w"
+ "commit": "5649977fa7789e4615efeca09397ed7eccd06dfc",
+ "sha256": "199150yng81f6n3kb120s37yf2dqs0i9k91f2gzkk8kjn6hvrsj8"
},
"stable": {
"version": [
6,
3,
- 2
+ 3
],
"deps": [
"corfu",
"prescient"
],
- "commit": "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18",
- "sha256": "0f4wi8aq3yfykxfza4y4c5yhcs50cs3gpfj0qrmvfq9hvkhzj52w"
+ "commit": "5649977fa7789e4615efeca09397ed7eccd06dfc",
+ "sha256": "199150yng81f6n3kb120s37yf2dqs0i9k91f2gzkk8kjn6hvrsj8"
}
},
{
@@ -20794,14 +21002,14 @@
"repo": "rob137/Corsair",
"unstable": {
"version": [
- 20241018,
- 1015
+ 20260505,
+ 1402
],
"deps": [
"gptel"
],
- "commit": "f750a435d6be68f0d75dc5a90f8aa3cb58e8c16a",
- "sha256": "0xwkfv63klpyqkgx1ihwqh1aqyk8yi3z3appygp28q60rybsyiyl"
+ "commit": "412285e1feeba9c6e0e3a103d64396cef1e73d51",
+ "sha256": "04azlj15jhg02sxjihnc15k4sgcar1vxhd8rxz82y446y00hg235"
}
},
{
@@ -20812,15 +21020,15 @@
"repo": "conao3/cort.el",
"unstable": {
"version": [
- 20241019,
- 936
+ 20260516,
+ 827
],
"deps": [
"ansi",
"cl-lib"
],
- "commit": "262966c9bc7fd3aa7bcf2dc3b9edc286c7f19e58",
- "sha256": "01n7rcvdw98q0dvc51pk6nyrjwcf76cfs7r7c93xnjv5pmpjczfr"
+ "commit": "851a8669f14a1cfc3b0f9d6bf046139cb5bb7470",
+ "sha256": "170dbh6cywyvzc0asayql4vmwa4dyk9k102q0ndkh7m7s33dlsjr"
},
"stable": {
"version": [
@@ -21096,34 +21304,34 @@
"repo": "redguardtoo/counsel-etags",
"unstable": {
"version": [
- 20260320,
- 524
+ 20260513,
+ 1048
],
"deps": [
"counsel"
],
- "commit": "292fe179ccfc4a194e1a362d2929280bdf6e76b1",
- "sha256": "1jd7hxf0np94fxzp0p9nrm2ql8j85zq6a0ivsq3xg4j6wm8bbjbh"
+ "commit": "d9ed92310da368d8d037e151b8dcbb7ada55d42c",
+ "sha256": "063anpspqamza51ndbg6q0j3m29w6w9jklryq5kbwgmp4h3qz71b"
},
"stable": {
"version": [
- 1,
- 11,
- 0
+ 2,
+ 0,
+ 5
],
"deps": [
"counsel"
],
- "commit": "292fe179ccfc4a194e1a362d2929280bdf6e76b1",
- "sha256": "1jd7hxf0np94fxzp0p9nrm2ql8j85zq6a0ivsq3xg4j6wm8bbjbh"
+ "commit": "385eb738d09ce47f905982532e2b03cfb8381f17",
+ "sha256": "1g9pbk4xdwz0qr49wgzg5hkk1rjc8ayv9zyckn0b46jcg7cqg14i"
}
},
{
"ename": "counsel-fd",
- "commit": "b2e58e2a0bf3825d6ef43455fd3e60b33c88aaa2",
- "sha256": "1ywyg2l1dx2rziw23b0i5m4xg4n8laarkq9wbbq80ma5pjb18ims",
+ "commit": "28dfcdf4682782b00234542bc9a06f2f57db66db",
+ "sha256": "0nhvqi3xr3pkrf1l1s6iihsk3hhjb7nrj4bi8i2m0bdgr1inwja0",
"fetcher": "github",
- "repo": "CsBigDataHub/counsel-fd",
+ "repo": "ChetanKoneru/counsel-fd",
"unstable": {
"version": [
20221011,
@@ -21501,6 +21709,30 @@
"sha256": "0khwqwwsp2zhz7x2w7qcsdh5vmk3ybshj9isa6zr2ygag8aag13h"
}
},
+ {
+ "ename": "countdown-modeline",
+ "commit": "f5d525e6591a6e7aa4a8b28f096adbae03851856",
+ "sha256": "1p3k558189lb3h93znpm2prrl3jc1z7wpk94qsn59bszjlfjqzcg",
+ "fetcher": "github",
+ "repo": "jholland82/countdown-modeline",
+ "unstable": {
+ "version": [
+ 20260615,
+ 1455
+ ],
+ "commit": "7485863972bd941a786bc595d566e02a490bb352",
+ "sha256": "03nq1l4m2cc5r0mhgq1bc4zjfxak6rsnq2hm1lgyazrwsgk6kyi1"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 3,
+ 2
+ ],
+ "commit": "7485863972bd941a786bc595d566e02a490bb352",
+ "sha256": "03nq1l4m2cc5r0mhgq1bc4zjfxak6rsnq2hm1lgyazrwsgk6kyi1"
+ }
+ },
{
"ename": "cov",
"commit": "d0f35ce436ac157955d6f92de96e14bef9ad69e3",
@@ -21665,11 +21897,11 @@
"repo": "ignity21/cppinsights.el",
"unstable": {
"version": [
- 20250519,
- 101
+ 20260628,
+ 722
],
- "commit": "941e48a0d5c4a6aed865d8be30ebca006b5a6e3f",
- "sha256": "0sz6bgk2i7jgr1g31pyxr1b4sknipiic3li1k5fwrfx35gs92hnm"
+ "commit": "552d959a7313e746b2a343991bffb9c2271dba47",
+ "sha256": "0rp3xbklgbaacwlzimb6hhizb4qjzhjmdgbypa0h7bkqkwv0l7fi"
}
},
{
@@ -22081,11 +22313,11 @@
"repo": "crystal-lang-tools/emacs-crystal-mode",
"unstable": {
"version": [
- 20260111,
- 2220
+ 20260607,
+ 2043
],
- "commit": "559e1d8ff9bb87a4e937978001386bfb58b113a0",
- "sha256": "0mf2cl99y187c1v0cw192jchdwivm5c1m1154hnl6kyks2wkh7l2"
+ "commit": "f3b01df0bbe58852d0d7242bf5c0495931bb6fa6",
+ "sha256": "1823q4clg1hr085pbxpwdqy9gy86grvwfj224wnx5x2w7xi1mqsc"
},
"stable": {
"version": [
@@ -22177,31 +22409,20 @@
"repo": "hlolli/csound-mode",
"unstable": {
"version": [
- 20250310,
- 1026
+ 20260719,
+ 833
],
- "deps": [
- "dash",
- "highlight",
- "multi",
- "shut-up"
- ],
- "commit": "4a6aa20ad919f088d65b903814453bd56266cf77",
- "sha256": "18q4jpj6fnry67m6z3y5kk70hhk8db5l7wjwylhwmh362c3hzp30"
+ "commit": "9b12204deb8cede38dbb178f4b9c5f101e06d6a3",
+ "sha256": "0w7s3n4l1dw00j7k2f6h0q2dhbn8ydy3dqq20bp647sq2xpdihzp"
},
"stable": {
"version": [
0,
2,
- 1
+ 9
],
- "deps": [
- "highlight",
- "multi",
- "shut-up"
- ],
- "commit": "389be230aecfea03e8043e8ea6884ea21ea9230b",
- "sha256": "1c88ak0jaj51fwiqniqxd7xyk23wjl9m57znzm8j267ld8g12znp"
+ "commit": "9b12204deb8cede38dbb178f4b9c5f101e06d6a3",
+ "sha256": "0w7s3n4l1dw00j7k2f6h0q2dhbn8ydy3dqq20bp647sq2xpdihzp"
}
},
{
@@ -22657,6 +22878,30 @@
"sha256": "1nkdc8r77ln8v2vdahrhkl87hwpahkwpw9gck7bd29krc8fj7d48"
}
},
+ {
+ "ename": "cui",
+ "commit": "4e8c83c93df26fdbec89d3bd1152ae7daaeb35f5",
+ "sha256": "0gkaqg6m58smi4fhylz139aznr33xq50nrdz5jwcm5313skd7hkb",
+ "fetcher": "github",
+ "repo": "Anoncheg1/emacs-cui",
+ "unstable": {
+ "version": [
+ 20260715,
+ 1931
+ ],
+ "commit": "f68f1261f4618fee1d061b22a3a4155589b52259",
+ "sha256": "1spzw7c2x47axlj52a10wvzvcx0x485bsw515i78h4ggi1kf4ri6"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 3,
+ 2
+ ],
+ "commit": "d4ea6f0667f12a7b6022107e84de76fd5739a041",
+ "sha256": "0n4jf27yxwnwa28xk14r7gj46r0k2a1rp4pqd5s2n72hmm6a1g4l"
+ }
+ },
{
"ename": "curl-to-elisp",
"commit": "11453864d71c7853bc743341db7ca071126ca160",
@@ -22930,14 +23175,14 @@
"repo": "ideasman42/emacs-cycle-at-point",
"unstable": {
"version": [
- 20260111,
- 1240
+ 20260502,
+ 927
],
"deps": [
"recomplete"
],
- "commit": "0af1fa35f49d320960870b9dbcb4d03440139fdf",
- "sha256": "154sh14iqdwf02qdl8h8jsrr8rw60479bh6n1p1mx2xvx2yjpad1"
+ "commit": "0be4e5813250139697773275784a9a8d144f47b1",
+ "sha256": "1x1ml0sxm37f737j4cpfwxr5d704pfcywxaz49hshrvc53i3s55x"
}
},
{
@@ -23183,28 +23428,28 @@
"repo": "trevoke/dag-draw.el",
"unstable": {
"version": [
- 20251218,
- 1333
+ 20260627,
+ 2238
],
"deps": [
"dash",
"ht"
],
- "commit": "0c10afdff9f1ebfeea242e921fa22bb385cdf899",
- "sha256": "11m2b30asrg54cysim6yyc4fhym9mgjg909yjjwja45qp8q3llin"
+ "commit": "c20b3c28781f1d768116a2cc601a4e8d0058e2ba",
+ "sha256": "0rylci9y8lpmsrac07npz0n3xkql61zxpj338qr0ffpdfd0vj8gq"
},
"stable": {
"version": [
1,
- 0,
- 4
+ 1,
+ 0
],
"deps": [
"dash",
"ht"
],
- "commit": "0c10afdff9f1ebfeea242e921fa22bb385cdf899",
- "sha256": "11m2b30asrg54cysim6yyc4fhym9mgjg909yjjwja45qp8q3llin"
+ "commit": "c20b3c28781f1d768116a2cc601a4e8d0058e2ba",
+ "sha256": "0rylci9y8lpmsrac07npz0n3xkql61zxpj338qr0ffpdfd0vj8gq"
}
},
{
@@ -23371,8 +23616,8 @@
"repo": "emacs-lsp/dap-mode",
"unstable": {
"version": [
- 20260208,
- 1403
+ 20260616,
+ 1526
],
"deps": [
"bui",
@@ -23385,8 +23630,8 @@
"posframe",
"s"
],
- "commit": "b77d9bdb15d89e354b8a20906bebe7789e19fc9b",
- "sha256": "1092xys5dx9k0rq3vgkrrgx6bfkpvq8lbhng8p8cvhspi2fi766s"
+ "commit": "c73a587d613788003986a11ffe393b46affe8322",
+ "sha256": "1556sxkgm1n0m70js4qspzq613j490z18395c33zm8i1smj21ybl"
},
"stable": {
"version": [
@@ -23431,11 +23676,11 @@
"repo": "fommil/darcula-theme.el",
"unstable": {
"version": [
- 20171227,
- 1845
+ 20260617,
+ 1603
],
- "commit": "d9b82b58ded9014985be6658f4ab17e26ed9e93e",
- "sha256": "1y8rsc63nl4n43pvn283f1vcpqyjnv6xl60fwyscwrqaz19bsnl1"
+ "commit": "89e81a156f375306aa0aa639b3d0161543ce514f",
+ "sha256": "0i8x4a9kds8v0j3rdlrs3rl2k4vkksp1w4ik61r5zk79ip8lnpy0"
},
"stable": {
"version": [
@@ -23583,11 +23828,11 @@
"repo": "emacsorphanage/dart-mode",
"unstable": {
"version": [
- 20251105,
- 543
+ 20260529,
+ 1840
],
- "commit": "22288d0bb374f6880ffc211ce87c302acb3421e7",
- "sha256": "0z1j0v5h5472r04bl9c7hwr0l9mjhp48kcyqgdrb3rx7z0id7052"
+ "commit": "793d7bcc18a2636ebafe06450356c08ea6d638ca",
+ "sha256": "0x7nmrwjsac0bpln5w38na8bx14q2q76a4r9dgcyyq3qckcq2qqa"
},
"stable": {
"version": [
@@ -23643,11 +23888,11 @@
"repo": "nameiwillforget/d-emacs",
"unstable": {
"version": [
- 20260421,
- 833
+ 20260626,
+ 1859
],
- "commit": "8e23c3b0eda55ba9bcdaffa5ab7f179c23012163",
- "sha256": "0v7zkxdpcr5wgccvz8yiwahb6j2pl89hsjxhzs7ishakxw41asxa"
+ "commit": "288211ee4789392aa1b5ea9c665c6e9fd04b3a84",
+ "sha256": "0s4s97icch04zp44ah3dfzn865xmy8ak17r0s7zhpwzssbbajdr6"
}
},
{
@@ -23785,15 +24030,15 @@
"repo": "hyakt/emacs-dashboard-hackernews",
"unstable": {
"version": [
- 20240918,
- 1301
+ 20260521,
+ 1635
],
"deps": [
"dashboard",
"request"
],
- "commit": "ea49fd79d12c26a2c3f9bcdffd0d70dcfee7cd74",
- "sha256": "1s5rs8snd82fcq5ic7vy1612462958h02n23bpvl2mss6m7w33w0"
+ "commit": "ecc8c1eeca10408ac1fab2ad0e80fccf9c6bc0b2",
+ "sha256": "0psxjlr2fhvyjnz4hk1khbyl1frc2nzqjsc4xzzbkbayd7bp5bci"
}
},
{
@@ -24200,15 +24445,15 @@
"repo": "conao3/ddskk-posframe.el",
"unstable": {
"version": [
- 20200812,
- 917
+ 20260516,
+ 827
],
"deps": [
"ddskk",
"posframe"
],
- "commit": "299493dd951e5a0b43b8213321e3dc0bac10f762",
- "sha256": "1rsy0wjncxzjhis8jrxpxjh9l9pw0bngg1sb4dj5qvhsgszhawpn"
+ "commit": "1b5c8f85cafb1e763e214f4310113c75e28cce0d",
+ "sha256": "12d8nnq2czk2qjkgz3csh37943v0jgccdw8gng1lqsfcxywsil6g"
},
"stable": {
"version": [
@@ -24231,16 +24476,16 @@
"repo": "Wilfred/deadgrep",
"unstable": {
"version": [
- 20241210,
- 1630
+ 20260629,
+ 1858
],
"deps": [
"dash",
"s",
"spinner"
],
- "commit": "bb555790c6f404572d537e1e4adec8b4ff0515f5",
- "sha256": "04jskm3qlxq7zvyvcn33gsjcd5312nzmrpznpkqai9gb1v2zhrd8"
+ "commit": "9ba86acdd9fa6aec55c753f4db8c3a5778941259",
+ "sha256": "1pl0cl44ygrgx527fca4sql099xc78wqazxhdlsrsd2bq6jnk1lc"
},
"stable": {
"version": [
@@ -24264,11 +24509,11 @@
"url": "https://salsa.debian.org/emacsen-team/debian-el.git",
"unstable": {
"version": [
- 20260324,
- 1738
+ 20260703,
+ 520
],
- "commit": "d0f6cc8474fa0c022d738acdc159c1550188c991",
- "sha256": "169jq55h22vpn0l0v4vryximxw3mmjxndjnqhl3knaa79yprwr0f"
+ "commit": "ce58c690e27522669eb1905e21a194ff9eb79a9b",
+ "sha256": "02ck505cswfzq8i7szbp1yvgyqkngxqxmfpb13qwqyg5q9nwkfdj"
},
"stable": {
"version": [
@@ -24462,11 +24707,11 @@
"repo": "ideasman42/emacs-default-font-presets",
"unstable": {
"version": [
- 20251214,
- 1133
+ 20260505,
+ 1159
],
- "commit": "6d69a989409ba3498032d9218abe92f58148562f",
- "sha256": "00v94ckw5klljdv0pm4xjpcm9qhq6i5r76kzn7fkkjm1jvgp6cmj"
+ "commit": "43e778da6ef468e187743f009e14270875bc312e",
+ "sha256": "0p81fhmcp7m7z52i34j6hcz85pmx0xmgz9w3x9pk0rzkb9096c80"
}
},
{
@@ -24893,16 +25138,16 @@
"repo": "pprevos/denote-explore",
"unstable": {
"version": [
- 20251027,
- 911
+ 20260719,
+ 936
],
"deps": [
"dash",
"denote",
"denote-regexp"
],
- "commit": "3adc8b4d342bbc411d667f93dbc1f1468a245e04",
- "sha256": "12b0bxvz01za3bxs66n63l6fyffnhq1br5fz0nf28839gvi80npg"
+ "commit": "bd442d761d0ce6efe5cd3b7ce4806a86a49cf8a9",
+ "sha256": "1pfvwg1akn59jqrc829fky91kpm0j7maq8s8dsb5z0lfb8i08ksx"
},
"stable": {
"version": [
@@ -24943,14 +25188,14 @@
"repo": "swflint/denote-project-notes",
"unstable": {
"version": [
- 20250610,
- 1516
+ 20260622,
+ 1947
],
"deps": [
"denote"
],
- "commit": "697420c089d313bf65e7963248c1909a8fdb348d",
- "sha256": "1yh8idry374lxngv63rclaci5h8cpxc3b2fk8q15v70ivsc04gvj"
+ "commit": "e109c84071b3aa8da49e5b0fc56e96f8d1cf5e95",
+ "sha256": "06qc0qi93s6cw81bnyxxlv9b6ynapg7bj8m8vyxc591hmrw109nj"
}
},
{
@@ -24990,6 +25235,42 @@
"sha256": "0rrnr3my8w76zv99wlhhym0j5c3amlgjlamv8q3raglhbk683q3g"
}
},
+ {
+ "ename": "denote-solo",
+ "commit": "35e65c9e778b25fd5a9e95db05e5feb7e63094d3",
+ "sha256": "1vwcl3kspiayw06y2l471ybl5vd5wqr3a9lx0rdhfqswmk331kcr",
+ "fetcher": "github",
+ "repo": "pavlo/denote-solo",
+ "unstable": {
+ "version": [
+ 20260621,
+ 1352
+ ],
+ "deps": [
+ "denote"
+ ],
+ "commit": "f6f3621b48022fe43ec54429dcff4f92a06d7c15",
+ "sha256": "1z7n9zpxfbmp49x5j4hal5797xx2hbma0zwibwvh1ang51ffhv06"
+ }
+ },
+ {
+ "ename": "denote-wordcloud",
+ "commit": "eaae76cbd2071cb7841baa01f30a80681cbe7289",
+ "sha256": "1b3plav8vrfbwvlh9qz48jm18kybfj1qvargg1ygkk6hm1k0zkg7",
+ "fetcher": "codeberg",
+ "repo": "treflip/denote-wordcloud",
+ "unstable": {
+ "version": [
+ 20260506,
+ 1238
+ ],
+ "deps": [
+ "denote"
+ ],
+ "commit": "01a74f13bd1fa4f1645851cc64f2701ff2654e64",
+ "sha256": "0y371cq7gkqw8xg5pr3p8vprf9mkfkm9v0wv8izvq0d7xf1syksz"
+ }
+ },
{
"ename": "departure-times-norway",
"commit": "6fab35ad7b09bdaab751ac1b24f8a51749a17c66",
@@ -25062,6 +25343,21 @@
"sha256": "13fasbhdjwc4jh3cy25gm5sbbg56hq8la271098qpx6dhqm2wycq"
}
},
+ {
+ "ename": "desert-theme",
+ "commit": "fa2e546d32f6d70d57daf387fe49fc3c9e1d6034",
+ "sha256": "1nlp9v23ias4bc5bplk8c05d0shgrz6ijdx441g43vr1kv53f85p",
+ "fetcher": "github",
+ "repo": "bkc39/desert-theme",
+ "unstable": {
+ "version": [
+ 20260606,
+ 1836
+ ],
+ "commit": "a334abfe4d624cb37bb4a2dc309f8623f42b74d1",
+ "sha256": "1yglxj03k9ffh0ywp5285q9pczzkcnpkl6w7rjb959d5n5arcfmk"
+ }
+ },
{
"ename": "desktop+",
"commit": "0b009b42c73490d56d4613dcf5a57447fb4ccab4",
@@ -25316,11 +25612,11 @@
"repo": "mew/dialog-mode",
"unstable": {
"version": [
- 20260406,
- 1841
+ 20260619,
+ 1559
],
- "commit": "7a14cb400ec46a4f0d9df5270866592d3529986d",
- "sha256": "0sh59a1i19lqws8mn1j1pi1hyyhskysx7xwvi0xqwcf1h2iwf72x"
+ "commit": "e092fe2c3915e28ae9151f856d340c2ba17ecb68",
+ "sha256": "12qfbyk9f8s77y8q09xg674xbc9b23a32672v7z9f92bl64x0nd2"
}
},
{
@@ -25392,31 +25688,31 @@
},
{
"ename": "dicom",
- "commit": "879fe6f4268ea058c6b1b6380dfbd1bc05917ffa",
- "sha256": "0ixj9mg2q4s4457sxp0qd13q9cicgi3p904x8jc0a6clyz6nlh36",
+ "commit": "4e939f55653401f55c8d31a694d7a0e4b4a6e184",
+ "sha256": "1z19fhrbfrmrymml4wg2giz3wli1z1872s1b5ssdfzr6cghdv5hg",
"fetcher": "github",
"repo": "minad/dicom",
"unstable": {
"version": [
- 20260117,
- 1648
+ 20260704,
+ 2150
],
"deps": [
"compat"
],
- "commit": "03a12498905ef80d67ff53d138d415d828ceb12f",
- "sha256": "0k4gq0bznkq8i017xpycmyii5x48xqcq8x04p3r5a7qg9ljlwvfk"
+ "commit": "50bfab3a34e502d6bac8ab12854cb33c8aff343c",
+ "sha256": "1821jfsirv1lph6d2amv8b8zzan0jgvb2i0zylv2mgy9irh8mi6p"
},
"stable": {
"version": [
1,
- 3
+ 5
],
"deps": [
"compat"
],
- "commit": "03a12498905ef80d67ff53d138d415d828ceb12f",
- "sha256": "0k4gq0bznkq8i017xpycmyii5x48xqcq8x04p3r5a7qg9ljlwvfk"
+ "commit": "026a12a27939b29935ea343bab9162ed27bd732e",
+ "sha256": "1bi9mrwvyw4gkxix66gf9xhars830kbfinzrai3biixfd3gkdgs2"
}
},
{
@@ -25513,11 +25809,11 @@
"repo": "ideasman42/emacs-diff-ansi",
"unstable": {
"version": [
- 20260108,
- 1512
+ 20260713,
+ 2340
],
- "commit": "98f1837840e9afedbff48969b2bd8468af7ceef3",
- "sha256": "1hrhg1zly19c7fplswb2jcspsf0rcjwkh28pjrgrinw9n7dvwzqm"
+ "commit": "86c0b3525b2793b585b548c6e975d6fe6a2cea2a",
+ "sha256": "11h1gvm5iz2rd8ap3p745ndygmpay641ibaw9kk09rcr8rqr1cpy"
}
},
{
@@ -25543,14 +25839,14 @@
"repo": "dgutov/diff-hl",
"unstable": {
"version": [
- 20260328,
- 1925
+ 20260627,
+ 208
],
"deps": [
"cl-lib"
],
- "commit": "b965e19e6e7f9933199e421849a49229207c1c9f",
- "sha256": "07mmfc44wn0gsg4h4c4fnz0w8jzsj403nxkjbbn20pr3rfln42rq"
+ "commit": "2d7d0714d9637f54af672987c65b6973b31e56a2",
+ "sha256": "1w6vqdcqwrbaxm70j6klhnmn3i2h4rx8b2g1ymj1dsclabw6i3rl"
},
"stable": {
"version": [
@@ -25582,22 +25878,22 @@
},
{
"ename": "difflib",
- "commit": "df1924ddff6fd1b5fa32481d3b3d6fbe89a127d3",
- "sha256": "07bm5hib3ihrrx0lhfsl6km9gfckl73qd4cb37h93zw0hc9xwhy6",
- "fetcher": "github",
+ "commit": "1d888e12b1c4002896723b3c993a72bf920ef37b",
+ "sha256": "0z3rvzp63bbnxp7i22w9qd475k53xk75501d2gz25wv01xs030vk",
+ "fetcher": "sourcehut",
"repo": "dieggsy/difflib.el",
"unstable": {
"version": [
- 20210224,
- 2242
+ 20260530,
+ 536
],
"deps": [
"cl-generic",
"ht",
"s"
],
- "commit": "646fc4388274fe765bbf4661e17a24e4d081250c",
- "sha256": "1qagl3ffg01zjqrgpq32h4ya869066n8ll9yq8lk40argjm523fa"
+ "commit": "9efb87bcf430600e8beb1a821dc78c1088a081e7",
+ "sha256": "0ky754i5czqi5rfw9k69hdccjg0ky5rfnnvhs3xvkc5d4kswr1w5"
},
"stable": {
"version": [
@@ -25850,32 +26146,32 @@
},
{
"ename": "dim-autoload",
- "commit": "66b1a81dfd09a2859ae996d5d8e3d704857a340f",
- "sha256": "0lhzzjrgfvbqnzwhjywrk3skdb7x10xdq7d21q6kdk3h5r0np9f9",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "0v6dyij2fvj6wp1jlg9q3ii39ylabjh3vlmlb1f4ff9jw99ngf5k",
"fetcher": "github",
"repo": "tarsius/dim-autoload",
"unstable": {
"version": [
- 20260101,
- 1826
+ 20260601,
+ 1459
],
"deps": [
"compat"
],
- "commit": "503eee682c2fcc24e05a765ac28e847be950bad9",
- "sha256": "1f0nwz85dhnf0via74yw21f30mg3afkfng5w6ssrny906jzg3pnp"
+ "commit": "a9024464f0f0573338eaa490cfca998e66bf47f7",
+ "sha256": "15654pgqcm2lngkiznq3xf29m8c0an9rs6nzvpdrlmar8h98dqg3"
},
"stable": {
"version": [
2,
1,
- 2
+ 3
],
"deps": [
"compat"
],
- "commit": "503eee682c2fcc24e05a765ac28e847be950bad9",
- "sha256": "1f0nwz85dhnf0via74yw21f30mg3afkfng5w6ssrny906jzg3pnp"
+ "commit": "a9024464f0f0573338eaa490cfca998e66bf47f7",
+ "sha256": "15654pgqcm2lngkiznq3xf29m8c0an9rs6nzvpdrlmar8h98dqg3"
}
},
{
@@ -25963,20 +26259,20 @@
"repo": "gonewest818/dimmer.el",
"unstable": {
"version": [
- 20220817,
- 122
+ 20260618,
+ 1559
],
- "commit": "a5b697580e5aed6168b571ae3d925753428284f8",
- "sha256": "1lj7pgsyzmd547yq33k4r75vfz3pdqafvnrxcv110hmb7mj3dvr4"
+ "commit": "bbab62f01d45086b9098f6a0ab765282d9c7bc45",
+ "sha256": "1azpm377q2qvwfgfpc01fgma66s52xy829r2kjadqsw0px0gjkq4"
},
"stable": {
"version": [
0,
4,
- 2
+ 3
],
- "commit": "e45bf2d064a8ecdea2b4caf646ece2d0adc1d84e",
- "sha256": "0dw0qh5hm1x76s5cqxvylvmjgy0jwy11xm258g6kmx6w1k6r1d2l"
+ "commit": "a5b697580e5aed6168b571ae3d925753428284f8",
+ "sha256": "1lj7pgsyzmd547yq33k4r75vfz3pdqafvnrxcv110hmb7mj3dvr4"
}
},
{
@@ -26027,11 +26323,11 @@
"repo": "jamescherti/dir-config.el",
"unstable": {
"version": [
- 20260314,
- 1908
+ 20260710,
+ 1609
],
- "commit": "e2168cb2da83b36d071efec3d4e2ee42a599ed36",
- "sha256": "10h06ssb0rjrgwh774i8hfzxy506hs5c8h2lrkxrc19lyvcl46x3"
+ "commit": "5620beabc842f5d63c02c90d28618d5c67fdf94e",
+ "sha256": "0sqja9riky1ixjns9hhqlq51ss5jjamrgflixwy2hbdlyz68mrmk"
},
"stable": {
"version": [
@@ -26819,15 +27115,15 @@
"repo": "stsquad/dired-rsync",
"unstable": {
"version": [
- 20260204,
- 1424
+ 20260716,
+ 1319
],
"deps": [
"dash",
"s"
],
- "commit": "24ceb60b168c591d7e2d9440a7f1895880681f48",
- "sha256": "0vrpwk91qrcnkr6cgmal7abi0cmykfr840l4cxvv5jzr8c1m1zhi"
+ "commit": "eecf700ce70b282040b87ccdb76ff4195bdba919",
+ "sha256": "102gbq4xpgwrfznys13fdjvxpfsf8v7mf6f1z9k51i3mg0fs9iyk"
},
"stable": {
"version": [
@@ -26881,15 +27177,15 @@
"repo": "jojojames/dired-sidebar",
"unstable": {
"version": [
- 20260415,
- 638
+ 20260619,
+ 56
],
"deps": [
"compat",
"dired-subtree"
],
- "commit": "19cdf0b9ed634efb7ae7047861fbcbd9dc0ee2e9",
- "sha256": "1jsyrj6mam68klb5ygjks98a4npx85d1xx5viwss2c11zk52699r"
+ "commit": "1852a0b17bf2619607f6b4dfc437e279ba04e93c",
+ "sha256": "0br2a2nccbbmp5mgj4b0q28k0gaq10w1mrsyabfk9va9dqb8iscn"
},
"stable": {
"version": [
@@ -27034,14 +27330,14 @@
"repo": "Boruch-Baum/emacs-diredc",
"unstable": {
"version": [
- 20260414,
- 1238
+ 20260714,
+ 1154
],
"deps": [
"key-assist"
],
- "commit": "7bbc7bfa60c2b3c7f39f75e1600b13260315271e",
- "sha256": "0knsbywpmdb6jbb3frgnl9p6mi6ac2brhajb2rlqxqvr8fx9xz4b"
+ "commit": "0ad972d370e63e9b81909a60c06a147986de84f2",
+ "sha256": "0shfb53i53a390yxap2dsa0bpl2bh9614xpx1gk7hrgxr29g5pin"
},
"stable": {
"version": [
@@ -27133,26 +27429,26 @@
"repo": "wbolster/emacs-direnv",
"unstable": {
"version": [
- 20240314,
- 715
+ 20260630,
+ 839
],
"deps": [
"dash"
],
- "commit": "c0bf3b81c7a97e2a0d06d05495e86848254fcc1f",
- "sha256": "1b68rz3y64afwbh5brxa9yzwmsjg1g8irgvbvdblazhciap397c3"
+ "commit": "c1f38f71184f8aa3130898932f2de638beb5ed33",
+ "sha256": "078g5x3xzsqh9j87qdxmp131fbwrazcj0hxr5c7rr2f25pih8lq4"
},
"stable": {
"version": [
2,
- 2,
+ 3,
0
],
"deps": [
"dash"
],
- "commit": "bd161f38621d1a9e4d70c9bafab9b7e3520f00b2",
- "sha256": "0cf5npgksl9a03mnfdhfdhlf46gr9qz9adjxz3dbckq9b1vl0dfc"
+ "commit": "c1f38f71184f8aa3130898932f2de638beb5ed33",
+ "sha256": "078g5x3xzsqh9j87qdxmp131fbwrazcj0hxr5c7rr2f25pih8lq4"
}
},
{
@@ -27255,14 +27551,14 @@
"repo": "alexluigit/dirvish",
"unstable": {
"version": [
- 20250504,
- 807
+ 20260716,
+ 729
],
"deps": [
"compat"
],
- "commit": "d877433f957a363ad78b228e13a8e5215f2d6593",
- "sha256": "0d9c7i3x4vfl7k4vi29zyrz1d2cx7kfdnir8slqdjbapyacrl4s0"
+ "commit": "5152c80a32de3965a3e131a9314514af4aa8aa1e",
+ "sha256": "0v6l4vxxb5fvqgbrwlzwj7kc1m492vmxp231555hcw589qk3av5y"
},
"stable": {
"version": [
@@ -28028,8 +28324,8 @@
"repo": "Silex/docker.el",
"unstable": {
"version": [
- 20260126,
- 1212
+ 20260709,
+ 1426
],
"deps": [
"aio",
@@ -28038,8 +28334,8 @@
"tablist",
"transient"
],
- "commit": "916686b86e83a3bd2281fbc5e6f98962aa747429",
- "sha256": "0yql0k5bw1vsqh44g5aq6ip6dn3c36k8gpljvbghsj01fcqdlvj6"
+ "commit": "f32940100035438934d626adb99cfc63036de490",
+ "sha256": "07wsf9p7dy7qws7jdksra3xh6lwlkh0dxmjskmbzd6wz86c2vx1i"
},
"stable": {
"version": [
@@ -28296,11 +28592,11 @@
"repo": "ag91/doctest",
"unstable": {
"version": [
- 20240421,
- 1517
+ 20260620,
+ 2225
],
- "commit": "0620ab6283a4e4302761ac415354b0b2b889dcda",
- "sha256": "1g759f1ypw00vqbbcxa8yxf51bdmlrfdxybgjf4fmzzhvfbcpc4d"
+ "commit": "cdf41b5185dcd502f92722297f4361eab4ef1d13",
+ "sha256": "1mli87r0nlrfalh5mbnlg52cfhz9pgccnqlfzjj7k3fj0cl7rnvw"
}
},
{
@@ -28459,16 +28755,16 @@
"repo": "seagle0128/doom-modeline",
"unstable": {
"version": [
- 20260411,
- 1454
+ 20260708,
+ 823
],
"deps": [
"compat",
"nerd-icons",
"shrink-path"
],
- "commit": "870b4b215fda881d29278d81bbab7f934a9bd8b3",
- "sha256": "15m4c6bafc742cm3mwq9x889c3s96minp6957ipbxyd6qaxzfjly"
+ "commit": "017854c6484dd6a38e4b039dad04ce6dbec02f08",
+ "sha256": "0mvyi6r1599fsz6hfgbvq1i8z569xsh9iwwzz8pwd15c9v8i71v6"
},
"stable": {
"version": [
@@ -28493,14 +28789,14 @@
"repo": "elken/doom-modeline-now-playing",
"unstable": {
"version": [
- 20250906,
- 630
+ 20260501,
+ 743
],
"deps": [
"doom-modeline"
],
- "commit": "aff9417faaf5f1945b9ad95f27fa777bbcf269f7",
- "sha256": "0z7xsrm30dmi359hzairy94md0jmas0q9n939zy4yv708xykbxpj"
+ "commit": "11e060f9e30c2ae3e95e71a18f3d0d91b7a54d97",
+ "sha256": "1fqmbxchy8i9qb4lsqpb8lj9ly5sq3xxhzh9pn0jc5j5g37wak0x"
},
"stable": {
"version": [
@@ -28831,14 +29127,14 @@
"url": "https://salsa.debian.org/emacsen-team/dpkg-dev-el.git",
"unstable": {
"version": [
- 20260326,
- 2334
+ 20260713,
+ 1140
],
"deps": [
"debian-el"
],
- "commit": "f65f60feb19357196594a09ce9fe23da9291cef0",
- "sha256": "1vqibm6iwnbdxgq2mmly1xqdgbs80qqi20xzwcrb571yvw42nqh3"
+ "commit": "74ccc3b0a227a2e71b2c69af4da09e28ae944972",
+ "sha256": "1a43p1jm5yn7v03pby62bl0dichcbqyidpa1fvksfhz3ry8289cc"
},
"stable": {
"version": [
@@ -28884,11 +29180,11 @@
"repo": "dracula/emacs",
"unstable": {
"version": [
- 20260224,
- 1455
+ 20260701,
+ 2051
],
- "commit": "b1a4d87ba1cf880143f4ab2ccd942cf556887fb1",
- "sha256": "10yy3abny8iv74pxw2m94gnnszylpsqsf85lp7rla7lslmykhqys"
+ "commit": "1acd97258258415f6a43c332475fbdcd7ceb9274",
+ "sha256": "17crkxrfn1cmkjvl5hnfnl6g86z1ipjd7i4qm30r7q2gxh0yh64y"
},
"stable": {
"version": [
@@ -29201,19 +29497,19 @@
"repo": "jscheid/dtrt-indent",
"unstable": {
"version": [
- 20251102,
- 857
+ 20260709,
+ 2011
],
- "commit": "7c372bec8d84c247e4bd0d5599024d66ee300429",
- "sha256": "04p6avj8d15i6qswdfpgvdil5c13rcfmc4n2jili485zgpw14j81"
+ "commit": "8402da6bcc288709366e0b589fa79e744e877788",
+ "sha256": "0r6fa6mim20bya2z3y0cvgrgjndcl839w01byjkb3zbjvwxc0byj"
},
"stable": {
"version": [
1,
- 26
+ 28
],
- "commit": "7c372bec8d84c247e4bd0d5599024d66ee300429",
- "sha256": "04p6avj8d15i6qswdfpgvdil5c13rcfmc4n2jili485zgpw14j81"
+ "commit": "8402da6bcc288709366e0b589fa79e744e877788",
+ "sha256": "0r6fa6mim20bya2z3y0cvgrgjndcl839w01byjkb3zbjvwxc0byj"
}
},
{
@@ -29304,11 +29600,11 @@
"repo": "jacktasia/dumb-jump",
"unstable": {
"version": [
- 20260406,
- 1824
+ 20260603,
+ 1700
],
- "commit": "9ce4598e9c485821a6e639fa48854d8e05acd970",
- "sha256": "00p4wmymvc0rspg3kddv5y8r1hxwb1j907bpgscjwjfpshm5swaq"
+ "commit": "cf06b4ccdce6a39346c32f05139f9ee8b77ee229",
+ "sha256": "1i3zykfg5dc562naqd9f7fybx9y624783av1w1ikw51p0f2wr139"
},
"stable": {
"version": [
@@ -29365,20 +29661,20 @@
"repo": "ocaml/dune",
"unstable": {
"version": [
- 20260410,
- 1721
+ 20260621,
+ 2057
],
- "commit": "df26745e52be99ecdb2ff994feab1eacd858b226",
- "sha256": "0gnv5926xmvsna0bvgymj1rr9awkrc9krij6zbjnx90mcf091bsv"
+ "commit": "47f64de764078db6edb2698958b5270a17bffb05",
+ "sha256": "1j0nqvr4njj8z8fcfhxq7c2fid4hc4c46vcx2077sj6iqd8kd02f"
},
"stable": {
"version": [
3,
- 22,
- 2
+ 24,
+ 0
],
- "commit": "df26745e52be99ecdb2ff994feab1eacd858b226",
- "sha256": "0gnv5926xmvsna0bvgymj1rr9awkrc9krij6zbjnx90mcf091bsv"
+ "commit": "47f64de764078db6edb2698958b5270a17bffb05",
+ "sha256": "1j0nqvr4njj8z8fcfhxq7c2fid4hc4c46vcx2077sj6iqd8kd02f"
}
},
{
@@ -29532,11 +29828,11 @@
"repo": "xenodium/dwim-shell-command",
"unstable": {
"version": [
- 20260123,
- 1157
+ 20260708,
+ 1641
],
- "commit": "a408b7826bb4535e7a14e16848ad41820d63411f",
- "sha256": "1a30h2ly34pplfnpxhnkdjwqlsfkjchx01wcnh1cnd9zlg05sinp"
+ "commit": "3566651e24ca05fe818897f2cf31718d2bcd1c99",
+ "sha256": "1n8zfh4bibk3c99pijw5xma4sz03jj0m10557ny55wwbz7aqfzny"
},
"stable": {
"version": [
@@ -30021,20 +30317,20 @@
"repo": "redguardtoo/eacl",
"unstable": {
"version": [
- 20260412,
- 237
+ 20260427,
+ 655
],
- "commit": "5a304e4655a28cc817b9a633304bd64a5d5ddf53",
- "sha256": "145z8qv1xmx0y3g00n2jivhzi8h6zc5ai3wfijmijdam0yg377p5"
+ "commit": "19f0170f3548eb49f5bd92653f321c3b1742b492",
+ "sha256": "08fdsnh0jxpnihqmv9vbrv8hxiw2dd4y66h67w6lw6yxlglw9p0d"
},
"stable": {
"version": [
2,
2,
- 2
+ 3
],
- "commit": "5a304e4655a28cc817b9a633304bd64a5d5ddf53",
- "sha256": "145z8qv1xmx0y3g00n2jivhzi8h6zc5ai3wfijmijdam0yg377p5"
+ "commit": "19f0170f3548eb49f5bd92653f321c3b1742b492",
+ "sha256": "08fdsnh0jxpnihqmv9vbrv8hxiw2dd4y66h67w6lw6yxlglw9p0d"
}
},
{
@@ -30384,20 +30680,20 @@
"repo": "jamescherti/easysession.el",
"unstable": {
"version": [
- 20260421,
- 1132
+ 20260715,
+ 1819
],
- "commit": "77a55e7ed2ad0ea5b741193a4e5a91c91021387f",
- "sha256": "0bzc1078r485177nnfsxxjjjxd502cm850jysg57zbwp1yydmzk4"
+ "commit": "a722fad8a087b7036657dc22015d0fffbd63d893",
+ "sha256": "1yafwq7cqkxawd3f2jsvbj2z6vz29ypq2bmas37q8babby4knk1n"
},
"stable": {
"version": [
1,
2,
- 1
+ 5
],
- "commit": "962cf2c6465acc7ef2d7d260240058a98ec2342d",
- "sha256": "02z5w31sv091yvzhgri2aaparh6m4nhvrhglqia73ly9p7n6jr6s"
+ "commit": "8a195693ccc144f48d7dedf50e136be9a76b437c",
+ "sha256": "0yakk0n7n7m9x847pbva2qf700aygyls1qpwcc1xxd53n87aigcm"
}
},
{
@@ -30473,15 +30769,15 @@
"repo": "joostkremers/ebib",
"unstable": {
"version": [
- 20250909,
- 1036
+ 20260621,
+ 1413
],
"deps": [
"compat",
"parsebib"
],
- "commit": "72686b4d045dcbdb794e56c8ba60a77eed52ee83",
- "sha256": "07sl4myxvqqdyj6fgybiz93dw9yba1wkhy3f99mz3fv8hyr06jjr"
+ "commit": "32c6ab8ce418af10b54f497a404b9b33a67d48fc",
+ "sha256": "1nf7lhzgiwhxslaa65a5i3iw7mwzj0jdh3ishrdwybaxyirili4v"
},
"stable": {
"version": [
@@ -30556,11 +30852,11 @@
"repo": "flexibeast/ebuku",
"unstable": {
"version": [
- 20240921,
- 839
+ 20260712,
+ 308
],
- "commit": "45294cedeeefdcb0193b18dc3e2254db0aa700c3",
- "sha256": "11canjhvwpj2hy5czav2hn1hx0lzckicsbr3p8fr6pjrg3gg2bwh"
+ "commit": "dba4523f18591491c2d716442ad1da184747d879",
+ "sha256": "1vdsp873xmhm49r5cdha82halgwz5p85k9977xfw2163ldlkqigx"
}
},
{
@@ -30571,8 +30867,8 @@
"repo": "editor-code-assistant/eca-emacs",
"unstable": {
"version": [
- 20260423,
- 1754
+ 20260716,
+ 1447
],
"deps": [
"compat",
@@ -30581,14 +30877,14 @@
"markdown-mode",
"s"
],
- "commit": "bd5a72aef67eca944a7ad0d9916eb0d0f0f11f9d",
- "sha256": "0ngap75h8344csabhmf12y4wdii6rxb94yxvdx8aj31kggxaqn6l"
+ "commit": "005fbd8872ca23437e2c5e72f0f9c605bbc7360d",
+ "sha256": "1kzk07bkqdd8054441p30xj4aihh6a8b8d4q7pn1aqgk2iprld66"
},
"stable": {
"version": [
0,
9,
- 0
+ 1
],
"deps": [
"compat",
@@ -30597,8 +30893,8 @@
"markdown-mode",
"s"
],
- "commit": "4e867e883cdb7733809a9c5b76c0ca9af022db98",
- "sha256": "1kdf2vb2905zz80hnzwclfdqb3zk3v5qdchajfwr8snwlsdca80r"
+ "commit": "0e1c7b4e924d7d7d99720342e60483b6dda187a3",
+ "sha256": "053qqrwlrnaa306kq8fz9s2dlaavgd71frxikkyq7ph6gnj2p6wf"
}
},
{
@@ -30609,11 +30905,11 @@
"repo": "ecb-org/ecb",
"unstable": {
"version": [
- 20251014,
- 1427
+ 20260518,
+ 524
],
- "commit": "2f9028aa1d8791720e809954016dbc84fe8fc864",
- "sha256": "1gvqayfp8a5fjd6clibj4fn4algy921ck0ifa61g3gykhkmj1jhi"
+ "commit": "ac7c585be4de7ba085ec91ef580361711a7f8c54",
+ "sha256": "0mk5dd386z52cidpkjf6igwcbg75i5cs85q8j2rkjnzsl3qrli25"
},
"stable": {
"version": [
@@ -30728,26 +31024,6 @@
"sha256": "0xy3q68i47a3s81jwr0rdvc1722bp78ng56xm53pri05g1z0db9s"
}
},
- {
- "ename": "ede-compdb",
- "commit": "3b70138b7d82aec2d60f4a7c0cd21e734a1fc52a",
- "sha256": "1ypi7rxbgg2qck1b571hcw5m4ipllb48g6sindpdf180kbfbfpn7",
- "fetcher": "github",
- "repo": "randomphrase/ede-compdb",
- "unstable": {
- "version": [
- 20150920,
- 2033
- ],
- "deps": [
- "cl-lib",
- "ede",
- "semantic"
- ],
- "commit": "23c91082270fcef24ea791b848f1604e36888ff0",
- "sha256": "03xphcdw4b6z8i3dgrmq0l8m5nfpsjn0jv0y1rlabrbvxw1gpcqq"
- }
- },
{
"ename": "ede-php-autoload",
"commit": "afc7ddfcf16e92889e54f30599b576a24823f60d",
@@ -31409,26 +31685,26 @@
},
{
"ename": "egison-mode",
- "commit": "3416586d4d782cdd61a56159c5f80a0ca9b3ddf4",
- "sha256": "0bch4863l9wxrss63fj46gy3nx3hp635709xr4c2arw0j7n82lzd",
+ "commit": "9fdde45d92600e1327dec06b78e8bfea1a58c601",
+ "sha256": "0kx0gf98zzyvvqxi8mips2bgfx3cf34gc0mhz3rx9gw8bsb94sil",
"fetcher": "github",
"repo": "egison/egison",
"unstable": {
"version": [
- 20260104,
- 1519
+ 20260217,
+ 1013
],
- "commit": "4e796ee52785e052f3b10c6493fa484461bb4482",
- "sha256": "0m4sp7ncf6d9maf1sm4p4rg4z140bdfvbxgd05fmly4pk1yz0yv8"
+ "commit": "448dc7ee9db1e2778261f295715fcb64496ba19e",
+ "sha256": "1jgv77v6wkbc8ixmifvwlc6izn9rkr8nnca7g9cbzzp4npys2d5n"
},
"stable": {
"version": [
- 4,
- 1,
- 3
+ 5,
+ 0,
+ 0
],
- "commit": "dbb395b41a4e4eb69f3f045cbfbe95a1575ac45b",
- "sha256": "14g0dpn8j7kh3iiq7qlhaa1wdk6xvl60hkl3j87ncjwkh6h4imcg"
+ "commit": "3a5b520c6b5bc4a78523573d06e3be887e02d1dd",
+ "sha256": "04rk39z345wm8byrg0kk02d5l2i6vvjnmaa3h817kns1d3gsdk9s"
}
},
{
@@ -31503,16 +31779,16 @@
"repo": "non-Jedi/eglot-jl",
"unstable": {
"version": [
- 20240911,
- 1352
+ 20260705,
+ 2320
],
"deps": [
"cl-generic",
"eglot",
"project"
],
- "commit": "7c968cc61fb64016ebe6dc8ff83fd05923db4374",
- "sha256": "1xy6lssg5x8m2d5802in2b5nl5wrcxz4pilw85kk0mc8640kg2ma"
+ "commit": "ebe4358b48827a85dd4c714bcc3db11842aa6c3c",
+ "sha256": "16bjkwsgsc9181kpav563nv9jpqzw0ycwgvzgdqjsj42c4pyajsv"
},
"stable": {
"version": [
@@ -31567,26 +31843,26 @@
"repo": "mwolson/eglot-python-preset",
"unstable": {
"version": [
- 20260424,
- 334
+ 20260617,
+ 148
],
"deps": [
"eglot"
],
- "commit": "8219aa2b3d595af42108881b4d26750ec20105b7",
- "sha256": "1w4vvhdjdv8ny3wg6nlvwjv7mgz0bkdi9pkvi2krzarsk6wlhiv3"
+ "commit": "719b3aa8fd47aec6c1c3094e2468f41b9d588b09",
+ "sha256": "08y0y1bsbyrlp704ajjkyd0ki8bfpcm9ncb7796fc61ajmz26ak2"
},
"stable": {
"version": [
+ 1,
0,
- 6,
0
],
"deps": [
"eglot"
],
- "commit": "8219aa2b3d595af42108881b4d26750ec20105b7",
- "sha256": "1w4vvhdjdv8ny3wg6nlvwjv7mgz0bkdi9pkvi2krzarsk6wlhiv3"
+ "commit": "719b3aa8fd47aec6c1c3094e2468f41b9d588b09",
+ "sha256": "08y0y1bsbyrlp704ajjkyd0ki8bfpcm9ncb7796fc61ajmz26ak2"
}
},
{
@@ -31665,26 +31941,26 @@
"repo": "mwolson/eglot-typescript-preset",
"unstable": {
"version": [
- 20260417,
- 1841
+ 20260617,
+ 128
],
"deps": [
"eglot"
],
- "commit": "f789a45d98eb4d5cc8129a34893a91bd36abd09c",
- "sha256": "1jy3hp621p7lh3zrxs7rgq7kajmxb5wvqjfd4flna4vmxrjg4r3q"
+ "commit": "cc780650223cf08f2268bca3de16509c61ef885d",
+ "sha256": "18vsmjfsa6fm5lsdpfh05gckllppj5b048da04wmvnb2l4xbmsis"
},
"stable": {
"version": [
+ 1,
0,
- 5,
- 2
+ 0
],
"deps": [
"eglot"
],
- "commit": "97c673f6408fa35fe859330f6014c35f9dce15a8",
- "sha256": "0k12kszfg68q343mww7ivacpkw177ca23878v13b8p00xac86app"
+ "commit": "cc780650223cf08f2268bca3de16509c61ef885d",
+ "sha256": "18vsmjfsa6fm5lsdpfh05gckllppj5b048da04wmvnb2l4xbmsis"
}
},
{
@@ -31854,30 +32130,30 @@
"repo": "ahyatt/ekg",
"unstable": {
"version": [
- 20260415,
- 39
+ 20260707,
+ 412
],
"deps": [
"llm",
"triples",
"vui"
],
- "commit": "be6cc349a5054154470173af6521e569cb21bcb1",
- "sha256": "12jkrzxk541i4d1b427zhg7klg304kqidksypikbq18dppsvdh5l"
+ "commit": "f1401f4189143dcfce5cd7d68231462d7a8873ec",
+ "sha256": "0xr95r48i057pjkiai4dyr6wchv7ciq0h4g2rn1qrj88zcmxhx91"
},
"stable": {
"version": [
0,
9,
- 0
+ 1
],
"deps": [
"llm",
"triples",
"vui"
],
- "commit": "be6cc349a5054154470173af6521e569cb21bcb1",
- "sha256": "12jkrzxk541i4d1b427zhg7klg304kqidksypikbq18dppsvdh5l"
+ "commit": "f1401f4189143dcfce5cd7d68231462d7a8873ec",
+ "sha256": "0xr95r48i057pjkiai4dyr6wchv7ciq0h4g2rn1qrj88zcmxhx91"
}
},
{
@@ -31888,28 +32164,28 @@
"repo": "ahyatt/ekg",
"unstable": {
"version": [
- 20260415,
- 39
+ 20260717,
+ 2134
],
"deps": [
"ekg",
"futur"
],
- "commit": "be6cc349a5054154470173af6521e569cb21bcb1",
- "sha256": "12jkrzxk541i4d1b427zhg7klg304kqidksypikbq18dppsvdh5l"
+ "commit": "3ea7ac9fc6f881ce63e8ab06dc71f4f383016c6f",
+ "sha256": "0ncq61rhmmmhavgdyjd4ddsvpkp47lrw2gx9qnv72nzdip05rfk5"
},
"stable": {
"version": [
0,
9,
- 0
+ 1
],
"deps": [
"ekg",
"futur"
],
- "commit": "be6cc349a5054154470173af6521e569cb21bcb1",
- "sha256": "12jkrzxk541i4d1b427zhg7klg304kqidksypikbq18dppsvdh5l"
+ "commit": "f1401f4189143dcfce5cd7d68231462d7a8873ec",
+ "sha256": "0xr95r48i057pjkiai4dyr6wchv7ciq0h4g2rn1qrj88zcmxhx91"
}
},
{
@@ -31920,28 +32196,28 @@
"repo": "ahyatt/ekg",
"unstable": {
"version": [
- 20260415,
- 39
+ 20260707,
+ 412
],
"deps": [
"denote",
"ekg"
],
- "commit": "be6cc349a5054154470173af6521e569cb21bcb1",
- "sha256": "12jkrzxk541i4d1b427zhg7klg304kqidksypikbq18dppsvdh5l"
+ "commit": "f1401f4189143dcfce5cd7d68231462d7a8873ec",
+ "sha256": "0xr95r48i057pjkiai4dyr6wchv7ciq0h4g2rn1qrj88zcmxhx91"
},
"stable": {
"version": [
0,
9,
- 0
+ 1
],
"deps": [
"denote",
"ekg"
],
- "commit": "be6cc349a5054154470173af6521e569cb21bcb1",
- "sha256": "12jkrzxk541i4d1b427zhg7klg304kqidksypikbq18dppsvdh5l"
+ "commit": "f1401f4189143dcfce5cd7d68231462d7a8873ec",
+ "sha256": "0xr95r48i057pjkiai4dyr6wchv7ciq0h4g2rn1qrj88zcmxhx91"
}
},
{
@@ -32014,19 +32290,19 @@
"repo": "dimitri/el-get",
"unstable": {
"version": [
- 20260215,
- 1117
+ 20260615,
+ 2354
],
- "commit": "911c252afe763a5cd1cbd188c476d44353cd5271",
- "sha256": "094xlvqaj2crd405jhfk7raxdylw43k9f42wzc15miix6c98ldsz"
+ "commit": "447b7efc9fca29a087f4ec29c5d8ccb580cd1c78",
+ "sha256": "1qxxrvjw5fi75q6sgpkb83r4jg77prjgzf6lgvjb2vqzqyl046ir"
},
"stable": {
"version": [
5,
- 1
+ 2
],
- "commit": "bfffd553f4c72b818e9ee94f05458eae7a16056b",
- "sha256": "1awyh9ffd6a4cia239s89asb88ddqlnrv757d76vcb701pq412bz"
+ "commit": "ec3b0a052bf2f90f30c51042ddb06471b35c7ab6",
+ "sha256": "1qmgrkwyv8irfsagz0n960z7ihw0q995d2s2cazyxcxzhw6817vx"
}
},
{
@@ -32486,11 +32762,11 @@
"repo": "Mstrodl/elcord",
"unstable": {
"version": [
- 20260121,
- 1637
+ 20260506,
+ 2048
],
- "commit": "827dccbbdae038330f47e16ca189fd3e4ef25964",
- "sha256": "15vfrb6vl1ycx2as051p8nqmfbcxhzcf2pqc52a5nq1lsdq1ybk0"
+ "commit": "033be3dc076fdb3de335d3b12bac5f783ebec820",
+ "sha256": "0x17jrv7pblrd8r2kgky1ndwi8fnz8p88hd6hmghdrwbl7ffpdlw"
}
},
{
@@ -32580,20 +32856,20 @@
"repo": "emacs-eldev/eldev",
"unstable": {
"version": [
- 20250314,
- 2105
+ 20260612,
+ 1624
],
- "commit": "87373ddace0c4b2267d8f45ebd20e4b0eb27f821",
- "sha256": "19lapjhhq39ffimgh20l148c456811xrgdxnycjlc6iy6zrbdbda"
+ "commit": "7ce62b0a71f75c8568e391e45eafe0687f610076",
+ "sha256": "0hch4cp47a4hrc1604cryq0yq8a9518a0wjkaz9s0a9ajlvx13y6"
},
"stable": {
"version": [
1,
11,
- 1
+ 2
],
- "commit": "ff1e8269fca7e2ee2e50774ade3ce88b79e78cfc",
- "sha256": "0sf8xyzblc0fs2d65jgcycavnzmrp1wg0sfr29gjkq1kvzyl7phb"
+ "commit": "92a46b48793e561b00189a06014df0d7bbeed3be",
+ "sha256": "1khqapvgm1y3svzb3pr6s1a3b6mzxdwy1cybbnssaxlvfjvgyvaz"
}
},
{
@@ -32604,11 +32880,11 @@
"repo": "casouri/eldoc-box",
"unstable": {
"version": [
- 20260415,
- 226
+ 20260620,
+ 158
],
- "commit": "2680a08ff2438ff8c2ea6f8d57f22095f857900c",
- "sha256": "1iqha79lpydaz2i5dah11zsj060bs1livl3fpi76kh3j5ak6v5id"
+ "commit": "e458cefba4013785ef6099c6245463689a50dd7d",
+ "sha256": "0bza0jgzlrz25xb1dy3l17gbmd4nnqi5x8bsvqa586i8jgd06hqw"
},
"stable": {
"version": [
@@ -32696,28 +32972,28 @@
"repo": "huangfeiyu/eldoc-mouse",
"unstable": {
"version": [
- 20260402,
- 1025
+ 20260612,
+ 945
],
"deps": [
"eglot",
"posframe"
],
- "commit": "67bb73e54533e276e35d2548aa30e299c3a5ee18",
- "sha256": "1ysdf36dva7kzhxm63fp229fqp1ii2i5swf1qwgj03i4j755pfnz"
+ "commit": "6b7bddc4b16c0b3d6f4203e03e659b5211cab516",
+ "sha256": "1y4lfk2k3qhpjav0b3vhlfhvl1zy74lg64cbmhs6kmiajrn578rv"
},
"stable": {
"version": [
3,
0,
- 6
+ 8
],
"deps": [
"eglot",
"posframe"
],
- "commit": "79e47a4099cd4f9144a1636d8353a07b614c0c0a",
- "sha256": "028gyngnlq6x0g8cd3m0a33v9skn94lavykls65lqxh91gr39lb3"
+ "commit": "6b7bddc4b16c0b3d6f4203e03e659b5211cab516",
+ "sha256": "1y4lfk2k3qhpjav0b3vhlfhvl1zy74lg64cbmhs6kmiajrn578rv"
}
},
{
@@ -32883,20 +33159,20 @@
"repo": "swflint/electric-ospl-mode",
"unstable": {
"version": [
- 20260108,
- 1622
+ 20260701,
+ 1901
],
- "commit": "8599de5864e20831f2a3719f83da6690e0575c56",
- "sha256": "0xhf52vkmilr4knc5xnjxphii0dlm8w4azqw9gbw4ypwx2rcz2jw"
+ "commit": "88ab5ca588b4cbd1ddd27757d390da19298b05bd",
+ "sha256": "0ngnb5db38vl2g8xln6ai1law92bci3mpa533k47k9rg5rbp0zbl"
},
"stable": {
"version": [
3,
3,
- 1
+ 2
],
- "commit": "a17f7312ef48eba1586c7d0637336eb19aee057e",
- "sha256": "04mp6pqxr5p01z4wqkj8wy07ys3p1n5fm9h3yzplknvr3n2djvxl"
+ "commit": "88ab5ca588b4cbd1ddd27757d390da19298b05bd",
+ "sha256": "0ngnb5db38vl2g8xln6ai1law92bci3mpa533k47k9rg5rbp0zbl"
}
},
{
@@ -32988,26 +33264,32 @@
},
{
"ename": "elfeed",
- "commit": "25cd87f2f80a7228ae65ec26dc6c87f50fd2f9d0",
- "sha256": "16f6y81n1kh9fhyl9950pfm0z3knv1ygam2cs41ydz6drnrvh119",
+ "commit": "d006f2f4284c73e83028d951632d4b7a61e87607",
+ "sha256": "1qi1q9lbf5x4zwa3nr5h7srr8ckyys0jdxwbc57nhch65dbs7l4y",
"fetcher": "github",
- "repo": "skeeto/elfeed",
+ "repo": "emacs-elfeed/elfeed",
"unstable": {
"version": [
- 20260218,
- 1306
+ 20260714,
+ 920
],
- "commit": "bbb3cac27b0412d80b327b5cfaab83683c96a2a1",
- "sha256": "1z1ig5h2mhy7zdz8vh003536mmpkrjr7jm84ih3wsx8krvhgc1lb"
+ "deps": [
+ "compat"
+ ],
+ "commit": "e18cbb8cc4bb08e1512571449623f5f03f43f94c",
+ "sha256": "1kbhzzf614dd8pz1s90vpqfx75dpv016z474i7l2rsq0an6xxb3s"
},
"stable": {
"version": [
- 3,
4,
- 2
+ 1,
+ 0
],
- "commit": "904b6d4feca78e7e5336d7dbb7b8ba53b8c4dac1",
- "sha256": "0yq93abyadzrmcd40pi06wcr4jg9ddhlz2phg0wjypprqvv4q49z"
+ "deps": [
+ "compat"
+ ],
+ "commit": "d08bb8e3d1e57f1b3941abcd8d141ac59315a5e4",
+ "sha256": "0r207pxip8s7h4lcmrbd98p1psrs5211byvj5501n8qdcdwn199s"
}
},
{
@@ -33177,28 +33459,28 @@
"repo": "fasheng/elfeed-protocol",
"unstable": {
"version": [
- 20240822,
- 805
+ 20260523,
+ 1339
],
"deps": [
"cl-lib",
"elfeed"
],
- "commit": "4f5e77a28c501db686ac06a2ea250a7b37d5420c",
- "sha256": "04dvg0haz5b2gl4iz7aqiryys24fwjrp6h23fcga3gjipwwwxzmb"
+ "commit": "58936590459ccc2dfd6132f69983011d15d9404a",
+ "sha256": "014b4986w860mf8zvbfmchbc3sjmndcwy3wrx5fncmndkd750j2b"
},
"stable": {
"version": [
+ 1,
0,
- 9,
- 1
+ 0
],
"deps": [
"cl-lib",
"elfeed"
],
- "commit": "bcefb85a1d4075f36e73a94bda569e71f28a52c2",
- "sha256": "1n5bns7181j6n603a626jsv26v06s3wm86ml7vixlp234p0frypp"
+ "commit": "58936590459ccc2dfd6132f69983011d15d9404a",
+ "sha256": "014b4986w860mf8zvbfmchbc3sjmndcwy3wrx5fncmndkd750j2b"
}
},
{
@@ -33239,15 +33521,15 @@
"repo": "fritzgrabo/elfeed-summarize",
"unstable": {
"version": [
- 20260217,
- 1534
+ 20260522,
+ 2046
],
"deps": [
"elfeed",
"llm"
],
- "commit": "b4d9f8a7bb72d9fd0db804eff535c42859d94cf8",
- "sha256": "09f0v2mxrq01fjkpz6zk34c74hqy8y2z9qawv5lmm55sc91z2ajv"
+ "commit": "9b2fbc469d31e1f965ff1953e483adabbdf4495d",
+ "sha256": "116znd3s2alzr59zv0yarili4nk2sgbymkj7mkr9plfnzshr80ka"
}
},
{
@@ -33258,15 +33540,15 @@
"repo": "SqrtMinusOne/elfeed-summary",
"unstable": {
"version": [
- 20240929,
- 2043
+ 20260607,
+ 1418
],
"deps": [
"elfeed",
"magit-section"
],
- "commit": "76b4b93838b0420a114f934bbf8c09f25bf6ad16",
- "sha256": "0ic2nzs88ck4f5vkk8m7sln2hawglnj4b2vzfl80vlip13dj3l3a"
+ "commit": "d8f237530c05c8be3093af295d3f5d530c2d3130",
+ "sha256": "1b2kfjjk8kk4hl6mswjh74hklmx494ra4m3lzrkx2yrmj3mmgw0w"
},
"stable": {
"version": [
@@ -33290,15 +33572,15 @@
"repo": "karthink/elfeed-tube",
"unstable": {
"version": [
- 20260404,
- 1841
+ 20260702,
+ 1928
],
"deps": [
"aio",
"elfeed"
],
- "commit": "8e1334cfc8114ddd71b4de99760429e4e8a81f7b",
- "sha256": "0c3lxk5r1v04rbsv4ivhwpvd0g8dzlq1lqzc35xy862ckaj41ci7"
+ "commit": "f653d5b7f27a2eace217d9e6b4f40e0e35ae88cd",
+ "sha256": "1lll43d8bd4j36ckvyrsc7fdbcxs6j8p21nk49rlngkczk12pfxy"
},
"stable": {
"version": [
@@ -33344,6 +33626,40 @@
"sha256": "1vsrsnvz0ysd36a99zk7n2giv0gxznlnls8zq6lcc0hwqw78i5cq"
}
},
+ {
+ "ename": "elfeed-web",
+ "commit": "1285db21b49c7d81ee9f4751aee3efc80457d3c1",
+ "sha256": "1nfpiy3fa11gibv96lr2awqbzfczq22w3hqvcx423zkg5riiq7pr",
+ "fetcher": "github",
+ "repo": "emacs-elfeed/elfeed-web",
+ "unstable": {
+ "version": [
+ 20260623,
+ 1111
+ ],
+ "deps": [
+ "compat",
+ "elfeed",
+ "simple-httpd"
+ ],
+ "commit": "9074428d7a5159e647ebdd07f53c9720b908aaf6",
+ "sha256": "0awlazj1cpb1idsw8pflc3r1xdc65n7fwyjf3csa6aph0awzrnq3"
+ },
+ "stable": {
+ "version": [
+ 4,
+ 0,
+ 0
+ ],
+ "deps": [
+ "compat",
+ "elfeed",
+ "simple-httpd"
+ ],
+ "commit": "e947501a29457a55dfb0828aa791185c6b41bc37",
+ "sha256": "1gz10229bksz96l06czk2n6as65zb8kyib9mwln08ysrpdjs2k18"
+ }
+ },
{
"ename": "elfeed-webkit",
"commit": "75394f3a128e21c730ca755fca540c4723436733",
@@ -33466,11 +33782,11 @@
"repo": "ideasman42/emacs-elisp-autofmt",
"unstable": {
"version": [
- 20260407,
- 326
+ 20260611,
+ 427
],
- "commit": "b1cdd8661930a35b1633ccc28b27b793145cd108",
- "sha256": "1fpyr30aln2rpslx3n7s868cbxw20yv5cdsn8hvf0mvb2bwfmny3"
+ "commit": "fdae9054c55804def507cf7045c8460573d876a9",
+ "sha256": "1m43xcddswr7kl218w06rmix833jfhyr6car173ln00ggd5yvnf7"
}
},
{
@@ -33571,14 +33887,14 @@
"repo": "laurynas-biveinis/elisp-dev-mcp",
"unstable": {
"version": [
- 20260210,
- 434
+ 20260630,
+ 1120
],
"deps": [
"mcp-server-lib"
],
- "commit": "acce467f667df06e8dd391d64c5a553997dabed5",
- "sha256": "019b0yg1k1dknmw47wz9s8f9k6rzj7535g5alxrf4nw9j165n0i2"
+ "commit": "d70a8f38ededefb7e3d11f3e2b519bf754a54d1a",
+ "sha256": "0km6yzp3274aqv394zsafgy2vj8ljh61na53x56svaxxq46v0dzc"
},
"stable": {
"version": [
@@ -33872,8 +34188,8 @@
"repo": "s-kostyaev/ellama",
"unstable": {
"version": [
- 20260410,
- 54
+ 20260712,
+ 1716
],
"deps": [
"compat",
@@ -33882,13 +34198,13 @@
"transient",
"yaml"
],
- "commit": "de68b25318a1eef629f4aad677dc7dd6fe446c2e",
- "sha256": "0nk7c47qqm2w00c6cmlw6fv23qsfhg7fqb303fv5a9avdl47mnvh"
+ "commit": "b00c307c97a2e447948a589fe591e3cad2d4b93a",
+ "sha256": "16nxq115s3b70y9gj5w1wn4ihq4wfczaripwnlb283sz3waygj9m"
},
"stable": {
"version": [
1,
- 13,
+ 30,
0
],
"deps": [
@@ -33898,8 +34214,8 @@
"transient",
"yaml"
],
- "commit": "de68b25318a1eef629f4aad677dc7dd6fe446c2e",
- "sha256": "0nk7c47qqm2w00c6cmlw6fv23qsfhg7fqb303fv5a9avdl47mnvh"
+ "commit": "b00c307c97a2e447948a589fe591e3cad2d4b93a",
+ "sha256": "16nxq115s3b70y9gj5w1wn4ihq4wfczaripwnlb283sz3waygj9m"
}
},
{
@@ -34056,20 +34372,20 @@
"repo": "sp1ff/elmpd",
"unstable": {
"version": [
- 20250910,
- 327
+ 20260619,
+ 2114
],
- "commit": "a68563fa3e3b09fcdaf4b9f070542f8cfa257067",
- "sha256": "0kyw7j2zi2ji07hmpiyrpnyfmdrficinyjnvp7cnrphai925gj92"
+ "commit": "40a666c153da0c45262230bed3c7594e3362ca09",
+ "sha256": "0qip0rj6zj1p2a8a45dvlnkayjc2pj4ywc80mq0qg7yf6cnxw7jp"
},
"stable": {
"version": [
1,
0,
- 1
+ 2
],
- "commit": "89d8b514ed940d7a9452a804158fe6604ec6016f",
- "sha256": "16fg699zgy14yl3ymqq2cqbpplb9prsqvi550rx69zbq7sq24bp0"
+ "commit": "40a666c153da0c45262230bed3c7594e3362ca09",
+ "sha256": "0qip0rj6zj1p2a8a45dvlnkayjc2pj4ywc80mq0qg7yf6cnxw7jp"
}
},
{
@@ -34144,6 +34460,30 @@
"sha256": "0fwl14xqnxq5d4a9wk0p1xvfkmff5inwmz2v1s8n7w1sy29zslrn"
}
},
+ {
+ "ename": "elot",
+ "commit": "523f6f9edbf3af4a4bbfe0bdbdc15cfd0376c4c7",
+ "sha256": "1z1jrp3g8jsdsiq2p0abns0zmj4h09d2aq78bcm4kg8m9173s1mm",
+ "fetcher": "github",
+ "repo": "johanwk/elot",
+ "unstable": {
+ "version": [
+ 20260709,
+ 1716
+ ],
+ "commit": "d7e9b47207a16841bb5a08077e1dfcb47608f37f",
+ "sha256": "113nyv2w42mvmkkrfzxfdzsz0x57icwlfa62rmxcgxflizy2ff37"
+ },
+ "stable": {
+ "version": [
+ 2,
+ 1,
+ 0
+ ],
+ "commit": "62e4ce56610caf2336a19f23418bea819c1e36b7",
+ "sha256": "07syg6kih7z2hzwxvx8h9pd8wrpyak7m0z343yggzncl5iyp9zq1"
+ }
+ },
{
"ename": "eloud",
"commit": "f1e80fba9bc541594129756f5c668f3192919bc8",
@@ -34265,11 +34605,11 @@
"stable": {
"version": [
3,
- 6,
- 6
+ 7,
+ 0
],
- "commit": "dcdeb86f7ae633e252f9ef8a73d3458e87c1ab12",
- "sha256": "15cgqzzfjikq4spsmf7mmhvrd6igcsv75d9mdsxl5j6zhq784hh8"
+ "commit": "d799c467a1f35934f96d33960d638ddf796f01ba",
+ "sha256": "0wzj4n8wc90mqzmd86rvq8g20mk44lvmqdvfan3pj3z3b1jnk82c"
}
},
{
@@ -34295,8 +34635,8 @@
"repo": "jorgenschaefer/elpy",
"unstable": {
"version": [
- 20260413,
- 2143
+ 20260715,
+ 1747
],
"deps": [
"company",
@@ -34305,8 +34645,8 @@
"s",
"yasnippet"
],
- "commit": "777f5a5f951ee4b717856007c337e9f37fd4ea5d",
- "sha256": "03rkjfi08j5lz0jl0aw66sqc2rbrx55kj6yanxmd6drv63ryd1zj"
+ "commit": "9cdf26dfea1cb044b3cf1dfa9755b6479bfd9a1c",
+ "sha256": "13pkr52vzz9fkp4062zrqdxh04rscka5f1anl9lk730z8c7p5f23"
},
"stable": {
"version": [
@@ -34656,34 +34996,36 @@
},
{
"ename": "elx",
- "commit": "57a2fb9524df3fdfdc54c403112e12bd70888b23",
- "sha256": "008nwa2gn3d2ayr8023pxyvph52gh9m56f77h41hp8hcw6hbdwrz",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "1rn1cxcw8gqagiap4k0zrl680x8jr7x2fcbli9kc5s16gibazdzw",
"fetcher": "github",
"repo": "emacscollective/elx",
"unstable": {
"version": [
- 20260101,
- 1832
+ 20260601,
+ 1500
],
"deps": [
"compat",
+ "cond-let",
"llama"
],
- "commit": "5c700de6d3b4163b0a3ed3060f491c22b4bfaa85",
- "sha256": "1naspqq3d93l8d2iba00gkhhvwxrj8nj5h459msd6in0s1lqc682"
+ "commit": "99ea4bde756a3ae4a0cae96e9fffe6b13421d25f",
+ "sha256": "0ni8agxcf64cgpmy4jhqsss2d90bd0hfg48187idfq7clhnxl07i"
},
"stable": {
"version": [
2,
3,
- 2
+ 3
],
"deps": [
"compat",
+ "cond-let",
"llama"
],
- "commit": "5c700de6d3b4163b0a3ed3060f491c22b4bfaa85",
- "sha256": "1naspqq3d93l8d2iba00gkhhvwxrj8nj5h459msd6in0s1lqc682"
+ "commit": "99ea4bde756a3ae4a0cae96e9fffe6b13421d25f",
+ "sha256": "0ni8agxcf64cgpmy4jhqsss2d90bd0hfg48187idfq7clhnxl07i"
}
},
{
@@ -34778,20 +35120,20 @@
"repo": "magit/emacsql",
"unstable": {
"version": [
- 20260401,
- 1220
+ 20260601,
+ 1722
],
- "commit": "2fe6d4562b32a170a750d5e80514fbb6b6694803",
- "sha256": "1hm6g2ad8bsfrl7gqcb5psphcgvak8608b6vw1rc5rrsr7j6rdsl"
+ "commit": "d811bbefcb5e27841af55cae53aa939ba720de77",
+ "sha256": "0spinavna6k6b43lcj92w1sc0jlffzqyj9byxyayg4g6md995dhi"
},
"stable": {
"version": [
4,
- 3,
- 6
+ 4,
+ 1
],
- "commit": "2fe6d4562b32a170a750d5e80514fbb6b6694803",
- "sha256": "1hm6g2ad8bsfrl7gqcb5psphcgvak8608b6vw1rc5rrsr7j6rdsl"
+ "commit": "d811bbefcb5e27841af55cae53aa939ba720de77",
+ "sha256": "0spinavna6k6b43lcj92w1sc0jlffzqyj9byxyayg4g6md995dhi"
}
},
{
@@ -34898,14 +35240,14 @@
"repo": "oantolin/embark",
"unstable": {
"version": [
- 20260404,
- 2302
+ 20260610,
+ 302
],
"deps": [
"compat"
],
- "commit": "27de48004242e98586b9c9661fdb6912f26fe70f",
- "sha256": "1y97kibzz36wrzcjv997qp5pliikda0dhsm9461pin3q5gv8y6kq"
+ "commit": "350ca86924c5027e80875943fba7b912a71e5791",
+ "sha256": "0s2q46qbf9aa0hs53m4qp4pwjh9zhsfiagragwy0iffh4rw5jn73"
},
"stable": {
"version": [
@@ -34927,16 +35269,16 @@
"repo": "oantolin/embark",
"unstable": {
"version": [
- 20260404,
- 2302
+ 20260503,
+ 118
],
"deps": [
"compat",
"consult",
"embark"
],
- "commit": "27de48004242e98586b9c9661fdb6912f26fe70f",
- "sha256": "1y97kibzz36wrzcjv997qp5pliikda0dhsm9461pin3q5gv8y6kq"
+ "commit": "ec5dd1475595277ef908567d0a18d32f1c40bc91",
+ "sha256": "04kbfad7qjcraihf3238xxadw10g96ndl08449d53avwwclr679d"
},
"stable": {
"version": [
@@ -35104,6 +35446,26 @@
"sha256": "0hc61haiyhrzfm44b17ndqdbyq5vgy4g2v4da87scvkaxnsj8vbq"
}
},
+ {
+ "ename": "emcp",
+ "commit": "49fc1d7aaed297404c3d40d083395ae108aef4eb",
+ "sha256": "06d5l76qdd48130w2zyqq80m682das82l2w7mc7n5039zqfz8fvs",
+ "fetcher": "codeberg",
+ "repo": "martenlienen/emcp",
+ "unstable": {
+ "version": [
+ 20260706,
+ 1558
+ ],
+ "deps": [
+ "elisp-refs",
+ "http-server",
+ "magit-section"
+ ],
+ "commit": "cc452a2cb8b128305c7091a4adf9435e6b227fc1",
+ "sha256": "18i0lwv057lij599y2f2hblivvc7rmiwl1ff2vbykmakcsxfncrp"
+ }
+ },
{
"ename": "emidje",
"commit": "5d64b3b42b4b9acd3e9d84921df287f3217db83e",
@@ -35769,28 +36131,28 @@
"repo": "jamescherti/enhanced-evil-paredit.el",
"unstable": {
"version": [
- 20260314,
- 1908
+ 20260604,
+ 223
],
"deps": [
"evil",
"paredit"
],
- "commit": "11521019d4800f4de2a2ac460a48eba013ad89b6",
- "sha256": "0px209sgx7lzlybbaw28l71zcgbynb95gwyb7xnis37mb4m6w589"
+ "commit": "2209fceae2acab381facb1865ac41b28c2938f10",
+ "sha256": "1xyld0nfgnzrz36djv7c1q722gva9a93gxrsxxnx6s4pknrghlza"
},
"stable": {
"version": [
1,
0,
- 4
+ 5
],
"deps": [
"evil",
"paredit"
],
- "commit": "7ca82138881a5efacacf0494b898fb1201311fc8",
- "sha256": "0kkfnnqd2pzzm92pi13ngh63frp33z2mfb1prkqaw62nq4yrw6d8"
+ "commit": "2209fceae2acab381facb1865ac41b28c2938f10",
+ "sha256": "1xyld0nfgnzrz36djv7c1q722gva9a93gxrsxxnx6s4pknrghlza"
}
},
{
@@ -35946,15 +36308,15 @@
"repo": "purcell/envrc",
"unstable": {
"version": [
- 20260325,
- 1609
+ 20260622,
+ 1004
],
"deps": [
"inheritenv",
"seq"
],
- "commit": "60820285aeed4f87969d663a1c14a905c7bb763a",
- "sha256": "0a8ymkzjvykjjpnd6m1ysmbq1pqyvbijx6awwwwqwgzq0q5q2l8z"
+ "commit": "77e9dec1563bc204cc9e086cd8a7d3622196224c",
+ "sha256": "11ksm8049332a9j5p1xmrwwvmmn74kxwc7v4gaza131kx271jr19"
},
"stable": {
"version": [
@@ -36090,32 +36452,34 @@
"repo": "emacscollective/epkg",
"unstable": {
"version": [
- 20260416,
- 1107
+ 20260701,
+ 1311
],
"deps": [
"closql",
"compat",
+ "cond-let",
"emacsql",
"llama"
],
- "commit": "f3f8d26401a7a9c49d4b670dbf463dd010c26fae",
- "sha256": "0n6agpskxxqm5618ajp9wk8i6g047yjf889lw4qp5cb2kdqslfp8"
+ "commit": "63bf2ab384c0f96f344492d151549c5b95b6830f",
+ "sha256": "0wbx78x1knmm64kvy1rhln8hdg3qj7yvvxdk9wbpx00r9s5kh6hh"
},
"stable": {
"version": [
4,
- 1,
- 4
+ 2,
+ 2
],
"deps": [
"closql",
"compat",
+ "cond-let",
"emacsql",
"llama"
],
- "commit": "fc3cba38a416ec4e26a7d8eb7bc5ee910e67aa73",
- "sha256": "1im5di9rgvirzlnkfns6sv6wrn2sfb7k98f4i4b29kh7jwrrwzax"
+ "commit": "63bf2ab384c0f96f344492d151549c5b95b6830f",
+ "sha256": "0wbx78x1knmm64kvy1rhln8hdg3qj7yvvxdk9wbpx00r9s5kh6hh"
}
},
{
@@ -36126,30 +36490,32 @@
"repo": "emacscollective/epkg-marginalia",
"unstable": {
"version": [
- 20260301,
- 1306
+ 20260601,
+ 1622
],
"deps": [
"compat",
+ "cond-let",
"epkg",
"marginalia"
],
- "commit": "d6ccf20529c39652968d1b017fae78404ac191fb",
- "sha256": "1qchlg0aimljbxsa641lgscyqlbyjch6p1lyaa9gffmc1jgslzn2"
+ "commit": "e789ebff7af97f193e38cc3d5636dd55022973b8",
+ "sha256": "1pkjlyh5n714q604savi4yg05xlqza9q6a85p1gdpxgv5gxa3dfd"
},
"stable": {
"version": [
1,
1,
- 4
+ 5
],
"deps": [
"compat",
+ "cond-let",
"epkg",
"marginalia"
],
- "commit": "d6ccf20529c39652968d1b017fae78404ac191fb",
- "sha256": "1qchlg0aimljbxsa641lgscyqlbyjch6p1lyaa9gffmc1jgslzn2"
+ "commit": "e789ebff7af97f193e38cc3d5636dd55022973b8",
+ "sha256": "1pkjlyh5n714q604savi4yg05xlqza9q6a85p1gdpxgv5gxa3dfd"
}
},
{
@@ -36453,11 +36819,11 @@
"repo": "alexmurray/erc-matterircd",
"unstable": {
"version": [
- 20210804,
- 504
+ 20260628,
+ 743
],
- "commit": "e3a59267c044474f9ca066d36517e9a3d872759c",
- "sha256": "1iqyyhaz8zypgj9ij8ivqym0xry10zzyi8qf16fzg2ppxl47bc5i"
+ "commit": "f4c8e3cac924065b2d0e43114459c45fa39cc006",
+ "sha256": "0jsw6vbhr5g10cv3sw5lkkv8nkb18gcc6x2zy4hzqp9d72y7y08h"
}
},
{
@@ -36842,19 +37208,20 @@
"repo": "erlang/otp",
"unstable": {
"version": [
- 20260420,
- 1445
+ 20260702,
+ 800
],
- "commit": "a42e46bab47432b988ee60e4c9d915c858bcf32d",
- "sha256": "0vfzzxs7dv3wadrlgb97fjc7vr8hvwghjz9hynqjvzf2i2ranl4f"
+ "commit": "40ea544c97aa8492596f35a88286ea80326510ec",
+ "sha256": "1h6gv5hakz0jw6b93c7kyadcqbgp1xai3svd18hcr9z67bxm8m3j"
},
"stable": {
"version": [
- 28,
- 5
+ 29,
+ 0,
+ 3
],
- "commit": "f4506ee46d68694a1d23ca81c314092fd83e8f85",
- "sha256": "15vjxb10840jvxhnnrgsd2s4j1sclwn5nkfwyd8zdbdcyn6hi203"
+ "commit": "40ea544c97aa8492596f35a88286ea80326510ec",
+ "sha256": "1h6gv5hakz0jw6b93c7kyadcqbgp1xai3svd18hcr9z67bxm8m3j"
}
},
{
@@ -36877,13 +37244,13 @@
"stable": {
"version": [
0,
- 3
+ 4
],
"deps": [
"erlang"
],
- "commit": "bf5adaa17a55a8a0d21c30de949d6074731711a0",
- "sha256": "01sl1162w9qx10yl1c8k5a5gskflpd47ky7qsh5zln9qyrqpr5bw"
+ "commit": "4e9095be49630dc279c70033245a7e1051614f92",
+ "sha256": "149brvyawf38q0d1i43abnzqijnwj2sqnvwic68kz1cn3c3vdzch"
}
},
{
@@ -37281,32 +37648,32 @@
},
{
"ename": "esh-autosuggest",
- "commit": "dc3776068d6928fc1661a27cccaeb8fb85577099",
- "sha256": "1rcng1dhy4yw95qg909ck33svpdxhv9v5k7226d29gp4y54dwyrx",
- "fetcher": "github",
+ "commit": "1d888e12b1c4002896723b3c993a72bf920ef37b",
+ "sha256": "1adsjqm1h8pj2p6n49l7y02ccqwxfw40crkpd1r60xizmdj19gcn",
+ "fetcher": "sourcehut",
"repo": "dieggsy/esh-autosuggest",
"unstable": {
"version": [
- 20241002,
- 1820
+ 20260530,
+ 527
],
"deps": [
"company"
],
- "commit": "b3ae8eb2d6f8da1dc59f61a589003d741514d6f6",
- "sha256": "1n4zswxs49qn2jngr82w9kk7qdhdwysknsm95iq3ija2azyvqgcr"
+ "commit": "40774022105ed16287fcf26553a16c4cdda5e1ab",
+ "sha256": "08x015gvdp804gpfhvxz72m7iw4zg4lrrzyd8gg191j4mrskjbzk"
},
"stable": {
"version": [
2,
- 0,
- 1
+ 1,
+ 0
],
"deps": [
"company"
],
- "commit": "a6d5eb3337d010bd2a2d677ff304cd53adc291a0",
- "sha256": "0l2nnlr3b6df1xn0qjf5d5ryy1wcs1jczyfy795vsasd5gm3g0xh"
+ "commit": "1017a4992c086d6d0924572561879af1ac1d8c03",
+ "sha256": "01d40x7zibd8gdxlvnkn9hhj6bgdxn6g4mz4h7pvgryyvgbljy0g"
}
},
{
@@ -37971,11 +38338,11 @@
"repo": "emacs-ess/ESS",
"unstable": {
"version": [
- 20260423,
- 1426
+ 20260526,
+ 1432
],
- "commit": "5a09992aa6276fc8626a41d01d58b1d85959edaf",
- "sha256": "1f238ajfm1qjg5qqkaknw1flvrdxrzhqmsb5mswv00irbagb6bb2"
+ "commit": "da7d7dc1d2cf95760f56cb1763eb543c4dadaa0c",
+ "sha256": "0rma9cz44ajiwnbndmc8hqfn61gc6asj38fzd06nhyf2l39gqrcs"
},
"stable": {
"version": [
@@ -38317,21 +38684,21 @@
},
{
"ename": "eterm-256color",
- "commit": "e556383f7e18c0215111aa720d4653465e91eff6",
- "sha256": "1mxc2hqjcj67jq5k4621a7f089qahcqw7f0dzqpaxn7if11w333b",
- "fetcher": "github",
+ "commit": "1d888e12b1c4002896723b3c993a72bf920ef37b",
+ "sha256": "153g793mfgwrf9b7jkdlk18z493jgx3igbg1mz5n6g6s8vps92dc",
+ "fetcher": "sourcehut",
"repo": "dieggsy/eterm-256color",
"unstable": {
"version": [
- 20210224,
- 2241
+ 20260530,
+ 531
],
"deps": [
"f",
"xterm-color"
],
- "commit": "05fdbd336a888a0f4068578a6d385d8bf812a4e8",
- "sha256": "0ln1agcgr607n5akm0ax659g11kfbik7cq8ssnqpr3z7riiv95dm"
+ "commit": "868eeaa958de1deab690fe8ac8f5477452ccdb6a",
+ "sha256": "0w9khzgkg17dsyd623p3gbqyd372ld3mrniwsidj2awk6y5k0y2r"
},
"stable": {
"version": [
@@ -38622,19 +38989,20 @@
"repo": "beacoder/everlasting-scratch",
"unstable": {
"version": [
- 20250206,
- 628
+ 20260713,
+ 605
],
- "commit": "a990e8d2261e5ac109729eb8c2c8e1947e45c8ed",
- "sha256": "0lhyaqwxwm54rw9lvhk6vqpnz4350dx45gxc4qgm0g6qgdzn78dk"
+ "commit": "4180fd04183a24de44a920cc02ac5a3bbf23643f",
+ "sha256": "1gqarbnnq2rs8ckvisf0bbrmh9nmfhvlqv2b1a0xwlcbn6mhn6cc"
},
"stable": {
"version": [
0,
+ 1,
1
],
- "commit": "509cf24422d4047b110aac8ed077b52a8011cfe7",
- "sha256": "04snf28gk7lc9pd5ilv9w1xjm14fi3ajp6dwaz4bbq8haacm3hpz"
+ "commit": "4180fd04183a24de44a920cc02ac5a3bbf23643f",
+ "sha256": "1gqarbnnq2rs8ckvisf0bbrmh9nmfhvlqv2b1a0xwlcbn6mhn6cc"
}
},
{
@@ -38645,16 +39013,16 @@
"repo": "emacs-evil/evil",
"unstable": {
"version": [
- 20251108,
- 138
+ 20260603,
+ 654
],
"deps": [
"cl-lib",
"goto-chg",
"nadvice"
],
- "commit": "729d9a58b387704011a115c9200614e32da3cefc",
- "sha256": "0scdws40fg4k9lqyznjghnn8svn7l0c6mq7h2aq5pzkm6hanzqn3"
+ "commit": "3b678a221ee99cc6a95b01d7a3129ce5efc4c3da",
+ "sha256": "18hqjh4vz2pq40bvnrmshg1w5msq1b17l20vv5j6a76a2a7iqy8x"
},
"stable": {
"version": [
@@ -38797,28 +39165,28 @@
"repo": "wbolster/emacs-evil-colemak-basics",
"unstable": {
"version": [
- 20241004,
- 1613
+ 20260619,
+ 1649
],
"deps": [
"evil",
"evil-snipe"
],
- "commit": "9465c8da35fe7dd0f66184e671e357ec91faa3fe",
- "sha256": "1w1d239c7ivqdz46vnqhaz2fkx8xzzc2209ldf9w4f68nd6awqj3"
+ "commit": "70a08ff4c8148c38e0cdc2b89b0316fd504501f6",
+ "sha256": "1dg7kymvq3v5dblzja6qvm7nx44ly15715279vhpkq3xnig6ag3d"
},
"stable": {
"version": [
- 2,
- 2,
- 1
+ 3,
+ 0,
+ 0
],
"deps": [
"evil",
"evil-snipe"
],
- "commit": "05c023740f3d95805533081894bfd87f06401af5",
- "sha256": "1fnzrwr53h18wp4wkb834j39xg8bv7yqcmilb41bc81npfmi2mn1"
+ "commit": "70a08ff4c8148c38e0cdc2b89b0316fd504501f6",
+ "sha256": "1dg7kymvq3v5dblzja6qvm7nx44ly15715279vhpkq3xnig6ag3d"
}
},
{
@@ -38847,28 +39215,26 @@
"repo": "emacs-evil/evil-collection",
"unstable": {
"version": [
- 20260423,
- 438
+ 20260719,
+ 2207
],
"deps": [
- "annalist",
"evil"
],
- "commit": "2df40737c6cc9ccd8b69462a6f2f6a045c2d7684",
- "sha256": "1skwz01sjhgha848gk0vw9cbxzkip1nz4hkn629z8jzw25npdna3"
+ "commit": "03e1c04b398bc8948a21fac5f3baa4f70da1a350",
+ "sha256": "1b9nnnincpw5rvmqvlniy4hyq08vbdca9p40x0avr8r4scf7vzx2"
},
"stable": {
"version": [
+ 3,
0,
- 0,
- 10
+ 0
],
"deps": [
- "annalist",
"evil"
],
- "commit": "d0518fc1626f09a341d4b5a98c857087abfb1b0c",
- "sha256": "09hnxb8nh3g0hi93fz9f1y164gv9iyh5994wfn6fsq2v1xdz8phm"
+ "commit": "29acaa81d2992d9c89a4b15ead917abb3af05228",
+ "sha256": "0j89w682394fq96jx0da8scl7n0pihp8gb23sg4frkdp2l8yvl3z"
}
},
{
@@ -38927,15 +39293,16 @@
"repo": "PythonNut/evil-easymotion",
"unstable": {
"version": [
- 20200424,
- 135
+ 20260602,
+ 2314
],
"deps": [
"avy",
- "cl-lib"
+ "cl-lib",
+ "evil"
],
- "commit": "f96c2ed38ddc07908db7c3c11bcd6285a3e8c2e9",
- "sha256": "0xsva9bnlfwfmccm38qh3yvn4jr9za5rxqn4pwxbmhnx4rk47cch"
+ "commit": "629c894af63336028a61cc93d6465d10837eb82b",
+ "sha256": "0mlaqlfq99s3l6azrx2lbhxb4d7lc45z6jrj3y5cs8j606qd9x6h"
}
},
{
@@ -39132,6 +39499,38 @@
"sha256": "0pf8bl7bmcn1l0dlxkgbgwb1n2fxpzxwcr4jf06gzyrrmmwah526"
}
},
+ {
+ "ename": "evil-ghostel",
+ "commit": "32c111d2c381b618d3ca556c09b15bc3a0d91287",
+ "sha256": "0dq9lcwxil6qayxhhcy6csfbfk8jx8pi3r9gyx9l0jn2rsm9b6d6",
+ "fetcher": "github",
+ "repo": "dakra/ghostel",
+ "unstable": {
+ "version": [
+ 20260713,
+ 2022
+ ],
+ "deps": [
+ "evil",
+ "ghostel"
+ ],
+ "commit": "2191afe3049fc785c6fd2b1ab6b826daf500ffbe",
+ "sha256": "1fyqpbpv62hs3hqai1j04x30miwdqkkpqfxdh4vbxc331fhrj4dx"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 44,
+ 0
+ ],
+ "deps": [
+ "evil",
+ "ghostel"
+ ],
+ "commit": "2191afe3049fc785c6fd2b1ab6b826daf500ffbe",
+ "sha256": "1fyqpbpv62hs3hqai1j04x30miwdqkkpqfxdh4vbxc331fhrj4dx"
+ }
+ },
{
"ename": "evil-god-state",
"commit": "46b8586e9a821efb67539155f783a32867084bfa",
@@ -39159,28 +39558,28 @@
"repo": "jam1015/evil-god-toggle",
"unstable": {
"version": [
- 20251031,
- 2050
+ 20260522,
+ 2049
],
"deps": [
"evil",
"god-mode"
],
- "commit": "5f61e718133c86db3ddc0532cc0e1d4f80b967cb",
- "sha256": "1l7mj3lndk4lzn8min1cncqs7kdyzjd750i5m6dk9q1llnfnbn3d"
+ "commit": "d6f8d098b9f9e0046df5afd35ced5bc5ed5a0ea0",
+ "sha256": "0zrl2rzp8pb03ji90r9nr2kjfw39iw5kifkiyv01wh7jrdyjsxy3"
},
"stable": {
"version": [
1,
- 0,
+ 3,
0
],
"deps": [
"evil",
"god-mode"
],
- "commit": "a2e240e8ffdfff16ffa2be2517a7c60d3cc3ced9",
- "sha256": "19j9ip27va0m6sjm67mffyzz00fy1bxj09jlsvhxisd3c30300gk"
+ "commit": "d6f8d098b9f9e0046df5afd35ced5bc5ed5a0ea0",
+ "sha256": "0zrl2rzp8pb03ji90r9nr2kjfw39iw5kifkiyv01wh7jrdyjsxy3"
}
},
{
@@ -39290,13 +39689,13 @@
"version": [
0,
5,
- 5
+ 4
],
"deps": [
"evil"
],
- "commit": "a43914e3d483685dc11d616f9fcd268779dd0258",
- "sha256": "1ahnh30qimcfydwmdwblg3h1gmjlq5iibcr7h0r1s720fsb73fn7"
+ "commit": "d584ed3ea2a49ed7f93fe176800e7a2f95dff6aa",
+ "sha256": "1fjrq54vfacxmmk1w1f35w9mdbrlld462nnqfappj6v4d14cq3fs"
}
},
{
@@ -39487,26 +39886,26 @@
"repo": "redguardtoo/evil-mark-replace",
"unstable": {
"version": [
- 20250422,
- 242
+ 20260716,
+ 634
],
"deps": [
"evil"
],
- "commit": "90ee84748582be05fa8f9a02872321a08b455282",
- "sha256": "1w2f2df48hvabb750p3c9lsb2clpif4bv11z67wl9vafci53lahh"
+ "commit": "3221d2c3b304a1cb825f6c79da4d418a8233dcc2",
+ "sha256": "1fliqxyzg2sagwva618373ly83rj3xw16ri5s3s21jfm5jva73kz"
},
"stable": {
"version": [
0,
0,
- 6
+ 7
],
"deps": [
"evil"
],
- "commit": "217d5b507aa11dd0b334d5c3e1f74ac1fc2f66a4",
- "sha256": "17mn7jybnlzhb82h6jkxdhcr76p1p5dk1v7dpb74r3ccd75sqn2b"
+ "commit": "3221d2c3b304a1cb825f6c79da4d418a8233dcc2",
+ "sha256": "1fliqxyzg2sagwva618373ly83rj3xw16ri5s3s21jfm5jva73kz"
}
},
{
@@ -39675,11 +40074,11 @@
"repo": "redguardtoo/evil-nerd-commenter",
"unstable": {
"version": [
- 20230625,
- 254
+ 20260507,
+ 414
],
- "commit": "3b197a2b559b06a7cf39978704b196f53dac802a",
- "sha256": "1xi4sd75pzhgcd9lzhx18hlzbrwh5q9gbscb1971qn94mzxwd60r"
+ "commit": "db5ee61a6e75db074b7d20e9dcb68e0b94b4edc7",
+ "sha256": "0x7h3b44jdsdvz1991bmhblmc82s59rq9wnd4qvl3m783cxa9jdi"
},
"stable": {
"version": [
@@ -40237,20 +40636,20 @@
"repo": "wbolster/evil-swap-keys",
"unstable": {
"version": [
- 20191105,
- 1426
+ 20260624,
+ 2045
],
- "commit": "b5ef105499f998b5667da40da30c073229a213ea",
- "sha256": "1kawq9c64cmkdjy03sfppjn7g9anxnmds3ip7cgj1j0yym0glyfq"
+ "commit": "889672ad0d35ab062c52d9d84b22de4ac49753f3",
+ "sha256": "066qrmdxz77zmc9k7wbyzrzrgwfkr75g413r80jll9varf73y9sn"
},
"stable": {
"version": [
1,
- 0,
+ 1,
0
],
- "commit": "56bc201e265a6bd482a7c41a7c81d2238341ef3a",
- "sha256": "0n0hl0plaghz9rjssabxwfzm46kr6564hpfh6hn8lzla4rf1q5zs"
+ "commit": "889672ad0d35ab062c52d9d84b22de4ac49753f3",
+ "sha256": "066qrmdxz77zmc9k7wbyzrzrgwfkr75g413r80jll9varf73y9sn"
}
},
{
@@ -40280,11 +40679,11 @@
"repo": "7696122/evil-terminal-cursor-changer",
"unstable": {
"version": [
- 20260405,
- 711
+ 20260523,
+ 1907
],
- "commit": "06adce5174cf97d500d250fa6053722a326c18db",
- "sha256": "0a2v0wryg7y4y0chq08045wppm0bms0z99vv0bbzmc90cmpgsm6x"
+ "commit": "fb824f657fb4325c1124f3e1b61f0de7ed062adf",
+ "sha256": "1qywpk9z893q4a12n0zqgwsychhfqjv2py20z0fsg4j78aszdpnv"
},
"stable": {
"version": [
@@ -40384,27 +40783,28 @@
"repo": "wbolster/evil-text-object-python",
"unstable": {
"version": [
- 20191010,
- 1328
+ 20260706,
+ 1546
],
"deps": [
"dash",
"evil"
],
- "commit": "39d22fc524f0413763f291267eaab7f4e7984318",
- "sha256": "0293hfgczpjghvg28s27c5r6ll1zaq466pasrhzj71sqzyvxq7ax"
+ "commit": "c8b2c6d8f5194af99f65cceec1b692f464f00a8b",
+ "sha256": "06n7p1cwb1aaj5ixr0mb8s9fmkq45jrlwwp00p447vsnc5rsjv4l"
},
"stable": {
"version": [
1,
- 0,
- 1
+ 1,
+ 0
],
"deps": [
+ "dash",
"evil"
],
- "commit": "3b3fb01e7ad7eeeeae1143695547fe75148cc44f",
- "sha256": "1alin2rmx1xa1w3b1nb76bplmg10il55jxxm6jj7qs6z1izzllci"
+ "commit": "c8b2c6d8f5194af99f65cceec1b692f464f00a8b",
+ "sha256": "06n7p1cwb1aaj5ixr0mb8s9fmkq45jrlwwp00p447vsnc5rsjv4l"
}
},
{
@@ -40530,11 +40930,11 @@
"repo": "meain/evil-textobj-tree-sitter",
"unstable": {
"version": [
- 20260310,
- 405
+ 20260616,
+ 730
],
- "commit": "7f58008a82c70eb1c6c5761db499f0be0db9d6cb",
- "sha256": "0nfaz4vdghyaf0k8b35ssqif4fdisylqs55v1v0a8ss114r96b26"
+ "commit": "fecc0e11615df31a6651ce11b012388e53cad4e9",
+ "sha256": "074kadi1z43ixxvlfwd917czpiw4qg1ysybwxwdd7kb4x8siqpas"
},
"stable": {
"version": [
@@ -41139,10 +41539,10 @@
},
{
"ename": "exotica-theme",
- "commit": "ca71d6b596e2595f356f7848e202b2450d395f49",
- "sha256": "0bzibc1s7a2qxh03573q43dw4pk1svrvh17n6nzxznag8abnndqn",
+ "commit": "f5dc52f2853b75497df431a4d35663f3574c8286",
+ "sha256": "0yyn8fsj0x6cfp68skr72zy4ipndyi2f4s37fkns81ykgpmdrkas",
"fetcher": "github",
- "repo": "sacredyak/exotica-theme",
+ "repo": "rokrdev/exotica-theme",
"unstable": {
"version": [
20180212,
@@ -41733,6 +42133,30 @@
"sha256": "1qg48zbjdjqimw4516ymrsilz41zkib9321q0caf9474s9xyp2bi"
}
},
+ {
+ "ename": "f90-ts-mode",
+ "commit": "15ade73fdc7b379649b5cead652f8ad3a2c1e624",
+ "sha256": "1rwgvjks9bp37zgb81d7h0q8dw2rj2v3bxf5z678bkcx8bs8gfih",
+ "fetcher": "github",
+ "repo": "mscfd/emacs-f90-ts-mode",
+ "unstable": {
+ "version": [
+ 20260717,
+ 1000
+ ],
+ "commit": "e4549d68501bdef06db615b8674a9bd9f1f70a9d",
+ "sha256": "1wyfzp02brpvrxnzkjf0jdscxx1nlglk2g00bw0g5qy6xp36pzbn"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 3,
+ 0
+ ],
+ "commit": "3fbdbf64a17b2c712552d4733b02bf9bbf9258f6",
+ "sha256": "04l6iwz33gsbp6ab4idfh7zb7b9ggq9m34w67f7k7ps85hg2fgzg"
+ }
+ },
{
"ename": "fabric",
"commit": "83939d2a4d5874244a4916eee9ae6b327af18b5d",
@@ -41831,25 +42255,26 @@
"repo": "WJCFerguson/emacs-faff-theme",
"unstable": {
"version": [
- 20260413,
- 2137
+ 20260507,
+ 114
],
"deps": [
"modus-themes"
],
- "commit": "1a6ee167627a4c623f157f3afb5ec12d368889af",
- "sha256": "13vb0c5v5hd8jzy8cp6r2fv8wixcj5gfl9060d7w0qdf1h6kx6rv"
+ "commit": "468d7d4fafc8f8fe8515ac0454561121619e1129",
+ "sha256": "0j1b5irhj9ijs504i0sa4i4jvd9n08cr8r2qr1l0l3mj5qlppy8k"
},
"stable": {
"version": [
4,
- 0
+ 0,
+ 4
],
"deps": [
"modus-themes"
],
- "commit": "8f976f810e6f23d2afaaa13f53e11d73e941cbcf",
- "sha256": "1083ias5bk17vcvpa4xrnpps6r1v46xnzy2b2x0azin0vj9pvc65"
+ "commit": "468d7d4fafc8f8fe8515ac0454561121619e1129",
+ "sha256": "0j1b5irhj9ijs504i0sa4i4jvd9n08cr8r2qr1l0l3mj5qlppy8k"
}
},
{
@@ -41918,14 +42343,14 @@
"repo": "jrosdahl/fancy-dabbrev",
"unstable": {
"version": [
- 20220211,
- 633
+ 20260717,
+ 1243
],
"deps": [
"popup"
],
- "commit": "cf4a2f7e3e43e07ab9aa9db16532a21010e9fc8c",
- "sha256": "04z9pwvl68hsisnyf9wlxmkwk8xag36jvcchwcwp4n9vp04z8745"
+ "commit": "9a9296f0dcfe272cdff1fc2e0a6a62b8cdaf11ab",
+ "sha256": "0ix7cdcivkfxgd81hpx8bilz0dh6hgikvh5lgl0dyap9ml4y6br0"
}
},
{
@@ -41936,11 +42361,11 @@
"repo": "ideasman42/emacs-fancy-fill-paragraph",
"unstable": {
"version": [
- 20260421,
- 124
+ 20260615,
+ 716
],
- "commit": "3f3e8fddc4f69c7c0ff933af58e8c3a71292a7cb",
- "sha256": "1475h2i8b8b7xawkvawb76yr62y8p603id4lbhrrrrw9wvr7dnj2"
+ "commit": "a3a2b880db857e8e55a4d20a87680c35d0325439",
+ "sha256": "0ky203nmvdz4nfl8acs7g3fzklcm1pynjz2z3kiqgyhhxn85f4p4"
}
},
{
@@ -42355,25 +42780,25 @@
"repo": "martianh/fedi.el",
"unstable": {
"version": [
- 20260223,
- 1326
+ 20260509,
+ 801
],
"deps": [
"markdown-mode"
],
- "commit": "74fab520f1d008f5a389a673616a617c03c74600",
- "sha256": "0ldag8659nqphc2isw1n3xv8dqf468ppwf1q10zn03sdj4dc1i11"
+ "commit": "91f28ee199a499b8d6e1b9c7a0f1c15f8a382198",
+ "sha256": "0xlsh4a42mymi4jrb32ak4srbm28hq67jwijnpbyfzfkchjsqimj"
},
"stable": {
"version": [
0,
- 3
+ 4
],
"deps": [
"markdown-mode"
],
- "commit": "74fab520f1d008f5a389a673616a617c03c74600",
- "sha256": "0ldag8659nqphc2isw1n3xv8dqf468ppwf1q10zn03sdj4dc1i11"
+ "commit": "91f28ee199a499b8d6e1b9c7a0f1c15f8a382198",
+ "sha256": "0xlsh4a42mymi4jrb32ak4srbm28hq67jwijnpbyfzfkchjsqimj"
}
},
{
@@ -42452,11 +42877,11 @@
"repo": "technomancy/fennel-mode",
"unstable": {
"version": [
- 20260408,
- 1529
+ 20260704,
+ 2353
],
- "commit": "c963b4701e4668717df083c8a4591c93e6b1dc8d",
- "sha256": "0mdhcqns89fm2yc7j3pbaniqg3mx9gffgfj3fbnnpfwj7mf9gadc"
+ "commit": "bbc28a629405de628880d8fb485fce23ff7fab69",
+ "sha256": "1rpyp660j9shlilxgwvc4i01qpmqyz3zy3dxk10dilw2g5n6dd0q"
},
"stable": {
"version": [
@@ -42587,15 +43012,15 @@
"repo": "Artawower/file-info.el",
"unstable": {
"version": [
- 20251107,
- 1738
+ 20260509,
+ 754
],
"deps": [
"browse-at-remote",
"hydra"
],
- "commit": "5d8c5158a57e0077410bcdb802c344f5e8da4aca",
- "sha256": "1ap8ms7vrv0hnra0mcxpkf364j3ql5s9j40fmqqi84djr6w0abn6"
+ "commit": "c20ab17ee23e7e1b07975cce9a3c2d5e3dff14f6",
+ "sha256": "19msd6iaadnxg8rdvlj12vdwpq3jk81q23hz68pdz1yp9spndbc5"
},
"stable": {
"version": [
@@ -43363,8 +43788,8 @@
"repo": "martianh/fj.el",
"unstable": {
"version": [
- 20260327,
- 906
+ 20260509,
+ 741
],
"deps": [
"fedi",
@@ -43372,13 +43797,13 @@
"tp",
"transient"
],
- "commit": "3697ac2847180bd307e70ff0fb9ef086f59dec24",
- "sha256": "1y3k82q5iii7ddm6yj7397x2jscbcnvapd04zc5wjkqdr50cay3l"
+ "commit": "4832dcfcd167d1975bb44a024881c75fef64182e",
+ "sha256": "09ff20am16ysjpbqx7b92qgmvyar9b6blm32flkvzqxccqqinxya"
},
"stable": {
"version": [
0,
- 34
+ 37
],
"deps": [
"fedi",
@@ -43386,8 +43811,8 @@
"tp",
"transient"
],
- "commit": "3697ac2847180bd307e70ff0fb9ef086f59dec24",
- "sha256": "1y3k82q5iii7ddm6yj7397x2jscbcnvapd04zc5wjkqdr50cay3l"
+ "commit": "4832dcfcd167d1975bb44a024881c75fef64182e",
+ "sha256": "09ff20am16ysjpbqx7b92qgmvyar9b6blm32flkvzqxccqqinxya"
}
},
{
@@ -43443,11 +43868,11 @@
"repo": "Prgebish/flash",
"unstable": {
"version": [
- 20260308,
- 621
+ 20260711,
+ 805
],
- "commit": "42fbc5883fd802df97cae842c403deba4c433d45",
- "sha256": "18jbcqp844s1cvra2xw9nq9fw3g3y0jwyi1bxlm4f8s8g97bfvxd"
+ "commit": "db3bfa84866f143a0665d1b5a48c3b30dc7b528f",
+ "sha256": "02z4h73018mv5hf6xzwhaamv24abnj2s6lg5daybd0qz9ncvxxrd"
}
},
{
@@ -43610,15 +44035,15 @@
"repo": "plandes/flex-compile",
"unstable": {
"version": [
- 20251218,
- 243
+ 20260716,
+ 2144
],
"deps": [
"buffer-manage",
"dash"
],
- "commit": "f15d23afabd03c39583b1a87dd847a91cb7bfe34",
- "sha256": "0k1q4fmh43jwcl81v4qxr4s0azbikh6cnfa0ngs8g83ahrwdag76"
+ "commit": "0bd757312b0118ed55d3f4eefe4adca983f588ec",
+ "sha256": "1n71ll57wpfps1av89k63awhbhrg527anqxhgfiglswzba5970yg"
},
"stable": {
"version": [
@@ -43649,6 +44074,21 @@
"sha256": "0xbwrzkfv4i91qxs80p0pfjlvj5pyigvidby8m5lammm8idwx9dh"
}
},
+ {
+ "ename": "flex-x",
+ "commit": "86f02e077f9339a0eadc479fb3ff8b73440bf325",
+ "sha256": "1k6i7qpwavabfgvrx5fczcyb91wazynqjnh4a0jwq85igvb767ls",
+ "fetcher": "github",
+ "repo": "kn66/flex-x",
+ "unstable": {
+ "version": [
+ 20260713,
+ 1220
+ ],
+ "commit": "c5fba3d76b1eab42f9e524f0c48d6db61274aeb1",
+ "sha256": "1n4bgmd6hspc1jy8fsmscwazgahl5pqfdsp6ydya41rfhcbirbbh"
+ }
+ },
{
"ename": "flexoki-themes",
"commit": "45e87fc1fc52dc3d7df148a4b5adf306cbda63ce",
@@ -43657,11 +44097,11 @@
"repo": "crmsnbleyd/flexoki-emacs-theme",
"unstable": {
"version": [
- 20250228,
- 1934
+ 20260516,
+ 1228
],
- "commit": "4ca5d80bc4f33b5ace8950f0c00069539835fab4",
- "sha256": "0yka5ry44cfdwgfbl2bwix3pfnrvziyq9bza64j21f5f3kjwdmw2"
+ "commit": "3d6074282ff6e181e98f16000f3355fb977e2b56",
+ "sha256": "19x1rr6bzc9l2j4srz1f51z3cjf6s1b7m4k98mbkbfghw5nl23mn"
}
},
{
@@ -43973,25 +44413,25 @@
"repo": "flycheck/flycheck",
"unstable": {
"version": [
- 20260320,
- 1715
+ 20260720,
+ 531
],
"deps": [
"seq"
],
- "commit": "0e5eb8300d32fd562724216c19eaf199ee1451ab",
- "sha256": "0jzzx3hhvb4rmqvavzkw3gnf3csczng1imgfk019pd30pj2wrxbd"
+ "commit": "7e44b59718318abb4bf9732de2538f4e0281ce49",
+ "sha256": "1gr5b4n2ljmvd40a35g3xwsrkafg4rf4mfc294690kzh3y0lgmbz"
},
"stable": {
"version": [
- 36,
+ 37,
0
],
"deps": [
"seq"
],
- "commit": "ebddfd89b1eea91b8590f542908672569942fb82",
- "sha256": "0gndi96ijxqj6k9qy5d4l0cwqh0ky7w1p27z90ipkn05xz4j3zp5"
+ "commit": "af6b60fd544c29f68c731d709a066317b8ed0628",
+ "sha256": "0s2a7qzifz25231pzaq38j8sqnzjid0cxck91kgnazhhp4gdndl7"
}
},
{
@@ -44352,14 +44792,14 @@
"repo": "borkdude/flycheck-clj-kondo",
"unstable": {
"version": [
- 20240218,
- 2215
+ 20260615,
+ 1926
],
"deps": [
"flycheck"
],
- "commit": "e38c67ba9db1ea1cbe1b61ab39b506c05efdcdbf",
- "sha256": "1pxlb8axgmc8cw4id40z576kd041qb1irq8rkjn6xbda585ix58f"
+ "commit": "414a3ead1faefb234d658fd8a8ba121c95b71de2",
+ "sha256": "08llz442nxk2ijpfshfcb5mh2h9rk76h93rax90rg5xmbbsx3f26"
},
"stable": {
"version": [
@@ -45108,25 +45548,25 @@
"url": "https://git.umaneti.net/flycheck-grammalecte/",
"unstable": {
"version": [
- 20251001,
- 2010
+ 20260615,
+ 1837
],
"deps": [
"flycheck"
],
- "commit": "4b50d794a88d31c43023bed78f1815673f0c8890",
- "sha256": "1bv6g3y39ifcyxynmwk619hkfl643s3pa4qrmy7m440dndfqjzxf"
+ "commit": "f822e96ef54cc8d0d9ca64ad489b915bc36f6ac0",
+ "sha256": "1vbvgh9qkvvylskk292hcgl347ygb744w2jwx8cw41fk30i2v7qc"
},
"stable": {
"version": [
2,
- 5
+ 6
],
"deps": [
"flycheck"
],
- "commit": "4b50d794a88d31c43023bed78f1815673f0c8890",
- "sha256": "1bv6g3y39ifcyxynmwk619hkfl643s3pa4qrmy7m440dndfqjzxf"
+ "commit": "f822e96ef54cc8d0d9ca64ad489b915bc36f6ac0",
+ "sha256": "1vbvgh9qkvvylskk292hcgl347ygb744w2jwx8cw41fk30i2v7qc"
}
},
{
@@ -45317,15 +45757,15 @@
"repo": "conao3/indent-lint.el",
"unstable": {
"version": [
- 20200129,
- 2046
+ 20260516,
+ 852
],
"deps": [
"flycheck",
"indent-lint"
],
- "commit": "23ef4bab5509e2e7fb1f4a194895a9510fa7c797",
- "sha256": "00ipp87hjiymraiv6xy0lqzhn9h3wcrw7z4dkzb2934d7bd08j29"
+ "commit": "3660b10520d78dd545fd0c52d7e7a36dc602492d",
+ "sha256": "1r15nwxkb5d3zx7m1i5z8jmql551dcnq37czhk57v5madr6hggw6"
},
"stable": {
"version": [
@@ -45942,28 +46382,28 @@
"repo": "emacs-php/phpstan.el",
"unstable": {
"version": [
- 20250930,
- 1139
+ 20260717,
+ 1734
],
"deps": [
"flycheck",
"phpstan"
],
- "commit": "07ef7531f2ec73b90a965ac865cca8c96086f9de",
- "sha256": "1myzqbd00892a604kg88bxglk0w6valdvmaybsixapr5wgg2sbri"
+ "commit": "00942a5d5b28560bd08f7355d131074772bb7a01",
+ "sha256": "1hf5jxj1amvv9ac1jm5bly38xfhj5k0rmsg3sd9kd888hi95gph8"
},
"stable": {
"version": [
0,
- 9,
+ 10,
0
],
"deps": [
"flycheck",
"phpstan"
],
- "commit": "206573c8de58654384823765dcca636c9e35e909",
- "sha256": "12qzjy3zz0lk439y0y9gl5pirzlf52li3lbyjjmq7lq6yg30qzxm"
+ "commit": "00942a5d5b28560bd08f7355d131074772bb7a01",
+ "sha256": "1hf5jxj1amvv9ac1jm5bly38xfhj5k0rmsg3sd9kd888hi95gph8"
}
},
{
@@ -46207,14 +46647,14 @@
"repo": "msherry/flycheck-pycheckers",
"unstable": {
"version": [
- 20240817,
- 2
+ 20260624,
+ 439
],
"deps": [
"flycheck"
],
- "commit": "1bd9b7a7d4009a81ebd34515a72a3a94c313ad76",
- "sha256": "1m33yrx2nbwawh38fsibv97fb8gnr461bbrh5yqcnjyw635n7199"
+ "commit": "de546e52ceb3147da9688c428f7243e6d98af507",
+ "sha256": "1hfbsb0rrlsdvay34jl1cw0dsv6vbgc0l3wsqr7d3cxx1va3j5k2"
},
"stable": {
"version": [
@@ -46811,20 +47251,20 @@
"repo": "jamescherti/flymake-ansible-lint.el",
"unstable": {
"version": [
- 20260320,
- 13
+ 20260703,
+ 1441
],
- "commit": "359a11d3e1a9f1cd131aa85edd1c5feb3fcee38b",
- "sha256": "1jlnnxdxq94ndcbi62xgy6g2nijzqllg40ijxby1kn7slp5bn91x"
+ "commit": "bfb8148d9a1aece141d18eef484e7c0c8db79855",
+ "sha256": "1dk84j778r38lk40d9ic2ihp5pbq7z2gplzjlj18s9f0nmj241d8"
},
"stable": {
"version": [
1,
0,
- 5
+ 7
],
- "commit": "c5375aea83586e1ae97e6c2fa74ea61cf44d98f4",
- "sha256": "1w34h714q7gvhpazbqfh0b6vgm0sy7h5xkhsksdqy144agj7jja3"
+ "commit": "bfb8148d9a1aece141d18eef484e7c0c8db79855",
+ "sha256": "1dk84j778r38lk40d9ic2ihp5pbq7z2gplzjlj18s9f0nmj241d8"
}
},
{
@@ -46850,26 +47290,26 @@
"repo": "jamescherti/flymake-bashate.el",
"unstable": {
"version": [
- 20260314,
- 1906
+ 20260605,
+ 1304
],
"deps": [
"flymake-quickdef"
],
- "commit": "f60c17c8f4b8c9059f615e0895656de65ffb21dd",
- "sha256": "1xqi111ilcqk3lj3xhkvlzj11vc58as0gia8pli9p5cidmyl8djk"
+ "commit": "e36eab741444112bcc1a0cd95b7eb878b82e31da",
+ "sha256": "1nbh6m8c121ql78ziw86ydvf66b4277hw66i7m5zh6g638davy6v"
},
"stable": {
"version": [
1,
0,
- 4
+ 5
],
"deps": [
"flymake-quickdef"
],
- "commit": "c599d3c15c6f174a54c1f3d0081311758e682089",
- "sha256": "1xwngb8i39siw2wb0m4pvgwnd1ax5rl5xq9ny3s40bcxs262grm7"
+ "commit": "4893738819306517736e3f8ea8aeebadb4df4bf9",
+ "sha256": "1g4vh6kcgla3mdwrbjzfmcljxfd8bmb67w64n7j73xgg3sm867dd"
}
},
{
@@ -46939,15 +47379,15 @@
"repo": "mohkale/flymake-collection",
"unstable": {
"version": [
- 20250831,
- 1353
+ 20260613,
+ 1434
],
"deps": [
"flymake",
"let-alist"
],
- "commit": "909d98d9ec70c2baa5467634ec37181a058f2548",
- "sha256": "0082l6ia1p08y86qr1vz6i76gmcpliba7lzm9akr6nlzr5s2d8g0"
+ "commit": "1c771edc125ae44d9574489f3989397027b17654",
+ "sha256": "18bb38h9gc69h1shbqdzfrq939jpvb49v98cdgq8d8zcw72nfn8m"
},
"stable": {
"version": [
@@ -47888,26 +48328,26 @@
"repo": "emacs-php/phpstan.el",
"unstable": {
"version": [
- 20250930,
- 1139
+ 20260717,
+ 1734
],
"deps": [
"phpstan"
],
- "commit": "07ef7531f2ec73b90a965ac865cca8c96086f9de",
- "sha256": "1myzqbd00892a604kg88bxglk0w6valdvmaybsixapr5wgg2sbri"
+ "commit": "00942a5d5b28560bd08f7355d131074772bb7a01",
+ "sha256": "1hf5jxj1amvv9ac1jm5bly38xfhj5k0rmsg3sd9kd888hi95gph8"
},
"stable": {
"version": [
0,
- 9,
+ 10,
0
],
"deps": [
"phpstan"
],
- "commit": "206573c8de58654384823765dcca636c9e35e909",
- "sha256": "12qzjy3zz0lk439y0y9gl5pirzlf52li3lbyjjmq7lq6yg30qzxm"
+ "commit": "00942a5d5b28560bd08f7355d131074772bb7a01",
+ "sha256": "1hf5jxj1amvv9ac1jm5bly38xfhj5k0rmsg3sd9kd888hi95gph8"
}
},
{
@@ -48083,14 +48523,14 @@
"repo": "erickgnavar/flymake-ruff",
"unstable": {
"version": [
- 20251221,
- 2344
+ 20260616,
+ 427
],
"deps": [
"project"
],
- "commit": "8f1602fa4ddf0abd3dfb8051cbd0259fc351d015",
- "sha256": "1mm7lq4qrq8m56cwygi2darm1kakwprm4fm1x3h12slgk4fayww5"
+ "commit": "ef4a6caed72bce77a27bda54ffb30e3fdb0e7d76",
+ "sha256": "0frlx7fhfppisldk05jqj2ifhyfkq6015kp1cwmazczb4zsvz45i"
}
},
{
@@ -48577,11 +49017,11 @@
"repo": "awdeorio/flywrite",
"unstable": {
"version": [
- 20260404,
- 33
+ 20260526,
+ 1418
],
- "commit": "174d72ed77a72e0b5751062caa4cae1a853f9974",
- "sha256": "1l7ijm6kqw687akm8qlh75skrfpp9wbkwyqh92y4wb9zwhfd2jsz"
+ "commit": "e9d11b17fdb4a2d986354a5b942952dea9876a6b",
+ "sha256": "1fk7nz73s9xhkfq2f4kdabq18ij5vjpbcm312zx1zkvkb055ccsf"
}
},
{
@@ -48805,6 +49245,56 @@
"sha256": "05z1xg474mar77wax2lxlf35461w2wk0bwkg79c671wcsgjixvdw"
}
},
+ {
+ "ename": "folgezett",
+ "commit": "06df34c7f3def8eadf72c97650aa1ae28746d79c",
+ "sha256": "0an09035lkj4nb98d6ixval8iq4vck9mj4b32h7v2j5zcsmg08dd",
+ "fetcher": "github",
+ "repo": "landerwells/folgezett.el",
+ "unstable": {
+ "version": [
+ 20260517,
+ 422
+ ],
+ "deps": [
+ "org-roam"
+ ],
+ "commit": "8b60ab378fd83a4fc9abc15c82bdcd3cdb2c507d",
+ "sha256": "1985nyxd7rpca440brzns9kvd5k6pqjgh3r6hyihmwqypx92ac7i"
+ }
+ },
+ {
+ "ename": "folio-theme",
+ "commit": "5cdf39f996aedcb54ca024b0c62bca0ecb1f8669",
+ "sha256": "1417nn8303q4r53165kj1454dbc3vjrfh4w6q0hvq4286ww0r40y",
+ "fetcher": "github",
+ "repo": "kn66/folio-theme.el",
+ "unstable": {
+ "version": [
+ 20260711,
+ 13
+ ],
+ "deps": [
+ "ef-themes",
+ "modus-themes"
+ ],
+ "commit": "758ca1f9674d685747d0846160e76bb6cb677a2d",
+ "sha256": "0cwnn6dwd6hvf46pyp3b0nmirh0fh85kz91i2n9q0zfyf7jc5r7d"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 1,
+ 0
+ ],
+ "deps": [
+ "ef-themes",
+ "modus-themes"
+ ],
+ "commit": "247280f0ed9d9c94614635baf69d2a3d65bf1793",
+ "sha256": "1byxrivjk6h07jqa2lzqpafyn9pxmhhyjafkd40qi55d0blsh72z"
+ }
+ },
{
"ename": "font-lock-profiler",
"commit": "b372892a29376bc3f0101ea5865efead41e1df26",
@@ -49086,8 +49576,8 @@
"repo": "magit/forge",
"unstable": {
"version": [
- 20260423,
- 1757
+ 20260701,
+ 1425
],
"deps": [
"closql",
@@ -49098,18 +49588,17 @@
"llama",
"magit",
"markdown-mode",
- "seq",
"transient",
"yaml"
],
- "commit": "3eff1dab171602db9d1b7cfb0e6e7014eac73665",
- "sha256": "0115af0vg9bsmmizfny3k4k9hlkgclpgq6wd05fv3ibhbhc95n5a"
+ "commit": "9628f76740aec9270e9fb31457ff4cb38d9f3f16",
+ "sha256": "1xmq50026z47imlwi6an50h2yp6b894m84kfq6bf4878qbfmfw2w"
},
"stable": {
"version": [
0,
6,
- 4
+ 7
],
"deps": [
"closql",
@@ -49120,12 +49609,11 @@
"llama",
"magit",
"markdown-mode",
- "seq",
"transient",
"yaml"
],
- "commit": "69801d0da19d62b4b68b1f1756900e47ce7e8769",
- "sha256": "10ym872n05nlkd9q1r3dl7vkbniacxm8g9159v56f9z9r6nznwyh"
+ "commit": "9628f76740aec9270e9fb31457ff4cb38d9f3f16",
+ "sha256": "1xmq50026z47imlwi6an50h2yp6b894m84kfq6bf4878qbfmfw2w"
}
},
{
@@ -49194,15 +49682,15 @@
"repo": "lassik/emacs-format-all-the-code",
"unstable": {
"version": [
- 20260312,
- 1136
+ 20260620,
+ 1824
],
"deps": [
"inheritenv",
"language-id"
],
- "commit": "d44bf536fdae83ad7a798565e21f59c02e461c47",
- "sha256": "14wjms8q2pjbwain5gimfcalvxp6vfa1wwv2cb6wr11qdb64n9rd"
+ "commit": "0dbe9c70eaf8b92dca1a42552761eaa13c3139cf",
+ "sha256": "16rdqcprb09fgsgbw0fl5zm1d6fg01sr6infg1z1q1r0s7c4z3za"
},
"stable": {
"version": [
@@ -49372,11 +49860,11 @@
"repo": "gmlarumbe/fpga",
"unstable": {
"version": [
- 20260407,
- 1246
+ 20260715,
+ 1713
],
- "commit": "6b22e9e034411a03e574b00377ce0bcf5dafb1d3",
- "sha256": "0fxn76jjalhyymhdwqvgm3s97drkm9y44dd9sivqmpbh01r2dslm"
+ "commit": "cbf972cf8700291d904f8b922f5d919295d69a67",
+ "sha256": "1xznaq4bvmmajjsd16546fkax1ww1clpb8kvskf8jw5aqdsrji8q"
},
"stable": {
"version": [
@@ -49429,14 +49917,14 @@
"repo": "colonelpanic8/frame-mode",
"unstable": {
"version": [
- 20230823,
- 1850
+ 20260710,
+ 1851
],
"deps": [
"s"
],
- "commit": "ab5e568a7c7259d31c252c263458bd76490241d0",
- "sha256": "044ppidaapay08nw4gv85ir5ivxwwbys0gdvg6mbpf142qk093hb"
+ "commit": "0435d9ed05223904cf389eea881553632e681035",
+ "sha256": "17mzw7h4f8fkrkfazsalh3mskhyp81xcfwzxz5nnhzmnbrqv6y2w"
}
},
{
@@ -49522,26 +50010,26 @@
"repo": "tarsius/frameshot",
"unstable": {
"version": [
- 20260101,
- 1833
+ 20260601,
+ 1501
],
"deps": [
"compat"
],
- "commit": "975450f325f0e29a73214deff011ad524f02bc74",
- "sha256": "0ax9jkchlb1fc6fxw09zps6qhaazbpgm7b66hbsblkdy2apczcnm"
+ "commit": "6e1f45af13ebaf6ff6f13207c74ed4c5fb8e10c9",
+ "sha256": "0fqkq3wj4h6qfdd69gz18g7jl4vxy392hp64c6bnk8h38basfs2h"
},
"stable": {
"version": [
1,
2,
- 1
+ 2
],
"deps": [
"compat"
],
- "commit": "975450f325f0e29a73214deff011ad524f02bc74",
- "sha256": "0ax9jkchlb1fc6fxw09zps6qhaazbpgm7b66hbsblkdy2apczcnm"
+ "commit": "6e1f45af13ebaf6ff6f13207c74ed4c5fb8e10c9",
+ "sha256": "0fqkq3wj4h6qfdd69gz18g7jl4vxy392hp64c6bnk8h38basfs2h"
}
},
{
@@ -49998,11 +50486,11 @@
"repo": "bbatsov/fsharp-ts-mode",
"unstable": {
"version": [
- 20260424,
- 617
+ 20260624,
+ 924
],
- "commit": "415dcaf2cb83d98af86ae072a11eae2558047c6c",
- "sha256": "0z20v2wnqqd672y7mwjgx88nh3pwq7mdvzck1sjpmqq53gb2lgj4"
+ "commit": "a7a4f0612456e992c5e3420b3296ed2c1d3c472c",
+ "sha256": "1zqw57r4gg2rwg8z2p3i2j73rybg3zmm5554s2xs6jf72zvn7mb5"
},
"stable": {
"version": [
@@ -50233,27 +50721,27 @@
"repo": "jojojames/fussy",
"unstable": {
"version": [
- 20260424,
- 408
+ 20260613,
+ 1231
],
"deps": [
"compat",
"flx"
],
- "commit": "6366161a0e03c6c12aeba872fed3dfdc135bff9c",
- "sha256": "1hwk15hlq82khx38xriqpd1syfr3zn4m90n65s8ijfjmaysfcg9j"
+ "commit": "78730ceefb23ee6314803f54eaf73cb044055f47",
+ "sha256": "0bq6mpq0h65l2nc9wv3vhfqfvsid989brxswli5bbv6n13yrji72"
},
"stable": {
"version": [
2,
- 2
+ 3
],
"deps": [
"compat",
"flx"
],
- "commit": "92fb91c034707af77be9869500a5ae1ea0079b7d",
- "sha256": "1vwxqil4mmll7zdnc1yn8g54kk7p39fyf7y62lxpakij7vxncf43"
+ "commit": "029d726c3309f148cff162758f60d0e6dbe18f76",
+ "sha256": "0cnb3a471hwq9pyz69f705a4pyvhjhgm9n358xr2bl8qd802wxw1"
}
},
{
@@ -50387,32 +50875,32 @@
},
{
"ename": "fwb-cmds",
- "commit": "fe40cdeb5e19628937820181479897acdad40200",
- "sha256": "0wnjvi0v0l2h1mhwlsk2d8ggwh3nk7pks48l55gp18nmj00jxycx",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "0lci0xrkqwdlgw31grl16ljxnmw0jsji5p13gbg8sid72z11w0sz",
"fetcher": "github",
"repo": "tarsius/fwb-cmds",
"unstable": {
"version": [
- 20260101,
- 1833
+ 20260601,
+ 1507
],
"deps": [
"compat"
],
- "commit": "d230b9e42f992d9a4c4b155ba7f1920e8577caca",
- "sha256": "07h0h2jsb4imkc6n4wxc255f3glgq5kcl2xq85h0769qa28qy5w4"
+ "commit": "bb62a32dbd3febdd2e644af25a22e56259ed060d",
+ "sha256": "1a3vmd64zijcxp1fvg7yp8lmc3lfxlfjpblqlwn2y5c03852bc37"
},
"stable": {
"version": [
2,
0,
- 5
+ 6
],
"deps": [
"compat"
],
- "commit": "d230b9e42f992d9a4c4b155ba7f1920e8577caca",
- "sha256": "07h0h2jsb4imkc6n4wxc255f3glgq5kcl2xq85h0769qa28qy5w4"
+ "commit": "bb62a32dbd3febdd2e644af25a22e56259ed060d",
+ "sha256": "1a3vmd64zijcxp1fvg7yp8lmc3lfxlfjpblqlwn2y5c03852bc37"
}
},
{
@@ -50467,11 +50955,11 @@
"repo": "bling/fzf.el",
"unstable": {
"version": [
- 20260121,
- 1418
+ 20260505,
+ 1105
],
- "commit": "0f6a2fd644bedfbcc061f995c8c270d084da1cba",
- "sha256": "1q6hs3kksr7lxj6w42gp6q16m86zmkc4r1mr8j5s3n0y8mw9gy2y"
+ "commit": "75060d81f4eea3f8088ac2a4a3a253c686b44d44",
+ "sha256": "0a6k9s5c92qg078xgyhfhz7pf3g677rfp0my7zln10nxh628pc3k"
},
"stable": {
"version": [
@@ -50482,6 +50970,59 @@
"sha256": "14drm6b6rxbcdilcms1jlqyrqbipcqbdil6q06ni9pgafi7xp8hz"
}
},
+ {
+ "ename": "fzf-native",
+ "commit": "7869ef9df545789bebfc73caf7a55cbf649324be",
+ "sha256": "01hbi1jgqdbjliybfc3aw5b8xy6xk5ckpdwh743xanbn994xjvzv",
+ "fetcher": "github",
+ "repo": "dangduc/fzf-native",
+ "unstable": {
+ "version": [
+ 20260714,
+ 2328
+ ],
+ "commit": "39dc386062d6ae942b4a7e8592d26ce11b73bf29",
+ "sha256": "04xhv90sbhsx79r6nlkcl71g8sdxcyw20856wd02d71qpf3zmxp4"
+ },
+ "stable": {
+ "version": [
+ 2,
+ 2
+ ],
+ "commit": "39dc386062d6ae942b4a7e8592d26ce11b73bf29",
+ "sha256": "04xhv90sbhsx79r6nlkcl71g8sdxcyw20856wd02d71qpf3zmxp4"
+ }
+ },
+ {
+ "ename": "fzfa",
+ "commit": "d4fc9674633431bd3122e1e69ae1e2585ba700f3",
+ "sha256": "0npg0wgxzlgrc2jxr7pkjl06iwphy2sbp2gvaqa22sp9v891liw3",
+ "fetcher": "github",
+ "repo": "jojojames/fzfa",
+ "unstable": {
+ "version": [
+ 20260719,
+ 1940
+ ],
+ "deps": [
+ "fzf-native"
+ ],
+ "commit": "427ff74d62abcd4ee1729d8743fde69cd1a722f9",
+ "sha256": "1jxdvhq92aa1z16s07zgy7hjkkz2ias153v4554pq2m0crav8h51"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 0,
+ 1
+ ],
+ "deps": [
+ "fzf-native"
+ ],
+ "commit": "6737ba916ace7147eaa492fdbe950817beeecfd8",
+ "sha256": "1jxdvhq92aa1z16s07zgy7hjkkz2ias153v4554pq2m0crav8h51"
+ }
+ },
{
"ename": "gameoflife",
"commit": "bdfc00fe567155ae98fbf1a44d0bb4fa3a8e5786",
@@ -50655,11 +51196,11 @@
"repo": "godotengine/emacs-gdscript-mode",
"unstable": {
"version": [
- 20260417,
- 1926
+ 20260720,
+ 923
],
- "commit": "f6ee6891e15b4aaf4e159ecf3ab8482da6fe0ea7",
- "sha256": "1hqrc20cgqgcrbc5wqwldq7f0xxfvm3y6cnxzy4brdvg61hdg82b"
+ "commit": "5ea9bb0a2ee3b3845918084bbb422391dfcc852c",
+ "sha256": "1r2zps4x1228pz4v6q3536giiynzz0xz0r69nhmli9aqihg4nv62"
},
"stable": {
"version": [
@@ -50768,39 +51309,40 @@
},
{
"ename": "geiser",
- "commit": "4f305d3a7823c69455aad9088789afef73477c7a",
- "sha256": "0k0jv5a3qlad5qp72m80yi5xws3gdf38pj06azvdg4kzvhgrxpgz",
- "fetcher": "gitlab",
- "repo": "emacs-geiser/geiser",
+ "commit": "008e3547b0de78eb6e89edb936b9e40d4b0eb7e0",
+ "sha256": "0pp2yndrjkhsyym46sn5ww0332kdzwiicq3a2fk2vpkhj98bj1sk",
+ "fetcher": "codeberg",
+ "repo": "geiser/geiser",
"unstable": {
"version": [
- 20251220,
- 2301
+ 20260718,
+ 8
],
"deps": [
"project"
],
- "commit": "8842104d1521a00c182ce78e9d50d394e9ba86f5",
- "sha256": "05sfrads398vh8wghlwhqw809s91j6n5v3k1lfi25dqlp2zvif7m"
+ "commit": "3e506d06b34ccda8a50ac3e43c90d722c00065fe",
+ "sha256": "0yzl6hirz8x13pm3v9n7flz44pczfc0cmv8ysmxhndk93c925k17"
},
"stable": {
"version": [
0,
- 32
+ 33,
+ 1
],
"deps": [
"project"
],
- "commit": "9e76f336b91151315642de9bcbed0ffe83b69db7",
- "sha256": "09dqwxa2h471xcyk5zncxzaz19gf8d5r83yhi425blf2r1ir7b34"
+ "commit": "84c25e9683a18d00387b6c16b0cee66269536c3c",
+ "sha256": "0gyr7fky3jppk3vy44mq3lfwz0n7r0k6cxim7bdfp9qy8jqw1pr8"
}
},
{
"ename": "geiser-chez",
- "commit": "6c2ee4d4fbde853481aa66925763845daadd5439",
- "sha256": "1csx76zgg26wqbq6q10v4yqj5hadsww0jw17dbz718521906a4ql",
- "fetcher": "gitlab",
- "repo": "emacs-geiser/chez",
+ "commit": "8baa86e8c2c05343785242c791347152df6da8b7",
+ "sha256": "1wikn3n73jx58xnzrcrwh0kn58l1hlx9lgbkhr8nj1qw0iw6hr0h",
+ "fetcher": "codeberg",
+ "repo": "geiser/chez",
"unstable": {
"version": [
20230707,
@@ -50826,20 +51368,20 @@
},
{
"ename": "geiser-chibi",
- "commit": "29aa9f96fa0826e8e26e2e1219b78c73f9af66fb",
- "sha256": "17zkic298ckq8mdmlc25ycafcx2yy11xfdlfjnyy20p7nqqw8njj",
- "fetcher": "gitlab",
- "repo": "emacs-geiser/chibi",
+ "commit": "eff5e148c77386a7451ebb194645866c0a5fbce9",
+ "sha256": "0ka6yf8pm7brvj719sk4qmz5pg4v2bk8gwrwwqwbvhqlhg7777xf",
+ "fetcher": "codeberg",
+ "repo": "geiser/chibi",
"unstable": {
"version": [
- 20240521,
- 2252
+ 20260706,
+ 27
],
"deps": [
"geiser"
],
- "commit": "2502fed1349c2703eea528b74bcc980ad6bceab8",
- "sha256": "1j8vld3s653af8jyvdb3sl16ix3al4fxprawgi3r9rrvrai2wz22"
+ "commit": "98cda369db3faf7268dd3b1705bb914dd6dad56a",
+ "sha256": "0gx6r9pczy73gl0cnrv3pn1fsj2dnzffi7j340vn54gg4832bpwr"
},
"stable": {
"version": [
@@ -50855,10 +51397,10 @@
},
{
"ename": "geiser-chicken",
- "commit": "a2ad985f3b2b3e9192b6a8525483f43f52df9a10",
- "sha256": "1hq3qk8vbspycvm9fv5s9d07gn0m55gwcvgv4ycvyf8gmi2j3xdy",
- "fetcher": "gitlab",
- "repo": "emacs-geiser/chicken",
+ "commit": "9fff1d932215fdc55a768d1c6c5e714d83b1b7bd",
+ "sha256": "0valajqf5x9s09jzzr15z3nl5r0s0y69psd4mg61ach2lb9x0ggk",
+ "fetcher": "codeberg",
+ "repo": "geiser/chicken",
"unstable": {
"version": [
20250803,
@@ -50884,10 +51426,10 @@
},
{
"ename": "geiser-gambit",
- "commit": "3b4af6c41cf776dff3bcb09ae08f6f3acc880b33",
- "sha256": "0vjq5b1warybr57kc855lbmda109vv4kbysn4s4zfi0mz45y0lbx",
- "fetcher": "gitlab",
- "repo": "emacs-geiser/gambit",
+ "commit": "bdd0a29ce7b3a725f9216562a942ed990de30295",
+ "sha256": "03a8z9r8bzb7yw0v1rj2vyxzj9adw6qa10vm5xs3lfi5vkiv7fi6",
+ "fetcher": "codeberg",
+ "repo": "geiser/gambit",
"unstable": {
"version": [
20220208,
@@ -50940,34 +51482,34 @@
},
{
"ename": "geiser-guile",
- "commit": "779ebb6fa2f9ee7a86425c4364ae8141f66a0f4f",
- "sha256": "18w8spn3ys3ggnqic4isy6ggzdjjsvsc1rbpq346mmb1xdy5bjna",
- "fetcher": "gitlab",
- "repo": "emacs-geiser/guile",
+ "commit": "d66972d8569c062b7cd9492bf27e6a37f1b8d09e",
+ "sha256": "0ciz7dbhgkn4dj760s5gx9zldl05qysmjcyx3bf829rfjschnpzw",
+ "fetcher": "codeberg",
+ "repo": "geiser/guile",
"unstable": {
"version": [
- 20240920,
- 35
+ 20260516,
+ 19
],
"deps": [
"geiser",
"transient"
],
- "commit": "a0f111f8dedd31c593c4ed12c0b99745f3c1340f",
- "sha256": "0i6drqz7cnx97bs5kprvb0hsg2h4bwkfdi61ajv43dqgb368jbff"
+ "commit": "cbab81bd2dcb4c787bcda4ae18062db3087e6887",
+ "sha256": "0hvjc1s74ansn3c5pmizs9q234wz2h52y0070qg008i1vmqvymzp"
},
"stable": {
"version": [
0,
28,
- 3
+ 5
],
"deps": [
"geiser",
"transient"
],
- "commit": "a0f111f8dedd31c593c4ed12c0b99745f3c1340f",
- "sha256": "0i6drqz7cnx97bs5kprvb0hsg2h4bwkfdi61ajv43dqgb368jbff"
+ "commit": "cbab81bd2dcb4c787bcda4ae18062db3087e6887",
+ "sha256": "0hvjc1s74ansn3c5pmizs9q234wz2h52y0070qg008i1vmqvymzp"
}
},
{
@@ -51001,10 +51543,10 @@
},
{
"ename": "geiser-mit",
- "commit": "a327661f80b577f53ae8874ce9ab499d95c442c8",
- "sha256": "1zbisdf8mw183qxx7khlfni31lp6airza8q8vvcp5frz277kk9cg",
- "fetcher": "gitlab",
- "repo": "emacs-geiser/mit",
+ "commit": "243e7a585f04deb209b6ba4d043b39560e0abc2a",
+ "sha256": "1vj8jvhllpbq70pb3vaxlajmw3sdvfng7vqhn8qhnvnszdbf0sr1",
+ "fetcher": "codeberg",
+ "repo": "geiser/mit",
"unstable": {
"version": [
20240909,
@@ -51060,10 +51602,10 @@
},
{
"ename": "geiser-racket",
- "commit": "eddf5704aa4c2373dbe7b7b89934f6db3737a769",
- "sha256": "13m7xkimn7qn03cxdp8h1b5g1cnkn5pviq48zlw394xlaz67vn3m",
- "fetcher": "gitlab",
- "repo": "emacs-geiser/racket",
+ "commit": "b7b544af40010e336548b5c7ef50ab3323a6cfc4",
+ "sha256": "09nqp0sy133mnj13g1pgbf9kc0inrl1xkv026cz266z4dggd52sr",
+ "fetcher": "codeberg",
+ "repo": "geiser/racket",
"unstable": {
"version": [
20210421,
@@ -51077,14 +51619,14 @@
},
"stable": {
"version": [
- 1,
- 0
+ 0,
+ 16
],
"deps": [
"geiser"
],
- "commit": "42376b74ae0ad84d02c26560dfd9181493dcccd7",
- "sha256": "04gwd9qa0785zfr6m9a5443ilgvyz05l06cb1waicf83sgp8xl32"
+ "commit": "22e56ce80389544d3872cf4beb4008fb514b2218",
+ "sha256": "1aqsvmk1hi7kc3j4h8xlza7c6rwm71v98fv5wpw8kmyj9vsp49wx"
}
},
{
@@ -51133,10 +51675,10 @@
},
{
"ename": "gemini-write",
- "commit": "e97c45cafc44a4b2f08e577325e375c6312f6557",
- "sha256": "039rdjsyx9lw7lh21ps84agm1rpinbylzlks6iv1h5pn341s67nd",
+ "commit": "fd2082f1d5170d65f46116a012d2d1abedf62dba",
+ "sha256": "0x2qbiy1s15xpfhqgvajp59fjrzkpc6crwglmh93h7l25bzyivz5",
"fetcher": "git",
- "url": "https://alexschroeder.ch/cgit/gemini-write",
+ "url": "https://src.alexschroeder.ch/gemini-write.git",
"unstable": {
"version": [
20211114,
@@ -51191,11 +51733,11 @@
"repo": "larme/genexpr-mode",
"unstable": {
"version": [
- 20240930,
- 1335
+ 20260701,
+ 1400
],
- "commit": "27d9d4d32aef1799698ddbf75e92cb71d0ce99bf",
- "sha256": "1qwrxca7qpm3df07y8cchg3vqvgbj2nnlv942ykrkxgcvkx0j5qf"
+ "commit": "b5007dbd80b9468b7b206927791171218f2f5da1",
+ "sha256": "0sm5jfrnwl9lh6k3bcfq64p8wnz1svmrwmwrps3b9jxrzyab48bc"
}
},
{
@@ -51328,16 +51870,16 @@
"repo": "twmr/gerrit.el",
"unstable": {
"version": [
- 20260208,
- 922
+ 20260512,
+ 617
],
"deps": [
"dash",
"magit",
"s"
],
- "commit": "317599943495da561a508b31e83ae55c800e5a52",
- "sha256": "185q22afq281k6whhjrmikgr711xd7blv6ixir8pinv7d4m5psmd"
+ "commit": "ccbc70a482305c8f0c88da3a9daead6a16c63ae5",
+ "sha256": "1g3l0igmrll7a39bw1068yjfdyhvwysn94pk8z0yyh5jclh3hhr8"
}
},
{
@@ -51479,15 +52021,15 @@
"repo": "anticomputer/gh-notify",
"unstable": {
"version": [
- 20251209,
- 1735
+ 20260701,
+ 1512
],
"deps": [
"forge",
"magit"
],
- "commit": "d606d1390778cb104c28dbc5220e685293e1e687",
- "sha256": "17mszbyl8162j0c4jn8hlyiy3a8s9b80n7q32n09vdnrs1akdg25"
+ "commit": "efecbc0ea7a1b77a48fb395ce3d5a54271974608",
+ "sha256": "1sz662vz3h1h0vmf4052i103yvbf994gp3l9wsdd0kwrjsbxkf8b"
},
"stable": {
"version": [
@@ -51580,26 +52122,32 @@
},
{
"ename": "ghostel",
- "commit": "f092656c1fc300c4d69c762a1e6c72dd3eb657d9",
- "sha256": "191p8jh0ck96645skbijybrrsvckr98p54ls2d1n474yxdnbywpf",
+ "commit": "32c111d2c381b618d3ca556c09b15bc3a0d91287",
+ "sha256": "1k6yvnsd13lqxw31kmdszsfikabc8js4d4xrcsf4m50gzvk3bf4f",
"fetcher": "github",
"repo": "dakra/ghostel",
"unstable": {
"version": [
- 20260423,
- 1706
+ 20260719,
+ 2039
],
- "commit": "63e008f32e4896ecd18e24ccfc08a3775561722c",
- "sha256": "13pk32b32p9hw0lw957gha89dinqs8g53v73nqhzq9axrp7m9qp0"
+ "deps": [
+ "compat"
+ ],
+ "commit": "af41a8b461bbd353bdf07e27c73521aea7311151",
+ "sha256": "0ch7nh8l1aqlxjknbl5n56200fnvw76xrdfhjscy9c5298daglbd"
},
"stable": {
"version": [
0,
- 17,
+ 44,
0
],
- "commit": "6117978d2089d807dd457f9cf2d9382a4a4558c6",
- "sha256": "0mmvwms7r4l1ypvxa10s164a6shqwc7bqvrr1wgqkp5z4wqd9dsk"
+ "deps": [
+ "compat"
+ ],
+ "commit": "2191afe3049fc785c6fd2b1ab6b826daf500ffbe",
+ "sha256": "1fyqpbpv62hs3hqai1j04x30miwdqkkpqfxdh4vbxc331fhrj4dx"
}
},
{
@@ -51642,8 +52190,8 @@
"repo": "magit/ghub",
"unstable": {
"version": [
- 20260423,
- 1634
+ 20260701,
+ 1318
],
"deps": [
"compat",
@@ -51651,14 +52199,14 @@
"llama",
"treepy"
],
- "commit": "2b6df7c3f958e64c47151d7d6ef45de38e614936",
- "sha256": "1mm60zga2flbh2gnv5554if8d6jiwvzw3px8h87zi7y8dx8rkwmw"
+ "commit": "59d0b9b33e780d6cff5131886904ff26033dd2e6",
+ "sha256": "0xcdwm383907hxvxxdx0f1jk1ppdch2pai5csfl97wdzqdg278ah"
},
"stable": {
"version": [
5,
- 1,
- 0
+ 2,
+ 2
],
"deps": [
"compat",
@@ -51666,8 +52214,8 @@
"llama",
"treepy"
],
- "commit": "1fb0fba075cb8b80f9819c874be584dffce50b51",
- "sha256": "0d49qkkza9my2xz1vdyq7l3vmmjbamhsqm9xy7xikisyhsngvj73"
+ "commit": "59d0b9b33e780d6cff5131886904ff26033dd2e6",
+ "sha256": "0xcdwm383907hxvxxdx0f1jk1ppdch2pai5csfl97wdzqdg278ah"
}
},
{
@@ -52330,20 +52878,20 @@
"repo": "sshaw/git-link",
"unstable": {
"version": [
- 20260411,
- 1730
+ 20260612,
+ 337
],
- "commit": "b651de43236276cdb18ec7727f645cbf6743a499",
- "sha256": "1zpws6z5v54g94jnsw78k42apxpffg54dlkm5i8gclsaxhn6xpdg"
+ "commit": "3870ae57408dc72ae2215b0056d6661e2c198e75",
+ "sha256": "0qlmmb1h4clg2967ia9mbrpawhmgj6lbzp6hcb5ihwr10msw7s04"
},
"stable": {
"version": [
0,
- 10,
+ 11,
0
],
- "commit": "67b02cf0df4e789771f2344b4dd77c85334a0f9f",
- "sha256": "1cq456q908nmbz2br578fhi8vq2jh11nf0axxa7913gd7dhmqklg"
+ "commit": "ca1a170343448c6d5d265ec12f934d865f7e0aee",
+ "sha256": "03dgjnjgyz8km7y0mfd4snk8s8r1w7ybmai6wgvjm5hzwmsqrq3l"
}
},
{
@@ -52377,32 +52925,32 @@
},
{
"ename": "git-modes",
- "commit": "cc3a0ce6c8a4a67b8a8d4b8b2c090694535e6848",
- "sha256": "0rpl890n76aqdpx6flgc5kvgg7sic1i85ps8c5j8mbz0pbz06ajv",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "16960l5zpy78k5lcfh7gihw569w12qal644j4x3dpz7db5wn14cd",
"fetcher": "github",
"repo": "magit/git-modes",
"unstable": {
"version": [
- 20260101,
- 1834
+ 20260601,
+ 1550
],
"deps": [
"compat"
],
- "commit": "c3faeeea1982786f78d8c38397dec0f078eaec84",
- "sha256": "12r2n3w3yigszh2cszfca1rmrifj2lib5aswcjrx4rd9pzziavzk"
+ "commit": "f291a4cc4a8b02a25d5cf93b4ab6af29e6f060d9",
+ "sha256": "16j4slgl1mlqz8bd6g4izkc9dskv80c2dvvqclkabq6mldmib1n6"
},
"stable": {
"version": [
1,
- 4,
- 8
+ 5,
+ 0
],
"deps": [
"compat"
],
- "commit": "c3faeeea1982786f78d8c38397dec0f078eaec84",
- "sha256": "12r2n3w3yigszh2cszfca1rmrifj2lib5aswcjrx4rd9pzziavzk"
+ "commit": "f291a4cc4a8b02a25d5cf93b4ab6af29e6f060d9",
+ "sha256": "16j4slgl1mlqz8bd6g4izkc9dskv80c2dvvqclkabq6mldmib1n6"
}
},
{
@@ -52424,6 +52972,26 @@
"sha256": "01fcf0qqy24ji0ka9gh91gdrp81ilq2xjwah3rv2b90yjk8wib60"
}
},
+ {
+ "ename": "git-overleaf",
+ "commit": "cd76e9b4c36ddec9fa3d74a43804016a112c2529",
+ "sha256": "03np77ap1yzi7jk1afy0gmqznjhli3nlxxvjkvbidbmlnlkfslyl",
+ "fetcher": "github",
+ "repo": "Jamie-Cui/git-overleaf.el",
+ "unstable": {
+ "version": [
+ 20260713,
+ 844
+ ],
+ "deps": [
+ "magit-section",
+ "webdriver",
+ "websocket"
+ ],
+ "commit": "2559016e1fac95889ba04a0ac9c59c85a267d176",
+ "sha256": "0vgzvi72gn4xjpc9xryjc3nningvsi9kg8qprflg0m8vp7ynkfgm"
+ }
+ },
{
"ename": "git-ps1-mode",
"commit": "ea177b5ea168828881bd8dcd29ef6b4cb81317f0",
@@ -52676,20 +53244,20 @@
"repo": "Justintime50/github-dark-vscode-emacs-theme",
"unstable": {
"version": [
- 20240716,
- 523
+ 20260706,
+ 2133
],
- "commit": "00cac57857732999681e14d0c04fd8b8dbf3ef2d",
- "sha256": "1lj75w4lzjk7c05mc2srjl5ciplwn6z5rd8rjj6q8ahsm5pkkd5k"
+ "commit": "b3590004a25a279a913168801142d18d2decfde0",
+ "sha256": "0pjxpnhanqvjfrpxggcj7njd9wrkh71bay8zr3z3qp6147p77syw"
},
"stable": {
"version": [
0,
- 4,
+ 5,
0
],
- "commit": "00cac57857732999681e14d0c04fd8b8dbf3ef2d",
- "sha256": "1lj75w4lzjk7c05mc2srjl5ciplwn6z5rd8rjj6q8ahsm5pkkd5k"
+ "commit": "b3590004a25a279a913168801142d18d2decfde0",
+ "sha256": "0pjxpnhanqvjfrpxggcj7njd9wrkh71bay8zr3z3qp6147p77syw"
}
},
{
@@ -52913,14 +53481,14 @@
"repo": "agzam/github-topics",
"unstable": {
"version": [
- 20250416,
- 2102
+ 20260106,
+ 1904
],
"deps": [
"ts"
],
- "commit": "296cb525c5387e5242b89950d2d84d258ff82fd2",
- "sha256": "1l5n5wgcnws0iz5ym4znbssin67dzgz3iwq3cp04jf1nssay863h"
+ "commit": "dce3530b61fe4293190e40edf835291e8542a762",
+ "sha256": "0v2c7dlky03a94nrbbpl0l2zj74sd43nyds03r2im7rg8r4ssc5p"
}
},
{
@@ -53315,11 +53883,11 @@
"repo": "gleam-lang/gleam-mode",
"unstable": {
"version": [
- 20251106,
- 221
+ 20260604,
+ 1354
],
- "commit": "91cf073c5fb889c091b1797f44cc52419b7c9ae2",
- "sha256": "0dd7qylvhrqlxnbvvkb3f03gz14v0sjg9fhiymfhw7p571bq8nqi"
+ "commit": "ae8aecda23e9dca755d80e86cdb7c336011c2321",
+ "sha256": "1sg9349ris49gfbx69fawiqfgj2xilqz5w514p3dhbc8qw6brhdb"
},
"stable": {
"version": [
@@ -53372,11 +53940,11 @@
"repo": "jimhourihan/glsl-mode",
"unstable": {
"version": [
- 20250324,
- 1304
+ 20260603,
+ 1348
],
- "commit": "86e6bb6cf28d1053366039683a4498401bab9c47",
- "sha256": "03ajf9q2ijgfmmqvk7kmmxba6bsyrb2q49li93fmdj5dwdyjkgqv"
+ "commit": "515a2ba4dab3ec89c83a962902a123ddf81e3cfe",
+ "sha256": "1lf2ydjw5vlvn50l0lag0n31zmy3m6wlhih54q05brzaf2m8rrni"
}
},
{
@@ -53582,26 +54150,28 @@
"url": "https://git.thanosapollo.org/gnosis",
"unstable": {
"version": [
- 20260406,
- 150
+ 20260507,
+ 2347
],
"deps": [
- "compat"
+ "compat",
+ "keymap-popup"
],
- "commit": "62193075aa38cd64fc812b6208e6fffb2a207e5f",
- "sha256": "02cirrzwzsjhrng2p3rb09790p7yc1v598miwdkjbz30linlgjvn"
+ "commit": "07de9c67536fe3e8c5fef1daf61527f3bcfa46a7",
+ "sha256": "1cjm8hj62zm9k89pnsh5hbgjqqnh53byw4mijl76a7cn8args4gy"
},
"stable": {
"version": [
0,
10,
- 3
+ 6
],
"deps": [
- "compat"
+ "compat",
+ "keymap-popup"
],
- "commit": "e830171c4bcbcbc0b1d466ffdbec179e32e9688e",
- "sha256": "0kpzc2jw51sklz15v0d0vzm5ck05n3d90l02la4nxn8r85jb1f53"
+ "commit": "07de9c67536fe3e8c5fef1daf61527f3bcfa46a7",
+ "sha256": "1cjm8hj62zm9k89pnsh5hbgjqqnh53byw4mijl76a7cn8args4gy"
}
},
{
@@ -53665,25 +54235,25 @@
"repo": "emacs-gnuplot/gnuplot",
"unstable": {
"version": [
- 20260322,
- 20
+ 20260623,
+ 1111
],
"deps": [
"compat"
],
- "commit": "39ba1dec5e8e227ba093a30ca07b20d8eb038f29",
- "sha256": "1laysqvkn1nvjhx9mjh2m0qc72gky9zja858l557imvhvihllr1c"
+ "commit": "81e3cb30297f0d12df41b865d2a76c8ba179089c",
+ "sha256": "1yhs7jxa9z6c1girzpch0db40kvbfzyfzl3iiyh3wjh05i9r31jm"
},
"stable": {
"version": [
0,
- 11
+ 12
],
"deps": [
"compat"
],
- "commit": "f10d42221856e86c57dd5cc7400c078c021ba710",
- "sha256": "17kh2mpbm5rir4bfrl2hmf8hic6v09z13y6svbf22fm0nkfvic1p"
+ "commit": "2da2ef68d4861e2e5a5b1a81340b8d92b276a3a5",
+ "sha256": "1hv7pyvwad67p2ii0lnww0vkk1jrj5pdkph5fxpavyln84wxxnmq"
}
},
{
@@ -53716,6 +54286,21 @@
"sha256": "15fpvwz2mxgn6jb6gvgfnp9snjiwxhw783lfkj8qxn12hcwz6c7m"
}
},
+ {
+ "ename": "gnus-browse-url-in-article",
+ "commit": "a9c676b593e91b7ddc18353c7d0db13e2f4ea7e2",
+ "sha256": "1fis9jgrdy8gi4bjg3kx72xr3n2f7f3p609sph7ks8p4fxma3dnl",
+ "fetcher": "github",
+ "repo": "jmibanez/gnus-browse-url-in-article",
+ "unstable": {
+ "version": [
+ 20260514,
+ 2045
+ ],
+ "commit": "45d1cbc7bcb55d25d215d4ae39bf6dedf357853a",
+ "sha256": "0dgcb6lcbhv10drxh1mzmgz1jax5xbgf6ja5iry5hm6drz4fd1pg"
+ }
+ },
{
"ename": "gnus-desktop-notify",
"commit": "c1cf98dff029d494007fe25d29bd8bcfecc5b8e6",
@@ -54171,15 +54756,15 @@
"repo": "dominikh/go-mode.el",
"unstable": {
"version": [
- 20240210,
- 10
+ 20260529,
+ 1355
],
"deps": [
"cl-lib",
"go-mode"
],
- "commit": "6f4ff9ef874d151ed8d297a80f1bf27db5d9dbf0",
- "sha256": "1pbnpj8qqdk4871m1nj39jilcqnz0l5sn9w34s9y2j526rz5l83z"
+ "commit": "3a71d28ab47df685e54ca6046a7a3dd3e28b682c",
+ "sha256": "0hm3917kxqgx23ig7617vv5nk8wc17qd26rlxbj141ag0ifwqs32"
},
"stable": {
"version": [
@@ -54271,11 +54856,11 @@
"repo": "dominikh/go-mode.el",
"unstable": {
"version": [
- 20250311,
- 156
+ 20260510,
+ 1707
],
- "commit": "58b0c3dfc87f5ae4137ea498dc0e03adc9eeb751",
- "sha256": "01db618lfkqwf7ps9hi9k2s1v6p7vgj901p04kn5vdcrs3b7cxny"
+ "commit": "8aaaa9d2574d7862ecbbe1ff369e88fe3796c8be",
+ "sha256": "1svycl0zai9zkhpmq72063szwzww6g270qik46d79mg3j0jhaf46"
},
"stable": {
"version": [
@@ -54366,11 +54951,11 @@
"repo": "snyssfx/go-prettify-mode.el",
"unstable": {
"version": [
- 20260422,
- 732
+ 20260429,
+ 1651
],
- "commit": "6aafd440383931b368901de66bf974bbd37a45f9",
- "sha256": "1rrfcnyfqry6ihlkz2w05sgsvcjb8yx74f3dinzpafxa8c2lh9x4"
+ "commit": "446907afa83d749dbd0a610d1d6fea6bbb822335",
+ "sha256": "0cang6yam22c7mhakj90pjg5jb72f7p89pmdq5dih1vjxm51lbkb"
}
},
{
@@ -54404,14 +54989,14 @@
"repo": "dominikh/go-mode.el",
"unstable": {
"version": [
- 20220114,
- 2239
+ 20260510,
+ 1707
],
"deps": [
"go-mode"
],
- "commit": "3273fcece5d9ab7edd4f15b2d6bce61f4e5a0666",
- "sha256": "00qzn136d8cl3szbi44xf3iiv75r6n1m7wwgldmzn4i5mpz8dbq7"
+ "commit": "144dc7d312d260f8dad7dfa6168537ae57f8e436",
+ "sha256": "154yhmkcdfwdhkgy4bi20wfz0mhgarm3wq5rz2zs2n0xx84437pj"
},
"stable": {
"version": [
@@ -54590,11 +55175,11 @@
"repo": "emacsorphanage/god-mode",
"unstable": {
"version": [
- 20250820,
- 259
+ 20260428,
+ 56
],
- "commit": "e6eef24dbf739d819a6651e854ec732ac3f386e6",
- "sha256": "1b39lq1l7xa2i4l5ciry3pjaxgzs0xawadb5kbcfhqhd4xlgb04g"
+ "commit": "4deb47444dd21c67521908cef8b11ab377bfbd6f",
+ "sha256": "0djj04spg2m40a0c6cgb18pfdcxr3xr3qwhzqpb78ml2p9yxd2za"
},
"stable": {
"version": [
@@ -54662,19 +55247,25 @@
"repo": "minad/goggles",
"unstable": {
"version": [
- 20260322,
- 18
+ 20260519,
+ 1038
],
- "commit": "73040c4dc8fe946d3657accb5dc4ed4065abd348",
- "sha256": "0dbvzyg9cmiis1aj0xb57gdr32p238hwfw731n10gxik9yzhhd2w"
+ "deps": [
+ "compat"
+ ],
+ "commit": "e473909708aa0df2134b7bb7f6654d0fb5f23e23",
+ "sha256": "0247jq97l30ykn02wmkpq401is453yqix7y28pf2milj3mic9blw"
},
"stable": {
"version": [
0,
- 4
+ 5
],
- "commit": "41d3669d7ae7b73bd39d298e5373ece48b656ce3",
- "sha256": "1fczxygg1blfmlwswck49rllww77rc7qn91wqw1kvjwfz31sk8z4"
+ "deps": [
+ "compat"
+ ],
+ "commit": "e473909708aa0df2134b7bb7f6654d0fb5f23e23",
+ "sha256": "0247jq97l30ykn02wmkpq401is453yqix7y28pf2milj3mic9blw"
}
},
{
@@ -55040,24 +55631,6 @@
"sha256": "19lpr9wa73415jmdl1acijz54h5sdsj95wxigigbiqdhq6pd301p"
}
},
- {
- "ename": "gotest-ts",
- "commit": "86837556b6cdc831bb4bb387a0840fe6186ebedc",
- "sha256": "1fl8cyykfq9myrs8p5240mp2jh3lb1p5f0fgvrq0bw7cj4rp9306",
- "fetcher": "github",
- "repo": "chmouel/gotest-ts.el",
- "unstable": {
- "version": [
- 20260127,
- 1547
- ],
- "deps": [
- "gotest"
- ],
- "commit": "b12e08d925bab705792f14b29acdca9af550d9a8",
- "sha256": "053q4h0wd8rbrcdmn85v1530cvbx4ygwlr0yp8v5pji7wrgbbpd7"
- }
- },
{
"ename": "gotham-theme",
"commit": "20b2cc78b41a26e434b984943681fea774fd3c50",
@@ -55216,7 +55789,7 @@
"stable": {
"version": [
0,
- 53,
+ 55,
1
],
"deps": [
@@ -55225,8 +55798,8 @@
"magit-popup",
"s"
],
- "commit": "21f582334c38f866ac587f1489d637440d1428aa",
- "sha256": "19bwm2sn8g3a85y6kgs3fh40z2xv53k1ipddfb3qdiml1z69f33s"
+ "commit": "1e372f1c01953d43fe4d573eb60f33f7e3d3aa41",
+ "sha256": "012fcyyi63r8i4f9b8hlh9bz6g89v4v6n4h3fwbcqsqb9jka25wf"
}
},
{
@@ -55389,29 +55962,29 @@
"repo": "karthink/gptel",
"unstable": {
"version": [
- 20260422,
- 756
+ 20260715,
+ 1547
],
"deps": [
"compat",
"transient"
],
- "commit": "593786fce27b54248d4c0ae19b120cbbcf51aea9",
- "sha256": "1g436n57r6czk7vrzq8brzvsadrc16p37wicars750i5qhph7f48"
+ "commit": "8701e2bd80c5d2091ce2decef5d34d6fce4a3ada",
+ "sha256": "0sy58l4ixv01g7n9ybzcp7y3mhwm3p9353aj0wn46nharji4nca5"
},
"stable": {
"version": [
0,
9,
9,
- 4
+ 5
],
"deps": [
"compat",
"transient"
],
- "commit": "d221329ee3aa0198ad51c003a8d94b2af3a72dce",
- "sha256": "1ffh2mwy9znjd0v9mh065lv122xg4nlnkbxwjfrsaqn1j1q2xc0c"
+ "commit": "f5ad4eb812920fba3fcfbe32042ef89f979a7e17",
+ "sha256": "1bf7xynmrm859471nxc56sv028i039qnqhhmkhzkhf76mwac6cx8"
}
},
{
@@ -55422,8 +55995,8 @@
"repo": "karthink/gptel-agent",
"unstable": {
"version": [
- 20260415,
- 611
+ 20260717,
+ 506
],
"deps": [
"compat",
@@ -55431,8 +56004,8 @@
"orderless",
"yaml"
],
- "commit": "e2ef97d6b566b2ad751c8a0a87b8272710c95808",
- "sha256": "0k88fav640ckjjv269zx6zlhjghr551bcamx7argvs8i5ca7r9jx"
+ "commit": "e833bcaf617baf8c8075eac098231c4457386814",
+ "sha256": "165jvz2v88j9j2h76qxj4awk7x699v5ahg4vvg06p6p37zfyfzc1"
}
},
{
@@ -55461,14 +56034,14 @@
"repo": "lakkiy/gptel-commit",
"unstable": {
"version": [
- 20250726,
- 1448
+ 20260520,
+ 342
],
"deps": [
"gptel"
],
- "commit": "2b1063a01ab894ae5661bfffeb97331ad0cf2e3b",
- "sha256": "1lc459dhjhhhh2dzvfmvnjdjmn0z1998wn6n6927llways61wvz5"
+ "commit": "c354320fc6a2f3df4594d524d78a7effa765636e",
+ "sha256": "1j0fg9qp9nyd62qis2gvjf7cy9i0pfhj2ar82m587r2hy4lyf75s"
},
"stable": {
"version": [
@@ -55491,15 +56064,28 @@
"repo": "beacoder/gptel-cpp-complete",
"unstable": {
"version": [
- 20260330,
- 755
+ 20260715,
+ 307
],
"deps": [
"eglot",
"gptel"
],
- "commit": "4a5fe7941a76f74fe277da916be2cd20e06d2b60",
- "sha256": "0wzrc6j56zlf7yswhrfd706jnf5a8agbnpq4cdrdg2n0s2ai6q20"
+ "commit": "d1d083100a57edc467fb1adf3afe405bf0b2c258",
+ "sha256": "1vb464kplxqhnicymgz3gzkdc7422d221imwghi1qxq3i6qsyz9i"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 3,
+ 0
+ ],
+ "deps": [
+ "eglot",
+ "gptel"
+ ],
+ "commit": "650e4077dc35e5be8fc63b3c1cc1323099731ffa",
+ "sha256": "1m2n0sq68w1xjkn5bmqdl4ky6p35gx09pja35n13islchyn42knr"
}
},
{
@@ -55540,16 +56126,16 @@
"repo": "ArthurHeymans/gptel-forge-prs",
"unstable": {
"version": [
- 20260318,
- 1114
+ 20260624,
+ 821
],
"deps": [
"forge",
"gptel",
"magit"
],
- "commit": "aed2bbd21a359770a7739f18f34837ec8d0add24",
- "sha256": "01p9n7515xn1blssv04lfb1yqm9g2zvjf9npqm3szmqrnxr88c0g"
+ "commit": "0a23a7f3f339bb0110a446a7b358aa68867c7898",
+ "sha256": "06wzpw5z9vgwz7yls5z52wpw8wd17kz01krf13qi8781m1v64b6h"
}
},
{
@@ -56042,28 +56628,28 @@
"repo": "michelangelo-rodriguez/greader",
"unstable": {
"version": [
- 20260409,
- 2330
+ 20260627,
+ 1651
],
"deps": [
"compat",
"seq"
],
- "commit": "4b0deb0b0ef4a73ea8fe9e2b62b45321dd76a609",
- "sha256": "1f6mz0815v862ppnf67gs13p4mfjykp2iap8iysl8yy999a23bac"
+ "commit": "5c304ad008d8688e4eccd9947ba5e410399bf021",
+ "sha256": "150d9jjb3famg1phvdn4gifd5xcc3zm543m6w5czfy44khps4ll0"
},
"stable": {
"version": [
0,
19,
- 0
+ 5
],
"deps": [
"compat",
"seq"
],
- "commit": "e3f930f6ad3f5296252409d3015d6ecce0a5e91b",
- "sha256": "08c4i5qbr0ndbbps6y5kpp0lzfmxnwifrxssqkd9qdzj068k69k3"
+ "commit": "5c304ad008d8688e4eccd9947ba5e410399bf021",
+ "sha256": "150d9jjb3famg1phvdn4gifd5xcc3zm543m6w5czfy44khps4ll0"
}
},
{
@@ -56227,11 +56813,11 @@
"repo": "seagle0128/grip-mode",
"unstable": {
"version": [
- 20260324,
- 1109
+ 20260610,
+ 628
],
- "commit": "d2d27240d0150c00f0b9a5d7d840357e84d4728d",
- "sha256": "1x0r8zcblbzzjx9w192mygndga6qp4baq4xkyvsny121vifdb9za"
+ "commit": "6ed3f9739e4a3320ab063f923c00215f7ee5b5cc",
+ "sha256": "0vgi7ji64xvy45qn84h2dysyhfngc331swkqc69216sl50d24vh8"
},
"stable": {
"version": [
@@ -56333,6 +56919,21 @@
"sha256": "1jpfyqnqd8nj0g8xbiw4ar2qzxx3pvhwibr6hdzhyy9mmc4yzdgk"
}
},
+ {
+ "ename": "grove",
+ "commit": "ad2ba82bb65b2d3e140887299dffada73955cad6",
+ "sha256": "19ffibm27ibqz0xrhj8rpxw5fyw7qs971jrf2zzilbq7jrbqa9cq",
+ "fetcher": "github",
+ "repo": "jonathanchu/grove",
+ "unstable": {
+ "version": [
+ 20260509,
+ 358
+ ],
+ "commit": "8cb33df4e39c51265b8021ecf858ab4bde27f41e",
+ "sha256": "0g2s3hyc8nhxc0ga33snvh2ybccapc9fc62giw496mzw2x75d3hp"
+ }
+ },
{
"ename": "gruber-darker-theme",
"commit": "87ade74553c04cb9dcfe16d03f263cc6f1fed046",
@@ -56489,21 +57090,21 @@
"repo": "wbolster/emacs-gsettings",
"unstable": {
"version": [
- 20210407,
- 2045
+ 20260706,
+ 1543
],
"deps": [
"dash",
"gvariant",
"s"
],
- "commit": "9f9fb1fe946bbba46307c26355f355225ea7262a",
- "sha256": "1pq18kz6dqk45ib70sch38ql63smpv7s80ik478ajjysks3882rc"
+ "commit": "e911edf0c80f3bb9599b3b628425e510f0acb63f",
+ "sha256": "1yll0lml8ilxqxy8wv18xrid040qrdgr6ahj2dicam589rhvkncs"
},
"stable": {
"version": [
1,
- 0,
+ 1,
0
],
"deps": [
@@ -56511,8 +57112,8 @@
"gvariant",
"s"
],
- "commit": "1dd9a6a3036d76d8e680b2764c35b31bf5e6aff7",
- "sha256": "0bv6acy3b6pbjqm24yxgi7xdd3x0c2b7s5sq65sb3lxf8hy5gdf6"
+ "commit": "e911edf0c80f3bb9599b3b628425e510f0acb63f",
+ "sha256": "1yll0lml8ilxqxy8wv18xrid040qrdgr6ahj2dicam589rhvkncs"
}
},
{
@@ -56663,20 +57264,20 @@
"repo": "bormoge/guava-themes",
"unstable": {
"version": [
- 20260421,
- 2012
+ 20260701,
+ 2352
],
- "commit": "de9bbe98c5186ab56cb460c59644bb9da6c6437c",
- "sha256": "04xf7k1x7l13hzsyi56dzph1nhc6rmanqvdbqv7ngb8kqd810msv"
+ "commit": "49339c87d895d0726280811b325bb631f08aec69",
+ "sha256": "0svr8sa8k1w37ijv46bsshkax2zkjgd9821azr4bqq306iirin5n"
},
"stable": {
"version": [
0,
- 15,
+ 18,
0
],
- "commit": "50881883b9ca7fbceb9bfedb04d2a16ea01125bb",
- "sha256": "0pkng9vra4ymjnwys4d3b6ly8marpc6zl6yl02k731lhx3a1kll7"
+ "commit": "92ed6ba6c117ce52137fae975e6c73aa1ff3ed62",
+ "sha256": "11ii5l7kvsf9vm0wlixsysbcqsagrbz3qncj7phriwrwxqsf1nmh"
}
},
{
@@ -56687,14 +57288,14 @@
"repo": "tmalsburg/guess-language.el",
"unstable": {
"version": [
- 20240528,
- 1319
+ 20260625,
+ 628
],
"deps": [
"cl-lib"
],
- "commit": "a17203d26135b970e4d7c5d101955d41303a758f",
- "sha256": "1v9wwpfjl7a37jx0s2w5g48mv58vw8b3d0552v5ksxw21mbkya8s"
+ "commit": "f7f74d50b11e090d7543daa0dfbf273820c006c7",
+ "sha256": "00540641raakr3f1v4l09g1h7j3x5c69221y8smfr6jm0m9ghaxy"
}
},
{
@@ -56769,8 +57370,8 @@
"repo": "guix/emacs-guix",
"unstable": {
"version": [
- 20260310,
- 758
+ 20260719,
+ 1326
],
"deps": [
"bui",
@@ -56780,14 +57381,14 @@
"magit-popup",
"transient"
],
- "commit": "43151aa6902c7122e919d3ed688fd484ec004feb",
- "sha256": "0zj4369i667z9v9lmmhc0zyfhia7xss5127p2hspi513mg415wsn"
+ "commit": "5d41b59529548cca88c368fe7975856a49b50a7b",
+ "sha256": "00904i5kby3794lfyic80pqwbxk4v3a8p1v5v6wi59fzzpwz26kh"
},
"stable": {
"version": [
0,
- 6,
- 1
+ 7,
+ 0
],
"deps": [
"bui",
@@ -56797,8 +57398,8 @@
"magit-popup",
"transient"
],
- "commit": "72833603ee54c7a8d955415869a332419680ca50",
- "sha256": "14639wg2717yawj4qhmmzvirrvjy0s1jw2j9wgyzc21h7hl016pz"
+ "commit": "5d41b59529548cca88c368fe7975856a49b50a7b",
+ "sha256": "00904i5kby3794lfyic80pqwbxk4v3a8p1v5v6wi59fzzpwz26kh"
}
},
{
@@ -56862,26 +57463,26 @@
"repo": "wbolster/emacs-gvariant",
"unstable": {
"version": [
- 20210507,
- 1310
+ 20260630,
+ 840
],
"deps": [
"parsec"
],
- "commit": "f2e87076845800cbaaeed67f175ad4e4a9c01e37",
- "sha256": "1m6gwplzps0hykzszh0vh4rs48hcfi99vxb4i870y46lq2y8x2xb"
+ "commit": "b49a9c6623773be20e59eada9f8eab33210cc89b",
+ "sha256": "127pnhnljdbw1l74zj7b4ncr6vzpi6rpqmn6ikn14g5jj1nh2813"
},
"stable": {
"version": [
1,
- 0,
+ 1,
0
],
"deps": [
"parsec"
],
- "commit": "79c34d11ee6a34f190f1641a133d34b0808a1143",
- "sha256": "18ld0wv8r5wlbicqym8vdw33la0bn59s7bxm2fw0w97qwjka8g8k"
+ "commit": "b49a9c6623773be20e59eada9f8eab33210cc89b",
+ "sha256": "127pnhnljdbw1l74zj7b4ncr6vzpi6rpqmn6ikn14g5jj1nh2813"
}
},
{
@@ -57001,17 +57602,17 @@
},
{
"ename": "hacker-typer",
- "commit": "3416586d4d782cdd61a56159c5f80a0ca9b3ddf4",
- "sha256": "0vf18hylhszvplam6c4yynr53zc3n816p9k36gywm6awwblfpyfb",
- "fetcher": "github",
+ "commit": "1d888e12b1c4002896723b3c993a72bf920ef37b",
+ "sha256": "1a60cx65nn50xlrrcbyh47drnkh2an0wfsyjbxzqzgacbjf1v5g7",
+ "fetcher": "sourcehut",
"repo": "dieggsy/emacs-hacker-typer",
"unstable": {
"version": [
- 20170206,
- 1520
+ 20260530,
+ 526
],
- "commit": "d5a23714a4ccc5071580622f278597d5973f40bd",
- "sha256": "13wp7cg9d9ij44inxxyk1knczglxrbfaq50wyhc4x5zfhz5yw7wx"
+ "commit": "3f15d0cfe7636d5b32cbc882f23d5a7b61a86ae7",
+ "sha256": "0mvavn0xvih5bnag5g94przsxhmmc6bf1xh4s1268ng3j3if8d1j"
},
"stable": {
"version": [
@@ -57379,6 +57980,21 @@
"sha256": "17xsyvi8myrcyxrv07ckb6dr3mpkihva7y3daw13a3jnm2kzjsp4"
}
},
+ {
+ "ename": "har-viewer",
+ "commit": "a5c3eb103915ee1fb71f39125567e938c0ced7cc",
+ "sha256": "1c8agd7lgaz31nss6plz7hqf3jd7183v3w94ixm5d223hg9ax4az",
+ "fetcher": "github",
+ "repo": "bozoslivehere/har-viewer.el",
+ "unstable": {
+ "version": [
+ 20260523,
+ 2035
+ ],
+ "commit": "0b36dd0ef6743e0267e603127a4509737f8b1f0b",
+ "sha256": "1cdlc41vxv3z8n5l9q1dixznjdm6vx1kna44hrmcgqc366phs5k3"
+ }
+ },
{
"ename": "hardcore-mode",
"commit": "b929b3343cd5925944665e4e09b4524bca873c95",
@@ -57969,20 +58585,20 @@
"repo": "mgmarlow/helix-mode",
"unstable": {
"version": [
- 20260313,
- 2319
+ 20260629,
+ 1530
],
- "commit": "682049dbc0616f5f9737db3aad2aa1caacf71727",
- "sha256": "1i41z8jqy7sm4cn1wm54xnkvfng8nkc499clk66vqppzjjrq8gnw"
+ "commit": "eca52f517583a599a0a2589cdaa04f00cfc86184",
+ "sha256": "0s5dpz0jhwdfqjqyjzar38zwd1i1p33m82as6bjlz7h3hkndb5gd"
},
"stable": {
"version": [
0,
- 9,
+ 10,
0
],
- "commit": "f3f724ab2c933811a779e0cd6917829ab9e2de3c",
- "sha256": "0rbchgcg3xkmia8qxh7v3mf0ijpzs7jx3g76dcc1zcpzj2kx46h5"
+ "commit": "eca52f517583a599a0a2589cdaa04f00cfc86184",
+ "sha256": "0s5dpz0jhwdfqjqyjzar38zwd1i1p33m82as6bjlz7h3hkndb5gd"
}
},
{
@@ -58008,28 +58624,28 @@
"repo": "emacs-helm/helm",
"unstable": {
"version": [
- 20260424,
- 553
+ 20260716,
+ 1207
],
"deps": [
"helm-core",
"wfnames"
],
- "commit": "c316c0b50317f83d0448d1e49714733215eae133",
- "sha256": "1zyr0ra1kd4lqphz1f079wf6w0p8mmyn9rm008y61i77p8w3mgfk"
+ "commit": "0046ed9ab32d6fa3e60865e84b27cf62fe386b67",
+ "sha256": "0d7faxj2si3x76kmxfq2qnlhl85yrpmcgfnl2j6hybc2q402m6ni"
},
"stable": {
"version": [
4,
0,
- 6
+ 7
],
"deps": [
"helm-core",
"wfnames"
],
- "commit": "f12e7dd3132724cc294e79b55291a2c967a8fe5c",
- "sha256": "0bcwy60wqfhxvxkhc0rl7bkasf0y1pm5kwg90qh9y23ri69z08zx"
+ "commit": "3cd5097285dc10ac0898cf6f30c9699c3399e421",
+ "sha256": "1yihrb2gsl4p24xwwpdapgmnv64sd0pmbfzgpcp8nypyvs5g7kb3"
}
},
{
@@ -58191,15 +58807,15 @@
"repo": "emacs-helm/helm-bbdb",
"unstable": {
"version": [
- 20190728,
- 1325
+ 20260719,
+ 1537
],
"deps": [
"bbdb",
"helm"
],
- "commit": "db69114ff1af8bf48b5a222242e3a8dd6e101e67",
- "sha256": "1yfz5s83589jazyfzyrzh84iv0db2akbwj796gadpb3yhn17pl4v"
+ "commit": "3eb99e36ed18ca2809594d165664af77a02d2bd0",
+ "sha256": "0s0rkzf8v135pjk409lbihz9b3wvr8dnjhqq98qris4rvvl0d67h"
},
"stable": {
"version": [
@@ -58819,26 +59435,26 @@
"repo": "emacs-helm/helm",
"unstable": {
"version": [
- 20260412,
- 600
+ 20260618,
+ 1908
],
"deps": [
"async"
],
- "commit": "8e1be2fdba8d99aab20c31f1bd08535773549fa4",
- "sha256": "0f6q8wimad16wqarhkzkqyc47maad77r7s9mjlfpfmm3mbbi9ixa"
+ "commit": "558427bf221a61014e25d1be3a29dbebad277973",
+ "sha256": "1brd3q69yfhw5dr0bwmlsjsjh9m32wdkr3llv6y7rx35bh4rhdf5"
},
"stable": {
"version": [
4,
0,
- 6
+ 7
],
"deps": [
"async"
],
- "commit": "f12e7dd3132724cc294e79b55291a2c967a8fe5c",
- "sha256": "0bcwy60wqfhxvxkhc0rl7bkasf0y1pm5kwg90qh9y23ri69z08zx"
+ "commit": "3cd5097285dc10ac0898cf6f30c9699c3399e421",
+ "sha256": "1yihrb2gsl4p24xwwpdapgmnv64sd0pmbfzgpcp8nypyvs5g7kb3"
}
},
{
@@ -59002,14 +59618,14 @@
"repo": "emacs-helm/helm-dictionary",
"unstable": {
"version": [
- 20250227,
- 1635
+ 20260611,
+ 719
],
"deps": [
"helm"
],
- "commit": "725cc0df42ad57a7902c330065d9e8ee1216791c",
- "sha256": "1ipia68s5x1ny6w99g56hfcnhphlz7zh7bhmrrjyv3aflr7d3170"
+ "commit": "79eb9b8b33cb3fd8228efde146e23866b4a02652",
+ "sha256": "0hc31rn0ri6l3nv5z4l2gqc03zmi6p08q80dbdddjk6npv8nf9ba"
}
},
{
@@ -60295,16 +60911,16 @@
"repo": "emacs-lsp/helm-lsp",
"unstable": {
"version": [
- 20250812,
- 1134
+ 20260507,
+ 1749
],
"deps": [
"dash",
"helm",
"lsp-mode"
],
- "commit": "d9d1a60f5020196b71fa89e5db3dcd12d00b7d02",
- "sha256": "1g212mkzfm3pb1ynn3m141sz7w0ih9ssdz36a97l3wk4g14p9ric"
+ "commit": "056bb16b5f69137218613b7558b477f6b21f22be",
+ "sha256": "0m0lbw7n8lfyahpwg9lpqa9wf7bn90416va3wn2lik8gapxwwgwa"
},
"stable": {
"version": [
@@ -61023,28 +61639,28 @@
"repo": "bbatsov/helm-projectile",
"unstable": {
"version": [
- 20250902,
- 830
+ 20260708,
+ 1251
],
"deps": [
"helm",
"projectile"
],
- "commit": "0ffb6b5f09c1d65d721c1111ebfa6cec0ba63234",
- "sha256": "19zafd0l2mcd53q83bd2mxinadzsp90q5znfcm9fq0m88lpcmg94"
+ "commit": "150ab7b669f7d3000718b73fa857dfe0ad641a97",
+ "sha256": "1s1pxi6f7v23fr7iax075wq6jkn3vrnasm2rjxmf781cjkjayk09"
},
"stable": {
"version": [
1,
- 4,
+ 7,
0
],
"deps": [
"helm",
"projectile"
],
- "commit": "0ffb6b5f09c1d65d721c1111ebfa6cec0ba63234",
- "sha256": "19zafd0l2mcd53q83bd2mxinadzsp90q5znfcm9fq0m88lpcmg94"
+ "commit": "150ab7b669f7d3000718b73fa857dfe0ad641a97",
+ "sha256": "1s1pxi6f7v23fr7iax075wq6jkn3vrnasm2rjxmf781cjkjayk09"
}
},
{
@@ -62599,19 +63215,19 @@
"repo": "Anoncheg1/emacs-hidepass",
"unstable": {
"version": [
- 20260415,
- 1941
+ 20260512,
+ 1112
],
- "commit": "0cdc0d7910501d91d5d75ae53a42726d3fca0302",
- "sha256": "1fv98diy9nj8n8y6ndb3n6vddvbqi539b1q87vsfzfna2gwnrpn6"
+ "commit": "6094bc0e37f5ac4abfe3fe8ed0ce8eef1a928ef9",
+ "sha256": "1ji625asb8xrb7ajm2vdk2iq2n6dv8y4558pi9ywq0ihdfddxvwd"
},
"stable": {
"version": [
0,
- 1
+ 2
],
- "commit": "da33a03407f1fd8e23959abbc37ba50ec1317a39",
- "sha256": "1xjl1z7nxdkc7s18jl4bbvaf3cayki865xm3w3f0py276j7gl1gw"
+ "commit": "6094bc0e37f5ac4abfe3fe8ed0ce8eef1a928ef9",
+ "sha256": "1ji625asb8xrb7ajm2vdk2iq2n6dv8y4558pi9ywq0ihdfddxvwd"
}
},
{
@@ -63124,11 +63740,11 @@
"repo": "bdsatish/hindu-calendar",
"unstable": {
"version": [
- 20260326,
- 2105
+ 20260627,
+ 1755
],
- "commit": "118e8455e3c2c8a0b2661b41eee0df9cb07fc87d",
- "sha256": "1crgia9fgbfmanpxzpaklvv4vjxajw4bpaynvp65f86j7y1rm53w"
+ "commit": "0868cb7548830e50d801f68a79e34fd988464f3e",
+ "sha256": "0gsp9wfrnzbqkddbpi9w5nbhsbsiyg5aq01xpbqmrc4fwdw616xc"
}
},
{
@@ -63369,11 +63985,11 @@
"repo": "ideasman42/emacs-hl-indent-scope",
"unstable": {
"version": [
- 20251231,
- 706
+ 20260502,
+ 926
],
- "commit": "38c8775dc575ecf6a35fa88946be3dfb5b489018",
- "sha256": "0qmab8g6mwacvgyjjwdblzx9j5wgyzkwz7b54vj9r1v2as79idhb"
+ "commit": "538ddc0295727b11e20a9615a18d0f280bc0212a",
+ "sha256": "16v0cp3z655siniqz8x27xxyifs7jmpkb60gbjvs1yx36jg1k6zp"
}
},
{
@@ -63402,11 +64018,11 @@
"repo": "ideasman42/emacs-hl-prog-extra",
"unstable": {
"version": [
- 20251224,
- 230
+ 20260502,
+ 900
],
- "commit": "1cfce465f59700820932ec71c019d821c6cea126",
- "sha256": "0fl94alqmj1530l632wwv2s84jgvppbxsk3w5r6faddf03c8zpcm"
+ "commit": "2eac9eb5a428b23f87cfa1373f5f8fd634a72e48",
+ "sha256": "0raxwlqbp6587c5f68dd3xq12yxaq3g5cw9r3526vnmkzajxix1s"
}
},
{
@@ -63433,32 +64049,34 @@
},
{
"ename": "hl-todo",
- "commit": "7c262f6a1a10e8b3cc30151cad2e34ceb66c6ed7",
- "sha256": "1iyh68xwldj1r02blar5zi01wnb90dkbmi67vd6h78ksghl3z9j4",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "14h09cxwi3hh63xdnc2a9pvaf51gws7crhs2ivci7h9377yqqcir",
"fetcher": "github",
"repo": "tarsius/hl-todo",
"unstable": {
"version": [
- 20260101,
- 1834
+ 20260601,
+ 1508
],
"deps": [
- "compat"
+ "compat",
+ "cond-let"
],
- "commit": "9540fc414014822dde00f0188b74e17ac99e916d",
- "sha256": "01rfyp1iqiyp8k7fg16ji8p2dp74ffdhl4bdikfxb2sz4jbz8x80"
+ "commit": "527d545b8c2f36243194cbe4a8d0e6ac9d50e6a7",
+ "sha256": "0zn5mk2m9gk7dyx04hmn8jfq0b4ai6l0nd9xss4gdzcdxh74779s"
},
"stable": {
"version": [
3,
9,
- 3
+ 4
],
"deps": [
- "compat"
+ "compat",
+ "cond-let"
],
- "commit": "9540fc414014822dde00f0188b74e17ac99e916d",
- "sha256": "01rfyp1iqiyp8k7fg16ji8p2dp74ffdhl4bdikfxb2sz4jbz8x80"
+ "commit": "527d545b8c2f36243194cbe4a8d0e6ac9d50e6a7",
+ "sha256": "0zn5mk2m9gk7dyx04hmn8jfq0b4ai6l0nd9xss4gdzcdxh74779s"
}
},
{
@@ -63557,6 +64175,25 @@
"sha256": "1abqjrzq75ijhn3sfmy0wy6acp8x7nj5gihqy34mickz4v5wqbil"
}
},
+ {
+ "ename": "hnview",
+ "commit": "6623d052596f1be181d9365cda61caca3d92afbd",
+ "sha256": "1xwh6fcbk1r8psqm8wkd5hs8n88p3gg7k2hwg74wi67yq80q9s57",
+ "fetcher": "github",
+ "repo": "LuciusChen/hnview",
+ "unstable": {
+ "version": [
+ 20260720,
+ 641
+ ],
+ "deps": [
+ "llm",
+ "plz"
+ ],
+ "commit": "9b835985f9513f6801109b26d2b311f90195a3b3",
+ "sha256": "0cwkvasab7js3b47is1s5xhvy4j0lk5jb697dpvfn51c6b3dvm83"
+ }
+ },
{
"ename": "hoa-mode",
"commit": "07e85198e461f6a5e440ec95f7a5e93dd624205c",
@@ -64107,17 +64744,17 @@
},
{
"ename": "http-server",
- "commit": "038be2fbd45ee801be37c42f8cd2ddedd0138f05",
- "sha256": "0cy94j82qfd7x0riz7mhas52xdbr3nhi0ch0x3whbnpjklhkq6c0",
- "fetcher": "git",
- "url": "https://codeberg.org/martenlienen/http-server.el.git",
+ "commit": "555731d091158b9d7d16fe0c6904b66c7e0e502f",
+ "sha256": "025z8pk4064rmgpjx7g6vh8am8q2sa6yinj162y84a74a1af06ah",
+ "fetcher": "codeberg",
+ "repo": "martenlienen/http-server.el",
"unstable": {
"version": [
- 20260419,
- 1924
+ 20260609,
+ 1136
],
- "commit": "973c87b418e59404dcdfe823254e5094adf290f7",
- "sha256": "1hmkm0wp5g6ac2hdg306sl42v12x3znsz363v75k6fd1qydhkk1v"
+ "commit": "4285bd3e4b67983cb783f46afc736032f895882d",
+ "sha256": "0wwv7k4avxgrscmvqnxada38ry03ijncracwvgkpgfky1cj3r0l8"
}
},
{
@@ -64333,6 +64970,27 @@
"sha256": "18yspmwn9wd00arfj80wj6lk7khcgn1arjbs2y8zqv8g7ms9xvh6"
}
},
+ {
+ "ename": "hutch",
+ "commit": "17017ad00b0a010ceb735079100fc95345804ce2",
+ "sha256": "13wxpgp1l35hl2phb5f58y2whcghwp5v4ibf1qnhrvbplclwjdwv",
+ "fetcher": "github",
+ "repo": "adjaecent/magit-hutch",
+ "unstable": {
+ "version": [
+ 20260630,
+ 1048
+ ],
+ "deps": [
+ "gptel",
+ "magit",
+ "svg-lib",
+ "transient"
+ ],
+ "commit": "ee06a06093c66f2c4c5873434aba44b62e11bf76",
+ "sha256": "0g1h5laqwd14dvdpwn0nj3picygqf6dgvg9lcbk727v2i9qvpssm"
+ }
+ },
{
"ename": "hy-mode",
"commit": "fc9ab5cf16b61bb27559cd8ec5cf665a5aab2154",
@@ -64498,11 +65156,11 @@
"url": "https://git.savannah.gnu.org/git/hyperbole.git",
"unstable": {
"version": [
- 20260422,
- 744
+ 20260719,
+ 1833
],
- "commit": "d16aa9cf3e496aa9a6c20d73f4494e16feb4d092",
- "sha256": "0iv3sy2zympi1r04aqmlrz64zjf9xy51v6yf329nqybm12mkqgsx"
+ "commit": "a517c813cd40597a2f9ecb2370607147846e2125",
+ "sha256": "1ib3bb9p3r2kblf0pmxhdsw9f3rpxqkaprwdf8ydfmj8frhwmsyd"
},
"stable": {
"version": [
@@ -64671,19 +65329,19 @@
"repo": "precompute/hyperstitional-themes",
"unstable": {
"version": [
- 20260215,
- 1305
+ 20260701,
+ 1314
],
- "commit": "b4bf851ea46ad4ddc8c45afc3c2d000d7f13bc4b",
- "sha256": "1zqcy2zhgp2qfj4k01ns8pc7ff449gyrx4gfwlzny8cgmbv01fkd"
+ "commit": "18b5ee327f6e7e3d82fe3a274c351137e6e0cecd",
+ "sha256": "0qjp85836gv4kbq580xrqvdx92h4f0m0k2pyg8cw28nd1mwj85ma"
},
"stable": {
"version": [
3,
- 4
+ 5
],
- "commit": "b4bf851ea46ad4ddc8c45afc3c2d000d7f13bc4b",
- "sha256": "1zqcy2zhgp2qfj4k01ns8pc7ff449gyrx4gfwlzny8cgmbv01fkd"
+ "commit": "18b5ee327f6e7e3d82fe3a274c351137e6e0cecd",
+ "sha256": "0qjp85836gv4kbq580xrqvdx92h4f0m0k2pyg8cw28nd1mwj85ma"
}
},
{
@@ -64946,11 +65604,20 @@
"repo": "jojojames/ibuffer-sidebar",
"unstable": {
"version": [
- 20210508,
- 836
+ 20260718,
+ 2134
],
- "commit": "fb685e1e43db979e25713081d8ae4073453bbd5e",
- "sha256": "04x87gngmvyj4nfq1dm3h9jr6b0kvikxsg1533kdkz9k72khs3n3"
+ "commit": "b9b985f4ceb627521ed78cfdc4270305f3b0f272",
+ "sha256": "0hncjhbznkfjafhyc8nxyy0k8pja3qbkm2innalv45i5y2hli6ar"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 0,
+ 1
+ ],
+ "commit": "39299532ad8a040197b18ed2bce928524182c7b7",
+ "sha256": "0gxn5j4i5jjkzjkyzv42j3a3y6158b4ynj4vj6aznj4dzin8hm8s"
}
},
{
@@ -65029,14 +65696,14 @@
"repo": "conao3/iceberg-theme.el",
"unstable": {
"version": [
- 20220622,
- 1
+ 20260516,
+ 827
],
"deps": [
"solarized-theme"
],
- "commit": "c9fdf9a8f5ff417c206730a84731f64a95483935",
- "sha256": "03a7mmaykwvmm9yc8ii5k5wgihl88kyq0amp2byjddl7f4mq7zak"
+ "commit": "78b6cb1fce4d7456d928c32a7799809103fbbc10",
+ "sha256": "08zlw6krpfd5116w4dawp07gp2636gfv6lizd5virm4qvg3s2cg1"
},
"stable": {
"version": [
@@ -65624,15 +66291,15 @@
"repo": "idris-hackers/idris-mode",
"unstable": {
"version": [
- 20260209,
- 1107
+ 20260506,
+ 2033
],
"deps": [
"cl-lib",
"prop-menu"
],
- "commit": "d32b2396a8ad17820e308cd267f1b464a5235abc",
- "sha256": "1vldwsmyaazrkcmff6qv5hlprsj37dvj7p01lphg6x20pv63c6av"
+ "commit": "22cc1bf237428b24de5f4f228db747e93a4ae619",
+ "sha256": "1rjk1xmx75r32giazj88jq392lakwvpa03a8xdwmifrw5kryrl5h"
},
"stable": {
"version": [
@@ -65734,28 +66401,28 @@
"repo": "KarimAziev/igist",
"unstable": {
"version": [
- 20251023,
- 848
+ 20260508,
+ 1037
],
"deps": [
"ghub",
"transient"
],
- "commit": "badbc1302e6f83cfebd304c6332b321ca3313f21",
- "sha256": "0s96wv35dax1j4qa0c72l658317r34xbgmhvvl3lz6khac64k8s5"
+ "commit": "0735363f6b24910655e42e086e3a82ca5267dfc0",
+ "sha256": "1319nprmnrqwlqslrrm8wdzbjpyyj5gndrxnn7akkbg7x3lpsrp9"
},
"stable": {
"version": [
1,
8,
- 0
+ 2
],
"deps": [
"ghub",
"transient"
],
- "commit": "badbc1302e6f83cfebd304c6332b321ca3313f21",
- "sha256": "0s96wv35dax1j4qa0c72l658317r34xbgmhvvl3lz6khac64k8s5"
+ "commit": "0735363f6b24910655e42e086e3a82ca5267dfc0",
+ "sha256": "1319nprmnrqwlqslrrm8wdzbjpyyj5gndrxnn7akkbg7x3lpsrp9"
}
},
{
@@ -65910,26 +66577,26 @@
"repo": "tarsius/imake",
"unstable": {
"version": [
- 20260101,
- 1835
+ 20260601,
+ 1510
],
"deps": [
"compat"
],
- "commit": "c3d7fcc0d40676f47450891dc034511185566a0e",
- "sha256": "1ch8ckb9gd89wr8v6150k0rnia54cbna9hxiivx3jnnr4lwn63lj"
+ "commit": "19447819b9e27421fff8381873489938978d220e",
+ "sha256": "01pp1n278hkgy7p6waq1gvm2l154fc1xzsbdyi2aw0bf69l53j3r"
},
"stable": {
"version": [
1,
2,
- 6
+ 7
],
"deps": [
"compat"
],
- "commit": "c3d7fcc0d40676f47450891dc034511185566a0e",
- "sha256": "1ch8ckb9gd89wr8v6150k0rnia54cbna9hxiivx3jnnr4lwn63lj"
+ "commit": "19447819b9e27421fff8381873489938978d220e",
+ "sha256": "01pp1n278hkgy7p6waq1gvm2l154fc1xzsbdyi2aw0bf69l53j3r"
}
},
{
@@ -65940,11 +66607,11 @@
"repo": "QiangF/imbot",
"unstable": {
"version": [
- 20260422,
- 1521
+ 20260606,
+ 428
],
- "commit": "d228085198669c559f670d48251bfc5399e72a63",
- "sha256": "1jnyxyahzs8hm8bcnafzwxa08gvvqry3xgqaxd627wv5zddkyrbl"
+ "commit": "69d1551bbca9c991a4cfe3ccb133d862854ee1c7",
+ "sha256": "08jrx67m0zlvmbkh7l82z3xhysv3hna309w909gb1yb4g2c278qm"
}
},
{
@@ -66166,15 +66833,15 @@
"repo": "skeeto/impatient-mode",
"unstable": {
"version": [
- 20230511,
- 1746
+ 20260426,
+ 1323
],
"deps": [
"htmlize",
"simple-httpd"
],
- "commit": "a4e4e12852840996b027cb8e9fb2b809c37a0ee3",
- "sha256": "1cwascc08pzmvgjf0z5fh3w3jf85rgk13haz085qbdkhxsbivav2"
+ "commit": "4bb8009c6c6a6339a8fd7b4dea4a165af3721812",
+ "sha256": "1mic0g45g93r53zh8y1gdl0lkwpvdhi05jffz1jr8qq41jpp1886"
},
"stable": {
"version": [
@@ -66318,11 +66985,11 @@
"repo": "flashcode/impostman",
"unstable": {
"version": [
- 20250412,
- 1521
+ 20260714,
+ 1545
],
- "commit": "c1e764b16d32930d157e5bf2d2e6ac4dc3a23b8c",
- "sha256": "0b0jg4kscd8n9kccqckv9zl14ymd4w4aa6krvb3bh446y7j3i1hl"
+ "commit": "afaeefd8db6e72cd3022821db5aa5e1b521549b3",
+ "sha256": "1kiwlws6m8pn42mdsq0v2077ikvj441fwwny112iqx3kkcjnpa0q"
},
"stable": {
"version": [
@@ -66389,11 +67056,11 @@
"repo": "zk-phi/indent-guide",
"unstable": {
"version": [
- 20260211,
- 1005
+ 20260629,
+ 918
],
- "commit": "f3455c6c798b568a6ea1013b7eea1153d2e092be",
- "sha256": "18bmf426xbqlrz448i9aphw69zh8nki1zy1s59l9drz1h5h15n7r"
+ "commit": "1332f95d6f08afee35f62621793e2622b9f86f27",
+ "sha256": "0fk3qi3ncdyyqa0x07sm4y2z5fgwhmcqviicvhwmz782n8c6h8wd"
},
"stable": {
"version": [
@@ -66435,16 +67102,16 @@
"repo": "conao3/indent-lint.el",
"unstable": {
"version": [
- 20230822,
- 46
+ 20260516,
+ 852
],
"deps": [
"async",
"async-await",
"promise"
],
- "commit": "aee76faf54a55e0bcb5dc07a667d7f5999299c9b",
- "sha256": "19yixxsrwdm4wqch5011mk4gimsyh9rqzvrxkg7l7baa7am8v902"
+ "commit": "3660b10520d78dd545fd0c52d7e7a36dc602492d",
+ "sha256": "1r15nwxkb5d3zx7m1i5z8jmql551dcnq37czhk57v5madr6hggw6"
},
"stable": {
"version": [
@@ -66538,6 +67205,30 @@
"sha256": "1dx93qlzsl5zsinslgybd1lca6962dinzy91ndqijj7sicv9nd0r"
}
},
+ {
+ "ename": "indigo",
+ "commit": "8dc4f277cf9a064587a614ef685774a4ef398534",
+ "sha256": "1vznkl2mh9zyr004gy0xnwkvwna2hxikpbxhvggmzqz4wg24n14a",
+ "fetcher": "github",
+ "repo": "gicrisf/emacs-indigo",
+ "unstable": {
+ "version": [
+ 20260506,
+ 1617
+ ],
+ "commit": "86433c884f5ef591ff8250b3322e5e9abd8a502d",
+ "sha256": "1aa6pgxqv37x26cm2fdxls5lyqr20v62zyghfm14w7lb1w0j6h6r"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 11,
+ 1
+ ],
+ "commit": "f9305632ca14dd27bef538007ff73ec941bbbd31",
+ "sha256": "083kkhc4hfxihib7b2kzkf1mh17wzv4l8hbf6nwalwp3rm92dzrn"
+ }
+ },
{
"ename": "indium",
"commit": "4292058cc6e31cabc0de575134427bce7fcef541",
@@ -67001,20 +67692,20 @@
"repo": "jamescherti/inhibit-mouse.el",
"unstable": {
"version": [
- 20260314,
- 1908
+ 20260710,
+ 1610
],
- "commit": "93d7e3f3dc2a869f025f743e9fc0bedf1aaa82f0",
- "sha256": "1s958as7d46ha1pa7v1fik5pqvqxajry3v476pa6sf5l9glx3a2c"
+ "commit": "0bda8fe615b093b837d78ccb110d3d37e81641a8",
+ "sha256": "1rwdwmpq8xy588hbvhaids462mcph4gb2k3iik3hwr67anqxdla7"
},
"stable": {
"version": [
1,
0,
- 2
+ 4
],
- "commit": "89e009898dca46e07fed5fb313eb7bcdeb9d9714",
- "sha256": "01jcgrqlwwihvdv0bm1lddlm933czgdnas7rbxhr5zvdys9gfimz"
+ "commit": "86cae75bbb771ea6be6269b925c39761be12b065",
+ "sha256": "1046g96qvvsz66qnhnk6x1d4a535cgk7qbhx6bqhr44vwzg0h1h8"
}
},
{
@@ -67986,29 +68677,6 @@
"sha256": "0avxwa6d19i5fns27vwpl95f5iawm710jlnrihi5i21ndfm4mcyw"
}
},
- {
- "ename": "isgd",
- "commit": "d5ff75b269fd57c5822277b9ed850c69b626f1a5",
- "sha256": "0yc9mkjzj3w64f48flnjvd193mk9gndrrqbxz3cvmvq3vgahhzyi",
- "fetcher": "github",
- "repo": "chmouel/isgd.el",
- "unstable": {
- "version": [
- 20241230,
- 1331
- ],
- "commit": "2dd030ab451cb9e704d173ee1b2388d92362db3b",
- "sha256": "0wn6nx94pl7nc94bygm4vi1apzp2qlhfc3m2cg7myj9d2n5aa4xd"
- },
- "stable": {
- "version": [
- 1,
- 1
- ],
- "commit": "764306dadd5a9213799081a48aba22f7c75cca9a",
- "sha256": "09hx28lmldm7z3x22a0qx34id09fdp3z61pdr61flgny213q1ach"
- }
- },
{
"ename": "islisp-mode",
"commit": "f276aa46506c784e1dc8caff8c5fa9885da4ba82",
@@ -68801,28 +69469,28 @@
"repo": "radian-software/prescient.el",
"unstable": {
"version": [
- 20250816,
- 19
+ 20260628,
+ 2243
],
"deps": [
"ivy",
"prescient"
],
- "commit": "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18",
- "sha256": "0f4wi8aq3yfykxfza4y4c5yhcs50cs3gpfj0qrmvfq9hvkhzj52w"
+ "commit": "5649977fa7789e4615efeca09397ed7eccd06dfc",
+ "sha256": "199150yng81f6n3kb120s37yf2dqs0i9k91f2gzkk8kjn6hvrsj8"
},
"stable": {
"version": [
6,
3,
- 2
+ 3
],
"deps": [
"ivy",
"prescient"
],
- "commit": "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18",
- "sha256": "0f4wi8aq3yfykxfza4y4c5yhcs50cs3gpfj0qrmvfq9hvkhzj52w"
+ "commit": "5649977fa7789e4615efeca09397ed7eccd06dfc",
+ "sha256": "199150yng81f6n3kb120s37yf2dqs0i9k91f2gzkk8kjn6hvrsj8"
}
},
{
@@ -69275,6 +69943,30 @@
"sha256": "1i9f61x8pdf26p640gqjh7vb9a2yiqv915immbmbgrp6rmpdh48h"
}
},
+ {
+ "ename": "jal",
+ "commit": "16eb6bd862f3dcac53b8b0badb8115c7da27e7ad",
+ "sha256": "0gal293igsxs3iygbjj5sh6ayqfg35jgw28pyr9rrdbkqqsj58hs",
+ "fetcher": "github",
+ "repo": "saulotoledo/java-agent-loader",
+ "unstable": {
+ "version": [
+ 20260629,
+ 1417
+ ],
+ "commit": "54cbd7a6b613dc6ac2135ada9de47130e0665d3e",
+ "sha256": "1k0n25rsv5y7aadcbz9xmny4g111km2177q7x73p6bzk7k8cwqqc"
+ },
+ "stable": {
+ "version": [
+ 2,
+ 0,
+ 0
+ ],
+ "commit": "54cbd7a6b613dc6ac2135ada9de47130e0665d3e",
+ "sha256": "1k0n25rsv5y7aadcbz9xmny4g111km2177q7x73p6bzk7k8cwqqc"
+ }
+ },
{
"ename": "jami-bot",
"commit": "aeb2ddddedbccaf65b670458cdca86e884e7a56b",
@@ -70023,25 +70715,25 @@
"repo": "minad/jinx",
"unstable": {
"version": [
- 20260325,
- 1326
+ 20260519,
+ 1041
],
"deps": [
"compat"
],
- "commit": "70d7a0680edcb0db74b0c9c89a5b5bf4de3eeb20",
- "sha256": "113zjfa98qgvs9i96sdmbn82gyi1vsfnkmivim3q4ga7a8h1d4xk"
+ "commit": "987b9f90eb10df53c34c0f4972469875c1e93203",
+ "sha256": "0vb7vdv168wpn7pxcnkj2lqkc2y50ig7inr5l7z2mbx5xasgkb7y"
},
"stable": {
"version": [
2,
- 7
+ 8
],
"deps": [
"compat"
],
- "commit": "61bed3f77d37ae02100e8a2ec1cfb849d649fa5d",
- "sha256": "116kah9l2bw3a6a8hgvqb9bqb388m63j5603vlybgafkra46gjwl"
+ "commit": "987b9f90eb10df53c34c0f4972469875c1e93203",
+ "sha256": "0vb7vdv168wpn7pxcnkj2lqkc2y50ig7inr5l7z2mbx5xasgkb7y"
}
},
{
@@ -70643,14 +71335,14 @@
"repo": "mooz/js2-mode",
"unstable": {
"version": [
- 20241205,
- 140
+ 20260627,
+ 1342
],
"deps": [
"cl-lib"
],
- "commit": "e0c302872de4d26a9c1614fac8d6b94112b96307",
- "sha256": "1midf8yib70k6kh50a2r7g9xri2jvvglz4rchjw89wl2zqyl1p91"
+ "commit": "41d0e7f5ef51109c682016baa6fc6846e03e8517",
+ "sha256": "16y7cdjkg1q1lr1svd0g43sqlplj67yacdfbmax4iw7fv91iac66"
},
"stable": {
"version": [
@@ -70794,15 +71486,15 @@
"stable": {
"version": [
0,
- 4,
+ 3,
0
],
"deps": [
"dash",
"s"
],
- "commit": "5b514ad23834b7a584b184125ba4a66bc3c26cff",
- "sha256": "0j99rax3n905ya0ya42093pl8q7kcb8xx2qz6b918f7d8q0mr44n"
+ "commit": "623994bb50d845de487c100f5cd393ce1d792460",
+ "sha256": "1aza1p747i6bz2xg2vz63isbnh8agkdffsd7mdxb9xdfnn9cik6f"
}
},
{
@@ -71056,11 +71748,11 @@
"repo": "iwahbe/jsonian",
"unstable": {
"version": [
- 20250507,
- 1231
+ 20260612,
+ 2214
],
- "commit": "513219ebb3ccdefc915715e4bf2dd6e718fabccd",
- "sha256": "0liyv5lgx8lp7gkkljr7crich03w6w07i0jx1qifpxpq4rxmwpi0"
+ "commit": "2709fb0140c92eb183c849fdc530fd59f4e4fd3d",
+ "sha256": "1alqaynlrwqnakq2x03xh66jbh7365rsbdnip39xwxwfjnkblj0g"
},
"stable": {
"version": [
@@ -71246,11 +71938,11 @@
"repo": "JuliaEditorSupport/julia-emacs",
"unstable": {
"version": [
- 20260204,
- 807
+ 20260529,
+ 1424
],
- "commit": "aadf29523a120c666939cd7adac4b7dece5bd6ef",
- "sha256": "0kw79pz3l40d533hhrrw21hskayr38nffnp0cnwjq0zv9fvxwin1"
+ "commit": "1b5a4c2f5b7c3f842785985bf8778b8805cc6766",
+ "sha256": "00by1x900gzg42lwzd59awhsl5z73pna4cmzjpp2dflwvddy7vn6"
},
"stable": {
"version": [
@@ -71317,8 +72009,8 @@
"repo": "gcv/julia-snail",
"unstable": {
"version": [
- 20260403,
- 453
+ 20260713,
+ 1343
],
"deps": [
"dash",
@@ -71327,8 +72019,8 @@
"s",
"spinner"
],
- "commit": "3c0beddcd21464d52e95e65ee8b3d7b3a148d83d",
- "sha256": "1p00j4lh9nhkim0lg1f0swvv5lsn54w9qk1g2pjxldrfsad7bqwg"
+ "commit": "6c545d67e93590d1155b60e79384481438cb7527",
+ "sha256": "0n9isijm9x3ansmvg4m81kd4vzrzs8xlyn6n6qia622csqjfxbw1"
},
"stable": {
"version": [
@@ -71355,14 +72047,14 @@
"repo": "JuliaEditorSupport/julia-ts-mode",
"unstable": {
"version": [
- 20250115,
- 1449
+ 20260616,
+ 1624
],
"deps": [
"julia-mode"
],
- "commit": "d693c6b35d3aed986b2700a3b5f910de12d6c53c",
- "sha256": "0jg59d6q4lab2p5d2f8yp95xpbqkc614ayl137mv14l5apgayvbc"
+ "commit": "d53fb5b2c7e83223dcd8c7ae6bd5e1abf18665f6",
+ "sha256": "16iss4q0arlggwdgqjjwj8flywk6h53ylzf5m1ig1jxkl8vqpiby"
},
"stable": {
"version": [
@@ -71600,10 +72292,10 @@
"version": [
0,
1,
- 8
+ 9
],
- "commit": "d7f52eab8fa3828106f80acb1e2176e5877b7191",
- "sha256": "103jwkmg3dphmr885rpbxjp3x8xw45c0zbcvwarkv4bjhph8y4vh"
+ "commit": "b6173c7bf4d8d28e0dbd80fa41b9c75626885b4e",
+ "sha256": "1czf779akdcx72ma7x9v70kjbic73312fi1czbzvlvxr01pjpyj0"
}
},
{
@@ -71619,6 +72311,15 @@
],
"commit": "94f788eccb13cd3ade827af5612ffe3cad5fddf0",
"sha256": "0rzgj007bjjlrgknhsdpk7vfhqpp9r1yxkhsj2a4ijg3rxw9s802"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 1,
+ 9
+ ],
+ "commit": "9dd136bc809de85fa66a4665312eb0f55b1c8094",
+ "sha256": "0gmimdy2isfmyf622926y3w0a0fxm1q98ry0lbqjjvhfq9i2h3mc"
}
},
{
@@ -71629,8 +72330,8 @@
"repo": "psibi/justl.el",
"unstable": {
"version": [
- 20260228,
- 1147
+ 20260513,
+ 850
],
"deps": [
"f",
@@ -71638,8 +72339,8 @@
"s",
"transient"
],
- "commit": "4a149c0ad91f60c4d4338e7aa0676ad792a52eca",
- "sha256": "01wg76330lcff8bd83ym65yhbbwp48yrr2crafn2bdlncgd4whqy"
+ "commit": "2b6e5f8d2d16e7c535553dcb9c496f8bd1bb827e",
+ "sha256": "01fqxpkyv1l1hqmsjc50g65cdq5fd3wx9id3qgzng9f7vc2dmfh9"
},
"stable": {
"version": [
@@ -71694,11 +72395,11 @@
"repo": "joshbax189/jwt-el",
"unstable": {
"version": [
- 20251022,
- 2118
+ 20260514,
+ 2219
],
- "commit": "d6754f8fab6ff4041a7bece1963495e99ad9fe68",
- "sha256": "0crqy2r2bx03f2z7pg1h2qm7csx3ncxqbya4bz976ssq0p7mljnv"
+ "commit": "83bcef37c311645a07c0263007c5b962ca3dab15",
+ "sha256": "0kawf3f59cizq730dyh7avkb774lw773vb7wvqjnygjqky8kqirj"
},
"stable": {
"version": [
@@ -71998,11 +72699,11 @@
"repo": "Fabiokleis/kanagawa-emacs",
"unstable": {
"version": [
- 20260413,
- 1643
+ 20260625,
+ 2142
],
- "commit": "c0ec6694a6574ad2d54ca671de2093c81b54888a",
- "sha256": "1bk7x77a11nlnfl0z40bvyi0c86vyfncjrk1dggs79qw9bnx04i2"
+ "commit": "fe06241196bf9c77df751cfd74a984b5d8a45ba4",
+ "sha256": "0g4mr3y69zdi9hvw7d3mv7k2jz7a5xggyyh4sarwibwgxckbkfrp"
}
},
{
@@ -72077,28 +72778,28 @@
"repo": "ogdenwebb/emacs-kaolin-themes",
"unstable": {
"version": [
- 20260114,
- 2021
+ 20260619,
+ 2211
],
"deps": [
"autothemer",
"cl-lib"
],
- "commit": "fc0337582f36167b74cbdc86a48471092c8f3262",
- "sha256": "1lbqvs2jqvs6x8gj7bali24mw2fl6gk184zln6avy6wmam7n8dqi"
+ "commit": "432c6672b16e867ec40eaf312d2fbbeb38673fa9",
+ "sha256": "0jsxmi4l2kjpfgfbacixcbxdr1sz45qj5y2hz447fca8y9875p9y"
},
"stable": {
"version": [
1,
7,
- 4
+ 7
],
"deps": [
"autothemer",
"cl-lib"
],
- "commit": "fc0337582f36167b74cbdc86a48471092c8f3262",
- "sha256": "1lbqvs2jqvs6x8gj7bali24mw2fl6gk184zln6avy6wmam7n8dqi"
+ "commit": "8dc98bd1a63aa35e44ff8b3fd1be6d6afd4e2301",
+ "sha256": "1133gw5fnfj5plg4ny2lkhzsqsd6624fbnfh822p9dqxfmfckb1z"
}
},
{
@@ -72109,11 +72810,11 @@
"repo": "gicrisf/kaomel",
"unstable": {
"version": [
- 20250923,
- 1958
+ 20260615,
+ 1304
],
- "commit": "9476f16a72e61f08f403cb4dbe860e39f1856c7a",
- "sha256": "04k36fjd165isbbb5vz0nl945k0b73z62hs271ivp74z6f8nfafg"
+ "commit": "652b31cc8437d87b65e618af9428229182ea595c",
+ "sha256": "1na4jn2w147sl3qq4jxnfz98qv5cfydrhvdny7pd3z4mlj9w5f3f"
},
"stable": {
"version": [
@@ -72300,11 +73001,11 @@
"repo": "conao3/keg.el",
"unstable": {
"version": [
- 20240713,
- 1007
+ 20260527,
+ 831
],
- "commit": "e1726f89dab1811a110eebb3f3e4b673742faf05",
- "sha256": "02wwr40jxny9w0xnjwi4n40hn5jmdkkzng4rml846hw4ih1vxc0k"
+ "commit": "91030f36115ce50c4f812b95b169aeaffdd0e042",
+ "sha256": "1jlwd71ba6ahcbl1dydhx63c5wxsh4kdml1jjs9zc75sd18j69k4"
}
},
{
@@ -72532,26 +73233,28 @@
"repo": "tarsius/keycast",
"unstable": {
"version": [
- 20260101,
- 1835
+ 20260601,
+ 1510
],
"deps": [
- "compat"
+ "compat",
+ "cond-let"
],
- "commit": "b831e380c4deb1d51ce5db0a965b96427aec52e4",
- "sha256": "1bn30n0b0wsvzhpa4qsghh5acb82r07sw82xjwjqq26kckfisvkx"
+ "commit": "a6518e1b48b08ba883e9b1a2db0872d5bf3d85f4",
+ "sha256": "1q4mfxy0022hw07nh2rqii1wkmk5za5hx5jdaqmb7xkj5z12cxj3"
},
"stable": {
"version": [
1,
4,
- 7
+ 8
],
"deps": [
- "compat"
+ "compat",
+ "cond-let"
],
- "commit": "b831e380c4deb1d51ce5db0a965b96427aec52e4",
- "sha256": "1bn30n0b0wsvzhpa4qsghh5acb82r07sw82xjwjqq26kckfisvkx"
+ "commit": "a6518e1b48b08ba883e9b1a2db0872d5bf3d85f4",
+ "sha256": "1q4mfxy0022hw07nh2rqii1wkmk5za5hx5jdaqmb7xkj5z12cxj3"
}
},
{
@@ -72629,32 +73332,34 @@
},
{
"ename": "keymap-utils",
- "commit": "c03acebf1462dea36c81d4b9ab41e2e5739be3c3",
- "sha256": "0nbcwz4nls0pva79lbx91bpzkl38g98yavwkvg2rxbhn9vjbhzs9",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "00xjczwi1f2wzjp556p94kn7b5gkvb9gmblfqx0rpk4y6akn8afw",
"fetcher": "github",
"repo": "tarsius/keymap-utils",
"unstable": {
"version": [
- 20260401,
- 1221
+ 20260601,
+ 1550
],
"deps": [
- "compat"
+ "compat",
+ "llama"
],
- "commit": "46e4aeb2801740a69f4ab5411579cc9cb2f0e786",
- "sha256": "0bgx2v23z8iq04f8d3zyga9729l7arqyv6id0qc7br9yacj5x4jc"
+ "commit": "3064e5ffe98458500c75bf7c854c45d3e60e8e90",
+ "sha256": "1a0n5k19ra3k0chsc8j74b6rcnaf3jdk0hi28f3g600h3ivccfxl"
},
"stable": {
"version": [
4,
1,
- 3
+ 4
],
"deps": [
- "compat"
+ "compat",
+ "llama"
],
- "commit": "46e4aeb2801740a69f4ab5411579cc9cb2f0e786",
- "sha256": "0bgx2v23z8iq04f8d3zyga9729l7arqyv6id0qc7br9yacj5x4jc"
+ "commit": "3064e5ffe98458500c75bf7c854c45d3e60e8e90",
+ "sha256": "1a0n5k19ra3k0chsc8j74b6rcnaf3jdk0hi28f3g600h3ivccfxl"
}
},
{
@@ -72827,20 +73532,20 @@
"repo": "hperrey/khalel",
"unstable": {
"version": [
- 20250910,
- 946
+ 20260709,
+ 655
],
- "commit": "f7cdb3246d193a518b3a4ca7381ffb6ed8087fcf",
- "sha256": "06h5272kmg0ykf0zqdy2qwhlzszqsw176l1brk04bg8xyc3a4384"
+ "commit": "3691b4545eaef5a246f020f57bd0f843cc9c84ef",
+ "sha256": "1g9cjiyajh3j175chf5lr8z857aim0h82sxnjh757cw4jz94kfzl"
},
"stable": {
"version": [
0,
1,
- 15
+ 16
],
- "commit": "f7cdb3246d193a518b3a4ca7381ffb6ed8087fcf",
- "sha256": "06h5272kmg0ykf0zqdy2qwhlzszqsw176l1brk04bg8xyc3a4384"
+ "commit": "3691b4545eaef5a246f020f57bd0f843cc9c84ef",
+ "sha256": "1g9cjiyajh3j175chf5lr8z857aim0h82sxnjh757cw4jz94kfzl"
}
},
{
@@ -73032,20 +73737,20 @@
"repo": "jamescherti/kirigami.el",
"unstable": {
"version": [
- 20260416,
- 1901
+ 20260613,
+ 1820
],
- "commit": "5236f011f420465c2abd853e7f16727c0c8eab7d",
- "sha256": "1awvliza7fva0a74lf6xqx7gzfbby5kr7z4ki818yd98z4x1rqxf"
+ "commit": "948cccf6499415005a43112e5daadc6ecc57fa1c",
+ "sha256": "0203slgl1wal7x6hygwc2hkkm92i95cq6n0abgc0x8bnkkm7n0v5"
},
"stable": {
"version": [
1,
- 0,
+ 1,
5
],
- "commit": "7038a9dcfa7e2d8848817508777d8ad878756cfb",
- "sha256": "1j6l2nm5jv96636sz9w9yf32vcmkc5n9zylh6k1vf5gidgwlgxni"
+ "commit": "77e967baf830aa411404ed695826f0b589bdc28a",
+ "sha256": "03ql2x4npkw60mjvfn83gnp6dbshf6ikhj7558mwdk8qi695q2fc"
}
},
{
@@ -73166,14 +73871,14 @@
"repo": "benotn/kkp",
"unstable": {
"version": [
- 20260306,
- 1633
+ 20260706,
+ 858
],
"deps": [
"compat"
],
- "commit": "73957230ffdd3dedf16f4436f61471bd1365abf6",
- "sha256": "1j5igiys8asjg0v18flc7p71xjynqi7v8s06qgkac8djvjamd4lh"
+ "commit": "82b7443e10a2ba287467b62e90b6adb6dd93dc99",
+ "sha256": "10iwwd2jn2hy8m5pqpl9sdvx2m9s1pcjpfpqj8i7d6mfr9pjqy6z"
}
},
{
@@ -73184,11 +73889,11 @@
"repo": "tomenzgg/emacs-klere-theme",
"unstable": {
"version": [
- 20250517,
- 452
+ 20260526,
+ 323
],
- "commit": "377cc33617184e23acde6707beaf8938915fe093",
- "sha256": "15rgq1a6k64ws0fh864awnw22qzpb58z5s2gj2cp1svw4yakr84w"
+ "commit": "332d93b22f0359150c8dd8de710ffed09c34664f",
+ "sha256": "1x3z1j33w3pj6mhj07lgclzmf9cwgx505mn4gvlpshwlxwp6ms0w"
}
},
{
@@ -73392,11 +74097,11 @@
"repo": "bricka/emacs-kotlin-ts-mode",
"unstable": {
"version": [
- 20260326,
- 930
+ 20260512,
+ 1409
],
- "commit": "136d8d1fd3158fc5558aff866041c1935b574588",
- "sha256": "15iqvbv8i3n27yssfr47fh75ir89a6jxicp7vi8jk51a45symhnf"
+ "commit": "39e30e4cf803910c2f6716efd7a5cd408a9d996b",
+ "sha256": "1zabj07ffmi9g0vv74xkrwim7dwx3hsirr9abaxh6acwykp2ma6d"
}
},
{
@@ -73552,8 +74257,8 @@
"repo": "abrochard/kubel",
"unstable": {
"version": [
- 20260423,
- 1353
+ 20260508,
+ 2043
],
"deps": [
"dash",
@@ -73561,8 +74266,8 @@
"transient",
"yaml-mode"
],
- "commit": "b6581c657830c21a58aba5df5239cf7ece44f1c9",
- "sha256": "03qrdr0gf5a560ywwjj1xwq9xh19v1rliwjjdklhcq6qacaxvq0k"
+ "commit": "f2d64227c6d2ce0a3a9023345b230b5b2b30d147",
+ "sha256": "0sij8hi8h92ryp6vphs4hpqvw5r19k5q7cr0r6aifqfk4di61j7q"
},
"stable": {
"version": [
@@ -73773,6 +74478,36 @@
"sha256": "14n6mg9ph8a3gmglj9gnapwh0zc6mn400a0nh961d5y8i8qqc1y6"
}
},
+ {
+ "ename": "kusanagi-theme",
+ "commit": "537d8f60b711bf9ac5523e61c5da7b857765523d",
+ "sha256": "1rc44skay54jhhlqcf75qqxw51ymsjjrf50ml29s9iyq7klv9zgp",
+ "fetcher": "github",
+ "repo": "LionyxML/kusanagi-theme",
+ "unstable": {
+ "version": [
+ 20260629,
+ 307
+ ],
+ "deps": [
+ "modus-themes"
+ ],
+ "commit": "9bc24e173addb206a583fcd23086d79cd3e6c360",
+ "sha256": "18xk63g63kxn7qxakjjmrpjvy6f63mjhk6z4an2wzp0011yrkxq4"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 1,
+ 0
+ ],
+ "deps": [
+ "modus-themes"
+ ],
+ "commit": "9bc24e173addb206a583fcd23086d79cd3e6c360",
+ "sha256": "18xk63g63kxn7qxakjjmrpjvy6f63mjhk6z4an2wzp0011yrkxq4"
+ }
+ },
{
"ename": "kv",
"commit": "ad320d60e2c95881f31628c19ad3b9ece7e3d165",
@@ -73843,8 +74578,8 @@
"repo": "isamert/lab.el",
"unstable": {
"version": [
- 20260419,
- 1535
+ 20260715,
+ 1437
],
"deps": [
"async-await",
@@ -73854,13 +74589,13 @@
"request",
"s"
],
- "commit": "b91086760688328e032af454c1ca3ae5061356dc",
- "sha256": "003pm093zrx6qv2sa959sws74a4h0w8g2mcyjyqsvm0xxjshzifw"
+ "commit": "6a23522b5d451234d5f799caaef385bab7ff7df2",
+ "sha256": "0ki2w7p3wq5prb9aidg2qni5807rvjimrgy907cn338i9kpaiw8j"
},
"stable": {
"version": [
3,
- 7,
+ 8,
0
],
"deps": [
@@ -73871,8 +74606,8 @@
"request",
"s"
],
- "commit": "aa3af6f8e2eb16edac2b680ecddf4823f94287de",
- "sha256": "12xb18ssn5zf9gy2px2x6mnbjh9bny1rf7kldlvv84s86iiqzxpl"
+ "commit": "2be6e50e75b4372337b77d0ae5563cb8cd671352",
+ "sha256": "1d0q7ssm9ynhd1da34by6a5zwbyzq20x8bqky9hf0fk28m9xpjjh"
}
},
{
@@ -73961,16 +74696,16 @@
"repo": "Deducteam/lambdapi",
"unstable": {
"version": [
- 20260423,
- 1057
+ 20260701,
+ 916
],
"deps": [
"eglot",
"highlight",
"math-symbol-lists"
],
- "commit": "fbbe050639dfe7c1c1f2be2e6807dd31e3108e5e",
- "sha256": "11jpn7w0iy4vp555hsc425ipjzsv0ajhph1ih5ajqkn2lxd46b8v"
+ "commit": "d4fcaa80d2ac820be9928e4c75a6a0ad723d2c30",
+ "sha256": "1363z64si20xa3y86vpm7dnngyyq8s388zkzc4v5cllkkicz8bav"
},
"stable": {
"version": [
@@ -74379,28 +75114,28 @@
"repo": "enricoflor/latex-table-wizard",
"unstable": {
"version": [
- 20260212,
- 2229
+ 20260504,
+ 128
],
"deps": [
"auctex",
"transient"
],
- "commit": "681c03010e38e8cb4089171be72d73e6d28cd472",
- "sha256": "1v5dwidr9gvlqdspalr1iqw7gdcyl6lyji4cl8dddj9rmyf3x8rw"
+ "commit": "0ccd242ba521ed3b323d1dc84f49febe80b2eec7",
+ "sha256": "0mf7r22n51wyrdbsb5jm1jfhcivifz6d5l029wv3p5p88mylx2ks"
},
"stable": {
"version": [
1,
- 5,
+ 6,
0
],
"deps": [
"auctex",
"transient"
],
- "commit": "b41aac096b96aeb446346c3cbd6537cc0eb1f70d",
- "sha256": "03sj7kq9xwak5mzllvgjq5ysarph55rxknn09dgdn8fs74hlifcb"
+ "commit": "0ccd242ba521ed3b323d1dc84f49febe80b2eec7",
+ "sha256": "0mf7r22n51wyrdbsb5jm1jfhcivifz6d5l029wv3p5p88mylx2ks"
}
},
{
@@ -74704,6 +75439,30 @@
"sha256": "02pyqgml6mfsj70qvingq8ff2qvfs35nb28z465mqpcgfvb8xapv"
}
},
+ {
+ "ename": "leadkey",
+ "commit": "20a81a260cec3d49dd1ebde86bf99b9bf3f3cd8e",
+ "sha256": "1s03n14nzqmp1p7shz9ym0n7p8plhc9wzlfw20krmg7xcqy91dmz",
+ "fetcher": "github",
+ "repo": "jixiuf/emacs-leadkey",
+ "unstable": {
+ "version": [
+ 20260706,
+ 257
+ ],
+ "commit": "a7bf4c8a5bfee908c5287ebe86dcbaddd2b0fb8d",
+ "sha256": "04d7l0gnjm92r9l8q7j9iqwhsk6w5n1vf494yysbjafhva49q6wg"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 2,
+ 0
+ ],
+ "commit": "61042efbbde72e096e74833eeebdcdf9599cab7c",
+ "sha256": "1z43875hnqv4xz383ahs035v41n39ycnm9r10s7qamy6sv5rvj99"
+ }
+ },
{
"ename": "leaf",
"commit": "24afe5b39979e2f17e104ae97d840645d2a5c2f1",
@@ -74736,16 +75495,16 @@
"repo": "conao3/leaf-convert.el",
"unstable": {
"version": [
- 20210816,
- 1103
+ 20260516,
+ 853
],
"deps": [
"leaf",
"leaf-keywords",
"ppp"
],
- "commit": "da86654f1021445cc42c1a5a9195f15097352209",
- "sha256": "14pvdkknbng44frlf8accpqd1bc9j99x7xjymgrdbyczbq2srv4n"
+ "commit": "37967565c023596d863d9cd45527a024c5922553",
+ "sha256": "0vfj01b37im8wqzn4rnbl9wqxgsb8pcandzmnk9d3bhb1scg3lx0"
}
},
{
@@ -74756,15 +75515,15 @@
"repo": "conao3/leaf-defaults.el",
"unstable": {
"version": [
- 20210301,
- 118
+ 20260516,
+ 827
],
"deps": [
"leaf",
"leaf-keywords"
],
- "commit": "96ce39d4f16736f1e654e24eac16a2603976c724",
- "sha256": "1z56x3wnyakilgxak2yyf6rf35072996szxfz712lmdwqs6xfqv4"
+ "commit": "238282d31d20c9b5077d7274ba9448eaaf0d44cc",
+ "sha256": "0wxzs107fp8hsbm9r2nb4chw9qvwkf72nn49ki1wwd8za205d8vj"
}
},
{
@@ -74775,14 +75534,14 @@
"repo": "conao3/leaf-keywords.el",
"unstable": {
"version": [
- 20240808,
- 2302
+ 20260516,
+ 827
],
"deps": [
"leaf"
],
- "commit": "82ec27e3441900daedeaaebca509181f964da81f",
- "sha256": "0nsa01d35z3dvvb6dnc43ii461c15pp35ji92k15x8z9nyr25wrd"
+ "commit": "36efb8c94071c0fd98b6534866297f2238b78630",
+ "sha256": "0sfrjiwrzyphmwyh2yxzgw46js7jiwrnm10hhaqkzrqalvh4i68h"
},
"stable": {
"version": [
@@ -74836,14 +75595,14 @@
"repo": "conao3/leaf-tree.el",
"unstable": {
"version": [
- 20211105,
- 19
+ 20260516,
+ 827
],
"deps": [
"imenu-list"
],
- "commit": "89c3b8842df067bba67663d309f43aa311acdccd",
- "sha256": "0him39wsl65nmml9as8gfrix707xjxwvjkwmrgxc9qfjwcxvbvsj"
+ "commit": "6c85ef64bb21ddbd64e70625dbd59b0539fac534",
+ "sha256": "1n3h5mk7j295br17nx9vfn8v6sx1683wdnyd5j8scwqc7qwgf9ds"
},
"stable": {
"version": [
@@ -74948,11 +75707,11 @@
"repo": "ledger/ledger-mode",
"unstable": {
"version": [
- 20251219,
- 2350
+ 20260709,
+ 1534
],
- "commit": "40e6a167530e21968e3ce7b8cb74e7595cb6009a",
- "sha256": "020sm0ljnbx389cspn1blz1d19w6sx4j68cp39b8hb9h9xdd4n55"
+ "commit": "f7761ab7070e8c0c1cfb97e571ba81c3377a7447",
+ "sha256": "1qb4lrp5f2p1gcfrpbh86xcwggc8ffz62rq4lj6v4klyjyk52h2y"
},
"stable": {
"version": [
@@ -75036,27 +75795,27 @@
"repo": "martianh/lem.el",
"unstable": {
"version": [
- 20250806,
- 924
+ 20260509,
+ 758
],
"deps": [
"fedi",
"markdown-mode"
],
- "commit": "a0f4fa89fe73dfe7412f5d25d6e0619abf8cff14",
- "sha256": "181cibmv6da4rjr6p3nqpza6i7v4scc4qndznhyjb9nhbf3gsil4"
+ "commit": "3abd1604c3ab9451dcbc087099c499e6dc8882d7",
+ "sha256": "1h28bwy0nd08lxvpqdxqcbg0n2j09ilb7rf3nj6csflz64nhg40x"
},
"stable": {
"version": [
0,
- 24
+ 25
],
"deps": [
"fedi",
"markdown-mode"
],
- "commit": "a0f4fa89fe73dfe7412f5d25d6e0619abf8cff14",
- "sha256": "181cibmv6da4rjr6p3nqpza6i7v4scc4qndznhyjb9nhbf3gsil4"
+ "commit": "3abd1604c3ab9451dcbc087099c499e6dc8882d7",
+ "sha256": "1h28bwy0nd08lxvpqdxqcbg0n2j09ilb7rf3nj6csflz64nhg40x"
}
},
{
@@ -75322,15 +76081,15 @@
"repo": "alhassy/lf",
"unstable": {
"version": [
- 20210808,
- 1921
+ 20260502,
+ 1103
],
"deps": [
"dash",
"s"
],
- "commit": "35db92ca765a0544721fdeea036d77b7d192d083",
- "sha256": "0c22347dfrjdrn0cn4bqqsw8gd1663hkgycxkfivpyg0d734g5nq"
+ "commit": "dbe5a7c66c51d1a3036eb33d13c0a0a399349dda",
+ "sha256": "0ljr174ni05mbp2b169d96qkik2kzpqr4rqp5px9v0rs22v0g50g"
}
},
{
@@ -75434,26 +76193,27 @@
},
{
"ename": "liberime",
- "commit": "0ccac33c02762314d997156df4627c0c4a0279c6",
- "sha256": "0i95vjn4rw7n4f83nrxjkmilzalgmjlmyhsvwfm4n1rqfqdwkl5h",
+ "commit": "41d8e39c6f7bdade9b13c27ee1290dad21b4877f",
+ "sha256": "0vwmfr0lk7fmxfg7bdi6kcsaaz5hvv4rvfzdkv7klpvp89dvjvzz",
"fetcher": "github",
- "repo": "merrickluo/liberime",
+ "repo": "emacs-rime/liberime",
"unstable": {
"version": [
- 20260427,
- 303
+ 20260715,
+ 958
],
- "commit": "2130baba8e5e15922650bc01de95a1d6c6a1c1f7",
- "sha256": "0zr0hk11xani4pn0yv2xlpfwargv33q610w0yw6ac1r91bn9r9z9"
+ "commit": "64db15eca098f3d3942e9f83422e12711dbe2ecb",
+ "sha256": "1nhrxh3wawgxjky2zklkc8qnwjrxxzhsl47lv4yk7wa67k4667nb"
},
"stable": {
"version": [
0,
0,
- 9
+ 10,
+ 1
],
- "commit": "2130baba8e5e15922650bc01de95a1d6c6a1c1f7",
- "sha256": "0zr0hk11xani4pn0yv2xlpfwargv33q610w0yw6ac1r91bn9r9z9"
+ "commit": "8e52f3128e553a9b0cf270ead5c8cca4de2dd0d8",
+ "sha256": "0mq106yppl9kkqfyvbxma4d9k88bqpvwk6b6lcyr8kmkd2bd6n8f"
}
},
{
@@ -75616,19 +76376,19 @@
"repo": "tmythicator/lichess.el",
"unstable": {
"version": [
- 20260203,
- 1027
+ 20260710,
+ 914
],
- "commit": "1dd8a25ede7144c5d6be1f45f4ae3d07903783cd",
- "sha256": "157l4crbz37x367m69sxwvnd1pd8cqa6w0lcvyyvs27cm021d2gr"
+ "commit": "572a6a353e2113c8a95564b9bea1f2896e6d3dab",
+ "sha256": "1d87qjmdpizggkrzq39i9vqgvbpjf5mv97vm7zy28ksbqxmfasqa"
},
"stable": {
"version": [
- 0,
- 8
+ 1,
+ 0
],
- "commit": "1dd8a25ede7144c5d6be1f45f4ae3d07903783cd",
- "sha256": "157l4crbz37x367m69sxwvnd1pd8cqa6w0lcvyyvs27cm021d2gr"
+ "commit": "572a6a353e2113c8a95564b9bea1f2896e6d3dab",
+ "sha256": "1d87qjmdpizggkrzq39i9vqgvbpjf5mv97vm7zy28ksbqxmfasqa"
}
},
{
@@ -75663,11 +76423,19 @@
"repo": "mickeynp/ligature.el",
"unstable": {
"version": [
- 20220808,
- 1225
+ 20260714,
+ 655
],
- "commit": "89cbd67a815f61e5001f19d64d6ec1771e867742",
- "sha256": "106p73km11kzins0bx01n6ypz8if20g56ljx0dnnq0fi6hsn87d7"
+ "commit": "5ef919d3e3e2cf2c4622cbea28e429b29e86fc97",
+ "sha256": "1pjq8bka1ppfvijhlv55bzk3rf0xdm10jy4sfslzb4094lvdd3w1"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 0
+ ],
+ "commit": "b732c7c57d06bda30d31fa6b52758a94490d0710",
+ "sha256": "0c3wgcgvk0wxk3dwgpl7y7w0y14z68qkcck099x42qsxix57amjw"
}
},
{
@@ -75887,11 +76655,11 @@
"repo": "Judafa/linkin-org",
"unstable": {
"version": [
- 20260313,
- 2013
+ 20260617,
+ 2114
],
- "commit": "daab39c4e3dc5d77c55630e26f8b0339ae218dd1",
- "sha256": "0iy6vipdf74ggz14brnj3hljq75kj2dfg49vlv0p85x0a5aacv1y"
+ "commit": "51d7c2c2689c0cfd48f91986d36ffdabea57369f",
+ "sha256": "02ym261g4y8k98b4f78fbjb9alk844h8p3snck4q4n7f6371w6sl"
}
},
{
@@ -75902,11 +76670,11 @@
"repo": "erickgnavar/linkode.el",
"unstable": {
"version": [
- 20240604,
- 53
+ 20260605,
+ 352
],
- "commit": "5152aa3ba7a4360133efd5892f0891837af30440",
- "sha256": "0c9ly7lf1ydn3zjqn265vkjq4n4qn3xvr4lhs66gh2krk8qrm9cm"
+ "commit": "8bfb80ca046bc0c942a14effef354722ad8a8a6c",
+ "sha256": "151115q9c1l87c4kv60nv4py0h121wrxr5xs2asibh9p3773zx3m"
}
},
{
@@ -76011,17 +76779,17 @@
},
{
"ename": "lirve",
- "commit": "67708cb34ff0000d571b732792e7d7d82bd4084a",
- "sha256": "160k3kpc0ldxzbqhnvd71jmslwjnbh8cmy474d07ccqjcsn8mkb0",
- "fetcher": "github",
- "repo": "tanrax/lirve.el",
+ "commit": "1d1a6da1f377c3b1b4a33cbc6e1183689d74cc77",
+ "sha256": "1vgq6svl2i316qbdsigwsr5mvmgzgjdmn92ksmzacl7x4mx3fh58",
+ "fetcher": "git",
+ "url": "https://git.andros.dev/andros/lirve.el",
"unstable": {
"version": [
- 20240419,
- 1918
+ 20260708,
+ 1737
],
- "commit": "ff3031fa82d854411da40a32c6191d201b4abf09",
- "sha256": "1m4bg931w83vyhrpgsmdyl6hkknnd99mmvj34g0drhb9170sx0kb"
+ "commit": "b8dfa92eb51bde15c269dede50342f0b94240a49",
+ "sha256": "1pwhbkdz6w0b40jwgr68w8mdx8wjfdmgdvfnxssfrjc1829brbkp"
}
},
{
@@ -76071,26 +76839,26 @@
"repo": "ryukinix/lisp-chat",
"unstable": {
"version": [
- 20260323,
- 206
+ 20260425,
+ 1217
],
"deps": [
"websocket"
],
- "commit": "cff980c915db1e47d3090c212050b7598d15daca",
- "sha256": "02fiyky63z4zr6x4xyf72d457f4x8fqraax3lk13zwjlxv1nn2xd"
+ "commit": "066f2a5d4ca2ff50f6a0a1413182e08f17040e3a",
+ "sha256": "0qqnn5pb7qghn3ryrixjzgb9vabgm96n10l189j9izr5zfzg194f"
},
"stable": {
"version": [
0,
9,
- 0
+ 1
],
"deps": [
"websocket"
],
- "commit": "cff980c915db1e47d3090c212050b7598d15daca",
- "sha256": "02fiyky63z4zr6x4xyf72d457f4x8fqraax3lk13zwjlxv1nn2xd"
+ "commit": "066f2a5d4ca2ff50f6a0a1413182e08f17040e3a",
+ "sha256": "0qqnn5pb7qghn3ryrixjzgb9vabgm96n10l189j9izr5zfzg194f"
}
},
{
@@ -76368,14 +77136,14 @@
"repo": "zzkt/metabrainz",
"unstable": {
"version": [
- 20230530,
- 741
+ 20260603,
+ 1009
],
"deps": [
"request"
],
- "commit": "2386189ec8a19a74d7b8a46e08a9fa6d974a6305",
- "sha256": "0lkqgjzp5lwjv1j6jjal4nsps3cxdg1nc2rr83v5a3gylsy0x69w"
+ "commit": "abd37d9f1c25a021b32eac54e6deff6080a66bca",
+ "sha256": "1kri05wx2r88pbh7pvwkcz4csi8g5qn1bjb31nbda6vs39db8l6m"
}
},
{
@@ -76578,11 +77346,11 @@
"repo": "jingtaozf/literate-elisp",
"unstable": {
"version": [
- 20250103,
- 132
+ 20260621,
+ 1253
],
- "commit": "c559eff46dd7fe0ffc4ad7bf6dd65ee5be516368",
- "sha256": "1h8j16hqhncbfa6nf046qfzhplzqql9i2jjwx1kmqnyxfcvv1zs6"
+ "commit": "6cbe22aab87886cf61c4866653e24ebdb88b1523",
+ "sha256": "0xaz583wvk6510027kp73p7swkdi8z7929k8p0jmpav2x5n1207d"
},
"stable": {
"version": [
@@ -76828,26 +77596,26 @@
"repo": "tarsius/llama",
"unstable": {
"version": [
- 20260301,
- 1253
+ 20260601,
+ 1455
],
"deps": [
"compat"
],
- "commit": "d430d48e0b5afd2a34b5531f103dcb110c3539c4",
- "sha256": "07rjfjk01gd4jqk38wc0a2vrsk15p8sx0varqbhjdyns7w2xs1d7"
+ "commit": "4d4024048053b898a01521046e0f063ee47615b0",
+ "sha256": "1qya4drpfnr25lgpagxzi22llrvs9ysqgfhs3093ly2k4pi28nvk"
},
"stable": {
"version": [
1,
0,
- 4
+ 5
],
"deps": [
"compat"
],
- "commit": "d430d48e0b5afd2a34b5531f103dcb110c3539c4",
- "sha256": "07rjfjk01gd4jqk38wc0a2vrsk15p8sx0varqbhjdyns7w2xs1d7"
+ "commit": "4d4024048053b898a01521046e0f063ee47615b0",
+ "sha256": "1qya4drpfnr25lgpagxzi22llrvs9ysqgfhs3093ly2k4pi28nvk"
}
},
{
@@ -77006,15 +77774,15 @@
"repo": "tanrax/lobsters.el",
"unstable": {
"version": [
- 20251217,
- 1458
+ 20260623,
+ 735
],
"deps": [
"request",
"visual-fill-column"
],
- "commit": "58f91e5adc9660a54a3f6eb1cd49fbbeb2229b74",
- "sha256": "19nik1vaazf0w43fvksshx2c1fbby0fyafn2859jbdmvxwb5imw7"
+ "commit": "41ca67e5827793e91834bf03cdefab581783c3d5",
+ "sha256": "01pxdzk0xaqqkc17zp3x2d4s8sm212z217kvzlwj697afh1vndy4"
},
"stable": {
"version": [
@@ -77468,11 +78236,11 @@
"repo": "petermao/look-mode",
"unstable": {
"version": [
- 20250511,
- 602
+ 20260712,
+ 530
],
- "commit": "6d82a013ede5f9ef5493801c3071bad5f6b283bb",
- "sha256": "1hbhvj2z41sdb03srm9q88pl5f7dzvgif9y5p7sw45gpz1bmnhmf"
+ "commit": "9102caebfb266e8153e14f7462dddfcfa8ba54dd",
+ "sha256": "1vm8s0al1ydkbfgqqjjzzgfhkkws621304pr3bfllwffkn3gddz3"
}
},
{
@@ -77524,14 +78292,14 @@
},
{
"ename": "loopy",
- "commit": "f43d9c8c9862f4f008af6206467c58ae4edfc4a8",
- "sha256": "0zrib0gvzk3rnvskpwi5d3v4624lf4z7l8kg4dg944v0x5qgy8iy",
- "fetcher": "github",
+ "commit": "c078f84e004b187ed96523ce62ef4f7fd18aea67",
+ "sha256": "0ms91lw7h349z8qh0g3vddiqy3svmx10bnrhpj64yca1fy6lmr74",
+ "fetcher": "codeberg",
"repo": "okamsn/loopy",
"unstable": {
"version": [
- 20260309,
- 304
+ 20260704,
+ 1904
],
"deps": [
"compat",
@@ -77539,14 +78307,14 @@
"seq",
"stream"
],
- "commit": "b78b88173df00cf95cda401a6d3b0872dce8aa08",
- "sha256": "156r43kpfk2kdkgj7m6pk4pql4y9vsj5igwni00dzr437y74sb2p"
+ "commit": "838e1f5d38281dde54efbf61142267224e78e494",
+ "sha256": "18hmdlv95kl2q04b8xrvs3jrqf9kpg7p9gp9p938z416ljzja5r0"
},
"stable": {
"version": [
0,
- 15,
- 0
+ 16,
+ 1
],
"deps": [
"compat",
@@ -77554,27 +78322,27 @@
"seq",
"stream"
],
- "commit": "1849c6c774332c6451288debd4c353449ee79a92",
- "sha256": "0qpzg7p8qiggscddbbf85av7zp7b38jjib49jrzl9skliwc0klcr"
+ "commit": "70427df284cc0a70a75c00be221fbabc433183c5",
+ "sha256": "0pjf0h3nzlbikxwqik58qwp2qgqyai6v1vx9kw7m7y43x46nv5hq"
}
},
{
"ename": "loopy-dash",
- "commit": "b51bc89476900ff52cfeeee5943ddee561bcb5dc",
- "sha256": "0gqy6z8b7iyyhbqy33n1b67v839z5711x49w097phvvm5rbwi7i2",
- "fetcher": "github",
+ "commit": "82895d2a7d7a4664d5e1dac752ac987d69011097",
+ "sha256": "00y19abkank9vkg5wjr1llfz3kgv35p3cv6jp9qan32dbbc58avh",
+ "fetcher": "codeberg",
"repo": "okamsn/loopy-dash",
"unstable": {
"version": [
- 20251226,
- 2031
+ 20260627,
+ 112
],
"deps": [
"dash",
"loopy"
],
- "commit": "d60c4f49a640541e415e5471ad26c2d8e6886888",
- "sha256": "0pwayqwyarbg26piwzxag13xbx3dzdx779c4n7crzjk4gj3d80fw"
+ "commit": "d7630105c7188a6e7bc23e66e0c1efb56e005d21",
+ "sha256": "1yh6xmzymp48s101syy8zgr9faxv76k69x8iqyhplzcwnrrra83k"
},
"stable": {
"version": [
@@ -77688,8 +78456,8 @@
"repo": "emacs-lsp/lsp-dart",
"unstable": {
"version": [
- 20260214,
- 2354
+ 20260507,
+ 1741
],
"deps": [
"dap-mode",
@@ -77701,8 +78469,8 @@
"lsp-mode",
"lsp-treemacs"
],
- "commit": "166e4f2ba12403da5691d352b587c88d24ddb574",
- "sha256": "177l32r1ns8rxq5z8qa5k5nv3v4l29zps9xn4ps196298phd253a"
+ "commit": "a0649b4dbf3eb1f1fac4be172ba282df43b16b73",
+ "sha256": "1khpnm3m90ijbrcaz2isgq7z9zs5hfh9kqn7g14wqzbzrvvijz37"
},
"stable": {
"version": [
@@ -77732,8 +78500,8 @@
"repo": "emacs-lsp/lsp-docker",
"unstable": {
"version": [
- 20250228,
- 2210
+ 20260507,
+ 1750
],
"deps": [
"dash",
@@ -77743,8 +78511,8 @@
"s",
"yaml"
],
- "commit": "3960c73349e5658220f0f48587894ac098e62b97",
- "sha256": "05sblmvj1vhk4rgfqahr0i0dnaczcixcddd88w3rsdyh72wpxdg6"
+ "commit": "f666fba72b496c7750bb3f349771b07aa51714f0",
+ "sha256": "02ihnn5rnk6l9x5wvgj0mrglyss80x47phhks6r3is1frh935xxq"
},
"stable": {
"version": [
@@ -77772,15 +78540,15 @@
"repo": "emacs-lsp/lsp-focus",
"unstable": {
"version": [
- 20250825,
- 539
+ 20260507,
+ 1747
],
"deps": [
"focus",
"lsp-mode"
],
- "commit": "4621d310e780e384cbe93d5680fa9ec5d03e2c73",
- "sha256": "09yzcfv9gpifsy5ckvmacj7fg0fz1pnnjdzghj4i28x738g7ixxb"
+ "commit": "675a20610c63577bb5363c2ed9b253705bbfee4f",
+ "sha256": "0kcy73chsrilb7clmwdmjlcdmfi6zdg6q758lnb20dicixlpjayi"
},
"stable": {
"version": [
@@ -77804,8 +78572,8 @@
"repo": "emacs-grammarly/lsp-grammarly",
"unstable": {
"version": [
- 20251231,
- 1727
+ 20260503,
+ 1232
],
"deps": [
"grammarly",
@@ -77814,8 +78582,8 @@
"request",
"s"
],
- "commit": "4c3aa9e757ff9082a4d7ff104dd5ff0f28f0b811",
- "sha256": "16ysivfk6lv8ndifxrhxya3hk3w3rv8p3bwy3ssz7g7q388n1k3v"
+ "commit": "237a8322bee1982e926610c7d228fd0bc1e3bc50",
+ "sha256": "1z8gwldm9gqkw9mwlnv6hlsqk603c3zngsf56pq5r1d89wm7j34b"
},
"stable": {
"version": [
@@ -77842,14 +78610,14 @@
"repo": "emacs-lsp/lsp-haskell",
"unstable": {
"version": [
- 20251121,
- 1710
+ 20260507,
+ 1745
],
"deps": [
"lsp-mode"
],
- "commit": "871a0ef2e98b3a749d0b69d958698000ca5640d3",
- "sha256": "0chk1nxagbf0n1xxl8namxj7z5bqhidgyp0nqynqbi8799v62aa7"
+ "commit": "4c3001aeb116fb489223269ea353359b90e2a5e1",
+ "sha256": "17wgagx29piqgss8qkfizh4ikss7dm6m9jglh9x04dyk4264c197"
}
},
{
@@ -77878,16 +78646,16 @@
"repo": "emacs-lsp/lsp-ivy",
"unstable": {
"version": [
- 20250825,
- 512
+ 20260507,
+ 1752
],
"deps": [
"dash",
"ivy",
"lsp-mode"
],
- "commit": "2927cbc776477e23d4a1062568d55793eed33c51",
- "sha256": "12l160q4wi9wc17n1r4pdmp42hwyqrmzc3xcfki6pivmqdaark45"
+ "commit": "c0930544948dfdb7bf497fc9e58aa6b4b857e237",
+ "sha256": "11mknb893ry3m99gd44ywjwjp21a02j0yg2xibc9zf2jbb16rppb"
},
"stable": {
"version": [
@@ -77911,8 +78679,8 @@
"repo": "emacs-lsp/lsp-java",
"unstable": {
"version": [
- 20260312,
- 1356
+ 20260510,
+ 647
],
"deps": [
"dap-mode",
@@ -77924,18 +78692,17 @@
"request",
"treemacs"
],
- "commit": "0a9f4d0b3ddf300bc9ca7546f5bed288bdfc8377",
- "sha256": "1rc9fy27kzgs6hdp7j9ybzmzxmcdj63jzwzsxfzlm8pqp1y8xkcb"
+ "commit": "5294db2ac033a289e4878fa8386629b75cb3ccb6",
+ "sha256": "134fw9kxwfi2glkxb7r32la3wip9y2jz8hkv0c3si1jv5p4g22zp"
},
"stable": {
"version": [
- 3,
- 1
+ 4,
+ 0
],
"deps": [
"dap-mode",
"dash",
- "dash-functional",
"f",
"ht",
"lsp-mode",
@@ -77943,8 +78710,8 @@
"request",
"treemacs"
],
- "commit": "260016236fa0520b5b6ec7f51ca2086288524cba",
- "sha256": "1h0hqgjpk5mbylma1fkva0vx45achf0k7ab2c5y8a2449niww90h"
+ "commit": "5294db2ac033a289e4878fa8386629b75cb3ccb6",
+ "sha256": "134fw9kxwfi2glkxb7r32la3wip9y2jz8hkv0c3si1jv5p4g22zp"
}
},
{
@@ -78068,14 +78835,14 @@
"repo": "emacs-languagetool/lsp-ltex",
"unstable": {
"version": [
- 20260101,
- 535
+ 20260503,
+ 1233
],
"deps": [
"lsp-mode"
],
- "commit": "6adc2b4d32a907943a6ce06e2267090241e7af6a",
- "sha256": "1rll8wa07inh39nnk7j0g8v9z4h4wfnqcff3dqq1kcnp5r5p4vpk"
+ "commit": "a7014677b10ddc1127f9e6ed4ffaf9c5ab18922c",
+ "sha256": "0k1wsik3bnrpkpyqbmbgwjmkq9wzycwn6ql13zrlspb2rjz5njvg"
},
"stable": {
"version": [
@@ -78092,6 +78859,36 @@
"sha256": "0s7xi41di8gszn0fz04lpnv610xgydfr5hylp3z1dshba2kpkk1f"
}
},
+ {
+ "ename": "lsp-ltex-plus",
+ "commit": "adbdf03557a845c56935b40a4cd7f9e1dbcf92ab",
+ "sha256": "1gcbaw9nwpz98a75v2i6jykwnay4chk65kq8cynf55xbfpzavhwp",
+ "fetcher": "github",
+ "repo": "ltex-plus/emacs-ltex-plus",
+ "unstable": {
+ "version": [
+ 20260626,
+ 618
+ ],
+ "deps": [
+ "lsp-mode"
+ ],
+ "commit": "dc617ed2a21f6453053d218601fee38d1bfd6c70",
+ "sha256": "00fnyw9s7nhkr6l4f9lv10zar13crcj5jrlq7i85py3s37xfmrbh"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 4,
+ 0
+ ],
+ "deps": [
+ "lsp-mode"
+ ],
+ "commit": "2dded9da2dbced4624ecad4ab51ee2ee62aa2cad",
+ "sha256": "1fwihxqhb4x94z36qvh45rrjg95sswwx4y952skxy2fvm0dl5fa0"
+ }
+ },
{
"ename": "lsp-metals",
"commit": "ee055cc258692a92f727633306adf7df31267479",
@@ -78100,8 +78897,8 @@
"repo": "emacs-lsp/lsp-metals",
"unstable": {
"version": [
- 20250228,
- 2145
+ 20260529,
+ 1928
],
"deps": [
"dap-mode",
@@ -78113,8 +78910,8 @@
"scala-mode",
"treemacs"
],
- "commit": "345b4fa80e31c58fd14e4c0cf9b88eb2aededcb0",
- "sha256": "0y1pkzc7symdzgh0vk5plcn2r23ai2gbnjps1cr5kjjbwqq1yz4q"
+ "commit": "afeacc7a528b80b9a9f2747428e5608c264201ec",
+ "sha256": "023yydw9lbk621pka6iavdqdm515cxi9fmbqh7flkfgq09lvj00a"
},
"stable": {
"version": [
@@ -78144,8 +78941,8 @@
"repo": "emacs-lsp/lsp-mode",
"unstable": {
"version": [
- 20260423,
- 1033
+ 20260716,
+ 755
],
"deps": [
"dash",
@@ -78156,8 +78953,8 @@
"markdown-mode",
"spinner"
],
- "commit": "74270b286a9c8f1fc56f97dc118ff010880ed3ff",
- "sha256": "13avmvbldb27pwm8a4s190601jwgzfhpzx86h2yjd6g0vjvx3lkv"
+ "commit": "6bfc593d7b1bc0dd656f09ffce52cc085ebced05",
+ "sha256": "0n48qdc9y4vq5bmxfxv2gwmv7ngawq30ai280jhdn2ilzqjw4w4d"
},
"stable": {
"version": [
@@ -78186,8 +78983,8 @@
"repo": "emacs-lsp/lsp-mssql",
"unstable": {
"version": [
- 20251117,
- 1444
+ 20260507,
+ 1743
],
"deps": [
"dash",
@@ -78196,8 +78993,8 @@
"lsp-mode",
"lsp-treemacs"
],
- "commit": "810d632bd4abc4f105681a674ebea5d09407a04e",
- "sha256": "0v3csv4qgpkh3g7vwd4fxd35adjsz5g425m8972zixinshy2csk6"
+ "commit": "02e50306c92af1c98473840169a477b22f72af2d",
+ "sha256": "1w6diyzsyf7p2kipl6yf3rjjinz3pfggf66ybhji8zc4jmdwxkgf"
}
},
{
@@ -78208,15 +79005,15 @@
"repo": "emacs-lsp/lsp-origami",
"unstable": {
"version": [
- 20250825,
- 521
+ 20260507,
+ 1743
],
"deps": [
"lsp-mode",
"origami"
],
- "commit": "b52f42b7932dd968b398e7cfd2ca29051b1a50b4",
- "sha256": "0gpvdhipwz70p6pmrsy6z1f8zbpfazmrvp5anymywm9g8gq212pr"
+ "commit": "dd398afcf8e9077231dc26ea189916e6ea64c6ab",
+ "sha256": "0grk1b9xg53qz3lmmqyj3vy5zp7wq9ifx3yjyyqcyw4fbn0j87wl"
},
"stable": {
"version": [
@@ -78276,16 +79073,16 @@
"repo": "emacs-lsp/lsp-pyright",
"unstable": {
"version": [
- 20250905,
- 136
+ 20260507,
+ 1742
],
"deps": [
"dash",
"ht",
"lsp-mode"
],
- "commit": "3756ff971797ae04fc43ca29c66ba4d854eff038",
- "sha256": "0pd9g8asags5sqj8h77r9k6yn0xj8da4604zva0vqj5plzq81ral"
+ "commit": "187e08caee4e1630a9975f492274c739f325392f",
+ "sha256": "0n2nx5xms6jpngkrvjsbamhd5fid5i6yqaravw3s5bl5km6ljddy"
},
"stable": {
"version": [
@@ -78391,14 +79188,14 @@
"repo": "shader-ls/lsp-shader",
"unstable": {
"version": [
- 20251231,
- 1653
+ 20260503,
+ 1236
],
"deps": [
"lsp-mode"
],
- "commit": "f8772e749d212adf95b901c3c94c9c96f9da3707",
- "sha256": "09j7i051qp6qi28sn52wzxqcl5sg7433a1q7f1qm3lsgdyq8zw7c"
+ "commit": "85430cd7d20019aa39e624990fd814650af9b3a2",
+ "sha256": "07kvykysqpkq7n5zqy7s3l52a9scyf4nfrfm16f686mgvv0amj5d"
},
"stable": {
"version": [
@@ -78421,16 +79218,16 @@
"repo": "emacs-lsp/lsp-sonarlint",
"unstable": {
"version": [
- 20250301,
- 131
+ 20260507,
+ 1751
],
"deps": [
"dash",
"ht",
"lsp-mode"
],
- "commit": "f9c61eafce62edf15f05d7262290ea87f2beb60d",
- "sha256": "0v8jvgy5y0s0nyiga4p2xmfdjzkhl29y6kl12kw6zfz82r3y4smv"
+ "commit": "91794c7663fc24afd8d93a74e775793de8f2f811",
+ "sha256": "0rbb9gfkz4lizwq81xwfvdq8pfv1d0536c73zff9ik1c14ahqa6n"
},
"stable": {
"version": [
@@ -78455,44 +79252,14 @@
"repo": "emacs-lsp/lsp-sourcekit",
"unstable": {
"version": [
- 20250825,
- 538
+ 20260507,
+ 1745
],
"deps": [
"lsp-mode"
],
- "commit": "30918cd1aeeda5cfbc0fd615f97cf1bf388d8f2d",
- "sha256": "1d5iq4rhcpa0crwi67ibzmahg6zzlwpm48dkvgbckqa8si589g88"
- }
- },
- {
- "ename": "lsp-tailwindcss",
- "commit": "c837c3b97d7e833d22a1605dcf3c2ebc35c19e0c",
- "sha256": "0cnkj1ahp48i8zx1qh0fbxf40cnv6d1i9c579kmkfmfbnvxpp080",
- "fetcher": "github",
- "repo": "merrickluo/lsp-tailwindcss",
- "unstable": {
- "version": [
- 20251009,
- 810
- ],
- "deps": [
- "f",
- "lsp-mode"
- ],
- "commit": "cdd0325a6a571e51f6c7d1cbc198c7a7ea4a194a",
- "sha256": "1a159pbq5x2w3id815ln103prdvyg8kbcmzr2r2cag8aa24hvs91"
- },
- "stable": {
- "version": [
- 0,
- 2
- ],
- "deps": [
- "lsp-mode"
- ],
- "commit": "5250c4305f2334796d65779c7b61442e17d7c69b",
- "sha256": "10xlb3gqlsx9k716mmrvpwlsdn086vr0jiqakcj2f5vixpxj1sxy"
+ "commit": "252decc7ae53170eb1c67f97ff3e7f576dd13734",
+ "sha256": "1fphyd85qjv3zx1ggrbz973s8dmsb14nqzvgg2ad5jqvp0ijgmwv"
}
},
{
@@ -78503,8 +79270,8 @@
"repo": "emacs-lsp/lsp-treemacs",
"unstable": {
"version": [
- 20251217,
- 1621
+ 20260515,
+ 746
],
"deps": [
"dash",
@@ -78513,8 +79280,8 @@
"lsp-mode",
"treemacs"
],
- "commit": "49df7292c521b4bac058985ceeaf006607b497dd",
- "sha256": "17jp3xfi1xxqn8amqx279pns3r25xhx789bjlqmj2apm338wm6z2"
+ "commit": "3519ac907ea391e18d9599375b116aeeb6f8a38a",
+ "sha256": "0bwdbzc9h4zypmspvw14fksbzkr6z87x42rnmynv28hrwy7r5ayd"
},
"stable": {
"version": [
@@ -78540,16 +79307,16 @@
"repo": "emacs-lsp/lsp-ui",
"unstable": {
"version": [
- 20260104,
- 1525
+ 20260512,
+ 1516
],
"deps": [
"dash",
"lsp-mode",
"markdown-mode"
],
- "commit": "ff349658ed69086bd18c336c8a071ba15f7fd574",
- "sha256": "1gkqd9lqb1f6xxl6zf00lc8a14khsqjkjm4mx3253fagd6m242li"
+ "commit": "8d888a3ab1ba9e46bd4711398c57d39d0b709a45",
+ "sha256": "0hqjp55049bmjzxwv3bxks5rr8j91372aj11dsfmmi9r0y5l9wwl"
},
"stable": {
"version": [
@@ -78892,6 +79659,30 @@
"sha256": "1sx76i59razwccvn6x7rx5a124bfyjw9fcbxf4gj7nsg33qiq809"
}
},
+ {
+ "ename": "mac-ime",
+ "commit": "3bf8f44390c988a00ec38963aca6cf3d87fc4132",
+ "sha256": "05l2s58h16z7spyxqkkpn5n8hasks5g0cxxv12wms490nxmwmg2z",
+ "fetcher": "github",
+ "repo": "ma0001/mac-ime",
+ "unstable": {
+ "version": [
+ 20260605,
+ 1210
+ ],
+ "commit": "0a8f40c6ad8d02f9b99e3eaa5a68e625b87e7f30",
+ "sha256": "0db1sg51z7n7skigsz329fzrb5q2jh4lgslb98b5kk9y8p0lkirs"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 2,
+ 2
+ ],
+ "commit": "0a8f40c6ad8d02f9b99e3eaa5a68e625b87e7f30",
+ "sha256": "0db1sg51z7n7skigsz329fzrb5q2jh4lgslb98b5kk9y8p0lkirs"
+ }
+ },
{
"ename": "mac-pseudo-daemon",
"commit": "6104efc035bcf469d133ab9a2caf42c9d4482334",
@@ -78967,14 +79758,14 @@
"repo": "kmontag/macher",
"unstable": {
"version": [
- 20260420,
- 107
+ 20260718,
+ 1815
],
"deps": [
"gptel"
],
- "commit": "2a4d2ce81076134c7521bfd3a345c5440c440c2f",
- "sha256": "130i2qzqb9p1k6qznciab2n8m1911pm5yqv13x0fdhfd8nyj4hkj"
+ "commit": "b6e51cb9a01c87e36d8920d947ed171bf21c8287",
+ "sha256": "1wxa7zkwj9c8h6qq61wr36c54fq8kabhp47ij6d7b659cc9bhwbz"
},
"stable": {
"version": [
@@ -79204,40 +79995,40 @@
"repo": "roadrunner1776/magik",
"unstable": {
"version": [
- 20260328,
- 1014
+ 20260706,
+ 1226
],
"deps": [
"compat",
"yasnippet"
],
- "commit": "caeb52d21d5cdb2b1e3550cd95d68568479d0dbb",
- "sha256": "0f3wdjzr7g2ym5m8dpd6srg1ggwffssm5f6rbdpdkdf4424f3jmf"
+ "commit": "ed8e8dce0e7bb552beda9649790b8ff9a6e1ae3b",
+ "sha256": "0pij6wn1m1pvdg16plls6z64jhffq95clwsdkci1gzall0ddm7dj"
},
"stable": {
"version": [
0,
- 5,
+ 6,
5
],
"deps": [
"compat",
"yasnippet"
],
- "commit": "0ccfffef530802698447ce4f549477e724ab8710",
- "sha256": "0vfjbf4vm4r2cc0bd3yc5rw6mn8c5169nirw0ixrzp6w70h0b903"
+ "commit": "95dcd634d9de45851fce911dd0fffc85822a2ecb",
+ "sha256": "07pszv4xz1j0ai19cigrmfr31qhzv1fy4a0rvz19p5pinds03lib"
}
},
{
"ename": "magit",
- "commit": "ad502b9c75d8b2cc09f5fe64dcc5b36e434129b4",
- "sha256": "1h3zqmc1jz9l8g5mfc2miihib29w69nsyg8anyfqbij1v0rdg3ln",
+ "commit": "5c4845003f7a970416c0db190987ba99369e8cb9",
+ "sha256": "1mfm8xs3acjikl66d1ra0n20v0ava72wvlwxjsh5r8813s2kjfa0",
"fetcher": "github",
"repo": "magit/magit",
"unstable": {
"version": [
- 20260422,
- 2206
+ 20260719,
+ 948
],
"deps": [
"compat",
@@ -79248,13 +80039,13 @@
"transient",
"with-editor"
],
- "commit": "569b9656d6a2c792b07d3980796c76b121c9737e",
- "sha256": "1y8q8d3lw4yq04kngnskw0yx6x96yzd09052cjx9anyqwcyhbhk8"
+ "commit": "0988e1564bbe5a08f876fa0d78eb9d587c704121",
+ "sha256": "0rnk6kd0q8wmm1n96pvd3qkc7hwkq771vs20qqpcbb9mwqg2faaw"
},
"stable": {
"version": [
4,
- 5,
+ 6,
0
],
"deps": [
@@ -79266,8 +80057,8 @@
"transient",
"with-editor"
],
- "commit": "c800f79c2061621fde847f6a53129eca0e8da728",
- "sha256": "04yxjkv5h3arcj1s0nq9kyh3l1z4c9wml35vb67jvv1h7mslwz55"
+ "commit": "b6c512597fd66abe69883a058a2d13bcea76bf33",
+ "sha256": "0pfx2rkxpfkyfwaz759q9b1yjd8vdwgf5jbrix5i1y06i54rnazr"
}
},
{
@@ -79326,14 +80117,14 @@
"repo": "ideasman42/emacs-magit-commit-mark",
"unstable": {
"version": [
- 20260105,
- 203
+ 20260511,
+ 839
],
"deps": [
"magit"
],
- "commit": "ba986f350466a68d9937d0487e9b8f75303bc465",
- "sha256": "0rhinmvpcyv17klix5bivw0ksfz4kzlwa9q6n8wkwikxpsh1m6ks"
+ "commit": "9712db3fd09fe493d2ac5644b40e9cd451877180",
+ "sha256": "09bx5l7d4ilsxx3gqrj5j3c2ivbrx5gbxaa0x8pfgg46x7zbbx1m"
}
},
{
@@ -79445,14 +80236,14 @@
"unstable": {
"version": [
20250825,
- 722
+ 811
],
"deps": [
"magit",
"transient"
],
- "commit": "37a4774c3cc401f849d57aaa2c105ca401f9983c",
- "sha256": "0pbh0w49jhvmgz6liravkn0ajdgzdapb13gpd8j6r4i6mw3n0v2a"
+ "commit": "d95d6d3febf7f9c04a4abefa3640610aae626683",
+ "sha256": "0kl05z07jjlm58fl6dpnijyl5gnx54b75cl0gbvflyv8z60y8mmz"
},
"stable": {
"version": [
@@ -79615,16 +80406,16 @@
"repo": "douo/magit-gptcommit",
"unstable": {
"version": [
- 20251206,
- 1143
+ 20260530,
+ 2339
],
"deps": [
"dash",
"llm",
"magit"
],
- "commit": "4a60438fd2a349610e571f10596f6642dfab119d",
- "sha256": "0li82bf6cmwmh7mb2bfz4m9dy6w01sn89lvsx1ywwi96vax36688"
+ "commit": "b3ac0bfad8b06b6930dc4e35e3adefb4b6646193",
+ "sha256": "1mr3xhkwwwhdcsakmhz670cn69igmgqvqfs9wkpb9918dcsw5vqj"
}
},
{
@@ -79808,10 +80599,10 @@
},
{
"ename": "magit-popup",
- "commit": "0263ca6aea7bf6eae26a637454affbda6bd106df",
- "sha256": "1pv5slspcfmi10bnnw6acpijn7vkn2h9iqww3w641v41d3p37jmv",
+ "commit": "5c4189d36ff03a8a2425d5db65e5a7eaefa09761",
+ "sha256": "0x4c21f7ir8aaxp9jra80djrj52w0c144gfhwyhdwnxq4rzwyq4b",
"fetcher": "github",
- "repo": "magit/magit-popup",
+ "repo": "emacsattic/magit-popup",
"unstable": {
"version": [
20200719,
@@ -79932,8 +80723,8 @@
"repo": "magit/magit",
"unstable": {
"version": [
- 20260422,
- 2206
+ 20260709,
+ 950
],
"deps": [
"compat",
@@ -79941,13 +80732,13 @@
"llama",
"seq"
],
- "commit": "569b9656d6a2c792b07d3980796c76b121c9737e",
- "sha256": "1y8q8d3lw4yq04kngnskw0yx6x96yzd09052cjx9anyqwcyhbhk8"
+ "commit": "cf9d129d3612c7a900a82263951310b186860834",
+ "sha256": "1ddh1s34ibd25wkyi85054dkcpz3l3xb37pinkpvx7vgsq80m90s"
},
"stable": {
"version": [
4,
- 5,
+ 6,
0
],
"deps": [
@@ -79956,8 +80747,8 @@
"llama",
"seq"
],
- "commit": "c800f79c2061621fde847f6a53129eca0e8da728",
- "sha256": "04yxjkv5h3arcj1s0nq9kyh3l1z4c9wml35vb67jvv1h7mslwz55"
+ "commit": "b6c512597fd66abe69883a058a2d13bcea76bf33",
+ "sha256": "0pfx2rkxpfkyfwaz759q9b1yjd8vdwgf5jbrix5i1y06i54rnazr"
}
},
{
@@ -80213,15 +81004,15 @@
"repo": "hrishikeshs/magnus",
"unstable": {
"version": [
- 20260421,
- 201
+ 20260711,
+ 945
],
"deps": [
"transient",
"vterm"
],
- "commit": "ef87ed770acf3113f060afdd6949ac24ce46dee8",
- "sha256": "1qlf4vc0r73jh4nxx86dw0f4g6qk4c5ypkwkj591p02x3w7l5a3s"
+ "commit": "0939004f0bf00021246b8fb62fc5e8939b8d98da",
+ "sha256": "1k921pisal7qzv7j1dd0cynx1gr6nv539hr0y35mspmvk40bihqb"
}
},
{
@@ -80346,16 +81137,16 @@
"repo": "Olivia5k/makefile-executor.el",
"unstable": {
"version": [
- 20230224,
- 1329
+ 20260716,
+ 1302
],
"deps": [
"dash",
"f",
"s"
],
- "commit": "d1d98eaf522a767561f6c7cbd8d2526be58b3ec5",
- "sha256": "0wm0i2m124dglwq0szp6pdh2r0dln0xpgscw2immi9cchcmgcy4f"
+ "commit": "b22e10f528def19da9b1575546f62693555e6b22",
+ "sha256": "0h9214mg9mfmpmyrya1fqa5hs4a67mv0fk2z8mp8r68p8i4w2jw8"
}
},
{
@@ -80582,11 +81373,11 @@
"repo": "choppsv1/emacs-mandm-theme",
"unstable": {
"version": [
- 20260328,
- 1745
+ 20260513,
+ 247
],
- "commit": "bccf228e07e785f6534faaf50edc2e1b212c9d54",
- "sha256": "15fzbs3ygzj8x4g3js2gjyvzilmvfr482z8a6hnvs4316yzp1vjd"
+ "commit": "c9ebcbe0518798cab3667762637062f0255bbad2",
+ "sha256": "166i2iic1n848099x1khrxl1phcmn4d7sgkjknd3b40ns6mf4a48"
}
},
{
@@ -80704,25 +81495,25 @@
"repo": "minad/marginalia",
"unstable": {
"version": [
- 20260309,
- 1545
+ 20260519,
+ 1044
],
"deps": [
"compat"
],
- "commit": "d28a5e5c1a2e5f3e6669b0197f38da84e08f94a0",
- "sha256": "12gz095kmlj5xvx6709jl388x16724hivnncan9s52yf8rfjnlbm"
+ "commit": "feb66c02bbd88dba867cdd92b94fe24279ed578a",
+ "sha256": "11w1avjwqbv1pbsvhlw3vrc7ka41nmgaqa90zjvfgf69z46ycgsx"
},
"stable": {
"version": [
2,
- 10
+ 11
],
"deps": [
"compat"
],
- "commit": "d28a5e5c1a2e5f3e6669b0197f38da84e08f94a0",
- "sha256": "12gz095kmlj5xvx6709jl388x16724hivnncan9s52yf8rfjnlbm"
+ "commit": "feb66c02bbd88dba867cdd92b94fe24279ed578a",
+ "sha256": "11w1avjwqbv1pbsvhlw3vrc7ka41nmgaqa90zjvfgf69z46ycgsx"
}
},
{
@@ -80763,14 +81554,14 @@
"repo": "plandes/mark-thing-at",
"unstable": {
"version": [
- 20250126,
- 2020
+ 20260711,
+ 1130
],
"deps": [
"choice-program"
],
- "commit": "a9a6c824ede52825a1dea8d880776ad20f12f488",
- "sha256": "1nq3f05js3zvksc43i01pavy9iyjdmvfr5rcy67r9x9ahdjs1nmm"
+ "commit": "7829d89ba7da560adb4236fd26fc6ed5813b7173",
+ "sha256": "0y62fhdsmi3da53ldrv8l3jwg756dqwa5r1av442hnxv8pmq8v7d"
},
"stable": {
"version": [
@@ -80894,11 +81685,11 @@
"repo": "jrblevin/markdown-mode",
"unstable": {
"version": [
- 20260423,
- 1508
+ 20260425,
+ 954
],
- "commit": "51ccd3df38d85d0abc9d43d25fc7ea9b9131db45",
- "sha256": "1a0ah4r2shbjb9gwa5yr534fq2rb6nyf0qbhsqsf0pvwx5lskfr4"
+ "commit": "1f72cefa6a4b759f90e335e4908725a721b17ad9",
+ "sha256": "100dwx61v5n07i04r9gh9s9c29v1d59lqrqnk88x0v9z9jjpvgnq"
},
"stable": {
"version": [
@@ -81060,11 +81851,11 @@
"repo": "LionyxML/markdown-ts-mode",
"unstable": {
"version": [
- 20240422,
- 2329
+ 20260505,
+ 1217
],
- "commit": "2f1ee8b94cdf53cebc31ae08ecfbba846193d5e1",
- "sha256": "1fhvsfa4q46xa092dkpgki8qhfs71x414yrqlxnf2vfs9bd6w7pn"
+ "commit": "e7e78ec55213909d2b70e3dd943b776f622cc991",
+ "sha256": "1gkb0xf1qwf808k7ihwkixffmpb31b3zq23qwavhj8h9q6y4p5c5"
}
},
{
@@ -81278,14 +82069,14 @@
"repo": "mason-org/mason.el",
"unstable": {
"version": [
- 20260409,
+ 20260517,
1744
],
"deps": [
"s"
],
- "commit": "3ac674a7880dd6432f83e249bfd6fea8cf6fc974",
- "sha256": "0mslpkdxlkvzvn0av5vdjgi4w39jp07nr7ki1ni7pialrf3qdfg9"
+ "commit": "8dc604d12bea314dba3db89ea29d84b0d1438eeb",
+ "sha256": "0pwxx0wb345cn408ssg9h8bsfjclfv43zzxcwz8z6fy9yilhkbyh"
}
},
{
@@ -81296,28 +82087,28 @@
"repo": "martianh/mastodon.el",
"unstable": {
"version": [
- 20260406,
- 856
+ 20260509,
+ 749
],
"deps": [
"persist",
"tp"
],
- "commit": "5bba23045efda9f63c36ac431bec8f318a55e76a",
- "sha256": "1z8qwnc01d9hx5m1xj3acpdzllfh4rxmypzcr3jl4ipp6dybzbx6"
+ "commit": "4b30b2d96625e23325ff3727daa30969b6fe2eed",
+ "sha256": "1pz0ac5r6g34x0nlwwh55c369swiv8h3dr6ndkkm7k2ql7f75xdv"
},
"stable": {
"version": [
2,
0,
- 16
+ 17
],
"deps": [
"persist",
"tp"
],
- "commit": "5bba23045efda9f63c36ac431bec8f318a55e76a",
- "sha256": "1z8qwnc01d9hx5m1xj3acpdzllfh4rxmypzcr3jl4ipp6dybzbx6"
+ "commit": "4b30b2d96625e23325ff3727daa30969b6fe2eed",
+ "sha256": "1pz0ac5r6g34x0nlwwh55c369swiv8h3dr6ndkkm7k2ql7f75xdv"
}
},
{
@@ -81470,11 +82261,11 @@
"repo": "mathworks/Emacs-MATLAB-Mode",
"unstable": {
"version": [
- 20260419,
- 1224
+ 20260428,
+ 1740
],
- "commit": "a42d34dfc498b8754ac89512b399b77481791406",
- "sha256": "020ay6d8hm6z8n6p70yi4hpa0kzbc0dd2kwik3d2jgwdc9s8sb8i"
+ "commit": "83ea45983975bc6d17a908bf4acddfc47d51763a",
+ "sha256": "1r9ky4rdjp4vzbzkzi0xjr5arjwmih22bq1qsnch3gq83x3yxxnj"
},
"stable": {
"version": [
@@ -81725,14 +82516,14 @@
"repo": "lizqwerscott/mcp.el",
"unstable": {
"version": [
- 20260222,
- 1058
+ 20260615,
+ 940
],
"deps": [
"jsonrpc"
],
- "commit": "5c105a8db470eb9777fdbd26251548dec42c03f0",
- "sha256": "03npn50zfc3f0w30d47qqwxzky7ambd03arf94w025ilcfbc4dmm"
+ "commit": "2d172809cbdb2a40d86b28ad73bd65547cefe0e1",
+ "sha256": "03zvdvjh724kpb2p7j208fm0z73g21vij0jms8azdxbazyw6yj77"
}
},
{
@@ -81743,20 +82534,20 @@
"repo": "laurynas-biveinis/mcp-server-lib.el",
"unstable": {
"version": [
- 20260415,
- 1038
+ 20260630,
+ 1141
],
- "commit": "942d0d2da3a6b61be4d4b12e8158f8b0189963a8",
- "sha256": "0brfaqm0f670zkgqf4k1dww1ji26rmgwpc2xxa3s23cp0csv136h"
+ "commit": "dec55e6405987250256a81efe92d65bdfa8a140c",
+ "sha256": "1hw6wj62nwvjap3yjqjm7ybkwpnh7xi2q21rg2hi36cnzarb59yd"
},
"stable": {
"version": [
0,
- 2,
+ 3,
0
],
- "commit": "cfa2f2f3367b32429a06d2c401a2b791a896bba6",
- "sha256": "0qn38iqf75xzz0vkgac2ngv49qv52rbbfpziczb052r5fnl0pzp0"
+ "commit": "e643b25af647e7bb5d3958262c9c728a3bb9676f",
+ "sha256": "0c8wk2mhyn10ri4qjk3zy1811k7pzg3i3mm9lzn00v6wdccrm59a"
}
},
{
@@ -81782,11 +82573,11 @@
"repo": "dnouri/md-ts-mode",
"unstable": {
"version": [
- 20260309,
- 11
+ 20260530,
+ 1627
],
- "commit": "209f7b89383169ad759ba6bec8642d3fc15ce212",
- "sha256": "0fiblwqn66xp38n50mca9zcmrxassmxqiyfmn86gwp4zcfbifx9i"
+ "commit": "95ae25162da092cb1d55d2be0c2c95e0591086c2",
+ "sha256": "1ssparkbli7zrrkdvlr5nav460rq3xr38dnmvdbcalkhyzswzfbg"
},
"stable": {
"version": [
@@ -81897,11 +82688,11 @@
"repo": "jojojames/media-thumbnail",
"unstable": {
"version": [
- 20240816,
- 458
+ 20260712,
+ 2348
],
- "commit": "190632c1d6cc2ab94031d57e0c24412a4698faf0",
- "sha256": "1bj4l8yb383m2b43i514044yjpgh27v69gvm71a08n7r4hhdhbpr"
+ "commit": "4cb8075ec8bc46408a6b01fc8877571d8e66e439",
+ "sha256": "0nv5cf4plgf77bvvsy6y8frz6dwv90qpvbm53h2n3qd5qjc9grmi"
}
},
{
@@ -81912,20 +82703,20 @@
"repo": "hexmode/mediawiki-el",
"unstable": {
"version": [
- 20260303,
- 2008
+ 20260708,
+ 2249
],
- "commit": "e7b229450ac5383c4cde2639836cb0dc99220127",
- "sha256": "1ygiq0xvxm5jgx9l50wicviq4j6b02ss2fydzkaz47zsffr8mhk2"
+ "commit": "6e081439a876b3cb9a27146fd75e887997712629",
+ "sha256": "1i9jqchlbg5w8zmqbzpnyz11xgqhfriy1kyp8z8mczpyvhyz646f"
},
"stable": {
"version": [
- 2,
4,
- 10
+ 1,
+ 0
],
- "commit": "cf091148fd8fcf17d81bc5ad556ae18c839f6507",
- "sha256": "199vkks9adkw7rvac960sz2625n0pa7zr2bixrb552dvh29c1lxc"
+ "commit": "6e081439a876b3cb9a27146fd75e887997712629",
+ "sha256": "1i9jqchlbg5w8zmqbzpnyz11xgqhfriy1kyp8z8mczpyvhyz646f"
}
},
{
@@ -81936,11 +82727,11 @@
"repo": "ideasman42/emacs-meep",
"unstable": {
"version": [
- 20260423,
- 152
+ 20260716,
+ 112
],
- "commit": "98a8b2bd6384237005e258a647f3d16a90bc0b97",
- "sha256": "16q48yh2nzrf07x5j7kkb9s0ykdnvkw2glzk2ds3wf6zhq10agjl"
+ "commit": "8ddd6a5b61e295e9e423708e66f28e12c6199c8b",
+ "sha256": "05xw0c03h90kn6chilin6rr8wdqfkbsvcplcl9sz2ni8rx7mssm7"
}
},
{
@@ -82146,11 +82937,11 @@
"repo": "meow-edit/meow",
"unstable": {
"version": [
- 20250904,
- 1606
+ 20260714,
+ 1200
],
- "commit": "ff5315b3b2ebc9a37414cbd2f2a3378162f9953a",
- "sha256": "1l6m3vbbqg11nyr51zl3yqz5d61rl60ccrr43p00pagrpql9sacn"
+ "commit": "aa8aec19e70369b547176e625f5b95c4a8565e8e",
+ "sha256": "1mgrh9yfhv0nvb0x1ab0bmyl8x7wzb6av5ywkxidnn4jllvf1n07"
},
"stable": {
"version": [
@@ -82200,11 +82991,11 @@
"repo": "ocaml/merlin",
"unstable": {
"version": [
- 20240925,
- 900
+ 20260602,
+ 1457
],
- "commit": "80e919cf32a62acdaee95a5dab9b4bc18a8b4034",
- "sha256": "1lwh4pv7an9rfalk9nz2ds2ia09dm69bhsfx28795v7hal46rq80"
+ "commit": "653fdaaf2b1be998e3edc6645a2ddee9a3e1bf52",
+ "sha256": "0pjybqp404j42qzmbk47rmg72jg94nc0hg9b22xq2cmg61aa9kaz"
},
"stable": {
"version": [
@@ -82363,11 +83154,11 @@
"repo": "abrochard/mermaid-mode",
"unstable": {
"version": [
- 20260306,
- 2210
+ 20260607,
+ 15
],
- "commit": "127fad71666faacf4e962a1498f3fe08910cc6c4",
- "sha256": "0nr89nnk3gwwm8ij9n49afmc384s3lrxzfmip47q4i03z40dkh38"
+ "commit": "804dbcb1452e7496ae0c48e20362da6351227246",
+ "sha256": "1f1dzabb5647la40siwifv90678xpig2bsn5dl1p1s88q5xs9yk9"
}
},
{
@@ -82393,11 +83184,26 @@
"url": "https://git.andros.dev/andros/meshmonitor-chat.el.git",
"unstable": {
"version": [
- 20260409,
- 802
+ 20260609,
+ 557
],
- "commit": "862d8fed090dde4db19105afcc29199b3aa38cf0",
- "sha256": "1rncjj6l31v6q4dhpngsarm31ifmnd6gsrdkaqpkp4y7qrspy0vd"
+ "commit": "cb89039bb723301d2a69326f98ca1f141d6a0112",
+ "sha256": "0bgfkbxxb650r7nd6xgwcdydz7kwfa0c99kv713r15lkmmlndj8z"
+ }
+ },
+ {
+ "ename": "meshtastic",
+ "commit": "141f731232697e997efe49295531f92589d36c3b",
+ "sha256": "0pv628gsjck99s6qqjysm5drwrqsmyzyrf5ydxn5n048nmyl2b71",
+ "fetcher": "git",
+ "url": "https://git.andros.dev/andros/meshtastic.el",
+ "unstable": {
+ "version": [
+ 20260527,
+ 1500
+ ],
+ "commit": "5ad027669b3e652f704857e3d7e373095d1c09d1",
+ "sha256": "16h9vif9i82gk3bpy6d3x1ifbc3bag3hg3dl19hfbqs054xkjccq"
}
},
{
@@ -82676,19 +83482,19 @@
"repo": "kazu-yamamoto/Mew",
"unstable": {
"version": [
- 20260424,
- 551
+ 20260707,
+ 2341
],
- "commit": "b53e86e1a9bd7db8634387ee54e5af62e35925ad",
- "sha256": "0is3lvaxgsv1qvh3m0qa9s91m7wffsqjnwzyv5csd85xs6rypv16"
+ "commit": "880d4af5cadadfa3b0348c340f187aa45c0a870c",
+ "sha256": "0sl6w556znxgxy4j0simmn3kgrh0w81aspnqh00yd7iqwcf9yllw"
},
"stable": {
"version": [
6,
- 10
+ 11
],
- "commit": "2392ee9b869029a9900587011fe541abe08a2fd5",
- "sha256": "13ajr51yk2hcfiq532cayb0kvpdb3psf877cxl6qwx0pgaf1qm57"
+ "commit": "b905786ae1da9da4c015d69b9417a55985f07668",
+ "sha256": "1xbdix7hn6i224gglpab43qqi5mkv356zf7gs9359vnwslfm5x6n"
}
},
{
@@ -82714,8 +83520,8 @@
"repo": "danielsz/meyvn-el",
"unstable": {
"version": [
- 20250815,
- 2140
+ 20260611,
+ 354
],
"deps": [
"cider",
@@ -82723,16 +83529,15 @@
"geiser",
"parseclj",
"parseedn",
- "projectile",
"s"
],
- "commit": "5380626e327b7a48531c4a652bab4896ba179312",
- "sha256": "0gnjal5ikz2g5ac7h1lx8hwkix0j18l6sg26ydn6wdhix2yjdfmq"
+ "commit": "48c12b8d7d79c1b35d54d195d1ce4c7113ef5215",
+ "sha256": "0qm7qz3w9pm1820xk8h2kga5g1c31fxc7jr1bzcl79mqvjhw351x"
},
"stable": {
"version": [
1,
- 4
+ 8
],
"deps": [
"cider",
@@ -82740,11 +83545,10 @@
"geiser",
"parseclj",
"parseedn",
- "projectile",
"s"
],
- "commit": "62802ab42ee021f89f980bd3de3e1336ad760944",
- "sha256": "0821sk0mq1602mk3hp7igcafp8fpfg586nk41iz9syc06xbh0if7"
+ "commit": "48c12b8d7d79c1b35d54d195d1ce4c7113ef5215",
+ "sha256": "0qm7qz3w9pm1820xk8h2kga5g1c31fxc7jr1bzcl79mqvjhw351x"
}
},
{
@@ -82755,20 +83559,20 @@
"repo": "purpleidea/mgmt",
"unstable": {
"version": [
- 20260222,
- 1339
+ 20260623,
+ 203
],
- "commit": "2a08fa18cd3d0ba4a6433bdd9c4c0f3e85ed7528",
- "sha256": "0576pmm5cya802p4kw0d1g0fv95ng8jzzgaiw6x9xb86p3vkifcw"
+ "commit": "0f7ad93cd17e5251c6ec112fa6ff4272499b430a",
+ "sha256": "0csy7rkx3wdknk2j1b0b0zy2ml3rm5zr3mhcmk9zf3mdbib4hlcd"
},
"stable": {
"version": [
1,
- 0,
- 2
+ 1,
+ 0
],
- "commit": "2a08fa18cd3d0ba4a6433bdd9c4c0f3e85ed7528",
- "sha256": "0576pmm5cya802p4kw0d1g0fv95ng8jzzgaiw6x9xb86p3vkifcw"
+ "commit": "0f7ad93cd17e5251c6ec112fa6ff4272499b430a",
+ "sha256": "0csy7rkx3wdknk2j1b0b0zy2ml3rm5zr3mhcmk9zf3mdbib4hlcd"
}
},
{
@@ -82973,11 +83777,11 @@
"repo": "countvajhula/mindstream",
"unstable": {
"version": [
- 20260218,
- 312
+ 20260614,
+ 1629
],
- "commit": "6b51036a069379d18538a7cca5274c21666a5979",
- "sha256": "0j82dm2mj49fs2q6qklhfimv1gvy6q3l6bqaj1azxyh1hbg4d0vi"
+ "commit": "0b7a2889e8de419d90a3eaa137c82febe014fda6",
+ "sha256": "1w00k2l021l2g4amxdfsyfxs252kfskd2pflhcki8fzbdghaxa0a"
},
"stable": {
"version": [
@@ -83060,11 +83864,11 @@
"repo": "muffinmad/emacs-mini-frame",
"unstable": {
"version": [
- 20220627,
- 2041
+ 20260619,
+ 549
],
- "commit": "60838f3cab438dcbda8eaa15ab3e5d1af88910e9",
- "sha256": "0q01iymz657bg3mcmq7vcl8r0ypsa1pqj1p6gxs7ywx1d33lan4d"
+ "commit": "066af90bb2c9a52ff0bfbcdb25539e1b92b68586",
+ "sha256": "07a0l53ihkqan5n1kg07vy80m46y6ri6ijjf1frzd6ciha37ad4b"
}
},
{
@@ -83220,11 +84024,20 @@
"repo": "dheerajshenoy/minimal-dashboard.el",
"unstable": {
"version": [
- 20251102,
- 1952
+ 20260710,
+ 1120
],
- "commit": "b7dbce88a19777c0d33df025e2b830094e521af8",
- "sha256": "0qa1sgijf8qywi8zxiv2bs6j526q5aankp6790q10p1r8d1vdhdp"
+ "commit": "260a074d44eaa9e49576dca24c09cca54f1e193d",
+ "sha256": "1gjrb8hmf44vhf0dssm7pwkz4mx2w7hkxk7540xd6qiwx7xnl6gz"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 1,
+ 4
+ ],
+ "commit": "260a074d44eaa9e49576dca24c09cca54f1e193d",
+ "sha256": "1gjrb8hmf44vhf0dssm7pwkz4mx2w7hkxk7540xd6qiwx7xnl6gz"
}
},
{
@@ -83274,26 +84087,28 @@
"repo": "tarsius/minions",
"unstable": {
"version": [
- 20260101,
- 1837
+ 20260601,
+ 1513
],
"deps": [
- "compat"
+ "compat",
+ "seq"
],
- "commit": "5b73cd443c28a6e9c8e5ddd60ada38afdf40dfb9",
- "sha256": "0kl269rq1abjcpnxffd8xgcdw3bwgcq31bzfvmp8wvdnkdpfi3ci"
+ "commit": "7ec2810c9b3019f8e379022b0ca7ce61e9e7c810",
+ "sha256": "11y569lmrm7fj42janr9n4fggvi3jh5zzxs33n9q49kg50hclh4s"
},
"stable": {
"version": [
1,
2,
- 0
+ 1
],
"deps": [
- "compat"
+ "compat",
+ "seq"
],
- "commit": "5b73cd443c28a6e9c8e5ddd60ada38afdf40dfb9",
- "sha256": "0kl269rq1abjcpnxffd8xgcdw3bwgcq31bzfvmp8wvdnkdpfi3ci"
+ "commit": "7ec2810c9b3019f8e379022b0ca7ce61e9e7c810",
+ "sha256": "11y569lmrm7fj42janr9n4fggvi3jh5zzxs33n9q49kg50hclh4s"
}
},
{
@@ -83304,14 +84119,14 @@
"repo": "shoshin/minitest-emacs",
"unstable": {
"version": [
- 20250803,
- 49
+ 20260622,
+ 2214
],
"deps": [
"dash"
],
- "commit": "d278e94fb1874c584699e1d6fa1b34224c1f8550",
- "sha256": "1snkk3fqhaaaxbhlshfvmpq1bs2bcbgmamm7fncgaz5kkv3d0x0n"
+ "commit": "596cc885d3f4898d85c78d1686b22c379fe2acae",
+ "sha256": "0ysdaysqm82zb01dwy5yxk3g41fy0phskd4imcwzkngazwdq2k2l"
},
"stable": {
"version": [
@@ -83379,11 +84194,11 @@
"repo": "loj/minsk-theme",
"unstable": {
"version": [
- 20250706,
- 1827
+ 20260612,
+ 845
],
- "commit": "c9caae876ef184053fef0bd3fee6243632702487",
- "sha256": "0lmf5wdwffgi9l0y8wpis45gg7wzhvvflzfnxly681byginaqjrc"
+ "commit": "7d1259165a1b7eaecc97d76fc288fa56f8736bef",
+ "sha256": "1r4hkw4qpx9xq25w0hzzw1kxzvl2rk050a39hd96s15a3jsfix38"
}
},
{
@@ -83418,28 +84233,28 @@
"repo": "milanglacier/minuet-ai.el",
"unstable": {
"version": [
- 20260424,
- 430
+ 20260519,
+ 111
],
"deps": [
"dash",
"plz"
],
- "commit": "36049820ca987c79c87cc4d9f21d16ca23ff8ebb",
- "sha256": "15165fn161c6fvqcrpfffy7l5abs7zscarzhhvzbwppqk3r9wrq8"
+ "commit": "13fb314a795951b9190c53c59ef281abf7a2cb4f",
+ "sha256": "13maiy40n4sgmwwp83xc4pwgmdv0jd1j7ca75cna9swqq28dmfgi"
},
"stable": {
"version": [
0,
- 7,
- 1
+ 8,
+ 0
],
"deps": [
"dash",
"plz"
],
- "commit": "7b34bf0f0334478dab15ce185eacc794a6c7415f",
- "sha256": "085iclc2766sv6mxim7ppxdcss769zax2gk92wpj5130zpayngzq"
+ "commit": "13fb314a795951b9190c53c59ef281abf7a2cb4f",
+ "sha256": "13maiy40n4sgmwwp83xc4pwgmdv0jd1j7ca75cna9swqq28dmfgi"
}
},
{
@@ -83512,6 +84327,21 @@
"sha256": "0insbf8gcg172yg1w7gmy4hf3krv58gxqbb1ch2902djyvsfwwdn"
}
},
+ {
+ "ename": "mise-tasks",
+ "commit": "a00cda32a35da1bb4eb33c81212a4aa5df26755e",
+ "sha256": "0nhaidc9il333v2br9ha5xzwlb3qin9l4ghjp1xgri2hsi8l5v3l",
+ "fetcher": "github",
+ "repo": "klochowicz/mise-tasks.el",
+ "unstable": {
+ "version": [
+ 20260703,
+ 656
+ ],
+ "commit": "76c762bd920bf1e2faac631ac990c4e2e798d321",
+ "sha256": "178apcbm3bl1fyphbi1mkd3hrfd418g4nmahz5msad145vr01z5j"
+ }
+ },
{
"ename": "mistty",
"commit": "8a66484b8aff8298222e70466f8f9b09b31bc598",
@@ -83520,11 +84350,11 @@
"repo": "szermatt/mistty",
"unstable": {
"version": [
- 20260205,
- 1444
+ 20260715,
+ 1804
],
- "commit": "bf0ddd077351001c56a4c754399d7ec025b93bab",
- "sha256": "0j4m5ivbzkrp4jspcvbi3jy3dq4lqmm93p47pc1v9v0g54hym5nr"
+ "commit": "879abed83287ab79b6d3dbdab7df2bf3fc68769a",
+ "sha256": "1vhrsmbg6lx2ckxsxqjv5f4wnijdilbzj5qpdq47f8j2fqslw2mw"
},
"stable": {
"version": [
@@ -83600,20 +84430,20 @@
"repo": "jdtsmith/mlscroll",
"unstable": {
"version": [
- 20250112,
- 1440
+ 20260703,
+ 1544
],
- "commit": "d22f5d8e6ca5054d01f06ac57419267098b709a5",
- "sha256": "00q0s1y8y4j9qyldbp9bwd7cqd5023wizlmsm7rkns5icf42hwbm"
+ "commit": "ff698fbbfc3b7c5775944bdff2da0acfb697d162",
+ "sha256": "197k737a3dxfjakj4lzf09sasjd46nq7dk5c78bbjlzbjdpg3r53"
},
"stable": {
"version": [
0,
2,
- 3
+ 4
],
- "commit": "d22f5d8e6ca5054d01f06ac57419267098b709a5",
- "sha256": "00q0s1y8y4j9qyldbp9bwd7cqd5023wizlmsm7rkns5icf42hwbm"
+ "commit": "ff698fbbfc3b7c5775944bdff2da0acfb697d162",
+ "sha256": "197k737a3dxfjakj4lzf09sasjd46nq7dk5c78bbjlzbjdpg3r53"
}
},
{
@@ -83850,20 +84680,20 @@
"repo": "trevoke/mock-fs.el",
"unstable": {
"version": [
- 20260111,
- 410
+ 20260708,
+ 2247
],
- "commit": "c1a4b1f923bed627aea5579acd782e91243e7cdc",
- "sha256": "10cg7gsf0iba8jh9gxvykrhc0ai3rnnwwjrcc0jnasn8fxfpkyz1"
+ "commit": "b15c34281d076d6aa1ea5820368307694952e2ce",
+ "sha256": "0jdpqpzcwf2d2pwlj9car9zx7y4d2i4nm8b057fyk5klw3hk4hpq"
},
"stable": {
"version": [
0,
10,
- 1
+ 2
],
- "commit": "c1a4b1f923bed627aea5579acd782e91243e7cdc",
- "sha256": "10cg7gsf0iba8jh9gxvykrhc0ai3rnnwwjrcc0jnasn8fxfpkyz1"
+ "commit": "b15c34281d076d6aa1ea5820368307694952e2ce",
+ "sha256": "0jdpqpzcwf2d2pwlj9car9zx7y4d2i4nm8b057fyk5klw3hk4hpq"
}
},
{
@@ -83976,49 +84806,49 @@
"repo": "purcell/mode-line-bell",
"unstable": {
"version": [
- 20181029,
- 516
+ 20260702,
+ 1209
],
- "commit": "4985ba42f5a19f46ddbf9b3622453a9694995ce5",
- "sha256": "13n3di05lgqfm4f8krn3p36yika5znhymp5vr2d747x54hqmgh7y"
+ "commit": "b888963bf390b6e1d132b72b8a14041bd7afae4b",
+ "sha256": "0lbdwwb6wyqpk3kbs4bp7lvcsp2jjks6v5flx66cinl6jg20l4gj"
},
"stable": {
"version": [
0,
- 2
+ 3
],
- "commit": "4985ba42f5a19f46ddbf9b3622453a9694995ce5",
- "sha256": "13n3di05lgqfm4f8krn3p36yika5znhymp5vr2d747x54hqmgh7y"
+ "commit": "6ab459f7be311f5a30679a3dfb28431e3e8d2dad",
+ "sha256": "11j0dzc8290ykcs2wwyjda3lvmxm39zrvgmig5fq1p3l2984m88b"
}
},
{
"ename": "mode-line-debug",
- "commit": "b0080ab9ef1eca5dd19b3fd9af536d8aa17773a2",
- "sha256": "0ppj14bm3rx3xgg4mfxa5zcm2r129jgmsx817wq3h7akjngcbfkd",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "02zr339lbgzqn881jbfs0yhg7d9kaa89szd90q30kbhd8ykly4yz",
"fetcher": "github",
"repo": "tarsius/mode-line-debug",
"unstable": {
"version": [
- 20260101,
- 1838
+ 20260601,
+ 1514
],
"deps": [
"compat"
],
- "commit": "a6c26f9d8b574edd3001b8abc6c4801048428385",
- "sha256": "0nggr6pwl34qhdjh7dxh88fa35i4d3nhan9w1xwa2fvmjycbayvg"
+ "commit": "3e1b50bc666beaf6441f652608bf7f48b74e80df",
+ "sha256": "0n0a5k4vp971nxmpvx0ywynv7si67h0a3ajr10sk51j4v3gffynr"
},
"stable": {
"version": [
1,
5,
- 2
+ 3
],
"deps": [
"compat"
],
- "commit": "a6c26f9d8b574edd3001b8abc6c4801048428385",
- "sha256": "0nggr6pwl34qhdjh7dxh88fa35i4d3nhan9w1xwa2fvmjycbayvg"
+ "commit": "3e1b50bc666beaf6441f652608bf7f48b74e80df",
+ "sha256": "0n0a5k4vp971nxmpvx0ywynv7si67h0a3ajr10sk51j4v3gffynr"
}
},
{
@@ -84197,15 +85027,15 @@
"repo": "deadendpl/modus-ewal-theme",
"unstable": {
"version": [
- 20260413,
- 1551
+ 20260715,
+ 906
],
"deps": [
"ewal",
"modus-themes"
],
- "commit": "4e52d98c95fb506daa2eec35c6141171f686649d",
- "sha256": "0ph4vshvl8knbqhxbklca73zkh0pgihar85lfliyahcr32zfpiax"
+ "commit": "75f4cbe730d16407f0251d3c45297bb83d31f6db",
+ "sha256": "1dlqpbc9yn0mpm1rnmy1l1c325jz5hwlnhccsdzc9ai64f4f778d"
}
},
{
@@ -84216,20 +85046,20 @@
"repo": "protesilaos/modus-themes",
"unstable": {
"version": [
- 20260418,
- 1313
+ 20260717,
+ 1109
],
- "commit": "7c2ce1ff0dc25215061d05a9d796d6193f93c84e",
- "sha256": "0ymzjwqbmszjsy30057m91vwvbqyvprsjd7r0cxigqspk2qabfiy"
+ "commit": "e81c3c6ce3cdeb02266487a6fc1461cb9194c70e",
+ "sha256": "0y7c8dk5m8nn05s0gazpipvhmadn493clx7hr0dfm54cd767bz8d"
},
"stable": {
"version": [
5,
- 2,
+ 3,
0
],
- "commit": "d1037f1322487e5686fff655dcd88aa644b2ad51",
- "sha256": "1iqbi71h9xajsw4330157dfs10npfi1z2ads99vr7n5pll7060rc"
+ "commit": "2d044ac89f3bca7011fa2bfda003cf80ce115f70",
+ "sha256": "1xbwvw3fg1c18gs6w10vp843mzjqxrv24ks7ll2zj8y4mcig3fbm"
}
},
{
@@ -84240,11 +85070,11 @@
"repo": "kuanyui/moe-theme.el",
"unstable": {
"version": [
- 20260304,
- 1519
+ 20260515,
+ 841
],
- "commit": "075f91acc2a7ad722bdda0ab945a7fb0f7c4565f",
- "sha256": "1z3whsgjj404dxylgz430l0n8j9kbjab87phy6g8q2pqciailbd8"
+ "commit": "c7d711e940a6c4e7a2270830aeaf52c1ce789455",
+ "sha256": "141jzhfpcah0lw17lwgsd31jp93qr02371rjm2k92vawhx90hir6"
},
"stable": {
"version": [
@@ -84407,11 +85237,11 @@
"repo": "ideasman42/emacs-mono-complete",
"unstable": {
"version": [
- 20260105,
- 209
+ 20260522,
+ 348
],
- "commit": "12eb3f326f49212787be6e34a69e830652c8a9be",
- "sha256": "1p9bac7196cjfxqsxigcpjxxswvhrpy8cxpxhyd5n8mw8yp7nl5w"
+ "commit": "7d3d5656269f290a8ebec772d877d95cc815939b",
+ "sha256": "0m2qma32a23amc3s3h66j9df55gm4airw888ibd3nmsfx6n46iki"
}
},
{
@@ -84578,26 +85408,26 @@
"repo": "tarsius/moody",
"unstable": {
"version": [
- 20260101,
- 1838
+ 20260601,
+ 1514
],
"deps": [
"compat"
],
- "commit": "82f65014dcdfc7178464c282b5c9ec5f7016c945",
- "sha256": "1ash61h0w26yzjgxzi8ga4baki35724h75nf3ivp8hlgpcnnb8rj"
+ "commit": "48556e65f37c040a430f123494f517f961ae000c",
+ "sha256": "04y4nlrfrk35pw55pfss2kwxg851dpb9lbmzi3hzc1xm3wmk63mb"
},
"stable": {
"version": [
1,
2,
- 2
+ 3
],
"deps": [
"compat"
],
- "commit": "82f65014dcdfc7178464c282b5c9ec5f7016c945",
- "sha256": "1ash61h0w26yzjgxzi8ga4baki35724h75nf3ivp8hlgpcnnb8rj"
+ "commit": "48556e65f37c040a430f123494f517f961ae000c",
+ "sha256": "04y4nlrfrk35pw55pfss2kwxg851dpb9lbmzi3hzc1xm3wmk63mb"
}
},
{
@@ -84624,6 +85454,21 @@
"sha256": "0rdvcv8hwrxxbb9s8sfx5331a08kdk28x8chnnq3pj58pxqvagy3"
}
},
+ {
+ "ename": "moonbit-ts-mode",
+ "commit": "f75f44e867a0ed35a5beb1436f8e2f46ebd97358",
+ "sha256": "0i4wbg7vd2ijmv3z86gmbv6irkaa37cxlvm8f9wg73qzlxgx8haw",
+ "fetcher": "github",
+ "repo": "moonbit-community/moonbit-ts-mode",
+ "unstable": {
+ "version": [
+ 20260713,
+ 229
+ ],
+ "commit": "f8ae31f506571614afea2fcd03532d872afd917b",
+ "sha256": "0nsmxrk39sh0dl2vjr9zpx0h5yngagarkcvs85iaqmk149fm0368"
+ }
+ },
{
"ename": "moonscript",
"commit": "3046afee95277024830d7d372f2f1c84a0adcb00",
@@ -84699,26 +85544,26 @@
},
{
"ename": "morlock",
- "commit": "b6ef53bbc80edda12a90a8a9705fe14415972833",
- "sha256": "0693jr1k8mzd7hwp52azkl62c1g1p5yinarjcmdksfyqblqq5jna",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "1cg5p37w83z5jrryp574qmnqgp4rpzgd0ghm2arwd18lmryddi66",
"fetcher": "github",
"repo": "tarsius/morlock",
"unstable": {
"version": [
- 20260101,
- 1839
+ 20260601,
+ 1518
],
- "commit": "4ec0253ffbac4764b90457bb3b887b0a07badb20",
- "sha256": "03n4vrlik3mid9jvvn36q856a48dghpcjcdhkjfshxdialywfdza"
+ "commit": "1fd3cc79b1fa1f69386d6b2fa058e2477d35a4e7",
+ "sha256": "0xwm8dzb9jaflra3r60iq56wgfwhydh7y66ycgfk3fja48mzppxk"
},
"stable": {
"version": [
2,
1,
- 3
+ 4
],
- "commit": "4ec0253ffbac4764b90457bb3b887b0a07badb20",
- "sha256": "03n4vrlik3mid9jvvn36q856a48dghpcjcdhkjfshxdialywfdza"
+ "commit": "1fd3cc79b1fa1f69386d6b2fa058e2477d35a4e7",
+ "sha256": "0xwm8dzb9jaflra3r60iq56wgfwhydh7y66ycgfk3fja48mzppxk"
}
},
{
@@ -84937,11 +85782,11 @@
"repo": "emacsfodder/move-text",
"unstable": {
"version": [
- 20231204,
- 1514
+ 20260508,
+ 508
],
- "commit": "90ef0b078dbcb2dee47a15b0c6c6f417101e0c43",
- "sha256": "16x8p9brj5nrjk2rmhwf6hb8sj0rjr4j2827z0g679zyns3cbyrb"
+ "commit": "142890cfb46d9c374113b4b49021a4202033147b",
+ "sha256": "0zhzfiwcslkgbjqgiyrp7yr3n41cys26i1qdq7p29bwmsm61iqc9"
},
"stable": {
"version": [
@@ -84985,20 +85830,20 @@
"repo": "mekeor/mowie",
"unstable": {
"version": [
- 20250113,
- 122
+ 20260610,
+ 846
],
- "commit": "26f605cf632579af897a85a3922bf17fac616519",
- "sha256": "091ylr2mk1767h076g6wcx99rv2v78bmfw2b6hjmc9260m7mvr8y"
+ "commit": "30eb09b9c671b61b081b1d7096f4650641ee3ea0",
+ "sha256": "0aq078i75x742b15cr7crn7bfb8nqw9kldax8g2ixbyp3h374l9l"
},
"stable": {
"version": [
0,
1,
- 1
+ 2
],
- "commit": "7b826c751014a294b493a6bfebe1cda6a1832ab0",
- "sha256": "19k89z6ji2j99q72b3dc28w2d9pqhcfwnzfll1yqd8sc1dkkd03k"
+ "commit": "30eb09b9c671b61b081b1d7096f4650641ee3ea0",
+ "sha256": "0aq078i75x742b15cr7crn7bfb8nqw9kldax8g2ixbyp3h374l9l"
}
},
{
@@ -85009,20 +85854,20 @@
"repo": "google/mozc",
"unstable": {
"version": [
- 20260327,
- 323
+ 20260624,
+ 1355
],
- "commit": "891e32473ece7f77f0b69c73bc5a53a352a27ad0",
- "sha256": "0izy16hdjqrlh5516y868fvgmrfmncxpxbfjsiwlwg9xf006vh41"
+ "commit": "76887c679e1e4f156102e4bc62ea9cf9174678a3",
+ "sha256": "18v2vlxcs0pxq84mydqdzrfn5jf7waav6ykrawd74mfhlwjp3f4v"
},
"stable": {
"version": [
3,
- 33,
- 6133
+ 34,
+ 6239
],
- "commit": "c9163b6bb1010671781b8acd358b025c519fc1e0",
- "sha256": "0hq5iin2fnf4y6klmlbiqkw1h0l77appyhlagn735brf2n74qaxg"
+ "commit": "76887c679e1e4f156102e4bc62ea9cf9174678a3",
+ "sha256": "18v2vlxcs0pxq84mydqdzrfn5jf7waav6ykrawd74mfhlwjp3f4v"
}
},
{
@@ -85063,6 +85908,36 @@
"sha256": "0cpcldizgyr125j7lzkl8l6jw1hc3fb12cwgkpjrl6pjpr80vb15"
}
},
+ {
+ "ename": "mozc-modeless",
+ "commit": "021a4e6c04f634474e15acb8685c5e2adc286e2d",
+ "sha256": "0ncjci8a2szdimb7zmyxla57jgljmz6kc5dgc12rg1ggqbndp76g",
+ "fetcher": "github",
+ "repo": "kiyoka/mozc-modeless-emacs",
+ "unstable": {
+ "version": [
+ 20260621,
+ 520
+ ],
+ "deps": [
+ "mozc"
+ ],
+ "commit": "95adeb91fbafb569d7ac06a3ab7df9679349a7be",
+ "sha256": "1bn673i194w77k84lnj2m5lmdhnxw5xpw5byr74496075axlnrnh"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 10,
+ 0
+ ],
+ "deps": [
+ "mozc"
+ ],
+ "commit": "95adeb91fbafb569d7ac06a3ab7df9679349a7be",
+ "sha256": "1bn673i194w77k84lnj2m5lmdhnxw5xpw5byr74496075axlnrnh"
+ }
+ },
{
"ename": "mozc-popup",
"commit": "c1f6256e8ef106684b1b546003ec8b591fdea560",
@@ -85367,11 +86242,11 @@
"repo": "xuchunyang/msgpack.el",
"unstable": {
"version": [
- 20200323,
- 515
+ 20260706,
+ 1555
],
- "commit": "e2a0d76d1087bc8178c9f27222cb9b93e2e815ec",
- "sha256": "016vjm7sjasqqhxpq0yl12fxx9pfi3dzpp48k9xhr5wldw94czqx"
+ "commit": "5353a7b2da854c843cbec4536996242001f63471",
+ "sha256": "08pr8ijvfpnzx4bxbj8cjmibk2mlx0ksjwm3dv3lzp3i6cg5mhsw"
}
},
{
@@ -85592,14 +86467,14 @@
"url": "https://repo.or.cz/mu4e-marker-icons.git",
"unstable": {
"version": [
- 20250228,
- 218
+ 20260629,
+ 815
],
"deps": [
"nerd-icons"
],
- "commit": "13541181d5144ee91d570ab74558abce194b083f",
- "sha256": "1lvwg0yb993j57y7663jm33g7j0x0jqbhqgf8vdy6qv198wpj5nc"
+ "commit": "2d048729ab106aebf1acb99e1ccfd002a0f2ec4a",
+ "sha256": "08p0lvlf6s1w6wd588x64jshxaqyazszmrcwq83bd242k101vvnk"
}
},
{
@@ -85610,11 +86485,11 @@
"repo": "mkcms/mu4e-overview",
"unstable": {
"version": [
- 20250406,
- 1225
+ 20260515,
+ 1818
],
- "commit": "527c3d3a4618c6ba7e6dec679ec2eff8854775d2",
- "sha256": "1fxxbfn8hgx07rr9rrfr8bmhay576shc1s14smnjakrg51a69sl9"
+ "commit": "b6dfe3ecc569aa6313ef093c0c49df8a507f19c4",
+ "sha256": "0xkaqnqxj2f1f9ssnrgv4aqdwb6aq148pnhzrl52z1lj3p8k7q31"
},
"stable": {
"version": [
@@ -85859,11 +86734,11 @@
"repo": "ellisvelo/multi-project",
"unstable": {
"version": [
- 20240115,
- 1635
+ 20260513,
+ 1126
],
- "commit": "3bc67ba8adf10a0844fa2f9cce9d78f130307645",
- "sha256": "0f4p3ndp2qlphad46qhyfmjcd0kmazkz6yr7278ca4zminchfrvc"
+ "commit": "1ddfd60410dd146c59e9950ef88c5f0084807012",
+ "sha256": "17zjbfjz96j5bjjdwxb7qaybd4s1f8xgnldnd0qjqrcc5w2aazis"
},
"stable": {
"version": [
@@ -86087,6 +86962,24 @@
"sha256": "06flfld7s8ld02j6d3zhdppb7cqz1cbizdp5pkx252r4cl5i73m0"
}
},
+ {
+ "ename": "musicbrainz-interactive",
+ "commit": "cf0a2b5b33488677cae50502ebdce479f9784a4c",
+ "sha256": "1vxaldmhp3crz3xsspiq1xyja7k7spsmbwk27dmmzm5lisvxhc6c",
+ "fetcher": "github",
+ "repo": "zzkt/metabrainz",
+ "unstable": {
+ "version": [
+ 20260711,
+ 830
+ ],
+ "deps": [
+ "musicbrainz"
+ ],
+ "commit": "6c699a9c1a8b9292a732ae1bd662b021fcd8d8b8",
+ "sha256": "0xnx60g9l523k5ckx97bv1h3n472da268acl20nq6158w7zh6ni0"
+ }
+ },
{
"ename": "mustache",
"commit": "ad320d60e2c95881f31628c19ad3b9ece7e3d165",
@@ -86467,6 +87360,21 @@
"sha256": "0gylwdq81s89civrlwsg4zrvyjkjw37jdp1mvsihx8xpq38w4r65"
}
},
+ {
+ "ename": "mysql",
+ "commit": "81dfb7ffcdeaca544f659556c1dd9f020f3429df",
+ "sha256": "0kfdchh7nhywdq3yw0ac9clxaihxib9rysbrybzyk9ksxkpdvqgj",
+ "fetcher": "github",
+ "repo": "LuciusChen/mysql.el",
+ "unstable": {
+ "version": [
+ 20260716,
+ 1425
+ ],
+ "commit": "af030703c54004d28794c9b259d8fa6c7eaeec19",
+ "sha256": "0piq2xb93x7hviip5hyaj7vfgrcwrkd190hydlwvsg1j2sw9y3na"
+ }
+ },
{
"ename": "mysql-to-org",
"commit": "855ea20024b606314f8590129259747cac0bcc97",
@@ -86958,20 +87866,20 @@
"repo": "skeeto/nasm-mode",
"unstable": {
"version": [
- 20250320,
- 1646
+ 20260509,
+ 953
],
- "commit": "4e670f6dededab858251670aa5459c950f78d867",
- "sha256": "12ynvw6l1a9n8x1q4fpm0fz15zf2vp3jibsq5z8si1czgkz0cw97"
+ "commit": "fab76d8e092419c341b6240fcc7123975db177e1",
+ "sha256": "11qjcbvac2aqba136zyvgqhcfcrx6znc9s4cym8mcvfms05sphsm"
},
"stable": {
"version": [
1,
- 1,
- 1
+ 2,
+ 0
],
- "commit": "d990ed94d902b74a5c834fb567e03307607cee45",
- "sha256": "1dyc50a1zskx9fqxl2iy2x74f3bkb2ccz908v0aj13rqfqqnns9j"
+ "commit": "fab76d8e092419c341b6240fcc7123975db177e1",
+ "sha256": "11qjcbvac2aqba136zyvgqhcfcrx6znc9s4cym8mcvfms05sphsm"
}
},
{
@@ -87176,20 +88084,20 @@
"repo": "babashka/neil",
"unstable": {
"version": [
- 20251217,
- 857
+ 20260524,
+ 1246
],
- "commit": "196e8f7933289902965fdc6da2d0227b80e06936",
- "sha256": "1rn5ykaccwmgx7s68nksfv6v5s9qz7saq3ayhafzfpv3smj02p0m"
+ "commit": "2cdd7c66843ba3f1a2adb08208f2312b72b31900",
+ "sha256": "0x93zp21744df5i7aqqgxbgdi1xwmx2yr6x96c0r8g9rzyp5krby"
},
"stable": {
"version": [
0,
3,
- 69
+ 70
],
- "commit": "fa793214d7820e6763108c942e9cf16e1cd2db96",
- "sha256": "0lk0ppykxp4nci6989bz0rh5jb4a4pl0pdzqim87kxv1ji2rc6rm"
+ "commit": "2cdd7c66843ba3f1a2adb08208f2312b72b31900",
+ "sha256": "0x93zp21744df5i7aqqgxbgdi1xwmx2yr6x96c0r8g9rzyp5krby"
}
},
{
@@ -87223,20 +88131,20 @@
"repo": "bbatsov/neocaml",
"unstable": {
"version": [
- 20260416,
- 647
+ 20260710,
+ 532
],
- "commit": "06794d8d9ae1180a37b71b02ed8eadd464129b73",
- "sha256": "1wzjsk8252clak794yhk89s2qwgcl95a8mgdyd6wvn4a4bg0ksaw"
+ "commit": "32acab3624160a7d0bb04c42babaa791729ab8b5",
+ "sha256": "0jib25g15aj65jvsfb0ngkiwh85nlyz18qb6wjdd3rfmxb68wrjh"
},
"stable": {
"version": [
0,
- 8,
+ 10,
0
],
- "commit": "deb95d8b87641cf31d64487f627d8a51e48ff2e7",
- "sha256": "0prsi5g8wamh6v4l6jqsws78q63i07gfxkgbvns139fckdssgr2b"
+ "commit": "32acab3624160a7d0bb04c42babaa791729ab8b5",
+ "sha256": "0jib25g15aj65jvsfb0ngkiwh85nlyz18qb6wjdd3rfmxb68wrjh"
}
},
{
@@ -87301,11 +88209,11 @@
"repo": "rainstormstudio/nerd-icons.el",
"unstable": {
"version": [
- 20260325,
- 346
+ 20260710,
+ 1627
],
- "commit": "1db0b0b9203cf293b38ac278273efcfc3581a05f",
- "sha256": "0v7wm8p432h3v2q4sll254hl3n9vdb5irfp6yw9kl1sc9j5x4iif"
+ "commit": "674909974637ff0ec2b5ebf43f9a8aefa35d93e9",
+ "sha256": "14rd0nj7v29mq78gvmsqys650fz1q44hqk6ymhlr380wjhsx8jpx"
},
"stable": {
"version": [
@@ -87532,11 +88440,11 @@
"repo": "Feyorsh/nethack-el",
"unstable": {
"version": [
- 20260417,
- 234
+ 20260503,
+ 532
],
- "commit": "4c6e483966eee5a210b99ea8de34d20146e21237",
- "sha256": "1x5z3ncla9726pihvfw8qzdbahqii0gfh9wcfh3v03f1ggjim7hh"
+ "commit": "a666c5917a44458a103e99587239fa7db67b9072",
+ "sha256": "1h2akkw5hg7d2ffra94gam2zm5al4lxxhd2indkap8ppnjiidl32"
}
},
{
@@ -87632,11 +88540,11 @@
"repo": "vekatze/neut-mode",
"unstable": {
"version": [
- 20250608,
- 958
+ 20260425,
+ 747
],
- "commit": "8cfea9d387dd252de40c941c52b08699d45e1f04",
- "sha256": "01pifaj9dsilxh020v2qqhw070r8hhy4s3n73bfs6ka957wrjja9"
+ "commit": "536ba9641011ea31c019beb6399ffca9945fc34e",
+ "sha256": "1va03vy072cd4n0pvi0swvnx9bxirfsaiwk29j55w91f14jcqh0p"
}
},
{
@@ -87776,8 +88684,8 @@
"repo": "ewantown/nice-org-html",
"unstable": {
"version": [
- 20250608,
- 1715
+ 20260625,
+ 1926
],
"deps": [
"dash",
@@ -87785,8 +88693,8 @@
"s",
"uuidgen"
],
- "commit": "bdb49bbe22dbd99489f2c65a10cb90f29d39d80d",
- "sha256": "1gm9dr5914hgq07xng06w2myhn115ayv5x8br6s2njw9lqmj6zxz"
+ "commit": "16c9efdd92a12c78a55364f3d5e8e310585aa012",
+ "sha256": "0skahzl2ai7v92cl40p8hxs2qj82dbpf9gmq7314s2gbdibklpk3"
}
},
{
@@ -87956,20 +88864,20 @@
"repo": "mrcnski/nimbus-theme",
"unstable": {
"version": [
- 20260112,
- 41
+ 20260719,
+ 1540
],
- "commit": "1ee3e643a01129263833ee5538e5df1fefb25cde",
- "sha256": "0a4w8pvwmpjb0lflxccvp67gr16xb458hzkj7zjkm44iq7i55qy1"
+ "commit": "d755926ec6984207f63733a0fa9612954b350c34",
+ "sha256": "1vc0c3pdcrqqizf7v3nlg6dhljwsb4vycncspx9qfi1znr8cw56d"
},
"stable": {
"version": [
1,
- 3,
+ 4,
0
],
- "commit": "178557148f2e132c79be25429d04c5b89f6535dd",
- "sha256": "09lcyxd4nds79m8bpk5pq5p5brb8c6czzvniarn8njzj13lcy2g6"
+ "commit": "d8544f963463d9d2e6ae3b701c1538064d57c6df",
+ "sha256": "1adkbhs2yrmhi6nh30c2dsiamh5wd3ibg31nl4f2qyc00cpzs40j"
}
},
{
@@ -88167,11 +89075,11 @@
"repo": "nix-community/nix-ts-mode",
"unstable": {
"version": [
- 20260423,
- 1718
+ 20260705,
+ 1600
],
- "commit": "50916188784786ed201a8edc70a5264eefb525e3",
- "sha256": "14yqs2gibq7fdg79h9mcjrnxm0y6gscbvgzjlkp8gm0dmh2x8b1y"
+ "commit": "3b69aeb8d2403ea52b60a46fa452965b7b37a50e",
+ "sha256": "0br7g2py8r1xgc0hmcbcax77kiw8ljwbcp8y51ryvjpah0jrb0pf"
},
"stable": {
"version": [
@@ -88349,16 +89257,16 @@
"repo": "dickmao/nnhackernews",
"unstable": {
"version": [
- 20230705,
- 1359
+ 20260630,
+ 1255
],
"deps": [
"anaphora",
"dash",
"request"
],
- "commit": "4c13d261bf660901d5ff63a7ee170097ebe464ed",
- "sha256": "08z81m25lh1basmq5w8w1sg284dfck3nzlcnv1cbj4fr2qqncvyn"
+ "commit": "0cb7ff0a86c9c5b08786b6dc0591adcb25fbe3b3",
+ "sha256": "0hcvas8h5mfs7g80in9yvahvb8s18frfy6glv27f3czjaf9s1crz"
}
},
{
@@ -88442,26 +89350,26 @@
"repo": "emacscollective/no-littering",
"unstable": {
"version": [
- 20260415,
- 2031
+ 20260706,
+ 850
],
"deps": [
"compat"
],
- "commit": "3c40e8a1dd7b20c6db90874b7b3088089a48acdc",
- "sha256": "19pbbhdad38h87mwqrhrzzbi66ml9l94rjyfh6h14xqvhy11z0y4"
+ "commit": "fa0801e5a1135cdb5ba525869f578cea87e8db0e",
+ "sha256": "10mamnnayfxwa1x5ibyks8i684bhqzq6k24askzdi3galc31gpdh"
},
"stable": {
"version": [
1,
8,
- 6
+ 9
],
"deps": [
"compat"
],
- "commit": "db60be0939f31eae0cfc537918503a13b028fa56",
- "sha256": "1iaszl8q6chaj8cx0gmzg3pkmm9kl9pdr9nxlqydnzbxfc041zi9"
+ "commit": "719c2a3773419ebc92a06e61b0fb26f6d64e750e",
+ "sha256": "1ydqwg77k8f67fa8dnmxxcg4nyyrcm459h1553j15fm1bjw0af0v"
}
},
{
@@ -88900,6 +89808,30 @@
"sha256": "1yin5i38jdp47k6b7mc0jkv9ihl8nk5rpqin4qmwbhb871zxn7ma"
}
},
+ {
+ "ename": "nostr-publish",
+ "commit": "280679e6f0834e6e7e936b72044e9426dcc28c01",
+ "sha256": "012yq5nhirhf01dsi34p3s2cc1xl6bp7qpf16bmzk195lccjiyz2",
+ "fetcher": "github",
+ "repo": "941design/emacs-nostr-publish",
+ "unstable": {
+ "version": [
+ 20260223,
+ 951
+ ],
+ "commit": "f39220f2aaff5fc39e4268d6449a1a402a69cafa",
+ "sha256": "0gmcwsbndbc0n5jkxp5cx6irnph4lslcmvp33y7cn1nb0ikghqj9"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 2,
+ 1
+ ],
+ "commit": "f39220f2aaff5fc39e4268d6449a1a402a69cafa",
+ "sha256": "0gmcwsbndbc0n5jkxp5cx6irnph4lslcmvp33y7cn1nb0ikghqj9"
+ }
+ },
{
"ename": "nothing-theme",
"commit": "8f69a676e9adfb45f8fbd4467e86a4cb0fbf6ae8",
@@ -88961,28 +89893,28 @@
"repo": "tarsius/notmuch-addr",
"unstable": {
"version": [
- 20260101,
- 1842
+ 20260601,
+ 1530
],
"deps": [
"compat",
"notmuch"
],
- "commit": "f4cb7f273b44faa4c0c5c85b2d740086ca709c56",
- "sha256": "17nbzpq69drksjbi2ckwnp837kjapsg0s0y8xd1m3p706cvsnd6i"
+ "commit": "0cb6f9e0dc0e27b31b4849630f7e74bafaa78758",
+ "sha256": "07030f81pskm3v3fwqwrrjl3jmk9sw21hypmzv764zvifd4mq5z4"
},
"stable": {
"version": [
1,
1,
- 3
+ 4
],
"deps": [
"compat",
"notmuch"
],
- "commit": "f4cb7f273b44faa4c0c5c85b2d740086ca709c56",
- "sha256": "17nbzpq69drksjbi2ckwnp837kjapsg0s0y8xd1m3p706cvsnd6i"
+ "commit": "0cb6f9e0dc0e27b31b4849630f7e74bafaa78758",
+ "sha256": "07030f81pskm3v3fwqwrrjl3jmk9sw21hypmzv764zvifd4mq5z4"
}
},
{
@@ -89053,28 +89985,58 @@
"repo": "tarsius/notmuch-maildir",
"unstable": {
"version": [
- 20260101,
- 1843
+ 20260601,
+ 1530
],
"deps": [
"compat",
"notmuch"
],
- "commit": "ef3952c785cc4bc41366d798bff5edad1a945553",
- "sha256": "0an2y57q45dmwm0jp884m6bfnl2x6r1fxb41ckznylcmvwbn3km2"
+ "commit": "1ed7738468da9910a9bd32f3c44201ab1e9db242",
+ "sha256": "09zm428867fkmn5dbmn4l5d1lh8w5d6iwa09skakqmkq2ms4m334"
},
"stable": {
"version": [
1,
3,
- 2
+ 3
],
"deps": [
"compat",
"notmuch"
],
- "commit": "ef3952c785cc4bc41366d798bff5edad1a945553",
- "sha256": "0an2y57q45dmwm0jp884m6bfnl2x6r1fxb41ckznylcmvwbn3km2"
+ "commit": "1ed7738468da9910a9bd32f3c44201ab1e9db242",
+ "sha256": "09zm428867fkmn5dbmn4l5d1lh8w5d6iwa09skakqmkq2ms4m334"
+ }
+ },
+ {
+ "ename": "notmuch-multi",
+ "commit": "2eb9727941d4815bd04d47495df109a0320e6198",
+ "sha256": "0qd4kwgsr7f5gvylajlaq7p5lh222p70f6fynfbf96j063k1n0i6",
+ "fetcher": "github",
+ "repo": "pivaldi/notmuch-multi",
+ "unstable": {
+ "version": [
+ 20260616,
+ 722
+ ],
+ "deps": [
+ "notmuch"
+ ],
+ "commit": "baf954b1d510b0e298823ac9c4b1174d953a24c0",
+ "sha256": "1q47pj6i6rhxwwfi6kjz6g1k62z0lgwpmjl1g2kpngwci79s3mg9"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 2,
+ 3
+ ],
+ "deps": [
+ "notmuch"
+ ],
+ "commit": "baf954b1d510b0e298823ac9c4b1174d953a24c0",
+ "sha256": "1q47pj6i6rhxwwfi6kjz6g1k62z0lgwpmjl1g2kpngwci79s3mg9"
}
},
{
@@ -89085,30 +90047,30 @@
"repo": "tarsius/notmuch-transient",
"unstable": {
"version": [
- 20260401,
- 1226
+ 20260701,
+ 1305
],
"deps": [
"compat",
"notmuch",
"transient"
],
- "commit": "582ebaab67d3c59ec002ae23e0072e4ac9a2f13a",
- "sha256": "1k3fk086ijixaqcl2xj4izdncn2q42ldz72bh0rdpng7zn4bfb97"
+ "commit": "e60942fce3cb1f6a11533500c670ca4ac22186e5",
+ "sha256": "16kkqvr4bm52vmkz0rpy7icwzk2b796v13pgk1nnpvlq2z6j364n"
},
"stable": {
"version": [
1,
2,
- 0
+ 2
],
"deps": [
"compat",
"notmuch",
"transient"
],
- "commit": "582ebaab67d3c59ec002ae23e0072e4ac9a2f13a",
- "sha256": "1k3fk086ijixaqcl2xj4izdncn2q42ldz72bh0rdpng7zn4bfb97"
+ "commit": "e60942fce3cb1f6a11533500c670ca4ac22186e5",
+ "sha256": "16kkqvr4bm52vmkz0rpy7icwzk2b796v13pgk1nnpvlq2z6j364n"
}
},
{
@@ -89149,11 +90111,11 @@
"repo": "muirdm/emacs-nova-theme",
"unstable": {
"version": [
- 20260202,
- 501
+ 20260508,
+ 2135
],
- "commit": "6daa91ff091653cae7a94345ca579084f954effc",
- "sha256": "1m2hrg9nxc179v9zv4asr38wq4h1w5gk0ih1yfm0fhp8gknkjhw6"
+ "commit": "84915bcaf5b5ac3accd39853a17b59483e38a8ac",
+ "sha256": "16z33vg8jf0114l7g3h0ix8kjnb3ziqircpdwa1w21ykk3sczhq9"
}
},
{
@@ -89316,11 +90278,11 @@
"repo": "mattfidler/nsis-mode",
"unstable": {
"version": [
- 20260331,
- 53
+ 20260628,
+ 1801
],
- "commit": "0e1ec26a3943865f33e5590e26f5bc31684ad67e",
- "sha256": "0n3hlz00yjznns4d8rshfqwf1yvynr99qhsjkhd5njnfqswfi67d"
+ "commit": "5ee283dd4da0bf8ca90cc8210da6ad94899d50b9",
+ "sha256": "0f4a2qha8lgrnw14xrfaiz2s8wzka2p7llc0jymfyln52d2m10hc"
},
"stable": {
"version": [
@@ -89392,6 +90354,30 @@
"sha256": "0i1x0sd61c8k4q9ijgxyz21gvj1gah273990qfjzj9a25r4hzvlj"
}
},
+ {
+ "ename": "nucleo-completion",
+ "commit": "8f1634e697286e8cf318d112f698dd01b53f72e9",
+ "sha256": "08lhzg7wprax9maggk4vhlf8j9yna4q1qawbrva90lfm4a0yzhaw",
+ "fetcher": "github",
+ "repo": "kn66/nucleo-completion.el",
+ "unstable": {
+ "version": [
+ 20260530,
+ 1008
+ ],
+ "commit": "0f07a5bcd384716a3b79ab9e82005bb54f721122",
+ "sha256": "0lbif4isxnawj266cgxvh82fz8238g6vchfishqk9h8b025b6vc4"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 1,
+ 15
+ ],
+ "commit": "0f07a5bcd384716a3b79ab9e82005bb54f721122",
+ "sha256": "0lbif4isxnawj266cgxvh82fz8238g6vchfishqk9h8b025b6vc4"
+ }
+ },
{
"ename": "number",
"commit": "a84d58f0dfdf5f58205fb79d6d52d00637f443aa",
@@ -89547,11 +90533,11 @@
"repo": "herbertjones/nushell-ts-mode",
"unstable": {
"version": [
- 20230911,
- 152
+ 20260705,
+ 141
],
- "commit": "68afe1a8275880995b4d9a122fecf4accca15183",
- "sha256": "0kd4pqsfyjpi8wdrqnbl18hz3i64gvfs9aarmxq86v8vj519z0wd"
+ "commit": "49915cd99d62b7e743bd8cf9023a5819479d166f",
+ "sha256": "1bm9jn1laapvfqh6r47wsav47r44q7w108ysyj622fhd9d6lf022"
}
},
{
@@ -89657,29 +90643,6 @@
"sha256": "1qamw4x3yrygy8qkicy6smxksnsfkkp76hlnivswh7dm3fr23v6m"
}
},
- {
- "ename": "oai",
- "commit": "c726b8b2a8db2f008123086f72ec31c99f91c7ea",
- "sha256": "1kg3hkka9hp4w2jqg6b7170d2afdgvmlyx51sl05pdqynb3i3zzv",
- "fetcher": "github",
- "repo": "Anoncheg1/emacs-oai",
- "unstable": {
- "version": [
- 20260422,
- 858
- ],
- "commit": "fd2fea7b49a51a1e9d6690d35b1e2f14bf389692",
- "sha256": "00kfr18vscizfpf80a9n0yjkbrxlq9wkmrxsr0x18n458cck4fr5"
- },
- "stable": {
- "version": [
- 0,
- 2
- ],
- "commit": "48831f36bf7262d33cec19fa6bcafad6b7edfb59",
- "sha256": "1b4jp14zvxr3gi4qf3fvcimx24mh96x2nb4hpdjrbdl37wl2wcap"
- }
- },
{
"ename": "oauth",
"commit": "32bb970e1577ea36895cf45edec93c9b0878685e",
@@ -89723,15 +90686,15 @@
"repo": "conao3/oauth2-request.el",
"unstable": {
"version": [
- 20210215,
- 657
+ 20260516,
+ 830
],
"deps": [
"oauth2",
"request"
],
- "commit": "86ff048635e002b00e23d6bed2ec6f36c17bca8e",
- "sha256": "0z9vkssdxkikwjcb3vrby5dfcixy4lw9r2jp7g9nls6w88l184jf"
+ "commit": "f6b7ba42ecdfd4cc3588bd57bbb345bdae9b9cd6",
+ "sha256": "0hclg17qskz2hpxy056x9wgj0lg45z0vrp2h8aswxz7f9dk42x86"
}
},
{
@@ -91540,11 +92503,11 @@
"repo": "gynamics/oboe.el",
"unstable": {
"version": [
- 20260311,
- 1431
+ 20260611,
+ 1508
],
- "commit": "8205f2c6ea747179382423ec5317b70126faaeb2",
- "sha256": "0fbh6511s07b4rbx53h7yhfjp8hy57wpgq0ws872ic1r6wf5p1kp"
+ "commit": "07bd775c04b7c6cf552e34fb7ff5f7df9bb2f81c",
+ "sha256": "0yn3xhjyqqha61bs9shf9qxpkiij0yf0az2181ii8z1avysh501p"
}
},
{
@@ -91612,11 +92575,11 @@
"repo": "tarides/ocaml-eglot",
"unstable": {
"version": [
- 20260331,
- 1306
+ 20260526,
+ 2031
],
- "commit": "b3ab5f049838d96444d8dcaa83e0b9cb2e9ee4cc",
- "sha256": "06nsaxyzvgdjp3wy4hrjcyi904dwqk4wdvyfiprvgd93bqg18f46"
+ "commit": "1edc88567f45dba18f220fc705acd93e652e12ff",
+ "sha256": "0w8ca8d8hyyl6mglxyqwbgzbpd1hsjx6h0k602k1m38jc8l7zbbi"
},
"stable": {
"version": [
@@ -91960,11 +92923,50 @@
"repo": "swflint/ol-bible",
"unstable": {
"version": [
- 20250819,
- 1543
+ 20260714,
+ 1429
],
- "commit": "b67ff8c45d51af9fa71aa44bacb4a872f6b750c6",
- "sha256": "0ipx60r8vpjqyan40qv78xg3rbra84yf87bqndz87f6n3h52pc6g"
+ "commit": "711f9a984c23b0cc91a3a12a339e3d0ebb714a8f",
+ "sha256": "1433kbnxkhaml5zpkq64k40kyh4wribk963kj1scv7bncgsg4lgz"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 3,
+ 3
+ ],
+ "commit": "711f9a984c23b0cc91a3a12a339e3d0ebb714a8f",
+ "sha256": "1433kbnxkhaml5zpkq64k40kyh4wribk963kj1scv7bncgsg4lgz"
+ }
+ },
+ {
+ "ename": "ol-locate-file",
+ "commit": "7a34c96396078ece320d6d0a061526bb277c226c",
+ "sha256": "09dqv171lzhzzhql7pji6qb5zkpy9md8xydgvpynbvfzbwlb9qfl",
+ "fetcher": "github",
+ "repo": "p-snow/ol-locate-file",
+ "unstable": {
+ "version": [
+ 20260707,
+ 933
+ ],
+ "deps": [
+ "org"
+ ],
+ "commit": "30f84f72616f38975a2dd069dd9f729cb21cca32",
+ "sha256": "1zlkixv2w3hrbw1jgd6qhfllxbkliqxhv71y8ghj63508vwr34jn"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 1,
+ 2
+ ],
+ "deps": [
+ "org"
+ ],
+ "commit": "30f84f72616f38975a2dd069dd9f729cb21cca32",
+ "sha256": "1zlkixv2w3hrbw1jgd6qhfllxbkliqxhv71y8ghj63508vwr34jn"
}
},
{
@@ -91975,30 +92977,30 @@
"repo": "tarsius/ol-notmuch",
"unstable": {
"version": [
- 20260101,
- 1844
+ 20260601,
+ 1532
],
"deps": [
"compat",
"notmuch",
"org"
],
- "commit": "8f717329388935538fe433b9a15f1599edd9fcd5",
- "sha256": "0vlb6wgp314n6ilzfhz3j3lkzdpv4y0mngp6l2q04np9cqffkvf3"
+ "commit": "fba0b5790a4c9aafeab69fd329776d0b4afa9aac",
+ "sha256": "1d5dfr5ndl9lr045fy0wwf1fkxyx4v1viln4pv3gg771x0wxx3sk"
},
"stable": {
"version": [
2,
1,
- 3
+ 4
],
"deps": [
"compat",
"notmuch",
"org"
],
- "commit": "8f717329388935538fe433b9a15f1599edd9fcd5",
- "sha256": "0vlb6wgp314n6ilzfhz3j3lkzdpv4y0mngp6l2q04np9cqffkvf3"
+ "commit": "fba0b5790a4c9aafeab69fd329776d0b4afa9aac",
+ "sha256": "1d5dfr5ndl9lr045fy0wwf1fkxyx4v1viln4pv3gg771x0wxx3sk"
}
},
{
@@ -92081,11 +93083,11 @@
"repo": "rnkn/olivetti",
"unstable": {
"version": [
- 20260419,
- 703
+ 20260524,
+ 213
],
- "commit": "d1bdd439421865c20e907d9abe65840c57411bc9",
- "sha256": "1x88ncrv2mvj5lxwj79pix33mmlarh073vkx8ghdfhlk8qm05w5a"
+ "commit": "d2ccae56b442d9c5b06dd2481057abbd7eb82551",
+ "sha256": "1kxzyg453wwn3kr8216zh36z9sn17y4s69fqka1ax33q05074h5s"
},
"stable": {
"version": [
@@ -92105,11 +93107,14 @@
"repo": "captainflasmr/ollama-buddy",
"unstable": {
"version": [
- 20260421,
- 1616
+ 20260715,
+ 1551
],
- "commit": "62451e54c6f523d839d46a779ebd5c03e10c38c1",
- "sha256": "0n29n43jwscplyr8ybpb4fvsg9wcws7cslahwi9vsq0b6rg0ja2b"
+ "deps": [
+ "transient"
+ ],
+ "commit": "296dd738e43b91bd877743acd7e57139d437cc97",
+ "sha256": "17qgn2dkmgp1ka3w5vwfx99snjas1xib61g165xi9ahbl26fp37m"
},
"stable": {
"version": [
@@ -92870,25 +93875,25 @@
"repo": "oantolin/orderless",
"unstable": {
"version": [
- 20260124,
- 1000
+ 20260519,
+ 1029
],
"deps": [
"compat"
],
- "commit": "6e3a09d6026fe7d7d5a3caf9a3d777cc9841fe80",
- "sha256": "1r6sbyz8f3nkq5pr7iq3mm0q2dq3nq28xycf0x6xys7nsq2nink5"
+ "commit": "cebe19e3cf0f30604d1ed1bfaa74fff21a4e89a5",
+ "sha256": "0qw3lcn5iqmfa7lmkhrlzpwxm80k1bxb11h0w8akp6910iiq12b8"
},
"stable": {
"version": [
1,
- 6
+ 7
],
"deps": [
"compat"
],
- "commit": "6e3a09d6026fe7d7d5a3caf9a3d777cc9841fe80",
- "sha256": "1r6sbyz8f3nkq5pr7iq3mm0q2dq3nq28xycf0x6xys7nsq2nink5"
+ "commit": "cebe19e3cf0f30604d1ed1bfaa74fff21a4e89a5",
+ "sha256": "0qw3lcn5iqmfa7lmkhrlzpwxm80k1bxb11h0w8akp6910iiq12b8"
}
},
{
@@ -93137,30 +94142,30 @@
"repo": "eyeinsky/org-anki",
"unstable": {
"version": [
- 20260423,
- 741
+ 20260427,
+ 1354
],
"deps": [
"dash",
"promise",
"request"
],
- "commit": "2f44330aa2cd0a1f58259c9d83bb697fb0f7b0cc",
- "sha256": "0x33724pw8xk6vwksswn7wky1q3n0cxgy0s5s25hxjwzgfg8j4n1"
+ "commit": "fa5e66fc96a25477780b13cec1fca391260da81e",
+ "sha256": "1dxij5lm1vk58w87j9ckn38ax5kawcx5v4r2d6rmdvsphnzaxi81"
},
"stable": {
"version": [
4,
0,
- 4
+ 5
],
"deps": [
"dash",
"promise",
"request"
],
- "commit": "2f44330aa2cd0a1f58259c9d83bb697fb0f7b0cc",
- "sha256": "0x33724pw8xk6vwksswn7wky1q3n0cxgy0s5s25hxjwzgfg8j4n1"
+ "commit": "fa5e66fc96a25477780b13cec1fca391260da81e",
+ "sha256": "1dxij5lm1vk58w87j9ckn38ax5kawcx5v4r2d6rmdvsphnzaxi81"
}
},
{
@@ -93171,14 +94176,14 @@
"repo": "awth13/org-appear",
"unstable": {
"version": [
- 20240716,
- 1413
+ 20260716,
+ 2120
],
"deps": [
"org"
],
- "commit": "32ee50f8fdfa449bbc235617549c1bccb503cb09",
- "sha256": "1hfhnzhmbxrw4kz977s48x4nbq86vda5dvj00s2ima2i22b8l2z4"
+ "commit": "77d23efec5f5c25fc0798364d2b51a3ce3d8d518",
+ "sha256": "1kfgiaaq7lxjwczc693vv1yddz28zh4gfl48bf5bggka7b22n36c"
},
"stable": {
"version": [
@@ -93415,28 +94420,28 @@
"repo": "will-abb/org-aws-iam-role",
"unstable": {
"version": [
- 20260308,
- 1750
+ 20260625,
+ 102
],
"deps": [
"async",
"promise"
],
- "commit": "0175d5ac66f43f8d32db64a04421fddf57e10af7",
- "sha256": "0p1lcchdnmkk9xa2rl1l6dz6nwsb71xq2lbk4ivblmlyqckc1l5n"
+ "commit": "2e7072a8322a95d39c0019d41eebf9b93bb4a08d",
+ "sha256": "12fdk34w3kc8w58lsqmw7f5lkblr95hv2s9hhx6q38jd42payki1"
},
"stable": {
"version": [
1,
6,
- 6
+ 7
],
"deps": [
"async",
"promise"
],
- "commit": "4c6cdde1efd1f33a4e2434db7af7617ce590e90c",
- "sha256": "16d92ckk4dk4dgpj0wcw79wnls4r8mfkx2j6pipphp8qr8fi8xmd"
+ "commit": "49434f06ea8fe1ae3b1ea28555f435bafb6fc5f9",
+ "sha256": "12fdk34w3kc8w58lsqmw7f5lkblr95hv2s9hhx6q38jd42payki1"
}
},
{
@@ -93598,8 +94603,8 @@
"repo": "lepisma/org-books",
"unstable": {
"version": [
- 20251022,
- 1020
+ 20260528,
+ 819
],
"deps": [
"dash",
@@ -93609,14 +94614,14 @@
"org",
"s"
],
- "commit": "3f769e5a5a85a5eb6a2249ba971a3d77dc6e7d94",
- "sha256": "0nf5d5nc9x7sjg35hcjk19xspr6k722g60lmfrb855m4vxliril7"
+ "commit": "74b82acd56c7ddaec5b03135a4cbbd5330a9b020",
+ "sha256": "1j2yw6mpki3k5ak5ll93129y389gpbnl86y4c651gash3pd6k088"
},
"stable": {
"version": [
0,
3,
- 1
+ 2
],
"deps": [
"dash",
@@ -93626,8 +94631,8 @@
"org",
"s"
],
- "commit": "3f769e5a5a85a5eb6a2249ba971a3d77dc6e7d94",
- "sha256": "0nf5d5nc9x7sjg35hcjk19xspr6k722g60lmfrb855m4vxliril7"
+ "commit": "74b82acd56c7ddaec5b03135a4cbbd5330a9b020",
+ "sha256": "1j2yw6mpki3k5ak5ll93129y389gpbnl86y4c651gash3pd6k088"
}
},
{
@@ -93703,14 +94708,14 @@
"repo": "dengste/org-caldav",
"unstable": {
"version": [
- 20260222,
- 437
+ 20260501,
+ 8
],
"deps": [
"org"
],
- "commit": "2afbeca982d6b0987b1566eba5a4efa871546955",
- "sha256": "0f6pi583zb0i2323m5xdsh8w3f78a0f46nf3315mhdyrv74i7isv"
+ "commit": "14f541814df597395fddb44b6e4bdb7c20f72cbe",
+ "sha256": "09gc1q2zs4b66lnjmhbil5c0z84cl44si4qrjh30f6i21gbbbsnq"
},
"stable": {
"version": [
@@ -93792,11 +94797,11 @@
"repo": "drghirlanda/org-change",
"unstable": {
"version": [
- 20260227,
- 224
+ 20260719,
+ 1721
],
- "commit": "1da8d9384c42f559d41d6564e90c03c28b777387",
- "sha256": "17h0rv7gdv3lhfw2cp8d6hqcqwh7lk5dbk1141sk55vxnh45f7l7"
+ "commit": "5ee789e00157c7cbd88ae8b97f3408f303f1878e",
+ "sha256": "1imfrwqxbffzzshqx3m6c9bsp2bdzfvs2027avkp1j1y5mszlyyh"
}
},
{
@@ -93825,14 +94830,14 @@
"repo": "swflint/org-cite-overlay",
"unstable": {
"version": [
- 20251130,
- 328
+ 20260630,
+ 558
],
"deps": [
"citeproc"
],
- "commit": "b30e7fa63779ea6adf626227bc84c0b114e66c50",
- "sha256": "1hbk2zkj0sjm0qlv9lzaacnkp90ajfrahh1wmxcd3qc1r2dcchkd"
+ "commit": "40dde06e57f4b7f5335e9d5e076e7c2a2dcc7861",
+ "sha256": "05wa8apw2h4xgj5038gvfv9lvjad0db50y150a9s04frf08jy8ml"
},
"stable": {
"version": [
@@ -94440,10 +95445,10 @@
},
{
"ename": "org-elisp-help",
- "commit": "b0a9bf5046a4c3be8a83004d506bd258a6f7ff15",
- "sha256": "0a4wvz52hkcw5nrml3h1yp8w97vg5jw22wnpfbb827zh7iwb259h",
+ "commit": "b8bb0d76e4f23f7255a45360f2a89c5563fd7ed2",
+ "sha256": "1r0v1ppvdkxc6c1glysc78gq7cx5n8ig4kgrxvdbcydyy5xlss4n",
"fetcher": "github",
- "repo": "tarsius/org-elisp-help",
+ "repo": "emacsorphanage/org-elisp-help",
"unstable": {
"version": [
20161122,
@@ -94620,10 +95625,11 @@
"stable": {
"version": [
0,
- 21
+ 2,
+ 1
],
- "commit": "ba81ff4866326dae63b5eecf2643abb444de32a3",
- "sha256": "1596r4ix0yas2qwrf38kj14dxdrns0m5622kxvapg7kin67kbifk"
+ "commit": "5ca3994f2e13b342e0b9d353b66b892e34c7b784",
+ "sha256": "1sn90262rcrqmmwy45dz8vdd10sv7d5m2dmzz79f5lj6kh90h5zw"
}
},
{
@@ -94688,8 +95694,8 @@
"repo": "kidd/org-gcal.el",
"unstable": {
"version": [
- 20260225,
- 409
+ 20260612,
+ 1823
],
"deps": [
"aio",
@@ -94700,8 +95706,8 @@
"request",
"request-deferred"
],
- "commit": "0f46c08f60355729526e970e370defe624e84956",
- "sha256": "0cdscldk9fi9vvk8qc4qqhi61qm8n1y35d44jw52dxl4i6wfiggi"
+ "commit": "7304b592c283944db54ac83201d7be6f13a1f447",
+ "sha256": "1b701j2m4cn17bh8n3xmxh5d4bwg5i4spc1v9i9rcq96kpj4mkbj"
},
"stable": {
"version": [
@@ -94730,15 +95736,15 @@
"repo": "conao3/org-generate.el",
"unstable": {
"version": [
- 20240713,
- 159
+ 20260516,
+ 826
],
"deps": [
"mustache",
"org"
],
- "commit": "39dbf8b5c3d225438f7d65e0dc7e9766d61d4c81",
- "sha256": "03xd0cm0splhiznd8sdaipjvifc8pvsyj82s7mj5f3nzpqvv1m9m"
+ "commit": "e77b9cc063fdc035110ac2feea0799316e7e5339",
+ "sha256": "041q7mn1kw4wj4kr5gbmqc7nwibqxx9rhzswhwcqh0gvk65pz38a"
},
"stable": {
"version": [
@@ -94849,8 +95855,8 @@
"repo": "Trevoke/org-gtd.el",
"unstable": {
"version": [
- 20260303,
- 1359
+ 20260605,
+ 2210
],
"deps": [
"compat",
@@ -94860,8 +95866,8 @@
"org-edna",
"transient"
],
- "commit": "1b93028024f587b3da133b4bcae473f92bb60bb6",
- "sha256": "0y4rjjxbwgczv3g2mpakx36hp5zbvwkmh9s4594r2vi5mlfllmh5"
+ "commit": "01a12298033304b751628f41c088e9467d80532c",
+ "sha256": "1rppn7x9aamag0y7jwpfvbg7gga6bdxh7armrdinpsh1bdrfz2ff"
},
"stable": {
"version": [
@@ -94881,6 +95887,38 @@
"sha256": "0y4rjjxbwgczv3g2mpakx36hp5zbvwkmh9s4594r2vi5mlfllmh5"
}
},
+ {
+ "ename": "org-habit-ng",
+ "commit": "7df3f295c7c16c0b0d3fb7852c3325dfb1c708aa",
+ "sha256": "0s3lxw45c606dc8r3szr9ccfm8bddr7qppmzwzb0bbhp6079zcll",
+ "fetcher": "codeberg",
+ "repo": "Trevoke/org-habit-ng",
+ "unstable": {
+ "version": [
+ 20260713,
+ 1625
+ ],
+ "deps": [
+ "org",
+ "transient"
+ ],
+ "commit": "8710d55411af41d5505236d33bd5b7ad05807441",
+ "sha256": "0xdm81y0ws09a4nlv76qm7zzdg30blb0xmb9ryhm8rg8i0nvjpfm"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 7,
+ 1
+ ],
+ "deps": [
+ "org",
+ "transient"
+ ],
+ "commit": "7fdd0331edbce773ca87f6544c501accd32711f9",
+ "sha256": "05hi7xig2sml8m5ayzl117rnvdx9k404mqs9mw1lznd7zwm5szwi"
+ }
+ },
{
"ename": "org-habit-stats",
"commit": "dd9fbd4b21685225c2dedafd7eee40fa58910cb1",
@@ -94920,6 +95958,29 @@
"sha256": "1s1wlhbd0k10p1d93f7vi29jsm2kh2ws7bqwc9r2fjqd0hgcaz8x"
}
},
+ {
+ "ename": "org-history",
+ "commit": "7d3ea7283f6f1b6dde81dfb00b656855f50810e3",
+ "sha256": "1pwmzmpkgb00frw6id30ni3kcn1k85bvblz12r5lj12hvk6bb7bh",
+ "fetcher": "github",
+ "repo": "Anoncheg1/emacs-org-history",
+ "unstable": {
+ "version": [
+ 20260720,
+ 250
+ ],
+ "commit": "8a24e4c85c3cce0c91e6aaf37748abccd0cea3ba",
+ "sha256": "0qk21l399d6whcb8q9qrgyzffkzf3mbv7y4ljm4isy5hng3qffmj"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 5
+ ],
+ "commit": "518040a62ee8c63e94e7c3147103b0a558c72a29",
+ "sha256": "1djjnhln4y1g7h5khd5g7n95nigaddj4h7hia4hx6pgica2pyfyx"
+ }
+ },
{
"ename": "org-hyperscheduler",
"commit": "ecb150e9b5370e6a7a5e5d64a577c2a3b58b8a81",
@@ -95009,8 +96070,8 @@
},
{
"ename": "org-incoming",
- "commit": "abd059db58d08c881df15cc8c89fca90252771fe",
- "sha256": "0fcrh4q5726zw4q33qh667qh0hbq9z21qchsfs0asmmj4rbmznzj",
+ "commit": "7b5d551c4669ab4e91a7a54019ec64f48b62f372",
+ "sha256": "0vwni4kbyy2fxypmanzc3dyzim4nz2bmbp0a9w71c7ffi27v25p1",
"fetcher": "github",
"repo": "tinloaf/org-incoming",
"unstable": {
@@ -95188,14 +96249,14 @@
"repo": "a-manumohan/org-invox",
"unstable": {
"version": [
- 20260408,
- 1633
+ 20260624,
+ 405
],
"deps": [
"org"
],
- "commit": "6725996a43a1f223caf202eed9d81efd08adf5a7",
- "sha256": "0yd5gadhb0s2y8r2n8p2l98k7lygfcr58llb4mw3arri88gc1a6q"
+ "commit": "0373529a0c922fcca62c7cb604099323bc869f76",
+ "sha256": "13q23lliqcn1jb7jshl25krgw3lrfcllgq570hgjd7bzf50cs2lr"
}
},
{
@@ -95226,16 +96287,30 @@
"repo": "beacoder/org-ivy-search",
"unstable": {
"version": [
- 20250305,
- 159
+ 20260713,
+ 622
],
"deps": [
"beacon",
"ivy",
"org"
],
- "commit": "d09472c5ae5c099bee17fb0e4f3f017ce7ebd031",
- "sha256": "1p48k2fjiig8kfpgrnsrpcyfpyfm17gjr80p0r52bq6ijh2z53bj"
+ "commit": "5aa418961c6dae576e800df459ad6dbd7740b4b4",
+ "sha256": "03h0d83zs5qwrs7i7zi96jwwjr4idyw4rngs864vz46kz8amk6nd"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 1,
+ 8
+ ],
+ "deps": [
+ "beacon",
+ "ivy",
+ "org"
+ ],
+ "commit": "5aa418961c6dae576e800df459ad6dbd7740b4b4",
+ "sha256": "03h0d83zs5qwrs7i7zi96jwwjr4idyw4rngs864vz46kz8amk6nd"
}
},
{
@@ -95432,6 +96507,21 @@
"sha256": "0f61xy0hv3pjbhx9wmhpbi43nis90rsx1ljw9kirp99h64gg0jgd"
}
},
+ {
+ "ename": "org-lark",
+ "commit": "6f590a3e7e130a87efa3bcb4e166682849dbe103",
+ "sha256": "1ydwk0vb5xvb6hdhpqys2568lz8dnm2l26kqbs0k4wncpxmyphm9",
+ "fetcher": "github",
+ "repo": "bbw9n/org-lark",
+ "unstable": {
+ "version": [
+ 20260614,
+ 319
+ ],
+ "commit": "ebbe9ed102be2bf00b698f1280a305d8f3b0d38d",
+ "sha256": "1a4njnhr9cih9v4mnrf9fpdqbfv5x3rywrs7pk3nhggl81890j40"
+ }
+ },
{
"ename": "org-latex-impatient",
"commit": "5c49e1970a12617b00c79ec2d7112da8c9d8f4f7",
@@ -95461,18 +96551,16 @@
"repo": "seokbeomKim/org-linenote",
"unstable": {
"version": [
- 20241231,
- 616
+ 20260518,
+ 1058
],
"deps": [
"eldoc",
"fringe-helper",
- "lsp-mode",
- "projectile",
"vertico"
],
- "commit": "407d2ac834d1de82dd1e37f4642f74a81cf03350",
- "sha256": "12scyxmiirc50qqwxql976560ccipyjrlnxsifwhc7p6xr0jylii"
+ "commit": "35a7940c1c81a1faf8f4b58a633cdcdd89c99509",
+ "sha256": "0za47d07qkg1h4baa0jhwd8sgpd56dxkznqjw46524dhzgl9b9mk"
}
},
{
@@ -95483,15 +96571,15 @@
"url": "https://repo.or.cz/org-link-beautify.git",
"unstable": {
"version": [
- 20260417,
- 705
+ 20260426,
+ 557
],
"deps": [
"nerd-icons",
"qrencode"
],
- "commit": "273e5b250fa2cc9b2dbbb63d9a7225536116fbd7",
- "sha256": "1zhwq9mlx6bpfvqqgzmk210na7s8z9dc2cgs031by9b983rjh0bs"
+ "commit": "7ef11d4fe9874324985006875b9c96f227c6c10b",
+ "sha256": "1blyiszcrddyr9qjp39fmbz81zbv273d8d2iyxqfpl69nwmvixwq"
},
"stable": {
"version": [
@@ -95576,19 +96664,19 @@
"repo": "Anoncheg1/emacs-org-links",
"unstable": {
"version": [
- 20260423,
- 1949
+ 20260717,
+ 1827
],
- "commit": "cd2e9c074576e44469d84b5827933a035cf493c5",
- "sha256": "01z3pph23cciv92l007s0z9rlhfgyj2ihy264s3l02csssnijma7"
+ "commit": "d46c02edbdbd9f070b0492ffbe9f4ceea3322737",
+ "sha256": "0z5lrb25gd1yd4amja3izj5qqrh8v8pw7q5qqjz064hxkmi83xmx"
},
"stable": {
"version": [
0,
- 3
+ 4
],
- "commit": "c6e8cc6753d3b880b09a6e28f244ada48debfb2b",
- "sha256": "1vnqg43f94viixlqqjj0vfrpshzj3inpn36j5ds3f3icjzg7i16z"
+ "commit": "d46c02edbdbd9f070b0492ffbe9f4ceea3322737",
+ "sha256": "0z5lrb25gd1yd4amja3izj5qqrh8v8pw7q5qqjz064hxkmi83xmx"
}
},
{
@@ -95675,14 +96763,14 @@
"repo": "laurynas-biveinis/org-mcp",
"unstable": {
"version": [
- 20251111,
- 1319
+ 20260714,
+ 1520
],
"deps": [
"mcp-server-lib"
],
- "commit": "70fef64ee096c13eb33389c4803c5825e146c60e",
- "sha256": "0r76wcyxmg4glhgj7576jbb0ax7zxbzl7rkg3fx13yfaaxqyw90f"
+ "commit": "29a2310ed17283e379c322dbf7a1b957a6f2395c",
+ "sha256": "0djdlq4w3zc02q9kr7y4iv1v3v1ia0aq7jpngvzvrb61233fngq9"
},
"stable": {
"version": [
@@ -95773,6 +96861,36 @@
"sha256": "0y0yjb0w6s5yxklcxkmylmw031plxhl9dvachx325mb9qcwskycp"
}
},
+ {
+ "ename": "org-mindmap",
+ "commit": "c7b17ab04bff23ccea6710224cb46e69c987af61",
+ "sha256": "0iknjygxiwqsr66vrid2685mbs1xdh5hi0b7lfdfv9ccjn2xq7xp",
+ "fetcher": "github",
+ "repo": "krvkir/org-mindmap",
+ "unstable": {
+ "version": [
+ 20260617,
+ 1609
+ ],
+ "deps": [
+ "org"
+ ],
+ "commit": "128e8fb853718bb4a04aff29703b927276a8b24c",
+ "sha256": "14658gdvk3ii4krli2gr018iwbgdwdkg9lxkpzh4hsnz28fm1v5b"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 3,
+ 0
+ ],
+ "deps": [
+ "org"
+ ],
+ "commit": "de81481bff9e33568b7df202478e95aff9e7b4af",
+ "sha256": "1i184clw6vagpd15r2v9582yvf3wfqkxarwb4x2mly01s11zzvr0"
+ }
+ },
{
"ename": "org-ml",
"commit": "95cc2843698e2341697a223a463c4d51348aec5e",
@@ -95833,58 +96951,27 @@
"repo": "minad/org-modern",
"unstable": {
"version": [
- 20260325,
- 721
+ 20260707,
+ 1016
],
"deps": [
"compat",
"org"
],
- "commit": "0e385ab42887b8589292527735ccd4d2345fa904",
- "sha256": "1kdbaxx11gc8q52szfs9hp3is17v04z0jr147d06sxmky5rigphx"
+ "commit": "d41bedbab849745bd10e300b8d93a17bc78a5ad6",
+ "sha256": "10yidx97sb0sk6rp4fry4dl5psspjc4mz0aqir53p84nv08y5y6j"
},
"stable": {
"version": [
1,
- 13
+ 14
],
"deps": [
"compat",
"org"
],
- "commit": "f514a2570da0f7a8ff0d72641458dbcf96ccf702",
- "sha256": "16i1nwdilhpjlphpbwi8vjfwfb721gm0mm37hjx570wx4sskvg30"
- }
- },
- {
- "ename": "org-movies",
- "commit": "ea06dc48003ba3c4f8e70fef4738cdb306362198",
- "sha256": "1l4vd091vqhcs7qgws762x4cdnalj1hiq31d6l740miskc8nb8hr",
- "fetcher": "github",
- "repo": "teeann/org-movies",
- "unstable": {
- "version": [
- 20210920,
- 101
- ],
- "deps": [
- "org",
- "request"
- ],
- "commit": "e96fecaffa2924de64a507aa31d2934e667ee1ea",
- "sha256": "1h514knqys20nv9qknxdl5y6rgmyymyr42i07dar8hln9vj0ywqm"
- },
- "stable": {
- "version": [
- 0,
- 1
- ],
- "deps": [
- "org",
- "request"
- ],
- "commit": "e96fecaffa2924de64a507aa31d2934e667ee1ea",
- "sha256": "1h514knqys20nv9qknxdl5y6rgmyymyr42i07dar8hln9vj0ywqm"
+ "commit": "4855ade77ab17de7587c37bde12a0afeab342783",
+ "sha256": "18yg3bg0mnhk4hkx5402rb5d6lyy5qn9pp5m2cigwjaa3316prk9"
}
},
{
@@ -95934,14 +97021,14 @@
"repo": "jeremy-compostella/org-msg",
"unstable": {
"version": [
- 20260211,
- 901
+ 20260507,
+ 725
],
"deps": [
"htmlize"
],
- "commit": "aa608b399586fb771ad37045a837f8286a0b6124",
- "sha256": "0n02g88jybzsx0lqqpzag7hkrlvy3gh6irphgm5wsx42w312k1jl"
+ "commit": "7b45df759340f3e388e84f497052b7cf3a41698c",
+ "sha256": "1h44pc7l4racn3rhc705rslwsnk7hmkad3508qdd2raadpj452ja"
}
},
{
@@ -96912,28 +97999,28 @@
"repo": "mrcnski/org-recur",
"unstable": {
"version": [
- 20230124,
- 1532
+ 20260707,
+ 2223
],
"deps": [
"dash",
"org"
],
- "commit": "628099883a63d219f76cd9631cc914fe6ec8a3e3",
- "sha256": "0s2n62y3qc72ldzpaq2jz9335h532s566499n346nx21l4qsqdz6"
+ "commit": "680731635038bf453dc75242bf007e886be8c765",
+ "sha256": "1a81zah2fhflc2wcv7kl4c15m0gbhz8flwi9hk19gb5l9k8sm9m1"
},
"stable": {
"version": [
1,
- 3,
- 3
+ 4,
+ 0
],
"deps": [
"dash",
"org"
],
- "commit": "628099883a63d219f76cd9631cc914fe6ec8a3e3",
- "sha256": "0s2n62y3qc72ldzpaq2jz9335h532s566499n346nx21l4qsqdz6"
+ "commit": "680731635038bf453dc75242bf007e886be8c765",
+ "sha256": "1a81zah2fhflc2wcv7kl4c15m0gbhz8flwi9hk19gb5l9k8sm9m1"
}
},
{
@@ -97026,20 +98113,20 @@
"repo": "TomoeMami/org-repeat-by-cron.el",
"unstable": {
"version": [
- 20260303,
- 726
+ 20260718,
+ 441
],
- "commit": "9a382e817dc63d5f8a6c74bd9d9233a14f1f3c96",
- "sha256": "188ax1qyjgaz5qj5w1g67hnn7xg9m55j6ymqhd1gks52z0g67cyf"
+ "commit": "3009d28e434e1c44cf55490cfa54d5668107aca9",
+ "sha256": "0fc3cvcqyg7nqhfhvyy4gcwh2lavpc9af7yvsn82gqjmr8fi366m"
},
"stable": {
"version": [
1,
1,
- 6
+ 7
],
- "commit": "9a382e817dc63d5f8a6c74bd9d9233a14f1f3c96",
- "sha256": "188ax1qyjgaz5qj5w1g67hnn7xg9m55j6ymqhd1gks52z0g67cyf"
+ "commit": "a52d57016d350b10baca2229dc832311f77e6ebb",
+ "sha256": "195c8b1id0g65yajzmn880zlcsp42f69q96y0l4d0f4zp134pdm5"
}
},
{
@@ -97145,8 +98232,8 @@
"repo": "org-roam/org-roam",
"unstable": {
"version": [
- 20260423,
- 437
+ 20260425,
+ 1623
],
"deps": [
"compat",
@@ -97154,8 +98241,8 @@
"magit-section",
"org"
],
- "commit": "d42da0e594b5737d25e3662e482d110f29a2668f",
- "sha256": "0nvbzz6q4kvv8zqwnlwkk8m469vaf8b8zh0l3d8j2gsk4whn22y3"
+ "commit": "c54c523dec175695645399705606ea19056a3053",
+ "sha256": "18l0ka57l5j9js4dm50k174riyrb510yfaylyj8m0yqyrz6jbkn4"
},
"stable": {
"version": [
@@ -97244,8 +98331,8 @@
"repo": "ahmed-shariff/org-roam-ql",
"unstable": {
"version": [
- 20260322,
- 808
+ 20260627,
+ 2312
],
"deps": [
"dash",
@@ -97254,8 +98341,8 @@
"s",
"transient"
],
- "commit": "b6b6a25029503c27c2d4e4e0ca17a0ab82611470",
- "sha256": "1zqpr2hvxisk0lqf6j9ak79s338wwlf4xbvkqh752pm5idlia7fj"
+ "commit": "89bdd60367f95309334e8804b465e80c1aab9a78",
+ "sha256": "0ywbih47j81s6zn5x6ilcjx41blx4vg91aqpdiqkhzz8kwpgwggn"
},
"stable": {
"version": [
@@ -97281,8 +98368,8 @@
"repo": "ahmed-shariff/org-roam-ql",
"unstable": {
"version": [
- 20260322,
- 808
+ 20260627,
+ 829
],
"deps": [
"org-ql",
@@ -97291,8 +98378,8 @@
"s",
"transient"
],
- "commit": "b6b6a25029503c27c2d4e4e0ca17a0ab82611470",
- "sha256": "1zqpr2hvxisk0lqf6j9ak79s338wwlf4xbvkqh752pm5idlia7fj"
+ "commit": "196e6cd37f3eb7418ef250664d62b2cbd67a88e3",
+ "sha256": "0bl9k29fp59ph431j2132gv3g82ca6v4wbw21cbqy3map4ac2qfv"
},
"stable": {
"version": [
@@ -97641,8 +98728,8 @@
"repo": "tanrax/org-social.el",
"unstable": {
"version": [
- 20260418,
- 1402
+ 20260525,
+ 725
],
"deps": [
"async-http-queue",
@@ -97651,22 +98738,23 @@
"request",
"seq"
],
- "commit": "613dcf8b65216a32afee1c42bb3273f6c4e1cd91",
- "sha256": "14nnnfwp2wqhvv4pcwhasynrjgp6yyqkisfsqmsc87w0akfaziph"
+ "commit": "754f16c45585fb733fd521558b572f03bc964708",
+ "sha256": "0m5nrhp1d6ndj48fyh547fdk8gcldwxxczki8hklbpiv1w9s4jsb"
},
"stable": {
"version": [
2,
- 11
+ 13
],
"deps": [
+ "async-http-queue",
"emojify",
"org",
"request",
"seq"
],
- "commit": "367ab5cf6ae12715bb9cade7a8eb45cf8d7f8723",
- "sha256": "1aw0zfg898ggyn139n0x2fgaygayl14gv48mq59zw6b8ffkrff52"
+ "commit": "1dbc252a45881388f9f7cbbf51d5bfd5c0a80d80",
+ "sha256": "165c50rfzqjij3cm6cxw82gzh71zk5w6zswvzb3qp37rdwjynynf"
}
},
{
@@ -97750,15 +98838,15 @@
"repo": "bohonghuang/org-srs",
"unstable": {
"version": [
- 20251223,
- 1556
+ 20260628,
+ 1143
],
"deps": [
"fsrs",
"org"
],
- "commit": "c0aff45392b1f836fd943467cc266cef50899a44",
- "sha256": "0bvczpn93afdng9xnr3licgmv3yw4rdmsbn45206r756738capn9"
+ "commit": "e6e5fbfcb8beb520141edac647ccb76af9b71df6",
+ "sha256": "199qc0ikz9b6hbrpdpc737byqscp2rnh3syvjp71jwf2r7kwkz6h"
}
},
{
@@ -98088,14 +99176,14 @@
"url": "https://repo.or.cz/org-tag-beautify.git",
"unstable": {
"version": [
- 20260123,
- 235
+ 20260606,
+ 516
],
"deps": [
"nerd-icons"
],
- "commit": "3b0e03b5a7929b2c0b107d90355e0a0f03490aef",
- "sha256": "1y2lilr1yjfcrbb6vhc2h8vknh0pwrfrwajim1h8c0xcc6ilzl9g"
+ "commit": "af491d225771af377d65961e8a5f251b82a0a09a",
+ "sha256": "1q2bw2s0hs75babxs0wj7hylx0f98gnfv269bifymz6k7y2smwwx"
}
},
{
@@ -98214,20 +99302,20 @@
"repo": "rul/org-tempus",
"unstable": {
"version": [
- 20260222,
- 1840
+ 20260601,
+ 1225
],
- "commit": "f3912ccd9032bea28ff0ee4b3d49a90e17097e26",
- "sha256": "158gq02r7vcpbl93s2f1zdwbz4ccyn39i3m6w7bz2c6q3w3ymja6"
+ "commit": "b5562ca4e3344dde465b5cbd86275336aeac44df",
+ "sha256": "1gl4bcs7xq0bq4bs7mhmkr24a8n44v7iip2qfp423r4v1a3qk0ry"
},
"stable": {
"version": [
0,
0,
- 1
+ 2
],
- "commit": "e07a05d66c084cf4796c2683f4320d9360af8b83",
- "sha256": "1rsybp4827z7z3d66rzjp7kjyb84c12igzxqz26kfzhcd9dlqpav"
+ "commit": "2226ef0ae21022b9a343983847bce3e6bb07d63f",
+ "sha256": "0q3pc66naw399f13jgwmknyvsggxjaiyblxi9p77382rizqgkyb1"
}
},
{
@@ -98898,14 +99986,14 @@
"repo": "colonelpanic8/org-window-habit",
"unstable": {
"version": [
- 20260406,
- 1805
+ 20260620,
+ 108
],
"deps": [
"dash"
],
- "commit": "dcf1d7b896bd2c0a706c00c0d0daab2fa9e49828",
- "sha256": "1016w3zar3l5ry7fvvvidk4fb2hxbb54yizj1583ca57yf40qxid"
+ "commit": "19a6e070502e2b0d9aa85f12eda48debb44a479b",
+ "sha256": "16lhsvdi0niaab5cy3ga0h6y63lwqpjiav6ks95lhkf9fjrwa80z"
},
"stable": {
"version": [
@@ -99280,32 +100368,34 @@
"repo": "magit/orgit",
"unstable": {
"version": [
- 20260301,
- 1255
+ 20260717,
+ 1740
],
"deps": [
"compat",
"cond-let",
+ "llama",
"magit",
"org"
],
- "commit": "4fb91faff3bf32dac5f6f932654c280cd1f190f7",
- "sha256": "1qa07q41383f79iv4r5ykxrb1fs2drk6h3qxkb3z7ymhjfbcifli"
+ "commit": "47b3568fce775c756fb5bb3545c2edd48b8e2fc1",
+ "sha256": "1yd1rk4cfr7n2fxidmpcpza8zwnzmf6sayp2i0mclrx31y88nmhl"
},
"stable": {
"version": [
2,
- 1,
- 2
+ 2,
+ 0
],
"deps": [
"compat",
"cond-let",
+ "llama",
"magit",
"org"
],
- "commit": "4fb91faff3bf32dac5f6f932654c280cd1f190f7",
- "sha256": "1qa07q41383f79iv4r5ykxrb1fs2drk6h3qxkb3z7ymhjfbcifli"
+ "commit": "7c4827cd04953166f71eaec151ad1c50872fc680",
+ "sha256": "1730vha6pa10cnz5j5nyzf8wxnnkck6ncmi4i3sqmhfxalf901xk"
}
},
{
@@ -99352,8 +100442,8 @@
"repo": "magit/orgit-forge",
"unstable": {
"version": [
- 20260401,
- 1227
+ 20260717,
+ 1424
],
"deps": [
"compat",
@@ -99363,14 +100453,14 @@
"org",
"orgit"
],
- "commit": "8e4496d7f7f84fab3e36d10883386c02f43a67e7",
- "sha256": "0fawwd2yys89kyp1q03xng9azgmbdai067m60x0agahrpvgdrysm"
+ "commit": "f812864aae188bbbc36725c87bd92909ff0dda3a",
+ "sha256": "030zdna7kx9bcrbgkn8fmkk4bx3mab6gwhly5dzh4wdf908px1d6"
},
"stable": {
"version": [
1,
1,
- 2
+ 3
],
"deps": [
"compat",
@@ -99380,42 +100470,44 @@
"org",
"orgit"
],
- "commit": "8e4496d7f7f84fab3e36d10883386c02f43a67e7",
- "sha256": "0fawwd2yys89kyp1q03xng9azgmbdai067m60x0agahrpvgdrysm"
+ "commit": "c421620af3fb38ab4654f745f51370471b65cf4e",
+ "sha256": "1qaq722m0sr1awdgm6fbl52h8h9qa532lisnnnrh578b8aqs3yvv"
}
},
{
"ename": "orglink",
- "commit": "be9b8e97cda6af91d54d402887f225e3a0caf055",
- "sha256": "0ldrvvqs3hlazj0dch162gsbnbxcg6fgrxid8p7w9gj19vbcl52b",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "1xnrj81fzzbczrh6cirgy9d4gsc6g6qydh1s0zzya1da1sgsd1sb",
"fetcher": "github",
"repo": "tarsius/orglink",
"unstable": {
"version": [
- 20260101,
- 1845
+ 20260601,
+ 1536
],
"deps": [
"compat",
+ "llama",
"org",
"seq"
],
- "commit": "0de830edc6ffc0b07b95284f545ffe7d7c37dfb8",
- "sha256": "11173ja0cga82fp7qxw900l8wg5fhygi7d5qn0vi5hrh1rwyg9da"
+ "commit": "e4805628e731021cf360ae7e61dcb40ae1e1992f",
+ "sha256": "17n6njdp824h0dkdpryw0hzkbaj344c5ya2a5ddiivxbx7i56x2y"
},
"stable": {
"version": [
1,
- 2,
- 9
+ 3,
+ 0
],
"deps": [
"compat",
+ "llama",
"org",
"seq"
],
- "commit": "0de830edc6ffc0b07b95284f545ffe7d7c37dfb8",
- "sha256": "11173ja0cga82fp7qxw900l8wg5fhygi7d5qn0vi5hrh1rwyg9da"
+ "commit": "e4805628e731021cf360ae7e61dcb40ae1e1992f",
+ "sha256": "17n6njdp824h0dkdpryw0hzkbaj344c5ya2a5ddiivxbx7i56x2y"
}
},
{
@@ -99561,11 +100653,11 @@
"repo": "tbanel/orgaggregate",
"unstable": {
"version": [
- 20260412,
- 811
+ 20260717,
+ 1115
],
- "commit": "348394cbd9d8a25b61bccd284196c97a065b7013",
- "sha256": "1jriyc1ir4agljygsq4qc7qdr57231ba2gy1p64pccad01nkpbxl"
+ "commit": "dc2fdb7149b07f0a4454a36a05b3a174efdfcb6e",
+ "sha256": "0x7g01yklayxhrsamg3av3sdsdb1077gpddy1098nflvqvsf30kn"
}
},
{
@@ -99606,11 +100698,11 @@
"repo": "tbanel/orgtbljoin",
"unstable": {
"version": [
- 20260412,
- 844
+ 20260705,
+ 1412
],
- "commit": "37883c21e85e71797538d154226e24666bc73047",
- "sha256": "0asvlwp7z350v7iphmvfrsgqmw8bfgqvi3bcgpxf2w7i6624hdks"
+ "commit": "cd637a44e69b8ac3bdb9d99bee5066be279da1d8",
+ "sha256": "165bb0yhx1fm11cld61lrhfivg4x4pn65r5baciqcfwblsiifxpw"
}
},
{
@@ -99769,25 +100861,25 @@
"repo": "minad/osm",
"unstable": {
"version": [
- 20260125,
- 1200
+ 20260705,
+ 1259
],
"deps": [
"compat"
],
- "commit": "19c9c958dd530a1ba606fc1074a28523af40ec28",
- "sha256": "1lwjnxafhy5f83ydlccd47r2ramgwdlgzlj15h82yxsl4l0sq380"
+ "commit": "d6167ca4f99bead657ac6f7f163c1fcf9b34267f",
+ "sha256": "11nn4rvjqs8f43gfazpghf67ihd994jd53z2pwfjhk8w8dav0gc2"
},
"stable": {
"version": [
2,
- 2
+ 4
],
"deps": [
"compat"
],
- "commit": "19c9c958dd530a1ba606fc1074a28523af40ec28",
- "sha256": "1lwjnxafhy5f83ydlccd47r2ramgwdlgzlj15h82yxsl4l0sq380"
+ "commit": "d6167ca4f99bead657ac6f7f163c1fcf9b34267f",
+ "sha256": "11nn4rvjqs8f43gfazpghf67ihd994jd53z2pwfjhk8w8dav0gc2"
}
},
{
@@ -99853,14 +100945,14 @@
"repo": "xuchunyang/osx-dictionary.el",
"unstable": {
"version": [
- 20240330,
- 942
+ 20260520,
+ 1154
],
"deps": [
"cl-lib"
],
- "commit": "6abfd6908b0dc773020466225c908000870b383b",
- "sha256": "16mvkrs82g6zhaa10r28v8br0cshv1bsbywyb1qkc8hdkj1hh37j"
+ "commit": "8e6897844c4d6ff6039b31569058273632afea16",
+ "sha256": "003rkv79rwaz2zy12vf5hb10sqs00b1ds8398swmj7k48d4la5p2"
},
"stable": {
"version": [
@@ -100042,26 +101134,26 @@
"repo": "abougouffa/one-tab-per-project",
"unstable": {
"version": [
- 20260211,
- 2247
+ 20260606,
+ 13
],
"deps": [
"compat"
],
- "commit": "2c5bfb6ef06d27a9589394339dadb856580a5a84",
- "sha256": "1qql95w8mdsb6scvi7xg0xc3c33pw385a1fvm1vilwbr1s7y32yd"
+ "commit": "ef1460cf7cd978554f894325303a46e629ea2633",
+ "sha256": "0qg4ysrcgw252flsr5hh0diy7f8wgplnib6r0rfdqswfprnhwlqm"
},
"stable": {
"version": [
3,
- 4,
- 1
+ 5,
+ 4
],
"deps": [
"compat"
],
- "commit": "2c5bfb6ef06d27a9589394339dadb856580a5a84",
- "sha256": "1qql95w8mdsb6scvi7xg0xc3c33pw385a1fvm1vilwbr1s7y32yd"
+ "commit": "ef1460cf7cd978554f894325303a46e629ea2633",
+ "sha256": "0qg4ysrcgw252flsr5hh0diy7f8wgplnib6r0rfdqswfprnhwlqm"
}
},
{
@@ -100116,20 +101208,26 @@
"repo": "jamescherti/outline-indent.el",
"unstable": {
"version": [
- 20260416,
- 1902
+ 20260715,
+ 1813
],
- "commit": "b25886d0b6a6de1b6c3e881230e41b76ad8652e0",
- "sha256": "1bmfi4bc0zjczivq7dc7zb1z016sswpz83czsfp0ggpm4xfjv79w"
+ "deps": [
+ "kirigami"
+ ],
+ "commit": "6e12bf82611644584536f87f49d51042b2ec0339",
+ "sha256": "1j340v1s8f53vbk1db81j46n13v9bxrbm2ix8qxfqmk3mqw7m965"
},
"stable": {
"version": [
1,
- 1,
- 8
+ 2,
+ 0
],
- "commit": "85d1f66e82454829fcda5aa40334bb47be10586c",
- "sha256": "1r12xvlxr6mylz0jkc63hwdsapw73xcqvqry5xbyqc6d778m0zsz"
+ "deps": [
+ "kirigami"
+ ],
+ "commit": "57b9f4bb9724a82f7e5e15e2a62e04373aee3d08",
+ "sha256": "0d9qm0a5vnnhfslpxvnsf5pcqv35wqqv4niqsq7m64fcn9z4lnlh"
}
},
{
@@ -100155,26 +101253,50 @@
"repo": "tarsius/outline-minor-faces",
"unstable": {
"version": [
- 20260101,
- 1824
+ 20260601,
+ 1519
],
"deps": [
"compat"
],
- "commit": "ad3ec4620b79ae5c3e840ed1f47f892c5f917d8c",
- "sha256": "00l2pmvyglbl6440fkk0sm31a5l7gss4pmdnw1ar7vaqz4afwi4d"
+ "commit": "71705d0708459f765403968567a329a76c38cf62",
+ "sha256": "0xp8vk85kby4gvxb97hs4lpc1kd67m4jw185l87ssvc52v9yq9kv"
},
"stable": {
"version": [
1,
2,
- 2
+ 4
],
"deps": [
"compat"
],
- "commit": "ad3ec4620b79ae5c3e840ed1f47f892c5f917d8c",
- "sha256": "00l2pmvyglbl6440fkk0sm31a5l7gss4pmdnw1ar7vaqz4afwi4d"
+ "commit": "71705d0708459f765403968567a329a76c38cf62",
+ "sha256": "0xp8vk85kby4gvxb97hs4lpc1kd67m4jw185l87ssvc52v9yq9kv"
+ }
+ },
+ {
+ "ename": "outline-stars",
+ "commit": "cad99860ad193dbbc7ca8c3bfea6e36b3f140e90",
+ "sha256": "0f0342misllapvwa7qfmwxb78cmzzypb179bgnv1pwskqzd8ivfs",
+ "fetcher": "codeberg",
+ "repo": "phmcc/outline-stars",
+ "unstable": {
+ "version": [
+ 20260427,
+ 2355
+ ],
+ "commit": "a08f50d395a1a74406da97b22ab22d72ffc4df51",
+ "sha256": "0y7hivf5i9i0kazc5b7vs1i7jjgh1bc4raimq2ryh0f3fazv0r9s"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 4,
+ 3
+ ],
+ "commit": "a08f50d395a1a74406da97b22ab22d72ffc4df51",
+ "sha256": "0y7hivf5i9i0kazc5b7vs1i7jjgh1bc4raimq2ryh0f3fazv0r9s"
}
},
{
@@ -100341,8 +101463,8 @@
"repo": "vale981/overleaf.el",
"unstable": {
"version": [
- 20260417,
- 1854
+ 20260604,
+ 1734
],
"deps": [
"plz",
@@ -100350,8 +101472,8 @@
"webdriver",
"websocket"
],
- "commit": "62c31c609d7d96ec6c592eec40fba41735e40875",
- "sha256": "1bj7jq63v52gn8jaa7bsi22ac321j21cmsxd9vl5kvvagzrjqbiv"
+ "commit": "506fe07b79ceefce3e53196711e10700da344d49",
+ "sha256": "0hrn0dvk7pqhw63s015hfav7d8fcsfn9sx46dzjn59mfqy9qwm5c"
},
"stable": {
"version": [
@@ -100825,28 +101947,28 @@
"repo": "jlumpe/ox-json",
"unstable": {
"version": [
- 20250825,
- 125
+ 20260629,
+ 631
],
"deps": [
"org",
"s"
],
- "commit": "0f7c63b9bbbf6c8b2547e46adc7f34289869105f",
- "sha256": "1xlqd4rb5br3illbxg7k0rbspxfns2sr5wn7w9k546sb6lg5p4i2"
+ "commit": "3fa63a260fc58b09eed5dd8c36904ae80148adbe",
+ "sha256": "0x8bbg37qcg2ckqrjns6kx61pr4sbg9la3h2ywbsivrbw5bjagg2"
},
"stable": {
"version": [
0,
- 3,
+ 4,
0
],
"deps": [
"org",
"s"
],
- "commit": "57a43e3b3e400d219b80008c51373796b844c6b8",
- "sha256": "12fxflyh92awjwfj5gwp8frrbjc63kj7ajlwbsmzgpnp9rr43fpx"
+ "commit": "3fa63a260fc58b09eed5dd8c36904ae80148adbe",
+ "sha256": "0x8bbg37qcg2ckqrjns6kx61pr4sbg9la3h2ywbsivrbw5bjagg2"
}
},
{
@@ -100884,16 +102006,16 @@
"repo": "zzamboni/ox-leanpub",
"unstable": {
"version": [
- 20260419,
- 2104
+ 20260506,
+ 759
],
"deps": [
"org",
"ox-gfm",
"s"
],
- "commit": "cfd521786c281ad7fa38212016226af80e163329",
- "sha256": "1mf3s459b4s2ykj9af0j9afx3c77gndnyzlfb38ml2c17pl3jrsa"
+ "commit": "6197366b8b534484e9cba4a2dfaf82aa37432917",
+ "sha256": "1bi9g218w9wr98x26gaqs62148gar1cfxli4c1pzns7667qb3zb7"
}
},
{
@@ -100972,6 +102094,24 @@
"sha256": "10rw12gmg3d6fvkqijmjnk5bdpigvm8fy34435mwg7raw0gmlq75"
}
},
+ {
+ "ename": "ox-mom",
+ "commit": "00b85145e379e14c76d549732ed9426200d0e98f",
+ "sha256": "04rfcyaw9yni19y011j2ydbg1d8jzyjgwppys6pf6zwxwpbhk0i0",
+ "fetcher": "github",
+ "repo": "hinman/ox-mom",
+ "unstable": {
+ "version": [
+ 20260707,
+ 243
+ ],
+ "deps": [
+ "org"
+ ],
+ "commit": "40711a3681cbeb4cbcb520371297bf3d932a333b",
+ "sha256": "0yr6hy0rb46d7vyzbs6hcsiicdl4l390mc0zvr6hqi4nrlx82w8k"
+ }
+ },
{
"ename": "ox-nikola",
"commit": "4e3fa1b0728ad3058376800ec5e2e9e3847c1d2f",
@@ -101032,15 +102172,15 @@
"repo": "0x60df/ox-qmd",
"unstable": {
"version": [
- 20230325,
- 1315
+ 20260514,
+ 1442
],
"deps": [
"mimetypes",
"request"
],
- "commit": "0b5fa1e20aaa48d93600e1b8d09c3b6f55af3373",
- "sha256": "1n0il25a5dwn0dh5a8q3190yfbmfgdi17k1b4vyj83gl7ga40v0d"
+ "commit": "7a1a4f2679a38e216130d749dfbb38e2d63b713f",
+ "sha256": "03svx2fc99kwlyvmsv9xm0j8hhnpvczl3l9x8366q5w1acg8pp53"
}
},
{
@@ -101158,20 +102298,20 @@
},
{
"ename": "ox-rss",
- "commit": "0cc83cda4df36ceb9584d02c36392b6c1fcce4d0",
- "sha256": "0ngc4v5gg7py623nxl56wm6qrijryvsrbasjgxpn74cx3lblw8m4",
+ "commit": "f04da02bca96384a837ba680b297b9f58b0a8db2",
+ "sha256": "097k7yc9gkvz0l6rrsgic1jwlsi6pv6wbd1hhxl90rx78vbm4r4k",
"fetcher": "github",
- "repo": "BenedictHW/ox-rss",
+ "repo": "bhw-foss/ox-rss",
"unstable": {
"version": [
- 20230408,
- 231
+ 20260512,
+ 2231
],
"deps": [
"org"
],
- "commit": "ee7347fca8f10a4b53075a8d1e3cac3aff6e6dac",
- "sha256": "19fz5vvad8j3p1sm39spmby1h3h9djw5hlvwsdssk6bdpmvlcjp0"
+ "commit": "c83db3dc521d0dd423b0f24e57b7eaa798ab5e40",
+ "sha256": "1dynf55r19iwci8b9dm20vi00r22z8949wzh12ya84ab4g29i9nq"
}
},
{
@@ -101414,14 +102554,14 @@
"repo": "jmpunkt/ox-typst",
"unstable": {
"version": [
- 20260419,
- 1805
+ 20260502,
+ 1009
],
"deps": [
"org"
],
- "commit": "d05bdf1676c7564af6d87b438c669e93904c2b10",
- "sha256": "10y15nhb3lkcykxd12wl8maf7ygvshif6r1nnk4hxjacsa8p6dkc"
+ "commit": "3e499609a201405a6064144792dab14e3cc19b93",
+ "sha256": "0aw2wz33s053vb1qxwshsblw6vd86qgdvjnrh73ala2fdfaqn0bs"
}
},
{
@@ -101505,6 +102645,24 @@
"sha256": "1n57bzsp73g5iqdnhc4jhsylif93h4kkl7zgqi1i9b8bi90sqrl1"
}
},
+ {
+ "ename": "ox-zola",
+ "commit": "1e9831885355ff0d936446f45a848108093d8cb8",
+ "sha256": "1jjgnnl7l7qamjdbxbv7qmz5ghqn3wgm1mcdkdrx465f0pzva18i",
+ "fetcher": "github",
+ "repo": "gicrisf/ox-zola",
+ "unstable": {
+ "version": [
+ 20260506,
+ 1952
+ ],
+ "deps": [
+ "ox-hugo"
+ ],
+ "commit": "c6ab97d53b471ed53803e44169ac5d3766d72cbe",
+ "sha256": "09d7n0bc2axgkmj3yhl4smnjscsignlajrrhx8dj9hyvvp3pdkdv"
+ }
+ },
{
"ename": "p-search",
"commit": "90bf1ee96813129643468b0c1d5d1a435d40ff30",
@@ -101700,29 +102858,32 @@
},
{
"ename": "package-build",
- "commit": "948fb86b710aafe6bc71f95554655dfdfcab0cca",
- "sha256": "0kr82j9rbvmapsph0jdxy24p0b8mcnj01sg1myywf428nf30cgbh",
+ "commit": "d328de2f2fed796535509e3a1b4e5d9194c5739d",
+ "sha256": "0aykmvx2rqk4zzgivl9hdzbnhk2p6alzyd2g5l1hx7sxigpwawhc",
"fetcher": "github",
"repo": "melpa/package-build",
"unstable": {
"version": [
- 20260421,
- 2136
+ 20260701,
+ 1334
],
"deps": [
"compat"
],
- "commit": "2db42a9050923c2245bb525345a8b12bd6c0973a",
- "sha256": "15iajmnrgm1lcl792km7c34nfw9r2dhy5hrzpvv4raijvcbhxkpq"
+ "commit": "f19a7f58cf4b2e573a6d551d8d3dbe265c2566b4",
+ "sha256": "00v3fi2ssq9z9z5qf40b49z2yw9dsjkhcdfzy7qk1wdgv0pjbq0h"
},
"stable": {
"version": [
- 4,
+ 5,
0,
0
],
- "commit": "0598e92cd61aa5196f78576fac7675bcff4ab217",
- "sha256": "165gbrc1h1yj764kn3qq2y1551y04lqnklfa0k87gqgd38q5v985"
+ "deps": [
+ "compat"
+ ],
+ "commit": "f19a7f58cf4b2e573a6d551d8d3dbe265c2566b4",
+ "sha256": "00v3fi2ssq9z9z5qf40b49z2yw9dsjkhcdfzy7qk1wdgv0pjbq0h"
}
},
{
@@ -101748,14 +102909,14 @@
"repo": "purcell/package-lint",
"unstable": {
"version": [
- 20251205,
- 1720
+ 20260619,
+ 1246
],
"deps": [
"let-alist"
],
- "commit": "1c37329703a507fa357302cf6fc29d4f2fe631a8",
- "sha256": "1c5icb7j8jc5d38svpfbxm4m4pdlb3xq4b9m2234wiwf2a128dkz"
+ "commit": "35996f478d81e51dae4fa30d051f741895d07399",
+ "sha256": "10yp7x36d0zj6pkr8asnyjfh9is40869vmyyx5k6vg0ar294x9l0"
},
"stable": {
"version": [
@@ -102133,11 +103294,11 @@
"repo": "coldnew/pangu-spacing",
"unstable": {
"version": [
- 20250124,
- 142
+ 20260717,
+ 230
],
- "commit": "6509df9c90bbdb9321a756f7ea15bb2b60ed2530",
- "sha256": "1i52qmky0azwp5pn20nh1zrikn71m95v4hgfc3l3cgq2rqkzzm8x"
+ "commit": "72de84e999aafa753a635b14bb199fc46d322945",
+ "sha256": "0dg13cqgzw5b49gmrv7fvmji2a23z5irkv7k4plsvsi2ci435zn7"
},
"stable": {
"version": [
@@ -102355,26 +103516,26 @@
"repo": "tarsius/paren-face",
"unstable": {
"version": [
- 20260101,
- 1846
+ 20260601,
+ 1519
],
"deps": [
"compat"
],
- "commit": "2c279a236404b2eebacb435aa92d5e9c97939c03",
- "sha256": "06ypi3hgrr9rigcb9gy5j4l9f3z7lnz1rssv1pqda55srkvcp39x"
+ "commit": "57307b5ea75e07d2dc0c64c7e3eeadee3369a7aa",
+ "sha256": "11g3wg79kvg4nkm2knabpzsf0lcpnak94kkdb5cscp3w3fg3x5a7"
},
"stable": {
"version": [
1,
2,
- 3
+ 4
],
"deps": [
"compat"
],
- "commit": "2c279a236404b2eebacb435aa92d5e9c97939c03",
- "sha256": "06ypi3hgrr9rigcb9gy5j4l9f3z7lnz1rssv1pqda55srkvcp39x"
+ "commit": "57307b5ea75e07d2dc0c64c7e3eeadee3369a7aa",
+ "sha256": "11g3wg79kvg4nkm2knabpzsf0lcpnak94kkdb5cscp3w3fg3x5a7"
}
},
{
@@ -102403,17 +103564,26 @@
},
{
"ename": "parenthesis-face",
- "commit": "890e94376ea0b6ada2c49a0a3e11b2a59aab7caa",
- "sha256": "078c97yjxp6344i4d5v5k07yxpm9y0qbjcmgim89hmgmira8iqvx",
+ "commit": "fefa3d4feab1be45b0169c31781a1e995d0963ae",
+ "sha256": "1vwbwl0vyazrlc4d5dfa6301h4b33ix8bxjbmgh6d6facgj2rrxx",
"fetcher": "github",
"repo": "tarsius/paren-face",
"unstable": {
"version": [
- 20260101,
- 1846
+ 20260601,
+ 1519
],
- "commit": "2c279a236404b2eebacb435aa92d5e9c97939c03",
- "sha256": "06ypi3hgrr9rigcb9gy5j4l9f3z7lnz1rssv1pqda55srkvcp39x"
+ "commit": "57307b5ea75e07d2dc0c64c7e3eeadee3369a7aa",
+ "sha256": "11g3wg79kvg4nkm2knabpzsf0lcpnak94kkdb5cscp3w3fg3x5a7"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 2,
+ 4
+ ],
+ "commit": "57307b5ea75e07d2dc0c64c7e3eeadee3369a7aa",
+ "sha256": "11g3wg79kvg4nkm2knabpzsf0lcpnak94kkdb5cscp3w3fg3x5a7"
}
},
{
@@ -102576,11 +103746,11 @@
"repo": "clojure-emacs/parseclj",
"unstable": {
"version": [
- 20231203,
- 1905
+ 20260526,
+ 1843
],
- "commit": "6af22372e0fe14df882dd300b22b12ba2d7e00b0",
- "sha256": "1iz7qbsq4whmb3iqy777jlm47chjp62313hc6nfcp0lfqsanmcmv"
+ "commit": "ca828c202c026e45bd60503984cf510d904cae50",
+ "sha256": "1j992kbnl4f25cfb0bjjv2pcl6zxrlg4fvf2r3740a9vmigrl82q"
},
"stable": {
"version": [
@@ -102600,15 +103770,15 @@
"repo": "clojure-emacs/parseedn",
"unstable": {
"version": [
- 20231203,
- 1909
+ 20260601,
+ 1258
],
"deps": [
"map",
"parseclj"
],
- "commit": "3407e4530a367b6c2b857dae261cdbb67a440aaa",
- "sha256": "0b2jralm5lm4z4lpkn8ygzfga67xsalaszc8gqqv36khmz2mrckc"
+ "commit": "1a28a88e2aabd99b41e02f491d6b8874ec128d7d",
+ "sha256": "1y25vvbknm5bsqhy7d6sjk6f3f2apmf3f84l1949pz3hcr7nh938"
},
"stable": {
"version": [
@@ -103038,20 +104208,20 @@
"repo": "jamescherti/pathaction.el",
"unstable": {
"version": [
- 20260328,
- 1613
+ 20260715,
+ 1811
],
- "commit": "f3010d3485d7939f252dee59e4b335cb28e5069c",
- "sha256": "0k9b4a9psbz4zdbnfriayklbhgqglwlagcamk0srizjhs08xrqhy"
+ "commit": "5d80485e7f006a827fcd9b55f40481785abf31ee",
+ "sha256": "1ri12d9w0kkzn5jkcqs1ifq391m1ddd0vshwmc87rbaj37hpblzc"
},
"stable": {
"version": [
1,
0,
- 1
+ 2
],
- "commit": "5082e3492a7f760cda3c2764f4b9a38b18bd44f3",
- "sha256": "09ckg9l854kk203x08lacdmvhx70gngrv7z6x90lamc5qbc87ddc"
+ "commit": "19dc91a8da6574dc7f80b263cc3a909be1c300e4",
+ "sha256": "1f1bqaya4xbwqaljfqffvn3lahh4s9q3nflhj20ny86cd5zcgdaj"
}
},
{
@@ -103392,10 +104562,11 @@
"stable": {
"version": [
0,
- 23
+ 2,
+ 3
],
- "commit": "8f7516510459477c2ff368a7fde4cc68cead2402",
- "sha256": "0xx35811kxlrnsa2ydkgli60xvqjd9i7cx7j5z8zidzgzkywdnj5"
+ "commit": "15594c3348ed7febef31f99d709b128f267035eb",
+ "sha256": "0xap7i2x8mqpwr52xdqb8c6lhjmxm1d6car2533ynyr4k2fn4lw5"
}
},
{
@@ -103505,14 +104676,14 @@
"repo": "emacsomancer/pdffontetc",
"unstable": {
"version": [
- 20260325,
- 1408
+ 20260624,
+ 1756
],
"deps": [
"pdf-tools"
],
- "commit": "b2db6c1377c080d9425836efa19690df3eb44516",
- "sha256": "11kpb4k0xjnxxnf8dw1rvw2hnflag7w2k7a680gcvywpllp5zl6z"
+ "commit": "063529d92f833ca4342f88a4928f6ec74826ccd0",
+ "sha256": "0pw0f1fifni6y6hy05bbbgx8s2w40as2y1n56a938jkxhmwxdi1m"
}
},
{
@@ -103770,20 +104941,20 @@
"repo": "jamescherti/persist-text-scale.el",
"unstable": {
"version": [
- 20260326,
- 1609
+ 20260718,
+ 1651
],
- "commit": "e835e76bad452b1e5a59eb9a0fef650e0680ab90",
- "sha256": "0vvpd0vrzy2rk6xsqnfp65jbm1ls4z1v8syji6rlz2sfnkv94m73"
+ "commit": "2535c7cda4d196d2c4f6311b27cff88aefabb14f",
+ "sha256": "0qrr99ss7pcj2j3azcqy8rimbw0w7k34zc12bkaxd7ky3ah2h614"
},
"stable": {
"version": [
1,
0,
- 4
+ 7
],
- "commit": "8098af6ba9ff251d19f9e41b39c84f7b9b758f26",
- "sha256": "006j8sdzp671wj07bs5lfr21lcfb81c2gn0kn13jphmki14s7i02"
+ "commit": "2535c7cda4d196d2c4f6311b27cff88aefabb14f",
+ "sha256": "0qrr99ss7pcj2j3azcqy8rimbw0w7k34zc12bkaxd7ky3ah2h614"
}
},
{
@@ -103995,25 +105166,25 @@
"repo": "nex3/perspective-el",
"unstable": {
"version": [
- 20260403,
- 538
+ 20260717,
+ 1853
],
"deps": [
"cl-lib"
],
- "commit": "230cabf4c1406569bac416cff9502ae23648e3f8",
- "sha256": "0k7bfhjb71ippzrc65i0rbngj65wbhzl5rxygjshwf83rvfwimab"
+ "commit": "352a06502582646c8a79d5e1a0c36f1b61b6e6cc",
+ "sha256": "02l9hhp6qk6djs1p3q5zg4yjr8m46ax7n6553had1b1kvhbxbxm5"
},
"stable": {
"version": [
2,
- 21
+ 22
],
"deps": [
"cl-lib"
],
- "commit": "64ef5eaaab9e7564e8b9788ce6d0e2359daf5dca",
- "sha256": "1v22m3l7p89wsdy0ydv0w91v0h9wjl1v33gim756dz8zcx8m1p8y"
+ "commit": "451b0f0272c732f5e822b0c0c590d9dd0937915e",
+ "sha256": "1x1s2yji3w86mv0hfpma4axj70gqhavazmv0vj4kxwc24r8fj8xr"
}
},
{
@@ -104126,16 +105297,16 @@
"repo": "wyuenho/emacs-pet",
"unstable": {
"version": [
- 20251217,
- 2147
+ 20260716,
+ 2214
],
"deps": [
"f",
"map",
"seq"
],
- "commit": "222f1da892462d7bea5c7a7bbcb6b5a5f4cb2158",
- "sha256": "0rm2a1cs4gv30968sap84jm0r5m4mmyi9rbwmdwklfb53698x3v9"
+ "commit": "c0d856782d74d205a9359ae2f5c623d8152d20d1",
+ "sha256": "0z50piq8wp239xc5hx51q4907yyqnmijx6x325hp60rk7kdabkga"
},
"stable": {
"version": [
@@ -104184,25 +105355,25 @@
"repo": "emarsden/pg-el",
"unstable": {
"version": [
- 20260418,
- 1149
+ 20260719,
+ 1514
],
"deps": [
"peg"
],
- "commit": "e82be0a8a69042c102119b9c7d59619f3a2277a3",
- "sha256": "164kfd0lc1qw3wnlxqyjmqd3yhmkkf81qmgdx0kydlrij8a7z594"
+ "commit": "6d4b528cfd1e7f776eb0e4c14d84668fa69a041b",
+ "sha256": "1v19h9q7lsiqaxpfqhlvg16iqjj47hin4h1qgmw8kngy68l6w4js"
},
"stable": {
"version": [
0,
- 65
+ 68
],
"deps": [
"peg"
],
- "commit": "e82be0a8a69042c102119b9c7d59619f3a2277a3",
- "sha256": "164kfd0lc1qw3wnlxqyjmqd3yhmkkf81qmgdx0kydlrij8a7z594"
+ "commit": "6d4b528cfd1e7f776eb0e4c14d84668fa69a041b",
+ "sha256": "1v19h9q7lsiqaxpfqhlvg16iqjj47hin4h1qgmw8kngy68l6w4js"
}
},
{
@@ -104445,6 +105616,36 @@
"sha256": "02fhna45wq3wja51yrwm0xysdvyck1r0a3dx41i5sh89504gl6a9"
}
},
+ {
+ "ename": "phony",
+ "commit": "763d5a953e1495c8abe8f86c873e4f78bef75050",
+ "sha256": "1dd4w968n5ni03i9m6dzf88b2bzadxdskhgs1xi8ah0b64ka8g4q",
+ "fetcher": "github",
+ "repo": "ErikPrantare/phony.el",
+ "unstable": {
+ "version": [
+ 20260630,
+ 1002
+ ],
+ "deps": [
+ "simulacrum"
+ ],
+ "commit": "b155ee3686c732cfe02a4bcd5f3e07fdc39dca35",
+ "sha256": "058lmswkvx22vlwk149hb3n8wmph9rp18n925ghy46w4qhvqd0s5"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 0,
+ 1
+ ],
+ "deps": [
+ "simulacrum"
+ ],
+ "commit": "b155ee3686c732cfe02a4bcd5f3e07fdc39dca35",
+ "sha256": "058lmswkvx22vlwk149hb3n8wmph9rp18n925ghy46w4qhvqd0s5"
+ }
+ },
{
"ename": "php-boris",
"commit": "855ea20024b606314f8590129259747cac0bcc97",
@@ -104529,11 +105730,11 @@
"repo": "emacs-php/php-mode",
"unstable": {
"version": [
- 20250602,
- 1308
+ 20260719,
+ 209
],
- "commit": "40b8abed3079771e060dd99a56703520dabf5be4",
- "sha256": "0f558vrgsb354jp4q7z52s3ybpybwjw2yxr8vlj58jg7dam6smyp"
+ "commit": "6ebe4a618aa64db3e15f809b036c1b1a6d05c030",
+ "sha256": "1fcdncv959ssqnbsjkjy2ay82h4qkrr6wzr1911b39gf78s9xn0h"
},
"stable": {
"version": [
@@ -104674,21 +105875,21 @@
"repo": "emacs-php/phpstan.el",
"unstable": {
"version": [
- 20260218,
- 453
+ 20260717,
+ 1734
],
"deps": [
"compat",
"php-mode",
"php-runtime"
],
- "commit": "77fba8fe9d63661e940b392a0e4b573e7edafb7b",
- "sha256": "0q08wx0k7n86v4jdspkjdjn1kmjy4cf1qrkj71qi0ga943vwz11l"
+ "commit": "00942a5d5b28560bd08f7355d131074772bb7a01",
+ "sha256": "1hf5jxj1amvv9ac1jm5bly38xfhj5k0rmsg3sd9kd888hi95gph8"
},
"stable": {
"version": [
0,
- 9,
+ 10,
0
],
"deps": [
@@ -104696,8 +105897,8 @@
"php-mode",
"php-runtime"
],
- "commit": "206573c8de58654384823765dcca636c9e35e909",
- "sha256": "12qzjy3zz0lk439y0y9gl5pirzlf52li3lbyjjmq7lq6yg30qzxm"
+ "commit": "00942a5d5b28560bd08f7355d131074772bb7a01",
+ "sha256": "1hf5jxj1amvv9ac1jm5bly38xfhj5k0rmsg3sd9kd888hi95gph8"
}
},
{
@@ -104776,30 +105977,30 @@
"repo": "dnouri/pi-coding-agent",
"unstable": {
"version": [
- 20260418,
- 1713
+ 20260720,
+ 258
],
"deps": [
"markdown-table-wrap",
"md-ts-mode",
"transient"
],
- "commit": "a07e1d0a3a2dbbac6f1d2a92656d2239f0dcb2c7",
- "sha256": "03cdqhsqml5sbpa2pm06hphavhnyq1b11nany1cpg7hshixz37wr"
+ "commit": "3e6b04514592e0a38189552a686b9dbe51453bd7",
+ "sha256": "07zl6qw3ai2z3318qp0x0rmjil9x10f0h1fashxdrv6cm57cqxbz"
},
"stable": {
"version": [
2,
- 2,
- 1
+ 6,
+ 0
],
"deps": [
"markdown-table-wrap",
"md-ts-mode",
"transient"
],
- "commit": "ca0d60474cede8198329a939a902f51081543612",
- "sha256": "16vhk22gdcyl87l1fknkzqkr7nxyqrs2hlghr3vwlmcj9igr4cfa"
+ "commit": "2b6a27feb6d224aeb9b680941a925c7c42948c59",
+ "sha256": "16x82wk0rz7cvwl3y13rjvy06chbzm4301wp4zh1gal7dh7h158y"
}
},
{
@@ -104870,20 +106071,20 @@
"repo": "oliverepper/pif",
"unstable": {
"version": [
- 20250207,
- 1624
+ 20260504,
+ 1621
],
- "commit": "c993c1446ff3460a2f599b84ac81e9f00c4c7333",
- "sha256": "02ywbxfg7s1hsiwi2zqvhlqd8wfhfzasb3n6gsj0rl5ix8c7gsmw"
+ "commit": "72978dddffa3d9c68c6510c3a0381ffcdb691188",
+ "sha256": "1pvvkg31w10am3fldkq7lgi7f0bjmzg5kwgfjiwfbnd24j7mi03x"
},
"stable": {
"version": [
0,
0,
- 6
+ 7
],
- "commit": "c993c1446ff3460a2f599b84ac81e9f00c4c7333",
- "sha256": "02ywbxfg7s1hsiwi2zqvhlqd8wfhfzasb3n6gsj0rl5ix8c7gsmw"
+ "commit": "85e55528967d5aee87ae84b306c1cd292a6705c9",
+ "sha256": "0628k53zcbid37dggn7jpsf2yqzi2hcrd3vr897xh0jcczb76m9s"
}
},
{
@@ -105118,20 +106319,20 @@
"repo": "Anoncheg1/pinyin-isearch",
"unstable": {
"version": [
- 20260323,
- 1922
+ 20260718,
+ 1804
],
- "commit": "935e582668d6a9a55fd9dd262d46ed1f2bb98f35",
- "sha256": "0zvx6xn8sl8gx3n4kk3i13vq55v5qjmhaxhk5k63cagjh0pzyy47"
+ "commit": "9834cb04fb59d8cb600059f20bf297522c764deb",
+ "sha256": "0h2cg9x8hpjxhdbql9lnncdij65lq70dl0imhqx2xkc32si9v97m"
},
"stable": {
"version": [
1,
- 6,
- 9
+ 7,
+ 1
],
- "commit": "1ed4218cb50b4de614c11dc41ab6053255271ae7",
- "sha256": "0m9j819q7mm5q418g160c0bickjij37w5j7c0lzhwvpilhmh2cny"
+ "commit": "9834cb04fb59d8cb600059f20bf297522c764deb",
+ "sha256": "0h2cg9x8hpjxhdbql9lnncdij65lq70dl0imhqx2xkc32si9v97m"
}
},
{
@@ -105455,10 +106656,10 @@
},
{
"ename": "plain-theme",
- "commit": "0742da1d0fb37ebf2d66eba4533b914056399036",
- "sha256": "0igncivhnzzirglmz451czx69cwshjkigqvqddj0a77b1cwszfw8",
+ "commit": "6f4c3e13ccb622527676b03dc23db47ff8152cb5",
+ "sha256": "1krlsb7sr1bl7rvplblkbsf41pbazp64l3d2vklxiqmdp95vv865",
"fetcher": "github",
- "repo": "yegortimoshenko/plain-theme",
+ "repo": "lukateras/plain-theme",
"unstable": {
"version": [
20171124,
@@ -105524,28 +106725,28 @@
"repo": "skuro/plantuml-mode",
"unstable": {
"version": [
- 20250705,
- 1148
+ 20260514,
+ 1745
],
"deps": [
"dash",
"deflate"
],
- "commit": "0a19d9988879c57b176dd4c03f59003644f9c9b0",
- "sha256": "02nck5f8f7vlwi57kb33679d912dq2n2g9ipvkp0x9dsivz1fpi3"
+ "commit": "a4a63efa4a3980bfbd825bfb3a263c6664401e79",
+ "sha256": "18hibqf0yb8fdj3niy9l1i9j0diskg433f5jqnkg3fifm058fsf2"
},
"stable": {
"version": [
1,
- 8,
+ 9,
0
],
"deps": [
"dash",
"deflate"
],
- "commit": "0eaf340303cf65ddd20cfb65fee1137b52ea229f",
- "sha256": "1h68bfczpvbzi29ggl3dciiz5187px14xi2sz5pywwl84sg5x2b5"
+ "commit": "7a93f7ce96cff5bd48ca4cde70d3bbf789839613",
+ "sha256": "125w8lz89wvr1micz470rvyfv1qq71xxjl0brimrbsb6ql5vrqam"
}
},
{
@@ -106568,11 +107769,11 @@
"repo": "polymode/polymode",
"unstable": {
"version": [
- 20260302,
- 1043
+ 20260505,
+ 1803
],
- "commit": "4604f55cc020c75562526fb76b723e5e242c97c0",
- "sha256": "1g36ss0ms12ah84dxdbdw0kim6wymrf2hmpsvd7lnszc19ip6zf9"
+ "commit": "8cb72fa5dcc0d98746c680043dc121edc7621e3a",
+ "sha256": "02vzq5v6kykw389lymgb5cri8h4p3rwjbwg67zkhbd1mrfa9525g"
},
"stable": {
"version": [
@@ -106645,15 +107846,15 @@
"repo": "kn66/pomo-cat.el",
"unstable": {
"version": [
- 20260224,
- 2202
+ 20260627,
+ 147
],
"deps": [
"popon",
"posframe"
],
- "commit": "f9eab9a897598c6da713b1730739dd2e41e70fda",
- "sha256": "0l9ad8lmxhr8ni1ivf4fwmsawwkri6rn8ms7iibs5z342jqy4bn7"
+ "commit": "499241d5277429e0d9b37f866460e93e6b1c3a02",
+ "sha256": "0g8rhjzbp6abj97xcxfwkh7343p84s8068hr04093abji36dgkdw"
}
},
{
@@ -106823,20 +108024,20 @@
},
{
"ename": "popterm",
- "commit": "e4d79aed1b29079b096ae3453d874fd830b369b7",
- "sha256": "1k0kzr7ax1mzpv60ln1ky2x06yl7psznga6x4mnh52xxgwh1f95m",
+ "commit": "166bc08a635f453e7204dc0515e0a8b3efef0159",
+ "sha256": "0sg55hmxn0hx5lmwr7r58c3d46aaxxsddg955a4vyf8pk7dkmcxg",
"fetcher": "github",
- "repo": "CsBigDataHub/popterm.el",
+ "repo": "ChetanKoneru/popterm.el",
"unstable": {
"version": [
- 20260423,
- 2106
+ 20260717,
+ 1502
],
"deps": [
"posframe"
],
- "commit": "7efcca742ec9a23c2e6e627b2c1d42aa752dea5d",
- "sha256": "0j0y4rgvrvj3kkr10qyl89nmdp7yzpqa9j1yy2bxaalsff6pbdpd"
+ "commit": "c3f2079bdd5d480a7509b2f28cc104ec7473ffb7",
+ "sha256": "06ddkcvji5dz091kblr5h82jipig7q3zjcb20qc1cfv1d9lv9y46"
}
},
{
@@ -107126,20 +108327,20 @@
"repo": "tumashu/posframe",
"unstable": {
"version": [
- 20260423,
- 213
+ 20260527,
+ 857
],
- "commit": "fcf1757baee481f617fbf2dc39f8c561207df263",
- "sha256": "0r6kr3b5kr34kbcic61qnjyhli9imz6n4arddf3v3c34abamgvdy"
+ "commit": "74c8c56131ed866db47ae4191364b72dd4852456",
+ "sha256": "10a6n3pgh36j3smizgh48p2bbi680dsdssz1563ijxj01cy2b0hv"
},
"stable": {
"version": [
1,
5,
- 1
+ 2
],
- "commit": "4fc893c3c9ea3f6b5099ac1b369abb3c6da40b1e",
- "sha256": "01x9kyfghx48gxh7mxfvkvvi0m64zv7w9pl4fnryzm9d5ql5lbw4"
+ "commit": "74c8c56131ed866db47ae4191364b72dd4852456",
+ "sha256": "10a6n3pgh36j3smizgh48p2bbi680dsdssz1563ijxj01cy2b0hv"
}
},
{
@@ -107248,25 +108449,6 @@
"sha256": "1hp3xp18943n0rlggz55150020ivw8gvi1vyxkr4z8xhpwq4gaar"
}
},
- {
- "ename": "powerline-evil",
- "commit": "c1a92c8b5b92269773d314aa6cec4f0057291a68",
- "sha256": "1x5hvnjdrpn3c8z6m7xfk30qd5y58p3jcyqr48qx91d0109gk342",
- "fetcher": "github",
- "repo": "johnson-christopher/powerline-evil",
- "unstable": {
- "version": [
- 20190603,
- 340
- ],
- "deps": [
- "evil",
- "powerline"
- ],
- "commit": "b77e2cf571e9990734f2b30d826f3a362b559fd1",
- "sha256": "1hs9jvl5lmfwr9k6qcnxjhd61zsmzq53ania1w5616gqa4qnjzhn"
- }
- },
{
"ename": "powershell",
"commit": "7002c50f2734675134791916aa9d8b82b4582fcb",
@@ -107393,8 +108575,8 @@
"repo": "blahgeek/emacs-pr-review",
"unstable": {
"version": [
- 20260423,
- 953
+ 20260509,
+ 1433
],
"deps": [
"ghub",
@@ -107402,8 +108584,8 @@
"magit-section",
"markdown-mode"
],
- "commit": "23dcb45979e58c971d1d9a94f0af819f5d04d583",
- "sha256": "08gw1bb87f9rs812adfadqzccm63pm06mr7b4g0dnji1sclzfryv"
+ "commit": "938db766007f3444a2899b2457d9e2f4b4ffbebf",
+ "sha256": "0rc1phxl1hrfzj85b4fshir8lgmbzn1idwax37kkjvx42lgvw8v3"
},
"stable": {
"version": [
@@ -107508,20 +108690,20 @@
"repo": "radian-software/prescient.el",
"unstable": {
"version": [
- 20250816,
- 19
+ 20260628,
+ 2243
],
- "commit": "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18",
- "sha256": "0f4wi8aq3yfykxfza4y4c5yhcs50cs3gpfj0qrmvfq9hvkhzj52w"
+ "commit": "5649977fa7789e4615efeca09397ed7eccd06dfc",
+ "sha256": "199150yng81f6n3kb120s37yf2dqs0i9k91f2gzkk8kjn6hvrsj8"
},
"stable": {
"version": [
6,
3,
- 2
+ 3
],
- "commit": "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18",
- "sha256": "0f4wi8aq3yfykxfza4y4c5yhcs50cs3gpfj0qrmvfq9hvkhzj52w"
+ "commit": "5649977fa7789e4615efeca09397ed7eccd06dfc",
+ "sha256": "199150yng81f6n3kb120s37yf2dqs0i9k91f2gzkk8kjn6hvrsj8"
}
},
{
@@ -108211,19 +109393,20 @@
"repo": "lucius-martius/project-cmake",
"unstable": {
"version": [
- 20250830,
- 1304
+ 20260529,
+ 1744
],
- "commit": "519ca5d7dd490a6b54435841c9fce3d5e3dcc140",
- "sha256": "1dhs4irm6am24cx20bcrmnxspazm8iwv3kbb755lsx70040gx4b8"
+ "commit": "a1888d8ef6c32a8cf39e0056594179be1e9865ee",
+ "sha256": "1bs7pv2k0alh234haff7pg1j16j1jzcw53acrca99fxmvvhj33g9"
},
"stable": {
"version": [
0,
+ 2,
1
],
- "commit": "4a261cef5b7ca406577d3b0eaeabfae88419edeb",
- "sha256": "1m4pachj26gdbmwbv15d7wshay7qnmaxy6x5nzi9hnvcfhg5v7xs"
+ "commit": "e177dfff76c03fc8f589c8070c9b1a945b2f8851",
+ "sha256": "0vim9kik7pd9dml7lycdmc7q9l6i6hxgmympfk89ncqd68icmspr"
}
},
{
@@ -108337,14 +109520,14 @@
"repo": "harrybournis/project.el-rails",
"unstable": {
"version": [
- 20260415,
- 1855
+ 20260425,
+ 1314
],
"deps": [
"inflections"
],
- "commit": "d066f984eb88c6d239d19adbf8025bcafe665d53",
- "sha256": "175vsmf3zgl7qi8sa4pnhzjk0b3qr1a02pg16nlxa0ci4kx59x34"
+ "commit": "2c72764790f9f6f283f713bb72a9f4952ced690d",
+ "sha256": "0ipph4wfl74zmvpawhsqaq3x4bbwxxv1svqi9j1chf0rb0bzw99p"
}
},
{
@@ -108403,26 +109586,26 @@
"repo": "TxGVNN/project-tasks",
"unstable": {
"version": [
- 20241220,
- 1028
+ 20260520,
+ 133
],
"deps": [
"project"
],
- "commit": "1faaa975c99e358165cfc3df160c21c2c611e1c3",
- "sha256": "0wg1biic9sfsdhq1x1hkcbr396vkklhzz2f6an22amk2jc1pmfnn"
+ "commit": "a8736133dc3ee77b6002098592853ac56e5a5b40",
+ "sha256": "1rwi1y75migfg382nkahid9c4qh7f5jx8bkwmmmz5kfggjdf3cps"
},
"stable": {
"version": [
0,
7,
- 1
+ 2
],
"deps": [
"project"
],
- "commit": "1faaa975c99e358165cfc3df160c21c2c611e1c3",
- "sha256": "0wg1biic9sfsdhq1x1hkcbr396vkklhzz2f6an22amk2jc1pmfnn"
+ "commit": "a8736133dc3ee77b6002098592853ac56e5a5b40",
+ "sha256": "1rwi1y75migfg382nkahid9c4qh7f5jx8bkwmmmz5kfggjdf3cps"
}
},
{
@@ -108451,23 +109634,26 @@
"repo": "bbatsov/projectile",
"unstable": {
"version": [
- 20260310,
- 858
+ 20260720,
+ 549
],
"deps": [
"compat"
],
- "commit": "f8be23b266aec7108fb4b80410623cd50ba8ded9",
- "sha256": "1gg9mv6sz705x2lgwx4qz13wj20lcc6pv813k2h9ixdk4rxl1il4"
+ "commit": "a4a91e08d49d280c9c5c2b0820bb04da198d61db",
+ "sha256": "0lm9jw8563hly4zi9yx9f4q28jpww4hazgdw2jigcjwgf3q7zn6q"
},
"stable": {
"version": [
+ 3,
2,
- 9,
1
],
- "commit": "ef17d2971bbcce13b1ac16e0e36d44fa0defca63",
- "sha256": "15wc2ivmac0kgbdgsaaxngmcffgd3227zsb4n7inhn14cqwr6qxd"
+ "deps": [
+ "compat"
+ ],
+ "commit": "8ac2834f1f70af977f17944c7968c72ea46bf62c",
+ "sha256": "0vqigfrgakjzvm9y2zg9vvnjx3xpzcb5s218qfphs8rqi87a6hzb"
}
},
{
@@ -108719,8 +109905,8 @@
"repo": "mohkale/projection",
"unstable": {
"version": [
- 20250927,
- 1605
+ 20260614,
+ 1822
],
"deps": [
"compat",
@@ -108728,8 +109914,8 @@
"project",
"s"
],
- "commit": "482789397c5e11dbb95438c87ccd0cad3d37a33a",
- "sha256": "0rlx9n1hmnzk46ml93g6lpv32ivmm7lfbb4mzicnapq7gly41132"
+ "commit": "870a60b26416e13a7cd37ecfd863ae730d6a13fa",
+ "sha256": "0xb46ispkmr8m46avhqx5sqbn9lcvsf7c43iigvn668xvivz4r2x"
}
},
{
@@ -108759,15 +109945,15 @@
"repo": "mohkale/projection",
"unstable": {
"version": [
- 20250921,
- 1037
+ 20260614,
+ 1822
],
"deps": [
"compile-multi",
"projection"
],
- "commit": "f4b108eeb55c79b201c140bd8fe7f1fcaffd3617",
- "sha256": "0p9xpbc62rcf9qbcc0rf36hd0z7b6c7apnji4gxdmggmpfaxnhva"
+ "commit": "66dfa454cbd0ca356d0c5761f6ade248b612b204",
+ "sha256": "1xd9pdm0p0ips0xm11a3qswj2nbk3a1fnl186f3gkx4npfmz3x19"
}
},
{
@@ -108985,11 +110171,11 @@
"repo": "ProofGeneral/PG",
"unstable": {
"version": [
- 20260124,
- 1351
+ 20260622,
+ 1503
],
- "commit": "75c13f91b6eb40b8855dfe8ac55f8f7dac876caa",
- "sha256": "0zsvvq54q50q9zcmgxiqgks7hkzm9v740mrygvlxyb8yhrv7j4h9"
+ "commit": "38e3f59d4b650fbfb9649c84f24adbc9056ffa30",
+ "sha256": "1fgzfy6gfm4p8fafa58ismypac0lvna917dmfgwlb2bwb7n1k55v"
},
"stable": {
"version": [
@@ -109097,11 +110283,11 @@
},
"stable": {
"version": [
- 34,
+ 35,
1
],
- "commit": "4b0c3aacf0657fbf38253b38918d3358dd4319ec",
- "sha256": "07in860f2msc05ywh3di7d1fr6mszr2jxjh6lgm7m0kdqckib8ix"
+ "commit": "35cd01f9fe9afbeea38cc7b979a3b6bfcde82c03",
+ "sha256": "0n85mx3xq403yvavqa585lmahiac6dwlkvwvva8h9p3y6z3gs9wy"
}
},
{
@@ -109621,11 +110807,11 @@
"repo": "AmaiKinono/puni",
"unstable": {
"version": [
- 20260305,
- 1923
+ 20260519,
+ 1527
],
- "commit": "fe132f803868f325cf6f162139e327b76df9e4c1",
- "sha256": "0ffjpb0ilhcng1wwmnl1lx7h8v1z0bgsq6wb7x4x2rwsrvqjv9hm"
+ "commit": "04819e0bad5ed62af9e412ef9715b33bb1edc3ba",
+ "sha256": "0pydanhwji3jglqc4pq7ljc5ik93ycgg8c8nvzsmgw6q5anqs09g"
}
},
{
@@ -109696,6 +110882,30 @@
"sha256": "0lwx9j5p8ayg4px4jlfr57hv5cla1lmbxcqgagjpd73z3f8daahy"
}
},
+ {
+ "ename": "pure-light-theme",
+ "commit": "7a493d693870d0f73de1d39ae7ad22cc982b2a8c",
+ "sha256": "0rxcqj229pg4w9gf079qcgk6arp52myfd5hkig5wkd7iqdm687c6",
+ "fetcher": "github",
+ "repo": "nyrell/pure-light-eink-color",
+ "unstable": {
+ "version": [
+ 20260613,
+ 824
+ ],
+ "commit": "0cf41b8cb0ec95efd363889f8877d7f65514e4ad",
+ "sha256": "1cl806h6rgqnw410xqnnp7xg7cbgfdd40hh58kgxnx2b2hwh1p4v"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 0,
+ 1
+ ],
+ "commit": "0cf41b8cb0ec95efd363889f8877d7f65514e4ad",
+ "sha256": "1cl806h6rgqnw410xqnnp7xg7cbgfdd40hh58kgxnx2b2hwh1p4v"
+ }
+ },
{
"ename": "purescript-mode",
"commit": "55462ed7e9bf353f26c5315015436b2a1b37f9bc",
@@ -109704,11 +110914,19 @@
"repo": "purescript-emacs/purescript-mode",
"unstable": {
"version": [
- 20250613,
- 944
+ 20260717,
+ 1433
],
- "commit": "61732e23bd33b7d0d71bc6cff84b612bd2d9dff2",
- "sha256": "19fycmdzyipb1lwdr4p86sg4j6qjy1j2rl8raml5yrbm1cra791a"
+ "commit": "7ad5eff9bd59632d49a44f5935c65f1069e17fed",
+ "sha256": "01jpf8whcjl7awwabhj3wpbajrv7varh4n0ammsq98ymzqlyywin"
+ },
+ "stable": {
+ "version": [
+ 14,
+ 0
+ ],
+ "commit": "7ad5eff9bd59632d49a44f5935c65f1069e17fed",
+ "sha256": "01jpf8whcjl7awwabhj3wpbajrv7varh4n0ammsq98ymzqlyywin"
}
},
{
@@ -110171,8 +111389,8 @@
"repo": "dwcoates/pygn-mode",
"unstable": {
"version": [
- 20241216,
- 1959
+ 20260605,
+ 1055
],
"deps": [
"ivy",
@@ -110181,8 +111399,8 @@
"tree-sitter-langs",
"uci-mode"
],
- "commit": "3f1ce4efd1c34b9fc347c848eb4426bfcc851118",
- "sha256": "0238s7dzrr0g19arah8b385bad5q1vz155f599pgwilj8cpqz7dz"
+ "commit": "6eed5ea66d37ae25c4db98ca21b164a98234b59e",
+ "sha256": "0pb7hqv7qkv2w0y3xqvcb86qb6l5fpi1927yx78xsl1gbs89z4hs"
},
"stable": {
"version": [
@@ -110262,10 +111480,10 @@
},
{
"ename": "pyim-cangjiedict",
- "commit": "e5886262459d25a03839fd3a854510a7415bd241",
- "sha256": "13lr9ms87s3b0hf97hx81lvag8kqk5pn99hnzi5nwwlj7nlf6xj4",
+ "commit": "46bd94ae4e098154d2c35a186277665c07575a30",
+ "sha256": "0cxszzyivp1g7hyyzlbcjv6h7flckv3bad3alg510va6l7nf87ym",
"fetcher": "github",
- "repo": "cor5corpii/pyim-cangjiedict",
+ "repo": "a5corpii/pyim-cangjiedict",
"unstable": {
"version": [
20250924,
@@ -110280,10 +111498,10 @@
},
{
"ename": "pyim-smzmdict",
- "commit": "f42c59e7af89ec9a24363c1f942ef92e89d11a65",
- "sha256": "1bl6b0zyv45wjz2fbb12a7vfb27439n2vgby6wxlya2d0pljfgk8",
+ "commit": "9c5fa988d59676fbb0cb7548d827d0425f6b3de5",
+ "sha256": "1bs7l86qngv2569881g6q88k9j2kcmn3g9nn408z28j3gaf8v4zs",
"fetcher": "github",
- "repo": "cor5corpii/pyim-smzmdict",
+ "repo": "a5corpii/pyim-smzmdict",
"unstable": {
"version": [
20250621,
@@ -110542,28 +111760,28 @@
"repo": "wbolster/emacs-python-black",
"unstable": {
"version": [
- 20240520,
- 729
+ 20260706,
+ 1540
],
"deps": [
"dash",
"reformatter"
],
- "commit": "4da1519345b3d5c513d82ef0d39536dd9c626d42",
- "sha256": "0haxkpjggf91ahy6zl4qzpv7l9chi9yd0c0a054y3kjpvn64axqd"
+ "commit": "779d49c7db54590d1fa483ef2f89eea5ef8774e1",
+ "sha256": "19wjs67yc6gdfdjdrfav8m3w0rmyhdzfwq3hi2gcy6shyykm7s0i"
},
"stable": {
"version": [
1,
- 2,
+ 3,
0
],
"deps": [
"dash",
"reformatter"
],
- "commit": "e1bbf574a952562ddeadb0caa42c44016136c2c9",
- "sha256": "1x6b67cs7kn8711fxr3fq8y9wcpf9g71asf9wiqfrk2mrfzli6a3"
+ "commit": "779d49c7db54590d1fa483ef2f89eea5ef8774e1",
+ "sha256": "19wjs67yc6gdfdjdrfav8m3w0rmyhdzfwq3hi2gcy6shyykm7s0i"
}
},
{
@@ -110589,16 +111807,30 @@
"repo": "wbolster/emacs-python-coverage",
"unstable": {
"version": [
- 20250601,
- 1621
+ 20260706,
+ 1541
],
"deps": [
"dash",
"s",
"xml+"
],
- "commit": "ec1789b8cbbfd58b8f4f687c2e4efb7e30429643",
- "sha256": "0hvschfsvj6wg00nab0c1kki9m74ii4zbnzmn6a46yqvnyxjy2qc"
+ "commit": "9e7af6999077ed3f861c5813297aee13804fcfb1",
+ "sha256": "1an8c18g7fpsz8rc0ds4ff0k9yxyw7xipyz4gcwgdlm1kchkhyns"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 1,
+ 0
+ ],
+ "deps": [
+ "dash",
+ "s",
+ "xml+"
+ ],
+ "commit": "9e7af6999077ed3f861c5813297aee13804fcfb1",
+ "sha256": "1an8c18g7fpsz8rc0ds4ff0k9yxyw7xipyz4gcwgdlm1kchkhyns"
}
},
{
@@ -110752,11 +111984,11 @@
"repo": "python-mode-devs/python-mode",
"unstable": {
"version": [
- 20260410,
- 1849
+ 20260710,
+ 1059
],
- "commit": "c6f7bcd79d43b2a4915b75c481355601f95968a0",
- "sha256": "09hhiwsk08c34h8v98q1s4g09byvj3r1dn18agl4x1v2528fiszk"
+ "commit": "dbbfaa9bbfa1e330f4d9ec81b3793fbb2a297ecd",
+ "sha256": "1h1im4ph5n7799z6iax5bzxmad7m1qc9apgdb1hq8b7xqa0bd9hd"
},
"stable": {
"version": [
@@ -110776,31 +112008,30 @@
"repo": "wbolster/emacs-python-pytest",
"unstable": {
"version": [
- 20260117,
- 2218
+ 20260630,
+ 859
],
"deps": [
"dash",
"s",
"transient"
],
- "commit": "78b5ea1d19c7e365ac00649d13c733954b11f822",
- "sha256": "1s7slp14lrb4iik847ybk6dsqvcb4r1b50hx3pv3hn63rvpwc5jq"
+ "commit": "8c0e048a771f355903a8c2ce78fa0974a077214e",
+ "sha256": "06k1509nnzrffmkzz5shikz2msk6g0bb89v56fxf9w9prpb0nna3"
},
"stable": {
"version": [
3,
- 4,
+ 6,
0
],
"deps": [
"dash",
- "projectile",
"s",
"transient"
],
- "commit": "46fd006462258a3366723fafacdf2db6a6ae689d",
- "sha256": "1ahpzay6gbxrcin4ldcp1sm17fcvg94n729haj3zgcalsmhjlx90"
+ "commit": "8c0e048a771f355903a8c2ce78fa0974a077214e",
+ "sha256": "06k1509nnzrffmkzz5shikz2msk6g0bb89v56fxf9w9prpb0nna3"
}
},
{
@@ -110898,16 +112129,16 @@
"repo": "wavexx/python-x.el",
"unstable": {
"version": [
- 20260309,
- 1727
+ 20260619,
+ 1406
],
"deps": [
"compat",
"folding",
"python"
],
- "commit": "c7c1986753f112e3bf0e8f25bf74de1f422a5121",
- "sha256": "0q9wg3brprlkkf512i8cbqpqd5bavj2cqyb3j4xgdab2amrc6w4v"
+ "commit": "548a95c42c110cd65b559416e497de20f5c21d92",
+ "sha256": "1d0mfl3z5954jm0v8fk2hkkajfzrv5j3v69ypyc21z66ysnz6qys"
},
"stable": {
"version": [
@@ -111018,11 +112249,11 @@
"repo": "psaris/q-mode",
"unstable": {
"version": [
- 20260418,
- 249
+ 20260620,
+ 531
],
- "commit": "7690b9569892bf5e5f87cae290cb6a861cd1deeb",
- "sha256": "0m9rxh51pny3cpiy4x24qqpgpfbaibdfv1yh5ckzy8hqcgkxq222"
+ "commit": "ca73cb94f8391ebfb2a60537f8c51b244cbad9d9",
+ "sha256": "06n6vf0xx61vzpmxdn1s7psanilmg30n1v8ach1za3996wmdx214"
}
},
{
@@ -111056,11 +112287,11 @@
"repo": "ruediger/qrencode-el",
"unstable": {
"version": [
- 20260109,
- 2234
+ 20260628,
+ 2140
],
- "commit": "023c61309e8f9e7b27fd28fe4d71a2217b2f3f9d",
- "sha256": "0ivcdr89531yps6izk7fs7xqrz00m4b02c5rrbjalz33sj06ss41"
+ "commit": "7df905c77f590278d301679db354a3d7662407c9",
+ "sha256": "1vsj6vq003anbwhaqcfl4sswkn8zl6fazwyvy6dk1xf87nll6540"
},
"stable": {
"version": [
@@ -111079,11 +112310,11 @@
"repo": "K6SM/Emacs-QSO-Logger",
"unstable": {
"version": [
- 20250709,
- 1505
+ 20260707,
+ 1515
],
- "commit": "33d3211748aa7e94f1aa187570beca8b9b2093d8",
- "sha256": "033l5pg7bfc598xqniavwwlhlq488fzl92d17603c45f51v5yvff"
+ "commit": "a3b0d1f0b103cd00e0980637d75b6e3092d07b48",
+ "sha256": "0m2g5lbwi5kp54kldm13swwrgx3q126bqdax0ik9q45fv69x3q5c"
}
},
{
@@ -111317,20 +112548,20 @@
"repo": "jamescherti/quick-fasd.el",
"unstable": {
"version": [
- 20260114,
- 1535
+ 20260701,
+ 1254
],
- "commit": "7f295404a9d5f93450c071e6226d8f52e574ab8b",
- "sha256": "1b2hkvzisxdv46iyf5b3pfyw3s99v57klm5clscpwbzh8n4dnmza"
+ "commit": "40ac0f067b8c24ab4ac8283a9bf79655e586304f",
+ "sha256": "0yvd3za47s0ypv4ffc1rgp2y3zbb5jw0xbjzyh033c0d89js5r7j"
},
"stable": {
"version": [
1,
0,
- 1
+ 2
],
- "commit": "fe0d6c611ec995e2f59b23d45af3b8b28244703b",
- "sha256": "1fsl6l67jf8fm5h6i5qxqvibzssbiyyjzchq3r5sbqry3d8yx3mk"
+ "commit": "249334222d13b5ea6d4811833326358e8d0dd30a",
+ "sha256": "0662xmvikhfgcvivxb0m9d583ir1skj904i3sl5qq1cnn2a4hgcd"
}
},
{
@@ -111371,20 +112602,20 @@
"repo": "jamescherti/quick-sdcv.el",
"unstable": {
"version": [
- 20260326,
- 1610
+ 20260601,
+ 1608
],
- "commit": "e28c59514500d61d825657fc735fbafce3599d32",
- "sha256": "1bpgyry817zcbqilmbiiv3la11zszbvrhcy7826gif6rpyyq2wgi"
+ "commit": "f0583c0ca6a9c155ea0037c9c59e0665a884e33d",
+ "sha256": "0x0z124d4gp9d3dakxb9ghwssk3cwdh20r2xiwddgxxx77p4b5nw"
},
"stable": {
"version": [
1,
0,
- 4
+ 5
],
- "commit": "43385cddb1e0cad978ac007079f33a788cc5457a",
- "sha256": "1r881b5j207376zj73z9y54r8v0hjizh0lz8wckfsz2dhyqa00ri"
+ "commit": "f0583c0ca6a9c155ea0037c9c59e0665a884e33d",
+ "sha256": "0x0z124d4gp9d3dakxb9ghwssk3cwdh20r2xiwddgxxx77p4b5nw"
}
},
{
@@ -111624,14 +112855,14 @@
"repo": "greghendershott/racket-mode",
"unstable": {
"version": [
- 20260303,
- 1556
+ 20260626,
+ 1429
],
"deps": [
"compat"
],
- "commit": "24cb8e977a05d188756284e46ff7cece2d899f75",
- "sha256": "00zvqsaav2hr1hllvv7nxbnb4yzkz64val46qp5rb4mf217rlqnz"
+ "commit": "97d9b8b7d73a02777c0f70ce6d145a99a99b37cb",
+ "sha256": "1rcflgpnl77wlhlcg6wikwaw39wyhn0n4fr3i43gypa04q3ih9f9"
}
},
{
@@ -111935,11 +113166,11 @@
"repo": "punassuming/ranger.el",
"unstable": {
"version": [
- 20260201,
- 717
+ 20260527,
+ 2231
],
- "commit": "61e7c840c52007dc17e64215fe8dbcb71139fa39",
- "sha256": "1nyh2c6z9pp2gmcybpy5b2i1rg4d7v9v2ck8m7siagrjwfzdxqfk"
+ "commit": "cfcab21cd21eb48709fb4436ba84f3e2a048a432",
+ "sha256": "13z425h92ay1w3kkgz018ajig2ggd2lzgz76szws9vn3k57b9wzm"
},
"stable": {
"version": [
@@ -111952,6 +113183,21 @@
"sha256": "01rphv92g1r0cw5bwkbrh02s0na7fjrddxx1dckk2y7qr97s7l8j"
}
},
+ {
+ "ename": "rare-words",
+ "commit": "bcedf998dbd7d11de06d4c6361863a8c594a4ae3",
+ "sha256": "1lh5q96nbrik69alj4agapmc0c8fjhxwi9dp5gvgqswgvhmxbil6",
+ "fetcher": "github",
+ "repo": "amolv06/rare-words",
+ "unstable": {
+ "version": [
+ 20260401,
+ 618
+ ],
+ "commit": "7e6b3e2083dd37e1a150422c648c28d3b703f185",
+ "sha256": "1982fnjpw6lqgnbkqn39q2dh52hyhakg35g2vgjn13f8a4csqdfs"
+ }
+ },
{
"ename": "rase",
"commit": "334419debe065c34665bb0207574d1d4dfb9e8ae",
@@ -112430,16 +113676,16 @@
"repo": "realgud/realgud",
"unstable": {
"version": [
- 20260411,
- 2216
+ 20260609,
+ 1331
],
"deps": [
"load-relative",
"loc-changes",
"test-simple"
],
- "commit": "34a9065d1695c3b4bfbae076440397ad24bc8faf",
- "sha256": "1bwdmkj0imlarki09k5i1lrhk3c1rqa899zy6n8j76xpcc57jqwl"
+ "commit": "bc3fbafc190a1a38fd12459bf323ffe4dcb159af",
+ "sha256": "0y1kbmk4wyffbyzlhjn86bbvps5v4hapsmlfl35304kji24ydgia"
},
"stable": {
"version": [
@@ -112906,11 +114152,14 @@
"repo": "ideasman42/emacs-recomplete",
"unstable": {
"version": [
- 20260403,
- 1048
+ 20260504,
+ 1201
],
- "commit": "c0b1a38cceb3cd65c8e6004f527eba293caafeef",
- "sha256": "1sx0bnjnapnp9nym9hnhxc981ifg5waxiv1palgcsxm0jrazxkm7"
+ "deps": [
+ "with-command-redo"
+ ],
+ "commit": "d8e2b35a65910fee40cebee39153c1e6bc462cc1",
+ "sha256": "09kkh842ypi89l6r3qa5f1xx9985nvas22687fyv607ja4iyp9yz"
}
},
{
@@ -113021,25 +114270,25 @@
"repo": "minad/recursion-indicator",
"unstable": {
"version": [
- 20260322,
- 18
+ 20260519,
+ 1025
],
"deps": [
"compat"
],
- "commit": "4805275937585102aba0047169f047032201c5b9",
- "sha256": "0fs2xzpdj0prk8zc43biayk2yad4yyj07lq7qph1vfgv5dg308fv"
+ "commit": "eb33010866742808cabae694fa4e77b33737522e",
+ "sha256": "1i5rpzpmh50yg0vsy5049sf9xz5i5cglrpcm5fni1w1ja78qnxjd"
},
"stable": {
"version": [
1,
- 1
+ 2
],
"deps": [
"compat"
],
- "commit": "548838df2ef15fdd8e9d904d0a74182297e3383f",
- "sha256": "1m9fxl405yprz0id18g7192h8sp51j07n8lc41lb3yn8vwl13g0l"
+ "commit": "eb33010866742808cabae694fa4e77b33737522e",
+ "sha256": "1i5rpzpmh50yg0vsy5049sf9xz5i5cglrpcm5fni1w1ja78qnxjd"
}
},
{
@@ -113553,11 +114802,11 @@
"repo": "ideasman42/emacs-repeat-fu",
"unstable": {
"version": [
- 20260403,
- 1127
+ 20260617,
+ 256
],
- "commit": "ec9965832f4b94e635478fd6e67c29a523e2e36e",
- "sha256": "0xymxdyj48q94zkk9igkcy8swmiad4l2rw2nwmsgrjkm0ccqmkfk"
+ "commit": "4d30d92a1fc3b5f0207866685de16cb78b83337c",
+ "sha256": "1dc3g7fagzll24ws39gwy5zl3bxmca1njky4gw5s5yb5gd40cypk"
}
},
{
@@ -113988,11 +115237,11 @@
"repo": "jjlee/rescript-mode",
"unstable": {
"version": [
- 20260419,
- 1929
+ 20260505,
+ 2042
],
- "commit": "202cf1202f286b4440980e46c0a0c0a8003f7ec6",
- "sha256": "0xfrqf61y70dl600p7pqg7fmykv5jwmis2m8r3dxgxajw84vl80j"
+ "commit": "d0ff73d8e6c9653f0baf7edbcd7e585a24dedf8d",
+ "sha256": "134ks3anl9p70f427pc0r90nrp5lxp28hqy1zcncdm1zjnxhlqwq"
}
},
{
@@ -114056,14 +115305,14 @@
"repo": "emacsorphanage/restclient",
"unstable": {
"version": [
- 20251209,
- 2022
+ 20260627,
+ 1851
],
"deps": [
"compat"
],
- "commit": "1800a4e367c250051617d0b8c16a7cbd7f47da69",
- "sha256": "02yphcli11j0p6144rwh7l5whx4ahxm3y15nz0b7r3y04fm25w6g"
+ "commit": "d280632df39a175dac06037038105e32945624be",
+ "sha256": "1v49has9ckn2rpjhfjds86vaaa4i0wnazz9061smaasqkf28r3i3"
}
},
{
@@ -114437,11 +115686,11 @@
"repo": "galdor/rfc-mode",
"unstable": {
"version": [
- 20260127,
- 1807
+ 20260617,
+ 1030
],
- "commit": "2d3dcd649e291eeb93091560b504f96162371c32",
- "sha256": "0hrh5b0ph39nbqxgvj69i3mcmiq2gfsxgfzydj539x3vcz8s4140"
+ "commit": "0ab3e0b5eca45e7baaea748063b8590d08b55789",
+ "sha256": "005006yz8yq7b0a0ds8k1p50in3yassds6p7jq45cwbblmchyv11"
},
"stable": {
"version": [
@@ -114461,15 +115710,15 @@
"repo": "dajva/rg.el",
"unstable": {
"version": [
- 20251022,
- 457
+ 20260517,
+ 1310
],
"deps": [
"transient",
"wgrep"
],
- "commit": "9ff6cb24bda58f481886ebaf16b524f4f9b3769c",
- "sha256": "0yxs6szqhvkmg1ikmpykh5w2kk1jgyfvbymxp19i26pkjfrxfl52"
+ "commit": "e46a16b8bdba111c9c0036d0e209490dd7a3690f",
+ "sha256": "12niibbw7d1ncj8l6pm21wv61js9kmikphn9b7md1mpvbhz78bxy"
},
"stable": {
"version": [
@@ -114749,20 +115998,20 @@
},
{
"ename": "rimel",
- "commit": "9071d1f195bcc22bbfb9c4486e5a8a5ec0d477c3",
- "sha256": "197r8a0s0ixkkq8gh0ia23q42wgh9mxzq9pakma6wdxjljggqm5f",
+ "commit": "eb0134db6bc0f83b4b8984e354caa7efd55dda98",
+ "sha256": "0d2a780ml3c1js2521g5bcmfsrib6a88iai77y3gv41w8jzmwdnn",
"fetcher": "github",
- "repo": "jixiuf/rimel",
+ "repo": "emacs-rime/rimel",
"unstable": {
"version": [
- 20260420,
- 1036
+ 20260706,
+ 343
],
"deps": [
"liberime"
],
- "commit": "1b7e6c7c626b36a7f80e8c388454bb4562da11e9",
- "sha256": "00arwm2r3m80lq41ywdn0220a12ski8iwigxnr83wfh771kb2iw1"
+ "commit": "4d7bbad3e9b70fe0755174a79d5b7e59dfb6d3f7",
+ "sha256": "19rqq53akvrzdj74ajqvgb4dz1rmiqyivs9vcpaz43s56q00sa5c"
},
"stable": {
"version": [
@@ -115231,11 +116480,11 @@
"repo": "marcowahl/rope-read-mode",
"unstable": {
"version": [
- 20250428,
- 1236
+ 20260610,
+ 2004
],
- "commit": "7cd80d6c8e4a7e24a5147c06f083d745aef91b55",
- "sha256": "1f55x5cwc87jqhxpg7bwgr8mwv544awqf1sn6fnc7qzma8bm02pn"
+ "commit": "4270080eafa5fe5ce1d1a7ecc7ac4143a7d62a22",
+ "sha256": "123sdgbrgqsr0fdsviibhrmw5xp20g4ki2nvffd0h4p2fmrmdm89"
},
"stable": {
"version": [
@@ -115328,11 +116577,11 @@
"repo": "daichirata/emacs-rotate",
"unstable": {
"version": [
- 20210126,
- 637
+ 20260521,
+ 630
],
- "commit": "4e9ac3ff800880bd9b705794ef0f7c99d72900a6",
- "sha256": "1v4xaqfh3madrc8jcr16xzs40vvmk2ml1qwgsxkcm11l6pglmnnk"
+ "commit": "d61c7643b8dbe3fdd59f8ee40212f27bd14cfb61",
+ "sha256": "0v5jgmv78z7z5l92bfi39w36i8z29zni8cm4sbh39z97x059zljz"
}
},
{
@@ -115417,15 +116666,15 @@
"repo": "pezra/rspec-mode",
"unstable": {
"version": [
- 20230819,
- 154
+ 20260618,
+ 548
],
"deps": [
"cl-lib",
"ruby-mode"
],
- "commit": "29df3d081c6a1cbdf840cd13d45ea1c100c5bbaa",
- "sha256": "0fyqlsj91j1fks16bx8zy0ly3mc6nk4fk2vbf0yjc2fa14hda41m"
+ "commit": "b5d48de9b56a0070d7a0d3e642b139992a1ce3f0",
+ "sha256": "067na709bbsazhpd8y22lxplh34lf0r4jf2akpqbyiai1izs9vdl"
},
"stable": {
"version": [
@@ -115466,11 +116715,11 @@
"repo": "Andersbakken/rtags",
"unstable": {
"version": [
- 20260303,
- 1816
+ 20260504,
+ 1903
],
- "commit": "787fb682a13ca1c131c07ee28603cb1f2544595b",
- "sha256": "0wcs0g588az1asdbkavac5543kglsvn0xlg8zh9jdj534q6a7n4b"
+ "commit": "2d9049adfef58961d0a710f93a8af387eb84dd01",
+ "sha256": "1a1k4rpjhp0k2255aa4myfymv3qailklgk200220yw3qn2wwcgs4"
},
"stable": {
"version": [
@@ -116047,20 +117296,20 @@
"repo": "Anoncheg/emacs-russian-calendar",
"unstable": {
"version": [
- 20251201,
- 1323
+ 20260716,
+ 2030
],
- "commit": "4b250e6aeb37470a030ebddf92f9a65184f67f03",
- "sha256": "0xcksm64fqg9bmkjp9h83rrvjnycbcyi1nqa6sk55zpyjq3gj7sb"
+ "commit": "99077f02546a1a3619c46f95be926ceada155478",
+ "sha256": "1alk0v36jr3xbd0ykdq8kil35cqdjhcfczlnmwvdkn6ydy5igv3l"
},
"stable": {
"version": [
0,
1,
- 1
+ 2
],
- "commit": "23bc82093556a2bd045621c9964ba9162aac9937",
- "sha256": "09609pffp0rr87xqldznjjx5f60h3l9dg266sgiciid34hl0f1m8"
+ "commit": "23d222041dba8e5dad07542e0dc7dd3fc8419112",
+ "sha256": "0hwhs8qx0jp45d39zzbg7ab0nb96v6wyb86hymsahdxp32yhaing"
}
},
{
@@ -116133,11 +117382,11 @@
"repo": "rust-lang/rust-mode",
"unstable": {
"version": [
- 20260416,
- 505
+ 20260521,
+ 745
],
- "commit": "06cf08810018f54bf5246d8db155c90ab60d381f",
- "sha256": "18khvsny09dbxbhfi3fl7dyy06n69p7xl5b84brfqcl9w8rgbcmr"
+ "commit": "ed401a65743359b8de11ee9ced0e1da39946cefd",
+ "sha256": "1srgvdg3mhgs9v4g5yan4p510gaw5mj56smy2i5lil1zzbrk0kd6"
},
"stable": {
"version": [
@@ -116366,16 +117615,16 @@
"repo": "sagemath/sage-shell-mode",
"unstable": {
"version": [
- 20240504,
- 726
+ 20260523,
+ 1504
],
"deps": [
"cl-lib",
"deferred",
"let-alist"
],
- "commit": "4291700e981a2105d55fa56382ba25046d3d268d",
- "sha256": "1dch7cwwslffgnzp1djlhz6a792ci42p4bvazxd9lqzhzal0rsbb"
+ "commit": "bb59cd559a9d7639d9ef16addbb0809ea4790392",
+ "sha256": "11daz4h30p74cc7rxyn12g53qgl01mfgd17d62sllip30iy1k035"
},
"stable": {
"version": [
@@ -116518,11 +117767,14 @@
"repo": "thapakrish/samskritam.el",
"unstable": {
"version": [
- 20250829,
- 2315
+ 20260701,
+ 225
],
- "commit": "e84358904b93c5c03d00b62f1e6735393d2b3d53",
- "sha256": "1k2lsgn2zz82qpbz1ym9d69a008q3w5z7szszs1i2pz2cqwp4f91"
+ "deps": [
+ "transient"
+ ],
+ "commit": "30bbd177d2664c5a0d33f17b42c07705b8473b66",
+ "sha256": "0126jqcr9gjyd8sg0dmdg2j1pcgd55i7kxmrw81ysy6x586h3h1q"
}
},
{
@@ -116730,26 +117982,26 @@
"repo": "clojure-emacs/sayid",
"unstable": {
"version": [
- 20220101,
- 1357
+ 20260717,
+ 1435
],
"deps": [
"cider"
],
- "commit": "879aff586336a0ec4d46c0ed4720fb1de22082bd",
- "sha256": "013afdzz0rvb428pla78an052jvw2q95zzqvnq9z9w16y5yd1n0c"
+ "commit": "16fe77228cb3f76eee52d1be336a505f23a31223",
+ "sha256": "13gsvd11h5gq2ppgx9sk65vlcv3cgxj45br5izm3kjy6hy9hqbrg"
},
"stable": {
"version": [
0,
- 1,
+ 8,
0
],
"deps": [
"cider"
],
- "commit": "985837897ca6f9bc5f1d1b1414ad15554a60d3b3",
- "sha256": "0vdz3dxwi02an5k956apq3ah0dpzly9zd44fhmrqlcjimxc69m7p"
+ "commit": "16fe77228cb3f76eee52d1be336a505f23a31223",
+ "sha256": "13gsvd11h5gq2ppgx9sk65vlcv3cgxj45br5izm3kjy6hy9hqbrg"
}
},
{
@@ -116784,25 +118036,25 @@
"repo": "openscad/emacs-scad-mode",
"unstable": {
"version": [
- 20260330,
- 717
+ 20260519,
+ 1039
],
"deps": [
"compat"
],
- "commit": "44481331536516e34940315f67fa58f99f62a589",
- "sha256": "198m7xhyvjmqar9n7pmi7m36rvw47w2g218hkgzdkdlq55a17w32"
+ "commit": "8798dca7e919705bcbc35d4ab5639556827ccb6f",
+ "sha256": "0mqfvff8f7lqjviwz30j7vkb098xd0k8bdzznb77aw4q7gdsf8nm"
},
"stable": {
"version": [
- 98,
+ 99,
0
],
"deps": [
"compat"
],
- "commit": "546d1507cd131f55ca930de7ae1518884e8221f4",
- "sha256": "19mn6z98c8s7mspa7j8xw7za33gmpsy4iw2r9xiggdv7yh6mh8h8"
+ "commit": "8798dca7e919705bcbc35d4ab5639556827ccb6f",
+ "sha256": "0mqfvff8f7lqjviwz30j7vkb098xd0k8bdzznb77aw4q7gdsf8nm"
}
},
{
@@ -117366,19 +118618,19 @@
"repo": "precompute/sculpture-themes",
"unstable": {
"version": [
- 20260215,
- 1259
+ 20260701,
+ 1308
],
- "commit": "e5ac2c7b72ee58eb66510937270716d25484ecd6",
- "sha256": "0137zqir9p1lfazs6n8qz0nw4vajawh7w1104psabrqm2izwpjz2"
+ "commit": "8fa20dc87a86ea4576debb38a75d71f1ee6ae273",
+ "sha256": "1mw1wf62jxs3nb84b9d4ziyn6xqj4g8skg9n1dpyw6yiy3ycaazj"
},
"stable": {
"version": [
1,
- 10
+ 11
],
- "commit": "e5ac2c7b72ee58eb66510937270716d25484ecd6",
- "sha256": "0137zqir9p1lfazs6n8qz0nw4vajawh7w1104psabrqm2izwpjz2"
+ "commit": "8fa20dc87a86ea4576debb38a75d71f1ee6ae273",
+ "sha256": "1mw1wf62jxs3nb84b9d4ziyn6xqj4g8skg9n1dpyw6yiy3ycaazj"
}
},
{
@@ -117521,10 +118773,10 @@
},
{
"ename": "secretaria",
- "commit": "3eeddbcf95315da40d021a6913ccf344849c4284",
- "sha256": "04pcibzdljcfiha4yh10van8gsjrzn6bdkvkm2ahfcwrmscfn3hf",
- "fetcher": "gitlab",
- "repo": "shackra/secretaria",
+ "commit": "c2aa66942cf1712306f07bb15c8090ed10e50fd5",
+ "sha256": "0jlya40q1rflm75jzwr9cnlw94ggryhi1fc64dly8gjbp5zvkfvz",
+ "fetcher": "github",
+ "repo": "emacsattic/secretaria",
"unstable": {
"version": [
20191128,
@@ -117690,11 +118942,11 @@
"repo": "Kungsgeten/selected.el",
"unstable": {
"version": [
- 20230219,
- 1328
+ 20260523,
+ 1823
],
- "commit": "1ca6e12f456caa1dc97c3d68597598662eb5de9a",
- "sha256": "11xjv861mx15fhvv8g67ahri5p8mplnhq9sf30c825bk1f0h7xzy"
+ "commit": "9f5a6324e4911515972989841f143696472f2374",
+ "sha256": "00k3r89br7wqd30ka94igsbk7iqljf9ink60pbc2wkr6i5xl5hdi"
}
},
{
@@ -117705,11 +118957,11 @@
"repo": "captainflasmr/selected-window-accent-mode",
"unstable": {
"version": [
- 20260326,
- 837
+ 20260630,
+ 801
],
- "commit": "1ab6e720ee2c34035b5d0ab855c32d471f7ca849",
- "sha256": "0avkn256njlzkn0hkr7l1rykcsrs8zgmpahnj6zm5z789200g7c2"
+ "commit": "57dfb3b4c65943f542eca322644cfa4d0731366c",
+ "sha256": "0b2r09jkpvcsj01cdw1cwajhlfvavbqk11fnsxcph2bbkin0a7yv"
},
"stable": {
"version": [
@@ -117803,28 +119055,43 @@
"repo": "radian-software/prescient.el",
"unstable": {
"version": [
- 20250816,
- 19
+ 20260628,
+ 2243
],
"deps": [
"prescient",
"selectrum"
],
- "commit": "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18",
- "sha256": "0f4wi8aq3yfykxfza4y4c5yhcs50cs3gpfj0qrmvfq9hvkhzj52w"
+ "commit": "5649977fa7789e4615efeca09397ed7eccd06dfc",
+ "sha256": "199150yng81f6n3kb120s37yf2dqs0i9k91f2gzkk8kjn6hvrsj8"
},
"stable": {
"version": [
6,
3,
- 2
+ 3
],
"deps": [
"prescient",
"selectrum"
],
- "commit": "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18",
- "sha256": "0f4wi8aq3yfykxfza4y4c5yhcs50cs3gpfj0qrmvfq9hvkhzj52w"
+ "commit": "5649977fa7789e4615efeca09397ed7eccd06dfc",
+ "sha256": "199150yng81f6n3kb120s37yf2dqs0i9k91f2gzkk8kjn6hvrsj8"
+ }
+ },
+ {
+ "ename": "sema-mode",
+ "commit": "be69ff027d4d11a3a4d87b190aa794fea638c079",
+ "sha256": "06k9mac5cdlxpay408221m4xhljcrxc12xyllyq4gqrb5xwvmc3q",
+ "fetcher": "github",
+ "repo": "sema-lisp/emacs-sema",
+ "unstable": {
+ "version": [
+ 20260713,
+ 653
+ ],
+ "commit": "296c970854225ffa2f1a9944835f07e40b5cd7b0",
+ "sha256": "1m0q874nzvp4rph5dkfv0whkalcgff2jnjnwyxikfi0n7w1bvq74"
}
},
{
@@ -117906,16 +119173,16 @@
"repo": "conao3/seml-mode.el",
"unstable": {
"version": [
- 20230702,
- 1446
+ 20260516,
+ 826
],
"deps": [
"htmlize",
"impatient-mode",
"web-mode"
],
- "commit": "23d684ac590fad6aa3c5ce3962c4683c1eb8fdb5",
- "sha256": "1146ap0jl1n0qfn117r3iz98zm3qfwm5w0hj0gigq0cqy9c305lb"
+ "commit": "ec1efc3fb1a3d831a744bdaa0beb4ac5fcf59d2c",
+ "sha256": "0pmxglsyp2p0h1a3qmwbwnacqfrdbjfad2ja4gc49i4qz0jcp9x5"
},
"stable": {
"version": [
@@ -118260,11 +119527,11 @@
"repo": "vspinu/sesman",
"unstable": {
"version": [
- 20240417,
- 1723
+ 20260616,
+ 1239
],
- "commit": "7bca68dbbab0af26a6a23be1ff5fa97f9a18e022",
- "sha256": "1gl2dv7smyxkga4b5dflahqhasw9k15ppc4s0py29454p5k861yi"
+ "commit": "7eb733acb33e610a53979fa7fc13393eeda3cc53",
+ "sha256": "10c0djz3pqi84fynajaqkxls7j7r04xylxgfpysvlmj1jhd3f4lp"
},
"stable": {
"version": [
@@ -118388,17 +119655,17 @@
},
{
"ename": "sexy-theme",
- "commit": "3c721d77616bda8bc4b7819a24698690c737c07e",
- "sha256": "0pfnn880iyjzsr4fcrrpc65d0z5a9s4iy4bgrz7qrrjfygdni6fz",
+ "commit": "1e1e825c81265015938b1fca212b88b54982cbba",
+ "sha256": "1f2wh180smq8g6cny5yd2cnjkzam2xjykqlj7gy282rnj6bhs8gz",
"fetcher": "github",
- "repo": "thebigcicca/sexy-theme.el",
+ "repo": "xenodesire/sexy-theme.el",
"unstable": {
"version": [
- 20250312,
- 1640
+ 20260708,
+ 327
],
- "commit": "57cca02c067ded3964de6cf1566ef08cf5130189",
- "sha256": "0qn0h309dqdi08bjfwdm1l0rpq1r2gzv88v2azwnnrxqldk2lkzs"
+ "commit": "eb747facb5916d8cbcac3e5d086317ce5e1ff341",
+ "sha256": "0kbjmz4lv9812qxl2d3q195833zyrb641p1kbfp4wbrkvy9jpgn3"
}
},
{
@@ -118554,6 +119821,30 @@
"sha256": "11g9lsgakq8nf689k49p9l536ffi62g3bh11mh9ix1l058xamqw2"
}
},
+ {
+ "ename": "shannon-max",
+ "commit": "73d14d4edcf1d456fc94b0edfa25334231eaa132",
+ "sha256": "0kyifilkk5xsimvyfwz894zwq2znycd3dwvi7qdnl3vhx7im9bck",
+ "fetcher": "github",
+ "repo": "sstraust/shannonmax",
+ "unstable": {
+ "version": [
+ 20260505,
+ 1426
+ ],
+ "commit": "539bd5f771b798973734696b3b0ae10f56d3966d",
+ "sha256": "0hg36vyn3lxl60jid04r61c9vwr7c3g1sniiwix86wv1ysmh6qi9"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 1,
+ 1
+ ],
+ "commit": "9ebeddb9e0fe4958a2347288d3860097a331a77c",
+ "sha256": "0pr14gywkpjmcsvjslqb0sxpk2r88s0sdiq67l7sxfkp9hrcszjx"
+ }
+ },
{
"ename": "shanty-themes",
"commit": "202aaca417d9e7a5a473fe4e448b13fa4ca3a444",
@@ -118679,20 +119970,20 @@
"repo": "xenodium/shell-maker",
"unstable": {
"version": [
- 20260330,
- 851
+ 20260713,
+ 844
],
- "commit": "6377cbdb49248d670170f1c8dbe045648063583e",
- "sha256": "0v2iqvr2ywng5d22sw88k90i2jzl3cf2ybp9q6qpqirhvlsbgq19"
+ "commit": "071c6df3ca22a2f4c0daa689848ac9bd21bf4e2b",
+ "sha256": "1bbh53hg1j6ic6pjjprl5y6h217f4zcj7z7pyyp5d75qv7m59f0v"
},
"stable": {
"version": [
0,
- 90,
- 1
+ 93,
+ 5
],
- "commit": "38951e875c1203f1dd6d4a4a3bc57e6a7ffc066a",
- "sha256": "06ibxnb765sjcxjv2w923cnjr9664qp2pf7w3wxdp8vrbxg1s670"
+ "commit": "071c6df3ca22a2f4c0daa689848ac9bd21bf4e2b",
+ "sha256": "1bbh53hg1j6ic6pjjprl5y6h217f4zcj7z7pyyp5d75qv7m59f0v"
}
},
{
@@ -118703,22 +119994,19 @@
"repo": "kyagi/shell-pop-el",
"unstable": {
"version": [
- 20241207,
- 1539
+ 20260610,
+ 2231
],
- "commit": "657171f296fc930b1f335a96e6f67ae04b731b19",
- "sha256": "1j8bwgrp4ydpd4s08px15sv5ri28zyb8zfpmfanh9k77m4hmx8cq"
+ "commit": "446b1691454e65be648dcb7e316639aa7dd73be2",
+ "sha256": "03j6kv0vhijjwb1d9rfb075d9qfbfi021prjwyx9a9jwp90z7pbr"
},
"stable": {
"version": [
0,
- 64
+ 70
],
- "deps": [
- "cl-lib"
- ],
- "commit": "4a3a9d093ad1add792bba764c601aa28de302b34",
- "sha256": "1ybvg048jvijcg9jjfrbllf59pswmp0fd5zwq5x6nwg5wmggplzd"
+ "commit": "29f279c36c002810b750c10326ccd7d63b3aded1",
+ "sha256": "1sdi7ckn3dcxy9kw7xz2b5z46fgjjn5mvwpqsmjh3qa6kqirlwmi"
}
},
{
@@ -118933,6 +120221,33 @@
"sha256": "1d8462mrifp33pbkr5kgkb0m6fk98r6ysi6j9giyj83xih9rpxd5"
}
},
+ {
+ "ename": "shexc-ts-mode",
+ "commit": "8d43ade341b5f0902f5e7748d325592e30178cc1",
+ "sha256": "03isnhya3hfc0l80p5m7xi6qdz83xb1zwam0yqgayc9zpal9yw0y",
+ "fetcher": "github",
+ "repo": "ericprud/shexc-mode-for-emacs",
+ "unstable": {
+ "version": [
+ 20260705,
+ 2334
+ ],
+ "deps": [
+ "compat",
+ "transient"
+ ],
+ "commit": "d113ddc322a7cca2ef92ee6af95e5755af429ccb",
+ "sha256": "0xzfzcc43skcgqm8h9g6c6bnd1qbadd7q7q0sakczal66ndwvrnb"
+ },
+ "stable": {
+ "version": [
+ 3,
+ 0
+ ],
+ "commit": "485f3b3d215ad86ba36dcdca9cf9adfbeaba049b",
+ "sha256": "1jy3y3bqhg95451mhc3jkak745cnv6f4wgs8s7b2kl3lc2alga79"
+ }
+ },
{
"ename": "shfmt",
"commit": "a20dde08de1a7cd70739a791e1ae321e8f152685",
@@ -118970,11 +120285,11 @@
"repo": "ideasman42/emacs-shift-number",
"unstable": {
"version": [
- 20260103,
- 831
+ 20260620,
+ 1211
],
- "commit": "a71f5c3c77affc27a3d0bf16886a8a3b03c05044",
- "sha256": "03xv2y03xn08mb2hmqd5kljqa4jsfwg3l89micc6xvvkl1slimsj"
+ "commit": "d5e8bece6e6ab21ad5a93330d49b2554e9eb72a9",
+ "sha256": "139ilxbqjcf1x3x0dc9vw0jf986cr7qkc2x7fxggkcny90dwiqhi"
},
"stable": {
"version": [
@@ -119142,11 +120457,11 @@
"repo": "ideasman42/emacs-show-inactive-region",
"unstable": {
"version": [
- 20260410,
- 318
+ 20260612,
+ 949
],
- "commit": "d2715aba9fb17e38651b434f0f71fa2234eb8576",
- "sha256": "0q4qxazzvgjql6bcyv2awncgyb7f47yl738wi7ivr08hsf3k179k"
+ "commit": "c870fe641c56328458e16d92fd7aedf688844a3b",
+ "sha256": "15b6iynwxjxha86gsa1z1a8vfq346zprw39ngqv5pr834hyqyyrq"
}
},
{
@@ -119496,11 +120811,11 @@
"repo": "rain-64/sidebuf",
"unstable": {
"version": [
- 20260415,
- 2249
+ 20260621,
+ 1644
],
- "commit": "89ca26d1859e89759f00065c07904d3ef5c80a4f",
- "sha256": "19hfypy9ca0rnh66pfyzm2g93dn0q3iak4mgs8nx9vgnwsrc64sz"
+ "commit": "bac206ea46bdf8450317d29b98dfcd970aa6e85e",
+ "sha256": "0prya6sb1q35wq5ms0gq55n34ca47dwmx9735qacmfwcd0z61r9q"
}
},
{
@@ -119526,14 +120841,14 @@
"repo": "emacs-sideline/sideline",
"unstable": {
"version": [
- 20260101,
- 540
+ 20260716,
+ 349
],
"deps": [
"ht"
],
- "commit": "b4ada1ddf7da96c2e87453130f6ff7b7d577810f",
- "sha256": "1kw3294cz43425zmayv7jsfy9q9466jirdkyfagfh27v20bcp6vy"
+ "commit": "247cd6f6a0a841c5da20b3cc179d77c118641d66",
+ "sha256": "1ab9vhak97qkprg2ayh6s9p4isbiq8glbgvgf1an768cpzlky67y"
},
"stable": {
"version": [
@@ -119621,16 +120936,16 @@
"repo": "emacs-sideline/sideline-flycheck",
"unstable": {
"version": [
- 20260101,
- 541
+ 20260514,
+ 1443
],
"deps": [
"flycheck",
"ht",
"sideline"
],
- "commit": "5a4d63210acf735829b08164897fef6a2abc8bab",
- "sha256": "0mk7xbkhrknkc8wbkjbnsd2v12gzbrgpvwi7yzrj01dlmjqn9268"
+ "commit": "ceacbb060c382e31a47b7c7c09da0b42f4d091f5",
+ "sha256": "1z2ix4crmgxwjdrya2bzsw06jqpf1nhvnigrv5h3mz17fl6fb2lp"
},
"stable": {
"version": [
@@ -119685,8 +121000,8 @@
"repo": "emacs-sideline/sideline-lsp",
"unstable": {
"version": [
- 20260101,
- 542
+ 20260503,
+ 1235
],
"deps": [
"dash",
@@ -119695,8 +121010,8 @@
"s",
"sideline"
],
- "commit": "dfa29a7b27e5ab64788c76544444f678ae4db18d",
- "sha256": "027r0hfqw89pnknw1qmmgzmjixbg0dzk1vgsicnvdqgxr22lraym"
+ "commit": "393459a7a947a62eb3f1d587fe576937afefb63f",
+ "sha256": "1s4j1zmrrz6hzrksb3z334hn5xysvqqqappprpj6ywmyyfylpzqw"
},
"stable": {
"version": [
@@ -119865,26 +121180,25 @@
"repo": "skeeto/emacs-web-server",
"unstable": {
"version": [
- 20230821,
- 1458
+ 20260623,
+ 1110
],
"deps": [
- "cl-lib"
+ "compat"
],
- "commit": "347c30494d3bcfc79de35e54538f92f4e4a46ecd",
- "sha256": "1dj2w5yx2dzv6gv4iwahr3mx46dhjfaimw5yycdhb0iljr97a4lp"
+ "commit": "ceb208f96601be09397fc9e64fa96014ac1c8739",
+ "sha256": "0svqrd4a7xmxjnqdbj3sbx5glrg1b9gsr6rxy9rz5r1yz2nq1pzk"
},
"stable": {
"version": [
1,
- 5,
- 1
+ 6
],
"deps": [
- "cl-lib"
+ "compat"
],
- "commit": "a5eb49a6567e33586fba15dd649d63ca6e964314",
- "sha256": "0dpn92rg813c4pq7a1vzj3znyxzp2lmvxqz6pzcqi0l2xn5r3wvb"
+ "commit": "5a9c69ae93ed5e2cdca98f51b41f6a6782091d74",
+ "sha256": "0cbidjfrrwwpj73248bw8mb1fbhh4md9awhq4x6wmjl6lkfwr8pj"
}
},
{
@@ -120139,14 +121453,14 @@
"repo": "captainflasmr/simply-annotate",
"unstable": {
"version": [
- 20260422,
- 1527
+ 20260630,
+ 653
],
"deps": [
"transient"
],
- "commit": "fe7ed2ebcda0d1899f97f06191adbf260cc5b1eb",
- "sha256": "0c3lwzcz6lcf1jdyxlln0npdlvnc3npz0743cjzkwy757wbdnlvs"
+ "commit": "330c6b4014dcb42526b7a76affed345b1aba8b89",
+ "sha256": "0xa82hl582plg47ash7ivs05l4yfhbnyax8d1k9640lr7a4nfvss"
},
"stable": {
"version": [
@@ -120158,6 +121472,30 @@
"sha256": "11irqfqk2rrsncaxm4dggxd639p4ljzcpvibv6g4qpvnzpdihjc8"
}
},
+ {
+ "ename": "simulacrum",
+ "commit": "c384223ee1dda500fa03fa314fdaf7b4a6da1e94",
+ "sha256": "0fxzkvm0rmjzzv4p9mavvrbr0yp6kzswzhyfh9sjah0ssxl3fgkh",
+ "fetcher": "github",
+ "repo": "ErikPrantare/simulacrum.el",
+ "unstable": {
+ "version": [
+ 20260601,
+ 35
+ ],
+ "commit": "ad01fcf054f9fc573b7023e2fc86566d27ae45b1",
+ "sha256": "1k06jm4v2xya267hlj516sad99swxi63i2cxdyq1kq46mx1ma40l"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 1,
+ 0
+ ],
+ "commit": "ad01fcf054f9fc573b7023e2fc86566d27ae45b1",
+ "sha256": "1k06jm4v2xya267hlj516sad99swxi63i2cxdyq1kq46mx1ma40l"
+ }
+ },
{
"ename": "sink",
"commit": "9f6b09154d54b3bfbc16ef606fc7dfefb4762014",
@@ -120196,11 +121534,11 @@
"repo": "laishulu/emacs-smart-input-source",
"unstable": {
"version": [
- 20251208,
- 853
+ 20260711,
+ 608
],
- "commit": "515e1dbe0180f33c292660b4b70d02d47153be5b",
- "sha256": "1gd9zribaif3kdaja2csbhc1a05vh6bjxqfm4qlk4bvw88ldqv0b"
+ "commit": "7ca3e115f159f22ddb4bcea85a22246ee03c422c",
+ "sha256": "1s8sy3vv55hh63rrpprd24p934lmvll2m5wspwfi2pibvx9jajkv"
}
},
{
@@ -120211,8 +121549,8 @@
"repo": "magit/sisyphus",
"unstable": {
"version": [
- 20260101,
- 1900
+ 20260620,
+ 1659
],
"deps": [
"compat",
@@ -120221,14 +121559,14 @@
"llama",
"magit"
],
- "commit": "7774ea7030fb7b2793eff41a8cae1e80c2ed955a",
- "sha256": "0j8cz9gmb49x60hi0fq4swkr0nyyahda35nj7pqn9brpgiihaang"
+ "commit": "dd4ae5d52c9d862c2ebeb1c72422ba0f6e22e62b",
+ "sha256": "13sgw5z0ww14ff7rnzd248a2d19rpkyhw8p222fgh59nri1n7dfm"
},
"stable": {
"version": [
0,
4,
- 0
+ 1
],
"deps": [
"compat",
@@ -120237,8 +121575,8 @@
"llama",
"magit"
],
- "commit": "7774ea7030fb7b2793eff41a8cae1e80c2ed955a",
- "sha256": "0j8cz9gmb49x60hi0fq4swkr0nyyahda35nj7pqn9brpgiihaang"
+ "commit": "4c88989715f2c347714e9cad26b03789e2b68143",
+ "sha256": "0mpclwvygn28qk0xabz8fmjmiha4v8dk8k2z2vi5fgj8zrdmbm1k"
}
},
{
@@ -120329,9 +121667,9 @@
},
{
"ename": "sketch-themes",
- "commit": "d1b2026ff5fe7a2893dd4c71d9089e97c4fd48f1",
- "sha256": "18n6blkrn72zyjj4ik3f6w2axmn0rwk8lpbcaynl3y7v7ij35m0r",
- "fetcher": "github",
+ "commit": "1715bc37bd72251436041d0089c1472774c81379",
+ "sha256": "02ki700xrc87b46jpi0s2031c87dc42q9dp9yddrgv77wf0fa9xs",
+ "fetcher": "codeberg",
"repo": "dawranliou/sketch-themes",
"unstable": {
"version": [
@@ -120481,8 +121819,8 @@
"repo": "emacs-slack/emacs-slack",
"unstable": {
"version": [
- 20260417,
- 1053
+ 20260716,
+ 1645
],
"deps": [
"alert",
@@ -120494,8 +121832,32 @@
"ts",
"websocket"
],
- "commit": "904741295a5df0e6a127cacaf60a567924bb27f3",
- "sha256": "0n6z7p9b3n8mlwkwzv6b588lcla9d0izmrhf8p5ajlr1pf979i92"
+ "commit": "93be9f2a47a576e300568fb82b6d5db53b9f200b",
+ "sha256": "0var54x5r8db5vppsg7lq5badzy7sbqj87zg4cjjsks4fwmil8b6"
+ }
+ },
+ {
+ "ename": "sleek-modeline",
+ "commit": "65dce69ca7a66141a74470c0c0345d7b3a960e28",
+ "sha256": "1hx3riadzdxspjshc8vasqv7dnf0hcpn5kw6l5xi6kjxix0iw6d7",
+ "fetcher": "github",
+ "repo": "abidanBrito/sleek-modeline",
+ "unstable": {
+ "version": [
+ 20260712,
+ 2128
+ ],
+ "commit": "e5981c02498f4922f220f16f062f91512a5c406d",
+ "sha256": "1hj0b6gyf56lf0dcambdasg068z2i6jja3w3m6fb6k01cxdppjc2"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 1,
+ 0
+ ],
+ "commit": "e5981c02498f4922f220f16f062f91512a5c406d",
+ "sha256": "1hj0b6gyf56lf0dcambdasg068z2i6jja3w3m6fb6k01cxdppjc2"
}
},
{
@@ -120553,14 +121915,14 @@
"repo": "slime/slime",
"unstable": {
"version": [
- 20260421,
- 2256
+ 20260719,
+ 420
],
"deps": [
"macrostep"
],
- "commit": "b18fc71ab25ad8dd16e008ad6ed1ac1eb34be736",
- "sha256": "0d27fqnbsl4ispi722b8q7bsd4n32rccm0p0hysq7q0b2ml2kg1g"
+ "commit": "055c1c98c2b7791162b0e8c994051a7d72208dc1",
+ "sha256": "0scijga623w7q0hx04dl9lybvd3pvp2pvz51fwfn3gxgc64ip7pd"
},
"stable": {
"version": [
@@ -120888,28 +122250,28 @@
"repo": "mmgeorge/sly-asdf",
"unstable": {
"version": [
- 20221119,
- 2235
+ 20260614,
+ 2139
],
"deps": [
"popup",
"sly"
],
- "commit": "6f9d751469bb82530db1673c22e7437ca6c95f45",
- "sha256": "0bxan0h12xqdsfr3bpk7n8zj7d5xvp4v3wg4fbcf2xw63j02m810"
+ "commit": "c1fa52dadb2f453243dc522203b7a883adef63fb",
+ "sha256": "090cam192hrk6xriwscbfnzkdbvrbmdncdrmxxqgv048bcnj93g0"
},
"stable": {
"version": [
0,
- 2,
+ 3,
0
],
"deps": [
"popup",
"sly"
],
- "commit": "3180921efdc19a2195960e1d601b2a6f31a6feea",
- "sha256": "0gncp8xv33s4wx594bgd35vr1455bcggv1bg28qv75mhv41nzw97"
+ "commit": "c1fa52dadb2f453243dc522203b7a883adef63fb",
+ "sha256": "090cam192hrk6xriwscbfnzkdbvrbmdncdrmxxqgv048bcnj93g0"
}
},
{
@@ -121461,19 +122823,19 @@
"repo": "mickeynp/smart-scan",
"unstable": {
"version": [
- 20170211,
- 2033
+ 20260710,
+ 1518
],
- "commit": "234e077145710a174c20742de792b97ed2f965f6",
- "sha256": "1nzkgfr1w30yi88h4kwgiwq4lcd0fpm1cd50gy0csjcpbnyq6ykf"
+ "commit": "5e283b92b5c5826e194043b0314e0d6d88a94a62",
+ "sha256": "0dxbwxl3280700my2rcpxga2z4aqs1xqivinr91ia9n0w2jgad31"
},
"stable": {
"version": [
0,
- 2
+ 3
],
- "commit": "13c9fd6c0e38831f78dec55051e6b4a643963176",
- "sha256": "1sd7dh9114mvr4xnp43xx4b7qmwkaj1a1fv7pwc28fhiy89d2md4"
+ "commit": "5e283b92b5c5826e194043b0314e0d6d88a94a62",
+ "sha256": "0dxbwxl3280700my2rcpxga2z4aqs1xqivinr91ia9n0w2jgad31"
}
},
{
@@ -122294,11 +123656,11 @@
"repo": "bbatsov/solarized-emacs",
"unstable": {
"version": [
- 20260329,
- 1559
+ 20260610,
+ 1943
],
- "commit": "0972a0f1471ed67211b7c8918a3c049380050d7b",
- "sha256": "17h3kncdkdnn2c64g0hlbl45yvv6vqvvy8akcgzn32iw7nlx7b9a"
+ "commit": "0d9d9efff196d8d8ee4ac606e70bf062a057136b",
+ "sha256": "12679vralilqxzdfkkylcxfj6qf74na0pakrbc4wqkqx8gak11vf"
},
"stable": {
"version": [
@@ -122512,20 +123874,20 @@
"repo": "djgoku/sops",
"unstable": {
"version": [
- 20251102,
- 57
+ 20260518,
+ 350
],
- "commit": "7cce0d6800eff1e9c21ab43fffe1918bcc006e7d",
- "sha256": "0vi7jw7zqj04ikajnssa68v6npd43bvaiw2afck25wxa9hnaja7f"
+ "commit": "95b2178a71dcbf3e69729c52cba2bc23171e059d",
+ "sha256": "01wd7qglz3z5ip9mviy92bhfvmnhfm3mwfirxrhjb9y4jxyq9da3"
},
"stable": {
"version": [
0,
- 1,
- 8
+ 2,
+ 0
],
- "commit": "4c0eba238837b439ac23493e70255abb22653ac6",
- "sha256": "0vi7jw7zqj04ikajnssa68v6npd43bvaiw2afck25wxa9hnaja7f"
+ "commit": "95b2178a71dcbf3e69729c52cba2bc23171e059d",
+ "sha256": "01wd7qglz3z5ip9mviy92bhfvmnhfm3mwfirxrhjb9y4jxyq9da3"
}
},
{
@@ -122554,11 +123916,11 @@
"repo": "mssola/soria",
"unstable": {
"version": [
- 20250703,
- 508
+ 20260702,
+ 1424
],
- "commit": "65581530155b097fc314a19b2851a7dffcfd3790",
- "sha256": "0142sa6dxlj77f629xp8724fja1378hjqp2k5mw7zkmjfj2finj4"
+ "commit": "bd83db9f83dff1cc717f9a6b4a2feab05031458a",
+ "sha256": "1s5iz6fzbf91cabhvgdhpkbq1kr7s4cvw3gzm9l93vysbggnbgyy"
},
"stable": {
"version": [
@@ -122958,11 +124320,11 @@
"repo": "nashamri/spacemacs-theme",
"unstable": {
"version": [
- 20260414,
- 2052
+ 20260523,
+ 1256
],
- "commit": "789d20c55cd01f757929d0232dd1d5227c84ad7e",
- "sha256": "0zxydjg954kaqsc5xi4yzr0b78nk4mxvbl5ch4yw6zv15h99n68i"
+ "commit": "cbd290dfde96f53a7b41730c7840850a8a7b8a02",
+ "sha256": "07a15mx6p1s3dpbqplv24p7blqvdcr8b92g9ds60za6p25yrfmgs"
},
"stable": {
"version": [
@@ -123110,11 +124472,11 @@
"repo": "ideasman42/emacs-spatial-navigate",
"unstable": {
"version": [
- 20260420,
- 428
+ 20260705,
+ 40
],
- "commit": "764cf2ea5ded501493bfd543c5a290b8cda847d5",
- "sha256": "0dqa4lfw8kmnpnmf62s5p0z6y15k26c5y7vfqcv32apqzynqvkva"
+ "commit": "358337ddaef449ad0f1c6b9ab29f99db363ab319",
+ "sha256": "0p8arfa19jq1i7cqd6hz5cld9c976ig4zmz5zdwsvjz9hr2s0aj7"
}
},
{
@@ -123155,11 +124517,11 @@
"repo": "condy0919/spdx.el",
"unstable": {
"version": [
- 20260424,
- 159
+ 20260717,
+ 154
],
- "commit": "2cc92e11cc1b6007d8ffdd18c541e9ac126664ed",
- "sha256": "01qk8zkm9kla42dabpjh04s2p8zmx7qfh27i7h5i5as0d4b3wgkh"
+ "commit": "e839ca0184713dd954aba57d59c618b7afdb678e",
+ "sha256": "04k4jmxx0znh605nzlqkfr9zv2xi0djhp123zgik09zcqdh68hc6"
}
},
{
@@ -123220,14 +124582,14 @@
"repo": "dakra/speed-type",
"unstable": {
"version": [
- 20260330,
- 1430
+ 20260611,
+ 1554
],
"deps": [
"compat"
],
- "commit": "f349c000c4d9541cc0e9dcf072555c7f4c9f9a46",
- "sha256": "0y2vi01agwwjgklxsfaf1hh9q1mnn82s2rnkkmqnqrycpa0p1wzk"
+ "commit": "f004cce95e0f5c5048d38f973b654587ed73abf6",
+ "sha256": "1a1fmnlkgrya86hw9alccfjhldg5lx1bbffvlhk5hqkgsm1dx627"
},
"stable": {
"version": [
@@ -123294,11 +124656,11 @@
"repo": "ideasman42/emacs-spell-fu",
"unstable": {
"version": [
- 20260108,
- 1336
+ 20260524,
+ 636
],
- "commit": "94686051261a065574fc6535979f8ff08a37f0ee",
- "sha256": "1gbyx1w0k1jwngp22qm7yl1wg82ciybnarcm3frqch7b472dpr7h"
+ "commit": "103c4aaf0d2ec452359e087bed50504e2bdf4661",
+ "sha256": "1hm396yhh62k95n8r0kw5jxnbfzx5i3d56sj51p7xb02ayccwv8l"
}
},
{
@@ -123681,6 +125043,21 @@
"sha256": "0s7xx83w6w9nvja999fnl6gw132d01l3qvms87i5fcfrvd9czsbl"
}
},
+ {
+ "ename": "sql-bigquery",
+ "commit": "c1d99b61ec22c5a86e5264c317cb39d845d45a67",
+ "sha256": "09gmia1vibh6k50wbh0w4hj8mrz4yzczgsyqjmd0rlqwlc6jsvp7",
+ "fetcher": "github",
+ "repo": "regadas/sql-bigquery",
+ "unstable": {
+ "version": [
+ 20260502,
+ 1517
+ ],
+ "commit": "1d068f7a7226d7af70d4ffceb86bc5e91826c29e",
+ "sha256": "0mjnv0llz818vq3j3rz7k4gya1jhmk0ppfdcf0v8i0lxp331awjs"
+ }
+ },
{
"ename": "sql-clickhouse",
"commit": "cdd1f8002636bf02c7a3d3d0a075758972eaf228",
@@ -123948,11 +125325,11 @@
"repo": "srfi-explorations/emacs-srfi",
"unstable": {
"version": [
- 20260403,
- 411
+ 20260719,
+ 56
],
- "commit": "272df3cae401da0853dc50344500b522f96a9286",
- "sha256": "1rbisgin3vs2yicyxs0acf6j59hzrr14vddv89vf223r40ipgwqp"
+ "commit": "4b8e56ce6545de9b33ddb841f535c5f1ec301e00",
+ "sha256": "0qmn8fr9d1bk0pgfsq4p9y0lw0f1209pwyi4pz37r8za7xfpyld8"
},
"stable": {
"version": [
@@ -123966,6 +125343,36 @@
"sha256": "1il0z6lb2jz495gdp6g7wc0n9a4z8z8ndhrrl71rnws53fah0lm3"
}
},
+ {
+ "ename": "srs",
+ "commit": "201754208a9e4d7db2ad88f8672dddb865c53fa1",
+ "sha256": "1p1grz3wy9znqw2zblqxmspx3sxzc8mqn7ja63f8p8vs9rsr8n9k",
+ "fetcher": "github",
+ "repo": "Duncan-Britt/srs.el",
+ "unstable": {
+ "version": [
+ 20260716,
+ 2238
+ ],
+ "deps": [
+ "transient"
+ ],
+ "commit": "72b3db068a3b7a5e0a3f02d5f24434bec984225f",
+ "sha256": "1s9pv9y2hlgnwj8yr0f2n7c99cdybg7a63c5rqm86dgfpq03lxp0"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 0,
+ 1
+ ],
+ "deps": [
+ "transient"
+ ],
+ "commit": "57cf956a746c2f948b801514f62a55a97fb3ef22",
+ "sha256": "02jzidpc56pw54pf2781i4rsgbw7kcbhha2m1p3a1pkrbxjjpyxz"
+ }
+ },
{
"ename": "srv",
"commit": "6b0b7f22631e7749da484ced9192d8ae5e1be941",
@@ -124062,11 +125469,11 @@
"repo": "peterhoeg/ssh-config-mode-el",
"unstable": {
"version": [
- 20260108,
- 2149
+ 20260706,
+ 1430
],
- "commit": "f21726d6f44a0e769a15f0a94620078a326774f7",
- "sha256": "0y8m7j2bwg4v2xbwfbdhfsxah47yfydyh61wybl5akmiwgm6101p"
+ "commit": "a171e48c3cef777556961323d4dd6172a94be0f1",
+ "sha256": "0pvm1hh3946y59xd70p687rnyl3c0qd7dxsmjy1x8fbwkqby9sd8"
}
},
{
@@ -124259,26 +125666,26 @@
"repo": "draxil/starling-el",
"unstable": {
"version": [
- 20251029,
- 707
+ 20260427,
+ 1351
],
"deps": [
"plz"
],
- "commit": "298186dc003052051cbcac08b270afb2b1f4f2b9",
- "sha256": "01s7bkn8hr5j4ynk4lclc4269p1dr0l3zl5hlpc047ln32b2gfjb"
+ "commit": "9a5f3003d40a9c6bd64b5cf396973c4922006e4d",
+ "sha256": "0ns4f6nj80bygyizisabj6d25dpd3y98a1ni9flm0gk2q03hwh43"
},
"stable": {
"version": [
0,
1,
- 4
+ 5
],
"deps": [
"plz"
],
- "commit": "e6fae24f889d886f3d02cafee0a6067d35576378",
- "sha256": "1igmjvzjlbvv543laqajd5i08dzabd4dv3p9fvg7r3znk17fl2bq"
+ "commit": "9a5f3003d40a9c6bd64b5cf396973c4922006e4d",
+ "sha256": "0ns4f6nj80bygyizisabj6d25dpd3y98a1ni9flm0gk2q03hwh43"
}
},
{
@@ -124448,20 +125855,20 @@
"repo": "stacked-git/stgit",
"unstable": {
"version": [
- 20251110,
- 503
+ 20260622,
+ 407
],
- "commit": "020140581698f62d846c995ee6e3bebe0c20ff14",
- "sha256": "0r9canxbj30anga9mbhym87jdrxcd0xp4d7a3lfhrrbmig5z2pff"
+ "commit": "faa026a62a423762b9821d332aa0f13d59b339e0",
+ "sha256": "08hw37c1l4lrfkpch4vk1z6zcgvf89pkm7wsad51lhnkkaqrf7cr"
},
"stable": {
"version": [
2,
- 5,
- 5
+ 6,
+ 1
],
- "commit": "020140581698f62d846c995ee6e3bebe0c20ff14",
- "sha256": "0r9canxbj30anga9mbhym87jdrxcd0xp4d7a3lfhrrbmig5z2pff"
+ "commit": "faa026a62a423762b9821d332aa0f13d59b339e0",
+ "sha256": "08hw37c1l4lrfkpch4vk1z6zcgvf89pkm7wsad51lhnkkaqrf7cr"
}
},
{
@@ -124593,28 +126000,28 @@
"repo": "beacoder/stock-tracker",
"unstable": {
"version": [
- 20250206,
- 814
+ 20260713,
+ 303
],
"deps": [
"async",
"dash"
],
- "commit": "51963a654a1199ec23f0938c247b1411fee85c6f",
- "sha256": "12aipdqhx2pfgas0c3m4i1z0p45vrrld4c6ahnx9qgp4nig9b2bh"
+ "commit": "d3482bf03e738d70396412e2437da534b9059176",
+ "sha256": "0872lhnya5lyv57pn530yi2gbrrbzsf4a8ihpkc905z0gzw0kh34"
},
"stable": {
"version": [
0,
- 1,
- 6
+ 2,
+ 0
],
"deps": [
"async",
"dash"
],
- "commit": "58018a1747273df23dec08ec5d318da1960428c1",
- "sha256": "0jbj24pbc07gjb6zk29yzjrd80c4aaqfp2mffc4qqisws0f8gfvb"
+ "commit": "d3482bf03e738d70396412e2437da534b9059176",
+ "sha256": "0872lhnya5lyv57pn530yi2gbrrbzsf4a8ihpkc905z0gzw0kh34"
}
},
{
@@ -124829,20 +126236,20 @@
"repo": "jamescherti/stripspace.el",
"unstable": {
"version": [
- 20260422,
- 1404
+ 20260715,
+ 1824
],
- "commit": "5dd864613dc2743d0970684de7c8c01a431f1ffa",
- "sha256": "0l1rkgj5m0cka1y2qnxhisy8sx6qldw66k0bdrf1nib9dxfw3cyn"
+ "commit": "35e6e86195a1192822ed13090b60426d4a768d95",
+ "sha256": "0b8djf24rz2dvfv6i5z2588cvnawwv60fwy97483m5iafwardk0z"
},
"stable": {
"version": [
1,
0,
- 4
+ 5
],
- "commit": "e77dadb7ad15e8eeff8c874118f8ce461b70dd44",
- "sha256": "0vh45vhk873mqg2m9f6ym7n19r9d9wndd9zdr0g000qdbvmrmn9v"
+ "commit": "c8a53e2bce4347f5d6d8ae8d3050e3bbf3f96562",
+ "sha256": "1yfc0fwzpfi08p50ymmi3g8s947hdzdf42g0kic519rp4g9bd5cg"
}
},
{
@@ -125238,8 +126645,8 @@
"repo": "kiyoka/Sumibi",
"unstable": {
"version": [
- 20260417,
- 1157
+ 20260719,
+ 559
],
"deps": [
"deferred",
@@ -125247,13 +126654,13 @@
"popup",
"unicode-escape"
],
- "commit": "366cf1a2a9f408cc34c1412a4b06dfe01f46d97f",
- "sha256": "0z6g97975y2vchr2bkks4v18pk9zlcpgrffm53f4jvqjgp7pdxas"
+ "commit": "9b191439bdaa0f6a36ad95429e725d096d564096",
+ "sha256": "0rg6la4fq6m3j2blvscg4kwc32s7va7a10ar825jnsdg5cxriqn3"
},
"stable": {
"version": [
6,
- 0,
+ 2,
0
],
"deps": [
@@ -125262,8 +126669,8 @@
"popup",
"unicode-escape"
],
- "commit": "e52bd87416458bd8bb920b33fac9afdee27140d5",
- "sha256": "0zbpycvymqhjx8jrfq9rszl9yyvjjk35a2fkd45ghg7kfcqhlsk3"
+ "commit": "9b191439bdaa0f6a36ad95429e725d096d564096",
+ "sha256": "0rg6la4fq6m3j2blvscg4kwc32s7va7a10ar825jnsdg5cxriqn3"
}
},
{
@@ -125360,21 +126767,6 @@
"sha256": "08mvmp87bx5blpc8l89dwxs7kcz9vql1mlzj7jr1hfh9ds1vd602"
}
},
- {
- "ename": "supergenpass",
- "commit": "091dcc3775ec2137cb61d66df4e72aca4900897a",
- "sha256": "0ldy6j6l6rf72w0hl195rdnrabml2a5k91200s186k0r5aja4b95",
- "fetcher": "github",
- "repo": "ober/sgpass",
- "unstable": {
- "version": [
- 20130329,
- 548
- ],
- "commit": "549072ef7b5b82913cadd4758e8a0a9926f0a04a",
- "sha256": "0m02snzka243adhwwgriml133n4312lhdia3wdqjcq8y2mlp3331"
- }
- },
{
"ename": "surround",
"commit": "1d196e36a3afd6d84206fb10dcdf71a1dd272835",
@@ -125771,23 +127163,20 @@
"repo": "swift-emacs/swift-mode",
"unstable": {
"version": [
- 20251122,
- 857
+ 20260510,
+ 616
],
- "commit": "cfae3b85ad09bd293df941261afbc21e41bbb5f8",
- "sha256": "11jwdk5h3mmsmfzllqfrh11v2p96fpiswf2aahg8hr80zqk4p6nb"
+ "commit": "a4c54629ba946cf009631e25a11618e886e7b25d",
+ "sha256": "1isw98pz3kar0zffjqhfgs8l850n05ikxpnmnm7xa1r0634hlbz7"
},
"stable": {
"version": [
- 9,
- 4,
+ 10,
+ 0,
0
],
- "deps": [
- "seq"
- ],
- "commit": "fc7df7bd906a2bb04aac6e0de47fc7acf33ceed3",
- "sha256": "1z9ybkjwbdayk8yfclwp0irfy0mn15p6m1mfvv4vrn6ami2wvrsv"
+ "commit": "bf56866b98de2fd73029da2bca1035ca02f9e879",
+ "sha256": "01rn7g6xbalayx335jsvlb8kkab0p61g60fwn1h49pfi0kv2n9kx"
}
},
{
@@ -126104,14 +127493,14 @@
"repo": "wolray/symbol-overlay",
"unstable": {
"version": [
- 20260423,
- 1454
+ 20260703,
+ 1437
],
"deps": [
"seq"
],
- "commit": "253b957f5082603708b469d02ae8c31c58292823",
- "sha256": "18w7qa959na5c9rvjarrnmb3l63pdfrfv865i3nb6lx7ap6iw2jc"
+ "commit": "85d100b0cca35b70cee1b260e09af8e1fb2fcc08",
+ "sha256": "1d26wzd3bla1sqwsly1ldlzxp24z3nrr6zf8rfzxip90b6wpk3yv"
},
"stable": {
"version": [
@@ -126241,6 +127630,24 @@
"sha256": "030bglxnvrkf1f9grbhd8n11j4c6sxpabpjdr1ryx522v01fvx8j"
}
},
+ {
+ "ename": "synaxis",
+ "commit": "07e0e048519b8bcc834c5712d3a95d03683fc5fe",
+ "sha256": "1gqd69z3vs2y86y20qyqvik3sbhfwgras54n9wdi34raxpjcgjx7",
+ "fetcher": "git",
+ "url": "https://git.thanosapollo.org/synaxis",
+ "unstable": {
+ "version": [
+ 20260713,
+ 1937
+ ],
+ "deps": [
+ "keymap-popup"
+ ],
+ "commit": "fd0272e9a9dde9e31d592348638f62bcb3baebfe",
+ "sha256": "163d6qb3y3vpy72616pymhsriln9rrzawv1rcdf5iaf814qv1sah"
+ }
+ },
{
"ename": "sync-recentf",
"commit": "9858ea35f2a3faacab56b6ccba5672956560456b",
@@ -126489,6 +127896,21 @@
"sha256": "03id3zjiq15nyw0by4fari837c8362fscl7y329gn9ikf7z6hxd9"
}
},
+ {
+ "ename": "sysml-mode",
+ "commit": "de274a2c8c5bfc0e22949c5c3e409ddf34f32cb0",
+ "sha256": "0vbkkdqcs2b5y5nmgqi99k6wjy6ax1r65qmz3a4wsm4916h4d1kx",
+ "fetcher": "github",
+ "repo": "DeciSym/sysml-mode",
+ "unstable": {
+ "version": [
+ 20260528,
+ 1759
+ ],
+ "commit": "e8ff9eea7f8f5d18e6a74a48411a1b8e39dd0916",
+ "sha256": "0j32ivr2lnwdpg1am4y84by844svns8cvixgjc7j4qgkrndvpmfy"
+ }
+ },
{
"ename": "system-idle",
"commit": "d3c041dafd99718beccfe4153b34b7ac8a6848ea",
@@ -126611,11 +128033,11 @@
"repo": "ajrosen/tab-bar-buffers",
"unstable": {
"version": [
- 20240227,
- 2037
+ 20260511,
+ 1927
],
- "commit": "08a3f39c0b1673e3cad34e1f0e83fb56c903586c",
- "sha256": "0rgxwyjkhlhzr4nbbjy08l4z26cic9dw4rhlkpkv9s51wxxnhaw8"
+ "commit": "12f52b896eedd7a871df4ef985430b53bcd6c08b",
+ "sha256": "0ygyn053gmlbqbmrg8900gk0xv35rydp1x0farw9vz7rzdh18ami"
}
},
{
@@ -126780,8 +128202,8 @@
"repo": "mattfidler/tabbar-ruler.el",
"unstable": {
"version": [
- 20260417,
- 2349
+ 20260426,
+ 1441
],
"deps": [
"cl-lib",
@@ -126789,8 +128211,8 @@
"powerline",
"tabbar"
],
- "commit": "2b72193e4fa9665236ec5dd17c47d0cf91ccc977",
- "sha256": "04y6yrgqvap4gkn0c1py8qx1vp9gpnhs5xaf82qb1ak903hwwms4"
+ "commit": "306fc4f8e450704c68fca23791cfa50f2f9f99db",
+ "sha256": "1akycy81cl2lxgz7fqcmiv7lj0rvz06ym72ck2r1gpwz7iydhy1a"
},
"stable": {
"version": [
@@ -126851,20 +128273,20 @@
"repo": "isamert/tabgo.el",
"unstable": {
"version": [
- 20250103,
- 1740
+ 20260624,
+ 1540
],
- "commit": "23b6397fd61db31689feacb4b7df2b1f64e69572",
- "sha256": "13d72g9h33a8gkrw76nz6dzpalj91pp17707mqwz6zn0miyyzx9d"
+ "commit": "7cf1142c3e194ded79632846830775b42830ce51",
+ "sha256": "1yzpmfggsq96nffqmxq6zzrfkdnxawrr5qngl51mixlw9pcks573"
},
"stable": {
"version": [
1,
0,
- 1
+ 2
],
- "commit": "23b6397fd61db31689feacb4b7df2b1f64e69572",
- "sha256": "13d72g9h33a8gkrw76nz6dzpalj91pp17707mqwz6zn0miyyzx9d"
+ "commit": "7cf1142c3e194ded79632846830775b42830ce51",
+ "sha256": "1yzpmfggsq96nffqmxq6zzrfkdnxawrr5qngl51mixlw9pcks573"
}
},
{
@@ -126875,19 +128297,19 @@
"repo": "emacsorphanage/tablist",
"unstable": {
"version": [
- 20231019,
- 1126
+ 20260623,
+ 1855
],
- "commit": "fcd37147121fabdf003a70279cf86fbe08cfac6f",
- "sha256": "1n1isr98xsc66n8ax0lcld2p80rr3b9s0pnh0jllhvmbkkb88xzi"
+ "commit": "01f065e387ffe6b7a41f180f257cd12551c7a9c2",
+ "sha256": "0nc6dw9p420kf3c6wbi0fl31sm9q9357dnx3wyphj0r6162f3fvb"
},
"stable": {
"version": [
1,
- 1
+ 3
],
- "commit": "5f7b71a92bfb25418d7da86ad9c45f14b149496f",
- "sha256": "11vmvrhmsxy97bfj7jndpc58bik7177i3wvc45mlyldxwyirs962"
+ "commit": "01f065e387ffe6b7a41f180f257cd12551c7a9c2",
+ "sha256": "0nc6dw9p420kf3c6wbi0fl31sm9q9357dnx3wyphj0r6162f3fvb"
}
},
{
@@ -126930,20 +128352,20 @@
},
{
"ename": "tabspaces",
- "commit": "d0adcadc4cf81da6e1a7ec7c65ba510ff2f8f45c",
- "sha256": "0aq9vqs5ixp78ppagzgw1jcjbvfafj6gz4a8jd438l7cd6ngsq6a",
- "fetcher": "github",
+ "commit": "c333f3b3397a05eb38df3b631fbc1dc1ef87e622",
+ "sha256": "0lzbg0abxfa5cr7g76mq3ykxcq1an9wvrb2wjbx1brhk5ns69ix6",
+ "fetcher": "codeberg",
"repo": "mclear-tools/tabspaces",
"unstable": {
"version": [
- 20260222,
- 1958
+ 20260529,
+ 1452
],
"deps": [
"project"
],
- "commit": "06fe5ad149bc5852698cd0adda6dd6e320b4cf8f",
- "sha256": "180gzqjmmin35b7lj93pgrakh0b5wq10q232y5zfhibsmsnxayhi"
+ "commit": "d3a74c0d39a0029d956dc37ddbf540802fb76973",
+ "sha256": "1hgsg01l17l61g3ky6r7c6579bm9j1hm93chdajfnlzcpaz4b9p1"
}
},
{
@@ -127058,11 +128480,11 @@
"repo": "tmalsburg/tango-plus-theme",
"unstable": {
"version": [
- 20250813,
- 1242
+ 20260615,
+ 1520
],
- "commit": "6c57ae3745ab66c75d4ebb336d3403d90537206a",
- "sha256": "1apvwc5v27dq4mjv0rk5yqs0pgxmd6ar3jgxdb2488lws2z08xdq"
+ "commit": "e9be23b05e39591e0740c1a837a9f093a0e14419",
+ "sha256": "0knxfnzirf2630hv8bcvqmp3cy8r41inf3m630bq4wzlvxnhp4sb"
}
},
{
@@ -127151,20 +128573,20 @@
"repo": "devrintalen/taskjuggler-mode.el",
"unstable": {
"version": [
- 20260423,
- 1854
+ 20260506,
+ 137
],
- "commit": "49d3cdf2dbf4c27e037bb4c96bb0cc6d2e000fab",
- "sha256": "1v5hln35qwy97qnc7nrql3mr53j8q2zkadnf49mw9zdw5psl383b"
+ "commit": "e68d9e6d50c848b1a20b75af3ac1ddda95c9fe3e",
+ "sha256": "04lbsqvc4sjh30q872srafq4x551vmi1z5ffzcb7fzvg884afz0i"
},
"stable": {
"version": [
0,
- 5,
- 2
+ 6,
+ 0
],
- "commit": "9a43c9dcf36b52d302d41aeaf6ad62aa6776a966",
- "sha256": "1qj57mk2qz9wwihj5jlgx4ngf4b33n581cpwvpmbidi6rj1dwb77"
+ "commit": "e68d9e6d50c848b1a20b75af3ac1ddda95c9fe3e",
+ "sha256": "04lbsqvc4sjh30q872srafq4x551vmi1z5ffzcb7fzvg884afz0i"
}
},
{
@@ -127175,11 +128597,11 @@
"repo": "saf-dmitry/taskpaper-mode",
"unstable": {
"version": [
- 20260414,
- 1851
+ 20260715,
+ 1341
],
- "commit": "809c15fe893bb4ffa17bf515908a37c97e74afb9",
- "sha256": "1gd3ip106zdwqhk39jsj2xhsn0c6wa65g6navkiy6z3gb95gs3ha"
+ "commit": "0f8747a8736a6e1bff6cc401144799bdef0e69ed",
+ "sha256": "0cwv9s3ss990c26ilp88hb762zv6g221xm0wjhgs4k6jbcn05bi4"
},
"stable": {
"version": [
@@ -127217,26 +128639,26 @@
"repo": "phillord/tawny-owl",
"unstable": {
"version": [
- 20241104,
- 1432
+ 20260508,
+ 848
],
"deps": [
"cider"
],
- "commit": "0baa9c3e9aea40bcf9c11c9a009f0e26efbc366f",
- "sha256": "1rn0lmn0pcsyvh55kfv1afhwmgxyks8knlmncj95a53ydra0qriv"
+ "commit": "5366ed3d12e7272e7a404040d7199b0a560f25a8",
+ "sha256": "1kil0q6bc94551xs2x7z0wwk1yclqfdnf61hv1afrslm8p36z8q0"
},
"stable": {
"version": [
- 2,
3,
- 3
+ 0,
+ 0
],
"deps": [
"cider"
],
- "commit": "b2708d693400a2010370df040d7571bc30fa4d75",
- "sha256": "02p8gw7pzawzq2zzkgfx8wpp4l4zlz9zyw0f298yqrwp2zsrw5fx"
+ "commit": "5366ed3d12e7272e7a404040d7199b0a560f25a8",
+ "sha256": "1kil0q6bc94551xs2x7z0wwk1yclqfdnf61hv1afrslm8p36z8q0"
}
},
{
@@ -127381,15 +128803,15 @@
"repo": "zevlg/telega.el",
"unstable": {
"version": [
- 20260416,
- 546
+ 20260711,
+ 827
],
"deps": [
"transient",
"visual-fill-column"
],
- "commit": "5196e752b1dae4367d446a3fcc6169e6a7533093",
- "sha256": "1l6lsbzha40nvbwiaqiva96vp5iyjjqls761ggzfl3bkrslk53vq"
+ "commit": "fc6a4d1ec6edba6b3c65b3f069cce0398c2fb7a5",
+ "sha256": "1lcv7nq08llr8s0yhjbaj33lk169nyn60ldrmvjkbdra8qzy9chp"
},
"stable": {
"version": [
@@ -127520,25 +128942,25 @@
"repo": "minad/tempel",
"unstable": {
"version": [
- 20260309,
- 1547
+ 20260705,
+ 1258
],
"deps": [
"compat"
],
- "commit": "add72000e580aaf80e64195412747181fc95d231",
- "sha256": "0183qyb9cvjkav0v7q3s64gza5yxjd806j9yn0scbxhr1d1pz0lw"
+ "commit": "c5fdc3806b486d9d86a54c50efac3d4a141e789d",
+ "sha256": "1vy53i1rpzhx644qhwm2vbb3z4z00wrc2127zfd3i08h8dlck3r0"
},
"stable": {
"version": [
1,
- 12
+ 14
],
"deps": [
"compat"
],
- "commit": "add72000e580aaf80e64195412747181fc95d231",
- "sha256": "0183qyb9cvjkav0v7q3s64gza5yxjd806j9yn0scbxhr1d1pz0lw"
+ "commit": "c5fdc3806b486d9d86a54c50efac3d4a141e789d",
+ "sha256": "1vy53i1rpzhx644qhwm2vbb3z4z00wrc2127zfd3i08h8dlck3r0"
}
},
{
@@ -127549,14 +128971,14 @@
"repo": "Crandel/tempel-collection",
"unstable": {
"version": [
- 20260227,
- 1133
+ 20260516,
+ 1317
],
"deps": [
"tempel"
],
- "commit": "6292604c1d5ed0044ce0beb2d46c73697dc66ed3",
- "sha256": "1nbffii5n07928kahc4cgkfb7f434rld9vm9l9n6h0xxb1vldzwj"
+ "commit": "4ea6f92ecb69dc38c666bfa6c4a253ff94699c80",
+ "sha256": "1gvw02sfnvsfi32fqw13hxb9kwkpag195kils9rlxyq3r23pp07c"
}
},
{
@@ -127710,10 +129132,10 @@
},
{
"ename": "tengo-mode",
- "commit": "9ae2528b4322ed892d54e61a2c7c086a028aeab1",
- "sha256": "1c1c4lmilr7d1688df0ykn1j2gjg5n2sa942pr957fr2q0vay75n",
+ "commit": "7a51fd6e6eb4485d7add6216b690c19897bbfa6a",
+ "sha256": "1bll91n7x0dgxs78r49rx8k5fpsrqi9b2dy2da2w7llmk62klsmn",
"fetcher": "github",
- "repo": "CsBigDataHub/tengo-mode",
+ "repo": "ChetanKoneru/tengo-mode",
"unstable": {
"version": [
20260125,
@@ -127820,27 +129242,27 @@
"repo": "calliecameron/term-cmd",
"unstable": {
"version": [
- 20260117,
- 1350
+ 20260510,
+ 1834
],
"deps": [
"dash",
"f"
],
- "commit": "0596a96b0e5a4e8a5f828951fb6e2c1af03914c8",
- "sha256": "1fiwz43zvjx8wlzjs68lhgwjd6bywsk8pnnhc120rs7v88d6qygg"
+ "commit": "15f737427b21adc722a76a71c0aaeb2dcb95efbc",
+ "sha256": "1n1hj0xkr8ws78flcfmwn3qgvz0yvwg4705nwafysq3w29ddnlr4"
},
"stable": {
"version": [
1,
- 3
+ 4
],
"deps": [
"dash",
"f"
],
- "commit": "0596a96b0e5a4e8a5f828951fb6e2c1af03914c8",
- "sha256": "1fiwz43zvjx8wlzjs68lhgwjd6bywsk8pnnhc120rs7v88d6qygg"
+ "commit": "15f737427b21adc722a76a71c0aaeb2dcb95efbc",
+ "sha256": "1n1hj0xkr8ws78flcfmwn3qgvz0yvwg4705nwafysq3w29ddnlr4"
}
},
{
@@ -128031,20 +129453,20 @@
"repo": "milanglacier/termint.el",
"unstable": {
"version": [
- 20260412,
- 348
+ 20260517,
+ 2050
],
- "commit": "689549245bb6dc0429d8af06c4830c92b09f4667",
- "sha256": "1ggxqb9b7kv32rns9gagggmq0fsj9a8i3jkhqhfwz0c75fv05jlw"
+ "commit": "f51ab6c4ef50eb8781560d3596335a6f7f668c7c",
+ "sha256": "0wdyv7spafhj5d2y6xwdnm0dd5xv4bnaa9pc2wr6pz1q4x1r8qws"
},
"stable": {
"version": [
0,
2,
- 2
+ 3
],
- "commit": "689549245bb6dc0429d8af06c4830c92b09f4667",
- "sha256": "1ggxqb9b7kv32rns9gagggmq0fsj9a8i3jkhqhfwz0c75fv05jlw"
+ "commit": "f51ab6c4ef50eb8781560d3596335a6f7f668c7c",
+ "sha256": "0wdyv7spafhj5d2y6xwdnm0dd5xv4bnaa9pc2wr6pz1q4x1r8qws"
}
},
{
@@ -128055,15 +129477,15 @@
"repo": "ternjs/tern",
"unstable": {
"version": [
- 20191227,
- 950
+ 20260514,
+ 1348
],
"deps": [
"cl-lib",
"json"
],
- "commit": "0d19800db70a6348c627a69f444b91d21ad89629",
- "sha256": "0ydrxxc3lgs8mpg577iw5sfxgyqfbdkrghwxmv8sxf6sawvhx8zv"
+ "commit": "fab80daebd798b233a9a40d5a8b99359ace63b5e",
+ "sha256": "10fh2hkiha7y0qviw7anfiw4qfv4aajqj342sp9l4q776v8gzdx8"
},
"stable": {
"version": [
@@ -128614,11 +130036,11 @@
"repo": "monkeyjunglejuice/matrix-emacs-theme",
"unstable": {
"version": [
- 20251103,
- 1021
+ 20260615,
+ 1213
],
- "commit": "ff0d3ba077d7d48c46a00b724de8eb4ce163fab9",
- "sha256": "0bnflam6hsayh2kcjd0bydsyj64d33gcjj7w7gj3y8x0h68n89hj"
+ "commit": "fe0b8776191744359767ecc4113dda1ade4a5adb",
+ "sha256": "0yyd4z2acz48h3d6j6d7kbb4kacqhy5b47vrbsw4xnvmzyjfsiik"
}
},
{
@@ -128847,21 +130269,21 @@
"repo": "facebook/fbthrift",
"unstable": {
"version": [
- 20260420,
- 1434
+ 20260713,
+ 813
],
- "commit": "075dc1f32336878453b628373e8e0b29775a60d3",
- "sha256": "08l5hjwyfb4fm8zyp5im66r2mzbd72kz7z3ircsxzzf1zwaznn6f"
+ "commit": "fe08f6c48479e1f851390b0c88e6c5644a4e9ff6",
+ "sha256": "13fbxpzlysvj95y72a57hlkprkq3cmzg5if26fhzncc12359hfyq"
},
"stable": {
"version": [
2026,
- 4,
- 20,
+ 7,
+ 13,
0
],
- "commit": "075dc1f32336878453b628373e8e0b29775a60d3",
- "sha256": "08l5hjwyfb4fm8zyp5im66r2mzbd72kz7z3ircsxzzf1zwaznn6f"
+ "commit": "fe08f6c48479e1f851390b0c88e6c5644a4e9ff6",
+ "sha256": "13fbxpzlysvj95y72a57hlkprkq3cmzg5if26fhzncc12359hfyq"
}
},
{
@@ -128943,26 +130365,26 @@
"repo": "uzu/tidal",
"unstable": {
"version": [
- 20260109,
- 1704
+ 20260702,
+ 630
],
"deps": [
"haskell-mode"
],
- "commit": "4e444a2d5118d67a0ef7a588a2b783b39d9b1357",
- "sha256": "0yfv1pl8i256j7zy28af7x9yjgxk4bxmkbnh4j6s6bw3mfc2hx4w"
+ "commit": "5ae655255d87c983a596f398a0385b21df97df3b",
+ "sha256": "0c51zyqbyly8h7zwxnxc9sbfx3md170y0ckpvrsmycq0kwgs0mm0"
},
"stable": {
"version": [
1,
10,
- 1
+ 3
],
"deps": [
"haskell-mode"
],
- "commit": "660ac746ec5c89da7ead100c0c46bf67e4037f41",
- "sha256": "05xf1ifd24afqmxfs9kkhkc1m9sc2cs9q9xkyym6r3bywgi5zs4j"
+ "commit": "5ae655255d87c983a596f398a0385b21df97df3b",
+ "sha256": "0c51zyqbyly8h7zwxnxc9sbfx3md170y0ckpvrsmycq0kwgs0mm0"
}
},
{
@@ -129074,11 +130496,19 @@
"repo": "ctanas/tiles",
"unstable": {
"version": [
- 20260412,
- 1929
+ 20260603,
+ 1458
],
- "commit": "149a5015b3d2a2ebdd15660cab9c736549af7532",
- "sha256": "19fmzw46vyfz6kz4ksmm5w4c6vmkyjacsqznbf0d8d9qsmy1nyf8"
+ "commit": "754b11764f8204ff1fce6d3aa80eca2150a8a164",
+ "sha256": "0mmw3slsndfq2jrlmfl6aly018jz4ycyhg7rizc0igl0jpcg8acg"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 5
+ ],
+ "commit": "15fa6fa0f2b44b0db0110862b609a42aabb8bb40",
+ "sha256": "1xjzbwddwlaf0dwf3ql4ljwr8sg3anrpgnlsz6zfi2bnhggl4v8z"
}
},
{
@@ -129149,11 +130579,11 @@
"repo": "xenodium/time-zones",
"unstable": {
"version": [
- 20260211,
- 2330
+ 20260716,
+ 845
],
- "commit": "9f1326ad9e62daa242a5174b193a27b28e209b36",
- "sha256": "0wcbbxa6wsb08d76g4fyf4yblpx8rx8q96l2rhchk2jmrxl10rvz"
+ "commit": "4cc37a54ba6447dc0570cd2e42052689d94f09ee",
+ "sha256": "0xajsx2363sj6shqv8nwbvcr4z2sq6pa4j7rbncn79qlq8wr26l4"
},
"stable": {
"version": [
@@ -129191,19 +130621,20 @@
"repo": "karthink/timeout",
"unstable": {
"version": [
- 20251210,
- 758
+ 20260504,
+ 2312
],
- "commit": "a5e661de4d3c1d5ac25c449011fe99059fc55920",
- "sha256": "1lp57mfsvngx20sxvq0v0hmxqy705glya93yffk5q4r5vn946dx8"
+ "commit": "b1212984709c4b50c509ef6d3bd959951e5dcc91",
+ "sha256": "1h5z7gxl2q6dlcy9zj9f9iqlahqk30lqkw5ym3i89mm6m80h9731"
},
"stable": {
"version": [
2,
- 1
+ 1,
+ 7
],
- "commit": "6d31046c5b1817271a52ab810e5bc635fe7ab3b4",
- "sha256": "16hzgdm5pq5qwg7w64w1q8kkwv1r9967bpcashcnm7pcwgk7bavk"
+ "commit": "b1212984709c4b50c509ef6d3bd959951e5dcc91",
+ "sha256": "1h5z7gxl2q6dlcy9zj9f9iqlahqk30lqkw5ym3i89mm6m80h9731"
}
},
{
@@ -129572,11 +131003,11 @@
"repo": "acdw/titlecase.el",
"unstable": {
"version": [
- 20230714,
- 323
+ 20260622,
+ 446
],
- "commit": "eb8d23925fb8ccbd3b2e3804fb0a312ee227610b",
- "sha256": "1j696incblnqhz7yi8xmshiz2p5kp910288j513sj8rknlykpr4n"
+ "commit": "eb75d7539243832761e8e75782252fd7a489fb37",
+ "sha256": "04sdmawnpby5fhvch7fn83an24033zin3yxp1b0swjrdl8wbasjj"
},
"stable": {
"version": [
@@ -129665,11 +131096,35 @@
"repo": "vifon/tmsu.el",
"unstable": {
"version": [
- 20241230,
- 2209
+ 20260610,
+ 1429
],
- "commit": "c75ae9bed8f3bb2229e873fcc85fe62701e47974",
- "sha256": "0mxz9bmdcdxkj7f4ih405i4vpd35c72xgs1i8cbi0132dpnnblpz"
+ "commit": "625d01d87f2820f648816f78b0c5bc220f14488b",
+ "sha256": "1h043myzvk40c3lbykikvhy6zcx5ac8r3jhkrzzhak1ngb5lpa9g"
+ }
+ },
+ {
+ "ename": "tmux-csi-u",
+ "commit": "3e16dc8d7a262b450719b41ea64649a60146c8f1",
+ "sha256": "0gprwbcxi1rw1g3k3j6nqfrfbdqsg6yqhfppyvikr40xp9igzm4f",
+ "fetcher": "github",
+ "repo": "lajarre/tmux-csi-u.el",
+ "unstable": {
+ "version": [
+ 20260428,
+ 2220
+ ],
+ "commit": "38e95db84ad02ad440e4fc0b18896e1c621e5f5d",
+ "sha256": "1k8ys2x0hl8zhxba5fb9k1dbd2xmxmknai90z0j07f70zq8pkm34"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 2,
+ 0
+ ],
+ "commit": "38e95db84ad02ad440e4fc0b18896e1c621e5f5d",
+ "sha256": "1k8ys2x0hl8zhxba5fb9k1dbd2xmxmknai90z0j07f70zq8pkm34"
}
},
{
@@ -129729,11 +131184,11 @@
"repo": "snosov1/toc-org",
"unstable": {
"version": [
- 20220110,
- 1452
+ 20260514,
+ 1415
],
- "commit": "bf2e4b358efbd860ecafe6e74776de0885d9d100",
- "sha256": "1mck86704akw8jlczimb4wi9z7x5mxag9s7z2vxfgg8xfmbmj8jr"
+ "commit": "781376e9dc9a901116c0c39914aeb4d46e524e0a",
+ "sha256": "19vzfwcxvknbx0zdad6p8bfkj28mx2c5rm4zxq4yyqg56cpx224i"
},
"stable": {
"version": [
@@ -129926,11 +131381,11 @@
"repo": "bbatsov/tokyo-night-emacs",
"unstable": {
"version": [
- 20260421,
- 1234
+ 20260528,
+ 551
],
- "commit": "8d30673c060ab791818e9ac3fd96ebeba93b926d",
- "sha256": "1zgjhb9ngdll284h5gf0mdjikfgifrb1z55ydmd8vcm17b83sd48"
+ "commit": "92037072b6e9a48d5d736bf8a76731936ea94410",
+ "sha256": "13ya7p5ppd7p15q91g7a8yky85lzadii0ggchklxh8ipigsamrdh"
},
"stable": {
"version": [
@@ -130047,11 +131502,11 @@
"repo": "jamescherti/tomorrow-night-deepblue-theme.el",
"unstable": {
"version": [
- 20260314,
- 1909
+ 20260710,
+ 1611
],
- "commit": "377fb120128c10929abc12f5d606a146b85372e0",
- "sha256": "023q97lydjcqjaqw9flrmivvah8b24ahhm0c9q89h8zv99qzrfbd"
+ "commit": "38e601d69e5741463e6d725100234d0c6e3e5741",
+ "sha256": "04xx9dyj2ps3lb7x72i0g41ld4p59cghzb35wvgp6cp5g199ksnm"
},
"stable": {
"version": [
@@ -130313,30 +131768,6 @@
"sha256": "1jbpf28918pjiqhw8rackv9r8iq9ydd3jw1zwwifznglmpyca7jk"
}
},
- {
- "ename": "tox",
- "commit": "08a7433e16f2a9a2c04168600a9c99bc21c68ddf",
- "sha256": "1z81x8fs5q6r19hpqphsilk8wdwwnfr8w78x5x298x74s9mcsywl",
- "fetcher": "github",
- "repo": "chmouel/tox.el",
- "unstable": {
- "version": [
- 20250216,
- 1042
- ],
- "commit": "831521fdfdd0b903c50616c6d675e63279c8b4aa",
- "sha256": "0kyg6bczgzjp79fiaqa2imq9xlmy40x3sbql3v1bdk6543r6dv2m"
- },
- "stable": {
- "version": [
- 0,
- 4,
- 0
- ],
- "commit": "7655eb254038d5e34433e8a9d66b3ffc9c72e40c",
- "sha256": "1212b7s00kw9hk5gc2jx88hqd825rvkz1ss7phnxkrz833l062ki"
- }
- },
{
"ename": "toxi-theme",
"commit": "2e57d7abe1e43101558b27b0995f54f74a620b33",
@@ -130369,25 +131800,25 @@
"repo": "martianh/tp.el",
"unstable": {
"version": [
- 20260219,
- 1435
+ 20260509,
+ 802
],
"deps": [
"transient"
],
- "commit": "cef3fc2daefbbfc29ad02b7e1f39542b57c72fe8",
- "sha256": "1zhvridy6p7dy9hpf088k166a1c918hqf6k3jmnm7raw8vflc7qq"
+ "commit": "a83cd422cca09bc863a7179f1c5b5a35435e0d32",
+ "sha256": "01g72x2lqmrdh3qgd3135hgijka975xg92ki36qyv71vi20rhmnm"
},
"stable": {
"version": [
0,
- 8
+ 9
],
"deps": [
"transient"
],
- "commit": "cef3fc2daefbbfc29ad02b7e1f39542b57c72fe8",
- "sha256": "1zhvridy6p7dy9hpf088k166a1c918hqf6k3jmnm7raw8vflc7qq"
+ "commit": "a83cd422cca09bc863a7179f1c5b5a35435e0d32",
+ "sha256": "01g72x2lqmrdh3qgd3135hgijka975xg92ki36qyv71vi20rhmnm"
}
},
{
@@ -130526,20 +131957,20 @@
"repo": "saulotoledo/trailing-newline-indicator",
"unstable": {
"version": [
- 20260112,
- 1713
+ 20260516,
+ 2154
],
- "commit": "f53d9e139f734d9ea35a907a6c44b70795d81737",
- "sha256": "0zld6218jzmjq5afz4525mjc4whi9lix571wn35jpgvf8y1y8lgd"
+ "commit": "52af1d7d63499020b21d57147cd7d27bc1bb35d3",
+ "sha256": "16ggckn7g07jqnmldmdq9qwa5ldcdivi8im66dics5s0cf3g6xb2"
},
"stable": {
"version": [
0,
3,
- 6
+ 7
],
- "commit": "f53d9e139f734d9ea35a907a6c44b70795d81737",
- "sha256": "0zld6218jzmjq5afz4525mjc4whi9lix571wn35jpgvf8y1y8lgd"
+ "commit": "52af1d7d63499020b21d57147cd7d27bc1bb35d3",
+ "sha256": "16ggckn7g07jqnmldmdq9qwa5ldcdivi8im66dics5s0cf3g6xb2"
}
},
{
@@ -130653,36 +132084,38 @@
},
{
"ename": "transient",
- "commit": "a74629656e9a23133219a0bd805982f1497b35d7",
- "sha256": "0pjj4zj3sa6mhf7fwb5b33y9b506g3bcjyzy44h5n6s79shbak60",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "11a2m4vdccn2yfn5aj2g5smiml69vidir9ss8c70pld17z1wzx07",
"fetcher": "github",
"repo": "magit/transient",
"unstable": {
"version": [
- 20260422,
- 1646
+ 20260701,
+ 1255
],
"deps": [
"compat",
"cond-let",
+ "llama",
"seq"
],
- "commit": "cd97319a851db9b2ed3faecdb735c6d089edf4e1",
- "sha256": "18pay3a7qbxw3ci2y11d3pvzbdkp8q1n4xyr4zhz1vg2n36vj56c"
+ "commit": "3d20a780605f0a33d6360dc0a2ce9174c69a9a92",
+ "sha256": "0893jfiqqyxc54hbzspkp5mhfzj7s1nkdfdmrp590g559blcjhmg"
},
"stable": {
"version": [
0,
13,
- 0
+ 5
],
"deps": [
"compat",
"cond-let",
+ "llama",
"seq"
],
- "commit": "cd97319a851db9b2ed3faecdb735c6d089edf4e1",
- "sha256": "18pay3a7qbxw3ci2y11d3pvzbdkp8q1n4xyr4zhz1vg2n36vj56c"
+ "commit": "3d20a780605f0a33d6360dc0a2ce9174c69a9a92",
+ "sha256": "0893jfiqqyxc54hbzspkp5mhfzj7s1nkdfdmrp590g559blcjhmg"
}
},
{
@@ -130693,14 +132126,14 @@
"repo": "conao3/transient-dwim.el",
"unstable": {
"version": [
- 20251006,
- 339
+ 20260516,
+ 853
],
"deps": [
"transient"
],
- "commit": "65985faf00f5a0e5e725c4f3f9f4118d19b8ee5a",
- "sha256": "16ygz5csgcx5ri3qpid3v3kk1wfshf9napli5ymn6g76spp07sam"
+ "commit": "f1973c1f75a9c4fd122ebba878aac7f1d0d54111",
+ "sha256": "0rzj1awr1d9lw2dkhnb9z7rwjsrhhr7icxqg9xir474n8x5yp7qr"
}
},
{
@@ -130958,28 +132391,28 @@
"repo": "tarsius/tray",
"unstable": {
"version": [
- 20260101,
- 1847
+ 20260701,
+ 1300
],
"deps": [
"compat",
"transient"
],
- "commit": "b77e046b173008a95f9ba37f4d34c088f5f0a8ab",
- "sha256": "0y6mrqnc652jfcxhwh5xxphd5cfk3rbngv88i791f531lyninrih"
+ "commit": "0e6f331dd7fcef6a591c4954808a6b262522fa40",
+ "sha256": "1cz9f22ln823zpnh0fba3nmcs3qj3wxl1sb9kdi3phmbhxyhjq38"
},
"stable": {
"version": [
0,
- 1,
- 8
+ 2,
+ 0
],
"deps": [
"compat",
"transient"
],
- "commit": "b77e046b173008a95f9ba37f4d34c088f5f0a8ab",
- "sha256": "0y6mrqnc652jfcxhwh5xxphd5cfk3rbngv88i791f531lyninrih"
+ "commit": "0e6f331dd7fcef6a591c4954808a6b262522fa40",
+ "sha256": "1cz9f22ln823zpnh0fba3nmcs3qj3wxl1sb9kdi3phmbhxyhjq38"
}
},
{
@@ -131137,26 +132570,26 @@
"repo": "emacs-tree-sitter/tree-sitter-langs",
"unstable": {
"version": [
- 20260420,
- 54
+ 20260719,
+ 1913
],
"deps": [
"tree-sitter"
],
- "commit": "0c9390a5ec483a63c9cecd57be71520b20a858c5",
- "sha256": "08jsvkjnqywgar2yv2a8vz85hwfiasa849dwixhrvavfqd2ss1d9"
+ "commit": "7a2b658586ad2108ff90fc978af1c4a33a44e07a",
+ "sha256": "1sik64yq1gv8rv4qhdlai40p1qck35yhb2vjvrbj8a87i2r5q97a"
},
"stable": {
"version": [
0,
13,
- 45
+ 73
],
"deps": [
"tree-sitter"
],
- "commit": "0c9390a5ec483a63c9cecd57be71520b20a858c5",
- "sha256": "08jsvkjnqywgar2yv2a8vz85hwfiasa849dwixhrvavfqd2ss1d9"
+ "commit": "7a2b658586ad2108ff90fc978af1c4a33a44e07a",
+ "sha256": "1sik64yq1gv8rv4qhdlai40p1qck35yhb2vjvrbj8a87i2r5q97a"
}
},
{
@@ -131167,14 +132600,11 @@
"repo": "purplg/treebundel",
"unstable": {
"version": [
- 20260404,
- 2133
+ 20260613,
+ 317
],
- "deps": [
- "compat"
- ],
- "commit": "35e55a21914772e2f125fd1c4682f7e239f192d3",
- "sha256": "1ipypcrc2xgyrvwv6hk3hvwrkamsf4rrpnm13xczz19bqp1svjqp"
+ "commit": "9b64c358338e90c02e9aedb4689a3c1a8be29abf",
+ "sha256": "0987rpd4zpc7wprva533gnl1l97pj10bkjkawlg7dqxhcipj2xig"
},
"stable": {
"version": [
@@ -131560,11 +132990,11 @@
"repo": "volrath/treepy.el",
"unstable": {
"version": [
- 20260313,
- 916
+ 20260531,
+ 1144
],
- "commit": "28f0e2c2c75ea186e8beb570a4a70087926ff80b",
- "sha256": "0z91vd12gikgb6207sz45fhcmhkl5hqbxjbzcaqpkznfgsq95f7j"
+ "commit": "806c000bd40153d17dfa5709c6d19546d507a416",
+ "sha256": "06i7r0v23j6d5q5w7p4cb7jidpnpy02a92fpjfqjlcd52cch02mc"
},
"stable": {
"version": [
@@ -131714,20 +133144,20 @@
"repo": "ianyepan/tron-legacy-emacs-theme",
"unstable": {
"version": [
- 20230506,
- 1037
+ 20260610,
+ 1908
],
- "commit": "44996469041a9b7f54c2a42ad2a3c16ac9579d77",
- "sha256": "09ak0pysizblq39ndzry6af2g6byzpwrdvfwb2d5kyc5z76cw36d"
+ "commit": "fab4946d6266f73d5ec25660f67bd186dc44d426",
+ "sha256": "07fpm6v9qk5z7l81c5ssm6612dprh330h4zsfql0s5hyyj273l0r"
},
"stable": {
"version": [
2,
- 6,
+ 7,
0
],
- "commit": "74e0cf066392c6fa99327e42b24caf4ed2fc414f",
- "sha256": "1vc50y7a248f0b4bk6mawb6f7n5dd6skrln8asall2m834bzzg37"
+ "commit": "fab4946d6266f73d5ec25660f67bd186dc44d426",
+ "sha256": "07fpm6v9qk5z7l81c5ssm6612dprh330h4zsfql0s5hyyj273l0r"
}
},
{
@@ -131810,17 +133240,17 @@
},
{
"ename": "trust-manager",
- "commit": "420c42f0bf4fb2be86fd3103b0f35bfcb48184b4",
- "sha256": "1nsm0xb6ls8vkc987ajs4qrbaclim5fc9m1i77mfwbz0znmwn32r",
- "fetcher": "github",
- "repo": "eshelyaron/trust-manager",
+ "commit": "bf967692af1501b21f0c07f026f1d8855cd7c6cb",
+ "sha256": "0r76fyd4f26ad3n9rgdwa143n0k5vv3hbfkgnnpnzfh535fxppf9",
+ "fetcher": "sourcehut",
+ "repo": "eshel/trust-manager",
"unstable": {
"version": [
- 20260422,
- 952
+ 20260426,
+ 1205
],
- "commit": "3a702921eaa65ce8de552e88f6280786a645252d",
- "sha256": "1c6v36fa8j9q0j8s5i1kdw4gkqmv6qldsswdccvyfcmbyl2wr3dw"
+ "commit": "530c559ffa01b99ced8073ba4c74f1b8152a0ef2",
+ "sha256": "0h6v3dcczh8644n09ny9mwx3zb5vy4ydify24zf09f6wlkkhzr5b"
},
"stable": {
"version": [
@@ -132073,6 +133503,21 @@
"sha256": "1yy0sdp7vv94cij0i220scy5aafi7b9qmv59r2k739sr82c3pd75"
}
},
+ {
+ "ename": "ttx-mode",
+ "commit": "11181b36316b3e0658afb13bcb63a590173387d1",
+ "sha256": "06v42hidmncd6d6gli8fv11nrwz6n2prblac4dv9djkh5ja6zi79",
+ "fetcher": "github",
+ "repo": "wmedrano/ttx-mode",
+ "unstable": {
+ "version": [
+ 20260628,
+ 418
+ ],
+ "commit": "58f4d4b2de51cfc47f3320c88fdb679ac8df6758",
+ "sha256": "05l1ishm3cja05dx0g6w10ilya7161cxp0fd6ng9zkxasv82jdwg"
+ }
+ },
{
"ename": "tuareg",
"commit": "01fb6435a1dfeebdf4e7fa3f4f5928bc75526809",
@@ -132081,26 +133526,20 @@
"repo": "ocaml/tuareg",
"unstable": {
"version": [
- 20250909,
- 1604
+ 20260626,
+ 936
],
- "deps": [
- "caml"
- ],
- "commit": "de9572f537b71c5e67b6ad676e1f7e42e8180878",
- "sha256": "0c9cpwbqn1mpyz8gw09n7kffs3rm3v58q0wrzkihbig47cvzj998"
+ "commit": "2d67d53a66fbf9d83c0416dba3275080b1bc6dfd",
+ "sha256": "10k810kw3mijqprnky15id39hzzwcqwlxmlyjp5m817mslmkwnii"
},
"stable": {
"version": [
3,
- 0,
- 1
+ 1,
+ 0
],
- "deps": [
- "caml"
- ],
- "commit": "4d94293cc5a7bba6cd043e29968719ce597d65f5",
- "sha256": "1p3xpk78i8ywgdmc59w05wjjy9dg6gm5gicm08szmrlnx08v2ihm"
+ "commit": "29ed86896e24c9d9d9855cf05ab7a6166a030250",
+ "sha256": "0gmgxqy0x3318gpwb8bjr5f53mv9xy3psrcz1h9c4xqrc189lm68"
}
},
{
@@ -132194,17 +133633,17 @@
},
{
"ename": "turing-machine",
- "commit": "6440f81aed1fcddcaf7afeedb74520e605211986",
- "sha256": "0q9a31m5wnz9j9l4i8czdl7z12nrcdjw72w8sqvf94ri2g5dbpkq",
- "fetcher": "github",
+ "commit": "1d888e12b1c4002896723b3c993a72bf920ef37b",
+ "sha256": "14xvh9p0jgkh8g3akrgbzcxyh0aa5jc66jc74731b3b10wmlpcrk",
+ "fetcher": "sourcehut",
"repo": "dieggsy/turing-machine",
"unstable": {
"version": [
- 20180222,
- 438
+ 20260530,
+ 523
],
- "commit": "ad1dccc9c445f9e4465e1c67cbbfea9583153047",
- "sha256": "0qaz4r5ahg2fxsfyxilb8c9956i5ra9vg80l82slm8vrnsinzll6"
+ "commit": "165f868d5b47b93ca00bc73b0055cdcd7696449d",
+ "sha256": "0klq2d8q9vlqa80k9kxali6r5lv6lk8i5ry3ky4yii9jq7b0nwp3"
},
"stable": {
"version": [
@@ -132224,11 +133663,11 @@
"repo": "emres/turkish-mode",
"unstable": {
"version": [
- 20170910,
- 1511
+ 20260614,
+ 919
],
- "commit": "9831a316c176bb21a1b91226323ea4133163e00c",
- "sha256": "0nrxi845gd24d5vymbmxz696jwld4rn6nw2dz1gzmdaks7bbv87m"
+ "commit": "70196d4502759060bb2b0ac2f09f18ce1cbbcb20",
+ "sha256": "13axgawzw4838kwvabzn5g1c1bf8mnnn38yqmhl6mg306zlsqzxb"
}
},
{
@@ -132581,15 +134020,15 @@
"repo": "havarddj/typst-preview.el",
"unstable": {
"version": [
- 20260215,
- 2252
+ 20260617,
+ 2023
],
"deps": [
"compat",
"websocket"
],
- "commit": "7e89cf105e4fef5e79977a4a790d5b3b18d305f6",
- "sha256": "0lsbr9i8kmzjbl9k86g8jnsbgz2vrlys7cii4fjrkg0dg9ijvk2w"
+ "commit": "f2903a1b98e13be7c927de835ae0d9159dd9fb9a",
+ "sha256": "0zd1hjqnjz9fhw7gbnawnx9cp0gbkd1730inl23q5rz0w80lksnl"
},
"stable": {
"version": [
@@ -132779,14 +134218,14 @@
"repo": "crmsnbleyd/uiua-mode",
"unstable": {
"version": [
- 20240930,
- 1206
+ 20260618,
+ 822
],
"deps": [
"reformatter"
],
- "commit": "5627ac4450d5a5d2c657befc63c7594939c5ff4c",
- "sha256": "1gnrjlp0p55n02vx0p1krjil2pxv4b7hg0krazs9b3nr2ar4cfqg"
+ "commit": "4194e877aef707f8475c3632390179b03571d091",
+ "sha256": "1ynhqz8g64zqry90g9s3c7wqzjy95vd348q1m0ff0cq3qjjqyws2"
},
"stable": {
"version": [
@@ -132872,20 +134311,20 @@
"repo": "jamescherti/ultisnips-mode.el",
"unstable": {
"version": [
- 20260324,
- 101
+ 20260628,
+ 1957
],
- "commit": "1ccd9d4bfd12545de299974083da9d2fbeec194b",
- "sha256": "074pwsps3ib7wnc8nqicqqpdg76688bwm4agfdjii6fh34w0w7wz"
+ "commit": "3fc59835f6407fb60bb9935a63fc0479f8807f37",
+ "sha256": "13rn768inw0mnxp75plc981dm46vi9p8c0bckb8q8p2f0iy6rdsc"
},
"stable": {
"version": [
1,
0,
- 3
+ 4
],
- "commit": "1ccd9d4bfd12545de299974083da9d2fbeec194b",
- "sha256": "074pwsps3ib7wnc8nqicqqpdg76688bwm4agfdjii6fh34w0w7wz"
+ "commit": "39df8b78d4a9450cec5acbd74eb82b7372e28b73",
+ "sha256": "0rynfikr47afa5nd0npk1b6q69fym7l0mqb7abivkipg2zz3ysn7"
}
},
{
@@ -132896,19 +134335,20 @@
"repo": "jdtsmith/ultra-scroll",
"unstable": {
"version": [
- 20260325,
- 2311
+ 20260616,
+ 2126
],
- "commit": "0a03e5f9f70f63a660623198179963c7c06a07c1",
- "sha256": "0a3m1aapcrbf2b78712xh0lx4bblq3jx3n0bnhm9m9qs8889w7ir"
+ "commit": "5be267d2d92c230b4347e0769f584c71aec53589",
+ "sha256": "0lzycvg61lq0azc280bq4m0d1xrffrac966ax9qbnn5rxm78ikrp"
},
"stable": {
"version": [
0,
- 6
+ 6,
+ 2
],
- "commit": "0a03e5f9f70f63a660623198179963c7c06a07c1",
- "sha256": "0a3m1aapcrbf2b78712xh0lx4bblq3jx3n0bnhm9m9qs8889w7ir"
+ "commit": "f38653053b5c9bbe8dbcb6b2236ab8997fc2f9bb",
+ "sha256": "0ajynkiqiq7pvd7wqgf8wig8q288nsxixgl851bw0bjhivv32fmx"
}
},
{
@@ -133298,17 +134738,17 @@
},
{
"ename": "unicode-math-input",
- "commit": "e0d39bc129500e55b99c11b3d27e042619777414",
- "sha256": "1hra3vf6nzh99piagbxsmp0sizvki2jl7qkfmlwd5nwmicw0ykrq",
- "fetcher": "github",
+ "commit": "94e6b48c731067a6f30a343f9ddbd5f365ae7043",
+ "sha256": "0czy5kp1f9xhakgd1g68z7sg3swwy3nc90cakpavja6bn6l1fbcz",
+ "fetcher": "codeberg",
"repo": "astoff/unicode-math-input.el",
"unstable": {
"version": [
- 20251012,
- 953
+ 20260601,
+ 734
],
- "commit": "d7ee1a963f140acd5650b86e808129077c6a7828",
- "sha256": "0xsf0v2pnq1zaln8hcrd4np9d5clxykh9bhfvhrkp2zwi9xirr5s"
+ "commit": "f0ad9e4bf23df653bc68d578e610a2d0431b87df",
+ "sha256": "1cr7p5nysn28an9hkzanvifiv3c24j3y1p3b98lr1xcsm0q07dvm"
}
},
{
@@ -133467,14 +134907,14 @@
"repo": "tbanel/uniline",
"unstable": {
"version": [
- 20260411,
- 1423
+ 20260721,
+ 1504
],
"deps": [
"hydra"
],
- "commit": "14a0949539679e89f706601a501ae8a8d090c71f",
- "sha256": "1fcqr4q5dc9kfzqp6b9wfqma4qbb6dmjia639wfgdj3xqxa8ygl7"
+ "commit": "dc31332675769a789da879608276ec7e5b964865",
+ "sha256": "1nb2slw8has9bs2xh78zdkhgadqslkgpvlc3iab89a50bpa2mdf1"
}
},
{
@@ -133530,20 +134970,20 @@
"repo": "fmguerreiro/unison-ts-mode",
"unstable": {
"version": [
- 20260126,
- 915
+ 20260720,
+ 619
],
- "commit": "83fe7aadecc5438be19ccb50b089c1ba95803839",
- "sha256": "04abri83yz3yr3ffvj780sjljbhlz468a579i2i8rh01pgdz4dqx"
+ "commit": "d46a659e2a884bd843da16b21b605755a2c3444f",
+ "sha256": "0nqynakmyr31am5zpnvvx4r866vxlivjxlnjrmp0nvb8ixxzybix"
},
"stable": {
"version": [
0,
- 2,
+ 3,
0
],
- "commit": "e31a211899e5c249a521b8b1e09f48bcc40383af",
- "sha256": "00z4l8d1p80lb0n2h2sp1bbhyc6rym1y0wvcrcqwiq5k023kacyc"
+ "commit": "626e1575386f9ed996004ecce2e5672cc2583c18",
+ "sha256": "0jqkib3ibg3iyqpxibck1ax6lgprclrh7yhkhq8b7x8a9canb5xm"
}
},
{
@@ -133825,19 +135265,19 @@
"repo": "tee3/unobtrusive-magit-theme",
"unstable": {
"version": [
- 20200411,
- 1349
+ 20260424,
+ 1659
],
- "commit": "aede357009655d19d4468320b2b61b0f26a47593",
- "sha256": "1af8c7q3vxj23l2ah5waj9hn5pfp66834b4akm76jc5wqf0sr9j1"
+ "commit": "33d265d08a0a215aab558550d1596ac0e57c9d63",
+ "sha256": "07pdc6idc5zm1fjmi472lbc67y3sgli1pvksnphfp0gvd284fp7f"
},
"stable": {
"version": [
0,
- 4
+ 5
],
- "commit": "aede357009655d19d4468320b2b61b0f26a47593",
- "sha256": "1af8c7q3vxj23l2ah5waj9hn5pfp66834b4akm76jc5wqf0sr9j1"
+ "commit": "33d265d08a0a215aab558550d1596ac0e57c9d63",
+ "sha256": "07pdc6idc5zm1fjmi472lbc67y3sgli1pvksnphfp0gvd284fp7f"
}
},
{
@@ -133991,20 +135431,20 @@
"repo": "ursalang/ursa-ts-mode",
"unstable": {
"version": [
- 20250407,
- 1303
+ 20260503,
+ 2249
],
- "commit": "25dd8c309ad9433a5bb57b47b947447c420efb77",
- "sha256": "02nkfaz8wwb3fywvig21br7m4rd6xk7gz04izv6vya9fsybphd2a"
+ "commit": "b76fb46721839ef210700ee6d00763f5646c30af",
+ "sha256": "05wshv3bv5xr8d6pdlcryfivv6f6dxyrdz1vxvawrjcw2h7m3cn1"
},
"stable": {
"version": [
1,
3,
- 11
+ 12
],
- "commit": "84689fb37dfb6ddbd0a22cc1dcef25203f0689a8",
- "sha256": "06fabv3b4ghljg2ybriswqc71avb4mzjpwc373k643l5gj47wfnf"
+ "commit": "b76fb46721839ef210700ee6d00763f5646c30af",
+ "sha256": "05wshv3bv5xr8d6pdlcryfivv6f6dxyrdz1vxvawrjcw2h7m3cn1"
}
},
{
@@ -134126,6 +135566,38 @@
"sha256": "0kpnac51ykmhkirz7shryasd7h2gvkfrhyysy55bpn8swdzknawm"
}
},
+ {
+ "ename": "use-package-x",
+ "commit": "28893a37e38074ffbadd6b1cf0109d4ba238e4dc",
+ "sha256": "004nr4fqdh131906j1pi8lk8bjm561vlqsj7ys9wwv777l80nxw0",
+ "fetcher": "github",
+ "repo": "DevelopmentCool2449/use-package-x",
+ "unstable": {
+ "version": [
+ 20260525,
+ 1628
+ ],
+ "deps": [
+ "compat",
+ "use-package"
+ ],
+ "commit": "45ed391f1d6816b1fff0a3104c6c0d94d9bebd64",
+ "sha256": "1cipdps4d2rxvqa8px26522sly55zchj6ag7n5g67i6xalw3nyf5"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 0,
+ 1
+ ],
+ "deps": [
+ "compat",
+ "use-package"
+ ],
+ "commit": "2f679f089956af769ddc8f7473f01afd9b6fe56a",
+ "sha256": "1cpj6ancx7ahpczn6bcig6jwcayz8cig466viq2p0qyrv7s8wj2a"
+ }
+ },
{
"ename": "use-proxy",
"commit": "e9fb7f05b76517aa918fbd08a52719d1692d6dfc",
@@ -134317,11 +135789,11 @@
"repo": "kborling/uwu-theme",
"unstable": {
"version": [
- 20250902,
- 202
+ 20260703,
+ 1803
],
- "commit": "430e06214e8230357bea8252e8a56c5c1aa8f3eb",
- "sha256": "175d83yzhv84ib92dxhiy2b4dndiynis60kmcnffbwwb4j5pxra1"
+ "commit": "10b07fae92e2b28d7f3948e5feba0e3172123370",
+ "sha256": "1jc1inzs2v4m8sgxmwv06xh5ddhzy0j5y51yixnrqzygz56cswcn"
}
},
{
@@ -134708,26 +136180,26 @@
},
{
"ename": "vcomp",
- "commit": "561442ea9f75ebe8444db1a0c40f7756fcbca482",
- "sha256": "02cj2nlyxvgvl2rjfgacljvcsnfm9crmmkhcm2pznj9xw10y8pq0",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "1i4jcbkcpqim8f1fdkfrznszn575zkhc61s030wxgdk1l19p5yib",
"fetcher": "github",
"repo": "tarsius/vcomp",
"unstable": {
"version": [
- 20260420,
- 1508
+ 20260701,
+ 1247
],
- "commit": "213c3f6b085182d20065caa1c53b6a543ca42694",
- "sha256": "1ajfpxnpbg92r2dvz9jfk2fxii079gif5sar8r6pvhqyh7868yrk"
+ "commit": "ba2d07505dc29e3128ea915bb252969b82d2af08",
+ "sha256": "133fp6fpvh8a1kp8n5iv94yybs87x2i69fk4j8nvazsaiandfs4w"
},
"stable": {
"version": [
1,
- 1,
- 0
+ 2,
+ 1
],
- "commit": "99831d234481a61488aca4b96b842b63a79c732a",
- "sha256": "06qcmlr16dnvwln4136vz6m0zs5mp81awy40jv8pmvhwms9fprr7"
+ "commit": "ba2d07505dc29e3128ea915bb252969b82d2af08",
+ "sha256": "133fp6fpvh8a1kp8n5iv94yybs87x2i69fk4j8nvazsaiandfs4w"
}
},
{
@@ -135030,20 +136502,88 @@
"repo": "federicotdn/verb",
"unstable": {
"version": [
- 20260414,
- 1812
+ 20260708,
+ 1918
],
- "commit": "ffe668c20120ba215f14d6d5720e327fbadbd10d",
- "sha256": "0bvz5y05b6kvax4yak193ki8mja8v544ycg31i70863q6p356vhy"
+ "commit": "ef09a5804cac4816ca9a0d1fb9c71c8ed3d3df8f",
+ "sha256": "0cli080ndalc7xc96f017xk6b5b00hfz0831r64jx8ci9xscwr5a"
},
"stable": {
"version": [
3,
- 1,
+ 2,
0
],
- "commit": "2e778afd08b8a9872b8273528052f52d53c2bd45",
- "sha256": "12y2shqhbl21xj18hldg17n03pq3qcycwmswxdwr0pnac8613pq6"
+ "commit": "81aa67dffb17b3d88b35f16787aa3292d5761abb",
+ "sha256": "0bz41lw1d4ps3hg07g2frdjx9d1w9fwdhsfc9k78d20ns3l07wrx"
+ }
+ },
+ {
+ "ename": "verdict",
+ "commit": "99def78eea057a9e772b7bea8baa08b45a6080a2",
+ "sha256": "1wjyramicz7p756r830r6jqvg3yybmyx20k4jvxncfdii921v7b9",
+ "fetcher": "github",
+ "repo": "tjarvstrand/verdict.el",
+ "unstable": {
+ "version": [
+ 20260506,
+ 914
+ ],
+ "deps": [
+ "dash",
+ "treemacs"
+ ],
+ "commit": "ff29a0681f7cca17c0e7b467229b2a8441559a2e",
+ "sha256": "0n9bh35l4sxrkq4c892fn0lhgna03hginabn0a3arb00yrrvxwar"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 1,
+ 4
+ ],
+ "deps": [
+ "dash",
+ "treemacs"
+ ],
+ "commit": "84fff362b8068a1a8112b772fa927b56a6786482",
+ "sha256": "1w79z03d1wq2g1d15b1zppnwh3hp3n74l2ciriq5fzybcwfk7kag"
+ }
+ },
+ {
+ "ename": "verdict-dart",
+ "commit": "d86b05b64bef357dd7c58b02ed58e45e6b6029e3",
+ "sha256": "0dg6vkdyw90641w3ilbqxg6gnzaxrx7abkxjys25q579c4lcv49h",
+ "fetcher": "github",
+ "repo": "tjarvstrand/verdict.el",
+ "unstable": {
+ "version": [
+ 20260505,
+ 1121
+ ],
+ "deps": [
+ "dash",
+ "f",
+ "verdict",
+ "yaml"
+ ],
+ "commit": "84fff362b8068a1a8112b772fa927b56a6786482",
+ "sha256": "1w79z03d1wq2g1d15b1zppnwh3hp3n74l2ciriq5fzybcwfk7kag"
+ },
+ "stable": {
+ "version": [
+ 0,
+ 1,
+ 4
+ ],
+ "deps": [
+ "dash",
+ "f",
+ "verdict",
+ "yaml"
+ ],
+ "commit": "84fff362b8068a1a8112b772fa927b56a6786482",
+ "sha256": "1w79z03d1wq2g1d15b1zppnwh3hp3n74l2ciriq5fzybcwfk7kag"
}
},
{
@@ -135091,44 +136631,42 @@
"repo": "gmlarumbe/verilog-ext",
"unstable": {
"version": [
- 20260225,
- 1300
+ 20260716,
+ 1137
],
"deps": [
- "ag",
"apheleia",
"async",
"flycheck",
"hydra",
"lsp-mode",
- "ripgrep",
+ "rg",
"verilog-mode",
"verilog-ts-mode",
"yasnippet"
],
- "commit": "e2217561bc6ee84b4e925951ef3794957048bf73",
- "sha256": "0h6q7105ccb64cid5h89j8m3a4s40ifnl6c9j8xak23k3q3l9jk4"
+ "commit": "f4c65a24724cd2d1eeb1e21ec10c9cee4bfcc385",
+ "sha256": "08nsjdiwy7znymcmddxd3jmzhmvzjvihcsyrsmggpk1y2m1qlbjf"
},
"stable": {
"version": [
0,
- 8,
+ 9,
0
],
"deps": [
- "ag",
"apheleia",
"async",
"flycheck",
"hydra",
"lsp-mode",
- "ripgrep",
+ "rg",
"verilog-mode",
"verilog-ts-mode",
"yasnippet"
],
- "commit": "fb7d629688f862e0bdb91986d72bcff2ae7c3e23",
- "sha256": "1hgplmd9zzikp6wklx4y8svzd7n2i0rmfhphpms0f2zl74ana6c6"
+ "commit": "f4c65a24724cd2d1eeb1e21ec10c9cee4bfcc385",
+ "sha256": "08nsjdiwy7znymcmddxd3jmzhmvzjvihcsyrsmggpk1y2m1qlbjf"
}
},
{
@@ -135139,26 +136677,26 @@
"repo": "gmlarumbe/verilog-ts-mode",
"unstable": {
"version": [
- 20260225,
- 1302
+ 20260716,
+ 1249
],
"deps": [
"verilog-mode"
],
- "commit": "a804a3e8b744edeaf879705c85aae196f761cba8",
- "sha256": "18ndf250z55dz8vic6xxyfxjlymy8inf4ga0swdf4swhfyfp5im3"
+ "commit": "fc19bce75747a578305130bb8ef1e7972b028def",
+ "sha256": "1qnw5lqxb7n8kvsp16ms6l6w7gdgdmdacvmd55falfj4cyjdyr1p"
},
"stable": {
"version": [
0,
- 5,
+ 6,
0
],
"deps": [
"verilog-mode"
],
- "commit": "b71a15e1677060bc0a3e7dc180a11a82074a2157",
- "sha256": "19jzdi4n8qj65wxgfr0simnsy2r90rpac5bgkc5bz7w2vfy7rhk3"
+ "commit": "088960470a3cb25537173c0619400675319c759c",
+ "sha256": "0pybfj9vdvb4nqn77mmy62iw4w5ydipgj1v381yjknfqlxlpkym5"
}
},
{
@@ -135262,25 +136800,25 @@
"repo": "minad/vertico",
"unstable": {
"version": [
- 20260419,
- 1808
+ 20260709,
+ 1303
],
"deps": [
"compat"
],
- "commit": "daa0dddeb5bc152e13ec4f166cc2f84150b7a2e8",
- "sha256": "1vlhmvjsgcsfhpd2hcfq1zlz0r2pb6ww1rhra17kdf5cg0dnns2q"
+ "commit": "99b9ef78e653422466ee14f1672af3ee7f685ca4",
+ "sha256": "0dkrgvf8j5nayl4n48i4v66r4kw569m2j25p8cmwfab5d5g10p80"
},
"stable": {
"version": [
2,
- 8
+ 10
],
"deps": [
"compat"
],
- "commit": "0b96e8f169653cba6530da1ab0a1c28ffa44b180",
- "sha256": "0kia499sijkmpj5l9r0r3pwc1kjyvbfxc15k85dyfq9dvc4z1drr"
+ "commit": "6028bd3d32c99c28e2b938e5e5393ec3508d2424",
+ "sha256": "0hzl3p7b62f3p2419c5d7340h7y6ry2xhwdds166wfcgwpwnm7m6"
}
},
{
@@ -135291,30 +136829,30 @@
"repo": "radian-software/prescient.el",
"unstable": {
"version": [
- 20250816,
- 19
+ 20260628,
+ 2243
],
"deps": [
"compat",
"prescient",
"vertico"
],
- "commit": "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18",
- "sha256": "0f4wi8aq3yfykxfza4y4c5yhcs50cs3gpfj0qrmvfq9hvkhzj52w"
+ "commit": "5649977fa7789e4615efeca09397ed7eccd06dfc",
+ "sha256": "199150yng81f6n3kb120s37yf2dqs0i9k91f2gzkk8kjn6hvrsj8"
},
"stable": {
"version": [
6,
3,
- 2
+ 3
],
"deps": [
"compat",
"prescient",
"vertico"
],
- "commit": "87e2d2f2ddf24f591a5f70cc90d2afb4537caa18",
- "sha256": "0f4wi8aq3yfykxfza4y4c5yhcs50cs3gpfj0qrmvfq9hvkhzj52w"
+ "commit": "5649977fa7789e4615efeca09397ed7eccd06dfc",
+ "sha256": "199150yng81f6n3kb120s37yf2dqs0i9k91f2gzkk8kjn6hvrsj8"
}
},
{
@@ -135369,38 +136907,36 @@
"repo": "gmlarumbe/vhdl-ext",
"unstable": {
"version": [
- 20251118,
- 1340
+ 20260716,
+ 1401
],
"deps": [
- "ag",
"async",
"flycheck",
"hydra",
"lsp-mode",
- "ripgrep",
+ "rg",
"vhdl-ts-mode"
],
- "commit": "19b5be6e3b794e848b2554ffc6f03dfb35c75c8e",
- "sha256": "0pqfci24mbp8cjwrikvs4gvfvgf0wjqv68nzzcs7lqx41682ixpd"
+ "commit": "fd400c09de24d3c7da9aed5884b6f114f595373c",
+ "sha256": "0nznf1w67fnqk00690kdwh0q43480crdz61qdvsnx23yfx5q9i65"
},
"stable": {
"version": [
0,
- 7,
+ 8,
0
],
"deps": [
- "ag",
"async",
"flycheck",
"hydra",
"lsp-mode",
- "ripgrep",
+ "rg",
"vhdl-ts-mode"
],
- "commit": "5a3513d2f26ace017e9fab7141754ff5bdebb0eb",
- "sha256": "0agiamq7g8zm3blznykbr1kgr09rb133rd4mh9nfc0vfk8i5mabv"
+ "commit": "22fa38698bdf106194c02a6d2e3830d8685437fb",
+ "sha256": "1c9cfwadi18ib4psnf5xlgdjg75038fq1zhz2fxcjdp2kjwv5nwb"
}
},
{
@@ -135411,20 +136947,20 @@
"repo": "gmlarumbe/vhdl-ts-mode",
"unstable": {
"version": [
- 20251008,
- 2052
+ 20260716,
+ 1206
],
- "commit": "9da613a72aa7caaa32b11f4de6f2e778bfb9376c",
- "sha256": "0x11sjiy3j43am0clwxsbx7b38pfsl74qgypkc3czs7dh1c5xyrx"
+ "commit": "a9bfb0dffb5f994b11b7921d5e145ea40e9a68a2",
+ "sha256": "0y41cva3qknisxnskmn1s15r3ja2hcf4bbzc5nx1z9xk2ndh8rzf"
},
"stable": {
"version": [
0,
3,
- 2
+ 3
],
- "commit": "9da613a72aa7caaa32b11f4de6f2e778bfb9376c",
- "sha256": "0x11sjiy3j43am0clwxsbx7b38pfsl74qgypkc3czs7dh1c5xyrx"
+ "commit": "a9bfb0dffb5f994b11b7921d5e145ea40e9a68a2",
+ "sha256": "0y41cva3qknisxnskmn1s15r3ja2hcf4bbzc5nx1z9xk2ndh8rzf"
}
},
{
@@ -135525,20 +137061,20 @@
"repo": "jamescherti/vim-tab-bar.el",
"unstable": {
"version": [
- 20260314,
- 1906
+ 20260710,
+ 1614
],
- "commit": "3ab286ffc3ce5e4215d9d7f502a6982111e49207",
- "sha256": "19n4nhm9gvz6z93prq3v413qcl4iknprnkjcmixlg4lkm59kl3bw"
+ "commit": "c2f03438f62915e71a780ca1cb05b94fe2871a71",
+ "sha256": "1v9bv8lj125sfvmqc1bm37msaw438hk1mn8gdf59kh7p2fwgv730"
},
"stable": {
"version": [
1,
1,
- 4
+ 5
],
- "commit": "22d2d8a92b8d8cd0532c8382dcfe7df405f1563a",
- "sha256": "00bajfkqcpn15d5vdr52nd56qny68r59xc7yshw7wxs9awfpxrzz"
+ "commit": "61290afd8c1fdef6b5b03b1588c5cf830e196ded",
+ "sha256": "1530p5qr9b53jljsv9bx7m54zri1i2jzglvcd58akrv5krs5wrp2"
}
},
{
@@ -136082,11 +137618,11 @@
"repo": "ianyepan/vscode-dark-plus-emacs-theme",
"unstable": {
"version": [
- 20260420,
- 8
+ 20260606,
+ 209
],
- "commit": "082b012d203fed17d54b4a3b7437db545f15ddbb",
- "sha256": "0mik95vf8nc61g33jfmb885jrrk64xghzx0ip443gigdr1pbs2yk"
+ "commit": "c401b44809bfbf5928582efddc19ddda4f271ed4",
+ "sha256": "1d9y5ghzpaflkd5dpqsf6cni47k1ib5sgh3fd58jh708cc0lhgsz"
},
"stable": {
"version": [
@@ -136151,11 +137687,11 @@
"repo": "akermu/emacs-libvterm",
"unstable": {
"version": [
- 20260406,
- 134
+ 20260706,
+ 1652
],
- "commit": "54c29d14bca05bdd8ae60cda01715d727831e3f9",
- "sha256": "1jwby4pyzqv4n7fi8d617j93bbgdr3hkcpkkv2cqqpz1lfy0cab5"
+ "commit": "9a32a4afce25647282bc8a8792468e41bc64adf4",
+ "sha256": "19y0vxlx90rx0sxrwa41h9rbvxwccls0lf9h7136xm4hsn5h2d9x"
}
},
{
@@ -136202,14 +137738,14 @@
"repo": "jixiuf/vterm-toggle",
"unstable": {
"version": [
- 20260420,
- 1244
+ 20260601,
+ 1632
],
"deps": [
"vterm"
],
- "commit": "80989c6ca35416a5c85fa76277ef49a13c3eac11",
- "sha256": "1941hls4lz4a4ww4jmns23zydzl3z948w72m7ji22y0f0hppf1af"
+ "commit": "a0051a8b8eaa85f8df54ddb032f5710c1f62779d",
+ "sha256": "14dpnvsjd1hz67japlp3vazydj4hljhhffywgq8r4mqgg0781cjw"
}
},
{
@@ -136312,20 +137848,20 @@
"repo": "d12frosted/vui.el",
"unstable": {
"version": [
- 20260130,
- 2113
+ 20260702,
+ 1513
],
- "commit": "7d904ddff91325d756ad7ffd4dfb0db855f3a120",
- "sha256": "03p61v8ra4fy83amhgmzidhlh66vwpgcclw8h2wlwzsxg4sf3lr5"
+ "commit": "9101db52a29c4276b45f85e63924008f0e41c39c",
+ "sha256": "1xlnp9myjw4p90lir78p0kwl0shfglwm6wb3afd2wk1l3bf8882b"
},
"stable": {
"version": [
1,
- 0,
+ 3,
0
],
- "commit": "67c508c0f2dd6773a590df47c355edb3911f0bcb",
- "sha256": "05jny12ncjr7ybwab8lmshjjhcrsax67063xbfv7ri6j5kdk5r52"
+ "commit": "9101db52a29c4276b45f85e63924008f0e41c39c",
+ "sha256": "1xlnp9myjw4p90lir78p0kwl0shfglwm6wb3afd2wk1l3bf8882b"
}
},
{
@@ -136374,8 +137910,8 @@
"repo": "d12frosted/vulpea",
"unstable": {
"version": [
- 20260308,
- 1107
+ 20260720,
+ 628
],
"deps": [
"dash",
@@ -136383,13 +137919,13 @@
"org",
"s"
],
- "commit": "4433949421f302edefb575896265f11a261275bf",
- "sha256": "0f30icbk4z5l5b3bkww4y00rlb94cnpr3cc108p5rba4f9kffga0"
+ "commit": "f7a9e919ffd73109f545796e0b8f78f8bc3d0d1f",
+ "sha256": "1a5cwvsf4izxir1ynn4gqlkvdlvmgfx09zb8dfqr9cmd775fdw3i"
},
"stable": {
"version": [
2,
- 2,
+ 6,
0
],
"deps": [
@@ -136398,8 +137934,8 @@
"org",
"s"
],
- "commit": "e2330e8ff04590913570773ddcb87355427ffbb7",
- "sha256": "01vq47y9sr62b1nb8dr5aq499kvgca8dswrxn3bpnzxfx5sfdq3b"
+ "commit": "66bee1cc931d70f0ee31087e5d6217d9b65bf3a6",
+ "sha256": "05x7h6d5lb0qfd29ml1haplx9fyvha2lhfri3ivnq2l2382xf0s0"
}
},
{
@@ -136410,30 +137946,32 @@
"repo": "d12frosted/vulpea-journal",
"unstable": {
"version": [
- 20260306,
- 921
+ 20260718,
+ 532
],
"deps": [
"dash",
+ "vui",
"vulpea",
"vulpea-ui"
],
- "commit": "071533d534e69e302dac543053c59ea8d4d7af77",
- "sha256": "0kaawf7jy4kd14spmi6pzhqjpf6gh0y18j8hn2a8nm4dfljr1hbd"
+ "commit": "3bd4fbbae8deece4d595f39e6f629b6cfeaf888f",
+ "sha256": "0rkzbn9hp9bxyxh6wr2lkpy6dg1glfl87ah3a5r3rrh2dhhs64rv"
},
"stable": {
"version": [
1,
- 0,
+ 1,
1
],
"deps": [
"dash",
+ "vui",
"vulpea",
"vulpea-ui"
],
- "commit": "7525fde77555d25cbe3b78fbe5cf35113b65e7cd",
- "sha256": "0x47rvpmrpg6m2lyh7550mynkpjqqihgj7v04wbn2s85vr9gnv94"
+ "commit": "4f6b195faec8f468047efe76a74fbd60a495c32a",
+ "sha256": "0yad7qjam45myc4a2d9jfmcajjb40v9qbhr9gkgbdk82jp3jfbf5"
}
},
{
@@ -136444,28 +137982,28 @@
"repo": "d12frosted/vulpea-ui",
"unstable": {
"version": [
- 20260331,
- 601
+ 20260708,
+ 1156
],
"deps": [
"vui",
"vulpea"
],
- "commit": "5bf32360d5107053a2b7ee9e75e647faa1f099c7",
- "sha256": "04n5c3rl9y479cg98j37l5r4k13bc5jjnzl43yn9czyf9556b0vd"
+ "commit": "e734d083e2838250f3ca2ec6da616ce8dcbb96d8",
+ "sha256": "1lpz2pidglzxfky20ljxqvipldg54765b9allkmysy21gl37hy67"
},
"stable": {
"version": [
1,
- 1,
+ 2,
0
],
"deps": [
"vui",
"vulpea"
],
- "commit": "fdd6749cb4a252a369e09dd1c76d01f063b44d8b",
- "sha256": "1jc8c1s8slsbs1yvyw0h14wcmzmyxrc15jpmmcvr0jibp7k45brr"
+ "commit": "54e4478cc1a0ee7036d11f91f4e378bcc57fa314",
+ "sha256": "1jvw7gryb4l6x0ljb03d4fvkh15j71pxjigb1g9sl5ygqlw6j8sj"
}
},
{
@@ -136570,15 +138108,14 @@
"repo": "shosti/wacspace.el",
"unstable": {
"version": [
- 20180311,
- 2350
+ 20260427,
+ 2039
],
"deps": [
- "cl-lib",
"dash"
],
- "commit": "54d19aab6fd2bc5945b7ffc58104e695064927e2",
- "sha256": "1nfx1qsl2gxjqbbc5xsr8f3xz2qyb4wnz3634k3hglb1jpa78j3n"
+ "commit": "28b1fb7a124febb8dbf47aaae8d7dd8c185eea7d",
+ "sha256": "102zabzygvf7aw879sdyyldgjsih0cpvmjfg4llwf4jp9wf0fzja"
},
"stable": {
"version": [
@@ -136632,11 +138169,11 @@
"repo": "wakatime/wakatime-mode",
"unstable": {
"version": [
- 20240623,
- 653
+ 20260520,
+ 234
],
- "commit": "1c5b2254dd72f2ff504d6a6189a8c10be03a98d1",
- "sha256": "00qv6b756qiaqrmfg1w03psnsdj0iaz3sp50ib4kmdm2g9vgxl1s"
+ "commit": "464ea0ea99696133553c565cdfc0966a496b1887",
+ "sha256": "0pyfjk7azfhxqklazvcc17n59dvin0csndkf6rm2cadr5n15r0wg"
}
},
{
@@ -136719,16 +138256,16 @@
"repo": "abrochard/walkman",
"unstable": {
"version": [
- 20241204,
- 2234
+ 20260515,
+ 1746
],
"deps": [
"json-mode",
"org",
"transient"
],
- "commit": "b8260b6c1c6bdc8878c6f8cbeeea05040ac92b65",
- "sha256": "1l3hg4spzgf4ymqp9ka7dys4hp1p227y1lf4cbni4ngz6ajynh26"
+ "commit": "0328a6b8ca98926a4fed88e722eba66ddbc5b0a8",
+ "sha256": "1n662r7q9vmbndswnhv77r1nngb65qwvnx5vii1nnd31p4vhvp0j"
},
"stable": {
"version": [
@@ -136945,11 +138482,11 @@
"repo": "gmlarumbe/wavedrom-mode",
"unstable": {
"version": [
- 20250720,
- 1337
+ 20260715,
+ 1713
],
- "commit": "159767bc9e1726035c9e21ac50f2d0f7fe315fa8",
- "sha256": "06kiv7qsfj4xw55jzzbmf1l6n4an5rn13ms9z2516x26v3sjyix7"
+ "commit": "5d59b7ca2bdf355d9d2f00d563acf4e17e8ba8b9",
+ "sha256": "0yszy0cz57sahmz7splqkq103jp68vfrwh5if9qfra81plykcml1"
},
"stable": {
"version": [
@@ -137183,11 +138720,11 @@
"repo": "fxbois/web-mode",
"unstable": {
"version": [
- 20260331,
- 1441
+ 20260623,
+ 932
],
- "commit": "e93b3fb89fd6345a5ff59795bed712abd486200a",
- "sha256": "02xn5wqmjv46nqrd73prddzx20c3r5idyg55rchbzvd4wwxjc9a6"
+ "commit": "aeee2d4c82a791ff69657c1413873bf9265544df",
+ "sha256": "0bpm6njk1pmqckvmk7zwcfms8csb9rzj3zylh3pl7xr2k25gaj1x"
},
"stable": {
"version": [
@@ -137548,11 +139085,11 @@
"repo": "thierryvolpiatto/wfnames",
"unstable": {
"version": [
- 20260105,
- 458
+ 20260706,
+ 903
],
- "commit": "6ea49841ab76f44c0164b9f4722da2f9d46228da",
- "sha256": "1agbwnhgagfrgz5w47x8b4i6x8qdvv03f08p1fi44wsld2h0xvwr"
+ "commit": "d8839fa42a24f7c781cd2d8c3f40eda31faa19be",
+ "sha256": "0ghb3y2qbkb819l81xcb6859h3yzppahbnwykmf8bcim29i3wclf"
},
"stable": {
"version": [
@@ -138162,14 +139699,14 @@
"repo": "agzam/wiktionary-bro.el",
"unstable": {
"version": [
- 20251218,
- 2021
+ 20260615,
+ 1744
],
"deps": [
"request"
],
- "commit": "def5f3cb1486077cb090da48d77f790b858e7886",
- "sha256": "1iijq66awixa8wr6rm44kxsgl55dggqvdgp3b41wm6j1w6vb1cic"
+ "commit": "bf53a1b3ce71ecf13d3b8a7aa0ba3a66bcf3f2a1",
+ "sha256": "1dyyp85jika15kq4cyjnm53zqfilsxbsljg38ib36r3hiic896x7"
},
"stable": {
"version": [
@@ -138539,11 +140076,11 @@
"repo": "xenodium/winpulse",
"unstable": {
"version": [
- 20260216,
- 2106
+ 20260611,
+ 341
],
- "commit": "c58352bea2223fd6f0cc11deb4d33bca2ff0213c",
- "sha256": "0fpnh45mm608i41mv7abkkm4m29bzwhgls9r2gcdvcbsaddcfk61"
+ "commit": "dcfccb28394d8eb09a8bbbca69e466b334af461d",
+ "sha256": "0zvfa5jkcaxxzcydx7w227hh08vgrgzij520620nbb0a5ran9vwz"
}
},
{
@@ -138609,20 +140146,20 @@
"url": "https://hg.sr.ht/~arnebab/wisp",
"unstable": {
"version": [
- 20251108,
- 2318
+ 20260711,
+ 2357
],
- "commit": "cfebcd5f097f2f7bbb0f5b0c3730584313c93bac",
- "sha256": "1pq5qiswihisym9c7161m3flh4idhmk1dagzlvak8riz0h47glm4"
+ "commit": "97cdd788b49ea385cdc423b411af37dacd3bc5f9",
+ "sha256": "1g8599h87gsa3ffskbnapvasl4sd26fgyy5rc0mhnzzlbw91zi1s"
},
"stable": {
"version": [
1,
0,
- 12
+ 13
],
- "commit": "7c6239a779656cd55225ad24e15cc29bc896f834",
- "sha256": "0m5ssl4ngk2jl1zk0fnsss0asyvwanjaa5rrcksldqnh2ikcr4bm"
+ "commit": "de5543e8e0b3bf05f3db552e71e0ed52169f0307",
+ "sha256": "0fb4l0ww4rnkrsh4x46301j5xrqniny9b7yh7i6lp4wprwx0a7fs"
}
},
{
@@ -138655,34 +140192,53 @@
"sha256": "188h1sy4mxzrkwi3zgiw108c5f71rkj5agdkf9yy9v8c1bkawm4x"
}
},
+ {
+ "ename": "with-command-redo",
+ "commit": "fc803a9357d301d3f0b2b6396f1f85db36c27cbc",
+ "sha256": "0payls4280ng2lxqqjlhfc90xgxikk3kh6j7lhxfrykjag26k2m2",
+ "fetcher": "codeberg",
+ "repo": "ideasman42/emacs-with-command-redo",
+ "unstable": {
+ "version": [
+ 20260710,
+ 942
+ ],
+ "commit": "b3e3c86e2cbeb097552a1bff000905ad28de7907",
+ "sha256": "0kn6mlim6an53kwh09fiyvjgavm42l7sdmb3nsrmw47dky2za827"
+ }
+ },
{
"ename": "with-editor",
- "commit": "a74629656e9a23133219a0bd805982f1497b35d7",
- "sha256": "1pgw52pn0vam3p8hh5cyivsg0i8r6pigam6xvbk46siffk16g0wk",
+ "commit": "aec4a76eaea31408bd27d76a0b8cea5268663cc1",
+ "sha256": "1wsl1vwvywlc32r5pcc9jqd0pbzq1sn4fppxk3vwl0s5h40v8rnb",
"fetcher": "github",
"repo": "magit/with-editor",
"unstable": {
"version": [
- 20260417,
- 751
+ 20260701,
+ 1252
],
"deps": [
- "compat"
+ "compat",
+ "cond-let",
+ "llama"
],
- "commit": "d0935036eb894680d8ca1a4d1ed8e8d5d90005e5",
- "sha256": "15vvc6awlk8mzqqfqn7n3k349skzg0jk645sjgmzq1sfig4yfcsy"
+ "commit": "45bfc6084f03e3aa7f4f8db20836d559186c5957",
+ "sha256": "12vh1p6zlqi7rv0xmd6v0mxyxyafh5izw9x990x5m9rrzxb5q306"
},
"stable": {
"version": [
3,
- 4,
- 9
+ 5,
+ 2
],
"deps": [
- "compat"
+ "compat",
+ "cond-let",
+ "llama"
],
- "commit": "64211dcb815f2533ac3d2a7e56ff36ae804d8338",
- "sha256": "0gxmmzx7z84d4684q58ijms7d555ngasvzhfz2gna9awly5qig6z"
+ "commit": "45bfc6084f03e3aa7f4f8db20836d559186c5957",
+ "sha256": "12vh1p6zlqi7rv0xmd6v0mxyxyafh5izw9x990x5m9rrzxb5q306"
}
},
{
@@ -139057,11 +140613,11 @@
"repo": "martianh/wordreference.el",
"unstable": {
"version": [
- 20241203,
- 1648
+ 20260509,
+ 754
],
- "commit": "4f68d155ceb3328c3263faee86cfb82d50402f05",
- "sha256": "0kv0b2nbaafjznclahymxcrp2mj06v71887jg5rlj2i09mb0igf1"
+ "commit": "6b1e321ec48ae6eadc06ed25f018c384e396644b",
+ "sha256": "1qsiwk6j73fvjhhwzf3qi5zhp59ix7h7fz3z6xp7vr7h6dyal2l9"
}
},
{
@@ -139390,26 +140946,26 @@
"repo": "cjennings/emacs-wttrin",
"unstable": {
"version": [
- 20260422,
- 507
+ 20260626,
+ 1725
],
"deps": [
"xterm-color"
],
- "commit": "9958ec4c4396ae8435f7e1818ff383c05df47a14",
- "sha256": "1i4k7aj2w5mawfc9h8h7s5c3r886bmzxf4ai2q1caarhckb81wj3"
+ "commit": "ee8fdeb692d666c12ce068a2b1ee90e9451ac892",
+ "sha256": "11yri41vzsj08arxvavc6hvkcxc4mg2bgc3in3fiksvcwy20pb44"
},
"stable": {
"version": [
0,
3,
- 1
+ 2
],
"deps": [
"xterm-color"
],
- "commit": "a0f1b4f07c98ab3d4d4b50a330822d0991b733a7",
- "sha256": "1b28z8zl53lf5cvybynsnkhs85jz346y7vvhd32l1ypwsr7s0p4d"
+ "commit": "fe653a231b186393b02a2723985e61ce97baba1c",
+ "sha256": "02wkqjyap6gxbi2mcrzpbdjz40igsmf1cbqqr7iw0mgp4ray7zxd"
}
},
{
@@ -139511,14 +141067,26 @@
"repo": "jobbflykt/x509-mode",
"unstable": {
"version": [
- 20260410,
- 723
+ 20260715,
+ 1405
],
"deps": [
"compat"
],
- "commit": "c5dc5a97469166b5a4e835b878ca3c0ed2df055a",
- "sha256": "03k3lk2viplhivq01j5f088b6kv9dc5iz2zf6i0mlba45jm8vp5f"
+ "commit": "fec2f7281b3224ea950284cf39ba45a355c652f5",
+ "sha256": "0p4i7z3jhn2r60lxmva2l227xplkrsi2skqaj6vr3wyvxz18sasd"
+ },
+ "stable": {
+ "version": [
+ 2,
+ 0,
+ 1
+ ],
+ "deps": [
+ "compat"
+ ],
+ "commit": "fec2f7281b3224ea950284cf39ba45a355c652f5",
+ "sha256": "0p4i7z3jhn2r60lxmva2l227xplkrsi2skqaj6vr3wyvxz18sasd"
}
},
{
@@ -140042,11 +141610,11 @@
"repo": "ideasman42/emacs-xref-rst",
"unstable": {
"version": [
- 20260108,
- 1306
+ 20260528,
+ 14
],
- "commit": "2d1ed3f31b64a9e10a757dedf06f1b514894d67f",
- "sha256": "157cfapjp8ip3maqlnbdndlk6j9sr0lrdcl67fvmcxnflabrssff"
+ "commit": "e54656eff9138d71c5d9ad7717675575b9f2b636",
+ "sha256": "08kw6ksgr9rjg56a377fvl5qb0x0c6zqcsv3v9zi4hqhqnycwri4"
}
},
{
@@ -140081,11 +141649,11 @@
"repo": "atomontage/xterm-color",
"unstable": {
"version": [
- 20251128,
- 1842
+ 20260531,
+ 1854
],
- "commit": "ce82e87ea3d277c7e4fc48ce390d540fbd78f6d1",
- "sha256": "0zkjfvma70lw0iv31g1n1naz40d2wpngiasnjy9gslm1nybxj76a"
+ "commit": "0b0d808f8bc5007037341dc5f63149cc32cf2c5b",
+ "sha256": "1jhflkq2jji1nv2hc94xkmfsw383nav2rppl1g4xf76ld1yinkfr"
},
"stable": {
"version": [
@@ -140380,20 +141948,20 @@
"repo": "zkry/yaml.el",
"unstable": {
"version": [
- 20260113,
- 653
+ 20260605,
+ 834
],
- "commit": "f2369fb4985ed054be47ae111760ff2075dff72a",
- "sha256": "1fb7hgb6r0pk30w2vdcci494rrn337ibjvq7xj1ihj2cv2xk8pdb"
+ "commit": "5546f36bde24a9a8c1934e0f6ce205cd41d72537",
+ "sha256": "06s7hl8gn80r7ydvgraml3i51iprmvllz15flfrv7y02ncz98jd5"
},
"stable": {
"version": [
1,
2,
- 3
+ 4
],
- "commit": "f2369fb4985ed054be47ae111760ff2075dff72a",
- "sha256": "1fb7hgb6r0pk30w2vdcci494rrn337ibjvq7xj1ihj2cv2xk8pdb"
+ "commit": "5546f36bde24a9a8c1934e0f6ce205cd41d72537",
+ "sha256": "06s7hl8gn80r7ydvgraml3i51iprmvllz15flfrv7y02ncz98jd5"
}
},
{
@@ -140530,11 +142098,11 @@
"repo": "Kungsgeten/yankpad",
"unstable": {
"version": [
- 20250609,
- 1121
+ 20260506,
+ 850
],
- "commit": "55891dde4c9d83b86f94764e7a1990084e66ee53",
- "sha256": "060vyy0l6y2mjyhk4xys28c85jhqrm8dilrzx4xdmlnd2x4nm1al"
+ "commit": "183b92a25a6fcc1496a8028d80397662e0bd5f19",
+ "sha256": "1s6kd0y1xk6k9xxlna8ayrz7ryd3jq05qcfmakxl4mi4jjf11q53"
},
"stable": {
"version": [
@@ -140577,11 +142145,11 @@
"repo": "binjo/yara-mode",
"unstable": {
"version": [
- 20220317,
- 935
+ 20260702,
+ 151
],
- "commit": "4c959b300ce52665c92e04e524dda5ed051c34f3",
- "sha256": "0kb2a4hcmaczn279hbgk0jv88hsjznv1kqpkgkadszd02q53n0cl"
+ "commit": "2b097f685e2770d2c16e5f59e1434a8dcc38db86",
+ "sha256": "1l1v1nnl93gmj1gg5h254v1v0c417pywblifqyggkjn66jppwgwf"
}
},
{
@@ -140933,26 +142501,28 @@
"url": "https://git.thanosapollo.org/yeetube",
"unstable": {
"version": [
- 20260302,
- 1931
+ 20260713,
+ 333
],
"deps": [
- "compat"
+ "compat",
+ "keymap-popup"
],
- "commit": "77e816972a70db86ad06ef10db56e0d8cecede5c",
- "sha256": "0zvbfwxq3dx14ynpafpvv1swg7hbg3k9avir9b7cymf4r5hrjnx3"
+ "commit": "066bc1c2c06493d10388f8a0ecd8e90f8cd28532",
+ "sha256": "0m52fkv7zjz1iicq5qjxfmz3hcns99bc165r9wxy84j83lb6mry0"
},
"stable": {
"version": [
2,
- 1,
- 12
+ 3,
+ 0
],
"deps": [
- "compat"
+ "compat",
+ "keymap-popup"
],
- "commit": "77e816972a70db86ad06ef10db56e0d8cecede5c",
- "sha256": "0zvbfwxq3dx14ynpafpvv1swg7hbg3k9avir9b7cymf4r5hrjnx3"
+ "commit": "3a5ca54f63a1c8688ca580e77f06a1065283f0e7",
+ "sha256": "0phlcmf54f2wih7rksazf8k2jz4i31siqzd4gb7x3d6zddk2rs97"
}
},
{
@@ -141138,6 +142708,21 @@
"sha256": "1araszwlw53g82phwmmp9x84rq07ma2payplr68yg3k159jbmapr"
}
},
+ {
+ "ename": "youtube-music",
+ "commit": "d26ac835326a8911dbb5efae2409a33388592454",
+ "sha256": "1g9g6ddcdyz1dpdjwvn8qgxs4cy0a8yyqpbvr1x87s1kc06czkmd",
+ "fetcher": "github",
+ "repo": "cyberkm/emacs-youtube-music",
+ "unstable": {
+ "version": [
+ 20260717,
+ 1039
+ ],
+ "commit": "2a962d972d8a59fed718aec039c9c61ef3c0392d",
+ "sha256": "126clxww967w2fb3padiabh6qaxfpka3kcx6xfl1k9x2n56927p1"
+ }
+ },
{
"ename": "youtube-sub-extractor",
"commit": "6b5f8eceb815d74d7839e30971c96aebc7944c7f",
@@ -141258,11 +142843,11 @@
"repo": "treflip/zathura.el",
"unstable": {
"version": [
- 20250728,
- 1208
+ 20260603,
+ 1620
],
- "commit": "947b8332f25810105d35e350f604cdad4e32ee6f",
- "sha256": "16hprzf15y7zwr28dimlmlylz5sxy54kfq2yniqwxsrm3r59j1bp"
+ "commit": "874dadbf07e22811b6b309200cad32b4ccca0e51",
+ "sha256": "1fjdwjygxxf6dfcff74r39z53mf3bkwgrfl8jcfdnkfdx9mpi8x9"
}
},
{
@@ -141327,20 +142912,20 @@
"repo": "bbatsov/zenburn-emacs",
"unstable": {
"version": [
- 20260329,
- 1838
+ 20260601,
+ 1829
],
- "commit": "1022240b1061369ecb605d55fa074d20d5c84aae",
- "sha256": "17rl292240j2c8db01irpp5khsqwwwwcjlzwa52adyirc5bdb74v"
+ "commit": "8697934a57151de119744ea79fde83120e05b88d",
+ "sha256": "0g54j3n2khc470i80diqqdxds0xiysvwdjss3jmgdf73argslj1q"
},
"stable": {
"version": [
2,
- 9,
+ 10,
0
],
- "commit": "1022240b1061369ecb605d55fa074d20d5c84aae",
- "sha256": "17rl292240j2c8db01irpp5khsqwwwwcjlzwa52adyirc5bdb74v"
+ "commit": "8697934a57151de119744ea79fde83120e05b88d",
+ "sha256": "0g54j3n2khc470i80diqqdxds0xiysvwdjss3jmgdf73argslj1q"
}
},
{
@@ -141375,10 +142960,10 @@
},
{
"ename": "zeno-theme",
- "commit": "f6633f0376fd50b6cc45d96c67848dbf8f38e210",
- "sha256": "0akc4llnam4p699v01szhf0xj7r6475y14kbpxli29n5612cwdax",
+ "commit": "469e38ed467ec98dd7fac2e2d3143f18dbd97197",
+ "sha256": "1pg7jkxg5ixqaj4c6igk6hkjv6fdn8b147i05jpl3pfh0dij6h5c",
"fetcher": "github",
- "repo": "sacredyak/zeno-theme",
+ "repo": "rokrdev/zeno-theme",
"unstable": {
"version": [
20211205,
@@ -141912,19 +143497,19 @@
"repo": "localauthor/zk",
"unstable": {
"version": [
- 20250908,
- 1240
+ 20260708,
+ 2048
],
- "commit": "302e494324066d63f317b54c4db75d173914c521",
- "sha256": "10qdia4w31709jk81xcvlyn1ac7zspiawvfx5spr09vff00gbljc"
+ "commit": "3ecb5ac3c56f8727c99458b6d3ad8e2c7df25348",
+ "sha256": "0nalp20qfmaj6028ncl0lqv86kv2jdil0wgvnqb1wb7jllpcgn2d"
},
"stable": {
"version": [
- 0,
- 7
+ 1,
+ 0
],
- "commit": "599be69ae1c1283935f98f9aca4ccda47063d82c",
- "sha256": "0449zsahyzvjlhv27lkj33ybnq86j47paww779zd0qhq550hdnjs"
+ "commit": "ad82465a4a65fba7cff07da419455947507080cc",
+ "sha256": "1d00i9p391h4341q76ci0x6pxsishsh2mkxshfqivllv80gczn2c"
}
},
{
@@ -141935,27 +143520,27 @@
"repo": "localauthor/zk",
"unstable": {
"version": [
- 20251215,
- 1140
+ 20260704,
+ 2129
],
"deps": [
"consult",
"zk"
],
- "commit": "5b7fcbdd7bcfd0903e3844d0b4b28826bfb7ef5d",
- "sha256": "0rp5q6x93r10lrhrrlrdyg2q5amylsvjgjnkb0mgdwfyh8i9fw78"
+ "commit": "ad82465a4a65fba7cff07da419455947507080cc",
+ "sha256": "1d00i9p391h4341q76ci0x6pxsishsh2mkxshfqivllv80gczn2c"
},
"stable": {
"version": [
- 0,
- 7
+ 1,
+ 0
],
"deps": [
"consult",
"zk"
],
- "commit": "599be69ae1c1283935f98f9aca4ccda47063d82c",
- "sha256": "0449zsahyzvjlhv27lkj33ybnq86j47paww779zd0qhq550hdnjs"
+ "commit": "ad82465a4a65fba7cff07da419455947507080cc",
+ "sha256": "1d00i9p391h4341q76ci0x6pxsishsh2mkxshfqivllv80gczn2c"
}
},
{
@@ -141966,27 +143551,27 @@
"repo": "localauthor/zk",
"unstable": {
"version": [
- 20250905,
- 1921
+ 20260704,
+ 2129
],
"deps": [
"zk",
"zk-index"
],
- "commit": "a634b6ec7af4f16a1ceed9271d2a0dbd9bca8501",
- "sha256": "1akiid6z812sp1jfwrf3qz4wklc0mdmina4rfj9bfyphiivk4lf6"
+ "commit": "ad82465a4a65fba7cff07da419455947507080cc",
+ "sha256": "1d00i9p391h4341q76ci0x6pxsishsh2mkxshfqivllv80gczn2c"
},
"stable": {
"version": [
- 0,
- 7
+ 1,
+ 0
],
"deps": [
"zk",
"zk-index"
],
- "commit": "599be69ae1c1283935f98f9aca4ccda47063d82c",
- "sha256": "0449zsahyzvjlhv27lkj33ybnq86j47paww779zd0qhq550hdnjs"
+ "commit": "ad82465a4a65fba7cff07da419455947507080cc",
+ "sha256": "1d00i9p391h4341q76ci0x6pxsishsh2mkxshfqivllv80gczn2c"
}
},
{
@@ -141997,25 +143582,25 @@
"repo": "localauthor/zk",
"unstable": {
"version": [
- 20250908,
- 1240
+ 20260708,
+ 2048
],
"deps": [
"zk"
],
- "commit": "302e494324066d63f317b54c4db75d173914c521",
- "sha256": "10qdia4w31709jk81xcvlyn1ac7zspiawvfx5spr09vff00gbljc"
+ "commit": "3ecb5ac3c56f8727c99458b6d3ad8e2c7df25348",
+ "sha256": "0nalp20qfmaj6028ncl0lqv86kv2jdil0wgvnqb1wb7jllpcgn2d"
},
"stable": {
"version": [
- 0,
- 7
+ 1,
+ 0
],
"deps": [
"zk"
],
- "commit": "599be69ae1c1283935f98f9aca4ccda47063d82c",
- "sha256": "0449zsahyzvjlhv27lkj33ybnq86j47paww779zd0qhq550hdnjs"
+ "commit": "ad82465a4a65fba7cff07da419455947507080cc",
+ "sha256": "1d00i9p391h4341q76ci0x6pxsishsh2mkxshfqivllv80gczn2c"
}
},
{
@@ -142026,15 +143611,27 @@
"repo": "localauthor/zk-luhmann",
"unstable": {
"version": [
- 20250406,
- 844
+ 20260705,
+ 1412
],
"deps": [
"zk",
"zk-index"
],
- "commit": "1fe0d9053b603037898530ae8aa6361c4e409e46",
- "sha256": "1gphp973a4msciy0xcfpkw8nmdvn23d5chg7qjqq7a93rpyx3qir"
+ "commit": "8b34138abc432a37642d7d60f1c2d043e07bb680",
+ "sha256": "13mxca8rj56afr1rphv2bscdbpkyxvnppr6m8bc0sxzkd86h8p8y"
+ },
+ "stable": {
+ "version": [
+ 1,
+ 0
+ ],
+ "deps": [
+ "zk",
+ "zk-index"
+ ],
+ "commit": "8b34138abc432a37642d7d60f1c2d043e07bb680",
+ "sha256": "13mxca8rj56afr1rphv2bscdbpkyxvnppr6m8bc0sxzkd86h8p8y"
}
},
{
@@ -142256,11 +143853,11 @@
"repo": "cyrus-and/zoom",
"unstable": {
"version": [
- 20250214,
- 1251
+ 20260509,
+ 908
],
- "commit": "36f9db90941b10d34bac976aee35dfe25242cd03",
- "sha256": "0y01yn0gaycyhqifg8gq0ilr20qr0xm51rh97vbp1vh1n74fca4q"
+ "commit": "5e524d98c7f2b4dd6ed41d95573b29b263632eb2",
+ "sha256": "1761ad33yppr3xb5244lpn68l4n3blk577f4l5mbvbkapnfly89q"
},
"stable": {
"version": [
@@ -142514,24 +144111,6 @@
"sha256": "02g65hri4k362lqk43vpzzdlxisdbjbknvb4riib5dcdar08qr34"
}
},
- {
- "ename": "zprint-format",
- "commit": "54457e29def6ecfdf96f599e6a007f5ebee485b9",
- "sha256": "1flb1i5byp6s8fj1vpgm5wc43f8hld7rg940m20a40ysr1x35szk",
- "fetcher": "github",
- "repo": "dpassen/zprint-format",
- "unstable": {
- "version": [
- 20210602,
- 146
- ],
- "deps": [
- "reformatter"
- ],
- "commit": "fa575c17a40033189f2f23f1a5b27b88c399d200",
- "sha256": "0xzq07xbk3pz1hhbwb7hakd1w6x20jm3q1flqjl3c8wxgbi7cmml"
- }
- },
{
"ename": "zprint-mode",
"commit": "188d40daec1ff86dcfa807a91eb77a1281de3951",
diff --git a/pkgs/applications/editors/emacs/load-the-early-default-library-after-early-init.el.patch b/pkgs/applications/editors/emacs/load-the-early-default-library-after-early-init.el.patch
new file mode 100644
index 000000000000..63a53936034b
--- /dev/null
+++ b/pkgs/applications/editors/emacs/load-the-early-default-library-after-early-init.el.patch
@@ -0,0 +1,140 @@
+From: Lin Jian
+Subject: Load the early-default library after early-init.el
+
+emacs.pkgs.withPackages from Nixpkgs can be used to configure Emacs.
+Its main functionality is to add extra Emacs lisp libraries.
+By (ab)using a library named default, user configuration (init.el) can
+also be added by it.
+
+A natural extension[1] is to add early-init.el via
+emacs.pkgs.withPackages. With this patch, early-init.el can be added by
+packaging it as a library named early-default.
+
+The early-default library is similar to the default library except that
+it is loaded right after early-init.el and is controlled by
+inhibit-early-default-init.
+
+[1]: https://github.com/nix-community/emacs-overlay/issues/532
+
+--- a/doc/emacs/cmdargs.texi
++++ b/doc/emacs/cmdargs.texi
+@@ -338,9 +338,10 @@ meant for regular (or interactive) use, since it makes commands like
+ @opindex -q
+ @itemx --no-init-file
+ @opindex --no-init-file
+-@cindex bypassing init and @file{default.el} file
++@cindex bypassing init, @file{early-default.el} and @file{default.el} file
+ @cindex init file, not loading
+ @cindex @file{default.el} file, not loading
++@cindex @file{early-default.el} file, not loading
+ Do not load any initialization file (@pxref{Init File}). When Emacs
+ is invoked with this option, the Customize facility does not allow
+ options to be saved (@pxref{Easy Customization}). This option does
+--- a/doc/emacs/custom.texi
++++ b/doc/emacs/custom.texi
+@@ -2601,6 +2601,13 @@ But your init file, if any, is loaded first; if it sets
+ @code{inhibit-default-init} non-@code{nil}, then @file{default} is not
+ loaded.
+
++@cindex @file{early-default.el}, the early default init file
++ There can also be an @dfn{early default init file}, which is the library
++named @file{early-default.el}. It is similar to the default init file
++except that it is loaded after the early init file (@pxref{Early Init File})
++and is controlled by @code{inhibit-early-default-init}. This behavior is
++Nixpkgs-specific.
++
+ @cindex site init file
+ @cindex @file{site-start.el}, the site startup file
+ Your site may also have a @dfn{site startup file}; this is named
+@@ -2614,7 +2621,8 @@ better to put them in @file{default.el}, so that users can more easily
+ override them.
+
+ @cindex @file{site-lisp} directories
+- You can place @file{default.el} and @file{site-start.el} in any of
++ You can place @file{early-default.el}, @file{default.el} and
++@file{site-start.el} in any of
+ the directories which Emacs searches for Lisp libraries. The variable
+ @code{load-path} (@pxref{Lisp Libraries}) specifies these directories.
+ Many sites put these files in a subdirectory named @file{site-lisp} in
+--- a/doc/lispref/os.texi
++++ b/doc/lispref/os.texi
+@@ -107,6 +107,13 @@ GNU Emacs Manual}). This is not done if the options @samp{-q},
+ was specified, Emacs looks for the init file in that user's home
+ directory instead.
+
++@item
++It loads the library @file{early-default}, if it exists. This is not done
++if @code{inhibit-early-default-init} is non-@code{nil}, nor if the options
++@samp{-q}, @samp{-Q}, or @samp{--batch} were specified. This behavior is
++Nixpkgs-specific.
++@cindex @file{early-default.el}
++
+ @item
+ It calls the function @code{package-activate-all} to activate any
+ optional Emacs Lisp package that has been installed. @xref{Packaging
+@@ -358,7 +365,8 @@ Do not initialize any display; just start a server.
+
+ @item --no-init-file
+ @itemx -q
+-Do not load either the init file, or the @file{default} library.
++Do not load either the init file, or the @file{default} and
++@file{early-default} libraries.
+
+ @item --no-site-file
+ Do not load the @file{site-start} library.
+@@ -428,6 +436,13 @@ to a non-@code{nil} value, then Emacs does not subsequently load the
+ (or @samp{-Q}), Emacs loads neither your personal init file nor
+ the default init file.
+
++@cindex early default init file
++ An Emacs installation may also have an @dfn{early default init file},
++which is a Lisp library named @file{early-default.el}. It is similar to
++the default init file except that it is loaded after the early init file
++and is controlled by @code{inhibit-early-default-init}. This behavior
++is Nixpkgs-specific.
++
+ Another file for site-customization is @file{site-start.el}. Emacs
+ loads this @emph{before} the user's init file. You can inhibit the
+ loading of this file with the option @samp{--no-site-file}.
+@@ -449,6 +464,12 @@ If this variable is non-@code{nil}, it prevents Emacs from loading the
+ default initialization library file. The default value is @code{nil}.
+ @end defopt
+
++@defopt inhibit-early-default-init
++If this variable is non-@code{nil}, it prevents Emacs from loading the
++early default initialization library file. The default value is @code{nil}.
++This is Nixpkgs-specific.
++@end defopt
++
+ @defvar before-init-hook
+ This normal hook is run, once, just before loading all the init files
+ (@file{site-start.el}, your init file, and @file{default.el}).
+--- a/lisp/startup.el
++++ b/lisp/startup.el
+@@ -101,6 +101,12 @@ startup message unless he personally acts to inhibit it."
+ :type '(choice (const :tag "Don't inhibit")
+ (string :tag "Enter your user name, to inhibit")))
+
++(defcustom inhibit-early-default-init nil
++ "Non-nil inhibits loading the `early-default' library.
++
++This behavior is Nixpkgs-specific."
++ :type 'boolean)
++
+ (defcustom inhibit-default-init nil
+ "Non-nil inhibits loading the `default' library."
+ :type 'boolean)
+@@ -1540,6 +1546,10 @@ please check its value")
+ startup-init-directory)))
+ (setq early-init-file user-init-file)
+
++ (when (and init-file-user
++ (not inhibit-early-default-init))
++ (load "early-default" 'noerror 'nomessage))
++
+ ;; Amend `native-comp-eln-load-path', since the early-init file may
+ ;; have altered `user-emacs-directory' and/or changed the eln-cache
+ ;; directory.
+--
+2.53.0
+
diff --git a/pkgs/applications/editors/emacs/make-emacs.nix b/pkgs/applications/editors/emacs/make-emacs.nix
index 7178b8931ca5..1a650a3b2af6 100644
--- a/pkgs/applications/editors/emacs/make-emacs.nix
+++ b/pkgs/applications/editors/emacs/make-emacs.nix
@@ -162,6 +162,9 @@ stdenv.mkDerivation (finalAttrs: {
patches =
patches fetchpatch
+ ++ [
+ ./load-the-early-default-library-after-early-init.el.patch
+ ]
++ lib.optionals withNativeCompilation [
(replaceVars ./native-comp-driver-options-30.patch {
backendPath = (
@@ -463,9 +466,8 @@ stdenv.mkDerivation (finalAttrs: {
| xargs -n $((1000/NIX_BUILD_CORES + 1)) -P $NIX_BUILD_CORES \
$out/bin/emacs --batch -l comp --eval "(while argv \
(comp-trampoline-compile (intern (pop argv))))"
- mkdir -p $out/share/emacs/native-lisp
$out/bin/emacs --batch \
- --eval "(add-to-list 'native-comp-eln-load-path \"$out/share/emacs/native-lisp\")" \
+ --eval "(add-to-list 'native-comp-eln-load-path \"$out/lib/emacs/$siteVersionDir/native-lisp\")" \
-f batch-native-compile $out/share/emacs/site-lisp/site-start.el
'';
diff --git a/pkgs/applications/editors/emacs/sources.nix b/pkgs/applications/editors/emacs/sources.nix
index 1e00137cb90c..f7cddf1c9cb2 100644
--- a/pkgs/applications/editors/emacs/sources.nix
+++ b/pkgs/applications/editors/emacs/sources.nix
@@ -146,14 +146,9 @@ in
pname = "emacs-mac";
version = "30.2.50";
variant = "macport";
- rev = "emacs-mac-30.2";
- hash = "sha256-i/W2Xa6Vk1+T1fs6fa4wJVMLLB6BK8QAPcdmPrU8NwM=";
+ rev = "emacs-mac-30.2.1";
+ hash = "sha256-KFgQZBW0QRX0k4k8gkVuGhNTfxArOH1+rwUzsmyEuss=";
patches = fetchpatch: [
- (fetchpatch {
- name = "fix-off-by-one-mistake-80851-CVE-2026-6861.patch";
- url = "https://cgit.git.savannah.gnu.org/cgit/emacs.git/patch/?id=8f535370b9efbc91673b20c6987a5cae4f6dc562";
- hash = "sha256-ny44eIi8DUa9pQhVGzhGz4H6FXU4+ki86SITLXhkwpw=";
- })
(fetchpatch {
# tree-sitter 0.26 compatibility fix, see https://bugs.gentoo.org/970856
url = "https://gitweb.gentoo.org/proj/emacs-patches.git/plain/emacs/30.2/01_all_treesit-0.26.patch?id=d0f47979806d9be5a190fdb4ffa1bde439b2d616";
diff --git a/pkgs/applications/editors/jetbrains/ides/clion.nix b/pkgs/applications/editors/jetbrains/ides/clion.nix
index 5b6885bb4614..547e4878df21 100644
--- a/pkgs/applications/editors/jetbrains/ides/clion.nix
+++ b/pkgs/applications/editors/jetbrains/ides/clion.nix
@@ -21,20 +21,16 @@ let
# update-script-start: urls
urls = {
x86_64-linux = {
- url = "https://download.jetbrains.com/cpp/CLion-2026.1.2.tar.gz";
- hash = "sha256-Q3LOhpwpU6vrPWEzA+s2ZnbRxo+EeodBUHUYs3Xikrs=";
+ url = "https://download.jetbrains.com/cpp/CLion-2026.1.4.tar.gz";
+ hash = "sha256-uOhFuDqVw3pxtqBvOQH+FpJTFrneaD/R0VcpJZRYD2o=";
};
aarch64-linux = {
- url = "https://download.jetbrains.com/cpp/CLion-2026.1.2-aarch64.tar.gz";
- hash = "sha256-YM105ozP78oLDmwKL0t4Z4wGjCDh6xvhf/C1oCD6Qi8=";
- };
- x86_64-darwin = {
- url = "https://download.jetbrains.com/cpp/CLion-2026.1.2.dmg";
- hash = "sha256-UEkYDJBjRvvUUB2UFsc37kdp/i+1ctqULSKs62/t9/I=";
+ url = "https://download.jetbrains.com/cpp/CLion-2026.1.4-aarch64.tar.gz";
+ hash = "sha256-I6IKQng4lNtRlQIq08K5bueqgKI/q1awX4EuRnyAnOk=";
};
aarch64-darwin = {
- url = "https://download.jetbrains.com/cpp/CLion-2026.1.2-aarch64.dmg";
- hash = "sha256-scMwDF+mIfx/66cBrvdxp+gU3+qA2sUWqoGCEhPItjE=";
+ url = "https://download.jetbrains.com/cpp/CLion-2026.1.4-aarch64.dmg";
+ hash = "sha256-i3stX7dyRgSOJkFTMD9/hkw6e2mGNqn13S7X/vJ66RQ=";
};
};
# update-script-end: urls
@@ -48,8 +44,8 @@ in
product = "CLion";
# update-script-start: version
- version = "2026.1.2";
- buildNumber = "261.24374.148";
+ version = "2026.1.4";
+ buildNumber = "261.26222.59";
# update-script-end: version
src = fetchurl (urls.${system} or (throw "Unsupported system: ${system}"));
diff --git a/pkgs/applications/editors/jetbrains/ides/datagrip.nix b/pkgs/applications/editors/jetbrains/ides/datagrip.nix
index dfe4ed7f7d3f..81c7b8d92a09 100644
--- a/pkgs/applications/editors/jetbrains/ides/datagrip.nix
+++ b/pkgs/applications/editors/jetbrains/ides/datagrip.nix
@@ -19,10 +19,6 @@ let
url = "https://download.jetbrains.com/datagrip/datagrip-2026.1.3-aarch64.tar.gz";
hash = "sha256-G+tinD/+qM5HVR4u2E0cNXtdVsbwgK8/PdZ3ic6hf4M=";
};
- x86_64-darwin = {
- url = "https://download.jetbrains.com/datagrip/datagrip-2026.1.3.dmg";
- hash = "sha256-vW2LEonl0D9S0VxbeJX4jRrwhELGBwlOXwiHslvh06E=";
- };
aarch64-darwin = {
url = "https://download.jetbrains.com/datagrip/datagrip-2026.1.3-aarch64.dmg";
hash = "sha256-Kyt3fYPXzwTVxPFVKd+atiHWb/i7gjGahz1MJ4iXxy8=";
diff --git a/pkgs/applications/editors/jetbrains/ides/dataspell.nix b/pkgs/applications/editors/jetbrains/ides/dataspell.nix
index 18dd09b48cf9..a9435844c443 100644
--- a/pkgs/applications/editors/jetbrains/ides/dataspell.nix
+++ b/pkgs/applications/editors/jetbrains/ides/dataspell.nix
@@ -21,10 +21,6 @@ let
url = "https://download.jetbrains.com/python/dataspell-2026.1.2-aarch64.tar.gz";
hash = "sha256-SSmIPF0pDMolxeXL21UaHMbZdtYbChWVxTKZOsPhH+I=";
};
- x86_64-darwin = {
- url = "https://download.jetbrains.com/python/dataspell-2026.1.2.dmg";
- hash = "sha256-2qzwzGMYuy1qEuTprxwNa5gOPgCZq2MadSKN8FT8w8c=";
- };
aarch64-darwin = {
url = "https://download.jetbrains.com/python/dataspell-2026.1.2-aarch64.dmg";
hash = "sha256-MGWufS0nlswdqhACNQWtlXJwfPiYw8wUx7olIxPS15k=";
diff --git a/pkgs/applications/editors/jetbrains/ides/gateway.nix b/pkgs/applications/editors/jetbrains/ides/gateway.nix
index 56370da57946..28f722fed168 100644
--- a/pkgs/applications/editors/jetbrains/ides/gateway.nix
+++ b/pkgs/applications/editors/jetbrains/ides/gateway.nix
@@ -19,10 +19,6 @@ let
url = "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2026.1.3-aarch64.tar.gz";
hash = "sha256-CSe04BBo4jS1cIhu4NfZqaSHMaNue2eFUPa+1gOxuoo=";
};
- x86_64-darwin = {
- url = "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2026.1.3.dmg";
- hash = "sha256-WKwIP19y5EKO98JgEm468ofaRp/JO5z8lqNhtpsH4tY=";
- };
aarch64-darwin = {
url = "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2026.1.3-aarch64.dmg";
hash = "sha256-AHY/lY0ARkW0VoSgy0t7LLNXA965PLooWBSWxBKBV5M=";
diff --git a/pkgs/applications/editors/jetbrains/ides/goland.nix b/pkgs/applications/editors/jetbrains/ides/goland.nix
index fe92428cd2a8..b19fd343d896 100644
--- a/pkgs/applications/editors/jetbrains/ides/goland.nix
+++ b/pkgs/applications/editors/jetbrains/ides/goland.nix
@@ -12,20 +12,16 @@ let
# update-script-start: urls
urls = {
x86_64-linux = {
- url = "https://download.jetbrains.com/go/goland-2026.1.2.tar.gz";
- hash = "sha256-1FkDEaapyDbTPe4soOdyCHLkp/UT3rZ6siGyGyjmGJo=";
+ url = "https://download.jetbrains.com/go/goland-2026.1.4.tar.gz";
+ hash = "sha256-pHSbmAZ+tSfa0wdtDp/3Ib/GNMP30OFNQlHWUfMwrW0=";
};
aarch64-linux = {
- url = "https://download.jetbrains.com/go/goland-2026.1.2-aarch64.tar.gz";
- hash = "sha256-E8WpA4s/ePEDAs47IPC0v10C1VKl9UYU7VNX/5igpm4=";
- };
- x86_64-darwin = {
- url = "https://download.jetbrains.com/go/goland-2026.1.2.dmg";
- hash = "sha256-iWYTMImwzMh9KSJgek8a84o/KlLWBaOj80vKlB8Ftes=";
+ url = "https://download.jetbrains.com/go/goland-2026.1.4-aarch64.tar.gz";
+ hash = "sha256-7s98kY08aKjdRGQLDkffeVhgj1FWurLmTTYmtb5Qx6c=";
};
aarch64-darwin = {
- url = "https://download.jetbrains.com/go/goland-2026.1.2-aarch64.dmg";
- hash = "sha256-TFnEMq7u51UvtaOjnxS+abJhsR3aSnaQjNFfF8EQrcQ=";
+ url = "https://download.jetbrains.com/go/goland-2026.1.4-aarch64.dmg";
+ hash = "sha256-y7mEke0z0MvQs+kMtrmrq7EeAtJUbgo6sGZrOB0MraM=";
};
};
# update-script-end: urls
@@ -39,8 +35,8 @@ in
product = "Goland";
# update-script-start: version
- version = "2026.1.2";
- buildNumber = "261.24374.154";
+ version = "2026.1.4";
+ buildNumber = "261.26222.72";
# update-script-end: version
src = fetchurl (urls.${system} or (throw "Unsupported system: ${system}"));
diff --git a/pkgs/applications/editors/jetbrains/ides/idea.nix b/pkgs/applications/editors/jetbrains/ides/idea.nix
index bf9dbdae54be..3367506afa51 100644
--- a/pkgs/applications/editors/jetbrains/ides/idea.nix
+++ b/pkgs/applications/editors/jetbrains/ides/idea.nix
@@ -15,20 +15,16 @@ let
# update-script-start: urls
urls = {
x86_64-linux = {
- url = "https://download.jetbrains.com/idea/ideaIU-2026.1.3.tar.gz";
- hash = "sha256-pvBJcW2h0J2eDsFQDGC/AaX/ig/iQZF43R/y/bK3dWM=";
+ url = "https://download.jetbrains.com/idea/ideaIU-2026.1.4.tar.gz";
+ hash = "sha256-MQTYXZUH/4ggZeP465UGQCtKgSkJLSaCZiu26cTwY/w=";
};
aarch64-linux = {
- url = "https://download.jetbrains.com/idea/ideaIU-2026.1.3-aarch64.tar.gz";
- hash = "sha256-dlnnkWCSM8Pmv2fBv8yG9foRdkd8pYFa5hJbDq6EqIs=";
- };
- x86_64-darwin = {
- url = "https://download.jetbrains.com/idea/ideaIU-2026.1.3.dmg";
- hash = "sha256-Sv6A37Y5yIkaE+qnFEGDBq/q9fSSSZPjJC59NB2Fsns=";
+ url = "https://download.jetbrains.com/idea/ideaIU-2026.1.4-aarch64.tar.gz";
+ hash = "sha256-MDZFuLrUxcCIc0Zhi4QhgKPeU7Pgs9oJ/FxQH1n3gBM=";
};
aarch64-darwin = {
- url = "https://download.jetbrains.com/idea/ideaIU-2026.1.3-aarch64.dmg";
- hash = "sha256-LRyg2DLmTgChdFKR8NMGGjWDZTAWnjQpoTp3NIBvYrI=";
+ url = "https://download.jetbrains.com/idea/ideaIU-2026.1.4-aarch64.dmg";
+ hash = "sha256-XIBK/+Lxaz9dX+Lxl7HXsl+Z3Z7GBzSuDxNssb/4A2s=";
};
};
# update-script-end: urls
@@ -43,8 +39,8 @@ mkJetBrainsProduct {
productShort = "IDEA";
# update-script-start: version
- version = "2026.1.3";
- buildNumber = "261.25134.95";
+ version = "2026.1.4";
+ buildNumber = "261.26222.65";
# update-script-end: version
src = fetchurl (urls.${system} or (throw "Unsupported system: ${system}"));
diff --git a/pkgs/applications/editors/jetbrains/ides/mps.nix b/pkgs/applications/editors/jetbrains/ides/mps.nix
index 52e18be29bcd..691bd0f94179 100644
--- a/pkgs/applications/editors/jetbrains/ides/mps.nix
+++ b/pkgs/applications/editors/jetbrains/ides/mps.nix
@@ -19,10 +19,6 @@ let
url = "https://download.jetbrains.com/mps/2025.3/MPS-2025.3.tar.gz";
hash = "sha256-xAI+UrTheCTWHSdoI4YZvhTlrlc121M+OVFkfzd7a3k=";
};
- x86_64-darwin = {
- url = "https://download.jetbrains.com/mps/2025.3/MPS-2025.3-macos.dmg";
- hash = "sha256-whYAjKkF79mrknHflZnvOOy2bLosYUguelZDSuPt3uY=";
- };
aarch64-darwin = {
url = "https://download.jetbrains.com/mps/2025.3/MPS-2025.3-macos-aarch64.dmg";
hash = "sha256-3HnEHOhRRI9IYjBhc5FO7h5j4jBBDtZTVkmO/S1fBEQ=";
diff --git a/pkgs/applications/editors/jetbrains/ides/phpstorm.nix b/pkgs/applications/editors/jetbrains/ides/phpstorm.nix
index a034954c8e1e..b76837caa81b 100644
--- a/pkgs/applications/editors/jetbrains/ides/phpstorm.nix
+++ b/pkgs/applications/editors/jetbrains/ides/phpstorm.nix
@@ -12,20 +12,16 @@ let
# update-script-start: urls
urls = {
x86_64-linux = {
- url = "https://download.jetbrains.com/webide/PhpStorm-2026.1.3.tar.gz";
- hash = "sha256-hXb2KcCaNKIJOGbN0ZUDxMKuX++dO1FRoxvC580VIHQ=";
+ url = "https://download.jetbrains.com/webide/PhpStorm-2026.1.4.tar.gz";
+ hash = "sha256-SF25D7dDn7b6AzcXEDLKwhpjTnCqYz1fEmvND5dl8Is=";
};
aarch64-linux = {
- url = "https://download.jetbrains.com/webide/PhpStorm-2026.1.3-aarch64.tar.gz";
- hash = "sha256-+As41qcyCvAICIttMEi30b8mBTZoWKK4rjxjkVx4TXs=";
- };
- x86_64-darwin = {
- url = "https://download.jetbrains.com/webide/PhpStorm-2026.1.3.dmg";
- hash = "sha256-Q9m/XIgDg4F4yH0P35IaInk/se5CXqewvp248VqA4uc=";
+ url = "https://download.jetbrains.com/webide/PhpStorm-2026.1.4-aarch64.tar.gz";
+ hash = "sha256-T9q3/nxv/AA6y7CHWtOhUibR7bnKN8OZmfN3NWYTsIQ=";
};
aarch64-darwin = {
- url = "https://download.jetbrains.com/webide/PhpStorm-2026.1.3-aarch64.dmg";
- hash = "sha256-Yo50EhVQDg7c/C3JZ9utZxpsOY0DuZfgYzYtBN9Nmwk=";
+ url = "https://download.jetbrains.com/webide/PhpStorm-2026.1.4-aarch64.dmg";
+ hash = "sha256-XGcfEWHHeLugvkT/WlQDsVRN33F46b1PCNhINQitqSY=";
};
};
# update-script-end: urls
@@ -39,8 +35,8 @@ mkJetBrainsProduct {
product = "PhpStorm";
# update-script-start: version
- version = "2026.1.3";
- buildNumber = "261.25134.104";
+ version = "2026.1.4";
+ buildNumber = "261.26222.71";
# update-script-end: version
src = fetchurl (urls.${system} or (throw "Unsupported system: ${system}"));
diff --git a/pkgs/applications/editors/jetbrains/ides/pycharm.nix b/pkgs/applications/editors/jetbrains/ides/pycharm.nix
index e972abdd1633..452f73600373 100644
--- a/pkgs/applications/editors/jetbrains/ides/pycharm.nix
+++ b/pkgs/applications/editors/jetbrains/ides/pycharm.nix
@@ -13,20 +13,16 @@ let
# update-script-start: urls
urls = {
x86_64-linux = {
- url = "https://download.jetbrains.com/python/pycharm-2026.1.2.tar.gz";
- hash = "sha256-kcd1vhb7CFn5sY69RW2I4THK3zN7DOn52O0YeIZWGWY=";
+ url = "https://download.jetbrains.com/python/pycharm-2026.1.4.tar.gz";
+ hash = "sha256-RIufgZhg/n+D1uEdcDyYRjTDfh8Jicyz4h0B1kTbVXs=";
};
aarch64-linux = {
- url = "https://download.jetbrains.com/python/pycharm-2026.1.2-aarch64.tar.gz";
- hash = "sha256-5rTyUmevreBL5nZPa7FuodFhWcrjSQ+7T1jMFo7P/uM=";
- };
- x86_64-darwin = {
- url = "https://download.jetbrains.com/python/pycharm-2026.1.2.dmg";
- hash = "sha256-Fej8KylKSFKVxCMrBAcUIDwb0v5B5r1RysMAvcBVgh8=";
+ url = "https://download.jetbrains.com/python/pycharm-2026.1.4-aarch64.tar.gz";
+ hash = "sha256-71FbYpN0seJ5k/yZA7aoXgU4W/N1BhjtKl7W7Hic9UE=";
};
aarch64-darwin = {
- url = "https://download.jetbrains.com/python/pycharm-2026.1.2-aarch64.dmg";
- hash = "sha256-oau/wa9spYnn7XE07NGsINyqof3Mu9t9WQLuPAQ4TDc=";
+ url = "https://download.jetbrains.com/python/pycharm-2026.1.4-aarch64.dmg";
+ hash = "sha256-qxSgp8r4S0KXjCCTIoAiEZFCn3uBE/0pWLLA6td0Fq0=";
};
};
# update-script-end: urls
@@ -40,8 +36,8 @@ in
product = "PyCharm";
# update-script-start: version
- version = "2026.1.2";
- buildNumber = "261.24374.152";
+ version = "2026.1.4";
+ buildNumber = "261.26222.68";
# update-script-end: version
src = fetchurl (urls.${system} or (throw "Unsupported system: ${system}"));
diff --git a/pkgs/applications/editors/jetbrains/ides/rider.nix b/pkgs/applications/editors/jetbrains/ides/rider.nix
index df8d35ea2f20..d787cbecf590 100644
--- a/pkgs/applications/editors/jetbrains/ides/rider.nix
+++ b/pkgs/applications/editors/jetbrains/ides/rider.nix
@@ -24,20 +24,16 @@ let
# update-script-start: urls
urls = {
x86_64-linux = {
- url = "https://download.jetbrains.com/rider/JetBrains.Rider-2026.1.2.tar.gz";
- hash = "sha256-OmysaGXGMxxAAa2qrHvX8yXIwJLU7tKG8/EBGhr55EA=";
+ url = "https://download.jetbrains.com/rider/JetBrains.Rider-2026.1.4.tar.gz";
+ hash = "sha256-K+X2M4idv+oDqC/dkbzMTX3W3zx0b0e8ZTsxkP7rAfI=";
};
aarch64-linux = {
- url = "https://download.jetbrains.com/rider/JetBrains.Rider-2026.1.2-aarch64.tar.gz";
- hash = "sha256-xcwd4OgobMXFQ2W+SN6O5I3mud4kedVQ/0rZBWbXIGY=";
- };
- x86_64-darwin = {
- url = "https://download.jetbrains.com/rider/JetBrains.Rider-2026.1.2.dmg";
- hash = "sha256-uoOP+EYB11M99MlAFF7efZSKmCk0fwjCImFiasUQPUw=";
+ url = "https://download.jetbrains.com/rider/JetBrains.Rider-2026.1.4-aarch64.tar.gz";
+ hash = "sha256-GXmyBrqxUpwK4djjwllvK+pnfktDrDHpLJKoe4D2xFo=";
};
aarch64-darwin = {
- url = "https://download.jetbrains.com/rider/JetBrains.Rider-2026.1.2-aarch64.dmg";
- hash = "sha256-Mo6gxWatX6wlL3s8Li19F58cnKZtOtFUfNyGPrC6CtA=";
+ url = "https://download.jetbrains.com/rider/JetBrains.Rider-2026.1.4-aarch64.dmg";
+ hash = "sha256-cfwT22BN1jzKZzrZHMQqYFJPGuRwta/sqoOJOp+PfBE=";
};
};
# update-script-end: urls
@@ -51,8 +47,8 @@ in
product = "Rider";
# update-script-start: version
- version = "2026.1.2";
- buildNumber = "261.24374.190";
+ version = "2026.1.4";
+ buildNumber = "261.26222.60";
# update-script-end: version
src = fetchurl (urls.${system} or (throw "Unsupported system: ${system}"));
diff --git a/pkgs/applications/editors/jetbrains/ides/ruby-mine.nix b/pkgs/applications/editors/jetbrains/ides/ruby-mine.nix
index 807fe17c4e06..b99a31ccb041 100644
--- a/pkgs/applications/editors/jetbrains/ides/ruby-mine.nix
+++ b/pkgs/applications/editors/jetbrains/ides/ruby-mine.nix
@@ -12,20 +12,16 @@ let
# update-script-start: urls
urls = {
x86_64-linux = {
- url = "https://download.jetbrains.com/ruby/RubyMine-2026.1.3.tar.gz";
- hash = "sha256-0KF/IEVRT8kgHpULEmqMy9gOf06IIDA4vEV3RujjQoE=";
+ url = "https://download.jetbrains.com/ruby/RubyMine-2026.1.4.tar.gz";
+ hash = "sha256-0EhtU4XKWI9i7ij+m5uvxHSYnbQaYJy8Sa6S1OW4CFU=";
};
aarch64-linux = {
- url = "https://download.jetbrains.com/ruby/RubyMine-2026.1.3-aarch64.tar.gz";
- hash = "sha256-kiuRp9JhdS0aUFPX1brI1T9ik/iWhglIckHvv4bdPWk=";
- };
- x86_64-darwin = {
- url = "https://download.jetbrains.com/ruby/RubyMine-2026.1.3.dmg";
- hash = "sha256-UjpwMCXhI+bMOvyyEbRBoNW3GGCDpi7aF6hUxffW/h0=";
+ url = "https://download.jetbrains.com/ruby/RubyMine-2026.1.4-aarch64.tar.gz";
+ hash = "sha256-oSu19pkGVWt31vWBdAffSZsu4QzsUznVbUSwDy98nug=";
};
aarch64-darwin = {
- url = "https://download.jetbrains.com/ruby/RubyMine-2026.1.3-aarch64.dmg";
- hash = "sha256-lqa3L+rBiEH/hPmFcevWBumvvyBBzoUR3ttvA8s0uT0=";
+ url = "https://download.jetbrains.com/ruby/RubyMine-2026.1.4-aarch64.dmg";
+ hash = "sha256-4wEnwcPRtwp0wxePUMiLow6sMxirwndRMdmJL8LBh9k=";
};
};
# update-script-end: urls
@@ -39,8 +35,8 @@ mkJetBrainsProduct {
product = "RubyMine";
# update-script-start: version
- version = "2026.1.3";
- buildNumber = "261.25134.97";
+ version = "2026.1.4";
+ buildNumber = "261.26222.67";
# update-script-end: version
src = fetchurl (urls.${system} or (throw "Unsupported system: ${system}"));
diff --git a/pkgs/applications/editors/jetbrains/ides/rust-rover.nix b/pkgs/applications/editors/jetbrains/ides/rust-rover.nix
index 9f73dc336a5d..6e4312187c31 100644
--- a/pkgs/applications/editors/jetbrains/ides/rust-rover.nix
+++ b/pkgs/applications/editors/jetbrains/ides/rust-rover.nix
@@ -18,20 +18,16 @@ let
# update-script-start: urls
urls = {
x86_64-linux = {
- url = "https://download.jetbrains.com/rustrover/RustRover-2026.1.2.tar.gz";
- hash = "sha256-INIz7nGar/oHh+CHfz4jm5t9/ARPcMfpnOl99Z3kg3I=";
+ url = "https://download.jetbrains.com/rustrover/RustRover-2026.1.4.tar.gz";
+ hash = "sha256-8x/AP6uKSVJavwjA9tYT1IM1xVspOZZzwmcwpGloIcw=";
};
aarch64-linux = {
- url = "https://download.jetbrains.com/rustrover/RustRover-2026.1.2-aarch64.tar.gz";
- hash = "sha256-PmCDYM8nqySQm6cpUJQ9PyzSkKOR6V3LuXnYpE0i7fU=";
- };
- x86_64-darwin = {
- url = "https://download.jetbrains.com/rustrover/RustRover-2026.1.2.dmg";
- hash = "sha256-HI2qt6wTddANqdRuKQ4X7mXQyBA4dJYz9ewfI2iAYfw=";
+ url = "https://download.jetbrains.com/rustrover/RustRover-2026.1.4-aarch64.tar.gz";
+ hash = "sha256-KpF3jCnLKCEeEXkBdB8ZsPPqP9FOVRTwRV/FQLKyh1Q=";
};
aarch64-darwin = {
- url = "https://download.jetbrains.com/rustrover/RustRover-2026.1.2-aarch64.dmg";
- hash = "sha256-JMg/vs3aVeHmr6tiZZTggRGpH9O6lKlyeP8Ot4mm24w=";
+ url = "https://download.jetbrains.com/rustrover/RustRover-2026.1.4-aarch64.dmg";
+ hash = "sha256-Hly4NBv9mg/RMmxCM6m9w5eS/CQ7ycxp7V2VQZwyGQE=";
};
};
# update-script-end: urls
@@ -45,8 +41,8 @@ in
product = "RustRover";
# update-script-start: version
- version = "2026.1.2";
- buildNumber = "261.24374.182";
+ version = "2026.1.4";
+ buildNumber = "261.26222.73";
# update-script-end: version
src = fetchurl (urls.${system} or (throw "Unsupported system: ${system}"));
diff --git a/pkgs/applications/editors/jetbrains/ides/webstorm.nix b/pkgs/applications/editors/jetbrains/ides/webstorm.nix
index 637302db7639..6e28014f825b 100644
--- a/pkgs/applications/editors/jetbrains/ides/webstorm.nix
+++ b/pkgs/applications/editors/jetbrains/ides/webstorm.nix
@@ -12,20 +12,16 @@ let
# update-script-start: urls
urls = {
x86_64-linux = {
- url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.3.tar.gz";
- hash = "sha256-lryIoVxoytyDyfgjnobQ3e94wIIohmIKL88fwf2I49w=";
+ url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.4.tar.gz";
+ hash = "sha256-BPuMTwZ3Xkk4SBRCdgZ8vCoEYjhTa3d8CFOqrGlcGg0=";
};
aarch64-linux = {
- url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.3-aarch64.tar.gz";
- hash = "sha256-oZQaxpVV0O4WlDE6Ia+KzHIF0SfWQBubBFIopSRMbvE=";
- };
- x86_64-darwin = {
- url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.3.dmg";
- hash = "sha256-KUcQRWYUD/+4HHWnkGuqoltqL2an0WQkUEfUcttwjCI=";
+ url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.4-aarch64.tar.gz";
+ hash = "sha256-f9KenMq1gtldzpBraSBwOb/186WQwh1ps5Ypj5JoOU0=";
};
aarch64-darwin = {
- url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.3-aarch64.dmg";
- hash = "sha256-1N1RtN1QLvuJ1QL8jbN5TdbOHAHSN84W9XEK2PEPijI=";
+ url = "https://download.jetbrains.com/webstorm/WebStorm-2026.1.4-aarch64.dmg";
+ hash = "sha256-ZYen6Ew0GYbBAmuGCDACPBsygxZ6sT787o6gqF9DJzw=";
};
};
# update-script-end: urls
@@ -39,8 +35,8 @@ mkJetBrainsProduct {
product = "WebStorm";
# update-script-start: version
- version = "2026.1.3";
- buildNumber = "261.25134.101";
+ version = "2026.1.4";
+ buildNumber = "261.26222.58";
# update-script-end: version
src = fetchurl (urls.${system} or (throw "Unsupported system: ${system}"));
diff --git a/pkgs/applications/editors/jetbrains/readme.md b/pkgs/applications/editors/jetbrains/readme.md
index 0ed0a67d4fd5..c890021090e9 100644
--- a/pkgs/applications/editors/jetbrains/readme.md
+++ b/pkgs/applications/editors/jetbrains/readme.md
@@ -78,7 +78,5 @@ Any comments or other manual changes between these markers will be removed when
- on `aarch64-linux`:
- from source build
- see if build (binary or source) works without expat
- - on `x86_64-darwin`:
- - from source build
- on `aarch64-darwin`:
- from source build
diff --git a/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/config.py b/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/config.py
index 0449427e945f..d2c202c13fcf 100644
--- a/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/config.py
+++ b/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/config.py
@@ -3,7 +3,7 @@ import os
import dataclasses
from pathlib import Path
-SUPPORTED_SYSTEMS = ["x86_64-linux", "aarch64-linux", "x86_64-darwin", "aarch64-darwin"]
+SUPPORTED_SYSTEMS = ["x86_64-linux", "aarch64-linux", "aarch64-darwin"]
def find_nixpkgs(current_path: Path) -> Path:
diff --git a/pkgs/applications/editors/jetbrains/updater/updateInfo.json b/pkgs/applications/editors/jetbrains/updater/updateInfo.json
index a64e1af94fcd..41f9f5b8ddd1 100644
--- a/pkgs/applications/editors/jetbrains/updater/updateInfo.json
+++ b/pkgs/applications/editors/jetbrains/updater/updateInfo.json
@@ -4,7 +4,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/cpp/CLion-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/cpp/CLion-{version}-aarch64.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/cpp/CLion-{version}.dmg",
"aarch64-darwin": "https://download.jetbrains.com/cpp/CLion-{version}-aarch64.dmg"
}
},
@@ -13,7 +12,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/datagrip/datagrip-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/datagrip/datagrip-{version}-aarch64.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/datagrip/datagrip-{version}.dmg",
"aarch64-darwin": "https://download.jetbrains.com/datagrip/datagrip-{version}-aarch64.dmg"
}
},
@@ -22,7 +20,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/python/dataspell-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/python/dataspell-{version}-aarch64.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/python/dataspell-{version}.dmg",
"aarch64-darwin": "https://download.jetbrains.com/python/dataspell-{version}-aarch64.dmg"
}
},
@@ -31,7 +28,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}-aarch64.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}.dmg",
"aarch64-darwin": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}-aarch64.dmg"
}
},
@@ -40,7 +36,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/go/goland-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/go/goland-{version}-aarch64.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/go/goland-{version}.dmg",
"aarch64-darwin": "https://download.jetbrains.com/go/goland-{version}-aarch64.dmg"
}
},
@@ -49,7 +44,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/idea/ideaIU-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/idea/ideaIU-{version}-aarch64.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/idea/ideaIU-{version}.dmg",
"aarch64-darwin": "https://download.jetbrains.com/idea/ideaIU-{version}-aarch64.dmg"
}
},
@@ -62,7 +56,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/mps/{versionMajorMinor}/MPS-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/mps/{versionMajorMinor}/MPS-{version}.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/mps/{versionMajorMinor}/MPS-{version}-macos.dmg",
"aarch64-darwin": "https://download.jetbrains.com/mps/{versionMajorMinor}/MPS-{version}-macos-aarch64.dmg"
}
},
@@ -71,7 +64,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/webide/PhpStorm-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/webide/PhpStorm-{version}-aarch64.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/webide/PhpStorm-{version}.dmg",
"aarch64-darwin": "https://download.jetbrains.com/webide/PhpStorm-{version}-aarch64.dmg"
}
},
@@ -80,7 +72,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/python/pycharm-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/python/pycharm-{version}-aarch64.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/python/pycharm-{version}.dmg",
"aarch64-darwin": "https://download.jetbrains.com/python/pycharm-{version}-aarch64.dmg"
}
},
@@ -93,7 +84,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}-aarch64.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}.dmg",
"aarch64-darwin": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}-aarch64.dmg"
}
},
@@ -102,7 +92,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/ruby/RubyMine-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/ruby/RubyMine-{version}-aarch64.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/ruby/RubyMine-{version}.dmg",
"aarch64-darwin": "https://download.jetbrains.com/ruby/RubyMine-{version}-aarch64.dmg"
}
},
@@ -111,7 +100,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/rustrover/RustRover-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/rustrover/RustRover-{version}-aarch64.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/rustrover/RustRover-{version}.dmg",
"aarch64-darwin": "https://download.jetbrains.com/rustrover/RustRover-{version}-aarch64.dmg"
}
},
@@ -120,7 +108,6 @@
"urls": {
"x86_64-linux": "https://download.jetbrains.com/webstorm/WebStorm-{version}.tar.gz",
"aarch64-linux": "https://download.jetbrains.com/webstorm/WebStorm-{version}-aarch64.tar.gz",
- "x86_64-darwin": "https://download.jetbrains.com/webstorm/WebStorm-{version}.dmg",
"aarch64-darwin": "https://download.jetbrains.com/webstorm/WebStorm-{version}-aarch64.dmg"
}
}
diff --git a/pkgs/applications/editors/jupyter-kernels/clojupyter/default.nix b/pkgs/applications/editors/jupyter-kernels/clojupyter/default.nix
index ee081737e355..af56ba9147eb 100644
--- a/pkgs/applications/editors/jupyter-kernels/clojupyter/default.nix
+++ b/pkgs/applications/editors/jupyter-kernels/clojupyter/default.nix
@@ -13,7 +13,7 @@
# nix run --impure --expr 'with import {}; jupyter-console.withSingleKernel clojupyter.definition'
# Jupyter notebook:
-# nix run --impure --expr 'with import {}; jupyter.override { definitions.clojure = clojupyter.definition; }'
+# nix shell --impure --expr 'with import {}; [ (jupyter.override { definitions.clojure = clojupyter.definition; }) ]' -c jupyter-notebook
let
cljdeps = import ./deps.nix { inherit pkgs; };
diff --git a/pkgs/applications/editors/jupyter-kernels/octave/default.nix b/pkgs/applications/editors/jupyter-kernels/octave/default.nix
index 74ea3d9b60f5..f4b9202b8109 100644
--- a/pkgs/applications/editors/jupyter-kernels/octave/default.nix
+++ b/pkgs/applications/editors/jupyter-kernels/octave/default.nix
@@ -12,7 +12,7 @@
# nix run --impure --expr 'with import {}; jupyter-console.withSingleKernel octave-kernel.definition'
# Jupyter notebook:
-# nix run --impure --expr 'with import {}; jupyter.override { definitions.octave = octave-kernel.definition; }'
+# nix shell --impure --expr 'with import {}; [ (jupyter.override { definitions.octave = octave-kernel.definition; }) ]' -c jupyter-notebook
let
kernel = callPackage ./kernel.nix {
diff --git a/pkgs/applications/editors/jupyter-kernels/r-ark/default.nix b/pkgs/applications/editors/jupyter-kernels/r-ark/default.nix
new file mode 100644
index 000000000000..2c7a6be07046
--- /dev/null
+++ b/pkgs/applications/editors/jupyter-kernels/r-ark/default.nix
@@ -0,0 +1,31 @@
+{ ark }:
+
+# Jupyter notebook:
+# nix shell --impure --expr 'with import ./. {}; [ (jupyter.override { definitions.r = r-ark-kernel.definition; }) ]' -c jupyter-notebook
+
+{
+ definition = {
+ displayName = "Ark R Kernel";
+ argv = [
+ "${ark}/bin/ark"
+ "--connection_file"
+ "{connection_file}"
+ "--session-mode"
+ "notebook"
+ ];
+ language = "R";
+ # Ark logs at INFO to stderr by default, which includes Jupyter messages.
+ # The notebook forwards this to the cell output, so quiet it to warnings.
+ #
+ # The `ark::console::console_comm=error` directive additionally silences a
+ # per-cell "UI comm is absent during dispatch" warning: after every execute,
+ # ark unconditionally tries to push an environment-pane update over the
+ # Positron-only `positron.ui` comm, which a plain Jupyter frontend never
+ # opens.
+ env = {
+ RUST_LOG = "ark=warn,ark::console::console_comm=error";
+ };
+ logo32 = null;
+ logo64 = null;
+ };
+}
diff --git a/pkgs/applications/editors/jupyter-kernels/wolfram/default.nix b/pkgs/applications/editors/jupyter-kernels/wolfram/default.nix
index 92ffdcb38e8a..89efbb9d041e 100644
--- a/pkgs/applications/editors/jupyter-kernels/wolfram/default.nix
+++ b/pkgs/applications/editors/jupyter-kernels/wolfram/default.nix
@@ -7,7 +7,7 @@
# nix run --impure --expr 'with import {}; jupyter-console.withSingleKernel wolfram-for-jupyter-kernel.definition'
# Jupyter notebook:
-# nix run --impure --expr 'with import {}; jupyter.override { definitions.wolfram = wolfram-for-jupyter-kernel.definition; }'
+# nix shell --impure --expr 'with import {}; [ (jupyter.override { definitions.wolfram = wolfram-for-jupyter-kernel.definition; }) ]' -c jupyter-notebook
let
kernel = callPackage ./kernel.nix { };
diff --git a/pkgs/applications/editors/jupyter-kernels/xeus-cling/0001-Fix-bug-in-extract_filename.patch b/pkgs/applications/editors/jupyter-kernels/xeus-cling/0001-Fix-bug-in-extract_filename.patch
deleted file mode 100644
index dac0825b01a1..000000000000
--- a/pkgs/applications/editors/jupyter-kernels/xeus-cling/0001-Fix-bug-in-extract_filename.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 8bfa594bc37630956f80496106bb1d6070035570 Mon Sep 17 00:00:00 2001
-From: thomasjm
-Date: Wed, 2 Aug 2023 18:26:58 -0700
-Subject: [PATCH 1/3] Fix bug in extract_filename
-
----
- src/main.cpp | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/src/main.cpp b/src/main.cpp
-index 2ee19be..57294b4 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -61,19 +61,19 @@ bool should_print_version(int argc, char* argv[])
- return false;
- }
-
--std::string extract_filename(int argc, char* argv[])
-+std::string extract_filename(int *argc, char* argv[])
- {
- std::string res = "";
-- for (int i = 0; i < argc; ++i)
-+ for (int i = 0; i < *argc; ++i)
- {
-- if ((std::string(argv[i]) == "-f") && (i + 1 < argc))
-+ if ((std::string(argv[i]) == "-f") && (i + 1 < *argc))
- {
- res = argv[i + 1];
-- for (int j = i; j < argc - 2; ++j)
-+ for (int j = i; j < *argc - 2; ++j)
- {
- argv[j] = argv[j + 2];
- }
-- argc -= 2;
-+ *argc -= 2;
- break;
- }
- }
-@@ -128,7 +128,7 @@ int main(int argc, char* argv[])
- #endif
- signal(SIGINT, stop_handler);
-
-- std::string file_name = extract_filename(argc, argv);
-+ std::string file_name = extract_filename(&argc, argv);
-
- interpreter_ptr interpreter = build_interpreter(argc, argv);
-
---
-2.40.1
-
diff --git a/pkgs/applications/editors/jupyter-kernels/xeus-cling/0002-Don-t-pass-extra-includes-configure-this-with-flags.patch b/pkgs/applications/editors/jupyter-kernels/xeus-cling/0002-Don-t-pass-extra-includes-configure-this-with-flags.patch
deleted file mode 100644
index c07e57dfe85d..000000000000
--- a/pkgs/applications/editors/jupyter-kernels/xeus-cling/0002-Don-t-pass-extra-includes-configure-this-with-flags.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 9e6a14bb20567071883563dafb5dfaf512df6243 Mon Sep 17 00:00:00 2001
-From: thomasjm
-Date: Wed, 2 Aug 2023 18:27:16 -0700
-Subject: [PATCH 2/3] Don't pass extra includes; configure this with flags
-
----
- src/main.cpp | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/src/main.cpp b/src/main.cpp
-index 57294b4..0041a55 100644
---- a/src/main.cpp
-+++ b/src/main.cpp
-@@ -84,7 +84,7 @@ using interpreter_ptr = std::unique_ptr;
-
- interpreter_ptr build_interpreter(int argc, char** argv)
- {
-- int interpreter_argc = argc + 1;
-+ int interpreter_argc = argc;
- const char** interpreter_argv = new const char*[interpreter_argc];
- interpreter_argv[0] = "xeus-cling";
- // Copy all arguments in the new array excepting the process name.
-@@ -92,8 +92,6 @@ interpreter_ptr build_interpreter(int argc, char** argv)
- {
- interpreter_argv[i] = argv[i];
- }
-- std::string include_dir = std::string(LLVM_DIR) + std::string("/include");
-- interpreter_argv[interpreter_argc - 1] = include_dir.c_str();
-
- interpreter_ptr interp_ptr = interpreter_ptr(new xcpp::interpreter(interpreter_argc, interpreter_argv));
- delete[] interpreter_argv;
---
-2.40.1
-
diff --git a/pkgs/applications/editors/jupyter-kernels/xeus-cling/0003-Remove-unsupported-src-root-flag.patch b/pkgs/applications/editors/jupyter-kernels/xeus-cling/0003-Remove-unsupported-src-root-flag.patch
deleted file mode 100644
index 8a44919e47d5..000000000000
--- a/pkgs/applications/editors/jupyter-kernels/xeus-cling/0003-Remove-unsupported-src-root-flag.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 43718f5..d0d8670 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -63,8 +63,7 @@ if(LLVM_CONFIG)
- "--bindir"
- "--libdir"
- "--includedir"
-- "--prefix"
-- "--src-root")
-+ "--prefix")
- execute_process(COMMAND ${CONFIG_COMMAND}
- RESULT_VARIABLE HAD_ERROR
- OUTPUT_VARIABLE CONFIG_OUTPUT)
-diff --git a/src/xmagics/executable.cpp b/src/xmagics/executable.cpp
-index 391c8c9..aba5e03 100644
---- a/src/xmagics/executable.cpp
-+++ b/src/xmagics/executable.cpp
-@@ -12,6 +12,7 @@
- #include
- #include
- #include
-+#include
- #include
- #include
-
-@@ -25,7 +26,7 @@
- #include "clang/AST/ASTContext.h"
- #include "clang/AST/DeclGroup.h"
- #include "clang/AST/RecursiveASTVisitor.h"
--#include "clang/Basic/DebugInfoOptions.h"
-+#include "llvm/Frontend/Debug/Options.h"
- #include "clang/Basic/Sanitizers.h"
- #include "clang/Basic/TargetInfo.h"
- #include "clang/CodeGen/BackendUtil.h"
-@@ -115,7 +116,7 @@ namespace xcpp
- // Filter out functions added by Cling.
- if (auto Identifier = D->getIdentifier())
- {
-- if (Identifier->getName().startswith("__cling"))
-+ if (Identifier->getName().starts_with("__cling"))
- {
- return true;
- }
-@@ -153,12 +154,13 @@ namespace xcpp
- if (EnableDebugInfo)
- {
- CodeGenOpts.setDebugInfo(
-- clang::codegenoptions::DebugInfoKind::FullDebugInfo);
-+ llvm::codegenoptions::DebugInfoKind::FullDebugInfo);
- }
-
- std::unique_ptr CG(clang::CreateLLVMCodeGen(
-- CI->getDiagnostics(), "object", HeaderSearchOpts,
-- CI->getPreprocessorOpts(), CodeGenOpts, *Context));
-+ CI->getDiagnostics(), "object",
-+ llvm::IntrusiveRefCntPtr(&CI->getVirtualFileSystem()),
-+ HeaderSearchOpts, CI->getPreprocessorOpts(), CodeGenOpts, *Context));
- CG->Initialize(AST);
-
- FindTopLevelDecls Visitor(CG.get());
-@@ -186,7 +188,9 @@ namespace xcpp
- EmitBackendOutput(CI->getDiagnostics(), HeaderSearchOpts,
- CodeGenOpts, CI->getTargetOpts(),
- CI->getLangOpts(), DataLayout, CG->GetModule(),
-- clang::Backend_EmitObj, std::move(OS));
-+ clang::Backend_EmitObj,
-+ llvm::IntrusiveRefCntPtr(&CI->getVirtualFileSystem()),
-+ std::move(OS));
- return true;
- }
-
-@@ -222,10 +226,10 @@ namespace xcpp
-
- llvm::StringRef OutputFileStr(OutputFile);
- llvm::StringRef ErrorFileStr(ErrorFile);
-- llvm::SmallVector, 16> Redirects = {llvm::NoneType::None, OutputFileStr, ErrorFileStr};
-+ llvm::SmallVector, 16> Redirects = {std::nullopt, OutputFileStr, ErrorFileStr};
-
- // Finally run the linker.
-- int ret = llvm::sys::ExecuteAndWait(Compiler, Args, llvm::NoneType::None,
-+ int ret = llvm::sys::ExecuteAndWait(Compiler, Args, std::nullopt,
- Redirects);
-
- // Read back output and error streams.
diff --git a/pkgs/applications/editors/jupyter-kernels/xeus-cling/default.nix b/pkgs/applications/editors/jupyter-kernels/xeus-cling/default.nix
deleted file mode 100644
index 9588900f6dc5..000000000000
--- a/pkgs/applications/editors/jupyter-kernels/xeus-cling/default.nix
+++ /dev/null
@@ -1,94 +0,0 @@
-{
- lib,
- callPackage,
- cling,
- fetchurl,
- jq,
- makeWrapper,
- python3,
- stdenv,
-}:
-
-# Jupyter console:
-# nix run --impure --expr 'with import {}; jupyter-console.withSingleKernel cpp17-kernel'
-
-# Jupyter notebook:
-# nix run --impure --expr 'with import {}; jupyter.override { definitions = { cpp17 = cpp17-kernel; }; }'
-
-let
- xeus-cling-unwrapped = callPackage ./xeus-cling.nix { };
-
- xeus-cling = xeus-cling-unwrapped.overrideAttrs (oldAttrs: {
- nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ makeWrapper ];
-
- # xcpp needs a collection of flags to start up properly, so wrap it by default.
- # We'll provide the unwrapped version as a passthru
- flags = cling.flags ++ [
- "-resource-dir"
- "${cling.unwrapped}"
- "-L"
- "${cling.unwrapped}/lib"
- "-l"
- "${cling.unwrapped}/lib/cling.so"
- ];
-
- fixupPhase = ''
- runHook preFixup
-
- wrapProgram $out/bin/xcpp --add-flags "$flags"
-
- runHook postFixup
- '';
-
- doInstallCheck = true;
- installCheckPhase = ''
- runHook preInstallCheck
-
- # Smoke check: run a test notebook using Papermill by creating a simple kernelspec
- mkdir -p kernels/cpp17
- export JUPYTER_PATH="$(pwd)"
- cat << EOF > kernels/cpp17/kernel.json
- {
- "argv": ["$out/bin/xcpp", "-std=c++17", "-f", "{connection_file}"],
- "language": "cpp17"
- }
- EOF
-
- ${python3.pkgs.papermill}/bin/papermill ${./test.ipynb} out.ipynb
- result="$(cat out.ipynb | ${jq}/bin/jq -r '.cells[0].outputs[0].text[0]')"
- if [[ "$result" != "Hello world." ]]; then
- echo "Kernel test gave '$result'. Expected: 'Hello world.'"
- exit 1
- fi
-
- runHook postInstallCheck
- '';
-
- passthru = (oldAttrs.passthru or { }) // {
- unwrapped = xeus-cling-unwrapped;
- };
- });
-
- mkKernelSpec = std: {
- displayName = builtins.replaceStrings [ "c++" ] [ "C++ " ] std;
- argv = [
- "${xeus-cling}/bin/xcpp"
- "-std=${std}"
- "-f"
- "{connection_file}"
- ];
- language = "cpp";
- logo32 = "${xeus-cling-unwrapped}/share/jupyter/kernels/xcpp17/logo-32x32.png";
- logo64 = "${xeus-cling-unwrapped}/share/jupyter/kernels/xcpp17/logo-64x64.png";
- };
-
-in
-
-{
- cpp11-kernel = mkKernelSpec "c++11";
- cpp14-kernel = mkKernelSpec "c++14";
- cpp17-kernel = mkKernelSpec "c++17";
- cpp2a-kernel = mkKernelSpec "c++2a";
-
- inherit xeus-cling;
-}
diff --git a/pkgs/applications/editors/jupyter-kernels/xeus-cling/test.ipynb b/pkgs/applications/editors/jupyter-kernels/xeus-cling/test.ipynb
deleted file mode 100644
index 27e5932b8c8f..000000000000
--- a/pkgs/applications/editors/jupyter-kernels/xeus-cling/test.ipynb
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "id": "574ed398-7bfe-4a34-a7dd-9fa85535aed2",
- "metadata": {},
- "outputs": [],
- "source": [
- "#include \n",
- "std::cout << \"Hello world.\";"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "C++ 17",
- "language": "cpp",
- "name": "cpp17"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/pkgs/applications/editors/jupyter-kernels/xeus-cling/xeus-cling.nix b/pkgs/applications/editors/jupyter-kernels/xeus-cling/xeus-cling.nix
deleted file mode 100644
index 50ee8bbd685c..000000000000
--- a/pkgs/applications/editors/jupyter-kernels/xeus-cling/xeus-cling.nix
+++ /dev/null
@@ -1,112 +0,0 @@
-{
- lib,
- clangStdenv,
- cmake,
- fetchFromGitHub,
- llvmPackages_18,
- # Libraries
- argparse,
- cling,
- cppzmq,
- libuuid,
- ncurses,
- openssl,
- pugixml,
- xeus,
- xeus-zmq,
- xtl,
- zeromq,
- zlib,
- # Settings
- debug ? false,
-}:
-
-let
- # Nixpkgs moved to argparse 3.x, but we need ~2.9
- argparse_2_9 = argparse.overrideAttrs (oldAttrs: {
- version = "2.9";
-
- src = fetchFromGitHub {
- owner = "p-ranav";
- repo = "argparse";
- rev = "v2.9";
- sha256 = "sha256-vbf4kePi5gfg9ub4aP1cCK1jtiA65bUS9+5Ghgvxt/E=";
- };
- });
-
- # Nixpkgs moved to xeus 5.2.0, but we need 3.2.0
- # https://github.com/jupyter-xeus/xeus-cling/issues/523
- xeus_3_2_0 = xeus.overrideAttrs (oldAttrs: {
- version = "3.2.0";
-
- src = fetchFromGitHub {
- owner = "jupyter-xeus";
- repo = "xeus";
- tag = "3.2.0";
- sha256 = "sha256-D/dJ0SHxTHJw63gHD6FRZS7O2TVZ0voIv2mQASEjLA8=";
- };
-
- buildInputs = oldAttrs.buildInputs ++ lib.singleton xtl;
- });
-
-in
-
-clangStdenv.mkDerivation (finalAttrs: {
- pname = "xeus-cling";
- version = "0.15.3";
-
- src = fetchFromGitHub {
- owner = "QuantStack";
- repo = "xeus-cling";
- rev = "${finalAttrs.version}";
- hash = "sha256-OfZU+z+p3/a36GntusBfwfFu3ssJW4Fu7SV3SMCoo1I=";
- };
-
- patches = [
- ./0001-Fix-bug-in-extract_filename.patch
- ./0002-Don-t-pass-extra-includes-configure-this-with-flags.patch
- ./0003-Remove-unsupported-src-root-flag.patch
- ];
-
- nativeBuildInputs = [ cmake ];
- buildInputs = [
- argparse_2_9
- cling.unwrapped
- cppzmq
- libuuid
- llvmPackages_18.llvm
- ncurses
- openssl
- pugixml
- xeus_3_2_0
- xeus-zmq
- xtl
- zeromq
- zlib
- ];
-
- cmakeBuildType = if debug then "Debug" else "Release";
-
- postPatch = ''
- substituteInPlace src/xmagics/executable.cpp \
- --replace-fail "getDataLayout" "getDataLayoutString"
- substituteInPlace src/xmagics/execution.cpp \
- --replace-fail "simplisticCastAs" "castAs"
- substituteInPlace src/xmime_internal.hpp \
- --replace-fail "code.str()" "code.str().str()"
-
- substituteInPlace CMakeLists.txt \
- --replace-fail "cmake_minimum_required(VERSION 3.4.3)" "cmake_minimum_required(VERSION 3.10)"
- '';
-
- dontStrip = debug;
-
- meta = {
- description = "Jupyter kernel for the C++ programming language";
- mainProgram = "xcpp";
- homepage = "https://github.com/jupyter-xeus/xeus-cling";
- maintainers = with lib.maintainers; [ thomasjm ];
- platforms = lib.platforms.unix;
- license = lib.licenses.mit;
- };
-})
diff --git a/pkgs/applications/editors/jupyter-kernels/xeus-cpp/default.nix b/pkgs/applications/editors/jupyter-kernels/xeus-cpp/default.nix
new file mode 100644
index 000000000000..c595cf1eee6a
--- /dev/null
+++ b/pkgs/applications/editors/jupyter-kernels/xeus-cpp/default.nix
@@ -0,0 +1,37 @@
+{
+ callPackage,
+}:
+
+# Jupyter console:
+# nix run --impure --expr 'with import {}; jupyter-console.withSingleKernel cpp17-kernel'
+
+# Jupyter notebook:
+# nix shell --impure --expr 'with import {}; [ (jupyter.override { definitions = { cpp17 = cpp17-kernel; }; }) ]' -c jupyter-notebook
+
+let
+ xeus-cpp = callPackage ./xeus-cpp.nix { };
+
+ mkKernelSpec = std: {
+ displayName = builtins.replaceStrings [ "c++" ] [ "C++ " ] std;
+ argv = [
+ "${xeus-cpp}/bin/xcpp"
+ "-std=${std}"
+ "-f"
+ "{connection_file}"
+ ];
+ language = "cpp";
+ logo32 = "${xeus-cpp}/share/jupyter/kernels/xcpp17/logo-32x32.png";
+ logo64 = "${xeus-cpp}/share/jupyter/kernels/xcpp17/logo-64x64.png";
+ };
+
+in
+
+{
+ cpp11-kernel = mkKernelSpec "c++11";
+ cpp14-kernel = mkKernelSpec "c++14";
+ cpp17-kernel = mkKernelSpec "c++17";
+ cpp20-kernel = mkKernelSpec "c++20";
+ cpp23-kernel = mkKernelSpec "c++23";
+
+ inherit xeus-cpp;
+}
diff --git a/pkgs/applications/editors/jupyter-kernels/xeus-cpp/xeus-cpp.nix b/pkgs/applications/editors/jupyter-kernels/xeus-cpp/xeus-cpp.nix
new file mode 100644
index 000000000000..c0e415a4dcfd
--- /dev/null
+++ b/pkgs/applications/editors/jupyter-kernels/xeus-cpp/xeus-cpp.nix
@@ -0,0 +1,183 @@
+{
+ lib,
+ clangStdenv,
+ fetchFromGitHub,
+ cmake,
+ pkg-config,
+
+ cpp-interop,
+ cling,
+
+ # Jupyter / xeus stack
+ xeus,
+ xeus-zmq,
+ nlohmann_json,
+ argparse,
+ pugixml,
+
+ # Runtime libs
+ zeromq,
+ openssl,
+ libuuid,
+ curl,
+ makeWrapper,
+
+ # tests
+ doctest,
+
+ # installCheck
+ python3,
+ jq,
+
+ # "clang-repl" | "cling"
+ backend ? "clang-repl",
+}:
+
+let
+ stdenv = clangStdenv;
+
+ useCling = backend == "cling";
+ cppInterop = cpp-interop.override { inherit backend; };
+
+ # xeus-cpp 0.10.0 needs newer xeus / xeus-zmq than nixpkgs ships by default.
+ xeus_6 = xeus.overrideAttrs (old: {
+ version = "6.0.5";
+ src = fetchFromGitHub {
+ owner = "jupyter-xeus";
+ repo = "xeus";
+ tag = "6.0.5";
+ hash = "sha256-nbjq4dzrukVsZI6X3lWpr9oCZV5IUu/vkqSNKD7o3vo=";
+ };
+ doCheck = false;
+ });
+
+ xeus_zmq_4 = (xeus-zmq.override { xeus = xeus_6; }).overrideAttrs (old: {
+ version = "4.0.0";
+ src = fetchFromGitHub {
+ owner = "jupyter-xeus";
+ repo = "xeus-zmq";
+ tag = "4.0.0";
+ hash = "sha256-Ux8klPh33XWFu9eu+GTk5ZcqIcoP/GM4/J1uaz9xRHI=";
+ };
+ });
+
+ # The interpreter behind CppInterOp must be told where the C/C++ standard
+ # library and Clang builtin headers live: there is no system compiler to detect
+ # at runtime in the Nix sandbox. We pass this set via CppInterOp's runtime
+ # override env var. For the Cling backend cling.flags already carries it; for
+ # clang-repl we reuse the hermetic resource dir and include flags CppInterOp
+ # exposes.
+ resourceDir = if useCling then "${cling.unwrapped}/lib/clang/20" else cppInterop.resourceDir;
+ interpreterArgs = lib.concatStringsSep " " (
+ if useCling then cling.flags else cppInterop.interpreterArgs
+ );
+in
+
+stdenv.mkDerivation (finalAttrs: {
+ pname = "xeus-cpp";
+ version = "0.10.0";
+
+ src = fetchFromGitHub {
+ owner = "compiler-research";
+ repo = "xeus-cpp";
+ tag = finalAttrs.version;
+ hash = "sha256-r6ojIcebWzpP85Djl36EMucnfQQgjGJUakSbMYW+czs=";
+ };
+
+ strictDeps = true;
+ __structuredAttrs = true;
+
+ nativeBuildInputs = [
+ cmake
+ pkg-config
+ makeWrapper
+ ];
+
+ buildInputs = [
+ cppInterop
+ xeus_6
+ xeus_zmq_4
+ nlohmann_json
+ argparse
+ pugixml
+ zeromq
+ openssl
+ libuuid
+ curl
+ ];
+
+ cmakeFlags = [
+ (lib.cmakeBool "XEUS_CPP_BUILD_TESTS" finalAttrs.finalPackage.doCheck)
+ "-DXEUS_CPP_RESOURCE_DIR=${resourceDir}"
+ ];
+
+ # Make the kernel hermetic: hand the interpreter the include/resource flags it
+ # needs, since it cannot probe a system compiler in the sandbox.
+ postInstall = ''
+ wrapProgram $out/bin/xcpp \
+ --set-default CPPINTEROP_EXTRA_INTERPRETER_ARGS "${interpreterArgs}"
+
+ # xeus-cpp builds the kernelspec argv from CMAKE_INSTALL_PREFIX *and* the
+ # (absolute, under Nix) CMAKE_INSTALL_BINDIR, producing a doubled store path
+ # for xcpp. Point each kernel.json back at the wrapped binary.
+ for k in $out/share/jupyter/kernels/*/kernel.json; do
+ substituteInPlace "$k" --replace-fail "$out/$out/bin/xcpp" "$out/bin/xcpp"
+ done
+ '';
+
+ # Run the upstream doctest suite. Like the wrapped kernel, the test binary
+ # drives CppInterOp directly, so it needs the same hermetic interpreter args.
+ doCheck = true;
+ checkInputs = [ doctest ];
+ checkPhase = ''
+ runHook preCheck
+
+ export CPPINTEROP_EXTRA_INTERPRETER_ARGS="${interpreterArgs}"
+ # The test binary is linked with the install RPATH ($out/lib), which does not
+ # exist yet at check time; point it at the freshly built libxeus-cpp instead.
+ export LD_LIBRARY_PATH="$PWD''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
+ cmake --build . --target check-xeus-cpp
+
+ runHook postCheck
+ '';
+
+ # Smoke test: drive the installed, wrapped kernel through Papermill and check
+ # it actually compiles and runs C++.
+ doInstallCheck = true;
+ installCheckPhase = ''
+ runHook preInstallCheck
+
+ export HOME=$(mktemp -d)
+ mkdir -p "$HOME/kernels/xcpp"
+ cat > "$HOME/kernels/xcpp/kernel.json" < "$HOME/test.ipynb" <<'NBEOF'
+ {"cells":[
+ {"cell_type":"code","id":"a","metadata":{},"execution_count":null,"outputs":[],"source":["#include "]},
+ {"cell_type":"code","id":"b","metadata":{},"execution_count":null,"outputs":[],"source":["std::cout << \"Hello world.\" << std::endl;"]}
+ ],"metadata":{"kernelspec":{"name":"xcpp","display_name":"C++","language":"cpp"}},"nbformat":4,"nbformat_minor":5}
+ NBEOF
+
+ ${python3.pkgs.papermill}/bin/papermill "$HOME/test.ipynb" "$HOME/out.ipynb" --kernel xcpp
+ ${jq}/bin/jq -e '[.. | .text? // empty | tostring] | add | contains("Hello world.")' "$HOME/out.ipynb"
+
+ runHook postInstallCheck
+ '';
+
+ passthru = {
+ inherit backend;
+ flags = interpreterArgs;
+ };
+
+ meta = {
+ description = "Jupyter kernel for C++ based on CppInterOp (${backend} backend)";
+ mainProgram = "xcpp";
+ homepage = "https://github.com/compiler-research/xeus-cpp";
+ license = lib.licenses.bsd3;
+ maintainers = with lib.maintainers; [ thomasjm ];
+ platforms = lib.platforms.unix;
+ };
+})
diff --git a/pkgs/applications/editors/kakoune/plugins/overrides.nix b/pkgs/applications/editors/kakoune/plugins/overrides.nix
index 054ad9cebd92..71537c1f51ac 100644
--- a/pkgs/applications/editors/kakoune/plugins/overrides.nix
+++ b/pkgs/applications/editors/kakoune/plugins/overrides.nix
@@ -47,13 +47,13 @@ self: super: {
kak-ansi = stdenv.mkDerivation (finalAttrs: {
pname = "kak-ansi";
- version = "0.2.4";
+ version = "0.3.0";
src = fetchFromGitHub {
owner = "eraserhd";
repo = "kak-ansi";
rev = "v${finalAttrs.version}";
- sha256 = "kFjTYFy0KF5WWEHU4hHFAnD/03/d3ptjqMMbTSaGImE=";
+ sha256 = "sha256-Tp+cKZxDESlpks6l+6J0H/1BvHyfQSqCxeutUcsZrEc=";
};
installPhase = ''
diff --git a/pkgs/applications/editors/neovim/tests/default.nix b/pkgs/applications/editors/neovim/tests/default.nix
index 5bc2730da87b..c17957ffbe3a 100644
--- a/pkgs/applications/editors/neovim/tests/default.nix
+++ b/pkgs/applications/editors/neovim/tests/default.nix
@@ -204,23 +204,23 @@ pkgs.lib.recurseIntoAttrs rec {
${nvim_with_plug}/bin/nvim -V3log.txt -i NONE -c 'color base16-tomorrow-night' +quit! -e
'';
- nvim_with_autoconfigure = pkgs.neovim.overrideAttrs {
- plugins = [
- vimPlugins.unicode-vim
- vimPlugins.fzf-hoogle-vim
- ];
+ nvim_with_autoconfigure = pkgs.neovim.override {
+ configure = {
+ packages.myPlugins.start = [
+ vimPlugins.unicode-vim
+ vimPlugins.fzf-hoogle-vim
+ ];
+ };
autoconfigure = true;
- # legacy wrapper sets it to false
- wrapRc = true;
};
- nvim_with_runtimeDeps = pkgs.neovim.overrideAttrs {
- plugins = [
- pkgs.vimPlugins.hex-nvim
- ];
+ nvim_with_runtimeDeps = pkgs.neovim.override {
+ configure = {
+ packages.myPlugins.start = [
+ pkgs.vimPlugins.hex-nvim
+ ];
+ };
autowrapRuntimeDeps = true;
- # legacy wrapper sets it to false
- wrapRc = true;
};
nvim_with_ftplugin =
diff --git a/pkgs/applications/editors/neovim/to-nvim-treesitter-grammar.sh b/pkgs/applications/editors/neovim/to-nvim-treesitter-grammar.sh
index 24e8428ef483..abe16c805309 100644
--- a/pkgs/applications/editors/neovim/to-nvim-treesitter-grammar.sh
+++ b/pkgs/applications/editors/neovim/to-nvim-treesitter-grammar.sh
@@ -4,7 +4,11 @@ toNvimTreesitterGrammar() {
echo "Executing toNvimTreesitterGrammar"
mkdir -p "$out/parser"
- ln -s "$origGrammar/parser" "$out/parser/$grammarName.so"
+ if [ -e "$origGrammar/parser.wasm" ]; then
+ ln -s "$origGrammar/parser.wasm" "$out/parser/$grammarName.wasm"
+ else
+ ln -s "$origGrammar/parser" "$out/parser/$grammarName.so"
+ fi
if [ "$installQueries" != 1 ]; then
echo "Installing queries is disabled: installQueries=$installQueries"
diff --git a/pkgs/applications/editors/sublime/4/common.nix b/pkgs/applications/editors/sublime/4/common.nix
index be77793c7964..e6422c8f370c 100644
--- a/pkgs/applications/editors/sublime/4/common.nix
+++ b/pkgs/applications/editors/sublime/4/common.nix
@@ -6,6 +6,7 @@
}:
{
+ config,
fetchurl,
stdenv,
lib,
@@ -22,7 +23,6 @@
writeShellScript,
common-updater-scripts,
curl,
- openssl_1_1,
openssl_3_5,
bzip2,
sqlite,
@@ -33,7 +33,6 @@ let
packageAttribute = "sublime4${lib.optionalString dev "-dev"}";
binaries = [
"sublime_text"
- "plugin_host-3.3"
"plugin_host-3.${if lib.versionAtLeast buildVersion "4205" then "14" else "8"}"
crashHandlerBinary
];
@@ -55,7 +54,6 @@ let
libxtst
glib
libglvnd
- openssl_1_1
gtk3
cairo
pango
@@ -88,6 +86,10 @@ let
buildPhase = ''
runHook preBuild
+ # Remove old plugin host because it depends on EOL openssl 1.1
+ rm plugin_host-3.3
+ echo '{"disable_plugin_host_3.3": true}' > Packages/Preferences.sublime-settings
+
for binary in ${builtins.concatStringsSep " " binaries}; do
patchelf \
--interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
@@ -221,11 +223,18 @@ stdenv.mkDerivation (finalAttrs: {
demin-dmitriy
zimbatm
];
+ mainProgram = "subl";
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
license = lib.licenses.unfree;
platforms = [
"aarch64-linux"
"x86_64-linux"
];
+ problems = {
+ removal.message = "We have removed Python 3.3 package support ahead of upstream schedule but if you do not use any old packages, this should just work.";
+ }
+ // lib.optionalAttrs (lib.versionOlder buildVersion "4205") {
+ broken.message = "Packages, including core ones, do not run without plug-in host depending on insecure OpenSSL.";
+ };
};
})
diff --git a/pkgs/applications/editors/sublime/4/packages.nix b/pkgs/applications/editors/sublime/4/packages.nix
index 2b734a8f0c44..331ac8c65542 100644
--- a/pkgs/applications/editors/sublime/4/packages.nix
+++ b/pkgs/applications/editors/sublime/4/packages.nix
@@ -11,9 +11,9 @@ in
} { };
sublime4-dev = common {
- buildVersion = "4205";
+ buildVersion = "4206";
dev = true;
- x64sha256 = "1Tg8m4FNrVOeHK6VSmlua30pW4Bu7Gz+sT0t/w01UyM=";
- aarch64sha256 = "K94UipUVZRh8xJKYW35be0u9L/VHpZ+FYhC26v41b3U=";
+ x64sha256 = "WZ+MfKnOYTTfVbyW2QRstkAOhAxEv4nXsxsQnnAeA6I=";
+ aarch64sha256 = "opMVWTGsPQSb/SpN4Cz9CC8jL42BaqO/da6uC++6t3o=";
} { };
}
diff --git a/pkgs/applications/editors/vim/common.nix b/pkgs/applications/editors/vim/common.nix
index 05ac73b9f13e..f336ecbced79 100644
--- a/pkgs/applications/editors/vim/common.nix
+++ b/pkgs/applications/editors/vim/common.nix
@@ -4,7 +4,7 @@
stdenv,
}:
rec {
- version = "9.2.0389";
+ version = "9.2.0782";
outputs = [
"out"
@@ -15,7 +15,7 @@ rec {
owner = "vim";
repo = "vim";
rev = "v${version}";
- hash = "sha256-shhdJn1bPJ/68a54UZMn1fla7P4tjVUN4DGLbx3ohOg=";
+ hash = "sha256-D4IyDgl1JdmumDzO0uMg2LhoSnFUeqhcMJ6ImC17wzs=";
};
enableParallelBuilding = true;
diff --git a/pkgs/applications/editors/vim/plugins/aliases.nix b/pkgs/applications/editors/vim/plugins/aliases.nix
index 7dc05270b5c0..423895d4e41b 100644
--- a/pkgs/applications/editors/vim/plugins/aliases.nix
+++ b/pkgs/applications/editors/vim/plugins/aliases.nix
@@ -55,7 +55,9 @@ mapAliases (
mind-nvim = throw "'vimPlugins.mind-nvim' has been removed: the upstream repository got deleted"; # Added 2026-05-03
minsnip-nvim = throw "'vimPlugins.minsnip-nvim' has been removed: the upstream repository got deleted"; # Added 2025-08-30
neuron-nvim = throw "'vimPlugins.neuron-nvim' has been removed: archived repository 2023-02-19"; # Added 2025-09-10
+ null-ls-nvim = throw "'vimPlugins.null-ls-nvim' has been removed: upstream deleted repository. Use none-ls-nvim instead."; # Added 2026-06-15
nvim-gps = throw "'vimPlugins.nvim-gps' has been archived since 2022. Use nvim-navic instead."; # Added 2025-12-18
+ nvim-lsp-ts-utils = throw "'vimPlugins.nvim-lsp-ts-utils' has been removed: upstream deleted repository"; # Added 2026-06-15
nvim-ts-rainbow = throw "'vimPlugins.nvim-ts-rainbow' has been deprecated: Use rainbow-delimiters-nvim"; # Added 2023-11-30
nvim-ts-rainbow2 = throw "'vimPlugins.nvim-ts-rainbow2' has been deprecated: Use rainbow-delimiters-nvim"; # Added 2023-11-30
peskcolor-vim = throw "'vimPlugins.peskcolor-vim' has been removed: abandoned by upstream"; # Added 2024-08-23
@@ -69,8 +71,10 @@ mapAliases (
sparkup = throw "'vimPlugins.sparkup' was removed: the upstream repository got deleted"; # Added 2025-08-06
syntax-tree-surfer = throw "'vimPlugins.syntax-tree-surfer' has been archived"; # Added 2025-12-18
todo-nvim = throw "'vimPlugins.todo-nvim' has been removed: abandoned by upstream"; # Added 2023-08-23
+ typescript-nvim = throw "'vimPlugins.typescript-nvim' has been removed: upstream deleted repository"; # Added 2026-06-15
vim-csharp = throw "'vimPlugins.vim-csharp' has been removed: repository deleted"; # Added 2026-05-12
vim-sourcetrail = throw "'vimPlugins.vim-sourcetrail' has been removed: abandoned by upstream"; # Added 2022-08-14
+ vimacs = throw "'vimPlugins.vimacs' has been removed due to lack of maintenance"; # Added 2026-07-07
# keep-sorted end
}
// deprecations
diff --git a/pkgs/applications/editors/vim/plugins/generated.nix b/pkgs/applications/editors/vim/plugins/generated.nix
index 65faa0676f7c..899dacbf34a0 100644
--- a/pkgs/applications/editors/vim/plugins/generated.nix
+++ b/pkgs/applications/editors/vim/plugins/generated.nix
@@ -82,12 +82,12 @@ final: prev: {
CopilotChat-nvim = buildVimPlugin {
pname = "CopilotChat.nvim";
- version = "4.7.4-unstable-2026-06-02";
+ version = "4.7.4-unstable-2026-06-17";
src = fetchFromGitHub {
owner = "CopilotC-Nvim";
repo = "CopilotChat.nvim";
- rev = "2025f92022bef434de0511c5157a19974a9377a4";
- hash = "sha256-YyzJBoOVYefBlpck9O80BdPjQIlH6p5o6Ta2n9aWu4A=";
+ rev = "f0c2a23ab79dc295f5e0eef0d8b587a39020c852";
+ hash = "sha256-jBxtWF4GNSXB+/xUnUWs0RzSXAkQKa5cd3mljTHuarw=";
};
meta.homepage = "https://github.com/CopilotC-Nvim/CopilotChat.nvim/";
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
@@ -446,12 +446,12 @@ final: prev: {
SchemaStore-nvim = buildVimPlugin {
pname = "SchemaStore.nvim";
- version = "0-unstable-2026-06-10";
+ version = "0-unstable-2026-07-20";
src = fetchFromGitHub {
owner = "b0o";
repo = "SchemaStore.nvim";
- rev = "961c2a806abf56d4e100713ec9dc71d2c8d9d022";
- hash = "sha256-p4YkQeJybRAbZ2zwK39rm/0Q5iSJqYlhJde7bXV6J/Y=";
+ rev = "e520902f405da5f5ad392d32babad5b5dd5ffa44";
+ hash = "sha256-zNXm/0W+Hv562zt6NxHnFuO2nBxjX5dlxS7pRB+KXQY=";
};
meta.homepage = "https://github.com/b0o/SchemaStore.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -628,12 +628,12 @@ final: prev: {
YouCompleteMe = buildVimPlugin {
pname = "YouCompleteMe";
- version = "0-unstable-2026-01-30";
+ version = "0-unstable-2026-07-03";
src = fetchFromGitHub {
owner = "ycm-core";
repo = "YouCompleteMe";
- rev = "6a52780a22dfd4ddafbe23c0d2c2a2107ceeb397";
- hash = "sha256-/k9lIx9BVaTNu9Kqrz9Y6d+hTGsDnspmq0rcdJpZo7I=";
+ rev = "d4c91430b70a21ce471c8572400b647d313995b4";
+ hash = "sha256-G/xFHsu2HveQDpFGCQY99Z5KGrIcJaLs7Jq9a1PuYJY=";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/ycm-core/YouCompleteMe/";
@@ -798,12 +798,12 @@ final: prev: {
agitator-nvim = buildVimPlugin {
pname = "agitator.nvim";
- version = "0-unstable-2026-02-26";
+ version = "0-unstable-2026-07-09";
src = fetchFromGitHub {
owner = "emmanueltouzery";
repo = "agitator.nvim";
- rev = "87949ff3610d502d178e25bdbe906942771922b8";
- hash = "sha256-oT9xyB6ymkZnjgLwOoQdavntoCtTDB6Ts4dl+nLrwYQ=";
+ rev = "ceaf20e08b0d37ef6e63f38f7fac3f7d700ffede";
+ hash = "sha256-1b+/6fW9StBfxx3KiZxVjoZtPg5z+RK9cJi8HWiUdPo=";
};
meta.homepage = "https://github.com/emmanueltouzery/agitator.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -868,12 +868,12 @@ final: prev: {
ale = buildVimPlugin {
pname = "ale";
- version = "4.0.0-unstable-2026-06-01";
+ version = "4.0.0-unstable-2026-06-21";
src = fetchFromGitHub {
owner = "dense-analysis";
repo = "ale";
- rev = "178fe113564d31cba304263765aeb21e7ed23a7e";
- hash = "sha256-9O1LLT4l+bxfCcYTLpazhEQsNGaAfueaIlQarbF0GjA=";
+ rev = "d0ea94323207abcdee717d76bb57b38d46055664";
+ hash = "sha256-m8ztWD74kc3Pd5dDDAJcAcC6tH2EHOp4ZHp3tvYEGZw=";
};
meta.homepage = "https://github.com/dense-analysis/ale/";
meta.license = getLicenseFromSpdxId "BSD-2-Clause";
@@ -924,12 +924,12 @@ final: prev: {
amp-nvim = buildVimPlugin {
pname = "amp.nvim";
- version = "0-unstable-2025-12-15";
+ version = "0-unstable-2026-06-12";
src = fetchFromGitHub {
owner = "ampcode";
repo = "amp.nvim";
- rev = "3b9ad5ef0328de1b35cc9bfa723a37db5daf9434";
- hash = "sha256-f/li32jpVigbZANnnbgSArnOH4nusj0DUz7952K+Znw=";
+ rev = "b851d97d8e8782e58343608d8de7d9eb3a88090f";
+ hash = "sha256-SdpKR1hfSyJ25tD7G1u4wYOHRNyeuTKbdMKG80iCUB4=";
};
meta.homepage = "https://github.com/ampcode/amp.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -1050,12 +1050,12 @@ final: prev: {
artio-nvim = buildVimPlugin {
pname = "artio.nvim";
- version = "0-unstable-2026-05-04";
+ version = "0-unstable-2026-07-17";
src = fetchFromGitHub {
owner = "comfysage";
repo = "artio.nvim";
- rev = "0b08d6862afe685fd78963808d022d7c15c89546";
- hash = "sha256-SrYZPFBQVJgm0X/CzyOOTfDwgNBIrjH+jlW6K8aE2Ec=";
+ rev = "19d71f8d9c721872e97aa0e5f094041c96f3feca";
+ hash = "sha256-X1QXSoowhgs+uhO1T9OtaSXhAryzLCzGfHNgCFiO3is=";
};
meta.homepage = "https://github.com/comfysage/artio.nvim/";
meta.license = getLicenseFromSpdxId "EUPL-1.2";
@@ -1092,12 +1092,12 @@ final: prev: {
astrotheme = buildVimPlugin {
pname = "astrotheme";
- version = "4.11.0";
+ version = "4.12.0";
src = fetchFromGitHub {
owner = "AstroNvim";
repo = "astrotheme";
- tag = "v4.11.0";
- hash = "sha256-h84Ay5EPft2ZPCY9iuqvyOXPFrVGZwjUi3OWyQ3x+AQ=";
+ tag = "v4.12.0";
+ hash = "sha256-jDj0rDfGifyC9aTxhN0Ps9OD/s0U2Wvkgfk7mqTFG0Q=";
};
meta.homepage = "https://github.com/AstroNvim/astrotheme/";
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
@@ -1120,12 +1120,12 @@ final: prev: {
async-nvim = buildVimPlugin {
pname = "async.nvim";
- version = "0-unstable-2026-06-10";
+ version = "0-unstable-2026-07-06";
src = fetchFromGitHub {
owner = "lewis6991";
repo = "async.nvim";
- rev = "f72017409d703ecf25972a05c6f89acb31adb952";
- hash = "sha256-E8ZS7m2QejmImzmQ+wrgSUlC2x4tkMHv7xGt+XDqcXQ=";
+ rev = "46adf61a022d5c923f981d527443f406e7d0f63e";
+ hash = "sha256-7VuTWfdh3d3/q2KUyi5d+7GbaEq8NgbQgBt+Wt+/n5U=";
};
meta.homepage = "https://github.com/lewis6991/async.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -1414,12 +1414,12 @@ final: prev: {
autoclose-nvim = buildVimPlugin {
pname = "autoclose.nvim";
- version = "0-unstable-2026-03-22";
+ version = "0-unstable-2026-07-20";
src = fetchFromGitHub {
owner = "m4xshen";
repo = "autoclose.nvim";
- rev = "bafd0368716216fa6a7bb2a43ecd889b44efdb46";
- hash = "sha256-DOKKyaDmfUPRTcXJvqD+0zAr63+93H0auax6Dse0Igo=";
+ rev = "27063904b2238ce7867e430885b6abcfb08357ea";
+ hash = "sha256-BjNP8Facn3Cy/EHYioUB9mXb19sBzBeSCY1xTpPOWG8=";
};
meta.homepage = "https://github.com/m4xshen/autoclose.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -1610,12 +1610,12 @@ final: prev: {
base16-nvim = buildVimPlugin {
pname = "base16-nvim";
- version = "0-unstable-2026-05-03";
+ version = "0-unstable-2026-07-15";
src = fetchFromGitHub {
owner = "RRethy";
repo = "base16-nvim";
- rev = "23e5128eb5f629c29532c24a1e733cbe019f05bb";
- hash = "sha256-n9GrDSLW5+N0LA8QNnG/LubSkC/mLe7ut30N+SfBE7o=";
+ rev = "fd128e380624c34f12a201690944bf657f861361";
+ hash = "sha256-W5tHY4U87eCAiOerNMAeqcbz1JlMZ6YGqSC0TBhI6t4=";
};
meta.homepage = "https://github.com/RRethy/base16-nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -1638,12 +1638,12 @@ final: prev: {
base46 = buildVimPlugin {
pname = "base46";
- version = "0-unstable-2026-01-16";
+ version = "0-unstable-2026-07-19";
src = fetchFromGitHub {
owner = "nvchad";
repo = "base46";
- rev = "884b990dcdbe07520a0892da6ba3e8d202b46337";
- hash = "sha256-AUdBZbGcPDtixHMFms9Y0EyUdAXOzvcA2AbrRdYQ4ig=";
+ rev = "8d059b82367160cd530253afbbcd20dc4b34129f";
+ hash = "sha256-wW6UidkM6avqQVhPEgRtDXgxHsMdD+IM01A5ABebYT4=";
};
meta.homepage = "https://github.com/nvchad/base46/";
meta.license = unfree;
@@ -1736,12 +1736,12 @@ final: prev: {
bitbake = buildVimPlugin {
pname = "bitbake";
- version = "5.0.18";
+ version = "6.0.2";
src = fetchFromGitHub {
owner = "openembedded";
repo = "bitbake";
- tag = "yocto-5.0.18";
- hash = "sha256-Kl+4P3C4Gn/uXUxrIAi+V9pBJqxpI7Z+6vt8gfdCBag=";
+ tag = "yocto-6.0.2";
+ hash = "sha256-Jho1X7udSvh413u8ueRqR8z1Q7E2qcotdkzl9azBu7g=";
};
meta.homepage = "https://github.com/openembedded/bitbake/";
meta.license = unfree;
@@ -1792,12 +1792,12 @@ final: prev: {
blink-calc = buildVimPlugin {
pname = "blink-calc";
- version = "0-unstable-2025-10-06";
+ version = "0-unstable-2026-06-22";
src = fetchFromGitHub {
owner = "joelazar";
repo = "blink-calc";
- rev = "199e8a5fe356d553d33a3511ca28e625dac5c470";
- hash = "sha256-3w+vQf3N6+umBUF+PkCbPXggn53rNekxHgR2y+ICwHw=";
+ rev = "1b75c20cbb21c95bf08694eed605fa0bdbbe5ca2";
+ hash = "sha256-hWPRXBIQ2uaoWNSXFQ1OGcWLbfE9nCmX/Q6Zs5JCjqE=";
};
meta.homepage = "https://github.com/joelazar/blink-calc/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -1946,12 +1946,12 @@ final: prev: {
blink-cmp-tmux = buildVimPlugin {
pname = "blink-cmp-tmux";
- version = "0-unstable-2026-02-11";
+ version = "0-unstable-2026-07-16";
src = fetchFromGitHub {
owner = "mgalliou";
repo = "blink-cmp-tmux";
- rev = "1ef35d8e388475ab8eaeecfc12e196c78bd5de04";
- hash = "sha256-enoPsYF8llGShf+sx6rLYYnLLzrd+jdCdZ4gy9A2lKU=";
+ rev = "112ddbf2e09d9cb4736de70dd01eb9654cf01d70";
+ hash = "sha256-7Wj7bIg7vAOz0OygISORRphsEV6RcsR6m/S2tRyzEpU=";
};
meta.homepage = "https://github.com/mgalliou/blink-cmp-tmux/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -2030,18 +2030,32 @@ final: prev: {
blink-indent = buildVimPlugin {
pname = "blink.indent";
- version = "2.1.2";
+ version = "2.2.0";
src = fetchFromGitHub {
owner = "Saghen";
repo = "blink.indent";
- tag = "v2.1.2";
- hash = "sha256-SS66JZFCX8viYxYaObASlwtrG5h7yHbVvRBVXBNXkng=";
+ tag = "v2.2.0";
+ hash = "sha256-x4nILac79C60FVsMQiWqlU1FjM891W5U9UZWwGAjnk0=";
};
meta.homepage = "https://github.com/Saghen/blink.indent/";
meta.license = getLicenseFromSpdxId "MIT";
meta.hydraPlatforms = [ ];
};
+ blink-lib = buildVimPlugin {
+ pname = "blink.lib";
+ version = "0-unstable-2026-06-19";
+ src = fetchFromGitHub {
+ owner = "saghen";
+ repo = "blink.lib";
+ rev = "5876dd95deeb70aadbe9f1c0b7117a135061cdac";
+ hash = "sha256-FsDcgBiD3fl0EO1advAoQBbA2HY1p8Ja7lwhmpB++Zc=";
+ };
+ meta.homepage = "https://github.com/saghen/blink.lib/";
+ meta.license = getLicenseFromSpdxId "MIT";
+ meta.hydraPlatforms = [ ];
+ };
+
blink-nerdfont-nvim = buildVimPlugin {
pname = "blink-nerdfont.nvim";
version = "0-unstable-2025-12-14";
@@ -2114,12 +2128,12 @@ final: prev: {
boo-colorscheme-nvim = buildVimPlugin {
pname = "boo-colorscheme-nvim";
- version = "0.5.2-unstable-2026-02-10";
+ version = "0.5.2-unstable-2026-07-06";
src = fetchFromGitHub {
owner = "rockerBOO";
repo = "boo-colorscheme-nvim";
- rev = "36a52f900f49fe78bfeb30d2519a8dd356bf8fc1";
- hash = "sha256-oGplv+2q1M1pIwFj2u8ZT9WTNNImYreQtiBECGJKe/Q=";
+ rev = "8eb36d50a124472c8b3c864e45997b4ac7331db7";
+ hash = "sha256-K/9OkwFHVgu1JJbkhqGr4pO9P6c4Qf4SB6LLSdqLkIc=";
};
meta.homepage = "https://github.com/rockerBOO/boo-colorscheme-nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -2254,12 +2268,12 @@ final: prev: {
bullets-vim = buildVimPlugin {
pname = "bullets.vim";
- version = "2.0.0-unstable-2026-06-03";
+ version = "2.0.0-unstable-2026-07-16";
src = fetchFromGitHub {
owner = "bullets-vim";
repo = "bullets.vim";
- rev = "3f667eeca58bd4ba411b41edefef51e7fed1a2b1";
- hash = "sha256-fq3ATtCeXeq3CR97KbEu8mOEF8CtpEt7z8z3OO5IQQY=";
+ rev = "81570b98ca44b4100b3ddcf8d9ca74b9a9b0c884";
+ hash = "sha256-yTxXXnVyk/vbr+tWD9RquJvk2ksa8Okuhg3NnyeBp3o=";
};
meta.homepage = "https://github.com/bullets-vim/bullets.vim/";
meta.license = unfree;
@@ -2268,12 +2282,12 @@ final: prev: {
calendar-vim = buildVimPlugin {
pname = "calendar.vim";
- version = "0-unstable-2025-03-07";
+ version = "0-unstable-2026-07-01";
src = fetchFromGitHub {
owner = "itchyny";
repo = "calendar.vim";
- rev = "36d1a3a76e39b9d73ff964db2f75dacaf2d2bef3";
- hash = "sha256-rNB44bWt6kFnrn+UyOqYHjigA9F/Iao9Osg/YTO4nhw=";
+ rev = "2ef5b0a2717d8a2ea24c55d11e426f25e6243282";
+ hash = "sha256-1aLYR0yTtOV0DYrcSics0PZo0+FLSO6CGYScmyyvQN4=";
};
meta.homepage = "https://github.com/itchyny/calendar.vim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -2310,12 +2324,12 @@ final: prev: {
catppuccin-vim = buildVimPlugin {
pname = "catppuccin-vim";
- version = "0-unstable-2025-08-11";
+ version = "0-unstable-2026-07-15";
src = fetchFromGitHub {
owner = "catppuccin";
repo = "vim";
- rev = "fc2e9d853208621a94ec597c50bf559875bf6d99";
- hash = "sha256-Ap9UKMWfDBbWLf7Rh47JQy3EO2Tphf05RZvX9voF1Ac=";
+ rev = "78c40a773e56d05e1c4e29216c45a483bdd67351";
+ hash = "sha256-xOf5PwhgVWwMGtJt+om9z0MULrMLoO6AmaJ/G/vWGrk=";
};
meta.homepage = "https://github.com/catppuccin/vim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -2547,12 +2561,12 @@ final: prev: {
claudecode-nvim = buildVimPlugin {
pname = "claudecode.nvim";
- version = "0.3.0-unstable-2026-06-09";
+ version = "0.3.0-unstable-2026-06-25";
src = fetchFromGitHub {
owner = "coder";
repo = "claudecode.nvim";
- rev = "7b8b7090c16f4151401a281741a4bf37050ebd26";
- hash = "sha256-NHhoAqCTa1+go+DYFj25eH0ZDmAqbA9tpHtj3IarCUU=";
+ rev = "2390c6e45c4789072c293ac69de051d169668b29";
+ hash = "sha256-oMBPSRQFDmJ9Lq+ZP8vFMHaocm4sPX3D/orVMNwVXuM=";
};
meta.homepage = "https://github.com/coder/claudecode.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -2631,12 +2645,12 @@ final: prev: {
cmake-tools-nvim = buildVimPlugin {
pname = "cmake-tools.nvim";
- version = "0-unstable-2026-06-05";
+ version = "0-unstable-2026-06-19";
src = fetchFromGitHub {
owner = "Civitasv";
repo = "cmake-tools.nvim";
- rev = "38f320fb9f0c4c9f1019f412f561c4d370a94d23";
- hash = "sha256-U8lLK5FzeOiJVUI0Y3AQ7TM+21tegMnnRbn18c7yXfc=";
+ rev = "22859d754b5de738cfe9945e0910729f63deefd0";
+ hash = "sha256-HOA8bi+qngLoeicN8DTsgY3r37FMJQ8psyuTXjVd7TY=";
};
meta.homepage = "https://github.com/Civitasv/cmake-tools.nvim/";
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
@@ -3484,12 +3498,12 @@ final: prev: {
coc-nvim = buildVimPlugin {
pname = "coc.nvim";
- version = "0.0.82-unstable-2026-06-08";
+ version = "0.0.82-unstable-2026-07-15";
src = fetchFromGitHub {
owner = "neoclide";
repo = "coc.nvim";
- rev = "92ab906cab1e6b19ad03f754df4f3930f9eae22c";
- hash = "sha256-c0ChbihCajCuEh1hu5XOFtomiFA6OzbCl7eNpzPfBXM=";
+ rev = "d1689a4876305e5fc6691910c8ee6f1eb5da2219";
+ hash = "sha256-6AjcLD8gh3rG3uXj8LjdXr5pbzIKwtu+14ZcCVwXCuI=";
};
meta.homepage = "https://github.com/neoclide/coc.nvim/";
meta.license = unfree;
@@ -3568,12 +3582,12 @@ final: prev: {
codecompanion-nvim = buildVimPlugin {
pname = "codecompanion.nvim";
- version = "19.15.0";
+ version = "19.20.0";
src = fetchFromGitHub {
owner = "olimorris";
repo = "codecompanion.nvim";
- tag = "v19.15.0";
- hash = "sha256-M/2pkFeL+sWwrXiCcE38WWmPb73kdCwC8AWg3ldScY0=";
+ tag = "v19.20.0";
+ hash = "sha256-vDKbjW9izNruCLiPRQEs+yoOrA+YkuyvmdovFTY4nfw=";
};
meta.homepage = "https://github.com/olimorris/codecompanion.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -3582,12 +3596,12 @@ final: prev: {
codecompanion-spinner-nvim = buildVimPlugin {
pname = "codecompanion-spinner.nvim";
- version = "0.2.5";
+ version = "0.3.0";
src = fetchFromGitHub {
owner = "franco-ruggeri";
repo = "codecompanion-spinner.nvim";
- tag = "v0.2.5";
- hash = "sha256-QSkiyV70kFkArCnTXYRR+Dt4i5XSq072tYnOnHbKEBc=";
+ tag = "v0.3.0";
+ hash = "sha256-icFyR0q814mfLj+wT3ArSYwo50EWpn9BgI81qhbQDCQ=";
};
meta.homepage = "https://github.com/franco-ruggeri/codecompanion-spinner.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -3650,6 +3664,20 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
+ cole-nvim = buildVimPlugin {
+ pname = "cole.nvim";
+ version = "0-unstable-2026-07-14";
+ src = fetchFromGitHub {
+ owner = "thekylehuang";
+ repo = "cole.nvim";
+ rev = "74f6a8e1bbce0d9a845a339d849bca3c0bec7aaa";
+ hash = "sha256-TJxpLhabIl73I9O6Soi9TEd/9Xa7FVfpV7sNrza64oM=";
+ };
+ meta.homepage = "https://github.com/thekylehuang/cole.nvim/";
+ meta.license = getLicenseFromSpdxId "MIT";
+ meta.hydraPlatforms = [ ];
+ };
+
colibri-vim = buildVimPlugin {
pname = "colibri.vim";
version = "0-unstable-2019-06-15";
@@ -3680,12 +3708,12 @@ final: prev: {
colorful-menu-nvim = buildVimPlugin {
pname = "colorful-menu.nvim";
- version = "0-unstable-2026-05-06";
+ version = "0-unstable-2026-06-30";
src = fetchFromGitHub {
owner = "xzbdmw";
repo = "colorful-menu.nvim";
- rev = "13f9b7eaa9cd2901b4f8915cfb2483c3be4c8c20";
- hash = "sha256-RPYTEtJ3pazPJjIby+WQOHVAa1BE58d9/EOu8XQnUNk=";
+ rev = "196ddf16d5f8fec09ba7f20e6b153aa5188e907b";
+ hash = "sha256-cqujcf3hgTcHtwqRliEvFAtkBRkNljSNXn/N4AOgeyc=";
};
meta.homepage = "https://github.com/xzbdmw/colorful-menu.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -3764,12 +3792,12 @@ final: prev: {
command-t = buildVimPlugin {
pname = "command-t";
- version = "8.1";
+ version = "8.2";
src = fetchFromGitHub {
owner = "wincent";
repo = "command-t";
- tag = "8.1";
- hash = "sha256-yp3kqhHQMtUFFPfbqgnrmmclx6r39k3ohen4Ys3s3BU=";
+ tag = "8.2";
+ hash = "sha256-Q2fYHr9GFQvkoyoAOkvxJDArtqMxq7352eSGQNHBFZ8=";
};
meta.homepage = "https://github.com/wincent/command-t/";
meta.license = getLicenseFromSpdxId "BSD-2-Clause";
@@ -4073,12 +4101,12 @@ final: prev: {
copilot-lua = buildVimPlugin {
pname = "copilot.lua";
- version = "2.0.4";
+ version = "3.0.0";
src = fetchFromGitHub {
owner = "zbirenbaum";
repo = "copilot.lua";
- tag = "v2.0.4";
- hash = "sha256-+hQ4Og0ZZS/tvs4z5733qRu5+W4D24HgHHPIL5vd0Eo=";
+ tag = "v3.0.0";
+ hash = "sha256-xjdTysyt7BMb8a9c2HPQN85EujhQv9ZCQ87yWHjELls=";
};
meta.homepage = "https://github.com/zbirenbaum/copilot.lua/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -4143,12 +4171,12 @@ final: prev: {
coq-thirdparty = buildVimPlugin {
pname = "coq.thirdparty";
- version = "0-unstable-2025-10-29";
+ version = "0-unstable-2026-06-21";
src = fetchFromGitHub {
owner = "ms-jpq";
repo = "coq.thirdparty";
- rev = "2bd969a2bcd2624f9c260b1000957c7e665e308e";
- hash = "sha256-l+wMABt0lnKn1V6d7uhe6rUjfKsZw9XcO6RHwEVrZSI=";
+ rev = "a021e24f1ff538d339aece0de80d621b68862701";
+ hash = "sha256-x08Ggz/maGv1tUY0P0ITFym+4W8vg6sXPLgGo6kXFNQ=";
};
meta.homepage = "https://github.com/ms-jpq/coq.thirdparty/";
meta.license = unfree;
@@ -4171,12 +4199,12 @@ final: prev: {
coq_nvim = buildVimPlugin {
pname = "coq_nvim";
- version = "0-unstable-2026-06-10";
+ version = "0-unstable-2026-07-16";
src = fetchFromGitHub {
owner = "ms-jpq";
repo = "coq_nvim";
- rev = "5054268e58e9e45dbdae598c2d7cca232085d2ce";
- hash = "sha256-SxffEztUDSXp1skO52Pi8XQCinWwFbw34Nn3cvC9GW8=";
+ rev = "83580b587f6fc50568ec61ae79e18762fcf35c17";
+ hash = "sha256-OKlZh1FKIk4DhyAtc0rSnEOZoa75NQKRtdFYDjkTZPE=";
};
meta.homepage = "https://github.com/ms-jpq/coq_nvim/";
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
@@ -4185,12 +4213,12 @@ final: prev: {
cornelis = buildVimPlugin {
pname = "cornelis";
- version = "2.8.0-unstable-2026-06-02";
+ version = "0.12-compat";
src = fetchFromGitHub {
owner = "agda";
repo = "cornelis";
- rev = "f6db4a8e0993276557cc59b8e720d04e73138ded";
- hash = "sha256-XG7F0ALVWU+8XHfYEj0R8SF+vjwCyy65oX4UcVxRlPc=";
+ tag = "nvim-0.12-compat";
+ hash = "sha256-ObmnsH25/vnC6TEJ44ZZuJJBrnnAJuDNYkJZU6YnTi4=";
};
meta.homepage = "https://github.com/agda/cornelis/";
meta.license = getLicenseFromSpdxId "BSD-3-Clause";
@@ -4381,12 +4409,12 @@ final: prev: {
cyberdream-nvim = buildVimPlugin {
pname = "cyberdream.nvim";
- version = "5.4.0";
+ version = "5.5.0";
src = fetchFromGitHub {
owner = "scottmckendry";
repo = "cyberdream.nvim";
- tag = "v5.4.0";
- hash = "sha256-lz9TlZRhJIUnv/4qTT8SoimRiY/vGFlrOKT3xc3FtoQ=";
+ tag = "v5.5.0";
+ hash = "sha256-iLdBf66y5nZgSj3OJWjjv07vBOMMRxx0ncSH477eXIg=";
};
meta.homepage = "https://github.com/scottmckendry/cyberdream.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -4521,12 +4549,12 @@ final: prev: {
ddc-filter-matcher_head = buildVimPlugin {
pname = "ddc-filter-matcher_head";
- version = "0-unstable-2025-09-02";
+ version = "0-unstable-2026-06-23";
src = fetchFromGitHub {
owner = "Shougo";
repo = "ddc-filter-matcher_head";
- rev = "7a955d2f6a44e39687459f8f3a22f4daa063a981";
- hash = "sha256-VYNjVH1OtmSyvBoFxF5WBf150GwoIpjTe0Y0oK8Hp8A=";
+ rev = "7a52b2facb97a352fcd900baca1b4efa7b652176";
+ hash = "sha256-toNCobCS9NiLQewXZpKyZvuA3AZ83v/rhUbMkV1WOOQ=";
};
meta.homepage = "https://github.com/Shougo/ddc-filter-matcher_head/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -4535,12 +4563,12 @@ final: prev: {
ddc-filter-sorter_rank = buildVimPlugin {
pname = "ddc-filter-sorter_rank";
- version = "0-unstable-2025-09-02";
+ version = "0-unstable-2026-07-03";
src = fetchFromGitHub {
owner = "Shougo";
repo = "ddc-filter-sorter_rank";
- rev = "eed3cb33b3ae3f9128257fcfb95e0511d1b13891";
- hash = "sha256-8zoRsX7ZNCNkokku0TW0LNkjXmBL8UCu8h3EAe4KQ+g=";
+ rev = "0d58fe698528dfeaf895eb70791c1b5e8a1d2288";
+ hash = "sha256-0iLK7vdkZ27sMUho3SK7NHh77uL+aLpIjqkSOuKc5j8=";
};
meta.homepage = "https://github.com/Shougo/ddc-filter-sorter_rank/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -4563,12 +4591,12 @@ final: prev: {
ddc-source-around = buildVimPlugin {
pname = "ddc-source-around";
- version = "0-unstable-2025-09-03";
+ version = "0-unstable-2026-07-03";
src = fetchFromGitHub {
owner = "Shougo";
repo = "ddc-source-around";
- rev = "68e679ca0b989cfe3300acac9099b893d0675063";
- hash = "sha256-wLQ9vpKgl4fyjLEWo1XIElw8CbFjpBkvYMFoMPrQTxM=";
+ rev = "277b926fdb3b642572cc756d52a42f18ac7c6059";
+ hash = "sha256-5KT1verDM4My7ow+9nswHPsSUNmdqsyx1H3jd2SKp3k=";
};
meta.homepage = "https://github.com/Shougo/ddc-source-around/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -4577,12 +4605,12 @@ final: prev: {
ddc-source-file = buildVimPlugin {
pname = "ddc-source-file";
- version = "0-unstable-2026-05-24";
+ version = "0-unstable-2026-06-19";
src = fetchFromGitHub {
owner = "LumaKernel";
repo = "ddc-source-file";
- rev = "b2ff132a07a881251edbc03b5c81f3655803a5b9";
- hash = "sha256-Iw6dYzIUzx7O6+YmNl1W7kjBgjc52m1KGG0oFBySqfk=";
+ rev = "8548b553c7dbf49728788c29142108c437e0ec76";
+ hash = "sha256-96W64aTUbyKgrEDaA6iFDcsVCA6TF3ei/xYyon/N2uY=";
};
meta.homepage = "https://github.com/LumaKernel/ddc-source-file/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -4591,12 +4619,12 @@ final: prev: {
ddc-source-lsp = buildVimPlugin {
pname = "ddc-source-lsp";
- version = "1.2.0-unstable-2026-05-24";
+ version = "1.2.0-unstable-2026-07-20";
src = fetchFromGitHub {
owner = "Shougo";
repo = "ddc-source-lsp";
- rev = "a8fef26851f3b648e064fa3aeb7c8c054684e846";
- hash = "sha256-vB3sCEJw67kJLON+AXo6B/38jBAFq079EouVxaI9QlQ=";
+ rev = "2f476ae123bea5b3583f9d4ca141f63981e70b06";
+ hash = "sha256-2rMdU1FUP4HJP2o2MtL93po/FmloMzZ/sqeQWHPP55g=";
};
meta.homepage = "https://github.com/Shougo/ddc-source-lsp/";
meta.license = unfree;
@@ -4605,12 +4633,12 @@ final: prev: {
ddc-ui-native = buildVimPlugin {
pname = "ddc-ui-native";
- version = "0-unstable-2026-04-30";
+ version = "0-unstable-2026-07-07";
src = fetchFromGitHub {
owner = "Shougo";
repo = "ddc-ui-native";
- rev = "4f409fc24e0c1ce2a99a2c055b6a216feef2f076";
- hash = "sha256-hMsOqJ8Db2W15Z73jQDldwkRBbaI5p8gap8UqgKRNiY=";
+ rev = "7b946489962453c485b894c18dd8e81057dd8098";
+ hash = "sha256-p+jUxvJ7Wza9PtxHMJbwbHV7GZ1iPsfVGNwIYuiM938=";
};
meta.homepage = "https://github.com/Shougo/ddc-ui-native/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -4619,12 +4647,12 @@ final: prev: {
ddc-ui-pum = buildVimPlugin {
pname = "ddc-ui-pum";
- version = "0-unstable-2025-08-26";
+ version = "0-unstable-2026-07-07";
src = fetchFromGitHub {
owner = "Shougo";
repo = "ddc-ui-pum";
- rev = "f7f334380e18af42297468b3cf696794bbfa2652";
- hash = "sha256-kQ1fK65V0NtObqBy/FhcfACUGeI5Pk4t3Kw0BPpxChw=";
+ rev = "0679df221520576d07add3cf4219d478db110801";
+ hash = "sha256-6KRKuovKkYUdtyirZ/UNvtAZzgtVgc+EGVTETq2Hu2U=";
};
meta.homepage = "https://github.com/Shougo/ddc-ui-pum/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -4745,12 +4773,12 @@ final: prev: {
demicolon-nvim = buildVimPlugin {
pname = "demicolon.nvim";
- version = "2.0-unstable-2026-01-25";
+ version = "2.0-unstable-2026-06-20";
src = fetchFromGitHub {
owner = "mawkler";
repo = "demicolon.nvim";
- rev = "a9ca137474b3a02e1d6ac48bfdb1985172e2ec9a";
- hash = "sha256-jDvdyAT2lngYDSDw4c+zziUYUuNeET0FBWJA+IeD2Ts=";
+ rev = "153444f17494e2ff6ab7d226e6173c1841b1130a";
+ hash = "sha256-gBGJphvT1AXN/UImrSWiWhhzcQt4i68Vbwtr9jXipwo=";
};
meta.homepage = "https://github.com/mawkler/demicolon.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -5181,12 +5209,12 @@ final: prev: {
diagram-nvim = buildVimPlugin {
pname = "diagram.nvim";
- version = "0-unstable-2026-02-21";
+ version = "0-unstable-2026-06-12";
src = fetchFromGitHub {
owner = "3rd";
repo = "diagram.nvim";
- rev = "89d8110ec15021ac9a03ff2317d27b900c45bf60";
- hash = "sha256-0KgZ/3q26b7MxMPRXp4/mgfl7tIUD3PnC6TYgagDGP4=";
+ rev = "a221810b17cdda2d5fdddba9bab3eba6fab8fabc";
+ hash = "sha256-+K5o50CtBFqn37t6GnAnI1p2CfCyA1w4TIhMKpfZX4A=";
};
meta.homepage = "https://github.com/3rd/diagram.nvim/";
meta.license = unfree;
@@ -5209,12 +5237,12 @@ final: prev: {
diffs-nvim = buildVimPlugin {
pname = "diffs.nvim";
- version = "0.3.3";
+ version = "0.4.0";
src = fetchFromGitHub {
owner = "barrettruth";
repo = "diffs.nvim";
- tag = "v0.3.3";
- hash = "sha256-g/kXdeNT2NLgQ+iPTI1GdlJyzvSHrcJoCLa0tPDj3gM=";
+ tag = "v0.4.0";
+ hash = "sha256-ZkdvFn5oIlHfXXbO68GxtLrVkF2vxYlG8Fglrkc3Byc=";
};
meta.homepage = "https://github.com/barrettruth/diffs.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -5237,12 +5265,12 @@ final: prev: {
diffview-plus-nvim = buildVimPlugin {
pname = "diffview-plus.nvim";
- version = "0.34";
+ version = "0.36";
src = fetchFromGitHub {
owner = "dlyongemallo";
repo = "diffview-plus.nvim";
- tag = "v0.34";
- hash = "sha256-M3Hf4y9HGFquBOK/Stv5FIxoVYX4aoO4dbbYQNPhisk=";
+ tag = "v0.36";
+ hash = "sha256-RBH06hWEW5fP80Sj48UhVT9KexLtm3xWZtdVH+rGWhY=";
};
meta.homepage = "https://github.com/dlyongemallo/diffview-plus.nvim/";
meta.license = unfree;
@@ -5419,12 +5447,12 @@ final: prev: {
easy-dotnet-nvim = buildVimPlugin {
pname = "easy-dotnet.nvim";
- version = "0-unstable-2026-06-09";
+ version = "0-unstable-2026-07-09";
src = fetchFromGitHub {
owner = "GustavEikaas";
repo = "easy-dotnet.nvim";
- rev = "5c9577f6fc086e211ccc7d93b763e9a5ace4e64b";
- hash = "sha256-E+f0SHaTN8FI3gEs4t+6NuS5xn45kneK39kSam+Ya9M=";
+ rev = "26b939e2e013ddfc137a8e6149cda1f0b62303ca";
+ hash = "sha256-M6uNfKiHviaJyItvvAdEplB+pdqF4N5DOwxG2oPYwpg=";
};
meta.homepage = "https://github.com/GustavEikaas/easy-dotnet.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -5546,12 +5574,12 @@ final: prev: {
efmls-configs-nvim = buildVimPlugin {
pname = "efmls-configs-nvim";
- version = "1.11.1-unstable-2026-05-24";
+ version = "1.11.2";
src = fetchFromGitHub {
owner = "creativenull";
repo = "efmls-configs-nvim";
- rev = "2f5dc31042cc76fc3d5a859842a8416085c4d41f";
- hash = "sha256-mtHihfpaV9gJFqZBD0h90dAC6kECNxbFPH3OYJoKVT0=";
+ tag = "v1.11.2";
+ hash = "sha256-NXwwuvdMpqI0+i0gmX7mtNlUHWTJnDejuZUN2PiS6hs=";
};
meta.homepage = "https://github.com/creativenull/efmls-configs-nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -5981,12 +6009,12 @@ final: prev: {
flash-nvim = buildVimPlugin {
pname = "flash.nvim";
- version = "2.1.0-unstable-2025-10-28";
+ version = "2.1.0-unstable-2026-07-10";
src = fetchFromGitHub {
owner = "folke";
repo = "flash.nvim";
- rev = "fcea7ff883235d9024dc41e638f164a450c14ca2";
- hash = "sha256-pHh0tJd/ynfjriu8xjnKunKVDHkoXii6ZbikdkIwovY=";
+ rev = "b6346946d10d07998efee029fb0f7a593806d0cd";
+ hash = "sha256-1v2+iq4/TnJq37iiGedIKFf6PxlTHQac8RXECZ2HYdM=";
};
meta.homepage = "https://github.com/folke/flash.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -5995,12 +6023,12 @@ final: prev: {
flatten-nvim = buildVimPlugin {
pname = "flatten.nvim";
- version = "0.5.1-unstable-2025-05-27";
+ version = "0.5.1-unstable-2026-06-19";
src = fetchFromGitHub {
owner = "willothy";
repo = "flatten.nvim";
- rev = "72527798e75b5e34757491947c2cb853ce21dc0e";
- hash = "sha256-NaOgzTVqOpQnEIOIMlHCupZUDYnLUic9zITKFxcOg3A=";
+ rev = "d92ca41e9c330f45c1b854a80c89c8488a9d730c";
+ hash = "sha256-ZixskxLpno0BbzseafBILoFzRzs14HrBeWlRQrqkAS8=";
};
meta.homepage = "https://github.com/willothy/flatten.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -6332,14 +6360,14 @@ final: prev: {
fyler-nvim = buildVimPlugin {
pname = "fyler.nvim";
- version = "2.0.0-unstable-2025-11-23";
+ version = "2.0.0-unstable-2026-06-28";
src = fetchFromGitHub {
- owner = "A7Lavinraj";
+ owner = "FylerOrg";
repo = "fyler.nvim";
- rev = "bb8b9f30c652c948d35211958b0deec3496bcc08";
- hash = "sha256-Caf1dJiIATbs0PNjSANjA3QgHg7PdeMz9Pjoc0Ti7G4=";
+ rev = "70e1202434a21b45649dd59ec82dc3330f79125e";
+ hash = "sha256-va0a+y6fjut99A7MBjKYvfmhQUDp/zyD/65neYWVHE8=";
};
- meta.homepage = "https://github.com/A7Lavinraj/fyler.nvim/";
+ meta.homepage = "https://github.com/FylerOrg/fyler.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
meta.hydraPlatforms = [ ];
};
@@ -6388,12 +6416,12 @@ final: prev: {
fzf-vim = buildVimPlugin {
pname = "fzf.vim";
- version = "0-unstable-2026-06-02";
+ version = "0-unstable-2026-06-12";
src = fetchFromGitHub {
owner = "junegunn";
repo = "fzf.vim";
- rev = "356608e2ae5d9127e2c964885ea2b21ea7aea9ab";
- hash = "sha256-3u6E8HgLVwAk75fOAWP1zrRb54N4YG6MbRDrKpn7bdw=";
+ rev = "d2a59a992a2455f609c0fde2ebd84427ea8f919a";
+ hash = "sha256-TQR+ivA4nnichGdCDSeL2WeT+dHfNeQM1BPdrXM0Cd8=";
};
meta.homepage = "https://github.com/junegunn/fzf.vim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -6682,11 +6710,11 @@ final: prev: {
gitlab-vim = buildVimPlugin {
pname = "gitlab.vim";
- version = "1.1.0-unstable-2026-06-10";
+ version = "1.1.0-unstable-2026-07-03";
src = fetchgit {
url = "https://gitlab.com/gitlab-org/editor-extensions/gitlab.vim";
- rev = "eaddfb6717d7d1118b40403dd8ae76b79e28eb33";
- hash = "sha256-RSPu9WhHfb5JyaYYZGJ4tYe0USOQ4ap68Z27ZhkA5Vc=";
+ rev = "ca4971d02c3114d6f5e94b1d0bf460faccbf7f5e";
+ hash = "sha256-i64MIJqWf3BVJPEf5dpzU5nvnTNXjqn4c8SuQ6Pkct4=";
};
meta.homepage = "https://gitlab.com/gitlab-org/editor-extensions/gitlab.vim";
meta.license = unfree;
@@ -6723,14 +6751,13 @@ final: prev: {
gitportal-nvim = buildVimPlugin {
pname = "gitportal.nvim";
- version = "0-unstable-2025-12-21";
- src = fetchFromGitHub {
- owner = "trevorhauter";
- repo = "gitportal.nvim";
- rev = "0c3e1c1d518c9e42e61e8df35ea0c0582a278a65";
- hash = "sha256-ag7t+G5TKRajLNc4ZrNuMufJSxqJQXPpWINZSFwEmx4=";
+ version = "0-unstable-2026-07-10";
+ src = fetchgit {
+ url = "https://codeberg.org/trevorhauter/gitportal.nvim/";
+ rev = "d2efb8d1bf141c77cfa1b5311995912bc36671d0";
+ hash = "sha256-ofRP84DSgrXyNXXZjM82n1AhsfleDU6k7r4+R9sof40=";
};
- meta.homepage = "https://github.com/trevorhauter/gitportal.nvim/";
+ meta.homepage = "https://codeberg.org/trevorhauter/gitportal.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
meta.hydraPlatforms = [ ];
};
@@ -7073,12 +7100,12 @@ final: prev: {
guh-nvim = buildVimPlugin {
pname = "guh.nvim";
- version = "0.0.1-unstable-2026-06-10";
+ version = "0.0.1-unstable-2026-06-24";
src = fetchFromGitHub {
owner = "justinmk";
repo = "guh.nvim";
- rev = "89bca23616361fa316c72b1171bc7aa3401800be";
- hash = "sha256-HEDQMSbWWg7UEru+hf0cT+7KbIMi1r1cU5YcgaBLq/E=";
+ rev = "943779f7cdb0acee203985ad531fb53ff95d9c8e";
+ hash = "sha256-IfcrDH4B5J4aeV/Ff8mZ93nh3TNNoX/miZRWn6uMcu0=";
};
meta.homepage = "https://github.com/justinmk/guh.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -7087,12 +7114,12 @@ final: prev: {
guihua-lua = buildVimPlugin {
pname = "guihua.lua";
- version = "0.1-unstable-2026-05-26";
+ version = "0.1-unstable-2026-07-03";
src = fetchFromGitHub {
owner = "ray-x";
repo = "guihua.lua";
- rev = "f8e06bd8a26dee3377d63c2adf1e57cdb58ac474";
- hash = "sha256-lupDg/yt75164H8zQs/HTKqC3Y1FnQCzoMq90nwapO8=";
+ rev = "4c513d5dac550af77034cced421967b393261509";
+ hash = "sha256-e0Almh8wWGp5NxHX48Y4XGEUHtPCYOXi4BIlfeSzaIs=";
};
meta.homepage = "https://github.com/ray-x/guihua.lua/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -7158,12 +7185,12 @@ final: prev: {
hardtime-nvim = buildVimPlugin {
pname = "hardtime.nvim";
- version = "1.2.0-unstable-2025-09-13";
+ version = "1.2.0-unstable-2026-07-20";
src = fetchFromGitHub {
owner = "m4xshen";
repo = "hardtime.nvim";
- rev = "b4e431934af1fe224a3a801f632c008278cb7628";
- hash = "sha256-Jy9ARUHU1ySpSxxoS3hLRjxp5Lqt7juWN5Jnbdo0rg0=";
+ rev = "244753782b945def87472d8f4e9e6a9d4ec18689";
+ hash = "sha256-Zers7vdGRGy8n520G9uMuHwMAP3STHqU5d5a2Ln9rDQ=";
};
meta.homepage = "https://github.com/m4xshen/hardtime.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -7241,12 +7268,12 @@ final: prev: {
haskell-snippets-nvim = buildVimPlugin {
pname = "haskell-snippets.nvim";
- version = "1.5.0-unstable-2026-05-11";
+ version = "1.5.0-unstable-2026-06-22";
src = fetchFromGitHub {
owner = "mrcjkb";
repo = "haskell-snippets.nvim";
- rev = "f7482c1097007e8bac0502c0644e375a12ae72ba";
- hash = "sha256-BygC8L0Jau5/7ljHfD9LJO18jhXvIq1SSvtyb7bNv40=";
+ rev = "5be33b79f0320ad9ef7f558507f2e365deebef4f";
+ hash = "sha256-/xJ1Wx6Y24NvrbX4+v2lF+anEhP14p+N9jc2/p859LU=";
};
meta.homepage = "https://github.com/mrcjkb/haskell-snippets.nvim/";
meta.license = getLicenseFromSpdxId "GPL-2.0-only";
@@ -7367,12 +7394,12 @@ final: prev: {
helpview-nvim = buildVimPlugin {
pname = "helpview.nvim";
- version = "2.1.2-unstable-2026-05-14";
+ version = "2.2.0";
src = fetchFromGitHub {
owner = "OXY2DEV";
repo = "helpview.nvim";
- rev = "0057599e169ea6ffd53fef77f279cb13b61e174a";
- hash = "sha256-F3mdFqzMZhdT0ag+d7Ze9Knv4NW9/YBGVjqRYcQpCCI=";
+ tag = "v2.2.0";
+ hash = "sha256-zWwgfikrE9bagMuFSo6XByprANqIJkx6g2567ZTOEYk=";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/OXY2DEV/helpview.nvim/";
@@ -7452,12 +7479,12 @@ final: prev: {
hlchunk-nvim = buildVimPlugin {
pname = "hlchunk.nvim";
- version = "1.3.0-unstable-2026-05-07";
+ version = "1.3.0-unstable-2026-07-04";
src = fetchFromGitHub {
owner = "shellRaining";
repo = "hlchunk.nvim";
- rev = "06f51922ca43d5cdacf96725c106405fe064c59e";
- hash = "sha256-ETsuiYjTR4JF/4RVqRXJHLtcoalEaFinHxxD4Ww34xU=";
+ rev = "fb5a16ecc4ff15772189679ffdede6ee879288ec";
+ hash = "sha256-rSQnHnks068egYd9AlfuC43F3BcysyMTYnlaUFjlDM4=";
};
meta.homepage = "https://github.com/shellRaining/hlchunk.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -8110,12 +8137,12 @@ final: prev: {
jedi-vim = buildVimPlugin {
pname = "jedi-vim";
- version = "0.11.2-unstable-2026-05-04";
+ version = "0.11.2-unstable-2026-06-16";
src = fetchFromGitHub {
owner = "davidhalter";
repo = "jedi-vim";
- rev = "a33071af6b3cf2399bc4631e0aa265901e1cf99e";
- hash = "sha256-Tg+JHiOneIqfVKJa8VfIbB1aNAYlJGNoiY/+7qgAYf8=";
+ rev = "a13c7bf64dbb4abcf676b4e41c5fedc2d4e7f6dd";
+ hash = "sha256-Fy0zJHambtY9T4KPWXBc7wXktXo/EIUr6t+eehFAz3M=";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/davidhalter/jedi-vim/";
@@ -8167,12 +8194,12 @@ final: prev: {
jj-nvim = buildVimPlugin {
pname = "jj.nvim";
- version = "0.6.0";
+ version = "0.7.1";
src = fetchFromGitHub {
owner = "NicolasGB";
repo = "jj.nvim";
- tag = "v0.6.0";
- hash = "sha256-hoU+DenrgxNwvLNmDtIsJ5yB5fhRjDRPOOL8WW9bpZM=";
+ tag = "v0.7.1";
+ hash = "sha256-AxmZTSytBEGzjqQJrFV2+oHSVaG21Vx6YRezto3MT9s=";
};
meta.homepage = "https://github.com/NicolasGB/jj.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -8362,12 +8389,12 @@ final: prev: {
kitty-scrollback-nvim = buildVimPlugin {
pname = "kitty-scrollback.nvim";
- version = "9.2.0";
+ version = "9.2.1";
src = fetchFromGitHub {
owner = "mikesmithgh";
repo = "kitty-scrollback.nvim";
- tag = "v9.2.0";
- hash = "sha256-M/sd8lUv7leapzI3uD0VNkMAwaFhPmXsktFnHMPJz0U=";
+ tag = "v9.2.1";
+ hash = "sha256-8IkvoJ8nTlP5WCqMpJqUhBsz7OYB/Mlp1lH5TJRpvOE=";
};
meta.homepage = "https://github.com/mikesmithgh/kitty-scrollback.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -8418,12 +8445,12 @@ final: prev: {
koda-nvim = buildVimPlugin {
pname = "koda.nvim";
- version = "2.10.3";
+ version = "2.11.0";
src = fetchFromGitHub {
owner = "oskarnurm";
repo = "koda.nvim";
- tag = "v2.10.3";
- hash = "sha256-CU634QzBkPRVntJ/fKBu/V0WNQ7K9fzqOtMIUEb9/Vw=";
+ tag = "v2.11.0";
+ hash = "sha256-OiWW7c+cd/MioepNN40pFO3hTAm9ov80I1mVYmTW428=";
};
meta.homepage = "https://github.com/oskarnurm/koda.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -8458,21 +8485,6 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
- kulala-nvim = buildVimPlugin {
- pname = "kulala.nvim";
- version = "6.9.2";
- src = fetchFromGitHub {
- owner = "mistweaverco";
- repo = "kulala.nvim";
- tag = "v6.9.2";
- hash = "sha256-7q/lV939qxozpsE0SM272ztSdzqIDuAdrgXSITCDLko=";
- fetchSubmodules = true;
- };
- meta.homepage = "https://github.com/mistweaverco/kulala.nvim/";
- meta.license = getLicenseFromSpdxId "MIT";
- meta.hydraPlatforms = [ ];
- };
-
lackluster-nvim = buildVimPlugin {
pname = "lackluster.nvim";
version = "0-unstable-2025-10-06";
@@ -8754,12 +8766,12 @@ final: prev: {
lexima-vim = buildVimPlugin {
pname = "lexima.vim";
- version = "2.1.0-unstable-2025-05-15";
+ version = "2.1.0-unstable-2026-07-11";
src = fetchFromGitHub {
owner = "cohama";
repo = "lexima.vim";
- rev = "ab621e4756465c9d354fce88cff2bd1aa7887065";
- hash = "sha256-NtHCfuL2Tq1a4Xevx+xAbnzsKqnPAbU/l7JvK7p0evU=";
+ rev = "9f6942c5e1f0f6fe63bdcdac515f34c484b970f5";
+ hash = "sha256-hU/MmP5Ykb52vCJvlMtQipKe4LGC7d+lH//r8ysDELE=";
};
meta.homepage = "https://github.com/cohama/lexima.vim/";
meta.license = unfree;
@@ -8880,12 +8892,12 @@ final: prev: {
lightline-vim = buildVimPlugin {
pname = "lightline.vim";
- version = "0-unstable-2026-04-12";
+ version = "0-unstable-2026-07-01";
src = fetchFromGitHub {
owner = "itchyny";
repo = "lightline.vim";
- rev = "6c283f8df85aa7219fa4096a6ed4ff45d48aa9e1";
- hash = "sha256-YYhSlqYUXFbArn2lq80LH/WXIUbHjt087+w2y/6EjtQ=";
+ rev = "d042c506cb2e7a59112a72447e0b5fe8739d9d1d";
+ hash = "sha256-CVxtG8RLBgHOQUwIjaB9vmeOjGODZzNj/KCEOHTw7EI=";
};
meta.homepage = "https://github.com/itchyny/lightline.vim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9327,12 +9339,12 @@ final: prev: {
lspsaga-nvim = buildVimPlugin {
pname = "lspsaga.nvim";
- version = "0-unstable-2026-05-14";
+ version = "0-unstable-2026-07-16";
src = fetchFromGitHub {
owner = "nvimdev";
repo = "lspsaga.nvim";
- rev = "3e33a6a6c5d379f3d4fae77fae6b53b762a0a30f";
- hash = "sha256-hkXvv5NgW+wnbR7wGtAs+aUDv/4o/T5Mv7rGhk1qR3U=";
+ rev = "cf6fc9473bba1d332eda9887855ea29ed9b37701";
+ hash = "sha256-ggw3U/LXNCDaSmXmHWEV9coOjoDW6v0JvD5BGSvDCaM=";
};
meta.homepage = "https://github.com/nvimdev/lspsaga.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9580,12 +9592,12 @@ final: prev: {
mason-lspconfig-nvim = buildVimPlugin {
pname = "mason-lspconfig.nvim";
- version = "2.2.0";
+ version = "2.3.0";
src = fetchFromGitHub {
owner = "mason-org";
repo = "mason-lspconfig.nvim";
- tag = "v2.2.0";
- hash = "sha256-wWoRUg2nvmqaEWxjYEOk1q+jQyKupgJi2LubhewcVCw=";
+ tag = "v2.3.0";
+ hash = "sha256-yaR7P33ZQdJNAh0P3slN/TS0OL9p6ShMEIWGF4rFqxQ=";
};
meta.homepage = "https://github.com/mason-org/mason-lspconfig.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -9608,12 +9620,12 @@ final: prev: {
mason-nvim = buildVimPlugin {
pname = "mason.nvim";
- version = "2.3.0";
+ version = "2.3.1";
src = fetchFromGitHub {
owner = "mason-org";
repo = "mason.nvim";
- tag = "v2.3.0";
- hash = "sha256-O+11o3c0iNZ4tMZV80QbzwuMV3mP2Ml4lXQKHz4uR54=";
+ tag = "v2.3.1";
+ hash = "sha256-zx45l5yZeWgnkzaQeY+V3GK84arritj7jfpJ64Go9rg=";
};
meta.homepage = "https://github.com/mason-org/mason.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -9818,12 +9830,12 @@ final: prev: {
mini-ai = buildVimPlugin {
pname = "mini.ai";
- version = "0.17.0-unstable-2026-06-05";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.ai";
- rev = "4511b3481707c1d021485475d34f2ed2a50bf47b";
- hash = "sha256-weROF3Xf/XzUYJyI1NGm1HRnWEWjWbiEc5th5Gv55Tk=";
+ tag = "v0.18.0";
+ hash = "sha256-5lmxcbEwlUcV3D4Zw93dLH2onFdpGMEAhul51lbxFIg=";
};
meta.homepage = "https://github.com/nvim-mini/mini.ai/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9832,12 +9844,12 @@ final: prev: {
mini-align = buildVimPlugin {
pname = "mini.align";
- version = "0.17.0-unstable-2026-06-05";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.align";
- rev = "a7cd9465ac72c65d726f8fdc8b71ceb63ce8c0fd";
- hash = "sha256-SBc4LHrQ2WqJINLjJC3qQfTfKVP7p6gxa7D+sz15CSc=";
+ tag = "v0.18.0";
+ hash = "sha256-0YVTahHSbzhEEpw9zYfGljxx+ufsuZ0qWiu2SZzTD9U=";
};
meta.homepage = "https://github.com/nvim-mini/mini.align/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9846,12 +9858,12 @@ final: prev: {
mini-animate = buildVimPlugin {
pname = "mini.animate";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.animate";
- rev = "a133965b027a6377fddca43f11659af357c12758";
- hash = "sha256-mSeJEg5WUQrObE/eX7mmazBQFF9i+f/WLlxWXmLCaSI=";
+ tag = "v0.18.0";
+ hash = "sha256-xxEoAH267h7oEMaMtv9YRsJRL5X1pWbAeCy/U+i33gs=";
};
meta.homepage = "https://github.com/nvim-mini/mini.animate/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9860,12 +9872,12 @@ final: prev: {
mini-base16 = buildVimPlugin {
pname = "mini.base16";
- version = "0.17.0-unstable-2026-06-04";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.base16";
- rev = "33c6fb4a088392df272a4d88f9bf07f466c5a459";
- hash = "sha256-oVUSqKyMhnGKsrmZmtm8GM59FIGILYquoq1K6sNNF84=";
+ tag = "v0.18.0";
+ hash = "sha256-Q038ztqiCjX9WAqlcKC4auNNeRtC+hOV6BvMml/Tdp8=";
};
meta.homepage = "https://github.com/nvim-mini/mini.base16/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9874,12 +9886,12 @@ final: prev: {
mini-basics = buildVimPlugin {
pname = "mini.basics";
- version = "0.17.0-unstable-2026-05-21";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.basics";
- rev = "4255727accba14db930823da4168c7f1ea68ff80";
- hash = "sha256-UVZkMfRub44plD0+wOd+//P7BejCqwf3mxCH9fMiosw=";
+ tag = "v0.18.0";
+ hash = "sha256-/H9/3JkZigApufNvWMtOFbsrHuG4cwPuY+fKmklWkU8=";
};
meta.homepage = "https://github.com/nvim-mini/mini.basics/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9888,12 +9900,12 @@ final: prev: {
mini-bracketed = buildVimPlugin {
pname = "mini.bracketed";
- version = "0.17.0-unstable-2026-05-12";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.bracketed";
- rev = "d94d51dcee625723aaaf8d38174b48522eaf9131";
- hash = "sha256-6HD3eYKkRYsS+evLvfptMOczC3ljrf5PurIwx9tZp1U=";
+ tag = "v0.18.0";
+ hash = "sha256-vsj7cf6deB9o0UkFN/ewk/kxKooC0lB7txRpbbNnaLc=";
};
meta.homepage = "https://github.com/nvim-mini/mini.bracketed/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9902,11 +9914,11 @@ final: prev: {
mini-bufremove = buildVimPlugin {
pname = "mini.bufremove";
- version = "0.17.0-unstable-2026-05-12";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.bufremove";
- rev = "4cfbb201b2760da79ca6e1a00e9f67cbc99cbb8f";
+ tag = "v0.18.0";
hash = "sha256-TVae69MHavTTgBCWpIbQk0L3EgLlRQgqXZlotSbG8bk=";
};
meta.homepage = "https://github.com/nvim-mini/mini.bufremove/";
@@ -9916,12 +9928,12 @@ final: prev: {
mini-clue = buildVimPlugin {
pname = "mini.clue";
- version = "0.17.0-unstable-2026-06-05";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.clue";
- rev = "4b3db71003fa06200680afb9f1d05506b79eb953";
- hash = "sha256-6ttyphQgT3yjWOOzmLKzSqQUtyah2FvZz3jDprqKjno=";
+ tag = "v0.18.0";
+ hash = "sha256-ivDrHCyW7YaaEtUwkmqRKwT4bYnvy3Nn3fH//STYsPA=";
};
meta.homepage = "https://github.com/nvim-mini/mini.clue/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9930,12 +9942,12 @@ final: prev: {
mini-cmdline = buildVimPlugin {
pname = "mini.cmdline";
- version = "0.17.0-unstable-2026-06-01";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.cmdline";
- rev = "044848fd9b69d01ba05d0a56a530969743a94eba";
- hash = "sha256-fq10UdMxenCCdpBv/S6ZdqCbjXPAj9eWCljBGPRMWOI=";
+ tag = "v0.18.0";
+ hash = "sha256-WCsFDbk4/Cql9kJ44m++YlanasLE7ptYaaGrLoSpxYw=";
};
meta.homepage = "https://github.com/nvim-mini/mini.cmdline/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9944,12 +9956,12 @@ final: prev: {
mini-colors = buildVimPlugin {
pname = "mini.colors";
- version = "0.17.0-unstable-2026-05-12";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.colors";
- rev = "c40f49f3d41a3207f1b8f854919837c34acdc0c5";
- hash = "sha256-dcsAoj9r02YuWC0gz1BtjSVguQNxyD85Q4mEp3cDsSk=";
+ tag = "v0.18.0";
+ hash = "sha256-YMBNhdIRSAKhTA3h0K1jKAW4+z/+Nj6kApMAHxkIUaE=";
};
meta.homepage = "https://github.com/nvim-mini/mini.colors/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9958,12 +9970,12 @@ final: prev: {
mini-comment = buildVimPlugin {
pname = "mini.comment";
- version = "0.17.0-unstable-2026-05-12";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.comment";
- rev = "fc87ba6554f182161d9a4bab5017c575571f000f";
- hash = "sha256-kNELUIgJxiEJHj+evZt0aG4+Nvzdow1NpZOI2M2xTaU=";
+ tag = "v0.18.0";
+ hash = "sha256-14YdoEPMudcfYWrb62Fv2GuoWW85v2F9s3/yKxbFN88=";
};
meta.homepage = "https://github.com/nvim-mini/mini.comment/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9972,12 +9984,12 @@ final: prev: {
mini-completion = buildVimPlugin {
pname = "mini.completion";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.completion";
- rev = "04abe6fc7860858785ba63c435d76bf5b8b64b5f";
- hash = "sha256-DYJkOr64I1CLo5N+vgRa4xIbi3SUSZVPyy0e0Qo39C0=";
+ tag = "v0.18.0";
+ hash = "sha256-GD6s5qDvKrGk3qM+rk5L8fp7SmvhfKrZO+B6h7cwpAg=";
};
meta.homepage = "https://github.com/nvim-mini/mini.completion/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -9986,12 +9998,12 @@ final: prev: {
mini-cursorword = buildVimPlugin {
pname = "mini.cursorword";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.cursorword";
- rev = "a01471856e462144ea53972f22a67e790be68ee6";
- hash = "sha256-udcgvHbdBgQnxNix5cRK+FgEraZGdvma+HnVX+b7FPo=";
+ tag = "v0.18.0";
+ hash = "sha256-FHD3fBCmYpw3P/o//CocQNSBoElOr7EleIdiSKM7c8E=";
};
meta.homepage = "https://github.com/nvim-mini/mini.cursorword/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10000,12 +10012,12 @@ final: prev: {
mini-deps = buildVimPlugin {
pname = "mini.deps";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.deps";
- rev = "9da6c44316de10f4227ff366d574a2baa4004b1b";
- hash = "sha256-QGDLIXIMynE6c5iC56z9bXB2d2iPSOYeq5IOFEIsRYA=";
+ tag = "v0.18.0";
+ hash = "sha256-nbtOiQAgUfgoLzjXVb/SKPVRBp7bdYLBvYPg4CvchsI=";
};
meta.homepage = "https://github.com/nvim-mini/mini.deps/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10014,12 +10026,12 @@ final: prev: {
mini-diff = buildVimPlugin {
pname = "mini.diff";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.diff";
- rev = "5af2b6be4a4beb673f3196a414f6fd932bbedd48";
- hash = "sha256-DVvZOwUQCT/TGfkdy65BjH7gPPDIQ9ib2VCqOPzG5fs=";
+ tag = "v0.18.0";
+ hash = "sha256-ZhCsTAzuVRMbVSWWepsA8qrS1GTPNokm0NxXn3hYEoM=";
};
meta.homepage = "https://github.com/nvim-mini/mini.diff/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10028,12 +10040,12 @@ final: prev: {
mini-doc = buildVimPlugin {
pname = "mini.doc";
- version = "0.17.0-unstable-2026-05-12";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.doc";
- rev = "bc3a3ecfd38cbda6752cbe4559aca225085dd90e";
- hash = "sha256-Qv7mbu/X6UoPG66oMR3TMcyWSAnc1AZUrhCGLd58M6w=";
+ tag = "v0.18.0";
+ hash = "sha256-g1JvCOxQY5oFEr2Q5l8e31gC0O5VvIP9ZuHncK83QSE=";
};
meta.homepage = "https://github.com/nvim-mini/mini.doc/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10042,12 +10054,12 @@ final: prev: {
mini-extra = buildVimPlugin {
pname = "mini.extra";
- version = "0.17.0-unstable-2026-06-07";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.extra";
- rev = "eb21c1117207d3aa1ae532c666c692e94909087e";
- hash = "sha256-kViQTJ5jzCXf7McuikvwaqfzB54JSheyeiBzSKoq9vY=";
+ tag = "v0.18.0";
+ hash = "sha256-QjA7O9AXfRWgsq3ma2Q0eonD66WRvd4qT3Jk61PgfG0=";
};
meta.homepage = "https://github.com/nvim-mini/mini.extra/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10056,12 +10068,12 @@ final: prev: {
mini-files = buildVimPlugin {
pname = "mini.files";
- version = "0.17.0-unstable-2026-06-05";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.files";
- rev = "02874bc653fbecf2bee2c65441d0ebd09110f011";
- hash = "sha256-IfV2W9EFVtfXofEbwiWwCK8zprJlXiAKZgvKhnsp/mc=";
+ tag = "v0.18.0";
+ hash = "sha256-RhD0kEdJL47nSDjrKzuN+l5+65gJ/7w+eqtP3zLVln8=";
};
meta.homepage = "https://github.com/nvim-mini/mini.files/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10070,12 +10082,12 @@ final: prev: {
mini-fuzzy = buildVimPlugin {
pname = "mini.fuzzy";
- version = "0.17.0-unstable-2026-05-12";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.fuzzy";
- rev = "2c0e7809e0c51dccb335d01f02d4f6b2b4d6fcdc";
- hash = "sha256-AX/Di9KfRryWthGs1kIObxlR9vG9/YAXylWyPGxe+js=";
+ tag = "v0.18.0";
+ hash = "sha256-xk7PqaKzvUXl7v2DSRD3xu6aV1lrHB0GtbGOaoSRyZc=";
};
meta.homepage = "https://github.com/nvim-mini/mini.fuzzy/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10084,12 +10096,12 @@ final: prev: {
mini-git = buildVimPlugin {
pname = "mini-git";
- version = "0.17.0-unstable-2026-05-12";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini-git";
- rev = "7c81d173462042cd3a3571643bce03a6c255fd41";
- hash = "sha256-hII9oQKitOzpycdgP41c4INZUJ1kEtwUtf8SlfFDlZU=";
+ tag = "v0.18.0";
+ hash = "sha256-Xu3yiQU1ibvq1skFiyie5IkHWGU7UQ46jChyO3hrgZw=";
};
meta.homepage = "https://github.com/nvim-mini/mini-git/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10098,12 +10110,12 @@ final: prev: {
mini-hipatterns = buildVimPlugin {
pname = "mini.hipatterns";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.hipatterns";
- rev = "e25cf080aae092a651a92fa5e477f64a61adbebf";
- hash = "sha256-0oheCwV4qpU45f7S2jFkqMwpRiatjXjtDFAerNU2fLQ=";
+ tag = "v0.18.0";
+ hash = "sha256-7ydDX9dKXFKg4o9omp+ZZfC3DLjQoIDC6n+iAYoH2ug=";
};
meta.homepage = "https://github.com/nvim-mini/mini.hipatterns/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10112,12 +10124,12 @@ final: prev: {
mini-hues = buildVimPlugin {
pname = "mini.hues";
- version = "0.17.0-unstable-2026-06-04";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.hues";
- rev = "ab36ead75b445fd81e00e7c3e1cbf0bc1e8f2d14";
- hash = "sha256-QYl68gVtqsmIrVAN1hUH3kkdmNAKAHPjMhIXTFJm3iI=";
+ tag = "v0.18.0";
+ hash = "sha256-x//2b2QUSmHP7HgjG1Ri31vwJ0acDkI6Pr75927wNrI=";
};
meta.homepage = "https://github.com/nvim-mini/mini.hues/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10126,12 +10138,12 @@ final: prev: {
mini-icons = buildVimPlugin {
pname = "mini.icons";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.icons";
- rev = "520995f1d75da0e4cc901ee95080b1ff2bc46b94";
- hash = "sha256-Q61iFTDA2groQu3qMNJu0yuVnB6NtsGNihpGD5ppeuI=";
+ tag = "v0.18.0";
+ hash = "sha256-Lr5/aHSnwfDAidvGTIOfEvp0lNpnp5kFNnIUSssnaOw=";
};
meta.homepage = "https://github.com/nvim-mini/mini.icons/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10140,12 +10152,12 @@ final: prev: {
mini-indentscope = buildVimPlugin {
pname = "mini.indentscope";
- version = "0.17.0-unstable-2026-06-07";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.indentscope";
- rev = "98453149c3394ca3d1bf252e838e4777573b63e2";
- hash = "sha256-6b6rVX74wp6cnSaQyZ0hCfWOD94skyFInZgg8JHD5HY=";
+ tag = "v0.18.0";
+ hash = "sha256-ahA7Ud+f55wpEK7Lp0Zuf1djB8NcIpqmvwFPO2r6EPs=";
};
meta.homepage = "https://github.com/nvim-mini/mini.indentscope/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10154,12 +10166,12 @@ final: prev: {
mini-input = buildVimPlugin {
pname = "mini.input";
- version = "0-unstable-2026-06-07";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.input";
- rev = "44477bc40a1d9556decab08cd0e13187f9d909e4";
- hash = "sha256-ex0BKThn97+lnWm6EaI4JuCViQ7B6na+n5yCX9OJavU=";
+ tag = "v0.18.0";
+ hash = "sha256-lATmLit9sU/7xcoEz4gD277hoDbPuifGGIwlbWKNrjg=";
};
meta.homepage = "https://github.com/nvim-mini/mini.input/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10168,12 +10180,12 @@ final: prev: {
mini-jump = buildVimPlugin {
pname = "mini.jump";
- version = "0.17.0-unstable-2026-06-07";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.jump";
- rev = "741a2ac3ac4015a78ee5e7b90ba054508686457a";
- hash = "sha256-q5e1HScZsQFNNiMBd9Kn4qjW+oV5XfZUtkBeYduZ9+o=";
+ tag = "v0.18.0";
+ hash = "sha256-AsrwzaOsh+c3BtN4knD6FvLvQl0JwQ8kPi6c/8KZGSw=";
};
meta.homepage = "https://github.com/nvim-mini/mini.jump/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10182,12 +10194,12 @@ final: prev: {
mini-jump2d = buildVimPlugin {
pname = "mini.jump2d";
- version = "0.17.0-unstable-2026-06-05";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.jump2d";
- rev = "f95769bc20586f63d16d814175f759bf4d44bfd2";
- hash = "sha256-AvkV549zYxtRnjWtZHwGwwPHMy1D2sWNxkUSUQhMyCE=";
+ tag = "v0.18.0";
+ hash = "sha256-tEYxxutbVzMg2nthOVvMUQFW9MZDLlTTB9HRMS2Y62M=";
};
meta.homepage = "https://github.com/nvim-mini/mini.jump2d/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10196,12 +10208,12 @@ final: prev: {
mini-keymap = buildVimPlugin {
pname = "mini.keymap";
- version = "0.17.0-unstable-2026-05-12";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.keymap";
- rev = "14f4cf1058bd3458d4cccd6a4587b6ebb1d43385";
- hash = "sha256-jDrh4BE5U4+ADmMtZpUiY4azxG/8H7ntz54VW6mLh3g=";
+ tag = "v0.18.0";
+ hash = "sha256-hAkaV2IXBYhoObNOZO2JOxYC+0f2dY090x+d91B0MCg=";
};
meta.homepage = "https://github.com/nvim-mini/mini.keymap/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10210,12 +10222,12 @@ final: prev: {
mini-map = buildVimPlugin {
pname = "mini.map";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.map";
- rev = "b5c13c5740afdd0f5b0f0af9aa2928e4481212af";
- hash = "sha256-WwTnkEVHubvI55ipKy1aA81H4LR7VuBi6KvIXUS0/p4=";
+ tag = "v0.18.0";
+ hash = "sha256-c80XxN/jrC9qqCWmERaRrpNOrkDadcXuy02zr7ffvlI=";
};
meta.homepage = "https://github.com/nvim-mini/mini.map/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10224,12 +10236,12 @@ final: prev: {
mini-misc = buildVimPlugin {
pname = "mini.misc";
- version = "0.17.0-unstable-2026-05-28";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.misc";
- rev = "eb2246ede307fc863a12e9d9b0fa4b7ca9b88188";
- hash = "sha256-gX1li7+jJq0/I0rT13aJsBIbFFrufJIFhz2bFGGy+mw=";
+ tag = "v0.18.0";
+ hash = "sha256-m5jbhTNVT2A9lQhwEVGay3hJD7SkFc+az6DwfishVj0=";
};
meta.homepage = "https://github.com/nvim-mini/mini.misc/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10238,12 +10250,12 @@ final: prev: {
mini-move = buildVimPlugin {
pname = "mini.move";
- version = "0.17.0-unstable-2026-05-12";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.move";
- rev = "a776027e68fe763987a0132d59877d651a7c0130";
- hash = "sha256-f+MHsSCR9Y2gVV7X/o+HIVzbwZZVG7eL7Q9XILbqAsc=";
+ tag = "v0.18.0";
+ hash = "sha256-HVTI8k5KJeULmW6AC1qgCUXF5lHDcCzzp1aaI4H1PgU=";
};
meta.homepage = "https://github.com/nvim-mini/mini.move/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10252,12 +10264,12 @@ final: prev: {
mini-notify = buildVimPlugin {
pname = "mini.notify";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.notify";
- rev = "7e75de73c60590e3f35d5cecd5677a68a437fc54";
- hash = "sha256-VXhsQM5WQwOTpsus0WOTwmdz4TtGVyM8ZZOpXBqqqv4=";
+ tag = "v0.18.0";
+ hash = "sha256-5qd0Kg7HCYHlgMjCiDRgqCXuqrlM2VuwpSjWXXVazN4=";
};
meta.homepage = "https://github.com/nvim-mini/mini.notify/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10266,12 +10278,12 @@ final: prev: {
mini-nvim = buildVimPlugin {
pname = "mini.nvim";
- version = "0.17.0-unstable-2026-06-07";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.nvim";
- rev = "ff8b3580935818ef2f21bdd651f057a2ae071eab";
- hash = "sha256-wVRhe2ufPG/2DRtJGyAAhoCOTX8CLB2zZ8TQOQz9TqQ=";
+ tag = "v0.18.0";
+ hash = "sha256-kCcyl4KUEY51UeGYmvuLD1hswWbwKhHGUt/0XLbPuUw=";
};
meta.homepage = "https://github.com/nvim-mini/mini.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10280,12 +10292,12 @@ final: prev: {
mini-operators = buildVimPlugin {
pname = "mini.operators";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.operators";
- rev = "d9b2f3892ad177cc141987ccfa8944cf21474f77";
- hash = "sha256-FrkWVfNzHaVqqvmprj8kn7MubSXjgXn/z0qRT5+hMwM=";
+ tag = "v0.18.0";
+ hash = "sha256-9RVfrlRd8THUJb8nJKqTbUPQKPwN8xyKzqZvr0oGQk0=";
};
meta.homepage = "https://github.com/nvim-mini/mini.operators/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10294,12 +10306,12 @@ final: prev: {
mini-pairs = buildVimPlugin {
pname = "mini.pairs";
- version = "0.17.0-unstable-2026-05-12";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.pairs";
- rev = "30cf2f01c4aaa2033db67376b9924fa2442c05d6";
- hash = "sha256-rLl7zM97oyi/M4jsq/Zvl9u7Z3enLvNzByyhT4xaCg8=";
+ tag = "v0.18.0";
+ hash = "sha256-35ewaDXW5RoQUHns0hVXMw6OTf/BTvKXLd1u/warDSE=";
};
meta.homepage = "https://github.com/nvim-mini/mini.pairs/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10308,12 +10320,12 @@ final: prev: {
mini-pick = buildVimPlugin {
pname = "mini.pick";
- version = "0.17.0-unstable-2026-06-06";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.pick";
- rev = "1ffba38c7221669d3da7792d4bbe1c9761075f4d";
- hash = "sha256-N/RdA7mEno3E5D4c9gxm9ZIlzAz3f7CPAJbyGEiECBM=";
+ tag = "v0.18.0";
+ hash = "sha256-ebjHOQpHWsOdAIdJjimCJqXOmKCZnLobLOF8JroRRxk=";
};
meta.homepage = "https://github.com/nvim-mini/mini.pick/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10322,12 +10334,12 @@ final: prev: {
mini-sessions = buildVimPlugin {
pname = "mini.sessions";
- version = "0.17.0-unstable-2026-05-12";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.sessions";
- rev = "e59286b20fbf61171039ddfebc736cf9562e75d5";
- hash = "sha256-rULcDHhAcZDQzX6KJ+PoZncNqGnU1t4iSBpUiGBHZ+g=";
+ tag = "v0.18.0";
+ hash = "sha256-hXdpKozw9ZFkrIe/wGxEJR8j02EAPnB5txq+NtrjHgI=";
};
meta.homepage = "https://github.com/nvim-mini/mini.sessions/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10336,12 +10348,12 @@ final: prev: {
mini-snippets = buildVimPlugin {
pname = "mini.snippets";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.snippets";
- rev = "9a08aa14e02abb790c823a622d7d6c736cbbe65a";
- hash = "sha256-1w8t2ANiBue7mNk5QYhi8aBHGGNvIbrKPQgGqGO0RqI=";
+ tag = "v0.18.0";
+ hash = "sha256-AoSGqdCBdcCwZdwjhgSU3ACvE40FlrZARN/Lp1aZg54=";
};
meta.homepage = "https://github.com/nvim-mini/mini.snippets/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10350,12 +10362,12 @@ final: prev: {
mini-splitjoin = buildVimPlugin {
pname = "mini.splitjoin";
- version = "0.17.0-unstable-2026-05-12";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.splitjoin";
- rev = "146aef247d9bfc58bab20dd921ba6b75ac4b8cf9";
- hash = "sha256-lW9RY8ky7WBL8H5joXiOubOhJjiMGrmRmR/4e59s2g4=";
+ tag = "v0.18.0";
+ hash = "sha256-/3S6D+kuSXgmf3dlCRcABnFpNY6eaFUbEDxGHduh1Es=";
};
meta.homepage = "https://github.com/nvim-mini/mini.splitjoin/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10364,12 +10376,12 @@ final: prev: {
mini-starter = buildVimPlugin {
pname = "mini.starter";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.starter";
- rev = "a7d8b353cf120fee32bb5d88e7a9de5eaec746e7";
- hash = "sha256-fzp3maSVIQYh4Gr5FfDiAdrXdK7Z+V9hpqjgftAkG5U=";
+ tag = "v0.18.0";
+ hash = "sha256-4oaQrsp5f2NqxiiMEzHel0U/onctfnbCBKVTJqhQUPM=";
};
meta.homepage = "https://github.com/nvim-mini/mini.starter/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10378,12 +10390,12 @@ final: prev: {
mini-statusline = buildVimPlugin {
pname = "mini.statusline";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.statusline";
- rev = "7091f554d7d26b5d55f4c937634da53ba277a44a";
- hash = "sha256-EUSzEt4JJI+bT6ll511tT+7ZTkpNqBYxQYw/e+CwHtM=";
+ tag = "v0.18.0";
+ hash = "sha256-CVebe3F7o7o+qXiEQkngfvmgtGF7dt1u7ALh1bgedzw=";
};
meta.homepage = "https://github.com/nvim-mini/mini.statusline/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10392,12 +10404,12 @@ final: prev: {
mini-surround = buildVimPlugin {
pname = "mini.surround";
- version = "0.17.0-unstable-2026-06-05";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.surround";
- rev = "9fd5ebef2b34cc4ac3c0f1811a6726ea6d92fa91";
- hash = "sha256-5dJ8GI9NtYbiAUvYdRjtxrTIUVS41VRkWvLtrBNqbhs=";
+ tag = "v0.18.0";
+ hash = "sha256-ILKwZ1+Dh4HH5DNnNwqH7xnDyCIEnxPRjLDCwqWOeXY=";
};
meta.homepage = "https://github.com/nvim-mini/mini.surround/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10406,12 +10418,12 @@ final: prev: {
mini-tabline = buildVimPlugin {
pname = "mini.tabline";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.tabline";
- rev = "7d4a8a79f37361ad287d27bda0f37fc53f924a50";
- hash = "sha256-KlrjsgsSnuW0Fpr2Jq2YYRCiw0+KET+YHEKiOnXfYk8=";
+ tag = "v0.18.0";
+ hash = "sha256-6vLYDvQWbI6xILsdedJCU7G129TzcMJdwC0xB50Gw8Y=";
};
meta.homepage = "https://github.com/nvim-mini/mini.tabline/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10420,11 +10432,11 @@ final: prev: {
mini-trailspace = buildVimPlugin {
pname = "mini.trailspace";
- version = "0.17.0-unstable-2026-05-19";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.trailspace";
- rev = "22653218f1aedc9bf306c8b4e8ec2c8a575f6fae";
+ tag = "v0.18.0";
hash = "sha256-7qPgRedHWA3IQhshOGjENDBztJA+Q/j+ASpLdf9BQwM=";
};
meta.homepage = "https://github.com/nvim-mini/mini.trailspace/";
@@ -10434,12 +10446,12 @@ final: prev: {
mini-visits = buildVimPlugin {
pname = "mini.visits";
- version = "0.17.0-unstable-2026-06-01";
+ version = "0.18.0";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.visits";
- rev = "d3cce4e1f07d59e4e2e1d31502e342fc48376c19";
- hash = "sha256-7fHzk7DsoX2ocwYelaXsOUrxuwAtvD6giHsQC9mVz1E=";
+ tag = "v0.18.0";
+ hash = "sha256-rDVKgX2T85i8b29QI8549RaHoEWhUQmxi++hwDR9mZk=";
};
meta.homepage = "https://github.com/nvim-mini/mini.visits/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -10490,12 +10502,12 @@ final: prev: {
mkdnflow-nvim = buildVimPlugin {
pname = "mkdnflow.nvim";
- version = "2.22.2-unstable-2026-03-25";
+ version = "2.22.3";
src = fetchFromGitHub {
owner = "jakewvincent";
repo = "mkdnflow.nvim";
- rev = "f20732686f70f60f18f09f4befe984ae63a99201";
- hash = "sha256-DxoSwy8WTgfKpguNVKsII2IUNfMS4oDGO18JmqalCcQ=";
+ tag = "v2.22.3";
+ hash = "sha256-z382m54owzdh5+xUHjGdELuZqc8kD4z5TaqzptO0Fac=";
};
meta.homepage = "https://github.com/jakewvincent/mkdnflow.nvim/";
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
@@ -10574,12 +10586,12 @@ final: prev: {
molten-nvim = buildVimPlugin {
pname = "molten-nvim";
- version = "1.9.2-unstable-2026-03-01";
+ version = "1.9.2-unstable-2026-07-03";
src = fetchFromGitHub {
owner = "benlubas";
repo = "molten-nvim";
- rev = "c1db39e78fe18559d8f2204bf5c4d476bdc80d3e";
- hash = "sha256-FsDtd50Ehyd6EVdyU3fIDefkZJsOIi5bMPPdV3rKZw0=";
+ rev = "bedea63819c618e007e7c40059fc6e72d598c8df";
+ hash = "sha256-fzVqcow/Ugjq/owYt6wnz22iF/vHGZEKOkPV0kabWYE=";
};
meta.homepage = "https://github.com/benlubas/molten-nvim/";
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
@@ -10684,6 +10696,20 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
+ multiple-cursors-nvim = buildVimPlugin {
+ pname = "multiple-cursors.nvim";
+ version = "0.15-unstable-2026-05-10";
+ src = fetchFromGitHub {
+ owner = "brenton-leighton";
+ repo = "multiple-cursors.nvim";
+ rev = "eae76d4c5f7ede2d45746dc2affb5e7a139e4aa8";
+ hash = "sha256-iLQT+M0wL/Bh0zzgLSozSRjsELzKochMlM6djUwg/og=";
+ };
+ meta.homepage = "https://github.com/brenton-leighton/multiple-cursors.nvim/";
+ meta.license = getLicenseFromSpdxId "Apache-2.0";
+ meta.hydraPlatforms = [ ];
+ };
+
muren-nvim = buildVimPlugin {
pname = "muren.nvim";
version = "0-unstable-2025-02-09";
@@ -11022,12 +11048,12 @@ final: prev: {
neoconf-nvim = buildVimPlugin {
pname = "neoconf.nvim";
- version = "1.4.0-unstable-2026-06-10";
+ version = "1.4.0-unstable-2026-07-19";
src = fetchFromGitHub {
owner = "folke";
repo = "neoconf.nvim";
- rev = "3a0a976a10cba0ff9d9406e4652755881321ecf9";
- hash = "sha256-hPv22eaPTY0UKoCxOXq/D1eUGOomAc8D0CB5mRs1ueQ=";
+ rev = "1246df7a5d1811d84212f11edb43550cd8380ebd";
+ hash = "sha256-hlQf+xJ+/9OTqp5VtPsNE7QW6uVjWeUkqQ8r1u6MWkI=";
};
meta.homepage = "https://github.com/folke/neoconf.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -11106,12 +11132,12 @@ final: prev: {
neogit = buildVimPlugin {
pname = "neogit";
- version = "3.0.0-unstable-2026-05-13";
+ version = "3.0.0-unstable-2026-07-16";
src = fetchFromGitHub {
owner = "NeogitOrg";
repo = "neogit";
- rev = "99326a1310fb2d616b455d2fd16d01bf00682f06";
- hash = "sha256-ZKK4JbeuMGYvUjG1B6vLZTeSMeQTXQGFQAlIMqqN660=";
+ rev = "f8674ec894315c02449b61c9de9a116c5aafeb90";
+ hash = "sha256-ETu9zy2In3M8/3fqYUfTRt0mKiocm3paJFjgQ82Yj3I=";
};
meta.homepage = "https://github.com/NeogitOrg/neogit/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -11487,12 +11513,12 @@ final: prev: {
neotest-java = buildVimPlugin {
pname = "neotest-java";
- version = "0.37.3";
+ version = "0.38.0";
src = fetchFromGitHub {
owner = "rcasia";
repo = "neotest-java";
- tag = "v0.37.3";
- hash = "sha256-ALVudtC49gAQOGwucOh7zvhbUyZX0lTGyizhn+QCPl4=";
+ tag = "v0.38.0";
+ hash = "sha256-R24mbFbYTH166gq8EZOuLDZ7dA2Yhjmrc77K2os5jtE=";
};
meta.homepage = "https://github.com/rcasia/neotest-java/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -11599,12 +11625,12 @@ final: prev: {
neotest-python = buildVimPlugin {
pname = "neotest-python";
- version = "0-unstable-2026-04-05";
+ version = "0-unstable-2026-07-15";
src = fetchFromGitHub {
owner = "nvim-neotest";
repo = "neotest-python";
- rev = "e6df4f1892f6137f58135917db24d1655937d831";
- hash = "sha256-TUu50qK97RuBI1eOD0JGtSq3M7o0HwlRKjLz2SCfjlE=";
+ rev = "1b56ca4ba51c6014f986d6548ee629bdc95589d1";
+ hash = "sha256-9FL0qWTdkeX57ujRvSa9QqO/ZIthlzLSJyKHtNitbSg=";
};
meta.homepage = "https://github.com/nvim-neotest/neotest-python/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -11613,12 +11639,12 @@ final: prev: {
neotest-rspec = buildVimPlugin {
pname = "neotest-rspec";
- version = "0-unstable-2025-09-14";
+ version = "0-unstable-2026-06-18";
src = fetchFromGitHub {
owner = "olimorris";
repo = "neotest-rspec";
- rev = "e7dc67c1167a9e593c804a6be6808ba9a5920d43";
- hash = "sha256-45DTXO0CQ/YCivDev0We7+7Ca4i0kHKZmbSc73lkPSY=";
+ rev = "7629f8c2837becb72090fbafce58506bb56a00f0";
+ hash = "sha256-6FUhSFpQ243mS2Cu7ou7gCr2NlTRtk9+n43aPDeE1U8=";
};
meta.homepage = "https://github.com/olimorris/neotest-rspec/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -11669,12 +11695,12 @@ final: prev: {
neotest-vitest = buildVimPlugin {
pname = "neotest-vitest";
- version = "0.2.0-unstable-2026-05-28";
+ version = "0.2.0-unstable-2026-07-12";
src = fetchFromGitHub {
owner = "marilari88";
repo = "neotest-vitest";
- rev = "2f19d215d7d4d7f121826f99f6f35a81e2c18a6f";
- hash = "sha256-QvtaCUno7/8pU32f5YLWrlYAzjDhBTmCtgxweIUFAow=";
+ rev = "c3c69715da4b158069fd4262083e7219a5c14cfb";
+ hash = "sha256-BPERc4+iWEu1UWDXv+MaSUXJR4KNFFAqrPXxyJCSe9I=";
};
meta.homepage = "https://github.com/marilari88/neotest-vitest/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -11723,6 +11749,20 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
+ neovim-project = buildVimPlugin {
+ pname = "neovim-project";
+ version = "0.1";
+ src = fetchFromGitHub {
+ owner = "coffebar";
+ repo = "neovim-project";
+ tag = "0.1";
+ hash = "sha256-OCo4rF+mJ5it1S7UhlzpPpbi6Zxt211c4v6t1IPf1rw=";
+ };
+ meta.homepage = "https://github.com/coffebar/neovim-project/";
+ meta.license = getLicenseFromSpdxId "Apache-2.0";
+ meta.hydraPlatforms = [ ];
+ };
+
neovim-sensible = buildVimPlugin {
pname = "neovim-sensible";
version = "0-unstable-2017-09-20";
@@ -11737,6 +11777,20 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
+ neovim-session-manager = buildVimPlugin {
+ pname = "neovim-session-manager";
+ version = "0-unstable-2026-01-26";
+ src = fetchFromGitHub {
+ owner = "shatur";
+ repo = "neovim-session-manager";
+ rev = "89d253a6c68af60b49570044591d5b8701866601";
+ hash = "sha256-d7lXPIy6qJDPvFk8twwkqKUWI205HfTqXMspnVRkng0=";
+ };
+ meta.homepage = "https://github.com/shatur/neovim-session-manager/";
+ meta.license = getLicenseFromSpdxId "GPL-3.0-only";
+ meta.hydraPlatforms = [ ];
+ };
+
neovim-tips = buildVimPlugin {
pname = "neovim-tips";
version = "0.8.4";
@@ -11962,12 +12016,12 @@ final: prev: {
nightfox-nvim = buildVimPlugin {
pname = "nightfox.nvim";
- version = "3.10.0-unstable-2026-05-03";
+ version = "3.10.0-unstable-2026-07-04";
src = fetchFromGitHub {
owner = "EdenEast";
repo = "nightfox.nvim";
- rev = "26b61b1f856ec37cae3cb64f5690adb955f246a1";
- hash = "sha256-xSnMYGilRjNHh1G1eOghl8Dr93HsCe3WHHAkchCyW+E=";
+ rev = "4dacd3f0185a2227bdf3b6c0975a8f0bf87cac9a";
+ hash = "sha256-LR0VqMMuH3GN6uI2aun7yOFsLxhGASMnFuzMrhPNJ+Q=";
};
meta.homepage = "https://github.com/EdenEast/nightfox.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -12100,6 +12154,20 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
+ none-ls-extras-nvim = buildVimPlugin {
+ pname = "none-ls-extras.nvim";
+ version = "0-unstable-2026-07-17";
+ src = fetchFromGitHub {
+ owner = "nvimtools";
+ repo = "none-ls-extras.nvim";
+ rev = "9a8b8a9aeb43382e5aaf49b00b7cfb5d42d32118";
+ hash = "sha256-YmDhDUqSJPOllXzkyrVUgnshrI5+Kt5Te8tEmnjOAVQ=";
+ };
+ meta.homepage = "https://github.com/nvimtools/none-ls-extras.nvim/";
+ meta.license = getLicenseFromSpdxId "Unlicense";
+ meta.hydraPlatforms = [ ];
+ };
+
none-ls-nvim = buildVimPlugin {
pname = "none-ls.nvim";
version = "0-unstable-2026-06-02";
@@ -12184,20 +12252,6 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
- null-ls-nvim = buildVimPlugin {
- pname = "null-ls.nvim";
- version = "0-unstable-2023-08-12";
- src = fetchFromGitHub {
- owner = "jose-elias-alvarez";
- repo = "null-ls.nvim";
- rev = "0010ea927ab7c09ef0ce9bf28c2b573fc302f5a7";
- hash = "sha256-cWA0rzkOp/ekVKaFee7iea1lhnqKtWUIU+fW5M950wI=";
- };
- meta.homepage = "https://github.com/jose-elias-alvarez/null-ls.nvim/";
- meta.license = unfree;
- meta.hydraPlatforms = [ ];
- };
-
numb-nvim = buildVimPlugin {
pname = "numb.nvim";
version = "1.1.0";
@@ -12214,12 +12268,12 @@ final: prev: {
nvchad = buildVimPlugin {
pname = "nvchad";
- version = "2.5-unstable-2026-04-13";
+ version = "2.5-unstable-2026-07-03";
src = fetchFromGitHub {
owner = "nvchad";
repo = "nvchad";
- rev = "d042cc975247c2aa55fcb228e5d146dc1dc6c648";
- hash = "sha256-WNQMaM5EQBRQC9JfvEIgFhn3K5n8q0YeiJ9NdG3E+z4=";
+ rev = "add44b952d631981614bbb8cfc6f7002f296dfe6";
+ hash = "sha256-EuP+/HWJgqwG5LR2rNvtq7mhFkUDs0oyeG6xbbPogC4=";
};
meta.homepage = "https://github.com/nvchad/nvchad/";
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
@@ -12228,12 +12282,12 @@ final: prev: {
nvchad-ui = buildVimPlugin {
pname = "nvchad-ui";
- version = "0-unstable-2026-05-10";
+ version = "0-unstable-2026-07-19";
src = fetchFromGitHub {
owner = "nvchad";
repo = "ui";
- rev = "3e67e9d5325fd47fdbc90ca00a147db2f3525754";
- hash = "sha256-bl2erzyZCZp9seb4E7o/SFsBUHwocVOmQNv0mbO5yR0=";
+ rev = "222c8cc1ad66076c05b7c9d0695781ebe3799d88";
+ hash = "sha256-SKSRwXi0KdJtWkmak1LLwXIUukwIhMxKHy9HIMnu0DQ=";
};
meta.homepage = "https://github.com/nvchad/ui/";
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
@@ -12396,12 +12450,12 @@ final: prev: {
nvim-cokeline = buildVimPlugin {
pname = "nvim-cokeline";
- version = "0.4.0-unstable-2025-01-24";
+ version = "0.4.0-unstable-2026-06-19";
src = fetchFromGitHub {
owner = "willothy";
repo = "nvim-cokeline";
- rev = "9fbed130683b7b6f73198c09e35ba4b33f547c08";
- hash = "sha256-O0msAljyNYj4zdFBOCR43QiqHYl1e9c4MASi9MmS+R4=";
+ rev = "854849e6b853a6ee1f17d62c80ae37435cfb0a3e";
+ hash = "sha256-gSwGjKpjVQ2zvbX7jlfdqc4Z0k89uWcKhxYsQaFs24M=";
};
meta.homepage = "https://github.com/willothy/nvim-cokeline/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -12410,12 +12464,12 @@ final: prev: {
nvim-colorizer-lua = buildVimPlugin {
pname = "nvim-colorizer.lua";
- version = "0-unstable-2026-05-30";
+ version = "0-unstable-2026-07-14";
src = fetchFromGitHub {
owner = "catgoose";
repo = "nvim-colorizer.lua";
- rev = "664c0b7cea1de71f8b65dfe951b7996fc3e6ccde";
- hash = "sha256-qVFQGJMGr0htwZqarhMdh7yG6SSH/rv8yqmp1CsoT3I=";
+ rev = "72a05f62c52241bc7441c820eb53946f92b2e6a4";
+ hash = "sha256-hdnk816SBKWD/Ula4hjQ3o14I3+fBmEengfo72S4+8U=";
};
meta.homepage = "https://github.com/catgoose/nvim-colorizer.lua/";
meta.license = unfree;
@@ -12494,11 +12548,11 @@ final: prev: {
nvim-dap = buildVimPlugin {
pname = "nvim-dap";
- version = "0.10.0-unstable-2026-05-20";
+ version = "0.10.0-unstable-2026-06-19";
src = fetchgit {
url = "https://codeberg.org/mfussenegger/nvim-dap/";
- rev = "531771530d4f82ad2d21e436e3cc052d68d7aebb";
- hash = "sha256-pgD51NWFyjK1FrXZ8MFFIM9DX2OBxL7cd7JlST2Twvc=";
+ rev = "9e848e09a697ee95302a3ef2dd43fd6eb709e570";
+ hash = "sha256-IHm3CwO7qUTtOZqhljDjSzz4WbaAJ4kPY384MyZZ9ac=";
};
meta.homepage = "https://codeberg.org/mfussenegger/nvim-dap/";
meta.license = unfree;
@@ -12521,11 +12575,11 @@ final: prev: {
nvim-dap-disasm = buildVimPlugin {
pname = "nvim-dap-disasm";
- version = "0-unstable-2026-02-25";
+ version = "0-unstable-2026-06-14";
src = fetchgit {
url = "https://codeberg.org/Jorenar/nvim-dap-disasm";
- rev = "1119f3f2b22e411adcd123cdcf6d0425b61a31a7";
- hash = "sha256-lq0tbMksVXccf6GGD7OxWAuoD9w8tlt30dpJSMtN4g8=";
+ rev = "b86a1e3f03f268635f9b362ccc8ffa5f240dd25d";
+ hash = "sha256-hkoFEH8UoAzWOue1YTrHCQn7/N54fXsHpOZ5xAaSbIw=";
};
meta.homepage = "https://codeberg.org/Jorenar/nvim-dap-disasm";
meta.license = unfree;
@@ -12631,12 +12685,12 @@ final: prev: {
nvim-dap-ui = buildVimPlugin {
pname = "nvim-dap-ui";
- version = "4.0.0-unstable-2026-04-05";
+ version = "4.0.0-unstable-2026-07-14";
src = fetchFromGitHub {
owner = "rcarriga";
repo = "nvim-dap-ui";
- rev = "1a66cabaa4a4da0be107d5eda6d57242f0fe7e49";
- hash = "sha256-J/gUD4X//JtC2HB3HBeONivCQdMnXDnZJWd6jFF9+nk=";
+ rev = "cc9dd33aade7f20bae414d0cba163bc60d4d4b43";
+ hash = "sha256-za3/6W1J6aMvNZQq8ANCq+TGHKHJtSxR/C5t3/oL3DI=";
};
meta.homepage = "https://github.com/rcarriga/nvim-dap-ui/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -12687,12 +12741,12 @@ final: prev: {
nvim-docs-view = buildVimPlugin {
pname = "nvim-docs-view";
- version = "0-unstable-2026-05-08";
+ version = "0-unstable-2026-06-11";
src = fetchFromGitHub {
owner = "amrbashir";
repo = "nvim-docs-view";
- rev = "9a262fa7e181e924d355e8725c68c48f076138b1";
- hash = "sha256-zsrrsTIpjRqDS/NXQH7TA6CjZj3PK8kstD9EB4omSGw=";
+ rev = "a1696d058a4223d8c3615bb305abfa638c5689a9";
+ hash = "sha256-Ws/s3tgFTZczTVDjagBSY2bfso7oWRFB4oy/Y3DFdEA=";
};
meta.homepage = "https://github.com/amrbashir/nvim-docs-view/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -12701,12 +12755,12 @@ final: prev: {
nvim-early-retirement = buildVimPlugin {
pname = "nvim-early-retirement";
- version = "0-unstable-2026-04-06";
+ version = "0-unstable-2026-06-22";
src = fetchFromGitHub {
owner = "chrisgrieser";
repo = "nvim-early-retirement";
- rev = "3b05315a61c8f01bb893249f9e044fc359122c9d";
- hash = "sha256-vc2Q2iiyx6WcEr4RYtvr4s5yYSYKst+DpNG1WNKLQCI=";
+ rev = "dee05ab8d105d091faa4aad5659348f0e9734628";
+ hash = "sha256-FteHivPNYlBbu6xyVFTNMnxNfHe2wN3qb/xBwT4T9c4=";
};
meta.homepage = "https://github.com/chrisgrieser/nvim-early-retirement/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -12757,12 +12811,12 @@ final: prev: {
nvim-gdb = buildVimPlugin {
pname = "nvim-gdb";
- version = "0-unstable-2026-05-08";
+ version = "0-unstable-2026-06-15";
src = fetchFromGitHub {
owner = "sakhnik";
repo = "nvim-gdb";
- rev = "3ea9e52a7be60373a127be9dcc94773bc1d6e25c";
- hash = "sha256-y8dxr4xAOX7+PKCd2h3iMlmWZtmBr9Wp6ecjAYFtunc=";
+ rev = "67abac716b626ece57f3a7c72121542f0b3edfe9";
+ hash = "sha256-6MnwKYvOL3b0hKOnLTvdRYrZkZBYt4XAK2jlFw+DfTM=";
};
meta.homepage = "https://github.com/sakhnik/nvim-gdb/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -12771,12 +12825,12 @@ final: prev: {
nvim-genghis = buildVimPlugin {
pname = "nvim-genghis";
- version = "0-unstable-2026-06-05";
+ version = "0-unstable-2026-06-22";
src = fetchFromGitHub {
owner = "chrisgrieser";
repo = "nvim-genghis";
- rev = "e6fd1f42736b15e63c0c703457c5ca162228a2f3";
- hash = "sha256-UG3yDZJ/j4Z+fDm5/qrVuUUA8rU4oc4chqFJK25jjYw=";
+ rev = "12100e3fe7fa863f60b5b81a3587c8c9d5a5b2ff";
+ hash = "sha256-z4VSvOWY85W6A9jiZkAgY/ezvxSXKBJdgjGXC0Thud0=";
};
meta.homepage = "https://github.com/chrisgrieser/nvim-genghis/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -12813,12 +12867,12 @@ final: prev: {
nvim-highlite = buildVimPlugin {
pname = "nvim-highlite";
- version = "4.22.0-unstable-2026-04-30";
+ version = "4.22.0-unstable-2026-06-17";
src = fetchFromGitHub {
owner = "Iron-E";
repo = "nvim-highlite";
- rev = "4a4d614020d423015e8e08c3335d3f9704d67a6d";
- hash = "sha256-R91WwMm0X1bEckus0YCdZ8RygYXb/W58yLTxyE+dYxc=";
+ rev = "3281bea1080d85f0a878793c0b7b962b9da1c7fd";
+ hash = "sha256-bq4tUf1SLXEgw9p3BrXryreJM89Fe+OG4TyPo9TE1oU=";
};
meta.homepage = "https://github.com/Iron-E/nvim-highlite/";
meta.license = unfree;
@@ -12855,12 +12909,12 @@ final: prev: {
nvim-impairative = buildVimPlugin {
pname = "nvim-impairative";
- version = "0.6.0";
+ version = "0.6.1";
src = fetchFromGitHub {
owner = "idanarye";
repo = "nvim-impairative";
- tag = "v0.6.0";
- hash = "sha256-xl33sp/+wjH8Y8Uoa7j7kaQIgcMXUWYlGfCDKkZQNLk=";
+ tag = "v0.6.1";
+ hash = "sha256-rQGtfLCCICUtkhTp4/r0KLCouxOtP8XEvWJDWRpVw0I=";
};
meta.homepage = "https://github.com/idanarye/nvim-impairative/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -12869,12 +12923,12 @@ final: prev: {
nvim-java = buildVimPlugin {
pname = "nvim-java";
- version = "4.1.0";
+ version = "4.1.2";
src = fetchFromGitHub {
owner = "nvim-java";
repo = "nvim-java";
- tag = "v4.1.0";
- hash = "sha256-w4BCKMbbFps6YxV3gyo5KGzBRJnU6h1vrUbYRq9cO0A=";
+ tag = "v4.1.2";
+ hash = "sha256-7mtQVcO4skrUFClGOXxKqmvVo6Vgq6ZM2Um0x6C7IGg=";
};
meta.homepage = "https://github.com/nvim-java/nvim-java/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -12993,12 +13047,12 @@ final: prev: {
nvim-justice = buildVimPlugin {
pname = "nvim-justice";
- version = "0-unstable-2026-04-13";
+ version = "0-unstable-2026-06-22";
src = fetchFromGitHub {
owner = "chrisgrieser";
repo = "nvim-justice";
- rev = "a3e0d2d73d1748d1bed45e6b1797fbc73961e53f";
- hash = "sha256-gT+vPt9BWe1AylFqbZsoEXL8cXSpMjRdiY44Cxalwcg=";
+ rev = "11e4deec4c00d07b48d5b5008ab53bba267e71f5";
+ hash = "sha256-VorppQ/Xs4vKzzSX5NXgtR2RQB2JBUjwgzbUbbwtVRQ=";
};
meta.homepage = "https://github.com/chrisgrieser/nvim-justice/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -13077,11 +13131,11 @@ final: prev: {
nvim-lint = buildVimPlugin {
pname = "nvim-lint";
- version = "05-unstable-2026-06-06";
+ version = "05-unstable-2026-06-25";
src = fetchgit {
url = "https://codeberg.org/mfussenegger/nvim-lint/";
- rev = "99cbc3ca8a76845fca50e496be7212bebf907dd3";
- hash = "sha256-c0LEEbbWHZAKk+dpLGOjKvS1miuYLsxUM3AUf/t9ti8=";
+ rev = "a219b2c9e5b4765e5c845aba119dad55806fcaf1";
+ hash = "sha256-pABhzTRkcxAT/ELeltz47eCAKCnzdoCtc2QRu3wm0xU=";
};
meta.homepage = "https://codeberg.org/mfussenegger/nvim-lint/";
meta.license = unfree;
@@ -13116,20 +13170,6 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
- nvim-lsp-ts-utils = buildVimPlugin {
- pname = "nvim-lsp-ts-utils";
- version = "0-unstable-2022-07-17";
- src = fetchFromGitHub {
- owner = "jose-elias-alvarez";
- repo = "nvim-lsp-ts-utils";
- rev = "0a6a16ef292c9b61eac6dad00d52666c7f84b0e7";
- hash = "sha256-38YOgLDtku2BPCaNEmX0555x1QmHuuDSCZL274bBhcg=";
- };
- meta.homepage = "https://github.com/jose-elias-alvarez/nvim-lsp-ts-utils/";
- meta.license = getLicenseFromSpdxId "Unlicense";
- meta.hydraPlatforms = [ ];
- };
-
nvim-lspconfig = buildVimPlugin {
pname = "nvim-lspconfig";
version = "2.10.0";
@@ -13202,12 +13242,12 @@ final: prev: {
nvim-metals = buildVimPlugin {
pname = "nvim-metals";
- version = "0.10.x-unstable-2026-04-29";
+ version = "0.10.x-unstable-2026-07-02";
src = fetchFromGitHub {
owner = "scalameta";
repo = "nvim-metals";
- rev = "4cc98f07ec96bb748a8796831767538e0e4f9be4";
- hash = "sha256-uXmLZMbJKUFua9Jg/LYJ9dGRz+QF+nw7Nz5n6uaGSdQ=";
+ rev = "a4b20656bf1014404dd63bf9fd5f22fcc50fee52";
+ hash = "sha256-3Vqc82HfKRKw/4LrrpamInCY5uVT6dfuENhmMie0DQ8=";
};
meta.homepage = "https://github.com/scalameta/nvim-metals/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -13328,12 +13368,12 @@ final: prev: {
nvim-numbertoggle = buildVimPlugin {
pname = "nvim-numbertoggle";
- version = "0-unstable-2026-04-08";
+ version = "0-unstable-2026-06-19";
src = fetchFromGitHub {
owner = "sitiom";
repo = "nvim-numbertoggle";
- rev = "c5c0d305aee8532b5515914a08396b9154394c55";
- hash = "sha256-C11XegdlMo5l4NVi9txSc5uivz9qx5HCNtwQSbMm28k=";
+ rev = "704e098c7f056f0dae9407d8651edd3d183f3fff";
+ hash = "sha256-P+Rfzsc8eQiozGPWW0pyNw2mo1cAIAd6a9kEGhZvlXU=";
};
meta.homepage = "https://github.com/sitiom/nvim-numbertoggle/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -13342,12 +13382,12 @@ final: prev: {
nvim-origami = buildVimPlugin {
pname = "nvim-origami";
- version = "1.9-unstable-2026-05-27";
+ version = "1.9-unstable-2026-07-06";
src = fetchFromGitHub {
owner = "chrisgrieser";
repo = "nvim-origami";
- rev = "47be2209d09755c0202da1e22a8d67af8f5ae178";
- hash = "sha256-Pg6pwiB8mEQfMDv5aLZKx06EEZuaVN1xtuVBOpd4iWo=";
+ rev = "02312301df125908031b27dc556adb4cd81893d6";
+ hash = "sha256-d9yY/4EMl+5wetAasjhVlee1l7GGxYdqKAA9ajxaHss=";
};
meta.homepage = "https://github.com/chrisgrieser/nvim-origami/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -13468,12 +13508,12 @@ final: prev: {
nvim-rip-substitute = buildVimPlugin {
pname = "nvim-rip-substitute";
- version = "0-unstable-2026-05-19";
+ version = "0-unstable-2026-06-22";
src = fetchFromGitHub {
owner = "chrisgrieser";
repo = "nvim-rip-substitute";
- rev = "c65592d88f0fa00396e260da99d9e419f4891e3b";
- hash = "sha256-sKfxZxB2b2jUNEc/EvCd81s9FMZqBdiMZXJJKkOUyz4=";
+ rev = "5aafa8e31971d2fb1dbb207f1ecd3b12b1ba0f88";
+ hash = "sha256-U1/whBLVdHiS+ykAdOVdY+bIVcP/+kDE/rN2uM/D/vY=";
};
meta.homepage = "https://github.com/chrisgrieser/nvim-rip-substitute/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -13482,12 +13522,12 @@ final: prev: {
nvim-scissors = buildVimPlugin {
pname = "nvim-scissors";
- version = "0-unstable-2026-04-13";
+ version = "0-unstable-2026-06-30";
src = fetchFromGitHub {
owner = "chrisgrieser";
repo = "nvim-scissors";
- rev = "9cc1ba06afa8b23b0d30cadc02c40940df1d701e";
- hash = "sha256-uhNlLndXpLiU0qYvnnCepqqCp5eA+GRxq/aWJcRts+U=";
+ rev = "77dfcafd53088c7941f2d383541aa8fdda7fd7b7";
+ hash = "sha256-8zRw79IKv7suISRjcUxs/iUWxp6tb+aDDsMo6DYuQ9o=";
};
meta.homepage = "https://github.com/chrisgrieser/nvim-scissors/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -13552,12 +13592,12 @@ final: prev: {
nvim-sioyek-highlights = buildVimPlugin {
pname = "nvim-sioyek-highlights";
- version = "0-unstable-2026-05-20";
+ version = "0-unstable-2026-06-27";
src = fetchFromGitHub {
owner = "jbuck95";
repo = "nvim-sioyek-highlights";
- rev = "753f5d309d08229325134e5992cd032d06f72ee8";
- hash = "sha256-JiHBw/3LqYW4oxT+ObvU3IsDU1Q5JaKr4TDBZautNV0=";
+ rev = "ed275e3766d9055503b4ad1aebb9fde75e81b80a";
+ hash = "sha256-RRVUG6OMjhQy2mw8LjFUSkoZd2u1FzdJlbZiXq/vwMU=";
};
meta.homepage = "https://github.com/jbuck95/nvim-sioyek-highlights/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -13622,12 +13662,12 @@ final: prev: {
nvim-spider = buildVimPlugin {
pname = "nvim-spider";
- version = "0-unstable-2026-04-13";
+ version = "0-unstable-2026-06-22";
src = fetchFromGitHub {
owner = "chrisgrieser";
repo = "nvim-spider";
- rev = "4fdd56a4f45bca13a607632e15a6f9f8d1b1f99e";
- hash = "sha256-2ZJV23CZ8B3x4DPHGuWnq84Jp3gLvyCARuyqtrZEOos=";
+ rev = "7f021426d4a615ea8f11cabed434b1f20376abae";
+ hash = "sha256-r9b0dB2lzSUDWiPiclnjk7wOrLscTkd3UxFo0ZCBcek=";
};
meta.homepage = "https://github.com/chrisgrieser/nvim-spider/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -13678,12 +13718,12 @@ final: prev: {
nvim-test = buildVimPlugin {
pname = "nvim-test";
- version = "1.4.1";
+ version = "1.4.1-unstable-2026-05-16";
src = fetchFromGitHub {
owner = "klen";
repo = "nvim-test";
- tag = "1.4.1";
- hash = "sha256-mMi07UbMWmC75DFfW1b+sR2uRPxizibFwS2qcN9rpLI=";
+ rev = "feb834cbc806029239479f501e8492c01a2bea65";
+ hash = "sha256-DTns8LG3PFFKYG6Ayt90Brf2lbZjNfDLLKUDxsqMisk=";
};
meta.homepage = "https://github.com/klen/nvim-test/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -13692,12 +13732,12 @@ final: prev: {
nvim-tinygit = buildVimPlugin {
pname = "nvim-tinygit";
- version = "1.0-unstable-2026-04-20";
+ version = "1.0-unstable-2026-06-22";
src = fetchFromGitHub {
owner = "chrisgrieser";
repo = "nvim-tinygit";
- rev = "f12990601dfa63c623049b470dc306ca905064c8";
- hash = "sha256-NNdwBJjVlCwR3VzN7JRMhRRNHENRO9SXNnUUr4zZ8Eg=";
+ rev = "7cc03bfd73863fc24e1a07e9465d3dba32336b74";
+ hash = "sha256-2P8C0A2zPxlyGnex0yiKlpXUS1RpXHKZGuRDToieqXM=";
};
meta.homepage = "https://github.com/chrisgrieser/nvim-tinygit/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -13706,12 +13746,12 @@ final: prev: {
nvim-tree-lua = buildVimPlugin {
pname = "nvim-tree.lua";
- version = "1.17.0-unstable-2026-06-08";
+ version = "1.18.0";
src = fetchFromGitHub {
owner = "nvim-tree";
repo = "nvim-tree.lua";
- rev = "82f58063d67defc620e1ef8be606fc62a7b5dc1e";
- hash = "sha256-JfOkJkTGVWPw7dhcbDNPsyeNbidrtIvzJhPYUQJ1NoY=";
+ tag = "v1.18.0";
+ hash = "sha256-QPPtshLL7sfb3wUxr/kusA3nAEfoxgiOxayUFptGUI0=";
};
meta.homepage = "https://github.com/nvim-tree/nvim-tree.lua/";
meta.license = unfree;
@@ -13720,12 +13760,12 @@ final: prev: {
nvim-treesitter = buildVimPlugin {
pname = "nvim-treesitter";
- version = "0.10.0-unstable-2026-04-03";
+ version = "0.10.0-unstable-2026-07-19";
src = fetchFromGitHub {
owner = "nvim-treesitter";
repo = "nvim-treesitter";
- rev = "4916d6592ede8c07973490d9322f187e07dfefac";
- hash = "sha256-PQR6tFt4lCrAZNQG7BLMD1IiCKja9wDS1S4laGJf/HE=";
+ rev = "7248feaca45e4d944591497964bc19afa89ad1c6";
+ hash = "sha256-FQj0+qeaW9rLy3dUbGbUG4UYtnry7UBA1n9SM2qXLdk=";
};
meta.homepage = "https://github.com/nvim-treesitter/nvim-treesitter/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -13832,12 +13872,12 @@ final: prev: {
nvim-treesitter-textobjects = buildVimPlugin {
pname = "nvim-treesitter-textobjects";
- version = "0-unstable-2026-04-07";
+ version = "0-unstable-2026-07-19";
src = fetchFromGitHub {
owner = "nvim-treesitter";
repo = "nvim-treesitter-textobjects";
- rev = "851e865342e5a4cb1ae23d31caf6e991e1c99f1e";
- hash = "sha256-fOpRElIwvsFWm4AwETx7fpC3RtdH2BpCfX4YHVitqw0=";
+ rev = "898ee307df58f854d11cd7edd06472574d48014e";
+ hash = "sha256-naZ+p5RrC+uUyFRaksmozDfNgJRifff+9TDWx79DCPk=";
};
meta.homepage = "https://github.com/nvim-treesitter/nvim-treesitter-textobjects/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -13958,12 +13998,12 @@ final: prev: {
nvim-various-textobjs = buildVimPlugin {
pname = "nvim-various-textobjs";
- version = "0-unstable-2026-04-13";
+ version = "0-unstable-2026-06-22";
src = fetchFromGitHub {
owner = "chrisgrieser";
repo = "nvim-various-textobjs";
- rev = "ad78e9d925c95d675b32dd7ba6d253f96ce063fe";
- hash = "sha256-FZKW7/9Y6MRxEbd00HBt9eGpJWbAP8GNM6p8M9s/3ts=";
+ rev = "fed132a88454e52c9691f4751090031944af4a7e";
+ hash = "sha256-eYHMSng5gnnD6X71GlfUWbeX74z5CcXr35JLJZeiOCg=";
};
meta.homepage = "https://github.com/chrisgrieser/nvim-various-textobjs/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -14028,12 +14068,12 @@ final: prev: {
nvim_context_vt = buildVimPlugin {
pname = "nvim_context_vt";
- version = "0-unstable-2025-09-17";
+ version = "0-unstable-2026-07-06";
src = fetchFromGitHub {
owner = "andersevenrud";
repo = "nvim_context_vt";
- rev = "fadbd9e57af72f6df3dd33df32ee733aa01cdbc0";
- hash = "sha256-ghpXrJgEN0CCCEXDsqe9G34KTGpAc0x8UhMQNmakp2c=";
+ rev = "b72accf0ba6772c9ae6e37f4540a81f1bc715f1a";
+ hash = "sha256-ahqp4VVPyt7Cev98Icr2p8RbbDOGiUYIsbOXxX6AwkE=";
};
meta.homepage = "https://github.com/andersevenrud/nvim_context_vt/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -14126,12 +14166,12 @@ final: prev: {
obsidian-nvim = buildVimPlugin {
pname = "obsidian.nvim";
- version = "3.16.4";
+ version = "3.16.5";
src = fetchFromGitHub {
owner = "obsidian-nvim";
repo = "obsidian.nvim";
- tag = "v3.16.4";
- hash = "sha256-9Su5t8cJAHlXV+EE4GLa1+BhezfHZIZgl2P6kBrkX8E=";
+ tag = "v3.16.5";
+ hash = "sha256-jSaAT7DCGsgzNJCd+ey3My2zqQ7kDcRm5ALDTOJKmJM=";
};
meta.homepage = "https://github.com/obsidian-nvim/obsidian.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -14140,12 +14180,12 @@ final: prev: {
ocaml-nvim = buildVimPlugin {
pname = "ocaml.nvim";
- version = "1.0.0-unstable-2026-05-28";
+ version = "1.0.0-unstable-2026-07-16";
src = fetchFromGitHub {
owner = "tarides";
repo = "ocaml.nvim";
- rev = "f1ef89e7f2a0c24974798b1c9ad7b73222283d08";
- hash = "sha256-ViZPylvq40WM8WibABWnDlWMY45b4BATkLFu5x4kFrA=";
+ rev = "d74934117fb7a513e64601ad1d1b53a34b00b01f";
+ hash = "sha256-zJJZP8jxa7e9Fn0N8JFzfP3d2TElkASFt8ptaWCOYpM=";
};
meta.homepage = "https://github.com/tarides/ocaml.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -14182,12 +14222,12 @@ final: prev: {
octo-nvim = buildVimPlugin {
pname = "octo.nvim";
- version = "0-unstable-2026-06-05";
+ version = "0-unstable-2026-07-09";
src = fetchFromGitHub {
owner = "pwntester";
repo = "octo.nvim";
- rev = "7fed87415c401954f73401bbed0fd736b9611e7c";
- hash = "sha256-9f8ZKK8OKlQSMjvFW6VY/861IZ/EugKfj5WLDkjg+ac=";
+ rev = "8476766529b7c0ee9b7da12b6dbce1b716bb62cd";
+ hash = "sha256-Ahxcp7UCoISeLOhZAkX966lyHk8jiSwWy9SAlUnzJo4=";
};
meta.homepage = "https://github.com/pwntester/octo.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -14238,12 +14278,12 @@ final: prev: {
oklch-color-picker-nvim = buildVimPlugin {
pname = "oklch-color-picker.nvim";
- version = "4.1.2";
+ version = "5.0.2";
src = fetchFromGitHub {
owner = "eero-lehtinen";
repo = "oklch-color-picker.nvim";
- tag = "v4.1.2";
- hash = "sha256-KEmKDWKQC87rAghhOxbJN4umZvBSx0Um0ur3GdMZFhU=";
+ tag = "v5.0.2";
+ hash = "sha256-cFCA/4xoY/P0h4aL2y6ZVdWiizhz1aRplE6RaQoxeYY=";
};
meta.homepage = "https://github.com/eero-lehtinen/oklch-color-picker.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -14392,12 +14432,12 @@ final: prev: {
onenord-nvim = buildVimPlugin {
pname = "onenord.nvim";
- version = "0.7.0-unstable-2026-05-14";
+ version = "0.7.0-unstable-2026-07-01";
src = fetchFromGitHub {
owner = "rmehri01";
repo = "onenord.nvim";
- rev = "8b6fe1e0f260ca0b8201ef6a8e2c97e0f38ea35d";
- hash = "sha256-iqnWSAV16m5RTHs3YeYolF+amXvHbsnkHNtVa2mBhyY=";
+ rev = "5240bfb79bcab7e03508626c5283cfc417b79169";
+ hash = "sha256-17HuRmDezELDyBscbFuksflCoiVXuALG+xbGKb6vCJo=";
};
meta.homepage = "https://github.com/rmehri01/onenord.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -14434,12 +14474,12 @@ final: prev: {
opencode-nvim = buildVimPlugin {
pname = "opencode.nvim";
- version = "0.11.0";
+ version = "0.13.4";
src = fetchFromGitHub {
owner = "nickjvandyke";
repo = "opencode.nvim";
- tag = "v0.11.0";
- hash = "sha256-i6Ty/TXy9Ph6Ex39qumfgH7ArenH159EHy1UFvNBJfI=";
+ tag = "v0.13.4";
+ hash = "sha256-exXm85BrPcHx8DU5vih7DNv8XPLEzxI2MrPLWoxDRnk=";
};
meta.homepage = "https://github.com/nickjvandyke/opencode.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -14518,12 +14558,12 @@ final: prev: {
otter-nvim = buildVimPlugin {
pname = "otter.nvim";
- version = "2.14.5";
+ version = "2.14.6";
src = fetchFromGitHub {
owner = "jmbuhr";
repo = "otter.nvim";
- tag = "v2.14.5";
- hash = "sha256-kTDFzud+Kx3YAI36QhEi+WjVkB6Owao7PdUBX3mLXKw=";
+ tag = "v2.14.6";
+ hash = "sha256-hfyZ9eG6dMbDzPtQ8wIrx4B3la2VQqnZuXS2eG9gaFU=";
};
meta.homepage = "https://github.com/jmbuhr/otter.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -14603,12 +14643,12 @@ final: prev: {
palenight-vim = buildVimPlugin {
pname = "palenight.vim";
- version = "0-unstable-2023-04-27";
+ version = "0-unstable-2026-06-20";
src = fetchFromGitHub {
owner = "drewtempelmeyer";
repo = "palenight.vim";
- rev = "5552a6349bcd927df9f17db34f017b77b963e503";
- hash = "sha256-3zgTux85/9lttmIik+IVUJhXbwJCo4SRJDAD8g6tv1U=";
+ rev = "9e9b102c54b830b72f51917b6b86c3b3b02dcea2";
+ hash = "sha256-WRe+PZdfbo0DyOwrtPCh1pi6NZoaTGx8uiEzN8mOmEw=";
};
meta.homepage = "https://github.com/drewtempelmeyer/palenight.vim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -14643,6 +14683,20 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
+ pantran-nvim = buildVimPlugin {
+ pname = "pantran.nvim";
+ version = "0-unstable-2025-04-07";
+ src = fetchFromGitHub {
+ owner = "potamides";
+ repo = "pantran.nvim";
+ rev = "b87c3ae48cba4659587fb75abd847e5b7a7c9ca0";
+ hash = "sha256-b4odpXwh+BmFsK5v3HmSWG43FA+ygOAPU+qFNy6vWDU=";
+ };
+ meta.homepage = "https://github.com/potamides/pantran.nvim/";
+ meta.license = getLicenseFromSpdxId "MIT";
+ meta.hydraPlatforms = [ ];
+ };
+
papercolor-theme = buildVimPlugin {
pname = "papercolor-theme";
version = "1.0-unstable-2024-03-12";
@@ -14869,12 +14923,12 @@ final: prev: {
pi-nvim = buildVimPlugin {
pname = "pi.nvim";
- version = "0-unstable-2026-05-18";
+ version = "0-unstable-2026-07-06";
src = fetchFromGitHub {
owner = "pablopunk";
repo = "pi.nvim";
- rev = "4ba6db0dd30406995a2e46e4f1ae39377e66e733";
- hash = "sha256-z1gN1TKQKrM8dMh8rQMaAtGgi4ELV21WgswJBVyXulE=";
+ rev = "9b619b4f9fb96fa4dc1a6a7776a651980cd819a0";
+ hash = "sha256-xtA3Ylu6kB5QF3KJ+4eDDO1PJhcTZVZyS3ei96Hs4bM=";
};
meta.homepage = "https://github.com/pablopunk/pi.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -15036,6 +15090,20 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
+ present-nvim = buildVimPlugin {
+ pname = "present.nvim";
+ version = "0-unstable-2025-03-03";
+ src = fetchFromGitHub {
+ owner = "Chaitanyabsprip";
+ repo = "present.nvim";
+ rev = "c76e6996b346ff3ec6260c2461e56946c4a72d0d";
+ hash = "sha256-EPQlVv4zn3LNgYu58xpp3OlLrFOW+VuRgiP0YzO6REw=";
+ };
+ meta.homepage = "https://github.com/Chaitanyabsprip/present.nvim/";
+ meta.license = getLicenseFromSpdxId "MIT";
+ meta.hydraPlatforms = [ ];
+ };
+
presenting-vim = buildVimPlugin {
pname = "presenting.vim";
version = "0.1.0-unstable-2023-12-30";
@@ -15094,12 +15162,12 @@ final: prev: {
project-nvim = buildVimPlugin {
pname = "project.nvim";
- version = "5.0.0-1";
+ version = "5.2.0-1";
src = fetchFromGitHub {
owner = "DrKJeff16";
repo = "project.nvim";
- tag = "v5.0.0-1";
- hash = "sha256-zJ/UMESO69829eGgsq53a/LttRSE1bRTo2vy4HjaHY8=";
+ tag = "v5.2.0-1";
+ hash = "sha256-p/p7VxmuNusgUXtPpiCGa+BSgDDS/yKvtAV93cKmIEg=";
};
meta.homepage = "https://github.com/DrKJeff16/project.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -15486,12 +15554,12 @@ final: prev: {
refactoring-nvim = buildVimPlugin {
pname = "refactoring.nvim";
- version = "0-unstable-2026-05-26";
+ version = "0-unstable-2026-07-04";
src = fetchFromGitHub {
owner = "theprimeagen";
repo = "refactoring.nvim";
- rev = "624c01e8175901484eac74512baf35e9dfe269b8";
- hash = "sha256-PPGSMbLVHLghqaVfRsViw7gYHrL4RtiH0Svw8H65TpE=";
+ rev = "64e10d782ae5b9653558482910213b8946651456";
+ hash = "sha256-lclcY2rNbpc8X0whwsVFwfC+eoPvSw3IFY2SQl0TZPE=";
};
meta.homepage = "https://github.com/theprimeagen/refactoring.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -15570,12 +15638,12 @@ final: prev: {
render-markdown-nvim = buildVimPlugin {
pname = "render-markdown.nvim";
- version = "8.12.0-unstable-2026-05-25";
+ version = "8.13.0";
src = fetchFromGitHub {
owner = "MeanderingProgrammer";
repo = "render-markdown.nvim";
- rev = "5adf0895310c1904e5abfaad40a2baad7fe44a07";
- hash = "sha256-vB8rFNSUW9pcBiCjtsA+LRbuysP8HnpsCQHPEFyHTrM=";
+ tag = "v8.13.0";
+ hash = "sha256-ukJUaqEYI60o/lyLM5GaKsRdMW/24IZnzVzPB9/Q/zo=";
};
meta.homepage = "https://github.com/MeanderingProgrammer/render-markdown.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -15711,12 +15779,12 @@ final: prev: {
roslyn-nvim = buildVimPlugin {
pname = "roslyn.nvim";
- version = "0-unstable-2026-06-07";
+ version = "0-unstable-2026-07-10";
src = fetchFromGitHub {
owner = "seblyng";
repo = "roslyn.nvim";
- rev = "9c5da79216e5776e020dcc6c157983f5352f3f11";
- hash = "sha256-EGsDK45Tl+slGT0fibcwQDdHS1obJHPWgd1+jaOw8fg=";
+ rev = "b4954e97e145bd8129b3bbe99809759f6ced2235";
+ hash = "sha256-AuJNxfvNYnqPvihxBn1vADdvwoDNInVbOLS0Pq5q9v8=";
};
meta.homepage = "https://github.com/seblyng/roslyn.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -15892,12 +15960,12 @@ final: prev: {
scnvim = buildVimPlugin {
pname = "scnvim";
- version = "0-unstable-2026-04-20";
+ version = "0-unstable-2026-06-16";
src = fetchFromGitHub {
owner = "davidgranstrom";
repo = "scnvim";
- rev = "ec347b24168ac922de4dcddc181efd2fcdcfa0d0";
- hash = "sha256-cqZF3b+DkOQUOSU502vGQx8RNzH4b97B9zqHO9v8IBI=";
+ rev = "876732590ef3f409c9705f3659fa1061db2dc7bf";
+ hash = "sha256-qpOKAXkj6QjitypJL6YW7qTgQ0iJZpZZhA9tpr4Ya4g=";
};
meta.homepage = "https://github.com/davidgranstrom/scnvim/";
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
@@ -15990,12 +16058,12 @@ final: prev: {
searchbox-nvim = buildVimPlugin {
pname = "searchbox.nvim";
- version = "0-unstable-2026-06-01";
+ version = "0-unstable-2026-06-20";
src = fetchFromGitHub {
owner = "VonHeikemen";
repo = "searchbox.nvim";
- rev = "e66c850fbdebf493969da87e4f665acfb539b9c3";
- hash = "sha256-3HFofdEzVK+kXENrll8rxq/Huyg8HhiDg8P7n0JFQXE=";
+ rev = "f86a9f7943ffa4dd5829ef0fc7c55fa2f95729ba";
+ hash = "sha256-aLyflmkPj9aaqDeShyelD9NYwDl4V2MNY7W/KP47P7M=";
};
meta.homepage = "https://github.com/VonHeikemen/searchbox.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -16060,12 +16128,12 @@ final: prev: {
seoul256-vim = buildVimPlugin {
pname = "seoul256.vim";
- version = "0-unstable-2026-05-20";
+ version = "0-unstable-2026-07-15";
src = fetchFromGitHub {
owner = "junegunn";
repo = "seoul256.vim";
- rev = "88997adf362f57c3eadedde6b8c1393fe218c02c";
- hash = "sha256-Em9vpXJmUyLfBHOLHVQQUGsOuluwyx+J4Q5vU8akyS0=";
+ rev = "0357ff3e44faab66c98bc98dfc89c834e37012da";
+ hash = "sha256-TEu6ybYthrtTd7k2HkQEEH1z2iImU0I6SEclt87oAGQ=";
};
meta.homepage = "https://github.com/junegunn/seoul256.vim/";
meta.license = unfree;
@@ -16157,6 +16225,20 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
+ slimline-nvim = buildVimPlugin {
+ pname = "slimline.nvim";
+ version = "2.10.0";
+ src = fetchFromGitHub {
+ owner = "sschleemilch";
+ repo = "slimline.nvim";
+ tag = "v2.10.0";
+ hash = "sha256-ma+79ysHuTe4KxmFjxO0xMCz/bvhc3mc3sXBNcecjdI=";
+ };
+ meta.homepage = "https://github.com/sschleemilch/slimline.nvim/";
+ meta.license = getLicenseFromSpdxId "MIT";
+ meta.hydraPlatforms = [ ];
+ };
+
slimv = buildVimPlugin {
pname = "slimv";
version = "0.9.13-unstable-2026-05-17";
@@ -16187,12 +16269,12 @@ final: prev: {
smart-splits-nvim = buildVimPlugin {
pname = "smart-splits.nvim";
- version = "2.1.0-unstable-2026-06-05";
+ version = "2.1.0-unstable-2026-07-18";
src = fetchFromGitHub {
owner = "mrjones2014";
repo = "smart-splits.nvim";
- rev = "6806149fd36d1c5e797debe3e18b2c07219b685a";
- hash = "sha256-INxUHLtQBnnmbKBmQNgcdm4FxP5Amig2Q2s6pAub11U=";
+ rev = "de39b4d75695e2377401c7d05f896657637d244b";
+ hash = "sha256-Xqnre4RfIID/m8hXUpcMrsLssjfp/cbSpG24cory2BI=";
};
meta.homepage = "https://github.com/mrjones2014/smart-splits.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -16201,12 +16283,12 @@ final: prev: {
smartcolumn-nvim = buildVimPlugin {
pname = "smartcolumn.nvim";
- version = "1.1.1-unstable-2025-07-21";
+ version = "1.1.1-unstable-2026-07-20";
src = fetchFromGitHub {
owner = "m4xshen";
repo = "smartcolumn.nvim";
- rev = "b9cdbdf42f7ac5a659204cd5926017c7ff724a19";
- hash = "sha256-QAb0O/ZwTVogRyTK8+Y4ORaN6nVaeYepKgfSCF/fIPU=";
+ rev = "5351ae24e992a397d2abac48b7774dc8ef0acf40";
+ hash = "sha256-+ICVS16n0CFWbTqBzGkvxQohyYiAvr6gIxZqura3PUw=";
};
meta.homepage = "https://github.com/m4xshen/smartcolumn.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -16466,12 +16548,12 @@ final: prev: {
spellwarn-nvim = buildVimPlugin {
pname = "spellwarn.nvim";
- version = "0-unstable-2026-03-05";
+ version = "0-unstable-2026-07-13";
src = fetchFromGitHub {
owner = "ravibrock";
repo = "spellwarn.nvim";
- rev = "c98cfca978791cae3edaced7056bd340debee8fe";
- hash = "sha256-rLsiBIifNC8zwUNsAJ8AeTlDS9IS/y3XEKfF5FZ2hZI=";
+ rev = "3e818a7da69bfb342e2d84fdef9cb9f639d047d3";
+ hash = "sha256-WHXJaSTB91B0S3YizCJLBriGQDvYQKVK3I8WT97YQEc=";
};
meta.homepage = "https://github.com/ravibrock/spellwarn.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -16691,12 +16773,12 @@ final: prev: {
statuscol-nvim = buildVimPlugin {
pname = "statuscol.nvim";
- version = "0-unstable-2025-06-02";
+ version = "0-unstable-2026-07-09";
src = fetchFromGitHub {
owner = "luukvbaal";
repo = "statuscol.nvim";
- rev = "c46172d0911aa5d49ba5f39f4351d1bb7aa289cc";
- hash = "sha256-nFEQRJ5V+0RskJoAVRPAe2yrkORMTg9Jm13ClTmTSgk=";
+ rev = "887b8a03ea3804628505c9002fd07bd06a3db2e0";
+ hash = "sha256-YZ+vXxTREp2OIxBQGt4pYP8hWcswM9XN5BlOSzd6g0Y=";
};
meta.homepage = "https://github.com/luukvbaal/statuscol.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -17071,12 +17153,12 @@ final: prev: {
tagbar = buildVimPlugin {
pname = "tagbar";
- version = "3.1.1-unstable-2026-05-17";
+ version = "3.1.1-unstable-2026-06-14";
src = fetchFromGitHub {
owner = "preservim";
repo = "tagbar";
- rev = "b37b05ff1925b0b3931f031ebf88690aa0974375";
- hash = "sha256-Vqjq6ClXntfg2579MG37MQJWv6tN/4Y5/uuF4OqFMDQ=";
+ rev = "07cb8247487208124978daff8e13624667635457";
+ hash = "sha256-bezgPiUz5EKKjTLuP6SpWGRCEYo8VXGvoF96qhR0aF8=";
};
meta.homepage = "https://github.com/preservim/tagbar/";
meta.license = unfree;
@@ -17886,12 +17968,12 @@ final: prev: {
tinted-nvim = buildVimPlugin {
pname = "tinted-nvim";
- version = "1.0.0-unstable-2026-06-02";
+ version = "1.0.0-unstable-2026-07-15";
src = fetchFromGitHub {
owner = "tinted-theming";
repo = "tinted-nvim";
- rev = "836f016255b886a267a04c8ee190e2f667b092c0";
- hash = "sha256-cKVmIBPTlzOngk/jIOsYw5dJvVzg8nRxz2SfFbqwUYU=";
+ rev = "a229fe0efadb4d9bfa92cad16175bb4e93fa70d4";
+ hash = "sha256-a79rQSpPyCH/zbunrW9NxtsnwKVcQiwLzhW/1YNl3a4=";
};
meta.homepage = "https://github.com/tinted-theming/tinted-nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -17900,12 +17982,12 @@ final: prev: {
tinted-vim = buildVimPlugin {
pname = "tinted-vim";
- version = "01-unstable-2026-05-04";
+ version = "01-unstable-2026-07-15";
src = fetchFromGitHub {
owner = "tinted-theming";
repo = "tinted-vim";
- rev = "c086276f0227f41d17b68b1fe2e378b3b113401d";
- hash = "sha256-qfG5xFnAZd3o1kGL8xQPAkqHHvx+twJMkwCrL2Wdkrg=";
+ rev = "1ee9f7bbb3e5928b84ab0bedaf04f6ad9dafdfb2";
+ hash = "sha256-fwFxfq0Kr/EPdx4r9qTjzvjxkQsNoAD9KvB6kP3NwlE=";
};
meta.homepage = "https://github.com/tinted-theming/tinted-vim/";
meta.license = unfree;
@@ -17914,12 +17996,12 @@ final: prev: {
tiny-cmdline-nvim = buildVimPlugin {
pname = "tiny-cmdline.nvim";
- version = "0-unstable-2026-05-31";
+ version = "0-unstable-2026-06-23";
src = fetchFromGitHub {
owner = "rachartier";
repo = "tiny-cmdline.nvim";
- rev = "b1db8607a78f0c23b3bae08e079b1b7f147619d7";
- hash = "sha256-O2j7KGqlFGl1oHW/0yRmDDTGIHn4hnpShgHcX++KWz4=";
+ rev = "e247d9ee4c980734f8f8bf616d31e0ab7c27485d";
+ hash = "sha256-DEfoqGFoGdybgZyO+Jqxz4gYkrgoek4cQYulLEsvnU8=";
};
meta.homepage = "https://github.com/rachartier/tiny-cmdline.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -17942,12 +18024,12 @@ final: prev: {
tiny-glimmer-nvim = buildVimPlugin {
pname = "tiny-glimmer.nvim";
- version = "0-unstable-2026-05-18";
+ version = "0-unstable-2026-07-05";
src = fetchFromGitHub {
owner = "rachartier";
repo = "tiny-glimmer.nvim";
- rev = "f26728abf811324d7ed6b035a11d7b76a27c06c3";
- hash = "sha256-CUxWZOoEj2kamwlhcpz0K1IR+7TfFC22RPIVj4x6TeI=";
+ rev = "9a48d8a7436231cb16d47c88f924702e5602870a";
+ hash = "sha256-ONv/NE4D5vWNV56oJc/h5/nniOWjH5eUG0Q80dMVSxg=";
};
meta.homepage = "https://github.com/rachartier/tiny-glimmer.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -17956,12 +18038,12 @@ final: prev: {
tiny-inline-diagnostic-nvim = buildVimPlugin {
pname = "tiny-inline-diagnostic.nvim";
- version = "0-unstable-2026-06-09";
+ version = "0-unstable-2026-07-05";
src = fetchFromGitHub {
owner = "rachartier";
repo = "tiny-inline-diagnostic.nvim";
- rev = "e930d0a46031645040d5492595b46cdf6ab3514f";
- hash = "sha256-m4ax8+4P+fWtne7hLn3I9RXPeC8y/CZXqtqKCVa8e7c=";
+ rev = "6264451f14119d63a52580e5198d6baf8518b0b2";
+ hash = "sha256-dG4eCcIRaHOPj75DNOBJAqo2Vy7LAQ0QfWOVD94FloA=";
};
meta.homepage = "https://github.com/rachartier/tiny-inline-diagnostic.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -18154,15 +18236,15 @@ final: prev: {
transparent-nvim = buildVimPlugin {
pname = "transparent.nvim";
- version = "0-unstable-2025-06-22";
+ version = "0-unstable-2026-06-12";
src = fetchFromGitHub {
owner = "xiyaowong";
repo = "transparent.nvim";
- rev = "8ac59883de84e9cd1850ea25cf087031c5ba7d54";
- hash = "sha256-GlN7/+TmXld2UVPN2rDP7nKqbnswiezmGXn+uGK5I5c=";
+ rev = "e00ca1cf09caef575edf8da7e5a8b9193893b4c7";
+ hash = "sha256-VMWvh5QLV7y65SPEbKacrdL6WvHSF+z+LEaWugxqQOI=";
};
meta.homepage = "https://github.com/xiyaowong/transparent.nvim/";
- meta.license = unfree;
+ meta.license = getLicenseFromSpdxId "MIT";
meta.hydraPlatforms = [ ];
};
@@ -18196,12 +18278,12 @@ final: prev: {
treewalker-nvim = buildVimPlugin {
pname = "treewalker.nvim";
- version = "0-unstable-2026-06-04";
+ version = "0-unstable-2026-07-07";
src = fetchFromGitHub {
owner = "aaronik";
repo = "treewalker.nvim";
- rev = "e1779657d41df2fdf8fd825712051f90e7c9c836";
- hash = "sha256-Byg5O1AndhqoBpv8VyGrGaiNsq4mGy57yoV3lFJDH2c=";
+ rev = "228f9cd84e7ee45c72e4c9c5c0523e50f13ad520";
+ hash = "sha256-TSwvL0e4JmzjdcphNkft1G/leJ8VCEZ7f8xYNo9/q18=";
};
meta.homepage = "https://github.com/aaronik/treewalker.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -18295,12 +18377,12 @@ final: prev: {
ts-autotag-nvim = buildVimPlugin {
pname = "ts-autotag.nvim";
- version = "0-unstable-2026-06-10";
+ version = "0-unstable-2026-06-25";
src = fetchFromGitHub {
owner = "tronikelis";
repo = "ts-autotag.nvim";
- rev = "b1d0dd4fe5e63e9a744595bdfd41b74c3dea2e88";
- hash = "sha256-lGDnNpG5kcKOI2AlVovuuTHx+AntKagw9c9e1Eg4T2M=";
+ rev = "6178353d9003e91eb053d69cf9a4d72e28137daa";
+ hash = "sha256-JM6r91+3ehAk24kDt0O9iZhTPfXYt+zx5+86Ihh+fOU=";
};
meta.homepage = "https://github.com/tronikelis/ts-autotag.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -18309,12 +18391,12 @@ final: prev: {
ts-comments-nvim = buildVimPlugin {
pname = "ts-comments.nvim";
- version = "1.5.0-unstable-2025-10-28";
+ version = "1.5.0-unstable-2026-06-29";
src = fetchFromGitHub {
owner = "folke";
repo = "ts-comments.nvim";
- rev = "123a9fb12e7229342f807ec9e6de478b1102b041";
- hash = "sha256-ORK3XpHANaqvp1bfMG2GJmAiaOsLoGW82ebL/FJtKaA=";
+ rev = "a59d6092213447450191122c9346f309161504cb";
+ hash = "sha256-uqFE+EXQt6+UqwxVRdgk7oY05DPo5sV1q9KvvE1xVGk=";
};
meta.homepage = "https://github.com/folke/ts-comments.nvim/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -18420,20 +18502,6 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
- typescript-nvim = buildVimPlugin {
- pname = "typescript.nvim";
- version = "0-unstable-2023-08-12";
- src = fetchFromGitHub {
- owner = "jose-elias-alvarez";
- repo = "typescript.nvim";
- rev = "4de85ef699d7e6010528dcfbddc2ed4c2c421467";
- hash = "sha256-tStomym4qd7IXj/ohYAc3akImNsOJdC7nQL+CkdMomc=";
- };
- meta.homepage = "https://github.com/jose-elias-alvarez/typescript.nvim/";
- meta.license = getLicenseFromSpdxId "Unlicense";
- meta.hydraPlatforms = [ ];
- };
-
typescript-tools-nvim = buildVimPlugin {
pname = "typescript-tools.nvim";
version = "0-unstable-2025-11-18";
@@ -18478,12 +18546,12 @@ final: prev: {
typst-preview-nvim = buildVimPlugin {
pname = "typst-preview.nvim";
- version = "1.4.2-unstable-2026-03-30";
+ version = "1.5.0";
src = fetchFromGitHub {
owner = "chomosuke";
repo = "typst-preview.nvim";
- rev = "87db18b8d19c8b0eed399f52e4c527ce5afe4817";
- hash = "sha256-EUYiHzDWJQM9Guk6ZM5GWE/etB+GHM48myRg/BPtOV0=";
+ tag = "v1.5.0";
+ hash = "sha256-UTugVfydwGTmf5RomQ0R72Yf6fSz8gGeY/fg51qW454=";
};
meta.homepage = "https://github.com/chomosuke/typst-preview.nvim/";
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
@@ -18576,12 +18644,12 @@ final: prev: {
unicode-vim = buildVimPlugin {
pname = "unicode.vim";
- version = "21-unstable-2025-09-22";
+ version = "21-unstable-2026-06-24";
src = fetchFromGitHub {
owner = "chrisbra";
repo = "unicode.vim";
- rev = "902cd2b0a41a38528d080f8dd7a16ec5a865ebdd";
- hash = "sha256-Cv1ETqnqbVQgKrXTMDA1JgcqQSIzK6S7i9pZHDNI4BU=";
+ rev = "762993f8a8070c3126323a076510cf10de2ff3ce";
+ hash = "sha256-Pc5tGq6DoiZUK98PbJrI7AKFjw6koGaPgiw2BbCb3cs=";
};
meta.homepage = "https://github.com/chrisbra/unicode.vim/";
meta.license = unfree;
@@ -18744,12 +18812,12 @@ final: prev: {
vague-nvim = buildVimPlugin {
pname = "vague.nvim";
- version = "2.1.2";
+ version = "2.1.4";
src = fetchFromGitHub {
owner = "vague-theme";
repo = "vague.nvim";
- tag = "v2.1.2";
- hash = "sha256-8y4Dc+AXx4+DmnOAYYD6Yyi0GDyI6fwdM4AKsmM5hZU=";
+ tag = "v2.1.4";
+ hash = "sha256-57dHWOUPFIyFdLEs9RDv0cateLRc8XAqT4TmDUSQyV4=";
};
meta.homepage = "https://github.com/vague-theme/vague.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -18800,12 +18868,12 @@ final: prev: {
vifm-vim = buildVimPlugin {
pname = "vifm.vim";
- version = "0.14-unstable-2026-06-07";
+ version = "0.14-unstable-2026-07-12";
src = fetchFromGitHub {
owner = "vifm";
repo = "vifm.vim";
- rev = "6bffbab9c448f2814217ea2f7f982ad73b8fa718";
- hash = "sha256-/8lN8y20+g9pWzBrXgVArgZQq0CfXyLGRVDpweDmguE=";
+ rev = "9102ad4198c4f3adeef4b039c042866eb9345cdd";
+ hash = "sha256-BLI7TEtSfXG1Md8lBnejJ3vUuXh3LJyZH6PJGHMoCuI=";
};
meta.homepage = "https://github.com/vifm/vifm.vim/";
meta.license = unfree;
@@ -19444,12 +19512,12 @@ final: prev: {
vim-autoformat = buildVimPlugin {
pname = "vim-autoformat";
- version = "0-unstable-2026-01-15";
+ version = "0-unstable-2026-06-25";
src = fetchFromGitHub {
owner = "vim-autoformat";
repo = "vim-autoformat";
- rev = "34c5309ab11d175c73d8ab7195a4d831b9f502c4";
- hash = "sha256-LQVXUmrNOvJr78ULU9/8SRtHec6p9iNUT1YBDuxFYVQ=";
+ rev = "38161c4e875cf198789f32e0f773039696a431f0";
+ hash = "sha256-V1tun/l0bVgsT0jqdRF3Iqr5CtllQyX+gJY27aDf5xw=";
};
meta.homepage = "https://github.com/vim-autoformat/vim-autoformat/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -20186,12 +20254,12 @@ final: prev: {
vim-dadbod-ui = buildVimPlugin {
pname = "vim-dadbod-ui";
- version = "0-unstable-2026-02-11";
+ version = "0-unstable-2026-06-19";
src = fetchFromGitHub {
owner = "kristijanhusak";
repo = "vim-dadbod-ui";
- rev = "07e92e22114cc5b1ba4938d99897d85b58e20475";
- hash = "sha256-Of/9Ju2pkMEAZdSnDoRGxGSCBbR0e0oSRTts1VXVCf4=";
+ rev = "afd07819d8efcefc3317205b855ad4e3513b0011";
+ hash = "sha256-jyNaKXUM0uWsZO4G0y09hgfq5Ned9bFSjahL/T/V7Fs=";
};
meta.homepage = "https://github.com/kristijanhusak/vim-dadbod-ui/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -20284,12 +20352,12 @@ final: prev: {
vim-dirvish = buildVimPlugin {
pname = "vim-dirvish";
- version = "1.0-unstable-2026-06-02";
+ version = "1.0-unstable-2026-07-05";
src = fetchFromGitHub {
owner = "justinmk";
repo = "vim-dirvish";
- rev = "ad478b4ac86484edc525bfc5379f261204dfbf4c";
- hash = "sha256-D76E8Wnl3x9RMUkpG7/izFLSTtuhp0/TMX/ZWP4TvD4=";
+ rev = "4cbf39ce024c57f700c4d5502cc172ea91d69360";
+ hash = "sha256-w2sdZLTh8kk0M6NuZ1a4MYpr+tNi9LQwbTiJXeoXiUs=";
};
meta.homepage = "https://github.com/justinmk/vim-dirvish/";
meta.license = unfree;
@@ -20788,12 +20856,12 @@ final: prev: {
vim-flog = buildVimPlugin {
pname = "vim-flog";
- version = "3.0.0-unstable-2025-03-19";
+ version = "3.0.0-unstable-2026-07-12";
src = fetchFromGitHub {
owner = "rbong";
repo = "vim-flog";
- rev = "665b16ac8915f746bc43c9572b4581a5e9047216";
- hash = "sha256-x8fUmcuBLEQwZD+m7gEanpPppukRa6NoalNehY/2JuM=";
+ rev = "c8a573b5a829d0a3ed1b72c87dd62d832b665e87";
+ hash = "sha256-BKnp7LKONUT/BRu7kS8Yvmj7xcFgrTWxHtz2wyAhtYg=";
};
meta.homepage = "https://github.com/rbong/vim-flog/";
meta.license = unfree;
@@ -21082,12 +21150,12 @@ final: prev: {
vim-go = buildVimPlugin {
pname = "vim-go";
- version = "1.29-unstable-2026-03-28";
+ version = "1.29-unstable-2026-07-18";
src = fetchFromGitHub {
owner = "fatih";
repo = "vim-go";
- rev = "f4b4ba17035aebcd222df90375c1cbb1dc4d8c5b";
- hash = "sha256-0mmt7i8GImhVR2kmr8MOQHFybw8QDXVRrYVg/ty30zU=";
+ rev = "d69962d20a2a60e4bdc92a2281e5f0aaaa109635";
+ hash = "sha256-tXA45Hhnr9Vv4p6MyNAxj2SOC+P8eGkIEVE8PDnyFx4=";
};
meta.homepage = "https://github.com/fatih/vim-go/";
meta.license = unfree;
@@ -21124,11 +21192,11 @@ final: prev: {
vim-graphql = buildVimPlugin {
pname = "vim-graphql";
- version = "1.6-unstable-2026-04-14";
+ version = "1.6-unstable-2026-06-20";
src = fetchFromGitHub {
owner = "jparise";
repo = "vim-graphql";
- rev = "640d32063cd2526e2395db1b67fcd733524099e2";
+ rev = "d6c0991b70c0d6f4b3fa3283a2838d2ce47635d0";
hash = "sha256-hN+YE6PQnApdK5dKERJBVpKepicYIgsfY5mpZiiOcfE=";
};
meta.homepage = "https://github.com/jparise/vim-graphql/";
@@ -21194,12 +21262,12 @@ final: prev: {
vim-habamax = buildVimPlugin {
pname = "vim-habamax";
- version = "0-unstable-2026-06-10";
+ version = "0-unstable-2026-07-04";
src = fetchFromGitHub {
owner = "habamax";
repo = "vim-habamax";
- rev = "cf275f3cb71afb52773cced233f5da3c8e168250";
- hash = "sha256-oiTjsrld7jqcaBYP/q4ndQlySoY1XTxIv/Jj9zqb6fo=";
+ rev = "f6e3f8d68606e51deaeca591f2036b3e14fb120c";
+ hash = "sha256-nfo4OXAC3r99MEWO567kgQodPaqDTWEZFCVRthafNbU=";
};
meta.homepage = "https://github.com/habamax/vim-habamax/";
meta.license = unfree;
@@ -21517,12 +21585,12 @@ final: prev: {
vim-illuminate = buildVimPlugin {
pname = "vim-illuminate";
- version = "0-unstable-2025-05-24";
+ version = "0-unstable-2026-07-11";
src = fetchFromGitHub {
owner = "RRethy";
repo = "vim-illuminate";
- rev = "0d1e93684da00ab7c057410fecfc24f434698898";
- hash = "sha256-KqAJRCtDBG5xsvNsqkxoBdDckg02u4NBBreYQw7BphA=";
+ rev = "91313e598ca62e110bc71535c49069b66b9883c9";
+ hash = "sha256-3HM1aqFasEWXHaLQbJnax6Spw71TVd23BjsmH8jdTtQ=";
};
meta.homepage = "https://github.com/RRethy/vim-illuminate/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -21868,12 +21936,12 @@ final: prev: {
vim-just = buildVimPlugin {
pname = "vim-just";
- version = "0-unstable-2026-05-10";
+ version = "0-unstable-2026-07-19";
src = fetchFromGitHub {
owner = "NoahTheDuke";
repo = "vim-just";
- rev = "6034ccf6a4682c91f90f38fae4c882068e6723fe";
- hash = "sha256-3ytgSsTvtmq9jC2qyeBzKLK+x0UppyVODggcspDX7ZE=";
+ rev = "d9aa6784fe3a870e78ba82b5d176c0c5745e23f7";
+ hash = "sha256-/QrVhax5PTidfSi6WAxJNX4mbBhUGFZLlG3WsqoT2Ro=";
};
meta.homepage = "https://github.com/NoahTheDuke/vim-just/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -22176,12 +22244,12 @@ final: prev: {
vim-lsp-settings = buildVimPlugin {
pname = "vim-lsp-settings";
- version = "0.0.1-unstable-2026-05-21";
+ version = "0.0.1-unstable-2026-07-16";
src = fetchFromGitHub {
owner = "mattn";
repo = "vim-lsp-settings";
- rev = "1558bbaba4cbb593901e3dfc4d0f1a0cd212b09c";
- hash = "sha256-wMF4y4eMz7UR50GpBvStDsQ0SpKUt48tll6rqEr6AHY=";
+ rev = "22d06c9e4b620d5c2f055aec590dec6d383e5316";
+ hash = "sha256-LiWvL9QpZFPUH+Uek19ce6/e8B6uATmje/emUvyLWJk=";
};
meta.homepage = "https://github.com/mattn/vim-lsp-settings/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -22316,12 +22384,12 @@ final: prev: {
vim-matchup = buildVimPlugin {
pname = "vim-matchup";
- version = "0.8.0-unstable-2026-05-19";
+ version = "0.8.0-unstable-2026-06-27";
src = fetchFromGitHub {
owner = "andymass";
repo = "vim-matchup";
- rev = "a2d618496223386844acb5a6763cfc3cc1357af1";
- hash = "sha256-6v4kWrOxGvrtSkL7itcxXgOarKWmb0y++8mLnyc1XRI=";
+ rev = "055881643e1b37038a572c883de7b1969716db77";
+ hash = "sha256-8PmYDrvUzUdg/ErnIGPdK8eZH7EvZezfpsjAjy/sAbw=";
};
meta.homepage = "https://github.com/andymass/vim-matchup/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -23926,11 +23994,11 @@ final: prev: {
vim-solarized8 = buildVimPlugin {
pname = "vim-solarized8";
- version = "1.6.4-unstable-2026-03-11";
+ version = "1.6.4-unstable-2026-06-11";
src = fetchgit {
url = "https://codeberg.org/lifepillar/vim-solarized8/";
- rev = "5dfbfb00be8237619c680302fc9250e391b1686a";
- hash = "sha256-qJLlHsXKcLC+bpirfcuBj3igK9dDk8L9oVGPzWhtkEI=";
+ rev = "1cb22c68158a3e27cf5943052a4bd36c3dd4151c";
+ hash = "sha256-XPhiSwyV0A23e6NOEb8OejC68WtVVTL5A4YranlghZs=";
};
meta.homepage = "https://codeberg.org/lifepillar/vim-solarized8/";
meta.license = unfree;
@@ -23981,12 +24049,12 @@ final: prev: {
vim-spirv = buildVimPlugin {
pname = "vim-spirv";
- version = "0.5.2-unstable-2026-05-28";
+ version = "0.5.2-unstable-2026-07-09";
src = fetchFromGitHub {
owner = "kbenzie";
repo = "vim-spirv";
- rev = "e7de5b5adbb3c59014d98cf0d1198919f9fa5e1c";
- hash = "sha256-MoHDekfBwUBBsrR7AYkL3tT0aSIDqcFOK13+mEjdpfo=";
+ rev = "34b44acbdbfffbfa161569fc255ac56e7f72ec1f";
+ hash = "sha256-yW/B8UqzfXlPpWVBTW5ROBq7UrJCqptM/4xKFdSnKhw=";
};
meta.homepage = "https://github.com/kbenzie/vim-spirv/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -23995,12 +24063,12 @@ final: prev: {
vim-splunk = buildVimPlugin {
pname = "vim-splunk";
- version = "0-unstable-2026-05-24";
+ version = "0-unstable-2026-05-26";
src = fetchFromGitHub {
owner = "yorokobi";
repo = "vim-splunk";
- rev = "003bc863caa442dbcbb711d8c61ad8895c0da47a";
- hash = "sha256-KRF707b0O9FuS5R7m688+9x7RxNzRlDFI3Nz2g6nels=";
+ rev = "eae98aaa9232ee86e4bd3ffb4e795290891b64c5";
+ hash = "sha256-LI2vHM55sUGVsWFyiMgmIBuD49qUlsvFbER7zg7lKNg=";
};
meta.homepage = "https://github.com/yorokobi/vim-splunk/";
meta.license = getLicenseFromSpdxId "Unlicense";
@@ -25070,28 +25138,14 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
- vimacs = buildVimPlugin {
- pname = "vimacs";
- version = "0.96-unstable-2016-03-24";
- src = fetchFromGitHub {
- owner = "andrep";
- repo = "vimacs";
- rev = "7b8e297722d55089f0f0535fe6422533c98112fb";
- hash = "sha256-zgSKuwhuyoa67UlX4yX2JumjfHrx7Mlvg7Bv2i6TInU=";
- };
- meta.homepage = "https://github.com/andrep/vimacs/";
- meta.license = unfree;
- meta.hydraPlatforms = [ ];
- };
-
vimade = buildVimPlugin {
pname = "vimade";
- version = "2.5.1-unstable-2026-05-17";
+ version = "2.5.1-unstable-2026-07-16";
src = fetchFromGitHub {
owner = "TaDaa";
repo = "vimade";
- rev = "a5323f4930e3f1f48c0329e50bd218ba61577aaf";
- hash = "sha256-sBCZ/EEuGoqCBSg3Jh1o05sSuAJNOdortEB7b4sR2Z4=";
+ rev = "3d3d2db7ecd43c0181b20fede11d26f090dbc0d9";
+ hash = "sha256-dR+h9pPglZmpOsrmOUJpwVDcx5m+RqeNMjsoWcGhMsQ=";
};
meta.homepage = "https://github.com/TaDaa/vimade/";
meta.license = getLicenseFromSpdxId "Apache-2.0";
@@ -25212,12 +25266,12 @@ final: prev: {
vimspector = buildVimPlugin {
pname = "vimspector";
- version = "8968291813-unstable-2026-01-11";
+ version = "8968291813-unstable-2026-07-03";
src = fetchFromGitHub {
owner = "puremourning";
repo = "vimspector";
- rev = "409005fac4f014b271ed3526f3c0d08c4d42ed19";
- hash = "sha256-Kyx3YHOvZ7xagbU4xzumEAshU7oZOssacQBb7bIRu98=";
+ rev = "34099d18d8957bb3db5f396c8ca993ffb246a437";
+ hash = "sha256-ByYDS33zvVc97qD8g52+3VbPPWnaoUK7/Ou2Ai4X1M8=";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/puremourning/vimspector/";
@@ -25227,12 +25281,12 @@ final: prev: {
vimtex = buildVimPlugin {
pname = "vimtex";
- version = "2.17-unstable-2026-05-26";
+ version = "2.17-unstable-2026-07-18";
src = fetchFromGitHub {
owner = "lervag";
repo = "vimtex";
- rev = "24e229914182ff301496a3e2c4214b28c4928d3f";
- hash = "sha256-y45zOpF68G51jVdCsa27iiDdw2YEmHZNgkIHDI62nAo=";
+ rev = "6368e31fdaf766ff908a2c06e9ee14fc66dec409";
+ hash = "sha256-/0DoAJ3Iv8eJlRqNodumYqllY+4c3zv+oY1EpbvC8ak=";
};
meta.homepage = "https://github.com/lervag/vimtex/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -25521,12 +25575,12 @@ final: prev: {
wiki-vim = buildVimPlugin {
pname = "wiki.vim";
- version = "0.11-unstable-2026-03-26";
+ version = "0.12";
src = fetchFromGitHub {
owner = "lervag";
repo = "wiki.vim";
- rev = "44f266fc8ed6f8fbc6bae47ee1ca6ba32e5995f8";
- hash = "sha256-wcoiv8lPBr/r4yMw4tO6SmNQ09f1SjFqWlNDat7oXDk=";
+ tag = "v0.12";
+ hash = "sha256-6562XAJFqmWUo/IzBI6Mmy2Jp1p9smwt4LV95X6Cf5w=";
};
meta.homepage = "https://github.com/lervag/wiki.vim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -25733,12 +25787,12 @@ final: prev: {
pname = "xeno.nvim";
version = "0-unstable-2025-10-23";
src = fetchFromGitHub {
- owner = "kyzadev";
+ owner = "kyzabuilds";
repo = "xeno.nvim";
rev = "f70c22447c7d954973f35c10dd9e9942cd7fb2eb";
hash = "sha256-zTGclrlxThgqEvj8K3fQ87G98g3VDqvp/dCnZwSm4I8=";
};
- meta.homepage = "https://github.com/kyzadev/xeno.nvim/";
+ meta.homepage = "https://github.com/kyzabuilds/xeno.nvim/";
meta.license = unfree;
meta.hydraPlatforms = [ ];
};
@@ -25787,12 +25841,12 @@ final: prev: {
y9nika-nvim = buildVimPlugin {
pname = "y9nika.nvim";
- version = "0-unstable-2026-05-26";
+ version = "0-unstable-2026-07-11";
src = fetchFromGitHub {
owner = "y9san9";
repo = "y9nika.nvim";
- rev = "0fc35319498d8e4509601546f4efb423026e53a1";
- hash = "sha256-0S2+9L1gW6Rbh1lUP+EGJ0AGIUnNAiTlrGAEJrbm7rc=";
+ rev = "18827266802e8e105c724c72a84c2c59beb5d90f";
+ hash = "sha256-CzEqiuag+4RKOCjM4P2qp3ux9LMcRpQNA8t9r8RzXRc=";
};
meta.homepage = "https://github.com/y9san9/y9nika.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -25872,12 +25926,13 @@ final: prev: {
yazi-nvim = buildVimPlugin {
pname = "yazi.nvim";
- version = "13.1.7";
+ version = "13.9.0";
src = fetchFromGitHub {
owner = "mikavilpas";
repo = "yazi.nvim";
- tag = "v13.1.7";
- hash = "sha256-hPmdkCz/XTujUllBPfK7kjCrJA2rQQOBINczaGF3DKM=";
+ tag = "v13.9.0";
+ hash = "sha256-Ua8FqTFlTSqnHSrz31RuS+A3SkOxjXB/L8Yb8fq+FSQ=";
+ fetchSubmodules = true;
};
meta.homepage = "https://github.com/mikavilpas/yazi.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -25984,12 +26039,12 @@ final: prev: {
zen-nvim = buildVimPlugin {
pname = "zen.nvim";
- version = "0-unstable-2026-04-17";
+ version = "0-unstable-2026-07-18";
src = fetchFromGitHub {
owner = "sand4rt";
repo = "zen.nvim";
- rev = "8d77a06063d74393ace9a984f32c4c158dcef6ba";
- hash = "sha256-1zLxgs1EqAoGrjIr26awTFZ+NS06Ph/SDQHczBNCsaA=";
+ rev = "cc7306e9ea479b19e8ef4c5fba35b4efd4b66692";
+ hash = "sha256-ZFuhNDVmUU7A02w/rzDn8uze7ivHVu2GI3+6PyIxAgE=";
};
meta.homepage = "https://github.com/sand4rt/zen.nvim/";
meta.license = getLicenseFromSpdxId "MIT";
@@ -26040,11 +26095,11 @@ final: prev: {
zig-vim = buildVimPlugin {
pname = "zig.vim";
- version = "0-unstable-2026-05-06";
+ version = "0-unstable-2026-07-12";
src = fetchgit {
url = "https://codeberg.org/ziglang/zig.vim/";
- rev = "29f7a9b8a4e33f936b803de0b713683ad687a6c3";
- hash = "sha256-nIek0mbJ869dWuX3LAeSHJay86zE4lupXQTeYhLzth8=";
+ rev = "1ba233de1f93ae7cf5c0903541e6ad422207b089";
+ hash = "sha256-rbzX8wJKczk/dKpjPnNouf/LhpFmN9/zRNzEc0QhHm0=";
};
meta.homepage = "https://codeberg.org/ziglang/zig.vim/";
meta.license = unfree;
@@ -26053,12 +26108,12 @@ final: prev: {
zk-nvim = buildVimPlugin {
pname = "zk-nvim";
- version = "0.4.8";
+ version = "0.4.10";
src = fetchFromGitHub {
owner = "zk-org";
repo = "zk-nvim";
- tag = "v0.4.8";
- hash = "sha256-cq76bVNyoK1Oi0d61Wa3B3iFvLzboozZaZlWBTJik5U=";
+ tag = "v0.4.10";
+ hash = "sha256-/3M40vkIZ+O0FCk0K6bL8He6WapQ5s74RMxkoxhPM8A=";
};
meta.homepage = "https://github.com/zk-org/zk-nvim/";
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
@@ -26081,12 +26136,12 @@ final: prev: {
zotcite = buildVimPlugin {
pname = "zotcite";
- version = "0.7-unstable-2026-05-18";
+ version = "0.7-unstable-2026-07-02";
src = fetchFromGitHub {
owner = "jalvesaq";
repo = "zotcite";
- rev = "49e5fb6012077d2fe60681da3d8ff71e4c2a1c12";
- hash = "sha256-G/JnH9zF9m06Al8lzda6/P4K3S7iChaIzvZjKGLghAc=";
+ rev = "2f55d9a0eba87144bfb9211f17342490cd28bcd5";
+ hash = "sha256-aZUOa74Qbnr68hqRfDPsn5AoSAFUr/qPsOhMBxFhWPM=";
};
meta.homepage = "https://github.com/jalvesaq/zotcite/";
meta.license = getLicenseFromSpdxId "GPL-3.0-only";
diff --git a/pkgs/applications/editors/vim/plugins/luaPackagePlugins.nix b/pkgs/applications/editors/vim/plugins/luaPackagePlugins.nix
index b8c8dccb4960..4edadc94cdf1 100644
--- a/pkgs/applications/editors/vim/plugins/luaPackagePlugins.nix
+++ b/pkgs/applications/editors/vim/plugins/luaPackagePlugins.nix
@@ -9,12 +9,14 @@ let
luarocksPackageNames = [
# # keep-sorted start case=no
+ "canola-nvim"
"fidget-nvim"
"fzf-lua"
"gitsigns-nvim"
"grug-far-nvim"
"haskell-tools-nvim"
"image-nvim"
+ "kulala-nvim"
"lsp-progress-nvim"
"lualine-nvim"
"luasnip"
@@ -28,6 +30,7 @@ let
"neorg"
"neorg-interim-ls"
"neotest"
+ "neotest-nix"
"nui-nvim"
"nvim-cmp"
"nvim-nio"
diff --git a/pkgs/applications/editors/vim/plugins/non-generated/avante-nvim/default.nix b/pkgs/applications/editors/vim/plugins/non-generated/avante-nvim/default.nix
index 5b65f729acc2..a9161cb4ed56 100644
--- a/pkgs/applications/editors/vim/plugins/non-generated/avante-nvim/default.nix
+++ b/pkgs/applications/editors/vim/plugins/non-generated/avante-nvim/default.nix
@@ -9,15 +9,15 @@
vimPlugins,
vimUtils,
makeWrapper,
- pkgs,
+ perl,
}:
let
- version = "0.0.27-unstable-2026-03-11";
+ version = "0.1.2";
src = fetchFromGitHub {
owner = "yetone";
repo = "avante.nvim";
- rev = "9a7793461549939f1d52b2b309a1aa44680170c8";
- hash = "sha256-EEkAoufj29P46RIUrRNG0xJL9Wu4X7LZCS1fer4/nZQ=";
+ tag = "v${version}";
+ hash = "sha256-x7OhVz4rWj2x1UsUm8iqkB5PQVAELvAYJ0yo2beU9TY=";
};
avante-nvim-lib = rustPlatform.buildRustPackage {
pname = "avante-nvim-lib";
@@ -28,7 +28,7 @@ let
nativeBuildInputs = [
pkg-config
makeWrapper
- pkgs.perl
+ perl
];
buildInputs = [
@@ -66,20 +66,16 @@ vimUtils.buildVimPlugin {
ext = stdenv.hostPlatform.extensions.sharedLibrary;
in
''
- mkdir -p $out/build
- ln -s ${avante-nvim-lib}/lib/libavante_repo_map${ext} $out/build/avante_repo_map${ext}
- ln -s ${avante-nvim-lib}/lib/libavante_templates${ext} $out/build/avante_templates${ext}
- ln -s ${avante-nvim-lib}/lib/libavante_tokenizers${ext} $out/build/avante_tokenizers${ext}
- ln -s ${avante-nvim-lib}/lib/libavante_html2md${ext} $out/build/avante_html2md${ext}
-
- # Fixes PKCE auth flows not finding libcrypto
- substituteInPlace "$out/lua/avante/auth/pkce.lua" \
- --replace-fail 'pcall(ffi.load, "crypto")' 'pcall(ffi.load, "${lib.getLib openssl}/lib/libcrypto${ext}")'
+ # place dynamic shared libraries directly into lua/ for native C-module discovery
+ mkdir -p $out/lua
+ cp ${avante-nvim-lib}/lib/libavante_repo_map${ext} $out/lua/avante_repo_map${ext}
+ cp ${avante-nvim-lib}/lib/libavante_templates${ext} $out/lua/avante_templates${ext}
+ cp ${avante-nvim-lib}/lib/libavante_tokenizers${ext} $out/lua/avante_tokenizers${ext}
+ cp ${avante-nvim-lib}/lib/libavante_html2md${ext} $out/lua/avante_html2md${ext}
'';
passthru = {
updateScript = nix-update-script {
- extraArgs = [ "--version=branch" ];
attrPath = "vimPlugins.avante-nvim.avante-nvim-lib";
};
diff --git a/pkgs/applications/editors/vim/plugins/non-generated/blink-pairs/default.nix b/pkgs/applications/editors/vim/plugins/non-generated/blink-pairs/default.nix
index e5bd0c366c31..be782ea40042 100644
--- a/pkgs/applications/editors/vim/plugins/non-generated/blink-pairs/default.nix
+++ b/pkgs/applications/editors/vim/plugins/non-generated/blink-pairs/default.nix
@@ -3,25 +3,26 @@
rustPlatform,
fetchFromGitHub,
pkg-config,
+ vimPlugins,
vimUtils,
stdenv,
nix-update-script,
}:
let
- version = "0.5.0";
+ version = "0.6.0";
src = fetchFromGitHub {
owner = "Saghen";
repo = "blink.pairs";
tag = "v${version}";
- hash = "sha256-PTbj6jlXNRUOmwFSplvRDDiyyGqkBzUKtuBrvZm9kzM=";
+ hash = "sha256-XWrsZAH0tIPyRjr3PnAS2QAGE3+1z00jdnsxkKG0qPE=";
};
blink-pairs-lib = rustPlatform.buildRustPackage {
pname = "blink-pairs";
inherit version src;
- cargoHash = "sha256-Cn9zRsQkBwaKbBD/JEpFMBOF6CBZTDx7fQa6Aoic4YU=";
+ cargoHash = "sha256-XLlluprxhVueHhkIufJa7fJXvFxpJJzh89+yL9PZ4GI=";
env = {
RUSTC_BOOTSTRAP = 1;
@@ -42,13 +43,15 @@ vimUtils.buildVimPlugin {
pname = "blink.pairs";
inherit version src;
+ dependencies = [ vimPlugins.blink-lib ];
+
preInstall =
let
ext = stdenv.hostPlatform.extensions.sharedLibrary;
in
''
- mkdir -p target/release
- ln -s ${blink-pairs-lib}/lib/libblink_pairs${ext} target/release/
+ mkdir -p lib
+ ln -s ${blink-pairs-lib}/lib/libblink_pairs_parser${ext} lib/
'';
nvimSkipModules = [
@@ -71,6 +74,9 @@ vimUtils.buildVimPlugin {
homepage = "https://github.com/Saghen/blink.pairs";
changelog = "https://github.com/Saghen/blink.pairs/blob/${src.tag}/CHANGELOG.md";
license = lib.licenses.mit;
- maintainers = with lib.maintainers; [ isabelroses ];
+ maintainers = with lib.maintainers; [
+ isabelroses
+ saadndm
+ ];
};
}
diff --git a/pkgs/applications/editors/vim/plugins/non-generated/codediff-nvim/default.nix b/pkgs/applications/editors/vim/plugins/non-generated/codediff-nvim/default.nix
index 028aae4c8913..c8e323df7c50 100644
--- a/pkgs/applications/editors/vim/plugins/non-generated/codediff-nvim/default.nix
+++ b/pkgs/applications/editors/vim/plugins/non-generated/codediff-nvim/default.nix
@@ -11,13 +11,13 @@
}:
vimUtils.buildVimPlugin rec {
pname = "codediff.nvim";
- version = "2.45.1";
+ version = "2.49.2";
src = fetchFromGitHub {
owner = "esmuellert";
repo = "codediff.nvim";
tag = "v${version}";
- hash = "sha256-1F6z/rhZxiuI6W1ReyHP6EQFxys4qm3fbINxoy1hQZA=";
+ hash = "sha256-kT5plTJP4VfN6mFkq6voDTmr9LaZ37W80UU3QUGlKkY=";
};
dependencies = [ vimPlugins.nui-nvim ];
diff --git a/pkgs/applications/editors/vim/plugins/non-generated/fff-nvim/default.nix b/pkgs/applications/editors/vim/plugins/non-generated/fff-nvim/default.nix
index fae96fde6b60..d6bbea45d0fd 100644
--- a/pkgs/applications/editors/vim/plugins/non-generated/fff-nvim/default.nix
+++ b/pkgs/applications/editors/vim/plugins/non-generated/fff-nvim/default.nix
@@ -13,18 +13,18 @@
writableTmpDirAsHomeHook,
}:
let
- version = "0.9.3";
+ version = "0.10.1";
src = fetchFromGitHub {
owner = "dmtrKovalenko";
- repo = "fff.nvim";
+ repo = "fff";
tag = "v${version}";
- hash = "sha256-9k1XWnHzBjy7dABCzZ0yxCHqgX1bsWkkxksLVLDqdmc=";
+ hash = "sha256-GGoy8ghA87vwHEc0fi97uiBrpRTAGk/QgqzKu8BBRXo=";
};
fff-nvim-lib = rustPlatform.buildRustPackage {
pname = "fff-nvim-lib";
inherit version src;
- cargoHash = "sha256-R/w3Km9LTqWQ2NFbwYbTCld72av26BdXtxC/K0sqdlQ=";
+ cargoHash = "sha256-sOE3Zrs/ZtOIusH0+OvR1Ew5sfQfse6eWSLPwDPVSU4=";
cargoBuildFlags = [
"-p"
@@ -108,7 +108,7 @@ vimUtils.buildVimPlugin {
meta = {
description = "Fast Fuzzy File Finder for Neovim";
- homepage = "https://github.com/dmtrKovalenko/fff.nvim";
+ homepage = "https://github.com/dmtrKovalenko/fff";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [
GaetanLepage
diff --git a/pkgs/applications/editors/vim/plugins/non-generated/meson/default.nix b/pkgs/applications/editors/vim/plugins/non-generated/meson/default.nix
index cc81c6815cb9..c442bb136623 100644
--- a/pkgs/applications/editors/vim/plugins/non-generated/meson/default.nix
+++ b/pkgs/applications/editors/vim/plugins/non-generated/meson/default.nix
@@ -8,11 +8,9 @@ vimUtils.buildVimPlugin {
preInstall = "cd data/syntax-highlighting/vim";
meta = {
+ description = "Vim plugin for meson providing syntax highlighting";
inherit (meson.meta)
homepage
- description
- mainProgram
- longDescription
license
platforms
;
diff --git a/pkgs/applications/editors/vim/plugins/non-generated/mirth/default.nix b/pkgs/applications/editors/vim/plugins/non-generated/mirth/default.nix
new file mode 100644
index 000000000000..3409d9f27312
--- /dev/null
+++ b/pkgs/applications/editors/vim/plugins/non-generated/mirth/default.nix
@@ -0,0 +1,15 @@
+{ vimUtils, mirth }:
+
+vimUtils.buildVimPlugin {
+ pname = "mirth";
+ inherit (mirth) version;
+ src = mirth.vim;
+ meta = {
+ inherit (mirth.meta)
+ homepage
+ license
+ platforms
+ ;
+ description = "Syntax highlighting & filetype detection for the Mirth programming language";
+ };
+}
diff --git a/pkgs/applications/editors/vim/plugins/non-generated/windsurf-nvim/default.nix b/pkgs/applications/editors/vim/plugins/non-generated/windsurf-nvim/default.nix
index ca8b0fec8b1c..077bff37e046 100644
--- a/pkgs/applications/editors/vim/plugins/non-generated/windsurf-nvim/default.nix
+++ b/pkgs/applications/editors/vim/plugins/non-generated/windsurf-nvim/default.nix
@@ -14,7 +14,6 @@ let
codeiumHashes = {
x86_64-linux = "sha256-IeNK7UQtOhqC/eQv7MAya4jB1WIGykSR7IgutZatmHM=";
aarch64-linux = "sha256-ujTFki/3V79El2WCkG0PJhbaMT0knC9mrS9E7Uv9HD4=";
- x86_64-darwin = "sha256-r2KloEQsUku9sk8h76kwyQuMTHcq/vwfTSK2dkiXDzE=";
aarch64-darwin = "sha256-1jNH0Up8mAahDgvPF6g42LV+RVDVsPqDM54lE2KYY48=";
};
@@ -30,7 +29,6 @@ let
{
x86_64-linux = "linux_x64";
aarch64-linux = "linux_arm";
- x86_64-darwin = "macos_x64";
aarch64-darwin = "macos_arm";
}
.${system} or throwSystem;
diff --git a/pkgs/applications/editors/vim/plugins/nvim-treesitter/generated.nix b/pkgs/applications/editors/vim/plugins/nvim-treesitter/generated.nix
index 31f159c32118..68cd96848d13 100644
--- a/pkgs/applications/editors/vim/plugins/nvim-treesitter/generated.nix
+++ b/pkgs/applications/editors/vim/plugins/nvim-treesitter/generated.nix
@@ -49,12 +49,12 @@
};
angular = buildGrammar {
language = "angular";
- version = "0.0.0+rev=f0d0685";
+ version = "0.0.0+rev=38a8014";
src = fetchFromGitHub {
owner = "dlvandenberg";
repo = "tree-sitter-angular";
- rev = "f0d0685701b70883fa2dfe94ee7dc27965cab841";
- hash = "sha256-rCecCdb/Bi90KsMvStNvldDPI73EDevA+QLXTYRwueg=";
+ rev = "38a8014ed5452cd6b7cf1399c00177a1f5374256";
+ hash = "sha256-BhqeUS3KYL5jf0BfNvOs/hOPC5Thj6cEjYFfOfTbCJc=";
};
passthru.requires = [
"html"
@@ -63,12 +63,12 @@
};
apex = buildGrammar {
language = "apex";
- version = "0.0.0+rev=3597575";
+ version = "0.0.0+rev=27a3091";
src = fetchFromGitHub {
owner = "aheber";
repo = "tree-sitter-sfapex";
- rev = "3597575a429766dd7ecce9f5bb97f6fec4419d5d";
- hash = "sha256-TOytPX/jBdVDYHBacpT9hAVVZcW+XGvIsubAqs9Dm80=";
+ rev = "27a3091a1a444ce19d6099e00cd3788f019d0c2b";
+ hash = "sha256-Pg8zZmjGFcLftPNPiASt0uUxYG6CRcsB9qKhTMC5G7U=";
};
location = "apex";
meta.homepage = "https://github.com/aheber/tree-sitter-sfapex";
@@ -158,12 +158,12 @@
};
beancount = buildGrammar {
language = "beancount";
- version = "0.0.0+rev=429cff8";
+ version = "0.0.0+rev=c8a9780";
src = fetchFromGitHub {
owner = "polarmutex";
repo = "tree-sitter-beancount";
- rev = "429cff869513cf9e34a2cf604fbfaaedc467e809";
- hash = "sha256-UJ8bswQJB7UYspNKLWaEXMOR4XlKVHfd7rvV5iaA5Tw=";
+ rev = "c8a9780610dbe8ade4888045b1f2caa7a0a9d8aa";
+ hash = "sha256-5gFTocO/io5jg3zJ5U9Z46BgNqqgap0afM4VlpTyaGA=";
};
meta.homepage = "https://github.com/polarmutex/tree-sitter-beancount";
};
@@ -202,12 +202,12 @@
};
blade = buildGrammar {
language = "blade";
- version = "0.0.0+rev=b9436b7";
+ version = "0.0.0+rev=5dbdcb0";
src = fetchFromGitHub {
owner = "EmranMR";
repo = "tree-sitter-blade";
- rev = "b9436b7b936907aff730de0dac1b99d7c632cc86";
- hash = "sha256-QBsgHV/7zBF2OJfCVB3B27WVCCoMMzc5bTaubBvn2QI=";
+ rev = "5dbdcb0ccbe91e64b038b41545d3acc26c74907a";
+ hash = "sha256-NOyGw9jhy0r2zCsbkbew+VsHWx92flJOfaCgTjRQdX4=";
};
meta.homepage = "https://github.com/EmranMR/tree-sitter-blade";
};
@@ -224,12 +224,12 @@
};
bpftrace = buildGrammar {
language = "bpftrace";
- version = "0.0.0+rev=774f445";
+ version = "0.0.0+rev=50b27d8";
src = fetchFromGitHub {
owner = "sgruszka";
repo = "tree-sitter-bpftrace";
- rev = "774f4458ad39691336ead1ee361b22434c4cdec7";
- hash = "sha256-BIPAnkY9QcW+LSR9w1E7gsCAqpOYSBpG/FF7UQYm5XI=";
+ rev = "50b27d8b5cae89e77702ab249dcd743a41848e5b";
+ hash = "sha256-f1Hfqml59B0sjI1Yry9vnVmcsJj8kpnSlDub4nGLHSM=";
};
meta.homepage = "https://github.com/sgruszka/tree-sitter-bpftrace";
};
@@ -246,34 +246,34 @@
};
c = buildGrammar {
language = "c";
- version = "0.0.0+rev=ae19b67";
+ version = "0.0.0+rev=b780e47";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-c";
- rev = "ae19b676b13bdcc13b7665397e6d9b14975473dd";
- hash = "sha256-i40dlg12UNR3dUWtdlYLZKsusYUWzu+QgC2iedRk968=";
+ rev = "b780e47fc780ddc8da13afa35a3f4ed5c157823d";
+ hash = "sha256-Juuf57GQI7OAP6O03KtSzyKJAoXtGKjyYJ+sTM1A4mU=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-c";
};
c3 = buildGrammar {
language = "c3";
- version = "0.0.0+rev=78e2ae9";
+ version = "0.0.0+rev=1c6a952";
src = fetchFromGitHub {
owner = "c3lang";
repo = "tree-sitter-c3";
- rev = "78e2ae9cff29ef8ca6666006abe80f1236d42996";
- hash = "sha256-IM2jmaP6ZeV7iGyPCHP71/wsFvPwel3TxyUr51qgTcc=";
+ rev = "1c6a95234c62130763ed1c479f958b74fdbfdb2a";
+ hash = "sha256-EADHh63Sf4VlffQX3gH/9kodiws4lQsG+cyMwg1dFp8=";
};
meta.homepage = "https://github.com/c3lang/tree-sitter-c3";
};
c_sharp = buildGrammar {
language = "c_sharp";
- version = "0.0.0+rev=8836663";
+ version = "0.0.0+rev=v0.23.5";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-c-sharp";
- rev = "88366631d598ce6595ec655ce1591b315cffb14c";
- hash = "sha256-x2JQKMCyvqJkVuQPfAmoihSaBxgWaTFadkmZOuc58Bc=";
+ tag = "v0.23.5";
+ hash = "sha256-N5AAlwQFGGi47cj0m7Te08bA486gwY6NBOx4Qcy4lpo=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-c-sharp";
};
@@ -345,12 +345,12 @@
};
cmake = buildGrammar {
language = "cmake";
- version = "0.0.0+rev=c7b2a71";
+ version = "0.0.0+rev=ca627bb";
src = fetchFromGitHub {
owner = "uyha";
repo = "tree-sitter-cmake";
- rev = "c7b2a71e7f8ecb167fad4c97227c838439280175";
- hash = "sha256-+Lom3xjPmhhZr3G4aV054lbhLjvJsPaQalSqkKUijvU=";
+ rev = "ca627bb5828616b6246aafdc3c3222789e728e37";
+ hash = "sha256-tLC3WHEQS2GqUr+5Q884fc+tDCTxx6Jxg83T9wPlHw4=";
};
meta.homepage = "https://github.com/uyha/tree-sitter-cmake";
};
@@ -465,12 +465,12 @@
};
cue = buildGrammar {
language = "cue";
- version = "0.0.0+rev=20bb919";
+ version = "0.0.0+rev=dd7b90e";
src = fetchFromGitHub {
owner = "eonpatapon";
repo = "tree-sitter-cue";
- rev = "20bb9195dac00b64c00ee494812abf3bf76f4181";
- hash = "sha256-q41CTw7/+j+hq9ejM0yusObmAVdi1tbUKzRN59M/QVY=";
+ rev = "dd7b90e0770ff18070c515937ba3c3d6d93db00e";
+ hash = "sha256-9PwcWEz8sfJ4v+xeFGGI2JHXq5X1oI5K0mRvCEWDjgA=";
};
meta.homepage = "https://github.com/eonpatapon/tree-sitter-cue";
};
@@ -487,23 +487,23 @@
};
d = buildGrammar {
language = "d";
- version = "0.0.0+rev=fb028c8";
+ version = "0.0.0+rev=64f2793";
src = fetchFromGitHub {
owner = "gdamore";
repo = "tree-sitter-d";
- rev = "fb028c8f14f4188286c2eef143f105def6fbf24f";
- hash = "sha256-Xi8out5j4L5pAArA9zmLA7aGhma++G+AaVLgFW+TEAo=";
+ rev = "64f27931b4e6fdd75af1102c79bacbca68a8dacc";
+ hash = "sha256-LNEFFoN9lA3fBgzBDrv3NdADS5UIQYHq851KePl6siE=";
};
meta.homepage = "https://github.com/gdamore/tree-sitter-d";
};
dart = buildGrammar {
language = "dart";
- version = "0.0.0+rev=0fc19c3";
+ version = "0.0.0+rev=be07cf7";
src = fetchFromGitHub {
owner = "UserNobody14";
repo = "tree-sitter-dart";
- rev = "0fc19c3a57b1109802af41d2b8f60d8835c5da3a";
- hash = "sha256-yK4XfjVPABFHf8MjoDge6bmapcybhdIF+49rlXFP+pw=";
+ rev = "be07cf7118d3dba06236a3f19541685a68209934";
+ hash = "sha256-BPy4K3mjVBFdAtkVJBa8JCaWwRiO73khO32lh0rlcfw=";
};
meta.homepage = "https://github.com/UserNobody14/tree-sitter-dart";
};
@@ -520,12 +520,12 @@
};
devicetree = buildGrammar {
language = "devicetree";
- version = "0.0.0+rev=e685f1f";
+ version = "0.0.0+rev=e78bf56";
src = fetchFromGitHub {
owner = "joelspadin";
repo = "tree-sitter-devicetree";
- rev = "e685f1f6ac1702b046415efb476444167d63e41a";
- hash = "sha256-iMmr4zSm6B7goevHE03DMj9scW4ldXS7CV74sKeqGD4=";
+ rev = "e78bf56f206cb47bee28a217423acb651e076848";
+ hash = "sha256-avjOWIK+DTyJQq2sgvm3PN4umagNrJ3wCKS8woK56pk=";
};
meta.homepage = "https://github.com/joelspadin/tree-sitter-devicetree";
};
@@ -542,12 +542,12 @@
};
diff = buildGrammar {
language = "diff";
- version = "0.0.0+rev=2520c3f";
+ version = "0.0.0+rev=7d20331";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-diff";
- rev = "2520c3f934b3179bb540d23e0ef45f75304b5fed";
- hash = "sha256-8rYLNGgoZSvvfqO2++nAgFKmvbkKJ3m+9B8bTXp6Us4=";
+ rev = "7d20331b97a008daf2dd0055da8c609f03424105";
+ hash = "sha256-l9KwHqEdwqN5CYZQVCEymhld/m+MArAzqfPz8mV7M8Q=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-diff";
};
@@ -564,12 +564,12 @@
};
djot = buildGrammar {
language = "djot";
- version = "0.0.0+rev=74fac1f";
+ version = "0.0.0+rev=759a618";
src = fetchFromGitHub {
owner = "treeman";
repo = "tree-sitter-djot";
- rev = "74fac1f53c6d52aeac104b6874e5506be6d0cfe6";
- hash = "sha256-HfEZHNhxEbH07gDzLPdl6n2Pf//o8tbJvwE+tesJDC8=";
+ rev = "759a61896ccb2200a4becec4443e768638a21d58";
+ hash = "sha256-QLjTBLWjybrj197oykkH0saED8SPpjOwyL4VFUnKBCw=";
};
meta.homepage = "https://github.com/treeman/tree-sitter-djot";
};
@@ -676,23 +676,23 @@
};
elixir = buildGrammar {
language = "elixir";
- version = "0.0.0+rev=7937d3b";
+ version = "0.0.0+rev=c4f9f5a";
src = fetchFromGitHub {
owner = "elixir-lang";
repo = "tree-sitter-elixir";
- rev = "7937d3b4d65fa574163cfa59394515d3c1cf16f4";
- hash = "sha256-6V1W/MOx03dPvL8adgE16du7eGemPwwdiZ3NL8FNBkg=";
+ rev = "c4f9f5a15ddad8635ba59a5b99c2e9124e74ad91";
+ hash = "sha256-nQq8ZQUkLWuko6kNQRFtKwTQFuWzpIob9Cgjcn4Jrvk=";
};
meta.homepage = "https://github.com/elixir-lang/tree-sitter-elixir";
};
elm = buildGrammar {
language = "elm";
- version = "0.0.0+rev=6d9511c";
+ version = "0.0.0+rev=6bf1558";
src = fetchFromGitHub {
owner = "elm-tooling";
repo = "tree-sitter-elm";
- rev = "6d9511c28181db66daee4e883f811f6251220943";
- hash = "sha256-jhI0CRi8rgiwBfwEwNBBZ7QrKXYRQ9gUCO7c37Y/ibc=";
+ rev = "6bf155821d8d18f1e9d0c951fe77202daa7eb9c2";
+ hash = "sha256-A3S7oQSPqP/tya5gK8d6Sr54B9OZ2KDVPZIgZgr2Gz4=";
};
meta.homepage = "https://github.com/elm-tooling/tree-sitter-elm";
};
@@ -731,23 +731,23 @@
};
enforce = buildGrammar {
language = "enforce";
- version = "0.0.0+rev=eb27968";
+ version = "0.0.0+rev=d222ea5";
src = fetchFromGitHub {
owner = "simonvic";
repo = "tree-sitter-enforce";
- rev = "eb2796871d966264cdb041b797416ef1757c8b4f";
- hash = "sha256-50yK0MIMFFjUlcE99MEESKdcLnyIurAl16uGXGQyjkI=";
+ rev = "d222ea5d2f047e67a16234237cfc1c8489aac2fb";
+ hash = "sha256-fwcD9Y/4j0S5M0gW9tdMgNZfpkLIV4IMyhQThLij4XY=";
};
meta.homepage = "https://github.com/simonvic/tree-sitter-enforce";
};
erlang = buildGrammar {
language = "erlang";
- version = "0.0.0+rev=1d78195";
+ version = "0.0.0+rev=836aa2b";
src = fetchFromGitHub {
owner = "WhatsApp";
repo = "tree-sitter-erlang";
- rev = "1d78195c4fbb1fc027eb3e4220427f1eb8bfc89e";
- hash = "sha256-v/yG3J+f62W3f7jS5/TslepZGHUbFIH8duA+hFVLblU=";
+ rev = "836aa2b6c3af2c7cef3f84049b0ed6d44485a870";
+ hash = "sha256-1bviRDBztC6EplHFS4lqRYt05f0VH6Ofwo9umwSqve4=";
};
meta.homepage = "https://github.com/WhatsApp/tree-sitter-erlang";
};
@@ -764,12 +764,12 @@
};
faust = buildGrammar {
language = "faust";
- version = "0.0.0+rev=122dd10";
+ version = "0.0.0+rev=6074204";
src = fetchFromGitHub {
owner = "khiner";
repo = "tree-sitter-faust";
- rev = "122dd101919289ea809bad643712fcb483a1bed0";
- hash = "sha256-5T+Om1qdSIal1pMIoaM44FexSqZyhZCZb/Pa0/udzZI=";
+ rev = "6074204d3511392fd0b9c4fa1cef347ded65b246";
+ hash = "sha256-jzedhMP31Q17+UN6qi8k4nyqvoqVeYxflFIZcE8sf4g=";
};
meta.homepage = "https://github.com/khiner/tree-sitter-faust";
};
@@ -808,12 +808,12 @@
};
fish = buildGrammar {
language = "fish";
- version = "0.0.0+rev=fa2143f";
+ version = "0.0.0+rev=f435b0b";
src = fetchFromGitHub {
owner = "ram02z";
repo = "tree-sitter-fish";
- rev = "fa2143f5d66a9eb6c007ba9173525ea7aaafe788";
- hash = "sha256-n6eGMdbW1Rsn5XbszLSSSG3F8jh+loYnPEiabNY+jfk=";
+ rev = "f435b0bd772578c70e5d158b85267bb886316f88";
+ hash = "sha256-9an4YAz2QKC3yAJ5/tOfmqOJViGATz7+NhKuZpr4oC4=";
};
meta.homepage = "https://github.com/ram02z/tree-sitter-fish";
};
@@ -830,23 +830,23 @@
};
forth = buildGrammar {
language = "forth";
- version = "0.0.0+rev=360ef13";
+ version = "0.0.0+rev=7190f21";
src = fetchFromGitHub {
owner = "AlexanderBrevig";
repo = "tree-sitter-forth";
- rev = "360ef13f8c609ec6d2e80782af69958b84e36cd0";
- hash = "sha256-d7X1Ubd9tKMQgNHlH+sQxmcsgLWB4mxR5CIdyKkLnM8=";
+ rev = "7190f2173060d19a2174c96bfb5b7c6f9745512b";
+ hash = "sha256-BhlENOsBHH8rUU/NDFO4vc7rcjvvQOWLsomO/nr51RQ=";
};
meta.homepage = "https://github.com/AlexanderBrevig/tree-sitter-forth";
};
fortran = buildGrammar {
language = "fortran";
- version = "0.0.0+rev=be30d90";
+ version = "0.0.0+rev=7edacd2";
src = fetchFromGitHub {
owner = "stadelmanma";
repo = "tree-sitter-fortran";
- rev = "be30d90dc7dfa4080b9c4abed3f400c9163a88df";
- hash = "sha256-Y+HrMtswSmoFWH6YTBHfC1qQafqePOJB8tyoPRIbjQg=";
+ rev = "7edacd2b21aa80057d9725384a1304a1c758e0f8";
+ hash = "sha256-KWIAKJBV9qrNviLKbGkIyznHEMeO0tC/Pa1maRVINRM=";
};
meta.homepage = "https://github.com/stadelmanma/tree-sitter-fortran";
};
@@ -863,12 +863,12 @@
};
fsharp = buildGrammar {
language = "fsharp";
- version = "0.0.0+rev=1c2d935";
+ version = "0.0.0+rev=148ea97";
src = fetchFromGitHub {
owner = "ionide";
repo = "tree-sitter-fsharp";
- rev = "1c2d9351d1f731c08cfdc4ed41e63126ae56e462";
- hash = "sha256-MeYYCVO+KXC2pGYebbQzaK8ZyLAjPm5kBUROCQEn9Cw=";
+ rev = "148ea977d630e2d1c34bf717329141707620226d";
+ hash = "sha256-yaVeqC1RXgD7EMU8nRcdgkRQZXBcGw0lztTFvK4uM2I=";
};
location = "fsharp";
meta.homepage = "https://github.com/ionide/tree-sitter-fsharp";
@@ -886,12 +886,12 @@
};
gap = buildGrammar {
language = "gap";
- version = "0.0.0+rev=ed2480d";
+ version = "0.0.0+rev=96fe2e4";
src = fetchFromGitHub {
owner = "gap-system";
repo = "tree-sitter-gap";
- rev = "ed2480d42281586932920527823b307bc45052b8";
- hash = "sha256-rLCuVHBT/8DsHiE8Z4PbeAGjFmBT86vnJVvr258MKoA=";
+ rev = "96fe2e49745ecd62b80cd19dca01fb52b83f93a1";
+ hash = "sha256-bHbWHfwzQVnbqNZ65Ls2h3hsnIpQpylzy2Sviw8aTcs=";
};
meta.homepage = "https://github.com/gap-system/tree-sitter-gap";
};
@@ -944,12 +944,12 @@
};
git_rebase = buildGrammar {
language = "git_rebase";
- version = "0.0.0+rev=760ba8e";
+ version = "0.0.0+rev=32686d6";
src = fetchFromGitHub {
owner = "the-mikedavis";
repo = "tree-sitter-git-rebase";
- rev = "760ba8e34e7a68294ffb9c495e1388e030366188";
- hash = "sha256-TJ3n3HA51qJPVS40GHqGJ6qK4fE9iFfAYH866uHgdtU=";
+ rev = "32686d6b72980b36f876ae2d07719c9c3ed154e2";
+ hash = "sha256-+aQNbKWZgmWe21Wv1ih6kuiPDrjgY8ghi6dbQbV3PQg=";
};
meta.homepage = "https://github.com/the-mikedavis/tree-sitter-git-rebase";
};
@@ -966,12 +966,12 @@
};
gitcommit = buildGrammar {
language = "gitcommit";
- version = "0.0.0+rev=33fe854";
+ version = "0.0.0+rev=49715a9";
src = fetchFromGitHub {
owner = "gbprod";
repo = "tree-sitter-gitcommit";
- rev = "33fe8548abcc6e374feaac5724b5a2364bf23090";
- hash = "sha256-ttULjFU9slnPcT4bCjOozGkaKAOxMW5Oa2/caVNeEsA=";
+ rev = "49715a9e6f19ce3d33b875aacdd6ad8ddaee0ffe";
+ hash = "sha256-LMo+NufYbxb8G3ZCKNvtPHafTVHRM4HrZr7kjSkHjrw=";
};
meta.homepage = "https://github.com/gbprod/tree-sitter-gitcommit";
};
@@ -988,34 +988,34 @@
};
gleam = buildGrammar {
language = "gleam";
- version = "0.0.0+rev=0bb1b0a";
+ version = "0.0.0+rev=cefbd68";
src = fetchFromGitHub {
owner = "gleam-lang";
repo = "tree-sitter-gleam";
- rev = "0bb1b0ae1a3555180ae7b0004851da747fc230d1";
- hash = "sha256-x6DGHCCVl6w3na69gTtcsewS18VO1nTq8BE01Te/Ua4=";
+ rev = "cefbd6863983b4df3214b7934bde5e9ca63d5b7f";
+ hash = "sha256-j5FFZ/2HsCfMuJpDHJZ2pfYaFU6Rc3BjUrSeOi/89ZM=";
};
meta.homepage = "https://github.com/gleam-lang/tree-sitter-gleam";
};
glimmer = buildGrammar {
language = "glimmer";
- version = "0.0.0+rev=88af855";
+ version = "0.0.0+rev=c67a736";
src = fetchFromGitHub {
owner = "ember-tooling";
repo = "tree-sitter-glimmer";
- rev = "88af85568bde3b91acb5d4c352ed094d0c1f9d84";
- hash = "sha256-AW+jd1Kl3krTgnPc8NoXfSM91fOan/wIB/mo/feWj74=";
+ rev = "c67a73679db2945a686ca45d3e5318d86138e72a";
+ hash = "sha256-rNDLaxio3n4Lura5qxCSFopajm6XkWxwsJ4yfJIsdio=";
};
meta.homepage = "https://github.com/ember-tooling/tree-sitter-glimmer";
};
glimmer_javascript = buildGrammar {
language = "glimmer_javascript";
- version = "0.0.0+rev=5cc865a";
+ version = "0.0.0+rev=d9cf7a2";
src = fetchFromGitHub {
owner = "NullVoxPopuli";
repo = "tree-sitter-glimmer-javascript";
- rev = "5cc865a2a0a77cbfaf5062c8fcf2a9919bd54f87";
- hash = "sha256-4MSBaGdX5lvhvz2LyQb+NuQY9Vc5CFL0C6S3sO3Tz2U=";
+ rev = "d9cf7a2f1dad3c6b660148eaf77e955d418fdb8b";
+ hash = "sha256-gvs85PiyNov10Ar0JytOzjmJQVOeVx74ZQSbV+XUKa4=";
};
meta.homepage = "https://github.com/NullVoxPopuli/tree-sitter-glimmer-javascript";
};
@@ -1060,12 +1060,12 @@
};
gnuplot = buildGrammar {
language = "gnuplot";
- version = "0.0.0+rev=8923c1e";
+ version = "0.0.0+rev=20a9829";
src = fetchFromGitHub {
owner = "dpezto";
repo = "tree-sitter-gnuplot";
- rev = "8923c1e38b9634a688a6c0dce7c18c8ffb823e79";
- hash = "sha256-fR3lIscfrBqpBH1jZ4RB1Qa8r+hxy6I0OzzoQqAe2aw=";
+ rev = "20a98295a52caa5f474839838a800d250e8fe1f4";
+ hash = "sha256-UHgeM0pQm9DQwZdPByzJvYY4DbzcxE0WDDuqVGcsxts=";
};
meta.homepage = "https://github.com/dpezto/tree-sitter-gnuplot";
};
@@ -1170,23 +1170,23 @@
};
gren = buildGrammar {
language = "gren";
- version = "0.0.0+rev=c36aac5";
+ version = "0.0.0+rev=cecd8ce";
src = fetchFromGitHub {
owner = "MaeBrooks";
repo = "tree-sitter-gren";
- rev = "c36aac51a915fdfcaf178128ba1e9c2205b25930";
- hash = "sha256-XtLP2ncpwAiubHug6k4sJCYRZo5f+Nu02tho/4tVD/k=";
+ rev = "cecd8ce9b18f1803d37682f33b6224978fd04d31";
+ hash = "sha256-E96GzFmQDEb3Uq6sEThxqpRwqEH+JwE/hJ0xM1r2VjI=";
};
meta.homepage = "https://github.com/MaeBrooks/tree-sitter-gren";
};
groovy = buildGrammar {
language = "groovy";
- version = "0.0.0+rev=781d9cd";
+ version = "0.0.0+rev=deb0dcf";
src = fetchFromGitHub {
owner = "murtaza64";
repo = "tree-sitter-groovy";
- rev = "781d9cd1b482a70a6b27091e5c9e14bbcab3b768";
- hash = "sha256-KvgVjFLzT1jJ9PieVslJLKXrijYzI/ttny+536famw0=";
+ rev = "deb0dcf8c4544f07564060f6e9b9f6e4b0bfc27d";
+ hash = "sha256-x7PawYYtgsduh60KNnS4LgB7SvoBV9aOJ9cHNsLBBhc=";
};
meta.homepage = "https://github.com/murtaza64/tree-sitter-groovy";
};
@@ -1236,12 +1236,12 @@
};
haskell = buildGrammar {
language = "haskell";
- version = "0.0.0+rev=7fa19f1";
+ version = "0.0.0+rev=98aedbd";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-haskell";
- rev = "7fa19f195803a77855f036ee7f49e4b22856e338";
- hash = "sha256-/cruCFNEyZf5d3TCw+vkJOgJqWvS1Re5F4dMVuXXJBg=";
+ rev = "98aedbd2d6947a168ba3ba3755d70b0cb6b78395";
+ hash = "sha256-eunizglx3nye3LZIAndBX/hf0BvFOWmThQwxvvjqcfU=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-haskell";
};
@@ -1318,17 +1318,6 @@
];
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-hlsl";
};
- hlsplaylist = buildGrammar {
- language = "hlsplaylist";
- version = "0.0.0+rev=3bfda92";
- src = fetchFromGitHub {
- owner = "Freed-Wu";
- repo = "tree-sitter-hlsplaylist";
- rev = "3bfda9271e3adb08d35f47a2102fe957009e1c55";
- hash = "sha256-BvLT+BbnJgM14a896p39dywYy/4S45xOBtBukYTbW6E=";
- };
- meta.homepage = "https://github.com/Freed-Wu/tree-sitter-hlsplaylist";
- };
hocon = buildGrammar {
language = "hocon";
version = "0.0.0+rev=c390f10";
@@ -1364,12 +1353,12 @@
};
htmldjango = buildGrammar {
language = "htmldjango";
- version = "0.0.0+rev=3a64316";
+ version = "0.0.0+rev=a103188";
src = fetchFromGitHub {
owner = "interdependence";
repo = "tree-sitter-htmldjango";
- rev = "3a643167ad9afac5d61e092f08ff5b054576fadf";
- hash = "sha256-sQV7olTaQ68wixzvKV44myVvDUXXjBZh9N3jvDFUSvE=";
+ rev = "a10318892603d9a0b925df7cc7771a840304b997";
+ hash = "sha256-tFcdc2fd+oEVtB2ccKRHppMkxf1bPorKWRgfn5xZoaw=";
};
meta.homepage = "https://github.com/interdependence/tree-sitter-htmldjango";
};
@@ -1408,12 +1397,12 @@
};
idl = buildGrammar {
language = "idl";
- version = "0.0.0+rev=fb65762";
+ version = "0.0.0+rev=f319b8b";
src = fetchFromGitHub {
owner = "cathaysia";
repo = "tree-sitter-idl";
- rev = "fb65762a13538b397e41a5fc1e9564c9df841410";
- hash = "sha256-CDbE9TxcxZWhyv6DPgw/ygvY5fayNF4usTlZPGp/KjM=";
+ rev = "f319b8b0b5cb218cf3f63aa821d2ab722524dbe9";
+ hash = "sha256-x1XT6iowS2ywp8c8RdQqix/WC/OfR5p8MjIhGljbA/8=";
};
meta.homepage = "https://github.com/cathaysia/tree-sitter-idl";
};
@@ -1441,23 +1430,23 @@
};
inko = buildGrammar {
language = "inko";
- version = "0.0.0+rev=v0.5.1";
+ version = "0.0.0+rev=v0.8.0";
src = fetchFromGitHub {
owner = "inko-lang";
repo = "tree-sitter-inko";
- tag = "v0.5.1";
- hash = "sha256-bt/T6O/7of8r9DrA6DU8pM4vWlBCgWWzw89GZbDyJnw=";
+ tag = "v0.8.0";
+ hash = "sha256-Jud0/5vgm3hF94lXu2i6rxHHvpMWFH3y5ye9jIrjmZk=";
};
meta.homepage = "https://github.com/inko-lang/tree-sitter-inko";
};
ispc = buildGrammar {
language = "ispc";
- version = "0.0.0+rev=9b2f9ae";
+ version = "0.0.0+rev=ba1bb38";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-ispc";
- rev = "9b2f9aec2106b94b4e099fe75e73ebd8ae707c04";
- hash = "sha256-vxe+g7o0gXgB4GjhjkxqLqcLL2+8wqMB3tm1xQFSitI=";
+ rev = "ba1bb38ac8ddfa6aa7571cbfe9b4d029f7f77447";
+ hash = "sha256-biJ30aNRzfiuDdT0Xl4h8cQ7x84ck/no272+mjydne0=";
};
passthru.requires = [
"c"
@@ -1466,12 +1455,12 @@
};
janet_simple = buildGrammar {
language = "janet_simple";
- version = "0.0.0+rev=d183186";
+ version = "0.0.0+rev=3c1bdcf";
src = fetchFromGitHub {
owner = "sogaiu";
repo = "tree-sitter-janet-simple";
- rev = "d183186995204314700be3e9e0a48053ea16b350";
- hash = "sha256-zETOH+HpHyiCdOiggRy7VVjOv/WVRDb4qQ+kN9r2Frc=";
+ rev = "3c1bdcfff374138da03a1db25c75efce623910fe";
+ hash = "sha256-IiL3vi2i+VVKtfd49hz4T+mztj+o2Hxaeo/PAGFBX8Y=";
};
meta.homepage = "https://github.com/sogaiu/tree-sitter-janet-simple";
};
@@ -1488,12 +1477,12 @@
};
javadoc = buildGrammar {
language = "javadoc";
- version = "0.0.0+rev=e2f56b4";
+ version = "0.0.0+rev=51b55fb";
src = fetchFromGitHub {
owner = "rmuir";
repo = "tree-sitter-javadoc";
- rev = "e2f56b4d0df08f6ed5df8bae266f9e75b340a9ab";
- hash = "sha256-31HnXUtuimS9gr71r6Rs3VZYmiR8N8iuNNWsbe7Sz48=";
+ rev = "51b55fbf40e49c5207a3f922c0d4550e743761c5";
+ hash = "sha256-18rICYDu/tW5CV/WC8fbr2mwVhg6f9Hn6p9WFMCnxgQ=";
};
meta.homepage = "https://github.com/rmuir/tree-sitter-javadoc";
};
@@ -1510,12 +1499,12 @@
};
jinja = buildGrammar {
language = "jinja";
- version = "0.0.0+rev=413dba9";
+ version = "0.0.0+rev=c213d37";
src = fetchFromGitHub {
owner = "cathaysia";
repo = "tree-sitter-jinja";
- rev = "413dba9fea354b62f6adada1815b2f504e32ffb5";
- hash = "sha256-edHxTYvMfBh0OJbEfKgSqumV2JH/48cQ2u0Uq8e4CxM=";
+ rev = "c213d3745ccdcaaa858869181c7b1bf9557a025f";
+ hash = "sha256-DgHJ3pwLG6yLxzIaNSB+wpmt8Wl0CLdYcfOx+MDr39A=";
};
location = "tree-sitter-jinja";
passthru.requires = [
@@ -1525,12 +1514,12 @@
};
jinja_inline = buildGrammar {
language = "jinja_inline";
- version = "0.0.0+rev=413dba9";
+ version = "0.0.0+rev=c213d37";
src = fetchFromGitHub {
owner = "cathaysia";
repo = "tree-sitter-jinja";
- rev = "413dba9fea354b62f6adada1815b2f504e32ffb5";
- hash = "sha256-edHxTYvMfBh0OJbEfKgSqumV2JH/48cQ2u0Uq8e4CxM=";
+ rev = "c213d3745ccdcaaa858869181c7b1bf9557a025f";
+ hash = "sha256-DgHJ3pwLG6yLxzIaNSB+wpmt8Wl0CLdYcfOx+MDr39A=";
};
location = "tree-sitter-jinja_inline";
meta.homepage = "https://github.com/cathaysia/tree-sitter-jinja";
@@ -1581,12 +1570,12 @@
};
json5 = buildGrammar {
language = "json5";
- version = "0.0.0+rev=aa630ef";
+ version = "0.0.0+rev=248b856";
src = fetchFromGitHub {
owner = "Joakker";
repo = "tree-sitter-json5";
- rev = "aa630ef48903ab99e406a8acd2e2933077cc34e1";
- hash = "sha256-WMGZxt1F2Ca7xoBSCld04LpQr37MhZpARK9mPF8RMUI=";
+ rev = "248b8564567087d7866be76569b182f6dd7e14e9";
+ hash = "sha256-1tzvsId57HV4bKyZ5IRdXqhW2c8sc+0CfcsE9WYxz14=";
};
meta.homepage = "https://github.com/Joakker/tree-sitter-json5";
};
@@ -1603,12 +1592,12 @@
};
julia = buildGrammar {
language = "julia";
- version = "0.0.0+rev=8454f26";
+ version = "0.0.0+rev=60fc237";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-julia";
- rev = "8454f266717232525ed03c7b09164b0404a03150";
- hash = "sha256-o4yep2RJU53lWajxfPgAk/m+DpMIeYCHYAHsR3FZMT8=";
+ rev = "60fc2370605db09d9b39877c6f754ff345bcb7a5";
+ hash = "sha256-6ajPGZqZ96FCvLee1v4SDB61R/aO4ixRgqqU6CT0KHc=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-julia";
};
@@ -1625,12 +1614,12 @@
};
kcl = buildGrammar {
language = "kcl";
- version = "0.0.0+rev=b0b2eb3";
+ version = "0.0.0+rev=026f40f";
src = fetchFromGitHub {
owner = "kcl-lang";
repo = "tree-sitter-kcl";
- rev = "b0b2eb38009e04035a6e266c7e11e541f3caab7c";
- hash = "sha256-Aeu1j77GdsNpo9PU+FcqN3ttT0eLaDKY4n8buftMiDc=";
+ rev = "026f40fb0a59a35da75b9c8801d52f6c14feda24";
+ hash = "sha256-YfD4MpU5c73wNIAEG875cA00OOKs02jeUfn0+iau2E0=";
};
meta.homepage = "https://github.com/kcl-lang/tree-sitter-kcl";
};
@@ -1658,45 +1647,45 @@
};
kitty = buildGrammar {
language = "kitty";
- version = "0.0.0+rev=fa6ab3f";
+ version = "0.0.0+rev=4d93f64";
src = fetchFromGitHub {
owner = "OXY2DEV";
repo = "tree-sitter-kitty";
- rev = "fa6ab3fd32d890a0217495c96b35761e6d2dcb5b";
- hash = "sha256-hyzwZfnslyxqL+98BWejCyLwwJMcj6O8EGuBYrCKn4o=";
+ rev = "4d93f6486c6cd81e583bd18f2462f8a6026f2d83";
+ hash = "sha256-Uj1ctHB6lWtxWAJbgcB1ydWOoGRF4+YvLQaqcQfP8hE=";
};
meta.homepage = "https://github.com/OXY2DEV/tree-sitter-kitty";
};
kos = buildGrammar {
language = "kos";
- version = "0.0.0+rev=03b261c";
+ version = "0.0.0+rev=a733862";
src = fetchFromGitHub {
owner = "kos-lang";
repo = "tree-sitter-kos";
- rev = "03b261c1a78b71c38cf4616497f253c4a4ce118b";
- hash = "sha256-38i2AbPZNQb5EOUoyNvk20HfesLmbkvNxn/oyGx/W3k=";
+ rev = "a7338629da17c5246dc2129cd2a493a6ee59e922";
+ hash = "sha256-CwQQkieDk1YJxYH07V/IoDd4yiOBLLq6ih8szFVabKU=";
};
meta.homepage = "https://github.com/kos-lang/tree-sitter-kos";
};
kotlin = buildGrammar {
language = "kotlin";
- version = "0.0.0+rev=93bfeee";
+ version = "0.0.0+rev=c8ac3d2";
src = fetchFromGitHub {
owner = "fwcd";
repo = "tree-sitter-kotlin";
- rev = "93bfeee1555d2b1442d68c44b0afde2a3b069e46";
- hash = "sha256-9kNYaT0A9/B5/Vzg2d02XRYORlQpI9zK0e8E26FEEDg=";
+ rev = "c8ac3d2627240160b999a2c100de3babbdb8f419";
+ hash = "sha256-hHiZNuiU05zT2JGG/60wX5XD6CY27QDChe4FlRB4j4E=";
};
meta.homepage = "https://github.com/fwcd/tree-sitter-kotlin";
};
koto = buildGrammar {
language = "koto";
- version = "0.0.0+rev=f8b3f62";
+ version = "0.0.0+rev=e8d41cb";
src = fetchFromGitHub {
owner = "koto-lang";
repo = "tree-sitter-koto";
- rev = "f8b3f62c0eed185dca1559789e78759d4bee60e5";
- hash = "sha256-vv5HMDXMcSi91loIppsx/5Hu6jJ7/cedtTyahOBP780=";
+ rev = "e8d41cbaca867aa1b0213e1fc1caeaf593da7bf7";
+ hash = "sha256-a8Rzt7vuJmV8jyRB1tK3Gy6NV0+lv8+e+q5m1EDoq2U=";
};
meta.homepage = "https://github.com/koto-lang/tree-sitter-koto";
};
@@ -1769,12 +1758,12 @@
};
liquid = buildGrammar {
language = "liquid";
- version = "0.0.0+rev=9566ca7";
+ version = "0.0.0+rev=e45dbac";
src = fetchFromGitHub {
owner = "hankthetank27";
repo = "tree-sitter-liquid";
- rev = "9566ca79911052919fce09d26f1f655b5e093857";
- hash = "sha256-KUp/uqTV8C98TLJ4VDtbB9Dygq4DQNv1VInzTtYS/BA=";
+ rev = "e45dbac8c5fa95b1f0e00e7e0c04bc8855823391";
+ hash = "sha256-oTM9YdDVuNlR8aXjeB3oYXQdh+nek+GRLBiestn396U=";
};
meta.homepage = "https://github.com/hankthetank27/tree-sitter-liquid";
};
@@ -1849,12 +1838,12 @@
};
m68k = buildGrammar {
language = "m68k";
- version = "0.0.0+rev=e128454";
+ version = "0.0.0+rev=ab9f2ad";
src = fetchFromGitHub {
owner = "grahambates";
repo = "tree-sitter-m68k";
- rev = "e128454c2210c0e0c10b68fe45ddb8fee80182a3";
- hash = "sha256-g7SZ/TrTaaeGDNOqId4eom9R/5gOyXcmmhWY4WW0fF4=";
+ rev = "ab9f2ad96db56619d05a6474a52e3dbdd705a637";
+ hash = "sha256-owwsDRqPgjTvdJkPXg+TX65g+deBI6Fui6h40EFzKVo=";
};
meta.homepage = "https://github.com/grahambates/tree-sitter-m68k";
};
@@ -1871,12 +1860,12 @@
};
markdown = buildGrammar {
language = "markdown";
- version = "0.0.0+rev=f969cd3";
+ version = "0.0.0+rev=c357072";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-markdown";
- rev = "f969cd3ae3f9fbd4e43205431d0ae286014c05b5";
- hash = "sha256-WUVN7+lzDI+VC5PuJjhHiS4JpVr1x0Ic30i2tVrI6W8=";
+ rev = "c3570720f7f7bbad22fe96603f106276618e0cf5";
+ hash = "sha256-wQKcqU0V6gHj84qOkUwdXsBW3f6MNfJMFxuGTucAgh8=";
};
location = "tree-sitter-markdown";
passthru.requires = [
@@ -1886,24 +1875,24 @@
};
markdown_inline = buildGrammar {
language = "markdown_inline";
- version = "0.0.0+rev=f969cd3";
+ version = "0.0.0+rev=c357072";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-markdown";
- rev = "f969cd3ae3f9fbd4e43205431d0ae286014c05b5";
- hash = "sha256-WUVN7+lzDI+VC5PuJjhHiS4JpVr1x0Ic30i2tVrI6W8=";
+ rev = "c3570720f7f7bbad22fe96603f106276618e0cf5";
+ hash = "sha256-wQKcqU0V6gHj84qOkUwdXsBW3f6MNfJMFxuGTucAgh8=";
};
location = "tree-sitter-markdown-inline";
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-markdown";
};
matlab = buildGrammar {
language = "matlab";
- version = "0.0.0+rev=c2390a5";
+ version = "0.0.0+rev=c9ef947";
src = fetchFromGitHub {
owner = "acristoffers";
repo = "tree-sitter-matlab";
- rev = "c2390a59016f74e7d5f75ef09510768b4f30217e";
- hash = "sha256-WgyWvItbysSqeD/LdBr233NYlKF1HaxIDtHIr6BQOjw=";
+ rev = "c9ef947ec67fb6b500d5def4f5e09b56990a9f91";
+ hash = "sha256-PjOJSMWQ0z8vVE38OdFgloFDMbKr/SVOYFTy0krtgRQ=";
};
meta.homepage = "https://github.com/acristoffers/tree-sitter-matlab";
};
@@ -1931,38 +1920,27 @@
};
meson = buildGrammar {
language = "meson";
- version = "0.0.0+rev=c84f354";
+ version = "0.0.0+rev=aa8d472";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-meson";
- rev = "c84f3540624b81fc44067030afce2ff78d6ede05";
- hash = "sha256-+GMR051L89asgavX2T3zKwWl8xUFHenlCWJYELhMuyA=";
+ rev = "aa8d472034956f94f51f2ef2cbfec4cc07efbfde";
+ hash = "sha256-UJREw7mQqJTKcD2owKJ4GZkkch/KGTIy9/+Fdl3W3ik=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-meson";
};
mlir = buildGrammar {
language = "mlir";
- version = "0.0.0+rev=96fa0ad";
+ version = "0.0.0+rev=a5bcbd0";
src = fetchFromGitHub {
owner = "artagnon";
repo = "tree-sitter-mlir";
- rev = "96fa0adc3028cc6a9d281370c9f213a457c4a2d0";
- hash = "sha256-6zXWbcwptKfJxZzx9txteVS1LSTSD9XUs3B4JsJLZlk=";
+ rev = "a5bcbd07b4bc6103a8ee1536188c42a2059d43ba";
+ hash = "sha256-h0ZKsVbZg4i99qsH0xHW/KcStl73HBKX8LtixMzPcf0=";
};
generate = true;
meta.homepage = "https://github.com/artagnon/tree-sitter-mlir";
};
- muttrc = buildGrammar {
- language = "muttrc";
- version = "0.0.0+rev=173b0ab";
- src = fetchFromGitHub {
- owner = "neomutt";
- repo = "tree-sitter-muttrc";
- rev = "173b0ab53a9c07962c9777189c4c70e90f1c1837";
- hash = "sha256-zma/oyMFI+r+/616yXV9b4ptC1FNYpHlpqY/Fez++n0=";
- };
- meta.homepage = "https://github.com/neomutt/tree-sitter-muttrc";
- };
nasm = buildGrammar {
language = "nasm";
version = "0.0.0+rev=d1b3638";
@@ -1987,23 +1965,23 @@
};
nickel = buildGrammar {
language = "nickel";
- version = "0.0.0+rev=b5b6cc3";
+ version = "0.0.0+rev=7780a16";
src = fetchFromGitHub {
owner = "nickel-lang";
repo = "tree-sitter-nickel";
- rev = "b5b6cc3bc7b9ea19f78fed264190685419cd17a8";
- hash = "sha256-aPiOtpZJQQmAjCwx2Ssirhe6rqxbrwjxIWK5l3L14EY=";
+ rev = "7780a16a992d8e68f8fb65cb6828caa01f22fd17";
+ hash = "sha256-uUaudpb/t55OPpkE2VaLGiEqP3Lt6485HSkliJ6IH8Y=";
};
meta.homepage = "https://github.com/nickel-lang/tree-sitter-nickel";
};
nim = buildGrammar {
language = "nim";
- version = "0.0.0+rev=3878440";
+ version = "0.0.0+rev=ac72ba3";
src = fetchFromGitHub {
owner = "alaviss";
repo = "tree-sitter-nim";
- rev = "3878440d9398515ae053c6f6024986e69868bb74";
- hash = "sha256-mdAT1jTFeVP8TYi4H36sjd826KmxHQ1EZ+8gd37NGfY=";
+ rev = "ac72ba30d16edf0be021588a9301ede4accd6cf4";
+ hash = "sha256-1jr8tKdKvKTKCUSEvC+vRGw+W1Rl3WMbv0ZS3u7H1GA=";
};
passthru.requires = [
"nim_format_string"
@@ -2034,12 +2012,12 @@
};
nix = buildGrammar {
language = "nix";
- version = "0.0.0+rev=eabf968";
+ version = "0.0.0+rev=3d0173d";
src = fetchFromGitHub {
owner = "nix-community";
repo = "tree-sitter-nix";
- rev = "eabf96807ea4ab6d6c7f09b671a88cd483542840";
- hash = "sha256-cSiBd0XkSR8l1CF2vkThWUtMxqATwuxCNO5oy2kyOZY=";
+ rev = "3d0173d903e630b6e14d17f1cf79488791379ded";
+ hash = "sha256-DFmFRZ47TPr8mgmRyXuHLfkQRmO58m4QyN9OBISb7IE=";
};
meta.homepage = "https://github.com/nix-community/tree-sitter-nix";
};
@@ -2056,12 +2034,12 @@
};
nu = buildGrammar {
language = "nu";
- version = "0.0.0+rev=696d257";
+ version = "0.0.0+rev=d694570";
src = fetchFromGitHub {
owner = "nushell";
repo = "tree-sitter-nu";
- rev = "696d257f6b652edb50878a783b30ad7833dec49e";
- hash = "sha256-G+XuQSqvJ9xRNq4fYiyHK9+AmCNofayPOC6JrFXpcjU=";
+ rev = "d694570aa26b53d0d642460a0430e8aa07dcbea0";
+ hash = "sha256-eWHAcV8bPCnL9y4PtPn6cJRylGQ2KMxCUoUGwDVigkg=";
};
meta.homepage = "https://github.com/nushell/tree-sitter-nu";
};
@@ -2092,24 +2070,24 @@
};
ocaml = buildGrammar {
language = "ocaml";
- version = "0.0.0+rev=5a979b3";
+ version = "0.0.0+rev=527d62e";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-ocaml";
- rev = "5a979b3ec7f1fe990b8e8c4412294a0cf7228e45";
- hash = "sha256-dG9v5/NcYR8J33wEfA8BpJNFd5i4M8Cay+gBxjiRIqw=";
+ rev = "527d62ef0f24ce0d97fbedf004921d75d0a7e086";
+ hash = "sha256-HvnMfxQ0Cxb5atSIyW518AM/Z/5JhjisvbUSYlPnwRw=";
};
location = "grammars/ocaml";
meta.homepage = "https://github.com/tree-sitter/tree-sitter-ocaml";
};
ocaml_interface = buildGrammar {
language = "ocaml_interface";
- version = "0.0.0+rev=5a979b3";
+ version = "0.0.0+rev=527d62e";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-ocaml";
- rev = "5a979b3ec7f1fe990b8e8c4412294a0cf7228e45";
- hash = "sha256-dG9v5/NcYR8J33wEfA8BpJNFd5i4M8Cay+gBxjiRIqw=";
+ rev = "527d62ef0f24ce0d97fbedf004921d75d0a7e086";
+ hash = "sha256-HvnMfxQ0Cxb5atSIyW518AM/Z/5JhjisvbUSYlPnwRw=";
};
location = "grammars/interface";
passthru.requires = [
@@ -2175,24 +2153,24 @@
};
perl = buildGrammar {
language = "perl";
- version = "0.0.0+rev=ea9667d";
+ version = "0.0.0+rev=c3e17b3";
src = fetchFromGitHub {
owner = "tree-sitter-perl";
repo = "tree-sitter-perl";
- rev = "ea9667dc65a816acace002a2b1b099978785ca33";
- hash = "sha256-siyJfN5s63pPxrSpuzKltgXWeNDytc80MDXo4pz3j7Q=";
+ rev = "c3e17b31179bf8f658c9f37c7a3ea6a202212d5a";
+ hash = "sha256-i5T7jT0zi0TSt7eAvjvJRak8kpzxOEoPydU+yEosNgA=";
};
generate = true;
meta.homepage = "https://github.com/tree-sitter-perl/tree-sitter-perl";
};
php = buildGrammar {
language = "php";
- version = "0.0.0+rev=3f2465c";
+ version = "0.0.0+rev=3821698";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-php";
- rev = "3f2465c217d0a966d41e584b42d75522f2a3149e";
- hash = "sha256-RV6wHYVTOFdRYMqXdPw2Ryk3FadJJ4jcJVFjsJG8Ri0=";
+ rev = "38216983c07bf9e1b56e16acde53b25adaeab61c";
+ hash = "sha256-Y02akiL95WGV8J3gd6FXQ0XHPoE59d2zuFQkXh6eyAQ=";
};
location = "php";
passthru.requires = [
@@ -2202,12 +2180,12 @@
};
php_only = buildGrammar {
language = "php_only";
- version = "0.0.0+rev=3f2465c";
+ version = "0.0.0+rev=3821698";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-php";
- rev = "3f2465c217d0a966d41e584b42d75522f2a3149e";
- hash = "sha256-RV6wHYVTOFdRYMqXdPw2Ryk3FadJJ4jcJVFjsJG8Ri0=";
+ rev = "38216983c07bf9e1b56e16acde53b25adaeab61c";
+ hash = "sha256-Y02akiL95WGV8J3gd6FXQ0XHPoE59d2zuFQkXh6eyAQ=";
};
location = "php_only";
meta.homepage = "https://github.com/tree-sitter/tree-sitter-php";
@@ -2236,12 +2214,12 @@
};
pkl = buildGrammar {
language = "pkl";
- version = "0.0.0+rev=f5beed1";
+ version = "0.0.0+rev=3486521";
src = fetchFromGitHub {
owner = "apple";
repo = "tree-sitter-pkl";
- rev = "f5beed1da8e5fc856a1a11e29a929d0b7cdcfe3c";
- hash = "sha256-q0K+q8GEOiwbgFjA/jiY/Hg6kPlgqMUvH8g+GdEDU3I=";
+ rev = "3486521eb1c2fcb3c9a5e88300215930ee515693";
+ hash = "sha256-bQNSSDVVi0kmsIlpmI+7LWf8/SrXylAyEju/DAahqzg=";
};
meta.homepage = "https://github.com/apple/tree-sitter-pkl";
};
@@ -2258,12 +2236,12 @@
};
pod = buildGrammar {
language = "pod";
- version = "0.0.0+rev=57c606a";
+ version = "0.0.0+rev=ffbd7f3";
src = fetchFromGitHub {
owner = "tree-sitter-perl";
repo = "tree-sitter-pod";
- rev = "57c606aa3373ba876d44113d13fe7bdc2c060723";
- hash = "sha256-HE4jwqAn4jfyonFkUzA0n+MZxWa7LuV8Cfq5wgrDwjI=";
+ rev = "ffbd7f3b7b68edaaa0532898953c627355cb1a1a";
+ hash = "sha256-5EHA3hPyrfana+g3kxqnKUwT2jUiVNb8fy07RWwp1/A=";
};
generate = true;
meta.homepage = "https://github.com/tree-sitter-perl/tree-sitter-pod";
@@ -2292,12 +2270,12 @@
};
powershell = buildGrammar {
language = "powershell";
- version = "0.0.0+rev=73800ec";
+ version = "0.0.0+rev=e7bd348";
src = fetchFromGitHub {
owner = "airbus-cert";
repo = "tree-sitter-powershell";
- rev = "73800ecc8bddeee8f1079a5a2e0c13c3d00269bb";
- hash = "sha256-76Rjkoh+qtmr4KCbsEEhx1VrVlGfOxywHRFKNA/XYhU=";
+ rev = "e7bd348c49fdfd5c853a146a670965ba516a6239";
+ hash = "sha256-jJq/x0jsXiV5VdYA+vspecTEiEy3vWLCdF0N4v0lZcs=";
};
meta.homepage = "https://github.com/airbus-cert/tree-sitter-powershell";
};
@@ -2323,33 +2301,6 @@
};
meta.homepage = "https://github.com/victorhqc/tree-sitter-prisma";
};
- problog = buildGrammar {
- language = "problog";
- version = "0.0.0+rev=d8d415f";
- src = fetchFromGitHub {
- owner = "foxyseta";
- repo = "tree-sitter-prolog";
- rev = "d8d415f6a1cf80ca138524bcc395810b176d40fa";
- hash = "sha256-SEqqmkfV/wsr1ObcBN5My29RY9TWfxnQlsnEEIZyR18=";
- };
- location = "grammars/problog";
- passthru.requires = [
- "prolog"
- ];
- meta.homepage = "https://github.com/foxyseta/tree-sitter-prolog";
- };
- prolog = buildGrammar {
- language = "prolog";
- version = "0.0.0+rev=d8d415f";
- src = fetchFromGitHub {
- owner = "foxyseta";
- repo = "tree-sitter-prolog";
- rev = "d8d415f6a1cf80ca138524bcc395810b176d40fa";
- hash = "sha256-SEqqmkfV/wsr1ObcBN5My29RY9TWfxnQlsnEEIZyR18=";
- };
- location = "grammars/prolog";
- meta.homepage = "https://github.com/foxyseta/tree-sitter-prolog";
- };
promql = buildGrammar {
language = "promql";
version = "0.0.0+rev=77625d7";
@@ -2374,12 +2325,12 @@
};
proto = buildGrammar {
language = "proto";
- version = "0.0.0+rev=d65a18c";
+ version = "0.0.0+rev=cf8e4eb";
src = fetchFromGitHub {
owner = "coder3101";
repo = "tree-sitter-proto";
- rev = "d65a18ce7c2242801f702770114ad08056c7f8c9";
- hash = "sha256-bgrL4IK9sUB5tGoIBdNLGudbFf2OhQYdw0Ub1gM0NL0=";
+ rev = "cf8e4eba6e5b4afb9eb16c9178bba3d2504b46c2";
+ hash = "sha256-jG7j+uBb92QdI5En/qjxhfKYm9Elf8/+OFvw1makUkY=";
};
meta.homepage = "https://github.com/coder3101/tree-sitter-proto";
};
@@ -2466,67 +2417,67 @@
};
ql = buildGrammar {
language = "ql";
- version = "0.0.0+rev=1fd627a";
+ version = "0.0.0+rev=5b8ee9a";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-ql";
- rev = "1fd627a4e8bff8c24c11987474bd33112bead857";
- hash = "sha256-mJ/bj09mT1WTaiKoXiRXDM7dkenf5hv2ArXieeTVe6I=";
+ rev = "5b8ee9adaa1f2a1ea958064b61f8feb0a5a886c0";
+ hash = "sha256-YhT1R0PrOFfqCLIdlAiJB+D2d31xW0iGAn8UwoxHui0=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-ql";
};
qmldir = buildGrammar {
language = "qmldir";
- version = "0.0.0+rev=6b2b5e4";
+ version = "0.0.0+rev=c57e008";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-qmldir";
- rev = "6b2b5e41734bd6f07ea4c36ac20fb6f14061c841";
- hash = "sha256-7ic9Xd+1G0JM25bY0f8N5r6YZx5NV5HrJXXHp6pXvo4=";
+ rev = "c57e00865a1a6f1cca83340d6dad91f13df55479";
+ hash = "sha256-FQpheeuWg66jpIVtp++2MmJmEjlE2SiNcv59vlpNtkc=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-qmldir";
};
qmljs = buildGrammar {
language = "qmljs";
- version = "0.0.0+rev=0bec435";
+ version = "0.0.0+rev=de96ed6";
src = fetchFromGitHub {
owner = "yuja";
repo = "tree-sitter-qmljs";
- rev = "0bec4359a7eb2f6c9220cd57372d87d236f66d59";
- hash = "sha256-tV4lipey+OAQwygRFp9lQAzgCNiZzSu7p3Mr6CCBH1g=";
+ rev = "de96ed62abded51fcdfcbeaaa120e0dd0d20c697";
+ hash = "sha256-Yn3/adOETfPHBVCIVfI5qXUwC2wQr14pbhK2aUtdCiY=";
};
meta.homepage = "https://github.com/yuja/tree-sitter-qmljs";
};
query = buildGrammar {
language = "query";
- version = "0.0.0+rev=fc5409c";
+ version = "0.0.0+rev=8e9e223";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-query";
- rev = "fc5409c6820dd5e02b0b0a309d3da2bfcde2db17";
- hash = "sha256-51dMHH50zVP/N0ljZs7J2wh0EiNtsr2+UvM/S3LkP10=";
+ rev = "8e9e223812ff30854fbc912adbec696ba5f0e023";
+ hash = "sha256-TxAbPlDeNsF6j5NverXARlcGAtOcRRmjzxsZpyCoPLY=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-query";
};
r = buildGrammar {
language = "r";
- version = "0.0.0+rev=0e6ef77";
+ version = "0.0.0+rev=58a2279";
src = fetchFromGitHub {
owner = "r-lib";
repo = "tree-sitter-r";
- rev = "0e6ef7741712c09dc3ee6e81c42e919820cc65ef";
- hash = "sha256-9T0wjo8i34rvR1g4WBpDFQXQodyv4kNomayGBZK9hfg=";
+ rev = "58a22794466c0fc15b0d3b40531db751593721e8";
+ hash = "sha256-OHmCctvFOmmL4JmjuvawR45dourXmII7Cx7hLlUCDtI=";
};
meta.homepage = "https://github.com/r-lib/tree-sitter-r";
};
racket = buildGrammar {
language = "racket";
- version = "0.0.0+rev=54649be";
+ version = "0.0.0+rev=e2b8064";
src = fetchFromGitHub {
owner = "6cdh";
repo = "tree-sitter-racket";
- rev = "54649be8b939341d2d5410b594ab954fe8814bd0";
- hash = "sha256-+pYy/WzjXqTBBxJRBbyFKGOdBd1WZ+AFr8oUWJWR/qU=";
+ rev = "e2b8064b32ab1dfa30532aeac1577ae4c1cc3df5";
+ hash = "sha256-NuEFNKoP2JaodFfX/8wizLC3xjKPvLwHIgefzI5oXMg=";
};
meta.homepage = "https://github.com/6cdh/tree-sitter-racket";
};
@@ -2554,12 +2505,12 @@
};
razor = buildGrammar {
language = "razor";
- version = "0.0.0+rev=fe46ce5";
+ version = "0.0.0+rev=900f53d";
src = fetchFromGitHub {
owner = "tris203";
repo = "tree-sitter-razor";
- rev = "fe46ce5ea7d844e53d59bc96f2175d33691c61c5";
- hash = "sha256-E4fgy588g6IP258TS2DvoILc1Aikvpfbtq20VIhBE4U=";
+ rev = "900f53dc6cc592f6e616adc2f732cb0f66fc9147";
+ hash = "sha256-s+evcRfRQcW7HAGRikqF+zEZK4WYFTGWWRcpe9cwxgM=";
};
meta.homepage = "https://github.com/tris203/tree-sitter-razor";
};
@@ -2609,34 +2560,34 @@
};
rego = buildGrammar {
language = "rego";
- version = "0.0.0+rev=ddd39af";
+ version = "0.0.0+rev=7f8a431";
src = fetchFromGitHub {
owner = "FallenAngel97";
repo = "tree-sitter-rego";
- rev = "ddd39af81fe8b0288102a7cb97959dfce723e0f3";
- hash = "sha256-I6jZ5jsJUAdjQti/lj4d11+GRSHjbN/hoGYO7ezGKv8=";
+ rev = "7f8a43138951a13832919312290147bd175180cd";
+ hash = "sha256-kBTK6IjEnMnSPIF964GmTv6m+RukfP2TLcPHqHnxyIc=";
};
meta.homepage = "https://github.com/FallenAngel97/tree-sitter-rego";
};
requirements = buildGrammar {
language = "requirements";
- version = "0.0.0+rev=caeb2ba";
+ version = "0.0.0+rev=2c3bb29";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-requirements";
- rev = "caeb2ba854dea55931f76034978de1fd79362939";
- hash = "sha256-YszXgZZSMiWBf2vIij8+5GA1FY3Ipeoow8dkrzkLl78=";
+ rev = "2c3bb291f497258ba417d052faa14a2dfee6d401";
+ hash = "sha256-jLG+DcdVfC2Rj8SYL3WTBWreOLJWwtxpPxzyvJl77d4=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-requirements";
};
rescript = buildGrammar {
language = "rescript";
- version = "0.0.0+rev=43c2f1f";
+ version = "0.0.0+rev=19ed8a8";
src = fetchFromGitHub {
owner = "rescript-lang";
repo = "tree-sitter-rescript";
- rev = "43c2f1f35024918d415dc933d4cc534d6419fedf";
- hash = "sha256-QG4LvF/ix7wKHrZ1pUNXzG6ibbITUYAZYb4a39qJF/o=";
+ rev = "19ed8a8e6bcc844b71c37e9edaffc60c77f74d7c";
+ hash = "sha256-mQJSmb9Qy5pFS+nNz4+C7RPs1mpAoxxqbx7seYo8+JI=";
};
meta.homepage = "https://github.com/rescript-lang/tree-sitter-rescript";
};
@@ -2708,12 +2659,12 @@
};
rst = buildGrammar {
language = "rst";
- version = "0.0.0+rev=4e562e1";
+ version = "0.0.0+rev=a60f107";
src = fetchFromGitHub {
owner = "stsewd";
repo = "tree-sitter-rst";
- rev = "4e562e1598b95b93db4f3f64fe40ddefbc677a15";
- hash = "sha256-C65FmrEUyMQN+rF3RTN1oNVJtGiTHMZvdRyy/tMjVqY=";
+ rev = "a60f1070b824cb8bb8409b4b6d7da0d07997c30e";
+ hash = "sha256-miULT1wsWvIdgtOfT5claorIjJFbO9xzy0/SbBrmSvU=";
};
meta.homepage = "https://github.com/stsewd/tree-sitter-rst";
};
@@ -2752,12 +2703,12 @@
};
scala = buildGrammar {
language = "scala";
- version = "0.0.0+rev=14c5cfd";
+ version = "0.0.0+rev=4d081d9";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-scala";
- rev = "14c5cfd2b8e0f057ba0f4f72ee4812b0ae6cdce3";
- hash = "sha256-xDp1+i0QLnY18EtiwurW1B4bbeS1qZKNJRxS6Qeb3pw=";
+ rev = "4d081d98670ff6e98ca42c085294fc75eec15e1d";
+ hash = "sha256-arwLfqA/C4w8GQv6GE/H4/tDRWaGDfvEiv7Q7mYRBRI=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-scala";
};
@@ -2799,12 +2750,12 @@
};
sflog = buildGrammar {
language = "sflog";
- version = "0.0.0+rev=3597575";
+ version = "0.0.0+rev=27a3091";
src = fetchFromGitHub {
owner = "aheber";
repo = "tree-sitter-sfapex";
- rev = "3597575a429766dd7ecce9f5bb97f6fec4419d5d";
- hash = "sha256-TOytPX/jBdVDYHBacpT9hAVVZcW+XGvIsubAqs9Dm80=";
+ rev = "27a3091a1a444ce19d6099e00cd3788f019d0c2b";
+ hash = "sha256-Pg8zZmjGFcLftPNPiASt0uUxYG6CRcsB9qKhTMC5G7U=";
};
location = "sflog";
meta.homepage = "https://github.com/aheber/tree-sitter-sfapex";
@@ -2822,23 +2773,23 @@
};
slim = buildGrammar {
language = "slim";
- version = "0.0.0+rev=a06113f";
+ version = "0.0.0+rev=d4ff7e3";
src = fetchFromGitHub {
owner = "theoo";
repo = "tree-sitter-slim";
- rev = "a06113f5175b805a37d20df0a6f9d722e0ab6cfe";
- hash = "sha256-Uk0AltQNhVd3VHQYRN+gJWd7tnVYr7qzBce6yEdtVaw=";
+ rev = "d4ff7e388eb271c04662f2176c08548c9c51078f";
+ hash = "sha256-wl+HTLJoadlSTfDUCDV/juECth5e/FDNa7lPi8+1EEk=";
};
meta.homepage = "https://github.com/theoo/tree-sitter-slim";
};
slint = buildGrammar {
language = "slint";
- version = "0.0.0+rev=4d7ad06";
+ version = "0.0.0+rev=68b2524";
src = fetchFromGitHub {
owner = "slint-ui";
repo = "tree-sitter-slint";
- rev = "4d7ad0617c30f865f051bbac04a9826bea29f987";
- hash = "sha256-u/nVbZEJPMbBzYCgXpE8L1KJyWJmB27uofSkeOMSOnI=";
+ rev = "68b25244cec6eb9d7f8f790ef781c29c822d8f84";
+ hash = "sha256-ugdB7gN3zTAGLm9Jk2hjuuZWxIYxEWYXW72qLpXM+1Q=";
};
meta.homepage = "https://github.com/slint-ui/tree-sitter-slint";
};
@@ -2899,24 +2850,24 @@
};
soql = buildGrammar {
language = "soql";
- version = "0.0.0+rev=3597575";
+ version = "0.0.0+rev=27a3091";
src = fetchFromGitHub {
owner = "aheber";
repo = "tree-sitter-sfapex";
- rev = "3597575a429766dd7ecce9f5bb97f6fec4419d5d";
- hash = "sha256-TOytPX/jBdVDYHBacpT9hAVVZcW+XGvIsubAqs9Dm80=";
+ rev = "27a3091a1a444ce19d6099e00cd3788f019d0c2b";
+ hash = "sha256-Pg8zZmjGFcLftPNPiASt0uUxYG6CRcsB9qKhTMC5G7U=";
};
location = "soql";
meta.homepage = "https://github.com/aheber/tree-sitter-sfapex";
};
sosl = buildGrammar {
language = "sosl";
- version = "0.0.0+rev=3597575";
+ version = "0.0.0+rev=27a3091";
src = fetchFromGitHub {
owner = "aheber";
repo = "tree-sitter-sfapex";
- rev = "3597575a429766dd7ecce9f5bb97f6fec4419d5d";
- hash = "sha256-TOytPX/jBdVDYHBacpT9hAVVZcW+XGvIsubAqs9Dm80=";
+ rev = "27a3091a1a444ce19d6099e00cd3788f019d0c2b";
+ hash = "sha256-Pg8zZmjGFcLftPNPiASt0uUxYG6CRcsB9qKhTMC5G7U=";
};
location = "sosl";
meta.homepage = "https://github.com/aheber/tree-sitter-sfapex";
@@ -2978,12 +2929,12 @@
};
ssh_config = buildGrammar {
language = "ssh_config";
- version = "0.0.0+rev=71d2693";
+ version = "0.0.0+rev=b7db80e";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-ssh-config";
- rev = "71d2693deadaca8cdc09e38ba41d2f6042da1616";
- hash = "sha256-LvdvnzpqjuVAf5DZmxYfELV3C+U1iJuG9B+UCQD47qo=";
+ rev = "b7db80ee4c8a29543904f14fb3ae3eb24f047925";
+ hash = "sha256-PX5oVRBOUgTnG6UcqVNM3EZyAc1SPE0vbZjyA19FQHc=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-ssh-config";
};
@@ -3033,12 +2984,12 @@
};
superhtml = buildGrammar {
language = "superhtml";
- version = "0.0.0+rev=8b5bb27";
+ version = "0.0.0+rev=d4d81e1";
src = fetchFromGitHub {
owner = "kristoff-it";
repo = "superhtml";
- rev = "8b5bb272b269afdd38cdf641c4a707dd92fbe902";
- hash = "sha256-9RizfSi+ouCcLUL2+gPc8GljNo9KCX57VElLSlha05A=";
+ rev = "d4d81e1ad35f8f6c060f3cb49b60c5d54a7d012a";
+ hash = "sha256-tDRb/TKyj0icKJRuzNn+eNbz1S1BWj8K5eR+reZAbyM=";
};
location = "tree-sitter-superhtml";
meta.homepage = "https://github.com/kristoff-it/superhtml";
@@ -3078,12 +3029,12 @@
};
swift = buildGrammar {
language = "swift";
- version = "0.0.0+rev=8abb3e8";
+ version = "0.0.0+rev=28fe3a8";
src = fetchFromGitHub {
owner = "alex-pinkus";
repo = "tree-sitter-swift";
- rev = "8abb3e8b33256d89127a35e87480736f74755ff9";
- hash = "sha256-JztVY5/jb532lUV0ziEIW1auDsfKy7gZNDFHvjDIPLk=";
+ rev = "28fe3a8a85586aa297524fe6164140b9521dcaff";
+ hash = "sha256-uotg71UvLWd98jRe3YvQEBcZFJR2VXocjNWrXTNUW8g=";
};
generate = true;
meta.homepage = "https://github.com/alex-pinkus/tree-sitter-swift";
@@ -3112,23 +3063,23 @@
};
systemverilog = buildGrammar {
language = "systemverilog";
- version = "0.0.0+rev=2939285";
+ version = "0.0.0+rev=aa09b90";
src = fetchFromGitHub {
owner = "gmlarumbe";
repo = "tree-sitter-systemverilog";
- rev = "293928578cb27fbd0005fcc5f09c09a1e8628c89";
- hash = "sha256-bvnJlEiaHtcmvNw3yyiysKMvdz919Fvr+/fyH8GcEYs=";
+ rev = "aa09b9004478cea0f46d877608910dc153b277b6";
+ hash = "sha256-ig4mpzN/bvnD5e5MN11a7YkONDeJ3R8kz/AbS0GDreI=";
};
meta.homepage = "https://github.com/gmlarumbe/tree-sitter-systemverilog";
};
t32 = buildGrammar {
language = "t32";
- version = "0.0.0+rev=3bce397";
+ version = "0.0.0+rev=acc92b0";
src = fetchFromGitHub {
owner = "xasc";
repo = "tree-sitter-t32";
- rev = "3bce3977303c3f88bfa9fcdfcfd1a4f8f6ffa0b0";
- hash = "sha256-ysdKgzF5VFV0BeeXlV8gZ5pW7WzYJtYnyBE+MaxG3Jo=";
+ rev = "acc92b00d8564421f9c9c05ececfd2c7c942fe47";
+ hash = "sha256-7qWKy5ZcAB2VptlVHIGf3qTPmDI7mRdvB8weRvH9mi0=";
};
meta.homepage = "https://github.com/xasc/tree-sitter-t32";
};
@@ -3145,12 +3096,12 @@
};
tact = buildGrammar {
language = "tact";
- version = "0.0.0+rev=a6267c2";
+ version = "0.0.0+rev=1c689f0";
src = fetchFromGitHub {
owner = "tact-lang";
repo = "tree-sitter-tact";
- rev = "a6267c2091ed432c248780cec9f8d42c8766d9ad";
- hash = "sha256-2AUN/VYor3K0hkneLYa6+LjE+V8EJogFqBTgdfvOiKM=";
+ rev = "1c689f0a8bbe5910db628a62bfc26d37f54bf9be";
+ hash = "sha256-SA33We0hOBc97iBom7m2tBfcquopJs1hi/QsJFb7XBw=";
};
meta.homepage = "https://github.com/tact-lang/tree-sitter-tact";
};
@@ -3179,12 +3130,12 @@
};
templ = buildGrammar {
language = "templ";
- version = "0.0.0+rev=1c6db04";
+ version = "0.0.0+rev=04bae7c";
src = fetchFromGitHub {
owner = "vrischmann";
repo = "tree-sitter-templ";
- rev = "1c6db04effbcd7773c826bded9783cbc3061bd55";
- hash = "sha256-n+TJLNB6AoFOjkqpb8vkxXsXno/vE8M8yRzVflRUVd0=";
+ rev = "04bae7c82de2fcfec94254fef50f5f1c5924f5f5";
+ hash = "sha256-s2hkhES86Idf9vbDqrX6Lh7iUn0dTq8DBqw5qUBAYzE=";
};
meta.homepage = "https://github.com/vrischmann/tree-sitter-templ";
};
@@ -3258,17 +3209,6 @@
};
meta.homepage = "https://github.com/tlaplus-community/tree-sitter-tlaplus";
};
- tmux = buildGrammar {
- language = "tmux";
- version = "0.0.0+rev=75d1b99";
- src = fetchFromGitHub {
- owner = "Freed-Wu";
- repo = "tree-sitter-tmux";
- rev = "75d1b995b0c23400ac8e49db757a2e0386f9fa8f";
- hash = "sha256-LdXPdijcsfPYIrbTMDIy46wqOaJfxwVBVpOVVfXrJIg=";
- };
- meta.homepage = "https://github.com/Freed-Wu/tree-sitter-tmux";
- };
todotxt = buildGrammar {
language = "todotxt";
version = "0.0.0+rev=3937c5c";
@@ -3331,12 +3271,12 @@
};
twig = buildGrammar {
language = "twig";
- version = "0.0.0+rev=7195ee5";
+ version = "0.0.0+rev=0afd9a6";
src = fetchFromGitHub {
owner = "gbprod";
repo = "tree-sitter-twig";
- rev = "7195ee573ab5c3b3bb0e91b042e6f83ac1b11104";
- hash = "sha256-wQ5pHFU35wqT3UxHIZ/cP8RPPX+mpGQCoBr9ilRfc4w=";
+ rev = "0afd9a6d808944e65a7be393e31868b85345735f";
+ hash = "sha256-QXwijdfVay4PH0yKmWuMUnqqInir2yjJZjHxZQTYRxE=";
};
meta.homepage = "https://github.com/gbprod/tree-sitter-twig";
};
@@ -3443,12 +3383,12 @@
};
v = buildGrammar {
language = "v";
- version = "0.0.0+rev=095865d";
+ version = "0.0.0+rev=925d457";
src = fetchFromGitHub {
owner = "vlang";
repo = "v-analyzer";
- rev = "095865df4b9ddd21e376d635586c663d5a736f71";
- hash = "sha256-ypdtFzQwd5t7/iFthX4hb4zNeFQZKaatF8JA4XutOt4=";
+ rev = "925d4570d1668746762a2cdf0ecb9a25be704a67";
+ hash = "sha256-MRkZTJkpqvdpuyOuk683ko5GPtIa4U7BozzssuAX+0M=";
};
location = "tree_sitter_v";
meta.homepage = "https://github.com/vlang/v-analyzer";
@@ -3477,12 +3417,12 @@
};
vhdl = buildGrammar {
language = "vhdl";
- version = "0.0.0+rev=c2d9be3";
+ version = "0.0.0+rev=e97406d";
src = fetchFromGitHub {
owner = "jpt13653903";
repo = "tree-sitter-vhdl";
- rev = "c2d9be3d5ab7fb2cae8ad5ae604cd3606a4af0f2";
- hash = "sha256-/bz7ab0XjLfHYEJDv71uLSbduInjDK06d3UQLdiiJ78=";
+ rev = "e97406d6ddfbed73dd8cdfcc3cf4c7b200b4211d";
+ hash = "sha256-2vSkL8DetMtTRpvujg4tzxW2AbAhz56qBWRmgA8u3qk=";
};
meta.homepage = "https://github.com/jpt13653903/tree-sitter-vhdl";
};
@@ -3499,23 +3439,23 @@
};
vim = buildGrammar {
language = "vim";
- version = "0.0.0+rev=3092fcd";
+ version = "0.0.0+rev=039c8d0";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-vim";
- rev = "3092fcd99eb87bbd0fc434aa03650ba58bd5b43b";
- hash = "sha256-MnLBFuJCJbetcS07fG5fkCwHtf/EcNP+Syf0Gn0K39c=";
+ rev = "039c8d0aa1deae00ddeb0374dd70bcc0ec56938d";
+ hash = "sha256-i+CfSWLRXhR2g98cGlfW4iRhNb3nt8O+WJ1Bjf2tnEM=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-vim";
};
vimdoc = buildGrammar {
language = "vimdoc";
- version = "0.0.0+rev=f061895";
+ version = "0.0.0+rev=23daa41";
src = fetchFromGitHub {
owner = "neovim";
repo = "tree-sitter-vimdoc";
- rev = "f061895a0eff1d5b90e4fb60d21d87be3267031a";
- hash = "sha256-K3nzoLlzbgIJc7EnqgYgNDLCBXOg7oy9eV2lI0duwaE=";
+ rev = "23daa416c1ff5d15f59a1aa648f031d6e3ee15c5";
+ hash = "sha256-SG5oz/vXz1rdCjzAo2bE3xz107Hc+qOqfsC5V+j0X1I=";
};
meta.homepage = "https://github.com/neovim/tree-sitter-vimdoc";
};
@@ -3576,12 +3516,12 @@
};
wit = buildGrammar {
language = "wit";
- version = "0.0.0+rev=v1.3.0";
+ version = "0.0.0+rev=v1.4.0";
src = fetchFromGitHub {
owner = "bytecodealliance";
repo = "tree-sitter-wit";
- tag = "v1.3.0";
- hash = "sha256-FG73R38Bw60+aT5YB/xpENCnQwoGMVjXRLjP1GdJEn4=";
+ tag = "v1.4.0";
+ hash = "sha256-63xH63s6lgticgRtMz7LCL1ThuXegn7qFCZgeQqIZH4=";
};
meta.homepage = "https://github.com/bytecodealliance/tree-sitter-wit";
};
@@ -3635,12 +3575,12 @@
};
yaml = buildGrammar {
language = "yaml";
- version = "0.0.0+rev=4463985";
+ version = "0.0.0+rev=a1c4812";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-yaml";
- rev = "4463985dfccc640f3d6991e3396a2047610cf5f8";
- hash = "sha256-nCyGepZg6n2a/Clc0NFxTSt3Pm1z4OHIzJSjrjGudmw=";
+ rev = "a1c4812a73ec5e089de8e441fdea3a921e8d5079";
+ hash = "sha256-I4jI68HNDyV6cqa6S9cLqoKwnw/E2pFHbOimhHJISMY=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-yaml";
};
@@ -3666,17 +3606,6 @@
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-yuck";
};
- zathurarc = buildGrammar {
- language = "zathurarc";
- version = "0.0.0+rev=0554b4a";
- src = fetchFromGitHub {
- owner = "Freed-Wu";
- repo = "tree-sitter-zathurarc";
- rev = "0554b4a5d313244b7fc000cbb41c04afae4f4e31";
- hash = "sha256-edwLcz1WlcRJOoV2Unpho8wmi7TmcpwysBOAdRKprNw=";
- };
- meta.homepage = "https://github.com/Freed-Wu/tree-sitter-zathurarc";
- };
zig = buildGrammar {
language = "zig";
version = "0.0.0+rev=6479aa1";
@@ -3714,12 +3643,12 @@
};
zsh = buildGrammar {
language = "zsh";
- version = "0.0.0+rev=bd344c2";
+ version = "0.0.0+rev=7a59340";
src = fetchFromGitHub {
owner = "georgeharker";
repo = "tree-sitter-zsh";
- rev = "bd344c23a7683e293d077c6648e88f209782fedb";
- hash = "sha256-91peFWN4vPRRZ4yZCl3Wtp0SzFKT7pBGihDgWX9IeZk=";
+ rev = "7a593401efb5418ffdedbe3c0e4c61c6d240166d";
+ hash = "sha256-KCvuyVWR09jlTk+za0FA/z89O5deToxvJ9zNQoBq/+E=";
};
meta.homepage = "https://github.com/georgeharker/tree-sitter-zsh";
};
@@ -4109,9 +4038,6 @@
"cpp"
];
};
- hlsplaylist = buildQueries {
- language = "hlsplaylist";
- };
hocon = buildQueries {
language = "hocon";
};
@@ -4302,9 +4228,6 @@
mlir = buildQueries {
language = "mlir";
};
- muttrc = buildQueries {
- language = "muttrc";
- };
nasm = buildQueries {
language = "nasm";
};
@@ -4410,15 +4333,6 @@
prisma = buildQueries {
language = "prisma";
};
- problog = buildQueries {
- language = "problog";
- requires = [
- "prolog"
- ];
- };
- prolog = buildQueries {
- language = "prolog";
- };
promql = buildQueries {
language = "promql";
};
@@ -4677,9 +4591,6 @@
tlaplus = buildQueries {
language = "tlaplus";
};
- tmux = buildQueries {
- language = "tmux";
- };
todotxt = buildQueries {
language = "todotxt";
};
@@ -4799,9 +4710,6 @@
yuck = buildQueries {
language = "yuck";
};
- zathurarc = buildQueries {
- language = "zathurarc";
- };
zig = buildQueries {
language = "zig";
};
diff --git a/pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix b/pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix
index 84051feecadc..9eb050654f91 100644
--- a/pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix
+++ b/pkgs/applications/editors/vim/plugins/nvim-treesitter/overrides.nix
@@ -4,6 +4,7 @@
symlinkJoin,
vimUtils,
tree-sitter,
+ tree-sitter-grammars,
neovim,
neovimUtils,
runCommand,
@@ -127,7 +128,7 @@ let
withPlugins =
f:
let
- selectedGrammars = f (tree-sitter.builtGrammars // builtGrammars);
+ selectedGrammars = f (tree-sitter-grammars.derivations // builtGrammars);
grammarPlugins = map grammarToPlugin selectedGrammars;
diff --git a/pkgs/applications/editors/vim/plugins/overrides.nix b/pkgs/applications/editors/vim/plugins/overrides.nix
index d94ebe53b78b..aee1f1aa5955 100644
--- a/pkgs/applications/editors/vim/plugins/overrides.nix
+++ b/pkgs/applications/editors/vim/plugins/overrides.nix
@@ -935,6 +935,7 @@ assertNoAdditions {
nvimSkipModules = [
"repro_blink"
"repro_cmp"
+ "repro_native_completion"
];
};
@@ -1551,6 +1552,18 @@ assertNoAdditions {
];
};
+ fyler-nvim = super.fyler-nvim.overrideAttrs {
+ nvimSkipModules = [
+ # Requires setup
+ "fyler.extensions.trash"
+ "fyler.finder"
+ "fyler.integrations.icon"
+ "fyler.integrations.window_picker"
+ "fyler.schemes.file"
+ "fyler.state"
+ ];
+ };
+
fzf-checkout-vim = super.fzf-checkout-vim.overrideAttrs {
# The plugin has a makefile which tries to run tests in a docker container.
# This prevents it.
@@ -1656,7 +1669,8 @@ assertNoAdditions {
];
checkInputs = with self; [
luasnip
- null-ls-nvim
+ none-ls-nvim
+ plenary-nvim
];
nvimSkipModules = [
"init"
@@ -2012,18 +2026,13 @@ assertNoAdditions {
let
kulala-http-grammar = neovimUtils.grammarToPlugin (
tree-sitter.buildGrammar {
- inherit (old) version src meta;
language = "kulala_http";
- location = "lua/tree-sitter";
+ inherit (luaPackages.tree-sitter-kulala_http) version src meta;
generate = false;
}
);
in
{
- patches = (old.patches or [ ]) ++ [
- ./patches/kulala-nvim/use-packaged-tree-sitter-parser.patch
- ];
-
dependencies = [ kulala-http-grammar ];
postPatch = ''
@@ -2036,6 +2045,7 @@ assertNoAdditions {
"cli.kulala_cli"
# Upstream test harnesses are not require-safe modules
"minit"
+ "minit-userscript"
"minitest"
"test"
# Legacy parser module; active parsing is handled by kulala-core
@@ -2481,7 +2491,8 @@ assertNoAdditions {
mason-null-ls-nvim = super.mason-null-ls-nvim.overrideAttrs {
dependencies = with self; [
mason-nvim
- null-ls-nvim
+ none-ls-nvim
+ plenary-nvim
];
};
@@ -3014,12 +3025,25 @@ assertNoAdditions {
];
};
+ neovim-project = super.neovim-project.overrideAttrs {
+ dependencies = with self; [
+ plenary-nvim
+ neovim-session-manager
+ ];
+ };
+
neovim-sensible = super.neovim-sensible.overrideAttrs (old: {
meta = old.meta // {
license = lib.licenses.mit;
};
});
+ neovim-session-manager = super.neovim-session-manager.overrideAttrs {
+ dependencies = with self; [
+ plenary-nvim
+ ];
+ };
+
neovim-tips = super.neovim-tips.overrideAttrs {
dependencies = [
self.nui-nvim
@@ -3074,6 +3098,10 @@ assertNoAdditions {
dependencies = [ self.nui-nvim ];
};
+ none-ls-extras-nvim = super.none-ls-extras-nvim.overrideAttrs {
+ dependencies = [ self.none-ls-nvim ];
+ };
+
none-ls-nvim = super.none-ls-nvim.overrideAttrs {
dependencies = [ self.plenary-nvim ];
};
@@ -3094,13 +3122,6 @@ assertNoAdditions {
dependencies = [ self.aniseed ];
};
- null-ls-nvim = super.null-ls-nvim.overrideAttrs (old: {
- dependencies = [ self.plenary-nvim ];
- meta = old.meta // {
- license = lib.licenses.unlicense;
- };
- });
-
nvchad = super.nvchad.overrideAttrs {
# You've signed up for a distro, providing dependencies.
dependencies = with self; [
@@ -3299,6 +3320,7 @@ assertNoAdditions {
};
nvim-jdtls = super.nvim-jdtls.overrideAttrs (old: {
+ runtimeDeps = [ python3 ];
meta = old.meta // {
license = lib.licenses.gpl3Only;
};
@@ -3443,7 +3465,7 @@ assertNoAdditions {
# Optional toggleterm integration
checkInputs = [ self.toggleterm-nvim ];
dependencies = with self; [
- nvim-treesitter-legacy
+ nvim-treesitter
nvim-treesitter-parsers.c_sharp
nvim-treesitter-parsers.go
nvim-treesitter-parsers.haskell
@@ -3580,7 +3602,6 @@ assertNoAdditions {
snacks-nvim
telescope-nvim
];
- dependencies = [ self.plenary-nvim ];
nvimSkipModules = [
# Issue reproduction file
"minimal"
@@ -3737,6 +3758,10 @@ assertNoAdditions {
dependencies = [ self.nui-nvim ];
};
+ pantran-nvim = super.pantran-nvim.overrideAttrs {
+ runtimeDeps = [ curl ];
+ };
+
parpar-nvim = super.parpar-nvim.overrideAttrs {
dependencies = with self; [
nvim-parinfer
@@ -4089,6 +4114,20 @@ assertNoAdditions {
};
});
+ slimline-nvim = super.slimline-nvim.overrideAttrs {
+ nvimSkipModules = [
+ # Component modules read the user-supplied slimline.config at require time.
+ "slimline.components.diagnostics"
+ "slimline.components.filetype_lsp"
+ "slimline.components.mode"
+ "slimline.components.path"
+ "slimline.components.progress"
+ "slimline.components.recording"
+ "slimline.components.searchcount"
+ "slimline.components.selectioncount"
+ ];
+ };
+
smart-open-nvim = super.smart-open-nvim.overrideAttrs {
dependencies = with self; [
plenary-nvim
@@ -4628,17 +4667,6 @@ assertNoAdditions {
runtimeDeps = [ television ];
};
- typescript-nvim = super.typescript-nvim.overrideAttrs {
- checkInputs = [
- # Optional null-ls integration
- self.none-ls-nvim
- ];
- dependencies = with self; [
- nvim-lspconfig
- plenary-nvim
- ];
- };
-
typescript-tools-nvim = super.typescript-tools-nvim.overrideAttrs {
dependencies = with self; [
nvim-lspconfig
@@ -5796,22 +5824,6 @@ assertNoAdditions {
};
});
- vimacs = super.vimacs.overrideAttrs (old: {
- buildPhase = ''
- substituteInPlace bin/vim \
- --replace-fail '/usr/bin/vim' 'vim' \
- --replace-fail '/usr/bin/gvim' 'gvim'
- # remove unnecessary duplicated bin wrapper script
- rm -r plugin/vimacs
- '';
- meta = old.meta // {
- description = "Vim-Improved eMACS: Emacs emulation plugin for Vim";
- homepage = "http://algorithm.com.au/code/vimacs";
- license = lib.licenses.gpl2Plus;
- maintainers = with lib.maintainers; [ millerjason ];
- };
- });
-
vimade = super.vimade.overrideAttrs {
checkInputs = with self; [
# Optional providers
diff --git a/pkgs/applications/editors/vim/plugins/patches/kulala-nvim/do-not-install-grammar.patch b/pkgs/applications/editors/vim/plugins/patches/kulala-nvim/do-not-install-grammar.patch
deleted file mode 100644
index 00a76f9c0492..000000000000
--- a/pkgs/applications/editors/vim/plugins/patches/kulala-nvim/do-not-install-grammar.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/lua/kulala/config/init.lua b/lua/kulala/config/init.lua
-index 7298f95..d781a12 100644
---- a/lua/kulala/config/init.lua
-+++ b/lua/kulala/config/init.lua
-@@ -122,6 +122,10 @@ local function setup_treesitter_master()
- end
-
- local function set_kulala_parser()
-+ assert(vim.treesitter.language.add("kulala_http"))
-+ vim.treesitter.language.register("kulala_http", { "http", "rest" })
-+ do return end
-+
- local parsers = vim.F.npcall(require, "nvim-treesitter.parsers")
-
- if not parsers then
diff --git a/pkgs/applications/editors/vim/plugins/patches/kulala-nvim/use-packaged-tree-sitter-parser.patch b/pkgs/applications/editors/vim/plugins/patches/kulala-nvim/use-packaged-tree-sitter-parser.patch
deleted file mode 100644
index 2398bd254e22..000000000000
--- a/pkgs/applications/editors/vim/plugins/patches/kulala-nvim/use-packaged-tree-sitter-parser.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-diff --git a/lua/kulala/config/parser.lua b/lua/kulala/config/parser.lua
-index 5f37046..c60c474 100644
---- a/lua/kulala/config/parser.lua
-+++ b/lua/kulala/config/parser.lua
-@@ -37,7 +37,6 @@ local function sync_queries()
- end
-
- local function load_parser()
-- if not Fs.file_exists(parser_target_path) then return false end
- return vim.treesitter.language.add(parser_name) == true
- end
-
-@@ -48,7 +47,6 @@ M.register_parser = function()
- -- queries/kulala_http/*.scm live under lua/tree-sitter/queries/
- vim.opt.rtp:prepend(parser_source_path)
- ensure_site_rtp()
-- sync_queries()
- vim.treesitter.language.register(parser_name, filetypes)
- vim.treesitter.language.register("markdown", "kulala_ui")
- local backend = require("kulala.backend")
-@@ -94,7 +92,7 @@ local function has_kulala_parser()
- end
-
- M.is_up_to_date = function()
-- return has_kulala_parser() and is_parser_ver_current()
-+ return load_parser()
- end
-
- M.setup = function()
diff --git a/pkgs/applications/editors/vim/plugins/vim-plugin-names b/pkgs/applications/editors/vim/plugins/vim-plugin-names
index d813e9230d58..593397bf9dca 100644
--- a/pkgs/applications/editors/vim/plugins/vim-plugin-names
+++ b/pkgs/applications/editors/vim/plugins/vim-plugin-names
@@ -146,6 +146,7 @@ https://github.com/MahanRahmati/blink-nerdfont.nvim/,,
https://github.com/mikavilpas/blink-ripgrep.nvim/,,
https://github.com/Saghen/blink.compat/,,
https://github.com/Saghen/blink.indent/,,
+https://github.com/saghen/blink.lib/,,
https://github.com/dundalek/bloat.nvim/,,
https://github.com/HampusHauffman/block.nvim/,,
https://github.com/uloco/bluloco.nvim/,,
@@ -259,6 +260,7 @@ https://github.com/mrjones2014/codesettings.nvim/,,
https://github.com/gorbit99/codewindow.nvim/,,
https://github.com/johnseth97/codex.nvim/,,
https://github.com/metakirby5/codi.vim/,,
+https://github.com/thekylehuang/cole.nvim/,,
https://github.com/archseer/colibri.vim/,,
https://github.com/tjdevries/colorbuddy.nvim/,,
https://github.com/xzbdmw/colorful-menu.nvim/,,
@@ -450,7 +452,7 @@ https://github.com/shumphrey/fugitive-gitlab.vim/,,
https://github.com/BeneCollyridam/futhark-vim/,,
https://github.com/tzachar/fuzzy.nvim/,,
https://github.com/rktjmp/fwatch.nvim/,,
-https://github.com/A7Lavinraj/fyler.nvim/,stable,
+https://github.com/FylerOrg/fyler.nvim/,stable,
https://github.com/stsewd/fzf-checkout.vim/,,
https://github.com/monkoose/fzf-hoogle.vim/,,
https://github.com/gfanto/fzf-lsp.nvim/,,
@@ -478,7 +480,7 @@ https://github.com/vim-scripts/gitignore.vim/,,
https://gitlab.com/gitlab-org/editor-extensions/gitlab.vim,,
https://github.com/LionyxML/gitlineage.nvim/,,
https://github.com/ruifm/gitlinker.nvim/,,
-https://github.com/trevorhauter/gitportal.nvim/,,
+https://codeberg.org/trevorhauter/gitportal.nvim/,,
https://github.com/gregsexton/gitv/,,
https://github.com/DNLHC/glance.nvim/,,
https://github.com/ellisonleao/glow.nvim/,,
@@ -602,7 +604,6 @@ https://github.com/frabjous/knap/,,
https://github.com/oskarnurm/koda.nvim/,,
https://github.com/b3nj5m1n/kommentary/,,
https://github.com/udalov/kotlin-vim/,,
-https://github.com/mistweaverco/kulala.nvim/,,
https://github.com/slugbyte/lackluster.nvim/,,
https://github.com/qnighy/lalrpop.vim/,,
https://github.com/Wansmer/langmapper.nvim/,,
@@ -761,6 +762,7 @@ https://github.com/leafo/moonscript-vim/,,
https://github.com/yegappan/mru/,,
https://github.com/jake-stewart/multicursor.nvim/,,
https://github.com/smoka7/multicursors.nvim/,,
+https://github.com/brenton-leighton/multiple-cursors.nvim/,main,
https://github.com/AckslD/muren.nvim/,,
https://github.com/jbyuki/nabla.nvim/,,
https://github.com/ncm2/ncm2/,,
@@ -835,7 +837,9 @@ https://github.com/marilari88/neotest-vitest/,,
https://github.com/lawrence-laz/neotest-zig/,,
https://github.com/Shatur/neovim-ayu/,,
https://github.com/cloudhead/neovim-fuzzy/,,
+https://github.com/coffebar/neovim-project/,,
https://github.com/jeffkreeftmeijer/neovim-sensible/,,
+https://github.com/shatur/neovim-session-manager/,,
https://github.com/saxon1964/neovim-tips/,,
https://github.com/trunk-io/neovim-trunk/,,
https://github.com/Shougo/neoyank.vim/,,
@@ -862,13 +866,13 @@ https://github.com/aktersnurra/no-clown-fiesta.nvim/,,
https://github.com/shortcuts/no-neck-pain.nvim/,,
https://github.com/kartikp10/noctis.nvim/,,
https://github.com/folke/noice.nvim/,,
+https://github.com/nvimtools/none-ls-extras.nvim/,,
https://github.com/nvimtools/none-ls.nvim/,,
https://github.com/nordtheme/vim/,,nord-vim
https://github.com/shaunsingh/nord.nvim/,,
https://github.com/alexvzyl/nordic.nvim/,,
https://github.com/vigoux/notifier.nvim/,,
https://github.com/jlesquembre/nterm.nvim/,,
-https://github.com/jose-elias-alvarez/null-ls.nvim/,,
https://github.com/nacro90/numb.nvim/,,
https://github.com/nvchad/nvchad/,,
https://github.com/nvchad/ui/,,nvchad-ui
@@ -935,7 +939,6 @@ https://github.com/martineausimon/nvim-lilypond-suite/,,
https://codeberg.org/mfussenegger/nvim-lint/,,
https://github.com/antosha417/nvim-lsp-file-operations/,,
https://github.com/mrded/nvim-lsp-notify/,,
-https://github.com/jose-elias-alvarez/nvim-lsp-ts-utils/,,
https://github.com/neovim/nvim-lspconfig/,,
https://github.com/RishabhRD/nvim-lsputils/,,
https://github.com/sam4llis/nvim-lua-gf/,,
@@ -1044,6 +1047,7 @@ https://github.com/wbthomason/packer.nvim/,,
https://github.com/drewtempelmeyer/palenight.vim/,,
https://github.com/JoosepAlviste/palenightfall.nvim/,,
https://github.com/roobert/palette.nvim/,,
+https://github.com/potamides/pantran.nvim/,,
https://github.com/NLKNguyen/papercolor-theme/,,
https://github.com/pappasam/papercolor-theme-slim/,,
https://github.com/dundalek/parpar.nvim/,,
@@ -1072,6 +1076,7 @@ https://github.com/RishabhRD/popfix/,,
https://github.com/nvim-lua/popup.nvim/,,
https://github.com/tris203/precognition.nvim/,,
https://github.com/andweeb/presence.nvim/,,
+https://github.com/Chaitanyabsprip/present.nvim/,,
https://github.com/sotte/presenting.vim/,,
https://github.com/ewilazarus/preto/,,
https://github.com/anuvyklack/pretty-fold.nvim/,,
@@ -1152,6 +1157,7 @@ https://github.com/folke/sidekick.nvim/,,
https://github.com/AndrewRadev/sideways.vim/,,
https://github.com/skim-rs/skim.vim/,,
https://github.com/mopp/sky-color-clock.vim/,,
+https://github.com/sschleemilch/slimline.nvim/,,
https://github.com/kovisoft/slimv/,,
https://github.com/danielfalk/smart-open.nvim/,,
https://github.com/mrjones2014/smart-splits.nvim/,,
@@ -1315,7 +1321,6 @@ https://github.com/alexpasmantier/tv.nvim/,,
https://github.com/folke/twilight.nvim/,,
https://github.com/pmizio/typescript-tools.nvim/,,
https://github.com/leafgarland/typescript-vim/,,
-https://github.com/jose-elias-alvarez/typescript.nvim/,,
https://github.com/MrPicklePinosaur/typst-conceal.vim/,,
https://github.com/chomosuke/typst-preview.nvim/,,
https://github.com/kaarmu/typst.vim/,,
@@ -1788,7 +1793,6 @@ https://github.com/marrub--/vim-zscript/,,
https://github.com/dag/vim2hs/,,
https://github.com/monkoose/vim9-stargate/,,
https://github.com/dominikduda/vim_current_word/,,
-https://github.com/andrep/vimacs/,,
https://github.com/TaDaa/vimade/,,
https://github.com/jreybert/vimagit/,,
https://github.com/gotcha/vimelette/,,
@@ -1835,7 +1839,7 @@ https://github.com/natecraddock/workspaces.nvim/,,
https://github.com/andrewferrier/wrapping.nvim/,,
https://github.com/tweekmonster/wstrip.vim/,,
https://github.com/piersolenski/wtf.nvim/,,
-https://github.com/kyzadev/xeno.nvim/,,
+https://github.com/kyzabuilds/xeno.nvim/,,
https://github.com/Mythos-404/xmake.nvim/,,
https://github.com/drmingdrmer/xptemplate/,,
https://github.com/guns/xterm-color-table.vim/,,
diff --git a/pkgs/applications/editors/vim/vimacs.nix b/pkgs/applications/editors/vim/vimacs.nix
deleted file mode 100644
index 050f803fa0dd..000000000000
--- a/pkgs/applications/editors/vim/vimacs.nix
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- lib,
- stdenv,
- config,
- vim-full,
- macvim,
- vimPlugins,
- useMacvim ? stdenv.hostPlatform.isDarwin && (config.vimacs.macvim or true),
- vimacsExtraArgs ? "",
-}:
-
-stdenv.mkDerivation (finalAttrs: {
- pname = "vimacs";
- version = lib.getVersion finalAttrs.vimPackage;
- vimPackage = if useMacvim then macvim else vim-full;
-
- buildInputs = [
- finalAttrs.vimPackage
- vimPlugins.vimacs
- ];
-
- buildCommand = ''
- mkdir -p "$out"/bin
- cp "${vimPlugins.vimacs}"/bin/vim $out/bin/vimacs
- substituteInPlace "$out"/bin/vimacs \
- --replace '-vim}' '-@bin@/bin/vim}' \
- --replace '-gvim}' '-@bin@/bin/vim -g}' \
- --replace '--cmd "let g:VM_Enabled = 1"' \
- '--cmd "let g:VM_Enabled = 1" --cmd "set rtp^=@rtp@" ${vimacsExtraArgs}' \
- --replace @rtp@ ${vimPlugins.vimacs} \
- --replace @bin@ ${finalAttrs.vimPackage}
- for prog in vm gvm gvimacs vmdiff vimacsdiff
- do
- ln -s "$out"/bin/vimacs $out/bin/$prog
- done
- '';
-
- meta = {
- description = "Vim-Improved eMACS: Emacs emulation for Vim";
- homepage = "http://algorithm.com.au/code/vimacs";
- license = lib.licenses.gpl2Plus;
- maintainers = with lib.maintainers; [ millerjason ];
- };
-})
diff --git a/pkgs/applications/editors/vscode/extensions/WakaTime.vscode-wakatime/default.nix b/pkgs/applications/editors/vscode/extensions/WakaTime.vscode-wakatime/default.nix
index 159d7df1b9d2..49e9e8b2b4a5 100644
--- a/pkgs/applications/editors/vscode/extensions/WakaTime.vscode-wakatime/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/WakaTime.vscode-wakatime/default.nix
@@ -6,8 +6,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "vscode-wakatime";
publisher = "WakaTime";
- version = "30.0.8";
- hash = "sha256-IRpjwlLzof2Ll2s/k9K6LPFYp4NTvpfZWfMbMMk+rbY=";
+ version = "30.2.1";
+ hash = "sha256-FlH8uobKgUAAOr+6TCG9xYPiNN3FhlFp18dWKX8pFtE=";
};
meta = {
diff --git a/pkgs/applications/editors/vscode/extensions/amazonwebservices.amazon-q-vscode/default.nix b/pkgs/applications/editors/vscode/extensions/amazonwebservices.amazon-q-vscode/default.nix
index 47157bcb6e27..d1d931df338f 100644
--- a/pkgs/applications/editors/vscode/extensions/amazonwebservices.amazon-q-vscode/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/amazonwebservices.amazon-q-vscode/default.nix
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
mktplcRef = {
name = "amazon-q-vscode";
publisher = "AmazonWebServices";
- version = "2.2.0";
- hash = "sha256-HwgInQOaSKHSs8CU+Ng4jYA6aaP/g3l4CSb/0ewkmc4=";
+ version = "2.3.0";
+ hash = "sha256-2EEhGU+I61yiVvPEIJlQUgTej9Oi7jW3n5znN2Y2vP4=";
};
meta = {
diff --git a/pkgs/applications/editors/vscode/extensions/anthropic.claude-code/default.nix b/pkgs/applications/editors/vscode/extensions/anthropic.claude-code/default.nix
index 3acd29d4b269..7d9174b46e19 100644
--- a/pkgs/applications/editors/vscode/extensions/anthropic.claude-code/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/anthropic.claude-code/default.nix
@@ -21,26 +21,22 @@ vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
sources = {
"x86_64-linux" = {
arch = "linux-x64";
- hash = "sha256-XA4xSd/sg9vhOGqcCNliHzloBxPZsgXW/dSkKp/RzM0=";
+ hash = "sha256-Y6MXjJBmhMzuQMwhkPLHK/vtciTdjsGvkEblH3ofju0=";
};
"aarch64-linux" = {
arch = "linux-arm64";
- hash = "sha256-l2NjDHBOMBzJT9Pis7sqSuFuG07eZPALximND+hVqDU=";
- };
- "x86_64-darwin" = {
- arch = "darwin-x64";
- hash = "sha256-hE/1N28f9uAzg2fG3Hrc4z1kW21rdhtCRmF9SphqiFc=";
+ hash = "sha256-8VvDtb+8SoLTRC7pXwH40amRurxTQgCmhdi0u7e5AfU=";
};
"aarch64-darwin" = {
arch = "darwin-arm64";
- hash = "sha256-68CmDax385o0juoQWNX/NLx+tjIt9YytTHjRZkqAR98=";
+ hash = "sha256-bqjEgsjY+zyG1g/KtkRNxAlazIpc+HwGWvsMQNnPI2M=";
};
};
in
{
name = "claude-code";
publisher = "anthropic";
- version = "2.1.175";
+ version = "2.1.218";
}
// sources.${stdenvNoCC.hostPlatform.system}
or (throw "Unsupported system ${stdenvNoCC.hostPlatform.system}");
@@ -60,7 +56,6 @@ vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
platforms = [
"x86_64-linux"
"aarch64-linux"
- "x86_64-darwin"
"aarch64-darwin"
];
};
diff --git a/pkgs/applications/editors/vscode/extensions/asciidoctor.asciidoctor-vscode/commands-abspath.patch b/pkgs/applications/editors/vscode/extensions/asciidoctor.asciidoctor-vscode/commands-abspath.patch
index fc3b7fd177eb..f8e24a309940 100644
--- a/pkgs/applications/editors/vscode/extensions/asciidoctor.asciidoctor-vscode/commands-abspath.patch
+++ b/pkgs/applications/editors/vscode/extensions/asciidoctor.asciidoctor-vscode/commands-abspath.patch
@@ -1,13 +1,11 @@
-diff --git a/package.json b/package.json
-index 7ab70e8..2ebe541 100644
--- a/package.json
+++ b/package.json
@@ -437,7 +437,7 @@
- },
- "asciidoc.asciidoctorpdf_command": {
- "type": "string",
-- "default": "asciidoctor-pdf",
-+ "default": "@ASCIIDOCTOR_PDF_BIN@",
- "markdownDescription": "%asciidoc.asciidoctorpdf_command.desc%",
- "markdownDeprecationMessage": "%asciidoc.asciidoctorpdf_command.deprecationMessage%",
- "scope": "resource"
+ },
+ "asciidoc.asciidoctorpdf_command": {
+ "type": "string",
+- "default": "asciidoctor-pdf",
++ "default": "@ASCIIDOCTOR_PDF_BIN@",
+ "markdownDescription": "%asciidoc.asciidoctorpdf_command.desc%",
+ "markdownDeprecationMessage": "%asciidoc.asciidoctorpdf_command.deprecationMessage%",
+ "scope": "resource"
diff --git a/pkgs/applications/editors/vscode/extensions/asciidoctor.asciidoctor-vscode/default.nix b/pkgs/applications/editors/vscode/extensions/asciidoctor.asciidoctor-vscode/default.nix
index 3f7dabf2e256..19205609d398 100644
--- a/pkgs/applications/editors/vscode/extensions/asciidoctor.asciidoctor-vscode/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/asciidoctor.asciidoctor-vscode/default.nix
@@ -8,8 +8,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "asciidoctor-vscode";
publisher = "asciidoctor";
- version = "3.4.2";
- hash = "sha256-HG3y7999xeE1erQZCnBgUPj/aC0Kwyn20PEZR9gKrxY=";
+ version = "3.4.5";
+ hash = "sha256-X7njFSqfb45l6ZTr7GDS3At6DMHyvBT41JoghOeVjwI=";
};
patches = [
diff --git a/pkgs/applications/editors/vscode/extensions/azdavis.millet/default.nix b/pkgs/applications/editors/vscode/extensions/azdavis.millet/default.nix
index 563253536441..370cd2ee9ec1 100644
--- a/pkgs/applications/editors/vscode/extensions/azdavis.millet/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/azdavis.millet/default.nix
@@ -10,8 +10,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "Millet";
publisher = "azdavis";
- version = "0.15.1";
- hash = "sha256-5V5GG7M52ohpS9Zg2TTamEjbWyXH9kllZyy7Oezy4Iw=";
+ version = "0.15.2";
+ hash = "sha256-mtI4IW+xBIuo11ctTIv5/6LOXVStD3YqSYkIQYJWqmo=";
};
nativeBuildInputs = [
jq
diff --git a/pkgs/applications/editors/vscode/extensions/betterthantomorrow.calva/default.nix b/pkgs/applications/editors/vscode/extensions/betterthantomorrow.calva/default.nix
index 54593282150a..d2b8e6dab445 100644
--- a/pkgs/applications/editors/vscode/extensions/betterthantomorrow.calva/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/betterthantomorrow.calva/default.nix
@@ -11,8 +11,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "calva";
publisher = "betterthantomorrow";
- version = "2.0.572";
- hash = "sha256-Tv4bZdfROJbnhgJ65lP+F4f2xkICr4X+P08P66Kuu7A=";
+ version = "2.0.593";
+ hash = "sha256-/pPDghizzU/EulLyeFzmsufEwegR4ngo0rxW1Qnjock=";
};
nativeBuildInputs = [
diff --git a/pkgs/applications/editors/vscode/extensions/biomejs.biome/default.nix b/pkgs/applications/editors/vscode/extensions/biomejs.biome/default.nix
index 669c066b81d4..0d9d9b62839a 100644
--- a/pkgs/applications/editors/vscode/extensions/biomejs.biome/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/biomejs.biome/default.nix
@@ -11,8 +11,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "biome";
publisher = "biomejs";
- version = "2026.3.311859";
- hash = "sha256-HH+KJYY4J6nuHwQ/+DhEFsJ7P5S97UsNuoc+y7GnE00=";
+ version = "2026.6.181955";
+ hash = "sha256-6FRrVKDY+E9wuqgeNKArgGn4PDp5ViJsdCPjjwBGbGI=";
};
postInstall = ''
diff --git a/pkgs/applications/editors/vscode/extensions/charliermarsh.ruff/default.nix b/pkgs/applications/editors/vscode/extensions/charliermarsh.ruff/default.nix
index d3f08bc5df9a..2128bad3a243 100644
--- a/pkgs/applications/editors/vscode/extensions/charliermarsh.ruff/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/charliermarsh.ruff/default.nix
@@ -12,26 +12,22 @@ vscode-utils.buildVscodeMarketplaceExtension {
sources = {
"x86_64-linux" = {
arch = "linux-x64";
- hash = "sha256-qXGdFXx8Vr9oVStBjaeWEsQjhQUbp9MnLUfJtyhgwkA=";
- };
- "x86_64-darwin" = {
- arch = "darwin-x64";
- hash = "sha256-Bd3ool5Ep8I5iiTMUHF48r/sf3F1dROx6Umns0pDGzE=";
+ hash = "sha256-lhDt8XEF90y4pj8RLUZgfZNmHkV1XlmHsYuT6sGJMRc=";
};
"aarch64-linux" = {
arch = "linux-arm64";
- hash = "sha256-Jv2lrdvY0tthJM2fifUlCW/QBzEZAa8QDHj4o+a4KxY=";
+ hash = "sha256-iuYVCG4YWPFI8o4GmuNjkbXvzJsAre0gSSEWq6CUk2E=";
};
"aarch64-darwin" = {
arch = "darwin-arm64";
- hash = "sha256-VooAoTyysIFH1AaidcoRs7fJpID0LbmWnLdivGZfdrM=";
+ hash = "sha256-wEp7kaEnkdBl44WjKuDBjR5SEjYNdgIX7DdJWKvv6I4=";
};
};
in
{
name = "ruff";
publisher = "charliermarsh";
- version = "2026.48.0";
+ version = "2026.54.0";
}
// sources.${stdenvNoCC.hostPlatform.system}
or (throw "Unsupported system ${stdenvNoCC.hostPlatform.system}");
@@ -57,7 +53,6 @@ vscode-utils.buildVscodeMarketplaceExtension {
"aarch64-linux"
"aarch64-darwin"
"x86_64-linux"
- "x86_64-darwin"
];
maintainers = [ lib.maintainers.azd325 ];
};
diff --git a/pkgs/applications/editors/vscode/extensions/continue.continue/default.nix b/pkgs/applications/editors/vscode/extensions/continue.continue/default.nix
index 7b6bb870f2a9..330c30ad87dd 100644
--- a/pkgs/applications/editors/vscode/extensions/continue.continue/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/continue.continue/default.nix
@@ -11,26 +11,22 @@ vscode-utils.buildVscodeMarketplaceExtension {
sources = {
"x86_64-linux" = {
arch = "linux-x64";
- hash = "sha256-/D6d0qfgl8+cTEQ5ZeMjGgo1/Uzw5BxwBdM2m0fBjNU=";
- };
- "x86_64-darwin" = {
- arch = "darwin-x64";
- hash = "sha256-jIyFt1ZLNPS4DbQLnZJ3p30AnPJz3qNFDj/rL6EdnKw=";
+ hash = "sha256-4GiTNT+UPdTth9VDhHTXfqhQ5gM6vfLAaU5Cy3VMTCI=";
};
"aarch64-linux" = {
arch = "linux-arm64";
- hash = "sha256-6At96R7jSDAjvC7Bugpg4L/aHgHFQmBOdKcOTa3Y940=";
+ hash = "sha256-QngCharrjiDKrY7RgWtKzIJxjXazuRvpuHVUAxknWfA=";
};
"aarch64-darwin" = {
arch = "darwin-arm64";
- hash = "sha256-GB/QLRmtY/cVs4lrU8OFnWgztJSF8e07VADIra/et2s=";
+ hash = "sha256-QPRZG7/Pjo9uboJl/RH0cdNf+zGM+ZRxdaMULxl34Jk=";
};
};
in
{
name = "continue";
publisher = "Continue";
- version = "1.2.22";
+ version = "2.0.0";
}
// sources.${stdenv.system} or (throw "Unsupported system: ${stdenv.system}");
nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];
@@ -44,7 +40,6 @@ vscode-utils.buildVscodeMarketplaceExtension {
maintainers = with lib.maintainers; [ flacks ];
platforms = [
"x86_64-linux"
- "x86_64-darwin"
"aarch64-darwin"
"aarch64-linux"
];
diff --git a/pkgs/applications/editors/vscode/extensions/dbaeumer.vscode-eslint/default.nix b/pkgs/applications/editors/vscode/extensions/dbaeumer.vscode-eslint/default.nix
index 1198737e3486..fb92fbcdbb38 100644
--- a/pkgs/applications/editors/vscode/extensions/dbaeumer.vscode-eslint/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/dbaeumer.vscode-eslint/default.nix
@@ -17,6 +17,5 @@ vscode-utils.buildVscodeMarketplaceExtension {
downloadPage = "https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint";
homepage = "https://github.com/Microsoft/vscode-eslint";
license = lib.licenses.mit;
- maintainers = [ lib.maintainers.datafoo ];
};
}
diff --git a/pkgs/applications/editors/vscode/extensions/default.nix b/pkgs/applications/editors/vscode/extensions/default.nix
index 06b34fcebfa9..f7e51d43f96e 100644
--- a/pkgs/applications/editors/vscode/extensions/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/default.nix
@@ -396,8 +396,8 @@ let
mktplcRef = {
name = "astro-vscode";
publisher = "astro-build";
- version = "2.16.14";
- hash = "sha256-WuDsYSQ5B2xA3LnU1fiXBx8yqOplGstZO0qYaLtPF0A=";
+ version = "2.16.17";
+ hash = "sha256-k54hpRlzjtNWv0mIUBKFxJYc5T2jpWxB9U8nuXXmjJ0=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/astro-build.astro-vscode/changelog";
@@ -481,8 +481,8 @@ let
mktplcRef = {
publisher = "ban";
name = "spellright";
- version = "3.0.148";
- hash = "sha256-h1xKEpKg4j7mGw3EQQDPZBDBDY/xjk2lsGk0ktd2ems=";
+ version = "3.0.154";
+ hash = "sha256-vGzmzY78FOS8ZsrT1YpTNOUJprW4rZHVuM83cZz6V+Q=";
};
meta = {
description = "Visual Studio Code extension for Spellchecker";
@@ -497,8 +497,8 @@ let
mktplcRef = {
publisher = "banacorn";
name = "agda-mode";
- version = "0.8.0";
- hash = "sha256-2xYC+tStBXTL4koqUOcyxQUTDTipeUMTFLbrwqA6p7Q=";
+ version = "0.10.0";
+ hash = "sha256-rz3Ehq/2AewE5ADYHVk8pHICSWO58i8v+nBwzkFkGCY=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/banacorn.agda-mode/changelog";
@@ -727,8 +727,8 @@ let
mktplcRef = {
name = "vscode-intelephense-client";
publisher = "bmewburn";
- version = "1.16.5";
- hash = "sha256-ppWHZFQfC2bje1rNZh8Pu+BKQdAI60kpxRwUg8EfD8M=";
+ version = "1.18.5";
+ hash = "sha256-yLp7lBWjdH+KtBUlkjLWz5OmAvEQWJFIVCVsBt9BTeE=";
};
meta = {
description = "PHP code intelligence for Visual Studio Code";
@@ -1007,8 +1007,8 @@ let
mktplcRef = {
name = "coder-remote";
publisher = "coder";
- version = "1.14.6";
- hash = "sha256-dABM44pSD0srzNl6J+1OsqugWb++soVFmtEIzliByDs=";
+ version = "1.15.2";
+ hash = "sha256-mBACvGUQF3LoaFJ9MIewN9zu4jDTWfUgyd1MQvZQUvk=";
};
meta = {
description = "Extension for Visual Studio Code to open any Coder workspace in VS Code with a single click";
@@ -1096,8 +1096,8 @@ let
mktplcRef = {
name = "csharpier-vscode";
publisher = "csharpier";
- version = "10.0.3";
- hash = "sha256-YTDpBGLbyM6Nq5DlEtqFiSsSRRECLIEqSM4xgIIVWG0=";
+ version = "11.0.0";
+ hash = "sha256-LVGIKCW2z2Y2k0qPmJZZO66W3E9UDBtl5EnycanMPxA=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/csharpier.csharpier-vscode/changelog";
@@ -1145,8 +1145,8 @@ let
mktplcRef = {
name = "vscode-database-client2";
publisher = "cweijan";
- version = "8.5.1";
- hash = "sha256-adpTh4tNlWFdAGultTLZ9SfN9sMOpMaMWq8x6diGzBg=";
+ version = "9.0.2";
+ hash = "sha256-RCjtYpGDEjFkKvTspvgopccNVvMt1imeAGHZYRsle/Q=";
};
meta = {
description = "Database Client For Visual Studio Code";
@@ -1174,8 +1174,8 @@ let
mktplcRef = {
publisher = "DanielSanMedium";
name = "dscodegpt";
- version = "3.22.1";
- hash = "sha256-ln9DcfjW0QO7V6hF+QNqy+V13hbjWwhsisrgZPrk1R4=";
+ version = "3.24.12";
+ hash = "sha256-2vpFCxF65Y/VfyTHDO0wLAe0+m/lc0+iloEI//FdaQg=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/DanielSanMedium.dscodegpt/changelog";
@@ -1204,8 +1204,8 @@ let
mktplcRef = {
name = "dart-code";
publisher = "dart-code";
- version = "3.136.0";
- hash = "sha256-XPajPR0MX6TiUfaCw/+WYyc453cZOMaK1Uen6ND+RKY=";
+ version = "3.136.1";
+ hash = "sha256-z9DPxEtQwjx9xk5ucHKfX2BYRij5UA253oPuHpD0jdU=";
};
meta.license = lib.licenses.mit;
@@ -1215,8 +1215,8 @@ let
mktplcRef = {
name = "flutter";
publisher = "dart-code";
- version = "3.136.0";
- hash = "sha256-RK493qHjEK/k8oy/OIzO3bvNnFo+ZftQhZMIAmBCaJk=";
+ version = "3.138.0";
+ hash = "sha256-FkaUKApoN6e8ET2o/71GVhyNWdZ34t6fqEzlraH7QBc=";
};
meta.license = lib.licenses.mit;
@@ -1226,8 +1226,8 @@ let
mktplcRef = {
name = "databricks";
publisher = "databricks";
- version = "2.11.0";
- hash = "sha256-9izhQvZmfUVeKS0H89XXkN1bNP4+AZyUuetfD0kRJ/c=";
+ version = "2.12.3";
+ hash = "sha256-/hFBw6STQG4zycS44em1DlaQSpKGP4w7YlH+fu/cHlA=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/databricks.databricks/changelog";
@@ -1286,8 +1286,8 @@ let
mktplcRef = {
publisher = "denoland";
name = "vscode-deno";
- version = "3.52.0";
- hash = "sha256-0Qkruo7Eh86JRm58G7XhyceUpCJDmhoYaPjUKJQjFiU=";
+ version = "3.53.0";
+ hash = "sha256-M+wFee1x/cCgGMFrDaV7OtIhEORHkLHf/Z06/VuZZmg=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/denoland.vscode-deno/changelog";
@@ -1346,8 +1346,8 @@ let
mktplcRef = {
publisher = "discloud";
name = "discloud";
- version = "2.29.6";
- hash = "sha256-CHpRetKZnGzShIePnbVUdR06/1AAO2I1RX7NiZ7GBNs=";
+ version = "2.29.8";
+ hash = "sha256-dvyIdixtmg5ZTo/REB/E5QlHJu2xZ+Ui5qwJegoHTfk=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/discloud.discloud/changelog";
@@ -1375,8 +1375,8 @@ let
mktplcRef = {
name = "competitive-programming-helper";
publisher = "DivyanshuAgrawal";
- version = "2026.6.1780508121";
- hash = "sha256-4kb7Nk+gctECMQM/cko+q1Bta1EKPXPEqyCQLBMkbEo=";
+ version = "2026.7.1784455023";
+ hash = "sha256-mUiQ+35R1HXC+23qYKRJwV61poEsyhY2NkDizU+QMx8=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/DivyanshuAgrawal.competitive-programming-helper/changelog";
@@ -1457,8 +1457,8 @@ let
mktplcRef = {
name = "protobuf-vsc";
publisher = "DrBlury";
- version = "1.6.6";
- hash = "sha256-uMyxdLptaLZBlLEugvYQgJTZCtysmnZix9faXsQfHGk=";
+ version = "1.6.9";
+ hash = "sha256-4Mas35dRrPaXvrlpe0HdCUp/1+XDwhLeUhnq7EvKsco=";
};
meta = {
description = "Comprehensive Protocol Buffers support with syntax highlighting, IntelliSense, diagnostics and formatting";
@@ -1567,8 +1567,8 @@ let
mktplcRef = {
name = "elixir-ls";
publisher = "JakeBecker";
- version = "0.30.0";
- hash = "sha256-vHD16liYmcWeiSP16QqKhPst8e7iT9wZ1vGT5gV6xoo=";
+ version = "0.31.1";
+ hash = "sha256-eF0OGWpiu5aDiFp8MFP7j2r2+3QCPb1q93gWg7L/Xzc=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/JakeBecker.elixir-ls/changelog";
@@ -1710,8 +1710,8 @@ let
mktplcRef = {
name = "dependi";
publisher = "fill-labs";
- version = "0.7.22";
- hash = "sha256-XY0fbWHGZ3Gs7wRZdtq005l2/Ucvs/EmemLjMgRma7I=";
+ version = "0.7.25";
+ hash = "sha256-DvLksbhruNHIav2EOCxajhqJC7sYsveUnCyPVLABj0Y=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/fill-labs.dependi/changelog";
@@ -1760,8 +1760,8 @@ let
mktplcRef = {
name = "foam-vscode";
publisher = "foam";
- version = "0.43.1";
- hash = "sha256-rZjdBzqXpSG4aCMjRCmIrWtQdmmh7vEJQLIuH65Ewf0=";
+ version = "0.44.2";
+ hash = "sha256-jz1j8KzD5PDZ+P5V7yLo1BEmcW+q+D2nYKzYEf7Sg2w=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/foam.foam-vscode/changelog";
@@ -1884,8 +1884,8 @@ let
mktplcRef = {
name = "godot-tools";
publisher = "geequlim";
- version = "2.6.1";
- hash = "sha256-x+u5t4HB+uM2CbhSw0h/zoYPgBPTZNFaMuzL+KB9mAM=";
+ version = "2.7.1";
+ hash = "sha256-TNCMSmZdBXxAHkcFLpTDkCzaXNO4yvkCfQ8Xrb9gquo=";
};
meta = {
description = "VS Code extension for game development with Godot Engine and GDScript";
@@ -1929,12 +1929,29 @@ let
};
};
+ ginfuru.better-solarized = buildVscodeMarketplaceExtension {
+ meta = {
+ changelog = "https://marketplace.visualstudio.com/items/ginfuru.ginfuru-better-solarized-dark-theme/changelog";
+ description = "A Better Solarized theme for Visual Studio Code include light and dark versions";
+ downloadPage = "https://marketplace.visualstudio.com/items?itemName=ginfuru.ginfuru-better-solarized-dark-theme";
+ homepage = "https://github.com/ginfuru/vscode-better-solarized";
+ license = lib.licenses.mit;
+ maintainers = [ ];
+ };
+ mktplcRef = {
+ name = "ginfuru-better-solarized-dark-theme";
+ publisher = "ginfuru";
+ version = "0.10.9";
+ hash = "sha256-Zh3u1iq/kSzwtOY1RmG4cwvN6nJO6ys88BXn/EH/wTs=";
+ };
+ };
+
github.codespaces = buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "github";
name = "codespaces";
- version = "1.18.13";
- hash = "sha256-tvs35GA3bZ4jExiAe0NeHx/vQV/+2zio2Q0813/MAMU=";
+ version = "1.18.15";
+ hash = "sha256-NcW2XVQ6F7s6k4mIesEXhCkVVRfudwFr3glqB+TjrqM=";
};
meta = {
@@ -1998,8 +2015,8 @@ let
mktplcRef = {
name = "gitlab-workflow";
publisher = "gitlab";
- version = "6.78.1";
- hash = "sha256-N6M8HLSpnfUqMaPaWZuedWbA7ITwKhLS1n+uuwudpkU=";
+ version = "6.85.3";
+ hash = "sha256-EsQ+95Wo/5F9mEMQ7X36vBgUWlsz5BCOm+7QrGHuepc=";
};
meta = {
description = "GitLab extension for Visual Studio Code";
@@ -2014,8 +2031,8 @@ let
mktplcRef = {
name = "gleam";
publisher = "gleam";
- version = "2.12.2";
- hash = "sha256-41HgkDcgyStJtyeE0x1H9rFOZ18imcKF7XQixDOmurE=";
+ version = "2.13.0";
+ hash = "sha256-eCiBbdKMeXcRS4kyI2rH1iAT0CmQmo2SybeW+Y7FRio=";
};
meta = {
description = "Support for the Gleam programming language";
@@ -2030,8 +2047,8 @@ let
mktplcRef = {
name = "Go";
publisher = "golang";
- version = "0.54.0";
- hash = "sha256-o1SJjR6eQcGWN9BGoN5CBTdn6RsNG2a0+p/ZDcywzr0=";
+ version = "0.56.0";
+ hash = "sha256-n1lZ+xe6Co29gEOH3dpQl1/Kqd1SZ6oz6qqJkSByqss=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/golang.Go/changelog";
@@ -2048,6 +2065,21 @@ let
gplane.wasm-language-tools = callPackage ./gplane.wasm-language-tools { };
+ grafana.grafana-alloy = buildVscodeMarketplaceExtension {
+ mktplcRef = {
+ name = "grafana-alloy";
+ publisher = "grafana";
+ version = "0.2.0";
+ hash = "sha256-XcoiEDCPp6GzYQDhJArZBEWxSnZrSTHofIyLFegsbh0=";
+ };
+ meta = {
+ changelog = "https://github.com/grafana/vscode-alloy/releases";
+ description = "Grafana Alloy support for VSCode";
+ downloadPage = "https://marketplace.visualstudio.com/items?itemName=grafana.grafana-alloy";
+ license = lib.licenses.asl20;
+ };
+ };
+
grapecity.gc-excelviewer = buildVscodeMarketplaceExtension {
mktplcRef = {
name = "gc-excelviewer";
@@ -2112,17 +2144,7 @@ let
};
};
- gruntfuggly.todo-tree = buildVscodeMarketplaceExtension {
- mktplcRef = {
- name = "todo-tree";
- publisher = "Gruntfuggly";
- version = "0.0.226";
- hash = "sha256-Fj9cw+VJ2jkTGUclB1TLvURhzQsaryFQs/+f2RZOLHs=";
- };
- meta = {
- license = lib.licenses.mit;
- };
- };
+ gruntfuggly.todo-tree = callPackage ./gruntfuggly.todo-tree { };
hars.cppsnippets = buildVscodeMarketplaceExtension {
mktplcRef = {
@@ -2162,8 +2184,8 @@ let
mktplcRef = {
publisher = "haskell";
name = "haskell";
- version = "2.8.0";
- hash = "sha256-Tp4Ahfp3Ma9aJtghD+mgsCBTMOP1GI1vGE5xzvHO+d4=";
+ version = "2.8.1";
+ hash = "sha256-mAlEy5a83BRhUhA22AKheP6PPpfbrdGT6HsTKbFwJYs=";
};
meta = {
license = lib.licenses.mit;
@@ -2324,8 +2346,8 @@ let
mktplcRef = {
name = "vscode-vibrancy-continued";
publisher = "illixion";
- version = "1.1.78";
- hash = "sha256-w0i0Gmqj2atCtEYW+0XvZech37qQaTjkt8MJRdHamxs=";
+ version = "1.1.85";
+ hash = "sha256-hHbBg7h8iab8ArbiuEx+a5zqr02hIu8DGHnvh0XwH9g=";
};
meta = {
downloadPage = "https://marketplace.visualstudio.com/items?itemName=illixion.vscode-vibrancy-continued";
@@ -2337,6 +2359,8 @@ let
};
};
+ inferrinizzard.prettier-sql-vscode = callPackage ./inferrinizzard.prettier-sql-vscode { };
+
intellsmi.comment-translate = buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "intellsmi";
@@ -2429,6 +2453,8 @@ let
jackmacwindows.craftos-pc = callPackage ./jackmacwindows.craftos-pc { };
+ jacobdufault.fuzzy-search = callPackage ./jacobdufault.fuzzy-search { };
+
jakestanger.corn = callPackage ./jakestanger.corn { };
james-yu.latex-workshop = callPackage ./james-yu.latex-workshop { };
@@ -2570,8 +2596,8 @@ let
mktplcRef = {
publisher = "jnoortheen";
name = "nix-ide";
- version = "0.5.9";
- hash = "sha256-hPOcp6Yksgfu1+In21/gJ3MthV8JUV5WaRpYHvo5GGk=";
+ version = "0.5.10";
+ hash = "sha256-5rNqQRFLryzeIezUiqgvSY8Vz5n48367RHQrFDxpoD8=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/jnoortheen.nix-ide/changelog";
@@ -2648,8 +2674,8 @@ let
mktplcRef = {
name = "language-julia";
publisher = "julialang";
- version = "1.215.2";
- hash = "sha256-/3ULGcywO6SHvABRxaLXJQpjcrVs/vZxUGpG+NaSx3s=";
+ version = "1.219.2";
+ hash = "sha256-LQ7UL+/FtzRxn/M85fv3oh8g622KEPS35lque3kqby8=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/julialang.language-julia/changelog";
@@ -2884,8 +2910,8 @@ let
mktplcRef = {
name = "vscode-ltex-plus";
publisher = "ltex-plus";
- version = "15.6.1";
- hash = "sha256-UOiYjA11P7xqPFgdR7eS63wOQl9dqWAqBxz3nklapqo=";
+ version = "15.7.1";
+ hash = "sha256-wOwOD/rsUdwGJ24n6NkH1XY5Hf4T6LE34nFDOteubLY=";
};
meta = {
description = "VS Code extension for grammar/spell checking using LanguageTool with support for LaTeX, Markdown, and others";
@@ -3147,8 +3173,8 @@ let
mktplcRef = {
name = "vscode-dotnet-runtime";
publisher = "ms-dotnettools";
- version = "3.0.0";
- hash = "sha256-RA7skgj6yFZxk2XuJZtcDrI4dFrAbwODmwqSx4xWFUY=";
+ version = "3.1.0";
+ hash = "sha256-jmdf/l82dEMNY+KNLcBatA82yElOlUnnnTmV1yGxP1o=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/ms-dotnettools.vscode-dotnet-runtime/changelog";
@@ -3168,10 +3194,6 @@ let
arch = "linux-x64";
hash = "sha256-pmA7BNwyHiaU93j61/MyrBV5kH0DlW+7BA6HNlKGnso=";
};
- "x86_64-darwin" = {
- arch = "darwin-x64";
- hash = "sha256-E2KRzjIxLFmwArzEKittjejacrCOFFNNzphWw8v5CpE=";
- };
"aarch64-linux" = {
arch = "linux-arm64";
hash = "sha256-pnQP1OKr3NJgUuXzO1InYqGA49OuMFn2iEf8wpl4PqM=";
@@ -3202,7 +3224,6 @@ let
maintainers = [ lib.maintainers.magnouvean ];
platforms = [
"x86_64-linux"
- "x86_64-darwin"
"aarch64-darwin"
"aarch64-linux"
];
@@ -3432,8 +3453,8 @@ let
mktplcRef = {
name = "remote-containers";
publisher = "ms-vscode-remote";
- version = "0.447.0";
- hash = "sha256-JUTwzde97CQK/0Hp3E8JPrS3UY6vh9jud1ho1R0ODus=";
+ version = "0.459.1";
+ hash = "sha256-e5azL+9hluC/YyWb9uQxrr9p/9K2cYcUhalc9nZlOEg=";
};
meta = {
description = "Open any folder or repository inside a Docker container";
@@ -3491,8 +3512,8 @@ let
mktplcRef = {
name = "veriloghdl";
publisher = "mshr-h";
- version = "1.25.0";
- hash = "sha256-7DN0lYxwLL+Z0mIKApRHGHT7HiJZ0nfDMdojQm7XGAM=";
+ version = "1.29.0";
+ hash = "sha256-/VIAT9nnDG52Jzh+j0E038NSjoLCXZSVRSvGWXOeuuY=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/mshr-h.VerilogHDL/changelog";
@@ -3644,8 +3665,8 @@ let
mktplcRef = {
name = "just-black";
publisher = "nur";
- version = "3.1.1";
- hash = "sha256-fatJZquCDsLDFGVzBol2D6LIZUbZ6GzqcVEFAwLodW0=";
+ version = "4.0.2";
+ hash = "sha256-gfUavJXIgbNLYJNVrDeEIrpbKkgXs0YJNNb5P4480M0=";
};
meta = {
description = "Dark theme designed specifically for syntax highlighting";
@@ -3670,8 +3691,8 @@ let
mktplcRef = {
name = "ocaml-platform";
publisher = "ocamllabs";
- version = "2.0.1";
- hash = "sha256-BFRGEH5a2kTSIZG3o0GkYPeZch5b7OBUN4+pKXSQ7SY=";
+ version = "2.3.0";
+ hash = "sha256-vb2tTtdHRmlF/TZRqUFjZNgE+5jizX/ky+NgzJYvXUg=";
};
};
@@ -3711,6 +3732,8 @@ let
oxc.oxc-vscode = callPackage ./oxc.oxc-vscode { };
+ pflannery.vscode-versionlens = callPackage ./pflannery.vscode-versionlens { };
+
ph-hawkins.arc-plus = callPackage ./ph-hawkins.arc-plus { };
phind.phind = buildVscodeMarketplaceExtension {
@@ -3850,6 +3873,8 @@ let
};
};
+ rangav.vscode-thunder-client = callPackage ./rangav.vscode-thunder-client { };
+
rebornix.ruby = buildVscodeMarketplaceExtension {
mktplcRef = {
name = "ruby";
@@ -3881,8 +3906,8 @@ let
mktplcRef = {
publisher = "redhat";
name = "java";
- version = "1.54.0";
- hash = "sha256-G1L8fSRXj4rmyGFyvPuz7zoQ367Lc5PoyVOZnHPHcu0=";
+ version = "1.55.0";
+ hash = "sha256-ARY5w+40e5WRiVv8d9jPKPg2wFPQpJrkqD7+ncRzpgM=";
};
buildInputs = [ jdk ];
meta = {
@@ -3902,8 +3927,8 @@ let
mktplcRef = {
publisher = "redhat";
name = "vscode-yaml";
- version = "1.23.0";
- hash = "sha256-GC7AIQIUw+F5rBscTe+ulKt/97s7p636TLRvmcT9b9c=";
+ version = "1.24.0";
+ hash = "sha256-Bmh1gxKn+mvtolnKWmhJ2QxdUZ32QV7b4kbBNeBtcWg=";
};
meta = {
description = "YAML Language Support by Red Hat, with built-in Kubernetes syntax support";
@@ -4113,8 +4138,8 @@ let
mktplcRef = {
name = "sas-lsp";
publisher = "SAS";
- version = "1.19.1";
- hash = "sha256-aVtMiSbPLs6zIdcD0TopIAVKvJksSdTy9ND+jGw/G0A=";
+ version = "1.20.0";
+ hash = "sha256-s2CAzAXMXdmCyOoMmyHjz5GRPHi5riDf/Og3SVrW7QI=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/SAS.sas-lsp/changelog";
@@ -4142,8 +4167,8 @@ let
mktplcRef = {
name = "metals";
publisher = "scalameta";
- version = "1.65.0";
- hash = "sha256-Ob4F+MZI1hKi4bK8zM5kn0kjzhMklUqEB/B+hh612nU=";
+ version = "1.67.0";
+ hash = "sha256-THrd3Yix0gohTo/cshy9ZYZysA+xCGLx4KJHFk4zmCM=";
};
meta = {
license = lib.licenses.asl20;
@@ -4209,8 +4234,8 @@ let
mktplcRef = {
publisher = "shardulm94";
name = "trailing-spaces";
- version = "0.4.1";
- hash = "sha256-pLE1bfLRxjlm/kgU9nmtiPBOnP05giQnWq6bexrrIZY=";
+ version = "0.4.4";
+ hash = "sha256-L2WM021Jyyovy8KElkIspXc0MdHC9APsbPdX5hK4CIM=";
};
meta = {
license = lib.licenses.mit;
@@ -4534,8 +4559,8 @@ let
mktplcRef = {
name = "svelte-vscode";
publisher = "svelte";
- version = "110.2.0";
- hash = "sha256-5WCaYhWA6soB2AALFY/5Z7Y8IBAj5/4XSR/I4jHhth8=";
+ version = "110.3.0";
+ hash = "sha256-vVLnjFOpOmfmkwP0Yz7zONrBgpNDFfFZ0TAAicxdZ64=";
};
meta = {
changelog = "https://github.com/sveltejs/language-tools/releases";
@@ -4789,12 +4814,28 @@ let
};
};
+ tomblind.local-lua-debugger-vscode = buildVscodeMarketplaceExtension {
+ mktplcRef = {
+ name = "local-lua-debugger-vscode";
+ publisher = "tomblind";
+ version = "0.3.3";
+ hash = "sha256-7uZHbhOa/GT9F7+xikaxuQXIGzre1q1uWTWaTJhi2UA=";
+ };
+ meta = {
+ changelog = "https://github.com/tomblind/local-lua-debugger-vscode/blob/master/CHANGELOG.md";
+ description = "Simple Lua debugger for Visual Studio Code which requires no additional dependencies";
+ downloadPage = "https://marketplace.visualstudio.com/items?itemName=tomblind.local-lua-debugger-vscode";
+ homepage = "https://github.com/tomblind/local-lua-debugger-vscode";
+ license = lib.licenses.mit;
+ };
+ };
+
tsandall.opa = buildVscodeMarketplaceExtension {
mktplcRef = {
name = "opa";
publisher = "tsandall";
- version = "0.23.0";
- hash = "sha256-xya4Kxjc/uR4LFTZ5fAVOa0/cyHy8XHZkkapmODyMK4=";
+ version = "0.24.1";
+ hash = "sha256-wNlZM9/2K32W4vYPKzLiBCTqhV+SqgZzXGRxKoHoIaM=";
};
meta = {
changelog = "https://github.com/open-policy-agent/vscode-opa/blob/master/CHANGELOG.md";
@@ -4811,8 +4852,8 @@ let
mktplcRef = {
name = "emacs-mcx";
publisher = "tuttieee";
- version = "0.110.9";
- hash = "sha256-xHu8GvBoZKMag7BdHddXyjm2IReMujs9cggOn4h32t8=";
+ version = "0.111.0";
+ hash = "sha256-3z4B1NBQD3hbGcwWpS48bXuUAN1jVlSRLF0PDKGJH3A=";
};
meta = {
changelog = "https://github.com/whitphx/vscode-emacs-mcx/blob/main/CHANGELOG.md";
@@ -5080,8 +5121,8 @@ let
mktplcRef = {
name = "vscode-gradle";
publisher = "vscjava";
- version = "3.17.3";
- hash = "sha256-heFcGOe10r7y23xyFc/nFKk/nsrX4wc5fT9e4GKGhW0=";
+ version = "3.18.0";
+ hash = "sha256-ybMejIJER9HHVh1z+tazgvQ0UIa8eKoJBb7JOLU1Kpw=";
};
meta = {
@@ -5134,8 +5175,8 @@ let
mktplcRef = {
name = "vscode-java-pack";
publisher = "vscjava";
- version = "0.31.0";
- hash = "sha256-E0GJoITZIh2XemVpyPh3gAEtlvM2PZHgNzZDctSpwIA=";
+ version = "0.31.1";
+ hash = "sha256-SfrsL27uQyrtsNyqZe0q5Fv5sHMwRvBZ+iS6/JIpFVo=";
};
meta = {
description = "Popular extensions for Java development that provides Java IntelliSense, debugging, testing, Maven/Gradle support, project management and more";
@@ -5200,8 +5241,8 @@ let
mktplcRef = {
name = "volar";
publisher = "Vue";
- version = "3.3.3";
- hash = "sha256-Q2PnfjO7wzHrmWAeD4dOFT+GFe8qGG8wHU1FpwYeDnA=";
+ version = "3.3.7";
+ hash = "sha256-qXbJCRzHc7QS4QLCGso5orfSiRYp6V2wz/4tvyU3rfg=";
};
meta = {
changelog = "https://github.com/vuejs/language-tools/blob/master/CHANGELOG.md";
@@ -5244,8 +5285,8 @@ let
mktplcRef = {
name = "csharp-ls";
publisher = "vytautassurvila";
- version = "0.0.32";
- hash = "sha256-dc7aIUb+5fdmqVeHrysy8jjk0Sx6ThIsO9KagdQpx+M=";
+ version = "0.0.33";
+ hash = "sha256-VsNjdPmnstXgmgxzbC7+IGFggfLtYlQFsH3tGWjdUhM=";
};
meta = {
changelog = "https://github.com/vytautassurvila/vscode-csharp-ls/blob/master/CHANGELOG.md";
@@ -5260,8 +5301,8 @@ let
mktplcRef = {
name = "gitblame";
publisher = "waderyan";
- version = "13.0.1";
- sha256 = "sha256-N0UgWdwGj3NW4x0Ea+jKL5Jvp0YE+HfK5tkUjmynPuY=";
+ version = "13.1.0";
+ sha256 = "sha256-32ohvlIV7ogX+hGgcrCyHrv2hKWSpi+YuRMv0SGDYYA=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/waderyan.gitblame/changelog";
@@ -5460,8 +5501,8 @@ let
mktplcRef = {
name = "markdown-editor";
publisher = "zaaack";
- version = "0.1.13";
- hash = "sha256-Si8/piNNktcyRY8o8o9my9sP9NEwrNuySVjlyadDjtU=";
+ version = "0.1.19";
+ hash = "sha256-W0lL0JMNyEszyJa6I7RbXYLu4cU9DQUh0ZEAOd6eshI=";
};
meta = {
description = "Visual Studio Code extension for WYSIWYG markdown editing";
@@ -5536,8 +5577,8 @@ let
mktplcRef = {
name = "vscode-zig";
publisher = "ziglang";
- version = "0.6.18";
- hash = "sha256-jn/2Nmz6N84BCWnRdnM8w5AdiF2hh55h39SDTmRry5I=";
+ version = "0.6.19";
+ hash = "sha256-kdoks0da6+uofzvN5lulkDAVihSS7xoF/Q6Fo5yzQbg=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/ziglang.vscode-zig/changelog";
diff --git a/pkgs/applications/editors/vscode/extensions/detachhead.basedpyright/default.nix b/pkgs/applications/editors/vscode/extensions/detachhead.basedpyright/default.nix
index f21f58fc6b29..5ebaa79fb71b 100644
--- a/pkgs/applications/editors/vscode/extensions/detachhead.basedpyright/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/detachhead.basedpyright/default.nix
@@ -8,8 +8,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "basedpyright";
publisher = "detachhead";
- version = "1.39.6";
- hash = "sha256-shxV0g1XDu7qjrGiwyHGpY2qBCJt23tz7SuDbm5AXws=";
+ version = "1.39.9";
+ hash = "sha256-Iycuj7EXzRwVgvpk0KXa3dNw2rL21DnG4ohqIExS6Go=";
};
meta = {
changelog = "https://github.com/detachhead/basedpyright/releases";
diff --git a/pkgs/applications/editors/vscode/extensions/docker.docker/default.nix b/pkgs/applications/editors/vscode/extensions/docker.docker/default.nix
index 70523c30c6d4..2abc84aba7d9 100644
--- a/pkgs/applications/editors/vscode/extensions/docker.docker/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/docker.docker/default.nix
@@ -10,10 +10,6 @@ let
hash = "sha256-jfjd2V7IJ4GQlz/pXmrY/LlBjQ2qtlsQV4ZRD8RiWTg=";
arch = "linux-x64";
};
- x86_64-darwin = {
- hash = "sha256-aOFoTLVaaMFsdGoWV0OC31/nmOHXUhr2Y8K4SWcNil8=";
- arch = "darwin-x64";
- };
aarch64-linux = {
hash = "sha256-ugluaghNNZ/VrQORVIhc0Fuv3rHo++LO3Uwg2ujmsQc=";
arch = "linux-arm64";
diff --git a/pkgs/applications/editors/vscode/extensions/elijah-potter.harper/default.nix b/pkgs/applications/editors/vscode/extensions/elijah-potter.harper/default.nix
index 89d018488b56..64bb5e1086ce 100644
--- a/pkgs/applications/editors/vscode/extensions/elijah-potter.harper/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/elijah-potter.harper/default.nix
@@ -13,7 +13,12 @@ vscode-utils.buildVscodeMarketplaceExtension {
name = "harper";
publisher = "elijah-potter";
version = harper.version;
- hash = "sha256-nK97C9ZYSI6dh4w1ntDP0mbmv6ez3pyAfv/4D30I2sA=";
+
+ # Because the binary is removed in favor of the harper package,
+ # it does not matter which binary is fetched. Using only a single
+ # hash makes this easier to maintain.
+ arch = "linux-x64";
+ hash = "sha256-/brjx/yY4JLLboI6dLwF/eyX7yhRyMlohhGNFGIrm54=";
};
nativeBuildInputs = [
@@ -23,8 +28,11 @@ vscode-utils.buildVscodeMarketplaceExtension {
postInstall = ''
cd "$out/$installPrefix"
- jq '.contributes.configuration.properties."harper.path".default = "${harper}/bin/harper-ls"' package.json | sponge package.json
+ jq '.contributes.configuration.properties."harper.path".default = "${lib.getExe harper}"' package.json | sponge package.json
+
+ rm ./bin/harper-ls
'';
+
passthru.updateScript = vscode-extension-update-script { };
meta = {
@@ -34,5 +42,10 @@ vscode-utils.buildVscodeMarketplaceExtension {
homepage = "https://github.com/automattic/harper";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ MasterEvarior ];
+ platforms = [
+ "x86_64-linux"
+ "aarch64-linux"
+ "aarch64-darwin"
+ ];
};
}
diff --git a/pkgs/applications/editors/vscode/extensions/esbenp.prettier-vscode/default.nix b/pkgs/applications/editors/vscode/extensions/esbenp.prettier-vscode/default.nix
index a95633c3f014..b3fa749a8638 100644
--- a/pkgs/applications/editors/vscode/extensions/esbenp.prettier-vscode/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/esbenp.prettier-vscode/default.nix
@@ -17,6 +17,5 @@ vscode-utils.buildVscodeMarketplaceExtension {
downloadPage = "https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode";
homepage = "https://github.com/prettier/prettier-vscode";
license = lib.licenses.mit;
- maintainers = [ lib.maintainers.datafoo ];
};
}
diff --git a/pkgs/applications/editors/vscode/extensions/fstarlang.fstar-vscode-assistant/default.nix b/pkgs/applications/editors/vscode/extensions/fstarlang.fstar-vscode-assistant/default.nix
index 55f7767f06b4..2c7b9fef6eb7 100644
--- a/pkgs/applications/editors/vscode/extensions/fstarlang.fstar-vscode-assistant/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/fstarlang.fstar-vscode-assistant/default.nix
@@ -4,8 +4,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "fstar-vscode-assistant";
publisher = "FStarLang";
- version = "0.25.0";
- hash = "sha256-sya3P9Kn3DM/z5p8xF6TLEUPgrCs5+jgD89Y1KSJAgY=";
+ version = "0.25.4";
+ hash = "sha256-9gPM/T3Kbwt40V2ZuzN/OkQVNATsp4AYK9HuOu/Ui+0=";
};
meta = {
description = "Interactive editing mode VS Code extension for F*";
diff --git a/pkgs/applications/editors/vscode/extensions/github.copilot-chat/default.nix b/pkgs/applications/editors/vscode/extensions/github.copilot-chat/default.nix
index 042f86577079..f6c355e0ed3e 100644
--- a/pkgs/applications/editors/vscode/extensions/github.copilot-chat/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/github.copilot-chat/default.nix
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "github";
name = "copilot-chat";
- version = "0.45.1";
- hash = "sha256-xxJ+h0/XyT8otXUzIYW9/KMxKLk5zoEE/fiqj4SZK+A=";
+ version = "0.48.1";
+ hash = "sha256-eFLfYMFxvgtZtmwLsxfneMjD4jOg8/Uk0Eu/6+A6odY=";
};
meta = {
diff --git a/pkgs/applications/editors/vscode/extensions/gplane.wasm-language-tools/default.nix b/pkgs/applications/editors/vscode/extensions/gplane.wasm-language-tools/default.nix
index 543b8ef5fa53..44e21076b955 100644
--- a/pkgs/applications/editors/vscode/extensions/gplane.wasm-language-tools/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/gplane.wasm-language-tools/default.nix
@@ -14,8 +14,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "gplane";
name = "wasm-language-tools";
- version = "1.20.0";
- hash = "sha256-AXLwEp6uospVZwd2NxLEfABsNQOt1uRJTQ4HMTXbrJc=";
+ version = "1.21.0";
+ hash = "sha256-r1gnq12O/tNx175/nmrQD3b7HVipVT0pEoLvg2HrWwI=";
};
buildPhase = ''
diff --git a/pkgs/applications/editors/vscode/extensions/gruntfuggly.todo-tree/default.nix b/pkgs/applications/editors/vscode/extensions/gruntfuggly.todo-tree/default.nix
new file mode 100644
index 000000000000..5a169aee2a20
--- /dev/null
+++ b/pkgs/applications/editors/vscode/extensions/gruntfuggly.todo-tree/default.nix
@@ -0,0 +1,47 @@
+{
+ jq,
+ lib,
+ moreutils,
+ ripgrep,
+ vscode-utils,
+ vscode-extension-update-script,
+}:
+
+vscode-utils.buildVscodeMarketplaceExtension {
+ mktplcRef = {
+ name = "todo-tree";
+ publisher = "Gruntfuggly";
+ version = "0.0.226";
+ hash = "sha256-Fj9cw+VJ2jkTGUclB1TLvURhzQsaryFQs/+f2RZOLHs=";
+ };
+
+ __structuredAttrs = true;
+ strictDeps = true;
+
+ nativeBuildInputs = [
+ jq
+ moreutils
+ ];
+
+ buildInputs = [ ripgrep ];
+
+ postInstall = ''
+ cd "$out/$installPrefix"
+ jq '(.contributes.configuration[] | select(.title == "%todo-tree.configuration.regex%") | .properties."todo-tree.ripgrep.ripgrep".default) = $s' \
+ --arg s "${lib.getExe ripgrep}" \
+ package.json | sponge package.json
+ '';
+
+ passthru.updateScript = vscode-extension-update-script { };
+
+ meta = {
+ changelog = "https://marketplace.visualstudio.com/items/Gruntfuggly.todo-tree/changelog";
+ description = "Show TODO, FIXME, etc. comment tags in a tree view";
+ downloadPage = "https://marketplace.visualstudio.com/items?itemName=Gruntfuggly.todo-tree";
+ homepage = "https://github.com/Gruntfuggly/todo-tree";
+ license = lib.licenses.mit;
+ maintainers = with lib.maintainers; [
+ sandarukasa
+ ];
+ };
+}
diff --git a/pkgs/applications/editors/vscode/extensions/hashicorp.terraform/default.nix b/pkgs/applications/editors/vscode/extensions/hashicorp.terraform/default.nix
index 5e9772aefe0d..d1d0f74562f3 100644
--- a/pkgs/applications/editors/vscode/extensions/hashicorp.terraform/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/hashicorp.terraform/default.nix
@@ -11,8 +11,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "terraform";
publisher = "hashicorp";
- version = "2.39.2";
- hash = "sha256-Lb20IdQcroJ/9Jn+epcIDvciFb/GDmklR9pDzrC5JbQ=";
+ version = "2.39.3";
+ hash = "sha256-oU3kAhIsuadjyBvi+gJ6h19A3KueQYCZWLIN0ZUhoOE=";
};
postInstall = ''
diff --git a/pkgs/applications/editors/vscode/extensions/inferrinizzard.prettier-sql-vscode/default.nix b/pkgs/applications/editors/vscode/extensions/inferrinizzard.prettier-sql-vscode/default.nix
new file mode 100644
index 000000000000..c87dde51734a
--- /dev/null
+++ b/pkgs/applications/editors/vscode/extensions/inferrinizzard.prettier-sql-vscode/default.nix
@@ -0,0 +1,21 @@
+{
+ lib,
+ vscode-utils,
+}:
+
+vscode-utils.buildVscodeMarketplaceExtension {
+ mktplcRef = {
+ name = "prettier-sql-vscode";
+ publisher = "inferrinizzard";
+ version = "1.6.0";
+ hash = "sha256-l6pf/+uv8Bn4uDMX0CbzSjydTStr73uRY550Ad9wm7Q=";
+ };
+
+ meta = {
+ description = "VSCode Extension to format SQL files";
+ downloadPage = "https://marketplace.visualstudio.com/items?itemName=inferrinizzard.prettier-sql-vscode";
+ homepage = "https://github.com/sql-formatter-org/sql-formatter";
+ license = lib.licenses.mit;
+ maintainers = with lib.maintainers; [ AlexAntonik ];
+ };
+}
diff --git a/pkgs/applications/editors/vscode/extensions/jacobdufault.fuzzy-search/default.nix b/pkgs/applications/editors/vscode/extensions/jacobdufault.fuzzy-search/default.nix
new file mode 100644
index 000000000000..ca91a9ea3754
--- /dev/null
+++ b/pkgs/applications/editors/vscode/extensions/jacobdufault.fuzzy-search/default.nix
@@ -0,0 +1,21 @@
+{
+ lib,
+ vscode-utils,
+}:
+
+vscode-utils.buildVscodeMarketplaceExtension {
+ mktplcRef = {
+ name = "fuzzy-search";
+ publisher = "jacobdufault";
+ version = "0.0.3";
+ hash = "sha256-oN1SzXypjpKOTUzPbLCTC+H3I/40LMVdjbW3T5gib0M=";
+ };
+
+ meta = {
+ description = "Provides a fuzzy search using the quick pick window of the current text document.";
+ downloadPage = "https://marketplace.visualstudio.com/items?itemName=jacobdufault.fuzzy-search";
+ homepage = "https://github.com/jacobdufault/vscode-fuzzy-search";
+ license = lib.licenses.unfree;
+ maintainers = with lib.maintainers; [ AlexAntonik ];
+ };
+}
diff --git a/pkgs/applications/editors/vscode/extensions/kilocode.kilo-code/default.nix b/pkgs/applications/editors/vscode/extensions/kilocode.kilo-code/default.nix
index 31fc7cf075b7..2fa4097929c3 100644
--- a/pkgs/applications/editors/vscode/extensions/kilocode.kilo-code/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/kilocode.kilo-code/default.nix
@@ -12,26 +12,22 @@ vscode-utils.buildVscodeMarketplaceExtension {
sources = {
"x86_64-linux" = {
arch = "linux-x64";
- hash = "sha256-YeF6LyQzVAXgZ5Iqr6YvNcACfiUukUsq7cybeCQdSYc=";
- };
- "x86_64-darwin" = {
- arch = "darwin-x64";
- hash = "sha256-SjirNvI83eh3Gt5rGsaiLT6TJMH6LRQAasOFNy9OMCY=";
+ hash = "sha256-uPmJyEq7X6uJzE1M5Xywax1mrnTcg6jOb9MlpKZ0WRk=";
};
"aarch64-linux" = {
arch = "linux-arm64";
- hash = "sha256-FjE3xTp5Mj1584bepVc4nZr3rxCR3CV+jplmA45VF44=";
+ hash = "sha256-b46f0f99rjBivewC9jUbAFiKK+DS1XKv+AynUlKHliw=";
};
"aarch64-darwin" = {
arch = "darwin-arm64";
- hash = "sha256-SAf3+0QSFUDq09AZQnw78ps55RM/RwoAeQuVly7vn10=";
+ hash = "sha256-yBJjt53eOazV9FB8qimerwXTX4vCIPC+lyXtau/3FyI=";
};
};
in
{
publisher = "kilocode";
name = "Kilo-Code";
- version = "7.2.20";
+ version = "7.3.53";
}
// sources.${stdenv.hostPlatform.system}
or (throw "Unsupported system ${stdenv.hostPlatform.system}");
@@ -52,7 +48,6 @@ vscode-utils.buildVscodeMarketplaceExtension {
"aarch64-linux"
"aarch64-darwin"
"x86_64-linux"
- "x86_64-darwin"
];
maintainers = with lib.maintainers; [ xiaoxiangmoe ];
};
diff --git a/pkgs/applications/editors/vscode/extensions/mongodb.mongodb-vscode/default.nix b/pkgs/applications/editors/vscode/extensions/mongodb.mongodb-vscode/default.nix
index dc8ca7283294..67df81e6ddf4 100644
--- a/pkgs/applications/editors/vscode/extensions/mongodb.mongodb-vscode/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/mongodb.mongodb-vscode/default.nix
@@ -4,8 +4,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "mongodb-vscode";
publisher = "mongodb";
- version = "1.16.0";
- hash = "sha256-cnKYDrExL3yDJkEofWPglzMa50KDMgKQxsM5zK1RaBs=";
+ version = "1.16.1";
+ hash = "sha256-UIxXrJpH/Ix4Ev6veumcT/9h1SgZgEXHjnwkOH9ch44=";
};
meta = {
diff --git a/pkgs/applications/editors/vscode/extensions/ms-azuretools.vscode-bicep/default.nix b/pkgs/applications/editors/vscode/extensions/ms-azuretools.vscode-bicep/default.nix
index 2542e6c955c8..60a20f2ae3cc 100644
--- a/pkgs/applications/editors/vscode/extensions/ms-azuretools.vscode-bicep/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/ms-azuretools.vscode-bicep/default.nix
@@ -10,8 +10,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "ms-azuretools";
name = "vscode-bicep";
- version = "0.42.1";
- hash = "sha256-rlLR/95DcxwkLxvyJgt3ptBvelL5VCIQvDl72eqk63s=";
+ version = "0.43.8";
+ hash = "sha256-OweBVc8s+CEaCW4IZu43HaXOAL/PBjnunCEoPsq0pI0=";
};
buildInputs = [
diff --git a/pkgs/applications/editors/vscode/extensions/ms-azuretools.vscode-containers/default.nix b/pkgs/applications/editors/vscode/extensions/ms-azuretools.vscode-containers/default.nix
index b74a72a52c9e..24e1da8ff882 100644
--- a/pkgs/applications/editors/vscode/extensions/ms-azuretools.vscode-containers/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/ms-azuretools.vscode-containers/default.nix
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "ms-azuretools";
name = "vscode-containers";
- version = "2.4.2";
- hash = "sha256-qkQAv53y+PVKJdReffjHwoJbvj20o4DF/c6omLIWB80=";
+ version = "2.4.5";
+ hash = "sha256-Js+403StdF3WmlHOiB78UKM77njReuKOiQ9NHnFljs8=";
};
meta = {
diff --git a/pkgs/applications/editors/vscode/extensions/ms-dotnettools.csdevkit/default.nix b/pkgs/applications/editors/vscode/extensions/ms-dotnettools.csdevkit/default.nix
index af7fd5daef40..96eeea294b2d 100644
--- a/pkgs/applications/editors/vscode/extensions/ms-dotnettools.csdevkit/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/ms-dotnettools.csdevkit/default.nix
@@ -22,10 +22,6 @@ let
arch = "linux-arm64";
hash = "sha256-1zz9xrMALIOXzMpArWSwO12WmRE+0ldbIwUFH1G2GQI=";
};
- x86_64-darwin = {
- arch = "darwin-x64";
- hash = "sha256-3PoSbp8M2X4bhSQyxvNC7jtNDVNEuEKeYRZQMFOmbtQ=";
- };
aarch64-darwin = {
arch = "darwin-arm64";
hash = "sha256-F4CsyiX46SpjilJNV+qYps1JAw09pVruLmW+muN9/B4=";
@@ -138,7 +134,6 @@ vscode-utils.buildVscodeMarketplaceExtension {
platforms = [
"x86_64-linux"
"aarch64-linux"
- "x86_64-darwin"
"aarch64-darwin"
];
};
diff --git a/pkgs/applications/editors/vscode/extensions/ms-dotnettools.csharp/default.nix b/pkgs/applications/editors/vscode/extensions/ms-dotnettools.csharp/default.nix
index 00df6cd1e9a1..abd222def11d 100644
--- a/pkgs/applications/editors/vscode/extensions/ms-dotnettools.csharp/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/ms-dotnettools.csharp/default.nix
@@ -18,19 +18,15 @@ let
{
x86_64-linux = {
arch = "linux-x64";
- hash = "sha256-DtvdlODo0tbFxHTXR0MBOCM2wxWYqUCYbJRU1um+Pck=";
+ hash = "sha256-FTS8cK9ovmxGLnywOGTIP7oUOHZ4RLE5t7lfhltdmIc=";
};
aarch64-linux = {
arch = "linux-arm64";
- hash = "sha256-WduoZivxgoePof1H/DGEdnqXN7sLvQMq9I0z9NzwDnI=";
- };
- x86_64-darwin = {
- arch = "darwin-x64";
- hash = "sha256-a5njdsMEvqVcbfzaB5APzoGCHhl0Fcmo4tylckcv80U=";
+ hash = "sha256-EV3745OXbwrRmc8P5e13DZbomyJGcYQUF07WflRWU1Q=";
};
aarch64-darwin = {
arch = "darwin-arm64";
- hash = "sha256-6tFj6Am2SyhF/rHBhQIR7eL866Jq6Vqfl3IKWYu85zY=";
+ hash = "sha256-KCIkjBmYZPiuFmQ3/aDycARYIHPyDTmMkoGcuG5DQX8=";
};
}
.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}")
@@ -52,7 +48,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "csharp";
publisher = "ms-dotnettools";
- version = "2.131.79";
+ version = "2.140.8";
inherit (extInfo) hash arch;
};
@@ -159,7 +155,6 @@ vscode-utils.buildVscodeMarketplaceExtension {
platforms = [
"x86_64-linux"
"aarch64-linux"
- "x86_64-darwin"
"aarch64-darwin"
];
};
diff --git a/pkgs/applications/editors/vscode/extensions/ms-pyright.pyright/default.nix b/pkgs/applications/editors/vscode/extensions/ms-pyright.pyright/default.nix
index 827152ef6b6c..178cba1207f7 100644
--- a/pkgs/applications/editors/vscode/extensions/ms-pyright.pyright/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/ms-pyright.pyright/default.nix
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "ms-pyright";
name = "pyright";
- version = "1.1.408";
- hash = "sha256-IxfqzPBKqslpKaEP2eD+DS0BdSUDfo2w4u1FK0Uzvwo=";
+ version = "1.1.411";
+ hash = "sha256-cK7zP8RiG2BOadIgeRxwAYmtZK4HQV1Hp1ECGD/bJUk=";
};
meta = {
diff --git a/pkgs/applications/editors/vscode/extensions/ms-python.debugpy/default.nix b/pkgs/applications/editors/vscode/extensions/ms-python.debugpy/default.nix
index 9887ca490d02..e5f996c1c976 100644
--- a/pkgs/applications/editors/vscode/extensions/ms-python.debugpy/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/ms-python.debugpy/default.nix
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "debugpy";
publisher = "ms-python";
- version = "2025.18.0";
- hash = "sha256-UegvlhgIjbwv9SgZIdtzX8FDOL9qjBLOFm0jaTexNrQ=";
+ version = "2026.6.0";
+ hash = "sha256-zgfBcgIKc78f9qpcl9ULoQTUQ1ETAxfwpH/SSOhyaZc=";
};
meta = {
diff --git a/pkgs/applications/editors/vscode/extensions/ms-python.pylint/default.nix b/pkgs/applications/editors/vscode/extensions/ms-python.pylint/default.nix
index 1cc22b7a7a3e..d6d00003428d 100644
--- a/pkgs/applications/editors/vscode/extensions/ms-python.pylint/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/ms-python.pylint/default.nix
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "ms-python";
name = "pylint";
- version = "2026.4.0";
- hash = "sha256-yWp7poC1PCoou+1XADmW0ftzyQDtJbqb3YyMf24Jprc=";
+ version = "2026.6.0";
+ hash = "sha256-lJl+nQyLjnkuMfewYXcrU+Nne7R2foUPn50TtE9OqDA=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/ms-python.pylint/changelog";
diff --git a/pkgs/applications/editors/vscode/extensions/ms-python.python/default.nix b/pkgs/applications/editors/vscode/extensions/ms-python.python/default.nix
index a934f7a21db6..4c95c0174df3 100644
--- a/pkgs/applications/editors/vscode/extensions/ms-python.python/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/ms-python.python/default.nix
@@ -18,10 +18,6 @@ let
hash = "sha256-HQfmDV6rJX6l1pGybe8//2QrTSwE+rlEJOi4/iW69lY=";
arch = "linux-x64";
};
- x86_64-darwin = {
- hash = "sha256-tAZyt2fwB/GOhffY5lhHJTmbXG8UloynPtjoMtWRHok=";
- arch = "darwin-x64";
- };
aarch64-linux = {
hash = "sha256-v7fatW/LMJ8CeSRrE/5b7dLqOrhNhwzUySUxtAMuBUE=";
arch = "linux-arm64";
diff --git a/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/default.nix b/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/default.nix
index ebfa123e5996..902cda5b3941 100644
--- a/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/ms-vscode.cpptools/default.nix
@@ -42,15 +42,15 @@ let
isDarwin = stdenv.hostPlatform.isDarwin;
supported = {
x86_64-linux = {
- hash = "sha256-5L4PrwcZ/Q3g6qlCsCebx3czLZVD2sDrDf99l9nooSo=";
+ hash = "sha256-KTGDbX/T1BhoYxEjqPmPTAkyNjGDEV1Ao4nMIhHpGys=";
arch = "linux-x64";
};
aarch64-linux = {
- hash = "sha256-nQNDPfk6BRHp7veyx18GMlEt3Xa8iDuqtHG7qzJcPS4=";
+ hash = "sha256-4gl6sVgWAkV2XJFOipVbBUDGG1ncm41TjSoFnRW78m0=";
arch = "linux-arm64";
};
aarch64-darwin = {
- hash = "sha256-jhoa9UcYg2Uj8x9AZwAh68k7WCi6mpgNUUx2YsRIkjw=";
+ hash = "sha256-EMkq7Y0Eo629GzW6pDL1UYijyvLU6sp7YxPaKm0va6s=";
arch = "darwin-arm64";
};
};
@@ -63,16 +63,16 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = base // {
name = "cpptools";
publisher = "ms-vscode";
- version = "1.31.5";
+ version = "1.32.2";
};
nativeBuildInputs = [
autoPatchelfHook
+ jq
makeWrapper
];
buildInputs = [
- jq
libkrb5
zlib
(lib.getLib stdenv.cc.cc)
diff --git a/pkgs/applications/editors/vscode/extensions/ms-vscode.vscode-speech/default.nix b/pkgs/applications/editors/vscode/extensions/ms-vscode.vscode-speech/default.nix
index a92f471d2f06..4399094441b1 100644
--- a/pkgs/applications/editors/vscode/extensions/ms-vscode.vscode-speech/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/ms-vscode.vscode-speech/default.nix
@@ -16,10 +16,6 @@ vscode-utils.buildVscodeMarketplaceExtension {
arch = "linux-x64";
hash = "sha256-dZwOBehoYEqaYskvcPB55IKnG1CMToioyUJXlndqorA=";
};
- "x86_64-darwin" = {
- arch = "darwin-x64";
- hash = "sha256-b6LobvVngC0TFuWTC9JBQrECkoX7ewLNCpCROkXHk20=";
- };
"aarch64-linux" = {
arch = "linux-arm64";
hash = "sha256-/EaOfoubfq1ufwB7TTQ2hqmh1ZJiZ1+B6QeYu3MoFPI=";
@@ -68,7 +64,6 @@ vscode-utils.buildVscodeMarketplaceExtension {
license = lib.licenses.unfree;
platforms = [
"x86_64-linux"
- "x86_64-darwin"
"aarch64-linux"
"aarch64-darwin"
];
diff --git a/pkgs/applications/editors/vscode/extensions/ms-windows-ai-studio.windows-ai-studio/default.nix b/pkgs/applications/editors/vscode/extensions/ms-windows-ai-studio.windows-ai-studio/default.nix
index 6e9d6f6d72eb..f9bf09ec61d2 100644
--- a/pkgs/applications/editors/vscode/extensions/ms-windows-ai-studio.windows-ai-studio/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/ms-windows-ai-studio.windows-ai-studio/default.nix
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "windows-ai-studio";
publisher = "ms-windows-ai-studio";
- version = "1.0.1";
- hash = "sha256-85bFomfGcFiXJuTUv46B47PEtzFP6H7rggCZzf5/fK8=";
+ version = "1.6.2";
+ hash = "sha256-irI7rcyCUc3jUhrEa449pDix3MhwMh18ezvri3bi0Gk=";
};
meta = {
diff --git a/pkgs/applications/editors/vscode/extensions/myriad-dreamin.tinymist/default.nix b/pkgs/applications/editors/vscode/extensions/myriad-dreamin.tinymist/default.nix
index e2dff1363b83..d1c2cd86f006 100644
--- a/pkgs/applications/editors/vscode/extensions/myriad-dreamin.tinymist/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/myriad-dreamin.tinymist/default.nix
@@ -11,7 +11,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
name = "tinymist";
publisher = "myriad-dreamin";
inherit (tinymist) version;
- hash = "sha256-13/qw2BZ/WG+TYNVncJ/PuFLaUhlAn63zaa27JcLITE=";
+ hash = "sha256-FLWUeRPoqzHjwBrf0OOejaAVY+KBOpNBb9OJMdfLr04=";
};
__structuredAttrs = true;
diff --git a/pkgs/applications/editors/vscode/extensions/ndonfris.fish-lsp/default.nix b/pkgs/applications/editors/vscode/extensions/ndonfris.fish-lsp/default.nix
index 85066de0f914..0493204a18bd 100644
--- a/pkgs/applications/editors/vscode/extensions/ndonfris.fish-lsp/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/ndonfris.fish-lsp/default.nix
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "ndonfris";
name = "fish-lsp";
- version = "0.1.20";
- hash = "sha256-aDqAbzWaMJ1k/2Pu3j+WRaIGMrS6J2bImbSfBmelDKM=";
+ version = "0.1.22";
+ hash = "sha256-rbxjPThdqVSbE6aZ8pcN2awMNypPaN0KQ/BzgO2Aqog=";
};
meta = {
diff --git a/pkgs/applications/editors/vscode/extensions/oxc.oxc-vscode/default.nix b/pkgs/applications/editors/vscode/extensions/oxc.oxc-vscode/default.nix
index d2e8dcbddf83..9b60246c80f4 100644
--- a/pkgs/applications/editors/vscode/extensions/oxc.oxc-vscode/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/oxc.oxc-vscode/default.nix
@@ -10,8 +10,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "oxc";
name = "oxc-vscode";
- version = "1.57.0";
- hash = "sha256-kz4YqPcDjBX7hT3O7odPQgYmGMO34VGw16d6mpzXq7c=";
+ version = "1.58.0";
+ hash = "sha256-30dFeguNbY8WM3fLym6aUMkHYH5wA5scSNn04Ukbj9U=";
};
nativeBuildInputs = [
diff --git a/pkgs/applications/editors/vscode/extensions/pflannery.vscode-versionlens/default.nix b/pkgs/applications/editors/vscode/extensions/pflannery.vscode-versionlens/default.nix
new file mode 100644
index 000000000000..e39cded3c0eb
--- /dev/null
+++ b/pkgs/applications/editors/vscode/extensions/pflannery.vscode-versionlens/default.nix
@@ -0,0 +1,21 @@
+{
+ lib,
+ vscode-utils,
+}:
+
+vscode-utils.buildVscodeMarketplaceExtension {
+ mktplcRef = {
+ name = "vscode-versionlens";
+ publisher = "pflannery";
+ version = "1.28.0";
+ hash = "sha256-IZjTHE51hdrQpDndsz5bBCKre0zmWkCAJa/v8k4iLy0=";
+ };
+
+ meta = {
+ description = "Shows the latest version for each package using code lens";
+ downloadPage = "https://marketplace.visualstudio.com/items?itemName=pflannery.vscode-versionlens";
+ homepage = "https://gitlab.com/versionlens/vscode-versionlens";
+ license = lib.licenses.isc;
+ maintainers = with lib.maintainers; [ AlexAntonik ];
+ };
+}
diff --git a/pkgs/applications/editors/vscode/extensions/pkief.material-icon-theme/default.nix b/pkgs/applications/editors/vscode/extensions/pkief.material-icon-theme/default.nix
index 00982423a806..6babbd0c2a77 100644
--- a/pkgs/applications/editors/vscode/extensions/pkief.material-icon-theme/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/pkief.material-icon-theme/default.nix
@@ -6,8 +6,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "material-icon-theme";
publisher = "PKief";
- version = "5.33.1";
- hash = "sha256-GWHWEdi2kPkxS0RGAxFcy+njFCl1iiEBu41V/5sHqvc=";
+ version = "5.37.0";
+ hash = "sha256-remt7+OQnOqSrtUoUN3QCXXR3Bti/lWIMfb7i4j3w84=";
};
meta = {
description = "Material Design Icons for Visual Studio Code";
diff --git a/pkgs/applications/editors/vscode/extensions/rangav.vscode-thunder-client/default.nix b/pkgs/applications/editors/vscode/extensions/rangav.vscode-thunder-client/default.nix
new file mode 100644
index 000000000000..53033e8dee08
--- /dev/null
+++ b/pkgs/applications/editors/vscode/extensions/rangav.vscode-thunder-client/default.nix
@@ -0,0 +1,21 @@
+{
+ lib,
+ vscode-utils,
+}:
+
+vscode-utils.buildVscodeMarketplaceExtension {
+ mktplcRef = {
+ name = "vscode-thunder-client";
+ publisher = "rangav";
+ version = "2.41.0";
+ hash = "sha256-c5oEaRMeTEWT0dtd6bzWMumhTEchOsLDXp+D76orL+k=";
+ };
+
+ meta = {
+ description = "Lightweight Rest API Client for VS Code";
+ downloadPage = "https://marketplace.visualstudio.com/items?itemName=rangav.vscode-thunder-client";
+ homepage = "https://github.com/thunderclient/thunder-client-support";
+ license = lib.licenses.unfree;
+ maintainers = with lib.maintainers; [ AlexAntonik ];
+ };
+}
diff --git a/pkgs/applications/editors/vscode/extensions/redhat.vscode-xml/default.nix b/pkgs/applications/editors/vscode/extensions/redhat.vscode-xml/default.nix
index 4e311914bc7a..1df127e0fd59 100644
--- a/pkgs/applications/editors/vscode/extensions/redhat.vscode-xml/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/redhat.vscode-xml/default.nix
@@ -13,10 +13,6 @@ vscode-utils.buildVscodeMarketplaceExtension {
arch = "linux-x64";
hash = "sha256-cP/oFn19CZ/G3kjdHNZGqXvoDE1qUtg6xrg/2MO14Lo=";
};
- "x86_64-darwin" = {
- arch = "darwin-x64";
- hash = "sha256-wtk8SasxXEQ3pCJpVTWR8wcY/bNaIZmImbAtrFWYWOo=";
- };
"aarch64-darwin" = {
arch = "darwin-arm64";
hash = "sha256-XYdwVoDqK+88ZYUm6APyamFNx6XlYjy0R4CIhSMuRmU=";
@@ -42,7 +38,6 @@ vscode-utils.buildVscodeMarketplaceExtension {
platforms = [
"x86_64-linux"
"aarch64-darwin"
- "x86_64-darwin"
];
};
}
diff --git a/pkgs/applications/editors/vscode/extensions/rooveterinaryinc.roo-cline/default.nix b/pkgs/applications/editors/vscode/extensions/rooveterinaryinc.roo-cline/default.nix
index ce082884d3d2..64137bc9fd95 100644
--- a/pkgs/applications/editors/vscode/extensions/rooveterinaryinc.roo-cline/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/rooveterinaryinc.roo-cline/default.nix
@@ -16,20 +16,20 @@ let
vsix = stdenvNoCC.mkDerivation (finalAttrs: {
name = "roo-code-${finalAttrs.version}.vsix";
pname = "roo-code-vsix";
- version = "3.52.0";
+ version = "3.54.0";
src = fetchFromGitHub {
owner = "RooCodeInc";
repo = "Roo-Code";
tag = "v${finalAttrs.version}";
- hash = "sha256-DvuL1WByEJER+v73pCvwNdRNfM8j+c1VQGGjAyV79p8=";
+ hash = "sha256-pVJcFAI/xxNflzf+wj0fOASP8Fx9oybu9V6dGrDx7do=";
};
pnpmDeps = fetchPnpmDeps {
inherit (finalAttrs) pname version src;
inherit pnpm;
fetcherVersion = 3;
- hash = "sha256-t2sPuhn8xdk6hGfmViPGG+5TAhtBBOMYNoOb6DlPzws=";
+ hash = "sha256-VD4DDLpZdnsfZNkg2oD0DT+zoxsk4CUh2pFll8n3mu4=";
};
nativeBuildInputs = [
diff --git a/pkgs/applications/editors/vscode/extensions/saoudrizwan.claude-dev/default.nix b/pkgs/applications/editors/vscode/extensions/saoudrizwan.claude-dev/default.nix
index c4b9eee45455..2baf64ec3aa9 100644
--- a/pkgs/applications/editors/vscode/extensions/saoudrizwan.claude-dev/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/saoudrizwan.claude-dev/default.nix
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "claude-dev";
publisher = "saoudrizwan";
- version = "3.89.2";
- hash = "sha256-lDt/xn1PFs0UDg0rOOun8Bl/FTXSjvQ//ETkoHFypAM=";
+ version = "4.0.8";
+ hash = "sha256-qSlz2wXQwpO1Wi9P40hVm+ACZ+VfCiV9LF3lnOkMoXA=";
};
meta = {
diff --git a/pkgs/applications/editors/vscode/extensions/sourcery.sourcery/default.nix b/pkgs/applications/editors/vscode/extensions/sourcery.sourcery/default.nix
index 93a8d164f8c5..305f1123a1b8 100644
--- a/pkgs/applications/editors/vscode/extensions/sourcery.sourcery/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/sourcery.sourcery/default.nix
@@ -6,13 +6,27 @@
zlib,
}:
-vscode-utils.buildVscodeMarketplaceExtension {
+let
+ inherit (stdenv.hostPlatform) system;
+in
+vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
+ passthru.platformTable = {
+ "x86_64-linux" = {
+ arch = "linux-x64";
+ hash = "sha256-Oz4Buraof4yXIxGeKXIsDkvEQQ0Gzf/b5mdses1nHlo=";
+ };
+ "aarch64-darwin" = {
+ arch = "darwin-arm64";
+ hash = "sha256-vMDB5zmdBNt3R5AkeuCYhxzW/rSGwM+wtU5K4v3ZU/U=";
+ };
+ };
+
mktplcRef = {
name = "sourcery";
publisher = "sourcery";
- version = "1.37.0";
- hash = "sha256-ovCxcr1m3GmRu45hr5DG781xkQdANbQYLvV2gFhG4eQ=";
- };
+ version = "1.43.0";
+ }
+ // finalAttrs.passthru.platformTable.${system} or (throw "Unsupported platform ${system}");
nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];
@@ -28,9 +42,6 @@ vscode-utils.buildVscodeMarketplaceExtension {
homepage = "https://github.com/sourcery-ai/sourcery-vscode";
license = lib.licenses.unfree;
maintainers = with lib.maintainers; [ tomasajt ];
- platforms = [
- "x86_64-linux"
- "x86_64-darwin"
- ];
+ platforms = lib.attrNames finalAttrs.passthru.platformTable;
};
-}
+})
diff --git a/pkgs/applications/editors/vscode/extensions/sumneko.lua/default.nix b/pkgs/applications/editors/vscode/extensions/sumneko.lua/default.nix
index 54e6a13d1b7c..c02660aadfee 100644
--- a/pkgs/applications/editors/vscode/extensions/sumneko.lua/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/sumneko.lua/default.nix
@@ -8,8 +8,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "lua";
publisher = "sumneko";
- version = "3.18.1";
- hash = "sha256-TmQFl2+4hiu1qlGA6D+3kynC4m4kVJMoMn3b+TLZaz8=";
+ version = "3.18.2";
+ hash = "sha256-8mvauayksFk/3A7VMJ3EZYyRK8YLgX03W7bzEIdGkXQ=";
};
# Running chmod in runtime will lock up extension
diff --git a/pkgs/applications/editors/vscode/extensions/sysdig.sysdig-vscode-ext/default.nix b/pkgs/applications/editors/vscode/extensions/sysdig.sysdig-vscode-ext/default.nix
index a9d4c460e5c9..f1a77d0952be 100644
--- a/pkgs/applications/editors/vscode/extensions/sysdig.sysdig-vscode-ext/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/sysdig.sysdig-vscode-ext/default.nix
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "sysdig-vscode-ext";
publisher = "sysdig";
- version = "0.2.14";
- hash = "sha256-b4e5Qgk8YfI1nAB8yrM5k0svgebgZSucXRktkK0EItk=";
+ version = "0.2.17";
+ hash = "sha256-8qYDp6IcUvlFdCPmMozHVocsgGqK8b2+tve1wBO3bhU=";
};
meta = {
diff --git a/pkgs/applications/editors/vscode/extensions/tekumara.typos-vscode/default.nix b/pkgs/applications/editors/vscode/extensions/tekumara.typos-vscode/default.nix
index 6d5b83c7e2d6..f7aafb38d63a 100644
--- a/pkgs/applications/editors/vscode/extensions/tekumara.typos-vscode/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/tekumara.typos-vscode/default.nix
@@ -20,10 +20,6 @@ let
arch = "linux-arm64";
hash = "sha256-Z3cRojI4mCCS2t3aLojgImULQOobq5liDwoeHuzKEhY=";
};
- x86_64-darwin = {
- arch = "darwin-x64";
- hash = "sha256-Th0cseTJk+CD3BO/99t0VMD7zcF6nxAfmHFhfN8j5sw=";
- };
aarch64-darwin = {
arch = "darwin-arm64";
hash = "sha256-rHgMl71YCs9ea0nFnx+E2U8isL4zQzIvvE9tgxM7IiA=";
@@ -66,7 +62,6 @@ vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
"aarch64-linux"
"aarch64-darwin"
"x86_64-linux"
- "x86_64-darwin"
];
maintainers = [ ];
};
diff --git a/pkgs/applications/editors/vscode/extensions/timonwong.shellcheck/default.nix b/pkgs/applications/editors/vscode/extensions/timonwong.shellcheck/default.nix
index db9db86a0813..b7289bf725e2 100644
--- a/pkgs/applications/editors/vscode/extensions/timonwong.shellcheck/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/timonwong.shellcheck/default.nix
@@ -10,8 +10,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "shellcheck";
publisher = "timonwong";
- version = "0.39.3";
- sha256 = "sha256-A87dG+bBNCMZ8ERDGpVJIP7lXL8rfRely2Uo/ZMsgVI=";
+ version = "0.39.5";
+ sha256 = "sha256-8f9LGmNE8ilPYZmbJpmmAx9DkKJXbQzAia11rM3wTec=";
};
nativeBuildInputs = [
jq
diff --git a/pkgs/applications/editors/vscode/extensions/tombi-toml.tombi/default.nix b/pkgs/applications/editors/vscode/extensions/tombi-toml.tombi/default.nix
index 795b167a667a..c29133655ef5 100644
--- a/pkgs/applications/editors/vscode/extensions/tombi-toml.tombi/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/tombi-toml.tombi/default.nix
@@ -7,19 +7,15 @@
let
supported = {
x86_64-linux = {
- hash = "sha256-7uZZuEijg1Aca1h2NrBwFU9iFnfhG17waXxqVlAKzTA=";
+ hash = "sha256-DWrKvjWpUYvyqgZCShqwBKw33MHW31cxb4ERV65O+uc=";
arch = "linux-x64";
};
- x86_64-darwin = {
- hash = "sha256-NPh3Sxf2k/Nj4vt0SGsa5H6QOI1IBaL20g79Pl4/iPg=";
- arch = "darwin-x64";
- };
aarch64-linux = {
- hash = "sha256-tszcouaPUGTH1MpGJfU0RiLvBN7qIhH1vC3XiAmHFK8=";
+ hash = "sha256-iFHeZiTubXA/t2Gib9hP42d7yjq/WRyywp+l8VhGfmo=";
arch = "linux-arm64";
};
aarch64-darwin = {
- hash = "sha256-JV9pZqq48q00GM0cg3Wu00qrrkn2fczbHBVqnCM84lI=";
+ hash = "sha256-qe7K3PQIgZztIdOVx37LGXrzBmYui2o2CcmDK+5jaFM=";
arch = "darwin-arm64";
};
};
@@ -34,7 +30,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = base // {
name = "tombi";
publisher = "tombi-toml";
- version = "1.1.2";
+ version = "1.1.7";
};
meta = {
description = "TOML Language Server";
diff --git a/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/default.nix b/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/default.nix
index b17bc1d76708..7523d64c9ea6 100644
--- a/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/vadimcn.vscode-lldb/default.nix
@@ -16,7 +16,7 @@ assert lib.versionAtLeast python3.version "3.5";
let
publisher = "vadimcn";
pname = "vscode-lldb";
- version = "1.12.1";
+ version = "1.12.2";
vscodeExtUniqueId = "${publisher}.${pname}";
vscodeExtPublisher = publisher;
@@ -26,7 +26,7 @@ let
owner = "vadimcn";
repo = "codelldb";
rev = "v${version}";
- hash = "sha256-B8iCy4NXG7IzJVncbYm5VoAMfhMfxGF+HW7M5sVn5b0=";
+ hash = "sha256-7//+y02rfDloeNADpoM8tist7fPstBZ2Eqt4dM5dCaE=";
};
lldb = llvmPackages_19.lldb;
@@ -180,8 +180,8 @@ stdenv.mkDerivation {
meta = {
description = "Native debugger extension for VSCode based on LLDB";
homepage = "https://github.com/vadimcn/vscode-lldb";
- license = [ lib.licenses.mit ];
- maintainers = [ lib.maintainers.r4v3n6101 ];
+ license = lib.licenses.mit;
+ maintainers = [ ];
platforms = lib.platforms.all;
};
}
diff --git a/pkgs/applications/editors/vscode/extensions/visualjj.visualjj/default.nix b/pkgs/applications/editors/vscode/extensions/visualjj.visualjj/default.nix
index 00aaa8b46c06..f07054e2fd07 100644
--- a/pkgs/applications/editors/vscode/extensions/visualjj.visualjj/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/visualjj.visualjj/default.nix
@@ -13,26 +13,22 @@ vscode-utils.buildVscodeMarketplaceExtension {
sources = {
"x86_64-linux" = {
arch = "linux-x64";
- hash = "sha256-VZKvoTJ/IKxYsEJl0XhtglsggmrYdaRUlXCpDv/9fQ0=";
- };
- "x86_64-darwin" = {
- arch = "darwin-x64";
- hash = "sha256-jo+fET/IyOl2zI/xxYy3KwnyOegTOXFhO1hDg5QtWrQ=";
+ hash = "sha256-htZGjy7ZnQLGZUncokGaGHyLpvPM5jzWUvCdnfN1vbM=";
};
"aarch64-linux" = {
arch = "linux-arm64";
- hash = "sha256-HOSKZjozJlWn++P5bSwWdK3I+fgsPtS8kyvDWHMJQAY=";
+ hash = "sha256-rgeNJbl6G2yKAWYW7NarQwVLmd3oZ4YTOVeCUat6ZqQ=";
};
"aarch64-darwin" = {
arch = "darwin-arm64";
- hash = "sha256-ABBYsSR3HQgSnnXUJXsg1DwqwFj9W6CT59/1fuqWsTc=";
+ hash = "sha256-YBapB9XZ1/fUOflFDxZGT9rnPTumHQR/PfmyISHAAkY=";
};
};
in
{
name = "visualjj";
publisher = "visualjj";
- version = "0.29.0";
+ version = "0.30.0";
}
// sources.${stdenvNoCC.hostPlatform.system}
or (throw "Unsupported system ${stdenvNoCC.hostPlatform.system}");
@@ -48,14 +44,14 @@ vscode-utils.buildVscodeMarketplaceExtension {
meta = {
description = "Jujutsu version control integration, for simpler Git workflow";
- downloadPage = "https://www.visualjj.com";
homepage = "https://www.visualjj.com";
+ downloadPage = "https://marketplace.visualstudio.com/items?itemName=visualjj.visualjj";
+ changelog = "https://marketplace.visualstudio.com/items/visualjj.visualjj/changelog";
license = lib.licenses.unfree;
platforms = [
"aarch64-linux"
"aarch64-darwin"
"x86_64-linux"
- "x86_64-darwin"
];
maintainers = with lib.maintainers; [ sandarukasa ];
};
diff --git a/pkgs/applications/editors/vscode/extensions/vscode-utils.nix b/pkgs/applications/editors/vscode/extensions/vscode-utils.nix
index 6bfcf8380051..67cc36a9e06b 100644
--- a/pkgs/applications/editors/vscode/extensions/vscode-utils.nix
+++ b/pkgs/applications/editors/vscode/extensions/vscode-utils.nix
@@ -73,6 +73,9 @@ let
# This cannot be removed, it is used by some extensions.
installPrefix = "share/vscode/extensions/${vscodeExtUniqueId}";
+ strictDeps = true;
+ __structuredAttrs = true;
+
nativeBuildInputs = [ unpackVsixSetupHook ] ++ nativeBuildInputs;
installPhase =
diff --git a/pkgs/applications/editors/vscode/extensions/yoshi47.selection-path-copier/default.nix b/pkgs/applications/editors/vscode/extensions/yoshi47.selection-path-copier/default.nix
index a309d6d7ddc9..8933fcac2d30 100644
--- a/pkgs/applications/editors/vscode/extensions/yoshi47.selection-path-copier/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/yoshi47.selection-path-copier/default.nix
@@ -8,8 +8,8 @@ vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
mktplcRef = {
publisher = "yoshi47";
name = "selection-path-copier";
- version = "1.5.0";
- hash = "sha256-ip8dsU8B2vghINPSftvfC5OtM0bjIP0V3JAMt5skmdg=";
+ version = "1.6.0";
+ hash = "sha256-KnV9WariqK3GMjoQARtamxriBkL0Pi9y7+fhfwObCWE=";
};
meta = {
description = "Copy file paths with line numbers, code snippets, and GitHub permalinks in multiple formats";
diff --git a/pkgs/applications/editors/vscode/extensions/yy0931.vscode-sqlite3-editor/default.nix b/pkgs/applications/editors/vscode/extensions/yy0931.vscode-sqlite3-editor/default.nix
index 8fd8e3c5f538..c01f05fc1f05 100644
--- a/pkgs/applications/editors/vscode/extensions/yy0931.vscode-sqlite3-editor/default.nix
+++ b/pkgs/applications/editors/vscode/extensions/yy0931.vscode-sqlite3-editor/default.nix
@@ -6,8 +6,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "vscode-sqlite3-editor";
publisher = "yy0931";
- version = "1.0.212";
- hash = "sha256-mG75eEK7agZ8R4LNN5xM7GqaBQC5JKhUR0/ZogZTHpY=";
+ version = "1.0.214";
+ hash = "sha256-lxH+j83R2ZYCWrEB0c70DRSCMn5iH1Xz/vXLZBE42Eg=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/yy0931.vscode-sqlite3-editor/changelog";
diff --git a/pkgs/applications/editors/vscode/generic.nix b/pkgs/applications/editors/vscode/generic.nix
index 93329c9c52de..78c0cb0b3d73 100644
--- a/pkgs/applications/editors/vscode/generic.nix
+++ b/pkgs/applications/editors/vscode/generic.nix
@@ -38,6 +38,10 @@
webkitgtk_4_1,
ripgrep,
which,
+ libxtst,
+ libjpeg8,
+ pipewire,
+ libei,
# needed to fix "Save as Root"
asar,
@@ -149,6 +153,7 @@ stdenv.mkDerivation (
extraBwrapArgs = [
"--bind-try /etc/nixos/ /etc/nixos/"
"--ro-bind-try /etc/xdg/ /etc/xdg/"
+ "--ro-bind-try /etc/vscode/policy.json /etc/vscode/policy.json"
];
# symlink shared assets, including icons and desktop entries
@@ -176,7 +181,6 @@ stdenv.mkDerivation (
buildFHSEnv customizedArgs;
in
{
-
inherit
pname
version
@@ -194,8 +198,16 @@ stdenv.mkDerivation (
updateScript
vscodeVersion
;
- fhs = fhs { };
- fhsWithPackages = f: fhs { additionalPkgs = f; };
+ fhs = (fhs { }).overrideAttrs (old: {
+ strictDeps = true;
+ __structuredAttrs = true;
+ });
+ fhsWithPackages =
+ f:
+ (fhs { additionalPkgs = f; }).overrideAttrs (old: {
+ strictDeps = true;
+ __structuredAttrs = true;
+ });
}
// lib.optionalAttrs (vscodeServer != null) {
inherit rev vscodeServer;
@@ -244,6 +256,9 @@ stdenv.mkDerivation (
})
];
+ strictDeps = true;
+ __structuredAttrs = true;
+
buildInputs = [
libsecret
]
@@ -256,6 +271,10 @@ stdenv.mkDerivation (
systemdLibs
webkitgtk_4_1
libxkbfile
+ libxtst
+ libjpeg8.out
+ pipewire
+ libei
];
runtimeDependencies = lib.optionals stdenv.hostPlatform.isLinux [
@@ -296,11 +315,6 @@ stdenv.mkDerivation (
dontConfigure = true;
noDumpEnvVars = true;
- stripExclude = lib.optional hasVsceSign [
- # vsce-sign is a single executable application built with Node.js, and it becomes non-functional if stripped
- "lib/vscode/resources/app/node_modules/@vscode/vsce-sign/bin/vsce-sign"
- ];
-
installPhase = ''
runHook preInstall
''
@@ -376,7 +390,7 @@ stdenv.mkDerivation (
)
}
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true --wayland-text-input-version=3}}"
- --add-flags ${lib.escapeShellArg commandLineArgs}
+ --append-flags ${lib.escapeShellArg commandLineArgs}
)
'';
@@ -412,7 +426,11 @@ stdenv.mkDerivation (
let
nodeModulesPath =
if stdenv.hostPlatform.isDarwin then
- if lib.versionAtLeast vscodeVersion "1.94.0" then
+ # 1.129 moved node_modules back into app.asar, shipping native
+ # binaries in the asar.unpacked directory like before 1.94
+ if lib.versionAtLeast vscodeVersion "1.129.0" then
+ "Contents/Resources/app/node_modules.asar.unpacked"
+ else if lib.versionAtLeast vscodeVersion "1.94.0" then
"Contents/Resources/app/node_modules"
else
"Contents/Resources/app/node_modules.asar.unpacked"
@@ -422,11 +440,11 @@ stdenv.mkDerivation (
# see https://www.npmjs.com/package/@vscode/ripgrep-universal?activeTab=code
ripgrepSystem =
{
- x86_64-darwin = "darwin-x64";
aarch64-darwin = "darwin-arm64";
armv7l-linux = "linux-arm";
aarch64-linux = "linux-arm64";
i686-linux = "linux-ia32";
+ loongarch64-linux = "linux-loong64";
powerpc64-linux = "linux-ppc64";
riscv64-linux = "linux-riscv64";
s390x-linux = "linux-s390x";
@@ -462,10 +480,13 @@ stdenv.mkDerivation (
--add-needed ${libglvnd}/lib/libEGL.so.1 \
$out/lib/${libraryName}/${executableName}
''
+ # restore original vsce-sign, which has integrity checks
+ (lib.optionalString hasVsceSign ''
+ cp -r ./resources/app/node_modules/@vscode/vsce-sign/bin/vsce-sign "$out/lib/vscode/resources/app/node_modules/@vscode/vsce-sign/bin/vsce-sign"
patchelf \
- --add-needed ${lib.getLib openssl}/lib/libssl.so \
+ --add-needed ${lib.getLib openssl}/lib/libssl.so.3 \
$out/lib/vscode/resources/app/node_modules/@vscode/vsce-sign/bin/vsce-sign
+ chmod +x $out/lib/vscode/resources/app/node_modules/@vscode/vsce-sign/bin/vsce-sign
'')
);
diff --git a/pkgs/applications/editors/vscode/update-vscodium.sh b/pkgs/applications/editors/vscode/update-vscodium.sh
index 6420ff0ee1f2..49a92b9fb35a 100755
--- a/pkgs/applications/editors/vscode/update-vscodium.sh
+++ b/pkgs/applications/editors/vscode/update-vscodium.sh
@@ -19,10 +19,8 @@ fi
for i in \
"x86_64-linux linux-x64 tar.gz" \
"aarch64-linux linux-arm64 tar.gz" \
- "armv7l-linux linux-armhf tar.gz" \
"loongarch64-linux linux-loong64 tar.gz" \
- "aarch64-darwin darwin-arm64 zip" \
- "x86_64-darwin darwin-x64 zip"; do
+ "aarch64-darwin darwin-arm64 zip"; do
set -- $i
hash=$(nix --extra-experimental-features nix-command hash convert --hash-algo sha256 --to sri $(nix-prefetch-url "https://github.com/VSCodium/vscodium/releases/download/$latestVersion/VSCodium-$2-$latestVersion.$3"))
update-source-version vscodium $latestVersion $hash --system=$1 --ignore-same-version
diff --git a/pkgs/applications/editors/vscode/vscode.nix b/pkgs/applications/editors/vscode/vscode.nix
index 46879543ae20..d81cbab69d97 100644
--- a/pkgs/applications/editors/vscode/vscode.nix
+++ b/pkgs/applications/editors/vscode/vscode.nix
@@ -24,7 +24,6 @@ let
plat =
{
x86_64-linux = "linux-x64";
- x86_64-darwin = "darwin";
aarch64-linux = "linux-arm64";
aarch64-darwin = "darwin-arm64";
armv7l-linux = "linux-armhf";
@@ -35,17 +34,16 @@ let
hash =
{
- x86_64-linux = "sha256-L975R3F779LgaFTL4B6ZtImPd1LyXhImnDgCPmO5PI8=";
- x86_64-darwin = "sha256-Sygw/VkIiyV+iABylgFpTiHs0f5dS6NYPWSm5BNh9tQ=";
- aarch64-linux = "sha256-jcFC668WKAjlYju33RI6poAKnhm3fL1hO16alUwjwv4=";
- aarch64-darwin = "sha256-AY6WeDzGEH5zXRosN1H/osxC3e5j0Hs9s2Ys2xe1UxI=";
- armv7l-linux = "sha256-LqofnnZid/I0lVTyhC7yHD+Fxz4dSBxKJ8n+lp2uucQ=";
+ x86_64-linux = "sha256-cieB7O7HQ2oJVFT4OfmaToXHh6pFPpBk7dltKZ8CSVM=";
+ aarch64-linux = "sha256-G5F497a4aL79ijDC3P1mP58w1aA+LmxpSljnU30zbOI=";
+ aarch64-darwin = "sha256-zBuCRa+EqMafAZahkJP1IajO1ceIIbOfDn5Qwl0Hw90=";
+ armv7l-linux = "sha256-O39xDcl34Qiafmi7OQn0AYBvqC4Yn7IyOLR/vsI2uHs=";
}
.${system} or throwSystem;
# Please backport all compatible updates to the stable release.
# This is important for the extension ecosystem.
- version = "1.123.0";
+ version = "1.129.1";
# The update server (update.code.visualstudio.com) expects the version path
# segment in X.Y.Z form, so we normalize X.Y to X.Y.0 (e.g. "1.110" → "1.110.0").
@@ -53,7 +51,7 @@ let
downloadVersion = lib.versions.pad 3 version;
# This is used for VS Code - Remote SSH test
- rev = "6a44c352bd24569c417e530095901b649960f9f8";
+ rev = "8a7abeba6e03ea3af87bfbce9a1b7e48fed567b8";
in
buildVscode {
pname = "vscode" + lib.optionalString isInsiders "-insiders";
@@ -86,7 +84,7 @@ buildVscode {
src = fetchurl {
name = "vscode-server-${rev}.tar.gz";
url = "https://update.code.visualstudio.com/commit:${rev}/server-linux-x64/stable";
- hash = "sha256-i034bIsaPlxlVFNY5cKf/ftWPy17SFokbFUMa+zeLng=";
+ hash = "sha256-LVd4zd90R8sM96tWe9gJacO2KFMQkruoZEO8kI3tzzg=";
};
stdenv = stdenvNoCC;
};
@@ -128,7 +126,6 @@ buildVscode {
];
platforms = [
"x86_64-linux"
- "x86_64-darwin"
"aarch64-darwin"
"aarch64-linux"
"armv7l-linux"
diff --git a/pkgs/applications/editors/vscode/vscodium.nix b/pkgs/applications/editors/vscode/vscodium.nix
index af9fa5cc4eba..5a5ee6d5d342 100644
--- a/pkgs/applications/editors/vscode/vscodium.nix
+++ b/pkgs/applications/editors/vscode/vscodium.nix
@@ -15,10 +15,8 @@ let
plat =
{
x86_64-linux = "linux-x64";
- x86_64-darwin = "darwin-x64";
aarch64-linux = "linux-arm64";
aarch64-darwin = "darwin-arm64";
- armv7l-linux = "linux-armhf";
loongarch64-linux = "linux-loong64";
}
.${system} or throwSystem;
@@ -27,12 +25,10 @@ let
hash =
{
- x86_64-linux = "sha256-LJsGc11MH6zlcJNfSWjTWPn2Jp9dkjeBPQuCXH1woUM=";
- x86_64-darwin = "sha256-bC7AfH2eKmmsWIOHifNGKD/kVQCYyuMfU3SUil0DXkM=";
- aarch64-linux = "sha256-mT5dvw8GOZ0GnZaKRS/TAzQDEEYDOgcj6w6lNLy5kQ0=";
- aarch64-darwin = "sha256-c8K17XKpRG1ji2mUfoyg2+cRF+qc1KVMYVkaQoUIz7Y=";
- armv7l-linux = "sha256-91ZHhEUDVoDiRBLwMHVLhzKmb9gWcPBUsVRZVLhCA4M=";
- loongarch64-linux = "sha256-7iUdsIyJkIi40Xn+/PWdCVgahQxbZtiMw0QLMisN+sg=";
+ x86_64-linux = "sha256-rfNUjfBV0Y5HbN7oh0iLp0hrh5rZmjGlRsa1xf8pbCQ=";
+ aarch64-linux = "sha256-c9h9RtTcII/hLASX3GB6qwpuK/My9UoLaCajoaoyvDQ=";
+ aarch64-darwin = "sha256-8h7lJinrXjnAVdrqcBGLemBVxjmuzz2tBeGZeprYOsA=";
+ loongarch64-linux = "sha256-p8hwOg5BbVvJGeQoBrgtd4gHsYmwEhsF/I+bk8gzIo4=";
}
.${system} or throwSystem;
@@ -43,8 +39,8 @@ buildVscode rec {
# Please backport all compatible updates to the stable release.
# This is important for the extension ecosystem.
- version = "1.121.03429";
- vscodeVersion = "1.121.0";
+ version = "1.126.04524";
+ vscodeVersion = "1.126.0";
pname = "vscodium";
executableName = "codium";
@@ -88,10 +84,8 @@ buildVscode rec {
mainProgram = "codium";
platforms = [
"x86_64-linux"
- "x86_64-darwin"
"aarch64-linux"
"aarch64-darwin"
- "armv7l-linux"
"loongarch64-linux"
];
# requires libc.so.6 and other glibc specifics
diff --git a/pkgs/applications/editors/vscode/with-extensions.nix b/pkgs/applications/editors/vscode/with-extensions.nix
index c942f64b43e2..e64f0beea2df 100644
--- a/pkgs/applications/editors/vscode/with-extensions.nix
+++ b/pkgs/applications/editors/vscode/with-extensions.nix
@@ -92,12 +92,14 @@ runCommand "${wrappedPkgName}-with-extensions-${wrappedPkgVersion}"
mkdir -p $out/bin/
mkdir -p "$out/Applications/${longName}.app/Contents/MacOS"
+ binary_name="$(awk -F'[<>]' '/CFBundleExecutable/{getline; print $3}' '${vscode}/Applications/${longName}.app/Contents/Info.plist')"
+
for path in PkgInfo Frameworks Resources _CodeSignature Info.plist; do
ln -s "${vscode}/Applications/${longName}.app/Contents/$path" "$out/Applications/${longName}.app/Contents/"
done
makeWrapper "${vscode}/bin/${executableName}" "$out/bin/${executableName}" ${extensionsFlag}
- makeWrapper "${vscode}/Applications/${longName}.app/Contents/MacOS/Electron" "$out/Applications/${longName}.app/Contents/MacOS/Electron" ${extensionsFlag}
+ makeWrapper "${vscode}/Applications/${longName}.app/Contents/MacOS/$binary_name" "$out/Applications/${longName}.app/Contents/MacOS/$binary_name" ${extensionsFlag}
''
else
''
diff --git a/pkgs/applications/emulators/libretro/cores/atari800.nix b/pkgs/applications/emulators/libretro/cores/atari800.nix
index c0ff28fe23af..9068c73de8c0 100644
--- a/pkgs/applications/emulators/libretro/cores/atari800.nix
+++ b/pkgs/applications/emulators/libretro/cores/atari800.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore rec {
core = "atari800";
- version = "0-unstable-2026-05-28";
+ version = "0-unstable-2026-07-15";
src = fetchFromGitHub {
owner = "libretro";
repo = "libretro-atari800";
- rev = "b6638e72b9d7770144837b0b63c637dd7ab2b39c";
- hash = "sha256-G1RJXhgMq8txotriK0Xy8HdDDCzeDbEQ+3LQ5sUt8G0=";
+ rev = "9d3bcf283502512052e21c6f1453fbdf7aa3122b";
+ hash = "sha256-uLMQWi+Z21irwkFBArlHNXILintSWF7PfGy5bgKmAhQ=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/beetle-ngp.nix b/pkgs/applications/emulators/libretro/cores/beetle-ngp.nix
index b90d833ab114..1e8018a58817 100644
--- a/pkgs/applications/emulators/libretro/cores/beetle-ngp.nix
+++ b/pkgs/applications/emulators/libretro/cores/beetle-ngp.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "mednafen-ngp";
- version = "0-unstable-2026-04-20";
+ version = "0-unstable-2026-06-14";
src = fetchFromGitHub {
owner = "libretro";
repo = "beetle-ngp-libretro";
- rev = "0c81ce8991a47aac5d0a7d1ae53de75bc7ddf847";
- hash = "sha256-+HGzNSkM0bs8DoBCZ3FqxoqjBSwnKvK7K38341vUYco=";
+ rev = "a50d5ac288a81f2104ddf43195a4efdd15c72227";
+ hash = "sha256-Zh+8JLkTcrLxjueQvaIhdOxHpl6Uf5ZRQ/cMNPHLVhk=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/beetle-pce-fast.nix b/pkgs/applications/emulators/libretro/cores/beetle-pce-fast.nix
index bdc76f293079..8a89ec55c87b 100644
--- a/pkgs/applications/emulators/libretro/cores/beetle-pce-fast.nix
+++ b/pkgs/applications/emulators/libretro/cores/beetle-pce-fast.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "mednafen-pce-fast";
- version = "0-unstable-2026-05-22";
+ version = "0-unstable-2026-07-10";
src = fetchFromGitHub {
owner = "libretro";
repo = "beetle-pce-fast-libretro";
- rev = "b4de121a733a57ce825a7fd7543206ca96af8a18";
- hash = "sha256-0V6w9F2T2ROkPvH6K5mKltblogn9mAtvb/JGrWMk4CQ=";
+ rev = "0bc6c86928343ca4202c5b6ef33fa4387c47fc12";
+ hash = "sha256-TgUueogxf5KZ1S5pt0WiYtoHXWQI81C6QUts1xJClh8=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/beetle-psx.nix b/pkgs/applications/emulators/libretro/cores/beetle-psx.nix
index eb613fa069dc..e4474bfe8d6b 100644
--- a/pkgs/applications/emulators/libretro/cores/beetle-psx.nix
+++ b/pkgs/applications/emulators/libretro/cores/beetle-psx.nix
@@ -8,13 +8,13 @@
}:
mkLibretroCore {
core = "mednafen-psx" + lib.optionalString withHw "-hw";
- version = "0-unstable-2026-06-02";
+ version = "0-unstable-2026-07-18";
src = fetchFromGitHub {
owner = "libretro";
repo = "beetle-psx-libretro";
- rev = "ee042b73f8fe2aa9c8c73408b5bf200a3ce1a67b";
- hash = "sha256-k1DvQHGQH/d6W7jTIAW9jIk0qVHUji3PeYAa8MuUP9w=";
+ rev = "c27ab27c05569575e04b25e03e87fe3220fde599";
+ hash = "sha256-dXYnTkDEzAve7bBclOahKHFB2ef2u7vbNeGWLIfkLGc=";
};
extraBuildInputs = lib.optionals withHw [
diff --git a/pkgs/applications/emulators/libretro/cores/beetle-saturn.nix b/pkgs/applications/emulators/libretro/cores/beetle-saturn.nix
index dc0edc71f8f3..3772f959ad2a 100644
--- a/pkgs/applications/emulators/libretro/cores/beetle-saturn.nix
+++ b/pkgs/applications/emulators/libretro/cores/beetle-saturn.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "mednafen-saturn";
- version = "0-unstable-2026-05-28";
+ version = "0-unstable-2026-07-07";
src = fetchFromGitHub {
owner = "libretro";
repo = "beetle-saturn-libretro";
- rev = "8f0d69a4938edd84ef5b308b6013ed4b17b5b7dd";
- hash = "sha256-hDiUcmkAyFbuMdK3LCshC2vMMU4TbJQAyqzkye/Sb5U=";
+ rev = "6f0cb9d1b9689601cd7dbf08e992d232304f50f7";
+ hash = "sha256-Q50CQDLO090csrF73fo2qxzIaV7o3E8YS9MdQZBp/V8=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/beetle-vb.nix b/pkgs/applications/emulators/libretro/cores/beetle-vb.nix
index 619d07ba98b3..2368ed316d72 100644
--- a/pkgs/applications/emulators/libretro/cores/beetle-vb.nix
+++ b/pkgs/applications/emulators/libretro/cores/beetle-vb.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "mednafen-vb";
- version = "0-unstable-2026-04-20";
+ version = "0-unstable-2026-06-14";
src = fetchFromGitHub {
owner = "libretro";
repo = "beetle-vb-libretro";
- rev = "1275bd7bddf2166be5a10e45c26c5c2a61370658";
- hash = "sha256-3JTcAITogWP9yQ4sLZl8YlUHzu9LvWor9liQRIwf2b8=";
+ rev = "38e7a0ec9ac7079ca1c1e3dd9aaf5b56f527efca";
+ hash = "sha256-+57qsfH2wygKdD66yauzKD9XDf01q4LeiWdIeYbVUmc=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/bluemsx.nix b/pkgs/applications/emulators/libretro/cores/bluemsx.nix
index 4d28a074a0b2..aa880fa348a9 100644
--- a/pkgs/applications/emulators/libretro/cores/bluemsx.nix
+++ b/pkgs/applications/emulators/libretro/cores/bluemsx.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "bluemsx";
- version = "0-unstable-2026-05-20";
+ version = "0-unstable-2026-07-19";
src = fetchFromGitHub {
owner = "libretro";
repo = "bluemsx-libretro";
- rev = "b76f27959a32e18aa04c619273152178fd0cf03b";
- hash = "sha256-0FUfeA8IY3VyzhbZqiWYJ7Ttp4CT7kernhgwji6wALQ=";
+ rev = "2f31e9ca38785ad4c2bd9e1d91829eda14a92954";
+ hash = "sha256-J1LbOsUR+9HX/LRtkG9XQIiRdhfyHUYvqXYBKWdGxBI=";
};
meta = {
diff --git a/pkgs/applications/emulators/libretro/cores/bsnes.nix b/pkgs/applications/emulators/libretro/cores/bsnes.nix
index 049d841d0541..59cf62693d39 100644
--- a/pkgs/applications/emulators/libretro/cores/bsnes.nix
+++ b/pkgs/applications/emulators/libretro/cores/bsnes.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "bsnes";
- version = "0-unstable-2026-04-20";
+ version = "0-unstable-2026-07-19";
src = fetchFromGitHub {
owner = "libretro";
repo = "bsnes-libretro";
- rev = "d62d219ac22f1ed179738d107d8a4da2c4289845";
- hash = "sha256-XYCzXAFkSFNMlRjzH4zR3lpRguOqvAJM4TBcL9Feog8=";
+ rev = "9c1285dda7dd6bb9a9951d37bcee8794ada640e6";
+ hash = "sha256-hu4Odi+6A8OrpsNbWZI5JrBkFI1brsqp08fyOySFyr8=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/dolphin.nix b/pkgs/applications/emulators/libretro/cores/dolphin.nix
index 9ff08b1ff89f..3b96117dcb04 100644
--- a/pkgs/applications/emulators/libretro/cores/dolphin.nix
+++ b/pkgs/applications/emulators/libretro/cores/dolphin.nix
@@ -20,13 +20,13 @@
}:
mkLibretroCore {
core = "dolphin";
- version = "0-unstable-2026-04-08";
+ version = "0-unstable-2026-07-12";
src = fetchFromGitHub {
owner = "libretro";
repo = "dolphin";
- rev = "0cd3bb89c29535db9b7552fc86871867ccf5b471";
- hash = "sha256-cSiJO/EvspNvHopo/RLfuz8ONpbXk2NrrSDhkiAm7/s=";
+ rev = "0b766a68cc835775b3216500bb9af2f5d4602b12";
+ hash = "sha256-JaUiDc4/vEWjEXe6H9+i6pft2DTsl5my5wyFmtbjdR0=";
fetchSubmodules = true;
};
diff --git a/pkgs/applications/emulators/libretro/cores/dosbox-pure.nix b/pkgs/applications/emulators/libretro/cores/dosbox-pure.nix
index 3ba3297685f4..fe101fa4f1f3 100644
--- a/pkgs/applications/emulators/libretro/cores/dosbox-pure.nix
+++ b/pkgs/applications/emulators/libretro/cores/dosbox-pure.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "dosbox-pure";
- version = "0-unstable-2026-06-06";
+ version = "0-unstable-2026-07-15";
src = fetchFromGitHub {
owner = "schellingb";
repo = "dosbox-pure";
- rev = "b2825c2f0a705f93d3c4d1b4369c8728d76f2e07";
- hash = "sha256-S470+U7rP7EXapPSwliUh8MwIKvKm+mgc7BuQkN572k=";
+ rev = "a4a0bab7f8931433588f2fcad9045c85b277373d";
+ hash = "sha256-sniDrr5kSU/OnoE08WXNmTTstfI6cHyq4I7xjtrM+7c=";
};
hardeningDisable = [ "format" ];
diff --git a/pkgs/applications/emulators/libretro/cores/fbneo.nix b/pkgs/applications/emulators/libretro/cores/fbneo.nix
index 0002e31fe4af..1034b6054b68 100644
--- a/pkgs/applications/emulators/libretro/cores/fbneo.nix
+++ b/pkgs/applications/emulators/libretro/cores/fbneo.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "fbneo";
- version = "0-unstable-2026-06-04";
+ version = "0-unstable-2026-07-19";
src = fetchFromGitHub {
owner = "libretro";
repo = "fbneo";
- rev = "298f913aeb781908c7f6a568a2ede3940a98738d";
- hash = "sha256-UP0jNsqXMzrO+EQY8Gbkl2lIizfsAKoKiGaXGp7Nok8=";
+ rev = "63796c5d2d40010b5a495c748b74f5f8cd7d8b4d";
+ hash = "sha256-Mv7NSw28O41iPEfaE5d7tAZPgUA7XmRFUODfatgTEiI=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/fceumm.nix b/pkgs/applications/emulators/libretro/cores/fceumm.nix
index 3abd97a160f1..1ba899595e21 100644
--- a/pkgs/applications/emulators/libretro/cores/fceumm.nix
+++ b/pkgs/applications/emulators/libretro/cores/fceumm.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "fceumm";
- version = "0-unstable-2026-05-06";
+ version = "0-unstable-2026-07-06";
src = fetchFromGitHub {
owner = "libretro";
repo = "libretro-fceumm";
- rev = "3a84a6fd0ba20dd4877c06b1d58741172148395f";
- hash = "sha256-4+kEoN0+SWl284n7tIR76aysf0GlLdxELDXfpEK6mi8=";
+ rev = "0d610d9a6401697157f693a5407adf450a0e52fb";
+ hash = "sha256-4QroyuhQrH5FhK86nuUztvrIwG4Ibj2zltPhhdLuJm0=";
};
meta = {
diff --git a/pkgs/applications/emulators/libretro/cores/flycast.nix b/pkgs/applications/emulators/libretro/cores/flycast.nix
index f38a67291e33..d7c4f0b6a0c4 100644
--- a/pkgs/applications/emulators/libretro/cores/flycast.nix
+++ b/pkgs/applications/emulators/libretro/cores/flycast.nix
@@ -8,13 +8,13 @@
}:
mkLibretroCore {
core = "flycast";
- version = "0-unstable-2026-06-05";
+ version = "0-unstable-2026-07-10";
src = fetchFromGitHub {
owner = "flyinghead";
repo = "flycast";
- rev = "751295151eed3cae619b14bcee49bb07f4fdb59c";
- hash = "sha256-PwmJspKYWS7WUAK7XRr2FYiAMnc03xp8qH23EZUC6Hs=";
+ rev = "f09d1f22ef8d199b8b7a2395d0b46774e08a58c2";
+ hash = "sha256-labl5MPpBNkg/M95WzJgiKVdvHJDN6jeFSLsHg5+G78=";
fetchSubmodules = true;
};
diff --git a/pkgs/applications/emulators/libretro/cores/gambatte.nix b/pkgs/applications/emulators/libretro/cores/gambatte.nix
index d72170bb68f0..2229f2efc0fe 100644
--- a/pkgs/applications/emulators/libretro/cores/gambatte.nix
+++ b/pkgs/applications/emulators/libretro/cores/gambatte.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "gambatte";
- version = "0-unstable-2026-06-05";
+ version = "0-unstable-2026-07-17";
src = fetchFromGitHub {
owner = "libretro";
repo = "gambatte-libretro";
- rev = "6716e6ee39c2abd3ea325f66fb26e7f866f4c5dc";
- hash = "sha256-sn8UWO1YR3qLpsR0dwpyy42L+QWrYpwO2lL4NqgUmWM=";
+ rev = "9b3b5e3cc18ec92f460d37dd551eaf90c55bfcea";
+ hash = "sha256-IBQmVcWx839rRV8uLUou4fdwxgZqVbMWyqRVa3Dq0rc=";
};
meta = {
diff --git a/pkgs/applications/emulators/libretro/cores/genesis-plus-gx.nix b/pkgs/applications/emulators/libretro/cores/genesis-plus-gx.nix
index 04d25dced59e..e02fd2ef0eab 100644
--- a/pkgs/applications/emulators/libretro/cores/genesis-plus-gx.nix
+++ b/pkgs/applications/emulators/libretro/cores/genesis-plus-gx.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "genesis-plus-gx";
- version = "0-unstable-2026-06-05";
+ version = "0-unstable-2026-07-10";
src = fetchFromGitHub {
owner = "libretro";
repo = "Genesis-Plus-GX";
- rev = "f2b40ca6c97b2ff7f70d3c00d7ace84200bb31eb";
- hash = "sha256-mvPRDQpRFClcQS26ARf7Mp2eEhf8AbvDG9DdTGHOrlI=";
+ rev = "fa4dca561e08d5be9077419f7b255e1da213ed21";
+ hash = "sha256-FfO5LzCH0hYqiVpE2qPJhX4gOrXqqYCoW4XRbz93La4=";
};
meta = {
diff --git a/pkgs/applications/emulators/libretro/cores/gpsp.nix b/pkgs/applications/emulators/libretro/cores/gpsp.nix
index 927fde20bfbd..e75ac6d7b6a6 100644
--- a/pkgs/applications/emulators/libretro/cores/gpsp.nix
+++ b/pkgs/applications/emulators/libretro/cores/gpsp.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "gpsp";
- version = "0-unstable-2026-05-12";
+ version = "0-unstable-2026-06-29";
src = fetchFromGitHub {
owner = "libretro";
repo = "gpsp";
- rev = "d6decfa351b575e2936afebba26d41ec20e4ddcd";
- hash = "sha256-kqqNyBEaWlj9E4tZz7VK2186Y6DRDtcFBMIH7GpUDx4=";
+ rev = "69e86ebe89f14c3f5f75b809c12c0a953b3d6ce4";
+ hash = "sha256-ppdwcE66igBarGAiupKB8pkRY8y5x/EPobiqJz93plA=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/hatari.nix b/pkgs/applications/emulators/libretro/cores/hatari.nix
index 88480119bb42..1214fe8b1ece 100644
--- a/pkgs/applications/emulators/libretro/cores/hatari.nix
+++ b/pkgs/applications/emulators/libretro/cores/hatari.nix
@@ -6,13 +6,13 @@
}:
mkLibretroCore {
core = "hatari";
- version = "0-unstable-2026-04-20";
+ version = "0-unstable-2026-06-10";
src = fetchFromGitHub {
owner = "libretro";
repo = "hatari";
- rev = "6aa7c7079b3186025ebc6bad4b4251aa359a3947";
- hash = "sha256-17L2EpLGwkWA/9XTgtIq+PNABGvgdBQDsAfAZFRKLOE=";
+ rev = "c605d3aa342f2ad8f915f94bf03bae018e1be7b7";
+ hash = "sha256-UJyfIt5+anXaqqMmL9JNTBvXu5bmyMYloYc8fWxx2m0=";
};
extraNativeBuildInputs = [ which ];
diff --git a/pkgs/applications/emulators/libretro/cores/mame.nix b/pkgs/applications/emulators/libretro/cores/mame.nix
index 7d30ae2ed015..e54c1d6e6f5b 100644
--- a/pkgs/applications/emulators/libretro/cores/mame.nix
+++ b/pkgs/applications/emulators/libretro/cores/mame.nix
@@ -9,13 +9,13 @@
}:
mkLibretroCore {
core = "mame";
- version = "0-unstable-2026-05-31";
+ version = "0-unstable-2026-07-18";
src = fetchFromGitHub {
owner = "libretro";
repo = "mame";
- rev = "2ffec28bcf65eceb395722c9d721e7d4523fbb56";
- hash = "sha256-37SD78rFYgIoI7FDsgHhupYse8QbzwVRrJCXSVjpLCc=";
+ rev = "e2f8a31819e9e510dd06ab11f0d387ca7789776e";
+ hash = "sha256-LzN5rbo8kev8aogIMTQMLXseZBzx2XtDGGEUtABW92M=";
fetchSubmodules = true;
};
diff --git a/pkgs/applications/emulators/libretro/cores/mame2000.nix b/pkgs/applications/emulators/libretro/cores/mame2000.nix
index 28fe0821ebb6..f8a651a68410 100644
--- a/pkgs/applications/emulators/libretro/cores/mame2000.nix
+++ b/pkgs/applications/emulators/libretro/cores/mame2000.nix
@@ -6,13 +6,13 @@
}:
mkLibretroCore {
core = "mame2000";
- version = "0-unstable-2026-05-22";
+ version = "0-unstable-2026-06-15";
src = fetchFromGitHub {
owner = "libretro";
repo = "mame2000-libretro";
- rev = "fd0e767bd6378b35b505a04ada2b32bd98ffe8fb";
- hash = "sha256-gS+fwsJ0/Bel2y2ajI+cSsrKlV5kWlCyOgr/JkJns1o=";
+ rev = "131ae96d72a613451517fa2eca0b598b2b266a94";
+ hash = "sha256-fbOGMebiqckcwPk81YrdSHwti6qrLSxB3qYSY8SEqRs=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/mame2003.nix b/pkgs/applications/emulators/libretro/cores/mame2003.nix
index b9b93ff31f69..101450b99d38 100644
--- a/pkgs/applications/emulators/libretro/cores/mame2003.nix
+++ b/pkgs/applications/emulators/libretro/cores/mame2003.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "mame2003";
- version = "0-unstable-2026-06-05";
+ version = "0-unstable-2026-06-15";
src = fetchFromGitHub {
owner = "libretro";
repo = "mame2003-libretro";
- rev = "299789ce642b34c2679cfd89d7ecf06b09851bc1";
- hash = "sha256-FX+onEaaQUdcjAvgsrdW0m408oCSXJEJHQncrN2Uk/Y=";
+ rev = "8f17f5f4cb432c5d2d2771e5a76f8c4eac2d31a6";
+ hash = "sha256-yXII81KiO+53/S2p9H5/81fyCf1qKauQTVjlfNOwu3s=";
};
# Fix build with GCC 14
diff --git a/pkgs/applications/emulators/libretro/cores/mame2010.nix b/pkgs/applications/emulators/libretro/cores/mame2010.nix
index 658d4e361fc2..99dc2348e644 100644
--- a/pkgs/applications/emulators/libretro/cores/mame2010.nix
+++ b/pkgs/applications/emulators/libretro/cores/mame2010.nix
@@ -6,13 +6,13 @@
}:
mkLibretroCore {
core = "mame2010";
- version = "0-unstable-2026-06-08";
+ version = "0-unstable-2026-07-03";
src = fetchFromGitHub {
owner = "libretro";
repo = "mame2010-libretro";
- rev = "64d2bee2e03d5eb1db77bcb4595099553a1b9a97";
- hash = "sha256-XU2g7bxt2y8gqIMACUXGDbZCWNrg9BWcqBudK699Uhw=";
+ rev = "484456818393505dd4367e6e4c116c573c04a1ec";
+ hash = "sha256-CstMUeTxOsL419R2kzSK6hDd1okxsbtwMvqjwzSf3bI=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/mame2015.nix b/pkgs/applications/emulators/libretro/cores/mame2015.nix
index 6165afd0b93d..a537e03e5633 100644
--- a/pkgs/applications/emulators/libretro/cores/mame2015.nix
+++ b/pkgs/applications/emulators/libretro/cores/mame2015.nix
@@ -22,7 +22,8 @@ mkLibretroCore {
extraBuildInputs = [ alsa-lib ];
makefile = "Makefile";
# Build failures when this is set to a bigger number
- NIX_BUILD_CORES = 8;
+ env.NIX_BUILD_CORES = 8;
+
meta = {
description = "Port of MAME ~2015 to libretro, compatible with MAME 0.160 sets";
homepage = "https://github.com/libretro/mame2015-libretro";
diff --git a/pkgs/applications/emulators/libretro/cores/melonds.nix b/pkgs/applications/emulators/libretro/cores/melonds.nix
index b6846e4d1e89..099248a22c0d 100644
--- a/pkgs/applications/emulators/libretro/cores/melonds.nix
+++ b/pkgs/applications/emulators/libretro/cores/melonds.nix
@@ -7,13 +7,13 @@
}:
mkLibretroCore {
core = "melonds";
- version = "0-unstable-2026-04-20";
+ version = "0-unstable-2026-06-25";
src = fetchFromGitHub {
owner = "libretro";
repo = "melonds";
- rev = "634e51477364edc39aaccd3bebf8bcab5776148c";
- hash = "sha256-/u6CQKpb9eIls0TYpSpWoIf+IQ0CTIx48oq8LscfhFw=";
+ rev = "c9550d18923fe86a5ad9faa159399b55c12b47f1";
+ hash = "sha256-xvBdt/TMxZOrC//DLHRWRMqIibt7dNsfLM/FeMTRA60=";
};
extraBuildInputs = [
diff --git a/pkgs/applications/emulators/libretro/cores/melondsds.nix b/pkgs/applications/emulators/libretro/cores/melondsds.nix
index ea5e45cbcfc7..67a04500c12d 100644
--- a/pkgs/applications/emulators/libretro/cores/melondsds.nix
+++ b/pkgs/applications/emulators/libretro/cores/melondsds.nix
@@ -1,17 +1,27 @@
{
lib,
+ applyPatches,
+ coreutils,
fetchFromGitHub,
- glm,
- libslirp,
fmt_11,
- span-lite,
+ glm,
+ gnugrep,
+ gnused,
howard-hinnant-date,
+ jq,
libGL,
libGLU,
- cmake,
+ libslirp,
mkLibretroCore,
+ nix,
+ nix-prefetch-git,
+ cmake,
+ span-lite,
+ unstableGitUpdater,
+ writeShellApplication,
}:
let
+ # NOTE: before changing the following fetches, see the updateScript below
# https://github.com/JesseTG/melonds-ds/blob/33c48260402865ef77667487528efd5ca7ce1233/cmake/FetchDependencies.cmake#L44
melonDS-src = fetchFromGitHub {
owner = "JesseTG";
@@ -28,8 +38,8 @@ let
embed-binaries-src = fetchFromGitHub {
owner = "andoalon";
repo = "embed-binaries";
- rev = "21f28cabbba02cd657578c70b7aedd0f141467ff";
- hash = "sha256-iW3DBGdp/ykE3EoGcuirq5V5lKV0vemzIjDFrINzQPM=";
+ rev = "078b62beba97e8192c99bfb16d5e17220cfc7598";
+ hash = "sha256-EkK+ZCbrZ2Y9wJ864OIwRWDfHcmxzKMco0QAkLOQOwY=";
};
pntr-src = fetchFromGitHub {
owner = "robloach";
@@ -44,35 +54,33 @@ let
hash = "sha256-J5wAqF5yQ5KYArJJyKzaqscWsXq+KAPKXybYfVgasXs=";
};
# using nixpkgs zlib gives a linking error
- zlib-src = fetchFromGitHub {
- owner = "madler";
- repo = "zlib";
- rev = "570720b0c24f9686c33f35a1b3165c1f568b96be";
- hash = "sha256-5g/Jo8M/jvkgV0NofSAV4JdwJSk5Lyv9iGRb2Kz/CC0=";
+ zlib-src = applyPatches {
+ src = fetchFromGitHub {
+ owner = "madler";
+ repo = "zlib";
+ rev = "925af44f3cde53c6b076611c297850091b5dc7bb";
+ hash = "sha256-TkPLWSN5QcPlL9D0kc/yhH0/puE9bFND24aj5NVDKYs=";
+ };
+ patches = [ ./patches/melondsds-zlib-no-zconf-rename.patch ];
};
in
mkLibretroCore rec {
core = "melondsds";
- version = "1.2.0";
+ version = "0-unstable-2026-03-03";
src = fetchFromGitHub {
owner = "JesseTG";
repo = "melonds-ds";
- rev = "33c48260402865ef77667487528efd5ca7ce1233";
- hash = "sha256-n5MZ6BWUWRi+jz34EbL+SeSkjFZeqQNXE3hS6JzS424=";
+ rev = "bac0256dc6a8736c5a228f57c562257e45fd49f3";
+ hash = "sha256-EeXYibPV9BPazC/i5UqXEd4BKlIZbNbPNgpsoo4ws7k=";
};
- patches = [ ./patches/melondsds-noslirpcopy.patch ];
postPatch = ''
substituteInPlace CMakeLists.txt \
--replace-fail "find_package(Git REQUIRED)" ""
substituteInPlace src/libretro/CMakeLists.txt \
--replace-fail "include(embed-binaries)" "include(${embed-binaries-src}/cmake/embed-binaries.cmake)"
-
- substituteInPlace cmake/FetchDependencies.cmake \
- --replace-fail "set_target_properties(example" "set_target_properties(zlib_example" \
- --replace-fail "set_target_properties(zlib_example64 minigzip64" "set_target_properties(zlib_example64"
'';
makefile = "";
@@ -100,6 +108,79 @@ mkLibretroCore rec {
postBuild = "cd src/libretro";
+ passthru.updateScript = [
+ (lib.getExe (writeShellApplication {
+ name = "update-libretro-melondsds";
+ runtimeInputs = [
+ coreutils
+ gnugrep
+ gnused
+ jq
+ nix
+ nix-prefetch-git
+ ];
+ text = ''
+ ${lib.escapeShellArgs (unstableGitUpdater {
+ hardcodeZeroVersion = true;
+ })}
+
+ src=$(nix-build --no-out-link -A "$UPDATE_NIX_ATTR_PATH.src")
+ core_file="pkgs/applications/emulators/libretro/cores/melondsds.nix"
+
+ # find lines in the format:
+ # fetch_dependency(name url rev)
+ # and extracts name, url and rev
+ grep "^fetch_dependency" "''${src}/cmake/FetchDependencies.cmake" |
+ sed 's/"//g' |
+ sed 's/fetch_dependency(\(.*\))/\1/' |
+ while read -r name url rev
+ do
+ echo >&2
+
+ # example: if there is fetch_dependency(melonDS ...) and no melonDS-src
+ if ! fetch_block=$(grep -A10 "''${name}-src =" "$core_file")
+ then
+
+ # if the dependency comes from nix, we just skip it
+ if grep -q "FETCHCONTENT_SOURCE_DIR_''${name^^}" "$core_file"
+ then
+ echo "> skipped: ''${name} is provided by nixpkgs" >&2
+ continue
+ fi
+
+ # otherwise, its a new dependency not specified on the config, and the updater can't continue
+ echo "> ERROR: dependency missing: ''${name}" >&2
+ exit 1
+ fi
+
+ echo "> ''${name}: ''${url} (''${rev})" >&2
+
+ prefetch=$(nix-prefetch-git --url "''${url}" --rev "''${rev}" --quiet)
+ rev=$(echo "$prefetch" | jq -r ".rev")
+ hash=$(echo "$prefetch" | jq -r ".hash")
+
+ old_rev=$(echo "$fetch_block" | grep -m1 "rev =" | sed 's/\s*rev = "\(.*\)".*/\1/')
+ old_hash=$(echo "$fetch_block" | grep -m1 "hash =" | sed 's/\s*hash = "\(.*\)".*/\1/')
+
+ if [[ "$old_hash" == "$hash" ]]
+ then
+ echo "> skipped: same hash" >&2
+ continue
+ fi
+
+ echo "rev - old: $old_rev" >&2
+ echo "rev - new: $rev" >&2
+ echo "hash - old: $old_hash" >&2
+ echo "hash - new: $hash" >&2
+
+ # finally replace old revision and old hash by the new one
+ sed -i "s|$old_hash|$hash|" "$core_file"
+ sed -i "s/$old_rev/$rev/" "$core_file"
+ done
+ '';
+ }))
+ ];
+
meta = {
description = "A remake of the libretro MelonDS core";
homepage = "https://github.com/JesseTG/melonds-ds";
diff --git a/pkgs/applications/emulators/libretro/cores/np2kai.nix b/pkgs/applications/emulators/libretro/cores/np2kai.nix
index c8ce21d781ed..b5a7edf8d4d5 100644
--- a/pkgs/applications/emulators/libretro/cores/np2kai.nix
+++ b/pkgs/applications/emulators/libretro/cores/np2kai.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore rec {
core = "np2kai";
- version = "0-unstable-2026-05-09";
+ version = "0-unstable-2026-06-19";
src = fetchFromGitHub {
owner = "AZO234";
repo = "NP2kai";
- rev = "eebb95c060f82df45a5615be676c3fa4b7bb7ae0";
- hash = "sha256-KBvxqxCeYyIKCTHdcczwpgHBIZds6xMfHt6LblRRoFc=";
+ rev = "e2dc9046aa5c786fcfbfb87e883457e421026e31";
+ hash = "sha256-35LWLk4U1B1NjXN94QN5nsMMXCmo+VKOVWhzFdZ79oc=";
fetchSubmodules = true;
};
diff --git a/pkgs/applications/emulators/libretro/cores/opera.nix b/pkgs/applications/emulators/libretro/cores/opera.nix
index 35dd849c0993..e1d168a73376 100644
--- a/pkgs/applications/emulators/libretro/cores/opera.nix
+++ b/pkgs/applications/emulators/libretro/cores/opera.nix
@@ -6,13 +6,13 @@
}:
mkLibretroCore {
core = "opera";
- version = "0-unstable-2026-06-09";
+ version = "0-unstable-2026-07-23";
src = fetchFromGitHub {
owner = "libretro";
repo = "opera-libretro";
- rev = "5e36d4a9fbb2afbb8de2313b8e2bf83998ec2341";
- hash = "sha256-TmSk0PIXOLToElUnyRkDFfpq3bvBh7+P8r8brYICJSY=";
+ rev = "74dd2a8c6319678ffce9f31bdf36279db5681762";
+ hash = "sha256-NHXOfKItLkQJ0/jH1gLBpLFqOKBB8qgH5gMw7j1YoLw=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/patches/melondsds-noslirpcopy.patch b/pkgs/applications/emulators/libretro/cores/patches/melondsds-noslirpcopy.patch
deleted file mode 100644
index fb589848d0cd..000000000000
--- a/pkgs/applications/emulators/libretro/cores/patches/melondsds-noslirpcopy.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff --git a/cmake/libslirp.cmake b/cmake/libslirp.cmake
-index 1cb6758..bef1793 100644
---- a/cmake/libslirp.cmake
-+++ b/cmake/libslirp.cmake
-@@ -2,12 +2,6 @@ add_library(slirp STATIC
- src/glib-stub/glib.c
- )
-
--# Copy libslirp's files to another directory so that we can include it as
--file(MAKE_DIRECTORY "${libslirp_BINARY_DIR}/include")
--file(REMOVE_RECURSE "${libslirp_BINARY_DIR}/include/slirp")
--file(COPY "${libslirp_SOURCE_DIR}/src" DESTINATION "${libslirp_BINARY_DIR}/include")
--file(RENAME "${libslirp_BINARY_DIR}/include/src" "${libslirp_BINARY_DIR}/include/slirp")
--
- target_include_directories(slirp PUBLIC
- "${libslirp_BINARY_DIR}/include"
- "${libslirp_SOURCE_DIR}/src"
diff --git a/pkgs/applications/emulators/libretro/cores/patches/melondsds-zlib-no-zconf-rename.patch b/pkgs/applications/emulators/libretro/cores/patches/melondsds-zlib-no-zconf-rename.patch
new file mode 100644
index 000000000000..9499ac9f921a
--- /dev/null
+++ b/pkgs/applications/emulators/libretro/cores/patches/melondsds-zlib-no-zconf-rename.patch
@@ -0,0 +1,23 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 13dd268..69779cf 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -62,18 +62,6 @@ if(MSVC)
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+ endif()
+
+-if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
+- # If we're doing an out of source build and the user has a zconf.h
+- # in their source tree...
+- if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h)
+- message(STATUS "Renaming")
+- message(STATUS " ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h")
+- message(STATUS "to 'zconf.h.included' because this file is included with zlib")
+- message(STATUS "but CMake generates it automatically in the build directory.")
+- file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included)
+- endif()
+-endif()
+-
+ set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib.pc)
+ configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein
+ ${ZLIB_PC} @ONLY)
diff --git a/pkgs/applications/emulators/libretro/cores/pcsx-rearmed.nix b/pkgs/applications/emulators/libretro/cores/pcsx-rearmed.nix
index b579ede72fec..d2f42d2e655b 100644
--- a/pkgs/applications/emulators/libretro/cores/pcsx-rearmed.nix
+++ b/pkgs/applications/emulators/libretro/cores/pcsx-rearmed.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "pcsx-rearmed";
- version = "0-unstable-2026-05-15";
+ version = "0-unstable-2026-06-28";
src = fetchFromGitHub {
owner = "libretro";
repo = "pcsx_rearmed";
- rev = "c88070df8e0e84106ecc4b6394860a413a7bc046";
- hash = "sha256-ZngYExWmL4NlmSfaRbTpSthNY1QRwKXtSiSX8zS/teo=";
+ rev = "050981b6eeb715f142854f57c68086f62921f027";
+ hash = "sha256-MFNA3YPhLKa5q9hYM11O5/BIrj5xOsiNXkFLnCzugzo=";
};
dontConfigure = true;
diff --git a/pkgs/applications/emulators/libretro/cores/pcsx2.nix b/pkgs/applications/emulators/libretro/cores/pcsx2.nix
index 3524cf6d25b7..66078f17214a 100644
--- a/pkgs/applications/emulators/libretro/cores/pcsx2.nix
+++ b/pkgs/applications/emulators/libretro/cores/pcsx2.nix
@@ -11,13 +11,13 @@
}:
mkLibretroCore {
core = "pcsx2";
- version = "0-unstable-2026-06-01";
+ version = "0-unstable-2026-07-20";
src = fetchFromGitHub {
owner = "libretro";
repo = "ps2";
- rev = "65e8afb9e9ca0a3f3af32d9b35d7d8537cd3cbc1";
- hash = "sha256-H6lZLLO1+ir+vPchq3XGHKsepmYLbohQFvoA0+yiQo0=";
+ rev = "43129ad5ccbde21b022dd3b3fad1862f72a109bf";
+ hash = "sha256-frS44hQeMAgNMEJ5xzmt4fUpx5om5csUsE4qe4kZBao=";
fetchSubmodules = true;
};
diff --git a/pkgs/applications/emulators/libretro/cores/play.nix b/pkgs/applications/emulators/libretro/cores/play.nix
index b08e3f75140a..26b3d48ea660 100644
--- a/pkgs/applications/emulators/libretro/cores/play.nix
+++ b/pkgs/applications/emulators/libretro/cores/play.nix
@@ -14,13 +14,13 @@
}:
mkLibretroCore {
core = "play";
- version = "0-unstable-2026-06-05";
+ version = "0-unstable-2026-07-11";
src = fetchFromGitHub {
owner = "jpd002";
repo = "Play-";
- rev = "3a904f67694ce6ce8f88fd97ebaf30240bd87dce";
- hash = "sha256-vxedP/J6LhTqhoRw1bn6uCNedRJUpKHZnD8OQ5z1rxY=";
+ rev = "50aedca2639521bc498ace0b2be1ea012801a86a";
+ hash = "sha256-ywqwy8HwxigRG/2GfvfpewNjTIeunXH9NtyAH5iUfa8=";
fetchSubmodules = true;
};
diff --git a/pkgs/applications/emulators/libretro/cores/ppsspp.nix b/pkgs/applications/emulators/libretro/cores/ppsspp.nix
index 37abf02a03fb..5e17f556e43b 100644
--- a/pkgs/applications/emulators/libretro/cores/ppsspp.nix
+++ b/pkgs/applications/emulators/libretro/cores/ppsspp.nix
@@ -13,13 +13,13 @@
}:
mkLibretroCore {
core = "ppsspp";
- version = "0-unstable-2026-06-13";
+ version = "0-unstable-2026-07-16";
src = fetchFromGitHub {
owner = "hrydgard";
repo = "ppsspp";
- rev = "238a88e92b092215dd0cbdc33da6f5e4385ccfb2";
- hash = "sha256-dROUYWxpefM+2SuK/vcnPDnwdh9LH6oGoadGrz+gGJk=";
+ rev = "f0c28c67446fd9a08b124ea2bfb0e997fe909de5";
+ hash = "sha256-p6QNLT7Yp7qWCP/T1HYOzho8oBJVbxheZACatuGq5ng=";
fetchSubmodules = true;
};
diff --git a/pkgs/applications/emulators/libretro/cores/prboom.nix b/pkgs/applications/emulators/libretro/cores/prboom.nix
index 08fbcfe778ed..93e102a11fd2 100644
--- a/pkgs/applications/emulators/libretro/cores/prboom.nix
+++ b/pkgs/applications/emulators/libretro/cores/prboom.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "prboom";
- version = "0-unstable-2026-05-20";
+ version = "0-unstable-2026-07-21";
src = fetchFromGitHub {
owner = "libretro";
repo = "libretro-prboom";
- rev = "648223372e24773821a2041e0c39728f723badf4";
- hash = "sha256-LyITrBmL5me5zWOfMRZAeCM9rDS19aV2TAFuU8QU/Kw=";
+ rev = "c5b09532fa633e015ac75c0a2acfec049f65ded3";
+ hash = "sha256-13oL/U3uwNejqTIbKmITRbK8Eddg9YH5CMDIDXA6zKs=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/quicknes.nix b/pkgs/applications/emulators/libretro/cores/quicknes.nix
index 78151466a51c..a92cf4c454e5 100644
--- a/pkgs/applications/emulators/libretro/cores/quicknes.nix
+++ b/pkgs/applications/emulators/libretro/cores/quicknes.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "quicknes";
- version = "0-unstable-2026-05-11";
+ version = "0-unstable-2026-07-06";
src = fetchFromGitHub {
owner = "libretro";
repo = "QuickNES_Core";
- rev = "a0ec494c417f365c578f3dacadb04383e4a99ade";
- hash = "sha256-q1AS4mASF2gaiGyuM6a/Z57bp0DPRQADlM+snb3iNSg=";
+ rev = "26bb785c9deddb66a17717b21bb4e328f03ade32";
+ hash = "sha256-0W6kYAnRw7uVdjoFL+f4Y8Ut932NbsoEer5TTwf9rBk=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/smsplus-gx.nix b/pkgs/applications/emulators/libretro/cores/smsplus-gx.nix
index 7a360436d3f2..feee8c55bccc 100644
--- a/pkgs/applications/emulators/libretro/cores/smsplus-gx.nix
+++ b/pkgs/applications/emulators/libretro/cores/smsplus-gx.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "smsplus";
- version = "0-unstable-2026-04-20";
+ version = "0-unstable-2026-06-25";
src = fetchFromGitHub {
owner = "libretro";
repo = "smsplus-gx";
- rev = "6dc7119f6f8d7f6437320405ee3b0de5f227913f";
- hash = "sha256-kWq4yzYl0ZTnnhLfhtgPyf2CRequ6yn2DLp3Yc7EBbA=";
+ rev = "8a63f82d3c3bbf7215a31f86a4aaa13fb68a579f";
+ hash = "sha256-yNaNkvRzpli4NMqFvlQ/6US7zw8xXiYWw6R0ev6ubLA=";
};
meta = {
diff --git a/pkgs/applications/emulators/libretro/cores/snes9x.nix b/pkgs/applications/emulators/libretro/cores/snes9x.nix
index 288bf5f1acdb..ac4657b975c3 100644
--- a/pkgs/applications/emulators/libretro/cores/snes9x.nix
+++ b/pkgs/applications/emulators/libretro/cores/snes9x.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "snes9x";
- version = "0-unstable-2026-05-20";
+ version = "0-unstable-2026-07-13";
src = fetchFromGitHub {
owner = "snes9xgit";
repo = "snes9x";
- rev = "f8aff9cbd0ab3ee92679f039298d57b55f9d790e";
- hash = "sha256-4tOXpK2OBY6u5NnuIq5NWT3haOp2y+4BtBlHVAzEuRE=";
+ rev = "b5cc7651f9fc02189cb51b5a43848877db5aec42";
+ hash = "sha256-htwL5m49J+ku7h79Eu4y74LKiHkbL3UE3+LAXE52ZY8=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/snes9x2002.nix b/pkgs/applications/emulators/libretro/cores/snes9x2002.nix
index 56c57527c59b..cd9e77f643a5 100644
--- a/pkgs/applications/emulators/libretro/cores/snes9x2002.nix
+++ b/pkgs/applications/emulators/libretro/cores/snes9x2002.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "snes9x2002";
- version = "0-unstable-2026-04-20";
+ version = "0-unstable-2026-06-25";
src = fetchFromGitHub {
owner = "libretro";
repo = "snes9x2002";
- rev = "39e0d8c6daf4b1b1302eeecfee8309570aeb6a82";
- hash = "sha256-mOtCZEuXKWQEupWfFfr3Ji6m15zZuOIJ/ieKtrFGsWI=";
+ rev = "5bd8bd6d449be8a2ef7909e1aeb2bd8c9c0da8cb";
+ hash = "sha256-iqhmSJzWqr5HgtY9q+kBb/xB6njvG3M2SePXdRszqqc=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/snes9x2005.nix b/pkgs/applications/emulators/libretro/cores/snes9x2005.nix
index a244b5e2f0f7..20a0a12e6bd8 100644
--- a/pkgs/applications/emulators/libretro/cores/snes9x2005.nix
+++ b/pkgs/applications/emulators/libretro/cores/snes9x2005.nix
@@ -6,13 +6,13 @@
}:
mkLibretroCore {
core = "snes9x2005" + lib.optionalString withBlarggAPU "-plus";
- version = "0-unstable-2026-04-20";
+ version = "0-unstable-2026-07-22";
src = fetchFromGitHub {
owner = "libretro";
repo = "snes9x2005";
- rev = "b60356971fc9caae02cd0853676dced886a08be7";
- hash = "sha256-6IuEFyJEoCHluSAXbk5qRTXku1XJCZ6p04BhdjqZqJQ=";
+ rev = "deb49d80d1836e3e737480a326e31a54c46c04ae";
+ hash = "sha256-UMW+YTzcSZ5CWSyRBYc8y1cDh/CU3Am11rkjSXlyxZA=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/snes9x2010.nix b/pkgs/applications/emulators/libretro/cores/snes9x2010.nix
index 677f2268981f..f328ea948094 100644
--- a/pkgs/applications/emulators/libretro/cores/snes9x2010.nix
+++ b/pkgs/applications/emulators/libretro/cores/snes9x2010.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore rec {
core = "snes9x2010";
- version = "0-unstable-2026-05-16";
+ version = "0-unstable-2026-07-07";
src = fetchFromGitHub {
owner = "libretro";
repo = "snes9x2010";
- rev = "bc82e8281ddbbd487875866f5db27cdb9838d319";
- hash = "sha256-laAXE4U5ROKe2QnYbUrvJ4xRPv1hzllDZ8ei01IwqKA=";
+ rev = "8b0d82d9a515b6c75bd46fd80c3e2e19b0780998";
+ hash = "sha256-wbfIbb5Bb78gb1N2L5g/Z3YzqzE3+0tVYVS/vyjtTzQ=";
};
makeFlags = [ "GIT_VERSION=${builtins.substring 0 7 src.rev}" ];
diff --git a/pkgs/applications/emulators/libretro/cores/stella.nix b/pkgs/applications/emulators/libretro/cores/stella.nix
index a662a9176249..bfb7842100db 100644
--- a/pkgs/applications/emulators/libretro/cores/stella.nix
+++ b/pkgs/applications/emulators/libretro/cores/stella.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "stella";
- version = "0-unstable-2026-06-09";
+ version = "0-unstable-2026-07-16";
src = fetchFromGitHub {
owner = "stella-emu";
repo = "stella";
- rev = "3e3061809913e59a4378737127ce0ae95b36e889";
- hash = "sha256-fKivb4sFR4F0ub1NLpazLg3i3M9LOely08M8kBEczmo=";
+ rev = "61f4282f57934df94e08a2db79ec492aaab5b805";
+ hash = "sha256-2pEQzl3aUq5ya9297Aj4MYN2ePkg/dyCvJavRWkyE1U=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/stella2014.nix b/pkgs/applications/emulators/libretro/cores/stella2014.nix
index 6c7c4a2f6ba4..9432548683f3 100644
--- a/pkgs/applications/emulators/libretro/cores/stella2014.nix
+++ b/pkgs/applications/emulators/libretro/cores/stella2014.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "stella2014";
- version = "0-unstable-2026-04-12";
+ version = "0-unstable-2026-07-06";
src = fetchFromGitHub {
owner = "libretro";
repo = "stella2014-libretro";
- rev = "eed47e154d1bbda3305e9ef2d486b6710c8973f4";
- hash = "sha256-QpPjVnFCkn6xlB7LxpE6bsNfYe3HSsEKUjqmEf2yTvA=";
+ rev = "4a7da82595d27b8df7af1ecb467a64b642a41bc9";
+ hash = "sha256-uwtYNo6hUR6u2OicFYcbfgCGNlpDfIOF7Q5bNuJ/uMM=";
};
makefile = "Makefile";
diff --git a/pkgs/applications/emulators/libretro/cores/swanstation.nix b/pkgs/applications/emulators/libretro/cores/swanstation.nix
index 4c46caf841d1..f4f7f0a91e27 100644
--- a/pkgs/applications/emulators/libretro/cores/swanstation.nix
+++ b/pkgs/applications/emulators/libretro/cores/swanstation.nix
@@ -6,13 +6,13 @@
}:
mkLibretroCore {
core = "swanstation";
- version = "0-unstable-2026-05-20";
+ version = "0-unstable-2026-07-20";
src = fetchFromGitHub {
owner = "libretro";
repo = "swanstation";
- rev = "62697276b95848bd35b9c7b81daab899a98e0789";
- hash = "sha256-jisW5Mk5PF3rxj9mF5FJXtktAKEAq2a6DUvCXBgri3E=";
+ rev = "5430a4a53b89fa5827c97b84ada29d23317245bc";
+ hash = "sha256-sE9jJjdt25nz0+B0oSonRubYWurE20o/FDdUTj//qOI=";
};
extraNativeBuildInputs = [ cmake ];
diff --git a/pkgs/applications/emulators/libretro/cores/vba-next.nix b/pkgs/applications/emulators/libretro/cores/vba-next.nix
index a9a207d71dd6..94cd4212aab6 100644
--- a/pkgs/applications/emulators/libretro/cores/vba-next.nix
+++ b/pkgs/applications/emulators/libretro/cores/vba-next.nix
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "vba-next";
- version = "0-unstable-2026-06-06";
+ version = "0-unstable-2026-07-21";
src = fetchFromGitHub {
owner = "libretro";
repo = "vba-next";
- rev = "349b57c6442af56248433c114500a460ef9bfd8c";
- hash = "sha256-46ps2P1a8pa9vcZ7Saz8Mh+w5e2lEWjIRAw5WQh1BjQ=";
+ rev = "2b96fd3a77025f3083daf61126b1852d5e0eace7";
+ hash = "sha256-09KSCGlmHNrftX86CVUUAAIHiOpM+MpWwa+XOw3MrJA=";
};
meta = {
diff --git a/pkgs/applications/emulators/wibo/default.nix b/pkgs/applications/emulators/wibo/default.nix
index f982374e6b73..7a5b0ad8e937 100644
--- a/pkgs/applications/emulators/wibo/default.nix
+++ b/pkgs/applications/emulators/wibo/default.nix
@@ -38,7 +38,7 @@ stdenv.mkDerivation (finalAttrs: {
meta.license = lib.licenses.unfree;
};
in
- lib.optionalString finalAttrs.doCheck ''
+ lib.optionalString finalAttrs.finalPackage.doCheck ''
MWCIncludes=../test ./wibo ${gc}/GC/2.7/mwcceppc.exe -c ../test/test.c
file test.o | grep "ELF 32-bit"
'';
diff --git a/pkgs/applications/emulators/wine/base.nix b/pkgs/applications/emulators/wine/base.nix
index bee9d7c4af85..776dceef6050 100644
--- a/pkgs/applications/emulators/wine/base.nix
+++ b/pkgs/applications/emulators/wine/base.nix
@@ -64,6 +64,7 @@
x11Support ? false,
ffmpegSupport ? false,
embedInstallers ? false,
+ smartcardSupport ? false,
}:
let
@@ -251,6 +252,9 @@ stdenv.mkDerivation (
++ lib.optionals ffmpegSupport [
pkgs.ffmpeg-headless
]
+ ++ lib.optionals smartcardSupport [
+ pkgs.pcsclite
+ ]
);
inherit patches;
@@ -275,7 +279,8 @@ stdenv.mkDerivation (
++ lib.optionals vulkanSupport [ "--with-vulkan" ]
++ lib.optionals ((stdenv.hostPlatform.isDarwin && !xineramaSupport) || !x11Support) [
"--without-x"
- ];
+ ]
+ ++ lib.optionals smartcardSupport [ "--with-pcsclite" ];
# Wine locates a lot of libraries dynamically through dlopen(). Add
# them to the RPATH so that the user doesn't have to set them in
@@ -360,7 +365,7 @@ stdenv.mkDerivation (
meta = {
inherit version;
homepage = "https://www.winehq.org/";
- license = with lib.licenses; [ lgpl21Plus ];
+ license = lib.licenses.lgpl21Plus;
sourceProvenance = with lib.sourceTypes; [
fromSource
binaryNativeCode # mono, gecko
diff --git a/pkgs/applications/emulators/wine/default.nix b/pkgs/applications/emulators/wine/default.nix
index 9c5d918bf057..07ee1ec83771 100644
--- a/pkgs/applications/emulators/wine/default.nix
+++ b/pkgs/applications/emulators/wine/default.nix
@@ -51,6 +51,7 @@ args@{
ffmpegSupport ? false,
embedInstallers ? false, # The Mono and Gecko MSI installers
moltenvk, # Allow users to override MoltenVK easily
+ smartcardSupport ? false,
}:
let
diff --git a/pkgs/applications/emulators/wine/fonts.nix b/pkgs/applications/emulators/wine/fonts.nix
index 94b2d74440a4..3ed188a42705 100644
--- a/pkgs/applications/emulators/wine/fonts.nix
+++ b/pkgs/applications/emulators/wine/fonts.nix
@@ -21,7 +21,7 @@ stdenv.mkDerivation {
meta = {
description = "Microsoft replacement fonts by the Wine project";
homepage = "https://wiki.winehq.org/Create_Fonts";
- license = with lib.licenses; [ lgpl21Plus ];
+ license = lib.licenses.lgpl21Plus;
platforms = lib.platforms.all;
maintainers = with lib.maintainers; [
avnik
diff --git a/pkgs/applications/emulators/wine/packages.nix b/pkgs/applications/emulators/wine/packages.nix
index c548d3c1a72e..918046b464da 100644
--- a/pkgs/applications/emulators/wine/packages.nix
+++ b/pkgs/applications/emulators/wine/packages.nix
@@ -84,7 +84,6 @@ in
if pkgs.stdenv.hostPlatform.isAarch64 then [ "--enable-archs=aarch64" ] else [ "--enable-win64" ];
platforms = [
"x86_64-linux"
- "x86_64-darwin"
"aarch64-linux"
];
mainProgram = "wine";
@@ -145,7 +144,6 @@ in
[ "--enable-archs=x86_64,i386" ];
platforms = [
"x86_64-linux"
- "x86_64-darwin"
"aarch64-linux"
];
mainProgram = "wine";
diff --git a/pkgs/applications/emulators/wine/sources.nix b/pkgs/applications/emulators/wine/sources.nix
index 40fd2da565b1..ef983a647be6 100644
--- a/pkgs/applications/emulators/wine/sources.nix
+++ b/pkgs/applications/emulators/wine/sources.nix
@@ -151,9 +151,9 @@ rec {
unstable = fetchurl rec {
# NOTE: Don't forget to change the hash for staging as well.
- version = "11.9";
+ version = "11.12";
url = "https://dl.winehq.org/wine/source/11.x/wine-${version}.tar.xz";
- hash = "sha256-45zBjbKHNYokNvivSYvtx+RE1V65nvVFtg53i7TqD28=";
+ hash = "sha256-07wJEZLZhYRsnyAGXMgfITMfAeIrc2sTHjRJ4TBmcbw=";
patches = [
# Also look for root certificates at $NIX_SSL_CERT_FILE
@@ -163,7 +163,7 @@ rec {
# see https://gitlab.winehq.org/wine/wine-staging
staging = fetchFromGitLab {
inherit version;
- hash = "sha256-IQSu/Nr3JynVv95/jaZCZrCQWKE8/pp9JGEwfmDdI9s=";
+ hash = "sha256-3pE/RVUvH56z9Ilumokl7nNMrhfksuUWzKq6k8behW4=";
domain = "gitlab.winehq.org";
owner = "wine";
repo = "wine-staging";
@@ -186,9 +186,9 @@ rec {
## see http://wiki.winehq.org/Mono
mono = fetchurl rec {
- version = "11.1.0";
+ version = "11.2.0";
url = "https://dl.winehq.org/wine/wine-mono/${version}/wine-mono-${version}-x86.msi";
- hash = "sha256-3rA0FDH4Jgsgn/9rx53cxUFLl/jpI2q5+9ykzlngqbk=";
+ hash = "sha256-tFJWeefaMNRljOuFc5y8VcdxeRBUq7tLMVL+lt7QuJc=";
};
updateScript = writeShellScript "update-wine-unstable" ''
diff --git a/pkgs/applications/gis/qgis/unwrapped-ltr.nix b/pkgs/applications/gis/qgis/unwrapped-ltr.nix
index ee4d1b5a6364..5096d3568716 100644
--- a/pkgs/applications/gis/qgis/unwrapped-ltr.nix
+++ b/pkgs/applications/gis/qgis/unwrapped-ltr.nix
@@ -85,7 +85,7 @@ let
];
in
mkDerivation rec {
- version = "3.44.10";
+ version = "3.44.11";
pname = "qgis-ltr-unwrapped";
outputs = [ "out" ] ++ lib.optional (!stdenv.hostPlatform.isDarwin) "man";
@@ -93,7 +93,7 @@ mkDerivation rec {
owner = "qgis";
repo = "QGIS";
rev = "final-${lib.replaceStrings [ "." ] [ "_" ] version}";
- hash = "sha256-wWLbnZpLIchm0NXuU7jEXCBctrI6G1z8iqf9R2YhS8Y=";
+ hash = "sha256-gWSl9OrRSxreQdKxKKDCOUWBE5uE2w3/ebW266LCWLI=";
};
passthru = {
diff --git a/pkgs/applications/graphics/gimp/default.nix b/pkgs/applications/graphics/gimp/default.nix
index 89a8c9f1cbd8..4a0ef5e72bb8 100644
--- a/pkgs/applications/graphics/gimp/default.nix
+++ b/pkgs/applications/graphics/gimp/default.nix
@@ -310,7 +310,8 @@ stdenv.mkDerivation (finalAttrs: {
# for gimp-script-fu-interpreter-3.0 invoked by shebang of some plug-ins
"$out"
]
- }")
+ }"
+ --suffix XDG_DATA_DIRS : "${adwaita-icon-theme}/share")
'';
postFixup = ''
@@ -338,8 +339,6 @@ stdenv.mkDerivation (finalAttrs: {
gtk = gtk3;
};
- __structuredAttrs = true;
-
meta = {
description = "GNU Image Manipulation Program";
homepage = "https://www.gimp.org/";
diff --git a/pkgs/applications/graphics/gimp/plugins/default.nix b/pkgs/applications/graphics/gimp/plugins/default.nix
index cdbac84aaf3d..a2decfce52cd 100644
--- a/pkgs/applications/graphics/gimp/plugins/default.nix
+++ b/pkgs/applications/graphics/gimp/plugins/default.nix
@@ -209,7 +209,7 @@ lib.makeScope pkgs.newScope (
broken = gimp.apiVersion != "2.0";
description = "GIMP plug-in to do the fourier transform";
homepage = "https://people.via.ecp.fr/~remi/soft/gimp/gimp_plugin_en.php3#fourier";
- license = with lib.licenses; [ gpl3Plus ];
+ license = lib.licenses.gpl3Plus;
};
};
@@ -243,7 +243,7 @@ lib.makeScope pkgs.newScope (
broken = lib.versionOlder gimp.version "3";
description = "Suite of gimp plugins for texture synthesis";
homepage = "https://github.com/bootchk/resynthesizer";
- license = [ lib.licenses.gpl3Plus ];
+ license = lib.licenses.gpl3Plus;
};
};
diff --git a/pkgs/applications/graphics/inkscape/default.nix b/pkgs/applications/graphics/inkscape/default.nix
index 7a5b12418a12..ccea323f700b 100644
--- a/pkgs/applications/graphics/inkscape/default.nix
+++ b/pkgs/applications/graphics/inkscape/default.nix
@@ -103,6 +103,14 @@ stdenv.mkDerivation (finalAttrs: {
# Fix path to ps2pdf binary
inherit ghostscript;
})
+ # https://gitlab.com/inkscape/inkscape/-/merge_requests/7919
+ (fetchpatch {
+ name = "fix-build-poppler-26.05.0";
+ url = "https://gitlab.com/inkscape/inkscape/-/commit/98828255aa0c1212329236b3ff4ac7f41efb4a67.patch";
+ hash = "sha256-ujUl0SxZyb/TyJRmq1ETNn5W8lDDNn3JqHQQQPU5klA=";
+ })
+ # https://gitlab.com/inkscape/inkscape/-/merge_requests/7968
+ ./fix-build-poppler-26.06.0.patch
];
postPatch = ''
diff --git a/pkgs/applications/graphics/inkscape/extensions/inkstitch/default.nix b/pkgs/applications/graphics/inkscape/extensions/inkstitch/default.nix
index 0024092cfcd5..65151cb3192b 100644
--- a/pkgs/applications/graphics/inkscape/extensions/inkstitch/default.nix
+++ b/pkgs/applications/graphics/inkscape/extensions/inkstitch/default.nix
@@ -101,7 +101,7 @@ python3.pkgs.buildPythonApplication {
meta = {
description = "Inkscape extension for machine embroidery design";
homepage = "https://inkstitch.org/";
- license = with lib.licenses; [ gpl3Plus ];
+ license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [
tropf
pluiedev
diff --git a/pkgs/applications/graphics/inkscape/extensions/textext/default.nix b/pkgs/applications/graphics/inkscape/extensions/textext/default.nix
index 20f7f2a2a055..2e2fd2abe665 100644
--- a/pkgs/applications/graphics/inkscape/extensions/textext/default.nix
+++ b/pkgs/applications/graphics/inkscape/extensions/textext/default.nix
@@ -109,6 +109,20 @@ python3.pkgs.buildPythonApplication (finalAttrs: {
# Include gobject-introspection typelibs in the wrapper.
makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+
+ # TexText probes for a GUI toolkit by spawning a subprocess
+ # (`sys.executable -c "import gi; gi.require_version('Gtk', '3.0'); ..."`)
+ # instead of importing in-process. The Python wrapper makes runtime
+ # dependencies importable via a site.addsitedir preamble and deliberately
+ # does not export PYTHONPATH, so the spawned probe interpreter cannot import
+ # gi and TexText aborts with "Neither GTK nor TkInter has been found".
+ # Export PYTHONPATH so the probe subprocess inherits the dependencies too.
+ # See https://github.com/NixOS/nixpkgs/issues/384042
+ makeWrapperArgs+=(--prefix PYTHONPATH : "${
+ lib.makeSearchPath python3.sitePackages (
+ finalAttrs.propagatedBuildInputs ++ [ python3.pkgs.pycairo ]
+ )
+ }")
'';
postFixup = ''
diff --git a/pkgs/applications/graphics/inkscape/fix-build-poppler-26.06.0.patch b/pkgs/applications/graphics/inkscape/fix-build-poppler-26.06.0.patch
new file mode 100644
index 000000000000..e9af942188db
--- /dev/null
+++ b/pkgs/applications/graphics/inkscape/fix-build-poppler-26.06.0.patch
@@ -0,0 +1,487 @@
+From 35a470d9cbff50467cc700bc17ab2c4e8f5cf0bc Mon Sep 17 00:00:00 2001
+From: KrIr17
+Date: Mon, 8 Jun 2026 20:16:32 +0200
+Subject: [PATCH] Fix Building with Poppler 26.06.0
+
+- pdfparser: Some `const PDFRectangle *` to `const PDFRectangle &` [1]
+- pdfparser: Some `const GfxColor *` to `const GfxColor &` [2]
+- pdf-utils: Add a `getRect(const PDFRectangle &)` alongside `getRect(const
+ PDFRectangle *)`
+- poppler-cairo-font-engine: `getKey()` now returns std::string and not
+ char[], so change `strcmp` to `std::string(...).compare(...)` [3]
+- poppler-utils: `obj->dictGetKey()` etc. were removed; use
+ `obj->dict()->getKey()` instead (these have also existed in poppler
+ since the beginning, so shouldn't break any old poppler) [4,5]
+- svg-builder: `convertGfxColor` now takes `const GfxColor &` as input.
+ A convenience function taking `const GfxColor *` (for older poppler)
+ now calls the new one after confirming `color` is a valid pointer
+- svg-builder: `_addStopToGradient` now takes `const GfxColor &` as
+ input. This was used only in `convertGfxColor` and therefore doesn't
+ need a helper function for compatibility
+- testfiles pdf-utils-test: `` to `<*.h>` (see e3eb1210)
+- testfiles pdf-utils-test: Some `const PDFRectangle *`
+ to `const PDFRectangle &` [1]
+
+Fixes https://gitlab.com/inkscape/inkscape/-/work_items/6210
+
+Upstream Commits:
+
+[1] https://gitlab.freedesktop.org/poppler/poppler/-/commit/d50a4510
+[2] https://gitlab.freedesktop.org/poppler/poppler/-/commit/0f94f530
+[3] https://gitlab.freedesktop.org/poppler/poppler/-/commit/a3de7f8a
+[4] https://gitlab.freedesktop.org/poppler/poppler/-/commit/bb13b0f5
+[5] https://gitlab.freedesktop.org/poppler/poppler/-/commit/8ae0f8e7
+---
+ src/extension/internal/pdfinput/pdf-input.cpp | 14 +++++-
+ .../internal/pdfinput/pdf-parser.cpp | 45 ++++++++++---------
+ src/extension/internal/pdfinput/pdf-parser.h | 4 +-
+ src/extension/internal/pdfinput/pdf-utils.cpp | 5 +++
+ src/extension/internal/pdfinput/pdf-utils.h | 1 +
+ .../pdfinput/poppler-cairo-font-engine.cpp | 2 +-
+ .../pdfinput/poppler-transition-api.h | 16 +++++++
+ .../internal/pdfinput/poppler-utils.cpp | 20 +++++----
+ .../internal/pdfinput/svg-builder.cpp | 36 +++++++++------
+ src/extension/internal/pdfinput/svg-builder.h | 3 +-
+ testfiles/src/pdf-utils-test.cpp | 7 +--
+ 11 files changed, 100 insertions(+), 53 deletions(-)
+
+diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp
+index aa4285b01d..dc5394c3d8 100644
+--- a/src/extension/internal/pdfinput/pdf-input.cpp
++++ b/src/extension/internal/pdfinput/pdf-input.cpp
+@@ -820,7 +820,11 @@ PdfInput::add_builder_page(std::shared_ptrpdf_doc, SvgBuilder *builder,
+ }
+
+ // Apply crop settings
++#if POPPLER_CHECK_VERSION(26, 2, 0)
++ std::optional clipToBox;
++#else
+ _POPPLER_CONST PDFRectangle *clipToBox = nullptr;
++#endif
+
+ if (crop_to == "media-box") {
+ clipToBox = page->getMediaBox();
+@@ -834,8 +838,16 @@ PdfInput::add_builder_page(std::shared_ptrpdf_doc, SvgBuilder *builder,
+ clipToBox = page->getArtBox();
+ }
+
++ std::optional cropBox;
++#if POPPLER_CHECK_VERSION(26, 2, 0)
++ cropBox = clipToBox;
++#else
++ if (clipToBox) {
++ cropBox = *clipToBox;
++ }
++#endif
+ // Create parser (extension/internal/pdfinput/pdf-parser.h)
+- auto pdf_parser = PdfParser(pdf_doc, builder, page, clipToBox);
++ auto pdf_parser = PdfParser(pdf_doc, builder, page, cropBox);
+
+ // Set up approximation precision for parser. Used for converting Mesh Gradients into tiles.
+ if ( color_delta <= 0.0 ) {
+diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
+index b336c48ce3..86fc51b1f2 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.cpp
++++ b/src/extension/internal/pdfinput/pdf-parser.cpp
+@@ -43,6 +43,7 @@
+ #include
+ #include
+ #include
++#include
+ #include
+ #include
+ #include
+@@ -264,7 +265,7 @@ GfxPatch blankPatch()
+ //------------------------------------------------------------------------
+
+ PdfParser::PdfParser(std::shared_ptr pdf_doc, Inkscape::Extension::Internal::SvgBuilder *builderA, Page *page,
+- _POPPLER_CONST PDFRectangle *cropBox)
++ const std::optional &cropBox)
+ : _pdf_doc(pdf_doc)
+ , xref(pdf_doc->getXRef())
+ , builder(builderA)
+@@ -307,8 +308,8 @@ PdfParser::PdfParser(std::shared_ptr pdf_doc, Inkscape::Extension::Inter
+ builder->setMargins(getRect(page->getTrimBox()) * scale,
+ getRect(page->getArtBox()) * scale,
+ getRect(page->getBleedBox()) * scale);
+- if (cropBox && getRect(cropBox) != page_box) {
+- builder->cropPage(getRect(cropBox) * scale);
++ if (cropBox && getRect(*cropBox) != page_box) {
++ builder->cropPage(getRect(*cropBox) * scale);
+ }
+
+ saveState();
+@@ -331,7 +332,7 @@ PdfParser::PdfParser(XRef *xrefA, Inkscape::Extension::Internal::SvgBuilder *bui
+ , printCommands(false)
+ , res(new GfxResources(xref, resDict, nullptr))
+ , // start the resource stack
+- state(new GfxState(72, 72, box, 0, false))
++ state(new _POPPLER_GFX_STATE(72, 72, *box, 0, false))
+ , fontChanged(gFalse)
+ , clip(clipNone)
+ , ignoreUndef(0)
+@@ -964,7 +965,7 @@ void PdfParser::opSetFillGray(Object args[], int /*numArgs*/)
+ state->setFillPattern(nullptr);
+ state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique()));
+ color.c[0] = dblToCol(args[0].getNum());
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -976,7 +977,7 @@ void PdfParser::opSetStrokeGray(Object args[], int /*numArgs*/)
+ state->setStrokePattern(nullptr);
+ state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(std::make_unique()));
+ color.c[0] = dblToCol(args[0].getNum());
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -991,7 +992,7 @@ void PdfParser::opSetFillCMYKColor(Object args[], int /*numArgs*/)
+ for (i = 0; i < 4; ++i) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1005,7 +1006,7 @@ void PdfParser::opSetStrokeCMYKColor(Object args[], int /*numArgs*/)
+ for (int i = 0; i < 4; ++i) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1019,7 +1020,7 @@ void PdfParser::opSetFillRGBColor(Object args[], int /*numArgs*/)
+ for (int i = 0; i < 3; ++i) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1032,7 +1033,7 @@ void PdfParser::opSetStrokeRGBColor(Object args[], int /*numArgs*/) {
+ for (int i = 0; i < 3; ++i) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1048,7 +1049,7 @@ void PdfParser::opSetFillColorSpace(Object args[], int numArgs)
+ GfxColor color;
+ colorSpace->getDefaultColor(&color);
+ state->setFillColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ } else {
+ error(errSyntaxError, getPos(), "Bad color space (fill)");
+@@ -1069,7 +1070,7 @@ void PdfParser::opSetStrokeColorSpace(Object args[], int numArgs)
+ GfxColor color;
+ colorSpace->getDefaultColor(&color);
+ state->setStrokeColorSpace(_POPPLER_CONSUME_UNIQPTR_ARG(colorSpace));
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ } else {
+ error(errSyntaxError, getPos(), "Bad color space (stroke)");
+@@ -1089,7 +1090,7 @@ void PdfParser::opSetFillColor(Object args[], int numArgs) {
+ for (i = 0; i < numArgs; ++i) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1106,7 +1107,7 @@ void PdfParser::opSetStrokeColor(Object args[], int numArgs) {
+ for (i = 0; i < numArgs; ++i) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ }
+
+@@ -1127,7 +1128,7 @@ void PdfParser::opSetFillColorN(Object args[], int numArgs) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+ }
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ }
+ if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) {
+@@ -1146,7 +1147,7 @@ void PdfParser::opSetFillColorN(Object args[], int numArgs) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+ }
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ builder->updateStyle(state);
+ }
+ }
+@@ -1170,7 +1171,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int numArgs) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+ }
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ }
+ if (auto pattern = lookupPattern(&(args[numArgs - 1]), state)) {
+@@ -1189,7 +1190,7 @@ void PdfParser::opSetStrokeColorN(Object args[], int numArgs) {
+ color.c[i] = dblToCol(args[i].getNum());
+ }
+ }
+- state->setStrokeColor(&color);
++ state->_POPPLER_SET_STROKE_COLOR(color);
+ builder->updateStyle(state);
+ }
+ }
+@@ -1673,7 +1674,7 @@ void PdfParser::doFunctionShFill1(GfxFunctionShading *shading,
+
+ // use the center color
+ shading->getColor(xM, yM, &fillColor);
+- state->setFillColor(&fillColor);
++ state->_POPPLER_SET_FILL_COLOR(fillColor);
+
+ // fill the rectangle
+ state->moveTo(x0 * matrix[0] + y0 * matrix[2] + matrix[4],
+@@ -1799,7 +1800,7 @@ void PdfParser::gouraudFillTriangle(double x0, double y0, GfxColor *color0,
+ }
+ }
+ if (i == nComps || depth == maxDepths[pdfGouraudTriangleShading-1]) {
+- state->setFillColor(color0);
++ state->_POPPLER_SET_FILL_COLOR(*color0);
+ state->moveTo(x0, y0);
+ state->lineTo(x1, y1);
+ state->lineTo(x2, y2);
+@@ -1877,7 +1878,7 @@ void PdfParser::fillPatch(_POPPLER_CONST GfxPatch *patch, int nComps, int depth)
+ color.c[i] = GfxColorComp(patch->color[0][0].c[i]);
+ }
+ if (i == nComps || depth == maxDepths[pdfPatchMeshShading-1]) {
+- state->setFillColor(&color);
++ state->_POPPLER_SET_FILL_COLOR(color);
+ state->moveTo(patch->x[0][0], patch->y[0][0]);
+ state->curveTo(patch->x[0][1], patch->y[0][1],
+ patch->x[0][2], patch->y[0][2],
+diff --git a/src/extension/internal/pdfinput/pdf-parser.h b/src/extension/internal/pdfinput/pdf-parser.h
+index 098ff26e26..29dd259167 100644
+--- a/src/extension/internal/pdfinput/pdf-parser.h
++++ b/src/extension/internal/pdfinput/pdf-parser.h
+@@ -113,8 +113,8 @@ struct OpHistoryEntry {
+ class PdfParser {
+ public:
+
+- // Constructor for regular output.
+- PdfParser(std::shared_ptr pdf_doc, SvgBuilder *builderA, Page *page, _POPPLER_CONST PDFRectangle *cropBox);
++ // Constructor for regular output.
++ PdfParser(std::shared_ptr pdf_doc, SvgBuilder *builderA, Page *page, const std::optional &cropBox);
+ // Constructor for a sub-page object.
+ PdfParser(XRef *xrefA, SvgBuilder *builderA, Dict *resDict, _POPPLER_CONST PDFRectangle *box);
+
+diff --git a/src/extension/internal/pdfinput/pdf-utils.cpp b/src/extension/internal/pdfinput/pdf-utils.cpp
+index 22e5df62c8..3aa6c02d3c 100644
+--- a/src/extension/internal/pdfinput/pdf-utils.cpp
++++ b/src/extension/internal/pdfinput/pdf-utils.cpp
+@@ -133,6 +133,11 @@ Geom::Rect getRect(_POPPLER_CONST PDFRectangle *box)
+ return Geom::Rect(box->x1, box->y1, box->x2, box->y2);
+ }
+
++Geom::Rect getRect(const PDFRectangle &box)
++{
++ return Geom::Rect(box.x1, box.y1, box.x2, box.y2);
++}
++
+ Geom::PathVector getPathV(GfxPath *path)
+ {
+ if (!path) {
+diff --git a/src/extension/internal/pdfinput/pdf-utils.h b/src/extension/internal/pdfinput/pdf-utils.h
+index d259a8c2f7..30e9b5bf86 100644
+--- a/src/extension/internal/pdfinput/pdf-utils.h
++++ b/src/extension/internal/pdfinput/pdf-utils.h
+@@ -59,6 +59,7 @@ private:
+ };
+
+ Geom::Rect getRect(_POPPLER_CONST PDFRectangle *box);
++Geom::Rect getRect(_POPPLER_CONST PDFRectangle &box);
+ Geom::PathVector getPathV(GfxPath *gPath);
+
+ #endif /* PDF_UTILS_H */
+diff --git a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
+index 19ebd26693..39ce22af38 100644
+--- a/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
++++ b/src/extension/internal/pdfinput/poppler-cairo-font-engine.cpp
+@@ -713,7 +713,7 @@ CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, PDFDoc *doc, CairoFontE
+ codeToGID[i] = 0;
+ if (charProcs && (name = enc[i])) {
+ for (int j = 0; j < charProcs->getLength(); j++) {
+- if (strcmp(name, charProcs->getKey(j)) == 0) {
++ if (std::string(charProcs->getKey(j)).compare(name) == 0) {
+ codeToGID[i] = j;
+ }
+ }
+diff --git a/src/extension/internal/pdfinput/poppler-transition-api.h b/src/extension/internal/pdfinput/poppler-transition-api.h
+index d69829d512..23550a3068 100644
+--- a/src/extension/internal/pdfinput/poppler-transition-api.h
++++ b/src/extension/internal/pdfinput/poppler-transition-api.h
+@@ -15,6 +15,22 @@
+ #include
+ #include
+
++#if POPPLER_CHECK_VERSION(26, 6, 0)
++#define _POPPLER_GET_GRAY(color, gray) getGray(color, gray)
++#define _POPPLER_GET_RGB(color, rgb) getRGB(color, rgb)
++#define _POPPLER_GET_CMYK(color, cmyk) getCMYK(color, cmyk)
++#define _POPPLER_SET_FILL_COLOR(color) setFillColor(color)
++#define _POPPLER_SET_STROKE_COLOR(color) setStrokeColor(color)
++#define _POPPLER_GFX_STATE(h, v, Rect, rotateA, upsideDown) GfxState(h, v, Rect, rotateA, upsideDown)
++#else
++#define _POPPLER_GET_GRAY(color, gray) getGray(&color, gray)
++#define _POPPLER_GET_RGB(color, rgb) getRGB(&color, rgb)
++#define _POPPLER_GET_CMYK(color, cmyk) getCMYK(&color, cmyk)
++#define _POPPLER_SET_FILL_COLOR(color) setFillColor(&color)
++#define _POPPLER_SET_STROKE_COLOR(color) setStrokeColor(&color)
++#define _POPPLER_GFX_STATE(h, v, Rect, rotateA, upsideDown) GfxState(h, v, &Rect, rotateA, upsideDown)
++#endif
++
+ #if POPPLER_CHECK_VERSION(26, 2, 0)
+ #define _POPPLER_WMODE GfxFont::WritingMode
+ #define _POPPLER_WMODE_HORIZONTAL GfxFont::WritingMode::Horizontal
+diff --git a/src/extension/internal/pdfinput/poppler-utils.cpp b/src/extension/internal/pdfinput/poppler-utils.cpp
+index 2338dbe2d9..66dcf85e1d 100644
+--- a/src/extension/internal/pdfinput/poppler-utils.cpp
++++ b/src/extension/internal/pdfinput/poppler-utils.cpp
+@@ -196,15 +196,17 @@ void InkFontDict::hashFontObject1(const Object *obj, FNVHash *h)
+ hashFontObject1(&obj2, h);
+ }
+ break;
+- case objDict:
+- h->hash('d');
+- n = obj->dictGetLength();
+- h->hash((char *)&n, sizeof(int));
+- for (i = 0; i < n; ++i) {
+- p = obj->dictGetKey(i);
+- h->hash(p, (int)strlen(p));
+- const Object &obj2 = obj->dictGetValNF(i);
+- hashFontObject1(&obj2, h);
++ case objDict: {
++ h->hash('d');
++ auto objdict = obj->getDict();
++ n = objdict->getLength();
++ h->hash((char *)&n, sizeof(int));
++ for (i = 0; i < n; ++i) {
++ auto p = std::string(objdict->getKey(i));
++ h->hash(p.c_str(), p.length());
++ const Object &obj2 = objdict->getValNF(i);
++ hashFontObject1(&obj2, h);
++ }
+ }
+ break;
+ case objStream:
+diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp
+index 3dfdfbbed4..bf7ccf1a8b 100644
+--- a/src/extension/internal/pdfinput/svg-builder.cpp
++++ b/src/extension/internal/pdfinput/svg-builder.cpp
+@@ -392,7 +392,15 @@ static std::string svgConvertGfxRGB(GfxRGB *color)
+ return svgConvertRGBToText(r, g, b);
+ }
+
+-std::string SvgBuilder::convertGfxColor(const GfxColor *color, GfxColorSpace *space)
++// for poppler < 26.06.0
++std::string SvgBuilder::convertGfxColor(const GfxColor *color, GfxColorSpace *space) {
++ if (!color) {
++ return "";
++ }
++ return convertGfxColor(*color, space);
++}
++
++std::string SvgBuilder::convertGfxColor(const GfxColor &color, GfxColorSpace *space)
+ {
+ std::string icc = "";
+ switch (space->getMode()) {
+@@ -419,7 +427,7 @@ std::string SvgBuilder::convertGfxColor(const GfxColor *color, GfxColorSpace *sp
+ Inkscape::CSSOStringStream icc_color;
+ icc_color << rgb_color << " icc-color(" << icc;
+ for (int i = 0; i < space->getNComps(); ++i) {
+- icc_color << ", " << colToDbl((*color).c[i]);
++ icc_color << ", " << colToDbl((color).c[i]);
+ }
+ icc_color << ");";
+ return icc_color.str();
+@@ -1204,7 +1212,7 @@ gchar *SvgBuilder::_createGradient(GfxShading *shading, const Geom::Affine pat_m
+ /**
+ * \brief Adds a stop with the given properties to the gradient's representation
+ */
+-void SvgBuilder::_addStopToGradient(Inkscape::XML::Node *gradient, double offset, GfxColor *color, GfxColorSpace *space,
++void SvgBuilder::_addStopToGradient(Inkscape::XML::Node *gradient, double offset, GfxColor &color, GfxColorSpace *space,
+ double opacity)
+ {
+ Inkscape::XML::Node *stop = _xml_doc->createElement("svg:stop");
+@@ -1255,8 +1263,8 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh
+ if (!svgGetShadingColor(shading, 0.0, &stop1) || !svgGetShadingColor(shading, 1.0, &stop2)) {
+ return false;
+ } else {
+- _addStopToGradient(gradient, 0.0, &stop1, space, 1.0);
+- _addStopToGradient(gradient, 1.0, &stop2, space, 1.0);
++ _addStopToGradient(gradient, 0.0, stop1, space, 1.0);
++ _addStopToGradient(gradient, 1.0, stop2, space, 1.0);
+ }
+ } else if (type == _POPPLER_FUNCTION_TYPE_STITCHING) {
+ auto stitchingFunc = static_cast<_POPPLER_CONST StitchingFunction*>(func);
+@@ -1269,7 +1277,7 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh
+ // Add stops from all the stitched functions
+ GfxColor prev_color, color;
+ svgGetShadingColor(shading, bounds[0], &prev_color);
+- _addStopToGradient(gradient, bounds[0], &prev_color, space, 1.0);
++ _addStopToGradient(gradient, bounds[0], prev_color, space, 1.0);
+ for ( int i = 0 ; i < num_funcs ; i++ ) {
+ svgGetShadingColor(shading, bounds[i + 1], &color);
+ // Add stops
+@@ -1279,14 +1287,14 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh
+ expE = (bounds[i + 1] - bounds[i])/expE; // approximate exponential as a single straight line at x=1
+ if (encode[2*i] == 0) { // normal sequence
+ auto offset = (bounds[i + 1] - expE) / max_bound;
+- _addStopToGradient(gradient, offset, &prev_color, space, 1.0);
++ _addStopToGradient(gradient, offset, prev_color, space, 1.0);
+ } else { // reflected sequence
+ auto offset = (bounds[i] + expE) / max_bound;
+- _addStopToGradient(gradient, offset, &color, space, 1.0);
++ _addStopToGradient(gradient, offset, color, space, 1.0);
+ }
+ }
+ }
+- _addStopToGradient(gradient, bounds[i + 1] / max_bound, &color, space, 1.0);
++ _addStopToGradient(gradient, bounds[i + 1] / max_bound, color, space, 1.0);
+ prev_color = color;
+ }
+ } else { // Unsupported function type
+diff --git a/src/extension/internal/pdfinput/svg-builder.h b/src/extension/internal/pdfinput/svg-builder.h
+index c4b217f58e..348f3a2ce3 100644
+--- a/src/extension/internal/pdfinput/svg-builder.h
++++ b/src/extension/internal/pdfinput/svg-builder.h
+@@ -186,7 +186,7 @@ private:
+ // Pattern creation
+ gchar *_createPattern(GfxPattern *pattern, GfxState *state, bool is_stroke=false);
+ gchar *_createGradient(GfxShading *shading, const Geom::Affine pat_matrix, bool for_shading = false);
+- void _addStopToGradient(Inkscape::XML::Node *gradient, double offset, GfxColor *color, GfxColorSpace *space,
++ void _addStopToGradient(Inkscape::XML::Node *gradient, double offset, GfxColor &color, GfxColorSpace *space,
+ double opacity);
+ bool _addGradientStops(Inkscape::XML::Node *gradient, GfxShading *shading,
+ _POPPLER_CONST Function *func);
+@@ -239,6 +239,7 @@ private:
+ static bool _attrEqual(Inkscape::XML::Node *a, Inkscape::XML::Node *b, char const *attr);
+
+ // Colors
++ std::string convertGfxColor(const GfxColor &color, GfxColorSpace *space);
+ std::string convertGfxColor(const GfxColor *color, GfxColorSpace *space);
+ std::string _getColorProfile(cmsHPROFILE hp);
+
diff --git a/pkgs/applications/misc/electrum/default.nix b/pkgs/applications/misc/electrum/default.nix
index 64f2b04b613c..ae0950b70b13 100644
--- a/pkgs/applications/misc/electrum/default.nix
+++ b/pkgs/applications/misc/electrum/default.nix
@@ -2,7 +2,6 @@
lib,
stdenv,
fetchurl,
- protobuf,
wrapQtAppsHook,
python3,
zbar,
@@ -21,14 +20,14 @@ let
else
"libzbar${stdenv.hostPlatform.extensions.sharedLibrary}";
in
-python3.pkgs.buildPythonApplication rec {
+python3.pkgs.buildPythonApplication (finalAttrs: {
pname = "electrum";
- version = "4.7.2";
+ version = "4.8.0";
pyproject = true;
src = fetchurl {
- url = "https://download.electrum.org/${version}/Electrum-${version}.tar.gz";
- hash = "sha256-qzA/HLw+QPTdE6qsg8TNqr0DuOgfMrs8UcEnfp1uBpc=";
+ url = "https://download.electrum.org/${finalAttrs.version}/Electrum-${finalAttrs.version}.tar.gz";
+ hash = "sha256-z14bzs81eJNTMSWSBLTyCmsljDNztG54SVkoTcSqvsM=";
};
build-system = with python3.pkgs; [
@@ -36,7 +35,6 @@ python3.pkgs.buildPythonApplication rec {
];
nativeBuildInputs = [
- protobuf
python3.pkgs.pythonRelaxDepsHook
]
++ lib.optionals enableQt [
@@ -101,11 +99,7 @@ python3.pkgs.buildPythonApplication rec {
"tests/test_qml_types.py"
];
- postPatch = ''
- # Upstream tarball omits regenerated protobuf bindings in some releases.
- protoc --python_out=. electrum/paymentrequest.proto
- ''
- + (
+ postPatch =
if enableQt then
''
substituteInPlace ./electrum/qrscanner.py \
@@ -114,8 +108,7 @@ python3.pkgs.buildPythonApplication rec {
else
''
sed -i '/qdarkstyle/d' contrib/requirements/requirements.txt
- ''
- );
+ '';
postInstall = lib.optionalString stdenv.hostPlatform.isLinux ''
substituteInPlace $out/share/applications/electrum.desktop \
@@ -175,4 +168,4 @@ python3.pkgs.buildPythonApplication rec {
];
mainProgram = "electrum";
};
-}
+})
diff --git a/pkgs/applications/misc/sweethome3d/default.nix b/pkgs/applications/misc/sweethome3d/default.nix
index 17291bdc2cce..f0a220d8733d 100644
--- a/pkgs/applications/misc/sweethome3d/default.nix
+++ b/pkgs/applications/misc/sweethome3d/default.nix
@@ -29,7 +29,6 @@ let
];
platforms = [
"i686-linux"
- "x86_64-darwin"
"x86_64-linux"
"aarch64-darwin"
];
diff --git a/pkgs/applications/misc/xppen/generic.nix b/pkgs/applications/misc/xppen/generic.nix
index a48a20b2ef4c..8dd7b39b14fe 100644
--- a/pkgs/applications/misc/xppen/generic.nix
+++ b/pkgs/applications/misc/xppen/generic.nix
@@ -63,7 +63,6 @@ stdenv.mkDerivation {
mainProgram = "PenTablet";
maintainers = with lib.maintainers; [
gepbird
- nasrally
];
platforms = [ "x86_64-linux" ];
sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
diff --git a/pkgs/applications/networking/browsers/chromium/common.nix b/pkgs/applications/networking/browsers/chromium/common.nix
index 3d4138570f74..dd4df835a93c 100644
--- a/pkgs/applications/networking/browsers/chromium/common.nix
+++ b/pkgs/applications/networking/browsers/chromium/common.nix
@@ -480,13 +480,15 @@ let
# BUNDLE_WIDEVINE_CDM build flag does work in the way we want though.
# We also need enable_widevine_cdm_component to be false. Unfortunately it isn't exposed as gn
# flag (declare_args) so we simply hardcode it to false.
- ./patches/widevine-disable-auto-download-allow-bundle.patch
+ ./patches/${lib.optionalString (chromiumVersionAtLeast "150") "chromium-150-"}widevine-disable-auto-download-allow-bundle.patch
]
- ++ [
+ ++ lib.optionals (!chromiumVersionAtLeast "150") [
# Required to fix the build with a more recent wayland-protocols version
# (we currently package 1.26 in Nixpkgs while Chromium bundles 1.21):
# Source: https://bugs.chromium.org/p/angleproject/issues/detail?id=7582#c1
./patches/angle-wayland-include-protocol.patch
+ ]
+ ++ [
# Chromium reads initial_preferences from its own executable directory
# This patch modifies it to read /etc/chromium/initial_preferences
./patches/chromium-initial-prefs.patch
@@ -504,11 +506,16 @@ let
# allowing us to use our rustc and our clang.
./patches/chromium-140-rust.patch
]
- ++ lib.optionals (chromiumVersionAtLeast "141") [
+ ++ lib.optionals (versionRange "141" "150") [
# Rebased variant of the patch above due to
# https://chromium-review.googlesource.com/c/chromium/src/+/6897026
./patches/chromium-141-rust.patch
]
+ ++ lib.optionals (chromiumVersionAtLeast "150") [
+ # Rebased variant of the patch above due to
+ # https://chromium-review.googlesource.com/c/chromium/src/+/7858711
+ ./patches/chromium-150-rust.patch
+ ]
++ lib.optionals (!chromiumVersionAtLeast "145" && stdenv.hostPlatform.isAarch64) [
# Reverts decommit pooled pages which causes random crashes of tabs on systems
# with page sizes different than 4k. It 'supports' runtime page sizes, but has
@@ -676,6 +683,17 @@ let
revert = true;
hash = "sha256-7xg8IZ2gO+Wtnv7lWLVE3lLpcmMgvtDtcWwUuMBzkrE=";
})
+ ]
+ ++ lib.optionals (versionRange "150" "151") [
+ # ninja: Entering directory `out/Release'
+ # ninja: error: 'ar', needed by 'default_for_rust_host_build_tools/obj/build/rust/allocator/liballoc_error_handler_impl.a', missing and no known rule to make it
+ (fetchpatch {
+ name = "chromium-150-backport-build--Omit-ar-from-inputs-when-resolved-via--PATH.patch";
+ # https://chromium-review.googlesource.com/c/chromium/src/+/7904982
+ url = "https://chromium.googlesource.com/chromium/src/+/60f987d8d5f7272793a40290d060b8f50933f825^!?format=TEXT";
+ decode = "base64 -d";
+ hash = "sha256-MryWxSwBxSIONhl3X1cDxTWwNWy8a4yt/sqkrueSUNs=";
+ })
];
postPatch =
@@ -910,6 +928,12 @@ let
# TODO: remove opt-out of https://chromium.googlesource.com/chromium/src/+/main/docs/modules.md
use_clang_modules = false;
}
+ // lib.optionalAttrs (chromiumVersionAtLeast "150") {
+ # ERROR at //build/modules/BUILD.gn:80:23: Directory does not exist: /usr/include/
+ # system_headers += expand_directory("${sysroot}/${root_include_dir}", true)
+ # ^------------------------------------------------------
+ use_unified_system_module = false;
+ }
// {
use_qt5 = false;
use_qt6 = false;
@@ -986,24 +1010,34 @@ let
runHook postConfigure
'';
- # Chromium expects nightly/bleeding edge rustc features to be available.
- # Our rustc in nixpkgs follows stable, but since bootstrapping rustc requires
- # nightly features too, we can (ab-)use RUSTC_BOOTSTRAP here as well to
- # enable those features in our stable builds.
- env.RUSTC_BOOTSTRAP = 1;
- # Mute some warnings that are enabled by default. This is useful because
- # our Clang is always older than Chromium's and the build logs have a size
- # of approx. 25 MB without this option (and this saves e.g. 66 %).
- env.NIX_CFLAGS_COMPILE =
- "-Wno-unknown-warning-option -Wno-unused-command-line-argument -Wno-shadow"
- # warning: '_LIBCPP_HARDENING_MODE' macro redefined [-Wmacro-redefined]
- # because of hardeningDisable = [ "strictflexarrays1" ];
- + lib.optionalString (chromiumVersionAtLeast "149") " -Wno-macro-redefined";
- env.BUILD_CC = "$CC_FOR_BUILD";
- env.BUILD_CXX = "$CXX_FOR_BUILD";
- env.BUILD_AR = "$AR_FOR_BUILD";
- env.BUILD_NM = "$NM_FOR_BUILD";
- env.BUILD_READELF = "$READELF_FOR_BUILD";
+ env = {
+ # Chromium expects nightly/bleeding edge rustc features to be available.
+ # Our rustc in nixpkgs follows stable, but since bootstrapping rustc requires
+ # nightly features too, we can (ab-)use RUSTC_BOOTSTRAP here as well to
+ # enable those features in our stable builds.
+ RUSTC_BOOTSTRAP = 1;
+
+ # Mute some warnings that are enabled by default. This is useful because
+ # our Clang is always older than Chromium's and the build logs have a size
+ # of approx. 25 MB without this option (and this saves e.g. 66 %).
+ NIX_CFLAGS_COMPILE =
+ "-Wno-unknown-warning-option -Wno-unused-command-line-argument -Wno-shadow"
+ # warning: '_LIBCPP_HARDENING_MODE' macro redefined [-Wmacro-redefined]
+ # because of hardeningDisable = [ "strictflexarrays1" ];
+ + lib.optionalString (chromiumVersionAtLeast "149") " -Wno-macro-redefined";
+
+ BUILD_CC = "$CC_FOR_BUILD";
+ BUILD_CXX = "$CXX_FOR_BUILD";
+ BUILD_AR = "$AR_FOR_BUILD";
+ BUILD_NM = "$NM_FOR_BUILD";
+ BUILD_READELF = "$READELF_FOR_BUILD";
+ }
+ // lib.optionalAttrs (chromiumVersionAtLeast "150") {
+ # [56385/56385] LINK ./chrome
+ # FAILED: [code=1] chrome
+ # /nix/store/[...]/bin/ld.lld: line 288: /nix/store/[...]/bin/ld.lld: Argument list too long
+ NIX_LD_USE_RESPONSE_FILE = 1;
+ };
buildPhase =
let
diff --git a/pkgs/applications/networking/browsers/chromium/default.nix b/pkgs/applications/networking/browsers/chromium/default.nix
index a4997eb3d576..3c058a84ed64 100644
--- a/pkgs/applications/networking/browsers/chromium/default.nix
+++ b/pkgs/applications/networking/browsers/chromium/default.nix
@@ -204,7 +204,7 @@ stdenv.mkDerivation {
ln -s "$out/bin/chromium" "$out/bin/chromium-browser"
mkdir -p "$out/share"
- for f in '${chromium.browser}'/share/*; do
+ for f in '${chromiumWV}'/share/*; do
ln -s -t "$out/share/" "$f"
done
'';
diff --git a/pkgs/applications/networking/browsers/chromium/depot_tools.py b/pkgs/applications/networking/browsers/chromium/depot_tools.py
index ab8007a4e910..45f18098ff61 100755
--- a/pkgs/applications/networking/browsers/chromium/depot_tools.py
+++ b/pkgs/applications/networking/browsers/chromium/depot_tools.py
@@ -43,7 +43,14 @@ class Repo:
)
deps_file = self.get_file("DEPS")
- evaluated = gclient_eval.Parse(deps_file, vars_override=repo_vars, filename="DEPS")
+ evaluated = gclient_eval.Parse(
+ deps_file,
+ filename="DEPS",
+ vars_override=repo_vars,
+ # KeyError: "host_cpu was used as a variable, but was not declared in the vars dict (file 'DEPS', line 114)"
+ # https://chromium.googlesource.com/webpagereplay.git/+/b2b856131e36c99e9de9c419fe8ca02f857082ba/DEPS#114
+ builtin_vars= {"host_cpu": "*host_cpu_placeholder*"} if path == "src/third_party/webpagereplay" else None,
+ )
repo_vars = dict(evaluated.get("vars", {})) | repo_vars
diff --git a/pkgs/applications/networking/browsers/chromium/info.json b/pkgs/applications/networking/browsers/chromium/info.json
index 3b348ec2911a..8953f8ecea4b 100644
--- a/pkgs/applications/networking/browsers/chromium/info.json
+++ b/pkgs/applications/networking/browsers/chromium/info.json
@@ -1,28 +1,27 @@
{
"chromium": {
- "version": "149.0.7827.114",
+ "version": "150.0.7871.186",
"chromedriver": {
- "version": "149.0.7827.115",
- "hash_darwin": "sha256-DOhM1knKphvLNyrkf0uvb9NZ3kBwSuVN5hkQLqAZR1Y=",
- "hash_darwin_aarch64": "sha256-HXWvAjMdMMbeF8DsgFKNM+S0ZEYr2M8Wj0uUZC7tmxY="
+ "version": "150.0.7871.187",
+ "hash_darwin_aarch64": "sha256-+C3GByBglQ49VI/zJ5PqzYdo1bQUDNmHVtjPWx0A4ks="
},
"deps": {
"depot_tools": {
- "rev": "45dedc4c3b87c982fd846b3dc599b233ed3aff90",
- "hash": "sha256-Ttklyw6IdNeMExlzeiQg/qsCkTmqVhUJ34MFgYmCWD4="
+ "rev": "f4fadaf6a5ba1bced9d3d9021060667b563bf583",
+ "hash": "sha256-3atvbwYnFTA40MonAxSQWkF58Jku7O7fUzelGPQvDyY="
},
"gn": {
- "version": "0-unstable-2026-05-01",
- "rev": "1740f5c25bcac5a650ee3d1c1ec22bfa25fcd756",
- "hash": "sha256-oFs7fZAZEs/gQ7X1A4uigo9+Y+iEN9sMMQYwAjEuD04="
+ "version": "0-unstable-2026-05-27",
+ "rev": "3357c4f51b1a9e676378c695dd9c7e9911c35ee6",
+ "hash": "sha256-/1A+DkzAQj2zGPe/A/G0Z3VrYJXUxq4Hd/+d/o5p3G8="
},
"npmHash": "sha256-pF0JtwFpPC4/fodbhSJnQKkczA9WlDg4VqEAy9aDVLg="
},
"DEPS": {
"src": {
"url": "https://chromium.googlesource.com/chromium/src.git",
- "rev": "5be7af702aa73ed64f47858cecc86290e42f2a20",
- "hash": "sha256-R2vnW3Wa+REar23OhyFWzOo44F8NN9IqH7GjWJ1g1lo=",
+ "rev": "0fcdce5f4fdec8d442d7df760cb541f1ca6e446d",
+ "hash": "sha256-6coAYewN8RC5kx0PmmiV6mXQhLqWF3BZP320PmOcPvw=",
"recompress": true
},
"src/third_party/clang-format/script": {
@@ -32,13 +31,13 @@
},
"src/third_party/compiler-rt/src": {
"url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/compiler-rt.git",
- "rev": "0408cce08083f3d81379ed7d9f5bd26c03e1495b",
- "hash": "sha256-kR5osTmp2girvNRVHzEKMZDCelgux9RrRuMoXMCRSGM="
+ "rev": "03641f7a5b05e48e318d64369057db577cafc594",
+ "hash": "sha256-KnWESGG6aI0S+fkJ3/T1x4QSiIYaOOvWUAm6l6l9iME="
},
"src/third_party/libc++/src": {
"url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git",
- "rev": "be1c391acca009d8d80535ce924e3d285451cdfa",
- "hash": "sha256-zKb9PUiiBvhVhWnbQwR8uOFJ9gt3uYmfJ4M9ijpgKRc="
+ "rev": "5abc7f839700f0f17338434e1c1c6a8c87c00c11",
+ "hash": "sha256-vT1km7JgVpotDoNK+ae1gplSHcwrVNLsv/QAFUrDsIM="
},
"src/third_party/libc++abi/src": {
"url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git",
@@ -47,13 +46,13 @@
},
"src/third_party/libunwind/src": {
"url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git",
- "rev": "71192be150bbe04d87bb5298512d464e38d2f654",
- "hash": "sha256-PxXemxdWZoEavKDOovi67IVWEr2YW8YK2F0LXM3LZPw="
+ "rev": "d6c7a21e978f0adaa43accaad53bc64f0b64f6ec",
+ "hash": "sha256-EuaVSYiR7qrlYqBR0UqdWCvwdzJSn0RS2wC/lnP19AE="
},
"src/third_party/llvm-libc/src": {
"url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libc.git",
- "rev": "deb95b5e48e875920a2eaae799c8dbcd76a6a4db",
- "hash": "sha256-oAgIT3+vjBrX86jgi/Pb0SCyco0lozjBjXlrKm6i56M="
+ "rev": "6e5ec6f78d8b9f2e8a50fcc5692d1fc8b2964bde",
+ "hash": "sha256-qrkx8Z1fc088Ja32obIUPxDwklI7i1wdEw051UZ08u8="
},
"src/chrome/test/data/perf/canvas_bench": {
"url": "https://chromium.googlesource.com/chromium/canvas_bench.git",
@@ -72,8 +71,8 @@
},
"src/docs/website": {
"url": "https://chromium.googlesource.com/website.git",
- "rev": "c9a9ad55e9ec9934244e58a5a8cab9a295526010",
- "hash": "sha256-2GKWEnlExrTzoIYMxeP4n2klLLT/phB5ZVJ5Nj3/aoY="
+ "rev": "3da515a67f412be05ea1ea6b39832a69aef8f54e",
+ "hash": "sha256-wrkFsPX7jrsjD/Ow1gna/xLvk0E49m5GVxP1G7Vx7HM="
},
"src/media/cdm/api": {
"url": "https://chromium.googlesource.com/chromium/cdm.git",
@@ -82,8 +81,8 @@
},
"src/net/third_party/quiche/src": {
"url": "https://quiche.googlesource.com/quiche.git",
- "rev": "fafc2fe9efc9f2e28a0815229fc14ca30c266ba8",
- "hash": "sha256-4UmjE41MOFCBa3APDMyyJwkeV6LhHl5UsMxZpPRDsRY="
+ "rev": "997d654308b6a1a17435e472ef5190aecb12e3eb",
+ "hash": "sha256-xgDgW2foZZEWpr0ibSG21kf028FN07/1ecOqFCkNj/I="
},
"src/testing/libfuzzer/fuzzers/wasm_corpus": {
"url": "https://chromium.googlesource.com/v8/fuzzer_wasm_corpus.git",
@@ -92,8 +91,8 @@
},
"src/third_party/angle": {
"url": "https://chromium.googlesource.com/angle/angle.git",
- "rev": "4b8c7f0f321952bba4f81056b4aa57d0d6428642",
- "hash": "sha256-ADG0WfkeFRq4NF0m+s3a/N5+u3q4ApExuWUnV3m5uAI="
+ "rev": "edae461ad2122a3a2be0b5d3d067472aa0e3329c",
+ "hash": "sha256-V4D7jAPJy4llbfJ6WmgCaqaH3TgkWIg5UtRAUaB9dE4="
},
"src/third_party/angle/third_party/glmark2/src": {
"url": "https://chromium.googlesource.com/external/github.com/glmark2/glmark2",
@@ -107,13 +106,18 @@
},
"src/third_party/angle/third_party/VK-GL-CTS/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/VK-GL-CTS",
- "rev": "3fe33a325af90c1c820b1e8109f11ea0f4b60c9b",
- "hash": "sha256-JgOdlwtjC5HiCWBAaeM+Ffp9KlbI7+erT0ZRZBlWxXI="
+ "rev": "01471f4b3846c97eceb5b16b8acad950808791b2",
+ "hash": "sha256-SrL+G3osTtJGQslfCBEYbslb2kWtHRrwO87PHi+5o6E="
},
"src/third_party/anonymous_tokens/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/anonymous-tokens.git",
- "rev": "208ea23596884f6d86476ea88b64e7931cdec08a",
- "hash": "sha256-HLUX0mUzA3xcXbw71sIxFBNEkL8x86urcdJH2Yuuy04="
+ "rev": "92d1fdf881a932e7aa2a9b20e006136a659c7a20",
+ "hash": "sha256-llPt+UR8hY0yaJkYmq+A3ZfRRReuaXN09qpap6C28jc="
+ },
+ "src/third_party/aria-practices/src": {
+ "url": "https://chromium.googlesource.com/external/github.com/w3c/aria-practices.git",
+ "rev": "7b134ce6d19497cce8a67db4a9f59980baf853dc",
+ "hash": "sha256-POnvoO1KfzJj4CbcMPI0pUTRk5EtHLTOyKKmJCZdXOc="
},
"src/third_party/readability/src": {
"url": "https://chromium.googlesource.com/external/github.com/mozilla/readability.git",
@@ -127,13 +131,13 @@
},
"src/third_party/dav1d/libdav1d": {
"url": "https://chromium.googlesource.com/external/github.com/videolan/dav1d.git",
- "rev": "5cfc3832687e3229117203905faf5425ac6bc0d7",
- "hash": "sha256-MWDDrb8P5AIFszY0u5gCrK+kZlbYffIt9Y1b/thXL7I="
+ "rev": "62501cc7db378532d7e85ea434b70d57e1ba2cb0",
+ "hash": "sha256-5cpKTUnhR+QzQJR4KbAvdvqsWnT1fpH0g9MObv8Nx0c="
},
"src/third_party/dawn": {
"url": "https://dawn.googlesource.com/dawn.git",
- "rev": "c1179de12ec3ed8feb91e922f12a90ae33f4a8cf",
- "hash": "sha256-VFEBqbSsn/3jqRGJgTM/r5DEtfhvTOIfS9fGIKzYo9I="
+ "rev": "d089fc91e7e4881362463faf8efe9ae435e34660",
+ "hash": "sha256-ZcfSMBvdAdEJQv+qfwAe8EFHPAfPtuKLTIR5lDRKP3Q="
},
"src/third_party/dawn/third_party/glfw3/src": {
"url": "https://chromium.googlesource.com/external/github.com/glfw/glfw",
@@ -142,8 +146,8 @@
},
"src/third_party/dawn/third_party/directx-shader-compiler/src": {
"url": "https://chromium.googlesource.com/external/github.com/microsoft/DirectXShaderCompiler",
- "rev": "d73829d4e677ef00931e8e57de6d544396ab46cb",
- "hash": "sha256-BIXNgVeF5x3BZWFWZ1Gz+zpNSOEl+hZWB0GgMEaNS2w="
+ "rev": "35c1b99e9e552267da5efaea07c003e322d65777",
+ "hash": "sha256-pzBk+jUp/FUV8ahHquE0942Qw/DjAUemSM9fxdFJ0JA="
},
"src/third_party/dawn/third_party/directx-headers/src": {
"url": "https://chromium.googlesource.com/external/github.com/microsoft/DirectX-Headers",
@@ -152,8 +156,8 @@
},
"src/third_party/dawn/third_party/OpenGL-Registry/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/OpenGL-Registry",
- "rev": "9cb90ca4902d588bef3c830fbb1da484893bd5fb",
- "hash": "sha256-mWVORjrbNFINr5WKAIDVnPs2T+96vkxWqZdJwp8oT9I="
+ "rev": "a30033d3e812c9bf10094f1010374a6b15e192eb",
+ "hash": "sha256-xLacUOSy783bCtv+wUnjVnNLwTQ3eLwUJtYXmELqekY="
},
"src/third_party/dawn/third_party/EGL-Registry/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/EGL-Registry",
@@ -162,8 +166,8 @@
},
"src/third_party/dawn/third_party/webgpu-cts": {
"url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts",
- "rev": "5c6b119c4fa0d9059c45f7637df1fe26fc80a6e4",
- "hash": "sha256-9DAdS2u2YtrCFJu0KTuwRJjTUNexFxdmnn7LkwQ+KiQ="
+ "rev": "f08551b0fc4d6cfa5ba582a0235b571aa363102d",
+ "hash": "sha256-f5kWMnaod/Ved1Fz/vTkdL0ihSUnNM8XN5Ht3Vs1YpU="
},
"src/third_party/dawn/third_party/webgpu-headers/src": {
"url": "https://chromium.googlesource.com/external/github.com/webgpu-native/webgpu-headers",
@@ -187,13 +191,13 @@
},
"src/third_party/boringssl/src": {
"url": "https://boringssl.googlesource.com/boringssl.git",
- "rev": "65818adf16411ca394625f5747a1af28faf95d2c",
- "hash": "sha256-tcTTzQnBp8Od1jdDMrFoCr9bnW0OCjGqUjH3QMnusmo="
+ "rev": "3a9254f16eda7a4c5d2260039ff23456a0a34de4",
+ "hash": "sha256-JuMnNppWhIFHYfk6ANIZLC7ABhqMseoV5LYV7slevBE="
},
"src/third_party/breakpad/breakpad": {
"url": "https://chromium.googlesource.com/breakpad/breakpad.git",
- "rev": "afa2870e449ef33ad41545e7670c574cf70926a4",
- "hash": "sha256-+N6FPtSiLQmNqf5+x5XDSksrRq/YDVSMVx5Rv1PGjfI="
+ "rev": "8ef5673404a3bbc192b0997e1c2df559cc5bd79d",
+ "hash": "sha256-NplvLz9oET6mhTuBkHH6pZc8qdfhqI7g69eZRCyae0A="
},
"src/third_party/cast_core/public/src": {
"url": "https://chromium.googlesource.com/cast_core/public",
@@ -202,13 +206,8 @@
},
"src/third_party/catapult": {
"url": "https://chromium.googlesource.com/catapult.git",
- "rev": "6e4188cabb4f37314ea41e9adfcb2cf9b64e2641",
- "hash": "sha256-/kleYYllR22KjxHT2gTMGf6LEUZ1Ud7j593fIIAgqAA="
- },
- "src/third_party/catapult/third_party/webpagereplay": {
- "url": "https://chromium.googlesource.com/webpagereplay.git",
- "rev": "b7ac48f52cd298e966a76eb054412915c3e445d4",
- "hash": "sha256-smtwB6vzLgCAePz0jNfrpm8TxrxBnBkigLxERhxUEvE="
+ "rev": "2852bb7e91e4995502ffb72b7ed21412ee157914",
+ "hash": "sha256-XYufVvzOXD4voZUWUvumQQqLNsx9sy0QmQzNzrgNEWg="
},
"src/third_party/ced/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/compact_enc_det.git",
@@ -227,13 +226,13 @@
},
"src/third_party/cpu_features/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/cpu_features.git",
- "rev": "d3b2440fcfc25fe8e6d0d4a85f06d68e98312f5b",
- "hash": "sha256-IBJc1sHHh4G3oTzQm1RAHHahsEECC+BDl14DHJ8M1Ys="
+ "rev": "81d13c49649f0714dd41fb56bb246398b6584085",
+ "hash": "sha256-TrC1WMLAhko57rAyDCiAC/IJ0unAqVhyjkh7gKibyi4="
},
"src/third_party/cpuinfo/src": {
"url": "https://chromium.googlesource.com/external/github.com/pytorch/cpuinfo.git",
- "rev": "3681f0ce1446167d01dfe125d6db96ba2ac31c3c",
- "hash": "sha256-PhWbzQgZSUb3eVyx+JTSnxVOAC2WzL2Dw1I9/6LEIsw="
+ "rev": "ea6b9f1bb6e1001d8b21574d5bc78ddef62e499d",
+ "hash": "sha256-/QsOjDik0TnH3FnK7LOwsJkvX+O+2DRFX4eF3MxD3fc="
},
"src/third_party/crc32c/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/crc32c.git",
@@ -242,28 +241,28 @@
},
"src/third_party/cros_system_api": {
"url": "https://chromium.googlesource.com/chromiumos/platform2/system_api.git",
- "rev": "7ecd2b41460516ecd7b7d6e5c298db25e1436b6f",
- "hash": "sha256-ehbAXv4DZStWDMC3iOjmWkAc4PhAamyI4C9bdXO7FfA="
+ "rev": "1c69e700a01a7fd3dd331f526c8a31ac1e5e49d0",
+ "hash": "sha256-qIwUs0KVU9xYFLN3UUayPLfz0ObA+EN6owKPW61J/5w="
},
"src/third_party/crossbench": {
"url": "https://chromium.googlesource.com/crossbench.git",
- "rev": "cecd70a5f49f777f603d38d11ac1f66c03c3e8af",
- "hash": "sha256-zLwIY8fQVebkfN4KFMbitZODhmiN65JK2s9IG/5Cd+o="
+ "rev": "7d52b4ffbc319a7d5a0e0a0ebff744e5281d60c5",
+ "hash": "sha256-iwwvvIOuRMo/ZEu8Gk0lZaS4P5uGt8zpnYMChpZPcUo="
},
"src/third_party/crossbench-web-tests": {
"url": "https://chromium.googlesource.com/chromium/web-tests.git",
- "rev": "baf176aadedccc44329231d5dd40346874c2a63e",
- "hash": "sha256-oY1/uGB6ykePIklWe35rmJWsnpu/wjkER4TJeP4TTdw="
+ "rev": "7b3de17542cc613aaddbfc72c6e12be37eed7b73",
+ "hash": "sha256-7ly4vaK+Pj4y91t6Q+igQ0890CqKyu9jNBhJnxbNGjI="
},
"src/third_party/depot_tools": {
"url": "https://chromium.googlesource.com/chromium/tools/depot_tools.git",
- "rev": "45dedc4c3b87c982fd846b3dc599b233ed3aff90",
- "hash": "sha256-Ttklyw6IdNeMExlzeiQg/qsCkTmqVhUJ34MFgYmCWD4="
+ "rev": "f4fadaf6a5ba1bced9d3d9021060667b563bf583",
+ "hash": "sha256-3atvbwYnFTA40MonAxSQWkF58Jku7O7fUzelGPQvDyY="
},
"src/third_party/devtools-frontend/src": {
"url": "https://chromium.googlesource.com/devtools/devtools-frontend",
- "rev": "33c2f401a9c8ddad2159eb0ab83aa244a5247361",
- "hash": "sha256-M9aULI+HECgA0ptAG47OPK0QuB+xzmb29iOtJ3whpB0="
+ "rev": "ec97cf3bbeea2cb623fbf97c4e3f22f5acb4d568",
+ "hash": "sha256-kbGcNwpdmqFTIAe/OU3Y1C13ZEHz5OP+QDAExg6tw2g="
},
"src/third_party/dom_distiller_js/dist": {
"url": "https://chromium.googlesource.com/chromium/dom-distiller/dist.git",
@@ -277,8 +276,8 @@
},
"src/third_party/eigen3/src": {
"url": "https://chromium.googlesource.com/external/gitlab.com/libeigen/eigen.git",
- "rev": "2cf9891537250255f50df5109ffe9e700e2a73de",
- "hash": "sha256-1bu1Y9itHIKcwY5J0sF08DSyfElLHiZ6SRsNZkFjz8o="
+ "rev": "662ba79d796a2851b10cdafc6668e45b65b1120f",
+ "hash": "sha256-6bZFDeo7TqWNunkkQv8OJ+7/hfKwoIUtqZoXaeLp6M8="
},
"src/third_party/farmhash/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/farmhash.git",
@@ -287,18 +286,18 @@
},
"src/third_party/fast_float/src": {
"url": "https://chromium.googlesource.com/external/github.com/fastfloat/fast_float.git",
- "rev": "05087a303dad9c98768b33c829d398223a649bc6",
- "hash": "sha256-ZQm8kDMYdwjKugc2vBG5mwTqXa01u6hODQc/Tai2I9A="
+ "rev": "cfd12ebcf1f82c4fd44a950b1815dd0549bc8d89",
+ "hash": "sha256-hzoB+Mmok3oe6B494uLc5ReWpUcB89zCGPYw4gvanK0="
},
"src/third_party/federated_compute/src": {
"url": "https://chromium.googlesource.com/external/github.com/google-parfait/federated-compute.git",
- "rev": "3112513bf1a80872311e7718c5385f535a819b89",
- "hash": "sha256-jnG3PCxjaYcClRgzOfIkHbbD3xU9TDLyQR3VZUwHIgU="
+ "rev": "8de5837b817f28abc54a387a9417631b905ba90a",
+ "hash": "sha256-GZYo0FjgW8XCplAi6jzzruwDlIzsWjNEVQuCwXBCPz8="
},
"src/third_party/ffmpeg": {
"url": "https://chromium.googlesource.com/chromium/third_party/ffmpeg.git",
- "rev": "f45bab87ce4c5fafc67fd53fcde777578d01bfa0",
- "hash": "sha256-fsZSqmG6vFOPJYuBgG6OSWkzRu27B3mv/PqAP8s4ARk="
+ "rev": "ad41607c61898cf7150e0fb20fe4bbabd44922a3",
+ "hash": "sha256-41qpsOTedB51WMzzHXDiXA19OIzA7wG/Qgbz6IkmWpk="
},
"src/third_party/flac": {
"url": "https://chromium.googlesource.com/chromium/deps/flac.git",
@@ -327,8 +326,8 @@
},
"src/third_party/freetype/src": {
"url": "https://chromium.googlesource.com/chromium/src/third_party/freetype2.git",
- "rev": "b6bcd2177f72bb4842c7701d7b7f633bb3fc951a",
- "hash": "sha256-TUz3yUD9HxqUMCOpLk74rEf8J0tMTh4ZCuD94AD4+q4="
+ "rev": "b08a2eb0dd37f4a6c886fa5b0ecf5b3e1d27aac7",
+ "hash": "sha256-xnYeUAJx5n8LSg04AknfiudonfmlUdlj8nzHzSZi65I="
},
"src/third_party/fxdiv/src": {
"url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/FXdiv.git",
@@ -337,13 +336,13 @@
},
"src/third_party/harfbuzz/src": {
"url": "https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git",
- "rev": "e6741e2205309752839da60ff075b7fa2e7cddd3",
- "hash": "sha256-XjUuY17fcZi+dIZFojq+eDsDVrBxtAWRydPdudt56+8="
+ "rev": "d639197ed529b05c27f38ebaab365a621d5edad5",
+ "hash": "sha256-uT4zK2hwHzEH6Nrd2rAeyzpQA1TmwtrdcujKYEUbLsY="
},
"src/third_party/ink/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/ink.git",
- "rev": "a988417b6d0b1ea03fb0b40269fbc42313acc6fd",
- "hash": "sha256-6O+N/ULn8sqsdgFw7VZ7TMjWvCAZbYo398PruPScU/k="
+ "rev": "0f9c6172b2ccc6b830ae313d522caf09e6933e06",
+ "hash": "sha256-LF+OcqNeg+KRuYmGuMZb4tmnr53sZHn/ZW1jg9ArPfc="
},
"src/third_party/instrumented_libs": {
"url": "https://chromium.googlesource.com/chromium/third_party/instrumented_libraries.git",
@@ -367,8 +366,8 @@
},
"src/third_party/libgav1/src": {
"url": "https://chromium.googlesource.com/codecs/libgav1.git",
- "rev": "40f58ed32ff39071c3f2a51056dbc49a070af0dc",
- "hash": "sha256-gisU0p0HDL7Po/ZXIIZVOTnxnOuVvSE/FYo9DaEUFfo="
+ "rev": "66ac17620652635392f6ab24065c77b035e281c9",
+ "hash": "sha256-6/zMaX2DPSKpsaqirhrgi3nL/88Qr2VXacmyL5IyJ3U="
},
"src/third_party/googletest/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/googletest.git",
@@ -392,8 +391,8 @@
},
"src/third_party/jsoncpp/source": {
"url": "https://chromium.googlesource.com/external/github.com/open-source-parsers/jsoncpp.git",
- "rev": "42e892d96e47b1f6e29844cc705e148ec4856448",
- "hash": "sha256-bSLNcoYBz3QCt5VuTR056V9mU2PmBuYBa0W6hFg2m8Q="
+ "rev": "d4d072177213b117fb81d4cfda140de090616161",
+ "hash": "sha256-q+DOwkjRlHacgfWf5UVY02aqfnKK9M/1YRBX6aMce9g="
},
"src/third_party/leveldatabase/src": {
"url": "https://chromium.googlesource.com/external/leveldb.git",
@@ -407,8 +406,8 @@
},
"src/third_party/fuzztest/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/fuzztest.git",
- "rev": "e24a91020ab19c3d6f590bd0911b7acb492f81be",
- "hash": "sha256-wFjuvJzGEaal+pIo5UtkdLHYTpoWxRE6Vf5OGLObGQk="
+ "rev": "da27bcae1a8902af1ae6a5c55d3674f22709bbf5",
+ "hash": "sha256-317zRhJPc0D9A58W8fdCGFmpNZ5vACfd/tlZOsp/Cvw="
},
"src/third_party/domato/src": {
"url": "https://chromium.googlesource.com/external/github.com/googleprojectzero/domato.git",
@@ -417,18 +416,18 @@
},
"src/third_party/libaddressinput/src": {
"url": "https://chromium.googlesource.com/external/libaddressinput.git",
- "rev": "e20690c8d5178bb282641d5eb06ef0298ff4cbc5",
- "hash": "sha256-rX7LQNUgk5ZljUrayD1a/SUrBrvpomW0Cs0KBw3lYu4="
+ "rev": "81eb9628382b07d371d8ea0b11badf7de3857fd5",
+ "hash": "sha256-6yDZpZ+CwxGqNO4+lZLFB6ESREeVku1BoOMtR+hKQ3I="
},
"src/third_party/libaom/source/libaom": {
"url": "https://aomedia.googlesource.com/aom.git",
- "rev": "33dba9e12a9f12e737eaa7c2624e8c580950a89a",
- "hash": "sha256-01DbV0kQFg1yyFpVeo82KBoZHhizA7xnZ1qOuu4HTcs="
+ "rev": "137bcff61e73fdd2836dc04e8258bfb49cef595e",
+ "hash": "sha256-oDubKvgqMk3w0luM//rR3NnCOk1h/WVTyRkuCmYASrw="
},
"src/third_party/crabbyavif/src": {
"url": "https://chromium.googlesource.com/external/github.com/webmproject/CrabbyAvif.git",
- "rev": "c433c9a32320aed983e4106931596fbbae3f77ee",
- "hash": "sha256-yw1cXB6s6biD2vj2K/3sVbKiaNK7bt+NkbQovbYlJ2Q="
+ "rev": "5e140b5abb9a91eb25b5ef66d29f6ee784ab7eab",
+ "hash": "sha256-tN+2YH2O9FTV50o4OVhKcKdwRwTI8NuNA0WqljUcrmo="
},
"src/third_party/nearby/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/nearby-connections.git",
@@ -442,8 +441,8 @@
},
"src/third_party/jetstream/main": {
"url": "https://chromium.googlesource.com/external/github.com/WebKit/JetStream.git",
- "rev": "de88e36ae91d5bd13126fa4cc4b0e0346d779842",
- "hash": "sha256-ZpU0ONqIVmY2VR0MxqtYj8KPNlK0L21gLJuT/Ff7KI8="
+ "rev": "b7babdf323e64e69bd2f6c376189c15825f5c73a",
+ "hash": "sha256-s6UMdUYWZqk/MbhyCi2zdQNgni98gGsYxcuUh/5AUy0="
},
"src/third_party/jetstream/v2.2": {
"url": "https://chromium.googlesource.com/external/github.com/WebKit/JetStream.git",
@@ -482,8 +481,8 @@
},
"src/third_party/cros-components/src": {
"url": "https://chromium.googlesource.com/external/google3/cros_components.git",
- "rev": "e580888fcc1c108e25c218ccf8b7a4372de18d57",
- "hash": "sha256-p0Wfvhg/j8v9xL9Pueo7xPVHBKowOLI00AeIZXPQw4k="
+ "rev": "0abb2efaa3d16db861c9710b193c39e657ac3bdf",
+ "hash": "sha256-viuntf6umyLZwDR9BXG+ZOakp9f8rvpZYDBYAUkKzL4="
},
"src/third_party/libdrm/src": {
"url": "https://chromium.googlesource.com/chromiumos/third_party/libdrm.git",
@@ -492,8 +491,8 @@
},
"src/third_party/expat/src": {
"url": "https://chromium.googlesource.com/external/github.com/libexpat/libexpat.git",
- "rev": "f31adfd584b7f6c50bbf4d22eb928538ffc9145a",
- "hash": "sha256-tLz4RejYQ/kFXhsWTduuGcinfUkqxYKPCpsou+WlvBc="
+ "rev": "9bdfbc77e3355405ceefbe59420abed953a5657e",
+ "hash": "sha256-veGg5/QjtBSmxYa8IyHF0NxEdJzlcJSZfzw8ay3ASVU="
},
"src/third_party/libipp/libipp": {
"url": "https://chromium.googlesource.com/chromiumos/platform2/libipp.git",
@@ -502,8 +501,8 @@
},
"src/third_party/libjpeg_turbo": {
"url": "https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git",
- "rev": "d1f5f2393e0d51f840207342ae86e55a86443288",
- "hash": "sha256-KGeB/lTjhm8DQBDZVSPENvZEGSHeLTkviJrYsFh5vEM="
+ "rev": "640f254ad0fa03f6b1f29f89b7dd9366f2f6e533",
+ "hash": "sha256-wor4RTF3/5BFL9EWcGEofY+M4HN2+/KJUaOY+u86K5Q="
},
"src/third_party/liblouis/src": {
"url": "https://chromium.googlesource.com/external/liblouis-github.git",
@@ -512,8 +511,8 @@
},
"src/third_party/libphonenumber/src": {
"url": "https://chromium.googlesource.com/external/libphonenumber.git",
- "rev": "ade546d8856475d0493863ee270eb3be9628106b",
- "hash": "sha256-cLtsM35Ir3iG3j8+Cy2McL1ysRB0Y1PXealAKl05Twg="
+ "rev": "c25558e39e2bcc9f26f7a2a1ef804324169eaf8f",
+ "hash": "sha256-Lr/gB5Em+TE092McPwJdOU0Ab4zyP4/2ZxlavMZMm+s="
},
"src/third_party/libprotobuf-mutator/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/libprotobuf-mutator.git",
@@ -537,8 +536,8 @@
},
"src/third_party/libvpx/source/libvpx": {
"url": "https://chromium.googlesource.com/webm/libvpx.git",
- "rev": "640d4ce27ba918783e28a0da46a8a37abe4a65b6",
- "hash": "sha256-uCa/MEfw2s05kK91uubi/TqztHulwattzt1vfr0LR4E="
+ "rev": "5f00413667d19ad683674524a9d03543d86d188b",
+ "hash": "sha256-uTteQ+z7t5KOtPuBoZazmonRHd8jGS1/YZAq+RAvhX4="
},
"src/third_party/libwebm/source": {
"url": "https://chromium.googlesource.com/webm/libwebm.git",
@@ -552,8 +551,8 @@
},
"src/third_party/libyuv": {
"url": "https://chromium.googlesource.com/libyuv/libyuv.git",
- "rev": "644251f252a84bf8ce91ff0aca86a9b16b069ab8",
- "hash": "sha256-DsoOY8bg0sPOF8tF67Gk7fRqdQzG1hc9fVMlZVjKWU4="
+ "rev": "8aeb3a9ca36341a640528e59b34b5d641080dca8",
+ "hash": "sha256-FGl0xK7ooaRFzFBxuV6oOu3h1x2b/myLLO2En3xgVCk="
},
"src/third_party/lss": {
"url": "https://chromium.googlesource.com/linux-syscall-support.git",
@@ -572,8 +571,8 @@
},
"src/third_party/nasm": {
"url": "https://chromium.googlesource.com/chromium/deps/nasm.git",
- "rev": "358842b6b7dd69b2ed635bef17f941e030a05e5f",
- "hash": "sha256-YwjwubijMZ9OvYeMUVMSunWZ2VCuqUFEOyv/MK/oojc="
+ "rev": "525a09a813be0f75b646ee93fc2a31c27b87d722",
+ "hash": "sha256-uC6bGxSdz1V2SXIQjMsDd6555b3gAPN1Y0ZQtWoqDww="
},
"src/third_party/neon_2_sse/src": {
"url": "https://chromium.googlesource.com/external/github.com/intel/ARM_NEON_2_x86_SSE.git",
@@ -587,8 +586,8 @@
},
"src/third_party/openscreen/src": {
"url": "https://chromium.googlesource.com/openscreen",
- "rev": "684bcd767271a21f3e5d475b17a0fd862f16c65e",
- "hash": "sha256-Yjz2E1/h+zp7L2x0zE0l+ktQIiSrJ4ZknXOhaVPKQVE="
+ "rev": "37ff938a93cb04c6b77e019b52328c8e9b320317",
+ "hash": "sha256-M57un/TVQPfTnKScVHS1VK1cUs8F/YPT3TwMVdo+mhM="
},
"src/third_party/openscreen/src/buildtools": {
"url": "https://chromium.googlesource.com/chromium/src/buildtools",
@@ -602,13 +601,13 @@
},
"src/third_party/pdfium": {
"url": "https://pdfium.googlesource.com/pdfium.git",
- "rev": "74d747ce1d383caca3ec0e604d77bac35ccd1e58",
- "hash": "sha256-qMY6L93hlnMgGZ5Blk5ldDnI/LUXYyuk+b7FXCiVV6s="
+ "rev": "c052afb72a08d79a26bcf3103d11f344981b09f1",
+ "hash": "sha256-zqfErp0pDXHXIvRpZ1TJu2UGXNZjATRbPgQWTniKTJs="
},
"src/third_party/perfetto": {
"url": "https://chromium.googlesource.com/external/github.com/google/perfetto.git",
- "rev": "97c58a94bb6495c4e202467fb1c55eaa22b5670f",
- "hash": "sha256-qtClkWAluLDRZn7yrHLU7qp9szP+/WsiG5JZZzRKd38="
+ "rev": "9ede949f025303868fa0c42418f122ac47312539",
+ "hash": "sha256-IRzEqgunO4Nfz+FkYir8G/Ht+Zsn6wpzncgkEFpsC+k="
},
"src/third_party/protobuf-javascript/src": {
"url": "https://chromium.googlesource.com/external/github.com/protocolbuffers/protobuf-javascript",
@@ -617,8 +616,8 @@
},
"src/third_party/pthreadpool/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/pthreadpool.git",
- "rev": "a56dcd79c699366e7ac6466792c3025883ff7704",
- "hash": "sha256-WfyuPfII4eSmLskZV0TAcu4K6OyW38TjkDHm+VUx5eY="
+ "rev": "02460584c6092e527c8b89f7df4de143d70e801f",
+ "hash": "sha256-4EHJzZT+Gbhs8SkOhjSvDIPEqIQU93oJmtF3c/T+qjw="
},
"src/third_party/pyelftools": {
"url": "https://chromium.googlesource.com/chromiumos/third_party/pyelftools.git",
@@ -647,13 +646,18 @@
},
"src/third_party/search_engines_data/resources": {
"url": "https://chromium.googlesource.com/external/search_engines_data.git",
- "rev": "2345fee6ce4ae24d9c365d5c0884ece593c55c67",
- "hash": "sha256-5qkra6FURaMvEOk+ZKMRH1hc8ixEnk3u4rxNm0G8tuQ="
+ "rev": "1aab872af8d44dcf59362d7ba8255922f74fafde",
+ "hash": "sha256-5/XnNx6Pyk4KBb9krVo9u6i7LWNrsLLOIi4qhEY2PZc="
+ },
+ "src/third_party/sframe/src": {
+ "url": "https://chromium.googlesource.com/external/github.com/cisco/sframe",
+ "rev": "b14090904433bed0d4ec3f875b9b39f3e0555930",
+ "hash": "sha256-bw+6ycUpnFZJhtXFUzr7XTOljNrs+7oFdVY+LN0Rqek="
},
"src/third_party/skia": {
"url": "https://skia.googlesource.com/skia.git",
- "rev": "92a56ebeef43061f4878aa869aa1f2160265c24c",
- "hash": "sha256-QEY9Wy2guRuS4CXeXHUhUNigCJWWndnNCbWQmaSYJ/A="
+ "rev": "587c5b0f5a7b0260826a0c19094c2d952195066e",
+ "hash": "sha256-COvdvWVfafVhccLIj2dJzu62Rbyi3oDgORtjIGolCRo="
},
"src/third_party/smhasher/src": {
"url": "https://chromium.googlesource.com/external/smhasher.git",
@@ -667,13 +671,13 @@
},
"src/third_party/sqlite/src": {
"url": "https://chromium.googlesource.com/chromium/deps/sqlite.git",
- "rev": "508ab21dc25702ed6690c4dd77da209a6bcd1239",
- "hash": "sha256-SfvLfBKdPjFvZ7CzUeFMcyoHdCzQgNRQwZyzb6MRtJg="
+ "rev": "fc121d7d03cd6cbf499ec06a5112b263471b1181",
+ "hash": "sha256-hf9PxQhXEKT49GbkFYCvRPBT0Qu+hDnDpebI92yO1Oo="
},
"src/third_party/swiftshader": {
"url": "https://swiftshader.googlesource.com/SwiftShader.git",
- "rev": "f9d5d49a3c599a315e3493dc1e9b5309cffb3305",
- "hash": "sha256-kBfqgXXJeEPT80mu6CJ2Bwmdv/y8jVzM6TedMXbzo4o="
+ "rev": "fce27a96526f54c6d31fdccf57629788e3712220",
+ "hash": "sha256-bmXZLpz3wv7eQWoqTjZmjwnnILWSIjZ8iqo8CeLk5fw="
},
"src/third_party/text-fragments-polyfill/src": {
"url": "https://chromium.googlesource.com/external/github.com/GoogleChromeLabs/text-fragments-polyfill.git",
@@ -682,23 +686,23 @@
},
"src/third_party/tflite/src": {
"url": "https://chromium.googlesource.com/external/github.com/tensorflow/tensorflow.git",
- "rev": "2216f531fb72119745382c62f232acf9790f4b6e",
- "hash": "sha256-zySLNPmug5HS5pwJ/lEMAWjjZSOuxdTgup7Y90k7NZI="
+ "rev": "999d49c10046e240cd5366d349d3a5f6af16a0d4",
+ "hash": "sha256-eSqaWXtzZ4Bi9ilaJYGdZamzUjmo+AtDZ9KeZhsc/fY="
},
"src/third_party/litert/src": {
"url": "https://chromium.googlesource.com/external/github.com/google-ai-edge/LiteRT.git",
- "rev": "9b5418dd7a1a318eed20395743dcc868df17d8b0",
- "hash": "sha256-80amwDPF3RrcoTaTQsunNmlvBGs6KCv369FW3J/Xcts="
+ "rev": "09b4b05203fd7a9402ffcce9cc736d887ff7e3fc",
+ "hash": "sha256-skMOzpsn67mmOAp7Mf6UrJdi2lbiQQ8b6kBy4Ik2ED8="
},
"src/third_party/vulkan-deps": {
"url": "https://chromium.googlesource.com/vulkan-deps",
- "rev": "d234b7b29748c07ef389279dd24f533ebd04cadc",
- "hash": "sha256-w49HOjPixSI/C5IGlxQMj/Ol9f/Lr2zI2oMhQzzu1zk="
+ "rev": "669a28b1f31f89bfc46b74791f127bcc5e5b2f06",
+ "hash": "sha256-lsR+sh+XQP/wKgkBbie6Gp+kQNFnnC8TeNWpiWTdevw="
},
"src/third_party/glslang/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang",
- "rev": "458ff50a67cb69371850068a62b78f1990a1ff9a",
- "hash": "sha256-2WauVjAEeZn16b4fE4ImKPX3wjDmeN92mqWi3NMiXSw="
+ "rev": "f6d9303ddaf2e879b9155f7186cd234f5a79079c",
+ "hash": "sha256-ru3QVyyyqxZRcvSpy9pYhHHhkjuLVhQbgOT/vQJ/oIw="
},
"src/third_party/spirv-cross/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross",
@@ -707,43 +711,43 @@
},
"src/third_party/spirv-headers/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers",
- "rev": "126038020c2bd47efaa942ccc364ca5353ffccde",
- "hash": "sha256-QBX2M+ZSWgVvCx58NeDIdf6mIkdJbecDktBfUWGPvNc="
+ "rev": "1e770e7de8373a8dd49f23416cf7ca4001d01040",
+ "hash": "sha256-t8Shkoa90TJt1MbTOefnLaguW4eYKsRFO1Jd0AUc70Y="
},
"src/third_party/spirv-tools/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools",
- "rev": "2ec8457ab33d539b6f1fecc998360c0b8b05ed4f",
- "hash": "sha256-9TBb/gnDXgZRZXhF27KEQ0XQI5itRHKJQjLrkFDQq7Q="
+ "rev": "b38c4f83024546d4000b2db8e2294cf81b7f26e0",
+ "hash": "sha256-q5G4B75xBIXl1aG/vzbIDrc3Hs/MFoQ4nwh4ozb8hys="
},
"src/third_party/vulkan-headers/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers",
- "rev": "f6a6f7ab165cedbfa2a7d0c93fe27a2d01ce09c8",
- "hash": "sha256-ZbjmxbRUiVJADNRWziCH0UIM09qKf+lm9PRnWOhZFhQ="
+ "rev": "015e25c3c91b70eb1a754d36fb14c4ba6ad9b0b9",
+ "hash": "sha256-pUxPwFGbOzP8ymTooeA1slFWEFsRoqUROSnndVtLiY8="
},
"src/third_party/vulkan-loader/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader",
- "rev": "15a84652b94e465e9a7b25eb507193929863bc2f",
- "hash": "sha256-pdC3YCM0Nzeabi5TPD+qR5PVdsxmWMnf2L9HsOcbv84="
+ "rev": "cf0cf82ea16c0ff0be75940f282540d6085b2d3b",
+ "hash": "sha256-uyoysS7lSBNDRfvcwPT+gQqhE20UxiYUEw1UXnYS3fY="
},
"src/third_party/vulkan-tools/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools",
- "rev": "7c46da2b39036a80ce088576d5794bf39e667f56",
- "hash": "sha256-nAyNVveeGg9sA0E37YiEPm+UdKsy48nAOjnUYHQnuqw="
+ "rev": "e3d18f90c0b8ef1f52539e0674a42f0adfe30381",
+ "hash": "sha256-Hs9N0FM3eWWjLm4BrDJoZIrsPDVFx0iRAJeQ4gHTM7o="
},
"src/third_party/vulkan-utility-libraries/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Utility-Libraries",
- "rev": "2c909c1ab6f9c6caba39a84a4887186b3fafdead",
- "hash": "sha256-k3xeKHQbd2rTQJsOZKXEMPrYjcHwoCC1N12F6AIP6Ho="
+ "rev": "8383c46b129c2b3a5f3833e602d946d2fcc57e39",
+ "hash": "sha256-ZBie5uDTVEehxRQW1GZY5Ki/bnp82LoW3jfMUFL0O9A="
},
"src/third_party/vulkan-validation-layers/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers",
- "rev": "b105d8ea361af258abed65efb5a1565c031dcf1c",
- "hash": "sha256-GgznBGYgnCFMNaqAOQ15dlw2dOFfSp3mAV2KokVLzgk="
+ "rev": "044eaba8a34a6e3bfb1d6aafac7c01068813a2b6",
+ "hash": "sha256-i3hochkK0LZPg8CsZMFkAL+8tf8QuuwtApAc4FDd0RM="
},
"src/third_party/vulkan_memory_allocator": {
"url": "https://chromium.googlesource.com/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git",
- "rev": "cb0597213b0fcb999caa9ed08c2f88dc45eb7d50",
- "hash": "sha256-yBCs3zfqs/60htsZAOscjcyKhVbAWE6znweuXcs1oKo="
+ "rev": "7e55b011e16182fc349149abbd3aaf3b1db46421",
+ "hash": "sha256-fOnFkcQDEGIe5yB507qnP9nA1LBBPFblncNiJ8JxAwI="
},
"src/third_party/wayland/src": {
"url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/wayland.git",
@@ -777,18 +781,23 @@
},
"src/third_party/webgpu-cts/src": {
"url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts.git",
- "rev": "3b327ebc44f11212fd3872972a6dd394634fb9e3",
- "hash": "sha256-RSZVKv2Z0pg2cGa3Elr2r5VZqdxlRJ+6mzm1Au1qg1I="
+ "rev": "b507bd117e53db86f2fb52d0d858d3ae7d684a85",
+ "hash": "sha256-6Y5Z0ErtsZdbuWTHa+PEiOxcZSbjBcnuOHbgtI1/+80="
},
"src/third_party/webpagereplay": {
"url": "https://chromium.googlesource.com/webpagereplay.git",
- "rev": "b7ac48f52cd298e966a76eb054412915c3e445d4",
- "hash": "sha256-smtwB6vzLgCAePz0jNfrpm8TxrxBnBkigLxERhxUEvE="
+ "rev": "b2b856131e36c99e9de9c419fe8ca02f857082ba",
+ "hash": "sha256-+hcaP7C5Eh3SLl5B8mRgOVdM/tvnFnb/oqUIWPoe0NA="
+ },
+ "src/third_party/webpagereplay/third_party/clang-format/script": {
+ "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/clang/tools/clang-format.git",
+ "rev": "6eddfb5ec5f92127a531eda66c568d3a11e7ec11",
+ "hash": "sha256-Cm6BOOlEyD0kdYxMSmk6Fj1Dnfs3zCzXsm+BOXgBme0="
},
"src/third_party/webrtc": {
"url": "https://webrtc.googlesource.com/src.git",
- "rev": "e8b4d4c5952a8fb7b35c2a6cba4e8c3de2ea2e1e",
- "hash": "sha256-94U9URlFGLYe94KCFU0giY9bBbrHNDCBr9GEwbRbOK4="
+ "rev": "1f975dfd761af6e5d76d28333191973b258d82a8",
+ "hash": "sha256-ucH+9HBkFyOKEItAWVoYmEzyU7h/UgWIvp/eC/JqGWU="
},
"src/third_party/wuffs/src": {
"url": "https://skia.googlesource.com/external/github.com/google/wuffs-mirror-release-c.git",
@@ -802,8 +811,8 @@
},
"src/third_party/xnnpack/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/XNNPACK.git",
- "rev": "2ad25fc09167df69c6c02eb8082a0b9658dd5e80",
- "hash": "sha256-vBMGBXzJPCcsc2kMyGecjti68oZHWUwJKd7tkKub6kg="
+ "rev": "56ac34b3f45fae2eca1f32584f7f0b279be2cf1f",
+ "hash": "sha256-uw3r5g5rWamlFubBkXDb4KRx3hkOAoQyFo8l95GYGZI="
},
"src/third_party/libei/src": {
"url": "https://chromium.googlesource.com/external/gitlab.freedesktop.org/libinput/libei.git",
@@ -812,39 +821,44 @@
},
"src/third_party/zstd/src": {
"url": "https://chromium.googlesource.com/external/github.com/facebook/zstd.git",
- "rev": "3ae099b48dfcfe02b1b3ba81ab85457f8a922e9f",
- "hash": "sha256-futF0sM6z9HAl6AMJwUULBRByN92FTBjRIzYb2vBFGg="
+ "rev": "5233c58e6ca0b1c4c6b353ad79649191ed195bdc",
+ "hash": "sha256-vEl0s7Mjh+5rciOMxm99PNWiamtCk+sTN4lRYKCIZ+8="
},
"src/v8": {
"url": "https://chromium.googlesource.com/v8/v8.git",
- "rev": "16ef80c1f5d3cfade812bd1743952a4cfd480a31",
- "hash": "sha256-GI0NWA0XYGocxZp3+lPen6BkwaG7X3EDaEWM9rejgkI="
+ "rev": "49df3678d1b6a1511167b15a6b7499d3ab37a638",
+ "hash": "sha256-T9FWX3zuP1V7wvxeHgv2MEfRiwbJC0ElI3eazSYq3fs="
+ },
+ "src/agents/shared": {
+ "url": "https://chromium.googlesource.com/chromium/agents.git",
+ "rev": "e75efa515896f6bf1dea92eaffbcf8ee711a65d8",
+ "hash": "sha256-z2GrzF8jDkdfBdq1HP3gTgQpoqjmhc80kEZBmlue0os="
}
}
},
"ungoogled-chromium": {
- "version": "149.0.7827.114",
+ "version": "150.0.7871.181",
"deps": {
"depot_tools": {
- "rev": "45dedc4c3b87c982fd846b3dc599b233ed3aff90",
- "hash": "sha256-Ttklyw6IdNeMExlzeiQg/qsCkTmqVhUJ34MFgYmCWD4="
+ "rev": "f4fadaf6a5ba1bced9d3d9021060667b563bf583",
+ "hash": "sha256-3atvbwYnFTA40MonAxSQWkF58Jku7O7fUzelGPQvDyY="
},
"gn": {
- "version": "0-unstable-2026-05-01",
- "rev": "1740f5c25bcac5a650ee3d1c1ec22bfa25fcd756",
- "hash": "sha256-oFs7fZAZEs/gQ7X1A4uigo9+Y+iEN9sMMQYwAjEuD04="
+ "version": "0-unstable-2026-05-27",
+ "rev": "3357c4f51b1a9e676378c695dd9c7e9911c35ee6",
+ "hash": "sha256-/1A+DkzAQj2zGPe/A/G0Z3VrYJXUxq4Hd/+d/o5p3G8="
},
"ungoogled-patches": {
- "rev": "149.0.7827.114-1",
- "hash": "sha256-F0pIlZM/EBPLIZxD8jyLX7HWe0vFn2HXs2vkM5+Xplg="
+ "rev": "150.0.7871.181-1",
+ "hash": "sha256-ifqEnOcvi49cFOYan8ShiwteXYnFrLPclrIBZiE1rGY="
},
"npmHash": "sha256-pF0JtwFpPC4/fodbhSJnQKkczA9WlDg4VqEAy9aDVLg="
},
"DEPS": {
"src": {
"url": "https://chromium.googlesource.com/chromium/src.git",
- "rev": "5be7af702aa73ed64f47858cecc86290e42f2a20",
- "hash": "sha256-R2vnW3Wa+REar23OhyFWzOo44F8NN9IqH7GjWJ1g1lo=",
+ "rev": "24b04c927b23c39cf9c5227cc8dc6f64a744c8e9",
+ "hash": "sha256-F52wmxyNPEV26v8YgAz+MRhyEGyV7YUX+/wj95H4Lf0=",
"recompress": true
},
"src/third_party/clang-format/script": {
@@ -854,13 +868,13 @@
},
"src/third_party/compiler-rt/src": {
"url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/compiler-rt.git",
- "rev": "0408cce08083f3d81379ed7d9f5bd26c03e1495b",
- "hash": "sha256-kR5osTmp2girvNRVHzEKMZDCelgux9RrRuMoXMCRSGM="
+ "rev": "03641f7a5b05e48e318d64369057db577cafc594",
+ "hash": "sha256-KnWESGG6aI0S+fkJ3/T1x4QSiIYaOOvWUAm6l6l9iME="
},
"src/third_party/libc++/src": {
"url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git",
- "rev": "be1c391acca009d8d80535ce924e3d285451cdfa",
- "hash": "sha256-zKb9PUiiBvhVhWnbQwR8uOFJ9gt3uYmfJ4M9ijpgKRc="
+ "rev": "5abc7f839700f0f17338434e1c1c6a8c87c00c11",
+ "hash": "sha256-vT1km7JgVpotDoNK+ae1gplSHcwrVNLsv/QAFUrDsIM="
},
"src/third_party/libc++abi/src": {
"url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git",
@@ -869,13 +883,13 @@
},
"src/third_party/libunwind/src": {
"url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind.git",
- "rev": "71192be150bbe04d87bb5298512d464e38d2f654",
- "hash": "sha256-PxXemxdWZoEavKDOovi67IVWEr2YW8YK2F0LXM3LZPw="
+ "rev": "d6c7a21e978f0adaa43accaad53bc64f0b64f6ec",
+ "hash": "sha256-EuaVSYiR7qrlYqBR0UqdWCvwdzJSn0RS2wC/lnP19AE="
},
"src/third_party/llvm-libc/src": {
"url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libc.git",
- "rev": "deb95b5e48e875920a2eaae799c8dbcd76a6a4db",
- "hash": "sha256-oAgIT3+vjBrX86jgi/Pb0SCyco0lozjBjXlrKm6i56M="
+ "rev": "6e5ec6f78d8b9f2e8a50fcc5692d1fc8b2964bde",
+ "hash": "sha256-qrkx8Z1fc088Ja32obIUPxDwklI7i1wdEw051UZ08u8="
},
"src/chrome/test/data/perf/canvas_bench": {
"url": "https://chromium.googlesource.com/chromium/canvas_bench.git",
@@ -894,8 +908,8 @@
},
"src/docs/website": {
"url": "https://chromium.googlesource.com/website.git",
- "rev": "c9a9ad55e9ec9934244e58a5a8cab9a295526010",
- "hash": "sha256-2GKWEnlExrTzoIYMxeP4n2klLLT/phB5ZVJ5Nj3/aoY="
+ "rev": "3da515a67f412be05ea1ea6b39832a69aef8f54e",
+ "hash": "sha256-wrkFsPX7jrsjD/Ow1gna/xLvk0E49m5GVxP1G7Vx7HM="
},
"src/media/cdm/api": {
"url": "https://chromium.googlesource.com/chromium/cdm.git",
@@ -904,8 +918,8 @@
},
"src/net/third_party/quiche/src": {
"url": "https://quiche.googlesource.com/quiche.git",
- "rev": "fafc2fe9efc9f2e28a0815229fc14ca30c266ba8",
- "hash": "sha256-4UmjE41MOFCBa3APDMyyJwkeV6LhHl5UsMxZpPRDsRY="
+ "rev": "997d654308b6a1a17435e472ef5190aecb12e3eb",
+ "hash": "sha256-xgDgW2foZZEWpr0ibSG21kf028FN07/1ecOqFCkNj/I="
},
"src/testing/libfuzzer/fuzzers/wasm_corpus": {
"url": "https://chromium.googlesource.com/v8/fuzzer_wasm_corpus.git",
@@ -914,8 +928,8 @@
},
"src/third_party/angle": {
"url": "https://chromium.googlesource.com/angle/angle.git",
- "rev": "4b8c7f0f321952bba4f81056b4aa57d0d6428642",
- "hash": "sha256-ADG0WfkeFRq4NF0m+s3a/N5+u3q4ApExuWUnV3m5uAI="
+ "rev": "edae461ad2122a3a2be0b5d3d067472aa0e3329c",
+ "hash": "sha256-V4D7jAPJy4llbfJ6WmgCaqaH3TgkWIg5UtRAUaB9dE4="
},
"src/third_party/angle/third_party/glmark2/src": {
"url": "https://chromium.googlesource.com/external/github.com/glmark2/glmark2",
@@ -929,13 +943,18 @@
},
"src/third_party/angle/third_party/VK-GL-CTS/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/VK-GL-CTS",
- "rev": "3fe33a325af90c1c820b1e8109f11ea0f4b60c9b",
- "hash": "sha256-JgOdlwtjC5HiCWBAaeM+Ffp9KlbI7+erT0ZRZBlWxXI="
+ "rev": "01471f4b3846c97eceb5b16b8acad950808791b2",
+ "hash": "sha256-SrL+G3osTtJGQslfCBEYbslb2kWtHRrwO87PHi+5o6E="
},
"src/third_party/anonymous_tokens/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/anonymous-tokens.git",
- "rev": "208ea23596884f6d86476ea88b64e7931cdec08a",
- "hash": "sha256-HLUX0mUzA3xcXbw71sIxFBNEkL8x86urcdJH2Yuuy04="
+ "rev": "92d1fdf881a932e7aa2a9b20e006136a659c7a20",
+ "hash": "sha256-llPt+UR8hY0yaJkYmq+A3ZfRRReuaXN09qpap6C28jc="
+ },
+ "src/third_party/aria-practices/src": {
+ "url": "https://chromium.googlesource.com/external/github.com/w3c/aria-practices.git",
+ "rev": "7b134ce6d19497cce8a67db4a9f59980baf853dc",
+ "hash": "sha256-POnvoO1KfzJj4CbcMPI0pUTRk5EtHLTOyKKmJCZdXOc="
},
"src/third_party/readability/src": {
"url": "https://chromium.googlesource.com/external/github.com/mozilla/readability.git",
@@ -949,13 +968,13 @@
},
"src/third_party/dav1d/libdav1d": {
"url": "https://chromium.googlesource.com/external/github.com/videolan/dav1d.git",
- "rev": "5cfc3832687e3229117203905faf5425ac6bc0d7",
- "hash": "sha256-MWDDrb8P5AIFszY0u5gCrK+kZlbYffIt9Y1b/thXL7I="
+ "rev": "62501cc7db378532d7e85ea434b70d57e1ba2cb0",
+ "hash": "sha256-5cpKTUnhR+QzQJR4KbAvdvqsWnT1fpH0g9MObv8Nx0c="
},
"src/third_party/dawn": {
"url": "https://dawn.googlesource.com/dawn.git",
- "rev": "c1179de12ec3ed8feb91e922f12a90ae33f4a8cf",
- "hash": "sha256-VFEBqbSsn/3jqRGJgTM/r5DEtfhvTOIfS9fGIKzYo9I="
+ "rev": "d089fc91e7e4881362463faf8efe9ae435e34660",
+ "hash": "sha256-ZcfSMBvdAdEJQv+qfwAe8EFHPAfPtuKLTIR5lDRKP3Q="
},
"src/third_party/dawn/third_party/glfw3/src": {
"url": "https://chromium.googlesource.com/external/github.com/glfw/glfw",
@@ -964,8 +983,8 @@
},
"src/third_party/dawn/third_party/directx-shader-compiler/src": {
"url": "https://chromium.googlesource.com/external/github.com/microsoft/DirectXShaderCompiler",
- "rev": "d73829d4e677ef00931e8e57de6d544396ab46cb",
- "hash": "sha256-BIXNgVeF5x3BZWFWZ1Gz+zpNSOEl+hZWB0GgMEaNS2w="
+ "rev": "35c1b99e9e552267da5efaea07c003e322d65777",
+ "hash": "sha256-pzBk+jUp/FUV8ahHquE0942Qw/DjAUemSM9fxdFJ0JA="
},
"src/third_party/dawn/third_party/directx-headers/src": {
"url": "https://chromium.googlesource.com/external/github.com/microsoft/DirectX-Headers",
@@ -974,8 +993,8 @@
},
"src/third_party/dawn/third_party/OpenGL-Registry/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/OpenGL-Registry",
- "rev": "9cb90ca4902d588bef3c830fbb1da484893bd5fb",
- "hash": "sha256-mWVORjrbNFINr5WKAIDVnPs2T+96vkxWqZdJwp8oT9I="
+ "rev": "a30033d3e812c9bf10094f1010374a6b15e192eb",
+ "hash": "sha256-xLacUOSy783bCtv+wUnjVnNLwTQ3eLwUJtYXmELqekY="
},
"src/third_party/dawn/third_party/EGL-Registry/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/EGL-Registry",
@@ -984,8 +1003,8 @@
},
"src/third_party/dawn/third_party/webgpu-cts": {
"url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts",
- "rev": "5c6b119c4fa0d9059c45f7637df1fe26fc80a6e4",
- "hash": "sha256-9DAdS2u2YtrCFJu0KTuwRJjTUNexFxdmnn7LkwQ+KiQ="
+ "rev": "f08551b0fc4d6cfa5ba582a0235b571aa363102d",
+ "hash": "sha256-f5kWMnaod/Ved1Fz/vTkdL0ihSUnNM8XN5Ht3Vs1YpU="
},
"src/third_party/dawn/third_party/webgpu-headers/src": {
"url": "https://chromium.googlesource.com/external/github.com/webgpu-native/webgpu-headers",
@@ -1009,13 +1028,13 @@
},
"src/third_party/boringssl/src": {
"url": "https://boringssl.googlesource.com/boringssl.git",
- "rev": "65818adf16411ca394625f5747a1af28faf95d2c",
- "hash": "sha256-tcTTzQnBp8Od1jdDMrFoCr9bnW0OCjGqUjH3QMnusmo="
+ "rev": "3a9254f16eda7a4c5d2260039ff23456a0a34de4",
+ "hash": "sha256-JuMnNppWhIFHYfk6ANIZLC7ABhqMseoV5LYV7slevBE="
},
"src/third_party/breakpad/breakpad": {
"url": "https://chromium.googlesource.com/breakpad/breakpad.git",
- "rev": "afa2870e449ef33ad41545e7670c574cf70926a4",
- "hash": "sha256-+N6FPtSiLQmNqf5+x5XDSksrRq/YDVSMVx5Rv1PGjfI="
+ "rev": "8ef5673404a3bbc192b0997e1c2df559cc5bd79d",
+ "hash": "sha256-NplvLz9oET6mhTuBkHH6pZc8qdfhqI7g69eZRCyae0A="
},
"src/third_party/cast_core/public/src": {
"url": "https://chromium.googlesource.com/cast_core/public",
@@ -1024,13 +1043,8 @@
},
"src/third_party/catapult": {
"url": "https://chromium.googlesource.com/catapult.git",
- "rev": "6e4188cabb4f37314ea41e9adfcb2cf9b64e2641",
- "hash": "sha256-/kleYYllR22KjxHT2gTMGf6LEUZ1Ud7j593fIIAgqAA="
- },
- "src/third_party/catapult/third_party/webpagereplay": {
- "url": "https://chromium.googlesource.com/webpagereplay.git",
- "rev": "b7ac48f52cd298e966a76eb054412915c3e445d4",
- "hash": "sha256-smtwB6vzLgCAePz0jNfrpm8TxrxBnBkigLxERhxUEvE="
+ "rev": "2852bb7e91e4995502ffb72b7ed21412ee157914",
+ "hash": "sha256-XYufVvzOXD4voZUWUvumQQqLNsx9sy0QmQzNzrgNEWg="
},
"src/third_party/ced/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/compact_enc_det.git",
@@ -1049,13 +1063,13 @@
},
"src/third_party/cpu_features/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/cpu_features.git",
- "rev": "d3b2440fcfc25fe8e6d0d4a85f06d68e98312f5b",
- "hash": "sha256-IBJc1sHHh4G3oTzQm1RAHHahsEECC+BDl14DHJ8M1Ys="
+ "rev": "81d13c49649f0714dd41fb56bb246398b6584085",
+ "hash": "sha256-TrC1WMLAhko57rAyDCiAC/IJ0unAqVhyjkh7gKibyi4="
},
"src/third_party/cpuinfo/src": {
"url": "https://chromium.googlesource.com/external/github.com/pytorch/cpuinfo.git",
- "rev": "3681f0ce1446167d01dfe125d6db96ba2ac31c3c",
- "hash": "sha256-PhWbzQgZSUb3eVyx+JTSnxVOAC2WzL2Dw1I9/6LEIsw="
+ "rev": "ea6b9f1bb6e1001d8b21574d5bc78ddef62e499d",
+ "hash": "sha256-/QsOjDik0TnH3FnK7LOwsJkvX+O+2DRFX4eF3MxD3fc="
},
"src/third_party/crc32c/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/crc32c.git",
@@ -1064,28 +1078,28 @@
},
"src/third_party/cros_system_api": {
"url": "https://chromium.googlesource.com/chromiumos/platform2/system_api.git",
- "rev": "7ecd2b41460516ecd7b7d6e5c298db25e1436b6f",
- "hash": "sha256-ehbAXv4DZStWDMC3iOjmWkAc4PhAamyI4C9bdXO7FfA="
+ "rev": "1c69e700a01a7fd3dd331f526c8a31ac1e5e49d0",
+ "hash": "sha256-qIwUs0KVU9xYFLN3UUayPLfz0ObA+EN6owKPW61J/5w="
},
"src/third_party/crossbench": {
"url": "https://chromium.googlesource.com/crossbench.git",
- "rev": "cecd70a5f49f777f603d38d11ac1f66c03c3e8af",
- "hash": "sha256-zLwIY8fQVebkfN4KFMbitZODhmiN65JK2s9IG/5Cd+o="
+ "rev": "7d52b4ffbc319a7d5a0e0a0ebff744e5281d60c5",
+ "hash": "sha256-iwwvvIOuRMo/ZEu8Gk0lZaS4P5uGt8zpnYMChpZPcUo="
},
"src/third_party/crossbench-web-tests": {
"url": "https://chromium.googlesource.com/chromium/web-tests.git",
- "rev": "baf176aadedccc44329231d5dd40346874c2a63e",
- "hash": "sha256-oY1/uGB6ykePIklWe35rmJWsnpu/wjkER4TJeP4TTdw="
+ "rev": "7b3de17542cc613aaddbfc72c6e12be37eed7b73",
+ "hash": "sha256-7ly4vaK+Pj4y91t6Q+igQ0890CqKyu9jNBhJnxbNGjI="
},
"src/third_party/depot_tools": {
"url": "https://chromium.googlesource.com/chromium/tools/depot_tools.git",
- "rev": "45dedc4c3b87c982fd846b3dc599b233ed3aff90",
- "hash": "sha256-Ttklyw6IdNeMExlzeiQg/qsCkTmqVhUJ34MFgYmCWD4="
+ "rev": "f4fadaf6a5ba1bced9d3d9021060667b563bf583",
+ "hash": "sha256-3atvbwYnFTA40MonAxSQWkF58Jku7O7fUzelGPQvDyY="
},
"src/third_party/devtools-frontend/src": {
"url": "https://chromium.googlesource.com/devtools/devtools-frontend",
- "rev": "33c2f401a9c8ddad2159eb0ab83aa244a5247361",
- "hash": "sha256-M9aULI+HECgA0ptAG47OPK0QuB+xzmb29iOtJ3whpB0="
+ "rev": "ec97cf3bbeea2cb623fbf97c4e3f22f5acb4d568",
+ "hash": "sha256-kbGcNwpdmqFTIAe/OU3Y1C13ZEHz5OP+QDAExg6tw2g="
},
"src/third_party/dom_distiller_js/dist": {
"url": "https://chromium.googlesource.com/chromium/dom-distiller/dist.git",
@@ -1099,8 +1113,8 @@
},
"src/third_party/eigen3/src": {
"url": "https://chromium.googlesource.com/external/gitlab.com/libeigen/eigen.git",
- "rev": "2cf9891537250255f50df5109ffe9e700e2a73de",
- "hash": "sha256-1bu1Y9itHIKcwY5J0sF08DSyfElLHiZ6SRsNZkFjz8o="
+ "rev": "662ba79d796a2851b10cdafc6668e45b65b1120f",
+ "hash": "sha256-6bZFDeo7TqWNunkkQv8OJ+7/hfKwoIUtqZoXaeLp6M8="
},
"src/third_party/farmhash/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/farmhash.git",
@@ -1109,18 +1123,18 @@
},
"src/third_party/fast_float/src": {
"url": "https://chromium.googlesource.com/external/github.com/fastfloat/fast_float.git",
- "rev": "05087a303dad9c98768b33c829d398223a649bc6",
- "hash": "sha256-ZQm8kDMYdwjKugc2vBG5mwTqXa01u6hODQc/Tai2I9A="
+ "rev": "cfd12ebcf1f82c4fd44a950b1815dd0549bc8d89",
+ "hash": "sha256-hzoB+Mmok3oe6B494uLc5ReWpUcB89zCGPYw4gvanK0="
},
"src/third_party/federated_compute/src": {
"url": "https://chromium.googlesource.com/external/github.com/google-parfait/federated-compute.git",
- "rev": "3112513bf1a80872311e7718c5385f535a819b89",
- "hash": "sha256-jnG3PCxjaYcClRgzOfIkHbbD3xU9TDLyQR3VZUwHIgU="
+ "rev": "8de5837b817f28abc54a387a9417631b905ba90a",
+ "hash": "sha256-GZYo0FjgW8XCplAi6jzzruwDlIzsWjNEVQuCwXBCPz8="
},
"src/third_party/ffmpeg": {
"url": "https://chromium.googlesource.com/chromium/third_party/ffmpeg.git",
- "rev": "f45bab87ce4c5fafc67fd53fcde777578d01bfa0",
- "hash": "sha256-fsZSqmG6vFOPJYuBgG6OSWkzRu27B3mv/PqAP8s4ARk="
+ "rev": "ad41607c61898cf7150e0fb20fe4bbabd44922a3",
+ "hash": "sha256-41qpsOTedB51WMzzHXDiXA19OIzA7wG/Qgbz6IkmWpk="
},
"src/third_party/flac": {
"url": "https://chromium.googlesource.com/chromium/deps/flac.git",
@@ -1149,8 +1163,8 @@
},
"src/third_party/freetype/src": {
"url": "https://chromium.googlesource.com/chromium/src/third_party/freetype2.git",
- "rev": "b6bcd2177f72bb4842c7701d7b7f633bb3fc951a",
- "hash": "sha256-TUz3yUD9HxqUMCOpLk74rEf8J0tMTh4ZCuD94AD4+q4="
+ "rev": "b08a2eb0dd37f4a6c886fa5b0ecf5b3e1d27aac7",
+ "hash": "sha256-xnYeUAJx5n8LSg04AknfiudonfmlUdlj8nzHzSZi65I="
},
"src/third_party/fxdiv/src": {
"url": "https://chromium.googlesource.com/external/github.com/Maratyszcza/FXdiv.git",
@@ -1159,13 +1173,13 @@
},
"src/third_party/harfbuzz/src": {
"url": "https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git",
- "rev": "e6741e2205309752839da60ff075b7fa2e7cddd3",
- "hash": "sha256-XjUuY17fcZi+dIZFojq+eDsDVrBxtAWRydPdudt56+8="
+ "rev": "d639197ed529b05c27f38ebaab365a621d5edad5",
+ "hash": "sha256-uT4zK2hwHzEH6Nrd2rAeyzpQA1TmwtrdcujKYEUbLsY="
},
"src/third_party/ink/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/ink.git",
- "rev": "a988417b6d0b1ea03fb0b40269fbc42313acc6fd",
- "hash": "sha256-6O+N/ULn8sqsdgFw7VZ7TMjWvCAZbYo398PruPScU/k="
+ "rev": "0f9c6172b2ccc6b830ae313d522caf09e6933e06",
+ "hash": "sha256-LF+OcqNeg+KRuYmGuMZb4tmnr53sZHn/ZW1jg9ArPfc="
},
"src/third_party/instrumented_libs": {
"url": "https://chromium.googlesource.com/chromium/third_party/instrumented_libraries.git",
@@ -1189,8 +1203,8 @@
},
"src/third_party/libgav1/src": {
"url": "https://chromium.googlesource.com/codecs/libgav1.git",
- "rev": "40f58ed32ff39071c3f2a51056dbc49a070af0dc",
- "hash": "sha256-gisU0p0HDL7Po/ZXIIZVOTnxnOuVvSE/FYo9DaEUFfo="
+ "rev": "66ac17620652635392f6ab24065c77b035e281c9",
+ "hash": "sha256-6/zMaX2DPSKpsaqirhrgi3nL/88Qr2VXacmyL5IyJ3U="
},
"src/third_party/googletest/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/googletest.git",
@@ -1214,8 +1228,8 @@
},
"src/third_party/jsoncpp/source": {
"url": "https://chromium.googlesource.com/external/github.com/open-source-parsers/jsoncpp.git",
- "rev": "42e892d96e47b1f6e29844cc705e148ec4856448",
- "hash": "sha256-bSLNcoYBz3QCt5VuTR056V9mU2PmBuYBa0W6hFg2m8Q="
+ "rev": "d4d072177213b117fb81d4cfda140de090616161",
+ "hash": "sha256-q+DOwkjRlHacgfWf5UVY02aqfnKK9M/1YRBX6aMce9g="
},
"src/third_party/leveldatabase/src": {
"url": "https://chromium.googlesource.com/external/leveldb.git",
@@ -1229,8 +1243,8 @@
},
"src/third_party/fuzztest/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/fuzztest.git",
- "rev": "e24a91020ab19c3d6f590bd0911b7acb492f81be",
- "hash": "sha256-wFjuvJzGEaal+pIo5UtkdLHYTpoWxRE6Vf5OGLObGQk="
+ "rev": "da27bcae1a8902af1ae6a5c55d3674f22709bbf5",
+ "hash": "sha256-317zRhJPc0D9A58W8fdCGFmpNZ5vACfd/tlZOsp/Cvw="
},
"src/third_party/domato/src": {
"url": "https://chromium.googlesource.com/external/github.com/googleprojectzero/domato.git",
@@ -1239,18 +1253,18 @@
},
"src/third_party/libaddressinput/src": {
"url": "https://chromium.googlesource.com/external/libaddressinput.git",
- "rev": "e20690c8d5178bb282641d5eb06ef0298ff4cbc5",
- "hash": "sha256-rX7LQNUgk5ZljUrayD1a/SUrBrvpomW0Cs0KBw3lYu4="
+ "rev": "81eb9628382b07d371d8ea0b11badf7de3857fd5",
+ "hash": "sha256-6yDZpZ+CwxGqNO4+lZLFB6ESREeVku1BoOMtR+hKQ3I="
},
"src/third_party/libaom/source/libaom": {
"url": "https://aomedia.googlesource.com/aom.git",
- "rev": "33dba9e12a9f12e737eaa7c2624e8c580950a89a",
- "hash": "sha256-01DbV0kQFg1yyFpVeo82KBoZHhizA7xnZ1qOuu4HTcs="
+ "rev": "137bcff61e73fdd2836dc04e8258bfb49cef595e",
+ "hash": "sha256-oDubKvgqMk3w0luM//rR3NnCOk1h/WVTyRkuCmYASrw="
},
"src/third_party/crabbyavif/src": {
"url": "https://chromium.googlesource.com/external/github.com/webmproject/CrabbyAvif.git",
- "rev": "c433c9a32320aed983e4106931596fbbae3f77ee",
- "hash": "sha256-yw1cXB6s6biD2vj2K/3sVbKiaNK7bt+NkbQovbYlJ2Q="
+ "rev": "5e140b5abb9a91eb25b5ef66d29f6ee784ab7eab",
+ "hash": "sha256-tN+2YH2O9FTV50o4OVhKcKdwRwTI8NuNA0WqljUcrmo="
},
"src/third_party/nearby/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/nearby-connections.git",
@@ -1264,8 +1278,8 @@
},
"src/third_party/jetstream/main": {
"url": "https://chromium.googlesource.com/external/github.com/WebKit/JetStream.git",
- "rev": "de88e36ae91d5bd13126fa4cc4b0e0346d779842",
- "hash": "sha256-ZpU0ONqIVmY2VR0MxqtYj8KPNlK0L21gLJuT/Ff7KI8="
+ "rev": "b7babdf323e64e69bd2f6c376189c15825f5c73a",
+ "hash": "sha256-s6UMdUYWZqk/MbhyCi2zdQNgni98gGsYxcuUh/5AUy0="
},
"src/third_party/jetstream/v2.2": {
"url": "https://chromium.googlesource.com/external/github.com/WebKit/JetStream.git",
@@ -1304,8 +1318,8 @@
},
"src/third_party/cros-components/src": {
"url": "https://chromium.googlesource.com/external/google3/cros_components.git",
- "rev": "e580888fcc1c108e25c218ccf8b7a4372de18d57",
- "hash": "sha256-p0Wfvhg/j8v9xL9Pueo7xPVHBKowOLI00AeIZXPQw4k="
+ "rev": "0abb2efaa3d16db861c9710b193c39e657ac3bdf",
+ "hash": "sha256-viuntf6umyLZwDR9BXG+ZOakp9f8rvpZYDBYAUkKzL4="
},
"src/third_party/libdrm/src": {
"url": "https://chromium.googlesource.com/chromiumos/third_party/libdrm.git",
@@ -1314,8 +1328,8 @@
},
"src/third_party/expat/src": {
"url": "https://chromium.googlesource.com/external/github.com/libexpat/libexpat.git",
- "rev": "f31adfd584b7f6c50bbf4d22eb928538ffc9145a",
- "hash": "sha256-tLz4RejYQ/kFXhsWTduuGcinfUkqxYKPCpsou+WlvBc="
+ "rev": "9bdfbc77e3355405ceefbe59420abed953a5657e",
+ "hash": "sha256-veGg5/QjtBSmxYa8IyHF0NxEdJzlcJSZfzw8ay3ASVU="
},
"src/third_party/libipp/libipp": {
"url": "https://chromium.googlesource.com/chromiumos/platform2/libipp.git",
@@ -1324,8 +1338,8 @@
},
"src/third_party/libjpeg_turbo": {
"url": "https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git",
- "rev": "d1f5f2393e0d51f840207342ae86e55a86443288",
- "hash": "sha256-KGeB/lTjhm8DQBDZVSPENvZEGSHeLTkviJrYsFh5vEM="
+ "rev": "640f254ad0fa03f6b1f29f89b7dd9366f2f6e533",
+ "hash": "sha256-wor4RTF3/5BFL9EWcGEofY+M4HN2+/KJUaOY+u86K5Q="
},
"src/third_party/liblouis/src": {
"url": "https://chromium.googlesource.com/external/liblouis-github.git",
@@ -1334,8 +1348,8 @@
},
"src/third_party/libphonenumber/src": {
"url": "https://chromium.googlesource.com/external/libphonenumber.git",
- "rev": "ade546d8856475d0493863ee270eb3be9628106b",
- "hash": "sha256-cLtsM35Ir3iG3j8+Cy2McL1ysRB0Y1PXealAKl05Twg="
+ "rev": "c25558e39e2bcc9f26f7a2a1ef804324169eaf8f",
+ "hash": "sha256-Lr/gB5Em+TE092McPwJdOU0Ab4zyP4/2ZxlavMZMm+s="
},
"src/third_party/libprotobuf-mutator/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/libprotobuf-mutator.git",
@@ -1359,8 +1373,8 @@
},
"src/third_party/libvpx/source/libvpx": {
"url": "https://chromium.googlesource.com/webm/libvpx.git",
- "rev": "640d4ce27ba918783e28a0da46a8a37abe4a65b6",
- "hash": "sha256-uCa/MEfw2s05kK91uubi/TqztHulwattzt1vfr0LR4E="
+ "rev": "5f00413667d19ad683674524a9d03543d86d188b",
+ "hash": "sha256-uTteQ+z7t5KOtPuBoZazmonRHd8jGS1/YZAq+RAvhX4="
},
"src/third_party/libwebm/source": {
"url": "https://chromium.googlesource.com/webm/libwebm.git",
@@ -1374,8 +1388,8 @@
},
"src/third_party/libyuv": {
"url": "https://chromium.googlesource.com/libyuv/libyuv.git",
- "rev": "644251f252a84bf8ce91ff0aca86a9b16b069ab8",
- "hash": "sha256-DsoOY8bg0sPOF8tF67Gk7fRqdQzG1hc9fVMlZVjKWU4="
+ "rev": "8aeb3a9ca36341a640528e59b34b5d641080dca8",
+ "hash": "sha256-FGl0xK7ooaRFzFBxuV6oOu3h1x2b/myLLO2En3xgVCk="
},
"src/third_party/lss": {
"url": "https://chromium.googlesource.com/linux-syscall-support.git",
@@ -1394,8 +1408,8 @@
},
"src/third_party/nasm": {
"url": "https://chromium.googlesource.com/chromium/deps/nasm.git",
- "rev": "358842b6b7dd69b2ed635bef17f941e030a05e5f",
- "hash": "sha256-YwjwubijMZ9OvYeMUVMSunWZ2VCuqUFEOyv/MK/oojc="
+ "rev": "525a09a813be0f75b646ee93fc2a31c27b87d722",
+ "hash": "sha256-uC6bGxSdz1V2SXIQjMsDd6555b3gAPN1Y0ZQtWoqDww="
},
"src/third_party/neon_2_sse/src": {
"url": "https://chromium.googlesource.com/external/github.com/intel/ARM_NEON_2_x86_SSE.git",
@@ -1409,8 +1423,8 @@
},
"src/third_party/openscreen/src": {
"url": "https://chromium.googlesource.com/openscreen",
- "rev": "684bcd767271a21f3e5d475b17a0fd862f16c65e",
- "hash": "sha256-Yjz2E1/h+zp7L2x0zE0l+ktQIiSrJ4ZknXOhaVPKQVE="
+ "rev": "37ff938a93cb04c6b77e019b52328c8e9b320317",
+ "hash": "sha256-M57un/TVQPfTnKScVHS1VK1cUs8F/YPT3TwMVdo+mhM="
},
"src/third_party/openscreen/src/buildtools": {
"url": "https://chromium.googlesource.com/chromium/src/buildtools",
@@ -1424,13 +1438,13 @@
},
"src/third_party/pdfium": {
"url": "https://pdfium.googlesource.com/pdfium.git",
- "rev": "74d747ce1d383caca3ec0e604d77bac35ccd1e58",
- "hash": "sha256-qMY6L93hlnMgGZ5Blk5ldDnI/LUXYyuk+b7FXCiVV6s="
+ "rev": "c052afb72a08d79a26bcf3103d11f344981b09f1",
+ "hash": "sha256-zqfErp0pDXHXIvRpZ1TJu2UGXNZjATRbPgQWTniKTJs="
},
"src/third_party/perfetto": {
"url": "https://chromium.googlesource.com/external/github.com/google/perfetto.git",
- "rev": "97c58a94bb6495c4e202467fb1c55eaa22b5670f",
- "hash": "sha256-qtClkWAluLDRZn7yrHLU7qp9szP+/WsiG5JZZzRKd38="
+ "rev": "9ede949f025303868fa0c42418f122ac47312539",
+ "hash": "sha256-IRzEqgunO4Nfz+FkYir8G/Ht+Zsn6wpzncgkEFpsC+k="
},
"src/third_party/protobuf-javascript/src": {
"url": "https://chromium.googlesource.com/external/github.com/protocolbuffers/protobuf-javascript",
@@ -1439,8 +1453,8 @@
},
"src/third_party/pthreadpool/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/pthreadpool.git",
- "rev": "a56dcd79c699366e7ac6466792c3025883ff7704",
- "hash": "sha256-WfyuPfII4eSmLskZV0TAcu4K6OyW38TjkDHm+VUx5eY="
+ "rev": "02460584c6092e527c8b89f7df4de143d70e801f",
+ "hash": "sha256-4EHJzZT+Gbhs8SkOhjSvDIPEqIQU93oJmtF3c/T+qjw="
},
"src/third_party/pyelftools": {
"url": "https://chromium.googlesource.com/chromiumos/third_party/pyelftools.git",
@@ -1469,13 +1483,18 @@
},
"src/third_party/search_engines_data/resources": {
"url": "https://chromium.googlesource.com/external/search_engines_data.git",
- "rev": "2345fee6ce4ae24d9c365d5c0884ece593c55c67",
- "hash": "sha256-5qkra6FURaMvEOk+ZKMRH1hc8ixEnk3u4rxNm0G8tuQ="
+ "rev": "1aab872af8d44dcf59362d7ba8255922f74fafde",
+ "hash": "sha256-5/XnNx6Pyk4KBb9krVo9u6i7LWNrsLLOIi4qhEY2PZc="
+ },
+ "src/third_party/sframe/src": {
+ "url": "https://chromium.googlesource.com/external/github.com/cisco/sframe",
+ "rev": "b14090904433bed0d4ec3f875b9b39f3e0555930",
+ "hash": "sha256-bw+6ycUpnFZJhtXFUzr7XTOljNrs+7oFdVY+LN0Rqek="
},
"src/third_party/skia": {
"url": "https://skia.googlesource.com/skia.git",
- "rev": "92a56ebeef43061f4878aa869aa1f2160265c24c",
- "hash": "sha256-QEY9Wy2guRuS4CXeXHUhUNigCJWWndnNCbWQmaSYJ/A="
+ "rev": "587c5b0f5a7b0260826a0c19094c2d952195066e",
+ "hash": "sha256-COvdvWVfafVhccLIj2dJzu62Rbyi3oDgORtjIGolCRo="
},
"src/third_party/smhasher/src": {
"url": "https://chromium.googlesource.com/external/smhasher.git",
@@ -1489,13 +1508,13 @@
},
"src/third_party/sqlite/src": {
"url": "https://chromium.googlesource.com/chromium/deps/sqlite.git",
- "rev": "508ab21dc25702ed6690c4dd77da209a6bcd1239",
- "hash": "sha256-SfvLfBKdPjFvZ7CzUeFMcyoHdCzQgNRQwZyzb6MRtJg="
+ "rev": "fc121d7d03cd6cbf499ec06a5112b263471b1181",
+ "hash": "sha256-hf9PxQhXEKT49GbkFYCvRPBT0Qu+hDnDpebI92yO1Oo="
},
"src/third_party/swiftshader": {
"url": "https://swiftshader.googlesource.com/SwiftShader.git",
- "rev": "f9d5d49a3c599a315e3493dc1e9b5309cffb3305",
- "hash": "sha256-kBfqgXXJeEPT80mu6CJ2Bwmdv/y8jVzM6TedMXbzo4o="
+ "rev": "fce27a96526f54c6d31fdccf57629788e3712220",
+ "hash": "sha256-bmXZLpz3wv7eQWoqTjZmjwnnILWSIjZ8iqo8CeLk5fw="
},
"src/third_party/text-fragments-polyfill/src": {
"url": "https://chromium.googlesource.com/external/github.com/GoogleChromeLabs/text-fragments-polyfill.git",
@@ -1504,23 +1523,23 @@
},
"src/third_party/tflite/src": {
"url": "https://chromium.googlesource.com/external/github.com/tensorflow/tensorflow.git",
- "rev": "2216f531fb72119745382c62f232acf9790f4b6e",
- "hash": "sha256-zySLNPmug5HS5pwJ/lEMAWjjZSOuxdTgup7Y90k7NZI="
+ "rev": "999d49c10046e240cd5366d349d3a5f6af16a0d4",
+ "hash": "sha256-eSqaWXtzZ4Bi9ilaJYGdZamzUjmo+AtDZ9KeZhsc/fY="
},
"src/third_party/litert/src": {
"url": "https://chromium.googlesource.com/external/github.com/google-ai-edge/LiteRT.git",
- "rev": "9b5418dd7a1a318eed20395743dcc868df17d8b0",
- "hash": "sha256-80amwDPF3RrcoTaTQsunNmlvBGs6KCv369FW3J/Xcts="
+ "rev": "09b4b05203fd7a9402ffcce9cc736d887ff7e3fc",
+ "hash": "sha256-skMOzpsn67mmOAp7Mf6UrJdi2lbiQQ8b6kBy4Ik2ED8="
},
"src/third_party/vulkan-deps": {
"url": "https://chromium.googlesource.com/vulkan-deps",
- "rev": "d234b7b29748c07ef389279dd24f533ebd04cadc",
- "hash": "sha256-w49HOjPixSI/C5IGlxQMj/Ol9f/Lr2zI2oMhQzzu1zk="
+ "rev": "669a28b1f31f89bfc46b74791f127bcc5e5b2f06",
+ "hash": "sha256-lsR+sh+XQP/wKgkBbie6Gp+kQNFnnC8TeNWpiWTdevw="
},
"src/third_party/glslang/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang",
- "rev": "458ff50a67cb69371850068a62b78f1990a1ff9a",
- "hash": "sha256-2WauVjAEeZn16b4fE4ImKPX3wjDmeN92mqWi3NMiXSw="
+ "rev": "f6d9303ddaf2e879b9155f7186cd234f5a79079c",
+ "hash": "sha256-ru3QVyyyqxZRcvSpy9pYhHHhkjuLVhQbgOT/vQJ/oIw="
},
"src/third_party/spirv-cross/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross",
@@ -1529,43 +1548,43 @@
},
"src/third_party/spirv-headers/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers",
- "rev": "126038020c2bd47efaa942ccc364ca5353ffccde",
- "hash": "sha256-QBX2M+ZSWgVvCx58NeDIdf6mIkdJbecDktBfUWGPvNc="
+ "rev": "1e770e7de8373a8dd49f23416cf7ca4001d01040",
+ "hash": "sha256-t8Shkoa90TJt1MbTOefnLaguW4eYKsRFO1Jd0AUc70Y="
},
"src/third_party/spirv-tools/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools",
- "rev": "2ec8457ab33d539b6f1fecc998360c0b8b05ed4f",
- "hash": "sha256-9TBb/gnDXgZRZXhF27KEQ0XQI5itRHKJQjLrkFDQq7Q="
+ "rev": "b38c4f83024546d4000b2db8e2294cf81b7f26e0",
+ "hash": "sha256-q5G4B75xBIXl1aG/vzbIDrc3Hs/MFoQ4nwh4ozb8hys="
},
"src/third_party/vulkan-headers/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers",
- "rev": "f6a6f7ab165cedbfa2a7d0c93fe27a2d01ce09c8",
- "hash": "sha256-ZbjmxbRUiVJADNRWziCH0UIM09qKf+lm9PRnWOhZFhQ="
+ "rev": "015e25c3c91b70eb1a754d36fb14c4ba6ad9b0b9",
+ "hash": "sha256-pUxPwFGbOzP8ymTooeA1slFWEFsRoqUROSnndVtLiY8="
},
"src/third_party/vulkan-loader/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader",
- "rev": "15a84652b94e465e9a7b25eb507193929863bc2f",
- "hash": "sha256-pdC3YCM0Nzeabi5TPD+qR5PVdsxmWMnf2L9HsOcbv84="
+ "rev": "cf0cf82ea16c0ff0be75940f282540d6085b2d3b",
+ "hash": "sha256-uyoysS7lSBNDRfvcwPT+gQqhE20UxiYUEw1UXnYS3fY="
},
"src/third_party/vulkan-tools/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools",
- "rev": "7c46da2b39036a80ce088576d5794bf39e667f56",
- "hash": "sha256-nAyNVveeGg9sA0E37YiEPm+UdKsy48nAOjnUYHQnuqw="
+ "rev": "e3d18f90c0b8ef1f52539e0674a42f0adfe30381",
+ "hash": "sha256-Hs9N0FM3eWWjLm4BrDJoZIrsPDVFx0iRAJeQ4gHTM7o="
},
"src/third_party/vulkan-utility-libraries/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Utility-Libraries",
- "rev": "2c909c1ab6f9c6caba39a84a4887186b3fafdead",
- "hash": "sha256-k3xeKHQbd2rTQJsOZKXEMPrYjcHwoCC1N12F6AIP6Ho="
+ "rev": "8383c46b129c2b3a5f3833e602d946d2fcc57e39",
+ "hash": "sha256-ZBie5uDTVEehxRQW1GZY5Ki/bnp82LoW3jfMUFL0O9A="
},
"src/third_party/vulkan-validation-layers/src": {
"url": "https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-ValidationLayers",
- "rev": "b105d8ea361af258abed65efb5a1565c031dcf1c",
- "hash": "sha256-GgznBGYgnCFMNaqAOQ15dlw2dOFfSp3mAV2KokVLzgk="
+ "rev": "044eaba8a34a6e3bfb1d6aafac7c01068813a2b6",
+ "hash": "sha256-i3hochkK0LZPg8CsZMFkAL+8tf8QuuwtApAc4FDd0RM="
},
"src/third_party/vulkan_memory_allocator": {
"url": "https://chromium.googlesource.com/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git",
- "rev": "cb0597213b0fcb999caa9ed08c2f88dc45eb7d50",
- "hash": "sha256-yBCs3zfqs/60htsZAOscjcyKhVbAWE6znweuXcs1oKo="
+ "rev": "7e55b011e16182fc349149abbd3aaf3b1db46421",
+ "hash": "sha256-fOnFkcQDEGIe5yB507qnP9nA1LBBPFblncNiJ8JxAwI="
},
"src/third_party/wayland/src": {
"url": "https://chromium.googlesource.com/external/anongit.freedesktop.org/git/wayland/wayland.git",
@@ -1599,18 +1618,23 @@
},
"src/third_party/webgpu-cts/src": {
"url": "https://chromium.googlesource.com/external/github.com/gpuweb/cts.git",
- "rev": "3b327ebc44f11212fd3872972a6dd394634fb9e3",
- "hash": "sha256-RSZVKv2Z0pg2cGa3Elr2r5VZqdxlRJ+6mzm1Au1qg1I="
+ "rev": "b507bd117e53db86f2fb52d0d858d3ae7d684a85",
+ "hash": "sha256-6Y5Z0ErtsZdbuWTHa+PEiOxcZSbjBcnuOHbgtI1/+80="
},
"src/third_party/webpagereplay": {
"url": "https://chromium.googlesource.com/webpagereplay.git",
- "rev": "b7ac48f52cd298e966a76eb054412915c3e445d4",
- "hash": "sha256-smtwB6vzLgCAePz0jNfrpm8TxrxBnBkigLxERhxUEvE="
+ "rev": "b2b856131e36c99e9de9c419fe8ca02f857082ba",
+ "hash": "sha256-+hcaP7C5Eh3SLl5B8mRgOVdM/tvnFnb/oqUIWPoe0NA="
+ },
+ "src/third_party/webpagereplay/third_party/clang-format/script": {
+ "url": "https://chromium.googlesource.com/external/github.com/llvm/llvm-project/clang/tools/clang-format.git",
+ "rev": "6eddfb5ec5f92127a531eda66c568d3a11e7ec11",
+ "hash": "sha256-Cm6BOOlEyD0kdYxMSmk6Fj1Dnfs3zCzXsm+BOXgBme0="
},
"src/third_party/webrtc": {
"url": "https://webrtc.googlesource.com/src.git",
- "rev": "e8b4d4c5952a8fb7b35c2a6cba4e8c3de2ea2e1e",
- "hash": "sha256-94U9URlFGLYe94KCFU0giY9bBbrHNDCBr9GEwbRbOK4="
+ "rev": "1f975dfd761af6e5d76d28333191973b258d82a8",
+ "hash": "sha256-ucH+9HBkFyOKEItAWVoYmEzyU7h/UgWIvp/eC/JqGWU="
},
"src/third_party/wuffs/src": {
"url": "https://skia.googlesource.com/external/github.com/google/wuffs-mirror-release-c.git",
@@ -1624,8 +1648,8 @@
},
"src/third_party/xnnpack/src": {
"url": "https://chromium.googlesource.com/external/github.com/google/XNNPACK.git",
- "rev": "2ad25fc09167df69c6c02eb8082a0b9658dd5e80",
- "hash": "sha256-vBMGBXzJPCcsc2kMyGecjti68oZHWUwJKd7tkKub6kg="
+ "rev": "56ac34b3f45fae2eca1f32584f7f0b279be2cf1f",
+ "hash": "sha256-uw3r5g5rWamlFubBkXDb4KRx3hkOAoQyFo8l95GYGZI="
},
"src/third_party/libei/src": {
"url": "https://chromium.googlesource.com/external/gitlab.freedesktop.org/libinput/libei.git",
@@ -1634,13 +1658,18 @@
},
"src/third_party/zstd/src": {
"url": "https://chromium.googlesource.com/external/github.com/facebook/zstd.git",
- "rev": "3ae099b48dfcfe02b1b3ba81ab85457f8a922e9f",
- "hash": "sha256-futF0sM6z9HAl6AMJwUULBRByN92FTBjRIzYb2vBFGg="
+ "rev": "5233c58e6ca0b1c4c6b353ad79649191ed195bdc",
+ "hash": "sha256-vEl0s7Mjh+5rciOMxm99PNWiamtCk+sTN4lRYKCIZ+8="
},
"src/v8": {
"url": "https://chromium.googlesource.com/v8/v8.git",
- "rev": "16ef80c1f5d3cfade812bd1743952a4cfd480a31",
- "hash": "sha256-GI0NWA0XYGocxZp3+lPen6BkwaG7X3EDaEWM9rejgkI="
+ "rev": "49df3678d1b6a1511167b15a6b7499d3ab37a638",
+ "hash": "sha256-T9FWX3zuP1V7wvxeHgv2MEfRiwbJC0ElI3eazSYq3fs="
+ },
+ "src/agents/shared": {
+ "url": "https://chromium.googlesource.com/chromium/agents.git",
+ "rev": "e75efa515896f6bf1dea92eaffbcf8ee711a65d8",
+ "hash": "sha256-z2GrzF8jDkdfBdq1HP3gTgQpoqjmhc80kEZBmlue0os="
}
}
}
diff --git a/pkgs/applications/networking/browsers/chromium/patches/chromium-150-rust.patch b/pkgs/applications/networking/browsers/chromium/patches/chromium-150-rust.patch
new file mode 100644
index 000000000000..113097a87be8
--- /dev/null
+++ b/pkgs/applications/networking/browsers/chromium/patches/chromium-150-rust.patch
@@ -0,0 +1,21 @@
+diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
+index e1da11405c1f667280099ee815abc5349d1ad1bd..202992dbbe1c2a70eb6d8b559568d388f98b28f6 100644
+--- a/build/config/compiler/BUILD.gn
++++ b/build/config/compiler/BUILD.gn
+@@ -1678,16 +1678,6 @@ config("runtime_library") {
+ configs += [ "//build/config/c++:runtime_library" ]
+ }
+
+- # Rust and C++ both provide intrinsics for LLVM to call for math operations.
+- # We want to use the C++ intrinsics, not the ones in the Rust
+- # compiler_builtins library. The Rust symbols are marked as weak, so that they
+- # can be replaced by the C++ symbols. This config ensures the C++ symbols
+- # exist and are strong in order to cause that replacement to occur by
+- # explicitly linking in clang's compiler-rt library.
+- if (is_clang && !(is_a_target_toolchain && is_cronet_build)) {
+- configs += [ "//build/config/clang:compiler_builtins" ]
+- }
+-
+ # TODO(crbug.com/40570904): Come up with a better name for is POSIX + Fuchsia
+ # configuration.
+ if (is_posix || is_fuchsia) {
diff --git a/pkgs/applications/networking/browsers/chromium/patches/chromium-150-widevine-disable-auto-download-allow-bundle.patch b/pkgs/applications/networking/browsers/chromium/patches/chromium-150-widevine-disable-auto-download-allow-bundle.patch
new file mode 100644
index 000000000000..84926ab177b3
--- /dev/null
+++ b/pkgs/applications/networking/browsers/chromium/patches/chromium-150-widevine-disable-auto-download-allow-bundle.patch
@@ -0,0 +1,27 @@
+diff --git a/third_party/widevine/cdm/BUILD.gn b/third_party/widevine/cdm/BUILD.gn
+index 6d18f9fa163718d95610de9b6229dd38478543c7..93884543edcaa7211f4a7d61175bc068c6fd7dd4 100644
+--- a/third_party/widevine/cdm/BUILD.gn
++++ b/third_party/widevine/cdm/BUILD.gn
+@@ -19,7 +19,7 @@ buildflag_header("buildflags") {
+
+ flags = [
+ "ENABLE_WIDEVINE=$enable_widevine",
+- "BUNDLE_WIDEVINE_CDM=$bundle_widevine_cdm",
++ "BUNDLE_WIDEVINE_CDM=true",
+ "ENABLE_WIDEVINE_CDM_COMPONENT=$enable_widevine_cdm_component",
+ "ENABLE_MEDIA_FOUNDATION_WIDEVINE_CDM=$enable_media_foundation_widevine_cdm",
+ ]
+diff --git a/third_party/widevine/cdm/widevine.gni b/third_party/widevine/cdm/widevine.gni
+index 927b2e4809cf76e6b3ef51ee6cd2bbd04a92d60b..41761d10a4105a20fc4acf35f761c7ab23f867dd 100644
+--- a/third_party/widevine/cdm/widevine.gni
++++ b/third_party/widevine/cdm/widevine.gni
+@@ -40,8 +40,7 @@ enable_library_widevine_cdm =
+ # Widevine CDM can be deployed as a component. Currently only supported on
+ # desktop platforms. The CDM can be bundled regardless whether it's a
+ # component. See below.
+-enable_widevine_cdm_component =
+- enable_library_widevine_cdm && (is_win || is_mac || is_linux || is_chromeos)
++enable_widevine_cdm_component = false
+
+ # Enable (Windows) Media Foundation Widevine CDM component.
+ declare_args() {
diff --git a/pkgs/applications/networking/browsers/chromium/update.mjs b/pkgs/applications/networking/browsers/chromium/update.mjs
index 9aab0753db78..c3652f161d5e 100755
--- a/pkgs/applications/networking/browsers/chromium/update.mjs
+++ b/pkgs/applications/networking/browsers/chromium/update.mjs
@@ -170,7 +170,6 @@ async function fetch_chromedriver_binaries(version) {
const url = (platform) => `https://storage.googleapis.com/chrome-for-testing-public/${version}/${platform}/chromedriver-${platform}.zip`
return {
version,
- hash_darwin: await prefetch(url('mac-x64')),
hash_darwin_aarch64: await prefetch(url('mac-arm64')),
}
}
diff --git a/pkgs/applications/networking/browsers/firefox-bin/default.nix b/pkgs/applications/networking/browsers/firefox-bin/default.nix
index 947166188ad2..88d59af1aa81 100644
--- a/pkgs/applications/networking/browsers/firefox-bin/default.nix
+++ b/pkgs/applications/networking/browsers/firefox-bin/default.nix
@@ -39,9 +39,7 @@ let
i686-linux = "linux-i686";
x86_64-linux = "linux-x86_64";
aarch64-linux = "linux-aarch64";
- # bundles are universal and can be re-used for both darwin architectures
aarch64-darwin = "mac";
- x86_64-darwin = "mac";
};
arch = mozillaPlatforms.${stdenv.hostPlatform.system};
diff --git a/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix b/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix
index 08a1a43785b9..4b3517b7bae6 100644
--- a/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix
+++ b/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix
@@ -1,1859 +1,1859 @@
{
- version = "151.0.4";
+ version = "153.0";
sources = [
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ach/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ach/firefox-153.0.tar.xz";
locale = "ach";
arch = "linux-x86_64";
- sha256 = "239e586b8d30af758163a6893d9734111b92573130795992be5996ad7eef9238";
+ sha256 = "baee94e03a1981c1d94540bdf3a76437e9620edccec0490907edcdb041b2b15d";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/af/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/af/firefox-153.0.tar.xz";
locale = "af";
arch = "linux-x86_64";
- sha256 = "f7cc68084015fb622ae64749977a453e4449955fee9a144d6b65b7322f053b7a";
+ sha256 = "af98691ea9d4a7ae5896c4067ee6b1d22fcf60213a66d7339ba9449cbca7e9bc";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/an/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/an/firefox-153.0.tar.xz";
locale = "an";
arch = "linux-x86_64";
- sha256 = "4452f4579146ae8bd1b6996f29035a792d0bb93d2791d6c82452c5b115610708";
+ sha256 = "ec5e5b285b3f1273a292e0c747af06f08caa2542f05efa01553aca900fbc1fe3";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ar/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ar/firefox-153.0.tar.xz";
locale = "ar";
arch = "linux-x86_64";
- sha256 = "feb34c02f109e8baaf496cbac0427328921899a9b9676333fbe3148cff8479f9";
+ sha256 = "e0708eeb9201e418b974fb2c7dfadfc1f463ac3826db79a4a8c8db9e6673cdea";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ast/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ast/firefox-153.0.tar.xz";
locale = "ast";
arch = "linux-x86_64";
- sha256 = "7c4f40a56f71cd1b4af4e98db2d2466bebdda8b8952005d8acdda7985508ea45";
+ sha256 = "5461424207414c50b78890cdab3cf386bc71a5e4641b565540583f45b7531e22";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/az/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/az/firefox-153.0.tar.xz";
locale = "az";
arch = "linux-x86_64";
- sha256 = "0c7fcd9410d9c7db885c3f50cb861004397886c96e1f0af999bdb02f6307dca2";
+ sha256 = "d0dd2ee2d543bd171ccd6b7c66ac2583216992674894e61ac83a5ea92e9dcbd8";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/be/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/be/firefox-153.0.tar.xz";
locale = "be";
arch = "linux-x86_64";
- sha256 = "ab0d253699c0fcbb9734e3ad060cbbc7a19edaaf8abb291f9ad35c9c96896d62";
+ sha256 = "db717cc3797a98817f8be6674cf1d989cedd07f4e0b27e69683bcb8064673ad0";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/bg/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/bg/firefox-153.0.tar.xz";
locale = "bg";
arch = "linux-x86_64";
- sha256 = "77a4d058ab8cb9d1f63622723b37a4a6b81cba50a71cc7e94cda26a9de2ce0f7";
+ sha256 = "cf8cb970ba0ec0a080b9b85bf7f6b495290e94b2850f69dc531cf42032f2c03c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/bn/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/bn/firefox-153.0.tar.xz";
locale = "bn";
arch = "linux-x86_64";
- sha256 = "4770c8158da2c7c2808ff13e431cb0164172a1ad6ce1bfcc900ac2960621a68e";
+ sha256 = "ac7664a6675205ef8f4618b67e4e26e97de7b73ca8de3da4350b5fccd1f62c21";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/br/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/br/firefox-153.0.tar.xz";
locale = "br";
arch = "linux-x86_64";
- sha256 = "4994cbd8ccd2d68d4cb6d10db26df6d37a0ee4b138e4b6aa654515fd19619a9a";
+ sha256 = "b02f566850dc23d6df22e114eca73f35ea12fc71add221d8a2cfbc782c9c1e7c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/bs/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/bs/firefox-153.0.tar.xz";
locale = "bs";
arch = "linux-x86_64";
- sha256 = "c977928fcf18369e9cc1e34843cd62393daf818f95944d32d20c0cc954cd4d1b";
+ sha256 = "d6bcdf510be3a114e92f4771708acc545884d2be3909cc1eee1a39ca601b22c8";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ca-valencia/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ca-valencia/firefox-153.0.tar.xz";
locale = "ca-valencia";
arch = "linux-x86_64";
- sha256 = "38c934332d748ee9233dcb036ce1835cd969b386a34610b4ba27eec021d00284";
+ sha256 = "8775f5c9dd1ab55e2572bf86a8eb27e8f587dfb0220ec73897dff0d067d7a5b6";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ca/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ca/firefox-153.0.tar.xz";
locale = "ca";
arch = "linux-x86_64";
- sha256 = "b1b90cc7b6c7ba214c886e10e486726a4d4521747af640eb72d9e6ac1b223478";
+ sha256 = "27751e52faf788cf9a19a417e1e87f4eb21be01c15b46393022bf63db88ed4fe";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/cak/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/cak/firefox-153.0.tar.xz";
locale = "cak";
arch = "linux-x86_64";
- sha256 = "1ee199865a35fd34b3f572a2b1334f331ae6f80b369fb3c087c54029b6745db0";
+ sha256 = "aa611f6a3deeaa48129fb40b592dcff3e070e14e143d850bb5d6afb44f6b62c5";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/cs/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/cs/firefox-153.0.tar.xz";
locale = "cs";
arch = "linux-x86_64";
- sha256 = "397d8e62e80061cf7d857cb1057bcfc05babf530d99755fe730de6930d3aaae0";
+ sha256 = "9d09c9967ba1068efaa316cfb65dd75b5746634d7f34682481e6129a907bf2aa";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/cy/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/cy/firefox-153.0.tar.xz";
locale = "cy";
arch = "linux-x86_64";
- sha256 = "8216dcaec6e3f0f9defeea937ab0f7d8aed3c20bc013d608e1ffb8652aa8d5e7";
+ sha256 = "7f9af6a436f8a8dc3a304534ba902a23fc0f7c1b85d3a014fce3bc5393ccf682";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/da/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/da/firefox-153.0.tar.xz";
locale = "da";
arch = "linux-x86_64";
- sha256 = "b99997b5a3b1e8929ff5ac5170b1636a2aa1877bd82d4533f61d89ae70dc1dc7";
+ sha256 = "001c2c9a17e2b98b4c994414bd5d0f2015eb4fbc20e5be708bdef05ec1e991fd";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/de/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/de/firefox-153.0.tar.xz";
locale = "de";
arch = "linux-x86_64";
- sha256 = "12cb34cadcc246fe831f08e3d1b8a8dd64be4007d7d936adcdd604c4500dabcd";
+ sha256 = "51034fa489d62616a208634435b469f04b7cdd86d4281823e6e28c525f98166b";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/dsb/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/dsb/firefox-153.0.tar.xz";
locale = "dsb";
arch = "linux-x86_64";
- sha256 = "da06a8d0f551b6e84bd273c2c55aa2c231f18870ef5fb2c15713879f757f45bf";
+ sha256 = "b15c72a61ed97fc1eebefb595f3ff9a43939ae87bcb7555fdff6b6dff969d7bb";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/el/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/el/firefox-153.0.tar.xz";
locale = "el";
arch = "linux-x86_64";
- sha256 = "721e70e7c708a5c71afb5645f3f4b45882de39377a965aefb11dd1a825665c27";
+ sha256 = "d6b2e6d21b872435466c2416c8f1f3274bebb676c67e29f6108e2f2497d0e3d4";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/en-CA/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/en-CA/firefox-153.0.tar.xz";
locale = "en-CA";
arch = "linux-x86_64";
- sha256 = "abc5ad597445d84f54e0b64b490c511c68ff8bb26ebe373ab75a49abe6366465";
+ sha256 = "9158479291de4cf684c7a03e583dccfdeb31c73f5af6d6aa11db3e02c6a9aba8";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/en-GB/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/en-GB/firefox-153.0.tar.xz";
locale = "en-GB";
arch = "linux-x86_64";
- sha256 = "6d5839c2efe1d2e3546ac17e771f8ff007dd6aedc55dacf9df863f8fa9e363e1";
+ sha256 = "38adb3ae51df0fd599a43bf29274a01c4bf40a4b848ccbf4df508454dd55841b";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/en-US/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/en-US/firefox-153.0.tar.xz";
locale = "en-US";
arch = "linux-x86_64";
- sha256 = "5fa872cb4845a52829fa58568c2901edcbda4b79ce466b4b9b09afe41cffcd9b";
+ sha256 = "bfc57e7b6b4e6204b11e7e03c4b93cff708e9fb37f6b9948be243455311d82ee";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/eo/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/eo/firefox-153.0.tar.xz";
locale = "eo";
arch = "linux-x86_64";
- sha256 = "13e7b1992205a8bbcea8a3c4c8dab09226459e962f5e40f34038e59cf7322c84";
+ sha256 = "0f5e3844b403c1f72f8e1cf1103647b9973d588148beb5df099bdfe72fba8c93";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/es-AR/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/es-AR/firefox-153.0.tar.xz";
locale = "es-AR";
arch = "linux-x86_64";
- sha256 = "b2d0bf9dac50fb8874107fe56055ea742e9508ac6f87dfefdd455116b3b117fc";
+ sha256 = "df7adcf9a9787e1f9340f6246902b5115ab58890502fa9ca560c1e01ade62dc2";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/es-CL/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/es-CL/firefox-153.0.tar.xz";
locale = "es-CL";
arch = "linux-x86_64";
- sha256 = "97c265491171b493fa3ba7989f35fac556b474935e695b6011d02fab3b44176c";
+ sha256 = "3a738ef12c8d3bab3335ac61b5de37ed6417ef7a306b63131f5406c0ebc2c861";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/es-ES/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/es-ES/firefox-153.0.tar.xz";
locale = "es-ES";
arch = "linux-x86_64";
- sha256 = "81f0b699d18f88cfb7746d6ff256b80f18cc1de0e2fb1200986ac2bb9853d1b8";
+ sha256 = "1aa845adbf772c60b144eb86865c6dc51200000493cb163c7e15018a3f5e147a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/es-MX/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/es-MX/firefox-153.0.tar.xz";
locale = "es-MX";
arch = "linux-x86_64";
- sha256 = "8344bd79f6d98e0d058e0aa941cd8ac2b5cff2924f1f19a6f69d71b58cb075d4";
+ sha256 = "a52f3ea26bf51a1dc533635289ccb897a93afa9fae01f2256fe67ab991282c3c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/et/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/et/firefox-153.0.tar.xz";
locale = "et";
arch = "linux-x86_64";
- sha256 = "7b95f81d52ee59f9f593079b1bf9cf3cb178ac8105d0ee26b7da1c642fd2c89e";
+ sha256 = "ed434ecc7f24b0a15bfc68b989042f01e5d48ec1b23546ea9f83419ce914c792";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/eu/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/eu/firefox-153.0.tar.xz";
locale = "eu";
arch = "linux-x86_64";
- sha256 = "2e602d0c0e93e941fdecf3a4077ae1242d78692a7b4698ee0acd5fd6ccc832fe";
+ sha256 = "b560c1929f2596b048681dc4fdc55327c64c27bcd3133df69b60b02167698b75";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/fa/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/fa/firefox-153.0.tar.xz";
locale = "fa";
arch = "linux-x86_64";
- sha256 = "938b24ee51e07e64a4a6043b355dc5e583aa29c97c3342e61c63cb203bce8361";
+ sha256 = "bb16f2bf57d357c563e79c98601cd454cc67f02ae71097f8c1fc799ff5fa8600";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ff/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ff/firefox-153.0.tar.xz";
locale = "ff";
arch = "linux-x86_64";
- sha256 = "0ef584148b7678895d1dbb196e34d8c0f698157c90b59602a7d58e2c1cbda326";
+ sha256 = "57d27facfcc28a40fb0b6442a375578977b8827c571d1eaaf972a2334327663e";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/fi/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/fi/firefox-153.0.tar.xz";
locale = "fi";
arch = "linux-x86_64";
- sha256 = "2d874871d85119426b0f2abd44288d410695bf1923b6f7dc8754d3a29b46db47";
+ sha256 = "f2c70af42e52be18bac9045c066713de3b0d00ff9308107827003e34631d03b8";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/fr/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/fr/firefox-153.0.tar.xz";
locale = "fr";
arch = "linux-x86_64";
- sha256 = "8bf00a047fb12cdd58065cc6ba51521c058cfaa9fbfc750c83838d0b03d1b0f5";
+ sha256 = "1244b7167482f4964fac9dc67ab3ea50ebea9e41b835196d9db91310632e4523";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/fur/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/fur/firefox-153.0.tar.xz";
locale = "fur";
arch = "linux-x86_64";
- sha256 = "90d4e8e2f5033c83653efc5f48fc39a391c7b3760d318ee4378eadf373671e67";
+ sha256 = "6aaf4b43dc8ea00aa1e8fea5dfec14e0cc7216e2d6081541014da47cc7887425";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/fy-NL/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/fy-NL/firefox-153.0.tar.xz";
locale = "fy-NL";
arch = "linux-x86_64";
- sha256 = "3deb92769480435283a394601f1b8d24998f37bc52fae06b204ba468084503dc";
+ sha256 = "8199180ef7633541555af1504b81abf3d12fce0db6400f6de11f83eeac898fc3";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ga-IE/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ga-IE/firefox-153.0.tar.xz";
locale = "ga-IE";
arch = "linux-x86_64";
- sha256 = "d417883b6d77a9908bc807d2249e6492c1c6a6c63c70a95bd58a4754127aeb86";
+ sha256 = "d4257d18a350c5f57a3779053aa10bdc00b4a0eb7fe7550651332f6d53b7fb2c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/gd/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/gd/firefox-153.0.tar.xz";
locale = "gd";
arch = "linux-x86_64";
- sha256 = "c8c1222f6b301631afb6d6ced425d81535ed11bedc83463216d2b36019b51830";
+ sha256 = "d38e95625591a70e2d711c913d44b806a0da29b0ac22f8e3d857dfa9a39dd7eb";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/gl/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/gl/firefox-153.0.tar.xz";
locale = "gl";
arch = "linux-x86_64";
- sha256 = "21e9ac44b0abb9885ffb97c56c885153bc826c376373c5ca3886fbb97842f6ee";
+ sha256 = "662453ff1ed0784b359b09e99ba7b88c012f19a8d5baf25ab6b654454b1b9578";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/gn/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/gn/firefox-153.0.tar.xz";
locale = "gn";
arch = "linux-x86_64";
- sha256 = "115525969ac0425d983a95bbcb1184bc0655b899efd6e75a0ce16c8a3b4fdb1e";
+ sha256 = "cf0e016f8a975245ddf8294f48ef2d7d7241a546b51c615d49074843d537e8f9";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/gu-IN/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/gu-IN/firefox-153.0.tar.xz";
locale = "gu-IN";
arch = "linux-x86_64";
- sha256 = "2990959f8cfa15b3340b2c38722a6d8dab25bff4ea4b60e2218fcea91a2c1e92";
+ sha256 = "2711604911a4d94f36beed3035b7d8a8cdcb5aa408ad974edce5c941dbd0682a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/he/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/he/firefox-153.0.tar.xz";
locale = "he";
arch = "linux-x86_64";
- sha256 = "a122be5612000f5fc821d800dd2b5d4dc76ac9d1399f409de0812612c1653999";
+ sha256 = "00fd70cbe17b03af0ed33888c3cc24a9ffc36a99c05612848f15ef230e3bd7c8";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/hi-IN/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/hi-IN/firefox-153.0.tar.xz";
locale = "hi-IN";
arch = "linux-x86_64";
- sha256 = "2b59ee424191c3dc14a6ba4dca8d2e2f4ada98324f81ba03aa471ed59e491c00";
+ sha256 = "a6e4f7e139d6c637c752d5bbbeafeb3e27fdc9c7456a860818b815a8c1952e90";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/hr/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/hr/firefox-153.0.tar.xz";
locale = "hr";
arch = "linux-x86_64";
- sha256 = "8ad4320ee62c1017fe9038dd4702826e62ef4a60bc06e5d8aa0084e63074f2ab";
+ sha256 = "042dda11e5508028d083013990eb723b975fe74a4e3ca75c626882e2d60b1ff4";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/hsb/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/hsb/firefox-153.0.tar.xz";
locale = "hsb";
arch = "linux-x86_64";
- sha256 = "0a6c4ea8e2efab955933a4aa697502244a838daa73d1ea12becab37aec37cf4d";
+ sha256 = "ee68c20b6af083e2efbf98c8f245d79f600f2ad7d623a7b33bc8b254f1355223";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/hu/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/hu/firefox-153.0.tar.xz";
locale = "hu";
arch = "linux-x86_64";
- sha256 = "4a6b64fd8c730991e307b794a8efd40e05cabb338ef48aac79347114fbaeac62";
+ sha256 = "b2f758885087a12a2dc22e1079b2653d021f56f3103e6d0394f5c15ea7fc9cac";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/hy-AM/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/hy-AM/firefox-153.0.tar.xz";
locale = "hy-AM";
arch = "linux-x86_64";
- sha256 = "b392f16280bf9977cd1de1f5b451cce4887a991920b67fb1ff05e014dcdc1e12";
+ sha256 = "141bfb0e3771bee7b0284e0600893ebdff1a64d2eb25359825c39ea4e584b939";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ia/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ia/firefox-153.0.tar.xz";
locale = "ia";
arch = "linux-x86_64";
- sha256 = "afb8de469c0be4f7544a6477c66e610ae8c11150c494581777b92528878a8e1a";
+ sha256 = "59f55f5e51a5e1eec8478e1157ba7658c8e44ccaa1622a075892cdebad88ef99";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/id/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/id/firefox-153.0.tar.xz";
locale = "id";
arch = "linux-x86_64";
- sha256 = "6e42cec538a69f74f0c558d23b63d7500c05789efc78774329f74e0d53363974";
+ sha256 = "f2d525259e158c4a67c9fc613431d3875d703f0f0961c064937a06fae924516a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/is/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/is/firefox-153.0.tar.xz";
locale = "is";
arch = "linux-x86_64";
- sha256 = "fb3cc4371c5a57d99d8636c5c6fc3810f21a1ec88f6f3c11a30b2c097cd7af4e";
+ sha256 = "40717297334e0668c3c70c010cf3e02e652cc5316c015ea3073260e50f6147e0";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/it/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/it/firefox-153.0.tar.xz";
locale = "it";
arch = "linux-x86_64";
- sha256 = "64b0e2f041ddb7e3cd63c5e2128634d67661348f988990813de3b1c03c791bba";
+ sha256 = "3a4b0da68bab65373d9f63cc1c2f8aef56936929905a69adacfcbc2c1c21735b";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ja/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ja/firefox-153.0.tar.xz";
locale = "ja";
arch = "linux-x86_64";
- sha256 = "a69b5156f3a825920952df1cf1d689b2465ea755d38a39fa14f73763a9d060e7";
+ sha256 = "ec380b072b368635037912ae82e69fedc0b9f20a84704ed9d84b0acf634be381";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ka/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ka/firefox-153.0.tar.xz";
locale = "ka";
arch = "linux-x86_64";
- sha256 = "b23ad11801254bd60a02b7eff122b7372dd25cd5b26b0544b8402e68c6082e5d";
+ sha256 = "62732e447af2aef150e853685c5910d9cadeb378fe8b3daf2259be27acdeb898";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/kab/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/kab/firefox-153.0.tar.xz";
locale = "kab";
arch = "linux-x86_64";
- sha256 = "f833c910ab36dd8e48e9865dfba85028a4f075938bb0b72697a78d54c8ba384e";
+ sha256 = "a794a72d0f3d5bbcfcf4359958f2f1f170ccbdd345b99a1ad54e136fcaaee361";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/kk/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/kk/firefox-153.0.tar.xz";
locale = "kk";
arch = "linux-x86_64";
- sha256 = "0977ea48d98834f23df941cd4a949b5cf6c3df2dd1a93b1c3b27a63c8135b584";
+ sha256 = "cec4422654262f833c938dadc146182176e0b32d8eb2431f540023817920351c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/km/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/km/firefox-153.0.tar.xz";
locale = "km";
arch = "linux-x86_64";
- sha256 = "61145917a4f3f3ef6aaca76c448b45755ab0f99b653b1a04aec3f816629c7c82";
+ sha256 = "9dd97fa90b245f9810b5cc525cc2283a525b0d822f5c7d34d108159dec1bd9ba";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/kn/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/kn/firefox-153.0.tar.xz";
locale = "kn";
arch = "linux-x86_64";
- sha256 = "12e15bb2fb1284d60bc9677a8bff5114860757cb6436813af758ffb56d464c13";
+ sha256 = "af43cc4adc9640e43f567abafd275a3bcd19f2657f2df81779b1f556a6fec49c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ko/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ko/firefox-153.0.tar.xz";
locale = "ko";
arch = "linux-x86_64";
- sha256 = "5e531c64c897fc78c894a5c072c3b1f1746a5dee4dca58fc733591fed481d5cb";
+ sha256 = "b74f524f140cc5edcc601b3d30ad1cacb482c3b6277341f310984d9dfc0a96d4";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/lij/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/lij/firefox-153.0.tar.xz";
locale = "lij";
arch = "linux-x86_64";
- sha256 = "46381c13c6ffb5e274c700f8596e6c96f32ff2b6e7b028dba7254d437d249705";
+ sha256 = "880c3ff335a6a42ceb2b9bd02563d7aa27d84d833128e1b6f6d3563495448841";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/lt/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/lt/firefox-153.0.tar.xz";
locale = "lt";
arch = "linux-x86_64";
- sha256 = "367161d330271d03ab006fa4a388c3506313010688291d2ab380ddce2e3e7cc3";
+ sha256 = "3ea646f6b4f75608b3eac7abdc53550a62af67885191e66756b332517db5309c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/lv/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/lv/firefox-153.0.tar.xz";
locale = "lv";
arch = "linux-x86_64";
- sha256 = "bb6e468fa954e55f0ff7be00becefefb153c74d6fa9772d75e221efc39443637";
+ sha256 = "1ad560f1a1b76e54f6bfa89a9f1dead4d2d92ba37b67ac92c932145ca0433085";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/mk/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/mk/firefox-153.0.tar.xz";
locale = "mk";
arch = "linux-x86_64";
- sha256 = "7546a51c35a0cca092a2173bb11a130c3538de3f39c2805cd8c78df93b1822b1";
+ sha256 = "f6f381a1e3601dc9068393df1b7b283dfce89fd61a4b5d6a5c6cdf2cf6b4d9f1";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/mr/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/mr/firefox-153.0.tar.xz";
locale = "mr";
arch = "linux-x86_64";
- sha256 = "0430c34b5ab543c758202b9e20825dbb801e32ac79b6ceee507237f2ba942a71";
+ sha256 = "e840dd1620b206e3ed026d95f275c8dfa4967b937c4f10ff5d32b30f745960c6";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ms/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ms/firefox-153.0.tar.xz";
locale = "ms";
arch = "linux-x86_64";
- sha256 = "4fa461bd9f1b1afb1deab7f1acb758ce9af57fe5e5cc217eb14656a5cd3dccbe";
+ sha256 = "8a72e3a1b60540ef75ed0c548856a453912ad3b77ea3a8ed05fe4c526da6d976";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/my/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/my/firefox-153.0.tar.xz";
locale = "my";
arch = "linux-x86_64";
- sha256 = "880d7c9428876a0d160c1912032ed8de5948055e75ecd8dc686dc8edcbe2f633";
+ sha256 = "a56c48a3380af7ed1d078188d92256d5d2300e7f65e7a735d1b99afef6c7acb5";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/nb-NO/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/nb-NO/firefox-153.0.tar.xz";
locale = "nb-NO";
arch = "linux-x86_64";
- sha256 = "2b7f7c6525855bb81c6f6c35a8a98d83888b3e4392ce6c814298234c4ddccaa9";
+ sha256 = "e5e9b8b00762c699462cb4f5c1492145b6df24671e28082f06169de6633902a6";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ne-NP/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ne-NP/firefox-153.0.tar.xz";
locale = "ne-NP";
arch = "linux-x86_64";
- sha256 = "88f21e16d1b6e075f87a3d6ce79d9187be02590f38ffd219a2080bbf78f4e12f";
+ sha256 = "4a2a2b7350caaa2071cba8efcf76dcc8277ed66042abfb6b1bfdfe355609aeda";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/nl/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/nl/firefox-153.0.tar.xz";
locale = "nl";
arch = "linux-x86_64";
- sha256 = "55fab1471b8bf19ddbab5c5c01d3e190d61658d598aa6142f80f2d0dd4a5e9b2";
+ sha256 = "1dc825c88176cacedda739f97a420becd762e857bc5bca69854ff11014303813";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/nn-NO/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/nn-NO/firefox-153.0.tar.xz";
locale = "nn-NO";
arch = "linux-x86_64";
- sha256 = "110e35c48fb3e24e2dc028906133726441ec56fb79b0d702b3c632b8ece33e7b";
+ sha256 = "ead19ef5c40aa58022ea9b464182ff2bf53d21acaeb5c59c744872f08bbd81c1";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/oc/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/oc/firefox-153.0.tar.xz";
locale = "oc";
arch = "linux-x86_64";
- sha256 = "073f3c525754a003551c86663beebb2fc9a139c1d3b67ca3a1ff5f4056e02880";
+ sha256 = "cff4422669a00c69179475b2567b1df5cbcf97c2144a28786b3c13a561ffaeea";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/pa-IN/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/pa-IN/firefox-153.0.tar.xz";
locale = "pa-IN";
arch = "linux-x86_64";
- sha256 = "9059a6e36bffe39d447f275385c25a38b9dd117671a917086dce559093d3af9f";
+ sha256 = "63f75b10d1cb060e42eb7b33007dd4104e005e5d838372e737ef2ba4f219ec8c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/pl/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/pl/firefox-153.0.tar.xz";
locale = "pl";
arch = "linux-x86_64";
- sha256 = "b8d82d1546c2de3e750c620361bdcd014a6efcfc6827ab2376b37ab610dc899b";
+ sha256 = "94d7ce2eb0bb672391dc33fcf58df6f9ff1e1b7b9767c306fb1b8afbd632ca62";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/pt-BR/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/pt-BR/firefox-153.0.tar.xz";
locale = "pt-BR";
arch = "linux-x86_64";
- sha256 = "cb84e8d322d29c1ff21c085a433fc2f59883e7af135a27271f6b0d317ae14a3b";
+ sha256 = "c283c16df2e149bf9b76b3fae02a13c64fd6a745e96ed344379392cf85ad93c6";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/pt-PT/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/pt-PT/firefox-153.0.tar.xz";
locale = "pt-PT";
arch = "linux-x86_64";
- sha256 = "3c2fee42dc1706437775f48b486920cafc8b99f394c7d995e8f83f4653ef2f29";
+ sha256 = "d4da2efcca42ef38f24d42bd2ca580353c9dfbbd989c6360faee83a7bfbeeace";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/rm/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/rm/firefox-153.0.tar.xz";
locale = "rm";
arch = "linux-x86_64";
- sha256 = "664eff14b84169f13c64548d1d0789d03e4da5c7fefaca587fbcaee6cb321417";
+ sha256 = "6a49f8a1517b5bf7c13ac4f7fb8014a134e972ad5acb95f42d7f086e4fc3457f";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ro/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ro/firefox-153.0.tar.xz";
locale = "ro";
arch = "linux-x86_64";
- sha256 = "8b17c14de1a069026495c00d86044d5b1fce816740d2117359c4db1ca8b253be";
+ sha256 = "eee9c733aec7d140849e4259e566b695cca06d94bb2d464575a6909d81fafba4";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ru/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ru/firefox-153.0.tar.xz";
locale = "ru";
arch = "linux-x86_64";
- sha256 = "87e93998790b98eecc2781f1d0b73c85fbc9ef21addceea66a561d6aeb11c07c";
+ sha256 = "94d884963112d7367d3191b81e0bc9d042608fb5a90ca7d4c4be62ca54a218f5";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/sat/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/sat/firefox-153.0.tar.xz";
locale = "sat";
arch = "linux-x86_64";
- sha256 = "5da3172c2663dc85288b45e4d3e76af1122be8b7744922e95f062b9621e54045";
+ sha256 = "ea1fa1fd0b2e2f7f6734afce1a84bc08d5d6a842de731f4812fd3810fa23f809";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/sc/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/sc/firefox-153.0.tar.xz";
locale = "sc";
arch = "linux-x86_64";
- sha256 = "7e46dd591dcfbaf30da7f5513a7e6ad66671ddfc18eac4d82ae6a10b68effeb0";
+ sha256 = "48fa3b7e7c2e486a1ac7d4a14cd966b1e1fe77481dc5b3bb8c9f94b572ec0b6d";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/sco/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/sco/firefox-153.0.tar.xz";
locale = "sco";
arch = "linux-x86_64";
- sha256 = "3238b6c0f8103bf25298a5df64e6969fe203e72b60407147efd2115f33bdc552";
+ sha256 = "8aa477472addbc7932f68409f74500b502bac586269b734a09c572a6e76ee2ca";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/si/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/si/firefox-153.0.tar.xz";
locale = "si";
arch = "linux-x86_64";
- sha256 = "4b3c3cc0634cc640db0a174ad07ae5c35c74da107a23919bf8c0aa176b4eff87";
+ sha256 = "0a8afcc80a522a249b862f28fd7efd6d27415b3d6abf6fd75b96a5eb38dd6aea";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/sk/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/sk/firefox-153.0.tar.xz";
locale = "sk";
arch = "linux-x86_64";
- sha256 = "d61d02c09ef8d554b0412d59902a1da092ba35fedf0bf97f05fa7b9000b9422c";
+ sha256 = "dd2631df9e08e7864bc3cc3af840ed74ae73be9ab3d921675411acfafe885a7d";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/skr/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/skr/firefox-153.0.tar.xz";
locale = "skr";
arch = "linux-x86_64";
- sha256 = "4de00a9ac21dbac4008b2be38890e2f56a0f5f7b97ebabaf5b8e755278ecd432";
+ sha256 = "a92e47a7dddf36be7a327d551d0a6ad53f5010f5a824bdb5cc76a06c71512905";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/sl/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/sl/firefox-153.0.tar.xz";
locale = "sl";
arch = "linux-x86_64";
- sha256 = "a695b7dbe92b22c3eff265ad3f95bbc8b2baf3597e3fa70287a65ea32b909bd8";
+ sha256 = "a2b17a96b925c60f1c1d142025c99ec6754949105ea04964657503fc2e2b32b6";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/son/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/son/firefox-153.0.tar.xz";
locale = "son";
arch = "linux-x86_64";
- sha256 = "45c93b4d2f1096b34a1df3a09fa6d1ea09827a32348c4ef9882016f8b602a69f";
+ sha256 = "ef9b175acbb118dee10007ffdf2bf79a4949594a031b56716638e89c166dfdd2";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/sq/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/sq/firefox-153.0.tar.xz";
locale = "sq";
arch = "linux-x86_64";
- sha256 = "85a50059a4ed730c2353e674f995668828a5f660aca46dd6d4f8cc166da79652";
+ sha256 = "0eac57abdb5a42681210cd5c7db202addee1553a6d147374dd38c27cd309b131";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/sr/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/sr/firefox-153.0.tar.xz";
locale = "sr";
arch = "linux-x86_64";
- sha256 = "7e0cc7694b3f5686c8b11a5bc9419b4668ca95251d22656b37062cac675434bf";
+ sha256 = "2fd12659d39ac650fb673d4d552a5e2e283e67d00bfb9d4142d154bc506ed6ac";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/sv-SE/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/sv-SE/firefox-153.0.tar.xz";
locale = "sv-SE";
arch = "linux-x86_64";
- sha256 = "d5ecbc202eaec32036a8bb6d6d7df39bf53ccbc4506c27c282d88cf3c27094e9";
+ sha256 = "035126a903d61973fb38d6c00c6ed269824a287b48cc21cdfaca250fe5e341a7";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/szl/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/szl/firefox-153.0.tar.xz";
locale = "szl";
arch = "linux-x86_64";
- sha256 = "554256a3e6d316dafbba75f4019d80a154f6f06ebf4e47c2403d87daaedefd3a";
+ sha256 = "3f5a34268bdbcaeb55cc5f101b009b93db62ba004ca319910581b644414ff07a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ta/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ta/firefox-153.0.tar.xz";
locale = "ta";
arch = "linux-x86_64";
- sha256 = "2932599e7f7ea4c4fb5081b6ecc13e48b00045ef1b35efb3c87c2e515d62bf73";
+ sha256 = "a307017b94dcb71634a635c1837d0de457c271085e1e879ab6ca1a835a046e96";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/te/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/te/firefox-153.0.tar.xz";
locale = "te";
arch = "linux-x86_64";
- sha256 = "eee28745d2cf06d93ad2471241ded63c695cb926be07490f5d324ee0bb3476db";
+ sha256 = "6df5db1113a33b037976ad860d7c6f7dce1cb95a258f211c33a0869204985359";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/tg/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/tg/firefox-153.0.tar.xz";
locale = "tg";
arch = "linux-x86_64";
- sha256 = "5db058056434892cfecd6d2fe7e416623c612e4e7f67c0e8241f7adb00899a21";
+ sha256 = "abbaacda8bd76f4f6633801b3f39cdf2552ca851fabf4870f034d8cbbdac0b7a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/th/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/th/firefox-153.0.tar.xz";
locale = "th";
arch = "linux-x86_64";
- sha256 = "0a570b70825cdadef9812ec3a7733b0a2f4241c789cd81dbe8d5da939caf8f09";
+ sha256 = "a4417b3f6db045996976b8d7bba4e75f81e0219afe6e4aee52455a97d640640e";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/tl/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/tl/firefox-153.0.tar.xz";
locale = "tl";
arch = "linux-x86_64";
- sha256 = "f76dc8d34852a5c2ed9e52dccbcc6cf68e2b661d05800ce726f7b3dffb5e06db";
+ sha256 = "451d27e33f7bb17c85cbff1f641d44035e7c082494b22bcabf969a1da2a5ed24";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/tr/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/tr/firefox-153.0.tar.xz";
locale = "tr";
arch = "linux-x86_64";
- sha256 = "553226c673a4f015ce05c1412a06a8a3493fd42ac67539624a60c93e3d88c811";
+ sha256 = "f5f2cd225cc31bbad11d51112a2b9c8bae2160c2774868242767d7b6c365bb50";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/trs/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/trs/firefox-153.0.tar.xz";
locale = "trs";
arch = "linux-x86_64";
- sha256 = "5eb9902019c6688732d4eeaf6077efd6fd97ed70169fe6e9323c822aa6125894";
+ sha256 = "22f673e645a9b2a60923597a1cc3e860867edaaa3d742d28697563419fe64616";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/uk/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/uk/firefox-153.0.tar.xz";
locale = "uk";
arch = "linux-x86_64";
- sha256 = "4ae67bb1127387879acfefd49f973a4c52d70c26412fe2195be070db0f220cee";
+ sha256 = "2d4ede02763e6fcf59ddcb31d6c33271bf390c6d0328dcd213b61aab43332c74";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/ur/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/ur/firefox-153.0.tar.xz";
locale = "ur";
arch = "linux-x86_64";
- sha256 = "a368812f3872b26004558e71f5344cf8730f5676cd6791dab86d1a8d2f5058fb";
+ sha256 = "440c977e61df55d690428a329787db9c127529c1d54efaf88dd28420263b8f48";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/uz/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/uz/firefox-153.0.tar.xz";
locale = "uz";
arch = "linux-x86_64";
- sha256 = "8b034ef77df66121dd424c561f107fdec1b26bcfe873cb042718fa152d23ca44";
+ sha256 = "56f127b9f88f9de5ddac07abf900acbf70dfb4c1ee9418e71b58642294c4e05e";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/vi/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/vi/firefox-153.0.tar.xz";
locale = "vi";
arch = "linux-x86_64";
- sha256 = "0efdbfc744486392ba48171c8cc119402d98ba0071488c2496f0feef2a072ef5";
+ sha256 = "ebbad6f671c0411f6741ec5da32d182b6391a2617a36100530306b5b67916509";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/xh/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/xh/firefox-153.0.tar.xz";
locale = "xh";
arch = "linux-x86_64";
- sha256 = "07e9ee8230d48bf8511b817c4fb7ca99f06ca23ad03a454b10c793355b846a78";
+ sha256 = "e2312a314a75d6de41d96c6e7f3f4502cb9e7902bb7d5674cd12936d210c51de";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/zh-CN/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/zh-CN/firefox-153.0.tar.xz";
locale = "zh-CN";
arch = "linux-x86_64";
- sha256 = "097d12b4892658712913f4c59578b3ed78692061816190d47cd521f2452e232b";
+ sha256 = "b7ad44c3ed3b1d5b735c53f6b6eac8e03317d63a8dfc471a98bf0472960662c4";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-x86_64/zh-TW/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/zh-TW/firefox-153.0.tar.xz";
locale = "zh-TW";
arch = "linux-x86_64";
- sha256 = "89621bb75479b7f30fbcca8358f4a477358de3a622ed83c0c91661fef0169dcb";
+ sha256 = "fec121572a558ec99b7f36a681ad0886e103dea0c3c9119f3428efeb2e018970";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ach/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ach/firefox-153.0.tar.xz";
locale = "ach";
arch = "linux-aarch64";
- sha256 = "2a148ba5395d248a979fb86ac45ea7940aae254a0dab7d83c3842b880218b6c4";
+ sha256 = "09e345e06e691549587326dd9495b7e9e77e2c6c60e31721e893ebfbf7a17c03";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/af/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/af/firefox-153.0.tar.xz";
locale = "af";
arch = "linux-aarch64";
- sha256 = "a10a63f3c1c9918013c05322c9b66a9377bec1001a5da85883be116bb8a541ae";
+ sha256 = "db09ad99c368154fb21019e0afefbff51bbb1990a4ed421ed3d86793478b5816";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/an/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/an/firefox-153.0.tar.xz";
locale = "an";
arch = "linux-aarch64";
- sha256 = "a3a68e693fd54675e81d07a017e21e4a69808262b7d94753f31e9355501776c0";
+ sha256 = "d387ce7139b9b1357575312e3706cded7addbd80d33819e454c87ac420cebcc7";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ar/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ar/firefox-153.0.tar.xz";
locale = "ar";
arch = "linux-aarch64";
- sha256 = "ff7dbe73d85709663ebcb0437d68391a4309e154527b2f384087ba0cfed51eea";
+ sha256 = "0248ba15c616d417143f0fca62a91a01df557da5d81609440684213a26e40d0b";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ast/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ast/firefox-153.0.tar.xz";
locale = "ast";
arch = "linux-aarch64";
- sha256 = "fcd69eaa2e2dea0e685a9e23ad24b9aec4c11790ac7f23f75bfb7ad38e7b4876";
+ sha256 = "7ed2bb42b3ff8adfc5bc0367e78b65da5141cdcd0d94c5b2055008632fd06cc2";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/az/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/az/firefox-153.0.tar.xz";
locale = "az";
arch = "linux-aarch64";
- sha256 = "20152c7d830b9577c472263e5abc141c21e30cb231900faf7e39104b1eb7b3e9";
+ sha256 = "3574ff59f3edefc643d41b775a10fe2ac3014ab4531f17006e6acf77bf3ab2aa";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/be/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/be/firefox-153.0.tar.xz";
locale = "be";
arch = "linux-aarch64";
- sha256 = "e34760e4b5ae98515f237e524008a1db30d5c05feea3d59be68964090dbb89c0";
+ sha256 = "7f1af13d5e754d76c9743c0b715b00d1e287feb37b8c8ff4cf693d61e41a418e";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/bg/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/bg/firefox-153.0.tar.xz";
locale = "bg";
arch = "linux-aarch64";
- sha256 = "992cf32b95a623969d136cef89a1dba44a20eb00b74918c098b61a108d59c738";
+ sha256 = "70806050186af2633fbd40afda2435e11574df042dde08556a48b72ea71e8d1d";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/bn/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/bn/firefox-153.0.tar.xz";
locale = "bn";
arch = "linux-aarch64";
- sha256 = "af5bc711a904f24226dfd6883bfdc63a69c030a33681aee838f19e95ff4268ad";
+ sha256 = "14543700a56879ecaaa4ef2b8b9782222fb06d165ce8528fe3fdeac96f4767fa";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/br/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/br/firefox-153.0.tar.xz";
locale = "br";
arch = "linux-aarch64";
- sha256 = "616bf28b84f98c2253a8c7072f1aeb29b0927f703d751368c879fc3b911865ff";
+ sha256 = "f9b9ce51734face632051169c7bfd05db2839a65521aba31fec6b1100e64d26f";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/bs/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/bs/firefox-153.0.tar.xz";
locale = "bs";
arch = "linux-aarch64";
- sha256 = "fb32d2badde34732bb232652a96330205d57188afc91775c4861a4f9d879833a";
+ sha256 = "491140761559538e2e30a93727a786ba58ed1058b0264a510ad4daa14ce6caf9";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ca-valencia/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ca-valencia/firefox-153.0.tar.xz";
locale = "ca-valencia";
arch = "linux-aarch64";
- sha256 = "1a74d1d62b84977e2cc08fe85ba88b2a074db48a87d36ca87ca50f43224b9013";
+ sha256 = "331487ef1ff90b0cff9daa12a27d70bda70f2e23b9e9049f776b9b74f63f5ddd";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ca/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ca/firefox-153.0.tar.xz";
locale = "ca";
arch = "linux-aarch64";
- sha256 = "bb5e52dcdc6137a99e3f3ae9ce51ceafaebbd2065c3ed61d0cbf943dba87101f";
+ sha256 = "3fe493c3b6d4f0c62d97111c77bce080f220b192ab005e77376aceb5be45418b";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/cak/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/cak/firefox-153.0.tar.xz";
locale = "cak";
arch = "linux-aarch64";
- sha256 = "324c518b8c7a7bfc5cbf41346bab81f8b69a18356a78cf79d6a09ec4878bb21f";
+ sha256 = "e664ffc5255bf133feaf5032a0adc1ef178b363963e4339fad0efb7b3495f867";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/cs/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/cs/firefox-153.0.tar.xz";
locale = "cs";
arch = "linux-aarch64";
- sha256 = "3dfae5a5174a10224f9275591c3e4287f433996d7428fad4484af76ddda39894";
+ sha256 = "642cddc336c30b7934b5d6d75d00cb5fef75a00875322a409bf2f789bc30b61c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/cy/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/cy/firefox-153.0.tar.xz";
locale = "cy";
arch = "linux-aarch64";
- sha256 = "57c594eff446adf6d8c6443e6a5f375a5eae2edd4328012b5dc5f37e29ee6469";
+ sha256 = "82c3e2449599519faddf3314c37f743d5b7239a9cd9078e6cfe7dee70549e968";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/da/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/da/firefox-153.0.tar.xz";
locale = "da";
arch = "linux-aarch64";
- sha256 = "fecadf40892bfd6d51142e5aa0250846a78647002c10b608f25febd8aa6c3719";
+ sha256 = "b6ea3240cb9bb9edc09d97000855e9d1cc41b0b2b08a742cd69d8d6833b0edf0";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/de/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/de/firefox-153.0.tar.xz";
locale = "de";
arch = "linux-aarch64";
- sha256 = "9b01eff2c90e0f7c34f57e53a182e1609356f68411a650eeafb342d2e211e285";
+ sha256 = "867701ef0b96f5b1e4d21a2b4c68f8116325d3fff1b37ae018ce9077f07d7cfa";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/dsb/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/dsb/firefox-153.0.tar.xz";
locale = "dsb";
arch = "linux-aarch64";
- sha256 = "1eb1bc9c3533e5b62cca23de936c45aa77ba1dce840eb9627a3b28590b281ec0";
+ sha256 = "1923c7d5ab1beecad80f36aeaa4e0248a5cb06165bc55ebb9e2953533c698419";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/el/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/el/firefox-153.0.tar.xz";
locale = "el";
arch = "linux-aarch64";
- sha256 = "7f4a71487fb4dc7bff2f37013d04db3acf1e9a02525c7305f1ade36153d52c61";
+ sha256 = "d22cddaf79540e6f0d133b4911b71f260d995b73092223d8ce19f4c20555c9ce";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/en-CA/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/en-CA/firefox-153.0.tar.xz";
locale = "en-CA";
arch = "linux-aarch64";
- sha256 = "10bb7e02801535e97d9267c472d40b3328cfe11f600cd5f95e317278e120b8c1";
+ sha256 = "c813f9a67b7215a81d8653164000d82e26f8e2a953e305a12879dfcc46425464";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/en-GB/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/en-GB/firefox-153.0.tar.xz";
locale = "en-GB";
arch = "linux-aarch64";
- sha256 = "c11b0198a5441dbf83bfc90033be092783854a7a5bb6f9fd04611aff29aaa3f2";
+ sha256 = "b1aead2821765cc5825be58097562044f58efdb89ad6cb7bf103b6e408160566";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/en-US/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/en-US/firefox-153.0.tar.xz";
locale = "en-US";
arch = "linux-aarch64";
- sha256 = "31eac8648add83583ce13b1635eca1a24f25ce5dd921f606687909a5cec252f3";
+ sha256 = "5d0a7390ab9eef510c9962b3010903b3a4dea0d0472f9035021c03ed4252c67d";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/eo/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/eo/firefox-153.0.tar.xz";
locale = "eo";
arch = "linux-aarch64";
- sha256 = "e7400613f2a8993c97fe2dc340037604f203d4ac37655a9700b694c6f2479cc0";
+ sha256 = "22abf1761ed7f1083dfdb62a42c696f4e94b0c4bbb8b006f4d855a9c2bef77bc";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/es-AR/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/es-AR/firefox-153.0.tar.xz";
locale = "es-AR";
arch = "linux-aarch64";
- sha256 = "96796ecdc735a391521cbf3b9e303cec64171b9a2e51580da828ed02b589ab4d";
+ sha256 = "f0a044b8e6778c734e9f2173cbe296c21490a384ed7b49b3c37c1d32e0508709";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/es-CL/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/es-CL/firefox-153.0.tar.xz";
locale = "es-CL";
arch = "linux-aarch64";
- sha256 = "e232f089967203a114d27f58a22b327ecbfdc6f6c26ef85bfacdb4cd62b61e5d";
+ sha256 = "b82aaa19fae4efacbfa654d5d4fb6deecae581e5240faa1a955ab34b7e3da79e";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/es-ES/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/es-ES/firefox-153.0.tar.xz";
locale = "es-ES";
arch = "linux-aarch64";
- sha256 = "e4a78ce58e6ea5dd2f5f2688830fd057d88ba28a4cf47ff47c65ab569fb588ec";
+ sha256 = "f4776064595bc05e209a86be6230470a9c02f7ce2e0868f4c1ea0f1504ddc3c4";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/es-MX/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/es-MX/firefox-153.0.tar.xz";
locale = "es-MX";
arch = "linux-aarch64";
- sha256 = "8e9361112eecf1f3f3964ce07c7fc6b2cf7b0350dc86347a8844228eaa71405e";
+ sha256 = "d2929ae013ed0ead3bfd8d9d37ea230b6814c2aee4070a094fc3888f501c0cf1";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/et/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/et/firefox-153.0.tar.xz";
locale = "et";
arch = "linux-aarch64";
- sha256 = "40dfddc2dd4a20d41195d0d9db0193e900eedd14d466161e9df46d7f6c2fc22e";
+ sha256 = "5f87bb9c52205a3fe7cf92069b5a198d65d3385dbc6ea050f4c6fcda4c483155";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/eu/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/eu/firefox-153.0.tar.xz";
locale = "eu";
arch = "linux-aarch64";
- sha256 = "4fcd800585dd9281ba4c922d9f9402511d85d2751eb72c1677176d9f9f06246c";
+ sha256 = "4db8cbb12142b559ac767c45d854f6f67831424496b08eb022fc936caa072c04";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/fa/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/fa/firefox-153.0.tar.xz";
locale = "fa";
arch = "linux-aarch64";
- sha256 = "c856afc2f8f92d1f4d189d3be5e93bf987984f43362c7e6f30eabb7734cbd514";
+ sha256 = "a18dd0f441480688337d9d210d4d703b42214383dc4084885484090b66ce952a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ff/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ff/firefox-153.0.tar.xz";
locale = "ff";
arch = "linux-aarch64";
- sha256 = "d30ce672b4a8032b56bd91b4d7cc5fd6507c7e3e9926a68a0656edc8768b54ed";
+ sha256 = "87f339f0886e918f47b2409201643e4d88cc98d9002746ccfc7724d4752955e3";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/fi/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/fi/firefox-153.0.tar.xz";
locale = "fi";
arch = "linux-aarch64";
- sha256 = "e6b8be08ce3692d2d4e9b96de7a88794ca3cfd9f4368b95c4772a7b7df687853";
+ sha256 = "269b43d690fcb8a30bd8c02e02fafcd06a4cf48dc42aff04b397445ee78c69d0";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/fr/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/fr/firefox-153.0.tar.xz";
locale = "fr";
arch = "linux-aarch64";
- sha256 = "a5d275c078f6835d8f8edc34f968fbd14e5b8dca4f83ad92f275b4740bb51026";
+ sha256 = "fe2f42a67d996aa153d22a0613765c3bca504fe436f0e06c1c543903b7c207fe";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/fur/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/fur/firefox-153.0.tar.xz";
locale = "fur";
arch = "linux-aarch64";
- sha256 = "f02b78936f50c20ec1c2d87737a532477cd2242a760093c0114bac91e088196b";
+ sha256 = "1b49b1ca722556265191076d7d852f886260e252def36acc24aa0dcc169510eb";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/fy-NL/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/fy-NL/firefox-153.0.tar.xz";
locale = "fy-NL";
arch = "linux-aarch64";
- sha256 = "6d24f9de7c251e0fd6b5a31bf3c5558f1cfd078fe4fe439bc3632f6fbc8db960";
+ sha256 = "617a564da122a1701d8b150464a6ae9dfb8dd83e55d618d87afeeefccb0079a7";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ga-IE/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ga-IE/firefox-153.0.tar.xz";
locale = "ga-IE";
arch = "linux-aarch64";
- sha256 = "64e2b7ba35f9e5cb45b7ad1fc7dacc902b980ba8f21c7ea9eb508a6d6cffef0e";
+ sha256 = "3c2fc1e99a447ba4575eac128b89c8a2bbda0eebb1b7b81d2524a8e6ffce1658";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/gd/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/gd/firefox-153.0.tar.xz";
locale = "gd";
arch = "linux-aarch64";
- sha256 = "ec520d9aeedb700664c3dbf6b3549b422c097b0c4aebbb5ea9eb3693fb62dd41";
+ sha256 = "d9eaf694de7cd990049f27a02119e276a2a627db89036d4b2160e4b853d28e01";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/gl/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/gl/firefox-153.0.tar.xz";
locale = "gl";
arch = "linux-aarch64";
- sha256 = "1a6075d581857d1273f3c4cb643609c17d45d02385ab69941fa06d421f0fd757";
+ sha256 = "3599f4076f1756de97d475a0ebd1fda344d208ea893e0c478eaa1a8671df9554";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/gn/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/gn/firefox-153.0.tar.xz";
locale = "gn";
arch = "linux-aarch64";
- sha256 = "d0dd378393b4909a10380d9999e763a0043da09c686e3e4337e2d9eb3675757d";
+ sha256 = "6debfe4642f6a0afdfa0ed8f47510111a4266ea1e9a56a4514bae9c43b750f59";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/gu-IN/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/gu-IN/firefox-153.0.tar.xz";
locale = "gu-IN";
arch = "linux-aarch64";
- sha256 = "c713a928e655c1ebfc34fc9a9818d08049f9bf79f8709d7265e38efe436a1571";
+ sha256 = "e4ba466a1080b9954ba4e79bc2e862c48804d9f35d06c3bde9c5cc9fe578c18a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/he/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/he/firefox-153.0.tar.xz";
locale = "he";
arch = "linux-aarch64";
- sha256 = "3dd19410481bed37cca8a66ba8710236ff1310a2e92a9b130f2f3d1ed6185d51";
+ sha256 = "6f1a70bc2d90e69284ab4e717a4907c8e67e01bb298483f60fa6b23854f1a98f";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/hi-IN/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/hi-IN/firefox-153.0.tar.xz";
locale = "hi-IN";
arch = "linux-aarch64";
- sha256 = "48a05d3a894a664df179d9b30ac8f27a484cd0ffa306d1a4141a876d4fea9215";
+ sha256 = "0e1d4c1cf387d285086bb413ea5a358feee46efd431fe7bbb18aa4820558d71b";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/hr/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/hr/firefox-153.0.tar.xz";
locale = "hr";
arch = "linux-aarch64";
- sha256 = "c23027e824c602d8e8b8c768187ba2eda33fb2b29202fb5ddabdb11c72d0f94c";
+ sha256 = "bfa3acfdcf7ed1dcbc927959cbc75f099f626fa648718f71a1fe9e06a875841c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/hsb/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/hsb/firefox-153.0.tar.xz";
locale = "hsb";
arch = "linux-aarch64";
- sha256 = "bb9614ce4f61932e43e9c881644d63feb5b3667be2a1a04800624d3d777fee9c";
+ sha256 = "ec531c2cadd9ab3be710945d44c700af33aafab1f50c835e7f5de343c631b431";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/hu/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/hu/firefox-153.0.tar.xz";
locale = "hu";
arch = "linux-aarch64";
- sha256 = "784300fde25f2e41c0845352a22cddb54a421ab75bf0770e0b01714482726b05";
+ sha256 = "0ffa31186a48a2a6bd48fd03ebd48fbcc35f677b6e0092f5c05f91f9d650144b";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/hy-AM/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/hy-AM/firefox-153.0.tar.xz";
locale = "hy-AM";
arch = "linux-aarch64";
- sha256 = "ec1c56d7c5daae64ef901b6c60881b62e64f595c0f29cb6ec35df3b2f6711ad4";
+ sha256 = "f5dcd6d79f8eeac4592a28f8192eb4b105d2db4976a7bd7d249a357822eb3cda";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ia/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ia/firefox-153.0.tar.xz";
locale = "ia";
arch = "linux-aarch64";
- sha256 = "414dc6d722559ac106c87c36829a2a13b97615341df068d4644bc28357ffd021";
+ sha256 = "1268ae8d23c145a97e8b76b24746349fae53bd9f306d12203b337761bd162bd4";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/id/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/id/firefox-153.0.tar.xz";
locale = "id";
arch = "linux-aarch64";
- sha256 = "eaeff32ef724ba192fab1deeead47b9439529c27350bb154d6f99989c9e5a6cc";
+ sha256 = "c04bede404d014d65ebdab85426a2ec8d38ac7281968edc357725a6ab24219cb";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/is/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/is/firefox-153.0.tar.xz";
locale = "is";
arch = "linux-aarch64";
- sha256 = "577af541c0d8c2b132436487b37deda00be525b187b1f90c53a38b7854286d88";
+ sha256 = "e60bc1836aa11cc0d4432578441972d8863f593cf3f8d93fcbf14a1e709ec8b2";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/it/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/it/firefox-153.0.tar.xz";
locale = "it";
arch = "linux-aarch64";
- sha256 = "a3c62cbc99944bedc53e925ec19f4e49675f98f623ee14d50510965d47945bd7";
+ sha256 = "7e560c59b77c906af79fd6c9db20cadc6143d6af2d5bd51ecf9ea2f0c1f63f4f";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ja/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ja/firefox-153.0.tar.xz";
locale = "ja";
arch = "linux-aarch64";
- sha256 = "8d2af729d55febd5992d32f6048327c9a29ad6b3013860173262fa8d7ac5a57d";
+ sha256 = "3e12387a48818e89106cff11f75688368d72fe7370836fa1e387a017f62b03da";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ka/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ka/firefox-153.0.tar.xz";
locale = "ka";
arch = "linux-aarch64";
- sha256 = "4558e58356f3b2f8a45e5dc2405ec2972b36b1fb89f620beb60862fa1fe1b60e";
+ sha256 = "84545bda5723e10c5d45c30ca32e348b9dbd0b4da9c00a91bf6ff1d475efd897";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/kab/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/kab/firefox-153.0.tar.xz";
locale = "kab";
arch = "linux-aarch64";
- sha256 = "fe6de24faabd6026fbbbc0ce9d01b72a05ee921632b1de54e5ca00c4413e0181";
+ sha256 = "8c0a073862a9dc1a07fdf3f788f42d347b245159799c46e187070dec60aa7e46";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/kk/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/kk/firefox-153.0.tar.xz";
locale = "kk";
arch = "linux-aarch64";
- sha256 = "cd8a8d5ddedc126e438a35ac1e3b7dc6ae33869741d4f37a2b315184ca533836";
+ sha256 = "40de4783333c1b8aad715dbfa752f28eaab8d3e364e52bd8596973aff4ca0881";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/km/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/km/firefox-153.0.tar.xz";
locale = "km";
arch = "linux-aarch64";
- sha256 = "8d0adb3e7db27c014f5bb0707abb146a301f77bb007d6cdec98bb313184a2f1e";
+ sha256 = "f2dea5148a20b7c6ebc4e1bb4f6d35753a93b9e1acc1fa5c7aad4e04682e854f";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/kn/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/kn/firefox-153.0.tar.xz";
locale = "kn";
arch = "linux-aarch64";
- sha256 = "7dfe723e490361092314fcad1c28b79f7449720b7999a338d4c392f8bb45ebba";
+ sha256 = "0e8a0019548803865535c849f26bd005065a91e2de9341a7d77e39aee6209b24";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ko/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ko/firefox-153.0.tar.xz";
locale = "ko";
arch = "linux-aarch64";
- sha256 = "55c68c17ec82f4451571fdd3dbbe781954429a54c41b12d65c922661703ad5ce";
+ sha256 = "04fba33c7a7c95d91a4af2eefb7ab7b7a0306debaf1720814bd2ad59678d28df";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/lij/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/lij/firefox-153.0.tar.xz";
locale = "lij";
arch = "linux-aarch64";
- sha256 = "6d5f90e399770e6f90a02c2a6f9201c81bd75aa4ddf5f0c9830e7f2bb976b3e6";
+ sha256 = "a2cc18133f5b3db0e7e6f30f9137eb19a2837f0326a284ae75ba95b572212cfa";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/lt/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/lt/firefox-153.0.tar.xz";
locale = "lt";
arch = "linux-aarch64";
- sha256 = "0c271897c167f9aa78d441587bcdc491858bae35d0193a555c81e8e654f72da5";
+ sha256 = "c93c0daf58860b06bd2aa756c24b2b85351cc1db0297f9e113ec23f51e0270cf";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/lv/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/lv/firefox-153.0.tar.xz";
locale = "lv";
arch = "linux-aarch64";
- sha256 = "9f8ca04ab9bb7897e2b5f2fea8d14051005e8b84e238479310486126e2c8aa7b";
+ sha256 = "9fdda857bc94463efef4a44ec4bf273ce14d5b113a47596ac85731cad78f44c4";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/mk/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/mk/firefox-153.0.tar.xz";
locale = "mk";
arch = "linux-aarch64";
- sha256 = "a6059f371ebc9fb7b894a16419f1fb8dc8eb52b7e215faebbefe18e140b0781e";
+ sha256 = "3957da17e523108949d2ef97529bb621a824f2c739d1457168304fe2086dbb53";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/mr/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/mr/firefox-153.0.tar.xz";
locale = "mr";
arch = "linux-aarch64";
- sha256 = "05e1cc59ef7b4db5a6f9c5950145672b98d1e8dd0e514d911a931f40af52ada6";
+ sha256 = "31ea7342463c7dfbdba31b97c098054773eeac7fc54937fc660f8f47b235a545";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ms/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ms/firefox-153.0.tar.xz";
locale = "ms";
arch = "linux-aarch64";
- sha256 = "33f166acab96b7aed064e73ab290457af3daaa57bb530b1607bfd149796e6118";
+ sha256 = "f1191753892f94986e2af34daea9c3a1e40353f63bf7d539e8f535a449068e25";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/my/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/my/firefox-153.0.tar.xz";
locale = "my";
arch = "linux-aarch64";
- sha256 = "da4d2a6160cc516388c7e5ba6c61ce35fa2760f85e1b482bf0168986a54b1221";
+ sha256 = "511d3793a7ffdbf3ca9ea734e4ca9cf64edd7a5bb3799daea84c1c5d50031049";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/nb-NO/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/nb-NO/firefox-153.0.tar.xz";
locale = "nb-NO";
arch = "linux-aarch64";
- sha256 = "c508e7af4e8d6b76798e7b8a0ee904304d01a2ad062adf107f69c0b691fa35dd";
+ sha256 = "a9fada332a4007001c8151dfc83a58ef5a23203a1b5322200aa1a2e0f3617dd3";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ne-NP/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ne-NP/firefox-153.0.tar.xz";
locale = "ne-NP";
arch = "linux-aarch64";
- sha256 = "aeb81280e7f0dffd203e31e999292ec043d9bad49fc7aa05c4960568466f67e7";
+ sha256 = "e401828a16e21783356e4e6527196a9fb991f7a525094768774e13a0cc495933";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/nl/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/nl/firefox-153.0.tar.xz";
locale = "nl";
arch = "linux-aarch64";
- sha256 = "c702b2122a045990dcc8b93f02fbcfd20c0228cad6122ba87110ae8d8e1a4013";
+ sha256 = "a7cf62885f11846a9899bcdc8010a9004c7f97a088b7ee47104cd83c6f4e0028";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/nn-NO/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/nn-NO/firefox-153.0.tar.xz";
locale = "nn-NO";
arch = "linux-aarch64";
- sha256 = "f4715bc8bd6fa2448628b79accceb2ee222e32505d116c5014e95a9da462b5c6";
+ sha256 = "f2746f21a10e8694b41e6eb03bac3a2fe03e1b3661c5a05a9fc371baace35cde";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/oc/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/oc/firefox-153.0.tar.xz";
locale = "oc";
arch = "linux-aarch64";
- sha256 = "e2443416b04c023f049e2848909135eefac3561589ac68e977bf85163ab27f0e";
+ sha256 = "b361970f65f971bb93477c97643f272e1b5e1887c3ef7bd14cdfee1bbdde83c3";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/pa-IN/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/pa-IN/firefox-153.0.tar.xz";
locale = "pa-IN";
arch = "linux-aarch64";
- sha256 = "08734b2e09ad01749121961a16826342d7c9f0fa86bdaa9ce5ab1d37dc5e7f68";
+ sha256 = "9282aec6838eefe26329199856fa1829e9e9eed9339575e49e5668120d52abef";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/pl/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/pl/firefox-153.0.tar.xz";
locale = "pl";
arch = "linux-aarch64";
- sha256 = "43225e4645a56524c358740ba76e3a985d316fe9fac684d190f74edb2da82661";
+ sha256 = "f0a79f7832e7d136edaa022f9208ad5145f28f306c442ba72b0619d0ed139616";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/pt-BR/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/pt-BR/firefox-153.0.tar.xz";
locale = "pt-BR";
arch = "linux-aarch64";
- sha256 = "cc8f1c2e049e944da5978b6bb00df7dcfe200bad9e642234c0b10e77ec74a900";
+ sha256 = "7e86f765a49674a57c146ff6a7241de89a1d80dc68d7e384b18adccca2ab2846";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/pt-PT/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/pt-PT/firefox-153.0.tar.xz";
locale = "pt-PT";
arch = "linux-aarch64";
- sha256 = "849f574ba5a78768ff57e45e2f33e824f9d5d8e10676e38d52cddfe2451e145d";
+ sha256 = "151c1c0423619b63d45ef4cab838f97fb776496b8b3adc3f14091e52e02bf408";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/rm/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/rm/firefox-153.0.tar.xz";
locale = "rm";
arch = "linux-aarch64";
- sha256 = "06b1d82020959127d6ad13e0ca34c5709b1fc02fc8ea4d033e2852fa6cbfbc80";
+ sha256 = "41b8f3745f694969071362f2152263bbd0d937770c2e47e1473189a75e960d5b";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ro/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ro/firefox-153.0.tar.xz";
locale = "ro";
arch = "linux-aarch64";
- sha256 = "5304dd3f87009cdc6baa8edb212f0e97bc062e9606e522cce265fc1b81e8f651";
+ sha256 = "55c65701fd12cac86c3c2f5e4401f83417ff5520cc48a287bda3a24a0fe9b00c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ru/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ru/firefox-153.0.tar.xz";
locale = "ru";
arch = "linux-aarch64";
- sha256 = "d3dfc4a2d53f229a4462dc850f1f16bd4ae03edacdbb9a3fbb0116649ae98a05";
+ sha256 = "24ab9207558c5d21693fc189aec9ce2904138ed6d9fd29d90da7c35fc97df94e";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/sat/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/sat/firefox-153.0.tar.xz";
locale = "sat";
arch = "linux-aarch64";
- sha256 = "92349a705603d4ea74fdfd03e98dc04c2918f2163cdd2b0bf33b1e75e890dddb";
+ sha256 = "33bb77a11e28d902ff2b449e29068f38f1edfa1df60dbb2a00786bfcaa62a234";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/sc/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/sc/firefox-153.0.tar.xz";
locale = "sc";
arch = "linux-aarch64";
- sha256 = "e5858c4ad0d1e0694b63a96de3db5dedfc8de6a01b55526b98575786d259f7c2";
+ sha256 = "d1dfb1d148ba9ac2c943e9c77516a4400c8657ca496ac66d2ba39c7a24b61b14";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/sco/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/sco/firefox-153.0.tar.xz";
locale = "sco";
arch = "linux-aarch64";
- sha256 = "fbf420f26e3bd5412f010b5029617b96f4fd0f75b10a85f3c65a8f12148c0054";
+ sha256 = "e776d7a8a0a786513beb27c77709b7a2f632ac8ad0fd1e6cfbf634d45db8a003";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/si/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/si/firefox-153.0.tar.xz";
locale = "si";
arch = "linux-aarch64";
- sha256 = "e15bbcd9af0e722112e90654b29ce81f86e75c78f93769e4078a71f3560e1690";
+ sha256 = "c114199c3dcdd63292b1fff8a1450c078b215e83e4358f92b0ea388d2c664498";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/sk/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/sk/firefox-153.0.tar.xz";
locale = "sk";
arch = "linux-aarch64";
- sha256 = "15fe710c5877fa30c215d93c819ab85ede215765416c6f68c649a8c43303a36e";
+ sha256 = "7d58ca09dac8715b46335997a72dce0ed51b2a34fbed0dd24d08166db0c95989";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/skr/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/skr/firefox-153.0.tar.xz";
locale = "skr";
arch = "linux-aarch64";
- sha256 = "a45e02c07dec0d9dc5ef5c961f5dc83647fb6e95763e7a091c848fe0df356121";
+ sha256 = "96fa153c19be9cc9a14d9602145292f061e914a661e241d968fc4c5e188f1697";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/sl/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/sl/firefox-153.0.tar.xz";
locale = "sl";
arch = "linux-aarch64";
- sha256 = "f661da01a752d5462549d945407c56366962c6943f923ed10c26d7d3f7626ba7";
+ sha256 = "9ac553b23bac68434c6c196159ec42c59ac0ba668bc0c45bf5f6320e30469686";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/son/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/son/firefox-153.0.tar.xz";
locale = "son";
arch = "linux-aarch64";
- sha256 = "3487d39b10f379c7879c9a122cca170e3c96ce3b01778349fbc04cf97a9bfe45";
+ sha256 = "b9eae2e912cae4919d36d6692749daf06a5c5ee0238e0df405af36f69bb9f372";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/sq/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/sq/firefox-153.0.tar.xz";
locale = "sq";
arch = "linux-aarch64";
- sha256 = "669d4b95bd8dbd1a68d6bd436a08c4d5a745f77958cd58b2f3ea1ccad52f0985";
+ sha256 = "b73c3c163032ff1d3c19bd81da14e3db5148c9083c598cf5082c66c0c7b80cdd";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/sr/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/sr/firefox-153.0.tar.xz";
locale = "sr";
arch = "linux-aarch64";
- sha256 = "5cc14011df05aee9f03e84dbe2bc16d0f78047f68634ad32725c1f521dfbe098";
+ sha256 = "1cce42540553e45e6efc6d8e771cbeb9a6d30191e1aa867d4550a09b699a373e";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/sv-SE/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/sv-SE/firefox-153.0.tar.xz";
locale = "sv-SE";
arch = "linux-aarch64";
- sha256 = "b0d8d05ae36ce9bc0e65aa3c83804d20416cbfc3636f62e1704eb6ddb6965a16";
+ sha256 = "9cd5b0d4da31972f1b8aaf0a192771ee655e32afb38267c66557637f958eb996";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/szl/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/szl/firefox-153.0.tar.xz";
locale = "szl";
arch = "linux-aarch64";
- sha256 = "b94d603bf1737b759a8126ec6b2e55e99aac34f4ab3bdd81253329800ce6c1f3";
+ sha256 = "6e60817ea2a0d169fc9c7fb611f6275f62ae35223926fb53ebf13b11387e2c62";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ta/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ta/firefox-153.0.tar.xz";
locale = "ta";
arch = "linux-aarch64";
- sha256 = "6423a83944dba8e78d6ce2d80414ac48b22486ac4f84bf0cd23ffdc0849c56fd";
+ sha256 = "c950e8d457d92c19101464666d1841e1003b8413fd4b1838d1f9a4a1493f4644";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/te/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/te/firefox-153.0.tar.xz";
locale = "te";
arch = "linux-aarch64";
- sha256 = "b3ff7a776dd223b141182ee4635ef28b1e32fb86c5271323eeafaff8a45ea989";
+ sha256 = "9f168d41189d31de10ad19622d2ac58de9c3d4e9030b69b9f66ac0008909d426";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/tg/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/tg/firefox-153.0.tar.xz";
locale = "tg";
arch = "linux-aarch64";
- sha256 = "66cc2d41ee37917c5187dbf77706f80da466ad8cccdb88631ad36ed6b0effd8b";
+ sha256 = "3c7186d240106df28f560b6637e5a0fe8007a6419bddb1e3f4687b26a045511d";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/th/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/th/firefox-153.0.tar.xz";
locale = "th";
arch = "linux-aarch64";
- sha256 = "5da41a2c479c420401f287ebcac977af376511d06ec5f64676c6d5a07dc6d321";
+ sha256 = "04c2575fc15601e0ed63973a8e20457165b0cc06caabe3fc471345ae66d16baf";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/tl/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/tl/firefox-153.0.tar.xz";
locale = "tl";
arch = "linux-aarch64";
- sha256 = "fd89b192207bb24ff2185121a1765fe05f98bb12e38ed3699c5a846765162bcd";
+ sha256 = "1a37c15b371ec2eba01bc39a796534195ae9b4b5e22a09382b7bde20fdbc67c2";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/tr/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/tr/firefox-153.0.tar.xz";
locale = "tr";
arch = "linux-aarch64";
- sha256 = "bf923969fcaade255f6158d3ab97889c6ce224cdcb59206c852f5d5323affa9d";
+ sha256 = "54123516d77eaaf57446bb2072cc13d2457dabfdb5cbaae2d5ed1050a5b2b47a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/trs/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/trs/firefox-153.0.tar.xz";
locale = "trs";
arch = "linux-aarch64";
- sha256 = "fdf040055cc0af6146b14ee6ed529ba3370fff2eeeb1d635fa20a9ac5ea57d7f";
+ sha256 = "47e32a11ffbb2593c4f601c9e7a77f0378a38eddb0d04ffe94cd32a4efdaf58d";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/uk/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/uk/firefox-153.0.tar.xz";
locale = "uk";
arch = "linux-aarch64";
- sha256 = "1eecddfb59ed090f73f78deb03166aa119dff4bbe9aab6c438c6a5f04d315ef1";
+ sha256 = "b0a6133d93bc4b62207041f332217dd42d95621113ea10e4850fab6f87c4511c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/ur/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/ur/firefox-153.0.tar.xz";
locale = "ur";
arch = "linux-aarch64";
- sha256 = "752a957ba36c07c9e4c38261fdb10e01b4b971aea83fe51dc46560b6468d983f";
+ sha256 = "84fda8e40c9ca4cd0127112354834154a6216fd3c4292c5789b2fc4220d5b6cd";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/uz/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/uz/firefox-153.0.tar.xz";
locale = "uz";
arch = "linux-aarch64";
- sha256 = "838934d0833b8b5e64f6cb97cb652dae90bb10ed17aa7fe45d65d1878f6c1a86";
+ sha256 = "a19682f6c959bc8dd063883bd4a840ffae619e0493dda00041962e2d6cfcf823";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/vi/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/vi/firefox-153.0.tar.xz";
locale = "vi";
arch = "linux-aarch64";
- sha256 = "0d62bfdfc15d80f9790b0ec499947073fc3a0b1648c912463a6cfc30fb0cb8eb";
+ sha256 = "818690d5fb8838a59e3c5d8776b51c7aa7d232c0b4a5e42118293f1d5137276f";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/xh/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/xh/firefox-153.0.tar.xz";
locale = "xh";
arch = "linux-aarch64";
- sha256 = "e1f78b8ec12283b54567005da707aec84eaff12b6f223095c1d896b747d5fbb2";
+ sha256 = "672c576ff69fdb27b3775a0744c7921c951a996f67c7ba163aa00d5b4d6e180f";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/zh-CN/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/zh-CN/firefox-153.0.tar.xz";
locale = "zh-CN";
arch = "linux-aarch64";
- sha256 = "87a9a8bdac0107a7f8a32ea51f7f636d251d10e3be11bb8f5326358e8b600b89";
+ sha256 = "c71fb04e709a132d09ae1a39ac22718ac9702e00e8bfc08e3e50b37548022406";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/linux-aarch64/zh-TW/firefox-151.0.4.tar.xz";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-aarch64/zh-TW/firefox-153.0.tar.xz";
locale = "zh-TW";
arch = "linux-aarch64";
- sha256 = "f85df75f51b6ab9ed8271a1af51865c9f07e3556fd00ca53b1b0b73aadc5d586";
+ sha256 = "d56e22983f797a286a027b4c604011a8df79a8b66bc9f74586fb8471d6369699";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ach/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ach/Firefox%20153.0.dmg";
locale = "ach";
arch = "mac";
- sha256 = "d109d6468240e837bb7a15129def3c4563d3f8f26275b74a0c1f4b260e005b64";
+ sha256 = "96b030be04e51b27e90da84e038151d97f2fe3c88ab3cf775c5bbd7488566972";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/af/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/af/Firefox%20153.0.dmg";
locale = "af";
arch = "mac";
- sha256 = "a418e97bd52aed2991ac6be0e8b07629d8ffeb203a56f45e5848c251c3d0d286";
+ sha256 = "5669da8a7b0f35b8b90817fded49d91e5595245a9f2e79763bc18f729d642c9a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/an/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/an/Firefox%20153.0.dmg";
locale = "an";
arch = "mac";
- sha256 = "cd11259a2104c0046d7a5d251f379b00498e2bf81715e2dd0e0d9dab893d5bc4";
+ sha256 = "e6e3fb717f4d22d53107a45b05e4578be6d33b6d30c8c2e1b4f465600cafafa5";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ar/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ar/Firefox%20153.0.dmg";
locale = "ar";
arch = "mac";
- sha256 = "2c2137daddc5b4b4db50e80b1cd9008ce9491d26451a010c8111ca858146dcc1";
+ sha256 = "ba5fd593ca6a695cd74f7e3b842a8e624686273f1c66ef1989c791c1626ab54d";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ast/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ast/Firefox%20153.0.dmg";
locale = "ast";
arch = "mac";
- sha256 = "64be4f35eccb686dda5cc8e5f24e7e93143e9b12792411e9f359cac9374de54d";
+ sha256 = "5f8655ec129a5f84aefd4d1b4df27566763a1a982f9c9f9064a3528591173888";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/az/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/az/Firefox%20153.0.dmg";
locale = "az";
arch = "mac";
- sha256 = "ecbf2be24f776897b02a50aca30f75381ad5f6a9260402c61f8c19ff4265ee36";
+ sha256 = "d8921b101bc0aec0b25759cb7f4bdb0b603b607a5e23a0e47558a9efcad56dc4";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/be/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/be/Firefox%20153.0.dmg";
locale = "be";
arch = "mac";
- sha256 = "a0af5e21d9dcb892ef045916c9da9f137ec1e2c92bdd8c1c34266bc6f121aff5";
+ sha256 = "64c1844ae67fe4f3e3f1e7915d0777ff9c4ff123e55cfe1f619ee08e1aad555e";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/bg/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/bg/Firefox%20153.0.dmg";
locale = "bg";
arch = "mac";
- sha256 = "4f38503171219bab259a206e90d0ec7c9e6f034c89b25506e37e3f3c37d7d7dc";
+ sha256 = "219fe04c440ebf05dda3cc4507df79d3519910d8727b159318503153bd4dc529";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/bn/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/bn/Firefox%20153.0.dmg";
locale = "bn";
arch = "mac";
- sha256 = "feea23926e4ab04b5773d64435a71bec09e5074da7b36bc13e321cfe930b9744";
+ sha256 = "67298fb790a8adce0b59c8b60e7d6855d53873b2a0c20e0f84453f70b1f529f6";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/br/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/br/Firefox%20153.0.dmg";
locale = "br";
arch = "mac";
- sha256 = "252bd21e6fbfb5f736eb74c79ea3896c1bf3c306301475c83dcca1240957467f";
+ sha256 = "66244c989334a3b3ad994321bd5f2843977d1e1bb5e33f51bfbed0a3ce41fc19";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/bs/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/bs/Firefox%20153.0.dmg";
locale = "bs";
arch = "mac";
- sha256 = "34f561c4743bdfaf1a7495804f939553645606427c9e304d1a09af7740192eae";
+ sha256 = "11434d4b68faf18dea9bfbadbb2af514695c967b394d57f4b5bd29448920dddd";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ca-valencia/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ca-valencia/Firefox%20153.0.dmg";
locale = "ca-valencia";
arch = "mac";
- sha256 = "b4579744b35df912677a755dad2272e12de3cc5a29e828cafb577608a700d739";
+ sha256 = "65eabc830bd36ec7b9756113cf7290f3cd2df668ea3a2d91c6a6661588ea8659";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ca/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ca/Firefox%20153.0.dmg";
locale = "ca";
arch = "mac";
- sha256 = "051dce45f09bb8cc62846fc30b8e7c4d3e2598b5abc5647dc1ab085a8e88965a";
+ sha256 = "6767fbbda0e80c31fb4c3961246d41461bd371d65b4bba9f0314e5cb71024c2a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/cak/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/cak/Firefox%20153.0.dmg";
locale = "cak";
arch = "mac";
- sha256 = "dce3c9a4a0199aa2306c4a3937630cf83916fa5facd72b8b7f4f60f97e5f5206";
+ sha256 = "c4f1480bb3747b0725b4825240bb26181dbf2398d682b5df55df6e8dcc0b922b";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/cs/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/cs/Firefox%20153.0.dmg";
locale = "cs";
arch = "mac";
- sha256 = "8a61ef07a97745bd68e241f4af9d7c448c7f3bee7762ceb330c9e9d880c4784e";
+ sha256 = "3090a1827e432fba690f287b269e027b1e25e4c54831f79475fa804961629661";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/cy/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/cy/Firefox%20153.0.dmg";
locale = "cy";
arch = "mac";
- sha256 = "652cd696099b3713736c130e5bb54dfd99fb2bb50a4928397f49bd42cd8b8f54";
+ sha256 = "6d3d257608c3363cd2ea7e33f99539f2d60fecb7d9c666438a35b6d298064196";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/da/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/da/Firefox%20153.0.dmg";
locale = "da";
arch = "mac";
- sha256 = "bd1d3ea2d75329e99db7ce9c83268216034bdabf92c10b2dbc1f080dbf1ccebd";
+ sha256 = "e0ad1744398ac0750312745d0fd22ca4bd5e743eadf28ef3da56fb069a785d47";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/de/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/de/Firefox%20153.0.dmg";
locale = "de";
arch = "mac";
- sha256 = "7f6232d39fc3b42499c8e2a8c485a15cce1967582d2d30ef6558efef4b996f94";
+ sha256 = "cf1baf71065517ae51175b09204ebf6e912c96e01ecc26fd85c953e1faa8f08a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/dsb/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/dsb/Firefox%20153.0.dmg";
locale = "dsb";
arch = "mac";
- sha256 = "db131cdce9e759f482498bee9836f8f6dc9b270559b9f2fd967695c4e91316ee";
+ sha256 = "eb018117826e3855a42e734e3561ab1b56d2d1bab9ce5096388281f581118d86";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/el/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/el/Firefox%20153.0.dmg";
locale = "el";
arch = "mac";
- sha256 = "3524cf8d5d34816c2ca0f77a688a83e1451c9840bf226229ffc76ec0c0b1e3c9";
+ sha256 = "8e1e29f33666d1cf6b1bdaaa7b358b8d3679d8ba60431cb87d65e2bfb9b3de90";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/en-CA/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/en-CA/Firefox%20153.0.dmg";
locale = "en-CA";
arch = "mac";
- sha256 = "577372a9575bc7fc291c2c1539c83218d0ff783222e125a4ad0daacfad71d41c";
+ sha256 = "e0f424e35f09a1721097f16eb9e2c32f3d5391b324679bd82b6c4b251ab0fc69";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/en-GB/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/en-GB/Firefox%20153.0.dmg";
locale = "en-GB";
arch = "mac";
- sha256 = "2f3570e61bf02642a306f83f338f598ed5fddc672cf5b9f65d9c74bdf6dd6d2b";
+ sha256 = "b52a11b259624830c1af864a8c8c40ba13828b3d424c55d62c8873589a795ff0";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/en-US/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/en-US/Firefox%20153.0.dmg";
locale = "en-US";
arch = "mac";
- sha256 = "bc2e72f6abf31aa854b30a3e2841d3f2b8b8e153eaa0a5c3ab285728b7f9b160";
+ sha256 = "2f9b5a20e546e7e79e4182f8fe10353a3e251635963ab3f6d399a3f290adeb96";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/eo/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/eo/Firefox%20153.0.dmg";
locale = "eo";
arch = "mac";
- sha256 = "a6ed72875ea0280a45016ce9233ab2ea28bb32833cdead4981e85a92e3c1fc4d";
+ sha256 = "e302647e7cc7cd03056055a70edae7e54f8eb17ed0bc893f4a54dc1418dae071";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/es-AR/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/es-AR/Firefox%20153.0.dmg";
locale = "es-AR";
arch = "mac";
- sha256 = "7f5228050a974ddc86c3b288941c221d4593a926533d318029896f64cfdb0adc";
+ sha256 = "5e6f585fa8217cf8fe6624ebec7435632a4b1e5fac564ea4522b76f6013da3cf";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/es-CL/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/es-CL/Firefox%20153.0.dmg";
locale = "es-CL";
arch = "mac";
- sha256 = "662b648abd16d473c1bbfeeda51422b58588a78ab84452f5626f7eed0efac2f9";
+ sha256 = "d913914ea12d9783d60812af2193203ebc4555024d7bc3a521ee1f71b5408879";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/es-ES/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/es-ES/Firefox%20153.0.dmg";
locale = "es-ES";
arch = "mac";
- sha256 = "bbe59b59a737f709bbc3dbc8e07a6e7b556bbf5039f3268532a99e261cd8a033";
+ sha256 = "c88d5a0115724e2adda15c2aa4e262c160a1491d4d31c40c55f141272af1a59c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/es-MX/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/es-MX/Firefox%20153.0.dmg";
locale = "es-MX";
arch = "mac";
- sha256 = "da418707aff6ed6e2d8c1b0264d3a5124bfc0b2abac887fcf18e983fee31b2cf";
+ sha256 = "86a8b36e46aa6a3626e918bdcbb81b6847a8569f04b8a43f0d2a16a487a4981a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/et/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/et/Firefox%20153.0.dmg";
locale = "et";
arch = "mac";
- sha256 = "6e3969680c68e857d8bab99ede4878e2a9896588e0b856a0fc07a5bdd8628b57";
+ sha256 = "14daf5041f98109ac7ec8327c777615d6e1d19ab2f208d7363862f7fa84405d0";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/eu/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/eu/Firefox%20153.0.dmg";
locale = "eu";
arch = "mac";
- sha256 = "8e5d162e687cfed827bea13e64ef63bc4d0ed801dd240f01ed5a0e1fcb4110da";
+ sha256 = "ab6b5ced6ac7a24007df72f476e3c04ea2451f843ce4014a6b6504c12a82814c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/fa/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/fa/Firefox%20153.0.dmg";
locale = "fa";
arch = "mac";
- sha256 = "b33d33f0fb0bae5eb04725ee63dffdcc007a9d4f2426b96096a2354a06501b3f";
+ sha256 = "a23a2407f69523da2fd1d0f88b3491115a2e518275143b36af5a384f9ba43e6b";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ff/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ff/Firefox%20153.0.dmg";
locale = "ff";
arch = "mac";
- sha256 = "7b6b586d82c03ab031b3b90c0a2cb594aa8b876178a6c7d1a76e70eb13e7ef48";
+ sha256 = "f023a67ae55c6ba25b394a7f8e76484c4bb997dd20954b10a82f878e034cdd4f";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/fi/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/fi/Firefox%20153.0.dmg";
locale = "fi";
arch = "mac";
- sha256 = "f73d6d3a0a2cf245105fe2b15be4e9fb075058ce58a3c9bebd64ec8b832b1c0a";
+ sha256 = "175c90ad743183656e96a60a8959212b5bae07c0719089e3260c561329143ed3";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/fr/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/fr/Firefox%20153.0.dmg";
locale = "fr";
arch = "mac";
- sha256 = "e219c74cad44193370aab7cf58c6131d0646b352f7e79b55d12437ad482214b8";
+ sha256 = "a0c8ed6091eac65ad5fda440e6b547e3af8a0aeb175fcc7e01eb0c938680428c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/fur/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/fur/Firefox%20153.0.dmg";
locale = "fur";
arch = "mac";
- sha256 = "f6d1bd6e98239962364fa178366c7bdd3997e60bcc4416493f22ab11204ce77d";
+ sha256 = "5ba5621aa9711ea7487076c045540c453b71273880f92d47646e7426050145ea";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/fy-NL/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/fy-NL/Firefox%20153.0.dmg";
locale = "fy-NL";
arch = "mac";
- sha256 = "ee96dfc51c8fbd63c5fa6f9f529a6069485eb6daa24275352cd138cd8b6ead6b";
+ sha256 = "1c9a2083888ac5f8ffec8d3990f235435e6896d852d0a8e3be92f5036a019ab1";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ga-IE/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ga-IE/Firefox%20153.0.dmg";
locale = "ga-IE";
arch = "mac";
- sha256 = "9fc53b347aa4662e9d18c19ce6c3392561cb237fc5878d6e1c0b7ce9401e5c2f";
+ sha256 = "d80640b3551fdce26ac8705510939e28b6db25f5dbe02fd13c774b3401563204";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/gd/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/gd/Firefox%20153.0.dmg";
locale = "gd";
arch = "mac";
- sha256 = "5672037b3e176a056671c218036c0429892a3c58d899221172733ad7dde4748c";
+ sha256 = "b0ab56e45d5a234542821648a2c930928d93d1dcb879eb73d6c9248619616b2e";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/gl/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/gl/Firefox%20153.0.dmg";
locale = "gl";
arch = "mac";
- sha256 = "d8133870cdb2ded7191bfa4fa3fab2dbb05f0431835133f76769745239ffafff";
+ sha256 = "397cbc085496e41566b8ee10efc97563df1a91da04dc806525b1bfbb45a81668";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/gn/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/gn/Firefox%20153.0.dmg";
locale = "gn";
arch = "mac";
- sha256 = "17fc1998cad24861025a9c03e53077c2ccd82d6c4f7bd798013c6a0fcc2c0045";
+ sha256 = "b1b496a009e36292c6dbdc162a12efe512451fc6d5186c92c4fe3058f3c457cd";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/gu-IN/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/gu-IN/Firefox%20153.0.dmg";
locale = "gu-IN";
arch = "mac";
- sha256 = "88932d471b7cc1c83489bf3d47bd010028842d39085096fdf000c45e2d27766f";
+ sha256 = "48fe07f53c95b5d77a990d32bf965d7dda71cebab0e702bd2fcb5f0276c1697d";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/he/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/he/Firefox%20153.0.dmg";
locale = "he";
arch = "mac";
- sha256 = "009fb0d815e1c5f30ae17879bfcafb6bcdc522929208f9ce4404b389e1973377";
+ sha256 = "091cc0fd07964248940da11f43d92bc88c5224dea463f95da34b9a6c86168629";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/hi-IN/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/hi-IN/Firefox%20153.0.dmg";
locale = "hi-IN";
arch = "mac";
- sha256 = "c6e09aa3f0c2ada9bdd086b35c264fd0276c1267d64d5c189333c249c16e1850";
+ sha256 = "7d225e6c75e3e7b7fcd09a81907b28aba27a16d41930ef187d96d858256151e5";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/hr/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/hr/Firefox%20153.0.dmg";
locale = "hr";
arch = "mac";
- sha256 = "70e0aa55d64ce6cb7f616708f6fcdd76aef8fbafa7c70db265e16c88d008c077";
+ sha256 = "fb4bb6e51c46bd2cf03618961f60364b56fcf0086f7c60e5aa60737f471a7957";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/hsb/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/hsb/Firefox%20153.0.dmg";
locale = "hsb";
arch = "mac";
- sha256 = "a336d45d2467c513f7358073bb38a5762670afbcb7c277c75b63fe7e29eb9e32";
+ sha256 = "19636cc407ebf9884cae4ec0342739a2c13c20283fa601450c03acecd2700b1a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/hu/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/hu/Firefox%20153.0.dmg";
locale = "hu";
arch = "mac";
- sha256 = "0ce51e08a8da787e071a66271a167d99c757af0899ae1f7f5c9f5cc7ecb51714";
+ sha256 = "dda0df0731b80fa2a21146a171f415adfb44242582a0783de203444096442565";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/hy-AM/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/hy-AM/Firefox%20153.0.dmg";
locale = "hy-AM";
arch = "mac";
- sha256 = "b7cc80fed0a7754e410b68143375acfa04e054f2931beb36cf27bdd021d356ad";
+ sha256 = "031cea97489db096c7dca071209e3e85e2ceca50b9816980b229cadbabfb5938";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ia/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ia/Firefox%20153.0.dmg";
locale = "ia";
arch = "mac";
- sha256 = "c5462045f4978c23d16f0cd9bfef75ed37a9bdbdce880691028b059d171b3ff8";
+ sha256 = "3955026d7b643b932a6e6e66d17852f4edab1b546efebf88ef0c0dcea4ed4604";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/id/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/id/Firefox%20153.0.dmg";
locale = "id";
arch = "mac";
- sha256 = "9987f59f7fbdb6da0c66bd60b2a2259c9b8514c59dbf5901bebbef147205a8a9";
+ sha256 = "06bdd61e811051f2fbf13eeac5bf47055958df87d0fde9628c82977f0e722d76";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/is/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/is/Firefox%20153.0.dmg";
locale = "is";
arch = "mac";
- sha256 = "b258a97995fbb72f977a4633299d5e2849056d1495d444ac304a330275c16091";
+ sha256 = "1489f330ce8690dc5a91dc826a2278f2dfbe0d9c01f1092864abc4662490dc47";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/it/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/it/Firefox%20153.0.dmg";
locale = "it";
arch = "mac";
- sha256 = "7ba2e0c6061e1ac3ea06bc568155f1a206003402b645e513182321a09114c6a7";
+ sha256 = "b45d6e5f6566fd980f87171c97eb6eb3b81e3213ac453202884207961bc3e6f1";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ja-JP-mac/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ja-JP-mac/Firefox%20153.0.dmg";
locale = "ja-JP-mac";
arch = "mac";
- sha256 = "45ce4c7c928d24feb77f1d57333342247a523eec584fc6cf10f79b3dcfd3996c";
+ sha256 = "ae0b689d3c4fccbea1e8b0106b3ee6185300adf3d07e7ed1ce525687781a7932";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ka/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ka/Firefox%20153.0.dmg";
locale = "ka";
arch = "mac";
- sha256 = "6ae7cc3b545561a389dbd718a41c9fce96e29caa37112eaeb72e25cd0f28fa50";
+ sha256 = "83437e6f2e8b7361a5df5ffa4745a3a77738769983253cc882054eebad462f5a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/kab/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/kab/Firefox%20153.0.dmg";
locale = "kab";
arch = "mac";
- sha256 = "2879b7279509a3cb207d764e6a9fb851d5182d11f2434d603e8b4f9fa6507d40";
+ sha256 = "89473fb2e864a219ba1c0ceff39cf03cea70d4cb80ad92c635e366c97916b447";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/kk/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/kk/Firefox%20153.0.dmg";
locale = "kk";
arch = "mac";
- sha256 = "8f1cbd44c51d55e7aeaa7f02f69e56ccd473d6afab4f6f9cbb399d928e63deea";
+ sha256 = "e080144a151f5abda3d7a6aca587349e39d137b2598b9750a0c6ac8170e45570";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/km/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/km/Firefox%20153.0.dmg";
locale = "km";
arch = "mac";
- sha256 = "3b3b5a2bef80085504b4817116f82e0cb117c2fc2d449d40e66d40988e5f9075";
+ sha256 = "1e9ed09fccabb2f2138942a08da8ea384328accb4985521d30e6d881f0c9a801";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/kn/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/kn/Firefox%20153.0.dmg";
locale = "kn";
arch = "mac";
- sha256 = "a5c42eb35ea9909a69799b7160c2256b2bd54596f2feab3a971fe3b86235d31c";
+ sha256 = "3f9b675c5ee5eb36200ed59241ed4451e6d8f1992485c41e5b41bd713d0aef24";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ko/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ko/Firefox%20153.0.dmg";
locale = "ko";
arch = "mac";
- sha256 = "8480a0e8f4e74667f5f30495feb907919f55e14d2cebbd7a7b549fb4fba1f57b";
+ sha256 = "54628f5e2294ffc4f4f67b0d87aaf0be8b230f310a502c35c99f9a9e09d9b8fe";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/lij/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/lij/Firefox%20153.0.dmg";
locale = "lij";
arch = "mac";
- sha256 = "7d5fb1de26bd29c7d42b9ec57f530140a264d2bd7944b9e7a702dd0af27cf680";
+ sha256 = "e9a1625360f5471bd3ed1f54802aa45273b4d22f35f66ce9f9258f4e1f888966";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/lt/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/lt/Firefox%20153.0.dmg";
locale = "lt";
arch = "mac";
- sha256 = "95b106de218172a8e23faaa281217465160de4c94212f001dbec79f8b1e72ad0";
+ sha256 = "36db97615eab2c6ff0954edf619e9ab5358f6c3d071b1ea931bee4723b5991f1";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/lv/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/lv/Firefox%20153.0.dmg";
locale = "lv";
arch = "mac";
- sha256 = "4ff3c84cd71df51d93158d7da62b4a97b69bb0c043653539157b986024803743";
+ sha256 = "135a8cc108ed70e606408f4ae39b36eb8bc264b94b750d06070d811386a9cfb7";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/mk/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/mk/Firefox%20153.0.dmg";
locale = "mk";
arch = "mac";
- sha256 = "e6d9d7e152a17cf4c24cc1761b2e14ebf2b6085fd2b709de992ba00683adb03e";
+ sha256 = "aeab0788ea3450a4997beca8fc40a988e6746934f58595f7cbd693249d4566b6";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/mr/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/mr/Firefox%20153.0.dmg";
locale = "mr";
arch = "mac";
- sha256 = "a24d6e5a0d6251eecadf5af806e6a823664909c389707178b8f26229f1d895ca";
+ sha256 = "95a259e5c4f228ccd780243150db9f86216e1ef3feb684001e945a0677023a82";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ms/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ms/Firefox%20153.0.dmg";
locale = "ms";
arch = "mac";
- sha256 = "432a3c8e806fc3129538f665caec1fca5c4a36bfa6f43a87bd6497dab5a598b2";
+ sha256 = "1ed967a7659a139b703943d1b37b918490efc026e9817697ce6799b074b35831";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/my/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/my/Firefox%20153.0.dmg";
locale = "my";
arch = "mac";
- sha256 = "49f4fd9595f06a45484ea15c0d1a42c35e56eb21e9ea88d26faba1fe380d7129";
+ sha256 = "a9d4d4911b7e09526933d7ccc6b821df9b50c6b90dc2cd4b187ea88b999ee27f";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/nb-NO/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/nb-NO/Firefox%20153.0.dmg";
locale = "nb-NO";
arch = "mac";
- sha256 = "e91073c6f259c96eafcc19f5d059e2ba94c642066962484a9767bdcdfa8bf970";
+ sha256 = "47c9789e7ad99abc6a872bb62f0bb443f7e2f07767e230357bb4007204df2d45";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ne-NP/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ne-NP/Firefox%20153.0.dmg";
locale = "ne-NP";
arch = "mac";
- sha256 = "f4ba5e70cb7dccd729d62a66b5341418a625f3622a155f022f67ecfba175571f";
+ sha256 = "af4ce3b82baf37076f06f413e6cd66587e2eac1dbcb9c8044677c257d2eef426";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/nl/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/nl/Firefox%20153.0.dmg";
locale = "nl";
arch = "mac";
- sha256 = "ccb3fa66fa102b1ba78312bf128b7afbc9e0989684dfc7b6d4392b3bbf284934";
+ sha256 = "2b19387b7499d1b357bb68a6123d1f6fbcd92182b390f5c016cc57dd83a0b480";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/nn-NO/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/nn-NO/Firefox%20153.0.dmg";
locale = "nn-NO";
arch = "mac";
- sha256 = "ac824d101b89a75afa9d195a740b32ae9d54c120fedb395a97df8614c6d4da48";
+ sha256 = "b3bc1401ced74bc61c3a3505c4467022fcb8ae298f11bad692372a2479db6488";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/oc/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/oc/Firefox%20153.0.dmg";
locale = "oc";
arch = "mac";
- sha256 = "a376f7b39f49ca455bff09bead533418db9aae706a81d1e567b35f00817f27fe";
+ sha256 = "532c433190d6a22bc590510ea610768f1b6326a9f20aedd2e021be3afd111624";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/pa-IN/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/pa-IN/Firefox%20153.0.dmg";
locale = "pa-IN";
arch = "mac";
- sha256 = "02f369380f0734b4a6e4b762bd3a39a4e51e849693abc468f6618202ba2427dd";
+ sha256 = "bdbf417c7f74ca904d7176ae3d93e39d1632d9fcc81703b3ae0965eb1a3975f1";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/pl/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/pl/Firefox%20153.0.dmg";
locale = "pl";
arch = "mac";
- sha256 = "86f3a774809efb8722478e8257fbf7196dcedb42645c5dd37127c7c0119e93c2";
+ sha256 = "6023d2e9ed3188657bc7ffc7f5fb40f3c8a6239ba90f2be924ea1d722f483b5d";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/pt-BR/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/pt-BR/Firefox%20153.0.dmg";
locale = "pt-BR";
arch = "mac";
- sha256 = "9532f7c63cc71891bea015f4f71df858fd016c3ed9920ca0e415966d7c3807e6";
+ sha256 = "8146af9e68e9484aca7a6f9efabe79f319cdc83b4ecf3e0612a40d23f1240016";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/pt-PT/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/pt-PT/Firefox%20153.0.dmg";
locale = "pt-PT";
arch = "mac";
- sha256 = "42d135d2fe9e69bbcf72472287d8cde5fc1ebb3e32487dc720962a3164bd87bb";
+ sha256 = "103a97da2f299176e72a2bd5198841135a16e25235b714996fff49534af85746";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/rm/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/rm/Firefox%20153.0.dmg";
locale = "rm";
arch = "mac";
- sha256 = "33e250c0c56167ef4d0536b88d575ca58be26aacfb75e823b0de68d2b208cccd";
+ sha256 = "ec26b024f14eeb3e713ce403b2334f60dcad6260f87186a94eea43584a807ea0";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ro/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ro/Firefox%20153.0.dmg";
locale = "ro";
arch = "mac";
- sha256 = "027e7bdffa4db1948fe66d9e4c46e523a2931ab7db7babc7e3db41c1eecb5888";
+ sha256 = "1631091bdaa9a075dc94ccd3e6a9ca2bbef7b1448ece9c0270df32e1618538cf";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ru/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ru/Firefox%20153.0.dmg";
locale = "ru";
arch = "mac";
- sha256 = "92dc8213d80d417d394bdefd7e4aed99b3c979d53dec3cb2dd135eeb37078b0b";
+ sha256 = "5835815abcd35ffe56db5fb7efd8006ffece375ffa14736742689ad9a2474be9";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/sat/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/sat/Firefox%20153.0.dmg";
locale = "sat";
arch = "mac";
- sha256 = "7711e02cb8d398c2787bd621362ec6bdd7fc89a7bc23e94fd02e8158dd9569ec";
+ sha256 = "4ca5fdb03584d8ba5bcea6a7e780c0248b66badd002e1a52e1829ee2af4cde4a";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/sc/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/sc/Firefox%20153.0.dmg";
locale = "sc";
arch = "mac";
- sha256 = "cf61b01d10317b5ddf6ed5b2169818381efff98bbd3e863eb3a7b9aef7a68e26";
+ sha256 = "ce8e0759e9bb6d52a50c2d32dc45b0aa75554898cb8197493cae2d93f807e9e3";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/sco/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/sco/Firefox%20153.0.dmg";
locale = "sco";
arch = "mac";
- sha256 = "8a5ab2301f95861c69f6e7e956b5cab5913a467413c319057ca4d7d771bf928a";
+ sha256 = "81c18aa8f3a869aaaca810a8eb7520a91ed1a8a2517f8467f8b1ee97894c8487";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/si/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/si/Firefox%20153.0.dmg";
locale = "si";
arch = "mac";
- sha256 = "e4f692fc6102fb1e7a8f8e4f28ca4633ec8b0de4d7180b4667e4268d9ca1231b";
+ sha256 = "430957e1ded5667d9eff7752d9b44d673355fcea1009cf1b0bcb547bfbbb1609";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/sk/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/sk/Firefox%20153.0.dmg";
locale = "sk";
arch = "mac";
- sha256 = "92bcaf75ef583f464dbd060fef08369baaa53ce395846961942309f7be8ee9fe";
+ sha256 = "3af5606002cd5a1f61b38e48989bb6126adec402571a51e33e314c7371dabf17";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/skr/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/skr/Firefox%20153.0.dmg";
locale = "skr";
arch = "mac";
- sha256 = "23ffa1aba5fc2513b75e561615c07f4ab73cf464cec313b189adde13a3f6d6c5";
+ sha256 = "ee7a77b4cb459f85540a74a3eefcdc8bcdc5e5355e97e8140f3b4b139d5f39e2";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/sl/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/sl/Firefox%20153.0.dmg";
locale = "sl";
arch = "mac";
- sha256 = "96c619665ca7f90bf605d4b33c16a5eb3209a5bc982de65e6362e74abb322a5a";
+ sha256 = "bc60b72372ae61d9c093ebde1e0bee7719871ddc7365c421bf8dbba06d6f3d77";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/son/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/son/Firefox%20153.0.dmg";
locale = "son";
arch = "mac";
- sha256 = "75a48f037c8161549c7025c035c067f234012ab14d50bebc2858d099c3cea999";
+ sha256 = "5cf39f15a21df88c3891f204ecf98242b67a4f55564d988e0ce52bde49a96708";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/sq/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/sq/Firefox%20153.0.dmg";
locale = "sq";
arch = "mac";
- sha256 = "3bb6af9c8217b22f7c469498186831da05eefb4f97f3d790329e6fb6002a382b";
+ sha256 = "9967c38652c5dc8f0910aa16524052d923161f885f31c15d094d76cf8a11b891";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/sr/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/sr/Firefox%20153.0.dmg";
locale = "sr";
arch = "mac";
- sha256 = "38e4cb5a7df9e80a0536d810b260883b5caa7ff61766874bc675fac4607372ba";
+ sha256 = "720ff98d204cb759022e56f707bcc2ca90efe1f0f312da37c523d04d1e80c458";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/sv-SE/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/sv-SE/Firefox%20153.0.dmg";
locale = "sv-SE";
arch = "mac";
- sha256 = "8d4cb2cc9f76671903d0feb6169f620a364c72f54f654fca071a2f66af9b135d";
+ sha256 = "a3b70bbdaf84358b16d0e3673d312455cdbf4b4536c0ef44ffdf24270d54b30f";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/szl/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/szl/Firefox%20153.0.dmg";
locale = "szl";
arch = "mac";
- sha256 = "b85165efb112bdc0a5725c4f1a6a6120d07e07a70504799b9a4813121eb1f75f";
+ sha256 = "fb4cd0e272ad8fa982e56847e3483d282cc8623d4817aebbed52a9f9784340fa";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ta/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ta/Firefox%20153.0.dmg";
locale = "ta";
arch = "mac";
- sha256 = "b3b75b28988a7847cac82abb6c1cdad02b02653d9d8ec5b28d32ca5986a0d205";
+ sha256 = "08bfc64a54ce16c9f066174f7b759cb81fe5dd28988f5a7f33b7accfd7fa9480";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/te/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/te/Firefox%20153.0.dmg";
locale = "te";
arch = "mac";
- sha256 = "aaca8301f2857abfa176d428a5b1cf49dbd289502b3fa878bbf87cb20cacbf26";
+ sha256 = "c87a55021014e82148a16588010e038ffb8ca49a7707574e475f97d923308c78";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/tg/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/tg/Firefox%20153.0.dmg";
locale = "tg";
arch = "mac";
- sha256 = "36d2c47239879a3d1cf0b0c39dc3f2b6e03b589ecdaf5d9ce1969fbf3f33d7a0";
+ sha256 = "cc93f8ea9664ce3cd47548b176935e1d5061eaa0c4e87cfa6d8084f02fcbc0da";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/th/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/th/Firefox%20153.0.dmg";
locale = "th";
arch = "mac";
- sha256 = "141a725ff1b58f2ce2e98e4d3b75917d85d0883e1f1ac8e0ac5ffa60fb2767b4";
+ sha256 = "6534a1fe8b6ba384c0456fb937234fb2c61b0a42a3bb3f43e91990524fd52f53";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/tl/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/tl/Firefox%20153.0.dmg";
locale = "tl";
arch = "mac";
- sha256 = "424ed93cac2306a480ebd50ae35401e2665f0f41aab75e6dea9c43882a81666e";
+ sha256 = "7d7ba852af7564e06c57c3b3815d216174ce82267a690e189cb7bca764137ebd";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/tr/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/tr/Firefox%20153.0.dmg";
locale = "tr";
arch = "mac";
- sha256 = "c6a42ff159c20ae851803c68930374482cc464d0e2dc8e542cf06e9826157312";
+ sha256 = "53985a150d86635186cf7e07a9d6f2626c21dbe5d80d319664f21a8c14b27db6";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/trs/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/trs/Firefox%20153.0.dmg";
locale = "trs";
arch = "mac";
- sha256 = "7a884903c4b9935aa4a1f86ab3af01dfd039613100b044261b207d1bae1dbdfd";
+ sha256 = "367c27a32da15e51233d1a6638a4b19a07b55e38e40722709b82b7426a20590c";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/uk/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/uk/Firefox%20153.0.dmg";
locale = "uk";
arch = "mac";
- sha256 = "c8fa5f9b3bcbc69ef01f3d42c5e1cbe7964407e070a9f866840e81e3d9f40d4d";
+ sha256 = "9c92e2fadb5768c956e7a77df4bf03522010c057cdf05873d63615bb8de14679";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/ur/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/ur/Firefox%20153.0.dmg";
locale = "ur";
arch = "mac";
- sha256 = "12a1bc68cfe6727cc140541aff3186c9c39722afff9e83abfe9a7ae1ae61396e";
+ sha256 = "7ab0c7aa38cb01e1cf81331f514270933882852d554642864a9d1996739724c5";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/uz/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/uz/Firefox%20153.0.dmg";
locale = "uz";
arch = "mac";
- sha256 = "62f0cbcaa8ac13ffb3203015806622eaad786486ab3b2bb864e4b77b71ed7809";
+ sha256 = "dda7c1ed2f6edcb59e8b6ac7ebcd14f12e0ee253934d7564d7c2b8d94eef2888";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/vi/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/vi/Firefox%20153.0.dmg";
locale = "vi";
arch = "mac";
- sha256 = "748d90db2e87eb31992acc9e1a2e274a4c8ee2b164c4d494e9c7ce948a931462";
+ sha256 = "3fee1231a71a49a1ff71617237ac52e555aeed85688eb95260ac51e901c68501";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/xh/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/xh/Firefox%20153.0.dmg";
locale = "xh";
arch = "mac";
- sha256 = "6c9f4c0deee6b49b14a3e82376f3bd027d5522c2c8923d595e3797a01c611711";
+ sha256 = "5a9d20d61521fe0ec9f297351444420c0d2b4d987360051b3ac993f68cc8b23d";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/zh-CN/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/zh-CN/Firefox%20153.0.dmg";
locale = "zh-CN";
arch = "mac";
- sha256 = "e27fe006d808af3519ea45aad63087aa0786d825f21cb16280c33b054c0c86bf";
+ sha256 = "9bfd261a65dcf84df479041cd42c20130d975d5fd943f6dce5d6527126f55f08";
}
{
- url = "https://archive.mozilla.org/pub/firefox/releases/151.0.4/mac/zh-TW/Firefox%20151.0.4.dmg";
+ url = "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/zh-TW/Firefox%20153.0.dmg";
locale = "zh-TW";
arch = "mac";
- sha256 = "78748a47a616b6389e4dd315d785d83aedbb83d8d20a776f72a8e0f8253c1ad6";
+ sha256 = "1e7ff3bdc7f0901ad72ebff9d1960f180b9c517bc4200d101570ff6406ee9436";
}
];
}
diff --git a/pkgs/applications/networking/browsers/firefox/packages/firefox-beta.nix b/pkgs/applications/networking/browsers/firefox/packages/firefox-beta.nix
index a1037c52818f..83fb6538eb5b 100644
--- a/pkgs/applications/networking/browsers/firefox/packages/firefox-beta.nix
+++ b/pkgs/applications/networking/browsers/firefox/packages/firefox-beta.nix
@@ -10,11 +10,11 @@
buildMozillaMach rec {
pname = "firefox-beta";
binaryName = "firefox-beta";
- version = "151.0b9";
+ version = "153.0b13";
applicationName = "Firefox Beta";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
- sha512 = "2d50cbe82dd470ab94148ab57585324ff98950fa25b806065b61ab2f541c795d826f4d9a454225ec798cdcd77dfd453dc50d26f0ccf8bdb5fcdf010244aec45a";
+ sha512 = "fecfb1837d1907d54ed52bc40113804b6637352c2cbe6eb906f950d7749cbece32446b42c392102fa9e16591949619237dc2dbeb13bec18697ddd42e9ce8d4dd";
};
meta = {
diff --git a/pkgs/applications/networking/browsers/firefox/packages/firefox-devedition.nix b/pkgs/applications/networking/browsers/firefox/packages/firefox-devedition.nix
index 8b7ee5d85834..23e821f4494e 100644
--- a/pkgs/applications/networking/browsers/firefox/packages/firefox-devedition.nix
+++ b/pkgs/applications/networking/browsers/firefox/packages/firefox-devedition.nix
@@ -10,13 +10,13 @@
buildMozillaMach rec {
pname = "firefox-devedition";
binaryName = "firefox-devedition";
- version = "152.0b8";
+ version = "153.0b13";
applicationName = "Firefox Developer Edition";
requireSigning = false;
branding = "browser/branding/aurora";
src = fetchurl {
url = "mirror://mozilla/devedition/releases/${version}/source/firefox-${version}.source.tar.xz";
- sha512 = "e76142f19c3eccfeedd069bb14a6732b73a848ecbd16e74b6902e73b560db023611fabfef238d2f92b522ad75bb24d9368e2a75dfac9a6ff6c665a542445f157";
+ sha512 = "ee1a699ab3f390031e7eb85b6cc394d3431cc2e2960e97cabc393cc4edad1bd1a2ba62e7d834e2ae52fa7fcf3a08c6194c1801ba7e62fa3ceb98ee08ac27981d";
};
# buildMozillaMach sets MOZ_APP_REMOTINGNAME during configuration, but
diff --git a/pkgs/applications/networking/browsers/firefox/packages/firefox-esr-140.nix b/pkgs/applications/networking/browsers/firefox/packages/firefox-esr-140.nix
index ca7547cf6f1b..9b6ed3c5325a 100644
--- a/pkgs/applications/networking/browsers/firefox/packages/firefox-esr-140.nix
+++ b/pkgs/applications/networking/browsers/firefox/packages/firefox-esr-140.nix
@@ -1,5 +1,4 @@
{
- stdenv,
lib,
callPackage,
fetchurl,
@@ -9,11 +8,11 @@
buildMozillaMach rec {
pname = "firefox";
- version = "140.11.0esr";
+ version = "140.13.0esr";
applicationName = "Firefox ESR";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
- sha512 = "d06adb3ef4de1324e3d61872d70de31ab08ac013f33903549bed28c6ebcc5b4dee94bb36388282c1935d77d1a564079f3adbf08d6bb80284a899cbb3d861300c";
+ sha512 = "937a4103d71c5e1e4bf051821729f6ea70b5c18d444930a487695cc23d74712a0134047248f6ac02305e01becb705426a55b9d89739f02a01eda01ecf5bc27f1";
};
meta = {
@@ -22,9 +21,6 @@ buildMozillaMach rec {
homepage = "http://www.mozilla.com/en-US/firefox/";
maintainers = with lib.maintainers; [ hexa ];
platforms = lib.platforms.unix;
- broken = stdenv.buildPlatform.is32bit;
- # since Firefox 60, build on 32-bit platforms fails with "out of memory".
- # not in `badPlatforms` because cross-compilation on 64-bit machine might work.
maxSilent = 14400; # 4h, double the default of 7200s (c.f. #129212, #129115)
license = lib.licenses.mpl20;
mainProgram = "firefox";
diff --git a/pkgs/applications/networking/browsers/firefox/packages/firefox-esr-153.nix b/pkgs/applications/networking/browsers/firefox/packages/firefox-esr-153.nix
new file mode 100644
index 000000000000..5604796cdde0
--- /dev/null
+++ b/pkgs/applications/networking/browsers/firefox/packages/firefox-esr-153.nix
@@ -0,0 +1,37 @@
+{
+ lib,
+ callPackage,
+ fetchurl,
+ nixosTests,
+ buildMozillaMach,
+}:
+
+buildMozillaMach rec {
+ pname = "firefox";
+ version = "153.0esr";
+ applicationName = "Firefox ESR";
+ src = fetchurl {
+ url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
+ sha512 = "3ea7956ef2fdcaa86430ef922f04484cbb1a3faf447e035107159fcd5ecd8d0a0e4507a332fc3d7b66e4308c38733bd0624affd7629447b89c655a9ea0fb0936";
+ };
+
+ meta = {
+ changelog = "https://www.firefox.com/en-US/firefox/${lib.removeSuffix "esr" version}/releasenotes/";
+ description = "Web browser built from Firefox source tree";
+ homepage = "http://www.mozilla.com/en-US/firefox/";
+ maintainers = with lib.maintainers; [ hexa ];
+ platforms = lib.platforms.unix;
+ badPlatforms = [ lib.systems.inspect.patterns.is32bit ];
+ maxSilent = 14400; # 4h, double the default of 7200s (c.f. #129212, #129115)
+ license = lib.licenses.mpl20;
+ mainProgram = "firefox";
+ };
+ tests = {
+ inherit (nixosTests) firefox-esr-153;
+ };
+ updateScript = callPackage ../update.nix {
+ attrPath = "firefox-esr-153-unwrapped";
+ versionPrefix = "153";
+ versionSuffix = "esr";
+ };
+}
diff --git a/pkgs/applications/networking/browsers/firefox/packages/firefox.nix b/pkgs/applications/networking/browsers/firefox/packages/firefox.nix
index c24ed2dd9b13..d0251d267526 100644
--- a/pkgs/applications/networking/browsers/firefox/packages/firefox.nix
+++ b/pkgs/applications/networking/browsers/firefox/packages/firefox.nix
@@ -9,10 +9,10 @@
buildMozillaMach rec {
pname = "firefox";
- version = "151.0.4";
+ version = "153.0";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
- sha512 = "7df6099411843764321e1480b058530193bf134f590b97aadf053603c356c34599f42d6b83d739c2d6440a78cd81dd0b19fd2ddc2a59746d6bbe7e39f00b7e04";
+ sha512 = "a1af5866e1c9a732818123f2f041bfd5993d093e96dd743b583312fb11d2b39d429df750f9ec22ded64b58a209bb1ecabc7aaf73057d7a64c7349e4da043d66d";
};
meta = {
diff --git a/pkgs/applications/networking/browsers/firefox/wrapper.nix b/pkgs/applications/networking/browsers/firefox/wrapper.nix
index 149a3f13e54d..d945a0a3d063 100644
--- a/pkgs/applications/networking/browsers/firefox/wrapper.nix
+++ b/pkgs/applications/networking/browsers/firefox/wrapper.nix
@@ -215,6 +215,7 @@ let
in
stdenv.mkDerivation (finalAttrs: {
__structuredAttrs = true;
+ strictDeps = true;
inherit pname version;
desktopItem = makeDesktopItem (
@@ -434,7 +435,7 @@ let
;;
*)
# Copy if the symlink resolves to a Mach-O dylib
- otool -l "$file" 2>/dev/null | grep -q 'LC_ID_DYLIB' || continue
+ otool -l "$file" 2>/dev/null | grep -F 'LC_ID_DYLIB' >/dev/null || continue
;;
esac
diff --git a/pkgs/applications/networking/cluster/calico/default.nix b/pkgs/applications/networking/cluster/calico/default.nix
index 63a9d7107b47..c498b380b616 100644
--- a/pkgs/applications/networking/cluster/calico/default.nix
+++ b/pkgs/applications/networking/cluster/calico/default.nix
@@ -14,16 +14,16 @@ builtins.mapAttrs
}:
buildGoModule rec {
inherit pname;
- version = "3.31.5";
+ version = "3.31.6";
src = fetchFromGitHub {
owner = "projectcalico";
repo = "calico";
rev = "v${version}";
- hash = "sha256-HdTnERSuqJ2ORijvI8AbzLGTwXaRl349p9onKgH4HE8=";
+ hash = "sha256-lME1x04iFaNg+dilS66dGuFmw3IEJQmyPcnDvGTzk/8=";
};
- vendorHash = "sha256-LwOEshx4VU+a0oBlq/881RC/ViQVDnZZlZs/U3BMJ7M=";
+ vendorHash = "sha256-8CvnDaoEkb/yMMgGBG03RFrdHdc5Anbv9t1TnOYHA9A=";
inherit doCheck subPackages;
diff --git a/pkgs/applications/networking/cluster/cni/plugins.nix b/pkgs/applications/networking/cluster/cni/plugins.nix
index 5803d84dc9d8..f57bbe3679a2 100644
--- a/pkgs/applications/networking/cluster/cni/plugins.nix
+++ b/pkgs/applications/networking/cluster/cni/plugins.nix
@@ -7,13 +7,13 @@
buildGoModule rec {
pname = "cni-plugins";
- version = "1.9.0";
+ version = "1.9.1";
src = fetchFromGitHub {
owner = "containernetworking";
repo = "plugins";
rev = "v${version}";
- hash = "sha256-0ZonR8pV20bBbC2AkNCJhoseDVxNwwMa7coD/ON6clA=";
+ hash = "sha256-3OhUvIJPU5Ayc4/po9Rj4Tfa5536aN8bj+51M6Xg5os=";
};
vendorHash = null;
diff --git a/pkgs/applications/networking/cluster/docker-machine/hyperkit.nix b/pkgs/applications/networking/cluster/docker-machine/hyperkit.nix
deleted file mode 100644
index 2e430baa0706..000000000000
--- a/pkgs/applications/networking/cluster/docker-machine/hyperkit.nix
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- lib,
- buildGoModule,
- minikube,
-}:
-
-buildGoModule rec {
- inherit (minikube)
- version
- src
- nativeBuildInputs
- buildInputs
- vendorHash
- doCheck
- postPatch
- ;
-
- pname = "docker-machine-hyperkit";
-
- buildPhase = ''
- make docker-machine-driver-hyperkit COMMIT=${src.rev}
- '';
-
- installPhase = ''
- install out/docker-machine-driver-hyperkit -Dt $out/bin
- '';
-
- meta = {
- homepage = "https://minikube.sigs.k8s.io/docs/drivers/hyperkit";
- description = "HyperKit driver for docker-machine";
- license = lib.licenses.asl20;
- maintainers = with lib.maintainers; [ atkinschang ];
- platforms = [ "x86_64-darwin" ];
- };
-}
diff --git a/pkgs/applications/networking/cluster/hadoop/default.nix b/pkgs/applications/networking/cluster/hadoop/default.nix
index e592740d8129..11e899ebe285 100644
--- a/pkgs/applications/networking/cluster/hadoop/default.nix
+++ b/pkgs/applications/networking/cluster/hadoop/default.nix
@@ -26,7 +26,6 @@
assert lib.elem stdenv.system [
"x86_64-linux"
- "x86_64-darwin"
"aarch64-linux"
"aarch64-darwin"
];
@@ -178,7 +177,6 @@ in
srcHash = "sha256-AkZjpHk57S3pYiZambxgRHR7PD51HSI4H1HHW9ICah4=";
variant = "lean";
};
- x86_64-darwin = x86_64-linux;
aarch64-linux = {
version = "3.4.0";
hash = "sha256-QWxzKtNyw/AzcHMv0v7kj91pw1HO7VAN9MHO84caFk8=";
@@ -199,7 +197,6 @@ in
hash = "sha256-9RlQWcDUECrap//xf3sqhd+Qa8tuGZSHFjGfmXhkGgQ=";
srcHash = "sha256-4OEsVhBNV9CJ+PN4FgCduUCVA9/el5yezSCZ6ko3+bU=";
};
- x86_64-darwin = x86_64-linux;
aarch64-linux = x86_64-linux // {
hash = "sha256-5Lv2uA72BJEva5v2yncyPe5gKNCNOPNsoHffVt6KXQ0=";
};
diff --git a/pkgs/applications/networking/cluster/helm/default.nix b/pkgs/applications/networking/cluster/helm/default.nix
index 0981a3ce5bc8..be3010316f0f 100644
--- a/pkgs/applications/networking/cluster/helm/default.nix
+++ b/pkgs/applications/networking/cluster/helm/default.nix
@@ -10,16 +10,16 @@
buildGoModule (finalAttrs: {
pname = "kubernetes-helm";
- version = "4.2.0";
+ version = "4.2.3";
src = fetchFromGitHub {
owner = "helm";
repo = "helm";
rev = "v${finalAttrs.version}";
- hash = "sha256-Wyihzf7KpnVuIdp5lmjhB7uLAGgtmI0TXYl29uaVC5Y=";
+ hash = "sha256-t7cdJjazG38T49y+x2B1akBNvZNXhN2ig3eNnHirV2g=";
};
- vendorHash = "sha256-QTDC0v0BPE3FoK9AAq1n2jWxOE9gB9OsoY2wnpcCDUQ=";
+ vendorHash = "sha256-6TJWtGTdTtzOpPvWsk4rtJwxZxkIxIA6QSAemOnHcJ4=";
subPackages = [ "cmd/helm" ];
ldflags = [
diff --git a/pkgs/applications/networking/cluster/helm/plugins/helm-diff.nix b/pkgs/applications/networking/cluster/helm/plugins/helm-diff.nix
index b12a71003953..7000d9505809 100644
--- a/pkgs/applications/networking/cluster/helm/plugins/helm-diff.nix
+++ b/pkgs/applications/networking/cluster/helm/plugins/helm-diff.nix
@@ -6,16 +6,16 @@
buildGoModule rec {
pname = "helm-diff";
- version = "3.15.8";
+ version = "3.15.10";
src = fetchFromGitHub {
owner = "databus23";
repo = "helm-diff";
rev = "v${version}";
- hash = "sha256-rH5EgSrL6yBmLd8m5QhEe3VTv8NVmyO5AC++7QQw/wI=";
+ hash = "sha256-c0sbFd19cDGm7VJbbfT+FKzUbeyAO1kCgh1eYV11C3I=";
};
- vendorHash = "sha256-wBGHhjVNqA7SAueg9xowqxcCda8HzggepmOprsKPnjo=";
+ vendorHash = "sha256-GanQBm/g+PcMHaXA5gAaqacpOuv6kES6ng/CmH8/0j4=";
ldflags = [
"-s"
diff --git a/pkgs/applications/networking/cluster/helm/plugins/helm-dt.nix b/pkgs/applications/networking/cluster/helm/plugins/helm-dt.nix
index 85a9ba1dc7cc..20968d05f475 100644
--- a/pkgs/applications/networking/cluster/helm/plugins/helm-dt.nix
+++ b/pkgs/applications/networking/cluster/helm/plugins/helm-dt.nix
@@ -5,13 +5,13 @@
}:
buildGoModule rec {
pname = "helm-dt";
- version = "0.8.0";
+ version = "0.9.0";
src = fetchFromGitHub {
owner = "vmware-labs";
repo = "distribution-tooling-for-helm";
tag = "v${version}";
- hash = "sha256-KjIlmioDyj79jCnEi+Iimdg0eZruHdeD9JorkJbifJg=";
+ hash = "sha256-ytbwUfjPpvKxX6d24ifCyeD1WtFpzA52QniMImTun+c=";
};
vendorHash = "sha256-dkE3eYZnaS+kC0kDVxaFW/Ev15TY2MY3m5xgPof7Y18=";
diff --git a/pkgs/applications/networking/cluster/helm/plugins/helm-mapkubeapis.nix b/pkgs/applications/networking/cluster/helm/plugins/helm-mapkubeapis.nix
index 7a57f58bef6c..8ba869bfb2ec 100644
--- a/pkgs/applications/networking/cluster/helm/plugins/helm-mapkubeapis.nix
+++ b/pkgs/applications/networking/cluster/helm/plugins/helm-mapkubeapis.nix
@@ -32,7 +32,7 @@ buildGoModule rec {
meta = {
description = "Helm plugin which maps deprecated or removed Kubernetes APIs in a release to supported APIs";
homepage = "https://github.com/helm/helm-mapkubeapis";
- license = with lib.licenses; [ asl20 ];
+ license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ aos ];
};
}
diff --git a/pkgs/applications/networking/cluster/helm/plugins/helm-secrets.nix b/pkgs/applications/networking/cluster/helm/plugins/helm-secrets.nix
index 6395244fe708..7b23822646e0 100644
--- a/pkgs/applications/networking/cluster/helm/plugins/helm-secrets.nix
+++ b/pkgs/applications/networking/cluster/helm/plugins/helm-secrets.nix
@@ -40,8 +40,8 @@ stdenv.mkDerivation rec {
runHook preInstall
install -dm755 $out/helm-secrets $out/helm-secrets/scripts
- install -m644 -Dt $out/helm-secrets plugin.yaml
- cp -r scripts/* $out/helm-secrets/scripts
+ install -m644 -Dt $out/helm-secrets plugins/helm-secrets-cli/plugin.yaml
+ cp -r plugins/helm-secrets-cli/scripts/* $out/helm-secrets/scripts
wrapProgram $out/helm-secrets/scripts/run.sh \
--prefix PATH : ${
lib.makeBinPath [
diff --git a/pkgs/applications/networking/cluster/helm/plugins/helm-unittest.nix b/pkgs/applications/networking/cluster/helm/plugins/helm-unittest.nix
index 48f7914cd0d5..08d653227f02 100644
--- a/pkgs/applications/networking/cluster/helm/plugins/helm-unittest.nix
+++ b/pkgs/applications/networking/cluster/helm/plugins/helm-unittest.nix
@@ -1,15 +1,18 @@
{
buildGoModule,
fetchFromGitHub,
+ kubernetes-helm,
lib,
- yq-go,
nix-update-script,
+ runCommand,
+ wrapHelm,
+ writableTmpDirAsHomeHook,
}:
let
- version = "1.1.0";
+ version = "1.1.1";
in
-buildGoModule {
+buildGoModule (finalAttrs: {
pname = "helm-unittest";
inherit version;
@@ -17,28 +20,56 @@ buildGoModule {
owner = "helm-unittest";
repo = "helm-unittest";
tag = "v${version}";
- hash = "sha256-tSagZzAEaJRNZwflrqoyuIMWmt3oCsyHPHwctNTrtVM=";
+ hash = "sha256-oiTW8F0yo+kN943MI2mR5uEEYbMVxJx4RdEislJ3XSo=";
};
- vendorHash = "sha256-LZOvss6wiZZi5USuXfivqtt69dTKzEmm7lM2LUDACfY=";
+ vendorHash = "sha256-4ckjM520MGYb64LbjYURe7AIScm4aGbj81rGKSSYaAo=";
- # NOTE: Remove the install and upgrade hooks.
postPatch = ''
- sed -i '/^hooks:/,+2 d' plugin.yaml
+ # Remove the install and upgrade hooks.
+ sed -i '/^platformHooks:[[:space:]]*$/,/^[^[:space:]]/d' plugin.yaml
+ # Remove the per-platform commands
+ sed -i '/^platformCommand:[[:space:]]*$/,/^[^[:space:]]/d' plugin.yaml
+ # Add a simple runtime config
+ cat <<'EOF' >> ./plugin.yaml
+ platformCommand:
+ - command: "''$HELM_PLUGIN_DIR/helm-unittest"
+ EOF
'';
- postInstall = ''
- install -dm755 $out/helm-unittest
- mv $out/bin/helm-unittest $out/helm-unittest/untt
- rmdir $out/bin
- install -m644 -Dt $out/helm-unittest plugin.yaml
- '';
+ subPackages = [ "cmd/helm-unittest" ];
- nativeCheckInputs = [
- yq-go
- ];
+ installPhase = ''
+ runHook preInstall
+
+ install -dm755 "$out/helm-unittest"
+ install -m755 -Dt "$out/helm-unittest" "$GOPATH/bin/helm-unittest"
+ install -m644 -Dt "$out/helm-unittest" ./plugin.yaml
+
+ runHook postInstall
+ '';
passthru = {
+ tests.smoke =
+ let
+ helm = wrapHelm kubernetes-helm {
+ plugins = [ finalAttrs.finalPackage ];
+ };
+ in
+ runCommand "helm-unittest-plugin-smoke"
+ {
+ nativeBuildInputs = [
+ helm
+ writableTmpDirAsHomeHook
+ ];
+ }
+ ''
+ cp -r ${./tests/helm-unittest/smoke} chart
+ chmod -R u+w chart
+ helm unittest chart
+ touch $out
+ '';
+
updateScript = nix-update-script { };
};
@@ -51,4 +82,4 @@ buildGoModule {
yurrriq
];
};
-}
+})
diff --git a/pkgs/applications/networking/cluster/helm/plugins/tests/helm-unittest/smoke/Chart.yaml b/pkgs/applications/networking/cluster/helm/plugins/tests/helm-unittest/smoke/Chart.yaml
new file mode 100644
index 000000000000..fe0d4f805044
--- /dev/null
+++ b/pkgs/applications/networking/cluster/helm/plugins/tests/helm-unittest/smoke/Chart.yaml
@@ -0,0 +1,3 @@
+apiVersion: v2
+name: smoke
+version: 0.1.0
diff --git a/pkgs/applications/networking/cluster/helm/plugins/tests/helm-unittest/smoke/templates/configmap.yaml b/pkgs/applications/networking/cluster/helm/plugins/tests/helm-unittest/smoke/templates/configmap.yaml
new file mode 100644
index 000000000000..25dff3db6797
--- /dev/null
+++ b/pkgs/applications/networking/cluster/helm/plugins/tests/helm-unittest/smoke/templates/configmap.yaml
@@ -0,0 +1,6 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: "{{ .Release.Name }}-smoke"
+data:
+ value: "{{ .Values.value }}"
diff --git a/pkgs/applications/networking/cluster/helm/plugins/tests/helm-unittest/smoke/tests/configmap_test.yaml b/pkgs/applications/networking/cluster/helm/plugins/tests/helm-unittest/smoke/tests/configmap_test.yaml
new file mode 100644
index 000000000000..ce6b1ac74dec
--- /dev/null
+++ b/pkgs/applications/networking/cluster/helm/plugins/tests/helm-unittest/smoke/tests/configmap_test.yaml
@@ -0,0 +1,11 @@
+suite: configmap
+templates:
+ - templates/configmap.yaml
+tests:
+ - it: renders the configured value
+ set:
+ value: ok
+ asserts:
+ - equal:
+ path: data.value
+ value: ok
diff --git a/pkgs/applications/networking/cluster/k3s/1_33/chart-versions.nix b/pkgs/applications/networking/cluster/k3s/1_33/chart-versions.nix
index 5ce71b5a5bb6..df7d8abdceac 100644
--- a/pkgs/applications/networking/cluster/k3s/1_33/chart-versions.nix
+++ b/pkgs/applications/networking/cluster/k3s/1_33/chart-versions.nix
@@ -1,10 +1,10 @@
{
traefik-crd = {
- url = "https://k3s.io/k3s-charts/assets/traefik-crd/traefik-crd-39.0.701+up39.0.7.tgz";
- sha256 = "1ii00d4r0lmzwi8n16m2fgi50j0s5cj1bm0jlsi3dbdbpq0savi3";
+ url = "https://k3s.io/k3s-charts/assets/traefik-crd/traefik-crd-40.1.3+up40.1.0.tgz";
+ sha256 = "0wrjc73w4h7bshm5lg6hb71h6s49wmxkmplrf6601zq400yr0m2y";
};
traefik = {
- url = "https://k3s.io/k3s-charts/assets/traefik/traefik-39.0.701+up39.0.7.tgz";
- sha256 = "1ijrh3wr4k6ydcv0ylvy4i3swbj5byam0lkk51khfl9mmz4z8y0r";
+ url = "https://k3s.io/k3s-charts/assets/traefik/traefik-40.1.3+up40.1.0.tgz";
+ sha256 = "1sgc46xpc2vg5s5vbs7jk2y2bzylf34qcamx681jq0gfjaxs0cdz";
};
}
diff --git a/pkgs/applications/networking/cluster/k3s/1_33/images-versions.json b/pkgs/applications/networking/cluster/k3s/1_33/images-versions.json
index 8ba5e8386b80..5ac3317d21de 100644
--- a/pkgs/applications/networking/cluster/k3s/1_33/images-versions.json
+++ b/pkgs/applications/networking/cluster/k3s/1_33/images-versions.json
@@ -1,26 +1,26 @@
{
"airgap-images-amd64-tar-gz": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.12%2Bk3s1/k3s-airgap-images-amd64.tar.gz",
- "sha256": "6a29f795a718e0b7a11b81b4f8a342764a90b78a83a57ad6e1b90d81c3718290"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.13%2Bk3s1/k3s-airgap-images-amd64.tar.gz",
+ "sha256": "2e96b421314df12b5a4b2168ae0a8f097a63b9826bf93fbb86f7b69a48551cd7"
},
"airgap-images-amd64-tar-zst": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.12%2Bk3s1/k3s-airgap-images-amd64.tar.zst",
- "sha256": "1ec9755fbe791b710b176c12f66160e19b31605345c92f3b5916176976f813a8"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.13%2Bk3s1/k3s-airgap-images-amd64.tar.zst",
+ "sha256": "b01d1c0b5eeff414a405a423851e13575317831eec3f87f22d6a7038f9a1fdb7"
},
"airgap-images-arm-tar-gz": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.12%2Bk3s1/k3s-airgap-images-arm.tar.gz",
- "sha256": "893e395bbee35745e32aaa4e421aaf0c88e685739edc5658f9bf573a95a86782"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.13%2Bk3s1/k3s-airgap-images-arm.tar.gz",
+ "sha256": "b0d3bbbb034fcb920124562ef115ede32c2269fa8f5c35342a7c801c1e3d8068"
},
"airgap-images-arm-tar-zst": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.12%2Bk3s1/k3s-airgap-images-arm.tar.zst",
- "sha256": "1613727aaa8ae55a1a597a2914faf9ab909a710e175a26b4652754b25ab01337"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.13%2Bk3s1/k3s-airgap-images-arm.tar.zst",
+ "sha256": "ce3ac7a19d4753d543063e8bc70425b289a4b0c5c1a9e5e23555f2c70c3053f8"
},
"airgap-images-arm64-tar-gz": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.12%2Bk3s1/k3s-airgap-images-arm64.tar.gz",
- "sha256": "5fa48235a216c9dfcaefcd344597d221adf16aa583a0ca9d9b4094e4c9c1ef5f"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.13%2Bk3s1/k3s-airgap-images-arm64.tar.gz",
+ "sha256": "e483093a7cfa530445405faa7496ac6dedd7cb51312afc5e0cd8455923bd661e"
},
"airgap-images-arm64-tar-zst": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.12%2Bk3s1/k3s-airgap-images-arm64.tar.zst",
- "sha256": "ec56b324e405a3990b9ee16b5aa39bfb636ce88a127869685c042944caf38835"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.33.13%2Bk3s1/k3s-airgap-images-arm64.tar.zst",
+ "sha256": "76103ee88986c05f858d3f0f92c5e42f6410e33a94b5ee528897c7d45e1bef74"
}
}
diff --git a/pkgs/applications/networking/cluster/k3s/1_33/versions.nix b/pkgs/applications/networking/cluster/k3s/1_33/versions.nix
index 57f04c1c12c8..373d2b37a938 100644
--- a/pkgs/applications/networking/cluster/k3s/1_33/versions.nix
+++ b/pkgs/applications/networking/cluster/k3s/1_33/versions.nix
@@ -1,21 +1,21 @@
{
- k3sVersion = "1.33.12+k3s1";
- k3sCommit = "35e4874312bcfd643320c7f7cb225f7063cb9e4e";
- k3sRepoSha256 = "1md7w6n9iz3nk63rnf4ahs66d2vg3gfc5frksar2iw3kcv99bhmc";
- k3sVendorHash = "sha256-O0HIcCzrKGR8NkMoDfaD1wPbAttHt0kEpVjr/kOLMu8=";
+ k3sVersion = "1.33.13+k3s1";
+ k3sCommit = "86c2c10c51e4340bb8252fff312d74dcafaf39d5";
+ k3sRepoSha256 = "06m8rqarxii7ip4pjwyr25mskgnr00lp3xypr8ywq01akns8y2bg";
+ k3sVendorHash = "sha256-oshDuY+I4sdXvjxyrp7meI9XzXo9DUr9wdD6pvUT3fg=";
chartVersions = import ./chart-versions.nix;
imagesVersions = builtins.fromJSON (builtins.readFile ./images-versions.json);
- k3sRootVersion = "0.15.0";
- k3sRootSha256 = "008n8xx7x36y9y4r24hx39xagf1dxbp3pqq2j53s9zkaiqc62hd0";
+ k3sRootVersion = "0.15.2";
+ k3sRootSha256 = "0yxq2jqqb7flm4rs9dl7fqxba3mmwkmjbc8rx7pgai4qa1lzyigy";
k3sCNIVersion = "1.9.1-k3s1";
k3sCNISha256 = "1ggaz0p1c2k94car9d89a05smz3zx32sxn197b1l5kmjcnzdwadh";
- containerdVersion = "2.2.3-k3s1.33";
- containerdSha256 = "1zkbjwnhxxkc9lqk2i9wfi10ywd4rsky3sjs2dzlid91l6xgrwhv";
+ containerdVersion = "2.2.5-k3s1.33";
+ containerdSha256 = "1al4zsyh3pz379ia0awhrlz7nyl2abyy0ayw0gl4gr6xjp7jsp1s";
containerdPackage = "github.com/k3s-io/containerd/v2";
criCtlVersion = "1.33.0-k3s2";
flannelVersion = "v0.28.4";
flannelPluginVersion = "v1.9.0-flannel1";
kubeRouterVersion = "v2.6.3-k3s1";
criDockerdVersion = "v0.3.19-k3s2";
- helmJobVersion = "v0.10.0-build20260513";
+ helmJobVersion = "v0.11.1-build20260615";
}
diff --git a/pkgs/applications/networking/cluster/k3s/1_34/chart-versions.nix b/pkgs/applications/networking/cluster/k3s/1_34/chart-versions.nix
index 5ce71b5a5bb6..df7d8abdceac 100644
--- a/pkgs/applications/networking/cluster/k3s/1_34/chart-versions.nix
+++ b/pkgs/applications/networking/cluster/k3s/1_34/chart-versions.nix
@@ -1,10 +1,10 @@
{
traefik-crd = {
- url = "https://k3s.io/k3s-charts/assets/traefik-crd/traefik-crd-39.0.701+up39.0.7.tgz";
- sha256 = "1ii00d4r0lmzwi8n16m2fgi50j0s5cj1bm0jlsi3dbdbpq0savi3";
+ url = "https://k3s.io/k3s-charts/assets/traefik-crd/traefik-crd-40.1.3+up40.1.0.tgz";
+ sha256 = "0wrjc73w4h7bshm5lg6hb71h6s49wmxkmplrf6601zq400yr0m2y";
};
traefik = {
- url = "https://k3s.io/k3s-charts/assets/traefik/traefik-39.0.701+up39.0.7.tgz";
- sha256 = "1ijrh3wr4k6ydcv0ylvy4i3swbj5byam0lkk51khfl9mmz4z8y0r";
+ url = "https://k3s.io/k3s-charts/assets/traefik/traefik-40.1.3+up40.1.0.tgz";
+ sha256 = "1sgc46xpc2vg5s5vbs7jk2y2bzylf34qcamx681jq0gfjaxs0cdz";
};
}
diff --git a/pkgs/applications/networking/cluster/k3s/1_34/images-versions.json b/pkgs/applications/networking/cluster/k3s/1_34/images-versions.json
index 08b82fbac7a7..3c9c172d8786 100644
--- a/pkgs/applications/networking/cluster/k3s/1_34/images-versions.json
+++ b/pkgs/applications/networking/cluster/k3s/1_34/images-versions.json
@@ -1,26 +1,26 @@
{
"airgap-images-amd64-tar-gz": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.34.8%2Bk3s1/k3s-airgap-images-amd64.tar.gz",
- "sha256": "2a5f910bb31b8674dff61f55a242b8dacb553894a50d66ea3c2dbf4ec8931345"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.34.9%2Bk3s1/k3s-airgap-images-amd64.tar.gz",
+ "sha256": "87a83fb2db2883e427e3c2351c2d3bff7bd6d3ad2ab703aec22e81e326bd63cf"
},
"airgap-images-amd64-tar-zst": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.34.8%2Bk3s1/k3s-airgap-images-amd64.tar.zst",
- "sha256": "c1a261f664a58664aab975ba5c861d872c825d4f8ccc391c649283bf2c1663cf"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.34.9%2Bk3s1/k3s-airgap-images-amd64.tar.zst",
+ "sha256": "b01d1c0b5eeff414a405a423851e13575317831eec3f87f22d6a7038f9a1fdb7"
},
"airgap-images-arm-tar-gz": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.34.8%2Bk3s1/k3s-airgap-images-arm.tar.gz",
- "sha256": "a14b0421af4e4afe70010886cf66eb99b2cb48e1f810269bae47dad5c8bbc2c7"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.34.9%2Bk3s1/k3s-airgap-images-arm.tar.gz",
+ "sha256": "6063398406fca10cafb109a04967c42dfcfee7216e6c6ec49a2f8c3a3b51d80a"
},
"airgap-images-arm-tar-zst": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.34.8%2Bk3s1/k3s-airgap-images-arm.tar.zst",
- "sha256": "b6dba85a8470f95ab2a57658bb5ac2adfcf3e3c0634501e7b87d6904f32308d6"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.34.9%2Bk3s1/k3s-airgap-images-arm.tar.zst",
+ "sha256": "db42a4016d8ff1f98520613fd0f569723c7553063d1a3f9aa12f25bc68b19b2a"
},
"airgap-images-arm64-tar-gz": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.34.8%2Bk3s1/k3s-airgap-images-arm64.tar.gz",
- "sha256": "dbb6f771024fbf07a85d57fb77d43a59a4cd712684e819dd31f9633088c3f99e"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.34.9%2Bk3s1/k3s-airgap-images-arm64.tar.gz",
+ "sha256": "eedeab95e4e1f7f11bdd08b45555c591d6b35a59be9f476b9ac95d9940ab720d"
},
"airgap-images-arm64-tar-zst": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.34.8%2Bk3s1/k3s-airgap-images-arm64.tar.zst",
- "sha256": "984dc4a2050e1bde1b57ac8a07ce6639a56151a3b57cee0616220bc680c65041"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.34.9%2Bk3s1/k3s-airgap-images-arm64.tar.zst",
+ "sha256": "26a5528bb00c7beac8c88399af77c71123e74fedbba5b03c1c5ae003c838880f"
}
}
diff --git a/pkgs/applications/networking/cluster/k3s/1_34/versions.nix b/pkgs/applications/networking/cluster/k3s/1_34/versions.nix
index 1d2e8503b87a..53e795b1bf52 100644
--- a/pkgs/applications/networking/cluster/k3s/1_34/versions.nix
+++ b/pkgs/applications/networking/cluster/k3s/1_34/versions.nix
@@ -1,21 +1,21 @@
{
- k3sVersion = "1.34.8+k3s1";
- k3sCommit = "fb21251ee14ffbec9a2ba5d8ff25a7aa1221fbe3";
- k3sRepoSha256 = "18f2mhhn7nz8lri1qbjja5nfjncsadra9wrqxxgprfg5lx7fi3a2";
- k3sVendorHash = "sha256-jikPQgyQ4ApWPF+iHYjL7H6ccWcC1x/JEABluJyzmfs=";
+ k3sVersion = "1.34.9+k3s1";
+ k3sCommit = "5f72184f2d188f75171bbd21953b1c16268e425f";
+ k3sRepoSha256 = "0z9c98f02ixvfjlm6yj3i93pvplnfc52l54lyfrb40d1b9wgrsdw";
+ k3sVendorHash = "sha256-JAOi23vFIYoTxB7g5Fyr+91dEX0lqChJMHCNW3q8O/g=";
chartVersions = import ./chart-versions.nix;
imagesVersions = builtins.fromJSON (builtins.readFile ./images-versions.json);
- k3sRootVersion = "0.15.0";
- k3sRootSha256 = "008n8xx7x36y9y4r24hx39xagf1dxbp3pqq2j53s9zkaiqc62hd0";
+ k3sRootVersion = "0.15.2";
+ k3sRootSha256 = "0yxq2jqqb7flm4rs9dl7fqxba3mmwkmjbc8rx7pgai4qa1lzyigy";
k3sCNIVersion = "1.9.1-k3s1";
k3sCNISha256 = "1ggaz0p1c2k94car9d89a05smz3zx32sxn197b1l5kmjcnzdwadh";
- containerdVersion = "2.2.3-k3s1";
- containerdSha256 = "0fn252icn082822r754i2bqd8rivhvjwkfk031a8g0vvw8rz46vj";
+ containerdVersion = "2.2.5-k3s2";
+ containerdSha256 = "1i9vkmf3gg34d9hjq15c00frhqxs9cba03zwg7qqq34gkb4qhjch";
containerdPackage = "github.com/k3s-io/containerd/v2";
criCtlVersion = "1.34.0-k3s2";
flannelVersion = "v0.28.4";
flannelPluginVersion = "v1.9.0-flannel1";
kubeRouterVersion = "v2.6.3-k3s1";
criDockerdVersion = "v0.3.19-k3s3";
- helmJobVersion = "v0.10.0-build20260513";
+ helmJobVersion = "v0.11.1-build20260615";
}
diff --git a/pkgs/applications/networking/cluster/k3s/1_35/chart-versions.nix b/pkgs/applications/networking/cluster/k3s/1_35/chart-versions.nix
index 5ce71b5a5bb6..df7d8abdceac 100644
--- a/pkgs/applications/networking/cluster/k3s/1_35/chart-versions.nix
+++ b/pkgs/applications/networking/cluster/k3s/1_35/chart-versions.nix
@@ -1,10 +1,10 @@
{
traefik-crd = {
- url = "https://k3s.io/k3s-charts/assets/traefik-crd/traefik-crd-39.0.701+up39.0.7.tgz";
- sha256 = "1ii00d4r0lmzwi8n16m2fgi50j0s5cj1bm0jlsi3dbdbpq0savi3";
+ url = "https://k3s.io/k3s-charts/assets/traefik-crd/traefik-crd-40.1.3+up40.1.0.tgz";
+ sha256 = "0wrjc73w4h7bshm5lg6hb71h6s49wmxkmplrf6601zq400yr0m2y";
};
traefik = {
- url = "https://k3s.io/k3s-charts/assets/traefik/traefik-39.0.701+up39.0.7.tgz";
- sha256 = "1ijrh3wr4k6ydcv0ylvy4i3swbj5byam0lkk51khfl9mmz4z8y0r";
+ url = "https://k3s.io/k3s-charts/assets/traefik/traefik-40.1.3+up40.1.0.tgz";
+ sha256 = "1sgc46xpc2vg5s5vbs7jk2y2bzylf34qcamx681jq0gfjaxs0cdz";
};
}
diff --git a/pkgs/applications/networking/cluster/k3s/1_35/images-versions.json b/pkgs/applications/networking/cluster/k3s/1_35/images-versions.json
index d2675277bd54..bc929fe914c9 100644
--- a/pkgs/applications/networking/cluster/k3s/1_35/images-versions.json
+++ b/pkgs/applications/networking/cluster/k3s/1_35/images-versions.json
@@ -1,26 +1,26 @@
{
"airgap-images-amd64-tar-gz": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.35.5%2Bk3s1/k3s-airgap-images-amd64.tar.gz",
- "sha256": "b25863ba596e81ee773b462edc1b7ee26e80ff8e675c983115464372713237ac"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.35.6%2Bk3s1/k3s-airgap-images-amd64.tar.gz",
+ "sha256": "0ffcf255abd68eb4a321c9b13e1b596c1d32a59c5b9bbcaa4d415f213ba34cf1"
},
"airgap-images-amd64-tar-zst": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.35.5%2Bk3s1/k3s-airgap-images-amd64.tar.zst",
- "sha256": "c1a261f664a58664aab975ba5c861d872c825d4f8ccc391c649283bf2c1663cf"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.35.6%2Bk3s1/k3s-airgap-images-amd64.tar.zst",
+ "sha256": "b3af3ad5f8faaaf5deb3e875815f0805f2abd31f8c2f4d566cc2d9e6bb7e688a"
},
"airgap-images-arm-tar-gz": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.35.5%2Bk3s1/k3s-airgap-images-arm.tar.gz",
- "sha256": "5b9fc436d67f0ca941084c512715f2ea21e6c66732144145788f1403ffd6c082"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.35.6%2Bk3s1/k3s-airgap-images-arm.tar.gz",
+ "sha256": "1e5747971cc382ef44b3f0b0aa640da45642c2bec330fd6daae28d61c90f0eca"
},
"airgap-images-arm-tar-zst": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.35.5%2Bk3s1/k3s-airgap-images-arm.tar.zst",
- "sha256": "1613727aaa8ae55a1a597a2914faf9ab909a710e175a26b4652754b25ab01337"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.35.6%2Bk3s1/k3s-airgap-images-arm.tar.zst",
+ "sha256": "29eae298befd23f13426443ccc049921874dd4e4987c4e5e15a1e63b816177fd"
},
"airgap-images-arm64-tar-gz": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.35.5%2Bk3s1/k3s-airgap-images-arm64.tar.gz",
- "sha256": "bc085e02004382b15413e98457079e2a0a3d8f18b3c9a4a58917f1bc6064ea29"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.35.6%2Bk3s1/k3s-airgap-images-arm64.tar.gz",
+ "sha256": "14d4b33fd5dbc60c47d2c025b9a0cb1fa617e3ff351cc9c284ad9da3caf0263b"
},
"airgap-images-arm64-tar-zst": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.35.5%2Bk3s1/k3s-airgap-images-arm64.tar.zst",
- "sha256": "0bf33db3b0595166f1c36a6780ebd789343f50f23a4d61157519ada4d002919d"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.35.6%2Bk3s1/k3s-airgap-images-arm64.tar.zst",
+ "sha256": "850056a90a804ae95977bed34bcaf7d0cbc9fcb794700a25f34454c2b2fd6b50"
}
}
diff --git a/pkgs/applications/networking/cluster/k3s/1_35/versions.nix b/pkgs/applications/networking/cluster/k3s/1_35/versions.nix
index b9f0c59bf1ad..9e3e82739c1b 100644
--- a/pkgs/applications/networking/cluster/k3s/1_35/versions.nix
+++ b/pkgs/applications/networking/cluster/k3s/1_35/versions.nix
@@ -1,21 +1,21 @@
{
- k3sVersion = "1.35.5+k3s1";
- k3sCommit = "6a4781ad53ee5cad273bedcd9462ae36ac97d798";
- k3sRepoSha256 = "1m6sy7p5v3kkg66mzsna9c4d1f7ly843ii42zmb2a26vxa0dicx3";
- k3sVendorHash = "sha256-czE0ZJ9yWc3VSuPqjy4V+ViBGPriluMPmUK5aTk4DmY=";
+ k3sVersion = "1.35.6+k3s1";
+ k3sCommit = "87243446a2c2fe958c31ad552fe38ebf96757b06";
+ k3sRepoSha256 = "0hcd2pyd66isnii7x6nbw420n0sc7rwrbws4aayakas1xi0yrkzq";
+ k3sVendorHash = "sha256-U8JM3CKLGUMWLntMyczrHCW+WMAeiDy2xwzR39InvCM=";
chartVersions = import ./chart-versions.nix;
imagesVersions = builtins.fromJSON (builtins.readFile ./images-versions.json);
- k3sRootVersion = "0.15.0";
- k3sRootSha256 = "008n8xx7x36y9y4r24hx39xagf1dxbp3pqq2j53s9zkaiqc62hd0";
+ k3sRootVersion = "0.15.2";
+ k3sRootSha256 = "0yxq2jqqb7flm4rs9dl7fqxba3mmwkmjbc8rx7pgai4qa1lzyigy";
k3sCNIVersion = "1.9.1-k3s1";
k3sCNISha256 = "1ggaz0p1c2k94car9d89a05smz3zx32sxn197b1l5kmjcnzdwadh";
- containerdVersion = "2.2.3-k3s1";
- containerdSha256 = "0fn252icn082822r754i2bqd8rivhvjwkfk031a8g0vvw8rz46vj";
+ containerdVersion = "2.2.5-k3s2";
+ containerdSha256 = "1i9vkmf3gg34d9hjq15c00frhqxs9cba03zwg7qqq34gkb4qhjch";
containerdPackage = "github.com/k3s-io/containerd/v2";
criCtlVersion = "1.35.0-k3s2";
flannelVersion = "v0.28.4";
flannelPluginVersion = "v1.9.0-flannel1";
kubeRouterVersion = "v2.6.3-k3s1";
criDockerdVersion = "v0.3.19-k3s3";
- helmJobVersion = "v0.10.0-build20260513";
+ helmJobVersion = "v0.11.1-build20260615";
}
diff --git a/pkgs/applications/networking/cluster/k3s/1_36/chart-versions.nix b/pkgs/applications/networking/cluster/k3s/1_36/chart-versions.nix
index 5ce71b5a5bb6..df7d8abdceac 100644
--- a/pkgs/applications/networking/cluster/k3s/1_36/chart-versions.nix
+++ b/pkgs/applications/networking/cluster/k3s/1_36/chart-versions.nix
@@ -1,10 +1,10 @@
{
traefik-crd = {
- url = "https://k3s.io/k3s-charts/assets/traefik-crd/traefik-crd-39.0.701+up39.0.7.tgz";
- sha256 = "1ii00d4r0lmzwi8n16m2fgi50j0s5cj1bm0jlsi3dbdbpq0savi3";
+ url = "https://k3s.io/k3s-charts/assets/traefik-crd/traefik-crd-40.1.3+up40.1.0.tgz";
+ sha256 = "0wrjc73w4h7bshm5lg6hb71h6s49wmxkmplrf6601zq400yr0m2y";
};
traefik = {
- url = "https://k3s.io/k3s-charts/assets/traefik/traefik-39.0.701+up39.0.7.tgz";
- sha256 = "1ijrh3wr4k6ydcv0ylvy4i3swbj5byam0lkk51khfl9mmz4z8y0r";
+ url = "https://k3s.io/k3s-charts/assets/traefik/traefik-40.1.3+up40.1.0.tgz";
+ sha256 = "1sgc46xpc2vg5s5vbs7jk2y2bzylf34qcamx681jq0gfjaxs0cdz";
};
}
diff --git a/pkgs/applications/networking/cluster/k3s/1_36/images-versions.json b/pkgs/applications/networking/cluster/k3s/1_36/images-versions.json
index 28aed9e04b27..52d66c3f06bd 100644
--- a/pkgs/applications/networking/cluster/k3s/1_36/images-versions.json
+++ b/pkgs/applications/networking/cluster/k3s/1_36/images-versions.json
@@ -1,26 +1,26 @@
{
"airgap-images-amd64-tar-gz": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.36.1%2Bk3s1/k3s-airgap-images-amd64.tar.gz",
- "sha256": "8aad05e71764f08eae8d4db9e5d42d892dce39c9eb79206514c4ee03f4293db1"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.36.2%2Bk3s1/k3s-airgap-images-amd64.tar.gz",
+ "sha256": "6065608edb70f061570fa15c4cce4eeb31e5218eadbacad65de4a75d1de4dad6"
},
"airgap-images-amd64-tar-zst": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.36.1%2Bk3s1/k3s-airgap-images-amd64.tar.zst",
- "sha256": "72cf836bfcf8f9af2de88102b69129d297b77a60243895a7ac4bc47d77a65079"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.36.2%2Bk3s1/k3s-airgap-images-amd64.tar.zst",
+ "sha256": "da6a3b2dbd55cc368d930078ae8814ed22eb9c92247f7b9b46bf073445ff55b3"
},
"airgap-images-arm-tar-gz": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.36.1%2Bk3s1/k3s-airgap-images-arm.tar.gz",
- "sha256": "639f155016f956764b212a1671a6e090100016505b34d3f45e76513fdd93cb5f"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.36.2%2Bk3s1/k3s-airgap-images-arm.tar.gz",
+ "sha256": "aaa7e592ba0b83e4e70741fc963358b87d57bb20a6daa09ef102db14995285e4"
},
"airgap-images-arm-tar-zst": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.36.1%2Bk3s1/k3s-airgap-images-arm.tar.zst",
- "sha256": "4b16cc7a17bac0957db9df4ad937ce52792a696b0eb60944b52eb65447a0d1fa"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.36.2%2Bk3s1/k3s-airgap-images-arm.tar.zst",
+ "sha256": "9d1440d7fc88720f03b0e57d291e3a727a67a4f2e89bb5c4757d83a390635b2e"
},
"airgap-images-arm64-tar-gz": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.36.1%2Bk3s1/k3s-airgap-images-arm64.tar.gz",
- "sha256": "bc84f7965ef5f3a7e45e9f79f1090ef066fdd9bdb96d476c5d37cb13d0c2935b"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.36.2%2Bk3s1/k3s-airgap-images-arm64.tar.gz",
+ "sha256": "07766de91ed2bfa240e12b1d0b9c3af2257c8296bfa4ce17fba776243a2790fb"
},
"airgap-images-arm64-tar-zst": {
- "url": "https://github.com/k3s-io/k3s/releases/download/v1.36.1%2Bk3s1/k3s-airgap-images-arm64.tar.zst",
- "sha256": "174e1e7cf8493ea8fb2550231de3e93fc2f3cec27f977236fd7ab90a18680eed"
+ "url": "https://github.com/k3s-io/k3s/releases/download/v1.36.2%2Bk3s1/k3s-airgap-images-arm64.tar.zst",
+ "sha256": "26a5528bb00c7beac8c88399af77c71123e74fedbba5b03c1c5ae003c838880f"
}
}
diff --git a/pkgs/applications/networking/cluster/k3s/1_36/versions.nix b/pkgs/applications/networking/cluster/k3s/1_36/versions.nix
index a0c220c4ca8c..3cdb98b851cb 100644
--- a/pkgs/applications/networking/cluster/k3s/1_36/versions.nix
+++ b/pkgs/applications/networking/cluster/k3s/1_36/versions.nix
@@ -1,21 +1,21 @@
{
- k3sVersion = "1.36.1+k3s1";
- k3sCommit = "a9663261a7ff40522542485a6b2f81916b6d72f9";
- k3sRepoSha256 = "0788034bw5pl8ikfb16fvdhl8a3dhhfasrbafir6s9fb8q9h3z4z";
- k3sVendorHash = "sha256-jX/qoRhVLZy/25fdhp5NOiRSGEatV/acBbSpjhutAzU=";
+ k3sVersion = "1.36.2+k3s1";
+ k3sCommit = "01b6f04aaa69e8b09303f0393d4b4f1811da23aa";
+ k3sRepoSha256 = "0iqh1hkqfgm9df3bnwi79zxcdk0a9621q451yibr19j58pb76pxv";
+ k3sVendorHash = "sha256-rwFC0bzUacl5kiQrnpRqqIam+9ADqaPuxLxNBX0wWXY=";
chartVersions = import ./chart-versions.nix;
imagesVersions = builtins.fromJSON (builtins.readFile ./images-versions.json);
- k3sRootVersion = "0.15.0";
- k3sRootSha256 = "008n8xx7x36y9y4r24hx39xagf1dxbp3pqq2j53s9zkaiqc62hd0";
+ k3sRootVersion = "0.15.2";
+ k3sRootSha256 = "0yxq2jqqb7flm4rs9dl7fqxba3mmwkmjbc8rx7pgai4qa1lzyigy";
k3sCNIVersion = "1.9.1-k3s1";
k3sCNISha256 = "1ggaz0p1c2k94car9d89a05smz3zx32sxn197b1l5kmjcnzdwadh";
- containerdVersion = "2.2.3-k3s1";
- containerdSha256 = "0fn252icn082822r754i2bqd8rivhvjwkfk031a8g0vvw8rz46vj";
+ containerdVersion = "2.3.2-k3s2";
+ containerdSha256 = "1jzhkh0zg1s2922fkr4r5v1680apafkjqba8ic6br8nc8bk7j4xq";
containerdPackage = "github.com/k3s-io/containerd/v2";
criCtlVersion = "1.36.0-k3s1";
flannelVersion = "v0.28.4";
flannelPluginVersion = "v1.9.0-flannel1";
kubeRouterVersion = "v2.6.3-k3s1";
criDockerdVersion = "v0.3.19-k3s5";
- helmJobVersion = "v0.10.0-build20260513";
+ helmJobVersion = "v0.11.1-build20260615";
}
diff --git a/pkgs/applications/networking/cluster/nomad/default.nix b/pkgs/applications/networking/cluster/nomad/default.nix
index 2e9ff9ae31d9..f95a2ec08764 100644
--- a/pkgs/applications/networking/cluster/nomad/default.nix
+++ b/pkgs/applications/networking/cluster/nomad/default.nix
@@ -1,7 +1,7 @@
{
lib,
- buildGoModule,
buildGo125Module,
+ buildGo126Module,
fetchFromGitHub,
nixosTests,
installShellFiles,
@@ -82,6 +82,19 @@ rec {
nomad = nomad_1_11;
+ nomad_2_0 = generic {
+ buildGoModule = buildGo126Module;
+ version = "2.0.0";
+ hash = "sha256-5rCAcOXWQ6g2iK1d5wy/a/DZQC2xwwdpI1SscDX98C8=";
+ vendorHash = "sha256-3/H7QgVOHtaUs6BOF7ATVgrA0cfNBbm940Axrvq2bKU=";
+ license = lib.licenses.bsl11;
+ passthru.tests.nomad = nixosTests.nomad;
+ preCheck = ''
+ export PATH="$PATH:$NIX_BUILD_TOP/go/bin"
+ '';
+ __structuredAttrs = true;
+ };
+
nomad_1_11 = generic {
buildGoModule = buildGo125Module;
version = "1.11.3";
diff --git a/pkgs/applications/networking/cluster/rke2/1_33/images-versions.json b/pkgs/applications/networking/cluster/rke2/1_33/images-versions.json
index 16d2806a85b6..42b6796435a8 100644
--- a/pkgs/applications/networking/cluster/rke2/1_33/images-versions.json
+++ b/pkgs/applications/networking/cluster/rke2/1_33/images-versions.json
@@ -1,138 +1,138 @@
{
"images-calico-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-calico.linux-amd64.tar.gz",
- "sha256": "dd6d234775759b8abdd3a87a1a748f92db648f096cc9381eb27afd8ae8186f20"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-calico.linux-amd64.tar.gz",
+ "sha256": "f2341239b5fd73f2b07b074d88c7b34334a808684462f4a6e70fa27591e479a7"
},
"images-calico-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-calico.linux-amd64.tar.zst",
- "sha256": "1c10516660617d6db897bec16e362b4c4e4a0c1f43f08bb9a87663e051d8b806"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-calico.linux-amd64.tar.zst",
+ "sha256": "8b91f83ee480ae60cc85601e150a2bf412531763ab8e2eaab0b0e4cefa1a83a5"
},
"images-calico-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-calico.linux-arm64.tar.gz",
- "sha256": "02a2df53bea7805ee124e17db2263d17588a74d091c9656dd07052bcaf7fc159"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-calico.linux-arm64.tar.gz",
+ "sha256": "4fdf2f4bc634c60e6503c7ddd52042baa2d65570a8a0a41eb883bd34920e6766"
},
"images-calico-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-calico.linux-arm64.tar.zst",
- "sha256": "7b8e832bfde832d24335786c43a8c0aeede3c04e2aee4c8349822383f2fa390e"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-calico.linux-arm64.tar.zst",
+ "sha256": "dacd942276d2ffe8487bee4f7ff8df1522b935eed4eef2cae89f260580eb3305"
},
"images-canal-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-canal.linux-amd64.tar.gz",
- "sha256": "16275efc94e4a399f0edbbf5ebfe46d8c5c7784d5a4ea300c7313ebbb24190d8"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-canal.linux-amd64.tar.gz",
+ "sha256": "a3e0c2e05174839fe3e66639afa40bb96466a09e60fb73ec15685d1628f96191"
},
"images-canal-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-canal.linux-amd64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-canal.linux-amd64.tar.zst",
"sha256": "3a7828ce0143c3eb91cae940cebdfa0145960e91be056e88a8b077ee39ccc54d"
},
"images-canal-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-canal.linux-arm64.tar.gz",
- "sha256": "14fb90f2931bea3f030e7ba6c682013911260177bce91eadb2b45f23936465a5"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-canal.linux-arm64.tar.gz",
+ "sha256": "d86eb346ca1db9ab0efaaf5b4c3418cc096ffd476d2c57f9d4a98a3bab06ef32"
},
"images-canal-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-canal.linux-arm64.tar.zst",
- "sha256": "ede6d29451a99d7f4663b6a2b8eb0cfa093f83b7b025fd5c4899fb02edac703d"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-canal.linux-arm64.tar.zst",
+ "sha256": "63b0888d1adebb72a77c2d1f1eb1ced1519cfdeb57681026a94c1f53f87f5610"
},
"images-cilium-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-cilium.linux-amd64.tar.gz",
- "sha256": "59f494c03d9aa0f96d99d28e505fae57dd2c30907ea055b888705555ae289d3c"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-cilium.linux-amd64.tar.gz",
+ "sha256": "fd6f6e0051f68efd21425364f17156d58f605063f562069fddf398e208a08032"
},
"images-cilium-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-cilium.linux-amd64.tar.zst",
- "sha256": "21ebfe2078b4ef92b2ac3dfe664fd48556cf2b79f9058dd3cd6ed5ed10fcbe1b"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-cilium.linux-amd64.tar.zst",
+ "sha256": "3623e1e59fd4d4a47c4b5e4143d7a8ef31707efbca7d7bf9c299d700c0e1d291"
},
"images-cilium-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-cilium.linux-arm64.tar.gz",
- "sha256": "766acd7cbff87a3eab89cc0dc433df34c5d44bfc5304872adfffa432f968450c"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-cilium.linux-arm64.tar.gz",
+ "sha256": "70b362df86f882e64c4d7a8a01901a528bb22e12a28a6996d754bd04b9f396e5"
},
"images-cilium-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-cilium.linux-arm64.tar.zst",
- "sha256": "6bd03722d01aa1d281da47318ddca6e1dafbac7acf23f7dc864c7799b4616479"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-cilium.linux-arm64.tar.zst",
+ "sha256": "030d22fd0cb52d90321b37e2d1cd9448b571ba5eeb6b1d68daba40ecff515214"
},
"images-core-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-core.linux-amd64.tar.gz",
- "sha256": "4b61e3e97e6770b9a2625a21925282e1774bc9114f0a9df5392cd1199b4df744"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-core.linux-amd64.tar.gz",
+ "sha256": "4513f277d0380330eba4d31dc8096142c2a654a34f01f1c90ab167b78dc58181"
},
"images-core-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-core.linux-amd64.tar.zst",
- "sha256": "c9a0fe7e3a747fb01d19b0a846df97d4d53a31f563e5308d86401d6b000b031b"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-core.linux-amd64.tar.zst",
+ "sha256": "a82003606da83f683a7025de7481ef9939d1b10a9f9b222ca5e80f34885a87dc"
},
"images-core-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-core.linux-arm64.tar.gz",
- "sha256": "899f8e8b8ece3d85384de407fd3f8d375daa9b6f0c1bbd54108426e22fa4a623"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-core.linux-arm64.tar.gz",
+ "sha256": "121690236b9c7f0dd094d4070e80cf9b624888e2418b10c66ebbf894d63c2788"
},
"images-core-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-core.linux-arm64.tar.zst",
- "sha256": "be6bc62be91cef6ebb9f995fb4a3e7ca68ab485eec7eb304d129c9d44d543e0c"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-core.linux-arm64.tar.zst",
+ "sha256": "26edec0d747a5578f7e638a36f54e8f301a06bcc87814d3b2274db571900f44f"
},
"images-flannel-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-flannel.linux-amd64.tar.gz",
- "sha256": "56c322cf540988649257018f8be4cac80ff1fafb206c3efeb7cfc190d76eff6f"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-flannel.linux-amd64.tar.gz",
+ "sha256": "cb33139d9e7569f9b6ad5822f481c83f259a6cd13639f3980e2ad8c2dabb8284"
},
"images-flannel-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-flannel.linux-amd64.tar.zst",
- "sha256": "832aae87b5eba45be64b47a5ebc04824060095dbc79d58adb009dbc0b738252a"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-flannel.linux-amd64.tar.zst",
+ "sha256": "23695fd8c2a77f043a089c44437d12b5bde88422dbcd1d70edcda7a78f651137"
},
"images-flannel-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-flannel.linux-arm64.tar.gz",
- "sha256": "ffc90536663d1edd4cd101e492d84dcd79dd1af1b3b16643786ab8a5d2fcccb7"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-flannel.linux-arm64.tar.gz",
+ "sha256": "a4d428464b3e3e11aafa8fab70a7f183d57d152049f02bd295a6bb4e925a4dbf"
},
"images-flannel-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-flannel.linux-arm64.tar.zst",
- "sha256": "39b36764f09857c01eaa9520da3e2d5023d7df881bc72379e4c55d05ebde8f6f"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-flannel.linux-arm64.tar.zst",
+ "sha256": "8aa8e19b739bc3fd897115f92d54acd081453441ee4dae8ca694ec47662838a7"
},
"images-harvester-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-harvester.linux-amd64.tar.gz",
- "sha256": "93e0f6a8e5024f054cdce242aea4fdb833e476d7b2531b454f5f3267f724594e"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-harvester.linux-amd64.tar.gz",
+ "sha256": "97cd2eb0920d433ef57c1a8c8f4a6680faba9a0589c9605c30a56e2c09110c77"
},
"images-harvester-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-harvester.linux-amd64.tar.zst",
- "sha256": "2b72f3bf1485a986d4a325cd15cb12163f4acabcdd4fcf77400a4c226a26c097"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-harvester.linux-amd64.tar.zst",
+ "sha256": "f16ef32d0b9586fb7e600013e56dd9098149dc5ce5239f4828ad03dc7463553f"
},
"images-harvester-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-harvester.linux-arm64.tar.gz",
- "sha256": "4e675fca42ba1862810e021570f58462046e11fb92552d699e20d314be4dd54f"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-harvester.linux-arm64.tar.gz",
+ "sha256": "86fe56d8a277208c26c13a9b04b18b4eb4f2b6debcc7ad754af873e4c64d66c5"
},
"images-harvester-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-harvester.linux-arm64.tar.zst",
- "sha256": "c642cadb4f1ccf8439e3c47b10933cae6db0d29c2d9bb9b45267ca69191b0c3f"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-harvester.linux-arm64.tar.zst",
+ "sha256": "dc8e9aa0dd1ce2a62b58b7ebfc673911364bd2c3228781f4a226e4796d0436be"
},
"images-multus-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-multus.linux-amd64.tar.gz",
- "sha256": "080cbffc7710eb25167e65619101b9cbfbd80d6510da2c857a7fe2d70140358d"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-multus.linux-amd64.tar.gz",
+ "sha256": "287437a99ff5c42516764d625571c10d2fbb44ef82cdb026d37b141e56305664"
},
"images-multus-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-multus.linux-amd64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-multus.linux-amd64.tar.zst",
"sha256": "108543225439fc50053a904b953813a39a0d0d4e6c7a76a2e99a8ee26a69f1a2"
},
"images-multus-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-multus.linux-arm64.tar.gz",
- "sha256": "1009e845edf77dbe04e8d815ce036c73f1309c0a4a2ec69abafb3e058365513c"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-multus.linux-arm64.tar.gz",
+ "sha256": "98f213f7c8a70c4b0d0fb22329212190e08c82d6be482b227e3256637388c732"
},
"images-multus-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-multus.linux-arm64.tar.zst",
- "sha256": "f76f06cd2344a2c44283733c0e02a94b1bea6c63bc0b7cb6aa2871a474661628"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-multus.linux-arm64.tar.zst",
+ "sha256": "c310597f504b2dd8ac46cc2b87125dcf57a3ae77e4bbbeba4f436a598a2b96f3"
},
"images-traefik-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-traefik.linux-amd64.tar.gz",
- "sha256": "4268db05101d1022ee1002f46516aebeac1b9f8171288ea2d14ddd4763b35ff1"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-traefik.linux-amd64.tar.gz",
+ "sha256": "86a46ecea0d7a60a68314a5794698d6421aa4ce69c05a1f836360e9be996a36b"
},
"images-traefik-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-traefik.linux-amd64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-traefik.linux-amd64.tar.zst",
"sha256": "aec23459c8e51ec16491b4657a3b2a64e49357d3e6cef0a11ac7d3c2f285fe4b"
},
"images-traefik-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-traefik.linux-arm64.tar.gz",
- "sha256": "39381c15bf462071edeb8f735d447ec6d750cc23f6dd3efb45d7b38193ccb7a2"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-traefik.linux-arm64.tar.gz",
+ "sha256": "29372e44e2c1b682c4bc070a764746138a850e24c2cef7edbc97bb2afae51bd8"
},
"images-traefik-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-traefik.linux-arm64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-traefik.linux-arm64.tar.zst",
"sha256": "dd5efa19d02ca7a8a0bcb05febd2781e8ad85016c09b1defe09cdc5f494f05fc"
},
"images-vsphere-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-vsphere.linux-amd64.tar.gz",
- "sha256": "6bcd307750c4077eca4cf934dffa4e93277479512639f4c2458f0b0b0eb2cddb"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-vsphere.linux-amd64.tar.gz",
+ "sha256": "237d3f47fdbc2e511b002ed700536125ccb0fcf7c69f2b192db3bd351043d3cc"
},
"images-vsphere-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r1/rke2-images-vsphere.linux-amd64.tar.zst",
- "sha256": "707374e5a6066ec39b70f46ac43e5ca7c10a04811c509dbbacd3edd2cbc8fc0f"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.33.12%2Brke2r2/rke2-images-vsphere.linux-amd64.tar.zst",
+ "sha256": "be5e7d4a33142cb07ac687b777c2c892354f44061d769a72b4731af49c307ec1"
}
}
diff --git a/pkgs/applications/networking/cluster/rke2/1_33/versions.nix b/pkgs/applications/networking/cluster/rke2/1_33/versions.nix
index 0db096d140ab..826ecfc1e987 100644
--- a/pkgs/applications/networking/cluster/rke2/1_33/versions.nix
+++ b/pkgs/applications/networking/cluster/rke2/1_33/versions.nix
@@ -1,13 +1,13 @@
{
- rke2Version = "1.33.12+rke2r1";
- rke2Commit = "2cf00d600ee7064fe19efee3e35195ad92c006ef";
- rke2TarballHash = "sha256-CESLU8qyr0MnVmXRKaPZ7CFvBmIqpLAiklBrsuw9W/k=";
+ rke2Version = "1.33.12+rke2r2";
+ rke2Commit = "341f3e620b43d178daccfe5199f9cb752b0c3922";
+ rke2TarballHash = "sha256-fjhAeDjX8w3c943wjaOamlR4NXZEIhE68iSIP6co6OQ=";
rke2VendorHash = "sha256-I09PTw359mW9b8j/tjbedu7gJ0cp+NPEvmikxJMOufQ=";
- k8sImageTag = "v1.33.12-rke2r1-build20260512";
+ k8sImageTag = "v1.33.12-rke2r2-build20260521";
etcdVersion = "v3.6.7-k3s1-build20260512";
pauseVersion = "3.6";
ccmVersion = "v1.33.11-0.20260415182038-2566e39d309b-build20260416";
- dockerizedVersion = "v1.33.12-rke2r1";
+ dockerizedVersion = "v1.33.12-rke2r2";
helmJobVersion = "v0.10.0-build20260513";
imagesVersions = with builtins; fromJSON (readFile ./images-versions.json);
}
diff --git a/pkgs/applications/networking/cluster/rke2/1_34/images-versions.json b/pkgs/applications/networking/cluster/rke2/1_34/images-versions.json
index dd74cf02d366..67930cebdd80 100644
--- a/pkgs/applications/networking/cluster/rke2/1_34/images-versions.json
+++ b/pkgs/applications/networking/cluster/rke2/1_34/images-versions.json
@@ -1,138 +1,138 @@
{
"images-calico-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-calico.linux-amd64.tar.gz",
- "sha256": "9191dccc4fa6bdb8bc589d20d34c643227fe2c1e3d198eaf600780a1c44dfd5d"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-calico.linux-amd64.tar.gz",
+ "sha256": "351e9047ce160cbf3b9ed4a32996f36bb4266c200e9957407178d2d28e55f8e5"
},
"images-calico-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-calico.linux-amd64.tar.zst",
- "sha256": "707eaba12e9e9d5e5090bb5fb3e066b893c0b0aeeee6f3627c1153e2db380567"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-calico.linux-amd64.tar.zst",
+ "sha256": "aa746ea4dd91422e37d2cac07b36854ddc1c551b4da061c261d1e0132a983656"
},
"images-calico-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-calico.linux-arm64.tar.gz",
- "sha256": "33421abe9967b3f00799b3251f84a3a36ab03378a4f1c556663ac2b829f59cf4"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-calico.linux-arm64.tar.gz",
+ "sha256": "96829f58e60b02ccee8e19b9ec4ad2ce7ade6f9030b1379eadedd42d151a783b"
},
"images-calico-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-calico.linux-arm64.tar.zst",
- "sha256": "f727fa092650bf685b68358cf41422c260fe9eee7a2aebecc68f14a2fd24a678"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-calico.linux-arm64.tar.zst",
+ "sha256": "6a7f4404f92e88eb515bbff4513b5771e82c69111dfdd7e88c7d83d4366480e6"
},
"images-canal-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-canal.linux-amd64.tar.gz",
- "sha256": "b46d57b12bd62a5f4c4227fc1339ba8785853e55f81031c97774f44844c6769d"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-canal.linux-amd64.tar.gz",
+ "sha256": "16bc527e0b4ab9612747534c2b5801487a12379a364da4936d01816fcb608040"
},
"images-canal-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-canal.linux-amd64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-canal.linux-amd64.tar.zst",
"sha256": "d4d14e4ae3f34d0615fd6007e7048b54bc5a15be9f57fa6be6cd72346c39ccdf"
},
"images-canal-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-canal.linux-arm64.tar.gz",
- "sha256": "977c126339368ac55ccd3cb658dcc6530d46426292735dc8cff95dad99543ebd"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-canal.linux-arm64.tar.gz",
+ "sha256": "ece067531498aec3847a73cd4e4e379c2bb3186f72717601b4766f2a50df0f3a"
},
"images-canal-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-canal.linux-arm64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-canal.linux-arm64.tar.zst",
"sha256": "ede6d29451a99d7f4663b6a2b8eb0cfa093f83b7b025fd5c4899fb02edac703d"
},
"images-cilium-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-cilium.linux-amd64.tar.gz",
- "sha256": "2ad31cd1bcb0ba5ca050bda0942a0b6b79f21ae4dfc70f70001be08921c4c3cb"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-cilium.linux-amd64.tar.gz",
+ "sha256": "95d566220546d6b49f6b79fb729c976fc435ae85fcb39add9ca4e8cade953e8f"
},
"images-cilium-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-cilium.linux-amd64.tar.zst",
- "sha256": "c812ea710fcac1dd25e1be8f45e9fd3218296fdd6414c90a5b856fc16a5835f5"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-cilium.linux-amd64.tar.zst",
+ "sha256": "fc146c92933270bd4291a75069f1d724629c84ebb6c8cd5549756a895a5a9e3d"
},
"images-cilium-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-cilium.linux-arm64.tar.gz",
- "sha256": "07507811563e82578142bd56c2b394b32b55bd53c965f8fc9a9881570feac68d"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-cilium.linux-arm64.tar.gz",
+ "sha256": "d5bfc28db9031a8be3a5c325fe6f6cc6dca8f101af5fce394d11e00a0e866dc2"
},
"images-cilium-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-cilium.linux-arm64.tar.zst",
- "sha256": "0d5813611f47a460c7762f1902e1be7785f52903b8340fc112dd67c5ba9e0adf"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-cilium.linux-arm64.tar.zst",
+ "sha256": "0590f43bf3d6ea590a9069d62170956d72f6ff1b1a45574ef7129a6fb07481ae"
},
"images-core-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-core.linux-amd64.tar.gz",
- "sha256": "4716d37e4c4974c50d88a6c4a4dd1ae59e5d416b06161dc97af267ac91005200"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-core.linux-amd64.tar.gz",
+ "sha256": "2d89ef07043ee8475bd91c97c7419dcb068e089ba8d74f31a503749fdd29a700"
},
"images-core-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-core.linux-amd64.tar.zst",
- "sha256": "c326f685c5037ae41a76d0a57d81ad365664fdb4f09dd8ed1c085daef6e8898c"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-core.linux-amd64.tar.zst",
+ "sha256": "663f048d7ad31aeaf5820effc4e9fd6499ee038c2736afa6721c2384c049765c"
},
"images-core-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-core.linux-arm64.tar.gz",
- "sha256": "8439de0d0159a2d0458a94c48d4f856dd499106bb97a1228315172a8ccf7a227"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-core.linux-arm64.tar.gz",
+ "sha256": "740bed7351bab07dbdaaef316d3c9c817c381fefff4ce43af78381596e1f34d6"
},
"images-core-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-core.linux-arm64.tar.zst",
- "sha256": "dbfb0ba0d552b9f09d6fd7c3f1313c2d3a65b1fe9d003925f90206bb908ceb1c"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-core.linux-arm64.tar.zst",
+ "sha256": "d224ffbf50eb2be8edaa1b923323df17336b8c435bce034e2ba4ae96a54244ec"
},
"images-flannel-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-flannel.linux-amd64.tar.gz",
- "sha256": "2b65ebfff9edad28dc5df77d58a9f9191ae6ed1ffd47e001c61979940dbd30cc"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-flannel.linux-amd64.tar.gz",
+ "sha256": "1a84527d66538b5ff96e331493006bbd3ccc06529d51a8b7c9a3e0d219c25a6f"
},
"images-flannel-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-flannel.linux-amd64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-flannel.linux-amd64.tar.zst",
"sha256": "832aae87b5eba45be64b47a5ebc04824060095dbc79d58adb009dbc0b738252a"
},
"images-flannel-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-flannel.linux-arm64.tar.gz",
- "sha256": "17393dba1ce79c78739381ba2c6dc9383f41bf78e511b04a3eca0564d88a58d9"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-flannel.linux-arm64.tar.gz",
+ "sha256": "80d7ab29cce2d595926ed0999e663932489c62c9e4b818909a05739357e584bc"
},
"images-flannel-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-flannel.linux-arm64.tar.zst",
- "sha256": "8aa8e19b739bc3fd897115f92d54acd081453441ee4dae8ca694ec47662838a7"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-flannel.linux-arm64.tar.zst",
+ "sha256": "39b36764f09857c01eaa9520da3e2d5023d7df881bc72379e4c55d05ebde8f6f"
},
"images-harvester-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-harvester.linux-amd64.tar.gz",
- "sha256": "8d6e85fbf15c10faa6c50098f462e1f042e37e80df8aaa67f4e4a4cfbb61b3f7"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-harvester.linux-amd64.tar.gz",
+ "sha256": "86299476461d69c9db81c47f1bff915f122dd31f229679033cb9ac3888f34d20"
},
"images-harvester-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-harvester.linux-amd64.tar.zst",
- "sha256": "44bca782f1503b189e17248edbfc344c129ffedeabf886c5ecae89717a68e6df"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-harvester.linux-amd64.tar.zst",
+ "sha256": "c3c2539999dbd963deb1533d76fef211902322d7204c977b7534c37342a6ccba"
},
"images-harvester-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-harvester.linux-arm64.tar.gz",
- "sha256": "0af1f6bf05788880ac4617271b8896662c41ed3b099ad617bae21aa41f669f68"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-harvester.linux-arm64.tar.gz",
+ "sha256": "dadfbc1e60b11be02c186343748f3c5e6a7c03bedf4bf36b1007b6addafaf6e2"
},
"images-harvester-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-harvester.linux-arm64.tar.zst",
- "sha256": "085489645c3bdeb44216be70e0194f6e356a4e0116e861fac7009dfc671f99b8"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-harvester.linux-arm64.tar.zst",
+ "sha256": "ec9d3370c2cb488fe98ed38688fd3cec14ba136783efd894b3bec2a5599f8c08"
},
"images-multus-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-multus.linux-amd64.tar.gz",
- "sha256": "6c759cc8ce3e9ae7b6aef0b5cdf4094762f6f69d55dd70b6d9a405db796f1cb3"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-multus.linux-amd64.tar.gz",
+ "sha256": "a4bbad1ab2c8d7f65e6cc9238d63f29524774bc07163a4a23688d9a0a63c4629"
},
"images-multus-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-multus.linux-amd64.tar.zst",
- "sha256": "530f83485923076b7769c4ced5c87b88979dff0e4d28faf33fc5e9b67fc5dadf"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-multus.linux-amd64.tar.zst",
+ "sha256": "98e17b69423ff3de402803a0ec2fb63748252c800c672a232f912d312cf41ff5"
},
"images-multus-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-multus.linux-arm64.tar.gz",
- "sha256": "efc94b4850aef8d2973f51bff0df31ce0689949e22bd05161fd5c12cfa9672ce"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-multus.linux-arm64.tar.gz",
+ "sha256": "1ec1676f8bcb054ab243cc7b3df555e0099fd2a227683615f15c8cbb95db040a"
},
"images-multus-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-multus.linux-arm64.tar.zst",
- "sha256": "883d23d8ef3733d9747251c8a1d223571153fd233eb93e5d32a76129a6c64f2c"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-multus.linux-arm64.tar.zst",
+ "sha256": "c310597f504b2dd8ac46cc2b87125dcf57a3ae77e4bbbeba4f436a598a2b96f3"
},
"images-traefik-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-traefik.linux-amd64.tar.gz",
- "sha256": "282c456cbcdaf42f2b4c62b110aaa459e5517dba0a7dd8c6fd539ce93c9fd632"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-traefik.linux-amd64.tar.gz",
+ "sha256": "288cb12a19e0419f91a56286c934823eda31c523f865bb24b66c9cdeb89cc73f"
},
"images-traefik-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-traefik.linux-amd64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-traefik.linux-amd64.tar.zst",
"sha256": "aec23459c8e51ec16491b4657a3b2a64e49357d3e6cef0a11ac7d3c2f285fe4b"
},
"images-traefik-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-traefik.linux-arm64.tar.gz",
- "sha256": "4ffe8a7b25bc4c116f34b29f51de69ffbe7702f473f8b68577ac086f88e0c5fb"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-traefik.linux-arm64.tar.gz",
+ "sha256": "f3d34ffea490540c028f800362862c74d1b45efb0acb3db072f5417443b71733"
},
"images-traefik-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-traefik.linux-arm64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-traefik.linux-arm64.tar.zst",
"sha256": "dd5efa19d02ca7a8a0bcb05febd2781e8ad85016c09b1defe09cdc5f494f05fc"
},
"images-vsphere-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-vsphere.linux-amd64.tar.gz",
- "sha256": "b15c7523c8ece5525acdd1e04bdcde1a3e54435fcdb1a8ec949de9395f69a3aa"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-vsphere.linux-amd64.tar.gz",
+ "sha256": "c87a8f5b553e664f0c7dfa44b2fdea40b7bbe22bbf4d96667009a76f5b181f86"
},
"images-vsphere-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r1/rke2-images-vsphere.linux-amd64.tar.zst",
- "sha256": "ca086d7c16de41dfd1fd5f2e745949f0a51d4de45f9bacdaa3b1955936f595e9"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.34.8%2Brke2r2/rke2-images-vsphere.linux-amd64.tar.zst",
+ "sha256": "df524665950321e45d0b8521532263e969533af82f7c77dddc86b4b6dfa675a3"
}
}
diff --git a/pkgs/applications/networking/cluster/rke2/1_34/versions.nix b/pkgs/applications/networking/cluster/rke2/1_34/versions.nix
index 06abce696b04..8ca875d9afdf 100644
--- a/pkgs/applications/networking/cluster/rke2/1_34/versions.nix
+++ b/pkgs/applications/networking/cluster/rke2/1_34/versions.nix
@@ -1,13 +1,13 @@
{
- rke2Version = "1.34.8+rke2r1";
- rke2Commit = "4fdfd151975bbc58c8d392620db8eea72fea2abc";
- rke2TarballHash = "sha256-n98pZhWARQMyKj8G9+ymmMZyzoiGo+KPMr0F5KDphqU=";
+ rke2Version = "1.34.8+rke2r2";
+ rke2Commit = "b227fefe1936a550450ce3b6248c559fa58b5cd3";
+ rke2TarballHash = "sha256-Ojc4PhsEYJBhgj+r+XEcdFEjZIlJCCVNC+w7mZWY2hA=";
rke2VendorHash = "sha256-752RlnL+7reFk4G/X8kgHdad71fatY+Ss714MbJDvg8=";
- k8sImageTag = "v1.34.8-rke2r1-build20260512";
+ k8sImageTag = "v1.34.8-rke2r2-build20260521";
etcdVersion = "v3.6.7-k3s1-build20260512";
pauseVersion = "3.6";
ccmVersion = "v1.34.7-0.20260415182025-e7567db58dd7-build20260416";
- dockerizedVersion = "v1.34.8-rke2r1";
+ dockerizedVersion = "v1.34.8-rke2r2";
helmJobVersion = "v0.10.0-build20260513";
imagesVersions = with builtins; fromJSON (readFile ./images-versions.json);
}
diff --git a/pkgs/applications/networking/cluster/rke2/1_35/images-versions.json b/pkgs/applications/networking/cluster/rke2/1_35/images-versions.json
index ceafc8a2dc76..e86d9a95a58d 100644
--- a/pkgs/applications/networking/cluster/rke2/1_35/images-versions.json
+++ b/pkgs/applications/networking/cluster/rke2/1_35/images-versions.json
@@ -1,138 +1,138 @@
{
"images-calico-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-calico.linux-amd64.tar.gz",
- "sha256": "483d18ab6a64d279b4411098dec8b6f4219839bdb0d3e023f87679e6c71905de"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-calico.linux-amd64.tar.gz",
+ "sha256": "d53e659b7f934fb811eadeb7d6e348b12ef932b0a414073301bdf03d1501f32f"
},
"images-calico-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-calico.linux-amd64.tar.zst",
- "sha256": "c8ab27e9f5cd0d85cc20ed8c02c71128f021199a0256c5a051734817193e913c"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-calico.linux-amd64.tar.zst",
+ "sha256": "b7cf99a56b03469169e8b1a32f9aa61b828268dd5aff9482503d00c884260f0e"
},
"images-calico-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-calico.linux-arm64.tar.gz",
- "sha256": "01339c90624d6745e16b7706585fdb32825df66adb892a9bd265257d2de315a5"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-calico.linux-arm64.tar.gz",
+ "sha256": "53a95f56dbd4aeefe631afdf05d00592da7bbb2c089e694d06ffd6c6c8665375"
},
"images-calico-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-calico.linux-arm64.tar.zst",
- "sha256": "9816fa61d5b89ab40ba59db3c0593ed37f712c6bfd1f3b763641b0bfad8b5d04"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-calico.linux-arm64.tar.zst",
+ "sha256": "c49ef55be8b1a30597e4315fac563282cac7870045a465ba7e1ee2c81db44cf6"
},
"images-canal-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-canal.linux-amd64.tar.gz",
- "sha256": "cc4d48fde0650c666f87322ef3fec4987de06d99b4f008a07b667a7650451069"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-canal.linux-amd64.tar.gz",
+ "sha256": "f6ffb60b14b0fda2e3a138f4d6a7e9cb71e8fc759d69cb0fda00aedcaa03ab0f"
},
"images-canal-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-canal.linux-amd64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-canal.linux-amd64.tar.zst",
"sha256": "3a7828ce0143c3eb91cae940cebdfa0145960e91be056e88a8b077ee39ccc54d"
},
"images-canal-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-canal.linux-arm64.tar.gz",
- "sha256": "977c126339368ac55ccd3cb658dcc6530d46426292735dc8cff95dad99543ebd"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-canal.linux-arm64.tar.gz",
+ "sha256": "2319ab1753330cb13ea7ac56198d9da78123aaa6a3b66ea3d970a6c57de9ce41"
},
"images-canal-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-canal.linux-arm64.tar.zst",
- "sha256": "ede6d29451a99d7f4663b6a2b8eb0cfa093f83b7b025fd5c4899fb02edac703d"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-canal.linux-arm64.tar.zst",
+ "sha256": "63b0888d1adebb72a77c2d1f1eb1ced1519cfdeb57681026a94c1f53f87f5610"
},
"images-cilium-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-cilium.linux-amd64.tar.gz",
- "sha256": "0877802ec5502223f1b233573b2e87e3347a7922f2bb52702f9461958ac0c043"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-cilium.linux-amd64.tar.gz",
+ "sha256": "9c6ab1f22a157e7a74c35c4be3c025eb154e6315be9c2085451f59b11b63f8e1"
},
"images-cilium-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-cilium.linux-amd64.tar.zst",
- "sha256": "345afdae010cf3c77e02c4e339749f3c3a5d4d62c3ed486edab0bb1d4089c67e"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-cilium.linux-amd64.tar.zst",
+ "sha256": "38892592ae5e45e27e4cad76d4364c549bdb386def54398cc26c9249bbd34760"
},
"images-cilium-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-cilium.linux-arm64.tar.gz",
- "sha256": "00161836b5f27f1ce07be67337d08781033d6df4efe429bd922459738145ecdc"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-cilium.linux-arm64.tar.gz",
+ "sha256": "a0a02109ef5a5f4eae1a06003ba80544b405b155840ce5c3535b1c4e02d16f0e"
},
"images-cilium-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-cilium.linux-arm64.tar.zst",
- "sha256": "32b275bc86c35471d9deea33b6119a33667a28477c06500db3ea9d1d0cdf7d4b"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-cilium.linux-arm64.tar.zst",
+ "sha256": "8110fc9517469dad0c291258e0dbdece6e4e3c9a51d539531527f4236692b7bd"
},
"images-core-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-core.linux-amd64.tar.gz",
- "sha256": "e0519dd39f2f3297a84fa7c2e9c6fdda508386169474a47ebbb570c66f51c27c"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-core.linux-amd64.tar.gz",
+ "sha256": "2d32c6205a83ac776fe54d7777472725edfc204fd7a30befa0ee9c5f7fde80cc"
},
"images-core-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-core.linux-amd64.tar.zst",
- "sha256": "6f63f6cf296f828ef1ff98041691e9a6126490000ae2e90648c0699ab1bde91f"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-core.linux-amd64.tar.zst",
+ "sha256": "48bdbb2bc2652eb6647ce3f2ce215ac9bf12cf5fbe4936688e5de34605f0fb2c"
},
"images-core-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-core.linux-arm64.tar.gz",
- "sha256": "b66332a3a903e1d18c783a7d58d9eb74aef9d4cb0fe91a4aa75a63cff5b3e92a"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-core.linux-arm64.tar.gz",
+ "sha256": "3e392555a295ec6f7e3ea477ded0bb71c04957dccd168de87d87226dfdbb753f"
},
"images-core-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-core.linux-arm64.tar.zst",
- "sha256": "98abe8232378ef17f9890e3c77cd405a90e7aa2fdf5d612bd7d42ee174714cf6"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-core.linux-arm64.tar.zst",
+ "sha256": "29d28cb1b2035c1d5123fdb6bb0fa8cc647ad9cd570edf434bc7e560806426fa"
},
"images-flannel-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-flannel.linux-amd64.tar.gz",
- "sha256": "4ea4b1fb4a653a5ad00dd206406482abddf9f53a1b1c4f884e7e7fb4fe720c90"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-flannel.linux-amd64.tar.gz",
+ "sha256": "e86e5631c691d2dcac99764542c875e4bed902f385f5a6e2f6e6b88facf114aa"
},
"images-flannel-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-flannel.linux-amd64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-flannel.linux-amd64.tar.zst",
"sha256": "23695fd8c2a77f043a089c44437d12b5bde88422dbcd1d70edcda7a78f651137"
},
"images-flannel-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-flannel.linux-arm64.tar.gz",
- "sha256": "d4dcaa35507a5f9d407a5d3a3fccee3e52061256bd0b420123bf888a24915758"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-flannel.linux-arm64.tar.gz",
+ "sha256": "396084ee38b31e5b78e3d8c3a015f8a56194119204aecb9de052a5be20c61e01"
},
"images-flannel-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-flannel.linux-arm64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-flannel.linux-arm64.tar.zst",
"sha256": "39b36764f09857c01eaa9520da3e2d5023d7df881bc72379e4c55d05ebde8f6f"
},
"images-harvester-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-harvester.linux-amd64.tar.gz",
- "sha256": "b47becfdf139af069eaf1f691498ff689b577af43ed934edba119257bf652cab"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-harvester.linux-amd64.tar.gz",
+ "sha256": "38eecc385bbb77bde48d7dec9aa48bc897136c5714e5eff9c56c9df580dfb35d"
},
"images-harvester-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-harvester.linux-amd64.tar.zst",
- "sha256": "b00afa052e7b67d4111f19a4eefb22095c836a7972911880e65dee2044975898"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-harvester.linux-amd64.tar.zst",
+ "sha256": "20e7b012ab2802a057be6cf6ef3d8f04a65484403615ddd3c2852d59d3ed7453"
},
"images-harvester-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-harvester.linux-arm64.tar.gz",
- "sha256": "1e9a034a075472ecaa6f9e66c7ff2ada6f97b4a02a5e070ce36208b4eb4f1fcc"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-harvester.linux-arm64.tar.gz",
+ "sha256": "8b712f389d2118a802a70ec4175e83be0557a4b699bc238bd228c862aa337419"
},
"images-harvester-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-harvester.linux-arm64.tar.zst",
- "sha256": "8ddfde1b1ceea2f08db9fef9da9cb9745bbe74b2520cfceeb150c623102401a3"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-harvester.linux-arm64.tar.zst",
+ "sha256": "dfa539c18041a6e0ef1747c469c718f7e608e031dbc99eada2dbf56768f6de72"
},
"images-multus-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-multus.linux-amd64.tar.gz",
- "sha256": "b75549d8d650823ac9c8f5b5ba247901a8c5681ac91d909aea5a0d4f66d0b5bd"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-multus.linux-amd64.tar.gz",
+ "sha256": "48a6e3c5fc5534b6c77957dd82e488f46cd6c6a713233da32ab18e94961f33a2"
},
"images-multus-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-multus.linux-amd64.tar.zst",
- "sha256": "108543225439fc50053a904b953813a39a0d0d4e6c7a76a2e99a8ee26a69f1a2"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-multus.linux-amd64.tar.zst",
+ "sha256": "98e17b69423ff3de402803a0ec2fb63748252c800c672a232f912d312cf41ff5"
},
"images-multus-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-multus.linux-arm64.tar.gz",
- "sha256": "c0f20bbcc6b238af7249c265a7c6458c30f9358007c1380c7b99de01ee219398"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-multus.linux-arm64.tar.gz",
+ "sha256": "cf99f6af0ae8389926f9cba977370ffbe1ee261d429281957eb2b5cfb015a71e"
},
"images-multus-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-multus.linux-arm64.tar.zst",
- "sha256": "eee8c18cf3bfea3df603e2d9fb0c30c75fcc7e88dc58c1cab1b8d5926aa8dd52"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-multus.linux-arm64.tar.zst",
+ "sha256": "f76f06cd2344a2c44283733c0e02a94b1bea6c63bc0b7cb6aa2871a474661628"
},
"images-traefik-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-traefik.linux-amd64.tar.gz",
- "sha256": "1aed02afe45b0f6abe3b8934bdd6beee5a8018b31e81be896e9bbfbf75cd2bc5"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-traefik.linux-amd64.tar.gz",
+ "sha256": "f77681adb7835d43c2eb77d189573990f32fa8b3d98bf7d8fb559788f0e30eea"
},
"images-traefik-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-traefik.linux-amd64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-traefik.linux-amd64.tar.zst",
"sha256": "aec23459c8e51ec16491b4657a3b2a64e49357d3e6cef0a11ac7d3c2f285fe4b"
},
"images-traefik-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-traefik.linux-arm64.tar.gz",
- "sha256": "4ffe8a7b25bc4c116f34b29f51de69ffbe7702f473f8b68577ac086f88e0c5fb"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-traefik.linux-arm64.tar.gz",
+ "sha256": "5a57534fd048ad725e15a38a8be65a642f6ad443cb55c9dad6eff276d704dd44"
},
"images-traefik-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-traefik.linux-arm64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-traefik.linux-arm64.tar.zst",
"sha256": "dd5efa19d02ca7a8a0bcb05febd2781e8ad85016c09b1defe09cdc5f494f05fc"
},
"images-vsphere-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-vsphere.linux-amd64.tar.gz",
- "sha256": "4d1a7ba7c43d474d796d7b05a0f24a423b6c3a5a53388e9d803fd31c54efb912"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-vsphere.linux-amd64.tar.gz",
+ "sha256": "c3e5339a35bba7b7184850935bbfcda7d6c2dc7dd4e34d7c9f390a58766ac654"
},
"images-vsphere-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r1/rke2-images-vsphere.linux-amd64.tar.zst",
- "sha256": "d2f8909d694493222aa1051f8c013ffa73615567141336b872ada5c9e6312cd8"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.35.5%2Brke2r2/rke2-images-vsphere.linux-amd64.tar.zst",
+ "sha256": "f0a388912b6150d4ff820b53ee58c398d5572c325f381ad5ce4d82f0d10f5849"
}
}
diff --git a/pkgs/applications/networking/cluster/rke2/1_35/versions.nix b/pkgs/applications/networking/cluster/rke2/1_35/versions.nix
index 3d645c28b4b5..a4893d822583 100644
--- a/pkgs/applications/networking/cluster/rke2/1_35/versions.nix
+++ b/pkgs/applications/networking/cluster/rke2/1_35/versions.nix
@@ -1,13 +1,13 @@
{
- rke2Version = "1.35.5+rke2r1";
- rke2Commit = "e28e7c1a0404f1e9bf36e8b7222d64aec6b7a004";
- rke2TarballHash = "sha256-t++HKNbR4WGzZiR6rVMke7lbixXA8H5ibovfitwPuXE=";
+ rke2Version = "1.35.5+rke2r2";
+ rke2Commit = "a779b949d9a7987fc51e7c71c146db4160d0e3bf";
+ rke2TarballHash = "sha256-eMqaz7DmIwANpvcQxEA6rJQcLmdBlEFT8Qju+Wr0dTo=";
rke2VendorHash = "sha256-LV3ISu7bW6kxlKFe0GUqkB9Jte1Ey5DaWm+OKq1/1uY=";
- k8sImageTag = "v1.35.5-rke2r1-build20260512";
+ k8sImageTag = "v1.35.5-rke2r2-build20260521";
etcdVersion = "v3.6.7-k3s1-build20260512";
pauseVersion = "3.6";
ccmVersion = "v1.35.4-0.20260415195656-e51c0636351d-build20260415";
- dockerizedVersion = "v1.35.5-rke2r1";
+ dockerizedVersion = "v1.35.5-rke2r2";
helmJobVersion = "v0.10.0-build20260513";
imagesVersions = with builtins; fromJSON (readFile ./images-versions.json);
}
diff --git a/pkgs/applications/networking/cluster/rke2/1_36/images-versions.json b/pkgs/applications/networking/cluster/rke2/1_36/images-versions.json
index b82d9e141d76..8c5273df8031 100644
--- a/pkgs/applications/networking/cluster/rke2/1_36/images-versions.json
+++ b/pkgs/applications/networking/cluster/rke2/1_36/images-versions.json
@@ -1,138 +1,138 @@
{
"images-calico-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-calico.linux-amd64.tar.gz",
- "sha256": "bc9fb1ba72af6185de90e4e0f8a384993657c4b0fdedbb14e7ca5cf93bf2303d"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-calico.linux-amd64.tar.gz",
+ "sha256": "ec37f597d76bbe3f30b6108049faaf9f4a6e99b4d228f9b8485fb492c31aa0aa"
},
"images-calico-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-calico.linux-amd64.tar.zst",
- "sha256": "38fc5ecd017e9a66e3831ece42efedcfedaafc000759eaa4fb9f19a68122ec51"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-calico.linux-amd64.tar.zst",
+ "sha256": "5112e4bf4f4f5f553addb98abf53636b8ff57cbf18514d7537ec03c344d5b345"
},
"images-calico-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-calico.linux-arm64.tar.gz",
- "sha256": "e86ac7f4cf14e4f02fcdd0e3d74e832fa43654f592068c2b5d8c044c69e2b749"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-calico.linux-arm64.tar.gz",
+ "sha256": "7161e8af4ae5c45d480be7083f15d3e7992745e9559d460584c5136d9caca789"
},
"images-calico-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-calico.linux-arm64.tar.zst",
- "sha256": "03df93db61bc54f351bb6131c632279c265d4b71af0a90e2a6898f9b99b453f4"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-calico.linux-arm64.tar.zst",
+ "sha256": "f63ba6f6b30564626d6839002117325b3d48b2f2a131a8bfeb1192244da1de7e"
},
"images-canal-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-canal.linux-amd64.tar.gz",
- "sha256": "5cce5314ed6ff237c646723456c81876e89517b9164368728a9df00697655858"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-canal.linux-amd64.tar.gz",
+ "sha256": "7478fa0950554451cd856dbb8a800486f73fbb4758ccad28d1d218febe9b0b39"
},
"images-canal-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-canal.linux-amd64.tar.zst",
- "sha256": "3a7828ce0143c3eb91cae940cebdfa0145960e91be056e88a8b077ee39ccc54d"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-canal.linux-amd64.tar.zst",
+ "sha256": "d4d14e4ae3f34d0615fd6007e7048b54bc5a15be9f57fa6be6cd72346c39ccdf"
},
"images-canal-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-canal.linux-arm64.tar.gz",
- "sha256": "e8346348137747fbd626846e5b71d182c49e8a1dcb997ea9e91f50e7bd907129"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-canal.linux-arm64.tar.gz",
+ "sha256": "4a77a243413b7963e3f3a98fcdb1cc2bd96cbe83b6a3f3d7ca73f05c1d7bd855"
},
"images-canal-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-canal.linux-arm64.tar.zst",
- "sha256": "ede6d29451a99d7f4663b6a2b8eb0cfa093f83b7b025fd5c4899fb02edac703d"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-canal.linux-arm64.tar.zst",
+ "sha256": "63b0888d1adebb72a77c2d1f1eb1ced1519cfdeb57681026a94c1f53f87f5610"
},
"images-cilium-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-cilium.linux-amd64.tar.gz",
- "sha256": "8c52261340b4af54186f83d2913c676a2dcef820f25a1b42b8c51cfef1dcdbc6"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-cilium.linux-amd64.tar.gz",
+ "sha256": "83642c47920ab60e3042895aee5e56914187c822ac279178096c5430ce655988"
},
"images-cilium-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-cilium.linux-amd64.tar.zst",
- "sha256": "865913456dc55b2ba4748b0fe76489e4960a60990f207341c66bcbf9e93e95b3"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-cilium.linux-amd64.tar.zst",
+ "sha256": "442a391b5486a551fec98464a02396179e6f70a4cc41e0bb631b0ea70a8affc3"
},
"images-cilium-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-cilium.linux-arm64.tar.gz",
- "sha256": "4170bfc7d0ebf9167a94d24e393fbff0fc7dce4da1443257709fdbe603ffc579"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-cilium.linux-arm64.tar.gz",
+ "sha256": "a5d7ec33831f617546aee8ad44a521e06cdef30c5ac9e3c23b1876dddacccb9b"
},
"images-cilium-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-cilium.linux-arm64.tar.zst",
- "sha256": "016caf748e5c39460b9618d998d261c7db8fe8348f9fa43d35693a47d4913b86"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-cilium.linux-arm64.tar.zst",
+ "sha256": "d5b757ba6313c6bfb4e85b238aa318ac12aeed7ec8f1e4af825405648737e1bb"
},
"images-core-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-core.linux-amd64.tar.gz",
- "sha256": "03a72f2c228131b7cb616c5b7758cd1c00b7f3e7d589573c5faf837e4e2ab764"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-core.linux-amd64.tar.gz",
+ "sha256": "30ff144583c0b3249b06801d78c902305e1a5009bf3ab7211862d989fca18267"
},
"images-core-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-core.linux-amd64.tar.zst",
- "sha256": "37acd15d183693fb0bb465840590593ed78d72415752a052d282a418fdb905cf"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-core.linux-amd64.tar.zst",
+ "sha256": "e056f1ba054b8b39a68c4df19480d878327327583ea843f4a80ea0289e796e15"
},
"images-core-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-core.linux-arm64.tar.gz",
- "sha256": "4798bf3293e7b5b62e694bee8a811c3ace86bb5c7516c9f196a4ba48dc947c3f"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-core.linux-arm64.tar.gz",
+ "sha256": "54d0d3d97462f8f70c75479cc77edd482cf318bef31ecaa3063b354432d7af9a"
},
"images-core-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-core.linux-arm64.tar.zst",
- "sha256": "ff8c770fa2b17151e333a0a4449bc4dc3cd5c65662ec88b2ffc31fde6a40d0ed"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-core.linux-arm64.tar.zst",
+ "sha256": "62528323277c307d46e0564288508d9203dc460f93be222075b5a1c1be1c910e"
},
"images-flannel-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-flannel.linux-amd64.tar.gz",
- "sha256": "0e5c71c9ecd89f11bb1cc0ea72a0297090e7a44395efe5fd74e14af3db3581a8"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-flannel.linux-amd64.tar.gz",
+ "sha256": "b9742e4656c394dff69f7356e9fd22bc7ed4e0b4cac2d86e224cdbb5d793158e"
},
"images-flannel-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-flannel.linux-amd64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-flannel.linux-amd64.tar.zst",
"sha256": "23695fd8c2a77f043a089c44437d12b5bde88422dbcd1d70edcda7a78f651137"
},
"images-flannel-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-flannel.linux-arm64.tar.gz",
- "sha256": "d9f75aaace63bcba2cbaeba2662d9877d39ec822621fd96824e9ec3fbe62a79c"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-flannel.linux-arm64.tar.gz",
+ "sha256": "e2ea34d8f0207197758c75dbadb1e6ea1e31758ea26f49ac6cd8cb5ea941e743"
},
"images-flannel-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-flannel.linux-arm64.tar.zst",
- "sha256": "8aa8e19b739bc3fd897115f92d54acd081453441ee4dae8ca694ec47662838a7"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-flannel.linux-arm64.tar.zst",
+ "sha256": "39b36764f09857c01eaa9520da3e2d5023d7df881bc72379e4c55d05ebde8f6f"
},
"images-harvester-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-harvester.linux-amd64.tar.gz",
- "sha256": "c9442d489c4170fc515d04c2c5c7c76ff3ca2fb4093a94aea0d0a6fb1719c5d3"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-harvester.linux-amd64.tar.gz",
+ "sha256": "34d08bdfe771f5d6c2c1a077519aa9dea2c4ec5ff6598812630b5175e15b0436"
},
"images-harvester-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-harvester.linux-amd64.tar.zst",
- "sha256": "9551558d7baba1a78de7954f4801cf4329b5fb5ffd0cc3566b9fa32732ff950c"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-harvester.linux-amd64.tar.zst",
+ "sha256": "04e83f1ee26a6e40cd4267025b85a8afba847e8b89bbf25ad33d3f598128c3d5"
},
"images-harvester-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-harvester.linux-arm64.tar.gz",
- "sha256": "11ea150625fc1a4700cec2859367692d533f7f9288f7196b331a77682766d742"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-harvester.linux-arm64.tar.gz",
+ "sha256": "b56ec39e51d0f99a3bee9cb7b93fa5c07e4b91a2709bf6cca246d3c47f442c1d"
},
"images-harvester-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-harvester.linux-arm64.tar.zst",
- "sha256": "045db3938a0a11f6d5b4936f63471fec48fd76d29ef85e9cfe6bae5bddd8525e"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-harvester.linux-arm64.tar.zst",
+ "sha256": "e8a51c1926db9e71ab970b0a08a2becb85b2c2aab0108120d1f3d6d21f17f1cd"
},
"images-ingress-nginx-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-ingress-nginx.linux-amd64.tar.gz",
- "sha256": "0af77531d170d30b844518bb4665b29f3f386cf160f7c2b955467516f4d04dc3"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-ingress-nginx.linux-amd64.tar.gz",
+ "sha256": "100d6841727443cc9558a4aaed924c1f23e8d39e4302bd32dac6fbdebed940e9"
},
"images-ingress-nginx-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-ingress-nginx.linux-amd64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-ingress-nginx.linux-amd64.tar.zst",
"sha256": "d5b7d3f12de0799cebf84fc6260fc4f093f2837c5fef6fc84849d8f1da5cbc22"
},
"images-ingress-nginx-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-ingress-nginx.linux-arm64.tar.gz",
- "sha256": "8c5d5eea216102e5dd07621671f2e462dfade184f20c81adb8facbaa58e59c2c"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-ingress-nginx.linux-arm64.tar.gz",
+ "sha256": "f10675c08075e5312f650bde022990e2122de979e4559f2c56aa1ec941516eb2"
},
"images-ingress-nginx-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-ingress-nginx.linux-arm64.tar.zst",
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-ingress-nginx.linux-arm64.tar.zst",
"sha256": "363f42d83118e3398e72996f6b42477230000ffd50d93fdda570140ea020539b"
},
"images-multus-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-multus.linux-amd64.tar.gz",
- "sha256": "ec3d8557e36db43acd9a76c38242de6feea354e41ae3ff8b9ab55de82ee19026"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-multus.linux-amd64.tar.gz",
+ "sha256": "70dd5bf043e5ade8f15bf794ed68c2632fa168cdabb88a59e1664c21802b1b72"
},
"images-multus-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-multus.linux-amd64.tar.zst",
- "sha256": "8be7075092a5e179e50fb526ea730018103d9f8a609f22f0d1431482690a9d7f"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-multus.linux-amd64.tar.zst",
+ "sha256": "98e17b69423ff3de402803a0ec2fb63748252c800c672a232f912d312cf41ff5"
},
"images-multus-linux-arm64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-multus.linux-arm64.tar.gz",
- "sha256": "caebabf77d9d3190d76156990d8eaa0c2df5cb563a8447f1e506b50f4104e1a0"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-multus.linux-arm64.tar.gz",
+ "sha256": "70dc7d7e6b5ceee67e1ea31a9fb8915b23697b46ab81962fcf2bc23994eadcdb"
},
"images-multus-linux-arm64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-multus.linux-arm64.tar.zst",
- "sha256": "39bd89d250894254f7c1f9b061401a574716574ab3f51cc3a82c03eb4e804825"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-multus.linux-arm64.tar.zst",
+ "sha256": "7d768e2a1ba9eeb051e2cc74e1886a21cef515230a531a300dfe8b988a426fdf"
},
"images-vsphere-linux-amd64-tar-gz": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-vsphere.linux-amd64.tar.gz",
- "sha256": "d07ed8b72db67fae9024540fca3eed7990b4a4b3a7ba6eef78a2eae8e6b3b4d3"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-vsphere.linux-amd64.tar.gz",
+ "sha256": "a16d790a062b96f792952a8e87df314050032e1306d3f1b411c4c1e80cea574a"
},
"images-vsphere-linux-amd64-tar-zst": {
- "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r1/rke2-images-vsphere.linux-amd64.tar.zst",
- "sha256": "4cd43197b21bd1344c0a7e87a7f28c8766b3edfab8e2fb2bb6954d144f3b44a7"
+ "url": "https://github.com/rancher/rke2/releases/download/v1.36.1%2Brke2r2/rke2-images-vsphere.linux-amd64.tar.zst",
+ "sha256": "bb33b083c06d621bb430942aad52ddfe45fd4cff956072104d83ea22ef91be02"
}
}
diff --git a/pkgs/applications/networking/cluster/rke2/1_36/versions.nix b/pkgs/applications/networking/cluster/rke2/1_36/versions.nix
index 0df94c7d70dd..fd170c37f15f 100644
--- a/pkgs/applications/networking/cluster/rke2/1_36/versions.nix
+++ b/pkgs/applications/networking/cluster/rke2/1_36/versions.nix
@@ -1,13 +1,13 @@
{
- rke2Version = "1.36.1+rke2r1";
- rke2Commit = "b4a8e78038f35eb282a8d6e3c29797a1181fa961";
- rke2TarballHash = "sha256-SD7+lNYu6/5iMxEmHEpkD8g9UCgN6gjkFsGdQn9o1Cc=";
+ rke2Version = "1.36.1+rke2r2";
+ rke2Commit = "05cf623e2245271b63d1d7ef2caced897636175c";
+ rke2TarballHash = "sha256-hxnO8w+ec9cx6betH2hdC50AO/VHmPlseeKV8HgH5ZE=";
rke2VendorHash = "sha256-gUgRAC9yKDa8JYb/jdCxZdP6500XxjqHprmYlPv5A8c=";
- k8sImageTag = "v1.36.1-rke2r1-build20260512";
+ k8sImageTag = "v1.36.1-rke2r2-build20260521";
etcdVersion = "v3.6.7-k3s1-build20260512";
pauseVersion = "3.6";
- ccmVersion = "v1.36.0-rc2.0.20260427154526-d239025e2a23-build20260429";
- dockerizedVersion = "v1.36.1-rke2r1";
+ ccmVersion = "v1.36.1-0.20260508014929-7bbbf7c9b258-build20260515";
+ dockerizedVersion = "v1.36.1-rke2r2";
helmJobVersion = "v0.10.0-build20260513";
imagesVersions = with builtins; fromJSON (readFile ./images-versions.json);
}
diff --git a/pkgs/applications/networking/cluster/terraform-providers/default.nix b/pkgs/applications/networking/cluster/terraform-providers/default.nix
index c1ef75053831..c55a27edcda8 100644
--- a/pkgs/applications/networking/cluster/terraform-providers/default.nix
+++ b/pkgs/applications/networking/cluster/terraform-providers/default.nix
@@ -127,189 +127,13 @@ let
removed = name: date: throw "the ${name} terraform provider removed from nixpkgs on ${date}";
in
lib.optionalAttrs config.allowAliases {
- _assert = archived "_assert" "2025/10";
- azurestack = archived "azurestack" "2025/10";
- googleworkspace = archived "googleworkspace" "2025/10";
- huaweicloudstack = archived "huaweicloudstack" "2025/10";
- metal = archived "metal" "2025/10";
- stackpath = archived "stackpath" "2025/10";
- vra7 = archived "vra7" "2025/10";
ccloud = removed "ccloud" "2025/11. Try sap-cloud-infrastructure_sci instead.";
sapcc_ccloud = removed "sapcc_ccloud" "2025/11. Try sap-cloud-infrastructure_sci instead.";
argocd = removed "argocd" "2025/12. Try argoproj-labs_argocd instead.";
oboukili_argocd = removed "oboukili_argocd" "2025/12. Try argoproj-labs_argocd instead.";
};
- # added 2025-10-12
- renamed-providers = lib.optionalAttrs config.allowAliases {
- onepassword =
- lib.warnOnInstantiate
- "terraform-providers.onepassword has been renamed to terraform-providers.1password_onepassword"
- actualProviders."1password_onepassword";
- thunder = lib.warnOnInstantiate "terraform-providers.thunder has been renamed to terraform-providers.a10networks_thunder" actualProviders.a10networks_thunder;
- netlify = lib.warnOnInstantiate "terraform-providers.netlify has been renamed to terraform-providers.aegirhealth_netlify" actualProviders.aegirhealth_netlify;
- aiven = lib.warnOnInstantiate "terraform-providers.aiven has been renamed to terraform-providers.aiven_aiven" actualProviders.aiven_aiven;
- akamai = lib.warnOnInstantiate "terraform-providers.akamai has been renamed to terraform-providers.akamai_akamai" actualProviders.akamai_akamai;
- alicloud = lib.warnOnInstantiate "terraform-providers.alicloud has been renamed to terraform-providers.aliyun_alicloud" actualProviders.aliyun_alicloud;
- minio = lib.warnOnInstantiate "terraform-providers.minio has been renamed to terraform-providers.aminueza_minio" actualProviders.aminueza_minio;
- auth0 = lib.warnOnInstantiate "terraform-providers.auth0 has been renamed to terraform-providers.auth0_auth0" actualProviders.auth0_auth0;
- aviatrix = lib.warnOnInstantiate "terraform-providers.aviatrix has been renamed to terraform-providers.aviatrixsystems_aviatrix" actualProviders.aviatrixsystems_aviatrix;
- dhall = lib.warnOnInstantiate "terraform-providers.dhall has been renamed to terraform-providers.awakesecurity_dhall" actualProviders.awakesecurity_dhall;
- baiducloud = lib.warnOnInstantiate "terraform-providers.baiducloud has been renamed to terraform-providers.baidubce_baiducloud" actualProviders.baidubce_baiducloud;
- brightbox = lib.warnOnInstantiate "terraform-providers.brightbox has been renamed to terraform-providers.brightbox_brightbox" actualProviders.brightbox_brightbox;
- buildkite = lib.warnOnInstantiate "terraform-providers.buildkite has been renamed to terraform-providers.buildkite_buildkite" actualProviders.buildkite_buildkite;
- pass = lib.warnOnInstantiate "terraform-providers.pass has been renamed to terraform-providers.camptocamp_pass" actualProviders.camptocamp_pass;
- sops = lib.warnOnInstantiate "terraform-providers.sops has been renamed to terraform-providers.carlpett_sops" actualProviders.carlpett_sops;
- checkly = lib.warnOnInstantiate "terraform-providers.checkly has been renamed to terraform-providers.checkly_checkly" actualProviders.checkly_checkly;
- aci = lib.warnOnInstantiate "terraform-providers.aci has been renamed to terraform-providers.ciscodevnet_aci" actualProviders.ciscodevnet_aci;
- ciscoasa = lib.warnOnInstantiate "terraform-providers.ciscoasa has been renamed to terraform-providers.ciscodevnet_ciscoasa" actualProviders.ciscodevnet_ciscoasa;
- age = lib.warnOnInstantiate "terraform-providers.age has been renamed to terraform-providers.clementblaise_age" actualProviders.clementblaise_age;
- cloudamqp = lib.warnOnInstantiate "terraform-providers.cloudamqp has been renamed to terraform-providers.cloudamqp_cloudamqp" actualProviders.cloudamqp_cloudamqp;
- cloudflare = lib.warnOnInstantiate "terraform-providers.cloudflare has been renamed to terraform-providers.cloudflare_cloudflare" actualProviders.cloudflare_cloudflare;
- cloudfoundry = lib.warnOnInstantiate "terraform-providers.cloudfoundry has been renamed to terraform-providers.cloudfoundry-community_cloudfoundry" actualProviders.cloudfoundry-community_cloudfoundry;
- utils = lib.warnOnInstantiate "terraform-providers.utils has been renamed to terraform-providers.cloudposse_utils" actualProviders.cloudposse_utils;
- cloudscale = lib.warnOnInstantiate "terraform-providers.cloudscale has been renamed to terraform-providers.cloudscale-ch_cloudscale" actualProviders.cloudscale-ch_cloudscale;
- constellix = lib.warnOnInstantiate "terraform-providers.constellix has been renamed to terraform-providers.constellix_constellix" actualProviders.constellix_constellix;
- porkbun = lib.warnOnInstantiate "terraform-providers.porkbun has been renamed to terraform-providers.cullenmcdermott_porkbun" actualProviders.cullenmcdermott_porkbun;
- postgresql = lib.warnOnInstantiate "terraform-providers.postgresql has been renamed to terraform-providers.cyrilgdn_postgresql" actualProviders.cyrilgdn_postgresql;
- rabbitmq = lib.warnOnInstantiate "terraform-providers.rabbitmq has been renamed to terraform-providers.cyrilgdn_rabbitmq" actualProviders.cyrilgdn_rabbitmq;
- datadog = lib.warnOnInstantiate "terraform-providers.datadog has been renamed to terraform-providers.datadog_datadog" actualProviders.datadog_datadog;
- nexus = lib.warnOnInstantiate "terraform-providers.nexus has been renamed to terraform-providers.datadrivers_nexus" actualProviders.datadrivers_nexus;
- deno = lib.warnOnInstantiate "terraform-providers.deno has been renamed to terraform-providers.denoland_deno" actualProviders.denoland_deno;
- hydra = lib.warnOnInstantiate "terraform-providers.hydra has been renamed to terraform-providers.determinatesystems_hydra" actualProviders.determinatesystems_hydra;
- digitalocean = lib.warnOnInstantiate "terraform-providers.digitalocean has been renamed to terraform-providers.digitalocean_digitalocean" actualProviders.digitalocean_digitalocean;
- libvirt = lib.warnOnInstantiate "terraform-providers.libvirt has been renamed to terraform-providers.dmacvicar_libvirt" actualProviders.dmacvicar_libvirt;
- dnsimple = lib.warnOnInstantiate "terraform-providers.dnsimple has been renamed to terraform-providers.dnsimple_dnsimple" actualProviders.dnsimple_dnsimple;
- dme = lib.warnOnInstantiate "terraform-providers.dme has been renamed to terraform-providers.dnsmadeeasy_dme" actualProviders.dnsmadeeasy_dme;
- doppler = lib.warnOnInstantiate "terraform-providers.doppler has been renamed to terraform-providers.dopplerhq_doppler" actualProviders.dopplerhq_doppler;
- bitbucket = lib.warnOnInstantiate "terraform-providers.bitbucket has been renamed to terraform-providers.drfaust92_bitbucket" actualProviders.drfaust92_bitbucket;
- equinix = lib.warnOnInstantiate "terraform-providers.equinix has been renamed to terraform-providers.equinix_equinix" actualProviders.equinix_equinix;
- exoscale = lib.warnOnInstantiate "terraform-providers.exoscale has been renamed to terraform-providers.exoscale_exoscale" actualProviders.exoscale_exoscale;
- bigip = lib.warnOnInstantiate "terraform-providers.bigip has been renamed to terraform-providers.f5networks_bigip" actualProviders.f5networks_bigip;
- fastly = lib.warnOnInstantiate "terraform-providers.fastly has been renamed to terraform-providers.fastly_fastly" actualProviders.fastly_fastly;
- flexibleengine = lib.warnOnInstantiate "terraform-providers.flexibleengine has been renamed to terraform-providers.flexibleenginecloud_flexibleengine" actualProviders.flexibleenginecloud_flexibleengine;
- fortios = lib.warnOnInstantiate "terraform-providers.fortios has been renamed to terraform-providers.fortinetdev_fortios" actualProviders.fortinetdev_fortios;
- kubectl = lib.warnOnInstantiate "terraform-providers.kubectl has been renamed to terraform-providers.gavinbunney_kubectl" actualProviders.gavinbunney_kubectl;
- gitlab = lib.warnOnInstantiate "terraform-providers.gitlab has been renamed to terraform-providers.gitlabhq_gitlab" actualProviders.gitlabhq_gitlab;
- gandi = lib.warnOnInstantiate "terraform-providers.gandi has been renamed to terraform-providers.go-gandi_gandi" actualProviders.go-gandi_gandi;
- gitea = lib.warnOnInstantiate "terraform-providers.gitea has been renamed to terraform-providers.go-gitea_gitea" actualProviders.go-gitea_gitea;
- harbor = lib.warnOnInstantiate "terraform-providers.harbor has been renamed to terraform-providers.goharbor_harbor" actualProviders.goharbor_harbor;
- grafana = lib.warnOnInstantiate "terraform-providers.grafana has been renamed to terraform-providers.grafana_grafana" actualProviders.grafana_grafana;
- gridscale = lib.warnOnInstantiate "terraform-providers.gridscale has been renamed to terraform-providers.gridscale_gridscale" actualProviders.gridscale_gridscale;
- archive = lib.warnOnInstantiate "terraform-providers.archive has been renamed to terraform-providers.hashicorp_archive" actualProviders.hashicorp_archive;
- aws = lib.warnOnInstantiate "terraform-providers.aws has been renamed to terraform-providers.hashicorp_aws" actualProviders.hashicorp_aws;
- awscc = lib.warnOnInstantiate "terraform-providers.awscc has been renamed to terraform-providers.hashicorp_awscc" actualProviders.hashicorp_awscc;
- azuread = lib.warnOnInstantiate "terraform-providers.azuread has been renamed to terraform-providers.hashicorp_azuread" actualProviders.hashicorp_azuread;
- azurerm = lib.warnOnInstantiate "terraform-providers.azurerm has been renamed to terraform-providers.hashicorp_azurerm" actualProviders.hashicorp_azurerm;
- cloudinit = lib.warnOnInstantiate "terraform-providers.cloudinit has been renamed to terraform-providers.hashicorp_cloudinit" actualProviders.hashicorp_cloudinit;
- consul = lib.warnOnInstantiate "terraform-providers.consul has been renamed to terraform-providers.hashicorp_consul" actualProviders.hashicorp_consul;
- dns = lib.warnOnInstantiate "terraform-providers.dns has been renamed to terraform-providers.hashicorp_dns" actualProviders.hashicorp_dns;
- external = lib.warnOnInstantiate "terraform-providers.external has been renamed to terraform-providers.hashicorp_external" actualProviders.hashicorp_external;
- google = lib.warnOnInstantiate "terraform-providers.google has been renamed to terraform-providers.hashicorp_google" actualProviders.hashicorp_google;
- google-beta = lib.warnOnInstantiate "terraform-providers.google-beta has been renamed to terraform-providers.hashicorp_google-beta" actualProviders.hashicorp_google-beta;
- helm = lib.warnOnInstantiate "terraform-providers.helm has been renamed to terraform-providers.hashicorp_helm" actualProviders.hashicorp_helm;
- http = lib.warnOnInstantiate "terraform-providers.http has been renamed to terraform-providers.hashicorp_http" actualProviders.hashicorp_http;
- kubernetes = lib.warnOnInstantiate "terraform-providers.kubernetes has been renamed to terraform-providers.hashicorp_kubernetes" actualProviders.hashicorp_kubernetes;
- local = lib.warnOnInstantiate "terraform-providers.local has been renamed to terraform-providers.hashicorp_local" actualProviders.hashicorp_local;
- nomad = lib.warnOnInstantiate "terraform-providers.nomad has been renamed to terraform-providers.hashicorp_nomad" actualProviders.hashicorp_nomad;
- null = lib.warnOnInstantiate "terraform-providers.null has been renamed to terraform-providers.hashicorp_null" actualProviders.hashicorp_null;
- random = lib.warnOnInstantiate "terraform-providers.random has been renamed to terraform-providers.hashicorp_random" actualProviders.hashicorp_random;
- tfe = lib.warnOnInstantiate "terraform-providers.tfe has been renamed to terraform-providers.hashicorp_tfe" actualProviders.hashicorp_tfe;
- time = lib.warnOnInstantiate "terraform-providers.time has been renamed to terraform-providers.hashicorp_time" actualProviders.hashicorp_time;
- tls = lib.warnOnInstantiate "terraform-providers.tls has been renamed to terraform-providers.hashicorp_tls" actualProviders.hashicorp_tls;
- vault = lib.warnOnInstantiate "terraform-providers.vault has been renamed to terraform-providers.hashicorp_vault" actualProviders.hashicorp_vault;
- vsphere = lib.warnOnInstantiate "terraform-providers.vsphere has been renamed to terraform-providers.hashicorp_vsphere" actualProviders.hashicorp_vsphere;
- heroku = lib.warnOnInstantiate "terraform-providers.heroku has been renamed to terraform-providers.heroku_heroku" actualProviders.heroku_heroku;
- hcloud = lib.warnOnInstantiate "terraform-providers.hcloud has been renamed to terraform-providers.hetznercloud_hcloud" actualProviders.hetznercloud_hcloud;
- huaweicloud = lib.warnOnInstantiate "terraform-providers.huaweicloud has been renamed to terraform-providers.huaweicloud_huaweicloud" actualProviders.huaweicloud_huaweicloud;
- ibm = lib.warnOnInstantiate "terraform-providers.ibm has been renamed to terraform-providers.ibm-cloud_ibm" actualProviders.ibm-cloud_ibm;
- icinga2 = lib.warnOnInstantiate "terraform-providers.icinga2 has been renamed to terraform-providers.icinga_icinga2" actualProviders.icinga_icinga2;
- infoblox = lib.warnOnInstantiate "terraform-providers.infoblox has been renamed to terraform-providers.infobloxopen_infoblox" actualProviders.infobloxopen_infoblox;
- github = lib.warnOnInstantiate "terraform-providers.github has been renamed to terraform-providers.integrations_github" actualProviders.integrations_github;
- artifactory = lib.warnOnInstantiate "terraform-providers.artifactory has been renamed to terraform-providers.jfrog_artifactory" actualProviders.jfrog_artifactory;
- project = lib.warnOnInstantiate "terraform-providers.project has been renamed to terraform-providers.jfrog_project" actualProviders.jfrog_project;
- sentry = lib.warnOnInstantiate "terraform-providers.sentry has been renamed to terraform-providers.jianyuan_sentry" actualProviders.jianyuan_sentry;
- openwrt = lib.warnOnInstantiate "terraform-providers.openwrt has been renamed to terraform-providers.joneshf_openwrt" actualProviders.joneshf_openwrt;
- triton = lib.warnOnInstantiate "terraform-providers.triton has been renamed to terraform-providers.joyent_triton" actualProviders.joyent_triton;
- keycloak = lib.warnOnInstantiate "terraform-providers.keycloak has been renamed to terraform-providers.keycloak_keycloak" actualProviders.keycloak_keycloak;
- neon = lib.warnOnInstantiate "terraform-providers.neon has been renamed to terraform-providers.kislerdm_neon" actualProviders.kislerdm_neon;
- docker = lib.warnOnInstantiate "terraform-providers.docker has been renamed to terraform-providers.kreuzwerker_docker" actualProviders.kreuzwerker_docker;
- launchdarkly = lib.warnOnInstantiate "terraform-providers.launchdarkly has been renamed to terraform-providers.launchdarkly_launchdarkly" actualProviders.launchdarkly_launchdarkly;
- linode = lib.warnOnInstantiate "terraform-providers.linode has been renamed to terraform-providers.linode_linode" actualProviders.linode_linode;
- htpasswd = lib.warnOnInstantiate "terraform-providers.htpasswd has been renamed to terraform-providers.loafoe_htpasswd" actualProviders.loafoe_htpasswd;
- ssh = lib.warnOnInstantiate "terraform-providers.ssh has been renamed to terraform-providers.loafoe_ssh" actualProviders.loafoe_ssh;
- incus = lib.warnOnInstantiate "terraform-providers.incus has been renamed to terraform-providers.lxc_incus" actualProviders.lxc_incus;
- dexidp = lib.warnOnInstantiate "terraform-providers.dexidp has been renamed to terraform-providers.marcofranssen_dexidp" actualProviders.marcofranssen_dexidp;
- bitwarden = lib.warnOnInstantiate "terraform-providers.bitwarden has been renamed to terraform-providers.maxlaverse_bitwarden" actualProviders.maxlaverse_bitwarden;
- migadu = lib.warnOnInstantiate "terraform-providers.migadu has been renamed to terraform-providers.metio_migadu" actualProviders.metio_migadu;
- kafka = lib.warnOnInstantiate "terraform-providers.kafka has been renamed to terraform-providers.mongey_kafka" actualProviders.mongey_kafka;
- kafka-connect = lib.warnOnInstantiate "terraform-providers.kafka-connect has been renamed to terraform-providers.mongey_kafka-connect" actualProviders.mongey_kafka-connect;
- mongodbatlas = lib.warnOnInstantiate "terraform-providers.mongodbatlas has been renamed to terraform-providers.mongodb_mongodbatlas" actualProviders.mongodb_mongodbatlas;
- namecheap = lib.warnOnInstantiate "terraform-providers.namecheap has been renamed to terraform-providers.namecheap_namecheap" actualProviders.namecheap_namecheap;
- jetstream = lib.warnOnInstantiate "terraform-providers.jetstream has been renamed to terraform-providers.nats-io_jetstream" actualProviders.nats-io_jetstream;
- ansible = lib.warnOnInstantiate "terraform-providers.ansible has been renamed to terraform-providers.nbering_ansible" actualProviders.nbering_ansible;
- newrelic = lib.warnOnInstantiate "terraform-providers.newrelic has been renamed to terraform-providers.newrelic_newrelic" actualProviders.newrelic_newrelic;
- ns1 = lib.warnOnInstantiate "terraform-providers.ns1 has been renamed to terraform-providers.ns1-terraform_ns1" actualProviders.ns1-terraform_ns1;
- linuxbox = lib.warnOnInstantiate "terraform-providers.linuxbox has been renamed to terraform-providers.numtide_linuxbox" actualProviders.numtide_linuxbox;
- secret = lib.warnOnInstantiate "terraform-providers.secret has been renamed to terraform-providers.numtide_secret" actualProviders.numtide_secret;
- nutanix = lib.warnOnInstantiate "terraform-providers.nutanix has been renamed to terraform-providers.nutanix_nutanix" actualProviders.nutanix_nutanix;
- okta = lib.warnOnInstantiate "terraform-providers.okta has been renamed to terraform-providers.okta_okta" actualProviders.okta_okta;
- oktaasa = lib.warnOnInstantiate "terraform-providers.oktaasa has been renamed to terraform-providers.oktadeveloper_oktaasa" actualProviders.oktadeveloper_oktaasa;
- opennebula = lib.warnOnInstantiate "terraform-providers.opennebula has been renamed to terraform-providers.opennebula_opennebula" actualProviders.opennebula_opennebula;
- openstack = lib.warnOnInstantiate "terraform-providers.openstack has been renamed to terraform-providers.terraform-provider-openstack_openstack" actualProviders.terraform-provider-openstack_openstack;
- opentelekomcloud = lib.warnOnInstantiate "terraform-providers.opentelekomcloud has been renamed to terraform-providers.opentelekomcloud_opentelekomcloud" actualProviders.opentelekomcloud_opentelekomcloud;
- opsgenie = lib.warnOnInstantiate "terraform-providers.opsgenie has been renamed to terraform-providers.opsgenie_opsgenie" actualProviders.opsgenie_opsgenie;
- oci = lib.warnOnInstantiate "terraform-providers.oci has been renamed to terraform-providers.oracle_oci" actualProviders.oracle_oci;
- ovh = lib.warnOnInstantiate "terraform-providers.ovh has been renamed to terraform-providers.ovh_ovh" actualProviders.ovh_ovh;
- slack = lib.warnOnInstantiate "terraform-providers.slack has been renamed to terraform-providers.pablovarela_slack" actualProviders.pablovarela_slack;
- pagerduty = lib.warnOnInstantiate "terraform-providers.pagerduty has been renamed to terraform-providers.pagerduty_pagerduty" actualProviders.pagerduty_pagerduty;
- powerdns = lib.warnOnInstantiate "terraform-providers.powerdns has been renamed to terraform-providers.pan-net_powerdns" actualProviders.pan-net_powerdns;
- elasticsearch = lib.warnOnInstantiate "terraform-providers.elasticsearch has been renamed to terraform-providers.phillbaker_elasticsearch" actualProviders.phillbaker_elasticsearch;
- ct = lib.warnOnInstantiate "terraform-providers.ct has been renamed to terraform-providers.poseidon_ct" actualProviders.poseidon_ct;
- matchbox = lib.warnOnInstantiate "terraform-providers.matchbox has been renamed to terraform-providers.poseidon_matchbox" actualProviders.poseidon_matchbox;
- rancher2 = lib.warnOnInstantiate "terraform-providers.rancher2 has been renamed to terraform-providers.rancher_rancher2" actualProviders.rancher_rancher2;
- rootly = lib.warnOnInstantiate "terraform-providers.rootly has been renamed to terraform-providers.rootlyhq_rootly" actualProviders.rootlyhq_rootly;
- rundeck = lib.warnOnInstantiate "terraform-providers.rundeck has been renamed to terraform-providers.rundeck_rundeck" actualProviders.rundeck_rundeck;
- sakuracloud = lib.warnOnInstantiate "terraform-providers.sakuracloud has been renamed to terraform-providers.sacloud_sakuracloud" actualProviders.sacloud_sakuracloud;
- btp = lib.warnOnInstantiate "terraform-providers.btp has been renamed to terraform-providers.sap_btp" actualProviders.sap_btp;
- scaleway = lib.warnOnInstantiate "terraform-providers.scaleway has been renamed to terraform-providers.scaleway_scaleway" actualProviders.scaleway_scaleway;
- shell = lib.warnOnInstantiate "terraform-providers.shell has been renamed to terraform-providers.scottwinkler_shell" actualProviders.scottwinkler_shell;
- selectel = lib.warnOnInstantiate "terraform-providers.selectel has been renamed to terraform-providers.selectel_selectel" actualProviders.selectel_selectel;
- talos = lib.warnOnInstantiate "terraform-providers.talos has been renamed to terraform-providers.siderolabs_talos" actualProviders.siderolabs_talos;
- skytap = lib.warnOnInstantiate "terraform-providers.skytap has been renamed to terraform-providers.skytap_skytap" actualProviders.skytap_skytap;
- snowflake = lib.warnOnInstantiate "terraform-providers.snowflake has been renamed to terraform-providers.snowflake-labs_snowflake" actualProviders.snowflake-labs_snowflake;
- spacelift = lib.warnOnInstantiate "terraform-providers.spacelift has been renamed to terraform-providers.spacelift-io_spacelift" actualProviders.spacelift-io_spacelift;
- signalfx = lib.warnOnInstantiate "terraform-providers.signalfx has been renamed to terraform-providers.splunk-terraform_signalfx" actualProviders.splunk-terraform_signalfx;
- spotinst = lib.warnOnInstantiate "terraform-providers.spotinst has been renamed to terraform-providers.spotinst_spotinst" actualProviders.spotinst_spotinst;
- statuscake = lib.warnOnInstantiate "terraform-providers.statuscake has been renamed to terraform-providers.statuscakedev_statuscake" actualProviders.statuscakedev_statuscake;
- sumologic = lib.warnOnInstantiate "terraform-providers.sumologic has been renamed to terraform-providers.sumologic_sumologic" actualProviders.sumologic_sumologic;
- sysdig = lib.warnOnInstantiate "terraform-providers.sysdig has been renamed to terraform-providers.sysdiglabs_sysdig" actualProviders.sysdiglabs_sysdig;
- tailscale = lib.warnOnInstantiate "terraform-providers.tailscale has been renamed to terraform-providers.tailscale_tailscale" actualProviders.tailscale_tailscale;
- proxmox = lib.warnOnInstantiate "terraform-providers.proxmox has been renamed to terraform-providers.telmate_proxmox" actualProviders.telmate_proxmox;
- temporalcloud = lib.warnOnInstantiate "terraform-providers.temporalcloud has been renamed to terraform-providers.temporalio_temporalcloud" actualProviders.temporalio_temporalcloud;
- tencentcloud = lib.warnOnInstantiate "terraform-providers.tencentcloud has been renamed to terraform-providers.tencentcloudstack_tencentcloud" actualProviders.tencentcloudstack_tencentcloud;
- remote = lib.warnOnInstantiate "terraform-providers.remote has been renamed to terraform-providers.tenstad_remote" actualProviders.tenstad_remote;
- virtualbox = lib.warnOnInstantiate "terraform-providers.virtualbox has been renamed to terraform-providers.terra-farm_virtualbox" actualProviders.terra-farm_virtualbox;
- lxd = lib.warnOnInstantiate "terraform-providers.lxd has been renamed to terraform-providers.terraform-lxd_lxd" actualProviders.terraform-lxd_lxd;
- routeros = lib.warnOnInstantiate "terraform-providers.routeros has been renamed to terraform-providers.terraform-routeros_routeros" actualProviders.terraform-routeros_routeros;
- hetznerdns = lib.warnOnInstantiate "terraform-providers.hetznerdns has been renamed to terraform-providers.timohirt_hetznerdns" actualProviders.timohirt_hetznerdns;
- pocketid = lib.warnOnInstantiate "terraform-providers.pocketid has been renamed to terraform-providers.trozz_pocketid" actualProviders.trozz_pocketid;
- turbot = lib.warnOnInstantiate "terraform-providers.turbot has been renamed to terraform-providers.turbot_turbot" actualProviders.turbot_turbot;
- unifi = lib.warnOnInstantiate "terraform-providers.unifi has been renamed to terraform-providers.ubiquiti-community_unifi" actualProviders.ubiquiti-community_unifi;
- ucloud = lib.warnOnInstantiate "terraform-providers.ucloud has been renamed to terraform-providers.ucloud_ucloud" actualProviders.ucloud_ucloud;
- acme = lib.warnOnInstantiate "terraform-providers.acme has been renamed to terraform-providers.vancluever_acme" actualProviders.vancluever_acme;
- venafi = lib.warnOnInstantiate "terraform-providers.venafi has been renamed to terraform-providers.venafi_venafi" actualProviders.venafi_venafi;
- vinyldns = lib.warnOnInstantiate "terraform-providers.vinyldns has been renamed to terraform-providers.vinyldns_vinyldns" actualProviders.vinyldns_vinyldns;
- avi = lib.warnOnInstantiate "terraform-providers.avi has been renamed to terraform-providers.vmware_avi" actualProviders.vmware_avi;
- vcd = lib.warnOnInstantiate "terraform-providers.vcd has been renamed to terraform-providers.vmware_vcd" actualProviders.vmware_vcd;
- wavefront = lib.warnOnInstantiate "terraform-providers.wavefront has been renamed to terraform-providers.vmware_wavefront" actualProviders.vmware_wavefront;
- vpsadmin = lib.warnOnInstantiate "terraform-providers.vpsadmin has been renamed to terraform-providers.vpsfreecz_vpsadmin" actualProviders.vpsfreecz_vpsadmin;
- vultr = lib.warnOnInstantiate "terraform-providers.vultr has been renamed to terraform-providers.vultr_vultr" actualProviders.vultr_vultr;
- mailgun = lib.warnOnInstantiate "terraform-providers.mailgun has been renamed to terraform-providers.wgebis_mailgun" actualProviders.wgebis_mailgun;
- yandex = lib.warnOnInstantiate "terraform-providers.yandex has been renamed to terraform-providers.yandex-cloud_yandex" actualProviders.yandex-cloud_yandex;
- };
-
# excluding aliases, used by terraform-full
actualProviders = automated-providers // special-providers;
in
-actualProviders // removed-providers // renamed-providers // { inherit actualProviders mkProvider; }
+actualProviders // removed-providers // { inherit actualProviders mkProvider; }
diff --git a/pkgs/applications/networking/cluster/terraform-providers/providers.json b/pkgs/applications/networking/cluster/terraform-providers/providers.json
index bfddf2080ff8..fbf9abf0d639 100644
--- a/pkgs/applications/networking/cluster/terraform-providers/providers.json
+++ b/pkgs/applications/networking/cluster/terraform-providers/providers.json
@@ -27,40 +27,40 @@
"vendorHash": null
},
"aiven_aiven": {
- "hash": "sha256-Yevs7mUu5Mr9JBbPE8CIKufYCLKealbBXrNL+mRH2Yw=",
+ "hash": "sha256-rXoDdoBK4yS/suC6lEnK+dWxcILRG+XcMNXVyVmeQYw=",
"homepage": "https://registry.terraform.io/providers/aiven/aiven",
"owner": "aiven",
"repo": "terraform-provider-aiven",
- "rev": "v4.57.0",
+ "rev": "v4.60.0",
"spdx": "MIT",
- "vendorHash": "sha256-ndIxcO14+NAKmRs9wVEE/HhBx9Wj4AwiMv+nus6BDK4="
+ "vendorHash": "sha256-4S5uyvSjtEOO1hK5MhuAmjsPBJ6qC1KN3/mrtRHU+P4="
},
"akamai_akamai": {
- "hash": "sha256-M6Btq8wX1lsEs1HUaaTwGspnvS2IyE0L2ITe+ogDTlc=",
+ "hash": "sha256-AYvC8s8OKwlwF8eDoCsuOhOanCwbn/5u/vGumee6FNg=",
"homepage": "https://registry.terraform.io/providers/akamai/akamai",
"owner": "akamai",
"repo": "terraform-provider-akamai",
- "rev": "v10.2.0",
+ "rev": "v10.3.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-5IfYhOEhXRpdL7G3Op9a0Ep14el2gwcVmRMkGB7oWH4="
+ "vendorHash": "sha256-031RZo1EqWrt79NvdrrZ9FW/E+mfwkGmr7wyMYX4SHg="
},
"aliyun_alicloud": {
- "hash": "sha256-dIMlk/ZKIJjrkAk0EGCz3UTZvjbEltWq879331EEMD0=",
+ "hash": "sha256-G52l+5WlcxSNflx0ioD0jEKI1GBWe5D4qW8VH8k6uTA=",
"homepage": "https://registry.terraform.io/providers/aliyun/alicloud",
"owner": "aliyun",
"repo": "terraform-provider-alicloud",
- "rev": "v1.281.0",
+ "rev": "v1.285.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-lBD9ifRpUwg45V7zZG3grHvndG0V42oiX68zgcM7t74="
+ "vendorHash": "sha256-sZeXHTrMUUPllPzvpbFjwA5FjFJXnO1k5h9B5i8U+vs="
},
"aminueza_minio": {
- "hash": "sha256-TLwOp7dSMjwOjlxEzYbFgw/S+Zkv+tCdknSjonmsRJo=",
+ "hash": "sha256-lSjpFr0qBhCvwE1+DgaGPQe9gsgVNPh+go801BhedfY=",
"homepage": "https://registry.terraform.io/providers/aminueza/minio",
"owner": "aminueza",
"repo": "terraform-provider-minio",
- "rev": "v3.38.0",
+ "rev": "v3.38.5",
"spdx": "AGPL-3.0",
- "vendorHash": "sha256-BShrfr4EUvcpn0cLaohm1r5XqER4ba7bokHKuHxcW+g="
+ "vendorHash": "sha256-gSGsjK6JOBN5NdV7tpTXU7UMze9t7UHMDe/W7suFNU0="
},
"argoproj-labs_argocd": {
"hash": "sha256-c6+WY4oXL8evvPk/RzVrwtgq4XLB/LzAH5tpjErbE60=",
@@ -73,13 +73,13 @@
"vendorHash": "sha256-FHBpTYSmVivoqz+Eaa/r5y1f/saIx4l6mjOtZhxZVRw="
},
"auth0_auth0": {
- "hash": "sha256-v0EPS8sVHZRDkc8zJtVGL6pDFbHhxyW3D+iLYe0kSVI=",
+ "hash": "sha256-c/pgoD8aNcYQUjrPz4SobpJ+C8d4me5K6HKsAZPYdTg=",
"homepage": "https://registry.terraform.io/providers/auth0/auth0",
"owner": "auth0",
"repo": "terraform-provider-auth0",
- "rev": "v1.48.0",
+ "rev": "v1.53.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-xf2c6wjpBxEmWm2t3/fFvekGfi2XbruV/kWeBLcTN4g="
+ "vendorHash": "sha256-Lv01jBbXTQOFQ4ljhqpx/n2fvvMNfGUHXfYDMlLDkdM="
},
"aviatrixsystems_aviatrix": {
"hash": "sha256-46djOfAj/5kfeoKLQHbeKefzdGbmlBATR+uN/IaAn8I=",
@@ -101,40 +101,40 @@
"vendorHash": "sha256-quoFrJbB1vjz+MdV+jnr7FPACHuUe5Gx9POLubD2IaM="
},
"baidubce_baiducloud": {
- "hash": "sha256-+doYnLRuseR5YtqMJeoxJtnb0UGBx+UgZ7S1sOLiF68=",
+ "hash": "sha256-vSEPf0r7R5anuaTsAJFIx0GPTtrSKbRqqZoQA67Q2C0=",
"homepage": "https://registry.terraform.io/providers/baidubce/baiducloud",
"owner": "baidubce",
"repo": "terraform-provider-baiducloud",
- "rev": "v1.23.2",
+ "rev": "v1.23.5",
"spdx": "MPL-2.0",
"vendorHash": null
},
"bpg_proxmox": {
- "hash": "sha256-10cdMZSGJuhUx432/2NazA8T88zclcnbolcU31wfIEM=",
+ "hash": "sha256-lZQTbs5hPGswNiF5lJ+95y30i0TQAH3v5W4bVilp+CE=",
"homepage": "https://registry.terraform.io/providers/bpg/proxmox",
"owner": "bpg",
"repo": "terraform-provider-proxmox",
- "rev": "v0.109.0",
+ "rev": "v0.111.1",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-Tx5DjRLZJXm0GjKRaogra7m55Opeu9LVvT25UW5q4D0="
+ "vendorHash": "sha256-kvHI8cd/rl9kVKKzSwjrC0+Qikz3w2P9jgLvYa+T2DE="
},
"brightbox_brightbox": {
- "hash": "sha256-pwFbCP+qDL/4IUfbPRCkddkbsEEeAu7Wp12/mDL0ABA=",
+ "hash": "sha256-bvwdtiwzXElhsXLmftXZQ567ExcC0E0L/5OeqIdp1SQ=",
"homepage": "https://registry.terraform.io/providers/brightbox/brightbox",
"owner": "brightbox",
"repo": "terraform-provider-brightbox",
- "rev": "v3.4.3",
+ "rev": "v3.4.4",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-/dOiXO2aPkuZaFiwv/6AXJdIADgx8T7eOwvJfBBoqg8="
+ "vendorHash": "sha256-TLNHhSyMw0rKFtd9EChg7zSGoxe57rh36nAPqu1j8w8="
},
"buildkite_buildkite": {
- "hash": "sha256-MoucQgeikKMh4P8nRWIJ5SkLFGeVfDutsSBUSowz6VM=",
+ "hash": "sha256-egeZCTQFyhKG0giyjNK9C/W+OGMOGv2l+65Vg3iTi2A=",
"homepage": "https://registry.terraform.io/providers/buildkite/buildkite",
"owner": "buildkite",
"repo": "terraform-provider-buildkite",
- "rev": "v1.34.0",
+ "rev": "v1.35.0",
"spdx": "MIT",
- "vendorHash": "sha256-uYyj6GSV5bWEfRTOODMuReEHe9wnF4cVoHM9rBMpgmM="
+ "vendorHash": "sha256-oYwtPTXNCkTizQWix2GYpb23mFvTmIzbcY3UTfB2Leo="
},
"camptocamp_pass": {
"hash": "sha256-GQ2g7VyK+eeBqW3LMR4U0gMYsvQnG3y+KEKKkvnmfsk=",
@@ -155,20 +155,20 @@
"vendorHash": "sha256-SO3CX7pZ+q7ytz/55cxTPlW7ByY1zKhxkQxMiqAvm8o="
},
"checkly_checkly": {
- "hash": "sha256-9kcZXbrfl8ovrg1w3bWdta/ABnLtVIfseRptZn5NrgI=",
+ "hash": "sha256-or9qjJdA8sDmPnETyedWtsAWEsF9hJdDmPpX+qncN7E=",
"homepage": "https://registry.terraform.io/providers/checkly/checkly",
"owner": "checkly",
"repo": "terraform-provider-checkly",
- "rev": "v1.25.0",
+ "rev": "v1.26.0",
"spdx": null,
- "vendorHash": "sha256-7XgTkzYBfkpF8Dd4YsgpB+YIfkANsg/60b3AyO8Y8FA="
+ "vendorHash": "sha256-nB77EpptqXhF+7/85h37CRQUk/iyq1ffSc2v2kQwFAQ="
},
"ciscodevnet_aci": {
- "hash": "sha256-Z3qat3S7dv5kGpc82RxAwlgp3hfscFbkokVsgGnBRHY=",
+ "hash": "sha256-8QnmISiZGRbW60mN9I6UYWDo6f2HUIFersVs/pDUD3o=",
"homepage": "https://registry.terraform.io/providers/CiscoDevNet/aci",
"owner": "CiscoDevNet",
"repo": "terraform-provider-aci",
- "rev": "v2.19.0",
+ "rev": "v2.20.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -200,22 +200,22 @@
"vendorHash": "sha256-b27UcoNuaX3PxNlJLdU9njCl5JymBQhxD6rq8yT3gi4="
},
"cloudamqp_cloudamqp": {
- "hash": "sha256-LAQ5MVZe4OSIJb7X6gdx1lPmgAEKZIm/7lL/93NTP6I=",
+ "hash": "sha256-n78nZ01ley9ueYBZ7+bi0BLJ/RIc66HHjcmhFwDem3E=",
"homepage": "https://registry.terraform.io/providers/cloudamqp/cloudamqp",
"owner": "cloudamqp",
"repo": "terraform-provider-cloudamqp",
- "rev": "v1.45.3",
+ "rev": "v1.46.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-59bhibkok4w7dLTf96jZGk2di6TpR6IAqp0i3xmtlyI="
+ "vendorHash": "sha256-rCWeetM6nhNb1I1PmB66E5K1ku9ODRqN87MU9y6W/dc="
},
"cloudflare_cloudflare": {
- "hash": "sha256-1qgPmsk6lSTuESBy/kSrm2f/BnvTcrKqj+IphsKfqEw=",
+ "hash": "sha256-qy/bW3CnsSXoiCLPW+LVuBb7OQLhxIpCDNTyAdjU5rM=",
"homepage": "https://registry.terraform.io/providers/cloudflare/cloudflare",
"owner": "cloudflare",
"repo": "terraform-provider-cloudflare",
- "rev": "v5.19.1",
+ "rev": "v5.22.0",
"spdx": "Apache-2.0",
- "vendorHash": "sha256-Gkb493fesB/jOdvnQrwt4MrNKO+YlR3+9Mu5TiaG084="
+ "vendorHash": "sha256-IwklxMtQ6pOO/066SKx298ANoh0i/DiGtgqamenMi+s="
},
"cloudfoundry-community_cloudfoundry": {
"hash": "sha256-1nYncJLVU/f9WD6Quh9IieIXgixPzbPk4zbtI1zmf9g=",
@@ -265,13 +265,13 @@
"vendorHash": "sha256-vT1n4FN0s9rQFj4HuXPm6lvNdzWZMyrzeWAanHOQqCg="
},
"cyrilgdn_postgresql": {
- "hash": "sha256-q4duDY9//BK5Jkg6stn0Ig4DJfzkc0gAkUua18XPgSM=",
+ "hash": "sha256-Z0hgD+tRi5tf+1k/KsktKNWGAgqeJNGzmUFGKNMUVJs=",
"homepage": "https://registry.terraform.io/providers/cyrilgdn/postgresql",
"owner": "cyrilgdn",
"repo": "terraform-provider-postgresql",
- "rev": "v1.26.0",
+ "rev": "v1.27.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-wUd5cFXX/oc96WFyNKgQxw8kvYDiqwpDM84wbNml7LA="
+ "vendorHash": "sha256-Gcrdn6bKVS0Y7dNCo/cg+GpDE7b9NMP/au73jgY4aU0="
},
"cyrilgdn_rabbitmq": {
"hash": "sha256-313I7E3mMiZfa7i5lZGIZolPMcGuSqhrTWVt3MVpEGA=",
@@ -283,13 +283,13 @@
"vendorHash": "sha256-3o6YRDrq4rQhNAFyqiGJrAoxuAykWw85OExRGSE3kGI="
},
"datadog_datadog": {
- "hash": "sha256-HGRv2leNSZleAmlsoTgbEng1W02XUAOaw5nFz6AeckI=",
+ "hash": "sha256-PmzUO8mCYQRYWI0MxFqVua+laKybLAFgeW9+9HZ/7A8=",
"homepage": "https://registry.terraform.io/providers/DataDog/datadog",
"owner": "DataDog",
"repo": "terraform-provider-datadog",
- "rev": "v4.12.1",
+ "rev": "v4.15.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-VBLDf6wkRT2k5ExmpQ1aDKf/BGqossVEQpGmeHsgrcQ="
+ "vendorHash": "sha256-G3lkLzLo31XGDyTgprHd7LbbOaAGRvq9LTIth2vnH00="
},
"datadrivers_nexus": {
"hash": "sha256-gwExaFhOoJFrAhH91oZEp1AFvI7kgWekp655zd4tyd8=",
@@ -319,11 +319,11 @@
"vendorHash": null
},
"digitalocean_digitalocean": {
- "hash": "sha256-gvLdDUFg8WoBg8+351CCK84LhLJlsV6Nqm9kbxlQQ50=",
+ "hash": "sha256-r+Bi8F603JE9K4hZDFwuhYtfg3FKYNPP1A7lpvvrZQg=",
"homepage": "https://registry.terraform.io/providers/digitalocean/digitalocean",
"owner": "digitalocean",
"repo": "terraform-provider-digitalocean",
- "rev": "v2.89.0",
+ "rev": "v2.95.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -355,31 +355,31 @@
"vendorHash": null
},
"dopplerhq_doppler": {
- "hash": "sha256-vYLNRSk8U9Ez5+LrC9cr6Ux32p7n93WOJaM4lY7ghE0=",
+ "hash": "sha256-SS2S4JGG1Xu0p4k6lVlTr173Xanwc6hZ0A3osEWGdEg=",
"homepage": "https://registry.terraform.io/providers/DopplerHQ/doppler",
"owner": "DopplerHQ",
"repo": "terraform-provider-doppler",
- "rev": "v1.21.3",
+ "rev": "v1.21.4",
"spdx": "Apache-2.0",
"vendorHash": "sha256-B8mYLd4VdADWoQLWiCM85VQrBfDdlYQ0wkCp9eUBQ4U="
},
"drfaust92_bitbucket": {
- "hash": "sha256-TPRHLR1wqX2uxV51iSk7IveqNQ1lLEy51G0fnfAM0No=",
+ "hash": "sha256-m5Ya99ulMesUwl54sbHuvOYumbPcAhWMESVGbXIOJpE=",
"homepage": "https://registry.terraform.io/providers/DrFaust92/bitbucket",
"owner": "DrFaust92",
"repo": "terraform-provider-bitbucket",
- "rev": "v2.51.0",
+ "rev": "v2.52.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-RtS88NqkO1nG/8znM0sQqsAIfDc+sOMy8N4T4hmvaVA="
+ "vendorHash": "sha256-uokHd4hDvWl6mrBa062F/uZmYPnW3TIZZKZwKBVq+Lo="
},
"e-breuninger_netbox": {
- "hash": "sha256-04k9lKwoczptgoMW5C8EitP/u/Joi4/OCd3+I+nr5pc=",
+ "hash": "sha256-qyzw5a35twJ5gsEe0ANv6a9MMD0UyV8hYbYt/2bBJ/k=",
"homepage": "https://registry.terraform.io/providers/e-breuninger/netbox",
"owner": "e-breuninger",
"repo": "terraform-provider-netbox",
- "rev": "v5.4.0",
+ "rev": "v5.7.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-RWoe4QQE55lW+B20uDJt0qX3Om/oc3em3LXhN+cBoUY="
+ "vendorHash": "sha256-y9GRTuoh1X6GfGkGZbPpO500y8DoJS1dnwZL3BCTUcY="
},
"equinix_equinix": {
"hash": "sha256-Tn8CnLx2ibkj7qlzpYCX7Cm+yoTcZujVELMJSbG+/ec=",
@@ -391,31 +391,31 @@
"vendorHash": "sha256-WFlKj1IO9ylXn5frdnLcctQawjUXBTqcoMhQUQTU06A="
},
"exoscale_exoscale": {
- "hash": "sha256-eK9XWu1Hh/sFWkUO5r0HIcw8tIhhP1nzkI41B0DpMZg=",
+ "hash": "sha256-QIYIqJI/xznbkqR8E8R2LwF15M6ZdEntQ8JtdIwZypM=",
"homepage": "https://registry.terraform.io/providers/exoscale/exoscale",
"owner": "exoscale",
"repo": "terraform-provider-exoscale",
- "rev": "v0.69.2",
+ "rev": "v0.70.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
"f5networks_bigip": {
- "hash": "sha256-tGERBmsYeoUPlTBknUOARQCs38cnAinJzFaRQDE2hHM=",
+ "hash": "sha256-CYTgJfT2RTS/affp4yZGgoUHPv5JeHfRTJ0JND7pqW4=",
"homepage": "https://registry.terraform.io/providers/F5Networks/bigip",
"owner": "F5Networks",
"repo": "terraform-provider-bigip",
- "rev": "v1.27.0",
+ "rev": "v1.28.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
"fastly_fastly": {
- "hash": "sha256-S6VIwqwTPr276TTqgEFTxhE5c97lCd8/5dJnDGori4s=",
+ "hash": "sha256-I1a2wus61as24DMBZEZsl2C6YJ5B0CaIST/FM+8KMLc=",
"homepage": "https://registry.terraform.io/providers/fastly/fastly",
"owner": "fastly",
"repo": "terraform-provider-fastly",
- "rev": "v9.2.1",
+ "rev": "v9.3.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-8QF9gOuvuZwAoFWePjti4h6VzmA+TGiFaC/ShuEAZqA="
+ "vendorHash": "sha256-TDU8T91em1+Y+0LN6FQSGEKJ4T9dIUxyuOTvx6HBYjg="
},
"flexibleenginecloud_flexibleengine": {
"hash": "sha256-yEZ9JiUSqFFbfqzOOD59ZBv4yFCeUBBKlp6aiUqDqiM=",
@@ -427,13 +427,13 @@
"vendorHash": "sha256-ZbU2z7qUHPR7vDSflesSjgK7x3LYXVe/gnVsy19q6Bs="
},
"fortinetdev_fortios": {
- "hash": "sha256-w7LxnOEAoeJKyicI8Bfd2yH+3oTz3ZVBnskbSEgZBO4=",
+ "hash": "sha256-etGi9KDbmET8Eh4DPJkNA/HbjR+1VUBADlf3MKWbqkc=",
"homepage": "https://registry.terraform.io/providers/fortinetdev/fortios",
"owner": "fortinetdev",
"repo": "terraform-provider-fortios",
- "rev": "1.24.1",
+ "rev": "1.25.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-V+D/D+i1xbPp9IAfrAds2rNv5t/aXQxPwH9vY09DsMo="
+ "vendorHash": "sha256-ZU05thGO6uUsAxEi/aMQFxlQZ57okGfDEHx/+wNe+x8="
},
"gavinbunney_kubectl": {
"hash": "sha256-UQ/xvhs7II+EGH5bKdrVC47hp5dhLqQZeqSBz06ho1s=",
@@ -445,13 +445,13 @@
"vendorHash": "sha256-FcxAh8EOvnT8r1GHu0Oj2C5Jgbr2WPwD7/vY4/qIvTA="
},
"gitlabhq_gitlab": {
- "hash": "sha256-pMwgByUQPPKM6ZQP/DkbJERXPqfw6pU/zMnJH2YXhCE=",
+ "hash": "sha256-BMOFi/g0W6xo/Kfqw8oqsMeeU3aXyWAKSgF9lIS4AbA=",
"homepage": "https://registry.terraform.io/providers/gitlabhq/gitlab",
"owner": "gitlabhq",
"repo": "terraform-provider-gitlab",
- "rev": "v19.0.0",
+ "rev": "v19.1.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-YdNHXnJXUIYrq9BJ+58+0LEtgKNCF481pAsggBRjISA="
+ "vendorHash": "sha256-9aoJGVTC9t76auYy8K3QSWGzSAq9aTxemKNc3aCLjRY="
},
"go-gandi_gandi": {
"hash": "sha256-fsCtmwyxkXfOtiZG27VEb010jglK35yr4EynnUWlFog=",
@@ -472,22 +472,22 @@
"vendorHash": "sha256-/8h2bmesnFz3tav3+iDelZSjp1Z9lreexwcw0WdYekA="
},
"goharbor_harbor": {
- "hash": "sha256-2mi1QlWPAPGVr/Q0xOQjI8R8baeyJotjjoKZyQYNJg0=",
+ "hash": "sha256-P7xfHqXZAdXIQPzfWh+PU/gx1XgGP+q/YT28PSErZ+I=",
"homepage": "https://registry.terraform.io/providers/goharbor/harbor",
"owner": "goharbor",
"repo": "terraform-provider-harbor",
- "rev": "v3.11.6",
+ "rev": "v3.12.1",
"spdx": "MIT",
- "vendorHash": "sha256-874QpqIFFhzIGJZ8nKGcUe9qEpR9jQkx4nl75Cpqpww="
+ "vendorHash": "sha256-N0AYv7XGmo7D1gcDGsmO9JoBGRiJWj10OZptWgO7NPs="
},
"grafana_grafana": {
- "hash": "sha256-STYK0M5eq5hECKJUrk2Q4qhOrPt+eiyIGi0boukSHBM=",
+ "hash": "sha256-ZZpk0I9MIiGpS354rER+HZNsB5S0U+fQaaCu5Lu5BL4=",
"homepage": "https://registry.terraform.io/providers/grafana/grafana",
"owner": "grafana",
"repo": "terraform-provider-grafana",
- "rev": "v4.36.2",
+ "rev": "v4.41.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-VEAtUCVZ3nJ1jfDYkkek+VQ1LjNQgRstRNtsM05ebZo="
+ "vendorHash": "sha256-AyVCuqbVPoEMgcDmJsyJDstYFkukoDq7iIkfbvlAiE0="
},
"gridscale_gridscale": {
"hash": "sha256-FAKvQ/MEod5Ck0PG4ffQ+gQp6zZ0JDRXPOrOiDpWMls=",
@@ -508,38 +508,38 @@
"vendorHash": "sha256-ikBqIxD5aTOcwNHCMN6EaOwSHCAP5n/SULuqQXPLpOc="
},
"hashicorp_aws": {
- "hash": "sha256-073kfB/vwTtlbjO3I4s+QLPQT127Hvab8jc7/NFvcmk=",
+ "hash": "sha256-ZeFC9ebkt7SWFOCpt6zD60wOTRB8tiV6SQYr/O38FRw=",
"homepage": "https://registry.terraform.io/providers/hashicorp/aws",
"owner": "hashicorp",
"repo": "terraform-provider-aws",
- "rev": "v6.49.0",
+ "rev": "v6.55.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-DyYT8SK5/IbkXWvzRTF6TjTi4aIpokLPOz5H/O05YU8="
+ "vendorHash": "sha256-/6esBCIsNXUmx38NXUk/d3Td4uSgwZXvkETQhaERwLQ="
},
"hashicorp_awscc": {
- "hash": "sha256-/4NhHZs/8LwrL+TXoOGyszvHZcKps5tDu7uewKeNmb4=",
+ "hash": "sha256-SziDO4K6qv62zolBKdrhXIyaEOMM5hJ0h6ros1wC2l0=",
"homepage": "https://registry.terraform.io/providers/hashicorp/awscc",
"owner": "hashicorp",
"repo": "terraform-provider-awscc",
- "rev": "v1.88.0",
+ "rev": "v1.93.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-vTJI/71O8u6DqAF3E7pde1Z1qsoyTTJMNen3AvRomls="
+ "vendorHash": "sha256-dGxUV7gK4Af4O6FnZ2Pm6OKX0/xVU9+8nfUd0R/ot+Y="
},
"hashicorp_azuread": {
- "hash": "sha256-BkQwLkGu8Xmb4laoXOLDbSPyya5v8HBBNIya5hUBlV8=",
+ "hash": "sha256-mEYEZIztDjyqWSJFoJPXtV0E9YikumtwGVtZA4Jfw3U=",
"homepage": "https://registry.terraform.io/providers/hashicorp/azuread",
"owner": "hashicorp",
"repo": "terraform-provider-azuread",
- "rev": "v3.8.0",
+ "rev": "v3.9.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
"hashicorp_azurerm": {
- "hash": "sha256-NJ3g5w9bkY7tM/f67HOEiq6Uz99CHaJBKaW+mLHrxFM=",
+ "hash": "sha256-XJmSVCX6rigPD4oi0S4qUyvgvR5SkCHZV2rMAqsmIIo=",
"homepage": "https://registry.terraform.io/providers/hashicorp/azurerm",
"owner": "hashicorp",
"repo": "terraform-provider-azurerm",
- "rev": "v4.76.0",
+ "rev": "v4.79.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -580,22 +580,22 @@
"vendorHash": "sha256-sPQR+LDZRMXygLUd9xj6/bI+8DhAPKbkytlTzmrEOBU="
},
"hashicorp_google": {
- "hash": "sha256-GTcMwL5lZ81KDtohog4cCvy9zxXU/jh5k+aLosZZfRM=",
+ "hash": "sha256-QgGEF8L4O6ON1VhEUFrLwc2WNUSt8qIjn5DWVOQAxB0=",
"homepage": "https://registry.terraform.io/providers/hashicorp/google",
"owner": "hashicorp",
"repo": "terraform-provider-google",
- "rev": "v7.35.0",
+ "rev": "v7.40.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-R3Bd+n/ySx4FyDQAP72P0hIjTSQjzNJE2QqUgRV+eQE="
+ "vendorHash": "sha256-moP2fqZnj8J6IFAhb0n6pikVYVg2Is22xd/xuuJ+zIQ="
},
"hashicorp_google-beta": {
- "hash": "sha256-WsZY4O5kUoOkDcP2iKmkLo85XaBM2oQxaB/7ibJMDwA=",
+ "hash": "sha256-wf+pFYuDMqlFYvaTKTpgaeSSBoLgQlUAarobUAotLMo=",
"homepage": "https://registry.terraform.io/providers/hashicorp/google-beta",
"owner": "hashicorp",
"repo": "terraform-provider-google-beta",
- "rev": "v7.35.0",
+ "rev": "v7.40.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-CjrVDZpRlnPA1MnWEZdFyO3YzgaHqTsiw+kKOW+//2g="
+ "vendorHash": "sha256-7f0HZQXVsIq7m8CUApTnHIroOjKwT1GaP+GjCf4C6n0="
},
"hashicorp_helm": {
"hash": "sha256-Dw6khnp0pronRKbBv2gx8ygtVvRV9uQIHCXj2BblZ6k=",
@@ -616,13 +616,13 @@
"vendorHash": "sha256-hh0tOG9HY0cWTda5vjpGwCGntD7I/wCJf6B92EMKRrQ="
},
"hashicorp_kubernetes": {
- "hash": "sha256-P0V0bUkRDwo1EK9D5VE/F7BIz0uov3XsRr5tPbevAI8=",
+ "hash": "sha256-B/BPhNlQytohgRWdO4oA1FcB8zneVieXlOqYzr+HJX4=",
"homepage": "https://registry.terraform.io/providers/hashicorp/kubernetes",
"owner": "hashicorp",
"repo": "terraform-provider-kubernetes",
- "rev": "v3.2.0",
+ "rev": "v3.2.1",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-TUs0DTfbNYOwKdUTJmiB1/ja97r+GsVH+k5VMp/wKrI="
+ "vendorHash": "sha256-GyuSdDpsOqd1ntwAm09AKCoxeFOLhXo0jPTTxYZC+vg="
},
"hashicorp_local": {
"hash": "sha256-qntV0gfxEVV24gqiVOvUai+pai4vvU+KtLmLBqOBQbY=",
@@ -661,13 +661,13 @@
"vendorHash": "sha256-CwTlb0QTq0lpZK90IL6mBLoarFYFLsjiLYauGEaR1Rk="
},
"hashicorp_tfe": {
- "hash": "sha256-GRrtwrShJj+d2h6CpxjP+QmRKQLTWoNt5889ek9rfyE=",
+ "hash": "sha256-y6FZamAq/YhynWe55Syy5xA6aSPOeECkWRQbML1AjQU=",
"homepage": "https://registry.terraform.io/providers/hashicorp/tfe",
"owner": "hashicorp",
"repo": "terraform-provider-tfe",
- "rev": "v0.77.0",
+ "rev": "v0.79.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-DutNev1ABazfV6QOWMFsFc0QSkffARhaJ7RXTWG2Jyo="
+ "vendorHash": "sha256-PKAFhHCaeCtV1frMyCidCcJgWTA8/7Cbdq6h3RTeqAQ="
},
"hashicorp_time": {
"hash": "sha256-5+iPq2It3oFHPBHWshfIuNo1xkOPcuSYyljt6j+j7lg=",
@@ -688,13 +688,13 @@
"vendorHash": "sha256-aM9bDzYM4RW3cIeJCMnIB9VqEaPV4D0r3zMOU3d0QDs="
},
"hashicorp_vault": {
- "hash": "sha256-k/S1ez6q70vvnHMfU2aweTFzRnLlYbxUEh4xZumT1mo=",
+ "hash": "sha256-Jl1mF2DIzLcXmevrFGLjnThUBR0TXiXvvgQYwFLwBtE=",
"homepage": "https://registry.terraform.io/providers/hashicorp/vault",
"owner": "hashicorp",
"repo": "terraform-provider-vault",
- "rev": "v5.9.0",
+ "rev": "v5.10.1",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-0TJbC7gG5yduWrzp7MN5WWDjsdyL6RqXmOlIDs3OtaU="
+ "vendorHash": "sha256-MMivACUsYhJg+wkag08NHEYkjjdJouq+QCR08CTAiKM="
},
"hashicorp_vsphere": {
"hash": "sha256-vRO6vxzi4d0hNc0MmQLhN7roONnsjxPBtFt0fyvxWd8=",
@@ -706,40 +706,40 @@
"vendorHash": "sha256-47xWjlzpQ/EYzjbuuMKQiu5cfYAXdYkXRl+AOEP+sA4="
},
"heroku_heroku": {
- "hash": "sha256-hR4DvSneqG/5P4tYljcuFxQ34AnDIjIt+JMn1BhloeU=",
+ "hash": "sha256-AmHgAlz4J3l9OCjUMVxLMWtKZB1LpNOyX1exUI6fWHA=",
"homepage": "https://registry.terraform.io/providers/heroku/heroku",
"owner": "heroku",
"repo": "terraform-provider-heroku",
- "rev": "v5.3.2",
+ "rev": "v5.4.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
"hetznercloud_hcloud": {
- "hash": "sha256-yIzI1p4U8klNqqFqiMuKhVb8njoslJ+vDXFOv+9EmFw=",
+ "hash": "sha256-pfcgLftuPwbVsKVPAE0iF9p59eK12dtLjwPY2YMy4KE=",
"homepage": "https://registry.terraform.io/providers/hetznercloud/hcloud",
"owner": "hetznercloud",
"repo": "terraform-provider-hcloud",
- "rev": "v1.64.0",
+ "rev": "v1.66.1",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-f49amYWzWSG9tzY6wvpxtTFiyJ8zC/Lc1hIQtzdgJRs="
+ "vendorHash": "sha256-Hh9sMVRVVoUEsu6nqdHhmPO2q4xPfyb0VNbhDvyPdRg="
},
"huaweicloud_huaweicloud": {
- "hash": "sha256-4KRJhLnpKZwmL5aQqva8JZGDCYBzlGepE7zP6hwP+KY=",
+ "hash": "sha256-1WVZ5NOvVFuRIWJQpFy9lRvlt5GbOHINFISABexcb/M=",
"homepage": "https://registry.terraform.io/providers/huaweicloud/huaweicloud",
"owner": "huaweicloud",
"repo": "terraform-provider-huaweicloud",
- "rev": "v1.92.0",
+ "rev": "v1.95.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
"ibm-cloud_ibm": {
- "hash": "sha256-bLbm+wbC+2bMor9fYmB6J+iclSOsdP3dIkJiy3Jk6Xg=",
+ "hash": "sha256-hDLD3h+640IRIL5lDegn4W2tOuSef6Bi5JWdlLbtqoM=",
"homepage": "https://registry.terraform.io/providers/IBM-Cloud/ibm",
"owner": "IBM-Cloud",
"repo": "terraform-provider-ibm",
- "rev": "v2.2.2",
+ "rev": "v2.4.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-FFQEmg2hui1KyzP1WWR6Lx9tKi2aEDAHKztubHMaTAQ="
+ "vendorHash": "sha256-/UNr2OiDlq0gX3D77mbruDj9WMnS/0AxkoEaBcWlFHU="
},
"icinga_icinga2": {
"hash": "sha256-Y/Oq0aTzP+oSKPhHiHY9Leal4HJJm7TNDpcdqkUsCmk=",
@@ -760,13 +760,13 @@
"vendorHash": null
},
"integrations_github": {
- "hash": "sha256-OpuKe7/Ymr46J41zgYdk1Qet+trEGTafl6TM23PV1lA=",
+ "hash": "sha256-2y25AE4iLckdvvFv+vPRdl2wLCPlUnK2Xc73m0qVyxc=",
"homepage": "https://registry.terraform.io/providers/integrations/github",
"owner": "integrations",
"repo": "terraform-provider-github",
- "rev": "v6.12.1",
+ "rev": "v6.13.0",
"spdx": "MIT",
- "vendorHash": "sha256-qzyV/rgQ79XvoTBRjjIsPFfqAXLROiIAlY7Y/d8SYcM="
+ "vendorHash": "sha256-crDSVC0UvJ8fXoKwSgyFWHivwOA9XRO7dXoEOYLPZTo="
},
"jfrog_artifactory": {
"hash": "sha256-BSUOmqHwnDEYojtwTXBWo9oGG2FbgaODUKClZPCaK/I=",
@@ -787,13 +787,13 @@
"vendorHash": "sha256-mnKXYT0GfIS+ODzBCS9l4rLF1ugadesmpgdOgj74nLg="
},
"jianyuan_sentry": {
- "hash": "sha256-/FOpuCdMkUHpJN3z18guNqzG4Ujv8B+gZ67R2TgqKBk=",
+ "hash": "sha256-V0+vbeECEaeOwr8a1HohdClZKwVkjHSxbhu86Bl9ZKE=",
"homepage": "https://registry.terraform.io/providers/jianyuan/sentry",
"owner": "jianyuan",
"repo": "terraform-provider-sentry",
- "rev": "v0.15.1",
+ "rev": "v0.15.4",
"spdx": "MIT",
- "vendorHash": "sha256-6XGS1T1bMUQKPOTqS3i92ZMfyD00ZovTuCViYyM/OEU="
+ "vendorHash": "sha256-qSLy0iPPiJ9EdpU1D879bICDKwJfDA+JnxCepsvGVbA="
},
"joneshf_openwrt": {
"hash": "sha256-z78IceF2VJtiQpVqC+rTUDsph73LZawIK+az3rEhljA=",
@@ -824,40 +824,40 @@
"vendorHash": "sha256-JTcIyUKoeCRxAzUWJy9FkMCYy3+D70uyzuiSTW3nHlA="
},
"kislerdm_neon": {
- "hash": "sha256-1o5EnAI9X8Q+dXxh1/jZwimy1MmPDF3X2aRc+HO7HpQ=",
+ "hash": "sha256-NvAQY8uoTtBoyx6XF8rruaRXVRARAr1yFKFkBes6Css=",
"homepage": "https://registry.terraform.io/providers/kislerdm/neon",
"owner": "kislerdm",
"repo": "terraform-provider-neon",
- "rev": "v0.13.0",
+ "rev": "v0.14.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-7mJ+BX7laBKsr4DX1keMXnGi79CZp8M1jD0COQ1lcmU="
},
"kreuzwerker_docker": {
- "hash": "sha256-wC0XYOGx3CBrXOkISmYFMMqcNijl3u2XZzrVOPF+EDo=",
+ "hash": "sha256-prvQBNT2OhKmH0ABIs7saRqpURZwO+ntfIxoGe/KmMc=",
"homepage": "https://registry.terraform.io/providers/kreuzwerker/docker",
"owner": "kreuzwerker",
"repo": "terraform-provider-docker",
- "rev": "v4.4.0",
+ "rev": "v4.5.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-PIltVJ3o3ROFi1ensrJyFYEsCm6nEFXHkkTPU3ho+gU="
+ "vendorHash": "sha256-EAv8EeNn0PJ3BElmg6sKkd/LXNe0lFjEIjHuZRG3CoQ="
},
"launchdarkly_launchdarkly": {
- "hash": "sha256-DCc+qQdVVDdFiHaDv6jc4MUuWPemk3XEeBEKAbTUi7M=",
+ "hash": "sha256-xQhWB5gUO10v7KXXHci3gvXlI/hg7JXsn9bYxHVGJwc=",
"homepage": "https://registry.terraform.io/providers/launchdarkly/launchdarkly",
"owner": "launchdarkly",
"repo": "terraform-provider-launchdarkly",
- "rev": "v2.29.0",
+ "rev": "v2.30.1",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-OgKOjLwDQxJiv+VWdOzjMcUDPu9LOuhyTRyLyM39vLM="
+ "vendorHash": "sha256-9RisIZUblqqylMW6Bz6ehpwRUXyvTdicuhEGI+n5G3Y="
},
"linode_linode": {
- "hash": "sha256-aOLto01ntce/l+1ZcQf5Rsdu6ptgpYWpf5JpJ0zRUNs=",
+ "hash": "sha256-N/SVZ1ajNRT53zxdYBT6Hd/wwAuKhEre0QSZUYbkwGA=",
"homepage": "https://registry.terraform.io/providers/linode/linode",
"owner": "linode",
"repo": "terraform-provider-linode",
- "rev": "v3.14.1",
+ "rev": "v4.1.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-dnvv6sSzEUZ4Hbrq/pAgi/O1RyxCx89omCVzvCe70S0="
+ "vendorHash": "sha256-r5T8kmvCb2iBUJqw5m7hrr+ET7U9kIBUbsvEVqZlgrE="
},
"loafoe_htpasswd": {
"hash": "sha256-1HCvAGWsYlcYCA8iOmBb/AawxHPLuoxxQWLzNy0x79M=",
@@ -878,13 +878,13 @@
"vendorHash": "sha256-vcuUt3WIo1TnLApch410JgtyCzliQRYMQQQ2Z9diDZ8="
},
"lxc_incus": {
- "hash": "sha256-m3xUqIUvowu+SZ7TxXYKjOv0Th/Pah0MXVAdaaSPeCo=",
+ "hash": "sha256-Jabbg13UetT4B+kGNP2DDEXFALR8apqjPB5xWkHF5UA=",
"homepage": "https://registry.terraform.io/providers/lxc/incus",
"owner": "lxc",
"repo": "terraform-provider-incus",
- "rev": "v1.1.0",
+ "rev": "v1.1.1",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-vTJXA7vHVE/m68gr1nHInGs/2T/4OzwS6T3BAAJ+ATo="
+ "vendorHash": "sha256-nRkttehaieVOcTBJ3rIU/JHtv/q4fU18z8MUo3xtE28="
},
"marcofranssen_dexidp": {
"hash": "sha256-Aby3FNEA6LgsGM/N10LNu9sCv3f2N8WIrmWoqEqTa8E=",
@@ -905,13 +905,13 @@
"vendorHash": "sha256-t4dbDJNjEQ6/u+/6zqk2Sdd3LVn/L2BCJujpiLdGc58="
},
"metio_migadu": {
- "hash": "sha256-q+7tTBMxqGlN6GyosnL70/qGtnwueWr1n+WI5BhnV4E=",
+ "hash": "sha256-Aef1H/L2EFeU9mhecOnlPAbJbt3XfBL0Wz67IqxCI10=",
"homepage": "https://registry.terraform.io/providers/metio/migadu",
"owner": "metio",
"repo": "terraform-provider-migadu",
- "rev": "2026.5.28",
+ "rev": "2026.7.2",
"spdx": "0BSD",
- "vendorHash": "sha256-ap1+0luy/9OQYNkYh1Aj+2LPMt7JdhKNn0ENrQMz3Uk="
+ "vendorHash": "sha256-wUX2smEhKUftBCRi7ANq8NpHXpB+EmlVshrhI2ltY2I="
},
"mongey_kafka": {
"hash": "sha256-rTa6c7jAMH027V7h/yUGVGz6TS0PDdObilxU0Vpr6FI=",
@@ -932,13 +932,13 @@
"vendorHash": "sha256-ulhKT0DaS6gg9Ucz9pqqIg4mxRpGDGz2rN1R0RNuumg="
},
"mongodb_mongodbatlas": {
- "hash": "sha256-8HZOdEHD5KwVuSDe3EDX54nPqn3Uz6kooi/HEGoI3F0=",
+ "hash": "sha256-AC2dxPaWzwYzNfMZtIHsCVkRU6U8NX1soL8zFzxomE8=",
"homepage": "https://registry.terraform.io/providers/mongodb/mongodbatlas",
"owner": "mongodb",
"repo": "terraform-provider-mongodbatlas",
- "rev": "v2.12.0",
+ "rev": "v2.14.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-c864XU6t/ehD1KhlV0aBddEc0eifWHHWeS67BH3odbM="
+ "vendorHash": "sha256-oGCpF+upWZfYfobtbakmTLu+8/ZU+c88v6Ffd4UTBX0="
},
"namecheap_namecheap": {
"hash": "sha256-eV2K3KHTEXEEt1WXwfYfNMK+gLUY0EoHFQg9kLdAI3s=",
@@ -968,22 +968,22 @@
"vendorHash": "sha256-OAd8SeTqTrH0kMoM2LsK3vM2PI23b3gl57FaJYM9hM0="
},
"newrelic_newrelic": {
- "hash": "sha256-eQpwxA51hmysBpvTVgcyTlBTpHqfeRy+tLl5HTxAPAk=",
+ "hash": "sha256-qElRjPX7275o7HxTXzwNNJbh3Wjn1EJ6NnHq17Ant4o=",
"homepage": "https://registry.terraform.io/providers/newrelic/newrelic",
"owner": "newrelic",
"repo": "terraform-provider-newrelic",
- "rev": "v3.91.0",
+ "rev": "v3.95.2",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-MP3CHOybrF3EoynQ5Wi6+J+5+N6pxxIvFZZD6dJ5WHI="
+ "vendorHash": "sha256-NS/TY/GJIEBszm4pwy0Z7aj3pFIozenGvRp0+v07Zfw="
},
"ns1-terraform_ns1": {
- "hash": "sha256-MX/Wd9Lztjn7uwDzJjs4bsSSp0PFzUgsu4jXke9jHL8=",
+ "hash": "sha256-6w0r6QXm16h4I4PFj80dJhTDbF4FPMjJalO0TfXGBEA=",
"homepage": "https://registry.terraform.io/providers/ns1-terraform/ns1",
"owner": "ns1-terraform",
"repo": "terraform-provider-ns1",
- "rev": "v2.8.2",
+ "rev": "v2.9.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-iFya3JEM2XklfunQq0Mbdar/nyWOQZHfYWa2NWBxzTM="
+ "vendorHash": "sha256-aI08WEXxcw3Lt83oKrohXTJIMo3sWPF3UuteIeDX+WM="
},
"numtide_linuxbox": {
"hash": "sha256-svQRz1/PdVLpHoxOam1sfRTwHqgqs4ohJQs3IPMMAM4=",
@@ -1013,13 +1013,13 @@
"vendorHash": "sha256-/4mktOn7qjWIkpyqeEW4vzY0w0pG+0qx7KRYBkE1IkQ="
},
"okta_okta": {
- "hash": "sha256-3zuD+R1fUAFJ3pvzzHmN92RGGiWLYpnGOJXSsv89Les=",
+ "hash": "sha256-Qpdinb4ZJRjZG4lMv5EFkicBcYU+OiLz9on3ZaQQu8s=",
"homepage": "https://registry.terraform.io/providers/okta/okta",
"owner": "okta",
"repo": "terraform-provider-okta",
- "rev": "v6.11.0",
+ "rev": "v6.13.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-/IbzilmyVTZh7qWogtXd+/Y7UJdjsQaf7Yjhi1fU1Vc="
+ "vendorHash": "sha256-z13CKv4d+C2VsdUfiArzLLaXExq8k4Y5Y9GEidqqGb0="
},
"oktadeveloper_oktaasa": {
"hash": "sha256-2LhxgowqKvDDDOwdznusL52p2DKP+UiXALHcs9ZQd0U=",
@@ -1040,13 +1040,13 @@
"vendorHash": "sha256-ofzbDmivXgH1i1Gjhpyp0bk3FDs5SnxwoRuNAWyMqyI="
},
"opentelekomcloud_opentelekomcloud": {
- "hash": "sha256-olgUy66gTSPGPvwMKaOeLhjmA3pS9LX/SPdaf8vNbhM=",
+ "hash": "sha256-4ldbcTTm5mV1/OQ+Y1WGZP8MzLooxc+JrPj2WtHC0Tw=",
"homepage": "https://registry.terraform.io/providers/opentelekomcloud/opentelekomcloud",
"owner": "opentelekomcloud",
"repo": "terraform-provider-opentelekomcloud",
- "rev": "v1.36.67",
+ "rev": "v1.37.1",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-Y+U+8iR3iu62DN/KgYQj7XsSjD3T9GJjQM1Osq//03w="
+ "vendorHash": "sha256-EUIYUJ92IScZL1Xst5HWGgJS9aH9Zugwk17WR7w+lKs="
},
"opsgenie_opsgenie": {
"hash": "sha256-Y67kcg/ovvZc22l1CBz0Mqu7DAIit5F0jQNfQrl2EGI=",
@@ -1058,20 +1058,20 @@
"vendorHash": null
},
"oracle_oci": {
- "hash": "sha256-uIggPhDgTMQei6LpXPzAbfbsoNjVN35P60QcqqHyCIA=",
+ "hash": "sha256-ZDpyBnralPWEMorou9A8+llGqavGlPMe1YJlUMrfYRY=",
"homepage": "https://registry.terraform.io/providers/oracle/oci",
"owner": "oracle",
"repo": "terraform-provider-oci",
- "rev": "v8.17.0",
+ "rev": "v8.23.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
"ovh_ovh": {
- "hash": "sha256-xjSGnukY76k6xalVMBfXikuI2MyXvROVoA91wB8AXnI=",
+ "hash": "sha256-BKaPKG9xuRq2rNxkMJnN428woyeK0NnssZaJRrGutoM=",
"homepage": "https://registry.terraform.io/providers/ovh/ovh",
"owner": "ovh",
"repo": "terraform-provider-ovh",
- "rev": "v2.13.1",
+ "rev": "v2.17.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -1085,11 +1085,11 @@
"vendorHash": "sha256-F1AuO/dkldEDRvkwrbq2EjByxjg3K2rohZAM4DzKPUw="
},
"pagerduty_pagerduty": {
- "hash": "sha256-ZbkCJIDZdqry5y4gv7wtkf2GFfvhUCsj5knICUidjZQ=",
+ "hash": "sha256-+0edUEoaJCg8iDZxRQVQMiP3pLROTi19djEhS5LiRHw=",
"homepage": "https://registry.terraform.io/providers/PagerDuty/pagerduty",
"owner": "PagerDuty",
"repo": "terraform-provider-pagerduty",
- "rev": "v3.32.4",
+ "rev": "v3.34.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -1139,13 +1139,13 @@
"vendorHash": "sha256-WpI4OZ7BUVgHwQY+7ct+K6CnwXFFuiRbI+iTFSJ8a5A="
},
"rootlyhq_rootly": {
- "hash": "sha256-lGd864ugC5hfgN86ByEIJhjkMJVCPDNCKzoXx6pKjS0=",
+ "hash": "sha256-uxEqnGPJPUHhD2qtT9BR34/x6xSN5cZcW0JvH8fKfT0=",
"homepage": "https://registry.terraform.io/providers/rootlyhq/rootly",
"owner": "rootlyhq",
"repo": "terraform-provider-rootly",
- "rev": "v5.16.0",
+ "rev": "v5.17.2",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-QVZBQ7Ir8iEUaJo0yXFNp8rInIcbp9qw70UDJ3NAgRM="
+ "vendorHash": "sha256-CndTtUfv1NWZd1sgfGq+e4lPm68aQuqwo55KzmdgXeI="
},
"rundeck_rundeck": {
"hash": "sha256-g8unbz8+UGLiAOJju6E2bLkygvZgHkv173PdMDefmrc=",
@@ -1157,13 +1157,13 @@
"vendorHash": null
},
"sacloud_sakuracloud": {
- "hash": "sha256-qeFN+JMs/TLV/oPFjMjpUmqv6fTiY+qREXQNYHMk8vY=",
+ "hash": "sha256-oAD+QfMqUOtbh2GNooyV1Yc1OVHuAnv86ZvuCB7zo8E=",
"homepage": "https://registry.terraform.io/providers/sacloud/sakuracloud",
"owner": "sacloud",
"repo": "terraform-provider-sakuracloud",
- "rev": "v2.35.1",
+ "rev": "v2.36.1",
"spdx": "Apache-2.0",
- "vendorHash": "sha256-w2NSJv6BY7S5KHeBttxqY2cMR+yPvr2IsC5X4aJAo3A="
+ "vendorHash": "sha256-zklw0YajAZZLkosLxZCsWtAbvmHuGEI8OGpVykp1Xw4="
},
"sap-cloud-infrastructure_sci": {
"hash": "sha256-eQA4mY+Rx5PLbTgGqfefYFc5gZKIvt1w2eag8ipE0PI=",
@@ -1175,22 +1175,22 @@
"vendorHash": "sha256-InCRL4k6v0avmnNja+b6Ozg5+injxa8EmrRHIWrq4Ag="
},
"sap_btp": {
- "hash": "sha256-kTH3diM9jbncv80+I//mj+zCWGosIXjjMETXa6IS2HU=",
+ "hash": "sha256-1+gi+iRTKe/LHM6O3IBMRk9nba0kQ6+AbjYkrRXa5hM=",
"homepage": "https://registry.terraform.io/providers/SAP/btp",
"owner": "SAP",
"repo": "terraform-provider-btp",
- "rev": "v1.23.1",
+ "rev": "v1.24.0",
"spdx": "Apache-2.0",
- "vendorHash": "sha256-w/AmSHydCeyp/EURgPY2c/E2LjqAXXCORI53X1hEdxY="
+ "vendorHash": "sha256-uCw5Xdqp3VjLj6IytoVfO0atxkT69FNqJmAlA6eCmfs="
},
"scaleway_scaleway": {
- "hash": "sha256-nBx7zmNiQHL+VomJJ4/tyd0gujc2BNQfVA8zG3hT0wc=",
+ "hash": "sha256-NXW3b4E92uqZbzIpRTFKVKbPRghwfRK4akn4KY7C9p0=",
"homepage": "https://registry.terraform.io/providers/scaleway/scaleway",
"owner": "scaleway",
"repo": "terraform-provider-scaleway",
- "rev": "v2.76.0",
+ "rev": "v2.79.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-X5OVBa1vKsPA2gfXDZWJIcncor9V4NFmWILarqbIBiw="
+ "vendorHash": "sha256-MKYAdMLETD12850TIBqBfHLRNLy15B6ycDUckIapwt8="
},
"scottwinkler_shell": {
"hash": "sha256-LTWEdXxi13sC09jh+EFZ6pOi1mzuvgBz5vceIkNE/JY=",
@@ -1202,13 +1202,13 @@
"vendorHash": "sha256-MIO0VHofPtKPtynbvjvEukMNr5NXHgk7BqwIhbc9+u0="
},
"selectel_selectel": {
- "hash": "sha256-xoIwvrjeuY1T+7pyBQfoU8orWC4qMuQ9IgbLYIEzLIA=",
+ "hash": "sha256-ff8XqDp31pwbPmKe7RFMupwVWuhQoOTizFdTAfW5eek=",
"homepage": "https://registry.terraform.io/providers/selectel/selectel",
"owner": "selectel",
"repo": "terraform-provider-selectel",
- "rev": "v8.1.0",
+ "rev": "v8.2.3",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-Y2oj1DIn80CCdJ7ZM/p6sGqT64dGIEFg/vXXSv6B+iE="
+ "vendorHash": "sha256-zdAJOPL+4gEsESzG4XHSMhM9JkFPuoMudwNmVr6HJFE="
},
"siderolabs_talos": {
"hash": "sha256-/NACmEpodBNx+Q2M9y3JnKpw9a3Y1eFDdTQ+48MXAc8=",
@@ -1238,31 +1238,31 @@
"vendorHash": "sha256-skswuFKhN4FFpIunbom9rM/FVRJVOFb1WwHeAIaEjn8="
},
"spacelift-io_spacelift": {
- "hash": "sha256-pWj9K8+ssAuSz1oufi/Ce701xaBDmHKtyijA/R/kQ/g=",
+ "hash": "sha256-mPrRDA/waxBNIpO8u/QCSi8uNZT6sCs2M5UFyMYZ4dw=",
"homepage": "https://registry.terraform.io/providers/spacelift-io/spacelift",
"owner": "spacelift-io",
"repo": "terraform-provider-spacelift",
- "rev": "v1.51.0",
+ "rev": "v1.52.4",
"spdx": "MIT",
- "vendorHash": "sha256-C8TE7uxMf6LOTS6v22mXwUdk2eqQRinwrCH4ZVUCx4k="
+ "vendorHash": "sha256-VmrvdRsNk2s6GQw7t8Aj0ASAEgQ/9v1TxnNIO9TderI="
},
"splunk-terraform_signalfx": {
- "hash": "sha256-bX6CtNP7uB50kk3ddu52YfKE04PsEJw6DXl6yQxOeVI=",
+ "hash": "sha256-xdB2VAacBGFAeVd60Zy6MWSmx6BFJ7ciZKSTXYdRZY0=",
"homepage": "https://registry.terraform.io/providers/splunk-terraform/signalfx",
"owner": "splunk-terraform",
"repo": "terraform-provider-signalfx",
- "rev": "v9.30.1",
+ "rev": "v9.33.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-27mA2OAApUtPawZZk7Wxme9TfQY19TraIJSqHh8MFZg="
+ "vendorHash": "sha256-m7Op/K3Xo9nKgVg9bTHmpmPiFpCB6Ek/kgj76P+ViGQ="
},
"spotinst_spotinst": {
- "hash": "sha256-cZ2gKgXLM/0msBvtlWn16TdM1kwd2wRUyV7bvVEd+SE=",
+ "hash": "sha256-OX2uclduqzLPlRNHmji8X+PrEV78gdsE/W/SND4cVRA=",
"homepage": "https://registry.terraform.io/providers/spotinst/spotinst",
"owner": "spotinst",
"repo": "terraform-provider-spotinst",
- "rev": "v1.236.1",
+ "rev": "v1.238.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-Gb07NAvZowWIUokmjLq2IOvg4El2hGwJ6J2J9hBj+eg="
+ "vendorHash": "sha256-s6ld+xi++QWBlVmE+5BCY6+vMcn3yr/WM9NX/PlIC/M="
},
"statuscakedev_statuscake": {
"hash": "sha256-zXBZZA+2uRN2FeGrayq0a4EBk7T+PvlBIwbuxwM7yBc=",
@@ -1274,20 +1274,20 @@
"vendorHash": "sha256-9M1DsE/FPQK8TG7xCJWbU3HAJCK3p/7lxdzjO1oAfWs="
},
"sumologic_sumologic": {
- "hash": "sha256-5X/3oHaW+b9U8W1DPKAJltDwGJjV4Mx1XP/JCkQtpwA=",
+ "hash": "sha256-h4ipmgcEK8Cv9/gQwdOtQqbhfXO/QXJsrHHV6O1HtL8=",
"homepage": "https://registry.terraform.io/providers/SumoLogic/sumologic",
"owner": "SumoLogic",
"repo": "terraform-provider-sumologic",
- "rev": "v3.2.8",
+ "rev": "v3.2.10",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-R/+PS4cUtr8/twUXOPRiVweb5I9NNiD6mGOcAFr9IDs="
+ "vendorHash": "sha256-nbiLH+J051XxTx+z8xGrp/DPYB7g9S4clFSWcZUKnAg="
},
"sysdiglabs_sysdig": {
- "hash": "sha256-yjuh6JVIt+FYVe9yILORklwt/KiBFcjmZnEHf5oeQQw=",
+ "hash": "sha256-VeIgHhCHyNgAcv2NIBAWCJIwGHE3nqYeCxGd4VSUymU=",
"homepage": "https://registry.terraform.io/providers/sysdiglabs/sysdig",
"owner": "sysdiglabs",
"repo": "terraform-provider-sysdig",
- "rev": "v3.8.1",
+ "rev": "v3.9.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-HjrB7C0KaLJz9NVLfZdq5EZbNbF9lJPxSkQwnWUF978="
},
@@ -1301,29 +1301,29 @@
"vendorHash": "sha256-rD4W2PkRrIQfACm8UWdF0yfZ+Qc5hTjH1lA6U7GJxpE="
},
"telmate_proxmox": {
- "hash": "sha256-1aKKlOIk1mH4yx66eD635d1IaUWXIiBGHEt4A2F2mGM=",
+ "hash": "sha256-38q64EwxcdFzmlkL/jA0bTAF0WKXHEBIO0yS/44PizA=",
"homepage": "https://registry.terraform.io/providers/Telmate/proxmox",
"owner": "Telmate",
"repo": "terraform-provider-proxmox",
- "rev": "v3.0.2-rc04",
+ "rev": "v3.0.2-rc07",
"spdx": "MIT",
- "vendorHash": "sha256-Hzq97ElAjs7Y4tmJ2x7+g4j74MEdEvI2bD8pkvi5ZXg="
+ "vendorHash": "sha256-ZuH+uIv+iRQgUooyXsryICItSRglk1AGGWMVb+o1ILs="
},
"temporalio_temporalcloud": {
- "hash": "sha256-gWboOWDlfoMIlfmeGOom83T/ymMW8leqO0tzrG5xhmk=",
+ "hash": "sha256-7xj+/RzXtMXN9IWjua0+cAH5zyMMCIqlOzvFqNsAFHk=",
"homepage": "https://registry.terraform.io/providers/temporalio/temporalcloud",
"owner": "temporalio",
"repo": "terraform-provider-temporalcloud",
- "rev": "v1.5.0",
+ "rev": "v1.6.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-7ZoJg1HEVj5Nygr46lmBZeJDfZuU4F90yntrgkBVgGg="
+ "vendorHash": "sha256-QvtirfTfnvy7CBNUng07OZnbXLHJAyRlf1I9Mur44N4="
},
"tencentcloudstack_tencentcloud": {
- "hash": "sha256-9TTN1DmIXxqIWWiPdFQLRZbJ1mXkibXAOKfF4rJTPBE=",
+ "hash": "sha256-mIiTAFVWNoD2JkVJNYUbrhOPNwCY/ocbTnoGbFROggo=",
"homepage": "https://registry.terraform.io/providers/tencentcloudstack/tencentcloud",
"owner": "tencentcloudstack",
"repo": "terraform-provider-tencentcloud",
- "rev": "v1.82.101",
+ "rev": "v1.83.13",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -1346,13 +1346,13 @@
"vendorHash": "sha256-SF11E60OQiRdf+Pf6XyJg60yGRnGOcSzhrYccrWaeYE="
},
"terraform-lxd_lxd": {
- "hash": "sha256-ovYvRpGY8tUiX5zYpTkb8uuQcKsW7o/bDgUPbkXnVnI=",
+ "hash": "sha256-fGiXnP8neze47FQXVCFlScya9ih67/5TQW5xKEBnI+Y=",
"homepage": "https://registry.terraform.io/providers/terraform-lxd/lxd",
"owner": "terraform-lxd",
"repo": "terraform-provider-lxd",
- "rev": "v2.7.1",
+ "rev": "v3.0.2",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-vOip6KfD0hOQtNEc7U6DfMjitFGOleNlF88qKtbssng="
+ "vendorHash": "sha256-jOZw/va3dA0DYmnYSKbASHvyL7levjf1Bk6WelLga+Q="
},
"terraform-provider-openstack_openstack": {
"hash": "sha256-6TcyPUacJNfGsaevg1DQ+WJrMFvGeo2mmsE2+P3RAZM=",
@@ -1391,13 +1391,13 @@
"vendorHash": "sha256-da0+/aLNEuMZWD7+zMUGpc1Ch5VKyN+EyO0Mp4mZWv8="
},
"trozz_pocketid": {
- "hash": "sha256-/rEdOnAbVM69mA/eP6SlZhk1FZfzrYpej2aO0NUP6E4=",
+ "hash": "sha256-QjK8AOnil1UQ3/vjtXxm2p62xVPrGuKDwl9wTUxnpSI=",
"homepage": "https://registry.terraform.io/providers/Trozz/pocketid",
"owner": "Trozz",
"repo": "terraform-provider-pocketid",
- "rev": "v0.1.7",
+ "rev": "v2.1.0",
"spdx": "MIT",
- "vendorHash": "sha256-ozAYLFkilSK0Nygdglhz3VNtRVKoLDGRnrVvg4nWyH4="
+ "vendorHash": "sha256-Y1vNBojo+8UYTfuR7NeOKdOPDDH9tIVjjpPAxLDa5iA="
},
"turbot_turbot": {
"hash": "sha256-sJODPeFzU3vaiHbKlGe1dR5Pi7aS56JcmZUe8Yg1BcQ=",
@@ -1409,13 +1409,13 @@
"vendorHash": null
},
"ubiquiti-community_unifi": {
- "hash": "sha256-STJXSLtAN1HR46p/Vs3E0ZB/DQ1NW5HTPK50k9kk3EY=",
+ "hash": "sha256-pN/4HAQlcwr49WftYWqWRJWMuMuXFgrgC70WCn6tP3w=",
"homepage": "https://registry.terraform.io/providers/ubiquiti-community/unifi",
"owner": "ubiquiti-community",
"repo": "terraform-provider-unifi",
- "rev": "v0.42.0",
+ "rev": "v0.55.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-1leizEFn+5VFy3LOAFAogtDT4pyuaG5in0hMat1sORg="
+ "vendorHash": "sha256-/5VP9ljeMyvikllhfZ4kUQgMEeyRKG3lfJjbp5SWtJ0="
},
"ucloud_ucloud": {
"hash": "sha256-k+NkB1q0oiasLc4+b+mbJ0TNUD67XR9ga9MwSbEXjKQ=",
@@ -1427,22 +1427,22 @@
"vendorHash": null
},
"vancluever_acme": {
- "hash": "sha256-AlT7Qe4YGdPUhM1N4OiMyjbmupgqXcQ/6SLz/v+W8lI=",
+ "hash": "sha256-CziwRMh53FPGhXw/TFWJUuI3KtMlwobCVNOgfRyjRLA=",
"homepage": "https://registry.terraform.io/providers/vancluever/acme",
"owner": "vancluever",
"repo": "terraform-provider-acme",
- "rev": "v2.48.1",
+ "rev": "v2.48.3",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-lWBMihP6oX7qPpTuPQQwQS3IDwdyb/rEYqtBsTozb7Q="
+ "vendorHash": "sha256-I6u4huFtk7dXmSyPRX4NxvcUJ4Q2iKuw8qzCdNzYjoQ="
},
"venafi_venafi": {
- "hash": "sha256-wpAckNRqZjSDt7KpCRpLSYkn6Gm+QPzn5sIJ90wRXjI=",
+ "hash": "sha256-tCjeApdanKPNEy7snb6QJoCvwjpNa2fdDryoD+7wn8Y=",
"homepage": "https://registry.terraform.io/providers/Venafi/venafi",
"owner": "Venafi",
"repo": "terraform-provider-venafi",
- "rev": "v0.23.1",
+ "rev": "v0.24.1",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-chDZVBd7tb1VsfTXcWz7j29LzHpUnJpXKRFAyqxnR8s="
+ "vendorHash": "sha256-MXkMUXhE5oUIni9nlZgyN5rXCUl52NmYqMwAnvXpBBo="
},
"vinyldns_vinyldns": {
"hash": "sha256-/M+HFMDeKpIzzdn04TkMxriVeE6vvORRiqonxF38B9Q=",
@@ -1463,13 +1463,13 @@
"vendorHash": "sha256-WXw9H/BQj0ZEW5YLRHWTiXF4VyaVpwlxWO4Hfy4/NdM="
},
"vmware_vcd": {
- "hash": "sha256-W+ffIT70IaePg3xfOaQgCjPTWTN3iSAYwkf+s+zkB84=",
+ "hash": "sha256-/o1bINYaSJXqFkda3N2iRwno2QVCE+KaLLGjvlllMEw=",
"homepage": "https://registry.terraform.io/providers/vmware/vcd",
"owner": "vmware",
"repo": "terraform-provider-vcd",
- "rev": "v3.14.1",
+ "rev": "v3.14.2",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-eCIJ2w8DjmUCGp0VbliLaQ6C29mJhl6Spya06Xyiqd4="
+ "vendorHash": "sha256-CnYLJAvhyx0NS+ng4qLCu/ZR774dMmw3iJjWt78FVHE="
},
"vmware_wavefront": {
"hash": "sha256-yNNtOkodzwxKvHQq9GZlUicezGW6u2ih6ry/cOtJQGM=",
@@ -1490,13 +1490,13 @@
"vendorHash": "sha256-rUYHapEVqRupLOPVbcAH8YP0cuXclMmYTQUkqeOwCN0="
},
"vultr_vultr": {
- "hash": "sha256-TMja+5jeYxIjY/MvJwCR/2rsbHuF7RcPReQSzkksk7Q=",
+ "hash": "sha256-hK4/Pzj0UtWDLQS3cRMC73ZRr20HCWqI+jUlTUHcHaw=",
"homepage": "https://registry.terraform.io/providers/vultr/vultr",
"owner": "vultr",
"repo": "terraform-provider-vultr",
- "rev": "v2.31.2",
+ "rev": "v2.32.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-OASLdReS245N4y0SQ4WY7kPNPpGTHptQgXlNqPlb3nM="
+ "vendorHash": "sha256-av/hIjHWw64WIJv3LVyVDu6IMUKCsM4VOLFZKB0IXjU="
},
"wgebis_mailgun": {
"hash": "sha256-cz+KSvlm1mFe+NXn4IhiWYWT0/U+UAAA8SCNJgXvIKc=",
@@ -1508,12 +1508,12 @@
"vendorHash": "sha256-8p6dJwGyTK+qtgplSLtIRKxnNAQAgHfs4z/EsBcg/iY="
},
"yandex-cloud_yandex": {
- "hash": "sha256-JSF1Q0wNRg2oavZ1+67QfCxNz+JOHrG+rfKn/1T9cgc=",
+ "hash": "sha256-0155GXJMfoCnyqaJiF5SJIA1Qz1q2AYe/BB0AYODG/0=",
"homepage": "https://registry.terraform.io/providers/yandex-cloud/yandex",
"owner": "yandex-cloud",
"repo": "terraform-provider-yandex",
- "rev": "v0.206.0",
+ "rev": "v0.218.0",
"spdx": "MPL-2.0",
- "vendorHash": "sha256-SpJ6wuzBzfI46C7MbNxs0gQpG62ODmB0WIZ8UpJjuPU="
+ "vendorHash": "sha256-FfZvuC/XXhKS03E+l4/9KCLSwx+uTP1LzywckZqX6pA="
}
}
diff --git a/pkgs/applications/networking/cluster/terraform/default.nix b/pkgs/applications/networking/cluster/terraform/default.nix
index 102e4d3a5a39..e6703411d595 100644
--- a/pkgs/applications/networking/cluster/terraform/default.nix
+++ b/pkgs/applications/networking/cluster/terraform/default.nix
@@ -200,9 +200,9 @@ rec {
mkTerraform = attrs: pluggable (generic attrs);
terraform_1 = mkTerraform {
- version = "1.15.6";
- hash = "sha256-FH5s0uyRESytv/1xloU3HXuH2ApjBC3FfEqFqIgBgFs=";
- vendorHash = "sha256-3y9+KCmvskJ24X4F6gSLglmsl4hUlvzBb/ep4kcbS8A=";
+ version = "1.15.8";
+ hash = "sha256-FeXebcNl/npEkEyMvwzeMYTEsl9t8Iz+4lBHd/HzQHQ=";
+ vendorHash = "sha256-l5n5PS2buGPvmx/U8vQeKk6BlZdJQQEujJxlPMTdg0k=";
patches = [ ./provider-path-0_15.patch ];
passthru = {
inherit plugins;
diff --git a/pkgs/applications/networking/google-drive-ocamlfuse/default.nix b/pkgs/applications/networking/google-drive-ocamlfuse/default.nix
index 48d683e14f21..4260630190a4 100644
--- a/pkgs/applications/networking/google-drive-ocamlfuse/default.nix
+++ b/pkgs/applications/networking/google-drive-ocamlfuse/default.nix
@@ -4,41 +4,45 @@
buildDunePackage,
fetchFromGitHub,
extlib,
- ocamlfuse,
+ fuse3,
gapi-ocaml,
ocaml_sqlite3,
+ otoml,
tiny_httpd,
ounit2,
}:
-buildDunePackage rec {
+buildDunePackage (finalAttrs: {
pname = "google-drive-ocamlfuse";
- version = "0.7.32";
+ version = "0.9.0";
+
+ minimalOCamlVersion = "4.13";
src = fetchFromGitHub {
owner = "astrada";
repo = "google-drive-ocamlfuse";
- rev = "v${version}";
- hash = "sha256-AWr1tcium70rXFKMTv6xcWxndOJua3UXG8Q04TN1Siw=";
+ tag = "v${finalAttrs.version}";
+ hash = "sha256-nTZdE9F6ufQ/O/Ck6fzoK65uZ0ylMR6HkwKsBNRDjMs=";
};
- doCheck = lib.versionAtLeast ocaml.version "5";
+ doCheck = lib.versionAtLeast ocaml.version "4.14";
checkInputs = [ ounit2 ];
buildInputs = [
extlib
- ocamlfuse
+ fuse3
gapi-ocaml
ocaml_sqlite3
+ otoml
tiny_httpd
];
meta = {
- inherit (src.meta) homepage;
+ homepage = "https://github.com/astrada/google-drive-ocamlfuse/";
description = "FUSE-based file system backed by Google Drive, written in OCaml";
license = lib.licenses.mit;
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [ obadz ];
mainProgram = "google-drive-ocamlfuse";
};
-}
+})
diff --git a/pkgs/applications/networking/instant-messengers/discord/darwin.nix b/pkgs/applications/networking/instant-messengers/discord/darwin.nix
index 649dd753d9ff..c440becd5da4 100644
--- a/pkgs/applications/networking/instant-messengers/discord/darwin.nix
+++ b/pkgs/applications/networking/instant-messengers/discord/darwin.nix
@@ -107,6 +107,7 @@ stdenv.mkDerivation {
sourceRoot = ".";
dontUnpack = true;
+ dontStrip = true;
installPhase = ''
runHook preInstall
diff --git a/pkgs/applications/networking/instant-messengers/discord/default.nix b/pkgs/applications/networking/instant-messengers/discord/default.nix
index 409078b739ec..4bedf5ef87fe 100644
--- a/pkgs/applications/networking/instant-messengers/discord/default.nix
+++ b/pkgs/applications/networking/instant-messengers/discord/default.nix
@@ -35,7 +35,7 @@ let
self = discord-development;
};
};
- x86_64-darwin = {
+ aarch64-darwin = {
discord = rec {
branch = "stable";
binaryName = desktopName;
@@ -62,7 +62,6 @@ let
};
};
- aarch64-darwin = x86_64-darwin;
default = x86_64-linux; # Used for unsupported platforms, so we can return *something* there.
};
@@ -74,14 +73,13 @@ let
mainProgram = "discord";
maintainers = with lib.maintainers; [
artturin
- FlameFlag
+ _4evy
infinidoge
jopejoe1
Scrumplex
];
platforms = [
"x86_64-linux"
- "x86_64-darwin"
"aarch64-darwin"
];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
diff --git a/pkgs/applications/networking/instant-messengers/discord/linux.nix b/pkgs/applications/networking/instant-messengers/discord/linux.nix
index 206c308504c0..cd61cd501e48 100644
--- a/pkgs/applications/networking/instant-messengers/discord/linux.nix
+++ b/pkgs/applications/networking/instant-messengers/discord/linux.nix
@@ -153,14 +153,13 @@ let
stageModules = writeShellScript "discord-stage-modules" ''
store_modules="$1"
modules_dir="''${XDG_CONFIG_HOME:-$HOME/.config}/${lib.toLower binaryName}/${version}/modules"
- if [ ! -f "$modules_dir/installed.json" ]; then
- mkdir -p "$modules_dir"
- for m in ${lib.concatStringsSep " " (lib.attrNames moduleSrcs)}; do
- ln -sfn "$store_modules/$m" "$modules_dir/$m"
- done
- echo '${builtins.toJSON (lib.mapAttrs (_: mod: { installedVersion = mod; }) moduleVersions)}' \
- > "$modules_dir/installed.json"
- fi
+ rm -rf "$modules_dir"
+ mkdir -p "$modules_dir"
+ for m in ${lib.concatStringsSep " " (lib.attrNames moduleSrcs)}; do
+ ln -sn "$store_modules/$m" "$modules_dir/$m"
+ done
+ echo '${builtins.toJSON (lib.mapAttrs (_: mod: { installedVersion = mod; }) moduleVersions)}' \
+ > "$modules_dir/installed.json"
'';
disableBreakingUpdates =
@@ -223,7 +222,7 @@ stdenv.mkDerivation (finalAttrs: {
dontUnpack = true;
- inherit libPath;
+ inherit libPath stageModules;
autoPatchelfIgnoreMissingDeps = [
"libssl.so.1.1"
@@ -261,8 +260,9 @@ stdenv.mkDerivation (finalAttrs: {
${lib.strings.optionalString enableAutoscroll "--add-flags \"--enable-blink-features=MiddleClickAutoscroll\""} \
--prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
--prefix LD_LIBRARY_PATH : ${finalAttrs.libPath}:$out/opt/${binaryName}:${addDriverRunpath.driverLink}/lib \
+ --suffix VK_ADD_DRIVER_FILES : "${addDriverRunpath.driverLink}/share/vulkan/icd.d" \
${lib.strings.optionalString disableUpdates "--run ${lib.getExe disableBreakingUpdates}"} \
- --run "${stageModules} $out/opt/${binaryName}/modules" \
+ --run "${finalAttrs.stageModules} $out/opt/${binaryName}/modules" \
--add-flags ${lib.escapeShellArg commandLineArgs}
ln -s $out/opt/${binaryName}/${binaryName} $out/bin/
diff --git a/pkgs/applications/networking/instant-messengers/discord/sources.json b/pkgs/applications/networking/instant-messengers/discord/sources.json
index 267a985415cd..f3fea60b1fd3 100644
--- a/pkgs/applications/networking/instant-messengers/discord/sources.json
+++ b/pkgs/applications/networking/instant-messengers/discord/sources.json
@@ -1,627 +1,622 @@
{
"linux-canary": {
"distro": {
- "hash": "sha256-S1GwB+65+Y3uEr6h54IB8d2CWwCcMevfXZGTyspMZ2w=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/full.distro"
+ "hash": "sha256-YXwWHjQnqHIVHte3ZYJwONFukCd2KmseEmzKAZltw28=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/full.distro"
},
"kind": "distro",
"modules": {
"discord_cloudsync": {
- "hash": "sha256-If+B4uqvOvS7NTnnstequpolrxIcM9MZhAsDCkFMhgM=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/discord_cloudsync/1/full.distro",
+ "hash": "sha256-mJ8h1KC6JbqLhYFZ98Ko/0rHajxyFfeOVp0poazdHKk=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/discord_cloudsync/1/full.distro",
"version": 1
},
"discord_desktop_core": {
- "hash": "sha256-N7To9vgdOc20omNyOEWnOexsE83nO5imp9/coliuJZY=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/discord_desktop_core/1/full.distro",
+ "hash": "sha256-nILxbgnowDmGgvl6evlBC11BNRhv5G88ni4uvgo+VhI=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/discord_desktop_core/1/full.distro",
"version": 1
},
"discord_dispatch": {
- "hash": "sha256-BQ3bPkjNGS8v171JMayHdRyqbB2PX0Xxdrukz3MpJJU=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/discord_dispatch/1/full.distro",
+ "hash": "sha256-HndezvELozyQ77lEkkTNn7Gl7V6czWOZq8EyfJBVdVg=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/discord_dispatch/1/full.distro",
"version": 1
},
"discord_erlpack": {
- "hash": "sha256-E/rjqsFNFLWLZxHqAzVHvRmoI1pSWt7my4C+2mNUuJE=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/discord_erlpack/1/full.distro",
+ "hash": "sha256-vM6OYH5yGTRigIyg36Y1KKg0WtNq9Hd5hmdX9r72eyQ=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/discord_erlpack/1/full.distro",
"version": 1
},
"discord_game_utils": {
- "hash": "sha256-oUlod+YECmdqy4c+sWPZt1yYvGZwYimoIVRPA5v6r+8=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/discord_game_utils/1/full.distro",
+ "hash": "sha256-5b1mNvLLrYCtcNHn0vWAlfEns4DVJVsdLlu/fhGbfQ0=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/discord_game_utils/1/full.distro",
"version": 1
},
"discord_krisp": {
- "hash": "sha256-xDEDlwIInDVSRISoWb07KQvVOqdNxzjWM/s5R/1Ra44=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/discord_krisp/1/full.distro",
+ "hash": "sha256-W1tDAyW0lD9dG7G9Mm3Az5FUsR07oGXgR0yeKbVzXjc=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/discord_krisp/1/full.distro",
"version": 1
},
"discord_modules": {
- "hash": "sha256-Gh0JBMfaX63sUIGQ+OKqrSzDuADhjKJB3ger9ONkz9k=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/discord_modules/1/full.distro",
+ "hash": "sha256-TlBDD+sSlOIYpnYZ35vE1WyJl/1qHOFzhcfLLWWb0eM=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/discord_modules/1/full.distro",
"version": 1
},
"discord_rpc": {
- "hash": "sha256-texX0BTDW0Pef2gMmkOFjxikKIBYIKSTT+Rsk8Zdn5A=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/discord_rpc/1/full.distro",
+ "hash": "sha256-8sRdHH/lcfjKMvspohhV+4qz0LYIQIox87bKA/Vwe80=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/discord_rpc/1/full.distro",
"version": 1
},
"discord_spellcheck": {
- "hash": "sha256-NrhpLEVLW3SqoGGiFcNbcM4sQQzW+6mkUaI50Ry66dY=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/discord_spellcheck/1/full.distro",
+ "hash": "sha256-3ap4R+mraQPUySPP0Uxc5cvNv6X5646GWFP9tYMxa2I=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/discord_spellcheck/1/full.distro",
"version": 1
},
"discord_utils": {
- "hash": "sha256-uXPBkrdnXQnYs3+oTn2gds+au+ZDMYNvOBXTjjhcFsQ=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/discord_utils/1/full.distro",
+ "hash": "sha256-hhZQW48n2k4RiMwMrpKV2RVPw3OI+M4nYN1Q4rpnTgY=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/discord_utils/1/full.distro",
"version": 1
},
"discord_voice": {
- "hash": "sha256-UeXNXR+BHljnW5Xb/E9CrJhBv5hchPS6R1P0dvKoZGQ=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/discord_voice/1/full.distro",
+ "hash": "sha256-MFDCDC3gBjRpXdre24TLCLre78ETA8klca1Op8heTRw=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/discord_voice/1/full.distro",
"version": 1
},
"discord_zstd": {
- "hash": "sha256-llG+0+Z0boy5ZhtPGiCDUr4sVa4mdR6FjT71ZSX5ez4=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1177/discord_zstd/1/full.distro",
+ "hash": "sha256-9nSczIYl6rR/Z4jxqA1/2/z79uHdqyNTSgoCJbNWDlM=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/linux/x64/1.0.1398/discord_zstd/1/full.distro",
"version": 1
}
},
- "version": "1.0.1177"
+ "version": "1.0.1398"
},
"linux-development": {
"distro": {
- "hash": "sha256-Je/HUlN3aWGXRKj7yFv4S5YtlrCyEZNJ+GPJlG3GA/U=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/full.distro"
+ "hash": "sha256-1gqCetK6SEW9h68uvvbdQdG3/aeSEBAcSFWeR5HWAzE=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/full.distro"
},
"kind": "distro",
"modules": {
"discord_cloudsync": {
- "hash": "sha256-tZVDeeocUb4lcx8fBGLvzW7cdws4vB0Tsu6LzwS7Jyc=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/discord_cloudsync/1/full.distro",
+ "hash": "sha256-++Fr9fxL8TycHVPJGHgNwLQbGj/plLbCVV0WjBFKfWs=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/discord_cloudsync/1/full.distro",
"version": 1
},
"discord_desktop_core": {
- "hash": "sha256-qVhVFbRuUYMWoONhmc1aQFRYtCOBh59xiMUIBsIInng=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/discord_desktop_core/1/full.distro",
+ "hash": "sha256-tUeNfyHYRlSVlo9z7no7DvqpYME/sq9OSuat61IhArs=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/discord_desktop_core/1/full.distro",
"version": 1
},
"discord_dispatch": {
- "hash": "sha256-hGGTK6xHBTyMHXTs4uRcms9hA8zpv2h13xuZW/K6FHk=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/discord_dispatch/1/full.distro",
+ "hash": "sha256-cX0KaUlY4gRy3seF9O4PHWr5gBrEWfMLJEIaxzzhYJQ=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/discord_dispatch/1/full.distro",
"version": 1
},
"discord_erlpack": {
- "hash": "sha256-2i4dMQQQV0EO2rafVG7no1bMVOb++qkwga5I4hNiJ1c=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/discord_erlpack/1/full.distro",
+ "hash": "sha256-+AEkr5uLoxH3puHYXHTT5GmmC8foCUTSrpFhMuThNLo=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/discord_erlpack/1/full.distro",
"version": 1
},
"discord_game_utils": {
- "hash": "sha256-l5STKk1FYHIWLpq/dVwsY5Q8ce89EiSYZyKE5drzpTQ=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/discord_game_utils/1/full.distro",
+ "hash": "sha256-teskTOsRJweCYeTvxS8PR5CEX4EaGm8tU/oseL4ad1s=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/discord_game_utils/1/full.distro",
"version": 1
},
"discord_krisp": {
- "hash": "sha256-93GXORqBh2IDZz7gwC1lLP/dHwfXK1wqfOdDl7nmy6w=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/discord_krisp/1/full.distro",
+ "hash": "sha256-k6oid+zDm+yfUTtSZY1Irm808zUa/5s+J4OQHPEI+1M=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/discord_krisp/1/full.distro",
"version": 1
},
"discord_modules": {
- "hash": "sha256-sMsii7pOnusjkmj9gzhRbyLGzAusYhizzZ0Unry+oYQ=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/discord_modules/1/full.distro",
+ "hash": "sha256-8iM6E+UQMOIXfFjqIvJb+VdfT5wF49gvKU4tX6lc3/Q=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/discord_modules/1/full.distro",
"version": 1
},
"discord_rpc": {
- "hash": "sha256-M6FtXDTGWsqafyQPsVIPJ3F0zUiJZxejuAGJg5MxF+E=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/discord_rpc/1/full.distro",
+ "hash": "sha256-wxiU4kGdLfpBA5MqLvGnzvlCutaSErRl82SEaL+Xn/I=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/discord_rpc/1/full.distro",
"version": 1
},
"discord_spellcheck": {
- "hash": "sha256-pkJLh3aZ99E5wuBF08uEU4fP9QqDn9Xrwtbk4i0Q/Rw=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/discord_spellcheck/1/full.distro",
+ "hash": "sha256-9r7wsEAg0LNbL1FbVJl/3pJ65h4nuSSnpUUy2iC7gMg=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/discord_spellcheck/1/full.distro",
"version": 1
},
"discord_utils": {
- "hash": "sha256-f01INbXJ1l/L5VuskTnz32YF9NH2R9/Apla2iYoEF5M=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/discord_utils/1/full.distro",
+ "hash": "sha256-AcPgnX4VhD+n9cTGru0qsOC838TCmjrtjtTNI86/Nts=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/discord_utils/1/full.distro",
"version": 1
},
"discord_voice": {
- "hash": "sha256-YDij0YVearAetTN/1j14eBle+7LKcYGdE1TDIbWH27Y=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/discord_voice/1/full.distro",
+ "hash": "sha256-UIruTOyO62eFeB7qfabr5rEhwzwd7jNUCqKtQnVfB7E=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/discord_voice/1/full.distro",
"version": 1
},
"discord_zstd": {
- "hash": "sha256-PC5yxqN/ky/ThGRMCCKBSZBqVUJjAV+sl41LlPCvHc0=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.992/discord_zstd/1/full.distro",
+ "hash": "sha256-ex0pjGnH8RgssZ64kfX+AA7f4THmPNUFb/pMiOZruX4=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/linux/x64/1.0.1001/discord_zstd/1/full.distro",
"version": 1
}
},
- "version": "1.0.992"
+ "version": "1.0.1001"
},
"linux-ptb": {
"distro": {
- "hash": "sha256-hZi+7k6+KoroSosJ5jOmhfKCrXqK5mzMlChvd+O57lE=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/full.distro"
+ "hash": "sha256-l8zQPa9N2lzJ4Rpsuhr8EsyXkwWXVTU0L7fm1+RzOJs=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/full.distro"
},
"kind": "distro",
"modules": {
"discord_cloudsync": {
- "hash": "sha256-g63Wz47H63bOiyLJ2V4/4z6ZpCVZFWkdJUEaYtTzv5U=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/discord_cloudsync/1/full.distro",
+ "hash": "sha256-qrdzHzhRaPSOdbAf2O2XqOUOMouh7HCMcTF5PFwBqBE=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/discord_cloudsync/1/full.distro",
"version": 1
},
"discord_desktop_core": {
- "hash": "sha256-78r6lth+V0OPEEJQ53FZhDGAS8RJ2/gGXqROi508Rzk=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/discord_desktop_core/1/full.distro",
+ "hash": "sha256-pA3U5WSNeH07RYpeer062khjGk9B1fLwlmGFRiH0XSY=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/discord_desktop_core/1/full.distro",
"version": 1
},
"discord_dispatch": {
- "hash": "sha256-Q+1rU46jP3/GuJ3yjvVk4xC0xHuY866JCPVsiqE2/Dk=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/discord_dispatch/1/full.distro",
+ "hash": "sha256-n0QRUZgqF7t0mTaNn44bUw4wo5YJwBt/nrfawpDRjGs=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/discord_dispatch/1/full.distro",
"version": 1
},
"discord_erlpack": {
- "hash": "sha256-Zxv+pZIiX/dgWLtQu+ouJIiaDECBGgcbxzVst/x5QtI=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/discord_erlpack/1/full.distro",
+ "hash": "sha256-OeYaeB6Uwtie9Gh7wEIXbWrzI3PRzForP0mBLAMdrSI=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/discord_erlpack/1/full.distro",
"version": 1
},
"discord_game_utils": {
- "hash": "sha256-HxQldTPK3dGuJyRKw6q23iyR4rO9UkASHa/F7zzHbX0=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/discord_game_utils/1/full.distro",
+ "hash": "sha256-qG+kR+IxMa9+12anqeuLaAQJdtgsXhItWUVIYvlNHmY=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/discord_game_utils/1/full.distro",
"version": 1
},
"discord_krisp": {
- "hash": "sha256-ptVbz0AcEttoldc7WV/nD1lYptJTnIy8p6QUD5pbkYg=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/discord_krisp/1/full.distro",
+ "hash": "sha256-UrTU83pYGII+URgwqgBCAWBUV7U2dH2Cyhc3O6IZkEM=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/discord_krisp/1/full.distro",
"version": 1
},
"discord_modules": {
- "hash": "sha256-ex9Jud2OTjcWZbcx+D39uyIrh6K5OJANCMc+zfx0Sv8=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/discord_modules/1/full.distro",
+ "hash": "sha256-KO+26TE5VHUnrdEwXYfYwKrwVZePmmlBH/tGL77gyq8=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/discord_modules/1/full.distro",
"version": 1
},
"discord_rpc": {
- "hash": "sha256-TZqW1pxrqVIszGLBcoKErZUoNGNeepRHNqaOXoG9rHs=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/discord_rpc/1/full.distro",
+ "hash": "sha256-iphB/rQ7Wx39EqpViid9MgOG50gH5BxsPARPDkJXhkM=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/discord_rpc/1/full.distro",
"version": 1
},
"discord_spellcheck": {
- "hash": "sha256-a20ZUdyDnnG31DnJP1+ADZxQbk3B1YKPrNPcb13S//4=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/discord_spellcheck/1/full.distro",
+ "hash": "sha256-OzYl5D/3F4T8TOdAtv8EcL+B2Jb9avlG8iSD18WsDss=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/discord_spellcheck/1/full.distro",
"version": 1
},
"discord_utils": {
- "hash": "sha256-W7m6Ql9L5GwRQnx9TUjbRZ8c0HGFfFriMoF6HC/RfZg=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/discord_utils/1/full.distro",
+ "hash": "sha256-lfkvyLXha83pV/H9NCf0+8ky+PK6AuNmW9zKj8lCmeE=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/discord_utils/1/full.distro",
"version": 1
},
"discord_voice": {
- "hash": "sha256-S9z/eS5P4sn5yuPdHP9HrmreEIU5vE44Np6QtHVdZm0=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/discord_voice/1/full.distro",
+ "hash": "sha256-BH+AGzAKJulallcT1pP06xC1Ib8t0Rq85rMWJujWQDA=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/discord_voice/1/full.distro",
"version": 1
},
"discord_zstd": {
- "hash": "sha256-rhoLsPy3zW5+bQuGYGxMtgDHaICrSKapTQD4Zcw3GHo=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.193/discord_zstd/1/full.distro",
+ "hash": "sha256-HleJ0AvFtKKxBqWn3UAVRHBFMQi2fdHoYCPimCDmVJc=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/linux/x64/1.0.198/discord_zstd/1/full.distro",
"version": 1
}
},
- "version": "1.0.193"
+ "version": "1.0.198"
},
"linux-stable": {
"distro": {
- "hash": "sha256-XqiD6DtJgFPmh4cSBgbvz52uBnJ7FUZ+VMcB9KxBzeE=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/full.distro"
+ "hash": "sha256-DOc00KaMDkG0ggfeB3XaoFNDLB5DNFCsy0LpNcRTSNo=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/full.distro"
},
"kind": "distro",
"modules": {
"discord_cloudsync": {
- "hash": "sha256-NHT/o5cb0VQZQ4CaItCHTOkfXEjYqPlIA3gSSLvCgJk=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/discord_cloudsync/1/full.distro",
+ "hash": "sha256-zrREHNdv2oD9IiYroQwmwGCXoGopJ9FOPtfzJZEtJQ8=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/discord_cloudsync/1/full.distro",
"version": 1
},
"discord_desktop_core": {
- "hash": "sha256-THCGUwshMlNWCHgTf0d/W2SlBDEUcZ5dg255O4DwQHQ=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/discord_desktop_core/1/full.distro",
+ "hash": "sha256-jz/qQx+B1HraLPc+cuWeLMI/yJEx/OGPWdSBctqmjE4=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/discord_desktop_core/1/full.distro",
"version": 1
},
"discord_dispatch": {
- "hash": "sha256-C1742juma1bCGVWMCT903BFHNedc6V+iws8kKTQBE4M=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/discord_dispatch/1/full.distro",
+ "hash": "sha256-jjSf/9zBWqZ90HskSd2x0Kxi7dy2Yd2wdpO7q/ksSVE=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/discord_dispatch/1/full.distro",
"version": 1
},
"discord_erlpack": {
- "hash": "sha256-IrLq1n96rm1YE1UA/P2b9VHzX09Wa4DT9yj5wHhytno=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/discord_erlpack/1/full.distro",
+ "hash": "sha256-gStY1JHxI7NVZ+ZrRIFepDtGmfScaQYv/UF+aumnkxM=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/discord_erlpack/1/full.distro",
"version": 1
},
"discord_game_utils": {
- "hash": "sha256-Y3shNsfjcBvSvUt+D56qIMaa73lpF/+c/jURWd9hV/g=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/discord_game_utils/1/full.distro",
+ "hash": "sha256-7UMUAB48PFnGPrzQE5bbdT5dNk08+5I/TIIFj4Sog3U=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/discord_game_utils/1/full.distro",
"version": 1
},
"discord_krisp": {
- "hash": "sha256-b+n1X67Iscs1Cjq7KbpXBqqIC35tWqaQh/hPEbq0vuc=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/discord_krisp/1/full.distro",
+ "hash": "sha256-DsnIrErojTUd7jN5YNoE2opqFC34ykKP+WkcU0TksFw=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/discord_krisp/1/full.distro",
"version": 1
},
"discord_modules": {
- "hash": "sha256-U3f+1y1WlGZuP5OlJ4AeakhNYXlx5xbKqHjiCFfGg0E=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/discord_modules/1/full.distro",
+ "hash": "sha256-3awhenotD42Frkp6RZx6QwzCyOmpXIznasG2ihGjiDs=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/discord_modules/1/full.distro",
"version": 1
},
"discord_rpc": {
- "hash": "sha256-rtBhw5MHG/MCAVG2YvzKOEVmN8f02DPI5LBKg8Qj9ZA=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/discord_rpc/1/full.distro",
+ "hash": "sha256-OT/o8zvHG2QaLvme3F9QhB9qrfadX5iUAYKIPdkAjgE=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/discord_rpc/1/full.distro",
"version": 1
},
"discord_spellcheck": {
- "hash": "sha256-BFTkMV1n9ann2c+GMiuIHZexGO8C/yOi8sbBWrqErKE=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/discord_spellcheck/1/full.distro",
+ "hash": "sha256-GWRqjMnJBeZi5aR61s9BieoEoc6IYxRRxgRw+q0xdh4=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/discord_spellcheck/1/full.distro",
"version": 1
},
"discord_utils": {
- "hash": "sha256-isXprPxivFIdD1Cvb7tbhdWSNPbU3Rrv2muYg6tXW0M=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/discord_utils/1/full.distro",
+ "hash": "sha256-AJftqpwcrGzu203HgucYHDYGkIWEFhU0eKYHSgF29zc=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/discord_utils/1/full.distro",
"version": 1
},
"discord_voice": {
- "hash": "sha256-v60GjLJ3LuAppMRSjZQNWSLEamswDcTm/AjtwG04fgM=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/discord_voice/1/full.distro",
+ "hash": "sha256-ViHQZnR6mxYKH51n63TJjniaJC63dxpNI/m60uV88dc=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/discord_voice/1/full.distro",
"version": 1
},
"discord_zstd": {
- "hash": "sha256-Db8KbISU5W8G0qfqGaumrOZU75B6IWBzf3JFIyUzadU=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.141/discord_zstd/1/full.distro",
+ "hash": "sha256-HpB27U60HXn9rNu6Mi8JLzWZ0DGIUKZJh1r91myTBg4=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/linux/x64/1.0.146/discord_zstd/1/full.distro",
"version": 1
}
},
- "version": "1.0.141"
+ "version": "1.0.146"
},
"osx-canary": {
"distro": {
- "hash": "sha256-cKGa089UswaZzoAHzkStkROitXDNUMmGENQzUkrmTlY=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/full.distro"
+ "hash": "sha256-MABVLE+3vnmBCmhHVpJqIKpxDBzj7N5ulcNBqWDUp94=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/full.distro"
},
"kind": "distro",
"modules": {
"discord_cloudsync": {
- "hash": "sha256-9QGggOph9Xs4Q/LjnZ3KFwhXxgNRyli9fNoFz6H3jqM=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_cloudsync/1/full.distro",
+ "hash": "sha256-fLocipTy9vP6rf4XjaFuZDUQnWoaakmcbjLYOnh5OFg=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_cloudsync/1/full.distro",
"version": 1
},
"discord_desktop_core": {
- "hash": "sha256-UNTm7ItVQkEIEb6htmc13DxEJdqli0uL69OR9ADVAEk=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_desktop_core/1/full.distro",
+ "hash": "sha256-1IJai0qH3RVA5jkzqf1KkCZlz+1D/KNBRGf8HlUGZWY=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_desktop_core/1/full.distro",
"version": 1
},
"discord_dispatch": {
- "hash": "sha256-TihLreO5lbuQGAxljjAaPZVr+KGmmveqTd6tUYvKV1I=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_dispatch/1/full.distro",
+ "hash": "sha256-L95JqWyryZYAKuOWUZ+gexgTlziWfl41hopVBVCqjLs=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_dispatch/1/full.distro",
"version": 1
},
"discord_erlpack": {
- "hash": "sha256-oaUEWbrxizY/kP1IPHhumErlTKQVQMRyt5P/7dJU9DI=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_erlpack/1/full.distro",
+ "hash": "sha256-xb3fxy6MqhnqN1i5HTJi3L6GPYxAPvfkahtMV0WlT7U=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_erlpack/1/full.distro",
"version": 1
},
"discord_game_utils": {
- "hash": "sha256-KCA77WXi9MFBfH04DLpiJCcUnX6V03UbiN2ZhvR951k=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_game_utils/1/full.distro",
+ "hash": "sha256-HsqjBvYiBkJ/xjmEhX+TR7UkokxnLe3LEPOEBB2RHd4=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_game_utils/1/full.distro",
"version": 1
},
"discord_intents": {
- "hash": "sha256-LDzacYKK1/6blKRI+9fLMz83GT7QpAkw7R9pFzpO2Rg=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_intents/1/full.distro",
+ "hash": "sha256-gEozULgI4A+iNcIabHmB1iWH+LNQKQnSTId+/r2X4go=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_intents/1/full.distro",
"version": 1
},
"discord_krisp": {
- "hash": "sha256-Xmcukut0dljr87fHH3hLuuum1aKaEbyz6/Doy+5aOOc=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_krisp/1/full.distro",
+ "hash": "sha256-6W7CuREYkbZIRAaFHxkTNPLl6ScHDej2NWnmcTEcgpY=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_krisp/1/full.distro",
"version": 1
},
"discord_modules": {
- "hash": "sha256-EAPj4leGDWMV/80fZUJjgsJDea5e+GAEhl8fyU7i/7o=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_modules/1/full.distro",
+ "hash": "sha256-kpLahPp2iWcFBHJgblEg9g/lk19e6os/Kz//Yl5oge4=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_modules/1/full.distro",
"version": 1
},
"discord_notifications": {
- "hash": "sha256-N5ZsYM7Y/XcMG6nOc3xVd4zg16MlozmZXK1xO3ARW/8=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_notifications/1/full.distro",
+ "hash": "sha256-RvSKe1XNvXqoE/MPl8/9bOhA+tW71cnc7EYd/L39dKE=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_notifications/1/full.distro",
"version": 1
},
"discord_rpc": {
- "hash": "sha256-NvwdAvR6fZd/Hlcw3Kb5sINche3ZdiTwQO0P0nY3jVQ=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_rpc/1/full.distro",
+ "hash": "sha256-dGLMa/SYxy4RPrqfj6oVF2i6xrFZbgkv08kaaVl7uXo=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_rpc/1/full.distro",
"version": 1
},
"discord_spellcheck": {
- "hash": "sha256-4V0Ij/kniCO46cmy8pYOc7Hu2VFRuSYx1EmTV+wZDsQ=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_spellcheck/1/full.distro",
+ "hash": "sha256-LqyZA0KhqLrbw8Scw1Ctt8VPcE5sbOnTEQp29FMqiXg=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_spellcheck/1/full.distro",
"version": 1
},
"discord_utils": {
- "hash": "sha256-zPVB5RaxPLSyakY8ZqyyVNWuZEJog78KOROHbupxTSs=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_utils/8/full.distro",
- "version": 8
+ "hash": "sha256-Mab3V31DCfao0Hpe7p0aBOpWAiYFNay2FcBIO3ENL28=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_utils/3/full.distro",
+ "version": 3
},
"discord_voice": {
- "hash": "sha256-1CSPUCxqeLQxSHZWlSeAYIj9XqCXWD2gxcR4F9kd+54=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_voice/6/full.distro",
- "version": 6
+ "hash": "sha256-s6xAtPnD24uGEuvfHgtySWHIgSbtMhihfxdmWWSgED4=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_voice/1/full.distro",
+ "version": 1
},
"discord_webauthn": {
- "hash": "sha256-ZMo19cg7Q0uXdDATAHkYWzDrU44jXicHeqpsIiA0iEs=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_webauthn/1/full.distro",
+ "hash": "sha256-e0K4owkgsogjveuWlvXSpvmT0Roic0Udz1aN5lAm4ME=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_webauthn/1/full.distro",
"version": 1
},
"discord_zstd": {
- "hash": "sha256-NyK4eH6joep5BzM91AZLRU3jXC2sXdSp3/s4w/Xqkn0=",
- "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1132/discord_zstd/1/full.distro",
+ "hash": "sha256-DfwIq15/ymRoPTHWBPmMtOZnfplpeOflFTUixq33bf0=",
+ "url": "https://canary.dl2.discordapp.net/distro/app/canary/osx/universal/0.0.1187/discord_zstd/1/full.distro",
"version": 1
}
},
- "version": "0.0.1132"
+ "version": "0.0.1187"
},
"osx-development": {
"distro": {
- "hash": "sha256-9rlxgLp8PxtuFSjK+nDshIiDigjsBjox2bUI7cp1XXs=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/full.distro"
+ "hash": "sha256-Oh7Z3Vgz6X94gouVGH6ZK1cyY8xJB5sRD4SGV0bLJGU=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/full.distro"
},
"kind": "distro",
"modules": {
"discord_cloudsync": {
- "hash": "sha256-6DAvT/Rocsu6tYMMt4VJMmfhYxLw1Hl0EgJK6hmw6j0=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_cloudsync/1/full.distro",
+ "hash": "sha256-f7oEWFia4x12EzKdsedVXF/SRRqdcrD+I8jqs9zrKkA=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_cloudsync/1/full.distro",
"version": 1
},
"discord_desktop_core": {
- "hash": "sha256-xA53RC1WAcsmyKl5c2f2CGhFzficibB/h7psEsr3IRs=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_desktop_core/1/full.distro",
+ "hash": "sha256-v3rQ9qIb/n4YCKzmajU0IDHz3hV/y+k+KytmQ/YXmLk=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_desktop_core/1/full.distro",
"version": 1
},
"discord_dispatch": {
- "hash": "sha256-ebWRxbIIsrf72bj1NoxamL2cxZNrmvkRxfB/jXS6HmI=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_dispatch/1/full.distro",
+ "hash": "sha256-SHfcGs/NBldbjbmL0BJZd/WTYom6AcVG7I5m7ymNPZc=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_dispatch/1/full.distro",
"version": 1
},
"discord_erlpack": {
- "hash": "sha256-GLaAXTePgAWeRwVskt+tBtrVTn3miadBWImPMibG/+Y=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_erlpack/1/full.distro",
+ "hash": "sha256-Y7BqeSkpZcyOpkI0GJyw6WZUBJRYoVL+bupbf1SojPc=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_erlpack/1/full.distro",
"version": 1
},
"discord_game_utils": {
- "hash": "sha256-A2+GyRC/RXTMnDagsT6zP1S5T+PCyMK55eiEF2JMV84=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_game_utils/1/full.distro",
+ "hash": "sha256-4ZMhl4mCSkHHjyqz1t4x2uGmLa1X317GzFHrWAxqfuY=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_game_utils/1/full.distro",
"version": 1
},
"discord_intents": {
- "hash": "sha256-sjylilIyOziJgH4gl+1Y6oIB1drMF7EWrt2mVMliCoU=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_intents/1/full.distro",
+ "hash": "sha256-rhubNaouXncxstHF6AMbp8rF6GWVZwP9466jPYSFRK0=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_intents/1/full.distro",
"version": 1
},
"discord_krisp": {
- "hash": "sha256-w4ZRMT30/KzMrXv0wxUd0U9yv95jOVhSG/6zzbrBaG8=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_krisp/1/full.distro",
- "version": 1
- },
- "discord_ml": {
- "hash": "sha256-TVyM430eeKoq9RNXoLmd1xe2t3xqgxmbQd5G5+chcnI=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_ml/1/full.distro",
+ "hash": "sha256-AJy1HPU6gCkvymmF0VJtioJ4b0iWl68LK6oD3ZqPmlM=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_krisp/1/full.distro",
"version": 1
},
"discord_modules": {
- "hash": "sha256-TKsAh8tNHzQELizvKfMcfLvm0h4F69iON2VBIWq3qxY=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_modules/1/full.distro",
+ "hash": "sha256-1b1JyS8rk0roXq2Pj38asbtqV0Tv54QN51ayHfMfQFg=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_modules/1/full.distro",
"version": 1
},
"discord_notifications": {
- "hash": "sha256-O1+hqRWztrhlYvyHv/oYTO82Ru5VRwPxo7FyAQSbgkI=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_notifications/1/full.distro",
+ "hash": "sha256-K+qPQAS+a+Aw62XTQRT+QKCXhMCcTyXidXgfVlQW7gM=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_notifications/1/full.distro",
"version": 1
},
"discord_rpc": {
- "hash": "sha256-zcx4PDynhCApRWJyI1KA8t4IS0flDxtc9NGiT3mqaKY=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_rpc/1/full.distro",
+ "hash": "sha256-1pmg/bEY+88kB2YC5wLpaGGqKiT/B3XYbadUVsBmna0=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_rpc/1/full.distro",
"version": 1
},
"discord_spellcheck": {
- "hash": "sha256-A0gObDSLQWb3Fp+f/xQC8ij2mGBdzeHMuC+A5+XpZdo=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_spellcheck/1/full.distro",
+ "hash": "sha256-xIB3D9YXDlsquJZYEkSu2tMtC/J+NGe/seHN1UwVGGM=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_spellcheck/1/full.distro",
"version": 1
},
"discord_utils": {
- "hash": "sha256-SvipA8cXIeeFkBC9RdcNHielVmpwlilGB0mmHFXNUx0=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_utils/1/full.distro",
+ "hash": "sha256-6C0B2Vylwjhx4H1W2LkgUgrzwyNDDwFhM6nOOUn5tGY=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_utils/1/full.distro",
"version": 1
},
"discord_voice": {
- "hash": "sha256-BQhaZXj8jVuNtVvGN5nmSfkv2OpETTu+VRt/AZzkSms=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_voice/1/full.distro",
+ "hash": "sha256-Bifs4a+ezNg+wLIyI4y1F8aXMNifq4XcPlnh/GxP73I=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_voice/1/full.distro",
"version": 1
},
"discord_webauthn": {
- "hash": "sha256-XRs6HhQ5XOhQZ2CjhzNW8jMFORby80eWUU5FHBN0Ui8=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_webauthn/1/full.distro",
+ "hash": "sha256-pcowWk2E/oeisZPUvzpgUChv0SotEjdlwvo4DSDmiA8=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_webauthn/1/full.distro",
"version": 1
},
"discord_zstd": {
- "hash": "sha256-9cRSkG1gVP6+casDOnJ1gSknXh1kumIeUQd+EcLtNZM=",
- "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.993/discord_zstd/1/full.distro",
+ "hash": "sha256-RO25Js1nsUR0Mjakjebvk+xA0qSq8csgyu7Goqm7Dm0=",
+ "url": "https://development.dl2.discordapp.net/distro/app/development/osx/universal/1.0.1002/discord_zstd/1/full.distro",
"version": 1
}
},
- "version": "1.0.993"
+ "version": "1.0.1002"
},
"osx-ptb": {
"distro": {
- "hash": "sha256-yxbYcpaoUkUlHIC2wf3yVYlxM1KBcCA6vnXqeUctRhQ=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/full.distro"
+ "hash": "sha256-8rGN6l46T86ITq5sietYgvzBXmXoT6nwzjMnuuQSjZA=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/full.distro"
},
"kind": "distro",
"modules": {
"discord_cloudsync": {
- "hash": "sha256-RDTWKgPcehCjcR1J+jmj+ICZz65ozCMS1zPxroTcxE0=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_cloudsync/1/full.distro",
+ "hash": "sha256-HBRk6tuF/ZVUwdbTc12WAB0yoO/LvpgeKDcbicTBdZA=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_cloudsync/1/full.distro",
"version": 1
},
"discord_desktop_core": {
- "hash": "sha256-w3yILQKWaqX6rXFmDhpakUlw5xFW6LI7Z3CL1lPddsI=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_desktop_core/1/full.distro",
+ "hash": "sha256-g93AhKKuH7AzT9Y8ffrHG9hRebkWKYYOjjcs++yUdEE=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_desktop_core/1/full.distro",
"version": 1
},
"discord_dispatch": {
- "hash": "sha256-RnOLwaCiWS04PFD/d3XLL6erxtDYYrNJ0D6YCcE0uMk=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_dispatch/1/full.distro",
+ "hash": "sha256-e7mbVl2k7M36/sZx71kYvrLDMy42yNrsRqqjZMiWCuA=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_dispatch/1/full.distro",
"version": 1
},
"discord_erlpack": {
- "hash": "sha256-IgeoTXiFWw4BcljPwl7fqAL+Av6bRLFT80tfG5v2Muw=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_erlpack/1/full.distro",
+ "hash": "sha256-efKY4APaWuWfExbIc4FDml2uiDyjHtUJienynt971gM=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_erlpack/1/full.distro",
"version": 1
},
"discord_game_utils": {
- "hash": "sha256-dOSI1OTNkfxfWisrl9DTA8WRU/PjS05c0ZDzNBbBpRg=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_game_utils/1/full.distro",
+ "hash": "sha256-DpoEfSuoD9p4cdAFCA/qZ3hLcczSo6MBkfo4fxb+A4E=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_game_utils/1/full.distro",
"version": 1
},
"discord_intents": {
- "hash": "sha256-EFeUxVEPex20Mrfd04dHYCpfKZM4zIZqOEyREixPcqI=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_intents/1/full.distro",
+ "hash": "sha256-jTXiR+et6y6AgNBVNrgeapxeuzR0/DWp8su8GhsQSAQ=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_intents/1/full.distro",
"version": 1
},
"discord_krisp": {
- "hash": "sha256-XkzYfeQ32JpdzmIOnYBi9bsSSJFCzbSDFNHAPFcAwGc=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_krisp/1/full.distro",
+ "hash": "sha256-tYwNFZW/BUJtKxRZnaJSRR4XFeDi+IW7o3+PjQkBlSo=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_krisp/1/full.distro",
"version": 1
},
"discord_modules": {
- "hash": "sha256-v7Hdk7WO2wCRbJD6SOHfUKAFX8ZVYfe5qhNHnTZvsZk=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_modules/1/full.distro",
+ "hash": "sha256-9kKjZzWePOU35wDHiBsl0zII9o5RH4eyOyCPFZR0XZo=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_modules/1/full.distro",
"version": 1
},
"discord_notifications": {
- "hash": "sha256-T+4YM57ZbYZSSCPsAgfqcdVl3Ifuf5q/j3p9YUGHfwM=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_notifications/1/full.distro",
+ "hash": "sha256-+3dkquHgrax8lj7n08Xx9HF6OQ01WIL5d+aCY26nhLU=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_notifications/1/full.distro",
"version": 1
},
"discord_rpc": {
- "hash": "sha256-hPPQ5+jHeJSMG3SythZrndhU2F5sl6am3K1lVtDrE40=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_rpc/1/full.distro",
+ "hash": "sha256-rWC5DloPUbkvDIEBPKg4EKDY5FSacBshxo+vJvuJ5AE=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_rpc/1/full.distro",
"version": 1
},
"discord_spellcheck": {
- "hash": "sha256-yIHkUjjWaPTwvlVaKlucpZUimVWbGd3dDOKOoWcJJAc=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_spellcheck/1/full.distro",
+ "hash": "sha256-M9TflkDKRWbTPi+cgW3PrEYCB7zp3Woc9yB/pNH8p6E=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_spellcheck/1/full.distro",
"version": 1
},
"discord_utils": {
- "hash": "sha256-DgAQns2Ky1nBABIhTuSfjvLLOry0/sDx6TRUfVqy8PA=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_utils/1/full.distro",
+ "hash": "sha256-3zpREVrc0xRUPAKNg01O40Koq8lUTrMLVq+y/Prjph4=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_utils/1/full.distro",
"version": 1
},
"discord_voice": {
- "hash": "sha256-esidGrZQjLpOix2HWYYEPwCoU/QcU6AGM7XZPMvSzsA=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_voice/1/full.distro",
+ "hash": "sha256-J0LWWnNHquFmL9A21aTWNtoSQFokRRaWCn9j7vbTrc8=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_voice/1/full.distro",
"version": 1
},
"discord_webauthn": {
- "hash": "sha256-Iwl0cgBmJdAFUSyq+l6wuIAS633yxwBl0lxUktmKa5Y=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_webauthn/1/full.distro",
+ "hash": "sha256-awMRcEndx6Z7gakNs+xjU0B1xTkpzKLy6mh0FzV9FaM=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_webauthn/1/full.distro",
"version": 1
},
"discord_zstd": {
- "hash": "sha256-GTWMUSTNYa4ZdmSBy0a3+PejYRITwTLrj5MOZsCVW4U=",
- "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.237/discord_zstd/1/full.distro",
+ "hash": "sha256-pKQb8nsBQYttsfxVSr8x9OcIyMcvqZOqRfoRL+VkGbg=",
+ "url": "https://ptb.dl2.discordapp.net/distro/app/ptb/osx/universal/0.0.243/discord_zstd/1/full.distro",
"version": 1
}
},
- "version": "0.0.237"
+ "version": "0.0.243"
},
"osx-stable": {
"distro": {
- "hash": "sha256-y8Dr+me5JFnw5/kMcnce1YCjiAN1mqOw77NHykAYQKY=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/full.distro"
+ "hash": "sha256-uIFpupv+dYzsrm7u4oRD16xgcJGdB0F66Y8PloIuhNs=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/full.distro"
},
"kind": "distro",
"modules": {
"discord_cloudsync": {
- "hash": "sha256-+MaEpY7bCNqJNOk2VcHDBM1ZEEctvkjDJIoO0dCTa/0=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_cloudsync/1/full.distro",
+ "hash": "sha256-XmekQCmlwasCDjk8PKqYb1NlsCRYncYA8NEHZ64nIBI=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_cloudsync/1/full.distro",
"version": 1
},
"discord_desktop_core": {
- "hash": "sha256-n0i+FEtNF6ZOrZNBzSex5pMUtnR9j6kllCsVk7yYN70=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_desktop_core/1/full.distro",
+ "hash": "sha256-vRkYtbDncwynzAHMPbrcgbue8eNwD192ZTWpKlhMts0=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_desktop_core/1/full.distro",
"version": 1
},
"discord_dispatch": {
- "hash": "sha256-Qo1cGTH5wQe4Cpzfld5Z/D/C+BKzjAw/d2nk/EUgj3c=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_dispatch/1/full.distro",
+ "hash": "sha256-33M/ThvatgTHmPY6CIVG1kTrzNqaiz5kEyKS7o20m2Q=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_dispatch/1/full.distro",
"version": 1
},
"discord_erlpack": {
- "hash": "sha256-jC+2AXMlD0d2+Bcme1lHsAXYn1Dj+vvxjvWK41SvODg=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_erlpack/1/full.distro",
+ "hash": "sha256-yWIUP5aJ4X+Cb0RkS4yTg8DMywdoXW3hSQa7FGmbLXg=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_erlpack/1/full.distro",
"version": 1
},
"discord_game_utils": {
- "hash": "sha256-HoEsai4W/z6W3sLCGoP6v1BWmuZQvmzOXLLCIUkXNqk=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_game_utils/1/full.distro",
+ "hash": "sha256-vnXPaWtiSg0rbX7MGo//+jI+jVGEZvsSBo+TzFAwW2U=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_game_utils/1/full.distro",
"version": 1
},
"discord_intents": {
- "hash": "sha256-Tk3D3Ail8Bu9+mYbASLJDsSAltD/f/g7q1/vUlIIutc=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_intents/1/full.distro",
+ "hash": "sha256-LMzWKuGH6nFaFgPuzL6NZd4HIxO+0VFqbagoNb1lV8M=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_intents/1/full.distro",
"version": 1
},
"discord_krisp": {
- "hash": "sha256-6Vt93M5bwstZEn7mb33w2IlgpvstGa6kGTV+Tza92B4=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_krisp/1/full.distro",
+ "hash": "sha256-p+3SKNKUsrGlLA5GkkYr2TD7k7ldVIxH90u6TxW5OtI=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_krisp/1/full.distro",
"version": 1
},
"discord_modules": {
- "hash": "sha256-Hl+q4s2zYWa57RwpyZ4p9oEfkUl1ekq6xrKitS4BPN0=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_modules/1/full.distro",
+ "hash": "sha256-iamZlUKVHMlm3ZCX6kVx7EfEP1Xsox5a1DL+TzyPZ4U=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_modules/1/full.distro",
"version": 1
},
"discord_notifications": {
- "hash": "sha256-rnHE+V90VsR9DWDZ9jN2+pRrQu96clqNq9sFoMpiNZg=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_notifications/1/full.distro",
+ "hash": "sha256-UUdOFaSrcWdvslEAUtkaio9GjsdIKvJ3it871ZcdX9c=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_notifications/1/full.distro",
"version": 1
},
"discord_rpc": {
- "hash": "sha256-azkCFwPM51sqHjbgsRCOyoPlBMwf+wVt2qrlTl1v+1c=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_rpc/1/full.distro",
+ "hash": "sha256-i9X90vIFc2Sf/NEHcc9EOqd9vHRl0liOOeJiu8VsjDs=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_rpc/1/full.distro",
"version": 1
},
"discord_spellcheck": {
- "hash": "sha256-x7qjYGYC4LDbk3wDxDOjqo/cBoyRJQlzsXpoyJyzFnU=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_spellcheck/1/full.distro",
+ "hash": "sha256-mWYbD4w/Hg53Ncl+b4dDAqw/iXvIlFa2OQZanhAdN4Q=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_spellcheck/1/full.distro",
"version": 1
},
"discord_utils": {
- "hash": "sha256-sdvSFA7GZS6dUXiemSJpsn92UhaRlNCH9N8UkgQRV/Y=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_utils/1/full.distro",
+ "hash": "sha256-S7N+84gmA8jTN4FOVhFt1jRtku+hvACJ+SH75gvZXcA=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_utils/1/full.distro",
"version": 1
},
"discord_voice": {
- "hash": "sha256-2/oH5L7MIIsKLavU4J0O8/hqzFx9BpY9LSuSJKaSwDo=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_voice/1/full.distro",
+ "hash": "sha256-2AenCW7EKw1R+znM1wGaiw8UHDZSKCqwmzNeFhqIyx8=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_voice/1/full.distro",
"version": 1
},
"discord_webauthn": {
- "hash": "sha256-z0sbteCmrXjvWathL+c1oXL63UV9fhGYtTEOXnBqa4o=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_webauthn/1/full.distro",
+ "hash": "sha256-fR6ArgR+/oo1QpkJQ1GralesT1o7W9hvuRxN5NjXGGI=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_webauthn/1/full.distro",
"version": 1
},
"discord_zstd": {
- "hash": "sha256-mCzmStANoOc4b/UPZmkndzhnxZ1H6Q+rnNsroObPnCg=",
- "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.393/discord_zstd/1/full.distro",
+ "hash": "sha256-JUbwxsOw5XAE+EWj1F67kCXLHmltLCwsz9kC4E7/O5Q=",
+ "url": "https://stable.dl2.discordapp.net/distro/app/stable/osx/universal/0.0.398/discord_zstd/1/full.distro",
"version": 1
}
},
- "version": "0.0.393"
+ "version": "0.0.398"
}
}
diff --git a/pkgs/applications/networking/instant-messengers/gajim/default.nix b/pkgs/applications/networking/instant-messengers/gajim/default.nix
index d5fe7bb3f3c5..e9b623befca0 100644
--- a/pkgs/applications/networking/instant-messengers/gajim/default.nix
+++ b/pkgs/applications/networking/instant-messengers/gajim/default.nix
@@ -13,10 +13,6 @@
glib-networking,
libadwaita,
- # Test dependencies
- xvfb-run,
- dbus,
-
# Optional dependencies
enableJingle ? true,
farstream,
@@ -25,7 +21,6 @@
gst-libav,
gst-plugins-good,
libnice,
- enableE2E ? true,
enableSecrets ? true,
libsecret,
enableRST ? true,
@@ -41,16 +36,16 @@
extraPythonPackages ? ps: [ ],
}:
-python3.pkgs.buildPythonApplication rec {
+python3.pkgs.buildPythonApplication (finalAttrs: {
pname = "gajim";
- version = "2.4.6";
+ version = "2.5.0";
src = fetchFromGitLab {
domain = "dev.gajim.org";
owner = "gajim";
repo = "gajim";
- tag = version;
- hash = "sha256-QHfJ52uMDlE/rqqy7y2JIQLMOPaTp7eh4DEsPLBx6p8=";
+ tag = finalAttrs.version;
+ hash = "sha256-3/HQNizXLjeQpCdEK14LMflyNUKF1BI8eli3BGxiH40=";
};
pyproject = true;
@@ -60,11 +55,11 @@ python3.pkgs.buildPythonApplication rec {
adwaita-icon-theme
gtksourceview5
glib-networking
+ gstreamer
+ gst-plugins-base
]
++ lib.optionals enableJingle [
farstream
- gstreamer
- gst-plugins-base
gst-libav
gst-plugins-good
libnice
@@ -115,44 +110,35 @@ python3.pkgs.buildPythonApplication rec {
httpx
h2
truststore
+ pysequoia
]
++ httpx.optional-dependencies.socks
- ++ lib.optionals enableE2E [
- pycrypto
- python-gnupg
- ]
++ lib.optional enableRST docutils
++ extraPythonPackages python3.pkgs;
nativeCheckInputs = [
- xvfb-run
- dbus
+ python3.pkgs.pytestCheckHook
];
- checkPhase = ''
- xvfb-run dbus-run-session \
- --config-file=${dbus}/share/dbus-1/session.conf \
- ${python3.interpreter} -m unittest discover -s test/gui -v
- ${python3.interpreter} -m unittest discover -s test/common -v
- '';
-
- # test are broken in 1.7.3, 1.8.0
- doCheck = false;
-
# necessary for wrapGAppsHook3
strictDeps = false;
meta = {
homepage = "http://gajim.org/";
- description = "Jabber client written in PyGTK";
+ description = "XMPP chat client";
+ longDescription = "Gajim aims to be an easy to use and fully-featured XMPP client. Just chat with your friends or family, easily share pictures and thoughts or discuss the news with your groups.";
+ changelog = "https://dev.gajim.org/gajim/gajim/-/blob/${finalAttrs.version}/ChangeLog";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [
raskin
hlad
vbgl
+ haansn08
];
+ donationPage = "https://liberapay.com/Gajim";
downloadPage = "http://gajim.org/download/";
platforms = lib.platforms.linux;
mainProgram = "gajim";
+ identifiers.cpeParts = lib.meta.cpeFullVersionWithVendor "gajim" finalAttrs.version;
};
-}
+})
diff --git a/pkgs/applications/networking/instant-messengers/hydrogen-web/unwrapped.nix b/pkgs/applications/networking/instant-messengers/hydrogen-web/unwrapped.nix
index b6fc9a80f8a5..adbe9fa9659c 100644
--- a/pkgs/applications/networking/instant-messengers/hydrogen-web/unwrapped.nix
+++ b/pkgs/applications/networking/instant-messengers/hydrogen-web/unwrapped.nix
@@ -64,7 +64,6 @@ stdenv.mkDerivation (finalAttrs: {
meta = {
description = "Lightweight matrix client with legacy and mobile browser support";
homepage = "https://github.com/element-hq/hydrogen-web";
- teams = [ lib.teams.matrix ];
license = lib.licenses.asl20;
platforms = lib.platforms.all;
inherit (olm.meta) knownVulnerabilities;
diff --git a/pkgs/applications/networking/instant-messengers/linphone/mediastreamer2/default.nix b/pkgs/applications/networking/instant-messengers/linphone/mediastreamer2/default.nix
index f4f3561ecd3e..cc90b0138a50 100644
--- a/pkgs/applications/networking/instant-messengers/linphone/mediastreamer2/default.nix
+++ b/pkgs/applications/networking/instant-messengers/linphone/mediastreamer2/default.nix
@@ -5,6 +5,7 @@
glew,
gsm,
lib,
+ libsm,
libx11,
libxext,
libopus,
@@ -47,6 +48,7 @@ mkLinphoneDerivation (finalAttrs: {
ffmpeg_4
glew
+ libsm
libx11
libxext
libpulseaudio
diff --git a/pkgs/applications/networking/instant-messengers/pidgin/default.nix b/pkgs/applications/networking/instant-messengers/pidgin/default.nix
index cff21dd33d16..b30c26877e9e 100644
--- a/pkgs/applications/networking/instant-messengers/pidgin/default.nix
+++ b/pkgs/applications/networking/instant-messengers/pidgin/default.nix
@@ -175,7 +175,7 @@ let
homepage = "https://pidgin.im/";
license = lib.licenses.gpl2Plus;
platforms = lib.platforms.unix;
- maintainers = [ lib.maintainers.lucasew ];
+ maintainers = [ ];
};
};
diff --git a/pkgs/applications/networking/instant-messengers/profanity/default.nix b/pkgs/applications/networking/instant-messengers/profanity/default.nix
index 31c6c9cdfc6e..117a95f4e476 100644
--- a/pkgs/applications/networking/instant-messengers/profanity/default.nix
+++ b/pkgs/applications/networking/instant-messengers/profanity/default.nix
@@ -2,8 +2,8 @@
lib,
stdenv,
fetchFromGitHub,
- autoconf-archive,
- autoreconfHook,
+ meson,
+ ninja,
cmocka,
curl,
expat,
@@ -12,7 +12,6 @@
glibcLocales,
libstrophe,
libmicrohttpd,
- libotr,
libuuid,
ncurses,
openssl,
@@ -35,41 +34,39 @@
python3,
traySupport ? true,
gtk3,
+ otrSupport ? true,
+ libotr,
+ avatarScalingSupport ? true,
+ spellcheckSupport ? true,
+ enchant,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "profanity";
- version = "0.17.0";
+ version = "0.18.2";
src = fetchFromGitHub {
owner = "profanity-im";
repo = "profanity";
rev = finalAttrs.version;
- hash = "sha256-fZFLEkbwiYeAtnqDOImV8aXbYGMqO9TEcXPFMuchJaE=";
+ hash = "sha256-rPiYzG5KvJyKt7b99AImmO6wTYxZPFcf/6Xhz8SrgIo=";
};
- patches = [
- ./patches/packages-osx.patch
- ];
-
enableParallelBuilding = true;
nativeBuildInputs = [
- autoconf-archive
- autoreconfHook
- glibcLocales
+ meson
pkg-config
+ ninja
];
buildInputs = [
- cmocka
curl
expat
expect
glib
libstrophe
libmicrohttpd
- libotr
libuuid
ncurses
openssl
@@ -91,22 +88,38 @@ stdenv.mkDerivation (finalAttrs: {
]
++ lib.optionals pgpSupport [ gpgme ]
++ lib.optionals pythonPluginSupport [ python3 ]
- ++ lib.optionals traySupport [ gtk3 ];
+ ++ lib.optionals traySupport [ gtk3 ]
+ ++ lib.optionals otrSupport [ libotr ]
+ ++ lib.optionals spellcheckSupport [ enchant ]
+ ++ lib.optionals avatarScalingSupport [ gdk-pixbuf ];
- # Enable feature flags, so that build fail if libs are missing
- configureFlags = [
- "--enable-c-plugins"
- "--enable-otr"
- ]
- ++ lib.optionals notifySupport [ "--enable-notifications" ]
- ++ lib.optionals traySupport [ "--enable-icons-and-clipboard" ]
- ++ lib.optionals pgpSupport [ "--enable-pgp" ]
- ++ lib.optionals pythonPluginSupport [ "--enable-python-plugins" ]
- ++ lib.optionals omemoSupport [ "--enable-omemo" ];
+ # see also: https://profanity-im.github.io/guide/latest/build.html#expl
+ mesonFlags = [
+ (lib.mesonBool "tests" finalAttrs.finalPackage.doCheck)
+ (lib.mesonEnable "notifications" notifySupport)
+ (lib.mesonEnable "python-plugins" pythonPluginSupport)
+ (lib.mesonEnable "c-plugins" true)
+ (lib.mesonEnable "otr" otrSupport)
+ (lib.mesonEnable "pgp" pgpSupport)
+ (lib.mesonEnable "omemo" omemoSupport)
+ (lib.mesonEnable "omemo-qrcode" omemoSupport)
+ (lib.mesonEnable "icons-and-clipboard" traySupport)
+ (lib.mesonEnable "gdk-pixbuf" avatarScalingSupport)
+ (lib.mesonEnable "xscreensaver" autoAwaySupport)
+ (lib.mesonEnable "spellcheck" spellcheckSupport)
+ ];
+
+ # this build directory is hard coded by the tests:
+ # https://github.com/profanity-im/profanity/blob/c9033aae568d1a8f5435c566f31aa165718c7726/tests/functionaltests/proftest.c#L275
+ mesonBuildDir = "build_run";
doCheck = true;
+ nativeCheckInputs = [
+ cmocka
- env.LC_ALL = "en_US.utf8";
+ # when stabber is found, functional tests are enabled which take a very long time
+ # stabber
+ ];
meta = {
homepage = "https://profanity-im.github.io";
diff --git a/pkgs/applications/networking/instant-messengers/profanity/patches/packages-osx.patch b/pkgs/applications/networking/instant-messengers/profanity/patches/packages-osx.patch
deleted file mode 100644
index 796ec6b0a615..000000000000
--- a/pkgs/applications/networking/instant-messengers/profanity/patches/packages-osx.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/configure.ac b/configure.ac
-index 5c00aca..eb78060 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -23,7 +23,6 @@ PLATFORM="unknown"
- AS_CASE([$host_os],
- [freebsd*], [PLATFORM="freebsd"],
- [openbsd*], [PLATFORM="openbsd"],
-- [darwin*], [PLATFORM="osx"],
- [cygwin], [PLATFORM="cygwin"],
- [PLATFORM="nix"])
-
-
diff --git a/pkgs/applications/networking/instant-messengers/ripcord/darwin.nix b/pkgs/applications/networking/instant-messengers/ripcord/darwin.nix
deleted file mode 100644
index a346ebd7b0de..000000000000
--- a/pkgs/applications/networking/instant-messengers/ripcord/darwin.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- stdenvNoCC,
- lib,
- fetchzip,
-}:
-
-stdenvNoCC.mkDerivation rec {
- pname = "ripcord";
- version = "0.4.29";
-
- src = fetchzip {
- url = "https://cancel.fm/dl/Ripcord_Mac_${version}.zip";
- sha256 = "sha256-v8iydjLBjFN5LuctpcBpEkhSICxPhLKzLjSASWtsQok=";
- stripRoot = false;
- };
-
- dontBuild = true;
- dontFixup = true; # modification is not allowed by the license https://cancel.fm/ripcord/shareware-redistribution/
-
- installPhase = ''
- runHook preInstall
-
- mkdir -p $out/Applications
- cp -r $src/Ripcord.app $out/Applications/
-
- runHook postInstall
- '';
-
- meta = {
- description = "Desktop chat client for Slack and Discord";
- homepage = "https://cancel.fm/ripcord/";
- sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
- # See: https://cancel.fm/ripcord/shareware-redistribution/
- license = lib.licenses.unfreeRedistributable;
- maintainers = with lib.maintainers; [ mikroskeem ];
- platforms = [ "x86_64-darwin" ];
- };
-}
diff --git a/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/cstring-includes.patch b/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/cstring-includes.patch
deleted file mode 100644
index e334777ac14f..000000000000
--- a/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/cstring-includes.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-diff --git a/src/api/video/nv12_buffer.cc b/src/api/video/nv12_buffer.cc
-index ca9dcd867..89d28f23c 100644
---- a/src/api/video/nv12_buffer.cc
-+++ b/src/api/video/nv12_buffer.cc
-@@ -16,6 +16,8 @@
- #include "third_party/libyuv/include/libyuv/convert.h"
- #include "third_party/libyuv/include/libyuv/scale.h"
-
-+#include
-+
- namespace webrtc {
-
- namespace {
-diff --git a/src/audio/utility/channel_mixer.cc b/src/audio/utility/channel_mixer.cc
-index 0f1e66387..33b771b0c 100644
---- a/src/audio/utility/channel_mixer.cc
-+++ b/src/audio/utility/channel_mixer.cc
-@@ -15,6 +15,8 @@
- #include "rtc_base/logging.h"
- #include "rtc_base/numerics/safe_conversions.h"
-
-+#include
-+
- namespace webrtc {
-
- ChannelMixer::ChannelMixer(ChannelLayout input_layout,
-diff --git a/src/modules/audio_processing/aec3/alignment_mixer.cc b/src/modules/audio_processing/aec3/alignment_mixer.cc
-index 7f076dea8..ffd7242b5 100644
---- a/src/modules/audio_processing/aec3/alignment_mixer.cc
-+++ b/src/modules/audio_processing/aec3/alignment_mixer.cc
-@@ -10,6 +10,7 @@
- #include "modules/audio_processing/aec3/alignment_mixer.h"
-
- #include
-+#include
-
- #include "rtc_base/checks.h"
-
-diff --git a/src/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc b/src/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc
-index 7ef1a030e..5b9ab7137 100644
---- a/src/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc
-+++ b/src/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc
-@@ -18,6 +18,7 @@
- #include
- #include
-
-+#include
- #include
-
- #include "absl/memory/memory.h"
-diff --git a/src/modules/video_coding/utility/ivf_file_reader.cc b/src/modules/video_coding/utility/ivf_file_reader.cc
-index 4c08ca613..f82f2bfcb 100644
---- a/src/modules/video_coding/utility/ivf_file_reader.cc
-+++ b/src/modules/video_coding/utility/ivf_file_reader.cc
-@@ -10,6 +10,7 @@
-
- #include "modules/video_coding/utility/ivf_file_reader.h"
-
-+#include
- #include
- #include
-
-diff --git a/src/net/dcsctp/packet/bounded_byte_writer.h b/src/net/dcsctp/packet/bounded_byte_writer.h
-index d754549e4..bf5e3ed42 100644
---- a/src/net/dcsctp/packet/bounded_byte_writer.h
-+++ b/src/net/dcsctp/packet/bounded_byte_writer.h
-@@ -12,6 +12,7 @@
- #define NET_DCSCTP_PACKET_BOUNDED_BYTE_WRITER_H_
-
- #include
-+#include
-
- #include "api/array_view.h"
-
\ No newline at end of file
diff --git a/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix b/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix
index 0bc68cd19b3c..f4402d9798d8 100644
--- a/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix
+++ b/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix
@@ -1,96 +1,28 @@
{
lib,
- stdenv,
fetchFromGitHub,
- fetchpatch,
- libsForQt5,
- yasm,
- alsa-lib,
- jemalloc,
- libopus,
- libpulseaudio,
+ telegram-desktop,
withWebkit ? true,
}:
let
- telegram-desktop = libsForQt5.callPackage ../telegram-desktop {
- inherit stdenv;
- # N/A on Qt5
- kimageformats = null;
- unwrapped = libsForQt5.callPackage ../telegram-desktop/unwrapped.nix {
- inherit stdenv;
- kcoreaddons = null;
- };
- };
version = "1.4.9";
- tg_owt = telegram-desktop.tg_owt.overrideAttrs (oldAttrs: {
- version = "0-unstable-2024-06-15";
-
- src = fetchFromGitHub {
- owner = "desktop-app";
- repo = "tg_owt";
- rev = "c9cc4390ab951f2cbc103ff783a11f398b27660b";
- hash = "sha256-FfWmSYaeryTDbsGJT3R7YK1oiyJcrR7YKKBOF+9PmpY=";
- fetchSubmodules = true;
- };
-
- patches = [
- # fix build with latest glibc
- # upstream PR: https://github.com/desktop-app/tg_owt/pull/172
- ./cstring-includes.patch
- (fetchpatch {
- url = "https://webrtc.googlesource.com/src/+/e7d10047096880feb5e9846375f2da54aef91202%5E%21/?format=TEXT";
- decode = "base64 -d";
- stripLen = 1;
- extraPrefix = "src/";
- hash = "sha256-goxnuRRbwcdfIk1jFaKGiKCTCYn2saEj7En1Iyglzko=";
- })
- ];
-
- nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ yasm ];
-
- env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-c++11-narrowing";
- });
in
telegram-desktop.override {
pname = "kotatogram-desktop";
inherit withWebkit;
- unwrapped = (telegram-desktop.unwrapped.override { inherit tg_owt; }).overrideAttrs (old: {
+ unwrapped = telegram-desktop.unwrapped.overrideAttrs (old: {
pname = "kotatogram-desktop-unwrapped";
- version = "${version}-unstable-2024-09-27";
+ version = "${version}-unstable-2026-07-03";
src = fetchFromGitHub {
owner = "kotatogram";
repo = "kotatogram-desktop";
- rev = "0581eb6219343b3cfcbb81124b372df1039b7568";
- hash = "sha256-rvn8GZmHdMkVutLUe/LmUNIawlb9VgU3sYhPwZ2MWsI=";
+ rev = "7263a1b53c9e6b45a416532644fff7a4c7f90d54";
+ hash = "sha256-xOfHZ7oUJKk65j7o/AgxtFfc5NqsAoA9E+8U6rHlSmc=";
fetchSubmodules = true;
};
- patches = [
- ./macos-qt5.patch
- ./glib-2.86.patch
- (fetchpatch {
- url = "https://gitlab.com/mnauw/cppgir/-/commit/c8bb1c6017a6f7f2e47bd10543aea6b3ec69a966.patch";
- stripLen = 1;
- extraPrefix = "cmake/external/glib/cppgir/";
- hash = "sha256-8B4h3BTG8dIlt3+uVgBI569E9eCebcor9uohtsrZpnI=";
- })
- ];
-
- buildInputs =
- (old.buildInputs or [ ])
- ++ [
- libopus
- ]
- ++ lib.optionals stdenv.hostPlatform.isLinux [
- alsa-lib
- jemalloc
- libpulseaudio
- ];
-
- env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-missing-template-arg-list-after-template-kw";
-
meta = {
description = "Kotatogram – experimental Telegram Desktop fork";
longDescription = ''
@@ -103,7 +35,7 @@ telegram-desktop.override {
homepage = "https://kotatogram.github.io";
changelog = "https://github.com/kotatogram/kotatogram-desktop/releases/tag/k${version}";
maintainers = with lib.maintainers; [ ilya-fedin ];
- mainProgram = if stdenv.hostPlatform.isLinux then "kotatogram-desktop" else "Kotatogram";
+ mainProgram = "Kotatogram";
};
});
}
diff --git a/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/glib-2.86.patch b/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/glib-2.86.patch
deleted file mode 100644
index 5e7f5dc698ae..000000000000
--- a/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/glib-2.86.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-Submodule Telegram/lib_base contains modified content
-diff --git a/Telegram/lib_base/base/platform/linux/base_url_scheme_linux.cpp b/Telegram/lib_base/base/platform/linux/base_url_scheme_linux.cpp
-index 4197367..f79d2fa 100644
---- a/Telegram/lib_base/base/platform/linux/base_url_scheme_linux.cpp
-+++ b/Telegram/lib_base/base/platform/linux/base_url_scheme_linux.cpp
-@@ -15,7 +15,7 @@
- #include
- #include
-
--#include
-+#include
- #include
-
- namespace base::Platform {
-@@ -125,7 +125,7 @@ void RegisterUrlScheme(const UrlSchemeDescriptor &descriptor) {
-
- const auto appId = QGuiApplication::desktopFileName().toStdString();
- if (!appId.empty()) {
-- Gio::AppInfo appInfo = Gio::DesktopAppInfo::new_(appId + ".desktop");
-+ Gio::AppInfo appInfo = GioUnix::DesktopAppInfo::new_(appId + ".desktop");
- if (appInfo) {
- if (appInfo.get_commandline() == commandlineForCreator + " %u") {
- appInfo.set_as_default_for_type(handlerType);
-Submodule cmake contains modified content
-diff --git a/cmake/external/glib/CMakeLists.txt b/cmake/external/glib/CMakeLists.txt
-index 3c6fe4b..6f73dc5 100644
---- a/cmake/external/glib/CMakeLists.txt
-+++ b/cmake/external/glib/CMakeLists.txt
-@@ -16,7 +16,7 @@ endfunction()
- add_cppgir()
-
- include(generate_cppgir.cmake)
--generate_cppgir(external_glib Gio-2.0)
-+generate_cppgir(external_glib GioUnix-2.0)
-
- find_package(PkgConfig REQUIRED)
- pkg_check_modules(GLIB2 REQUIRED IMPORTED_TARGET glib-2.0 gobject-2.0 gio-2.0 gio-unix-2.0)
diff --git a/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/macos-qt5.patch b/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/macos-qt5.patch
deleted file mode 100644
index 55beb31a7a4d..000000000000
--- a/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/macos-qt5.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.h b/Telegram/SourceFiles/platform/mac/main_window_mac.h
-index 2a3a59b9cf..16b7b6cdde 100644
---- a/Telegram/SourceFiles/platform/mac/main_window_mac.h
-+++ b/Telegram/SourceFiles/platform/mac/main_window_mac.h
-@@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
- #include "platform/platform_main_window.h"
- #include "platform/mac/specific_mac_p.h"
- #include "base/timer.h"
-+#include "base/qt/qt_common_adapters.h"
-
- #include
- #include
-@@ -52,7 +53,7 @@ private:
- bool nativeEvent(
- const QByteArray &eventType,
- void *message,
-- qintptr *result) override;
-+ base::NativeEventResult *result) override;
-
- void hideAndDeactivate();
- void updateDockCounter();
-diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.mm b/Telegram/SourceFiles/platform/mac/main_window_mac.mm
-index e95ef79f16..c3381926a9 100644
---- a/Telegram/SourceFiles/platform/mac/main_window_mac.mm
-+++ b/Telegram/SourceFiles/platform/mac/main_window_mac.mm
-@@ -305,7 +305,7 @@ void MainWindow::updateWindowIcon() {
- bool MainWindow::nativeEvent(
- const QByteArray &eventType,
- void *message,
-- qintptr *result) {
-+ base::NativeEventResult *result) {
- if (message && eventType == "NSEvent") {
- const auto event = static_cast(message);
- if (PossiblyTextTypingEvent(event)) {
-diff --git a/Telegram/SourceFiles/platform/mac/notifications_manager_mac.mm b/Telegram/SourceFiles/platform/mac/notifications_manager_mac.mm
-index de28809077..2521428567 100644
---- a/Telegram/SourceFiles/platform/mac/notifications_manager_mac.mm
-+++ b/Telegram/SourceFiles/platform/mac/notifications_manager_mac.mm
-@@ -502,11 +502,11 @@ void Manager::Private::invokeIfNotFocused(Fn callback) {
- } else {
- if (!_processesInited) {
- _processesInited = true;
-- QObject::connect(&_dnd, &QProcess::finished, [=] {
-+ QObject::connect(&_dnd, QOverload::of(&QProcess::finished), [=] {
- _waitingDnd = false;
- checkFocusState();
- });
-- QObject::connect(&_focus, &QProcess::finished, [=] {
-+ QObject::connect(&_focus, QOverload::of(&QProcess::finished), [=] {
- _waitingFocus = false;
- checkFocusState();
- });
-@@ -536,7 +536,7 @@ void Manager::Private::checkFocusState() {
- }
- const auto istrue = [](QProcess &process) {
- const auto output = process.readAllStandardOutput();
-- DEBUG_LOG(("Focus Check: %1").arg(output));
-+ DEBUG_LOG(("Focus Check: %1").arg(QString::fromUtf8(output)));
- const auto result = (output.trimmed() == u"true"_q);
- return result;
- };
-Submodule Telegram/lib_ui contains modified content
-diff --git a/Telegram/lib_ui/ui/rp_widget.cpp b/Telegram/lib_ui/ui/rp_widget.cpp
-index 0b57704..0d2ca01 100644
---- a/Telegram/lib_ui/ui/rp_widget.cpp
-+++ b/Telegram/lib_ui/ui/rp_widget.cpp
-@@ -62,7 +62,7 @@ TWidget::TWidget(QWidget *parent)
- auto format = QSurfaceFormat::defaultFormat();
- format.setSwapInterval(0);
- #ifdef Q_OS_MAC
-- format.setColorSpace(QColorSpace::SRgb);
-+ format.setColorSpace(QSurfaceFormat::sRGBColorSpace);
- #endif // Q_OS_MAC
- QSurfaceFormat::setDefaultFormat(format);
- return true;
diff --git a/pkgs/applications/networking/instant-messengers/telegram/telegram-desktop/unwrapped.nix b/pkgs/applications/networking/instant-messengers/telegram/telegram-desktop/unwrapped.nix
index fe1cf5cbfe59..e744ee618380 100644
--- a/pkgs/applications/networking/instant-messengers/telegram/telegram-desktop/unwrapped.nix
+++ b/pkgs/applications/networking/instant-messengers/telegram/telegram-desktop/unwrapped.nix
@@ -6,8 +6,8 @@
pkg-config,
cmake,
ninja,
- clang,
python3,
+ qtshadertools,
tdlib,
tg_owt ? callPackage ./tg_owt.nix { inherit stdenv; },
qtbase,
@@ -19,7 +19,7 @@
ffmpeg_6,
protobuf,
openal-soft,
- minizip-ng,
+ minizip-ng-compat,
range-v3,
tl-expected,
hunspell,
@@ -28,6 +28,7 @@
microsoft-gsl,
boost,
ada,
+ cmark-gfm,
libavif,
libheif,
libjxl,
@@ -45,14 +46,14 @@
stdenv.mkDerivation (finalAttrs: {
pname = "telegram-desktop-unwrapped";
- version = "6.8.2";
+ version = "7.0.2";
src = fetchFromGitHub {
owner = "telegramdesktop";
repo = "tdesktop";
rev = "v${finalAttrs.version}";
fetchSubmodules = true;
- hash = "sha256-1zKAywh6EXGDi5t7CKQRWADRKX0mFEMyeIoK4hrTFFQ=";
+ hash = "sha256-G/A5J2m1sXHD50zDmMD9ehnorAGRjnQ+YGMv6DEiJcQ=";
};
nativeBuildInputs = [
@@ -60,10 +61,9 @@ stdenv.mkDerivation (finalAttrs: {
cmake
ninja
python3
+ qtshadertools
]
++ lib.optionals stdenv.hostPlatform.isLinux [
- # to build bundled libdispatch
- clang
gobject-introspection
];
@@ -74,7 +74,7 @@ stdenv.mkDerivation (finalAttrs: {
xxhash
ffmpeg_6
openal-soft
- minizip-ng
+ minizip-ng-compat
range-v3
tl-expected
rnnoise
@@ -82,6 +82,7 @@ stdenv.mkDerivation (finalAttrs: {
microsoft-gsl
boost
ada
+ cmark-gfm
(tdlib.override { tde2eOnly = true; })
]
++ lib.optionals stdenv.hostPlatform.isLinux [
diff --git a/pkgs/applications/networking/irc/weechat/default.nix b/pkgs/applications/networking/irc/weechat/default.nix
index c9e8fc153c49..4c9bf0bd6b2b 100644
--- a/pkgs/applications/networking/irc/weechat/default.nix
+++ b/pkgs/applications/networking/irc/weechat/default.nix
@@ -105,11 +105,11 @@ assert lib.all (p: p.enabled -> !(builtins.elem null p.buildInputs)) plugins;
stdenv.mkDerivation rec {
pname = "weechat";
- version = "4.9.2";
+ version = "4.9.4";
src = fetchurl {
url = "https://weechat.org/files/src/weechat-${version}.tar.xz";
- hash = "sha256-0TianlIb2gxOv6EI4qv4he5sUVDDhSmfXcoBgaQ6CRQ=";
+ hash = "sha256-P8UDWfOjsljJ8DFIsC87nFkZRTXRtGXEgfuFp2wu0AU=";
};
# Why is this needed? https://github.com/weechat/weechat/issues/2031
diff --git a/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix b/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix
index 28ecc9faf3e1..535c9214dbee 100644
--- a/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix
+++ b/pkgs/applications/networking/mailreaders/evolution/evolution/default.nix
@@ -49,7 +49,7 @@
stdenv.mkDerivation (finalAttrs: {
pname = "evolution";
- version = "3.60.1";
+ version = "3.60.2";
outputs = [
"out"
@@ -58,7 +58,7 @@ stdenv.mkDerivation (finalAttrs: {
src = fetchurl {
url = "mirror://gnome/sources/evolution/${lib.versions.majorMinor finalAttrs.version}/evolution-${finalAttrs.version}.tar.xz";
- hash = "sha256-jzM860wxzOfXdJXokBoA79xTdtpUKcHClNfj77xvcwg=";
+ hash = "sha256-IYpJ+lBoFV29vTWjDRCi8jfHJGX7HQ4Kp4iJ8DnC7Y8=";
};
nativeBuildInputs = [
diff --git a/pkgs/applications/networking/mailreaders/thunderbird-bin/default.nix b/pkgs/applications/networking/mailreaders/thunderbird-bin/default.nix
index 9591516d88b9..004c91f93cfc 100644
--- a/pkgs/applications/networking/mailreaders/thunderbird-bin/default.nix
+++ b/pkgs/applications/networking/mailreaders/thunderbird-bin/default.nix
@@ -39,9 +39,7 @@ let
mozillaPlatforms = {
x86_64-linux = "linux-x86_64";
- # bundles are universal and can be re-used for both darwin architectures
aarch64-darwin = "mac";
- x86_64-darwin = "mac";
};
throwSystem = throw "Unsupported system: ${stdenv.hostPlatform.system}";
@@ -69,7 +67,8 @@ let
meta = {
changelog = "https://www.thunderbird.net/en-US/thunderbird/${version}/releasenotes/";
description = "Mozilla Thunderbird, a full-featured email client (binary package)";
- homepage = "http://www.mozilla.org/thunderbird/";
+ homepage = "https://www.thunderbird.net/";
+ donationPage = "https://www.thunderbird.net/donate/";
mainProgram = "thunderbird";
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
license = lib.licenses.mpl20;
diff --git a/pkgs/applications/networking/mailreaders/thunderbird-bin/release_esr_sources.nix b/pkgs/applications/networking/mailreaders/thunderbird-bin/release_esr_sources.nix
index 473ba3792a08..633d5c6bb451 100644
--- a/pkgs/applications/networking/mailreaders/thunderbird-bin/release_esr_sources.nix
+++ b/pkgs/applications/networking/mailreaders/thunderbird-bin/release_esr_sources.nix
@@ -1,1193 +1,1193 @@
{
- version = "140.11.1esr";
+ version = "140.12.1esr";
sources = [
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/af/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/af/thunderbird-140.12.1esr.tar.xz";
locale = "af";
arch = "linux-x86_64";
- sha256 = "cd44e22f8f2ec9a8691ff5b19479bb80b1251d8ec821876ef7b73cc4d6ad38b1";
+ sha256 = "be9018fd65fea36f04564f34277e82700dd6f6ea1a08a2141d7e8b1fd18d7aaf";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/ar/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/ar/thunderbird-140.12.1esr.tar.xz";
locale = "ar";
arch = "linux-x86_64";
- sha256 = "51855dbbd4c59d414c211c138aa46dd8b513825c02830bc68fa469248493a9f0";
+ sha256 = "79deb45cd4b928e501498a0367882a9b05ef986f636f6d4decaad3dbf4b89880";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/ast/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/ast/thunderbird-140.12.1esr.tar.xz";
locale = "ast";
arch = "linux-x86_64";
- sha256 = "81099d46f5776631e2ac59c269c36e80a0878812fd7422509cb940261bc702a9";
+ sha256 = "ecf4361deb934a3a81434b58c6835eeaf226a7265a58b198572a03641858675e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/be/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/be/thunderbird-140.12.1esr.tar.xz";
locale = "be";
arch = "linux-x86_64";
- sha256 = "9310cb6f6ba5371861f8f3d4695cb599839d726dc62cb280b03461e2bcbfd677";
+ sha256 = "be21c4c898d1454573db61e7ee4b8428bb7656d5b9de839f43cc06bf18fc596c";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/bg/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/bg/thunderbird-140.12.1esr.tar.xz";
locale = "bg";
arch = "linux-x86_64";
- sha256 = "88103bba753cf512319a05a6fc2fc1a4bf5ef51623a16e8ca06b6120eadd55e5";
+ sha256 = "c14361f950b6fdacb576dcd1cfe751db826ff433cc7df7faa6463b654410a479";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/br/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/br/thunderbird-140.12.1esr.tar.xz";
locale = "br";
arch = "linux-x86_64";
- sha256 = "b2507e3615fb3aa1f9b440304ecc14a5f3a82ea11cb1f26dfba049f247baba4c";
+ sha256 = "e049cefec62df1fa31eeb9cfb0959d07ca6a2ed61fbc1e4b19b392d974900769";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/ca/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/ca/thunderbird-140.12.1esr.tar.xz";
locale = "ca";
arch = "linux-x86_64";
- sha256 = "286528d64bb61a45fc75ed3eb9acdb51d86dccdf69f4921225b72f2f9705cab0";
+ sha256 = "6f4a3318fec4a757750e586a4a97370c8db4320cb3033aa251a8eed21d18aa48";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/cak/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/cak/thunderbird-140.12.1esr.tar.xz";
locale = "cak";
arch = "linux-x86_64";
- sha256 = "b055cda1a66326625cd9073e3ef59100011fb1fa94842bb1377982793e89fe13";
+ sha256 = "f42fa814fe765c1f99acb1747708f0f485847020de43a82c62e72e5834e2c3d7";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/cs/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/cs/thunderbird-140.12.1esr.tar.xz";
locale = "cs";
arch = "linux-x86_64";
- sha256 = "c7c986a1b2928d50793be7a768f41792a11b10840c4b89e362fdd87dff8b859c";
+ sha256 = "57f774c07dfe8145b3cb0dbd95f65c7f8e97aef3123774f43a2608b5159b03f6";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/cy/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/cy/thunderbird-140.12.1esr.tar.xz";
locale = "cy";
arch = "linux-x86_64";
- sha256 = "fec3476eb18c24fa23119f0ead79a14f50e243c60e18729a42d7390065a7752e";
+ sha256 = "9cd18105b3ec4b7026e6eeb09610ebdc7e16e3f7d2f6af91b216a2356c97d6e6";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/da/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/da/thunderbird-140.12.1esr.tar.xz";
locale = "da";
arch = "linux-x86_64";
- sha256 = "e879bbac85ed9aff18564afcd652d5ab7bb99eb9e36134bba36dda3c988dc754";
+ sha256 = "765ceeec2296798053febab1a1e32dbe142738db72b88945e619aa238713682f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/de/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/de/thunderbird-140.12.1esr.tar.xz";
locale = "de";
arch = "linux-x86_64";
- sha256 = "72a5273c008060bc2a856eb33c49023ee1ed25f9826471cb2a04418b5d29ec6a";
+ sha256 = "15ba511fb57c09b50b061b4bb164e21391b70a875dd5d0ee3a26fba414326f07";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/dsb/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/dsb/thunderbird-140.12.1esr.tar.xz";
locale = "dsb";
arch = "linux-x86_64";
- sha256 = "ad5fdff483dfe20441a6b48d22dd3a82a2b7c20f7af06025744cc0a73f4e1504";
+ sha256 = "dbf0bf70808da40282e32e1a75e0ed6f21af8fe47faf59888fcdd6be60a5f8b0";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/el/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/el/thunderbird-140.12.1esr.tar.xz";
locale = "el";
arch = "linux-x86_64";
- sha256 = "0ecb235a03ceaf27e93f949d0a7f4534db48e2a1050ed10f644f70db794a78c5";
+ sha256 = "4a9c787562473045724653302b2de0bca5626571633246a373ae1b06e57ba904";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/en-CA/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/en-CA/thunderbird-140.12.1esr.tar.xz";
locale = "en-CA";
arch = "linux-x86_64";
- sha256 = "5645c08f8630849b1efede22d46a8526ee157683458ce3929e1094a928be742e";
+ sha256 = "4514da1947cc1733e29b19c4130283415caf6271df1e670779001d2544fbaf35";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/en-GB/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/en-GB/thunderbird-140.12.1esr.tar.xz";
locale = "en-GB";
arch = "linux-x86_64";
- sha256 = "5172cc07af724e427f593687f348cc501628786cc5d6c943d1d194e04075721f";
+ sha256 = "31a404d71ff2d3e6c6e0dfea7201cc5bb926fe22d0f57f2e6577384846c699ad";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/en-US/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/en-US/thunderbird-140.12.1esr.tar.xz";
locale = "en-US";
arch = "linux-x86_64";
- sha256 = "9b453e56b395aa06237891644bc412609291522105bd87c4cb902caf82ccfbe5";
+ sha256 = "9219a4dce3e4fa5b70678df7841151264d27ebbfdd0da8fa3dcb1c42f39afc9d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/es-AR/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/es-AR/thunderbird-140.12.1esr.tar.xz";
locale = "es-AR";
arch = "linux-x86_64";
- sha256 = "d88f03eb618276e8be922fed996ae67f8d2cf9167c7c7c77302b67db9b5794a5";
+ sha256 = "4f2e575099db2aae498212b1cff6ec9f400f13e620d36a708b7dae0b4d26d19d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/es-ES/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/es-ES/thunderbird-140.12.1esr.tar.xz";
locale = "es-ES";
arch = "linux-x86_64";
- sha256 = "6ca15e9d2d58e1580ad08019c4272eec5e5f9be4b9f781628d0b0f42f7b572b9";
+ sha256 = "4c1c55cba2a2a9bd0bac06e3de6c53bbbdf83ca762d3dc2df7b8d5e7fcafb44f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/es-MX/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/es-MX/thunderbird-140.12.1esr.tar.xz";
locale = "es-MX";
arch = "linux-x86_64";
- sha256 = "40196953a9f29207f64c535ea159673120eee51f03478518b8f86ff46a6d6d8a";
+ sha256 = "33db312a8bcf41d818db437b322c10a93742457440ac89766fc54e2990185785";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/et/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/et/thunderbird-140.12.1esr.tar.xz";
locale = "et";
arch = "linux-x86_64";
- sha256 = "78398e3d931c722bf35a30c3bc69218f2d396c6d4ff7cbb3130c01a20a23fa7c";
+ sha256 = "890b21ffe3bc46cc16cbd568bd3c7c773688466b86508972c4bcf9ebd147c943";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/eu/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/eu/thunderbird-140.12.1esr.tar.xz";
locale = "eu";
arch = "linux-x86_64";
- sha256 = "a5acae7a5b8d31dae0fc3fe7c3c41b582011af654bc0846921ae2661576a1a48";
+ sha256 = "5219c5671612d0d2a0caf687769a1f44509ccece02a160804d89c1dc462a3602";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/fi/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/fi/thunderbird-140.12.1esr.tar.xz";
locale = "fi";
arch = "linux-x86_64";
- sha256 = "97d66dc25f0fde8a1f9559164bc1eb641f4e5f8aca34cf0b1f0bb10bd19636cd";
+ sha256 = "e95521bd64512ada8c370e3fe90c79bbf0b05e2b496dd199e1b041d6300ed657";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/fr/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/fr/thunderbird-140.12.1esr.tar.xz";
locale = "fr";
arch = "linux-x86_64";
- sha256 = "1497140b897323600202a1c982c80e1f69607351d4b243575f37e8b372d97681";
+ sha256 = "2aa93022829facf005b19544247f5c12ff7cecc5f0794ec9526a95eeddf822ab";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/fy-NL/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/fy-NL/thunderbird-140.12.1esr.tar.xz";
locale = "fy-NL";
arch = "linux-x86_64";
- sha256 = "e4126a7e2cc7ba4d0891896fb4a096971c2dbb2d932813d365dd90001e9b7c61";
+ sha256 = "5be868b0a147da456afcd3ddf77a298fb70772f7bc63440e4861e470e91a64d5";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/ga-IE/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/ga-IE/thunderbird-140.12.1esr.tar.xz";
locale = "ga-IE";
arch = "linux-x86_64";
- sha256 = "03c1da05b74097d8103c4b98ac22077a01deef089d5509a2dcb89b235da91cc2";
+ sha256 = "aa5c6b581f29e3075dfb648928c15a5adcecbf20933ebdff70e0849206e581c6";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/gd/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/gd/thunderbird-140.12.1esr.tar.xz";
locale = "gd";
arch = "linux-x86_64";
- sha256 = "ec118262c5c8c4430f574b3a0613f4da1f6ff5e3e6a2b0bee0248021a98f5e54";
+ sha256 = "16664961711bd9b9538747e107d429b1934ac1fe8310fd643febe7698324de93";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/gl/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/gl/thunderbird-140.12.1esr.tar.xz";
locale = "gl";
arch = "linux-x86_64";
- sha256 = "c585f158acc1cd998edb46d8c5221e760f5e921f778b396ec89daa000ff426d8";
+ sha256 = "6ff317dde8a319983a01f2b46466eebb8f2225eb2c88d5950f437616ebe84507";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/he/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/he/thunderbird-140.12.1esr.tar.xz";
locale = "he";
arch = "linux-x86_64";
- sha256 = "81fae1be93af6bdc667f58cb6976376fdc334c4d5432c31d87fcf887dbe0f503";
+ sha256 = "e0bea2a1252ea3ea6529ea51059e732b03d45095ef3adc7ea7fdde36d83ad398";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/hr/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/hr/thunderbird-140.12.1esr.tar.xz";
locale = "hr";
arch = "linux-x86_64";
- sha256 = "1d3c4e0fbd28b3931584454b3b7e392c793c5e75cdd21067be4faccc1e4ecfe7";
+ sha256 = "1d298936666fac71a516acb54278ffe7e8ac1b5d37139d275624c48a793f2ebe";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/hsb/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/hsb/thunderbird-140.12.1esr.tar.xz";
locale = "hsb";
arch = "linux-x86_64";
- sha256 = "064ce5e72d37607aa8103a046913efd93b659257463fa897a46f0ab5bf2971ae";
+ sha256 = "a46bda6771c5d83aaec24439de21c33a97f01cfbb712dd7d111a4baf589209dd";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/hu/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/hu/thunderbird-140.12.1esr.tar.xz";
locale = "hu";
arch = "linux-x86_64";
- sha256 = "2c366fce17fafd29c7f389a33674e117ac1d50074c3d3a35f7495bf868843b87";
+ sha256 = "ebc0c1b12e90a53ae35652ccbe9181773a382fa02ecc29a74f29fca684f41362";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/hy-AM/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/hy-AM/thunderbird-140.12.1esr.tar.xz";
locale = "hy-AM";
arch = "linux-x86_64";
- sha256 = "fd3aaace09db4cefa108c25eda88c9a3879c8ec227e572eaf2fd22729df7dc94";
+ sha256 = "0b54dc71db19e9d7e28402bee8b98c8d244fb8eac708621f0b5e168ec9662883";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/id/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/id/thunderbird-140.12.1esr.tar.xz";
locale = "id";
arch = "linux-x86_64";
- sha256 = "ff3eece338e9eb8fb6f09c8fcaa019254171fd5e6c4bd7af8f316d090367f00a";
+ sha256 = "94e241fbd784980ae83d8d7238e8e30602d405827be3609b89a0a67d031cc99e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/is/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/is/thunderbird-140.12.1esr.tar.xz";
locale = "is";
arch = "linux-x86_64";
- sha256 = "9a2ce7350e387bc697093f39fac52b1e4c80fa0a9c736900d63551a4a381c357";
+ sha256 = "7c9fbe81d96274b8657a966ae7b093bc3e2a8f7e35ef256d175a6c2fc06d4d90";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/it/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/it/thunderbird-140.12.1esr.tar.xz";
locale = "it";
arch = "linux-x86_64";
- sha256 = "3983915b58c46a64978a7b3332923077059fda6cabef4faa39ce1e9dabbb2667";
+ sha256 = "17c912a8dbca2be4abfd29af189137e72b64213a2eaa2848a19fd5a1493f1635";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/ja/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/ja/thunderbird-140.12.1esr.tar.xz";
locale = "ja";
arch = "linux-x86_64";
- sha256 = "0d7e7b11797826fed39ef5016301cddda761f39921b8d25288900358e3bf579a";
+ sha256 = "dab5b64a874c14f6f9b07224e93ac2cc35f4f787e7faf57eb6e04030d1041cbf";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/ka/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/ka/thunderbird-140.12.1esr.tar.xz";
locale = "ka";
arch = "linux-x86_64";
- sha256 = "6952c4d12ac989b2073f112f02e14298756673945839ffcce2a887a562cdb9da";
+ sha256 = "115d44e3d91e5018d426c2dbd204cefa019bd671c65a7bac125bb27614e6a5db";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/kab/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/kab/thunderbird-140.12.1esr.tar.xz";
locale = "kab";
arch = "linux-x86_64";
- sha256 = "7245abb39634a26a2987f5a5ca2cdfed4a1957c0cb29900ea82146d63517210c";
+ sha256 = "dd5168e203131682bf80b0e7dfbaa7e212dbd375cf886861412eca7a1d0db7bf";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/kk/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/kk/thunderbird-140.12.1esr.tar.xz";
locale = "kk";
arch = "linux-x86_64";
- sha256 = "208deec2213742c05d3ab742b7f7c86a007892ebc372f8810c09b783e4976200";
+ sha256 = "755d97a8987dd5bd8fdc5612ce687e162713670483b3c55e7b44c7dd042a91ae";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/ko/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/ko/thunderbird-140.12.1esr.tar.xz";
locale = "ko";
arch = "linux-x86_64";
- sha256 = "c8df67e9af8b1efc1e608f95b5075346db19283c285baabca27950545d6e3714";
+ sha256 = "30687136cfa82e455667604e42f495e83a21ef90b19c865de4f7099013ff3cbf";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/lt/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/lt/thunderbird-140.12.1esr.tar.xz";
locale = "lt";
arch = "linux-x86_64";
- sha256 = "75f859da709c8698679eb49d5336220efdcda50acc0dc415be6c6f0be08780b4";
+ sha256 = "f087ff1203bc99e78ebd04ac80527f547ca13da3c63fecf379ab30e130c2a526";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/lv/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/lv/thunderbird-140.12.1esr.tar.xz";
locale = "lv";
arch = "linux-x86_64";
- sha256 = "81cacd303205c11460037c372b25b0d79153c340e9be727f87f4950c924a1235";
+ sha256 = "9fa7035fd9e39c727486d52ce5dc56bd17bf753758d5a5a693f7b33ee5736087";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/ms/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/ms/thunderbird-140.12.1esr.tar.xz";
locale = "ms";
arch = "linux-x86_64";
- sha256 = "36023a03fdc7e1fea7fc5beb8baf8eed8683efd68e9971cf8d907e1306368de9";
+ sha256 = "7983e316aa18d324ba9fbca057d96ec0028575d126c32ae045176ddef811dbe4";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/nb-NO/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/nb-NO/thunderbird-140.12.1esr.tar.xz";
locale = "nb-NO";
arch = "linux-x86_64";
- sha256 = "499e5a4f08a0e82c38dbe5718878330f0ad35e9f6c0b93995d22661dfa8434e0";
+ sha256 = "d7921d8bf450eaa33646d3ae66c7645ccb88eb6486edee48134efec9759bd229";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/nl/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/nl/thunderbird-140.12.1esr.tar.xz";
locale = "nl";
arch = "linux-x86_64";
- sha256 = "7f74580c216f949f68d29c3daba3094135b847b20a4796480526047c4a5ef938";
+ sha256 = "5a55d46fb87a2737986c6cb28c35140063040dfa9a734025504c5e818d896840";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/nn-NO/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/nn-NO/thunderbird-140.12.1esr.tar.xz";
locale = "nn-NO";
arch = "linux-x86_64";
- sha256 = "df1e38486df5e06c8b2b8df51c5e34464fdd7ecf99ed7ce27b61c80496abf945";
+ sha256 = "fe501181a77c26d9653dea39ad93fc1d822ad1759ce4d39942eea10b2b85366c";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/pa-IN/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/pa-IN/thunderbird-140.12.1esr.tar.xz";
locale = "pa-IN";
arch = "linux-x86_64";
- sha256 = "2f9e63be4fe48eae42f9b2142de21697fa2b5f6e454f13f0c595a223c8d72dff";
+ sha256 = "c8a3393940e824e07c3754be6a923d94fe18520eeeeb687234ce5dca7150c0e7";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/pl/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/pl/thunderbird-140.12.1esr.tar.xz";
locale = "pl";
arch = "linux-x86_64";
- sha256 = "02af40342348ff187b402c96b5ca5cc5214932a6598e9499bba02ae6fcc168a6";
+ sha256 = "a9491c647a326d167c4d48cd6ed12ae6dbeda56d74a327f52200c2a4be1160d3";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/pt-BR/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/pt-BR/thunderbird-140.12.1esr.tar.xz";
locale = "pt-BR";
arch = "linux-x86_64";
- sha256 = "1364587ed5d821a999df87278905725c361c0dcf6aa1b60b90995ebf65a1d2d2";
+ sha256 = "1136d4946243d708dbc1c9da8e049d19c4e36c66f0c985820e37d78738ac7f6b";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/pt-PT/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/pt-PT/thunderbird-140.12.1esr.tar.xz";
locale = "pt-PT";
arch = "linux-x86_64";
- sha256 = "bde7be8accc37063c8817afe218c07445141c4964f077b47025819617e87d128";
+ sha256 = "e23622710ac085886fd024e3190de0970aa51f9997ee58867f502f43b3cf631b";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/rm/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/rm/thunderbird-140.12.1esr.tar.xz";
locale = "rm";
arch = "linux-x86_64";
- sha256 = "62e733d827e128eeb60f094bad877a7a35c812c6969f920a8d333c68090c5f63";
+ sha256 = "5d151b3715a3dd26bb38a2c5d8c10214c9f23bce42018009a9add87b8ed69e17";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/ro/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/ro/thunderbird-140.12.1esr.tar.xz";
locale = "ro";
arch = "linux-x86_64";
- sha256 = "bd15dc06055d993c1935574fdcbd15f5d00df6399a4e200292d1a47eb1a8e196";
+ sha256 = "0b113061d80cbaf5cb535634ce373167d6a64cb1f3237d33633d2fea125f8e4d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/ru/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/ru/thunderbird-140.12.1esr.tar.xz";
locale = "ru";
arch = "linux-x86_64";
- sha256 = "0fd47d7dd9dc7b12d331420074fa219d3f1eafbdbf2fa1bdf198c20c72ebc1aa";
+ sha256 = "7a39a7d6b459e27f321fdd38f39a95958c5032d3ecfcc051ac2ac44949d527c2";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/sk/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/sk/thunderbird-140.12.1esr.tar.xz";
locale = "sk";
arch = "linux-x86_64";
- sha256 = "979378ef6cb26761e0960948974a184eaf01cb8ca260e6adc51334ccbc47af0a";
+ sha256 = "63d73b38596f78719f3223e9bb2943e1e984f415d82ce6a2c33587c8e1c49e43";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/sl/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/sl/thunderbird-140.12.1esr.tar.xz";
locale = "sl";
arch = "linux-x86_64";
- sha256 = "ac1507b38c50a318b0e59687209979c9c4c0c389afa5583c8e610333e7495319";
+ sha256 = "aceafcf6797834e8b4718b57124c0a1c4ef4457bf3e70e23ad5140c40ce2cf2d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/sq/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/sq/thunderbird-140.12.1esr.tar.xz";
locale = "sq";
arch = "linux-x86_64";
- sha256 = "eb6c22097d6aef20d121e35ffff4e0599929e167817dd0d22059f07742fafdfe";
+ sha256 = "2ee339035fe6d9507a8e52879ed56982ed534f7cae580fd7ae46656607626042";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/sr/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/sr/thunderbird-140.12.1esr.tar.xz";
locale = "sr";
arch = "linux-x86_64";
- sha256 = "31022daed19b0fc26d03aa5ba482e5f214e6d1a5579c16e6695fccf5fc0c9b76";
+ sha256 = "69bd23d5426be0eff640aa012a27375c1af0810dcdeeeab04760112bdad0a798";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/sv-SE/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/sv-SE/thunderbird-140.12.1esr.tar.xz";
locale = "sv-SE";
arch = "linux-x86_64";
- sha256 = "e69480753cb4487fd7aeafca2042fe5661345066fa452be31e879dcc9c370504";
+ sha256 = "3860304e7c2690ce4596022744f2a4108f4e0850eea9c35fc5e5f3030119b403";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/th/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/th/thunderbird-140.12.1esr.tar.xz";
locale = "th";
arch = "linux-x86_64";
- sha256 = "d1e945026998163ca3c8ab37be348caed49c9f72864323e456ff9b8728c03c4f";
+ sha256 = "165ac84909adc334bc47b8c9df7cd5450fee5c4d645da893b1f337d4c36dc0ce";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/tr/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/tr/thunderbird-140.12.1esr.tar.xz";
locale = "tr";
arch = "linux-x86_64";
- sha256 = "4bf8bce7b5e303d44e0c8a3a0e4f1002d637bc73f9c290ed42f97fc9a255fe4c";
+ sha256 = "03ec5cda6b9e65b5a0763e354d39ff96586a8d1013f217354b8c0b44634aac28";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/uk/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/uk/thunderbird-140.12.1esr.tar.xz";
locale = "uk";
arch = "linux-x86_64";
- sha256 = "e4110dfb97f35d1373640374a213163362877d212cc65cd64bd20742aa24dd63";
+ sha256 = "1fcfc649b3313e17d0a74a1ffef8ca05935632d7ae0efdd2c546555cd099cabc";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/uz/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/uz/thunderbird-140.12.1esr.tar.xz";
locale = "uz";
arch = "linux-x86_64";
- sha256 = "1874900326621f5888fbe669a37b0a04228d30f70c3d23bd037f05edce286faa";
+ sha256 = "7385491cd07d147b598f8c95c0522b9d9eece19a3bb02b21112deeb419f78ede";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/vi/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/vi/thunderbird-140.12.1esr.tar.xz";
locale = "vi";
arch = "linux-x86_64";
- sha256 = "41494dc6f259067ee48ad713cc4fb84d8f25cee723ff1a8bbad98771a1822d21";
+ sha256 = "bddfaa6a2c41872e4b3a739163d1090e8173f08538dba53a5779087a58cde745";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/zh-CN/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/zh-CN/thunderbird-140.12.1esr.tar.xz";
locale = "zh-CN";
arch = "linux-x86_64";
- sha256 = "2a1f12a9f87b72d45924f2d00037007a955dde55f82b1d5d6d520e15d90e5b8c";
+ sha256 = "d6a5a5ede7339f087c4ef4c246895be9e09200bbc7b4940d3d103c4c636d6aed";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-x86_64/zh-TW/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-x86_64/zh-TW/thunderbird-140.12.1esr.tar.xz";
locale = "zh-TW";
arch = "linux-x86_64";
- sha256 = "cb358b240ff255b98d9d4061ea99524ee4774aedafbf962c284d1871ec11000e";
+ sha256 = "7bffdbc3af3158652c2a1ae7fc824d26b7d57daa5bb8d65ef2137eb33bd3a2eb";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/af/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/af/thunderbird-140.12.1esr.tar.xz";
locale = "af";
arch = "linux-i686";
- sha256 = "a451426fc9d84724255411a6464e05e7ac46f46912fc2c04182b349e3f02e44e";
+ sha256 = "b520b52478ceab0508b3ba28b4ba22b2c2ee3e7e6d683bd30591191af35ebe48";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/ar/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/ar/thunderbird-140.12.1esr.tar.xz";
locale = "ar";
arch = "linux-i686";
- sha256 = "9f85ad16c9670be0f85d096a2db3713cb65c670c25977a92200687710fe6bfcb";
+ sha256 = "3251114ee3d1d01a51ab60d486c0251020986f87acec3e83ff19102c3d530b8b";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/ast/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/ast/thunderbird-140.12.1esr.tar.xz";
locale = "ast";
arch = "linux-i686";
- sha256 = "790e24d94ddd53798a1e9ac76b7c096aa2c7428f62ccdd04756c8a4b46d20402";
+ sha256 = "eabc7ae14de3b38dc7897b12214ac9a2564deaa3d98ef0893a704c6f5884478d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/be/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/be/thunderbird-140.12.1esr.tar.xz";
locale = "be";
arch = "linux-i686";
- sha256 = "7dcbd7b4817cb491a0c171524aa212f5786b9a93a5834a1e7b01e03d02b8dc58";
+ sha256 = "0be307dc8bedbedae132ca4a3c72e0437f7b625badf607ab6509eb0cd32129c9";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/bg/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/bg/thunderbird-140.12.1esr.tar.xz";
locale = "bg";
arch = "linux-i686";
- sha256 = "425bc5719ac01c3600523d7b0d26e38cfb86e5be2de15550b0781b15dca61310";
+ sha256 = "5b9adf440bd069833843b02c00204971397b8a1e39a87b94da28e327d981fce7";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/br/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/br/thunderbird-140.12.1esr.tar.xz";
locale = "br";
arch = "linux-i686";
- sha256 = "31a747ae4b6a429e3f630e4dbf19bae8cc1f97f1adf0b89d56162845d5e1ed7b";
+ sha256 = "01b47cbc9deb1d16b89b0965bcad20d51c60cc4cf26821264b080d410bca51a3";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/ca/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/ca/thunderbird-140.12.1esr.tar.xz";
locale = "ca";
arch = "linux-i686";
- sha256 = "9caf9871fc73bfe2730ac231833cff6bbd60224c082ff26b1d8f2ffc407770ac";
+ sha256 = "5badc5fbddda73bfbe828ee095d27cd1c5f49d8787a9e4821fd09c26fd9f8885";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/cak/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/cak/thunderbird-140.12.1esr.tar.xz";
locale = "cak";
arch = "linux-i686";
- sha256 = "ff8a4299610825a202b58ddea4e69eddbe8e1892319002eb8d031f513adf7709";
+ sha256 = "4dccbba36bcd3f06e477e6d543e772e69a0635845d26d64f01a06010f858babc";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/cs/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/cs/thunderbird-140.12.1esr.tar.xz";
locale = "cs";
arch = "linux-i686";
- sha256 = "64b86c5e360f93ad380d27c28bc126c8bc88c6028f9ba77fc799bdf75f5627cb";
+ sha256 = "150838ded74553e561087eca0444ae6e9e46896540d91687431b5089ca83c37d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/cy/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/cy/thunderbird-140.12.1esr.tar.xz";
locale = "cy";
arch = "linux-i686";
- sha256 = "522a5db1ff214dcfc892004723338cb2c02f7d529c43b892a1bc2fb378277462";
+ sha256 = "f3e0a6c27e254772ca18c6937391186ce9126c57bec71dc71cd46e9dd9b17687";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/da/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/da/thunderbird-140.12.1esr.tar.xz";
locale = "da";
arch = "linux-i686";
- sha256 = "e400141a23886b4a88262a67b9ae69f9d342061c770ea94ed9b9e792b40c5a4b";
+ sha256 = "f835517b095eb3e64f1cb84f7adce45a1af69d865ad26c563d926e97de3a2b44";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/de/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/de/thunderbird-140.12.1esr.tar.xz";
locale = "de";
arch = "linux-i686";
- sha256 = "bff772a4f3a9eca47900d65715640db7c7d0605570470eb35c1d96537b64192c";
+ sha256 = "14c624a29ee80726352dca7101d6395e971a10ca9397d5a2b1c20cf106c61e64";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/dsb/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/dsb/thunderbird-140.12.1esr.tar.xz";
locale = "dsb";
arch = "linux-i686";
- sha256 = "61c388aab0f7edb6fbbee05b51f13efc50f154e33ae9d20bb2b61f3784e55821";
+ sha256 = "f9b99a02515378fcac4ce2cd2b65cfb647ef845750362a6d6a3ac61e98eba687";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/el/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/el/thunderbird-140.12.1esr.tar.xz";
locale = "el";
arch = "linux-i686";
- sha256 = "22a7e3f9ca36d5c6eaeb64076223a884c18e34016d1df8328f380dc966c191eb";
+ sha256 = "3ed79ad13c821ad87c66376ce4f9283c19300added87a88d4d8735331ac44c7b";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/en-CA/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/en-CA/thunderbird-140.12.1esr.tar.xz";
locale = "en-CA";
arch = "linux-i686";
- sha256 = "c31862319d08a58c689aa25cc8fc619b64a63e8453817e0c2d312ecb0a9aa9ec";
+ sha256 = "698015ad0c3ef52a9abf38d20c5f4ab8f434f2450926a06a5c0840115121b4d1";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/en-GB/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/en-GB/thunderbird-140.12.1esr.tar.xz";
locale = "en-GB";
arch = "linux-i686";
- sha256 = "eefc9967520048074756116537a8d83419cd3f2e6fb172dedda9c55914e927f2";
+ sha256 = "1ac015e0f4bd8848bb95b6c2201b8167abbfc45421d800348a488ba0f3119edf";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/en-US/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/en-US/thunderbird-140.12.1esr.tar.xz";
locale = "en-US";
arch = "linux-i686";
- sha256 = "9ff43141905503ba3d8a0beb92dccf1f422c91b3d7c40c252b9d431093607f55";
+ sha256 = "a21ca02982f3d88b03039b699bba90a77e0a7cbdeddfd51bed5e6a7ac29876e1";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/es-AR/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/es-AR/thunderbird-140.12.1esr.tar.xz";
locale = "es-AR";
arch = "linux-i686";
- sha256 = "75744354f8e6b8a6ac3b25c917aede6a1eca3e7d3861c1692cf4378b49e7cc84";
+ sha256 = "9781223342677c21b3b806df269a911e18954bab50df3829c67bf8d542f38953";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/es-ES/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/es-ES/thunderbird-140.12.1esr.tar.xz";
locale = "es-ES";
arch = "linux-i686";
- sha256 = "139f1be50f0658100828cd3a0608ee31ef1952aa80048eb9a254c097ba7e04c9";
+ sha256 = "5aa5a3540b03a3ab3a7b7394467ce1985563ba8f51e92c449d5c82a14c3fa3f6";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/es-MX/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/es-MX/thunderbird-140.12.1esr.tar.xz";
locale = "es-MX";
arch = "linux-i686";
- sha256 = "206f3efbdd7566986824e62124f6855c3b88679d4c4e9eee2041b26d01501fe7";
+ sha256 = "92b2b8bd6cd999376709cdaf196a76041cd5a26e789fb9b2ffe3e712183555c5";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/et/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/et/thunderbird-140.12.1esr.tar.xz";
locale = "et";
arch = "linux-i686";
- sha256 = "6385a2b7201b295a9becb2e3326a87db7f26af19852141e82aaa1b9288e4cac1";
+ sha256 = "7886929abd458a1d1b734a205bed81d94993409ced11f031a5a53d546ec8765c";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/eu/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/eu/thunderbird-140.12.1esr.tar.xz";
locale = "eu";
arch = "linux-i686";
- sha256 = "1b115910849f6655d366f28949e998b1bc8b7b4c1b61d6af761fca6aba00a507";
+ sha256 = "cca8aff9c6273d4145ec746d4b1cbfbca78bde4b663d0afc35ad8fa1b8576b4d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/fi/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/fi/thunderbird-140.12.1esr.tar.xz";
locale = "fi";
arch = "linux-i686";
- sha256 = "7afb20de6e21db2fcbc7be7622bbf7ec84948eae6d1a9bc98c9b894d375e7667";
+ sha256 = "7c1f5997171892e340f92c4de01f3f609b2f6a7c0a5189350823f39e6e7948f3";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/fr/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/fr/thunderbird-140.12.1esr.tar.xz";
locale = "fr";
arch = "linux-i686";
- sha256 = "b8637b6e2478d662f55c942d49810801bfb1ae085db4970d76843fb553971e03";
+ sha256 = "5cbcd9928838c44896a903d4a42fb06be0ad12175da8c972a40cdaf14ea2a3a9";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/fy-NL/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/fy-NL/thunderbird-140.12.1esr.tar.xz";
locale = "fy-NL";
arch = "linux-i686";
- sha256 = "dccb74f43b41a5c4c29a02e6ebeb947b8844f823c151be531548ef4b274accfb";
+ sha256 = "7b3e22f7974d1a802e2445a04b1138b32560cf84425ae1c4d728dbfe333680d5";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/ga-IE/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/ga-IE/thunderbird-140.12.1esr.tar.xz";
locale = "ga-IE";
arch = "linux-i686";
- sha256 = "2a6e2d3631ae61956936f839c5926b0447dd435b0f01e23e6f9d2ef1943c66d4";
+ sha256 = "87d459dd414167e12f97caa0d927b71e2a234d0ed12707978e1969b5aec03c3d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/gd/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/gd/thunderbird-140.12.1esr.tar.xz";
locale = "gd";
arch = "linux-i686";
- sha256 = "b206f80708e217b928dae816e34d9a2150bfe30825853779c0ff24308f0b788b";
+ sha256 = "83c6e9c09917d70484b86dc4b318449f5e92677e93266792ad72a4681fe4e206";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/gl/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/gl/thunderbird-140.12.1esr.tar.xz";
locale = "gl";
arch = "linux-i686";
- sha256 = "e934577623dc7f1e086207389b46221c5f126bb0068ab75ed8f328e8b153682d";
+ sha256 = "f64dd91c64096cc6e06a455f952e41577511522caa939f08cce80d206a15508f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/he/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/he/thunderbird-140.12.1esr.tar.xz";
locale = "he";
arch = "linux-i686";
- sha256 = "6625eb3e5714b4701c3f932837373fb125f1796939858396b186ea96dc7ea390";
+ sha256 = "146089027ae517144c2f51576b1802f6a13f6fd9a58f451d61d09c70ec63429c";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/hr/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/hr/thunderbird-140.12.1esr.tar.xz";
locale = "hr";
arch = "linux-i686";
- sha256 = "2c1009505352e4635d7f26ffd70d349eb3d42f8cbd82d3957007a6e78a0a301b";
+ sha256 = "a4ebb133d33be440bbafc4f3b87e0c5bc30c53834b8e990edcdf49766bfeb99a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/hsb/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/hsb/thunderbird-140.12.1esr.tar.xz";
locale = "hsb";
arch = "linux-i686";
- sha256 = "959dc26e5dc95ad761b446d99968eba0a28d96df81e9bf1c5f7037f7d42c6f5c";
+ sha256 = "ad15e52932683f5408eea7749abd3745787b1d603afd283c8b380bcf5a313e4e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/hu/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/hu/thunderbird-140.12.1esr.tar.xz";
locale = "hu";
arch = "linux-i686";
- sha256 = "67704499a7cbb17a403586f4b3f87da8029f347d01c0a815b88094afbf6d9a36";
+ sha256 = "562f1b5e58b7912b2c72a9dc72e14d4bf13f702a3aadae3a72cf697e9ee2eb19";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/hy-AM/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/hy-AM/thunderbird-140.12.1esr.tar.xz";
locale = "hy-AM";
arch = "linux-i686";
- sha256 = "c25bde4dab387304e5e87ebf0874746600403a0077329dfe03324abe006fa5ff";
+ sha256 = "0dc244101322a521e28598fad1cbd93ebdd0d2165a1d7fe126fc293b9c95ad92";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/id/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/id/thunderbird-140.12.1esr.tar.xz";
locale = "id";
arch = "linux-i686";
- sha256 = "67e1b9b33f16f19f90a6913d04db8d312378b73cac4da7e2146cde306e0b7143";
+ sha256 = "f6494040521b1aff5aa3be06167856a0d8ce699e6cb37a892cdfaa0070da4419";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/is/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/is/thunderbird-140.12.1esr.tar.xz";
locale = "is";
arch = "linux-i686";
- sha256 = "89498071c81e3d4117976c91f5863512d700c3a26b9ea843c5e96163537d65a9";
+ sha256 = "e1597ef6a1313ee50f09f6fdd049c6f360d029c08ef23ce8b29925d82402365a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/it/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/it/thunderbird-140.12.1esr.tar.xz";
locale = "it";
arch = "linux-i686";
- sha256 = "102f8e8510473e6a93dc91c1395232c24f0e54df1da4da63c08080b133c4b6c8";
+ sha256 = "8e98a32d07b24259d51b3bf3752f3b85848403b1f59c57f51536330d0567471f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/ja/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/ja/thunderbird-140.12.1esr.tar.xz";
locale = "ja";
arch = "linux-i686";
- sha256 = "3aa0922fec0c4631f24623ed08c8c6912426caf2839ab4124c58417128b6dc11";
+ sha256 = "ef83364088cee448f1a4e3b24661a78f615f51e8dad920b483e3234d4cd8f1b4";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/ka/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/ka/thunderbird-140.12.1esr.tar.xz";
locale = "ka";
arch = "linux-i686";
- sha256 = "f4239740b4e511088bde916f168dc9a05dc85984c3ff35e2d471ec2e8b606660";
+ sha256 = "3be9730bf6abe81eccb7d830b535ec5148b53cf2c1263aa400a2d2ecabcf7b38";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/kab/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/kab/thunderbird-140.12.1esr.tar.xz";
locale = "kab";
arch = "linux-i686";
- sha256 = "006acc5b65e26864e06f3fc8edd4e462e540ca03ec6e6d72a0e1fc73b531cd9b";
+ sha256 = "84c9602022538c9dd109b70ef61041fe7418b772c35639f0bfb0fba8467c17b0";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/kk/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/kk/thunderbird-140.12.1esr.tar.xz";
locale = "kk";
arch = "linux-i686";
- sha256 = "1fa3c1d87134b8e16d619ad6186eaf61827c50edde35e97e149d5d0fe9dd7ae0";
+ sha256 = "888ed5bbe5e873bdd12b0688d5c3be8f4121dc4fdd8021e91e18512fd6ae597c";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/ko/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/ko/thunderbird-140.12.1esr.tar.xz";
locale = "ko";
arch = "linux-i686";
- sha256 = "a79794232413e466978ee067190c47f668637477981e6938d82251c1b66fd185";
+ sha256 = "11016f84ca55fdf8ba66895ec43c5c7c4ce45d36c1c8d877cf36a579c2a94e73";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/lt/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/lt/thunderbird-140.12.1esr.tar.xz";
locale = "lt";
arch = "linux-i686";
- sha256 = "a89485d85e2e637e81de889ae6d69dd0407ff34a683d35d3ceacdc6abc3002a6";
+ sha256 = "95a570c146e17c523d30194740f94a08cda05ba63d653865269af90bc953b89d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/lv/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/lv/thunderbird-140.12.1esr.tar.xz";
locale = "lv";
arch = "linux-i686";
- sha256 = "90a05ad24b9de9adefc3ebe56999f63a44b809243593a32e53d7f9925188e850";
+ sha256 = "629ae06a9940b3bab1163ade2329adc3126ea41f4bfa1312e1e36786ce87e0a2";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/ms/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/ms/thunderbird-140.12.1esr.tar.xz";
locale = "ms";
arch = "linux-i686";
- sha256 = "b309a1c322c0342a9bcfe48dfbf8c0fc73dd77b1237390c4cbf0b72c413496ef";
+ sha256 = "1f692dbe750aaf4f05f95632352bc67c6da69488b632ef89641f74829af1c173";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/nb-NO/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/nb-NO/thunderbird-140.12.1esr.tar.xz";
locale = "nb-NO";
arch = "linux-i686";
- sha256 = "525f8b1e56cc3ea5b1c16d190489758a0e7af3013ee6491fdd8d3b8620cd5c59";
+ sha256 = "a481cbbc9888681e9b49c121b2ca94300fd427665b976b0ae124b6dbbb4d8987";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/nl/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/nl/thunderbird-140.12.1esr.tar.xz";
locale = "nl";
arch = "linux-i686";
- sha256 = "f5509e36added3e130d014988abbf023c0f9a580ef24fbf695efa5261e68cb96";
+ sha256 = "a04d5ee21a69490b5ec0529704ec4f4f7db301f4a66bd15083ac945cbd549dfd";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/nn-NO/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/nn-NO/thunderbird-140.12.1esr.tar.xz";
locale = "nn-NO";
arch = "linux-i686";
- sha256 = "972cd6c2f95376ab8af6878790be288076c871a75056cc30597f9f0d872ef560";
+ sha256 = "df72af0af915afb82253c85de7984ef29574b44cd179cd23f54ac59558768542";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/pa-IN/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/pa-IN/thunderbird-140.12.1esr.tar.xz";
locale = "pa-IN";
arch = "linux-i686";
- sha256 = "75ea1cd47d13fa174cb6b9f0e5fadf98cbf946e1433bd8521e5fcd270a6915d2";
+ sha256 = "5a15e3a2362e53f3e9e1bf1ac9383e3bc120d5348894f8c6383af684345e2da1";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/pl/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/pl/thunderbird-140.12.1esr.tar.xz";
locale = "pl";
arch = "linux-i686";
- sha256 = "a38797492d37e59ec4b43f0af22a89b84c5f5d75e4e0c4c8964e81a845b4d119";
+ sha256 = "e4bda61c36cf9427f8086c6c84199c0599bac72008982a4ac2da89a26cffe8c6";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/pt-BR/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/pt-BR/thunderbird-140.12.1esr.tar.xz";
locale = "pt-BR";
arch = "linux-i686";
- sha256 = "f8b008e467bc8d42a7a8bc94e62693b7cc922135ac1ff4371a5beeb090606f9a";
+ sha256 = "55ae0e5c95927befdf768469648dd1e60cbabc6fee17b19726e249a491dd43db";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/pt-PT/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/pt-PT/thunderbird-140.12.1esr.tar.xz";
locale = "pt-PT";
arch = "linux-i686";
- sha256 = "d78f6ece643f3245f6182d64fa5ae85559feda053920c9bdb3ab728a8eab83e5";
+ sha256 = "e7c26ade8ecc4b3e6917cb795f68945066feaa0079d5ccf0d50ce1edb770b5a9";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/rm/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/rm/thunderbird-140.12.1esr.tar.xz";
locale = "rm";
arch = "linux-i686";
- sha256 = "b6238ca303658ffe91c69295efcb0e47b7887b53c914eec189ba105a5a5140b9";
+ sha256 = "c77e809f87f7d13a3567952673f2d0b4c37dbac7cb95212500c693847cd6b41a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/ro/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/ro/thunderbird-140.12.1esr.tar.xz";
locale = "ro";
arch = "linux-i686";
- sha256 = "b21ba5df7ef7153d5e7e3fbbadffaec870a671293bf70056c867b69bf9130706";
+ sha256 = "c6062ca4e6626dc448e47362a5ed29de48e1d2ebb439d77d28d9478a2c0b4949";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/ru/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/ru/thunderbird-140.12.1esr.tar.xz";
locale = "ru";
arch = "linux-i686";
- sha256 = "5504c9c7922aef8ab2895dcca5e0a91777bdf9c23b04b51e91311ff1e6c19cfb";
+ sha256 = "91c801faf58e6fc5794ca084b70bda15fa504d7b23b8a2b7a8db7bf75275ce65";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/sk/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/sk/thunderbird-140.12.1esr.tar.xz";
locale = "sk";
arch = "linux-i686";
- sha256 = "7c5f26aa5dcaae38fbc304f2ddb378c9aebac38b6162c89f75952b4cbc20a4a9";
+ sha256 = "72b93a682e47e2e246890ea6971ddc46ee586153549d70cc66b7f603a82c3227";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/sl/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/sl/thunderbird-140.12.1esr.tar.xz";
locale = "sl";
arch = "linux-i686";
- sha256 = "a464a4c90cdbfa9e8e1b1911bc0fa1e6d14fa1ab79aeb9787c734823f52500db";
+ sha256 = "4f442bd3a070de0a640527aa077ce480c1b18f16353425baf7efd179d19425c2";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/sq/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/sq/thunderbird-140.12.1esr.tar.xz";
locale = "sq";
arch = "linux-i686";
- sha256 = "983fd50f8065ff1128162c0bc02d3ce0831811e63ecf2232a60fb539463c700b";
+ sha256 = "23fde29af4fbba7e20a01923b1abe259d296a74871a4ef370c0624a4a28f3a0f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/sr/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/sr/thunderbird-140.12.1esr.tar.xz";
locale = "sr";
arch = "linux-i686";
- sha256 = "42287c4beab560a65eb160d2cb29ef76aea4ad617b04bfc2ca5e31ffa56c5526";
+ sha256 = "445c0654200decad0fdaf7612d9d24c20de827e19054bc619cb5cb65a28b06b8";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/sv-SE/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/sv-SE/thunderbird-140.12.1esr.tar.xz";
locale = "sv-SE";
arch = "linux-i686";
- sha256 = "665f3b3a5ecb750a4c9ed28cde5ed75cf2363ca17aa2d35c0fdcc4345c54139a";
+ sha256 = "04c8955cbd2cf75e2ec0d95abcd594e5a4de5a43f5387e4f37079254c3f61335";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/th/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/th/thunderbird-140.12.1esr.tar.xz";
locale = "th";
arch = "linux-i686";
- sha256 = "e1ed90e486f2f5e0204bf42b281c92ebaf69512200d072d59bbb3e3dcc3976a9";
+ sha256 = "c63fda92f76c6c4c921adfbf06822297665c981cd501b29ec332eb5794816942";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/tr/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/tr/thunderbird-140.12.1esr.tar.xz";
locale = "tr";
arch = "linux-i686";
- sha256 = "e152cb6a608fd4e8fd39dbd64836d08fe764da453117c15ebb182d0e6d86a14d";
+ sha256 = "d4adaf76dfd82ce79ce77fff7b039471f5d308228efa7bddcc13b37f9b680060";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/uk/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/uk/thunderbird-140.12.1esr.tar.xz";
locale = "uk";
arch = "linux-i686";
- sha256 = "951b52b9092be3fdb102439d91d1637112b765236255ec5332023109f0989585";
+ sha256 = "280cd0d5a55af237fab2f2682a006b7f1e988fdaf02b9a44cda96f55658b6229";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/uz/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/uz/thunderbird-140.12.1esr.tar.xz";
locale = "uz";
arch = "linux-i686";
- sha256 = "f8fb96e26415860d54a66defce161f3d838429a9d8350ce71e88f6caa43ea565";
+ sha256 = "492146aa92ced6882a6a55a4780c28f88bae944fa074a3aa1a5859cfd9fa58ec";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/vi/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/vi/thunderbird-140.12.1esr.tar.xz";
locale = "vi";
arch = "linux-i686";
- sha256 = "780b6fd4d2ba00b63a4c6e7627b67414cf9c3cd63104d6a66697886cea126b21";
+ sha256 = "9236344e5284f7fa5b04daef9d2dc0ba09ce21498aa4f2b8ecf35957f23d068f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/zh-CN/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/zh-CN/thunderbird-140.12.1esr.tar.xz";
locale = "zh-CN";
arch = "linux-i686";
- sha256 = "bfb2f2624f6acf646fe355e8b225f43aff91074fe7769ec38a598cc70744398d";
+ sha256 = "9cb9de006d389c13fd00fb0cf9df69139ff18c0b4ece994a2d4b0072f29ea770";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/linux-i686/zh-TW/thunderbird-140.11.1esr.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/linux-i686/zh-TW/thunderbird-140.12.1esr.tar.xz";
locale = "zh-TW";
arch = "linux-i686";
- sha256 = "ef6a6c877a3974f3f2c9ab43f019dd4aade5103cbb2ba231846f057f9d335240";
+ sha256 = "92456256948e38efdde5ea801d0c373f0592707d1bb1178b2f1adbb60ae64213";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/af/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/af/Thunderbird%20140.12.1esr.dmg";
locale = "af";
arch = "mac";
- sha256 = "71384c413ed31247caf5162b2cd7afe37df565febad3dbbec4260204f1aca5df";
+ sha256 = "0fef87105a73ba05dfdf6be92d472d4d5c982481506697a7d2a0add172842a8d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/ar/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/ar/Thunderbird%20140.12.1esr.dmg";
locale = "ar";
arch = "mac";
- sha256 = "c1f52fa77f922c748720965930e9896ecb8df86d9271632b64f732ac15f635e7";
+ sha256 = "28f6c9eab299bc3694d2ef7ae6138889fdae6ed7b7de78c6a9aada87fe4f38a6";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/ast/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/ast/Thunderbird%20140.12.1esr.dmg";
locale = "ast";
arch = "mac";
- sha256 = "4494a9119296b62c834a256baed1f6cfcc887a775749c476540532f775757b63";
+ sha256 = "63869bd4c720fd47ef289b217c5db2bce68518efe0f8345d1e3a44df51e8bc17";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/be/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/be/Thunderbird%20140.12.1esr.dmg";
locale = "be";
arch = "mac";
- sha256 = "666959b19337a26ff81f0ae8b48ac43368ea8e91b7c497073da5fff5b2ff14f3";
+ sha256 = "a5bcf4f3fee19b0b6c841669a83476759b75c0c7084fd01c0f2c45f84310a566";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/bg/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/bg/Thunderbird%20140.12.1esr.dmg";
locale = "bg";
arch = "mac";
- sha256 = "633900af011489b54a465caa2767f51081bbe66c6da0840a94c96e53ab1e5e25";
+ sha256 = "4b211c162a1ec29de5ad8d106c0a629600113c778491126c5897aad5228b0eff";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/br/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/br/Thunderbird%20140.12.1esr.dmg";
locale = "br";
arch = "mac";
- sha256 = "9841cba701ef1207bcb1c8cc5ba741968c4785a7f03f6005baa3026cb5d6e830";
+ sha256 = "65985864e75f7d8d994070c8708d4ef8dfd3a00cd6dbd977a4fa30cad7e1cb57";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/ca/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/ca/Thunderbird%20140.12.1esr.dmg";
locale = "ca";
arch = "mac";
- sha256 = "f595c3892d7626ab90b96580933016533ffa30032c35d56afd6b11099d1788d1";
+ sha256 = "bebe335a26e384ee788885bb8b737b68b4fb8d6edad0c165425d9609079bca41";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/cak/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/cak/Thunderbird%20140.12.1esr.dmg";
locale = "cak";
arch = "mac";
- sha256 = "7ee4bd5badecda67bc6c02ffaea353d8225b800a3e3dad631d1f78e28cce19d0";
+ sha256 = "e94d4fe036361140e747c46ce55166603356f5d46bac4746e14a9363c1519f2f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/cs/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/cs/Thunderbird%20140.12.1esr.dmg";
locale = "cs";
arch = "mac";
- sha256 = "367a85f54fbecd8476f598c9d5cc3eaa59846d9103c80b621698043fd8d46d8b";
+ sha256 = "248cdafa7e62f4b49f914bdc6b5ee69643b754f68d86cd88018d7618e47d70b8";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/cy/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/cy/Thunderbird%20140.12.1esr.dmg";
locale = "cy";
arch = "mac";
- sha256 = "13ac90da12ed2dbeb3f3715212d3aeaaad9b7e591e18d1b7fa1a131fd0903d11";
+ sha256 = "dea95b3c3658ca476f48add5c9bcf89cee784d8076bfd951364168c519b8a7a7";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/da/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/da/Thunderbird%20140.12.1esr.dmg";
locale = "da";
arch = "mac";
- sha256 = "44e07909b0702b93a6a9ecc58db518cc53f37ad51892cadf3ae7fae71506ae1c";
+ sha256 = "976a52ff8776cd75a90a8e3b3ac00026c96ba041f4e76a5de889d010851d4261";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/de/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/de/Thunderbird%20140.12.1esr.dmg";
locale = "de";
arch = "mac";
- sha256 = "fa754adbc3f907347052751567ef6f3ee5d77e6077f7e0fde20c4e7ac1b15677";
+ sha256 = "6fcb167da688ba52bce4477c62c8fe07c67f14718fadcd3719fd49bff63f8c80";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/dsb/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/dsb/Thunderbird%20140.12.1esr.dmg";
locale = "dsb";
arch = "mac";
- sha256 = "87512955ada4e34c18e43652a3a98f66b289cda1d2eef6758b65d2417d073fba";
+ sha256 = "f3ac9ff7d9d24ffd6b267adda98af7944ad259a40600c4bd02d77097c551373e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/el/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/el/Thunderbird%20140.12.1esr.dmg";
locale = "el";
arch = "mac";
- sha256 = "b440215c64da72c295aae50f268d56fd19213cbab62b52735daaa7f6bf2b3673";
+ sha256 = "481796c07b5d469746f9833e0cd5e8e3bfe1cf91216d6e4809b3e3d976f6a942";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/en-CA/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/en-CA/Thunderbird%20140.12.1esr.dmg";
locale = "en-CA";
arch = "mac";
- sha256 = "c06aeafe163740b4cd0c6a8794131a72567e1396a7bcb45a0bd719256bb97b65";
+ sha256 = "6f004764e0139d8ff51ac098d572c5a68351d144d203fa68b797490daa72c9cc";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/en-GB/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/en-GB/Thunderbird%20140.12.1esr.dmg";
locale = "en-GB";
arch = "mac";
- sha256 = "08963c43d94b2b8d0e16b746252da8d48c3015d92f512c63a2868f06ae0667b4";
+ sha256 = "a814bbb9e61deeb5395b11c1dba1f7202dfd4813319f5011d8f99bcd203c941e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/en-US/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/en-US/Thunderbird%20140.12.1esr.dmg";
locale = "en-US";
arch = "mac";
- sha256 = "2bc10b29aed42ce6b6148f351d02042ed81510938fdeaef291894f1f536ebddd";
+ sha256 = "a7545590281d0d75bfcf107c5b281e45b5a09d64229ebfce33592c423b581006";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/es-AR/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/es-AR/Thunderbird%20140.12.1esr.dmg";
locale = "es-AR";
arch = "mac";
- sha256 = "5a596c72011d7e04fafa9edd17c48c5d56b0fa4b25b9774829ef1171519cb9e3";
+ sha256 = "0c36eeff28151332752f6144bba01d9dc5955fa31776824080b920cf474880d7";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/es-ES/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/es-ES/Thunderbird%20140.12.1esr.dmg";
locale = "es-ES";
arch = "mac";
- sha256 = "1a33b872d51c231746998398584840fcec9dbbb2ae5c9aaf85471805003d462e";
+ sha256 = "f4d7bde33c2502435d4e9ab95fc82ce9b1a46f17697bb14b7fd64f51d1fd3d11";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/es-MX/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/es-MX/Thunderbird%20140.12.1esr.dmg";
locale = "es-MX";
arch = "mac";
- sha256 = "564f1c44ee6b2acb27daa93046af0e8b4df6030404ac2c15e69192a2db7b02af";
+ sha256 = "8b7d7252754f16e811e9ef1fc9aae774eb37ef1442dd9676ec8b4e70abd3f39f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/et/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/et/Thunderbird%20140.12.1esr.dmg";
locale = "et";
arch = "mac";
- sha256 = "7f91c172337ab957fa2a432d81929ec7505e510f84ce5c51db5be98679782aa0";
+ sha256 = "b330eb3fe10cd519f80676baa6936697efb9b9d095f7a166180cc36e6d7ee949";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/eu/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/eu/Thunderbird%20140.12.1esr.dmg";
locale = "eu";
arch = "mac";
- sha256 = "44778d36575fa0925e959042097896024fda1818e3148092da80b40afc711d25";
+ sha256 = "cfb69e8ebce5203178f0bb3a900849dff0f0444d72a16458b68c2e465f7c1217";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/fi/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/fi/Thunderbird%20140.12.1esr.dmg";
locale = "fi";
arch = "mac";
- sha256 = "0651b37a0e4783a082741e83393514cfb1c874fedba7d5383eca4015faf8111c";
+ sha256 = "2dacdc3c560f643d7fc967f306f53a872a7cc7558f2a3073ca85ff19a71bd347";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/fr/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/fr/Thunderbird%20140.12.1esr.dmg";
locale = "fr";
arch = "mac";
- sha256 = "dcd4962c03ad913772dea4b21994efa6f2b4a8d7a9aaa7f25f8256c2f219c01e";
+ sha256 = "3d5369d321de23abeb62ad1993342d6d6d71f2da56d0d2ab98011c46ac884876";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/fy-NL/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/fy-NL/Thunderbird%20140.12.1esr.dmg";
locale = "fy-NL";
arch = "mac";
- sha256 = "e273ad2248947a28482f3bbbc940bb82a50c1e7c9f2b138a9bd672db47394e2d";
+ sha256 = "020f9670a519155d05e772a20eaf35ef4aca8075cacd19873f1be23c84d49eaa";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/ga-IE/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/ga-IE/Thunderbird%20140.12.1esr.dmg";
locale = "ga-IE";
arch = "mac";
- sha256 = "ef295ce6bb41f10ed2a9b46ad78b92693493886b4527e4b2f3b339cfcaed1006";
+ sha256 = "d7724a80711c879d559c167088fe41aa1e6531ea38757d1aaae4fe3d043b2796";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/gd/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/gd/Thunderbird%20140.12.1esr.dmg";
locale = "gd";
arch = "mac";
- sha256 = "c20587243b2c52155f36383c9d7807c77888db10828d9a452aeb2ad2818d9940";
+ sha256 = "b6022adc6fc36979a66f8d74bd6e0476673882d6ac60ef0b22d2e59cefffefb3";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/gl/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/gl/Thunderbird%20140.12.1esr.dmg";
locale = "gl";
arch = "mac";
- sha256 = "5fb722d840f6ba1ad387618c4cc12948d0c3f29154eb27fbe80faa152a45fa72";
+ sha256 = "9b9878870596d85f78d511e37d4df4cf504bc61f1dcd5cf184989401b525f9a6";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/he/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/he/Thunderbird%20140.12.1esr.dmg";
locale = "he";
arch = "mac";
- sha256 = "7467a99abe96bc08ed288fe233f5f4200f29dec876715471df94b5715b5b52da";
+ sha256 = "f83d4794e193d00d14bc41b27e955372b9a2af3d6172520ea34433a0a0d20372";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/hr/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/hr/Thunderbird%20140.12.1esr.dmg";
locale = "hr";
arch = "mac";
- sha256 = "3673ed4900ca38a8fc3ecf491c1106bfd8fd62f73b0f1b5d72c19f6a097e894f";
+ sha256 = "8ccaffcfe95a610c00760bb4998be5ad8024bf2805f06d4bcd029ddfccaac0f9";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/hsb/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/hsb/Thunderbird%20140.12.1esr.dmg";
locale = "hsb";
arch = "mac";
- sha256 = "0f8cc936971b3aad9b4825f7b6a44f49b3d1cb131fec95b9e09a298b6dfa7c4d";
+ sha256 = "69bd5f6eaa17c39817680fd9813043a383b564715bcbfdf85342f27d684de10e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/hu/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/hu/Thunderbird%20140.12.1esr.dmg";
locale = "hu";
arch = "mac";
- sha256 = "b3b526480a8580f534f56a15792b8c04d356b78b8055e88f34ea7589d5ec395c";
+ sha256 = "406c258b687c966f1c9bf0d28ff5a47f7cf2716fb20d99a88b512da12b6fc2a7";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/hy-AM/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/hy-AM/Thunderbird%20140.12.1esr.dmg";
locale = "hy-AM";
arch = "mac";
- sha256 = "58ed43d6933d7b0d70935abcd816a035344b346bf5353b9c0b83b8e97e01be5c";
+ sha256 = "182d1415b28855c5524aa6cab0fbd59d5bcb29f0464f5f06b70fff042e0256bd";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/id/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/id/Thunderbird%20140.12.1esr.dmg";
locale = "id";
arch = "mac";
- sha256 = "da3db2edf3773e80976c378c52b522d4019a69a1f14df0c08679587310561248";
+ sha256 = "94f5a03cffe7cb69d998fac6a24a448ea60b1fd22e75cd085eebb6abcf674916";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/is/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/is/Thunderbird%20140.12.1esr.dmg";
locale = "is";
arch = "mac";
- sha256 = "db3966328ab4a5e9cf8783cccdca5955bfd7c049ca772d7f2e9955078d83989d";
+ sha256 = "a6d3624410ac4186f669f7b7115b180ae547fd4c94b508e2cf78b655167fd4dc";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/it/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/it/Thunderbird%20140.12.1esr.dmg";
locale = "it";
arch = "mac";
- sha256 = "7297c55daeeabcd2a60fb55699f1387609e7a3eb9bac3f81a86d1bdb31bd4299";
+ sha256 = "592e9b1bf6ccaf7aa7c380e494910b95dd3975c06b9c069e41b319d744fb5184";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/ja-JP-mac/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/ja-JP-mac/Thunderbird%20140.12.1esr.dmg";
locale = "ja-JP-mac";
arch = "mac";
- sha256 = "78b03aa4af0af37662aff128570964017a730727d9e8baaa6d58ddbb850c15cb";
+ sha256 = "fbe32356a00e8d5feb31387bce6e8345d9cfbf4e598646496fa84e0616717e4a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/ka/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/ka/Thunderbird%20140.12.1esr.dmg";
locale = "ka";
arch = "mac";
- sha256 = "48a6a8fa454da3f2aabe9734ed3271354f26146b6bb63fd0e84c9ca66e525242";
+ sha256 = "260e84ba60f95110adef65b12e8e4f3af0b119e3d56c4610fea9f5015158e5d7";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/kab/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/kab/Thunderbird%20140.12.1esr.dmg";
locale = "kab";
arch = "mac";
- sha256 = "f93bbc335e9117b0bd8b4553a9f908d7088083251c59e8818cfd37f6f9ea000c";
+ sha256 = "fb4fd0e9652a1417b415d4df450e670753f915a05b32de6418e64e61cfd9a84f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/kk/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/kk/Thunderbird%20140.12.1esr.dmg";
locale = "kk";
arch = "mac";
- sha256 = "4898a0e073caf10b3d886f902a99658073f79484ab23faf8ac2d44b4e1066a5c";
+ sha256 = "41f4d663cc28831c7f33d364e18bc50ea4895dd1edbb4e71750ca42c5554f546";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/ko/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/ko/Thunderbird%20140.12.1esr.dmg";
locale = "ko";
arch = "mac";
- sha256 = "bed653c957c9cf392b2b33acac927c7c695b051daafc5c3e2e1df0606b39f602";
+ sha256 = "8788bf49e1d6b94dfd582510fabfb6db11f3d7b1d70a41f3116600f6f7244fe4";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/lt/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/lt/Thunderbird%20140.12.1esr.dmg";
locale = "lt";
arch = "mac";
- sha256 = "a46821ce5e80703f5b98590343491f25aad4d42f46606729612c200f7826a5b0";
+ sha256 = "d3202d63ae54f07a911d8d96bdb3a6cca4c798b31e6478a4d7be39246a614fee";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/lv/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/lv/Thunderbird%20140.12.1esr.dmg";
locale = "lv";
arch = "mac";
- sha256 = "5745ed7e1e54f292e540124b027070fd132807955712722d7ec0b842655873ca";
+ sha256 = "89947413ee7e30f81d794aedd4f553fc84d25ed52556b48daa93b959cd2d4d80";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/ms/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/ms/Thunderbird%20140.12.1esr.dmg";
locale = "ms";
arch = "mac";
- sha256 = "c4f827aa57cde10bd59e24e34a285762d1f765027f6ad834735a2a4a97155b2c";
+ sha256 = "d9fb626dd801eb542717767276fa8ab50615134d3c8fa6a6249a97a8b0a4d530";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/nb-NO/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/nb-NO/Thunderbird%20140.12.1esr.dmg";
locale = "nb-NO";
arch = "mac";
- sha256 = "846c2a0f9b6d118911f2623e949192acc492b37b086e9356b52875357b623945";
+ sha256 = "361a10aeb578c2d00b4af934890b9d19fa6673308a3d8373d567944849980a27";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/nl/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/nl/Thunderbird%20140.12.1esr.dmg";
locale = "nl";
arch = "mac";
- sha256 = "48e6e7be5ea330b39653bdbfca4835db02c9545c51627f8411f8886b70838da9";
+ sha256 = "bae2ec71f7164d27bf51895026f61c5bfc5726e841df2407164b96ac6aa9d6ee";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/nn-NO/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/nn-NO/Thunderbird%20140.12.1esr.dmg";
locale = "nn-NO";
arch = "mac";
- sha256 = "f1b28f4583fac39e57b173040df702d650011c1925082a91b3d630749a6db67f";
+ sha256 = "ad720bc0279ebe05dae45b4504fe3b59a5cb26cade9fb0552e7563b92424c9ae";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/pa-IN/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/pa-IN/Thunderbird%20140.12.1esr.dmg";
locale = "pa-IN";
arch = "mac";
- sha256 = "535cc3c913cb47b4d9dc540c17ba06d8a885904b2a44a0da4e039af010d70bb6";
+ sha256 = "4864c13e90c6002412f52a4ad4edf68f34ea595bfbdf73ae58d84445d243805e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/pl/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/pl/Thunderbird%20140.12.1esr.dmg";
locale = "pl";
arch = "mac";
- sha256 = "4195b67da5ea25f656f44523a111fc0e5876b299b5293e015c651f9a12833062";
+ sha256 = "5132c04421c86392a2b20f92a25c0f40760b106cededa99a32779b1376b2f3aa";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/pt-BR/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/pt-BR/Thunderbird%20140.12.1esr.dmg";
locale = "pt-BR";
arch = "mac";
- sha256 = "e0b1ee7eacc6252d6bfb7233504c17c8ed178048dfb34fb1294d2624203e2cca";
+ sha256 = "044b80f53e19945a95905cb14397038cb9031c8e87cd0c821f289cd72d94c6c7";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/pt-PT/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/pt-PT/Thunderbird%20140.12.1esr.dmg";
locale = "pt-PT";
arch = "mac";
- sha256 = "2b9518c194259e570be52a866a13119f8a53effc8ccf47e602a0301bf51e5645";
+ sha256 = "98898d9bef060de7f1d015ba41cb6d18970c621c6164ac2eae2fed5a1f5d0339";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/rm/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/rm/Thunderbird%20140.12.1esr.dmg";
locale = "rm";
arch = "mac";
- sha256 = "3b184d62ac323cf4617693dbc3fded23edc0f6e24ae0184310e0b3114cce2442";
+ sha256 = "3f36fee7c1133c5b0e88c9653a1a1e4c6885dbd3e08656571ab11522092b443f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/ro/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/ro/Thunderbird%20140.12.1esr.dmg";
locale = "ro";
arch = "mac";
- sha256 = "361ff7aec05dde3c141193fa02c51ff5233ed5c6164ad2f592c5c019029f0935";
+ sha256 = "7a92082eea4fd402b6268f9afd0edd1e628538a934c0043128622282ad4e2acd";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/ru/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/ru/Thunderbird%20140.12.1esr.dmg";
locale = "ru";
arch = "mac";
- sha256 = "0a4f588fbff81465284f80e46556577860cf4e39e091c9e35c3e5478a4a4f568";
+ sha256 = "23e1ca559b2b38d001704b5e4a412186a09f822c1f6da7e05f6c809ca79f908f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/sk/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/sk/Thunderbird%20140.12.1esr.dmg";
locale = "sk";
arch = "mac";
- sha256 = "74104f7ff10755d3fffa97c9fc00c71011808a3247b9c895e72323ed393ba0c6";
+ sha256 = "e22c2f92dd219666bb93279cd99b3c488e6a5ccc090b6c5f9a5d5dc53d0e8d7c";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/sl/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/sl/Thunderbird%20140.12.1esr.dmg";
locale = "sl";
arch = "mac";
- sha256 = "0a8aa57d7e45c3831a5a0ff67ca2a0617a9a580bd1bc543c6956d13d9fab5ebc";
+ sha256 = "7229fdbe391154c0a5d2282f61c3e11d7fc226230a13552b4d4df1cb25cbc0e3";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/sq/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/sq/Thunderbird%20140.12.1esr.dmg";
locale = "sq";
arch = "mac";
- sha256 = "c1049a86ec71f56ca56fa9ce0af245fc84afc600274f572376c62dea9c06f1dc";
+ sha256 = "4fd15f38178e96fad7192587e557165bcafbe6b303ee0a5b46c48357e92348f3";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/sr/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/sr/Thunderbird%20140.12.1esr.dmg";
locale = "sr";
arch = "mac";
- sha256 = "ea00bccc0d461dd18f8bceb3d5291f0d8938ec33cfe4f3a62f340eba1d7e0d0c";
+ sha256 = "c7ae5528e9dc77069eccf1194273c1e47f784884a0c463e10b20c2bec4f2d614";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/sv-SE/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/sv-SE/Thunderbird%20140.12.1esr.dmg";
locale = "sv-SE";
arch = "mac";
- sha256 = "8cc6fed9ca0f5dd538b4b0f7847ed288d3dce1417e3711a8108d407506334116";
+ sha256 = "deb300d744da7c1ab6a64993b1f468ff6b9be32e8911569631b623a037208420";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/th/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/th/Thunderbird%20140.12.1esr.dmg";
locale = "th";
arch = "mac";
- sha256 = "c9ea193f65ded29b4b7fe95b976e2b3986991fc27ce2c36644c3b19d670897a1";
+ sha256 = "7554039b6255191f1c270dd5c3d9582cc9d0c2c4d904adf1260da99b6d6e413e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/tr/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/tr/Thunderbird%20140.12.1esr.dmg";
locale = "tr";
arch = "mac";
- sha256 = "599f39c1e9afc484e93a889d4c61b6951cc4ea6bc3cc97c3b89d233e053f07b6";
+ sha256 = "18fa954a199e7b6d4520741f09e7549f33a0cd96111f8cc4228eb79a634af116";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/uk/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/uk/Thunderbird%20140.12.1esr.dmg";
locale = "uk";
arch = "mac";
- sha256 = "fa31863b8cbd39628cfa8c6e1e6152ba44d12e1b2545f02ba12651c0ea236b5a";
+ sha256 = "ce9fe5b139dc104f300e834eca6d091832af90152537ff11729353e1314d05fb";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/uz/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/uz/Thunderbird%20140.12.1esr.dmg";
locale = "uz";
arch = "mac";
- sha256 = "dc14d21c99880d48646d3207091d3ca6771da82384a8d89004964b6d013297ae";
+ sha256 = "1417676c77fff78b411e532eddb17fc22f7c2eb92fa3a996de9135bdca4cd30b";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/vi/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/vi/Thunderbird%20140.12.1esr.dmg";
locale = "vi";
arch = "mac";
- sha256 = "6284f3cb464dfd22a4277bdcbf8a02cbd4a8a2b3906ef0a4c8afcb189c509a08";
+ sha256 = "b2711b07f3db0980744c4576e95d5ad10846710e95dd1b75352eafc2b1052491";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/zh-CN/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/zh-CN/Thunderbird%20140.12.1esr.dmg";
locale = "zh-CN";
arch = "mac";
- sha256 = "56813d07d216c08b101b9368913ecdd95ad01163dfb925acce3942056ef7be40";
+ sha256 = "a29458425d6fc8bd85307629ebcb841fa38d8e47a8dc419c38db1ad047663493";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/140.11.1esr/mac/zh-TW/Thunderbird%20140.11.1esr.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/140.12.1esr/mac/zh-TW/Thunderbird%20140.12.1esr.dmg";
locale = "zh-TW";
arch = "mac";
- sha256 = "950f3f82e472db1aa408ec50817e40225c38b4511d66ba727240e1c42cc64e10";
+ sha256 = "10154c8457e2e1fb74355485b8d9afd251d134a7c189fca2886564b223683a1b";
}
];
}
diff --git a/pkgs/applications/networking/mailreaders/thunderbird-bin/release_sources.nix b/pkgs/applications/networking/mailreaders/thunderbird-bin/release_sources.nix
index 92afe41b632a..44a39a193ea8 100644
--- a/pkgs/applications/networking/mailreaders/thunderbird-bin/release_sources.nix
+++ b/pkgs/applications/networking/mailreaders/thunderbird-bin/release_sources.nix
@@ -1,797 +1,797 @@
{
- version = "151.0.1";
+ version = "152.0.1";
sources = [
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/af/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/af/thunderbird-152.0.1.tar.xz";
locale = "af";
arch = "linux-x86_64";
- sha256 = "aee6f67628574c2ea7227674fe7211b3e98b08c069f075c296240f3d21e2b8bd";
+ sha256 = "4d81a3dac8e71d11950fc908d025afc54d6c96a8464ff30728b70e3359cc27d3";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/ar/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/ar/thunderbird-152.0.1.tar.xz";
locale = "ar";
arch = "linux-x86_64";
- sha256 = "d08d8488693158922d1ec5ed80718fd4f4df11f9c29d0dc4ed7c09faa2c754a3";
+ sha256 = "30e4b843aecc0e29e5f0e21c786746230b2a0a8fbec302f3c931c9d1256c40f1";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/ast/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/ast/thunderbird-152.0.1.tar.xz";
locale = "ast";
arch = "linux-x86_64";
- sha256 = "d1a8e7ea9c27369261eb84de41c6f7f770b4efe11ebbc2dbb07f60abfeb3fa86";
+ sha256 = "f27e475de0c8fd493812762d738955c2d829ffa55152cb8818e3d1a838b76654";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/be/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/be/thunderbird-152.0.1.tar.xz";
locale = "be";
arch = "linux-x86_64";
- sha256 = "d58b2b360da1bd58944a4bb566895150cf9bb13c966dcc770d49ede19e681951";
+ sha256 = "695938a400f10cb01318b33351299b01d46d749c091b473b3617802443ef206a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/bg/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/bg/thunderbird-152.0.1.tar.xz";
locale = "bg";
arch = "linux-x86_64";
- sha256 = "7f75a7bf7737d367fe4443e2685bfa785ed7a603510d18d542163a15dcfdc37e";
+ sha256 = "dc02bb1a8dcb5914112ddee4f1d040032bc3d20f115764da0e9d04682f19575e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/br/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/br/thunderbird-152.0.1.tar.xz";
locale = "br";
arch = "linux-x86_64";
- sha256 = "bf6374b33f1deb231b429eb9c5097b10b7989333eefb8c30fa2fb990592a3193";
+ sha256 = "fbce72250ac139d59d6afe0b9ef4e0b30d0173b895a0a164233fb3fa8381828a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/ca/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/ca/thunderbird-152.0.1.tar.xz";
locale = "ca";
arch = "linux-x86_64";
- sha256 = "1d8282b5f59e525f6f8eb526fb7dda0b1ed32c3ec3dd681a4b84b119ab0f0a82";
+ sha256 = "df734731d9e17d367e099cd2bed636a899e3f1dc1ecdcb3489e20c996adfa5b5";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/cak/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/cak/thunderbird-152.0.1.tar.xz";
locale = "cak";
arch = "linux-x86_64";
- sha256 = "ef36b382578f51b5b0987c3882a246f9c7e2cde2ee09f7512b953e529d97bbc3";
+ sha256 = "a39a113102842c31f1e6fce77640e9882e74b10634d4e6e7619ab3ddae9ae1cd";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/cs/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/cs/thunderbird-152.0.1.tar.xz";
locale = "cs";
arch = "linux-x86_64";
- sha256 = "4cbd34b1575e4f439071c66a63664f5e62f2c08cbbe53466404571b11e1da381";
+ sha256 = "b02377f4575e0309d7f01165b3e8eba9af2794525d3541f2532b2bd8eb2141ea";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/cy/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/cy/thunderbird-152.0.1.tar.xz";
locale = "cy";
arch = "linux-x86_64";
- sha256 = "76a854b052b7ed835530bddddd3d28d0df9802361bf03fc2ff5d208e04378527";
+ sha256 = "c3c1c7cefccc0407b0af66a58d906db48c4ba7adb91379ff88096aa8fa23c99c";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/da/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/da/thunderbird-152.0.1.tar.xz";
locale = "da";
arch = "linux-x86_64";
- sha256 = "2d9b95a303f59f6e87c26fc2d344ef27199fc3fb001ead5651e680a88494b3da";
+ sha256 = "14584ef3996ec7c23c61da688dabd12dd1efdd8b31aeff55e28db0c64b49874d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/de/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/de/thunderbird-152.0.1.tar.xz";
locale = "de";
arch = "linux-x86_64";
- sha256 = "403255843b8219e73458e02fb1fdb08db61a0e16bbf9c0e99a175c26787dfb15";
+ sha256 = "5dfddb6ea62d75292b9d119bb56529f719fe38a8a00f2db4377bb74ceaaf5832";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/dsb/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/dsb/thunderbird-152.0.1.tar.xz";
locale = "dsb";
arch = "linux-x86_64";
- sha256 = "e47db6d51bbf8927c5b0e6e9d3499f676f91df9b1f0080705c4b9582aec78a79";
+ sha256 = "82aba1f083e356920afa71f0f64d71fd6d4dbe2bd456f9a25ece63c312a083b2";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/el/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/el/thunderbird-152.0.1.tar.xz";
locale = "el";
arch = "linux-x86_64";
- sha256 = "6ba1c00f51d281676cd88c29a9cc4e979d54b298b28eef8eae6d988076eac2b0";
+ sha256 = "60126796e6519edd80da3cdd8a906b85027602f2b0ed7e0719a36fd478da7693";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/en-CA/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/en-CA/thunderbird-152.0.1.tar.xz";
locale = "en-CA";
arch = "linux-x86_64";
- sha256 = "e8e81308e3cf4a4de85d23b3dd40395834ac9d3c52a35acbffd6e5568b4883ba";
+ sha256 = "13f78d7e874c282ce1d2247ce34f6cef87bd0de0200f8b50ceff7ccbee883fdf";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/en-GB/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/en-GB/thunderbird-152.0.1.tar.xz";
locale = "en-GB";
arch = "linux-x86_64";
- sha256 = "758700ca0c5aaa94ccd3a1f5f48baf340903b895d53eb13565b2e9eebd2b6819";
+ sha256 = "26720c7ba7b48cd33343dc5f9256f8a642e0371b86cb728e83622a2a2404b69a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/en-US/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/en-US/thunderbird-152.0.1.tar.xz";
locale = "en-US";
arch = "linux-x86_64";
- sha256 = "350c77286ad11cd2679d22b0cf9d15e84b665cef70c1b436d177cfa43846c6a8";
+ sha256 = "4c1c89352b5593d8a9fce73e10c446c9f95efad9160230082bed071b2af71f9b";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/es-AR/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/es-AR/thunderbird-152.0.1.tar.xz";
locale = "es-AR";
arch = "linux-x86_64";
- sha256 = "cbbe3ff9b6af69f528ec84f5dfa34e0449316e40fffc79c1ae6f24e96bf64794";
+ sha256 = "a531075526dec09870efcd102008f8a869658c44d59f675fb91ce1137a23d18e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/es-ES/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/es-ES/thunderbird-152.0.1.tar.xz";
locale = "es-ES";
arch = "linux-x86_64";
- sha256 = "23964319a5491b5d04b903060f2e392247bc7ccee9bd528bea11be093258e8a3";
+ sha256 = "bc2a13c87c2740f2f6b560f8fedbee8b02b236a8b6c33639c4d8cc6bc7bfd594";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/es-MX/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/es-MX/thunderbird-152.0.1.tar.xz";
locale = "es-MX";
arch = "linux-x86_64";
- sha256 = "574079dacc7f707c49bda4016601f63cafdbd5b262dfdfd2eb3fcd5b84a0fcee";
+ sha256 = "aa98d74303220b1f8f3da31a2a46073615a0335bf7e333447436e769e58adba3";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/et/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/et/thunderbird-152.0.1.tar.xz";
locale = "et";
arch = "linux-x86_64";
- sha256 = "4ee41f1b58b6b4ce86995897cc1e19e81789733ccabf19dce951f7eaeff4dd97";
+ sha256 = "6dbebe03fc6b404407a1d0704dc8fe336c6b370bf0ffece70f5dc17676fac032";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/eu/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/eu/thunderbird-152.0.1.tar.xz";
locale = "eu";
arch = "linux-x86_64";
- sha256 = "e35488c88b702a19594c0558e3e102e0a0bb57759477652ac7165a424b00cdf4";
+ sha256 = "aca435a77ca215ce12fa0057c4dbf14e4aecd56615ca9965bce14a5d43159836";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/fi/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/fi/thunderbird-152.0.1.tar.xz";
locale = "fi";
arch = "linux-x86_64";
- sha256 = "df08b81f17519da8a49ba9a6b5e7cc0bcca049b124aedb274c83adad4de0296b";
+ sha256 = "ed66ab39a832e16fc1a6eabda70b10ebfb377a4b3647d555736759458a0e5238";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/fr/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/fr/thunderbird-152.0.1.tar.xz";
locale = "fr";
arch = "linux-x86_64";
- sha256 = "c9242ad7d08ffe8d156900dbc8cce3d2b5e397f0534e6414418d924f46c5e6f5";
+ sha256 = "64f997263e5a66e7fe888500595c8b333cf93e82873c091308862213c414ef52";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/fy-NL/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/fy-NL/thunderbird-152.0.1.tar.xz";
locale = "fy-NL";
arch = "linux-x86_64";
- sha256 = "e95d8aed2e678fd8263b0d38f1deeb59d97f86cc7fffaed50c74da1da08e55a5";
+ sha256 = "d2ed5698fda8515d3e0ad41a2d1cefac42ebd1b1d48f48dfef338509b4d652d8";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/ga-IE/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/ga-IE/thunderbird-152.0.1.tar.xz";
locale = "ga-IE";
arch = "linux-x86_64";
- sha256 = "0cfeecd2ece40ad73731ffe06d47100d93b4fd2b4bb28b874484099e0b87f6d1";
+ sha256 = "c121fa734cbf24d157dfbe53f06d43a483dbaa3fb443ef4858dbd5ba0bb89c45";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/gd/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/gd/thunderbird-152.0.1.tar.xz";
locale = "gd";
arch = "linux-x86_64";
- sha256 = "014fd0e0aaa39c12b89c54e447699e9db1946e75ca72d7d0340a167485320fb5";
+ sha256 = "118d82a56ca7b5cab8d4f58821958bd5048cea9d92a9866328c840b827114cf9";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/gl/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/gl/thunderbird-152.0.1.tar.xz";
locale = "gl";
arch = "linux-x86_64";
- sha256 = "01a6e31e7b48f7fd4bc5773d4f6acdc34ffb526f5f6b48f5f777c7aefea0206c";
+ sha256 = "ce1e968514ed207ef3dec874c03fd6b38ea919ca323d6f864943c989866a1aa0";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/he/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/he/thunderbird-152.0.1.tar.xz";
locale = "he";
arch = "linux-x86_64";
- sha256 = "c6accef65894bc092ddf2eaed14a13327eaa1e748d69b654314a141abf737fdf";
+ sha256 = "5fb9ad329da71e722d7c09104173e50198ff60e2d60b019ca545c61cc309e575";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/hr/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/hr/thunderbird-152.0.1.tar.xz";
locale = "hr";
arch = "linux-x86_64";
- sha256 = "9671f388c66d5776aaecef4e1820496a63101bba318690ed8936d1a74b6da1d6";
+ sha256 = "fd054e8e357eb45ff0185782c39aea1ffe3fbf9d9c73e212c7a508f71ebb5363";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/hsb/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/hsb/thunderbird-152.0.1.tar.xz";
locale = "hsb";
arch = "linux-x86_64";
- sha256 = "0287dea060ddf05d49afe47fdff227e983b1173276ed1b61394d76f0649e85ee";
+ sha256 = "120e6cec01b5b384b9e1c8e1f68d607f922e197e0e80e935f1519c51e8d91b02";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/hu/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/hu/thunderbird-152.0.1.tar.xz";
locale = "hu";
arch = "linux-x86_64";
- sha256 = "ac9d347c7128ad6f03eea37b33b2917936ebad221295fb9d5ac080b08094cab9";
+ sha256 = "f1e32edada9bf6649af6abdac582972dc51f342ed4698c7b5ec4055ea4166dab";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/hy-AM/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/hy-AM/thunderbird-152.0.1.tar.xz";
locale = "hy-AM";
arch = "linux-x86_64";
- sha256 = "ff0a1336cb1d2e8aed9d97c5c9a0f729b27f5ac81363e7ea621c65eca05e1021";
+ sha256 = "5cdc75efea4f9d5cb12217c83f5697542544b48d042625c83205187b181f1e91";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/id/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/id/thunderbird-152.0.1.tar.xz";
locale = "id";
arch = "linux-x86_64";
- sha256 = "01b3ef18cc6ff34b70d8aa8848f10ccd6f5d975c08a9190e4ed16475036d2651";
+ sha256 = "5ab5a0c8df4f329cddc24fe5b3cd9f7c6d68fc1023e33bff4ea97aea276caeb6";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/is/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/is/thunderbird-152.0.1.tar.xz";
locale = "is";
arch = "linux-x86_64";
- sha256 = "c2d12e700d782d6e415ec288096b26df49882816c833f5120dfce5a36e5693c5";
+ sha256 = "99b443148993fbd16fa6de8703949fa8935a2a03a3d51e3381fbf3b355700f61";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/it/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/it/thunderbird-152.0.1.tar.xz";
locale = "it";
arch = "linux-x86_64";
- sha256 = "132b26bd20fe31492530b1ff7d355cdfa144ef12f3c20fc3ec13c9184b415cfe";
+ sha256 = "db9c3bf364f972e93ac76218a8375ad28e3fca4c679c5cb4d2cd4eee5c50aae9";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/ja/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/ja/thunderbird-152.0.1.tar.xz";
locale = "ja";
arch = "linux-x86_64";
- sha256 = "2d7e3f83e74a39bb01278535828620e475e9c323beb3ab8b3f25f82119123d56";
+ sha256 = "3443752d5321e2d6362a839a052bac4704fafdab9050711c2b5f7f376f429db9";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/ka/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/ka/thunderbird-152.0.1.tar.xz";
locale = "ka";
arch = "linux-x86_64";
- sha256 = "5eb27ddd0e84c3822c0114014c2b80f2542236d06d71835ae5737263433ad3e1";
+ sha256 = "f4605a1f51a11e4967ae780885519dbcb3c5314e3f7fe052c8a3c59478acca51";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/kab/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/kab/thunderbird-152.0.1.tar.xz";
locale = "kab";
arch = "linux-x86_64";
- sha256 = "87dcf426ee9c5cb57d20b7221e9eaabade8c9f6ba78749d0f2e5b44b8635bfaa";
+ sha256 = "017592e09e8c3dbc99cebbb3f395e21d73e1193f294257cba8530df246bf0aa9";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/kk/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/kk/thunderbird-152.0.1.tar.xz";
locale = "kk";
arch = "linux-x86_64";
- sha256 = "4f2ebcf0c32e5698a2ba60420448f53e4342674c1ec16c2df7b6f74e3831242a";
+ sha256 = "b52f50007704f3d5d091ae772c8bb47a8b6be859767dd05e3dc3b6ab531d810d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/ko/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/ko/thunderbird-152.0.1.tar.xz";
locale = "ko";
arch = "linux-x86_64";
- sha256 = "de65be3d933e2b27dfb16cacd6dafacf4851ff2dab4515a199132469a6c8bf55";
+ sha256 = "e7dea245659b76060d7b1a4d629aa7d54dbc51afc38e78c66e284c40e9d69d76";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/lt/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/lt/thunderbird-152.0.1.tar.xz";
locale = "lt";
arch = "linux-x86_64";
- sha256 = "e23ca590d95a7bc4ff20626fac7df7b3f11676eb3a2d914258166adad53bb82c";
+ sha256 = "ebc4e083a78d4997021556c3733f428f39563d160be5fed9e26c174032890c48";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/lv/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/lv/thunderbird-152.0.1.tar.xz";
locale = "lv";
arch = "linux-x86_64";
- sha256 = "159c11d970160dc793003c00defa52545276ce7268211207de671426d9046518";
+ sha256 = "9ea1e28299f96d04d4d7c79831c96b27d2ffaf5766825625ec15b32f4a0c3aa3";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/ms/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/ms/thunderbird-152.0.1.tar.xz";
locale = "ms";
arch = "linux-x86_64";
- sha256 = "f69ca46fb945d584ea17c0642fedcde5471220c45e3067894c9bedc5c14a87f2";
+ sha256 = "83907525cd325568caaa2e118d17aa2a7fa376597230b99e5c6501c662bbac67";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/nb-NO/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/nb-NO/thunderbird-152.0.1.tar.xz";
locale = "nb-NO";
arch = "linux-x86_64";
- sha256 = "588c4b5857b986cf3c0beadcc1def800aac4a42ac35062bdb47ed41c66126c91";
+ sha256 = "4e1914054f7360cffdf5ad8eb768acb7b1b6ad12fbebd42af2ebe25ca2c65aeb";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/nl/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/nl/thunderbird-152.0.1.tar.xz";
locale = "nl";
arch = "linux-x86_64";
- sha256 = "042d0f2c57e5203ece0bcd960f1eec1b1cff26dab5d618e0592b23537e04833d";
+ sha256 = "03555fabad23a6feaef4c3bfc36dfe80a277f95a61d778948e65200dd6ca901a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/nn-NO/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/nn-NO/thunderbird-152.0.1.tar.xz";
locale = "nn-NO";
arch = "linux-x86_64";
- sha256 = "1892f334d471fa7dee84bb960b6d1f902b9869e2be27bf2868499aa8f22d8fbb";
+ sha256 = "348647bc24040a353824035a02fa937557cb06d4fd789ed5faa545db0c6a8d44";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/pa-IN/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/pa-IN/thunderbird-152.0.1.tar.xz";
locale = "pa-IN";
arch = "linux-x86_64";
- sha256 = "762b122c86097e1594e1d1d7f8fc6bdbf97f8b8a98d1d2d4f5d4910d3b9c703d";
+ sha256 = "68aff1456e36ef21ac64eba44f859ed0c5babfccba1afc4e91d4d3168f5b5ffb";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/pl/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/pl/thunderbird-152.0.1.tar.xz";
locale = "pl";
arch = "linux-x86_64";
- sha256 = "78537831b639575e9b0d78e8c2e4c8e762890908a3f73984c580d09596564190";
+ sha256 = "61029cd0b65035f39cbd8fccea313d56a13a1ac3d6752a5a30820486724c5a39";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/pt-BR/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/pt-BR/thunderbird-152.0.1.tar.xz";
locale = "pt-BR";
arch = "linux-x86_64";
- sha256 = "dc496532391a6a742f6be8ef1dc585a19c41421dd4ba67f183cc07103934957e";
+ sha256 = "2da35094aefb00d8c6cb5de741ee70b2f7f0b83972f1eed0bd63c9a2ace4d0c6";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/pt-PT/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/pt-PT/thunderbird-152.0.1.tar.xz";
locale = "pt-PT";
arch = "linux-x86_64";
- sha256 = "48e607388ed4da0e0bf3b61aebd17ab81408957ef0da2a9915fc1202917bd208";
+ sha256 = "50a2160a41264a44dc9daa22e0443c3c7d79b165f6612655d314dcb40651cd43";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/rm/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/rm/thunderbird-152.0.1.tar.xz";
locale = "rm";
arch = "linux-x86_64";
- sha256 = "e255a0231407560d8d00a0faf84b187985d471f47ab8c77b4f872f4e81d5a102";
+ sha256 = "ea61621141f6d3f957dcc52e4b8e63c5f0af2da9c71c11538cdc494c6fa9e713";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/ro/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/ro/thunderbird-152.0.1.tar.xz";
locale = "ro";
arch = "linux-x86_64";
- sha256 = "2c45b57aa3d0fcfd2531c6a9310b469a85db65d649b291afdd57ebbc2404a3c6";
+ sha256 = "f59aa1fe09405b50413eef49a0e9dec3d38cc853a6e3b0805556b9e6edfdc435";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/ru/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/ru/thunderbird-152.0.1.tar.xz";
locale = "ru";
arch = "linux-x86_64";
- sha256 = "cec101067329f01ea1bf7d0ff857879b7677271acbf9d58a62f0fc361ff8f6cf";
+ sha256 = "e56f0979e9e4fec993cdef77bebbfb3f70a94c28a7b041d5891c5f5108875b43";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/sk/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/sk/thunderbird-152.0.1.tar.xz";
locale = "sk";
arch = "linux-x86_64";
- sha256 = "1ef2995f78cf0d6342d386d16de0b033890a8d976e9e156050c1c90953ac234d";
+ sha256 = "c80e1b7f55ff1b377ee5e31170e0eeab702e19c2cfcdd1d1d6bb0a28a292552b";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/sl/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/sl/thunderbird-152.0.1.tar.xz";
locale = "sl";
arch = "linux-x86_64";
- sha256 = "dbee23cb2a06b718a02e7cf05b3052cbd33943e65b5f284d9d08442067eb8ef2";
+ sha256 = "d922a7ef6bc55a6499676498efd8d580c93f9d8c90f04493f62b0239386018a5";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/sq/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/sq/thunderbird-152.0.1.tar.xz";
locale = "sq";
arch = "linux-x86_64";
- sha256 = "6dd49a3a60231d3046101094c0e47749ec2a0b748271a78e1be3189c8fa9756c";
+ sha256 = "5040e32916ac1328b404327b07d00448b04c8f7c5340e43088253cf04242215f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/sr/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/sr/thunderbird-152.0.1.tar.xz";
locale = "sr";
arch = "linux-x86_64";
- sha256 = "941f9be3ed637a8cc13f3b955fa53b527a0da20dc4d680094b545eff522d152f";
+ sha256 = "3fe1d75afc21fa130ab42595ae754b70ce70c9237654271d24b78e3ca2bc8e9d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/sv-SE/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/sv-SE/thunderbird-152.0.1.tar.xz";
locale = "sv-SE";
arch = "linux-x86_64";
- sha256 = "0854e7608bc22311d9f763939143f502e022aec5f73d50d202f670814ef5f713";
+ sha256 = "92bc1225f62f3cd9722e7698815ffcf4c7461ad85a33171b7ba7e845e43af5b0";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/th/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/th/thunderbird-152.0.1.tar.xz";
locale = "th";
arch = "linux-x86_64";
- sha256 = "adae4b6084ef579c41bffe2094c2fbd80d840821769b4af7d5a289d1f8be80f2";
+ sha256 = "e42cb3ca1256dc8c8ecee3608c42aee52d6af242f9c1e84f70d6f89b09eacb10";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/tr/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/tr/thunderbird-152.0.1.tar.xz";
locale = "tr";
arch = "linux-x86_64";
- sha256 = "044e7f8bc8f4714b189d88c034abcada3a6815e05aab59573f0de719f7ea3352";
+ sha256 = "412b576b11fc50523c2d60cf424a3345a7c60c687c3a9a19324654feb05d00e6";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/uk/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/uk/thunderbird-152.0.1.tar.xz";
locale = "uk";
arch = "linux-x86_64";
- sha256 = "e85c60ab8fc67a46c5ccd62c70b4693c88145b05ec2280bcf3a8ec3991e3e382";
+ sha256 = "b4f0134adf16d406cc385cff255ff89de3f30ecfb351d7e4cae69652feb53c85";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/uz/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/uz/thunderbird-152.0.1.tar.xz";
locale = "uz";
arch = "linux-x86_64";
- sha256 = "9d02e76e71dd186c01e2c285d31c557ccb8581b7a34ba63a366a2f4a31497686";
+ sha256 = "9be0000d168ea4e7cefb8db26a2e6581d090f3d67d80e30281a6e9a3141e441e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/vi/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/vi/thunderbird-152.0.1.tar.xz";
locale = "vi";
arch = "linux-x86_64";
- sha256 = "a71e10eab8d868409d255cb27bc6ca6293284ac181a08278755e846df5051bc6";
+ sha256 = "2f002d79964af466b1c85dc6cb0ab9796bc63d526975c837448161852904e20a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/zh-CN/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/zh-CN/thunderbird-152.0.1.tar.xz";
locale = "zh-CN";
arch = "linux-x86_64";
- sha256 = "41f7e2965fd6a86a910aeaaff7695b2d6b52834f5544c2d0390fc069cdd3c1ae";
+ sha256 = "96b250be51398b0a48cd1ed47a92fb17b326da5f3444d8f2b7623cf0caccc2f7";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/linux-x86_64/zh-TW/thunderbird-151.0.1.tar.xz";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/linux-x86_64/zh-TW/thunderbird-152.0.1.tar.xz";
locale = "zh-TW";
arch = "linux-x86_64";
- sha256 = "760bca2bd7c63edfc5b9f4d0f0963d0761a86ec7f2689ae3135080bf0f5031b3";
+ sha256 = "544cb2db7c03a21af83869d86154a105ef332f2658885fb0cdba0122b555d432";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/af/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/af/Thunderbird%20152.0.1.dmg";
locale = "af";
arch = "mac";
- sha256 = "4ee9d6a7b599332945190054920adf614b58085d7707886f956168b1b78abd5d";
+ sha256 = "4408ab7b882c87b49e336366d734d092d0179df4fdc42a02cfdb285564080dff";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/ar/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/ar/Thunderbird%20152.0.1.dmg";
locale = "ar";
arch = "mac";
- sha256 = "ff5ae57c4ec01fa9f97035b3eb0fd2d90cdc66e428e6b821134e6cab30b2d65f";
+ sha256 = "89ec721e4ddfe899cbf091c8106daff50bf6d7f24c16c057d24d84d6d27804c0";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/ast/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/ast/Thunderbird%20152.0.1.dmg";
locale = "ast";
arch = "mac";
- sha256 = "82a4053f603dce3f797f9d3c115eafd16c389d26913cc66e9aca69751bb46446";
+ sha256 = "1d25f08eba3ce2309ad50301d63e075a5a2c432860415a497164780b14ed8503";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/be/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/be/Thunderbird%20152.0.1.dmg";
locale = "be";
arch = "mac";
- sha256 = "022366dd373cb23544f6e280c1ad076fc74e9899a7c6da3da87efa05a957f1c2";
+ sha256 = "d8ea62ba64e8f11fbef7f5ce7498f9741dde044479a362f6fe74797a23118bfd";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/bg/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/bg/Thunderbird%20152.0.1.dmg";
locale = "bg";
arch = "mac";
- sha256 = "2def93dd5b36a3515bef68b79a9fe1f29e13059062465e90ea51a28dd8742190";
+ sha256 = "4da05c87c12bcae424e7aa2fb6f929e396f57c77c2b811cc30f57e4872702b20";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/br/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/br/Thunderbird%20152.0.1.dmg";
locale = "br";
arch = "mac";
- sha256 = "b740ae16fa784cabf6fedd845b79b319510f2a4fc14b4408604ba293b8a61084";
+ sha256 = "78d270d1e5927e563ba21039b5e196adf69e7a0324c40fe11125fe20c635c451";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/ca/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/ca/Thunderbird%20152.0.1.dmg";
locale = "ca";
arch = "mac";
- sha256 = "27c82ffde3968acf31bb81025ad31a275057866fec25b58d332dfbee443bdc2a";
+ sha256 = "032afb66a26ec0dc03b72b7ca80ee4a6900cdaeea2ee66056dd437e7e887312a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/cak/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/cak/Thunderbird%20152.0.1.dmg";
locale = "cak";
arch = "mac";
- sha256 = "555d0a5ca28787dd72b656acc8abf953bdbdd3ca79b9d721ca09a8d6017b3172";
+ sha256 = "41e5c9b3835e6d92739902d298cb317fe9d2db8ad72a53c3b9f78867d13669d9";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/cs/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/cs/Thunderbird%20152.0.1.dmg";
locale = "cs";
arch = "mac";
- sha256 = "edc44e48ea143f746c893fcde6eab2263f9c427cffdf6202316a514fe7d8dbcc";
+ sha256 = "f0bec80b949c9bca491565f0cccb24228834a7cc1d47abc54c8029b5584ac97b";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/cy/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/cy/Thunderbird%20152.0.1.dmg";
locale = "cy";
arch = "mac";
- sha256 = "bebdda5cc81addd42068edd426bce89da4a88fdd21bf46c5adc25b540e9194f3";
+ sha256 = "a6242b2b7dc0e8d34b3763a54c8b7e84cb6eaab116e6c8af8cd23de934445156";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/da/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/da/Thunderbird%20152.0.1.dmg";
locale = "da";
arch = "mac";
- sha256 = "0dea7848ec06c8ddaa89d21d1af2800bb40ccfcf6830ebb391842df63bdddbbe";
+ sha256 = "54ca25e3c72f4c57b83fdb0d058e48fd144a71b754d930f28e14a7d80e7ece92";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/de/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/de/Thunderbird%20152.0.1.dmg";
locale = "de";
arch = "mac";
- sha256 = "2b8a6fab36d9e87624293641514a89f95fb840fd96e5ac01fc19f58a1d1ac3f6";
+ sha256 = "9f3adbb7b8728d36462c884111b0933eea00761102417a96b6718973235e6d13";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/dsb/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/dsb/Thunderbird%20152.0.1.dmg";
locale = "dsb";
arch = "mac";
- sha256 = "fd22389c456eb9ccb93291ff837fcd2a800d75b44d7aacf0c4e5bfac6c236daa";
+ sha256 = "57a36c2099e9932d9161a650e370b52bf5b399c53df45e93899a7bef38867bec";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/el/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/el/Thunderbird%20152.0.1.dmg";
locale = "el";
arch = "mac";
- sha256 = "fd7d1310829af952b3472ada816ebe0bfdaad21ca5e8bbd82f2cbc68a256fcde";
+ sha256 = "98fb7469ad7747372d70fe526a6e319ed390f436f42d02af60fd14a6955efe5e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/en-CA/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/en-CA/Thunderbird%20152.0.1.dmg";
locale = "en-CA";
arch = "mac";
- sha256 = "232b2a80c79c6fc2ad87513d54d804ea0a0978f56671064f7a843f4ac7a765ff";
+ sha256 = "14d52981f5cfafbba62523cc8fac0a8804d92266e998b48a9a0d107c0bcd9c5e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/en-GB/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/en-GB/Thunderbird%20152.0.1.dmg";
locale = "en-GB";
arch = "mac";
- sha256 = "696cb5eb4a5753702d327379c956f8099875b00b838c519d65cdb52c87c49158";
+ sha256 = "e86244b4244b62c85b70fe7074ad8e7fb418dc4ade583af61c9601792bd1fbef";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/en-US/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/en-US/Thunderbird%20152.0.1.dmg";
locale = "en-US";
arch = "mac";
- sha256 = "161efae828f7cb85acc7e7490c88042a22c0867f3c6bb616b73319bea834a378";
+ sha256 = "2ddb04427a7153e2c25f2f118ba42d5904f73b8e8b7599a0761a30c774fc00c6";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/es-AR/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/es-AR/Thunderbird%20152.0.1.dmg";
locale = "es-AR";
arch = "mac";
- sha256 = "4d8087895b17937a62af0ac45209d72b531011f43e387eb2d1e7617d56cb0e66";
+ sha256 = "b2474b995b3e15c30a91afc4746c1858da3eb17e1cf5f31156393a661581fb9e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/es-ES/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/es-ES/Thunderbird%20152.0.1.dmg";
locale = "es-ES";
arch = "mac";
- sha256 = "f3c9b79bf2e4cf57df551a3c9fc1dac8e38d38e5502524574c772d02b62915d7";
+ sha256 = "6fc00ab22c863261e28d7cee0d11d9fd7ec8fbc387a90477e2a87a17c9d24fa0";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/es-MX/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/es-MX/Thunderbird%20152.0.1.dmg";
locale = "es-MX";
arch = "mac";
- sha256 = "f03f6635cdb8903e38742a2ec633bb0ac95a0b88e7881bad8f9decac3f7038c8";
+ sha256 = "33cc5572a9b0c368df1bbf87218cdb693b2ef209491c865d674463f8262b3aa9";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/et/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/et/Thunderbird%20152.0.1.dmg";
locale = "et";
arch = "mac";
- sha256 = "59d466e2e6de618d6ea4da86db18aa531e30754f7f7b77ead69ed5b27a76470e";
+ sha256 = "16d369305e03b19a50ce4a31807d28f08c12ea15fcea77f6a8b43e581c9a0a14";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/eu/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/eu/Thunderbird%20152.0.1.dmg";
locale = "eu";
arch = "mac";
- sha256 = "debb7b4633145f46cf211d8ca80c90c180a15b135bbccc750a74a994bd0762da";
+ sha256 = "58f2e8080fc9d9d3a4ff8f6721d73e639932574fd82cc65b58012f1c7f336518";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/fi/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/fi/Thunderbird%20152.0.1.dmg";
locale = "fi";
arch = "mac";
- sha256 = "88b5d5906eb29a9b2fe8c64fcc52b8b71eef2614dcf57341fbba1ac4bf4e8b28";
+ sha256 = "516dc7c067e4eae883823378d8b78dbf6d74b6e6224e6c4b4e2d36750d53effc";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/fr/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/fr/Thunderbird%20152.0.1.dmg";
locale = "fr";
arch = "mac";
- sha256 = "17296d4edeb6ca24c21254d5f20ed426b5997fca3792841c21026b040224746a";
+ sha256 = "c5f1da966b4dbdab893c85785ee1ab9439a31c33b8f3b9a2ca9ed04c32164ddf";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/fy-NL/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/fy-NL/Thunderbird%20152.0.1.dmg";
locale = "fy-NL";
arch = "mac";
- sha256 = "0246cf00ae02b15cad97134a9750624e313624db23ae763911fb4ebbd18f625e";
+ sha256 = "992036c121dc6f641f05a849f6638f337ebdb319b8a4c13f92ae56efc2462f7f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/ga-IE/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/ga-IE/Thunderbird%20152.0.1.dmg";
locale = "ga-IE";
arch = "mac";
- sha256 = "6fccb859a1f2b1055719df3ef3df3d45b74f92a26c3c329c616f8a1a15bd05bc";
+ sha256 = "686e62df158651404ec2d17ed20913acf3ca2eaa23cf23f0d1dd4118f7a47358";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/gd/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/gd/Thunderbird%20152.0.1.dmg";
locale = "gd";
arch = "mac";
- sha256 = "f932ce10d5ba53366e0bf09234a7c9aed26e83f17de43c0546d9a18ac8f18a3e";
+ sha256 = "bc4d5c71286f446362517234bc3b68c707d03848db5b4c631f8106c5a60578ef";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/gl/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/gl/Thunderbird%20152.0.1.dmg";
locale = "gl";
arch = "mac";
- sha256 = "572f0d4adc494162f9d43ae9f4af62f6e0738675c42fca5120fb2990e879aa56";
+ sha256 = "1a5e70641572149cdc602bcb734518e05d31052460870401d90e0ede5d779683";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/he/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/he/Thunderbird%20152.0.1.dmg";
locale = "he";
arch = "mac";
- sha256 = "f4b90c12e3f87698a32001a86b847b30a8e41ae360324a51c5294f7b9acba058";
+ sha256 = "5bac4ed802ca670726f02a1227440633d6d7710e87c6d314283c1a5aab4230a4";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/hr/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/hr/Thunderbird%20152.0.1.dmg";
locale = "hr";
arch = "mac";
- sha256 = "35c5fa6f4648d99d10f28fc46e50e6dc6808196b56f8e70aa16e55bea499e1e7";
+ sha256 = "b1aa9eeaf1e44f63f6cb52fe9fdd7516b62fa08cb0e061b00d37b333d576c9f0";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/hsb/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/hsb/Thunderbird%20152.0.1.dmg";
locale = "hsb";
arch = "mac";
- sha256 = "f526fc3f78e52295e867feff8a7006c45032aefc592f548422d14f4b7a618355";
+ sha256 = "6971c8781561378794d9b97769baf5ed4351fb6e34f4446665bcdb1b16526783";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/hu/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/hu/Thunderbird%20152.0.1.dmg";
locale = "hu";
arch = "mac";
- sha256 = "5b1b16966b7c583fb101e8056ef071e991add25cc5e8ef6e9d0776eef72354c2";
+ sha256 = "dcad9ed1f99cfe06f2b6af081c13383e68a2f9ea703e2632f5f7f08e1cd2b63d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/hy-AM/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/hy-AM/Thunderbird%20152.0.1.dmg";
locale = "hy-AM";
arch = "mac";
- sha256 = "b3f9f01425f282616b3bcbcf3d139e97b994b6f43dc6b31f83206beaf028708c";
+ sha256 = "cfbc7a9989daa7c5690531280f86404571795c9a8de798c3cf468b569fb12f43";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/id/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/id/Thunderbird%20152.0.1.dmg";
locale = "id";
arch = "mac";
- sha256 = "a926df05aabb6dd2a40ab931bc19e633165bceb249600e9706929ad10997c771";
+ sha256 = "b5cab6d618e161ca3b56a869628aec16997c24961f149f4f1e8476fcf1ff73ab";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/is/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/is/Thunderbird%20152.0.1.dmg";
locale = "is";
arch = "mac";
- sha256 = "b527dc4f7e45c4ac930dfeed60102aef2f477add5686eb0472b9fa6b94b402cc";
+ sha256 = "c388e46c1127894a7811be9396b00b16d995e8ade53cf6ac09e0fdb1a041ee54";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/it/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/it/Thunderbird%20152.0.1.dmg";
locale = "it";
arch = "mac";
- sha256 = "82a33b41a7375850c5070a98691d3decbdd4d564823266b36f7123ca163ad7f2";
+ sha256 = "35eed5be6ea98a55b30a02c4ff197acf1e357e0aee73f99e30196c06d455c0f0";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/ja-JP-mac/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/ja-JP-mac/Thunderbird%20152.0.1.dmg";
locale = "ja-JP-mac";
arch = "mac";
- sha256 = "fafa588a8906d0d6b8228cb703a7e0ae6dfb45203da835bb50fe0ce73338179e";
+ sha256 = "b8c5522eddf6c92f127b0b261922841b6298f8fa3a10daddb81928035da4b949";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/ka/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/ka/Thunderbird%20152.0.1.dmg";
locale = "ka";
arch = "mac";
- sha256 = "d4e3f0d0c6602210ea67dffa001a80fe5605a82561bacad224a8290dbb4a5965";
+ sha256 = "d69fc15f1380a7d49019ede8cf63b81298c06505889cd2030b42c942b3e77b9a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/kab/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/kab/Thunderbird%20152.0.1.dmg";
locale = "kab";
arch = "mac";
- sha256 = "f48785aab56f79ee7ca21e8b3023968c34229a97f588bfbbef0c60a841310d66";
+ sha256 = "b3dad85c2214c6c994bf20e0a150a4ed59f5b2a64e80fa82e07d109dfc4a26e4";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/kk/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/kk/Thunderbird%20152.0.1.dmg";
locale = "kk";
arch = "mac";
- sha256 = "3de49ac472eb55a24d01b269aa5b16ace2c8ec61ab1312032e58e7659a707dd7";
+ sha256 = "0eb5767276165f67dad1d786ed794b21b45f82c9a7e7dd13efc53069191a7db5";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/ko/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/ko/Thunderbird%20152.0.1.dmg";
locale = "ko";
arch = "mac";
- sha256 = "d02f547def514737ba423efe0f1addb892d48e79859cb1e4d1476945b44a6186";
+ sha256 = "1d3d93ea1e5c07f94170f8a8661667f2e450b628e5d165d73c5e7b98f12ae3f9";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/lt/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/lt/Thunderbird%20152.0.1.dmg";
locale = "lt";
arch = "mac";
- sha256 = "f49ed4e7bccf8b75466348f16f399fe09fa36f7bc97eea120619431acf510b88";
+ sha256 = "edeff3cc61e1060826333cd9f71ebe5b7ccd5943a88123b72071f2b05902eebd";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/lv/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/lv/Thunderbird%20152.0.1.dmg";
locale = "lv";
arch = "mac";
- sha256 = "d904f26857cb9e46e58c00d932355378395e70b4d101812fd3ed01ba92648a48";
+ sha256 = "f4c6c62114b803cc1c50776a66e06ab4cc64158f2e397e5b693e9631c3e587b8";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/ms/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/ms/Thunderbird%20152.0.1.dmg";
locale = "ms";
arch = "mac";
- sha256 = "f13a328db2e58788b76d44da616d5e5775cd66cda0e6183033c42c144b18ee26";
+ sha256 = "29a87af2113ac76c51f87eb982dc377295be836aaf944cb382cce5002882180a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/nb-NO/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/nb-NO/Thunderbird%20152.0.1.dmg";
locale = "nb-NO";
arch = "mac";
- sha256 = "4a695d4a191bf0433cb4bbb91391f1282cda883bdbb02bb04bc269917e8c0d3d";
+ sha256 = "55523504611afba716e782aae7f1f2f9c57a296f082ea6f923aca5df6cde05bc";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/nl/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/nl/Thunderbird%20152.0.1.dmg";
locale = "nl";
arch = "mac";
- sha256 = "db330c8251e4bb91bea875807ac486189a2e60cb09427334c18f9b8b7dc082a7";
+ sha256 = "ac8885100e33ba4dd53d3513338885e651d5399abcb1b88fe30cd6be284d4832";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/nn-NO/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/nn-NO/Thunderbird%20152.0.1.dmg";
locale = "nn-NO";
arch = "mac";
- sha256 = "3a5a505ff46428636b3deecd6caa724d75231a6fb50a5d9819c19ddea48737f5";
+ sha256 = "bba879fa2a64572e97ac2c890f2c57414653b105ef2a5ce14a588bdab17b0aba";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/pa-IN/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/pa-IN/Thunderbird%20152.0.1.dmg";
locale = "pa-IN";
arch = "mac";
- sha256 = "75f7f7ecc2e0f5e8bfd732763e29f6928b39d221bc18a345740ddda8dcad53b0";
+ sha256 = "2193c9f55b83a3bcd803a8e34654b19902065b78633e456eb639d9344d8c2ec1";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/pl/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/pl/Thunderbird%20152.0.1.dmg";
locale = "pl";
arch = "mac";
- sha256 = "68bb5ac81dd94b32b33a8084464658f010d8615a6cce49e9c68814145723a83c";
+ sha256 = "014d20781639014d304866c9772903dc4bb4c552d320a120c0b31143381499ee";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/pt-BR/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/pt-BR/Thunderbird%20152.0.1.dmg";
locale = "pt-BR";
arch = "mac";
- sha256 = "1efcc35ef1c96dfdd5c8fd0403160985982e5fdd3186b018fc13df32061cfff7";
+ sha256 = "fd3400134bd5420db23cac7095d6855ce2a8ffed9f8d8ac00891cf708971551c";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/pt-PT/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/pt-PT/Thunderbird%20152.0.1.dmg";
locale = "pt-PT";
arch = "mac";
- sha256 = "731b9eaa6a4be349d6cd496c9d0cee5869b3cf4113f6ed9fa166c4ea8bfb7f96";
+ sha256 = "ff56e84058d5d42a44e7f6a59571888b539aad30c79c0703915ea8b1130a05f5";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/rm/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/rm/Thunderbird%20152.0.1.dmg";
locale = "rm";
arch = "mac";
- sha256 = "e80fa36eaeb055a9186cd19f1dc8e9873f080512b3108616b969c58d98eb24c5";
+ sha256 = "9b02c2033256331363af9ca3288d9ccc47cf98010e21d91766df1721f4ee088d";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/ro/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/ro/Thunderbird%20152.0.1.dmg";
locale = "ro";
arch = "mac";
- sha256 = "0968d478170e848ccad9e2ffd1be076019c288fb29c745225b6dd8f84d2acd84";
+ sha256 = "477c5714f088703526f4f32388067e5c57dfac1d7425739b86b169d0a7d93234";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/ru/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/ru/Thunderbird%20152.0.1.dmg";
locale = "ru";
arch = "mac";
- sha256 = "323b4bedfced3e60b36e542d50106a4c95e290033afdc7fddc88fa32192b513c";
+ sha256 = "cdeb26cc7d4370ecd93df3cf429f92468617ed1436dd8439c9c40b8446bad48a";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/sk/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/sk/Thunderbird%20152.0.1.dmg";
locale = "sk";
arch = "mac";
- sha256 = "bdb8d82610cdbe8231b11a70745ad5c878faa97a735523b17e5cbcc9102c3c72";
+ sha256 = "a79436bbe2e69c096800e84f20887fb44d08ae044f86a7e1c380a92ce3f34527";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/sl/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/sl/Thunderbird%20152.0.1.dmg";
locale = "sl";
arch = "mac";
- sha256 = "f375b3266873e9a3ff83fccb5d39c0b51d9916b027753dc85d2074c56916a188";
+ sha256 = "4860141caee86a667319cae4a45f4d5a55c16ae74d930c654b0d40a95537914e";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/sq/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/sq/Thunderbird%20152.0.1.dmg";
locale = "sq";
arch = "mac";
- sha256 = "8f45cec988eccb40a57f974b558d6096eaa696da337f404d458bb2404750a8f8";
+ sha256 = "e6c2b2678c7c4a07c2bd3a84767d5c8e253a044fe23060ee7e36b035da39a777";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/sr/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/sr/Thunderbird%20152.0.1.dmg";
locale = "sr";
arch = "mac";
- sha256 = "f3d2825c219becef5a566cff38550a690122f089ecd087b276350974eeeddd79";
+ sha256 = "237758f368539a799974b6fab81a1a221c77971ecd6d2fbff53d7905865468dc";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/sv-SE/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/sv-SE/Thunderbird%20152.0.1.dmg";
locale = "sv-SE";
arch = "mac";
- sha256 = "ab3a167a122bcc8824734a058fe7d1b2f7d4f2833cc29e8199d9b2bcdb33261c";
+ sha256 = "f41bf3544886a60269598db51c775595472cd44b2a88d5592e87d84f8ccf71d9";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/th/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/th/Thunderbird%20152.0.1.dmg";
locale = "th";
arch = "mac";
- sha256 = "acc0338065033339858e7a16e6ebb6c79ffffcb665907a5a49f88ac1d7ced103";
+ sha256 = "bd61e2a35e48003ef1d95bfde78fabe274f49ab80ac200109b8f7acc48e9cf35";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/tr/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/tr/Thunderbird%20152.0.1.dmg";
locale = "tr";
arch = "mac";
- sha256 = "1e2e36dc2e693c63e7934d8bea651bdc9416c85608646ffcfb8b7bb00baa70d9";
+ sha256 = "83803875437161d44ca569c1b29156452cf6a9afae0e962bfe13c9b9077a627b";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/uk/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/uk/Thunderbird%20152.0.1.dmg";
locale = "uk";
arch = "mac";
- sha256 = "aad2c6ac1e91c640d3815532299314ff36613373fc7e522a192da3e6f892bb6a";
+ sha256 = "2532b1b8fceeab71b57477a6f5e3c016f47d3eae73637b6cdb3fdb6dd589260f";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/uz/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/uz/Thunderbird%20152.0.1.dmg";
locale = "uz";
arch = "mac";
- sha256 = "0ff881361fd63dde5d66cb2855ada2272cc0dac15dd8f7c79b8c8167b039d700";
+ sha256 = "1e93deb4ebfb9a6c9df082765955bc02bafce5ad92376f9a7aecf5a2d8bcf84c";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/vi/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/vi/Thunderbird%20152.0.1.dmg";
locale = "vi";
arch = "mac";
- sha256 = "4c3516cf8db48ca6e1a98a220db2d4e2a646169b527d6322549e7e201bc6d6fd";
+ sha256 = "c9975acbdb805e2b992b98025724f07601d070848af6a019a9f1eeba00fbd479";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/zh-CN/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/zh-CN/Thunderbird%20152.0.1.dmg";
locale = "zh-CN";
arch = "mac";
- sha256 = "9bcfdb9a06131546cd8dd6ce09d7b59d76923de8f7b9606c951de26aee51167c";
+ sha256 = "c9d95293b8d6d16d5175b9881a3e7423d8086eddd2f2feb47613c3cc14fae078";
}
{
- url = "https://archive.mozilla.org/pub/thunderbird/releases/151.0.1/mac/zh-TW/Thunderbird%20151.0.1.dmg";
+ url = "https://archive.mozilla.org/pub/thunderbird/releases/152.0.1/mac/zh-TW/Thunderbird%20152.0.1.dmg";
locale = "zh-TW";
arch = "mac";
- sha256 = "31099269bcadbacb002e3876b510382d70c3ba061a7b7954f4e80c568422a200";
+ sha256 = "44b69c1314cccfaad0031a85484daa9b1f53ac187c54fc3988d17affbeff0477";
}
];
}
diff --git a/pkgs/applications/networking/mailreaders/thunderbird/packages.nix b/pkgs/applications/networking/mailreaders/thunderbird/packages.nix
index 71d6cb7a2fa6..f8fadc9d1dca 100644
--- a/pkgs/applications/networking/mailreaders/thunderbird/packages.nix
+++ b/pkgs/applications/networking/mailreaders/thunderbird/packages.nix
@@ -44,7 +44,8 @@ let
meta = {
changelog = "https://www.thunderbird.net/en-US/thunderbird/${version}/releasenotes/";
description = "Full-featured e-mail client";
- homepage = "https://thunderbird.net/";
+ homepage = "https://www.thunderbird.net/";
+ donationPage = "https://www.thunderbird.net/donate/";
mainProgram = "thunderbird";
maintainers = with lib.maintainers; [
booxter # darwin
@@ -77,8 +78,8 @@ rec {
thunderbird = thunderbird-latest;
thunderbird-latest = common {
- version = "151.0.1";
- sha512 = "a09c1e18faa8d7fdccf39e905542c21e817230e68c7cc6050beec048d0fec0f8eb92e51278d2ccd8d8cfa842762662235517e20238b555a4ad48ee5648dc3589";
+ version = "152.0.1";
+ sha512 = "f66c87de4dd73c3c45e420a55d76c3cb6ac091a61794ccf58ba59d1a40cf8001dee19a6a7f4c6bef7d36ea94ed4e4f677449d3006b2004abbd3fab42ad1c9228";
updateScript = callPackage ./update.nix {
attrPath = "thunderbirdPackages.thunderbird-latest";
@@ -91,8 +92,8 @@ rec {
thunderbird-140 = common {
applicationName = "Thunderbird ESR";
- version = "140.11.1esr";
- sha512 = "93dfdd26e6f4c7dd2f7dcc2e4994980d017868341c60c93775721467abd9192b815f2de63928e7d10c965fc045ed72ca5b49ed6502a61e50104ee5cd00941d1e";
+ version = "140.13.0esr";
+ sha512 = "778d2fc2837ba367e90c4336f3873da5a0823c182e2f50aa9373cd1ee9ee2b5310372ad9d33e1e11978791b67de4a6952d3036ff7d57b257a06f49c8cd4a830e";
updateScript = callPackage ./update.nix {
attrPath = "thunderbirdPackages.thunderbird-140";
diff --git a/pkgs/applications/networking/mumble/default.nix b/pkgs/applications/networking/mumble/default.nix
index 20e8c0786b19..604b5582985e 100644
--- a/pkgs/applications/networking/mumble/default.nix
+++ b/pkgs/applications/networking/mumble/default.nix
@@ -78,6 +78,7 @@ let
"-D bundled-gsl=OFF"
"-D bundled-json=OFF"
"-D warnings-as-errors=OFF" # protobuf 34.x `[[nodiscard]]` workaround https://github.com/mumble-voip/mumble/issues/7102
+ "-D use-timestamps=OFF"
]
++ (overrides.cmakeFlags or [ ]);
@@ -152,7 +153,6 @@ let
env.NIX_CFLAGS_COMPILE = lib.optionalString speechdSupport "-I${speechd-minimal}/include/speech-dispatcher";
patches = [
- ./disable-overlay-build.patch
./fix-plugin-copy.patch
];
@@ -166,6 +166,7 @@ let
--source-dir=$NIX_BUILD_TOP/source/ \
--binary-dir=$out \
--only-appbundle \
+ --no-overlay \
--version "${source.version}"
mkdir -p $out/Applications $out/bin
@@ -217,14 +218,14 @@ let
} source;
source = rec {
- version = "1.5.857";
+ version = "1.5.901";
# Needs submodules
src = fetchFromGitHub {
owner = "mumble-voip";
repo = "mumble";
tag = "v${version}";
- hash = "sha256-4ySak2nzT8p48waMgBc9kLrvFB8716e7p0G4trzuh1k=";
+ hash = "sha256-UBJH7EwfWvInuSD6ZALOKeVnWdfh/rmq8GVLG5URjOQ=";
fetchSubmodules = true;
};
};
diff --git a/pkgs/applications/networking/mumble/disable-overlay-build.patch b/pkgs/applications/networking/mumble/disable-overlay-build.patch
deleted file mode 100644
index 9d2aff0d8da0..000000000000
--- a/pkgs/applications/networking/mumble/disable-overlay-build.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff --git a/macx/scripts/osxdist.py b/macx/scripts/osxdist.py
-index bdc7fcbd2..2114caf37 100755
---- a/macx/scripts/osxdist.py
-+++ b/macx/scripts/osxdist.py
-@@ -128,7 +128,7 @@ class AppBundle(object):
- shutil.copy(rsrc, os.path.join(rsrcpath, b))
-
- # Extras
-- shutil.copy(os.path.join(options.binary_dir, 'MumbleOverlay.pkg'), os.path.join(rsrcpath, 'MumbleOverlay.pkg'))
-+ # shutil.copy(os.path.join(options.binary_dir, 'MumbleOverlay.pkg'), os.path.join(rsrcpath, 'MumbleOverlay.pkg'))
-
- def copy_codecs(self):
- '''
-@@ -275,7 +276,7 @@ def package_client():
- title = 'Mumble %s' % ver
-
- # Fix overlay installer package
-- create_overlay_package()
-+ # create_overlay_package()
- if options.only_overlay:
- sys.exit(0)
diff --git a/pkgs/applications/networking/p2p/deluge/default.nix b/pkgs/applications/networking/p2p/deluge/default.nix
index ef4bd7b5faef..b392057b53fc 100644
--- a/pkgs/applications/networking/p2p/deluge/default.nix
+++ b/pkgs/applications/networking/p2p/deluge/default.nix
@@ -5,6 +5,7 @@
libtorrent-rasterbar,
python3Packages,
gtk3,
+ libappindicator-gtk3,
glib,
gobject-introspection,
librsvg,
@@ -47,13 +48,14 @@ let
six
zope-interface
dbus-python
- pycairo
- librsvg
]
++ optionals withGUI [
+ pycairo
+ librsvg
gtk3
gobject-introspection
pygobject3
+ libappindicator-gtk3
];
nativeBuildInputs = [
diff --git a/pkgs/applications/networking/remote/citrix-workspace/default.nix b/pkgs/applications/networking/remote/citrix-workspace/default.nix
deleted file mode 100644
index 22b7ea21154e..000000000000
--- a/pkgs/applications/networking/remote/citrix-workspace/default.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{ lib, callPackage }:
-
-# For detailed information about the Citrix source-tarball, please refer to the OEM
-# reference guide: https://developer-docs.citrix.com/en-us/citrix-workspace-app-for-linux/citrix-workspace-app-for-linux-oem-reference-guide
-
-let
- supportedVersions = callPackage ./sources.nix { };
-
- toAttrName = x: "citrix_workspace_${builtins.replaceStrings [ "." ] [ "_" ] x}";
-in
-lib.mapAttrs' (
- attr: versionInfo: lib.nameValuePair (toAttrName attr) (callPackage ./generic.nix versionInfo)
-) supportedVersions
diff --git a/pkgs/applications/networking/remote/citrix-workspace/sources.nix b/pkgs/applications/networking/remote/citrix-workspace/sources.nix
deleted file mode 100644
index 506b810333ad..000000000000
--- a/pkgs/applications/networking/remote/citrix-workspace/sources.nix
+++ /dev/null
@@ -1,43 +0,0 @@
-{ stdenv, lib }:
-
-let
- mkVersionInfo =
- _:
- {
- major,
- minor,
- patch,
- hash,
- suffix,
- homepage,
- }:
- {
- inherit hash homepage;
- version = "${major}.${minor}.${patch}.${suffix}";
- };
-
- # Attribute-set with all actively supported versions of the Citrix workspace app
- # for Linux.
- #
- # The latest versions can be found at https://www.citrix.com/downloads/workspace-app/linux/
- supportedVersions = lib.mapAttrs mkVersionInfo {
- "26.01.0" = {
- major = "26";
- minor = "01";
- patch = "0";
- hash = "0avrf9jpqhijvp6w4jgs7xgp4gg1q2mdzak9h9klkqrbsgrvjr3p";
- suffix = "150";
- homepage = "https://www.citrix.com/downloads/workspace-app/linux/workspace-app-for-linux-latest.html";
- };
-
- "25.08.10" = {
- major = "25";
- minor = "08";
- patch = "10";
- hash = "06hdwi5rd8z43nlpvym6yrw3snfz8jh6ic3g4pihn9ji22bw5pbd";
- suffix = "111";
- homepage = "https://www.citrix.com/downloads/workspace-app/linux/workspace-app-for-linux-latest.html";
- };
- };
-in
-supportedVersions
diff --git a/pkgs/applications/office/activitywatch/default.nix b/pkgs/applications/office/activitywatch/default.nix
index 8b291b54995b..50e158704a5d 100644
--- a/pkgs/applications/office/activitywatch/default.nix
+++ b/pkgs/applications/office/activitywatch/default.nix
@@ -40,7 +40,7 @@ rec {
dependencies = with python3Packages; [
aw-client
- xlib
+ python-xlib
pynput
];
@@ -70,7 +70,7 @@ rec {
dependencies = with python3Packages; [
aw-client
- xlib
+ python-xlib
];
pythonRelaxDeps = [
diff --git a/pkgs/applications/office/beancount/bean-add.nix b/pkgs/applications/office/beancount/bean-add.nix
index e3e80e2cbef5..91ed7e4894ef 100644
--- a/pkgs/applications/office/beancount/bean-add.nix
+++ b/pkgs/applications/office/beancount/bean-add.nix
@@ -3,11 +3,12 @@
stdenv,
fetchFromGitHub,
python3Packages,
+ installShellFiles,
}:
stdenv.mkDerivation {
pname = "bean-add";
- version = "unstable-2018-01-08";
+ version = "0-unstable-2018-01-08";
src = fetchFromGitHub {
owner = "simon-v";
@@ -18,10 +19,10 @@ stdenv.mkDerivation {
propagatedBuildInputs = with python3Packages; [ python ];
- installPhase = ''
- mkdir -p $out/bin/
- cp bean-add $out/bin/bean-add
- chmod +x $out/bin/bean-add
+ nativeBuildInputs = [ installShellFiles ];
+
+ postInstall = ''
+ installBin bean-add
'';
meta = {
diff --git a/pkgs/applications/office/beancount/beancount-ing-diba.nix b/pkgs/applications/office/beancount/beancount-ing-diba.nix
index e734600ae8a5..c5abcf483e4f 100644
--- a/pkgs/applications/office/beancount/beancount-ing-diba.nix
+++ b/pkgs/applications/office/beancount/beancount-ing-diba.nix
@@ -12,7 +12,7 @@ python3.pkgs.buildPythonApplication rec {
src = fetchFromGitHub {
owner = "siddhantgoel";
- repo = "beancount-ing-diba";
+ repo = "beancount-ing";
rev = "v${version}";
sha256 = "sha256-zjwajl+0ix4wnW0bf4MAuO9Lr9F8sBv87TIL5Ghmlxg=";
};
@@ -29,7 +29,7 @@ python3.pkgs.buildPythonApplication rec {
];
meta = {
- homepage = "https://github.com/siddhantgoel/beancount-ing-diba";
+ homepage = "https://github.com/siddhantgoel/beancount-ing";
description = "Beancount Importers for ING-DiBa (Germany) CSV Exports";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ matthiasbeyer ];
diff --git a/pkgs/applications/office/libreoffice/darwin/default.nix b/pkgs/applications/office/libreoffice/darwin/default.nix
index 2798742204e2..eb613364c8f3 100644
--- a/pkgs/applications/office/libreoffice/darwin/default.nix
+++ b/pkgs/applications/office/libreoffice/darwin/default.nix
@@ -9,32 +9,18 @@
let
appName = "LibreOffice.app";
scriptName = "soffice";
- version = "25.8.6";
+ version = "26.2.4";
dist = {
- aarch64-darwin = rec {
- arch = "aarch64";
- archSuffix = arch;
- url = "https://download.documentfoundation.org/libreoffice/stable/${version}/mac/${arch}/LibreOffice_${version}_MacOS_${archSuffix}.dmg";
- sha256 = "57ddee0f8ef2d06fd7a9b0e3cf191107e6cb97ec03f0a7f6b137f732e251fde2";
- };
-
- x86_64-darwin = rec {
- arch = "x86_64";
- archSuffix = "x86-64";
- url = "https://download.documentfoundation.org/libreoffice/stable/${version}/mac/${arch}/LibreOffice_${version}_MacOS_${archSuffix}.dmg";
- sha256 = "017c64b6e2992db9cbb44f9b1fc3fd2ede3e332c8b481746b780b8a282f09692";
- };
+ url = "https://download.documentfoundation.org/libreoffice/stable/${version}/mac/aarch64/LibreOffice_${version}_MacOS_aarch64.dmg";
+ sha256 = "64e0ad05564554eeee639d49b08b20908a38d4722ec95f1620d05c99bcbe9fb1";
};
in
stdenvNoCC.mkDerivation {
inherit version;
pname = "libreoffice";
src = fetchurl {
- inherit
- (dist.${stdenvNoCC.hostPlatform.system}
- or (throw "Unsupported system: ${stdenvNoCC.hostPlatform.system}")
- )
+ inherit (dist)
url
sha256
;
@@ -59,16 +45,13 @@ stdenvNoCC.mkDerivation {
let
defaultNixFile = toString ./default.nix;
updateNix = toString ./update.nix;
- aarch64Url = dist."aarch64-darwin".url;
- x86_64Url = dist."x86_64-darwin".url;
in
writeScript "update-libreoffice.sh" ''
#!/usr/bin/env nix-shell
- #!nix-shell -i bash --argstr aarch64Url ${aarch64Url} --argstr x86_64Url ${x86_64Url} --argstr version ${version} ${updateNix}
+ #!nix-shell -i bash --argstr url ${dist.url} --argstr version ${version} ${updateNix}
set -eou pipefail
- update-source-version libreoffice-bin $newVersion $newAarch64Sha256 --file=${defaultNixFile} --system=aarch64-darwin --ignore-same-version
- update-source-version libreoffice-bin $newVersion $newX86_64Sha256 --file=${defaultNixFile} --system=x86_64-darwin --ignore-same-version
+ update-source-version libreoffice-bin $newVersion $newSha256 --file=${defaultNixFile} --ignore-same-version
'';
meta = {
@@ -78,7 +61,6 @@ stdenvNoCC.mkDerivation {
maintainers = with lib.maintainers; [ tricktron ];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
platforms = [
- "x86_64-darwin"
"aarch64-darwin"
];
};
diff --git a/pkgs/applications/office/libreoffice/darwin/update.nix b/pkgs/applications/office/libreoffice/darwin/update.nix
index f3c5c758b428..17f4c69cf85e 100644
--- a/pkgs/applications/office/libreoffice/darwin/update.nix
+++ b/pkgs/applications/office/libreoffice/darwin/update.nix
@@ -1,7 +1,6 @@
# Impure functions, for passthru.updateScript runtime only
{
- aarch64Url,
- x86_64Url,
+ url,
version,
pkgs ? import ../../../../../default.nix { },
}:
@@ -14,6 +13,5 @@ in
pkgs.mkShell rec {
buildInputs = [ pkgs.common-updater-scripts ];
newVersion = getLatestStableVersion;
- newAarch64Sha256 = getSha256 aarch64Url version newVersion;
- newX86_64Sha256 = getSha256 x86_64Url version newVersion;
+ newSha256 = getSha256 url version newVersion;
}
diff --git a/pkgs/applications/office/libreoffice/default.nix b/pkgs/applications/office/libreoffice/default.nix
index 183c2c52ef41..839ec6db93d2 100644
--- a/pkgs/applications/office/libreoffice/default.nix
+++ b/pkgs/applications/office/libreoffice/default.nix
@@ -398,6 +398,34 @@ stdenv.mkDerivation (finalAttrs: {
# Don't detect Qt paths from qmake, so our patched-in onese are used
./dont-detect-qt-paths-from-qmake.patch
+
+ # Fix build with Poppler 26.02
+ (fetchpatch2 {
+ url = "https://gitlab.archlinux.org/archlinux/packaging/packages/libreoffice-still/-/raw/25.8.7-2/fix_build_with_poppler_26.02.0.patch";
+ hash = "sha256-IInhSoqTemDITB+AtkvVa9eGbodTbUGSpMMpC9N/mmg=";
+ })
+ # Fix build with Poppler 26.04
+ (fetchpatch2 {
+ url = "https://gitlab.archlinux.org/archlinux/packaging/packages/libreoffice-still/-/raw/25.8.7-2/fix_build_with_poppler_26.04.0.patch";
+ hash = "sha256-I9owj/NTCTi6ISszuasH410NLlhunPn/Ig22tenu8tw=";
+ })
+ # Fix build with Poppler 26.05
+ (fetchpatch2 {
+ url = "https://gitlab.archlinux.org/archlinux/packaging/packages/libreoffice-still/-/raw/25.8.7-2/fix_build_with_poppler_26.05.0.patch";
+ hash = "sha256-7wdiciTf/LrTk0MibBBYGliWRCvK1rtTGESgH7db1I4=";
+ })
+ # Fix build with Poppler 26.06
+ (fetchpatch2 {
+ url = "https://gitlab.archlinux.org/archlinux/packaging/packages/libreoffice-still/-/raw/25.8.7-3/fix_build_with_poppler_26.06.0.patch";
+ hash = "sha256-j66IsrzaqQ55MRVzhlw25guuoDtxx1D4XeJsBhgWP2c=";
+ })
+ ]
+ ++ lib.optionals (variant != "fresh") [
+ # Fix build with Poppler 26.01
+ (fetchpatch2 {
+ url = "https://gitlab.archlinux.org/archlinux/packaging/packages/libreoffice-still/-/raw/25.8.7-2/fix_build_with_poppler_26.01.0.patch";
+ hash = "sha256-5JTTvJFIV5MG0Gz7y46wAr3q9tWdSVoZ9TJQlMJVqBc=";
+ })
]
++ lib.optionals (variant != "collabora" && variant != "collabora-coda") [
# Revert part of https://github.com/LibreOffice/core/commit/6f60670877208612b5ea320b3677480ef6508abb that broke zlib linking
diff --git a/pkgs/applications/office/paperwork/src.nix b/pkgs/applications/office/paperwork/src.nix
index 84bd20231599..6418a53dfe41 100644
--- a/pkgs/applications/office/paperwork/src.nix
+++ b/pkgs/applications/office/paperwork/src.nix
@@ -27,6 +27,12 @@ rec {
hash = "sha256-VUT86kF0ZHLGK457ZrrIBMeiZqg/rPRpbkBA/ua9rU8=";
}
)
+ # remove usage of deprecated pkg_resources
+ # remove on next release
+ (fetchpatch {
+ url = "https://gitlab.gnome.org/World/OpenPaperwork/paperwork/-/commit/ab244d9c483b23f53e2548b73236d7fe4b94cb3f.patch";
+ hash = "sha256-Wd6OK0BdyTcjLy1NhkLp9N2oOcQWB6geEPOlYDTBsHw=";
+ })
];
};
diff --git a/pkgs/applications/office/softmaker/freeoffice.nix b/pkgs/applications/office/softmaker/freeoffice.nix
index 39cf3351dace..85a079b218f8 100644
--- a/pkgs/applications/office/softmaker/freeoffice.nix
+++ b/pkgs/applications/office/softmaker/freeoffice.nix
@@ -6,9 +6,9 @@
# overridable. This is useful when the upstream archive was replaced
# and nixpkgs is not in sync yet.
officeVersion ? {
- version = "1220";
+ version = "1234";
edition = "2024";
- hash = "sha256-F1Srm3/4UPifYls21MhjbpxSyLaT0gEVzEMQF0gIzi0=";
+ hash = "sha256-q5QUevkSxdh622ZMhwbO44HLJowpg0vwv9de7hdOUQQ=";
},
...
diff --git a/pkgs/applications/office/softmaker/softmaker-office-nx.nix b/pkgs/applications/office/softmaker/softmaker-office-nx.nix
index e6e4e1c33937..2cf897f78b5c 100644
--- a/pkgs/applications/office/softmaker/softmaker-office-nx.nix
+++ b/pkgs/applications/office/softmaker/softmaker-office-nx.nix
@@ -6,9 +6,9 @@
# overridable. This is useful when the upstream archive was replaced
# and nixpkgs is not in sync yet.
officeVersion ? {
- version = "1230";
+ version = "1234";
edition = "";
- hash = "sha256-/4qKFnLoou1ZuGkRt+2Yf/FPGOnYhx7fnE+8D3gutaY=";
+ hash = "sha256-00bscKt+4aE94x6wKGqXh6tE2GiDll6F4gWZZBEl2JE=";
},
...
diff --git a/pkgs/applications/office/softmaker/softmaker-office.nix b/pkgs/applications/office/softmaker/softmaker-office.nix
index e92103a3bd1a..db73e9d94c69 100644
--- a/pkgs/applications/office/softmaker/softmaker-office.nix
+++ b/pkgs/applications/office/softmaker/softmaker-office.nix
@@ -7,9 +7,9 @@
# Softmaker Office or when the upstream archive was replaced and
# nixpkgs is not in sync yet.
officeVersion ? {
- version = "1230";
+ version = "1234";
edition = "2024";
- hash = "sha256-xaXS22feHbRVPWP43vGbfptoT2S6jLUrGVFQ3xY7SJY=";
+ hash = "sha256-oIO/p52ASIU0qjQqxp/l9GVrUK+LQNQxX1wKheKHT3w=";
},
...
diff --git a/pkgs/applications/science/astronomy/celestia/default.nix b/pkgs/applications/science/astronomy/celestia/default.nix
deleted file mode 100644
index d7215163a78b..000000000000
--- a/pkgs/applications/science/astronomy/celestia/default.nix
+++ /dev/null
@@ -1,78 +0,0 @@
-{
- lib,
- stdenv,
- fetchFromGitHub,
- fetchpatch2,
- pkg-config,
- libglut,
- gtk2,
- gtkglext,
- libjpeg_turbo,
- libtheora,
- libxmu,
- lua,
- libGLU,
- libGL,
- perl,
- autoreconfHook,
-}:
-
-stdenv.mkDerivation rec {
- pname = "celestia";
- version = "1.6.4";
-
- src = fetchFromGitHub {
- owner = "CelestiaProject";
- repo = "Celestia";
- rev = version;
- sha256 = "sha256-MkElGo1ZR0ImW/526QlDE1ePd+VOQxwkX7l+0WyZ6Vs=";
- };
-
- patches = [
- (fetchpatch2 {
- url = "https://github.com/CelestiaProject/Celestia/commit/94894bed3bf98d41c5097e7829d491d8ff8d4a62.patch?full_index=1";
- hash = "sha256-hEZ6BhSEx6Qm+fLisc63xSCDT6GX92AHD0BuldOhzFk=";
- })
- ];
-
- postPatch = ''
- substituteInPlace configure.ac \
- --replace-fail "dnl AM_GNU_GETTEXT_VERSION([0.15])" "AM_GNU_GETTEXT_VERSION([0.15])"
- '';
-
- nativeBuildInputs = [
- pkg-config
- autoreconfHook
- ];
- buildInputs = [
- libglut
- gtk2
- gtkglext
- lua
- perl
- libjpeg_turbo
- libtheora
- libxmu
- libGLU
- libGL
- ];
-
- configureFlags = [
- "--with-gtk"
- "--with-lua=${lua}"
- ];
-
- enableParallelBuilding = true;
-
- meta = {
- homepage = "https://celestiaproject.space/";
- description = "Real-time 3D simulation of space";
- mainProgram = "celestia";
- changelog = "https://github.com/CelestiaProject/Celestia/releases/tag/${version}";
- license = lib.licenses.gpl2Plus;
- maintainers = with lib.maintainers; [
- returntoreality
- ];
- platforms = lib.platforms.linux;
- };
-}
diff --git a/pkgs/applications/science/chemistry/quantum-espresso/default.nix b/pkgs/applications/science/chemistry/quantum-espresso/default.nix
index 37c0a8133d1d..2e5bd1ebe4db 100644
--- a/pkgs/applications/science/chemistry/quantum-espresso/default.nix
+++ b/pkgs/applications/science/chemistry/quantum-espresso/default.nix
@@ -134,7 +134,6 @@ stdenv.mkDerivation rec {
license = lib.licenses.gpl2;
platforms = [
"x86_64-linux"
- "x86_64-darwin"
];
maintainers = [ lib.maintainers.costrouc ];
};
diff --git a/pkgs/applications/science/logic/coq/default.nix b/pkgs/applications/science/logic/coq/default.nix
index a5f7e9e861aa..39c8278a232e 100644
--- a/pkgs/applications/science/logic/coq/default.nix
+++ b/pkgs/applications/science/logic/coq/default.nix
@@ -19,7 +19,7 @@
ocamlPackages_4_10,
ocamlPackages_4_12,
ocamlPackages_4_14,
- ocamlPackages_5_4,
+ ocamlPackages_5_5,
rocqPackages, # for versions >= 9.0 that are transition shims on top of Rocq
ncurses,
buildIde ? null, # default is true for Coq < 8.14 and false for Coq >= 8.14
@@ -76,10 +76,11 @@ let
"9.1.0".sha256 = "sha256-+QL7I1/0BfT87n7lSaOmpHj2jJuDB4idWhAxwzvVQOE=";
"9.1.1".sha256 = "sha256-aFsGsFzexyDnOVarHPKs35HjiV8uUCpeOKSl15wXZ4s=";
"9.2.0".sha256 = "sha256-rVhv2GLImdVPgRwwTQ+wiWNtRUflMrES0ElIrdTIN1s=";
+ "9.3+rc1".sha256 = "sha256-vGJkRRzf8ur7i9IUpRA/sxVEQvZGnxfV/ex28Lt1kWw=";
};
releaseRev = v: "V${v}";
fetched =
- import ../../../../build-support/coq/meta-fetch/default.nix
+ import ../../../../build-support/rocq/meta-fetch/default.nix
{
inherit
lib
@@ -105,11 +106,25 @@ let
substituteInPlace plugins/micromega/sos.ml --replace "; csdp" "; ${csdp}/bin/csdp"
substituteInPlace plugins/micromega/coq_micromega.ml --replace "System.is_in_system_path \"csdp\"" "true"
'';
+ dune =
+ if lib.versions.isEq coq-version "8.20" then
+ args.dune.override { version = "3.21.1"; }
+ else
+ args.dune;
ocamlPackages =
if customOCamlPackages != null then
customOCamlPackages
else
lib.switch coq-version [
+ {
+ case = lib.versions.isEq "8.20";
+ out = ocamlPackages_4_14.overrideScope (
+ self: super: {
+ inherit dune;
+ dune_3 = dune;
+ }
+ );
+ }
{
case = lib.versions.range "8.16" "9.1";
out = ocamlPackages_4_14;
@@ -126,12 +141,15 @@ let
case = lib.versions.range "8.7" "8.10";
out = ocamlPackages_4_09;
}
- ] ocamlPackages_5_4;
+ ] ocamlPackages_5_5;
ocamlNativeBuildInputs = [
ocamlPackages.ocaml
ocamlPackages.findlib
]
++ lib.optional (coqAtLeast "8.14") dune;
+ ocamlBuildInputs = [
+ ocamlPackages.findlib
+ ];
ocamlPropagatedBuildInputs =
[ ]
++ lib.optional (!coqAtLeast "8.10") ocamlPackages.camlp5
@@ -211,6 +229,7 @@ let
buildInputs = [
ncurses
]
+ ++ ocamlBuildInputs
++ lib.optionals buildIde (
if coqAtLeast "8.10" then
[
@@ -314,11 +333,18 @@ let
platforms = lib.platforms.unix;
mainProgram = if buildIde then "coqide" else "coqtop";
};
+
+ # Things required by the CI
+ strictDeps = true;
+ __structuredAttrs = true;
};
in
if coqAtLeast "8.21" then
self.overrideAttrs (o: {
# coq-core is now a shim for rocq
+ nativeBuildInputs = o.nativeBuildInputs ++ [
+ rocqPackages.rocq-core
+ ];
propagatedBuildInputs = o.propagatedBuildInputs ++ [
rocqPackages.rocq-core
];
diff --git a/pkgs/applications/science/logic/easycrypt/default.nix b/pkgs/applications/science/logic/easycrypt/default.nix
index 878ebf6b8f8f..872960189af6 100644
--- a/pkgs/applications/science/logic/easycrypt/default.nix
+++ b/pkgs/applications/science/logic/easycrypt/default.nix
@@ -11,13 +11,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "easycrypt";
- version = "2026.05";
+ version = "2026.06";
src = fetchFromGitHub {
owner = "easycrypt";
repo = "easycrypt";
tag = "r${finalAttrs.version}";
- hash = "sha256-+tVGJAfngTHpn7qFGwl36verbcxOqH21zwojgOxcuuY=";
+ hash = "sha256-+exP4UWfNGZauznLZTA/NkMOHJNstz4oaTqI0bSnkH8=";
};
nativeBuildInputs =
diff --git a/pkgs/applications/science/logic/rocq-core/default.nix b/pkgs/applications/science/logic/rocq-core/default.nix
index 6f1c384d005f..68a2c3895e98 100644
--- a/pkgs/applications/science/logic/rocq-core/default.nix
+++ b/pkgs/applications/science/logic/rocq-core/default.nix
@@ -14,7 +14,7 @@
dune,
customOCamlPackages ? null,
ocamlPackages_4_14,
- ocamlPackages_5_4,
+ ocamlPackages_5_5,
ncurses,
csdp ? null,
version,
@@ -29,10 +29,11 @@ let
"9.1.0".sha256 = "sha256-+QL7I1/0BfT87n7lSaOmpHj2jJuDB4idWhAxwzvVQOE=";
"9.1.1".sha256 = "sha256-aFsGsFzexyDnOVarHPKs35HjiV8uUCpeOKSl15wXZ4s=";
"9.2.0".sha256 = "sha256-rVhv2GLImdVPgRwwTQ+wiWNtRUflMrES0ElIrdTIN1s=";
+ "9.3+rc1".sha256 = "sha256-vGJkRRzf8ur7i9IUpRA/sxVEQvZGnxfV/ex28Lt1kWw=";
};
releaseRev = v: "V${v}";
fetched =
- import ../../../../build-support/coq/meta-fetch/default.nix
+ import ../../../../build-support/rocq/meta-fetch/default.nix
{
inherit
lib
@@ -66,12 +67,15 @@ let
in
lib.switch rocq-version [
(case (range "9.0" "9.1") ocamlPackages_4_14)
- ] ocamlPackages_5_4;
+ ] ocamlPackages_5_5;
ocamlNativeBuildInputs = [
ocamlPackages.ocaml
ocamlPackages.findlib
dune
];
+ ocamlBuildInputs = [
+ ocamlPackages.findlib
+ ];
ocamlPropagatedBuildInputs = [ ocamlPackages.zarith ];
self = stdenv.mkDerivation {
pname = "rocq";
@@ -130,7 +134,7 @@ let
};
nativeBuildInputs = [ pkg-config ] ++ ocamlNativeBuildInputs;
- buildInputs = [ ncurses ];
+ buildInputs = [ ncurses ] ++ ocamlBuildInputs;
propagatedBuildInputs = ocamlPropagatedBuildInputs;
@@ -196,6 +200,10 @@ let
platforms = lib.platforms.unix;
mainProgram = "rocq";
};
+
+ # Things required by the CI
+ strictDeps = true;
+ __structuredAttrs = true;
};
in
self
diff --git a/pkgs/applications/science/molecular-dynamics/gromacs/default.nix b/pkgs/applications/science/molecular-dynamics/gromacs/default.nix
index bfc42d8c06be..09cde5a9cdaf 100644
--- a/pkgs/applications/science/molecular-dynamics/gromacs/default.nix
+++ b/pkgs/applications/science/molecular-dynamics/gromacs/default.nix
@@ -110,7 +110,7 @@ effectiveStdenv.mkDerivation (finalAttrs: {
]
++ lib.optionals enableMpi [ mpi ]
++ lib.optionals enableCuda [
- cudaPackages.cuda_cccl
+ cudaPackages.cccl
cudaPackages.cuda_cudart
cudaPackages.libcufft
cudaPackages.cuda_profiler_api
diff --git a/pkgs/applications/video/kodi/addons/arteplussept/default.nix b/pkgs/applications/video/kodi/addons/arteplussept/default.nix
index e6a700cd0a51..959698c9404f 100644
--- a/pkgs/applications/video/kodi/addons/arteplussept/default.nix
+++ b/pkgs/applications/video/kodi/addons/arteplussept/default.nix
@@ -12,11 +12,11 @@
buildKodiAddon rec {
pname = "arteplussept";
namespace = "plugin.video.arteplussept";
- version = "1.4.4";
+ version = "1.5.2";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/${lib.toLower rel}/${namespace}/${namespace}-${version}.zip";
- hash = "sha256-jFIcLhglfOqkFLtlIJKB1o++mWfnpWKS3w1wD0S3+CE=";
+ hash = "sha256-kYIN9I+hSWBYbaUsFRDkcU3FngQRzxmGrjN7rnsWiaA=";
};
propagatedBuildInputs = [
diff --git a/pkgs/applications/video/kodi/addons/controller-topology-project/default.nix b/pkgs/applications/video/kodi/addons/controller-topology-project/default.nix
index d53b26671d3e..6c138f1f9f05 100644
--- a/pkgs/applications/video/kodi/addons/controller-topology-project/default.nix
+++ b/pkgs/applications/video/kodi/addons/controller-topology-project/default.nix
@@ -35,7 +35,7 @@ let
meta = {
homepage = "https://github.com/kodi-game/controller-topology-project";
description = "Models how controllers connect to and map to each other for all gaming history";
- license = with lib.licenses; [ odbl ];
+ license = lib.licenses.odbl;
teams = [ lib.teams.kodi ];
};
};
diff --git a/pkgs/applications/video/kodi/addons/jellycon/default.nix b/pkgs/applications/video/kodi/addons/jellycon/default.nix
index fee86e9c401b..9e8d421591a5 100644
--- a/pkgs/applications/video/kodi/addons/jellycon/default.nix
+++ b/pkgs/applications/video/kodi/addons/jellycon/default.nix
@@ -17,13 +17,13 @@ in
buildKodiAddon rec {
pname = "jellycon";
namespace = "plugin.video.jellycon";
- version = "0.9.1";
+ version = "1.0.2";
src = fetchFromGitHub {
owner = "jellyfin";
repo = "jellycon";
rev = "v${version}";
- sha256 = "sha256-bSAzd0nKD0S3hNEM0azmCNPw9wHQK5XH6lbfcz3sW9o=";
+ sha256 = "sha256-dpH611GZ+BG63bSFypcZ9VUtNCA/tL8zgKuaU7cCRII=";
};
nativeBuildInputs = [
diff --git a/pkgs/applications/video/kodi/addons/jellyfin/default.nix b/pkgs/applications/video/kodi/addons/jellyfin/default.nix
index 08bcc0b72d48..2566e092f884 100644
--- a/pkgs/applications/video/kodi/addons/jellyfin/default.nix
+++ b/pkgs/applications/video/kodi/addons/jellyfin/default.nix
@@ -17,13 +17,13 @@ in
buildKodiAddon rec {
pname = "jellyfin";
namespace = "plugin.video.jellyfin";
- version = "2.0.0";
+ version = "2.1.0";
src = fetchFromGitHub {
owner = "jellyfin";
repo = "jellyfin-kodi";
rev = "v${version}";
- sha256 = "sha256-xWLwtGeKu2W9u96jvLRRluSsnFjfad1/XSIcad00c3Y=";
+ sha256 = "sha256-S5LAIeYwApyGPsj999rotFgfAZmLxnJjuJD8CE4QDro=";
};
nativeBuildInputs = [ python ];
diff --git a/pkgs/applications/video/kodi/addons/youtube/default.nix b/pkgs/applications/video/kodi/addons/youtube/default.nix
index 83075ef1b028..72aecc71388c 100644
--- a/pkgs/applications/video/kodi/addons/youtube/default.nix
+++ b/pkgs/applications/video/kodi/addons/youtube/default.nix
@@ -10,13 +10,13 @@
buildKodiAddon rec {
pname = "youtube";
namespace = "plugin.video.youtube";
- version = "7.4.3";
+ version = "7.4.4";
src = fetchFromGitHub {
owner = "anxdpanic";
repo = "plugin.video.youtube";
rev = "v${version}";
- hash = "sha256-FUfDUyaYHIeu9thCx19huLFnDO7Yl3RKIbfUH2I+SQI=";
+ hash = "sha256-epDKZhITQAv3bpS7CGN2Rj35/AamyZo5yzhkfu72ipw=";
};
propagatedBuildInputs = [
diff --git a/pkgs/applications/video/kodi/unwrapped.nix b/pkgs/applications/video/kodi/unwrapped.nix
index 7f21512e4bba..e430e42397d4 100644
--- a/pkgs/applications/video/kodi/unwrapped.nix
+++ b/pkgs/applications/video/kodi/unwrapped.nix
@@ -2,6 +2,7 @@
stdenv,
lib,
fetchFromGitHub,
+ fetchpatch,
fetchzip,
autoconf,
automake,
@@ -105,8 +106,6 @@
libxdmcp,
dbusSupport ? true,
dbus,
- joystickSupport ? true,
- cwiid,
nfsSupport ? true,
libnfs,
pulseSupport ? true,
@@ -254,6 +253,18 @@ stdenv.mkDerivation (
hash = "sha256-36wBAqGEDCRZ4t1ygTg03Pyk7Gg9quUTUGD3SBp6nCk=";
};
+ patches = [
+ # TexturePacker has some conditionals on GIFLIB 5, which break with
+ # GIFLIB 6. This has been extended to support all versions >= 5 upstream,
+ # but has not yet made it into a release.
+ # https://github.com/xbmc/xbmc/pull/28016
+ (fetchpatch {
+ name = "texturepacker-giflib-6.patch";
+ url = "https://github.com/xbmc/xbmc/commit/29492cbd20d4c90a9c00a30ab525d4d0e81a968b.patch";
+ hash = "sha256-WNaODPCtRfn30jVU5HbBnAO2Vl/MQp2CYmKOTTyDGZI=";
+ })
+ ];
+
# make derivations declared in the let binding available here, so
# they can be overridden
inherit
@@ -361,7 +372,6 @@ stdenv.mkDerivation (
libxfixes
]
++ lib.optional dbusSupport dbus
- ++ lib.optional joystickSupport cwiid
++ lib.optional nfsSupport libnfs
++ lib.optional pulseSupport libpulseaudio
++ lib.optional pipewireSupport pipewire
diff --git a/pkgs/applications/video/obs-studio/plugins/advanced-scene-switcher/default.nix b/pkgs/applications/video/obs-studio/plugins/advanced-scene-switcher/default.nix
index e3ceeb3fbaf6..6c67d1757316 100644
--- a/pkgs/applications/video/obs-studio/plugins/advanced-scene-switcher/default.nix
+++ b/pkgs/applications/video/obs-studio/plugins/advanced-scene-switcher/default.nix
@@ -36,13 +36,13 @@ let
in
stdenv.mkDerivation rec {
pname = "advanced-scene-switcher";
- version = "1.34.2";
+ version = "1.35.1";
src = fetchFromGitHub {
owner = "WarmUpTill";
repo = "SceneSwitcher";
rev = version;
- hash = "sha256-BZYJ5ZZbla4nnpKdZAQPrqd+g1aeLMcsnAvyXfmm4yU=";
+ hash = "sha256-gfJtkX6OGqy+hUXvLXaOETvfIX+TRNEj0IwZnE9t81E=";
};
nativeBuildInputs = [
diff --git a/pkgs/applications/video/obs-studio/plugins/default.nix b/pkgs/applications/video/obs-studio/plugins/default.nix
index 1d6eb5b49f79..fed1c01e922e 100644
--- a/pkgs/applications/video/obs-studio/plugins/default.nix
+++ b/pkgs/applications/video/obs-studio/plugins/default.nix
@@ -108,6 +108,8 @@
obs-vnc = callPackage ./obs-vnc.nix { };
+ obs-wayland-hotkeys = qt6Packages.callPackage ./obs-wayland-hotkeys { };
+
obs-websocket = qt6Packages.callPackage ./obs-websocket.nix { }; # Websocket 4.x compatibility for OBS Studio 28+
pixel-art = callPackage ./pixel-art.nix { };
diff --git a/pkgs/applications/video/obs-studio/plugins/distroav/default.nix b/pkgs/applications/video/obs-studio/plugins/distroav/default.nix
index f24a89c61bc3..c223220a29f2 100644
--- a/pkgs/applications/video/obs-studio/plugins/distroav/default.nix
+++ b/pkgs/applications/video/obs-studio/plugins/distroav/default.nix
@@ -54,7 +54,7 @@ stdenv.mkDerivation rec {
meta = {
description = "Network A/V plugin for OBS Studio (formerly obs-ndi)";
homepage = "https://github.com/DistroAV/DistroAV";
- license = with lib.licenses; [ gpl2 ];
+ license = lib.licenses.gpl2;
maintainers = with lib.maintainers; [ globule655 ];
platforms = lib.platforms.linux;
};
diff --git a/pkgs/applications/video/obs-studio/plugins/droidcam-obs/default.nix b/pkgs/applications/video/obs-studio/plugins/droidcam-obs/default.nix
index d296352940d5..0f5090b0bed9 100644
--- a/pkgs/applications/video/obs-studio/plugins/droidcam-obs/default.nix
+++ b/pkgs/applications/video/obs-studio/plugins/droidcam-obs/default.nix
@@ -2,7 +2,6 @@
lib,
stdenv,
fetchFromGitHub,
- fetchpatch,
obs-studio,
ffmpeg,
libjpeg,
@@ -13,24 +12,15 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "droidcam-obs";
- version = "2.4.1";
+ version = "2.5.0";
src = fetchFromGitHub {
owner = "dev47apps";
repo = "droidcam-obs-plugin";
tag = finalAttrs.version;
- sha256 = "sha256-hxG/v15Q4D+6LU4BNV6ErSa1WvPk4kMPl07pIqiMcc4=";
+ hash = "sha256-JPAQoGZFzTIdBQ7GpCPaYUVPkkcBdCRFkVPU+nyRa7Q=";
};
- patches = [
- # Fix build with ffmpeg 8 / libavcodec 62
- # TODO: Drop this once v2.4.3+ is released
- (fetchpatch {
- url = "https://github.com/dev47apps/droidcam-obs-plugin/commit/73ec2a01e234e6b2287866c25b4242dca6d9d2f6.patch";
- hash = "sha256-AI2Z9i3+KfvmpyVX9WwX3jcA1hyUZiFO7kWRsb+8/10=";
- })
- ];
-
preBuild = ''
mkdir ./build
'';
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-hyperion/default.nix b/pkgs/applications/video/obs-studio/plugins/obs-hyperion/default.nix
index 7ffa72461ef6..ab8036ac7eaf 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-hyperion/default.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-hyperion/default.nix
@@ -43,7 +43,7 @@ stdenv.mkDerivation rec {
"-DUSE_SYSTEM_FLATBUFFERS_LIBS=ON"
];
- NIX_CFLAGS_COMPILE = [ "-Wno-error" ];
+ env.NIX_CFLAGS_COMPILE = toString [ "-Wno-error" ];
preConfigure = ''
rm -rf external/flatbuffers
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-source-record.nix b/pkgs/applications/video/obs-studio/plugins/obs-source-record.nix
index 9bc5f5683011..f4d4caa3ff46 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-source-record.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-source-record.nix
@@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ cmake ];
buildInputs = [ obs-studio ];
- NIX_CFLAGS_COMPILE = [ "-Wno-error=deprecated-declarations" ];
+ env.NIX_CFLAGS_COMPILE = toString [ "-Wno-error=deprecated-declarations" ];
cmakeFlags = [ "-DBUILD_OUT_OF_TREE=On" ];
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-teleport/default.nix b/pkgs/applications/video/obs-studio/plugins/obs-teleport/default.nix
index 63d0fe98aeb2..db946836d538 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-teleport/default.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-teleport/default.nix
@@ -30,8 +30,10 @@ buildGoModule rec {
"-w"
];
- CGO_CFLAGS = "-I${obs-studio}/include/obs";
- CGO_LDFLAGS = "-L${obs-studio}/lib -lobs -lobs-frontend-api";
+ env = {
+ CGO_CFLAGS = "-I${obs-studio}/include/obs";
+ CGO_LDFLAGS = "-L${obs-studio}/lib -lobs -lobs-frontend-api";
+ };
buildPhase = ''
runHook preBuild
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-vaapi/default.nix b/pkgs/applications/video/obs-studio/plugins/obs-vaapi/default.nix
index fd7837eb5cc3..840c5a50ac76 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-vaapi/default.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-vaapi/default.nix
@@ -36,7 +36,6 @@ stdenv.mkDerivation rec {
# - We need "getLib" instead of default derivation, otherwise it brings gstreamer-bin;
# - without gst-plugins-base it won't even show proper errors in logs;
# - Without gst-plugins-bad it won't find element "vapostproc";
- # - gst-vaapi adds "VA-API" to "Encoder type";
# Tip: "could not link appsrc to videoconvert1" can mean a lot of things, enable GST_DEBUG=2 for help.
passthru.obsWrapperArguments =
let
@@ -48,7 +47,6 @@ stdenv.mkDerivation rec {
gstreamer
gst-plugins-base
gst-plugins-bad
- gst-vaapi
];
# Fix output directory
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-vertical-canvas.nix b/pkgs/applications/video/obs-studio/plugins/obs-vertical-canvas.nix
index 097417f3c905..a77779df1335 100644
--- a/pkgs/applications/video/obs-studio/plugins/obs-vertical-canvas.nix
+++ b/pkgs/applications/video/obs-studio/plugins/obs-vertical-canvas.nix
@@ -10,18 +10,15 @@
stdenv.mkDerivation rec {
pname = "obs-vertical-canvas";
- version = "1.6.2";
+ version = "1.6.4";
src = fetchFromGitHub {
owner = "Aitum";
repo = "obs-vertical-canvas";
rev = version;
- sha256 = "sha256-LaVDwC+L96cvq3OpNnD33bf+tV1RZ9AdUHjG4oIFzpY=";
+ sha256 = "sha256-cWiC4e+ZojTuNAaNwuBQ1pPlchdiuTsVhWMHvcyxx2A=";
};
- # Remove after https://github.com/Aitum/obs-vertical-canvas/pull/26 is released :)
- patches = [ ./obs-vertical-canvas.diff ];
-
nativeBuildInputs = [ cmake ];
buildInputs = [
diff --git a/pkgs/applications/video/obs-studio/plugins/obs-wayland-hotkeys/default.nix b/pkgs/applications/video/obs-studio/plugins/obs-wayland-hotkeys/default.nix
new file mode 100644
index 000000000000..d28807edc33f
--- /dev/null
+++ b/pkgs/applications/video/obs-studio/plugins/obs-wayland-hotkeys/default.nix
@@ -0,0 +1,41 @@
+{
+ stdenv,
+ lib,
+ fetchFromGitHub,
+ cmake,
+ obs-studio,
+ pkg-config,
+ qtbase,
+}:
+
+stdenv.mkDerivation (finalAttr: {
+ pname = "obs-wayland-hotkeys";
+ version = "1.1.0";
+
+ src = fetchFromGitHub {
+ owner = "leia-uwu";
+ repo = "obs-wayland-hotkeys";
+ tag = "v${finalAttr.version}";
+ hash = "sha256-vOQfOEAnxn5vCaWpwDED1C107BB/d7T10kmKTXJ4k8k=";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ pkg-config
+ ];
+
+ buildInputs = [
+ obs-studio
+ qtbase
+ ];
+
+ dontWrapQtApps = true;
+
+ meta = {
+ description = "OBS Studio plugin to integrate OBS hotkeys with the Wayland global shortcuts portal";
+ homepage = "https://github.com/leia-uwu/obs-wayland-hotkeys";
+ maintainers = with lib.maintainers; [ terrorw0lf ];
+ license = lib.licenses.gpl2;
+ platforms = lib.platforms.linux;
+ };
+})
diff --git a/pkgs/applications/video/vdr/softhddevice/default.nix b/pkgs/applications/video/vdr/softhddevice/default.nix
index b26be178e0d4..47332670d014 100644
--- a/pkgs/applications/video/vdr/softhddevice/default.nix
+++ b/pkgs/applications/video/vdr/softhddevice/default.nix
@@ -16,12 +16,12 @@
}:
stdenv.mkDerivation rec {
pname = "vdr-softhddevice";
- version = "2.4.8";
+ version = "2.5.0";
src = fetchFromGitHub {
owner = "ua0lnj";
repo = "vdr-plugin-softhddevice";
- sha256 = "sha256-pQ437Du++L6KhBCqkHpiYCoT713RAB+rnoGCXr5M0S4=";
+ sha256 = "sha256-vicHneEZZHTraffUek77QDZdv/xZGzN102nbr1Bkfzo=";
rev = "v${version}";
};
diff --git a/pkgs/applications/virtualization/OVMF/default.nix b/pkgs/applications/virtualization/OVMF/default.nix
index 8435e824b843..42c78bea88a2 100644
--- a/pkgs/applications/virtualization/OVMF/default.nix
+++ b/pkgs/applications/virtualization/OVMF/default.nix
@@ -270,7 +270,6 @@ edk2.mkDerivation projectDscPath (finalAttrs: {
platforms = metaPlatforms;
maintainers = with lib.maintainers; [
adamcstephens
- raitobezarius
mjoerg
sigmasquadron
];
diff --git a/pkgs/applications/virtualization/docker/buildx.nix b/pkgs/applications/virtualization/docker/buildx.nix
index 64bc3b9885c5..10ec200adc03 100644
--- a/pkgs/applications/virtualization/docker/buildx.nix
+++ b/pkgs/applications/virtualization/docker/buildx.nix
@@ -6,13 +6,13 @@
buildGoModule rec {
pname = "docker-buildx";
- version = "0.31.1";
+ version = "0.35.0";
src = fetchFromGitHub {
owner = "docker";
repo = "buildx";
rev = "v${version}";
- hash = "sha256-9O/vdgVQF3TPyN+WdUYAuVWjAa1ZRKGCCyQ6eZ+EZAs=";
+ hash = "sha256-Q4f7tejn0LO4eiEq+ske53WJ1oe5JxtCVZA2Im+7dv8=";
};
doCheck = false;
diff --git a/pkgs/applications/virtualization/docker/compose.nix b/pkgs/applications/virtualization/docker/compose.nix
index 96820c023507..d4a785417e24 100644
--- a/pkgs/applications/virtualization/docker/compose.nix
+++ b/pkgs/applications/virtualization/docker/compose.nix
@@ -6,16 +6,16 @@
}:
buildGoModule rec {
pname = "docker-compose";
- version = "5.1.4";
+ version = "5.3.1";
src = fetchFromGitHub {
owner = "docker";
repo = "compose";
tag = "v${version}";
- hash = "sha256-sdRxssZ6bRGRB/WPp2BiDTVHQ5LBmNGwXQYBdSpylQg=";
+ hash = "sha256-UNORlxZ/b4Jrp9v8pbsxTt8PrYq1/u4AjBU8+pfuG1k=";
};
- vendorHash = "sha256-hgNboIZx5QOGjPadey4f2TKpPw+b2sja6mcwoMjINuY=";
+ vendorHash = "sha256-Ug6/hpuHgJ2CAUX87/+Tt3cHm4AbJF9oznx61kTVKI4=";
nativeInstallCheckInputs = [ versionCheckHook ];
diff --git a/pkgs/applications/virtualization/docker/default.nix b/pkgs/applications/virtualization/docker/default.nix
index 9969a1705be5..91be307654fe 100644
--- a/pkgs/applications/virtualization/docker/default.nix
+++ b/pkgs/applications/virtualization/docker/default.nix
@@ -420,18 +420,18 @@ in
docker_29 =
let
- version = "29.5.3";
+ version = "29.6.2";
in
callPackage dockerGen {
inherit version;
cliRev = "v${version}";
- cliHash = "sha256-ZYfBWNVp7w8ZKdRA6bmDVQV4UEp+t8lWehInvtfysxM=";
+ cliHash = "sha256-WpPSePMCfWAVxCkX1nZyI+sra/Vug009ZPmnVKDaX0I=";
mobyRev = "docker-v${version}";
- mobyHash = "sha256-D+XjHsKUFgMBCQsFI825JIGHEQmDt3NQCwpTdu6XSc8=";
- runcRev = "v1.3.5";
- runcHash = "sha256-Swphxbu/OLkUrfRjLMZIVGwYb7AN0xHdyxm0ysAVam0=";
- containerdRev = "v2.2.4";
- containerdHash = "sha256-F0lw7zh4V9JlFQGkE4RNT1VLX8WWLgZAAvbP12jnRMw=";
+ mobyHash = "sha256-zrvrZCRUuiZ2vixZNOUFeGmDehHzSI+FzDMzV1gMqMc=";
+ runcRev = "v1.3.6";
+ runcHash = "sha256-cBMYZOElWHQ4OkF2NlYJSZrlW4833WD8CRJRkkXeKJc=";
+ containerdRev = "v2.2.6";
+ containerdHash = "sha256-Ngo9x847cXFYPnj/0I+g7BeV7e1/5T2YXfA1zkIdiPg=";
tiniRev = "369448a167e8b3da4ca5bca0b3307500c3371828";
tiniHash = "sha256-jCBNfoJAjmcTJBx08kHs+FmbaU82CbQcf0IVjd56Nuw=";
};
diff --git a/pkgs/applications/virtualization/virtualbox/default.nix b/pkgs/applications/virtualization/virtualbox/default.nix
index 449c2cbac455..91c93d19d0cf 100644
--- a/pkgs/applications/virtualization/virtualbox/default.nix
+++ b/pkgs/applications/virtualization/virtualbox/default.nix
@@ -72,9 +72,9 @@ let
buildType = "release";
# Use maintainers/scripts/update.nix to update the version and all related hashes or
# change the hashes in extpack.nix and guest-additions/default.nix as well manually.
- virtualboxVersion = "7.2.8";
+ virtualboxVersion = "7.2.12";
virtualboxSubVersion = "";
- virtualboxSha256 = "0642ed4a12b7204cd30c0abbc2c10c1cc7ad55ce1756a01e86a16d4b6b066592";
+ virtualboxSha256 = "64a4843677e42010e7799e951883fbbefc56bf2bc162e4970edea04f142f8b25";
kvmPatchVboxVersion = "7.2.6";
kvmPatchVersion = "20260201";
diff --git a/pkgs/applications/virtualization/virtualbox/extpack.nix b/pkgs/applications/virtualization/virtualbox/extpack.nix
index 841e58dab76b..c8580a091e6a 100644
--- a/pkgs/applications/virtualization/virtualbox/extpack.nix
+++ b/pkgs/applications/virtualization/virtualbox/extpack.nix
@@ -5,7 +5,7 @@
}:
fetchurl rec {
pname = "virtualbox-extpack";
- version = "7.2.8";
+ version = "7.2.12";
name = "Oracle_VirtualBox_Extension_Pack-${version}.vbox-extpack";
url = "https://download.virtualbox.org/virtualbox/${version}/${name}";
sha256 =
@@ -13,7 +13,7 @@ fetchurl rec {
# Thus do not use `nix-prefetch-url` but instead plain old `sha256sum`.
# Checksums can also be found at https://download.virtualbox.org/virtualbox/${version}/SHA256SUMS
let
- value = "d7301435ee207ff96c5ad372939dc46d39e0f9db2bcce487cf1e8f739a2e845b";
+ value = "ac461d67462e06a9e16e8b96623c1b1a8c692c7f78e3566584b47e2d2e533f76";
in
assert (builtins.stringLength value) == 64;
value;
diff --git a/pkgs/applications/virtualization/virtualbox/guest-additions-iso/default.nix b/pkgs/applications/virtualization/virtualbox/guest-additions-iso/default.nix
index dfb87074fc93..a1abd7a1b18f 100644
--- a/pkgs/applications/virtualization/virtualbox/guest-additions-iso/default.nix
+++ b/pkgs/applications/virtualization/virtualbox/guest-additions-iso/default.nix
@@ -5,7 +5,7 @@
}:
fetchurl {
url = "http://download.virtualbox.org/virtualbox/${virtualboxVersion}/VBoxGuestAdditions_${virtualboxVersion}.iso";
- sha256 = "169acb9361ade42d32500f51b48ad366fdfdb094b5e3fb422d640c1416a6b216";
+ sha256 = "ae55a8a3b3934785a3a622f63483806e3228112eba57f86ca932958199b8f61b";
meta = {
description = "Guest additions ISO for VirtualBox";
longDescription = ''
diff --git a/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix b/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix
index 6a612b7e327b..fa4725a69a20 100644
--- a/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix
+++ b/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix
@@ -18,9 +18,9 @@
libx11,
}:
let
- virtualboxVersion = "7.2.8";
+ virtualboxVersion = "7.2.12";
virtualboxSubVersion = "";
- virtualboxSha256 = "0642ed4a12b7204cd30c0abbc2c10c1cc7ad55ce1756a01e86a16d4b6b066592";
+ virtualboxSha256 = "64a4843677e42010e7799e951883fbbefc56bf2bc162e4970edea04f142f8b25";
platform =
if stdenv.hostPlatform.isAarch64 then
@@ -68,8 +68,6 @@ let
pkg = libxt;
}
];
-
- hasVboxVideo = lib.versionOlder kernel.version "7.0";
in
stdenv.mkDerivation {
pname = "VirtualBox-GuestAdditions";
@@ -135,10 +133,7 @@ stdenv.mkDerivation {
# Install kernel modules.
cd src/vboxguest-${virtualboxVersion}_NixOS
-
- INSTALL_TARGETS=(install-vboxguest install-vboxsf ${lib.optionalString hasVboxVideo "install-vboxvideo"})
- make INSTALL_MOD_PATH=$out KBUILD_EXTRA_SYMBOLS=$PWD/vboxsf/Module.symvers ''${INSTALL_TARGETS[@]}
-
+ make install INSTALL_MOD_PATH=$out KBUILD_EXTRA_SYMBOLS=$PWD/vboxsf/Module.symvers
cd ../..
# Install binaries
diff --git a/pkgs/applications/window-managers/evilwm/default.nix b/pkgs/applications/window-managers/evilwm/default.nix
index 832f7306bb6e..11bbebb5dcd6 100644
--- a/pkgs/applications/window-managers/evilwm/default.nix
+++ b/pkgs/applications/window-managers/evilwm/default.nix
@@ -12,11 +12,11 @@
stdenv.mkDerivation rec {
pname = "evilwm";
- version = "1.4.3";
+ version = "1.5";
src = fetchurl {
url = "https://www.6809.org.uk/evilwm/evilwm-${version}.tar.gz";
- sha256 = "sha256-1ZRbILEskdskEvrA29o/ucPsjeu44bEJg4mSsrG75dQ=";
+ sha256 = "sha256-YQSFJBPm1QZpNh3K3aWiXTnisrDJWmOEAiyQWVeidA8=";
};
buildInputs = [
diff --git a/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hypr-darkwindow.nix b/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hypr-darkwindow.nix
index 8cc7cec60189..9a1f00e07b0d 100644
--- a/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hypr-darkwindow.nix
+++ b/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hypr-darkwindow.nix
@@ -7,13 +7,13 @@
mkHyprlandPlugin (finalAttrs: {
pluginName = "hypr-darkwindow";
- version = "0.55.2";
+ version = "0.55.4";
src = fetchFromGitHub {
owner = "micha4w";
repo = "Hypr-DarkWindow";
tag = "v${finalAttrs.version}";
- hash = "sha256-8Ht9yhlwOtDWFvL6VYlryNxyRethFqc0iWtBetP0xws=";
+ hash = "sha256-91l5TD46OMfvmhd1WqWxm42cEnjR1yAj2Qk/73mr3ks=";
};
installPhase = ''
diff --git a/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hyprgrass.nix b/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hyprgrass.nix
index 7d0fbc2f1e16..640e16bfd659 100644
--- a/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hyprgrass.nix
+++ b/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hyprgrass.nix
@@ -12,13 +12,13 @@
mkHyprlandPlugin {
pluginName = "hyprgrass";
- version = "0.8.2-unstable-2025-10-08";
+ version = "0.8.2-unstable-2026-06-10";
src = fetchFromGitHub {
owner = "horriblename";
repo = "hyprgrass";
- rev = "fdfa60d464a18ae20b7a7bc63c0d2336f37c164b";
- hash = "sha256-2Y2D2wuNqSldprawq8BSca90gSYSR5ZKL5ZW2YAV2F8=";
+ rev = "d094a3e62f6ecaeb41515982d3e13edefaf8a4e7";
+ hash = "sha256-tCt7FNc1RBHou/ym7B0XzoOqqNq8Df+dizEDkAgJ4U0=";
};
nativeBuildInputs = [
@@ -34,7 +34,7 @@ mkHyprlandPlugin {
doCheck = true;
- passthru.updateScript = nix-update-script { };
+ passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; };
meta = {
description = "Hyprland plugin for touch gestures";
diff --git a/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hyprland-plugins.nix b/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hyprland-plugins.nix
index 042337749148..f6ee4ff81dab 100644
--- a/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hyprland-plugins.nix
+++ b/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hyprland-plugins.nix
@@ -13,13 +13,13 @@ let
mkHyprlandPlugin,
}:
let
- version = "0.55.0";
+ version = "0.56.0";
hyprland-plugins-src = fetchFromGitHub {
owner = "hyprwm";
repo = "hyprland-plugins";
tag = "v${version}";
- hash = "sha256-WMUJ7tyw/9QbKUyRzLndEQSqX05fQLmFlRdMAmPD7tI=";
+ hash = "sha256-piRpwar7VZI3YviYo0a/UMFz9+rLesfv3nRLGKxjVGg=";
};
in
mkHyprlandPlugin {
diff --git a/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hyprsplit.nix b/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hyprsplit.nix
index 4f8d170a5d7a..c8e6d07f48a5 100644
--- a/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hyprsplit.nix
+++ b/pkgs/applications/window-managers/hyprwm/hyprland-plugins/hyprsplit.nix
@@ -8,13 +8,13 @@
}:
mkHyprlandPlugin (finalAttrs: {
pluginName = "hyprsplit";
- version = "0.54.2";
+ version = "0.54.3-unstable-2026-06-11";
src = fetchFromGitHub {
owner = "shezdy";
repo = "hyprsplit";
- tag = "v${finalAttrs.version}";
- hash = "sha256-NFMLZmM6lM7v6WFcewOp7pKPlr6ampX/MB/kGxt/gPE=";
+ rev = "6b00b677d8905fb38779c91e12d6294e0e586a44";
+ hash = "sha256-PaoUtmk+qIP/ESdxkxnY7mUMpMHjix88qu22R5GLQqE=";
};
nativeBuildInputs = [
@@ -22,7 +22,7 @@ mkHyprlandPlugin (finalAttrs: {
ninja
];
- passthru.updateScript = nix-update-script { };
+ passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; };
meta = {
homepage = "https://github.com/shezdy/hyprsplit";
diff --git a/pkgs/applications/window-managers/hyprwm/hyprland-plugins/imgborders.nix b/pkgs/applications/window-managers/hyprwm/hyprland-plugins/imgborders.nix
index f7e387354ced..ff1811eb2b09 100644
--- a/pkgs/applications/window-managers/hyprwm/hyprland-plugins/imgborders.nix
+++ b/pkgs/applications/window-managers/hyprwm/hyprland-plugins/imgborders.nix
@@ -5,31 +5,22 @@
cmake,
nix-update-script,
}:
-mkHyprlandPlugin (finalAttrs: {
+mkHyprlandPlugin {
pluginName = "imgborders";
- version = "1.0.1";
+ version = "1.0.2-unstable-2026-05-17";
src = fetchFromCodeberg {
owner = "zacoons";
repo = "imgborders";
- tag = finalAttrs.version;
- hash = "sha256-fCzz4gh8pd7J6KQJB/avYcS0Z7NYpxjznPMtOwypPSQ=";
+ rev = "a20b4d36d01f82823ba3749db95c91743d26f656";
+ hash = "sha256-e3PiaR7G6l/lMJ41xtSPcfMKhZcx8UHj13lr0u+8JAk=";
};
nativeBuildInputs = [
cmake
];
- installPhase = ''
- runHook preInstall
-
- mkdir -p $out/lib
- mv imgborders.so $out/lib/libimgborders.so
-
- runHook postInstall
- '';
-
- passthru.updateScript = nix-update-script { };
+ passthru.updateScript = nix-update-script { extraArgs = [ "--version=branch" ]; };
meta = {
homepage = "https://codeberg.org/zacoons/imgborders";
@@ -39,4 +30,4 @@ mkHyprlandPlugin (finalAttrs: {
mrdev023
];
};
-})
+}
diff --git a/pkgs/applications/window-managers/hyprwm/xdg-desktop-portal-hyprland/default.nix b/pkgs/applications/window-managers/hyprwm/xdg-desktop-portal-hyprland/default.nix
index 27dc09810161..ce0d1ba5cf29 100644
--- a/pkgs/applications/window-managers/hyprwm/xdg-desktop-portal-hyprland/default.nix
+++ b/pkgs/applications/window-managers/hyprwm/xdg-desktop-portal-hyprland/default.nix
@@ -7,6 +7,7 @@
pkg-config,
wrapQtAppsHook,
nix-update-script,
+ grim,
hyprland,
hyprland-protocols,
hyprlang,
@@ -27,13 +28,13 @@
}:
stdenv.mkDerivation (finalAttrs: {
pname = "xdg-desktop-portal-hyprland";
- version = "1.3.12";
+ version = "1.4.0";
src = fetchFromGitHub {
owner = "hyprwm";
repo = "xdg-desktop-portal-hyprland";
tag = "v${finalAttrs.version}";
- hash = "sha256-B7nwX0PE0KBo1/ZtuwJtA7dBG6gdPW5tSBb0skY8DHA=";
+ hash = "sha256-nzm1lwk41EzFVYC6HX7YCFnjCGJ2Ac1n7xi47ajYu8Y=";
};
depsBuildBuild = [
@@ -67,6 +68,7 @@ stdenv.mkDerivation (finalAttrs: {
cmakeBuildType = if debug then "Debug" else "RelWithDebInfo";
dontStrip = debug;
+ separateDebugInfo = !debug;
dontWrapQtApps = true;
@@ -81,7 +83,12 @@ stdenv.mkDerivation (finalAttrs: {
}
wrapProgramShell $out/libexec/xdg-desktop-portal-hyprland \
- --prefix PATH ":" ${lib.makeBinPath [ (placeholder "out") ]}
+ --prefix PATH ":" ${
+ lib.makeBinPath [
+ (placeholder "out")
+ grim
+ ]
+ }
'';
passthru = {
diff --git a/pkgs/build-support/bintools-wrapper/setup-hook.sh b/pkgs/build-support/bintools-wrapper/setup-hook.sh
index 93aa7825f9a9..1d67e65baf20 100644
--- a/pkgs/build-support/bintools-wrapper/setup-hook.sh
+++ b/pkgs/build-support/bintools-wrapper/setup-hook.sh
@@ -60,7 +60,8 @@ do
if
PATH=$_PATH type -p "@targetPrefix@${cmd}" > /dev/null
then
- export "${cmd^^}${role_post}=@targetPrefix@${cmd}";
+ upper_case="$(echo "$cmd" | tr "a-z" "A-Z")"
+ export "${upper_case}${role_post}=@targetPrefix@${cmd}";
fi
done
diff --git a/pkgs/build-support/build-fhsenv-bubblewrap/default.nix b/pkgs/build-support/build-fhsenv-bubblewrap/default.nix
index 2c6a297cb7cb..b3406d062449 100644
--- a/pkgs/build-support/build-fhsenv-bubblewrap/default.nix
+++ b/pkgs/build-support/build-fhsenv-bubblewrap/default.nix
@@ -348,6 +348,8 @@ runCommandLocal name
// {
inherit nativeBuildInputs;
+ __structuredAttrs = true;
+
passthru = passthru // {
env =
runCommandLocal "${name}-shell-env"
diff --git a/pkgs/build-support/build-fhsenv-chroot/chrootenv/default.nix b/pkgs/build-support/build-fhsenv-chroot/chrootenv/default.nix
deleted file mode 100644
index 194e77a67a43..000000000000
--- a/pkgs/build-support/build-fhsenv-chroot/chrootenv/default.nix
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- lib,
- stdenv,
- meson,
- ninja,
- pkg-config,
- glib,
-}:
-
-stdenv.mkDerivation {
- name = "chrootenv";
- src = ./src;
-
- nativeBuildInputs = [
- meson
- ninja
- pkg-config
- ];
- buildInputs = [ glib ];
-
- meta = {
- description = "Setup mount/user namespace for FHS emulation";
- license = lib.licenses.mit;
- maintainers = [ ];
- platforms = lib.platforms.linux;
- };
-}
diff --git a/pkgs/build-support/build-fhsenv-chroot/chrootenv/src/chrootenv.c b/pkgs/build-support/build-fhsenv-chroot/chrootenv/src/chrootenv.c
deleted file mode 100644
index c109d7297e17..000000000000
--- a/pkgs/build-support/build-fhsenv-chroot/chrootenv/src/chrootenv.c
+++ /dev/null
@@ -1,169 +0,0 @@
-#define _GNU_SOURCE
-
-#include
-#include
-
-#include
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-
-#define fail(s, err) g_error("%s: %s: %s", __func__, s, g_strerror(err))
-#define fail_if(expr) \
- if (expr) \
- fail(#expr, errno);
-
-const gchar *bind_blacklist[] = {"bin", "etc", "host", "real-host", "usr", "lib", "lib64", "lib32", "sbin", "opt", NULL};
-
-int pivot_root(const char *new_root, const char *put_old) {
- return syscall(SYS_pivot_root, new_root, put_old);
-}
-
-void mount_tmpfs(const gchar *target) {
- fail_if(mount("none", target, "tmpfs", 0, NULL));
-}
-
-void bind_mount(const gchar *source, const gchar *target) {
- fail_if(g_mkdir(target, 0755));
- fail_if(mount(source, target, NULL, MS_BIND | MS_REC, NULL));
-}
-
-const gchar *create_tmpdir() {
- gchar *prefix =
- g_build_filename(g_get_tmp_dir(), "chrootenvXXXXXX", NULL);
- fail_if(!g_mkdtemp_full(prefix, 0755));
- return prefix;
-}
-
-void pivot_host(const gchar *guest) {
- g_autofree gchar *point = g_build_filename(guest, "host", NULL);
- fail_if(g_mkdir(point, 0755));
- fail_if(pivot_root(guest, point));
-}
-
-void bind_mount_item(const gchar *host, const gchar *guest, const gchar *name) {
- g_autofree gchar *source = g_build_filename(host, name, NULL);
- g_autofree gchar *target = g_build_filename(guest, name, NULL);
-
- if (G_LIKELY(g_file_test(source, G_FILE_TEST_IS_DIR)))
- bind_mount(source, target);
-}
-
-void bind(const gchar *host, const gchar *guest) {
- mount_tmpfs(guest);
-
- pivot_host(guest);
-
- g_autofree gchar *host_dir = g_build_filename("/host", host, NULL);
-
- g_autoptr(GError) err = NULL;
- g_autoptr(GDir) dir = g_dir_open(host_dir, 0, &err);
-
- if (err != NULL)
- fail("g_dir_open", errno);
-
- const gchar *item;
-
- while ((item = g_dir_read_name(dir)))
- if (!g_strv_contains(bind_blacklist, item))
- bind_mount_item(host_dir, "/", item);
-}
-
-void spit(const char *path, char *fmt, ...) {
- va_list args;
- va_start(args, fmt);
-
- FILE *f = g_fopen(path, "w");
-
- if (f == NULL)
- fail("g_fopen", errno);
-
- g_vfprintf(f, fmt, args);
- fclose(f);
-}
-
-int main(gint argc, gchar **argv) {
- const gchar *self = *argv++;
-
- if (argc < 2) {
- g_message("%s command [arguments...]", self);
- return 1;
- }
-
- g_autofree const gchar *prefix = create_tmpdir();
-
- pid_t cpid = fork();
-
- if (cpid < 0)
- fail("fork", errno);
-
- else if (cpid == 0) {
- uid_t uid = getuid();
- gid_t gid = getgid();
-
- int namespaces = CLONE_NEWNS;
- if (uid != 0) {
- namespaces |= CLONE_NEWUSER;
- }
- if (unshare(namespaces) < 0) {
- int unshare_errno = errno;
-
- g_message("Requires Linux version >= 3.19 built with CONFIG_USER_NS");
- if (g_file_test("/proc/sys/kernel/unprivileged_userns_clone",
- G_FILE_TEST_EXISTS))
- g_message("Run: sudo sysctl -w kernel.unprivileged_userns_clone=1");
-
- fail("unshare", unshare_errno);
- }
-
- // hide all mounts we do from the parent
- fail_if(mount(0, "/", 0, MS_SLAVE | MS_REC, 0));
-
- if (uid != 0) {
- spit("/proc/self/setgroups", "deny");
- spit("/proc/self/uid_map", "%d %d 1", uid, uid);
- spit("/proc/self/gid_map", "%d %d 1", gid, gid);
- }
-
- // If there is a /host directory, assume this is nested chrootenv and use it as host instead.
- gboolean nested_host = g_file_test("/host", G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR);
- g_autofree const gchar *host = nested_host ? "/host" : "/";
-
- bind(host, prefix);
-
- // Replace /host by an actual (inner) /host.
- if (nested_host) {
- fail_if(g_mkdir("/real-host", 0755));
- fail_if(mount("/host/host", "/real-host", NULL, MS_BIND | MS_REC, NULL));
- // For some reason umount("/host") returns EBUSY even immediately after
- // pivot_root. We detach it at least to keep `/proc/mounts` from blowing
- // up in nested cases.
- fail_if(umount2("/host", MNT_DETACH));
- fail_if(mount("/real-host", "/host", NULL, MS_MOVE, NULL));
- fail_if(rmdir("/real-host"));
- }
-
- fail_if(chdir("/"));
- fail_if(execvp(*argv, argv));
- }
-
- else {
- int status;
-
- fail_if(waitpid(cpid, &status, 0) != cpid);
- fail_if(rmdir(prefix));
-
- if (WIFEXITED(status))
- return WEXITSTATUS(status);
-
- else if (WIFSIGNALED(status))
- kill(getpid(), WTERMSIG(status));
-
- return 1;
- }
-}
diff --git a/pkgs/build-support/build-fhsenv-chroot/chrootenv/src/meson.build b/pkgs/build-support/build-fhsenv-chroot/chrootenv/src/meson.build
deleted file mode 100644
index 6d0770a0dc4a..000000000000
--- a/pkgs/build-support/build-fhsenv-chroot/chrootenv/src/meson.build
+++ /dev/null
@@ -1,5 +0,0 @@
-project('chrootenv', 'c')
-
-glib = dependency('glib-2.0')
-
-executable('chrootenv', 'chrootenv.c', dependencies: [glib], install: true)
diff --git a/pkgs/build-support/build-fhsenv-chroot/default.nix b/pkgs/build-support/build-fhsenv-chroot/default.nix
deleted file mode 100644
index 10d2af55a7b0..000000000000
--- a/pkgs/build-support/build-fhsenv-chroot/default.nix
+++ /dev/null
@@ -1,87 +0,0 @@
-{
- lib,
- callPackage,
- runCommandLocal,
- writeScript,
- stdenv,
- coreutils,
-}:
-
-let
- buildFHSEnv = callPackage ./env.nix { };
-in
-
-args@{
- name,
- version ? null,
- runScript ? "bash",
- nativeBuildInputs ? [ ],
- extraInstallCommands ? "",
- meta ? { },
- passthru ? { },
- ...
-}:
-
-let
- env = buildFHSEnv (
- removeAttrs args [
- "version"
- "runScript"
- "extraInstallCommands"
- "meta"
- "passthru"
- ]
- );
-
- chrootenv = callPackage ./chrootenv { };
-
- init =
- run:
- writeScript "${name}-init" ''
- #! ${stdenv.shell}
- for i in ${env}/* /host/*; do
- path="/''${i##*/}"
- [ -e "$path" ] || ${coreutils}/bin/ln -s "$i" "$path"
- done
-
- [ -d "$1" ] && [ -r "$1" ] && cd "$1"
- shift
-
- source /etc/profile
- exec ${run} "$@"
- '';
-
- versionStr = lib.optionalString (version != null) ("-" + version);
-
- nameAndVersion = name + versionStr;
-
-in
-runCommandLocal nameAndVersion
- {
- inherit nativeBuildInputs meta;
-
- passthru = passthru // {
- env =
- runCommandLocal "${name}-shell-env"
- {
- shellHook = ''
- exec ${chrootenv}/bin/chrootenv ${init runScript} "$(pwd)"
- '';
- }
- ''
- echo >&2 ""
- echo >&2 "*** User chroot 'env' attributes are intended for interactive nix-shell sessions, not for building! ***"
- echo >&2 ""
- exit 1
- '';
- };
- }
- ''
- mkdir -p $out/bin
- cat <$out/bin/${name}
- #! ${stdenv.shell}
- exec ${chrootenv}/bin/chrootenv ${init runScript} "\$(pwd)" "\$@"
- EOF
- chmod +x $out/bin/${name}
- ${extraInstallCommands}
- ''
diff --git a/pkgs/build-support/build-fhsenv-chroot/env.nix b/pkgs/build-support/build-fhsenv-chroot/env.nix
deleted file mode 100644
index 1f774da847a7..000000000000
--- a/pkgs/build-support/build-fhsenv-chroot/env.nix
+++ /dev/null
@@ -1,290 +0,0 @@
-{
- stdenv,
- lib,
- buildEnv,
- writeText,
- pkgs,
- pkgsi686Linux,
-}:
-
-{
- name,
- profile ? "",
- targetPkgs ? pkgs: [ ],
- multiPkgs ? pkgs: [ ],
- nativeBuildInputs ? [ ],
- extraBuildCommands ? "",
- extraBuildCommandsMulti ? "",
- extraOutputsToInstall ? [ ],
-}:
-
-# HOWTO:
-# All packages (most likely programs) returned from targetPkgs will only be
-# installed once--matching the host's architecture (64bit on x86_64 and 32bit on
-# x86).
-#
-# Packages (most likely libraries) returned from multiPkgs are installed
-# once on x86 systems and twice on x86_64 systems.
-# On x86 they are merged with packages from targetPkgs.
-# On x86_64 they are added to targetPkgs and in addition their 32bit
-# versions are also installed. The final directory structure looks as
-# follows:
-# /lib32 will include 32bit libraries from multiPkgs
-# /lib64 will include 64bit libraries from multiPkgs and targetPkgs
-# /lib will link to /lib32
-
-let
- is64Bit = stdenv.hostPlatform.parsed.cpu.bits == 64;
- # multi-lib glibc is only supported on x86_64
- isMultiBuild = multiPkgs != null && stdenv.hostPlatform.system == "x86_64-linux";
- isTargetBuild = !isMultiBuild;
-
- # list of packages (usually programs) which are only be installed for the
- # host's architecture
- targetPaths = targetPkgs pkgs ++ (if multiPkgs == null then [ ] else multiPkgs pkgs);
-
- # list of packages which are installed for both x86 and x86_64 on x86_64
- # systems
- multiPaths = multiPkgs pkgsi686Linux;
-
- # base packages of the chroot
- # these match the host's architecture, glibc_multi is used for multilib
- # builds. glibcLocales must be before glibc or glibc_multi as otherwiese
- # the wrong LOCALE_ARCHIVE will be used where only C.UTF-8 is available.
- basePkgs = with pkgs; [
- glibcLocales
- (if isMultiBuild then glibc_multi else glibc)
- (toString gcc.cc.lib)
- bashInteractiveFHS
- coreutils
- less
- shadow
- su
- gawk
- diffutils
- findutils
- gnused
- gnugrep
- gnutar
- gzip
- bzip2
- xz
- ];
- baseMultiPkgs = with pkgsi686Linux; [
- (toString gcc.cc.lib)
- ];
-
- etcProfile = writeText "profile" ''
- export PS1='${name}-chrootenv:\u@\h:\w\$ '
- export LOCALE_ARCHIVE='/usr/lib/locale/locale-archive'
- export LD_LIBRARY_PATH="/run/opengl-driver/lib:/run/opengl-driver-32/lib:/usr/lib:/usr/lib32''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
- export PATH="/run/wrappers/bin:/usr/bin:/usr/sbin:$PATH"
- export TZDIR='/etc/zoneinfo'
-
- # XDG_DATA_DIRS is used by pressure-vessel (steam proton) and vulkan loaders to find the corresponding icd
- export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}/run/opengl-driver/share:/run/opengl-driver-32/share
-
- # Following XDG spec [1], XDG_DATA_DIRS should default to "/usr/local/share:/usr/share".
- # In nix, it is commonly set without containing these values, so we add them as fallback.
- #
- # [1]
- case ":$XDG_DATA_DIRS:" in
- *:/usr/local/share:*) ;;
- *) export XDG_DATA_DIRS="$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}/usr/local/share" ;;
- esac
- case ":$XDG_DATA_DIRS:" in
- *:/usr/share:*) ;;
- *) export XDG_DATA_DIRS="$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}/usr/share" ;;
- esac
-
- # Force compilers and other tools to look in default search paths
- unset NIX_ENFORCE_PURITY
- export NIX_BINTOOLS_WRAPPER_TARGET_HOST_${stdenv.cc.suffixSalt}=1
- export NIX_CC_WRAPPER_TARGET_HOST_${stdenv.cc.suffixSalt}=1
- export NIX_CFLAGS_COMPILE='-idirafter /usr/include'
- export NIX_CFLAGS_LINK='-L/usr/lib -L/usr/lib32'
- export NIX_LDFLAGS='-L/usr/lib -L/usr/lib32'
- export PKG_CONFIG_PATH=/usr/lib/pkgconfig
- export ACLOCAL_PATH=/usr/share/aclocal
-
- ${profile}
- '';
-
- # Compose /etc for the chroot environment
- etcPkg = stdenv.mkDerivation {
- name = "${name}-chrootenv-etc";
- buildCommand = ''
- mkdir -p $out/etc
- cd $out/etc
-
- # environment variables
- ln -s ${etcProfile} profile
-
- # compatibility with NixOS
- ln -s /host/etc/static static
-
- # symlink nix config
- ln -s /host/etc/nix nix
-
- # symlink some NSS stuff
- ln -s /host/etc/passwd passwd
- ln -s /host/etc/group group
- ln -s /host/etc/shadow shadow
- ln -s /host/etc/hosts hosts
- ln -s /host/etc/resolv.conf resolv.conf
- ln -s /host/etc/nsswitch.conf nsswitch.conf
-
- # symlink user profiles
- ln -s /host/etc/profiles profiles
-
- # symlink sudo and su stuff
- ln -s /host/etc/login.defs login.defs
- ln -s /host/etc/sudoers sudoers
- ln -s /host/etc/sudoers.d sudoers.d
-
- # symlink other core stuff
- ln -s /host/etc/localtime localtime
- ln -s /host/etc/zoneinfo zoneinfo
- ln -s /host/etc/machine-id machine-id
- ln -s /host/etc/os-release os-release
-
- # symlink PAM stuff
- ln -s /host/etc/pam.d pam.d
-
- # symlink fonts stuff
- ln -s /host/etc/fonts fonts
-
- # symlink ALSA stuff
- ln -s /host/etc/asound.conf asound.conf
- ln -s /host/etc/alsa alsa
-
- # symlink SSL certs
- mkdir -p ssl
- ln -s /host/etc/ssl/certs ssl/certs
-
- # symlink /etc/mtab -> /proc/mounts (compat for old userspace progs)
- ln -s /proc/mounts mtab
- '';
- };
-
- # Composes a /usr-like directory structure
- staticUsrProfileTarget = buildEnv {
- name = "${name}-usr-target";
- paths = [ etcPkg ] ++ basePkgs ++ targetPaths;
- extraOutputsToInstall = [
- "out"
- "lib"
- "bin"
- ]
- ++ extraOutputsToInstall;
- ignoreCollisions = true;
- postBuild = ''
- if [[ -d $out/share/gsettings-schemas/ ]]; then
- # Recreate the standard schemas directory if its a symlink to make it writable
- if [[ -L $out/share/glib-2.0 ]]; then
- target=$(readlink $out/share/glib-2.0)
- rm $out/share/glib-2.0
- mkdir $out/share/glib-2.0
- ln -fs $target/* $out/share/glib-2.0
- fi
-
- if [[ -L $out/share/glib-2.0/schemas ]]; then
- target=$(readlink $out/share/glib-2.0/schemas)
- rm $out/share/glib-2.0/schemas
- mkdir $out/share/glib-2.0/schemas
- ln -fs $target/* $out/share/glib-2.0/schemas
- fi
-
- mkdir -p $out/share/glib-2.0/schemas
-
- for d in $out/share/gsettings-schemas/*; do
- # Force symlink, in case there are duplicates
- ln -fs $d/glib-2.0/schemas/*.xml $out/share/glib-2.0/schemas
- ln -fs $d/glib-2.0/schemas/*.gschema.override $out/share/glib-2.0/schemas
- done
-
- # and compile them
- ${pkgs.glib.dev}/bin/glib-compile-schemas $out/share/glib-2.0/schemas
- fi
- '';
- };
-
- staticUsrProfileMulti = buildEnv {
- name = "${name}-usr-multi";
- paths = baseMultiPkgs ++ multiPaths;
- extraOutputsToInstall = [
- "out"
- "lib"
- ]
- ++ extraOutputsToInstall;
- ignoreCollisions = true;
- };
-
- # setup library paths only for the targeted architecture
- setupLibDirs_target = ''
- # link content of targetPaths
- cp -rsHf ${staticUsrProfileTarget}/lib lib
- ln -s lib lib${if is64Bit then "64" else "32"}
- '';
-
- # setup /lib, /lib32 and /lib64
- setupLibDirs_multi = ''
- mkdir -m0755 lib32
- mkdir -m0755 lib64
- ln -s lib64 lib
-
- # copy glibc stuff
- cp -rsHf ${staticUsrProfileTarget}/lib/32/* lib32/ && chmod u+w -R lib32/
-
- # copy content of multiPaths (32bit libs)
- [ -d ${staticUsrProfileMulti}/lib ] && cp -rsHf ${staticUsrProfileMulti}/lib/* lib32/ && chmod u+w -R lib32/
-
- # copy content of targetPaths (64bit libs)
- cp -rsHf ${staticUsrProfileTarget}/lib/* lib64/ && chmod u+w -R lib64/
-
- # symlink 32-bit ld-linux.so
- ln -Ls ${staticUsrProfileTarget}/lib/32/ld-linux.so.2 lib/
- '';
-
- setupLibDirs = if isTargetBuild then setupLibDirs_target else setupLibDirs_multi;
-
- # the target profile is the actual profile that will be used for the chroot
- setupTargetProfile = ''
- mkdir -m0755 usr
- cd usr
- ${setupLibDirs}
- for i in bin sbin share include; do
- if [ -d "${staticUsrProfileTarget}/$i" ]; then
- cp -rsHf "${staticUsrProfileTarget}/$i" "$i"
- fi
- done
- cd ..
-
- for i in var etc opt; do
- if [ -d "${staticUsrProfileTarget}/$i" ]; then
- cp -rsHf "${staticUsrProfileTarget}/$i" "$i"
- fi
- done
- for i in usr/{bin,sbin,lib,lib32,lib64}; do
- if [ -d "$i" ]; then
- ln -s "$i"
- fi
- done
- '';
-
-in
-stdenv.mkDerivation {
- name = "${name}-fhs";
- inherit nativeBuildInputs;
- buildCommand = ''
- mkdir -p $out
- cd $out
- ${setupTargetProfile}
- cd $out
- ${extraBuildCommands}
- cd $out
- ${lib.optionalString isMultiBuild extraBuildCommandsMulti}
- '';
- preferLocalBuild = true;
- allowSubstitutes = false;
-}
diff --git a/pkgs/build-support/build-mozilla-mach/153-cbindgen-0.29.4-compat.patch b/pkgs/build-support/build-mozilla-mach/153-cbindgen-0.29.4-compat.patch
new file mode 100644
index 000000000000..84238f025fc6
--- /dev/null
+++ b/pkgs/build-support/build-mozilla-mach/153-cbindgen-0.29.4-compat.patch
@@ -0,0 +1,36 @@
+commit c4aab1ba6aadd6985fcd271679d2118f094ec876
+Author: Emilio Cobos Álvarez
+Date: Tue Jun 9 22:04:44 2026 +0000
+
+ Bug 2046162 - Remove some redundant pub qualifiers. r=gfx-reviewers,aosmond
+
+ The enum is not public so this doesn't change behavior but a patch I'm
+ working on in cbindgen gets a bit confused with this.
+
+ Differential Revision: https://phabricator.services.mozilla.com/D305678
+
+diff --git a/gfx/wr/webrender/src/texture_cache.rs b/gfx/wr/webrender/src/texture_cache.rs
+index e14c26bd3190..77e1f3a312ac 100644
+--- a/gfx/wr/webrender/src/texture_cache.rs
++++ b/gfx/wr/webrender/src/texture_cache.rs
+@@ -273,9 +273,9 @@ enum BudgetType {
+ }
+
+ impl BudgetType {
+- pub const COUNT: usize = 7;
++ const COUNT: usize = 7;
+
+- pub const VALUES: [BudgetType; BudgetType::COUNT] = [
++ const VALUES: [BudgetType; BudgetType::COUNT] = [
+ BudgetType::SharedColor8Linear,
+ BudgetType::SharedColor8Nearest,
+ BudgetType::SharedColor8Glyphs,
+@@ -285,7 +285,7 @@ impl BudgetType {
+ BudgetType::Standalone,
+ ];
+
+- pub const PRESSURE_COUNTERS: [usize; BudgetType::COUNT] = [
++ const PRESSURE_COUNTERS: [usize; BudgetType::COUNT] = [
+ profiler::ATLAS_COLOR8_LINEAR_PRESSURE,
+ profiler::ATLAS_COLOR8_NEAREST_PRESSURE,
+ profiler::ATLAS_COLOR8_GLYPHS_PRESSURE,
diff --git a/pkgs/build-support/build-mozilla-mach/default.nix b/pkgs/build-support/build-mozilla-mach/default.nix
index 67312aa0e186..09eef8b2496f 100644
--- a/pkgs/build-support/build-mozilla-mach/default.nix
+++ b/pkgs/build-support/build-mozilla-mach/default.nix
@@ -58,6 +58,7 @@ in
pkg-config,
pkgsCross, # wasm32 rlbox
python3,
+ python313,
runCommand,
rustc,
rust-cbindgen,
@@ -144,7 +145,13 @@ in
),
overrideCC,
buildPackages,
- pgoSupport ? (stdenv.hostPlatform.isLinux && stdenv.hostPlatform == stdenv.buildPlatform),
+ # PGO merges profile data with a 32-bit llvm-profdata, which runs out of
+ # address space on the huge libxul profile, so disable it on 32-bit.
+ pgoSupport ? (
+ stdenv.hostPlatform.isLinux
+ && stdenv.hostPlatform == stdenv.buildPlatform
+ && stdenv.hostPlatform.is64bit
+ ),
xvfb-run,
elfhackSupport ?
isElfhackPlatform stdenv && !(stdenv.hostPlatform.isMusl && stdenv.hostPlatform.isAarch64),
@@ -303,6 +310,9 @@ buildStdenv.mkDerivation {
inherit src unpackPhase;
+ __structuredAttrs = true;
+ strictDeps = true;
+
meta =
meta
// lib.optionalAttrs stdenv.hostPlatform.isDarwin {
@@ -340,6 +350,11 @@ buildStdenv.mkDerivation {
# https://bugzilla.mozilla.org/show_bug.cgi?id=1985509
./140-bindgen-string-view.patch
]
+ ++ lib.optionals (lib.versionAtLeast version "140" && lib.versionOlder version "140.13") [
+ # https://github.com/mozilla/cbindgen/issues/1165
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=2046162
+ ./153-cbindgen-0.29.4-compat.patch
+ ]
++ extraPatches;
postPatch = ''
@@ -364,7 +379,7 @@ buildStdenv.mkDerivation {
makeBinaryWrapper
nodejs
perl
- python3
+ (if lib.versionAtLeast version "143.0" then python3 else python313)
rust-cbindgen
rustPlatform.bindgenHook
rustc
diff --git a/pkgs/build-support/build-nim-package.nix b/pkgs/build-support/build-nim-package.nix
index 1e8489212cd6..f953c108fd85 100644
--- a/pkgs/build-support/build-nim-package.nix
+++ b/pkgs/build-support/build-nim-package.nix
@@ -3,10 +3,8 @@
buildPackages,
callPackage,
stdenv,
- nim1,
- nim2,
+ nim,
nim_builder,
- defaultNimVersion ? 2,
nimOverrides,
buildNimPackage,
}:
@@ -15,7 +13,9 @@ let
baseAttrs = {
strictDeps = true;
enableParallelBuilding = true;
+ __structuredAttrs = true;
doCheck = true;
+
configurePhase = ''
runHook preConfigure
export NIX_NIM_BUILD_INPUTS=''${pkgsHostTarget[@]} $NIX_NIM_BUILD_INPUTS
@@ -37,7 +37,7 @@ let
nim_builder --phase:install
runHook postInstall
'';
- meta = { inherit (nim2.meta) maintainers platforms; };
+ meta = { inherit (nim.meta) maintainers platforms; };
};
fodFromLockEntry =
@@ -107,30 +107,34 @@ let
finalOverride =
{
- depsBuildBuild ? [ ],
- nativeBuildInputs ? [ ],
nimFlags ? [ ],
- requiredNimVersion ? defaultNimVersion,
passthru ? { },
+ nativeBuildInputs ? [ ],
+ depsBuildBuild ? [ ],
...
- }:
+ }@args:
(
- if requiredNimVersion == 1 then
- {
- depsBuildBuild = [ nim_builder ] ++ depsBuildBuild;
- nativeBuildInputs = [ nim1 ] ++ nativeBuildInputs;
- }
- else if requiredNimVersion == 2 then
- {
- depsBuildBuild = [ nim_builder ] ++ depsBuildBuild;
- nativeBuildInputs = [ nim2 ] ++ nativeBuildInputs;
- }
+ #TODO: Remove at 26.11
+ if args ? requiredNimVersion then
+ if args.requiredNimVersion == 2 then
+ lib.warn ''
+ `requiredNimVersion' is deprecated and will be removed in nixpkgs 26.11.
+ Please update your package to remove this.
+ ''
+ else
+ throw ''
+ `requiredNimVersion' ${toString args.requiredNimVersion} is not supported.
+ Ensure your package supports nim 2, and remove `requiredNimVersion'.
+ ''
else
- throw "requiredNimVersion ${toString requiredNimVersion} is not valid"
+ { }
)
// {
+ nativeBuildInputs = [ nim ] ++ nativeBuildInputs;
+ depsBuildBuild = [ nim_builder ] ++ depsBuildBuild;
nimFlags = lockFileNimFlags ++ nimFlags;
passthru = passthru // {
+
# allow overriding the result of buildNimPackageArgs before this composition is applied
# this allows overriding the lockFile for packages built using buildNimPackage
# this is adapted from mkDerivationExtensible in stdenv.mkDerivation
diff --git a/pkgs/build-support/build-typst-package.nix b/pkgs/build-support/build-typst-package.nix
index 13e1ddd2537c..ead6d68a1395 100644
--- a/pkgs/build-support/build-typst-package.nix
+++ b/pkgs/build-support/build-typst-package.nix
@@ -40,6 +40,9 @@ lib.extendMkDerivation {
{
name = "typst-package-${finalAttrs.pname}-${finalAttrs.version}";
+ strictDeps = true;
+ __structuredAttrs = true;
+
dontBuild = true;
installPhase =
diff --git a/pkgs/build-support/cc-wrapper/add-clang-cc-cflags-before.sh b/pkgs/build-support/cc-wrapper/add-clang-cc-cflags-before.sh
index 865e0d054820..d5515604c0bc 100644
--- a/pkgs/build-support/cc-wrapper/add-clang-cc-cflags-before.sh
+++ b/pkgs/build-support/cc-wrapper/add-clang-cc-cflags-before.sh
@@ -36,6 +36,6 @@ elif [[ $0 != *cpp ]]; then
fi
fi
-if [[ "@darwinMinVersion@" ]]; then
+if [[ "@darwinMinVersion@" ]] && [ "@isFlang@" != 1 ]; then
extraBefore+=(-Werror=unguarded-availability)
fi
diff --git a/pkgs/build-support/cc-wrapper/add-flags.sh b/pkgs/build-support/cc-wrapper/add-flags.sh
index a86f65d03f97..4b9f71af4eab 100644
--- a/pkgs/build-support/cc-wrapper/add-flags.sh
+++ b/pkgs/build-support/cc-wrapper/add-flags.sh
@@ -11,6 +11,8 @@ var_templates_list=(
NIX_CXXSTDLIB_COMPILE
NIX_CXXSTDLIB_LINK
NIX_GNATFLAGS_COMPILE
+ NIX_FFLAGS_COMPILE
+ NIX_FFLAGS_COMPILE_BEFORE
)
var_templates_bool=(
NIX_ENFORCE_NO_NATIVE
diff --git a/pkgs/build-support/cc-wrapper/cc-wrapper.sh b/pkgs/build-support/cc-wrapper/cc-wrapper.sh
index 246c1b1f65f6..2d36278b59fa 100644
--- a/pkgs/build-support/cc-wrapper/cc-wrapper.sh
+++ b/pkgs/build-support/cc-wrapper/cc-wrapper.sh
@@ -44,7 +44,7 @@ while (( "$n" < "$nParams" )); do
case "$p" in
-[cSEM] | -MM) dontLink=1 ;;
- -cc1) cc1=1 ;;
+ -cc1 | -fc1 ) cc1=1 ;;
-nostdinc) cInclude=0 cxxInclude=0 ;;
-nostdinc++) cxxInclude=0 ;;
-nostdlib) cxxLibrary=0 ;;
@@ -185,9 +185,19 @@ fi
source @out@/nix-support/add-hardening.sh
-# Add the flags for the C compiler proper.
-extraAfter=(${hardeningCFlagsAfter[@]+"${hardeningCFlagsAfter[@]}"} $NIX_CFLAGS_COMPILE_@suffixSalt@)
-extraBefore=(${hardeningCFlagsBefore[@]+"${hardeningCFlagsBefore[@]}"} $NIX_CFLAGS_COMPILE_BEFORE_@suffixSalt@)
+# Add the flags for the compiler proper. Flang reads its user-supplied
+# flags from the Fortran-specific NIX_FFLAGS_COMPILE channel so that
+# C-only flags injected by setup hooks (e.g. -frandom-seed= from
+# reproducible-builds.sh, which Flang does not accept) never reach the
+# Fortran driver. This mirrors the NIX_GNATFLAGS_COMPILE channel that
+# the Ada/GNAT wrapper uses for the same reason.
+if [ "@isFlang@" = 1 ]; then
+ extraAfter=(${hardeningCFlagsAfter[@]+"${hardeningCFlagsAfter[@]}"} $NIX_FFLAGS_COMPILE_@suffixSalt@)
+ extraBefore=(${hardeningCFlagsBefore[@]+"${hardeningCFlagsBefore[@]}"} $NIX_FFLAGS_COMPILE_BEFORE_@suffixSalt@)
+else
+ extraAfter=(${hardeningCFlagsAfter[@]+"${hardeningCFlagsAfter[@]}"} $NIX_CFLAGS_COMPILE_@suffixSalt@)
+ extraBefore=(${hardeningCFlagsBefore[@]+"${hardeningCFlagsBefore[@]}"} $NIX_CFLAGS_COMPILE_BEFORE_@suffixSalt@)
+fi
if [ "$dontLink" != 1 ]; then
linkType=$(checkLinkType $NIX_LDFLAGS_BEFORE_@suffixSalt@ "${params[@]}" ${NIX_CFLAGS_LINK_@suffixSalt@:-} $NIX_LDFLAGS_@suffixSalt@)
diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix
index fd857d0c152d..bf079f1b0e53 100644
--- a/pkgs/build-support/cc-wrapper/default.nix
+++ b/pkgs/build-support/cc-wrapper/default.nix
@@ -26,6 +26,8 @@
nixSupport ? { },
isGNU ? false,
isClang ? cc.isClang or false,
+ isFlang ? cc.isFlang or false,
+ isAlireGNAT ? false,
isZig ? cc.isZig or false,
isArocc ? cc.isArocc or false,
isCcache ? cc.isCcache or false,
@@ -314,6 +316,17 @@ let
tune =
if targetPlatform ? gcc.tune then findBestTuneApproximation targetPlatform.gcc.tune else null;
+ tlsDialect =
+ if
+ # Support status on non-Linux systems is a bit unclear.
+ targetPlatform.isLinux
+ # Support added in https://github.com/llvm/llvm-project/commit/36b4a9ccd9f7e04010476e6b2a311f2052a4ac20 (19.1.0)
+ && (isClang -> versionAtLeast ccVersion "19.1")
+ then
+ (if targetPlatform.isx86 then "gnu2" else null)
+ else
+ null;
+
# Machine flags. These are necessary to support
# TODO: We should make a way to support miscellaneous machine
@@ -351,7 +364,13 @@ let
# TODO: clang on powerpcspe also needs a condition: https://github.com/llvm/llvm-project/issues/71356
# https://releases.llvm.org/18.1.6/tools/clang/docs/ReleaseNotes.html#loongarch-support
((targetPlatform.isLoongArch64 && isClang) -> versionAtLeast ccVersion "18.1")
- ) "-mcmodel=${targetPlatform.gcc.cmodel}";
+ ) "-mcmodel=${targetPlatform.gcc.cmodel}"
+ # Enable TLSDESC. This needs to be supported by the libc and bintools.
+ # See: https://maskray.me/blog/2021-02-14-all-about-thread-local-storage
+ # Aarch64 uses TLSDESC by default and the option is completely ignored (at least on LLVM).
+ # TODO: Enable by default in GCC via --with-tls since https://gcc.gnu.org/cgit/gcc/commit/?id=96a291c4bb0b8a00b0a125e6a60f60072ffe53a7 (GCC 16).
+ # No equivalent build-time option for LLVM yet.
+ ++ optional (tlsDialect != null) "-mtls-dialect=${tlsDialect}";
defaultHardeningFlags = bintools.defaultHardeningFlags or [ ];
@@ -387,19 +406,13 @@ let
#
# TODO: Drop `mangle-NIX_STORE-in-__FILE__.patch` from GCC and make
# this unconditional once the upstream bug is fixed.
- useMacroPrefixMap = !isGNU;
+ useMacroPrefixMap = !isGNU && !isFlang;
+ systemIncludeFlag = if isFlang || isArocc then "-I" else "-idirafter";
+ fortifyIncludeFlag = if isFlang then "-I" else "-isystem";
in
assert includeFortifyHeaders' -> fortify-headers != null;
-# Ensure bintools matches
-assert libc_bin == bintools.libc_bin;
-assert libc_dev == bintools.libc_dev;
-assert libc_lib == bintools.libc_lib;
-assert nativeTools == bintools.nativeTools;
-assert nativeLibc == bintools.nativeLibc;
-assert nativePrefix == bintools.nativePrefix;
-
stdenvNoCC.mkDerivation {
pname = targetPrefix + (if name != "" then name else "${ccName}-wrapper");
version = optionalString (cc != null) ccVersion;
@@ -469,9 +482,21 @@ stdenvNoCC.mkDerivation {
# This is a quick fix unblock builds broken by https://github.com/NixOS/nixpkgs/pull/370750.
dontCheckForBrokenSymlinks = true;
- unpackPhase = ''
- src=$PWD
- '';
+ # Ensure bintools matches. This is done here rather than at top level
+ # so that evaluating the derivation's metadata (such as `name`)
+ # doesn't force the comparisons, which cause the outPaths of the
+ # compared derivations to be computed and thus .drv files to be
+ # written to the store.
+ unpackPhase =
+ assert libc_bin == bintools.libc_bin;
+ assert libc_dev == bintools.libc_dev;
+ assert libc_lib == bintools.libc_lib;
+ assert nativeTools == bintools.nativeTools;
+ assert nativeLibc == bintools.nativeLibc;
+ assert nativePrefix == bintools.nativePrefix;
+ ''
+ src=$PWD
+ '';
wrapper = ./cc-wrapper.sh;
@@ -574,10 +599,18 @@ stdenvNoCC.mkDerivation {
''
+ optionalString cc.langFortran or false ''
- wrap ${targetPrefix}gfortran $wrapper $ccPath/${targetPrefix}gfortran
- ln -sv ${targetPrefix}gfortran $out/bin/${targetPrefix}g77
- ln -sv ${targetPrefix}gfortran $out/bin/${targetPrefix}f77
- export named_fc=${targetPrefix}gfortran
+ if [ -e $ccPath/${targetPrefix}gfortran ]; then
+ wrap ${targetPrefix}gfortran $wrapper $ccPath/${targetPrefix}gfortran
+ ln -sv ${targetPrefix}gfortran $out/bin/${targetPrefix}g77
+ ln -sv ${targetPrefix}gfortran $out/bin/${targetPrefix}f77
+ export named_fc=${targetPrefix}gfortran
+ elif [ -e $ccPath/${targetPrefix}flang ]; then
+ wrap ${targetPrefix}flang $wrapper $ccPath/${targetPrefix}flang
+ export named_fc=${targetPrefix}flang
+ elif [ -e $ccPath/flang ]; then
+ wrap ${targetPrefix}flang $wrapper $ccPath/flang
+ export named_fc=${targetPrefix}flang
+ fi
''
+ optionalString cc.langGo or false ''
@@ -709,13 +742,11 @@ stdenvNoCC.mkDerivation {
touch "$out/nix-support/libc-cflags"
touch "$out/nix-support/libc-ldflags"
''
- + optionalString (!isArocc) ''
+ + optionalString (!isArocc && !(isAlireGNAT && targetPlatform.isDarwin)) ''
echo "-B${libc_lib}${libc.libdir or "/lib/"}" >> $out/nix-support/libc-crt1-cflags
''
+ ''
- include "-${
- if isArocc then "I" else "idirafter"
- }" "${libc_dev}${libc.incdir or "/include"}" >> $out/nix-support/libc-cflags
+ include "${systemIncludeFlag}" "${libc_dev}${libc.incdir or "/include"}" >> $out/nix-support/libc-cflags
''
+ optionalString isGNU ''
for dir in "${cc}"/lib/gcc/*/*/include-fixed; do
@@ -723,9 +754,9 @@ stdenvNoCC.mkDerivation {
done
''
+ optionalString (libc.w32api or null != null) ''
- echo '-idirafter ${lib.getDev libc.w32api}${
+ include "${systemIncludeFlag}" "${lib.getDev libc.w32api}${
libc.incdir or "/include/w32api"
- }' >> $out/nix-support/libc-cflags
+ }" >> $out/nix-support/libc-cflags
''
+ ''
@@ -740,7 +771,7 @@ stdenvNoCC.mkDerivation {
# like option that forces the libc headers before all -idirafter,
# hence -isystem here.
+ optionalString includeFortifyHeaders' ''
- include -isystem "${fortify-headers}/include" >> $out/nix-support/libc-cflags
+ include "${fortifyIncludeFlag}" "${fortify-headers}/include" >> $out/nix-support/libc-cflags
''
)
@@ -761,7 +792,7 @@ stdenvNoCC.mkDerivation {
# already knows how to find its own libstdc++, and adding
# additional -isystem flags will confuse gfortran (see
# https://github.com/NixOS/nixpkgs/pull/209870#issuecomment-1500550903)
- + optionalString (libcxx == null && isClang && (useGccForLibs && gccForLibs.langCC or false)) ''
+ + optionalString (libcxx == null && isClang && useGccForLibs && (cc.langCC or false)) ''
for dir in ${gccForLibs}/include/c++/*; do
include -cxx-isystem "$dir" >> $out/nix-support/libcxx-cxxflags
done
@@ -786,7 +817,9 @@ stdenvNoCC.mkDerivation {
# ${cc_solib}/lib64 (even though it does actually search there...)..
# This confuses libtool. So add it to the compiler tool search
# path explicitly.
- + optionalString (!nativeTools && !isArocc) ''
+ # Injecting CFlags and LDFlags causes duplicate rpath at linking
+ # stage for Alire GNAT. Skip adding flags here.
+ + optionalString (!nativeTools && !isArocc && !isAlireGNAT) ''
ccLDFlags=()
ccCFlags=()
if [ -e "${cc_solib}/lib64" -a ! -L "${cc_solib}/lib64" ]; then
@@ -801,7 +834,6 @@ stdenvNoCC.mkDerivation {
touch "$out/nix-support/gnat-cflags"
touch "$out/nix-support/gnat-ldflags"
basePath=$(echo $cc/lib/*/*/*)
- ccCFlags+=("-B$basePath" "-I$basePath/adainclude")
gnatCFlags="-I$basePath/adainclude -I$basePath/adalib"
echo "$gnatCFlags" >> $out/nix-support/gnat-cflags
@@ -828,6 +860,7 @@ stdenvNoCC.mkDerivation {
optionalString
(
(cc.isClang or false)
+ && !isFlang
&& !(cc.isROCm or false)
&& !targetPlatform.isDarwin
&& !targetPlatform.isAndroid
@@ -862,7 +895,8 @@ stdenvNoCC.mkDerivation {
let
enable_fp = !targetPlatform.isx86_32 && !targetPlatform.isS390;
enable_leaf_fp =
- enable_fp
+ !isFlang
+ && enable_fp
&& (
targetPlatform.isx86_64
|| targetPlatform.isAarch64
@@ -928,7 +962,7 @@ stdenvNoCC.mkDerivation {
# well with multi line flags, so make the flags single line again
+ ''
for flags in "$out/nix-support"/*flags*; do
- substituteInPlace "$flags" --replace $'\n' ' '
+ substituteInPlace "$flags" --replace-quiet $'\n' ' '
done
substituteAll ${./add-flags.sh} $out/nix-support/add-flags.sh
@@ -974,6 +1008,7 @@ stdenvNoCC.mkDerivation {
env = {
inherit isClang;
+ inherit isFlang;
# for substitution in utils.bash
# TODO(@sternenseemann): invent something cleaner than passing in "" in case of absence
diff --git a/pkgs/build-support/coq/default.nix b/pkgs/build-support/coq/default.nix
deleted file mode 100644
index c649a493c8ff..000000000000
--- a/pkgs/build-support/coq/default.nix
+++ /dev/null
@@ -1,258 +0,0 @@
-{
- lib,
- stdenv,
- coqPackages,
- coq,
- which,
- fetchzip,
- fetchurl,
- dune,
-}@args:
-
-let
- lib = import ./extra-lib.nix {
- inherit (args) lib;
- };
-
- inherit (lib)
- concatStringsSep
- flip
- foldl
- isFunction
- isString
- optional
- optionalAttrs
- optionals
- optionalString
- pred
- remove
- switch
- versions
- ;
-
- inherit (lib.attrsets) removeAttrs;
- inherit (lib.strings) match;
-
- isGitHubDomain = d: match "^github.*" d != null;
- isGitLabDomain = d: match "^gitlab.*" d != null;
-in
-
-{
- pname,
- version ? null,
- fetcher ? null,
- owner ? "coq-community",
- domain ? "github.com",
- repo ? pname,
- defaultVersion ? null,
- releaseRev ? (v: v),
- displayVersion ? { },
- release ? { },
- buildInputs ? [ ],
- nativeBuildInputs ? [ ],
- extraBuildInputs ? [ ],
- extraNativeBuildInputs ? [ ],
- overrideBuildInputs ? [ ],
- overrideNativeBuildInputs ? [ ],
- namePrefix ? [ "coq" ],
- enableParallelBuilding ? true,
- extraInstallFlags ? [ ],
- setCOQBIN ? true,
- mlPlugin ? false,
- useMelquiondRemake ? null,
- dropAttrs ? [ ],
- keepAttrs ? [ ],
- dropDerivationAttrs ? [ ],
- useDuneifVersion ? (x: false),
- useDune ? false,
- opam-name ? (concatStringsSep "-" (namePrefix ++ [ pname ])),
- ...
-}@args:
-let
- args-to-remove = foldl (flip remove) (
- [
- "version"
- "fetcher"
- "repo"
- "owner"
- "domain"
- "releaseRev"
- "displayVersion"
- "defaultVersion"
- "useMelquiondRemake"
- "release"
- "buildInputs"
- "nativeBuildInputs"
- "extraBuildInputs"
- "extraNativeBuildInputs"
- "overrideBuildInputs"
- "overrideNativeBuildInputs"
- "namePrefix"
- "meta"
- "useDuneifVersion"
- "useDune"
- "opam-name"
- "extraInstallFlags"
- "setCOQBIN"
- "mlPlugin"
- "dropAttrs"
- "dropDerivationAttrs"
- "keepAttrs"
- "enableParallelBuilding"
- ]
- ++ dropAttrs
- ) keepAttrs;
- fetch =
- import ../coq/meta-fetch/default.nix
- {
- inherit
- lib
- stdenv
- fetchzip
- fetchurl
- ;
- }
- (
- {
- inherit release releaseRev;
- location = { inherit domain owner repo; };
- }
- // optionalAttrs (args ? fetcher) { inherit fetcher; }
- );
- fetched = fetch (if version != null then version else defaultVersion);
- display-pkg =
- n: sep: v:
- let
- d = displayVersion.${n} or (if sep == "" then ".." else true);
- in
- n
- + optionalString (v != "" && v != null) (
- switch d [
- {
- case = true;
- out = sep + v;
- }
- {
- case = ".";
- out = sep + versions.major v;
- }
- {
- case = "..";
- out = sep + versions.majorMinor v;
- }
- {
- case = "...";
- out = sep + versions.majorMinorPatch v;
- }
- {
- case = isFunction;
- out = optionalString (d v != "") (sep + d v);
- }
- {
- case = isString;
- out = optionalString (d != "") (sep + d);
- }
- ] ""
- )
- + optionalString (v == null) "-broken";
- append-version = p: n: p + display-pkg n "" coqPackages.${n}.version + "-";
- prefix-name = foldl append-version "" namePrefix;
- useDune = args.useDune or (useDuneifVersion fetched.version);
- coqlib-flags =
- switch coq.coq-version
- [
- {
- case = v: versions.isLe "8.6" v && v != "dev";
- out = [ "COQLIB=$(out)/lib/coq/${coq.coq-version}/" ];
- }
- ]
- [
- "COQLIBINSTALL=$(out)/lib/coq/${coq.coq-version}/user-contrib"
- "COQPLUGININSTALL=$(OCAMLFIND_DESTDIR)"
- ];
- docdir-flags =
- switch coq.coq-version
- [
- {
- case = v: versions.isLe "8.6" v && v != "dev";
- out = [ "DOCDIR=$(out)/share/coq/${coq.coq-version}/" ];
- }
- ]
- [ "COQDOCINSTALL=$(out)/share/coq/${coq.coq-version}/user-contrib" ];
-in
-
-stdenv.mkDerivation (
- removeAttrs (
- {
-
- name = prefix-name + (display-pkg pname "-" fetched.version);
-
- inherit (fetched) version src;
-
- nativeBuildInputs =
- args.overrideNativeBuildInputs or (
- [ which ]
- ++ optional useDune dune
- ++ optionals (useDune || mlPlugin) [
- coq.ocamlPackages.ocaml
- coq.ocamlPackages.findlib
- ]
- ++ (args.nativeBuildInputs or [ ])
- ++ extraNativeBuildInputs
- );
- buildInputs =
- args.overrideBuildInputs or ([ coq ] ++ (args.buildInputs or [ ]) ++ extraBuildInputs);
- enableParallelBuilding =
- lib.warnIf (args ? enableParallelBuilding && args.enableParallelBuilding == true)
- "mkCoqDerivation: enableParallelBuilding is enabled by default; remove the explicit setting"
- enableParallelBuilding;
-
- meta =
- (
- {
- platforms = coq.meta.platforms;
- }
- // (switch domain [
- {
- case = pred.union isGitHubDomain isGitLabDomain;
- out = {
- homepage = "https://${domain}/${owner}/${repo}";
- };
- }
- ] { })
- // optionalAttrs (fetched.broken or false) {
- coqFilter = true;
- broken = true;
- }
- )
- // (args.meta or { });
-
- }
- // (optionalAttrs setCOQBIN { COQBIN = "${coq}/bin/"; })
- // (optionalAttrs (!args ? installPhase && !args ? useMelquiondRemake) {
- installFlags = coqlib-flags ++ docdir-flags ++ extraInstallFlags;
- })
- // (optionalAttrs useDune {
- buildPhase = ''
- runHook preBuild
- dune build -p ${opam-name} ''${enableParallelBuilding:+-j $NIX_BUILD_CORES}
- runHook postBuild
- '';
- installPhase = ''
- runHook preInstall
- dune install --prefix=$out --libdir $OCAMLFIND_DESTDIR ${opam-name}
- mkdir $out/lib/coq/
- mv $OCAMLFIND_DESTDIR/coq $out/lib/coq/${coq.coq-version}
- runHook postInstall
- '';
- })
- // (optionalAttrs (args ? useMelquiondRemake) rec {
- COQUSERCONTRIB = "$out/lib/coq/${coq.coq-version}/user-contrib";
- preConfigurePhases = [ "autoconf" ];
- configureFlags = [ "--libdir=${COQUSERCONTRIB}/${useMelquiondRemake.logpath or ""}" ];
- buildPhase = "./remake -j$NIX_BUILD_CORES";
- installPhase = "./remake install";
- })
- // (removeAttrs args args-to-remove)
- ) dropDerivationAttrs
-)
diff --git a/pkgs/build-support/dlang/builddubpackage/default.nix b/pkgs/build-support/dlang/builddubpackage/default.nix
index 8c9937ef50a9..9785e2f89c74 100644
--- a/pkgs/build-support/dlang/builddubpackage/default.nix
+++ b/pkgs/build-support/dlang/builddubpackage/default.nix
@@ -35,6 +35,7 @@ lib.extendMkDerivation {
};
strictDeps = args.strictDeps or true;
+ __structuredAttrs = args.__structuredAttrs or true;
nativeBuildInputs = args.nativeBuildInputs or [ ] ++ [
dubSetupHook
@@ -58,10 +59,12 @@ lib.extendMkDerivation {
preFixup = ''
${args.preFixup or ""}
- find "$out" -type f -exec remove-references-to -t ${compiler} '{}' +
+ find "$out" -type f -exec remove-references-to ${
+ lib.concatMapStringsSep " " (output: "-t ${output}") compiler.all
+ } '{}' +
'';
- disallowedReferences = args.disallowedReferences or [ compiler ];
+ disallowedReferences = args.disallowedReferences or compiler.all;
meta = {
platforms = dub.meta.platforms;
diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix
index d8e9812c7bec..6e61677350fe 100644
--- a/pkgs/build-support/docker/default.nix
+++ b/pkgs/build-support/docker/default.nix
@@ -7,6 +7,7 @@
coreutils,
devShellTools,
e2fsprogs,
+ pkgsBuildBuild,
proot,
fakeNss,
fakeroot,
@@ -1246,7 +1247,7 @@ rec {
# take images can know in advance how the image is supposed to be used.
isExe = true;
};
- nativeBuildInputs = [ makeWrapper ];
+ nativeBuildInputs = [ pkgsBuildBuild.makeWrapper ];
inherit meta;
}
''
diff --git a/pkgs/build-support/fetchcodeberg/default.nix b/pkgs/build-support/fetchcodeberg/default.nix
index 4277e5a5613c..aac1f97a7fdb 100644
--- a/pkgs/build-support/fetchcodeberg/default.nix
+++ b/pkgs/build-support/fetchcodeberg/default.nix
@@ -1,2 +1,11 @@
{ lib, fetchFromGitea }:
-lib.makeOverridable (args: fetchFromGitea ({ domain = "codeberg.org"; } // args))
+lib.makeOverridable (
+ args:
+ fetchFromGitea (
+ {
+ domain = "codeberg.org";
+ functionName = "fetchFromCodeberg";
+ }
+ // args
+ )
+)
diff --git a/pkgs/build-support/fetchgitea/default.nix b/pkgs/build-support/fetchgitea/default.nix
index a7910b671e9b..cfa7c592db1f 100644
--- a/pkgs/build-support/fetchgitea/default.nix
+++ b/pkgs/build-support/fetchgitea/default.nix
@@ -3,7 +3,20 @@
{ lib, fetchFromGitHub }:
lib.makeOverridable (
- { domain, ... }@args:
+ {
+ domain,
+ functionName ? "fetchFromGitea",
+ ...
+ }@args:
- fetchFromGitHub ((removeAttrs args [ "domain" ]) // { githubBase = domain; })
+ fetchFromGitHub (
+ (removeAttrs args [
+ "domain"
+ "functionName"
+ ])
+ // {
+ inherit functionName;
+ githubBase = domain;
+ }
+ )
)
diff --git a/pkgs/build-support/fetchgithub/default.nix b/pkgs/build-support/fetchgithub/default.nix
index f21256f5d57b..27a19b53b18d 100644
--- a/pkgs/build-support/fetchgithub/default.nix
+++ b/pkgs/build-support/fetchgithub/default.nix
@@ -48,6 +48,7 @@ decorate (
repo,
tag ? null,
rev ? null,
+ functionName ? "fetchFromGitHub",
# TODO(@ShamrockLee): Add back after reconstruction with lib.extendMkDerivation
# name ? repoRevToNameMaybe finalAttrs.repo (lib.revOrTag finalAttrs.revCustom finalAttrs.tag) "github",
private ? false,
@@ -60,7 +61,7 @@ decorate (
assert (
lib.xor (tag == null) (rev == null)
- || throw "fetchFromGitHub requires one of either `rev` or `tag` to be provided (not both)."
+ || throw "${functionName} requires one of either `rev` or `tag` to be provided (not both)."
);
let
@@ -115,6 +116,7 @@ decorate (
"repo"
"tag"
"rev"
+ "functionName"
"private"
"githubBase"
"varPrefix"
@@ -135,7 +137,7 @@ decorate (
in
''
if [ -z "''$${varBase}USERNAME" -o -z "''$${varBase}PASSWORD" ]; then
- echo "Error: Private fetchFromGitHub requires the nix building process (nix-daemon in multi user mode) to have the ${varBase}USERNAME and ${varBase}PASSWORD env vars set." >&2
+ echo "Error: Private ${functionName} requires the nix building process (nix-daemon in multi user mode) to have the ${varBase}USERNAME and ${varBase}PASSWORD env vars set." >&2
exit 1
fi
cat > netrc <&2
- exit 1
- fi
+ impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [
+ "GIT_PROXY_COMMAND"
+ "SOCKS_SERVER"
+ ];
- export HOME="$TMPDIR"
- export GIT_SSL_CAINFO="$NIX_SSL_CERT_FILE"
+ dontConfigure = true;
- mkdir -p "$TMPDIR/packages"
+ buildPhase = ''
+ runHook preBuild
- jq -c --argjson exclude ${lib.escapeShellArg (builtins.toJSON excludePackages)} \
- '.packages[] | select(.type == "git") | select(.name as $n | $exclude | index($n) | not)' \
- lake-manifest.json | while IFS= read -r pkg; do
- name=$(echo "$pkg" | jq -r '.name')
- url=$(echo "$pkg" | jq -r '.url')
- rev=$(echo "$pkg" | jq -r '.rev')
+ if [ ! -f lake-manifest.json ]; then
+ echo "fetchLakeDeps: lake-manifest.json not found" >&2
+ exit 1
+ fi
- echo "fetchLakeDeps: cloning $name ($url @ $rev)"
+ export HOME="$TMPDIR"
+ export GIT_SSL_CAINFO="$NIX_SSL_CERT_FILE"
- git clone --filter=blob:none --no-checkout "$url" "$TMPDIR/packages/$name"
- git -C "$TMPDIR/packages/$name" checkout "$rev" --quiet
+ mkdir -p "$TMPDIR/packages"
- # Remove .git to make output deterministic
- rm -rf "$TMPDIR/packages/$name/.git"
- done
+ jq -c --argjson exclude ${lib.escapeShellArg (builtins.toJSON excludePackages)} \
+ '.packages[] | select(.type == "git") | select(.name as $n | $exclude | index($n) | not)' \
+ lake-manifest.json | while IFS= read -r pkg; do
+ name=$(echo "$pkg" | jq -r '.name')
+ url=$(echo "$pkg" | jq -r '.url')
+ rev=$(echo "$pkg" | jq -r '.rev')
- runHook postBuild
- '';
+ echo "fetchLakeDeps: cloning $name ($url @ $rev)"
- installPhase = ''
- runHook preInstall
- mv "$TMPDIR/packages" "$out"
- runHook postInstall
- '';
+ git clone --filter=blob:none --no-checkout "$url" "$TMPDIR/packages/$name"
+ git -C "$TMPDIR/packages/$name" checkout "$rev" --quiet
- dontFixup = true;
+ # Remove .git to make output deterministic
+ rm -rf "$TMPDIR/packages/$name/.git"
+ done
- outputHashMode = "recursive";
- outputHash = hash;
- outputHashAlgo = if hash == "" then "sha256" else null;
+ runHook postBuild
+ '';
+
+ installPhase = ''
+ runHook preInstall
+ mv "$TMPDIR/packages" "$out"
+ runHook postInstall
+ '';
+
+ dontFixup = true;
+
+ outputHashMode = "recursive";
+ outputHash = hash;
+ outputHashAlgo = if hash == "" then "sha256" else null;
+ };
}
diff --git a/pkgs/build-support/make-startupitem/default.nix b/pkgs/build-support/make-startupitem/default.nix
index 03677355b8d6..b1294a43a0f8 100644
--- a/pkgs/build-support/make-startupitem/default.nix
+++ b/pkgs/build-support/make-startupitem/default.nix
@@ -32,7 +32,7 @@ stdenv.mkDerivation {
target=${name}.desktop
cp ${package}/share/applications/${srcPrefix}${name}.desktop $target
${lib.optionalString (prependExtraArgs != [ ] || appendExtraArgs != [ ]) ''
- sed -i -r "s/(Exec=)([^ \n]*) *(.*)/\1\2 ${prependArgs}\3${appendArgs}/" $target
+ sed -i -r "s/^(Exec=)([^ \n]*) *(.*)/\1\2 ${prependArgs}\3${appendArgs}/" $target
''}
chmod +rw $target
echo "X-KDE-autostart-phase=${phase}" >> $target
diff --git a/pkgs/build-support/node/fetch-pnpm-deps/default.nix b/pkgs/build-support/node/fetch-pnpm-deps/default.nix
index 4669d4909b7f..fc1bafcb1b0c 100644
--- a/pkgs/build-support/node/fetch-pnpm-deps/default.nix
+++ b/pkgs/build-support/node/fetch-pnpm-deps/default.nix
@@ -49,13 +49,9 @@ in
filterFlags = lib.map (package: "--filter=${package}") pnpmWorkspaces;
- pnpm-fixup-state-db' =
- if pnpm.nodejs-slim or null != null then
- pnpm-fixup-state-db.override {
- inherit (pnpm) nodejs-slim;
- }
- else
- pnpm-fixup-state-db;
+ pnpm-fixup-state-db' = pnpm-fixup-state-db.override {
+ inherit (pnpm) nodejs-slim;
+ };
in
assert
fetcherVersion != null
@@ -69,6 +65,10 @@ in
builtins.elem fetcherVersion supportedFetcherVersions
|| throw "fetchPnpmDeps `fetcherVersion` is not set to a supported value (${lib.concatStringsSep ", " (map toString supportedFetcherVersions)}), see https://nixos.org/manual/nixpkgs/stable/#javascript-pnpm-fetcherVersion.";
+ assert
+ !(fetcherVersion == 3 && lib.versionAtLeast pnpm.version "11.0.0")
+ || throw "fetchPnpmDeps `fetcherVersion = 3` is no longer supported for `pnpm_11`. Please upgrade to the latest, see https://nixos.org/manual/nixpkgs/stable/#javascript-pnpm-fetcherVersion.";
+
stdenvNoCC.mkDerivation (
finalAttrs:
(
@@ -171,6 +171,13 @@ in
if [[ ${toString fetcherVersion} -ge 4 ]]; then
sqlite3 "$storePath/v11/index.db" .dump > "$storePath/v11/index.db.sql"
rm "$storePath/v11/index.db"
+ ${lib.optionalString (lib.versionAtLeast sqlite.version "3.53.0") ''
+ # SQLite 3.53.0 refactored code around the dump generation, that changed
+ # BLOB data type representations from `X'...'` to `x'...'`, breaking existing hashes.
+ # This change was made in http://github.com/sqlite/sqlite/commit/d2424338b05f2766034f91c03009c8f0d78bc937
+ # and the following command reverts the dump to the old format:
+ sed -i "s/,x'/,X'/g" "$storePath/v11/index.db.sql"
+ ''}
fi
fi
@@ -209,10 +216,7 @@ in
passthru = args.passthru or { } // {
inherit fetcherVersion;
- serve = callPackage ./serve.nix {
- inherit pnpm; # from args
- pnpmDeps = finalAttrs.finalPackage;
- };
+ serve = throw "fetchPnpmDeps: `serve` has been deprecated as it was removed in pnpm 11 and only had a niche use case."; # Added 2026-06-04
};
dontConfigure = true;
diff --git a/pkgs/build-support/node/fetch-pnpm-deps/pnpm-config-hook.sh b/pkgs/build-support/node/fetch-pnpm-deps/pnpm-config-hook.sh
index 38f6eb97b56b..4a44775ab7b8 100644
--- a/pkgs/build-support/node/fetch-pnpm-deps/pnpm-config-hook.sh
+++ b/pkgs/build-support/node/fetch-pnpm-deps/pnpm-config-hook.sh
@@ -118,4 +118,6 @@ pnpmConfigHook() {
echo "Finished pnpmConfigHook"
}
-postConfigureHooks+=(pnpmConfigHook)
+if [ -z "${dontPnpmConfigure-}" ]; then
+ postConfigureHooks+=(pnpmConfigHook)
+fi
diff --git a/pkgs/build-support/node/fetch-pnpm-deps/serve.nix b/pkgs/build-support/node/fetch-pnpm-deps/serve.nix
deleted file mode 100644
index 2c3292180d8f..000000000000
--- a/pkgs/build-support/node/fetch-pnpm-deps/serve.nix
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- writeShellApplication,
- pnpm,
- pnpmDeps,
- zstd,
- lib,
-}:
-
-writeShellApplication {
- name = "serve-pnpm-store";
-
- runtimeInputs = [
- pnpm
- zstd
- ];
-
- text = ''
- storePath=$(mktemp -d)
-
- clean() {
- echo "Cleaning up temporary store at '$storePath'..."
-
- rm -rf "$storePath"
- }
-
- echo "Copying pnpm store '${pnpmDeps}' to temporary store..."
-
- tar --zstd -xf "${pnpmDeps}/pnpm-store.tar.zst" -C "$storePath"
-
- chmod -R +w "$storePath"
-
- echo "Run 'pnpm install --store-dir \"$storePath\"' to install packages from this store."
-
- trap clean EXIT
-
- pnpm server start \
- --store-dir "$storePath"
- '';
-
- meta = {
- broken = lib.versionAtLeast pnpm.version "11";
- };
-}
diff --git a/pkgs/build-support/node/prefetch-npm-deps/default.nix b/pkgs/build-support/node/prefetch-npm-deps/default.nix
index 12c56a58b6ec..eb73907343de 100644
--- a/pkgs/build-support/node/prefetch-npm-deps/default.nix
+++ b/pkgs/build-support/node/prefetch-npm-deps/default.nix
@@ -195,6 +195,28 @@
hash = "sha256-QGObVDd9qVtf/U78+ayP6RHVWsU+HXhg70BFblQ1PZs=";
};
+
+ # Test lockfiles with file: dependencies
+ fileDependenciesV1 = makeTest {
+ name = "file-dependencies-lockfile-v1";
+
+ src = fetchurl {
+ url = "https://raw.githubusercontent.com/elbywan/wretch/970b19e0fcc3dd219b9f3fc247d8f34cc01979c6/package-lock.json";
+ hash = "sha256-3vTMxc9M2TeiclUFYbG5eTzavSAXjAzz6N5v/1VM4Bc=";
+ };
+
+ hash = "sha256-4wTohTVWF49iQvdaUxNhwplfTVb53yFnAaUVA2xIXrc=";
+ };
+ fileDependenciesV3 = makeTest {
+ name = "file-dependencies-lockfile-v3";
+
+ src = fetchurl {
+ url = "https://raw.githubusercontent.com/alam00000/bentopdf/146e3f07d4111e309d0b29bb949e78e44454be3b/package-lock.json";
+ hash = "sha256-9Ea5ctJYbClxStYNhSfSpsO/P99/4CQK58PLK5e6PoQ=";
+ };
+
+ hash = "sha256-1xWkzAzZXd9f4sY9xFHLfj482ZCs2oKFJ79C+Iy7RFY=";
+ };
};
meta = {
diff --git a/pkgs/build-support/node/prefetch-npm-deps/src/main.rs b/pkgs/build-support/node/prefetch-npm-deps/src/main.rs
index 2882aee9ec20..b65db0492c3e 100644
--- a/pkgs/build-support/node/prefetch-npm-deps/src/main.rs
+++ b/pkgs/build-support/node/prefetch-npm-deps/src/main.rs
@@ -238,6 +238,7 @@ fn fixup_lockfile(
.values_mut()
{
if let Some(Value::String(resolved)) = package.get("resolved")
+ && !resolved.starts_with("file:")
&& let Some(Value::String(integrity)) = package.get("integrity")
{
if resolved.starts_with("git+") {
@@ -286,6 +287,7 @@ fn fixup_v1_deps(
.as_object()
.expect("v1 dep must be object")
.get("resolved")
+ && !resolved.starts_with("file:")
&& let Some(Value::String(integrity)) = dep
.as_object()
.expect("v1 dep must be object")
@@ -509,6 +511,10 @@ mod tests {
"resolved": "git+ssh://git@github.com/NixOS/nixpkgs.git",
"integrity": "sha512-aaa"
},
+ "baz": {
+ "resolved": "file:baz.tar.gz",
+ "integrity": "sha512-bbb"
+ },
"foo-bad": {
"resolved": "foo",
"integrity": "sha1-foo"
@@ -534,6 +540,10 @@ mod tests {
"bar": {
"resolved": "git+ssh://git@github.com/NixOS/nixpkgs.git",
},
+ "baz": {
+ "resolved": "file:baz.tar.gz",
+ "integrity": "sha512-bbb"
+ },
"foo-bad": {
"resolved": "foo",
"integrity": "sha512-foo"
diff --git a/pkgs/build-support/node/prefetch-npm-deps/src/parse/mod.rs b/pkgs/build-support/node/prefetch-npm-deps/src/parse/mod.rs
index 3e6f5019ea33..6f76dd7f59df 100644
--- a/pkgs/build-support/node/prefetch-npm-deps/src/parse/mod.rs
+++ b/pkgs/build-support/node/prefetch-npm-deps/src/parse/mod.rs
@@ -25,10 +25,10 @@ pub fn lockfile(
let mut packages = lock::packages(content)
.context("failed to extract packages from lockfile")?
.into_par_iter()
- .map(|p| {
+ .filter_map(|p| {
let n = p.name.clone().unwrap();
- Package::from_lock(p).with_context(|| format!("failed to parse data for {n}"))
+ Package::from_lock(p).with_context(|| format!("failed to parse data for {n}")).transpose()
})
.collect::>>()?;
@@ -124,7 +124,7 @@ enum Specifics {
}
impl Package {
- fn from_lock(pkg: lock::Package) -> anyhow::Result {
+ fn from_lock(pkg: lock::Package) -> anyhow::Result