Project import generated by Copybara.

GitOrigin-RevId: 870959c7fb3a42af1863bed9e1756086a74eb649
This commit is contained in:
Default email 2021-08-22 09:53:02 +02:00
parent c440846823
commit 619d6dcc77
700 changed files with 19911 additions and 6624 deletions

View file

@ -15,11 +15,12 @@ Reviewing guidelines: https://nixos.org/manual/nixpkgs/unstable/#chap-reviewing-
<!-- Please check what applies. Note that these are not hard requirements but merely serve as information for reviewers. -->
- [ ] Tested using sandboxing ([nix.useSandbox](https://nixos.org/nixos/manual/options.html#opt-nix.useSandbox) on NixOS, or option `sandbox` in [`nix.conf`](https://nixos.org/nix/manual/#sec-conf-file) on non-NixOS linux)
- Built on platform(s)
- [ ] NixOS
- [ ] macOS
- [ ] other Linux distributions
- [ ] x86_64-linux
- [ ] aarch64-linux
- [ ] x86_64-darwin
- [ ] aarch64-darwin
- [ ] For non-Linux: Is `sandbox = true` set in `nix.conf`? (See [Nix manual](https://nixos.org/manual/nix/stable/#sec-conf-file))
- [ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside [nixos/tests](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests))
- [ ] Tested compilation of all packages that depend on this change using `nix-shell -p nixpkgs-review --run "nixpkgs-review wip"`
- [ ] Tested execution of all binary files (usually in `./result/bin/`)

View file

@ -20,9 +20,9 @@
<xi:include href="idris.section.xml" />
<xi:include href="ios.section.xml" />
<xi:include href="java.section.xml" />
<xi:include href="javascript.section.xml" />
<xi:include href="lua.section.xml" />
<xi:include href="maven.section.xml" />
<xi:include href="node.section.xml" />
<xi:include href="ocaml.section.xml" />
<xi:include href="perl.section.xml" />
<xi:include href="php.section.xml" />

View file

@ -0,0 +1,203 @@
# Javascript {#language-javascript}
## Introduction {#javascript-introduction}
This contains instructions on how to package javascript applications. For instructions on how to add a cli package from npm please consult the #node.js section
The various tools available will be listed in the [tools-overview](#javascript-tools-overview). Some general principles for packaging will follow. Finally some tool specific instructions will be given.
## Tools overview {#javascript-tools-overview}
## General principles {#javascript-general-principles}
The following principles are given in order of importance with potential exceptions.
### Try to use the same node version used upstream {#javascript-upstream-node-version}
It is often not documented which node version is used upstream, but if it is, try to use the same version when packaging.
This can be a problem if upstream is using the latest and greatest and you are trying to use an earlier version of node. Some cryptic errors regarding V8 may appear.
An exception to this:
### Try to respect the package manager originally used by upstream (and use the upstream lock file) {#javascript-upstream-package-manager}
A lock file (package-lock.json, yarn.lock...) is supposed to make reproducible installations of node_modules for each tool.
Guidelines of package managers, recommend to commit those lock files to the repos. If a particular lock file is present, it is a strong indication of which package manager is used upstream.
It's better to try to use a nix tool that understand the lock file. Using a different tool might give you hard to understand error because different packages have been installed. An example of problems that could arise can be found [here](https://github.com/NixOS/nixpkgs/pull/126629). Upstream uses npm, but this is an attempt to package it with yarn2nix (that uses yarn.lock)
Using a different tool forces to commit a lock file to the repository. Those files are fairly large, so when packaging for nixpkgs, this approach does not scale well.
Exceptions to this rule are:
- when you encounter one of the bugs from a nix tool. In each of the tool specific instructions, known problems will be detailed. If you have a problem with a particular tool, then it's best to try another tool, even if this means you will have to recreate a lock file and commit it to nixpkgs. In general yarn2nix has less known problems and so a simple search in nixpkgs will reveal many yarn.lock files commited
- Some lock files contain particular version of a package that has been pulled off npm for some reason. In that case, you can recreate upstream lock (by removing the original and `npm install`, `yarn`, ...) and commit this to nixpkgs.
- The only tool that supports workspaces (a feature of npm that helps manage sub-directories with different package.json from a single top level package.json) is yarn2nix. If upstream has workspaces you should try yarn2nix.
### Try to use upstream package.json {#javascript-upstream-package-json}
Exceptions to this rule are
- Sometimes the upstream repo assumes some dependencies be installed globally. In that case you can add them manually to the upstream package.json (`yarn add xxx` or `npm install xxx`, ...). Dependencies that are installed locally can be executed with `npx` for cli tools. (e.g. `npx postcss ...`, this is how you can call those dependencies in the phases).
- Sometimes there is a version conflict between some dependency requirements. In that case you can fix a version (by removing the `^`).
- Sometimes the script defined in the package.json does not work as is. Some scripts for example use cli tools that might not be available, or cd in directory with a different package.json (for workspaces notably). In that case, it's perfectly fine to look at what the particular script is doing and break this down in the phases. In the build script you can see `build:*` calling in turns several other build scripts like `build:ui` or `build:server`. If one of those fails, you can try to separate those into:
```Shell
yarn build:ui
yarn build:server
# OR
npm run build:ui
npm run build:server
```
when you need to override a package.json. It's nice to use the one from the upstream src and do some explicit override. Here is an example.
```nix
patchedPackageJSON = final.runCommand "package.json" { } ''
${jq}/bin/jq '.version = "0.4.0" |
.devDependencies."@jsdoc/cli" = "^0.2.5"
${sonar-src}/package.json > $out
'';
```
you will still need to commit the modified version of the lock files, but at least the overrides are explicit for everyone to see.
### Using node_modules directly {#javascript-using-node_modules}
each tool has an abstraction to just build the node_modules (dependencies) directory. you can always use the stdenv.mkDerivation with the node_modules to build the package (symlink the node_modules directory and then use the package build command). the node_modules abstraction can be also used to build some web framework frontends. For an example of this see how [plausible](https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/web-apps/plausible/default.nix) is built. mkYarnModules to make the derivation containing node_modules. Then when building the frontend you can just symlink the node_modules directory
## javascript packages inside nixpkgs {#javascript-packages-nixpkgs}
The `pkgs/development/node-packages` folder contains a generated collection of
[NPM packages](https://npmjs.com/) that can be installed with the Nix package
manager.
As a rule of thumb, the package set should only provide _end user_ software
packages, such as command-line utilities. Libraries should only be added to the
package set if there is a non-NPM package that requires it.
When it is desired to use NPM libraries in a development project, use the
`node2nix` generator directly on the `package.json` configuration file of the
project.
The package set provides support for the official stable Node.js versions.
The latest stable LTS release in `nodePackages`, as well as the latest stable
Current release in `nodePackages_latest`.
If your package uses native addons, you need to examine what kind of native
build system it uses. Here are some examples:
- `node-gyp`
- `node-gyp-builder`
- `node-pre-gyp`
After you have identified the correct system, you need to override your package
expression while adding in build system as a build input. For example, `dat`
requires `node-gyp-build`, so [we override](https://github.com/NixOS/nixpkgs/blob/32f5e5da4a1b3f0595527f5195ac3a91451e9b56/pkgs/development/node-packages/default.nix#L37-L40) its expression in [`default.nix`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/node-packages/default.nix):
```nix
dat = super.dat.override {
buildInputs = [ self.node-gyp-build pkgs.libtool pkgs.autoconf pkgs.automake ];
meta.broken = since "12";
};
```
To add a package from NPM to nixpkgs:
1. Modify `pkgs/development/node-packages/node-packages.json` to add, update
or remove package entries to have it included in `nodePackages` and
`nodePackages_latest`.
2. Run the script: `cd pkgs/development/node-packages && ./generate.sh`.
3. Build your new package to test your changes:
`cd /path/to/nixpkgs && nix-build -A nodePackages.<new-or-updated-package>`.
To build against the latest stable Current Node.js version (e.g. 14.x):
`nix-build -A nodePackages_latest.<new-or-updated-package>`
4. Add and commit all modified and generated files.
For more information about the generation process, consult the
[README.md](https://github.com/svanderburg/node2nix) file of the `node2nix`
tool.
## Tool specific instructions {#javascript-tool-specific}
### node2nix {#javascript-node2nix}
#### Preparation {#javascript-node2nix-preparation}
you will need to generate a nix expression for the dependencies
- don't forget the `-l package-lock.json` if there is a lock file
- Most probably you will need the `--development` to include the `devDependencies`
so the command will most likely be
`node2nix --developmennt -l package-lock.json`
[link to the doc in the repo](https://github.com/svanderburg/node2nix)
#### Pitfalls {#javascript-node2nix-pitfalls}
- if upstream package.json does not have a "version" attribute, node2nix will crash. You will need to add it like shown in [the package.json section](#javascript-upstream-package-json)
- node2nix has some [bugs](https://github.com/svanderburg/node2nix/issues/238). related to working with lock files from npm distributed with nodejs-16_x
- node2nix does not like missing packages from npm. If you see something like `Cannot resolve version: vue-loader-v16@undefined` then you might want to try another tool. The package might have been pulled off of npm.
### yarn2nix {#javascript-yarn2nix}
#### Preparation {#javascript-yarn2nix-preparation}
you will need at least a yarn.lock and yarn.nix file
- generate a yarn.lock in upstream if it is not already there
- `yarn2nix > yarn.nix` will generate the dependencies in a nix format
#### mkYarnPackage {#javascript-yarn2nix-mkYarnPackage}
this will by default try to generate a binary. For package only generating static assets (Svelte, Vue, React...), you will need to explicitely override the build step with your instructions. It's important to use the `--offline` flag. For example if you script is `"build": "something"` in package.json use
```nix
buildPhase = ''
yarn build --offline
'';
```
The dist phase is also trying to build a binary, the only way to override it is with
```nix
distPhase = "true";
```
the configure phase can sometimes fail because it tries to be too clever.
One common override is
```nix
configurePhase = "ln -s $node_modules node_modules";
```
#### mkYarnModules {#javascript-yarn2nix-mkYarnModules}
this will generate a derivation including the node_modules. If you have to build a derivation for an integrated web framework (rails, phoenix..), this is probably the easiest way. [Plausible](https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/web-apps/plausible/default.nix#L39) offers a good example of how to do this.
#### Pitfalls {#javascript-yarn2nix-pitfalls}
- if version is missing from upstream package.json, yarn will silently install nothing. In that case, you will need to override package.json as shown in the [package.json section](#javascript-upstream-package-json)
## Outside of nixpkgs {#javascript-outside-nixpkgs}
There are some other options available that can't be used inside nixpkgs. Those other options are written in nix. Importing them in nixpkgs will require moving the source code into nixpkgs. Using [Import From Derivation](https://nixos.wiki/wiki/Import_From_Derivation) is not allowed in hydra at present. If you are packaging something outside nixpkgs, those can be considered
### npmlock2nix {#javascript-npmlock2nix}
[npmlock2nix](https://github.com/nix-community/npmlock2nix) aims at building node_modules without code generation. It hasn't reached v1 yet, the api might be suject to change.
#### Pitfalls {#javascript-npmlock2nix-pitfalls}
- there are some [problems with npm v7](https://github.com/tweag/npmlock2nix/issues/45).
### nix-npm-buildpackage {#javascript-nix-npm-buildpackage}
[nix-npm-buildpackage](https://github.com/serokell/nix-npm-buildpackage) aims at building node_modules without code generation. It hasn't reached v1 yet, the api might change. It supports both package-lock.json and yarn.lock.
#### Pitfalls {#javascript-nix-npm-buildpackage-pitfalls}
- there are some [problems with npm v7](https://github.com/serokell/nix-npm-buildpackage/issues/33).

View file

@ -1,51 +0,0 @@
# Node.js {#node.js}
The `pkgs/development/node-packages` folder contains a generated collection of
[NPM packages](https://npmjs.com/) that can be installed with the Nix package
manager.
As a rule of thumb, the package set should only provide *end user* software
packages, such as command-line utilities. Libraries should only be added to the
package set if there is a non-NPM package that requires it.
When it is desired to use NPM libraries in a development project, use the
`node2nix` generator directly on the `package.json` configuration file of the
project.
The package set provides support for the official stable Node.js versions.
The latest stable LTS release in `nodePackages`, as well as the latest stable
Current release in `nodePackages_latest`.
If your package uses native addons, you need to examine what kind of native
build system it uses. Here are some examples:
* `node-gyp`
* `node-gyp-builder`
* `node-pre-gyp`
After you have identified the correct system, you need to override your package
expression while adding in build system as a build input. For example, `dat`
requires `node-gyp-build`, so [we override](https://github.com/NixOS/nixpkgs/blob/32f5e5da4a1b3f0595527f5195ac3a91451e9b56/pkgs/development/node-packages/default.nix#L37-L40) its expression in [`default.nix`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/node-packages/default.nix):
```nix
dat = super.dat.override {
buildInputs = [ self.node-gyp-build pkgs.libtool pkgs.autoconf pkgs.automake ];
meta.broken = since "12";
};
```
To add a package from NPM to nixpkgs:
1. Modify `pkgs/development/node-packages/node-packages.json` to add, update
or remove package entries to have it included in `nodePackages` and
`nodePackages_latest`.
2. Run the script: `cd pkgs/development/node-packages && ./generate.sh`.
3. Build your new package to test your changes:
`cd /path/to/nixpkgs && nix-build -A nodePackages.<new-or-updated-package>`.
To build against the latest stable Current Node.js version (e.g. 14.x):
`nix-build -A nodePackages_latest.<new-or-updated-package>`
4. Add and commit all modified and generated files.
For more information about the generation process, consult the
[README.md](https://github.com/svanderburg/node2nix) file of the `node2nix`
tool.

View file

@ -122,7 +122,7 @@ ImageExifTool = buildPerlPackage {
};
buildInputs = lib.optional stdenv.isDarwin shortenPerlShebang;
postInstall = lib.optional stdenv.isDarwin ''
postInstall = lib.optionalString stdenv.isDarwin ''
shortenPerlShebang $out/bin/exiftool
'';
};

View file

@ -114,6 +114,10 @@ For details, see [Licenses](#sec-meta-license).
A list of the maintainers of this Nix expression. Maintainers are defined in [`nixpkgs/maintainers/maintainer-list.nix`](https://github.com/NixOS/nixpkgs/blob/master/maintainers/maintainer-list.nix). There is no restriction to becoming a maintainer, just add yourself to that list in a separate commit titled “maintainers: add alice”, and reference maintainers with `maintainers = with lib.maintainers; [ alice bob ]`.
### `mainProgram` {#var-meta-mainProgram}
The name of the main binary for the package. This effects the binary `nix run` executes and falls back to the name of the package. Example: `"rg"`
### `priority` {#var-meta-priority}
The *priority* of the package, used by `nix-env` to resolve file name conflicts between packages. See the Nix manual page for `nix-env` for details. Example: `"10"` (a low-priority package).

View file

@ -56,6 +56,7 @@ rec {
isNone = { kernel = kernels.none; };
isAndroid = [ { abi = abis.android; } { abi = abis.androideabi; } ];
isGnu = with abis; map (a: { abi = a; }) [ gnuabi64 gnu gnueabi gnueabihf ];
isMusl = with abis; map (a: { abi = a; }) [ musl musleabi musleabihf ];
isUClibc = with abis; map (a: { abi = a; }) [ uclibc uclibceabi uclibceabihf ];

View file

@ -233,7 +233,7 @@ rec {
};
};
scaleway-c1 = lib.recursiveUpdate armv7l-hf-multiplatform {
scaleway-c1 = armv7l-hf-multiplatform // {
gcc = {
cpu = "cortex-a9";
fpu = "vfpv3";

View file

@ -3477,6 +3477,12 @@
fingerprint = "2F6C 930F D3C4 7E38 6AFA 4EB4 E23C D2DD 36A4 397F";
}];
};
fabiangd = {
email = "fabian.g.droege@gmail.com";
name = "Fabian G. Dröge";
github = "FabianGD";
githubId = 40316600;
};
fabianhauser = {
email = "fabian.nixos@fh2.ch";
github = "fabianhauser";
@ -4241,6 +4247,16 @@
githubId = 147689;
name = "Hans-Christian Esperer";
};
hdhog = {
name = "Serg Larchenko";
email = "hdhog@hdhog.ru";
github = "hdhog";
githubId = 386666;
keys = [{
longkeyid = "rsa496/952EACB76703BA63";
fingerprint = "A25F 6321 AAB4 4151 4085 9924 952E ACB7 6703 BA63";
}];
};
hectorj = {
email = "hector.jusforgues+nixos@gmail.com";
github = "hectorj";
@ -5352,7 +5368,7 @@
};
juaningan = {
email = "juaningan@gmail.com";
github = "juaningan";
github = "uningan";
githubId = 810075;
name = "Juan Rodal";
};
@ -5662,6 +5678,16 @@
githubId = 148352;
name = "Jim Fowler";
};
kittywitch = {
email = "kat@kittywit.ch";
github = "kittywitch";
githubId = 67870215;
name = "kat witch";
keys = [{
longkeyid = "rsa4096/0x7248991EFA8EFBEE";
fingerprint = "01F5 0A29 D4AA 9117 5A11 BDB1 7248 991E FA8E FBEE";
}];
};
kiwi = {
email = "envy1988@gmail.com";
github = "Kiwi";
@ -6650,6 +6676,16 @@
githubId = 775189;
name = "Jordi Masip";
};
matdsoupe = {
github = "matdsoupe";
githubId = 44469426;
name = "Matheus de Souza Pessanha";
email = "matheus_pessanha2001@outlook.com";
keys = [{
longkeyid = "rsa4096/0x2671964AB1E06A08";
fingerprint = "2F32 CFEF E11A D73B A740 FA47 2671 964A B1E0 6A08";
}];
};
matejc = {
email = "cotman.matej@gmail.com";
github = "matejc";
@ -6856,16 +6892,6 @@
fingerprint = "D709 03C8 0BE9 ACDC 14F0 3BFB 77BF E531 397E DE94";
}];
};
mdsp = {
github = "Mdsp9070";
githubId = 44469426;
name = "Matheus de Souza Pessanha";
email = "matheus_pessanha2001@outlook.com";
keys = [{
longkeyid = "rsa4096/6DFD656220A3B849";
fingerprint = "2D4D 488F 17FB FF75 664E C016 6DFD 6562 20A3 B849";
}];
};
meatcar = {
email = "nixpkgs@denys.me";
github = "meatcar";
@ -11806,6 +11832,12 @@
githubId = 26011724;
name = "Burim Augustin Berisa";
};
yl3dy = {
email = "aleksandr.kiselyov@gmail.com";
github = "yl3dy";
githubId = 1311192;
name = "Alexander Kiselyov";
};
yochai = {
email = "yochai@titat.info";
github = "yochai";
@ -12316,4 +12348,10 @@
github = "zupo";
githubId = 311580;
};
rski = {
name = "rski";
email = "rom.skiad+nix@gmail.com";
github = "rski";
githubId = 2960312;
};
}

View file

@ -182,6 +182,16 @@
</para>
</listitem>
</itemizedlist>
<itemizedlist spacing="compact">
<listitem>
<para>
<link xlink:href="https://docs.fluidd.xyz/">fluidd</link>, a
Klipper web interface for managing 3d printers using
moonraker. Available as
<link linkend="opt-services.fluidd.enable">fluidd</link>.
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="sec-release-21.11-incompatibilities">
<title>Backward Incompatibilities</title>
@ -273,7 +283,7 @@ Superuser created successfully.
<listitem>
<para>
The <literal>staticjinja</literal> package has been upgraded
from 1.0.4 to 3.0.1
from 1.0.4 to 4.1.0
</para>
</listitem>
<listitem>
@ -779,6 +789,16 @@ Superuser created successfully.
group.
</para>
</listitem>
<listitem>
<para>
The fontconfig services dpi option has been removed.
Fontconfig should use Xft settings by default so theres no
need to override one value in multiple places. The user can
set DPI via ~/.Xresources properly, or at the system level per
monitor, or as a last resort at the system level with
<literal>services.xserver.dpi</literal>.
</para>
</listitem>
<listitem>
<para>
The <literal>yambar</literal> package has been split into
@ -870,6 +890,14 @@ Superuser created successfully.
New In Python 3.9 post</link> for more information.
</para>
</listitem>
<listitem>
<para>
<literal>qtile</literal> hase been updated from
<quote>0.16.0</quote> to <quote>0.18.0</quote>, please check
<link xlink:href="https://github.com/qtile/qtile/blob/master/CHANGELOG">qtile
changelog</link> for changes.
</para>
</listitem>
<listitem>
<para>
The <literal>claws-mail</literal> package now references the

View file

@ -56,6 +56,8 @@ pt-services.clipcat.enable).
* [navidrome](https://www.navidrome.org/), a personal music streaming server with
subsonic-compatible api. Available as [navidrome](#opt-services.navidrome.enable).
- [fluidd](https://docs.fluidd.xyz/), a Klipper web interface for managing 3d printers using moonraker. Available as [fluidd](#opt-services.fluidd.enable).
## Backward Incompatibilities {#sec-release-21.11-incompatibilities}
- The `paperless` module and package have been removed. All users should migrate to the
@ -105,7 +107,7 @@ subsonic-compatible api. Available as [navidrome](#opt-services.navidrome.enable
Superuser created successfully.
```
- The `staticjinja` package has been upgraded from 1.0.4 to 3.0.1
- The `staticjinja` package has been upgraded from 1.0.4 to 4.1.0
- The `erigon` ethereum node has moved to a new database format in `2021-05-04`, and requires a full resync
@ -223,6 +225,10 @@ subsonic-compatible api. Available as [navidrome](#opt-services.navidrome.enable
- The `openrazer` and `openrazer-daemon` packages as well as the `hardware.openrazer` module now require users to be members of the `openrazer` group instead of `plugdev`. With this change, users no longer need be granted the entire set of `plugdev` group permissions, which can include permissions other than those required by `openrazer`. This is desirable from a security point of view. The setting [`harware.openrazer.users`](options.html#opt-services.hardware.openrazer.users) can be used to add users to the `openrazer` group.
- The fontconfig service's dpi option has been removed.
Fontconfig should use Xft settings by default so there's no need to override one value in multiple places.
The user can set DPI via ~/.Xresources properly, or at the system level per monitor, or as a last resort at the system level with `services.xserver.dpi`.
- The `yambar` package has been split into `yambar` and `yambar-wayland`, corresponding to the xorg and wayland backend respectively. Please switch to `yambar-wayland` if you are on wayland.
- The `services.minio` module gained an additional option `consoleAddress`, that
@ -250,6 +256,8 @@ To be able to access the web UI this port needs to be opened in the firewall.
- `python3` now defaults to Python 3.9. Python 3.9 introduces many deprecation warnings, please look at the [What's New In Python 3.9 post](https://docs.python.org/3/whatsnew/3.9.html) for more information.
- `qtile` hase been updated from '0.16.0' to '0.18.0', please check [qtile changelog](https://github.com/qtile/qtile/blob/master/CHANGELOG) for changes.
- The `claws-mail` package now references the new GTK+ 3 release branch, major version 4. To use the GTK+ 2 releases, one can install the `claws-mail-gtk2` package.
- The wordpress module provides a new interface which allows to use different webservers with the new option [`services.wordpress.webserver`](options.html#opt-services.wordpress.webserver). Currently `httpd` and `nginx` are supported. The definitions of wordpress sites should now be set in [`services.wordpress.sites`](options.html#opt-services.wordpress.sites).

View file

@ -89,9 +89,7 @@ CHAR_TO_KEY = {
")": "shift-0x0B",
}
# Forward references
log: "Logger"
machines: "List[Machine]"
global log, machines, test_script
def eprint(*args: object, **kwargs: Any) -> None:
@ -103,7 +101,6 @@ def make_command(args: list) -> str:
def create_vlan(vlan_nr: str) -> Tuple[str, str, "subprocess.Popen[bytes]", Any]:
global log
log.log("starting VDE switch for network {}".format(vlan_nr))
vde_socket = tempfile.mkdtemp(
prefix="nixos-test-vde-", suffix="-vde{}.ctl".format(vlan_nr)
@ -246,6 +243,9 @@ def _perform_ocr_on_screenshot(
class Machine:
def __repr__(self) -> str:
return f"<Machine '{self.name}'>"
def __init__(self, args: Dict[str, Any]) -> None:
if "name" in args:
self.name = args["name"]
@ -910,29 +910,25 @@ class Machine:
def create_machine(args: Dict[str, Any]) -> Machine:
global log
args["log"] = log
return Machine(args)
def start_all() -> None:
global machines
with log.nested("starting all VMs"):
for machine in machines:
machine.start()
def join_all() -> None:
global machines
with log.nested("waiting for all VMs to finish"):
for machine in machines:
machine.wait_for_shutdown()
def run_tests(interactive: bool = False) -> None:
global machines
if interactive:
ptpython.repl.embed(globals(), locals())
ptpython.repl.embed(test_symbols(), {})
else:
test_script()
# TODO: Collect coverage data
@ -942,12 +938,10 @@ def run_tests(interactive: bool = False) -> None:
def serial_stdout_on() -> None:
global log
log._print_serial_logs = True
def serial_stdout_off() -> None:
global log
log._print_serial_logs = False
@ -989,6 +983,39 @@ def subtest(name: str) -> Iterator[None]:
return False
def _test_symbols() -> Dict[str, Any]:
general_symbols = dict(
start_all=start_all,
test_script=globals().get("test_script"), # same
machines=globals().get("machines"), # without being initialized
log=globals().get("log"), # extracting those symbol keys
os=os,
create_machine=create_machine,
subtest=subtest,
run_tests=run_tests,
join_all=join_all,
retry=retry,
serial_stdout_off=serial_stdout_off,
serial_stdout_on=serial_stdout_on,
Machine=Machine, # for typing
)
return general_symbols
def test_symbols() -> Dict[str, Any]:
general_symbols = _test_symbols()
machine_symbols = {m.name: machines[idx] for idx, m in enumerate(machines)}
print(
"additionally exposed symbols:\n "
+ ", ".join(map(lambda m: m.name, machines))
+ ",\n "
+ ", ".join(list(general_symbols.keys()))
)
return {**general_symbols, **machine_symbols}
if __name__ == "__main__":
arg_parser = argparse.ArgumentParser(prog="nixos-test-driver")
arg_parser.add_argument(
@ -1028,12 +1055,9 @@ if __name__ == "__main__":
)
args = arg_parser.parse_args()
global test_script
testscript = pathlib.Path(args.testscript).read_text()
def test_script() -> None:
with log.nested("running the VM test script"):
exec(testscript, globals())
global log, machines, test_script
log = Logger()
@ -1062,6 +1086,11 @@ if __name__ == "__main__":
process.terminate()
log.close()
def test_script() -> None:
with log.nested("running the VM test script"):
symbols = test_symbols() # call eagerly
exec(testscript, symbols, None)
interactive = args.interactive or (not bool(testscript))
tic = time.time()
run_tests(interactive)

View file

@ -42,7 +42,9 @@ rec {
python <<EOF
from pydoc import importfile
with open('driver-symbols', 'w') as fp:
fp.write(','.join(dir(importfile('${testDriverScript}'))))
t = importfile('${testDriverScript}')
test_symbols = t._test_symbols()
fp.write(','.join(test_symbols.keys()))
EOF
'';

View file

@ -78,14 +78,6 @@ let
</edit>
</match>
${optionalString (cfg.dpi != 0) ''
<match target="pattern">
<edit name="dpi" mode="assign">
<double>${toString cfg.dpi}</double>
</edit>
</match>
''}
</fontconfig>
'';
@ -237,6 +229,7 @@ in
(mkRemovedOptionModule [ "fonts" "fontconfig" "hinting" "style" ] "")
(mkRemovedOptionModule [ "fonts" "fontconfig" "forceAutohint" ] "")
(mkRemovedOptionModule [ "fonts" "fontconfig" "renderMonoTTFAsBitmap" ] "")
(mkRemovedOptionModule [ "fonts" "fontconfig" "dpi" ] "Use display server-specific options")
] ++ lib.forEach [ "enable" "substitutions" "preset" ]
(opt: lib.mkRemovedOptionModule [ "fonts" "fontconfig" "ultimate" "${opt}" ] ''
The fonts.fontconfig.ultimate module and configuration is obsolete.
@ -282,15 +275,6 @@ in
'';
};
dpi = mkOption {
type = types.int;
default = 0;
description = ''
Force DPI setting. Setting to <literal>0</literal> disables DPI
forcing; the DPI detected for the display will be used.
'';
};
localConf = mkOption {
type = types.lines;
default = "";

View file

@ -65,42 +65,40 @@ in
};
config = {
environment.etc."pam/environment".text = let
suffixedVariables =
flip mapAttrs cfg.profileRelativeSessionVariables (envVar: suffixes:
flip concatMap cfg.profiles (profile:
map (suffix: "${profile}${suffix}") suffixes
)
);
system.build.pamEnvironment =
let
suffixedVariables =
flip mapAttrs cfg.profileRelativeSessionVariables (envVar: suffixes:
flip concatMap cfg.profiles (profile:
map (suffix: "${profile}${suffix}") suffixes
)
);
# We're trying to use the same syntax for PAM variables and env variables.
# That means we need to map the env variables that people might use to their
# equivalent PAM variable.
replaceEnvVars = replaceStrings ["$HOME" "$USER"] ["@{HOME}" "@{PAM_USER}"];
# We're trying to use the same syntax for PAM variables and env variables.
# That means we need to map the env variables that people might use to their
# equivalent PAM variable.
replaceEnvVars = replaceStrings ["$HOME" "$USER"] ["@{HOME}" "@{PAM_USER}"];
pamVariable = n: v:
''${n} DEFAULT="${concatStringsSep ":" (map replaceEnvVars (toList v))}"'';
pamVariable = n: v:
''${n} DEFAULT="${concatStringsSep ":" (map replaceEnvVars (toList v))}"'';
pamVariables =
concatStringsSep "\n"
(mapAttrsToList pamVariable
(zipAttrsWith (n: concatLists)
[
# Make sure security wrappers are prioritized without polluting
# shell environments with an extra entry. Sessions which depend on
# pam for its environment will otherwise have eg. broken sudo. In
# particular Gnome Shell sometimes fails to source a proper
# environment from a shell.
{ PATH = [ config.security.wrapperDir ]; }
(mapAttrs (n: toList) cfg.sessionVariables)
suffixedVariables
]));
in
pkgs.writeText "pam-environment" "${pamVariables}\n";
pamVariables =
concatStringsSep "\n"
(mapAttrsToList pamVariable
(zipAttrsWith (n: concatLists)
[
# Make sure security wrappers are prioritized without polluting
# shell environments with an extra entry. Sessions which depend on
# pam for its environment will otherwise have eg. broken sudo. In
# particular Gnome Shell sometimes fails to source a proper
# environment from a shell.
{ PATH = [ config.security.wrapperDir ]; }
(mapAttrs (n: toList) cfg.sessionVariables)
suffixedVariables
]));
in ''
${pamVariables}
'';
};
}

View file

@ -62,7 +62,7 @@ in {
zd1211fw
alsa-firmware
sof-firmware
openelec-dvb-firmware
libreelec-dvb-firmware
] ++ optional (pkgs.stdenv.hostPlatform.isAarch32 || pkgs.stdenv.hostPlatform.isAarch64) raspberrypiWirelessFirmware
++ optionals (versionOlder config.boot.kernelPackages.kernel.version "4.13") [
rtl8723bs-firmware

View file

@ -1,4 +0,0 @@
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789A]?", ENV{MTP_NO_PROBE}="1"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789ABCD]?", GROUP+="plugdev"
KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", GROUP+="plugdev"

View file

@ -0,0 +1,18 @@
# UDEV Rules for OnlyKey, https://docs.crp.to/linux.html
ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="60fc", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="60fc", ENV{MTP_NO_PROBE}="1"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="60fc", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="60fc", MODE:="0666"
# The udev rules were updated upstream without an explanation as you can
# see in [this comment][commit]. Assuming that hey have changed the
# idVendor/idProduct, I've kept the old values.
# TODO: Contact them upstream.
#
# [commit]: https://github.com/trustcrypto/trustcrypto.github.io/commit/0bcf928adaea559e75efa02ebd1040f0a15f611d
#
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789A]?", ENV{MTP_NO_PROBE}="1"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789ABCD]?", GROUP+="plugdev"
KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", GROUP+="plugdev"

View file

@ -72,7 +72,7 @@
./hardware/tuxedo-keyboard.nix
./hardware/ubertooth.nix
./hardware/usb-wwan.nix
./hardware/onlykey.nix
./hardware/onlykey/default.nix
./hardware/opentabletdriver.nix
./hardware/sata.nix
./hardware/wooting.nix
@ -767,6 +767,7 @@
./services/networking/namecoind.nix
./services/networking/nar-serve.nix
./services/networking/nat.nix
./services/networking/nats.nix
./services/networking/ndppd.nix
./services/networking/nebula.nix
./services/networking/networkmanager.nix
@ -952,6 +953,7 @@
./services/web-apps/documize.nix
./services/web-apps/dokuwiki.nix
./services/web-apps/engelsystem.nix
./services/web-apps/fluidd.nix
./services/web-apps/galene.nix
./services/web-apps/gerrit.nix
./services/web-apps/gotify-server.nix
@ -995,7 +997,7 @@
./services/web-apps/youtrack.nix
./services/web-apps/zabbix.nix
./services/web-servers/apache-httpd/default.nix
./services/web-servers/caddy.nix
./services/web-servers/caddy/default.nix
./services/web-servers/darkhttpd.nix
./services/web-servers/fcgiwrap.nix
./services/web-servers/hitch/default.nix

View file

@ -9,7 +9,7 @@ with lib;
boot.vesa = false;
# Don't start a tty on the serial consoles.
systemd.services."serial-getty@ttyS0".enable = false;
systemd.services."serial-getty@ttyS0".enable = lib.mkDefault false;
systemd.services."serial-getty@hvc0".enable = false;
systemd.services."getty@tty1".enable = false;
systemd.services."autovt@".enable = false;

View file

@ -475,7 +475,7 @@ let
# Session management.
${optionalString cfg.setEnvironment ''
session required pam_env.so conffile=${config.system.build.pamEnvironment} readenv=0
session required pam_env.so conffile=/etc/pam/environment readenv=0
''}
session required pam_unix.so
${optionalString cfg.setLoginUid

View file

@ -467,10 +467,6 @@ in
];
assertions = [
{
assertion = intersectLists cfg.protocols [ "pop3" "imap" ] != [];
message = "dovecot needs at least one of the IMAP or POP3 listeners enabled";
}
{
assertion = (cfg.sslServerCert == null) == (cfg.sslServerKey == null)
&& (cfg.sslCACert != null -> !(cfg.sslServerCert == null || cfg.sslServerKey == null));

View file

@ -0,0 +1,159 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.nats;
format = pkgs.formats.json { };
configFile = format.generate "nats.conf" cfg.settings;
in {
### Interface
options = {
services.nats = {
enable = mkEnableOption "NATS messaging system";
user = mkOption {
type = types.str;
default = "nats";
description = "User account under which NATS runs.";
};
group = mkOption {
type = types.str;
default = "nats";
description = "Group under which NATS runs.";
};
serverName = mkOption {
default = "nats";
example = "n1-c3";
type = types.str;
description = ''
Name of the NATS server, must be unique if clustered.
'';
};
jetstream = mkEnableOption "JetStream";
port = mkOption {
default = 4222;
example = 4222;
type = types.port;
description = ''
Port on which to listen.
'';
};
dataDir = mkOption {
default = "/var/lib/nats";
type = types.path;
description = ''
The NATS data directory. Only used if JetStream is enabled, for
storing stream metadata and messages.
If left as the default value this directory will automatically be
created before the NATS server starts, otherwise the sysadmin is
responsible for ensuring the directory exists with appropriate
ownership and permissions.
'';
};
settings = mkOption {
default = { };
type = format.type;
example = literalExample ''
{
jetstream = {
max_mem = "1G";
max_file = "10G";
};
};
'';
description = ''
Declarative NATS configuration. See the
<link xlink:href="https://docs.nats.io/nats-server/configuration">
NATS documentation</link> for a list of options.
'';
};
};
};
### Implementation
config = mkIf cfg.enable {
services.nats.settings = {
server_name = cfg.serverName;
port = cfg.port;
jetstream = optionalAttrs cfg.jetstream { store_dir = cfg.dataDir; };
};
systemd.services.nats = {
description = "NATS messaging system";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = mkMerge [
(mkIf (cfg.dataDir == "/var/lib/nats") {
StateDirectory = "nats";
StateDirectoryMode = "0750";
})
{
Type = "simple";
ExecStart = "${pkgs.nats-server}/bin/nats-server -c ${configFile}";
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
ExecStop = "${pkgs.coreutils}/bin/kill -SIGINT $MAINPID";
Restart = "on-failure";
User = cfg.user;
Group = cfg.group;
# Hardening
CapabilityBoundingSet = "";
LimitNOFILE = 800000; # JetStream requires 2 FDs open per stream.
LockPersonality = true;
MemoryDenyWriteExecute = true;
NoNewPrivileges = true;
PrivateDevices = true;
PrivateTmp = true;
PrivateUsers = true;
ProcSubset = "pid";
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
ProtectSystem = "strict";
ReadOnlyPaths = [ ];
ReadWritePaths = [ cfg.dataDir ];
RestrictAddressFamilies = [ "AF_INET" "AF_INET6" ];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallFilter = [ "@system-service" "~@privileged" "~@resources" ];
UMask = "0077";
}
];
};
users.users = mkIf (cfg.user == "nats") {
nats = {
description = "NATS daemon user";
isSystemUser = true;
group = cfg.group;
home = cfg.dataDir;
};
};
users.groups = mkIf (cfg.group == "nats") { nats = { }; };
};
}

View file

@ -25,7 +25,7 @@ with lib;
Either <literal>configFile</literal> or <literal>config</literal> must be specified.
See <link xlink:href="https://v2ray.com/en/configuration/overview.html"/>.
See <link xlink:href="https://www.v2fly.org/en_US/config/overview.html"/>.
'';
};
@ -47,7 +47,7 @@ with lib;
Either `configFile` or `config` must be specified.
See <link xlink:href="https://v2ray.com/en/configuration/overview.html"/>.
See <link xlink:href="https://www.v2fly.org/en_US/config/overview.html"/>.
'';
};
};

View file

@ -149,7 +149,7 @@ in {
package = mkOption {
type = types.package;
example = literalExample "pkgs.deluge-1_x";
example = literalExample "pkgs.deluge-2_x";
description = ''
Deluge package to use.
'';
@ -184,6 +184,13 @@ in {
if versionAtLeast config.system.stateVersion "20.09" then
pkgs.deluge-2_x
else
# deluge-1_x is no longer packaged and this will resolve to an error
# thanks to the alias for this name. This is left here so that anyone
# using NixOS older than 20.09 receives that error when they upgrade
# and is forced to make an intentional choice to switch to deluge-2_x.
# That might be slightly inconvenient but there is no path to
# downgrade from 2.x to 1.x so NixOS should not automatically perform
# this state migration.
pkgs.deluge-1_x
);

View file

@ -82,7 +82,7 @@ in {
auth required pam_unix.so nullok
account required pam_unix.so
session required pam_unix.so
session required pam_env.so conffile=${config.system.build.pamEnvironment} readenv=0
session required pam_env.so conffile=/etc/pam/environment readenv=0
session required ${pkgs.systemd}/lib/security/pam_systemd.so
'';

View file

@ -0,0 +1,64 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.fluidd;
moonraker = config.services.moonraker;
in
{
options.services.fluidd = {
enable = mkEnableOption "Fluidd, a Klipper web interface for managing your 3d printer";
package = mkOption {
type = types.package;
description = "Fluidd package to be used in the module";
default = pkgs.fluidd;
defaultText = "pkgs.fluidd";
};
hostName = mkOption {
type = types.str;
default = "localhost";
description = "Hostname to serve fluidd on";
};
nginx = mkOption {
type = types.submodule
(import ../web-servers/nginx/vhost-options.nix { inherit config lib; });
default = { };
example = {
serverAliases = [ "fluidd.\${config.networking.domain}" ];
};
description = "Extra configuration for the nginx virtual host of fluidd.";
};
};
config = mkIf cfg.enable {
services.nginx = {
enable = true;
upstreams.fluidd-apiserver.servers."${moonraker.address}:${toString moonraker.port}" = { };
virtualHosts."${cfg.hostName}" = mkMerge [
cfg.nginx
{
root = mkForce "${cfg.package}/share/fluidd/htdocs";
locations = {
"/" = {
index = "index.html";
tryFiles = "$uri $uri/ /index.html";
};
"/index.html".extraConfig = ''
add_header Cache-Control "no-store, no-cache, must-revalidate";
'';
"/websocket" = {
proxyWebsockets = true;
proxyPass = "http://fluidd-apiserver/websocket";
};
"~ ^/(printer|api|access|machine|server)/" = {
proxyWebsockets = true;
proxyPass = "http://fluidd-apiserver$request_uri";
};
};
}
];
};
};
}

View file

@ -56,7 +56,7 @@ let
mysqlLocal = cfg.database.createLocally && cfg.database.type == "mysql";
pgsqlLocal = cfg.database.createLocally && cfg.database.type == "pgsql";
phpExt = pkgs.php.withExtensions
phpExt = pkgs.php74.withExtensions
({ enabled, all }: with all; [ iconv mbstring curl openssl tokenizer xmlrpc soap ctype zip gd simplexml dom intl json sqlite3 pgsql pdo_sqlite pdo_pgsql pdo_odbc pdo_mysql pdo mysqli session zlib xmlreader fileinfo filter ]);
in
{

View file

@ -36,11 +36,12 @@ let
dependentCertNames = unique (map (hostOpts: hostOpts.certName) acmeEnabledVhosts);
mkListenInfo = hostOpts:
if hostOpts.listen != [] then hostOpts.listen
else (
optional (hostOpts.onlySSL || hostOpts.addSSL || hostOpts.forceSSL) { ip = "*"; port = 443; ssl = true; } ++
optional (!hostOpts.onlySSL) { ip = "*"; port = 80; ssl = false; }
);
if hostOpts.listen != [] then
hostOpts.listen
else
optionals (hostOpts.onlySSL || hostOpts.addSSL || hostOpts.forceSSL) (map (addr: { ip = addr; port = 443; ssl = true; }) hostOpts.listenAddresses) ++
optionals (!hostOpts.onlySSL) (map (addr: { ip = addr; port = 80; ssl = false; }) hostOpts.listenAddresses)
;
listenInfo = unique (concatMap mkListenInfo vhosts);

View file

@ -47,12 +47,29 @@ in
];
description = ''
Listen addresses and ports for this virtual host.
<note><para>
<note>
<para>
This option overrides <literal>addSSL</literal>, <literal>forceSSL</literal> and <literal>onlySSL</literal>.
</para></note>
</para>
<para>
If you only want to set the addresses manually and not the ports, take a look at <literal>listenAddresses</literal>.
</para>
</note>
'';
};
listenAddresses = mkOption {
type = with types; nonEmptyListOf str;
description = ''
Listen addresses for this virtual host.
Compared to <literal>listen</literal> this only sets the addreses
and the ports are chosen automatically.
'';
default = [ "*" ];
example = [ "127.0.0.1" ];
};
enableSSL = mkOption {
type = types.bool;
visible = false;

View file

@ -4,7 +4,17 @@ with lib;
let
cfg = config.services.caddy;
configFile = pkgs.writeText "Caddyfile" cfg.config;
vhostToConfig = vhostName: vhostAttrs: ''
${vhostName} ${builtins.concatStringsSep " " vhostAttrs.serverAliases} {
${vhostAttrs.extraConfig}
}
'';
configFile = pkgs.writeText "Caddyfile" (builtins.concatStringsSep "\n"
([ cfg.config ] ++ (mapAttrsToList vhostToConfig cfg.virtualHosts)));
formattedConfig = pkgs.runCommand "formattedCaddyFile" { } ''
${cfg.package}/bin/caddy fmt ${configFile} > $out
'';
tlsConfig = {
apps.tls.automation.policies = [{
@ -17,7 +27,7 @@ let
adaptedConfig = pkgs.runCommand "caddy-config-adapted.json" { } ''
${cfg.package}/bin/caddy adapt \
--config ${configFile} --adapter ${cfg.adapter} > $out
--config ${formattedConfig} --adapter ${cfg.adapter} > $out
'';
tlsJSON = pkgs.writeText "tls.json" (builtins.toJSON tlsConfig);
@ -68,6 +78,27 @@ in
'';
};
virtualHosts = mkOption {
type = types.attrsOf (types.submodule (import ./vhost-options.nix {
inherit config lib;
}));
default = { };
example = literalExample ''
{
"hydra.example.com" = {
serverAliases = [ "www.hydra.example.com" ];
extraConfig = ''''''
encode gzip
log
root /srv/http
'''''';
};
};
'';
description = "Declarative vhost config";
};
user = mkOption {
default = "caddy";
type = types.str;

View file

@ -0,0 +1,28 @@
# This file defines the options that can be used both for the Nginx
# main server configuration, and for the virtual hosts. (The latter
# has additional options that affect the web server as a whole, like
# the user/group to run under.)
{ lib, ... }:
with lib;
{
options = {
serverAliases = mkOption {
type = types.listOf types.str;
default = [ ];
example = [ "www.example.org" "example.org" ];
description = ''
Additional names of virtual hosts served by this virtual host configuration.
'';
};
extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
These lines go into the vhost verbatim
'';
};
};
}

View file

@ -18,7 +18,6 @@ let
fontconfig = config.fonts.fontconfig;
xresourcesXft = pkgs.writeText "Xresources-Xft" ''
${optionalString (fontconfig.dpi != 0) ''Xft.dpi: ${toString fontconfig.dpi}''}
Xft.antialias: ${if fontconfig.antialias then "1" else "0"}
Xft.rgba: ${fontconfig.subpixel.rgba}
Xft.lcdfilter: lcd${fontconfig.subpixel.lcdfilter}

View file

@ -314,7 +314,7 @@ in
password required pam_deny.so
session required pam_succeed_if.so audit quiet_success user = gdm
session required pam_env.so conffile=${config.system.build.pamEnvironment} readenv=0
session required pam_env.so conffile=/etc/pam/environment readenv=0
session optional ${pkgs.systemd}/lib/security/pam_systemd.so
session optional pam_keyinit.so force revoke
session optional pam_permit.so

View file

@ -284,7 +284,7 @@ in
password required pam_deny.so
session required pam_succeed_if.so audit quiet_success user = lightdm
session required pam_env.so conffile=${config.system.build.pamEnvironment} readenv=0
session required pam_env.so conffile=/etc/pam/environment readenv=0
session optional ${pkgs.systemd}/lib/security/pam_systemd.so
session optional pam_keyinit.so force revoke
session optional pam_permit.so

View file

@ -229,7 +229,7 @@ in
password required pam_deny.so
session required pam_succeed_if.so audit quiet_success user = sddm
session required pam_env.so conffile=${config.system.build.pamEnvironment} readenv=0
session required pam_env.so conffile=/etc/pam/environment readenv=0
session optional ${pkgs.systemd}/lib/security/pam_systemd.so
session optional pam_keyinit.so force revoke
session optional pam_permit.so

View file

@ -15,7 +15,7 @@ in
services.xserver.windowManager.session = [{
name = "qtile";
start = ''
${pkgs.qtile}/bin/qtile &
${pkgs.qtile}/bin/qtile start &
waitPID=$!
'';
}];

View file

@ -297,7 +297,11 @@ in
dpi = mkOption {
type = types.nullOr types.int;
default = null;
description = "DPI resolution to use for X server.";
description = ''
Force global DPI resolution to use for X server. It's recommended to
use this only when DPI is detected incorrectly; also consider using
<literal>Monitor</literal> section in configuration file instead.
'';
};
updateDbusEnvironment = mkOption {

View file

@ -243,9 +243,13 @@ while (my ($unit, $state) = each %{$activePrev}) {
foreach my $socket (@sockets) {
if (defined $activePrev->{$socket}) {
$unitsToStop{$socket} = 1;
$unitsToStart{$socket} = 1;
recordUnit($startListFile, $socket);
$socketActivated = 1;
# Only restart sockets that actually
# exist in new configuration:
if (-e "$out/etc/systemd/system/$socket") {
$unitsToStart{$socket} = 1;
recordUnit($startListFile, $socket);
$socketActivated = 1;
}
}
}
}

View file

@ -70,7 +70,10 @@ let
# Journal.
"systemd-journald.socket"
"systemd-journald@.socket"
"systemd-journald-varlink@.socket"
"systemd-journald.service"
"systemd-journald@.service"
"systemd-journal-flush.service"
"systemd-journal-catalog-update.service"
] ++ (optional (!config.boot.isContainer) "systemd-journald-audit.socket") ++ [
@ -1181,6 +1184,8 @@ in
systemd.services."user-runtime-dir@".restartIfChanged = false;
systemd.services.systemd-journald.restartTriggers = [ config.environment.etc."systemd/journald.conf".source ];
systemd.services.systemd-journald.stopIfChanged = false;
systemd.services."systemd-journald@".restartTriggers = [ config.environment.etc."systemd/journald.conf".source ];
systemd.services."systemd-journald@".stopIfChanged = false;
systemd.targets.local-fs.unitConfig.X-StopOnReconfiguration = true;
systemd.targets.remote-fs.unitConfig.X-StopOnReconfiguration = true;
systemd.targets.network-online.wantedBy = [ "multi-user.target" ];

View file

@ -18,7 +18,15 @@ let
in
{
imports = [ ../profiles/headless.nix ./ec2-data.nix ./amazon-init.nix ];
imports = [
../profiles/headless.nix
# Note: While we do use the headless profile, we also explicitly
# turn on the serial console on ttyS0 below. This is because
# AWS does support accessing the serial console:
# https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html
./ec2-data.nix
./amazon-init.nix
];
config = {
@ -49,7 +57,7 @@ in
];
boot.initrd.kernelModules = [ "xen-blkfront" "xen-netfront" ];
boot.initrd.availableKernelModules = [ "ixgbevf" "ena" "nvme" ];
boot.kernelParams = mkIf cfg.hvm [ "console=ttyS0" "random.trust_cpu=on" ];
boot.kernelParams = mkIf cfg.hvm [ "console=ttyS0,115200n8" "random.trust_cpu=on" ];
# Prevent the nouveau kernel module from being loaded, as it
# interferes with the nvidia/nvidia-uvm modules needed for CUDA.
@ -63,7 +71,12 @@ in
boot.loader.grub.extraPerEntryConfig = mkIf (!cfg.hvm) "root (hd0)";
boot.loader.grub.efiSupport = cfg.efi;
boot.loader.grub.efiInstallAsRemovable = cfg.efi;
boot.loader.timeout = 0;
boot.loader.timeout = 1;
boot.loader.grub.extraConfig = ''
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal_output console serial
terminal_input console serial
'';
boot.initrd.network.enable = true;
@ -127,15 +140,14 @@ in
copy_bin_and_libs ${pkgs.util-linux}/sbin/swapon
'';
# Don't put old configurations in the GRUB menu. The user has no
# way to select them anyway.
boot.loader.grub.configurationLimit = 0;
# Allow root logins only using the SSH key that the user specified
# at instance creation time.
services.openssh.enable = true;
services.openssh.permitRootLogin = "prohibit-password";
# Enable the serial console on ttyS0
systemd.services."serial-getty@ttyS0".enable = true;
# Creates symlinks for block device names.
services.udev.packages = [ pkgs.ec2-utils ];

View file

@ -136,6 +136,7 @@ in
fish = handleTest ./fish.nix {};
flannel = handleTestOn ["x86_64-linux"] ./flannel.nix {};
fluentd = handleTest ./fluentd.nix {};
fluidd = handleTest ./fluidd.nix {};
fontconfig-default-fonts = handleTest ./fontconfig-default-fonts.nix {};
freeswitch = handleTest ./freeswitch.nix {};
fsck = handleTest ./fsck.nix {};
@ -283,6 +284,7 @@ in
nat.firewall = handleTest ./nat.nix { withFirewall = true; };
nat.firewall-conntrack = handleTest ./nat.nix { withFirewall = true; withConntrackHelpers = true; };
nat.standalone = handleTest ./nat.nix { withFirewall = false; };
nats = handleTest ./nats.nix {};
navidrome = handleTest ./navidrome.nix {};
ncdns = handleTest ./ncdns.nix {};
ndppd = handleTest ./ndppd.nix {};

View file

@ -43,49 +43,64 @@ import ./make-test-python.nix ({ pkgs, ... }: {
}
'';
};
specialisation.multiple-configs.configuration = {
services.caddy.virtualHosts = {
"http://localhost:8080" = { };
"http://localhost:8081" = { };
};
};
};
};
testScript = { nodes, ... }: let
etagSystem = "${nodes.webserver.config.system.build.toplevel}/specialisation/etag";
justReloadSystem = "${nodes.webserver.config.system.build.toplevel}/specialisation/config-reload";
in ''
url = "http://localhost/example.html"
webserver.wait_for_unit("caddy")
webserver.wait_for_open_port("80")
testScript = { nodes, ... }:
let
etagSystem = "${nodes.webserver.config.system.build.toplevel}/specialisation/etag";
justReloadSystem = "${nodes.webserver.config.system.build.toplevel}/specialisation/config-reload";
multipleConfigs = "${nodes.webserver.config.system.build.toplevel}/specialisation/multiple-configs";
in
''
url = "http://localhost/example.html"
webserver.wait_for_unit("caddy")
webserver.wait_for_open_port("80")
def check_etag(url):
etag = webserver.succeed(
"curl --fail -v '{}' 2>&1 | sed -n -e \"s/^< [Ee][Tt][Aa][Gg]: *//p\"".format(
url
def check_etag(url):
etag = webserver.succeed(
"curl --fail -v '{}' 2>&1 | sed -n -e \"s/^< [Ee][Tt][Aa][Gg]: *//p\"".format(
url
)
)
)
etag = etag.replace("\r\n", " ")
http_code = webserver.succeed(
"curl --fail --silent --show-error -o /dev/null -w \"%{{http_code}}\" --head -H 'If-None-Match: {}' {}".format(
etag, url
etag = etag.replace("\r\n", " ")
http_code = webserver.succeed(
"curl --fail --silent --show-error -o /dev/null -w \"%{{http_code}}\" --head -H 'If-None-Match: {}' {}".format(
etag, url
)
)
)
assert int(http_code) == 304, "HTTP code is {}, expected 304".format(http_code)
return etag
assert int(http_code) == 304, "HTTP code is {}, expected 304".format(http_code)
return etag
with subtest("check ETag if serving Nix store paths"):
old_etag = check_etag(url)
webserver.succeed(
"${etagSystem}/bin/switch-to-configuration test >&2"
)
webserver.sleep(1)
new_etag = check_etag(url)
assert old_etag != new_etag, "Old ETag {} is the same as {}".format(
old_etag, new_etag
)
with subtest("check ETag if serving Nix store paths"):
old_etag = check_etag(url)
webserver.succeed(
"${etagSystem}/bin/switch-to-configuration test >&2"
)
webserver.sleep(1)
new_etag = check_etag(url)
assert old_etag != new_etag, "Old ETag {} is the same as {}".format(
old_etag, new_etag
)
with subtest("config is reloaded on nixos-rebuild switch"):
webserver.succeed(
"${justReloadSystem}/bin/switch-to-configuration test >&2"
)
webserver.wait_for_open_port("8080")
'';
})
with subtest("config is reloaded on nixos-rebuild switch"):
webserver.succeed(
"${justReloadSystem}/bin/switch-to-configuration test >&2"
)
webserver.wait_for_open_port("8080")
with subtest("multiple configs are correctly merged"):
webserver.succeed(
"${multipleConfigs}/bin/switch-to-configuration test >&2"
)
webserver.wait_for_open_port("8080")
webserver.wait_for_open_port("8081")
'';
})

View file

@ -23,6 +23,7 @@ with pkgs.lib;
testScript = ''
import os
import subprocess
import tempfile
image_dir = os.path.join(
os.environ.get("TMPDIR", tempfile.gettempdir()), "tmp", "vm-state-machine"

View file

@ -5,41 +5,6 @@ import ./make-test-python.nix ({ pkgs, ...} : {
};
nodes = {
simple1 = {
services.deluge = {
enable = true;
package = pkgs.deluge-1_x;
web = {
enable = true;
openFirewall = true;
};
};
};
declarative1 = {
services.deluge = {
enable = true;
package = pkgs.deluge-1_x;
openFirewall = true;
declarative = true;
config = {
allow_remote = true;
download_location = "/var/lib/deluge/my-download";
daemon_port = 58846;
listen_ports = [ 6881 6889 ];
};
web = {
enable = true;
port = 3142;
};
authFile = pkgs.writeText "deluge-auth" ''
localclient:a7bef72a890:10
andrew:password:10
user3:anotherpass:5
'';
};
};
simple2 = {
services.deluge = {
enable = true;

View file

@ -0,0 +1,21 @@
import ./make-test-python.nix ({ lib, ... }:
with lib;
{
name = "fluidd";
meta.maintainers = with maintainers; [ vtuan10 ];
nodes.machine = { pkgs, ... }: {
services.fluidd = {
enable = true;
};
};
testScript = ''
machine.start()
machine.wait_for_unit("nginx.service")
machine.wait_for_open_port(80)
machine.succeed("curl -sSfL http://localhost/ | grep 'fluidd'")
'';
})

View file

@ -0,0 +1,65 @@
let
port = 4222;
username = "client";
password = "password";
topic = "foo.bar";
in import ./make-test-python.nix ({ pkgs, lib, ... }: {
name = "nats";
meta = with pkgs.lib; { maintainers = with maintainers; [ c0deaddict ]; };
nodes = let
client = { pkgs, ... }: {
environment.systemPackages = with pkgs; [ natscli ];
};
in {
server = { pkgs, ... }: {
networking.firewall.allowedTCPPorts = [ port ];
services.nats = {
inherit port;
enable = true;
settings = {
authorization = {
users = [{
user = username;
inherit password;
}];
};
};
};
};
client1 = client;
client2 = client;
};
testScript = let file = "/tmp/msg";
in ''
def nats_cmd(*args):
return (
"nats "
"--server=nats://server:${toString port} "
"--user=${username} "
"--password=${password} "
"{}"
).format(" ".join(args))
start_all()
server.wait_for_unit("nats.service")
client1.fail("test -f ${file}")
# Subscribe on topic on client1 and echo messages to file.
client1.execute("({} | tee ${file} &)".format(nats_cmd("sub", "--raw", "${topic}")))
# Give client1 some time to subscribe.
client1.execute("sleep 2")
# Publish message on client2.
client2.execute(nats_cmd("pub", "${topic}", "hello"))
# Check if message has been received.
client1.succeed("grep -q hello ${file}")
'';
})

View file

@ -85,6 +85,7 @@ in import ./make-test-python.nix ({ pkgs, ...} : {
self = clientv4 if type == 4 else clientv6
out = self.succeed(f"host -{type} -t {rr} {query}").rstrip()
self.log(f"output: {out}")
import re
assert re.search(
expected, out
), f"DNS IPv{type} query on {query} gave '{out}' instead of '{expected}'"

View file

@ -61,6 +61,7 @@ let
with subtest("Postgresql survives restart (bug #1735)"):
machine.shutdown()
import time
time.sleep(2)
machine.start()
machine.wait_for_unit("postgresql")

View file

@ -10,6 +10,7 @@ import ./make-test-python.nix ({ pkgs, ... }: {
];
services.xserver.enable = true;
sound.enable = true;
environment.systemPackages = [ pkgs.shattered-pixel-dungeon ];
};

View file

@ -57,6 +57,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
else:
if check_success():
return
import time
time.sleep(retry_sleep)
if not check_success():

View file

@ -1,13 +1,13 @@
{ stdenv, lib, fetchFromGitHub, faust2jaqt, faust2lv2 }:
stdenv.mkDerivation rec {
pname = "faustPhysicalModeling";
version = "2.20.2";
version = "2.30.5";
src = fetchFromGitHub {
owner = "grame-cncm";
repo = "faust";
rev = version;
sha256 = "1mm93ba26b7q69hvabzalg30dh8pl858nj4m2bb57pznnp09lq9a";
sha256 = "sha256-hfpMeUhv6FC9lnPCfdWnAFCaKiteplyrS/o3Lf7cQY4=";
};
buildInputs = [ faust2jaqt faust2lv2 ];

View file

@ -1,12 +1,14 @@
{ lib, fetchurl, pythonPackages, mopidy }:
{ lib, fetchFromGitHub, pythonPackages, mopidy }:
pythonPackages.buildPythonApplication rec {
pname = "mopidy-spotify";
version = "4.1.1";
src = fetchurl {
url = "https://github.com/mopidy/mopidy-spotify/archive/v${version}.tar.gz";
sha256 = "0054gqvnx3brpfxr06dcby0z0dirwv9ydi6gj5iz0cxn0fbi6gv2";
src = fetchFromGitHub {
owner = "mopidy";
repo = "mopidy-spotify";
rev = "v${version}";
sha256 = "1qsac2yy26cdlsmxd523v8ayacs0s6jj9x79sngwap781i63zqrm";
};
propagatedBuildInputs = [ mopidy pythonPackages.pyspotify ];
@ -17,7 +19,7 @@ pythonPackages.buildPythonApplication rec {
homepage = "https://www.mopidy.com/";
description = "Mopidy extension for playing music from Spotify";
license = licenses.asl20;
maintainers = [];
hydraPlatforms = [];
maintainers = with maintainers; [ rski ];
hydraPlatforms = [ ];
};
}

View file

@ -1,30 +1,52 @@
{ lib, stdenv
{ lib
, stdenv
, fetchurl
, makeWrapper
, alsa-lib
, pkg-config
, perl
, withConplay ? !stdenv.targetPlatform.isWindows
, withAlsa ? stdenv.hostPlatform.isLinux
, alsa-lib
, withPulse ? stdenv.hostPlatform.isLinux
, libpulseaudio
, withCoreAudio ? stdenv.hostPlatform.isDarwin
, AudioUnit
, AudioToolbox
, withJack ? stdenv.hostPlatform.isUnix
, jack
, withConplay ? !stdenv.hostPlatform.isWindows
}:
stdenv.mkDerivation rec {
pname = "mpg123";
version = "1.26.5";
version = "1.28.2";
src = fetchurl {
url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.bz2";
sha256 = "sha256-UCqX4Nk1vn432YczgCHY8wG641wohPKoPVnEtSRm7wY=";
sha256 = "006v44nz4nkpgvxz1k2vbbrfpa2m47hyydscs0wf3iysiyvd9vvy";
};
outputs = [ "out" ] ++ lib.optionals withConplay [ "conplay" ];
nativeBuildInputs = lib.optionals withConplay [ makeWrapper ];
nativeBuildInputs = lib.optionals withConplay [ makeWrapper ]
++ lib.optionals (withPulse || withJack) [ pkg-config ];
buildInputs = lib.optionals withConplay [ perl ]
++ lib.optionals (!stdenv.isDarwin && !stdenv.targetPlatform.isWindows) [ alsa-lib ];
++ lib.optionals withAlsa [ alsa-lib ]
++ lib.optionals withPulse [ libpulseaudio ]
++ lib.optionals withCoreAudio [ AudioUnit AudioToolbox ]
++ lib.optionals withJack [ jack ];
configureFlags = lib.optional
(stdenv.hostPlatform ? mpg123)
"--with-cpu=${stdenv.hostPlatform.mpg123.cpu}";
configureFlags = [
"--with-audio=${lib.strings.concatStringsSep "," (
lib.optional withJack "jack"
++ lib.optional withPulse "pulse"
++ lib.optional withAlsa "alsa"
++ lib.optional withCoreAudio "coreaudio"
++ [ "dummy" ]
)}"
] ++ lib.optional (stdenv.hostPlatform ? mpg123) "--with-cpu=${stdenv.hostPlatform.mpg123.cpu}";
enableParallelBuilding = true;
postInstall = lib.optionalString withConplay ''
mkdir -p $conplay/bin
@ -43,8 +65,8 @@ stdenv.mkDerivation rec {
meta = with lib; {
description = "Fast console MPEG Audio Player and decoder library";
homepage = "https://mpg123.org";
license = licenses.lgpl21;
maintainers = [ maintainers.ftrvxmtrx ];
license = licenses.lgpl21Only;
maintainers = with maintainers; [ ftrvxmtrx ];
platforms = platforms.all;
};
}

View file

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "praat";
version = "6.1.50";
version = "6.1.51";
src = fetchFromGitHub {
owner = "praat";
repo = "praat";
rev = "v${version}";
sha256 = "11cw4292pml71hdnfy8y91blwyh45dyam1ywr09355zk44c5njpq";
sha256 = "sha256-4goZRNKNFrfKRbGODJMhN6DyOh8U3+nWRDF1VMT7I1E=";
};
configurePhase = ''

View file

@ -16,13 +16,13 @@
stdenv.mkDerivation rec {
pname = "sidplayfp";
version = "2.2.0";
version = "2.2.1";
src = fetchFromGitHub {
owner = "libsidplayfp";
repo = "sidplayfp";
rev = "v${version}";
sha256 = "sha256-hN7225lhuYyo4wPDiiEc9FaPg90pZ13mLw93V8tb/P0=";
sha256 = "sha256-IlPZmZpWxMaArkRnqu6JCGxiHU7JczRxiySqzAopfxc=";
};
nativeBuildInputs = [ autoreconfHook perl pkg-config ];

View file

@ -9,13 +9,13 @@
mkDerivation rec {
pname = "spotify-qt";
version = "3.6";
version = "3.7";
src = fetchFromGitHub {
owner = "kraxarn";
repo = pname;
rev = "v${version}";
sha256 = "mKHyE6ZffMYYRLMpzMX53chyJyWxhTAaGvtBI3l6wkI=";
sha256 = "sha256-oRrgZtSDebbUVPc+hxE9GJ2n1AmGvZt/2aWrBMmRtNA=";
};
buildInputs = [ libxcb qtbase qtsvg ];

View file

@ -0,0 +1,40 @@
{ stdenv, lib, fetchFromGitHub
, pkg-config, cmake, libyaml
, jansson, libvorbis, taglib
, zlib
}:
stdenv.mkDerivation rec {
pname = "tagutil";
version = "3.1";
src = fetchFromGitHub {
owner = "kaworu";
repo = pname;
rev = "v${version}";
sha256 = "sha256-oY1aGl5CKVtpOfh8Wskio/huWYMiPuxWPqxlooTutcw=";
};
sourceRoot = "source/src";
nativeBuildInputs = [
cmake
pkg-config
];
buildInputs = [
libvorbis
libyaml
jansson
taglib
zlib
];
meta = with lib; {
description = "Scriptable music files tags tool and editor";
homepage = "https://github.com/kaworu/tagutil";
license = licenses.bsd2;
maintainers = with maintainers; [ dan4ik605743 ];
platforms = platforms.linux;
};
}

View file

@ -91,7 +91,7 @@ in stdenv.mkDerivation rec {
# When building with zest GUI, patch plugins
# and standalone executable to properly locate zest
postFixup = lib.optional (guiModule == "zest") ''
postFixup = lib.optionalString (guiModule == "zest") ''
patchelf --set-rpath "${mruby-zest}:$(patchelf --print-rpath "$out/lib/lv2/ZynAddSubFX.lv2/ZynAddSubFX_ui.so")" \
"$out/lib/lv2/ZynAddSubFX.lv2/ZynAddSubFX_ui.so"

View file

@ -8,63 +8,50 @@
, openjdk11
, dpkg
, writeScript
, coreutils
, bash
, tor
, psmisc
, gnutar
, zip
, xz
}:
let
bisq-launcher = writeScript "bisq-launcher" ''
#! ${bash}/bin/bash
# Setup a temporary Tor instance
TMPDIR=$(${coreutils}/bin/mktemp -d)
CONTROLPORT=$(${coreutils}/bin/shuf -i 9100-9499 -n 1)
SOCKSPORT=$(${coreutils}/bin/shuf -i 9500-9999 -n 1)
${coreutils}/bin/head -c 1024 < /dev/urandom > $TMPDIR/cookie
# This is just a comment to convince Nix that Tor is a
# runtime dependency; The Tor binary is in a *.jar file,
# whereas Nix only scans for hashes in uncompressed text.
# ${bisq-tor}
${tor}/bin/tor --SocksPort $SOCKSPORT --ControlPort $CONTROLPORT \
--ControlPortWriteToFile $TMPDIR/port --CookieAuthFile $TMPDIR/cookie \
--CookieAuthentication 1 >$TMPDIR/tor.log --RunAsDaemon 1
JAVA_TOOL_OPTIONS="-XX:+UseG1GC -XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5 -XX:+UseStringDeduplication" bisq-desktop-wrapped "$@"
'';
torpid=$(${psmisc}/bin/fuser $CONTROLPORT/tcp)
bisq-tor = writeScript "bisq-tor" ''
#! ${bash}/bin/bash
echo Temp directory: $TMPDIR
echo Tor PID: $torpid
echo Tor control port: $CONTROLPORT
echo Tor SOCKS port: $SOCKSPORT
echo Tor log: $TMPDIR/tor.log
echo Bisq log file: $TMPDIR/bisq.log
JAVA_TOOL_OPTIONS="-XX:MaxRAM=4g" bisq-desktop-wrapped \
--torControlCookieFile=$TMPDIR/cookie \
--torControlUseSafeCookieAuth \
--torControlPort $CONTROLPORT "$@" > $TMPDIR/bisq.log
echo Bisq exited. Killing Tor...
kill $torpid
exec ${tor}/bin/tor "$@"
'';
in
stdenv.mkDerivation rec {
pname = "bisq-desktop";
version = "1.7.0";
version = "1.7.2";
src = fetchurl {
url = "https://github.com/bisq-network/bisq/releases/download/v${version}/Bisq-64bit-${version}.deb";
sha256 = "0crry5k7crmrqn14wxiyrnhk09ac8a9ksqrwwky7jsnyah0bx5k4";
sha256 = "0b2rh9sphc9wffkawprrl20frgv0rah7y2k5sfxpjc3shgkqsw80";
};
nativeBuildInputs = [ makeWrapper copyDesktopItems dpkg ];
nativeBuildInputs = [ makeWrapper copyDesktopItems imagemagick dpkg gnutar zip xz ];
desktopItems = [
(makeDesktopItem {
name = "Bisq";
exec = "bisq-desktop";
icon = "bisq";
desktopName = "Bisq";
desktopName = "Bisq ${version}";
genericName = "Decentralized bitcoin exchange";
categories = "Network;Utility;";
categories = "Network;P2P;";
})
];
@ -72,6 +59,16 @@ stdenv.mkDerivation rec {
dpkg -x $src .
'';
buildPhase = ''
# Replace the embedded Tor binary (which is in a Tar archive)
# with one from Nixpkgs.
mkdir -p native/linux/x64/
cp ${bisq-tor} ./tor
tar -cJf native/linux/x64/tor.tar.xz tor
zip -r opt/bisq/lib/app/desktop-${version}-all.jar native
'';
installPhase = ''
runHook preInstall
@ -86,13 +83,15 @@ stdenv.mkDerivation rec {
for n in 16 24 32 48 64 96 128 256; do
size=$n"x"$n
${imagemagick}/bin/convert opt/bisq/lib/Bisq.png -resize $size bisq.png
convert opt/bisq/lib/Bisq.png -resize $size bisq.png
install -Dm644 -t $out/share/icons/hicolor/$size/apps bisq.png
done;
runHook postInstall
'';
passthru.updateScript = ./update.sh;
meta = with lib; {
description = "A decentralized bitcoin exchange network";
homepage = "https://bisq.network";

View file

@ -0,0 +1,22 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl jq gnused gnupg common-updater-scripts
set -eu -o pipefail
version="$(curl -s https://api.github.com/repos/bisq-network/bisq/releases| jq '.[] | {name,prerelease} | select(.prerelease==false) | limit(1;.[])' | sed 's/[\"v]//g' | head -n 1)"
depname="Bisq-64bit-$version.deb"
src="https://github.com/bisq-network/bisq/releases/download/v$version/$depname"
signature="$src.asc"
key="CB36 D7D2 EBB2 E35D 9B75 500B CD5D C1C5 29CD FD3B"
pushd $(mktemp -d --suffix=-bisq-updater)
export GNUPGHOME=$PWD/gnupg
mkdir -m 700 -p "$GNUPGHOME"
curl -L -o "$depname" -- "$src"
curl -L -o signature.asc -- "$signature"
gpg --batch --recv-keys "$key"
gpg --batch --verify signature.asc "$depname"
sha256=$(nix-prefetch-url --type sha256 "file://$PWD/$depname")
popd
update-source-version bisq-desktop "$version" "$sha256"

View file

@ -53,7 +53,7 @@ stdenv.mkDerivation rec {
++ optionals withWallet [ db48 sqlite ]
++ optionals withGui [ qrencode qtbase qttools ];
postInstall = optional withGui ''
postInstall = optionalString withGui ''
install -Dm644 ${desktop} $out/share/applications/bitcoin-qt.desktop
substituteInPlace $out/share/applications/bitcoin-qt.desktop --replace "Icon=bitcoin128" "Icon=bitcoin"
install -Dm644 share/pixmaps/bitcoin256.png $out/share/pixmaps/bitcoin.png

View file

@ -4,11 +4,11 @@ cups, vivaldi-ffmpeg-codecs, libpulseaudio, at-spi2-core, libxkbcommon, mesa }:
stdenv.mkDerivation rec {
pname = "exodus";
version = "21.1.29";
version = "21.5.25";
src = fetchurl {
url = "https://downloads.exodus.io/releases/${pname}-linux-x64-${version}.zip";
sha256 = "sha256-Qdiyjutzt8r1tIfcW7/AtSuOpf1Un5TeHoeZx5uQthM=";
sha256 = "sha256-2EIElhQGA0UprPF2pdIfYM9SWYIteD+kH+rupjxCiz4=";
};
sourceRoot = ".";

View file

@ -55,6 +55,6 @@ in buildGoModule rec {
homepage = "https://geth.ethereum.org/";
description = "Official golang implementation of the Ethereum protocol";
license = with licenses; [ lgpl3Plus gpl3Plus ];
maintainers = with maintainers; [ adisbladis lionello xrelkd RaghavSood ];
maintainers = with maintainers; [ adisbladis lionello RaghavSood ];
};
}

View file

@ -44,7 +44,7 @@ rustPlatform.buildRustPackage rec {
description = "Fast, light, robust Ethereum implementation";
homepage = "http://parity.io/ethereum";
license = licenses.gpl3;
maintainers = with maintainers; [ akru xrelkd ];
maintainers = with maintainers; [ akru ];
platforms = lib.platforms.unix;
};
}

View file

@ -7,16 +7,16 @@
}:
rustPlatform.buildRustPackage rec {
pname = "polkadot";
version = "0.9.8";
version = "0.9.9";
src = fetchFromGitHub {
owner = "paritytech";
repo = "polkadot";
rev = "v${version}";
sha256 = "sha256-5PNogoahAZUjIlQsVXwm7j5OmP3/uEEdV0vrIDXXBx8=";
sha256 = "sha256-GsGa2y718qWQlP0pLy8X3mVsFpNNnOTVQZpp4+e1RhA=";
};
cargoSha256 = "0iikys90flzmnnb6l2wzag8mp91p6z9y7rjzym2sd6m7xhgbc1x6";
cargoSha256 = "03lnw61pgp88iwz2gbcp8y3jvz6v94cn0ynjz6snb9jq88gf25dz";
nativeBuildInputs = [ clang ];

View file

@ -1,4 +1,4 @@
{ channel, pname, version, build ? null, sha256Hash }:
{ channel, pname, version, sha256Hash }:
{ alsa-lib
, bash
@ -55,7 +55,7 @@
let
drvName = "android-studio-${channel}-${version}";
filename = "android-studio-" + (if (build != null) then "ide-${build}" else version) + "-linux.tar.gz";
filename = "android-studio-${version}-linux.tar.gz";
androidStudio = stdenv.mkDerivation {
name = "${drvName}-unwrapped";

View file

@ -9,17 +9,16 @@ let
inherit buildFHSUserEnv;
};
stableVersion = {
version = "4.2.2.0"; # "Android Studio 4.2.2"
build = "202.7486908";
sha256Hash = "18zc9xr2xmphj6m6a1ilwripmvqzplp2583afq1pzzz3cv5h8fvk";
version = "2020.3.1.22"; # "Android Studio Arctic Fox (2020.3.1)"
sha256Hash = "0xkjnhq1vvrglcbab90mx5xw1q82lkkvyp6y2ap5jypdfsc7pnsa";
};
betaVersion = {
version = "2020.3.1.21"; # "Android Studio Arctic Fox (2020.3.1) RC 1"
sha256Hash = "04k7c328bl8ixi8bvp2mm33q2hmv40yc9p5dff5cghyycarwpd3f";
};
latestVersion = { # canary & dev
version = "2021.1.1.4"; # "Android Studio Bumblebee (2021.1.1) Canary 4"
sha256Hash = "0s2py7xikzryqrfd9v3in9ia9qv71dd9aad1nzbda6ff61inzizb";
version = "2021.1.1.5"; # "Android Studio Bumblebee (2021.1.1) Canary 5"
sha256Hash = "0fx6nnazg4548rhb11wzaccm5c2si57mj8qwyl5j17x4k5r3m7nh";
};
in {
# Attributes are named by their corresponding release channels

View file

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "bluej";
version = "5.0.1";
version = "5.0.2";
src = fetchurl {
# We use the deb here. First instinct might be to go for the "generic" JAR
# download, but that is actually a graphical installer that is much harder
# to unpack than the deb.
url = "https://www.bluej.org/download/files/BlueJ-linux-${builtins.replaceStrings ["."] [""] version}.deb";
sha256 = "sha256-KhNhJ2xsw1g2yemwP6NQmJvk4cxZAQQNPEUBuLso5qM=";
sha256 = "sha256-9sWfVQF/wCiVDKBmesMpM+5BHjFUPszm6U1SgJNQ8lE=";
};
nativeBuildInputs = [ makeWrapper ];

View file

@ -1,14 +1,15 @@
{ lib, stdenv, fetchurl, emacs }:
stdenv.mkDerivation {
name = "org-mac-link-1.2";
pname = "org-mac-link";
version = "1.2";
src = fetchurl {
url = "https://raw.githubusercontent.com/stuartsierra/org-mode/master/contrib/lisp/org-mac-link.el";
sha256 = "1gkzlfbhg289r1hbqd25szan1wizgk6s99h9xxjip5bjv0jywcx5";
};
phases = [ "buildPhase" "installPhase"];
dontUnpack = true;
buildInputs = [ emacs ];

View file

@ -8,7 +8,7 @@ stdenv.mkDerivation {
sha256 = "0x6qsgs4hm87k0z9q3g4p6508kc3y123j5jayll3jf3lcl2vm6ks";
};
phases = [ "installPhase"];
dontUnpack = true;
installPhase = ''
install -d $out/share/emacs/site-lisp

View file

@ -1,14 +1,15 @@
{ lib, stdenv, fetchurl, emacs }:
stdenv.mkDerivation {
name = "rect-mark-1.4";
pname = "rect-mark";
version = "1.4";
src = fetchurl {
url = "http://emacswiki.org/emacs/download/rect-mark.el";
sha256 = "0pyyg53z9irh5jdfvh2qp4pm8qrml9r7lh42wfmdw6c7f56qryh8";
};
phases = [ "buildPhase" "installPhase"];
dontUnpack = true;
buildInputs = [ emacs ];
@ -18,8 +19,10 @@ stdenv.mkDerivation {
'';
installPhase = ''
runHook preInstall
install -d $out/share/emacs/site-lisp
install rect-mark.el* $out/share/emacs/site-lisp
runHook postInstall
'';
meta = {

View file

@ -1,5 +1,5 @@
{ stdenv, lib, makeDesktopItem, makeWrapper, patchelf, writeText
, coreutils, gnugrep, which, git, unzip, libsecret, libnotify
, coreutils, gnugrep, which, git, unzip, libsecret, libnotify, e2fsprogs
, vmopts ? null
}:
@ -78,7 +78,7 @@ with stdenv; lib.makeOverridable mkDerivation rec {
--prefix PATH : "$out/libexec/${name}:${lib.optionalString (stdenv.isDarwin) "${jdk}/jdk/Contents/Home/bin:"}${lib.makeBinPath [ jdk coreutils gnugrep which git ]}" \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath ([
# Some internals want libstdc++.so.6
stdenv.cc.cc.lib libsecret
stdenv.cc.cc.lib libsecret e2fsprogs
libnotify
] ++ extraLdPath)}" \
--set JDK_HOME "$jdk" \

View file

@ -0,0 +1,73 @@
{ pkgs
, stdenv
, lib
, jre
, fetchFromGitHub
, writeShellScript
, runCommand
, imagemagick
}:
# To test:
# $(nix-build --no-out-link -E 'with import <nixpkgs> {}; jupyter.override { definitions = { clojure = clojupyter.definition; }; }')/bin/jupyter-notebook
let
cljdeps = import ./deps.nix { inherit pkgs; };
classp = cljdeps.makeClasspaths {};
shellScript = writeShellScript "clojupyter" ''
${jre}/bin/java -cp ${classp} clojupyter.kernel.core "$@"
'';
pname = "clojupyter";
version = "0.3.2";
meta = with lib; {
description = "A Jupyter kernel for Clojure";
homepage = "https://github.com/clojupyter/clojupyter";
license = licenses.mit;
maintainers = with maintainers; [ thomasjm ];
platforms = jre.meta.platforms;
};
sizedLogo = size: stdenv.mkDerivation {
name = "clojupyter-logo-${size}x${size}.png";
src = fetchFromGitHub {
owner = "clojupyter";
repo = "clojupyter";
rev = "0.3.2";
sha256 = "1wphc7h74qlm9bcv5f95qhq1rq9gmcm5hvjblb01vffx996vr6jz";
};
buildInputs = [ imagemagick ];
dontConfigure = true;
dontInstall = true;
buildPhase = ''
convert ./resources/clojupyter/assets/logo-64x64.png -resize ${size}x${size} $out
'';
inherit meta;
};
in
rec {
launcher = runCommand "clojupyter" { inherit pname version meta shellScript; } ''
mkdir -p $out/bin
ln -s $shellScript $out/bin/clojupyter
'';
definition = {
displayName = "Clojure";
argv = [
"${launcher}/bin/clojupyter"
"{connection_file}"
];
language = "clojure";
logo32 = sizedLogo "32";
logo64 = sizedLogo "64";
};
}

View file

@ -0,0 +1 @@
{:deps {clojupyter/clojupyter {:mvn/version "0.3.2"}}}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,16 @@
#!/usr/bin/env bash
### To update clj2nix
# $ nix-prefetch-github hlolli clj2nix
nix-shell --run "clj2nix deps.edn deps.nix" -E '
with import ../../../../.. { };
mkShell {
buildInputs = [(callPackage (fetchFromGitHub {
owner = "hlolli";
repo = "clj2nix";
rev = "b9a28d4a920d5d680439b1b0d18a1b2c56d52b04";
sha256 = "0d8xlja62igwg757lab9ablz1nji8cp9p9x3j0ihqvp1y48w2as3";
}) {})];
}
'

View file

@ -14,17 +14,17 @@ let
archive_fmt = if stdenv.isDarwin then "zip" else "tar.gz";
sha256 = {
x86_64-linux = "14j1bss4bqw39ijmyh0kyr5xgzq61bc0if7g94jkvdbngz6fa25f";
x86_64-darwin = "0922r49475j1i8jrx5935bly7cv26hniz9iqf30qj6qs6d8kibci";
aarch64-linux = "11kkys3fsf4a4hvqv524fkdl686addd3ygzz0mav09xh8wjqbisw";
aarch64-darwin = "1xk56ww2ndksi6sqnr42zcqx2fl52aip3jb4fmdmqg1cvllfx0sd";
armv7l-linux = "1jiyjknl2xxivifixcwvyi6qsq7kr71gbalzdj6xca2i6pc1gbvp";
x86_64-linux = "0i2pngrp2pcas99wkay7ahrcn3gl47gdjjaq7ladr879ypldh24v";
x86_64-darwin = "1pni2cd5s6m9jxwpja4ma9xlr1q3xl46w8pim3971dw3xi5r29pg";
aarch64-linux = "0j71ha2df99583w8r2l1hppn6wx8ll80flwcj5xzj7icv3mq8x7v";
aarch64-darwin = "0vhp1z890mvs8hnwf43bfv74a7y0pv5crjn53rbiy0il1ihs1498";
armv7l-linux = "07yb0ia1rnbav3gza2y53yd3bcxqmngddd4jz6p4y0m539znl817";
}.${system};
in
callPackage ./generic.nix rec {
# Please backport all compatible updates to the stable release.
# This is important for the extension ecosystem.
version = "1.59.0";
version = "1.59.1";
pname = "vscode";
executableName = "code" + lib.optionalString isInsiders "-insiders";
@ -39,7 +39,7 @@ in
sourceRoot = "";
updateScript = ./update-vscodium.sh;
updateScript = ./update-vscode.sh;
meta = with lib; {
description = ''

View file

@ -13,10 +13,10 @@ let
archive_fmt = if system == "x86_64-darwin" then "zip" else "tar.gz";
sha256 = {
x86_64-linux = "0yx0h7rd8v9j3yq863dj78bm587s8lpisbn1skb5whv6qv88x7c0";
x86_64-darwin = "1b5jr08cgl49rh26id8iwi64d32ssr7kis72zcqg0jkw7larxvvh";
aarch64-linux = "1a62krnilfi7nr7mmxyv3danj7h2yfdwg784q8vhrdjyqjd8gjbs";
armv7l-linux = "1axazx7hf6iw0dq1m2049kfrmk8jndycz9pcn3csj6rm65plg746";
x86_64-linux = "1z8sxdzwbjip8csrili5l36v1kl3iq8fw19dhfnkjs3fl0sn360k";
x86_64-darwin = "0sp5k4pk9yjx16c79hqrwn64f2ab82iizm1cy93y9rr2r3px1yga";
aarch64-linux = "03qm5008knigsahs6zz5c614g1kid3k0ndg8vb0flfwmdrajrdw3";
armv7l-linux = "0sls3m5zwz6w01k7jym0vwbz006bkwv23yba7gf1gg84vbqgpb1x";
}.${system};
sourceRoot = {
@ -31,7 +31,7 @@ in
# Please backport all compatible updates to the stable release.
# This is important for the extension ecosystem.
version = "1.59.0";
version = "1.59.1";
pname = "vscodium";
executableName = "codium";

View file

@ -24,13 +24,13 @@
stdenv.mkDerivation rec {
pname = "akira";
version = "0.0.15";
version = "0.0.16";
src = fetchFromGitHub {
owner = "akiraux";
repo = "Akira";
rev = "v${version}";
sha256 = "sha256-2GhpxajymLVAl2P6vZ0+nuZK3ZRRktFswWkj7TP8eHI=";
sha256 = "sha256-qrqmSCwA0kQVFD1gzutks9gMr7My7nw/KJs/VPisa0w=";
};
nativeBuildInputs = [

View file

@ -1,6 +1,7 @@
{ lib
, mkDerivation
, fetchFromGitHub
, fetchpatch
, cmake
, dxflib
, eigen
@ -18,7 +19,7 @@
mkDerivation rec {
pname = "cloudcompare";
version = "2.11.2";
version = "2.11.2"; # Remove below patch with the next version bump.
src = fetchFromGitHub {
owner = "CloudCompare";
@ -33,6 +34,15 @@ mkDerivation rec {
fetchSubmodules = true;
};
patches = [
# TODO: Remove with next CloudCompare release (see https://github.com/CloudCompare/CloudCompare/pull/1478)
(fetchpatch {
name = "CloudCompare-fix-for-PDAL-2.3.0.patch";
url = "https://github.com/CloudCompare/CloudCompare/commit/f3038dcdeb0491c4a653c2ee6fb017326eb676a3.patch";
sha256 = "0ca5ry987mcgsdawz5yd4xhbsdb5k44qws30srxymzx2djvamwli";
})
];
nativeBuildInputs = [
cmake
eigen # header-only

View file

@ -1,28 +1,30 @@
{ lib, python3Packages, fetchFromGitHub }:
{ lib, python3Packages }:
python3Packages.buildPythonApplication rec {
pname = "dosage";
version = "2018.04.08";
PBR_VERSION = version;
version = "2.17";
src = fetchFromGitHub {
owner = "webcomics";
repo = "dosage";
rev = "b2fdc13feb65b93762928f7e99bac7b1b7b31591";
sha256 = "1p6vllqaf9s6crj47xqp97hkglch1kd4y8y4lxvzx3g2shhhk9hh";
src = python3Packages.fetchPypi {
inherit pname version;
sha256 = "0vmxgn9wd3j80hp4gr5iq06jrl4gryz5zgfdd2ah30d12sfcfig0";
};
checkInputs = with python3Packages; [ pytest responses ];
propagatedBuildInputs = with python3Packages; [ colorama lxml requests pbr setuptools ];
checkInputs = with python3Packages; [
pytestCheckHook pytest-xdist responses
];
nativeBuildInputs = with python3Packages; [ setuptools-scm ];
propagatedBuildInputs = with python3Packages; [
colorama imagesize lxml requests setuptools six
];
disabled = python3Packages.pythonOlder "3.3";
checkPhase = ''
py.test tests/
'';
meta = {
description = "A comic strip downloader and archiver";
homepage = "https://dosage.rocks/";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ toonn ];
};
}

View file

@ -2,7 +2,6 @@
, lib
, mkDerivation
, fetchFromGitHub
, fetchpatch
, extra-cmake-modules
# common deps

View file

@ -53,8 +53,13 @@ let
);
scriptDerivation = {src, ...}@attrs : pluginDerivation ({
phases = [ "extraLib" "installPhase" ];
installPhase = "installScripts ${src}";
prePhases = "extraLib";
dontUnpack = true;
installPhase = ''
runHook preInstall
installScripts ${src}
runHook postInstall
'';
} // attrs);
in
{

View file

@ -10,14 +10,14 @@
python3Packages.buildPythonPackage rec {
pname = "hydrus";
version = "450";
version = "451";
format = "other";
src = fetchFromGitHub {
owner = "hydrusnetwork";
repo = "hydrus";
rev = "v${version}";
sha256 = "sha256-sMy5Yv7PGK3U/XnB8IrutSqSBiq1cfD6pAO5BxbWG5A=";
sha256 = "sha256-HoaXbnhwh6kDWgRFVs+VttzIY3MaxriteFTE1fwBUYs=";
};
nativeBuildInputs = [

View file

@ -29,7 +29,7 @@ rustPlatform.buildRustPackage rec {
# FIXME: GLFW (X11) requires DISPLAY env variable for all tests
doCheck = false;
postInstall = optional stdenv.isLinux ''
postInstall = optionalString stdenv.isLinux ''
mkdir -p $out/share/applications
cp $src/rx.desktop $out/share/applications
wrapProgram $out/bin/rx --prefix LD_LIBRARY_PATH : ${libGL}/lib

View file

@ -0,0 +1,37 @@
{ lib, fetchurl, appimageTools }:
let
pname = "anytype";
version = "0.18.59";
name = "Anytype-${version}";
nameExecutable = pname;
src = fetchurl {
url = "https://at9412003.fra1.digitaloceanspaces.com/Anytype-${version}.AppImage";
name = "Anytype-${version}.AppImage";
sha256 = "sha256-HDhDd23kXhIFXg+QKPNpR2R6QC4oJCnut+gD//qMK1Y=";
};
appimageContents = appimageTools.extractType2 { inherit name src; };
in
appimageTools.wrapType2 {
inherit name src;
extraPkgs = pkgs: (appimageTools.defaultFhsEnvArgs.multiPkgs pkgs)
++ [ pkgs.libsecret ];
extraInstallCommands = ''
mv $out/bin/${name} $out/bin/${pname}
install -m 444 -D ${appimageContents}/anytype2.desktop -t $out/share/applications
substituteInPlace $out/share/applications/anytype2.desktop \
--replace 'Exec=AppRun' 'Exec=${pname}'
install -m 444 -D ${appimageContents}/usr/share/icons/hicolor/0x0/apps/anytype2.png \
$out/share/icons/hicolor/512x512/apps/anytype2.png
'';
meta = with lib; {
description = "P2P note-taking tool";
homepage = "https://anytype.io/";
license = licenses.unfree;
maintainers = with maintainers; [ bbigras ];
platforms = [ "x86_64-linux" ];
};
}

View file

@ -1,23 +1,55 @@
{ lib
, buildPythonApplication
, fetchPypi
, appdirs
, attrs
, beautifulsoup4
, click-plugins
, elasticsearch
, flask-compress
, flask_login
, flask_wtf
, html2text
, python-dotenv
, python-frontmatter
, requests
, tinydb
, validators
, werkzeug
, wtforms
}:
{ lib, stdenv, python3, fetchPypi }:
let
defaultOverrides = [
(self: super: {
flask = super.flask.overridePythonAttrs (oldAttrs: rec {
version = "1.1.2";
pname = "Flask";
src = super.fetchPypi {
inherit pname version;
sha256 = "sha256-Tvoa4tfJhlr0iYbeiuuFBL8yx/PW/ck1PTSyH0sScGA=";
};
checkInputs = [ self.pytest ];
propagatedBuildInputs = with self; [ itsdangerous click werkzeug jinja2 ];
doCheck = false;
});
})
(self: super: {
flask_login = super.flask_login.overridePythonAttrs (oldAttrs: rec {
pname = "Flask";
version = "0.5.0";
src = fetchPypi {
inherit pname version;
sha256 = "6d33aef15b5bcead780acc339464aae8a6e28f13c90d8b1cf9de8b549d1c0b4b";
};
doCheck = false;
});
})
];
mkOverride = attrname: version: sha256:
self: super: {
${attrname} = super.${attrname}.overridePythonAttrs (oldAttrs: {
inherit version;
src = oldAttrs.src.override {
inherit version sha256;
};
});
};
py = python3.override {
# Put packageOverrides at the start so they are applied after defaultOverrides
packageOverrides = lib.foldr lib.composeExtensions (self: super: { }) (defaultOverrides);
};
in
with py.pkgs;
buildPythonApplication rec {
pname = "archivy";
@ -40,8 +72,7 @@ buildPythonApplication rec {
--replace 'validators ==' 'validators >=' \
--replace 'tinydb ==' 'tinydb >=' \
--replace 'Flask_WTF == 0.14.3' 'Flask_WTF' \
--replace 'Werkzeug ==' 'Werkzeug >=' \
--replace 'Flask ==' 'Flask >='
--replace 'Werkzeug ==' 'Werkzeug >='
'';
propagatedBuildInputs = [
@ -57,6 +88,7 @@ buildPythonApplication rec {
python-dotenv
python-frontmatter
requests
setuptools
tinydb
validators
werkzeug

View file

@ -1,32 +1,83 @@
{ lib, stdenv, fetchFromGitHub, glibc, python3, cudatoolkit,
withCuda ? true
{ stdenv
, lib
, fetchFromGitHub
, fetchzip
, cmake
, glibc_multi
, glibc
, git
, pkg-config
, cudatoolkit
, withCuda ? false
, linuxPackages
}:
with lib;
let
hwloc = stdenv.mkDerivation rec {
pname = "hwloc";
version = "2.2.0";
src = fetchzip {
url = "https://download.open-mpi.org/release/hwloc/v${lib.versions.majorMinor version}/hwloc-${version}.tar.gz";
sha256 = "1ibw14h9ppg8z3mmkwys8vp699n85kymdz20smjd2iq9b67y80b6";
};
configureFlags = [
"--enable-static"
"--disable-libudev"
"--disable-shared"
"--disable-doxygen"
"--disable-libxml2"
"--disable-cairo"
"--disable-io"
"--disable-pci"
"--disable-opencl"
"--disable-cuda"
"--disable-nvml"
"--disable-gl"
"--disable-libudev"
"--disable-plugin-dlopen"
"--disable-plugin-ltdl"
];
nativeBuildInputs = [ pkg-config ];
enableParallelBuilding = true;
outputs = [ "out" "lib" "dev" "doc" "man" ];
};
in
stdenv.mkDerivation rec {
pname = "firestarter";
version = "1.7.4";
version = "2.0";
src = fetchFromGitHub {
owner = "tud-zih-energy";
repo = "FIRESTARTER";
rev = "v${version}";
sha256 = "0zqfqb7hf48z39g1qhbl1iraf8rz4d629h1q6ikizckpzfq23kd0";
sha256 = "1ik6j1lw5nldj4i3lllrywqg54m9i2vxkxsb2zr4q0d2rfywhn23";
fetchSubmodules = true;
};
nativeBuildInputs = [ python3 ];
buildInputs = [ glibc.static ] ++ optionals withCuda [ cudatoolkit ];
preBuild = ''
mkdir -p build
cd build
python ../code-generator.py ${optionalString withCuda "--enable-cuda"}
'';
makeFlags = optionals withCuda [ "LINUX_CUDA_PATH=${cudatoolkit}" ];
enableParallelBuilding = true;
nativeBuildInputs = [ cmake git pkg-config ];
buildInputs = [ hwloc ] ++ (if withCuda then
[ glibc_multi cudatoolkit linuxPackages.nvidia_x11 ]
else
[ glibc.static ]);
cmakeFlags = [
"-DFIRESTARTER_BUILD_HWLOC=OFF"
"-DCMAKE_C_COMPILER_WORKS=1"
"-DCMAKE_CXX_COMPILER_WORKS=1"
] ++ lib.optionals withCuda [
"-DFIRESTARTER_BUILD_TYPE=FIRESTARTER_CUDA"
];
installPhase = ''
mkdir -p $out/bin
cp FIRESTARTER $out/bin/firestarter
cp src/FIRESTARTER${lib.optionalString withCuda "_CUDA"} $out/bin/
'';
meta = with lib; {

View file

@ -2,13 +2,13 @@
mkDerivation rec {
pname = "gpxsee";
version = "9.2";
version = "9.3";
src = fetchFromGitHub {
owner = "tumic0";
repo = "GPXSee";
rev = version;
sha256 = "sha256-pU02Eaq6tB7X6EPOo8YAyryJRbSV3KebQv8VELxXaBw=";
sha256 = "sha256-h/OWYzZkouhTC7j8HIOt94DHwNyhbkYGoy3wUYrh0O8=";
};
patches = (substituteAll {

View file

@ -1,23 +1,33 @@
{ stdenv, mkDerivation, lib, fetchFromGitHub, cmake
{ lib, stdenv, mkDerivation, fetchFromGitHub
, makeDesktopItem, copyDesktopItems, cmake
, boost, libvorbis, libsndfile, minizip, gtest, qtwebkit }:
mkDerivation rec {
pname = "lsd2dsl";
version = "0.5.2";
version = "0.5.4";
src = fetchFromGitHub {
owner = "nongeneric";
repo = pname;
rev = "v${version}";
sha256 = "0s0la6zkg584is93p4nj1ha3pbnvadq84zgsv8nym3r35n7k8czi";
sha256 = "sha256-PLgfsVVrNBTxI4J0ukEOFRoBkbmB55/sLNn5KyiHeAc=";
};
nativeBuildInputs = [ cmake ];
nativeBuildInputs = [ cmake ] ++ lib.optional stdenv.isLinux copyDesktopItems;
buildInputs = [ boost libvorbis libsndfile minizip gtest qtwebkit ];
NIX_CFLAGS_COMPILE = "-Wno-error=unused-result -Wno-error=missing-braces";
desktopItems = lib.singleton (makeDesktopItem {
name = "lsd2dsl";
exec = "lsd2dsl-qtgui";
desktopName = "lsd2dsl";
genericName = "lsd2dsl";
comment = meta.description;
categories = "Dictionary;FileTools;Qt;";
});
installPhase = ''
install -Dm755 console/lsd2dsl gui/lsd2dsl-qtgui -t $out/bin
'' + lib.optionalString stdenv.isDarwin ''
@ -33,6 +43,6 @@ mkDerivation rec {
'';
license = licenses.mit;
maintainers = with maintainers; [ sikmir ];
platforms = with platforms; linux ++ darwin;
platforms = platforms.unix;
};
}

View file

@ -1,34 +1,34 @@
{ lib, stdenv, fetchFromGitHub, cmake, perl
, alsa-lib, libevdev, libopus, udev, SDL2
, ffmpeg, pkg-config, xorg, libvdpau, libpulseaudio, libcec
, curl, expat, avahi, enet, libuuid, libva
, curl, expat, avahi, libuuid, libva
}:
stdenv.mkDerivation rec {
pname = "moonlight-embedded";
version = "2.4.11";
version = "2.5.1";
src = fetchFromGitHub {
owner = "irtimmer";
owner = "moonlight-stream";
repo = "moonlight-embedded";
rev = "v${version}";
sha256 = "19wm4gizj8q6j4jwqfcn3bkhms97d8afwxmqjmjnqqxzpd2gxc16";
sha256 = "0wn6yjpqyjv52278xsx1ivnqrwca4fnk09a01fwzk4adpry1q9ck";
fetchSubmodules = true;
};
outputs = [ "out" "man" ];
nativeBuildInputs = [ cmake perl ];
nativeBuildInputs = [ cmake perl pkg-config ];
buildInputs = [
alsa-lib libevdev libopus udev SDL2
ffmpeg pkg-config xorg.libxcb libvdpau libpulseaudio libcec
xorg.libpthreadstubs curl expat avahi enet libuuid libva
ffmpeg xorg.libxcb libvdpau libpulseaudio libcec
xorg.libpthreadstubs curl expat avahi libuuid libva
];
meta = with lib; {
description = "Open source implementation of NVIDIA's GameStream";
homepage = "https://github.com/irtimmer/moonlight-embedded";
license = licenses.gpl3;
homepage = "https://github.com/moonlight-stream/moonlight-embedded";
license = licenses.gpl3Plus;
maintainers = [ maintainers.globin ];
platforms = platforms.linux;
};

View file

@ -2,16 +2,16 @@
rustPlatform.buildRustPackage rec {
pname = "pueue";
version = "0.12.1";
version = "0.12.2";
src = fetchFromGitHub {
owner = "Nukesor";
repo = pname;
rev = "v${version}";
sha256 = "sha256-wcOF34GzlB6YKISkjDgYgsaN1NmWBMIntfT23A6byx8=";
sha256 = "sha256-umVIMboKG6cZ1JOcfhOEZTQwPLxC2LdlGUa4U6LXh/g=";
};
cargoSha256 = "sha256-aW1VliL7QQm9gMeM6N+SroHlgqI3F7MX0EzcuEzcJnQ=";
cargoSha256 = "sha256-nppwwO0dBXYG/ZJMNWGnl7J77GDI7+NV8QAmfcbpJD4=";
nativeBuildInputs = [ installShellFiles ];

View file

@ -6,13 +6,13 @@
stdenv.mkDerivation rec {
pname = "pwsafe";
version = "3.55.0";
version = "3.56.0";
src = fetchFromGitHub {
owner = pname;
repo = pname;
rev = version;
sha256 = "sha256-+Vfwz8xGmSzFNdiN5XYkRqGmFuBVIgexXdH3B+XYY3o=";
sha256 = "sha256-ZLX/3cs1cdia5+32QEwE6q3V0uFNkkmiIGboKW6Xej8=";
};
nativeBuildInputs = [

View file

@ -31,7 +31,7 @@ rustPlatform.buildRustPackage rec {
"Control various aspects of Microsoft Surface devices on Linux from the Command-Line";
homepage = "https://github.com/linux-surface/surface-control";
license = licenses.mit;
maintainers = with maintainers; [ winterqt ];
maintainers = with maintainers; [ ];
platforms = platforms.linux;
};
}

View file

@ -5,19 +5,19 @@
rustPlatform.buildRustPackage rec {
pname = "taskwarrior-tui";
version = "0.10.4";
version = "0.13.29";
src = fetchFromGitHub {
owner = "kdheepak";
repo = "taskwarrior-tui";
rev = "v${version}";
sha256 = "1rs6xpnmqzp45jkdzi8x06i8764gk7zl86sp6s0hiirbfqf7vwsy";
sha256 = "sha256-56+/WQESbf31UkJU4xONLY2T+WQVM0bI/x1yLZr3elI=";
};
# Because there's a test that requires terminal access
doCheck = false;
cargoSha256 = "1c9vw1n6h7irwim1zf3mr0g520jnlvfqdy7y9v9g9xpkvbjr7ich";
cargoSha256 = "sha256-8am66wP2751AAMbWDBKZ89mAgr2poq3CU+aJF+I8/fs=";
meta = with lib; {
description = "A terminal user interface for taskwarrior ";

View file

@ -16,9 +16,9 @@ buildGoModule rec {
vendorSha256 = "sha256-XBfTVd3X3IDxLCAaNnijf6E5bw+AZ94UdOG9w7BOdBU=";
preBuild = ''
buildFlagsArray+=("-ldflags" "-s -w -X github.com/achannarasappa/ticker/cmd.Version=v${version}")
'';
ldflags = [
"-s" "-w" "-X github.com/achannarasappa/ticker/cmd.Version=v${version}"
];
# Tests require internet
doCheck = false;

View file

@ -24,13 +24,13 @@
stdenv.mkDerivation rec {
pname = "tint2";
version = "17.0";
version = "17.0.1";
src = fetchFromGitLab {
owner = "o9000";
repo = "tint2";
rev = version;
sha256 = "1gy5kki7vqrj43yl47cw5jqwmj45f7a8ppabd5q5p1gh91j7klgm";
sha256 = "sha256-yiXdG0qYcdol2pA1L9ii4XiLZyyUAl8/EJop48OLoXs=";
};
nativeBuildInputs = [

View file

@ -39,8 +39,6 @@ mkDerivation rec {
install -Dm755 -t $out/share/man/man1 doc/*.1.gz
'';
dontGzipMan = true;
meta = with lib; {
description = "A mind-mapping software";
longDescription = ''

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