Merge commit '40c7c335458e1a4a0a961f684d0395ff59a9b8ac' into haskell-updates

This commit is contained in:
Wolfgang Walther
2025-09-11 21:27:34 +02:00
1058 changed files with 19988 additions and 22950 deletions

View File

@@ -153,8 +153,8 @@ jobs:
MATRIX_SYSTEM: ${{ matrix.system }}
run: |
nix-build nixpkgs/untrusted/ci --arg nixpkgs ./nixpkgs/untrusted-pinned -A eval.diff \
--arg beforeDir "$(readlink ./target)" \
--arg afterDir "$(readlink ./merged)" \
--arg beforeDir ./target \
--arg afterDir ./merged \
--argstr evalSystem "$MATRIX_SYSTEM" \
--out-link diff
@@ -207,7 +207,7 @@ jobs:
# Use the target branch to get accurate maintainer info
nix-build nixpkgs/trusted/ci --arg nixpkgs ./nixpkgs/trusted-pinned -A eval.compare \
--arg combinedDir "$(realpath ./combined)" \
--arg combinedDir ./combined \
--arg touchedFilesJson ./touched-files.json \
--argstr githubAuthorId "$AUTHOR_ID" \
--out-link comparison

View File

@@ -33,13 +33,13 @@ Note that 16GB memory is the recommended minimum, while with less than 8GB memor
To compare two commits locally, first run the following on the baseline commit:
```
BASELINE=$(nix-build ci -A eval.baseline --no-out-link)
nix-build ci -A eval.baseline --out-link baseline
```
Then, on the commit with your changes:
```
nix-build ci -A eval.full --arg baseline $BASELINE
nix-build ci -A eval.full --arg baseline ./baseline
```
Keep in mind to otherwise pass the same set of arguments for both commands (`evalSystems`, `quickTest`, `chunkSize`).

View File

@@ -13,6 +13,8 @@
byName ? false,
}:
let
combined = builtins.storePath combinedDir;
/*
Derivation that computes which packages are affected (added, changed or removed) between two revisions of nixpkgs.
Note: "platforms" are "x86_64-linux", "aarch64-darwin", ...
@@ -75,7 +77,7 @@ let
# Attrs
# - keys: "added", "changed", "removed" and "rebuilds"
# - values: lists of `packagePlatformPath`s
diffAttrs = builtins.fromJSON (builtins.readFile "${combinedDir}/combined-diff.json");
diffAttrs = builtins.fromJSON (builtins.readFile "${combined}/combined-diff.json");
changedPackagePlatformAttrs = convertToPackagePlatformAttrs diffAttrs.changed;
rebuildsPackagePlatformAttrs = convertToPackagePlatformAttrs diffAttrs.rebuilds;
@@ -139,8 +141,8 @@ runCommand "compare"
maintainers = builtins.toJSON maintainers;
passAsFile = [ "maintainers" ];
env = {
BEFORE_DIR = "${combinedDir}/before";
AFTER_DIR = "${combinedDir}/after";
BEFORE_DIR = "${combined}/before";
AFTER_DIR = "${combined}/after";
};
}
''

View File

@@ -11,6 +11,9 @@
}:
let
before = builtins.storePath beforeDir;
after = builtins.storePath afterDir;
/*
Computes the key difference between two attrs
@@ -64,15 +67,15 @@ let
in
builtins.fromJSON data;
beforeAttrs = getAttrs beforeDir;
afterAttrs = getAttrs afterDir;
beforeAttrs = getAttrs before;
afterAttrs = getAttrs after;
diffAttrs = diff beforeAttrs afterAttrs;
diffJson = writeText "diff.json" (builtins.toJSON diffAttrs);
in
runCommand "diff" { } ''
mkdir -p $out/${evalSystem}
cp -r ${beforeDir} $out/before
cp -r ${afterDir} $out/after
cp -r ${before} $out/before
cp -r ${after} $out/after
cp ${diffJson} $out/${evalSystem}/diff.json
''

View File

@@ -93,6 +93,13 @@ module.exports = async ({ github, context, core, dry }) => {
log('Last eval run', run_id ?? '<n/a>')
if (conclusion === 'success') {
// Check for any human reviews other than GitHub actions and other GitHub apps.
// Accounts could be deleted as well, so don't count them.
const humanReviews = reviews.filter(
(r) =>
r.user && !r.user.login.endsWith('[bot]') && r.user.type !== 'Bot',
)
Object.assign(prLabels, {
// We only set this label if the latest eval run was successful, because if it was not, it
// *could* have requested reviewers. We will let the PR author fix CI first, before "escalating"
@@ -105,7 +112,7 @@ module.exports = async ({ github, context, core, dry }) => {
'9.needs: reviewer':
!pull_request.draft &&
pull_request.requested_reviewers.length === 0 &&
reviews.length === 0,
humanReviews.length === 0,
})
}

View File

@@ -914,6 +914,21 @@ fetchFromRadicle {
}
```
## `fetchRadiclePatch` {#fetchradiclepatch}
`fetchRadiclePatch` works very similarly to `fetchFromRadicle` with almost the same arguments
expected. However, instead of a `rev` or `tag` argument, a `revision` argument is expected, which
contains the full revision id of the Radicle patch to fetch.
```nix
fetchRadiclePatch {
seed = "rosa.radicle.xyz";
repo = "z4V1sjrXqjvFdnCUbxPFqd5p4DtH5"; # radicle-explorer
revision = "d97d872386c70607beda2fb3fc2e60449e0f4ce4"; # patch: d77e064
hash = "sha256-ttnNqj0lhlSP6BGzEhhUOejKkkPruM9yMwA5p9Di4bk=";
}
```
## `requireFile` {#requirefile}
`requireFile` allows requesting files that cannot be fetched automatically, but whose content is known.

View File

@@ -42,12 +42,43 @@ The manpages must have a section suffix, and may optionally be compressed (with
{
nativeBuildInputs = [ installShellFiles ];
# Sometimes the manpage file has an undesirable name; e.g., it conflicts with
# another software with an equal name. It should be renamed before being
# installed via installManPage
# Sometimes the manpage file has an undersirable name; e.g., it conflicts with
# another software with an equal name. To install it with a different name,
# the installed name must be provided before the path to the file.
#
# Below install a manpage "foobar.1" from the source file "./foobar.1", and
# also installs the manpage "fromsea.3" from the source file "./delmar.3".
postInstall = ''
mv fromsea.3 delmar.3
installManPage foobar.1 delmar.3
installManPage \
foobar.1 \
--name fromsea.3 delmar.3
'';
}
```
The manpage may be the result of a piped input (e.g. `<(cmd)`), in which
case the name must be provided before the pipe with the `--name` flag.
```nix
{
nativeBuildInputs = [ installShellFiles ];
postInstall = ''
installManPage --name foobar.1 <($out/bin/foobar --manpage)
'';
}
```
If no parsing of arguments is desired, pass `--` to opt-out of all subsequent
arguments.
```nix
{
nativeBuildInputs = [ installShellFiles ];
# Installs a manpage from a file called "--name"
postInstall = ''
installManPage -- --name
'';
}
```
@@ -58,8 +89,8 @@ The `installShellCompletion` function takes one or more paths to shell
completion files.
By default it will autodetect the shell type from the completion file extension,
but you may also specify it by passing one of `--bash`, `--fish`, or
`--zsh`. These flags apply to all paths listed after them (up until another
but you may also specify it by passing one of `--bash`, `--fish`, `--zsh`, or
`--nushell`. These flags apply to all paths listed after them (up until another
shell flag is given). Each path may also have a custom installation name
provided by providing a flag `--name NAME` before the path. If this flag is not
provided, zsh completions will be renamed automatically such that `foobar.zsh`
@@ -77,9 +108,10 @@ zsh).
# explicit behavior
installShellCompletion --bash --name foobar.bash share/completions.bash
installShellCompletion --fish --name foobar.fish share/completions.fish
installShellCompletion --nushell --name foobar share/completions.nu
installShellCompletion --zsh --name _foobar share/completions.zsh
# implicit behavior
installShellCompletion share/completions/foobar.{bash,fish,zsh}
installShellCompletion share/completions/foobar.{bash,fish,zsh,nu}
'';
}
```
@@ -104,6 +136,7 @@ failure. To prevent this, guard the completion generation commands.
installShellCompletion --cmd foobar \
--bash <($out/bin/foobar --bash-completion) \
--fish <($out/bin/foobar --fish-completion) \
--nushell <($out/bin/foobar --nushell-completion) \
--zsh <($out/bin/foobar --zsh-completion)
'';
}

View File

@@ -192,6 +192,12 @@ Specifies the contents of the `go.sum` file and triggers rebuilds when it change
Defaults to `null`
### `buildTestBinaries` {#var-go-buildTestBinaries}
This option allows to compile test binaries instead of the usual binaries produced by a package.
Go can [compile test into binaries](https://pkg.go.dev/cmd/go#hdr-Test_packages) using the `go test -c` command.
These binaries can then be executed at a later point (outside the Nix sandbox) to run the tests.
This is mostly useful for downstream consumers to run integration or end-to-end tests that won't work in the Nix sandbox, for example because they require network access.
## Versioned toolchains and builders {#ssec-go-toolchain-versions}

View File

@@ -574,6 +574,9 @@
"strictflexarrays3": [
"index.html#strictflexarrays3"
],
"glibcxxassertions": [
"index.html#glibcxxassertions"
],
"tester-shfmt": [
"index.html#tester-shfmt"
],
@@ -622,6 +625,9 @@
"typst-package-scope-and-usage": [
"index.html#typst-package-scope-and-usage"
],
"var-go-buildTestBinaries": [
"index.html#var-go-buildTestBinaries"
],
"var-meta-teams": [
"index.html#var-meta-teams"
],
@@ -1669,6 +1675,9 @@
"fetchfromradicle": [
"index.html#fetchfromradicle"
],
"fetchradiclepatch": [
"index.html#fetchradiclepatch"
],
"requirefile": [
"index.html#requirefile"
],

View File

@@ -24,6 +24,8 @@
- The `offrss` package was removed due to lack of upstream maintenance since 2012. It's recommended for users to migrate to another RSS reader
- `installShellFiles`: Allow installManPage to take a piped input, add the `--name` flag for renaming the file when installed. Can also append `--` to opt-out of all subsequent parsing.
- GCC 9, 10, 11, and 12 have been removed, as they have reached endoflife upstream and are no longer supported.
- GHCJS 8.10, exposed via `haskell.compiler.ghcjs` and `haskell.compiler.ghcjs810`, has been removed. Downstream users should migrate their projects to the new JavaScript backend of GHC proper which can be used via `pkgsCross.ghcjs` from Nixpkgs. Haskell packaging code, like `haskellPackages.mkDerivation`, `ghcWithPackages` and `hoogleWithPackages`, also no longer supports GHCJS.
@@ -34,6 +36,12 @@
The latter was probably broken anyway.
If there is interest in restoring support for these architectures, it should be possible to crosscompile a bootstrap GHC binary.
- `haskellPackages` and the package sets under `haskell.packages` no longer expose an `llvmPackages` attribute,
though it can still be accessed via `ghc.llvmPackages` (from the same package set).
Haskell packages usually only need to depend on an LLVM version matching GHC if they force the use the LLVM
backend even if NCG is available. In this case, it is best to use the `forceLlvmCodegenBackend` helper.
In all other cases, like linking against `libLLVM`, Haskell packages should use the appropriate version of `llvmPackages` from `pkgs`.
- `base16-builder` node package has been removed due to lack of upstream maintenance.
- `python3Packages.bjoern` has been removed, as the upstream is unmaintained and it depends on a 14-year-old version of http-parser with numerous vulnerabilities.
@@ -52,6 +60,10 @@
- `kbd` package's `outputs` now include a `man` and `scripts` outputs. The `unicode_start` and `unicode_stop` Bash scripts are now part of the `scripts` output, allowing most usages of the `kbd` package to not pull in `bash`.
- `spidermonkey_91` has been removed, as it has been EOL since September 2022.
- `hiawata` has been removed, due to lack of active development upstream, lack of maintainership downstream and upcoming security issues.
- `cudaPackages.cudatoolkit-legacy-runfile` has been removed.
- `conduwuit` was removed due to upstream ceasing development and deleting their repository. For existing data, a migration to `matrix-conduit`, `matrix-continuwuity` or `matrix-tuwunel` may be possible.
@@ -66,6 +78,8 @@
- `gnome-keyring` no longer ships with an SSH agent anymore because it has been deprecated upstream. You should use `gcr_4` instead, which provides the same features. More information on why this was done can be found on [the relevant GCR upstream PR](https://gitlab.gnome.org/GNOME/gcr/-/merge_requests/67).
- `python3Full` and its versioned attributes (python3xxFull) have been removed. Bluetooth support is now enabled in the default python3 attributes. The X11 support built the tkinter module, which is available as a dedicated attribute on the package set.
- `stdenv.mkDerivation` and other derivation builders that use it no longer allow the value of `env` to be anything but an attribute set, for the purpose of setting environment variables that are available to the [builder](https://nix.dev/manual/nix/latest/store/derivation/#builder) process. An environment variable called `env` can still be provided by means of `mkDerivation { env.env = ...; }`, though we recommend to use a more specific name than "env".
- The default Android NDK version has been raised to 27, and the default SDK version to 35.
@@ -108,6 +122,8 @@
- `python3Packages.triton` no longer takes an `enableRocm` argument and supports ROCm in all build configurations via runtime binding. In most cases no action will be needed. If triton is unable to find the HIP SDK add `rocmPackages.clr` as a build input or set the environment variable `HIP_PATH="${rocmPackages.clr}"`.
- `floorp` has been replaced with a binary build, available as `floorp-bin`. Due to major changes in the upstream project structure and build system, building Floorp from source has become unfeasible. No configuration or state migration is necessary.
- `inspircd` has been updated to the v4 release series. Please refer to the upstream documentation for [general information](https://docs.inspircd.org/4/overview/#v4-overview) and a list of [breaking changes](https://docs.inspircd.org/4/breaking-changes/).
- `lima` package now only includes the guest agent for the host's architecture by default. If your guest VM's architecture differs from your Lima host's, you'll need to enable the `lima-additional-guestagents` package by setting `withAdditionalGuestAgents = true` when overriding lima with this input.
@@ -145,6 +161,15 @@
- `pulsemeeter` has been updated to `2.0.0`. The configuration file from older versions has to be deleted. For more information and instructions see the [v2.0.0 changelog entry](https://github.com/theRealCarneiro/pulsemeeter/releases/tag/v2.0.0).
- `rofi` has been updated to `2.0.0`. `rofi-wayland` and `rofi-wayland-unwrapped` have been merged into `rofi` and `rofi-unwrapped` respectively. For more information and instructions see the [v2.0.0 changelog entry](https://github.com/davatorium/rofi/releases/tag/2.0.0).
- `rofi-emoji-wayland` has been merged into `rofi-emoji` as `rofi` has been updated to `2.0.0` and supports both X11 & Wayland.
- `emacs-macport` has been moved to a fork of Mitsuharu Yamamoto's patched source code starting with Emacs v30 as the original project seems to be currently dormant. All older versions of this package have been dropped.
This introduces some backwardsincompatible changes; see the NEWS for details.
NEWS can be viewed from Emacs by typing `C-h n`, or by clicking `Help->Emacs News` from the menu bar.
It can also be browsed [online](https://git.savannah.gnu.org/cgit/emacs.git/tree/etc/NEWS?h=emacs-30).
## Other Notable Changes {#sec-nixpkgs-release-25.11-notable-changes}
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
@@ -157,6 +182,8 @@
- [`homebox` 0.20.0](https://github.com/sysadminsmedia/homebox/releases/tag/v0.20.0) changed how assets are stored and hashed. It is recommended to back up your database before this update.
- `installShellCompletion`: now supports Nushell completion files
- New hardening flags, `strictflexarrays1` and `strictflexarrays3` were made available, corresponding to the gcc/clang options `-fstrict-flex-arrays=1` and `-fstrict-flex-arrays=3` respectively.
- `gramps` has been updated to 6.0.0
@@ -173,6 +200,8 @@
- `searx` was updated to use `envsubst` instead of `sed` for parsing secrets from environment variables.
If your previous configuration included a secret reference like `server.secret_key = "@SEARX_SECRET_KEY@"`, you must migrate to the new envsubst syntax: `server.secret_key = "$SEARX_SECRET_KEY"`.
- A new hardening flag, `glibcxxassertions` was made available, corresponding to the glibc `_GLIBCXX_ASSERTIONS` option.
- `versionCheckHook`: Packages that previously relied solely on `pname` to locate the program used to version check, but have a differing `meta.mainProgram` entry, might now fail.

View File

@@ -1682,6 +1682,12 @@ This should be turned off or fixed for build errors such as:
sorry, unimplemented: __builtin_clear_padding not supported for variable length aggregates
```
#### `glibcxxassertions` {#glibcxxassertions}
Adds the `-D_GLIBCXX_ASSERTIONS` compiler flag. This flag only has an effect on libstdc++ targets, and when defined, enables extra error checking in the form of precondition assertions, such as bounds checking in c++ strings and null pointer checks when dereferencing c++ smart pointers.
These checks may have an impact on performance in some cases.
#### `pacret` {#pacret}
This flag adds the `-mbranch-protection=pac-ret` compiler option on aarch64-linux targets. This uses ARM v8.3's Pointer Authentication feature to sign function return pointers before adding them to the stack. The pointer's authenticity is then validated before returning to its destination. This dramatically increases the difficulty of ROP exploitation techniques.

View File

@@ -571,6 +571,9 @@ let
inherit (self.versions)
splitVersion
;
inherit (self.network.ipv6)
mkEUI64Suffix
;
}
);
in

View File

@@ -64,6 +64,11 @@ lib.mapAttrs mkLicense (
free = false;
};
adobeUtopia = {
fullName = "Adobe Utopia Font License";
spdxId = "Adobe-Utopia";
};
afl20 = {
spdxId = "AFL-2.0";
fullName = "Academic Free License v2.0";
@@ -692,6 +697,11 @@ lib.mapAttrs mkLicense (
spdxId = "HPND-sell-variant";
};
hpndDec = {
fullName = "Historical Permission Notice and Disclaimer - DEC variant";
spdxId = "HPND-DEC";
};
hpndDoc = {
fullName = "Historical Permission Notice and Disclaimer - documentation variant";
spdxId = "HPND-doc";

View File

@@ -1,6 +1,14 @@
{ lib }:
let
inherit (import ./internal.nix { inherit lib; }) _ipv6;
inherit (lib.strings) match concatStringsSep toLower;
inherit (lib.trivial)
pipe
bitXor
fromHexString
toHexString
;
inherit (lib.lists) elemAt;
in
{
ipv6 = {
@@ -45,5 +53,60 @@ in
{
inherit address prefixLength;
};
/**
Converts a 48-bit MAC address into a EUI-64 IPv6 address suffix.
# Example
```nix
mkEUI64Suffix "66:75:63:6B:20:75"
=> "6475:63ff:fe6b:2075"
```
# Type
```
mkEUI64Suffix :: String -> String
```
# Inputs
mac
: The MAC address (may contain these delimiters: `:`, `-` or `.` but it's not necessary)
*/
mkEUI64Suffix =
mac:
pipe mac [
# match mac address
(match "^([0-9A-Fa-f]{2})[-:.]?([0-9A-Fa-f]{2})[-:.]?([0-9A-Fa-f]{2})[-:.]?([0-9A-Fa-f]{2})[-:.]?([0-9A-Fa-f]{2})[-:.]?([0-9A-Fa-f]{2})$")
# check if there are matches
(
matches:
if matches == null then
throw ''"${mac}" is not a valid MAC address (expected 6 octets of hex digits)''
else
matches
)
# transform to result hextets
(octets: [
# combine 1st and 2nd octets into first hextet, flip U/L bit, 512 = 0x200
(toHexString (bitXor 512 (fromHexString ((elemAt octets 0) + (elemAt octets 1)))))
# combine 3rd and 4th octets, combine them, insert fffe pattern in between to get next two hextets
"${elemAt octets 2}ff"
"fe${elemAt octets 3}"
# combine 5th and 6th octets into the last hextet
((elemAt octets 4) + (elemAt octets 5))
])
# concat to result suffix
(concatStringsSep ":")
toLower
];
};
}

View File

@@ -45,6 +45,7 @@ let
"mips64-linux"
"mips64el-linux"
"mipsel-linux"
"powerpc-linux"
"powerpc64-linux"
"powerpc64le-linux"
"riscv32-linux"

View File

@@ -36,6 +36,11 @@ rec {
};
};
ppc32 = {
config = "powerpc-unknown-linux-gnu";
rust.rustcTarget = "powerpc-unknown-linux-gnu";
};
sheevaplug = {
config = "armv5tel-unknown-linux-gnueabi";
}

View File

@@ -114,4 +114,48 @@ expectFailure '(internal._ipv6.split "/::/").prefixLength' "is not a valid IPv
expectSuccess 'lib.network.ipv6.fromString "2001:DB8::ffff/64"' '{"address":"2001:db8:0:0:0:0:0:ffff","prefixLength":64}'
expectSuccess 'lib.network.ipv6.fromString "1234:5678:90ab:cdef:fedc:ba09:8765:4321/44"' '{"address":"1234:5678:90ab:cdef:fedc:ba09:8765:4321","prefixLength":44}'
expectSuccess 'mkEUI64Suffix "00:11:22:AA:BB:CC"' '"211:22ff:feaa:bbcc"'
expectSuccess 'mkEUI64Suffix "00-11-22-AA-BB-CC"' '"211:22ff:feaa:bbcc"'
expectSuccess 'mkEUI64Suffix "00.11.22.AA.BB.CC"' '"211:22ff:feaa:bbcc"'
expectSuccess 'mkEUI64Suffix "00:11:22:aa:bb:cc"' '"211:22ff:feaa:bbcc"'
expectSuccess 'mkEUI64Suffix "00-11-22-aa-bb-cc"' '"211:22ff:feaa:bbcc"'
expectSuccess 'mkEUI64Suffix "00.11.22.aa.bb.cc"' '"211:22ff:feaa:bbcc"'
expectSuccess 'mkEUI64Suffix "12:34:56:78:9A:bc"' '"1034:56ff:fe78:9abc"'
expectSuccess 'mkEUI64Suffix "123456789ABC"' '"1034:56ff:fe78:9abc"'
expectSuccess 'mkEUI64Suffix "001122AABBCC"' '"211:22ff:feaa:bbcc"'
expectSuccess 'mkEUI64Suffix "001122aabbcc"' '"211:22ff:feaa:bbcc"'
expectSuccess 'mkEUI64Suffix "ff-ff-ff-ff-ff-ff"' '"fdff:ffff:feff:ffff"'
expectSuccess 'mkEUI64Suffix "ffffffffffff"' '"fdff:ffff:feff:ffff"'
expectSuccess 'mkEUI64Suffix "00.00.00.00.00.00"' '"200:00ff:fe00:0000"'
expectSuccess 'mkEUI64Suffix "000000000000"' '"200:00ff:fe00:0000"'
expectFailure 'mkEUI64Suffix "123456789AB"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "123456789A"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "123456789"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "12345678"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "1234567"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "123456"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "12345"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "1234"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "123"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "12"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "1"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix ""' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "------------"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "............"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "::::::::::::"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "1:2:3:4:5:6"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "0.0.0.0.0.0"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "00:11:-2:AA:BB:CC"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "00:-11:22:AA:BB:CC"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "ab:cd:ef:g0:12:34"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "AB:CD:EF:G0:12:34"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "ab:cd:ef:gh:jk:lm"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "AB:CD:EF:GH:JK:LM"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "01:23:3a:bc:de:fg"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
expectFailure 'mkEUI64Suffix "01:23:3A:BC:DE:FG"' "is not a valid MAC address \(expected 6 octets of hex digits\)"
echo >&2 tests ok

