Merge commit 1c8355b14e into haskell-updates

This commit is contained in:
sternenseemann
2026-04-26 17:00:16 +02:00
951 changed files with 49934 additions and 30520 deletions
+1 -1
View File
@@ -49,7 +49,7 @@ jobs:
- name: Create backport PRs
id: backport
uses: korthout/backport-action@3c06f323a58619da1e8522229ebc8d5de2633e46 # v4.3.0
uses: korthout/backport-action@ad30f01dbe543be4a24431001c38f3617af8c745 # v4.4.0
with:
# Config README: https://github.com/korthout/backport-action#backport-action
add_author_as_reviewer: true
+1 -1
View File
@@ -62,7 +62,7 @@ jobs:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
target-as-trusted-at: ${{ inputs.targetSha }}
- uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31.10.4
- uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f # v31.10.5
with:
# Sandbox is disabled on MacOS by default.
extra_nix_config: sandbox = true
+1 -1
View File
@@ -120,7 +120,7 @@ jobs:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
target-as-trusted-at: ${{ inputs.targetSha }}
- uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31.10.4
- uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f # v31.10.5
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
continue-on-error: true
+4 -4
View File
@@ -132,7 +132,7 @@ jobs:
core.info(`Found pinned.json commit: ${ciPinBumpCommit}`)
- name: Install Nix
uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31.10.4
uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f # v31.10.5
- name: Load supported versions
id: versions
@@ -180,7 +180,7 @@ jobs:
target-as-trusted-at: ${{ inputs.targetSha }}
- name: Install Nix
uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31.10.4
uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f # v31.10.5
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
continue-on-error: true
@@ -270,7 +270,7 @@ jobs:
merge-multiple: true
- name: Install Nix
uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31.10.4
uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f # v31.10.5
- name: Combine all output paths and eval stats
run: |
@@ -465,7 +465,7 @@ jobs:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
- name: Install Nix
uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31.10.4
uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f # v31.10.5
- name: Ensure flake outputs on all systems still evaluate
run: nix flake check --all-systems --no-build './nixpkgs/untrusted?shallow=1'
+3 -3
View File
@@ -35,7 +35,7 @@ jobs:
with:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
- uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31.10.4
- uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f # v31.10.5
# TODO: Figure out how to best enable caching for the treefmt job. Cachix won't work well,
# because the cache would be invalidated on every commit - treefmt checks every file.
@@ -70,7 +70,7 @@ jobs:
with:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
- uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31.10.4
- uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f # v31.10.5
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
continue-on-error: true
@@ -100,7 +100,7 @@ jobs:
merged-as-untrusted-at: ${{ inputs.mergedSha }}
target-as-trusted-at: ${{ inputs.targetSha }}
- uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31.10.4
- uses: cachix/install-nix-action@ab739621df7a23f52766f9ccc97f38da6b7af14f # v31.10.5
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
continue-on-error: true
+2 -1
View File
@@ -475,8 +475,9 @@ nixos/tests/incus/ @adamcstephens
pkgs/by-name/in/incus/ @adamcstephens
pkgs/by-name/lx/lxc* @adamcstephens
# Flutter
# ExpidusOS, Flutter
/pkgs/development/compilers/flutter @RossComputerGuy
/pkgs/desktops/expidus @RossComputerGuy
# GNU Tar & Zip
/pkgs/by-name/gn/gnutar @RossComputerGuy
+1 -6
View File
@@ -188,12 +188,7 @@ let
kernel: rebuilds: lib.nameValuePair "10.rebuild-${kernel}-stdenv" (lib.elem "stdenv" rebuilds)
) rebuildsByKernel
// {
"10.rebuild-nixos-tests" =
lib.elem "nixosTests.simple" (extractPackageNames diffAttrs.rebuilds)
&&
# Only set this label when no other label with indication for staging has been set.
# This avoids confusion whether to target staging or batch this with kernel updates.
lib.last (lib.sort lib.lessThan (lib.attrValues rebuildCountByKernel)) <= 500;
"10.rebuild-nixos-tests" = lib.elem "nixosTests.simple" (extractPackageNames diffAttrs.rebuilds);
};
}
);
+3 -2
View File
@@ -66,8 +66,9 @@ function runChecklist({
if (allByName) {
// We can only determine the below, if all packages are in by-name, since
// we can't reliably relate changed files to packages outside by-name.
checklist[`${user.login} is a maintainer of all touched packages.`] =
eligible.has(user.id)
checklist[
`${user.login} is a maintainer of all touched packages on the ${pull_request.base.ref} branch.`
] = eligible.has(user.id)
}
} else {
// This is only used when no user is passed, i.e. for labeling.
+3 -3
View File
@@ -920,14 +920,14 @@ respectively. Otherwise, the fetcher uses `fetchzip`.
This is used with Radicle repositories. The arguments expected are similar to `fetchgit`.
Requires a `seed` argument (e.g. `seed.radicle.xyz` or `rosa.radicle.xyz`) and a `repo` argument
Requires a `seed` argument (e.g. `seed.radicle.dev` or `rosa.radicle.network`) and a `repo` argument
(the repository id *without* the `rad:` prefix). Also accepts an optional `node` argument which
contains the id of the node from which to fetch the specified ref. If `node` is `null` (the
default), a canonical ref is fetched instead.
```nix
fetchFromRadicle {
seed = "seed.radicle.xyz";
seed = "seed.radicle.dev";
repo = "z3gqcJUoA1n9HaHKufZs5FCSGazv5"; # heartwood
tag = "releases/1.3.0";
hash = "sha256-4o88BWKGGOjCIQy7anvzbA/kPOO+ZsLMzXJhE61odjw=";
@@ -942,7 +942,7 @@ contains the full revision id of the Radicle patch to fetch.
```nix
fetchRadiclePatch {
seed = "rosa.radicle.xyz";
seed = "rosa.radicle.network";
repo = "z4V1sjrXqjvFdnCUbxPFqd5p4DtH5"; # radicle-explorer
revision = "d97d872386c70607beda2fb3fc2e60449e0f4ce4"; # patch: d77e064
hash = "sha256-ttnNqj0lhlSP6BGzEhhUOejKkkPruM9yMwA5p9Di4bk=";
+1 -1
View File
@@ -93,7 +93,7 @@ there are 3 steps: frontend dependencies (javascript), backend dependencies (eli
##### mixRelease - Frontend dependencies (javascript) {#mix-release-javascript-deps}
For phoenix projects, inside of Nixpkgs you can either use yarn2nix (mkYarnModule) or node2nix. An example with yarn2nix can be found [here](https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/web-apps/plausible/default.nix#L39). An example with node2nix will follow. To package something outside of nixpkgs, you have alternatives like [npmlock2nix](https://github.com/nix-community/npmlock2nix) or [nix-npm-buildpackage](https://github.com/serokell/nix-npm-buildpackage)
For phoenix projects, inside of Nixpkgs you can either use `fetchYarnDeps` or `buildNpmPackage`. An example with `fetchYarnDeps` can be found [here](https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/pl/plausible/package.nix). An example with `fetchYarnDeps` will follow. To package something outside of nixpkgs, you have alternatives like [npmlock2nix](https://github.com/nix-community/npmlock2nix) or [nix-npm-buildpackage](https://github.com/serokell/nix-npm-buildpackage)
##### mixRelease - backend dependencies (mix) {#mix-release-mix-deps}
+2 -138
View File
@@ -45,17 +45,14 @@ If a particular lock file is present, it is a strong indication of which package
It's better to try to use a Nix tool that understands the lock file.
Using a different tool might give you a hard-to-understand error because different packages have been installed.
An example of problems that could arise can be found [here](https://github.com/NixOS/nixpkgs/pull/126629).
Upstream use npm, but this is an attempt to package it with `yarn2nix` (that uses yarn.lock).
Using a different tool forces you to commit a lock file to the repository.
These files are fairly large, so when packaging for nixpkgs, this approach does not scale well.
Exceptions to this rule are:
- When you encounter one of the bugs from a Nix tool. In each of the tool-specific instructions, known problems will be detailed. If you have a problem with a particular tool, then it's best to try another tool, even if this means you will have to re-create a lock file and commit it to Nixpkgs. In general `yarn2nix` has fewer known problems, and so a simple search in Nixpkgs will reveal many `yarn.lock` files committed.
- When you encounter one of the bugs from a Nix tool. In each of the tool-specific instructions, known problems will be detailed. If you have a problem with a particular tool, then it's best to try another tool, even if this means you will have to re-create a lock file and commit it to Nixpkgs.
- Some lock files contain particular version of a package that has been pulled off npm for some reason. In that case, you can recreate upstream lock (by removing the original and `npm install`, `yarn`, ...) and commit this to nixpkgs.
- The only tool that supports workspaces (a feature of npm that helps manage sub-directories with different package.json from a single top level package.json) is `yarn2nix`. If upstream has workspaces you should try `yarn2nix`.
### Try to use upstream package.json {#javascript-upstream-package-json}
@@ -92,7 +89,7 @@ Exceptions to this rule are:
Each tool has an abstraction to just build the node_modules (dependencies) directory.
You can always use the `stdenv.mkDerivation` with the node_modules to build the package (symlink the node_modules directory and then use the package build command).
The node_modules abstraction can be also used to build some web framework frontends.
For an example of this see how [plausible](https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/web-apps/plausible/default.nix) is built. `mkYarnModules` to make the derivation containing node_modules.
For an example of this see how [plausible](https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/pl/plausible/package.nix) is built.
Then when building the frontend you can just symlink the node_modules directory.
## Tool-specific instructions {#javascript-tool-specific}
@@ -598,139 +595,6 @@ To install the package `yarnInstallHook` uses both `npm` and `yarn` to cleanup p
- `yarnKeepDevDeps`: Disables the removal of devDependencies from `node_modules` before installation.
#### yarn2nix {#javascript-yarn2nix}
> [!WARNING]
> The `yarn2nix` functions have been deprecated in favor of `yarnConfigHook`, `yarnBuildHook` and `yarnInstallHook` (for Yarn v1) and `yarn-berry_*.*` tooling (Yarn v3 and v4). Documentation for `yarn2nix` functions still appears here for the sake of the packages that still use them. See also a tracking issue [#324246](https://github.com/NixOS/nixpkgs/issues/324246).
##### Preparation {#javascript-yarn2nix-preparation}
You will need at least a `yarn.lock` file. If upstream does not have one you need to generate it and reference it in your package definition.
If the downloaded files contain the `package.json` and `yarn.lock` files they can be used like this:
```nix
{
offlineCache = fetchYarnDeps {
yarnLock = src + "/yarn.lock";
hash = "....";
};
}
```
##### mkYarnPackage {#javascript-yarn2nix-mkYarnPackage}
> [!WARNING]
> The `mkYarnPackage` functions have been deprecated in favor of `yarnConfigHook`, `yarnBuildHook` and `yarnInstallHook` (for Yarn v1) and `yarn-berry_*.*` tooling (Yarn v3 and v4). Documentation for `mkYarnPackage` functions still appears here for the sake of the packages that still use them. See also a tracking issue [#324246](https://github.com/NixOS/nixpkgs/issues/324246).
`mkYarnPackage` will by default try to generate a binary. For packages only generating static assets (Svelte, Vue, React, Webpack, ...), you will need to explicitly override the build step with your instructions.
It's important to use the `--offline` flag. For example if you script is `"build": "something"` in `package.json` use:
```nix
{
nativeBuildInputs = [ writableTmpDirAsHomeHook ];
buildPhase = ''
runHook preBuild
yarn --offline build
runHook postBuild
'';
}
```
The `distPhase` is packing the package's dependencies in a tarball using `yarn pack`. You can disable it using:
```nix
{ doDist = false; }
```
The configure phase can sometimes fail because it makes many assumptions that may not always apply. One common override is:
```nix
{
configurePhase = ''
runHook preConfigure
ln -s $node_modules node_modules
runHook postConfigure
'';
}
```
or if you need a writeable node_modules directory:
```nix
{
configurePhase = ''
runHook preConfigure
cp -r $node_modules node_modules
chmod +w node_modules
runHook postConfigure
'';
}
```
##### mkYarnModules {#javascript-yarn2nix-mkYarnModules}
This will generate a derivation including the `node_modules` directory.
If you have to build a derivation for an integrated web framework (Rails, Phoenix, etc.), this is probably the easiest way.
#### Overriding dependency behavior {#javascript-mkYarnPackage-overriding-dependencies}
In the `mkYarnPackage` record the property `pkgConfig` can be used to override packages when you encounter problems building.
For instance, say your package is throwing errors when trying to invoke node-sass:
```
ENOENT: no such file or directory, scandir '/build/source/node_modules/node-sass/vendor'
```
To fix this we will specify different versions of build inputs to use, as well as some post install steps to get the software built the way we want:
```nix
mkYarnPackage rec {
pkgConfig = {
node-sass = {
buildInputs = with final; [
python
libsass
pkg-config
];
postInstall = ''
LIBSASS_EXT=auto yarn --offline run build
rm build/config.gypi
'';
};
};
}
```
##### Pitfalls {#javascript-yarn2nix-pitfalls}
- If version is missing from upstream package.json, yarn will silently install nothing. In that case, you will need to override package.json as shown in the [package.json section](#javascript-upstream-package-json)
- Having trouble with `node-gyp`? Try adding these lines to the `yarnPreBuild` steps:
```nix
{
yarnPreBuild = ''
mkdir -p $HOME/.node-gyp/${nodejs.version}
echo 9 > $HOME/.node-gyp/${nodejs.version}/installVersion
ln -sfv ${nodejs}/include $HOME/.node-gyp/${nodejs.version}
export npm_config_nodedir=${nodejs}
'';
}
```
- The `echo 9` steps comes from this answer: <https://stackoverflow.com/a/49139496>
- Exporting the headers in `npm_config_nodedir` comes from this issue: <https://github.com/nodejs/node-gyp/issues/1191#issuecomment-301243919>
- `offlineCache` (described [above](#javascript-yarn2nix-preparation)) must be specified to avoid [Import From Derivation](#ssec-import-from-derivation) (IFD) when used inside Nixpkgs.
#### Yarn Berry v3/v4 {#javascript-yarn-v3-v4}
Yarn Berry (v3 / v4) have similar formats, they start with blocks like these:
+3 -3
View File
@@ -21,12 +21,12 @@ Here is a simple package example to be called with `tclPackages.callPackage`.
```
{ lib, fetchzip, mkTclDerivation, openssl }:
mkTclDerivation rec {
mkTclDerivation (finalAttrs: {
pname = "tcltls";
version = "1.7.22";
src = fetchzip {
url = "https://core.tcl-lang.org/tcltls/uv/tcltls-${version}.tar.gz";
url = "https://core.tcl-lang.org/tcltls/uv/tcltls-${finalAttrs.version}.tar.gz";
hash = "sha256-TOouWcQc3MNyJtaAGUGbaQoaCWVe6g3BPERct/V65vk=";
};
@@ -43,7 +43,7 @@ mkTclDerivation rec {
license = lib.licenses.tcltk;
platforms = lib.platforms.unix;
};
}
})
```
All Tcl libraries are declared in `pkgs/top-level/tcl-packages.nix` and are defined in `pkgs/development/tcl-modules/`.
+7 -19
View File
@@ -448,7 +448,13 @@
"index.html#overriding-the-generator",
"index.html#javascript-node2nix",
"index.html#javascript-node2nix-preparation",
"index.html#javascript-node2nix-pitfalls"
"index.html#javascript-node2nix-pitfalls",
"index.html#javascript-yarn2nix-mkYarnPackage",
"index.html#javascript-yarn2nix",
"index.html#javascript-yarn2nix-preparation",
"index.html#javascript-yarn2nix-mkYarnModules",
"index.html#javascript-mkYarnPackage-overriding-dependencies",
"index.html#javascript-yarn2nix-pitfalls"
],
"sec-nixpkgs-release-26.05-lib": [
"release-notes.html#sec-nixpkgs-release-26.05-lib"
@@ -3720,24 +3726,6 @@
"javascript-yarninstallhook": [
"index.html#javascript-yarninstallhook"
],
"javascript-yarn2nix": [
"index.html#javascript-yarn2nix"
],
"javascript-yarn2nix-preparation": [
"index.html#javascript-yarn2nix-preparation"
],
"javascript-yarn2nix-mkYarnPackage": [
"index.html#javascript-yarn2nix-mkYarnPackage"
],
"javascript-yarn2nix-mkYarnModules": [
"index.html#javascript-yarn2nix-mkYarnModules"
],
"javascript-mkYarnPackage-overriding-dependencies": [
"index.html#javascript-mkYarnPackage-overriding-dependencies"
],
"javascript-yarn2nix-pitfalls": [
"index.html#javascript-yarn2nix-pitfalls"
],
"javascript-yarnBerry-missing-hashes": [
"index.html#javascript-yarnBerry-missing-hashes"
],
+6
View File
@@ -87,6 +87,8 @@
adding `pkg-config`, `xfce4-dev-tools`, and `wrapGAppsHook3` to your `nativeBuildInputs` and
`--enable-maintainer-mode` to your `configureFlags`.
- `yarn2nix`/`yarn2nix-moretea` and its tooling(`mkYarnPackage`, `mkYarnModules`, and `fixup_yarn_lock`) have been removed as they were unmaintainable in nixpkgs. If you want to build with Yarn V1 going forward, use the hooks instead(`yarnBuildHook`, `yarnConfigHook`, and `yarnInstallHook`). See the yarn v1 documentation in the nixpkgs manual for more details.
- `albert` has been updated to the version 34.0.5. This release redesigns the query system to support stateful asynchronous handlers and infinite scrolling, and adds internationalized tokenization.
This update introduces several breaking changes: the Python plugin interface is now v5.0, the `PATH` plugin has been renamed to `Commandline`, and the QStylesheets-based widgets box model frontend has been removed.
For more information read the [changelog for 34.0.0](https://albertlauncher.github.io/2026/01/19/albert-v34.0.0-released/).
@@ -135,6 +137,8 @@
- `pulsar` has finally migrated from electron v12 to v30, backup `~/.pulsar` before upgrading. See [Pulsar on Electron 30: what it means for you](https://blog.pulsar-edit.dev/posts/20251202-savetheclocktower-pulsar-on-electron-30/).
- `mactracker` has been updated to major version 8, which now [requires macOS 11 Big Sur or later](https://mactracker.ca/releasenotes-mac.html#:~:text=System%20requirements%20updated%20to%20macOS%2011%20Big%20Sur%20and%20later). The previous version supported Mac OS X 10.6.8 or later.
- `bartender` has been updated to major version 6. This removes support for MacOS Sonoma (and adds support for Tahoe). For more information, see [the release notes](https://www.macbartender.com/Bartender6/release_notes/) or [the Bartender 6 support page](https://www.macbartender.com/Bartender6/support/).
- `lima` has been updated from `1.x` to `2.x`. This major update includes several breaking changes, such as `/tmp/lima` no longer being mounted by default.
@@ -282,6 +286,8 @@
- The `libcxxhardeningextensive` hardening flag has been **disabled** by default. Enabling it by default in 25.11 was unintentional and may have had a negative effect on performance in some cases. `libcxxhardeningfast` remains enabled by default.
- The packages `ibtool`, `actool` and `re-plistbuddy` have been added, providing reimplementations of the corresponding proprietary Apple tools. They are more compatible with the originals than the previously existing `xcbuild` package, and should enable more darwin software to be built from source.
- Switch inhibitors were introduced, which add a pre-switch check that compares a list of strings between the previous and the new generation, and refuses to switch into the new generation when there is a difference between the two lists. This allows to avoid switching into a system when for instance the systemd version changed by adding `config.systemd.package.version` to the switch inhibitors for your system. You can still forcefully switch into any generation by setting `NIXOS_NO_CHECK=1`.
- GNU Taler has been updated to version 1.3.
+51 -5
View File
@@ -37,17 +37,63 @@ rec {
);
/**
This is the entrypoint for the portable part of modular services.
Entrypoint for integrating modular services into a containing module system.
It provides the various options that are consumed by service manager implementations.
Each containing system (NixOS, ...) calls `configure` to
obtain a `serviceSubmodule` type for its services option. The returned submodule
includes the portable service base and any service-manager-specific modules
passed via `extraRootModules`.
**Implementing for a new system** (e.g. home-manager, nix-darwin):
```nix
# darwin/modules/services/system.nix
{ lib, config, pkgs, ... }:
let
portable-lib = import <nixpkgs/lib/services/lib.nix> { inherit lib; };
modularServiceConfiguration = portable-lib.configure {
serviceManagerPkgs = pkgs;
extraRootModules = [
./launchd-service.nix # launchd-specific options (plist generation, etc.)
];
};
in
{
options.services = lib.mkOption {
type = lib.types.attrsOf modularServiceConfiguration.serviceSubmodule;
default = { };
};
config = {
# Convert service tree -> launchd plists, assertions, etc.
# (analogous to how NixOS converts to systemd units)
launchd.agents = ...;
assertions = ...;
warnings = ...;
};
}
```
lib.services.configure :: AttrSet -> { serviceSubmodule :: SubmoduleType }
# Inputs
`serviceManagerPkgs`: A Nixpkgs instance which will be used for built-in logic such as converting `configData.<path>.text` to a store path.
`serviceManagerPkgs`
`extraRootModules`: Modules to be loaded into the "root" service submodule, but not into its sub-`services`. That's the modules' own responsibility.
: 1\. A Nixpkgs instance used for built-in logic such as converting
`configData.<path>.text` to a store path.
`extraRootSpecialArgs`: Fixed module arguments that are provided in a similar manner to `extraRootModules`.
`extraRootModules`
: 2\. Modules to be loaded into the "root" service submodule, but not
into its sub-`services`. That's the modules' own responsibility.
Typically contains service-manager-specific option modules
(e.g. systemd unit options, launchd plist options).
`extraRootSpecialArgs`
: 3\. Fixed module arguments provided alongside `extraRootModules`.
# Output
+30
View File
@@ -145,6 +145,12 @@
githubId = 67933444;
keys = [ { fingerprint = "B39E B98E 8860 DAFB 0567 0073 A614 B7D2 5134 987A"; } ];
};
_0xgsvs = {
email = "venkat.subrahmanyam.34@gmail.com";
name = "0xgsvs";
github = "0xgsvs";
githubId = 161702876;
};
_0xMillyByte = {
email = "emilia.daelman@gmail.com";
name = "Emilia Daelman";
@@ -4849,6 +4855,12 @@
github = "CHN-beta";
githubId = 35858462;
};
choco98 = {
name = "Conor Boyle";
email = "conorboyle07@protonmail.com";
github = "chocoblocko9";
githubId = 91826251;
};
ChocolateLoverRaj = {
email = "paranjperajas@gmail.com";
github = "ChocolateLoverRaj";
@@ -5449,6 +5461,12 @@
name = "Simon Hauser";
githubId = 15233006;
};
connor-grady = {
email = "connor.grady@gmail.com";
github = "connor-grady";
githubId = 50903811;
name = "Connor Grady";
};
connorbaker = {
email = "ConnorBaker01@gmail.com";
matrix = "@connorbaker:matrix.org";
@@ -11662,6 +11680,11 @@
github = "IsotoxalDev";
githubId = 62714538;
};
issai = {
name = "Issai";
github = "TheLimifiedLime";
githubId = 69121493;
};
istoph = {
email = "chr@istoph.de";
name = "Christoph Hüffelmann";
@@ -14460,6 +14483,12 @@
githubId = 913109;
name = "Emil Fresk";
};
korkutkardes7 = {
email = "korkutkardes7@hotmail.com";
github = "KorkutKardes7";
githubId = 148012191;
name = "Korkut Kardeşseven";
};
kornholi = {
email = "kornholijo@gmail.com";
github = "kornholi";
@@ -24646,6 +24675,7 @@
name = "Greg Pfeil";
};
sempiternal-aurora = {
email = "myrialsarvay@gmail.com";
github = "sempiternal-aurora";
githubId = 78790545;
name = "Myria Sarvay";
@@ -139,7 +139,7 @@
- [`pay-respects`](https://codeberg.org/iff/pay-respects), a terminal command correction program, alternative to `thefuck`, written in Rust. Available as [programs.pay-respects](options.html#opt-programs.pay-respects).
- [Radicle](https://radicle.xyz), an open source, peer-to-peer code collaboration stack built on Git. Available as [services.radicle](#opt-services.radicle.enable).
- [Radicle](https://radicle.dev), an open source, peer-to-peer code collaboration stack built on Git. Available as [services.radicle](#opt-services.radicle.enable).
- [Ordinal](https://github.com/snu-sf/Ordinal), A library for ordinal numbers in the Coq proof assistant.
@@ -149,9 +149,9 @@
- [qBittorrent](https://www.qbittorrent.org/), a bittorrent client programmed in C++ / Qt that uses libtorrent by Arvid Norberg. Available as [services.qbittorrent](#opt-services.qbittorrent.enable).
- [radicle-ci-broker](https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:zwTxygwuz5LDGBq255RA2CbNGrz8), a tool for running CI for repositories in the local [Radicle](https://radicle.xyz/) node. Available as [services.radicle.ci.broker.enable](#opt-services.radicle.ci.broker.enable).
- [radicle-ci-broker](https://radicle.network/nodes/seed.radicle.dev/rad:zwTxygwuz5LDGBq255RA2CbNGrz8), a tool for running CI for repositories in the local [Radicle](https://radicle.dev/) node. Available as [services.radicle.ci.broker.enable](#opt-services.radicle.ci.broker.enable).
- [radicle-native-ci](https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3qg5TKmN83afz2fj9z3fQjU8vaYE), an adapter for the [Radicle CI broker](https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:zwTxygwuz5LDGBq255RA2CbNGrz8), for performing CI runs locally. Available as [services.radicle.ci.adapters.native](#opt-services.radicle.ci.adapters.native.instances).
- [radicle-native-ci](https://radicle.network/nodes/seed.radicle.dev/rad:z3qg5TKmN83afz2fj9z3fQjU8vaYE), an adapter for the [Radicle CI broker](https://radicle.network/nodes/seed.radicle.dev/rad:zwTxygwuz5LDGBq255RA2CbNGrz8), for performing CI runs locally. Available as [services.radicle.ci.adapters.native](#opt-services.radicle.ci.adapters.native.instances).
- [rauc](https://rauc.io/) (the Robust Auto-Update Controller), a daemon that allows reliable and secure software updates in embedded Linux systems. Available at [services.rauc](#opt-services.rauc.enable).
@@ -57,6 +57,8 @@
- [OpenThread Border Router](https://openthread.io/), a Thread border router for POSIX-based platforms that bridges Thread mesh networks to IP networks. Available as [services.openthread-border-router](#opt-services.openthread-border-router.enable).
- [Atuin](https://atuin.sh), magical shell history — sync, search and backup your terminal history. Available as [programs.atuin](#opt-programs.atuin.enable).
- [Meshtastic](https://meshtastic.org), an open-source, off-grid, decentralised mesh network
designed to run on affordable, low-power devices. Available as [services.meshtasticd]
(#opt-services.meshtasticd.enable).
@@ -127,6 +129,8 @@
- [RSSHub](https://github.com/DIYgod/RSSHub), a service to convert many sources into rss. Available as `services.rsshub`.
- [ReFrame](https://github.com/AlynxZhou/reframe), a DRM/KMS based remote desktop for Linux that supports Wayland/NVIDIA/headless/login.
- [Komodo Periphery](https://github.com/moghtech/komodo), a multi-server Docker and Git deployment agent by Komodo. Available as [services.komodo-periphery](#opt-services.komodo-periphery.enable).
- [Shoko](https://shokoanime.com), an anime management system. Available as [services.shoko](#opt-services.shoko.enable).
+15
View File
@@ -278,6 +278,21 @@ rec {
attr ? ${name} && !(hasPrefix "@" attr.${name})
) "Systemd ${group} field `${name}' is not a systemd credential";
assertRouteMetricOrTriple =
name: group: attr:
let
isMetric = n: 0 <= n && 4294967295 >= n;
parts = splitString ":" attr.${name};
partsValid =
length parts == 3 && all (p: (match "[0-9]+" p) != null && isMetric (toIntBase10 p)) parts;
valid = (isInt attr.${name} && isMetric attr.${name}) || partsValid;
in
optional (attr ? ${name} && !valid) (
"Systemd ${group} field `${name}' must either be an integer in the range [0,4294967295]"
+ " or a string containing three integers separated with `:`"
);
checkUnitConfig =
group: checks: attrs:
let
+3
View File
@@ -1,5 +1,6 @@
{
lib,
stdenv,
buildPythonApplication,
colorama,
@@ -59,6 +60,8 @@ buildPythonApplication {
socat
util-linux
vde2
]
++ lib.optionals stdenv.isLinux [
vhost-device-vsock
]
++ lib.optionals enableNspawn [
+3 -3
View File
@@ -1,7 +1,7 @@
{
config,
lib,
pkgs,
hostPkgs,
...
}:
let
@@ -75,9 +75,9 @@ in
) (lib.attrValues config.nodes ++ lib.attrValues config.containers)
);
global_timeout = config.globalTimeout;
test_script = pkgs.writeText "test-script" config.testScriptString;
test_script = hostPkgs.writeText "test-script" config.testScriptString;
enable_ssh_backdoor = config.sshBackdoor.enable;
};
driverConfigurationFile = pkgs.writers.writeJSON "driverConfiguration.json" config.driverConfiguration;
driverConfigurationFile = hostPkgs.writers.writeJSON "driverConfiguration.json" config.driverConfiguration;
};
}
+3 -1
View File
@@ -9,6 +9,8 @@ let
inherit (config) sshBackdoor;
inherit (hostPkgs.stdenv.hostPlatform) isLinux;
# Reifies and correctly wraps the python test driver for
# the respective qemu version and with or without ocr support
testDriver = config.pythonTestDriverPackage.override {
@@ -251,7 +253,7 @@ in
# depending on whether debugging is enabled.
#
# If needed, this can still be turned off.
virtualisation.qemu.enableSharedMemory = lib.mkDefault true;
virtualisation.qemu.enableSharedMemory = lib.mkDefault isLinux;
assertions = [
{
+24
View File
@@ -0,0 +1,24 @@
{ lib, config, ... }:
let
facterLib = import ./lib.nix lib;
inherit (config.hardware.facter) report;
isBaremetal = config.hardware.facter.detected.virtualisation.none.enable;
hasAmdCpu = facterLib.hasAmdCpu report;
kver = config.boot.kernelPackages.kernel.version;
in
lib.mkIf (config.hardware.facter.enable && isBaremetal && hasAmdCpu) {
boot = lib.mkMerge [
(lib.mkIf ((lib.versionAtLeast kver "5.17") && (lib.versionOlder kver "6.1")) {
kernelParams = [ "initcall_blacklist=acpi_cpufreq_init" ];
kernelModules = [ "amd-pstate" ];
})
(lib.mkIf ((lib.versionAtLeast kver "6.1") && (lib.versionOlder kver "6.3")) {
kernelParams = [ "amd_pstate=passive" ];
})
(lib.mkIf (lib.versionAtLeast kver "6.3") {
kernelParams = [ "amd_pstate=active" ];
})
];
}
@@ -5,6 +5,7 @@
}:
{
imports = [
./amd-cpu.nix
./boot.nix
./bluetooth.nix
./camera
+14 -5
View File
@@ -6,11 +6,10 @@
}:
let
cfg = config.hardware.openrazer;
kernelPackages = config.boot.kernelPackages;
toPyBoolStr = b: if b then "True" else "False";
daemonExe = "${pkgs.openrazer-daemon}/bin/openrazer-daemon --config ${daemonConfFile}";
daemonExe = "${cfg.packages.daemon}/bin/openrazer-daemon --config ${daemonConfFile}";
daemonConfFile = pkgs.writeTextFile {
name = "razer.conf";
@@ -132,6 +131,14 @@ in
can start and interact with the OpenRazer userspace daemon.
'';
};
packages = {
kernel = lib.mkPackageOption pkgs "openrazer kernel" { } // {
default = config.boot.kernelPackages.openrazer;
defaultText = lib.literalExpression "config.boot.kernelPackages.openrazer";
};
daemon = lib.mkPackageOption pkgs [ "python3Packages" "openrazer-daemon" ] { };
};
};
};
@@ -143,14 +150,16 @@ in
];
config = lib.mkIf cfg.enable {
boot.extraModulePackages = [ kernelPackages.openrazer ];
boot.extraModulePackages = [ cfg.packages.kernel ];
boot.kernelModules = drivers;
# Makes the man pages available so you can successfully run
# > systemctl --user help openrazer-daemon
environment.systemPackages = [ pkgs.python3Packages.openrazer-daemon.man ];
environment.systemPackages = lib.mkIf (cfg.packages.daemon ? man) [
cfg.packages.daemon.man
];
services.udev.packages = [ kernelPackages.openrazer ];
services.udev.packages = [ cfg.packages.kernel ];
services.dbus.packages = [ dbusServiceFile ];
# A user must be a member of the openrazer group in order to start
+1 -1
View File
@@ -92,7 +92,7 @@ in
-i ${channelSources} --quiet --option build-use-substitutes false \
${lib.optionalString config.boot.initrd.systemd.enable "--option sandbox false"} # There's an issue with pivot_root
mkdir -m 0700 -p /root/.nix-defexpr
ln -s /nix/var/nix/profiles/per-user/root/channels /root/.nix-defexpr/channels
ln -sfvT /nix/var/nix/profiles/per-user/root/channels /root/.nix-defexpr/channels
mkdir -m 0755 -p /var/lib/nixos
touch /var/lib/nixos/did-channel-init
fi
+2
View File
@@ -168,6 +168,7 @@
./programs/appimage.nix
./programs/arp-scan.nix
./programs/atop.nix
./programs/atuin.nix
./programs/ausweisapp.nix
./programs/autoenv.nix
./programs/autojump.nix
@@ -691,6 +692,7 @@
./services/hardware/nvidia-optimus.nix
./services/hardware/openrgb.nix
./services/hardware/pcscd.nix
./services/hardware/pdudaemon.nix
./services/hardware/pid-fan-controller.nix
./services/hardware/pommed.nix
./services/hardware/power-profiles-daemon.nix
+195
View File
@@ -0,0 +1,195 @@
{
config,
lib,
pkgs,
...
}:
let
inherit (lib) escapeShellArgs;
cfg = config.programs.atuin;
tomlFormat = pkgs.formats.toml { };
settingsFile = tomlFormat.generate "atuin-config" cfg.settings;
in
{
options.programs.atuin = {
enable = lib.mkEnableOption "atuin";
package = lib.mkPackageOption pkgs "atuin" { };
enableBashIntegration = lib.mkEnableOption "Bash integration" // {
default = config.programs.bash.enable;
defaultText = lib.literalExpression "config.programs.bash.enable";
};
enableZshIntegration = lib.mkEnableOption "Zsh integration" // {
default = config.programs.zsh.enable;
defaultText = lib.literalExpression "config.programs.zsh.enable";
};
enableFishIntegration = lib.mkEnableOption "Fish integration" // {
default = config.programs.fish.enable;
defaultText = lib.literalExpression "config.programs.fish.enable";
};
flags = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
example = [
"--disable-up-arrow"
"--disable-ctrl-r"
];
description = ''
Flags to append to the shell hook.
'';
};
settings = lib.mkOption {
type = tomlFormat.type;
default = { };
example = lib.literalExpression ''
{
auto_sync = true;
sync_frequency = "5m";
sync_address = "https://api.atuin.sh";
search_mode = "prefix";
}
'';
description = ''
Configuration written to {file}`/etc/atuin/config.toml`.
See <https://docs.atuin.sh/configuration/config/> for the full list
of options.
'';
};
daemon = {
enable = lib.mkEnableOption "the Atuin daemon" // {
default = pkgs.stdenv.hostPlatform.isLinux;
defaultText = lib.literalExpression "pkgs.stdenv.hostPlatform.isLinux";
};
logLevel = lib.mkOption {
type = lib.types.enum [
"trace"
"debug"
"info"
"warn"
"error"
];
default = "info";
description = ''
Log level for the Atuin daemon.
'';
};
};
themes = lib.mkOption {
type = lib.types.attrsOf (
lib.types.oneOf [
tomlFormat.type
lib.types.path
lib.types.lines
]
);
description = ''
Each theme is written to
{file}`/etc/atuin/themes/theme-name.toml`
where the name of each attribute is the theme-name
See <https://docs.atuin.sh/guide/theming/> for the full list
of options.
'';
default = { };
example = lib.literalExpression ''
{
"my-theme" = {
theme.name = "My Theme";
colors = {
Base = "#000000";
Title = "#FFFFFF";
};
};
}
'';
};
};
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
# Atuin only reads from ATUIN_CONFIG_DIR or XDG_CONFIG_HOME, not XDG_CONFIG_DIRS,
# so we must set ATUIN_CONFIG_DIR to point to the system-wide config location.
environment.variables.ATUIN_CONFIG_DIR = "/etc/atuin";
environment.etc = lib.mkMerge [
(lib.mkIf (cfg.settings != { }) {
"atuin/config.toml".source = settingsFile;
})
(lib.mkIf (cfg.themes != { }) (
builtins.mapAttrs' (
name: theme:
lib.nameValuePair "atuin/themes/${name}.toml" {
source =
if builtins.isString theme then
pkgs.writeText "atuin-theme-${name}" theme
else if builtins.isPath theme || lib.isStorePath theme then
theme
else
tomlFormat.generate "atuin-theme-${name}" theme;
}
) cfg.themes
))
];
programs.bash.interactiveShellInit = lib.mkIf cfg.enableBashIntegration ''
if [[ :$SHELLOPTS: =~ :(vi|emacs): ]]; then
eval "$(${lib.getExe cfg.package} init bash ${escapeShellArgs cfg.flags})"
fi
'';
programs.zsh.interactiveShellInit = lib.mkIf cfg.enableZshIntegration ''
if [[ $options[zle] = on ]]; then
eval "$(${lib.getExe cfg.package} init zsh ${escapeShellArgs cfg.flags})"
fi
'';
programs.fish.interactiveShellInit = lib.mkIf cfg.enableFishIntegration ''
${lib.getExe cfg.package} init fish ${escapeShellArgs cfg.flags} | source
'';
systemd = lib.mkIf (cfg.daemon.enable && pkgs.stdenv.hostPlatform.isLinux) {
user.services.atuin-daemon = {
unitConfig = {
Description = "Atuin daemon";
Requires = [ "atuin-daemon.socket" ];
};
serviceConfig = {
ExecStart = "${lib.getExe cfg.package} daemon start";
Environment = [ "ATUIN_LOG=${cfg.daemon.logLevel}" ];
Restart = "on-failure";
RestartSteps = 3;
RestartMaxDelaySec = 6;
};
};
user.sockets.atuin-daemon = {
unitConfig = {
Description = "Atuin daemon socket";
};
socketConfig = {
ListenStream = "%t/atuin/atuin.sock";
SocketMode = "0640";
DirectoryMode = "0740";
RemoveOnStop = true;
};
wantedBy = [ "sockets.target" ];
};
};
};
meta.maintainers = cfg.package.meta.maintainers;
}
+69 -56
View File
@@ -143,68 +143,81 @@ in
};
};
config = lib.mkIf (cfg.enable && cfg.stateful) {
systemd.services = {
dhparams-init = {
description = "Clean Up Old Diffie-Hellman Parameters";
config = lib.mkMerge [
(lib.mkIf cfg.enable {
warnings = [
''
The `security.dhparam` module is deprecated and scheduled for removal in NixOS 26.11.
Generating your own params has been shown to be problematic in RFC 7919 (2016).
# Clean up even when no DH params is set
wantedBy = [ "multi-user.target" ];
Remove any uses of DHE and migrate to ECDHE (RFC 8422, 2018) and
Hybrid PQ (draft-ietf-tls-ecdhe-mlkem, 2026) key exchange algorithms.
''
];
})
(lib.mkIf (cfg.enable && cfg.stateful) {
systemd.services = {
dhparams-init = {
description = "Clean Up Old Diffie-Hellman Parameters";
serviceConfig.RemainAfterExit = true;
serviceConfig.Type = "oneshot";
# Clean up even when no DH params is set
wantedBy = [ "multi-user.target" ];
script = ''
if [ ! -d ${cfg.path} ]; then
mkdir -p ${cfg.path}
fi
serviceConfig.RemainAfterExit = true;
serviceConfig.Type = "oneshot";
# Remove old dhparams
for file in ${cfg.path}/*; do
if [ ! -f "$file" ]; then
continue
script = ''
if [ ! -d ${cfg.path} ]; then
mkdir -p ${cfg.path}
fi
${lib.concatStrings (
lib.mapAttrsToList (
name:
{ bits, path, ... }:
''
if [ "$file" = ${lib.escapeShellArg path} ] && \
${pkgs.openssl}/bin/openssl dhparam -in "$file" -text \
| head -n 1 | grep "(${toString bits} bit)" > /dev/null; then
continue
fi
''
) cfg.params
)}
rm "$file"
done
# TODO: Ideally this would be removing the *former* cfg.path, though
# this does not seem really important as changes to it are quite
# unlikely
rmdir --ignore-fail-on-non-empty ${cfg.path}
'';
};
}
// lib.mapAttrs' (
name:
{ bits, path, ... }:
lib.nameValuePair "dhparams-gen-${name}" {
description = "Generate Diffie-Hellman Parameters for ${name}";
after = [ "dhparams-init.service" ];
before = [ "${name}.service" ];
requiredBy = [ "${name}.service" ];
wantedBy = [ "multi-user.target" ];
unitConfig.ConditionPathExists = "!${path}";
serviceConfig.Type = "oneshot";
script = ''
mkdir -p ${lib.escapeShellArg cfg.path}
${pkgs.openssl}/bin/openssl dhparam -out ${lib.escapeShellArg path} \
${toString bits}
'';
# Remove old dhparams
for file in ${cfg.path}/*; do
if [ ! -f "$file" ]; then
continue
fi
${lib.concatStrings (
lib.mapAttrsToList (
name:
{ bits, path, ... }:
''
if [ "$file" = ${lib.escapeShellArg path} ] && \
${pkgs.openssl}/bin/openssl dhparam -in "$file" -text \
| head -n 1 | grep "(${toString bits} bit)" > /dev/null; then
continue
fi
''
) cfg.params
)}
rm "$file"
done
# TODO: Ideally this would be removing the *former* cfg.path, though
# this does not seem really important as changes to it are quite
# unlikely
rmdir --ignore-fail-on-non-empty ${cfg.path}
'';
};
}
) cfg.params;
};
// lib.mapAttrs' (
name:
{ bits, path, ... }:
lib.nameValuePair "dhparams-gen-${name}" {
description = "Generate Diffie-Hellman Parameters for ${name}";
after = [ "dhparams-init.service" ];
before = [ "${name}.service" ];
requiredBy = [ "${name}.service" ];
wantedBy = [ "multi-user.target" ];
unitConfig.ConditionPathExists = "!${path}";
serviceConfig.Type = "oneshot";
script = ''
mkdir -p ${lib.escapeShellArg cfg.path}
${pkgs.openssl}/bin/openssl dhparam -out ${lib.escapeShellArg path} \
${toString bits}
'';
}
) cfg.params;
})
];
}
+2 -2
View File
@@ -47,7 +47,7 @@ in
includeFileList = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
example = /path/to/fileList.txt;
example = "/path/to/fileList.txt";
description = ''
File containing newline-separated list of paths to include into the
backups. See the FILE SELECTION section in {manpage}`duplicity(1)` for
@@ -58,7 +58,7 @@ in
excludeFileList = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
example = /path/to/fileList.txt;
example = "/path/to/fileList.txt";
description = ''
File containing newline-separated list of paths to exclude into the
backups. See the FILE SELECTION section in {manpage}`duplicity(1)` for
@@ -360,7 +360,7 @@ in
${lib.optionalString haveLocalDB ''
if ! [ -e ${baseDir}/.db-created ]; then
runuser -u ${config.services.postgresql.superUser} ${config.services.postgresql.package}/bin/createuser hydra
runuser -u ${config.services.postgresql.superUser} ${config.services.postgresql.package}/bin/createdb -- -O hydra hydra
runuser -u ${config.services.postgresql.superUser} ${config.services.postgresql.package}/bin/createdb -O hydra hydra
touch ${baseDir}/.db-created
fi
echo "create extension if not exists pg_trgm" | runuser -u ${config.services.postgresql.superUser} -- ${config.services.postgresql.package}/bin/psql hydra
@@ -81,7 +81,7 @@ in
};
description = ''
Configuration of radicle-native-ci.
See <https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3qg5TKmN83afz2fj9z3fQjU8vaYE#configuration> for more information.
See <https://radicle.network/nodes/seed.radicle.dev/rad:z3qg5TKmN83afz2fj9z3fQjU8vaYE#configuration> for more information.
'';
default = { };
};
@@ -135,7 +135,7 @@ in
};
description = ''
Configuration of radicle-ci-broker.
See <https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:zwTxygwuz5LDGBq255RA2CbNGrz8/tree/doc/userguide.md#configuration> for more information.
See <https://radicle.network/nodes/seed.radicle.dev/rad:zwTxygwuz5LDGBq255RA2CbNGrz8/tree/doc/userguide.md#configuration> for more information.
'';
default = { };
example = lib.literalExpression ''
@@ -73,7 +73,9 @@ in
extraGroups = [ "video" ];
};
# Required for authentication
security.pam.services.cosmic-greeter = { };
security.pam.services.cosmic-greeter = {
allowNullPassword = true;
};
hardware.graphics.enable = true;
services.accounts-daemon.enable = true;
@@ -0,0 +1,146 @@
{
config,
pkgs,
lib,
...
}:
let
cfg = config.services.pdudaemon;
configFile = pkgs.writeText "pdudaemon.conf" (
lib.generators.toJSON { } {
daemon = {
hostname = cfg.bindAddress;
port = cfg.port;
logging_level = cfg.logLevel;
listener = cfg.listener;
};
pdus = cfg.pdus;
}
);
in
{
meta = {
maintainers = with lib.maintainers; [
aiyion
emantor
];
};
options = {
services.pdudaemon = {
enable = lib.mkEnableOption "PDUDaemon";
package = lib.mkPackageOption pkgs "pdudaemon" { };
bindAddress = lib.mkOption {
default = "0.0.0.0";
type = lib.types.str;
description = "Bind address for the PDUDaemon.";
};
port = lib.mkOption {
default = 16421;
type = lib.types.port;
description = "Port to bind to.";
};
openFirewall = lib.mkOption {
default = false;
type = lib.types.bool;
description = ''
Whether to automatically open the PDUDaemon listen port in the firewall.
'';
};
listener = lib.mkOption {
default = "http";
type = lib.types.enum [
"http"
"tcp"
];
description = "Which kind of listener to provide.";
};
logLevel = lib.mkOption {
default = "error";
type = lib.types.enum [
"debug"
"info"
"warning"
"error"
];
description = "PDUDaemon log level.";
};
pdus = lib.mkOption {
type = with lib.types; attrsOf anything;
default = { };
description = ''
Structural pdus section of PDUDaemon's pdudaemon.conf.
Refer to <https://github.com/pdudaemon/pdudaemon/blob/main/share/pdudaemon.conf>
for more examples.
'';
example = lib.literalExpression ''
{
cbs350-poe-switch = {
driver = "snmpv1";
community = "private";
oid = ".1.3.6.1.2.1.105.1.1.1.3.1.*;
onsetting = 1;
offsetting = 2;
};
energenie = {
driver = "EG-PMS";
device = "aa:bb:cc:xx:yy";
};
local = {
driver = "localcmdline";
};
};
'';
};
};
};
config = lib.mkIf cfg.enable {
networking.firewall.allowedTCPPorts = lib.mkIf cfg.openFirewall [ cfg.port ];
systemd.services.pdudaemon = {
after = [ "network-online.target" ];
description = "Control and Queueing daemon for PDUs";
serviceConfig = {
ExecStart = "${lib.getExe cfg.package} --conf ${configFile}";
Type = "simple";
DynamicUser = "yes";
StateDirectory = "pdudaemon";
ProtectHome = true;
Restart = "on-failure";
CapabilityBoundingSet = "";
PrivateDevices = true;
ProtectClock = true;
ProtectKernelLogs = true;
ProtectControlGroups = true;
ProtectKernelModules = true;
SystemCallArchitectures = "native";
MemoryDenyWriteExecute = true;
RestrictNamespaces = true;
ProtectHostname = true;
LockPersonality = true;
ProtectKernelTunables = true;
RestrictRealtime = true;
ProtectProc = "invisible";
ProcSubset = "pid";
PrivateUsers = true;
SystemCallFilter = [
"@system-service"
"~@privileged"
"~@resources"
];
};
wantedBy = [ "multi-user.target" ];
wants = [ "network-online.target" ];
};
};
}
@@ -41,7 +41,7 @@ in
environmentFile = mkOption {
type = nullOr path;
default = null;
example = /run/keys/evcc;
example = "/run/keys/evcc";
description = ''
File with environment variables to pass into the runtime environment.
+2 -2
View File
@@ -329,8 +329,8 @@ in
This option does not delete accounts which are not (anymore) listed.
'';
example = {
"user1@localhost".passwordFile = /secrets/user1-localhost;
"user2@localhost".passwordFile = /secrets/user2-localhost;
"user1@localhost".passwordFile = "/secrets/user1-localhost";
"user2@localhost".passwordFile = "/secrets/user2-localhost";
};
type = lib.types.attrsOf (
lib.types.submodule {
@@ -81,7 +81,6 @@ in
description = ''
Addresses (IPv4 or IPv6) to listen on for connections by the reverse proxy/tls terminator.
If set to `null`, tuwunel will listen on IPv4 and IPv6 localhost.
Must be `null` if `unix_socket_path` is set.
'';
};
global.port = lib.mkOption {
@@ -167,14 +166,6 @@ in
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = !(cfg.settings ? global.unix_socket_path) || !(cfg.settings ? global.address);
message = ''
In `services.matrix-tuwunel.settings.global`, `unix_socket_path` and `address` cannot be set at the
same time.
Leave one of the two options unset or explicitly set them to `null`.
'';
}
{
assertion = cfg.user != defaultUser -> config ? users.users.${cfg.user};
message = "If `services.matrix-tuwunel.user` is changed, the configured user must already exist.";
+1 -1
View File
@@ -56,7 +56,7 @@ in
'';
description = ''
Extra environment variables for Open-WebUI.
For more details see <https://docs.openwebui.com/getting-started/env-configuration>
For more details see <https://docs.openwebui.com/getting-started>
'';
};
+2 -2
View File
@@ -41,7 +41,7 @@ let
pkgs.gitMinimal
];
documentation = [
"https://docs.radicle.xyz/guides/seeder"
"https://radicle.dev/guides/seeder"
];
after = [
"network.target"
@@ -225,7 +225,7 @@ in
};
settings = lib.mkOption {
description = ''
See <https://app.radicle.xyz/nodes/seed.radicle.garden/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/radicle/src/node/config.rs#L275>
See <https://radicle.network/nodes/iris.radicle.network/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/radicle/src/node/config.rs#L275>
'';
default = { };
example = lib.literalExpression ''
@@ -2091,7 +2091,7 @@ in
set -o errexit -o pipefail -o nounset -o errtrace
shopt -s inherit_errexit
exec ${cfg.package}/bin/grafana server -homepath ${cfg.dataDir} -config ${configFile}
exec ${lib.getExe cfg.package} server -homepath ${cfg.dataDir} -config ${configFile}
'';
serviceConfig = {
WorkingDirectory = cfg.dataDir;
@@ -374,7 +374,7 @@ let
after = [ "network.target" ];
serviceConfig.Restart = mkDefault "always";
serviceConfig.PrivateTmp = mkDefault true;
serviceConfig.WorkingDirectory = mkDefault /tmp;
serviceConfig.WorkingDirectory = mkDefault "/tmp";
serviceConfig.DynamicUser = mkDefault enableDynamicUser;
serviceConfig.User = mkDefault conf.user;
serviceConfig.Group = conf.group;
@@ -23,13 +23,10 @@ let
if (builtins.isPath file) || (lib.isStorePath file) then
file
else
(
lib.warn ''
${logPrefix}: configuration file "${file}" is being copied to the nix-store.
If you would like to avoid that, please set enableConfigCheck to false.
'' /.
+ file
);
(lib.warn ''
${logPrefix}: configuration file "${file}" is being copied to the nix-store.
If you would like to avoid that, please set enableConfigCheck to false.
'' (builtins.toFile (builtins.baseNameOf file) (builtins.readFile file)));
checkConfigLocation =
file:
if lib.hasPrefix "/tmp/" file then
@@ -27,7 +27,7 @@ in
};
ecoflowAccessKeyFile = mkOption {
type = types.path;
default = /etc/ecoflow-access-key;
default = "/etc/ecoflow-access-key";
description = ''
Path to the file with your personal api access string from the Ecoflow development website <https://developer-eu.ecoflow.com>.
Do to share or commit your plaintext scecrets to a public repo use: agenix or soaps.
@@ -35,7 +35,7 @@ in
};
ecoflowSecretKeyFile = mkOption {
type = types.path;
default = /etc/ecoflow-secret-key;
default = "/etc/ecoflow-secret-key";
description = ''
Path to the file with your personal api secret string from the Ecoflow development website <https://developer-eu.ecoflow.com>.
Do to share or commit your plaintext scecrets to a public repo use: agenix or soaps.
@@ -43,7 +43,7 @@ in
};
ecoflowEmailFile = mkOption {
type = types.path;
default = /etc/ecoflow-email;
default = "/etc/ecoflow-email";
description = ''
Path to the file with your personal ecoflow app login email address.
Do to share or commit your plaintext scecrets to a public repo use: agenix or soaps.
@@ -51,7 +51,7 @@ in
};
ecoflowPasswordFile = mkOption {
type = types.path;
default = /etc/ecoflow-password;
default = "/etc/ecoflow-password";
description = ''
Path to the file with your personal ecoflow app login email password.
Do to share or commit your plaintext passwords to a public repo use: agenix or soaps here!
@@ -59,7 +59,7 @@ in
};
ecoflowDevicesFile = mkOption {
type = types.path;
default = /etc/ecoflow-devices;
default = "/etc/ecoflow-devices";
description = ''
File must contain one line, example: R3300000,R3400000,NC430000,....
The list of devices serial numbers separated by comma. For instance: SN1,SN2,SN3.
@@ -69,7 +69,7 @@ in
};
ecoflowDevicesPrettyNamesFile = mkOption {
type = types.path;
default = /etc/ecoflow-devices-pretty-names;
default = "/etc/ecoflow-devices-pretty-names";
description = ''
File must contain one line, example: {"R3300000":"Delta 2","R3400000":"Delta Pro",...}
The key/value map of custom names for your devices. Key is a serial number, value is a device name you want
@@ -24,13 +24,10 @@ let
if (builtins.isPath file) || (lib.isStorePath file) then
file
else
(
lib.warn ''
${logPrefix}: configuration file "${file}" is being copied to the nix-store.
If you would like to avoid that, please set enableConfigCheck to false.
'' /.
+ file
);
(lib.warn ''
${logPrefix}: configuration file "${file}" is being copied to the nix-store.
If you would like to avoid that, please set enableConfigCheck to false.
'' (builtins.toFile (builtins.baseNameOf file) (builtins.readFile file)));
checkConfig =
file:
@@ -93,6 +93,8 @@ in
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
services.epmd.enable = true;
users.users = lib.optionalAttrs (cfg.user == "ejabberd") {
ejabberd = {
group = cfg.group;
@@ -109,7 +111,11 @@ in
systemd.services.ejabberd = {
description = "ejabberd server";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
after = [
"network.target"
"epmd.socket"
];
wants = [ "epmd.socket" ];
path = [
pkgs.findutils
pkgs.coreutils
+6 -1
View File
@@ -5,6 +5,8 @@
...
}:
let
inherit (lib.types) listOf oneOf str;
cfg = config.services.epmd;
in
{
@@ -21,7 +23,10 @@ in
};
package = lib.mkPackageOption pkgs "erlang" { };
listenStream = lib.mkOption {
type = lib.types.str;
type = oneOf [
str
(listOf str)
];
default = "[::]:4369";
description = ''
the listenStream used by the systemd socket.
@@ -10,6 +10,20 @@ let
format = pkgs.formats.yaml { };
settings = lib.filterAttrsRecursive (_: v: v != null) cfg.settings;
optionalPort = (lib.types.ints.between (-1) 65535);
normalisePort =
defaultPort: configValue:
if configValue == -1 then
null
else if configValue == 0 then
defaultPort
else
configValue;
actualRTMPPort = normalisePort 1935 cfg.settings.rtmp_port;
actualWHIPPort = normalisePort 8080 cfg.settings.whip_port;
isLocallyDistributed = config.services.livekit.enable;
in
{
@@ -43,15 +57,15 @@ in
freeformType = format.type;
options = {
rtmp_port = lib.mkOption {
type = lib.types.port;
type = optionalPort;
default = 1935;
description = "TCP port for RTMP connections";
description = "TCP port for RTMP connections. -1 to disable";
};
whip_port = lib.mkOption {
type = lib.types.port;
type = optionalPort;
default = 8080;
description = "TCP port for WHIP connections";
description = "TCP port for WHIP connections. -1 to disable";
};
redis = {
@@ -120,10 +134,21 @@ in
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = cfg.openFirewall.rtmp -> actualRTMPPort != null;
message = "services.livekit-ingress: configured to open RTMP port, but the RTMP service is disabled";
}
{
assertion = cfg.openFirewall.whip -> actualWHIPPort != null;
message = "services.livekit-ingress: configured to open WHIP port, but the WHIP service is disabled";
}
];
networking.firewall = {
allowedTCPPorts = lib.mkMerge [
(lib.mkIf cfg.openFirewall.rtmp [ cfg.settings.rtmp_port ])
(lib.mkIf cfg.openFirewall.whip [ cfg.settings.whip_port ])
(lib.mkIf cfg.openFirewall.rtmp [ actualRTMPPort ])
(lib.mkIf cfg.openFirewall.whip [ actualWHIPPort ])
];
allowedUDPPortRanges = lib.mkIf cfg.openFirewall.rtc [
{
@@ -0,0 +1,190 @@
{
lib,
pkgs,
config,
...
}:
let
cfg = config.services.reframe;
iniFmt = pkgs.formats.ini { };
in
{
options.programs.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 = {
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 = true;
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;
};
};
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.
'';
};
};
};
}
);
default = { };
description = "Configurations for ReFrame";
};
};
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
systemd.packages = [ cfg.package ];
systemd.tmpfiles.packages = [ cfg.package ];
users.users.reframe = {
isSystemUser = true;
group = "reframe";
description = "ReFrame Remote Desktop";
};
users.groups.reframe = { };
environment.etc = builtins.mapAttrs' (
name: value:
lib.nameValuePair "reframe/${name}.conf" {
mode = "0644";
user = "root";
group = "root";
source = iniFmt.generate "${name}.conf" value;
}
) cfg.configs;
};
meta.maintainers = with lib.maintainers; [
bitbloxhub
];
}
@@ -112,6 +112,8 @@ in
systemd.services.thelounge = {
description = "The Lounge web IRC client";
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
preStart = "ln -sf ${pkgs.writeText "config.js" configJsData} ${dataDir}/config.js";
environment.THELOUNGE_PACKAGES = mkIf (cfg.plugins != [ ]) "${plugins}";
serviceConfig = {
+23 -11
View File
@@ -10,9 +10,11 @@ let
format = pkgs.formats.yaml { };
autheliaName = name: "authelia" + lib.optionalString (name != "") "-${name}";
autheliaOpts =
with lib;
{ name, ... }:
{ name, config, ... }:
{
options = {
enable = mkEnableOption "Authelia instance";
@@ -23,21 +25,28 @@ let
description = ''
Name is used as a suffix for the service name, user, and group.
By default it takes the value you use for `<instance>` in:
{option}`services.authelia.<instance>`
{option}`services.authelia.instances.<instance>`
When set to the empty string `""`, the service name, user, and group
will be just `authelia` without a suffix.
'';
};
package = mkPackageOption pkgs "authelia" { };
user = mkOption {
default = "authelia-${name}";
type = types.str;
defaultText = lib.literalExpression ''
if name == "" then "authelia" else "authelia-''${name}"
'';
description = "The name of the user for this authelia instance.";
};
group = mkOption {
default = "authelia-${name}";
type = types.str;
defaultText = lib.literalExpression ''
if name == "" then "authelia" else "authelia-''${name}"
'';
description = "The name of the group for this authelia instance.";
};
@@ -252,6 +261,11 @@ let
'';
};
};
config = {
user = mkDefault (autheliaName config.name);
group = mkDefault (autheliaName config.name);
};
};
writeOidcJwksConfigFile =
@@ -382,7 +396,7 @@ in
ExecStart = "${execCommand} ${configArg}";
Restart = "always";
RestartSec = "5s";
StateDirectory = "authelia-${instance.name}";
StateDirectory = autheliaName instance.name;
StateDirectoryMode = "0700";
# Security options:
@@ -431,11 +445,8 @@ in
};
};
mkInstanceUsersConfig = instance: {
groups."authelia-${instance.name}" = lib.mkIf (instance.group == "authelia-${instance.name}") {
name = "authelia-${instance.name}";
};
users."authelia-${instance.name}" = lib.mkIf (instance.user == "authelia-${instance.name}") {
name = "authelia-${instance.name}";
groups.${autheliaName instance.name} = lib.mkIf (instance.group == autheliaName instance.name) { };
users.${autheliaName instance.name} = lib.mkIf (instance.user == autheliaName instance.name) {
isSystemUser = true;
group = instance.group;
};
@@ -468,7 +479,7 @@ in
map (
instance:
lib.mkIf instance.enable {
"authelia-${instance.name}" = mkInstanceServiceConfig instance;
${autheliaName instance.name} = mkInstanceServiceConfig instance;
}
) instances
);
@@ -481,5 +492,6 @@ in
jk
dit7ya
nicomem
connor-grady
];
}
+36 -62
View File
@@ -25,50 +25,28 @@ let
text = cfg.extraConfig;
};
baseLoginOptions = "-p -- \\u";
baseLoginOptions = "-p";
agettyCmd =
loginCmd =
enableAutologin:
"${lib.getExe' pkgs.util-linux "agetty"} ${
lib.escapeShellArgs (
[
"--login-program"
(toString gettyCfg.loginProgram)
"--login-options"
# these options are passed as a single parameter
"${lib.optionalString enableAutologin "-f "}${baseLoginOptions}"
]
++ lib.optionals enableAutologin [
"--autologin"
gettyCfg.autologinUser
]
++ gettyCfg.extraArgs
++ [
"--8bits"
"--noclear"
"--"
"-"
]
)
} $TERM";
"${gettyCfg.loginProgram} ${baseLoginOptions}${lib.optionalString enableAutologin " -f -- ${gettyCfg.autologinUser}"}";
loginScript = pkgs.writers.writeDash "kmscon-login" ''
kms_tty=
active_tty_file=/sys/class/tty/tty0/active
if [ -f "$active_tty_file" ]; then
read -r kms_tty < "$active_tty_file"
fi
loginScript = pkgs.writers.writeDash "kmscon-login" (
lib.optionalString (gettyCfg.autologinUser != null && gettyCfg.autologinOnce) ''
kms_tty=
active_tty_file=/sys/class/tty/tty0/active
if [ -f "$active_tty_file" ]; then
read -r kms_tty < "$active_tty_file"
fi
${lib.optionalString (gettyCfg.autologinUser != null && gettyCfg.autologinOnce) ''
autologged="/run/kmscon.autologged"
if [ "$kms_tty" = tty1 ] && [ ! -f "$autologged" ]; then
touch "$autologged"
exec ${agettyCmd true}
exec ${loginCmd true}
fi
''}
exec ${agettyCmd (gettyCfg.autologinUser != null && !gettyCfg.autologinOnce)}
'';
''
+ "exec ${loginCmd (gettyCfg.autologinUser != null && !gettyCfg.autologinOnce)}"
);
in
{
imports = [
@@ -182,32 +160,28 @@ in
systemd.suppressedSystemUnits = [ "getty@.service" ];
services.kmscon.extraConfig =
let
xkb = optionals cfg.useXkbConfig (
lib.mapAttrsToList (n: v: "xkb-${n}=${v}") (
lib.filterAttrs (
n: v:
builtins.elem n [
"layout"
"model"
"options"
"variant"
]
&& v != ""
) config.services.xserver.xkb
)
);
render = optionals cfg.hwRender [
"drm"
"hwaccel"
];
fonts =
optional (cfg.fonts != null)
"font-name=${lib.concatMapStringsSep ", " (f: f.name) cfg.fonts}";
term = optional (cfg.term != null) "term=${cfg.term}";
in
lib.concatLines (xkb ++ render ++ fonts ++ term);
services.kmscon.extraConfig = lib.concatLines (
optionals cfg.useXkbConfig (
lib.mapAttrsToList (n: v: "xkb-${n}=${v}") (
lib.filterAttrs (
n: v:
builtins.elem n [
"layout"
"model"
"options"
"variant"
]
&& v != ""
) config.services.xserver.xkb
)
)
++ optionals cfg.hwRender [
"drm"
"hwaccel"
]
++ optional (cfg.fonts != null) "font-name=${lib.concatMapStringsSep ", " (f: f.name) cfg.fonts}"
++ optional (cfg.term != null) "term=${cfg.term}"
);
hardware.graphics.enable = mkIf cfg.hwRender true;
@@ -240,11 +240,11 @@ in
requires = [
"network-online.target"
]
++ lib.optionals cfg.database.createLocally [ "postgresql.service" ];
++ lib.optionals cfg.database.createLocally [ "postgresql.target" ];
after = [
"network-online.target"
]
++ lib.optionals cfg.database.createLocally [ "postgresql.service" ];
++ lib.optionals cfg.database.createLocally [ "postgresql.target" ];
wantedBy = [ "multi-user.target" ];
environment = cfg.environment // {
# Required, otherwise chrome dumps core
@@ -262,12 +262,12 @@ in
"network-online.target"
"linkwarden.service"
]
++ lib.optionals cfg.database.createLocally [ "postgresql.service" ];
++ lib.optionals cfg.database.createLocally [ "postgresql.target" ];
after = [
"network-online.target"
"linkwarden.service"
]
++ lib.optionals cfg.database.createLocally [ "postgresql.service" ];
++ lib.optionals cfg.database.createLocally [ "postgresql.target" ];
wantedBy = [ "multi-user.target" ];
environment = cfg.environment // {
# Required, otherwise chrome dumps core
@@ -455,6 +455,10 @@ in
assertion = cfg.efiSupport;
message = "Secure boot is only supported on EFI systems.";
}
{
assertion = !cfg.enableEditor;
message = "Editor is unconditionally disabled by Limine.";
}
];
boot.loader.limine.enrollConfig = true;
+14 -8
View File
@@ -610,6 +610,17 @@ let
)
);
systemdStage1HardwareKeyAssertionMessage = opt: ''
${opt} is deprecated, and it is unsupported with systemd stage 1. Support will be removed in 26.11 along with scripted stage 1. Hardware keys in systemd stage 1 are supported with systemd-cryptsetup(8). To migrate, enroll a key in a LUKS slot with systemd-cryptenroll(1). Usually, systemd will automatically detect the configuration at runtime, but if necessary, configure the corresponding crypttab(5) options with boot.initrd.luks.devices.<name>.crypttabExtraOpts.
Note: After migrating to a new LUKS slot, the old LUKS slot used for the scripted stage 1 implementation should be removed, otherwise it could interfere with falling back to a passphrase prompt in the event the hardware key fails.
See:
- https://www.freedesktop.org/software/systemd/man/systemd-cryptsetup.html
- https://www.freedesktop.org/software/systemd/man/systemd-cryptenroll.html
- https://www.freedesktop.org/software/systemd/man/crypttab.html
'';
in
{
imports = [
@@ -1106,21 +1117,16 @@ in
# TODO
{
assertion = config.boot.initrd.systemd.enable -> !luks.gpgSupport;
message = "systemd stage 1 does not support GPG smartcards yet.";
message = systemdStage1HardwareKeyAssertionMessage "boot.initrd.luks.gpgSupport";
}
{
assertion = config.boot.initrd.systemd.enable -> !luks.fido2Support;
message = ''
systemd stage 1 does not support configuring FIDO2 unlocking through `boot.initrd.luks.fido2Support`.
Use systemd-cryptenroll(1) to configure FIDO2 support, and set
`boot.initrd.luks.devices.''${DEVICE}.crypttabExtraOpts` as appropriate per crypttab(5)
(e.g. `fido2-device=auto`).
'';
message = systemdStage1HardwareKeyAssertionMessage "boot.initrd.luks.fido2Support";
}
# TODO
{
assertion = config.boot.initrd.systemd.enable -> !luks.yubikeySupport;
message = "systemd stage 1 does not support Yubikeys yet.";
message = systemdStage1HardwareKeyAssertionMessage "boot.initrd.luks.yubikeySupport";
}
];
+1 -2
View File
@@ -1744,8 +1744,7 @@ let
(assertValueOneOf "UseDNR" boolValues)
(assertValueOneOf "UseDomains" (boolValues ++ [ "route" ]))
(assertRange "RouteTable" 0 4294967295)
(assertInt "RouteMetric")
(assertRange "RouteMetric" 0 4294967295)
(assertRouteMetricOrTriple "RouteMetric")
(assertValueOneOf "QuickAck" boolValues)
(assertValueOneOf "UseMTU" boolValues)
(assertValueOneOf "UseHopLimit" boolValues)
@@ -132,8 +132,8 @@ let
default = [ ];
description = "Environment files for this container.";
example = [
/path/to/.env
/path/to/.env.secret
"/path/to/.env"
"/path/to/.env.secret"
];
};
+1 -1
View File
@@ -1362,7 +1362,7 @@ in
+ "${guest.address}:${toString guest.port},"
else
"'guestfwd=${proto}:${guest.address}:${toString guest.port}-"
+ "cmd:${pkgs.netcat}/bin/nc ${host.address} ${toString host.port}',"
+ "cmd:${hostPkgs.netcat}/bin/nc ${host.address} ${toString host.port}',"
);
restrictNetworkOption = lib.optionalString cfg.restrictNetwork "restrict=on,";
in
+3
View File
@@ -236,6 +236,7 @@ in
atticd = runTest ./atticd.nix;
attr = pkgs.callPackage ./attr.nix { };
atuin = runTest ./atuin.nix;
atuin-programs = runTest ./atuin-programs.nix;
audiobookshelf = runTest ./audiobookshelf.nix;
audit = runTest ./audit.nix;
audit-testsuite = runTest ./audit-testsuite.nix;
@@ -1251,6 +1252,7 @@ in
inherit runTest;
};
pdns-recursor = runTest ./pdns-recursor.nix;
pdudaemon = runTest ./pdudaemon.nix;
peerflix = runTest ./peerflix.nix;
peering-manager = runTest ./web-apps/peering-manager.nix;
peertube = handleTestOn [ "x86_64-linux" ] ./web-apps/peertube.nix { };
@@ -1377,6 +1379,7 @@ in
qemu-vm-volatile-root = runTest ./qemu-vm-volatile-root.nix;
qgis = handleTest ./qgis.nix { package = pkgs.qgis; };
qgis-ltr = handleTest ./qgis.nix { package = pkgs.qgis-ltr; };
qlever = runTest ./qlever.nix;
qownnotes = runTest ./qownnotes.nix;
qtile = runTestOn [ "x86_64-linux" "aarch64-linux" ] ./qtile/default.nix;
qtile-extras = runTestOn [ "x86_64-linux" "aarch64-linux" ] ./qtile-extras/default.nix;
+39
View File
@@ -0,0 +1,39 @@
{ pkgs, ... }:
{
name = "atuin";
meta.maintainers = pkgs.atuin.meta.maintainers;
nodes.machine = {
programs = {
bash.enable = true;
fish.enable = true;
zsh.enable = true;
atuin = {
enable = true;
settings = {
auto_sync = false;
};
};
};
};
testScript = ''
start_all()
machine.wait_for_unit("default.target")
# Check atuin is installed
machine.succeed("atuin --version")
# Check shell integration - verify the init scripts can be sourced without error
machine.succeed("bash -c 'eval \"$(atuin init bash)\"'")
machine.succeed("zsh -c 'eval \"$(atuin init zsh)\"'")
machine.succeed("fish -c 'atuin init fish | source'")
# Verify config file was created
machine.succeed("grep -q 'auto_sync = false' /etc/atuin/config.toml")
# Verify daemon socket unit is enabled
machine.succeed("systemctl --user --machine=root@ is-enabled atuin-daemon.socket")
'';
}
+9
View File
@@ -45,6 +45,15 @@ in
};
};
channel = incusRunTest {
name = "channel";
instances.c1 = {
type = "container";
copyChannel = true;
};
};
# used in lxc tests to verify container functionality
container = incusRunTest {
name = "container";
+55 -47
View File
@@ -60,6 +60,11 @@ in
default = { };
};
copyChannel = lib.mkEnableOption ''
copy channel in test image. disabled by default as it forces image
rebuilds excessively. enable to validate channel things.
'';
testScript = lib.mkOption {
type = lib.types.str;
description = "final script provided to test runner";
@@ -104,7 +109,7 @@ in
documentation.enable = lib.mkForce false;
documentation.nixos.enable = lib.mkForce false;
# including a channel forces images to be rebuilt on any changes
system.installer.channel.enable = lib.mkForce false;
system.installer.channel.enable = lib.mkForce config.copyChannel;
environment.etc."nix/registry.json".text = lib.mkForce "{}";
@@ -170,64 +175,67 @@ in
#
# container specific
#
+
lib.optionalString (config.type == "container")
# python
''
with subtest("[${image_id}] switch-to-configuration updates /sbin/init via installBootLoader"):
# Remove /sbin/init so we can verify installBootLoader recreates it
server.succeed(f"incus exec {instance_name} -- rm -f /sbin/init")
server.fail(f"incus exec {instance_name} -- test -e /sbin/init")
+ lib.optionalString (config.type == "container") (
# python
''
with subtest("[${image_id}] switch-to-configuration updates /sbin/init via installBootLoader"):
# Remove /sbin/init so we can verify installBootLoader recreates it
server.succeed(f"incus exec {instance_name} -- rm -f /sbin/init")
server.fail(f"incus exec {instance_name} -- test -e /sbin/init")
server.succeed(
f"incus exec {instance_name} -- /run/current-system/bin/switch-to-configuration switch"
)
server.succeed(
f"incus exec {instance_name} -- /run/current-system/bin/switch-to-configuration switch"
)
# Verify installBootLoader recreated /sbin/init pointing to the system's init
server.succeed(f"incus exec {instance_name} -- test -x /sbin/init")
target = server.succeed(f"incus exec {instance_name} -- readlink -f /sbin/init").strip()
current = server.succeed(f"incus exec {instance_name} -- readlink -f /run/current-system/init").strip()
assert target == current, f"/sbin/init -> {target}, expected {current}"
# Verify installBootLoader recreated /sbin/init pointing to the system's init
server.succeed(f"incus exec {instance_name} -- test -x /sbin/init")
target = server.succeed(f"incus exec {instance_name} -- readlink -f /sbin/init").strip()
current = server.succeed(f"incus exec {instance_name} -- readlink -f /run/current-system/init").strip()
assert target == current, f"/sbin/init -> {target}, expected {current}"
# TODO troubleshoot VM hot memory resizing which was introduced in 6.12
with subtest("[${image_id}] memory limits can be hotplug changed"):
server.set_instance_config(instance_name, "limits.memory 512MB")
# can't use lsmem since it sees the host's memory size
server.wait_instance_exec_success(instance_name, "grep 'MemTotal:[[:space:]]*500000 kB' /proc/meminfo", timeout=1)
# TODO troubleshoot VM hot memory resizing which was introduced in 6.12
with subtest("[${image_id}] memory limits can be hotplug changed"):
server.set_instance_config(instance_name, "limits.memory 512MB")
# can't use lsmem since it sees the host's memory size
server.wait_instance_exec_success(instance_name, "grep 'MemTotal:[[:space:]]*500000 kB' /proc/meminfo", timeout=1)
# verify the patched container systemd generator from `pkgs.distrobuilder.generator`
with subtest("[${image_id}] lxc-generator compatibility"):
with subtest("[${image_id}] lxc-container generator configures plain container"):
# default container is plain
server.succeed(f"incus exec {instance_name} test -- -e /run/systemd/system/service.d/zzz-lxc-service.conf")
# verify the patched container systemd generator from `pkgs.distrobuilder.generator`
with subtest("[${image_id}] lxc-generator compatibility"):
with subtest("[${image_id}] lxc-container generator configures plain container"):
# default container is plain
server.succeed(f"incus exec {instance_name} test -- -e /run/systemd/system/service.d/zzz-lxc-service.conf")
server.check_instance_sysctl(instance_name)
server.check_instance_sysctl(instance_name)
with subtest("[${image_id}] lxc-container generator configures nested container"):
server.set_instance_config(instance_name, "security.nesting=true", restart=True)
with subtest("[${image_id}] lxc-container generator configures nested container"):
server.set_instance_config(instance_name, "security.nesting=true", restart=True)
server.fail(f"incus exec {instance_name} test -- -e /run/systemd/system/service.d/zzz-lxc-service.conf")
target = server.succeed(f"incus exec {instance_name} readlink -- -f /run/systemd/system/systemd-binfmt.service").strip()
assert target == "/dev/null", "lxc generator did not correctly mask /run/systemd/system/systemd-binfmt.service"
server.fail(f"incus exec {instance_name} test -- -e /run/systemd/system/service.d/zzz-lxc-service.conf")
target = server.succeed(f"incus exec {instance_name} readlink -- -f /run/systemd/system/systemd-binfmt.service").strip()
assert target == "/dev/null", "lxc generator did not correctly mask /run/systemd/system/systemd-binfmt.service"
server.check_instance_sysctl(instance_name)
server.check_instance_sysctl(instance_name)
with subtest("[${image_id}] lxcfs"):
with subtest("[${image_id}] mounts lxcfs overlays"):
server.succeed(f"incus exec {instance_name} mount | grep 'lxcfs on /proc/cpuinfo type fuse.lxcfs'")
server.succeed(f"incus exec {instance_name} mount | grep 'lxcfs on /proc/meminfo type fuse.lxcfs'")
with subtest("[${image_id}] lxcfs"):
with subtest("[${image_id}] mounts lxcfs overlays"):
server.succeed(f"incus exec {instance_name} mount | grep 'lxcfs on /proc/cpuinfo type fuse.lxcfs'")
server.succeed(f"incus exec {instance_name} mount | grep 'lxcfs on /proc/meminfo type fuse.lxcfs'")
with subtest("[${image_id}] supports per-instance lxcfs"):
server.succeed(f"incus stop {instance_name}")
server.fail(f"pgrep -a lxcfs | grep 'incus/devices/{instance_name}/lxcfs'")
with subtest("[${image_id}] supports per-instance lxcfs"):
server.succeed(f"incus stop {instance_name}")
server.fail(f"pgrep -a lxcfs | grep 'incus/devices/{instance_name}/lxcfs'")
server.succeed("incus config set instances.lxcfs.per_instance=true")
server.succeed(f"incus start {instance_name}")
server.wait_for_instance(instance_name)
server.succeed(f"pgrep -a lxcfs | grep 'incus/devices/{instance_name}/lxcfs'")
''
server.succeed("incus config set instances.lxcfs.per_instance=true")
server.succeed(f"incus start {instance_name}")
server.wait_for_instance(instance_name)
server.succeed(f"pgrep -a lxcfs | grep 'incus/devices/{instance_name}/lxcfs'")
''
+ lib.optionalString (config.copyChannel) ''
with subtest("[${image_id}] channel copied correctly"):
server.succeed(f"incus exec {instance_name} -- systemctl status nix-channel-init.service")
''
)
#
# virtual-machine specific
#
+1 -1
View File
@@ -31,7 +31,7 @@
enableOCR = true;
testScript = ''
machine.start()
machine.wait_for_unit("default.target")
with subtest("ensure we can open a tty"):
machine.wait_for_text("alice@machine")
+50
View File
@@ -0,0 +1,50 @@
{ pkgs, ... }:
{
name = "PDUDaemon";
meta.maintainers = with pkgs.lib.maintainers; [
aiyion
emantor
];
nodes.pdudaemonhost =
{ pkgs, ... }:
{
environment.systemPackages = [ pkgs.curl ];
services.pdudaemon.enable = true;
services.pdudaemon.openFirewall = true;
services.pdudaemon.pdus = {
testpduhost = {
driver = "localcmdline";
cmd_on = "echo '%s on' >> /tmp/pdu";
cmd_off = "echo '%s off' >> /tmp/pdu";
};
};
};
nodes.clienthost =
{ pkgs, ... }:
{
environment.systemPackages = [ pkgs.curl ];
};
testScript =
{ nodes, ... }:
#python
''
with subtest("Wait for pdudaemon startup"):
pdudaemonhost.start()
pdudaemonhost.wait_for_unit("pdudaemon.service")
pdudaemonhost.wait_for_open_port(16421)
print(pdudaemonhost.succeed("curl 'http://localhost:16421/power/control/on?hostname=testpduhost&port=1'"))
with subtest("Connect from client"):
clienthost.start()
clienthost.wait_until_succeeds("curl 'http://pdudaemonhost:16421/power/control/off?hostname=testpduhost&port=1'")
with subtest("Check systemd hardening does not degrade unnoticed"):
exact_threshold = 15
service_name = "pdudaemon"
pdudaemonhost.fail(f"systemd-analyze security {service_name}.service --threshold={exact_threshold-1}")
pdudaemonhost.succeed(f"systemd-analyze security {service_name}.service --threshold={exact_threshold}")
'';
}
+52
View File
@@ -0,0 +1,52 @@
{
pkgs,
lib,
...
}:
let
olympics-qleverfile = "${pkgs.qlever-control.src}/src/qlever/Qleverfiles/Qleverfile.olympics";
olympics-dataset = pkgs.fetchurl {
url = "https://github.com/wallscope/olympics-rdf/raw/54483d539082641d48e1d49873662b3af628ca4d/data/olympics-nt-nodup.zip";
hash = "sha256-dY28CQKaMDUUw/pw+p9yX0EtJOnbAAplodMFaedL1B8=";
};
in
{
name = "Basic QLever test";
meta.maintainers = lib.teams.ngi.members;
nodes = {
machine =
{
pkgs,
...
}:
{
environment.systemPackages = with pkgs; [
qlever
qlever-control
unzip
];
};
};
testScript =
# python
''
machine.succeed("cp ${olympics-dataset} /tmp/olympics.zip")
machine.succeed("cp ${olympics-qleverfile} /tmp/Qleverfile")
machine.succeed("unzip -q olympics.zip")
# use qlever binary instead of docker
machine.succeed("sed -i 's/SYSTEM = docker/SYSTEM = native/' /tmp/Qleverfile")
machine.succeed("qlever index")
machine.succeed("qlever start")
machine.wait_for_open_port(7019) # default server port
machine.succeed("qlever query")
'';
}
+38 -5
View File
@@ -3,17 +3,50 @@
name = "dawarich-nixos";
nodes.machine =
{ pkgs, ... }:
{ lib, pkgs, ... }:
{
services.dawarich = {
enable = true;
localDomain = "localhost";
};
environment.etc.geojson.source = pkgs.fetchurl {
url = "https://github.com/Freika/dawarich/raw/8c24764aa56a084e980e21bc2ffd13a72fd611db/spec/fixtures/files/geojson/export.json";
hash = "sha256-qI00E5ixKTRJduAD+qB3JzvrpoJmC55llNtSiPVyxz4=";
};
environment.etc.geojson.text =
let
# based on https://github.com/Freika/dawarich/raw/8c24764aa56a084e980e21bc2ffd13a72fd611db/spec/fixtures/files/geojson/export.json
# but with different timestamps to avoid points being flagged as anomalies
points = map (i: {
lat = i / 10.0;
lon = i / 10.0;
timestamp = 1609459200 + i * 1000;
}) (lib.range 1 10);
mkGeoJsonPoint =
{
lat,
lon,
timestamp,
}:
{
type = "Feature";
geometry = {
type = "Point";
coordinates = [
lon
lat
];
};
properties = {
altitude = 1;
vertical_accuracy = 1;
accuracy = 1;
inherit timestamp;
};
};
in
builtins.toJSON {
type = "FeatureCollection";
features = map mkGeoJsonPoint points;
};
};
testScript = ''
+1 -1
View File
@@ -75,7 +75,7 @@ Because entries in the Nix store are inert and do nothing by themselves, package
This section describes a general framework of understanding and exceptions might apply.
Luckily it's pretty easy to maintain your own package set with Nix, which can then be added to the [Nix User Repository](https://github.com/nix-community/nur) project.
Luckily it's pretty easy to maintain your own package set with Nix, which can then be added to the [Nix User Repository](https://github.com/nix-community/nur) project or included in [search.nixos.org's list of indexed 3rd-party flakes](https://github.com/NixOS/nixos-search/blob/main/flakes/manual.toml)
---
-99
View File
@@ -1,99 +0,0 @@
{
lib,
stdenv,
fetchFromGitHub,
fetchpatch,
cmake,
pkg-config,
wrapQtAppsHook,
alsa-lib ? null,
carla ? null,
fftwFloat,
fltk_1_3,
fluidsynth ? null,
lame ? null,
libgig ? null,
libjack2 ? null,
libpulseaudio ? null,
libsamplerate,
libsoundio ? null,
libsndfile,
libvorbis ? null,
portaudio ? null,
qtbase,
qtx11extras,
qttools,
SDL ? null,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "lmms";
version = "1.2.2";
src = fetchFromGitHub {
owner = "LMMS";
repo = "lmms";
rev = "v${finalAttrs.version}";
sha256 = "006hwv1pbh3y5whsxkjk20hsbgwkzr4dawz43afq1gil69y7xpda";
fetchSubmodules = true;
};
nativeBuildInputs = [
cmake
qttools
pkg-config
wrapQtAppsHook
];
buildInputs = [
carla
alsa-lib
fftwFloat
fltk_1_3
fluidsynth
lame
libgig
libjack2
libpulseaudio
libsamplerate
libsndfile
libsoundio
libvorbis
portaudio
qtbase
qtx11extras
SDL # TODO: switch to SDL2 in the next version
];
patches = [
(fetchpatch {
url = "https://raw.githubusercontent.com/archlinux/svntogit-community/cf64acc45e3264c6923885867e2dbf8b7586a36b/trunk/lmms-carla-export.patch";
sha256 = "sha256-wlSewo93DYBN2PvrcV58dC9kpoo9Y587eCeya5OX+j4=";
})
];
prePatch = ''
# Update CMake minimum required version and policies
substituteInPlace CMakeLists.txt --replace 'CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7)' 'CMAKE_MINIMUM_REQUIRED(VERSION 3.10)'
substituteInPlace CMakeLists.txt --replace 'CMAKE_POLICY(SET CMP0026 OLD)' 'CMAKE_POLICY(SET CMP0026 NEW)'
substituteInPlace CMakeLists.txt --replace 'CMAKE_POLICY(SET CMP0050 OLD)' 'CMAKE_POLICY(SET CMP0050 NEW)'
substituteInPlace CMakeLists.txt --replace 'GET_TARGET_PROPERTY(BIN2RES bin2res LOCATION)' 'SET(BIN2RES $<TARGET_FILE:bin2res>)'
'';
cmakeFlags = [
"-DWANT_QT5=ON"
]
++ lib.optionals (lib.versionOlder finalAttrs.version "11.4") [
# Fix the build with CMake 4.
"-DCMAKE_POLICY_VERSION_MINIMUM=3.5"
];
meta = {
description = "DAW similar to FL Studio (music production software)";
mainProgram = "lmms";
homepage = "https://lmms.io";
license = lib.licenses.gpl2Plus;
platforms = lib.platforms.linux;
maintainers = [ ];
};
})
@@ -30,10 +30,10 @@
builderKeys ? [
"152812300785C96444D3334D17565732E08E5E41" # achow101.gpg
"9EDAFF80E080659604F4A76B2EBB056FD847F8A7" # Emzy.gpg
# "6B002C6EA3F91B1B0DF0C9BC8F617F1200A6D25C" # glozow.gpg (not signed 30.2)
# "6B002C6EA3F91B1B0DF0C9BC8F617F1200A6D25C" # glozow.gpg (not signed 31.0)
"D1DBF2C4B96F2DEBF4C16654410108112E7EA81F" # hebasto.gpg
# "71A3B16735405025D447E8F274810B012346C9A6" # laanwj.gpg (not signed 30.2)
# "67AA5B46E7AF78053167FE343B8F814A784218F8" # willcl-ark.gpg (not signed 30.2)
# "71A3B16735405025D447E8F274810B012346C9A6" # laanwj.gpg (not signed 31.0)
"67AA5B46E7AF78053167FE343B8F814A784218F8"
],
}:
@@ -46,14 +46,14 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = if withGui then "bitcoin" else "bitcoind";
version = "30.2";
version = "31.0";
src = fetchurl {
urls = [
"https://bitcoincore.org/bin/bitcoin-core-${finalAttrs.version}/bitcoin-${finalAttrs.version}.tar.gz"
];
# hash retrieved from signed SHA256SUMS
sha256 = "6fd00b8c42883d5c963901ad4109a35be1e5ec5c2dc763018c166c21a06c84cb";
sha256 = "0ba0ef5eea3aefd96cc1774be274c3d594812cfac0988809d706738bb067b3e3";
};
nativeBuildInputs = [
@@ -93,12 +93,12 @@ stdenv.mkDerivation (finalAttrs: {
checksums = fetchurl {
url = "https://bitcoincore.org/bin/bitcoin-core-${finalAttrs.version}/SHA256SUMS";
hash = "sha256-ERE/QO2elj++mON3UYGJKaLdU86gWIRS/AufuyS/JAU=";
hash = "sha256-w/4sIOBYR1d/YzzMqwzH6wRHOPQnNg8x7yS96+eWk8g=";
};
signatures = fetchurl {
url = "https://bitcoincore.org/bin/bitcoin-core-${finalAttrs.version}/SHA256SUMS.asc";
hash = "sha256-69TMNzKJQRDC+2YU6bKI23c8Jx44m5B1zz823SQtiyg=";
hash = "sha256-hkztGd2fUel7JJbe9RGSfJXGozhb085XvmqPjks96l4=";
};
verifyBuilderKeys =
@@ -1194,6 +1194,13 @@ let
# https://github.com/syl20bnr/flymake-elixir/issues/4
flymake-elixir = addPackageRequires super.flymake-elixir [ self.flymake-easy ];
flymake-hadolint = super.flymake-hadolint.overrideAttrs (attrs: {
postPatch = attrs.postPatch or "" + ''
substituteInPlace flymake-hadolint.el \
--replace-fail 'flymake-hadolint-program "hadolint"' 'flymake-hadolint-program "${lib.getExe pkgs.hadolint}"'
'';
});
flyparens = ignoreCompilationError super.flyparens; # elisp error
fold-dwim-org = ignoreCompilationError super.fold-dwim-org; # elisp error
+22 -33
View File
@@ -166,37 +166,29 @@ stdenv.mkDerivation (finalAttrs: {
patches =
patches fetchpatch
++ lib.optionals withNativeCompilation [
(replaceVars
(
if lib.versionOlder finalAttrs.version "30" then
./native-comp-driver-options.patch
else
./native-comp-driver-options-30.patch
)
{
backendPath = (
lib.concatStringsSep " " (
map (x: ''"-B${x}"'') (
[
# Paths necessary so the JIT compiler finds its libraries:
"${lib.getLib libgccjit}/lib"
]
++ libGccJitLibraryPaths
++ [
# Executable paths necessary for compilation (ld, as):
"${lib.getBin stdenv.cc.cc}/bin"
"${lib.getBin stdenv.cc.bintools}/bin"
"${lib.getBin stdenv.cc.bintools.bintools}/bin"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
# The linker needs to know where to find libSystem on Darwin.
"${apple-sdk.sdkroot}/usr/lib"
]
)
(replaceVars ./native-comp-driver-options-30.patch {
backendPath = (
lib.concatStringsSep " " (
map (x: ''"-B${x}"'') (
[
# Paths necessary so the JIT compiler finds its libraries:
"${lib.getLib libgccjit}/lib"
]
++ libGccJitLibraryPaths
++ [
# Executable paths necessary for compilation (ld, as):
"${lib.getBin stdenv.cc.cc}/bin"
"${lib.getBin stdenv.cc.bintools}/bin"
"${lib.getBin stdenv.cc.bintools.bintools}/bin"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
# The linker needs to know where to find libSystem on Darwin.
"${apple-sdk.sdkroot}/usr/lib"
]
)
);
}
)
)
);
})
];
postPatch = lib.concatStringsSep "\n" [
@@ -252,13 +244,10 @@ stdenv.mkDerivation (finalAttrs: {
nativeBuildInputs = [
makeWrapper
pkg-config
]
++ lib.optionals (variant == "macport") [
texinfo
]
++ lib.optionals srcRepo [
autoreconfHook
texinfo
]
++ lib.optionals (withPgtk || withX && (withGTK3 || withXwidgets)) [ wrapGAppsHook3 ];
@@ -1,19 +0,0 @@
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 2c9b79334b..50c6b5ac85 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -178,8 +178,9 @@ native-comp-compiler-options
:type '(repeat string)
:version "28.1")
-(defcustom native-comp-driver-options (when (eq system-type 'darwin)
- '("-Wl,-w"))
+(defcustom native-comp-driver-options (append (when (eq system-type 'darwin)
+ '("-Wl,-w"))
+ '(@backendPath@))
"Options passed verbatim to the native compiler's back-end driver.
Note that not all options are meaningful; typically only the options
affecting the assembler and linker are likely to be useful.
--
2.37.3
+33 -3
View File
@@ -85,6 +85,7 @@ let
AndersonTorres
adisbladis
jwiegley
linj
panchoh
];
"macport" = with lib.maintainers; [
@@ -111,13 +112,25 @@ in
rev = "emacs-30.2";
hash = "sha256-W2eZ+cNQhi/fMeRkwOqSKU7Vzvp43WUOpiwaLLNEXtg=";
patches = fetchpatch: [
(fetchpatch {
name = "fix-off-by-one-mistake-80851-CVE-2026-6861.patch";
url = "https://cgit.git.savannah.gnu.org/cgit/emacs.git/patch/?id=8f535370b9efbc91673b20c6987a5cae4f6dc562";
hash = "sha256-ny44eIi8DUa9pQhVGzhGz4H6FXU4+ki86SITLXhkwpw=";
})
(builtins.path {
name = "inhibit-lexical-cookie-warning-67916.patch";
path = ./inhibit-lexical-cookie-warning-67916-30.patch;
})
# tree-sitter 0.26 compatibility fix, from FreeBSD
# https://cgit.freebsd.org/ports/plain/editors/emacs/files/patch-src_treesit.c
./tree-sitter-0.26.patch
(fetchpatch {
# tree-sitter 0.26 compatibility fix, see https://bugs.gentoo.org/970856
url = "https://gitweb.gentoo.org/proj/emacs-patches.git/plain/emacs/30.2/01_all_treesit-0.26.patch?id=d0f47979806d9be5a190fdb4ffa1bde439b2d616";
hash = "sha256-3pWeRxjAhr3ntBR3xDhoDUZDjU6xICU23NUpb/Vl6R4=";
})
(fetchpatch {
# tree-sitter 0.26 compatibility fix, see https://bugs.gentoo.org/971731
url = "https://gitweb.gentoo.org/proj/emacs-patches.git/plain/emacs/30.2/02_all_ts-query-pred.patch?id=86190bf195b3e17108372d8ad89eb57037180dd2";
hash = "sha256-0GPyfKLSaB09a8hamrSf6lx4Qk8Big4AKMOivkN1wEM=";
})
];
});
@@ -127,5 +140,22 @@ in
variant = "macport";
rev = "emacs-mac-30.2";
hash = "sha256-i/W2Xa6Vk1+T1fs6fa4wJVMLLB6BK8QAPcdmPrU8NwM=";
patches = fetchpatch: [
(fetchpatch {
name = "fix-off-by-one-mistake-80851-CVE-2026-6861.patch";
url = "https://cgit.git.savannah.gnu.org/cgit/emacs.git/patch/?id=8f535370b9efbc91673b20c6987a5cae4f6dc562";
hash = "sha256-ny44eIi8DUa9pQhVGzhGz4H6FXU4+ki86SITLXhkwpw=";
})
(fetchpatch {
# tree-sitter 0.26 compatibility fix, see https://bugs.gentoo.org/970856
url = "https://gitweb.gentoo.org/proj/emacs-patches.git/plain/emacs/30.2/01_all_treesit-0.26.patch?id=d0f47979806d9be5a190fdb4ffa1bde439b2d616";
hash = "sha256-3pWeRxjAhr3ntBR3xDhoDUZDjU6xICU23NUpb/Vl6R4=";
})
(fetchpatch {
# tree-sitter 0.26 compatibility fix, see https://bugs.gentoo.org/971731
url = "https://gitweb.gentoo.org/proj/emacs-patches.git/plain/emacs/30.2/02_all_ts-query-pred.patch?id=86190bf195b3e17108372d8ad89eb57037180dd2";
hash = "sha256-0GPyfKLSaB09a8hamrSf6lx4Qk8Big4AKMOivkN1wEM=";
})
];
});
}
@@ -1,56 +0,0 @@
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -34,7 +34,7 @@ along with GNU Emacs. If not, see <https://www.gnu.or
# include "w32common.h"
/* In alphabetical order. */
-#undef ts_language_version
+#undef ts_language_abi_version
#undef ts_node_child
#undef ts_node_child_by_field_name
#undef ts_node_child_count
@@ -89,7 +89,7 @@ along with GNU Emacs. If not, see <https://www.gnu.or
#undef ts_tree_get_changed_ranges
#undef ts_tree_root_node
-DEF_DLL_FN (uint32_t, ts_language_version, (const TSLanguage *));
+DEF_DLL_FN (uint32_t, ts_language_abi_version, (const TSLanguage *));
DEF_DLL_FN (TSNode, ts_node_child, (TSNode, uint32_t));
DEF_DLL_FN (TSNode, ts_node_child_by_field_name,
(TSNode, const char *, uint32_t));
@@ -166,7 +166,7 @@ init_treesit_functions (void)
if (!library)
return false;
- LOAD_DLL_FN (library, ts_language_version);
+ LOAD_DLL_FN (library, ts_language_abi_version);
LOAD_DLL_FN (library, ts_node_child);
LOAD_DLL_FN (library, ts_node_child_by_field_name);
LOAD_DLL_FN (library, ts_node_child_count);
@@ -224,7 +224,7 @@ init_treesit_functions (void)
return true;
}
-#define ts_language_version fn_ts_language_version
+#define ts_language_abi_version fn_ts_language_abi_version
#define ts_node_child fn_ts_node_child
#define ts_node_child_by_field_name fn_ts_node_child_by_field_name
#define ts_node_child_count fn_ts_node_child_count
@@ -746,7 +746,7 @@ treesit_load_language (Lisp_Object language_symbol,
{
*signal_symbol = Qtreesit_load_language_error;
*signal_data = list2 (Qversion_mismatch,
- make_fixnum (ts_language_version (lang)));
+ make_fixnum (ts_language_abi_version (lang)));
return NULL;
}
return lang;
@@ -817,7 +817,7 @@ Return nil if a grammar library for LANGUAGE is not av
&signal_data);
if (ts_language == NULL)
return Qnil;
- uint32_t version = ts_language_version (ts_language);
+ uint32_t version = ts_language_abi_version (ts_language);
return make_fixnum((ptrdiff_t) version);
}
}
@@ -247,6 +247,15 @@ pkgs.lib.recurseIntoAttrs rec {
};
};
nvim_with_no_pname_plugin = neovim.override {
extraName = "-with-no-pname-plugin";
configure.packages.plugins = {
start = [
vimPlugins.corePlugins
];
};
};
# regression test that ftplugin files from plugins are loaded before the ftplugin
# files from $VIMRUNTIME
run_nvim_with_ftplugin = runTest nvim_with_ftplugin ''
@@ -260,6 +269,10 @@ pkgs.lib.recurseIntoAttrs rec {
[ "$result" = 0 ]
'';
run_nvim_with_no_pname_plugin = runTest nvim_with_no_pname_plugin ''
${nvim_with_no_pname_plugin}/bin/nvim -i NONE -e --headless +quit
'';
# Generate a neovim wrapper with only a init.lua and no init.vim file
nvim_with_only_init_lua = wrapNeovim2 "-only-lua-init-file" {
luaRcContent = "-- some text";
@@ -412,12 +412,12 @@ final: prev: {
SchemaStore-nvim = buildVimPlugin {
pname = "SchemaStore.nvim";
version = "0-unstable-2026-04-17";
version = "0-unstable-2026-04-23";
src = fetchFromGitHub {
owner = "b0o";
repo = "SchemaStore.nvim";
rev = "250aed7415ddd6cb3ea321490c7b35094ed9148d";
hash = "sha256-UQ+6s4tMJ8z+UJ41ZX1HJTiDsbkYFEUSDb+N8jVBAeY=";
rev = "d09eb13366fe95deeecf3deba7a4639f0c82fcdc";
hash = "sha256-6JLdNKPtRpjS2XKc6gs2I51AUeyiaidYBj7bO3S4F0Y=";
};
meta.homepage = "https://github.com/b0o/SchemaStore.nvim/";
meta.hydraPlatforms = [ ];
@@ -660,12 +660,12 @@ final: prev: {
actions-preview-nvim = buildVimPlugin {
pname = "actions-preview.nvim";
version = "0-unstable-2026-04-09";
version = "0-unstable-2026-04-22";
src = fetchFromGitHub {
owner = "aznhe21";
repo = "actions-preview.nvim";
rev = "2b604b2e8e662c03b716436f6ffebcb19663e66a";
hash = "sha256-FG2QxBZTtyRyzK1T2rUtmyK+Z2kt/Ot/vSDQ6JEVwBs=";
rev = "0ac9c2aa3cfc8c885321c0862b50b6b1c3392405";
hash = "sha256-ibzfF/Ebm5+1EgZ05NQCTRDB+Q7ymyRy2fZpjvwv8EA=";
};
meta.homepage = "https://github.com/aznhe21/actions-preview.nvim/";
meta.hydraPlatforms = [ ];
@@ -986,12 +986,12 @@ final: prev: {
astrocore = buildVimPlugin {
pname = "astrocore";
version = "3.0.2";
version = "3.0.3";
src = fetchFromGitHub {
owner = "AstroNvim";
repo = "astrocore";
tag = "v3.0.2";
hash = "sha256-4yf49at22utcEVrLftI8X0iBrcbfVqlZpreXkM0q63E=";
tag = "v3.0.3";
hash = "sha256-EQG6jOH/US/0T4iIwPv58FC4P7k3W7jTBdfRVbqFQi8=";
};
meta.homepage = "https://github.com/AstroNvim/astrocore/";
meta.hydraPlatforms = [ ];
@@ -1036,6 +1036,19 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
async-nvim = buildVimPlugin {
pname = "async.nvim";
version = "0-unstable-2026-04-18";
src = fetchFromGitHub {
owner = "lewis6991";
repo = "async.nvim";
rev = "7a1d7d49933fbe902b84b55f352a3b10fd587331";
hash = "sha256-uyUvZVN7L7SqPAE1woc1T8dlhpH24FBj3/WD4VMwWF8=";
};
meta.homepage = "https://github.com/lewis6991/async.nvim/";
meta.hydraPlatforms = [ ];
};
async-vim = buildVimPlugin {
pname = "async.vim";
version = "0-unstable-2022-04-04";
@@ -1558,12 +1571,12 @@ final: prev: {
better-escape-nvim = buildVimPlugin {
pname = "better-escape.nvim";
version = "2.3.3-unstable-2025-04-29";
version = "2.3.3-unstable-2026-04-22";
src = fetchFromGitHub {
owner = "max397574";
repo = "better-escape.nvim";
rev = "19a38aab94961016430905ebec30d272a01e9742";
hash = "sha256-OmCZQN9qMSSEBmZaRR5QoJ+RRm13pnu+0uAUoz6X7oA=";
rev = "3f4bc0b326606264ff75967f59091b5ddada0554";
hash = "sha256-h7Xa8McjnCOOP8WbqbmmJn9jjBMvk89Tvh0Qt1stEVU=";
};
meta.homepage = "https://github.com/max397574/better-escape.nvim/";
meta.hydraPlatforms = [ ];
@@ -1636,12 +1649,12 @@ final: prev: {
blink-cmp-conventional-commits = buildVimPlugin {
pname = "blink-cmp-conventional-commits";
version = "0-unstable-2026-02-04";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "disrupted";
repo = "blink-cmp-conventional-commits";
rev = "faa45344aab97aa33ece53938c4c3379760e61bd";
hash = "sha256-nbulCccWnugVodwm6C7Xlf9D/0cpKEBL3tmnH3S15WY=";
rev = "28f46593ef5e03ba7525bdf6075be0c56c6ceb55";
hash = "sha256-eRGq2bjr6kqFoT1s4P1MIA7nIEvRTYw4OFIJbS/JD60=";
};
meta.homepage = "https://github.com/disrupted/blink-cmp-conventional-commits/";
meta.hydraPlatforms = [ ];
@@ -1896,12 +1909,12 @@ final: prev: {
bluloco-nvim = buildVimPlugin {
pname = "bluloco.nvim";
version = "1.4.0-unstable-2026-04-04";
version = "1.4.0-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "uloco";
repo = "bluloco.nvim";
rev = "f1a6cb87e55cd377002f1648163f434fd9837ef5";
hash = "sha256-5atqaCBSn/pTjoCoi10L9MgpgozMqXb0qU3BME9UPpc=";
rev = "4daabf6a9e6b9ecdcb19e7c78e888be0bacd866c";
hash = "sha256-qmVneHlI7XKTyXrSJu+lWaX6YmGQero7nTKrWR/i99c=";
};
meta.homepage = "https://github.com/uloco/bluloco.nvim/";
meta.hydraPlatforms = [ ];
@@ -3309,6 +3322,19 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
codex-nvim = buildVimPlugin {
pname = "codex.nvim";
version = "1.1.0";
src = fetchFromGitHub {
owner = "johnseth97";
repo = "codex.nvim";
tag = "v1.1.0";
hash = "sha256-rx5/Iso5rWYfRTnQyZ8g16FCxqjj4FgWmG+r09ebVJc=";
};
meta.homepage = "https://github.com/johnseth97/codex.nvim/";
meta.hydraPlatforms = [ ];
};
codi-vim = buildVimPlugin {
pname = "codi.vim";
version = "0-unstable-2023-02-28";
@@ -3584,12 +3610,12 @@ final: prev: {
conform-nvim = buildVimPlugin {
pname = "conform.nvim";
version = "9.1.0-unstable-2026-03-10";
version = "9.1.0-unstable-2026-04-23";
src = fetchFromGitHub {
owner = "stevearc";
repo = "conform.nvim";
rev = "086a40dc7ed8242c03be9f47fbcee68699cc2395";
hash = "sha256-aJIUkAcFdaOWBQ3HNLLvhqALzch0BqPUZPtb2cmIeCE=";
rev = "dca1a190aa85f9065979ef35802fb77131911106";
hash = "sha256-pV7Yr2LSBDqKGeYoS4CWHGUSs8Yx4wsVXCXySt9yz0M=";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/stevearc/conform.nvim/";
@@ -4861,12 +4887,12 @@ final: prev: {
dracula-vim = buildVimPlugin {
pname = "dracula-vim";
version = "2.0.0-unstable-2026-04-13";
version = "2.0.0-unstable-2026-04-22";
src = fetchFromGitHub {
owner = "dracula";
repo = "vim";
rev = "07b144414730cc4cf4405ab840bf46c5fa12704b";
hash = "sha256-RWavKi3KvQI7N+qNks3EVUSmwCY73QvGNTpZElCxdkE=";
rev = "e7b91facff94bdf3a248df9b683119b84672256a";
hash = "sha256-OkLtrd6Cq7ZwF5r5/SBc9Uyp26q/gIgHLrVKLxboLCA=";
};
meta.homepage = "https://github.com/dracula/vim/";
meta.hydraPlatforms = [ ];
@@ -4926,12 +4952,12 @@ final: prev: {
easy-dotnet-nvim = buildVimPlugin {
pname = "easy-dotnet.nvim";
version = "0-unstable-2026-04-18";
version = "0-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "GustavEikaas";
repo = "easy-dotnet.nvim";
rev = "06cc3c7ffd02ef6c62dffea46d4f6e53f1962ef2";
hash = "sha256-+f1RvmFUWPpvw6EqOKmS0NBCwRgMX3mzPdF/DFUnEWM=";
rev = "1e6b569af3818a1665f14115aea7b0a920b179f6";
hash = "sha256-EkJoifIH8PtiXUSFpWQtQgP6a1LuWLbvwHBYH/80Qik=";
};
meta.homepage = "https://github.com/GustavEikaas/easy-dotnet.nvim/";
meta.hydraPlatforms = [ ];
@@ -5395,12 +5421,12 @@ final: prev: {
firenvim = buildVimPlugin {
pname = "firenvim";
version = "0.2.16-unstable-2026-04-16";
version = "0.2.16-unstable-2026-04-23";
src = fetchFromGitHub {
owner = "glacambre";
repo = "firenvim";
rev = "b68449b92dfea73a54e4c8f2307fc244a3a574bd";
hash = "sha256-XjpCYydSFSTw0sDwVHS7paDejaP2JafOWrupuurfFgE=";
rev = "69d3411d08d35bb9b3e84b9deaff4b9b078a30e3";
hash = "sha256-j1M41XD8gLMqXJK5Pk+yu6IbsUnRagyzlKM9nQ1ozp0=";
};
meta.homepage = "https://github.com/glacambre/firenvim/";
meta.hydraPlatforms = [ ];
@@ -6371,12 +6397,12 @@ final: prev: {
gruvbox-material-nvim = buildVimPlugin {
pname = "gruvbox-material.nvim";
version = "1.8.1";
version = "1.8.2";
src = fetchFromGitHub {
owner = "f4z3r";
repo = "gruvbox-material.nvim";
tag = "v1.8.1";
hash = "sha256-nNBV66GHG3Km92aWhFeo3HgjWQNdMQpIl4Kq08rEmPs=";
tag = "v1.8.2";
hash = "sha256-MTOAc4Z8wvAGz99dJy5181R/Uf7G/qToyPFYNDJHjB0=";
};
meta.homepage = "https://github.com/f4z3r/gruvbox-material.nvim/";
meta.hydraPlatforms = [ ];
@@ -6566,12 +6592,12 @@ final: prev: {
haskell-snippets-nvim = buildVimPlugin {
pname = "haskell-snippets.nvim";
version = "1.5.0-unstable-2026-04-13";
version = "1.5.0-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "mrcjkb";
repo = "haskell-snippets.nvim";
rev = "7a29db90a8803d937f2122efbff696d0f290b379";
hash = "sha256-OR7Fibl05kk6/2LsAoxya00TW0scgh3Uc4eSw5TaH58=";
rev = "11868addce601fdeed56097d48ff42abeec3dfe8";
hash = "sha256-Y4ZNYNb7shMQ8lTAx2/8De9KgbYq8Pf+6yQhHX6a4Ck=";
};
meta.homepage = "https://github.com/mrcjkb/haskell-snippets.nvim/";
meta.hydraPlatforms = [ ];
@@ -7280,6 +7306,32 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
isabelle-lsp-nvim = buildVimPlugin {
pname = "isabelle-lsp.nvim";
version = "0-unstable-2025-12-02";
src = fetchFromGitHub {
owner = "Treeniks";
repo = "isabelle-lsp.nvim";
rev = "3601b59d77cc4998de29f966ded7d4d959318be2";
hash = "sha256-2SijIavooMFft9S/fMcH/YE77wctAP0Oneg/YAR9+LM=";
};
meta.homepage = "https://github.com/Treeniks/isabelle-lsp.nvim/";
meta.hydraPlatforms = [ ];
};
isabelle-syn-nvim = buildVimPlugin {
pname = "isabelle-syn.nvim";
version = "0-unstable-2024-05-15";
src = fetchFromGitHub {
owner = "Treeniks";
repo = "isabelle-syn.nvim";
rev = "114b06dc34edf1707be7249b5a3815733e68d4c9";
hash = "sha256-f04jyExUwos9w89IeKbRdRMtWIsQYe0McAUoijq7mCA=";
};
meta.homepage = "https://github.com/Treeniks/isabelle-syn.nvim/";
meta.hydraPlatforms = [ ];
};
iswap-nvim = buildVimPlugin {
pname = "iswap.nvim";
version = "0-unstable-2026-03-25";
@@ -7462,14 +7514,27 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
just-nvim = buildVimPlugin {
pname = "just.nvim";
version = "1.0.0";
src = fetchFromGitHub {
owner = "nxuv";
repo = "just.nvim";
tag = "v1.0.0";
hash = "sha256-pwAlfwPFnWD2qfBAuhLxSoCQoOZD7gQHEy4Nnt0GOqE=";
};
meta.homepage = "https://github.com/nxuv/just.nvim/";
meta.hydraPlatforms = [ ];
};
kanagawa-nvim = buildVimPlugin {
pname = "kanagawa.nvim";
version = "0-unstable-2025-10-15";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "rebelot";
repo = "kanagawa.nvim";
rev = "aef7f5cec0a40dbe7f3304214850c472e2264b10";
hash = "sha256-nHcQWTX4x4ala6+fvh4EWRVcZMNk5jZiZAwWhw03ExE=";
rev = "8ad3b4cdcc804b332c32db8f9743667e1bb82b99";
hash = "sha256-vAq9ZiG3s4x/xFSKt9/o40pptj2y7S8DQqs1dJEdhVU=";
};
meta.homepage = "https://github.com/rebelot/kanagawa.nvim/";
meta.hydraPlatforms = [ ];
@@ -7777,12 +7842,12 @@ final: prev: {
lean-nvim = buildVimPlugin {
pname = "lean.nvim";
version = "2025.10.1-unstable-2026-04-19";
version = "2026.4.1";
src = fetchFromGitHub {
owner = "Julian";
repo = "lean.nvim";
rev = "1be79c2c60c24bc5e4ac31d4c25bbae533a8bc8f";
hash = "sha256-UwVXVulNayx9vJijgFQullXM9JUjUCXtNd7EKp1P9u4=";
tag = "v2026.4.1";
hash = "sha256-AYClc7+z+0h5QfVGPGr7ZrzPuaD+IAMtHT/3ZnbSVLE=";
};
meta.homepage = "https://github.com/Julian/lean.nvim/";
meta.hydraPlatforms = [ ];
@@ -7816,11 +7881,11 @@ final: prev: {
leap-nvim = buildVimPlugin {
pname = "leap.nvim";
version = "0-unstable-2026-03-31";
version = "0-unstable-2026-04-20";
src = fetchgit {
url = "https://codeberg.org/andyg/leap.nvim/";
rev = "b960d5038c5c505c52e56a54490f9bbb1f0e6ef6";
hash = "sha256-3xL4cwZdrRX0pCu/oqk0hz8zOeg/VRwn5cB9I9cG4DI=";
rev = "ce3cf75200ae148d75563088f435389f9e4100fd";
hash = "sha256-f3LwrPetVujz/ji1kWwOGuYjNiii/+E68I6RPnzXAIY=";
};
meta.homepage = "https://codeberg.org/andyg/leap.nvim/";
meta.hydraPlatforms = [ ];
@@ -8062,12 +8127,12 @@ final: prev: {
linediff-vim = buildVimPlugin {
pname = "linediff.vim";
version = "0.3.0-unstable-2025-11-28";
version = "0.3.0-unstable-2026-04-17";
src = fetchFromGitHub {
owner = "AndrewRadev";
repo = "linediff.vim";
rev = "29fa617fc10307a1e0ae82a8761114e465d17b06";
hash = "sha256-53WWr63+89BYsE8Tyj216msCCRiitcnp7aYH+hUvQyI=";
rev = "c3780609769a93f4f59421b6324355f37e0ee6c5";
hash = "sha256-27Lu2U+/XELoT7yV4r0wqsFW/w8Z1BA4UDQslq1dOg4=";
};
meta.homepage = "https://github.com/AndrewRadev/linediff.vim/";
meta.hydraPlatforms = [ ];
@@ -8205,12 +8270,12 @@ final: prev: {
live-share-nvim = buildVimPlugin {
pname = "live-share.nvim";
version = "2.1.0";
version = "2.1.3";
src = fetchFromGitHub {
owner = "azratul";
repo = "live-share.nvim";
tag = "v2.1.0";
hash = "sha256-TxjS68iaat+zgpF4L7Wp7y7PgW4mrc6MrvxxQBK3zsk=";
tag = "v2.1.3";
hash = "sha256-EXVnUcutSz3xfjTHjYr45nBWm6JP68PoGE07ooYsywA=";
};
meta.homepage = "https://github.com/azratul/live-share.nvim/";
meta.hydraPlatforms = [ ];
@@ -8425,12 +8490,12 @@ final: prev: {
lspsaga-nvim = buildVimPlugin {
pname = "lspsaga.nvim";
version = "0-unstable-2026-03-03";
version = "0-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "nvimdev";
repo = "lspsaga.nvim";
rev = "562d9724e3869ffd1801c572dd149cc9f8d0cc36";
hash = "sha256-5jqMObzXwveN4+p4qf/kZJcUlM964rtS3yX8nndMQzk=";
rev = "c532fb86c3d211c5829ad58d2a0783012739bb65";
hash = "sha256-oFzbEkY/WKT7jbwGxeKnbQXgnY8kSmH/UsjljXozBWU=";
};
meta.homepage = "https://github.com/nvimdev/lspsaga.nvim/";
meta.hydraPlatforms = [ ];
@@ -8686,12 +8751,12 @@ final: prev: {
mason-nvim = buildVimPlugin {
pname = "mason.nvim";
version = "2.2.1-unstable-2026-04-06";
version = "2.2.1-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "mason-org";
repo = "mason.nvim";
rev = "b03fb0f20bc1d43daf558cda981a2be22e73ac42";
hash = "sha256-2R31RsqYChWW8nyu0ovryFd8sO9iWeqBnydL6NhRpQ0=";
rev = "12ddd182d9efbdc848b540f16484a583d52da0fb";
hash = "sha256-Oq93aLhK/fowReSAeg9nnXnLrpTpBek0j5uNX1FW1Vs=";
};
meta.homepage = "https://github.com/mason-org/mason.nvim/";
meta.hydraPlatforms = [ ];
@@ -9037,12 +9102,12 @@ final: prev: {
mini-completion = buildVimPlugin {
pname = "mini.completion";
version = "0.17.0-unstable-2026-04-17";
version = "0.17.0-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.completion";
rev = "e934b46f6471a3bd0cd37fc06d0df198b9711882";
hash = "sha256-h7IUnYdqjVHldagQXCmC7UI8oO4+2fmtFfdCln1pa6A=";
rev = "667d94669be66043123cac44e7c5d65a31657732";
hash = "sha256-Y2cYv06QUvKWRoF/05+ajJ41z/4D6QZAuxjNCFAtu5E=";
};
meta.homepage = "https://github.com/nvim-mini/mini.completion/";
meta.hydraPlatforms = [ ];
@@ -9297,12 +9362,12 @@ final: prev: {
mini-nvim = buildVimPlugin {
pname = "mini.nvim";
version = "0.17.0-unstable-2026-04-17";
version = "0.17.0-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "nvim-mini";
repo = "mini.nvim";
rev = "418ef4930ddabe80f449c6f1323f8b6abb172d1c";
hash = "sha256-bHEFu4XZI9QHP41h11sSNgRG43PDSkdgTyzmJt64gLk=";
rev = "5849ef04c32a6a8e55957b946c0a275801d87530";
hash = "sha256-itvNBJwakDOeIUaEZS5qSeI3L//kve3ub7r16EUvgi0=";
};
meta.homepage = "https://github.com/nvim-mini/mini.nvim/";
meta.hydraPlatforms = [ ];
@@ -9479,12 +9544,12 @@ final: prev: {
minuet-ai-nvim = buildVimPlugin {
pname = "minuet-ai.nvim";
version = "0.8.0-unstable-2026-04-18";
version = "0.8.0-unstable-2026-04-23";
src = fetchFromGitHub {
owner = "milanglacier";
repo = "minuet-ai.nvim";
rev = "ee03326381c93f6417fa66aeb2ca85a26c0706e7";
hash = "sha256-41vUpNnyKdc4MvOyFVSAgR1/EEjHgKNixAWXaLdMbsQ=";
rev = "173d8c9451504cdf93ce172f710487d3c6191ce8";
hash = "sha256-4tBdnziMUCL8Cgq5LFO5LSbWB8Kk5Brq9vKRgq38jOw=";
};
meta.homepage = "https://github.com/milanglacier/minuet-ai.nvim/";
meta.hydraPlatforms = [ ];
@@ -9973,12 +10038,12 @@ final: prev: {
neo-tree-nvim = buildVimPlugin {
pname = "neo-tree.nvim";
version = "2.71";
version = "3.40.0";
src = fetchFromGitHub {
owner = "nvim-neo-tree";
repo = "neo-tree.nvim";
tag = "v2.71";
hash = "sha256-w4D+iq1/su5LtCsknvGB6wDlohx2WVm0iRvKagL4H5E=";
tag = "3.40.0";
hash = "sha256-/TNl/IX81qr7Mcoy0dhF3bcsewXEnPSy2n+dm31eyyw=";
};
meta.homepage = "https://github.com/nvim-neo-tree/neo-tree.nvim/";
meta.hydraPlatforms = [ ];
@@ -9999,12 +10064,12 @@ final: prev: {
neoconf-nvim = buildVimPlugin {
pname = "neoconf.nvim";
version = "1.4.0-unstable-2026-04-15";
version = "1.4.0-unstable-2026-04-23";
src = fetchFromGitHub {
owner = "folke";
repo = "neoconf.nvim";
rev = "ecdb0c9bc3f3373e11be4c97e461d16b52d532d0";
hash = "sha256-F3ui8hSN/UPt4UjDUziXyVYUEtFVaTVETjOn/xRm7nU=";
rev = "751c246c6c1780b94b063918759f352480e3db21";
hash = "sha256-XuWMVLu1FFmcGnmDuomKYSSBD/yOUa6Za5UE7O52y2w=";
};
meta.homepage = "https://github.com/folke/neoconf.nvim/";
meta.hydraPlatforms = [ ];
@@ -10077,12 +10142,12 @@ final: prev: {
neogit = buildVimPlugin {
pname = "neogit";
version = "3.0.0-unstable-2026-04-17";
version = "3.0.0-unstable-2026-04-23";
src = fetchFromGitHub {
owner = "NeogitOrg";
repo = "neogit";
rev = "e906fce7e44ae562f06345be99a7db02f8315236";
hash = "sha256-/uIp7X8drHFQT8DNuiSxFGga71HUY59PCSTguyJvaeo=";
rev = "2d94da0032e201865a5b65a6bc008dd6fce8f52e";
hash = "sha256-dCndB3pvCU7D80aU/5nOloxH2lYgGdC0Qtei8cRf7RU=";
};
meta.homepage = "https://github.com/NeogitOrg/neogit/";
meta.hydraPlatforms = [ ];
@@ -10231,6 +10296,19 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
neotab-nvim = buildVimPlugin {
pname = "neotab.nvim";
version = "0-unstable-2025-08-04";
src = fetchFromGitHub {
owner = "kawre";
repo = "neotab.nvim";
rev = "e99d3e28c5a2066d2d368dfe4ef3827c8d75d337";
hash = "sha256-pSLvpKqfi1hQrFAYmXTOUOYERtnr79M23z5so2JOGhE=";
};
meta.homepage = "https://github.com/kawre/neotab.nvim/";
meta.hydraPlatforms = [ ];
};
neoterm = buildVimPlugin {
pname = "neoterm";
version = "0-unstable-2023-03-09";
@@ -10392,12 +10470,12 @@ final: prev: {
neotest-haskell = buildVimPlugin {
pname = "neotest-haskell";
version = "3.0.1-unstable-2026-04-13";
version = "3.0.1-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "MrcJkb";
repo = "neotest-haskell";
rev = "84650446b9207ef5e19d2ade50fcda278bdfbae7";
hash = "sha256-/GDhQhMCOUq0um9BPdDIfxIXUonV5DdyMKCn+JpaAAc=";
rev = "cf7816eb183c8333b58abb63fd4cc156401d9d31";
hash = "sha256-/rqau8v3CWaPjCMQjWB4bWCeqOaBHdAn05Nlw3w1WSc=";
};
meta.homepage = "https://github.com/MrcJkb/neotest-haskell/";
meta.hydraPlatforms = [ ];
@@ -10405,12 +10483,12 @@ final: prev: {
neotest-java = buildVimPlugin {
pname = "neotest-java";
version = "0.37.0";
version = "0.37.1";
src = fetchFromGitHub {
owner = "rcasia";
repo = "neotest-java";
tag = "v0.37.0";
hash = "sha256-PuXYAKkg+KM9dkSk/br7GDjXzmgqhteJepjbt9ZJGO8=";
tag = "v0.37.1";
hash = "sha256-t+nqylLLHITU8li1cOl97jFKkZRmvmDbSAwvmv1yk+M=";
};
meta.homepage = "https://github.com/rcasia/neotest-java/";
meta.hydraPlatforms = [ ];
@@ -10833,12 +10911,12 @@ final: prev: {
nightfly = buildVimPlugin {
pname = "nightfly";
version = "0-unstable-2026-04-02";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "bluz71";
repo = "vim-nightfly-colors";
rev = "250ee0eb4975e59a277f50cc03c980eef27fb483";
hash = "sha256-FkyUVuOydxBWRqBUb2JZrHmFL5epDG2U3BSqd865wcE=";
rev = "caaba387a4a50cf08791395acc4a5b7363367cff";
hash = "sha256-zHT0Py7dePXfZ8duOfLxh/3K0ZaCrrB60uJ+asC/rII=";
};
meta.homepage = "https://github.com/bluz71/vim-nightfly-colors/";
meta.hydraPlatforms = [ ];
@@ -11789,6 +11867,19 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
nvim-justice = buildVimPlugin {
pname = "nvim-justice";
version = "0-unstable-2026-04-13";
src = fetchFromGitHub {
owner = "chrisgrieser";
repo = "nvim-justice";
rev = "a3e0d2d73d1748d1bed45e6b1797fbc73961e53f";
hash = "sha256-gT+vPt9BWe1AylFqbZsoEXL8cXSpMjRdiY44Cxalwcg=";
};
meta.homepage = "https://github.com/chrisgrieser/nvim-justice/";
meta.hydraPlatforms = [ ];
};
nvim-k8s-crd = buildVimPlugin {
pname = "nvim-k8s-crd";
version = "0-unstable-2026-02-16";
@@ -11972,12 +12063,12 @@ final: prev: {
nvim-metals = buildVimPlugin {
pname = "nvim-metals";
version = "0.10.x-unstable-2026-04-10";
version = "0.10.x-unstable-2026-04-22";
src = fetchFromGitHub {
owner = "scalameta";
repo = "nvim-metals";
rev = "6970d6036218db6545f3c295d0106cc8de6d7161";
hash = "sha256-RY+UhnwIjWuMU9WOG4a1JvBiJ9RWZ2fUxFDnuzDR+jw=";
rev = "3c6ef5114fd46127c517e58d7e8e4dfc1f78dac3";
hash = "sha256-9ZernsWN0j185b2KeMvV+CAaN4+NgUfocUG8Ot1fo/4=";
};
meta.homepage = "https://github.com/scalameta/nvim-metals/";
meta.hydraPlatforms = [ ];
@@ -12295,6 +12386,19 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
nvim-sioyek-highlights = buildVimPlugin {
pname = "nvim-sioyek-highlights";
version = "0-unstable-2026-02-06";
src = fetchFromGitHub {
owner = "jbuck95";
repo = "nvim-sioyek-highlights";
rev = "b8ab0a71b24c052cebaed97afe376b01fba19bf0";
hash = "sha256-x2Q+96/YEky8fdy4CZ/QPwcLjaOLmwmtpWiYMnS657A=";
};
meta.homepage = "https://github.com/jbuck95/nvim-sioyek-highlights/";
meta.hydraPlatforms = [ ];
};
nvim-snippets = buildVimPlugin {
pname = "nvim-snippets";
version = "1.0.0-unstable-2024-07-10";
@@ -12414,12 +12518,12 @@ final: prev: {
nvim-tinygit = buildVimPlugin {
pname = "nvim-tinygit";
version = "1.0-unstable-2026-04-13";
version = "1.0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "chrisgrieser";
repo = "nvim-tinygit";
rev = "59b9a750a7a0710552829d2a1dfcaa5304433359";
hash = "sha256-/1NCsig8s554HtcSAdsfmPj+KkNNnIVNu7iBN8Vm04Q=";
rev = "f12990601dfa63c623049b470dc306ca905064c8";
hash = "sha256-NNdwBJjVlCwR3VzN7JRMhRRNHENRO9SXNnUUr4zZ8Eg=";
};
meta.homepage = "https://github.com/chrisgrieser/nvim-tinygit/";
meta.hydraPlatforms = [ ];
@@ -12817,12 +12921,12 @@ final: prev: {
obsidian-nvim = buildVimPlugin {
pname = "obsidian.nvim";
version = "3.16.2-unstable-2026-04-18";
version = "3.16.2-unstable-2026-04-22";
src = fetchFromGitHub {
owner = "obsidian-nvim";
repo = "obsidian.nvim";
rev = "d6c0e5bc30937df0657c9953d135d0ebb3af7e00";
hash = "sha256-ZFFtVH/NswfManJ+o5x3oLhy/foQzmVj29O7UEBVkMs=";
rev = "af9857e4993e0adddb897f09c2805b44a0d913ea";
hash = "sha256-zajt8vt/bLMCqgSgjMj/MiUFTU3TNAnr25YM+J+qg2M=";
};
meta.homepage = "https://github.com/obsidian-nvim/obsidian.nvim/";
meta.hydraPlatforms = [ ];
@@ -12869,12 +12973,12 @@ final: prev: {
octo-nvim = buildVimPlugin {
pname = "octo.nvim";
version = "0-unstable-2026-04-16";
version = "0-unstable-2026-04-22";
src = fetchFromGitHub {
owner = "pwntester";
repo = "octo.nvim";
rev = "65550fa020775fb18e6eacab86b80145560bfd9c";
hash = "sha256-VUm7BQ5g4VyKWAZTOhxt19JAea+DLrMltt01jbO6LUg=";
rev = "a8ad0646e6f9d01ad0a6fbd3ddca0fd715067d34";
hash = "sha256-oEiQyABAJhF6vgOU2PPPILqioaVF95gMJaQlxCtYEXM=";
};
meta.homepage = "https://github.com/pwntester/octo.nvim/";
meta.hydraPlatforms = [ ];
@@ -13507,12 +13611,12 @@ final: prev: {
pi-nvim = buildVimPlugin {
pname = "pi.nvim";
version = "0-unstable-2026-03-26";
version = "0-unstable-2026-04-22";
src = fetchFromGitHub {
owner = "pablopunk";
repo = "pi.nvim";
rev = "cc2377f88c99871bc44b45490ef9d91a5d1c31e1";
hash = "sha256-xguHPNrQ16ddWbnxR38Zm6gtDP63b93pxR4bsbN9YZE=";
rev = "9a4425e3e601e7387b32065d78b812bc7d5603ad";
hash = "sha256-e5LLscgEBuZHIfi+clojp9vfiofvXdU5C7BuhQB7vfw=";
};
meta.homepage = "https://github.com/pablopunk/pi.nvim/";
meta.hydraPlatforms = [ ];
@@ -13716,12 +13820,12 @@ final: prev: {
project-nvim = buildVimPlugin {
pname = "project.nvim";
version = "3.1.0-1";
version = "3.2.1-1";
src = fetchFromGitHub {
owner = "DrKJeff16";
repo = "project.nvim";
tag = "v3.1.0-1";
hash = "sha256-i3nGUb/tULq28MmiYk3C4P+FoVFSZaaO5XWx4kuTa0I=";
tag = "v3.2.1-1";
hash = "sha256-vZWOH2fFmwdlU/rdnLWywx+XsuuH+X5x0DN8OHjZd6c=";
};
meta.homepage = "https://github.com/DrKJeff16/project.nvim/";
meta.hydraPlatforms = [ ];
@@ -13860,12 +13964,12 @@ final: prev: {
quarto-nvim = buildVimPlugin {
pname = "quarto-nvim";
version = "2.0.1-unstable-2026-01-29";
version = "2.1.0";
src = fetchFromGitHub {
owner = "quarto-dev";
repo = "quarto-nvim";
rev = "d923bb7cfc2bde41143e1c531c28190f0fade3a2";
hash = "sha256-UGrbQtmJIQsOb37/IcrFxGnAfIiCHGsmMFFSkitNK9o=";
tag = "v2.1.0";
hash = "sha256-YgRiUnZ1MH5uuwNC3V9ZntphuKH3rIOlcdp+5C4zonk=";
};
meta.homepage = "https://github.com/quarto-dev/quarto-nvim/";
meta.hydraPlatforms = [ ];
@@ -14067,12 +14171,12 @@ final: prev: {
refactoring-nvim = buildVimPlugin {
pname = "refactoring.nvim";
version = "0-unstable-2025-10-21";
version = "0-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "theprimeagen";
repo = "refactoring.nvim";
rev = "6784b54587e6d8a6b9ea199318512170ffb9e418";
hash = "sha256-KFn1f0Va6eFbeOYxc40lN1iWL8WAwnm/H5l46o4JgvI=";
rev = "f06ac3d457128f9d512103399b367c4be49a2421";
hash = "sha256-mZC2N8Udvep75/FeSRn2ZmEmE2/SNxFHw+W5QJHduLw=";
};
meta.homepage = "https://github.com/theprimeagen/refactoring.nvim/";
meta.hydraPlatforms = [ ];
@@ -14158,12 +14262,12 @@ final: prev: {
render-markdown-nvim = buildVimPlugin {
pname = "render-markdown.nvim";
version = "8.12.0-unstable-2026-04-12";
version = "8.12.0-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "MeanderingProgrammer";
repo = "render-markdown.nvim";
rev = "0fd43fb4b1f073931c4b481f5f3b7cea3749e190";
hash = "sha256-wCzOiTKJ8F2Fj82LYRSoG1Ix0KDBSdQokzNGVmbu2oo=";
rev = "d67113f11384c0dad96fced2f7b91f1fc811e97f";
hash = "sha256-c+2KzCACUnb/RkkLsI9uxvJNLP0PDgmuPSUlO/XgGBw=";
};
meta.homepage = "https://github.com/MeanderingProgrammer/render-markdown.nvim/";
meta.hydraPlatforms = [ ];
@@ -14289,12 +14393,12 @@ final: prev: {
roslyn-nvim = buildVimPlugin {
pname = "roslyn.nvim";
version = "0-unstable-2026-04-16";
version = "0-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "seblyng";
repo = "roslyn.nvim";
rev = "6a5e60a7c25d9ce0835aa9c69379f1c92e0a9d56";
hash = "sha256-Zoi5RxWJY96C4D3k9iwU2XJb8LKUFCdq5SDHWrfa5vw=";
rev = "b62d1a588765f0aa1b46ed260252c9e456408835";
hash = "sha256-j5+Kg4B1flk4TwkZKRDW7tHbaoUyE5dKGypXsd9+qSw=";
};
meta.homepage = "https://github.com/seblyng/roslyn.nvim/";
meta.hydraPlatforms = [ ];
@@ -14445,12 +14549,12 @@ final: prev: {
scnvim = buildVimPlugin {
pname = "scnvim";
version = "0-unstable-2026-04-13";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "davidgranstrom";
repo = "scnvim";
rev = "7e0ff9ed57c58dfde0341d1e695fe54a0904e2d8";
hash = "sha256-PaIYXaPtwen/SWdLADsJDx7NI/OoTAjUa24AZYJyNBA=";
rev = "ec347b24168ac922de4dcddc181efd2fcdcfa0d0";
hash = "sha256-cqZF3b+DkOQUOSU502vGQx8RNzH4b97B9zqHO9v8IBI=";
};
meta.homepage = "https://github.com/davidgranstrom/scnvim/";
meta.hydraPlatforms = [ ];
@@ -14640,12 +14744,12 @@ final: prev: {
sidekick-nvim = buildVimPlugin {
pname = "sidekick.nvim";
version = "2.3.0-unstable-2026-03-24";
version = "2.3.0-unstable-2026-04-22";
src = fetchFromGitHub {
owner = "folke";
repo = "sidekick.nvim";
rev = "17447a05f9385e5f8372b61530f6f9329cb82421";
hash = "sha256-scCYymquGaT9/e7nU2kuyiwFutKfAq8pGQQsOWK+7rM=";
rev = "208e1c5b8170c01fd1d07df0139322a76479b235";
hash = "sha256-I1YuIXJHP7JfETwOer6B7QDLMZGG/X59zXopb4nPel4=";
};
meta.homepage = "https://github.com/folke/sidekick.nvim/";
meta.hydraPlatforms = [ ];
@@ -14849,12 +14953,12 @@ final: prev: {
solarized-osaka-nvim = buildVimPlugin {
pname = "solarized-osaka.nvim";
version = "0-unstable-2026-02-04";
version = "0-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "craftzdog";
repo = "solarized-osaka.nvim";
rev = "f0c2f0ba0bd56108d53c9bfae4bb28ff6c67bbdb";
hash = "sha256-0AB2+ZuhlpuBFF5xmYXr1sIOIctY4b8jgcghqXZSc70=";
rev = "a261ee90fb3e5e82660567e4874d384e996afa4f";
hash = "sha256-b8gZM9/HFi4q+mWpEijO8fCBuu1eslGSNPgZOyjXMmc=";
};
meta.homepage = "https://github.com/craftzdog/solarized-osaka.nvim/";
meta.hydraPlatforms = [ ];
@@ -16362,12 +16466,12 @@ final: prev: {
tiny-inline-diagnostic-nvim = buildVimPlugin {
pname = "tiny-inline-diagnostic.nvim";
version = "0-unstable-2026-04-17";
version = "0-unstable-2026-04-22";
src = fetchFromGitHub {
owner = "rachartier";
repo = "tiny-inline-diagnostic.nvim";
rev = "b3b91e086795c036ecfe70429b72b26bcb302c91";
hash = "sha256-yYxwyXuOIb+Ac5f8OonwsJny00bqfL7cWDtcjsVtP5o=";
rev = "147af4e49f51dd48f41972de26552872b8ba7b25";
hash = "sha256-LpZuRNGSK8AHLTIPIWoQlGot89qubFRL/RZ+EMs4bnQ=";
};
meta.homepage = "https://github.com/rachartier/tiny-inline-diagnostic.nvim/";
meta.hydraPlatforms = [ ];
@@ -16899,12 +17003,12 @@ final: prev: {
ultisnips = buildVimPlugin {
pname = "ultisnips";
version = "3.2-unstable-2026-04-18";
version = "3.2-unstable-2026-04-19";
src = fetchFromGitHub {
owner = "SirVer";
repo = "ultisnips";
rev = "724e506c6c852ea9bd60720d878a09a55eb3eb74";
hash = "sha256-HhTFCWpE5ljk2M4z9/XHBobLMIW6DO9mpVF5BEfY624=";
rev = "10fc6cb2a48aa24d72894f71fceaa43a0432f287";
hash = "sha256-mSifyCvjefyl0snph+NAdI8alU2MeB5BozWHvmgpqVo=";
};
meta.homepage = "https://github.com/SirVer/ultisnips/";
meta.hydraPlatforms = [ ];
@@ -17094,12 +17198,12 @@ final: prev: {
vague-nvim = buildVimPlugin {
pname = "vague.nvim";
version = "2.0.0-unstable-2026-04-09";
version = "2.0.0-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "vague-theme";
repo = "vague.nvim";
rev = "8751181a1aa431b4e8983b0a183afef5cbc08381";
hash = "sha256-89Z6MzAFcZeUhMfU1amR4sxakcpsxlJxT3s6XateaBo=";
rev = "fd58046b9d64259d9785e4aeb6d6f494c6943cad";
hash = "sha256-wAjzCkTMoxEP6Xc38I5lY3tSwEgU67w/bYPYxmaGaZA=";
};
meta.homepage = "https://github.com/vague-theme/vague.nvim/";
meta.hydraPlatforms = [ ];
@@ -17549,12 +17653,12 @@ final: prev: {
vim-airline = buildVimPlugin {
pname = "vim-airline";
version = "0.11-unstable-2026-04-13";
version = "0.11-unstable-2026-04-22";
src = fetchFromGitHub {
owner = "vim-airline";
repo = "vim-airline";
rev = "609e5c0ee171c370ad727b0b833e66fd34772aeb";
hash = "sha256-PgS2m3vqncalNNSeXpYb0x2MfEdM7eUh6uGWyM6yHsA=";
rev = "f6d9cc6b4a1f0a4f7a1c33bc7997cf446b6d77ba";
hash = "sha256-gHdp2+Vd0AITx/0LSrwPRM6zOhhCyl0uMe8hS2IHnRc=";
};
meta.homepage = "https://github.com/vim-airline/vim-airline/";
meta.hydraPlatforms = [ ];
@@ -20372,11 +20476,11 @@ final: prev: {
vim-markbar = buildVimPlugin {
pname = "vim-markbar";
version = "0-unstable-2024-05-10";
version = "0-unstable-2026-04-22";
src = fetchFromGitHub {
owner = "Yilin-Yang";
repo = "vim-markbar";
rev = "9f5a948d44652074bf2b90d3da6a400d8a369ba5";
rev = "54cd772352b4da4506ce23e971f46f78446f0b6c";
hash = "sha256-dGMO0vbi4LMQeMvA/NI98S/CsDT7LKDPrLP9NFkMZOQ=";
};
meta.homepage = "https://github.com/Yilin-Yang/vim-markbar/";
@@ -20554,12 +20658,12 @@ final: prev: {
vim-moonfly-colors = buildVimPlugin {
pname = "vim-moonfly-colors";
version = "0-unstable-2026-04-02";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "bluz71";
repo = "vim-moonfly-colors";
rev = "43d8eb9dd2a1154dd8259ee3ce37cbbdb28c405c";
hash = "sha256-jyZKY2N0ix53x5xhYo+B31G02fKcxhYkSGlJ3VFA2Ng=";
rev = "ed33cb0e0edfced6e86e782d51f23e67232ad4a9";
hash = "sha256-xFEI7cn5X3E90X3Z7njTg5/nFXXECJxPYmitfr+29VA=";
};
meta.homepage = "https://github.com/bluz71/vim-moonfly-colors/";
meta.hydraPlatforms = [ ];
@@ -23727,12 +23831,12 @@ final: prev: {
yazi-nvim = buildVimPlugin {
pname = "yazi.nvim";
version = "13.1.5-unstable-2026-04-19";
version = "13.1.5-unstable-2026-04-22";
src = fetchFromGitHub {
owner = "mikavilpas";
repo = "yazi.nvim";
rev = "bb69f7fc634a9566edba5fc0da3a2025d7ffbae0";
hash = "sha256-WHp/HM4AN2kZiPs7sOIAlBWM1H7KUgFGPEEioWlxFQE=";
rev = "d34b366517a21fb2366e8ac393fc903008345173";
hash = "sha256-SjWgNlb8raCDQ7E3lgHnTwl0wFTibxxKV4YcCeX0qPE=";
};
meta.homepage = "https://github.com/mikavilpas/yazi.nvim/";
meta.hydraPlatforms = [ ];
@@ -11,13 +11,13 @@
}:
vimUtils.buildVimPlugin rec {
pname = "codediff.nvim";
version = "2.43.10";
version = "2.43.15";
src = fetchFromGitHub {
owner = "esmuellert";
repo = "codediff.nvim";
tag = "v${version}";
hash = "sha256-iiDf5rbRHJePlv8kBtAID8qVGNBCKi1iipQ9nmMXI18=";
hash = "sha256-gaPLjH33+nBgpSZJ8b/4aneodt8wg+Jy44yXAjemToA=";
};
dependencies = [ vimPlugins.nui-nvim ];
@@ -227,6 +227,12 @@ assertNoAdditions {
checkInputs = [ self.astrocore ];
};
async-nvim = super.async-nvim.overrideAttrs {
nvimSkipModules = [
"docgen"
];
};
asyncrun-vim = super.asyncrun-vim.overrideAttrs {
# Optional toggleterm integration
checkInputs = [ self.toggleterm-nvim ];
@@ -1581,6 +1587,17 @@ assertNoAdditions {
passthru.python3Dependencies = ps: [ ps.jupytext ];
};
just-nvim = super.just-nvim.overrideAttrs {
checkInputs = with self; [
fidget-nvim
nvim-notify
telescope-nvim
];
dependencies = with self; [
plenary-nvim
];
};
kanagawa-paper-nvim = super.kanagawa-paper-nvim.overrideAttrs {
nvimSkipModules = [
# skipping wezterm theme switcher since it relies on a wezterm module
@@ -3228,7 +3245,7 @@ assertNoAdditions {
refactoring-nvim = super.refactoring-nvim.overrideAttrs {
dependencies = with self; [
plenary-nvim
async-nvim
];
};
@@ -218,7 +218,7 @@ let
paths = allGrammars;
};
allAndOptPluginNames = map (plugin: plugin.pname) (allPlugins ++ opt);
allAndOptPluginNames = map (plugin: plugin.pname or null) (allPlugins ++ opt);
packdirStart = vimFarm "pack/${packageName}/start" "packdir-start" (
if allGrammars != [ ] then allPlugins ++ [ allGrammarsSymlinked ] else allPlugins
@@ -78,6 +78,7 @@ https://github.com/AstroNvim/astrocore/,,
https://github.com/AstroNvim/astrolsp/,,
https://github.com/AstroNvim/astrotheme/,,
https://github.com/AstroNvim/astroui/,,
https://github.com/lewis6991/async.nvim/,,
https://github.com/prabirshrestha/async.vim/,,
https://github.com/prabirshrestha/asyncomplete-buffer.vim/,,
https://github.com/prabirshrestha/asyncomplete-file.vim/,,
@@ -253,6 +254,7 @@ https://github.com/franco-ruggeri/codecompanion-spinner.nvim/,,
https://github.com/olimorris/codecompanion.nvim/,,
https://github.com/mrjones2014/codesettings.nvim/,,
https://github.com/gorbit99/codewindow.nvim/,,
https://github.com/johnseth97/codex.nvim/,,
https://github.com/metakirby5/codi.vim/,,
https://github.com/archseer/colibri.vim/,,
https://github.com/tjdevries/colorbuddy.nvim/,,
@@ -558,6 +560,8 @@ https://github.com/ajbucci/ipynb.nvim/,,
https://github.com/twerth/ir_black/,,
https://github.com/Vigemus/iron.nvim/,,
https://github.com/haya14busa/is.vim/,,
https://github.com/Treeniks/isabelle-lsp.nvim/,,
https://github.com/Treeniks/isabelle-syn.nvim/,,
https://github.com/mizlan/iswap.nvim/,,
https://github.com/vim-scripts/jdaddy.vim/,,
https://github.com/mahyarmirrashed/jdd.nvim/,,
@@ -572,6 +576,7 @@ https://git.myzel394.app/Myzel394/jsonfly.nvim,,
https://github.com/julelang/jule.nvim/,,
https://github.com/JuliaEditorSupport/julia-vim/,,
https://github.com/GCBallesteros/jupytext.nvim/,,
https://github.com/nxuv/just.nvim/,,
https://github.com/thesimonho/kanagawa-paper.nvim/,,
https://github.com/rebelot/kanagawa.nvim/,,
https://github.com/webhooked/kanso.nvim/,,
@@ -785,6 +790,7 @@ https://github.com/nvim-neorg/neorg-telescope/,,
https://github.com/karb94/neoscroll.nvim/,,
https://github.com/Shougo/neosnippet-snippets/,,
https://github.com/Shougo/neosnippet.vim/,,
https://github.com/kawre/neotab.nvim/,,
https://github.com/kassio/neoterm/,,
https://github.com/rcasia/neotest-bash/,,
https://github.com/orjangj/neotest-ctest/,,
@@ -905,6 +911,7 @@ https://codeberg.org/mfussenegger/nvim-jdtls/,,
https://github.com/gennaro-tedesco/nvim-jqx/,,
https://gitlab.com/usmcamp0811/nvim-julia-autotest,,
https://github.com/yorickpeterse/nvim-jump/,,
https://github.com/chrisgrieser/nvim-justice/,,
https://github.com/anasinnyk/nvim-k8s-crd/,,
https://github.com/ethanholz/nvim-lastplace/,,
https://github.com/kosayoda/nvim-lightbulb/,,
@@ -944,6 +951,7 @@ https://github.com/petertriho/nvim-scrollbar/,,
https://github.com/dstein64/nvim-scrollview/,,
https://github.com/s1n7ax/nvim-search-and-replace/,,
https://github.com/michaelrommel/nvim-silicon/,,
https://github.com/jbuck95/nvim-sioyek-highlights/,,
https://github.com/garymjr/nvim-snippets/,,
https://github.com/dcampos/nvim-snippy/,,
https://github.com/ishan9299/nvim-solarized-lua/,,
@@ -8,8 +8,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "claude-code";
publisher = "anthropic";
version = "2.1.114";
hash = "sha256-rcEbeYsyhbhh5wj6Mo3kz2+K3uZe5XMBKpwmSaB9Pgc=";
version = "2.1.119";
hash = "sha256-/KqOJ8dvv6PhQJyfuOFEgKx6U8hH/WoUnocmWxsLLUk=";
};
postInstall = ''
@@ -1346,8 +1346,8 @@ let
mktplcRef = {
publisher = "discloud";
name = "discloud";
version = "2.28.5";
hash = "sha256-G5WgFSrmQOOtsDFfmJaJxvgbKfnpQSmMf+xAJeuhvhU=";
version = "2.28.7";
hash = "sha256-0RCuCZXDJ9svmI9Kc6vBE/l0f33aB3BXCFuHLFpa8nI=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/discloud.discloud/changelog";
@@ -1375,8 +1375,8 @@ let
mktplcRef = {
name = "competitive-programming-helper";
publisher = "DivyanshuAgrawal";
version = "2025.12.1766739309";
hash = "sha256-innqhXTflK6yS9n3Sw1sbRKT4/BT+Aa6hsKrc1pOsZ4=";
version = "2026.4.1776958969";
hash = "sha256-Ng9Yw1Jq2lSLqczHj6tjhtINfzx1bOXlVN0K1pogIKw=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/DivyanshuAgrawal.competitive-programming-helper/changelog";
@@ -1933,8 +1933,8 @@ let
mktplcRef = {
publisher = "github";
name = "codespaces";
version = "1.18.12";
hash = "sha256-A/ORfMybSCm90SFg8hRx/N0Vq9XMtTjMPVzCIoG938g=";
version = "1.18.13";
hash = "sha256-tvs35GA3bZ4jExiAe0NeHx/vQV/+2zio2Q0813/MAMU=";
};
meta = {
@@ -1970,8 +1970,8 @@ let
mktplcRef = {
name = "vscode-github-actions";
publisher = "github";
version = "0.31.3";
hash = "sha256-Do1z7ywF/0Do09chX0bFtkX+8Nux0fBCWfVpUagiioM=";
version = "0.31.5";
hash = "sha256-hGdcMAkzpJqX61Ki87ckFAhncOm6LmNCQh4imIg64oY=";
};
meta = {
description = "Visual Studio Code extension for GitHub Actions workflows and runs for github.com hosted repositories";
@@ -1986,8 +1986,8 @@ let
mktplcRef = {
publisher = "github";
name = "vscode-pull-request-github";
version = "0.136.0";
hash = "sha256-WUdA5aD3EC45gHBo4ctxVUog8QTEIq6IXlCOPZBBXmo=";
version = "0.138.0";
hash = "sha256-tOqBBgA6HxBc5TT4/A3OWKxDvaoqw8zXCtMa+K3Ku1E=";
};
meta = {
license = lib.licenses.mit;
@@ -2324,8 +2324,8 @@ let
mktplcRef = {
name = "vscode-vibrancy-continued";
publisher = "illixion";
version = "1.1.75";
hash = "sha256-49svwafMoAErwX3K/37IJ8fKx+9FgSpOqj6QPc7jpKs=";
version = "1.1.76";
hash = "sha256-QMKEFoqOzlSduwjefou1ozt3WbSbeXfxEGj6KMqR3eY=";
};
meta = {
downloadPage = "https://marketplace.visualstudio.com/items?itemName=illixion.vscode-vibrancy-continued";
@@ -3861,8 +3861,8 @@ let
mktplcRef = {
name = "ansible";
publisher = "redhat";
version = "26.4.2";
hash = "sha256-mSsCeUMEmLkEuxQIBQZaVzOpOwZ7b4SaiPwOJdVuIJk=";
version = "26.4.4";
hash = "sha256-fBwehxNmePQuM+kJ4cigVQCZ9UqBlBcT6+xD/gDCv64=";
};
meta = {
description = "Ansible language support";
@@ -8,8 +8,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "basedpyright";
publisher = "detachhead";
version = "1.39.2";
hash = "sha256-iSjwEPSlPWmg3cYLSCp2YmHOR8EShGuPHzXMHGoa4iM=";
version = "1.39.3";
hash = "sha256-uuWkSxjsY7ZL1QUwqkiwPTN8oGUktfm7/Hgv3Enmgqc=";
};
meta = {
changelog = "https://github.com/detachhead/basedpyright/releases";
@@ -12,26 +12,26 @@ vscode-utils.buildVscodeMarketplaceExtension {
sources = {
"x86_64-linux" = {
arch = "linux-x64";
hash = "sha256-IoBA0fuy9XxZgswN1j9DfwDI218h2huapl1Bfs2AscI=";
hash = "sha256-YeF6LyQzVAXgZ5Iqr6YvNcACfiUukUsq7cybeCQdSYc=";
};
"x86_64-darwin" = {
arch = "darwin-x64";
hash = "sha256-EfoRRJFTNr+0JAkqWJ2pXwhBtmAXs9cANLzXb4obOMs=";
hash = "sha256-SjirNvI83eh3Gt5rGsaiLT6TJMH6LRQAasOFNy9OMCY=";
};
"aarch64-linux" = {
arch = "linux-arm64";
hash = "sha256-p2AjXFqoptxAwOdsievcjD/WLm0J03Rx/sT4ejUd6xM=";
hash = "sha256-FjE3xTp5Mj1584bepVc4nZr3rxCR3CV+jplmA45VF44=";
};
"aarch64-darwin" = {
arch = "darwin-arm64";
hash = "sha256-C1nbQxL5YDWenLQ82tABuEWKWl/LoEizTWo/YnBQJFw=";
hash = "sha256-SAf3+0QSFUDq09AZQnw78ps55RM/RwoAeQuVly7vn10=";
};
};
in
{
publisher = "kilocode";
name = "Kilo-Code";
version = "7.2.0";
version = "7.2.20";
}
// sources.${stdenv.hostPlatform.system}
or (throw "Unsupported system ${stdenv.hostPlatform.system}");
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "ms-azuretools";
name = "vscode-containers";
version = "2.4.1";
hash = "sha256-OwxJJVW15MivWVeSlbFQNQbrxjDgpXePrPf+r3qb+As=";
version = "2.4.2";
hash = "sha256-qkQAv53y+PVKJdReffjHwoJbvj20o4DF/c6omLIWB80=";
};
meta = {
@@ -42,15 +42,15 @@ let
isDarwin = stdenv.hostPlatform.isDarwin;
supported = {
x86_64-linux = {
hash = "sha256-4EMCbRdPUNOmvW2c2BgdzvPLr7lWAzAKarUI9nBVBeI=";
hash = "sha256-5L4PrwcZ/Q3g6qlCsCebx3czLZVD2sDrDf99l9nooSo=";
arch = "linux-x64";
};
aarch64-linux = {
hash = "sha256-bjs2xNhd/dTDlhRjC5TunV8jEV187dEduLGuuX/oUnI=";
hash = "sha256-nQNDPfk6BRHp7veyx18GMlEt3Xa8iDuqtHG7qzJcPS4=";
arch = "linux-arm64";
};
aarch64-darwin = {
hash = "sha256-EZE9Vk1GRFNUiXCqohjNrNeZ/o5wl6tvamn6+tgoKGI=";
hash = "sha256-jhoa9UcYg2Uj8x9AZwAh68k7WCi6mpgNUUx2YsRIkjw=";
arch = "darwin-arm64";
};
};
@@ -63,7 +63,7 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = base // {
name = "cpptools";
publisher = "ms-vscode";
version = "1.31.4";
version = "1.31.5";
};
nativeBuildInputs = [
@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "windows-ai-studio";
publisher = "ms-windows-ai-studio";
version = "0.34.0";
hash = "sha256-yOBUkFNE/6Gy675J3/PbrfkvKgJdgQVRcSEnd7rCtlU=";
version = "1.0.0";
hash = "sha256-bpq4q/ZEk75NBiwP1VUtTCV2xHed38+CiSKNkT/ClWk=";
};
meta = {
@@ -5,13 +5,13 @@
}:
mkLibretroCore rec {
core = "atari800";
version = "0-unstable-2026-03-31";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "libretro";
repo = "libretro-atari800";
rev = "a9b9c433d8cb6c8e8eb08d14d3e95b430549723a";
hash = "sha256-vPv6D+y+n9gMgC78cLBVeNLg3nGEAsTeBGFv+SWgH0A=";
rev = "7f3456f16109c34915d0bad7393b6c4df66c3850";
hash = "sha256-7C/0i7LUGHY8bz5wp9ut+5EtvLrAUasn0xQzslQQ1fM=";
};
makefile = "Makefile";
@@ -8,13 +8,13 @@
}:
mkLibretroCore {
core = "mednafen-psx" + lib.optionalString withHw "-hw";
version = "0-unstable-2026-04-10";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "libretro";
repo = "beetle-psx-libretro";
rev = "4fdfd541e5dce6f08883883dd27289545825e0b4";
hash = "sha256-DtZIi9BRrskfHFLt/UqfZBJp96QmgqGgroxyF7UTRLU=";
rev = "48f2ceb50392a9c142f10312ba4461e60c6b91ff";
hash = "sha256-lrrmGAnBNXU871GGDhQfRSVrYv/jebaUKtyMeyWm7GY=";
};
extraBuildInputs = lib.optionals withHw [
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "mednafen-wswan";
version = "0-unstable-2026-03-31";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "libretro";
repo = "beetle-wswan-libretro";
rev = "392db084316475411f3f24bd1ea54dba72ecbe51";
hash = "sha256-GbjE2PqfZGrP9tp4TgyIzdyyC1PatGiQRSscsmcIbPQ=";
rev = "da6d0d9acb8d4e9bd6725ab44225a275325d8352";
hash = "sha256-ky/8ywP7scg8VXpqwDISw3A0zKwWbh7zAdaLhM91+Rw=";
};
makefile = "Makefile";
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "bsnes";
version = "0-unstable-2026-03-31";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "libretro";
repo = "bsnes-libretro";
rev = "399bdedb20f6e847e75e8425ca240560ea0940a6";
hash = "sha256-T3pmZ6WJOXyubiTzOIDipMdRDpB+RiNRnd76XbOIl84=";
rev = "d62d219ac22f1ed179738d107d8a4da2c4289845";
hash = "sha256-XYCzXAFkSFNMlRjzH4zR3lpRguOqvAJM4TBcL9Feog8=";
};
makefile = "Makefile";
@@ -7,13 +7,13 @@
}:
mkLibretroCore rec {
core = "fbalpha2012";
version = "0-unstable-2026-03-31";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "libretro";
repo = "fbalpha2012";
rev = "15af60bf24e3dc2267a38e3c8532450ebec86317";
hash = "sha256-7QfDk/j7akaORSekdx96mcDgsFp+kAq1/Cxtu3uPe4A=";
rev = "95fa35582b1ca7ce68de3313615794c8c9d8d7c0";
hash = "sha256-9F970HETDJsttoQOlqg2dFMzff/drR7G8MxXaSlWTHI=";
};
sourceRoot = "${src.name}/svn-current/trunk";
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "fbneo";
version = "0-unstable-2026-04-14";
version = "0-unstable-2026-04-21";
src = fetchFromGitHub {
owner = "libretro";
repo = "fbneo";
rev = "e869c6a2033b135e7fcbea4a50695e97755feae1";
hash = "sha256-YIva50UWylsDmAaJZI85LCphrgjh7jDYQZkpAlQr1HM=";
rev = "5cd2221d04fef37ef2f99793acc100b445691612";
hash = "sha256-uv7MKLlHzTWSeGd0SRCfF+4S+SiJeZny0OerU1MbWOI=";
};
makefile = "Makefile";
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "fceumm";
version = "0-unstable-2026-03-31";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "libretro";
repo = "libretro-fceumm";
rev = "dbf1f2eb83ebde54a32fbe4f906b5ad89a863c0b";
hash = "sha256-UGssF6x/H5met7f2hC6str2urvCZRj/Oqp2R0rv2RUw=";
rev = "448a231618186b2af0bb9d6e37aeca05467e112f";
hash = "sha256-Kr3DEAk8dsFnUT73pOp5qwkCbcDItQwrRMI8hobrCuI=";
};
meta = {
@@ -8,13 +8,13 @@
}:
mkLibretroCore {
core = "flycast";
version = "0-unstable-2026-04-12";
version = "0-unstable-2026-04-17";
src = fetchFromGitHub {
owner = "flyinghead";
repo = "flycast";
rev = "321bdaf08b4b007a720f196ea072c1813b1b7efe";
hash = "sha256-9Ry5+krdhz2RCmZZh2l6DdcKTgMpcgHwOBG4c7fc/og=";
rev = "ae5416a5cb1df362382279172818ac4bb692dc97";
hash = "sha256-3eFkirJm3tBLvJrM0rcTX1tFnKnWag8s3eUL17nQc9w=";
fetchSubmodules = true;
};
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "fmsx";
version = "0-unstable-2026-03-31";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "libretro";
repo = "fmsx-libretro";
rev = "6b807c588d63677770f7f2ed8b94ca0e9da256ce";
hash = "sha256-vA9ODUtmmrDPbZjmRJ9IIFELLTD8g8aHmQdo/B/d1fQ=";
rev = "3933db571485b7c6572968f154fa8621c5568357";
hash = "sha256-hKN/SEnUJW1F4d6unC5k5J95pq0rNMQzLFIfIQL+0v4=";
};
makefile = "Makefile";
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "freeintv";
version = "0-unstable-2026-03-31";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "libretro";
repo = "freeintv";
rev = "9b66d2b3c3406659b2fdfaade7a80f3e62772815";
hash = "sha256-rJatbYyrS9vkGT8+jty80rPkcGGCV9enW5L40NeFwlE=";
rev = "428915baf2bfc032fc03e645f4f8f9c6c3144979";
hash = "sha256-S8sGHS56fQaSuoUllupYdieSLFzsUE3tmM7DUssA+NY=";
};
makefile = "Makefile";
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "fuse";
version = "0-unstable-2026-03-31";
version = "0-unstable-2026-04-20";
src = fetchFromGitHub {
owner = "libretro";
repo = "fuse-libretro";
rev = "b5f44e3a20a0f189e8fb999cd5cde223a0f588a6";
hash = "sha256-ZYk9qe+9yJmi+zsKT3IDvyiPCxivwghT68ku6WfaVa8=";
rev = "bce196fb774835fe65b3e5b821887a4ccf657167";
hash = "sha256-N66LaveZ4P66LRYpP1KwkLKT1dvG/s7JPfDyRraVkc8=";
};
meta = {
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "gambatte";
version = "0-unstable-2026-04-11";
version = "0-unstable-2026-04-24";
src = fetchFromGitHub {
owner = "libretro";
repo = "gambatte-libretro";
rev = "ac3d17d07a1119df5eb124494dfa90e47ae2e5ff";
hash = "sha256-5240slUbHUYb6Xp65xPvvCopdciyGK+Z8mdk7i0ALIQ=";
rev = "5ba6bd1ad745e04b7069d0eb2b44091364fc997a";
hash = "sha256-A9OQx0eXVgrGcmpMTtTe97rHCjrV3Ksi/ooLefsysbQ=";
};
meta = {

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