Merge remote-tracking branch 'origin/staging-next' into staging

This commit is contained in:
K900
2025-10-07 08:19:36 +03:00
343 changed files with 2844 additions and 43278 deletions
+2
View File
@@ -35,6 +35,8 @@ jobs:
into: staging-next
- from: staging-next
into: staging
- from: master
into: staging-nixos
uses: ./.github/workflows/periodic-merge.yml
with:
from: ${{ matrix.pairs.from }}
+1 -1
View File
@@ -55,7 +55,7 @@ jobs:
github_token: ${{ steps.app-token.outputs.token }}
- name: Comment on failure
uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0
if: ${{ failure() }}
with:
issue-number: 105153
+30 -8
View File
@@ -430,20 +430,22 @@ gitGraph
Here's an overview of the different branches:
| branch | `master` | `staging-next` | `staging` |
| --- | --- | --- | --- |
| Used for development | ✔️ | ❌ | ✔️ |
| Built by Hydra | ✔️ | ✔️ | ❌ |
| [Mass rebuilds][mass-rebuild] | ❌ | ⚠️ Only to fix Hydra builds | ✔️ |
| Critical security fixes | ✔️ for non-mass-rebuilds | ✔️ for mass-rebuilds | ❌ |
| Automatically merged into | `staging-next` | `staging` | - |
| Manually merged into | - | `master` | `staging-next` |
| branch | `master` | `staging-next` | `staging` | [`staging-nixos`](#test-driver-rebuild) |
| --- | --- | --- | --- | --- |
| Used for development | ✔️ | ❌ | ✔️ | ✔️ |
| Built by Hydra | ✔️ | ✔️ | ❌ | ❌ |
| [Mass rebuilds][mass-rebuild] | ❌ | ⚠️ Only to fix Hydra builds | ✔️ | ❌[^1] |
| Critical security fixes | ✔️ for non-mass-rebuilds | ✔️ for mass-rebuilds | ❌ | ✔️ |
| Automatically merged into | `staging-next` & `staging-nixos` | `staging` | - | - |
| Manually merged into | - | `master` | `staging-next` | `master` |
The staging workflow is used for all stable branches with corresponding names:
- `master`/`release-YY.MM`
- `staging`/`staging-YY.MM`
- `staging-next`/`staging-next-YY.MM`
[^1]: Except changes that cause no more rebuilds than kernel updates
# Conventions
## Branch conventions
@@ -495,6 +497,26 @@ In order to help the decision, CI automatically assigns [`rebuild` labels](https
As a rule of thumb, if the number of rebuilds is **500 or more**, consider targeting the `staging` branch instead of `master`; if the number is **1000 or more**, the pull request causes a mass rebuild, and should target the `staging` branch.
See [previously merged pull requests to the staging branches](https://github.com/NixOS/nixpkgs/issues?q=base%3Astaging+-base%3Astaging-next+is%3Amerged) to get a sense for what changes are considered mass rebuilds.
Please note that changes to the Linux kernel are an exception to this rule.
These PRs go to `staging-nixos`, see [the next section for more context](#changes-rebuilding-all-tests).
### Changes rebuilding all NixOS tests
[test-driver-rebuild]: #changes-rebuilding-all-tests
Changes causing a rebuild of all NixOS tests get a special [`10.rebuild-nixos-tests`](https://github.com/NixOS/nixpkgs/issues?q=state%3Aopen%20label%3A10.rebuild-nixos-tests) label.
These changes pose a significant impact on the build infrastructure.
Hence, these PRs should either target a `staging`-branch or `staging-nixos`, provided one of following conditions applies:
* The label `10.rebuild-nixos-tests` is set, or
* The PR is a change affecting the Linux kernel.
The branch gets merged whenever mainline kernel updates or critical security fixes land on the branch.
This usually happens on a weekly basis.
Backports are not handled by such a branch.
The relevant PRs from this branch must be backported manually.
## Commit conventions
[commit-conventions]: #commit-conventions
+2
View File
@@ -8,6 +8,7 @@ const typeConfig = {
release: ['development', 'primary'],
staging: ['development', 'secondary'],
'staging-next': ['development', 'secondary'],
'staging-nixos': ['development', 'secondary'],
'haskell-updates': ['development', 'secondary'],
nixos: ['channel'],
nixpkgs: ['channel'],
@@ -19,6 +20,7 @@ const orderConfig = {
master: 0,
release: 1,
staging: 2,
'staging-nixos': 2,
'haskell-updates': 3,
'staging-next': 4,
}
+11 -1
View File
@@ -882,7 +882,17 @@ This is used with Gitiles repositories. The arguments expected are similar to `f
## `fetchFromBitbucket` {#fetchfrombitbucket}
This is used with BitBucket repositories. The arguments expected are very similar to `fetchFromGitHub` above.
Used for repositories hosted on Bitbucket (`"bitbucket.org"`) owned by the Australian-based Atlassian Corporation. It requires an `owner` and `repo` argument which are both strings that reference the workspace ID and repository name hosted on Bitbucket cloud as well as either a `tag` or `rev` argument.
By default, `fetchFromBitbucket` will attempt to download a commit snapshot tarball at the specified `tag` or `rev` at `https://bitbucket.org/<owner>/<repo>/get/<tag-or-rev>.tar.gz`
However, `fetchFromBitbucket` will automatically switch to using `fetchgit` and fetch from `https://bitbucket.org/<owner>/<repo>.git` in any of these cases:
- `forceFetchGit`, `leaveDotGit`, `deepClone`, `fetchLFS`, or `fetchSubmodules` are set to `true`
- `sparseCheckout` contains any entries (is a non-empty list)
- `rootDir` is set to a non-empty string
When `fetchgit` is used, refer to the `fetchgit` section for documentation of its available options.
## `fetchFromSavannah` {#fetchfromsavannah}
+53
View File
@@ -105,3 +105,56 @@ $ make -C $dev/lib/modules/*/build M=$(pwd)/drivers/net/ethernet/mellanox module
```
:::
## Maintainer information {#sec-linux-kernel-maintainer-information}
### Updating kernels {#sec-linux-updates}
Updating all kernels can be done with the following script:
```ShellSession
$ pkgs/os-specific/linux/kernel/update.sh
```
The change gets submitted like this:
* File a PR against `staging-nixos`.
* Add a `backport release-XX.XX` label for an automated backport.
We don't expect many other changes on that branch to require a backport, hence there's no such branch for stable.
By using an additional PR, we get the automatic backport against stable without manual cherry-picks.
* Merge into `staging-nixos`.
* File as PR from `staging-nixos` against `master`.
* When all status checks are green, merge.
### Add a new (major) version of the Linux kernel {#sec-linux-add-new-kernel-version}
* When running `./pkgs/os-specific/linux/kernel/update.sh`, new kernel majors get discovered automatically.
* Prepare all Nix expressions for the new kernel
* Instantiate the new kernel in `pkgs/top-level/linux-kernels.nix` in the `kernels`-section.
```nix
{
linux_X_Y = callPackage ../os-specific/linux/kernel/mainline.nix {
branch = "X.Y";
kernelPatches = [
# any new patches required (it makes to look which patches are used by its predecessor)
];
};
}
```
* Instantiate the package-set in `vanillaPackages`:
```nix
{
linux_X_Y = recurseIntoAttrs (packagesFor kernels.linux_X_Y);
}
```
* Update `linux_latest` to the new attribute.
* __SQUASH__ the changes into the `linux: init at …` commit.
* If a new hardened is available:
* Instantiate a `linux_X_Y_hardened = hardenedKernelsFor kernels.linux_X_Y { };` in `kernels` and
`linux_X_Y_hardened = hardenedKernelFor kernels.linux_X_Y { };` in the `packages`-section.
* Make sure to remove the hardened variant of the previous kernel version unless it's LTS.
We only support the latest and latest LTS version of hardened.
* If no new hardened kernel is available:
* Keep the previously latest kernel until its mainline counterpart gets removed.
After that `linux_hardened` points to the latest LTS supported by hardened.
* __SQUASH__ the changes into the `linux_X_Y_hardened: init at …` commit.
+9
View File
@@ -4294,6 +4294,15 @@
"sec-linux-kernel": [
"index.html#sec-linux-kernel"
],
"sec-linux-kernel-maintainer-information": [
"index.html#sec-linux-kernel-maintainer-information"
],
"sec-linux-updates": [
"index.html#sec-linux-updates"
],
"sec-linux-add-new-kernel-version": [
"index.html#sec-linux-add-new-kernel-version"
],
"ex-overriding-kernel-derivation": [
"index.html#ex-overriding-kernel-derivation"
],
+4 -1
View File
@@ -146,7 +146,9 @@
- `tooling-language-server` has been renamed to `deputy` (both the package and binary), following the rename of the upstream project.
- `fetchtorrent`, when using the "rqbit" backend, erroneously started fetching files into a subdirectory in Nixpkgs 24.11. The original behaviour -- which matches the behaviour using the "transmission" backend -- has now been restored. Users reliant on the erroneous behaviour can temporarily maintain it by adding `flatten = false` to the `fetchtorrent` arguments; Nix will produce an evaluation warning for anyone using `backend = "rqbit"` without `flatten = true`.
- `fetchFromBitBucket` has gained a `fetchgit` backend when passing in git-related arguments similar to `fetchFromGitHub`.
- `fetchtorrent`, when using the "rqbit" backend, erroneously started fetching files into a subdirectory in Nixpkgs 24.11. The original behaviour &ndash; which matches the behaviour using the "transmission" backend &ndash; has now been restored. Users reliant on the erroneous behaviour can temporarily maintain it by adding `flatten = false` to the `fetchtorrent` arguments; Nix will produce an evaluation warning for anyone using `backend = "rqbit"` without `flatten = true`.
- `steamcontroller` has been removed due to lack of upstream maintenance. Consider using `sc-controller` instead.
@@ -227,6 +229,7 @@
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
- Added `rewriteURL` attribute to the nixpkgs `config`, to allow for rewriting the URLs downloaded by `fetchurl`.
- Added `hashedMirrors` attribute to the nixpkgs `config`, to allow for customization of the hashed mirrors used by `fetchurl`.
- Added `gitConfig` and `gitConfigFile` option to the nixpkgs `config`, to allow for setting a default `gitConfigFile` for all `fetchgit` invocations.
+5 -5
View File
@@ -44,7 +44,7 @@ rec {
;
/**
Return an attribute from nested attribute sets.
Returns an attribute from nested attribute sets.
Nix has an [attribute selection operator `.`](https://nixos.org/manual/nix/stable/language/operators#attribute-selection) which is sufficient for such queries, as long as the number of attributes is static. For example:
@@ -111,7 +111,7 @@ rec {
attrByPath' 0 set;
/**
Return if an attribute from nested attribute set exists.
Returns if an attribute from nested attribute set exists.
Nix has a [has attribute operator `?`](https://nixos.org/manual/nix/stable/language/operators#has-attribute), which is sufficient for such queries, as long as the number of attributes is static. For example:
@@ -177,7 +177,7 @@ rec {
hasAttrByPath' 0 e;
/**
Return the longest prefix of an attribute path that refers to an existing attribute in a nesting of attribute sets.
Returns the longest prefix of an attribute path that refers to an existing attribute in a nesting of attribute sets.
Can be used after [`mapAttrsRecursiveCond`](#function-library-lib.attrsets.mapAttrsRecursiveCond) to apply a condition,
although this will evaluate the predicate function on sibling attributes as well.
@@ -504,7 +504,7 @@ rec {
updates: value: go 0 true value updates;
/**
Return the specified attributes from a set.
Returns the specified attributes from a set.
# Inputs
@@ -536,7 +536,7 @@ rec {
attrVals = nameList: set: map (x: set.${x}) nameList;
/**
Return the values of all attributes in the given set, sorted by
Returns the values of all attributes in the given set, sorted by
attribute name.
# Type
+2 -2
View File
@@ -73,7 +73,7 @@ let
name: default: attrs:
attrs.${name} or default;
# Return the second argument if the first one is true or the empty version
# Returns the second argument if the first one is true or the empty version
# of the second argument.
ifEnable =
cond: val:
@@ -89,7 +89,7 @@ let
else
null;
# Return true only if there is an attribute and it is true.
# Returns true only if there is an attribute and it is true.
checkFlag =
attrSet: name:
if name == "true" then
+1 -1
View File
@@ -119,7 +119,7 @@ rec {
x;
/**
Return the fixpoint that `f` converges to when called iteratively, starting
Returns the fixpoint that `f` converges to when called iteratively, starting
with the input `x`.
```
+11 -11
View File
@@ -642,7 +642,7 @@ rec {
if index == null then default else elemAt list index;
/**
Return true if function `pred` returns true for at least one
Returns true if function `pred` returns true for at least one
element of `list`.
# Inputs
@@ -677,7 +677,7 @@ rec {
any = builtins.any;
/**
Return true if function `pred` returns true for all elements of
Returns true if function `pred` returns true for all elements of
`list`.
# Inputs
@@ -777,7 +777,7 @@ rec {
optional = cond: elem: if cond then [ elem ] else [ ];
/**
Return a list or an empty list, depending on a boolean value.
Returns a list or an empty list, depending on a boolean value.
# Inputs
@@ -837,7 +837,7 @@ rec {
toList = x: if isList x then x else [ x ];
/**
Return a list of integers from `first` up to and including `last`.
Returns a list of integers from `first` up to and including `last`.
# Inputs
@@ -871,7 +871,7 @@ rec {
range = first: last: if first > last then [ ] else genList (n: first + n) (last - first + 1);
/**
Return a list with `n` copies of an element.
Returns a list with `n` copies of an element.
# Inputs
@@ -1429,7 +1429,7 @@ rec {
map (x: elemAt x 1) (sort less prepared);
/**
Return the first (at most) N elements of a list.
Returns the first (at most) N elements of a list.
# Inputs
@@ -1463,7 +1463,7 @@ rec {
take = count: sublist 0 count;
/**
Return the last (at most) N elements of a list.
Returns the last (at most) N elements of a list.
# Inputs
@@ -1639,7 +1639,7 @@ rec {
throw "lib.lists.removePrefix: First argument is not a list prefix of the second argument";
/**
Return a list consisting of at most `count` elements of `list`,
Returns a list consisting of at most `count` elements of `list`,
starting at index `start`.
# Inputs
@@ -1737,7 +1737,7 @@ rec {
take commonPrefixLength list1;
/**
Return the last element of a list.
Returns the last element of a list.
This function throws an error if the list is empty.
@@ -1770,7 +1770,7 @@ rec {
elemAt list (length list - 1);
/**
Return all elements but the last.
Returns all elements but the last.
This function throws an error if the list is empty.
@@ -1803,7 +1803,7 @@ rec {
take (length list - 1) list;
/**
Return the image of the cross product of some lists by a function.
Returns the image of the cross product of some lists by a function.
# Examples
:::{.example}
+6 -6
View File
@@ -1452,7 +1452,7 @@ let
};
/**
Return a definition with file location information.
Returns a definition with file location information.
*/
mkDefinition = args@{ file, value, ... }: args // { _type = "definition"; };
@@ -1541,7 +1541,7 @@ let
};
/**
Return a module that causes a warning to be shown if the
Returns a module that causes a warning to be shown if the
specified option is defined. For example,
mkRemovedOptionModule [ "boot" "loader" "grub" "bootDevice" ] "<replacement instructions>"
@@ -1589,7 +1589,7 @@ let
};
/**
Return a module that causes a warning to be shown if the
Returns a module that causes a warning to be shown if the
specified "from" option is defined; the defined value is however
forwarded to the "to" option. This can be used to rename options
while providing backward compatibility. For example,
@@ -1645,7 +1645,7 @@ let
};
/**
Return a module that causes a warning to be shown if any of the "from"
Returns a module that causes a warning to be shown if any of the "from"
option is defined; the defined values can be used in the "mergeFn" to set
the "to" value.
This function can be used to merge multiple options into one that has a
@@ -1724,7 +1724,7 @@ let
/**
Single "from" version of mkMergedOptionModule.
Return a module that causes a warning to be shown if the "from" option is
Returns a module that causes a warning to be shown if the "from" option is
defined; the defined value can be used in the "mergeFn" to set the "to"
value.
This function can be used to change an option into another that has a
@@ -1822,7 +1822,7 @@ let
mkDerivedConfig = opt: f: mkOverride (opt.highestPrio or defaultOverridePriority) (f opt.value);
/**
Return a module that help declares an option that has been renamed.
Returns a module that help declares an option that has been renamed.
When a value is defined for the old option, it is forwarded to the `to` option.
*/
doRename =
+1 -1
View File
@@ -503,7 +503,7 @@ rec {
loc: defs:
if defs == [ ] then
abort "This case should never happen."
# Return early if we only have one element
# Returns early if we only have one element
# This also makes it work for functions, because the foldl' below would try
# to compare the first element with itself, which is false for functions
else if length defs == 1 then
+1 -1
View File
@@ -40,7 +40,7 @@ let
isValid
;
# Return the reason why a subpath is invalid, or `null` if it's valid
# Returns the reason why a subpath is invalid, or `null` if it's valid
subpathInvalidReason =
value:
if !isString value then
+4 -4
View File
@@ -1806,7 +1806,7 @@ rec {
if len == 0 then [ (addContextFrom str "") ] else map (addContextFrom str) (go 0 "" [ ]);
/**
Return a string without the specified prefix, if the prefix matches.
Returns a string without the specified prefix, if the prefix matches.
# Inputs
@@ -1857,7 +1857,7 @@ rec {
);
/**
Return a string without the specified suffix, if the suffix matches.
Returns a string without the specified suffix, if the suffix matches.
# Inputs
@@ -1908,7 +1908,7 @@ rec {
);
/**
Return true if string `v1` denotes a version older than `v2`.
Returns true if string `v1` denotes a version older than `v2`.
# Inputs
@@ -1940,7 +1940,7 @@ rec {
versionOlder = v1: v2: compareVersions v2 v1 == 1;
/**
Return true if string v1 denotes a version equal to or newer than v2.
Returns true if string v1 denotes a version equal to or newer than v2.
# Inputs
+3 -3
View File
@@ -327,7 +327,7 @@ in
f b a;
/**
Return `maybeValue` if not null, otherwise return `default`.
Returns `maybeValue` if not null, otherwise return `default`.
# Inputs
@@ -529,7 +529,7 @@ in
## Integer operations
/**
Return minimum of two numbers.
Returns minimum of two numbers.
# Inputs
@@ -544,7 +544,7 @@ in
min = x: y: if x < y then x else y;
/**
Return maximum of two numbers.
Returns maximum of two numbers.
# Inputs
+1 -1
View File
@@ -289,7 +289,7 @@ let
# `optionType`: The option type to parenthesize or not.
# The option whose description we're returning.
#
# Return value
# Returns value
#
# The description of the `optionType`, with parentheses if there may be an
# ambiguity.
+11 -16
View File
@@ -1738,7 +1738,7 @@
};
annaaurora = {
email = "anna@annaaurora.eu";
matrix = "@papojari:artemislena.eu";
matrix = "@anna:annaaurora.eu";
github = "auroraanna";
githubId = 81317317;
name = "Anna Aurora";
@@ -8051,13 +8051,6 @@
githubId = 6803717;
name = "Ilya Elenskiy";
};
evils = {
email = "evils.devils@protonmail.com";
matrix = "@evils:nixos.dev";
github = "evils";
githubId = 30512529;
name = "Evils";
};
evris99 = {
name = "Evrymachos Koukoumakas";
github = "evris99";
@@ -10347,6 +10340,11 @@
github = "higebu";
githubId = 733288;
};
higherorderlogic = {
name = "Hol";
github = "HigherOrderLogic";
githubId = 73709188;
};
hirenashah = {
email = "hiren@hiren.io";
github = "hirenashah";
@@ -14160,14 +14158,6 @@
keys = [ { fingerprint = "5A9A 1C9B 2369 8049 3B48 CF5B 81A1 5409 4816 2372"; } ];
};
l-as = {
email = "las@protonmail.ch";
matrix = "@Las:matrix.org";
github = "L-as";
githubId = 22075344;
keys = [ { fingerprint = "A093 EA17 F450 D4D1 60A0 1194 AC45 8A7D 1087 D025"; } ];
name = "Las Safin";
};
l0b0 = {
email = "victor@engmark.name";
github = "l0b0";
@@ -21661,6 +21651,11 @@
githubId = 77415970;
name = "Redhawk";
};
redianthus = {
github = "redianthus";
githubId = 16472988;
name = "redianthus";
};
redlonghead = {
email = "git@beardit.net";
github = "Redlonghead";
@@ -224,6 +224,8 @@
- The `services.mysql` module now restarts the database `on-abnormal`, which means that it now will be restarted in certain situations, it wasn't before. For example an OOM-kill.
- The `services.tt-rss` module and package have been removed as upstream development ceased on 2025-11-01, and the source is no longer available officially.
- The `services.siproxd` module has been removed as `siproxd` is unmaintained and broken with libosip 5.x.
- `services.tor.torsocks.enable` no longer defaults to true if Tor and Tor client functionality is enabled.
+1 -1
View File
@@ -96,7 +96,7 @@ with lib;
# Create the initrd
system.build.netbootRamdisk = pkgs.makeInitrdNG {
inherit (config.boot.initrd) compressor;
inherit (config.boot.initrd) compressor compressorArgs;
prepend = [ "${config.system.build.initialRamdisk}/initrd" ];
contents = [
-1
View File
@@ -1705,7 +1705,6 @@
./services/web-apps/suwayomi-server.nix
./services/web-apps/szurubooru.nix
./services/web-apps/trilium.nix
./services/web-apps/tt-rss.nix
./services/web-apps/umami.nix
./services/web-apps/vikunja.nix
./services/web-apps/wakapi.nix
@@ -32,7 +32,7 @@ in
owner = "root";
group = "root";
capabilities = "cap_sys_admin+ep";
source = "${package}/bin/gsr-kms-server";
source = lib.getExe' package "gsr-kms-server";
};
};
+3
View File
@@ -266,6 +266,9 @@ in
(mkRemovedOptionModule [ "services" "sourcehut" ] ''
The sourcehut packages and the corresponding module have been removed due to being broken and unmaintained.
'')
(mkRemovedOptionModule [ "services" "tt-rss" ] ''
The tt-rss package and module have been removed, since upstream development ceased 2025-11-01 and the source is no longer available officially.
'')
(mkRemovedOptionModule [ "services" "tvheadend" ]
"The tvheadend package and the corresponding module have been removed as nobody was willing to maintain them and they were stuck on an unmaintained version that required FFmpeg 4; please see https://github.com/NixOS/nixpkgs/pull/332259 if you are interested in maintaining a newer version."
)
@@ -22,6 +22,8 @@ in
package = lib.mkPackageOption pkgs "linyaps" { };
boxPackage = lib.mkPackageOption pkgs "linyaps-box" { };
webStoreInstallerPackage = lib.mkPackageOption pkgs "linyaps-web-store-installer" { };
};
};
@@ -33,6 +35,7 @@ in
systemPackages = [
cfg.package
cfg.boxPackage
cfg.webStoreInstallerPackage
];
};
@@ -52,6 +52,4 @@ in
'';
};
meta.maintainers = [ lib.maintainers.evils ];
}
@@ -176,7 +176,4 @@ in
};
};
};
meta.maintainers = [ lib.maintainers.evils ];
}
@@ -89,7 +89,4 @@ in
};
};
};
meta.maintainers = [ lib.maintainers.evils ];
}
@@ -58,6 +58,4 @@ in
};
};
};
meta.maintainers = [ lib.maintainers.evils ];
}
+3 -1
View File
@@ -232,10 +232,12 @@ in
AmbientCapabilities = "";
CapabilityBoundingSet = "";
LockPersonality = true;
MountAPIVFS = true;
NoNewPrivileges = true;
PrivateDevices = true;
PrivateMounts = true;
PrivateTmp = true;
PrivateUsers = true;
ProtectClock = true;
ProtectControlGroups = "strict";
ProtectHome = true;
@@ -243,7 +245,7 @@ in
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "noaccess";
ProtectProc = "invisible";
ProtectSystem = "full";
RestrictAddressFamilies = [
"AF_UNIX"
+44 -2
View File
@@ -10,6 +10,10 @@ let
isPostgresUnixSocket = lib.hasPrefix "/" cfg.database.host;
isRedisUnixSocket = lib.hasPrefix "/" cfg.redis.host;
# convert a Nix attribute path to jq object identifier-index:
# https://jqlang.org/manual/#object-identifier-index
attrPathToIndex = attrPath: "." + lib.concatStringsSep "." attrPath;
commonServiceConfig = {
Type = "simple";
Restart = "on-failure";
@@ -147,6 +151,27 @@ in
);
};
secretSettings = mkOption {
default = { };
description = ''
Secrets to to be added to the JSON file generated from {option}`settings`, read from files.
'';
example = lib.literalExpression ''
{
notifications.smtp.transport.password = "/path/to/secret";
oauth.clientSecret = "/path/to/other/secret";
}
'';
type =
let
inherit (types) attrsOf either path;
recursiveType = either (attrsOf recursiveType) path // {
description = "nested " + (attrsOf path).description;
};
in
recursiveType;
};
machine-learning = {
enable =
mkEnableOption "immich's machine-learning functionality to detect faces and search for objects"
@@ -352,8 +377,8 @@ in
IMMICH_MEDIA_LOCATION = cfg.mediaLocation;
IMMICH_MACHINE_LEARNING_URL = "http://localhost:3003";
}
// lib.optionalAttrs (cfg.settings != null) {
IMMICH_CONFIG_FILE = "${format.generate "immich.json" cfg.settings}";
// lib.optionalAttrs (cfg.settings != null || cfg.settingsFile != null) {
IMMICH_CONFIG_FILE = "/run/immich/config.json";
};
services.immich.machine-learning.environment = {
@@ -382,7 +407,24 @@ in
postgresqlPackage
];
preStart = mkIf (cfg.settings != null) (
''
cat '${format.generate "immich-config.json" cfg.settings}' > /run/immich/config.json
''
+ lib.concatStrings (
lib.mapAttrsToListRecursive (attrPath: _: ''
tmp="$(mktemp)"
${lib.getExe pkgs.jq} --rawfile secret "$CREDENTIALS_DIRECTORY/${attrPathToIndex attrPath}" \
'${attrPathToIndex attrPath} = $secret' /run/immich/config.json > "$tmp"
mv "$tmp" /run/immich/config.json
'') cfg.secretSettings
)
);
serviceConfig = commonServiceConfig // {
LoadCredential = lib.mapAttrsToListRecursive (
attrPath: file: "${attrPathToIndex attrPath}:${file}"
) cfg.secretSettings;
ExecStart = lib.getExe cfg.package;
EnvironmentFile = mkIf (cfg.secretsFile != null) cfg.secretsFile;
Slice = "system-immich.slice";
-712
View File
@@ -1,712 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.services.tt-rss;
inherit (cfg) phpPackage;
configVersion = 26;
dbPort =
if cfg.database.port == null then
(if cfg.database.type == "pgsql" then 5432 else 3306)
else
cfg.database.port;
poolName = "tt-rss";
mysqlLocal = cfg.database.createLocally && cfg.database.type == "mysql";
pgsqlLocal = cfg.database.createLocally && cfg.database.type == "pgsql";
tt-rss-config =
let
password =
if (cfg.database.password != null) then
"'${(escape [ "'" "\\" ] cfg.database.password)}'"
else if (cfg.database.passwordFile != null) then
"file_get_contents('${cfg.database.passwordFile}')"
else
null;
in
pkgs.writeText "config.php" ''
<?php
putenv('TTRSS_PHP_EXECUTABLE=${phpPackage}/bin/php');
putenv('TTRSS_LOCK_DIRECTORY=${cfg.root}/lock');
putenv('TTRSS_CACHE_DIR=${cfg.root}/cache');
putenv('TTRSS_ICONS_DIR=${cfg.root}/feed-icons');
putenv('TTRSS_ICONS_URL=feed-icons');
putenv('TTRSS_SELF_URL_PATH=${cfg.selfUrlPath}');
putenv('TTRSS_MYSQL_CHARSET=UTF8');
putenv('TTRSS_DB_TYPE=${cfg.database.type}');
putenv('TTRSS_DB_HOST=${optionalString (cfg.database.host != null) cfg.database.host}');
putenv('TTRSS_DB_USER=${cfg.database.user}');
putenv('TTRSS_DB_NAME=${cfg.database.name}');
putenv('TTRSS_DB_PASS=' ${optionalString (password != null) ". ${password}"});
putenv('TTRSS_DB_PORT=${toString dbPort}');
putenv('TTRSS_AUTH_AUTO_CREATE=${boolToString cfg.auth.autoCreate}');
putenv('TTRSS_AUTH_AUTO_LOGIN=${boolToString cfg.auth.autoLogin}');
putenv('TTRSS_FEED_CRYPT_KEY=${escape [ "'" "\\" ] cfg.feedCryptKey}');
putenv('TTRSS_SINGLE_USER_MODE=${boolToString cfg.singleUserMode}');
putenv('TTRSS_SIMPLE_UPDATE_MODE=${boolToString cfg.simpleUpdateMode}');
# Never check for updates - the running version of the code should
# be controlled entirely by the version of TT-RSS active in the
# current Nix profile. If TT-RSS updates itself to a version
# requiring a database schema upgrade, and then the SystemD
# tt-rss.service is restarted, the old code copied from the Nix
# store will overwrite the updated version, causing the code to
# detect the need for a schema "upgrade" (since the schema version
# in the database is different than in the code), but the update
# schema operation in TT-RSS will do nothing because the schema
# version in the database is newer than that in the code.
putenv('TTRSS_CHECK_FOR_UPDATES=false');
putenv('TTRSS_FORCE_ARTICLE_PURGE=${toString cfg.forceArticlePurge}');
putenv('TTRSS_SESSION_COOKIE_LIFETIME=${toString cfg.sessionCookieLifetime}');
putenv('TTRSS_ENABLE_GZIP_OUTPUT=${boolToString cfg.enableGZipOutput}');
putenv('TTRSS_PLUGINS=${builtins.concatStringsSep "," cfg.plugins}');
putenv('TTRSS_LOG_DESTINATION=${cfg.logDestination}');
putenv('TTRSS_CONFIG_VERSION=${toString configVersion}');
putenv('TTRSS_PUBSUBHUBBUB_ENABLED=${boolToString cfg.pubSubHubbub.enable}');
putenv('TTRSS_PUBSUBHUBBUB_HUB=${cfg.pubSubHubbub.hub}');
putenv('TTRSS_SPHINX_SERVER=${cfg.sphinx.server}');
putenv('TTRSS_SPHINX_INDEX=${builtins.concatStringsSep "," cfg.sphinx.index}');
putenv('TTRSS_ENABLE_REGISTRATION=${boolToString cfg.registration.enable}');
putenv('TTRSS_REG_NOTIFY_ADDRESS=${cfg.registration.notifyAddress}');
putenv('TTRSS_REG_MAX_USERS=${toString cfg.registration.maxUsers}');
putenv('TTRSS_SMTP_SERVER=${cfg.email.server}');
putenv('TTRSS_SMTP_LOGIN=${cfg.email.login}');
putenv('TTRSS_SMTP_PASSWORD=${escape [ "'" "\\" ] cfg.email.password}');
putenv('TTRSS_SMTP_SECURE=${cfg.email.security}');
putenv('TTRSS_SMTP_FROM_NAME=${escape [ "'" "\\" ] cfg.email.fromName}');
putenv('TTRSS_SMTP_FROM_ADDRESS=${escape [ "'" "\\" ] cfg.email.fromAddress}');
putenv('TTRSS_DIGEST_SUBJECT=${escape [ "'" "\\" ] cfg.email.digestSubject}');
${cfg.extraConfig}
'';
# tt-rss and plugins and themes and config.php
servedRoot = pkgs.runCommand "tt-rss-served-root" { } ''
cp --no-preserve=mode -r ${pkgs.tt-rss} $out
cp ${tt-rss-config} $out/config.php
${optionalString (cfg.pluginPackages != [ ]) ''
for plugin in ${concatStringsSep " " cfg.pluginPackages}; do
cp -r "$plugin"/* "$out/plugins.local/"
done
''}
${optionalString (cfg.themePackages != [ ]) ''
for theme in ${concatStringsSep " " cfg.themePackages}; do
cp -r "$theme"/* "$out/themes.local/"
done
''}
'';
in
{
###### interface
options = {
services.tt-rss = {
enable = mkEnableOption "tt-rss";
root = mkOption {
type = types.path;
default = "/var/lib/tt-rss";
description = ''
Root of the application.
'';
};
user = mkOption {
type = types.str;
default = "tt_rss";
description = ''
User account under which both the update daemon and the web-application run.
'';
};
pool = mkOption {
type = types.str;
default = "${poolName}";
description = ''
Name of existing phpfpm pool that is used to run web-application.
If not specified a pool will be created automatically with
default values.
'';
};
virtualHost = mkOption {
type = types.nullOr types.str;
default = "tt-rss";
description = ''
Name of the nginx virtualhost to use and setup. If null, do not setup any virtualhost.
'';
};
database = {
type = mkOption {
type = types.enum [
"pgsql"
"mysql"
];
default = "pgsql";
description = ''
Database to store feeds. Supported are pgsql and mysql.
'';
};
host = mkOption {
type = types.nullOr types.str;
default = null;
description = ''
Host of the database. Leave null to use Unix domain socket.
'';
};
name = mkOption {
type = types.str;
default = "tt_rss";
description = ''
Name of the existing database.
'';
};
user = mkOption {
type = types.str;
default = "tt_rss";
description = ''
The database user. The user must exist and has access to
the specified database.
'';
};
password = mkOption {
type = types.nullOr types.str;
default = null;
description = ''
The database user's password.
'';
};
passwordFile = mkOption {
type = types.nullOr types.str;
default = null;
description = ''
The database user's password.
'';
};
port = mkOption {
type = types.nullOr types.port;
default = null;
description = ''
The database's port. If not set, the default ports will be provided (5432
and 3306 for pgsql and mysql respectively).
'';
};
createLocally = mkOption {
type = types.bool;
default = true;
description = "Create the database and database user locally.";
};
};
auth = {
autoCreate = mkOption {
type = types.bool;
default = true;
description = ''
Allow authentication modules to auto-create users in tt-rss internal
database when authenticated successfully.
'';
};
autoLogin = mkOption {
type = types.bool;
default = true;
description = ''
Automatically login user on remote or other kind of externally supplied
authentication, otherwise redirect to login form as normal.
If set to true, users won't be able to set application language
and settings profile.
'';
};
};
pubSubHubbub = {
hub = mkOption {
type = types.str;
default = "";
description = ''
URL to a PubSubHubbub-compatible hub server. If defined, "Published
articles" generated feed would automatically become PUSH-enabled.
'';
};
enable = mkOption {
type = types.bool;
default = false;
description = ''
Enable client PubSubHubbub support in tt-rss. When disabled, tt-rss
won't try to subscribe to PUSH feed updates.
'';
};
};
sphinx = {
server = mkOption {
type = types.str;
default = "localhost:9312";
description = ''
Hostname:port combination for the Sphinx server.
'';
};
index = mkOption {
type = types.listOf types.str;
default = [
"ttrss"
"delta"
];
description = ''
Index names in Sphinx configuration. Example configuration
files are available on tt-rss wiki.
'';
};
};
registration = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Allow users to register themselves. Please be aware that allowing
random people to access your tt-rss installation is a security risk
and potentially might lead to data loss or server exploit. Disabled
by default.
'';
};
notifyAddress = mkOption {
type = types.str;
default = "";
description = ''
Email address to send new user notifications to.
'';
};
maxUsers = mkOption {
type = types.int;
default = 0;
description = ''
Maximum amount of users which will be allowed to register on this
system. 0 - no limit.
'';
};
};
email = {
server = mkOption {
type = types.str;
default = "";
example = "localhost:25";
description = ''
Hostname:port combination to send outgoing mail. Blank - use system
MTA.
'';
};
login = mkOption {
type = types.str;
default = "";
description = ''
SMTP authentication login used when sending outgoing mail.
'';
};
password = mkOption {
type = types.str;
default = "";
description = ''
SMTP authentication password used when sending outgoing mail.
'';
};
security = mkOption {
type = types.enum [
""
"ssl"
"tls"
];
default = "";
description = ''
Used to select a secure SMTP connection. Allowed values: ssl, tls,
or empty.
'';
};
fromName = mkOption {
type = types.str;
default = "Tiny Tiny RSS";
description = ''
Name for sending outgoing mail. This applies to password reset
notifications, digest emails and any other mail.
'';
};
fromAddress = mkOption {
type = types.str;
default = "";
description = ''
Address for sending outgoing mail. This applies to password reset
notifications, digest emails and any other mail.
'';
};
digestSubject = mkOption {
type = types.str;
default = "[tt-rss] New headlines for last 24 hours";
description = ''
Subject line for email digests.
'';
};
};
sessionCookieLifetime = mkOption {
type = types.int;
default = 86400;
description = ''
Default lifetime of a session (e.g. login) cookie. In seconds,
0 means cookie will be deleted when browser closes.
'';
};
selfUrlPath = mkOption {
type = types.str;
description = ''
Full URL of your tt-rss installation. This should be set to the
location of tt-rss directory, e.g. http://example.org/tt-rss/
You need to set this option correctly otherwise several features
including PUSH, bookmarklets and browser integration will not work properly.
'';
example = "http://localhost";
};
feedCryptKey = mkOption {
type = types.str;
default = "";
description = ''
Key used for encryption of passwords for password-protected feeds
in the database. A string of 24 random characters. If left blank, encryption
is not used. Requires mcrypt functions.
Warning: changing this key will make your stored feed passwords impossible
to decrypt.
'';
};
singleUserMode = mkOption {
type = types.bool;
default = false;
description = ''
Operate in single user mode, disables all functionality related to
multiple users and authentication. Enabling this assumes you have
your tt-rss directory protected by other means (e.g. http auth).
'';
};
simpleUpdateMode = mkOption {
type = types.bool;
default = false;
description = ''
Enables fallback update mode where tt-rss tries to update feeds in
background while tt-rss is open in your browser.
If you don't have a lot of feeds and don't want to or can't run
background processes while not running tt-rss, this method is generally
viable to keep your feeds up to date.
Still, there are more robust (and recommended) updating methods
available, you can read about them here: <https://tt-rss.org/wiki/UpdatingFeeds>
'';
};
forceArticlePurge = mkOption {
type = types.int;
default = 0;
description = ''
When this option is not 0, users ability to control feed purging
intervals is disabled and all articles (which are not starred)
older than this amount of days are purged.
'';
};
enableGZipOutput = mkOption {
type = types.bool;
default = true;
description = ''
Selectively gzip output to improve wire performance. This requires
PHP Zlib extension on the server.
Enabling this can break tt-rss in several httpd/php configurations,
if you experience weird errors and tt-rss failing to start, blank pages
after login, or content encoding errors, disable it.
'';
};
phpPackage = lib.mkOption {
type = lib.types.package;
default = pkgs.php;
defaultText = "pkgs.php";
description = ''
php package to use for php fpm and update daemon.
'';
};
plugins = mkOption {
type = types.listOf types.str;
default = [
"auth_internal"
"note"
];
description = ''
List of plugins to load automatically for all users.
System plugins have to be specified here. Please enable at least one
authentication plugin here (auth_*).
Users may enable other user plugins from Preferences/Plugins but may not
disable plugins specified in this list.
Disabling auth_internal in this list would automatically disable
reset password link on the login form.
'';
};
pluginPackages = mkOption {
type = types.listOf types.package;
default = [ ];
description = ''
List of plugins to install. The list elements are expected to
be derivations. All elements in this derivation are automatically
copied to the `plugins.local` directory.
'';
};
themePackages = mkOption {
type = types.listOf types.package;
default = [ ];
description = ''
List of themes to install. The list elements are expected to
be derivations. All elements in this derivation are automatically
copied to the `themes.local` directory.
'';
};
logDestination = mkOption {
type = types.enum [
""
"sql"
"syslog"
];
default = "sql";
description = ''
Log destination to use. Possible values: sql (uses internal logging
you can read in Preferences -> System), syslog - logs to system log.
Setting this to blank uses PHP logging (usually to http server
error.log).
'';
};
updateDaemon = {
commandFlags = mkOption {
type = types.str;
default = "--quiet";
description = ''
Command-line flags passed to the update daemon.
The default --quiet flag mutes all logging, including errors.
'';
};
};
extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
Additional lines to append to `config.php`.
'';
};
};
};
imports = [
(mkRemovedOptionModule [ "services" "tt-rss" "checkForUpdates" ] ''
This option was removed because setting this to true will cause TT-RSS
to be unable to start if an automatic update of the code in
services.tt-rss.root leads to a database schema upgrade that is not
supported by the code active in the Nix store.
'')
];
###### implementation
config = mkIf cfg.enable {
assertions = [
{
assertion = cfg.database.password != null -> cfg.database.passwordFile == null;
message = "Cannot set both password and passwordFile";
}
{
assertion =
cfg.database.createLocally -> cfg.database.name == cfg.user && cfg.database.user == cfg.user;
message = ''
When creating a database via NixOS, the db user and db name must be equal!
If you already have an existing DB+user and this assertion is new, you can safely set
`services.tt-rss.database.createLocally` to `false` because removal of `ensureUsers`
and `ensureDatabases` doesn't have any effect.
'';
}
];
services.phpfpm.pools = mkIf (cfg.pool == "${poolName}") {
${poolName} = {
inherit (cfg) user;
inherit phpPackage;
settings = mapAttrs (name: mkDefault) {
"listen.owner" = "nginx";
"listen.group" = "nginx";
"listen.mode" = "0600";
"pm" = "dynamic";
"pm.max_children" = 75;
"pm.start_servers" = 10;
"pm.min_spare_servers" = 5;
"pm.max_spare_servers" = 20;
"pm.max_requests" = 500;
"catch_workers_output" = 1;
};
};
};
# NOTE: No configuration is done if not using virtual host
services.nginx = mkIf (cfg.virtualHost != null) {
enable = true;
virtualHosts = {
${cfg.virtualHost} = {
root = "${cfg.root}/www";
locations."/" = {
index = "index.php";
};
locations."^~ /feed-icons" = {
root = "${cfg.root}";
};
locations."~ \\.php$" = {
extraConfig = ''
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:${config.services.phpfpm.pools.${cfg.pool}.socket};
fastcgi_index index.php;
'';
};
};
};
};
systemd.tmpfiles.rules = [
"d '${cfg.root}' 0555 ${cfg.user} tt_rss - -"
"d '${cfg.root}/lock' 0755 ${cfg.user} tt_rss - -"
"d '${cfg.root}/cache' 0755 ${cfg.user} tt_rss - -"
"d '${cfg.root}/cache/upload' 0755 ${cfg.user} tt_rss - -"
"d '${cfg.root}/cache/images' 0755 ${cfg.user} tt_rss - -"
"d '${cfg.root}/cache/export' 0755 ${cfg.user} tt_rss - -"
"d '${cfg.root}/feed-icons' 0755 ${cfg.user} tt_rss - -"
"L+ '${cfg.root}/www' - - - - ${servedRoot}"
];
systemd.services = {
phpfpm-tt-rss = mkIf (cfg.pool == "${poolName}") {
restartTriggers = [ servedRoot ];
};
tt-rss = {
description = "Tiny Tiny RSS feeds update daemon";
preStart = ''
${phpPackage}/bin/php ${cfg.root}/www/update.php --update-schema --force-yes
'';
serviceConfig = {
User = "${cfg.user}";
Group = "tt_rss";
ExecStart = "${phpPackage}/bin/php ${cfg.root}/www/update.php --daemon ${cfg.updateDaemon.commandFlags}";
Restart = "on-failure";
RestartSec = "60";
SyslogIdentifier = "tt-rss";
};
wantedBy = [ "multi-user.target" ];
requires = optional mysqlLocal "mysql.service" ++ optional pgsqlLocal "postgresql.target";
after = [
"network.target"
]
++ optional mysqlLocal "mysql.service"
++ optional pgsqlLocal "postgresql.target";
};
};
services.mysql = mkIf mysqlLocal {
enable = true;
package = mkDefault pkgs.mariadb;
ensureDatabases = [ cfg.database.name ];
ensureUsers = [
{
name = cfg.user;
ensurePermissions = {
"${cfg.database.name}.*" = "ALL PRIVILEGES";
};
}
];
};
services.postgresql = mkIf pgsqlLocal {
enable = mkDefault true;
ensureDatabases = [ cfg.database.name ];
ensureUsers = [
{
name = cfg.database.user;
ensureDBOwnership = true;
}
];
};
users.users.tt_rss = optionalAttrs (cfg.user == "tt_rss") {
description = "tt-rss service user";
isSystemUser = true;
group = "tt_rss";
};
users.groups.tt_rss = { };
};
}
@@ -630,15 +630,15 @@ def install_bootloader() -> None:
if config('partitionIndex'):
limine_deploy_args.append(str(config('partitionIndex')))
if config('forceMbr'):
limine_deploy_args.append('--force-mbr')
if config('force'):
limine_deploy_args.append('--force')
try:
subprocess.run(limine_deploy_args)
except:
raise Exception(
'Failed to deploy BIOS stage 1 Limine bootloader!\n' +
'You might want to try enabling the `boot.loader.limine.forceMbr` option.')
'You might want to try enabling the `boot.loader.limine.force` option.')
print("removing unused boot files...")
for path in paths:
@@ -22,7 +22,7 @@ let
biosSupport = cfg.biosSupport;
biosDevice = cfg.biosDevice;
partitionIndex = cfg.partitionIndex;
forceMbr = cfg.forceMbr;
force = cfg.force;
enrollConfig = cfg.enrollConfig;
style = cfg.style;
maxGenerations = if cfg.maxGenerations == null then 0 else cfg.maxGenerations;
@@ -43,6 +43,13 @@ in
inherit (pkgs.limine.meta) maintainers;
};
imports = [
(lib.mkRenamedOptionModule
[ "boot" "loader" "limine" "forceMbr" ]
[ "boot" "loader" "limine" "force" ]
)
];
options.boot.loader.limine = {
enable = lib.mkEnableOption "the Limine Bootloader";
package = lib.mkPackageOption pkgs "limine" { };
@@ -169,9 +176,9 @@ in
'';
};
forceMbr = lib.mkEnableOption null // {
force = lib.mkEnableOption null // {
description = ''
Force MBR detection to work even if the safety checks fail, use absolutely only if necessary!
Force installation even if the safety checks fail, use absolutely only if necessary!
'';
};
-1
View File
@@ -1531,7 +1531,6 @@ in
trickster = runTest ./trickster.nix;
trilium-server = runTestOn [ "x86_64-linux" ] ./trilium-server.nix;
tsm-client-gui = runTest ./tsm-client-gui.nix;
tt-rss = runTest ./web-apps/tt-rss.nix;
ttyd = runTest ./web-servers/ttyd.nix;
tuned = runTest ./tuned.nix;
tuptime = runTest ./tuptime.nix;
+3 -3
View File
@@ -1,8 +1,8 @@
{ pkgs, ... }:
{ ... }:
{
name = "fancontrol";
meta = with pkgs.lib.maintainers; {
maintainers = [ evils ];
meta = {
maintainers = [ ];
};
nodes.machine =
-8
View File
@@ -118,14 +118,6 @@ let
in
with pkgs;
{
kafka_3_7 = makeKafkaTest "kafka_3_7" {
kafkaPackage = apacheKafka_3_7;
mode = "zookeeper";
};
kafka_3_8 = makeKafkaTest "kafka_3_8" {
kafkaPackage = apacheKafka_3_8;
mode = "zookeeper";
};
kafka_3_9 = makeKafkaTest "kafka_3_9" {
kafkaPackage = apacheKafka_3_9;
mode = "zookeeper";
+10 -5
View File
@@ -5,9 +5,15 @@ let
customMuseScoreConfig = hostPkgs.writeText "MuseScore4.ini" ''
[application]
hasCompletedFirstLaunchSetup=true
welcomeDialogLastShownIndex=0
welcomeDialogLastShownVersion=${hostPkgs.musescore.version}
welcomeDialogShowOnStartup=false
[project]
preferredScoreCreationMode=1
[tours]
lastShownTours=",project_opened/input-by-duration"
'';
in
{
@@ -66,7 +72,7 @@ in
machine.sleep(2)
machine.send_key("tab")
machine.send_key("right")
# Type the beginning of https://de.wikipedia.org/wiki/Alle_meine_Entchen
machine.send_chars("cdef6gg5aaaa7g")
machine.sleep(1)
@@ -79,15 +85,14 @@ in
# Wait until the Print dialogue appears.
machine.wait_for_window("Print")
machine.screenshot("MuseScore4")
machine.screenshot("MuseScore3")
machine.send_key("alt-p")
machine.sleep(1)
machine.screenshot("MuseScore5")
# Wait until PDF is exported
machine.wait_for_file('"/root/Untitled score.pdf"')
machine.screenshot("MuseScore4")
## Check that it contains the title of the score
machine.succeed('pdfgrep "Untitled score" "/root/Untitled score.pdf"')
machine.copy_from_vm("/root/Untitled score.pdf")
+3 -3
View File
@@ -1,8 +1,8 @@
{ pkgs, ... }:
{ ... }:
{
name = "rasdaemon";
meta = with pkgs.lib.maintainers; {
maintainers = [ evils ];
meta = {
maintainers = [ ];
};
nodes.machine =
+3 -3
View File
@@ -1,8 +1,8 @@
{ pkgs, ... }:
{ ... }:
{
name = "tuptime";
meta = with pkgs.lib.maintainers; {
maintainers = [ evils ];
meta = {
maintainers = [ ];
};
nodes.machine =
+11
View File
@@ -17,6 +17,15 @@
services.immich = {
enable = true;
environment.IMMICH_LOG_LEVEL = "verbose";
settings.backup.database = {
enabled = true;
cronExpression = "invalid";
};
secretSettings = {
backup.database.cronExpression = "${pkgs.writeText "cron" "0 02 * * *"}";
# thanks to LoadCredential files only readable by root should work
notifications.smtp.transport.password = "/etc/shadow";
};
};
};
@@ -25,6 +34,8 @@
machine.wait_for_unit("immich-server.service")
machine.succeed("stat -L -c '%a %U %G' /run/immich/config.json | grep '600 immich immich'")
machine.wait_for_open_port(2283) # Server
machine.wait_for_open_port(3003) # Machine learning
machine.succeed("curl --fail http://localhost:2283/")
-45
View File
@@ -1,45 +0,0 @@
{ ... }:
{
name = "tt-rss-nixos";
nodes.machine =
{ pkgs, ... }:
{
services.tt-rss = {
enable = true;
virtualHost = "localhost";
selfUrlPath = "http://localhost/";
pluginPackages = with pkgs; [
tt-rss-plugin-auth-ldap
tt-rss-plugin-feediron
];
plugins = [
"auth_internal"
"feediron"
"note"
];
singleUserMode = true;
themePackages = with pkgs; [ tt-rss-theme-feedly ];
};
};
testScript = ''
import json
import re
machine.wait_for_unit("tt-rss.service")
matches = re.search('__csrf_token = "([^"]*)"', machine.succeed("curl -sSfL --cookie cjar --cookie-jar cjar -sSfL http://localhost/"))
if matches is None:
assert False, "CSRF token not found"
csrf_token = matches.group(1)
# Ensure themes are loaded. No API found for these, so it's a crude check.
preference_page = machine.succeed("curl -sSfL --cookie cjar --cookie-jar cjar http://localhost/backend.php?op=Pref_Prefs")
assert "feedly" in preference_page
plugins = json.loads(machine.succeed(f"curl -sSfL --cookie cjar --cookie-jar cjar 'http://localhost/backend.php' -X POST --data-raw 'op=Pref_Prefs&method=getPluginsList&csrf_token={csrf_token}'"))["plugins"]
expected_plugins = ["auth_internal", "auth_ldap", "feediron", "note"];
found_plugins = [p["name"] for p in plugins if p["name"] in expected_plugins]
assert len(found_plugins) == len(expected_plugins), f"Expected plugins {expected_plugins}, found {found_plugins}"
'';
}
@@ -69,6 +69,6 @@ stdenv.mkDerivation rec {
homepage = "https://github.com/zevv/bucklespring";
license = licenses.gpl2Only;
platforms = platforms.unix;
maintainers = [ maintainers.evils ];
maintainers = [ ];
};
}
@@ -47,6 +47,11 @@ let
sourceRoot = "${src.name}/src/ucd-tools";
# fix compatibility with CMake (https://cmake.org/cmake/help/v4.0/policy/CMP0000.html)
postPatch = ''
echo 'cmake_minimum_required(VERSION 4.0)' >> CMakeLists.txt
'';
nativeBuildInputs = [ cmake ];
installPhase = ''
@@ -36,13 +36,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "musescore";
version = "4.5.2-unstable-2025-07-03";
version = "4.6.0";
src = fetchFromGitHub {
owner = "musescore";
repo = "MuseScore";
rev = "0ff2476af4e16286ee9f7cf2322715273a0117e0";
sha256 = "sha256-0ixQfAyAyRmuIrlPosCV/VucKJYYvxjL2o4pkVb5Sd8=";
rev = "v${finalAttrs.version}";
sha256 = "sha256-+Kmx+jMbBaIzXdulj5tsusF0x9b6tZ6jOTjI+sLP1jU=";
};
cmakeFlags = [
@@ -3781,6 +3781,19 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
cybu-nvim = buildVimPlugin {
pname = "cybu.nvim";
version = "2025-07-24";
src = fetchFromGitHub {
owner = "ghillb";
repo = "cybu.nvim";
rev = "c8a8c71cd0e38d4165b02819dfdc32dedc35a6b6";
sha256 = "0bxgil5vb6lpq420xw404qbxd92by6qjxilba36h9dd87js97by1";
};
meta.homepage = "https://github.com/ghillb/cybu.nvim/";
meta.hydraPlatforms = [ ];
};
dailies-nvim = buildVimPlugin {
pname = "dailies.nvim";
version = "2025-04-21";
@@ -12,12 +12,12 @@
pkgs,
}:
let
version = "0.0.27-unstable-2025-09-18";
version = "0.0.27-unstable-2025-10-06";
src = fetchFromGitHub {
owner = "yetone";
repo = "avante.nvim";
rev = "44db8eba870f6c123da5efa70384b2889f3e3495";
hash = "sha256-x2lb7k/qfERXYMdM+Upf6kmsYS3Qp9iz2KEvzvgb8P4=";
rev = "a7052aca0bdfb93e524f0536ac80e6c542962f47";
hash = "sha256-crtzBzRcpuqQdqymUJMAxky1Lfk+6YY0YifThHXz7Rw=";
};
avante-nvim-lib = rustPlatform.buildRustPackage {
pname = "avante-nvim-lib";
@@ -6,13 +6,13 @@
}:
vimUtils.buildVimPlugin rec {
pname = "rainbow-delimiters.nvim";
version = "0.9.1";
version = "0.10.0";
src = fetchFromGitLab {
owner = "HiPhish";
repo = "rainbow-delimiters.nvim";
tag = "v${version}";
hash = "sha256-FGM9QWpveaICACDEVc6jpJNAfJ93gFxz0VHxCrzDaYs=";
hash = "sha256-E0ZPi9Vzc3TwhNHsGyABY+sgn/vO6Oyun6eRd7/RFgU=";
};
nvimSkipModules = [
@@ -6,13 +6,13 @@
}:
vimUtils.buildVimPlugin {
pname = "sonarlint.nvim";
version = "0-unstable-2025-09-18";
version = "0-unstable-2025-10-04";
src = fetchFromGitLab {
owner = "schrieveslaach";
repo = "sonarlint.nvim";
rev = "dc5702556f90eedce587233f3c1a0ae671ea3648";
hash = "sha256-IBXQ9ijAG8TdnwkSTNbBtzziQC5bbCbkAmC8gM7G5E4=";
rev = "1d49a469265e271f02b6efcf09c215e4560bd5fa";
hash = "sha256-1eUwgHvegULo33xVjvV3b90fSlJ8Ax10iDCZE4IPo58=";
};
passthru.updateScript = nix-update-script {
@@ -289,6 +289,7 @@ https://github.com/amiorin/ctrlp-z/,,
https://github.com/ctrlpvim/ctrlp.vim/,,
https://github.com/gbprod/cutlass.nvim/,HEAD,
https://github.com/scottmckendry/cyberdream.nvim/,,
https://github.com/ghillb/cybu.nvim/,,
https://github.com/JachymPutta/dailies.nvim/,HEAD,
https://github.com/Koalhack/darcubox-nvim/,HEAD,
https://github.com/ptdewey/darkearth-nvim/,HEAD,
+8 -8
View File
@@ -36,20 +36,20 @@ let
hash =
{
x86_64-linux = "sha256-0zgsR0nk9zsOeEcKhrmAFbAhvKKFNsC8fXjCnxFcndE=";
x86_64-darwin = "sha256-4+3T3axXNfePEkevhLwRPeqoxKs2OTL7B7TiV2BxZWc=";
aarch64-linux = "sha256-iGLtuVFA5NphiF1PU9Pus/nZ8PyCNNzDOpcQ+utYE2I=";
aarch64-darwin = "sha256-E4BopxbqH1lg1Q2NlyWjH8jytabiv5y4hG5ZJW4nqzs=";
armv7l-linux = "sha256-YIidKSsqK3DSAfPd7O1pbft1C/ny/iB+CFbR/T9u7L8=";
x86_64-linux = "sha256-S9H1IZGV3BZe2kjSdkt8S+ShE1EQA0yiKEl65tNNtJw=";
x86_64-darwin = "sha256-Wi21LByNSjaTKdpJJM9d/5yspaoplJ1pDxGBMxAxLT0=";
aarch64-linux = "sha256-m1AkCRiVJbUPArvK/QyG+Y/7qCLHY20vv40suFXK1fk=";
aarch64-darwin = "sha256-iwUegTexE0Iroh+VN9/cQ/s1f2SjLSePjIJanjMDzHU=";
armv7l-linux = "sha256-06LY6PrWg1VBjUjoLNIrbuKu9YzJS4MM38wlx8JQdvw=";
}
.${system} or throwSystem;
# Please backport all compatible updates to the stable release.
# This is important for the extension ecosystem.
version = "1.104.2";
version = "1.104.3";
# This is used for VS Code - Remote SSH test
rev = "e3a5acfb517a443235981655413d566533107e92";
rev = "385651c938df8a906869babee516bffd0ddb9829";
in
callPackage ./generic.nix {
pname = "vscode" + lib.optionalString isInsiders "-insiders";
@@ -82,7 +82,7 @@ callPackage ./generic.nix {
src = fetchurl {
name = "vscode-server-${rev}.tar.gz";
url = "https://update.code.visualstudio.com/commit:${rev}/server-linux-x64/stable";
hash = "sha256-Tz1P8eGokG+8thao9dRllAdTxvllhfOEDKH9lC2QwB0=";
hash = "sha256-0tGqGDMmLURqdQwqFWCO10d/RkVha8iC0Uv/JFp9nNQ=";
};
stdenv = stdenvNoCC;
};
@@ -26,11 +26,11 @@ let
hash =
{
x86_64-linux = "sha256-v6cGOKA4wewHfhVjXWXkQBmv56iSMCaxco2G9EQy1jI=";
x86_64-darwin = "sha256-WDqm2f88q55Yfff0R/0+FxzbR5QkIKKGNnj5+QQXbDw=";
aarch64-linux = "sha256-m9JIqloo0evYIPeXtGGX8mFXRnlZS2wegvo38uHT9SA=";
aarch64-darwin = "sha256-obvl+uV+vaGioPUf3/KU4GYkMWly2xGfOzZQxrHYIIk=";
armv7l-linux = "sha256-Q2raRw3St3vnZawy5vO9b3+DCvnMIMFEMEKxGOSXkz8=";
x86_64-linux = "sha256-OWJqNm08Uy7Wr5pbucS0eWUyN3xU6/qLYM8wL/hg2dY=";
x86_64-darwin = "sha256-Cq+JfzSTYJ85OWW9QjDSGU6yBqvoEniaqlwA/eT/+c0=";
aarch64-linux = "sha256-u5IRp1qoPN2A5T9iPDPrZjhw/UAHcBrRanWPJMeFD0k=";
aarch64-darwin = "sha256-KDqNpsLi+EXoAAY0TZFkbHT8WBy1f4hU1ag7Fp24MKY=";
armv7l-linux = "sha256-9R4FBxyIx7+jMNrUDfMrvIMNqggJ97mTSTXIjG5ccLI=";
}
.${system} or throwSystem;
@@ -41,7 +41,7 @@ callPackage ./generic.nix rec {
# Please backport all compatible updates to the stable release.
# This is important for the extension ecosystem.
version = "1.104.26450";
version = "1.104.36664";
pname = "vscodium";
executableName = "codium";
@@ -8,13 +8,13 @@
}:
mkLibretroCore {
core = "mednafen-psx" + lib.optionalString withHw "-hw";
version = "0-unstable-2025-08-29";
version = "0-unstable-2025-10-03";
src = fetchFromGitHub {
owner = "libretro";
repo = "beetle-psx-libretro";
rev = "fe380f78ca0796fbe58901d80b125afaa8a2670b";
hash = "sha256-MG8hrLkqTgMI/JQ0WZ68iI22xD/Qs2jWL+tle0brZ6g=";
rev = "4968db4255bd8853137132c5d0809becd7638026";
hash = "sha256-MVcz+c5ExZZuda5ene4nhidd/zZNvXcAg+wCinQisME=";
};
extraBuildInputs = lib.optionals withHw [
@@ -5,13 +5,13 @@
}:
mkLibretroCore {
core = "bsnes";
version = "0-unstable-2025-09-19";
version = "0-unstable-2025-10-03";
src = fetchFromGitHub {
owner = "libretro";
repo = "bsnes-libretro";
rev = "aeb76d7dc33c1f136db43d65ba9622c14e81b0fa";
hash = "sha256-DpCG+DyeSCMdAF+TGB6zSRp/fttoyw9eCXy8PLvRjaY=";
rev = "e0e6cef46582a436e8b08a339f4751411dc5bd63";
hash = "sha256-fIlTIF1042oWIHxqD7h7MdUfb6QDfIP0jqVlBNOTBmY=";
};
makefile = "Makefile";
@@ -8,13 +8,13 @@
}:
mkLibretroCore {
core = "flycast";
version = "0-unstable-2025-09-19";
version = "0-unstable-2025-10-03";
src = fetchFromGitHub {
owner = "flyinghead";
repo = "flycast";
rev = "851dd226648c3e2706cef99a02a5cddad3e2f4b1";
hash = "sha256-bBIHmKViwC5+8bM3Tdb4DKxsWw988nGVdAwSHsFciNE=";
rev = "af5f67c15d52b16d35e95671a5b74502288c4397";
hash = "sha256-eMkyNwGdgyYDmwqYy3xzzSTYqUcoKpQkDYFP8bQdz58=";
fetchSubmodules = true;
};
@@ -85,13 +85,13 @@ in
stdenv.mkDerivation (finalAttrs: {
pname = "imagemagick";
version = "7.1.2-3";
version = "7.1.2-4";
src = fetchFromGitHub {
owner = "ImageMagick";
repo = "ImageMagick";
tag = finalAttrs.version;
hash = "sha256-L4apUdF1VJXSVqWAyjYFG/4qDJoJ0ObmSOpd90kqXsU=";
hash = "sha256-FOai96rtDWFQZ8vest0pDl6m2swQwXp7hVO2sZa1U2A=";
};
outputs = [
@@ -83,14 +83,11 @@ in
fi
'';
meta =
with lib;
meta
// {
description = "Helper for screenshots within sway";
maintainers = with maintainers; [ evils ];
mainProgram = "grimshot";
};
meta = meta // {
description = "Helper for screenshots within sway";
maintainers = [ ];
mainProgram = "grimshot";
};
};
inactive-windows-transparency =
@@ -114,14 +111,11 @@ in
'';
meta =
with lib;
meta
// {
meta // {
description = "It makes inactive sway windows transparent";
mainProgram = "${lname}.py";
maintainers = with maintainers; [
evils # packaged this as a side-effect of grimshot but doesn't use it
];
maintainers = [ ];
};
};
@@ -2,7 +2,6 @@
lib,
stdenv,
buildGoModule,
buildGo125Module,
fetchFromGitHub,
fetchFromGitLab,
callPackage,
@@ -103,15 +102,11 @@ let
mkProviderFetcher = fetchFromGitLab;
owner = "gitlab-org";
};
# actions update always fails but can't reproduce the failure.
heroku = automated-providers.heroku.override { spdx = "MPL-2.0"; };
# mkisofs needed to create ISOs holding cloud-init data and wrapped to terraform via deecb4c1aab780047d79978c636eeb879dd68630
libvirt = automated-providers.libvirt.overrideAttrs (_: {
propagatedBuildInputs = [ cdrtools ];
});
minio = automated-providers.minio.override { spdx = "AGPL-3.0-only"; };
# requires go >= 1.25.0
talos = automated-providers.talos.override { mkProviderGoModule = buildGo125Module; };
};
# Put all the providers we not longer support in this list.
@@ -122,7 +117,13 @@ let
removed = name: date: throw "the ${name} terraform provider removed from nixpkgs on ${date}";
in
lib.optionalAttrs config.allowAliases {
fly = archived "fly" "2023/10";
_assert = archived "_assert" "2025/10";
azurestack = archived "azurestack" "2025/10";
googleworkspace = archived "googleworkspace" "2025/10";
huaweicloudstack = archived "huaweicloudstack" "2025/10";
metal = archived "metal" "2025/10";
stackpath = archived "stackpath" "2025/10";
vra7 = archived "vra7" "2025/10";
};
# excluding aliases, used by terraform-full
@@ -1,13 +1,4 @@
{
"_assert": {
"hash": "sha256-ngHxzV7lRg6pOtyNTdCv3ToRK/vO016Vp2mlh7QT8Rc=",
"homepage": "https://registry.terraform.io/providers/hashicorp/assert",
"owner": "hashicorp",
"repo": "terraform-provider-assert",
"rev": "v0.16.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-nHaBNYCKfTvaDnz2SeexM2cyNVK5ThPYn4rnGEw7Wi0="
},
"aci": {
"hash": "sha256-+aD4M07xXMTbvp69IuGlO3rSkVEi5NVe5fqEPkWNeM0=",
"homepage": "https://registry.terraform.io/providers/CiscoDevNet/aci",
@@ -54,11 +45,11 @@
"vendorHash": "sha256-bS9fFfttu58a2S3CNLO3FOlLPuk/2h1D0bjO6nJbfP8="
},
"alicloud": {
"hash": "sha256-XYCnAvW8vbNd7wd5Q8fYiT7OooXqGytZMA8ocgLt8zo=",
"hash": "sha256-QZaOnNCfVKBTkDSdNw8mQbF8NfJUhEeN2y3tVt1J1D0=",
"homepage": "https://registry.terraform.io/providers/aliyun/alicloud",
"owner": "aliyun",
"repo": "terraform-provider-alicloud",
"rev": "v1.260.0",
"rev": "v1.260.1",
"spdx": "MPL-2.0",
"vendorHash": "sha256-+Hc2NCCnJ0fB86fvgE4Kak8fwlsXIiv8avIhE/RoWeM="
},
@@ -126,13 +117,13 @@
"vendorHash": null
},
"aws": {
"hash": "sha256-k2lbdaDt/jpkoF5jKll7ZxU+3zkspGvGx/kToqYipAo=",
"hash": "sha256-6ZBQ2AFZBwyEUylCqHn4pn6hmYLIpjMzv5L2pvmCT5Q=",
"homepage": "https://registry.terraform.io/providers/hashicorp/aws",
"owner": "hashicorp",
"repo": "terraform-provider-aws",
"rev": "v6.14.1",
"rev": "v6.15.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-hG1XnJtN95+jW6AGnV4+EkKaVZwG0PPTMLyHFQ3nXtc="
"vendorHash": "sha256-j4tAFLBdQR35EvQNd12XwQ0kD5wSSVi9/f/N1YbI6IM="
},
"awscc": {
"hash": "sha256-wAQLtx+eVtKucdokQLfq1zTAOdMPI2Frio5ILxLGyt8=",
@@ -144,11 +135,11 @@
"vendorHash": "sha256-xIROXf39bvPjtiKpfn7bfL7SXwHOqUxNqlhrCmDLYGA="
},
"azuread": {
"hash": "sha256-7dbBhQz0MDUAaz4U1ewM2RayWtp5gbo3FrrQ762Tb6A=",
"hash": "sha256-9vGXzFLRaQPXECcFtZMnbhHQvEm0FeGwYm4K9utpZf4=",
"homepage": "https://registry.terraform.io/providers/hashicorp/azuread",
"owner": "hashicorp",
"repo": "terraform-provider-azuread",
"rev": "v3.5.0",
"rev": "v3.6.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -161,15 +152,6 @@
"spdx": "MPL-2.0",
"vendorHash": null
},
"azurestack": {
"hash": "sha256-aSwVa7y1AJ6sExx+bO/93oLBNgSBDJjuPYPY8i3C9T0=",
"homepage": "https://registry.terraform.io/providers/hashicorp/azurestack",
"owner": "hashicorp",
"repo": "terraform-provider-azurestack",
"rev": "v1.0.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
"baiducloud": {
"hash": "sha256-zKkXfSIVVW0QxQB/fJNowy1mQPfXlv6HFcNaNlBSIvY=",
"homepage": "https://registry.terraform.io/providers/baidubce/baiducloud",
@@ -225,13 +207,13 @@
"vendorHash": "sha256-pCBmeisWcyw/Box1yrWwYj+hSrsqmToiiom2jS8I1SU="
},
"buildkite": {
"hash": "sha256-w+ljPDKyVlylr87tFhuu/7oCkY/fFeK+LPr7mY7rbP0=",
"hash": "sha256-WP1CcGYtyItpMzKvYFiv5q0jQfvB5nSv8suDmSB1tSs=",
"homepage": "https://registry.terraform.io/providers/buildkite/buildkite",
"owner": "buildkite",
"repo": "terraform-provider-buildkite",
"rev": "v1.24.0",
"rev": "v1.26.0",
"spdx": "MIT",
"vendorHash": "sha256-2xZ2//qMKfgqob39k++fX6vJEx9YE1NJpGCbDyM1L10="
"vendorHash": "sha256-nKXQsAu1tHOHnle7G0Bt+CCNU9AGvxIIv6LJ/INiU7g="
},
"ccloud": {
"hash": "sha256-Dpx0eugcHCJV8GNPqjxx4P9ohgJgB10DTnHr+CeN/iQ=",
@@ -298,13 +280,13 @@
"vendorHash": "sha256-bD8BHhP4jxBRnFjmZE1MMkBn2/sMqNEaxTlQRMj2Crw="
},
"cloudscale": {
"hash": "sha256-4RU1CD0WwLMd3NsnJWl2Smc8XBYlP9K8Iev16uqsetE=",
"hash": "sha256-uqELnAcx72lIIUGEiO7y9lXhiyNgThmCiMtC/EKFpTA=",
"homepage": "https://registry.terraform.io/providers/cloudscale-ch/cloudscale",
"owner": "cloudscale-ch",
"repo": "terraform-provider-cloudscale",
"rev": "v4.4.0",
"rev": "v5.0.0",
"spdx": "MIT",
"vendorHash": null
"vendorHash": "sha256-elNXA2PH6mDolyuLhUsVBDCiL/ydZfi7LAVPjwnbMIw="
},
"constellix": {
"deleteVendor": true,
@@ -462,13 +444,13 @@
"vendorHash": "sha256-xIagZvWtlNpz5SQfxbA7r9ojAeS3CW2pwV337ObKOwU="
},
"fastly": {
"hash": "sha256-4sOcbqaC9FV/Si8/A6wvdDREYt7v5z0iNQc5TXWyjSU=",
"hash": "sha256-nevSFpLx1N+rM6ps0jstLem/VdAPIhnTaJefLpfLG/A=",
"homepage": "https://registry.terraform.io/providers/fastly/fastly",
"owner": "fastly",
"repo": "terraform-provider-fastly",
"rev": "v5.17.0",
"rev": "v8.3.0",
"spdx": "MPL-2.0",
"vendorHash": null
"vendorHash": "sha256-5T6pwozD0RKDzdd2XAMuHY651jEvo6V6s1gvwYTHTRI="
},
"flexibleengine": {
"hash": "sha256-yEZ9JiUSqFFbfqzOOD59ZBv4yFCeUBBKlp6aiUqDqiM=",
@@ -525,11 +507,11 @@
"vendorHash": "sha256-29uvPCepGHRPohGY7viaPD9VQPPj9XB/plragACC4e4="
},
"google": {
"hash": "sha256-xQW0UxGIcxD0Y4zdCBnGJhUWfWdMIERk0lkot96ztzI=",
"hash": "sha256-463G4/NtViaBH1B1XVzHT6KVQu+4HnqGWX7hw4CjgNA=",
"homepage": "https://registry.terraform.io/providers/hashicorp/google",
"owner": "hashicorp",
"repo": "terraform-provider-google",
"rev": "v7.4.0",
"rev": "v7.5.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-cQybnUaDLVmQrtFkiI5k3OwqN9Oks+J1H2kbkNjO4jc="
},
@@ -542,15 +524,6 @@
"spdx": "MPL-2.0",
"vendorHash": "sha256-Bii3UrY1WbhewgsURxq7gGVqT1WSszFkif0V88hiyZo="
},
"googleworkspace": {
"hash": "sha256-dedYnsKHizxJZibuvJOMbJoux0W6zgKaK5fxIofKqCY=",
"homepage": "https://registry.terraform.io/providers/hashicorp/googleworkspace",
"owner": "hashicorp",
"repo": "terraform-provider-googleworkspace",
"rev": "v0.7.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-fqVBnAivVekV+4tpkl+E6eNA3wi8mhLevJRCs3W7L2g="
},
"grafana": {
"hash": "sha256-KVNwgn7swWXRNJNpXV8oy++s+CrDZhMPDDP40qIZIlY=",
"homepage": "https://registry.terraform.io/providers/grafana/grafana",
@@ -597,12 +570,12 @@
"vendorHash": "sha256-sPvX69R2BmlY/KhXZgxCunzseoOkz1h2b8yqekBBn0k="
},
"heroku": {
"hash": "sha256-/2XfqyyoxwcFKgbLli1i7PX58OD0iczTPxVVz8Rkeoc=",
"hash": "sha256-VGx2J7huF05HU/59Hyo2rxwV3SR+kVJWtrfWoRmln2o=",
"homepage": "https://registry.terraform.io/providers/heroku/heroku",
"owner": "heroku",
"repo": "terraform-provider-heroku",
"rev": "v5.2.13",
"spdx": null,
"rev": "v5.3.1",
"spdx": "MPL-2.0",
"vendorHash": null
},
"hetznerdns": {
@@ -641,15 +614,6 @@
"spdx": "MPL-2.0",
"vendorHash": null
},
"huaweicloudstack": {
"hash": "sha256-WSJDp+LFjVPquQVMgib/YZV35kktLH2vMCIZJWqakXs=",
"homepage": "https://registry.terraform.io/providers/huaweicloud/huaweicloudstack",
"owner": "huaweicloud",
"repo": "terraform-provider-huaweicloudstack",
"rev": "v1.3.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
"hydra": {
"hash": "sha256-A9BemEPLhvYzhksvYRfmhQXY3EEdTxQcmjE9+2+BKqg=",
"homepage": "https://registry.terraform.io/providers/DeterminateSystems/hydra",
@@ -821,15 +785,6 @@
"spdx": "Apache-2.0",
"vendorHash": "sha256-L1wufPa7LPPyOPTL+jFQgiWzJoJYS+fCdw3N0KZqKtc="
},
"metal": {
"hash": "sha256-1HTSDVMk2VhoYRLInrBK3bDuYU0SwyhBV1p5A2tlU/I=",
"homepage": "https://registry.terraform.io/providers/equinix/metal",
"owner": "equinix",
"repo": "terraform-provider-metal",
"rev": "v3.3.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-QxbZv6YMa5/I4bTeQBNdmG3EKtLEmstnH7HMiZzFJrI="
},
"migadu": {
"hash": "sha256-XXtDXByaSnnUGLPiwUNTPTHqDOED7IJQsf8b9x0/R8E=",
"homepage": "https://registry.terraform.io/providers/metio/migadu",
@@ -849,13 +804,13 @@
"vendorHash": "sha256-QWBzQXx/dzWZr9dn3LHy8RIvZL1EA9xYqi7Ppzvju7g="
},
"mongodbatlas": {
"hash": "sha256-yBccJeD25hQiwqjMpaYIJM2DhoKzehppjR8NG/IOrQo=",
"hash": "sha256-evMjL6I9q80olTkuigJLbAHTDU4nYXNaMVf8cq6yZsM=",
"homepage": "https://registry.terraform.io/providers/mongodb/mongodbatlas",
"owner": "mongodb",
"repo": "terraform-provider-mongodbatlas",
"rev": "v2.0.0",
"rev": "v2.0.1",
"spdx": "MPL-2.0",
"vendorHash": "sha256-EvTuVhJfNrwAto9+6oi6iYQfgbCnHupkD+dk57vrT/c="
"vendorHash": "sha256-BWItAEI+ST5wN/CyTHljFJvutJiDHYjV4HEeLtmhC2o="
},
"namecheap": {
"hash": "sha256-fHH9sHI1mqQ9q9nX9DHJ0qfEfmDB4/2uzyVvUuIAF18=",
@@ -930,14 +885,13 @@
"vendorHash": "sha256-ssmAveYUVI8z/1UWNeaMX0qdUewowCHNufJIFMirdVg="
},
"nutanix": {
"deleteVendor": true,
"hash": "sha256-p1VhGSor/uxQYiSb9enAeu6dtLRuXMKk9m2DtPEj6vs=",
"hash": "sha256-nk5wdbAzgBJ6gyYSXZAiNdjx/XQ6XldAMsjb8yv+y7w=",
"homepage": "https://registry.terraform.io/providers/nutanix/nutanix",
"owner": "nutanix",
"repo": "terraform-provider-nutanix",
"rev": "v1.9.5",
"rev": "v2.3.1",
"spdx": "MPL-2.0",
"vendorHash": "sha256-LRIfxQGwG988HE5fftGl6JmBG7tTknvmgpm4Fu1NbWI="
"vendorHash": "sha256-ByB1ztK2/1pTFeO34eXVyQSSbe35qqoCeWe6MPZN7vY="
},
"oci": {
"hash": "sha256-fEvo5R7HutlOmZ6DMvYKQiE0amwk/YPi1T2a55w70hQ=",
@@ -1030,11 +984,11 @@
"vendorHash": null
},
"pagerduty": {
"hash": "sha256-PkDugN/y3WmsNdl8+3/3l2tEWilJSEnJPdfkTzCm5mE=",
"hash": "sha256-oVv0y+49hUOkEU4/N7RvepSYNlgwGz8M8/11tGemAV0=",
"homepage": "https://registry.terraform.io/providers/PagerDuty/pagerduty",
"owner": "PagerDuty",
"repo": "terraform-provider-pagerduty",
"rev": "v3.29.0",
"rev": "v3.30.1",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -1111,11 +1065,11 @@
"vendorHash": "sha256-3o6YRDrq4rQhNAFyqiGJrAoxuAykWw85OExRGSE3kGI="
},
"rancher2": {
"hash": "sha256-durRRgJmbGK0GBvlzzeq7stic8fzxBMmswYhMYnEL6E=",
"hash": "sha256-E1E7xrQUOGbGV1xNpZFrIql6zgfzr3jmCbIFREbJdwE=",
"homepage": "https://registry.terraform.io/providers/rancher/rancher2",
"owner": "rancher",
"repo": "terraform-provider-rancher2",
"rev": "v8.1.0",
"rev": "v8.2.1",
"spdx": "MPL-2.0",
"vendorHash": "sha256-M2lJKmIR66lQKFkInjizn68ax2Gq4sim5Y3vZKyDhZ8="
},
@@ -1138,13 +1092,13 @@
"vendorHash": "sha256-vsnihN98O5RzMZk5YNycCnjpvxklQoLbZolCJXbJRMU="
},
"rootly": {
"hash": "sha256-SRE1T9C3qggCwjl/PdehkabdnuRV8ZW58dc8zhSwPXo=",
"hash": "sha256-6m4jzzn5kTGUqY5bitPZI82v+/RA3BXqCYy5aWUCO4c=",
"homepage": "https://registry.terraform.io/providers/rootlyhq/rootly",
"owner": "rootlyhq",
"repo": "terraform-provider-rootly",
"rev": "v4.1.0",
"rev": "v4.2.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-39OiEYntUmX2fJZh7G/LcCNFXFmHwdLgFGYz6BUEyOA="
"vendorHash": "sha256-auyQLDDQ+tfMQCqICDR5tfvaYrO89Eani7lAsfoPwwU="
},
"routeros": {
"hash": "sha256-k+q4n20bvYK7nn9ZGQEQH70xt6ugNKzK58XyzwrKh0Q=",
@@ -1290,15 +1244,6 @@
"spdx": "MIT",
"vendorHash": "sha256-vcuUt3WIo1TnLApch410JgtyCzliQRYMQQQ2Z9diDZ8="
},
"stackpath": {
"hash": "sha256-n1IPOJ1NlguNMJASCXjNNUK0b5wGYe29aTcw7fNwVcU=",
"homepage": "https://registry.terraform.io/providers/stackpath/stackpath",
"owner": "stackpath",
"repo": "terraform-provider-stackpath",
"rev": "v2.1.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-G+5vSXhxmt0Qsqt7vnecPZfIxAonNF3l7ygQZ0nemnU="
},
"statuscake": {
"hash": "sha256-zXBZZA+2uRN2FeGrayq0a4EBk7T+PvlBIwbuxwM7yBc=",
"homepage": "https://registry.terraform.io/providers/StatusCakeDev/statuscake",
@@ -1345,20 +1290,20 @@
"vendorHash": "sha256-J2fLyYvlnefFIaJ6UwRfJ5nas86JCuOHAdWalr9T9fw="
},
"temporalcloud": {
"hash": "sha256-MnfGps/PeTjhLXXcy37JHy38R3zDqjdLv99SY/F+jGM=",
"hash": "sha256-hHHZ+5LF5AoDB2JZyPRce6oEtOZOGi8lYNgbTlAqTuA=",
"homepage": "https://registry.terraform.io/providers/temporalio/temporalcloud",
"owner": "temporalio",
"repo": "terraform-provider-temporalcloud",
"rev": "v1.1.0",
"rev": "v1.1.1",
"spdx": "MPL-2.0",
"vendorHash": "sha256-M3wnvRxMyU0Yo733E9e8Q++xVTuSXD0W3fB2C14RDNU="
"vendorHash": "sha256-9GjhP/Oh2HlVuMcuXFhS7MUmF3eS4qlUsW5XhugaK14="
},
"tencentcloud": {
"hash": "sha256-HKV6JhvwDEAnO0Q3lr/TKMEldj35dyKG0pLremx254Y=",
"hash": "sha256-IrZXw7Bf7bYZJDqyqZC7ereYTyDldo7s6kLE5yKVOms=",
"homepage": "https://registry.terraform.io/providers/tencentcloudstack/tencentcloud",
"owner": "tencentcloudstack",
"repo": "terraform-provider-tencentcloud",
"rev": "v1.82.25",
"rev": "v1.82.27",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -1498,15 +1443,6 @@
"spdx": "MPL-2.0",
"vendorHash": "sha256-rUYHapEVqRupLOPVbcAH8YP0cuXclMmYTQUkqeOwCN0="
},
"vra7": {
"hash": "sha256-KzxthTn3z0kZTUTKO8zq6DaNMTnfb7gFlbuWgxZtqwo=",
"homepage": "https://registry.terraform.io/providers/vmware/vra7",
"owner": "vmware",
"repo": "terraform-provider-vra7",
"rev": "v3.0.15",
"spdx": "MPL-2.0",
"vendorHash": null
},
"vsphere": {
"hash": "sha256-vRO6vxzi4d0hNc0MmQLhN7roONnsjxPBtFt0fyvxWd8=",
"homepage": "https://registry.terraform.io/providers/hashicorp/vsphere",
@@ -1535,12 +1471,12 @@
"vendorHash": "sha256-GRnVhGpVgFI83Lg34Zv1xgV5Kp8ioKTFV5uaqS80ATg="
},
"yandex": {
"hash": "sha256-cQqklICVFkeEIdRza6OIBOlDTbJGX+u0B/9kLkUB9Ds=",
"hash": "sha256-ez4HbBd2e3SRau7ejORKfZUbGySxSTTRt7kE9JRVVf0=",
"homepage": "https://registry.terraform.io/providers/yandex-cloud/yandex",
"owner": "yandex-cloud",
"repo": "terraform-provider-yandex",
"rev": "v0.159.0",
"rev": "v0.162.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-yR8M9fS7QBvf+UJUXdBNPMf/S0PSwJ/3/VTXo+Gcdvw="
"vendorHash": "sha256-iJvhrJVFC+O9f+gy/H2hif4ZQe9SxFdA2qGEIZwIv1Y="
}
}
@@ -326,7 +326,7 @@ stdenv.mkDerivation rec {
The Programs handle Schematic Capture, and PCB Layout with Gerber output.
'';
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ evils ];
maintainers = [ ];
platforms = lib.platforms.all;
broken = stdenv.hostPlatform.isDarwin;
mainProgram = "kicad";
+93 -12
View File
@@ -1,6 +1,7 @@
{
lib,
repoRevToNameMaybe,
fetchgit,
fetchzip,
}:
@@ -8,23 +9,103 @@ lib.makeOverridable (
{
owner,
repo,
rev,
name ? repoRevToNameMaybe repo rev "bitbucket",
tag ? null,
rev ? null,
name ? repoRevToNameMaybe repo (lib.revOrTag rev tag) "bitbucket",
fetchSubmodules ? false,
leaveDotGit ? false,
deepClone ? false,
forceFetchGit ? false,
fetchLFS ? false,
rootDir ? "",
sparseCheckout ? lib.optional (rootDir != "") rootDir,
meta ? { },
... # For hash agility
}@args:
fetchzip (
{
inherit name;
url = "https://bitbucket.org/${owner}/${repo}/get/${lib.strings.escapeURL rev}.tar.gz";
meta.homepage = "https://bitbucket.org/${owner}/${repo}/";
}
// removeAttrs args [
assert (
lib.assertMsg (lib.xor (tag == null) (
rev == null
)) "fetchFromBitbucket requires one of either `rev` or `tag` to be provided (not both)."
);
let
position = (
if args.meta.description or null != null then
builtins.unsafeGetAttrPos "description" args.meta
else if tag != null then
builtins.unsafeGetAttrPos "tag" args
else
builtins.unsafeGetAttrPos "rev" args
);
baseUrl = "https://bitbucket.org/${owner}/${repo}";
newMeta =
meta
// {
homepage = meta.homepage or baseUrl;
}
// lib.optionalAttrs (position != null) {
# to indicate where derivation originates, similar to make-derivation.nix's mkDerivation
position = "${position.file}:${toString position.line}";
};
gitRepoUrl = "${baseUrl}.git";
# the tag is escaped to support mercurial-based tags as bitbucket supports them
revWithTag = if tag != null then "refs/tags/${lib.strings.escapeURL tag}" else rev;
passthruAttrs = removeAttrs args [
"owner"
"repo"
"rev"
]
)
"tag"
"fetchSubmodules"
"forceFetchGit"
];
useFetchGit =
fetchSubmodules
|| (leaveDotGit == true)
|| deepClone
|| forceFetchGit
|| fetchLFS
|| (rootDir != "")
|| (sparseCheckout != [ ]);
fetcher = if useFetchGit then fetchgit else fetchzip;
fetcherArgs =
(
if useFetchGit then
{
inherit
rev
tag
deepClone
fetchSubmodules
sparseCheckout
fetchLFS
;
url = gitRepoUrl;
}
// lib.optionalAttrs (leaveDotGit != null) { inherit leaveDotGit; }
else
{
url = "https://bitbucket.org/${owner}/${repo}/get/${revWithTag}.tar.gz";
extension = "tar.gz";
passthru = {
inherit gitRepoUrl;
};
}
)
// passthruAttrs
// {
inherit name;
};
in
fetcher fetcherArgs
// {
inherit rev;
meta = newMeta;
inherit owner repo tag;
rev = revWithTag;
}
)
+11 -2
View File
@@ -4,15 +4,24 @@
name = "withWhitespace";
owner = "tetov";
repo = "fetchbitbucket_tester";
rev = "tag%20with%20encoded%20spaces";
tag = "tag%20with%20encoded%20spaces";
sha256 = "sha256-Nf1Cvbx7Sbab8EeSSBU5baLBiuFYiQtITED+f4tfjC0=";
};
withEncodedWhitespaceGit = testers.invalidateFetcherByDrvHash fetchFromBitbucket {
name = "withWhitespaceGit";
owner = "tetov";
repo = "fetchbitbucket_tester";
tag = "tag%20with%20encoded%20spaces";
sha256 = "sha256-Nf1Cvbx7Sbab8EeSSBU5baLBiuFYiQtITED+f4tfjC0=";
forceFetchGit = true;
};
withoutWhitespace = testers.invalidateFetcherByDrvHash fetchFromBitbucket {
name = "withoutWhitespace";
owner = "tetov";
repo = "fetchbitbucket_tester";
rev = "main";
rev = "6b611eb75c7b3bf04b510dfc1268284039d55542";
sha256 = "sha256-eTd773gE1z4+Fl2YPBbbsrADD4Dr7sFGoOWgphXUhtE=";
};
}
+4 -1
View File
@@ -7,11 +7,14 @@
curl, # Note that `curl' may be `null', in case of the native stdenvNoCC.
cacert ? null,
rewriteURL,
hashedMirrors,
}:
let
mirrors = import ./mirrors.nix;
mirrors = import ./mirrors.nix // {
inherit hashedMirrors;
};
# Write the list of mirrors to a file that we can reuse between
# fetchurl instantiations, instead of passing the mirrors to
+1 -4
View File
@@ -1,9 +1,6 @@
{
# Content-addressable Nix mirrors
hashedMirrors = [
"https://tarballs.nixos.org"
];
hashedMirrors = throw "Use config.hashedMirrors instead of (import ./pkgs/build-support/fetchurl/mirrors.nix).hashedMirrors";
# Mirrors for mirror://site/filename URIs, where "site" is
# "sourceforge", "gnu", etc.
+15 -1
View File
@@ -22,6 +22,21 @@
${jq}/bin/jq -r '.headers.Hello' $out | ${moreutils}/bin/sponge $out
'';
};
# Tests that hashedMirrors works
hashedMirrors = testers.invalidateFetcherByDrvHash fetchurl {
# Make sure that we can only download from hashed mirrors
url = "http://broken";
# A file with this hash is definitely on tarballs.nixos.org
sha256 = "1j1y3cq6ys30m734axc0brdm2q9n2as4h32jws15r7w5fwr991km";
# No chance
curlOptsList = [
"--retry"
"0"
];
};
# Tests that downloadToTemp works with hashedMirrors
no-skipPostFetch = testers.invalidateFetcherByDrvHash fetchurl {
# Make sure that we can only download from hashed mirrors
@@ -40,6 +55,5 @@
# $downloadedFile, but here we know that because the URL is broken, it will
# have to fallback to fetching the previously-built derivation from
# tarballs.nixos.org, which provides pre-built derivation outputs.
};
}
+5 -1
View File
@@ -13,7 +13,7 @@ If `gopls` is compiled for Go 1.23, it won't work for projects that require Go 1
Go only ever has two supported toolchains. With a new minor release, the second last Go toolchain is automatically end of life, meaning it won't receive security updates anymore.
Based on this, we align on the following policy for toolchain/builder upgrades:
Based on this, we align on the following policy for toolchain/builder upgrades for the unstable release:
1. Default toolchain (the `go` package) and builder (`buildGoModule`) are upgraded to the latest minor release of Go as soon as it is released.
As it is a mass rebuild, this package will be made against the `staging` branch.
@@ -42,4 +42,8 @@ Based on this, we align on the following policy for toolchain/builder upgrades:
If the package won't build with that builder anymore, the package is marked broken.
It is the package maintainers responsibility to fix the package and get it working with a supported Go toolchain.
For the stable release, we recognize that (1) removing a Go version, or updating the `go_latest` or `go` packages to a new Go minor release, would be a breaking change, and (2) some packages will need backports (e.g. for security reasons) that require the latest Go version.
Therefore, on the stable release, new Go versions will be backported to the `release-2x.xx` branch, but the old versions will remain, and `go`, `buildGoModule`, `go_latest`, and `buildGoLatestModule` will remain unchanged.
However, `rc` versions should not be backported to the stable branch.
[1]: http://go.dev/doc/go1compat
-1
View File
@@ -16,7 +16,6 @@ lib.extendMkDerivation {
{
nativeBuildInputs ? [ ], # Native build inputs used for the derivation.
passthru ? { },
patches ? [ ],
# A function to override the `goModules` derivation.
overrideModAttrs ? (finalAttrs: previousAttrs: { }),
+30
View File
@@ -0,0 +1,30 @@
{
lib,
stdenv,
fetchzip,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "64tass";
version = "1.60.3243";
src = fetchzip {
url = "mirror://sourceforge/tass64/64tass-${finalAttrs.version}-src.zip";
hash = "sha256-73/MoQqqM966xtN4D8F85HZSw/gEpcFQ2JiH3k6vI+4=";
};
installFlags = [ "prefix=$(out)" ];
meta = {
homepage = "https://tass64.sourceforge.net/";
description = "Multi pass optimizing macro assembler for the 65xx series of processors";
license = [
lib.licenses.gpl2Plus
lib.licenses.lgpl2Only
lib.licenses.lgpl21Only
lib.licenses.mit
];
maintainers = [ lib.maintainers.matthewcroughan ];
platforms = lib.platforms.linux;
};
})
@@ -8,13 +8,13 @@
buildGoModule (finalAttrs: {
pname = "alertmanager-ntfy";
version = "1.0.1";
version = "1.0.2";
src = fetchFromGitHub {
owner = "alexbakker";
repo = "alertmanager-ntfy";
tag = "v${finalAttrs.version}";
hash = "sha256-CtjWZIw0RHVnPP5OMiLbPjv/EuJI6GfWo2hEzRi7zVI=";
hash = "sha256-aVK8HCRXRprNoBhILLN7F/Fb3RePPzBW4vBMnQr9zRU=";
};
vendorHash = "sha256-CpVGLM6ZtfYODhP6gzWGcnpEuDvKRiMWzoPNm2qtML4=";
+1 -1
View File
@@ -74,7 +74,7 @@ stdenv.mkDerivation {
description = "(deprecated) Complete set of free CAD tools and portable libraries for VLSI design";
homepage = "http://coriolis.lip6.fr/";
license = with licenses; gpl2Plus;
maintainers = with maintainers; [ l-as ];
maintainers = [ ];
platforms = with platforms; linux;
};
}
+1 -1
View File
@@ -57,6 +57,6 @@ stdenv.mkDerivation (finalAttrs: {
description = "Soundcard firmwares from the alsa project";
license = lib.licenses.gpl2Plus;
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [ l-as ];
maintainers = [ ];
};
})
+1 -1
View File
@@ -60,6 +60,6 @@ stdenv.mkDerivation (finalAttrs: {
"alsa-topology"
];
platforms = with lib.platforms; linux ++ freebsd;
maintainers = with lib.maintainers; [ l-as ];
maintainers = [ ];
};
})
+3 -3
View File
@@ -82,13 +82,13 @@ let
in
stdenv.mkDerivation {
pname = "ansel";
version = "0-unstable-2025-06-11";
version = "0-unstable-2025-10-04";
src = fetchFromGitHub {
owner = "aurelienpierreeng";
repo = "ansel";
rev = "b51cfa38c41abe9933b40e1583807b105c5933c1";
hash = "sha256-EEML6agNDQbCZ1+b4dTHr3JA9Jh3iTW0U4krVylGVTg=";
rev = "dd5b73cd78d32618aca3f81a041e45c8d2adcece";
hash = "sha256-x8glXiweW1/mzPjGrGRDeCHIG1GqbjvEmAM4sEhor14=";
fetchSubmodules = true;
};
+3 -3
View File
@@ -8,16 +8,16 @@
buildGoModule rec {
pname = "auth0-cli";
version = "1.20.1";
version = "1.21.0";
src = fetchFromGitHub {
owner = "auth0";
repo = "auth0-cli";
tag = "v${version}";
hash = "sha256-puRrqghNyzui4wnvCPcTRvFrdzLQWtkIds9xvAjkvMQ=";
hash = "sha256-HII1qRJ4or5gncSVUA41DmkC8EQ9w6fdmMM15JTUFsw=";
};
vendorHash = "sha256-VTHdtcSw2yHsNNx+4zR62i0c8iDOTPumb2l+HqI1GLI=";
vendorHash = "sha256-g/vpUbtWFKyoPObpd9yOdsbzD/8d0SjAUZzL7A92bio=";
ldflags = [
"-s"
+3 -3
View File
@@ -27,14 +27,14 @@
}:
stdenv.mkDerivation {
pname = "basalt-monado";
version = "0-unstable-2024-06-21";
version = "0-unstable-2025-09-25";
src = fetchFromGitLab {
domain = "gitlab.freedesktop.org";
owner = "mateosss";
repo = "basalt";
rev = "385c161f35720df3a6c606054565f9d49a1c5787";
hash = "sha256-+2/pc2OWDwE04xPcfHL5GGyhQ1ZTN6o7cCNAilDgd2Y=";
rev = "5337898271f5c2ce523258e93e80fd870130be31";
hash = "sha256-IoXZlXyOc5y9aSHBU3WCNhHi4L9xzHmbv6VMEvX2ZeE=";
fetchSubmodules = true;
};
+3 -3
View File
@@ -8,13 +8,13 @@
buildGoModule rec {
pname = "bom";
version = "0.6.0";
version = "0.7.1";
src = fetchFromGitHub {
owner = "kubernetes-sigs";
repo = "bom";
tag = "v${version}";
hash = "sha256-nYzBaFtOJhqO0O6MJsxTw/mxsIOa+cnU27nOFRe2/uI=";
hash = "sha256-OLbzk1Ix8N2R+od3NQg0JviEcnw6Sw1+wrak26ZWYFw=";
# populate values that require us to use git. By doing this in postFetch we
# can delete .git afterwards and maintain better reproducibility of the src.
leaveDotGit = true;
@@ -27,7 +27,7 @@ buildGoModule rec {
'';
};
vendorHash = "sha256-q2dK1hO3ruvts4BtQ1VGgTH3qNMzmS22CUuA52t5OvE=";
vendorHash = "sha256-gHlrpseovxAv+YdHipUwuIhUDoK05oizMfUpQTHqi6M=";
nativeBuildInputs = [ installShellFiles ];
+1 -1
View File
@@ -46,6 +46,6 @@ stdenv.mkDerivation rec {
homepage = "https://github.com/knorrie/btrfs-heatmap";
license = licenses.mit;
platforms = platforms.linux;
maintainers = [ maintainers.evils ];
maintainers = [ ];
};
}
+2 -2
View File
@@ -7,13 +7,13 @@
buildGoModule rec {
pname = "buildkit";
version = "0.24.0";
version = "0.25.0";
src = fetchFromGitHub {
owner = "moby";
repo = "buildkit";
rev = "v${version}";
hash = "sha256-cii+A+CFJcuix++f4ZdW6z5GKpPGdp9C9iJS+KPb4LY=";
hash = "sha256-6BLu9wz/V0YSEEFelUMg1mYG6MxZgnkW4lwd5A+X90Q=";
};
vendorHash = null;
+3 -3
View File
@@ -10,16 +10,16 @@
rustPlatform.buildRustPackage (finalAttrs: {
pname = "c2patool";
version = "0.23.2";
version = "0.23.4";
src = fetchFromGitHub {
owner = "contentauth";
repo = "c2pa-rs";
tag = "c2patool-v${finalAttrs.version}";
hash = "sha256-elEl0tSO7SEbyMuLhOxnkiejmalJgtEGzX2hWNBYISs=";
hash = "sha256-6y7IKuYnwSSrfe44U+fNU8Q9YdHOq2Btvie6ZqTIBRw=";
};
cargoHash = "sha256-dt+6bJ1ax/hR8ZAx/HvkePh5Y3/Cl/O8BCuwEW2aJTk=";
cargoHash = "sha256-JnbvX/EkvatP/xlY+cTtRjVV+Rz2jjFIsqIvOFXqB5Q=";
# use the non-vendored openssl
env.OPENSSL_NO_VENDOR = 1;
+2 -2
View File
@@ -19,13 +19,13 @@ in
llvmPackages.stdenv.mkDerivation (finalAttrs: {
pname = "c3c${optionalString debug "-debug"}";
version = "0.7.5";
version = "0.7.6";
src = fetchFromGitHub {
owner = "c3lang";
repo = "c3c";
tag = "v${finalAttrs.version}";
hash = "sha256-o95Y5CYPITjn8KjxIZlBtwc6FfvZo2m5atR1Fyh9w+c=";
hash = "sha256-VZFMRu3iI3L57cQDLeS1I+1GiIWxAjUnO/cXbISB7M8=";
};
cmakeBuildType = if debug then "Debug" else "Release";
+3 -3
View File
@@ -7,16 +7,16 @@
rustPlatform.buildRustPackage rec {
pname = "cargo-nextest";
version = "0.9.104";
version = "0.9.105";
src = fetchFromGitHub {
owner = "nextest-rs";
repo = "nextest";
rev = "cargo-nextest-${version}";
hash = "sha256-CZNnOuMF5P3OgdwlAfUgbbXnDVm4IQ7P617Rblq0lgk=";
hash = "sha256-IBw6adO9Mzv878n+glLJTNeFykx6bGxfrPGxl014/7o=";
};
cargoHash = "sha256-jppSWm20Md++mxvs/h1pB1Bh/02muWqUm1DyR46nusY=";
cargoHash = "sha256-qHiifv1je7oNwOGYeT/QGcfagiXcLTCTG2kHV1rJJ4o=";
cargoBuildFlags = [
"-p"
+3 -3
View File
@@ -10,16 +10,16 @@
rustPlatform.buildRustPackage rec {
pname = "cargo-tarpaulin";
version = "0.32.8";
version = "0.33.0";
src = fetchFromGitHub {
owner = "xd009642";
repo = "tarpaulin";
rev = version;
hash = "sha256-DdDYTMtiHFrTnUihhZlHB9ZuuyXwGL8eQ4mqgsgPnsQ=";
hash = "sha256-yCuyeBL/7Dh9+V7fWvKkmj9OLGh88Jre7o0+TQXem9U=";
};
cargoHash = "sha256-2VnQo+WSc/bMMnGXY+kyLh5P2a39S8KDirfqbLJRSu0=";
cargoHash = "sha256-S3cIcw6ZDAn8DVbCM7T5t7R3t45iGuh5600KeKQNXS8=";
nativeBuildInputs = [
pkg-config
+22 -12
View File
@@ -1,21 +1,23 @@
{
lib,
stdenv,
fetchurl,
zlib,
fetchFromGitHub,
bzip2,
cgl,
clp,
pkg-config,
zlib,
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "cbc";
version = "2.10.4";
version = "2.10.12";
# Note: Cbc 2.10.5 contains Clp 1.17.5 which hits this bug
# that breaks or-tools https://github.com/coin-or/Clp/issues/130
src = fetchurl {
url = "https://www.coin-or.org/download/source/Cbc/Cbc-${version}.tgz";
sha256 = "0zq66j1vvpslswhzi9yfgkv6vmg7yry4pdmfgqaqw2vhyqxnsy39";
src = fetchFromGitHub {
owner = "coin-or";
repo = "Cbc";
tag = "releases/${finalAttrs.version}";
sha256 = "sha256-0Sz4/7CRKrArIUy/XxGIP7WMmICqDJ0VxZo62thChYQ=";
};
# or-tools has a hard dependency on Cbc static libraries, so we build both
@@ -25,13 +27,21 @@ stdenv.mkDerivation rec {
]
++ lib.optionals stdenv.cc.isClang [ "CXXFLAGS=-std=c++14" ];
nativeBuildInputs = [ pkg-config ];
enableParallelBuilding = true;
hardeningDisable = [ "format" ];
buildInputs = [
zlib
bzip2
zlib
];
# cbc lists cgl and clp in its .pc requirements, so it needs to be propagated.
propagatedBuildInputs = [
cgl
clp
];
# FIXME: move share/coin/Data to a separate output?
@@ -43,4 +53,4 @@ stdenv.mkDerivation rec {
platforms = lib.platforms.linux ++ lib.platforms.darwin;
description = "Mixed integer programming solver";
};
}
})
+54
View File
@@ -0,0 +1,54 @@
{
lib,
stdenv,
fetchFromGitHub,
nodejs,
pnpm_10,
npmHooks,
}:
let
pnpm = pnpm_10;
in
stdenv.mkDerivation (finalAttrs: {
pname = "changelogen";
version = "0.6.2";
src = fetchFromGitHub {
owner = "unjs";
repo = "changelogen";
tag = "v${finalAttrs.version}";
hash = "sha256-N6X9Wffl9WumCXvAt4y+vs3ZJY7NheK+O8BObmuIa/g=";
};
pnpmDeps = pnpm.fetchDeps {
inherit (finalAttrs) pname version src;
fetcherVersion = 2;
hash = "sha256-UKSIfn2iR8Ydk9ViGCgWtspZr1FjTeW49UMwTcL57UA=";
};
nativeBuildInputs = [
nodejs
pnpm.configHook
npmHooks.npmInstallHook
];
buildPhase = ''
runHook preBuild
pnpm run build
runHook postBuild
'';
dontNpmPrune = true;
meta = {
description = "Beautiful Changelogs using Conventional Commits";
homepage = "https://github.com/unjs/changelogen";
changelog = "https://github.com/unjs/changelogen/releases/tag/v${finalAttrs.version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ higherorderlogic ];
mainProgram = "changelogen";
platforms = nodejs.meta.platforms;
};
})
+2 -2
View File
@@ -37,14 +37,14 @@ with py.pkgs;
python3.pkgs.buildPythonApplication rec {
pname = "checkov";
version = "3.2.473";
version = "3.2.474";
pyproject = true;
src = fetchFromGitHub {
owner = "bridgecrewio";
repo = "checkov";
tag = version;
hash = "sha256-FfzAMuFF+ftjcKn+6uYgoeUPoBDnkVTBCPSeom6KR5k=";
hash = "sha256-q0knnfogAPTqzEluOyU4OwXWnFYPilW9/NtuhZd50GA=";
};
pythonRelaxDeps = [
+1 -1
View File
@@ -55,7 +55,7 @@ stdenv.mkDerivation (
description = "Fork of Chez Scheme for Racket";
homepage = "https://github.com/racket/ChezScheme";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ l-as ];
maintainers = [ ];
platforms = lib.platforms.unix;
};
}
+80 -38
View File
@@ -1,26 +1,54 @@
{
lib,
stdenv,
fetchurl,
coreutils,
fetchFromGitHub,
zuo,
zlib,
lz4,
libffi,
cctools,
darwin,
ncurses,
libiconv,
libX11,
libuuid,
testers,
}@args:
writableTmpDirAsHomeHook,
buildPackages,
}:
let
inherit (stdenv.hostPlatform) extensions;
arch =
{
"x86_64-linux" = "ta6le";
"x86-linux" = "ti3le";
"aarch64-linux" = "tarm64le";
"x86_64-darwin" = "ta6osx";
"aarch64-darwin" = "tarm64osx";
"x86_64-windows" = "ta6nt";
"aarch64-windows" = "tarm64nt";
}
.${stdenv.hostPlatform.system}
or (throw "Unsupported host system, try checking https://cisco.github.io/ChezScheme/release_notes/latest/release_notes.html to see if ${stdenv.hostPlatform.system} is supported");
in
stdenv.mkDerivation (finalAttrs: {
pname = "chez-scheme";
version = "10.2.0";
src = fetchurl {
url = "https://github.com/cisco/ChezScheme/releases/download/v${finalAttrs.version}/csv${finalAttrs.version}.tar.gz";
hash = "sha256-t5WRbUz+1ZJAxfRLG1B6hlfv0o5i5y4TTQNIbp8+N0o=";
src = fetchFromGitHub {
owner = "cisco";
repo = "ChezScheme";
tag = "v${finalAttrs.version}";
hash = "sha256-wAEnuC6hktCK/l00G48jYD9fwdyiXkzHjC2YYVeCJXo=";
# Vendored nanopass and stex
fetchSubmodules = true;
};
strictDeps = true;
depsBuildBuild = [
zuo # Used as the build driver
buildPackages.stdenv.cc # Needed for cross
];
nativeBuildInputs =
lib.optionals stdenv.hostPlatform.isDarwin [
cctools
@@ -28,42 +56,54 @@ stdenv.mkDerivation (finalAttrs: {
++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64) [
darwin.autoSignDarwinBinariesHook
];
buildInputs = [
ncurses
libiconv
zlib
lz4
libffi
]
++ lib.optionals stdenv.hostPlatform.isUnix [
libX11
libuuid
];
enableParallelBuilding = true;
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isGNU "-Wno-error=format-truncation";
/*
** We have to fix a few occurrences to tools with absolute
** paths in some helper scripts, otherwise the build will fail on
** NixOS or in any chroot build.
*/
patchPhase = ''
substituteInPlace ./makefiles/installsh \
--replace-warn "/usr/bin/true" "${coreutils}/bin/true"
substituteInPlace zlib/configure \
--replace-warn "/usr/bin/libtool" libtool
'';
/*
** Don't use configureFlags, since that just implicitly appends
** everything onto a --prefix flag, which ./configure gets very angry
** about.
** Set to use Nixpkgs dependencies when possible
** instead of vendored dependencies.
**
** Also, carefully set a manual workarea argument, so that we
** Carefully set a manual workarea argument, so that we
** can later easily find the machine type that we built Chez
** for.
*/
configurePhase = ''
./configure --as-is --threads --installprefix=$out --installman=$out/share/man
'';
enableParallelBuilding = true;
dontAddPrefix = true;
configurePlatforms = [ ]; # So it doesn't add the default --build --host flags
configureFlags = [
# Skip submodule update
"--as-is"
# Threaded version
"--threads"
"--installprefix=${placeholder "out"}"
"--installman=${placeholder "out"}/share/man"
"--enable-libffi"
"CC_FOR_BUILD=cc"
# Use Nixpkgs dependencies
"ZUO=zuo"
"ZLIB=${zlib}/lib/libz${extensions.sharedLibrary}"
"LZ4=${lz4.lib}/lib/liblz4${extensions.sharedLibrary}"
# Append to CFLAGS or else get errors
# Don't set CFLAGS so it can do some detections stuff
"CFLAGS+=${lib.optionalString stdenv.cc.isGNU "-Wno-error=format-truncation"}"
]
++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
"--cross"
"-m=${arch}"
];
enableParallelChecking = true;
nativeCheckInputs = [ writableTmpDirAsHomeHook ];
doCheck = false; # Filesystem checks are impure
# ** Clean up some of the examples from the build output.
postInstall = ''
@@ -72,18 +112,20 @@ stdenv.mkDerivation (finalAttrs: {
setupHook = ./setup-hook.sh;
passthru.tests = {
version = testers.testVersion {
package = finalAttrs.finalPackage;
};
passthru.tests.version = testers.testVersion {
package = finalAttrs.finalPackage;
};
meta = {
description = "Powerful and incredibly fast R6RS Scheme compiler";
homepage = "https://cisco.github.io/ChezScheme/";
changelog = "https://cisco.github.io/ChezScheme/release_notes/v${finalAttrs.version}/release_notes.html";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ thoughtpolice ];
platforms = lib.platforms.unix;
maintainers = with lib.maintainers; [
thoughtpolice
RossSmyth
];
platforms = lib.platforms.all;
mainProgram = "scheme";
};
})
+3 -3
View File
@@ -11,14 +11,14 @@
python3Packages.buildPythonApplication {
pname = "chirp";
version = "0.4.0-unstable-2025-09-22";
version = "0.4.0-unstable-2025-10-02";
pyproject = true;
src = fetchFromGitHub {
owner = "kk7ds";
repo = "chirp";
rev = "d958adbc6c332d6bbac4e2844025ca7331bb01b9";
hash = "sha256-htpdcm705Pm5a+me8vo5aQVWRAKTVPYac/0KgIpRKuA=";
rev = "bf848935eef3a739948a4a6c3ef8b5a31807481e";
hash = "sha256-8hQmH62yplZ5xao7nVwRdmyPQj3x5eitSBmFJYU3mb4=";
};
nativeBuildInputs = [
@@ -0,0 +1,43 @@
From 69b825ef5daebdb6e3b51ce23663003807028634 Mon Sep 17 00:00:00 2001
From: Thomas Gerbet <thomas@gerbet.me>
Date: Sun, 28 Sep 2025 21:45:34 +0200
Subject: [PATCH] Use `@CMAKE_INSTALL_FULL_*DIR@` in pkg-config files
This make possible to install to absolute paths and not only to relative
paths.
---
cmake/civetweb-cpp.pc.in | 4 ++--
cmake/civetweb.pc.in | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/cmake/civetweb-cpp.pc.in b/cmake/civetweb-cpp.pc.in
index ca1232c5..dc2d99e3 100644
--- a/cmake/civetweb-cpp.pc.in
+++ b/cmake/civetweb-cpp.pc.in
@@ -1,7 +1,7 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
-libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
Name: @PROJECT_NAME@-cpp
Description: generic graph library
diff --git a/cmake/civetweb.pc.in b/cmake/civetweb.pc.in
index 27cea8f1..dd669c5f 100644
--- a/cmake/civetweb.pc.in
+++ b/cmake/civetweb.pc.in
@@ -1,7 +1,7 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
-libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
Name: @PROJECT_NAME@
Description: generic graph library
--
2.51.0
+18 -5
View File
@@ -2,20 +2,30 @@
lib,
stdenv,
fetchFromGitHub,
fetchpatch,
cmake,
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "civetweb";
version = "1.15";
version = "1.16";
src = fetchFromGitHub {
owner = "civetweb";
repo = "civetweb";
rev = "v${version}";
sha256 = "sha256-Qh6BGPk7a01YzCeX42+Og9M+fjXRs7kzNUCyT4mYab4=";
tag = "v${finalAttrs.version}";
hash = "sha256-eXb5f2jhtfxDORG+JniSy17kzB7A4vM0UnUQAfKTquU=";
};
patches = [
./fix-pkg-config-files.patch
(fetchpatch {
name = "CVE-2025-55763.patch";
url = "https://github.com/civetweb/civetweb/commit/76e222bcb77ba8452e5da4e82ae6cecd499c25e0.patch";
hash = "sha256-gv2FR53SxmRCCTRjj17RhIjoHkgOz5ENs9oHmcfFmw8=";
})
];
outputs = [
"out"
"dev"
@@ -47,6 +57,9 @@ stdenv.mkDerivation rec {
#
# [1] https://github.com/civetweb/civetweb/blob/cafd5f8fae3b859b7f8c29feb03ea075c7221497/CMakeLists.txt#L56
"-DCIVETWEB_THREAD_STACK_SIZE=0"
# Workaround CMake 4 compat
(lib.cmakeFeature "CMAKE_POLICY_VERSION_MINIMUM" "3.5")
];
meta = {
@@ -55,4 +68,4 @@ stdenv.mkDerivation rec {
homepage = "https://github.com/civetweb/civetweb";
license = [ lib.licenses.mit ];
};
}
})
@@ -19,17 +19,17 @@
let
deltachat-rpc-server' = deltachat-rpc-server.overrideAttrs rec {
version = "2.11.0";
version = "2.15.0";
src = fetchFromGitHub {
owner = "chatmail";
repo = "core";
tag = "v${version}";
hash = "sha256-W1DEG72Fk98pp0lm5+AyVb9zcpE5c2mqElOHFpofx58=";
hash = "sha256-sFAE90ptPBzT/w4wlGgQe1ERMD2ZAvf4pZ8YW8NEkLU=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
pname = "chatmail-core";
inherit version src;
hash = "sha256-P/wIat9sflXfloboMdN15EGo1cqxgPZ0OBDYF/iB/7A=";
hash = "sha256-MmSjIn4x3b2gpagJnl2r4Z5DXSufZMoohvAf0v5VUbE=";
};
};
electron = electron_37;
@@ -37,19 +37,19 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "deltachat-desktop";
version = "2.11.0";
version = "2.15.0";
src = fetchFromGitHub {
owner = "deltachat";
repo = "deltachat-desktop";
tag = "v${finalAttrs.version}";
hash = "sha256-M/QqD+g85o4xHF8BmusqU2sNIk9NFzOtCnz+MAk9/74=";
hash = "sha256-7AERqu2M/WeTDw62SF921vXROttZyvC1LmRZG3+aDPI=";
};
pnpmDeps = pnpm.fetchDeps {
inherit (finalAttrs) pname version src;
fetcherVersion = 1;
hash = "sha256-2EKu0ju/TTyVTYPjmStXsGoFdJEq5NkHqtQZggY2xbE=";
hash = "sha256-wdexath7r2roBVw1SSpJcMp8LSs/X5QNiLNHxQF60Lg=";
};
nativeBuildInputs = [
@@ -66,6 +66,7 @@ stdenv.mkDerivation (finalAttrs: {
env = {
ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
SKIP_FUSES = true; # EACCES: permission denied
VERSION_INFO_GIT_REF = finalAttrs.src.tag;
};
+50
View File
@@ -0,0 +1,50 @@
{
lib,
stdenv,
fetchFromBitbucket,
cmake,
freetype,
pkg-config,
pulseaudio,
gtk3,
libxkbcommon,
udev,
libuuid,
wrapGAppsHook3,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "deniseemu";
version = "2.6";
src = fetchFromBitbucket {
owner = "piciji";
repo = "denise";
rev = "v${finalAttrs.version}";
hash = "sha256-+PJtYuiZ1eawuVCTo1kqtCmIoBjNKOGRDnbuH3KRpNM=";
};
buildInputs = [
gtk3
udev
libuuid
libxkbcommon
freetype
pulseaudio
];
nativeBuildInputs = [
cmake
pkg-config
wrapGAppsHook3
];
meta = {
homepage = "https://bitbucket.org/piciji/denise";
downloadPage = "https://sourceforge.net/projects/deniseemu/";
description = "C64 / Amiga Emulator";
license = [ lib.licenses.gpl3Plus ];
maintainers = [ lib.maintainers.matthewcroughan ];
platforms = lib.platforms.linux;
};
})
+10
View File
@@ -6,6 +6,7 @@
bison,
flex,
gettext,
makeWrapper,
SDL2,
SDL2_image,
SDL2_mixer,
@@ -48,6 +49,7 @@ stdenv.mkDerivation (finalAttrs: {
bison
flex
gettext
makeWrapper
];
cmakeFlags = [
(lib.cmakeBool "CMAKE_VERBOSE_MAKEFILE" true)
@@ -55,10 +57,18 @@ stdenv.mkDerivation (finalAttrs: {
(lib.cmakeFeature "CMAKE_INSTALL_DATAROOTDIR" "${placeholder "out"}/share")
];
# This makes sure the default engine (dreamer) will be called from
# the /nix/store/ as well when starting a new game
postFixup = ''
wrapProgram $out/bin/dreamchess \
--prefix PATH : $out/bin
'';
doInstallCheck = true;
postInstallCheck = ''
stat "''${!outputBin}/bin/${finalAttrs.meta.mainProgram}"
stat "''${!outputBin}/bin/dreamer"
'';
meta = {

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