View File

@@ -94,6 +94,7 @@ lib.runTests (
];
testmmix = mseteq mmix [ "mmix-mmixware" ];
testpower = mseteq power [
"powerpc-linux"
"powerpc-netbsd"
"powerpc-none"
"powerpc64-linux"
@@ -174,6 +175,7 @@ lib.runTests (
"mips64-linux"
"mips64el-linux"
"mipsel-linux"
"powerpc-linux"
"powerpc64-linux"
"powerpc64le-linux"
"riscv32-linux"

View File

@@ -641,6 +641,12 @@
githubId = 8026586;
name = "Adrien Faure";
};
adhityaravi = {
email = "adhitya.ravi@canonical.com";
github = "adhityaravi";
githubId = 34714491;
name = "Adhitya Ravi";
};
adisbladis = {
email = "adisbladis@gmail.com";
matrix = "@adis:blad.is";
@@ -1974,6 +1980,11 @@
githubId = 13426784;
name = "arcnmx";
};
arcstur = {
github = "arcstur";
githubId = 24514392;
name = "arcstur";
};
arcticlimer = {
email = "vinigm.nho@gmail.com";
github = "viniciusmuller";
@@ -3186,6 +3197,12 @@
github = "benwis";
githubId = 6953353;
};
bepri = {
email = "imani.pelton@canonical.com";
github = "bepri";
githubId = 17732342;
name = "Imani Pelton";
};
berberman = {
email = "berberman@yandex.com";
matrix = "@berberman:mozilla.org";
@@ -6960,6 +6977,12 @@
github = "dsluijk";
githubId = 8537327;
};
dstathis = {
email = "dylan.stephano-shachter@canonical.com";
github = "dstathis";
githubId = 2110777;
name = "Dylan Stephano-Shachter";
};
dstengele = {
name = "Dennis Stengele";
email = "dennis@stengele.me";
@@ -12708,6 +12731,12 @@
githubId = 954536;
name = "Jean-Pierre PRUNARET";
};
jpinz = {
email = "nix@jpinzer.me";
github = "jpinz";
githubId = 8357054;
name = "Julian Pinzer";
};
jpotier = {
email = "jpo.contributes.to.nixos@marvid.fr";
github = "jpotier";
@@ -13349,6 +13378,13 @@
githubId = 18579667;
name = "Adam J.";
};
kfiz = {
email = "doroerose@gmail.com";
github = "kfiz";
githubId = 5100646;
name = "kfiz";
matrix = "@kfiz:matrix.sopado.de";
};
kfollesdal = {
email = "kfollesdal@gmail.com";
github = "kfollesdal";

View File

@@ -64,6 +64,7 @@ with lib.maintainers;
# Edits to this list should only be done by an already existing member.
members = [
DutchGerman
friedow
];
};

View File

@@ -1030,7 +1030,7 @@ Make sure to also check the many updates in the [Nixpkgs library](#sec-release-2
- [eris-server](https://codeberg.org/eris/eris-go), an implementation of the
Encoding for Robust Immutable Storage (ERIS). Available as
[services.eris-server](#opt-services.eris-server.enable).
`services.eris-server`.
- [forgejo](https://forgejo.org/), a git forge and drop-in replacement for
Gitea. Available as [services.forgejo](#opt-services.forgejo.enable).

View File

@@ -120,6 +120,8 @@
- `services.libvirtd.autoSnapshot`, a backup service for libvirt managed vms.
- [Sshwifty](https://github.com/nirui/sshwifty), a Telnet and SSH client for your browser. Available as [services.sshwifty](#opt-services.sshwifty.enable).
## Backward Incompatibilities {#sec-release-25.11-incompatibilities}
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
@@ -148,6 +150,8 @@
- The zookeeper project changed their logging tool to logback, therefore `services.zookeeper.logging` option has been updated to expect a logback compatible string.
- The `dovecot` systemd service was renamed from `dovecot2` to `dovecot`. The former is now just an alias. Update any overrides on the systemd unit to the new name.
- Configurations with `boot.initrd.systend.enable && !boot.initrd.enable` will have their `init` script at `$toplevel/init` instead of `$toplevel/prepare-root`. This is because it does not make sense for systemd stage 1 to affect the `init` script when stage 1 is entirely disabled (e.g. containers).
- `Prosody` has been updated to major release 13 which removed some obsoleted modules and brought a couple of major and breaking changes:
- The `http_files` module is now disabled by default because it now requires `http_files_dir` to be configured.
- The `vcard_muc` module has been removed and got replaced by the inbuilt `muc_vcard` module.
@@ -158,6 +162,8 @@
- The `yeahwm` package and `services.xserver.windowManager.yeahwm` module were removed due to the package being broken and unmaintained upstream.
- The `services.snapserver` module has been migrated to use the settings option and render a configuration file instead of passing every option over the command line.
- The `services.postgresql` module now sets up a systemd unit `postgresql.target`. Depending on `postgresql.target` guarantees that postgres is in read-write mode and initial/ensure scripts were executed. Depending on `postgresql.service` only guarantees a read-only connection.
- The `services.siproxd` module has been removed as `siproxd` is unmaintained and broken with libosip 5.x.
@@ -222,11 +228,15 @@
- `services.clamsmtp` is unmaintained and was removed from Nixpkgs.
- `services.eris-server` was removed from Nixpkgs due to a hostile upstream.
- `prosody` gained a config check option named `services.prosody.checkConfig` which runs `prosodyctl check config` and is turned on by default.
- `services.dependency-track` removed its configuration of the JVM heap size. This lets the JVM choose its maximum heap size automatically, which should work much better in practice for most users. For deployments on systems with little RAM, it may now be necessary to manually configure a maximum heap size using {option}`services.dependency-track.javaArgs`.
- `services.dnscrypt-proxy2` gains a `package` option to specify dnscrypt-proxy package to use.
- `services.dnscrypt-proxy2` was renamed to `services.dnscrypt-proxy` to match the package name. The systemd service is now also `dnscrypt-proxy`, but the old name is still provided as an alias for backwards compatibility.
- `services.dnscrypt-proxy` gains a `package` option to specify dnscrypt-proxy package to use.
- `services.nextcloud.configureRedis` now defaults to `true` in accordance with upstream recommendations to have caching for file locking. See the [upstream doc](https://docs.nextcloud.com/server/31/admin_manual/configuration_files/files_locking_transactional.html) for further details.

View File

@@ -195,7 +195,6 @@ in
"${config.boot.initrd.systemd.package}/lib/systemd/systemd-vconsole-setup"
"${config.boot.initrd.systemd.package.kbd}/bin/setfont"
"${config.boot.initrd.systemd.package.kbd}/bin/loadkeys"
"${config.boot.initrd.systemd.package.kbd.gzip}/bin/gzip" # Fonts and keyboard layouts are compressed
]
++ lib.optionals (cfg.font != null && lib.hasPrefix builtins.storeDir cfg.font) [
"${cfg.font}"

View File

@@ -1052,7 +1052,6 @@
./services/network-filesystems/davfs2.nix
./services/network-filesystems/diod.nix
./services/network-filesystems/drbd.nix
./services/network-filesystems/eris-server.nix
./services/network-filesystems/glusterfs.nix
./services/network-filesystems/ipfs-cluster.nix
./services/network-filesystems/kbfs.nix
@@ -1128,7 +1127,7 @@
./services/networking/deconz.nix
./services/networking/dhcpcd.nix
./services/networking/dnscache.nix
./services/networking/dnscrypt-proxy2.nix
./services/networking/dnscrypt-proxy.nix
./services/networking/dnsdist.nix
./services/networking/dnsmasq.nix
./services/networking/dnsproxy.nix
@@ -1695,6 +1694,7 @@
./services/web-apps/snipe-it.nix
./services/web-apps/snips-sh.nix
./services/web-apps/sogo.nix
./services/web-apps/sshwifty.nix
./services/web-apps/stash.nix
./services/web-apps/stirling-pdf.nix
./services/web-apps/strfry.nix

View File

@@ -131,7 +131,6 @@ in
"services"
"deepin"
] "the Deepin desktop environment has been removed from nixpkgs due to lack of maintenance.")
(mkRemovedOptionModule [ "services" "dnscrypt-proxy" ] "Use services.dnscrypt-proxy2 instead")
(mkRemovedOptionModule [ "services" "dnscrypt-wrapper" ] ''
The dnscrypt-wrapper module was removed since the project has been effectively unmaintained since 2018;
moreover the NixOS module had to rely on an abandoned version of dnscrypt-proxy v1 for the rotation of keys.

View File

@@ -1,6 +1,5 @@
{
config,
options,
lib,
pkgs,
...
@@ -9,77 +8,96 @@ let
name = "snapserver";
inherit (lib)
literalExpression
mkEnableOption
mkOption
mkPackageOption
mkRemovedOptionModule
mkRenamedOptionModule
types
;
cfg = config.services.snapserver;
# Using types.nullOr to inherit upstream defaults.
sampleFormat = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
Default sample format.
'';
example = "48000:16:2";
format = pkgs.formats.ini {
listsAsDuplicateKeys = true;
};
codec = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
Default audio compression method.
'';
example = "flac";
};
streamToOption =
name: opt:
let
os = val: lib.optionalString (val != null) "${val}";
os' = prefix: val: lib.optionalString (val != null) (prefix + "${val}");
toQueryString = key: value: "&${key}=${value}";
in
"--stream.stream=\"${opt.type}://"
+ os opt.location
+ "?"
+ os' "name=" name
+ os' "&sampleformat=" opt.sampleFormat
+ os' "&codec=" opt.codec
+ lib.concatStrings (lib.mapAttrsToList toQueryString opt.query)
+ "\"";
optionalNull = val: ret: lib.optional (val != null) ret;
optionString = lib.concatStringsSep " " (
lib.mapAttrsToList streamToOption cfg.streams
# global options
++ [ "--stream.bind_to_address=${cfg.listenAddress}" ]
++ [ "--stream.port=${toString cfg.port}" ]
++ optionalNull cfg.sampleFormat "--stream.sampleformat=${cfg.sampleFormat}"
++ optionalNull cfg.codec "--stream.codec=${cfg.codec}"
++ optionalNull cfg.streamBuffer "--stream.stream_buffer=${toString cfg.streamBuffer}"
++ optionalNull cfg.buffer "--stream.buffer=${toString cfg.buffer}"
++ lib.optional cfg.sendToMuted "--stream.send_to_muted"
# tcp json rpc
++ [ "--tcp.enabled=${toString cfg.tcp.enable}" ]
++ lib.optionals cfg.tcp.enable [
"--tcp.bind_to_address=${cfg.tcp.listenAddress}"
"--tcp.port=${toString cfg.tcp.port}"
]
# http json rpc
++ [ "--http.enabled=${toString cfg.http.enable}" ]
++ lib.optionals cfg.http.enable [
"--http.bind_to_address=${cfg.http.listenAddress}"
"--http.port=${toString cfg.http.port}"
]
++ lib.optional (cfg.http.docRoot != null) "--http.doc_root=\"${toString cfg.http.docRoot}\""
);
configFile = format.generate "snapserver.conf" cfg.settings;
in
{
imports = [
(lib.mkRenamedOptionModule
(mkRenamedOptionModule
[ "services" "snapserver" "controlPort" ]
[ "services" "snapserver" "tcp" "port" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "listenAddress" ]
[ "services" "snapserver" "settings" "stream" "bind_to_address" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "port" ]
[ "services" "snapserver" "settings" "stream" "port" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "sampleFormat" ]
[ "services" "snapserver" "settings" "stream" "sampleformat" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "codec" ]
[ "services" "snapserver" "settings" "stream" "codec" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "streamBuffer" ]
[ "services" "snapserver" "settings" "stream" "chunk_ms" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "buffer" ]
[ "services" "snapserver" "settings" "stream" "buffer" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "send" ]
[ "services" "snapserver" "settings" "stream" "chunk_ms" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "tcp" "enable" ]
[ "services" "snapserver" "settings" "tcp" "enabled" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "tcp" "listenAddress" ]
[ "services" "snapserver" "settings" "tcp" "bind_to_address" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "tcp" "port" ]
[ "services" "snapserver" "settings" "tcp" "port" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "http" "enable" ]
[ "services" "snapserver" "settings" "http" "enabled" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "http" "listenAddress" ]
[ "services" "snapserver" "settings" "http" "bind_to_address" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "http" "port" ]
[ "services" "snapserver" "settings" "http" "port" ]
)
(mkRenamedOptionModule
[ "services" "snapserver" "http" "docRoot" ]
[ "services" "snapserver" "settings" "http" "doc_root" ]
)
(mkRemovedOptionModule [
"services"
"snapserver"
"streams"
] "Configure `services.snapserver.settings.stream.source` instead")
];
###### interface
@@ -88,31 +106,93 @@ in
services.snapserver = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable snapserver.
'';
};
enable = mkEnableOption "snapserver";
package = lib.options.mkPackageOption pkgs "snapcast" { };
package = mkPackageOption pkgs "snapcast" { };
listenAddress = lib.mkOption {
type = lib.types.str;
default = "::";
example = "0.0.0.0";
settings = mkOption {
default = { };
description = ''
The address where snapclients can connect.
'';
};
Snapserver configuration.
port = lib.mkOption {
type = lib.types.port;
default = 1704;
description = ''
The port that snapclients can connect to.
Refer to the [example configuration](https://github.com/badaix/snapcast/blob/develop/server/etc/snapserver.conf) for possible options.
'';
type = types.submodule {
freeformType = format.type;
options = {
stream = {
bind_to_address = mkOption {
default = "::";
description = ''
Address to listen on for snapclient connections.
'';
};
port = mkOption {
type = types.port;
default = 1704;
description = ''
Port to listen on for snapclient connections.
'';
};
source = mkOption {
type = with types; either str (listOf str);
example = "pipe:///tmp/snapfifo?name=default";
description = ''
One or multiple URIs to PCM inpuit streams.
'';
};
};
tcp = {
enabled = mkEnableOption "the TCP JSON-RPC";
bind_to_address = mkOption {
default = "::";
description = ''
Address to listen on for snapclient connections.
'';
};
port = mkOption {
type = types.port;
default = 1705;
description = ''
Port to listen on for snapclient connections.
'';
};
};
http = {
enabled = mkEnableOption "the HTTP JSON-RPC";
bind_to_address = mkOption {
default = "::";
description = ''
Address to listen on for snapclient connections.
'';
};
port = mkOption {
type = types.port;
default = 1705;
description = ''
Port to listen on for snapclient connections.
'';
};
doc_root = lib.mkOption {
type = with lib.types; nullOr path;
default = pkgs.snapweb;
defaultText = literalExpression "pkgs.snapweb";
description = ''
Path to serve from the HTTP servers root.
'';
};
};
};
};
};
openFirewall = lib.mkOption {
@@ -122,200 +202,13 @@ in
Whether to automatically open the specified ports in the firewall.
'';
};
inherit sampleFormat;
inherit codec;
streamBuffer = lib.mkOption {
type = with lib.types; nullOr int;
default = null;
description = ''
Stream read (input) buffer in ms.
'';
example = 20;
};
buffer = lib.mkOption {
type = with lib.types; nullOr int;
default = null;
description = ''
Network buffer in ms.
'';
example = 1000;
};
sendToMuted = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Send audio to muted clients.
'';
};
tcp.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to enable the JSON-RPC via TCP.
'';
};
tcp.listenAddress = lib.mkOption {
type = lib.types.str;
default = "::";
example = "0.0.0.0";
description = ''
The address where the TCP JSON-RPC listens on.
'';
};
tcp.port = lib.mkOption {
type = lib.types.port;
default = 1705;
description = ''
The port where the TCP JSON-RPC listens on.
'';
};
http.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to enable the JSON-RPC via HTTP.
'';
};
http.listenAddress = lib.mkOption {
type = lib.types.str;
default = "::";
example = "0.0.0.0";
description = ''
The address where the HTTP JSON-RPC listens on.
'';
};
http.port = lib.mkOption {
type = lib.types.port;
default = 1780;
description = ''
The port where the HTTP JSON-RPC listens on.
'';
};
http.docRoot = lib.mkOption {
type = with lib.types; nullOr path;
default = pkgs.snapweb;
defaultText = lib.literalExpression "pkgs.snapweb";
description = ''
Path to serve from the HTTP servers root.
'';
};
streams = lib.mkOption {
type =
with lib.types;
attrsOf (submodule {
options = {
location = lib.mkOption {
type = lib.types.oneOf [
lib.types.path
lib.types.str
];
description = ''
For type `pipe` or `file`, the path to the pipe or file.
For type `librespot`, `airplay` or `process`, the path to the corresponding binary.
For type `tcp`, the `host:port` address to connect to or listen on.
For type `meta`, a list of stream names in the form `/one/two/...`. Don't forget the leading slash.
For type `alsa`, use an empty string.
'';
example = lib.literalExpression ''
"/path/to/pipe"
"/path/to/librespot"
"192.168.1.2:4444"
"/MyTCP/Spotify/MyPipe"
'';
};
type = lib.mkOption {
type = lib.types.enum [
"pipe"
"librespot"
"airplay"
"file"
"process"
"tcp"
"alsa"
"spotify"
"meta"
];
default = "pipe";
description = ''
The type of input stream.
'';
};
query = lib.mkOption {
type = attrsOf str;
default = { };
description = ''
Key-value pairs that convey additional parameters about a stream.
'';
example = lib.literalExpression ''
# for type == "pipe":
{
mode = "create";
};
# for type == "process":
{
params = "--param1 --param2";
logStderr = "true";
};
# for type == "tcp":
{
mode = "client";
}
# for type == "alsa":
{
device = "hw:0,0";
}
'';
};
inherit sampleFormat;
inherit codec;
};
});
default = {
default = { };
};
description = ''
The definition for an input source.
'';
example = lib.literalExpression ''
{
mpd = {
type = "pipe";
location = "/run/snapserver/mpd";
sampleFormat = "48000:16:2";
codec = "pcm";
};
};
'';
};
};
};
###### implementation
config = lib.mkIf cfg.enable {
warnings =
# https://github.com/badaix/snapcast/blob/98ac8b2fb7305084376607b59173ce4097c620d8/server/streamreader/stream_manager.cpp#L85
lib.filter (w: w != "") (
lib.mapAttrsToList (
k: v:
lib.optionalString (v.type == "spotify") ''
services.snapserver.streams.${k}.type = "spotify" is deprecated, use services.snapserver.streams.${k}.type = "librespot" instead.
''
) cfg.streams
);
environment.etc."snapserver.conf".source = configFile;
systemd.services.snapserver = {
after = [
@@ -328,10 +221,13 @@ in
"mpd.service"
"mopidy.service"
];
restartTriggers = [ configFile ];
serviceConfig = {
DynamicUser = true;
ExecStart = "${cfg.package}/bin/snapserver --daemon ${optionString}";
ExecStart = toString [
(lib.getExe' cfg.package "snapserver")
"--daemon"
];
Type = "forking";
LimitRTPRIO = 50;
LimitRTTIME = "infinity";
@@ -349,9 +245,9 @@ in
};
networking.firewall.allowedTCPPorts =
lib.optionals cfg.openFirewall [ cfg.port ]
++ lib.optional (cfg.openFirewall && cfg.tcp.enable) cfg.tcp.port
++ lib.optional (cfg.openFirewall && cfg.http.enable) cfg.http.port;
lib.optionals cfg.openFirewall [ cfg.settings.stream.port ]
++ lib.optional (cfg.openFirewall && cfg.settings.tcp.enabled) cfg.settings.tcp.port
++ lib.optional (cfg.openFirewall && cfg.settings.http.enabled) cfg.settings.http.port;
};
meta = {

View File

@@ -148,8 +148,21 @@ in
settings = lib.mkOption {
type = format.type;
default = { };
example = {
bootstrap = {
initdb = [
"encoding=UTF-8"
"data-checksums"
];
};
postgresql = {
parameters = {
unix_socket_directories = "/tmp";
};
};
};
description = ''
The primary patroni configuration. See the [documentation](https://patroni.readthedocs.io/en/latest/SETTINGS.html)
The primary patroni configuration. See the [documentation](https://patroni.readthedocs.io/en/latest/yaml_configuration.html)
for possible values.
Secrets should be passed in by using the `environmentFiles` option.
'';

View File

@@ -61,6 +61,18 @@ in
Configuration for ntfy.sh, supported values are [here](https://ntfy.sh/docs/config/#config-options).
'';
};
environmentFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
example = "/run/secrets/ntfy";
description = ''
Path to a file containing extra ntfy environment variables in the systemd `EnvironmentFile`
format. Refer to the [documentation](https://docs.ntfy.sh/config/) for config options.
This can be used to pass secrets such as creating declarative users or token without putting them in the Nix store.
'';
};
};
config =
@@ -109,6 +121,7 @@ in
MemoryDenyWriteExecute = true;
# Upstream Recommendation
LimitNOFILE = 20500;
EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile;
};
};

View File

@@ -274,5 +274,5 @@ in
})
];
meta.maintainers = [ maintainers.jnsgruk ];
meta.maintainers = [ ];
}

View File

@@ -1,126 +0,0 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.eris-server;
stateDirectoryPath = "\${STATE_DIRECTORY}";
nullOrStr = with lib.types; nullOr str;
in
{
options.services.eris-server = {
enable = lib.mkEnableOption "an ERIS server";
package = lib.mkOption {
type = lib.types.package;
default = pkgs.eris-go;
defaultText = lib.literalExpression "pkgs.eris-go";
description = "Package to use for the ERIS server.";
};
decode = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether the HTTP service (when enabled) will decode ERIS content at /uri-res/N2R?urn:eris:.
Enabling this is recommended only for private or local-only servers.
'';
};
listenCoap = lib.mkOption {
type = nullOrStr;
default = ":5683";
example = "[::1]:5683";
description = ''
Server CoAP listen address. Listen on all IP addresses at port 5683 by default.
Please note that the server can service client requests for ERIS-blocks by
querying other clients connected to the server. Whether or not blocks are
relayed back to the server depends on client configuration but be aware this
may leak sensitive metadata and trigger network activity.
'';
};
listenHttp = lib.mkOption {
type = nullOrStr;
default = null;
example = "[::1]:8080";
description = "Server HTTP listen address. Do not listen by default.";
};
backends = lib.mkOption {
type = with lib.types; listOf str;
description = ''
List of backend URLs.
Add "get" and "put" as query elements to enable those operations.
'';
example = [
"badger+file:///var/db/eris.badger?get&put"
"coap+tcp://eris.example.com:5683?get"
];
};
mountpoint = lib.mkOption {
type = nullOrStr;
default = null;
example = "/eris";
description = ''
Mountpoint for FUSE namespace that exposes "urn:eris:" files.
'';
};
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = lib.strings.versionAtLeast cfg.package.version "20231219";
message = "Version of `config.services.eris-server.package` is incompatible with this module";
}
];
systemd.services.eris-server =
let
cmd =
"${cfg.package}/bin/eris-go server"
+ (lib.optionalString (cfg.listenCoap != null) " --coap '${cfg.listenCoap}'")
+ (lib.optionalString (cfg.listenHttp != null) " --http '${cfg.listenHttp}'")
+ (lib.optionalString cfg.decode " --decode")
+ (lib.optionalString (cfg.mountpoint != null) " --mountpoint '${cfg.mountpoint}'");
in
{
description = "ERIS block server";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
environment.ERIS_STORE_URL = toString cfg.backends;
script = lib.mkIf (cfg.mountpoint != null) ''
export PATH=${config.security.wrapperDir}:$PATH
${cmd}
'';
serviceConfig =
let
umounter = lib.mkIf (
cfg.mountpoint != null
) "-${config.security.wrapperDir}/fusermount -uz ${cfg.mountpoint}";
in
if (cfg.mountpoint == null) then
{
ExecStart = cmd;
}
else
{
ExecStartPre = umounter;
ExecStopPost = umounter;
}
// {
Restart = "always";
RestartSec = 20;
AmbientCapabilities = "CAP_NET_BIND_SERVICE";
};
};
};
}

