Project import generated by Copybara.

GitOrigin-RevId: 598f83ebeb2235435189cf84d844b8b73e858e0f
This commit is contained in:
Default email 2022-10-06 20:32:54 +02:00
parent 746c427690
commit d2947cfef0
1155 changed files with 27575 additions and 12313 deletions

View file

@ -15,7 +15,7 @@ assignees: ''
<!-- make sure this issue is not redundant or obsolete --> <!-- make sure this issue is not redundant or obsolete -->
- [ ] checked [latest Nixpkgs manual] \([source][nixpkgs-source]) and [latest NixOS manual]] \[source][nixos-source]) - [ ] checked [latest Nixpkgs manual] \([source][nixpkgs-source]) and [latest NixOS manual] \([source][nixos-source])
- [ ] checked [open documentation issues] for possible duplicates - [ ] checked [open documentation issues] for possible duplicates
- [ ] checked [open documentation pull requests] for possible solutions - [ ] checked [open documentation pull requests] for possible solutions

View file

@ -31,7 +31,7 @@ The recommended way of defining a derivation for a Coq library, is to use the `c
* `releaseRev` (optional, defaults to `(v: v)`), provides a default mapping from release names to revision hashes/branch names/tags, * `releaseRev` (optional, defaults to `(v: v)`), provides a default mapping from release names to revision hashes/branch names/tags,
* `displayVersion` (optional), provides a way to alter the computation of `name` from `pname`, by explaining how to display version numbers, * `displayVersion` (optional), provides a way to alter the computation of `name` from `pname`, by explaining how to display version numbers,
* `namePrefix` (optional, defaults to `[ "coq" ]`), provides a way to alter the computation of `name` from `pname`, by explaining which dependencies must occur in `name`, * `namePrefix` (optional, defaults to `[ "coq" ]`), provides a way to alter the computation of `name` from `pname`, by explaining which dependencies must occur in `name`,
* `nativeBuildInputs` (optional), is a list of executables that are required to build the current derivation, in addition to the default ones (namely `which`, `dune` and `ocaml` depending on whether `useDune2`, `useDune2ifVersion` and `mlPlugin` are set). * `nativeBuildInputs` (optional), is a list of executables that are required to build the current derivation, in addition to the default ones (namely `which`, `dune` and `ocaml` depending on whether `useDune`, `useDuneifVersion` and `mlPlugin` are set).
* `extraNativeBuildInputs` (optional, deprecated), an additional list of derivation to add to `nativeBuildInputs`, * `extraNativeBuildInputs` (optional, deprecated), an additional list of derivation to add to `nativeBuildInputs`,
* `overrideNativeBuildInputs` (optional) replaces the default list of derivation to which `nativeBuildInputs` and `extraNativeBuildInputs` adds extra elements, * `overrideNativeBuildInputs` (optional) replaces the default list of derivation to which `nativeBuildInputs` and `extraNativeBuildInputs` adds extra elements,
* `buildInputs` (optional), is a list of libraries and dependencies that are required to build and run the current derivation, in addition to the default one `[ coq ]`, * `buildInputs` (optional), is a list of libraries and dependencies that are required to build and run the current derivation, in addition to the default one `[ coq ]`,
@ -39,8 +39,8 @@ The recommended way of defining a derivation for a Coq library, is to use the `c
* `overrideBuildInputs` (optional) replaces the default list of derivation to which `buildInputs` and `extraBuildInputs` adds extras elements, * `overrideBuildInputs` (optional) replaces the default list of derivation to which `buildInputs` and `extraBuildInputs` adds extras elements,
* `propagatedBuildInputs` (optional) is passed as is to `mkDerivation`, we recommend to use this for Coq libraries and Coq plugin dependencies, as this makes sure the paths of the compiled libraries and plugins will always be added to the build environements of subsequent derivation, which is necessary for Coq packages to work correctly, * `propagatedBuildInputs` (optional) is passed as is to `mkDerivation`, we recommend to use this for Coq libraries and Coq plugin dependencies, as this makes sure the paths of the compiled libraries and plugins will always be added to the build environements of subsequent derivation, which is necessary for Coq packages to work correctly,
* `mlPlugin` (optional, defaults to `false`). Some extensions (plugins) might require OCaml and sometimes other OCaml packages. Standard dependencies can be added by setting the current option to `true`. For a finer grain control, the `coq.ocamlPackages` attribute can be used in `nativeBuildInputs`, `buildInputs`, and `propagatedBuildInputs` to depend on the same package set Coq was built against. * `mlPlugin` (optional, defaults to `false`). Some extensions (plugins) might require OCaml and sometimes other OCaml packages. Standard dependencies can be added by setting the current option to `true`. For a finer grain control, the `coq.ocamlPackages` attribute can be used in `nativeBuildInputs`, `buildInputs`, and `propagatedBuildInputs` to depend on the same package set Coq was built against.
* `useDune2ifVersion` (optional, default to `(x: false)` uses Dune2 to build the package if the provided predicate evaluates to true on the version, e.g. `useDune2ifVersion = versions.isGe "1.1"` will use dune if the version of the package is greater or equal to `"1.1"`, * `useDuneifVersion` (optional, default to `(x: false)` uses Dune to build the package if the provided predicate evaluates to true on the version, e.g. `useDuneifVersion = versions.isGe "1.1"` will use dune if the version of the package is greater or equal to `"1.1"`,
* `useDune2` (optional, defaults to `false`) uses Dune2 to build the package if set to true, the presence of this attribute overrides the behavior of the previous one. * `useDune` (optional, defaults to `false`) uses Dune to build the package if set to true, the presence of this attribute overrides the behavior of the previous one.
* `opam-name` (optional, defaults to concatenating with a dash separator the components of `namePrefix` and `pname`), name of the Dune package to build. * `opam-name` (optional, defaults to concatenating with a dash separator the components of `namePrefix` and `pname`), name of the Dune package to build.
* `enableParallelBuilding` (optional, defaults to `true`), since it is activated by default, we provide a way to disable it. * `enableParallelBuilding` (optional, defaults to `true`), since it is activated by default, we provide a way to disable it.
* `extraInstallFlags` (optional), allows to extend `installFlags` which initializes the variable `COQMF_COQLIB` so as to install in the proper subdirectory. Indeed Coq libraries should be installed in `$(out)/lib/coq/${coq.coq-version}/user-contrib/`. Such directories are automatically added to the `$COQPATH` environment variable by the hook defined in the Coq derivation. * `extraInstallFlags` (optional), allows to extend `installFlags` which initializes the variable `COQMF_COQLIB` so as to install in the proper subdirectory. Indeed Coq libraries should be installed in `$(out)/lib/coq/${coq.coq-version}/user-contrib/`. Such directories are automatically added to the `$COQPATH` environment variable by the hook defined in the Coq derivation.

View file

@ -240,10 +240,10 @@ rec {
* to implicit typing rules, so it should work with older * to implicit typing rules, so it should work with older
* parsers as well. * parsers as well.
*/ */
toYAML = {}@args: toJSON args; toYAML = toJSON;
withRecursion = withRecursion =
args@{ {
/* If this option is not null, the given value will stop evaluating at a certain depth */ /* If this option is not null, the given value will stop evaluating at a certain depth */
depthLimit depthLimit
/* If this option is true, an error will be thrown, if a certain given depth is exceeded */ /* If this option is true, an error will be thrown, if a certain given depth is exceeded */
@ -287,7 +287,7 @@ rec {
allowPrettyValues ? false, allowPrettyValues ? false,
/* If this option is true, the output is indented with newlines for attribute sets and lists */ /* If this option is true, the output is indented with newlines for attribute sets and lists */
multiline ? true multiline ? true
}@args: }:
let let
go = indent: v: with builtins; go = indent: v: with builtins;
let isPath = v: typeOf v == "path"; let isPath = v: typeOf v == "path";

View file

@ -174,6 +174,11 @@ in mkLicense lset) ({
free = false; free = false;
}; };
cal10 = {
fullName = "Cryptographic Autonomy License version 1.0 (CAL-1.0)";
url = "https://opensource.org/licenses/CAL-1.0";
};
capec = { capec = {
fullName = "Common Attack Pattern Enumeration and Classification"; fullName = "Common Attack Pattern Enumeration and Classification";
url = "https://capec.mitre.org/about/termsofuse.html"; url = "https://capec.mitre.org/about/termsofuse.html";

View file

@ -12,7 +12,6 @@ let
concatStringsSep concatStringsSep
elem elem
filter filter
findFirst
foldl' foldl'
getAttrFromPath getAttrFromPath
head head
@ -34,7 +33,6 @@ let
recursiveUpdate recursiveUpdate
reverseList sort reverseList sort
setAttrByPath setAttrByPath
toList
types types
warnIf warnIf
zipAttrsWith zipAttrsWith
@ -46,7 +44,6 @@ let
showFiles showFiles
showOption showOption
unknownModule unknownModule
literalExpression
; ;
showDeclPrefix = loc: decl: prefix: showDeclPrefix = loc: decl: prefix:
@ -604,7 +601,6 @@ rec {
} }
else else
let let
firstNonOption = findFirst (m: !isOption m.options) "" decls;
nonOptions = filter (m: !isOption m.options) decls; nonOptions = filter (m: !isOption m.options) decls;
in in
throw "The option `${showOption loc}' in module `${(lib.head optionDecls)._file}' would be a parent of the following options, but its type `${(lib.head optionDecls).options.type.description or "<no description>"}' does not support nested options.\n${ throw "The option `${showOption loc}' in module `${(lib.head optionDecls)._file}' would be a parent of the following options, but its type `${(lib.head optionDecls).options.type.description or "<no description>"}' does not support nested options.\n${
@ -652,11 +648,7 @@ rec {
'opts' is a list of modules. Each module has an options attribute which 'opts' is a list of modules. Each module has an options attribute which
correspond to the definition of 'loc' in 'opt.file'. */ correspond to the definition of 'loc' in 'opt.file'. */
mergeOptionDecls = mergeOptionDecls =
let loc: opts:
coerceOption = file: opt:
if isFunction opt then setDefaultModuleLocation file opt
else setDefaultModuleLocation file { options = opt; };
in loc: opts:
foldl' (res: opt: foldl' (res: opt:
let t = res.type; let t = res.type;
t' = opt.options.type; t' = opt.options.type;

View file

@ -8,7 +8,6 @@ let
concatLists concatLists
concatMap concatMap
concatMapStringsSep concatMapStringsSep
elemAt
filter filter
foldl' foldl'
head head

View file

@ -4,7 +4,6 @@
# Tested in lib/tests/sources.sh # Tested in lib/tests/sources.sh
let let
inherit (builtins) inherit (builtins)
hasContext
match match
readDir readDir
split split

View file

@ -6,7 +6,6 @@
}: }:
let let
inherit (lib) types;
checkMaintainer = handle: uncheckedAttrs: checkMaintainer = handle: uncheckedAttrs:
let let
prefix = [ "lib" "maintainers" handle ]; prefix = [ "lib" "maintainers" handle ];

View file

@ -6,7 +6,6 @@ let
inherit (lib) inherit (lib)
elem elem
flip flip
functionArgs
isAttrs isAttrs
isBool isBool
isDerivation isDerivation
@ -16,7 +15,6 @@ let
isList isList
isString isString
isStorePath isStorePath
setFunctionArgs
toDerivation toDerivation
toList toList
; ;

View file

@ -2877,6 +2877,12 @@
githubId = 1382175; githubId = 1382175;
name = "Oliver Matthews"; name = "Oliver Matthews";
}; };
cwyc = {
email = "hello@cwyc.page";
github = "cwyc";
githubId = 16950437;
name = "cwyc";
};
cyounkins = { cyounkins = {
name = "Craig Younkins"; name = "Craig Younkins";
email = "cyounkins@gmail.com"; email = "cyounkins@gmail.com";
@ -4833,6 +4839,15 @@
fingerprint = "386E D1BF 848A BB4A 6B4A 3C45 FC83 907C 125B C2BC"; fingerprint = "386E D1BF 848A BB4A 6B4A 3C45 FC83 907C 125B C2BC";
}]; }];
}; };
georgesalkhouri = {
name = "Georges Alkhouri";
email = "incense.stitch_0w@icloud.com";
github = "GeorgesAlkhouri";
githubId = 6077574;
keys = [{
fingerprint = "1608 9E8D 7C59 54F2 6A7A 7BD0 8BD2 09DC C54F D339";
}];
};
georgewhewell = { georgewhewell = {
email = "georgerw@gmail.com"; email = "georgerw@gmail.com";
github = "georgewhewell"; github = "georgewhewell";
@ -9381,6 +9396,12 @@
githubId = 1222539; githubId = 1222539;
name = "Roman Naumann"; name = "Roman Naumann";
}; };
naphta = {
email = "naphta@noreply.github.com";
github = "naphta";
githubId = 6709831;
name = "Jake Hill";
};
nasirhm = { nasirhm = {
email = "nasirhussainm14@gmail.com"; email = "nasirhussainm14@gmail.com";
github = "nasirhm"; github = "nasirhm";
@ -9534,6 +9555,12 @@
github = "nessdoor"; github = "nessdoor";
githubId = 25993494; githubId = 25993494;
}; };
net-mist = {
email = "archimist.linux@gmail.com";
github = "Net-Mist";
githubId = 13920346;
name = "Sébastien Iooss";
};
netali = { netali = {
name = "Jennifer Graul"; name = "Jennifer Graul";
email = "me@netali.de"; email = "me@netali.de";
@ -12848,13 +12875,6 @@
githubId = 2666479; githubId = 2666479;
name = "Y Nguyen"; name = "Y Nguyen";
}; };
superherointj = {
name = "Sérgio G.";
email = "5861043+superherointj@users.noreply.github.com";
matrix = "@superherointj:matrix.org";
github = "superherointj";
githubId = 5861043;
};
SuperSandro2000 = { SuperSandro2000 = {
email = "sandro.jaeckel@gmail.com"; email = "sandro.jaeckel@gmail.com";
matrix = "@sandro:supersandro.de"; matrix = "@sandro:supersandro.de";
@ -15396,6 +15416,12 @@
github = "jali-clarke"; github = "jali-clarke";
githubId = 17733984; githubId = 17733984;
}; };
wesleyjrz = {
email = "wesleyjr2002@gmail.com";
name = "Wesley V. Santos Jr.";
github = "wesleyjrz";
githubId = 60184588;
};
npatsakula = { npatsakula = {
email = "nikita.patsakula@gmail.com"; email = "nikita.patsakula@gmail.com";
name = "Patsakula Nikita"; name = "Patsakula Nikita";

View file

@ -20,6 +20,7 @@ fluent,,,,,,alerque
gitsigns.nvim,https://github.com/lewis6991/gitsigns.nvim.git,,,,5.1, gitsigns.nvim,https://github.com/lewis6991/gitsigns.nvim.git,,,,5.1,
http,,,,0.3-0,,vcunat http,,,,0.3-0,,vcunat
inspect,,,,,, inspect,,,,,,
jsregexp,,,,,,
ldbus,,,http://luarocks.org/dev,,, ldbus,,,http://luarocks.org/dev,,,
ldoc,https://github.com/stevedonovan/LDoc.git,,,,, ldoc,https://github.com/stevedonovan/LDoc.git,,,,,
lgi,,,,,, lgi,,,,,,

1 name src ref server version luaversion maintainers
20 gitsigns.nvim https://github.com/lewis6991/gitsigns.nvim.git 5.1
21 http 0.3-0 vcunat
22 inspect
23 jsregexp
24 ldbus http://luarocks.org/dev
25 ldoc https://github.com/stevedonovan/LDoc.git
26 lgi

View file

@ -15,6 +15,8 @@
- `scope` describes the scope of the group. - `scope` describes the scope of the group.
- `shortName` short human-readable name - `shortName` short human-readable name
- `enableFeatureFreezePing` will ping this team during the Feature Freeze announcements on releases - `enableFeatureFreezePing` will ping this team during the Feature Freeze announcements on releases
- There is limited mention capacity in a single post, so this should be reserved for critical components
or larger ecosystems within nixpkgs.
- `githubTeams` will ping specified GitHub teams as well - `githubTeams` will ping specified GitHub teams as well
More fields may be added in the future. More fields may be added in the future.
@ -38,6 +40,7 @@ with lib.maintainers; {
]; ];
scope = "Maintain ACME-related packages and modules."; scope = "Maintain ACME-related packages and modules.";
shortName = "ACME"; shortName = "ACME";
enableFeatureFreezePing = true;
}; };
bazel = { bazel = {
@ -90,7 +93,6 @@ with lib.maintainers; {
]; ];
scope = "Maintain Blockchain packages and modules."; scope = "Maintain Blockchain packages and modules.";
shortName = "Blockchains"; shortName = "Blockchains";
enableFeatureFreezePing = true;
}; };
c = { c = {
@ -111,7 +113,6 @@ with lib.maintainers; {
]; ];
scope = "Maintain packages used in the C3D2 hackspace"; scope = "Maintain packages used in the C3D2 hackspace";
shortName = "c3d2"; shortName = "c3d2";
enableFeatureFreezePing = true;
}; };
cinnamon = { cinnamon = {
@ -202,7 +203,6 @@ with lib.maintainers; {
]; ];
scope = "Maintain Docker and related tools."; scope = "Maintain Docker and related tools.";
shortName = "DockerTools"; shortName = "DockerTools";
enableFeatureFreezePing = true;
}; };
docs = { docs = {
@ -220,7 +220,6 @@ with lib.maintainers; {
]; ];
scope = "Maintain the Emacs editor and packages."; scope = "Maintain the Emacs editor and packages.";
shortName = "Emacs"; shortName = "Emacs";
enableFeatureFreezePing = true;
}; };
enlightenment = { enlightenment = {
@ -364,6 +363,17 @@ with lib.maintainers; {
shortName = "Kodi"; shortName = "Kodi";
}; };
libretro = {
members = [
aanderse
edwtjo
MP2E
thiagokokada
];
scope = "Maintain Libretro, RetroArch and related packages.";
shortName = "Libretro";
};
linux-kernel = { linux-kernel = {
members = [ members = [
TredwellGit TredwellGit
@ -385,6 +395,15 @@ with lib.maintainers; {
shortName = "Lumiguide employees"; shortName = "Lumiguide employees";
}; };
lua = {
githubTeams = [
"lua"
];
scope = "Maintain the lua ecosystem.";
shortName = "lua";
enableFeatureFreezePing = true;
};
lumina = { lumina = {
members = [ members = [
romildo romildo
@ -426,6 +445,7 @@ with lib.maintainers; {
]; ];
scope = "Maintain Mate desktop environment and related packages."; scope = "Maintain Mate desktop environment and related packages.";
shortName = "MATE"; shortName = "MATE";
enableFeatureFreezePing = true;
}; };
matrix = { matrix = {
@ -448,7 +468,6 @@ with lib.maintainers; {
]; ];
scope = "Maintain Mobile NixOS."; scope = "Maintain Mobile NixOS.";
shortName = "Mobile"; shortName = "Mobile";
enableFeatureFreezePing = true;
}; };
nix = { nix = {
@ -483,7 +502,6 @@ with lib.maintainers; {
tazjin tazjin
zimbatm zimbatm
]; ];
enableFeatureFreezePing = true;
scope = "Group registration for Numtide team members who collectively maintain packages."; scope = "Group registration for Numtide team members who collectively maintain packages.";
shortName = "Numtide team"; shortName = "Numtide team";
}; };
@ -548,7 +566,6 @@ with lib.maintainers; {
]; ];
scope = "Maintain Podman and CRI-O related packages and modules."; scope = "Maintain Podman and CRI-O related packages and modules.";
shortName = "Podman"; shortName = "Podman";
enableFeatureFreezePing = true;
}; };
postgres = { postgres = {
@ -557,7 +574,6 @@ with lib.maintainers; {
]; ];
scope = "Maintain the PostgreSQL package and plugins along with the NixOS module."; scope = "Maintain the PostgreSQL package and plugins along with the NixOS module.";
shortName = "PostgreSQL"; shortName = "PostgreSQL";
enableFeatureFreezePing = true;
}; };
python = { python = {
@ -610,7 +626,6 @@ with lib.maintainers; {
]; ];
scope = "Manage the current nixpkgs/NixOS release."; scope = "Manage the current nixpkgs/NixOS release.";
shortName = "Release"; shortName = "Release";
enableFeatureFreezePing = true;
}; };
ruby = { ruby = {
@ -699,7 +714,6 @@ with lib.maintainers; {
]; ];
scope = "Maintain the vim and neovim text editors and related packages."; scope = "Maintain the vim and neovim text editors and related packages.";
shortName = "Vim/Neovim"; shortName = "Vim/Neovim";
enableFeatureFreezePing = true;
}; };
xfce = { xfce = {
@ -708,5 +722,6 @@ with lib.maintainers; {
]; ];
scope = "Maintain Xfce desktop environment and related packages."; scope = "Maintain Xfce desktop environment and related packages.";
shortName = "Xfce"; shortName = "Xfce";
enableFeatureFreezePing = true;
}; };
} }

