Merge staging-next into staging
This commit is contained in:
commit
cc6e2d60db
@ -15,9 +15,9 @@
|
||||
</part>
|
||||
<part>
|
||||
<title>Standard environment</title>
|
||||
<xi:include href="stdenv/stdenv.xml" />
|
||||
<xi:include href="stdenv/meta.xml" />
|
||||
<xi:include href="stdenv/multiple-output.xml" />
|
||||
<xi:include href="stdenv/stdenv.chapter.xml" />
|
||||
<xi:include href="stdenv/meta.chapter.xml" />
|
||||
<xi:include href="stdenv/multiple-output.chapter.xml" />
|
||||
<xi:include href="stdenv/cross-compilation.chapter.xml" />
|
||||
<xi:include href="stdenv/platform-notes.chapter.xml" />
|
||||
</part>
|
||||
|
194
doc/stdenv/meta.chapter.md
Normal file
194
doc/stdenv/meta.chapter.md
Normal file
@ -0,0 +1,194 @@
|
||||
# Meta-attributes {#chap-meta}
|
||||
|
||||
Nix packages can declare *meta-attributes* that contain information about a package such as a description, its homepage, its license, and so on. For instance, the GNU Hello package has a `meta` declaration like this:
|
||||
|
||||
```nix
|
||||
meta = with lib; {
|
||||
description = "A program that produces a familiar, friendly greeting";
|
||||
longDescription = ''
|
||||
GNU Hello is a program that prints "Hello, world!" when you run it.
|
||||
It is fully customizable.
|
||||
'';
|
||||
homepage = "https://www.gnu.org/software/hello/manual/";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = [ maintainers.eelco ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
```
|
||||
|
||||
Meta-attributes are not passed to the builder of the package. Thus, a change to a meta-attribute doesn’t trigger a recompilation of the package. The value of a meta-attribute must be a string.
|
||||
|
||||
The meta-attributes of a package can be queried from the command-line using `nix-env`:
|
||||
|
||||
```ShellSession
|
||||
$ nix-env -qa hello --json
|
||||
{
|
||||
"hello": {
|
||||
"meta": {
|
||||
"description": "A program that produces a familiar, friendly greeting",
|
||||
"homepage": "https://www.gnu.org/software/hello/manual/",
|
||||
"license": {
|
||||
"fullName": "GNU General Public License version 3 or later",
|
||||
"shortName": "GPLv3+",
|
||||
"url": "http://www.fsf.org/licensing/licenses/gpl.html"
|
||||
},
|
||||
"longDescription": "GNU Hello is a program that prints \"Hello, world!\" when you run it.\nIt is fully customizable.\n",
|
||||
"maintainers": [
|
||||
"Ludovic Court\u00e8s <ludo@gnu.org>"
|
||||
],
|
||||
"platforms": [
|
||||
"i686-linux",
|
||||
"x86_64-linux",
|
||||
"armv5tel-linux",
|
||||
"armv7l-linux",
|
||||
"mips32-linux",
|
||||
"x86_64-darwin",
|
||||
"i686-cygwin",
|
||||
"i686-freebsd",
|
||||
"x86_64-freebsd",
|
||||
"i686-openbsd",
|
||||
"x86_64-openbsd"
|
||||
],
|
||||
"position": "/home/user/dev/nixpkgs/pkgs/applications/misc/hello/default.nix:14"
|
||||
},
|
||||
"name": "hello-2.9",
|
||||
"system": "x86_64-linux"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`nix-env` knows about the `description` field specifically:
|
||||
|
||||
```ShellSession
|
||||
$ nix-env -qa hello --description
|
||||
hello-2.3 A program that produces a familiar, friendly greeting
|
||||
```
|
||||
|
||||
## Standard meta-attributes {#sec-standard-meta-attributes}
|
||||
|
||||
It is expected that each meta-attribute is one of the following:
|
||||
|
||||
### `description` {#var-meta-description}
|
||||
|
||||
A short (one-line) description of the package. This is shown by `nix-env -q --description` and also on the Nixpkgs release pages.
|
||||
|
||||
Don’t include a period at the end. Don’t include newline characters. Capitalise the first character. For brevity, don’t repeat the name of package --- just describe what it does.
|
||||
|
||||
Wrong: `"libpng is a library that allows you to decode PNG images."`
|
||||
|
||||
Right: `"A library for decoding PNG images"`
|
||||
|
||||
### `longDescription` {#var-meta-longDescription}
|
||||
|
||||
An arbitrarily long description of the package.
|
||||
|
||||
### `branch` {#var-meta-branch}
|
||||
|
||||
Release branch. Used to specify that a package is not going to receive updates that are not in this branch; for example, Linux kernel 3.0 is supposed to be updated to 3.0.X, not 3.1.
|
||||
|
||||
### `homepage` {#var-meta-homepage}
|
||||
|
||||
The package’s homepage. Example: `https://www.gnu.org/software/hello/manual/`
|
||||
|
||||
### `downloadPage` {#var-meta-downloadPage}
|
||||
|
||||
The page where a link to the current version can be found. Example: `https://ftp.gnu.org/gnu/hello/`
|
||||
|
||||
### `changelog` {#var-meta-changelog}
|
||||
|
||||
A link or a list of links to the location of Changelog for a package. A link may use expansion to refer to the correct changelog version. Example: `"https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v${version}"`
|
||||
|
||||
### `license` {#var-meta-license}
|
||||
|
||||
The license, or licenses, for the package. One from the attribute set defined in [`nixpkgs/lib/licenses.nix`](https://github.com/NixOS/nixpkgs/blob/master/lib/licenses.nix). At this moment using both a list of licenses and a single license is valid. If the license field is in the form of a list representation, then it means that parts of the package are licensed differently. Each license should preferably be referenced by their attribute. The non-list attribute value can also be a space delimited string representation of the contained attribute `shortNames` or `spdxIds`. The following are all valid examples:
|
||||
|
||||
- Single license referenced by attribute (preferred) `lib.licenses.gpl3Only`.
|
||||
- Single license referenced by its attribute shortName (frowned upon) `"gpl3Only"`.
|
||||
- Single license referenced by its attribute spdxId (frowned upon) `"GPL-3.0-only"`.
|
||||
- Multiple licenses referenced by attribute (preferred) `with lib.licenses; [ asl20 free ofl ]`.
|
||||
- Multiple licenses referenced as a space delimited string of attribute shortNames (frowned upon) `"asl20 free ofl"`.
|
||||
|
||||
For details, see [Licenses](#sec-meta-license).
|
||||
|
||||
### `maintainers` {#var-meta-maintainers}
|
||||
|
||||
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 ]`.
|
||||
|
||||
### `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).
|
||||
|
||||
### `platforms` {#var-meta-platforms}
|
||||
|
||||
The list of Nix platform types on which the package is supported. Hydra builds packages according to the platform specified. If no platform is specified, the package does not have prebuilt binaries. An example is:
|
||||
|
||||
```nix
|
||||
meta.platforms = lib.platforms.linux;
|
||||
```
|
||||
|
||||
Attribute Set `lib.platforms` defines [various common lists](https://github.com/NixOS/nixpkgs/blob/master/lib/systems/doubles.nix) of platforms types.
|
||||
|
||||
### `tests` {#var-meta-tests}
|
||||
|
||||
::: warning
|
||||
This attribute is special in that it is not actually under the `meta` attribute set but rather under the `passthru` attribute set. This is due to how `meta` attributes work, and the fact that they are supposed to contain only metadata, not derivations.
|
||||
:::
|
||||
|
||||
An attribute set with as values tests. A test is a derivation, which builds successfully when the test passes, and fails to build otherwise. A derivation that is a test needs to have `meta.timeout` defined.
|
||||
|
||||
The NixOS tests are available as `nixosTests` in parameters of derivations. For instance, the OpenSMTPD derivation includes lines similar to:
|
||||
|
||||
```nix
|
||||
{ /* ... */, nixosTests }:
|
||||
{
|
||||
# ...
|
||||
passthru.tests = {
|
||||
basic-functionality-and-dovecot-integration = nixosTests.opensmtpd;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### `timeout` {#var-meta-timeout}
|
||||
|
||||
A timeout (in seconds) for building the derivation. If the derivation takes longer than this time to build, it can fail due to breaking the timeout. However, all computers do not have the same computing power, hence some builders may decide to apply a multiplicative factor to this value. When filling this value in, try to keep it approximately consistent with other values already present in `nixpkgs`.
|
||||
|
||||
### `hydraPlatforms` {#var-meta-hydraPlatforms}
|
||||
|
||||
The list of Nix platform types for which the Hydra instance at `hydra.nixos.org` will build the package. (Hydra is the Nix-based continuous build system.) It defaults to the value of `meta.platforms`. Thus, the only reason to set `meta.hydraPlatforms` is if you want `hydra.nixos.org` to build the package on a subset of `meta.platforms`, or not at all, e.g.
|
||||
|
||||
```nix
|
||||
meta.platforms = lib.platforms.linux;
|
||||
meta.hydraPlatforms = [];
|
||||
```
|
||||
|
||||
### `broken` {#var-meta-broken}
|
||||
|
||||
If set to `true`, the package is marked as "broken", meaning that it won’t show up in `nix-env -qa`, and cannot be built or installed. Such packages should be removed from Nixpkgs eventually unless they are fixed.
|
||||
|
||||
### `updateWalker` {#var-meta-updateWalker}
|
||||
|
||||
If set to `true`, the package is tested to be updated correctly by the `update-walker.sh` script without additional settings. Such packages have `meta.version` set and their homepage (or the page specified by `meta.downloadPage`) contains a direct link to the package tarball.
|
||||
|
||||
## Licenses {#sec-meta-license}
|
||||
|
||||
The `meta.license` attribute should preferably contain a value from `lib.licenses` defined in [`nixpkgs/lib/licenses.nix`](https://github.com/NixOS/nixpkgs/blob/master/lib/licenses.nix), or in-place license description of the same format if the license is unlikely to be useful in another expression.
|
||||
|
||||
Although it’s typically better to indicate the specific license, a few generic options are available:
|
||||
|
||||
### `lib.licenses.free`, `"free"`
|
||||
|
||||
Catch-all for free software licenses not listed above.
|
||||
|
||||
### `lib.licenses.unfreeRedistributable`, `"unfree-redistributable"`
|
||||
|
||||
Unfree package that can be redistributed in binary form. That is, it’s legal to redistribute the *output* of the derivation. This means that the package can be included in the Nixpkgs channel.
|
||||
|
||||
Sometimes proprietary software can only be redistributed unmodified. Make sure the builder doesn’t actually modify the original binaries; otherwise we’re breaking the license. For instance, the NVIDIA X11 drivers can be redistributed unmodified, but our builder applies `patchelf` to make them work. Thus, its license is `"unfree"` and it cannot be included in the Nixpkgs channel.
|
||||
|
||||
### `lib.licenses.unfree`, `"unfree"`
|
||||
|
||||
Unfree package that cannot be redistributed. You can build it yourself, but you cannot redistribute the output of the derivation. Thus it cannot be included in the Nixpkgs channel.
|
||||
|
||||
### `lib.licenses.unfreeRedistributableFirmware`, `"unfree-redistributable-firmware"`
|
||||
|
||||
This package supplies unfree, redistributable firmware. This is a separate value from `unfree-redistributable` because not everybody cares whether firmware is free.
|
@ -1,349 +0,0 @@
|
||||
<chapter xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xml:id="chap-meta">
|
||||
<title>Meta-attributes</title>
|
||||
<para>
|
||||
Nix packages can declare <emphasis>meta-attributes</emphasis> that contain information about a package such as a description, its homepage, its license, and so on. For instance, the GNU Hello package has a <varname>meta</varname> declaration like this:
|
||||
<programlisting>
|
||||
meta = with lib; {
|
||||
description = "A program that produces a familiar, friendly greeting";
|
||||
longDescription = ''
|
||||
GNU Hello is a program that prints "Hello, world!" when you run it.
|
||||
It is fully customizable.
|
||||
'';
|
||||
homepage = "https://www.gnu.org/software/hello/manual/";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = [ maintainers.eelco ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
</programlisting>
|
||||
</para>
|
||||
<para>
|
||||
Meta-attributes are not passed to the builder of the package. Thus, a change to a meta-attribute doesn’t trigger a recompilation of the package. The value of a meta-attribute must be a string.
|
||||
</para>
|
||||
<para>
|
||||
The meta-attributes of a package can be queried from the command-line using <command>nix-env</command>:
|
||||
<screen>
|
||||
<prompt>$ </prompt>nix-env -qa hello --json
|
||||
{
|
||||
"hello": {
|
||||
"meta": {
|
||||
"description": "A program that produces a familiar, friendly greeting",
|
||||
"homepage": "https://www.gnu.org/software/hello/manual/",
|
||||
"license": {
|
||||
"fullName": "GNU General Public License version 3 or later",
|
||||
"shortName": "GPLv3+",
|
||||
"url": "http://www.fsf.org/licensing/licenses/gpl.html"
|
||||
},
|
||||
"longDescription": "GNU Hello is a program that prints \"Hello, world!\" when you run it.\nIt is fully customizable.\n",
|
||||
"maintainers": [
|
||||
"Ludovic Court\u00e8s <ludo@gnu.org>"
|
||||
],
|
||||
"platforms": [
|
||||
"i686-linux",
|
||||
"x86_64-linux",
|
||||
"armv5tel-linux",
|
||||
"armv7l-linux",
|
||||
"mips32-linux",
|
||||
"x86_64-darwin",
|
||||
"i686-cygwin",
|
||||
"i686-freebsd",
|
||||
"x86_64-freebsd",
|
||||
"i686-openbsd",
|
||||
"x86_64-openbsd"
|
||||
],
|
||||
"position": "/home/user/dev/nixpkgs/pkgs/applications/misc/hello/default.nix:14"
|
||||
},
|
||||
"name": "hello-2.9",
|
||||
"system": "x86_64-linux"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</screen>
|
||||
<command>nix-env</command> knows about the <varname>description</varname> field specifically:
|
||||
<screen>
|
||||
<prompt>$ </prompt>nix-env -qa hello --description
|
||||
hello-2.3 A program that produces a familiar, friendly greeting
|
||||
</screen>
|
||||
</para>
|
||||
<section xml:id="sec-standard-meta-attributes">
|
||||
<title>Standard meta-attributes</title>
|
||||
|
||||
<para>
|
||||
It is expected that each meta-attribute is one of the following:
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry xml:id="var-meta-description">
|
||||
<term>
|
||||
<varname>description</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A short (one-line) description of the package. This is shown by <command>nix-env -q --description</command> and also on the Nixpkgs release pages.
|
||||
</para>
|
||||
<para>
|
||||
Don’t include a period at the end. Don’t include newline characters. Capitalise the first character. For brevity, don’t repeat the name of package — just describe what it does.
|
||||
</para>
|
||||
<para>
|
||||
Wrong: <literal>"libpng is a library that allows you to decode PNG images."</literal>
|
||||
</para>
|
||||
<para>
|
||||
Right: <literal>"A library for decoding PNG images"</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-longDescription">
|
||||
<term>
|
||||
<varname>longDescription</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
An arbitrarily long description of the package.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-branch">
|
||||
<term>
|
||||
<varname>branch</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Release branch. Used to specify that a package is not going to receive updates that are not in this branch; for example, Linux kernel 3.0 is supposed to be updated to 3.0.X, not 3.1.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-homepage">
|
||||
<term>
|
||||
<varname>homepage</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The package’s homepage. Example: <literal>https://www.gnu.org/software/hello/manual/</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-downloadPage">
|
||||
<term>
|
||||
<varname>downloadPage</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The page where a link to the current version can be found. Example: <literal>https://ftp.gnu.org/gnu/hello/</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-changelog">
|
||||
<term>
|
||||
<varname>changelog</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A link or a list of links to the location of Changelog for a package. A link may use expansion to refer to the correct changelog version. Example: <literal>"https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v${version}"</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-license">
|
||||
<term>
|
||||
<varname>license</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The license, or licenses, for the package. One from the attribute set defined in <link
|
||||
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/lib/licenses.nix"> <filename>nixpkgs/lib/licenses.nix</filename></link>. At this moment using both a list of licenses and a single license is valid. If the license field is in the form of a list representation, then it means that parts of the package are licensed differently. Each license should preferably be referenced by their attribute. The non-list attribute value can also be a space delimited string representation of the contained attribute shortNames or spdxIds. The following are all valid examples:
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Single license referenced by attribute (preferred) <literal>lib.licenses.gpl3Only</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Single license referenced by its attribute shortName (frowned upon) <literal>"gpl3Only"</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Single license referenced by its attribute spdxId (frowned upon) <literal>"GPL-3.0-only"</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Multiple licenses referenced by attribute (preferred) <literal>with lib.licenses; [ asl20 free ofl ]</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Multiple licenses referenced as a space delimited string of attribute shortNames (frowned upon) <literal>"asl20 free ofl"</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
For details, see <xref linkend='sec-meta-license'/>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-maintainers">
|
||||
<term>
|
||||
<varname>maintainers</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A list of the maintainers of this Nix expression. Maintainers are defined in <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/maintainers/maintainer-list.nix"><filename>nixpkgs/maintainers/maintainer-list.nix</filename></link>. 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 <literal>maintainers = with lib.maintainers; [ alice bob ]</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-priority">
|
||||
<term>
|
||||
<varname>priority</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The <emphasis>priority</emphasis> of the package, used by <command>nix-env</command> to resolve file name conflicts between packages. See the Nix manual page for <command>nix-env</command> for details. Example: <literal>"10"</literal> (a low-priority package).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-platforms">
|
||||
<term>
|
||||
<varname>platforms</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The list of Nix platform types on which the package is supported. Hydra builds packages according to the platform specified. If no platform is specified, the package does not have prebuilt binaries. An example is:
|
||||
<programlisting>
|
||||
meta.platforms = lib.platforms.linux;
|
||||
</programlisting>
|
||||
Attribute Set <varname>lib.platforms</varname> defines <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/lib/systems/doubles.nix"> various common lists</link> of platforms types.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-tests">
|
||||
<term>
|
||||
<varname>tests</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<warning>
|
||||
<para>
|
||||
This attribute is special in that it is not actually under the <literal>meta</literal> attribute set but rather under the <literal>passthru</literal> attribute set. This is due to how <literal>meta</literal> attributes work, and the fact that they are supposed to contain only metadata, not derivations.
|
||||
</para>
|
||||
</warning>
|
||||
<para>
|
||||
An attribute set with as values tests. A test is a derivation, which builds successfully when the test passes, and fails to build otherwise. A derivation that is a test needs to have <literal>meta.timeout</literal> defined.
|
||||
</para>
|
||||
<para>
|
||||
The NixOS tests are available as <literal>nixosTests</literal> in parameters of derivations. For instance, the OpenSMTPD derivation includes lines similar to:
|
||||
<programlisting>
|
||||
{ /* ... */, nixosTests }:
|
||||
{
|
||||
# ...
|
||||
passthru.tests = {
|
||||
basic-functionality-and-dovecot-integration = nixosTests.opensmtpd;
|
||||
};
|
||||
}
|
||||
</programlisting>
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-timeout">
|
||||
<term>
|
||||
<varname>timeout</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A timeout (in seconds) for building the derivation. If the derivation takes longer than this time to build, it can fail due to breaking the timeout. However, all computers do not have the same computing power, hence some builders may decide to apply a multiplicative factor to this value. When filling this value in, try to keep it approximately consistent with other values already present in <literal>nixpkgs</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-hydraPlatforms">
|
||||
<term>
|
||||
<varname>hydraPlatforms</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
The list of Nix platform types for which the Hydra instance at <literal>hydra.nixos.org</literal> will build the package. (Hydra is the Nix-based continuous build system.) It defaults to the value of <varname>meta.platforms</varname>. Thus, the only reason to set <varname>meta.hydraPlatforms</varname> is if you want <literal>hydra.nixos.org</literal> to build the package on a subset of <varname>meta.platforms</varname>, or not at all, e.g.
|
||||
<programlisting>
|
||||
meta.platforms = lib.platforms.linux;
|
||||
meta.hydraPlatforms = [];
|
||||
</programlisting>
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-broken">
|
||||
<term>
|
||||
<varname>broken</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
If set to <literal>true</literal>, the package is marked as “broken”, meaning that it won’t show up in <literal>nix-env -qa</literal>, and cannot be built or installed. Such packages should be removed from Nixpkgs eventually unless they are fixed.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry xml:id="var-meta-updateWalker">
|
||||
<term>
|
||||
<varname>updateWalker</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
If set to <literal>true</literal>, the package is tested to be updated correctly by the <literal>update-walker.sh</literal> script without additional settings. Such packages have <varname>meta.version</varname> set and their homepage (or the page specified by <varname>meta.downloadPage</varname>) contains a direct link to the package tarball.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</section>
|
||||
<section xml:id="sec-meta-license">
|
||||
<title>Licenses</title>
|
||||
|
||||
<para>
|
||||
The <varname>meta.license</varname> attribute should preferrably contain a value from <varname>lib.licenses</varname> defined in <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/lib/licenses.nix"> <filename>nixpkgs/lib/licenses.nix</filename></link>, or in-place license description of the same format if the license is unlikely to be useful in another expression.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Although it's typically better to indicate the specific license, a few generic options are available:
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>lib.licenses.free</varname>, <varname>"free"</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Catch-all for free software licenses not listed above.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>lib.licenses.unfreeRedistributable</varname>, <varname>"unfree-redistributable"</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Unfree package that can be redistributed in binary form. That is, it’s legal to redistribute the <emphasis>output</emphasis> of the derivation. This means that the package can be included in the Nixpkgs channel.
|
||||
</para>
|
||||
<para>
|
||||
Sometimes proprietary software can only be redistributed unmodified. Make sure the builder doesn’t actually modify the original binaries; otherwise we’re breaking the license. For instance, the NVIDIA X11 drivers can be redistributed unmodified, but our builder applies <command>patchelf</command> to make them work. Thus, its license is <varname>"unfree"</varname> and it cannot be included in the Nixpkgs channel.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>lib.licenses.unfree</varname>, <varname>"unfree"</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Unfree package that cannot be redistributed. You can build it yourself, but you cannot redistribute the output of the derivation. Thus it cannot be included in the Nixpkgs channel.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname>lib.licenses.unfreeRedistributableFirmware</varname>, <varname>"unfree-redistributable-firmware"</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
This package supplies unfree, redistributable firmware. This is a separate value from <varname>unfree-redistributable</varname> because not everybody cares whether firmware is free.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
</section>
|
||||
</chapter>
|
128
doc/stdenv/multiple-output.chapter.md
Normal file
128
doc/stdenv/multiple-output.chapter.md
Normal file
@ -0,0 +1,128 @@
|
||||
# Multiple-output packages {#chap-multiple-output}
|
||||
|
||||
## Introduction {#sec-multiple-outputs-introduction}
|
||||
|
||||
The Nix language allows a derivation to produce multiple outputs, which is similar to what is utilized by other Linux distribution packaging systems. The outputs reside in separate Nix store paths, so they can be mostly handled independently of each other, including passing to build inputs, garbage collection or binary substitution. The exception is that building from source always produces all the outputs.
|
||||
|
||||
The main motivation is to save disk space by reducing runtime closure sizes; consequently also sizes of substituted binaries get reduced. Splitting can be used to have more granular runtime dependencies, for example the typical reduction is to split away development-only files, as those are typically not needed during runtime. As a result, closure sizes of many packages can get reduced to a half or even much less.
|
||||
|
||||
::: note
|
||||
The reduction effects could be instead achieved by building the parts in completely separate derivations. That would often additionally reduce build-time closures, but it tends to be much harder to write such derivations, as build systems typically assume all parts are being built at once. This compromise approach of single source package producing multiple binary packages is also utilized often by rpm and deb.
|
||||
:::
|
||||
|
||||
A number of attributes can be used to work with a derivation with multiple outputs. The attribute `outputs` is a list of strings, which are the names of the outputs. For each of these names, an identically named attribute is created, corresponding to that output. The attribute `meta.outputsToInstall` is used to determine the default set of outputs to install when using the derivation name unqualified.
|
||||
|
||||
## Installing a split package {#sec-multiple-outputs-installing}
|
||||
|
||||
When installing a package with multiple outputs, the package’s `meta.outputsToInstall` attribute determines which outputs are actually installed. `meta.outputsToInstall` is a list whose [default installs binaries and the associated man pages](https://github.com/NixOS/nixpkgs/blob/f1680774340d5443a1409c3421ced84ac1163ba9/pkgs/stdenv/generic/make-derivation.nix#L310-L320). The following sections describe ways to install different outputs.
|
||||
|
||||
### Selecting outputs to install via NixOS {#sec-multiple-outputs-installing-nixos}
|
||||
|
||||
NixOS provides two ways to select the outputs to install for packages listed in `environment.systemPackages`:
|
||||
|
||||
- The configuration option `environment.extraOutputsToInstall` is appended to each package’s `meta.outputsToInstall` attribute to determine the outputs to install. It can for example be used to install `info` documentation or debug symbols for all packages.
|
||||
|
||||
- The outputs can be listed as packages in `environment.systemPackages`. For example, the `"out"` and `"info"` outputs for the `coreutils` package can be installed by including `coreutils` and `coreutils.info` in `environment.systemPackages`.
|
||||
|
||||
### Selecting outputs to install via `nix-env` {#sec-multiple-outputs-installing-nix-env}
|
||||
|
||||
`nix-env` lacks an easy way to select the outputs to install. When installing a package, `nix-env` always installs the outputs listed in `meta.outputsToInstall`, even when the user explicitly selects an output.
|
||||
|
||||
::: warning
|
||||
`nix-env` silenty disregards the outputs selected by the user, and instead installs the outputs from `meta.outputsToInstall`. For example,
|
||||
|
||||
```ShellSession
|
||||
$ nix-env -iA nixpkgs.coreutils.info
|
||||
```
|
||||
|
||||
installs the `"out"` output (`coreutils.meta.outputsToInstall` is `[ "out" ]`) instead of the requested `"info"`.
|
||||
:::
|
||||
|
||||
The only recourse to select an output with `nix-env` is to override the package’s `meta.outputsToInstall`, using the functions described in <xref linkend="chap-overrides" />. For example, the following overlay adds the `"info"` output for the `coreutils` package:
|
||||
|
||||
```nix
|
||||
self: super:
|
||||
{
|
||||
coreutils = super.coreutils.overrideAttrs (oldAttrs: {
|
||||
meta = oldAttrs.meta // { outputsToInstall = oldAttrs.meta.outputsToInstall or [ "out" ] ++ [ "info" ]; };
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## Using a split package {#sec-multiple-outputs-using-split-packages}
|
||||
|
||||
In the Nix language the individual outputs can be reached explicitly as attributes, e.g. `coreutils.info`, but the typical case is just using packages as build inputs.
|
||||
|
||||
When a multiple-output derivation gets into a build input of another derivation, the `dev` output is added if it exists, otherwise the first output is added. In addition to that, `propagatedBuildOutputs` of that package which by default contain `$outputBin` and `$outputLib` are also added. (See <xref linkend="multiple-output-file-type-groups" />.)
|
||||
|
||||
In some cases it may be desirable to combine different outputs under a single store path. A function `symlinkJoin` can be used to do this. (Note that it may negate some closure size benefits of using a multiple-output package.)
|
||||
|
||||
## Writing a split derivation {#sec-multiple-outputs-}
|
||||
|
||||
Here you find how to write a derivation that produces multiple outputs.
|
||||
|
||||
In nixpkgs there is a framework supporting multiple-output derivations. It tries to cover most cases by default behavior. You can find the source separated in `<nixpkgs/pkgs/build-support/setup-hooks/multiple-outputs.sh>`; it’s relatively well-readable. The whole machinery is triggered by defining the `outputs` attribute to contain the list of desired output names (strings).
|
||||
|
||||
```nix
|
||||
outputs = [ "bin" "dev" "out" "doc" ];
|
||||
```
|
||||
|
||||
Often such a single line is enough. For each output an equally named environment variable is passed to the builder and contains the path in nix store for that output. Typically you also want to have the main `out` output, as it catches any files that didn’t get elsewhere.
|
||||
|
||||
::: note
|
||||
There is a special handling of the `debug` output, described at <xref linkend="stdenv-separateDebugInfo" />.
|
||||
:::
|
||||
|
||||
### “Binaries first” {#multiple-output-file-binaries-first-convention}
|
||||
|
||||
A commonly adopted convention in `nixpkgs` is that executables provided by the package are contained within its first output. This convention allows the dependent packages to reference the executables provided by packages in a uniform manner. For instance, provided with the knowledge that the `perl` package contains a `perl` executable it can be referenced as `${pkgs.perl}/bin/perl` within a Nix derivation that needs to execute a Perl script.
|
||||
|
||||
The `glibc` package is a deliberate single exception to the “binaries first” convention. The `glibc` has `libs` as its first output allowing the libraries provided by `glibc` to be referenced directly (e.g. `${stdenv.glibc}/lib/ld-linux-x86-64.so.2`). The executables provided by `glibc` can be accessed via its `bin` attribute (e.g. `${stdenv.glibc.bin}/bin/ldd`).
|
||||
|
||||
The reason for why `glibc` deviates from the convention is because referencing a library provided by `glibc` is a very common operation among Nix packages. For instance, third-party executables packaged by Nix are typically patched and relinked with the relevant version of `glibc` libraries from Nix packages (please see the documentation on [patchelf](https://github.com/NixOS/patchelf/blob/master/README) for more details).
|
||||
|
||||
### File type groups {#multiple-output-file-type-groups}
|
||||
|
||||
The support code currently recognizes some particular kinds of outputs and either instructs the build system of the package to put files into their desired outputs or it moves the files during the fixup phase. Each group of file types has an `outputFoo` variable specifying the output name where they should go. If that variable isn’t defined by the derivation writer, it is guessed – a default output name is defined, falling back to other possibilities if the output isn’t defined.
|
||||
|
||||
#### ` $outputDev`
|
||||
|
||||
is for development-only files. These include C(++) headers (`include/`), pkg-config (`lib/pkgconfig/`), cmake (`lib/cmake/`) and aclocal files (`share/aclocal/`). They go to `dev` or `out` by default.
|
||||
|
||||
#### ` $outputBin`
|
||||
|
||||
is meant for user-facing binaries, typically residing in `bin/`. They go to `bin` or `out` by default.
|
||||
|
||||
#### ` $outputLib`
|
||||
|
||||
is meant for libraries, typically residing in `lib/` and `libexec/`. They go to `lib` or `out` by default.
|
||||
|
||||
#### ` $outputDoc`
|
||||
|
||||
is for user documentation, typically residing in `share/doc/`. It goes to `doc` or `out` by default.
|
||||
|
||||
#### ` $outputDevdoc`
|
||||
|
||||
is for _developer_ documentation. Currently we count gtk-doc and devhelp books, typically residing in `share/gtk-doc/` and `share/devhelp/`, in there. It goes to `devdoc` or is removed (!) by default. This is because e.g. gtk-doc tends to be rather large and completely unused by nixpkgs users.
|
||||
|
||||
#### ` $outputMan`
|
||||
|
||||
is for man pages (except for section 3), typically residing in `share/man/man[0-9]/`. They go to `man` or `$outputBin` by default.
|
||||
|
||||
#### ` $outputDevman`
|
||||
|
||||
is for section 3 man pages, typically residing in `share/man/man[0-9]/`. They go to `devman` or `$outputMan` by default.
|
||||
|
||||
#### ` $outputInfo`
|
||||
|
||||
is for info pages, typically residing in `share/info/`. They go to `info` or `$outputBin` by default.
|
||||
|
||||
### Common caveats {#sec-multiple-outputs-caveats}
|
||||
|
||||
- Some configure scripts don’t like some of the parameters passed by default by the framework, e.g. `--docdir=/foo/bar`. You can disable this by setting `setOutputFlags = false;`.
|
||||
|
||||
- The outputs of a single derivation can retain references to each other, but note that circular references are not allowed. (And each strongly-connected component would act as a single output anyway.)
|
||||
|
||||
- Most of split packages contain their core functionality in libraries. These libraries tend to refer to various kind of data that typically gets into `out`, e.g. locale strings, so there is often no advantage in separating the libraries into `lib`, as keeping them in `out` is easier.
|
||||
|
||||
- Some packages have hidden assumptions on install paths, which complicates splitting.
|
@ -1,261 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE chapter [
|
||||
<!ENTITY ndash "–"> <!-- @vcunat likes to use this one ;-) -->
|
||||
]>
|
||||
<chapter xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xml:id="chap-multiple-output">
|
||||
<title>Multiple-output packages</title>
|
||||
<section xml:id="sec-multiple-outputs-introduction">
|
||||
<title>Introduction</title>
|
||||
|
||||
<para>
|
||||
The Nix language allows a derivation to produce multiple outputs, which is similar to what is utilized by other Linux distribution packaging systems. The outputs reside in separate Nix store paths, so they can be mostly handled independently of each other, including passing to build inputs, garbage collection or binary substitution. The exception is that building from source always produces all the outputs.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The main motivation is to save disk space by reducing runtime closure sizes; consequently also sizes of substituted binaries get reduced. Splitting can be used to have more granular runtime dependencies, for example the typical reduction is to split away development-only files, as those are typically not needed during runtime. As a result, closure sizes of many packages can get reduced to a half or even much less.
|
||||
</para>
|
||||
|
||||
<note>
|
||||
<para>
|
||||
The reduction effects could be instead achieved by building the parts in completely separate derivations. That would often additionally reduce build-time closures, but it tends to be much harder to write such derivations, as build systems typically assume all parts are being built at once. This compromise approach of single source package producing multiple binary packages is also utilized often by rpm and deb.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
<para>
|
||||
A number of attributes can be used to work with a derivation with multiple outputs. The attribute <varname>outputs</varname> is a list of strings, which are the names of the outputs. For each of these names, an identically named attribute is created, corresponding to that output. The attribute <varname>meta.outputsToInstall</varname> is used to determine the default set of outputs to install when using the derivation name unqualified.
|
||||
</para>
|
||||
</section>
|
||||
<section xml:id="sec-multiple-outputs-installing">
|
||||
<title>Installing a split package</title>
|
||||
|
||||
<para>
|
||||
When installing a package with multiple outputs, the package's <varname>meta.outputsToInstall</varname> attribute determines which outputs are actually installed. <varname>meta.outputsToInstall</varname> is a list whose <link xlink:href="https://github.com/NixOS/nixpkgs/blob/f1680774340d5443a1409c3421ced84ac1163ba9/pkgs/stdenv/generic/make-derivation.nix#L310-L320">default installs binaries and the associated man pages</link>. The following sections describe ways to install different outputs.
|
||||
</para>
|
||||
|
||||
<section xml:id="sec-multiple-outputs-installing-nixos">
|
||||
<title>Selecting outputs to install via NixOS</title>
|
||||
|
||||
<para>
|
||||
NixOS provides two ways to select the outputs to install for packages listed in <varname>environment.systemPackages</varname>:
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
The configuration option <varname>environment.extraOutputsToInstall</varname> is appended to each package's <varname>meta.outputsToInstall</varname> attribute to determine the outputs to install. It can for example be used to install <literal>info</literal> documentation or debug symbols for all packages.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The outputs can be listed as packages in <varname>environment.systemPackages</varname>. For example, the <literal>"out"</literal> and <literal>"info"</literal> outputs for the <varname>coreutils</varname> package can be installed by including <varname>coreutils</varname> and <varname>coreutils.info</varname> in <varname>environment.systemPackages</varname>.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
|
||||
<section xml:id="sec-multiple-outputs-installing-nix-env">
|
||||
<title>Selecting outputs to install via <command>nix-env</command></title>
|
||||
|
||||
<para>
|
||||
<command>nix-env</command> lacks an easy way to select the outputs to install. When installing a package, <command>nix-env</command> always installs the outputs listed in <varname>meta.outputsToInstall</varname>, even when the user explicitly selects an output.
|
||||
</para>
|
||||
|
||||
<warning>
|
||||
<para>
|
||||
<command>nix-env</command> silenty disregards the outputs selected by the user, and instead installs the outputs from <varname>meta.outputsToInstall</varname>. For example,
|
||||
</para>
|
||||
<screen><prompt>$ </prompt>nix-env -iA nixpkgs.coreutils.info</screen>
|
||||
<para>
|
||||
installs the <literal>"out"</literal> output (<varname>coreutils.meta.outputsToInstall</varname> is <literal>[ "out" ]</literal>) instead of the requested <literal>"info"</literal>.
|
||||
</para>
|
||||
</warning>
|
||||
|
||||
<para>
|
||||
The only recourse to select an output with <command>nix-env</command> is to override the package's <varname>meta.outputsToInstall</varname>, using the functions described in <xref linkend="chap-overrides" />. For example, the following overlay adds the <literal>"info"</literal> output for the <varname>coreutils</varname> package:
|
||||
</para>
|
||||
|
||||
<programlisting>self: super:
|
||||
{
|
||||
coreutils = super.coreutils.overrideAttrs (oldAttrs: {
|
||||
meta = oldAttrs.meta // { outputsToInstall = oldAttrs.meta.outputsToInstall or [ "out" ] ++ [ "info" ]; };
|
||||
});
|
||||
}
|
||||
</programlisting>
|
||||
</section>
|
||||
</section>
|
||||
<section xml:id="sec-multiple-outputs-using-split-packages">
|
||||
<title>Using a split package</title>
|
||||
|
||||
<para>
|
||||
In the Nix language the individual outputs can be reached explicitly as attributes, e.g. <varname>coreutils.info</varname>, but the typical case is just using packages as build inputs.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
When a multiple-output derivation gets into a build input of another derivation, the <varname>dev</varname> output is added if it exists, otherwise the first output is added. In addition to that, <varname>propagatedBuildOutputs</varname> of that package which by default contain <varname>$outputBin</varname> and <varname>$outputLib</varname> are also added. (See <xref linkend="multiple-output-file-type-groups" />.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In some cases it may be desirable to combine different outputs under a single store path. A function <literal>symlinkJoin</literal> can be used to do this. (Note that it may negate some closure size benefits of using a multiple-output package.)
|
||||
</para>
|
||||
</section>
|
||||
<section xml:id="sec-multiple-outputs-">
|
||||
<title>Writing a split derivation</title>
|
||||
|
||||
<para>
|
||||
Here you find how to write a derivation that produces multiple outputs.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In nixpkgs there is a framework supporting multiple-output derivations. It tries to cover most cases by default behavior. You can find the source separated in <<filename>nixpkgs/pkgs/build-support/setup-hooks/multiple-outputs.sh</filename>>; it's relatively well-readable. The whole machinery is triggered by defining the <varname>outputs</varname> attribute to contain the list of desired output names (strings).
|
||||
</para>
|
||||
|
||||
<programlisting>outputs = [ "bin" "dev" "out" "doc" ];</programlisting>
|
||||
|
||||
<para>
|
||||
Often such a single line is enough. For each output an equally named environment variable is passed to the builder and contains the path in nix store for that output. Typically you also want to have the main <varname>out</varname> output, as it catches any files that didn't get elsewhere.
|
||||
</para>
|
||||
|
||||
<note>
|
||||
<para>
|
||||
There is a special handling of the <varname>debug</varname> output, described at <xref linkend="stdenv-separateDebugInfo" />.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
<section xml:id="multiple-output-file-binaries-first-convention">
|
||||
<title><quote>Binaries first</quote></title>
|
||||
|
||||
<para>
|
||||
A commonly adopted convention in <literal>nixpkgs</literal> is that executables provided by the package are contained within its first output. This convention allows the dependent packages to reference the executables provided by packages in a uniform manner. For instance, provided with the knowledge that the <literal>perl</literal> package contains a <literal>perl</literal> executable it can be referenced as <literal>${pkgs.perl}/bin/perl</literal> within a Nix derivation that needs to execute a Perl script.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <literal>glibc</literal> package is a deliberate single exception to the <quote>binaries first</quote> convention. The <literal>glibc</literal> has <literal>libs</literal> as its first output allowing the libraries provided by <literal>glibc</literal> to be referenced directly (e.g. <literal>${stdenv.glibc}/lib/ld-linux-x86-64.so.2</literal>). The executables provided by <literal>glibc</literal> can be accessed via its <literal>bin</literal> attribute (e.g. <literal>${stdenv.glibc.bin}/bin/ldd</literal>).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The reason for why <literal>glibc</literal> deviates from the convention is because referencing a library provided by <literal>glibc</literal> is a very common operation among Nix packages. For instance, third-party executables packaged by Nix are typically patched and relinked with the relevant version of <literal>glibc</literal> libraries from Nix packages (please see the documentation on <link xlink:href="https://github.com/NixOS/patchelf/blob/master/README">patchelf</link> for more details).
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section xml:id="multiple-output-file-type-groups">
|
||||
<title>File type groups</title>
|
||||
|
||||
<para>
|
||||
The support code currently recognizes some particular kinds of outputs and either instructs the build system of the package to put files into their desired outputs or it moves the files during the fixup phase. Each group of file types has an <varname>outputFoo</varname> variable specifying the output name where they should go. If that variable isn't defined by the derivation writer, it is guessed – a default output name is defined, falling back to other possibilities if the output isn't defined.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname> $outputDev</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
is for development-only files. These include C(++) headers (<filename>include/</filename>), pkg-config (<filename>lib/pkgconfig/</filename>), cmake (<filename>lib/cmake/</filename>) and aclocal files (<varname>share/aclocal/</varname>). They go to <varname>dev</varname> or <varname>out</varname> by default.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname> $outputBin</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
is meant for user-facing binaries, typically residing in <filename>bin/</filename>. They go to <varname>bin</varname> or <varname>out</varname> by default.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname> $outputLib</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
is meant for libraries, typically residing in <filename>lib/</filename> and <filename>libexec/</filename>. They go to <varname>lib</varname> or <varname>out</varname> by default.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname> $outputDoc</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
is for user documentation, typically residing in <filename>share/doc/</filename>. It goes to <varname>doc</varname> or <varname>out</varname> by default.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname> $outputDevdoc</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
is for <emphasis>developer</emphasis> documentation. Currently we count gtk-doc and devhelp books, typically residing in <filename>share/gtk-doc/</filename> and <filename>share/devhelp/</filename>, in there. It goes to <varname>devdoc</varname> or is removed (!) by default. This is because e.g. gtk-doc tends to be rather large and completely unused by nixpkgs users.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname> $outputMan</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
is for man pages (except for section 3), typically residing in <filename>share/man/man[0-9]/</filename>. They go to <varname>man</varname> or <varname>$outputBin</varname> by default.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname> $outputDevman</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
is for section 3 man pages, typically residing in <filename>share/man/man3/</filename>. They go to <varname>devman</varname> or <varname>$outputMan</varname> by default.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>
|
||||
<varname> $outputInfo</varname>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
is for info pages, typically residing in <filename>share/info/</filename>. They go to <varname>info</varname> or <varname>$outputBin</varname> by default.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</section>
|
||||
|
||||
<section xml:id="sec-multiple-outputs-caveats">
|
||||
<title>Common caveats</title>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Some configure scripts don't like some of the parameters passed by default by the framework, e.g. <literal>--docdir=/foo/bar</literal>. You can disable this by setting <literal>setOutputFlags = false;</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The outputs of a single derivation can retain references to each other, but note that circular references are not allowed. (And each strongly-connected component would act as a single output anyway.)
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Most of split packages contain their core functionality in libraries. These libraries tend to refer to various kind of data that typically gets into <varname>out</varname>, e.g. locale strings, so there is often no advantage in separating the libraries into <varname>lib</varname>, as keeping them in <varname>out</varname> is easier.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Some packages have hidden assumptions on install paths, which complicates splitting.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
</section>
|
||||
<!--Writing a split derivation-->
|
||||
</chapter>
|
1215
doc/stdenv/stdenv.chapter.md
Normal file
1215
doc/stdenv/stdenv.chapter.md
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
526
maintainers/scripts/pluginupdate.py
Normal file
526
maintainers/scripts/pluginupdate.py
Normal file
@ -0,0 +1,526 @@
|
||||
# Used by pkgs/misc/vim-plugins/update.py and pkgs/applications/editors/kakoune/plugins/update.py
|
||||
|
||||
# format:
|
||||
# $ nix run nixpkgs.python3Packages.black -c black update.py
|
||||
# type-check:
|
||||
# $ nix run nixpkgs.python3Packages.mypy -c mypy update.py
|
||||
# linted:
|
||||
# $ nix run nixpkgs.python3Packages.flake8 -c flake8 --ignore E501,E265 update.py
|
||||
|
||||
import argparse
|
||||
import functools
|
||||
import http
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
import traceback
|
||||
import urllib.error
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
import xml.etree.ElementTree as ET
|
||||
from datetime import datetime
|
||||
from functools import wraps
|
||||
from multiprocessing.dummy import Pool
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional, Tuple, Union, Any, Callable
|
||||
from urllib.parse import urljoin, urlparse
|
||||
from tempfile import NamedTemporaryFile
|
||||
|
||||
import git
|
||||
|
||||
ATOM_ENTRY = "{http://www.w3.org/2005/Atom}entry" # " vim gets confused here
|
||||
ATOM_LINK = "{http://www.w3.org/2005/Atom}link" # "
|
||||
ATOM_UPDATED = "{http://www.w3.org/2005/Atom}updated" # "
|
||||
|
||||
|
||||
def retry(ExceptionToCheck: Any, tries: int = 4, delay: float = 3, backoff: float = 2):
|
||||
"""Retry calling the decorated function using an exponential backoff.
|
||||
http://www.saltycrane.com/blog/2009/11/trying-out-retry-decorator-python/
|
||||
original from: http://wiki.python.org/moin/PythonDecoratorLibrary#Retry
|
||||
(BSD licensed)
|
||||
:param ExceptionToCheck: the exception on which to retry
|
||||
:param tries: number of times to try (not retry) before giving up
|
||||
:param delay: initial delay between retries in seconds
|
||||
:param backoff: backoff multiplier e.g. value of 2 will double the delay
|
||||
each retry
|
||||
"""
|
||||
|
||||
def deco_retry(f: Callable) -> Callable:
|
||||
@wraps(f)
|
||||
def f_retry(*args: Any, **kwargs: Any) -> Any:
|
||||
mtries, mdelay = tries, delay
|
||||
while mtries > 1:
|
||||
try:
|
||||
return f(*args, **kwargs)
|
||||
except ExceptionToCheck as e:
|
||||
print(f"{str(e)}, Retrying in {mdelay} seconds...")
|
||||
time.sleep(mdelay)
|
||||
mtries -= 1
|
||||
mdelay *= backoff
|
||||
return f(*args, **kwargs)
|
||||
|
||||
return f_retry # true decorator
|
||||
|
||||
return deco_retry
|
||||
|
||||
|
||||
def make_request(url: str) -> urllib.request.Request:
|
||||
token = os.getenv("GITHUB_API_TOKEN")
|
||||
headers = {}
|
||||
if token is not None:
|
||||
headers["Authorization"] = f"token {token}"
|
||||
return urllib.request.Request(url, headers=headers)
|
||||
|
||||
|
||||
class Repo:
|
||||
def __init__(
|
||||
self, owner: str, name: str, branch: str, alias: Optional[str]
|
||||
) -> None:
|
||||
self.owner = owner
|
||||
self.name = name
|
||||
self.branch = branch
|
||||
self.alias = alias
|
||||
self.redirect: Dict[str, str] = {}
|
||||
|
||||
def url(self, path: str) -> str:
|
||||
return urljoin(f"https://github.com/{self.owner}/{self.name}/", path)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"Repo({self.owner}, {self.name})"
|
||||
|
||||
@retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
|
||||
def has_submodules(self) -> bool:
|
||||
try:
|
||||
req = make_request(self.url(f"blob/{self.branch}/.gitmodules"))
|
||||
urllib.request.urlopen(req, timeout=10).close()
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code == 404:
|
||||
return False
|
||||
else:
|
||||
raise
|
||||
return True
|
||||
|
||||
@retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
|
||||
def latest_commit(self) -> Tuple[str, datetime]:
|
||||
commit_url = self.url(f"commits/{self.branch}.atom")
|
||||
commit_req = make_request(commit_url)
|
||||
with urllib.request.urlopen(commit_req, timeout=10) as req:
|
||||
self.check_for_redirect(commit_url, req)
|
||||
xml = req.read()
|
||||
root = ET.fromstring(xml)
|
||||
latest_entry = root.find(ATOM_ENTRY)
|
||||
assert latest_entry is not None, f"No commits found in repository {self}"
|
||||
commit_link = latest_entry.find(ATOM_LINK)
|
||||
assert commit_link is not None, f"No link tag found feed entry {xml}"
|
||||
url = urlparse(commit_link.get("href"))
|
||||
updated_tag = latest_entry.find(ATOM_UPDATED)
|
||||
assert (
|
||||
updated_tag is not None and updated_tag.text is not None
|
||||
), f"No updated tag found feed entry {xml}"
|
||||
updated = datetime.strptime(updated_tag.text, "%Y-%m-%dT%H:%M:%SZ")
|
||||
return Path(str(url.path)).name, updated
|
||||
|
||||
def check_for_redirect(self, url: str, req: http.client.HTTPResponse):
|
||||
response_url = req.geturl()
|
||||
if url != response_url:
|
||||
new_owner, new_name = (
|
||||
urllib.parse.urlsplit(response_url).path.strip("/").split("/")[:2]
|
||||
)
|
||||
end_line = "\n" if self.alias is None else f" as {self.alias}\n"
|
||||
plugin_line = "{owner}/{name}" + end_line
|
||||
|
||||
old_plugin = plugin_line.format(owner=self.owner, name=self.name)
|
||||
new_plugin = plugin_line.format(owner=new_owner, name=new_name)
|
||||
self.redirect[old_plugin] = new_plugin
|
||||
|
||||
def prefetch_git(self, ref: str) -> str:
|
||||
data = subprocess.check_output(
|
||||
["nix-prefetch-git", "--fetch-submodules", self.url(""), ref]
|
||||
)
|
||||
return json.loads(data)["sha256"]
|
||||
|
||||
def prefetch_github(self, ref: str) -> str:
|
||||
data = subprocess.check_output(
|
||||
["nix-prefetch-url", "--unpack", self.url(f"archive/{ref}.tar.gz")]
|
||||
)
|
||||
return data.strip().decode("utf-8")
|
||||
|
||||
|
||||
class Plugin:
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
commit: str,
|
||||
has_submodules: bool,
|
||||
sha256: str,
|
||||
date: Optional[datetime] = None,
|
||||
) -> None:
|
||||
self.name = name
|
||||
self.commit = commit
|
||||
self.has_submodules = has_submodules
|
||||
self.sha256 = sha256
|
||||
self.date = date
|
||||
|
||||
@property
|
||||
def normalized_name(self) -> str:
|
||||
return self.name.replace(".", "-")
|
||||
|
||||
@property
|
||||
def version(self) -> str:
|
||||
assert self.date is not None
|
||||
return self.date.strftime("%Y-%m-%d")
|
||||
|
||||
def as_json(self) -> Dict[str, str]:
|
||||
copy = self.__dict__.copy()
|
||||
del copy["date"]
|
||||
return copy
|
||||
|
||||
|
||||
class Editor:
|
||||
"""The configuration of the update script."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
root: Path,
|
||||
get_plugins: str,
|
||||
generate_nix: Callable[[List[Tuple[str, str, Plugin]], str], None],
|
||||
default_in: Optional[Path] = None,
|
||||
default_out: Optional[Path] = None,
|
||||
deprecated: Optional[Path] = None,
|
||||
cache_file: Optional[str] = None,
|
||||
):
|
||||
self.name = name
|
||||
self.root = root
|
||||
self.get_plugins = get_plugins
|
||||
self.generate_nix = generate_nix
|
||||
self.default_in = default_in or root.joinpath(f"{name}-plugin-names")
|
||||
self.default_out = default_out or root.joinpath("generated.nix")
|
||||
self.deprecated = deprecated or root.joinpath("deprecated.json")
|
||||
self.cache_file = cache_file or f"{name}-plugin-cache.json"
|
||||
|
||||
|
||||
class CleanEnvironment(object):
|
||||
def __enter__(self) -> None:
|
||||
self.old_environ = os.environ.copy()
|
||||
local_pkgs = str(Path(__file__).parent.parent.parent)
|
||||
os.environ["NIX_PATH"] = f"localpkgs={local_pkgs}"
|
||||
self.empty_config = NamedTemporaryFile()
|
||||
self.empty_config.write(b"{}")
|
||||
self.empty_config.flush()
|
||||
os.environ["NIXPKGS_CONFIG"] = self.empty_config.name
|
||||
|
||||
def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None:
|
||||
os.environ.update(self.old_environ)
|
||||
self.empty_config.close()
|
||||
|
||||
|
||||
def get_current_plugins(editor: Editor) -> List[Plugin]:
|
||||
with CleanEnvironment():
|
||||
out = subprocess.check_output(["nix", "eval", "--json", editor.get_plugins])
|
||||
data = json.loads(out)
|
||||
plugins = []
|
||||
for name, attr in data.items():
|
||||
p = Plugin(name, attr["rev"], attr["submodules"], attr["sha256"])
|
||||
plugins.append(p)
|
||||
return plugins
|
||||
|
||||
|
||||
def prefetch_plugin(
|
||||
user: str,
|
||||
repo_name: str,
|
||||
branch: str,
|
||||
alias: Optional[str],
|
||||
cache: "Optional[Cache]" = None,
|
||||
) -> Tuple[Plugin, Dict[str, str]]:
|
||||
repo = Repo(user, repo_name, branch, alias)
|
||||
commit, date = repo.latest_commit()
|
||||
has_submodules = repo.has_submodules()
|
||||
cached_plugin = cache[commit] if cache else None
|
||||
if cached_plugin is not None:
|
||||
cached_plugin.name = alias or repo_name
|
||||
cached_plugin.date = date
|
||||
return cached_plugin, repo.redirect
|
||||
|
||||
print(f"prefetch {user}/{repo_name}")
|
||||
if has_submodules:
|
||||
sha256 = repo.prefetch_git(commit)
|
||||
else:
|
||||
sha256 = repo.prefetch_github(commit)
|
||||
|
||||
return (
|
||||
Plugin(alias or repo_name, commit, has_submodules, sha256, date=date),
|
||||
repo.redirect,
|
||||
)
|
||||
|
||||
|
||||
def fetch_plugin_from_pluginline(plugin_line: str) -> Plugin:
|
||||
plugin, _ = prefetch_plugin(*parse_plugin_line(plugin_line))
|
||||
return plugin
|
||||
|
||||
|
||||
def print_download_error(plugin: str, ex: Exception):
|
||||
print(f"{plugin}: {ex}", file=sys.stderr)
|
||||
ex_traceback = ex.__traceback__
|
||||
tb_lines = [
|
||||
line.rstrip("\n")
|
||||
for line in traceback.format_exception(ex.__class__, ex, ex_traceback)
|
||||
]
|
||||
print("\n".join(tb_lines))
|
||||
|
||||
|
||||
def check_results(
|
||||
results: List[Tuple[str, str, Union[Exception, Plugin], Dict[str, str]]]
|
||||
) -> Tuple[List[Tuple[str, str, Plugin]], Dict[str, str]]:
|
||||
failures: List[Tuple[str, Exception]] = []
|
||||
plugins = []
|
||||
redirects: Dict[str, str] = {}
|
||||
for (owner, name, result, redirect) in results:
|
||||
if isinstance(result, Exception):
|
||||
failures.append((name, result))
|
||||
else:
|
||||
plugins.append((owner, name, result))
|
||||
redirects.update(redirect)
|
||||
|
||||
print(f"{len(results) - len(failures)} plugins were checked", end="")
|
||||
if len(failures) == 0:
|
||||
print()
|
||||
return plugins, redirects
|
||||
else:
|
||||
print(f", {len(failures)} plugin(s) could not be downloaded:\n")
|
||||
|
||||
for (plugin, exception) in failures:
|
||||
print_download_error(plugin, exception)
|
||||
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def parse_plugin_line(line: str) -> Tuple[str, str, str, Optional[str]]:
|
||||
branch = "master"
|
||||
alias = None
|
||||
name, repo = line.split("/")
|
||||
if " as " in repo:
|
||||
repo, alias = repo.split(" as ")
|
||||
alias = alias.strip()
|
||||
if "@" in repo:
|
||||
repo, branch = repo.split("@")
|
||||
|
||||
return (name.strip(), repo.strip(), branch.strip(), alias)
|
||||
|
||||
|
||||
def load_plugin_spec(plugin_file: str) -> List[Tuple[str, str, str, Optional[str]]]:
|
||||
plugins = []
|
||||
with open(plugin_file) as f:
|
||||
for line in f:
|
||||
plugin = parse_plugin_line(line)
|
||||
if not plugin[0]:
|
||||
msg = f"Invalid repository {line}, must be in the format owner/repo[ as alias]"
|
||||
print(msg, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
plugins.append(plugin)
|
||||
return plugins
|
||||
|
||||
|
||||
def get_cache_path(cache_file_name: str) -> Optional[Path]:
|
||||
xdg_cache = os.environ.get("XDG_CACHE_HOME", None)
|
||||
if xdg_cache is None:
|
||||
home = os.environ.get("HOME", None)
|
||||
if home is None:
|
||||
return None
|
||||
xdg_cache = str(Path(home, ".cache"))
|
||||
|
||||
return Path(xdg_cache, cache_file_name)
|
||||
|
||||
|
||||
class Cache:
|
||||
def __init__(self, initial_plugins: List[Plugin], cache_file_name: str) -> None:
|
||||
self.cache_file = get_cache_path(cache_file_name)
|
||||
|
||||
downloads = {}
|
||||
for plugin in initial_plugins:
|
||||
downloads[plugin.commit] = plugin
|
||||
downloads.update(self.load())
|
||||
self.downloads = downloads
|
||||
|
||||
def load(self) -> Dict[str, Plugin]:
|
||||
if self.cache_file is None or not self.cache_file.exists():
|
||||
return {}
|
||||
|
||||
downloads: Dict[str, Plugin] = {}
|
||||
with open(self.cache_file) as f:
|
||||
data = json.load(f)
|
||||
for attr in data.values():
|
||||
p = Plugin(
|
||||
attr["name"], attr["commit"], attr["has_submodules"], attr["sha256"]
|
||||
)
|
||||
downloads[attr["commit"]] = p
|
||||
return downloads
|
||||
|
||||
def store(self) -> None:
|
||||
if self.cache_file is None:
|
||||
return
|
||||
|
||||
os.makedirs(self.cache_file.parent, exist_ok=True)
|
||||
with open(self.cache_file, "w+") as f:
|
||||
data = {}
|
||||
for name, attr in self.downloads.items():
|
||||
data[name] = attr.as_json()
|
||||
json.dump(data, f, indent=4, sort_keys=True)
|
||||
|
||||
def __getitem__(self, key: str) -> Optional[Plugin]:
|
||||
return self.downloads.get(key, None)
|
||||
|
||||
def __setitem__(self, key: str, value: Plugin) -> None:
|
||||
self.downloads[key] = value
|
||||
|
||||
|
||||
def prefetch(
|
||||
args: Tuple[str, str, str, Optional[str]], cache: Cache
|
||||
) -> Tuple[str, str, Union[Exception, Plugin], dict]:
|
||||
assert len(args) == 4
|
||||
owner, repo, branch, alias = args
|
||||
try:
|
||||
plugin, redirect = prefetch_plugin(owner, repo, branch, alias, cache)
|
||||
cache[plugin.commit] = plugin
|
||||
return (owner, repo, plugin, redirect)
|
||||
except Exception as e:
|
||||
return (owner, repo, e, {})
|
||||
|
||||
|
||||
def rewrite_input(
|
||||
input_file: Path,
|
||||
deprecated: Path,
|
||||
redirects: Dict[str, str] = None,
|
||||
append: Tuple = (),
|
||||
):
|
||||
with open(input_file, "r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
lines.extend(append)
|
||||
|
||||
if redirects:
|
||||
lines = [redirects.get(line, line) for line in lines]
|
||||
|
||||
cur_date_iso = datetime.now().strftime("%Y-%m-%d")
|
||||
with open(deprecated, "r") as f:
|
||||
deprecations = json.load(f)
|
||||
for old, new in redirects.items():
|
||||
old_plugin = fetch_plugin_from_pluginline(old)
|
||||
new_plugin = fetch_plugin_from_pluginline(new)
|
||||
if old_plugin.normalized_name != new_plugin.normalized_name:
|
||||
deprecations[old_plugin.normalized_name] = {
|
||||
"new": new_plugin.normalized_name,
|
||||
"date": cur_date_iso,
|
||||
}
|
||||
with open(deprecated, "w") as f:
|
||||
json.dump(deprecations, f, indent=4, sort_keys=True)
|
||||
|
||||
lines = sorted(lines, key=str.casefold)
|
||||
|
||||
with open(input_file, "w") as f:
|
||||
f.writelines(lines)
|
||||
|
||||
|
||||
def parse_args(editor: Editor):
|
||||
parser = argparse.ArgumentParser(
|
||||
description=(
|
||||
f"Updates nix derivations for {editor.name} plugins"
|
||||
f"By default from {editor.default_in} to {editor.default_out}"
|
||||
)
|
||||
)
|
||||
parser.add_argument(
|
||||
"--add",
|
||||
dest="add_plugins",
|
||||
default=[],
|
||||
action="append",
|
||||
help=f"Plugin to add to {editor.name}Plugins from Github in the form owner/repo",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--input-names",
|
||||
"-i",
|
||||
dest="input_file",
|
||||
default=editor.default_in,
|
||||
help="A list of plugins in the form owner/repo",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--out",
|
||||
"-o",
|
||||
dest="outfile",
|
||||
default=editor.default_out,
|
||||
help="Filename to save generated nix code",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--proc",
|
||||
"-p",
|
||||
dest="proc",
|
||||
type=int,
|
||||
default=30,
|
||||
help="Number of concurrent processes to spawn.",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def commit(repo: git.Repo, message: str, files: List[Path]) -> None:
|
||||
repo.index.add([str(f.resolve()) for f in files])
|
||||
|
||||
if repo.index.diff("HEAD"):
|
||||
print(f'committing to nixpkgs "{message}"')
|
||||
repo.index.commit(message)
|
||||
else:
|
||||
print("no changes in working tree to commit")
|
||||
|
||||
|
||||
def get_update(input_file: str, outfile: str, proc: int, editor: Editor):
|
||||
cache: Cache = Cache(get_current_plugins(editor), editor.cache_file)
|
||||
_prefetch = functools.partial(prefetch, cache=cache)
|
||||
|
||||
def update() -> dict:
|
||||
plugin_names = load_plugin_spec(input_file)
|
||||
|
||||
try:
|
||||
pool = Pool(processes=proc)
|
||||
results = pool.map(_prefetch, plugin_names)
|
||||
finally:
|
||||
cache.store()
|
||||
|
||||
plugins, redirects = check_results(results)
|
||||
|
||||
editor.generate_nix(plugins, outfile)
|
||||
|
||||
return redirects
|
||||
|
||||
return update
|
||||
|
||||
|
||||
def update_plugins(editor: Editor):
|
||||
"""The main entry function of this module. All input arguments are grouped in the `Editor`."""
|
||||
|
||||
args = parse_args(editor)
|
||||
nixpkgs_repo = git.Repo(editor.root, search_parent_directories=True)
|
||||
update = get_update(args.input_file, args.outfile, args.proc, editor)
|
||||
|
||||
redirects = update()
|
||||
rewrite_input(args.input_file, editor.deprecated, redirects)
|
||||
commit(nixpkgs_repo, f"{editor.name}Plugins: update", [args.outfile])
|
||||
|
||||
if redirects:
|
||||
update()
|
||||
commit(
|
||||
nixpkgs_repo,
|
||||
f"{editor.name}Plugins: resolve github repository redirects",
|
||||
[args.outfile, args.input_file, editor.deprecated],
|
||||
)
|
||||
|
||||
for plugin_line in args.add_plugins:
|
||||
rewrite_input(args.input_fil, editor.deprecated, append=(plugin_line + "\n",))
|
||||
update()
|
||||
plugin = fetch_plugin_from_pluginline(plugin_line)
|
||||
commit(
|
||||
nixpkgs_repo,
|
||||
"{editor}Plugins.{name}: init at {version}".format(
|
||||
editor=editor.name, name=plugin.normalized_name, version=plugin.version
|
||||
),
|
||||
[args.outfile, args.input_file],
|
||||
)
|
@ -98,7 +98,7 @@ in
|
||||
|
||||
See "Multiple-output packages" chapter in the nixpkgs manual for more info.
|
||||
'';
|
||||
# which is at ../../../doc/multiple-output.xml
|
||||
# which is at ../../../doc/multiple-output.chapter.md
|
||||
};
|
||||
|
||||
man.enable = mkOption {
|
||||
|
@ -47,9 +47,9 @@ in
|
||||
doc = mkOption {
|
||||
type = docFile;
|
||||
internal = true;
|
||||
example = "./meta.xml";
|
||||
example = "./meta.chapter.xml";
|
||||
description = ''
|
||||
Documentation prologe for the set of options of each module. This
|
||||
Documentation prologue for the set of options of each module. This
|
||||
option should be defined at most once per module.
|
||||
'';
|
||||
};
|
||||
|
@ -104,7 +104,7 @@ let
|
||||
ignoreCollisions = true;
|
||||
};
|
||||
|
||||
filterGutenprint = pkgs: filter (pkg: pkg.meta.isGutenprint or false == true) pkgs;
|
||||
filterGutenprint = filter (pkg: pkg.meta.isGutenprint or false == true);
|
||||
containsGutenprint = pkgs: length (filterGutenprint pkgs) > 0;
|
||||
getGutenprint = pkgs: head (filterGutenprint pkgs);
|
||||
|
||||
|
@ -8,13 +8,13 @@
|
||||
|
||||
mkDerivation rec {
|
||||
pname = "musescore";
|
||||
version = "3.6.1";
|
||||
version = "3.6.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "musescore";
|
||||
repo = "MuseScore";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-21ZI5rsc05ZWEyM0LeFr+212YViLYveZZBvVpskh8iA=";
|
||||
sha256 = "sha256-GBGAD/qdOhoNfDzI+O0EiKgeb86GFJxpci35T6tZ+2s=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
@ -1,23 +1,25 @@
|
||||
{ rust, rustPlatform, stdenv, lib, fetchFromGitHub, autoreconfHook, makeWrapper
|
||||
, cargo, pkg-config
|
||||
, bash, curl, coreutils, boost17x, db62, libsodium, libevent, utf8cpp, util-linux
|
||||
, fetchpatch, cargo, pkg-config, curl, coreutils, boost174, db62, hexdump
|
||||
, libsodium, libevent, utf8cpp, util-linux, withWallet ? true, withDaemon ? true
|
||||
, withUtils ? true
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
rustPlatform.buildRustPackage.override { stdenv = stdenv; } rec {
|
||||
pname = "zcash";
|
||||
version = "4.1.1";
|
||||
version = "4.3.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "zcash";
|
||||
repo = "zcash";
|
||||
rev = "v${version}";
|
||||
sha256 = "185zrw276g545np0niw5hlhlppkjbf5a1r4rwhnbaimdjdii2dil";
|
||||
sha256 = "00pn1jw8j90y7i8nc92b51znz4gczphvdzbkbcjx63cf6vk7v4ks";
|
||||
};
|
||||
|
||||
cargoSha256 = "0qxr6asf8zsya0f1ri39z2cnfpjk96hgwjchz2c7j87vibbvg6dc";
|
||||
cargoSha256 = "1rl9sjbvpfrv1mlyb04vw1935qx0kz9cs177xl7izdva1ixk9blr";
|
||||
|
||||
nativeBuildInputs = [ autoreconfHook cargo makeWrapper pkg-config ];
|
||||
buildInputs = [ bash boost17x db62 libevent libsodium utf8cpp ];
|
||||
nativeBuildInputs = [ autoreconfHook cargo hexdump makeWrapper pkg-config ];
|
||||
buildInputs = [ boost174 libevent libsodium utf8cpp ]
|
||||
++ lib.optional withWallet db62;
|
||||
|
||||
# Use the stdenv default phases (./configure; make) instead of the
|
||||
# ones from buildRustPackage.
|
||||
@ -26,6 +28,14 @@ rustPlatform.buildRustPackage rec {
|
||||
checkPhase = "checkPhase";
|
||||
installPhase = "installPhase";
|
||||
|
||||
patches = [
|
||||
# See https://github.com/zcash/zcash/pull/5015
|
||||
(fetchpatch {
|
||||
url = "https://github.com/zcash/zcash/commit/a0ac27ec6ed434a233c7ad2468258f6e6e7e9688.patch";
|
||||
sha256 = "0pmx1spql9p8vvpjgw7qf3qy46f4mh9ni16bq4ss1xz1z9zgjc4k";
|
||||
})
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
# Have to do this here instead of in preConfigure because
|
||||
# cargoDepsCopy gets unset after postPatch.
|
||||
@ -34,10 +44,12 @@ rustPlatform.buildRustPackage rec {
|
||||
|
||||
configureFlags = [
|
||||
"--disable-tests"
|
||||
"--with-boost-libdir=${lib.getLib boost17x}/lib"
|
||||
"--with-boost-libdir=${lib.getLib boost174}/lib"
|
||||
"CXXFLAGS=-I${lib.getDev utf8cpp}/include/utf8cpp"
|
||||
"RUST_TARGET=${rust.toRustTargetSpec stdenv.hostPlatform}"
|
||||
];
|
||||
] ++ lib.optional (!withWallet) "--disable-wallet"
|
||||
++ lib.optional (!withDaemon) "--without-daemon"
|
||||
++ lib.optional (!withUtils) "--without-utils";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
|
130
pkgs/applications/editors/emacs-modes/elpa-generated.nix
generated
130
pkgs/applications/editors/emacs-modes/elpa-generated.nix
generated
@ -636,16 +636,16 @@
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
counsel = callPackage ({ elpaBuild, emacs, fetchurl, lib, swiper }:
|
||||
counsel = callPackage ({ elpaBuild, emacs, fetchurl, ivy, lib, swiper }:
|
||||
elpaBuild {
|
||||
pname = "counsel";
|
||||
ename = "counsel";
|
||||
version = "0.13.1";
|
||||
version = "0.13.4";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/counsel-0.13.1.tar";
|
||||
sha256 = "0m4dmhj33cxaapn9lf7bj1r680gi2wd7cw9xlssjklzvic29a6db";
|
||||
url = "https://elpa.gnu.org/packages/counsel-0.13.4.tar";
|
||||
sha256 = "094zfapfn1l8wjf3djkipk0d9nks0g77sbk107pfsbr3skkzh031";
|
||||
};
|
||||
packageRequires = [ emacs swiper ];
|
||||
packageRequires = [ emacs ivy swiper ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/counsel.html";
|
||||
license = lib.licenses.free;
|
||||
@ -1295,10 +1295,10 @@
|
||||
elpaBuild {
|
||||
pname = "flymake";
|
||||
ename = "flymake";
|
||||
version = "1.0.9";
|
||||
version = "1.1.1";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/flymake-1.0.9.el";
|
||||
sha256 = "0xm1crhjcs14iqkf481igbf40wj2ib3hjzinw1gn8w1n0462ymp6";
|
||||
url = "https://elpa.gnu.org/packages/flymake-1.1.1.tar";
|
||||
sha256 = "0lk2v34b59b24j3hsmi8d0v7fgpwcipv7ka9i88cdgjmjjmzgz5q";
|
||||
};
|
||||
packageRequires = [ eldoc emacs ];
|
||||
meta = {
|
||||
@ -1714,10 +1714,10 @@
|
||||
elpaBuild {
|
||||
pname = "ivy";
|
||||
ename = "ivy";
|
||||
version = "0.13.1";
|
||||
version = "0.13.4";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/ivy-0.13.1.tar";
|
||||
sha256 = "0n0ixhdykbdpis4krkqq6zncbby28p34742q96n0l91w0p19slcx";
|
||||
url = "https://elpa.gnu.org/packages/ivy-0.13.4.tar";
|
||||
sha256 = "0qpza1c45mr8fcpnm32cck4v22fnzz1yb7kww05rzgq1k9iivx5v";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
@ -1725,6 +1725,21 @@
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
ivy-avy = callPackage ({ avy, elpaBuild, emacs, fetchurl, ivy, lib }:
|
||||
elpaBuild {
|
||||
pname = "ivy-avy";
|
||||
ename = "ivy-avy";
|
||||
version = "0.13.4";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/ivy-avy-0.13.4.tar";
|
||||
sha256 = "1q5caxm4rnh4jy5n88dhkdbx1afsshmfki5dl8xsqbdb3y0zq7yi";
|
||||
};
|
||||
packageRequires = [ avy emacs ivy ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/ivy-avy.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
ivy-explorer = callPackage ({ elpaBuild, emacs, fetchurl, ivy, lib }:
|
||||
elpaBuild {
|
||||
pname = "ivy-explorer";
|
||||
@ -1740,6 +1755,21 @@
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
ivy-hydra = callPackage ({ elpaBuild, emacs, fetchurl, hydra, ivy, lib }:
|
||||
elpaBuild {
|
||||
pname = "ivy-hydra";
|
||||
ename = "ivy-hydra";
|
||||
version = "0.13.5";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/ivy-hydra-0.13.5.tar";
|
||||
sha256 = "06rln9bnq5hli5rqlm47fb68b8llpqrmzwqqv4rn7mx3854i9a5x";
|
||||
};
|
||||
packageRequires = [ emacs hydra ivy ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/ivy-hydra.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
ivy-posframe = callPackage ({ elpaBuild
|
||||
, emacs
|
||||
, fetchurl
|
||||
@ -2019,10 +2049,10 @@
|
||||
elpaBuild {
|
||||
pname = "map";
|
||||
ename = "map";
|
||||
version = "2.1";
|
||||
version = "3.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/map-2.1.el";
|
||||
sha256 = "0ydz5w1n4vwhhzxxj003s7jv8n1wjijwfryk5z93bwhnr0cak0i0";
|
||||
url = "https://elpa.gnu.org/packages/map-3.0.tar";
|
||||
sha256 = "00wf8lgh1b1i5l838y6di8194rf5gf5djklkhmxj1nlikz66j2ls";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
@ -2384,6 +2414,21 @@
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
ob-haxe = callPackage ({ elpaBuild, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "ob-haxe";
|
||||
ename = "ob-haxe";
|
||||
version = "1.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/ob-haxe-1.0.tar";
|
||||
sha256 = "1x19b3aappv4d3mvpf01r505l1sfndbzbpr5sbid411g9g9k3rwr";
|
||||
};
|
||||
packageRequires = [];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/ob-haxe.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
objed = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "objed";
|
||||
@ -2613,10 +2658,10 @@
|
||||
elpaBuild {
|
||||
pname = "phps-mode";
|
||||
ename = "phps-mode";
|
||||
version = "0.4.1";
|
||||
version = "0.4.2";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/phps-mode-0.4.1.tar";
|
||||
sha256 = "11d1gsvvj26h9d7a28v87b022vbi3syzngn1x9v1d2g55iv01x38";
|
||||
url = "https://elpa.gnu.org/packages/phps-mode-0.4.2.tar";
|
||||
sha256 = "0ngh54jdh56563crgvf0r4gd6zfvhbkxs9prp12930gav8mdm3sh";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
@ -2658,10 +2703,10 @@
|
||||
elpaBuild {
|
||||
pname = "posframe";
|
||||
ename = "posframe";
|
||||
version = "0.8.5";
|
||||
version = "0.8.8";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/posframe-0.8.5.tar";
|
||||
sha256 = "0rls0rsj9clx4wd0gbdi5jzwyslparlf7phib649637gq6gs90ds";
|
||||
url = "https://elpa.gnu.org/packages/posframe-0.8.8.tar";
|
||||
sha256 = "1ij6brzcxv9viz37qafcinlfx5l20w8x8s6786r1rsda5n1xsmvd";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
@ -2673,10 +2718,10 @@
|
||||
elpaBuild {
|
||||
pname = "project";
|
||||
ename = "project";
|
||||
version = "0.5.3";
|
||||
version = "0.5.4";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/project-0.5.3.el";
|
||||
sha256 = "0cpf69m41h8gfcqnq72h11925zdk35b7hw7bfy83xm83xwp12rxx";
|
||||
url = "https://elpa.gnu.org/packages/project-0.5.4.tar";
|
||||
sha256 = "0arjvhzzcf8b80w94yvpgfdlhsjwf5jk1r7vcai5a4dg3bi9cxyb";
|
||||
};
|
||||
packageRequires = [ emacs xref ];
|
||||
meta = {
|
||||
@ -2718,10 +2763,10 @@
|
||||
elpaBuild {
|
||||
pname = "pyim";
|
||||
ename = "pyim";
|
||||
version = "3.2";
|
||||
version = "3.5";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/pyim-3.2.tar";
|
||||
sha256 = "1rr9mq334dqf7mx1ii7910zkigw7chl63iws4sw0qsn014kjlb0a";
|
||||
url = "https://elpa.gnu.org/packages/pyim-3.5.tar";
|
||||
sha256 = "0593ds3zbmpd6235b8v33f3cb3sn8cwr6arb6zbf1ba97nawjxqs";
|
||||
};
|
||||
packageRequires = [ async emacs xr ];
|
||||
meta = {
|
||||
@ -2729,6 +2774,21 @@
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
pyim-basedict = callPackage ({ elpaBuild, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "pyim-basedict";
|
||||
ename = "pyim-basedict";
|
||||
version = "0.5.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/pyim-basedict-0.5.0.tar";
|
||||
sha256 = "0h946wsnbbii32kl2kpv0k1kq118ymvpd5q1mphfsf126dz9sv78";
|
||||
};
|
||||
packageRequires = [];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/pyim-basedict.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
python = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "python";
|
||||
@ -3073,10 +3133,10 @@
|
||||
elpaBuild {
|
||||
pname = "rt-liberation";
|
||||
ename = "rt-liberation";
|
||||
version = "2.2";
|
||||
version = "2.3";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/rt-liberation-2.2.tar";
|
||||
sha256 = "01nkkrgygq5p5s0pfxpcn794jr6ln65ad809v9mvzz7972xw625s";
|
||||
url = "https://elpa.gnu.org/packages/rt-liberation-2.3.tar";
|
||||
sha256 = "0sqq5zfzx9dir6d6zvg7vj5v629b508bbxsp7j0sp21rr4fw9nn0";
|
||||
};
|
||||
packageRequires = [];
|
||||
meta = {
|
||||
@ -3469,10 +3529,10 @@
|
||||
elpaBuild {
|
||||
pname = "swiper";
|
||||
ename = "swiper";
|
||||
version = "0.13.1";
|
||||
version = "0.13.4";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/swiper-0.13.1.tar";
|
||||
sha256 = "0k39pa89y0bfvdfqg3nc5pjq5mwxwimc4ma3z28vaf14zd38x9m1";
|
||||
url = "https://elpa.gnu.org/packages/swiper-0.13.4.tar";
|
||||
sha256 = "197pq2cvvskib87aky907wv2am55vilr7y5dabmmm07a8vr9py0v";
|
||||
};
|
||||
packageRequires = [ emacs ivy ];
|
||||
meta = {
|
||||
@ -3799,10 +3859,10 @@
|
||||
elpaBuild {
|
||||
pname = "verilog-mode";
|
||||
ename = "verilog-mode";
|
||||
version = "2020.6.27.14326051";
|
||||
version = "2021.2.2.263931197";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/verilog-mode-2020.6.27.14326051.el";
|
||||
sha256 = "194gn8cj01jb9xcl0qq3gq6mzxfdyn459ysb35fnib7pcnafm188";
|
||||
url = "https://elpa.gnu.org/packages/verilog-mode-2021.2.2.263931197.tar";
|
||||
sha256 = "0rizadyzrsprc3mw3h2ag4760wapx5gxzsr11rgrllwzzqwin1ks";
|
||||
};
|
||||
packageRequires = [];
|
||||
meta = {
|
||||
|
@ -4,10 +4,10 @@
|
||||
elpaBuild {
|
||||
pname = "org";
|
||||
ename = "org";
|
||||
version = "20210301";
|
||||
version = "20210308";
|
||||
src = fetchurl {
|
||||
url = "https://orgmode.org/elpa/org-20210301.tar";
|
||||
sha256 = "0930km35lvbw89ifrqmcv96fjmp4fi12yv3spn51q27sfsmzqsrj";
|
||||
url = "https://orgmode.org/elpa/org-20210308.tar";
|
||||
sha256 = "1i5zga615inn5s547329g6paqbzcbhyj9hxv14c0c1m9bhra5bjs";
|
||||
};
|
||||
packageRequires = [];
|
||||
meta = {
|
||||
@ -19,10 +19,10 @@
|
||||
elpaBuild {
|
||||
pname = "org-plus-contrib";
|
||||
ename = "org-plus-contrib";
|
||||
version = "20210301";
|
||||
version = "20210308";
|
||||
src = fetchurl {
|
||||
url = "https://orgmode.org/elpa/org-plus-contrib-20210301.tar";
|
||||
sha256 = "11mwar5x848iwc1cdssr3vyx0amji840x6f0dmjpigngpcnj02m8";
|
||||
url = "https://orgmode.org/elpa/org-plus-contrib-20210308.tar";
|
||||
sha256 = "1agbxhjkkmf4p8p8mwc6sv77ij22dr5fyhkpsnljvzkidiarfldf";
|
||||
};
|
||||
packageRequires = [];
|
||||
meta = {
|
||||
|
File diff suppressed because it is too large
Load Diff
46
pkgs/applications/editors/kakoune/plugins/aliases.nix
Normal file
46
pkgs/applications/editors/kakoune/plugins/aliases.nix
Normal file
@ -0,0 +1,46 @@
|
||||
# Deprecated aliases - for backward compatibility
|
||||
|
||||
lib: overriden:
|
||||
|
||||
with overriden;
|
||||
|
||||
let
|
||||
# Removing recurseForDerivation prevents derivations of aliased attribute
|
||||
# set to appear while listing all the packages available.
|
||||
removeRecurseForDerivations = alias: with lib;
|
||||
if alias.recurseForDerivations or false then
|
||||
removeAttrs alias ["recurseForDerivations"]
|
||||
else alias;
|
||||
|
||||
# Disabling distribution prevents top-level aliases for non-recursed package
|
||||
# sets from building on Hydra.
|
||||
removeDistribute = alias: with lib;
|
||||
if isDerivation alias then
|
||||
dontDistribute alias
|
||||
else alias;
|
||||
|
||||
# Make sure that we are not shadowing something from
|
||||
# all-packages.nix.
|
||||
checkInPkgs = n: alias: if builtins.hasAttr n overriden
|
||||
then throw "Alias ${n} is still in kakounePlugins"
|
||||
else alias;
|
||||
|
||||
mapAliases = aliases:
|
||||
lib.mapAttrs (n: alias: removeDistribute
|
||||
(removeRecurseForDerivations
|
||||
(checkInPkgs n alias)))
|
||||
aliases;
|
||||
|
||||
deprecations = lib.mapAttrs (old: info:
|
||||
throw "${old} was renamed to ${info.new} on ${info.date}. Please update to ${info.new}."
|
||||
) (builtins.fromJSON (builtins.readFile ./deprecated.json));
|
||||
|
||||
in
|
||||
mapAliases ({
|
||||
kak-auto-pairs = auto-pairs-kak; # backwards compat, added 2021-01-04
|
||||
kak-buffers = kakoune-buffers; # backwards compat, added 2021-01-04
|
||||
kak-fzf = fzf-kak; # backwards compat, added 2021-01-04
|
||||
kak-powerline = powerline-kak; # backwards compat, added 2021-01-04
|
||||
kak-prelude = prelude-kak; # backwards compat, added 2021-01-04
|
||||
kak-vertical-selection = kakoune-vertical-selection; # backwards compat, added 2021-01-04
|
||||
} // deprecations)
|
@ -0,0 +1,33 @@
|
||||
{ lib, stdenv, rtpPath ? "share/kak/autoload/plugins" }:
|
||||
rec {
|
||||
buildKakounePlugin = attrs@{
|
||||
name ? "${attrs.pname}-${attrs.version}",
|
||||
namePrefix ? "kakplugin-",
|
||||
src,
|
||||
unpackPhase ? "",
|
||||
configurePhase ? "",
|
||||
buildPhase ? "",
|
||||
preInstall ? "",
|
||||
postInstall ? "",
|
||||
path ? lib.getName name,
|
||||
...
|
||||
}:
|
||||
stdenv.mkDerivation ((builtins.removeAttrs attrs [ "namePrefix" "path" ]) // {
|
||||
name = namePrefix + name;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
target=$out/${rtpPath}/${path}
|
||||
mkdir -p $out/${rtpPath}
|
||||
cp -r . $target
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
});
|
||||
|
||||
buildKakounePluginFrom2Nix = attrs: buildKakounePlugin ({
|
||||
buildPhase = ":";
|
||||
configurePhase = ":";
|
||||
} // attrs);
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
{ lib, stdenv, fetchFromGitLab }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "case.kak";
|
||||
version = "unstable-2020-04-06";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "FlyingWombat";
|
||||
repo = "case.kak";
|
||||
rev = "6f1511820aa3abfa118e0f856118adc8113e2185";
|
||||
sha256 = "002njrlwgakqgp74wivbppr9qyn57dn4n5bxkr6k6nglk9qndwdp";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r rc/case.kak $out/share/kak/autoload/plugins
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Case convention conversion for Kakoune";
|
||||
homepage = "https://gitlab.com/FlyingWombat/case.kak";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
||||
|
@ -1,17 +1,25 @@
|
||||
{ pkgs, parinfer-rust, rep, kak-lsp }:
|
||||
{ callPackage, config, kakouneUtils, lib }:
|
||||
|
||||
{
|
||||
inherit parinfer-rust rep kak-lsp;
|
||||
let
|
||||
|
||||
case-kak = pkgs.callPackage ./case.kak.nix { };
|
||||
kak-ansi = pkgs.callPackage ./kak-ansi.nix { };
|
||||
kak-auto-pairs = pkgs.callPackage ./kak-auto-pairs.nix { };
|
||||
kak-buffers = pkgs.callPackage ./kak-buffers.nix { };
|
||||
kak-fzf = pkgs.callPackage ./kak-fzf.nix { };
|
||||
kak-plumb = pkgs.callPackage ./kak-plumb.nix { };
|
||||
kak-powerline = pkgs.callPackage ./kak-powerline.nix { };
|
||||
kak-prelude = pkgs.callPackage ./kak-prelude.nix { };
|
||||
kak-vertical-selection = pkgs.callPackage ./kak-vertical-selection.nix { };
|
||||
openscad-kak = pkgs.callPackage ./openscad.kak.nix { };
|
||||
quickscope-kak = pkgs.callPackage ./quickscope.kak.nix { };
|
||||
}
|
||||
inherit (kakouneUtils.override {}) buildKakounePluginFrom2Nix;
|
||||
|
||||
plugins = callPackage ./generated.nix {
|
||||
inherit buildKakounePluginFrom2Nix overrides;
|
||||
};
|
||||
|
||||
# TL;DR
|
||||
# * Add your plugin to ./kakoune-plugin-names
|
||||
# * run ./update.py
|
||||
#
|
||||
# If additional modifications to the build process are required,
|
||||
# add to ./overrides.nix.
|
||||
overrides = callPackage ./overrides.nix {
|
||||
inherit buildKakounePluginFrom2Nix;
|
||||
};
|
||||
|
||||
aliases = lib.optionalAttrs (config.allowAliases or true) (import ./aliases.nix lib plugins);
|
||||
|
||||
in
|
||||
|
||||
plugins // aliases
|
||||
|
@ -0,0 +1 @@
|
||||
{}
|
211
pkgs/applications/editors/kakoune/plugins/generated.nix
Normal file
211
pkgs/applications/editors/kakoune/plugins/generated.nix
Normal file
@ -0,0 +1,211 @@
|
||||
# This file has been generated by ./pkgs/applications/editors/kakoune/plugins/update.py. Do not edit!
|
||||
{ lib, buildKakounePluginFrom2Nix, fetchFromGitHub, overrides ? (self: super: {}) }:
|
||||
let
|
||||
packages = ( self:
|
||||
{
|
||||
active-window-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "active-window-kak";
|
||||
version = "2020-05-13";
|
||||
src = fetchFromGitHub {
|
||||
owner = "greenfork";
|
||||
repo = "active-window.kak";
|
||||
rev = "988db69cfbb88bd741d089bb43b0be551693e7c1";
|
||||
sha256 = "1fv1cp9q212gamf9z2papl5xcl2w31fpcmbgdzbxcxdl1pvfsqp8";
|
||||
};
|
||||
meta.homepage = "https://github.com/greenfork/active-window.kak/";
|
||||
};
|
||||
|
||||
auto-pairs-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "auto-pairs-kak";
|
||||
version = "2020-10-04";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "auto-pairs.kak";
|
||||
rev = "fd735ec149ef0d9ca5f628a95b1e52858b5afbdc";
|
||||
sha256 = "07795kv9njlnp6mckwv141ny2ns6wyf5r0dfjaxh9ngd105zgif1";
|
||||
};
|
||||
meta.homepage = "https://github.com/alexherbo2/auto-pairs.kak/";
|
||||
};
|
||||
|
||||
connect-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "connect-kak";
|
||||
version = "2021-02-13";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "connect.kak";
|
||||
rev = "0858c0e50c6ca6d214fb088f052385a242548e83";
|
||||
sha256 = "1w4pwybg3v916hcyc49gz0blygv54ivv81x8fxp44ck0sy98idr3";
|
||||
};
|
||||
meta.homepage = "https://github.com/alexherbo2/connect.kak/";
|
||||
};
|
||||
|
||||
fzf-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "fzf-kak";
|
||||
version = "2021-01-27";
|
||||
src = fetchFromGitHub {
|
||||
owner = "andreyorst";
|
||||
repo = "fzf.kak";
|
||||
rev = "e10de405e2a98e910d0808059200d206ba80f865";
|
||||
sha256 = "1hbsm1k8k0cgv7gxqicvnl22n2lb1plhkanniggk694gll22lq68";
|
||||
};
|
||||
meta.homepage = "https://github.com/andreyorst/fzf.kak/";
|
||||
};
|
||||
|
||||
kakoune-buffer-switcher = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-buffer-switcher";
|
||||
version = "2020-12-27";
|
||||
src = fetchFromGitHub {
|
||||
owner = "occivink";
|
||||
repo = "kakoune-buffer-switcher";
|
||||
rev = "6a27c45db87a23070c34fab36d2f8d812cd002a6";
|
||||
sha256 = "1rmwy317908v8p54806m721bpzm8sgygb9abri34537ka6r05y5j";
|
||||
};
|
||||
meta.homepage = "https://github.com/occivink/kakoune-buffer-switcher/";
|
||||
};
|
||||
|
||||
kakoune-buffers = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-buffers";
|
||||
version = "2020-06-11";
|
||||
src = fetchFromGitHub {
|
||||
owner = "Delapouite";
|
||||
repo = "kakoune-buffers";
|
||||
rev = "67959fbad727ba8470fe8cd6361169560f4fb532";
|
||||
sha256 = "09prhzz4yzf6ryw0npd1gpcfp77681vgawpp1ilfvbf25xgbbz33";
|
||||
};
|
||||
meta.homepage = "https://github.com/Delapouite/kakoune-buffers/";
|
||||
};
|
||||
|
||||
kakoune-easymotion = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-easymotion";
|
||||
version = "2020-03-09";
|
||||
src = fetchFromGitHub {
|
||||
owner = "danr";
|
||||
repo = "kakoune-easymotion";
|
||||
rev = "0ca75450023a149efc70e8e383e459b571355c70";
|
||||
sha256 = "15czvl0qj2k767pysr6xk2v31mkhvcbmv76xs2a8yrslchms70b5";
|
||||
};
|
||||
meta.homepage = "https://github.com/danr/kakoune-easymotion/";
|
||||
};
|
||||
|
||||
kakoune-extra-filetypes = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-extra-filetypes";
|
||||
version = "2021-01-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "kakoune-editor";
|
||||
repo = "kakoune-extra-filetypes";
|
||||
rev = "c6f8aaccd8c9cd6b487964c8943416e21fbe7c18";
|
||||
sha256 = "1vkff8xbycfgxv8x09cvc79qcg5fdzn2x77mbmifmkq236khrwrg";
|
||||
};
|
||||
meta.homepage = "https://github.com/kakoune-editor/kakoune-extra-filetypes/";
|
||||
};
|
||||
|
||||
kakoune-rainbow = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-rainbow";
|
||||
version = "2020-09-01";
|
||||
src = fetchFromGitHub {
|
||||
owner = "listentolist";
|
||||
repo = "kakoune-rainbow";
|
||||
rev = "d09103e8d268cf4621215bf162a0244c9482be3c";
|
||||
sha256 = "1i3id7xw0j4z1a14mscr68ckpgvcwsjpl86lr864wy7w7qcmblx6";
|
||||
};
|
||||
meta.homepage = "https://github.com/listentolist/kakoune-rainbow/";
|
||||
};
|
||||
|
||||
kakoune-registers = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-registers";
|
||||
version = "2020-06-19";
|
||||
src = fetchFromGitHub {
|
||||
owner = "Delapouite";
|
||||
repo = "kakoune-registers";
|
||||
rev = "9531947baecd83c1d4c3bea0adf10f4462f1e120";
|
||||
sha256 = "08v9ndghh7wvr8rsrqm05gksk9ai5vnwvw9gwqasbppb48cv4a8c";
|
||||
};
|
||||
meta.homepage = "https://github.com/Delapouite/kakoune-registers/";
|
||||
};
|
||||
|
||||
kakoune-vertical-selection = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-vertical-selection";
|
||||
version = "2019-04-11";
|
||||
src = fetchFromGitHub {
|
||||
owner = "occivink";
|
||||
repo = "kakoune-vertical-selection";
|
||||
rev = "c420f8b867ce47375fac303886e31623669a42b7";
|
||||
sha256 = "13jdyd2j45wvgqvxdzw9zww14ly93bqjb6700zzxj7mkbiff6wsb";
|
||||
};
|
||||
meta.homepage = "https://github.com/occivink/kakoune-vertical-selection/";
|
||||
};
|
||||
|
||||
openscad-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "openscad-kak";
|
||||
version = "2020-12-10";
|
||||
src = fetchFromGitHub {
|
||||
owner = "mayjs";
|
||||
repo = "openscad.kak";
|
||||
rev = "ba51bbdcd96ccf94bb9239bef1481b6f37125849";
|
||||
sha256 = "15dybd6dnnwla6mj8sw83nwd62para1syxzifznl6rz6kp8vqjjj";
|
||||
};
|
||||
meta.homepage = "https://github.com/mayjs/openscad.kak/";
|
||||
};
|
||||
|
||||
powerline-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "powerline-kak";
|
||||
version = "2021-02-15";
|
||||
src = fetchFromGitHub {
|
||||
owner = "jdugan6240";
|
||||
repo = "powerline.kak";
|
||||
rev = "322a760daa099d519ff50d14c29b27f3e2af00d1";
|
||||
sha256 = "0mb8f8p6g75p05ifp45i0gbq2mib8c8giz7r1xfd0yrwspp4aksc";
|
||||
};
|
||||
meta.homepage = "https://github.com/jdugan6240/powerline.kak/";
|
||||
};
|
||||
|
||||
prelude-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "prelude-kak";
|
||||
version = "2020-09-06";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "prelude.kak";
|
||||
rev = "f1e0f4d5cb62a36924e3f8ba6824d6aed8c19d23";
|
||||
sha256 = "1pncr8azqvl2z9yvzhc68p1s9fld8cvak8yz88zgrp5ypx2cxl8c";
|
||||
};
|
||||
meta.homepage = "https://github.com/alexherbo2/prelude.kak/";
|
||||
};
|
||||
|
||||
replace-mode-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "replace-mode-kak";
|
||||
version = "2020-10-07";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "replace-mode.kak";
|
||||
rev = "5f4c73cdbaf5aeb964ee35ad4b9081b233af90c0";
|
||||
sha256 = "1cmylx99bm7jwfb4hclb69sdc4n8f29ssyy2byjiw53ni9rnc8q0";
|
||||
};
|
||||
meta.homepage = "https://github.com/alexherbo2/replace-mode.kak/";
|
||||
};
|
||||
|
||||
sleuth-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "sleuth-kak";
|
||||
version = "2020-11-06";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "sleuth.kak";
|
||||
rev = "911db8bd208ad0d289b8fa15a2ac665ff39bd6bd";
|
||||
sha256 = "0g41c0038fpmihqva71xl4vfbmvsp13i47gp6fnmaikajpynzc51";
|
||||
};
|
||||
meta.homepage = "https://github.com/alexherbo2/sleuth.kak/";
|
||||
};
|
||||
|
||||
tabs-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "tabs-kak";
|
||||
version = "2021-02-16";
|
||||
src = fetchFromGitHub {
|
||||
owner = "enricozb";
|
||||
repo = "tabs.kak";
|
||||
rev = "1aaa8cd89e404cbbd76d44ff8089de0951612fbf";
|
||||
sha256 = "0dfz6j6yxl65jbh4xvpiy2abr2sdjyalynzhl28y7l1gzqv4ni3j";
|
||||
};
|
||||
meta.homepage = "https://github.com/enricozb/tabs.kak/";
|
||||
};
|
||||
|
||||
});
|
||||
in lib.fix' (lib.extends overrides packages)
|
@ -1,32 +0,0 @@
|
||||
{ lib, stdenv, fetchFromGitHub }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "kak-ansi";
|
||||
version = "0.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "eraserhd";
|
||||
repo = "kak-ansi";
|
||||
rev = "v${version}";
|
||||
sha256 = "0ddjih8hfyf6s4g7y46p1355kklaw1ydzzh61141i0r45wyb2d0d";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/share/kak/autoload/plugins/
|
||||
cp kak-ansi-filter $out/bin/
|
||||
# Hard-code path of filter and don't try to build when Kakoune boots
|
||||
sed '
|
||||
/^declare-option.* ansi_filter /i\
|
||||
declare-option -hidden str ansi_filter %{'"$out"'/bin/kak-ansi-filter}
|
||||
/^declare-option.* ansi_filter /,/^}/d
|
||||
' rc/ansi.kak >$out/share/kak/autoload/plugins/ansi.kak
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Kakoune support for rendering ANSI code";
|
||||
homepage = "https://github.com/eraserhd/kak-ansi";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
{ lib, stdenv, fetchFromGitHub }:
|
||||
stdenv.mkDerivation {
|
||||
name = "kak-auto-pairs";
|
||||
version = "2020-07-14";
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "auto-pairs.kak";
|
||||
rev = "5b4b3b723c34c8b7f40cee60868204974349bf9f";
|
||||
sha256 = "1wgrv03f1lkzflbbaz8n23glij5rvfxf8pcqysd668mbx1hcrk9i";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r rc $out/share/kak/autoload/plugins/auto-pairs
|
||||
'';
|
||||
|
||||
meta = with lib;
|
||||
{ description = "Kakoune extension to enable automatic closing of pairs";
|
||||
homepage = "https://github.com/alexherbo2/auto-pairs.kak";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ nrdxp ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
{ stdenv, fetchFromGitHub, lib }:
|
||||
stdenv.mkDerivation {
|
||||
name = "kak-buffers";
|
||||
version = "2019-04-03";
|
||||
src = fetchFromGitHub {
|
||||
owner = "Delapouite";
|
||||
repo = "kakoune-buffers";
|
||||
rev = "3b35b23ac2be661a37c085d34dd04d066450f757";
|
||||
sha256 = "0f3g0v1sjinii3ig9753jjj35v2km4h9bcfw9xgzwz8b10d75bax";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r buffers.kak $out/share/kak/autoload/plugins
|
||||
'';
|
||||
|
||||
meta = with lib;
|
||||
{ description = "Ease navigation between opened buffers in Kakoune";
|
||||
homepage = "https://github.com/Delapouite/kakoune-buffers";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ nrdxp ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
{ lib, stdenv, fetchFromGitHub, fzf }:
|
||||
|
||||
assert lib.asserts.assertOneOf "fzf" fzf.pname [ "fzf" "skim" ];
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "kak-fzf";
|
||||
version = "2020-07-26";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "andreyorst";
|
||||
repo = "fzf.kak";
|
||||
rev = "f23daa698ad95493fbd675ae153e3cac13ef34e9";
|
||||
hash = "sha256-BfXHTJ371ThOizMI/4BAbdJoaltGSP586hz4HqX1KWA=";
|
||||
};
|
||||
|
||||
configurePhase = ''
|
||||
if [[ -x "${fzf}/bin/fzf" ]]; then
|
||||
fzfImpl='${fzf}/bin/fzf'
|
||||
else
|
||||
fzfImpl='${fzf}/bin/sk'
|
||||
fi
|
||||
|
||||
substituteInPlace rc/fzf.kak \
|
||||
--replace \'fzf\' \'"$fzfImpl"\'
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r rc $out/share/kak/autoload/plugins/fzf
|
||||
'';
|
||||
|
||||
meta = with lib;
|
||||
{ description = "Kakoune plugin that brings integration with fzf";
|
||||
homepage = "https://github.com/andreyorst/fzf.kak";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ nrdxp ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
{ lib, stdenv, fetchFromGitHub, kakoune-unwrapped, plan9port, ... }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "kak-plumb";
|
||||
version = "0.1.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "eraserhd";
|
||||
repo = "kak-plumb";
|
||||
rev = "v${version}";
|
||||
sha256 = "1rz6pr786slnf1a78m3sj09axr4d2lb5rg7sfa4mfg1zcjh06ps6";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/share/kak/autoload/plugins/
|
||||
substitute rc/plumb.kak $out/share/kak/autoload/plugins/plumb.kak \
|
||||
--replace '9 plumb' '${plan9port}/bin/9 plumb'
|
||||
substitute edit-client $out/bin/edit-client \
|
||||
--replace '9 9p' '${plan9port}/bin/9 9p' \
|
||||
--replace 'kak -p' '${kakoune-unwrapped}/bin/kak -p'
|
||||
chmod +x $out/bin/edit-client
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Kakoune integration with the Plan 9 plumber";
|
||||
homepage = "https://github.com/eraserhd/kak-plumb";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
{ stdenv, git, fetchFromGitHub, lib }:
|
||||
stdenv.mkDerivation {
|
||||
name = "kak-powerline";
|
||||
version = "2020-08-22";
|
||||
src = fetchFromGitHub {
|
||||
owner = "jdugan6240";
|
||||
repo = "powerline.kak";
|
||||
rev = "d641b2cd8024f872bcda23f9256e7aff36da02ae";
|
||||
sha256 = "65948f5ef3ab2f46f6d186ad752665c251d887631d439949decc2654a67958a4";
|
||||
};
|
||||
|
||||
configurePhase = ''
|
||||
substituteInPlace rc/modules/git.kak \
|
||||
--replace \'git\' \'${git}/bin/git\'
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r rc $out/share/kak/autoload/plugins/powerline
|
||||
'';
|
||||
|
||||
meta = with lib;
|
||||
{ description = "Kakoune modeline, but with passion";
|
||||
homepage = "https://github.com/jdugan6240/powerline.kak";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ nrdxp ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
{ lib, stdenv, fetchFromGitHub }:
|
||||
stdenv.mkDerivation {
|
||||
name = "kak-prelude";
|
||||
version = "2020-06-09";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "alexherbo2";
|
||||
repo = "prelude.kak";
|
||||
rev = "f1e0f4d5cb62a36924e3f8ba6824d6aed8c19d23";
|
||||
sha256 = "1pncr8azqvl2z9yvzhc68p1s9fld8cvak8yz88zgrp5ypx2cxl8c";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r rc $out/share/kak/autoload/plugins/prelude
|
||||
'';
|
||||
|
||||
meta = with lib;
|
||||
{ description = "Prelude of shell blocks for Kakoune.";
|
||||
homepage = "https://github.com/alexherbo2/prelude.kak";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ buffet ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
{ stdenv, fetchFromGitHub, lib }:
|
||||
stdenv.mkDerivation {
|
||||
name = "kak-vertical-selection";
|
||||
version = "2019-04-11";
|
||||
src = fetchFromGitHub {
|
||||
owner = "occivink";
|
||||
repo = "kakoune-vertical-selection";
|
||||
rev = "c420f8b867ce47375fac303886e31623669a42b7";
|
||||
sha256 = "13jdyd2j45wvgqvxdzw9zww14ly93bqjb6700zzxj7mkbiff6wsb";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins
|
||||
cp -r vertical-selection.kak $out/share/kak/autoload/plugins
|
||||
'';
|
||||
|
||||
meta = with lib;
|
||||
{ description = "Select up and down lines that match the same pattern in Kakoune";
|
||||
homepage = "https://github.com/occivink/kakoune-vertical-selection";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ nrdxp ];
|
||||
platform = platforms.all;
|
||||
};
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
alexherbo2/auto-pairs.kak
|
||||
alexherbo2/connect.kak
|
||||
alexherbo2/prelude.kak
|
||||
alexherbo2/replace-mode.kak
|
||||
alexherbo2/sleuth.kak
|
||||
andreyorst/fzf.kak
|
||||
danr/kakoune-easymotion
|
||||
Delapouite/kakoune-buffers
|
||||
Delapouite/kakoune-registers
|
||||
enricozb/tabs.kak@main
|
||||
greenfork/active-window.kak
|
||||
jdugan6240/powerline.kak
|
||||
kakoune-editor/kakoune-extra-filetypes
|
||||
listentolist/kakoune-rainbow
|
||||
mayjs/openscad.kak
|
||||
occivink/kakoune-buffer-switcher
|
||||
occivink/kakoune-vertical-selection
|
@ -0,0 +1,4 @@
|
||||
{ lib, stdenv }:
|
||||
{
|
||||
inherit (import ./build-kakoune-plugin.nix { inherit lib stdenv; }) buildKakounePlugin buildKakounePluginFrom2Nix;
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
{ lib, stdenv, fetchFromGitHub }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "openscad.kak";
|
||||
version = "unstable-2019-11-08";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mayjs";
|
||||
repo = "openscad.kak";
|
||||
rev = "d9143d5e7834e3356b49720664d5647cab9db7cc";
|
||||
sha256 = "0j4dqhrn56z77hdalfdxagwz8h6nwr8s9i4w0bs2644k72lsm2ix";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
install -Dm644 rc/openscad.kak -t $out/share/kak/autoload/plugins/
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Syntax highlighting for OpenSCAD files";
|
||||
homepage = "https://github.com/mayjs/openscad.kak";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
161
pkgs/applications/editors/kakoune/plugins/overrides.nix
Normal file
161
pkgs/applications/editors/kakoune/plugins/overrides.nix
Normal file
@ -0,0 +1,161 @@
|
||||
{ lib, stdenv, fetchFromGitHub, fetchFromGitLab, fetchgit
|
||||
, buildKakounePluginFrom2Nix
|
||||
, kak-lsp, parinfer-rust, rep
|
||||
, fzf, git, guile, kakoune-unwrapped, lua5_3, plan9port
|
||||
}:
|
||||
|
||||
self: super: {
|
||||
inherit kak-lsp parinfer-rust rep;
|
||||
|
||||
case-kak = buildKakounePluginFrom2Nix {
|
||||
pname = "case-kak";
|
||||
version = "2020-04-06";
|
||||
src = fetchFromGitLab {
|
||||
owner = "FlyingWombat";
|
||||
repo = "case.kak";
|
||||
rev = "6f1511820aa3abfa118e0f856118adc8113e2185";
|
||||
sha256 = "002njrlwgakqgp74wivbppr9qyn57dn4n5bxkr6k6nglk9qndwdp";
|
||||
};
|
||||
meta.homepage = "https://gitlab.com/FlyingWombat/case.kak";
|
||||
};
|
||||
|
||||
fzf-kak = super.fzf-kak.overrideAttrs(oldAttrs: rec {
|
||||
preFixup = ''
|
||||
if [[ -x "${fzf}/bin/fzf" ]]; then
|
||||
fzfImpl='${fzf}/bin/fzf'
|
||||
else
|
||||
fzfImpl='${fzf}/bin/sk'
|
||||
fi
|
||||
|
||||
substituteInPlace $out/share/kak/autoload/plugins/fzf-kak/rc/fzf.kak \
|
||||
--replace \'fzf\' \'"$fzfImpl"\'
|
||||
'';
|
||||
});
|
||||
|
||||
kak-ansi = stdenv.mkDerivation rec {
|
||||
pname = "kak-ansi";
|
||||
version = "0.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "eraserhd";
|
||||
repo = "kak-ansi";
|
||||
rev = "v${version}";
|
||||
sha256 = "0ddjih8hfyf6s4g7y46p1355kklaw1ydzzh61141i0r45wyb2d0d";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/share/kak/autoload/plugins/
|
||||
cp kak-ansi-filter $out/bin/
|
||||
# Hard-code path of filter and don't try to build when Kakoune boots
|
||||
sed '
|
||||
/^declare-option.* ansi_filter /i\
|
||||
declare-option -hidden str ansi_filter %{'"$out"'/bin/kak-ansi-filter}
|
||||
/^declare-option.* ansi_filter /,/^}/d
|
||||
' rc/ansi.kak >$out/share/kak/autoload/plugins/ansi.kak
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Kakoune support for rendering ANSI code";
|
||||
homepage = "https://github.com/eraserhd/kak-ansi";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
};
|
||||
|
||||
kak-plumb = stdenv.mkDerivation rec {
|
||||
pname = "kak-plumb";
|
||||
version = "0.1.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "eraserhd";
|
||||
repo = "kak-plumb";
|
||||
rev = "v${version}";
|
||||
sha256 = "1rz6pr786slnf1a78m3sj09axr4d2lb5rg7sfa4mfg1zcjh06ps6";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/share/kak/autoload/plugins/
|
||||
substitute rc/plumb.kak $out/share/kak/autoload/plugins/plumb.kak \
|
||||
--replace '9 plumb' '${plan9port}/bin/9 plumb'
|
||||
substitute edit-client $out/bin/edit-client \
|
||||
--replace '9 9p' '${plan9port}/bin/9 9p' \
|
||||
--replace 'kak -p' '${kakoune-unwrapped}/bin/kak -p'
|
||||
chmod +x $out/bin/edit-client
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Kakoune integration with the Plan 9 plumber";
|
||||
homepage = "https://github.com/eraserhd/kak-plumb";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
};
|
||||
|
||||
kakoune-rainbow = super.kakoune-rainbow.overrideAttrs(oldAttrs: rec {
|
||||
preFixup = ''
|
||||
mkdir -p $out/bin
|
||||
mv $out/share/kak/autoload/plugins/kakoune-rainbow/bin/kak-rainbow.scm $out/bin
|
||||
substituteInPlace $out/bin/kak-rainbow.scm \
|
||||
--replace '/usr/bin/env -S guile' '${guile}/bin/guile'
|
||||
substituteInPlace $out/share/kak/autoload/plugins/kakoune-rainbow/rainbow.kak \
|
||||
--replace '%sh{dirname "$kak_source"}' "'$out'"
|
||||
'';
|
||||
});
|
||||
|
||||
kakoune-state-save = buildKakounePluginFrom2Nix {
|
||||
pname = "kakoune-state-save";
|
||||
version = "2020-02-09";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "Screwtapello";
|
||||
repo = "kakoune-state-save";
|
||||
rev = "ab7c0c765326a4a80af78857469ee8c80814c52a";
|
||||
sha256 = "AAOCG0TY3G188NnkkwMCSbkkNe487F4gwiFWwG9Yo+A=";
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "Help Kakoune save and restore state between sessions";
|
||||
homepage = "https://gitlab.com/Screwtapello/kakoune-state-save";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ Flakebi ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
};
|
||||
|
||||
powerline-kak = super.powerline-kak.overrideAttrs(oldAttrs: rec {
|
||||
preFixup = ''
|
||||
substituteInPlace $out/share/kak/autoload/plugins/powerline-kak/rc/modules/git.kak \
|
||||
--replace ' git ' ' ${git}/bin/git '
|
||||
'';
|
||||
});
|
||||
|
||||
quickscope-kak = buildKakounePluginFrom2Nix rec {
|
||||
pname = "quickscope-kak";
|
||||
version = "1.0.0";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://git.sr.ht/~voroskoi/quickscope.kak";
|
||||
rev = "v${version}";
|
||||
sha256 = "0y1g3zpa2ql8l9rl5i2w84bka8a09kig9nq9zdchaff5pw660mcx";
|
||||
};
|
||||
|
||||
buildInputs = [ lua5_3 ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins/
|
||||
cp quickscope.* $out/share/kak/autoload/plugins/
|
||||
# substituteInPlace does not like the pipe
|
||||
sed -e 's,[|] *lua,|${lua5_3}/bin/lua,' quickscope.kak >$out/share/kak/autoload/plugins/quickscope.kak
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Highlight f and t jump positions";
|
||||
homepage = "https://sr.ht/~voroskoi/quickscope.kak/";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
};
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
{ lib, stdenv, fetchgit, lua5_3 }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "quickscope-kak";
|
||||
version = "1.0.0";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://git.sr.ht/~voroskoi/quickscope.kak";
|
||||
rev = "v${version}";
|
||||
sha256 = "0y1g3zpa2ql8l9rl5i2w84bka8a09kig9nq9zdchaff5pw660mcx";
|
||||
};
|
||||
|
||||
buildInputs = [ lua5_3 ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/kak/autoload/plugins/
|
||||
cp quickscope.* $out/share/kak/autoload/plugins/
|
||||
# substituteInPlace does not like the pipe
|
||||
sed -e 's,[|] *lua,|${lua5_3}/bin/lua,' quickscope.kak >$out/share/kak/autoload/plugins/quickscope.kak
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Highlight f and t jump positions";
|
||||
homepage = "https://sr.ht/~voroskoi/quickscope.kak/";
|
||||
license = licenses.unlicense;
|
||||
maintainers = with maintainers; [ eraserhd ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
91
pkgs/applications/editors/kakoune/plugins/update.py
Executable file
91
pkgs/applications/editors/kakoune/plugins/update.py
Executable file
@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -p nix-prefetch-git -p python3 -p python3Packages.GitPython nix -i python3
|
||||
|
||||
# format:
|
||||
# $ nix run nixpkgs.python3Packages.black -c black update.py
|
||||
# type-check:
|
||||
# $ nix run nixpkgs.python3Packages.mypy -c mypy update.py
|
||||
# linted:
|
||||
# $ nix run nixpkgs.python3Packages.flake8 -c flake8 --ignore E501,E265,E402 update.py
|
||||
|
||||
import inspect
|
||||
import os
|
||||
import sys
|
||||
from typing import List, Tuple
|
||||
from pathlib import Path
|
||||
|
||||
# Import plugin update library from maintainers/scripts/pluginupdate.py
|
||||
ROOT = Path(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
|
||||
sys.path.insert(
|
||||
0, os.path.join(ROOT.parent.parent.parent.parent.parent, "maintainers", "scripts")
|
||||
)
|
||||
import pluginupdate
|
||||
|
||||
GET_PLUGINS = f"""(with import <localpkgs> {{}};
|
||||
let
|
||||
inherit (kakouneUtils.override {{}}) buildKakounePluginFrom2Nix;
|
||||
generated = callPackage {ROOT}/generated.nix {{
|
||||
inherit buildKakounePluginFrom2Nix;
|
||||
}};
|
||||
hasChecksum = value: lib.isAttrs value && lib.hasAttrByPath ["src" "outputHash"] value;
|
||||
getChecksum = name: value:
|
||||
if hasChecksum value then {{
|
||||
submodules = value.src.fetchSubmodules or false;
|
||||
sha256 = value.src.outputHash;
|
||||
rev = value.src.rev;
|
||||
}} else null;
|
||||
checksums = lib.mapAttrs getChecksum generated;
|
||||
in lib.filterAttrs (n: v: v != null) checksums)"""
|
||||
|
||||
HEADER = "# This file has been generated by ./pkgs/applications/editors/kakoune/plugins/update.py. Do not edit!"
|
||||
|
||||
|
||||
def generate_nix(plugins: List[Tuple[str, str, pluginupdate.Plugin]], outfile: str):
|
||||
sorted_plugins = sorted(plugins, key=lambda v: v[2].name.lower())
|
||||
|
||||
with open(outfile, "w+") as f:
|
||||
f.write(HEADER)
|
||||
f.write(
|
||||
"""
|
||||
{ lib, buildKakounePluginFrom2Nix, fetchFromGitHub, overrides ? (self: super: {}) }:
|
||||
let
|
||||
packages = ( self:
|
||||
{"""
|
||||
)
|
||||
for owner, repo, plugin in sorted_plugins:
|
||||
if plugin.has_submodules:
|
||||
submodule_attr = "\n fetchSubmodules = true;"
|
||||
else:
|
||||
submodule_attr = ""
|
||||
|
||||
f.write(
|
||||
f"""
|
||||
{plugin.normalized_name} = buildKakounePluginFrom2Nix {{
|
||||
pname = "{plugin.normalized_name}";
|
||||
version = "{plugin.version}";
|
||||
src = fetchFromGitHub {{
|
||||
owner = "{owner}";
|
||||
repo = "{repo}";
|
||||
rev = "{plugin.commit}";
|
||||
sha256 = "{plugin.sha256}";{submodule_attr}
|
||||
}};
|
||||
meta.homepage = "https://github.com/{owner}/{repo}/";
|
||||
}};
|
||||
"""
|
||||
)
|
||||
f.write(
|
||||
"""
|
||||
});
|
||||
in lib.fix' (lib.extends overrides packages)
|
||||
"""
|
||||
)
|
||||
print(f"updated {outfile}")
|
||||
|
||||
|
||||
def main():
|
||||
editor = pluginupdate.Editor("kakoune", ROOT, GET_PLUGINS, generate_nix)
|
||||
pluginupdate.update_plugins(editor)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
@ -46,13 +46,13 @@ let
|
||||
in
|
||||
mkDerivation rec {
|
||||
pname = "crow-translate";
|
||||
version = "2.7.1";
|
||||
version = "2.8.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "crow-translate";
|
||||
repo = "crow-translate";
|
||||
rev = version;
|
||||
sha256 = "sha256-YOsp/noGsYthre18fMyBj9s+YFzdHJfIJzJSm43wiZ0=";
|
||||
sha256 = "sha256-kpr3Xn1ZLBS1fVhhJ/sxo8UgB4M+SdOVhddnU8pNUfA=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
@ -14,11 +14,11 @@ let
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "mkgmap";
|
||||
version = "4604";
|
||||
version = "4608";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://www.mkgmap.org.uk/download/mkgmap-r${version}-src.tar.gz";
|
||||
sha256 = "HmQwi3kIVhZOQpSfG3V48vUTbncsJLb/YCqsXrmtmQM=";
|
||||
sha256 = "uj/iZZHML4nqEKdFBQSDdegkalZFJdzEE4xQrOruEp0=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "pdfsam-basic";
|
||||
version = "4.2.2";
|
||||
version = "4.2.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/torakiki/pdfsam/releases/download/v${version}/pdfsam_${version}-1_amd64.deb";
|
||||
sha256 = "sha256-fbcU3NZdQ8NR5tLjEJyOPneVWNMBddLdttLeVwIUtpg=";
|
||||
sha256 = "sha256-WmJ+atndIXm5Z6RvRVSvf2de1Gda+cs5kSw4iotPVfU=";
|
||||
};
|
||||
|
||||
unpackPhase = ''
|
||||
|
@ -19,13 +19,13 @@ let
|
||||
in
|
||||
buildGoModule rec {
|
||||
pname = "argo";
|
||||
version = "2.12.9";
|
||||
version = "2.12.10";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "argoproj";
|
||||
repo = "argo";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-WfyP48qOdFZfQ0+8AZDYokw7WK7lSx5di7z07gsRPZk=";
|
||||
sha256 = "sha256-A4s6D3/1FsqrJ+Jaql4IuyD9ySChL3SXqVvl8wUDRDE=";
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-4XPMixVNj6PUKobNLwpsOBT7Zs/7pkhDtQacLIB5EfE=";
|
||||
|
@ -20,19 +20,19 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "newsflash";
|
||||
version = "1.3.0";
|
||||
version = "1.4.0";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "news-flash";
|
||||
repo = "news_flash_gtk";
|
||||
rev = version;
|
||||
hash = "sha256-Vu8PXdnayrglAFVfO+WZTzk4Qrb/3uqzQIwClnRHto8=";
|
||||
hash = "sha256-EInI5Unaz9m8/gJ7vAzJVyMynJGq0KZh12dNK8r1wnY=";
|
||||
};
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoTarball {
|
||||
inherit src;
|
||||
name = "${pname}-${version}";
|
||||
hash = "sha256-dWumQi/Bk7w2C8zVVExxguWchZU+K2qTC02otsiK9jA=";
|
||||
hash = "sha256-xrWZhjfYnO6M3LMTP6l3+oZOusvUWuRBDesIlsiEJ6s=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
@ -2,16 +2,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "seaweedfs";
|
||||
version = "2.29";
|
||||
version = "2.31";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "chrislusf";
|
||||
repo = "seaweedfs";
|
||||
rev = version;
|
||||
sha256 = "sha256-wyqshtL3wGrmb1oEMOMk2QmDXW9M5tt9d1QEtMFiXa4=";
|
||||
sha256 = "sha256-0s/hcRUuskU4TZqk5h4A51mkEJ6uUZS42mKDQvSx3I4=";
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-uT/Y/TfpqDyOUElc4M/w/v77bWF3tTJz+Yu0KRMcxk4=";
|
||||
vendorSha256 = "sha256-QpGRQQbNchj0T9USRnALjvOGd2cV+JUgJeRgfjK8n5o=";
|
||||
|
||||
subPackages = [ "weed" ];
|
||||
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "SPAdes";
|
||||
version = "3.14.1";
|
||||
version = "3.15.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://cab.spbu.ru/files/release${version}/${pname}-${version}.tar.gz";
|
||||
sha256 = "1ji3afn6yvx7ysg7p9j0d1g28zrnxg1b7x90mhs2bj3lgs7vfafn";
|
||||
sha256 = "sha256-2wZzdFRZ7zyhWwYL+c/5qhKDgj+LPtnge3UNHWJ9Ykk=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
|
@ -2,10 +2,10 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "stacks";
|
||||
version = "2.53";
|
||||
version = "2.55";
|
||||
src = fetchurl {
|
||||
url = "http://catchenlab.life.illinois.edu/stacks/source/${pname}-${version}.tar.gz";
|
||||
sha256 = "1zchds205nwdqch1246953dr8c0019yas178qbq3jypbxvmgq7pf";
|
||||
sha256 = "sha256-p8L0F3A+GdNsPgTQNn9Em5EjFCc9f7gUvyLIRCTd05c=";
|
||||
};
|
||||
|
||||
buildInputs = [ zlib ];
|
||||
|
@ -21,11 +21,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "pcb";
|
||||
version = "4.2.2";
|
||||
version = "4.3.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/pcb/${pname}-${version}.tar.gz";
|
||||
sha256 = "0pbfyfadbia1jf9ywkf02j8mfdh8c3mj390c2jdqnl70vcdszvhw";
|
||||
sha256 = "sha256-roUvRq+Eq6f1HYE/uRb8f82+6kP3E08VBQcCThdD+14=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -1,11 +1,8 @@
|
||||
{ lib, fetchzip, makeWrapper, makeDesktopItem, stdenv
|
||||
, gtk, libXtst, glib, zlib
|
||||
, gtk3, libXtst, glib, zlib
|
||||
}:
|
||||
|
||||
let
|
||||
version = "1.7.0";
|
||||
arch = "x86_64";
|
||||
|
||||
desktopItem = makeDesktopItem rec {
|
||||
name = "TLA+Toolbox";
|
||||
exec = "tla-toolbox";
|
||||
@ -20,12 +17,12 @@ let
|
||||
};
|
||||
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
in stdenv.mkDerivation rec {
|
||||
pname = "tla-toolbox";
|
||||
inherit version;
|
||||
version = "1.7.1";
|
||||
src = fetchzip {
|
||||
url = "https://tla.msr-inria.inria.fr/tlatoolbox/products/TLAToolbox-${version}-linux.gtk.${arch}.zip";
|
||||
sha256 = "0v15wscawair5bghr5ixb4i062kmh9by1m0hnz2r1sawlqyafz02";
|
||||
url = "https://tla.msr-inria.inria.fr/tlatoolbox/products/TLAToolbox-${version}-linux.gtk.x86_64.zip";
|
||||
sha256 = "02a2y2mkfab5cczw8g604m61h4xr0apir49zbd1aq6mmgcgngw80";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
@ -33,6 +30,8 @@ in stdenv.mkDerivation {
|
||||
phases = [ "installPhase" ];
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p "$out/bin"
|
||||
cp -r "$src" "$out/toolbox"
|
||||
chmod -R +w "$out/toolbox"
|
||||
@ -43,12 +42,17 @@ in stdenv.mkDerivation {
|
||||
|
||||
patchelf \
|
||||
--set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
|
||||
--set-rpath "${lib.makeLibraryPath [ zlib ]}:$(patchelf --print-rpath $(find "$out/toolbox" -name java))" \
|
||||
"$(find "$out/toolbox" -name java)"
|
||||
|
||||
patchelf \
|
||||
--set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
|
||||
"$(find "$out/toolbox" -name jspawnhelper)"
|
||||
|
||||
makeWrapper $out/toolbox/toolbox $out/bin/tla-toolbox \
|
||||
--run "set -x; cd $out/toolbox" \
|
||||
--add-flags "-data ~/.tla-toolbox" \
|
||||
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ gtk libXtst glib zlib ]}"
|
||||
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ gtk3 libXtst glib zlib ]}"
|
||||
|
||||
echo -e "\nCreating TLA Toolbox icons..."
|
||||
pushd "$src"
|
||||
@ -63,6 +67,8 @@ in stdenv.mkDerivation {
|
||||
|
||||
echo -e "\nCreating TLA Toolbox desktop entry..."
|
||||
cp -r "${desktopItem}/share/applications"* "$out/share/applications"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
@ -75,7 +81,7 @@ in stdenv.mkDerivation {
|
||||
'';
|
||||
# http://lamport.azurewebsites.net/tla/license.html
|
||||
license = with lib.licenses; [ mit ];
|
||||
platforms = lib.platforms.linux;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
maintainers = [ ];
|
||||
};
|
||||
}
|
||||
|
@ -1,13 +1,13 @@
|
||||
{ lib, stdenv, fetchurl, libextractor, gettext }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "doodle-0.7.1";
|
||||
name = "doodle-0.7.2";
|
||||
|
||||
buildInputs = [ libextractor gettext ];
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://grothoff.org/christian/doodle/download/${name}.tar.gz";
|
||||
sha256 = "086va4q8swiablv5x72yikrdh5swhy7kzmg5wlszi5a7vjya29xw";
|
||||
sha256 = "sha256-dtRPfUjhBNgN+5zHMYmszISmBv1+K6yjKsbQBiAXWRA=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "libxmlb";
|
||||
version = "0.2.1";
|
||||
version = "0.3.0";
|
||||
|
||||
outputs = [ "out" "lib" "dev" "devdoc" "installedTests" ];
|
||||
|
||||
@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
|
||||
owner = "hughsie";
|
||||
repo = "libxmlb";
|
||||
rev = version;
|
||||
sha256 = "XD66YfD8fjaqp5pkcR8qNh7Srjh+atAIC2qkDTF7KdM=";
|
||||
sha256 = "sha256-prHsigfjifwiuBSUHaCWhjJIaw1LkOGHJu20cdPgH9c=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
@ -18,7 +18,7 @@ let
|
||||
# It will rebuild itself using the version of this package (NSS) and if
|
||||
# an update is required do the required changes to the expression.
|
||||
# Example: nix-shell ./maintainers/scripts/update.nix --argstr package cacert
|
||||
version = "3.61";
|
||||
version = "3.62";
|
||||
underscoreVersion = builtins.replaceStrings ["."] ["_"] version;
|
||||
|
||||
in stdenv.mkDerivation rec {
|
||||
@ -27,7 +27,7 @@ in stdenv.mkDerivation rec {
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://mozilla/security/nss/releases/NSS_${underscoreVersion}_RTM/src/${pname}-${version}.tar.gz";
|
||||
sha256 = "0w0k1v6pn2mv1vim7pv0xn63z1dcss6cymqbqzzg1k1l9f02sbii";
|
||||
sha256 = "0y2ld90bncjjggrn64c7g7mq9i03z6dc3r2kz978snz2xiydzml6";
|
||||
};
|
||||
|
||||
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
||||
|
@ -1,24 +1,49 @@
|
||||
{ aiohttp, aresponses, buildPythonPackage, fetchFromGitHub, isPy3k, lib
|
||||
, pytest-asyncio, pytestCheckHook, yarl }:
|
||||
{ lib
|
||||
, aiohttp
|
||||
, aresponses
|
||||
, buildPythonPackage
|
||||
, fetchFromGitHub
|
||||
, poetry-core
|
||||
, pytest-asyncio
|
||||
, pytestCheckHook
|
||||
, pythonOlder
|
||||
, yarl
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "adguardhome";
|
||||
version = "0.4.2";
|
||||
|
||||
disabled = !isPy3k;
|
||||
version = "0.5.0";
|
||||
format = "pyproject";
|
||||
disabled = pythonOlder "3.8";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "frenck";
|
||||
repo = "python-${pname}";
|
||||
rev = "v${version}";
|
||||
sha256 = "0lcf3yg27amrnqvgn5nw4jn2j0vj4yfmyl5p5yncmn7dh6bdbsp8";
|
||||
sha256 = "sha256-f8uZF4DXbfiL1nL82shjGNpo6lXSUomRgO1YnNT/GDw=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [ aiohttp yarl ];
|
||||
checkInputs = [ aresponses pytest-asyncio pytestCheckHook ];
|
||||
nativeBuildInputs = [ poetry-core ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
aiohttp
|
||||
yarl
|
||||
];
|
||||
|
||||
checkInputs = [
|
||||
aresponses
|
||||
pytest-asyncio
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml --replace "--cov" ""
|
||||
'';
|
||||
|
||||
pythonImportsCheck = [ "adguardhome" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Asynchronous Python client for the AdGuard Home API.";
|
||||
description = "Python client for the AdGuard Home API";
|
||||
homepage = "https://github.com/frenck/python-adguardhome";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ jamiemagee ];
|
||||
|
@ -9,16 +9,15 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "convertdate";
|
||||
version = "2.3.1";
|
||||
|
||||
version = "2.3.2";
|
||||
disabled = isPy27;
|
||||
|
||||
# Tests are not available in the PyPI tarball so use GitHub instead.
|
||||
src = fetchFromGitHub {
|
||||
owner = "fitnr";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "1g8sgd3xc9viy0kb1i4xp6bdn1hzwhrnk8kmismla88scivrhq32";
|
||||
rev = "v${version}";
|
||||
sha256 = "0k7j59sbqwyi72vcjx5vsh3qb6hxfnkfjkd2i6f6lckdr1bkh7fz";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
@ -30,6 +29,8 @@ buildPythonPackage rec {
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "convertdate" ];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/fitnr/convertdate";
|
||||
description = "Utils for converting between date formats and calculating holidays";
|
||||
|
@ -15,13 +15,13 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "hass-nabucasa";
|
||||
version = "0.41.0";
|
||||
version = "0.42.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "nabucasa";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "sha256-ewWw3PyJGRHP23J6WBBWs9YGl4vTb9/j/soZ6n5wbLM=";
|
||||
sha256 = "sha256-vDgjuNgwNp9cDgiCNxhACOcuaxcrR+0DW/U5OaSW0n4=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@ -49,7 +49,7 @@ buildPythonPackage rec {
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/NabuCasa/hass-nabucasa";
|
||||
description = "Home Assistant cloud integration by Nabu Casa, inc.";
|
||||
license = licenses.gpl3;
|
||||
license = licenses.gpl3Only;
|
||||
maintainers = with maintainers; [ Scriptkiddi ];
|
||||
};
|
||||
}
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "codeql";
|
||||
version = "2.4.4";
|
||||
version = "2.4.5";
|
||||
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
@ -20,7 +20,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/github/codeql-cli-binaries/releases/download/v${version}/codeql.zip";
|
||||
sha256 = "sha256-ZwGOk4HxURlPwGcWGHg6rqPh9ONPx9iJ2EB6lWKOMiY=";
|
||||
sha256 = "sha256-FM7fcjbZilp1spy0HxDhEAzs7Qe2r/HObKB80o4mSiw=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -3,13 +3,13 @@
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "qbs";
|
||||
|
||||
version = "1.17.0";
|
||||
version = "1.18.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "qbs";
|
||||
repo = "qbs";
|
||||
rev = "v${version}";
|
||||
sha256 = "0sd4qwl1wh8b1hck846plrgddkrdwdfqwk2dgh5hdsrlrvx5xjrr";
|
||||
sha256 = "sha256-W1ky3PWPzfKygY+diBld+BqTAxJvNw9mqw3owcQ6no4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ qmake ];
|
||||
|
@ -2,16 +2,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "cargo-criterion";
|
||||
version = "1.0.0";
|
||||
version = "1.0.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bheisler";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "0czagclrn4yhlvlh06wsyiybz69r7mmk3182fywzn9vd0xlclxpi";
|
||||
sha256 = "sha256-NiuK+PexfF2wmA8drqqkv/RQlVwYLT3q2QWvV0ghJwg=";
|
||||
};
|
||||
|
||||
cargoSha256 = "sha256-XZuZ81hB/GQDopJyfSkxQiehSwJz7VWoJR6/m3WLil8=";
|
||||
cargoSha256 = "sha256-A6Kkm/4MSAEJfehA6zSQJU+JwVIhKPcfMZCO9S6Zyx4=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "Cargo extension for running Criterion.rs benchmarks";
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "sd-local";
|
||||
version = "1.0.24";
|
||||
version = "1.0.26";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "screwdriver-cd";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-dqjZQyh7SWkD2dBcB32pR3PgWPMGQYPo7AkOQURt0hs=";
|
||||
sha256 = "sha256-JQeqCvnGWE0VesLQ6HbH7gikwAP3im19nBnwr1ruQqk=";
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-3KNYG6RBnfFRgIoIyAe7QwAB56ZMF8bHdgt9Ghtod20=";
|
||||
|
@ -1,14 +1,14 @@
|
||||
{ stdenv, lib, fetchFromGitLab, ncurses, pkg-config, nix-update-script }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "1.0.0";
|
||||
version = "1.0.1";
|
||||
pname = "cbonsai";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "jallbrit";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "1jc34j627pnyjgs8hjxqaa89j24gyf0rq9w61mkhgg0kria62as7";
|
||||
sha256 = "sha256-UTjbc0kGHOQse4sZF94p4LAwMk9vsZg1QHq8iuDcTDk=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
@ -25,11 +25,11 @@ let
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "unciv";
|
||||
version = "3.12.14";
|
||||
version = "3.13.7-patch2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/yairm210/Unciv/releases/download/${version}/Unciv.jar";
|
||||
sha256 = "sha256-FE6oPtEerjVusK3fpxLwcpvKjIAQl6oCrBj8GIkuVwU=";
|
||||
sha256 = "sha256-5QYUYTnRblWWLYnhR1DBzoAt4d9EiYeXhzJRODmDHUA=";
|
||||
};
|
||||
|
||||
dontUnpack = true;
|
||||
|
@ -1,4 +1,5 @@
|
||||
{lib, stdenv, fetchurl, unzip, autoreconfHook, libtool, makeWrapper, cups, ghostscript, pkgsi686Linux, zlib }:
|
||||
{ lib, stdenv, fetchurl, unzip, autoreconfHook, libtool, makeWrapper, cups
|
||||
, ghostscript, pkgsi686Linux, zlib }:
|
||||
|
||||
let
|
||||
|
||||
@ -20,7 +21,7 @@ in
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "canon-cups-ufr2";
|
||||
version = version;
|
||||
inherit version;
|
||||
src = src_canon;
|
||||
|
||||
phases = [ "unpackPhase" "installPhase" ];
|
||||
|
@ -1,4 +1,6 @@
|
||||
{lib, stdenv, fetchurl, cups, dpkg, gnused, makeWrapper, ghostscript, file, a2ps, coreutils, gawk, perl, gnugrep, which}:
|
||||
{ lib, stdenv, fetchurl, cups, dpkg, gnused, makeWrapper, ghostscript, file
|
||||
, a2ps, coreutils, perl, gnugrep, which
|
||||
}:
|
||||
|
||||
let
|
||||
version = "3.2.0-1";
|
||||
|
@ -6,180 +6,18 @@
|
||||
# type-check:
|
||||
# $ nix run nixpkgs.python3Packages.mypy -c mypy update.py
|
||||
# linted:
|
||||
# $ nix run nixpkgs.python3Packages.flake8 -c flake8 --ignore E501,E265 update.py
|
||||
# $ nix run nixpkgs.python3Packages.flake8 -c flake8 --ignore E501,E265,E402 update.py
|
||||
|
||||
import argparse
|
||||
import functools
|
||||
import http
|
||||
import json
|
||||
import inspect
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
import traceback
|
||||
import urllib.error
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
import xml.etree.ElementTree as ET
|
||||
from datetime import datetime
|
||||
from functools import wraps
|
||||
from multiprocessing.dummy import Pool
|
||||
from typing import List, Tuple
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional, Tuple, Union, Any, Callable
|
||||
from urllib.parse import urljoin, urlparse
|
||||
from tempfile import NamedTemporaryFile
|
||||
|
||||
import git
|
||||
|
||||
ATOM_ENTRY = "{http://www.w3.org/2005/Atom}entry" # " vim gets confused here
|
||||
ATOM_LINK = "{http://www.w3.org/2005/Atom}link" # "
|
||||
ATOM_UPDATED = "{http://www.w3.org/2005/Atom}updated" # "
|
||||
|
||||
ROOT = Path(__file__).parent
|
||||
DEFAULT_IN = ROOT.joinpath("vim-plugin-names")
|
||||
DEFAULT_OUT = ROOT.joinpath("generated.nix")
|
||||
DEPRECATED = ROOT.joinpath("deprecated.json")
|
||||
|
||||
def retry(ExceptionToCheck: Any, tries: int = 4, delay: float = 3, backoff: float = 2):
|
||||
"""Retry calling the decorated function using an exponential backoff.
|
||||
http://www.saltycrane.com/blog/2009/11/trying-out-retry-decorator-python/
|
||||
original from: http://wiki.python.org/moin/PythonDecoratorLibrary#Retry
|
||||
(BSD licensed)
|
||||
:param ExceptionToCheck: the exception on which to retry
|
||||
:param tries: number of times to try (not retry) before giving up
|
||||
:param delay: initial delay between retries in seconds
|
||||
:param backoff: backoff multiplier e.g. value of 2 will double the delay
|
||||
each retry
|
||||
"""
|
||||
|
||||
def deco_retry(f: Callable) -> Callable:
|
||||
@wraps(f)
|
||||
def f_retry(*args: Any, **kwargs: Any) -> Any:
|
||||
mtries, mdelay = tries, delay
|
||||
while mtries > 1:
|
||||
try:
|
||||
return f(*args, **kwargs)
|
||||
except ExceptionToCheck as e:
|
||||
print(f"{str(e)}, Retrying in {mdelay} seconds...")
|
||||
time.sleep(mdelay)
|
||||
mtries -= 1
|
||||
mdelay *= backoff
|
||||
return f(*args, **kwargs)
|
||||
|
||||
return f_retry # true decorator
|
||||
|
||||
return deco_retry
|
||||
|
||||
def make_request(url: str) -> urllib.request.Request:
|
||||
token = os.getenv("GITHUB_API_TOKEN")
|
||||
headers = {}
|
||||
if token is not None:
|
||||
headers["Authorization"] = f"token {token}"
|
||||
return urllib.request.Request(url, headers=headers)
|
||||
|
||||
class Repo:
|
||||
def __init__(
|
||||
self, owner: str, name: str, branch: str, alias: Optional[str]
|
||||
) -> None:
|
||||
self.owner = owner
|
||||
self.name = name
|
||||
self.branch = branch
|
||||
self.alias = alias
|
||||
self.redirect: Dict[str, str] = {}
|
||||
|
||||
def url(self, path: str) -> str:
|
||||
return urljoin(f"https://github.com/{self.owner}/{self.name}/", path)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"Repo({self.owner}, {self.name})"
|
||||
|
||||
@retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
|
||||
def has_submodules(self) -> bool:
|
||||
try:
|
||||
req = make_request(self.url(f"blob/{self.branch}/.gitmodules"))
|
||||
urllib.request.urlopen(req, timeout=10).close()
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code == 404:
|
||||
return False
|
||||
else:
|
||||
raise
|
||||
return True
|
||||
|
||||
@retry(urllib.error.URLError, tries=4, delay=3, backoff=2)
|
||||
def latest_commit(self) -> Tuple[str, datetime]:
|
||||
commit_url = self.url(f"commits/{self.branch}.atom")
|
||||
commit_req = make_request(commit_url)
|
||||
with urllib.request.urlopen(commit_req, timeout=10) as req:
|
||||
self.check_for_redirect(commit_url, req)
|
||||
xml = req.read()
|
||||
root = ET.fromstring(xml)
|
||||
latest_entry = root.find(ATOM_ENTRY)
|
||||
assert latest_entry is not None, f"No commits found in repository {self}"
|
||||
commit_link = latest_entry.find(ATOM_LINK)
|
||||
assert commit_link is not None, f"No link tag found feed entry {xml}"
|
||||
url = urlparse(commit_link.get("href"))
|
||||
updated_tag = latest_entry.find(ATOM_UPDATED)
|
||||
assert (
|
||||
updated_tag is not None and updated_tag.text is not None
|
||||
), f"No updated tag found feed entry {xml}"
|
||||
updated = datetime.strptime(updated_tag.text, "%Y-%m-%dT%H:%M:%SZ")
|
||||
return Path(str(url.path)).name, updated
|
||||
|
||||
def check_for_redirect(self, url: str, req: http.client.HTTPResponse):
|
||||
response_url = req.geturl()
|
||||
if url != response_url:
|
||||
new_owner, new_name = (
|
||||
urllib.parse.urlsplit(response_url).path.strip("/").split("/")[:2]
|
||||
)
|
||||
end_line = "\n" if self.alias is None else f" as {self.alias}\n"
|
||||
plugin_line = "{owner}/{name}" + end_line
|
||||
|
||||
old_plugin = plugin_line.format(owner=self.owner, name=self.name)
|
||||
new_plugin = plugin_line.format(owner=new_owner, name=new_name)
|
||||
self.redirect[old_plugin] = new_plugin
|
||||
|
||||
def prefetch_git(self, ref: str) -> str:
|
||||
data = subprocess.check_output(
|
||||
["nix-prefetch-git", "--fetch-submodules", self.url(""), ref]
|
||||
)
|
||||
return json.loads(data)["sha256"]
|
||||
|
||||
def prefetch_github(self, ref: str) -> str:
|
||||
data = subprocess.check_output(
|
||||
["nix-prefetch-url", "--unpack", self.url(f"archive/{ref}.tar.gz")]
|
||||
)
|
||||
return data.strip().decode("utf-8")
|
||||
|
||||
|
||||
class Plugin:
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
commit: str,
|
||||
has_submodules: bool,
|
||||
sha256: str,
|
||||
date: Optional[datetime] = None,
|
||||
) -> None:
|
||||
self.name = name
|
||||
self.commit = commit
|
||||
self.has_submodules = has_submodules
|
||||
self.sha256 = sha256
|
||||
self.date = date
|
||||
|
||||
@property
|
||||
def normalized_name(self) -> str:
|
||||
return self.name.replace(".", "-")
|
||||
|
||||
@property
|
||||
def version(self) -> str:
|
||||
assert self.date is not None
|
||||
return self.date.strftime("%Y-%m-%d")
|
||||
|
||||
def as_json(self) -> Dict[str, str]:
|
||||
copy = self.__dict__.copy()
|
||||
del copy["date"]
|
||||
return copy
|
||||
|
||||
# Import plugin update library from maintainers/scripts/pluginupdate.py
|
||||
ROOT = Path(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
|
||||
sys.path.insert(0, os.path.join(ROOT.parent.parent.parent, "maintainers", "scripts"))
|
||||
import pluginupdate
|
||||
|
||||
GET_PLUGINS = f"""(with import <localpkgs> {{}};
|
||||
let
|
||||
@ -197,204 +35,16 @@ let
|
||||
checksums = lib.mapAttrs getChecksum generated;
|
||||
in lib.filterAttrs (n: v: v != null) checksums)"""
|
||||
|
||||
|
||||
class CleanEnvironment(object):
|
||||
def __enter__(self) -> None:
|
||||
self.old_environ = os.environ.copy()
|
||||
local_pkgs = str(ROOT.joinpath("../../.."))
|
||||
os.environ["NIX_PATH"] = f"localpkgs={local_pkgs}"
|
||||
self.empty_config = NamedTemporaryFile()
|
||||
self.empty_config.write(b"{}")
|
||||
self.empty_config.flush()
|
||||
os.environ["NIXPKGS_CONFIG"] = self.empty_config.name
|
||||
|
||||
def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None:
|
||||
os.environ.update(self.old_environ)
|
||||
self.empty_config.close()
|
||||
|
||||
|
||||
def get_current_plugins() -> List[Plugin]:
|
||||
with CleanEnvironment():
|
||||
out = subprocess.check_output(["nix", "eval", "--json", GET_PLUGINS])
|
||||
data = json.loads(out)
|
||||
plugins = []
|
||||
for name, attr in data.items():
|
||||
p = Plugin(name, attr["rev"], attr["submodules"], attr["sha256"])
|
||||
plugins.append(p)
|
||||
return plugins
|
||||
|
||||
|
||||
def prefetch_plugin(
|
||||
user: str,
|
||||
repo_name: str,
|
||||
branch: str,
|
||||
alias: Optional[str],
|
||||
cache: "Optional[Cache]" = None,
|
||||
) -> Tuple[Plugin, Dict[str, str]]:
|
||||
repo = Repo(user, repo_name, branch, alias)
|
||||
commit, date = repo.latest_commit()
|
||||
has_submodules = repo.has_submodules()
|
||||
cached_plugin = cache[commit] if cache else None
|
||||
if cached_plugin is not None:
|
||||
cached_plugin.name = alias or repo_name
|
||||
cached_plugin.date = date
|
||||
return cached_plugin, repo.redirect
|
||||
|
||||
print(f"prefetch {user}/{repo_name}")
|
||||
if has_submodules:
|
||||
sha256 = repo.prefetch_git(commit)
|
||||
else:
|
||||
sha256 = repo.prefetch_github(commit)
|
||||
|
||||
return (
|
||||
Plugin(alias or repo_name, commit, has_submodules, sha256, date=date),
|
||||
repo.redirect,
|
||||
)
|
||||
|
||||
|
||||
def fetch_plugin_from_pluginline(plugin_line: str) -> Plugin:
|
||||
plugin, _ = prefetch_plugin(*parse_plugin_line(plugin_line))
|
||||
return plugin
|
||||
|
||||
|
||||
def print_download_error(plugin: str, ex: Exception):
|
||||
print(f"{plugin}: {ex}", file=sys.stderr)
|
||||
ex_traceback = ex.__traceback__
|
||||
tb_lines = [
|
||||
line.rstrip("\n")
|
||||
for line in traceback.format_exception(ex.__class__, ex, ex_traceback)
|
||||
]
|
||||
print("\n".join(tb_lines))
|
||||
|
||||
|
||||
def check_results(
|
||||
results: List[Tuple[str, str, Union[Exception, Plugin], Dict[str, str]]]
|
||||
) -> Tuple[List[Tuple[str, str, Plugin]], Dict[str, str]]:
|
||||
failures: List[Tuple[str, Exception]] = []
|
||||
plugins = []
|
||||
redirects: Dict[str, str] = {}
|
||||
for (owner, name, result, redirect) in results:
|
||||
if isinstance(result, Exception):
|
||||
failures.append((name, result))
|
||||
else:
|
||||
plugins.append((owner, name, result))
|
||||
redirects.update(redirect)
|
||||
|
||||
print(f"{len(results) - len(failures)} plugins were checked", end="")
|
||||
if len(failures) == 0:
|
||||
print()
|
||||
return plugins, redirects
|
||||
else:
|
||||
print(f", {len(failures)} plugin(s) could not be downloaded:\n")
|
||||
|
||||
for (plugin, exception) in failures:
|
||||
print_download_error(plugin, exception)
|
||||
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def parse_plugin_line(line: str) -> Tuple[str, str, str, Optional[str]]:
|
||||
branch = "master"
|
||||
alias = None
|
||||
name, repo = line.split("/")
|
||||
if " as " in repo:
|
||||
repo, alias = repo.split(" as ")
|
||||
alias = alias.strip()
|
||||
if "@" in repo:
|
||||
repo, branch = repo.split("@")
|
||||
|
||||
return (name.strip(), repo.strip(), branch.strip(), alias)
|
||||
|
||||
|
||||
def load_plugin_spec(plugin_file: str) -> List[Tuple[str, str, str, Optional[str]]]:
|
||||
plugins = []
|
||||
with open(plugin_file) as f:
|
||||
for line in f:
|
||||
plugin = parse_plugin_line(line)
|
||||
if not plugin[0]:
|
||||
msg = f"Invalid repository {line}, must be in the format owner/repo[ as alias]"
|
||||
print(msg, file=sys.stderr)
|
||||
sys.exit(1)
|
||||
plugins.append(plugin)
|
||||
return plugins
|
||||
|
||||
|
||||
def get_cache_path() -> Optional[Path]:
|
||||
xdg_cache = os.environ.get("XDG_CACHE_HOME", None)
|
||||
if xdg_cache is None:
|
||||
home = os.environ.get("HOME", None)
|
||||
if home is None:
|
||||
return None
|
||||
xdg_cache = str(Path(home, ".cache"))
|
||||
|
||||
return Path(xdg_cache, "vim-plugin-cache.json")
|
||||
|
||||
|
||||
class Cache:
|
||||
def __init__(self, initial_plugins: List[Plugin]) -> None:
|
||||
self.cache_file = get_cache_path()
|
||||
|
||||
downloads = {}
|
||||
for plugin in initial_plugins:
|
||||
downloads[plugin.commit] = plugin
|
||||
downloads.update(self.load())
|
||||
self.downloads = downloads
|
||||
|
||||
def load(self) -> Dict[str, Plugin]:
|
||||
if self.cache_file is None or not self.cache_file.exists():
|
||||
return {}
|
||||
|
||||
downloads: Dict[str, Plugin] = {}
|
||||
with open(self.cache_file) as f:
|
||||
data = json.load(f)
|
||||
for attr in data.values():
|
||||
p = Plugin(
|
||||
attr["name"], attr["commit"], attr["has_submodules"], attr["sha256"]
|
||||
)
|
||||
downloads[attr["commit"]] = p
|
||||
return downloads
|
||||
|
||||
def store(self) -> None:
|
||||
if self.cache_file is None:
|
||||
return
|
||||
|
||||
os.makedirs(self.cache_file.parent, exist_ok=True)
|
||||
with open(self.cache_file, "w+") as f:
|
||||
data = {}
|
||||
for name, attr in self.downloads.items():
|
||||
data[name] = attr.as_json()
|
||||
json.dump(data, f, indent=4, sort_keys=True)
|
||||
|
||||
def __getitem__(self, key: str) -> Optional[Plugin]:
|
||||
return self.downloads.get(key, None)
|
||||
|
||||
def __setitem__(self, key: str, value: Plugin) -> None:
|
||||
self.downloads[key] = value
|
||||
|
||||
|
||||
def prefetch(
|
||||
args: Tuple[str, str, str, Optional[str]], cache: Cache
|
||||
) -> Tuple[str, str, Union[Exception, Plugin], dict]:
|
||||
assert len(args) == 4
|
||||
owner, repo, branch, alias = args
|
||||
try:
|
||||
plugin, redirect = prefetch_plugin(owner, repo, branch, alias, cache)
|
||||
cache[plugin.commit] = plugin
|
||||
return (owner, repo, plugin, redirect)
|
||||
except Exception as e:
|
||||
return (owner, repo, e, {})
|
||||
|
||||
|
||||
header = (
|
||||
HEADER = (
|
||||
"# This file has been generated by ./pkgs/misc/vim-plugins/update.py. Do not edit!"
|
||||
)
|
||||
|
||||
|
||||
def generate_nix(plugins: List[Tuple[str, str, Plugin]], outfile: str):
|
||||
def generate_nix(plugins: List[Tuple[str, str, pluginupdate.Plugin]], outfile: str):
|
||||
sorted_plugins = sorted(plugins, key=lambda v: v[2].name.lower())
|
||||
|
||||
with open(outfile, "w+") as f:
|
||||
f.write(header)
|
||||
f.write(HEADER)
|
||||
f.write(
|
||||
"""
|
||||
{ lib, buildVimPluginFrom2Nix, fetchFromGitHub, overrides ? (self: super: {}) }:
|
||||
@ -432,136 +82,9 @@ in lib.fix' (lib.extends overrides packages)
|
||||
print(f"updated {outfile}")
|
||||
|
||||
|
||||
def rewrite_input(
|
||||
input_file: Path, redirects: Dict[str, str] = None, append: Tuple = ()
|
||||
):
|
||||
with open(input_file, "r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
lines.extend(append)
|
||||
|
||||
if redirects:
|
||||
lines = [redirects.get(line, line) for line in lines]
|
||||
|
||||
cur_date_iso = datetime.now().strftime("%Y-%m-%d")
|
||||
with open(DEPRECATED, "r") as f:
|
||||
deprecations = json.load(f)
|
||||
for old, new in redirects.items():
|
||||
old_plugin = fetch_plugin_from_pluginline(old)
|
||||
new_plugin = fetch_plugin_from_pluginline(new)
|
||||
if old_plugin.normalized_name != new_plugin.normalized_name:
|
||||
deprecations[old_plugin.normalized_name] = {
|
||||
"new": new_plugin.normalized_name,
|
||||
"date": cur_date_iso,
|
||||
}
|
||||
with open(DEPRECATED, "w") as f:
|
||||
json.dump(deprecations, f, indent=4, sort_keys=True)
|
||||
|
||||
lines = sorted(lines, key=str.casefold)
|
||||
|
||||
with open(input_file, "w") as f:
|
||||
f.writelines(lines)
|
||||
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser(
|
||||
description=(
|
||||
"Updates nix derivations for vim plugins"
|
||||
f"By default from {DEFAULT_IN} to {DEFAULT_OUT}"
|
||||
)
|
||||
)
|
||||
parser.add_argument(
|
||||
"--add",
|
||||
dest="add_plugins",
|
||||
default=[],
|
||||
action="append",
|
||||
help="Plugin to add to vimPlugins from Github in the form owner/repo",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--input-names",
|
||||
"-i",
|
||||
dest="input_file",
|
||||
default=DEFAULT_IN,
|
||||
help="A list of plugins in the form owner/repo",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--out",
|
||||
"-o",
|
||||
dest="outfile",
|
||||
default=DEFAULT_OUT,
|
||||
help="Filename to save generated nix code",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--proc",
|
||||
"-p",
|
||||
dest="proc",
|
||||
type=int,
|
||||
default=30,
|
||||
help="Number of concurrent processes to spawn.",
|
||||
)
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def commit(repo: git.Repo, message: str, files: List[Path]) -> None:
|
||||
repo.index.add([str(f.resolve()) for f in files])
|
||||
|
||||
if repo.index.diff("HEAD"):
|
||||
print(f'committing to nixpkgs "{message}"')
|
||||
repo.index.commit(message)
|
||||
else:
|
||||
print("no changes in working tree to commit")
|
||||
|
||||
|
||||
def get_update(input_file: str, outfile: str, proc: int):
|
||||
cache: Cache = Cache(get_current_plugins())
|
||||
_prefetch = functools.partial(prefetch, cache=cache)
|
||||
|
||||
def update() -> dict:
|
||||
plugin_names = load_plugin_spec(input_file)
|
||||
|
||||
try:
|
||||
pool = Pool(processes=proc)
|
||||
results = pool.map(_prefetch, plugin_names)
|
||||
finally:
|
||||
cache.store()
|
||||
|
||||
plugins, redirects = check_results(results)
|
||||
|
||||
generate_nix(plugins, outfile)
|
||||
|
||||
return redirects
|
||||
|
||||
return update
|
||||
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
nixpkgs_repo = git.Repo(ROOT, search_parent_directories=True)
|
||||
update = get_update(args.input_file, args.outfile, args.proc)
|
||||
|
||||
redirects = update()
|
||||
rewrite_input(args.input_file, redirects)
|
||||
commit(nixpkgs_repo, "vimPlugins: update", [args.outfile])
|
||||
|
||||
if redirects:
|
||||
update()
|
||||
commit(
|
||||
nixpkgs_repo,
|
||||
"vimPlugins: resolve github repository redirects",
|
||||
[args.outfile, args.input_file, DEPRECATED],
|
||||
)
|
||||
|
||||
for plugin_line in args.add_plugins:
|
||||
rewrite_input(args.input_file, append=(plugin_line + "\n",))
|
||||
update()
|
||||
plugin = fetch_plugin_from_pluginline(plugin_line)
|
||||
commit(
|
||||
nixpkgs_repo,
|
||||
"vimPlugins.{name}: init at {version}".format(
|
||||
name=plugin.normalized_name, version=plugin.version
|
||||
),
|
||||
[args.outfile, args.input_file],
|
||||
)
|
||||
editor = pluginupdate.Editor("vim", ROOT, GET_PLUGINS, generate_nix)
|
||||
pluginupdate.update_plugins(editor)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "kapowbang";
|
||||
version = "0.6.0";
|
||||
version = "0.7.0";
|
||||
|
||||
subPackages = [ "." ];
|
||||
|
||||
@ -10,10 +10,10 @@ buildGoModule rec {
|
||||
owner = "BBVA";
|
||||
repo = "kapow";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-+GZarnG+SlxynoXYTvI1f9eki3DobiDt7vUdWlC0ECk=";
|
||||
sha256 = "sha256-0ftdc3ol1g0WnZgicXl46Xpph4cUYk/G/eeu+9JnPyA=";
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-vXu64o/MTmw9oZL4MIHB+PEfYLcKVh5A5iGZ1RW1Xd4=";
|
||||
vendorSha256 = "sha256-41Jk3aTe4EA5dwkriEo48QNJg2k3T/R/8i8XWcURcG8=";
|
||||
|
||||
doCheck = false;
|
||||
|
||||
|
@ -5,8 +5,8 @@ self: super: {
|
||||
_: {
|
||||
src = pkgs.fetchgit {
|
||||
url = "https://github.com/rschroll/rmfuse.git";
|
||||
rev = "ac91d477cc32311c88aa7ecd1bebd6503e426ae7";
|
||||
sha256 = "129n00hricsf4jkgj39bq3m5nhvy4d4yg7mcvrcgwb2546wcix0n";
|
||||
rev = "fca03bcdd6dc118f2ba981410ec9dff7f7cb88ec";
|
||||
sha256 = "0i7dvvi2bp3hydjpzvr7vg10bx0wxz87spf7pg455aga8d0qhxgk";
|
||||
};
|
||||
}
|
||||
);
|
||||
|
337
pkgs/tools/filesystems/rmfuse/poetry.lock
generated
337
pkgs/tools/filesystems/rmfuse/poetry.lock
generated
@ -1,10 +1,10 @@
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "High level compatibility layer for multiple asynchronous event loop implementations"
|
||||
name = "anyio"
|
||||
version = "2.2.0"
|
||||
description = "High level compatibility layer for multiple asynchronous event loop implementations"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6.2"
|
||||
version = "2.1.0"
|
||||
|
||||
[package.dependencies]
|
||||
idna = ">=2.8"
|
||||
@ -13,16 +13,16 @@ sniffio = ">=1.1"
|
||||
[package.extras]
|
||||
curio = ["curio (>=1.4)"]
|
||||
doc = ["sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"]
|
||||
test = ["coverage (>=4.5)", "hypothesis (>=4.0)", "pytest (>=6.0)", "trustme", "uvloop"]
|
||||
test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=6.0)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"]
|
||||
trio = ["trio (>=0.16)"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "asks - async http"
|
||||
name = "asks"
|
||||
version = "2.4.12"
|
||||
description = "asks - async http"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">= 3.6.2"
|
||||
version = "2.4.12"
|
||||
|
||||
[package.dependencies]
|
||||
anyio = ">=2.0,<3.0"
|
||||
@ -30,34 +30,34 @@ async_generator = "*"
|
||||
h11 = "*"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Async generators and context managers for Python 3.5+"
|
||||
name = "async-generator"
|
||||
version = "1.10"
|
||||
description = "Async generators and context managers for Python 3.5+"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.5"
|
||||
version = "1.10"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Classes Without Boilerplate"
|
||||
name = "attrs"
|
||||
version = "20.3.0"
|
||||
description = "Classes Without Boilerplate"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
version = "20.3.0"
|
||||
|
||||
[package.extras]
|
||||
dev = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"]
|
||||
dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"]
|
||||
docs = ["furo", "sphinx", "zope.interface"]
|
||||
tests = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
|
||||
tests_no_zope = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"]
|
||||
tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
|
||||
tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "The bidirectional mapping library for Python."
|
||||
name = "bidict"
|
||||
version = "0.21.2"
|
||||
description = "The bidirectional mapping library for Python."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "0.21.2"
|
||||
|
||||
[package.extras]
|
||||
coverage = ["coverage (<6)", "pytest-cov (<3)"]
|
||||
@ -67,23 +67,23 @@ precommit = ["pre-commit (<3)"]
|
||||
test = ["hypothesis (<6)", "py (<2)", "pytest (<7)", "pytest-benchmark (>=3.2.0,<4)", "sortedcollections (<2)", "sortedcontainers (<3)", "Sphinx (<4)", "sphinx-autodoc-typehints (<2)"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Foreign Function Interface for Python calling C code."
|
||||
name = "cffi"
|
||||
version = "1.14.5"
|
||||
description = "Foreign Function Interface for Python calling C code."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "1.14.5"
|
||||
|
||||
[package.dependencies]
|
||||
pycparser = "*"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "cssselect2"
|
||||
name = "cssselect2"
|
||||
version = "0.4.1"
|
||||
description = "cssselect2"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "0.4.1"
|
||||
|
||||
[package.dependencies]
|
||||
tinycss2 = "*"
|
||||
@ -94,28 +94,28 @@ doc = ["sphinx", "sphinx-rtd-theme"]
|
||||
test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
|
||||
name = "h11"
|
||||
version = "0.12.0"
|
||||
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "0.12.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Internationalized Domain Names in Applications (IDNA)"
|
||||
name = "idna"
|
||||
version = "3.1"
|
||||
description = "Internationalized Domain Names in Applications (IDNA)"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.4"
|
||||
version = "3.1"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
|
||||
name = "lxml"
|
||||
version = "4.6.2"
|
||||
description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*"
|
||||
version = "4.6.2"
|
||||
|
||||
[package.extras]
|
||||
cssselect = ["cssselect (>=0.7)"]
|
||||
@ -124,69 +124,72 @@ htmlsoup = ["beautifulsoup4"]
|
||||
source = ["Cython (>=0.29.7)"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Capture the outcome of Python function calls."
|
||||
name = "outcome"
|
||||
version = "1.1.0"
|
||||
description = "Capture the outcome of Python function calls."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "1.1.0"
|
||||
|
||||
[package.dependencies]
|
||||
attrs = ">=19.2.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "PDF file reader/writer library"
|
||||
name = "pdfrw"
|
||||
version = "0.4"
|
||||
description = "PDF file reader/writer library"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "0.4"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Python Imaging Library (Fork)"
|
||||
name = "pillow"
|
||||
version = "8.1.2"
|
||||
description = "Python Imaging Library (Fork)"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "8.1.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "C parser in Python"
|
||||
name = "pycparser"
|
||||
version = "2.20"
|
||||
description = "C parser in Python"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
version = "2.20"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Python 3 bindings for libfuse 3 with async I/O support"
|
||||
name = "pyfuse3"
|
||||
version = "3.2.0"
|
||||
description = "Python 3 bindings for libfuse 3 with async I/O support"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.5"
|
||||
version = "3.2.0"
|
||||
|
||||
[package.dependencies]
|
||||
trio = ">=0.15"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "The Reportlab Toolkit"
|
||||
name = "reportlab"
|
||||
version = "3.5.65"
|
||||
description = "The Reportlab Toolkit"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "3.5.59"
|
||||
python-versions = ">=2.7, >=3.6, <4"
|
||||
|
||||
[package.dependencies]
|
||||
pillow = ">=4.0.0"
|
||||
|
||||
[package.extras]
|
||||
rlpycairo = ["rlPyCairo (>=0.0.5)"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "reMarkable Cloud Library"
|
||||
name = "rmcl"
|
||||
version = "0.4.0"
|
||||
description = "reMarkable Cloud Library"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7,<4.0"
|
||||
version = "0.3.1"
|
||||
|
||||
[package.dependencies]
|
||||
asks = ">=2.4.12,<3.0.0"
|
||||
@ -194,30 +197,38 @@ trio = ">=0.18.0,<0.19.0"
|
||||
xdg = ">=5.0.1,<6.0.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = ""
|
||||
name = "rmfuse"
|
||||
version = "0.2.1"
|
||||
description = ""
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "^3.7"
|
||||
version = "0.1.1"
|
||||
develop = false
|
||||
|
||||
[package.dependencies]
|
||||
bidict = "^0.21.2"
|
||||
pyfuse3 = "^3.2.0"
|
||||
rmcl = "^0.3.1"
|
||||
rmrl = "^0.1.2"
|
||||
pyfuse3 = {version = "^3.2.0", optional = true}
|
||||
rmcl = "^0.4.0"
|
||||
rmrl = "^0.2.1"
|
||||
xdg = "^5.0.1"
|
||||
|
||||
[package.extras]
|
||||
pyfuse3 = ["pyfuse3 (>=3.2.0,<4.0.0)"]
|
||||
llfuse = ["llfuse (>=1.4.1,<2.0.0)"]
|
||||
|
||||
[package.source]
|
||||
reference = "ac91d477cc32311c88aa7ecd1bebd6503e426ae7"
|
||||
type = "git"
|
||||
url = "https://github.com/rschroll/rmfuse.git"
|
||||
reference = "master"
|
||||
resolved_reference = "fca03bcdd6dc118f2ba981410ec9dff7f7cb88ec"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Render reMarkable documents to PDF"
|
||||
name = "rmrl"
|
||||
version = "0.2.1"
|
||||
description = "Render reMarkable documents to PDF"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7,<4.0"
|
||||
version = "0.1.2"
|
||||
|
||||
[package.dependencies]
|
||||
pdfrw = ">=0.4,<0.5"
|
||||
@ -226,28 +237,28 @@ svglib = ">=1.0.1,<2.0.0"
|
||||
xdg = ">=5.0.1,<6.0.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Sniff out which async library your code is running under"
|
||||
name = "sniffio"
|
||||
version = "1.2.0"
|
||||
description = "Sniff out which async library your code is running under"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.5"
|
||||
version = "1.2.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set"
|
||||
name = "sortedcontainers"
|
||||
version = "2.3.0"
|
||||
description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "2.3.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "A pure-Python library for reading and converting SVG"
|
||||
name = "svglib"
|
||||
version = "1.0.1"
|
||||
description = "A pure-Python library for reading and converting SVG"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3"
|
||||
version = "1.0.1"
|
||||
|
||||
[package.dependencies]
|
||||
cssselect2 = ">=0.2.0"
|
||||
@ -256,12 +267,12 @@ reportlab = "*"
|
||||
tinycss2 = ">=0.6.0"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "tinycss2"
|
||||
name = "tinycss2"
|
||||
version = "1.1.0"
|
||||
description = "tinycss2"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "1.1.0"
|
||||
|
||||
[package.dependencies]
|
||||
webencodings = ">=0.4"
|
||||
@ -271,47 +282,47 @@ doc = ["sphinx", "sphinx-rtd-theme"]
|
||||
test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"]
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "A friendly Python library for async concurrency and I/O"
|
||||
name = "trio"
|
||||
version = "0.18.0"
|
||||
description = "A friendly Python library for async concurrency and I/O"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
version = "0.18.0"
|
||||
|
||||
[package.dependencies]
|
||||
async-generator = ">=1.9"
|
||||
attrs = ">=19.2.0"
|
||||
cffi = ">=1.14"
|
||||
cffi = {version = ">=1.14", markers = "os_name == \"nt\" and implementation_name != \"pypy\""}
|
||||
idna = "*"
|
||||
outcome = "*"
|
||||
sniffio = "*"
|
||||
sortedcontainers = "*"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Character encoding aliases for legacy web content"
|
||||
name = "webencodings"
|
||||
version = "0.5.1"
|
||||
description = "Character encoding aliases for legacy web content"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
version = "0.5.1"
|
||||
|
||||
[[package]]
|
||||
category = "main"
|
||||
description = "Variables defined by the XDG Base Directory Specification"
|
||||
name = "xdg"
|
||||
version = "5.0.1"
|
||||
description = "Variables defined by the XDG Base Directory Specification"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6,<4.0"
|
||||
version = "5.0.1"
|
||||
|
||||
[metadata]
|
||||
content-hash = "df8dfb527656dec034712b2d07aaacfdee20f89f635d38af52bb21888d7d4130"
|
||||
lock-version = "1.0"
|
||||
lock-version = "1.1"
|
||||
python-versions = "^3.8"
|
||||
content-hash = "3da90f3013f1220c9081c0a11dac7d8cd05c5a47ebda40fbb4357e44503e99a3"
|
||||
|
||||
[metadata.files]
|
||||
anyio = [
|
||||
{file = "anyio-2.1.0-py3-none-any.whl", hash = "sha256:c286818ccd5dcbd5d385b223f16a055393474527b1d5650da489828a9887d559"},
|
||||
{file = "anyio-2.1.0.tar.gz", hash = "sha256:8a56e08623dc55955a06719d4ad62de6009bb3f1dd04936e60b2104dd58da484"},
|
||||
{file = "anyio-2.2.0-py3-none-any.whl", hash = "sha256:aa3da546ed17f097ca876c78024dea380a3b7fa80759abfdda59f12176a3dac8"},
|
||||
{file = "anyio-2.2.0.tar.gz", hash = "sha256:4a41c5b3a65ed92e469d51b6fba3779301850ea2e352afcf9e36c46f21ee14a9"},
|
||||
]
|
||||
asks = [
|
||||
{file = "asks-2.4.12.tar.gz", hash = "sha256:38de944eb350e7e4e3a918055fa8ff033da5f7b5ff385c1160a2d6b9d84783b0"},
|
||||
@ -427,38 +438,39 @@ pdfrw = [
|
||||
{file = "pdfrw-0.4.tar.gz", hash = "sha256:0dc0494a0e6561b268542b28ede2280387c2728114f117d3bb5d8e4787b93ef4"},
|
||||
]
|
||||
pillow = [
|
||||
{file = "Pillow-8.1.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:d355502dce85ade85a2511b40b4c61a128902f246504f7de29bbeec1ae27933a"},
|
||||
{file = "Pillow-8.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:93a473b53cc6e0b3ce6bf51b1b95b7b1e7e6084be3a07e40f79b42e83503fbf2"},
|
||||
{file = "Pillow-8.1.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2353834b2c49b95e1313fb34edf18fca4d57446675d05298bb694bca4b194174"},
|
||||
{file = "Pillow-8.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:1d208e670abfeb41b6143537a681299ef86e92d2a3dac299d3cd6830d5c7bded"},
|
||||
{file = "Pillow-8.1.0-cp36-cp36m-win32.whl", hash = "sha256:dd9eef866c70d2cbbea1ae58134eaffda0d4bfea403025f4db6859724b18ab3d"},
|
||||
{file = "Pillow-8.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:b09e10ec453de97f9a23a5aa5e30b334195e8d2ddd1ce76cc32e52ba63c8b31d"},
|
||||
{file = "Pillow-8.1.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:b02a0b9f332086657852b1f7cb380f6a42403a6d9c42a4c34a561aa4530d5234"},
|
||||
{file = "Pillow-8.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ca20739e303254287138234485579b28cb0d524401f83d5129b5ff9d606cb0a8"},
|
||||
{file = "Pillow-8.1.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:604815c55fd92e735f9738f65dabf4edc3e79f88541c221d292faec1904a4b17"},
|
||||
{file = "Pillow-8.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cf6e33d92b1526190a1de904df21663c46a456758c0424e4f947ae9aa6088bf7"},
|
||||
{file = "Pillow-8.1.0-cp37-cp37m-win32.whl", hash = "sha256:47c0d93ee9c8b181f353dbead6530b26980fe4f5485aa18be8f1fd3c3cbc685e"},
|
||||
{file = "Pillow-8.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:96d4dc103d1a0fa6d47c6c55a47de5f5dafd5ef0114fa10c85a1fd8e0216284b"},
|
||||
{file = "Pillow-8.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:7916cbc94f1c6b1301ac04510d0881b9e9feb20ae34094d3615a8a7c3db0dcc0"},
|
||||
{file = "Pillow-8.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:3de6b2ee4f78c6b3d89d184ade5d8fa68af0848f9b6b6da2b9ab7943ec46971a"},
|
||||
{file = "Pillow-8.1.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:cdbbe7dff4a677fb555a54f9bc0450f2a21a93c5ba2b44e09e54fcb72d2bd13d"},
|
||||
{file = "Pillow-8.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f50e7a98b0453f39000619d845be8b06e611e56ee6e8186f7f60c3b1e2f0feae"},
|
||||
{file = "Pillow-8.1.0-cp38-cp38-win32.whl", hash = "sha256:cb192176b477d49b0a327b2a5a4979552b7a58cd42037034316b8018ac3ebb59"},
|
||||
{file = "Pillow-8.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6c5275bd82711cd3dcd0af8ce0bb99113ae8911fc2952805f1d012de7d600a4c"},
|
||||
{file = "Pillow-8.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:165c88bc9d8dba670110c689e3cc5c71dbe4bfb984ffa7cbebf1fac9554071d6"},
|
||||
{file = "Pillow-8.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:5e2fe3bb2363b862671eba632537cd3a823847db4d98be95690b7e382f3d6378"},
|
||||
{file = "Pillow-8.1.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7612520e5e1a371d77e1d1ca3a3ee6227eef00d0a9cddb4ef7ecb0b7396eddf7"},
|
||||
{file = "Pillow-8.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d673c4990acd016229a5c1c4ee8a9e6d8f481b27ade5fc3d95938697fa443ce0"},
|
||||
{file = "Pillow-8.1.0-cp39-cp39-win32.whl", hash = "sha256:dc577f4cfdda354db3ae37a572428a90ffdbe4e51eda7849bf442fb803f09c9b"},
|
||||
{file = "Pillow-8.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:22d070ca2e60c99929ef274cfced04294d2368193e935c5d6febfd8b601bf865"},
|
||||
{file = "Pillow-8.1.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:a3d3e086474ef12ef13d42e5f9b7bbf09d39cf6bd4940f982263d6954b13f6a9"},
|
||||
{file = "Pillow-8.1.0-pp36-pypy36_pp73-manylinux2010_i686.whl", hash = "sha256:731ca5aabe9085160cf68b2dbef95fc1991015bc0a3a6ea46a371ab88f3d0913"},
|
||||
{file = "Pillow-8.1.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:bba80df38cfc17f490ec651c73bb37cd896bc2400cfba27d078c2135223c1206"},
|
||||
{file = "Pillow-8.1.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c3d911614b008e8a576b8e5303e3db29224b455d3d66d1b2848ba6ca83f9ece9"},
|
||||
{file = "Pillow-8.1.0-pp37-pypy37_pp73-manylinux2010_i686.whl", hash = "sha256:39725acf2d2e9c17356e6835dccebe7a697db55f25a09207e38b835d5e1bc032"},
|
||||
{file = "Pillow-8.1.0-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:81c3fa9a75d9f1afafdb916d5995633f319db09bd773cb56b8e39f1e98d90820"},
|
||||
{file = "Pillow-8.1.0-pp37-pypy37_pp73-win32.whl", hash = "sha256:b6f00ad5ebe846cc91763b1d0c6d30a8042e02b2316e27b05de04fa6ec831ec5"},
|
||||
{file = "Pillow-8.1.0.tar.gz", hash = "sha256:887668e792b7edbfb1d3c9d8b5d8c859269a0f0eba4dda562adb95500f60dbba"},
|
||||
{file = "Pillow-8.1.2-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:5cf03b9534aca63b192856aa601c68d0764810857786ea5da652581f3a44c2b0"},
|
||||
{file = "Pillow-8.1.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:f91b50ad88048d795c0ad004abbe1390aa1882073b1dca10bfd55d0b8cf18ec5"},
|
||||
{file = "Pillow-8.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5762ebb4436f46b566fc6351d67a9b5386b5e5de4e58fdaa18a1c83e0e20f1a8"},
|
||||
{file = "Pillow-8.1.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e2cd8ac157c1e5ae88b6dd790648ee5d2777e76f1e5c7d184eaddb2938594f34"},
|
||||
{file = "Pillow-8.1.2-cp36-cp36m-win32.whl", hash = "sha256:72027ebf682abc9bafd93b43edc44279f641e8996fb2945104471419113cfc71"},
|
||||
{file = "Pillow-8.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:d1d6bca39bb6dd94fba23cdb3eeaea5e30c7717c5343004d900e2a63b132c341"},
|
||||
{file = "Pillow-8.1.2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:90882c6f084ef68b71bba190209a734bf90abb82ab5e8f64444c71d5974008c6"},
|
||||
{file = "Pillow-8.1.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:89e4c757a91b8c55d97c91fa09c69b3677c227b942fa749e9a66eef602f59c28"},
|
||||
{file = "Pillow-8.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8c4e32218c764bc27fe49b7328195579581aa419920edcc321c4cb877c65258d"},
|
||||
{file = "Pillow-8.1.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:a01da2c266d9868c4f91a9c6faf47a251f23b9a862dce81d2ff583135206f5be"},
|
||||
{file = "Pillow-8.1.2-cp37-cp37m-win32.whl", hash = "sha256:30d33a1a6400132e6f521640dd3f64578ac9bfb79a619416d7e8802b4ce1dd55"},
|
||||
{file = "Pillow-8.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:71b01ee69e7df527439d7752a2ce8fb89e19a32df484a308eca3e81f673d3a03"},
|
||||
{file = "Pillow-8.1.2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:5a2d957eb4aba9d48170b8fe6538ec1fbc2119ffe6373782c03d8acad3323f2e"},
|
||||
{file = "Pillow-8.1.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:87f42c976f91ca2fc21a3293e25bd3cd895918597db1b95b93cbd949f7d019ce"},
|
||||
{file = "Pillow-8.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:15306d71a1e96d7e271fd2a0737038b5a92ca2978d2e38b6ced7966583e3d5af"},
|
||||
{file = "Pillow-8.1.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:71f31ee4df3d5e0b366dd362007740106d3210fb6a56ec4b581a5324ba254f06"},
|
||||
{file = "Pillow-8.1.2-cp38-cp38-win32.whl", hash = "sha256:98afcac3205d31ab6a10c5006b0cf040d0026a68ec051edd3517b776c1d78b09"},
|
||||
{file = "Pillow-8.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:328240f7dddf77783e72d5ed79899a6b48bc6681f8d1f6001f55933cb4905060"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bead24c0ae3f1f6afcb915a057943ccf65fc755d11a1410a909c1fefb6c06ad1"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81b3716cc9744ffdf76b39afb6247eae754186838cedad0b0ac63b2571253fe6"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:63cd413ac52ee3f67057223d363f4f82ce966e64906aea046daf46695e3c8238"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:8565355a29655b28fdc2c666fd9a3890fe5edc6639d128814fafecfae2d70910"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:1940fc4d361f9cc7e558d6f56ff38d7351b53052fd7911f4b60cd7bc091ea3b1"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-win32.whl", hash = "sha256:46c2bcf8e1e75d154e78417b3e3c64e96def738c2a25435e74909e127a8cba5e"},
|
||||
{file = "Pillow-8.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:aeab4cd016e11e7aa5cfc49dcff8e51561fa64818a0be86efa82c7038e9369d0"},
|
||||
{file = "Pillow-8.1.2-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:74cd9aa648ed6dd25e572453eb09b08817a1e3d9f8d1bd4d8403d99e42ea790b"},
|
||||
{file = "Pillow-8.1.2-pp36-pypy36_pp73-manylinux2010_i686.whl", hash = "sha256:e5739ae63636a52b706a0facec77b2b58e485637e1638202556156e424a02dc2"},
|
||||
{file = "Pillow-8.1.2-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:903293320efe2466c1ab3509a33d6b866dc850cfd0c5d9cc92632014cec185fb"},
|
||||
{file = "Pillow-8.1.2-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:5daba2b40782c1c5157a788ec4454067c6616f5a0c1b70e26ac326a880c2d328"},
|
||||
{file = "Pillow-8.1.2-pp37-pypy37_pp73-manylinux2010_i686.whl", hash = "sha256:1f93f2fe211f1ef75e6f589327f4d4f8545d5c8e826231b042b483d8383e8a7c"},
|
||||
{file = "Pillow-8.1.2-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:6efac40344d8f668b6c4533ae02a48d52fd852ef0654cc6f19f6ac146399c733"},
|
||||
{file = "Pillow-8.1.2-pp37-pypy37_pp73-win32.whl", hash = "sha256:f36c3ff63d6fc509ce599a2f5b0d0732189eed653420e7294c039d342c6e204a"},
|
||||
{file = "Pillow-8.1.2.tar.gz", hash = "sha256:b07c660e014852d98a00a91adfbe25033898a9d90a8f39beb2437d22a203fc44"},
|
||||
]
|
||||
pycparser = [
|
||||
{file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
|
||||
@ -468,55 +480,44 @@ pyfuse3 = [
|
||||
{file = "pyfuse3-3.2.0.tar.gz", hash = "sha256:45f0053ad601b03a36e2c283a5271403674245a66a0daf50e3deaab0ea4fa82f"},
|
||||
]
|
||||
reportlab = [
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:1da3d7a35f918cee905facfa94bd00ae6091cadc06dca1b0b31b69ae02d41d1d"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:792efba0c0c6e4ee94f6dc95f305451733ee9230a1c7d51cb8e5301a549e0dfb"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f3d4a1a273dc141e03b72a553c11bc14dd7a27ec7654a071edcf83eb04f004bc"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e2b4e33fea2ce9d3a14ea39191b169e41eb2ac995274f54ac8fd27519974bce8"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:b1b20208ecdfffd7ca027955c4fe8972b28b30a4b3b80cf25099a08d3b20ed7c"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-win32.whl", hash = "sha256:5ed00894e0f8281c0b7c0494b4d3067c641fd90c8e5cf933089ec4cc9a48e491"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27m-win_amd64.whl", hash = "sha256:85650446538cd2f606ca234634142a7ccd74cb6db7cfec250f76a4242e0f2431"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:79d63ca40231ca3860859b39a92daa5219035ba9553da89a5e1b218550744121"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:a0c377bc45e73c3f15f55d7de69fab270d174749d5b454ab0de502b15430ec2a"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:cfa854bea525f8c913cb77e2bda724d94b965a0eb3bcfc4a645a9baa29bb86e2"},
|
||||
{file = "reportlab-3.5.59-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:3d7713dddaa8081ed709a1fa2456a43f6a74b0f07d605da8441fd53fef334f69"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:ff547cf4c1de7e104cad1a378431ff81efcb03e90e40871ee686107da5b91442"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19353aead39fc115a4d6c598d6fb9fa26da7e69160a0443ebb49b02903e704e8"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:6f3ad2b1afe99c436563cd436d8693d4a12e2c4bd45f70c7705759ff7837fe53"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:b26d6f416891cef93411d6d478a25db275766081a5fb66368248293ef459f3be"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:dd9687359e466086b9f6fe6d8069034017f8b6ca3080944fae5709767ca6814e"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-win32.whl", hash = "sha256:b71faf3b6e4d7058e1af1b8afedaf39a962db4a219affc8177009d8244ec10d4"},
|
||||
{file = "reportlab-3.5.59-cp36-cp36m-win_amd64.whl", hash = "sha256:4ca5233a19a5ceca23546290f43addec2345789c7d65bb32f8b2668aa148351f"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:9da445cb79e3f740756924c053edc952cde11a65ff5af8acfda3c0a1317136ef"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:07bff6742fba612da8d1b1f783c436338c6fdc6962828159827d5ca7d2b67935"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:52f8237654acbc78ea2fa6fb4a6a06e5b023b6da93f7889adfe2deba09473fad"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:739b743b7ca1ba4b4d64c321de6fccb49b562d0507ea06c817d9cc4faed5cd22"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:33f3cfdc492575f8af3225701301a7e62fc478358729820c9e0091aff5831378"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-win32.whl", hash = "sha256:3e2b4d69763103b9dc9b54c0952dc3cee05cedd06e28c0987fad7f84705b12c0"},
|
||||
{file = "reportlab-3.5.59-cp37-cp37m-win_amd64.whl", hash = "sha256:18a876449c9000c391dd3415ebc8454cd7bb9e488977b894886a2d7d018f16cd"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:04a08d284da86882ec3a41a7c719833362ef891b09ee8e2fbb47cee352aa684a"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-manylinux1_i686.whl", hash = "sha256:83b28104edd58ad65748d2d0e60e0d97e3b91b3e90b4573ea6fe60de6811972c"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9fabd5fbd24f5971085ffe53150d663f158f7d3050b25c95736e29ebf676d454"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:b4ba4c30af7044ee987e61c88a5ffb76031ca0c53666bc85d823b7de55ddbc75"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a315edef5c5610b0c75790142f49487e89ea34397fc247ae8aa890fe6d6dd057"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-win32.whl", hash = "sha256:5214a289cf01ebbd65e49bae83709671dd9edb601891cf0ae8abf85f3c0b392f"},
|
||||
{file = "reportlab-3.5.59-cp38-cp38-win_amd64.whl", hash = "sha256:009fa61710647cdc62eb373345248d8ebb93583a058990f7c4f9be46d90aa5b1"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:09fb11ab1500e679fc1b01199d2fed24435499856e75043a9ac0d31dd48fd881"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-manylinux1_i686.whl", hash = "sha256:18eec161411026dde49767bee4e5e8eeb8014879554811a62581dc7433628d5b"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:a1d3f7022a920d4a5e165d264581f1862e1c1b877ceeabb96fe98cec98125ae5"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:1b85c20e89c22ae902ca973df2afdd2d64d27dc4ffd2b29ebad8c805a213756b"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:de0c675fc2998a7eaa929c356ba49c84f53a892e9ab25e8ee7d8ebbbdcb2ac16"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-win32.whl", hash = "sha256:3b0026c1129147befd4e5a8cf25da8dea1096fce371e7b2412e36d7254019c06"},
|
||||
{file = "reportlab-3.5.59-cp39-cp39-win_amd64.whl", hash = "sha256:6191961533d49c9d860964d42bada4d7ac3bb28502d984feb8034093f2012fa8"},
|
||||
{file = "reportlab-3.5.59.tar.gz", hash = "sha256:a755cca2dcf023130b03bb671670301a992157d5c3151d838c0b68ef89894536"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:fd6712a8a6dca12181a3a12316f97810927861e77f2a98029efd2c5cfc8546dc"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:ee711804acdaf3ea7f0f2cd27f19478af993e730df8c8d923a678eb0e2572fba"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4c42e85851f969e21fa4d6414587b7544e877ce685e2495d7d422589c70b6281"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d8fefd07072bfae2715283a821fb1acf8fc4946cf925509d5cc2af791c611809"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:bdf751289efee4891f4f354ce9122da8de8258a40f328b3f11540c4888363337"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-win32.whl", hash = "sha256:f0634740b099b69caed081acd89692996b5504c59f86f39781b6bebc82b267f5"},
|
||||
{file = "reportlab-3.5.65-cp36-cp36m-win_amd64.whl", hash = "sha256:d810bffd4bcd50fdcb2bab0d1fe9ea4e6187ed5237687e41c6ade6c884b00c1e"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:46745826657d35f86843487f4bc6f6f805f61260428f8ee13642bf6372f9df55"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:bc62187181582772688d65c557ad6a40a4c3bb8d1f74de463d35ea81983e9b75"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:58bec163f727c1c60515fc4704a961b3b4ccf2c76b4e6ec1a457ea7ed0c2d756"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d92834993bf998853a04946729266a3276965e7b13f7423212f1c1abdfc4a1c7"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:9ec95808b742ce70c1dab28b2c5bef9093816b92315b948419c2c6968658f9cc"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-win32.whl", hash = "sha256:b9494986f35d82350b0ce0c29704a49a3945421b789dff92e93fbd3de554fa34"},
|
||||
{file = "reportlab-3.5.65-cp37-cp37m-win_amd64.whl", hash = "sha256:07f9d9c0360cb8fc780ca05264faa68b90583cd28dbdf2cda6bda34379b6e66c"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:81898de0a0be2c8318468ae0ae1590f828805e9b7fd68e5a50667dce8b942171"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-manylinux1_i686.whl", hash = "sha256:99aeee49a61c85f1af1087e9e418f3d0c2352c4dd0f0abbfac17ae6c467185aa"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3ec70873d99c14570e2a9c44b86c8c01526871e7af5ee4b2855246db15cb0c9f"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:c12432575c793b8cd8552fddc219bbf2813541c64d02854ae345a108fb875b9d"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:b2cf692ae7af995b499a31a3f58f2001d98e310e03f74812bcb97a08078239c0"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-win32.whl", hash = "sha256:f92388e30bf6b5d2eceb3d7b05ee2df856635f74ce7d950a8f45d2b70c685a5b"},
|
||||
{file = "reportlab-3.5.65-cp38-cp38-win_amd64.whl", hash = "sha256:6f007142f2b166f52cbb3e5d23319e3e496c429831e53b904e6db28c3370f279"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:8707cc21a769150154bf4634dca6e9581ae24a05f0fb81a84fcc1143b1cbbfde"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-manylinux1_i686.whl", hash = "sha256:27a831da0d17153e33c985bd7a88307e206c5a28778cddb755d5372598d12637"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:fe5d98cdac07dd702bcd49f5723aacdd0af8c84d70fc82a5cc3781e52aedad52"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:ba2d10f368c9ea1e76c84b3bb6b9982eb5a8f243c434e821c505b75ca8d85852"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:289539f7888239343ef7ebcd30c55e6204ef78d5f70e1547fdeb854a2da8bfa1"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-win32.whl", hash = "sha256:cdf8ff72cd6fa9303744c8409fb81ef7720da2e034c369762c2fdf496462179e"},
|
||||
{file = "reportlab-3.5.65-cp39-cp39-win_amd64.whl", hash = "sha256:4a784ecdf3008f533e5a032b96c395e8592ed5e679baaf5ef4dcc136b01c72e9"},
|
||||
{file = "reportlab-3.5.65.tar.gz", hash = "sha256:b2c7eedb4d19db63301c27ad1076086a099fd4c8ca0a6f62f6e9ed749fa5908f"},
|
||||
]
|
||||
rmcl = [
|
||||
{file = "rmcl-0.3.1-py3-none-any.whl", hash = "sha256:e4ebcc3e6ce7e9efb1dec4a2d0a44c463ef3854d44e1f8919c65a2b3f9312ec7"},
|
||||
{file = "rmcl-0.3.1.tar.gz", hash = "sha256:5b5316adf53cca9e56273cad220cb7374cd56e7bac962c943868b05fc090e98c"},
|
||||
{file = "rmcl-0.4.0-py3-none-any.whl", hash = "sha256:d2fc5d183b213797f5886a6af52c5531c87b4e1770cc720e0e8ba5992e728473"},
|
||||
{file = "rmcl-0.4.0.tar.gz", hash = "sha256:14bd199ff2c71269c3c1ac63d10932de6c68a250a454550940dae3f06b07527a"},
|
||||
]
|
||||
rmfuse = []
|
||||
rmrl = [
|
||||
{file = "rmrl-0.1.2-py3-none-any.whl", hash = "sha256:173231c7122a11201232ed8fe74e4a9a65192b87886ef8a98ae912aa9b875c26"},
|
||||
{file = "rmrl-0.1.2.tar.gz", hash = "sha256:8c8e757af5ca3eb7475f56803f7f37256fe4c5cad3a9ea5ad7534b2ebd172447"},
|
||||
{file = "rmrl-0.2.1-py3-none-any.whl", hash = "sha256:c35b9f20494a6034a16e916d7351575efb3e3f77acabe9094453a7f6013eaa86"},
|
||||
{file = "rmrl-0.2.1.tar.gz", hash = "sha256:c532bef4168350e6ab17cf37c6481dc12b6a78e007c073503f082f36215b71c9"},
|
||||
]
|
||||
sniffio = [
|
||||
{file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"},
|
||||
|
@ -6,7 +6,7 @@ authors = []
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.8"
|
||||
rmfuse = {git = "https://github.com/rschroll/rmfuse.git"}
|
||||
rmfuse = {git = "https://github.com/rschroll/rmfuse.git", extras = ["pyfuse3"]}
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
|
||||
|
0
pkgs/tools/filesystems/rmfuse/update
Normal file → Executable file
0
pkgs/tools/filesystems/rmfuse/update
Normal file → Executable file
@ -4,10 +4,10 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "s3backer";
|
||||
version = "1.5.4";
|
||||
version = "1.6.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
sha256 = "1228qlfgz48k9vv72hrz488zg73zls99cppb9vmikc0pzv1xndsx";
|
||||
sha256 = "sha256-67sVT72i8tOMdGH/+Oh1N7Vh/2/qD56ImGWI+tprMOM=";
|
||||
rev = version;
|
||||
repo = "s3backer";
|
||||
owner = "archiecobbs";
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "broadlink-cli";
|
||||
version = "0.16.0";
|
||||
version = "0.17.0";
|
||||
|
||||
# the tools are available as part of the source distribution from GH but
|
||||
# not pypi, so we have to fetch them here.
|
||||
@ -10,7 +10,7 @@ python3Packages.buildPythonApplication rec {
|
||||
owner = "mjg59";
|
||||
repo = "python-broadlink";
|
||||
rev = version;
|
||||
sha256 = "sha256-fdwy58AopAcDp18APzvYionEbrKfTlH/yFpT1gG5iDs=";
|
||||
sha256 = "sha256-b3A36BdIvyl1RxNO5SyxLIpQmu1UHHekyh6vrFjwpp4=";
|
||||
};
|
||||
|
||||
format = "other";
|
||||
|
@ -2,14 +2,14 @@
|
||||
|
||||
buildGoPackage rec {
|
||||
pname = "git-town";
|
||||
version = "7.4.0";
|
||||
version = "7.5.0";
|
||||
|
||||
goPackagePath = "github.com/git-town/git-town";
|
||||
src = fetchFromGitHub {
|
||||
owner = "git-town";
|
||||
repo = "git-town";
|
||||
rev = "v${version}";
|
||||
sha256 = "05s2hp4xn0bs3y6rgqkpgz0k8q8yfpwkw5m8vwim95hk6n41ps18";
|
||||
sha256 = "sha256-RmLDlTK+JO2KRLuLvO927W3WYdDlteBIpgTgDXh8lC8=";
|
||||
};
|
||||
|
||||
buildFlagsArray = [ "-ldflags=-X github.com/git-town/git-town/src/cmd.version=v${version} -X github.com/git-town/git-town/src/cmd.buildDate=nix" ];
|
||||
|
@ -4,13 +4,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "oppai-ng";
|
||||
version = "4.0.0";
|
||||
version = "4.1.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Francesco149";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "sha256-fUtyQaHcNBmDs1BPbFGieKY/CFyETqBxYzzIXSERFJY=";
|
||||
sha256 = "sha256-L9eraLOWm1tMImS8bLB9T4Md4VdTSxqI9Bt4r8eqxqs=";
|
||||
};
|
||||
|
||||
buildPhase = ''
|
||||
|
@ -1,8 +1,15 @@
|
||||
{ stdenv, fetchFromGitHub, rustPlatform, cargo, cmake, sphinx, lib, prefix ? "uutils-"
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, rustPlatform
|
||||
, cargo
|
||||
, sphinx
|
||||
, Security
|
||||
, prefix ? "uutils-"
|
||||
, buildMulticallBinary ? true
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "uutils-coreutils";
|
||||
version = "0.0.4";
|
||||
|
||||
@ -13,21 +20,32 @@ rustPlatform.buildRustPackage rec {
|
||||
sha256 = "sha256-z5lDKJpFxXDCQq+0Da/63GGoUXacy5TSn+1gJiMvicc=";
|
||||
};
|
||||
|
||||
# too many impure/platform-dependent tests
|
||||
doCheck = false;
|
||||
postPatch = ''
|
||||
# can be removed after https://github.com/uutils/coreutils/pull/1815 is included
|
||||
substituteInPlace GNUmakefile \
|
||||
--replace uutils coreutils
|
||||
'';
|
||||
|
||||
cargoSha256 = "sha256-x/nn2JNe8x+I0G2Vbr2PZAHCghwLBDhKAhkHPQFeL0M=";
|
||||
cargoDeps = rustPlatform.fetchCargoTarball {
|
||||
inherit src;
|
||||
name = "${pname}-${version}";
|
||||
hash = "sha256-x/nn2JNe8x+I0G2Vbr2PZAHCghwLBDhKAhkHPQFeL0M=";
|
||||
};
|
||||
|
||||
makeFlags =
|
||||
[ "CARGO=${cargo}/bin/cargo" "PREFIX=$(out)" "PROFILE=release" "INSTALLDIR_MAN=$(out)/share/man/man1" ]
|
||||
++ lib.optional (prefix != null) [ "PROG_PREFIX=${prefix}" ];
|
||||
nativeBuildInputs = [ rustPlatform.cargoSetupHook sphinx ];
|
||||
|
||||
nativeBuildInputs = [ cmake cargo sphinx ];
|
||||
buildInputs = lib.optional stdenv.isDarwin Security;
|
||||
|
||||
# empty {build,install}Phase to use defaults of `stdenv.mkDerivation` rather than rust defaults
|
||||
buildPhase = "";
|
||||
installPhase = "";
|
||||
makeFlags = [
|
||||
"CARGO=${cargo}/bin/cargo"
|
||||
"PREFIX=${placeholder "out"}"
|
||||
"PROFILE=release"
|
||||
"INSTALLDIR_MAN=${placeholder "out"}/share/man/man1"
|
||||
] ++ lib.optionals (prefix != null) [ "PROG_PREFIX=${prefix}" ]
|
||||
++ lib.optionals buildMulticallBinary [ "MULTICALL=y" ];
|
||||
|
||||
# too many impure/platform-dependent tests
|
||||
doCheck = false;
|
||||
|
||||
meta = with lib; {
|
||||
description = "Cross-platform Rust rewrite of the GNU coreutils";
|
||||
@ -36,7 +54,7 @@ rustPlatform.buildRustPackage rec {
|
||||
CLI utils in Rust. This repo is to aggregate the GNU coreutils rewrites.
|
||||
'';
|
||||
homepage = "https://github.com/uutils/coreutils";
|
||||
maintainers = with maintainers; [ siraben ];
|
||||
maintainers = with maintainers; [ siraben SuperSandro2000 ];
|
||||
license = licenses.mit;
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
|
@ -2,16 +2,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "go-shadowsocks2";
|
||||
version = "0.1.3";
|
||||
version = "0.1.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "shadowsocks";
|
||||
repo = "go-shadowsocks2";
|
||||
rev = "v${version}";
|
||||
sha256 = "1wzy3ml4ld83iawcl6p313bskzs6zjhz8vlg8kpwgn71cnbv4pvi";
|
||||
sha256 = "sha256-ouJGrVribymak4SWaLbGhlp41iuw07VdxCypoBr1hWA=";
|
||||
};
|
||||
|
||||
vendorSha256 = "0iyak8af708h3rdrslndladbcjrix35j3rlhpsb8ljchqp09lksg";
|
||||
vendorSha256 = "sha256-RrHksWET5kicbdQ5HRDWhNxx4rTi2zaVeaPoLdg4uQw=";
|
||||
|
||||
meta = with lib; {
|
||||
description = "Fresh implementation of Shadowsocks in Go";
|
||||
|
@ -11,7 +11,6 @@
|
||||
, polkit
|
||||
, modemmanager
|
||||
, libnma
|
||||
, mobile-broadband-provider-info
|
||||
, glib-networking
|
||||
, gsettings-desktop-schemas
|
||||
, libgudev
|
||||
@ -26,11 +25,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "network-manager-applet";
|
||||
version = "1.18.0";
|
||||
version = "1.20.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
|
||||
sha256 = "12xiy8g8qk18jvxvn78mvq03zvzp06bww49na765jjw0rq541fyx";
|
||||
sha256 = "0lsjkbv66hn7acl2pg9h6hz4b700zzv4cjwrwjvy7043blw0bcla";
|
||||
};
|
||||
|
||||
mesonFlags = [
|
||||
@ -51,6 +50,7 @@ stdenv.mkDerivation rec {
|
||||
libgudev
|
||||
modemmanager
|
||||
jansson
|
||||
glib
|
||||
glib-networking
|
||||
libappindicator-gtk3
|
||||
gnome3.adwaita-icon-theme
|
||||
@ -81,7 +81,7 @@ stdenv.mkDerivation rec {
|
||||
meta = with lib; {
|
||||
homepage = "https://gitlab.gnome.org/GNOME/network-manager-applet/";
|
||||
description = "NetworkManager control applet for GNOME";
|
||||
license = licenses.gpl2;
|
||||
license = licenses.gpl2Plus;
|
||||
maintainers = with maintainers; [ phreedom ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
|
72
pkgs/tools/security/expliot/default.nix
Normal file
72
pkgs/tools/security/expliot/default.nix
Normal file
@ -0,0 +1,72 @@
|
||||
{ lib
|
||||
, aiocoap
|
||||
, awsiotpythonsdk
|
||||
, bluepy
|
||||
, buildPythonApplication
|
||||
, can
|
||||
, cmd2
|
||||
, cryptography
|
||||
, fetchFromGitLab
|
||||
, paho-mqtt
|
||||
, pyi2cflash
|
||||
, pymodbus
|
||||
, pynetdicom
|
||||
, pyparsing
|
||||
, pyserial
|
||||
, pyspiflash
|
||||
, pythonOlder
|
||||
, upnpy
|
||||
, xmltodict
|
||||
, zeroconf
|
||||
}:
|
||||
|
||||
buildPythonApplication rec {
|
||||
pname = "expliot";
|
||||
version = "0.9.6";
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "expliot_framework";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "1wn8fyrvis0gw80zzmpivinw6mz5n33inhv39iallsl3is8xpgpa";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
aiocoap
|
||||
awsiotpythonsdk
|
||||
bluepy
|
||||
can
|
||||
cmd2
|
||||
cryptography
|
||||
paho-mqtt
|
||||
pyi2cflash
|
||||
pymodbus
|
||||
pynetdicom
|
||||
pyparsing
|
||||
pyserial
|
||||
pyspiflash
|
||||
upnpy
|
||||
xmltodict
|
||||
zeroconf
|
||||
];
|
||||
|
||||
# Project has no tests
|
||||
doCheck = false;
|
||||
pythonImportsCheck = [ "expliot" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "IoT security testing and exploitation framework";
|
||||
longDescription = ''
|
||||
EXPLIoT is a Framework for security testing and exploiting IoT
|
||||
products and IoT infrastructure. It provides a set of plugins
|
||||
(test cases) which are used to perform the assessment and can
|
||||
be extended easily with new ones. The name EXPLIoT (pronounced
|
||||
expl-aa-yo-tee) is a pun on the word exploit and explains the
|
||||
purpose of the framework i.e. IoT exploitation.
|
||||
'';
|
||||
homepage = "https://expliot.readthedocs.io/";
|
||||
license = with licenses; [ agpl3Plus ];
|
||||
maintainers = with maintainers; [ fab ];
|
||||
};
|
||||
}
|
@ -13,7 +13,7 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "gopass";
|
||||
version = "1.12.1";
|
||||
version = "1.12.2";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles makeWrapper ];
|
||||
|
||||
@ -21,10 +21,10 @@ buildGoModule rec {
|
||||
owner = "gopasspw";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "0ickzq2swhabxqcg32n1i99bam6ip7c0mhhncgvmw332w6pzgvlb";
|
||||
sha256 = "14ylvb7crx32h7inklvvxjc72jz9xq3dhzr5905i76kgx57h64w9";
|
||||
};
|
||||
|
||||
vendorSha256 = "0i0dhipp1gdn0xdl4bpi13ksxf7dc9biz9riapm988bldcr5s1kr";
|
||||
vendorSha256 = "0gjzghrykdw1vp873yi7k8piz3gshzndm12jm6dxgl0ph4335a54";
|
||||
|
||||
subPackages = [ "." ];
|
||||
|
||||
@ -46,6 +46,8 @@ buildGoModule rec {
|
||||
$out/bin/gopass completion $shell > gopass.$shell
|
||||
installShellCompletion gopass.$shell
|
||||
done
|
||||
go run helpers/man/main.go > gopass.1
|
||||
installManPage gopass.1
|
||||
'' + lib.optionalString passAlias ''
|
||||
ln -s $out/bin/gopass $out/bin/pass
|
||||
'';
|
||||
|
@ -7,13 +7,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "libtpms";
|
||||
version = "0.8.0";
|
||||
version = "0.8.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "stefanberger";
|
||||
repo = "libtpms";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-/zvMXdAOb4J3YaqdVJvTUI1/JFC0OKwgiYwYgYB62Y4=";
|
||||
sha256 = "sha256-ljzxaZYC2RzasKoRvnjead8CEkbdptGD4V5QapvAQUQ=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -2,15 +2,15 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "shipyard";
|
||||
version = "0.2.9";
|
||||
version = "0.2.15";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
rev = "v${version}";
|
||||
owner = "shipyard-run";
|
||||
repo = pname;
|
||||
sha256 = "sha256-S2nH1E20frsJzW2RCn+eJ9ylVdhVbo4wesNwlQll9S4=";
|
||||
sha256 = "sha256-QJn1A2l9bK4jUObnKfzO9/2LxY9i+ueGlZiefqCYZKA=";
|
||||
};
|
||||
vendorSha256 = "sha256-rglpY7A0S56slL+mXFRgaZwS0bF1b9zxxmNYiX6TJzs=";
|
||||
vendorSha256 = "sha256-bpPFtyDPelLfpxU5OGkEPrp6EvERThg1TzAQ6otg8B0=";
|
||||
|
||||
buildFlagsArray = [
|
||||
"-ldflags=-s -w -X main.version=${version}"
|
||||
|
@ -4141,6 +4141,8 @@ in
|
||||
|
||||
expect = callPackage ../tools/misc/expect { };
|
||||
|
||||
expliot = python3Packages.callPackage ../tools/security/expliot { };
|
||||
|
||||
f2fs-tools = callPackage ../tools/filesystems/f2fs-tools { };
|
||||
|
||||
Fabric = with python3Packages; toPythonApplication Fabric;
|
||||
@ -5582,11 +5584,13 @@ in
|
||||
kalibrate-hackrf = callPackage ../applications/radio/kalibrate-hackrf { };
|
||||
|
||||
wrapKakoune = kakoune: attrs: callPackage ../applications/editors/kakoune/wrapper.nix (attrs // { inherit kakoune; });
|
||||
kakounePlugins = callPackage ../applications/editors/kakoune/plugins { };
|
||||
kakounePlugins = recurseIntoAttrs (callPackage ../applications/editors/kakoune/plugins { });
|
||||
|
||||
kakoune-unwrapped = callPackage ../applications/editors/kakoune { };
|
||||
kakoune = wrapKakoune kakoune-unwrapped {
|
||||
plugins = [ ]; # override with the list of desired plugins
|
||||
};
|
||||
kakouneUtils = callPackage ../applications/editors/kakoune/plugins/kakoune-utils.nix { };
|
||||
|
||||
kak-lsp = callPackage ../tools/misc/kak-lsp {
|
||||
inherit (darwin.apple_sdk.frameworks) Security;
|
||||
@ -26690,7 +26694,7 @@ in
|
||||
|
||||
wownero = callPackage ../applications/blockchains/wownero.nix {};
|
||||
|
||||
zcash = callPackage ../applications/blockchains/zcash { };
|
||||
zcash = callPackage ../applications/blockchains/zcash { stdenv = llvmPackages_11.stdenv; };
|
||||
|
||||
openethereum = callPackage ../applications/blockchains/openethereum { };
|
||||
|
||||
@ -28497,7 +28501,7 @@ in
|
||||
tlaps = callPackage ../applications/science/logic/tlaplus/tlaps.nix {
|
||||
inherit (ocaml-ng.ocamlPackages_4_05) ocaml;
|
||||
};
|
||||
tlaplusToolbox = callPackage ../applications/science/logic/tlaplus/toolbox.nix {gtk = gtk2;};
|
||||
tlaplusToolbox = callPackage ../applications/science/logic/tlaplus/toolbox.nix {};
|
||||
|
||||
aiger = callPackage ../applications/science/logic/aiger {};
|
||||
|
||||
|
@ -401,7 +401,7 @@ lib.makeScope pkgs.newScope (self: with self; {
|
||||
# oci8 (7.4, 7.3, 7.2)
|
||||
# odbc (7.4, 7.3, 7.2)
|
||||
{ name = "opcache";
|
||||
buildInputs = [ pcre' ] ++ lib.optionals (lib.versionAtLeast php.version "8.0") [
|
||||
buildInputs = [ pcre' ] ++ lib.optionals (!stdenv.isDarwin && lib.versionAtLeast php.version "8.0") [
|
||||
valgrind.dev
|
||||
];
|
||||
patches = lib.optionals (lib.versionOlder php.version "7.4") [
|
||||
@ -421,7 +421,9 @@ lib.makeScope pkgs.newScope (self: with self; {
|
||||
#include "zend_accelerator_util_funcs.h"
|
||||
'') ];
|
||||
zendExtension = true;
|
||||
doCheck = !(lib.versionOlder php.version "7.4"); }
|
||||
doCheck = !(lib.versionOlder php.version "7.4");
|
||||
# Tests launch the builtin webserver.
|
||||
__darwinAllowLocalNetworking = true; }
|
||||
{ name = "openssl";
|
||||
buildInputs = [ openssl ];
|
||||
configureFlags = [ "--with-openssl" ];
|
||||
|
Loading…
Reference in New Issue
Block a user