View File

@@ -55,7 +55,7 @@ let
type = types.str;
};
botPolicy = lib.mkOption {
botPolicy = mkDefaultOption "botPolicy" {
default = null;
description = ''
Anubis policy configuration in Nix syntax. Set to `null` to use the baked-in policy which should be
@@ -265,7 +265,18 @@ in
wants = [ "network-online.target" ];
environment = lib.mapAttrs (lib.const (lib.generators.mkValueStringDefault { })) (
lib.filterAttrs (_: v: v != null) instance.settings
lib.filterAttrs (_: v: v != null) (
instance.settings
// {
POLICY_FNAME =
if instance.settings.POLICY_FNAME != null then
instance.settings.POLICY_FNAME
else if instance.botPolicy != null then
jsonFormat.generate "${instanceName name}-botPolicy.json" instance.botPolicy
else
null;
}
)
);
serviceConfig = {

View File

@@ -7,13 +7,17 @@
let
cfg = config.services.dnscrypt-proxy2;
cfg = config.services.dnscrypt-proxy;
in
{
options.services.dnscrypt-proxy2 = {
enable = lib.mkEnableOption "dnscrypt-proxy2";
imports = [
(lib.mkRenamedOptionModule [ "services" "dnscrypt-proxy2" ] [ "services" "dnscrypt-proxy" ])
];
options.services.dnscrypt-proxy = {
enable = lib.mkEnableOption "dnscrypt-proxy";
package = lib.mkPackageOption pkgs "dnscrypt-proxy" { };
@@ -38,7 +42,7 @@ in
upstreamDefaults = lib.mkOption {
description = ''
Whether to base the config declared in {option}`services.dnscrypt-proxy2.settings` on the upstream example config (<https://github.com/DNSCrypt/dnscrypt-proxy/blob/master/dnscrypt-proxy/example-dnscrypt-proxy.toml>)
Whether to base the config declared in {option}`services.dnscrypt-proxy.settings` on the upstream example config (<https://github.com/DNSCrypt/dnscrypt-proxy/blob/master/dnscrypt-proxy/example-dnscrypt-proxy.toml>)
Disable this if you want to declare your dnscrypt config from scratch.
'';
@@ -49,7 +53,7 @@ in
configFile = lib.mkOption {
description = ''
Path to TOML config file. See: <https://github.com/DNSCrypt/dnscrypt-proxy/blob/master/dnscrypt-proxy/example-dnscrypt-proxy.toml>
If this option is set, it will override any configuration done in options.services.dnscrypt-proxy2.settings.
If this option is set, it will override any configuration done in options.services.dnscrypt-proxy.settings.
'';
example = "/etc/dnscrypt-proxy/dnscrypt-proxy.toml";
type = lib.types.path;
@@ -73,7 +77,7 @@ in
}
${pkgs.buildPackages.remarshal}/bin/json2toml < config.json > $out
'';
defaultText = lib.literalMD "TOML file generated from {option}`services.dnscrypt-proxy2.settings`";
defaultText = lib.literalMD "TOML file generated from {option}`services.dnscrypt-proxy.settings`";
};
};
@@ -81,7 +85,7 @@ in
networking.nameservers = lib.mkDefault [ "127.0.0.1" ];
systemd.services.dnscrypt-proxy2 = {
systemd.services.dnscrypt-proxy = {
description = "DNSCrypt-proxy client";
wants = [
"network-online.target"
@@ -93,6 +97,7 @@ in
wantedBy = [
"multi-user.target"
];
aliases = [ "dnscrypt-proxy2.service" ];
serviceConfig = {
AmbientCapabilities = "CAP_NET_BIND_SERVICE";
CacheDirectory = "dnscrypt-proxy";

View File

@@ -144,7 +144,9 @@ in
{
meta = {
maintainers = teams.freedesktop.members;
maintainers = teams.freedesktop.members ++ [
lib.maintainers.frontear
];
};
###### interface
@@ -684,13 +686,7 @@ in
networkmanager.connectionConfig = {
"ethernet.cloned-mac-address" = cfg.ethernet.macAddress;
"wifi.cloned-mac-address" = cfg.wifi.macAddress;
"wifi.powersave" =
if cfg.wifi.powersave == null then
null
else if cfg.wifi.powersave then
3
else
2;
"wifi.powersave" = lib.mkIf (cfg.wifi.powersave != null) (if cfg.wifi.powersave then 3 else 2);
};
}
];

View File

@@ -26,13 +26,11 @@ in
params = lib.mkOption {
default = [ ];
type = with lib.types; listOf str;
example = ''
[
"--dpi-desync=fake,disorder2"
"--dpi-desync-ttl=1"
"--dpi-desync-autottl=2"
]
'';
example = [
"--dpi-desync=fake,disorder2"
"--dpi-desync-ttl=1"
"--dpi-desync-autottl=2"
];
description = ''
Specify the bypass parameters for Zapret binary.
There are no universal parameters as they vary between different networks, so you'll have to find them yourself.
@@ -44,14 +42,12 @@ in
whitelist = lib.mkOption {
default = [ ];
type = with lib.types; listOf str;
example = ''
[
"youtube.com"
"googlevideo.com"
"ytimg.com"
"youtu.be"
]
'';
example = [
"youtube.com"
"googlevideo.com"
"ytimg.com"
"youtu.be"
];
description = ''
Specify a list of domains to bypass. All other domains will be ignored.
You can specify either whitelist or blacklist, but not both.
@@ -63,11 +59,9 @@ in
blacklist = lib.mkOption {
default = [ ];
type = with lib.types; listOf str;
example = ''
[
"example.com"
]
'';
example = [
"example.com"
];
description = ''
Specify a list of domains NOT to bypass. All other domains will be bypassed.
You can specify either whitelist or blacklist, but not both.
@@ -124,12 +118,10 @@ in
udpPorts = lib.mkOption {
default = [ ];
type = with lib.types; listOf str;
example = ''
[
"50000:50099"
"1234"
]
'';
example = [
"50000:50099"
"1234"
];
description = ''
List of UDP ports to route.
Port ranges are delimited with a colon like this "50000:50099".

View File

@@ -349,7 +349,6 @@ in
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "same-origin" always;
'';

View File

@@ -197,10 +197,16 @@ in
)
);
security.auditd = lib.mkIf (cfg.settings.ProcMonitorMethod == "audit") {
enable = true;
plugins.af_unix.active = true;
};
systemd = {
packages = [ cfg.package ];
services.opensnitchd = {
wantedBy = [ "multi-user.target" ];
path = lib.optionals (cfg.settings.ProcMonitorMethod == "audit") [ pkgs.audit ];
serviceConfig = {
ExecStart =
let
@@ -210,7 +216,7 @@ in
in
[
""
"${cfg.package}/bin/opensnitchd --config-file ${format.generate "default-config.json" preparedSettings}"
"${lib.getExe' cfg.package "opensnitchd"} --config-file ${format.generate "default-config.json" preparedSettings}"
];
};
preStart = lib.mkIf (cfg.rules != { }) (
@@ -251,5 +257,8 @@ in
};
meta.maintainers = with lib.maintainers; [ onny ];
meta.maintainers = with lib.maintainers; [
onny
grimmauld
];
}

View File

@@ -160,6 +160,9 @@ in
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
# fix book cover cache directory defaults to a path under /nix/store/
environment.CACHE_DIR = "/var/cache/calibre-web";
serviceConfig = {
Type = "simple";
User = cfg.user;
@@ -181,7 +184,6 @@ in
CacheDirectory = "calibre-web";
CacheDirectoryMode = "0750";
environment.CACHE_DIR = "/var/cache/calibre-web";
}
// lib.optionalAttrs (!(lib.hasPrefix "/" cfg.dataDir)) {
StateDirectory = cfg.dataDir;

View File

@@ -0,0 +1,128 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.sshwifty;
format = pkgs.formats.json { };
settings = format.generate "sshwifty.json" cfg.settings;
in
{
options.services.sshwifty = {
enable = lib.mkEnableOption "Sshwifty";
package = lib.mkPackageOption pkgs "sshwifty" { };
settings = lib.mkOption {
type = format.type;
description = ''
Configuration for Sshwifty. See
[the Sshwifty documentation](https://github.com/nirui/sshwifty/tree/master?tab=readme-ov-file#configuration)
for possible options.
'';
};
sharedKeyFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = "Path to a file containing the shared key.";
};
socks5PasswordFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = "Path to a file containing the SOCKS5 password.";
};
};
config = lib.mkIf cfg.enable {
systemd.services.sshwifty = {
description = "Sshwifty";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
script = ''
${lib.optionalString (cfg.sharedKeyFile != null || cfg.socks5PasswordFile != null) (
lib.concatStringsSep " " [
(lib.getExe pkgs.jq)
"-s"
"'.[0] * .[1]"
(lib.optionalString (cfg.sharedKeyFile != null && cfg.socks5PasswordFile != null) "* .[2]")
"'"
settings
(lib.optionalString (
cfg.sharedKeyFile != null
) "<(echo \"{\\\"SharedKey\\\":\\\"$(cat $CREDENTIALS_DIRECTORY/sharedkey)\\\"}\")")
(lib.optionalString (
cfg.socks5PasswordFile != null
) "<(echo \"{\\\"Socks5Password\\\":\\\"$(cat $CREDENTIALS_DIRECTORY/socks5pass)\\\"}\")")
"> /run/sshwifty/sshwifty.json"
]
)}
${lib.optionalString (
cfg.sharedKeyFile != null || cfg.socks5PasswordFile != null
) "export SSHWIFTY_CONFIG=/run/sshwifty/sshwifty.json"}
${lib.optionalString (
cfg.sharedKeyFile == null && cfg.socks5PasswordFile == null
) "export SSHWIFTY_CONFIG=${settings}"}
exec ${lib.getExe cfg.package}
'';
serviceConfig = {
DynamicUser = true;
RuntimeDirectory = "sshwifty";
RuntimeDirectoryMode = "0750";
LoadCredential =
[ ]
++ lib.optionals (cfg.sharedKeyFile != null) [ "sharedkey:${cfg.sharedKeyFile}" ]
++ lib.optionals (cfg.socks5PasswordFile != null) [ "socks5pass:${cfg.socks5PasswordFile}" ];
# Hardening
LockPersonality = true;
MemoryDenyWriteExecute = true;
NoNewPrivileges = true;
PrivateDevices = true;
PrivateMounts = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
RemoveIPC = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
CapabilityBoundingSet = "CAP_NET_BIND_SERVICE";
AmbientCapabilities = "CAP_NET_BIND_SERVICE";
PrivateTmp = "disconnected";
ProcSubset = "pid";
ProtectProc = "invisible";
ProtectSystem = "strict";
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
];
RestrictNamespaces = [
"~cgroup"
"~ipc"
"~mnt"
"~net"
"~pid"
"~user"
"~uts"
];
SystemCallArchitectures = "native";
SystemCallFilter = [
"~@clock"
"~@cpu-emulation"
"~@debug"
"~@module"
"~@mount"
"~@obsolete"
"~@privileged"
"~@raw-io"
"~@reboot"
"~@resources"
"~@swap"
];
UMask = "0077";
};
};
};
meta.maintainers = [ lib.maintainers.ungeskriptet ];
}

View File

@@ -12,7 +12,7 @@ let
mkdir $out
${
if config.boot.initrd.systemd.enable then
if config.boot.initrd.enable && config.boot.initrd.systemd.enable then
''
cp ${config.system.build.bootStage2} $out/prepare-root
substituteInPlace $out/prepare-root --subst-var-by systemConfig $out

View File

@@ -97,13 +97,23 @@ def is_encrypted(device: str) -> bool:
def is_fs_type_supported(fs_type: str) -> bool:
return fs_type.startswith('vfat')
def get_dest_file(path: str) -> str:
package_id = os.path.basename(os.path.dirname(path))
suffix = os.path.basename(path)
return f'{package_id}-{suffix}'
def get_dest_path(path: str, target: str) -> str:
dest_file = get_dest_file(path)
return os.path.join(str(limine_install_dir), target, dest_file)
def get_copied_path_uri(path: str, target: str) -> str:
result = ''
package_id = os.path.basename(os.path.dirname(path))
suffix = os.path.basename(path)
dest_file = f'{package_id}-{suffix}'
dest_path = os.path.join(str(limine_install_dir), target, dest_file)
dest_file = get_dest_file(path)
dest_path = get_dest_path(path, target)
if not os.path.exists(dest_path):
copy_file(path, dest_path)

View File

@@ -28,9 +28,7 @@
options = { };
config =
let
initScript = if config.boot.initrd.systemd.enable then "prepare-root" else "init";
in
{
boot.isContainer = true;
boot.postBootCommands = ''
@@ -79,7 +77,7 @@
contents = [
{
source = config.system.build.toplevel + "/${initScript}";
source = config.system.build.toplevel + "/init";
target = "/sbin/init";
}
# Technically this is not required for lxc, but having also make this configuration work with systemd-nspawn.
@@ -104,7 +102,7 @@
pseudoFiles = [
"/sbin d 0755 0 0"
"/sbin/init s 0555 0 0 ${config.system.build.toplevel}/${initScript}"
"/sbin/init s 0555 0 0 ${config.system.build.toplevel}/init"
"/dev d 0755 0 0"
"/proc d 0555 0 0"
"/sys d 0555 0 0"
@@ -113,7 +111,7 @@
system.build.installBootLoader = pkgs.writeScript "install-lxc-sbin-init.sh" ''
#!${pkgs.runtimeShell}
${pkgs.coreutils}/bin/ln -fs "$1/${initScript}" /sbin/init
${pkgs.coreutils}/bin/ln -fs "$1/init" /sbin/init
'';
# networkd depends on this, but systemd module disables this for containers
@@ -122,7 +120,7 @@
systemd.packages = [ pkgs.distrobuilder.generator ];
system.activationScripts.installInitScript = lib.mkForce ''
ln -fs $systemConfig/${initScript} /sbin/init
ln -fs $systemConfig/init /sbin/init
'';
};
}

View File

@@ -439,7 +439,7 @@ in
imports = [ ./discourse.nix ];
_module.args.package = pkgs.discourseAllPlugins;
};
dnscrypt-proxy2 = runTestOn [ "x86_64-linux" ] ./dnscrypt-proxy2.nix;
dnscrypt-proxy = runTestOn [ "x86_64-linux" ] ./dnscrypt-proxy.nix;
dnsdist = import ./dnsdist.nix { inherit pkgs runTest; };
doas = runTest ./doas.nix;
docker = runTestOn [ "aarch64-linux" "x86_64-linux" ] ./docker.nix;
@@ -494,7 +494,6 @@ in
};
ergo = runTest ./ergo.nix;
ergochat = runTest ./ergochat.nix;
eris-server = runTest ./eris-server.nix;
esphome = runTest ./esphome.nix;
etc = pkgs.callPackage ../modules/system/etc/test.nix { inherit evalMinimalConfig; };
activation = pkgs.callPackage ../modules/system/activation/test.nix { };
@@ -560,10 +559,6 @@ in
flannel = runTestOn [ "x86_64-linux" ] ./flannel.nix;
flaresolverr = runTest ./flaresolverr.nix;
flood = runTest ./flood.nix;
floorp = runTest {
imports = [ ./firefox.nix ];
_module.args.firefoxPackage = pkgs.floorp;
};
fluent-bit = runTest ./fluent-bit.nix;
fluentd = runTest ./fluentd.nix;
fluidd = runTest ./fluidd.nix;
@@ -1374,6 +1369,7 @@ in
sslh = handleTest ./sslh.nix { };
ssh-agent-auth = runTest ./ssh-agent-auth.nix;
ssh-audit = runTest ./ssh-audit.nix;
sshwifty = runTest ./web-apps/sshwifty/default.nix;
sssd = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./sssd.nix { };
sssd-ldap = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./sssd-ldap.nix { };
stalwart-mail = runTest ./stalwart/stalwart-mail.nix;

View File

@@ -11,9 +11,13 @@
{ config, pkgs, ... }:
{
services.anubis = {
defaultOptions.settings = {
DIFFICULTY = 3;
USER_DEFINED_DEFAULT = true;
defaultOptions = {
# Get default botPolicy
botPolicy = lib.importJSON "${config.services.anubis.package.src}/data/botPolicies.json";
settings = {
DIFFICULTY = 3;
USER_DEFINED_DEFAULT = true;
};
};
instances = {
"".settings = {
@@ -38,11 +42,34 @@
group = "nginx";
settings.TARGET = "unix:///run/nginx/nginx.sock";
};
"botPolicy-default" = {
botPolicy = null;
settings.TARGET = "http://localhost:8080";
};
"botPolicy-file" = {
settings = {
TARGET = "http://localhost:8080";
POLICY_FNAME = "/etc/anubis-botPolicy.json";
};
};
};
};
# Empty json for testing
environment.etc."anubis-botPolicy.json".text = lib.generators.toJSON { } {
bots = [
{
name = "allow-all";
user_agent_regex = ".*";
action = "ALLOW";
}
];
};
# support
users.users.nginx.extraGroups = [ config.users.groups.anubis.name ];
users.users.nginx.extraGroups = [ config.services.anubis.defaultOptions.group ];
services.nginx = {
enable = true;
recommendedProxySettings = true;
@@ -115,5 +142,10 @@
# Make sure defaults don't overwrite themselves
machine.succeed('cat /run/current-system/etc/systemd/system/anubis.service | grep "DIFFICULTY=5"')
machine.succeed('cat /run/current-system/etc/systemd/system/anubis-tcp.service | grep "DIFFICULTY=3"')
# Check correct BotPolicy settings are applied
machine.succeed('cat /run/current-system/etc/systemd/system/anubis.service | grep "POLICY_FNAME=/nix/store"')
machine.fail('cat /run/current-system/etc/systemd/system/anubis-botPolicy-default.service | grep "POLICY_FNAME="')
machine.succeed('cat /run/current-system/etc/systemd/system/anubis-botPolicy-file.service | grep "POLICY_FNAME=/etc/anubis-botPolicy.json"')
'';
}

View File

@@ -3,7 +3,7 @@ let
localProxyPort = 43;
in
{
name = "dnscrypt-proxy2";
name = "dnscrypt-proxy";
meta.maintainers = with lib.maintainers; [ joachifm ];
nodes = {
@@ -14,8 +14,8 @@ in
{
security.apparmor.enable = true;
services.dnscrypt-proxy2.enable = true;
services.dnscrypt-proxy2.settings = {
services.dnscrypt-proxy.enable = true;
services.dnscrypt-proxy.settings = {
listen_addresses = [ "127.0.0.1:${toString localProxyPort}" ];
sources.public-resolvers = {
urls = [ "https://download.dnscrypt.info/resolvers-list/v2/public-resolvers.md" ];
@@ -32,7 +32,7 @@ in
testScript = ''
client.wait_for_unit("dnsmasq")
client.wait_for_unit("dnscrypt-proxy2")
client.wait_for_unit("dnscrypt-proxy")
client.wait_until_succeeds("ss --numeric --udp --listening | grep -q ${toString localProxyPort}")
'';
}

View File

@@ -72,9 +72,9 @@ in
];
nodes.client = {
services.dnscrypt-proxy2.enable = true;
services.dnscrypt-proxy2.upstreamDefaults = false;
services.dnscrypt-proxy2.settings = {
services.dnscrypt-proxy.enable = true;
services.dnscrypt-proxy.upstreamDefaults = false;
services.dnscrypt-proxy.settings = {
server_names = [ "server" ];
listen_addresses = [ "[::1]:53" ];
cache = false;
@@ -92,7 +92,7 @@ in
almost_expiration = server.succeed("date --date '14min'").strip()
with subtest("The DNSCrypt client can connect to the server"):
client.wait_until_succeeds("journalctl -u dnscrypt-proxy2 --grep '\\[server\\] OK'")
client.wait_until_succeeds("journalctl -u dnscrypt-proxy --grep '\\[server\\] OK'")
with subtest("DNS queries over UDP are working"):
client.wait_for_open_port(53)

View File

@@ -1,26 +0,0 @@
{ pkgs, lib, ... }:
{
name = "eris-server";
nodes.server = {
environment.systemPackages = [
pkgs.eris-go
pkgs.eriscmd
];
services.eris-server = {
enable = true;
decode = true;
listenHttp = "[::1]:80";
backends = [ "badger+file:///var/cache/eris.badger?get&put" ];
mountpoint = "/eris";
};
};
testScript = ''
start_all()
server.wait_for_unit("eris-server.service")
server.wait_for_open_port(5683)
server.wait_for_open_port(80)
server.succeed("eriscmd get http://[::1] $(echo 'Hail ERIS!' | eriscmd put coap+tcp://[::1]:5683)")
'';
}

View File

@@ -1,7 +1,7 @@
{ lib, ... }:
{
name = "homepage-dashboard";
meta.maintainers = with lib.maintainers; [ jnsgruk ];
meta.maintainers = with lib.maintainers; [ ];
nodes.machine = _: {
services.homepage-dashboard = {

View File

@@ -12,7 +12,7 @@ in
{
name = "multipass";
meta.maintainers = [ lib.maintainers.jnsgruk ];
meta.maintainers = [ ];
nodes.machine =
{ lib, ... }:

View File

@@ -1,28 +1,42 @@
import ./make-test-python.nix {
name = "ntfy-sh";
import ./make-test-python.nix (
{ pkgs, ... }:
{
name = "ntfy-sh";
nodes.machine =
{ ... }:
{
services.ntfy-sh.enable = true;
services.ntfy-sh.settings.base-url = "http://localhost:2586";
};
nodes.machine =
{ ... }:
{
services.ntfy-sh.enable = true;
services.ntfy-sh.settings.base-url = "http://localhost:2586";
testScript = ''
import json
# Create a user with user:123
services.ntfy-sh.environmentFile = pkgs.writeText "ntfy.env" ''
NTFY_AUTH_DEFAULT_ACCESS='deny-all'
NTFY_AUTH_USERS='user:$2a$12$W2v7IQhkayvJOYRpg6YEruxj.jUO3R2xQOU7s1vC3HzLLB9gSKJ9.:user'
NTFY_AUTH_ACCESS='user:test:rw'
'';
};
msg = "Test notification"
testScript = ''
import json
machine.wait_for_unit("multi-user.target")
msg = "Test notification"
machine.wait_for_open_port(2586)
machine.wait_for_unit("multi-user.target")
machine.succeed(f"curl -d '{msg}' localhost:2586/test")
machine.wait_for_open_port(2586)
notif = json.loads(machine.succeed("curl -s localhost:2586/test/json?poll=1"))
machine.succeed(f"curl -u user:1234 -d '{msg}' localhost:2586/test")
assert msg == notif["message"], "Wrong message"
# If we have a user, receive a message
notif = json.loads(machine.succeed("curl -u user:1234 -s localhost:2586/test/json?poll=1"))
assert msg == notif["message"], "Wrong message"
machine.succeed("ntfy user list")
'';
}
# If we have no user, we should get forbidden, making sure the default access config works
notif = json.loads(machine.succeed("curl -s localhost:2586/test/json?poll=1"))
assert 403 == notif["http"], f"Should return 403, got {notif["http"]}"
machine.succeed("ntfy user list")
'';
}
)

View File

@@ -33,7 +33,7 @@ in
enable = true;
settings.DefaultAction = "deny";
settings.ProcMonitorMethod = m;
settings.LogLevel = 0;
settings.LogLevel = 1;
};
}
) monitorMethods
@@ -46,7 +46,7 @@ in
enable = true;
settings.DefaultAction = "deny";
settings.ProcMonitorMethod = m;
settings.LogLevel = 0;
settings.LogLevel = 1;
rules = {
curl = {
name = "curl";
@@ -71,13 +71,24 @@ in
server.wait_for_unit("caddy.service")
server.wait_for_open_port(80)
''
+ lib.concatLines (
map (m: ''
client_blocked_${m}.wait_for_unit("opensnitchd.service")
client_blocked_${m}.fail("curl http://server")
+ (
lib.concatLines (
map (m: ''
client_blocked_${m}.wait_for_unit("opensnitchd.service")
client_blocked_${m}.fail("curl http://server")
client_allowed_${m}.wait_for_unit("opensnitchd.service")
client_allowed_${m}.succeed("curl http://server")
'') monitorMethods
client_allowed_${m}.wait_for_unit("opensnitchd.service")
client_allowed_${m}.succeed("curl http://server")
'') monitorMethods
)
+ ''
# make sure the kernel modules were actually properly loaded
client_blocked_ebpf.succeed(r"journalctl -u opensnitchd --grep '\[eBPF\] module loaded: /nix/store/.*/etc/opensnitchd/opensnitch\.o'")
client_blocked_ebpf.succeed(r"journalctl -u opensnitchd --grep '\[eBPF\] module loaded: /nix/store/.*/etc/opensnitchd/opensnitch-procs\.o'")
client_blocked_ebpf.succeed(r"journalctl -u opensnitchd --grep '\[eBPF\] module loaded: /nix/store/.*/etc/opensnitchd/opensnitch-dns\.o'")
client_allowed_ebpf.succeed(r"journalctl -u opensnitchd --grep '\[eBPF\] module loaded: /nix/store/.*/etc/opensnitchd/opensnitch\.o'")
client_allowed_ebpf.succeed(r"journalctl -u opensnitchd --grep '\[eBPF\] module loaded: /nix/store/.*/etc/opensnitchd/opensnitch-procs\.o'")
client_allowed_ebpf.succeed(r"journalctl -u opensnitchd --grep '\[eBPF\] module loaded: /nix/store/.*/etc/opensnitchd/opensnitch-dns\.o'")
''
);
}

View File

@@ -2,7 +2,7 @@
{
name = "scrutiny";
meta.maintainers = with lib.maintainers; [ jnsgruk ];
meta.maintainers = with lib.maintainers; [ ];
nodes = {
machine =

View File

@@ -27,10 +27,6 @@
SB_USER=user:password
SB_AUTH_TOKEN=test
'';
extraArgs = [
"--reindex"
"--db /home/test/silverbullet/custom.db"
];
};
};

View File

@@ -1,4 +1,5 @@
{
lib,
pkgs,
...
}:
@@ -12,7 +13,7 @@ let
in
{
name = "snapcast";
meta = with pkgs.lib.maintainers; {
meta = with lib.maintainers; {
maintainers = [ hexa ];
};
@@ -20,30 +21,27 @@ in
server = {
services.snapserver = {
enable = true;
port = port;
tcp.port = tcpPort;
http.port = httpPort;
openFirewall = true;
buffer = bufferSize;
streams = {
mpd = {
type = "pipe";
location = "/run/snapserver/mpd";
query.mode = "create";
};
bluetooth = {
type = "pipe";
location = "/run/snapserver/bluetooth";
settings = {
stream = {
port = port;
source = [
"pipe:///run/snapserver/mpd?name=mpd&mode=create"
"pipe:///run/snapserver/bluetooth?name=bluetooth"
"tcp://127.0.0.1:${toString tcpStreamPort}?name=tcp"
"meta:///mpd/bluetooth/tcp?name=meta"
];
buffer = bufferSize;
};
tcp = {
type = "tcp";
location = "127.0.0.1:${toString tcpStreamPort}";
enabled = true;
port = tcpPort;
};
meta = {
type = "meta";
location = "/mpd/bluetooth/tcp";
http = {
enabled = true;
port = httpPort;
};
};
openFirewall = true;
};
environment.systemPackages = [ pkgs.snapcast ];
};

View File

@@ -99,6 +99,7 @@ import ./make-test-python.nix (
objectClass: posixAccount
userPassword: ${testPassword}
homeDirectory: /home/${testUser}
loginShell: /run/current-system/sw/bin/bash
uidNumber: 1234
gidNumber: 1234
cn: ""

View File

@@ -0,0 +1,32 @@
{ lib, pkgs, ... }:
{
name = "sshwifty";
nodes.machine =
{ ... }:
{
services.sshwifty = {
enable = true;
sharedKeyFile = pkgs.writeText "sharedkey" "rpz2E4QI6uPMLr";
settings = {
HostName = "localhost";
Servers = [
{
ListenInterface = "::1";
ListenPort = 80;
ServerMessage = "NixOS test";
}
];
};
};
};
testScript = ''
machine.wait_for_unit("sshwifty.service")
machine.wait_for_open_port(80)
machine.wait_until_succeeds("curl --fail -6 http://localhost/", timeout=60)
machine.wait_until_succeeds("${lib.getExe pkgs.nodejs} ${./sshwifty-test.js}", timeout=60)
'';
meta.maintainers = [ lib.maintainers.ungeskriptet ];
}

View File

@@ -0,0 +1,83 @@
#!/usr/bin/env node
/* Based on ui/app.js from Sshwifty. */
const { subtle } = require('node:crypto')
const sshwiftyURL = 'http://localhost/sshwifty/socket/verify'
const sharedKey = 'rpz2E4QI6uPMLr'
const serverMessage = 'NixOS test'
async function hmac512(secret, data) {
const key = await subtle.importKey(
'raw',
secret,
{ name: 'HMAC', hash: { name: 'SHA-512' } },
false,
['sign', 'verify'],
)
return subtle.sign(key.algorithm, key, data)
}
async function getSocketAuthKey(privateKey) {
const enc = new TextEncoder(),
rTime = Number(Math.trunc(Date.now() / 100000))
return new Uint8Array(
await hmac512(enc.encode(privateKey), enc.encode(rTime)),
).slice(0, 32)
}
async function requestAuth(privateKey) {
const authKey = await getSocketAuthKey(privateKey)
const h = await fetch(sshwiftyURL, {
headers: { 'X-Key': btoa(String.fromCharCode.apply(null, authKey)) },
})
const serverDate = h.headers.get('Date')
return {
result: h.status,
date: serverDate ? new Date(serverDate) : null,
text: await h.text(),
}
}
async function tryInitialAuth() {
try {
const result = await requestAuth(sharedKey)
if (result.date) {
const serverRespondTime = result.date,
serverRespondTimestamp = serverRespondTime.getTime(),
clientCurrent = new Date(),
clientTimestamp = clientCurrent.getTime(),
timeDiff = Math.abs(serverRespondTimestamp - clientTimestamp)
if (timeDiff > 30000) {
console.log('Time difference between client and server too big.')
process.exit(1)
}
}
switch (result.result) {
case 200:
if (result.text.includes(serverMessage)) {
console.log('All good.')
process.exit()
} else {
console.log('Server message not found')
process.exit(1)
}
break
case 403:
console.log('We need auth.')
process.exit(1)
break
case 0:
console.log('Timeout?')
process.exit(1)
break
default:
console.log('wghat')
process.exit(1)
}
} catch {
console.log('Something went horribly wrong, ouch.')
process.exit(1)
}
}
console.log('Testing Sshwifty')
tryInitialAuth()

View File

@@ -21,11 +21,11 @@ assert withConplay -> !libOnly;
stdenv.mkDerivation rec {
pname = "${lib.optionalString libOnly "lib"}mpg123";
version = "1.33.0";
version = "1.33.2";
src = fetchurl {
url = "mirror://sourceforge/mpg123/mpg123-${version}.tar.bz2";
hash = "sha256-IpDjrt5vTRY+GhdFIWWvM8qtS18JSPmUKc+i2Dhfqp0=";
hash = "sha256-LFT6u/ppbc6PmxN8jvekKaBh+P5jPNfQpRGAmFXywhk=";
};
outputs = [

View File

@@ -8,6 +8,7 @@
asio,
avahi,
boost,
expat,
flac,
libogg,
libvorbis,
@@ -23,13 +24,13 @@
stdenv.mkDerivation rec {
pname = "snapcast";
version = "0.30.0";
version = "0.32.3";
src = fetchFromGitHub {
owner = "badaix";
repo = "snapcast";
rev = "v${version}";
hash = "sha256-EJgpZz4PnXfge0rkVH1F7cah+i9AvDJVSUVqL7qChDM=";
hash = "sha256-pGON2Nh7GgcGvMUNI3nWstm5Q9R+VW9eEi4IE6KkFBo=";
};
nativeBuildInputs = [
@@ -42,6 +43,7 @@ stdenv.mkDerivation rec {
boost
asio
avahi
expat
flac
libogg
libvorbis

View File

@@ -14,13 +14,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "youtube-music";
version = "3.10.0";
version = "3.11.0";
src = fetchFromGitHub {
owner = "th-ch";
repo = "youtube-music";
tag = "v${finalAttrs.version}";
hash = "sha256-+PCDA7lHaUQw9DhODRsEScyJC+9v8UPiZ1W8w2h/Ljg=";
hash = "sha256-M8YFpeauM55fpNyHSGQm8iZieV0oWqOieVThhglKKPE=";
};
patches = [
@@ -31,7 +31,7 @@ stdenv.mkDerivation (finalAttrs: {
pnpmDeps = pnpm.fetchDeps {
inherit (finalAttrs) pname version src;
fetcherVersion = 2;
hash = "sha256-b5I0n3CedA6qCL68lePU3pwyGp1JlQHzUpfCvhqw2qI=";
hash = "sha256-xZQ8rnLGD0ZxxUUPLHmNJ6mA+lnUHCTBvtJTiIPxaZU=";
};
nativeBuildInputs = [

View File

@@ -11,26 +11,26 @@
gtk3,
json-glib,
libgee,
util-linux,
util-linuxMinimal,
vte,
xapp,
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "timeshift";
version = "25.07.7";
src = fetchFromGitHub {
owner = "linuxmint";
repo = "timeshift";
rev = version;
tag = finalAttrs.version;
hash = "sha256-X3TwUkOeGzcgFM/4Fyfs8eQuGK2wHe3t13WSpIizX8s=";
};
postPatch = ''
for FILE in src/Core/Main.vala src/Utility/Device.vala; do
substituteInPlace "$FILE" \
--replace-fail "/sbin/blkid" "${lib.getExe' util-linux "blkid"}"
--replace-fail "/sbin/blkid" "${lib.getExe' util-linuxMinimal "blkid"}"
done
substituteInPlace ./src/Utility/IconManager.vala \
@@ -62,18 +62,18 @@ stdenv.mkDerivation rec {
NIX_CFLAGS_COMPILE = "-Wno-error=implicit-function-declaration";
};
meta = with lib; {
meta = {
description = "System restore tool for Linux";
longDescription = ''
TimeShift creates filesystem snapshots using rsync+hardlinks or BTRFS snapshots.
Snapshots can be restored using TimeShift installed on the system or from Live CD or USB.
'';
homepage = "https://github.com/linuxmint/timeshift";
license = licenses.gpl2Plus;
platforms = platforms.linux;
maintainers = with maintainers; [
license = lib.licenses.gpl2Plus;
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [
ShamrockLee
bobby285271
];
};
}
})

View File

@@ -12,7 +12,7 @@
}:
runCommand "sddm-wrapped"
{
inherit (unwrapped) version;
inherit (unwrapped) version outputs;
buildInputs =
unwrapped.buildInputs
@@ -45,4 +45,7 @@ runCommand "sddm-wrapped"
for i in bin/*; do
makeQtWrapper ${unwrapped}/$i $out/$i --set SDDM_GREETER_DIR $out/bin
done
mkdir -p $man
ln -s ${lib.getMan unwrapped}/* $man/
''

View File

@@ -14,6 +14,7 @@
systemd,
xkeyboardconfig,
nixosTests,
docutils,
}:
let
isQt6 = lib.versions.major qtbase.version == "6";
@@ -29,6 +30,11 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-r5mnEWham2WnoEqRh5tBj/6rn5mN62ENOCmsLv2Ht+w=";
};
outputs = [
"out"
"man"
];
patches = [
./greeter-path.patch
./sddm-ignore-config-mtime.patch
@@ -44,6 +50,7 @@ stdenv.mkDerivation (finalAttrs: {
cmake
pkg-config
qttools
docutils
];
buildInputs = [
@@ -61,6 +68,7 @@ stdenv.mkDerivation (finalAttrs: {
cmakeFlags = [
(lib.cmakeBool "BUILD_WITH_QT6" isQt6)
(lib.cmakeBool "BUILD_MAN_PAGES" true)
"-DCONFIG_FILE=/etc/sddm.conf"
"-DCONFIG_DIR=/etc/sddm.conf.d"

View File

@@ -24,8 +24,8 @@ let
sha256Hash = "sha256-S8KK/EGev0v03fVywIkD6Ym3LrciGKXJVorzyZ1ljdQ=";
};
latestVersion = {
version = "2025.1.4.3"; # "Android Studio Narwhal 4 Feature Drop | 2025.1.4 Canary 3"
sha256Hash = "sha256-YYacdZ7YdmmrTSsKtCfmSSrrZV+/GGPK34KnlO0+aKQ=";
version = "2025.1.4.4"; # "Android Studio Narwhal 4 Feature Drop | 2025.1.4 Canary 4"
sha256Hash = "sha256-Cp5oZiCJJDffZRAg7CPNNR82Mn6k4QpjQtqMiokFAws=";
};
in
{

View File

@@ -12,7 +12,7 @@ lib.makeScope pkgs.newScope (
sources = import ./sources.nix {
inherit lib;
inherit (pkgs)
fetchFromBitbucket
fetchFromGitHub
fetchzip
;
};
@@ -31,7 +31,7 @@ lib.makeScope pkgs.newScope (
withPgtk = true;
};
emacs29-macport = callPackage (self.sources.emacs29-macport) (
emacs30-macport = callPackage (self.sources.emacs30-macport) (
inheritedArgs
// {
srcRepo = true;

View File

@@ -57,12 +57,11 @@
sigtool,
sqlite,
replaceVars,
systemd,
systemdLibs,
tree-sitter,
texinfo,
webkitgtk_4_0,
wrapGAppsHook3,
writeText,
zlib,
# Boolean flags
@@ -88,7 +87,7 @@
withPgtk ? false,
withSelinux ? stdenv.hostPlatform.isLinux,
withSQLite3 ? true,
withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd,
withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemdLibs,
withToolkitScrollBars ? true,
withTreeSitter ? true,
withWebP ? true,
@@ -322,7 +321,7 @@ stdenv.mkDerivation (finalAttrs: {
sqlite
]
++ lib.optionals withSystemd [
systemd
systemdLibs
]
++ lib.optionals withTreeSitter [
tree-sitter

View File

@@ -1,6 +1,6 @@
{
lib,
fetchFromBitbucket,
fetchFromGitHub,
fetchzip,
}:
@@ -32,8 +32,8 @@ let
}
);
"macport" = (
fetchFromBitbucket {
owner = "mituharu";
fetchFromGitHub {
owner = "jdtsmith";
repo = "emacs-mac";
inherit rev hash;
}
@@ -68,13 +68,14 @@ let
''
+ lib.optionalString (variant == "macport") ''
This release is built from Mitsuharu Yamamoto's patched source code
tailored for macOS.
This release initially was built from Mitsuharu Yamamoto's patched source code
tailored for macOS. Moved to a fork of the latter starting with emacs v30 as the
original project seems to be currently dormant.
'';
changelog =
{
"mainline" = "https://www.gnu.org/savannah-checkouts/gnu/emacs/news/NEWS.${version}";
"macport" = "https://bitbucket.org/mituharu/emacs-mac/raw/${rev}/NEWS-mac";
"macport" = "https://github.com/jdtsmith/emacs-mac/blob/${rev}/NEWS-mac";
}
.${variant};
license = lib.licenses.gpl3Plus;
@@ -88,7 +89,9 @@ let
matthewbauer
panchoh
];
"macport" = with lib.maintainers; [ ];
"macport" = with lib.maintainers; [
kfiz
];
}
.${variant};
platforms =
@@ -117,26 +120,11 @@ in
];
});
emacs29-macport = import ./make-emacs.nix (mkArgs {
emacs30-macport = import ./make-emacs.nix (mkArgs {
pname = "emacs-mac";
version = "29.4";
version = "30.2.50";
variant = "macport";
rev = "emacs-29.4-mac-10.1";
hash = "sha256-8OQ+fon9tclbh/eUJ09uqKfMaz9M77QnLIp2R8QB6Ic=";
patches = fetchpatch: [
# CVE-2024-53920
(fetchpatch {
url = "https://gitweb.gentoo.org/proj/emacs-patches.git/plain/emacs/29.4/07_all_trusted-content.patch?id=f24370de4de0a37304958ec1569d5c50c1745b7f";
hash = "sha256-zUWM2HDO5MHEB5fC5TCUxzmSafMvXO5usRzCyp9Q7P4=";
})
# CVE-2025-1244
(fetchpatch {
url = "https://gitweb.gentoo.org/proj/emacs-patches.git/plain/emacs/29.4/06_all_man.patch?id=f24370de4de0a37304958ec1569d5c50c1745b7f";
hash = "sha256-Vdf6GF5YmGoHTkxiD9mdYH0hgvfovZwrqYN1NQ++U1w=";
})
];
meta.knownVulnerabilities = [ ];
rev = "emacs-mac-30.2";
hash = "sha256-i/W2Xa6Vk1+T1fs6fa4wJVMLLB6BK8QAPcdmPrU8NwM=";
});
}

View File

@@ -11,10 +11,10 @@
"clion": {
"update-channel": "CLion RELEASE",
"url-template": "https://download.jetbrains.com/cpp/CLion-{version}.tar.gz",
"version": "2025.2",
"sha256": "a12d094544f0b5222d34e2cd8b36b1ea834e7c7acdea7b65aae5cb3522ca108e",
"url": "https://download.jetbrains.com/cpp/CLion-2025.2.tar.gz",
"build_number": "252.23892.426"
"version": "2025.2.1",
"sha256": "f50e1a1e5172f652efdb7d72dc8c2a6222564671983b0c8b03caa68c56630648",
"url": "https://download.jetbrains.com/cpp/CLion-2025.2.1.tar.gz",
"build_number": "252.25557.127"
},
"datagrip": {
"update-channel": "DataGrip RELEASE",
@@ -35,10 +35,10 @@
"gateway": {
"update-channel": "Gateway RELEASE",
"url-template": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}.tar.gz",
"version": "2025.2",
"sha256": "195509b4e35ba3d31f71e3c39ea32e17dbfebddae857691234fc0683802ce448",
"url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2025.2.tar.gz",
"build_number": "252.23892.437"
"version": "2025.2.1",
"sha256": "bf96140b50e890215104f0806f5f160161a2889ebf7362a3b936ca0eb304bf67",
"url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2025.2.1.tar.gz",
"build_number": "252.25557.133"
},
"goland": {
"update-channel": "GoLand RELEASE",
@@ -51,18 +51,18 @@
"idea-community": {
"update-channel": "IntelliJ IDEA RELEASE",
"url-template": "https://download.jetbrains.com/idea/ideaIC-{version}.tar.gz",
"version": "2025.2",
"sha256": "30e917c55507443c61674d0bdd5cbb40a5b02c628d5073f8a0028ef49e0c50b5",
"url": "https://download.jetbrains.com/idea/ideaIC-2025.2.tar.gz",
"build_number": "252.23892.409"
"version": "2025.2.1",
"sha256": "fc76fe8b6693b18d5d7385bb005f415287dbd5897b313287b9ef56dd0df9d5bd",
"url": "https://download.jetbrains.com/idea/ideaIC-2025.2.1.tar.gz",
"build_number": "252.25557.131"
},
"idea-ultimate": {
"update-channel": "IntelliJ IDEA RELEASE",
"url-template": "https://download.jetbrains.com/idea/ideaIU-{version}.tar.gz",
"version": "2025.2",
"sha256": "d28d0d647cf5f0d2eedd49602493be4a3182aec83c73df01b887164f56db0ff4",
"url": "https://download.jetbrains.com/idea/ideaIU-2025.2.tar.gz",
"build_number": "252.23892.409"
"version": "2025.2.1",
"sha256": "ac36d03153894f393fb65c05f57be4722c2a2374d03b7374b37baf856705d5fd",
"url": "https://download.jetbrains.com/idea/ideaIU-2025.2.1.tar.gz",
"build_number": "252.25557.131"
},
"mps": {
"update-channel": "MPS RELEASE",
@@ -75,35 +75,35 @@
"phpstorm": {
"update-channel": "PhpStorm RELEASE",
"url-template": "https://download.jetbrains.com/webide/PhpStorm-{version}.tar.gz",
"version": "2025.2",
"sha256": "d0d3e61aaed7c4765b4947a8410a885cf7e1123c488340585ed72151f8c05350",
"url": "https://download.jetbrains.com/webide/PhpStorm-2025.2.tar.gz",
"build_number": "252.23892.419",
"version": "2025.2.1",
"sha256": "0cc9235210dc09fb54602f176de881c4f2b6852d7a5f2ae9f7750d83a3ffa8f6",
"url": "https://download.jetbrains.com/webide/PhpStorm-2025.2.1.tar.gz",
"build_number": "252.25557.128",
"version-major-minor": "2022.3"
},
"pycharm-community": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-community-{version}.tar.gz",
"version": "2025.2.0.1",
"sha256": "2b95c6169c6f9bb00657e24cecdad23281c423b661918c09781894f3508f8672",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.0.1.tar.gz",
"build_number": "252.23892.515"
"version": "2025.2.1",
"sha256": "fda3fef97cbc6591cee64fdc7e48bb7a5634be63e527293cd5146537dc562493",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.1.tar.gz",
"build_number": "252.25557.130"
},
"pycharm-professional": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}.tar.gz",
"version": "2025.2.0.1",
"sha256": "555a20eb9a695f52430fc3ef1b43c229186df5bf1c8962de55db0ef7eb308fb4",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.0.1.tar.gz",
"build_number": "252.23892.515"
"version": "2025.2.1",
"sha256": "2d62753a2c77dcc268593c28fb965bed6e6e6e89f9739c54e21b01024f91a2c0",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.1.tar.gz",
"build_number": "252.25557.130"
},
"rider": {
"update-channel": "Rider RELEASE",
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}.tar.gz",
"version": "2025.2",
"sha256": "661d5e8fc12e6373e7a84ee197aa755d77c2e3fe0246284c79bc20682d39d309",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.tar.gz",
"build_number": "252.23892.524"
"version": "2025.2.0.1",
"sha256": "6564e426e74e760409c39c475cbb3d2d39265574346e1387b7f359d3fcad85fd",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.0.1.tar.gz",
"build_number": "252.23892.537"
},
"ruby-mine": {
"update-channel": "RubyMine RELEASE",
@@ -116,18 +116,18 @@
"rust-rover": {
"update-channel": "RustRover RELEASE",
"url-template": "https://download.jetbrains.com/rustrover/RustRover-{version}.tar.gz",
"version": "2025.2",
"sha256": "98bf8781c9325d3c4ddd6b0f4efb934b209f2afcbf97533effd2e8ffe40800e0",
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.tar.gz",
"build_number": "252.23892.452"
"version": "2025.2.1",
"sha256": "19fde47a5c3c8e1b21b402c3351018eed64e2cff575f32a86c884168b522074a",
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.1.tar.gz",
"build_number": "252.25557.134"
},
"webstorm": {
"update-channel": "WebStorm RELEASE",
"url-template": "https://download.jetbrains.com/webstorm/WebStorm-{version}.tar.gz",
"version": "2025.2",
"sha256": "85c83e8ed716e9cda03be922fd10d95c482f9f3c27e095dd768ddefd1e69462f",
"url": "https://download.jetbrains.com/webstorm/WebStorm-2025.2.tar.gz",
"build_number": "252.23892.411"
"version": "2025.2.1",
"sha256": "8d03ae22e4bac309edbf58310b4fc758fedaee5dc065467eeda005fac5217d2b",
"url": "https://download.jetbrains.com/webstorm/WebStorm-2025.2.1.tar.gz",
"build_number": "252.25557.126"
},
"writerside": {
"update-channel": "Writerside EAP",
@@ -150,10 +150,10 @@
"clion": {
"update-channel": "CLion RELEASE",
"url-template": "https://download.jetbrains.com/cpp/CLion-{version}-aarch64.tar.gz",
"version": "2025.2",
"sha256": "a594949bd15a70dd17906d056778b8107a209e0bc874a188b411da8e8f7e4f16",
"url": "https://download.jetbrains.com/cpp/CLion-2025.2-aarch64.tar.gz",
"build_number": "252.23892.426"
"version": "2025.2.1",
"sha256": "7fff28163607d3a6da7eceb788829cb81ac03e90f694d7b2c0a47b2821b47f4a",
"url": "https://download.jetbrains.com/cpp/CLion-2025.2.1-aarch64.tar.gz",
"build_number": "252.25557.127"
},
"datagrip": {
"update-channel": "DataGrip RELEASE",
@@ -174,10 +174,10 @@
"gateway": {
"update-channel": "Gateway RELEASE",
"url-template": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}-aarch64.tar.gz",
"version": "2025.2",
"sha256": "f0149112bf8813cd37cdf65fa098b2261914263854b025001cfffd0592fc2e69",
"url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2025.2-aarch64.tar.gz",
"build_number": "252.23892.437"
"version": "2025.2.1",
"sha256": "8c4a8c0d15f5afbb17f0ea54e4455f4d69407536459d0d4986fce966e8ae9290",
"url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2025.2.1-aarch64.tar.gz",
"build_number": "252.25557.133"
},
"goland": {
"update-channel": "GoLand RELEASE",
@@ -190,18 +190,18 @@
"idea-community": {
"update-channel": "IntelliJ IDEA RELEASE",
"url-template": "https://download.jetbrains.com/idea/ideaIC-{version}-aarch64.tar.gz",
"version": "2025.2",
"sha256": "dead5589e78a10e5b6df76c484139679c80c94d1ce9c9c5778721ced1ee02b5d",
"url": "https://download.jetbrains.com/idea/ideaIC-2025.2-aarch64.tar.gz",
"build_number": "252.23892.409"
"version": "2025.2.1",
"sha256": "ca454bcfe40196adacf12c726d8d44876d8a03c88884f7a08715e5562a45d1a2",
"url": "https://download.jetbrains.com/idea/ideaIC-2025.2.1-aarch64.tar.gz",
"build_number": "252.25557.131"
},
"idea-ultimate": {
"update-channel": "IntelliJ IDEA RELEASE",
"url-template": "https://download.jetbrains.com/idea/ideaIU-{version}-aarch64.tar.gz",
"version": "2025.2",
"sha256": "eb6b322db2679b45d9d362fc4579b5ddbd1b7510b9f407ea8c34d18b90f62e7b",
"url": "https://download.jetbrains.com/idea/ideaIU-2025.2-aarch64.tar.gz",
"build_number": "252.23892.409"
"version": "2025.2.1",
"sha256": "bf292cf0a2822c4b697e4d1e6a7c049c6b91f8cab3d457259d52fd65bbdcdea9",
"url": "https://download.jetbrains.com/idea/ideaIU-2025.2.1-aarch64.tar.gz",
"build_number": "252.25557.131"
},
"mps": {
"update-channel": "MPS RELEASE",
@@ -214,35 +214,35 @@
"phpstorm": {
"update-channel": "PhpStorm RELEASE",
"url-template": "https://download.jetbrains.com/webide/PhpStorm-{version}-aarch64.tar.gz",
"version": "2025.2",
"sha256": "06821ba75ce5dd5f192246befd5aedfc236606d8c4a1a2c15bf3d21a39c6cf04",
"url": "https://download.jetbrains.com/webide/PhpStorm-2025.2-aarch64.tar.gz",
"build_number": "252.23892.419",
"version": "2025.2.1",
"sha256": "68f4d7f3ca81e25023a08a34d1163fdcf0ef8f803cbdd9bc81efdcadd2ccf7ae",
"url": "https://download.jetbrains.com/webide/PhpStorm-2025.2.1-aarch64.tar.gz",
"build_number": "252.25557.128",
"version-major-minor": "2022.3"
},
"pycharm-community": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-community-{version}-aarch64.tar.gz",
"version": "2025.2.0.1",
"sha256": "820f8f1a749d2544a4e4511ff23e8b55f3fe5faa4e0b715ba44999f784c5ac94",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.0.1-aarch64.tar.gz",
"build_number": "252.23892.515"
"version": "2025.2.1",
"sha256": "6d078405b94e984a4306c81c1ce73a8e95b3bcead176ee8f830ee9928d8e5df5",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.1-aarch64.tar.gz",
"build_number": "252.25557.130"
},
"pycharm-professional": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}-aarch64.tar.gz",
"version": "2025.2.0.1",
"sha256": "d5a00d4774ad5861fad457494b644bb0ee4c6017f1f6c881da4afd23b44fdaf7",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.0.1-aarch64.tar.gz",
"build_number": "252.23892.515"
"version": "2025.2.1",
"sha256": "39400c3134a74ae653df31e9dae3b464d9bb6970110e9028e81d22175c40f407",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.1-aarch64.tar.gz",
"build_number": "252.25557.130"
},
"rider": {
"update-channel": "Rider RELEASE",
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}-aarch64.tar.gz",
"version": "2025.2",
"sha256": "19b8c6322aac489888afe9eea81dcb6a114b4cc75d525ee3ea8a86899c6b42c7",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2-aarch64.tar.gz",
"build_number": "252.23892.524"
"version": "2025.2.0.1",
"sha256": "a6dcbd1e824cdd8aeb537ea40325350e997f6768305eb65b6d8be138954f32b8",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.0.1-aarch64.tar.gz",
"build_number": "252.23892.537"
},
"ruby-mine": {
"update-channel": "RubyMine RELEASE",
@@ -255,18 +255,18 @@
"rust-rover": {
"update-channel": "RustRover RELEASE",
"url-template": "https://download.jetbrains.com/rustrover/RustRover-{version}-aarch64.tar.gz",
"version": "2025.2",
"sha256": "aeb1876b94904056994b8735c4e9b35b2579daea843347ae04eaf9634bb71370",
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2-aarch64.tar.gz",
"build_number": "252.23892.452"
"version": "2025.2.1",
"sha256": "60d22c93e3924f3defa51ace317fc6f715a6a5ef4e8ec18f1f361e6aa1d2a9d5",
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.1-aarch64.tar.gz",
"build_number": "252.25557.134"
},
"webstorm": {
"update-channel": "WebStorm RELEASE",
"url-template": "https://download.jetbrains.com/webstorm/WebStorm-{version}-aarch64.tar.gz",
"version": "2025.2",
"sha256": "e7d22b83e0ca89d9aa7663c5444382d77296e7b71ec3e73133f85e83363c0a45",
"url": "https://download.jetbrains.com/webstorm/WebStorm-2025.2-aarch64.tar.gz",
"build_number": "252.23892.411"
"version": "2025.2.1",
"sha256": "ce335848f4771392c971d054b4a378a98ee6f77347c1e64d0631981715a034e3",
"url": "https://download.jetbrains.com/webstorm/WebStorm-2025.2.1-aarch64.tar.gz",
"build_number": "252.25557.126"
},
"writerside": {
"update-channel": "Writerside EAP",
@@ -289,10 +289,10 @@
"clion": {
"update-channel": "CLion RELEASE",
"url-template": "https://download.jetbrains.com/cpp/CLion-{version}.dmg",
"version": "2025.2",
"sha256": "7fb1e9149b29e9794af5975715f14c65b856358ea64161eddb81a80e576158cf",
"url": "https://download.jetbrains.com/cpp/CLion-2025.2.dmg",
"build_number": "252.23892.426"
"version": "2025.2.1",
"sha256": "1cc896ae584c51009674f12d9c43d481b108b8e59243e60b094e7a967bb64652",
"url": "https://download.jetbrains.com/cpp/CLion-2025.2.1.dmg",
"build_number": "252.25557.127"
},
"datagrip": {
"update-channel": "DataGrip RELEASE",
@@ -313,10 +313,10 @@
"gateway": {
"update-channel": "Gateway RELEASE",
"url-template": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}.dmg",
"version": "2025.2",
"sha256": "637f096b34e8fb4425c570c3140de464ee96884b222cec5df1f630ea7aed833f",
"url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2025.2.dmg",
"build_number": "252.23892.437"
"version": "2025.2.1",
"sha256": "4f48557a9a1ded6a88bc6bf17d65879f54b2314142c65e65d844df92d770de03",
"url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2025.2.1.dmg",
"build_number": "252.25557.133"
},
"goland": {
"update-channel": "GoLand RELEASE",
@@ -329,18 +329,18 @@
"idea-community": {
"update-channel": "IntelliJ IDEA RELEASE",
"url-template": "https://download.jetbrains.com/idea/ideaIC-{version}.dmg",
"version": "2025.2",
"sha256": "ded2e2b6ade9040a8a32a690c34e1c1c90daa35ec6c3956217cf780c38380445",
"url": "https://download.jetbrains.com/idea/ideaIC-2025.2.dmg",
"build_number": "252.23892.409"
"version": "2025.2.1",
"sha256": "48d3f6523cc6fe94ad8020357b6de5e977fb2a49c8041773ffae7f946d418224",
"url": "https://download.jetbrains.com/idea/ideaIC-2025.2.1.dmg",
"build_number": "252.25557.131"
},
"idea-ultimate": {
"update-channel": "IntelliJ IDEA RELEASE",
"url-template": "https://download.jetbrains.com/idea/ideaIU-{version}.dmg",
"version": "2025.2",
"sha256": "a142bd47516ee184d3d76676d78451f3e9e05a32ba8fdf8778ac04579b3accab",
"url": "https://download.jetbrains.com/idea/ideaIU-2025.2.dmg",
"build_number": "252.23892.409"
"version": "2025.2.1",
"sha256": "a768de8ff17cfb940d402ed907777e50c669e770ccd7515613086cd6d35f81d4",
"url": "https://download.jetbrains.com/idea/ideaIU-2025.2.1.dmg",
"build_number": "252.25557.131"
},
"mps": {
"update-channel": "MPS RELEASE",
@@ -353,35 +353,35 @@
"phpstorm": {
"update-channel": "PhpStorm RELEASE",
"url-template": "https://download.jetbrains.com/webide/PhpStorm-{version}.dmg",
"version": "2025.2",
"sha256": "2a28e39d10e6470c25839698a160eb0076fb5f8a1e0e3cb9000876d05ab0d502",
"url": "https://download.jetbrains.com/webide/PhpStorm-2025.2.dmg",
"build_number": "252.23892.419",
"version": "2025.2.1",
"sha256": "8ea7143923c6f18c130e8d85530c423fa4eea5a81543094af9ad4c8155a26215",
"url": "https://download.jetbrains.com/webide/PhpStorm-2025.2.1.dmg",
"build_number": "252.25557.128",
"version-major-minor": "2022.3"
},
"pycharm-community": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-community-{version}.dmg",
"version": "2025.2.0.1",
"sha256": "0fa4e9c93bcb1f0d56dd7faecbb01b38d3c07fbbcf4fc8c0ad4dc5dc2f15b5a9",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.0.1.dmg",
"build_number": "252.23892.515"
"version": "2025.2.1",
"sha256": "34399746d564baf5c15a7e4be8e37c4146de7e27efe965afba1344d3aaceae2a",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.1.dmg",
"build_number": "252.25557.130"
},
"pycharm-professional": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}.dmg",
"version": "2025.2.0.1",
"sha256": "440e613cc7e9d02ea27c921168b27a120e0eed5d084d878a6e7f9af3c874ac1a",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.0.1.dmg",
"build_number": "252.23892.515"
"version": "2025.2.1",
"sha256": "52b9c5b8b6fc8cf6a460e5a57c231f052c690e0b5a10f566ab9f380460daff4f",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.1.dmg",
"build_number": "252.25557.130"
},
"rider": {
"update-channel": "Rider RELEASE",
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}.dmg",
"version": "2025.2",
"sha256": "c03da6f4c519e1c697ada502f43d1152e41614262970cbbf4df15d2f470658f3",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.dmg",
"build_number": "252.23892.524"
"version": "2025.2.0.1",
"sha256": "88e356f3d6c862c77368a9c034f3a895560f468b79f45af87daa410b5737f451",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.0.1.dmg",
"build_number": "252.23892.537"
},
"ruby-mine": {
"update-channel": "RubyMine RELEASE",
@@ -394,18 +394,18 @@
"rust-rover": {
"update-channel": "RustRover RELEASE",
"url-template": "https://download.jetbrains.com/rustrover/RustRover-{version}.dmg",
"version": "2025.2",
"sha256": "c0f19ea5e9c7cb27f80312d0eb8c7f7c3b294a0bf583b0a423930827f3cd73c5",
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.dmg",
"build_number": "252.23892.452"
"version": "2025.2.1",
"sha256": "9143fa9bfcab98ed2a5215c006bb6bf5521ee5c9a9f08f6f321d0a873cfb39cc",
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.1.dmg",
"build_number": "252.25557.134"
},
"webstorm": {
"update-channel": "WebStorm RELEASE",
"url-template": "https://download.jetbrains.com/webstorm/WebStorm-{version}.dmg",
"version": "2025.2",
"sha256": "c748bf829295f1d431c032ccbe88d3bcaf771699c8e654ea4bc9f419fb87b576",
"url": "https://download.jetbrains.com/webstorm/WebStorm-2025.2.dmg",
"build_number": "252.23892.411"
"version": "2025.2.1",
"sha256": "38ba2b01c688d838f5cb533eb9d575223135eb753d7f38865aaf4d27b56b5bf5",
"url": "https://download.jetbrains.com/webstorm/WebStorm-2025.2.1.dmg",
"build_number": "252.25557.126"
},
"writerside": {
"update-channel": "Writerside EAP",
@@ -428,10 +428,10 @@
"clion": {
"update-channel": "CLion RELEASE",
"url-template": "https://download.jetbrains.com/cpp/CLion-{version}-aarch64.dmg",
"version": "2025.2",
"sha256": "40be28243da1bdb90308e997656af5872103a32d167e1539dd4e1b00a7ce0ea4",
"url": "https://download.jetbrains.com/cpp/CLion-2025.2-aarch64.dmg",
"build_number": "252.23892.426"
"version": "2025.2.1",
"sha256": "d8256fee77311192ffcb45d9efa5fa57fb2ea83a22925f49bc5880106f7b9ee4",
"url": "https://download.jetbrains.com/cpp/CLion-2025.2.1-aarch64.dmg",
"build_number": "252.25557.127"
},
"datagrip": {
"update-channel": "DataGrip RELEASE",
@@ -452,10 +452,10 @@
"gateway": {
"update-channel": "Gateway RELEASE",
"url-template": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-{version}-aarch64.dmg",
"version": "2025.2",
"sha256": "d8be067bdd845c3c61e8e9c214b1591c2658e0a59ba5e0a45f3b1129f9c6fa63",
"url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2025.2-aarch64.dmg",
"build_number": "252.23892.437"
"version": "2025.2.1",
"sha256": "94bb0fb41eaaea744173fe321b7e17cac898088eb7738c68b8d271ca437dee80",
"url": "https://download.jetbrains.com/idea/gateway/JetBrainsGateway-2025.2.1-aarch64.dmg",
"build_number": "252.25557.133"
},
"goland": {
"update-channel": "GoLand RELEASE",
@@ -468,18 +468,18 @@
"idea-community": {
"update-channel": "IntelliJ IDEA RELEASE",
"url-template": "https://download.jetbrains.com/idea/ideaIC-{version}-aarch64.dmg",
"version": "2025.2",
"sha256": "a77e9808be00c2225504cd4710fca625027e46ab3d131b3cdfceb982286f4d94",
"url": "https://download.jetbrains.com/idea/ideaIC-2025.2-aarch64.dmg",
"build_number": "252.23892.409"
"version": "2025.2.1",
"sha256": "dcafd8e623819b0696044d23874423f905224462844155a3c282fd4f62a7d578",
"url": "https://download.jetbrains.com/idea/ideaIC-2025.2.1-aarch64.dmg",
"build_number": "252.25557.131"
},
"idea-ultimate": {
"update-channel": "IntelliJ IDEA RELEASE",
"url-template": "https://download.jetbrains.com/idea/ideaIU-{version}-aarch64.dmg",
"version": "2025.2",
"sha256": "1055a85e2524a67cafa0aa51e75a6d7adf14e7e05a5e52d833a60de5112b60d7",
"url": "https://download.jetbrains.com/idea/ideaIU-2025.2-aarch64.dmg",
"build_number": "252.23892.409"
"version": "2025.2.1",
"sha256": "96523081d1d686425b166698870a4467600724faac060a938a05838b0b9f8a9c",
"url": "https://download.jetbrains.com/idea/ideaIU-2025.2.1-aarch64.dmg",
"build_number": "252.25557.131"
},
"mps": {
"update-channel": "MPS RELEASE",
@@ -492,35 +492,35 @@
"phpstorm": {
"update-channel": "PhpStorm RELEASE",
"url-template": "https://download.jetbrains.com/webide/PhpStorm-{version}-aarch64.dmg",
"version": "2025.2",
"sha256": "d4ca651a534dfa72d6c6221c23a49bb4bf10a533013db71d51096bb380f1a9c0",
"url": "https://download.jetbrains.com/webide/PhpStorm-2025.2-aarch64.dmg",
"build_number": "252.23892.419",
"version": "2025.2.1",
"sha256": "9da242618b2f540d8fc34937743e2ebcd71af6341420474b0bf9285464a81a68",
"url": "https://download.jetbrains.com/webide/PhpStorm-2025.2.1-aarch64.dmg",
"build_number": "252.25557.128",
"version-major-minor": "2022.3"
},
"pycharm-community": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-community-{version}-aarch64.dmg",
"version": "2025.2.0.1",
"sha256": "acdbfd143a7da358cbd9b1410eff8763f9650c58f9a976d80a9aa8977f358e00",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.0.1-aarch64.dmg",
"build_number": "252.23892.515"
"version": "2025.2.1",
"sha256": "01a969ec274754d93e4a85b5033cd1ebc368ce3a2d664753744ebfd6d8e1d8cf",
"url": "https://download.jetbrains.com/python/pycharm-community-2025.2.1-aarch64.dmg",
"build_number": "252.25557.130"
},
"pycharm-professional": {
"update-channel": "PyCharm RELEASE",
"url-template": "https://download.jetbrains.com/python/pycharm-professional-{version}-aarch64.dmg",
"version": "2025.2.0.1",
"sha256": "9d3265dd828c45681ba608ee2325b3b560396b7048290d7c69714cbc99e86fd7",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.0.1-aarch64.dmg",
"build_number": "252.23892.515"
"version": "2025.2.1",
"sha256": "eeb571d345eb52af2ed92e7217aa5b9469e5d9074b7a98c23a227bedf54ab834",
"url": "https://download.jetbrains.com/python/pycharm-professional-2025.2.1-aarch64.dmg",
"build_number": "252.25557.130"
},
"rider": {
"update-channel": "Rider RELEASE",
"url-template": "https://download.jetbrains.com/rider/JetBrains.Rider-{version}-aarch64.dmg",
"version": "2025.2",
"sha256": "ec385a005fb740e6b12a5232ae57c7d189b3d32ac4813734b04d4257421368a3",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2-aarch64.dmg",
"build_number": "252.23892.524"
"version": "2025.2.0.1",
"sha256": "4c618255221b8569f04fd6e4ad6050ba2288d2aba13f5f10a12063638ef166ee",
"url": "https://download.jetbrains.com/rider/JetBrains.Rider-2025.2.0.1-aarch64.dmg",
"build_number": "252.23892.537"
},
"ruby-mine": {
"update-channel": "RubyMine RELEASE",
@@ -533,18 +533,18 @@
"rust-rover": {
"update-channel": "RustRover RELEASE",
"url-template": "https://download.jetbrains.com/rustrover/RustRover-{version}-aarch64.dmg",
"version": "2025.2",
"sha256": "dd0681951c4a8f2a4b97480f37f29c688ff8c7572d96d2417c4bdac1988d17f6",
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2-aarch64.dmg",
"build_number": "252.23892.452"
"version": "2025.2.1",
"sha256": "469b4b7c42aa808a5f9d94315f4cc412ad74ef76ff51654d441ef16c5063dc27",
"url": "https://download.jetbrains.com/rustrover/RustRover-2025.2.1-aarch64.dmg",
"build_number": "252.25557.134"
},
"webstorm": {
"update-channel": "WebStorm RELEASE",
"url-template": "https://download.jetbrains.com/webstorm/WebStorm-{version}-aarch64.dmg",
"version": "2025.2",
"sha256": "5f29ca9472c068f8086cb05c4ef3b0fb2b88d4888ef1c5430a0e1f2c771ccbce",
"url": "https://download.jetbrains.com/webstorm/WebStorm-2025.2-aarch64.dmg",
"build_number": "252.23892.411"
"version": "2025.2.1",
"sha256": "dd3220a9458cd1574a96a75922e5439689f494516af9f5e76c5b74ffb37ec488",
"url": "https://download.jetbrains.com/webstorm/WebStorm-2025.2.1-aarch64.dmg",
"build_number": "252.25557.126"
},
"writerside": {
"update-channel": "Writerside EAP",

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ lib, fetchFromGitHub }:
rec {
version = "9.1.1566";
version = "9.1.1623";
outputs = [
"out"
@@ -11,7 +11,7 @@ rec {
owner = "vim";
repo = "vim";
rev = "v${version}";
hash = "sha256-/hzyjFGjl8Wu9tHtFgnnHtGbcJ5AIjCMUNCScrdIgwU=";
hash = "sha256-T7epi6ex9AU4iV/ClSeKlK3T0V0WajiVxnDVevkqaw8=";
};
enableParallelBuilding = true;

View File

@@ -102,6 +102,7 @@ mapAliases (
neoinclude = neoinclude-vim;
neomru = neomru-vim;
neosnippet = neosnippet-vim;
neuron-nvim = throw "neuron.nvim has been removed: archived repository 2023-02-19"; # Added 2025-09-10
nvim-ts-rainbow = throw "nvim-ts-rainbow has been deprecated: Use rainbow-delimiters-nvim"; # Added 2023-11-30
nvim-ts-rainbow2 = throw "nvim-ts-rainbow2 has been deprecated: Use rainbow-delimiters-nvim"; # Added 2023-11-30
The_NERD_Commenter = nerdcommenter;

File diff suppressed because it is too large Load Diff

View File

@@ -32,12 +32,12 @@
};
agda = buildGrammar {
language = "agda";
version = "0.0.0+rev=b9b32fa";
version = "0.0.0+rev=e8d47a6";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-agda";
rev = "b9b32fa042c2952a7bfca86847ea325e44ccc897";
hash = "sha256-Goll4J6xrHO8YEuYoLR2rqy6lCMsr4JJbEs5C1jiX5Q=";
rev = "e8d47a6987effe34d5595baf321d82d3519a8527";
hash = "sha256-5h56+A7ZypckJ9mwht7XP/66oiehwAEQ4Z6WeVhQBvQ=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-agda";
};
@@ -66,12 +66,12 @@
};
arduino = buildGrammar {
language = "arduino";
version = "0.0.0+rev=2f0c122";
version = "0.0.0+rev=53eb391";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-arduino";
rev = "2f0c1223c50aa4b754136db544204c6fc99ffc77";
hash = "sha256-t0EtibjsMJpiTbwhkgZGv9lUdpI6gg2VoSEUDXswEMA=";
rev = "53eb391da4c6c5857f8defa2c583c46c2594f565";
hash = "sha256-qQVUWCOZ4y9FTsIf0FI3vmYBhLYz4hcqRTo+5C2MYvc=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-arduino";
};
@@ -121,12 +121,12 @@
};
bash = buildGrammar {
language = "bash";
version = "0.0.0+rev=56b54c6";
version = "0.0.0+rev=b930fed";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-bash";
rev = "56b54c61fb48bce0c63e3dfa2240b5d274384763";
hash = "sha256-vRaN/mNfpR+hdv2HVS1bzaW0o+HGjizRFsk3iinICJE=";
rev = "b930fed16910a74c230e09ea5b97f671448d2116";
hash = "sha256-7VZRkoQc6l+YWzdsnXM6FlTzJq/eCgH1/SWkh6WTjp8=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-bash";
};
@@ -231,23 +231,23 @@
};
c = buildGrammar {
language = "c";
version = "0.0.0+rev=7fa1be1";
version = "0.0.0+rev=d8d0503";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-c";
rev = "7fa1be1b694b6e763686793d97da01f36a0e5c12";
hash = "sha256-gmzbdwvrKSo6C1fqTJFGxy8x0+T+vUTswm7F5sojzKc=";
rev = "d8d0503aa0152119149ecad76685f37682c0d03f";
hash = "sha256-Ie1WXN3aMfYABoLIl0rcwLcpoiNcufZoJ5sGaKqBxfo=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-c";
};
c3 = buildGrammar {
language = "c3";
version = "0.0.0+rev=be8c7fc";
version = "0.0.0+rev=057a75d";
src = fetchFromGitHub {
owner = "c3lang";
repo = "tree-sitter-c3";
rev = "be8c7fcfb424a93f541ebd21d23611b92dff0444";
hash = "sha256-EmRuBiK1X6FAjfMg0ilA2OVJ/s0ag/dD9EMqALIwmIY=";
rev = "057a75df0c866034d8edce989f701ee2cb0481d8";
hash = "sha256-MeeyiX9ZozGDbTNbO/Tvs97tQyzic5pu2sIPgXow2ok=";
};
meta.homepage = "https://github.com/c3lang/tree-sitter-c3";
};
@@ -319,12 +319,12 @@
};
clojure = buildGrammar {
language = "clojure";
version = "0.0.0+rev=be514ee";
version = "0.0.0+rev=e43eff8";
src = fetchFromGitHub {
owner = "sogaiu";
repo = "tree-sitter-clojure";
rev = "be514eec2c86d560c18fab146e9298e21b8eab62";
hash = "sha256-VnzOuLrE/lcXOCg3Iuntj9m8zy/Exwi1Mv+nZvi62Qs=";
rev = "e43eff80d17cf34852dcd92ca5e6986d23a7040f";
hash = "sha256-jokekIuuQLx5UtuPs4XAI+euispeFCwSQByVKVelrC4=";
};
meta.homepage = "https://github.com/sogaiu/tree-sitter-clojure";
};
@@ -396,12 +396,12 @@
};
cpp = buildGrammar {
language = "cpp";
version = "0.0.0+rev=5cb9b69";
version = "0.0.0+rev=077f14f";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-cpp";
rev = "5cb9b693cfd7bfacab1d9ff4acac1a4150700609";
hash = "sha256-s9/n09EruafAMF3g6xOkfu6L+WXUx83PpcVKn1Tnmg8=";
rev = "077f14ffd2de226ac95808596989c705f6dee289";
hash = "sha256-xOYuzYil5jieikb8Brt3mjtoOER2ZVO6zfSlWFn7ZbY=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-cpp";
};
@@ -696,12 +696,12 @@
};
embedded_template = buildGrammar {
language = "embedded_template";
version = "0.0.0+rev=8495d10";
version = "0.0.0+rev=3499d85";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-embedded-template";
rev = "8495d106154741e6d35d37064f864758ece75de6";
hash = "sha256-DCEno1QzPcM9853hldrm4IAqKsTNALe//laDn+Hcr8Q=";
rev = "3499d85f0a0d937c507a4a65368f2f63772786e1";
hash = "sha256-H+kcKwVjIvRBRj+pjSjp8NX0kH63SDWiAS5iovT9e/c=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-embedded-template";
};
@@ -873,12 +873,12 @@
};
gap = buildGrammar {
language = "gap";
version = "0.0.0+rev=8dee53c";
version = "0.0.0+rev=2bac148";
src = fetchFromGitHub {
owner = "gap-system";
repo = "tree-sitter-gap";
rev = "8dee53cfb962600dd35ca25432f005e7920e89f2";
hash = "sha256-rSWdxQL0y3ZboEi7SWO4Mbe7ix3epznTOkL+SDXXG9g=";
rev = "2bac14863b76ad0ff6fd7204c50574732acd66df";
hash = "sha256-3hMpEV12wE2HoJ4qX1a/lOx0JOve4pPF4n9WKcupSLo=";
};
meta.homepage = "https://github.com/gap-system/tree-sitter-gap";
};
@@ -1049,12 +1049,12 @@
};
go = buildGrammar {
language = "go";
version = "0.0.0+rev=5e73f47";
version = "0.0.0+rev=1547678";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-go";
rev = "5e73f476efafe5c768eda19bbe877f188ded6144";
hash = "sha256-PgFdtkPMgkNK7Gv6dBf89lNjJrZyt9Wp5h5OIwd83aw=";
rev = "1547678a9da59885853f5f5cc8a99cc203fa2e2c";
hash = "sha256-y7bTET8ypPczPnMVlCaiZuswcA7vFrDOc2jlbfVk5Sk=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-go";
};
@@ -1325,12 +1325,12 @@
};
html = buildGrammar {
language = "html";
version = "0.0.0+rev=cbb91a0";
version = "0.0.0+rev=9fc04b9";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-html";
rev = "cbb91a0ff3621245e890d1c50cc811bffb77a26b";
hash = "sha256-lNMiSDAQ49QpeyD1RzkIIUeRWdp2Wrv6+XQZdZ40c1g=";
rev = "9fc04b9ef21a92e3ea9258f5690e4461394d7811";
hash = "sha256-Fow2kIM9PHwYEgkEuGcS3e4wxlzETtQk0DcMUkjbcaA=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-html";
};
@@ -1358,12 +1358,12 @@
};
hurl = buildGrammar {
language = "hurl";
version = "0.0.0+rev=ff07a42";
version = "0.0.0+rev=1124058";
src = fetchFromGitHub {
owner = "pfeiferj";
repo = "tree-sitter-hurl";
rev = "ff07a42d9ec95443b5c1b57ed793414bf7b79be5";
hash = "sha256-9uRRlJWT0knZ3vvzGEq9CjyffQnYF53rnoBnsQ68zyE=";
rev = "1124058cd192e80d80914652a5850a5b1887cc10";
hash = "sha256-6Hd4VEjhxlfO9ofPr9YeSU4ZVbGEU0okYYjaG+hTkn0=";
};
meta.homepage = "https://github.com/pfeiferj/tree-sitter-hurl";
};
@@ -1446,57 +1446,57 @@
};
java = buildGrammar {
language = "java";
version = "0.0.0+rev=a7db522";
version = "0.0.0+rev=968afb3";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-java";
rev = "a7db5227ec40fcfe94489559d8c9bc7c8181e25a";
hash = "sha256-fNq5MMMr83wqn7lNgj0pfSZDF4XO98YbzfNsFjr3Kpw=";
rev = "968afb3c9be2d4dba4cd36f3580ee0b1a9c1c537";
hash = "sha256-L4cfPDbuZEqjq/w3Rz8fraorTMV095b4uXIqkQbSA/s=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-java";
};
javadoc = buildGrammar {
language = "javadoc";
version = "0.0.0+rev=384952d";
version = "0.0.0+rev=fea74f5";
src = fetchFromGitHub {
owner = "rmuir";
repo = "tree-sitter-javadoc";
rev = "384952d91ebc176fcf8f1933dff93b9c32430911";
hash = "sha256-IH1LUPO+18vDC83jcrC0DihTYt6aXV1w/u0iTm5jgK4=";
rev = "fea74f50f5a6dcef575687703b82a96f9e6d1312";
hash = "sha256-m0aqRV37o0/HypshZDvKDg8thv3ey32sMHmLkf7g7lw=";
};
meta.homepage = "https://github.com/rmuir/tree-sitter-javadoc";
};
javascript = buildGrammar {
language = "javascript";
version = "0.0.0+rev=6fbef40";
version = "0.0.0+rev=44c892e";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-javascript";
rev = "6fbef40512dcd9f0a61ce03a4c9ae7597b36ab5c";
hash = "sha256-X9DDCBF+gQYL0syfqgKVFvzoy2tnBl+veaYi7bUuRms=";
rev = "44c892e0be055ac465d5eeddae6d3e194424e7de";
hash = "sha256-2Jj/SUG+k8lHlGSuPZvHjJojvQFgDiZHZzH8xLu7suE=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-javascript";
};
jinja = buildGrammar {
language = "jinja";
version = "0.0.0+rev=129184f";
version = "0.0.0+rev=e589222";
src = fetchFromGitHub {
owner = "cathaysia";
repo = "tree-sitter-jinja";
rev = "129184fb7bbc2d3e29967002432a869ac3758f2e";
hash = "sha256-+9aVQFi9V4RJtbkL0F48/L+l+myWqE5kM5G5EwHB9G8=";
rev = "e589222a1ad44361bc376d5abdccd08e1fecfee5";
hash = "sha256-a4/+tsouuYkkVEStpOEUiIos9H4Hw7NhJOFaasylWUk=";
};
location = "tree-sitter-jinja";
meta.homepage = "https://github.com/cathaysia/tree-sitter-jinja";
};
jinja_inline = buildGrammar {
language = "jinja_inline";
version = "0.0.0+rev=129184f";
version = "0.0.0+rev=e589222";
src = fetchFromGitHub {
owner = "cathaysia";
repo = "tree-sitter-jinja";
rev = "129184fb7bbc2d3e29967002432a869ac3758f2e";
hash = "sha256-+9aVQFi9V4RJtbkL0F48/L+l+myWqE5kM5G5EwHB9G8=";
rev = "e589222a1ad44361bc376d5abdccd08e1fecfee5";
hash = "sha256-a4/+tsouuYkkVEStpOEUiIos9H4Hw7NhJOFaasylWUk=";
};
location = "tree-sitter-jinja_inline";
meta.homepage = "https://github.com/cathaysia/tree-sitter-jinja";
@@ -1525,23 +1525,23 @@
};
json = buildGrammar {
language = "json";
version = "0.0.0+rev=46aa487";
version = "0.0.0+rev=fd38547";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-json";
rev = "46aa487b3ade14b7b05ef92507fdaa3915a662a3";
hash = "sha256-s8aAOrM4Mh4O60iSORMefN3nvFxThFk/On5DvK1BwWs=";
rev = "fd38547e2fe5738e5b173e5f40a27df261224bba";
hash = "sha256-61X7gSL3SeJvvWokSvZmxyy1wmYhRZNLBX9x31XrIfY=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-json";
};
json5 = buildGrammar {
language = "json5";
version = "0.0.0+rev=ab0ba82";
version = "0.0.0+rev=5ebe24e";
src = fetchFromGitHub {
owner = "Joakker";
repo = "tree-sitter-json5";
rev = "ab0ba8229d639ec4f3fa5f674c9133477f4b77bd";
hash = "sha256-LaCCjvYnmofOVQ2Nqlzfh3KP3fNG0HBxkOng0gjYY1g=";
rev = "5ebe24e210f0fbcd6180fd673ed184ed81f3bcc6";
hash = "sha256-5JAXtDYazHbHnw/cAHLhVxkBZYrLongxYSgZf/dPGnM=";
};
meta.homepage = "https://github.com/Joakker/tree-sitter-json5";
};
@@ -1880,12 +1880,12 @@
};
mlir = buildGrammar {
language = "mlir";
version = "0.0.0+rev=09666ce";
version = "0.0.0+rev=1f3bc2f";
src = fetchFromGitHub {
owner = "artagnon";
repo = "tree-sitter-mlir";
rev = "09666cead2c001cbbfc82b395007f6d8158113a5";
hash = "sha256-toH/pG8CKI4UFdBQqkgIer5tfpIWkWoCP+fU0OByxQg=";
rev = "1f3bc2fd4d4e28361d1ff75cf5763e1d0c2b6348";
hash = "sha256-EYi3LEezPRZXl+/TLSVHBlCjTjE4iRSwHhC3NSmxYgg=";
};
generate = true;
meta.homepage = "https://github.com/artagnon/tree-sitter-mlir";
@@ -2161,12 +2161,12 @@
};
pkl = buildGrammar {
language = "pkl";
version = "0.0.0+rev=4fc94a1";
version = "0.0.0+rev=d62e832";
src = fetchFromGitHub {
owner = "apple";
repo = "tree-sitter-pkl";
rev = "4fc94a102c25ea383d70397dac7e677ca3731f1e";
hash = "sha256-imA4+NuJ3XmVA8qfa7pkrQGBsbrNCgLNSuIFh0DsqmY=";
rev = "d62e832b69a0aa3d4f87fc34ba62d931d6c23f55";
hash = "sha256-6sVPCbs3rLlEhK9Fj2sJGjNBmvaGrajSOoGo6G78buo=";
};
meta.homepage = "https://github.com/apple/tree-sitter-pkl";
};
@@ -2417,12 +2417,12 @@
};
query = buildGrammar {
language = "query";
version = "0.0.0+rev=2668cc5";
version = "0.0.0+rev=60e253d";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-query";
rev = "2668cc53024953224a40b1e6546d7b8ec5a11150";
hash = "sha256-KrdriPQLxb0Eay5gVRwU2hYfgC0oP/VtDmvnNIctjhc=";
rev = "60e253d3c9d6b1131a0f75c85e4bdcc9a48d5b42";
hash = "sha256-xzA4nBqX5qg5GVPD4KyM1mngL0xyOnERltiTOs/jeDk=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-query";
};
@@ -2648,12 +2648,12 @@
};
rust = buildGrammar {
language = "rust";
version = "0.0.0+rev=3691201";
version = "0.0.0+rev=3bfef41";
src = fetchFromGitHub {
owner = "tree-sitter";
repo = "tree-sitter-rust";
rev = "3691201b01cacb2f96ffca4c632c4e938bfacd88";
hash = "sha256-a9Te7SXVd7hkinrpvwrWgb6J53PoSL/Irk0DpQ6vS7k=";
rev = "3bfef41a01ab49a25ffdecf998823b4b82fcaf69";
hash = "sha256-oRBsIaNZDgBt1JSiGzgg+1JNbkDuGV2cxE1p0cZlFQc=";
};
meta.homepage = "https://github.com/tree-sitter/tree-sitter-rust";
};
@@ -2716,12 +2716,12 @@
};
slang = buildGrammar {
language = "slang";
version = "0.0.0+rev=5b0adf6";
version = "0.0.0+rev=1dbcc4a";
src = fetchFromGitHub {
owner = "tree-sitter-grammars";
repo = "tree-sitter-slang";
rev = "5b0adf65710c3a7c265f0451ed6b4789410cbe63";
hash = "sha256-uFU8hdz6APzrc9JUib47cmBd5kSnbSh0CbSqSbEfkoc=";
rev = "1dbcc4abc7b3cdd663eb03d93031167d6ed19f56";
hash = "sha256-UsZpXEJwbKn5M9dqbAv5eJgsCdNbsllbFWtNnDPvtoE=";
};
meta.homepage = "https://github.com/tree-sitter-grammars/tree-sitter-slang";
};
@@ -2738,12 +2738,12 @@
};
slint = buildGrammar {
language = "slint";
version = "0.0.0+rev=96bc969";
version = "0.0.0+rev=ecd6007";
src = fetchFromGitHub {
owner = "slint-ui";
repo = "tree-sitter-slint";
rev = "96bc969d20ff347030519184ea2467f4046a524d";
hash = "sha256-yTZxuA3Bco0Cv+kZ1VbfQZbIu12Y5N4b3HIUJ/PBpWA=";
rev = "ecd60078bbd546eeb4c7fbbe02226752517b847f";
hash = "sha256-MA/7gqrdhYridk7P+yFVeiWh0AiZf75/f3LSjZd9Clc=";
};
meta.homepage = "https://github.com/slint-ui/tree-sitter-slint";
};
@@ -2771,12 +2771,12 @@
};
snakemake = buildGrammar {
language = "snakemake";
version = "0.0.0+rev=f36c158";
version = "0.0.0+rev=7731408";
src = fetchFromGitHub {
owner = "osthomas";
repo = "tree-sitter-snakemake";
rev = "f36c1587624d6d84376c82a357c20fc319cbf02c";
hash = "sha256-yiEfMB67bIaIj+iXQ/ShvVQES6HCWnKI6DzWxsrIrRk=";
rev = "7731408e5e8095fe242fdd423c3d3ae886fbf9fd";
hash = "sha256-/XeO9/4rTLLicDRWWlUoAhCr+2AyjlQLszBmeQ/8wZY=";
};
meta.homepage = "https://github.com/osthomas/tree-sitter-snakemake";
};
@@ -2916,12 +2916,12 @@
};
supercollider = buildGrammar {
language = "supercollider";
version = "0.0.0+rev=1a8ee0d";
version = "0.0.0+rev=c6145ca";
src = fetchFromGitHub {
owner = "madskjeldgaard";
repo = "tree-sitter-supercollider";
rev = "1a8ee0da9a4f2df5a8a22f4d637ac863623a78a7";
hash = "sha256-G23AZO1zvTvRE9ciV7qMuSoaCYulhyOkwiRwgK06NRQ=";
rev = "c6145cad24e19485f6ceb86e0a1be479d6537fb0";
hash = "sha256-9t7yWtzuzY19M22q5Aiu+hVX2bkBTm3AmUi6ZSc4psQ=";
};
meta.homepage = "https://github.com/madskjeldgaard/tree-sitter-supercollider";
};
@@ -2961,12 +2961,12 @@
};
sway = buildGrammar {
language = "sway";
version = "0.0.0+rev=3950067";
version = "0.0.0+rev=9b7845c";
src = fetchFromGitHub {
owner = "FuelLabs";
repo = "tree-sitter-sway";
rev = "395006713db3bbb90d267ebdfcbf1881b399b05c";
hash = "sha256-5Js5WbpQAln6cfdjEd0emMtkC6uFGWA2LXQZkiXbap4=";
rev = "9b7845ce06ecb38b040c3940970b4fd0adc331d1";
hash = "sha256-+BRw4OFQb7FljdKCj5mruK0L9wsZ+1UDTykVLS9wjoY=";
};
meta.homepage = "https://github.com/FuelLabs/tree-sitter-sway.git";
};
@@ -3006,12 +3006,12 @@
};
systemverilog = buildGrammar {
language = "systemverilog";
version = "0.0.0+rev=3bd2c5d";
version = "0.0.0+rev=999e885";
src = fetchFromGitHub {
owner = "gmlarumbe";
repo = "tree-sitter-systemverilog";
rev = "3bd2c5d2f60ed7b07c2177b34e2976ad9a87c659";
hash = "sha256-ZkG5XsSBz9cZWLulIu40WPy71OGuVOlZSMcFH3AwXKc=";
rev = "999e88565e199abec12d6fb7470419b5ae217386";
hash = "sha256-eY51D/B25m87JPtRprwewa6SF6xSoXXYOL6DCOd5A4k=";
};
meta.homepage = "https://github.com/gmlarumbe/tree-sitter-systemverilog";
};
@@ -3473,6 +3473,17 @@
};
meta.homepage = "https://github.com/liamwh/tree-sitter-wit";
};
wxml = buildGrammar {
language = "wxml";
version = "0.0.0+rev=7b821c7";
src = fetchFromGitHub {
owner = "BlockLune";
repo = "tree-sitter-wxml";
rev = "7b821c748dc410332f59496c0dea2632168c4e5a";
hash = "sha256-ZJeBKccEreak/Fs/Zi5E3m2S//s2R54KwFK3atoCvf0=";
};
meta.homepage = "https://github.com/BlockLune/tree-sitter-wxml";
};
xcompose = buildGrammar {
language = "xcompose";
version = "0.0.0+rev=a51d636";
@@ -3498,12 +3509,12 @@
};
xresources = buildGrammar {
language = "xresources";
version = "0.0.0+rev=f40778f";
version = "0.0.0+rev=423597c";
src = fetchFromGitHub {
owner = "ValdezFOmar";
repo = "tree-sitter-xresources";
rev = "f40778ff42f2119aebacd46d4b6d785a4181a9ba";
hash = "sha256-9vqVBsErlbFXzTd7QmMItd5GW2F9kE04HQFjq/vtrTc=";
rev = "423597c9ee0cd9fd98691a9f9881ff4e6f7b047a";
hash = "sha256-BOXlyU2inSOqAmpDlqYjtDl2O37+ddOFiEEUvXb/kb4=";
};
meta.homepage = "https://github.com/ValdezFOmar/tree-sitter-xresources";
};

View File

@@ -143,13 +143,13 @@ in
assertNoAdditions {
advanced-git-search-nvim = super.advanced-git-search-nvim.overrideAttrs {
checkInputs = with self; [
fzf-lua
snacks-nvim
telescope-nvim
];
dependencies = with self; [
telescope-nvim
vim-fugitive
vim-rhubarb
fzf-lua
plenary-nvim
];
};
@@ -1107,11 +1107,11 @@ assertNoAdditions {
easy-dotnet-nvim = super.easy-dotnet-nvim.overrideAttrs {
dependencies = with self; [
plenary-nvim
telescope-nvim
];
checkInputs = with self; [
# Pickers, can use telescope or fzf-lua
# Pickers, can use telescope, fzf-lua, or snacks
fzf-lua
telescope-nvim
];
};
@@ -1228,7 +1228,7 @@ assertNoAdditions {
];
# Patch libgit2 library dependency
postPatch = ''
substituteInPlace lua/fugit2/libgit2.lua \
substituteInPlace lua/fugit2/core/libgit2.lua \
--replace-fail \
'M.library_path = "libgit2"' \
'M.library_path = "${lib.getLib libgit2}/lib/libgit2${stdenv.hostPlatform.extensions.sharedLibrary}"'
@@ -1628,11 +1628,13 @@ assertNoAdditions {
};
leetcode-nvim = super.leetcode-nvim.overrideAttrs {
checkInputs = [ self.snacks-nvim ];
checkInputs = with self; [
snacks-nvim
telescope-nvim
];
dependencies = with self; [
nui-nvim
plenary-nvim
telescope-nvim
];
doInstallCheck = true;
@@ -2185,11 +2187,14 @@ assertNoAdditions {
};
neotest-playwright = super.neotest-playwright.overrideAttrs {
checkInputs = with self; [
# Optional picker integration
telescope-nvim
];
dependencies = with self; [
neotest
nvim-nio
plenary-nvim
telescope-nvim
];
# Unit test assert
nvimSkipModules = "neotest-playwright-assertions";
@@ -2281,13 +2286,6 @@ assertNoAdditions {
];
};
neuron-nvim = super.neuron-nvim.overrideAttrs {
dependencies = with self; [
plenary-nvim
telescope-nvim
];
};
neovim-trunk = super.neovim-trunk.overrideAttrs {
dependencies = with self; [
plenary-nvim
@@ -2636,14 +2634,10 @@ assertNoAdditions {
};
nvim-tinygit = super.nvim-tinygit.overrideAttrs {
dependencies = with self; [
telescope-nvim
];
checkInputs = [
gitMinimal
# transitive dependency (telescope-nvim) not properly propagated to the test environment
self.plenary-nvim
# interactive staging support
self.telescope-nvim
];
};
@@ -3602,9 +3596,6 @@ assertNoAdditions {
};
uv-nvim = super.uv-nvim.overrideAttrs {
dependencies = with self; [
telescope-nvim
];
runtimeDeps = [ uv ];
};
@@ -4008,9 +3999,12 @@ assertNoAdditions {
};
vs-tasks-nvim = super.vs-tasks-nvim.overrideAttrs {
dependencies = with self; [
plenary-nvim
telescope-nvim
checkInputs = [
# Optional telescope integration
self.telescope-nvim
];
dependencies = [
self.plenary-nvim
];
};
@@ -4113,10 +4107,17 @@ assertNoAdditions {
});
zenbones-nvim = super.zenbones-nvim.overrideAttrs {
checkInputs = with self; [
# Optional lush-nvim integration
lush-nvim
];
nvimSkipModules = [
# Requires global variable set
"randombones"
"randombones.palette"
"randombones_dark.palette"
"randombones_light"
"randombones_light.palette"
# Optional shipwright
"zenbones.shipwright.runners.alacritty"
"zenbones.shipwright.runners.foot"
@@ -4128,33 +4129,7 @@ assertNoAdditions {
"zenbones.shipwright.runners.vim"
"zenbones.shipwright.runners.wezterm"
"zenbones.shipwright.runners.windows_terminal"
# Optional lush-nvim integration
"duckbones"
"duckbones.palette"
"forestbones"
"forestbones.palette"
"kanagawabones"
"kanagawabones.palette"
"neobones"
"neobones.palette"
"nordbones"
"nordbones.palette"
"rosebones"
"rosebones.palette"
"seoulbones"
"seoulbones.palette"
"tokyobones"
"tokyobones.palette"
"vimbones"
"vimbones.palette"
"zenbones"
"zenbones.palette"
"zenbones.specs.dark"
"zenbones.specs.light"
"zenburned"
"zenburned.palette"
"zenwritten"
"zenwritten.palette"
"randombones_dark"
];
};

View File

@@ -766,7 +766,6 @@ https://github.com/Xuyuanp/nerdtree-git-plugin/,,
https://github.com/2KAbhishek/nerdy.nvim/,HEAD,
https://github.com/miversen33/netman.nvim/,HEAD,
https://github.com/prichrd/netrw.nvim/,HEAD,
https://github.com/oberblastmeister/neuron.nvim/,,
https://github.com/fiatjaf/neuron.vim/,,
https://github.com/Olical/nfnl/,main,
https://github.com/joeveiga/ng.nvim/,HEAD,
@@ -1317,7 +1316,7 @@ https://github.com/mhinz/vim-crates/,,
https://github.com/vim-crystal/vim-crystal/,HEAD,
https://github.com/OrangeT/vim-csharp/,,
https://github.com/ap/vim-css-color/,,
https://github.com/jjo/vim-cue/,,
https://github.com/cue-lang/vim-cue/,,
https://github.com/itchyny/vim-cursorword/,,
https://github.com/ehamberg/vim-cute-python/,,
https://github.com/tpope/vim-dadbod/,,

View File

@@ -11,26 +11,26 @@ vscode-utils.buildVscodeMarketplaceExtension {
sources = {
"x86_64-linux" = {
arch = "linux-x64";
hash = "sha256-HXyY96fP9WjGWIe6ggQvygBnTEKRLUb5Qy18Vbjn160=";
hash = "sha256-xk2maMEa07yFPbLiDGc9N6AbzxjTyfVNy/k7wWSMOHE=";
};
"x86_64-darwin" = {
arch = "darwin-x64";
hash = "sha256-2b04CLmbOxXsTzheEUacqZuBtA/rSZqRMLor0lT2gsU=";
hash = "sha256-vcN419nPIrFOT8EaznFzThst6exfMGRrcmxyuQttxXg=";
};
"aarch64-linux" = {
arch = "linux-arm64";
hash = "sha256-/eKZ3bkZ2jFr8cTpNLO6t8wsRfLyhLkQHMrkTWtCWb8=";
hash = "sha256-WoBfg35mGTIA8YZEk67iYNinF+Q/XEatiVr6x1HdvBk=";
};
"aarch64-darwin" = {
arch = "darwin-arm64";
hash = "sha256-JRVrV2yYSfuwuBcM2MDJZz5vNRYHG4n6I/GozgdDOgk=";
hash = "sha256-e75eRgs0FTBnwFbH1vFxFc+aLK+O9TdxgXbV5YnsQLE=";
};
};
in
{
name = "continue";
publisher = "Continue";
version = "1.1.76";
version = "1.2.2";
}
// sources.${stdenv.system} or (throw "Unsupported system: ${stdenv.system}");
nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];

View File

@@ -1123,8 +1123,8 @@ let
mktplcRef = {
name = "vscode-database-client2";
publisher = "cweijan";
version = "8.3.9";
hash = "sha256-HryTXKCBF7i9zV3JELAM+NF3JW97XWCoSqTRPNr8yjQ=";
version = "8.4.0";
hash = "sha256-ly54itCpVdirU6GmK2GM7A749wt2SbHR/TidutTwCUE=";
};
meta = {
description = "Database Client For Visual Studio Code";
@@ -3004,8 +3004,8 @@ let
mktplcRef = {
name = "rainbow-csv";
publisher = "mechatroner";
version = "3.20.0";
hash = "sha256-qQ05km8jLLoMFItVbgVWNXmmaBDWd0Bcbq88HPaRdWs=";
version = "3.21.0";
hash = "sha256-IPgPE5vM9tzHPioRBZeJs4hqut6t++SjZJlHnz/ismA=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/mechatroner.rainbow-csv/changelog";

View File

@@ -1,4 +1,5 @@
{
stdenv,
lib,
vscode-utils,
icu,
@@ -11,12 +12,36 @@
vscode-extension-update-script,
}:
let
supported = {
x86_64-linux = {
hash = "sha256-AlqZTioxiL0XPRMpWMWw8fIWoDAmU1ybCaDhlaXv6lc=";
arch = "linux-x64";
};
x86_64-darwin = {
hash = "sha256-IWj79vUJJXt88kDiCIHVY95aKsHB84vH3iv6GgLOFQo=";
arch = "darwin-x64";
};
aarch64-linux = {
hash = "sha256-kTSHvqS50UZ/yTMqJITyFIUZgHn1dMSwX1R3oxmTnYk=";
arch = "linux-arm64";
};
aarch64-darwin = {
hash = "sha256-LWA8LqCQrmd83icDYCmUgytPJbCV3ecNobSpWV2R3MA=";
arch = "darwin-arm64";
};
};
base =
supported.${stdenv.hostPlatform.system}
or (throw "unsupported platform ${stdenv.hostPlatform.system}");
in
vscode-utils.buildVscodeMarketplaceExtension rec {
mktplcRef = {
mktplcRef = base // {
name = "python";
publisher = "ms-python";
version = "2025.12.0";
hash = "sha256-IY4xrAFLGe8JCgdx2H3kiQTCh9i5wOykL9hfpztV+44=";
};
buildInputs = [ icu ];
@@ -52,12 +77,7 @@ vscode-utils.buildVscodeMarketplaceExtension rec {
homepage = "https://github.com/Microsoft/vscode-python";
changelog = "https://github.com/microsoft/vscode-python/releases";
license = lib.licenses.mit;
platforms = [
"aarch64-linux"
"x86_64-linux"
"aarch64-darwin"
"x86_64-darwin"
];
platforms = builtins.attrNames supported;
maintainers = [
lib.maintainers.jraygauthier
lib.maintainers.jfchevrette

View File

@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
publisher = "ndonfris";
name = "fish-lsp";
version = "0.1.13";
hash = "sha256-jPBcSQHuSvvWfc4KdtTkUJkx/fGYiAANFjABe4DzopQ=";
version = "0.1.14";
hash = "sha256-1OUVZJ5TTeR2nChRPSU5ViLAaUAovtqOk9kq408iW84=";
};
meta = {

View File

@@ -7,8 +7,8 @@ vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "claude-dev";
publisher = "saoudrizwan";
version = "3.25.3";
hash = "sha256-9a4QvVZ0vWR0zWgYAZN0zv95J2VNBbFQHc8mAH6H680=";
version = "3.27.1";
hash = "sha256-+gCQ9p/FI7LlORC0sMwD501iCh5cDurqv2UzOs43ckU=";
};
meta = {

View File

@@ -11,26 +11,26 @@ vscode-utils.buildVscodeMarketplaceExtension {
sources = {
"x86_64-linux" = {
arch = "linux-x64";
hash = "sha256-QOMJIhgc/dixPDUmir7bq5dWYGUfEWHJOlgTbGkxuDo=";
hash = "sha256-EfUwtKKyoX1/JNoVe3YsfxoLmjHWkLgFHKQqwDMjGMs=";
};
"x86_64-darwin" = {
arch = "darwin-x64";
hash = "sha256-CucMSzmeYdrSbXZbevyJb3M2oTkyatddAt2MUMXNwl0=";
hash = "sha256-fZRQIFwDsUsIw9YwsjMhMPeMTOe/JATDBq66yKfJQRU=";
};
"aarch64-linux" = {
arch = "linux-arm64";
hash = "sha256-Lv/Hqp5OGC66qdIj/5VPlj434ftK4BBHNWlgg2ZAAac=";
hash = "sha256-ig80H563Mv0Xs4Jh9Ni8Hn9vXAFYwycqNvSO3JJ3t+8=";
};
"aarch64-darwin" = {
arch = "darwin-arm64";
hash = "sha256-KuAT8+8t6YlQ4VygtxGindvSRs1x7oKT9ZgE7Vhvf8I=";
hash = "sha256-9D1H/u8YvgCvVcvm/Cy8GqQrutkSj6E7aqZdyX96LDw=";
};
};
in
{
name = "visualjj";
publisher = "visualjj";
version = "0.16.1";
version = "0.16.2";
}
// sources.${stdenvNoCC.hostPlatform.system}
or (throw "Unsupported system ${stdenvNoCC.hostPlatform.system}");

View File

@@ -13,13 +13,13 @@
}:
mkLibretroCore {
core = "ppsspp";
version = "0-unstable-2025-08-30";
version = "0-unstable-2025-09-10";
src = fetchFromGitHub {
owner = "hrydgard";
repo = "ppsspp";
rev = "b9a3e939711e007cce6af5930603122c0df91f20";
hash = "sha256-eEJeH7tfuIVrlkqGwsoe6RkY7tOEIyUbHSM8xGyZL4o=";
rev = "a240cb24070700fbf73a1522338ebd60011a0daf";
hash = "sha256-A4tqLVmW6Y4boQRf80N0upFS+s6P+TQRXB/i8rg/I4g=";
fetchSubmodules = true;
};

View File

@@ -19,10 +19,10 @@ let
withWebKit = withWebKit;
};
in
symlinkJoin rec {
symlinkJoin {
inherit (qgis-unwrapped) version src;
name = "qgis-${version}";
pname = "qgis";
paths = [ qgis-unwrapped ];

View File

@@ -19,10 +19,10 @@ let
withWebKit = withWebKit;
};
in
symlinkJoin rec {
symlinkJoin {
inherit (qgis-ltr-unwrapped) version src;
name = "qgis-${version}";
pname = "qgis";
paths = [ qgis-ltr-unwrapped ];

View File

@@ -80,7 +80,7 @@ import ./versions.nix (
++ lib.optionals x11Support [ xclip ];
meta = with lib; {
description = "Emoji selector plugin for Rofi (built against ${rofi-unwrapped.pname})";
description = "Emoji selector plugin for Rofi";
homepage = "https://github.com/Mange/rofi-emoji";
license = licenses.mit;
maintainers = with maintainers; [

View File

@@ -1,42 +1,47 @@
{
stdenv,
lib,
stdenv,
bison,
buildPackages,
cairo,
check,
fetchFromGitHub,
flex,
git,
glib,
librsvg,
libstartup_notification,
libxcb,
libxkbcommon,
meson,
ninja,
pkg-config,
libxkbcommon,
pandoc,
pango,
pkg-config,
wayland,
wayland-protocols,
wayland-scanner,
which,
git,
cairo,
libxcb,
xcb-imdkit,
xcbutil,
xcb-util-cursor,
xcbutilkeysyms,
xcbutil,
xcbutilwm,
xcbutilxrm,
libstartup_notification,
bison,
flex,
librsvg,
check,
glib,
buildPackages,
pandoc,
waylandSupport ? true,
x11Support ? true,
}:
stdenv.mkDerivation rec {
pname = "rofi-unwrapped";
version = "1.7.9.1";
version = "2.0.0";
src = fetchFromGitHub {
owner = "davatorium";
repo = "rofi";
rev = version;
fetchSubmodules = true;
hash = "sha256-HZMVGlK6ig7kWf/exivoiTe9J/SLgjm7VwRm+KgKN44=";
hash = "sha256-akKwIYH9OoCh4ZE/bxKPCppxXsUhplvfRjSGsdthFk4=";
};
preConfigure = ''
@@ -47,36 +52,46 @@ stdenv.mkDerivation rec {
depsBuildBuild = [
buildPackages.stdenv.cc
pkg-config
glib
pkg-config
];
nativeBuildInputs = [
bison
flex
meson
ninja
pkg-config
flex
bison
pandoc
pkg-config
];
buildInputs = [
libxkbcommon
pango
cairo
check
git
librsvg
check
libstartup_notification
libxkbcommon
pango
which
]
++ lib.optionals waylandSupport [
wayland
wayland-protocols
wayland-scanner
]
++ lib.optionals x11Support [
libxcb
xcb-imdkit
xcbutil
xcb-util-cursor
xcbutilkeysyms
xcbutil
xcbutilwm
xcbutilxrm
which
];
mesonFlags = [ "-Dimdkit=true" ];
mesonFlags =
lib.optionals x11Support [ "-Dimdkit=true" ]
++ lib.optionals (!waylandSupport) [ "-Dwayland=disabled" ]
++ lib.optionals (!x11Support) [ "-Dxcb=disabled" ];
doCheck = false;
@@ -84,7 +99,10 @@ stdenv.mkDerivation rec {
description = "Window switcher, run dialog and dmenu replacement";
homepage = "https://github.com/davatorium/rofi";
license = licenses.mit;
maintainers = with maintainers; [ bew ];
maintainers = with maintainers; [
bew
SchweGELBin
];
platforms = with platforms; linux;
mainProgram = "rofi";
};

View File

@@ -1,41 +0,0 @@
{
lib,
fetchFromGitHub,
rofi-unwrapped,
wayland-scanner,
pkg-config,
wayland-protocols,
wayland,
}:
rofi-unwrapped.overrideAttrs (oldAttrs: rec {
pname = "rofi-wayland-unwrapped";
version = "1.7.9+wayland1";
src = fetchFromGitHub {
owner = "lbonn";
repo = "rofi";
rev = version;
fetchSubmodules = true;
hash = "sha256-tLSU0Q221Pg3JYCT+w9ZT4ZbbB5+s8FwsZa/ehfn00s=";
};
depsBuildBuild = oldAttrs.depsBuildBuild ++ [ pkg-config ];
nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [
wayland-protocols
wayland-scanner
];
buildInputs = oldAttrs.buildInputs ++ [
wayland
wayland-protocols
];
meta = with lib; {
description = "Window switcher, run dialog and dmenu replacement for Wayland";
homepage = "https://github.com/lbonn/rofi";
license = licenses.mit;
mainProgram = "rofi";
maintainers = with maintainers; [ bew ];
platforms = with platforms; linux;
};
})

File diff suppressed because it is too large Load Diff

View File

@@ -10,11 +10,11 @@
buildMozillaMach rec {
pname = "firefox-beta";
binaryName = pname;
version = "143.0b8";
version = "143.0b9";
applicationName = "Firefox Beta";
src = fetchurl {
url = "mirror://mozilla/firefox/releases/${version}/source/firefox-${version}.source.tar.xz";
sha512 = "bf8e78abcc1cf6c8b48a591d0185c85195a818de0d13bafa3f004ad9c76364a2c07cacdf09fe0ae2e290d9cbce7b8c3ba4b57793cd3d39240023ef53eea08377";
sha512 = "b014e343ddba2e3750a0f50925c9b7f07237593c299604d96275f45332063f1487a47234411f7c952ee50ffaeb385a22dedbc4f924e4e0fc89668172b06c78fd";
};
meta = {

View File

@@ -10,13 +10,13 @@
buildMozillaMach rec {
pname = "firefox-devedition";
binaryName = pname;
version = "143.0b8";
version = "143.0b9";
applicationName = "Firefox Developer Edition";
requireSigning = false;
branding = "browser/branding/aurora";
src = fetchurl {
url = "mirror://mozilla/devedition/releases/${version}/source/firefox-${version}.source.tar.xz";
sha512 = "89152a4dd3e17f68d7991fae65a6365a2273fcbef28c245a76e9e068a1f12c486a7d0c6d3cb8988c1c9955b15809fa93e117e25b04f9b1a9d449e685cbf30cfc";
sha512 = "a323bbcc7c8898073e320f3c2701881d849cff31a01a8bad34df7f08945dd7fb7e8cc9afd8aceb209198e8932b7b1d835af45b87459f4454f9a7f48bc85ef690";
};
# buildMozillaMach sets MOZ_APP_REMOTINGNAME during configuration, but

View File

@@ -1,77 +0,0 @@
{
stdenv,
lib,
fetchFromGitHub,
buildMozillaMach,
nixosTests,
}:
(
(buildMozillaMach rec {
pname = "floorp";
packageVersion = "11.30.0";
applicationName = "Floorp";
binaryName = "floorp";
branding = "browser/branding/official";
requireSigning = false;
allowAddonSideload = true;
# Must match the contents of `browser/config/version.txt` in the source tree
version = "128.14.0";
src = fetchFromGitHub {
owner = "Floorp-Projects";
repo = "Floorp";
fetchSubmodules = true;
rev = "v${packageVersion}";
hash = "sha256-4IAN0S9JWjaGXtnRUJz3HqUm+ZWL7KmryLu8ojSXiqg=";
};
extraConfigureFlags = [
"--with-app-basename=${applicationName}"
"--with-unsigned-addon-scopes=app,system"
"--enable-proxy-bypass-protection"
];
extraPostPatch = ''
# Fix .desktop files for PWAs generated by Floorp
# The executable path returned by Services.dirsvc.get() is absolute and
# thus is the full /nix/store/[..] path. To avoid breaking PWAs with each
# update, rely on `floorp` being in $PATH, as before.
substituteInPlace floorp/browser/base/content/modules/ssb/LinuxSupport.mjs \
--replace-fail 'Services.dirsvc.get("XREExeF",Ci.nsIFile).path' '"floorp"'
'';
updateScript = ./update.sh;
meta = {
description = "Fork of Firefox that seeks balance between versatility, privacy and web openness";
homepage = "https://floorp.app/";
maintainers = with lib.maintainers; [ christoph-heiss ];
platforms = lib.platforms.unix;
broken = stdenv.buildPlatform.is32bit;
# since Firefox 60, build on 32-bit platforms fails with "out of memory".
# not in `badPlatforms` because cross-compilation on 64-bit machine might work.
maxSilent = 14400; # 4h, double the default of 7200s (c.f. #129212, #129115)
license = lib.licenses.mpl20;
mainProgram = "floorp";
};
tests = {
inherit (nixosTests) floorp;
};
}).override
{
# Upstream build configuration can be found at
# .github/workflows/src/linux/shared/mozconfig_linux_base
privacySupport = true;
webrtcSupport = true;
enableOfficialBranding = false;
geolocationSupport = true;
# https://github.com/NixOS/nixpkgs/issues/418473
ltoSupport = false;
}
).overrideAttrs
(prev: {
MOZ_DATA_REPORTING = "";
MOZ_TELEMETRY_REPORTING = "";
})

View File

@@ -1,38 +0,0 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl nix-prefetch-github jq gnused
set -e
owner=Floorp-Projects
repo=Floorp
dirname="$(dirname "$0")"
updateVersion() {
sed -i "s/packageVersion = \"[0-9.]*\";/packageVersion = \"$1\";/g" "$dirname/default.nix"
}
updateBaseVersion() {
local base
base=$(curl -s "https://raw.githubusercontent.com/$owner/$repo/v$1/browser/config/version.txt")
sed -i "s/version = \"[0-9.]*\";/version = \"$base\";/g" "$dirname/default.nix"
}
updateHash() {
local hash
hash=$(nix-prefetch-github --fetch-submodules --rev "v$1" $owner $repo | jq -r .hash)
sed -i "s|hash = \"[a-zA-Z0-9\/+-=]*\";|hash = \"$hash\";|g" "$dirname/default.nix"
}
currentVersion=$(cd "$dirname" && nix eval --raw -f ../../../../.. floorp.version)
latestTag=$(curl -s https://api.github.com/repos/Floorp-Projects/Floorp/releases/latest | jq -r ".tag_name")
latestVersion="$(expr "$latestTag" : 'v\(.*\)')"
if [[ "$currentVersion" == "$latestVersion" ]]; then
echo "Floorp is up-to-date: ${currentVersion}"
exit 0
fi
updateVersion "$latestVersion"
updateBaseVersion "$latestVersion"
updateHash "$latestVersion"

View File

@@ -41,7 +41,6 @@ lib:
ethtool,
fetchFromGitHub,
fetchgit,
fetchpatch,
fetchurl,
fetchzip,
findutils,
@@ -55,7 +54,7 @@ lib:
kmod,
lib,
libseccomp,
makeWrapper,
makeBinaryWrapper,
nixosTests,
overrideBundleAttrs ? { }, # An attrSet/function to override the `k3sBundle` derivation.
overrideCniPluginsAttrs ? { }, # An attrSet/function to override the `k3sCNIPlugins` derivation.
@@ -69,10 +68,11 @@ lib:
socat,
sqlite,
stdenv,
systemd,
systemdMinimal,
util-linuxMinimal,
yq-go,
zstd,
versionCheckHook,
}:
# k3s is a kinda weird derivation. One of the main points of k3s is the
@@ -328,7 +328,7 @@ let
}).overrideAttrs
overrideContainerdAttrs;
in
buildGoModule rec {
buildGoModule (finalAttrs: {
pname = "k3s";
version = k3sVersion;
pos = builtins.unsafeGetAttrPos "k3sVersion" attrs;
@@ -345,15 +345,13 @@ buildGoModule rec {
# Nix prefers dynamically linked binaries over static binary.
substituteInPlace scripts/package-cli \
--replace '"$LDFLAGS $STATIC" -o' \
'"$LDFLAGS" -o' \
--replace "STATIC=\"-extldflags \'-static\'\"" \
""
--replace-fail '"$LDFLAGS $STATIC" -o' \
'"$LDFLAGS" -o'
# Upstream codegen fails with trimpath set. Removes "trimpath" for 'go generate':
substituteInPlace scripts/package-cli \
--replace '"''${GO}" generate' \
--replace-fail '"''${GO}" generate' \
'GOFLAGS="" \
GOOS="${pkgsBuildBuild.go.GOOS}" \
GOARCH="${pkgsBuildBuild.go.GOARCH}" \
@@ -381,7 +379,7 @@ buildGoModule rec {
k3sKillallDeps = [
bash
systemd
systemdMinimal
procps
coreutils
gnugrep
@@ -389,10 +387,10 @@ buildGoModule rec {
gnused
];
buildInputs = k3sRuntimeDeps;
buildInputs = finalAttrs.k3sRuntimeDeps;
nativeBuildInputs = [
makeWrapper
makeBinaryWrapper
rsync
yq-go
zstd
@@ -439,23 +437,20 @@ buildGoModule rec {
# wildcard to match the arm64 build too
install -m 0755 dist/artifacts/k3s* -D $out/bin/k3s
wrapProgram $out/bin/k3s \
--prefix PATH : ${lib.makeBinPath k3sRuntimeDeps} \
--prefix PATH : ${lib.makeBinPath finalAttrs.k3sRuntimeDeps} \
--prefix PATH : "$out/bin"
ln -s $out/bin/k3s $out/bin/kubectl
ln -s $out/bin/k3s $out/bin/crictl
ln -s $out/bin/k3s $out/bin/ctr
install -m 0755 ${k3sKillallSh} -D $out/bin/k3s-killall.sh
wrapProgram $out/bin/k3s-killall.sh \
--prefix PATH : ${lib.makeBinPath (k3sRuntimeDeps ++ k3sKillallDeps)}
--prefix PATH : ${lib.makeBinPath (finalAttrs.k3sRuntimeDeps ++ finalAttrs.k3sKillallDeps)}
runHook postInstall
'';
doInstallCheck = true;
installCheckPhase = ''
runHook preInstallCheck
$out/bin/k3s --version | grep -F "v${k3sVersion}" >/dev/null
runHook postInstallCheck
'';
nativeInstallCheckInputs = [ versionCheckHook ];
versionCheckProgramArg = "--version";
passthru = {
inherit airgap-images;
@@ -464,13 +459,16 @@ buildGoModule rec {
k3sRepo = k3sRepo;
k3sRoot = k3sRoot;
k3sBundle = k3sBundle;
mkTests =
version:
tests =
let
k3s_version = "k3s_" + lib.replaceStrings [ "." ] [ "_" ] (lib.versions.majorMinor version);
mkTests =
version:
let
k3s_version = "k3s_" + lib.replaceStrings [ "." ] [ "_" ] (lib.versions.majorMinor version);
in
lib.mapAttrs (name: value: nixosTests.k3s.${name}.${k3s_version}) nixosTests.k3s;
in
lib.mapAttrs (name: value: nixosTests.k3s.${name}.${k3s_version}) nixosTests.k3s;
tests = passthru.mkTests k3sVersion;
mkTests k3sVersion;
updateScript = updateScript;
imagesList = throw "k3s.imagesList was removed";
airgapImages = throw "k3s.airgapImages was renamed to k3s.airgap-images";
@@ -481,4 +479,4 @@ buildGoModule rec {
// (lib.mapAttrs (_: value: fetchurl value) imagesVersions);
meta = baseMeta;
}
})

View File

@@ -261,13 +261,13 @@
"vendorHash": null
},
"cloudamqp": {
"hash": "sha256-v+hbbmGAbCY+DlgQPzZmiknQ/88icn6ja6UIecoMDbU=",
"hash": "sha256-j1zPlyljBpBgOxFA2hOQAvPAl9sR5UpN899kshXf4GA=",
"homepage": "https://registry.terraform.io/providers/cloudamqp/cloudamqp",
"owner": "cloudamqp",
"repo": "terraform-provider-cloudamqp",
"rev": "v1.35.1",
"rev": "v1.36.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-shRiTPn4A1rmwBnoSlRDfdYuHqSFvL4o6o8vAJutu3Q="
"vendorHash": "sha256-O/MSx6iZ0SkCsMLKMr1cetkPaePoVq62UTOhiPTzF6g="
},
"cloudflare": {
"hash": "sha256-EsbktS0pP+tJtIPHckMmgdeIBLyL9T+lVyoDzJAzi98=",
@@ -534,13 +534,13 @@
"vendorHash": "sha256-KWXHXLIt0fI9k3XRhch8VLLnVXwkSH2uUS5APfCcNdI="
},
"google-beta": {
"hash": "sha256-lmn6hHVJ65Q65bATLV8XeyGOh9lsMcOprJt7vbGBCeE=",
"hash": "sha256-l08jmxkWsTrk32cJM28OuwSZgSKIB3EPODaUf7821uY=",
"homepage": "https://registry.terraform.io/providers/hashicorp/google-beta",
"owner": "hashicorp",
"repo": "terraform-provider-google-beta",
"rev": "v7.0.1",
"rev": "v7.1.1",
"spdx": "MPL-2.0",
"vendorHash": "sha256-l5UkyXzoy3lY5bAus6pHnYKa6QniebN6nmQ5gANxr/Y="
"vendorHash": "sha256-9tXElUSD6WSfEn6Urt0GZFkxGXj/iUO83ZkKw3GfAgo="
},
"googleworkspace": {
"hash": "sha256-dedYnsKHizxJZibuvJOMbJoux0W6zgKaK5fxIofKqCY=",
@@ -768,13 +768,13 @@
"vendorHash": "sha256-fP6brpY/wRI1Yjgapzi+FfOci65gxWeOZulXbGdilrE="
},
"linode": {
"hash": "sha256-zqMknrd8W49RijEVn1TlsV3PT1KGmtdAZUE+Gj8AI5g=",
"hash": "sha256-CSxYyKDHYCAZyVQaPabQ/qks4aEIxN/Oc109luEcaXc=",
"homepage": "https://registry.terraform.io/providers/linode/linode",
"owner": "linode",
"repo": "terraform-provider-linode",
"rev": "v3.1.1",
"rev": "v3.2.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-ormU5oDUFb0FQK2L6NDGD/GRy4XXuoFTnq6VKSDVtSw="
"vendorHash": "sha256-nRJmUQW9vCmqnVgsw4JGozLbxkVVDYUa0Hot5mA4vaM="
},
"linuxbox": {
"hash": "sha256-svQRz1/PdVLpHoxOam1sfRTwHqgqs4ohJQs3IPMMAM4=",
@@ -885,13 +885,13 @@
"vendorHash": null
},
"newrelic": {
"hash": "sha256-4l7q9umrbic4lOKMtTWwBDRHMJUlVyrl5un7KAYYiAM=",
"hash": "sha256-Lmt3ZIrFW/NPLlWlOlXH/sxh4CpBPAJfsJOjjQy9uZA=",
"homepage": "https://registry.terraform.io/providers/newrelic/newrelic",
"owner": "newrelic",
"repo": "terraform-provider-newrelic",
"rev": "v3.66.0",
"rev": "v3.68.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-+ogtadT0zekeaynXQCwDBrD+bBnKUsyzLGPQyLsCSR8="
"vendorHash": "sha256-7eRDz/MAKYnUsBAJOSssqzdSfsRSboQX4E/8qBjnGDk="
},
"nexus": {
"hash": "sha256-Lm5CZ+eBDUNIL2KuK/iKc5dTif7P+E9II714vwvYuyU=",

View File

@@ -194,8 +194,8 @@ rec {
mkTerraform = attrs: pluggable (generic attrs);
terraform_1 = mkTerraform {
version = "1.13.1";
hash = "sha256-PuC2wOEEMFaiR9eyF3yI6PLSkqnT/MWdy6RZo6B9zWM=";
version = "1.13.2";
hash = "sha256-YzPX1PYm8lj3kxOtpenOsiE6zEW8Gq+4UifyP6qDqGw=";
vendorHash = "sha256-UcsB5cTae55meJ945fvgowch4EBdaTET2+t5KWvpPQ8=";
patches = [ ./provider-path-0_15.patch ];
passthru = {

View File

@@ -11,14 +11,14 @@ let
{
stable = "0.0.108";
ptb = "0.0.159";
canary = "0.0.751";
canary = "0.0.752";
development = "0.0.85";
}
else
{
stable = "0.0.359";
ptb = "0.0.190";
canary = "0.0.857";
canary = "0.0.858";
development = "0.0.97";
};
version = versions.${branch};
@@ -34,7 +34,7 @@ let
};
canary = fetchurl {
url = "https://canary.dl2.discordapp.net/apps/linux/${version}/discord-canary-${version}.tar.gz";
hash = "sha256-cE1BiWwZGrSzvdKDSiAs+Dz/nnxhuVs4JQYMwwY/F5k=";
hash = "sha256-6hq0KIXR9j/AHGPyQIXjhf1uJiYizxB5Nu+0unn/frE=";
};
development = fetchurl {
url = "https://development.dl2.discordapp.net/apps/linux/${version}/discord-development-${version}.tar.gz";
@@ -52,7 +52,7 @@ let
};
canary = fetchurl {
url = "https://canary.dl2.discordapp.net/apps/osx/${version}/DiscordCanary.dmg";
hash = "sha256-omk2vau5LKRhxgcG3k4dYqyc3YH7mZ72Nz4lQyaoO0c=";
hash = "sha256-/dVr7ZS6bRccLPz85xxoniZEbkK1qQ3lqedhGuaBIRk=";
};
development = fetchurl {
url = "https://development.dl2.discordapp.net/apps/osx/${version}/DiscordDevelopment.dmg";

View File

@@ -47,7 +47,7 @@
nspr,
nss,
pango,
systemd,
systemdLibs,
libappindicator-gtk3,
libdbusmenu,
writeScript,
@@ -99,7 +99,7 @@ in
assert lib.assertMsg (
enabledDiscordModsCount <= 1
) "discord: Only one of Vencord, Equicord or Moonlight can be enabled at the same time";
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
inherit
pname
version
@@ -130,7 +130,7 @@ stdenv.mkDerivation rec {
libPath = lib.makeLibraryPath (
[
libcxx
systemd
systemdLibs
libpulseaudio
libdrm
libgbm
@@ -170,7 +170,7 @@ stdenv.mkDerivation rec {
libdbusmenu
wayland
]
++ lib.optional withTTS speechd-minimal
++ lib.optionals withTTS [ speechd-minimal ]
);
installPhase = ''
@@ -192,7 +192,7 @@ stdenv.mkDerivation rec {
''} \
${lib.strings.optionalString enableAutoscroll "--add-flags \"--enable-blink-features=MiddleClickAutoscroll\""} \
--prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
--prefix LD_LIBRARY_PATH : ${libPath}:$out/opt/${binaryName} \
--prefix LD_LIBRARY_PATH : ${finalAttrs.libPath}:$out/opt/${binaryName} \
${lib.strings.optionalString disableUpdates "--run ${lib.getExe disableBreakingUpdates}"} \
--add-flags ${lib.escapeShellArg commandLineArgs}
@@ -257,4 +257,4 @@ stdenv.mkDerivation rec {
update-source-version ${pname} "$version" --file=./pkgs/applications/networking/instant-messengers/discord/default.nix --version-key=${branch}
'';
};
}
})

View File

@@ -42,14 +42,14 @@
stdenv.mkDerivation (finalAttrs: {
pname = "telegram-desktop-unwrapped";
version = "6.1.1";
version = "6.1.3";
src = fetchFromGitHub {
owner = "telegramdesktop";
repo = "tdesktop";
rev = "v${finalAttrs.version}";
fetchSubmodules = true;
hash = "sha256-gCakI7r0xyJt8rGtaz6vXuG022alezcipNIkyzZEvoA=";
hash = "sha256-ElbKzv+QMqH62BGAvNjDDNp7NSJYIEvoDzxKCbEdwqM=";
};
nativeBuildInputs = [

View File

@@ -31,6 +31,11 @@ stdenv.mkDerivation rec {
hash = "sha256-KSS8s6Hti1UfwQH3QLnw/gogKxFQJ2R89phQ1l/YjFI=";
};
patches = [
# See: <https://github.com/RsyncProject/rsync/pull/790>
./fix-tests-in-darwin-sandbox.patch
];
nativeBuildInputs = [
updateAutotoolsGnuConfigScriptsHook
perl
@@ -75,6 +80,8 @@ stdenv.mkDerivation rec {
doCheck = true;
__darwinAllowLocalNetworking = true;
meta = with lib; {
description = "Fast incremental file transfer utility";
homepage = "https://rsync.samba.org/";

View File

@@ -0,0 +1,56 @@
From 9b104ed9859f17b6ed4c4ad01806c75a0c197dd7 Mon Sep 17 00:00:00 2001
From: Emily <hello@emily.moe>
Date: Tue, 5 Aug 2025 15:55:24 +0100
Subject: [PATCH] Allow `ls(1)` to fail in test setup
This can happen when the tests are unable to `stat(2)` some files in
`/etc`, `/bin`, or `/`, due to Unix permissions or other sandboxing. We
still guard against serious errors, which use exit code 2.
---
testsuite/longdir.test | 4 ++--
testsuite/rsync.fns | 8 ++++----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/testsuite/longdir.test b/testsuite/longdir.test
index 8d66bb5f..26747292 100644
--- a/testsuite/longdir.test
+++ b/testsuite/longdir.test
@@ -16,9 +16,9 @@ makepath "$longdir" || test_skipped "unable to create long directory"
touch "$longdir/1" || test_skipped "unable to create files in long directory"
date > "$longdir/1"
if [ -r /etc ]; then
- ls -la /etc >"$longdir/2"
+ ls -la /etc >"$longdir/2" || [ $? -eq 1 ]
else
- ls -la / >"$longdir/2"
+ ls -la / >"$longdir/2" || [ $? -eq 1 ]
fi
checkit "$RSYNC --delete -avH '$fromdir/' '$todir'" "$fromdir/" "$todir"
diff --git a/testsuite/rsync.fns b/testsuite/rsync.fns
index 2ab97b69..f7da363f 100644
--- a/testsuite/rsync.fns
+++ b/testsuite/rsync.fns
@@ -195,15 +195,15 @@ hands_setup() {
echo some data > "$fromdir/dir/subdir/foobar.baz"
mkdir "$fromdir/dir/subdir/subsubdir"
if [ -r /etc ]; then
- ls -ltr /etc > "$fromdir/dir/subdir/subsubdir/etc-ltr-list"
+ ls -ltr /etc > "$fromdir/dir/subdir/subsubdir/etc-ltr-list" || [ $? -eq 1 ]
else
- ls -ltr / > "$fromdir/dir/subdir/subsubdir/etc-ltr-list"
+ ls -ltr / > "$fromdir/dir/subdir/subsubdir/etc-ltr-list" || [ $? -eq 1 ]
fi
mkdir "$fromdir/dir/subdir/subsubdir2"
if [ -r /bin ]; then
- ls -lt /bin > "$fromdir/dir/subdir/subsubdir2/bin-lt-list"
+ ls -lt /bin > "$fromdir/dir/subdir/subsubdir2/bin-lt-list" || [ $? -eq 1 ]
else
- ls -lt / > "$fromdir/dir/subdir/subsubdir2/bin-lt-list"
+ ls -lt / > "$fromdir/dir/subdir/subsubdir2/bin-lt-list" || [ $? -eq 1 ]
fi
# echo testing head:
--
2.50.1

View File

@@ -19,13 +19,13 @@ let
}:
buildGoModule rec {
pname = stname;
version = "2.0.6";
version = "2.0.8";
src = fetchFromGitHub {
owner = "syncthing";
repo = "syncthing";
tag = "v${version}";
hash = "sha256-BHrZJSNuq4PZI6fgbTCfo2hXUmXW/C0TvWzZRkoiaFU=";
hash = "sha256-QkCLFztzaH9MvgP6HWUr5Z8yIrKlY6/t2VaZwai/H8Q=";
};
vendorHash = "sha256-iYTAnEy0MqJaTz/cdpteealyviwVrpwDzVigo8nnXqs=";
@@ -106,6 +106,12 @@ in
done
install -Dm644 etc/linux-desktop/syncthing-ui.desktop $out/share/applications/syncthing-ui.desktop
install -Dm644 assets/logo-32.png $out/share/icons/hicolor/32x32/apps/syncthing.png
install -Dm644 assets/logo-64.png $out/share/icons/hicolor/64x64/apps/syncthing.png
install -Dm644 assets/logo-128.png $out/share/icons/hicolor/128x128/apps/syncthing.png
install -Dm644 assets/logo-256.png $out/share/icons/hicolor/256x256/apps/syncthing.png
install -Dm644 assets/logo-512.png $out/share/icons/hicolor/512x512/apps/syncthing.png
install -Dm644 assets/logo-only.svg $out/share/icons/hicolor/scalable/apps/syncthing.svg
''
+ lib.optionalString (stdenv.hostPlatform.isLinux) ''

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