View file

@ -63,6 +63,7 @@ let
}; };
documentType = "none"; documentType = "none";
variablelistId = "test-options-list"; variablelistId = "test-options-list";
optionIdPrefix = "test-opt-";
}; };
sources = lib.sourceFilesBySuffices ./. [".xml"]; sources = lib.sourceFilesBySuffices ./. [".xml"];

View file

@ -39,11 +39,11 @@ directory.
## Interactive-only test configuration {#sec-nixos-test-interactive-configuration} ## Interactive-only test configuration {#sec-nixos-test-interactive-configuration}
The `.driverInteractive` attribute combines the regular test configuration with The `.driverInteractive` attribute combines the regular test configuration with
definitions from the [`interactive` submodule](#opt-interactive). This gives you definitions from the [`interactive` submodule](#test-opt-interactive). This gives you
a more usable, graphical, but slightly different configuration. a more usable, graphical, but slightly different configuration.
You can add your own interactive-only test configuration by adding extra You can add your own interactive-only test configuration by adding extra
configuration to the [`interactive` submodule](#opt-interactive). configuration to the [`interactive` submodule](#test-opt-interactive).
To interactively run only the regular configuration, build the `<test>.driver` attribute To interactively run only the regular configuration, build the `<test>.driver` attribute
instead, and call it with the flag `result/bin/nixos-test-driver --interactive`. instead, and call it with the flag `result/bin/nixos-test-driver --interactive`.

View file

@ -22,12 +22,12 @@ A NixOS test is a module that has the following structure:
``` ```
We refer to the whole test above as a test module, whereas the values We refer to the whole test above as a test module, whereas the values
in [`nodes.<name>`](#opt-nodes) are NixOS modules themselves. in [`nodes.<name>`](#test-opt-nodes) are NixOS modules themselves.
The option [`testScript`](#opt-testScript) is a piece of Python code that executes the The option [`testScript`](#test-opt-testScript) is a piece of Python code that executes the
test (described below). During the test, it will start one or more test (described below). During the test, it will start one or more
virtual machines, the configuration of which is described by virtual machines, the configuration of which is described by
the option [`nodes`](#opt-nodes). the option [`nodes`](#test-opt-nodes).
An example of a single-node test is An example of a single-node test is
[`login.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix). [`login.nix`](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests/login.nix).
@ -171,7 +171,7 @@ The following methods are available on machine objects:
least one will be returned. least one will be returned.
::: {.note} ::: {.note}
This requires [`enableOCR`](#opt-enableOCR) to be set to `true`. This requires [`enableOCR`](#test-opt-enableOCR) to be set to `true`.
::: :::
`get_screen_text` `get_screen_text`
@ -180,7 +180,7 @@ The following methods are available on machine objects:
machine\'s screen using optical character recognition. machine\'s screen using optical character recognition.
::: {.note} ::: {.note}
This requires [`enableOCR`](#opt-enableOCR) to be set to `true`. This requires [`enableOCR`](#test-opt-enableOCR) to be set to `true`.
::: :::
`send_monitor_command` `send_monitor_command`
@ -291,7 +291,7 @@ The following methods are available on machine objects:
`get_screen_text` and `get_screen_text_variants`). `get_screen_text` and `get_screen_text_variants`).
::: {.note} ::: {.note}
This requires [`enableOCR`](#opt-enableOCR) to be set to `true`. This requires [`enableOCR`](#test-opt-enableOCR) to be set to `true`.
::: :::
`wait_for_console_text` `wait_for_console_text`

View file

@ -44,14 +44,14 @@ $ ./result/bin/nixos-test-driver --keep-vm-state
<para> <para>
The <literal>.driverInteractive</literal> attribute combines the The <literal>.driverInteractive</literal> attribute combines the
regular test configuration with definitions from the regular test configuration with definitions from the
<link linkend="opt-interactive"><literal>interactive</literal> <link linkend="test-opt-interactive"><literal>interactive</literal>
submodule</link>. This gives you a more usable, graphical, but submodule</link>. This gives you a more usable, graphical, but
slightly different configuration. slightly different configuration.
</para> </para>
<para> <para>
You can add your own interactive-only test configuration by adding You can add your own interactive-only test configuration by adding
extra configuration to the extra configuration to the
<link linkend="opt-interactive"><literal>interactive</literal> <link linkend="test-opt-interactive"><literal>interactive</literal>
submodule</link>. submodule</link>.
</para> </para>
<para> <para>

View file

@ -24,16 +24,16 @@
<para> <para>
We refer to the whole test above as a test module, whereas the We refer to the whole test above as a test module, whereas the
values in values in
<link linkend="opt-nodes"><literal>nodes.&lt;name&gt;</literal></link> <link linkend="test-opt-nodes"><literal>nodes.&lt;name&gt;</literal></link>
are NixOS modules themselves. are NixOS modules themselves.
</para> </para>
<para> <para>
The option The option
<link linkend="opt-testScript"><literal>testScript</literal></link> <link linkend="test-opt-testScript"><literal>testScript</literal></link>
is a piece of Python code that executes the test (described below). is a piece of Python code that executes the test (described below).
During the test, it will start one or more virtual machines, the During the test, it will start one or more virtual machines, the
configuration of which is described by the option configuration of which is described by the option
<link linkend="opt-nodes"><literal>nodes</literal></link>. <link linkend="test-opt-nodes"><literal>nodes</literal></link>.
</para> </para>
<para> <para>
An example of a single-node test is An example of a single-node test is
@ -263,7 +263,7 @@ start_all()
<note> <note>
<para> <para>
This requires This requires
<link linkend="opt-enableOCR"><literal>enableOCR</literal></link> <link linkend="test-opt-enableOCR"><literal>enableOCR</literal></link>
to be set to <literal>true</literal>. to be set to <literal>true</literal>.
</para> </para>
</note> </note>
@ -281,7 +281,7 @@ start_all()
<note> <note>
<para> <para>
This requires This requires
<link linkend="opt-enableOCR"><literal>enableOCR</literal></link> <link linkend="test-opt-enableOCR"><literal>enableOCR</literal></link>
to be set to <literal>true</literal>. to be set to <literal>true</literal>.
</para> </para>
</note> </note>
@ -522,7 +522,7 @@ start_all()
<note> <note>
<para> <para>
This requires This requires
<link linkend="opt-enableOCR"><literal>enableOCR</literal></link> <link linkend="test-opt-enableOCR"><literal>enableOCR</literal></link>
to be set to <literal>true</literal>. to be set to <literal>true</literal>.
</para> </para>
</note> </note>

View file

@ -194,6 +194,13 @@
<link linkend="opt-services.komga.enable">services.komga</link>. <link linkend="opt-services.komga.enable">services.komga</link>.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
<link xlink:href="https://tandoor.dev">Tandoor Recipes</link>,
a self-hosted multi-tenant recipe collection. Available as
<link xlink:href="options.html#opt-services.tandoor-recipes.enable">services.tandoor-recipes</link>.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
<link xlink:href="https://hbase.apache.org/">HBase <link xlink:href="https://hbase.apache.org/">HBase
@ -313,6 +320,15 @@
<link linkend="opt-services.go-autoconfig.enable">services.go-autoconfig</link>. <link linkend="opt-services.go-autoconfig.enable">services.go-autoconfig</link>.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
<link xlink:href="https://github.com/tmate-io/tmate-ssh-server">tmate-ssh-server</link>,
server side part of
<link xlink:href="https://tmate.io/">tmate</link>. Available
as
<link linkend="opt-services.tmate-ssh-server.enable">services.tmate-ssh-server</link>.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
<link xlink:href="https://www.grafana.com/oss/tempo/">Grafana <link xlink:href="https://www.grafana.com/oss/tempo/">Grafana
@ -503,14 +519,6 @@
maintainer to update the package. maintainer to update the package.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
The (previously undocumented) Nixpkgs configuration option
<literal>checkMeta</literal> now defaults to
<literal>true</literal>. This may cause evaluation failures
for packages with incorrect <literal>meta</literal> attribute.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
xow package removed along with the xow package removed along with the
@ -528,6 +536,16 @@
<literal>services.datadog-agent</literal> module. <literal>services.datadog-agent</literal> module.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
<literal>teleport</literal> has been upgraded to major version
10. Please see upstream
<link xlink:href="https://goteleport.com/docs/ver/10.0/management/operations/upgrading/">upgrade
instructions</link> and
<link xlink:href="https://goteleport.com/docs/ver/10.0/changelog/#1000">release
notes</link>.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
lemmy module option lemmy module option
@ -767,6 +785,13 @@
grants access to the hardware. grants access to the hardware.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
The Wordpress module got support for installing language packs
through
<literal>services.wordpress.sites.&lt;site&gt;.languages</literal>.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
There is a new module for the <literal>thunar</literal> There is a new module for the <literal>thunar</literal>

View file

@ -72,6 +72,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [Komga](https://komga.org/), a free and open source comics/mangas media server. Available as [services.komga](#opt-services.komga.enable). - [Komga](https://komga.org/), a free and open source comics/mangas media server. Available as [services.komga](#opt-services.komga.enable).
- [Tandoor Recipes](https://tandoor.dev), a self-hosted multi-tenant recipe collection. Available as [services.tandoor-recipes](options.html#opt-services.tandoor-recipes.enable).
- [HBase cluster](https://hbase.apache.org/), a distributed, scalable, big data store. Available as [services.hadoop.hbase](options.html#opt-services.hadoop.hbase.enable). - [HBase cluster](https://hbase.apache.org/), a distributed, scalable, big data store. Available as [services.hadoop.hbase](options.html#opt-services.hadoop.hbase.enable).
- [Sachet](https://github.com/messagebird/sachet/), an SMS alerting tool for the Prometheus Alertmanager. Available as [services.prometheus.sachet](#opt-services.prometheus.sachet.enable). - [Sachet](https://github.com/messagebird/sachet/), an SMS alerting tool for the Prometheus Alertmanager. Available as [services.prometheus.sachet](#opt-services.prometheus.sachet.enable).
@ -108,6 +110,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [go-autoconfig](https://github.com/L11R/go-autoconfig), IMAP/SMTP autodiscover server. Available as [services.go-autoconfig](#opt-services.go-autoconfig.enable). - [go-autoconfig](https://github.com/L11R/go-autoconfig), IMAP/SMTP autodiscover server. Available as [services.go-autoconfig](#opt-services.go-autoconfig.enable).
- [tmate-ssh-server](https://github.com/tmate-io/tmate-ssh-server), server side part of [tmate](https://tmate.io/). Available as [services.tmate-ssh-server](#opt-services.tmate-ssh-server.enable).
- [Grafana Tempo](https://www.grafana.com/oss/tempo/), a distributed tracing store. Available as [services.tempo](#opt-services.tempo.enable). - [Grafana Tempo](https://www.grafana.com/oss/tempo/), a distributed tracing store. Available as [services.tempo](#opt-services.tempo.enable).
- [AusweisApp2](https://www.ausweisapp.bund.de/), the authentication software for the German ID card. Available as [programs.ausweisapp](#opt-programs.ausweisapp.enable). - [AusweisApp2](https://www.ausweisapp.bund.de/), the authentication software for the German ID card. Available as [programs.ausweisapp](#opt-programs.ausweisapp.enable).
@ -172,13 +176,12 @@ Available as [services.patroni](options.html#opt-services.patroni.enable).
- riak package removed along with `services.riak` module, due to lack of maintainer to update the package. - riak package removed along with `services.riak` module, due to lack of maintainer to update the package.
- The (previously undocumented) Nixpkgs configuration option `checkMeta` now defaults to `true`. This may cause evaluation
failures for packages with incorrect `meta` attribute.
- xow package removed along with the `hardware.xow` module, due to the project being deprecated in favor of `xone`, which is available via the `hardware.xone` module. - xow package removed along with the `hardware.xow` module, due to the project being deprecated in favor of `xone`, which is available via the `hardware.xone` module.
- dd-agent package removed along with the `services.dd-agent` module, due to the project being deprecated in favor of `datadog-agent`, which is available via the `services.datadog-agent` module. - dd-agent package removed along with the `services.dd-agent` module, due to the project being deprecated in favor of `datadog-agent`, which is available via the `services.datadog-agent` module.
- `teleport` has been upgraded to major version 10. Please see upstream [upgrade instructions](https://goteleport.com/docs/ver/10.0/management/operations/upgrading/) and [release notes](https://goteleport.com/docs/ver/10.0/changelog/#1000).
- lemmy module option `services.lemmy.settings.database.createLocally` - lemmy module option `services.lemmy.settings.database.createLocally`
moved to `services.lemmy.database.createLocally`. moved to `services.lemmy.database.createLocally`.
@ -254,6 +257,8 @@ Available as [services.patroni](options.html#opt-services.patroni.enable).
- There is a new module for AMD SEV CPU functionality, which grants access to the hardware. - There is a new module for AMD SEV CPU functionality, which grants access to the hardware.
- The Wordpress module got support for installing language packs through `services.wordpress.sites.<site>.languages`.
- There is a new module for the `thunar` program (the Xfce file manager), which depends on the `xfconf` dbus service, and also has a dbus service and a systemd unit. The option `services.xserver.desktopManager.xfce.thunarPlugins` has been renamed to `programs.thunar.plugins`, and in a future release it may be removed. - There is a new module for the `thunar` program (the Xfce file manager), which depends on the `xfconf` dbus service, and also has a dbus service and a systemd unit. The option `services.xserver.desktopManager.xfce.thunarPlugins` has been renamed to `programs.thunar.plugins`, and in a future release it may be removed.
- There is a new module for the `xfconf` program (the Xfce configuration storage system), which has a dbus service. - There is a new module for the `xfconf` program (the Xfce configuration storage system), which has a dbus service.

View file

@ -143,13 +143,6 @@ let
properties properties
); );
featuresToProperties = features:
lib.listToAttrs
(builtins.map (feature: {
name = "feature@${feature}";
value = "enabled";
}) features);
createDatasets = createDatasets =
let let
datasetlist = lib.mapAttrsToList lib.nameValuePair datasets; datasetlist = lib.mapAttrsToList lib.nameValuePair datasets;

View file

@ -26,6 +26,8 @@
# If you include more than one option list into a document, you need to # If you include more than one option list into a document, you need to
# provide different ids. # provide different ids.
, variablelistId ? "configuration-variable-list" , variablelistId ? "configuration-variable-list"
# Strig to prefix to the option XML/HTML id attributes.
, optionIdPrefix ? "opt-"
, revision ? "" # Specify revision for the options , revision ? "" # Specify revision for the options
# a set of options the docs we are generating will be merged into, as if by recursiveUpdate. # a set of options the docs we are generating will be merged into, as if by recursiveUpdate.
# used to split the options doc build into a static part (nixos/modules) and a dynamic part # used to split the options doc build into a static part (nixos/modules) and a dynamic part
@ -183,6 +185,7 @@ in rec {
--stringparam documentType '${documentType}' \ --stringparam documentType '${documentType}' \
--stringparam revision '${revision}' \ --stringparam revision '${revision}' \
--stringparam variablelistId '${variablelistId}' \ --stringparam variablelistId '${variablelistId}' \
--stringparam optionIdPrefix '${optionIdPrefix}' \
-o intermediate.xml ${./options-to-docbook.xsl} sorted.xml -o intermediate.xml ${./options-to-docbook.xsl} sorted.xml
${pkgs.libxslt.bin}/bin/xsltproc \ ${pkgs.libxslt.bin}/bin/xsltproc \
-o "$out" ${./postprocess-option-descriptions.xsl} intermediate.xml -o "$out" ${./postprocess-option-descriptions.xsl} intermediate.xml

View file

@ -15,6 +15,7 @@
<xsl:param name="documentType" /> <xsl:param name="documentType" />
<xsl:param name="program" /> <xsl:param name="program" />
<xsl:param name="variablelistId" /> <xsl:param name="variablelistId" />
<xsl:param name="optionIdPrefix" />
<xsl:template match="/expr/list"> <xsl:template match="/expr/list">
@ -36,7 +37,7 @@
<xsl:attribute name="id" namespace="http://www.w3.org/XML/1998/namespace"><xsl:value-of select="$variablelistId"/></xsl:attribute> <xsl:attribute name="id" namespace="http://www.w3.org/XML/1998/namespace"><xsl:value-of select="$variablelistId"/></xsl:attribute>
<xsl:for-each select="attrs"> <xsl:for-each select="attrs">
<xsl:variable name="id" select=" <xsl:variable name="id" select="
concat('opt-', concat($optionIdPrefix,
translate( translate(
attr[@name = 'name']/string/@value, attr[@name = 'name']/string/@value,
'*&lt; >[]:', '*&lt; >[]:',

View file

@ -131,15 +131,6 @@ let
properties properties
); );
featuresToProperties = features:
lib.listToAttrs
(builtins.map
(feature: {
name = "feature@${feature}";
value = "enabled";
})
features);
createDatasets = createDatasets =
let let
datasetlist = lib.mapAttrsToList lib.nameValuePair datasets; datasetlist = lib.mapAttrsToList lib.nameValuePair datasets;

View file

@ -19,7 +19,7 @@ rec {
]; ];
qemuSerialDevice = qemuSerialDevice =
if pkgs.stdenv.hostPlatform.isx86 || pkgs.stdenv.hostPlatform.isRiscV then "ttyS0" if with pkgs.stdenv.hostPlatform; isx86 || isMips64 || isRiscV then "ttyS0"
else if (with pkgs.stdenv.hostPlatform; isAarch || isPower) then "ttyAMA0" else if (with pkgs.stdenv.hostPlatform; isAarch || isPower) then "ttyAMA0"
else throw "Unknown QEMU serial device for system '${pkgs.stdenv.hostPlatform.system}'"; else throw "Unknown QEMU serial device for system '${pkgs.stdenv.hostPlatform.system}'";

View file

@ -120,7 +120,7 @@ in
}; };
qemu.package = mkOption { qemu.package = mkOption {
description = mdDoc "Which qemu package to use for the virtualisation of [{option}`nodes`](#opt-nodes)."; description = mdDoc "Which qemu package to use for the virtualisation of [{option}`nodes`](#test-opt-nodes).";
type = types.package; type = types.package;
default = hostPkgs.qemu_test; default = hostPkgs.qemu_test;
defaultText = "hostPkgs.qemu_test"; defaultText = "hostPkgs.qemu_test";
@ -152,7 +152,7 @@ in
description = mdDoc '' description = mdDoc ''
Extra arguments to pass to the test driver. Extra arguments to pass to the test driver.
They become part of [{option}`driver`](#opt-driver) via `wrapProgram`. They become part of [{option}`driver`](#test-opt-driver) via `wrapProgram`.
''; '';
type = types.listOf types.str; type = types.listOf types.str;
default = []; default = [];
@ -172,7 +172,7 @@ in
description = mdDoc '' description = mdDoc ''
Disable type checking. This must not be enabled for new NixOS tests. Disable type checking. This must not be enabled for new NixOS tests.
This may speed up your iteration cycle, unless you're working on the [{option}`testScript`](#opt-testScript). This may speed up your iteration cycle, unless you're working on the [{option}`testScript`](#test-opt-testScript).
''; '';
}; };
}; };

View file

@ -24,14 +24,14 @@ in
type = types.nullOr types.int; type = types.nullOr types.int;
default = null; # NOTE: null values are filtered out by `meta`. default = null; # NOTE: null values are filtered out by `meta`.
description = mdDoc '' description = mdDoc ''
The [{option}`test`](#opt-test)'s [`meta.timeout`](https://nixos.org/manual/nixpkgs/stable/#var-meta-timeout) in seconds. The [{option}`test`](#test-opt-test)'s [`meta.timeout`](https://nixos.org/manual/nixpkgs/stable/#var-meta-timeout) in seconds.
''; '';
}; };
broken = lib.mkOption { broken = lib.mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = mdDoc '' description = mdDoc ''
Sets the [`meta.broken`](https://nixos.org/manual/nixpkgs/stable/#var-meta-broken) attribute on the [{option}`test`](#opt-test) derivation. Sets the [`meta.broken`](https://nixos.org/manual/nixpkgs/stable/#var-meta-broken) attribute on the [{option}`test`](#test-opt-test) derivation.
''; '';
}; };
}; };

View file

@ -7,7 +7,7 @@ in
description = mdDoc '' description = mdDoc ''
The name of the test. The name of the test.
This is used in the derivation names of the [{option}`driver`](#opt-driver) and [{option}`test`](#opt-test) runner. This is used in the derivation names of the [{option}`driver`](#test-opt-driver) and [{option}`test`](#test-opt-test) runner.
''; '';
type = types.str; type = types.str;
}; };

View file

@ -44,7 +44,7 @@ in
description = mdDoc '' description = mdDoc ''
An attribute set of NixOS configuration modules. An attribute set of NixOS configuration modules.
The configurations are augmented by the [`defaults`](#opt-defaults) option. The configurations are augmented by the [`defaults`](#test-opt-defaults) option.
They are assigned network addresses according to the `nixos/lib/testing/network.nix` module. They are assigned network addresses according to the `nixos/lib/testing/network.nix` module.
@ -54,7 +54,7 @@ in
defaults = mkOption { defaults = mkOption {
description = mdDoc '' description = mdDoc ''
NixOS configuration that is applied to all [{option}`nodes`](#opt-nodes). NixOS configuration that is applied to all [{option}`nodes`](#test-opt-nodes).
''; '';
type = types.deferredModule; type = types.deferredModule;
default = { }; default = { };
@ -62,7 +62,7 @@ in
extraBaseModules = mkOption { extraBaseModules = mkOption {
description = mdDoc '' description = mdDoc ''
NixOS configuration that, like [{option}`defaults`](#opt-defaults), is applied to all [{option}`nodes`](#opt-nodes) and can not be undone with [`specialisation.<name>.inheritParentConfig`](https://search.nixos.org/options?show=specialisation.%3Cname%3E.inheritParentConfig&from=0&size=50&sort=relevance&type=packages&query=specialisation). NixOS configuration that, like [{option}`defaults`](#test-opt-defaults), is applied to all [{option}`nodes`](#test-opt-nodes) and can not be undone with [`specialisation.<name>.inheritParentConfig`](https://search.nixos.org/options?show=specialisation.%3Cname%3E.inheritParentConfig&from=0&size=50&sort=relevance&type=packages&query=specialisation).
''; '';
type = types.deferredModule; type = types.deferredModule;
default = { }; default = { };
@ -82,7 +82,7 @@ in
type = types.bool; type = types.bool;
default = false; default = false;
description = mdDoc '' description = mdDoc ''
Enable to configure all [{option}`nodes`](#opt-nodes) to run with a minimal kernel. Enable to configure all [{option}`nodes`](#test-opt-nodes) to run with a minimal kernel.
''; '';
}; };

View file

@ -48,6 +48,6 @@ in
}; };
meta = { meta = {
maintainers = with lib.maintainers; [ superherointj ]; maintainers = with lib.maintainers; [ ];
}; };
} }

View file

@ -16,7 +16,7 @@ in
extraModprobeConfig = extraModprobeConfig =
mkIf mkIf
(config.hardware.bluetooth.enable && (config.hardware.bluetooth.enable &&
(lib.versionOlder config.boot.kernelPackages.kernel.version "5.12")) (lib.versionOlder config.boot.kernelPackages.kernel.version "5.12"))
"options bluetooth disable_ertm=1"; "options bluetooth disable_ertm=1";
extraModulePackages = with config.boot.kernelPackages; [ xpadneo ]; extraModulePackages = with config.boot.kernelPackages; [ xpadneo ];

View file

@ -31,6 +31,7 @@ let
in in
{ {
nix.registry.nixpkgs.flake.outPath = builtins.path { name = "source"; path = pkgs.path; };
# Provide the NixOS/Nixpkgs sources in /etc/nixos. This is required # Provide the NixOS/Nixpkgs sources in /etc/nixos. This is required
# for nixos-install. # for nixos-install.
boot.postBootCommands = mkAfter boot.postBootCommands = mkAfter

View file

@ -15,7 +15,7 @@ let
inherit system pkgs; inherit system pkgs;
}; };
interactiveDriver = (testing.makeTest { inherit nodes; name = "network"; testScript = "start_all(); join_all();"; }).driverInteractive; interactiveDriver = (testing.makeTest { inherit nodes; name = "network"; testScript = "start_all(); join_all();"; }).test.driverInteractive;
in in

View file

@ -653,6 +653,7 @@
./services/misc/svnserve.nix ./services/misc/svnserve.nix
./services/misc/synergy.nix ./services/misc/synergy.nix
./services/misc/sysprof.nix ./services/misc/sysprof.nix
./services/misc/tandoor-recipes.nix
./services/misc/taskserver ./services/misc/taskserver
./services/misc/tiddlywiki.nix ./services/misc/tiddlywiki.nix
./services/misc/tp-auto-kbbl.nix ./services/misc/tp-auto-kbbl.nix
@ -721,7 +722,7 @@
./services/network-filesystems/drbd.nix ./services/network-filesystems/drbd.nix
./services/network-filesystems/glusterfs.nix ./services/network-filesystems/glusterfs.nix
./services/network-filesystems/kbfs.nix ./services/network-filesystems/kbfs.nix
./services/network-filesystems/ipfs.nix ./services/network-filesystems/kubo.nix
./services/network-filesystems/litestream/default.nix ./services/network-filesystems/litestream/default.nix
./services/network-filesystems/netatalk.nix ./services/network-filesystems/netatalk.nix
./services/network-filesystems/nfsd.nix ./services/network-filesystems/nfsd.nix
@ -959,6 +960,7 @@
./services/networking/tinc.nix ./services/networking/tinc.nix
./services/networking/tinydns.nix ./services/networking/tinydns.nix
./services/networking/tftpd.nix ./services/networking/tftpd.nix
./services/networking/tmate-ssh-server.nix
./services/networking/trickster.nix ./services/networking/trickster.nix
./services/networking/tox-bootstrapd.nix ./services/networking/tox-bootstrapd.nix
./services/networking/tox-node.nix ./services/networking/tox-node.nix

View file

@ -69,7 +69,7 @@ in {
ProtectKernelTunables = true; ProtectKernelTunables = true;
ProtectSystem = "full"; ProtectSystem = "full";
StateDirectory = "rust-motd"; StateDirectory = "rust-motd";
RestrictAddressFamilies = "none"; RestrictAddressFamilies = [ "AF_UNIX" ];
RestrictNamespaces = true; RestrictNamespaces = true;
RestrictRealtime = true; RestrictRealtime = true;
RestrictSUIDSGID = true; RestrictSUIDSGID = true;

View file

@ -190,7 +190,7 @@ let
); );
renewOpts = escapeShellArgs ( renewOpts = escapeShellArgs (
commonOpts commonOpts
++ [ "renew" ] ++ [ "renew" "--no-random-sleep" ]
++ optionals data.ocspMustStaple [ "--must-staple" ] ++ optionals data.ocspMustStaple [ "--must-staple" ]
++ data.extraLegoRenewFlags ++ data.extraLegoRenewFlags
); );
@ -223,9 +223,9 @@ let
# have many certificates, the renewals are distributed over # have many certificates, the renewals are distributed over
# the course of the day to avoid rate limits. # the course of the day to avoid rate limits.
AccuracySec = "${toString (_24hSecs / numCerts)}s"; AccuracySec = "${toString (_24hSecs / numCerts)}s";
# Skew randomly within the day, per https://letsencrypt.org/docs/integration-guide/. # Skew randomly within the day, per https://letsencrypt.org/docs/integration-guide/.
RandomizedDelaySec = "24h"; RandomizedDelaySec = "24h";
FixedRandomDelay = true;
}; };
}; };
@ -325,6 +325,7 @@ let
''); '');
} // optionalAttrs (data.listenHTTP != null && toInt (elemAt (splitString ":" data.listenHTTP) 1) < 1024) { } // optionalAttrs (data.listenHTTP != null && toInt (elemAt (splitString ":" data.listenHTTP) 1) < 1024) {
CapabilityBoundingSet = [ "CAP_NET_BIND_SERVICE" ]; CapabilityBoundingSet = [ "CAP_NET_BIND_SERVICE" ];
AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" ];
}; };
# Working directory will be /tmp # Working directory will be /tmp
@ -376,7 +377,8 @@ let
# Check if we can renew. # Check if we can renew.
# We can only renew if the list of domains has not changed. # We can only renew if the list of domains has not changed.
if cmp -s domainhash.txt certificates/domainhash.txt && [ -e 'certificates/${keyName}.key' -a -e 'certificates/${keyName}.crt' -a -n "$(ls -1 accounts)" ]; then # We also need an account key. Avoids #190493
if cmp -s domainhash.txt certificates/domainhash.txt && [ -e 'certificates/${keyName}.key' -a -e 'certificates/${keyName}.crt' -a -n "$(find accounts -name '${data.email}.key')" ]; then
# Even if a cert is not expired, it may be revoked by the CA. # Even if a cert is not expired, it may be revoked by the CA.
# Try to renew, and silently fail if the cert is not expired. # Try to renew, and silently fail if the cert is not expired.

View file

@ -415,7 +415,7 @@ in {
# Empty string first, so we will never accidentally have an empty capability bounding set # Empty string first, so we will never accidentally have an empty capability bounding set
# https://github.com/NixOS/nixpkgs/issues/120617#issuecomment-830685115 # https://github.com/NixOS/nixpkgs/issues/120617#issuecomment-830685115
"" ""
] ++ lib.optionals (builtins.any useComponent [ "bluetooth" "bluetooth_le_tracker" "bluetooth_tracker" "eq3btsmart" "fjaraskupan" "govee_ble" "homekit_controller" "inkbird" "moat" "sensorpush" "switchbot" "xiaomi_ble" ]) [ ] ++ lib.optionals (builtins.any useComponent componentsUsingBluetooth) [
# Required for interaction with hci devices and bluetooth sockets, identified by bluetooth-adapters dependency # Required for interaction with hci devices and bluetooth sockets, identified by bluetooth-adapters dependency
# https://www.home-assistant.io/integrations/bluetooth_le_tracker/#rootless-setup-on-core-installs # https://www.home-assistant.io/integrations/bluetooth_le_tracker/#rootless-setup-on-core-installs
"CAP_NET_ADMIN" "CAP_NET_ADMIN"
@ -432,8 +432,30 @@ in {
]); ]);
componentsUsingBluetooth = [ componentsUsingBluetooth = [
# Components that require the AF_BLUETOOTH address family # Components that require the AF_BLUETOOTH address family
"bluetooth_tracker" "august"
"bluemaestro"
"bluetooth"
"bluetooth_le_tracker" "bluetooth_le_tracker"
"bluetooth_tracker"
"bthome"
"default_config"
"eq3btsmart"
"esphome"
"fjaraskupan"
"govee_ble"
"homekit_controller"
"inkbird"
"led_ble"
"melnor"
"moat"
"qingping"
"sensorpro"
"sensorpush"
"switchbot"
"thermobeacon"
"thermopro"
"xiaomi_ble"
"yalexs_ble"
]; ];
componentsUsingPing = [ componentsUsingPing = [
# Components that require the capset syscall for the ping wrapper # Components that require the capset syscall for the ping wrapper
@ -450,7 +472,6 @@ in {
# mostly the ones using config flows already. # mostly the ones using config flows already.
"acer_projector" "acer_projector"
"alarmdecoder" "alarmdecoder"
"arduino"
"blackbird" "blackbird"
"deconz" "deconz"
"dsmr" "dsmr"
@ -464,7 +485,6 @@ in {
"insteon" "insteon"
"kwb" "kwb"
"lacrosse" "lacrosse"
"mhz19"
"modbus" "modbus"
"modem_callerid" "modem_callerid"
"mysensors" "mysensors"
@ -480,7 +500,6 @@ in {
"usb" "usb"
"velbus" "velbus"
"w800rf32" "w800rf32"
"xbee"
"zha" "zha"
"zwave" "zwave"
"zwave_js" "zwave_js"

View file

@ -212,6 +212,9 @@ with lib;
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
"d /var/spool/nullmailer - ${cfg.user} - - -" "d /var/spool/nullmailer - ${cfg.user} - - -"
"d /var/spool/nullmailer/failed 750 ${cfg.user} - - -"
"d /var/spool/nullmailer/queue 750 ${cfg.user} - - -"
"d /var/spool/nullmailer/tmp 750 ${cfg.user} - - -"
]; ];
systemd.services.nullmailer = { systemd.services.nullmailer = {
@ -220,7 +223,6 @@ with lib;
after = [ "network.target" ]; after = [ "network.target" ];
preStart = '' preStart = ''
mkdir -p /var/spool/nullmailer/{queue,tmp,failed}
rm -f /var/spool/nullmailer/trigger && mkfifo -m 660 /var/spool/nullmailer/trigger rm -f /var/spool/nullmailer/trigger && mkfifo -m 660 /var/spool/nullmailer/trigger
''; '';

View file

@ -195,6 +195,25 @@ in
''; '';
}; };
}; };
options.sync_api.search = {
enable = lib.mkEnableOption (lib.mdDoc "Dendrite's full-text search engine");
index_path = lib.mkOption {
type = lib.types.str;
default = "${workingDir}/searchindex";
description = lib.mdDoc ''
The path the search index will be created in.
'';
};
language = lib.mkOption {
type = lib.types.str;
default = "en";
description = lib.mdDoc ''
The language most likely to be used on the server - used when indexing, to
ensure the returned results match expectations. A full list of possible languages
can be found at https://github.com/blevesearch/bleve/tree/master/analysis/lang
'';
};
};
options.user_api = { options.user_api = {
account_database = { account_database = {
connection_string = lib.mkOption { connection_string = lib.mkOption {

View file

@ -0,0 +1,144 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.services.tandoor-recipes;
pkg = cfg.package;
# SECRET_KEY through an env file
env = {
GUNICORN_CMD_ARGS = "--bind=${cfg.address}:${toString cfg.port}";
DEBUG = "0";
MEDIA_ROOT = "/var/lib/tandoor-recipes";
} // optionalAttrs (config.time.timeZone != null) {
TIMEZONE = config.time.timeZone;
} // (
lib.mapAttrs (_: toString) cfg.extraConfig
);
manage =
let
setupEnv = lib.concatStringsSep "\n" (mapAttrsToList (name: val: "export ${name}=\"${val}\"") env);
in
pkgs.writeShellScript "manage" ''
${setupEnv}
exec ${pkg}/bin/tandoor-recipes "$@"
'';
in
{
meta.maintainers = with maintainers; [ ambroisie ];
options.services.tandoor-recipes = {
enable = mkOption {
type = lib.types.bool;
default = false;
description = lib.mdDoc ''
Enable Tandoor Recipes.
When started, the Tandoor Recipes database is automatically created if
it doesn't exist and updated if the package has changed. Both tasks are
achieved by running a Django migration.
A script to manage the instance (by wrapping Django's manage.py) is linked to
`/var/lib/tandoor-recipes/tandoor-recipes-manage`.
'';
};
address = mkOption {
type = types.str;
default = "localhost";
description = lib.mdDoc "Web interface address.";
};
port = mkOption {
type = types.port;
default = 8080;
description = lib.mdDoc "Web interface port.";
};
extraConfig = mkOption {
type = types.attrs;
default = { };
description = lib.mdDoc ''
Extra tandoor recipes config options.
See [the example dot-env file](https://raw.githubusercontent.com/vabene1111/recipes/master/.env.template)
for available options.
'';
example = {
ENABLE_SIGNUP = "1";
};
};
package = mkOption {
type = types.package;
default = pkgs.tandoor-recipes;
defaultText = literalExpression "pkgs.tandoor-recipes";
description = lib.mdDoc "The Tandoor Recipes package to use.";
};
};
config = mkIf cfg.enable {
systemd.services.tandoor-recipes = {
description = "Tandoor Recipes server";
serviceConfig = {
ExecStart = ''
${pkg.python.pkgs.gunicorn}/bin/gunicorn recipes.wsgi
'';
Restart = "on-failure";
User = "tandoor_recipes";
DynamicUser = true;
StateDirectory = "tandoor-recipes";
WorkingDirectory = "/var/lib/tandoor-recipes";
RuntimeDirectory = "tandoor-recipes";
BindReadOnlyPaths = [
"${config.environment.etc."ssl/certs/ca-certificates.crt".source}:/etc/ssl/certs/ca-certificates.crt"
builtins.storeDir
"-/etc/resolv.conf"
"-/etc/nsswitch.conf"
"-/etc/hosts"
"-/etc/localtime"
"-/run/postgresql"
];
CapabilityBoundingSet = "";
LockPersonality = true;
MemoryDenyWriteExecute = true;
PrivateDevices = true;
PrivateUsers = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
RestrictAddressFamilies = [ "AF_UNIX" "AF_INET" "AF_INET6" ];
RestrictNamespaces = true;
RestrictRealtime = true;
SystemCallArchitectures = "native";
# gunicorn needs setuid
SystemCallFilter = [ "@system-service" "~@privileged" "@resources" "@setuid" "@keyring" ];
UMask = "0066";
} // lib.optionalAttrs (cfg.port < 1024) {
AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" ];
CapabilityBoundingSet = [ "CAP_NET_BIND_SERVICE" ];
};
wantedBy = [ "multi-user.target" ];
preStart = ''
ln -sf ${manage} tandoor-recipes-manage
# Let django migrate the DB as needed
${pkg}/bin/tandoor-recipes migrate
'';
environment = env // {
PYTHONPATH = "${pkg.python.pkgs.makePythonPath pkg.propagatedBuildInputs}:${pkg}/lib/tandoor-recipes";
};
};
};
}

View file

@ -1,9 +1,9 @@
{ config, lib, pkgs, utils, ... }: { config, lib, pkgs, utils, ... }:
with lib; with lib;
let let
cfg = config.services.ipfs; cfg = config.services.kubo;
ipfsFlags = utils.escapeSystemdExecArgs ( kuboFlags = utils.escapeSystemdExecArgs (
optional cfg.autoMount "--mount" ++ optional cfg.autoMount "--mount" ++
optional cfg.enableGC "--enable-gc" ++ optional cfg.enableGC "--enable-gc" ++
optional (cfg.serviceFdlimit != null) "--manage-fdlimit=false" ++ optional (cfg.serviceFdlimit != null) "--manage-fdlimit=false" ++
@ -50,27 +50,27 @@ in
options = { options = {
services.ipfs = { services.kubo = {
enable = mkEnableOption (lib.mdDoc "Interplanetary File System (WARNING: may cause severe network degredation)"); enable = mkEnableOption (lib.mdDoc "Interplanetary File System (WARNING: may cause severe network degredation)");
package = mkOption { package = mkOption {
type = types.package; type = types.package;
default = pkgs.ipfs; default = pkgs.kubo;
defaultText = literalExpression "pkgs.ipfs"; defaultText = literalExpression "pkgs.kubo";
description = lib.mdDoc "Which IPFS package to use."; description = lib.mdDoc "Which Kubo package to use.";
}; };
user = mkOption { user = mkOption {
type = types.str; type = types.str;
default = "ipfs"; default = "ipfs";
description = lib.mdDoc "User under which the IPFS daemon runs"; description = lib.mdDoc "User under which the Kubo daemon runs";
}; };
group = mkOption { group = mkOption {
type = types.str; type = types.str;
default = "ipfs"; default = "ipfs";
description = lib.mdDoc "Group under which the IPFS daemon runs"; description = lib.mdDoc "Group under which the Kubo daemon runs";
}; };
dataDir = mkOption { dataDir = mkOption {
@ -84,7 +84,7 @@ in
then "/var/lib/ipfs" then "/var/lib/ipfs"
else "/var/lib/ipfs/.ipfs" else "/var/lib/ipfs/.ipfs"
''; '';
description = lib.mdDoc "The data dir for IPFS"; description = lib.mdDoc "The data dir for Kubo";
}; };
defaultMode = mkOption { defaultMode = mkOption {
@ -96,13 +96,13 @@ in
autoMount = mkOption { autoMount = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = lib.mdDoc "Whether IPFS should try to mount /ipfs and /ipns at startup."; description = lib.mdDoc "Whether Kubo should try to mount /ipfs and /ipns at startup.";
}; };
autoMigrate = mkOption { autoMigrate = mkOption {
type = types.bool; type = types.bool;
default = true; default = true;
description = lib.mdDoc "Whether IPFS should try to run the fs-repo-migration at startup."; description = lib.mdDoc "Whether Kubo should try to run the fs-repo-migration at startup.";
}; };
ipfsMountDir = mkOption { ipfsMountDir = mkOption {
@ -126,7 +126,7 @@ in
apiAddress = mkOption { apiAddress = mkOption {
type = types.str; type = types.str;
default = "/ip4/127.0.0.1/tcp/5001"; default = "/ip4/127.0.0.1/tcp/5001";
description = lib.mdDoc "Where IPFS exposes its API to"; description = lib.mdDoc "Where Kubo exposes its API to";
}; };
swarmAddress = mkOption { swarmAddress = mkOption {
@ -137,7 +137,7 @@ in
"/ip4/0.0.0.0/udp/4001/quic" "/ip4/0.0.0.0/udp/4001/quic"
"/ip6/::/udp/4001/quic" "/ip6/::/udp/4001/quic"
]; ];
description = lib.mdDoc "Where IPFS listens for incoming p2p connections"; description = lib.mdDoc "Where Kubo listens for incoming p2p connections";
}; };
enableGC = mkOption { enableGC = mkOption {
@ -174,14 +174,14 @@ in
extraFlags = mkOption { extraFlags = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
description = lib.mdDoc "Extra flags passed to the IPFS daemon"; description = lib.mdDoc "Extra flags passed to the Kubo daemon";
default = [ ]; default = [ ];
}; };
localDiscovery = mkOption { localDiscovery = mkOption {
type = types.bool; type = types.bool;
description = lib.mdDoc ''Whether to enable local discovery for the ipfs daemon. description = lib.mdDoc ''Whether to enable local discovery for the Kubo daemon.
This will allow ipfs to scan ports on your local network. Some hosting services will ban you if you do this. This will allow Kubo to scan ports on your local network. Some hosting services will ban you if you do this.
''; '';
default = false; default = false;
}; };
@ -189,14 +189,14 @@ in
serviceFdlimit = mkOption { serviceFdlimit = mkOption {
type = types.nullOr types.int; type = types.nullOr types.int;
default = null; default = null;
description = lib.mdDoc "The fdlimit for the IPFS systemd unit or `null` to have the daemon attempt to manage it"; description = lib.mdDoc "The fdlimit for the Kubo systemd unit or `null` to have the daemon attempt to manage it";
example = 64 * 1024; example = 64 * 1024;
}; };
startWhenNeeded = mkOption { startWhenNeeded = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = lib.mdDoc "Whether to use socket activation to start IPFS when needed."; description = lib.mdDoc "Whether to use socket activation to start Kubo when needed.";
}; };
}; };
@ -223,7 +223,7 @@ in
uid = config.ids.uids.ipfs; uid = config.ids.uids.ipfs;
description = "IPFS daemon user"; description = "IPFS daemon user";
packages = [ packages = [
pkgs.ipfs-migrator pkgs.kubo-migrator
]; ];
}; };
}; };
@ -255,7 +255,7 @@ in
# After an unclean shutdown this file may exist which will cause the config command to attempt to talk to the daemon. This will hang forever if systemd is holding our sockets open. # After an unclean shutdown this file may exist which will cause the config command to attempt to talk to the daemon. This will hang forever if systemd is holding our sockets open.
rm -vf "$IPFS_PATH/api" rm -vf "$IPFS_PATH/api"
'' + optionalString cfg.autoMigrate '' '' + optionalString cfg.autoMigrate ''
${pkgs.ipfs-migrator}/bin/fs-repo-migrations -to '${cfg.package.repoVersion}' -y ${pkgs.kubo-migrator}/bin/fs-repo-migrations -to '${cfg.package.repoVersion}' -y
'' + '' '' + ''
ipfs --offline config profile apply ${profile} >/dev/null ipfs --offline config profile apply ${profile} >/dev/null
fi fi
@ -279,7 +279,7 @@ in
| ipfs --offline config replace - | ipfs --offline config replace -
''; '';
serviceConfig = { serviceConfig = {
ExecStart = [ "" "${cfg.package}/bin/ipfs daemon ${ipfsFlags}" ]; ExecStart = [ "" "${cfg.package}/bin/ipfs daemon ${kuboFlags}" ];
User = cfg.user; User = cfg.user;
Group = cfg.group; Group = cfg.group;
StateDirectory = ""; StateDirectory = "";
@ -320,4 +320,27 @@ in
meta = { meta = {
maintainers = with lib.maintainers; [ Luflosi ]; maintainers = with lib.maintainers; [ Luflosi ];
}; };
imports = [
(mkRenamedOptionModule [ "services" "ipfs" "enable" ] [ "services" "kubo" "enable" ])
(mkRenamedOptionModule [ "services" "ipfs" "package" ] [ "services" "kubo" "package" ])
(mkRenamedOptionModule [ "services" "ipfs" "user" ] [ "services" "kubo" "user" ])
(mkRenamedOptionModule [ "services" "ipfs" "group" ] [ "services" "kubo" "group" ])
(mkRenamedOptionModule [ "services" "ipfs" "dataDir" ] [ "services" "kubo" "dataDir" ])
(mkRenamedOptionModule [ "services" "ipfs" "defaultMode" ] [ "services" "kubo" "defaultMode" ])
(mkRenamedOptionModule [ "services" "ipfs" "autoMount" ] [ "services" "kubo" "autoMount" ])
(mkRenamedOptionModule [ "services" "ipfs" "autoMigrate" ] [ "services" "kubo" "autoMigrate" ])
(mkRenamedOptionModule [ "services" "ipfs" "ipfsMountDir" ] [ "services" "kubo" "ipfsMountDir" ])
(mkRenamedOptionModule [ "services" "ipfs" "ipnsMountDir" ] [ "services" "kubo" "ipnsMountDir" ])
(mkRenamedOptionModule [ "services" "ipfs" "gatewayAddress" ] [ "services" "kubo" "gatewayAddress" ])
(mkRenamedOptionModule [ "services" "ipfs" "apiAddress" ] [ "services" "kubo" "apiAddress" ])
(mkRenamedOptionModule [ "services" "ipfs" "swarmAddress" ] [ "services" "kubo" "swarmAddress" ])
(mkRenamedOptionModule [ "services" "ipfs" "enableGC" ] [ "services" "kubo" "enableGC" ])
(mkRenamedOptionModule [ "services" "ipfs" "emptyRepo" ] [ "services" "kubo" "emptyRepo" ])
(mkRenamedOptionModule [ "services" "ipfs" "extraConfig" ] [ "services" "kubo" "extraConfig" ])
(mkRenamedOptionModule [ "services" "ipfs" "extraFlags" ] [ "services" "kubo" "extraFlags" ])
(mkRenamedOptionModule [ "services" "ipfs" "localDiscovery" ] [ "services" "kubo" "localDiscovery" ])
(mkRenamedOptionModule [ "services" "ipfs" "serviceFdlimit" ] [ "services" "kubo" "serviceFdlimit" ])
(mkRenamedOptionModule [ "services" "ipfs" "startWhenNeeded" ] [ "services" "kubo" "startWhenNeeded" ])
];
} }

View file

@ -19,6 +19,9 @@ let
fxa_email_domain = "api.accounts.firefox.com"; fxa_email_domain = "api.accounts.firefox.com";
fxa_oauth_server_url = "https://oauth.accounts.firefox.com/v1"; fxa_oauth_server_url = "https://oauth.accounts.firefox.com/v1";
run_migrations = true; run_migrations = true;
# if JWK caching is not enabled the token server must verify tokens
# using the fxa api, on a thread pool with a static size.
additional_blocking_threads_for_fxa_requests = 10;
} // lib.optionalAttrs cfg.singleNode.enable { } // lib.optionalAttrs cfg.singleNode.enable {
# Single-node mode is likely to be used on small instances with little # Single-node mode is likely to be used on small instances with little
# capacity. The default value (0.1) can only ever release capacity when # capacity. The default value (0.1) can only ever release capacity when
@ -309,11 +312,7 @@ in
enableACME = cfg.singleNode.enableTLS; enableACME = cfg.singleNode.enableTLS;
forceSSL = cfg.singleNode.enableTLS; forceSSL = cfg.singleNode.enableTLS;
locations."/" = { locations."/" = {
proxyPass = "http://localhost:${toString cfg.settings.port}"; proxyPass = "http://127.0.0.1:${toString cfg.settings.port}";
# source mentions that this header should be set
extraConfig = ''
add_header X-Content-Type-Options nosniff;
'';
}; };
}; };
}; };

View file

@ -70,7 +70,7 @@ in
description = lib.mdDoc '' description = lib.mdDoc ''
Videobridge configuration. Videobridge configuration.
See <https://github.com/jitsi/jitsi-videobridge/blob/master/src/main/resources/reference.conf> See <https://github.com/jitsi/jitsi-videobridge/blob/master/jvb/src/main/resources/reference.conf>
for default configuration with comments. for default configuration with comments.
''; '';
}; };

View file

@ -26,6 +26,15 @@ in
''; '';
}; };
package = mkOption {
type = types.package;
default = pkgs.nix-serve;
defaultText = literalExpression "pkgs.nix-serve";
description = lib.mdDoc ''
nix-serve package to use.
'';
};
openFirewall = mkOption { openFirewall = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
@ -70,7 +79,7 @@ in
${lib.optionalString (cfg.secretKeyFile != null) '' ${lib.optionalString (cfg.secretKeyFile != null) ''
export NIX_SECRET_KEY_FILE="$CREDENTIALS_DIRECTORY/NIX_SECRET_KEY_FILE" export NIX_SECRET_KEY_FILE="$CREDENTIALS_DIRECTORY/NIX_SECRET_KEY_FILE"
''} ''}
exec ${pkgs.nix-serve}/bin/nix-serve --listen ${cfg.bindAddress}:${toString cfg.port} ${cfg.extraParams} exec ${cfg.package}/bin/nix-serve --listen ${cfg.bindAddress}:${toString cfg.port} ${cfg.extraParams}
''; '';
serviceConfig = { serviceConfig = {

View file

@ -0,0 +1,122 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.tmate-ssh-server;
defaultKeysDir = "/etc/tmate-ssh-server-keys";
edKey = "${defaultKeysDir}/ssh_host_ed25519_key";
rsaKey = "${defaultKeysDir}/ssh_host_rsa_key";
keysDir =
if cfg.keysDir == null
then defaultKeysDir
else cfg.keysDir;
domain = config.networking.domain;
in
{
options.services.tmate-ssh-server = {
enable = mkEnableOption (mdDoc "tmate ssh server");
package = mkOption {
type = types.package;
description = mdDoc "The package containing tmate-ssh-server";
defaultText = literalExpression "pkgs.tmate-ssh-server";
default = pkgs.tmate-ssh-server;
};
host = mkOption {
type = types.str;
description = mdDoc "External host name";
defaultText = lib.literalExpression "config.networking.domain or config.networking.hostName ";
default =
if domain == null then
config.networking.hostName
else
domain;
};
port = mkOption {
type = types.port;
description = mdDoc "Listen port for the ssh server";
default = 2222;
};
openFirewall = mkOption {
type = types.bool;
default = true;
description = mdDoc "Whether to automatically open the specified ports in the firewall.";
};
advertisedPort = mkOption {
type = types.port;
description = mdDoc "External port advertised to clients";
};
keysDir = mkOption {
type = with types; nullOr str;
description = mdDoc "Directory containing ssh keys, defaulting to auto-generation";
default = null;
};
};
config = mkIf cfg.enable {
networking.firewall.allowedTCPPorts = optionals cfg.openFirewall [ cfg.port ];
services.tmate-ssh-server = {
advertisedPort = mkDefault cfg.port;
};
environment.systemPackages =
let
tmate-config = pkgs.writeText "tmate.conf"
''
set -g tmate-server-host "${cfg.host}"
set -g tmate-server-port ${toString cfg.port}
set -g tmate-server-ed25519-fingerprint "@ed25519_fingerprint@"
set -g tmate-server-rsa-fingerprint "@rsa_fingerprint@"
'';
in
[
(pkgs.writeShellApplication {
name = "tmate-client-config";
runtimeInputs = with pkgs;[ openssh coreutils sd ];
text = ''
RSA_SIG="$(ssh-keygen -l -E SHA256 -f "${keysDir}/ssh_host_rsa_key.pub" | cut -d ' ' -f 2)"
ED25519_SIG="$(ssh-keygen -l -E SHA256 -f "${keysDir}/ssh_host_ed25519_key.pub" | cut -d ' ' -f 2)"
sd -sp '@ed25519_fingerprint@' "$ED25519_SIG" ${tmate-config} | \
sd -sp '@rsa_fingerprint@' "$RSA_SIG"
'';
})
];
systemd.services.tmate-ssh-server = {
description = "tmate SSH Server";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${cfg.package}/bin/tmate-ssh-server -h ${cfg.host} -p ${toString cfg.port} -q ${toString cfg.advertisedPort} -k ${keysDir}";
};
preStart = mkIf (cfg.keysDir == null) ''
if [[ ! -d ${defaultKeysDir} ]]
then
mkdir -p ${defaultKeysDir}
fi
if [[ ! -f ${edKey} ]]
then
${pkgs.openssh}/bin/ssh-keygen -t ed25519 -f ${edKey} -N ""
fi
if [[ ! -f ${rsaKey} ]]
then
${pkgs.openssh}/bin/ssh-keygen -t rsa -f ${rsaKey} -N ""
fi
'';
};
};
meta = {
maintainers = with maintainers; [ jlesquembre ];
};
}

View file

@ -465,7 +465,13 @@ in
networking.wireguard = { networking.wireguard = {
enable = mkOption { enable = mkOption {
description = lib.mdDoc "Whether to enable WireGuard."; description = lib.mdDoc ''
Whether to enable WireGuard.
Please note that {option}`systemd.network.netdevs` has more features
and is better maintained. When building new things, it is advised to
use that instead.
'';
type = types.bool; type = types.bool;
# 2019-05-25: Backwards compatibility. # 2019-05-25: Backwards compatibility.
default = cfg.interfaces != {}; default = cfg.interfaces != {};
@ -474,7 +480,13 @@ in
}; };
interfaces = mkOption { interfaces = mkOption {
description = lib.mdDoc "WireGuard interfaces."; description = lib.mdDoc ''
WireGuard interfaces.
Please note that {option}`systemd.network.netdevs` has more features
and is better maintained. When building new things, it is advised to
use that instead.
'';
default = {}; default = {};
example = { example = {
wg0 = { wg0 = {

View file

@ -91,8 +91,9 @@ in
example = "nftables-multiport"; example = "nftables-multiport";
description = lib.mdDoc '' description = lib.mdDoc ''
Default banning action (e.g. iptables, iptables-new, iptables-multiport, Default banning action (e.g. iptables, iptables-new, iptables-multiport,
shorewall, etc) It is used to define action_* variables. Can be overridden iptables-ipset-proto6-allports, shorewall, etc) It is used to
globally or per section within jail.local file define action_* variables. Can be overridden globally or per
section within jail.local file
''; '';
}; };
@ -212,10 +213,18 @@ in
filter = apache-nohome filter = apache-nohome
action = iptables-multiport[name=HTTP, port="http,https"] action = iptables-multiport[name=HTTP, port="http,https"]
logpath = /var/log/httpd/error_log* logpath = /var/log/httpd/error_log*
backend = auto
findtime = 600 findtime = 600
bantime = 600 bantime = 600
maxretry = 5 maxretry = 5
'''; ''';
dovecot = '''
# block IPs which failed to log-in
# aggressive mode add blocking for aborted connections
enabled = true
filter = dovecot[mode=aggressive]
maxretry = 3
''';
} }
''; '';
type = types.attrsOf types.lines; type = types.attrsOf types.lines;

View file

@ -63,7 +63,7 @@ in {
hashedPassword = mkOption { hashedPassword = mkOption {
default = ""; default = "";
description = description =
lib.mdDoc "Create the password with: 'echo -n 'thisismypassword' | npx argon2-cli -e'."; lib.mdDoc "Create the password with: `echo -n 'thisismypassword' | npx argon2-cli -e`.";
type = types.str; type = types.str;
}; };
@ -109,7 +109,7 @@ in {
HASHED_PASSWORD = cfg.hashedPassword; HASHED_PASSWORD = cfg.hashedPassword;
} // cfg.extraEnvironment; } // cfg.extraEnvironment;
serviceConfig = { serviceConfig = {
ExecStart = "${cfg.package}/bin/code-server --bind-addr ${cfg.host}:${toString cfg.port} --auth ${cfg.auth} " + builtins.concatStringsSep " " cfg.extraArguments; ExecStart = "${cfg.package}/bin/code-server --bind-addr ${cfg.host}:${toString cfg.port} --auth ${cfg.auth} " + lib.escapeShellArgs cfg.extraArguments;
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
RuntimeDirectory = cfg.user; RuntimeDirectory = cfg.user;
User = cfg.user; User = cfg.user;

View file

@ -30,9 +30,10 @@ let
# requests that look like: https://example.com/wp-content//nix/store/...plugin/path/some-file.js # requests that look like: https://example.com/wp-content//nix/store/...plugin/path/some-file.js
# Since hard linking directories is not allowed, copying is the next best thing. # Since hard linking directories is not allowed, copying is the next best thing.
# copy additional plugin(s) and theme(s) # copy additional plugin(s), theme(s) and language(s)
${concatMapStringsSep "\n" (theme: "cp -r ${theme} $out/share/wordpress/wp-content/themes/${theme.name}") cfg.themes} ${concatMapStringsSep "\n" (theme: "cp -r ${theme} $out/share/wordpress/wp-content/themes/${theme.name}") cfg.themes}
${concatMapStringsSep "\n" (plugin: "cp -r ${plugin} $out/share/wordpress/wp-content/plugins/${plugin.name}") cfg.plugins} ${concatMapStringsSep "\n" (plugin: "cp -r ${plugin} $out/share/wordpress/wp-content/plugins/${plugin.name}") cfg.plugins}
${concatMapStringsSep "\n" (language: "cp -r ${language} $out/share/wordpress/wp-content/languages/") cfg.languages}
''; '';
}; };
@ -154,6 +155,32 @@ let
''; '';
}; };
languages = mkOption {
type = types.listOf types.path;
default = [];
description = lib.mdDoc ''
List of path(s) to respective language(s) which are copied from the 'languages' directory.
'';
example = literalExpression ''
[(
# Let's package the German language.
# For other languages try to replace language and country code in the download URL with your desired one.
# Reference https://translate.wordpress.org for available translations and
# codes.
language-de = pkgs.stdenv.mkDerivation {
name = "language-de";
src = pkgs.fetchurl {
url = "https://de.wordpress.org/wordpress-''${pkgs.wordpress.version}-de_DE.tar.gz";
# Name is required to invalidate the hash when wordpress is updated
name = "wordpress-''${pkgs.wordpress.version}-language-de"
sha256 = "sha256-dlas0rXTSV4JAl8f/UyMbig57yURRYRhTMtJwF9g8h0=";
};
installPhase = "mkdir -p $out; cp -r ./wp-content/languages/* $out/";
};
)];
'';
};
database = { database = {
host = mkOption { host = mkOption {
type = types.str; type = types.str;

View file

@ -22,42 +22,14 @@ let
favorite-apps=[ 'org.gnome.Epiphany.desktop', 'org.gnome.Geary.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Photos.desktop', 'org.gnome.Nautilus.desktop' ] favorite-apps=[ 'org.gnome.Epiphany.desktop', 'org.gnome.Geary.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Photos.desktop', 'org.gnome.Nautilus.desktop' ]
''; '';
nixos-background-ligtht = pkgs.nixos-artwork.wallpapers.simple-blue; nixos-background-light = pkgs.nixos-artwork.wallpapers.simple-blue;
nixos-background-dark = pkgs.nixos-artwork.wallpapers.simple-dark-gray; nixos-background-dark = pkgs.nixos-artwork.wallpapers.simple-dark-gray;
nixos-gsettings-desktop-schemas = let # TODO: Having https://github.com/NixOS/nixpkgs/issues/54150 would supersede this
defaultPackages = with pkgs; [ gsettings-desktop-schemas gnome.gnome-shell ]; nixos-gsettings-desktop-schemas = pkgs.gnome.nixos-gsettings-overrides.override {
in inherit (cfg) extraGSettingsOverrides extraGSettingsOverridePackages favoriteAppsOverride;
pkgs.runCommand "nixos-gsettings-desktop-schemas" { preferLocalBuild = true; } inherit flashbackEnabled nixos-background-dark nixos-background-light;
'' };
mkdir -p $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
${concatMapStrings
(pkg: "cp -rf ${pkg}/share/gsettings-schemas/*/glib-2.0/schemas/*.xml $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas\n")
(defaultPackages ++ cfg.extraGSettingsOverridePackages)}
cp -f ${pkgs.gnome.gnome-shell}/share/gsettings-schemas/*/glib-2.0/schemas/*.gschema.override $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
${optionalString flashbackEnabled ''
cp -f ${pkgs.gnome.gnome-flashback}/share/gsettings-schemas/*/glib-2.0/schemas/*.gschema.override $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas
''}
chmod -R a+w $out/share/gsettings-schemas/nixos-gsettings-overrides
cat - > $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/nixos-defaults.gschema.override <<- EOF
[org.gnome.desktop.background]
picture-uri='file://${nixos-background-ligtht.gnomeFilePath}'
picture-uri-dark='file://${nixos-background-dark.gnomeFilePath}'
[org.gnome.desktop.screensaver]
picture-uri='file://${nixos-background-dark.gnomeFilePath}'
${cfg.favoriteAppsOverride}
${cfg.extraGSettingsOverrides}
EOF
${pkgs.glib.dev}/bin/glib-compile-schemas $out/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas/
'';
nixos-background-info = pkgs.writeTextFile rec { nixos-background-info = pkgs.writeTextFile rec {
name = "nixos-background-info"; name = "nixos-background-info";
@ -67,7 +39,7 @@ let
<wallpapers> <wallpapers>
<wallpaper deleted="false"> <wallpaper deleted="false">
<name>Blobs</name> <name>Blobs</name>
<filename>${nixos-background-ligtht.gnomeFilePath}</filename> <filename>${nixos-background-light.gnomeFilePath}</filename>
<filename-dark>${nixos-background-dark.gnomeFilePath}</filename-dark> <filename-dark>${nixos-background-dark.gnomeFilePath}</filename-dark>
<options>zoom</options> <options>zoom</options>
<shade_type>solid</shade_type> <shade_type>solid</shade_type>

View file

@ -156,6 +156,14 @@ let cfg = config.services.xserver.libinput;
''; '';
}; };
tappingButtonMap = mkOption {
type = types.nullOr (types.enum [ "lrm" "lmr" ]);
default = null;
description = lib.mdDoc ''
Set the button mapping for 1/2/3-finger taps to left/right/middle or left/middle/right, respectively.
'';
};
tappingDragLock = mkOption { tappingDragLock = mkOption {
type = types.bool; type = types.bool;
default = true; default = true;
@ -220,6 +228,7 @@ let cfg = config.services.xserver.libinput;
Option "HorizontalScrolling" "${xorgBool cfg.${deviceType}.horizontalScrolling}" Option "HorizontalScrolling" "${xorgBool cfg.${deviceType}.horizontalScrolling}"
Option "SendEventsMode" "${cfg.${deviceType}.sendEventsMode}" Option "SendEventsMode" "${cfg.${deviceType}.sendEventsMode}"
Option "Tapping" "${xorgBool cfg.${deviceType}.tapping}" Option "Tapping" "${xorgBool cfg.${deviceType}.tapping}"
${optionalString (cfg.${deviceType}.tappingButtonMap != null) ''Option "TappingButtonMap" "${cfg.${deviceType}.tappingButtonMap}"''}
Option "TappingDragLock" "${xorgBool cfg.${deviceType}.tappingDragLock}" Option "TappingDragLock" "${xorgBool cfg.${deviceType}.tappingDragLock}"
Option "DisableWhileTyping" "${xorgBool cfg.${deviceType}.disableWhileTyping}" Option "DisableWhileTyping" "${xorgBool cfg.${deviceType}.disableWhileTyping}"
${cfg.${deviceType}.additionalOptions} ${cfg.${deviceType}.additionalOptions}
@ -241,6 +250,7 @@ in {
"horizontalScrolling" "horizontalScrolling"
"sendEventsMode" "sendEventsMode"
"tapping" "tapping"
"tappingButtonMap"
"tappingDragLock" "tappingDragLock"
"transformationMatrix" "transformationMatrix"
"disableWhileTyping" "disableWhileTyping"

View file

@ -325,8 +325,8 @@ in
type = types.lines; type = types.lines;
example = "DefaultLimitCORE=infinity"; example = "DefaultLimitCORE=infinity";
description = lib.mdDoc '' description = lib.mdDoc ''
Extra config options for systemd. See man systemd-system.conf for Extra config options for systemd. See systemd-system.conf(5) man page
available options. for available options.
''; '';
}; };

View file

@ -372,6 +372,8 @@ in {
"/etc/os-release".source = config.boot.initrd.osRelease; "/etc/os-release".source = config.boot.initrd.osRelease;
"/etc/initrd-release".source = config.boot.initrd.osRelease; "/etc/initrd-release".source = config.boot.initrd.osRelease;
} // optionalAttrs (config.environment.etc ? "modprobe.d/nixos.conf") {
"/etc/modprobe.d/nixos.conf".source = config.environment.etc."modprobe.d/nixos.conf".source;
}; };
storePaths = [ storePaths = [

View file

@ -604,6 +604,10 @@ in
The configuration for each network interface. If The configuration for each network interface. If
{option}`networking.useDHCP` is true, then every {option}`networking.useDHCP` is true, then every
interface not listed here will be configured using DHCP. interface not listed here will be configured using DHCP.
Please note that {option}`systemd.network.netdevs` has more features
and is better maintained. When building new things, it is advised to
use that instead.
''; '';
type = with types; attrsOf (submodule interfaceOpts); type = with types; attrsOf (submodule interfaceOpts);
}; };

View file

@ -41,6 +41,16 @@
inherit documentRoot; inherit documentRoot;
}; };
simpleConfig = {
security.acme = {
certs."http.example.test" = {
listenHTTP = ":80";
};
};
networking.firewall.allowedTCPPorts = [ 80 ];
};
# Base specialisation config for testing general ACME features # Base specialisation config for testing general ACME features
webserverBasicConfig = { webserverBasicConfig = {
services.nginx.enable = true; services.nginx.enable = true;
@ -173,6 +183,26 @@ in {
services.nginx.logError = "stderr info"; services.nginx.logError = "stderr info";
specialisation = { specialisation = {
# Tests HTTP-01 verification using Lego's built-in web server
http01lego.configuration = simpleConfig;
renew.configuration = lib.mkMerge [
simpleConfig
{
# Pebble provides 5 year long certs,
# needs to be higher than that to test renewal
security.acme.certs."http.example.test".validMinDays = 9999;
}
];
# Tests that account creds can be safely changed.
accountchange.configuration = lib.mkMerge [
simpleConfig
{
security.acme.certs."http.example.test".email = "admin@example.test";
}
];
# First derivation used to test general ACME features # First derivation used to test general ACME features
general.configuration = { ... }: let general.configuration = { ... }: let
caDomain = nodes.acme.test-support.acme.caDomain; caDomain = nodes.acme.test-support.acme.caDomain;
@ -446,7 +476,35 @@ in {
download_ca_certs(client) download_ca_certs(client)
# Perform general tests first # Perform http-01 w/ lego test first
with subtest("Can request certificate with Lego's built in web server"):
switch_to(webserver, "http01lego")
webserver.wait_for_unit("acme-finished-http.example.test.target")
check_fullchain(webserver, "http.example.test")
check_issuer(webserver, "http.example.test", "pebble")
# Perform renewal test
with subtest("Can renew certificates when they expire"):
hash = webserver.succeed("sha256sum /var/lib/acme/http.example.test/cert.pem")
switch_to(webserver, "renew")
webserver.wait_for_unit("acme-finished-http.example.test.target")
check_fullchain(webserver, "http.example.test")
check_issuer(webserver, "http.example.test", "pebble")
hash_after = webserver.succeed("sha256sum /var/lib/acme/http.example.test/cert.pem")
assert hash != hash_after
# Perform account change test
with subtest("Handles email change correctly"):
hash = webserver.succeed("sha256sum /var/lib/acme/http.example.test/cert.pem")
switch_to(webserver, "accountchange")
webserver.wait_for_unit("acme-finished-http.example.test.target")
check_fullchain(webserver, "http.example.test")
check_issuer(webserver, "http.example.test", "pebble")
hash_after = webserver.succeed("sha256sum /var/lib/acme/http.example.test/cert.pem")
# Has to do a full run to register account, which creates new certs.
assert hash != hash_after
# Perform general tests
switch_to(webserver, "general") switch_to(webserver, "general")
with subtest("Can request certificate with HTTP-01 challenge"): with subtest("Can request certificate with HTTP-01 challenge"):

View file

@ -284,7 +284,6 @@ in {
installer-systemd-stage-1 = handleTest ./installer-systemd-stage-1.nix {}; installer-systemd-stage-1 = handleTest ./installer-systemd-stage-1.nix {};
invoiceplane = handleTest ./invoiceplane.nix {}; invoiceplane = handleTest ./invoiceplane.nix {};
iodine = handleTest ./iodine.nix {}; iodine = handleTest ./iodine.nix {};
ipfs = handleTest ./ipfs.nix {};
ipv6 = handleTest ./ipv6.nix {}; ipv6 = handleTest ./ipv6.nix {};
iscsi-multipath-root = handleTest ./iscsi-multipath-root.nix {}; iscsi-multipath-root = handleTest ./iscsi-multipath-root.nix {};
iscsi-root = handleTest ./iscsi-root.nix {}; iscsi-root = handleTest ./iscsi-root.nix {};
@ -317,6 +316,8 @@ in {
ksm = handleTest ./ksm.nix {}; ksm = handleTest ./ksm.nix {};
kthxbye = handleTest ./kthxbye.nix {}; kthxbye = handleTest ./kthxbye.nix {};
kubernetes = handleTestOn ["x86_64-linux"] ./kubernetes {}; kubernetes = handleTestOn ["x86_64-linux"] ./kubernetes {};
kubo = handleTest ./kubo.nix {};
ladybird = handleTest ./ladybird.nix {};
languagetool = handleTest ./languagetool.nix {}; languagetool = handleTest ./languagetool.nix {};
latestKernel.login = handleTest ./login.nix { latestKernel = true; }; latestKernel.login = handleTest ./login.nix { latestKernel = true; };
leaps = handleTest ./leaps.nix {}; leaps = handleTest ./leaps.nix {};
@ -596,6 +597,7 @@ in {
systemd-initrd-btrfs-raid = handleTest ./systemd-initrd-btrfs-raid.nix {}; systemd-initrd-btrfs-raid = handleTest ./systemd-initrd-btrfs-raid.nix {};
systemd-initrd-luks-keyfile = handleTest ./systemd-initrd-luks-keyfile.nix {}; systemd-initrd-luks-keyfile = handleTest ./systemd-initrd-luks-keyfile.nix {};
systemd-initrd-luks-password = handleTest ./systemd-initrd-luks-password.nix {}; systemd-initrd-luks-password = handleTest ./systemd-initrd-luks-password.nix {};
systemd-initrd-modprobe = handleTest ./systemd-initrd-modprobe.nix {};
systemd-initrd-shutdown = handleTest ./systemd-shutdown.nix { systemdStage1 = true; }; systemd-initrd-shutdown = handleTest ./systemd-shutdown.nix { systemdStage1 = true; };
systemd-initrd-simple = handleTest ./systemd-initrd-simple.nix {}; systemd-initrd-simple = handleTest ./systemd-initrd-simple.nix {};
systemd-initrd-swraid = handleTest ./systemd-initrd-swraid.nix {}; systemd-initrd-swraid = handleTest ./systemd-initrd-swraid.nix {};
@ -611,6 +613,7 @@ in {
systemd-shutdown = handleTest ./systemd-shutdown.nix {}; systemd-shutdown = handleTest ./systemd-shutdown.nix {};
systemd-timesyncd = handleTest ./systemd-timesyncd.nix {}; systemd-timesyncd = handleTest ./systemd-timesyncd.nix {};
systemd-misc = handleTest ./systemd-misc.nix {}; systemd-misc = handleTest ./systemd-misc.nix {};
tandoor-recipes = handleTest ./tandoor-recipes.nix {};
taskserver = handleTest ./taskserver.nix {}; taskserver = handleTest ./taskserver.nix {};
teeworlds = handleTest ./teeworlds.nix {}; teeworlds = handleTest ./teeworlds.nix {};
telegraf = handleTest ./telegraf.nix {}; telegraf = handleTest ./telegraf.nix {};
@ -623,6 +626,7 @@ in {
tinc = handleTest ./tinc {}; tinc = handleTest ./tinc {};
tinydns = handleTest ./tinydns.nix {}; tinydns = handleTest ./tinydns.nix {};
tinywl = handleTest ./tinywl.nix {}; tinywl = handleTest ./tinywl.nix {};
tmate-ssh-server = handleTest ./tmate-ssh-server.nix { };
tomcat = handleTest ./tomcat.nix {}; tomcat = handleTest ./tomcat.nix {};
tor = handleTest ./tor.nix {}; tor = handleTest ./tor.nix {};
# traefik test relies on docker-containers # traefik test relies on docker-containers
@ -677,6 +681,7 @@ in {
xfce = handleTest ./xfce.nix {}; xfce = handleTest ./xfce.nix {};
xmonad = handleTest ./xmonad.nix {}; xmonad = handleTest ./xmonad.nix {};
xmonad-xdg-autostart = handleTest ./xmonad-xdg-autostart.nix {}; xmonad-xdg-autostart = handleTest ./xmonad-xdg-autostart.nix {};
xpadneo = handleTest ./xpadneo.nix {};
xrdp = handleTest ./xrdp.nix {}; xrdp = handleTest ./xrdp.nix {};
xss-lock = handleTest ./xss-lock.nix {}; xss-lock = handleTest ./xss-lock.nix {};
xterm = handleTest ./xterm.nix {}; xterm = handleTest ./xterm.nix {};

View file

@ -1,4 +1,4 @@
import ../make-test-python.nix ({ pkgs, ... }: import ../make-test-python.nix ({ pkgs, lib, ... }:
let let
imageEnv = pkgs.buildEnv { imageEnv = pkgs.buildEnv {
name = "k3s-pause-image-env"; name = "k3s-pause-image-env";
@ -54,7 +54,15 @@ import ../make-test-python.nix ({ pkgs, ... }:
role = "server"; role = "server";
package = pkgs.k3s; package = pkgs.k3s;
clusterInit = true; clusterInit = true;
extraFlags = "--no-deploy coredns,servicelb,traefik,local-storage,metrics-server --pause-image test.local/pause:local --node-ip 192.168.1.1"; extraFlags = ''
--disable coredns \
--disable local-storage \
--disable metrics-server \
--disable servicelb \
--disable traefik \
--node-ip 192.168.1.1 \
--pause-image test.local/pause:local
'';
}; };
networking.firewall.allowedTCPPorts = [ 2379 2380 6443 ]; networking.firewall.allowedTCPPorts = [ 2379 2380 6443 ];
networking.firewall.allowedUDPPorts = [ 8472 ]; networking.firewall.allowedUDPPorts = [ 8472 ];
@ -76,7 +84,15 @@ import ../make-test-python.nix ({ pkgs, ... }:
enable = true; enable = true;
serverAddr = "https://192.168.1.1:6443"; serverAddr = "https://192.168.1.1:6443";
clusterInit = false; clusterInit = false;
extraFlags = "--no-deploy coredns,servicelb,traefik,local-storage,metrics-server --pause-image test.local/pause:local --node-ip 192.168.1.3"; extraFlags = ''
--disable coredns \
--disable local-storage \
--disable metrics-server \
--disable servicelb \
--disable traefik \
--node-ip 192.168.1.3 \
--pause-image test.local/pause:local
'';
}; };
networking.firewall.allowedTCPPorts = [ 2379 2380 6443 ]; networking.firewall.allowedTCPPorts = [ 2379 2380 6443 ];
networking.firewall.allowedUDPPorts = [ 8472 ]; networking.firewall.allowedUDPPorts = [ 8472 ];
@ -123,7 +139,8 @@ import ../make-test-python.nix ({ pkgs, ... }:
server.wait_until_succeeds("k3s kubectl get node agent") server.wait_until_succeeds("k3s kubectl get node agent")
for m in machines: for m in machines:
m.succeed("k3s check-config") '' # Fix-Me: Tests fail for 'aarch64-linux' as: "CONFIG_CGROUP_FREEZER: missing (fail)"
+ lib.optionalString (!pkgs.stdenv.isAarch64) ''m.succeed("k3s check-config")'' + ''
m.succeed( m.succeed(
"${pauseImage} | k3s ctr image import -" "${pauseImage} | k3s ctr image import -"
) )

View file

@ -1,4 +1,4 @@
import ../make-test-python.nix ({ pkgs, ... }: import ../make-test-python.nix ({ pkgs, lib, ... }:
let let
imageEnv = pkgs.buildEnv { imageEnv = pkgs.buildEnv {
name = "k3s-pause-image-env"; name = "k3s-pause-image-env";
@ -40,7 +40,15 @@ import ../make-test-python.nix ({ pkgs, ... }:
services.k3s.role = "server"; services.k3s.role = "server";
services.k3s.package = pkgs.k3s; services.k3s.package = pkgs.k3s;
# Slightly reduce resource usage # Slightly reduce resource usage
services.k3s.extraFlags = "--no-deploy coredns,servicelb,traefik,local-storage,metrics-server --pause-image test.local/pause:local"; services.k3s.extraFlags = ''
--disable coredns \
--disable local-storage \
--disable metrics-server \
--disable servicelb \
--disable traefik \
--pause-image \
test.local/pause:local
'';
users.users = { users.users = {
noprivs = { noprivs = {
@ -57,7 +65,8 @@ import ../make-test-python.nix ({ pkgs, ... }:
machine.wait_for_unit("k3s") machine.wait_for_unit("k3s")
machine.succeed("k3s kubectl cluster-info") machine.succeed("k3s kubectl cluster-info")
machine.fail("sudo -u noprivs k3s kubectl cluster-info") machine.fail("sudo -u noprivs k3s kubectl cluster-info")
machine.succeed("k3s check-config") '' # Fix-Me: Tests fail for 'aarch64-linux' as: "CONFIG_CGROUP_FREEZER: missing (fail)"
+ lib.optionalString (!pkgs.stdenv.isAarch64) ''machine.succeed("k3s check-config")'' + ''
machine.succeed( machine.succeed(
"${pauseImage} | k3s ctr image import -" "${pauseImage} | k3s ctr image import -"

View file

@ -1,11 +1,11 @@
import ./make-test-python.nix ({ pkgs, ...} : { import ./make-test-python.nix ({ pkgs, ...} : {
name = "ipfs"; name = "kubo";
meta = with pkgs.lib.maintainers; { meta = with pkgs.lib.maintainers; {
maintainers = [ mguentner ]; maintainers = [ mguentner ];
}; };
nodes.machine = { ... }: { nodes.machine = { ... }: {
services.ipfs = { services.kubo = {
enable = true; enable = true;
# Also will add a unix domain socket socket API address, see module. # Also will add a unix domain socket socket API address, see module.
startWhenNeeded = true; startWhenNeeded = true;
@ -15,7 +15,7 @@ import ./make-test-python.nix ({ pkgs, ...} : {
}; };
nodes.fuse = { ... }: { nodes.fuse = { ... }: {
services.ipfs = { services.kubo = {
enable = true; enable = true;
apiAddress = "/ip4/127.0.0.1/tcp/2324"; apiAddress = "/ip4/127.0.0.1/tcp/2324";
autoMount = true; autoMount = true;

View file

@ -0,0 +1,30 @@
import ./make-test-python.nix ({ pkgs, ... }: {
name = "ladybird";
meta = with pkgs.lib.maintainers; {
maintainers = [ fgaz ];
};
nodes.machine = { config, pkgs, ... }: {
imports = [
./common/x11.nix
];
services.xserver.enable = true;
environment.systemPackages = [
pkgs.ladybird
];
};
enableOCR = true;
testScript =
''
machine.wait_for_x()
machine.succeed("echo '<!DOCTYPE html><html><body><h1>Hello world</h1></body></html>' > page.html")
machine.execute("ladybird file://$(pwd)/page.html >&2 &")
machine.wait_for_window("Ladybird")
machine.sleep(5)
machine.wait_for_text("Hello world")
machine.screenshot("screen")
'';
})

View file

@ -6,4 +6,6 @@ f: {
with import ../lib/testing-python.nix { inherit system pkgs; }; with import ../lib/testing-python.nix { inherit system pkgs; };
makeTest (if pkgs.lib.isFunction f then f (args // { inherit pkgs; inherit (pkgs) lib; }) else f) let testConfig = makeTest (if pkgs.lib.isFunction f then f (args // { inherit pkgs; inherit (pkgs) lib; }) else f);
in testConfig.test # For nix-build
// testConfig # For all-tests.nix

View file

@ -107,14 +107,12 @@ import ./make-test-python.nix ({ pkgs, lib, buildDeps ? [ ], pythonEnv ? [ ], ..
) )
# Don't bother to test LDAP or kerberos authentification # Don't bother to test LDAP or kerberos authentification
# For now deactivate change_password API test. Current bug report at https://redmine.postgresql.org/issues/7648
# Password change works from the UI, if email SMTP is configured.
with subtest("run browser test"): with subtest("run browser test"):
machine.succeed( machine.succeed(
'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \ 'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
&& python regression/runtests.py \ && python regression/runtests.py \
--pkg browser \ --pkg browser \
--exclude browser.tests.test_ldap_login.LDAPLoginTestCase,browser.tests.test_ldap_login,browser.tests.test_kerberos_with_mocking,browser.tests.test_change_password' --exclude browser.tests.test_ldap_login.LDAPLoginTestCase,browser.tests.test_ldap_login,browser.tests.test_kerberos_with_mocking'
) )
# fontconfig is necessary for chromium to run # fontconfig is necessary for chromium to run

View file

@ -2,7 +2,7 @@ import ./make-test-python.nix ({ pkgs, ... }:
{ {
name = "retroarch"; name = "retroarch";
meta = with pkgs.lib.maintainers; { maintainers = [ j0hax ]; }; meta = with pkgs.lib; { maintainers = teams.libretro.members ++ [ maintainers.j0hax ]; };
nodes.machine = { ... }: nodes.machine = { ... }:
@ -11,7 +11,7 @@ import ./make-test-python.nix ({ pkgs, ... }:
services.xserver.enable = true; services.xserver.enable = true;
services.xserver.desktopManager.retroarch = { services.xserver.desktopManager.retroarch = {
enable = true; enable = true;
package = pkgs.retroarchFull; package = pkgs.retroarchBare;
}; };
services.xserver.displayManager = { services.xserver.displayManager = {
sddm.enable = true; sddm.enable = true;

View file

@ -0,0 +1,17 @@
import ./make-test-python.nix ({ lib, pkgs, ... }: {
name = "systemd-initrd-modprobe";
nodes.machine = { pkgs, ... }: {
boot.initrd.systemd.enable = true;
boot.initrd.kernelModules = [ "loop" ]; # Load module in initrd.
boot.extraModprobeConfig = ''
options loop max_loop=42
'';
};
testScript = ''
machine.wait_for_unit("multi-user.target")
max_loop = machine.succeed("cat /sys/module/loop/parameters/max_loop")
assert int(max_loop) == 42, "Parameter should be respected for initrd kernel modules"
'';
})

View file

@ -1,4 +1,4 @@
import ./make-test-python.nix ( import ./make-test-python.nix ({ pkgs, ... }:
let let
container = { container = {
@ -18,6 +18,7 @@ import ./make-test-python.nix (
}; };
containerSystem = (import ../lib/eval-config.nix { containerSystem = (import ../lib/eval-config.nix {
inherit (pkgs) system;
modules = [ container ]; modules = [ container ];
}).config.system.build.toplevel; }).config.system.build.toplevel;

View file

@ -0,0 +1,43 @@
import ./make-test-python.nix ({ lib, ... }: {
name = "tandoor-recipes";
meta.maintainers = with lib.maintainers; [ ambroisie ];
nodes.machine = { pkgs, ... }: {
# Setup using Postgres
services.tandoor-recipes = {
enable = true;
extraConfig = {
DB_ENGINE = "django.db.backends.postgresql";
POSTGRES_HOST = "/run/postgresql";
POSTGRES_USER = "tandoor_recipes";
POSTGRES_DB = "tandoor_recipes";
};
};
services.postgresql = {
enable = true;
ensureDatabases = [ "tandoor_recipes" ];
ensureUsers = [
{
name = "tandoor_recipes";
ensurePermissions."DATABASE tandoor_recipes" = "ALL PRIVILEGES";
}
];
};
systemd.services = {
tandoor-recipes = {
after = [ "postgresql.service" ];
};
};
};
testScript = ''
machine.wait_for_unit("tandoor-recipes.service")
with subtest("Web interface gets ready"):
# Wait until server accepts connections
machine.wait_until_succeeds("curl -fs localhost:8080")
'';
})

View file

@ -0,0 +1,73 @@
import ./make-test-python.nix ({ pkgs, lib, ... }:
let
inherit (import ./ssh-keys.nix pkgs)
snakeOilPrivateKey snakeOilPublicKey;
setUpPrivateKey = name: ''
${name}.succeed(
"mkdir -p /root/.ssh",
"chown 700 /root/.ssh",
"cat '${snakeOilPrivateKey}' > /root/.ssh/id_snakeoil",
"chown 600 /root/.ssh/id_snakeoil",
)
${name}.wait_for_file("/root/.ssh/id_snakeoil")
'';
sshOpts = "-oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oIdentityFile=/root/.ssh/id_snakeoil";
in
{
name = "tmate-ssh-server";
nodes =
{
server = { ... }: {
services.tmate-ssh-server = {
enable = true;
port = 2223;
};
};
client = { ... }: {
environment.systemPackages = [ pkgs.tmate ];
services.openssh.enable = true;
users.users.root.openssh.authorizedKeys.keys = [ snakeOilPublicKey ];
};
client2 = { ... }: {
environment.systemPackages = [ pkgs.openssh ];
};
};
testScript = ''
start_all()
server.wait_for_unit("tmate-ssh-server.service")
server.wait_for_open_port(2223)
server.wait_for_file("/etc/tmate-ssh-server-keys/ssh_host_ed25519_key.pub")
server.wait_for_file("/etc/tmate-ssh-server-keys/ssh_host_rsa_key.pub")
server.succeed("tmate-client-config > /tmp/tmate.conf")
server.wait_for_file("/tmp/tmate.conf")
${setUpPrivateKey "server"}
client.wait_for_unit("sshd.service")
client.wait_for_open_port(22)
server.succeed("scp ${sshOpts} /tmp/tmate.conf client:/tmp/tmate.conf")
client.wait_for_file("/tmp/tmate.conf")
client.send_chars("root\n")
client.sleep(2)
client.send_chars("tmate -f /tmp/tmate.conf\n")
client.sleep(2)
client.send_chars("q")
client.sleep(2)
client.send_chars("tmate display -p '#{tmate_ssh}' > /tmp/ssh_command\n")
client.wait_for_file("/tmp/ssh_command")
ssh_cmd = client.succeed("cat /tmp/ssh_command")
client2.succeed("mkdir -p ~/.ssh; ssh-keyscan -p 2223 server > ~/.ssh/known_hosts")
client2.send_chars("root\n")
client2.sleep(2)
client2.send_chars(ssh_cmd.strip() + "\n")
client2.sleep(2)
client2.send_chars("touch /tmp/client_2\n")
client.wait_for_file("/tmp/client_2")
'';
})

View file

@ -20,10 +20,8 @@ import ./make-test-python.nix ({ pkgs, ... }: {
machine.wait_for_x() machine.wait_for_x()
machine.execute("vengi-voxedit >&2 &") machine.execute("vengi-voxedit >&2 &")
machine.wait_for_window("voxedit") machine.wait_for_window("voxedit")
# OCR on voxedit's window is very expensive, so we avoid wasting a try # Let the window load fully
# by letting the window load fully first
machine.sleep(15) machine.sleep(15)
machine.wait_for_text("Solid")
machine.screenshot("screen") machine.screenshot("screen")
''; '';
}) })

View file

@ -0,0 +1,18 @@
import ./make-test-python.nix ({ lib, pkgs, ... }: {
name = "xpadneo";
meta.maintainers = with lib.maintainers; [ kira-bruneau ];
nodes = {
machine = {
config.hardware.xpadneo.enable = true;
};
};
# This is just a sanity check to make sure the module was
# loaded. We'd have to find some way to mock an xbox controller if
# we wanted more in-depth testing.
testScript = ''
machine.start();
machine.succeed("modinfo hid_xpadneo | grep 'version:\s\+${pkgs.linuxPackages.xpadneo.version}'")
'';
})

View file

@ -1,32 +0,0 @@
{ appimageTools, lib, fetchurl }:
let
pname = "apple-music-electron";
version = "1.5.5";
name = "Apple.Music-${version}";
src = fetchurl {
url = "https://github.com/cryptofyre/Apple-Music-Electron/releases/download/v${version}/${name}.AppImage";
sha256 = "1gb6j3nvam9fcpsgiv56jccg9a4y14vzsyw11h3hckaigy90knpx";
};
appimageContents = appimageTools.extract { inherit name src; };
in appimageTools.wrapType2 {
inherit name src;
extraInstallCommands = ''
mv $out/bin/${name} $out/bin/${pname}
install -m 444 -D ${appimageContents}/${pname}.desktop -t $out/share/applications
substituteInPlace $out/share/applications/${pname}.desktop \
--replace 'Exec=AppRun' 'Exec=${pname}'
cp -r ${appimageContents}/usr/share/icons $out/share
'';
meta = with lib; {
description = "Unofficial Apple Music application without having to bother with a Web Browser or iTunes";
homepage = "https://github.com/iiFir3z/Apple-Music-Electron";
license = licenses.mit;
maintainers = [ maintainers.ivar ];
platforms = [ "x86_64-linux" ];
};
}

View file

@ -22,7 +22,7 @@ python3Packages.buildPythonApplication rec {
format = "other"; # no setup.py format = "other"; # no setup.py
pname = "cozy"; pname = "cozy";
version = "1.2.0"; version = "1.2.1";
# Temporary fix # Temporary fix
# See https://github.com/NixOS/nixpkgs/issues/57029 # See https://github.com/NixOS/nixpkgs/issues/57029
@ -33,7 +33,7 @@ python3Packages.buildPythonApplication rec {
owner = "geigi"; owner = "geigi";
repo = pname; repo = pname;
rev = version; rev = version;
sha256 = "0igqf9b77i13sxlk4ziw549h379hmz1slrb3vvf8irk94gxabsaw"; hash = "sha256-cRqfLFLvje8lxUZ4S83UAFyYUX0vj1ZgLG0Y6gpCfmI=";
}; };
nativeBuildInputs = [ nativeBuildInputs = [

View file

@ -2,13 +2,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "dragonfly-reverb"; pname = "dragonfly-reverb";
version = "3.2.6"; version = "3.2.7";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "michaelwillis"; owner = "michaelwillis";
repo = "dragonfly-reverb"; repo = "dragonfly-reverb";
rev = version; rev = version;
sha256 = "sha256-hTapy/wXt1rRZVdkx2RDW8LS/DcY30p+WaAWgemGqVo="; sha256 = "sha256-DJ6J5PuRFDin6PtkNYjIRI1gEVQkKmnZLhnj7L4JtPM=";
fetchSubmodules = true; fetchSubmodules = true;
}; };

View file

@ -0,0 +1,78 @@
{ stdenv
, lib
, fetchFromGitHub
, meson
, ninja
, pkg-config
, wrapGAppsHook4
, libadwaita
, gettext
, glib
, gobject-introspection
, desktop-file-utils
, appstream-glib
, gtk4
, librsvg
, python3Packages
}:
python3Packages.buildPythonApplication rec {
pname = "eartag";
version = "0.2.1";
format = "other";
src = fetchFromGitHub {
owner = "knuxify";
repo = pname;
rev = version;
sha256 = "sha256-TlY2F2y7ZZ9f+vkYYkES5zoIGcuTWP1+rOJI62wc4SU=";
};
postPatch = ''
chmod +x ./build-aux/meson/postinstall.py
patchShebangs ./build-aux/meson/postinstall.py
substituteInPlace ./build-aux/meson/postinstall.py \
--replace "gtk-update-icon-cache" "gtk4-update-icon-cache"
'';
nativeBuildInputs = [
meson
ninja
glib
desktop-file-utils
appstream-glib
pkg-config
gettext
gobject-introspection
wrapGAppsHook4
] ++ lib.optional stdenv.isDarwin gtk4; # for gtk4-update-icon-cache
buildInputs = [
librsvg
libadwaita
];
propagatedBuildInputs = with python3Packages; [
pygobject3
eyeD3
pillow
mutagen
pytaglib
python-magic
];
dontWrapGApps = true;
preFixup = ''
makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
'';
meta = with lib; {
homepage = "https://github.com/knuxify/eartag";
description = "Simple music tag editor";
# This seems to be using ICU license but we're flagging it to MIT license
# since ICU license is a modified version of MIT and to prevent it from
# being incorrectly identified as unfree software.
license = licenses.mit;
maintainers = with maintainers; [ foo-dogsquared ];
};
}

View file

@ -13,13 +13,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "ft2-clone"; pname = "ft2-clone";
version = "1.58"; version = "1.59";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "8bitbubsy"; owner = "8bitbubsy";
repo = "ft2-clone"; repo = "ft2-clone";
rev = "v${version}"; rev = "v${version}";
sha256 = "sha256-FHhASs1PKTz6G1sAKNUeft0BHbWgl44l7eiOnyQXZb8="; sha256 = "sha256-TQJCkvPV6vbhURLcuH41i8obHnfHkrCTJG0+IuSVDos=";
}; };
# Adapt the linux-only CMakeLists to darwin (more reliable than make-macos.sh) # Adapt the linux-only CMakeLists to darwin (more reliable than make-macos.sh)

View file

@ -81,7 +81,6 @@ stdenv.mkDerivation rec {
passthru = { passthru = {
updateScript = gitUpdater { updateScript = gitUpdater {
inherit pname version;
rev-prefix = "v"; rev-prefix = "v";
}; };
tests.version = testers.testVersion { tests.version = testers.testVersion {

View file

@ -24,9 +24,10 @@ stdenv.mkDerivation rec {
version = "11.8.16"; version = "11.8.16";
libmpd = stdenv.mkDerivation { libmpd = stdenv.mkDerivation {
name = "libmpd-11.8.17"; pname = "libmpd";
version = "11.8.17";
src = fetchurl { src = fetchurl {
url = "http://download.sarine.nl/Programs/gmpc/11.8/libmpd-11.8.17.tar.gz"; url = "https://download.sarine.nl/Programs/gmpc/${lib.versions.majorMinor version}/libmpd-${version}.tar.gz";
sha256 = "10vspwsgr8pwf3qp2bviw6b2l8prgdiswgv7qiqiyr0h1mmk487y"; sha256 = "10vspwsgr8pwf3qp2bviw6b2l8prgdiswgv7qiqiyr0h1mmk487y";
}; };
patches = [ ./libmpd-11.8.17-remove-strndup.patch ]; patches = [ ./libmpd-11.8.17-remove-strndup.patch ];

View file

@ -5,14 +5,14 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "helio-workstation"; pname = "helio-workstation";
version = "3.9"; version = "3.10";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "helio-fm"; owner = "helio-fm";
repo = pname; repo = pname;
rev = version; rev = version;
fetchSubmodules = true; fetchSubmodules = true;
sha256 = "sha256-AtgKgw+F5lc0Ma3zOxmk3iaZQp2KZb2FP5F8QvvYTT4="; sha256 = "sha256-TqwebaFZXUto+azVJQlggqAc7WKDxAaXxyXcG8x5S/w=";
}; };
buildInputs = [ buildInputs = [

View file

@ -32,7 +32,7 @@ python3Packages.buildPythonApplication rec {
# sandbox to be disabled. # sandbox to be disabled.
doCheck = false; doCheck = false;
passthru.updateScript = gitUpdater { inherit pname version; }; passthru.updateScript = gitUpdater { };
meta = with lib; { meta = with lib; {
description = "Fast audio loudness scanner & tagger (ReplayGain v2 / R128)"; description = "Fast audio loudness scanner & tagger (ReplayGain v2 / R128)";

View file

@ -1,4 +1,4 @@
{ stdenv, lib, fetchFromGitHub, cmake, pkg-config { stdenv, lib, fetchFromGitHub, cmake, pkg-config, darwin
, alsa-lib, asio, avahi, boost17x, flac, libogg, libvorbis, soxr , alsa-lib, asio, avahi, boost17x, flac, libogg, libvorbis, soxr
, aixlog, popl , aixlog, popl
, pulseaudioSupport ? false, libpulseaudio , pulseaudioSupport ? false, libpulseaudio
@ -22,9 +22,13 @@ stdenv.mkDerivation rec {
# not needed # not needed
buildInputs = [ buildInputs = [
boost17x boost17x
alsa-lib asio avahi flac libogg libvorbis asio avahi flac libogg libvorbis
aixlog popl soxr aixlog popl soxr
] ++ lib.optional pulseaudioSupport libpulseaudio; ] ++ lib.optional pulseaudioSupport libpulseaudio
++ lib.optional stdenv.isLinux alsa-lib
++ lib.optional stdenv.isDarwin [darwin.apple_sdk.frameworks.IOKit darwin.apple_sdk.frameworks.AudioToolbox];
TARGET=lib.optionalString stdenv.isDarwin "MACOS";
# Upstream systemd unit files are pretty awful, so we provide our own in a # Upstream systemd unit files are pretty awful, so we provide our own in a
# NixOS module. It might make sense to get that upstreamed... # NixOS module. It might make sense to get that upstreamed...
@ -39,6 +43,7 @@ stdenv.mkDerivation rec {
description = "Synchronous multi-room audio player"; description = "Synchronous multi-room audio player";
homepage = "https://github.com/badaix/snapcast"; homepage = "https://github.com/badaix/snapcast";
maintainers = with maintainers; [ fpletz ]; maintainers = with maintainers; [ fpletz ];
platforms = platforms.linux ++ platforms.darwin;
license = licenses.gpl3Plus; license = licenses.gpl3Plus;
}; };
} }

View file

@ -2,6 +2,7 @@
, libid3tag, liblo, libmad, liboggz, libpulseaudio, libsamplerate , libid3tag, liblo, libmad, liboggz, libpulseaudio, libsamplerate
, libsndfile, lrdf, opusfile, portaudio, rubberband, serd, sord, capnproto , libsndfile, lrdf, opusfile, portaudio, rubberband, serd, sord, capnproto
, wrapQtAppsHook, pkg-config , wrapQtAppsHook, pkg-config
, libjack2
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -17,6 +18,7 @@ stdenv.mkDerivation rec {
[ alsa-lib boost bzip2 fftw fftwFloat libfishsound libid3tag liblo [ alsa-lib boost bzip2 fftw fftwFloat libfishsound libid3tag liblo
libmad liboggz libpulseaudio libsamplerate libsndfile lrdf opusfile libmad liboggz libpulseaudio libsamplerate libsndfile lrdf opusfile
portaudio rubberband serd sord capnproto portaudio rubberband serd sord capnproto
libjack2
]; ];
nativeBuildInputs = [ pkg-config wrapQtAppsHook ]; nativeBuildInputs = [ pkg-config wrapQtAppsHook ];
@ -34,5 +36,7 @@ stdenv.mkDerivation rec {
license = licenses.gpl2Plus; license = licenses.gpl2Plus;
maintainers = [ maintainers.vandenoever ]; maintainers = [ maintainers.vandenoever ];
platforms = platforms.linux; platforms = platforms.linux;
# undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'
broken = true; # at 2022-09-30
}; };
} }

View file

@ -132,7 +132,7 @@ stdenv.mkDerivation rec {
description = "The Linux desktop music player from the future"; description = "The Linux desktop music player from the future";
homepage = "https://tauonmusicbox.rocks/"; homepage = "https://tauonmusicbox.rocks/";
license = licenses.gpl3; license = licenses.gpl3;
maintainers = with maintainers; [ SuperSandro2000 ]; maintainers = with maintainers; [ jansol ];
platforms = platforms.linux; platforms = platforms.linux;
}; };
} }

View file

@ -18,6 +18,7 @@
, gdk-pixbuf , gdk-pixbuf
, glib , glib
, gtk3 , gtk3
, imagemagick
, libappindicator-gtk3 , libappindicator-gtk3
, libdbusmenu , libdbusmenu
, libdrm , libdrm
@ -36,11 +37,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "tidal-hifi"; pname = "tidal-hifi";
version = "4.2.0"; version = "4.3.0";
src = fetchurl { src = fetchurl {
url = "https://github.com/Mastermindzh/tidal-hifi/releases/download/${version}/tidal-hifi_${version}_amd64.deb"; url = "https://github.com/Mastermindzh/tidal-hifi/releases/download/${version}/tidal-hifi_${version}_amd64.deb";
sha256 = "sha256-YydpWzGH+Orb8Vot8hchh+FFcd327VwQ8Kr7x8WYnv4="; sha256 = "sha256-/ZESysxaDhMpyTKHjjoRMiLM7SMESA5VIfgWCqdyDck=";
}; };
nativeBuildInputs = [ autoPatchelfHook dpkg makeWrapper ]; nativeBuildInputs = [ autoPatchelfHook dpkg makeWrapper ];
@ -60,6 +61,7 @@ stdenv.mkDerivation rec {
gdk-pixbuf gdk-pixbuf
glib glib
gtk3 gtk3
imagemagick
pango pango
systemd systemd
mesa # for libgbm mesa # for libgbm
@ -106,8 +108,15 @@ stdenv.mkDerivation rec {
makeWrapper $out/opt/tidal-hifi/tidal-hifi $out/bin/tidal-hifi \ makeWrapper $out/opt/tidal-hifi/tidal-hifi $out/bin/tidal-hifi \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath buildInputs}" \ --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath buildInputs}" \
"''${gappsWrapperArgs[@]}" "''${gappsWrapperArgs[@]}"
substituteInPlace $out/share/applications/tidal-hifi.desktop --replace \ substituteInPlace $out/share/applications/tidal-hifi.desktop \
"/opt/tidal-hifi/tidal-hifi" "tidal-hifi" --replace "/opt/tidal-hifi/tidal-hifi" "tidal-hifi" \
--replace "/usr/share/icons/hicolor/0x0/apps/tidal-hifi.png" "tidal-hifi.png"
for size in 48 64 128 256 512; do
mkdir -p $out/share/icons/hicolor/''${size}x''${size}/apps/
convert $out/share/icons/hicolor/0x0/apps/tidal-hifi.png \
-resize ''${size}x''${size} $out/share/icons/hicolor/''${size}x''${size}/apps/tidal-hifi.png
done
''; '';
meta = with lib; { meta = with lib; {

View file

@ -3,12 +3,12 @@
, libGLU, lv2, gtk2, cairo, pango, fftwFloat, zita-convolver }: , libGLU, lv2, gtk2, cairo, pango, fftwFloat, zita-convolver }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "20220714"; version = "20220923";
pname = "x42-plugins"; pname = "x42-plugins";
src = fetchurl { src = fetchurl {
url = "https://gareus.org/misc/x42-plugins/${pname}-${version}.tar.xz"; url = "https://gareus.org/misc/x42-plugins/${pname}-${version}.tar.xz";
sha256 = "sha256-myrHOfgpCwuW8YX0jZ3RutoqtXysU0ejBNcuxN3stXU="; sha256 = "sha256-9Y9up5Ziipm6ums1wESfcADKgMwas2SESgGPn74RTt4=";
}; };
nativeBuildInputs = [ pkg-config ]; nativeBuildInputs = [ pkg-config ];

View file

@ -22,13 +22,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "yoshimi"; pname = "yoshimi";
version = "2.2.1"; version = "2.2.2.1";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "Yoshimi"; owner = "Yoshimi";
repo = pname; repo = pname;
rev = version; rev = version;
hash = "sha256-Uo403vxzmDntmdoQZQqncuLpDXVJ2FdGi4pQ9jE9b/k="; hash = "sha256-fkN5VNiXRVKCCAyrG6Z2s5qLEtHQNB2874VprhHBhAg=";
}; };
sourceRoot = "source/src"; sourceRoot = "source/src";

View file

@ -6,14 +6,14 @@
let chia = python3Packages.buildPythonApplication rec { let chia = python3Packages.buildPythonApplication rec {
pname = "chia"; pname = "chia";
version = "1.5.1"; version = "1.6.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "Chia-Network"; owner = "Chia-Network";
repo = "chia-blockchain"; repo = "chia-blockchain";
rev = version; rev = version;
fetchSubmodules = true; fetchSubmodules = true;
hash = "sha256-FzKdb6Z/ykKYjpjCr7QR5fxXPNnQbW3bBY97t7DxS90="; hash = "sha256-TNaHPvN19fkRqkQHtqdeEDwhqbntcVhxXhY8TNIScEg=";
}; };
patches = [ patches = [

View file

@ -2,11 +2,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "ergo"; pname = "ergo";
version = "4.0.45"; version = "4.0.103";
src = fetchurl { src = fetchurl {
url = "https://github.com/ergoplatform/ergo/releases/download/v${version}/ergo-${version}.jar"; url = "https://github.com/ergoplatform/ergo/releases/download/v${version}/ergo-${version}.jar";
sha256 = "sha256-YUcBNGUs7oBiY7zkRSQxT4/t3DfvamcQPVI3h/sonHM="; sha256 = "sha256-9vGPHNq76BSdqN1z0KzDOzeMOHAUKnA3Jpx+I5+FOFM=";
}; };
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [ makeWrapper ];

View file

@ -2,17 +2,17 @@
buildGoModule rec { buildGoModule rec {
pname = "erigon"; pname = "erigon";
version = "2022.09.03"; version = "2022.10.01";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "ledgerwatch"; owner = "ledgerwatch";
repo = pname; repo = pname;
rev = "v${version}"; rev = "v${version}";
sha256 = "sha256-dilsoJw7VPA7SerpAOhYUviE2zt2qMBmSLWaPm0ux2Y="; sha256 = "sha256-FuOVI59vfhm5q92hnfgarh3zpLXSDRmZQJuERHf4I7A=";
fetchSubmodules = true; fetchSubmodules = true;
}; };
vendorSha256 = "sha256-W8hEMfn2qW/3+V6x/RH1azj49V26fyQ+1y2re3tXsTk="; vendorSha256 = "sha256-zdm11bGkCcwnz+8dve2pdcpg6pDgLe4UG3Ob/mbqhko=";
proxyVendor = true; proxyVendor = true;
# Build errors in mdbx when format hardening is enabled: # Build errors in mdbx when format hardening is enabled:

View file

@ -11,13 +11,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "fulcrum"; pname = "fulcrum";
version = "1.8.1"; version = "1.8.2";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "cculianu"; owner = "cculianu";
repo = "Fulcrum"; repo = "Fulcrum";
rev = "v${version}"; rev = "v${version}";
sha256 = "sha256-GaXXqIHuMTGn8iLymAhL8i0HzXmaO6RxtvIzgWw6QI0="; sha256 = "sha256-sX9GeY+c/mcsAWApQ0E5LwoXZgWUC4w7YY8/PEzMhl8=";
}; };
nativeBuildInputs = [ pkg-config qmake ]; nativeBuildInputs = [ pkg-config qmake ];

View file

@ -9,13 +9,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "monero-cli"; pname = "monero-cli";
version = "0.18.1.1"; version = "0.18.1.2";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "monero-project"; owner = "monero-project";
repo = "monero"; repo = "monero";
rev = "v${version}"; rev = "v${version}";
sha256 = "sha256-R3ajdsHVgvkUEwaShwMvhIrcbM4YjsXgBk2QGBhxGRQ="; sha256 = "sha256-yV1ysoesEcjL+JX6hkmcrBDmazOWBvYK6EjshxJzcAw=";
fetchSubmodules = true; fetchSubmodules = true;
}; };

View file

@ -14,13 +14,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "monero-gui"; pname = "monero-gui";
version = "0.18.1.1"; version = "0.18.1.2";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "monero-project"; owner = "monero-project";
repo = "monero-gui"; repo = "monero-gui";
rev = "v${version}"; rev = "v${version}";
sha256 = "sha256-mxbr02Ba/BeUiAZujnBdXgJSaq6a/U4GM7rR7sZzTWc="; sha256 = "sha256-GBILqNkYQUkil1qvYnJTkHwgK3dzKR9I9GVbbLy/0UU=";
}; };
nativeBuildInputs = [ nativeBuildInputs = [

View file

@ -3,13 +3,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "stellar-core"; pname = "stellar-core";
version = "19.3.0"; version = "19.4.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "stellar"; owner = "stellar";
repo = pname; repo = pname;
rev = "v${version}"; rev = "v${version}";
sha256 = "sha256-6untHS4+2CyYfGQdbACjEbE+aSirjNk7LxOO2BWDZEM="; sha256 = "sha256-pgwLCtlj2Ak34KfE+ffIxQ1Z4Epxm3f1Y2aqYOIlLUc=";
fetchSubmodules = true; fetchSubmodules = true;
}; };

View file

@ -10,16 +10,16 @@ let
inherit tiling_wm; inherit tiling_wm;
}; };
stableVersion = { stableVersion = {
version = "2021.2.1.15"; # "Android Studio Chipmunk (2021.2.1)" version = "2021.3.1.16"; # "Android Studio Dolphin (2021.3.1)"
sha256Hash = "ABjg38DdKSFwBRb3osRDN3xVd4jaf7CkUkPstDAHRb4="; sha256Hash = "GnJbWFeG9DuUQzbK9wM2BEbj9LXm4jQFf/Eh5Q75HZo=";
}; };
betaVersion = { betaVersion = {
version = "2021.3.1.14"; # "Android Studio Dolphin (2021.3.1) Beta 5" version = "2022.1.1.11"; # "Android Studio Electic Eel (2022.1.1) Beta 1"
sha256Hash = "k1Qt54u45rwHsQNz9TVqnFB65kBKtfFZ3OknpfutKPI="; sha256Hash = "YQ20VQME9bQ2vOI7RWfA00npewOL3D6y1dGgNnJXnHc=";
}; };
latestVersion = { # canary & dev latestVersion = { # canary & dev
version = "2022.1.1.8"; # "Android Studio Electric Eel (2022.1.1) Canary 8" version = "2022.2.1.2"; # "Android Studio Flamingo (2022.2.1) Canary 2"
sha256Hash = "0bZXx4YpMztLAnwuBaSaNT3GJNfYnqCDanwR+Q7qyUc="; sha256Hash = "hlHlgyl9If2LH4aExpElx0rqmWeoFX+qx4w6RRb5e8U=";
}; };
in { in {
# Attributes are named by their corresponding release channels # Attributes are named by their corresponding release channels

View file

@ -38,13 +38,13 @@ let
in in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "cudatext"; pname = "cudatext";
version = "1.171.0"; version = "1.172.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "Alexey-T"; owner = "Alexey-T";
repo = "CudaText"; repo = "CudaText";
rev = version; rev = version;
hash = "sha256-+NTxZ5UkmaFDcTYliNi/5c8xGztVu6P8C7Ga99MHSFM="; hash = "sha256-AYIgYLrOVutsv0cHUd/TwNAyLbog6xjcepV9/3fTshc=";
}; };
postPatch = '' postPatch = ''

View file

@ -16,13 +16,13 @@
}, },
"ATSynEdit": { "ATSynEdit": {
"owner": "Alexey-T", "owner": "Alexey-T",
"rev": "2022.09.18", "rev": "2022.10.01",
"hash": "sha256-HjW4V7MctQoHbDYIlMv7VS0nS7FFG6Qir0sCju+isI0=" "hash": "sha256-cfjpPTOc8KjhaD1wVY3Tb/lQwEeT3Rq22lJ1MKdTNF0="
}, },
"ATSynEdit_Cmp": { "ATSynEdit_Cmp": {
"owner": "Alexey-T", "owner": "Alexey-T",
"rev": "2022.09.18", "rev": "2022.10.03",
"hash": "sha256-yIbIRo4hpwbCdH+3fIhjnQPtdvuFmfJSqloKjWqKEuY=" "hash": "sha256-2XP3LyB18ZHLQOxzP4lBuhlUA8u1+wHl97cxmRYa7Xg="
}, },
"EControl": { "EControl": {
"owner": "Alexey-T", "owner": "Alexey-T",

View file

@ -19,10 +19,10 @@
elpaBuild { elpaBuild {
pname = "ack"; pname = "ack";
ename = "ack"; ename = "ack";
version = "1.10"; version = "1.11";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/ack-1.10.tar"; url = "https://elpa.gnu.org/packages/ack-1.11.tar";
sha256 = "0jz8badhjpzjlrprpzgcm1z6ask1ykc7ab62ixjrj9wcgfjif5qw"; sha256 = "0fsi3lgfkyv9gxwcs0q5c9fawksz6x0pqarjagcndnd7jlbxjw7z";
}; };
packageRequires = []; packageRequires = [];
meta = { meta = {
@ -234,10 +234,10 @@
elpaBuild { elpaBuild {
pname = "async"; pname = "async";
ename = "async"; ename = "async";
version = "1.9.6"; version = "1.9.7";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/async-1.9.6.tar"; url = "https://elpa.gnu.org/packages/async-1.9.7.tar";
sha256 = "0qyf1niqjhzaphb50q1znkwqzpdvqw3drivkzrqxrs747k7pm3my"; sha256 = "0wwjgvj42irznwz6rjh8yiz4p9hswgi6ak57anjn256c4zx8xaz2";
}; };
packageRequires = [ emacs ]; packageRequires = [ emacs ];
meta = { meta = {
@ -1071,10 +1071,10 @@
elpaBuild { elpaBuild {
pname = "denote"; pname = "denote";
ename = "denote"; ename = "denote";
version = "0.6.1"; version = "1.0.0";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/denote-0.6.1.tar"; url = "https://elpa.gnu.org/packages/denote-1.0.0.tar";
sha256 = "1yxfnwq2b32xrl52g61a9g3i53m94iybx0n8hh6nbmcv5x4y43ya"; sha256 = "1gywi22x12p7hkliwy84i7pvyis5ja22fybz5shkdmkcl12mx631";
}; };
packageRequires = [ emacs ]; packageRequires = [ emacs ];
meta = { meta = {
@ -1086,10 +1086,10 @@
elpaBuild { elpaBuild {
pname = "detached"; pname = "detached";
ename = "detached"; ename = "detached";
version = "0.9.0"; version = "0.9.1";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/detached-0.9.0.tar"; url = "https://elpa.gnu.org/packages/detached-0.9.1.tar";
sha256 = "1br1s2kwb5ji4ad5m89grpyvjffhc3xxydgja9q796cx6zwrnavp"; sha256 = "1hzvqb18bpdpmnk469cmkayvddm37knd3mjj7m6zv3qsjw17n6f1";
}; };
packageRequires = [ emacs ]; packageRequires = [ emacs ];
meta = { meta = {
@ -1247,6 +1247,21 @@
license = lib.licenses.free; license = lib.licenses.free;
}; };
}) {}; }) {};
doc-toc = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
elpaBuild {
pname = "doc-toc";
ename = "doc-toc";
version = "1.0";
src = fetchurl {
url = "https://elpa.gnu.org/packages/doc-toc-1.0.tar";
sha256 = "07yan1jmp6q87rhm8bmglswnhzlh5r9j35x5sqm5yfx0pcp16kpj";
};
packageRequires = [ emacs ];
meta = {
homepage = "https://elpa.gnu.org/packages/doc-toc.html";
license = lib.licenses.free;
};
}) {};
docbook = callPackage ({ elpaBuild, fetchurl, lib }: docbook = callPackage ({ elpaBuild, fetchurl, lib }:
elpaBuild { elpaBuild {
pname = "docbook"; pname = "docbook";
@ -1386,10 +1401,10 @@
elpaBuild { elpaBuild {
pname = "eev"; pname = "eev";
ename = "eev"; ename = "eev";
version = "20220828"; version = "20220926";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/eev-20220828.tar"; url = "https://elpa.gnu.org/packages/eev-20220926.tar";
sha256 = "0znsimjq61p67c2q3qbia5qrimy847xy6gjpl1jgyrdlpgm9hv6r"; sha256 = "0kc30y44wl691jchafljp938kbwilawdfxm0bp6nsniv1bm95rpy";
}; };
packageRequires = [ emacs ]; packageRequires = [ emacs ];
meta = { meta = {
@ -1401,10 +1416,10 @@
elpaBuild { elpaBuild {
pname = "ef-themes"; pname = "ef-themes";
ename = "ef-themes"; ename = "ef-themes";
version = "0.5.0"; version = "0.6.0";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/ef-themes-0.5.0.tar"; url = "https://elpa.gnu.org/packages/ef-themes-0.6.0.tar";
sha256 = "1k73q48vg7vyjmnvizinwn9if481ajq63ps2iwb01f1brrhmbf5v"; sha256 = "00xq5ymsq8lq2jc541lw64i9pp0a0757wj3nasmfsa27wfpivzhb";
}; };
packageRequires = [ emacs ]; packageRequires = [ emacs ];
meta = { meta = {
@ -1563,10 +1578,10 @@
elpaBuild { elpaBuild {
pname = "ement"; pname = "ement";
ename = "ement"; ename = "ement";
version = "0.2"; version = "0.3";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/ement-0.2.tar"; url = "https://elpa.gnu.org/packages/ement-0.3.tar";
sha256 = "1kxbkqiy5c9pxk4f5k3d3j2q3qn7cg8f21zpgds9s8fd6ax0arcf"; sha256 = "08k1qfcymsnaz0mzq33l3i0fj9kjf5y0pdpn7k0skhhlsw90h078";
}; };
packageRequires = [ packageRequires = [
emacs emacs
@ -2909,10 +2924,10 @@
elpaBuild { elpaBuild {
pname = "modus-themes"; pname = "modus-themes";
ename = "modus-themes"; ename = "modus-themes";
version = "2.6.0"; version = "2.7.1";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/modus-themes-2.6.0.tar"; url = "https://elpa.gnu.org/packages/modus-themes-2.7.1.tar";
sha256 = "0i4y69rrdcm64mvqs5z7dmgx1xk0x7g5978q5gjblczlfka444k4"; sha256 = "1ms5nig05z26342723jln50m7xq055knr2570x40lkg2m9s1ikx1";
}; };
packageRequires = [ emacs ]; packageRequires = [ emacs ];
meta = { meta = {
@ -3162,10 +3177,10 @@
elpaBuild { elpaBuild {
pname = "notmuch-indicator"; pname = "notmuch-indicator";
ename = "notmuch-indicator"; ename = "notmuch-indicator";
version = "0.1.0"; version = "0.1.1";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/notmuch-indicator-0.1.0.tar"; url = "https://elpa.gnu.org/packages/notmuch-indicator-0.1.1.tar";
sha256 = "11kbl8y95vwww1rsgdd1q5x8i690gi4cxql4n2sg7r5dysdrbyz1"; sha256 = "1fdl8xm48id1a85gf3gr8d8m3sz61xrras9f598pvrksm3j162b6";
}; };
packageRequires = [ emacs ]; packageRequires = [ emacs ];
meta = { meta = {
@ -3582,10 +3597,10 @@
elpaBuild { elpaBuild {
pname = "perl-doc"; pname = "perl-doc";
ename = "perl-doc"; ename = "perl-doc";
version = "0.2"; version = "0.6";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/perl-doc-0.2.tar"; url = "https://elpa.gnu.org/packages/perl-doc-0.6.tar";
sha256 = "1p5bbkwllh91a0vg5aisqa9kbms7l9vxk14lm09bav952xxn6gdl"; sha256 = "0xmk09pfvdzkrjfsa2l78bd6akcbdhcbnpvwnm6r83h65gpld79f";
}; };
packageRequires = [ emacs ]; packageRequires = [ emacs ];
meta = { meta = {
@ -3642,10 +3657,10 @@
elpaBuild { elpaBuild {
pname = "plz"; pname = "plz";
ename = "plz"; ename = "plz";
version = "0.2"; version = "0.2.1";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/plz-0.2.tar"; url = "https://elpa.gnu.org/packages/plz-0.2.1.tar";
sha256 = "1b45m9b9gzx5ylpxcppkiikk5lfya7ngiqsap4a7m1b2cr8rqxcj"; sha256 = "01xa4vjbcdm37dya5d006k9p37kcm1g4yh4j7vh7hjfdz43j6y9s";
}; };
packageRequires = [ emacs ]; packageRequires = [ emacs ];
meta = { meta = {
@ -3747,10 +3762,10 @@
elpaBuild { elpaBuild {
pname = "pyim"; pname = "pyim";
ename = "pyim"; ename = "pyim";
version = "5.2.4"; version = "5.2.5";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/pyim-5.2.4.tar"; url = "https://elpa.gnu.org/packages/pyim-5.2.5.tar";
sha256 = "1dzl4xaf31nyjb5hnwwf29i75x0i8dakpmmagbn4ks5hi3jl2ig0"; sha256 = "00f23pl53rdy9iwp4gj2656wik7c6vnmhsglg7z4pz3ippz3f4hq";
}; };
packageRequires = [ async emacs xr ]; packageRequires = [ async emacs xr ];
meta = { meta = {
@ -4427,10 +4442,10 @@
elpaBuild { elpaBuild {
pname = "sokoban"; pname = "sokoban";
ename = "sokoban"; ename = "sokoban";
version = "1.4.8"; version = "1.4.9";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/sokoban-1.4.8.tar"; url = "https://elpa.gnu.org/packages/sokoban-1.4.9.tar";
sha256 = "1w3vrkg239x1saqka21zbl380fxqmbz3lr7820spxd8p5w9v55pn"; sha256 = "1zri4czw2d5impkgn8d4hliyw31vndadg7wj31gairk8kyakjpgm";
}; };
packageRequires = [ cl-lib emacs ]; packageRequires = [ cl-lib emacs ];
meta = { meta = {
@ -4687,10 +4702,10 @@
elpaBuild { elpaBuild {
pname = "taxy-magit-section"; pname = "taxy-magit-section";
ename = "taxy-magit-section"; ename = "taxy-magit-section";
version = "0.10"; version = "0.11";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/taxy-magit-section-0.10.tar"; url = "https://elpa.gnu.org/packages/taxy-magit-section-0.11.tar";
sha256 = "1g58nvpb04ldhn5qnjw2q5idrv6vhlfa0qmb46cvis6bkz46cxkw"; sha256 = "058z95c0z2hxplr5pfgph1cdq68zcrkmwx1wqyd5fy4a5h43yknq";
}; };
packageRequires = [ emacs magit-section taxy ]; packageRequires = [ emacs magit-section taxy ];
meta = { meta = {
@ -4826,10 +4841,10 @@
elpaBuild { elpaBuild {
pname = "tramp"; pname = "tramp";
ename = "tramp"; ename = "tramp";
version = "2.5.3.2"; version = "2.5.3.3";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/tramp-2.5.3.2.tar"; url = "https://elpa.gnu.org/packages/tramp-2.5.3.3.tar";
sha256 = "1jcicb9f7c1nmaqg20yy2j4wd0qfch4llc26ga7q3ckhx41pvbiw"; sha256 = "05w04qwk1lk50fzwl6fxyf6pb1jd2lx4as99zm1dpa858jab6w4a";
}; };
packageRequires = [ emacs ]; packageRequires = [ emacs ];
meta = { meta = {
@ -4841,10 +4856,10 @@
elpaBuild { elpaBuild {
pname = "tramp-nspawn"; pname = "tramp-nspawn";
ename = "tramp-nspawn"; ename = "tramp-nspawn";
version = "1.0"; version = "1.0.1";
src = fetchurl { src = fetchurl {
url = "https://elpa.gnu.org/packages/tramp-nspawn-1.0.tar"; url = "https://elpa.gnu.org/packages/tramp-nspawn-1.0.1.tar";
sha256 = "1si649vcj4md50p5nzvw431580rcl113rraj6fw636a394485hvx"; sha256 = "1w8h563pcdksqqy5v5vi7vrx76r6pi4bzhqywk1v67rhnr33qsvq";
}; };
packageRequires = [ emacs ]; packageRequires = [ emacs ];
meta = { meta = {

View file

@ -96,7 +96,7 @@ self: let
./build.sh -j$NIX_BUILD_CORES ./build.sh -j$NIX_BUILD_CORES
''; '';
postInstall = '' postInstall = (old.postInstall or "") + "\n" + ''
./install.sh --prefix=$out ./install.sh --prefix=$out
''; '';

View file

@ -160,6 +160,8 @@
urweb-mode = callPackage ./urweb-mode { }; urweb-mode = callPackage ./urweb-mode { };
voicemacs = callPackage ./voicemacs { };
# Packages made the classical callPackage way # Packages made the classical callPackage way
ebuild-mode = callPackage ./ebuild-mode { }; ebuild-mode = callPackage ./ebuild-mode { };

View file

@ -186,7 +186,7 @@ let
cd - cd -
''; '';
postInstall = '' postInstall = (old.postInstall or "") + "\n" + ''
install -m=755 -D source/sqlite/emacsql-sqlite \ install -m=755 -D source/sqlite/emacsql-sqlite \
$out/share/emacs/site-lisp/elpa/emacsql-sqlite-${old.version}/sqlite/emacsql-sqlite $out/share/emacs/site-lisp/elpa/emacsql-sqlite-${old.version}/sqlite/emacsql-sqlite
''; '';
@ -301,7 +301,7 @@ let
make make
popd popd
''; '';
postInstall = '' postInstall = (attrs.postInstall or "") + "\n" + ''
outd=$(echo $out/share/emacs/site-lisp/elpa/libgit-**) outd=$(echo $out/share/emacs/site-lisp/elpa/libgit-**)
mkdir $outd/build mkdir $outd/build
install -m444 -t $outd/build ./source/src/libegit2.so install -m444 -t $outd/build ./source/src/libegit2.so
@ -426,7 +426,7 @@ let
cd - cd -
''; '';
postInstall = '' postInstall = (old.postInstall or "") + "\n" + ''
mkdir -p $out/bin mkdir -p $out/bin
install -m755 -Dt $out/bin ./source/server/telega-server install -m755 -Dt $out/bin ./source/server/telega-server
''; '';
@ -456,7 +456,7 @@ let
pkgs.libtool pkgs.libtool
(pkgs.zeromq.override { enableDrafts = true; }) (pkgs.zeromq.override { enableDrafts = true; })
]; ];
postInstall = '' postInstall = (old.postInstall or "") + "\n" + ''
mv $EZMQ_LIBDIR/emacs-zmq.* $out/share/emacs/site-lisp/elpa/zmq-* mv $EZMQ_LIBDIR/emacs-zmq.* $out/share/emacs/site-lisp/elpa/zmq-*
rm -r $out/share/emacs/site-lisp/elpa/zmq-*/src rm -r $out/share/emacs/site-lisp/elpa/zmq-*/src
rm $out/share/emacs/site-lisp/elpa/zmq-*/Makefile rm $out/share/emacs/site-lisp/elpa/zmq-*/Makefile
@ -533,7 +533,7 @@ let
]; ];
# we need the proper out directory to exist, so we do this in the # we need the proper out directory to exist, so we do this in the
# postInstall instead of postBuild # postInstall instead of postBuild
postInstall = '' postInstall = (old.postInstall or "") + "\n" + ''
pushd source/build >/dev/null pushd source/build >/dev/null
make make
install -m444 -t $out/share/emacs/site-lisp/elpa/vterm-** ../*.so install -m444 -t $out/share/emacs/site-lisp/elpa/vterm-** ../*.so

View file

@ -49,10 +49,10 @@
elpaBuild { elpaBuild {
pname = "annotate"; pname = "annotate";
ename = "annotate"; ename = "annotate";
version = "1.7.2"; version = "1.8.0";
src = fetchurl { src = fetchurl {
url = "https://elpa.nongnu.org/nongnu/annotate-1.7.2.tar"; url = "https://elpa.nongnu.org/nongnu/annotate-1.8.0.tar";
sha256 = "0vdpv8k1cvkn3cvsnxqv299gvp470ga2pgmfvdqi7k1vzypgpp57"; sha256 = "169cav480g2fm3z7d5dixrng2h8fv39sa9n066b79cb573p4bbcp";
}; };
packageRequires = []; packageRequires = [];
meta = { meta = {
@ -1208,10 +1208,10 @@
elpaBuild { elpaBuild {
pname = "helm"; pname = "helm";
ename = "helm"; ename = "helm";
version = "3.8.7"; version = "3.8.8";
src = fetchurl { src = fetchurl {
url = "https://elpa.nongnu.org/nongnu/helm-3.8.7.tar"; url = "https://elpa.nongnu.org/nongnu/helm-3.8.8.tar";
sha256 = "1n0m061amrzm0xpgqy2mp9vrk2960gqhl5hi6c1smcmm7nxqwz12"; sha256 = "1qsiw8gswjwfp79n7g103db7xsmk36lq6ln558ipn4cw0fpnq1sc";
}; };
packageRequires = [ helm-core popup ]; packageRequires = [ helm-core popup ];
meta = { meta = {
@ -1223,10 +1223,10 @@
elpaBuild { elpaBuild {
pname = "helm-core"; pname = "helm-core";
ename = "helm-core"; ename = "helm-core";
version = "3.8.7"; version = "3.8.8";
src = fetchurl { src = fetchurl {
url = "https://elpa.nongnu.org/nongnu/helm-core-3.8.7.tar"; url = "https://elpa.nongnu.org/nongnu/helm-core-3.8.8.tar";
sha256 = "1sak74v3gg34zzlbbgvlzvg7gw32fhcbxp5kigigmwvvbj5imgs7"; sha256 = "0wg21425ki8n8d954lkmlyci6awwwv53jg4gn5z495vh27qiv3qn";
}; };
packageRequires = [ async emacs ]; packageRequires = [ async emacs ];
meta = { meta = {
@ -2358,6 +2358,21 @@
license = lib.licenses.free; license = lib.licenses.free;
}; };
}) {}; }) {};
sweeprolog = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
elpaBuild {
pname = "sweeprolog";
ename = "sweeprolog";
version = "0.4.5";
src = fetchurl {
url = "https://elpa.nongnu.org/nongnu/sweeprolog-0.4.5.tar";
sha256 = "17dbrn2yvc6ib4dig410kbmvpwp4iz6q9hx6g0mk3vxqjrmgwyls";
};
packageRequires = [ emacs ];
meta = {
homepage = "https://elpa.gnu.org/packages/sweeprolog.html";
license = lib.licenses.free;
};
}) {};
swift-mode = callPackage ({ elpaBuild, emacs, fetchurl, lib, seq }: swift-mode = callPackage ({ elpaBuild, emacs, fetchurl, lib, seq }:
elpaBuild { elpaBuild {
pname = "swift-mode"; pname = "swift-mode";
@ -2518,10 +2533,10 @@
elpaBuild { elpaBuild {
pname = "tuareg"; pname = "tuareg";
ename = "tuareg"; ename = "tuareg";
version = "2.3.0"; version = "3.0.1";
src = fetchurl { src = fetchurl {
url = "https://elpa.nongnu.org/nongnu/tuareg-2.3.0.tar"; url = "https://elpa.nongnu.org/nongnu/tuareg-3.0.1.tar";
sha256 = "0a24q64yk4bbgsvm56j1y68zs9yi25qyl83xydx3ff75sk27f1yb"; sha256 = "0y98gwnbrcj3csd9yilk1izgzmp1ds5dh3y1bxgb2fzrjir3i13f";
}; };
packageRequires = [ caml emacs ]; packageRequires = [ caml emacs ];
meta = { meta = {

View file

@ -0,0 +1,38 @@
From eb9fefe7eddee0b22c7c1104eb9133ed595c55f9 Mon Sep 17 00:00:00 2001
From: adisbladis <adisbladis@gmail.com>
Date: Fri, 23 Sep 2022 14:52:34 +1200
Subject: [PATCH] Add missing (require)'s
---
voicemacs-server.el | 2 ++
voicemacs.el | 2 ++
2 files changed, 4 insertions(+)
diff --git a/voicemacs-server.el b/voicemacs-server.el
index edfe74c..04ffdf2 100644
--- a/voicemacs-server.el
+++ b/voicemacs-server.el
@@ -1,5 +1,7 @@
(require 'cl-lib)
(require 'json-rpc-server)
+(require 'f)
+(require 'porthole)
(defvar voicemacs--update-response-timeout 3
diff --git a/voicemacs.el b/voicemacs.el
index b93e80b..d790636 100644
--- a/voicemacs.el
+++ b/voicemacs.el
@@ -18,6 +18,8 @@
(require 'voicemacs-extend-company))
+(require 'yasnippet)
+
(voicemacs-define-sync voicemacs
:update t
:enable nil
--
2.37.2

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