Merge master into staging-next

This commit is contained in:
nixpkgs-ci[bot]
2025-08-20 17:47:05 +00:00
committed by GitHub
139 changed files with 3703 additions and 5530 deletions
+1 -2
View File
@@ -23,8 +23,7 @@ insert_final_newline = false
# see https://nixos.org/nixpkgs/manual/#chap-conventions
# Match json/lockfiles/markdown/nix/perl/python/ruby/shell/docbook files, set indent to spaces
[*.{bash,js,json,lock,md,nix,pl,pm,py,rb,sh,xml}]
[*.{bash,css,js,json,lock,md,nix,pl,pm,py,rb,sh,xml}]
indent_style = space
# Match docbook files, set indent width of one
+51
View File
@@ -0,0 +1,51 @@
name: Checkout
description: 'Checkout into trusted / untrusted / pinned folders consistently.'
inputs:
merged-as-untrusted-at:
description: "Whether and which SHA to checkout for the merge commit in the ./untrusted folder."
pinned-from:
description: "Whether to checkout the pinned nixpkgs for CI and from where (trusted, untrusted)."
target-as-trusted-at:
description: "Whether and which SHA to checkout for the target commit in the ./trusted folder."
runs:
using: composite
steps:
- if: inputs.merged-as-untrusted-at
# Would be great to do the checkouts in git worktrees of the existing spare checkout instead,
# but Nix is broken with them:
# https://github.com/NixOS/nix/issues/6073
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
ref: ${{ inputs.merged-as-untrusted-at }}
path: untrusted
- if: inputs.target-as-trusted-at
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
ref: ${{ inputs.target-as-trusted-at }}
path: trusted
- if: inputs.pinned-from
id: pinned
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
env:
PINNED_FROM: ${{ inputs.pinned-from }}
with:
script: |
const path = require('node:path')
const pinned = require(path.resolve(path.join(process.env.PINNED_FROM, 'ci', 'pinned.json')))
core.setOutput('pinned-at', pinned.pins.nixpkgs.revision)
- if: steps.pinned.outputs.pinned-at
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
ref: ${{ steps.pinned.outputs.pinned-at }}
path: pinned
sparse-checkout: |
lib
maintainers
nixos/lib
pkgs
-121
View File
@@ -1,121 +0,0 @@
name: Get merge commit
description: 'Checks whether the Pull Request is mergeable and checks out the repo at up to two commits: The result of a temporary merge of the head branch into the target branch ("merged"), and the parent of that commit on the target branch ("target"). Handles push events and merge conflicts gracefully.'
inputs:
mergedSha:
description: "The merge commit SHA, previously collected."
type: string
merged-as-untrusted:
description: "Whether to checkout the merge commit in the ./untrusted folder."
type: boolean
pinnedFrom:
description: "Whether to checkout the pinned nixpkgs for CI and from where (trusted, untrusted)."
type: string
targetSha:
description: "The target commit SHA, previously collected."
type: string
target-as-trusted:
description: "Whether to checkout the target commit in the ./trusted folder."
type: boolean
outputs:
mergedSha:
description: "The merge commit SHA"
value: ${{ steps.commits.outputs.mergedSha }}
targetSha:
description: "The target commit SHA"
value: ${{ steps.commits.outputs.targetSha }}
runs:
using: composite
steps:
- id: commits
if: ${{ !inputs.mergedSha && !inputs.targetSha }}
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
if (context.eventName == 'push') return core.setOutput('mergedSha', context.sha)
for (const retryInterval of [5, 10, 20, 40, 80]) {
console.log("Checking whether the pull request can be merged...")
const prInfo = (await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number
})).data
if (prInfo.state != 'open') throw new Error ("PR is not open anymore.")
if (prInfo.mergeable == null) {
console.log(`GitHub is still computing whether this PR can be merged, waiting ${retryInterval} seconds before trying again...`)
await new Promise(resolve => setTimeout(resolve, retryInterval * 1000))
continue
}
let mergedSha, targetSha
if (prInfo.mergeable) {
console.log("The PR can be merged.")
mergedSha = prInfo.merge_commit_sha
targetSha = (await github.rest.repos.getCommit({
owner: context.repo.owner,
repo: context.repo.repo,
ref: prInfo.merge_commit_sha
})).data.parents[0].sha
} else {
console.log("The PR has a merge conflict.")
mergedSha = prInfo.head.sha
targetSha = (await github.rest.repos.compareCommitsWithBasehead({
owner: context.repo.owner,
repo: context.repo.repo,
basehead: `${prInfo.base.sha}...${prInfo.head.sha}`
})).data.merge_base_commit.sha
}
console.log(`Checking the commits:\nmerged:${mergedSha}\ntarget:${targetSha}`)
core.setOutput('mergedSha', mergedSha)
core.setOutput('targetSha', targetSha)
return
}
throw new Error("Not retrying anymore. It's likely that GitHub is having internal issues: check https://www.githubstatus.com.")
- if: inputs.merged-as-untrusted && (inputs.mergedSha || steps.commits.outputs.mergedSha)
# Would be great to do the checkouts in git worktrees of the existing spare checkout instead,
# but Nix is broken with them:
# https://github.com/NixOS/nix/issues/6073
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
ref: ${{ inputs.mergedSha || steps.commits.outputs.mergedSha }}
path: untrusted
- if: inputs.target-as-trusted && (inputs.targetSha || steps.commits.outputs.targetSha)
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
ref: ${{ inputs.targetSha || steps.commits.outputs.targetSha }}
path: trusted
- if: inputs.pinnedFrom
id: pinned
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
env:
PINNED_FROM: ${{ inputs.pinnedFrom }}
with:
script: |
const path = require('node:path')
const pinned = require(path.resolve(path.join(process.env.PINNED_FROM, 'ci', 'pinned.json')))
core.setOutput('pinnedSha', pinned.pins.nixpkgs.revision)
- if: steps.pinned.outputs.pinnedSha
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
ref: ${{ steps.pinned.outputs.pinnedSha }}
path: pinned
sparse-checkout: |
lib
maintainers
nixos/lib
pkgs
+1 -1
View File
@@ -17,7 +17,7 @@ Some architectural notes about key decisions and concepts in our workflows:
This is a temporary commit that GitHub creates automatically as "what would happen, if this PR was merged into the base branch now?".
The checkout could be done via the virtual branch `refs/pull/<pr-number>/merge`, but doing so would cause failures when this virtual branch doesn't exist (anymore).
This can happen when the PR has conflicts, in which case the virtual branch is not created, or when the PR is getting merged while workflows are still running, in which case the branch won't exist anymore at the time of checkout.
Thus, we use the `get-merge-commit.yml` workflow to check whether the PR is mergeable and the test merge commit exists and only then run the relevant jobs.
Thus, we use the `prepare` job to check whether the PR is mergeable and the test merge commit exists and only then run the relevant jobs.
- Various workflows need to make comparisons against the base branch.
In this case, we checkout the parent of the "test merge commit" for best results.
+9 -8
View File
@@ -47,12 +47,11 @@ jobs:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
sparse-checkout: .github/actions
- name: Check if the PR can be merged and checkout the merge commit
uses: ./.github/actions/get-merge-commit
- name: Checkout the merge commit
uses: ./.github/actions/checkout
with:
mergedSha: ${{ inputs.mergedSha }}
merged-as-untrusted: true
pinnedFrom: untrusted
merged-as-untrusted-at: ${{ inputs.mergedSha }}
pinned-from: untrusted
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
with:
@@ -61,9 +60,11 @@ jobs:
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
with:
# This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
name: nixpkgs-ci
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
extraPullNames: nixpkgs-ci
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
pushFilter: '(-source$|-nixpkgs-tarball-)'
- run: nix-env --install -f pinned -A nix-build-uncached
+80
View File
@@ -9,6 +9,17 @@ on:
headBranch:
required: true
type: string
mergedSha:
required: true
type: string
targetSha:
required: true
type: string
secrets:
CACHIX_AUTH_TOKEN:
required: true
OWNER_RO_APP_PRIVATE_KEY:
required: true
permissions: {}
@@ -70,3 +81,72 @@ jobs:
env:
GH_TOKEN: ${{ github.token }}
run: gh api /rate_limit | jq
# For checking code owners, this job depends on a GitHub App with the following permissions:
# - Permissions:
# - Repository > Administration: read-only
# - Organization > Members: read-only
# - Install App on this repository, setting these variables:
# - OWNER_RO_APP_ID (variable)
# - OWNER_RO_APP_PRIVATE_KEY (secret)
#
# This should not use the same app as the job to request reviewers, because this job requires
# handling untrusted PR input.
owners:
runs-on: ubuntu-24.04-arm
timeout-minutes: 5
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
sparse-checkout: .github/actions
- name: Checkout merge and target commits
uses: ./.github/actions/checkout
with:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
pinned-from: trusted
target-as-trusted-at: ${{ inputs.targetSha }}
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
with:
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
extraPullNames: nixpkgs-ci
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
pushFilter: -source$
- name: Build codeowners validator
run: nix-build trusted/ci --arg nixpkgs ./pinned -A codeownersValidator
- uses: actions/create-github-app-token@0f859bf9e69e887678d5bbfbee594437cb440ffe # v2.1.0
if: github.event_name == 'pull_request_target' && vars.OWNER_RO_APP_ID
id: app-token
with:
app-id: ${{ vars.OWNER_RO_APP_ID }}
private-key: ${{ secrets.OWNER_RO_APP_PRIVATE_KEY }}
permission-administration: read
permission-members: read
- name: Log current API rate limits
if: steps.app-token.outputs.token
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: gh api /rate_limit | jq
- name: Validate codeowners
if: steps.app-token.outputs.token
env:
OWNERS_FILE: untrusted/ci/OWNERS
GITHUB_ACCESS_TOKEN: ${{ steps.app-token.outputs.token }}
REPOSITORY_PATH: untrusted
OWNER_CHECKER_REPOSITORY: ${{ github.repository }}
# Set this to "notowned,avoid-shadowing" to check that all files are owned by somebody
EXPERIMENTAL_CHECKS: "avoid-shadowing"
run: result/bin/codeowners-validator
- name: Log current API rate limits
if: steps.app-token.outputs.token
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: gh api /rate_limit | jq
-149
View File
@@ -1,149 +0,0 @@
# This workflow depends on two GitHub Apps with the following permissions:
# - For checking code owners:
# - Permissions:
# - Repository > Administration: read-only
# - Organization > Members: read-only
# - Install App on this repository, setting these variables:
# - OWNER_RO_APP_ID (variable)
# - OWNER_RO_APP_PRIVATE_KEY (secret)
# - For requesting code owners:
# - Permissions:
# - Repository > Administration: read-only
# - Organization > Members: read-only
# - Repository > Pull Requests: read-write
# - Install App on this repository, setting these variables:
# - OWNER_APP_ID (variable)
# - OWNER_APP_PRIVATE_KEY (secret)
#
# This split is done because checking code owners requires handling untrusted PR input,
# while requesting code owners requires PR write access, and those shouldn't be mixed.
#
# Note that the latter is also used for ./eval.yml requesting reviewers.
name: Codeowners v2
on:
pull_request:
paths:
- .github/workflows/codeowners-v2.yml
pull_request_target:
types: [opened, ready_for_review, synchronize, reopened]
concurrency:
group: codeowners-${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true
permissions: {}
defaults:
run:
shell: bash
env:
OWNERS_FILE: ci/OWNERS
# Don't do anything on draft PRs
DRY_MODE: ${{ github.event.pull_request.draft && '1' || '' }}
jobs:
# Check that code owners is valid
check:
name: Check
runs-on: ubuntu-24.04-arm
timeout-minutes: 5
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
sparse-checkout: .github/actions
- name: Check if the PR can be merged and checkout the merge and target commits
uses: ./.github/actions/get-merge-commit
with:
merged-as-untrusted: true
target-as-trusted: true
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
with:
# This cache is for the nixpkgs repo checks and should not be trusted or used elsewhere.
name: nixpkgs-ci
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
- name: Build codeowners validator
run: nix-build trusted/ci -A codeownersValidator
- uses: actions/create-github-app-token@0f859bf9e69e887678d5bbfbee594437cb440ffe # v2.1.0
if: github.event_name == 'pull_request_target' && vars.OWNER_RO_APP_ID
id: app-token
with:
app-id: ${{ vars.OWNER_RO_APP_ID }}
private-key: ${{ secrets.OWNER_RO_APP_PRIVATE_KEY }}
permission-administration: read
permission-members: read
- name: Log current API rate limits
if: steps.app-token.outputs.token
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: gh api /rate_limit | jq
- name: Validate codeowners
if: steps.app-token.outputs.token
env:
OWNERS_FILE: untrusted/${{ env.OWNERS_FILE }}
GITHUB_ACCESS_TOKEN: ${{ steps.app-token.outputs.token }}
REPOSITORY_PATH: untrusted
OWNER_CHECKER_REPOSITORY: ${{ github.repository }}
# Set this to "notowned,avoid-shadowing" to check that all files are owned by somebody
EXPERIMENTAL_CHECKS: "avoid-shadowing"
run: result/bin/codeowners-validator
- name: Log current API rate limits
if: steps.app-token.outputs.token
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: gh api /rate_limit | jq
# Request reviews from code owners
request:
name: Request
runs-on: ubuntu-24.04-arm
timeout-minutes: 5
steps:
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
# Important: Because we use pull_request_target, this checks out the base branch of the PR, not the PR head.
# This is intentional, because we need to request the review of owners as declared in the base branch.
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
path: trusted
- name: Build review request package
run: nix-build trusted/ci -A requestReviews
- uses: actions/create-github-app-token@0f859bf9e69e887678d5bbfbee594437cb440ffe # v2.1.0
if: github.event_name == 'pull_request_target' && vars.OWNER_APP_ID
id: app-token
with:
app-id: ${{ vars.OWNER_APP_ID }}
private-key: ${{ secrets.OWNER_APP_PRIVATE_KEY }}
permission-administration: read
permission-members: read
permission-pull-requests: write
- name: Log current API rate limits
if: steps.app-token.outputs.token
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: gh api /rate_limit | jq
- name: Request reviews
if: steps.app-token.outputs.token
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: result/bin/request-code-owner-reviews.sh ${{ github.repository }} ${{ github.event.number }} "$OWNERS_FILE"
- name: Log current API rate limits
if: steps.app-token.outputs.token
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: gh api /rate_limit | jq
+19 -11
View File
@@ -16,6 +16,8 @@ on:
default: false
type: boolean
secrets:
CACHIX_AUTH_TOKEN:
required: true
OWNER_APP_PRIVATE_KEY:
required: false
@@ -88,15 +90,22 @@ jobs:
with:
sparse-checkout: .github/actions
- name: Check out the PR at the test merge commit
uses: ./.github/actions/get-merge-commit
uses: ./.github/actions/checkout
with:
mergedSha: ${{ inputs.mergedSha }}
merged-as-untrusted: true
pinnedFrom: untrusted
merged-as-untrusted-at: ${{ inputs.mergedSha }}
pinned-from: untrusted
- name: Install Nix
uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
with:
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
extraPullNames: nixpkgs-ci
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
pushFilter: '(-source|-single-chunk)$'
- name: Evaluate the ${{ matrix.system }} output paths for all derivation attributes
env:
MATRIX_SYSTEM: ${{ matrix.system }}
@@ -206,11 +215,10 @@ jobs:
with:
sparse-checkout: .github/actions
- name: Check out the PR at the target commit
uses: ./.github/actions/get-merge-commit
uses: ./.github/actions/checkout
with:
targetSha: ${{ inputs.targetSha }}
target-as-trusted: true
pinnedFrom: trusted
target-as-trusted-at: ${{ inputs.targetSha }}
pinned-from: trusted
- name: Download output paths and eval stats for all systems
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
@@ -375,10 +383,10 @@ jobs:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
sparse-checkout: .github/actions
- name: Check if the PR can be merged and checkout the merge commit
uses: ./.github/actions/get-merge-commit
- name: Checkout the merge commit
uses: ./.github/actions/checkout
with:
merged-as-untrusted: true
merged-as-untrusted-at: ${{ inputs.mergedSha }}
- name: Install Nix
uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
+36 -17
View File
@@ -9,6 +9,9 @@ on:
targetSha:
required: true
type: string
secrets:
CACHIX_AUTH_TOKEN:
required: true
permissions: {}
@@ -24,15 +27,18 @@ jobs:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
sparse-checkout: .github/actions
- name: Check if the PR can be merged and checkout the merge commit
uses: ./.github/actions/get-merge-commit
- name: Checkout the merge commit
uses: ./.github/actions/checkout
with:
mergedSha: ${{ inputs.mergedSha }}
merged-as-untrusted: true
pinnedFrom: untrusted
merged-as-untrusted-at: ${{ inputs.mergedSha }}
pinned-from: untrusted
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
# TODO: Figure out how to best enable caching for the treefmt job. Cachix won't work well,
# because the cache would be invalidated on every commit - treefmt checks every file.
# Maybe we can cache treefmt's eval-cache somehow.
- name: Check that files are formatted
run: |
# Note that it's fine to run this on untrusted code because:
@@ -56,15 +62,22 @@ jobs:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
sparse-checkout: .github/actions
- name: Check if the PR can be merged and checkout the merge commit
uses: ./.github/actions/get-merge-commit
- name: Checkout the merge commit
uses: ./.github/actions/checkout
with:
mergedSha: ${{ inputs.mergedSha }}
merged-as-untrusted: true
pinnedFrom: untrusted
merged-as-untrusted-at: ${{ inputs.mergedSha }}
pinned-from: untrusted
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
with:
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
extraPullNames: nixpkgs-ci
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
pushFilter: -source$
- name: Parse all nix files
run: |
# Tests multiple versions at once, let's make sure all of them run, so keep-going.
@@ -77,17 +90,23 @@ jobs:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
sparse-checkout: .github/actions
- name: Check if the PR can be merged and checkout merged and target commits
uses: ./.github/actions/get-merge-commit
- name: Checkout merge and target commits
uses: ./.github/actions/checkout
with:
mergedSha: ${{ inputs.mergedSha }}
merged-as-untrusted: true
pinnedFrom: untrusted
targetSha: ${{ inputs.targetSha }}
target-as-trusted: true
merged-as-untrusted-at: ${{ inputs.mergedSha }}
pinned-from: untrusted
target-as-trusted-at: ${{ inputs.targetSha }}
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
with:
# The nixpkgs-ci cache should not be trusted or used outside of Nixpkgs and its forks' CI.
name: ${{ vars.CACHIX_NAME || 'nixpkgs-ci' }}
extraPullNames: nixpkgs-ci
authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
pushFilter: -source$
- name: Running nixpkgs-vet
env:
# Force terminal colors to be enabled. The library that `nixpkgs-vet` uses respects https://bixense.com/clicolors/
+2
View File
@@ -9,6 +9,8 @@ jobs:
lint:
name: Lint
uses: ./.github/workflows/lint.yml
secrets:
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
with:
mergedSha: ${{ github.event.merge_group.head_sha }}
targetSha: ${{ github.event.merge_group.base_sha }}
+23 -49
View File
@@ -3,7 +3,7 @@ name: PR
on:
pull_request:
paths:
- .github/actions/get-merge-commit/action.yml
- .github/actions/checkout/action.yml
- .github/workflows/build.yml
- .github/workflows/check.yml
- .github/workflows/eval.yml
@@ -23,61 +23,27 @@ jobs:
prepare:
runs-on: ubuntu-24.04-arm
outputs:
baseBranch: ${{ steps.branches.outputs.base }}
headBranch: ${{ steps.branches.outputs.head }}
mergedSha: ${{ steps.get-merge-commit.outputs.mergedSha }}
targetSha: ${{ steps.get-merge-commit.outputs.targetSha }}
systems: ${{ steps.systems.outputs.systems }}
touched: ${{ steps.files.outputs.touched }}
baseBranch: ${{ steps.prepare.outputs.base }}
headBranch: ${{ steps.prepare.outputs.head }}
mergedSha: ${{ steps.prepare.outputs.mergedSha }}
targetSha: ${{ steps.prepare.outputs.targetSha }}
systems: ${{ steps.prepare.outputs.systems }}
touched: ${{ steps.prepare.outputs.touched }}
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
sparse-checkout-cone-mode: true # default, for clarity
sparse-checkout: |
.github/actions
ci/supportedBranches.js
ci/supportedSystems.json
- name: Check if the PR can be merged and get the test merge commit
uses: ./.github/actions/get-merge-commit
id: get-merge-commit
- name: Load supported systems
id: systems
run: |
echo "systems=$(jq -c <ci/supportedSystems.json)" >> "$GITHUB_OUTPUT"
- name: Determine branch type
id: branches
ci/github-script
- id: prepare
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const { classify } = require('./ci/supportedBranches.js')
const { base, head } = context.payload.pull_request
const baseClassification = classify(base.ref)
core.setOutput('base', baseClassification)
core.info('base classification:', baseClassification)
const headClassification =
(base.repo.full_name == head.repo.full_name) ?
classify(head.ref) :
// PRs from forks are always considered WIP.
{ type: ['wip'] }
core.setOutput('head', headClassification)
core.info('head classification:', headClassification)
- name: Determine changed files
id: files
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const files = (await github.paginate(github.rest.pulls.listFiles, {
...context.repo,
pull_number: context.payload.pull_request.number,
per_page: 100,
})).map(file => file.filename)
if (files.includes('ci/pinned.json')) core.setOutput('touched', ['pinned'])
else core.setOutput('touched', [])
require('./ci/github-script/prepare.js')({
github,
context,
core,
})
check:
name: Check
@@ -86,14 +52,21 @@ jobs:
permissions:
# cherry-picks
pull-requests: write
secrets:
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
OWNER_RO_APP_PRIVATE_KEY: ${{ secrets.OWNER_RO_APP_PRIVATE_KEY }}
with:
baseBranch: ${{ needs.prepare.outputs.baseBranch }}
headBranch: ${{ needs.prepare.outputs.headBranch }}
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
targetSha: ${{ needs.prepare.outputs.targetSha }}
lint:
name: Lint
needs: [prepare]
uses: ./.github/workflows/lint.yml
secrets:
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
with:
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
targetSha: ${{ needs.prepare.outputs.targetSha }}
@@ -106,6 +79,7 @@ jobs:
# compare
statuses: write
secrets:
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
OWNER_APP_PRIVATE_KEY: ${{ secrets.OWNER_APP_PRIVATE_KEY }}
with:
mergedSha: ${{ needs.prepare.outputs.mergedSha }}
+2
View File
@@ -43,6 +43,8 @@ jobs:
issues: write
pull-requests: write
statuses: write
secrets:
CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
with:
mergedSha: ${{ github.sha }}
systems: ${{ needs.prepare.outputs.systems }}
+32 -5
View File
@@ -4,9 +4,6 @@
name: Reviewers
on:
pull_request:
paths:
- .github/workflows/reviewers.yml
pull_request_target:
types: [ready_for_review]
workflow_call:
@@ -41,8 +38,16 @@ jobs:
- name: Build the requestReviews derivation
run: nix-build trusted/ci -A requestReviews
# See ./codeowners-v2.yml, reuse the same App because we need the same permissions
# Can't use the token received from permissions above, because it can't get enough permissions
# For requesting reviewers, this job depends on a GitHub App with the following permissions:
# - Permissions:
# - Repository > Administration: read-only
# - Organization > Members: read-only
# - Repository > Pull Requests: read-write
# - Install App on this repository, setting these variables:
# - OWNER_APP_ID (variable)
# - OWNER_APP_PRIVATE_KEY (secret)
#
# Can't use the token received from permissions above, because it can't get enough permissions.
- uses: actions/create-github-app-token@0f859bf9e69e887678d5bbfbee594437cb440ffe # v2.1.0
if: github.event_name == 'pull_request_target' && vars.OWNER_APP_ID
id: app-token
@@ -53,6 +58,28 @@ jobs:
permission-members: read
permission-pull-requests: write
- name: Log current API rate limits (app-token)
if: ${{ steps.app-token.outputs.token }}
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: gh api /rate_limit | jq
- name: Requesting code owner reviews
if: steps.app-token.outputs.token
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
REPOSITORY: ${{ github.repository }}
NUMBER: ${{ github.event.number }}
# Don't do anything on draft PRs
DRY_MODE: ${{ github.event.pull_request.draft && '1' || '' }}
run: result/bin/request-code-owner-reviews.sh "$REPOSITORY" "$NUMBER" ci/OWNERS
- name: Log current API rate limits (app-token)
if: ${{ steps.app-token.outputs.token }}
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: gh api /rate_limit | jq
- name: Log current API rate limits (github.token)
env:
GH_TOKEN: ${{ github.token }}
+1 -1
View File
@@ -499,4 +499,4 @@ pkgs/by-name/oc/octodns/ @anthonyroussel
pkgs/by-name/te/teleport* @arianvp @justinas @sigma @tomberek @freezeboy @techknowlogick @JuliusFreudenberger
# Warp-terminal
pkgs/by-name/wa/warp-terminal/ @emilytrau @imadnyc @donteatoreo @johnrtitor
pkgs/by-name/wa/warp-terminal/ @emilytrau @imadnyc @FlameFlag @johnrtitor
+16
View File
@@ -42,6 +42,22 @@ let
programs.actionlint.enable = true;
programs.biome = {
enable = true;
settings.formatter = {
useEditorconfig = true;
};
settings.javascript.formatter = {
quoteStyle = "single";
semicolons = "asNeeded";
};
settings.json.formatter.enabled = false;
};
settings.formatter.biome.excludes = [
"*.min.js"
"pkgs/*"
];
programs.keep-sorted.enable = true;
# This uses nixfmt underneath,
+57 -28
View File
@@ -1,7 +1,5 @@
module.exports = async function ({ github, context, core, dry }) {
module.exports = async ({ github, context, core, dry }) => {
const { execFileSync } = require('node:child_process')
const { readFile } = require('node:fs/promises')
const { join } = require('node:path')
const { classify } = require('../supportedBranches.js')
const withRateLimit = require('./withRateLimit.js')
@@ -18,13 +16,13 @@ module.exports = async function ({ github, context, core, dry }) {
run_id: context.runId,
per_page: 100,
})
).find(({ name }) => name == 'Check / cherry-pick').html_url +
).find(({ name }) => name === 'Check / cherry-pick').html_url +
'?pr=' +
pull_number
async function extract({ sha, commit }) {
const noCherryPick = Array.from(
commit.message.matchAll(/^Not-cherry-picked-because: (.*)$/g)
commit.message.matchAll(/^Not-cherry-picked-because: (.*)$/g),
).at(0)
if (noCherryPick)
@@ -148,8 +146,7 @@ module.exports = async function ({ github, context, core, dry }) {
const fetch = extracted
.filter(({ severity }) => !severity)
.map(({ sha, original_sha }) => [ sha, original_sha ])
.flat()
.flatMap(({ sha, original_sha }) => [sha, original_sha])
if (fetch.length > 0) {
// Fetching all commits we need for diff at once is much faster than any other method.
@@ -163,7 +160,9 @@ module.exports = async function ({ github, context, core, dry }) {
])
}
const results = extracted.map(result => result.severity ? result : diff(result))
const results = extracted.map((result) =>
result.severity ? result : diff(result),
)
// Log all results without truncation, with better highlighting and all whitespace changes to the job log.
results.forEach(({ sha, commit, severity, message, colored_diff }) => {
@@ -177,7 +176,7 @@ module.exports = async function ({ github, context, core, dry }) {
// Only create step summary below in case of warnings or errors.
// Also clean up older reviews, when all checks are good now.
if (results.every(({ severity }) => severity == 'info')) {
if (results.every(({ severity }) => severity === 'info')) {
if (!dry) {
await Promise.all(
(
@@ -186,9 +185,9 @@ module.exports = async function ({ github, context, core, dry }) {
pull_number,
})
)
.filter((review) => review.user.login == 'github-actions[bot]')
.filter((review) => review.user.login === 'github-actions[bot]')
.map(async (review) => {
if (review.state == 'CHANGES_REQUESTED') {
if (review.state === 'CHANGES_REQUESTED') {
await github.rest.pulls.dismissReview({
...context.repo,
pull_number,
@@ -214,34 +213,64 @@ module.exports = async function ({ github, context, core, dry }) {
// In the case of "error" severity, we also fail the job.
// Those should be considered blocking and not be dismissable via review.
if (results.some(({ severity }) => severity == 'error'))
if (results.some(({ severity }) => severity === 'error'))
process.exitCode = 1
core.summary.addRaw('This report is automatically generated by the `PR / Check / cherry-pick` CI workflow.', true)
core.summary.addRaw(
'This report is automatically generated by the `PR / Check / cherry-pick` CI workflow.',
true,
)
core.summary.addEOL()
core.summary.addRaw("Some of the commits in this PR require the author's and reviewer's attention.", true)
core.summary.addRaw(
"Some of the commits in this PR require the author's and reviewer's attention.",
true,
)
core.summary.addEOL()
if (results.some(({ type }) => type === 'no-commit-hash')) {
core.summary.addRaw('Please follow the [backporting guidelines](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#how-to-backport-pull-requests) and cherry-pick with the `-x` flag.', true)
core.summary.addRaw('This requires changes to the unstable `master` and `staging` branches first, before backporting them.', true)
core.summary.addRaw(
'Please follow the [backporting guidelines](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#how-to-backport-pull-requests) and cherry-pick with the `-x` flag.',
true,
)
core.summary.addRaw(
'This requires changes to the unstable `master` and `staging` branches first, before backporting them.',
true,
)
core.summary.addEOL()
core.summary.addRaw('Occasionally, commits are not cherry-picked at all, for example when updating minor versions of packages which have already advanced to the next major on unstable.', true)
core.summary.addRaw('These commits can optionally be marked with a `Not-cherry-picked-because: <reason>` footer.', true)
core.summary.addRaw(
'Occasionally, commits are not cherry-picked at all, for example when updating minor versions of packages which have already advanced to the next major on unstable.',
true,
)
core.summary.addRaw(
'These commits can optionally be marked with a `Not-cherry-picked-because: <reason>` footer.',
true,
)
core.summary.addEOL()
}
if (results.some(({ type }) => type === 'diff')) {
core.summary.addRaw('Sometimes it is not possible to cherry-pick exactly the same patch.', true)
core.summary.addRaw('This most frequently happens when resolving merge conflicts.', true)
core.summary.addRaw('The range-diff will help to review the resolution of conflicts.', true)
core.summary.addRaw(
'Sometimes it is not possible to cherry-pick exactly the same patch.',
true,
)
core.summary.addRaw(
'This most frequently happens when resolving merge conflicts.',
true,
)
core.summary.addRaw(
'The range-diff will help to review the resolution of conflicts.',
true,
)
core.summary.addEOL()
}
core.summary.addRaw('If you need to merge this PR despite the warnings, please [dismiss](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/dismissing-a-pull-request-review) this review shortly before merging.', true)
core.summary.addRaw(
'If you need to merge this PR despite the warnings, please [dismiss](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/dismissing-a-pull-request-review) this review shortly before merging.',
true,
)
results.forEach(({ severity, message, diff }) => {
if (severity == 'info') return
if (severity === 'info') return
// The docs for markdown alerts only show examples with markdown blockquote syntax, like this:
// > [!WARNING]
@@ -256,7 +285,7 @@ module.exports = async function ({ github, context, core, dry }) {
// Whether this is intended or just an implementation detail is unclear.
core.summary.addRaw('<blockquote>')
core.summary.addRaw(
`\n\n[!${({ important: 'IMPORTANT', warning: 'WARNING', error: 'CAUTION' })[severity]}]`,
`\n\n[!${{ important: 'IMPORTANT', warning: 'WARNING', error: 'CAUTION' }[severity]}]`,
true,
)
core.summary.addRaw(`${message}`, true)
@@ -305,18 +334,18 @@ module.exports = async function ({ github, context, core, dry }) {
})
).find(
(review) =>
review.user.login == 'github-actions[bot]' &&
review.user.login === 'github-actions[bot]' &&
// If a review is still pending, we can just update this instead
// of posting a new one.
(review.state == 'CHANGES_REQUESTED' ||
(review.state === 'CHANGES_REQUESTED' ||
// No need to post a new review, if an older one with the exact
// same content had already been dismissed.
review.body == body),
review.body === body),
)
if (dry) {
if (pendingReview)
core.info('pending review found: ' + pendingReview.html_url)
core.info(`pending review found: ${pendingReview.html_url}`)
else core.info('no pending review found')
} else {
// Either of those two requests could fail for very long comments. This can only happen
+18 -17
View File
@@ -1,4 +1,4 @@
module.exports = async function ({ github, context, core, dry }) {
module.exports = async ({ github, context, core, dry }) => {
const path = require('node:path')
const { DefaultArtifactClient } = require('@actions/artifact')
const { readFile, writeFile } = require('node:fs/promises')
@@ -27,7 +27,7 @@ module.exports = async function ({ github, context, core, dry }) {
const approvals = new Set(
reviews
.filter((review) => review.state == 'APPROVED')
.filter((review) => review.state === 'APPROVED')
.map((review) => review.user?.id),
)
@@ -37,7 +37,7 @@ module.exports = async function ({ github, context, core, dry }) {
// This is intentionally less than the time that Eval takes, so that the label job
// running after Eval can indeed label the PR as conflicted if that is the case.
const merge_commit_sha_valid =
new Date() - new Date(pull_request.created_at) > 3 * 60 * 1000
Date.now() - new Date(pull_request.created_at) > 3 * 60 * 1000
const prLabels = {
// We intentionally don't use the mergeable or mergeable_state attributes.
@@ -53,8 +53,8 @@ module.exports = async function ({ github, context, core, dry }) {
// The second pass will then read the result from the first pass and set the label.
'2.status: merge conflict':
merge_commit_sha_valid && !pull_request.merge_commit_sha,
'12.approvals: 1': approvals.size == 1,
'12.approvals: 2': approvals.size == 2,
'12.approvals: 1': approvals.size === 1,
'12.approvals: 2': approvals.size === 2,
'12.approvals: 3+': approvals.size >= 3,
'12.first-time contribution': [
'NONE',
@@ -104,8 +104,8 @@ module.exports = async function ({ github, context, core, dry }) {
// existing reviews, too.
'9.needs: reviewer':
!pull_request.draft &&
pull_request.requested_reviewers.length == 0 &&
reviews.length == 0,
pull_request.requested_reviewers.length === 0 &&
reviews.length === 0,
})
}
@@ -125,8 +125,7 @@ module.exports = async function ({ github, context, core, dry }) {
// called "comparison", yet, will skip the download.
const expired =
!artifact ||
new Date(artifact?.expires_at ?? 0) <
new Date(new Date().getTime() + 60 * 1000)
new Date(artifact?.expires_at ?? 0) < new Date(Date.now() + 60 * 1000)
log('Artifact expires at', artifact?.expires_at ?? '<n/a>')
if (!expired) {
stats.artifacts++
@@ -175,7 +174,7 @@ module.exports = async function ({ github, context, core, dry }) {
async function handle({ item, stats }) {
try {
const log = (k, v, skip) => {
core.info(`#${item.number} - ${k}: ${v}` + (skip ? ' (skipped)' : ''))
core.info(`#${item.number} - ${k}: ${v}${skip ? ' (skipped)' : ''}`)
return skip
}
@@ -257,7 +256,7 @@ module.exports = async function ({ github, context, core, dry }) {
// No need for an API request, if all labels are the same.
const hasChanges = Object.keys(after).some(
(name) => (before[name] ?? false) != after[name],
(name) => (before[name] ?? false) !== after[name],
)
if (log('Has changes', hasChanges, !hasChanges)) return
@@ -297,13 +296,15 @@ module.exports = async function ({ github, context, core, dry }) {
// Go back as far as the last successful run of this workflow to make sure
// we are not leaving anyone behind on GHA failures.
// Defaults to go back 1 hour on the first run.
new Date(lastRun?.created_at ?? new Date().getTime() - 1 * 60 * 60 * 1000).getTime(),
new Date(
lastRun?.created_at ?? Date.now() - 1 * 60 * 60 * 1000,
).getTime(),
// Go back max. 1 day to prevent hitting all API rate limits immediately,
// when GH API returns a wrong workflow by accident.
new Date().getTime() - 24 * 60 * 60 * 1000,
Date.now() - 24 * 60 * 60 * 1000,
),
)
core.info('cutoff timestamp: ' + cutoff.toISOString())
core.info(`cutoff timestamp: ${cutoff.toISOString()}`)
const updatedItems = await github.paginate(
github.rest.search.issuesAndPullRequests,
@@ -400,12 +401,12 @@ module.exports = async function ({ github, context, core, dry }) {
.concat(updatedItems, allItems.data)
.filter(
(thisItem, idx, arr) =>
idx ==
arr.findIndex((firstItem) => firstItem.number == thisItem.number),
idx ===
arr.findIndex((firstItem) => firstItem.number === thisItem.number),
)
;(await Promise.allSettled(items.map((item) => handle({ item, stats }))))
.filter(({ status }) => status == 'rejected')
.filter(({ status }) => status === 'rejected')
.map(({ reason }) =>
core.setFailed(`${reason.message}\n${reason.cause.stack}`),
)
+87
View File
@@ -0,0 +1,87 @@
const { classify } = require('../supportedBranches.js')
module.exports = async ({ github, context, core }) => {
const pull_number = context.payload.pull_request.number
for (const retryInterval of [5, 10, 20, 40, 80]) {
core.info('Checking whether the pull request can be merged...')
const prInfo = (
await github.rest.pulls.get({
...context.repo,
pull_number,
})
).data
if (prInfo.state !== 'open') throw new Error('PR is not open anymore.')
if (prInfo.mergeable == null) {
core.info(
`GitHub is still computing whether this PR can be merged, waiting ${retryInterval} seconds before trying again...`,
)
await new Promise((resolve) => setTimeout(resolve, retryInterval * 1000))
continue
}
const { base, head } = prInfo
let mergedSha, targetSha
if (prInfo.mergeable) {
core.info('The PR can be merged.')
mergedSha = prInfo.merge_commit_sha
targetSha = (
await github.rest.repos.getCommit({
...context.repo,
ref: prInfo.merge_commit_sha,
})
).data.parents[0].sha
} else {
core.warning('The PR has a merge conflict.')
mergedSha = prInfo.head.sha
targetSha = (
await github.rest.repos.compareCommitsWithBasehead({
...context.repo,
basehead: `${base.sha}...${head.sha}`,
})
).data.merge_base_commit.sha
}
core.info(
`Checking the commits:\nmerged: ${mergedSha}\ntarget: ${targetSha}`,
)
core.setOutput('mergedSha', mergedSha)
core.setOutput('targetSha', targetSha)
core.setOutput('systems', require('../supportedSystems.json'))
const baseClassification = classify(base.ref)
core.setOutput('base', baseClassification)
console.log('base classification:', baseClassification)
const headClassification =
base.repo.full_name === head.repo.full_name
? classify(head.ref)
: // PRs from forks are always considered WIP.
{ type: ['wip'] }
core.setOutput('head', headClassification)
console.log('head classification:', headClassification)
const files = (
await github.paginate(github.rest.pulls.listFiles, {
...context.repo,
pull_number: context.payload.pull_request.number,
per_page: 100,
})
).map((file) => file.filename)
if (files.includes('ci/pinned.json')) core.setOutput('touched', ['pinned'])
else core.setOutput('touched', [])
return
}
throw new Error(
"Not retrying anymore. It's likely that GitHub is having internal issues: check https://www.githubstatus.com.",
)
}
+11
View File
@@ -39,6 +39,17 @@ async function run(action, owner, repo, pull_number, dry = true) {
})
}
program
.command('prepare')
.description('Prepare relevant information of a pull request.')
.argument('<owner>', 'Owner of the GitHub repository to check (Example: NixOS)')
.argument('<repo>', 'Name of the GitHub repository to check (Example: nixpkgs)')
.argument('<pr>', 'Number of the Pull Request to check')
.action(async (owner, repo, pr) => {
const prepare = (await import('./prepare.js')).default
run(prepare, owner, repo, pr)
})
program
.command('commits')
.description('Check commit structure of a pull request.')
+2 -2
View File
@@ -1,4 +1,4 @@
module.exports = async function ({ github, core }, callback) {
module.exports = async ({ github, core }, callback) => {
const Bottleneck = require('bottleneck')
const stats = {
@@ -23,7 +23,7 @@ module.exports = async function ({ github, core }, callback) {
// Requests to a different host do not count against the rate limit.
if (options.url.startsWith('https://github.com')) return request(options)
// Requests to the /rate_limit endpoint do not count against the rate limit.
if (options.url == '/rate_limit') return request(options)
if (options.url === '/rate_limit') return request(options)
// Search requests are in a different resource group, which allows 30 requests / minute.
// We do less than a handful each run, so not implementing throttling for now.
if (options.url.startsWith('/search/')) return request(options)
+10 -4
View File
@@ -13,9 +13,15 @@ let
with lib.fileset;
path:
toSource {
fileset = (gitTracked path);
fileset = difference (gitTracked path) (unions [
(path + /.github)
(path + /ci)
]);
root = path;
};
filteredBase = filtered base;
filteredHead = filtered head;
in
runCommand "nixpkgs-vet"
{
@@ -27,11 +33,11 @@ runCommand "nixpkgs-vet"
''
export NIX_STATE_DIR=$(mktemp -d)
nixpkgs-vet --base ${filtered base} ${filtered head}
nixpkgs-vet --base ${filteredBase} ${filteredHead}
# TODO: Upstream into nixpkgs-vet, see:
# https://github.com/NixOS/nixpkgs-vet/issues/164
badFiles=$(find ${filtered head}/pkgs -type f -name '*.nix' -print | xargs grep -l '^[^#]*<nixpkgs/' || true)
badFiles=$(find ${filteredHead}/pkgs -type f -name '*.nix' -print | xargs grep -l '^[^#]*<nixpkgs/' || true)
if [[ -n $badFiles ]]; then
echo "Nixpkgs is not allowed to use <nixpkgs> to refer to itself."
echo "The offending files:"
@@ -41,7 +47,7 @@ runCommand "nixpkgs-vet"
# TODO: Upstream into nixpkgs-vet, see:
# https://github.com/NixOS/nixpkgs-vet/issues/166
conflictingPaths=$(find ${filtered head} | awk '{ print $1 " " tolower($1) }' | sort -k2 | uniq -D -f 1 | cut -d ' ' -f 1)
conflictingPaths=$(find ${filteredHead} | awk '{ print $1 " " tolower($1) }' | sort -k2 | uniq -D -f 1 | cut -d ' ' -f 1)
if [[ -n $conflictingPaths ]]; then
echo "Files in nixpkgs must not vary only by case."
echo "The offending paths:"
+6 -2
View File
@@ -15,14 +15,18 @@ const typeConfig = {
}
function split(branch) {
return { ...branch.match(/(?<prefix>.+?)(-(?<version>\d{2}\.\d{2}|unstable)(?:-(?<suffix>.*))?)?$/).groups }
return {
...branch.match(
/(?<prefix>.+?)(-(?<version>\d{2}\.\d{2}|unstable)(?:-(?<suffix>.*))?)?$/,
).groups,
}
}
function classify(branch) {
const { prefix, version } = split(branch)
return {
stable: (version ?? 'unstable') !== 'unstable',
type: typeConfig[prefix] ?? [ 'wip' ]
type: typeConfig[prefix] ?? ['wip'],
}
}
+5 -3
View File
@@ -1,3 +1,5 @@
document.addEventListener('DOMContentLoaded', function(event) {
anchors.add('h1[id]:not(div.note h1, div.warning h1, div.tip h1, div.caution h1, div.important h1), h2[id]:not(div.note h2, div.warning h2, div.tip h2, div.caution h2, div.important h2), h3[id]:not(div.note h3, div.warning h3, div.tip h3, div.caution h3, div.important h3), h4[id]:not(div.note h4, div.warning h4, div.tip h4, div.caution h4, div.important h4), h5[id]:not(div.note h5, div.warning h5, div.tip h5, div.caution h5, div.important h5), h6[id]:not(div.note h6, div.warning h6, div.tip h6, div.caution h6, div.important h6)');
});
document.addEventListener('DOMContentLoaded', () => {
anchors.add(
'h1[id]:not(div.note h1, div.warning h1, div.tip h1, div.caution h1, div.important h1), h2[id]:not(div.note h2, div.warning h2, div.tip h2, div.caution h2, div.important h2), h3[id]:not(div.note h3, div.warning h3, div.tip h3, div.caution h3, div.important h3), h4[id]:not(div.note h4, div.warning h4, div.tip h4, div.caution h4, div.important h4), h5[id]:not(div.note h5, div.warning h5, div.tip h5, div.caution h5, div.important h5), h6[id]:not(div.note h6, div.warning h6, div.tip h6, div.caution h6, div.important h6)',
)
})
+205 -206
View File
@@ -1,193 +1,193 @@
html {
line-height: 1.15;
-webkit-text-size-adjust: 100%;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
}
body {
margin: 0;
margin: 0;
}
.book,
.appendix {
margin: auto;
width: 100%;
margin: auto;
width: 100%;
}
@media screen and (min-width: 768px) {
.book,
.appendix {
max-width: 46rem;
}
.book,
.appendix {
max-width: 46rem;
}
}
@media screen and (min-width: 992px) {
.book,
.appendix {
max-width: 60rem;
}
.book,
.appendix {
max-width: 60rem;
}
}
@media screen and (min-width: 1200px) {
.book,
.appendix {
max-width: 73rem;
}
.book,
.appendix {
max-width: 73rem;
}
}
.book .list-of-examples {
display: none;
display: none;
}
h1 {
font-size: 2em;
margin: 0.67em 0;
font-size: 2em;
margin: 0.67em 0;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
box-sizing: content-box;
height: 0;
overflow: visible;
}
pre {
font-family: monospace, monospace;
font-size: 1em;
font-family: monospace;
font-size: 1em;
}
a {
background-color: transparent;
background-color: transparent;
}
strong {
font-weight: bolder;
font-weight: bolder;
}
code {
font-family: monospace, monospace;
font-size: 1em;
font-family: monospace;
font-size: 1em;
}
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
top: -0.5em;
}
::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit;
-webkit-appearance: button;
font: inherit;
}
pre {
overflow: auto;
overflow: auto;
}
*,
*::before,
*::after {
box-sizing: border-box;
box-sizing: border-box;
}
html {
font-size: 100%;
line-height: 1.77777778;
font-size: 100%;
line-height: 1.77777778;
}
@media screen and (min-width: 4000px) {
html {
background: #000;
}
html {
background: #000;
}
html body {
margin: auto;
max-width: 250rem;
}
html body {
margin: auto;
max-width: 250rem;
}
}
@media screen and (max-width: 320px) {
html {
font-size: calc(16 / 320 * 100vw);
}
html {
font-size: calc(16 / 320 * 100vw);
}
}
body {
font-size: 1rem;
font-family: "Roboto", sans-serif;
font-weight: 300;
color: var(--main-text-color);
background-color: var(--background);
min-height: 100vh;
display: flex;
flex-direction: column;
font-size: 1rem;
font-family: "Roboto", sans-serif;
font-weight: 300;
color: var(--main-text-color);
background-color: var(--background);
min-height: 100vh;
display: flex;
flex-direction: column;
}
@media screen and (max-width: 767.9px) {
body {
padding-left: 1rem;
padding-right: 1rem;
}
body {
padding-left: 1rem;
padding-right: 1rem;
}
}
a {
text-decoration: none;
border-bottom: 1px solid;
color: var(--link-color);
text-decoration: none;
border-bottom: 1px solid;
color: var(--link-color);
}
ul {
padding: 0;
margin-top: 0;
margin-right: 0;
margin-bottom: 1rem;
margin-left: 1rem;
padding: 0;
margin-top: 0;
margin-right: 0;
margin-bottom: 1rem;
margin-left: 1rem;
}
table {
border-collapse: collapse;
width: 100%;
margin-bottom: 1rem;
border-collapse: collapse;
width: 100%;
margin-bottom: 1rem;
}
thead th {
text-align: left;
text-align: left;
}
hr {
margin-top: 1rem;
margin-bottom: 1rem;
margin-top: 1rem;
margin-bottom: 1rem;
}
h1 {
font-weight: 800;
line-height: 110%;
font-size: 200%;
margin-bottom: 1rem;
color: var(--heading-color);
font-weight: 800;
line-height: 110%;
font-size: 200%;
margin-bottom: 1rem;
color: var(--heading-color);
}
h2 {
font-weight: 800;
line-height: 110%;
font-size: 170%;
margin-bottom: 0.625rem;
color: var(--heading-color);
font-weight: 800;
line-height: 110%;
font-size: 170%;
margin-bottom: 0.625rem;
color: var(--heading-color);
}
h2:not(:first-child) {
margin-top: 1rem;
margin-top: 1rem;
}
h3 {
font-weight: 800;
line-height: 110%;
margin-bottom: 1rem;
font-size: 150%;
color: var(--heading-color);
font-weight: 800;
line-height: 110%;
margin-bottom: 1rem;
font-size: 150%;
color: var(--heading-color);
}
.note h3,
@@ -195,73 +195,73 @@ h3 {
.warning h3,
.caution h3,
.important h3 {
font-size: 120%;
font-size: 120%;
}
h4 {
font-weight: 800;
line-height: 110%;
margin-bottom: 1rem;
font-size: 140%;
color: var(--heading-color);
font-weight: 800;
line-height: 110%;
margin-bottom: 1rem;
font-size: 140%;
color: var(--heading-color);
}
h5 {
font-weight: 800;
line-height: 110%;
margin-bottom: 1rem;
font-size: 130%;
color: var(--small-heading-color);
font-weight: 800;
line-height: 110%;
margin-bottom: 1rem;
font-size: 130%;
color: var(--small-heading-color);
}
h6 {
font-weight: 800;
line-height: 110%;
margin-bottom: 1rem;
font-size: 120%;
font-weight: 800;
line-height: 110%;
margin-bottom: 1rem;
font-size: 120%;
}
strong {
font-weight: bold;
font-weight: bold;
}
p {
margin-top: 0;
margin-bottom: 1rem;
margin-top: 0;
margin-bottom: 1rem;
}
dt > *:first-child,
dd > *:first-child {
margin-top: 0;
margin-top: 0;
}
dt > *:last-child,
dd > *:last-child {
margin-bottom: 0;
margin-bottom: 0;
}
pre,
code {
font-family: monospace;
font-family: monospace;
}
code {
color: #ff8657;
background: #f4f4f4;
display: inline-block;
padding: 0 0.5rem;
border: 1px solid #d8d8d8;
border-radius: 0.5rem;
line-height: 1.57777778;
color: #ff8657;
background: #f4f4f4;
display: inline-block;
padding: 0 0.5rem;
border: 1px solid #d8d8d8;
border-radius: 0.5rem;
line-height: 1.57777778;
}
div.book .programlisting,
div.appendix .programlisting {
border-radius: 0.5rem;
padding: 1rem;
overflow: auto;
background: var(--codeblock-background);
color: var(--codeblock-text-color);
border-radius: 0.5rem;
padding: 1rem;
overflow: auto;
background: var(--codeblock-background);
color: var(--codeblock-text-color);
}
div.book .note,
@@ -274,11 +274,11 @@ div.appendix .tip,
div.appendix .warning,
div.appendix .caution,
div.appendix .important {
margin-bottom: 1rem;
border-radius: 0.5rem;
padding: 1.5rem;
overflow: auto;
background: #f4f4f4;
margin-bottom: 1rem;
border-radius: 0.5rem;
padding: 1.5rem;
overflow: auto;
background: #f4f4f4;
}
div.book .note > .title,
@@ -291,11 +291,10 @@ div.appendix .tip > .title,
div.appendix .warning > .title,
div.appendix .caution > .title,
div.appendix .important > .title {
font-weight: 800;
line-height: 110%;
margin-bottom: 1rem;
color: inherit;
margin-bottom: 0;
font-weight: 800;
line-height: 110%;
color: inherit;
margin-bottom: 0;
}
div.book .note > :first-child,
@@ -308,7 +307,7 @@ div.appendix .tip > :first-child,
div.appendix .warning > :first-child,
div.appendix .caution > :first-child,
div.appendix .important > :first-child {
margin-top: 0;
margin-top: 0;
}
div.book .note > :last-child,
@@ -321,122 +320,122 @@ div.appendix .tip > :last-child,
div.appendix .warning > :last-child,
div.appendix .caution > :last-child,
div.appendix .important > :last-child {
margin-bottom: 0;
margin-bottom: 0;
}
div.book .note,
div.book .tip,
div.appendix .note,
div.appendix .tip {
color: var(--note-text-color);
background: var(--note-background);
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);
color: var(--warning-text-color);
background-color: var(--warning-background);
}
div.book .section,
div.appendix .section {
margin-top: 2em;
margin-top: 2em;
}
div.book div.example,
div.appendix div.example {
margin-top: 1.5em;
margin-top: 1.5em;
}
div.book div.example details,
div.appendix div.example details {
padding: 5px;
padding: 5px;
}
div.book div.example details[open],
div.appendix div.example details[open] {
border: 1px solid #aaa;
border-radius: 4px;
border: 1px solid #aaa;
border-radius: 4px;
}
div.book div.example details > summary,
div.appendix div.example details > summary {
cursor: pointer;
cursor: pointer;
}
div.book br.example-break,
div.appendix br.example-break {
display: none;
display: none;
}
div.book div.footnotes > hr,
div.appendix div.footnotes > hr {
border-color: #d8d8d8;
border-color: #d8d8d8;
}
div.book div.footnotes > br,
div.appendix div.footnotes > br {
display: none;
display: none;
}
div.book dt,
div.appendix dt {
margin-top: 1em;
margin-top: 1em;
}
div.book .toc dt,
div.appendix .toc dt {
margin-top: 0;
margin-top: 0;
}
div.book .list-of-examples dt,
div.appendix .list-of-examples dt {
margin-top: 0;
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;
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;
margin-bottom: 3em;
border-bottom: 0.0625rem solid #d8d8d8;
}
div.book div.toc dd,
div.appendix div.toc dd {
margin-left: 2em;
margin-left: 2em;
}
div.book span.command,
div.appendix span.command {
font-family: monospace;
-webkit-hyphens: none;
-moz-hyphens: none;
hyphens: none;
font-family: monospace;
-webkit-hyphens: none;
-moz-hyphens: none;
hyphens: none;
}
div.book .informaltable th,
div.book .informaltable td,
div.appendix .informaltable th,
div.appendix .informaltable td {
padding: 0.5rem;
padding: 0.5rem;
}
div.book .variablelist .term,
div.appendix .variablelist .term {
font-weight: 500;
font-weight: 500;
}
/*
@@ -444,50 +443,50 @@ div.appendix .variablelist .term {
For more details, see https://highlightjs.readthedocs.io/en/latest/css-classes-reference.html#stylable-scopes
*/
.hljs-meta.prompt_ {
user-select: none;
-webkit-user-select: none;
user-select: none;
-webkit-user-select: none;
}
:root {
--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;
--codeblock-background: #f2f8fd;
--codeblock-text-color: #000;
--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;
--codeblock-background: #f2f8fd;
--codeblock-text-color: #000;
}
@media (prefers-color-scheme: dark) {
:root {
--background: #242424;
--main-text-color: #fff;
--link-color: #6586c8;
--small-heading-color: #fff;
--note-background: none;
--warning-background: none;
--codeblock-background: #393939;
--codeblock-text-color: #fff;
}
:root {
--background: #242424;
--main-text-color: #fff;
--link-color: #6586c8;
--small-heading-color: #fff;
--note-background: none;
--warning-background: none;
--codeblock-background: #393939;
--codeblock-text-color: #fff;
}
div.book .note,
div.book .tip,
div.appendix .note,
div.appendix .tip,
div.book .warning,
div.book .caution,
div.appendix .warning,
div.appendix .caution {
border: 2px solid;
font-weight: 400;
}
div.book .note,
div.book .tip,
div.appendix .note,
div.appendix .tip,
div.book .warning,
div.book .caution,
div.appendix .warning,
div.appendix .caution {
border: 2px solid;
font-weight: 400;
}
}
@font-face {
font-family: Roboto;
src: url(Roboto.ttf);
font-family: Roboto;
src: url(Roboto.ttf);
}
+13 -6
View File
@@ -6673,12 +6673,6 @@
name = "Donovan Glover";
keys = [ { fingerprint = "EE7D 158E F9E7 660E 0C33 86B2 8FC5 F7D9 0A5D 8F4D"; } ];
};
donteatoreo = {
name = "DontEatOreo";
github = "DontEatOreo";
githubId = 57304299;
matrix = "@donteatoreo:matrix.org";
};
dopplerian = {
name = "Dopplerian";
github = "Dopplerian";
@@ -6782,6 +6776,13 @@
name = "Nico Jensch";
keys = [ { fingerprint = "D245 D484 F357 8CB1 7FD6 DA6B 67DB 29BF F3C9 6757"; } ];
};
drafolin = {
email = "derg@drafolin.ch";
github = "drafolin";
githubId = 66629792;
name = "Dråfølin";
keys = [ { fingerprint = "CAE2 9E73 0691 0AE9 1BD1 3D72 91A9 5557 C50B 4D3E"; } ];
};
dragonginger = {
email = "dragonginger10@gmail.com";
github = "dragonginger10";
@@ -8453,6 +8454,12 @@
name = "Sebastian Neubauer";
keys = [ { fingerprint = "2F93 661D AC17 EA98 A104 F780 ECC7 55EE 583C 1672"; } ];
};
FlameFlag = {
name = "FlameFlag";
github = "FlameFlag";
githubId = 57304299;
matrix = "@donteatoreo:matrix.org";
};
Flameopathic = {
email = "flameopathic@gmail.com";
github = "Flameopathic";
@@ -369,6 +369,11 @@ let
kick other. Useful in jitsi-meet to kick ghosts.
'';
};
moderation = mkOption {
type = types.bool;
default = false;
description = "Allow rooms to be moderated";
};
# Extra parameters. Defaulting to prosody default values.
# Adding them explicitly to make them visible from the options
@@ -567,7 +572,7 @@ let
${lib.concatMapStrings (muc: ''
Component ${toLua muc.domain} "muc"
modules_enabled = {${optionalString cfg.modules.mam ''"muc_mam",''}${optionalString muc.allowners_muc ''"muc_allowners",''} }
modules_enabled = {${optionalString cfg.modules.mam ''"muc_mam",''}${optionalString muc.allowners_muc ''"muc_allowners",''}${optionalString muc.moderation ''"muc_moderation",''} }
name = ${toLua muc.name}
restrict_room_creation = ${toLua muc.restrictRoomCreation}
max_history_messages = ${toLua muc.maxHistoryMessages}
+83 -90
View File
@@ -10,12 +10,18 @@ let
mkEnableOption
mkPackageOption
mkOption
literalExpression
hasAttr
toList
length
head
tail
concatStringsSep
optionalString
optionalAttrs
isDerivation
recursiveUpdate
getExe
literalExpression
types
maintainers
;
@@ -28,38 +34,27 @@ let
# Since the json config attribute type "configFormat.type" doesn't allow specifying types for
# individual attributes, we have to type check manually.
# The application option must be either a package or a list with package as the first element.
# The application option should be a list with package as the first element, though a single package is also valid.
# Note that this module depends on the package containing the meta.mainProgram attribute.
# Checking if an application is provided
applicationAttrExists = builtins.hasAttr "application" cfg.config.json;
applicationListNotEmpty = (
if builtins.isList cfg.config.json.application then
(builtins.length cfg.config.json.application) != 0
else
true
);
# Check if an application is provided
applicationAttrExists = hasAttr "application" cfg.config.json;
applicationList = toList cfg.config.json.application;
applicationListNotEmpty = length applicationList != 0;
applicationCheck = applicationAttrExists && applicationListNotEmpty;
# Manage packages and their exe paths
applicationAttr = (
if builtins.isList cfg.config.json.application then
builtins.head cfg.config.json.application
else
cfg.config.json.application
);
applicationAttr = head applicationList;
applicationPackage = mkIf applicationCheck applicationAttr;
applicationPackageExe = getExe applicationAttr;
serverPackageExe = getExe cfg.package;
# Managing strings
applicationStrings = builtins.tail cfg.config.json.application;
applicationConcat = (
if builtins.isList cfg.config.json.application then
builtins.concatStringsSep " " ([ applicationPackageExe ] ++ applicationStrings)
else
applicationPackageExe
serverPackageExe = (
if cfg.highPriority then "${config.security.wrapperDir}/wivrn-server" else getExe cfg.package
);
# Manage strings
applicationStrings = tail applicationList;
applicationConcat = concatStringsSep " " ([ applicationPackageExe ] ++ applicationStrings);
# Manage config file
applicationUpdate = recursiveUpdate cfg.config.json (
optionalAttrs applicationCheck { application = applicationConcat; }
@@ -68,7 +63,7 @@ let
enabledConfig = optionalString cfg.config.enable "-f ${configFile}";
# Manage server executables and flags
serverExec = builtins.concatStringsSep " " (
serverExec = concatStringsSep " " (
[
serverPackageExe
"--systemd"
@@ -76,14 +71,6 @@ let
]
++ cfg.extraServerFlags
);
applicationExec = builtins.concatStringsSep " " (
[
serverPackageExe
"--application"
enabledConfig
]
++ cfg.extraApplicationFlags
);
in
{
options = {
@@ -95,7 +82,7 @@ in
openFirewall = mkEnableOption "the default ports in the firewall for the WiVRn server";
defaultRuntime = mkEnableOption ''
WiVRn Monado as the default OpenXR runtime on the system.
WiVRn as the default OpenXR runtime on the system.
The config can be found at `/etc/xdg/openxr/1/active_runtime.json`.
Note that applications can bypass this option by setting an active
@@ -104,34 +91,29 @@ in
autoStart = mkEnableOption "starting the service by default";
highPriority = mkEnableOption "high priority capability for asynchronous reprojection";
monadoEnvironment = mkOption {
type = types.attrs;
description = "Environment variables to be passed to the Monado environment.";
default = {
XRT_COMPOSITOR_LOG = "debug";
XRT_PRINT_OPTIONS = "on";
IPC_EXIT_ON_DISCONNECT = "off";
};
default = { };
};
extraServerFlags = mkOption {
type = types.listOf types.str;
description = "Flags to add to the wivrn service.";
default = [ ];
example = ''[ "--no-publish-service" ]'';
example = literalExpression ''[ "--no-publish-service" ]'';
};
extraApplicationFlags = mkOption {
type = types.listOf types.str;
description = "Flags to add to the wivrn-application service. This is NOT the WiVRn startup application.";
default = [ ];
};
steam = {
importOXRRuntimes = mkEnableOption ''
Sets `PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES` system-wide to allow Steam to automatically discover the WiVRn server.
extraPackages = mkOption {
type = types.listOf types.package;
description = "Packages to add to the wivrn-application service $PATH.";
default = [ ];
example = literalExpression "[ pkgs.bash pkgs.procps ]";
Note that you may have to logout for this variable to be visible
'';
package = mkPackageOption pkgs "steam" { };
};
config = {
@@ -139,12 +121,12 @@ in
json = mkOption {
type = configFormat.type;
description = ''
Configuration for WiVRn. The attributes are serialized to JSON in config.json. If a config or certain attributes are not provided, the server will default to stock values.
Configuration for WiVRn. The attributes are serialized to JSON in config.json. The server will fallback to default values for any missing attributes.
Note that the application option must be either a package or a
list with package as the first element.
Like upstream, the application option is a list including the application and it's flags. In the case of the NixOS module however, the first element of the list must be a package. The module will assert otherwise.
The application can be set to a single package because it gets passed to lib.toList, though this will not allow for flags to be passed.
See <https://github.com/WiVRn/WiVRn/blob/master/docs/configuration.md>
See https://github.com/WiVRn/WiVRn/blob/master/docs/configuration.md
'';
default = { };
example = literalExpression ''
@@ -177,51 +159,59 @@ in
}
];
security.wrappers."wivrn-server" = mkIf cfg.highPriority {
setuid = false;
owner = "root";
group = "root";
capabilities = "cap_sys_nice+eip";
source = getExe cfg.package;
};
systemd.user = {
services = {
# The WiVRn server runs in a hardened service and starts the application in a different service
wivrn = {
description = "WiVRn XR runtime service";
environment = {
environment = recursiveUpdate {
# Default options
# https://gitlab.freedesktop.org/monado/monado/-/blob/598080453545c6bf313829e5780ffb7dde9b79dc/src/xrt/targets/service/monado.in.service#L12
XRT_COMPOSITOR_LOG = "debug";
XRT_PRINT_OPTIONS = "on";
IPC_EXIT_ON_DISCONNECT = "off";
}
// cfg.monadoEnvironment;
serviceConfig = {
ExecStart = serverExec;
# Hardening options
CapabilityBoundingSet = [ "CAP_SYS_NICE" ];
AmbientCapabilities = [ "CAP_SYS_NICE" ];
LockPersonality = true;
NoNewPrivileges = true;
PrivateTmp = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
ProtectSystem = "strict";
RemoveIPC = true;
RestrictNamespaces = true;
RestrictSUIDSGID = true;
};
PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES = mkIf cfg.steam.importOXRRuntimes "1";
} cfg.monadoEnvironment;
serviceConfig = (
if cfg.highPriority then
{
ExecStart = serverExec;
}
# Hardening options break high-priority
else
{
ExecStart = serverExec;
# Hardening options
CapabilityBoundingSet = [ "CAP_SYS_NICE" ];
AmbientCapabilities = [ "CAP_SYS_NICE" ];
LockPersonality = true;
NoNewPrivileges = true;
PrivateTmp = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
ProtectSystem = "strict";
RemoveIPC = true;
RestrictNamespaces = true;
RestrictSUIDSGID = true;
}
);
path = [ cfg.steam.package ];
wantedBy = mkIf cfg.autoStart [ "default.target" ];
restartTriggers = [ cfg.package ];
};
wivrn-application = mkIf applicationCheck {
description = "WiVRn application service";
requires = [ "wivrn.service" ];
serviceConfig = {
ExecStart = applicationExec;
Restart = "on-failure";
RestartSec = 0;
PrivateTmp = true;
};
path = [ applicationPackage ] ++ cfg.extraPackages;
restartTriggers = [
cfg.package
cfg.steam.package
];
};
};
};
@@ -247,6 +237,9 @@ in
cfg.package
applicationPackage
];
sessionVariables = mkIf cfg.steam.importOXRRuntimes {
PRESSURE_VESSEL_IMPORT_OPENXR_1_RUNTIMES = "1";
};
pathsToLink = [ "/share/openxr" ];
etc."xdg/openxr/1/active_runtime.json" = mkIf cfg.defaultRuntime {
source = "${cfg.package}/share/openxr/1/openxr_wivrn.json";
@@ -70,7 +70,7 @@ let
postPatch = ''
# Patch index.php file to load additional config file
substituteInPlace index.php \
--replace-fail "require('vendor/autoload.php');" "require('vendor/autoload.php'); \$dotenv = Dotenv\Dotenv::createImmutable(__DIR__, 'extraConfig.php'); \$dotenv->load();";
--replace-fail "require __DIR__ . '/vendor/autoload.php';" "require('vendor/autoload.php'); \$dotenv = Dotenv\Dotenv::createImmutable(__DIR__, 'extraConfig.php'); \$dotenv->load();";
'';
installPhase = ''
+1
View File
@@ -11,6 +11,7 @@ let
packages = with pkgs; {
"16" = teleport_16;
"17" = teleport_17;
"18" = teleport_18;
};
minimal = package: {
@@ -24,8 +24,8 @@ let
sha256Hash = "sha256-qA7iu4nK+29aHKsUmyQWuwV0SFnv5cYQvFq5CAMKyKw=";
};
latestVersion = {
version = "2025.1.3.4"; # "Android Studio Narwhal 3 Feature Drop | 2025.1.3 Canary 4"
sha256Hash = "sha256-SAdmuuentJZGtjcFAgAedPa9MLAS9vNtWoOI1pPvDhA=";
version = "2025.1.4.1"; # "Android Studio Narwhal 4 Feature Drop | 2025.1.4 Canary 1"
sha256Hash = "sha256-OGnBf0LrfbN7WpO9skT8+ltAeKejyqHobxFvrzLp3EY=";
};
in
{
@@ -19,18 +19,18 @@
"datagrip": {
"update-channel": "DataGrip RELEASE",
"url-template": "https://download.jetbrains.com/datagrip/datagrip-{version}.tar.gz",
"version": "2025.2.1",
"sha256": "1a0dea8a82920818e40b552950e90caf39bcf6ca9ae4e973a1d49e7db0498ecc",
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.1.tar.gz",
"build_number": "252.23892.464"
"version": "2025.2.2",
"sha256": "59c793fabaa3ae6563c3118939c069f8baddb1bab489bccd7acddd0cf17de107",
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.2.tar.gz",
"build_number": "252.25557.34"
},
"dataspell": {
"update-channel": "DataSpell RELEASE",
"url-template": "https://download.jetbrains.com/python/dataspell-{version}.tar.gz",
"version": "2025.1.2.1",
"sha256": "1759516154a989ad1bcbc0e0cc29eb7b50c5c96b910c1a8926ae87ea5aa07ea6",
"url": "https://download.jetbrains.com/python/dataspell-2025.1.2.1.tar.gz",
"build_number": "251.26927.91"
"version": "2025.2",
"sha256": "fd37e488b990e3e395a12c3ebbdb2b4df87c58eb9bb6c82fd38a0322b5c2fb2b",
"url": "https://download.jetbrains.com/python/dataspell-2025.2.tar.gz",
"build_number": "252.23892.514"
},
"gateway": {
"update-channel": "Gateway RELEASE",
@@ -43,10 +43,10 @@
"goland": {
"update-channel": "GoLand RELEASE",
"url-template": "https://download.jetbrains.com/go/goland-{version}.tar.gz",
"version": "2025.2",
"sha256": "d285c10055af9002db8c913557535ba46e3158c5733b236add3d71f93873e85a",
"url": "https://download.jetbrains.com/go/goland-2025.2.tar.gz",
"build_number": "252.23892.449"
"version": "2025.2.0.1",
"sha256": "6a835b97bfa86938b45c902f3aad8b3c9c5265840473404c1d664149b0bd7434",
"url": "https://download.jetbrains.com/go/goland-2025.2.0.1.tar.gz",
"build_number": "252.23892.530"
},
"idea-community": {
"update-channel": "IntelliJ IDEA RELEASE",
@@ -84,26 +84,26 @@
"pycharm-community": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-community-{version}.tar.gz",
"version": "2025.2",
"sha256": "356dc81511bbd361c7f106fda8597503c6b9797d36a3a04434bbf0ec35a02434",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.tar.gz",
"build_number": "252.23892.439"
"version": "2025.2.0.1",
"sha256": "2b95c6169c6f9bb00657e24cecdad23281c423b661918c09781894f3508f8672",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.0.1.tar.gz",
"build_number": "252.23892.515"
},
"pycharm-professional": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}.tar.gz",
"version": "2025.2",
"sha256": "bc3fbb31ea10e171686b9be8734051382233748502f124393c52848aefe97b32",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.tar.gz",
"build_number": "252.23892.439"
"version": "2025.2.0.1",
"sha256": "555a20eb9a695f52430fc3ef1b43c229186df5bf1c8962de55db0ef7eb308fb4",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.0.1.tar.gz",
"build_number": "252.23892.515"
},
"rider": {
"update-channel": "Rider RELEASE",
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}.tar.gz",
"version": "2025.1.5",
"sha256": "b10e21b764e504e33468ee93885fee1102c0b96bd628d1d7c0a19ce6e83910d6",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.1.5.tar.gz",
"build_number": "251.27812.87"
"version": "2025.2",
"sha256": "661d5e8fc12e6373e7a84ee197aa755d77c2e3fe0246284c79bc20682d39d309",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.tar.gz",
"build_number": "252.23892.524"
},
"ruby-mine": {
"update-channel": "RubyMine RELEASE",
@@ -158,18 +158,18 @@
"datagrip": {
"update-channel": "DataGrip RELEASE",
"url-template": "https://download.jetbrains.com/datagrip/datagrip-{version}-aarch64.tar.gz",
"version": "2025.2.1",
"sha256": "da21f165bce024ed6e99275350da41fa49e8ac51a47da50ed7a1e104edc06aa0",
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.1-aarch64.tar.gz",
"build_number": "252.23892.464"
"version": "2025.2.2",
"sha256": "cb5a8e32343f56bb33721edb8488d74198a5a9b738610a0ed97c0e0a636910fe",
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.2-aarch64.tar.gz",
"build_number": "252.25557.34"
},
"dataspell": {
"update-channel": "DataSpell RELEASE",
"url-template": "https://download.jetbrains.com/python/dataspell-{version}-aarch64.tar.gz",
"version": "2025.1.2.1",
"sha256": "a982a7e8d5b1c293b68983be792a60a885567e9af825e0fce4b2a4b6ac30c9ae",
"url": "https://download.jetbrains.com/python/dataspell-2025.1.2.1-aarch64.tar.gz",
"build_number": "251.26927.91"
"version": "2025.2",
"sha256": "3c4261682f54a283ce693315dde5f2a472fec91887cf37b8c6b87c73ce245d2c",
"url": "https://download.jetbrains.com/python/dataspell-2025.2-aarch64.tar.gz",
"build_number": "252.23892.514"
},
"gateway": {
"update-channel": "Gateway RELEASE",
@@ -182,10 +182,10 @@
"goland": {
"update-channel": "GoLand RELEASE",
"url-template": "https://download.jetbrains.com/go/goland-{version}-aarch64.tar.gz",
"version": "2025.2",
"sha256": "99a5f3e0455fddf62ce92644cb53906e4600da6d2d2dad89164c594c31faa157",
"url": "https://download.jetbrains.com/go/goland-2025.2-aarch64.tar.gz",
"build_number": "252.23892.449"
"version": "2025.2.0.1",
"sha256": "377439d9cae41631624c848c61fcb91f1034c6997582346388d8d9f806b6e72f",
"url": "https://download.jetbrains.com/go/goland-2025.2.0.1-aarch64.tar.gz",
"build_number": "252.23892.530"
},
"idea-community": {
"update-channel": "IntelliJ IDEA RELEASE",
@@ -223,26 +223,26 @@
"pycharm-community": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-community-{version}-aarch64.tar.gz",
"version": "2025.2",
"sha256": "2aab469f976c4aa7d6686c8cc81d647960a9496ea2f3aed01f1c09448b443efb",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2-aarch64.tar.gz",
"build_number": "252.23892.439"
"version": "2025.2.0.1",
"sha256": "820f8f1a749d2544a4e4511ff23e8b55f3fe5faa4e0b715ba44999f784c5ac94",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.0.1-aarch64.tar.gz",
"build_number": "252.23892.515"
},
"pycharm-professional": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}-aarch64.tar.gz",
"version": "2025.2",
"sha256": "27a88a70b8c97be56cdc759cdd7612e55156d67c8bed5a5e23a5af42776bade9",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2-aarch64.tar.gz",
"build_number": "252.23892.439"
"version": "2025.2.0.1",
"sha256": "d5a00d4774ad5861fad457494b644bb0ee4c6017f1f6c881da4afd23b44fdaf7",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.0.1-aarch64.tar.gz",
"build_number": "252.23892.515"
},
"rider": {
"update-channel": "Rider RELEASE",
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}-aarch64.tar.gz",
"version": "2025.1.5",
"sha256": "15b70a589a0827c6408e15eb8e20dfc2e378df66bb528514a577eeae22079553",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.1.5-aarch64.tar.gz",
"build_number": "251.27812.87"
"version": "2025.2",
"sha256": "19b8c6322aac489888afe9eea81dcb6a114b4cc75d525ee3ea8a86899c6b42c7",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2-aarch64.tar.gz",
"build_number": "252.23892.524"
},
"ruby-mine": {
"update-channel": "RubyMine RELEASE",
@@ -297,18 +297,18 @@
"datagrip": {
"update-channel": "DataGrip RELEASE",
"url-template": "https://download.jetbrains.com/datagrip/datagrip-{version}.dmg",
"version": "2025.2.1",
"sha256": "e6c7fd2777ec7f621fa08b6d2d599c84b765d94be9d2b7a62f840ea6253cb9fe",
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.1.dmg",
"build_number": "252.23892.464"
"version": "2025.2.2",
"sha256": "7e3993f6fbf4254e81ce7b19fd173ac6a3f93a7d60b4d897f3fd73136ff7dc2e",
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.2.dmg",
"build_number": "252.25557.34"
},
"dataspell": {
"update-channel": "DataSpell RELEASE",
"url-template": "https://download.jetbrains.com/python/dataspell-{version}.dmg",
"version": "2025.1.2.1",
"sha256": "21915425a004b9148ab5fb634ab919d328a692847f3229bcd060fc46c2b91e76",
"url": "https://download.jetbrains.com/python/dataspell-2025.1.2.1.dmg",
"build_number": "251.26927.91"
"version": "2025.2",
"sha256": "36bd810a0ab4fab0edcc135ef472a731f55c25af80d40b1e6d36a833302d525c",
"url": "https://download.jetbrains.com/python/dataspell-2025.2.dmg",
"build_number": "252.23892.514"
},
"gateway": {
"update-channel": "Gateway RELEASE",
@@ -321,10 +321,10 @@
"goland": {
"update-channel": "GoLand RELEASE",
"url-template": "https://download.jetbrains.com/go/goland-{version}.dmg",
"version": "2025.2",
"sha256": "c42e150a88b9d9ef033a7ff3678eb891408668afe83179d4f678bb674dc8e424",
"url": "https://download.jetbrains.com/go/goland-2025.2.dmg",
"build_number": "252.23892.449"
"version": "2025.2.0.1",
"sha256": "67056fa41a9e72b0d0a268f648d3dae6ba0304beae8883cf97bf95ab875195cd",
"url": "https://download.jetbrains.com/go/goland-2025.2.0.1.dmg",
"build_number": "252.23892.530"
},
"idea-community": {
"update-channel": "IntelliJ IDEA RELEASE",
@@ -362,26 +362,26 @@
"pycharm-community": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-community-{version}.dmg",
"version": "2025.2",
"sha256": "ee808240caab0d50932fe25cd3d93aeeb8a531bfbc5b034f0eff72716c3eb6a5",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.dmg",
"build_number": "252.23892.439"
"version": "2025.2.0.1",
"sha256": "0fa4e9c93bcb1f0d56dd7faecbb01b38d3c07fbbcf4fc8c0ad4dc5dc2f15b5a9",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.0.1.dmg",
"build_number": "252.23892.515"
},
"pycharm-professional": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}.dmg",
"version": "2025.2",
"sha256": "66c6ae1e9e6531bc87f7527221d06647ce18fea15484ad9f371cc51f99a271a0",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.dmg",
"build_number": "252.23892.439"
"version": "2025.2.0.1",
"sha256": "440e613cc7e9d02ea27c921168b27a120e0eed5d084d878a6e7f9af3c874ac1a",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.0.1.dmg",
"build_number": "252.23892.515"
},
"rider": {
"update-channel": "Rider RELEASE",
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}.dmg",
"version": "2025.1.5",
"sha256": "ed39b7f3770bb186014e8cdd6e314b4dfbb0f90e8d24be8b175fbf71ef7957ac",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.1.5.dmg",
"build_number": "251.27812.87"
"version": "2025.2",
"sha256": "c03da6f4c519e1c697ada502f43d1152e41614262970cbbf4df15d2f470658f3",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.dmg",
"build_number": "252.23892.524"
},
"ruby-mine": {
"update-channel": "RubyMine RELEASE",
@@ -436,18 +436,18 @@
"datagrip": {
"update-channel": "DataGrip RELEASE",
"url-template": "https://download.jetbrains.com/datagrip/datagrip-{version}-aarch64.dmg",
"version": "2025.2.1",
"sha256": "865a887cc89076eac601bc073e74d6cb1b5711aaf8f4c39a2f7bd18648d9cc6e",
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.1-aarch64.dmg",
"build_number": "252.23892.464"
"version": "2025.2.2",
"sha256": "eec04b3602062cf5dd6be20b0c77ce4a384c0727bd43403d1eb9646b268439f6",
"url": "https://download.jetbrains.com/datagrip/datagrip-2025.2.2-aarch64.dmg",
"build_number": "252.25557.34"
},
"dataspell": {
"update-channel": "DataSpell RELEASE",
"url-template": "https://download.jetbrains.com/python/dataspell-{version}-aarch64.dmg",
"version": "2025.1.2.1",
"sha256": "97588c238523b2c492a322a0751173f908f31eb27e0d38f81dd51f670690a9a5",
"url": "https://download.jetbrains.com/python/dataspell-2025.1.2.1-aarch64.dmg",
"build_number": "251.26927.91"
"version": "2025.2",
"sha256": "484c6889a929c3ec572711164600ad93c927b57a3487636d672db77a1e9483f5",
"url": "https://download.jetbrains.com/python/dataspell-2025.2-aarch64.dmg",
"build_number": "252.23892.514"
},
"gateway": {
"update-channel": "Gateway RELEASE",
@@ -460,10 +460,10 @@
"goland": {
"update-channel": "GoLand RELEASE",
"url-template": "https://download.jetbrains.com/go/goland-{version}-aarch64.dmg",
"version": "2025.2",
"sha256": "043600466d739338b9d24a472547b3d7133505165032459e9fe6f913b6920eac",
"url": "https://download.jetbrains.com/go/goland-2025.2-aarch64.dmg",
"build_number": "252.23892.449"
"version": "2025.2.0.1",
"sha256": "e35b7f2ec7e63c0c348e172ddf10410ff108189c4a4a1e4dcfc75c757908b12b",
"url": "https://download.jetbrains.com/go/goland-2025.2.0.1-aarch64.dmg",
"build_number": "252.23892.530"
},
"idea-community": {
"update-channel": "IntelliJ IDEA RELEASE",
@@ -501,26 +501,26 @@
"pycharm-community": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-community-{version}-aarch64.dmg",
"version": "2025.2",
"sha256": "9fd11b6e5fe28d5e3cac86cac554b4e04f775254d141f3c7ec07ee9801ce8a00",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2-aarch64.dmg",
"build_number": "252.23892.439"
"version": "2025.2.0.1",
"sha256": "acdbfd143a7da358cbd9b1410eff8763f9650c58f9a976d80a9aa8977f358e00",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.0.1-aarch64.dmg",
"build_number": "252.23892.515"
},
"pycharm-professional": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}-aarch64.dmg",
"version": "2025.2",
"sha256": "54b761294795146c575a22ea5d53bc7c0a05ab906836b544ff6b830b4b79b41b",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2-aarch64.dmg",
"build_number": "252.23892.439"
"version": "2025.2.0.1",
"sha256": "9d3265dd828c45681ba608ee2325b3b560396b7048290d7c69714cbc99e86fd7",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.0.1-aarch64.dmg",
"build_number": "252.23892.515"
},
"rider": {
"update-channel": "Rider RELEASE",
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}-aarch64.dmg",
"version": "2025.1.5",
"sha256": "74decd2d7fb0ee97587e9de165b1630bac8a9ba8ad55aa8a64e9c5e173551adb",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.1.5-aarch64.dmg",
"build_number": "251.27812.87"
"version": "2025.2",
"sha256": "ec385a005fb740e6b12a5232ae57c7d189b3d32ac4813734b04d4257421368a3",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2-aarch64.dmg",
"build_number": "252.23892.524"
},
"ruby-mine": {
"update-channel": "RubyMine RELEASE",
@@ -324,6 +324,9 @@ rec {
lttng-ust_2_12
musl
]
++ lib.optionals stdenv.hostPlatform.isLinux [
xorg.xcbutilkeysyms
]
++ lib.optionals (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch) [
expat
libxml2
File diff suppressed because it is too large Load Diff
@@ -13,13 +13,13 @@
}:
mkLibretroCore {
core = "ppsspp";
version = "0-unstable-2025-08-11";
version = "0-unstable-2025-08-19";
src = fetchFromGitHub {
owner = "hrydgard";
repo = "ppsspp";
rev = "9912aa5c8d3b95165c56e29ffaa50069aeae0860";
hash = "sha256-5snyC0hk1VqYH4aqz4E7ukPyOLrDVZwDsw3LPdHDSzM=";
rev = "e526986da2b491763e2d715741f1babeef68f1a6";
hash = "sha256-aPYsgb/nO9RzSGL+evMiCoYz3+08HC83An3rMoCWWMw=";
fetchSubmodules = true;
};
@@ -9,6 +9,14 @@
callPackage,
}:
let
plugins = [
"ArchiSteamFarm.OfficialPlugins.ItemsMatcher"
"ArchiSteamFarm.OfficialPlugins.MobileAuthenticator"
"ArchiSteamFarm.OfficialPlugins.Monitoring"
"ArchiSteamFarm.OfficialPlugins.SteamTokenDumper"
];
in
buildDotnetModule rec {
pname = "ArchiSteamFarm";
# nixpkgs-update: no auto update
@@ -26,7 +34,12 @@ buildDotnetModule rec {
nugetDeps = ./deps.json;
projectFile = "ArchiSteamFarm.sln";
projectFile = [
"ArchiSteamFarm"
]
++ plugins;
testProjectFile = "ArchiSteamFarm.Tests";
executable = "ArchiSteamFarm";
enableParallelBuilding = false;
@@ -50,7 +63,7 @@ buildDotnetModule rec {
doCheck = true;
preInstall = ''
installPhase = ''
dotnetProjectFiles=(ArchiSteamFarm)
# A mutable path, with this directory tree must be set. By default, this would point at the nix store causing errors.
@@ -58,20 +71,19 @@ buildDotnetModule rec {
--run 'mkdir -p ~/.config/archisteamfarm/{config,logs,plugins}'
--set "ASF_PATH" "~/.config/archisteamfarm"
)
'';
postInstall = ''
dotnetInstallPhase
buildPlugin() {
echo "Publishing plugin $1"
dotnet publish $1 -p:ContinuousIntegrationBuild=true -p:Deterministic=true \
--output $out/lib/ArchiSteamFarm/plugins/$1 --configuration Release \
$dotnetFlags $dotnetInstallFlags
dotnetProjectFiles=("$1")
dotnetInstallPath="$out/lib/ArchiSteamFarm/plugins/$1"
dotnetInstallPhase
}
buildPlugin ArchiSteamFarm.OfficialPlugins.ItemsMatcher
buildPlugin ArchiSteamFarm.OfficialPlugins.MobileAuthenticator
buildPlugin ArchiSteamFarm.OfficialPlugins.Monitoring
buildPlugin ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
''
+ lib.concatMapStrings (p: "buildPlugin ${p}\n") plugins
+ ''
chmod +x $out/lib/ArchiSteamFarm/ArchiSteamFarm.dll
wrapDotnetProgram $out/lib/ArchiSteamFarm/ArchiSteamFarm.dll $out/bin/ArchiSteamFarm
File diff suppressed because it is too large Load Diff
@@ -9,11 +9,11 @@
buildMozillaMach rec {
pname = "firefox";
version = "140.1.0esr";
version = "140.2.0esr";
applicationName = "Firefox ESR";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
sha512 = "1b5caff9b381cd449c40d148542501f7a31a7151a3f2f888e789c9743af8ee1d1eddbd970f8c0054902d1e1d739221db0cfcf1dc6ab704bb83bbb7b7b6a20055";
sha512 = "e4597c4d83ae1a84fce9248fe6ca652af6c3615607fc8973bd917bfdbd2abbceca937fe4c629c0cdc89fa0a5c846b5e2d8a4b44dabf7feb201deb382de0ccc5b";
};
meta = {
@@ -9,10 +9,10 @@
buildMozillaMach rec {
pname = "firefox";
version = "141.0.3";
version = "142.0";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
sha512 = "b660b018840c41a254734b4847a791f1a9fd2f72dbea825ea5971fd0b3269a43f1f4be1ccf4a53f7809b6b98398f4e04a142e57f8882d6590bab636ef75002f6";
sha512 = "b0c1c766083a30a92b77dcf16a584d9fb341cd811d21c3a34da4cd0d714fd6adc73b608092d66058697bc4562faacc44859153e49ffdeb6e14e059e59f2ea246";
};
meta = {
@@ -9,7 +9,7 @@
(
(buildMozillaMach rec {
pname = "floorp";
packageVersion = "11.29.0";
packageVersion = "11.30.0";
applicationName = "Floorp";
binaryName = "floorp";
branding = "browser/branding/official";
@@ -17,14 +17,14 @@
allowAddonSideload = true;
# Must match the contents of `browser/config/version.txt` in the source tree
version = "128.13.0";
version = "128.14.0";
src = fetchFromGitHub {
owner = "Floorp-Projects";
repo = "Floorp";
fetchSubmodules = true;
rev = "v${packageVersion}";
hash = "sha256-uTTI9n99P4hHDf849lR7oiNGLbCa03ivjE1xF0gyT4Y=";
hash = "sha256-4IAN0S9JWjaGXtnRUJz3HqUm+ZWL7KmryLu8ojSXiqg=";
};
extraConfigureFlags = [
@@ -1,11 +1,11 @@
{
"packageVersion": "141.0.3-1",
"packageVersion": "142.0-1",
"source": {
"rev": "141.0.3-1",
"hash": "sha256-0SosHE51IkDyg37fHnlJKn7IbMwr1iSXHr5Wuv2WkPg="
"rev": "142.0-1",
"hash": "sha256-/bn9xeDxnJCQol/E8rhS8RVhpUj7UN+QScSIzLFnZ/o="
},
"firefox": {
"version": "141.0.3",
"hash": "sha512-tmCwGIQMQaJUc0tIR6eR8an9L3Lb6oJepZcf0LMmmkPx9L4cz0pT94Cba5g5j04EoULlf4iC1lkLq2Nu91AC9g=="
"version": "142.0",
"hash": "sha512-sMHHZgg6MKkrd9zxalhNn7NBzYEdIcOjTaTNDXFP1q3HO2CAktZgWGl7xFYvqsxEhZFT5J/9624U4Fnlny6iRg=="
}
}
@@ -73,7 +73,7 @@ let
mainProgram = "discord";
maintainers = with lib.maintainers; [
artturin
donteatoreo
FlameFlag
infinidoge
jopejoe1
Scrumplex
@@ -46,19 +46,19 @@ let
callPackage
(import ./generic.nix rec {
pname = "singularity-ce";
version = "4.3.2";
version = "4.3.3";
projectName = "singularity";
src = fetchFromGitHub {
owner = "sylabs";
repo = "singularity";
tag = "v${version}";
hash = "sha256-lYYY449agINk1cwRl06gstGhkwQKaeZdLnwT6bW6HY4=";
hash = "sha256-gQuakfQgB5gLVYLmmThy06CyGBhlBOCJI9jaEm7ucf0=";
};
# Override vendorHash with overrideAttrs.
# See https://nixos.org/manual/nixpkgs/unstable/#buildGoModule-vendorHash
vendorHash = "sha256-3CEkaG8k6W1/8v8tsVLXdSV68QHUgn5/BEd8qjkW7ik=";
vendorHash = "sha256-z8bLbudm1b5xFCAUpL/m90vxwLJlBqpQCjAEjSYOQH8=";
extraConfigureFlags = [
# Do not build squashfuse from the Git submodule sources, use Nixpkgs provided version
@@ -1,13 +0,0 @@
diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
index 769ac0379045..160734dd386d 100644
--- a/build/moz.configure/toolchain.configure
+++ b/build/moz.configure/toolchain.configure
@@ -233,7 +233,7 @@ with only_when(host_is_osx | target_is_osx):
)
def mac_sdk_min_version():
- return "15.4"
+ return "15.2"
@depends(
"--with-macos-sdk",
@@ -316,12 +316,15 @@ buildStdenv.mkDerivation {
# https://hg-edge.mozilla.org/mozilla-central/rev/aa8a29bd1fb9
./139-wayland-drag-animation.patch
]
++ lib.optionals (lib.versionAtLeast version "139" && lib.versionOlder version "141.0.2") [
./139-relax-apple-sdk.patch
]
++ lib.optionals (lib.versionAtLeast version "141.0.2") [
./142-relax-apple-sdk.patch
]
++
lib.optionals
(
lib.versionAtLeast version "141.0.2"
|| (lib.versionAtLeast version "140.2.0" && lib.versionOlder version "141.0")
)
[
./142-relax-apple-sdk.patch
]
++ lib.optionals (lib.versionOlder version "139") [
# Fix for missing vector header on macOS
# https://bugzilla.mozilla.org/show_bug.cgi?id=1959377
@@ -1,5 +1,9 @@
# shellcheck shell=bash
_dotnetIsSolution() {
dotnet sln ${1:+"$1"} list 2>/dev/null
}
dotnetConfigurePhase() {
echo "Executing dotnetConfigureHook"
@@ -108,9 +112,12 @@ dotnetBuildPhase() {
dotnetBuild() {
local -r projectFile="${1-}"
local useRuntime=
_dotnetIsSolution "$projectFile" || useRuntime=1
for runtimeId in "${runtimeIds[@]}"; do
local runtimeIdFlags=()
if [[ $projectFile == *.csproj || -n ${dotnetSelfContainedBuild-} ]]; then
if [[ -n $useRuntime ]]; then
runtimeIdFlags+=("--runtime" "$runtimeId")
fi
@@ -188,9 +195,12 @@ dotnetCheckPhase() {
local projectFile runtimeId
for projectFile in "${testProjectFiles[@]-${projectFiles[@]}}"; do
local useRuntime=
_dotnetIsSolution "$projectFile" || useRuntime=1
for runtimeId in "${runtimeIds[@]}"; do
local runtimeIdFlags=()
if [[ $projectFile == *.csproj ]]; then
if [[ -n $useRuntime ]]; then
runtimeIdFlags=("--runtime" "$runtimeId")
fi
@@ -356,9 +366,12 @@ dotnetInstallPhase() {
dotnetPublish() {
local -r projectFile="${1-}"
local useRuntime=
_dotnetIsSolution "$projectFile" || useRuntime=1
for runtimeId in "${runtimeIds[@]}"; do
runtimeIdFlags=()
if [[ $projectFile == *.csproj || -n ${dotnetSelfContainedBuild-} ]]; then
local runtimeIdFlags=()
if [[ -n $useRuntime ]]; then
runtimeIdFlags+=("--runtime" "$runtimeId")
fi
@@ -380,7 +393,18 @@ dotnetInstallPhase() {
dotnetPack() {
local -r projectFile="${1-}"
local useRuntime=
_dotnetIsSolution "$projectFile" || useRuntime=1
for runtimeId in "${runtimeIds[@]}"; do
local runtimeIdFlags=()
if [[ -n $useRuntime ]]; then
runtimeIdFlags+=("--runtime" "$runtimeId")
# set RuntimeIdentifier because --runtime is broken:
# https://github.com/dotnet/sdk/issues/13983
runtimeIdFlags+=(-p:RuntimeIdentifier="$runtimeId")
fi
dotnet pack ${1+"$projectFile"} \
-maxcpucount:"$maxCpuFlag" \
-p:ContinuousIntegrationBuild=true \
@@ -390,7 +414,7 @@ dotnetInstallPhase() {
--configuration "$dotnetBuildType" \
--no-restore \
--no-build \
--runtime "$runtimeId" \
"${runtimeIdFlags[@]}" \
"${flags[@]}" \
"${packFlags[@]}"
done
@@ -31,6 +31,8 @@ args@{
# and `urls` can be specified, not both.
url ? "",
urls ? [ ],
# Metadata
meta ? { },
# The rest of the arguments are just forwarded to `fetchurl`.
...
}:
@@ -71,6 +73,7 @@ let
"classifier"
"repos"
"url"
"meta"
]
// {
urls = urls_;
@@ -79,7 +82,7 @@ let
);
in
stdenv.mkDerivation {
inherit pname version;
inherit pname version meta;
dontUnpack = true;
# By moving the jar to $out/share/java we make it discoverable by java
# packages packages that mention this derivation in their buildInputs.
+215
View File
@@ -0,0 +1,215 @@
{
lib,
rustPlatform,
fetchFromGitHub,
fetchpatch,
makeWrapper,
binaryen,
cargo,
libfido2,
nodejs,
openssl,
pkg-config,
pnpm_10,
rustc,
stdenv,
xdg-utils,
wasm-pack,
nixosTests,
}:
{
version,
hash,
cargoHash,
pnpmHash,
vendorHash,
wasm-bindgen-cli,
buildGoModule,
withRdpClient ? true,
extPatches ? [ ],
}:
let
# This repo has a private submodule "e" which fetchgit cannot handle without failing.
src = fetchFromGitHub {
owner = "gravitational";
repo = "teleport";
tag = "v${version}";
inherit hash;
};
pname = "teleport";
inherit version;
rdpClient = rustPlatform.buildRustPackage (finalAttrs: {
pname = "teleport-rdpclient";
inherit cargoHash;
inherit version src;
buildAndTestSubdir = "lib/srv/desktop/rdp/rdpclient";
buildInputs = [ openssl ];
nativeBuildInputs = [ pkg-config ];
# https://github.com/NixOS/nixpkgs/issues/161570 ,
# buildRustPackage sets strictDeps = true;
nativeCheckInputs = finalAttrs.buildInputs;
OPENSSL_NO_VENDOR = "1";
postInstall = ''
mkdir -p $out/include
cp ${finalAttrs.buildAndTestSubdir}/librdprs.h $out/include/
'';
});
webassets = stdenv.mkDerivation {
pname = "teleport-webassets";
inherit src version;
cargoDeps = rustPlatform.fetchCargoVendor {
inherit src;
hash = cargoHash;
};
pnpmDeps = pnpm_10.fetchDeps {
inherit src pname version;
fetcherVersion = 1;
hash = pnpmHash;
};
nativeBuildInputs = [
binaryen
cargo
nodejs
pnpm_10.configHook
rustc
rustc.llvmPackages.lld
rustPlatform.cargoSetupHook
wasm-bindgen-cli
wasm-pack
];
patches = [
./disable-wasm-opt-for-ironrdp.patch
];
configurePhase = ''
runHook preConfigure
export HOME=$(mktemp -d)
runHook postConfigure
'';
buildPhase = ''
PATH=$PATH:$PWD/node_modules/.bin
pushd web/packages
pushd shared
# https://github.com/gravitational/teleport/blob/6b91fe5bbb9e87db4c63d19f94ed4f7d0f9eba43/web/packages/teleport/README.md?plain=1#L18-L20
RUST_MIN_STACK=16777216 wasm-pack build ./libs/ironrdp --target web --mode no-install
popd
pushd teleport
vite build
popd
popd
'';
installPhase = ''
mkdir -p $out
cp -R webassets/. $out
'';
};
in
buildGoModule (finalAttrs: {
inherit pname src version;
inherit vendorHash;
proxyVendor = true;
subPackages = [
"tool/tbot"
"tool/tctl"
"tool/teleport"
"tool/tsh"
];
tags = [
"libfido2"
"webassets_embed"
]
++ lib.optional withRdpClient "desktop_access_rdp";
buildInputs = [
openssl
libfido2
];
nativeBuildInputs = [
makeWrapper
pkg-config
];
patches = extPatches ++ [
./0001-fix-add-nix-path-to-exec-env.patch
./rdpclient.patch
./tsh.patch
];
# Reduce closure size for client machines
outputs = [
"out"
"client"
];
preBuild = ''
cp -r ${webassets} webassets
''
+ lib.optionalString withRdpClient ''
ln -s ${rdpClient}/lib/* lib/
ln -s ${rdpClient}/include/* lib/srv/desktop/rdp/rdpclient/
'';
# Multiple tests fail in the build sandbox
# due to trying to spawn nixbld's shell (/noshell), etc.
doCheck = false;
postInstall = ''
mkdir -p $client/bin
mv {$out,$client}/bin/tsh
# make xdg-open overrideable at runtime
wrapProgram $client/bin/tsh --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
ln -s {$client,$out}/bin/tsh
'';
doInstallCheck = true;
installCheckPhase = ''
export HOME=$(mktemp -d)
$out/bin/tsh version | grep ${version} > /dev/null
$client/bin/tsh version | grep ${version} > /dev/null
$out/bin/tbot version | grep ${version} > /dev/null
$out/bin/tctl version | grep ${version} > /dev/null
$out/bin/teleport version | grep ${version} > /dev/null
'';
passthru.tests = nixosTests.teleport;
meta = {
description = "Certificate authority and access plane for SSH, Kubernetes, web applications, and databases";
homepage = "https://goteleport.com/";
license = lib.licenses.agpl3Plus;
maintainers = with lib.maintainers; [
arianvp
justinas
sigma
tomberek
freezeboy
techknowlogick
juliusfreudenberger
];
platforms = lib.platforms.unix;
# go-libfido2 is broken on platforms with less than 64-bit because it defines an array
# which occupies more than 31 bits of address space.
broken = stdenv.hostPlatform.parsed.cpu.bits < 64;
};
})
+1 -1
View File
@@ -35,7 +35,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
homepage = "https://alt-tab-macos.netlify.app";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [
donteatoreo
FlameFlag
emilytrau
];
platforms = lib.platforms.darwin;
+9 -9
View File
@@ -1,11 +1,11 @@
{ "_comment": "@generated by pkgs/by-name/bu/buck2/update.sh"
, "_prelude": "sha256-eU4EZ9OqJVUH/YPFctJZM+KZK70IEslr2qLUUvz3ctM="
, "buck2-x86_64-linux": "sha256-r/5txsY7/i0fQaQsH40YdAhSD/bXtr5aGlAuxaOs8jg="
, "rust-project-x86_64-linux": "sha256-XJFhaxJvOklMMO3emtdJS4zNu989HLCIU9qBP31XpCo="
, "buck2-x86_64-darwin": "sha256-9SW0xn7w2dH81oHwze/ysnQyrIAgu8+1WJuXMmxslFo="
, "rust-project-x86_64-darwin": "sha256-MvYv96OtOU7NEZKXf3gDvCjEcbegLI+1HFN7XBdPAXA="
, "buck2-aarch64-linux": "sha256-wlmkgWdotvqxmflzoJG266weCsjxtM0mVO0xf7vKVr0="
, "rust-project-aarch64-linux": "sha256-7zhO+s8LOuDj5ysyADkfqRIZiOG9ewBtfcB43sPfVc4="
, "buck2-aarch64-darwin": "sha256-0bNtPX8TLTCxf7rEeiUYtJUbzRmgRdgHrv98mmmM/Rg="
, "rust-project-aarch64-darwin": "sha256-a4OLLLYJjTBskXfB7OWqULPkV5amgDEHudJKRLGwuAU="
, "_prelude": "sha256-cyuOMi8x8q9gd6p1obnYYDVPxyONZ+y41AFXvSbUjC0="
, "buck2-x86_64-linux": "sha256-l/W6Bza01IyOFvHb2rlBY72Tl+JNgwmkO8EhUPWrxBY="
, "rust-project-x86_64-linux": "sha256-3UGgvQKSm6Qohk/NDRU1fM+eFEpqM9XMLxL2AkXXrW0="
, "buck2-x86_64-darwin": "sha256-wHk/tJJbupMsrcmXXNVXurfLY2TOSssMnuTZ7LNjASY="
, "rust-project-x86_64-darwin": "sha256-ePawMIfltPRK3mJJxI1BvGs6b2vIcgWzW2XTJykUsdI="
, "buck2-aarch64-linux": "sha256-dhqBYFQ6e5nWSrbUMUFoato1sb4bl95JcdqcgeC5mcs="
, "rust-project-aarch64-linux": "sha256-Zduna35ieycN80K2wh5OkcSaOWiqhxLJkduBk7f2XqU="
, "buck2-aarch64-darwin": "sha256-XtGs7g64s76AYhpFDbqSuSlblRauxJM0PaAk1MNNgxA="
, "rust-project-aarch64-darwin": "sha256-CkyLLv41iJTKHVB0e355ZO2MV7NzQeiF1gtWEGF5oAY="
}
+2 -2
View File
@@ -44,7 +44,7 @@ let
buildHashes = builtins.fromJSON (builtins.readFile ./hashes.json);
# our version of buck2; this should be a git tag
version = "2025-05-06";
version = "2025-08-15";
# map our platform name to the rust toolchain suffix
# NOTE (aseipp): must be synchronized with update.sh!
@@ -82,7 +82,7 @@ let
# tooling
prelude-src =
let
prelude-hash = "48c249f8c7b99ff501d6e857754760315072b306";
prelude-hash = "892cb85f5fc3258c7e4f89a836821ec4b8c7ee44";
name = "buck2-prelude-${version}.tar.gz";
hash = buildHashes."_prelude";
url = "https://github.com/facebook/buck2-prelude/archive/${prelude-hash}.tar.gz";
+1 -1
View File
@@ -21,7 +21,7 @@ buildDotnetGlobalTool {
changelog = "https://github.com/waf/CSharpRepl/blob/main/CHANGELOG.md";
license = lib.licenses.mpl20;
platforms = lib.platforms.unix;
maintainers = with lib.maintainers; [ donteatoreo ];
maintainers = with lib.maintainers; [ FlameFlag ];
mainProgram = "csharprepl";
};
}
+3 -3
View File
@@ -21,16 +21,16 @@
let
self = rustPlatform.buildRustPackage {
pname = "czkawka";
version = "9.0.0";
version = "10.0.0";
src = fetchFromGitHub {
owner = "qarmin";
repo = "czkawka";
tag = self.version;
hash = "sha256-ePiHDfQ1QC3nff8uWE0ggiTuulBomuoZ3ta0redUYXY=";
hash = "sha256-r6EdTv95R8+XhaoA9OeqnGGl09kz8kMJaDPDRV6wQe8=";
};
cargoHash = "sha256-Djvb5Hen6XPm6aJuwa6cGPojz9+kXXidysr3URDwDFM=";
cargoHash = "sha256-o4XjHJ7eCckTXqjz1tS4OSCP8DZzjxfWoMMy5Gab2rI=";
nativeBuildInputs = [
gobject-introspection
+2 -2
View File
@@ -9,14 +9,14 @@
}:
python3.pkgs.buildPythonApplication rec {
pname = "dooit";
version = "3.2.3";
version = "3.3.3";
pyproject = true;
src = fetchFromGitHub {
owner = "dooit-org";
repo = "dooit";
tag = "v${version}";
hash = "sha256-bI9X+2tTLnQwxfsnBmy2vBI3lJ4UX418zOy3oniVKWc=";
hash = "sha256-MWdih+j7spUVEWXCBzF2J/FVXK0TQ8VhrJNDhNfxpQE=";
};
build-system = with python3.pkgs; [ poetry-core ];
+2 -2
View File
@@ -5,7 +5,7 @@
}:
let
pname = "e1s";
version = "1.0.49";
version = "1.0.50";
in
buildGoModule {
inherit pname version;
@@ -14,7 +14,7 @@ buildGoModule {
owner = "keidarcy";
repo = "e1s";
tag = "v${version}";
hash = "sha256-7GHNhX0hiRHQ0OH1DuHG9SPcTmm8W5CLU1Idx1pJnwE=";
hash = "sha256-ntuFMxuCrA0meE8tOnA9oPLLvYfXyhQgebBuKELeDgQ=";
};
vendorHash = "sha256-1lise/u40Q8W9STsuyrWIbhf2HY+SFCytUL1PTSWvfY=";
+3 -3
View File
@@ -9,16 +9,16 @@
buildGoModule rec {
pname = "flyctl";
version = "0.3.169";
version = "0.3.171";
src = fetchFromGitHub {
owner = "superfly";
repo = "flyctl";
rev = "v${version}";
hash = "sha256-F2QMQ24+wSKH8zmTFSWsSl9O9+Hc4e7Rmn2K9YXJi4k=";
hash = "sha256-9FJ/n2LoTrQmcO+J3eXxexggFhvP22yYFbrryd0rGtM=";
};
vendorHash = "sha256-boaz0fR97NtU/wzIE2uPbDmP89ovkzNy8bpe0nrItMw=";
vendorHash = "sha256-uXCy/8HkwqGnQEoNtyOErLw9byG8SWc5YdzYZXwjhW4=";
subPackages = [ "." ];
+1 -1
View File
@@ -57,7 +57,7 @@ python3Packages.buildPythonApplication {
mainProgram = "gallery-dl";
maintainers = with lib.maintainers; [
dawidsowa
donteatoreo
FlameFlag
lucasew
];
};
+1 -1
View File
@@ -56,7 +56,7 @@ buildNpmPackage (finalAttrs: {
homepage = "https://github.com/google-gemini/gemini-cli";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [
donteatoreo
FlameFlag
taranarmo
];
platforms = lib.platforms.all;
+5 -4
View File
@@ -9,13 +9,13 @@
buildGoModule (finalAttrs: {
pname = "grype";
version = "0.92.2";
version = "0.98.0";
src = fetchFromGitHub {
owner = "anchore";
repo = "grype";
tag = "v${finalAttrs.version}";
hash = "sha256-OySQO/ZJvaD4mrIRqymBJDXdPC8ZWCz+ELrMXvmQPvk=";
hash = "sha256-EJEQHi3N1O5rl0TWxRR/yUkZpbZv4++W7NbUbVEN8e8=";
# populate values that require us to use git. By doing this in postFetch we
# can delete .git afterwards and maintain better reproducibility of the src.
leaveDotGit = true;
@@ -30,7 +30,7 @@ buildGoModule (finalAttrs: {
proxyVendor = true;
vendorHash = "sha256-Dp+BVwlBqMbAZivOHQWALMrLVtAncGT/rvbbIk1BFFQ=";
vendorHash = "sha256-dSIArK9m7oFu497/wpiiwLDLNk8IxNfYC3RHCQcMviM=";
nativeBuildInputs = [ installShellFiles ];
@@ -75,7 +75,8 @@ buildGoModule (finalAttrs: {
substituteInPlace test/cli/db_providers_test.go \
--replace-fail "TestDBProviders" "SkipDBProviders"
substituteInPlace grype/presenter/cyclonedx/presenter_test.go \
--replace-fail "TestCycloneDxPresenterDir" "SkipCycloneDxPresenterDir"
--replace-fail "TestCycloneDxPresenterDir" "SkipCycloneDxPresenterDir" \
--replace-fail "Test_CycloneDX_Valid" "Skip_CycloneDX_Valid"
# remove tests that depend on docker
substituteInPlace test/cli/cmd_test.go \
+1 -1
View File
@@ -31,7 +31,7 @@ stdenvNoCC.mkDerivation rec {
description = "Ultra-light MacOS utility that helps hide menu bar icons";
homepage = "https://github.com/dwarvesf/hidden";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ donteatoreo ];
maintainers = with lib.maintainers; [ FlameFlag ];
platforms = lib.platforms.darwin;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
+10 -6
View File
@@ -1,11 +1,15 @@
GEM
remote: https://rubygems.org/
specs:
hiera-eyaml (3.0.0)
highline (~> 1.6.19)
optimist
highline (1.6.21)
optimist (3.0.0)
hiera-eyaml (4.3.0)
highline (>= 2.1, < 4)
optimist (~> 3.1)
highline (3.1.2)
reline
io-console (0.8.1)
optimist (3.2.1)
reline (0.6.2)
io-console (~> 0.5)
PLATFORMS
ruby
@@ -14,4 +18,4 @@ DEPENDENCIES
hiera-eyaml
BUNDLED WITH
2.1.4
2.6.9
+30 -6
View File
@@ -8,27 +8,51 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "049rxnwyivqgyjl0sjg7cb2q44ic0wsml288caspd1ps8v31gl18";
sha256 = "02mb113yjzwb6jkckybzsiq803c688r9xpv4w1nxbckhkpma5sqr";
type = "gem";
};
version = "3.0.0";
version = "4.3.0";
};
highline = {
dependencies = [ "reline" ];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "06bml1fjsnrhd956wqq5k3w8cyd09rv1vixdpa3zzkl6xs72jdn1";
sha256 = "0jmvyhjp2v3iq47la7w6psrxbprnbnmzz0hxxski3vzn356x7jv7";
type = "gem";
};
version = "1.6.21";
version = "3.1.2";
};
io-console = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "1jszj95hazqqpnrjjzr326nn1j32xmsc9xvd97mbcrrgdc54858y";
type = "gem";
};
version = "0.8.1";
};
optimist = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "05jxrp3nbn5iilc1k7ir90mfnwc5abc9h78s5rpm3qafwqxvcj4j";
sha256 = "0kp3f8g7g7cbw5vfkmpdv71pphhpcxk3lpc892mj9apkd7ys1y4c";
type = "gem";
};
version = "3.0.0";
version = "3.2.1";
};
reline = {
dependencies = [ "io-console" ];
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0ii8l0q5zkang3lxqlsamzfz5ja7jc8ln905isfdawl802k2db8x";
type = "gem";
};
version = "0.6.2";
};
}
+1 -1
View File
@@ -14,7 +14,7 @@ bundlerEnv {
meta = with lib; {
description = "Per-value asymmetric encryption of sensitive data for Hiera";
homepage = "https://github.com/TomPoulton/hiera-eyaml";
homepage = "https://github.com/voxpupuli/hiera-eyaml";
license = licenses.mit;
maintainers = with maintainers; [
benley
+2 -2
View File
@@ -2,8 +2,8 @@
lib,
appimageTools,
fetchurl,
version ? "0.9.12.0",
hash ? "sha256-nWt/DOzoQ05F+uk9sDSumb19vQib1Vh/8ywB/d87epc=",
version ? "0.9.12.1",
hash ? "sha256-6Lun0HyfAi7anivgGsGdUPPX9kZrWwh8fq+qvVL/CdU=",
}:
let
+3 -2
View File
@@ -19,14 +19,14 @@
python313Packages.buildPythonApplication rec {
pname = "high-tide";
version = "0.1.8";
version = "1.0.0";
pyproject = false;
src = fetchFromGitHub {
owner = "Nokse22";
repo = "high-tide";
tag = "v${version}";
hash = "sha256-QcTK5E8rz/JcC40CCCK8G7PUZ6UAg53UPmxyLBXNHxY=";
hash = "sha256-lvfEqXXlDuW+30iTQ0FddcnAMZRM0BYeuxLN4++xs/0=";
};
nativeBuildInputs = [
@@ -71,6 +71,7 @@ python313Packages.buildPythonApplication rec {
license = with lib.licenses; [ gpl3Plus ];
mainProgram = "high-tide";
maintainers = with lib.maintainers; [
drafolin
nilathedragon
nyabinary
griffi-gh
+1 -1
View File
@@ -34,7 +34,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
description = "Powerful menu bar manager for macOS";
homepage = "https://icemenubar.app/";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ donteatoreo ];
maintainers = with lib.maintainers; [ FlameFlag ];
platforms = lib.platforms.darwin;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
+1 -1
View File
@@ -34,7 +34,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
license = lib.licenses.gpl3;
maintainers = with lib.maintainers; [
arkivm
donteatoreo
FlameFlag
stepbrobd
];
mainProgram = "iina";
+12 -12
View File
@@ -1,26 +1,26 @@
{
"version": "1.138.0",
"hash": "sha256-yOGqQMy2PdGlHAtfuLB74UokGIwzi3yCiaBOZ/Orsf0=",
"version": "1.138.1",
"hash": "sha256-oaZN0kF82mS25bDSTXRjYnWG9RAMSbCUhXn9t0am96U=",
"components": {
"cli": {
"npmDepsHash": "sha256-NFEAsy1SabGvQMX+k7jIuBLdfjhb3v9x1O2T9EbTPEM=",
"version": "2.2.78"
"npmDepsHash": "sha256-6k83QOdKh+FlVnYvA9j60115oohUMDc2YvGaj/GMukE=",
"version": "2.2.79"
},
"server": {
"npmDepsHash": "sha256-B/j4b0ETfM+K9v757egm1DUTynfnFHb8PVRFhxq1H5Y=",
"version": "1.138.0"
"npmDepsHash": "sha256-4sqWIIGQ8ZW7TvJoNjNNliriuV6Su0askAN6pAq9VFc=",
"version": "1.138.1"
},
"web": {
"npmDepsHash": "sha256-LkGeZPyfJ6wo1O5I13OL9Iz6mjRNXjTNOi5BVoQWQs4=",
"version": "1.138.0"
"npmDepsHash": "sha256-+W8cDgy3qe6RDen8SEdHPNADkKb4zZH8C/Am/bdU42c=",
"version": "1.138.1"
},
"open-api/typescript-sdk": {
"npmDepsHash": "sha256-n1OTaqwfVy3RB6hi2rRGGjSNXsrFRwZMSyKfEuYy57U=",
"version": "1.138.0"
"npmDepsHash": "sha256-GfmFPsnFu7l4EsnPDv4nj5KLkOz8nEJvMT1BE7zIQ3k=",
"version": "1.138.1"
},
"geonames": {
"timestamp": "20250815003647",
"hash": "sha256-GYO+fbdXC2z0scne9kh+JLpp7h9k2w0tkIcyYDbNusA="
"timestamp": "20250818205425",
"hash": "sha256-zZHAomW1C4qReFbhme5dkVnTiLw+jmhZhzuYvoBVBCY="
}
}
}
@@ -0,0 +1,651 @@
diff --git a/yarn.lock b/yarn.lock
index 691942c1..6d3bd8ce 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,11 +2,71 @@
# yarn lockfile v1
+"@parcel/watcher-android-arm64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1"
+ integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==
+
+"@parcel/watcher-darwin-arm64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67"
+ integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==
+
+"@parcel/watcher-darwin-x64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8"
+ integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==
+
+"@parcel/watcher-freebsd-x64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b"
+ integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==
+
+"@parcel/watcher-linux-arm-glibc@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1"
+ integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==
+
+"@parcel/watcher-linux-arm-musl@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e"
+ integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==
+
+"@parcel/watcher-linux-arm64-glibc@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30"
+ integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==
+
+"@parcel/watcher-linux-arm64-musl@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2"
+ integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==
+
"@parcel/watcher-linux-x64-glibc@2.5.1":
version "2.5.1"
resolved "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz"
integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==
+"@parcel/watcher-linux-x64-musl@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee"
+ integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==
+
+"@parcel/watcher-win32-arm64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243"
+ integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==
+
+"@parcel/watcher-win32-ia32@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6"
+ integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==
+
+"@parcel/watcher-win32-x64@2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947"
+ integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==
+
"@parcel/watcher@^2.4.1":
version "2.5.1"
resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz"
@@ -105,7 +165,9 @@ async@^2.6.0:
lodash "^4.17.14"
async@^3.2.3, async@~3.2.0:
- version "3.2.5"
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce"
+ integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==
autoprefixer@9.8:
version "9.8.8"
@@ -155,33 +217,48 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
-braces@^3.0.2:
- version "3.0.2"
+braces@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
dependencies:
- fill-range "^7.0.1"
+ fill-range "^7.1.1"
-browserslist@^4.12.0, "browserslist@>= 4.21.0":
- version "4.22.1"
+browserslist@^4.12.0:
+ version "4.25.1"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.1.tgz#ba9e8e6f298a1d86f829c9b975e07948967bb111"
+ integrity sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==
dependencies:
- caniuse-lite "^1.0.30001541"
- electron-to-chromium "^1.4.535"
- node-releases "^2.0.13"
- update-browserslist-db "^1.0.13"
+ caniuse-lite "^1.0.30001726"
+ electron-to-chromium "^1.5.173"
+ node-releases "^2.0.19"
+ update-browserslist-db "^1.1.3"
bytes@1:
version "1.0.0"
resolved "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz"
integrity sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==
-call-bind@^1.0.0:
- version "1.0.5"
+call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
+ integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
dependencies:
+ es-errors "^1.3.0"
function-bind "^1.1.2"
- get-intrinsic "^1.2.1"
- set-function-length "^1.1.1"
-caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001541:
- version "1.0.30001561"
+call-bound@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a"
+ integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==
+ dependencies:
+ call-bind-apply-helpers "^1.0.2"
+ get-intrinsic "^1.3.0"
+
+caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001726:
+ version "1.0.30001731"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz#277c07416ea4613ec564e5b0ffb47e7b60f32e2f"
+ integrity sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==
chalk@^1.1.1:
version "1.1.3"
@@ -241,16 +318,16 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
-color-name@~1.1.4:
- version "1.1.4"
- resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
colors@~1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz"
@@ -278,13 +355,6 @@ debug@^3.1.0:
dependencies:
ms "^2.1.1"
-define-data-property@^1.1.1:
- version "1.1.1"
- dependencies:
- get-intrinsic "^1.2.1"
- gopd "^1.0.1"
- has-property-descriptors "^1.0.0"
-
delegate@^3.1.2:
version "3.2.0"
resolved "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz"
@@ -310,13 +380,24 @@ dropzone@5.9:
resolved "https://registry.npmjs.org/dropzone/-/dropzone-5.9.3.tgz"
integrity sha512-Azk8kD/2/nJIuVPK+zQ9sjKMRIpRvNyqn9XwbBHNq+iNuSccbJS6hwm1Woy0pMST0erSo0u4j+KJaodndDk4vA==
+dunder-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
+ integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
+ dependencies:
+ call-bind-apply-helpers "^1.0.1"
+ es-errors "^1.3.0"
+ gopd "^1.2.0"
+
duplexer@^0.1.1:
version "0.1.2"
resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz"
integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
-electron-to-chromium@^1.4.535:
- version "1.4.576"
+electron-to-chromium@^1.5.173:
+ version "1.5.198"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.198.tgz#ac12b539ac1bb3dece1a4cd2d8882d0349c71c55"
+ integrity sha512-G5COfnp3w+ydVu80yprgWSfmfQaYRh9DOxfhAxstLyetKaLyl55QrNjx8C38Pc/C+RaDmb1M0Lk8wPEMQ+bGgQ==
error@^7.0.0:
version "7.2.1"
@@ -325,8 +406,27 @@ error@^7.0.0:
dependencies:
string-template "~0.2.1"
-escalade@^3.1.1:
- version "3.1.1"
+es-define-property@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
+ integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
+
+es-errors@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
+ integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
+ integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
+ dependencies:
+ es-errors "^1.3.0"
+
+escalade@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
+ integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
@@ -379,8 +479,10 @@ file-sync-cmp@^0.1.0:
resolved "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz"
integrity sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA==
-fill-range@^7.0.1:
- version "7.0.1"
+fill-range@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
dependencies:
to-regex-range "^5.0.1"
@@ -461,13 +563,29 @@ gaze@^1.1.0:
dependencies:
globule "^1.0.0"
-get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2:
- version "1.2.2"
+get-intrinsic@^1.2.5, get-intrinsic@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
+ integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
dependencies:
+ call-bind-apply-helpers "^1.0.2"
+ es-define-property "^1.0.1"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.1.1"
function-bind "^1.1.2"
- has-proto "^1.0.1"
- has-symbols "^1.0.3"
- hasown "^2.0.0"
+ get-proto "^1.0.1"
+ gopd "^1.2.0"
+ has-symbols "^1.1.0"
+ hasown "^2.0.2"
+ math-intrinsics "^1.1.0"
+
+get-proto@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
+ integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
+ dependencies:
+ dunder-proto "^1.0.1"
+ es-object-atoms "^1.0.0"
getobject@~1.0.0:
version "1.0.2"
@@ -486,19 +604,7 @@ glob@^7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@~7.1.1:
- version "7.1.7"
- resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz"
- integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@~7.1.6:
+glob@~7.1.1, glob@~7.1.6:
version "7.1.7"
resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz"
integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
@@ -546,10 +652,10 @@ good-listener@^1.2.2:
dependencies:
delegate "^3.1.2"
-gopd@^1.0.1:
- version "1.0.1"
- dependencies:
- get-intrinsic "^1.1.3"
+gopd@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
+ integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
grunt-cli@~1.4.3:
version "1.4.3"
@@ -656,7 +762,7 @@ grunt-sass@3.1:
resolved "https://registry.npmjs.org/grunt-sass/-/grunt-sass-3.1.0.tgz"
integrity sha512-90s27H7FoCDcA8C8+R0GwC+ntYD3lG6S/jqcavWm3bn9RiJTmSfOvfbFa1PXx4NbBWuiGQMLfQTj/JvvqT5w6A==
-grunt@>=0.4.5, grunt@>=1, grunt@>=1.4.1, grunt@1.6:
+grunt@1.6:
version "1.6.1"
resolved "https://registry.npmjs.org/grunt/-/grunt-1.6.1.tgz"
integrity sha512-/ABUy3gYWu5iBmrUSRBP97JLpQUm0GgVveDCp6t3yRNIoltIYw7rEj3g5y1o2PGPR2vfTRGa7WC/LZHLTXnEzA==
@@ -700,21 +806,15 @@ has-flag@^4.0.0:
resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
-has-property-descriptors@^1.0.0:
- version "1.0.1"
- dependencies:
- get-intrinsic "^1.2.2"
-
-has-proto@^1.0.1:
- version "1.0.1"
-
-has-symbols@^1.0.3:
- version "1.0.3"
- resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz"
- integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+has-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
+ integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
-hasown@^2.0.0:
- version "2.0.0"
+hasown@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
dependencies:
function-bind "^1.1.2"
@@ -784,9 +884,11 @@ is-absolute@^1.0.0:
is-windows "^1.0.1"
is-core-module@^2.13.0:
- version "2.13.1"
+ version "2.16.1"
+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
+ integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
dependencies:
- hasown "^2.0.0"
+ hasown "^2.0.2"
is-extglob@^2.1.1:
version "2.1.1"
@@ -848,7 +950,7 @@ jquery-ui@1.14:
dependencies:
jquery ">=1.12.0 <5.0.0"
-"jquery@>=1.12.0 <5.0.0", "jquery@>=3.4.0 <4.0.0", jquery@3.7:
+jquery@3.7, "jquery@>=1.12.0 <5.0.0", "jquery@>=3.4.0 <4.0.0":
version "3.7.1"
resolved "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz"
integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==
@@ -925,6 +1027,11 @@ map-cache@^0.2.0:
resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz"
integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==
+math-intrinsics@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
+ integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
+
maxmin@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/maxmin/-/maxmin-3.0.0.tgz"
@@ -936,9 +1043,11 @@ maxmin@^3.0.0:
pretty-bytes "^5.3.0"
micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
- version "4.0.5"
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
+ integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
dependencies:
- braces "^3.0.2"
+ braces "^3.0.3"
picomatch "^2.3.1"
minimatch@^3.0.4, minimatch@^3.1.1:
@@ -948,14 +1057,7 @@ minimatch@^3.0.4, minimatch@^3.1.1:
dependencies:
brace-expansion "^1.1.7"
-minimatch@~3.0.2:
- version "3.0.8"
- resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz"
- integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimatch@~3.0.4:
+minimatch@~3.0.2, minimatch@~3.0.4:
version "3.0.8"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz"
integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==
@@ -979,15 +1081,19 @@ multimatch@^4.0.0:
minimatch "^3.0.4"
nanoid@^3.3.7:
- version "3.3.7"
+ version "3.3.11"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
+ integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
node-addon-api@^7.0.0:
version "7.1.1"
resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz"
integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==
-node-releases@^2.0.13:
- version "2.0.13"
+node-releases@^2.0.19:
+ version "2.0.19"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
+ integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
nopt@~3.0.6:
version "3.0.6"
@@ -1019,8 +1125,10 @@ object-assign@^4.1.0:
resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-object-inspect@^1.9.0:
- version "1.13.1"
+object-inspect@^1.13.3:
+ version "1.13.4"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
+ integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
object.defaults@^1.1.0:
version "1.1.0"
@@ -1137,12 +1245,9 @@ picocolors@^0.2.1:
resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz"
integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
-picocolors@^1.0.0:
- version "1.0.0"
-
-picocolors@^1.1.0:
+picocolors@^1.1.1:
version "1.1.1"
- resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
picomatch@^2.3.1:
@@ -1167,6 +1272,15 @@ postcss-value-parser@^4.1.0:
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+postcss@8.4:
+ version "8.4.49"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19"
+ integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.1.1"
+ source-map-js "^1.2.1"
+
postcss@^6.0.11:
version "6.0.23"
resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz"
@@ -1184,22 +1298,17 @@ postcss@^7.0.32:
picocolors "^0.2.1"
source-map "^0.6.1"
-postcss@8.4:
- version "8.4.47"
- dependencies:
- nanoid "^3.3.7"
- picocolors "^1.1.0"
- source-map-js "^1.2.1"
-
pretty-bytes@^5.3.0:
version "5.6.0"
resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz"
integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
qs@^6.4.0:
- version "6.11.2"
+ version "6.14.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930"
+ integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==
dependencies:
- side-channel "^1.0.4"
+ side-channel "^1.1.0"
raw-body@~1.1.0:
version "1.1.7"
@@ -1283,32 +1392,57 @@ sass@^1.89.2:
optionalDependencies:
"@parcel/watcher" "^2.4.1"
+select2@4.1.0-rc.0:
+ version "4.1.0-rc.0"
+ resolved "https://registry.npmjs.org/select2/-/select2-4.1.0-rc.0.tgz"
+ integrity sha512-Hr9TdhyHCZUtwznEH2CBf7967mEM0idtJ5nMtjvk3Up5tPukOLXbHUNmh10oRfeNIhj+3GD3niu+g6sVK+gK0A==
+
select@^1.1.2:
version "1.1.2"
resolved "https://registry.npmjs.org/select/-/select-1.1.2.tgz"
integrity sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==
-select2@4.1.0-rc.0:
- version "4.1.0-rc.0"
- resolved "https://registry.npmjs.org/select2/-/select2-4.1.0-rc.0.tgz"
- integrity sha512-Hr9TdhyHCZUtwznEH2CBf7967mEM0idtJ5nMtjvk3Up5tPukOLXbHUNmh10oRfeNIhj+3GD3niu+g6sVK+gK0A==
+side-channel-list@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad"
+ integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==
+ dependencies:
+ es-errors "^1.3.0"
+ object-inspect "^1.13.3"
-set-function-length@^1.1.1:
- version "1.1.1"
+side-channel-map@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42"
+ integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==
dependencies:
- define-data-property "^1.1.1"
- get-intrinsic "^1.2.1"
- gopd "^1.0.1"
- has-property-descriptors "^1.0.0"
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.5"
+ object-inspect "^1.13.3"
-side-channel@^1.0.4:
- version "1.0.4"
+side-channel-weakmap@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea"
+ integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==
+ dependencies:
+ call-bound "^1.0.2"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.5"
+ object-inspect "^1.13.3"
+ side-channel-map "^1.0.1"
+
+side-channel@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9"
+ integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==
dependencies:
- call-bind "^1.0.0"
- get-intrinsic "^1.0.2"
- object-inspect "^1.9.0"
+ es-errors "^1.3.0"
+ object-inspect "^1.13.3"
+ side-channel-list "^1.0.0"
+ side-channel-map "^1.0.1"
+ side-channel-weakmap "^1.0.2"
-source-map-js@^1.2.1, "source-map-js@>=0.6.2 <2.0.0":
+"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
@@ -1333,16 +1467,16 @@ sprintf-js@~1.0.2:
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
-string_decoder@0.10:
- version "0.10.31"
- resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
- integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
-
string-template@~0.2.1:
version "0.2.1"
resolved "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz"
integrity sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==
+string_decoder@0.10:
+ version "0.10.31"
+ resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+ integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
+
strip-ansi@^3.0.0:
version "3.0.1"
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"
@@ -1399,7 +1533,9 @@ to-regex-range@^5.0.1:
is-number "^7.0.0"
uglify-js@^3.16.1:
- version "3.17.4"
+ version "3.19.3"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f"
+ integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==
unc-path-regex@^0.1.2:
version "0.1.2"
@@ -1414,11 +1550,13 @@ underscore.string@~3.3.5:
sprintf-js "^1.1.1"
util-deprecate "^1.0.2"
-update-browserslist-db@^1.0.13:
- version "1.0.13"
+update-browserslist-db@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420"
+ integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==
dependencies:
- escalade "^3.1.1"
- picocolors "^1.0.0"
+ escalade "^3.2.0"
+ picocolors "^1.1.1"
uri-path@^1.0.0:
version "1.0.0"
@@ -0,0 +1,34 @@
From e404c835ae6681287f0d0ba005e43732becf8e9e Mon Sep 17 00:00:00 2001
From: Jonas Heinrich <onny@project-insanity.org>
Date: Sun, 17 Aug 2025 09:54:41 +0200
Subject: [PATCH] composer.json omit version string
---
composer.json | 1 -
composer.lock | 2 +-
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/composer.json b/composer.json
index 4ae0b32b7..241d59be9 100644
--- a/composer.json
+++ b/composer.json
@@ -1,6 +1,5 @@
{
"name": "invoiceplane/invoiceplane",
- "version": "1.6.3-rc1",
"description": "InvoicePlane is a self-hosted open source application for managing your invoices, clients and payments",
"homepage": "https://invoiceplane.com",
"license": "MIT",
diff --git a/composer.lock b/composer.lock
index 46fae450e..cf4aa24c1 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "6920f42f5773c5e01f9f107ebcedb891",
+ "content-hash": "16ec29d674456761958ca1c78513c3c5",
"packages": [
{
"name": "bacon/bacon-qr-code",
File diff suppressed because it is too large Load Diff
+11 -11
View File
@@ -12,12 +12,12 @@
fetchzip,
}:
let
version = "1.6.2";
version = "1.6.3";
# Fetch release tarball which contains language files
# https://github.com/InvoicePlane/InvoicePlane/issues/1170
languages = fetchzip {
url = "https://github.com/InvoicePlane/InvoicePlane/releases/download/v${version}/v${version}.zip";
hash = "sha256-ME8ornP2uevvH8DzuI25Z8OV0EP98CBgbunvb2Hbr9M=";
hash = "sha256-MuqxbkayW3GeiaorxfZSJtlwCWvnIF2ED/UUqahyoIQ=";
};
in
php.buildComposerProject2 (finalAttrs: {
@@ -28,16 +28,19 @@ php.buildComposerProject2 (finalAttrs: {
owner = "InvoicePlane";
repo = "InvoicePlane";
tag = "v${version}";
hash = "sha256-E2TZ/FhlVKZpGuczXb/QLn27gGiO7YYlAkPSolTEoeQ=";
hash = "sha256-XNjdFWP5AEulbPZcMDXYSdDhaLWlgu3nnCSFnjUjGpk=";
};
patches = [
# Node-sass is deprecated and fails to cross-compile
# See: https://github.com/InvoicePlane/InvoicePlane/issues/1275
./node_switch_to_sass.patch
# yarn.lock missing some resolved attributes and fails
./fix-yarn-lock.patch
# Fix composer.json validation
# See https://github.com/InvoicePlane/InvoicePlane/pull/1306
./fix_composer_validation.patch
];
vendorHash = "sha256-eq3YKIZZzZihDYgFH3YTETHvNG6hAE/oJ5Ul2XRMn4U=";
vendorHash = "sha256-qnWLcEabQpu0Yp4Q2NWQm4XFV4YW679cvXo6p/dDECI=";
nativeBuildInputs = [
yarnConfigHook
@@ -49,12 +52,9 @@ php.buildComposerProject2 (finalAttrs: {
offlineCache = fetchYarnDeps {
inherit (finalAttrs) src patches;
hash = "sha256-qAm4HnZwfwfjv7LqG+skmFLTHCSJKWH8iRDWFFebXEs=";
hash = "sha256-0fPdxOIeQBTulPUxHtaQylm4jevQTONSN1bChqbGbGs=";
};
# Upstream composer.json file is missing the name, description and license fields
composerStrictValidation = false;
postBuild = ''
grunt build
'';
+1 -1
View File
@@ -48,7 +48,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
description = "Set of nine separate and highly configurable menu items that let you know exactly what's going on inside your Mac";
homepage = "https://bjango.com/mac/istatmenus/";
license = lib.licenses.unfree;
maintainers = with lib.maintainers; [ donteatoreo ];
maintainers = with lib.maintainers; [ FlameFlag ];
platforms = lib.platforms.darwin;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
+1 -1
View File
@@ -27,7 +27,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
description = "Tiny menu bar calendar";
homepage = "https://www.mowglii.com/itsycal/";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ donteatoreo ];
maintainers = with lib.maintainers; [ FlameFlag ];
platforms = lib.platforms.darwin;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
+1 -1
View File
@@ -126,7 +126,7 @@ effectiveStdenv.mkDerivation (finalAttrs: {
mainProgram = "koboldcpp";
maintainers = with lib.maintainers; [
maxstrid
donteatoreo
FlameFlag
];
platforms = lib.platforms.unix;
};
+3 -3
View File
@@ -33,13 +33,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "ladybird";
version = "0-unstable-2025-08-11";
version = "0-unstable-2025-08-19";
src = fetchFromGitHub {
owner = "LadybirdWebBrowser";
repo = "ladybird";
rev = "a64cee528c5b387d45441da80f6c887399d4affb";
hash = "sha256-YtWh5Unny3IU0+81N8riGDJJAtethO1g04cxNap520s=";
rev = "658477620afe4c14b936227d1c8307b2dea56267";
hash = "sha256-WkEgZP5Ci0mlNDGq++93v4coz36dhp+kXtlKQu1xnVM=";
};
postPatch = ''
+1 -1
View File
@@ -73,7 +73,7 @@ stdenv.mkDerivation (finalAttrs: {
license = licenses.lgpl3;
maintainers = with maintainers; [
ilys
donteatoreo
FlameFlag
];
};
})
+1 -1
View File
@@ -26,7 +26,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
description = "Cursor manager for macOS built using private, nonintrusive CoreGraphics APIs";
homepage = "https://github.com/alexzielenski/Mousecape";
license = lib.licenses.free;
maintainers = with lib.maintainers; [ donteatoreo ];
maintainers = with lib.maintainers; [ FlameFlag ];
platforms = lib.platforms.darwin;
sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
};
+3 -3
View File
@@ -15,13 +15,13 @@
}:
let
version = "5.8.4";
version = "5.9.15";
src = fetchFromGitHub {
owner = "d99kris";
repo = "nchat";
tag = "v${version}";
hash = "sha256-PfiTIq8xomqp4ewawbX56hFgA4x5z8SI2w9husMtZPc=";
hash = "sha256-I7A6+zhHXE+LSfqnWESsXF1U4Y0Bw1Vt7gZblRqWSMQ=";
};
libcgowm = buildGoModule {
@@ -29,7 +29,7 @@ let
inherit version src;
sourceRoot = "${src.name}/lib/wmchat/go";
vendorHash = "sha256-HC7tJRk7Pqw3AUDEP2fGqYQLjIGf0CgB36K3PBYsBMM=";
vendorHash = "sha256-rovzblnXfDDyWyYR3G9irFaSopiZSeax+48R/vD/ktY=";
buildPhase = ''
runHook preBuild
-5
View File
@@ -909,11 +909,6 @@
"version": "7.0.0",
"hash": "sha256-1e031E26iraIqun84ad0fCIR4MJZ1hcQo4yFN+B7UfE="
},
{
"pname": "Microsoft.Bcl.AsyncInterfaces",
"version": "8.0.0",
"hash": "sha256-9aWmiwMJKrKr9ohD1KSuol37y+jdDxPGJct3m2/Bknw="
},
{
"pname": "Microsoft.Build.Tasks.Git",
"version": "8.0.0",
@@ -0,0 +1,23 @@
{ fetchurl }:
let
release = "ved4b249e2c35952c";
owner = "Nexus-Mods";
repo = "game-hashes";
repoURL = "https://github.com/${owner}/${repo}";
# Define a binding so that `update-source-version` can find it
src = fetchurl {
url = "${repoURL}/releases/download/${release}/game_hashes_db.zip";
hash = "sha256-9xJ8yfLRkIV0o++NHK2igd2l83/tsgWc5cuwZO2zseY=";
passthru = {
inherit
src # Also for `update-source-version` support
release
owner
repo
repoURL
;
};
};
in
src
+56
View File
@@ -0,0 +1,56 @@
#!/usr/bin/env nix-shell
#! nix-shell -i bash -p bash common-updater-scripts gh
set -eu -o pipefail
# Set a default attrpath to allow running this update script directly
export UPDATE_NIX_ATTR_PATH="${UPDATE_NIX_ATTR_PATH:-"nexusmods-app.gameHashes"}"
self=$(realpath "$0")
dir=$(dirname "$self")
cd "$dir"/../../../../../
old_release=$(
nix-instantiate --eval --raw \
--attr "$UPDATE_NIX_ATTR_PATH.release"
)
echo "Looking up latest game_hashes_db" >&2
new_release=$(
gh --repo Nexus-Mods/game-hashes \
release list \
--limit 1 \
--exclude-drafts \
--exclude-pre-releases \
--json tagName \
--jq .[].tagName
)
echo "Latest release is $new_release" >&2
if [ "$old_release" = "$new_release" ]; then
echo "Already up to date"
exit
fi
old_release_escaped=$(echo "$old_release" | sed 's#[$^*\\.[|]#\\&#g')
new_release_escaped=$(echo "$new_release" | sed 's#[$^*\\.[|]#\\&#g')
url=$(
nix-instantiate --eval --raw --attr "$UPDATE_NIX_ATTR_PATH.url" |
sed "s|$old_release_escaped|$new_release_escaped|"
)
echo "Downloading and hashing game_hashes_db" >&2
hash=$(
nix --extra-experimental-features nix-command \
hash convert --hash-algo sha256 --to sri \
"$(nix-prefetch-url "$url" --type sha256)"
)
echo "Updating source" >&2
update-source-version \
"$UPDATE_NIX_ATTR_PATH" \
"$new_release" \
"$hash" \
--version-key=release \
--file="$dir"/default.nix
+20 -18
View File
@@ -2,13 +2,13 @@
_7zz,
avalonia,
buildDotnetModule,
callPackage,
desktop-file-utils,
dotnetCorePackages,
fetchgit,
imagemagick,
lib,
xdg-utils,
nix-update-script,
pname ? "nexusmods-app",
}:
let
@@ -23,15 +23,17 @@ let
in
buildDotnetModule (finalAttrs: {
inherit pname;
version = "0.14.3";
version = "0.15.2";
src = fetchgit {
url = "https://github.com/Nexus-Mods/NexusMods.App.git";
rev = "refs/tags/v${finalAttrs.version}";
hash = "sha256-B2gIRVeaTwYEnESMovwEJgdmLwRNA7/nJs7opNhiyyA=";
hash = "sha256-WI6ulYDPOBGGt3snimCHswuIaII1aWNT/TZqvJxrQRQ=";
fetchSubmodules = true;
};
gameHashes = callPackage ./game-hashes { };
enableParallelBuilding = false;
# If the whole solution is published, there seems to be a race condition where
@@ -63,9 +65,18 @@ buildDotnetModule (finalAttrs: {
# for some reason these tests fail (intermittently?) with a zero timestamp
touch tests/NexusMods.UI.Tests/WorkspaceSystem/*.verified.png
# Assertion assumes version is set to 0.0.1
substituteInPlace tests/NexusMods.Telemetry.Tests/TrackingDataSenderTests.cs \
--replace-fail 'cra_ct=v0.0.1' 'cra_ct=v${finalAttrs.version}'
# Specify a fixed date to improve build reproducibility
echo "1970-01-01T00:00:00Z" >buildDate.txt
substituteInPlace src/NexusMods.Sdk/NexusMods.Sdk.csproj \
--replace-fail '$(BaseIntermediateOutputPath)buildDate.txt' "$(realpath buildDate.txt)"
# Use a pinned version of the game hashes db
substituteInPlace src/NexusMods.Games.FileHashes/NexusMods.Games.FileHashes.csproj \
--replace-fail '$(BaseIntermediateOutputPath)games_hashes_db.zip' "$gameHashes"
# Use a vendored version of the nexus API's games.json data
substituteInPlace src/NexusMods.Networking.NexusWebApi/NexusMods.Networking.NexusWebApi.csproj \
--replace-fail '$(BaseIntermediateOutputPath)games.json' ${./vendored/games.json}
'';
makeWrapperArgs = [
@@ -127,6 +138,7 @@ buildDotnetModule (finalAttrs: {
dotnetTestFlags = [
"--environment=USER=nobody"
"--property:Version=${finalAttrs.version}"
"--property:DefineConstants=${lib.strings.concatStringsSep "%3B" constants}"
];
@@ -137,19 +149,9 @@ buildDotnetModule (finalAttrs: {
];
disabledTests = [
# Fails attempting to download game hashes DB from github:
# HttpRequestException : Resource temporarily unavailable (github.com:443)
"NexusMods.DataModel.SchemaVersions.Tests.LegacyDatabaseSupportTests.TestDatabase"
"NexusMods.DataModel.SchemaVersions.Tests.MigrationSpecificTests.TestsFor_0001_ConvertTimestamps.OldTimestampsAreInRange"
"NexusMods.DataModel.SchemaVersions.Tests.MigrationSpecificTests.TestsFor_0003_FixDuplicates.No_Duplicates"
"NexusMods.DataModel.SchemaVersions.Tests.MigrationSpecificTests.TestsFor_0004_RemoveGameFiles.Test"
# Fails attempting to fetch SMAPI version data from github:
# https://github.com/erri120/smapi-versions/raw/main/data/game-smapi-versions.json
"NexusMods.Games.StardewValley.Tests.SMAPIGameVersionDiagnosticEmitterTests.Test_TryGetLastSupportedSMAPIVersion"
# Fails attempting to fetch game info from NexusMods API
"NexusMods.Networking.NexusWebApi.Tests.LocalMappingCacheTests.Test_Parse"
]
++ lib.optionals (!_7zz.meta.unfree) [
"NexusMods.Games.FOMOD.Tests.FomodXmlInstallerTests.InstallsFilesSimple_UsingRar"
@@ -189,12 +191,12 @@ buildDotnetModule (finalAttrs: {
};
};
passthru.updateScript = nix-update-script { };
passthru.updateScript = ./update.sh;
meta = {
mainProgram = "NexusMods.App";
homepage = "https://github.com/Nexus-Mods/NexusMods.App";
changelog = "https://github.com/Nexus-Mods/NexusMods.App/releases/tag/${finalAttrs.src.rev}";
changelog = "https://github.com/Nexus-Mods/NexusMods.App/releases/tag/v${finalAttrs.version}";
license = [ lib.licenses.gpl3Plus ];
maintainers = with lib.maintainers; [
l0b0
+24
View File
@@ -0,0 +1,24 @@
#!/usr/bin/env nix-shell
#! nix-shell -i bash -p bash nix-update
set -eu -o pipefail
# Set a default attrpath to allow running this update script directly
export UPDATE_NIX_ATTR_PATH="${UPDATE_NIX_ATTR_PATH:-"nexusmods-app"}"
self=$(realpath "$0")
dir=$(dirname "$self")
cd "$dir"/../../../../
# Update vendored files
"$dir"/vendored/update.sh
# Update game_hashes_db
UPDATE_NIX_ATTR_PATH="$UPDATE_NIX_ATTR_PATH.gameHashes" \
"$dir"/game-hashes/update.sh
url=$(
nix-instantiate --eval --raw \
--attr "$UPDATE_NIX_ATTR_PATH.meta.homepage"
)
nix-update --url "$url"
@@ -0,0 +1,31 @@
This directory contains a vendored copy of `games.json`, along with tooling to generate it.
## Purpose
The games data is fetched at runtime by NexusMods.App, however it is also included at build time for two reasons:
1. It allows tests to run against real data.
2. It is used as cached data, speeding up the app's initial run.
It is not vital for the file to contain all games, however ideally it should contain all games _supported_ by this version of NexusMods.App.
That way the initial run's cached data is more useful.
If this file grows too large, because we are including too many games, we can patch the `csproj` build spec so that `games.json` is not used at build time.
We would also need to patch or disable any tests that rely on it.
## Generating
`games.json` is generated automatically by `update.sh`, using data from [nexusmods' API][url] and the games listed in `game-ids.nix`.
To add a new game to `games.json`:
- Inspect the [nexusmods endpoint][url] to find the game's name and ID
- Add the name and ID to `game-ids.nix`
- Run `update.sh`
- Commit the result
> [!Note]
> Running `update.sh` may also update the existing games, so you may wish to create two separate commits using `git add --patch`.
> One for updating the existing data and another for adding the new game.
[url]: https://data.nexusmods.com/file/nexus-data/games.json
@@ -0,0 +1,11 @@
# This file lists games to be included in the vendored games.json file.
# It is not critical to include all games, other than those referenced by the test suite.
# Ideally, all games supported by the app will be included, as this can improve first-run performance.
{
# keep-sorted start case=no numeric=yes
"Baldur's Gate 3" = 3474;
"Cyberpunk 2077" = 3333;
"Mount & Blade II: Bannerlord" = 3174;
"Stardew Valley" = 1303;
# keep-sorted end
}
@@ -0,0 +1,58 @@
[
{
"id": 1303,
"name": "Stardew Valley",
"name_lower": "stardew valley",
"forum_url": "https://forums.nexusmods.com/games/19-stardew-valley/",
"nexusmods_url": "https://www.nexusmods.com/stardewvalley",
"genre": "Simulation",
"file_count": 137612,
"downloads": 592183501,
"domain_name": "stardewvalley",
"approved_date": 1457432329,
"mods": 24655,
"collections": 3570
},
{
"id": 3174,
"name": "Mount & Blade II: Bannerlord",
"name_lower": "mount & blade ii: bannerlord",
"forum_url": "https://forums.nexusmods.com/games/9-mount-blade-ii-bannerlord/",
"nexusmods_url": "https://www.nexusmods.com/mountandblade2bannerlord",
"genre": "Strategy",
"file_count": 49182,
"downloads": 111421397,
"domain_name": "mountandblade2bannerlord",
"approved_date": 1582898627,
"mods": 6136,
"collections": 321
},
{
"id": 3333,
"name": "Cyberpunk 2077",
"name_lower": "cyberpunk 2077",
"forum_url": "https://forums.nexusmods.com/games/1-cyberpunk-2077/",
"nexusmods_url": "https://www.nexusmods.com/cyberpunk2077",
"genre": "Action",
"file_count": 118327,
"downloads": 825382927,
"domain_name": "cyberpunk2077",
"approved_date": 1607433331,
"mods": 16707,
"collections": 1910
},
{
"id": 3474,
"name": "Baldur's Gate 3",
"name_lower": "baldur's gate 3",
"forum_url": "https://forums.nexusmods.com/games/2-baldurs-gate-3/",
"nexusmods_url": "https://www.nexusmods.com/baldursgate3",
"genre": "RPG",
"file_count": 100954,
"downloads": 325304689,
"domain_name": "baldursgate3",
"approved_date": 1602863114,
"mods": 14186,
"collections": 3703
}
]
+53
View File
@@ -0,0 +1,53 @@
#!/usr/bin/env nix-shell
#! nix-shell -i bash -p bash curl jq
set -eu -o pipefail
url='https://data.nexusmods.com/file/nexus-data/games.json'
self=$(realpath "$0")
dir=$(dirname "$self")
tmp=$(mktemp)
cd "$dir"/../../../../../
ids=$(
nix-instantiate --eval --json \
--argstr file "$dir"/game-ids.nix \
--expr '{file}: builtins.attrValues (import file)'
)
echo "Fetching games data" >&2
curl "$url" \
--silent \
--show-error \
--location |
jq --argjson ids "$ids" \
'map(select( .id | IN($ids[]) )) | sort_by(.id)' \
>"$tmp"
echo "Validating result" >&2
nix-instantiate --eval --strict \
--argstr idsNix "$dir"/game-ids.nix \
--argstr gamesJson "$tmp" \
--expr '
{
idsNix,
gamesJson,
lib ? import <nixpkgs/lib>,
}:
let
ids = import idsNix;
games = lib.importJSON gamesJson;
in
lib.forEach games (
{ id, name, ... }:
lib.throwIfNot
(id == ids.${name})
"${name}: id ${toString id} does not match ${toString ids.${name}}"
null
)
' \
>/dev/null
echo "Installing games.json to $dir" >&2
mv --force "$tmp" "$dir"/games.json
+1 -1
View File
@@ -34,7 +34,7 @@ stdenv.mkDerivation (finalAttrs: {
description = "Beautiful calculator app for macOS";
homepage = "https://numi.app/";
license = lib.licenses.unfree;
maintainers = with lib.maintainers; [ donteatoreo ];
maintainers = with lib.maintainers; [ FlameFlag ];
platforms = lib.platforms.darwin;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
+3 -3
View File
@@ -7,13 +7,13 @@
buildGoModule rec {
pname = "orchard";
version = "0.37.0";
version = "0.38.0";
src = fetchFromGitHub {
owner = "cirruslabs";
repo = "orchard";
rev = version;
hash = "sha256-V5pBiF1IIfyyZIAoHnAccZ6YNddA4MosEJROJVEpwoo=";
hash = "sha256-FKawq1GN7Uz3NGmqw3za8+X4bZiFyFPMxM5PPtpKDrs=";
# populate values that require us to use git. By doing this in postFetch we
# can delete .git afterwards and maintain better reproducibility of the src.
leaveDotGit = true;
@@ -24,7 +24,7 @@ buildGoModule rec {
'';
};
vendorHash = "sha256-VHEj4y7XSfdbSeBo9+ZwBZXUj/ur0w6gPrxCt2xNQMM=";
vendorHash = "sha256-GYAcRC9OMhlOax1s33SrgtbbAlyE9w8Zn4AL7bQrcNk=";
nativeBuildInputs = [ installShellFiles ];
+4 -4
View File
@@ -6,16 +6,16 @@
rustPlatform.buildRustPackage rec {
pname = "otree";
version = "v0.3.0";
version = "0.5.0";
src = fetchFromGitHub {
owner = "fioncat";
repo = "otree";
rev = version;
hash = "sha256-WvoiTu6erNI5Cb9PSoHgL6+coIGWLe46pJVXBZHOLTE=";
tag = "v${version}";
hash = "sha256-zsBHra8X1nM8QINaxi3Vcs82T8S5WtfNRN5vb/ppuLU=";
};
cargoHash = "sha256-tgw1R1UmXAHcrQFsY4i4efGCXQW3m0PVYdFSK2q+NUk=";
cargoHash = "sha256-Ncyj5s4EfbKsFGV29FDViK35nKOAZM+DODzIVRCpbuQ=";
meta = {
description = "Command line tool to view objects (json/yaml/toml) in TUI tree widget";
+1 -1
View File
@@ -14,4 +14,4 @@ DEPENDENCIES
papertrail
BUNDLED WITH
2.5.16
2.6.9
+12 -14
View File
@@ -2,42 +2,40 @@
lib,
stdenv,
bundlerEnv,
makeWrapper,
ruby,
bundlerUpdateScript,
testers,
papertrail,
}:
stdenv.mkDerivation rec {
pname = "papertrail";
version = (import ./gemset.nix).papertrail.version;
let
papertrail-env = bundlerEnv {
name = "papertrail-env";
inherit ruby;
gems = bundlerEnv {
name = "papertrail";
gemfile = ./Gemfile;
lockfile = ./Gemfile.lock;
gemset = ./gemset.nix;
};
in
stdenv.mkDerivation {
pname = "papertrail";
version = (import ./gemset.nix).papertrail.version;
dontUnpack = true;
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ gems ];
installPhase = ''
mkdir -p $out/bin
ln -s ${papertrail-env}/bin/papertrail $out/bin/papertrail
makeWrapper ${gems}/bin/papertrail $out/bin/papertrail
'';
passthru.updateScript = bundlerUpdateScript "papertrail";
passthru.tests.version = testers.testVersion { package = papertrail; };
meta = with lib; {
meta = {
description = "Command-line client for Papertrail log management service";
mainProgram = "papertrail";
homepage = "https://github.com/papertrail/papertrail-cli/";
license = licenses.mit;
maintainers = with maintainers; [ nicknovitski ];
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ nicknovitski ];
platforms = ruby.meta.platforms;
};
}
+10 -10
View File
@@ -1,12 +1,12 @@
# Generated by ./update.sh - do not update manually!
# Last updated: 2025-07-25
# Last updated: 2025-08-20
{ fetchurl }:
let
any-darwin = {
version = "6.9.77-2025-07-24";
version = "6.9.79-2025-08-20";
src = fetchurl {
url = "https://dldir1v6.qq.com/qqfile/qq/QQNT/Mac/QQ_6.9.77_250724_01.dmg";
hash = "sha256-ZHpFH5PPDaVtbEZsb+1fyoscWuPYedTrIaoqhnsXRlc=";
url = "https://dldir1v6.qq.com/qqfile/qq/QQNT/Mac/QQ_6.9.79_250820_01.dmg";
hash = "sha256-m8COj+kn9ify4D4FUpNXL31uO4j4DKqCQhZnoo5umTE=";
};
};
in
@@ -14,17 +14,17 @@ in
aarch64-darwin = any-darwin;
x86_64-darwin = any-darwin;
aarch64-linux = {
version = "3.2.18-2025-07-24";
version = "3.2.19-2025-08-20";
src = fetchurl {
url = "https://dldir1v6.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.18_250724_arm64_01.deb";
hash = "sha256-j+ouSBfryrRXQbyC4ZDyrKPLqJVw67tGjlHdKel5Br4=";
url = "https://dldir1v6.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.19_250820_arm64_01.deb";
hash = "sha256-rHgN0T9lcoAucwR3B2U8so/dAUfB92dQYc0TncTHPaM=";
};
};
x86_64-linux = {
version = "3.2.18-2025-07-24";
version = "3.2.19-2025-08-20";
src = fetchurl {
url = "https://dldir1v6.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.18_250724_amd64_01.deb";
hash = "sha256-HHFUXAv6oWsipBYECLNFJG8OMQ7fxjruA210w/oFFok=";
url = "https://dldir1v6.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.19_250820_amd64_01.deb";
hash = "sha256-4Y0GSWwFkqYX5ezE2Jk/tZIwsBHg88ZxJghzB+kXTds=";
};
};
}
+4 -4
View File
@@ -12,19 +12,19 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "raycast";
version = "1.102.4";
version = "1.102.5";
src =
{
aarch64-darwin = fetchurl {
name = "Raycast.dmg";
url = "https://releases.raycast.com/releases/${finalAttrs.version}/download?build=arm";
hash = "sha256-VYwvU9DWowE+34ZBAsqIjGJGnHVfdVWGl4baL5boN8M=";
hash = "sha256-Fh46CsAeE9TpqVlYCc6s5ytO5dm+xoDJ7NawML4D9R4=";
};
x86_64-darwin = fetchurl {
name = "Raycast.dmg";
url = "https://releases.raycast.com/releases/${finalAttrs.version}/download?build=x86_64";
hash = "sha256-LMkHWs/H5ESdp+JaUG0rlI9UVx29WYcU44t0fBAWg8A=";
hash = "sha256-tBFnk5R9BqfL+MH1tBY76al7/jVzqpfI7yIGADQh6wQ=";
};
}
.${stdenvNoCC.system} or (throw "raycast: ${stdenvNoCC.system} is unsupported.");
@@ -80,7 +80,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
maintainers = with lib.maintainers; [
lovesegfault
stepbrobd
donteatoreo
FlameFlag
jakecleary
];
platforms = [
+3 -3
View File
@@ -15,13 +15,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "renovate";
version = "41.49.0";
version = "41.81.0";
src = fetchFromGitHub {
owner = "renovatebot";
repo = "renovate";
tag = finalAttrs.version;
hash = "sha256-n0Zfut9+nIWRvUU2po4YZVMp4bkJs9ExfNCqShUSVYc=";
hash = "sha256-iFcq8TbUXcEf0q/ifAC4dXJkG7pYvTM78FHPZucky8g=";
};
postPatch = ''
@@ -41,7 +41,7 @@ stdenv.mkDerivation (finalAttrs: {
pnpmDeps = pnpm_10.fetchDeps {
inherit (finalAttrs) pname version src;
fetcherVersion = 2;
hash = "sha256-J0cAaM4DO3dsRmgx8vg8pZQgq78o3U3kKBrnRDuhJmk=";
hash = "sha256-HQEN+gBvI9s5WEXrH/3WTMSCg0ERykeKit8z8BBUe6w=";
};
env.COREPACK_ENABLE_STRICT = 0;
+20
View File
@@ -0,0 +1,20 @@
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -201,7 +201,7 @@
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
add_library(ruri SHARED ${SOURCES})
- install (TARGETS ruri DESTINATION /usr/lib/)
+ install (TARGETS ruri)
else ()
# add the executable
set(CMAKE_POSITION_INDEPENDENT_CODE OFF)
@@ -215,7 +215,7 @@
VERBATIM
)
endif()
- install (TARGETS ruri DESTINATION /usr/bin/)
+ install (TARGETS ruri)
endif()
add_custom_target(

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