mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-07-06 17:13:24 -05:00
Merge commit '4e39fb70d8' into haskell-updates
This commit is contained in:
commit
9eab5d0982
641 changed files with 10711 additions and 4832 deletions
2
.github/ISSUE_TEMPLATE/01_bug_report.yml
vendored
2
.github/ISSUE_TEMPLATE/01_bug_report.yml
vendored
|
|
@ -121,6 +121,8 @@ body:
|
|||
required: true
|
||||
- label: "I assert that I have read the [NixOS Code of Conduct](https://github.com/NixOS/.github/blob/master/CODE_OF_CONDUCT.md) and agree to abide by it."
|
||||
required: true
|
||||
- label: "I assert that I have read the [automation/AI policy](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#automationai-policy) and that this issue report complies with it."
|
||||
required: true
|
||||
- type: "markdown"
|
||||
attributes:
|
||||
value: |
|
||||
|
|
|
|||
|
|
@ -135,6 +135,8 @@ body:
|
|||
required: true
|
||||
- label: "I assert that I have read the [NixOS Code of Conduct](https://github.com/NixOS/.github/blob/master/CODE_OF_CONDUCT.md) and agree to abide by it."
|
||||
required: true
|
||||
- label: "I assert that I have read the [automation/AI policy](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#automationai-policy) and that this issue report complies with it."
|
||||
required: true
|
||||
- type: "markdown"
|
||||
attributes:
|
||||
value: |
|
||||
|
|
|
|||
|
|
@ -125,6 +125,8 @@ body:
|
|||
required: true
|
||||
- label: "I assert that I have read the [NixOS Code of Conduct](https://github.com/NixOS/.github/blob/master/CODE_OF_CONDUCT.md) and agree to abide by it."
|
||||
required: true
|
||||
- label: "I assert that I have read the [automation/AI policy](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#automationai-policy) and that this issue report complies with it."
|
||||
required: true
|
||||
- type: "markdown"
|
||||
attributes:
|
||||
value: |
|
||||
|
|
|
|||
2
.github/ISSUE_TEMPLATE/04_build_failure.yml
vendored
2
.github/ISSUE_TEMPLATE/04_build_failure.yml
vendored
|
|
@ -131,6 +131,8 @@ body:
|
|||
required: true
|
||||
- label: "I assert that I have read the [NixOS Code of Conduct](https://github.com/NixOS/.github/blob/master/CODE_OF_CONDUCT.md) and agree to abide by it."
|
||||
required: true
|
||||
- label: "I assert that I have read the [automation/AI policy](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#automationai-policy) and that this issue report complies with it."
|
||||
required: true
|
||||
- type: "markdown"
|
||||
attributes:
|
||||
value: |
|
||||
|
|
|
|||
2
.github/ISSUE_TEMPLATE/05_update_request.yml
vendored
2
.github/ISSUE_TEMPLATE/05_update_request.yml
vendored
|
|
@ -104,6 +104,8 @@ body:
|
|||
required: true
|
||||
- label: "I assert that I have read the [NixOS Code of Conduct](https://github.com/NixOS/.github/blob/master/CODE_OF_CONDUCT.md) and agree to abide by it."
|
||||
required: true
|
||||
- label: "I assert that I have read the [automation/AI policy](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#automationai-policy) and that this issue report complies with it."
|
||||
required: true
|
||||
- type: "markdown"
|
||||
attributes:
|
||||
value: |
|
||||
|
|
|
|||
2
.github/ISSUE_TEMPLATE/06_module_request.yml
vendored
2
.github/ISSUE_TEMPLATE/06_module_request.yml
vendored
|
|
@ -79,6 +79,8 @@ body:
|
|||
required: true
|
||||
- label: "I assert that I have read the [NixOS Code of Conduct](https://github.com/NixOS/.github/blob/master/CODE_OF_CONDUCT.md) and agree to abide by it."
|
||||
required: true
|
||||
- label: "I assert that I have read the [automation/AI policy](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#automationai-policy) and that this issue report complies with it."
|
||||
required: true
|
||||
- type: "markdown"
|
||||
attributes:
|
||||
value: |
|
||||
|
|
|
|||
|
|
@ -85,6 +85,8 @@ body:
|
|||
required: true
|
||||
- label: "I assert that I have read the [NixOS Code of Conduct](https://github.com/NixOS/.github/blob/master/CODE_OF_CONDUCT.md) and agree to abide by it."
|
||||
required: true
|
||||
- label: "I assert that I have read the [automation/AI policy](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#automationai-policy) and that this issue report complies with it."
|
||||
required: true
|
||||
- type: "markdown"
|
||||
attributes:
|
||||
value: |
|
||||
|
|
|
|||
|
|
@ -67,6 +67,8 @@ body:
|
|||
required: true
|
||||
- label: "I assert that I have read the [NixOS Code of Conduct](https://github.com/NixOS/.github/blob/master/CODE_OF_CONDUCT.md) and agree to abide by it."
|
||||
required: true
|
||||
- label: "I assert that I have read the [automation/AI policy](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#automationai-policy) and that this issue report complies with it."
|
||||
required: true
|
||||
- type: "markdown"
|
||||
attributes:
|
||||
value: |
|
||||
|
|
|
|||
|
|
@ -137,6 +137,8 @@ body:
|
|||
required: true
|
||||
- label: "I assert that I have read the [NixOS Code of Conduct](https://github.com/NixOS/.github/blob/master/CODE_OF_CONDUCT.md) and agree to abide by it."
|
||||
required: true
|
||||
- label: "I assert that I have read the [automation/AI policy](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#automationai-policy) and that this issue report complies with it."
|
||||
required: true
|
||||
- type: "markdown"
|
||||
attributes:
|
||||
value: |
|
||||
|
|
|
|||
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
|
|
@ -27,12 +27,14 @@ For new packages please briefly describe the package or provide a link to its ho
|
|||
- [ ] Module addition: when adding a new NixOS module.
|
||||
- [ ] Module update: when the change is significant.
|
||||
- [ ] Fits [CONTRIBUTING.md], [pkgs/README.md], [maintainers/README.md] and other READMEs.
|
||||
- [ ] Follows the [automation/AI policy].
|
||||
|
||||
[NixOS tests]: https://nixos.org/manual/nixos/unstable/index.html#sec-nixos-tests
|
||||
[Package tests]: https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#package-tests
|
||||
[nixpkgs-review usage]: https://github.com/Mic92/nixpkgs-review#usage
|
||||
|
||||
[CONTRIBUTING.md]: https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md
|
||||
[automation/AI policy]: https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#automationai-policy
|
||||
[lib/tests]: https://github.com/NixOS/nixpkgs/blob/master/lib/tests
|
||||
[maintainers/README.md]: https://github.com/NixOS/nixpkgs/blob/master/maintainers/README.md
|
||||
[nixos/tests]: https://github.com/NixOS/nixpkgs/blob/master/nixos/tests
|
||||
|
|
|
|||
|
|
@ -206,7 +206,7 @@ For example, if you make a change to `texlive`, you probably would only check th
|
|||
|
||||
#### Meets Nixpkgs contribution standards
|
||||
|
||||
The last checkbox is about whether it fits the guidelines in this `CONTRIBUTING.md` file.
|
||||
The last two checkboxes are about whether it fits the guidelines in this `CONTRIBUTING.md` file.
|
||||
This document details our standards for commit messages, reviews, licensing of contributions, etc...
|
||||
Everyone should read and understand these standards before submitting a pull request.
|
||||
|
||||
|
|
@ -888,3 +888,77 @@ As mentioned previously, it is unfortunately perfectly normal for a PR to sit ar
|
|||
|
||||
Please don't blow up situations where progress is happening but is merely not going fast enough for your tastes.
|
||||
Honking in a traffic jam will not make you go any faster.
|
||||
|
||||
# Automation/AI policy
|
||||
|
||||
Every contribution to Nixpkgs and related development venues, including code, documentation, and communication on GitHub and Matrix, must have a **responsible person in the loop** who is accountable for that contribution and reviews it before submission, and must **transparently disclose** any non‐trivial use of automation to produce it, including but not limited to LLM‐based AI tools.
|
||||
|
||||
The following sections give more detail.
|
||||
|
||||
## Scope
|
||||
|
||||
Any use of automated tools to generate non‐trivial amounts of output as part of a contribution, in whole or in part, verbatim or edited, is covered by this policy, except as listed in the Exemptions section.
|
||||
Both LLM‐based AI tools and hand‐written automation are covered.
|
||||
Contributions include code and documentation in commits, commit messages, pull request summaries and reviews, issue and vulnerability reports, GitHub comments, Matrix messages, and Discourse posts.
|
||||
The covered venues are the GitHub repositories for Nixpkgs and [related projects](https://github.com/orgs/NixOS/teams/nixpkgs-core/repositories) under the jurisdiction of the Nixpkgs core team, Matrix rooms that are focused on development of those projects, and Discourse topics about Nixpkgs development.
|
||||
|
||||
## Accountability
|
||||
|
||||
Everyone who submits a contribution to Nixpkgs is responsible for it, regardless of the use of automated tooling.
|
||||
Before submission, they must establish a reasonable level of understanding of the contribution and expectation of its correctness.
|
||||
A contributor submitting a contribution intended for inclusion in Nixpkgs is also responsible for ensuring that it is [appropriately licensed](https://github.com/NixOS/nixpkgs/blob/master/COPYING) and credited, and not encumbered by any incompatible copyright.
|
||||
|
||||
When output from automated tooling is used in contributions, a contributor must establish confidence in that output.
|
||||
This can be achieved by establishing confidence in the correctness of the tooling’s logic, manual review of the included output, or using further automation to verify the output (e.g. programmatically checking whether a refactor avoids causing rebuilds).
|
||||
As the inner workings of LLM‐based AI tools cannot be sufficiently understood at present, only the latter two options are available when those are used; vibe coding without review is not permitted.
|
||||
When automation is used to verify output, the verification tooling itself must be disclosed and reviewed in line with this policy.
|
||||
|
||||
This policy applies equally to any further discussion of a contribution.
|
||||
Comments and reviews must separately satisfy the same requirements of understanding, review, and disclosure.
|
||||
Contributors are expected to be able to answer questions about their contribution and respond to feedback appropriately, without simply forwarding messages back and forth to automated tools.
|
||||
|
||||
It is not permitted to submit automated contributions without any manual review or intervention, outside of standard community automation.
|
||||
Automation without any manual review must not be used as the sole arbiter of whether to merge a change.
|
||||
|
||||
## Transparency
|
||||
|
||||
All covered use of automated tooling for a contribution must be disclosed as part of that contribution.
|
||||
|
||||
In the case of LLM‐based AI tooling used for commits, this **must** be in the form of an `Assisted-by:` Git commit trailer, including at least the tool name and the primary model name and version used for the contribution.
|
||||
A `Co-authored-by:` trailer does not satisfy this policy.
|
||||
|
||||
Any adequate form of disclosure is permitted for other kinds of tooling and contribution.
|
||||
Pull request summaries and review comments must be disclosed separately to commits.
|
||||
|
||||
## Exemptions
|
||||
|
||||
The following situations are fully or partially exempt:
|
||||
|
||||
* Use of standard deterministic editor/IDE/formatter/text transformation tooling to produce changes that the author manually reviews and understands is exempt, including inline “auto‐completion” (even if LLM‐based) of short, rote snippets of text that do not contribute anything beyond boilerplate the author would have written anyway.
|
||||
|
||||
* Use of standard community automation is exempt, such as `nix-update`, the official Nixpkgs CI bots, the @r-ryantm update bot, other maintainer‐approved bots that run update scripts, and the Nixpkgs security tracker bot.
|
||||
|
||||
* Use of AI tools for research, testing, debugging, or private review is out of scope, if no substantial amount of their output is included in the resulting contribution.
|
||||
However, if these tools had a significant technical influence on your contribution, you are still responsible for it per the Accountability section, and are expected to disclose this where relevant.
|
||||
|
||||
* Use of machine translation is exempt from the requirement to understand the translated output.
|
||||
However, the requirements of appropriate confidence in the original text, responsibility, and disclosure still apply, and you are encouraged to additionally include the original untranslated contribution.
|
||||
|
||||
* Use of automation in a contribution clearly marked as not being ready for merge (e.g. a draft pull request) is exempt from the requirement for full self‐review, as long as some amount of review has been done and it is expected that the requirements will be met by the time it is marked as ready.
|
||||
This does not waive any other requirement.
|
||||
|
||||
* Use of automated tools to develop upstream software packaged inside Nixpkgs is not in scope.
|
||||
|
||||
## Enforcement
|
||||
|
||||
If you believe that someone is using automation without appropriate disclosure and review, you can politely ask them if that’s the case and point them to this policy as appropriate.
|
||||
Please assume good faith and remain civil; it’s not always possible to determine, and it is more likely that someone overlooked this policy than deliberately violated it.
|
||||
If you think someone is continuing to break the policy after this, please escalate to the [Nixpkgs core team](https://nixos.org/community/teams/nixpkgs-core/) rather than fighting over it.
|
||||
|
||||
If a contribution is clearly in violation of the policy (e.g. the contributor admits it was not followed, or there are AI tool attributions that do not meet our required format), it can be closed or hidden, preferably after informing the contributor of the policy and giving them a chance to address the violations.
|
||||
Deliberate violations of this policy are considered to break the [Code of Conduct](https://github.com/NixOS/.github/blob/master/CODE_OF_CONDUCT.md) clause against “Wasting other people’s time with low quality contributions, including but not limited to LLM and bot spam”.
|
||||
Repeated violations are grounds for further moderation action.
|
||||
|
||||
## Credits
|
||||
|
||||
This policy takes inspiration from similar policies in [LLVM](https://llvm.org/docs/AIToolPolicy.html), [Mesa](https://gitlab.freedesktop.org/mesa/mesa/-/blob/mesa-26.1.0-rc1/docs/submittingpatches.rst?ref_type=tags), [Fedora](https://docs.fedoraproject.org/en-US/council/policy/ai-contribution-policy/), and the [Linux kernel](https://docs.kernel.org/7.0/process/coding-assistants.html), along with [a proposal by the author of Anubis](https://xeiaso.net/notes/2025/assisted-by-footer/).
|
||||
|
|
|
|||
|
|
@ -483,7 +483,6 @@ module.exports = async ({ github, context, core, dry }) => {
|
|||
dry,
|
||||
pull_request,
|
||||
reviews,
|
||||
events,
|
||||
// TODO: Use maintainer map instead of the artifact.
|
||||
user_maintainers: Object.keys(
|
||||
JSON.parse(
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ async function handleReviewers({
|
|||
dry,
|
||||
pull_request,
|
||||
reviews,
|
||||
events,
|
||||
user_maintainers,
|
||||
team_maintainers,
|
||||
owners,
|
||||
|
|
@ -15,28 +14,20 @@ async function handleReviewers({
|
|||
}) {
|
||||
const pull_number = pull_request.number
|
||||
|
||||
// Users currently requested for review (pending).
|
||||
const pending_users = new Set(
|
||||
pull_request.requested_reviewers.map(({ login }) => login.toLowerCase()),
|
||||
)
|
||||
// Users who actually submitted a review in this PR (any state, including DISMISSED).
|
||||
const users_engaged = new Set(
|
||||
reviews.map(({ user }) => user.login.toLowerCase()),
|
||||
)
|
||||
// Users the PR has already reached: pending OR engaged.
|
||||
const users_reached = pending_users.union(users_engaged)
|
||||
// Users that the PR has already reached, e.g. they've left a review or have been requested for one
|
||||
const users_reached = new Set([
|
||||
...pull_request.requested_reviewers.map(({ login }) => login.toLowerCase()),
|
||||
...reviews.map(({ user }) => user.login.toLowerCase()),
|
||||
])
|
||||
log('reviewers - users_reached', Array.from(users_reached).join(', '))
|
||||
|
||||
// Same for teams. A team is engaged only via `onBehalfOf` reviews.
|
||||
const pending_teams = new Set(
|
||||
pull_request.requested_teams.map(({ slug }) => slug.toLowerCase()),
|
||||
)
|
||||
const teams_engaged = new Set(
|
||||
reviews.flatMap(({ onBehalfOf }) =>
|
||||
// Same for teams
|
||||
const teams_reached = new Set([
|
||||
...pull_request.requested_teams.map(({ slug }) => slug.toLowerCase()),
|
||||
...reviews.flatMap(({ onBehalfOf }) =>
|
||||
onBehalfOf.nodes.map(({ slug }) => slug.toLowerCase()),
|
||||
),
|
||||
)
|
||||
const teams_reached = pending_teams.union(teams_engaged)
|
||||
])
|
||||
log('reviewers - teams_reached', Array.from(teams_reached).join(', '))
|
||||
|
||||
// Early sanity check, before we start making any API requests. The list of maintainers
|
||||
|
|
@ -158,101 +149,37 @@ async function handleReviewers({
|
|||
)
|
||||
log('reviewers - teams_not_yet_reached', teams_not_yet_reached.join(', '))
|
||||
|
||||
// The usernames of bots that make review requests we may auto-revoke.
|
||||
const revokable_requesters = ['github-actions[bot]', 'nixpkgs-ci[bot]']
|
||||
|
||||
// Find latest `review_requested` actor per reviewer / team.
|
||||
const last_request_actor_for_user = new Map()
|
||||
const last_request_actor_for_team = new Map()
|
||||
for (const ev of events) {
|
||||
if (ev.event !== 'review_requested') continue
|
||||
if (ev.requested_reviewer?.login) {
|
||||
last_request_actor_for_user.set(
|
||||
ev.requested_reviewer.login.toLowerCase(),
|
||||
ev.actor?.login ?? '',
|
||||
)
|
||||
}
|
||||
if (ev.requested_team?.slug) {
|
||||
last_request_actor_for_team.set(
|
||||
ev.requested_team.slug.toLowerCase(),
|
||||
ev.actor?.login ?? '',
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Pending requests no longer in the to_reach set, excluding the engaged
|
||||
// and anything not requested by our own bot.
|
||||
const users_to_remove = Array.from(
|
||||
pending_users.difference(users_to_reach).difference(users_engaged),
|
||||
).filter((login) =>
|
||||
revokable_requesters.includes(last_request_actor_for_user.get(login)),
|
||||
)
|
||||
log('reviewers - users_to_remove', users_to_remove.join(', '))
|
||||
|
||||
// Same for teams.
|
||||
const teams_to_remove = Array.from(
|
||||
pending_teams.difference(teams_to_reach).difference(teams_engaged),
|
||||
).filter((slug) =>
|
||||
revokable_requesters.includes(last_request_actor_for_team.get(slug)),
|
||||
)
|
||||
log('reviewers - teams_to_remove', teams_to_remove.join(', '))
|
||||
|
||||
const has_adds =
|
||||
users_not_yet_reached.length > 0 || teams_not_yet_reached.length > 0
|
||||
const has_removals = users_to_remove.length > 0 || teams_to_remove.length > 0
|
||||
|
||||
if (!has_adds && !has_removals) {
|
||||
if (
|
||||
users_not_yet_reached.length === 0 &&
|
||||
teams_not_yet_reached.length === 0
|
||||
) {
|
||||
log('Has reviewer changes', 'false (skipped)')
|
||||
} else if (dry) {
|
||||
if (has_adds) {
|
||||
core.info(
|
||||
`Requesting user reviewers for #${pull_number}: ${users_not_yet_reached.join(', ')} (dry)`,
|
||||
)
|
||||
core.info(
|
||||
`Requesting team reviewers for #${pull_number}: ${teams_not_yet_reached.join(', ')} (dry)`,
|
||||
)
|
||||
}
|
||||
if (has_removals) {
|
||||
core.info(
|
||||
`Revoking stale reviewers for #${pull_number}: users=[${users_to_remove.join(', ')}], teams=[${teams_to_remove.join(', ')}] (dry)`,
|
||||
)
|
||||
}
|
||||
core.info(
|
||||
`Requesting user reviewers for #${pull_number}: ${users_not_yet_reached.join(', ')} (dry)`,
|
||||
)
|
||||
core.info(
|
||||
`Requesting team reviewers for #${pull_number}: ${teams_not_yet_reached.join(', ')} (dry)`,
|
||||
)
|
||||
} else {
|
||||
// We had tried the "request all reviewers at once" thing in the past, but it didn't work out:
|
||||
// https://github.com/NixOS/nixpkgs/commit/034613f860fcd339bd2c20c8f6bc259a2f9dc034
|
||||
// If we're hitting API errors here again, we'll need to investigate - and possibly reverse
|
||||
// course.
|
||||
// Add and remove sets are disjoint by construction. Parallel is safe.
|
||||
await Promise.all(
|
||||
[
|
||||
has_adds &&
|
||||
github.rest.pulls.requestReviewers({
|
||||
...context.repo,
|
||||
pull_number,
|
||||
reviewers: users_not_yet_reached,
|
||||
team_reviewers: teams_not_yet_reached,
|
||||
}),
|
||||
has_removals &&
|
||||
github.rest.pulls.removeRequestedReviewers({
|
||||
...context.repo,
|
||||
pull_number,
|
||||
reviewers: users_to_remove,
|
||||
team_reviewers: teams_to_remove,
|
||||
}),
|
||||
].filter(Boolean),
|
||||
)
|
||||
await github.rest.pulls.requestReviewers({
|
||||
...context.repo,
|
||||
pull_number,
|
||||
reviewers: users_not_yet_reached,
|
||||
team_reviewers: teams_not_yet_reached,
|
||||
})
|
||||
}
|
||||
|
||||
// Subtract the just-revoked so revoking the last pending reviewer flips the label.
|
||||
const users_still_reached = users_reached.difference(new Set(users_to_remove))
|
||||
const teams_still_reached = teams_reached.difference(new Set(teams_to_remove))
|
||||
|
||||
// Return a boolean on whether the "needs: reviewers" label should be set.
|
||||
return (
|
||||
users_not_yet_reached.length === 0 &&
|
||||
teams_not_yet_reached.length === 0 &&
|
||||
users_still_reached.size === 0 &&
|
||||
teams_still_reached.size === 0
|
||||
users_reached.size === 0 &&
|
||||
teams_reached.size === 0
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,16 +37,16 @@ runCommand "manual.epub"
|
|||
</book>
|
||||
'';
|
||||
|
||||
passAsFile = [ "epub" ];
|
||||
__structuredAttrs = true;
|
||||
}
|
||||
''
|
||||
mkdir scratch
|
||||
xsltproc \
|
||||
printf "%s" "$epub" | xsltproc \
|
||||
--param chapter.autolabel 0 \
|
||||
--nonet \
|
||||
--output scratch/ \
|
||||
${docbook_xsl_ns}/xml/xsl/docbook/epub/docbook.xsl \
|
||||
$epubPath
|
||||
-
|
||||
|
||||
echo "application/epub+zip" > mimetype
|
||||
zip -0Xq -b "$TMPDIR" "$out" mimetype
|
||||
|
|
|
|||
|
|
@ -871,6 +871,15 @@ general. A number of other parameters can be overridden:
|
|||
(hello { }).override { extraRustcOpts = "-Z debuginfo=2"; }
|
||||
```
|
||||
|
||||
- Extra arguments passed to `rustc` when the crate is a proc-macro,
|
||||
replacing `extraRustcOpts`. Useful to keep instrumentation flags
|
||||
(sanitizers, coverage) off host dylibs. Defaults to `null`, which
|
||||
inherits `extraRustcOpts`:
|
||||
|
||||
```nix
|
||||
(myProcMacro { }).override { extraRustcOptsForProcMacro = [ ]; }
|
||||
```
|
||||
|
||||
- The lint level cap passed to `rustc`. Defaults to `null`, which
|
||||
auto-resolves to `"allow"` (silences all lints) when `lints` is
|
||||
empty, or `"forbid"` (no cap) when `lints` is set. Because `rustc`
|
||||
|
|
|
|||
|
|
@ -204,8 +204,8 @@ lib.mapAttrs mkLicense (
|
|||
};
|
||||
|
||||
bola11 = {
|
||||
url = "https://blitiri.com.ar/p/bola/";
|
||||
fullName = "Buena Onda License Agreement 1.1";
|
||||
spdxId = "BOLA-1.1";
|
||||
fullName = "Buena Onda License Agreement v1.1";
|
||||
};
|
||||
|
||||
boost = {
|
||||
|
|
@ -326,8 +326,8 @@ lib.mapAttrs mkLicense (
|
|||
};
|
||||
|
||||
capec = {
|
||||
fullName = "Common Attack Pattern Enumeration and Classification";
|
||||
url = "https://capec.mitre.org/about/termsofuse.html";
|
||||
fullName = "Common Attack Pattern Enumeration and Classification License";
|
||||
spdxId = "CAPEC-tou";
|
||||
};
|
||||
|
||||
clArtistic = {
|
||||
|
|
@ -475,6 +475,11 @@ lib.mapAttrs mkLicense (
|
|||
fullName = "CeCILL-C Free Software License Agreement";
|
||||
};
|
||||
|
||||
cfitsio = {
|
||||
spdxId = "CFITSIO";
|
||||
fullName = "CFITSIO License";
|
||||
};
|
||||
|
||||
classpathException20 = {
|
||||
spdxId = "Classpath-exception-2.0";
|
||||
fullName = "Classpath exception 2.0";
|
||||
|
|
@ -760,14 +765,7 @@ lib.mapAttrs mkLicense (
|
|||
|
||||
hpndSellVariantSafetyClause = {
|
||||
fullName = "HPND - sell variant with safety critical systems clause";
|
||||
url = "https://gitlab.freedesktop.org/xorg/driver/xf86-video-voodoo/-/blob/68a5b6d98ae34749cca889f4373b4043d00bfe6a/src/voodoo_dga.c#L12-33";
|
||||
# TODO: if the license gets accepted to spdx then
|
||||
# add spdxId
|
||||
# else
|
||||
# remove license
|
||||
# && replace reference with whatever this license is supposed to be then
|
||||
# https://github.com/spdx/license-list-XML/issues/2922
|
||||
# spdxId = "HPND-sell-variant-safety-clause";
|
||||
spdxId = "HPND-sell-variant-critical-systems";
|
||||
};
|
||||
|
||||
hpndDec = {
|
||||
|
|
@ -1257,8 +1255,8 @@ lib.mapAttrs mkLicense (
|
|||
};
|
||||
|
||||
paratype = {
|
||||
fullName = "ParaType Free Font Licensing Agreement";
|
||||
url = "https://web.archive.org/web/20161209023955/http://www.paratype.ru/public/pt_openlicense_eng.asp";
|
||||
spdxId = "ParaType-Free-Font-1.3";
|
||||
fullName = "ParaType Free Font Licensing Agreement v1.3";
|
||||
};
|
||||
|
||||
parity70 = {
|
||||
|
|
@ -1337,7 +1335,8 @@ lib.mapAttrs mkLicense (
|
|||
# Gentoo seems to treat it as a license:
|
||||
# https://gitweb.gentoo.org/repo/gentoo.git/tree/licenses/SGMLUG?id=7d999af4a47bf55e53e54713d98d145f935935c1
|
||||
sgmlug = {
|
||||
fullName = "SGML UG SGML Parser Materials license";
|
||||
spdxId = "SGMLUG-PM";
|
||||
fullName = "SGMLUG Parser Materials License";
|
||||
};
|
||||
|
||||
sissl11 = {
|
||||
|
|
@ -1434,11 +1433,8 @@ lib.mapAttrs mkLicense (
|
|||
};
|
||||
|
||||
tekHvcLicense = {
|
||||
spdxId = "TekHVC";
|
||||
fullName = "TekHVC License";
|
||||
url = "https://gitlab.freedesktop.org/xorg/lib/libx11/-/blob/7f8305c779ac6948d7261764f5ffb8ae9aa975b1/COPYING#L138-171";
|
||||
# TODO: add spdxId when it gets accepted to spdx
|
||||
# https://tools.spdx.org/app/license_requests/458
|
||||
# https://github.com/spdx/license-list-XML/issues/2757
|
||||
};
|
||||
|
||||
torque11 = {
|
||||
|
|
@ -1459,8 +1455,8 @@ lib.mapAttrs mkLicense (
|
|||
};
|
||||
|
||||
tost = {
|
||||
spdxId = "Pixar";
|
||||
fullName = "Tomorrow Open Source Technology License 1.0";
|
||||
url = "https://github.com/PixarAnimationStudios/OpenUSD/blob/release/LICENSE.txt";
|
||||
};
|
||||
|
||||
ubdlException = {
|
||||
|
|
|
|||
|
|
@ -1101,11 +1101,10 @@ in
|
|||
```
|
||||
*/
|
||||
functionArgs =
|
||||
f:
|
||||
if f ? __functor then
|
||||
f.__functionArgs or (functionArgs (f.__functor f))
|
||||
else
|
||||
builtins.functionArgs f;
|
||||
let
|
||||
functionArgs = builtins.functionArgs;
|
||||
in
|
||||
f: if f ? __functor then f.__functionArgs or (functionArgs (f.__functor f)) else functionArgs f;
|
||||
|
||||
/**
|
||||
Check whether something is a function or something
|
||||
|
|
@ -1123,7 +1122,11 @@ in
|
|||
isFunction : Any -> Bool
|
||||
```
|
||||
*/
|
||||
isFunction = f: builtins.isFunction f || (f ? __functor && isFunction (f.__functor f));
|
||||
isFunction =
|
||||
let
|
||||
isFunction = builtins.isFunction;
|
||||
in
|
||||
f: isFunction f || (f ? __functor && isFunction (f.__functor f));
|
||||
|
||||
/**
|
||||
`mirrorFunctionArgs f g` creates a new function `g'` with the same behavior as `g` (`g' x == g x`)
|
||||
|
|
|
|||
|
|
@ -11203,13 +11203,6 @@
|
|||
githubId = 2332070;
|
||||
name = "Serge Baltic";
|
||||
};
|
||||
hyshka = {
|
||||
name = "Bryan Hyshka";
|
||||
email = "bryan@hyshka.com";
|
||||
github = "hyshka";
|
||||
githubId = 2090758;
|
||||
keys = [ { fingerprint = "24F4 1925 28C4 8797 E539 F247 DB2D 93D1 BFAA A6EA"; } ];
|
||||
};
|
||||
hythera = {
|
||||
name = "Hythera";
|
||||
github = "Hythera";
|
||||
|
|
@ -11386,6 +11379,12 @@
|
|||
githubId = 12570166;
|
||||
name = "Igor Ramazanov";
|
||||
};
|
||||
igorcafe = {
|
||||
email = "igoracmelo@protonmail.com";
|
||||
github = "igorcafe";
|
||||
githubId = 85039990;
|
||||
name = "Igor Melo";
|
||||
};
|
||||
igsha = {
|
||||
email = "igor.sharonov@gmail.com";
|
||||
github = "igsha";
|
||||
|
|
@ -11675,6 +11674,12 @@
|
|||
name = "Silvan Mosberger";
|
||||
keys = [ { fingerprint = "6C2B 55D4 4E04 8266 6B7D DA1A 422E 9EDA E015 7170"; } ];
|
||||
};
|
||||
iniw = {
|
||||
email = "git@vini.cat";
|
||||
github = "iniw";
|
||||
githubId = 30220881;
|
||||
name = "Vinicius Deolindo";
|
||||
};
|
||||
insipx = {
|
||||
email = "github@andrewplaza.dev";
|
||||
github = "insipx";
|
||||
|
|
@ -25672,6 +25677,11 @@
|
|||
github = "skohtv";
|
||||
githubId = 101289702;
|
||||
};
|
||||
skonotopov = {
|
||||
name = "Sergey Konotopov";
|
||||
github = "kinkou";
|
||||
githubId = 931329;
|
||||
};
|
||||
skovati = {
|
||||
github = "skovati";
|
||||
githubId = 49844593;
|
||||
|
|
@ -28697,6 +28707,12 @@
|
|||
github = "usrfriendly";
|
||||
githubId = 2502060;
|
||||
};
|
||||
usu171 = {
|
||||
email = "usu171@proton.me";
|
||||
github = "Usu171";
|
||||
githubId = 52230991;
|
||||
name = "Usu171";
|
||||
};
|
||||
utdemir = {
|
||||
email = "me@utdemir.com";
|
||||
github = "utdemir";
|
||||
|
|
@ -29086,12 +29102,6 @@
|
|||
githubId = 59029586;
|
||||
name = "Vitor Pavan";
|
||||
};
|
||||
vizanto = {
|
||||
email = "danny@prime.vc";
|
||||
github = "vizanto";
|
||||
githubId = 326263;
|
||||
name = "Danny Wilson";
|
||||
};
|
||||
vizid = {
|
||||
email = "mail@vizqq.cc";
|
||||
github = "ViZiD";
|
||||
|
|
@ -29329,6 +29339,11 @@
|
|||
githubId = 115360611;
|
||||
name = "Wölfchen";
|
||||
};
|
||||
w1lldu = {
|
||||
name = "William Du";
|
||||
github = "w1lldu";
|
||||
githubId = 70287641;
|
||||
};
|
||||
waelwindows = {
|
||||
email = "waelwindows9922@gmail.com";
|
||||
github = "Waelwindows";
|
||||
|
|
@ -29627,6 +29642,12 @@
|
|||
githubId = 5185341;
|
||||
name = "Will Cohen";
|
||||
};
|
||||
WillemToorenburgh = {
|
||||
email = "willemtoorenburgh@gmail.com";
|
||||
github = "willemtoorenburgh";
|
||||
githubId = 50425141;
|
||||
name = "Willem Toorenburgh";
|
||||
};
|
||||
willfish = {
|
||||
email = "willfish@pescado.mozmail.com";
|
||||
github = "willfish";
|
||||
|
|
|
|||
|
|
@ -435,6 +435,7 @@ with lib.maintainers;
|
|||
libretro = {
|
||||
members = [
|
||||
aanderse
|
||||
igorcafe
|
||||
thiagokokada
|
||||
];
|
||||
scope = "Maintain Libretro, RetroArch and related packages.";
|
||||
|
|
|
|||
|
|
@ -250,17 +250,17 @@ rec {
|
|||
</chapter>
|
||||
</book>
|
||||
'';
|
||||
passAsFile = [ "doc" ];
|
||||
__structuredAttrs = true;
|
||||
}
|
||||
''
|
||||
# Generate the epub manual.
|
||||
dst=$out/${common.outputPath}
|
||||
|
||||
xsltproc \
|
||||
printf "%s" "$doc" | xsltproc \
|
||||
--param chapter.autolabel 0 \
|
||||
--nonet --xinclude --output $dst/epub/ \
|
||||
${docbook_xsl_ns}/xml/xsl/docbook/epub/docbook.xsl \
|
||||
$docPath
|
||||
-
|
||||
|
||||
echo "application/epub+zip" > mimetype
|
||||
manual="$dst/nixos-manual.epub"
|
||||
|
|
|
|||
|
|
@ -98,6 +98,8 @@
|
|||
|
||||
- [nohang](https://github.com/hakavlad/nohang), a daemon for Linux that prevents out of memory (OOM) situations from affecting system responsiveness. Available as [services.nohang](#opt-services.nohang.enable)
|
||||
|
||||
- [clevis-luks-askpass](https://github.com/latchset/clevis), automatic LUKS unlocking in initrd using clevis token bindings stored in LUKS headers. Available as [boot.initrd.clevisLuksAskpass](#opt-boot.initrd.clevisLuksAskpass.enable).
|
||||
|
||||
- [bentopdf](https://github.com/alam00000/bentopdf), a privacy-first PDF toolkit running completely in-browser. Available as [services.bentopdf](#opt-services.bentopdf.enable).
|
||||
|
||||
- [hyprwhspr-rs](https://github.com/better-slop/hyprwhspr-rs), a keybind activated speech-to-text voice dictation utility built for use with Hyprland. Available as `services.hyprwhspr-rs`
|
||||
|
|
|
|||
|
|
@ -36,16 +36,23 @@ in
|
|||
|
||||
i18n = {
|
||||
glibcLocales = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
default = pkgs.glibcLocales.override {
|
||||
allLocales = lib.elem "all" cfg.supportedLocales;
|
||||
locales = cfg.supportedLocales;
|
||||
};
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
default =
|
||||
if pkgs.glibcLocales != null then
|
||||
pkgs.glibcLocales.override {
|
||||
allLocales = lib.elem "all" cfg.supportedLocales;
|
||||
locales = cfg.supportedLocales;
|
||||
}
|
||||
else
|
||||
null;
|
||||
defaultText = lib.literalExpression ''
|
||||
pkgs.glibcLocales.override {
|
||||
allLocales = lib.elem "all" config.i18n.supportedLocales;
|
||||
locales = config.i18n.supportedLocales;
|
||||
}
|
||||
if pkgs.glibcLocales != null then
|
||||
pkgs.glibcLocales.override {
|
||||
allLocales = lib.elem "all" config.i18n.supportedLocales;
|
||||
locales = config.i18n.supportedLocales;
|
||||
}
|
||||
else
|
||||
null
|
||||
'';
|
||||
example = lib.literalExpression "pkgs.glibcLocales";
|
||||
description = ''
|
||||
|
|
@ -186,7 +193,9 @@ in
|
|||
|
||||
environment.systemPackages =
|
||||
# We increase the priority a little, so that plain glibc in systemPackages can't win.
|
||||
lib.optional (cfg.supportedLocales != [ ]) (lib.setPrio (-1) cfg.glibcLocales);
|
||||
lib.optional (cfg.glibcLocales != null && cfg.supportedLocales != [ ]) (
|
||||
lib.setPrio (-1) cfg.glibcLocales
|
||||
);
|
||||
|
||||
environment.sessionVariables = {
|
||||
LOCALE_ARCHIVE = "/run/current-system/sw/lib/locale/locale-archive";
|
||||
|
|
@ -200,7 +209,7 @@ in
|
|||
// cfg.extraLocaleSettings
|
||||
);
|
||||
|
||||
systemd.globalEnvironment = lib.mkIf (cfg.supportedLocales != [ ]) {
|
||||
systemd.globalEnvironment = lib.mkIf (cfg.glibcLocales != null && cfg.supportedLocales != [ ]) {
|
||||
LOCALE_ARCHIVE = "${cfg.glibcLocales}/lib/locale/locale-archive";
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1366,6 +1366,7 @@
|
|||
./services/networking/rdnssd.nix
|
||||
./services/networking/realm.nix
|
||||
./services/networking/redsocks.nix
|
||||
./services/networking/reframe.nix
|
||||
./services/networking/resilio.nix
|
||||
./services/networking/robustirc-bridge.nix
|
||||
./services/networking/rosenpass.nix
|
||||
|
|
@ -1896,6 +1897,7 @@
|
|||
./system/activation/switchable-system.nix
|
||||
./system/activation/top-level.nix
|
||||
./system/boot/binfmt.nix
|
||||
./system/boot/clevis-luks-askpass.nix
|
||||
./system/boot/clevis.nix
|
||||
./system/boot/emergency-mode.nix
|
||||
./system/boot/grow-partition.nix
|
||||
|
|
|
|||
|
|
@ -83,6 +83,15 @@ in
|
|||
{
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
|
||||
# Hyprland needs permissions to give itself SCHED_RR on startup:
|
||||
# https://github.com/hyprwm/Hyprland/blob/main/src/init/initHelpers.cpp
|
||||
security.wrappers.Hyprland = {
|
||||
owner = "root";
|
||||
group = "root";
|
||||
capabilities = "cap_sys_nice+ep";
|
||||
source = lib.getExe cfg.package;
|
||||
};
|
||||
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
extraPortals = [ cfg.portalPackage ];
|
||||
|
|
|
|||
|
|
@ -95,7 +95,9 @@ in
|
|||
include "${pkgs.apparmor-profiles}/etc/apparmor.d/abstractions/base"
|
||||
${pkgs.stdenv.cc.libc}/share/locale/** r,
|
||||
${pkgs.stdenv.cc.libc}/share/locale.alias r,
|
||||
${config.i18n.glibcLocales}/lib/locale/locale-archive r,
|
||||
${lib.optionalString (
|
||||
config.i18n.glibcLocales != null
|
||||
) "${config.i18n.glibcLocales}/lib/locale/locale-archive r,"}
|
||||
${etcRule "localtime"}
|
||||
${pkgs.tzdata}/share/zoneinfo/** r,
|
||||
${pkgs.stdenv.cc.libc}/share/i18n/** r,
|
||||
|
|
|
|||
|
|
@ -77,6 +77,8 @@ let
|
|||
BindReadOnlyPaths = [
|
||||
"/etc"
|
||||
"/run/systemd"
|
||||
]
|
||||
++ lib.optionals (config.i18n.glibcLocales != null) [
|
||||
"${config.i18n.glibcLocales}"
|
||||
]
|
||||
++ mapAttrsToList (name: inbox: inbox.description) cfg.inboxes
|
||||
|
|
|
|||
|
|
@ -10,6 +10,12 @@ let
|
|||
format = pkgs.formats.keyValue { listsAsDuplicateKeys = true; };
|
||||
cfgfile = format.generate "minidlna.conf" cfg.settings;
|
||||
|
||||
# Match a media_dir entry under /home, allowing an optional `A,`/`V,`/`P,`
|
||||
# media-type prefix.
|
||||
mediaDirsUnderHome = lib.any (
|
||||
dir: builtins.match "([AVP],)?/home/.*" dir != null
|
||||
) cfg.settings.media_dir;
|
||||
|
||||
in
|
||||
{
|
||||
options.services.minidlna.enable = lib.mkEnableOption "MiniDLNA, a simple DLNA server. Consider adding `openFirewall = true` into your config";
|
||||
|
|
@ -133,6 +139,49 @@ in
|
|||
RuntimeDirectory = "minidlna";
|
||||
PIDFile = "/run/minidlna/pid";
|
||||
ExecStart = "${lib.getExe cfg.package} -S -P /run/minidlna/pid -f ${cfgfile}";
|
||||
|
||||
# Hardening
|
||||
AmbientCapabilities = [ "" ];
|
||||
CapabilityBoundingSet = [ "" ];
|
||||
DeviceAllow = [ "" ];
|
||||
LockPersonality = true;
|
||||
MemoryDenyWriteExecute = true;
|
||||
NoNewPrivileges = true;
|
||||
PrivateDevices = true;
|
||||
PrivateTmp = true;
|
||||
PrivateUsers = true;
|
||||
ProcSubset = "pid";
|
||||
ProtectClock = true;
|
||||
ProtectControlGroups = true;
|
||||
# Many users keep media under /home; auto-disable ProtectHome when
|
||||
# any media_dir entry is under /home. Override explicitly to force.
|
||||
ProtectHome = lib.mkDefault (!mediaDirsUnderHome);
|
||||
ProtectHostname = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectProc = "invisible";
|
||||
ProtectSystem = "strict";
|
||||
RemoveIPC = true;
|
||||
# AF_NETLINK is required for getifaddrs() to enumerate interfaces
|
||||
# for SSDP multicast (239.255.255.250:1900) advertisements.
|
||||
RestrictAddressFamilies = [
|
||||
"AF_INET"
|
||||
"AF_INET6"
|
||||
"AF_NETLINK"
|
||||
"AF_UNIX"
|
||||
];
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
RestrictSUIDSGID = true;
|
||||
SystemCallArchitectures = "native";
|
||||
SystemCallErrorNumber = "EPERM";
|
||||
SystemCallFilter = [
|
||||
"@system-service"
|
||||
"~@privileged"
|
||||
"~@resources"
|
||||
];
|
||||
UMask = "0077";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -41,7 +41,8 @@ in
|
|||
local payload="$1"
|
||||
|
||||
echo "Adding list: $payload"
|
||||
local result=$(PostFTLData "lists" "$payload")
|
||||
local type=$($jq -r '.type' <<< "$payload")
|
||||
local result=$(PostFTLData "lists?type=$type" "$payload")
|
||||
|
||||
local error="$($jq '.error' <<< "$result")"
|
||||
if [[ "$error" != "null" ]]; then
|
||||
|
|
|
|||
|
|
@ -1010,12 +1010,11 @@ in
|
|||
{
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
Type = "simple";
|
||||
Type = "notify-reload";
|
||||
RuntimeDirectory = "prosody";
|
||||
PIDFile = "/run/prosody/prosody.pid";
|
||||
Environment = "PROSODY_CONFIG=/run/prosody/prosody.cfg.lua";
|
||||
ExecStart = "${lib.getExe cfg.package} -F";
|
||||
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||
Restart = "on-abnormal";
|
||||
|
||||
AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" ];
|
||||
|
|
|
|||
|
|
@ -6,160 +6,47 @@
|
|||
}:
|
||||
let
|
||||
cfg = config.services.reframe;
|
||||
iniFmt = pkgs.formats.ini { };
|
||||
settingsFormat = pkgs.formats.ini { };
|
||||
in
|
||||
{
|
||||
options.services.reframe = {
|
||||
enable = lib.mkEnableOption "DRM/KMS based remote desktop for Linux that supports Wayland/NVIDIA/headless/login…";
|
||||
package = lib.mkPackageOption pkgs "reframe" { };
|
||||
configs = lib.mkOption {
|
||||
type = lib.types.attrsOf (
|
||||
lib.types.submodule {
|
||||
options = {
|
||||
type = lib.types.submodule {
|
||||
freeformType = settingsFormat.type;
|
||||
};
|
||||
default = { };
|
||||
|
||||
description = "Configurations for ReFrame";
|
||||
example = ''
|
||||
{
|
||||
main = {
|
||||
reframe = {
|
||||
card = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "";
|
||||
description = "Select monitor via DRM card. All available cards and connectors can be found in `/sys/class/drm/`.";
|
||||
example = "card0";
|
||||
};
|
||||
connector = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "";
|
||||
description = "Select monitor via connector. All available cards and connectors can be found in `/sys/class/drm/`.";
|
||||
example = "eDP-1";
|
||||
};
|
||||
rotation = lib.mkOption {
|
||||
type = lib.types.enum [
|
||||
0
|
||||
90
|
||||
180
|
||||
270
|
||||
];
|
||||
default = 0;
|
||||
description = ''
|
||||
This is the angle you rotate the monitor, not the angle of display content relative to the monitor!
|
||||
Valid angles are clockwise `0`, `90`, `180`, `270`.
|
||||
'';
|
||||
};
|
||||
desktop-width = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 0;
|
||||
description = ''
|
||||
If you have more than 1 monitor, set those values to the logical size of the whole virtual desktop.
|
||||
You can get those value by finding the pointer position of the right most and bottom most border of your monitors.
|
||||
'';
|
||||
};
|
||||
desktop-height = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 0;
|
||||
description = ''
|
||||
If you have more than 1 monitor, set those values to the logical size of the whole virtual desktop.
|
||||
You can get those value by finding the pointer position of the right most and bottom most border of your monitors.
|
||||
'';
|
||||
};
|
||||
monitor-x = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 0;
|
||||
description = ''
|
||||
If you have more than 1 monitor, set those values to the logical position of the top left corner of your selected monitor.
|
||||
'';
|
||||
};
|
||||
monitor-y = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 0;
|
||||
description = ''
|
||||
If you have more than 1 monitor, set those values to the logical position of the top left corner of your selected monitor.
|
||||
'';
|
||||
};
|
||||
default-width = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 0;
|
||||
description = ''
|
||||
If your client does not support resizing, use those to force a size. Empty or `0` means monitor size.
|
||||
'';
|
||||
};
|
||||
default-height = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 0;
|
||||
description = ''
|
||||
If your client does not support resizing, use those to force a size. Empty or `0` means monitor size.
|
||||
'';
|
||||
};
|
||||
resize = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Set to `false` to prohibit client resizing.
|
||||
'';
|
||||
};
|
||||
cursor = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Set to `false` to ignore DRM cursor plane.
|
||||
'';
|
||||
};
|
||||
wakeup = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Set to `false` if you already disabled automatic screen blank.
|
||||
'';
|
||||
};
|
||||
damage = lib.mkOption {
|
||||
type = lib.types.enum [
|
||||
""
|
||||
"cpu"
|
||||
"gpu"
|
||||
];
|
||||
default = "cpu";
|
||||
description = ''
|
||||
Set to `gpu` to use GPU damage region detection, which may be more efficiency but may cause artifacts depending on GPU vendors.
|
||||
Set to `cpu` to use CPU damage region detection if you get bugs with `gpu`.
|
||||
Empty to disable damage region detection, which may require higher network bandwidth.
|
||||
'';
|
||||
};
|
||||
fps = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 30;
|
||||
};
|
||||
card = "card0";
|
||||
connector = "eDP-1";
|
||||
rotation = 0;
|
||||
desktop-width = 1920;
|
||||
desktop-height = 1080;
|
||||
monitor-x = 0;
|
||||
monitor-y = 0;
|
||||
default-width = 1920;
|
||||
default-height = 1080;
|
||||
resize = true;
|
||||
cursor = true;
|
||||
wakeup = true;
|
||||
damage = "cpu";
|
||||
fps = 30;
|
||||
};
|
||||
vnc = {
|
||||
ip = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "";
|
||||
description = ''
|
||||
Empty means accept all incoming connections.
|
||||
'';
|
||||
};
|
||||
port = lib.mkOption {
|
||||
type = lib.types.port;
|
||||
default = 5933;
|
||||
};
|
||||
password = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "";
|
||||
description = ''
|
||||
Empty means no password.
|
||||
'';
|
||||
};
|
||||
type = lib.mkOption {
|
||||
type = lib.types.enum [
|
||||
"libvncserver"
|
||||
"neatvnc"
|
||||
];
|
||||
default = "libvncserver";
|
||||
description = ''
|
||||
Set to `neatvnc` to prefer neatvnc, which provides more efficient encoding methods but maybe more unstable.
|
||||
'';
|
||||
};
|
||||
ip = "0.0.0.0";
|
||||
port = 5933;
|
||||
password = "password";
|
||||
type = "libvncserver";
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
default = { };
|
||||
description = "Configurations for ReFrame";
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -179,7 +66,7 @@ in
|
|||
mode = "0644";
|
||||
user = "root";
|
||||
group = "root";
|
||||
source = iniFmt.generate "${name}.conf" value;
|
||||
source = settingsFormat.generate "${name}.conf" value;
|
||||
}
|
||||
) cfg.configs;
|
||||
systemd.services = lib.mapAttrs' (
|
||||
|
|
|
|||
|
|
@ -39,8 +39,12 @@ let
|
|||
|
||||
# Ensure that clipboard works for non-ASCII characters
|
||||
sed -i -e '/.*SessionVariables.*/ a\
|
||||
LANG=${config.i18n.defaultLocale}\
|
||||
LOCALE_ARCHIVE=${config.i18n.glibcLocales}/lib/locale/locale-archive
|
||||
LANG=${config.i18n.defaultLocale}${
|
||||
lib.optionalString (config.i18n.glibcLocales != null) ''
|
||||
\
|
||||
LOCALE_ARCHIVE=${config.i18n.glibcLocales}/lib/locale/locale-archive
|
||||
''
|
||||
}
|
||||
' $out/sesman.ini
|
||||
|
||||
${cfg.extraConfDirCommands}
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ in
|
|||
ProtectControlGroups = true;
|
||||
MemoryAccounting = true;
|
||||
|
||||
ExecStart = "${pkgs.prefect}/bin/prefect server start --host ${cfg.host} --port ${toString cfg.port}";
|
||||
ExecStart = "${lib.getExe cfg.package} server start --host ${cfg.host} --port ${toString cfg.port}";
|
||||
Restart = "always";
|
||||
WorkingDirectory = cfg.dataDir;
|
||||
};
|
||||
|
|
@ -216,7 +216,7 @@ in
|
|||
ProtectControlGroups = true;
|
||||
MemoryAccounting = true;
|
||||
ExecStart = ''
|
||||
${pkgs.prefect}/bin/prefect worker start \
|
||||
${lib.getExe cfg.package} worker start \
|
||||
--pool ${poolName} \
|
||||
--type process \
|
||||
--install-policy ${poolCfg.installPolicy}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,8 @@ in
|
|||
|
||||
hostName = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "goupile";
|
||||
default = config.networking.fqdnOrHostName;
|
||||
defaultText = lib.literalExpression "config.networking.fqdnOrHostName";
|
||||
description = "Nginx service name for goupile service.";
|
||||
};
|
||||
};
|
||||
|
|
@ -70,7 +71,7 @@ in
|
|||
services.nginx = {
|
||||
enable = lib.mkDefault true;
|
||||
virtualHosts.${cfg.hostName} = {
|
||||
locations."/".proxyPass = "http://${cfg.hostName}:${builtins.toString cfg.settings.HTTP.Port}";
|
||||
locations."/".proxyPass = "http://127.0.0.1:${builtins.toString cfg.settings.HTTP.Port}";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,7 +149,10 @@ in
|
|||
systemd.services.miniflux = {
|
||||
description = "Miniflux service";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
requires = lib.optional cfg.createDatabaseLocally "miniflux-dbsetup.service";
|
||||
requires = lib.optionals cfg.createDatabaseLocally [
|
||||
"miniflux-dbsetup.service"
|
||||
"postgresql.target"
|
||||
];
|
||||
after = [
|
||||
"network.target"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ in
|
|||
epkgs: [
|
||||
epkgs.emms
|
||||
epkgs.magit
|
||||
epkgs.proofgeneral
|
||||
epkgs.proof-general
|
||||
]
|
||||
'';
|
||||
description = ''
|
||||
|
|
|
|||
|
|
@ -58,7 +58,11 @@
|
|||
--set DISTRO_ID ${lib.escapeShellArg config.system.nixos.distroId} \
|
||||
--set INSTALL_BOOTLOADER ${lib.escapeShellArg config.system.build.installBootLoader} \
|
||||
--set PRE_SWITCH_CHECK ${lib.escapeShellArg config.system.preSwitchChecksScript} \
|
||||
--set LOCALE_ARCHIVE ${config.i18n.glibcLocales}/lib/locale/locale-archive \
|
||||
${
|
||||
lib.optionalString (
|
||||
config.i18n.glibcLocales != null
|
||||
) "--set LOCALE_ARCHIVE ${config.i18n.glibcLocales}/lib/locale/locale-archive"
|
||||
} \
|
||||
--set SYSTEMD ${config.systemd.package}
|
||||
)
|
||||
'';
|
||||
|
|
|
|||
|
|
@ -353,7 +353,6 @@ in
|
|||
# Legacy environment variables. These were used by the activation script,
|
||||
# but some other script might still depend on them, although unlikely.
|
||||
installBootLoader = config.system.build.installBootLoader;
|
||||
localeArchive = "${config.i18n.glibcLocales}/lib/locale/locale-archive";
|
||||
distroId = config.system.nixos.distroId;
|
||||
perl = pkgs.perl.withPackages (
|
||||
p: with p; [
|
||||
|
|
@ -376,6 +375,9 @@ in
|
|||
# option, as opposed to `system.extraDependencies`.
|
||||
passedChecks = concatStringsSep " " config.system.checks;
|
||||
}
|
||||
// lib.optionalAttrs (config.i18n.glibcLocales != null) {
|
||||
localeArchive = "${config.i18n.glibcLocales}/lib/locale/locale-archive";
|
||||
}
|
||||
// lib.optionalAttrs (config.system.forbiddenDependenciesRegexes != [ ]) {
|
||||
closureInfo = pkgs.closureInfo {
|
||||
rootPaths = [
|
||||
|
|
|
|||
84
nixos/modules/system/boot/clevis-luks-askpass.nix
Normal file
84
nixos/modules/system/boot/clevis-luks-askpass.nix
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.boot.initrd.clevisLuksAskpass;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
boot.initrd.clevisLuksAskpass.enable = lib.mkEnableOption ''
|
||||
clevis-luks-askpass in initrd.
|
||||
|
||||
Watches for systemd password requests during boot and answers them
|
||||
using clevis tokens bound to LUKS headers. Runs in parallel with
|
||||
the interactive password prompt. If clevis cannot unlock a device
|
||||
(tang unreachable, no binding, etc.) the user can still type the
|
||||
passphrase.
|
||||
|
||||
Prerequisites:
|
||||
- Bind clevis to each LUKS device:
|
||||
clevis luks bind -d /dev/xxx tang '{"url":"..."}'
|
||||
- Configure networking in the initrd so tang servers are reachable
|
||||
'';
|
||||
|
||||
boot.initrd.clevisLuksAskpass.package = lib.mkPackageOption pkgs "clevis" { };
|
||||
|
||||
boot.initrd.clevisLuksAskpass.useTang = lib.mkOption {
|
||||
description = "Whether the Clevis headers used to decrypt the devices uses a Tang server as a pin.";
|
||||
default = false;
|
||||
type = lib.types.bool;
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = config.boot.initrd.systemd.enable;
|
||||
message = "clevis-luks-askpass requires boot.initrd.systemd.enable = true";
|
||||
}
|
||||
];
|
||||
|
||||
warnings =
|
||||
if
|
||||
cfg.useTang && !config.boot.initrd.network.enable && !config.boot.initrd.systemd.network.enable
|
||||
then
|
||||
[ "In order to use a Tang pinned secret you must configure networking in initrd" ]
|
||||
else
|
||||
[ ];
|
||||
|
||||
boot.initrd.systemd = {
|
||||
# Install upstream clevis-luks-askpass.path and clevis-luks-askpass.service into the initrd
|
||||
packages = [ cfg.package ];
|
||||
|
||||
storePaths = [
|
||||
cfg.package
|
||||
"${pkgs.systemd}/lib/systemd/systemd-reply-password"
|
||||
"${pkgs.jose}/bin/jose"
|
||||
"${pkgs.curl}/bin/curl"
|
||||
"${pkgs.cryptsetup}/bin/cryptsetup"
|
||||
"${pkgs.gnused}/bin/sed"
|
||||
"${pkgs.gnugrep}/bin/grep"
|
||||
"${pkgs.gawk}/bin/gawk"
|
||||
"${pkgs.coreutils}/bin/cat"
|
||||
"${pkgs.luksmeta}/bin/luksmeta"
|
||||
"${pkgs.tpm2-tools}/bin/tpm2_createprimary"
|
||||
"${pkgs.tpm2-tools}/bin/tpm2_flushcontext"
|
||||
"${pkgs.tpm2-tools}/bin/tpm2_load"
|
||||
"${pkgs.tpm2-tools}/bin/tpm2_unseal"
|
||||
];
|
||||
|
||||
# This is in the [Install] section of clevis-luks-askpass.path but that's not processed in nixos so we add it here
|
||||
paths.clevis-luks-askpass = {
|
||||
wantedBy = [ "cryptsetup.target" ];
|
||||
};
|
||||
|
||||
services.clevis-luks-askpass = {
|
||||
wants = lib.optional cfg.useTang "network-online.target";
|
||||
after = lib.optional cfg.useTang "network-online.target";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1114,7 +1114,6 @@ in
|
|||
-> all (dev: dev.preOpenCommands == "" && dev.postOpenCommands == "") (attrValues luks.devices);
|
||||
message = "boot.initrd.luks.devices.<name>.preOpenCommands and postOpenCommands is not supported by systemd stage 1. Please bind a service to cryptsetup.target or cryptsetup-pre.target instead.";
|
||||
}
|
||||
# TODO
|
||||
{
|
||||
assertion = config.boot.initrd.systemd.enable -> !luks.gpgSupport;
|
||||
message = systemdStage1HardwareKeyAssertionMessage "boot.initrd.luks.gpgSupport";
|
||||
|
|
@ -1123,7 +1122,6 @@ in
|
|||
assertion = config.boot.initrd.systemd.enable -> !luks.fido2Support;
|
||||
message = systemdStage1HardwareKeyAssertionMessage "boot.initrd.luks.fido2Support";
|
||||
}
|
||||
# TODO
|
||||
{
|
||||
assertion = config.boot.initrd.systemd.enable -> !luks.yubikeySupport;
|
||||
message = systemdStage1HardwareKeyAssertionMessage "boot.initrd.luks.yubikeySupport";
|
||||
|
|
|
|||
|
|
@ -9,19 +9,8 @@
|
|||
|
||||
imports = [
|
||||
(lib.mkRenamedOptionModule
|
||||
[
|
||||
"boot"
|
||||
"initrd"
|
||||
"systemd"
|
||||
"enableTpm2"
|
||||
]
|
||||
[
|
||||
"boot"
|
||||
"initrd"
|
||||
"systemd"
|
||||
"tpm2"
|
||||
"enable"
|
||||
]
|
||||
[ "boot" "initrd" "systemd" "enableTpm2" ]
|
||||
[ "boot" "initrd" "systemd" "tpm2" "enable" ]
|
||||
)
|
||||
];
|
||||
|
||||
|
|
@ -31,13 +20,18 @@
|
|||
defaultText = "systemd.package.withTpm2Units";
|
||||
};
|
||||
|
||||
systemd.tpm2.pcrphases.enable = lib.mkEnableOption "systemd boot phase measurements";
|
||||
|
||||
boot.initrd.systemd.tpm2.enable = lib.mkEnableOption "systemd initrd TPM2 support" // {
|
||||
default = config.boot.initrd.systemd.package.withTpm2Units;
|
||||
defaultText = "boot.initrd.systemd.package.withTpm2Units";
|
||||
};
|
||||
|
||||
boot.initrd.systemd.tpm2.pcrphases.enable =
|
||||
lib.mkEnableOption "systemd initrd boot phase measurements";
|
||||
};
|
||||
|
||||
# TODO: pcrphase, pcrextend, pcrfs, pcrmachine
|
||||
# TODO: pcrextend, pcrfs, pcrmachine
|
||||
config = lib.mkMerge [
|
||||
# Stage 2
|
||||
(
|
||||
|
|
@ -52,6 +46,19 @@
|
|||
];
|
||||
}
|
||||
)
|
||||
(
|
||||
let
|
||||
cfg = config.systemd;
|
||||
in
|
||||
lib.mkIf (cfg.tpm2.enable && cfg.tpm2.pcrphases.enable) {
|
||||
systemd.additionalUpstreamSystemUnits = [
|
||||
"systemd-pcrphase.service"
|
||||
"systemd-pcrphase-sysinit.service"
|
||||
];
|
||||
systemd.services.systemd-pcrphase.wantedBy = [ "sysinit.target" ];
|
||||
systemd.services.systemd-pcrphase-sysinit.wantedBy = [ "sysinit.target" ];
|
||||
}
|
||||
)
|
||||
|
||||
# Stage 1
|
||||
(
|
||||
|
|
@ -77,5 +84,15 @@
|
|||
];
|
||||
}
|
||||
)
|
||||
(
|
||||
let
|
||||
cfg = config.boot.initrd.systemd;
|
||||
in
|
||||
lib.mkIf (cfg.enable && cfg.tpm2.enable && cfg.tpm2.pcrphases.enable) {
|
||||
boot.initrd.systemd.additionalUpstreamUnits = [ "systemd-pcrphase-initrd.service" ];
|
||||
boot.initrd.systemd.services.systemd-pcrphase-initrd.wantedBy = [ "initrd.target" ];
|
||||
boot.initrd.systemd.storePaths = [ "${cfg.package}/lib/systemd/systemd-pcrextend" ];
|
||||
}
|
||||
)
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -337,11 +337,7 @@ in
|
|||
done
|
||||
|
||||
# Move the new temporary /etc mount underneath the current /etc mount.
|
||||
#
|
||||
# This should eventually use util-linux to perform this move beneath,
|
||||
# however, this functionality is not yet in util-linux. See this
|
||||
# tracking issue: https://github.com/util-linux/util-linux/issues/2604
|
||||
${pkgs.move-mount-beneath}/bin/move-mount --move --beneath "$tmpEtcMount" /etc
|
||||
mount --move --beneath "$tmpEtcMount" /etc
|
||||
|
||||
# Unmount the top /etc mount to atomically reveal the new mount.
|
||||
umount --lazy --recursive /etc
|
||||
|
|
|
|||
|
|
@ -119,7 +119,6 @@ in
|
|||
);
|
||||
forceLuksSupportInInitrd = true;
|
||||
};
|
||||
# TODO: systemd stage 1
|
||||
postMountCommands = lib.mkIf (!config.boot.initrd.systemd.enable) (
|
||||
concatMapStrings (
|
||||
dev:
|
||||
|
|
|
|||
|
|
@ -273,6 +273,10 @@ in
|
|||
"bcachefs" = "${cfg.package}/bin/bcachefs";
|
||||
"mount.bcachefs" = "${cfg.package}/bin/mount.bcachefs";
|
||||
};
|
||||
boot.initrd.systemd.storePaths = [
|
||||
# Used by the ExecStart= in bcachefs-wait-devices@.service.
|
||||
"${cfg.package}/sbin/bcachefs"
|
||||
];
|
||||
boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
copy_bin_and_libs ${cfg.package}/bin/bcachefs
|
||||
copy_bin_and_libs ${cfg.package}/bin/mount.bcachefs
|
||||
|
|
@ -285,6 +289,7 @@ in
|
|||
commonFunctions + lib.concatStrings (lib.mapAttrsToList openCommand bootFs)
|
||||
);
|
||||
|
||||
boot.initrd.systemd.packages = [ cfg.package ];
|
||||
boot.initrd.systemd.services = lib.mapAttrs' (mkUnits "/sysroot") bootFs;
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
{
|
||||
name = "buildbot";
|
||||
|
||||
nodes = {
|
||||
containers = {
|
||||
bbmaster =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
|
|
|
|||
|
|
@ -124,47 +124,55 @@ in
|
|||
|
||||
environment.systemPackages =
|
||||
let
|
||||
replyToEmail = pkgs.writeScriptBin "reply-to-email" ''
|
||||
#!${pkgs.python3.interpreter}
|
||||
import imaplib
|
||||
import smtplib
|
||||
import ssl
|
||||
import email.header
|
||||
from email import message_from_bytes
|
||||
from email.message import EmailMessage
|
||||
replyToEmail =
|
||||
pkgs.writeScriptBin "reply-to-email"
|
||||
# python
|
||||
''
|
||||
#!${pkgs.python3.interpreter}
|
||||
import imaplib
|
||||
import smtplib
|
||||
import ssl
|
||||
import email.header
|
||||
import sys
|
||||
from email import message_from_bytes
|
||||
from email.message import EmailMessage
|
||||
|
||||
with imaplib.IMAP4('localhost') as imap:
|
||||
imap.login('alice', 'foobar')
|
||||
imap.select()
|
||||
status, data = imap.search(None, 'ALL')
|
||||
assert status == 'OK'
|
||||
with imaplib.IMAP4('localhost') as imap:
|
||||
imap.login('alice', 'foobar')
|
||||
imap.select()
|
||||
status, data = imap.search(None, 'ALL')
|
||||
assert status == 'OK'
|
||||
|
||||
nums = data[0].split()
|
||||
assert len(nums) == 1
|
||||
nums = data[0].split()
|
||||
try:
|
||||
assert len(nums) == 1
|
||||
except AssertionError:
|
||||
print("No mail in IMAP mailbox yet...", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
status, msg_data = imap.fetch(nums[0], '(RFC822)')
|
||||
assert status == 'OK'
|
||||
status, msg_data = imap.fetch(nums[0], '(RFC822)')
|
||||
assert status == 'OK'
|
||||
|
||||
msg = email.message_from_bytes(msg_data[0][1])
|
||||
subject = str(email.header.make_header(email.header.decode_header(msg['Subject'])))
|
||||
reply_to = email.header.decode_header(msg['Reply-To'])[0][0]
|
||||
message_id = email.header.decode_header(msg['Message-ID'])[0][0]
|
||||
date = email.header.decode_header(msg['Date'])[0][0]
|
||||
msg = email.message_from_bytes(msg_data[0][1])
|
||||
subject = str(email.header.make_header(email.header.decode_header(msg['Subject'])))
|
||||
reply_to = email.header.decode_header(msg['Reply-To'])[0][0]
|
||||
message_id = email.header.decode_header(msg['Message-ID'])[0][0]
|
||||
date = email.header.decode_header(msg['Date'])[0][0]
|
||||
|
||||
ctx = ssl.create_default_context()
|
||||
with smtplib.SMTP_SSL(host='${discourseDomain}', context=ctx) as smtp:
|
||||
reply = EmailMessage()
|
||||
reply['Subject'] = 'Re: ' + subject
|
||||
reply['To'] = reply_to
|
||||
reply['From'] = 'alice@${clientDomain}'
|
||||
reply['In-Reply-To'] = message_id
|
||||
reply['References'] = message_id
|
||||
reply['Date'] = date
|
||||
reply.set_content("Test reply.")
|
||||
ctx = ssl.create_default_context()
|
||||
with smtplib.SMTP_SSL(host='${discourseDomain}', context=ctx) as smtp:
|
||||
reply = EmailMessage()
|
||||
reply['Subject'] = 'Re: ' + subject
|
||||
reply['To'] = reply_to
|
||||
reply['From'] = 'alice@${clientDomain}'
|
||||
reply['In-Reply-To'] = message_id
|
||||
reply['References'] = message_id
|
||||
reply['Date'] = date
|
||||
reply.set_content("Test reply.")
|
||||
|
||||
smtp.send_message(reply)
|
||||
smtp.quit()
|
||||
'';
|
||||
smtp.send_message(reply)
|
||||
smtp.quit()
|
||||
'';
|
||||
in
|
||||
[ replyToEmail ];
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ let
|
|||
forceGrubReinstallCount ? 0,
|
||||
withTestInstrumentation ? true,
|
||||
clevisTest,
|
||||
clevisAskpassTest ? false,
|
||||
}:
|
||||
pkgs.writeText "configuration.nix" ''
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
|
@ -73,7 +74,12 @@ let
|
|||
boot.kernelParams = [ "console=tty0" "ip=192.168.1.1:::255.255.255.0::eth1:none" ];
|
||||
boot.initrd = {
|
||||
availableKernelModules = [ "tpm_tis" ];
|
||||
clevis = { enable = true; useTang = true; };
|
||||
${
|
||||
if clevisAskpassTest then
|
||||
"clevisLuksAskpass = { enable = true; useTang = true; };"
|
||||
else
|
||||
"clevis = { enable = true; useTang = true; };"
|
||||
}
|
||||
network.enable = true;
|
||||
};
|
||||
''}
|
||||
|
|
@ -108,6 +114,7 @@ let
|
|||
testFlakeSwitch,
|
||||
testByAttrSwitch,
|
||||
clevisTest,
|
||||
clevisAskpassTest ? false,
|
||||
clevisFallbackTest,
|
||||
disableFileSystems,
|
||||
}:
|
||||
|
|
@ -190,6 +197,7 @@ let
|
|||
grubUseEfi
|
||||
extraConfig
|
||||
clevisTest
|
||||
clevisAskpassTest
|
||||
;
|
||||
}
|
||||
}",
|
||||
|
|
@ -197,11 +205,20 @@ let
|
|||
)
|
||||
installer.copy_from_host("${pkgs.writeText "secret" "secret"}", "/mnt/etc/nixos/secret")
|
||||
|
||||
${optionalString clevisTest ''
|
||||
with subtest("Create the Clevis secret with Tang"):
|
||||
${optionalString (clevisTest && !clevisAskpassTest)
|
||||
''
|
||||
with subtest("Create the Clevis secret with Tang"):
|
||||
installer.systemctl("start network-online.target")
|
||||
installer.wait_for_unit("network-online.target")
|
||||
installer.succeed('echo -n password | clevis encrypt sss \'{"t": 2, "pins": {"tpm2": {}, "tang": {"url": "http://192.168.1.2"}}}\' -y > /mnt/etc/nixos/clevis-secret.jwe')''
|
||||
}
|
||||
|
||||
${optionalString clevisAskpassTest ''
|
||||
with subtest("Bind Clevis to LUKS header"):
|
||||
installer.systemctl("start network-online.target")
|
||||
installer.wait_for_unit("network-online.target")
|
||||
installer.succeed('echo -n password | clevis encrypt sss \'{"t": 2, "pins": {"tpm2": {}, "tang": {"url": "http://192.168.1.2"}}}\' -y > /mnt/etc/nixos/clevis-secret.jwe')''}
|
||||
installer.succeed("echo -n password | clevis luks bind -y -k - -d /dev/vda3 sss '{\"t\": 2, \"pins\": {\"tpm2\": {}, \"tang\": {\"url\": \"http://192.168.1.2\"}}}'")
|
||||
''}
|
||||
|
||||
${optionalString clevisFallbackTest ''
|
||||
with subtest("Shutdown Tang to check fallback to interactive prompt"):
|
||||
|
|
@ -283,6 +300,7 @@ let
|
|||
grubUseEfi
|
||||
extraConfig
|
||||
clevisTest
|
||||
clevisAskpassTest
|
||||
;
|
||||
forceGrubReinstallCount = 1;
|
||||
}
|
||||
|
|
@ -316,6 +334,7 @@ let
|
|||
grubUseEfi
|
||||
extraConfig
|
||||
clevisTest
|
||||
clevisAskpassTest
|
||||
;
|
||||
forceGrubReinstallCount = 2;
|
||||
}
|
||||
|
|
@ -384,6 +403,7 @@ let
|
|||
grubUseEfi
|
||||
extraConfig
|
||||
clevisTest
|
||||
clevisAskpassTest
|
||||
;
|
||||
forceGrubReinstallCount = 1;
|
||||
withTestInstrumentation = false;
|
||||
|
|
@ -482,6 +502,7 @@ let
|
|||
grubUseEfi
|
||||
extraConfig
|
||||
clevisTest
|
||||
clevisAskpassTest
|
||||
;
|
||||
forceGrubReinstallCount = 1;
|
||||
}
|
||||
|
|
@ -518,6 +539,7 @@ let
|
|||
grubUseEfi
|
||||
extraConfig
|
||||
clevisTest
|
||||
clevisAskpassTest
|
||||
;
|
||||
forceGrubReinstallCount = 1;
|
||||
withTestInstrumentation = false;
|
||||
|
|
@ -637,6 +659,7 @@ let
|
|||
testFlakeSwitch ? false,
|
||||
testByAttrSwitch ? false,
|
||||
clevisTest ? false,
|
||||
clevisAskpassTest ? false,
|
||||
clevisFallbackTest ? false,
|
||||
disableFileSystems ? false,
|
||||
selectNixPackage ? pkgs: pkgs.nixVersions.stable,
|
||||
|
|
@ -820,6 +843,7 @@ let
|
|||
testFlakeSwitch
|
||||
testByAttrSwitch
|
||||
clevisTest
|
||||
clevisAskpassTest
|
||||
clevisFallbackTest
|
||||
disableFileSystems
|
||||
;
|
||||
|
|
@ -1044,6 +1068,43 @@ let
|
|||
'';
|
||||
};
|
||||
|
||||
mkClevisLuksAskpassTest =
|
||||
{
|
||||
fallback ? false,
|
||||
}:
|
||||
makeInstallerTest "clevis-luks-askpass${optionalString fallback "-fallback"}" {
|
||||
clevisTest = true;
|
||||
clevisAskpassTest = true;
|
||||
clevisFallbackTest = fallback;
|
||||
enableOCR = fallback;
|
||||
extraInstallerConfig = {
|
||||
environment.systemPackages = with pkgs; [ clevis ];
|
||||
};
|
||||
createPartitions = ''
|
||||
installer.succeed(
|
||||
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
|
||||
+ " mkpart primary ext2 1M 100MB"
|
||||
+ " mkpart primary linux-swap 100M 1024M"
|
||||
+ " mkpart primary 1024M -1s",
|
||||
"udevadm settle",
|
||||
"mkswap /dev/vda2 -L swap",
|
||||
"swapon -L swap",
|
||||
"modprobe dm_mod dm_crypt",
|
||||
"echo -n password | cryptsetup luksFormat -q /dev/vda3 -",
|
||||
"echo -n password | cryptsetup luksOpen --key-file - /dev/vda3 crypt-root",
|
||||
"mkfs.ext3 -L nixos /dev/mapper/crypt-root",
|
||||
"mount LABEL=nixos /mnt",
|
||||
"mkfs.ext3 -L boot /dev/vda1",
|
||||
"mkdir -p /mnt/boot",
|
||||
"mount LABEL=boot /mnt/boot",
|
||||
"udevadm settle")
|
||||
'';
|
||||
postBootCommands = optionalString fallback ''
|
||||
target.wait_for_text("Please enter")
|
||||
target.send_chars("password\n")
|
||||
'';
|
||||
};
|
||||
|
||||
mkClevisZfsTest =
|
||||
{
|
||||
fallback ? false,
|
||||
|
|
@ -1741,6 +1802,9 @@ in
|
|||
};
|
||||
}
|
||||
// optionalAttrs systemdStage1 {
|
||||
clevisLuksAskpass = mkClevisLuksAskpassTest { };
|
||||
clevisLuksAskpassFallback = mkClevisLuksAskpassTest { fallback = true; };
|
||||
|
||||
stratisRoot = makeInstallerTest "stratisRoot" {
|
||||
createPartitions = ''
|
||||
installer.succeed(
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
name = "music-assistant";
|
||||
meta.maintainers = with lib.maintainers; [ hexa ];
|
||||
|
||||
nodes.machine = {
|
||||
containers.machine = {
|
||||
services.music-assistant = {
|
||||
enable = true;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -815,6 +815,7 @@ let
|
|||
};
|
||||
# initialize wallet, creates macaroon needed by exporter
|
||||
systemd.services.lnd.postStart = ''
|
||||
until [ -f /var/lib/lnd/tls.cert ]; do sleep 1; done
|
||||
${pkgs.curl}/bin/curl \
|
||||
--retry 20 \
|
||||
--retry-delay 1 \
|
||||
|
|
@ -2051,7 +2052,7 @@ let
|
|||
{
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
instance = "/run/varnish/varnish";
|
||||
instance = "/var/run/varnishd";
|
||||
group = "varnish";
|
||||
};
|
||||
metricProvider = {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
maintainers = [ mic92 ];
|
||||
};
|
||||
|
||||
nodes.machine =
|
||||
containers.machine =
|
||||
{ ... }:
|
||||
{
|
||||
services.telegraf.enable = true;
|
||||
|
|
|
|||
|
|
@ -64,9 +64,9 @@ let
|
|||
|
||||
codium_running.wait() # type: ignore[union-attr]
|
||||
with codium_running: # type: ignore[union-attr]
|
||||
# Wait until vscodium is visible. "File" is in the menu bar.
|
||||
machine.wait_for_text('(Get|Started|with|Customize|theme)')
|
||||
machine.screenshot('start_screen')
|
||||
# Wait until vscodium is visible.
|
||||
machine.wait_for_text('Search')
|
||||
machine.screenshot('screen')
|
||||
|
||||
test_string = 'testfile'
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import os
|
||||
import openpyxl
|
||||
import tempfile
|
||||
from playwright.sync_api import sync_playwright
|
||||
from playwright.sync_api import sync_playwright, Page
|
||||
|
||||
BASE_URL = "http://localhost:8889"
|
||||
|
||||
|
|
@ -10,6 +10,15 @@ ADMIN_PASSWD = "car-shop-in-the-mall"
|
|||
ALICE_PASSWD = "user-goes-to-the-car-shop"
|
||||
|
||||
|
||||
def click_save_and_wait(page: Page):
|
||||
save_btn = page.get_by_role("button", name="Save")
|
||||
with page.expect_response(
|
||||
lambda r: r.request.method in ["POST", "PUT", "PATCH"] and r.status < 400
|
||||
):
|
||||
save_btn.click()
|
||||
page.wait_for_selector(".ui_busy", state="hidden", timeout=30000)
|
||||
|
||||
|
||||
def run_test():
|
||||
is_headful = os.getenv("HEADFUL") == "1"
|
||||
|
||||
|
|
@ -20,6 +29,8 @@ def run_test():
|
|||
)
|
||||
# more default timeout for slow nixos test vms
|
||||
context.set_default_timeout(90 * 1000)
|
||||
context.tracing.start(screenshots=True, snapshots=True, sources=True)
|
||||
|
||||
page = context.new_page()
|
||||
|
||||
page.goto(f"{BASE_URL}/admin")
|
||||
|
|
@ -48,10 +59,17 @@ def run_test():
|
|||
page.get_by_role("button", name="No", exact=True).click()
|
||||
page.get_by_role("textbox", name="Password *").fill(ALICE_PASSWD)
|
||||
page.get_by_role("textbox", name="Confirmation").fill(ALICE_PASSWD)
|
||||
page.get_by_role("button", name="Create").click()
|
||||
|
||||
with page.expect_response(
|
||||
lambda r: r.request.method == "POST" and r.status < 400
|
||||
):
|
||||
page.get_by_role("button", name="Create").click()
|
||||
|
||||
# give alice, permissions to access the project
|
||||
page.get_by_role("button", name="Assign").nth(1).click()
|
||||
assign_button = page.get_by_role("button", name="Assign").nth(1)
|
||||
assign_button.wait_for(state="visible")
|
||||
assign_button.click()
|
||||
|
||||
page.get_by_text("Read", exact=True).click()
|
||||
page.get_by_text("Save", exact=True).click()
|
||||
page.get_by_text("Export", exact=True).click()
|
||||
|
|
@ -71,25 +89,23 @@ def run_test():
|
|||
page1.get_by_role("textbox", name="Inclusion date *").fill("2000-01-01")
|
||||
page1.get_by_role("spinbutton", name="Age *").click()
|
||||
page1.get_by_role("spinbutton", name="Age *").fill("1")
|
||||
page1.get_by_role("button", name="Save").click()
|
||||
page1.wait_for_timeout(1000)
|
||||
click_save_and_wait(page1)
|
||||
|
||||
page1.get_by_role("button", name="Advanced").click()
|
||||
page1.get_by_role("spinbutton", name="Age *").click()
|
||||
page1.get_by_role("spinbutton", name="Age *").fill("1")
|
||||
page1.get_by_role("button", name="Save").click()
|
||||
page1.wait_for_timeout(1000)
|
||||
click_save_and_wait(page1)
|
||||
|
||||
page1.get_by_role("button", name="Page layout").click()
|
||||
page1.get_by_role("spinbutton", name="Variable A1").fill("1")
|
||||
page1.get_by_role("button", name="Save").click()
|
||||
page1.wait_for_timeout(1000)
|
||||
click_save_and_wait(page1)
|
||||
|
||||
# create export #1
|
||||
page1.get_by_role("button", name="Data").click()
|
||||
page1.wait_for_timeout(1000)
|
||||
|
||||
page1.get_by_role("button", name="Data exports").wait_for(state="visible")
|
||||
page1.get_by_role("button", name="Data exports").click()
|
||||
|
||||
with page1.expect_download() as download_info:
|
||||
page1.get_by_role("button", name="Create export").click()
|
||||
|
||||
|
|
@ -115,26 +131,24 @@ def run_test():
|
|||
page2.get_by_role("textbox", name="Inclusion date *").fill("2000-01-01")
|
||||
page2.get_by_role("spinbutton", name="Age *").click()
|
||||
page2.get_by_role("spinbutton", name="Age *").fill("2")
|
||||
page2.get_by_role("button", name="Save").click()
|
||||
page2.wait_for_timeout(1000)
|
||||
click_save_and_wait(page2)
|
||||
|
||||
page2.get_by_role("button", name="Advanced").click()
|
||||
page2.get_by_role("spinbutton", name="Age *").click()
|
||||
page2.get_by_role("spinbutton", name="Age *").fill("2")
|
||||
page2.get_by_role("button", name="Save").click()
|
||||
page2.wait_for_timeout(1000)
|
||||
click_save_and_wait(page2)
|
||||
|
||||
page2.get_by_role("button", name="Page layout").click()
|
||||
page2.get_by_role("spinbutton", name="Variable A1").click()
|
||||
page2.get_by_role("spinbutton", name="Variable A1").fill("2")
|
||||
page2.get_by_role("button", name="Save").click()
|
||||
page2.wait_for_timeout(1000)
|
||||
click_save_and_wait(page2)
|
||||
|
||||
# create export #2
|
||||
page2.get_by_role("button", name="Data").click()
|
||||
page2.wait_for_timeout(1000)
|
||||
|
||||
page2.get_by_role("button", name="Data exports").wait_for(state="visible")
|
||||
page2.get_by_role("button", name="Data exports").click()
|
||||
|
||||
page2.get_by_role("button", name="Previous exports").click()
|
||||
|
||||
with page2.expect_download() as download1_info:
|
||||
|
|
@ -156,18 +170,19 @@ def run_test():
|
|||
|
||||
print(f"exported all records to {save_path2}")
|
||||
|
||||
context.tracing.stop(path="/tmp/videos/trace.zip")
|
||||
|
||||
context.close()
|
||||
browser.close()
|
||||
|
||||
# check that exported files have correct entries
|
||||
|
||||
wb1 = openpyxl.load_workbook(save_path1)
|
||||
for sheet, cell in zip(["intro", "advanced", "layout"], ["D2", "D2", "C2"]):
|
||||
for sheet, cell in zip(["intro", "advanced", "layout"], ["E2", "E2", "D2"]):
|
||||
val = wb1[sheet][cell].value
|
||||
assert val == 1, f"Sheet {sheet}, Cell {cell}: Expected 1 (admin), got {val}"
|
||||
|
||||
wb2 = openpyxl.load_workbook(save_path2)
|
||||
for sheet, cell in zip(["intro", "advanced", "layout"], ["D3", "D3", "C3"]):
|
||||
for sheet, cell in zip(["intro", "advanced", "layout"], ["E3", "E3", "D3"]):
|
||||
val = wb2[sheet][cell].value
|
||||
assert val == 2, f"Sheet {sheet}, Cell {cell}: Expected 2 (alice), got {val}"
|
||||
|
||||
|
|
|
|||
|
|
@ -73,7 +73,6 @@ in
|
|||
#systemd.services.goupile.environment.DEFAULT_SECCOMP_ACTION = "Log"; # Block|Log|Kill
|
||||
networking = {
|
||||
firewall.allowedTCPPorts = [ config.services.nginx.defaultHTTPListenPort ];
|
||||
hostName = "goupile";
|
||||
domain = "local";
|
||||
};
|
||||
|
||||
|
|
@ -108,12 +107,14 @@ in
|
|||
machine.wait_for_open_port(${port})
|
||||
|
||||
machine.succeed("curl -q http://localhost:${port}")
|
||||
machine.succeed("curl -q http://goupile.local")
|
||||
machine.succeed("curl -q http://machine.local")
|
||||
machine.succeed("curl -q http://localhost")
|
||||
|
||||
machine.succeed("run-goupile-test")
|
||||
out_dir = os.environ.get("out", os.getcwd())
|
||||
machine.copy_from_machine("/tmp/videos", out_dir)
|
||||
try:
|
||||
machine.succeed("run-goupile-test")
|
||||
finally:
|
||||
out_dir = os.environ.get("out", os.getcwd())
|
||||
machine.copy_from_vm("/tmp/videos", out_dir)
|
||||
'';
|
||||
|
||||
# Debug interactively with:
|
||||
|
|
|
|||
|
|
@ -14,12 +14,9 @@ in
|
|||
soyouzpanda
|
||||
];
|
||||
|
||||
nodes.machine =
|
||||
containers.machine =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
virtualisation.diskSize = 4 * 1024;
|
||||
virtualisation.memorySize = 4 * 1024;
|
||||
|
||||
networking.hosts."127.0.0.1" = [ domain ];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
|
|
|
|||
53
pkgs/applications/audio/deadbeef/plugins/vgmstream.nix
Normal file
53
pkgs/applications/audio/deadbeef/plugins/vgmstream.nix
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
pkg-config,
|
||||
deadbeef,
|
||||
vgmstream,
|
||||
mpg123,
|
||||
libvorbis,
|
||||
ffmpeg,
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "deadbeef-vgmstream-plugin";
|
||||
version = "2026-05-09.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jchv";
|
||||
repo = "deadbeef-vgmstream";
|
||||
rev = finalAttrs.version;
|
||||
hash = "sha256-dR1TEx61jnprEQokHRX/mi3WvbS+CVp4VIMlutX6uS8=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
buildInputs = [
|
||||
deadbeef
|
||||
mpg123
|
||||
libvorbis
|
||||
ffmpeg.dev
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
makeFlags = [ "DEADBEEF_ROOT=${deadbeef}" ];
|
||||
installFlags = [ "DEADBEEF_ROOT=$(out)" ];
|
||||
|
||||
postUnpack = ''
|
||||
rm -rf $sourceRoot/vgmstream
|
||||
cp --no-preserve=mode,ownership -LR ${vgmstream.src} $sourceRoot/vgmstream
|
||||
'';
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = {
|
||||
description = "Streaming video game music decoder plugin for the DeaDBeeF music player";
|
||||
homepage = "https://github.com/jchv/deadbeef-vgmstream";
|
||||
license = lib.licenses.isc;
|
||||
maintainers = [ lib.maintainers.jchw ];
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
})
|
||||
|
|
@ -23,6 +23,7 @@
|
|||
common-updater-scripts,
|
||||
curl,
|
||||
openssl_1_1,
|
||||
openssl_3_5,
|
||||
bzip2,
|
||||
sqlite,
|
||||
}:
|
||||
|
|
@ -33,7 +34,7 @@ let
|
|||
binaries = [
|
||||
"sublime_text"
|
||||
"plugin_host-3.3"
|
||||
"plugin_host-3.8"
|
||||
"plugin_host-3.${if lib.versionAtLeast buildVersion "4205" then "14" else "8"}"
|
||||
crashHandlerBinary
|
||||
];
|
||||
primaryBinary = "sublime_text";
|
||||
|
|
@ -90,12 +91,20 @@ let
|
|||
for binary in ${builtins.concatStringsSep " " binaries}; do
|
||||
patchelf \
|
||||
--interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath ${lib.makeLibraryPath neededLibraries}:${lib.getLib stdenv.cc.cc}/lib${lib.optionalString stdenv.hostPlatform.is64bit "64"} \
|
||||
--set-rpath ${lib.makeLibraryPath neededLibraries}:${lib.getLib stdenv.cc.cc}/lib${lib.optionalString stdenv.hostPlatform.is64bit "64"}:$out \
|
||||
$binary
|
||||
done
|
||||
|
||||
# Unable to get plugin_host-3.14 not crash with Python from Nixpkgs
|
||||
${lib.optionalString (lib.versionAtLeast buildVersion "4205") "patchelf --set-rpath ${
|
||||
lib.makeLibraryPath [
|
||||
sqlite
|
||||
openssl_3_5
|
||||
]
|
||||
} libpython3.14.so.1.0"}
|
||||
|
||||
# Rewrite pkexec argument. Note that we cannot delete bytes in binary.
|
||||
sed -i -e 's,/bin/cp\x00,cp\x00\x00\x00\x00\x00\x00,g' ${primaryBinary}
|
||||
${lib.optionalString (lib.versionOlder buildVersion "4205") "sed -i -e 's,/bin/cp\\x00,cp\\x00\\x00\\x00\\x00\\x00\\x00,g' ${primaryBinary}"}
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
|
@ -106,6 +115,7 @@ let
|
|||
# No need to patch these libraries, it works well with our own
|
||||
rm libcrypto.so.1.1 libssl.so.1.1
|
||||
${lib.optionalString (lib.versionAtLeast buildVersion "4145") "rm libsqlite3.so"}
|
||||
${lib.optionalString (lib.versionAtLeast buildVersion "4205") "rm libcrypto.so.3 libssl.so.3"}
|
||||
|
||||
mkdir -p $out
|
||||
cp -r * $out/
|
||||
|
|
@ -116,7 +126,7 @@ let
|
|||
dontWrapGApps = true; # non-standard location, need to wrap the executables manually
|
||||
|
||||
postFixup = ''
|
||||
sed -i 's#/usr/bin/pkexec#pkexec\x00\x00\x00\x00\x00\x00\x00\x00\x00#g' "$out/${primaryBinary}"
|
||||
${lib.optionalString (lib.versionOlder buildVersion "4205") "sed -i 's#/usr/bin/pkexec#pkexec\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00#g' \"$out/${primaryBinary}\""}
|
||||
|
||||
wrapProgram $out/${primaryBinary} \
|
||||
--set LOCALE_ARCHIVE "${glibcLocales.out}/lib/locale/locale-archive" \
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@ in
|
|||
} { };
|
||||
|
||||
sublime4-dev = common {
|
||||
buildVersion = "4199";
|
||||
buildVersion = "4205";
|
||||
dev = true;
|
||||
x64sha256 = "Nrhwv+ox/SW21c8wZtuX9mzHQ+o9ghsI50dU2kDvCX0=";
|
||||
aarch64sha256 = "3vCXj53f2Qlt/Ab3hNNng+Y4Ch85Dp0G8srTVBtd6zU=";
|
||||
x64sha256 = "1Tg8m4FNrVOeHK6VSmlua30pW4Bu7Gz+sT0t/w01UyM=";
|
||||
aarch64sha256 = "K94UipUVZRh8xJKYW35be0u9L/VHpZ+FYhC26v41b3U=";
|
||||
} { };
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -11,13 +11,13 @@
|
|||
}:
|
||||
vimUtils.buildVimPlugin rec {
|
||||
pname = "codediff.nvim";
|
||||
version = "2.43.15";
|
||||
version = "2.45.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "esmuellert";
|
||||
repo = "codediff.nvim";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-gaPLjH33+nBgpSZJ8b/4aneodt8wg+Jy44yXAjemToA=";
|
||||
hash = "sha256-Up4vH5yk13don0HrmHHpqrPIKtc1MTtDbZ6QcMHQYAU=";
|
||||
};
|
||||
|
||||
dependencies = [ vimPlugins.nui-nvim ];
|
||||
|
|
|
|||
|
|
@ -3285,12 +3285,6 @@ assertNoAdditions {
|
|||
];
|
||||
};
|
||||
|
||||
nvim-sioyek-highlights = super.nvim-sioyek-highlights.overrideAttrs (old: {
|
||||
meta = old.meta // {
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
});
|
||||
|
||||
nvim-snippets = super.nvim-snippets.overrideAttrs {
|
||||
checkInputs = [
|
||||
# Optional cmp integration
|
||||
|
|
|
|||
|
|
@ -1820,7 +1820,7 @@ https://github.com/natecraddock/workspaces.nvim/,,
|
|||
https://github.com/andrewferrier/wrapping.nvim/,,
|
||||
https://github.com/tweekmonster/wstrip.vim/,,
|
||||
https://github.com/piersolenski/wtf.nvim/,,
|
||||
https://github.com/kyza0d/xeno.nvim/,,
|
||||
https://github.com/kyzadev/xeno.nvim/,,
|
||||
https://github.com/Mythos-404/xmake.nvim/,,
|
||||
https://github.com/drmingdrmer/xptemplate/,,
|
||||
https://github.com/guns/xterm-color-table.vim/,,
|
||||
|
|
|
|||
|
|
@ -21,26 +21,26 @@ vscode-utils.buildVscodeMarketplaceExtension (finalAttrs: {
|
|||
sources = {
|
||||
"x86_64-linux" = {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-pGJ1coic0kdjXUI6HCEkQsyQC5YU0jnA1hmN6MaPfwg=";
|
||||
hash = "sha256-VTbeOLAGmaVy9PL5/Y+ebbCNa6ki4cx0VGXhzLuz1ow=";
|
||||
};
|
||||
"aarch64-linux" = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-NppbZ/gCZYGZna8bs/nUASxyqd6Bv0AOYTEbfaqJWyI=";
|
||||
hash = "sha256-j8cDVoxT38/dmorTlPQjrd2GQS+BkoatIbQQzB1c7GA=";
|
||||
};
|
||||
"x86_64-darwin" = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-oM2H7CJBS0G8ieiI6twqpA257QWWytdbpkV2Q2D7R6o=";
|
||||
hash = "sha256-Kl23fdHFlh9cvfMtXNr6GI+AWknPFMM1lGFCuJY5kXw=";
|
||||
};
|
||||
"aarch64-darwin" = {
|
||||
arch = "darwin-arm64";
|
||||
hash = "sha256-lRChL8hGIc4zJ/CBwPkLYY1U5YhfM0DrW//C1dNi//A=";
|
||||
hash = "sha256-M1dfKzjfHeH4xmvnuRmBsnhaQryL6c84nPrl2NGQT5k=";
|
||||
};
|
||||
};
|
||||
in
|
||||
{
|
||||
name = "claude-code";
|
||||
publisher = "anthropic";
|
||||
version = "2.1.141";
|
||||
version = "2.1.143";
|
||||
}
|
||||
// sources.${stdenvNoCC.hostPlatform.system}
|
||||
or (throw "Unsupported system ${stdenvNoCC.hostPlatform.system}");
|
||||
|
|
|
|||
|
|
@ -2068,8 +2068,8 @@ let
|
|||
mktplcRef = {
|
||||
name = "vscode-graphql";
|
||||
publisher = "GraphQL";
|
||||
version = "0.13.2";
|
||||
hash = "sha256-9G6iIYjZE6s5EGRTc0Y6gUN1cK9Gm2ohnl3oYqBWGqs=";
|
||||
version = "0.13.4";
|
||||
hash = "sha256-zPc+jNbXfuXMWXxbKhaOpjgDu96jg5C+CCQ3HXEQ7fw=";
|
||||
};
|
||||
meta = {
|
||||
description = "GraphQL extension for VSCode built with the aim to tightly integrate the GraphQL Ecosystem with VSCode for an awesome developer experience";
|
||||
|
|
@ -2084,8 +2084,8 @@ let
|
|||
mktplcRef = {
|
||||
name = "vscode-graphql-syntax";
|
||||
publisher = "GraphQL";
|
||||
version = "1.3.8";
|
||||
hash = "sha256-10x2kX9Gc7O/tGRDPZfy1cKdCIvGTCXcD2bDokIz7TU=";
|
||||
version = "1.3.10";
|
||||
hash = "sha256-EY6BHl5ICcs3FuuenoadDXLLPSe8+2VAAydqo/YrtaE=";
|
||||
};
|
||||
meta = {
|
||||
description = "Adds full GraphQL syntax highlighting and language support such as bracket matching";
|
||||
|
|
@ -5200,8 +5200,8 @@ let
|
|||
mktplcRef = {
|
||||
name = "volar";
|
||||
publisher = "Vue";
|
||||
version = "3.2.8";
|
||||
hash = "sha256-lbTE5UP4JSpqoXHzS6HPBX2pOQjeBSmHhxqy0thawfc=";
|
||||
version = "3.2.9";
|
||||
hash = "sha256-LkoytGAAZwjm3Mm3EixCHjnh1dkxB0lKMv5KJVYSwGY=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://github.com/vuejs/language-tools/blob/master/CHANGELOG.md";
|
||||
|
|
|
|||
|
|
@ -27,12 +27,12 @@ let
|
|||
|
||||
hash =
|
||||
{
|
||||
x86_64-linux = "sha256-CP4tIZhDoC56T6N0RUebNRw3CjxG82odHt4WY8rgmS8=";
|
||||
x86_64-darwin = "sha256-4EWKIXc+CKQLot7eN6Bkd/xigByEGafLMKJ832EOSwA=";
|
||||
aarch64-linux = "sha256-5EwENP1lpHzqiWWeXNQzQOp/zAAEanSbDhWcMeup2sY=";
|
||||
aarch64-darwin = "sha256-9n7kVtknqfSfTc2MmFps5bxSqMnL6KNhZgTb+DVUkhY=";
|
||||
armv7l-linux = "sha256-aXGqp7ljvqDJNb5BMiBIm2CluIr70oiNPmR7BULLsv8=";
|
||||
loongarch64-linux = "sha256-XPEssw+7NVKljyrWcc+Q2HzRr31seDwbdNn3EtyHlSY=";
|
||||
x86_64-linux = "sha256-gscXPWqnQV9nd9XWbL5YkCdyxxnDDEY4WpFAgx5G7a0=";
|
||||
x86_64-darwin = "sha256-H6sKVtQi++U7NvSkKWipjDDJQsTu0Zg3tp9kijL85eU=";
|
||||
aarch64-linux = "sha256-09C5ER/nZBphWHZRRAf9o/hyB6qc2mqIuxOLNdlVSfU=";
|
||||
aarch64-darwin = "sha256-utDPI80JCPcXTFvK65UR5CBlyb+EsocpHM0KWeojaUI=";
|
||||
armv7l-linux = "sha256-voNvX40YWm7oYrgNAIhoRE/9zZlIq/MgaGVlumDUaz4=";
|
||||
loongarch64-linux = "sha256-T7QGiIilEL2lR01yUZ70ubQ2XGgnL7NQ4xkt0MeDD3s=";
|
||||
}
|
||||
.${system} or throwSystem;
|
||||
|
||||
|
|
@ -43,7 +43,7 @@ buildVscode rec {
|
|||
|
||||
# Please backport all compatible updates to the stable release.
|
||||
# This is important for the extension ecosystem.
|
||||
version = "1.112.01907";
|
||||
version = "1.116.02821";
|
||||
pname = "vscodium";
|
||||
|
||||
executableName = "codium";
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore rec {
|
||||
core = "atari800";
|
||||
version = "0-unstable-2026-04-20";
|
||||
version = "0-unstable-2026-05-11";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "libretro-atari800";
|
||||
rev = "7f3456f16109c34915d0bad7393b6c4df66c3850";
|
||||
hash = "sha256-7C/0i7LUGHY8bz5wp9ut+5EtvLrAUasn0xQzslQQ1fM=";
|
||||
rev = "1851228de23b47cb74fbc8ea589a1c7c5e02ea98";
|
||||
hash = "sha256-s7M7yezPWzRokrxpoo8JbgOzi5R18yOQNgmHkTQR7S4=";
|
||||
};
|
||||
|
||||
makefile = "Makefile";
|
||||
|
|
|
|||
|
|
@ -8,13 +8,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "mednafen-psx" + lib.optionalString withHw "-hw";
|
||||
version = "0-unstable-2026-05-09";
|
||||
version = "0-unstable-2026-05-15";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "beetle-psx-libretro";
|
||||
rev = "c699953afa01bc3f179edbcb14c4cfbeee6107a2";
|
||||
hash = "sha256-s009GuPnsufDT70dBmhwfZmYjdf7pYO13FjycYvUF4c=";
|
||||
rev = "c194d8c7d9cef77b653f688f1293746aa71a928e";
|
||||
hash = "sha256-lIvVk0a+lwBF+BtX2KT2MwOUguTGm/pKi8s9IbZqwsU=";
|
||||
};
|
||||
|
||||
extraBuildInputs = lib.optionals withHw [
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "bluemsx";
|
||||
version = "0-unstable-2026-04-11";
|
||||
version = "0-unstable-2026-05-18";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "bluemsx-libretro";
|
||||
rev = "0b23b79f6b8c19f300d2d86958e89fbe2f6d30bc";
|
||||
hash = "sha256-/rILuViKZBKZFZkCjuFuuuOE3AvDiHQqHtWq4Q8XSMA=";
|
||||
rev = "175438e5fe68ae0cfb7d04c29f81eed17635e6b4";
|
||||
hash = "sha256-crFrG6OsmW3nNnQ+OHFtYz7cRuU9hTjWe3vq4PdYJqA=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
|
|
|||
|
|
@ -10,13 +10,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "desmume";
|
||||
version = "0-unstable-2026-05-03";
|
||||
version = "0-unstable-2026-05-16";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "desmume";
|
||||
rev = "a55c393de8ecf19df8111f65b8e12d08b9616520";
|
||||
hash = "sha256-0+uSOg1asszgnDbdRsfWQY/E2Ky2tK3KxkcNV2mGjBQ=";
|
||||
rev = "ae0f7f51f96d9b5741b47b425505a4a4224b91fa";
|
||||
hash = "sha256-M8Z2Zk9wjEuOOg++Tk68A8hgCmE63nh9+oJhu4fsQsk=";
|
||||
};
|
||||
|
||||
extraBuildInputs = [
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "fbneo";
|
||||
version = "0-unstable-2026-05-09";
|
||||
version = "0-unstable-2026-05-18";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "fbneo";
|
||||
rev = "776ae715211d3ef2413b2828e9e9d50d869a6822";
|
||||
hash = "sha256-NgPs8H8/ysD18J2G9StaLM5e05EzgjLW8c2kTrcOXZI=";
|
||||
rev = "1a2d079aac28c540c20a9e4cac87bb02021c3eec";
|
||||
hash = "sha256-4q1q20Us7HVZr2CWsqujQWiqryc/xS9/bVBt/x7Y5H8=";
|
||||
};
|
||||
|
||||
makefile = "Makefile";
|
||||
|
|
|
|||
|
|
@ -8,13 +8,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "flycast";
|
||||
version = "0-unstable-2026-05-10";
|
||||
version = "0-unstable-2026-05-15";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "flyinghead";
|
||||
repo = "flycast";
|
||||
rev = "4be8a484665fb5684ccb780ed2165018a679c622";
|
||||
hash = "sha256-kjQcKdxUMdUc+70OPzEtDeSKy/m2e0FyPDa4XR3nHmM=";
|
||||
rev = "3e60beb69e557287c704dc310f42286258d68a2b";
|
||||
hash = "sha256-Ew3YjR92NnbvGoNFhSZSNNeSrMMWEeUAfnJSp6/tnIY=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
|
|
|||
109
pkgs/applications/emulators/libretro/cores/melondsds.nix
Normal file
109
pkgs/applications/emulators/libretro/cores/melondsds.nix
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
{
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
glm,
|
||||
libslirp,
|
||||
fmt_11,
|
||||
span-lite,
|
||||
howard-hinnant-date,
|
||||
libGL,
|
||||
libGLU,
|
||||
cmake,
|
||||
mkLibretroCore,
|
||||
}:
|
||||
let
|
||||
# https://github.com/JesseTG/melonds-ds/blob/33c48260402865ef77667487528efd5ca7ce1233/cmake/FetchDependencies.cmake#L44
|
||||
melonDS-src = fetchFromGitHub {
|
||||
owner = "JesseTG";
|
||||
repo = "melonDS";
|
||||
rev = "f6692dff8c0c53f77639a08e5e746a286312bb41";
|
||||
hash = "sha256-+bMqpjspQzyRci3u0PEpR9oX3S9LBqP223y6VfI2j14=";
|
||||
};
|
||||
libretro-common-src = fetchFromGitHub {
|
||||
owner = "JesseTG";
|
||||
repo = "libretro-common";
|
||||
rev = "8e2b884db16711a999a0e46a02a3dc0be294b048";
|
||||
hash = "sha256-NYxi1BADUgMAtLfmYcOIhTAnmJ/LYd0OyfPKx6lorw4=";
|
||||
};
|
||||
embed-binaries-src = fetchFromGitHub {
|
||||
owner = "andoalon";
|
||||
repo = "embed-binaries";
|
||||
rev = "21f28cabbba02cd657578c70b7aedd0f141467ff";
|
||||
hash = "sha256-iW3DBGdp/ykE3EoGcuirq5V5lKV0vemzIjDFrINzQPM=";
|
||||
};
|
||||
pntr-src = fetchFromGitHub {
|
||||
owner = "robloach";
|
||||
repo = "pntr";
|
||||
rev = "650237a524ea4fc953de7223a1587c83f2696794";
|
||||
hash = "sha256-qGWPlHkcW/wavxRN76SHiEKCl2b1VZR+O9YrZOFZL0I=";
|
||||
};
|
||||
yamc-src = fetchFromGitHub {
|
||||
owner = "yohhoy";
|
||||
repo = "yamc";
|
||||
rev = "4e015a7e8eb0d61c34e6928676c8c78881a72d73";
|
||||
hash = "sha256-J5wAqF5yQ5KYArJJyKzaqscWsXq+KAPKXybYfVgasXs=";
|
||||
};
|
||||
# using nixpkgs zlib gives a linking error
|
||||
zlib-src = fetchFromGitHub {
|
||||
owner = "madler";
|
||||
repo = "zlib";
|
||||
rev = "570720b0c24f9686c33f35a1b3165c1f568b96be";
|
||||
hash = "sha256-5g/Jo8M/jvkgV0NofSAV4JdwJSk5Lyv9iGRb2Kz/CC0=";
|
||||
};
|
||||
in
|
||||
mkLibretroCore rec {
|
||||
core = "melondsds";
|
||||
version = "1.2.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "JesseTG";
|
||||
repo = "melonds-ds";
|
||||
rev = "33c48260402865ef77667487528efd5ca7ce1233";
|
||||
hash = "sha256-n5MZ6BWUWRi+jz34EbL+SeSkjFZeqQNXE3hS6JzS424=";
|
||||
};
|
||||
|
||||
patches = [ ./patches/melondsds-noslirpcopy.patch ];
|
||||
postPatch = ''
|
||||
substituteInPlace CMakeLists.txt \
|
||||
--replace-fail "find_package(Git REQUIRED)" ""
|
||||
|
||||
substituteInPlace src/libretro/CMakeLists.txt \
|
||||
--replace-fail "include(embed-binaries)" "include(${embed-binaries-src}/cmake/embed-binaries.cmake)"
|
||||
|
||||
substituteInPlace cmake/FetchDependencies.cmake \
|
||||
--replace-fail "set_target_properties(example" "set_target_properties(zlib_example" \
|
||||
--replace-fail "set_target_properties(zlib_example64 minigzip64" "set_target_properties(zlib_example64"
|
||||
'';
|
||||
|
||||
makefile = "";
|
||||
extraBuildInputs = [
|
||||
libGL
|
||||
libGLU
|
||||
];
|
||||
extraNativeBuildInputs = [ cmake ];
|
||||
cmakeFlags = [
|
||||
(lib.cmakeBool "ENABLE_LTO_RELEASE" false) # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121831
|
||||
(lib.cmakeFeature "CMAKE_POLICY_VERSION_MINIMUM" "3.5") # required by yamc
|
||||
|
||||
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_MELONDS" "${melonDS-src}")
|
||||
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_LIBRETRO-COMMON" "${libretro-common-src}")
|
||||
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_EMBED-BINARIES" "${embed-binaries-src}")
|
||||
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_GLM" "${glm.src}")
|
||||
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_ZLIB" "${zlib-src}")
|
||||
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_LIBSLIRP" "${libslirp.src}")
|
||||
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_PNTR" "${pntr-src}")
|
||||
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_FMT" "${fmt_11.src}")
|
||||
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_YAMC" "${yamc-src}")
|
||||
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_SPAN-LITE" "${span-lite.src}")
|
||||
(lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_DATE" "${howard-hinnant-date.src}")
|
||||
];
|
||||
|
||||
postBuild = "cd src/libretro";
|
||||
|
||||
meta = {
|
||||
description = "A remake of the libretro MelonDS core";
|
||||
homepage = "https://github.com/JesseTG/melonds-ds";
|
||||
changelog = "https://github.com/JesseTG/melonds-ds/releases/tag/v${version}";
|
||||
license = lib.licenses.gpl3Only;
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
diff --git a/cmake/libslirp.cmake b/cmake/libslirp.cmake
|
||||
index 1cb6758..bef1793 100644
|
||||
--- a/cmake/libslirp.cmake
|
||||
+++ b/cmake/libslirp.cmake
|
||||
@@ -2,12 +2,6 @@ add_library(slirp STATIC
|
||||
src/glib-stub/glib.c
|
||||
)
|
||||
|
||||
-# Copy libslirp's files to another directory so that we can include it as <slirp/libslirp.h>
|
||||
-file(MAKE_DIRECTORY "${libslirp_BINARY_DIR}/include")
|
||||
-file(REMOVE_RECURSE "${libslirp_BINARY_DIR}/include/slirp")
|
||||
-file(COPY "${libslirp_SOURCE_DIR}/src" DESTINATION "${libslirp_BINARY_DIR}/include")
|
||||
-file(RENAME "${libslirp_BINARY_DIR}/include/src" "${libslirp_BINARY_DIR}/include/slirp")
|
||||
-
|
||||
target_include_directories(slirp PUBLIC
|
||||
"${libslirp_BINARY_DIR}/include"
|
||||
"${libslirp_SOURCE_DIR}/src"
|
||||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "puae";
|
||||
version = "0-unstable-2026-05-01";
|
||||
version = "0-unstable-2026-05-18";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "libretro-uae";
|
||||
rev = "20e019d4405e33472a3c20824c53bcd79f474a1b";
|
||||
hash = "sha256-4yQtwE7Ghm2/43u2Xcht4WctTNkQjAhMTZtXj4EoJTA=";
|
||||
rev = "6fbf272e342387281484ae84f690fa129f0ab86e";
|
||||
hash = "sha256-JwFIQfWaorQmDxYgHvpq/CEFMc0LVAsX6TyiGN6FhZA=";
|
||||
};
|
||||
|
||||
makefile = "Makefile";
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "quicknes";
|
||||
version = "0-unstable-2026-04-20";
|
||||
version = "0-unstable-2026-05-11";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "QuickNES_Core";
|
||||
rev = "7848e1ac22b1c69d056ae4cb57710651ff1dd169";
|
||||
hash = "sha256-cgoLO1572XoDDBJiEFglWtbo3vk5EXu/U3Pn7zrxqM8=";
|
||||
rev = "a0ec494c417f365c578f3dacadb04383e4a99ade";
|
||||
hash = "sha256-q1AS4mASF2gaiGyuM6a/Z57bp0DPRQADlM+snb3iNSg=";
|
||||
};
|
||||
|
||||
makefile = "Makefile";
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore rec {
|
||||
core = "snes9x2010";
|
||||
version = "0-unstable-2026-05-05";
|
||||
version = "0-unstable-2026-05-16";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "snes9x2010";
|
||||
rev = "d9cba8a41b3407ebb929816a7033e0407fd7b2d0";
|
||||
hash = "sha256-OdJStJK823PayWS+bmwG+kDrdx6KeVWYiSAu61C9UFs=";
|
||||
rev = "bc82e8281ddbbd487875866f5db27cdb9838d319";
|
||||
hash = "sha256-laAXE4U5ROKe2QnYbUrvJ4xRPv1hzllDZ8ei01IwqKA=";
|
||||
};
|
||||
|
||||
makeFlags = [ "GIT_VERSION=${builtins.substring 0 7 src.rev}" ];
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
}:
|
||||
mkLibretroCore {
|
||||
core = "virtualjaguar";
|
||||
version = "0-unstable-2026-05-01";
|
||||
version = "0-unstable-2026-05-09";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "libretro";
|
||||
repo = "virtualjaguar-libretro";
|
||||
rev = "e04f953915731c15f5f9cb9b8ae44630c901f23f";
|
||||
hash = "sha256-jjF3vyVuxViyZP1wbxZduBhURYylGdS3BKxzKnPBm7Q=";
|
||||
rev = "18828045f76a803206ebffc9b8d57842287b7552";
|
||||
hash = "sha256-lHQsApSoZNvyTp6D3lOBHyLCQ321cirUVXZRHXvIdP4=";
|
||||
};
|
||||
|
||||
makefile = "Makefile";
|
||||
|
|
|
|||
|
|
@ -106,6 +106,8 @@ lib.makeScope newScope (self: {
|
|||
|
||||
melonds = self.callPackage ./cores/melonds.nix { };
|
||||
|
||||
melondsds = self.callPackage ./cores/melondsds.nix { };
|
||||
|
||||
mesen = self.callPackage ./cores/mesen.nix { };
|
||||
|
||||
mesen-s = self.callPackage ./cores/mesen-s.nix { };
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -9,11 +9,11 @@
|
|||
|
||||
buildMozillaMach rec {
|
||||
pname = "firefox";
|
||||
version = "140.10.2esr";
|
||||
version = "140.11.0esr";
|
||||
applicationName = "Firefox ESR";
|
||||
src = fetchurl {
|
||||
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
|
||||
sha512 = "bda7d5e6d59a2ad310e3f3e6e8ec05c78222edce266671d5d454dfa3e8f0086add3b9c0099db907cb62b2587ed47026ba7b3aa4f0406693d142d8d91b818d551";
|
||||
sha512 = "d06adb3ef4de1324e3d61872d70de31ab08ac013f33903549bed28c6ebcc5b4dee94bb36388282c1935d77d1a564079f3adbf08d6bb80284a899cbb3d861300c";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
|
|
|||
|
|
@ -9,10 +9,10 @@
|
|||
|
||||
buildMozillaMach rec {
|
||||
pname = "firefox";
|
||||
version = "150.0.3";
|
||||
version = "151.0";
|
||||
src = fetchurl {
|
||||
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
|
||||
sha512 = "8452da61200f8ee66790d3fff230ca84b2ac9291af2b57e018486c50f938c53c6fb4943fe6cfe1e99b9783466fb00bf707fa006293753ac698618fc1e3b70a4a";
|
||||
sha512 = "5e6b01236c6aad17889c1d33614637a13e41d659c3306b2dadf13ab50d91a36d1269fae6d405d31351e4defe589f47f31c0798b66ad87438720f5779bcb90401";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ let
|
|||
# https://mozilla.github.io/policy-templates/
|
||||
extraPolicies ? { },
|
||||
extraPoliciesFiles ? [ ],
|
||||
extraAutoConfig ? "",
|
||||
libName ? browser.libName or applicationName, # Important for tor package or the like
|
||||
nixExtensions ? null,
|
||||
hasMozSystemDirPatch ? (lib.hasPrefix "firefox" pname && !lib.hasSuffix "-bin" pname),
|
||||
|
|
@ -553,8 +554,11 @@ let
|
|||
prefsDir="$out/${prefsDir}"
|
||||
mkdir -p "$prefsDir"
|
||||
|
||||
echo 'pref("general.config.filename", "mozilla.cfg");' > "$prefsDir/autoconfig.js"
|
||||
echo 'pref("general.config.obscure_value", 0);' >> "$prefsDir/autoconfig.js"
|
||||
cat > "$prefsDir/autoconfig.js" << EOF
|
||||
pref("general.config.filename", "mozilla.cfg");
|
||||
pref("general.config.obscure_value", 0);
|
||||
${extraAutoConfig}
|
||||
EOF
|
||||
|
||||
cat > "$libDir/mozilla.cfg" << EOF
|
||||
${mozillaCfg}
|
||||
|
|
|
|||
|
|
@ -499,13 +499,13 @@
|
|||
"vendorHash": null
|
||||
},
|
||||
"hashicorp_archive": {
|
||||
"hash": "sha256-nR8bgFvhENwC3L3w580FBtDK5l8WDfJqxDQZeUvWyl0=",
|
||||
"hash": "sha256-6Fw2D9PMCcYzu7i3WdloRWbtJlE1tvbiC+/UBSMg9wA=",
|
||||
"homepage": "https://registry.terraform.io/providers/hashicorp/archive",
|
||||
"owner": "hashicorp",
|
||||
"repo": "terraform-provider-archive",
|
||||
"rev": "v2.7.1",
|
||||
"rev": "v2.8.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-MYVkNvJ+rbwGw0htClIbmxk3YX2OK/ZO/QOTyMRFiug="
|
||||
"vendorHash": "sha256-ikBqIxD5aTOcwNHCMN6EaOwSHCAP5n/SULuqQXPLpOc="
|
||||
},
|
||||
"hashicorp_aws": {
|
||||
"hash": "sha256-+MvxcQn0pnsNDR6ERXFW85fLwQ+AG+UcBo5F25WN4mQ=",
|
||||
|
|
@ -544,13 +544,13 @@
|
|||
"vendorHash": null
|
||||
},
|
||||
"hashicorp_cloudinit": {
|
||||
"hash": "sha256-xDHp2bG0/T4pE3j8L4zTVnaQ9te5MuAbiGmopFedOpk=",
|
||||
"hash": "sha256-qSPGHjxaeYYhWDerzOf4bh7JKzuX6Cb1TBrERzMlfaI=",
|
||||
"homepage": "https://registry.terraform.io/providers/hashicorp/cloudinit",
|
||||
"owner": "hashicorp",
|
||||
"repo": "terraform-provider-cloudinit",
|
||||
"rev": "v2.3.7",
|
||||
"rev": "v2.4.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-bD8BHhP4jxBRnFjmZE1MMkBn2/sMqNEaxTlQRMj2Crw="
|
||||
"vendorHash": "sha256-z/47aZ1u0t6n8FMvdSxzE7tUJe1KHNXhd+UjRTjtaBM="
|
||||
},
|
||||
"hashicorp_consul": {
|
||||
"hash": "sha256-iYt4TxyVQIYjrOgVS+olDcDgTddaVmYVy8M/Y9IkTpQ=",
|
||||
|
|
@ -562,31 +562,31 @@
|
|||
"vendorHash": "sha256-tCwe8TDqwq3lY7so//tHhbTh51EtfIE1UkBylJ8JhoU="
|
||||
},
|
||||
"hashicorp_dns": {
|
||||
"hash": "sha256-ErvlkaFiIHEXUZYDJZmqEgGpZ75mnLRhhsULRvTm7Rc=",
|
||||
"hash": "sha256-sdJpv5Am1tlKyaUkmByrZauzRGZUeAirf7k9a/Fv0S0=",
|
||||
"homepage": "https://registry.terraform.io/providers/hashicorp/dns",
|
||||
"owner": "hashicorp",
|
||||
"repo": "terraform-provider-dns",
|
||||
"rev": "v3.5.0",
|
||||
"rev": "v3.6.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-P4018IUQ4MfdPHP20rHvuzeFSxLHBcoJuLHS/TNAHLk="
|
||||
"vendorHash": "sha256-01tI68RBp6Qpveqo6Jdynd7SWypbUsY6buPNwdcoPkc="
|
||||
},
|
||||
"hashicorp_external": {
|
||||
"hash": "sha256-rHMmGzYvsE5GT0E71UUIXjDG9+v52LI69/gdP2xuI7w=",
|
||||
"hash": "sha256-/uBQaDqZBNmIOkwYD+zOPo7ZHiHKDZO2MmD0q52KM4k=",
|
||||
"homepage": "https://registry.terraform.io/providers/hashicorp/external",
|
||||
"owner": "hashicorp",
|
||||
"repo": "terraform-provider-external",
|
||||
"rev": "v2.3.5",
|
||||
"rev": "v2.4.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-xIagZvWtlNpz5SQfxbA7r9ojAeS3CW2pwV337ObKOwU="
|
||||
"vendorHash": "sha256-sPQR+LDZRMXygLUd9xj6/bI+8DhAPKbkytlTzmrEOBU="
|
||||
},
|
||||
"hashicorp_google": {
|
||||
"hash": "sha256-6cvRvVQmKRi4kyNAo/UAGN00bO+uCJYvf661xYW/QCQ=",
|
||||
"hash": "sha256-EXE9etM8gPdrWriF2HJmD5QZY9tDU8dgsusqnvupnKI=",
|
||||
"homepage": "https://registry.terraform.io/providers/hashicorp/google",
|
||||
"owner": "hashicorp",
|
||||
"repo": "terraform-provider-google",
|
||||
"rev": "v7.31.0",
|
||||
"rev": "v7.32.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-UoS4iIVHhCQ+Zk+SJmsMHJgJBKLMbfMVmtm4MDmzT68="
|
||||
"vendorHash": "sha256-xCWhCYD+YKyEB55uMm2p+eCtSlg65nSfGFMlX0qIiMQ="
|
||||
},
|
||||
"hashicorp_google-beta": {
|
||||
"hash": "sha256-/HxUOhDATteiUDIeA8zvGI9xQ5rOWJAhLN9PLHiBFfI=",
|
||||
|
|
@ -968,13 +968,13 @@
|
|||
"vendorHash": "sha256-OAd8SeTqTrH0kMoM2LsK3vM2PI23b3gl57FaJYM9hM0="
|
||||
},
|
||||
"newrelic_newrelic": {
|
||||
"hash": "sha256-m8KZQUmDyMTR3S1BC5nmo15j5TUDV3ZZsy4hg16VZlc=",
|
||||
"hash": "sha256-UByjO3/TE/b3kncFVMuTpWvTfC5Oof+Z5+9KdOEs7JU=",
|
||||
"homepage": "https://registry.terraform.io/providers/newrelic/newrelic",
|
||||
"owner": "newrelic",
|
||||
"repo": "terraform-provider-newrelic",
|
||||
"rev": "v3.87.1",
|
||||
"rev": "v3.87.3",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-W/a04lDiPVh/tkcWz9eJp/pupI46cXxqukdv1h17xYY="
|
||||
"vendorHash": "sha256-2nDiNYX8iwu4u5gaaIYJC8a/Jw/MBdTgNxmyw+RLB+c="
|
||||
},
|
||||
"ns1-terraform_ns1": {
|
||||
"hash": "sha256-MX/Wd9Lztjn7uwDzJjs4bsSSp0PFzUgsu4jXke9jHL8=",
|
||||
|
|
@ -1058,11 +1058,11 @@
|
|||
"vendorHash": null
|
||||
},
|
||||
"oracle_oci": {
|
||||
"hash": "sha256-Yt46N9wVwgz8VbPSHQF1UQ4XT1ENIcE+yeKmO0JqnlM=",
|
||||
"hash": "sha256-+/7ie5SBYMQ+fEvnrFvVRHnEJ6DGtcjKNzBpsYKItP0=",
|
||||
"homepage": "https://registry.terraform.io/providers/oracle/oci",
|
||||
"owner": "oracle",
|
||||
"repo": "terraform-provider-oci",
|
||||
"rev": "v8.13.0",
|
||||
"rev": "v8.14.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": null
|
||||
},
|
||||
|
|
@ -1130,11 +1130,11 @@
|
|||
"vendorHash": "sha256-L1wufPa7LPPyOPTL+jFQgiWzJoJYS+fCdw3N0KZqKtc="
|
||||
},
|
||||
"rancher_rancher2": {
|
||||
"hash": "sha256-T7nX+sD3FOqXgoNzzGJfIKvMvJ5hkYoHCyzR5Sm08IE=",
|
||||
"hash": "sha256-OFLEDwDDD02FKMldpkRxbj2gRQzhmVb2+3dG3Hq2AG4=",
|
||||
"homepage": "https://registry.terraform.io/providers/rancher/rancher2",
|
||||
"owner": "rancher",
|
||||
"repo": "terraform-provider-rancher2",
|
||||
"rev": "v14.1.0",
|
||||
"rev": "v14.1.1",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-WpI4OZ7BUVgHwQY+7ct+K6CnwXFFuiRbI+iTFSJ8a5A="
|
||||
},
|
||||
|
|
@ -1292,13 +1292,13 @@
|
|||
"vendorHash": "sha256-HjrB7C0KaLJz9NVLfZdq5EZbNbF9lJPxSkQwnWUF978="
|
||||
},
|
||||
"tailscale_tailscale": {
|
||||
"hash": "sha256-yR65w/o/VpwKINcvz4SBybAwsphGC7A/B+baKRcIT3I=",
|
||||
"hash": "sha256-c1Hz8srHNaZJq1kJrSwm8ruoHcebM11yX2wQhWavoWE=",
|
||||
"homepage": "https://registry.terraform.io/providers/tailscale/tailscale",
|
||||
"owner": "tailscale",
|
||||
"repo": "terraform-provider-tailscale",
|
||||
"rev": "v0.28.0",
|
||||
"rev": "v0.29.0",
|
||||
"spdx": "MIT",
|
||||
"vendorHash": "sha256-+q2KR3ctotT30fBE0lcpQlUXQS7nfi5VACWYxwluuMc="
|
||||
"vendorHash": "sha256-hl9govsnEXMd4VbOPqoSGLgSnImDA55enYTaDz2wKH0="
|
||||
},
|
||||
"telmate_proxmox": {
|
||||
"hash": "sha256-1aKKlOIk1mH4yx66eD635d1IaUWXIiBGHEt4A2F2mGM=",
|
||||
|
|
|
|||
|
|
@ -43,14 +43,14 @@
|
|||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "gajim";
|
||||
version = "2.4.5";
|
||||
version = "2.4.6";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
domain = "dev.gajim.org";
|
||||
owner = "gajim";
|
||||
repo = "gajim";
|
||||
tag = version;
|
||||
hash = "sha256-5daPMlC2Ejfi5UXsRLaLWwEZHHEC0szbfkqavIisoUQ=";
|
||||
hash = "sha256-QHfJ52uMDlE/rqqy7y2JIQLMOPaTp7eh4DEsPLBx6p8=";
|
||||
};
|
||||
|
||||
pyproject = true;
|
||||
|
|
|
|||
|
|
@ -35,6 +35,9 @@ stdenv.mkDerivation rec {
|
|||
"--without-libfam"
|
||||
];
|
||||
|
||||
# gcc 15 C23 default breaks K&R () prototypes and errors on -Wincompatible-pointer-types
|
||||
env.NIX_CFLAGS_COMPILE = "-std=gnu17";
|
||||
|
||||
nativeBuildInputs = [
|
||||
autoreconfHook
|
||||
groff
|
||||
|
|
|
|||
|
|
@ -17,13 +17,13 @@
|
|||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "cri-o";
|
||||
version = "1.35.0";
|
||||
version = "1.36.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cri-o";
|
||||
repo = "cri-o";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-aP3qhD2d1x+VPDifkg9lXgVD38UcongyN6vHkn8oYos=";
|
||||
hash = "sha256-I+oqb8TeI7dBX4ecmEEWNKM7EAdCfGWYv6dpz8emvuA=";
|
||||
};
|
||||
vendorHash = null;
|
||||
|
||||
|
|
|
|||
|
|
@ -332,14 +332,31 @@ buildStdenv.mkDerivation {
|
|||
# https://hg-edge.mozilla.org/mozilla-central/rev/aa8a29bd1fb9
|
||||
./139-wayland-drag-animation.patch
|
||||
]
|
||||
# Revert apple sdk bump to 26.1 and 26.2
|
||||
# Revert apple sdk bump to 26.1, 26.2 and 26.4
|
||||
++
|
||||
lib.optionals (lib.versionAtLeast version "151" && lib.versionOlder apple-sdk_26.version "26.4")
|
||||
[
|
||||
(fetchpatch {
|
||||
url = "https://github.com/mozilla-firefox/firefox/commit/d06b47c9e398ceb04193f904e090f23a5a1f4906.patch";
|
||||
hash = "sha256-N458KSOOiotmji5VjgdbhueZ3yTVx47UtsWnmOe8XFQ=";
|
||||
revert = true;
|
||||
includes = [
|
||||
"build/moz.configure/toolchain.configure"
|
||||
"python/mozbuild/mozbuild/test/configure/macos_fake_sdk/SDKSettings.plist"
|
||||
];
|
||||
})
|
||||
]
|
||||
++
|
||||
lib.optionals (lib.versionAtLeast version "148" && lib.versionOlder apple-sdk_26.version "26.2")
|
||||
[
|
||||
(fetchpatch {
|
||||
url = "https://github.com/mozilla-firefox/firefox/commit/73cbb9ff0fdbf8b13f38d078ce01ef6ec0794f9c.patch";
|
||||
hash = "sha256-ghdddJxsaxXzLZpOOfwss+2S/UUcbLqKGzWWqKy9h/k=";
|
||||
hash = "sha256-3eBhCuiT61pbeCrvK13vg0OFV4gn/JTvsGXmLN4MBTQ=";
|
||||
revert = true;
|
||||
includes = [
|
||||
"build/moz.configure/toolchain.configure"
|
||||
"python/mozbuild/mozbuild/test/configure/macos_fake_sdk/SDKSettings.plist"
|
||||
];
|
||||
})
|
||||
]
|
||||
++
|
||||
|
|
@ -347,8 +364,12 @@ buildStdenv.mkDerivation {
|
|||
[
|
||||
(fetchpatch {
|
||||
url = "https://github.com/mozilla-firefox/firefox/commit/c1cd0d56e047a40afb2a59a56e1fd8043e448e05.patch";
|
||||
hash = "sha256-bFHLy3b0jOcROqltIwHwSAqWYve8OZHbiPMOdhLUCLc=";
|
||||
hash = "sha256-NPaA5tYz3BUxB2ads5HZyYWJ+aS9pTzQp+AKFkfmdXA=";
|
||||
revert = true;
|
||||
includes = [
|
||||
"build/moz.configure/toolchain.configure"
|
||||
"python/mozbuild/mozbuild/test/configure/macos_fake_sdk/SDKSettings.plist"
|
||||
];
|
||||
})
|
||||
]
|
||||
++ extraPatches;
|
||||
|
|
|
|||
|
|
@ -128,9 +128,9 @@ in
|
|||
export pnpm_config_pm_on_fail=ignore
|
||||
|
||||
# Some packages produce platform dependent outputs. We do not want to cache those in the global store
|
||||
export pnpm_config_side_effects_cache false
|
||||
export pnpm_config_side_effects_cache=false
|
||||
|
||||
export pnpm_config_update_notifier false
|
||||
export pnpm_config_update_notifier=false
|
||||
else
|
||||
pnpm config set manage-package-manager-versions false
|
||||
pnpm config set side-effects-cache false
|
||||
|
|
|
|||
|
|
@ -255,6 +255,12 @@ lib.makeOverridable
|
|||
# Example: [ "-Z debuginfo=2" ]
|
||||
# Default: []
|
||||
extraRustcOptsForBuildRs,
|
||||
# Extra rustc options for proc-macro crates, replacing
|
||||
# `extraRustcOpts`. Lets callers keep instrumentation flags
|
||||
# (sanitizers, coverage) off host dylibs, mirroring Cargo's
|
||||
# behaviour of not applying RUSTFLAGS to host artifacts.
|
||||
# Default: null (inherit `extraRustcOpts`)
|
||||
extraRustcOptsForProcMacro,
|
||||
# The lint level cap passed to rustc via `--cap-lints`.
|
||||
# See <https://doc.rust-lang.org/rustc/lints/levels.html#capping-lints>.
|
||||
#
|
||||
|
|
@ -353,7 +359,21 @@ lib.makeOverridable
|
|||
buildInputs_ = buildInputs;
|
||||
extraRustcOpts_ = extraRustcOpts;
|
||||
extraRustcOptsForBuildRs_ = extraRustcOptsForBuildRs;
|
||||
extraRustcOptsForProcMacro_ = extraRustcOptsForProcMacro;
|
||||
buildTests_ = buildTests;
|
||||
procMacro = lib.attrByPath [ "procMacro" ] false crate;
|
||||
# For proc-macros, prefer the *ForProcMacro variant at each level
|
||||
# (crate attr, override arg) and fall back to extraRustcOpts.
|
||||
crateExtraRustcOpts =
|
||||
if procMacro && crate ? extraRustcOptsForProcMacro then
|
||||
crate.extraRustcOptsForProcMacro
|
||||
else
|
||||
crate.extraRustcOpts or [ ];
|
||||
overrideExtraRustcOpts =
|
||||
if procMacro && extraRustcOptsForProcMacro_ != null then
|
||||
extraRustcOptsForProcMacro_
|
||||
else
|
||||
extraRustcOpts_;
|
||||
resolvedLints = crate.lints or lints;
|
||||
lintFlags = lintsToRustcFlags resolvedLints;
|
||||
resolvedCapLints =
|
||||
|
|
@ -486,7 +506,7 @@ lib.makeOverridable
|
|||
crateRustVersion = crate.rust-version or "";
|
||||
crateVersion = crate.version;
|
||||
crateType =
|
||||
if lib.attrByPath [ "procMacro" ] false crate then
|
||||
if procMacro then
|
||||
[ "proc-macro" ]
|
||||
else if lib.attrByPath [ "plugin" ] false crate then
|
||||
[ "dylib" ]
|
||||
|
|
@ -497,8 +517,8 @@ lib.makeOverridable
|
|||
edition = crate.edition or null;
|
||||
codegenUnits = if crate ? codegenUnits then crate.codegenUnits else defaultCodegenUnits;
|
||||
extraRustcOpts =
|
||||
lib.optionals (crate ? extraRustcOpts) crate.extraRustcOpts
|
||||
++ extraRustcOpts_
|
||||
crateExtraRustcOpts
|
||||
++ overrideExtraRustcOpts
|
||||
++ lintFlags
|
||||
++ (lib.optional (edition != null) "--edition ${edition}");
|
||||
extraRustcOptsForBuildRs =
|
||||
|
|
@ -598,6 +618,7 @@ lib.makeOverridable
|
|||
verbose = crate_.verbose or true;
|
||||
extraRustcOpts = [ ];
|
||||
extraRustcOptsForBuildRs = [ ];
|
||||
extraRustcOptsForProcMacro = null;
|
||||
capLints = null;
|
||||
lints = { };
|
||||
features = [ ];
|
||||
|
|
|
|||
|
|
@ -836,6 +836,32 @@ rec {
|
|||
];
|
||||
};
|
||||
};
|
||||
# Default (null) inherits extraRustcOpts for proc-macros.
|
||||
procMacroExtraOptsInherit = {
|
||||
procMacro = true;
|
||||
edition = "2018";
|
||||
extraRustcOpts = [ "--cfg=target_only" ];
|
||||
src = mkFile "src/lib.rs" ''
|
||||
#[cfg(not(target_only))]
|
||||
compile_error!("extraRustcOpts not inherited by proc-macro");
|
||||
use proc_macro as _;
|
||||
'';
|
||||
};
|
||||
# When set, extraRustcOptsForProcMacro replaces extraRustcOpts
|
||||
# for proc-macro crates.
|
||||
procMacroExtraOptsOverride = {
|
||||
procMacro = true;
|
||||
edition = "2018";
|
||||
extraRustcOpts = [ "--cfg=target_only" ];
|
||||
extraRustcOptsForProcMacro = [ "--cfg=host_only" ];
|
||||
src = mkFile "src/lib.rs" ''
|
||||
#[cfg(target_only)]
|
||||
compile_error!("extraRustcOpts leaked into proc-macro");
|
||||
#[cfg(not(host_only))]
|
||||
compile_error!("extraRustcOptsForProcMacro not applied");
|
||||
use proc_macro as _;
|
||||
'';
|
||||
};
|
||||
# The `lints` attr mirrors Cargo.toml's `[lints]` table and is
|
||||
# translated to rustc `-A`/`-W`/`-D`/`-F` flags. Lower-priority
|
||||
# entries are emitted first so that higher-priority specific lints
|
||||
|
|
|
|||
|
|
@ -6,13 +6,13 @@
|
|||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "air";
|
||||
version = "1.65.1";
|
||||
version = "1.65.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "air-verse";
|
||||
repo = "air";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-omyWDW5bE+HfXQ2EQZKthB9t+jBEFcPSVtPss5qeoMI=";
|
||||
hash = "sha256-kQqWIqGJx8396rALn87ykdA3g+1IH+XGOpaICD02j2U=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-03xZ3P/7xjznYdM9rv+8ZYftQlnjJ6ZTq0HdSvGpaWw=";
|
||||
|
|
|
|||
|
|
@ -11,16 +11,16 @@
|
|||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "aks-mcp-server";
|
||||
version = "0.0.17";
|
||||
version = "0.0.18";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Azure";
|
||||
repo = "aks-mcp";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-3G7IDHDY3HfjGYM8aKK4Egey1/urDVeWv99PJcCaiSo=";
|
||||
hash = "sha256-h/zLbnc2ffcQkx+KE6vglaSG6QAySZSg8EB4zyqH4sg=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-aMs7vABZwRPPIaP6BdTau1oFfGqnzYt8wxUk2mQSVlE=";
|
||||
vendorHash = "sha256-HYIEGnQOVNNVJxzoOiLTXwRFOBvCwikAwqky18VqFSQ=";
|
||||
|
||||
subPackages = [ "cmd/aks-mcp" ];
|
||||
|
||||
|
|
|
|||
|
|
@ -15,12 +15,12 @@
|
|||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "algol68g";
|
||||
version = "3.12.0";
|
||||
version = "3.12.1";
|
||||
|
||||
src = fetchurl {
|
||||
# Uses archive.org because the original site removes older versions.
|
||||
url = "https://web.archive.org/web/20260503173638/https://algol68genie.nl/algol68g-3.12.0.tar.gz";
|
||||
hash = "sha256-fYjuivr6AKRK4Nn45Q+oglpTMnp+PhO6KOkGZjwVKn0=";
|
||||
url = "https://web.archive.org/web/20260515052918/https://algol68genie.nl/algol68g-3.12.1.tar.gz";
|
||||
hash = "sha256-Mdoca6W1Wyyv7WrmzaAW/fn0uLkXy6MwSDImVwB+mBk";
|
||||
};
|
||||
|
||||
outputs = [
|
||||
|
|
|
|||
|
|
@ -8,13 +8,13 @@
|
|||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "aliyun-cli";
|
||||
version = "3.3.12";
|
||||
version = "3.3.15";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "aliyun";
|
||||
repo = "aliyun-cli";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-U6vEQwlj0jNYnkZyZmmelEf/WJIHmaffJ+Y1NRU0IiI=";
|
||||
hash = "sha256-7DkVhFGUvAAFWUiFTOaYARIGCyAW3UqMCLUs5F55vfM=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
|
|
|||
246
pkgs/by-name/am/amp-cli/package-lock.json
generated
246
pkgs/by-name/am/amp-cli/package-lock.json
generated
|
|
@ -1,246 +0,0 @@
|
|||
{
|
||||
"name": "amp-cli",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"dependencies": {
|
||||
"@sourcegraph/amp": "^0.0.1778343260-gb9a37d"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-1.1.10.tgz",
|
||||
"integrity": "sha512-PTMyX7FVZGP4s0LcjgrFonek7Sr9ZTdi0TgpR4/4RQmC2TiDcjpdZOXxRMe2aP+5N89Ix9RG9QWclgqRHLk/Xw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
},
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/Brooooooklyn"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@napi-rs/keyring-darwin-arm64": "1.1.10",
|
||||
"@napi-rs/keyring-darwin-x64": "1.1.10",
|
||||
"@napi-rs/keyring-freebsd-x64": "1.1.10",
|
||||
"@napi-rs/keyring-linux-arm-gnueabihf": "1.1.10",
|
||||
"@napi-rs/keyring-linux-arm64-gnu": "1.1.10",
|
||||
"@napi-rs/keyring-linux-arm64-musl": "1.1.10",
|
||||
"@napi-rs/keyring-linux-riscv64-gnu": "1.1.10",
|
||||
"@napi-rs/keyring-linux-x64-gnu": "1.1.10",
|
||||
"@napi-rs/keyring-linux-x64-musl": "1.1.10",
|
||||
"@napi-rs/keyring-win32-arm64-msvc": "1.1.10",
|
||||
"@napi-rs/keyring-win32-ia32-msvc": "1.1.10",
|
||||
"@napi-rs/keyring-win32-x64-msvc": "1.1.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring-darwin-arm64": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-arm64/-/keyring-darwin-arm64-1.1.10.tgz",
|
||||
"integrity": "sha512-qdXBVypPNgTzso5F/YXWy5dOfFEb9eo43uROMlvwlhj7Aw137iwqwHiqlxR0teFKA33cWnem+ZKeVSIPoobtNA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring-darwin-x64": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-x64/-/keyring-darwin-x64-1.1.10.tgz",
|
||||
"integrity": "sha512-53DgSzhTAJwxR3KCyggHWcLwp+cw2v1zAhBiqNn1P8XwSJSba7HzFwsei6zZMn7bn3UY1ngIHEtaA74UUJVJyw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring-freebsd-x64": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring-freebsd-x64/-/keyring-freebsd-x64-1.1.10.tgz",
|
||||
"integrity": "sha512-pI6lect/Dp8NnV+g3w1hmYLt69FbSwKFAHn77vjeUaIT5H9C0ikAgwLk89Sd8/Ei/AHHldGkrLeWkNjnIiHfoQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"freebsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring-linux-arm-gnueabihf": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm-gnueabihf/-/keyring-linux-arm-gnueabihf-1.1.10.tgz",
|
||||
"integrity": "sha512-w4psOx5m1ltvNLABT/BpIzP5roVcglR1kDhzZgSEOIIrf2i4FKPQqUIo5UQtjsu+AqhhYwnlnketKDf4h+D06g==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring-linux-arm64-gnu": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-gnu/-/keyring-linux-arm64-gnu-1.1.10.tgz",
|
||||
"integrity": "sha512-YMC+ZLj3RldGD2Q5wzlZbc8vTh5Fteln+FpB2lw7EbDib3mmIribNH1NG21E4SwculFRDkVJqYGzwIhafloT8Q==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring-linux-arm64-musl": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-musl/-/keyring-linux-arm64-musl-1.1.10.tgz",
|
||||
"integrity": "sha512-X/Gr5q2vJW7HMpcWRKj7eXer00a1PYb3zt3xsEG/VbcEo5A973pJANTBhYuoW098O/b7ORkunFt9WSbCgenw2A==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring-linux-riscv64-gnu": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-riscv64-gnu/-/keyring-linux-riscv64-gnu-1.1.10.tgz",
|
||||
"integrity": "sha512-vA3R4NVBlU0TVDHavwr5hSqePSs9OwTzzzFlTbZzqgh9s7OqcSwNT096nbr5dRjuQfG9o4/xvjfvVJ4v5z0Egg==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring-linux-x64-gnu": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-gnu/-/keyring-linux-x64-gnu-1.1.10.tgz",
|
||||
"integrity": "sha512-qbKE72UeVOrIoiYYHh7joTpDIgQCZpW5OJHG4Ir19GHLdQwNZGKLfFxrTT2DvZ5EXwFJWbOp4Dew4OvvQ0E63g==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring-linux-x64-musl": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-musl/-/keyring-linux-x64-musl-1.1.10.tgz",
|
||||
"integrity": "sha512-niLWyjD/JxQwlOTPeldIx8Xnf03Mp4ooorpWJMWbMuVz/6hSyLVghY/BDYu2Oaxhc+XlTEjmqwhoTWYhmti5eA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring-win32-arm64-msvc": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-arm64-msvc/-/keyring-win32-arm64-msvc-1.1.10.tgz",
|
||||
"integrity": "sha512-VBlqZ0MF5ksc/Z+yxoL2+p6TDu2rqBOcgZ+HwXzSfgFnfnuPds7xOVdFwwaiJbj9CsCrgnByr1jtHRvfEQ6Iiw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring-win32-ia32-msvc": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-ia32-msvc/-/keyring-win32-ia32-msvc-1.1.10.tgz",
|
||||
"integrity": "sha512-0AvwivxgtjdpTCZCFAQUCxFA45DNKXOsdZYXBCIDfPIpUPgLxhIAsg6q7NJK00r1M24StwwfD+AzZDu14J1PKQ==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/keyring-win32-x64-msvc": {
|
||||
"version": "1.1.10",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-x64-msvc/-/keyring-win32-x64-msvc-1.1.10.tgz",
|
||||
"integrity": "sha512-T02DfUUvp3epOJ5lC7hcM5ff6xaLhIfymBf0LEa0oQMi+yCVoDrgjeKeGCUGwtVJWfphu58Tf9twX+hRiAD0dg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@sourcegraph/amp": {
|
||||
"version": "0.0.1778343260-gb9a37d",
|
||||
"resolved": "https://registry.npmjs.org/@sourcegraph/amp/-/amp-0.0.1778343260-gb9a37d.tgz",
|
||||
"integrity": "sha512-TY4lL2lqwt+NtBa3ngKZSYfY5Z1qBAOd4UQMCT0nsUKatQGtSOIMec+zQSv6tr0L+z2jrDUzD0cpRkBDkLQjsQ==",
|
||||
"license": "Amp Commercial License",
|
||||
"dependencies": {
|
||||
"@napi-rs/keyring": "1.1.10"
|
||||
},
|
||||
"bin": {
|
||||
"amp": "dist/main.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,90 +1,106 @@
|
|||
{
|
||||
stdenvNoCC,
|
||||
lib,
|
||||
buildNpmPackage,
|
||||
fetchzip,
|
||||
ripgrep,
|
||||
fetchurl,
|
||||
autoPatchelfHook,
|
||||
gzip,
|
||||
makeWrapper,
|
||||
testers,
|
||||
ripgrep,
|
||||
versionCheckHook,
|
||||
writableTmpDirAsHomeHook,
|
||||
cctools,
|
||||
darwin,
|
||||
rcodesign,
|
||||
}:
|
||||
|
||||
buildNpmPackage (finalAttrs: {
|
||||
pname = "amp-cli";
|
||||
version = "0.0.1778343260-gb9a37d";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://registry.npmjs.org/@sourcegraph/amp/-/amp-${finalAttrs.version}.tgz";
|
||||
hash = "sha256-48FyPDniLNQoeZ+SaheTvzLCYL3r95e9VDCW4Y5gMq8=";
|
||||
let
|
||||
platforms = {
|
||||
# Upstream also publishes linux-x64, which is optimized for AVX2. Use the
|
||||
# baseline build for nixpkgs so the x86_64-linux package works on all
|
||||
# supported x86_64 CPUs instead of depending on the build user's CPU flags.
|
||||
x86_64-linux = "linux-x64-baseline";
|
||||
aarch64-linux = "linux-arm64";
|
||||
x86_64-darwin = "darwin-x64";
|
||||
aarch64-darwin = "darwin-arm64";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
cp ${./package-lock.json} package-lock.json
|
||||
in
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "amp-cli";
|
||||
version = "0.0.1779094967-g3f6594";
|
||||
|
||||
# Create a minimal package.json with just the dependency we need (without devDependencies)
|
||||
cat > package.json <<EOF
|
||||
{
|
||||
"name": "amp-cli",
|
||||
"version": "0.0.0",
|
||||
"license": "UNLICENSED",
|
||||
"dependencies": {
|
||||
"@sourcegraph/amp": "${finalAttrs.version}"
|
||||
},
|
||||
"bin": {
|
||||
"amp": "./bin/amp-wrapper.js"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
# Create wrapper bin directory
|
||||
mkdir -p bin
|
||||
|
||||
# Create a wrapper script that will be installed by npm
|
||||
cat > bin/amp-wrapper.js << EOF
|
||||
#!/usr/bin/env node
|
||||
import('@sourcegraph/amp/dist/main.js')
|
||||
EOF
|
||||
chmod +x bin/amp-wrapper.js
|
||||
'';
|
||||
|
||||
npmDepsHash = "sha256-Ce7TaJuSrha+NcFmppMm/byAFosBR2I/zMY4KA5JXuE=";
|
||||
|
||||
propagatedBuildInputs = [
|
||||
ripgrep
|
||||
];
|
||||
src = finalAttrs.passthru.sources.${stdenvNoCC.hostPlatform.system};
|
||||
|
||||
nativeBuildInputs = [
|
||||
gzip
|
||||
makeWrapper
|
||||
];
|
||||
]
|
||||
++ lib.optionals stdenvNoCC.hostPlatform.isLinux [ autoPatchelfHook ];
|
||||
strictDeps = true;
|
||||
|
||||
npmFlags = [
|
||||
"--no-audit"
|
||||
"--no-fund"
|
||||
"--ignore-scripts"
|
||||
];
|
||||
dontUnpack = true;
|
||||
dontStrip = true;
|
||||
dontFixup = !stdenvNoCC.hostPlatform.isLinux;
|
||||
|
||||
# Disable build and prune steps
|
||||
dontNpmBuild = true;
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
postInstall = ''
|
||||
wrapProgram $out/bin/amp \
|
||||
--prefix PATH : ${lib.makeBinPath [ ripgrep ]} \
|
||||
--set AMP_SKIP_UPDATE_CHECK 1
|
||||
mkdir -p $out/bin $out/libexec/amp-cli
|
||||
gunzip -c $src > $out/libexec/amp-cli/amp
|
||||
chmod +x $out/libexec/amp-cli/amp
|
||||
|
||||
makeWrapper $out/libexec/amp-cli/amp $out/bin/amp \
|
||||
--set AMP_SKIP_UPDATE_CHECK 1 \
|
||||
--prefix PATH : ${lib.makeBinPath [ ripgrep ]}
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru.updateScript = ./update.sh;
|
||||
passthru.tests.version = testers.testVersion {
|
||||
package = finalAttrs.finalPackage;
|
||||
command = "HOME=$(mktemp -d) amp --version";
|
||||
postPhases = lib.optionals stdenvNoCC.hostPlatform.isDarwin [ "postPatchelf" ];
|
||||
postPatchelf = lib.optionalString stdenvNoCC.hostPlatform.isDarwin ''
|
||||
'${lib.getExe' cctools "${cctools.targetPrefix}install_name_tool"}' $out/libexec/amp-cli/amp \
|
||||
-change /usr/lib/libicucore.A.dylib '${lib.getLib darwin.ICU}/lib/libicucore.A.dylib'
|
||||
'${lib.getExe rcodesign}' sign --code-signature-flags linker-signed $out/libexec/amp-cli/amp
|
||||
'';
|
||||
|
||||
doInstallCheck = stdenvNoCC.buildPlatform.canExecute stdenvNoCC.hostPlatform;
|
||||
nativeInstallCheckInputs = [
|
||||
writableTmpDirAsHomeHook
|
||||
versionCheckHook
|
||||
];
|
||||
versionCheckProgram = "${placeholder "out"}/bin/amp";
|
||||
versionCheckProgramArg = "--version";
|
||||
versionCheckKeepEnvironment = [ "HOME" ];
|
||||
|
||||
passthru = {
|
||||
sources = lib.mapAttrs (
|
||||
system': platform:
|
||||
fetchurl {
|
||||
url = "https://static.ampcode.com/cli/${finalAttrs.version}/amp-${platform}.gz";
|
||||
hash =
|
||||
{
|
||||
x86_64-linux = "sha256-ZBqt8UWDY0SlYOOrJZib+UXdZ1cQxyRNp3T7fr+gcNs=";
|
||||
aarch64-linux = "sha256-qztHMb4EJBOuEQh0OZ33dqx/MUy5LEPgLry6h+rmwVo=";
|
||||
x86_64-darwin = "sha256-meedgFtc+DA4NoR0XJuLSX/gmiMKCZLACfPBbk6wfLk=";
|
||||
aarch64-darwin = "sha256-0v3yM9zQ6ToWBHyPvrmPTP0lfPb1tCoAd6eNgHs3ZkM=";
|
||||
}
|
||||
.${system'};
|
||||
}
|
||||
) platforms;
|
||||
updateScript = ./update.sh;
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "CLI for Amp, an agentic coding agent in research preview from Sourcegraph";
|
||||
homepage = "https://ampcode.com/";
|
||||
downloadPage = "https://www.npmjs.com/package/@sourcegraph/amp";
|
||||
downloadPage = "https://ampcode.com/install";
|
||||
license = lib.licenses.unfree;
|
||||
maintainers = with lib.maintainers; [
|
||||
keegancsmith
|
||||
burmudar
|
||||
];
|
||||
mainProgram = "amp";
|
||||
platforms = builtins.attrNames platforms;
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
};
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,15 +1,20 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p nodejs nix-update
|
||||
#!nix-shell -i bash -p curl common-updater-scripts
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
version=$(npm view @sourcegraph/amp version)
|
||||
version=$(curl -fsSL https://static.ampcode.com/cli/cli-version.txt)
|
||||
|
||||
# Generate updated lock file
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
npm i --package-lock-only @sourcegraph/amp@"$version"
|
||||
rm -f package.json # package.json is not used by buildNpmPackage
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")/../../../.."
|
||||
|
||||
# Update version and hashes
|
||||
cd -
|
||||
nix-update amp-cli --version "$version"
|
||||
for system in \
|
||||
x86_64-linux \
|
||||
aarch64-linux \
|
||||
x86_64-darwin \
|
||||
aarch64-darwin
|
||||
do
|
||||
update-source-version amp-cli "$version" \
|
||||
--source-key="sources.$system" \
|
||||
--ignore-same-version \
|
||||
--ignore-same-hash
|
||||
done
|
||||
|
|
|
|||
|
|
@ -27,11 +27,11 @@ let
|
|||
rec {
|
||||
x86_64-linux = {
|
||||
urlSuffix = "linux-x86_64.tar.gz";
|
||||
hash = "sha256-6akFImNU5EQLW6f2dQRUXUC8srM32xyVI14pjVxV6Sw=";
|
||||
hash = "sha256-A8JUYzEMQH1sEKYrKZ84QZAgYbz0OvpHa3t9RIUVE9c=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
urlSuffix = "macos-universal.zip";
|
||||
hash = "sha256-sJ4mXSYsJICXMpDZemqRF3uYgB9SWNdbzcT1s2gHpZA=";
|
||||
hash = "sha256-LSNvFL1ud/FkzNSGk17ZqN2debnqsjlVDHd4NBjTds0=";
|
||||
};
|
||||
aarch64-darwin = x86_64-darwin;
|
||||
}
|
||||
|
|
@ -40,7 +40,7 @@ let
|
|||
in
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "appflowy";
|
||||
version = "0.11.8";
|
||||
version = "0.11.9";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/AppFlowy-IO/appflowy/releases/download/${finalAttrs.version}/AppFlowy-${finalAttrs.version}-${dist.urlSuffix}";
|
||||
|
|
|
|||
|
|
@ -9,16 +9,16 @@
|
|||
}:
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "argon";
|
||||
version = "2.0.28";
|
||||
version = "2.0.29";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "argon-rbx";
|
||||
repo = "argon";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-QXGiDcn5BM1psCZf88gEyKqoK9EDFquLgyzJeZOhwMU=";
|
||||
hash = "sha256-i2YWAXgrcS759+iNtSzjIHU1FmY22Xx6sy2q9ErGsnw=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-okfQn/dgBN6s1aO1cnU/bY7BIqwM9iq1iPZ321ez4C4=";
|
||||
cargoHash = "sha256-wj+T1XBLVQsDNMT9d/0ybR+L7fDZj4Ijhqv0fH+f7HA=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
|
|
|
|||
|
|
@ -8,13 +8,13 @@
|
|||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "asccli";
|
||||
version = "1.4.0";
|
||||
version = "1.5.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "rorkai";
|
||||
repo = "App-Store-Connect-CLI";
|
||||
tag = "${finalAttrs.version}";
|
||||
hash = "sha256-VMLLziuLV7F95mTdEmaUxwMC9vKSTejJZgw3KFHr7sg=";
|
||||
hash = "sha256-junTdPz0gtfmDPycuitYo06a0D25yi3E2uVPaaQtWBQ=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-XBEDMUGwSh8P+dVKMebN3zD83e1odAN+Wy15yys0+2M=";
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
rustPlatform,
|
||||
fetchFromGitHub,
|
||||
versionCheckHook,
|
||||
|
|
@ -7,24 +8,28 @@
|
|||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "agg";
|
||||
version = "1.7.0";
|
||||
version = "1.8.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "asciinema";
|
||||
repo = "agg";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-6UenPE6mmmvliaIuGdQj/FrlmoJvmBJgfo0hW+uRaxM=";
|
||||
hash = "sha256-64VyCTGjzey6AHEAfk5V/Qoffe5+sDaDNve54M7tmf4=";
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
cargoHash = "sha256-VpbjvrMhzS1zrcMNWBjTLda6o3ea2cwpnEDUouwyp8w=";
|
||||
cargoHash = "sha256-/WS5nAFKnP/CsU5+Pf5rtNN4LWaXVjlidLzH7DWYds0=";
|
||||
|
||||
__impureHostDeps = lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
"/System/Library/Fonts"
|
||||
];
|
||||
|
||||
doInstallCheck = true;
|
||||
nativeInstallCheckInputs = [ versionCheckHook ];
|
||||
|
||||
meta = {
|
||||
description = "Command-line tool for generating animated GIF files from asciicast v2 files produced by asciinema terminal recorder";
|
||||
description = "Command-line tool for generating animated GIF files from asciicast files produced by asciinema terminal recorder";
|
||||
homepage = "https://github.com/asciinema/agg";
|
||||
changelog = "https://github.com/asciinema/agg/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.asl20;
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
version = "3.10";
|
||||
version = "3.11";
|
||||
pname = "asymptote";
|
||||
|
||||
outputs = [
|
||||
|
|
@ -46,7 +46,7 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/asymptote/${finalAttrs.version}/asymptote-${finalAttrs.version}.src.tgz";
|
||||
hash = "sha256-0nvo/vJQ1dwzhgK/cj4dCejNHoXBmatMgHQwif2M0sc=";
|
||||
hash = "sha256-U36fImIb+E8J7g1E3EVcTqkboZODDx12JKB9RxDX59E=";
|
||||
};
|
||||
|
||||
# override with TeX Live containers to avoid building sty, docs from source
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue