Merge remote-tracking branch 'origin/master' into r-updates

This commit is contained in:
Justin Bedo
2024-08-24 07:58:25 +10:00
1418 changed files with 40273 additions and 23619 deletions

4
.github/CODEOWNERS vendored
View File

@@ -75,8 +75,8 @@
# @raitobezarius is not "code owner", but is listed here to be notified of changes
# pertaining to the Nix package manager.
# i.e. no authority over those files.
pkgs/tools/package-management/nix/ @raitobezarius
nixos/modules/installer/tools/nix-fallback-paths.nix @raitobezarius
pkgs/tools/package-management/nix/ @NixOS/nix-team @raitobezarius
nixos/modules/installer/tools/nix-fallback-paths.nix @NixOS/nix-team @raitobezarius
# Nixpkgs documentation
/maintainers/scripts/db-to-md.sh @jtojnar @ryantm

View File

@@ -21,7 +21,7 @@ For new packages please briefly describe the package or provide a link to its ho
- [NixOS test(s)](https://nixos.org/manual/nixos/unstable/index.html#sec-nixos-tests) (look inside [nixos/tests](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests))
- and/or [package tests](https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#package-tests)
- or, for functions and "core" functionality, tests in [lib/tests](https://github.com/NixOS/nixpkgs/blob/master/lib/tests) or [pkgs/test](https://github.com/NixOS/nixpkgs/blob/master/pkgs/test)
- made sure NixOS tests are [linked](https://nixos.org/manual/nixpkgs/unstable/#ssec-nixos-tests-linking) to the relevant packages
- made sure NixOS tests are [linked](https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#linking-nixos-module-tests-to-a-package) to the relevant packages
- [ ] Tested compilation of all packages that depend on this change using `nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD"`. Note: all changes have to be committed, also see [nixpkgs-review usage](https://github.com/Mic92/nixpkgs-review#usage)
- [ ] Tested basic functionality of all binary files (usually in `./result/bin/`)
- [24.11 Release Notes](https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2411.section.md) (or backporting [23.11](https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2311.section.md) and [24.05](https://github.com/NixOS/nixpkgs/blob/master/nixos/doc/manual/release-notes/rl-2405.section.md) Release notes)

View File

@@ -83,7 +83,7 @@ jobs:
if (( "${#unformattedFiles[@]}" > 0 )); then
echo "Some new/changed Nix files are not properly formatted"
echo "Please run the following in \`nix-shell\`:"
echo "Please go to the Nixpkgs root directory, run \`nix-shell\`, then:"
echo "nixfmt ${unformattedFiles[*]@Q}"
exit 1
fi

View File

@@ -3,6 +3,7 @@ Anderson Torres <torres.anderson.85@protonmail.com>
Atemu <git@atemu.net> <atemu.main@gmail.com>
Daniel Løvbrøtte Olsen <me@dandellion.xyz> <daniel.olsen99@gmail.com>
Fabian Affolter <mail@fabian-affolter.ch> <fabian@affolter-engineering.ch>
goatastronaut0212 <goatastronaut0212@proton.me> <goatastronaut0212@outlook.com>
Janne Heß <janne@hess.ooo> <dasJ@users.noreply.github.com>
Jörg Thalheim <joerg@thalheim.io> <Mic92@users.noreply.github.com>
Martin Weinelt <hexa@darmstadt.ccc.de> <mweinelt@users.noreply.github.com>

View File

@@ -1,4 +1,4 @@
{
"rev": "521d48afa9ae596930a95325529df27fa7135ff5",
"sha256": "0a1pa5azw990narsfipdli1wng4nc3vhvrp00hb8v1qfchcq7dc9"
"rev": "4de4818c1ffa76d57787af936e8a23648bda6be4",
"sha256": "0l3b9jr5ydzqgvd10j12imc9jqb6jv5v2bdi1gyy5cwkwplfay67"
}

View File

@@ -3,32 +3,122 @@
Nixpkgs provides a variety of wrapper functions that help build commonly useful derivations.
Like [`stdenv.mkDerivation`](#sec-using-stdenv), each of these build helpers creates a derivation, but the arguments passed are different (usually simpler) from those required by `stdenv.mkDerivation`.
## `runCommand` {#trivial-builder-runCommand}
`runCommand :: String -> AttrSet -> String -> Derivation`
## `runCommandWith` {#trivial-builder-runCommandWith}
The result of `runCommand name drvAttrs buildCommand` is a derivation that is built by running the specified shell commands.
The function `runCommandWith` returns a derivation built using the specified command(s), in a specified environment.
By default `runCommand` runs in a stdenv with no compiler environment, whereas [`runCommandCC`](#trivial-builder-runCommandCC) uses the default stdenv, `pkgs.stdenv`.
It is the underlying base function of all [`runCommand*` variants].
The general behavior is controlled via a single attribute set passed
as the first argument, and allows specifying `stdenv` freely.
`name :: String`
: The name that Nix will append to the store path in the same way that `stdenv.mkDerivation` uses its `name` attribute.
The following [`runCommand*` variants] exist: `runCommand`, `runCommandCC`, and `runCommandLocal`.
`drvAttr :: AttrSet`
: Attributes to pass to the underlying call to [`stdenv.mkDerivation`](#chap-stdenv).
[`runCommand*` variants]: #trivial-builder-runCommand
`buildCommand :: String`
### Type {#trivial-builder-runCommandWith-Type}
```
runCommandWith :: {
name :: name;
stdenv? :: Derivation;
runLocal? :: Bool;
derivationArgs? :: { ... };
} -> String -> Derivation
```
### Inputs {#trivial-builder-runCommandWith-Inputs}
`name` (String)
: The derivation's name, which Nix will append to the store path; see [`mkDerivation`](#sec-using-stdenv).
`runLocal` (Boolean)
: If set to `true` this forces the derivation to be built locally, not using [substitutes] nor remote builds.
This is intended for very cheap commands (<1s execution time) which can be sped up by avoiding the network round-trip(s).
Its effect is to set [`preferLocalBuild = true`][preferLocalBuild] and [`allowSubstitutes = false`][allowSubstitutes].
::: {.note}
This prevents the use of [substituters][substituter], so only set `runLocal` (or use `runCommandLocal`) when certain the user will
always have a builder for the `system` of the derivation. This should be true for most trivial use cases
(e.g., just copying some files to a different location or adding symlinks) because there the `system`
is usually the same as `builtins.currentSystem`.
:::
`stdenv` (Derivation)
: The [standard environment](#chap-stdenv) to use, defaulting to `pkgs.stdenv`
`derivationArgs` (Attribute set)
: Additional arguments for [`mkDerivation`](#sec-using-stdenv).
`buildCommand` (String)
: Shell commands to run in the derivation builder.
::: {.note}
You have to create a file or directory `$out` for Nix to be able to run the builder successfully.
:::
[allowSubstitutes]: https://nixos.org/nix/manual/#adv-attr-allowSubstitutes
[preferLocalBuild]: https://nixos.org/nix/manual/#adv-attr-preferLocalBuild
[substituter]: https://nix.dev/manual/nix/latest/glossary#gloss-substituter
[substitutes]: https://nix.dev/manual/nix/2.23/glossary#gloss-substitute
::: {.example #ex-runcommandwith}
# Invocation of `runCommandWith`
```nix
runCommandWith {
name = "example";
derivationArgs.nativeBuildInputs = [ cowsay ];
} ''
cowsay > $out <<EOMOO
'runCommandWith' is a bit cumbersome,
so we have more ergonomic wrappers.
EOMOO
''
```
:::
## `runCommand` and `runCommandCC` {#trivial-builder-runCommand}
The function `runCommand` returns a derivation built using the specified command(s), in the `stdenvNoCC` environment.
`runCommandCC` is similar but uses the default compiler environment. To minimize dependencies, `runCommandCC`
should only be used when the build command needs a C compiler.
`runCommandLocal` is also similar to `runCommand`, but forces the derivation to be built locally.
See the note on [`runCommandWith`] about `runLocal`.
[`runCommandWith`]: #trivial-builder-runCommandWith
### Type {#trivial-builder-runCommand-Type}
```
runCommand :: String -> AttrSet -> String -> Derivation
runCommandCC :: String -> AttrSet -> String -> Derivation
runCommandLocal :: String -> AttrSet -> String -> Derivation
```
### Input {#trivial-builder-runCommand-Input}
While the type signature(s) differ from [`runCommandWith`], individual arguments with the same name will have the same type and meaning:
`name` (String)
: The derivation's name
`derivationArgs` (Attribute set)
: Additional parameters passed to [`mkDerivation`]
`buildCommand` (String)
: The command(s) run to build the derivation.
::: {.example #ex-runcommand-simple}
# Invocation of `runCommand`
```nix
(import <nixpkgs> {}).runCommand "my-example" {} ''
runCommand "my-example" {} ''
echo My example command is running
mkdir $out
@@ -49,18 +139,24 @@ By default `runCommand` runs in a stdenv with no compiler environment, whereas [
```
:::
## `runCommandCC` {#trivial-builder-runCommandCC}
This works just like `runCommand`. The only difference is that it also provides a C compiler in `buildCommand`'s environment. To minimize your dependencies, you should only use this if you are sure you will need a C compiler as part of running your command.
## `runCommandLocal` {#trivial-builder-runCommandLocal}
Variant of `runCommand` that forces the derivation to be built locally, it is not substituted. This is intended for very cheap commands (<1s execution time). It saves on the network round-trip and can speed up a build.
::: {.note}
This sets [`allowSubstitutes` to `false`](https://nixos.org/nix/manual/#adv-attr-allowSubstitutes), so only use `runCommandLocal` if you are certain the user will always have a builder for the `system` of the derivation. This should be true for most trivial use cases (e.g., just copying some files to a different location or adding symlinks) because there the `system` is usually the same as `builtins.currentSystem`.
`runCommand name derivationArgs buildCommand` is equivalent to
```nix
runCommandWith {
inherit name derivationArgs;
stdenv = stdenvNoCC;
} buildCommand
```
Likewise, `runCommandCC name derivationArgs buildCommand` is equivalent to
```nix
runCommandWith {
inherit name derivationArgs;
} buildCommand
```
:::
## Writing text files {#trivial-builder-text-writing}
Nixpkgs provides the following functions for producing derivations which write text files or executable scripts into the Nix store.

View File

@@ -232,6 +232,14 @@ To add a new plugin, run `nix-shell -p vimPluginsUpdater --run 'vim-plugins-upda
Finally, there are some plugins that are also packaged in nodePackages because they have Javascript-related build steps, such as running webpack. Those plugins are not listed in `vim-plugin-names` or managed by `vimPluginsUpdater` at all, and are included separately in `overrides.nix`. Currently, all these plugins are related to the `coc.nvim` ecosystem of the Language Server Protocol integration with Vim/Neovim.
### Plugin optional configuration {#vim-plugin-required-snippet}
Some plugins require specific configuration to work. We choose not to
patch those plugins but expose the necessary configuration under
`PLUGIN.passthru.initLua` for neovim plugins. For instance, the `unicode-vim` plugin
needs the path towards a unicode database so we expose the following snippet `vim.g.Unicode_data_directory="${self.unicode-vim}/autoload/unicode"` under `vimPlugins.unicode-vim.passthru.initLua`.
## Updating plugins in nixpkgs {#updating-plugins-in-nixpkgs}
Run the update script with a GitHub API token that has at least `public_repo` access. Running the script without the token is likely to result in rate-limiting (429 errors). For steps on creating an API token, please refer to [GitHub's token documentation](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token).

View File

@@ -0,0 +1,102 @@
# Build Support {#sec-build-support}
## `pkgs.substitute` {#pkgs-substitute}
`pkgs.substitute` is a wrapper around [the `substitute` Bash function](#fun-substitute) in the standard environment.
It replaces strings in `src` as specified by the `substitutions` argument.
:::{.example #ex-pkgs-substitute}
# Usage of `pkgs.substitute`
In a build script, the line:
```bash
substitute $infile $outfile --replace-fail @foo@ ${foopkg}/bin/foo
```
is equivalent to:
```nix
{ substitute, foopkg }:
substitute {
src = ./sourcefile.txt;
substitutions = [
"--replace"
"@foo@"
"${foopkg}/bin/foo"
];
}
```
:::
## `pkgs.substituteAll` {#pkgs-substituteall}
`pkgs.substituteAll` substitutes all instances of `@varName@` (`@`s included) in file `src` with the value of the corresponding environment variable.
As this uses the [`substituteAll`] (#fun-substitute) function, its limitations regarding variable names that will or will not be replaced also apply here.
:::{.example #ex-pkgs-substituteAll}
# Usage of `pkgs.substituteAll`
If `say-goodbye.sh` contains the following:
```bash
#! @bash@/bin/bash
echo @unchanged@
@hello@/bin/hello --greeting @greeting@
```
the following derivation will make substitutions to `@bash@`, `@hello@`, and `@greeting@`:
```nix
{
substituteAll,
bash,
hello,
}:
substituteAll {
src = ./say-goodbye.sh;
env = {
inherit bash hello;
greeting = "goodbye";
};
}
```
such that `$out` will result in something like the following:
```
#! /nix/store/s30jrpgav677fpc9yvkqsib70xfmx7xi-bash-5.2p26/bin/bash
echo @unchanged@
/nix/store/566f5isbvw014h7knmzmxa5l6hshx43k-hello-2.12.1/bin/hello --greeting goodbye
```
:::
## `pkgs.substituteAllFiles` {#pkgs-substituteallfiles}
`pkgs.substituteAllFiles` replaces `@varName@` with the value of the environment variable `varName`.
It expects `src` to be a directory and requires a `files` argument that specifies which files will be subject to replacements; only these files will be placed in `$out`.
As it also uses the `substituteAll` function, it is subject to the same limitations on environment variables as discussed in [pkgs.substituteAll](#pkgs-substituteall).
:::{.example #ex-pkgs-substitute-all-files}
# Usage of `pkgs.substituteAllFiles`
If the current directory contains `{foo,bar,baz}.txt` and the following `default.nix`
```nix
{ substituteAllFiles }:
substituteAllFiles {
src = ./.;
files = [
"foo.txt"
"bar.txt"
];
hello = "there";
}
```
in the resulting derivation, every instance of `@hello@` will be replaced with `there` in `$out/foo.txt` and` `$out/bar.txt`; `baz.txt` will not be processed nor will it appear in `$out`.
:::

View File

@@ -27,4 +27,5 @@ urxvt.section.md
vcpkg.section.md
weechat.section.md
xorg.section.md
build-support.md
```

View File

@@ -219,7 +219,7 @@ rec {
else "(${t.description})";
# When adding new types don't forget to document them in
# nixos/doc/manual/development/option-types.xml!
# nixos/doc/manual/development/option-types.section.md!
types = rec {
raw = mkOptionType {

View File

@@ -212,6 +212,12 @@
githubId = 882455;
name = "Elliot Cameron";
};
_404wolf = {
email = "wolfmermelstein@gmail.com";
github = "404wolf";
githubId = 108041238;
name = "Wolf Mermelstein";
};
_414owen = {
email = "owen@owen.cafe";
github = "414owen";
@@ -828,6 +834,12 @@
githubId = 20405311;
name = "Aksh Gupta";
};
aksiksi = {
email = "assil@ksiksi.net";
github = "aksiksi";
githubId = 916621;
name = "Assil Ksiksi";
};
akssri = {
email = "akssri@vakra.xyz";
github = "akssri";
@@ -963,6 +975,12 @@
matrix = "@alexshpilkin:matrix.org";
name = "Alexander Shpilkin";
};
AlexSKaye = {
email = "AlexSKaye@proton.me";
github = "AlexSKaye";
githubId = 3017212;
name = "Alex S. Kaye";
};
alexvorobiev = {
email = "alexander.vorobiev@gmail.com";
github = "alexvorobiev";
@@ -1887,7 +1905,7 @@
keys = [ { fingerprint = "BF47 81E1 F304 1ADF 18CE C401 DE16 C7D1 536D A72F"; } ];
};
astronaut0212 = {
email = "goatastronaut0212@proton.me";
email = "goatastronaut0212@outlook.com";
github = "goatastronaut0212";
githubId = 119769817;
name = "goatastronaut0212";
@@ -2702,6 +2720,14 @@
githubId = 5700358;
name = "Thomas Blank";
};
bleetube = {
email = "git@blee.tube";
matrix = "@blee:satstack.cloud";
name = "Brian Lee";
github = "bleetube";
githubId = 77934086;
keys = [ { fingerprint = "4CA3 48F6 8FE1 1777 8EDA 3860 B9A2 C1B0 25EC 2C55"; } ];
};
blinry = {
name = "blinry";
email = "mail@blinry.org";
@@ -3423,6 +3449,12 @@
githubId = 977929;
name = "Cody Allen";
};
Celibistrial = {
email = "ryan80222@gmail.com";
github = "Celibistrial";
githubId = 82810795;
name = "Gaurav Choudhury";
};
centromere = {
email = "nix@centromere.net";
github = "centromere";
@@ -5634,7 +5666,7 @@
matrix = "@e1mo:chaos.jetzt";
github = "e1mo";
githubId = 61651268;
name = "Moritz Fromm";
name = "Nina Fromm";
keys = [ { fingerprint = "67BE E563 43B6 420D 550E DF2A 6D61 7FD0 A85B AADA"; } ];
};
eadwu = {
@@ -7671,6 +7703,12 @@
githubId = 1621335;
name = "Andrew Trachenko";
};
gordon-bp = {
email = "gordy@hanakano.com";
github = "Gordon-BP";
githubId = 77560236;
name = "Gordon Clark";
};
gotcha = {
email = "gotcha@bubblenet.be";
github = "gotcha";
@@ -8559,6 +8597,11 @@
name = "Iago Manoel Brito";
keys = [ { fingerprint = "DF90 9D58 BEE4 E73A 1B8C 5AF3 35D3 9F9A 9A1B C8DA"; } ];
};
i-al-istannen = {
name = "I Al Istannen";
github = "I-Al-Istannen";
githubId = 20284688;
};
iammrinal0 = {
email = "nixpkgs@mrinalpurohit.in";
matrix = "@iammrinal0:nixos.dev";
@@ -8687,6 +8730,12 @@
githubId = 7481521;
name = "Balázs Lengyel";
};
ilaumjd = {
email = "ilaumjd@gmail.com";
github = "ilaumjd";
githubId = 16514431;
name = "Ilham AM";
};
ilian = {
email = "ilian@tuta.io";
github = "ilian";
@@ -10097,6 +10146,12 @@
githubId = 15893072;
name = "Josh van Leeuwen";
};
jovandeginste = {
email = "jo.vandeginste@gmail.com";
github = "jovandeginste";
githubId = 3170771;
name = "Jo Vandeginste";
};
jpagex = {
name = "Jérémy Pagé";
email = "contact@jeremypage.me";
@@ -14429,6 +14484,12 @@
githubId = 2287221;
name = "Andreas Zweili";
};
nebunebu = {
email = "neb.nebuchadnezzar@gmail.com";
github = "nebunebu";
githubId = 87451010;
name = "nebu";
};
Necior = {
email = "adrian@sadlocha.eu";
github = "Necior";
@@ -15157,6 +15218,12 @@
githubId = 61095988;
name = "Brian Shu";
};
oberth-effect = {
email = "stepan.venclik@gmail.com";
github = "oberth-effect";
githubId = 88210794;
name = "Štěpán Venclík";
};
obfusk = {
email = "flx@obfusk.net";
matrix = "@obfusk:matrix.org";
@@ -15210,6 +15277,12 @@
githubId = 7397786;
name = "Odysseas Georgoudis";
};
ofalvai = {
email = "ofalvai@gmail.com";
github = "ofalvai";
githubId = 1694986;
name = "Olivér Falvai";
};
ofek = {
email = "oss@ofek.dev";
github = "ofek";
@@ -15463,6 +15536,12 @@
github = "OlivierNicole";
githubId = 14031333;
};
ottoblep = {
name = "Severin Lochschmidt";
email = "seviron53@gmail.com";
github = "ottoblep";
githubId = 57066925;
};
otwieracz = {
email = "slawek@otwiera.cz";
github = "otwieracz";
@@ -17103,11 +17182,11 @@
name = "Szymon Scholz";
};
ratcornu = {
email = "ratcornu@skaven.org";
email = "ratcornu+programmation@skaven.org";
github = "RatCornu";
githubId = 98173832;
name = "Balthazar Patiachvili";
matrix = "@ratcornu:skweel.skaven.org";
matrix = "@ratcornu:skaven.org";
keys = [ { fingerprint = "1B91 F087 3D06 1319 D3D0 7F91 FA47 BDA2 6048 9ADA"; } ];
};
ratsclub = {
@@ -17182,6 +17261,12 @@
githubId = 52847440;
name = "Ryan Burns";
};
rcmlz = {
email = "haguga-nixos@yahoo.com";
github = "rcmlz";
githubId = 19784049;
name = "rcmlz";
};
rcoeurjoly = {
email = "rolandcoeurjoly@gmail.com";
github = "RCoeurjoly";
@@ -18545,6 +18630,12 @@
githubId = 17243347;
name = "Sebastian Sellmeier";
};
sedlund = {
email = "scott+nixpkgs@teraton.com";
github = "sedlund";
githubId = 8109138;
name = "Scott Edlund";
};
sefidel = {
name = "sefidel";
email = "contact@sefidel.net";

View File

@@ -73,6 +73,9 @@ OK_MISSING_BY_PACKAGE = {
"kwin": {
"display-info", # newer versions identify as libdisplay-info
},
"libksysguard": {
"Libcap", # used to call setcap at build time and nothing else
},
"mlt": {
"Qt5", # intentionally disabled
"SWIG",
@@ -88,6 +91,9 @@ OK_MISSING_BY_PACKAGE = {
"powerdevil": {
"DDCUtil", # cursed, intentionally disabled
},
"print-manager": {
"PackageKitQt6", # used for auto-installing drivers which does not work for obvious reasons
},
"pulseaudio-qt": {
"Qt6Qml", # tests only
"Qt6Quick",

View File

@@ -104,6 +104,7 @@ luv,,,,1.48.0-2,,
lush.nvim,,,https://luarocks.org/dev,,,teto
lyaml,,,,,,lblasc
lz.n,,,,,,mrcjkb
lzn-auto-require,,,,,,mrcjkb
magick,,,,,5.1,donovanglover
markdown,,,,,,
mediator_lua,,,,,,
1 name rockspec ref server version luaversion maintainers
104 lush.nvim https://luarocks.org/dev teto
105 lyaml lblasc
106 lz.n mrcjkb
107 lzn-auto-require mrcjkb
108 magick 5.1 donovanglover
109 markdown
110 mediator_lua

View File

@@ -61,6 +61,8 @@
- [wg-access-server](https://github.com/freifunkMUC/wg-access-server/), an all-in-one WireGuard VPN solution with a web ui for connecting devices. Available at [services.wg-access-server](#opt-services.wg-access-server.enable).
- [Pingvin Share](https://github.com/stonith404/pingvin-share), a self-hosted file sharing platform and an alternative for WeTransfer. Available as [services.pingvin-share](#opt-services.pingvin-share.enable).
- [Envision](https://gitlab.com/gabmus/envision), a UI for building, configuring and running Monado, the open source OpenXR runtime. Available as [programs.envision](#opt-programs.envision.enable).
- [Localsend](https://localsend.org/), an open source cross-platform alternative to AirDrop. Available as [programs.localsend](#opt-programs.localsend.enable).
@@ -73,6 +75,8 @@
- [Playerctld](https://github.com/altdesktop/playerctl), a daemon to track media player activity. Available as [services.playerctld](option.html#opt-services.playerctld).
- [MenhirLib](https://gitlab.inria.fr/fpottier/menhir/-/tree/master/coq-menhirlib) A support library for verified Coq parsers produced by Menhir.
- [Glance](https://github.com/glanceapp/glance), a self-hosted dashboard that puts all your feeds in one place. Available as [services.glance](option.html#opt-services.glance).
- [Apache Tika](https://github.com/apache/tika), a toolkit that detects and extracts metadata and text from over a thousand different file types. Available as [services.tika](option.html#opt-services.tika).
@@ -87,6 +91,9 @@
- [Proton Mail bridge](https://proton.me/mail/bridge), a desktop application that runs in the background, encrypting and decrypting messages as they enter and leave your computer. It lets you add your Proton Mail account to your favorite email client via IMAP/SMTP by creating a local email server on your computer.
- [chromadb](https://www.trychroma.com/), an open-source AI application
database. Batteries included. Available as [services.chromadb](options.html#opt-services.chromadb.enable).
## Backward Incompatibilities {#sec-release-24.11-incompatibilities}
- `transmission` package has been aliased with a `trace` warning to `transmission_3`. Since [Transmission 4 has been released last year](https://github.com/transmission/transmission/releases/tag/4.0.0), and Transmission 3 will eventually go away, it was decided perform this warning alias to make people aware of the new version. The `services.transmission.package` defaults to `transmission_3` as well because the upgrade can cause data loss in certain specific usage patterns (examples: [#5153](https://github.com/transmission/transmission/issues/5153), [#6796](https://github.com/transmission/transmission/issues/6796)). Please make sure to back up to your data directory per your usage:
@@ -253,6 +260,8 @@
- `/share/nano` is now only linked when `programs.nano.enable` is enabled.
- PPD files for Utax printers got renamed (spaces replaced by underscores) in newest `foomatic-db` package; users of Utax printers might need to adapt their `hardware.printers.ensurePrinters.*.model` value.
- `libe57format` has been updated to `>= 3.0.0`, which contains some backward-incompatible API changes. See the [release note](https://github.com/asmaloney/libE57Format/releases/tag/v3.0.0) for more details.
- `gitlab` deprecated support for *runner registration tokens* in GitLab 16.0, disabled their support in GitLab 17.0 and will
@@ -319,6 +328,12 @@
- The `services.trust-dns` module has been renamed to `services.hickory-dns`.
- The `lsh` package and the `services.lshd` module have been removed as they had no maintainer in Nixpkgs and hadn’t seen an upstream release in over a decade. It is recommended to migrate to `openssh` and `services.openssh`.
- `opencv2` and `opencv3` have been removed, as they are obsolete and
were not used by any other package. External users are encouraged to
migrate to OpenCV 4.
## Other Notable Changes {#sec-release-24.11-notable-changes}
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
@@ -383,9 +398,6 @@
- `nix.channel.enable = false` no longer implies `nix.settings.nix-path = []`.
Since Nix 2.13, a `nix-path` set in `nix.conf` cannot be overriden by the `NIX_PATH` configuration variable.
- Buildkite Agents are now each running in their own private `/tmp`.
To return to the old behaviour, set `systemd.services.buildkite-agent-${name}.serviceConfig.PrivateTmp = false;`.
## Detailed migration information {#sec-release-24.11-migration}
### `sound` options removal {#sec-release-24.11-migration-sound}

View File

@@ -458,6 +458,7 @@
./services/continuous-integration/woodpecker/server.nix
./services/databases/aerospike.nix
./services/databases/cassandra.nix
./services/databases/chromadb.nix
./services/databases/clickhouse.nix
./services/databases/cockroachdb.nix
./services/databases/couchdb.nix
@@ -1208,7 +1209,6 @@
./services/networking/spacecookie.nix
./services/networking/spiped.nix
./services/networking/squid.nix
./services/networking/ssh/lshd.nix
./services/networking/ssh/sshd.nix
./services/networking/sslh.nix
./services/networking/strongswan-swanctl/module.nix
@@ -1467,6 +1467,7 @@
./services/web-apps/phylactery.nix
./services/web-apps/photoprism.nix
./services/web-apps/pict-rs.nix
./services/web-apps/pingvin-share.nix
./services/web-apps/plantuml-server.nix
./services/web-apps/plausible.nix
./services/web-apps/powerdns-admin.nix

View File

@@ -1,8 +1,4 @@
# WARNING: If you enable this profile, you will NOT be able to switch to a new
# configuration and thus you will not be able to rebuild your system with
# nixos-rebuild!
{ lib, ... }:
{ lib, pkgs, ... }:
{
@@ -31,4 +27,8 @@
# string "perl".
system.forbiddenDependenciesRegexes = ["perl"];
# Re-add nixos-rebuild to the systemPackages that was removed by the
# `system.disableInstallerTools` option.
environment.systemPackages = [pkgs.nixos-rebuild];
}

View File

@@ -70,6 +70,7 @@ in
(mkRemovedOptionModule [ "services" "hydron" ] "The `services.hydron` module has been removed as the project has been archived upstream since 2022 and is affected by a severe remote code execution vulnerability.")
(mkRemovedOptionModule [ "services" "ihatemoney" ] "The ihatemoney module has been removed for lack of downstream maintainer")
(mkRemovedOptionModule [ "services" "kippo" ] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule [ "services" "lshd" ] "The corresponding package was removed from nixpkgs as it had no maintainer in Nixpkgs and hasn't seen an upstream release in over a decades.")
(mkRemovedOptionModule [ "services" "mailpile" ] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule [ "services" "marathon" ] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule [ "services" "mathics" ] "The Mathics module has been removed")

File diff suppressed because it is too large Load Diff

View File

@@ -205,8 +205,6 @@ in
serviceConfig = {
ExecStart = "${cfg.package}/bin/buildkite-agent start --config ${cfg.dataDir}/buildkite-agent.cfg";
User = "buildkite-agent-${name}";
# Workaround https://github.com/buildkite/agent/issues/2916
PrivateTmp = lib.mkDefault true;
RestartSec = 5;
Restart = "on-failure";
TimeoutSec = 10;

View File

@@ -0,0 +1,107 @@
{
config,
pkgs,
lib,
...
}:
let
cfg = config.services.chromadb;
inherit (lib)
mkEnableOption
mkOption
mkIf
types
literalExpression
;
in
{
meta.maintainers = with lib.maintainers; [ drupol ];
options = {
services.chromadb = {
enable = mkEnableOption "ChromaDB, an open-source AI application database.";
package = mkOption {
type = types.package;
example = literalExpression "pkgs.python3Packages.chromadb";
default = pkgs.python3Packages.chromadb;
defaultText = "pkgs.python3Packages.chromadb";
description = "ChromaDB package to use.";
};
host = mkOption {
type = types.str;
default = "127.0.0.1";
description = ''
Defines the IP address by which ChromaDB will be accessible.
'';
};
port = mkOption {
type = types.port;
default = 8000;
description = ''
Defined the port number to listen.
'';
};
logFile = mkOption {
type = types.path;
default = "/var/log/chromadb/chromadb.log";
description = ''
Specifies the location of file for logging output.
'';
};
dbpath = mkOption {
type = types.str;
default = "/var/lib/chromadb";
description = "Location where ChromaDB stores its files";
};
openFirewall = mkOption {
type = types.bool;
default = false;
description = ''
Whether to automatically open the specified TCP port in the firewall.
'';
};
};
};
config = mkIf cfg.enable {
systemd.services.chromadb = {
description = "ChromaDB";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
StateDirectory = "chromadb";
WorkingDirectory = "/var/lib/chromadb";
LogsDirectory = "chromadb";
ExecStart = "${lib.getExe cfg.package} run --path ${cfg.dbpath} --host ${cfg.host} --port ${toString cfg.port} --log-path ${cfg.logFile}";
Restart = "on-failure";
ProtectHome = true;
ProtectSystem = "strict";
PrivateTmp = true;
PrivateDevices = true;
ProtectHostname = true;
ProtectClock = true;
ProtectKernelTunables = true;
ProtectKernelModules = true;
ProtectKernelLogs = true;
ProtectControlGroups = true;
NoNewPrivileges = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
RemoveIPC = true;
PrivateMounts = true;
DynamicUser = true;
};
};
networking.firewall.allowedTCPPorts = lib.optionals cfg.openFirewall [ cfg.port ];
};
}

View File

@@ -26,6 +26,7 @@ in {
lomiri-clock-app
lomiri-download-manager
lomiri-filemanager-app
lomiri-gallery-app
lomiri-polkit-agent
lomiri-schemas # exposes some required dbus interfaces
lomiri-session # wrappers to properly launch the session

View File

@@ -32,7 +32,7 @@
default = false;
type = lib.types.bool;
description = ''
Enable dynamic CDI configuration for NVidia devices by running
Enable dynamic CDI configuration for Nvidia devices by running
nvidia-container-toolkit on boot.
'';
};

View File

@@ -108,6 +108,16 @@ in {
List of Systemd services to require and wait for when starting the application service.
'';
};
registerToSynapse = lib.mkOption {
type = lib.types.bool;
default = config.services.matrix-synapse.enable;
defaultText = lib.literalExpression "config.services.matrix-synapse.enable";
description = ''
Whether to add the bridge's app service registration file to
`services.matrix-synapse.settings.app_service_config_files`.
'';
};
};
config = lib.mkIf cfg.enable {
@@ -121,6 +131,13 @@ in {
users.groups.mautrix-whatsapp = {};
services.matrix-synapse = lib.mkIf cfg.registerToSynapse {
settings.app_service_config_files = [ registrationFile ];
};
systemd.services.matrix-synapse = lib.mkIf cfg.registerToSynapse {
serviceConfig.SupplementaryGroups = [ "mautrix-whatsapp" ];
};
services.mautrix-whatsapp.settings = lib.mkMerge (map mkDefaults [
defaultConfig
# Note: this is defined here to avoid the docs depending on `config`
@@ -155,10 +172,15 @@ in {
chmod 640 ${registrationFile}
umask 0177
# 1. Overwrite registration tokens in config
# 2. If environment variable MAUTRIX_WHATSAPP_BRIDGE_LOGIN_SHARED_SECRET
# is set, set it as the login shared secret value for the configured
# homeserver domain.
${pkgs.yq}/bin/yq -s '.[0].appservice.as_token = .[1].as_token
| .[0].appservice.hs_token = .[1].hs_token
| .[0]' '${settingsFile}' '${registrationFile}' \
> '${settingsFile}.tmp'
| .[0]
| if env.MAUTRIX_WHATSAPP_BRIDGE_LOGIN_SHARED_SECRET then .bridge.login_shared_secret_map.[.homeserver.domain] = env.MAUTRIX_WHATSAPP_BRIDGE_LOGIN_SHARED_SECRET else . end' \
'${settingsFile}' '${registrationFile}' > '${settingsFile}.tmp'
mv '${settingsFile}.tmp' '${settingsFile}'
umask $old_umask
'';

View File

@@ -560,6 +560,9 @@ in
};
environment.NUT_CONFPATH = "/etc/nut";
environment.NUT_STATEPATH = "/var/lib/nut";
restartTriggers = [
config.environment.etc."nut/ups.conf".source
];
};
environment.etc = {

View File

@@ -6,6 +6,7 @@ let
cfgs = config.services.cgit;
settingType = with types; oneOf [ bool int str ];
repeatedSettingType = with types; oneOf [ settingType (listOf settingType) ];
genAttrs' = names: f: listToAttrs (map f names);
@@ -44,12 +45,20 @@ let
toString value
}";
# list value as multiple lines (for "readme" for example)
cgitrcEntry = name: value:
if isList value then
map (cgitrcLine name) value
else
[ (cgitrcLine name value) ];
mkCgitrc = cfg: pkgs.writeText "cgitrc" ''
# global settings
${concatStringsSep "\n" (
mapAttrsToList
cgitrcLine
flatten (mapAttrsToList
cgitrcEntry
({ virtual-root = cfg.nginx.location; } // cfg.settings)
)
)
}
${optionalString (cfg.scanPath != null) (cgitrcLine "scan-path" cfg.scanPath)}
@@ -125,7 +134,7 @@ in
settings = mkOption {
description = "cgit configuration, see cgitrc(5)";
type = types.attrsOf settingType;
type = types.attrsOf repeatedSettingType;
default = {};
example = literalExpression ''
{

View File

@@ -2,6 +2,12 @@
let
cfg = config.services.harmonia;
format = pkgs.formats.toml { };
signKeyPaths = cfg.signKeyPaths ++ lib.optional (cfg.signKeyPath != null) cfg.signKeyPath;
credentials = lib.imap0 (i: signKeyPath: {
id = "sign-key-${builtins.toString i}";
path = signKeyPath;
}) signKeyPaths;
in
{
options = {
@@ -11,7 +17,13 @@ in
signKeyPath = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = "Path to the signing key that will be used for signing the cache";
description = "DEPRECATED: Use `services.harmonia.signKeyPaths` instead. Path to the signing key to use for signing the cache";
};
signKeyPaths = lib.mkOption {
type = lib.types.listOf lib.types.path;
default = [ ];
description = "Paths to the signing keys to use for signing the cache";
};
package = lib.mkPackageOption pkgs "harmonia" { };
@@ -28,6 +40,8 @@ in
};
config = lib.mkIf cfg.enable {
warnings = lib.optional (cfg.signKeyPath != null)
"`services.harmonia.signKeyPath` is deprecated, use `services.harmonia.signKeyPaths` instead";
nix.settings.extra-allowed-users = [ "harmonia" ];
users.users.harmonia = {
isSystemUser = true;
@@ -44,7 +58,9 @@ in
environment = {
CONFIG_FILE = format.generate "harmonia.toml" cfg.settings;
SIGN_KEY_PATH = lib.mkIf (cfg.signKeyPath != null) "%d/sign-key";
SIGN_KEY_PATHS = lib.strings.concatMapStringsSep " " (
credential: "%d/${credential.id}"
) credentials;
# Note: it's important to set this for nix-store, because it wants to use
# $HOME in order to use a temporary cache dir. bizarre failures will occur
# otherwise
@@ -60,7 +76,7 @@ in
DeviceAllow = [ "" ];
UMask = "0066";
RuntimeDirectory = "harmonia";
LoadCredential = lib.mkIf (cfg.signKeyPath != null) [ "sign-key:${cfg.signKeyPath}" ];
LoadCredential = builtins.map (credential: "${credential.id}:${credential.path}") credentials;
SystemCallFilter = [
"@system-service"
"~@privileged"

View File

@@ -1,187 +0,0 @@
{ config, lib, pkgs, ... }:
with lib;
let
inherit (pkgs) lsh;
cfg = config.services.lshd;
in
{
###### interface
options = {
services.lshd = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable the GNU lshd SSH2 daemon, which allows
secure remote login.
'';
};
portNumber = mkOption {
default = 22;
type = types.port;
description = ''
The port on which to listen for connections.
'';
};
interfaces = mkOption {
default = [];
type = types.listOf types.str;
description = ''
List of network interfaces where listening for connections.
When providing the empty list, `[]`, lshd listens on all
network interfaces.
'';
example = [ "localhost" "1.2.3.4:443" ];
};
hostKey = mkOption {
default = "/etc/lsh/host-key";
type = types.str;
description = ''
Path to the server's private key. Note that this key must
have been created, e.g., using "lsh-keygen --server |
lsh-writekey --server", so that you can run lshd.
'';
};
syslog = mkOption {
type = types.bool;
default = true;
description = "Whether to enable syslog output.";
};
passwordAuthentication = mkOption {
type = types.bool;
default = true;
description = "Whether to enable password authentication.";
};
publicKeyAuthentication = mkOption {
type = types.bool;
default = true;
description = "Whether to enable public key authentication.";
};
rootLogin = mkOption {
type = types.bool;
default = false;
description = "Whether to enable remote root login.";
};
loginShell = mkOption {
default = null;
type = types.nullOr types.str;
description = ''
If non-null, override the default login shell with the
specified value.
'';
example = "/nix/store/xyz-bash-10.0/bin/bash10";
};
srpKeyExchange = mkOption {
default = false;
type = types.bool;
description = ''
Whether to enable SRP key exchange and user authentication.
'';
};
tcpForwarding = mkOption {
type = types.bool;
default = true;
description = "Whether to enable TCP/IP forwarding.";
};
x11Forwarding = mkOption {
type = types.bool;
default = true;
description = "Whether to enable X11 forwarding.";
};
subsystems = mkOption {
type = types.listOf types.path;
description = ''
List of subsystem-path pairs, where the head of the pair
denotes the subsystem name, and the tail denotes the path to
an executable implementing it.
'';
};
};
};
###### implementation
config = mkIf cfg.enable {
services.lshd.subsystems = [ ["sftp" "${pkgs.lsh}/sbin/sftp-server"] ];
systemd.services.lshd = {
description = "GNU lshd SSH2 daemon";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
environment = {
LD_LIBRARY_PATH = config.system.nssModules.path;
};
preStart = ''
test -d /etc/lsh || mkdir -m 0755 -p /etc/lsh
test -d /var/spool/lsh || mkdir -m 0755 -p /var/spool/lsh
if ! test -f /var/spool/lsh/yarrow-seed-file
then
# XXX: It would be nice to provide feedback to the
# user when this fails, so that they can retry it
# manually.
${lsh}/bin/lsh-make-seed --sloppy \
-o /var/spool/lsh/yarrow-seed-file
fi
if ! test -f "${cfg.hostKey}"
then
${lsh}/bin/lsh-keygen --server | \
${lsh}/bin/lsh-writekey --server -o "${cfg.hostKey}"
fi
'';
script = with cfg; ''
${lsh}/sbin/lshd --daemonic \
--password-helper="${lsh}/sbin/lsh-pam-checkpw" \
-p ${toString portNumber} \
${optionalString (interfaces != []) (concatStrings (map (i: "--interface=\"${i}\"") interfaces))} \
-h "${hostKey}" \
${optionalString (!syslog) "--no-syslog" } \
${if passwordAuthentication then "--password" else "--no-password" } \
${if publicKeyAuthentication then "--publickey" else "--no-publickey" } \
${if rootLogin then "--root-login" else "--no-root-login" } \
${optionalString (loginShell != null) "--login-shell=\"${loginShell}\"" } \
${if srpKeyExchange then "--srp-keyexchange" else "--no-srp-keyexchange" } \
${if !tcpForwarding then "--no-tcpip-forward" else "--tcpip-forward"} \
${if x11Forwarding then "--x11-forward" else "--no-x11-forward" } \
--subsystems=${concatStringsSep ","
(map (pair: (head pair) + "=" +
(head (tail pair)))
subsystems)}
'';
};
security.pam.services.lshd = {};
};
}

View File

@@ -775,7 +775,7 @@ in {
'' + lib.optionalString (!databaseActuallyCreateLocally) ''
unset PGPASSWORD
'';
path = [ cfg.package pkgs.postgresql ];
path = [ cfg.package config.services.postgresql.package ];
environment = env // lib.optionalAttrs (!databaseActuallyCreateLocally) {
PGHOST = cfg.database.host;
PGPORT = toString cfg.database.port;

View File

@@ -3,9 +3,6 @@
let
cfg = config.services.pict-rs;
inherit (lib) maintainers mkOption types;
is03 = lib.versionOlder cfg.package.version "0.4.0";
in
{
meta.maintainers = with maintainers; [ happysalada ];
@@ -61,38 +58,62 @@ in
config = lib.mkIf cfg.enable {
services.pict-rs.package = lib.mkDefault (
# An incompatible db change happened in the transition from 0.3 to 0.4.
if lib.versionAtLeast config.system.stateVersion "23.11"
then pkgs.pict-rs
else pkgs.pict-rs_0_3
else throw ''
pict-rs made changes to the database schema between 0.3 and 0.4. It
will apply these automatically on the first run of 0.4, but the old
version will no longer work after that.
Your configuration is currently using the old default of pict-rs
0.3. Unfortunately, 0.3 no longer builds due to the Rust 1.80 update,
and has been removed. pict-rs has already been updated to 0.5 in
Nixpkgs, which has another schema change but removes the migration
logic for 0.3.
You will need to migrate to 0.4 first, and then to 0.5. As 0.4 is
no longer present in Nixpkgs, the recommended migration path is:
* Import a separate Nixpkgs old enough to contain 0.4, temporarily
set `services.pict-rs.package` to its pict-rs, set the
`PICTRS__OLD_DB__PATH` environment variable for the migration, and
activate your configuration to start it. The following configuration
snippet should work:
services.pict-rs.package =
(import (builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/9b19f5e77dd906cb52dade0b7bd280339d2a1f3d.tar.gz";
sha256 = "sha256:0939vbhln9d33xkqw63nsk908k03fxihj85zaf70i3il9z42q8mc";
}) pkgs.config).pict-rs;
systemd.services.pict-rs.environment.PICTRS__OLD_DB__PATH = config.services.pict-rs.dataDir;
* After the migration to 0.4 completes, remove the package and
environment variable overrides, set `services.pict-rs.package` to
the current `pkgs.pict-rs` instead, and activate your configuration
to begin the migration to 0.5.
For more information, see:
* <https://git.asonix.dog/asonix/pict-rs/src/tag/v0.4.8#0-3-to-0-4-migration-guide>
* <https://git.asonix.dog/asonix/pict-rs/src/tag/v0.5.16#0-4-to-0-5-migration-guide>
The NixOS module will handle the configuration changes for you,
at least.
''
);
# Account for config differences between 0.3 and 0.4
assertions = [
{
assertion = !is03 || (cfg.repoPath == null && cfg.storePath == null);
message = ''
Using `services.pict-rs.repoPath` or `services.pict-rs.storePath` with pict-rs 0.3 or older has no effect.
'';
}
];
systemd.services.pict-rs = {
# Pict-rs split it's database and image storage paths in 0.4.0.
environment =
if is03 then {
PICTRS__PATH = cfg.dataDir;
PICTRS__ADDR = "${cfg.address}:${toString cfg.port}";
} else {
PICTRS__REPO__PATH = if cfg.repoPath != null then cfg.repoPath else "${cfg.dataDir}/sled-repo";
PICTRS__STORE__PATH = if cfg.storePath != null then cfg.storePath else "${cfg.dataDir}/files";
PICTRS__SERVER__ADDR = "${cfg.address}:${toString cfg.port}";
};
environment = {
PICTRS__REPO__PATH = if cfg.repoPath != null then cfg.repoPath else "${cfg.dataDir}/sled-repo";
PICTRS__STORE__PATH = if cfg.storePath != null then cfg.storePath else "${cfg.dataDir}/files";
PICTRS__SERVER__ADDRESS = "${cfg.address}:${toString cfg.port}";
};
wantedBy = [ "multi-user.target" ];
serviceConfig = {
DynamicUser = true;
StateDirectory = "pict-rs";
ExecStart = if is03 then "${lib.getBin cfg.package}/bin/pict-rs" else "${lib.getBin cfg.package}/bin/pict-rs run";
ExecStart = "${lib.getBin cfg.package}/bin/pict-rs run";
};
};
};

View File

@@ -0,0 +1,43 @@
# Pingvin Share {#module-services-pingvin-share}
A self-hosted file sharing platform and an alternative for WeTransfer.
## Configuration {#module-services-pingvin-share-basic-usage}
By default, the module will execute Pingvin Share backend and frontend on the ports 8080 and 3000.
I will run two systemd services named `pingvin-share-backend` and `pingvin-share-frontend` in the specified data directory.
Here is a basic configuration:
```nix
{
services-pingvin-share = {
enable = true;
openFirewall = true;
backend.port = 9010;
frontend.port = 9011;
};
}
```
## Reverse proxy configuration {#module-services-pingvin-share-reverse-proxy-configuration}
The prefered method to run this service is behind a reverse proxy not to expose an open port. This, you can configure Nginx such like this:
```nix
{
services-pingvin-share = {
enable = true;
hostname = "pingvin-share.domain.tld";
https = true;
nginx.enable = true;
};
}
```
Furthermore, you can increase the maximal size of an uploaded file with the option [services.nginx.clientMaxBodySize](#opt-services.nginx.clientMaxBodySize).

View File

@@ -0,0 +1,226 @@
{
config,
pkgs,
lib,
...
}:
let
cfg = config.services.pingvin-share;
inherit (lib)
mkOption
mkEnableOption
mkIf
mkPackageOption
types
;
in
{
options = {
services.pingvin-share = {
enable = mkEnableOption "Pingvin Share, a self-hosted file sharing platform";
user = mkOption {
type = types.str;
default = "pingvin";
description = ''
User account under which Pingvin Share runs.
'';
};
group = mkOption {
type = types.str;
default = "pingvin";
description = ''
Group under which Pingvin Share runs.
'';
};
openFirewall = mkOption {
type = types.bool;
default = false;
description = ''
Whether to open the firewall for the port in {option}`services.pingvin-share.frontend.port`.
'';
};
dataDir = mkOption {
type = types.path;
default = "/var/lib/pingvin-share";
example = "/var/lib/pingvin";
description = ''
The path to the data directory in which Pingvin Share will store its data.
'';
};
hostname = mkOption {
type = types.str;
default = "localhost:${toString cfg.backend.port}";
defaultText = lib.literalExpression "localhost:\${options.services.pingvin-share.backend.port}";
example = "pingvin-share.domain.tdl";
description = ''
The domain name of your instance. If null, the redirections will be made to localhost.
'';
};
https = mkOption {
type = types.bool;
default = false;
example = true;
description = ''
Whether to enable HTTPS for the domain.
'';
};
backend = {
package = mkPackageOption pkgs [
"pingvin-share"
"backend"
] { };
port = mkOption {
type = types.port;
default = 8080;
example = 9000;
description = ''
The port that the backend service of Pingvin Share will listen to.
'';
};
};
frontend = {
package = mkPackageOption pkgs [
"pingvin-share"
"frontend"
] { };
port = mkOption {
type = types.port;
default = 3000;
example = 8000;
description = ''
The port that the frontend service of Pingvin Share will listen to.
'';
};
};
nginx = {
enable = mkEnableOption "a Nginx reverse proxy for Pingvin Share.";
};
};
};
config = mkIf cfg.enable {
users.groups = mkIf (cfg.group == "pingvin") { pingvin = { }; };
users.users = mkIf (cfg.user == "pingvin") {
pingvin = {
group = cfg.group;
description = "Pingvin Share daemon user";
isSystemUser = true;
};
};
networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.frontend.port ];
systemd.services.pingvin-share-backend = {
description = "Backend service of Pingvin Share, a self-hosted file sharing platform.";
wantedBy = [
"multi-user.target"
"pingvin-share-frontend.service"
];
before = [ "pingvin-share-frontend.service" ];
after = [
"network.target"
"network-online.target"
];
wants = [ "network-online.target" ];
environment = {
PRISMA_SCHEMA_ENGINE_BINARY = "${pkgs.prisma-engines}/bin/schema-engine";
PRISMA_QUERY_ENGINE_BINARY = "${pkgs.prisma-engines}/bin/query-engine";
PRISMA_QUERY_ENGINE_LIBRARY = "${pkgs.prisma-engines}/lib/libquery_engine.node";
PRISMA_INTROSPECTION_ENGINE_BINARY = "${pkgs.prisma-engines}/bin/introspection-engine";
PRISMA_FMT_BINARY = "${pkgs.prisma-engines}/bin/prisma-fmt";
PORT = toString cfg.backend.port;
DATABASE_URL = "file:${cfg.dataDir}/pingvin-share.db?connection_limit=1";
DATA_DIRECTORY = cfg.dataDir;
};
path = with pkgs; [
cfg.backend.package
openssl
prisma-engines
];
serviceConfig = {
User = cfg.user;
Group = cfg.group;
Type = "simple";
Restart = "on-failure";
ExecStartPre = [
"${cfg.backend.package}/node_modules/.bin/prisma migrate deploy"
"${cfg.backend.package}/node_modules/.bin/prisma db seed"
];
ExecStart = "${cfg.backend.package}/node_modules/.bin/ts-node dist/src/main";
StateDirectory = mkIf (cfg.dataDir == "/var/lib/pingvin-share") "pingvin-share";
WorkingDirectory = cfg.backend.package;
};
};
systemd.services.pingvin-share-frontend = {
description = "Frontend service of Pingvin Share, a self-hosted file sharing platform.";
wantedBy = [ "multi-user.target" ];
wants = [
"network-online.target"
"pingvin-share-backend.service"
];
after = [
"network-online.target"
"pingvin-share-backend.service"
];
environment = {
PORT = toString cfg.frontend.port;
API_URL = "${if cfg.https then "https" else "http"}://${cfg.hostname}";
};
path = [ cfg.frontend.package ];
serviceConfig = {
User = cfg.user;
Group = cfg.group;
Type = "simple";
Restart = "on-failure";
ExecStart = "${cfg.frontend.package}/node_modules/.bin/next start";
StateDirectory = mkIf (cfg.dataDir == "/var/lib/pingvin-share") "pingvin-share";
WorkingDirectory = cfg.frontend.package;
};
};
services.nginx = mkIf cfg.nginx.enable {
enable = lib.mkDefault true;
virtualHosts."${cfg.hostname}" = {
enableACME = cfg.https;
forceSSL = cfg.https;
locations."/" = {
proxyPass = "http://localhost:${toString cfg.frontend.port}";
recommendedProxySettings = true;
};
locations."/api" = {
proxyPass = "http://localhost:${toString cfg.backend.port}";
recommendedProxySettings = true;
};
};
};
};
meta = {
maintainers = with lib.maintainers; [ ratcornu ];
doc = ./pingvin-share.md;
};
}

View File

@@ -42,9 +42,10 @@ let
SESSION_COOKIE_SECURE = ENABLE_HTTPS
DATA_DIR = "${dataDir}"
CACHE_DIR = f"{DATA_DIR}/cache"
STATIC_ROOT = "${finalPackage.static}/static"
STATIC_ROOT = "${finalPackage.static}"
MEDIA_ROOT = "/var/lib/weblate/media"
COMPRESS_ROOT = "${finalPackage.static}/compressor-cache"
COMPRESS_ROOT = "${finalPackage.static}"
COMPRESS_OFFLINE = True
DEBUG = False
DATABASES = {
@@ -86,6 +87,13 @@ let
VCS_BACKENDS = ("weblate.vcs.git.GitRepository",)
SITE_URL = "https://{}".format(SITE_DOMAIN)
# WebAuthn
OTP_WEBAUTHN_RP_NAME = SITE_TITLE
OTP_WEBAUTHN_RP_ID = SITE_DOMAIN.split(":")[0]
OTP_WEBAUTHN_ALLOWED_ORIGINS = [SITE_URL]
''
+ lib.optionalString cfg.smtp.enable ''
ADMINS = (("Weblate Admin", "${cfg.smtp.user}"),)
@@ -205,8 +213,7 @@ in
locations = {
"= /favicon.ico".alias = "${finalPackage}/${python.sitePackages}/weblate/static/favicon.ico";
"/static/".alias = "${finalPackage.static}/static/";
"/static/CACHE/".alias = "${finalPackage.static}/compressor-cache/CACHE/";
"/static/".alias = "${finalPackage.static}/";
"/media/".alias = "/var/lib/weblate/media/";
"/".proxyPass = "http://unix:///run/weblate.socket";
};

View File

@@ -426,6 +426,7 @@ in
# standard wordpress .htaccess contents
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f

View File

@@ -20,6 +20,7 @@ let
"IPv6PrivacyExtensions"
"IPv4Forwarding"
"IPv6Forwarding"
"UseDomains"
])
(assertValueOneOf "SpeedMeter" boolValues)
(assertInt "SpeedMeterIntervalSec")
@@ -28,6 +29,7 @@ let
(assertValueOneOf "IPv6PrivacyExtensions" (boolValues ++ ["prefer-public" "kernel"]))
(assertValueOneOf "IPv4Forwarding" boolValues)
(assertValueOneOf "IPv6Forwarding" boolValues)
(assertValueOneOf "UseDomains" (boolValues ++ ["route"]))
];
sectionDHCPv4 = checkUnitConfig "DHCPv4" [
@@ -652,6 +654,7 @@ let
"Address"
"Gateway"
"DNS"
"UseDomains"
"Domains"
"DNSDefaultRoute"
"NTP"
@@ -705,6 +708,7 @@ let
(assertValueOneOf "DNSSEC" (boolValues ++ ["allow-downgrade"]))
(assertValueOneOf "LLDP" (boolValues ++ ["routers-only"]))
(assertValueOneOf "EmitLLDP" (boolValues ++ ["nearest-bridge" "non-tpmr-bridge" "customer-bridge"]))
(assertValueOneOf "UseDomains" (boolValues ++ ["route"]))
(assertValueOneOf "DNSDefaultRoute" boolValues)
(assertRemoved "IPForward" "IPv4Forwarding and IPv6Forwarding in systemd.network(5) and networkd.conf(5)")
(assertValueOneOf "IPv4Forwarding" boolValues)

View File

@@ -53,7 +53,6 @@ let
"debug-shell.service"
# Udev.
"systemd-tmpfiles-setup-dev-early.service"
"systemd-udevd-control.socket"
"systemd-udevd-kernel.socket"
"systemd-udevd.service"

View File

@@ -67,8 +67,6 @@ let
"systemd-poweroff.service"
"systemd-reboot.service"
"systemd-sysctl.service"
"systemd-tmpfiles-setup-dev.service"
"systemd-tmpfiles-setup.service"
"timers.target"
"tpm2.target"
"umount.target"
@@ -103,8 +101,17 @@ let
initrdBinEnv = pkgs.buildEnv {
name = "initrd-bin-env";
paths = map getBin cfg.initrdBin;
pathsToLink = ["/bin"];
postBuild = concatStringsSep "\n" (mapAttrsToList (n: v: "ln -sf '${v}' $out/bin/'${n}'") cfg.extraBin);
pathsToLink = ["/bin" "/sbin"];
# Make sure sbin and bin have the same contents, and add extraBin
postBuild = ''
find $out/bin -maxdepth 1 -type l -print0 | xargs --null cp --no-dereference --no-clobber -t $out/sbin/
find $out/sbin -maxdepth 1 -type l -print0 | xargs --null cp --no-dereference --no-clobber -t $out/bin/
${concatStringsSep "\n" (mapAttrsToList (n: v: ''
ln -sf '${v}' $out/bin/'${n}'
ln -sf '${v}' $out/sbin/'${n}'
'') cfg.extraBin)}
'';
};
initialRamdisk = pkgs.makeInitrdNG {
@@ -226,8 +233,8 @@ in {
emergencyAccess = mkOption {
type = with types; oneOf [ bool (nullOr (passwdEntry str)) ];
description = ''
Set to true for unauthenticated emergency access, and false for
no emergency access.
Set to true for unauthenticated emergency access, and false or
null for no emergency access.
Can also be set to a hashed super user password to allow
authenticated access to the emergency mode.
@@ -408,7 +415,7 @@ in {
fsck = "${cfg.package.util-linux}/bin/fsck";
};
managerEnvironment.PATH = "/bin";
managerEnvironment.PATH = "/bin:/sbin";
contents = {
"/tmp/.keep".text = "systemd requires the /tmp mount point in the initrd cpio archive";
@@ -417,7 +424,7 @@ in {
"/etc/systemd/system.conf".text = ''
[Manager]
DefaultEnvironment=PATH=/bin
DefaultEnvironment=PATH=/bin:/sbin
${cfg.extraConfig}
ManagerEnvironment=${lib.concatStringsSep " " (lib.mapAttrsToList (n: v: "${n}=${lib.escapeShellArg v}") cfg.managerEnvironment)}
'';
@@ -429,12 +436,17 @@ in {
# We can use either ! or * to lock the root account in the
# console, but some software like OpenSSH won't even allow you
# to log in with an SSH key if you use ! so we use * instead
"/etc/shadow".text = "root:${if isBool cfg.emergencyAccess then optionalString (!cfg.emergencyAccess) "*" else cfg.emergencyAccess}:::::::";
"/etc/shadow".text = let
ea = cfg.emergencyAccess;
access = ea != null && !(isBool ea && !ea);
passwd = if isString ea then ea else "";
in
"root:${if access then passwd else "*"}:::::::";
"/bin".source = "${initrdBinEnv}/bin";
"/sbin".source = "${initrdBinEnv}/bin";
"/sbin".source = "${initrdBinEnv}/sbin";
"/etc/sysctl.d/nixos.conf".text = "kernel.modprobe = /bin/modprobe";
"/etc/sysctl.d/nixos.conf".text = "kernel.modprobe = /sbin/modprobe";
"/etc/modprobe.d/systemd.conf".source = "${cfg.package}/lib/modprobe.d/systemd.conf";
"/etc/modprobe.d/ubuntu.conf".source = pkgs.runCommand "initrd-kmod-blacklist-ubuntu" { } ''
${pkgs.buildPackages.perl}/bin/perl -0pe 's/## file: iwlwifi.conf(.+?)##/##/s;' $src > $out
@@ -509,8 +521,6 @@ in {
(v: let n = escapeSystemdPath v.where;
in nameValuePair "${n}.automount" (automountToUnit v)) cfg.automounts);
# make sure all the /dev nodes are set up
services.systemd-tmpfiles-setup-dev.wantedBy = ["sysinit.target"];
services.initrd-nixos-activation = {
after = [ "initrd-fs.target" ];

View File

@@ -1,10 +1,121 @@
{ config, lib, pkgs, utils, ... }:
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.systemd.tmpfiles;
initrdCfg = config.boot.initrd.systemd.tmpfiles;
systemd = config.systemd.package;
settingsOption = {
description = ''
Declare systemd-tmpfiles rules to create, delete, and clean up volatile
and temporary files and directories.
Even though the service is called `*tmp*files` you can also create
persistent files.
'';
example = {
"10-mypackage" = {
"/var/lib/my-service/statefolder".d = {
mode = "0755";
user = "root";
group = "root";
};
};
};
default = {};
type = types.attrsOf (types.attrsOf (types.attrsOf (types.submodule ({ name, config, ... }: {
options.type = mkOption {
type = types.str;
default = name;
example = "d";
description = ''
The type of operation to perform on the file.
The type consists of a single letter and optionally one or more
modifier characters.
Please see the upstream documentation for the available types and
more details:
<https://www.freedesktop.org/software/systemd/man/tmpfiles.d>
'';
};
options.mode = mkOption {
type = types.str;
default = "-";
example = "0755";
description = ''
The file access mode to use when creating this file or directory.
'';
};
options.user = mkOption {
type = types.str;
default = "-";
example = "root";
description = ''
The user of the file.
This may either be a numeric ID or a user/group name.
If omitted or when set to `"-"`, the user and group of the user who
invokes systemd-tmpfiles is used.
'';
};
options.group = mkOption {
type = types.str;
default = "-";
example = "root";
description = ''
The group of the file.
This may either be a numeric ID or a user/group name.
If omitted or when set to `"-"`, the user and group of the user who
invokes systemd-tmpfiles is used.
'';
};
options.age = mkOption {
type = types.str;
default = "-";
example = "10d";
description = ''
Delete a file when it reaches a certain age.
If a file or directory is older than the current time minus the age
field, it is deleted.
If set to `"-"` no automatic clean-up is done.
'';
};
options.argument = mkOption {
type = types.str;
default = "";
example = "";
description = ''
An argument whose meaning depends on the type of operation.
Please see the upstream documentation for the meaning of this
parameter in different situations:
<https://www.freedesktop.org/software/systemd/man/tmpfiles.d>
'';
};
}))));
};
# generates a single entry for a tmpfiles.d rule
settingsEntryToRule = path: entry: ''
'${entry.type}' '${path}' '${entry.mode}' '${entry.user}' '${entry.group}' '${entry.age}' ${entry.argument}
'';
# generates a list of tmpfiles.d rules from the attrs (paths) under tmpfiles.settings.<name>
pathsToRules = mapAttrsToList (path: types:
concatStrings (
mapAttrsToList (_type: settingsEntryToRule path) types
)
);
mkRuleFileContent = paths: concatStrings (pathsToRules paths);
in
{
options = {
@@ -20,101 +131,16 @@ in
'';
};
systemd.tmpfiles.settings = mkOption {
systemd.tmpfiles.settings = mkOption settingsOption;
boot.initrd.systemd.tmpfiles.settings = mkOption (settingsOption // {
description = ''
Declare systemd-tmpfiles rules to create, delete, and clean up volatile
and temporary files and directories.
Similar to {option}`systemd.tmpfiles.settings` but the rules are
only applied by systemd-tmpfiles before `initrd-switch-root.target`.
Even though the service is called `*tmp*files` you can also create
persistent files.
See {manpage}`bootup(7)`.
'';
example = {
"10-mypackage" = {
"/var/lib/my-service/statefolder".d = {
mode = "0755";
user = "root";
group = "root";
};
};
};
default = {};
type = types.attrsOf (types.attrsOf (types.attrsOf (types.submodule ({ name, config, ... }: {
options.type = mkOption {
type = types.str;
default = name;
example = "d";
description = ''
The type of operation to perform on the file.
The type consists of a single letter and optionally one or more
modifier characters.
Please see the upstream documentation for the available types and
more details:
<https://www.freedesktop.org/software/systemd/man/tmpfiles.d>
'';
};
options.mode = mkOption {
type = types.str;
default = "-";
example = "0755";
description = ''
The file access mode to use when creating this file or directory.
'';
};
options.user = mkOption {
type = types.str;
default = "-";
example = "root";
description = ''
The user of the file.
This may either be a numeric ID or a user/group name.
If omitted or when set to `"-"`, the user and group of the user who
invokes systemd-tmpfiles is used.
'';
};
options.group = mkOption {
type = types.str;
default = "-";
example = "root";
description = ''
The group of the file.
This may either be a numeric ID or a user/group name.
If omitted or when set to `"-"`, the user and group of the user who
invokes systemd-tmpfiles is used.
'';
};
options.age = mkOption {
type = types.str;
default = "-";
example = "10d";
description = ''
Delete a file when it reaches a certain age.
If a file or directory is older than the current time minus the age
field, it is deleted.
If set to `"-"` no automatic clean-up is done.
'';
};
options.argument = mkOption {
type = types.str;
default = "";
example = "";
description = ''
An argument whose meaning depends on the type of operation.
Please see the upstream documentation for the meaning of this
parameter in different situations:
<https://www.freedesktop.org/software/systemd/man/tmpfiles.d>
'';
};
}))));
};
});
systemd.tmpfiles.packages = mkOption {
type = types.listOf types.package;
@@ -140,8 +166,9 @@ in
systemd.additionalUpstreamSystemUnits = [
"systemd-tmpfiles-clean.service"
"systemd-tmpfiles-clean.timer"
"systemd-tmpfiles-setup.service"
"systemd-tmpfiles-setup-dev-early.service"
"systemd-tmpfiles-setup-dev.service"
"systemd-tmpfiles-setup.service"
];
systemd.additionalUpstreamUserUnits = [
@@ -236,11 +263,7 @@ in
'';
})
] ++ (mapAttrsToList (name: paths:
pkgs.writeTextDir "lib/tmpfiles.d/${name}.conf" (concatStrings (mapAttrsToList (path: types:
concatStrings (mapAttrsToList (_type: entry: ''
'${entry.type}' '${path}' '${entry.mode}' '${entry.user}' '${entry.group}' '${entry.age}' ${entry.argument}
'') types)
) paths ))
pkgs.writeTextDir "lib/tmpfiles.d/${name}.conf" (mkRuleFileContent paths)
) cfg.settings);
systemd.tmpfiles.rules = [
@@ -256,5 +279,62 @@ in
"R! /nix/var/nix/gcroots/tmp - - - - -"
"R! /nix/var/nix/temproots - - - - -"
];
boot.initrd.systemd = {
additionalUpstreamUnits = [
"systemd-tmpfiles-setup-dev-early.service"
"systemd-tmpfiles-setup-dev.service"
"systemd-tmpfiles-setup.service"
];
# override to exclude the prefix /sysroot, because it is not necessarily set up when the unit starts
services.systemd-tmpfiles-setup.serviceConfig = {
ExecStart = [
""
"systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev --exclude-prefix=/sysroot"
];
};
# sets up files under the prefix /sysroot, after the hierarchy is available and before nixos activation
services.systemd-tmpfiles-setup-sysroot = {
description = "Create Volatile Files and Directories in the Real Root";
after = [ "initrd-fs.target" ];
before = [
"initrd-nixos-activation.service"
"shutdown.target" "initrd-switch-root.target"
];
conflicts = [ "shutdown.target" "initrd-switch-root.target" ];
wantedBy = [ "initrd.target" ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = "systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev --prefix=/sysroot";
SuccessExitStatus = [ "DATAERR CANTCREAT" ];
ImportCredential = [
"tmpfiles.*"
"login.motd"
"login.issue"
"network.hosts"
"ssh.authorized_keys.root"
];
};
unitConfig = {
DefaultDependencies = false;
RefuseManualStop = true;
};
};
contents."/etc/tmpfiles.d" = mkIf (initrdCfg.settings != { }) {
source = pkgs.linkFarm "initrd-tmpfiles.d" (
mapAttrsToList
(name: paths: {
name = "${name}.conf";
path = pkgs.writeText "${name}.conf" (mkRuleFileContent paths);
}
)
initrdCfg.settings);
};
};
};
}

View File

@@ -64,7 +64,7 @@
] ++ lib.optionals (!config.system.etc.overlay.mutable) [
"ro"
]);
wantedBy = [ "initrd-fs.target" ];
requiredBy = [ "initrd-fs.target" ];
before = [ "initrd-fs.target" ];
requires = lib.mkIf config.system.etc.overlay.mutable [ "rw-etc.service" ];
after = lib.mkIf config.system.etc.overlay.mutable [ "rw-etc.service" ];

View File

@@ -279,7 +279,7 @@ in
${pkgs.move-mount-beneath}/bin/move-mount --move --beneath $tmpEtcMount /etc
# Unmount the top /etc mount to atomically reveal the new mount.
umount --recursive /etc
umount --lazy --recursive /etc
fi
'' else ''
# Set up the statically computed bits of /etc.

View File

@@ -256,7 +256,11 @@ in
live-restore = mkDefault cfg.liveRestore;
runtimes = mkIf cfg.enableNvidia {
nvidia = {
path = "${pkgs.nvidia-docker}/bin/nvidia-container-runtime";
# Use the legacy nvidia-container-runtime wrapper to allow
# the `--runtime=nvidia` approach to expose
# GPU's. Starting with Docker > 25, CDI can be used
# instead, removing the need for runtime wrappers.
path = lib.getExe' pkgs.nvidia-docker "nvidia-container-runtime.legacy";
};
};
};

View File

@@ -84,7 +84,7 @@ in
description = ''
**Deprecated**, please use hardware.nvidia-container-toolkit.enable instead.
Enable use of NVidia GPUs from within podman containers.
Enable use of Nvidia GPUs from within podman containers.
'';
};
@@ -170,7 +170,7 @@ in
lib.mkIf cfg.enable {
warnings = lib.optionals cfg.enableNvidia [
''
You have set virtualisation.podman.enableNvidia. This option is deprecated, please set virtualisation.containers.cdi.dynamic.nvidia.enable instead.
You have set virtualisation.podman.enableNvidia. This option is deprecated, please set hardware.nvidia-container-toolkit.enable instead.
''
];
@@ -189,11 +189,6 @@ in
enable = true; # Enable common /etc/containers configuration
containersConf.settings = {
network.network_backend = "netavark";
} // lib.optionalAttrs cfg.enableNvidia {
engine = {
conmon_env_vars = [ "PATH=${lib.makeBinPath [ pkgs.nvidia-podman ]}" ];
runtimes.nvidia = [ "${pkgs.nvidia-podman}/bin/nvidia-container-runtime" ];
};
};
};

View File

@@ -143,6 +143,7 @@ let
--transform 'flags=rSh;s|/nix/store/||' \
--files-from ${hostPkgs.closureInfo { rootPaths = [ config.system.build.toplevel regInfo ]; }}/store-paths \
| ${hostPkgs.erofs-utils}/bin/mkfs.erofs \
--quiet \
--force-uid=0 \
--force-gid=0 \
-L ${nixStoreFilesystemLabel} \

View File

@@ -192,6 +192,7 @@ in {
cfssl = handleTestOn ["aarch64-linux" "x86_64-linux"] ./cfssl.nix {};
cgit = handleTest ./cgit.nix {};
charliecloud = handleTest ./charliecloud.nix {};
chromadb = runTest ./chromadb.nix;
chromium = (handleTestOn ["aarch64-linux" "x86_64-linux"] ./chromium.nix {}).stable or {};
chrony = handleTestOn ["aarch64-linux" "x86_64-linux"] ./chrony.nix {};
chrony-ptp = handleTestOn ["aarch64-linux" "x86_64-linux"] ./chrony-ptp.nix {};
@@ -545,6 +546,7 @@ in {
lomiri-camera-app = runTest ./lomiri-camera-app.nix;
lomiri-clock-app = runTest ./lomiri-clock-app.nix;
lomiri-filemanager-app = runTest ./lomiri-filemanager-app.nix;
lomiri-gallery-app = runTest ./lomiri-gallery-app.nix;
lomiri-system-settings = handleTest ./lomiri-system-settings.nix {};
lorri = handleTest ./lorri/default.nix {};
ly = handleTest ./ly.nix {};
@@ -770,6 +772,7 @@ in {
php84 = handleTest ./php { php = pkgs.php84; };
phylactery = handleTest ./web-apps/phylactery.nix {};
pict-rs = handleTest ./pict-rs.nix {};
pingvin-share = handleTest ./pingvin-share.nix {} ;
pinnwand = handleTest ./pinnwand.nix {};
plantuml-server = handleTest ./plantuml-server.nix {};
plasma-bigscreen = handleTest ./plasma-bigscreen.nix {};
@@ -826,7 +829,7 @@ in {
qgis = handleTest ./qgis.nix { qgisPackage = pkgs.qgis; };
qgis-ltr = handleTest ./qgis.nix { qgisPackage = pkgs.qgis-ltr; };
qownnotes = handleTest ./qownnotes.nix {};
qtile = handleTestOn ["x86_64-linux" "aarch64-linux"] ./qtile.nix {};
qtile = handleTestOn ["x86_64-linux" "aarch64-linux"] ./qtile/default.nix {};
quake3 = handleTest ./quake3.nix {};
quicktun = handleTest ./quicktun.nix {};
quickwit = handleTest ./quickwit.nix {};

View File

@@ -27,6 +27,12 @@ in {
desc = "some-repo description";
};
};
settings = {
readme = [
":README.md"
":date.txt"
];
};
};
environment.systemPackages = [ pkgs.git ];
@@ -56,18 +62,42 @@ in {
git init -b master reference
cd reference
git remote add origin /tmp/git/some-repo
date > date.txt
{ echo -n "cgit NixOS Test at "; date; } > date.txt
git add date.txt
git -c user.name=test -c user.email=test@localhost commit -m 'add date'
git push -u origin master
''}")
# test web download
server.succeed(
"curl -fsS 'http://localhost/%28c%29git/some-repo/plain/date.txt?id=master' | diff -u reference/date.txt -"
)
# test http clone
server.succeed(
"git clone http://localhost/%28c%29git/some-repo && diff -u reference/date.txt some-repo/date.txt"
)
# test list settings by greping for the fallback readme
server.succeed(
"curl -fsS 'http://localhost/%28c%29git/some-repo/about/' | grep -F 'cgit NixOS Test at'"
)
# add real readme
server.succeed("sudo -u cgit ${pkgs.writeShellScript "cgit-commit-readme" ''
set -e
echo '# cgit NixOS test README' > reference/README.md
git -C reference add README.md
git -C reference -c user.name=test -c user.email=test@localhost commit -m 'add readme'
git -C reference push
''}")
# test list settings by greping for the real readme
server.succeed(
"curl -fsS 'http://localhost/%28c%29git/some-repo/about/' | grep -F '# cgit NixOS test README'"
)
server.fail(
"curl -fsS 'http://localhost/%28c%29git/some-repo/about/' | grep -F 'cgit NixOS Test at'"
)
'';
})

26
nixos/tests/chromadb.nix Normal file
View File

@@ -0,0 +1,26 @@
{ lib, pkgs, ... }:
let
lib = pkgs.lib;
in
{
name = "chromadb";
meta.maintainers = [ lib.maintainers.drupol ];
nodes = {
machine =
{ pkgs, ... }:
{
services.chromadb = {
enable = true;
};
};
};
testScript = ''
machine.start()
machine.wait_for_unit("chromadb.service")
machine.wait_for_open_port(8000)
'';
}

View File

@@ -15,7 +15,7 @@ import ./make-test-python.nix ({ lib, pkgs, ... }: {
services.dae = {
enable = true;
config = ''
global{}
global { disable_waiting_network: true }
routing{}
'';
};

View File

@@ -4,6 +4,9 @@ import ./make-test-python.nix ({ pkgs, ...} :
meta = with pkgs.lib.maintainers; {
maintainers = [ romildo ];
timeout = 600;
# OCR tests are flaky
broken = true;
};
nodes.machine = { ... }:

View File

@@ -7,7 +7,7 @@
harmonia = {
services.harmonia = {
enable = true;
signKeyPath = pkgs.writeText "cache-key" "cache.example.com-1:9FhO0w+7HjZrhvmzT1VlAZw4OSAlFGTgC24Seg3tmPl4gZBdwZClzTTHr9cVzJpwsRSYLTu7hEAQe3ljy92CWg==";
signKeyPaths = [(pkgs.writeText "cache-key" "cache.example.com-1:9FhO0w+7HjZrhvmzT1VlAZw4OSAlFGTgC24Seg3tmPl4gZBdwZClzTTHr9cVzJpwsRSYLTu7hEAQe3ljy92CWg==")];
settings.priority = 35;
};

View File

@@ -4,6 +4,13 @@ import ./make-test-python.nix (
certs = import ./common/acme/server/snakeoil-certs.nix;
serverDomain = certs.domain;
# copy certs to store to work around mount namespacing
certsPath = pkgs.runCommandNoCC "snakeoil-certs" { } ''
mkdir $out
cp ${certs."${serverDomain}".cert} $out/snakeoil.crt
cp ${certs."${serverDomain}".key} $out/snakeoil.key
'';
provisionAdminPassword = "very-strong-password-for-admin";
provisionIdmAdminPassword = "very-strong-password-for-idm-admin";
provisionIdmAdminPassword2 = "very-strong-alternative-password-for-idm-admin";
@@ -23,8 +30,8 @@ import ./make-test-python.nix (
domain = serverDomain;
bindaddress = "[::]:443";
ldapbindaddress = "[::1]:636";
tls_chain = certs."${serverDomain}".cert;
tls_key = certs."${serverDomain}".key;
tls_chain = "${certsPath}/snakeoil.crt";
tls_key = "${certsPath}/snakeoil.key";
};
# So we can check whether provisioning did what we wanted
enableClient = true;

View File

@@ -6,6 +6,13 @@ import ./make-test-python.nix ({ pkgs, ... }:
testCredentials = {
password = "Password1_cZPEwpCWvrReripJmAZdmVIZd8HHoHcl";
};
# copy certs to store to work around mount namespacing
certsPath = pkgs.runCommandNoCC "snakeoil-certs" { } ''
mkdir $out
cp ${certs."${serverDomain}".cert} $out/snakeoil.crt
cp ${certs."${serverDomain}".key} $out/snakeoil.key
'';
in
{
name = "kanidm";
@@ -19,8 +26,8 @@ import ./make-test-python.nix ({ pkgs, ... }:
domain = serverDomain;
bindaddress = "[::]:443";
ldapbindaddress = "[::1]:636";
tls_chain = certs."${serverDomain}".cert;
tls_key = certs."${serverDomain}".key;
tls_chain = "${certsPath}/snakeoil.crt";
tls_key = "${certsPath}/snakeoil.key";
};
};

View File

@@ -62,7 +62,7 @@ let
# NOTE: what featureGates are useful for testing might change in
# the future, see link below to find new ones
# https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/
featureGates = {CPUManager = true; AppArmor= false;};
featureGates = {AnonymousAuthConfigurableEndpoints = true; ConsistentListFromCache = false;};
masterAddress = "${masterName}.${config.networking.domain}";
};
}

View File

@@ -51,8 +51,8 @@ in
with subtest("the backend starts and responds"):
server.wait_for_open_port(${toString backendPort})
# wait until succeeds, it just needs few seconds for migrations, but lets give it 10s max
server.wait_until_succeeds("curl --fail localhost:${toString backendPort}/api/v3/site", 10)
# wait until succeeds, it just needs few seconds for migrations, but lets give it 50s max
server.wait_until_succeeds("curl --fail localhost:${toString backendPort}/api/v3/site", 50)
with subtest("the UI starts and responds"):
server.wait_for_unit("lemmy-ui.service")
@@ -77,7 +77,7 @@ in
server.execute("systemctl stop lemmy-ui.service")
def assert_http_code(url, expected_http_code, extra_curl_args=""):
_, http_code = server.execute(f'curl --silent -o /dev/null {extra_curl_args} --fail --write-out "%{{http_code}}" {url}')
_, http_code = server.execute(f'curl --location --silent -o /dev/null {extra_curl_args} --fail --write-out "%{{http_code}}" {url}')
assert http_code == str(expected_http_code), f"expected http code {expected_http_code}, got {http_code}"
# Caddy responds with HTTP code 502 if it cannot handle the requested path

View File

@@ -0,0 +1,156 @@
{ lib, ... }:
{
name = "lomiri-gallery-app-standalone";
meta.maintainers = lib.teams.lomiri.members;
nodes.machine =
{ config, pkgs, ... }:
{
imports = [ ./common/x11.nix ];
services.xserver.enable = true;
environment = {
systemPackages =
with pkgs;
[
ffmpeg # make a video from the image
(imagemagick.override { ghostscriptSupport = true; }) # example image creation
mpv # URI dispatching for video support
xdotool # mouse movement
]
++ (with pkgs.lomiri; [
suru-icon-theme
lomiri-gallery-app
lomiri-thumbnailer # finds new images & generates thumbnails
]);
variables = {
UITK_ICON_THEME = "suru";
};
};
i18n.supportedLocales = [ "all" ];
fonts = {
packages = with pkgs; [
# Intended font & helps with OCR
ubuntu-classic
];
};
};
enableOCR = true;
testScript =
let
imageLabel = "Image";
in
''
machine.wait_for_x()
with subtest("lomiri gallery launches"):
machine.succeed("lomiri-gallery-app >&2 &")
machine.sleep(2)
machine.wait_for_text(r"(Albums|Events|Photos)")
machine.screenshot("lomiri-gallery_open")
machine.succeed("pkill -f lomiri-gallery-app")
machine.succeed("mkdir /root/Pictures /root/Videos")
# Setup example data, OCR-friendly:
# - White square, black text
# - uppercase extension
machine.succeed("magick -size 500x500 -background white -fill black canvas:white -pointsize 70 -annotate +100+300 '${imageLabel}' /root/Pictures/output.PNG")
# Different image formats
machine.succeed("magick /root/Pictures/output.PNG /root/Pictures/output.JPG")
machine.succeed("magick /root/Pictures/output.PNG /root/Pictures/output.BMP")
machine.succeed("magick /root/Pictures/output.PNG /root/Pictures/output.GIF")
# Video for dispatching
machine.succeed("ffmpeg -loop 1 -r 1 -i /root/Pictures/output.PNG -t 100 -pix_fmt yuv420p /root/Videos/output.MP4")
with subtest("lomiri gallery handles files"):
machine.succeed("lomiri-gallery-app >&2 &")
machine.sleep(2)
machine.wait_for_text(r"(Albums|Events|Photos|${imageLabel})")
machine.succeed("xdotool mousemove 30 40 click 1") # burger menu for categories
machine.sleep(2)
machine.succeed("xdotool mousemove 30 180 click 1") # photos
machine.sleep(2)
machine.wait_for_text("${imageLabel}") # should see thumbnail of at least one of them
machine.screenshot("lomiri-gallery_photos")
machine.succeed("xdotool mousemove 80 140 click 1") # select newest one
machine.sleep(2)
machine.succeed("xdotool mousemove 80 140 click 1") # enable top-bar
machine.sleep(2)
with subtest("lomiri gallery handles mp4"):
machine.succeed("xdotool mousemove 870 50 click 1") # open media information
machine.sleep(2)
machine.wait_for_text("MP4") # make sure we're looking at the right file
machine.screenshot("lomiri-gallery_mp4_info")
machine.send_key("esc")
machine.wait_for_text("${imageLabel}") # make sure thumbnail rendering worked
machine.succeed("xdotool mousemove 450 350 click 1") # dispatch to system's video handler
machine.wait_until_succeeds("pgrep -u root -f mpv") # wait for video to start
machine.sleep(10)
machine.succeed("pgrep -u root -f mpv") # should still be playing
machine.screenshot("lomiri-gallery_mp4_dispatch")
machine.send_key("q")
machine.wait_until_fails("pgrep mpv") # wait for video to stop
machine.send_key("right")
with subtest("lomiri gallery handles gif"):
machine.succeed("xdotool mousemove 870 50 click 1") # open media information
machine.sleep(2)
machine.wait_for_text("GIF") # make sure we're looking at the right file
machine.screenshot("lomiri-gallery_gif_info")
machine.send_key("esc")
machine.wait_for_text("${imageLabel}") # make sure media shows fine
machine.send_key("right")
with subtest("lomiri gallery handles bmp"):
machine.succeed("xdotool mousemove 840 50 click 1") # open media information (extra icon, different location)
machine.sleep(2)
machine.wait_for_text("BMP") # make sure we're looking at the right file
machine.screenshot("lomiri-gallery_bmp_info")
machine.send_key("esc")
machine.wait_for_text("${imageLabel}") # make sure media shows fine
machine.send_key("right")
with subtest("lomiri gallery handles jpg"):
machine.succeed("xdotool mousemove 840 50 click 1") # open media information (extra icon, different location)
machine.sleep(2)
machine.wait_for_text("JPG") # make sure we're looking at the right file
machine.screenshot("lomiri-gallery_jpg_info")
machine.send_key("esc")
machine.wait_for_text("${imageLabel}") # make sure media shows fine
machine.send_key("right")
with subtest("lomiri gallery handles png"):
machine.succeed("xdotool mousemove 840 50 click 1") # open media information (extra icon, different location)
machine.sleep(2)
machine.wait_for_text("PNG") # make sure we're looking at the right file
machine.screenshot("lomiri-gallery_png_info")
machine.send_key("esc")
machine.wait_for_text("${imageLabel}") # make sure media shows fine
machine.succeed("pkill -f lomiri-gallery-app")
with subtest("lomiri gallery localisation works"):
machine.succeed("env LANG=de_DE.UTF-8 lomiri-gallery-app >&2 &")
machine.wait_for_text(r"(Alben|Ereignisse|Fotos)")
machine.screenshot("lomiri-gallery_localised")
'';
}

View File

@@ -0,0 +1,26 @@
import ./make-test-python.nix (
{ lib, ... }:
{
name = "pingvin-share";
meta.maintainers = with lib.maintainers; [ ratcornu ];
nodes.machine =
{ ... }:
{
services.pingvin-share = {
enable = true;
backend.port = 9010;
frontend.port = 9011;
};
};
testScript = ''
machine.wait_for_unit("pingvin-share-frontend.service")
machine.wait_for_open_port(9010)
machine.wait_for_open_port(9011)
machine.succeed("curl --fail http://127.0.0.1:9010/api/configs")
machine.succeed("curl --fail http://127.0.0.1:9011/")
'';
}
)

View File

@@ -0,0 +1,19 @@
--- a/config.py 2024-05-31 14:49:23.852287845 +0200
+++ b/config.py 2024-05-31 14:51:00.935182266 +0200
@@ -29,6 +29,8 @@
from libqtile.lazy import lazy
from libqtile.utils import guess_terminal
+from qtile_extras import widget
+
mod = "mod4"
terminal = guess_terminal()
@@ -162,6 +164,7 @@
# NB Systray is incompatible with Wayland, consider using StatusNotifier instead
# widget.StatusNotifier(),
widget.Systray(),
+ widget.AnalogueClock(),
widget.Clock(format="%Y-%m-%d %a %I:%M %p"),
widget.QuickExit(),
],

View File

@@ -0,0 +1,24 @@
{ stdenvNoCC, fetchurl }:
stdenvNoCC.mkDerivation {
name = "qtile-config";
version = "0.0.1";
src = fetchurl {
url = "https://raw.githubusercontent.com/qtile/qtile/v0.28.1/libqtile/resources/default_config.py";
hash = "sha256-Y5W277CWVNSi4BdgEW/f7Px/MMjnN9W9TDqdOncVwPc=";
};
prePatch = ''
cp $src config.py
'';
patches = [ ./add-widget.patch ];
dontUnpack = true;
dontBuild = true;
installPhase = ''
mkdir -p $out
cp config.py $out/config.py
'';
}

View File

@@ -1,15 +1,26 @@
import ./make-test-python.nix ({ lib, ...} : {
import ../make-test-python.nix ({ lib, ...} : {
name = "qtile";
meta = {
maintainers = with lib.maintainers; [ sigmanificient ];
};
nodes.machine = { pkgs, lib, ... }: {
imports = [ ./common/x11.nix ./common/user-account.nix ];
nodes.machine = { pkgs, lib, ... }: let
# We create a custom Qtile configuration file that adds a widget from
# qtile-extras to the bar. This ensure that the qtile-extras package
# also works, and that extraPackages behave as expected.
config-deriv = pkgs.callPackage ./config.nix { };
in {
imports = [ ../common/x11.nix ../common/user-account.nix ];
test-support.displayManager.auto.user = "alice";
services.xserver.windowManager.qtile.enable = true;
services.xserver.windowManager.qtile = {
enable = true;
configFile = "${config-deriv}/config.py";
extraPackages = ps: [ ps.qtile-extras ];
};
services.displayManager.defaultSession = lib.mkForce "qtile";
environment.systemPackages = [ pkgs.kitty ];

View File

@@ -269,9 +269,9 @@ in
'';
};
memtest86 = makeTest {
memtest86 = with pkgs.lib; optionalAttrs (meta.availableOn { inherit system; } pkgs.memtest86plus) (makeTest {
name = "systemd-boot-memtest86";
meta.maintainers = with pkgs.lib.maintainers; [ julienmalka ];
meta.maintainers = with maintainers; [ julienmalka ];
nodes.machine = { pkgs, lib, ... }: {
imports = [ common ];
@@ -282,7 +282,7 @@ in
machine.succeed("test -e /boot/loader/entries/memtest86.conf")
machine.succeed("test -e /boot/efi/memtest86/memtest.efi")
'';
};
});
netbootxyz = makeTest {
name = "systemd-boot-netbootxyz";

View File

@@ -10,6 +10,9 @@ let
192.168.2.103 mastodon.local
'';
postgresqlPassword = "thisisnotasecret";
redisPassword = "thisisnotasecrettoo";
in
{
name = "mastodon-remote-postgresql";
@@ -19,9 +22,7 @@ in
databases = { config, ... }: {
environment = {
etc = {
"redis/password-redis-db".text = ''
ogjhJL8ynrP7MazjYOF6
'';
"redis/password-redis-db".text = redisPassword;
};
};
networking = {
@@ -46,16 +47,19 @@ in
services.postgresql = {
enable = true;
# TODO remove once https://github.com/NixOS/nixpkgs/pull/266270 is resolved.
package = pkgs.postgresql_14;
enableTCPIP = true;
authentication = ''
hostnossl mastodon_local mastodon_test 192.168.2.201/32 md5
hostnossl mastodon mastodon 192.168.2.201/32 md5
'';
ensureDatabases = [ "mastodon" ];
ensureUsers = [
{
name = "mastodon";
ensureDBOwnership = true;
}
];
initialScript = pkgs.writeText "postgresql_init.sql" ''
CREATE ROLE mastodon_test LOGIN PASSWORD 'SoDTZcISc3f1M1LJsRLT';
CREATE DATABASE mastodon_local TEMPLATE template0 ENCODING UTF8;
GRANT ALL PRIVILEGES ON DATABASE mastodon_local TO mastodon_test;
CREATE ROLE mastodon LOGIN PASSWORD '${postgresqlPassword}';
'';
};
};
@@ -100,12 +104,8 @@ in
environment = {
etc = {
"mastodon/password-redis-db".text = ''
ogjhJL8ynrP7MazjYOF6
'';
"mastodon/password-posgressql-db".text = ''
SoDTZcISc3f1M1LJsRLT
'';
"mastodon/password-redis-db".text = redisPassword;
"mastodon/password-posgressql-db".text = postgresqlPassword;
};
};
@@ -138,8 +138,8 @@ in
createLocally = false;
host = "192.168.2.102";
port = 5432;
name = "mastodon_local";
user = "mastodon_test";
name = "mastodon";
user = "mastodon";
passwordFile = "/etc/mastodon/password-posgressql-db";
};
smtp = {

View File

@@ -34,9 +34,6 @@ in
pki.certificateFiles = [ "${cert pkgs}/cert.pem" ];
};
# TODO remove once https://github.com/NixOS/nixpkgs/pull/266270 is resolved.
services.postgresql.package = pkgs.postgresql_14;
services.mastodon = {
enable = true;
configureNginx = true;

View File

@@ -22,7 +22,7 @@
stdenv.mkDerivation rec {
pname = "squeekboard";
version = "1.38.0";
version = "1.41.0";
src = fetchFromGitLab {
domain = "gitlab.gnome.org";
@@ -30,13 +30,13 @@ stdenv.mkDerivation rec {
owner = "Phosh";
repo = pname;
rev = "v${version}";
hash = "sha256-ZVSnLH2wLPcOHkU2pO0BgIdGmULMNiacIYMRmhN+bZ8=";
hash = "sha256-WHGdA0cEB1nu7vJ+pwjdl8aZzccJ232vsbSGmZohFVo=";
};
cargoDeps = rustPlatform.fetchCargoTarball {
inherit src;
name = "${pname}-${version}";
hash = "sha256-tcn1tRuRlHVTYvc8T/ePfCEPNjih6B9lo/hdX+WwitQ=";
hash = "sha256-CRKaH8cA/EhXQna3zCU0Z06zkB9qu6QxPJ4No3NFcs0=";
};
nativeBuildInputs = [

View File

@@ -3,6 +3,7 @@
, fetchgit
, fetchzip
, fetchpatch
, fetchpatch2
, alsa-lib
, aubio
, boost
@@ -86,6 +87,12 @@ stdenv.mkDerivation rec {
url = "https://github.com/Ardour/ardour/commit/e995daa37529715214c6c4a2587e4134aaaba02f.patch";
hash = "sha256-EpXOIIObOwwcNgNma0E3nvaBad3930sagDjBpa+78WI=";
})
# Work around itstools bug #9648
(fetchpatch2 {
url = "https://github.com/Ardour/ardour/commit/338cd09a4aa1b36b8095dfc14ab534395f9a4a92.patch?full_index=1";
hash = "sha256-AvV4aLdkfrxPkE4NX2ETSagq4GjEC+sHCEqdcYvL+CY=";
})
];
# Ardour's wscript requires git revision and date to be available.

View File

@@ -14,17 +14,17 @@
rustPlatform.buildRustPackage rec {
pname = "listenbrainz-mpd";
version = "2.3.7";
version = "2.3.8";
src = fetchFromGitea {
domain = "codeberg.org";
owner = "elomatreb";
repo = "listenbrainz-mpd";
rev = "v${version}";
hash = "sha256-xnVhPiHhI7VqkSBBlrKJBpdS6kd51DMlKWVnJIo/OQQ=";
hash = "sha256-QBc0avci232UIxzTKlS0pjL7cCuvwAFgw6dSwdtYAtU=";
};
cargoHash = "sha256-Reglc7UtsFk+VIwg4Q9TIChVrWweuV6yPWxbtTDH6mU=";
cargoHash = "sha256-jnDS9tIJ387A2P9oUSYB3tXrXjwwVmQ26erIIlHBkao=";
nativeBuildInputs = [ pkg-config installShellFiles asciidoctor ];

View File

@@ -1,7 +1,5 @@
{ lib
# Python 3.12 demonstrates a peculiar segmentation fault with pyqt5. Using
# pyqt6 with Python 3.12 should work, but this is not released yet.
, python311Packages
, python312Packages
, fetchFromGitHub
, chromaprint
@@ -13,7 +11,7 @@
}:
let
pythonPackages = python311Packages;
pythonPackages = python312Packages;
pyqt5 =
if enablePlayback then
pythonPackages.pyqt5-multimedia
@@ -23,19 +21,20 @@ in
pythonPackages.buildPythonApplication rec {
pname = "picard";
# nix-update --commit picard --version-regex 'release-(.*)'
version = "2.12";
version = "2.12.1";
format = "setuptools";
src = fetchFromGitHub {
owner = "metabrainz";
repo = "picard";
rev = "refs/tags/release-${version}";
hash = "sha256-+++NDJzXw4tA5eQd24r+l3UK3YS8Jy1t9WNiEU9sH0Q=";
hash = "sha256-wKPE4lj3DIlY+X5A/MqhnwyrhPTXGjmUnLK1VWXUOas=";
};
nativeBuildInputs = [
gettext
qt5.wrapQtAppsHook
pythonPackages.pytestCheckHook
] ++ lib.optionals (pyqt5.multimediaEnabled) [
gst_all_1.gst-libav
gst_all_1.gst-plugins-base
@@ -68,6 +67,7 @@ pythonPackages.buildPythonApplication rec {
preCheck = ''
export HOME=$(mktemp -d)
'';
doCheck = true;
# In order to spare double wrapping, we use:
preFixup = ''
@@ -76,12 +76,13 @@ pythonPackages.buildPythonApplication rec {
makeWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")
'';
meta = with lib; {
meta = {
homepage = "https://picard.musicbrainz.org";
changelog = "https://picard.musicbrainz.org/changelog";
description = "Official MusicBrainz tagger";
mainProgram = "picard";
license = licenses.gpl2Plus;
platforms = platforms.all;
license = lib.licenses.gpl2Plus;
platforms = lib.platforms.all;
maintainers = with lib.maintainers; [ doronbehar ];
};
}

View File

@@ -16,13 +16,13 @@ let
in
rustPlatform.buildRustPackage rec {
pname = "psst";
version = "unstable-2024-07-29";
version = "unstable-2024-08-19";
src = fetchFromGitHub {
owner = "jpochyla";
repo = pname;
rev = "d895cb94623d320f79b364a8f63ab518fddf697b";
hash = "sha256-LsveuaDmRvC9TUON847QdzqQDUW1zd37++MbtXrfJjk=";
rev = "11bef15e66a3c9b0b991207d09a67c071b3dda02";
hash = "sha256-lKxWIUDouUUul7CpuTy30z/cLJAjFE9e0J1zyZ/PnIo=";
};
cargoLock = {

View File

@@ -54,7 +54,7 @@ index fcbd491..8f6e6f0 100644
-pub const GIT_VERSION: &str = git_version!();
-pub const BUILD_TIME: &str = include!(concat!(env!("OUT_DIR"), "/build-time.txt"));
-pub const REMOTE_URL: &str = include!(concat!(env!("OUT_DIR"), "/remote-url.txt"));
+pub const GIT_VERSION: &str = "d895cb94623d320f79b364a8f63ab518fddf697b";
+pub const GIT_VERSION: &str = "11bef15e66a3c9b0b991207d09a67c071b3dda02";
+pub const BUILD_TIME: &str = "1970-01-01 00:00:00";
+pub const REMOTE_URL: &str = "https://github.com/jpochyla/psst";

View File

@@ -8,13 +8,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "pt2-clone";
version = "1.69.2";
version = "1.70";
src = fetchFromGitHub {
owner = "8bitbubsy";
repo = "pt2-clone";
rev = "v${finalAttrs.version}";
sha256 = "sha256-Vy8b9rbYM/bK/mCUW4V4rPeAmoBN/wn7iVBANSboL2Q=";
sha256 = "sha256-oGdgvyVIqM4YVxyr5DFBJ+YLtH95vqbNv0arD9yskdo=";
};
nativeBuildInputs = [ cmake ];

View File

@@ -1,28 +1,28 @@
{ lib
, stdenv
, fetchFromGitHub
, pkg-config
, python3Packages
, ffmpeg
, flac
, libjxl
, librsvg
, game-music-emu
, gobject-introspection
, gtk3
, kissfft
, libappindicator
, libnotify
, libsamplerate
, libvorbis
, miniaudio
, mpg123
, libopenmpt
, opusfile
, wavpack
, pango
, pulseaudio
, withDiscordRPC ? false
{
lib,
stdenv,
fetchFromGitHub,
kissfft,
miniaudio,
pkg-config,
python3Packages,
gobject-introspection,
flac,
game-music-emu,
gtk3,
libappindicator,
libnotify,
libopenmpt,
librsvg,
libsamplerate,
libvorbis,
mpg123,
opusfile,
pango,
wavpack,
ffmpeg,
pulseaudio,
withDiscordRPC ? false,
}:
stdenv.mkDerivation (finalAttrs: {
@@ -46,26 +46,23 @@ stdenv.mkDerivation (finalAttrs: {
postPatch = ''
substituteInPlace tauon.py \
--replace 'install_mode = False' 'install_mode = True' \
--replace 'install_directory = os.path.dirname(os.path.abspath(__file__))' 'install_directory = "${placeholder "out"}/share/tauon"'
--replace-fail 'install_mode = False' 'install_mode = True' \
--replace-fail 'install_directory = os.path.dirname(os.path.abspath(__file__))' 'install_directory = "${placeholder "out"}/share/tauon"'
substituteInPlace t_modules/t_main.py \
--replace 'install_mode = False' 'install_mode = True' \
--replace 'libopenmpt.so' '${lib.getLib libopenmpt}/lib/libopenmpt.so' \
--replace 'lib/libphazor.so' '../../lib/libphazor.so'
--replace-fail 'install_mode = False' 'install_mode = True' \
--replace-fail 'libopenmpt.so' '${lib.getLib libopenmpt}/lib/libopenmpt.so'
substituteInPlace t_modules/t_phazor.py \
--replace 'lib/libphazor.so' '../../lib/libphazor.so'
--replace-fail 'lib/libphazor.so' '../../lib/libphazor.so'
patchShebangs compile-phazor.sh
substituteInPlace compile-phazor.sh --replace-fail 'gcc' '${stdenv.cc.targetPrefix}cc'
substituteInPlace compile-phazor.sh --replace 'gcc' '${stdenv.cc.targetPrefix}cc'
substituteInPlace extra/tauonmb.desktop --replace 'Exec=/opt/tauon-music-box/tauonmb.sh' 'Exec=${placeholder "out"}/bin/tauon'
substituteInPlace extra/tauonmb.desktop --replace-fail 'Exec=/opt/tauon-music-box/tauonmb.sh' 'Exec=${placeholder "out"}/bin/tauon'
'';
postBuild = ''
./compile-phazor.sh
bash ./compile-phazor.sh
'';
nativeBuildInputs = [
@@ -90,32 +87,38 @@ stdenv.mkDerivation (finalAttrs: {
wavpack
];
pythonPath = with python3Packages; [
beautifulsoup4
gst-python
dbus-python
isounidecode
libjxl
musicbrainzngs
mutagen
natsort
pillow
plexapi
pycairo
pychromecast
pylast
pygobject3
pylyrics
pysdl2
requests
send2trash
setproctitle
] ++ lib.optional withDiscordRPC pypresence
pythonPath =
with python3Packages;
[
beautifulsoup4
dbus-python
isounidecode
jxlpy
musicbrainzngs
mutagen
natsort
pillow
plexapi
pycairo
pychromecast
pylast
pygobject3
pysdl2
requests
send2trash
setproctitle
]
++ lib.optional withDiscordRPC pypresence
++ lib.optional stdenv.isLinux pulsectl;
makeWrapperArgs = [
"--prefix PATH : ${lib.makeBinPath [ffmpeg]}"
"--prefix LD_LIBRARY_PATH : ${pulseaudio}/lib"
"--prefix PATH : ${lib.makeBinPath [ ffmpeg ]}"
"--prefix LD_LIBRARY_PATH : ${
lib.makeLibraryPath [
game-music-emu
pulseaudio
]
}"
"--prefix PYTHONPATH : $out/share/tauon"
"--set GI_TYPELIB_PATH $GI_TYPELIB_PATH"
];

View File

@@ -36,8 +36,8 @@ let
pffft-source = fetchFromBitbucket {
owner = "jpommier";
repo = "pffft";
rev = "38946c766c1afecfa4c5945af77913e38b3cec31";
sha256 = "1w6g9v9fy7bavqacb6qw1nxhcik2w36cvl2d7b0bh68w0pd70j5q";
rev = "fbc4058602803f40dc554b8a5d2bcc694c005f2f";
sha256 = "16biji3115232cr1j975hpxw68lfybajlspnhfjcwg8jz2d8ybrf";
};
fuzzysearchdatabase-source = fetchFromBitbucket {
owner = "j_norberg";
@@ -64,28 +64,28 @@ let
sha256 = "1d3058x6wgzw7b0wai792flk7s6ffw0z4n9sl016v91yjwv7ds3a";
};
oui-blendish-source = fetchFromGitHub {
owner = "AndrewBelt";
owner = "VCVRack";
repo = "oui-blendish";
rev = "2fc6405883f8451944ed080547d073c8f9f31898";
sha256 = "/QZFZuI5kSsEvSfMJlcqB1HiZ9Vcf3vqLqWIMEgxQK8=";
sha256 = "1bs0654312555vm7nzswsmky4l8759bjdk17pl22p49rw9k4a1px";
};
simde-source = fetchFromGitHub {
owner = "simd-everywhere";
repo = "simde";
rev = "b309d8951997201e493380a2fd09198c09ae1b4e";
sha256 = "1hz8mfbhbiafvim4qrkyvh1yndlhydqkxwhls7cfqa48wkpxfip8";
rev = "416091ebdb9e901b29d026633e73167d6353a0b0";
sha256 = "064ygc6c737yjx04rydwwhkr4n4s4rbvj27swxwyzvp1h8nka6xf";
};
tinyexpr-source = fetchFromGitHub {
owner = "codeplea";
repo = "tinyexpr";
rev = "74804b8c5d296aad0866bbde6c27e2bc1d85e5f2";
sha256 = "0z3r7wfw7p2wwl6wls2nxacirppr2147yz29whxmjaxy89ic1744";
rev = "9907207e5def0fabdb60c443517b0d9e9d521393";
sha256 = "0xbpd09zvrk2ppm1qm1skk6p50mqr9mzjixv3s0biqq6jpabs88l";
};
fundamental-source = fetchFromGitHub {
owner = "VCVRack";
repo = "Fundamental";
rev = "962547d7651260fb6a04f4d8aafd7c27f0221bee"; # tip of branch v2
sha256 = "066gcjkni8ba98vv0di59x3f9piir0vyy5sb53cqrbrl51x853cg";
rev = "5ed79544161e0fa9a55faa7c0a5f299e828e12ab"; # tip of branch v2
sha256 = "0c6qpigyr0ppvra20hcy1fdcmqa212jckb9wkx4f6fgdby7565wv";
};
vcv-rtaudio = stdenv.mkDerivation rec {
pname = "vcv-rtaudio";
@@ -112,7 +112,7 @@ let
in
stdenv.mkDerivation rec {
pname = "vcv-rack";
version = "2.4.1";
version = "2.5.1";
desktopItems = [
(makeDesktopItem {
@@ -132,7 +132,7 @@ stdenv.mkDerivation rec {
owner = "VCVRack";
repo = "Rack";
rev = "v${version}";
hash = "sha256-Gn/sFltLXX2mLv4dDqmr/UPd+JBXVkIZGwMI6Rm0Ih4=";
sha256 = "1q2bwjfn6crk9lyd6m3py0v754arw1xgpv5kkj6ka1bc2yz839qh";
};
patches = [

View File

@@ -23,16 +23,16 @@
rustPlatform.buildRustPackage rec {
pname = "ludusavi";
version = "0.24.3";
version = "0.25.0";
src = fetchFromGitHub {
owner = "mtkennerly";
repo = "ludusavi";
rev = "v${version}";
hash = "sha256-FtLLj5uFcKuRTCSsSuyj0XGzFMVWQvVk4dTmBCmzfNs=";
hash = "sha256-GjecssOc5xVni73uNRQ/GaZmIdM9r09I8GpPK+jwoAY=";
};
cargoHash = "sha256-xC6HiXt8cfrDtno9IrOe8SP7WBL79paLI223fjxPsbg=";
cargoHash = "sha256-9QaQjb7bdDl4NWKbV+dfu9BgFU8NO3CZEvKSXujMUtI=";
nativeBuildInputs = [
cmake

View File

@@ -4124,7 +4124,7 @@ dependencies = [
[[package]]
name = "cumulus-primitives-storage-weight-reclaim"
version = "7.0.0"
version = "7.0.1"
dependencies = [
"cumulus-primitives-core",
"cumulus-primitives-proof-size-hostfunction",
@@ -4142,11 +4142,9 @@ dependencies = [
[[package]]
name = "cumulus-primitives-timestamp"
version = "0.15.0"
version = "0.15.1"
dependencies = [
"cumulus-primitives-core",
"futures",
"parity-scale-codec",
"sp-inherents",
"sp-timestamp",
]
@@ -5961,7 +5959,7 @@ dependencies = [
[[package]]
name = "frame-system"
version = "37.0.0"
version = "37.1.0"
dependencies = [
"cfg-if",
"criterion",
@@ -8383,9 +8381,9 @@ dependencies = [
[[package]]
name = "memchr"
version = "2.6.4"
version = "2.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "memfd"
@@ -12614,7 +12612,7 @@ dependencies = [
[[package]]
name = "polkadot"
version = "16.0.0"
version = "16.0.1"
dependencies = [
"assert_cmd",
"color-eyre",
@@ -12691,7 +12689,7 @@ dependencies = [
[[package]]
name = "polkadot-availability-distribution"
version = "17.0.0"
version = "17.0.1"
dependencies = [
"assert_matches",
"derive_more",
@@ -13084,7 +13082,7 @@ dependencies = [
[[package]]
name = "polkadot-node-core-candidate-validation"
version = "17.0.0"
version = "17.1.0"
dependencies = [
"assert_matches",
"async-trait",
@@ -13101,8 +13099,10 @@ dependencies = [
"polkadot-parachain-primitives",
"polkadot-primitives",
"polkadot-primitives-test-helpers",
"sp-application-crypto",
"sp-core",
"sp-keyring",
"sp-keystore",
"sp-maybe-compressed-blob",
"tracing-gum",
]
@@ -13194,26 +13194,20 @@ dependencies = [
[[package]]
name = "polkadot-node-core-prospective-parachains"
version = "16.0.0"
version = "16.1.0"
dependencies = [
"assert_matches",
"bitvec",
"fatality",
"futures",
"parity-scale-codec",
"polkadot-node-primitives",
"polkadot-node-subsystem",
"polkadot-node-subsystem-test-helpers",
"polkadot-node-subsystem-types",
"polkadot-node-subsystem-util",
"polkadot-primitives",
"polkadot-primitives-test-helpers",
"rand",
"rstest",
"sc-keystore",
"sp-application-crypto",
"sp-core",
"sp-keyring",
"sp-keystore",
"sp-tracing",
"thiserror",
"tracing-gum",
]
@@ -13519,7 +13513,7 @@ dependencies = [
[[package]]
name = "polkadot-node-subsystem-types"
version = "17.0.0"
version = "17.1.0"
dependencies = [
"async-trait",
"bitvec",
@@ -13548,7 +13542,7 @@ dependencies = [
[[package]]
name = "polkadot-node-subsystem-util"
version = "17.0.0"
version = "17.1.0"
dependencies = [
"assert_matches",
"async-trait",
@@ -13868,7 +13862,7 @@ dependencies = [
[[package]]
name = "polkadot-runtime-parachains"
version = "16.0.0"
version = "16.0.1"
dependencies = [
"assert_matches",
"bitflags 1.3.2",
@@ -14429,7 +14423,7 @@ dependencies = [
[[package]]
name = "polkadot-service"
version = "17.0.0"
version = "17.0.1"
dependencies = [
"assert_matches",
"async-trait",
@@ -17189,7 +17183,7 @@ dependencies = [
[[package]]
name = "sc-consensus-grandpa"
version = "0.29.0"
version = "0.29.1"
dependencies = [
"ahash 0.8.11",
"array-bytes",
@@ -18642,12 +18636,13 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.114"
version = "1.0.121"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0"
checksum = "4ab380d7d9f22ef3f21ad3e6c1ebe8e4fc7a2000ccba2e4d71fc96f15b2cb609"
dependencies = [
"indexmap 2.2.3",
"itoa",
"memchr",
"ryu",
"serde",
]
@@ -19690,7 +19685,7 @@ dependencies = [
[[package]]
name = "sp-blockchain"
version = "37.0.0"
version = "37.0.1"
dependencies = [
"futures",
"parity-scale-codec",

View File

@@ -1,5 +1,4 @@
{ fetchFromGitHub
, fetchpatch
, lib
, openssl
, pkg-config
@@ -18,13 +17,13 @@ let
in
rustPlatform.buildRustPackage rec {
pname = "polkadot";
version = "stable2407";
version = "stable2407-1";
src = fetchFromGitHub {
owner = "paritytech";
repo = "polkadot-sdk";
rev = "polkadot-${version}";
hash = "sha256-g+jReHOAkaWjr1yJILFL4mSYGEfRBlSCrUHp8ro22SA=";
hash = "sha256-IYRkXmFBjRAYSROL37EgEjC7wM1N97HabuSHtcSUxdg=";
# the build process of polkadot requires a .git folder in order to determine
# the git commit hash that is being built and add it to the version string.
@@ -52,15 +51,6 @@ rustPlatform.buildRustPackage rec {
};
};
cargoPatches = [
# NOTE: bump `time` dependency to be able to build with rust 1.80
# should be removed on the next release
(fetchpatch {
url = "https://github.com/paritytech/polkadot-sdk/pull/5149.patch";
hash = "sha256-FNG9XLeMRJOT6k7mcs6GemtQ3oUrH/hOYG0JNQP0akU=";
})
];
buildType = "production";
cargoBuildFlags = [ "-p" "polkadot" ];

View File

@@ -23,10 +23,6 @@ lib.packagesFromDirectoryRecursive {
inherit (pkgs) basedpyright git go gopls python3;
};
matrix-client = callPackage ./manual-packages/matrix-client {
_map = self.map;
};
structured-haskell-mode = self.shm;
texpresso = callPackage ./manual-packages/texpresso { inherit (pkgs) texpresso; };
@@ -48,5 +44,6 @@ lib.packagesFromDirectoryRecursive {
ess-R-object-popup = throw "emacsPackages.ess-R-object-popup was deleted, since the upstream repo looks abandoned."; # Added 2024-07-15
ghc-mod = throw "emacsPackages.ghc-mod was deleted because it is deprecated, use haskell-language-server instead."; # Added 2024-07-17
haskell-unicode-input-method = throw "emacsPackages.haskell-unicode-input-method is contained in emacsPackages.haskell-mode, please use that instead."; # Added 2024-07-17
matrix-client = throw "emacsPackages.matrix-client is deprecated in favor of emacsPackages.ement."; # Added 2024-08-17
perl-completion = throw "emacsPackages.perl-completion was removed, since it is broken."; # Added 2024-07-19
}

View File

@@ -23,6 +23,8 @@ melpaBuild {
popon
];
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; };
meta = {

View File

@@ -15,6 +15,8 @@ melpaBuild {
files = ''("acm/*.el" "acm/icons")'';
ignoreCompilationError = false;
meta = {
description = "Asynchronous Completion Menu";
homepage = "https://github.com/manateelazycat/lsp-bridge";

View File

@@ -8,6 +8,8 @@ melpaBuild {
files = ''("src/data/emacs-mode/*.el")'';
ignoreCompilationError = false;
meta = {
inherit (Agda.meta) homepage license;
description = "Agda2-mode for Emacs extracted from Agda package";

View File

@@ -25,6 +25,8 @@ melpaBuild {
})
];
ignoreCompilationError = false;
passthru.updateScript = gitUpdater { };
meta = {

View File

@@ -13,6 +13,8 @@ melpaBuild {
hash = "sha256-JCrmS3FSGDHSR+eAR0X/uO0nAgd3TUmFxwEVH5+KV+4=";
};
ignoreCompilationError = false;
meta = {
homepage = "https://www.emacswiki.org/emacs/control-lock.el";
description = "Like caps-lock, but for your control key";

View File

@@ -30,6 +30,8 @@ melpaBuild {
propagatedUserEnvPkgs = [ nodejs ];
ignoreCompilationError = false;
meta = {
description = "Unofficial copilot plugin for Emacs";
homepage = "https://github.com/copilot-emacs/copilot.el";

View File

@@ -13,6 +13,8 @@ melpaBuild rec {
hash = "sha256-GFEDWT88Boz/DxEcmFgf7u2NOoMjAN05yRiYwoYtvXc=";
};
ignoreCompilationError = false;
meta = {
homepage = "https://gitweb.gentoo.org/proj/ebuild-mode.git/";
description = "Major modes for Gentoo package files";

View File

@@ -21,6 +21,8 @@ melpaBuild {
files = ''(:defaults "msg")'';
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { tagPrefix = "v"; };
meta = {

View File

@@ -27,6 +27,8 @@ melpaBuild {
make
'';
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { };
meta = {

View File

@@ -16,6 +16,8 @@ melpaBuild {
hash = "sha256-DIGvnotSQYIgHxGxtyCALHd8ZbrfkmdvjLXlkcqQ6v4=";
};
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; };
meta = {

View File

@@ -23,6 +23,8 @@ melpaBuild {
markdown-mode
];
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; };
meta = {

View File

@@ -17,6 +17,8 @@ melpaBuild {
hash = "sha256-er+knxqAejgKAtOnhqHfsGN286biHFdeMIUlbW7JyYw=";
};
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { };
meta = {

View File

@@ -16,6 +16,8 @@ melpaBuild {
hash = "sha256-xwVCAdxnIRHrFNWvtlM3u6CShsUiGgl1CiBTsp2x7IM=";
};
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; };
meta = {

View File

@@ -16,6 +16,8 @@ melpaBuild {
hash = "sha256-3QDw4W3FbFvb2zpkDHAo9BJKxs3LaehyvUVJPKqS9RE=";
};
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; };
meta = {

View File

@@ -22,6 +22,8 @@ melpaBuild {
helm
];
ignoreCompilationError = false;
meta = {
homepage = "https://github.com/emacsmirror/helm-words";
description = "Helm extension for looking up words in dictionaries and thesauri";

View File

@@ -16,6 +16,8 @@ melpaBuild {
packageRequires = [ haskell-mode ];
ignoreCompilationError = false;
meta = {
inherit (hsc3.meta) homepage license;
description = "Emacs mode for hsc3";

View File

@@ -16,6 +16,8 @@ melpaBuild {
hash = "sha256-Xbt0D9EgmvN1hDTeLbdxq1ARHObj8M4GfH2sbFILRTI=";
};
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; };
meta = {

View File

@@ -24,6 +24,8 @@ melpaBuild {
prop-menu
];
ignoreCompilationError = false;
passthru.updateScript = gitUpdater { };
meta = {

View File

@@ -17,6 +17,8 @@ melpaBuild {
hash = "sha256-h/jkIWjkLFbtBp9F+lhA3CulYy2XaeloLmexR0CDm3E=";
};
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { };
meta = {

View File

@@ -16,6 +16,8 @@ melpaBuild {
hash = "sha256-Xli7TxBenl5cDMJv3Qz7ZELFpvJKStMploLpf9a+uoA=";
};
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; };
meta = {

View File

@@ -27,6 +27,8 @@ melpaBuild rec {
mv tmp.el jam-mode.el
'';
ignoreCompilationError = false;
meta = {
description = "Emacs major mode for editing Jam files";
license = lib.licenses.gpl2Plus;

View File

@@ -19,6 +19,8 @@ melpaBuild {
files = ''("tools/emacs/ligo-mode.el")'';
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { };
meta = {

View File

@@ -9,6 +9,8 @@ melpaBuild {
"llvm/utils/emacs/README")
'';
ignoreCompilationError = false;
meta = {
inherit (llvmPackages.llvm.meta) homepage license;
description = "Major mode for the LLVM assembler language";

View File

@@ -87,6 +87,8 @@ melpaBuild {
__darwinAllowLocalNetworking = true;
ignoreCompilationError = false;
passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; };
meta = {

View File

@@ -24,6 +24,8 @@ melpaBuild {
# to compile lspce.el, it needs lspce-module.so
files = ''(:defaults "${lib.getLib lspce-module}/lib/lspce-module.*")'';
ignoreCompilationError = false;
passthru = {
inherit lspce-module;
updateScript = nix-update-script {

View File

@@ -1,65 +0,0 @@
{
lib,
melpaBuild,
fetchFromGitHub,
fetchpatch,
# Emacs packages
_map,
a,
anaphora,
cl-lib,
dash,
dash-functional,
esxml,
f,
frame-purpose,
ht,
ov,
rainbow-identifiers,
request,
s,
tracking,
}:
melpaBuild {
pname = "matrix-client";
version = "0.3.0";
src = fetchFromGitHub {
owner = "alphapapa";
repo = "matrix-client.el";
rev = "d2ac55293c96d4c95971ed8e2a3f6f354565c5ed";
hash = "sha256-GLM8oCbm6PdEZPsM0ogMtNJr8mWjCKoX6ed5AUrYjuk=";
};
patches = [
# Fix: avatar loading when imagemagick support is not available
(fetchpatch {
url = "https://github.com/alphapapa/matrix-client.el/commit/5f49e615c7cf2872f48882d3ee5c4a2bff117d07.patch";
hash = "sha256-dXUa/HKDe+UjaXYTvgwPdXDuDcHB2HLPGWHboE+Lex0=";
})
];
packageRequires = [
_map
a
anaphora
cl-lib
dash
dash-functional
esxml
f
frame-purpose
ht
ov
rainbow-identifiers
request
s
tracking
];
meta = {
description = "Chat client and API wrapper for Matrix.org";
license = lib.licenses.gpl3Plus;
};
}

View File

@@ -27,6 +27,8 @@ elpaBuild {
popd
'';
ignoreCompilationError = false;
meta = mu.meta // {
description = "Full-featured e-mail client";
};

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