Merge branch 'master' into staging

This commit is contained in:
Franz Pletz 2016-11-23 02:06:26 +01:00
commit f01dd648f5
No known key found for this signature in database
GPG Key ID: 846FDED7792617B4
301 changed files with 10790 additions and 5348 deletions

View File

@ -8,252 +8,295 @@
The nixpkgs repository has several utility functions to manipulate Nix expressions. The nixpkgs repository has several utility functions to manipulate Nix expressions.
</para> </para>
<section xml:id="sec-pkgs-overridePackages"> <section xml:id="sec-overrides">
<title>pkgs.overridePackages</title> <title>Overriding</title>
<para> <para>
This function inside the nixpkgs expression (<varname>pkgs</varname>) Sometimes one wants to override parts of
can be used to override the set of packages itself. <literal>nixpkgs</literal>, e.g. derivation attributes, the results of
</para> derivations or even the whole package set.
<para>
Warning: this function is expensive and must not be used from within
the nixpkgs repository.
</para>
<para>
Example usage:
<programlisting>let
pkgs = import &lt;nixpkgs&gt; {};
newpkgs = pkgs.overridePackages (self: super: {
foo = super.foo.override { ... };
};
in ...</programlisting>
</para> </para>
<para> <section xml:id="sec-pkgs-overridePackages">
The resulting <varname>newpkgs</varname> will have the new <varname>foo</varname> <title>pkgs.overridePackages</title>
expression, and all other expressions depending on <varname>foo</varname> will also
use the new <varname>foo</varname> expression.
</para>
<para>
The behavior of this function is similar to <link
linkend="sec-modify-via-packageOverrides">config.packageOverrides</link>.
</para>
<para>
The <varname>self</varname> parameter refers to the final package set with the
applied overrides. Using this parameter may lead to infinite recursion if not
used consciously.
</para>
<para>
The <varname>super</varname> parameter refers to the old package set.
It's equivalent to <varname>pkgs</varname> in the above example.
</para>
<para>
Note that in previous versions of nixpkgs, this method replaced any changes from <link
linkend="sec-modify-via-packageOverrides">config.packageOverrides</link>,
along with that from previous calls if this function was called repeatedly.
Now those previous changes will be preserved so this function can be "chained" meaningfully.
To recover the old behavior, make sure <varname>config.packageOverrides</varname> is unset,
and call this only once off a "freshly" imported nixpkgs:
<programlisting>let
pkgs = import &lt;nixpkgs&gt; { config: {}; };
newpkgs = pkgs.overridePackages ...;
in ...</programlisting>
</para>
</section>
<section xml:id="sec-pkg-override">
<title>&lt;pkg&gt;.override</title>
<para>
The function <varname>override</varname> is usually available for all the
derivations in the nixpkgs expression (<varname>pkgs</varname>).
</para>
<para>
It is used to override the arguments passed to a function.
</para>
<para>
Example usages:
<programlisting>pkgs.foo.override { arg1 = val1; arg2 = val2; ... }</programlisting>
<programlisting>pkgs.overridePackages (self: super: {
foo = super.foo.override { barSupport = true ; };
})</programlisting>
<programlisting>mypkg = pkgs.callPackage ./mypkg.nix {
mydep = pkgs.mydep.override { ... };
})</programlisting>
</para>
<para>
In the first example, <varname>pkgs.foo</varname> is the result of a function call
with some default arguments, usually a derivation.
Using <varname>pkgs.foo.override</varname> will call the same function with
the given new arguments.
</para>
</section>
<section xml:id="sec-pkg-overrideAttrs">
<title>&lt;pkg&gt;.overrideAttrs</title>
<para>
The function <varname>overrideAttrs</varname> allows overriding the
attribute set passed to a <varname>stdenv.mkDerivation</varname> call,
producing a new derivation based on the original one.
This function is available on all derivations produced by the
<varname>stdenv.mkDerivation</varname> function, which is most packages
in the nixpkgs expression <varname>pkgs</varname>.
</para>
<para>
Example usage:
<programlisting>helloWithDebug = pkgs.hello.overrideAttrs (oldAttrs: rec {
separateDebugInfo = true;
});</programlisting>
</para>
<para>
In the above example, the <varname>separateDebugInfo</varname> attribute is
overriden to be true, thus building debug info for
<varname>helloWithDebug</varname>, while all other attributes will be
retained from the original <varname>hello</varname> package.
</para>
<para>
The argument <varname>oldAttrs</varname> is conventionally used to refer to
the attr set originally passed to <varname>stdenv.mkDerivation</varname>.
</para>
<note>
<para> <para>
Note that <varname>separateDebugInfo</varname> is processed only by the This function inside the nixpkgs expression (<varname>pkgs</varname>)
<varname>stdenv.mkDerivation</varname> function, not the generated, raw can be used to override the set of packages itself.
Nix derivation. Thus, using <varname>overrideDerivation</varname> will
not work in this case, as it overrides only the attributes of the final
derivation. It is for this reason that <varname>overrideAttrs</varname>
should be preferred in (almost) all cases to
<varname>overrideDerivation</varname>, i.e. to allow using
<varname>sdenv.mkDerivation</varname> to process input arguments, as well
as the fact that it is easier to use (you can use the same attribute
names you see in your Nix code, instead of the ones generated (e.g.
<varname>buildInputs</varname> vs <varname>nativeBuildInputs</varname>,
and involves less typing.
</para> </para>
</note>
</section>
<section xml:id="sec-pkg-overrideDerivation">
<title>&lt;pkg&gt;.overrideDerivation</title>
<warning>
<para>You should prefer <varname>overrideAttrs</varname> in almost all
cases, see its documentation for the reasons why.
<varname>overrideDerivation</varname> is not deprecated and will continue
to work, but is less nice to use and does not have as many abilities as
<varname>overrideAttrs</varname>.
</para>
</warning>
<warning>
<para>Do not use this function in Nixpkgs as it evaluates a Derivation
before modifying it, which breaks package abstraction and removes
error-checking of function arguments. In addition, this
evaluation-per-function application incurs a performance penalty,
which can become a problem if many overrides are used.
It is only intended for ad-hoc customisation, such as in
<filename>~/.nixpkgs/config.nix</filename>.
</para>
</warning>
<para>
The function <varname>overrideDerivation</varname> creates a new derivation
based on an existing one by overriding the original's attributes with
the attribute set produced by the specified function.
This function is available on all
derivations defined using the <varname>makeOverridable</varname> function.
Most standard derivation-producing functions, such as
<varname>stdenv.mkDerivation</varname>, are defined using this
function, which means most packages in the nixpkgs expression,
<varname>pkgs</varname>, have this function.
</para>
<para>
Example usage:
<programlisting>mySed = pkgs.gnused.overrideDerivation (oldAttrs: {
name = "sed-4.2.2-pre";
src = fetchurl {
url = ftp://alpha.gnu.org/gnu/sed/sed-4.2.2-pre.tar.bz2;
sha256 = "11nq06d131y4wmf3drm0yk502d2xc6n5qy82cg88rb9nqd2lj41k";
};
patches = [];
});</programlisting>
</para>
<para>
In the above example, the <varname>name</varname>, <varname>src</varname>,
and <varname>patches</varname> of the derivation will be overridden, while
all other attributes will be retained from the original derivation.
</para>
<para>
The argument <varname>oldAttrs</varname> is used to refer to the attribute set of
the original derivation.
</para>
<note>
<para> <para>
A package's attributes are evaluated *before* being modified by Warning: this function is expensive and must not be used from within
the <varname>overrideDerivation</varname> function. the nixpkgs repository.
For example, the <varname>name</varname> attribute reference
in <varname>url = "mirror://gnu/hello/${name}.tar.gz";</varname>
is filled-in *before* the <varname>overrideDerivation</varname> function
modifies the attribute set. This means that overriding the
<varname>name</varname> attribute, in this example, *will not* change the
value of the <varname>url</varname> attribute. Instead, we need to override
both the <varname>name</varname> *and* <varname>url</varname> attributes.
</para> </para>
</note> <para>
Example usage:
<programlisting>let
pkgs = import &lt;nixpkgs&gt; {};
newpkgs = pkgs.overridePackages (self: super: {
foo = super.foo.override { ... };
};
in ...</programlisting>
</para>
<para>
The resulting <varname>newpkgs</varname> will have the new <varname>foo</varname>
expression, and all other expressions depending on <varname>foo</varname> will also
use the new <varname>foo</varname> expression.
</para>
<para>
The behavior of this function is similar to <link
linkend="sec-modify-via-packageOverrides">config.packageOverrides</link>.
</para>
<para>
The <varname>self</varname> parameter refers to the final package set with the
applied overrides. Using this parameter may lead to infinite recursion if not
used consciously.
</para>
<para>
The <varname>super</varname> parameter refers to the old package set.
It's equivalent to <varname>pkgs</varname> in the above example.
</para>
<para>
Note that in previous versions of nixpkgs, this method replaced any changes from <link
linkend="sec-modify-via-packageOverrides">config.packageOverrides</link>,
along with that from previous calls if this function was called repeatedly.
Now those previous changes will be preserved so this function can be "chained" meaningfully.
To recover the old behavior, make sure <varname>config.packageOverrides</varname> is unset,
and call this only once off a "freshly" imported nixpkgs:
<programlisting>let
pkgs = import &lt;nixpkgs&gt; { config: {}; };
newpkgs = pkgs.overridePackages ...;
in ...</programlisting>
</para>
</section>
<section xml:id="sec-pkg-override">
<title>&lt;pkg&gt;.override</title>
<para>
The function <varname>override</varname> is usually available for all the
derivations in the nixpkgs expression (<varname>pkgs</varname>).
</para>
<para>
It is used to override the arguments passed to a function.
</para>
<para>
Example usages:
<programlisting>pkgs.foo.override { arg1 = val1; arg2 = val2; ... }</programlisting>
<programlisting>pkgs.overridePackages (self: super: {
foo = super.foo.override { barSupport = true ; };
})</programlisting>
<programlisting>mypkg = pkgs.callPackage ./mypkg.nix {
mydep = pkgs.mydep.override { ... };
})</programlisting>
</para>
<para>
In the first example, <varname>pkgs.foo</varname> is the result of a function call
with some default arguments, usually a derivation.
Using <varname>pkgs.foo.override</varname> will call the same function with
the given new arguments.
</para>
</section>
<section xml:id="sec-pkg-overrideAttrs">
<title>&lt;pkg&gt;.overrideAttrs</title>
<para>
The function <varname>overrideAttrs</varname> allows overriding the
attribute set passed to a <varname>stdenv.mkDerivation</varname> call,
producing a new derivation based on the original one.
This function is available on all derivations produced by the
<varname>stdenv.mkDerivation</varname> function, which is most packages
in the nixpkgs expression <varname>pkgs</varname>.
</para>
<para>
Example usage:
<programlisting>helloWithDebug = pkgs.hello.overrideAttrs (oldAttrs: rec {
separateDebugInfo = true;
});</programlisting>
</para>
<para>
In the above example, the <varname>separateDebugInfo</varname> attribute is
overriden to be true, thus building debug info for
<varname>helloWithDebug</varname>, while all other attributes will be
retained from the original <varname>hello</varname> package.
</para>
<para>
The argument <varname>oldAttrs</varname> is conventionally used to refer to
the attr set originally passed to <varname>stdenv.mkDerivation</varname>.
</para>
<note>
<para>
Note that <varname>separateDebugInfo</varname> is processed only by the
<varname>stdenv.mkDerivation</varname> function, not the generated, raw
Nix derivation. Thus, using <varname>overrideDerivation</varname> will
not work in this case, as it overrides only the attributes of the final
derivation. It is for this reason that <varname>overrideAttrs</varname>
should be preferred in (almost) all cases to
<varname>overrideDerivation</varname>, i.e. to allow using
<varname>sdenv.mkDerivation</varname> to process input arguments, as well
as the fact that it is easier to use (you can use the same attribute
names you see in your Nix code, instead of the ones generated (e.g.
<varname>buildInputs</varname> vs <varname>nativeBuildInputs</varname>,
and involves less typing.
</para>
</note>
</section>
<section xml:id="sec-pkg-overrideDerivation">
<title>&lt;pkg&gt;.overrideDerivation</title>
<warning>
<para>You should prefer <varname>overrideAttrs</varname> in almost all
cases, see its documentation for the reasons why.
<varname>overrideDerivation</varname> is not deprecated and will continue
to work, but is less nice to use and does not have as many abilities as
<varname>overrideAttrs</varname>.
</para>
</warning>
<warning>
<para>Do not use this function in Nixpkgs as it evaluates a Derivation
before modifying it, which breaks package abstraction and removes
error-checking of function arguments. In addition, this
evaluation-per-function application incurs a performance penalty,
which can become a problem if many overrides are used.
It is only intended for ad-hoc customisation, such as in
<filename>~/.nixpkgs/config.nix</filename>.
</para>
</warning>
<para>
The function <varname>overrideDerivation</varname> creates a new derivation
based on an existing one by overriding the original's attributes with
the attribute set produced by the specified function.
This function is available on all
derivations defined using the <varname>makeOverridable</varname> function.
Most standard derivation-producing functions, such as
<varname>stdenv.mkDerivation</varname>, are defined using this
function, which means most packages in the nixpkgs expression,
<varname>pkgs</varname>, have this function.
</para>
<para>
Example usage:
<programlisting>mySed = pkgs.gnused.overrideDerivation (oldAttrs: {
name = "sed-4.2.2-pre";
src = fetchurl {
url = ftp://alpha.gnu.org/gnu/sed/sed-4.2.2-pre.tar.bz2;
sha256 = "11nq06d131y4wmf3drm0yk502d2xc6n5qy82cg88rb9nqd2lj41k";
};
patches = [];
});</programlisting>
</para>
<para>
In the above example, the <varname>name</varname>, <varname>src</varname>,
and <varname>patches</varname> of the derivation will be overridden, while
all other attributes will be retained from the original derivation.
</para>
<para>
The argument <varname>oldAttrs</varname> is used to refer to the attribute set of
the original derivation.
</para>
<note>
<para>
A package's attributes are evaluated *before* being modified by
the <varname>overrideDerivation</varname> function.
For example, the <varname>name</varname> attribute reference
in <varname>url = "mirror://gnu/hello/${name}.tar.gz";</varname>
is filled-in *before* the <varname>overrideDerivation</varname> function
modifies the attribute set. This means that overriding the
<varname>name</varname> attribute, in this example, *will not* change the
value of the <varname>url</varname> attribute. Instead, we need to override
both the <varname>name</varname> *and* <varname>url</varname> attributes.
</para>
</note>
</section>
<section xml:id="sec-lib-makeOverridable">
<title>lib.makeOverridable</title>
<para>
The function <varname>lib.makeOverridable</varname> is used to make the result
of a function easily customizable. This utility only makes sense for functions
that accept an argument set and return an attribute set.
</para>
<para>
Example usage:
<programlisting>f = { a, b }: { result = a+b; }
c = lib.makeOverridable f { a = 1; b = 2; }</programlisting>
</para>
<para>
The variable <varname>c</varname> is the value of the <varname>f</varname> function
applied with some default arguments. Hence the value of <varname>c.result</varname>
is <literal>3</literal>, in this example.
</para>
<para>
The variable <varname>c</varname> however also has some additional functions, like
<link linkend="sec-pkg-override">c.override</link> which can be used to
override the default arguments. In this example the value of
<varname>(c.override { a = 4; }).result</varname> is 6.
</para>
</section>
</section> </section>
<section xml:id="sec-lib-makeOverridable"> <section xml:id="sec-generators">
<title>lib.makeOverridable</title> <title>Generators</title>
<para> <para>
The function <varname>lib.makeOverridable</varname> is used to make the result Generators are functions that create file formats from nix
of a function easily customizable. This utility only makes sense for functions data structures, e.g. for configuration files.
that accept an argument set and return an attribute set. There are generators available for: <literal>INI</literal>,
<literal>JSON</literal> and <literal>YAML</literal>
</para> </para>
<para> <para>
Example usage: All generators follow a similar call interface: <code>generatorName
configFunctions data</code>, where <literal>configFunctions</literal> is a
<programlisting>f = { a, b }: { result = a+b; } set of user-defined functions that format variable parts of the content.
c = lib.makeOverridable f { a = 1; b = 2; }</programlisting> They each have common defaults, so often they do not need to be set
manually. An example is <code>mkSectionName ? (name: libStr.escape [ "[" "]"
] name)</code> from the <literal>INI</literal> generator. It gets the name
of a section and returns a sanitized name. The default
<literal>mkSectionName</literal> escapes <literal>[</literal> and
<literal>]</literal> with a backslash.
</para> </para>
<para> <note><para>Nix store paths can be converted to strings by enclosing a
The variable <varname>c</varname> is the value of the <varname>f</varname> function derivation attribute like so: <code>"${drv}"</code>.</para></note>
applied with some default arguments. Hence the value of <varname>c.result</varname>
is <literal>3</literal>, in this example.
</para>
<para> <para>
The variable <varname>c</varname> however also has some additional functions, like Detailed documentation for each generator can be found in
<link linkend="sec-pkg-override">c.override</link> which can be used to <literal>lib/generators.nix</literal>.
override the default arguments. In this example the value of
<varname>(c.override { a = 4; }).result</varname> is 6.
</para> </para>
</section> </section>
@ -370,37 +413,37 @@ c = lib.makeOverridable f { a = 1; b = 2; }</programlisting>
</section> </section>
<section xml:id="sec-pkgs-dockerTools"> <section xml:id="sec-pkgs-dockerTools">
<title>pkgs.dockerTools</title> <title>pkgs.dockerTools</title>
<para> <para>
<varname>pkgs.dockerTools</varname> is a set of functions for creating and <varname>pkgs.dockerTools</varname> is a set of functions for creating and
manipulating Docker images according to the manipulating Docker images according to the
<link xlink:href="https://github.com/docker/docker/blob/master/image/spec/v1.md#docker-image-specification-v100"> <link xlink:href="https://github.com/docker/docker/blob/master/image/spec/v1.md#docker-image-specification-v100">
Docker Image Specification v1.0.0 Docker Image Specification v1.0.0
</link>. Docker itself is not used to perform any of the operations done by these </link>. Docker itself is not used to perform any of the operations done by these
functions. functions.
</para> </para>
<warning> <warning>
<para> <para>
The <varname>dockerTools</varname> API is unstable and may be subject to The <varname>dockerTools</varname> API is unstable and may be subject to
backwards-incompatible changes in the future. backwards-incompatible changes in the future.
</para> </para>
</warning> </warning>
<section xml:id="ssec-pkgs-dockerTools-buildImage"> <section xml:id="ssec-pkgs-dockerTools-buildImage">
<title>buildImage</title> <title>buildImage</title>
<para> <para>
This function is analogous to the <command>docker build</command> command, This function is analogous to the <command>docker build</command> command,
in that can used to build a Docker-compatible repository tarball containing in that can used to build a Docker-compatible repository tarball containing
a single image with one or multiple layers. As such, the result a single image with one or multiple layers. As such, the result
is suitable for being loaded in Docker with <command>docker load</command>. is suitable for being loaded in Docker with <command>docker load</command>.
</para> </para>
<para> <para>
The parameters of <varname>buildImage</varname> with relative example values are The parameters of <varname>buildImage</varname> with relative example values are
described below: described below:
</para> </para>
<example xml:id='ex-dockerTools-buildImage'><title>Docker build</title> <example xml:id='ex-dockerTools-buildImage'><title>Docker build</title>
@ -431,131 +474,131 @@ c = lib.makeOverridable f { a = 1; b = 2; }</programlisting>
</example> </example>
<para>The above example will build a Docker image <literal>redis/latest</literal> <para>The above example will build a Docker image <literal>redis/latest</literal>
from the given base image. Loading and running this image in Docker results in from the given base image. Loading and running this image in Docker results in
<literal>redis-server</literal> being started automatically. <literal>redis-server</literal> being started automatically.
</para> </para>
<calloutlist> <calloutlist>
<callout arearefs='ex-dockerTools-buildImage-1'> <callout arearefs='ex-dockerTools-buildImage-1'>
<para> <para>
<varname>name</varname> specifies the name of the resulting image. <varname>name</varname> specifies the name of the resulting image.
This is the only required argument for <varname>buildImage</varname>. This is the only required argument for <varname>buildImage</varname>.
</para> </para>
</callout> </callout>
<callout arearefs='ex-dockerTools-buildImage-2'> <callout arearefs='ex-dockerTools-buildImage-2'>
<para> <para>
<varname>tag</varname> specifies the tag of the resulting image. <varname>tag</varname> specifies the tag of the resulting image.
By default it's <literal>latest</literal>. By default it's <literal>latest</literal>.
</para> </para>
</callout> </callout>
<callout arearefs='ex-dockerTools-buildImage-3'> <callout arearefs='ex-dockerTools-buildImage-3'>
<para> <para>
<varname>fromImage</varname> is the repository tarball containing the base image. <varname>fromImage</varname> is the repository tarball containing the base image.
It must be a valid Docker image, such as exported by <command>docker save</command>. It must be a valid Docker image, such as exported by <command>docker save</command>.
By default it's <literal>null</literal>, which can be seen as equivalent By default it's <literal>null</literal>, which can be seen as equivalent
to <literal>FROM scratch</literal> of a <filename>Dockerfile</filename>. to <literal>FROM scratch</literal> of a <filename>Dockerfile</filename>.
</para> </para>
</callout> </callout>
<callout arearefs='ex-dockerTools-buildImage-4'> <callout arearefs='ex-dockerTools-buildImage-4'>
<para> <para>
<varname>fromImageName</varname> can be used to further specify <varname>fromImageName</varname> can be used to further specify
the base image within the repository, in case it contains multiple images. the base image within the repository, in case it contains multiple images.
By default it's <literal>null</literal>, in which case By default it's <literal>null</literal>, in which case
<varname>buildImage</varname> will peek the first image available <varname>buildImage</varname> will peek the first image available
in the repository. in the repository.
</para> </para>
</callout> </callout>
<callout arearefs='ex-dockerTools-buildImage-5'> <callout arearefs='ex-dockerTools-buildImage-5'>
<para> <para>
<varname>fromImageTag</varname> can be used to further specify the tag <varname>fromImageTag</varname> can be used to further specify the tag
of the base image within the repository, in case an image contains multiple tags. of the base image within the repository, in case an image contains multiple tags.
By default it's <literal>null</literal>, in which case By default it's <literal>null</literal>, in which case
<varname>buildImage</varname> will peek the first tag available for the base image. <varname>buildImage</varname> will peek the first tag available for the base image.
</para> </para>
</callout> </callout>
<callout arearefs='ex-dockerTools-buildImage-6'> <callout arearefs='ex-dockerTools-buildImage-6'>
<para> <para>
<varname>contents</varname> is a derivation that will be copied in the new <varname>contents</varname> is a derivation that will be copied in the new
layer of the resulting image. This can be similarly seen as layer of the resulting image. This can be similarly seen as
<command>ADD contents/ /</command> in a <filename>Dockerfile</filename>. <command>ADD contents/ /</command> in a <filename>Dockerfile</filename>.
By default it's <literal>null</literal>. By default it's <literal>null</literal>.
</para> </para>
</callout> </callout>
<callout arearefs='ex-dockerTools-buildImage-runAsRoot'> <callout arearefs='ex-dockerTools-buildImage-runAsRoot'>
<para> <para>
<varname>runAsRoot</varname> is a bash script that will run as root <varname>runAsRoot</varname> is a bash script that will run as root
in an environment that overlays the existing layers of the base image with in an environment that overlays the existing layers of the base image with
the new resulting layer, including the previously copied the new resulting layer, including the previously copied
<varname>contents</varname> derivation. <varname>contents</varname> derivation.
This can be similarly seen as This can be similarly seen as
<command>RUN ...</command> in a <filename>Dockerfile</filename>. <command>RUN ...</command> in a <filename>Dockerfile</filename>.
<note> <note>
<para> <para>
Using this parameter requires the <literal>kvm</literal> Using this parameter requires the <literal>kvm</literal>
device to be available. device to be available.
</para> </para>
</note> </note>
</para> </para>
</callout> </callout>
<callout arearefs='ex-dockerTools-buildImage-8'> <callout arearefs='ex-dockerTools-buildImage-8'>
<para> <para>
<varname>config</varname> is used to specify the configuration of the <varname>config</varname> is used to specify the configuration of the
containers that will be started off the built image in Docker. containers that will be started off the built image in Docker.
The available options are listed in the The available options are listed in the
<link xlink:href="https://github.com/docker/docker/blob/master/image/spec/v1.md#container-runconfig-field-descriptions"> <link xlink:href="https://github.com/docker/docker/blob/master/image/spec/v1.md#container-runconfig-field-descriptions">
Docker Image Specification v1.0.0 Docker Image Specification v1.0.0
</link>. </link>.
</para> </para>
</callout> </callout>
</calloutlist> </calloutlist>
<para> <para>
After the new layer has been created, its closure After the new layer has been created, its closure
(to which <varname>contents</varname>, <varname>config</varname> and (to which <varname>contents</varname>, <varname>config</varname> and
<varname>runAsRoot</varname> contribute) will be copied in the layer itself. <varname>runAsRoot</varname> contribute) will be copied in the layer itself.
Only new dependencies that are not already in the existing layers will be copied. Only new dependencies that are not already in the existing layers will be copied.
</para> </para>
<para> <para>
At the end of the process, only one new single layer will be produced and At the end of the process, only one new single layer will be produced and
added to the resulting image. added to the resulting image.
</para> </para>
<para> <para>
The resulting repository will only list the single image The resulting repository will only list the single image
<varname>image/tag</varname>. In the case of <xref linkend='ex-dockerTools-buildImage'/> <varname>image/tag</varname>. In the case of <xref linkend='ex-dockerTools-buildImage'/>
it would be <varname>redis/latest</varname>. it would be <varname>redis/latest</varname>.
</para> </para>
<para> <para>
It is possible to inspect the arguments with which an image was built It is possible to inspect the arguments with which an image was built
using its <varname>buildArgs</varname> attribute. using its <varname>buildArgs</varname> attribute.
</para> </para>
</section> </section>
<section xml:id="ssec-pkgs-dockerTools-fetchFromRegistry"> <section xml:id="ssec-pkgs-dockerTools-fetchFromRegistry">
<title>pullImage</title> <title>pullImage</title>
<para> <para>
This function is analogous to the <command>docker pull</command> command, This function is analogous to the <command>docker pull</command> command,
in that can be used to fetch a Docker image from a Docker registry. in that can be used to fetch a Docker image from a Docker registry.
Currently only registry <literal>v1</literal> is supported. Currently only registry <literal>v1</literal> is supported.
By default <link xlink:href="https://hub.docker.com/">Docker Hub</link> By default <link xlink:href="https://hub.docker.com/">Docker Hub</link>
is used to pull images. is used to pull images.
</para> </para>
<para> <para>
Its parameters are described in the example below: Its parameters are described in the example below:
</para> </para>
<example xml:id='ex-dockerTools-pullImage'><title>Docker pull</title> <example xml:id='ex-dockerTools-pullImage'><title>Docker pull</title>
@ -573,73 +616,73 @@ c = lib.makeOverridable f { a = 1; b = 2; }</programlisting>
</example> </example>
<calloutlist> <calloutlist>
<callout arearefs='ex-dockerTools-pullImage-1'> <callout arearefs='ex-dockerTools-pullImage-1'>
<para> <para>
<varname>imageName</varname> specifies the name of the image to be downloaded, <varname>imageName</varname> specifies the name of the image to be downloaded,
which can also include the registry namespace (e.g. <literal>library/debian</literal>). which can also include the registry namespace (e.g. <literal>library/debian</literal>).
This argument is required. This argument is required.
</para> </para>
</callout> </callout>
<callout arearefs='ex-dockerTools-pullImage-2'> <callout arearefs='ex-dockerTools-pullImage-2'>
<para> <para>
<varname>imageTag</varname> specifies the tag of the image to be downloaded. <varname>imageTag</varname> specifies the tag of the image to be downloaded.
By default it's <literal>latest</literal>. By default it's <literal>latest</literal>.
</para> </para>
</callout> </callout>
<callout arearefs='ex-dockerTools-pullImage-3'> <callout arearefs='ex-dockerTools-pullImage-3'>
<para> <para>
<varname>imageId</varname>, if specified this exact image will be fetched, instead <varname>imageId</varname>, if specified this exact image will be fetched, instead
of <varname>imageName/imageTag</varname>. However, the resulting repository of <varname>imageName/imageTag</varname>. However, the resulting repository
will still be named <varname>imageName/imageTag</varname>. will still be named <varname>imageName/imageTag</varname>.
By default it's <literal>null</literal>. By default it's <literal>null</literal>.
</para> </para>
</callout> </callout>
<callout arearefs='ex-dockerTools-pullImage-4'> <callout arearefs='ex-dockerTools-pullImage-4'>
<para> <para>
<varname>sha256</varname> is the checksum of the whole fetched image. <varname>sha256</varname> is the checksum of the whole fetched image.
This argument is required. This argument is required.
</para> </para>
<note> <note>
<para>The checksum is computed on the unpacked directory, not on the final tarball.</para> <para>The checksum is computed on the unpacked directory, not on the final tarball.</para>
</note> </note>
</callout> </callout>
<callout arearefs='ex-dockerTools-pullImage-5'> <callout arearefs='ex-dockerTools-pullImage-5'>
<para> <para>
In the above example the default values are shown for the variables In the above example the default values are shown for the variables
<varname>indexUrl</varname> and <varname>registryVersion</varname>. <varname>indexUrl</varname> and <varname>registryVersion</varname>.
Hence by default the Docker.io registry is used to pull the images. Hence by default the Docker.io registry is used to pull the images.
</para> </para>
</callout> </callout>
</calloutlist> </calloutlist>
</section> </section>
<section xml:id="ssec-pkgs-dockerTools-exportImage"> <section xml:id="ssec-pkgs-dockerTools-exportImage">
<title>exportImage</title> <title>exportImage</title>
<para> <para>
This function is analogous to the <command>docker export</command> command, This function is analogous to the <command>docker export</command> command,
in that can used to flatten a Docker image that contains multiple layers. in that can used to flatten a Docker image that contains multiple layers.
It is in fact the result of the merge of all the layers of the image. It is in fact the result of the merge of all the layers of the image.
As such, the result is suitable for being imported in Docker As such, the result is suitable for being imported in Docker
with <command>docker import</command>. with <command>docker import</command>.
</para> </para>
<note> <note>
<para> <para>
Using this function requires the <literal>kvm</literal> Using this function requires the <literal>kvm</literal>
device to be available. device to be available.
</para> </para>
</note> </note>
<para> <para>
The parameters of <varname>exportImage</varname> are the following: The parameters of <varname>exportImage</varname> are the following:
</para> </para>
<example xml:id='ex-dockerTools-exportImage'><title>Docker export</title> <example xml:id='ex-dockerTools-exportImage'><title>Docker export</title>
@ -655,26 +698,26 @@ c = lib.makeOverridable f { a = 1; b = 2; }</programlisting>
</example> </example>
<para> <para>
The parameters relative to the base image have the same synopsis as The parameters relative to the base image have the same synopsis as
described in <xref linkend='ssec-pkgs-dockerTools-buildImage'/>, except that described in <xref linkend='ssec-pkgs-dockerTools-buildImage'/>, except that
<varname>fromImage</varname> is the only required argument in this case. <varname>fromImage</varname> is the only required argument in this case.
</para> </para>
<para> <para>
The <varname>name</varname> argument is the name of the derivation output, The <varname>name</varname> argument is the name of the derivation output,
which defaults to <varname>fromImage.name</varname>. which defaults to <varname>fromImage.name</varname>.
</para> </para>
</section> </section>
<section xml:id="ssec-pkgs-dockerTools-shadowSetup"> <section xml:id="ssec-pkgs-dockerTools-shadowSetup">
<title>shadowSetup</title> <title>shadowSetup</title>
<para> <para>
This constant string is a helper for setting up the base files for managing This constant string is a helper for setting up the base files for managing
users and groups, only if such files don't exist already. users and groups, only if such files don't exist already.
It is suitable for being used in a It is suitable for being used in a
<varname>runAsRoot</varname> <xref linkend='ex-dockerTools-buildImage-runAsRoot'/> script for cases like <varname>runAsRoot</varname> <xref linkend='ex-dockerTools-buildImage-runAsRoot'/> script for cases like
in the example below: in the example below:
</para> </para>
<example xml:id='ex-dockerTools-shadowSetup'><title>Shadow base files</title> <example xml:id='ex-dockerTools-shadowSetup'><title>Shadow base files</title>
@ -695,12 +738,12 @@ c = lib.makeOverridable f { a = 1; b = 2; }</programlisting>
</example> </example>
<para> <para>
Creating base files like <literal>/etc/passwd</literal> or Creating base files like <literal>/etc/passwd</literal> or
<literal>/etc/login.defs</literal> are necessary for shadow-utils to <literal>/etc/login.defs</literal> are necessary for shadow-utils to
manipulate users and groups. manipulate users and groups.
</para> </para>
</section> </section>
</section> </section>

View File

@ -20,6 +20,7 @@
<xi:include href="package-notes.xml" /> <xi:include href="package-notes.xml" />
<xi:include href="coding-conventions.xml" /> <xi:include href="coding-conventions.xml" />
<xi:include href="submitting-changes.xml" /> <xi:include href="submitting-changes.xml" />
<xi:include href="reviewing-contributions.xml" />
<xi:include href="contributing.xml" /> <xi:include href="contributing.xml" />
</book> </book>

View File

@ -27,6 +27,7 @@ let
# misc # misc
debug = import ./debug.nix; debug = import ./debug.nix;
generators = import ./generators.nix;
misc = import ./deprecated.nix; misc = import ./deprecated.nix;
# domain-specific # domain-specific
@ -39,7 +40,7 @@ in
customisation maintainers meta sources customisation maintainers meta sources
modules options types modules options types
licenses platforms systems licenses platforms systems
debug misc debug generators misc
sandbox fetchers; sandbox fetchers;
} }
# !!! don't include everything at top-level; perhaps only the most # !!! don't include everything at top-level; perhaps only the most

72
lib/generators.nix Normal file
View File

@ -0,0 +1,72 @@
/* Functions that generate widespread file
* formats from nix data structures.
*
* They all follow a similar interface:
* generator { config-attrs } data
*
* Tests can be found in ./tests.nix
* Documentation in the manual, #sec-generators
*/
with import ./trivial.nix;
let
libStr = import ./strings.nix;
libAttr = import ./attrsets.nix;
flipMapAttrs = flip libAttr.mapAttrs;
in
rec {
/* Generates an INI-style config file from an
* attrset of sections to an attrset of key-value pairs.
*
* generators.toINI {} {
* foo = { hi = "${pkgs.hello}"; ciao = "bar"; };
* baz = { "also, integers" = 42; };
* }
*
*> [baz]
*> also, integers=42
*>
*> [foo]
*> ciao=bar
*> hi=/nix/store/y93qql1p5ggfnaqjjqhxcw0vqw95rlz0-hello-2.10
*
* The mk* configuration attributes can generically change
* the way sections and key-value strings are generated.
*
* For more examples see the test cases in ./tests.nix.
*/
toINI = {
# apply transformations (e.g. escapes) to section names
mkSectionName ? (name: libStr.escape [ "[" "]" ] name),
# format a setting line from key and value
mkKeyValue ? (k: v: "${libStr.escape ["="] k}=${toString v}")
}: attrsOfAttrs:
let
# map function to string for each key val
mapAttrsToStringsSep = sep: mapFn: attrs:
libStr.concatStringsSep sep
(libAttr.mapAttrsToList mapFn attrs);
mkLine = k: v: mkKeyValue k v + "\n";
mkSection = sectName: sectValues: ''
[${mkSectionName sectName}]
'' + libStr.concatStrings (libAttr.mapAttrsToList mkLine sectValues);
in
# map input to ini sections
mapAttrsToStringsSep "\n" mkSection attrsOfAttrs;
/* Generates JSON from an arbitrary (non-function) value.
* For more information see the documentation of the builtin.
*/
toJSON = {}: builtins.toJSON;
/* YAML has been a strict superset of JSON since 1.2, so we
* use toJSON. Before it only had a few differences referring
* to implicit typing rules, so it should work with older
* parsers as well.
*/
toYAML = {}@args: toJSON args;
}

View File

@ -48,6 +48,7 @@
aske = "Kirill Boltaev <aske@fmap.me>"; aske = "Kirill Boltaev <aske@fmap.me>";
asppsa = "Alastair Pharo <asppsa@gmail.com>"; asppsa = "Alastair Pharo <asppsa@gmail.com>";
astsmtl = "Alexander Tsamutali <astsmtl@yandex.ru>"; astsmtl = "Alexander Tsamutali <astsmtl@yandex.ru>";
asymmetric = "Lorenzo Manacorda <lorenzo@mailbox.org>";
aszlig = "aszlig <aszlig@redmoonstudios.org>"; aszlig = "aszlig <aszlig@redmoonstudios.org>";
auntie = "Jonathan Glines <auntieNeo@gmail.com>"; auntie = "Jonathan Glines <auntieNeo@gmail.com>";
avnik = "Alexander V. Nikolaev <avn@avnik.info>"; avnik = "Alexander V. Nikolaev <avn@avnik.info>";
@ -88,6 +89,7 @@
chris-martin = "Chris Martin <ch.martin@gmail.com>"; chris-martin = "Chris Martin <ch.martin@gmail.com>";
chrisjefferson = "Christopher Jefferson <chris@bubblescope.net>"; chrisjefferson = "Christopher Jefferson <chris@bubblescope.net>";
christopherpoole = "Christopher Mark Poole <mail@christopherpoole.net>"; christopherpoole = "Christopher Mark Poole <mail@christopherpoole.net>";
ckampka = "Christian Kampka <christian@kampka.net>";
cko = "Christine Koppelt <christine.koppelt@gmail.com>"; cko = "Christine Koppelt <christine.koppelt@gmail.com>";
cleverca22 = "Michael Bishop <cleverca22@gmail.com>"; cleverca22 = "Michael Bishop <cleverca22@gmail.com>";
cmcdragonkai = "Roger Qiu <roger.qiu@matrix.ai>"; cmcdragonkai = "Roger Qiu <roger.qiu@matrix.ai>";
@ -129,6 +131,7 @@
doublec = "Chris Double <chris.double@double.co.nz>"; doublec = "Chris Double <chris.double@double.co.nz>";
drets = "Dmytro Rets <dmitryrets@gmail.com>"; drets = "Dmytro Rets <dmitryrets@gmail.com>";
drewkett = "Andrew Burkett <burkett.andrew@gmail.com>"; drewkett = "Andrew Burkett <burkett.andrew@gmail.com>";
dtzWill = "Will Dietz <nix@wdtz.org>";
ebzzry = "Rommel Martinez <ebzzry@gmail.com>"; ebzzry = "Rommel Martinez <ebzzry@gmail.com>";
ederoyd46 = "Matthew Brown <matt@ederoyd.co.uk>"; ederoyd46 = "Matthew Brown <matt@ederoyd.co.uk>";
eduarrrd = "Eduard Bachmakov <e.bachmakov@gmail.com>"; eduarrrd = "Eduard Bachmakov <e.bachmakov@gmail.com>";
@ -288,6 +291,7 @@
mlieberman85 = "Michael Lieberman <mlieberman85@gmail.com>"; mlieberman85 = "Michael Lieberman <mlieberman85@gmail.com>";
modulistic = "Pablo Costa <modulistic@gmail.com>"; modulistic = "Pablo Costa <modulistic@gmail.com>";
mog = "Matthew O'Gorman <mog-lists@rldn.net>"; mog = "Matthew O'Gorman <mog-lists@rldn.net>";
montag451 = "montag451 <montag451@laposte.net>";
moosingin3space = "Nathan Moos <moosingin3space@gmail.com>"; moosingin3space = "Nathan Moos <moosingin3space@gmail.com>";
moretea = "Maarten Hoogendoorn <maarten@moretea.nl>"; moretea = "Maarten Hoogendoorn <maarten@moretea.nl>";
mornfall = "Petr Ročkai <me@mornfall.net>"; mornfall = "Petr Ročkai <me@mornfall.net>";
@ -333,6 +337,7 @@
palo = "Ingolf Wanger <palipalo9@googlemail.com>"; palo = "Ingolf Wanger <palipalo9@googlemail.com>";
pashev = "Igor Pashev <pashev.igor@gmail.com>"; pashev = "Igor Pashev <pashev.igor@gmail.com>";
pawelpacana = "Paweł Pacana <pawel.pacana@gmail.com>"; pawelpacana = "Paweł Pacana <pawel.pacana@gmail.com>";
periklis = "theopompos@gmail.com";
pesterhazy = "Paulus Esterhazy <pesterhazy@gmail.com>"; pesterhazy = "Paulus Esterhazy <pesterhazy@gmail.com>";
peterhoeg = "Peter Hoeg <peter@hoeg.com>"; peterhoeg = "Peter Hoeg <peter@hoeg.com>";
peti = "Peter Simons <simons@cryp.to>"; peti = "Peter Simons <simons@cryp.to>";

View File

@ -375,10 +375,13 @@ rec {
if def._type or "" == "merge" then if def._type or "" == "merge" then
concatMap dischargeProperties def.contents concatMap dischargeProperties def.contents
else if def._type or "" == "if" then else if def._type or "" == "if" then
if def.condition then if isBool def.condition then
dischargeProperties def.content if def.condition then
dischargeProperties def.content
else
[ ]
else else
[ ] throw "mkIf called with a non-Boolean condition"
else else
[ def ]; [ def ];

View File

@ -12,19 +12,19 @@ rec {
# Bring in a path as a source, filtering out all Subversion and CVS # Bring in a path as a source, filtering out all Subversion and CVS
# directories, as well as backup files (*~). # directories, as well as backup files (*~).
cleanSource = cleanSourceFilter = name: type: let baseName = baseNameOf (toString name); in ! (
let filter = name: type: let baseName = baseNameOf (toString name); in ! ( # Filter out Subversion and CVS directories.
# Filter out Subversion and CVS directories. (type == "directory" && (baseName == ".git" || baseName == ".svn" || baseName == "CVS" || baseName == ".hg")) ||
(type == "directory" && (baseName == ".git" || baseName == ".svn" || baseName == "CVS" || baseName == ".hg")) || # Filter out backup files.
# Filter out backup files. lib.hasSuffix "~" baseName ||
lib.hasSuffix "~" baseName || # Filter out generates files.
# Filter out generates files. lib.hasSuffix ".o" baseName ||
lib.hasSuffix ".o" baseName || lib.hasSuffix ".so" baseName ||
lib.hasSuffix ".so" baseName || # Filter out nix-build result symlinks
# Filter out nix-build result symlinks (type == "symlink" && lib.hasPrefix "result" baseName)
(type == "symlink" && lib.hasPrefix "result" baseName) );
);
in src: builtins.filterSource filter src; cleanSource = builtins.filterSource cleanSourceFilter;
# Get all files ending with the specified suffices from the given # Get all files ending with the specified suffices from the given

View File

@ -130,4 +130,78 @@ runTests {
expected = false; expected = false;
}; };
/* Generator tests */
# these tests assume attributes are converted to lists
# in alphabetical order
testToINIEmpty = {
expr = generators.toINI {} {};
expected = "";
};
testToINIEmptySection = {
expr = generators.toINI {} { foo = {}; bar = {}; };
expected = ''
[bar]
[foo]
'';
};
testToINIDefaultEscapes = {
expr = generators.toINI {} {
"no [ and ] allowed unescaped" = {
"and also no = in keys" = 42;
};
};
expected = ''
[no \[ and \] allowed unescaped]
and also no \= in keys=42
'';
};
testToINIDefaultFull = {
expr = generators.toINI {} {
"section 1" = {
attribute1 = 5;
x = "Me-se JarJar Binx";
};
"foo[]" = {
"he\\h=he" = "this is okay";
};
};
expected = ''
[foo\[\]]
he\h\=he=this is okay
[section 1]
attribute1=5
x=Me-se JarJar Binx
'';
};
/* right now only invocation check */
testToJSONSimple =
let val = {
foobar = [ "baz" 1 2 3 ];
};
in {
expr = generators.toJSON {} val;
# trival implementation
expected = builtins.toJSON val;
};
/* right now only invocation check */
testToYAMLSimple =
let val = {
list = [ { one = 1; } { two = 2; } ];
all = 42;
};
in {
expr = generators.toYAML {} val;
# trival implementation
expected = builtins.toJSON val;
};
} }

View File

@ -47,4 +47,12 @@ where <literal>eth0</literal> should be replaced with the desired
external interface. Note that <literal>ve-+</literal> is a wildcard external interface. Note that <literal>ve-+</literal> is a wildcard
that matches all container interfaces.</para> that matches all container interfaces.</para>
<para>If you are using Network Manager, you need to explicitly prevent
it from managing container interfaces:
<programlisting>
networking.networkmanager.unmanaged = [ "interface-name:ve-*" ];
</programlisting>
</para>
</section> </section>

View File

@ -18,7 +18,6 @@ NixOS.</para>
<xi:include href="building-nixos.xml" /> <xi:include href="building-nixos.xml" />
<xi:include href="nixos-tests.xml" /> <xi:include href="nixos-tests.xml" />
<xi:include href="testing-installer.xml" /> <xi:include href="testing-installer.xml" />
<xi:include href="reviewing-contributions.xml" />
<xi:include href="releases.xml" /> <xi:include href="releases.xml" />
</part> </part>

View File

@ -68,6 +68,15 @@ following incompatible changes:</para>
that may be in /etc. that may be in /etc.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Parsoid service now uses YAML configuration format.
<literal>service.parsoid.interwikis</literal> is now called
<literal>service.parsoid.wikis</literal> and is a list of either API URLs
or attribute sets as specified in parsoid's documentation.
</para>
</listitem>
</itemizedlist> </itemizedlist>

View File

@ -1,5 +1,5 @@
#!/usr/bin/env nix-shell #!/usr/bin/env nix-shell
#! nix-shell -i bash -p qemu awscli ec2_ami_tools jq #! nix-shell -i bash -p qemu ec2_ami_tools jq ec2_api_tools awscli
# To start with do: nix-shell -p awscli --run "aws configure" # To start with do: nix-shell -p awscli --run "aws configure"
@ -19,7 +19,7 @@ rm -f ec2-amis.nix
types="hvm pv" types="hvm pv"
stores="ebs s3" stores="ebs s3"
regions="eu-west-1 eu-central-1 us-east-1 us-west-1 us-west-2 ap-southeast-1 ap-southeast-2 ap-northeast-1 ap-northeast-2 sa-east-1 ap-south-1" regions="eu-west-1 eu-central-1 us-east-1 us-east-2 us-west-1 us-west-2 ap-southeast-1 ap-southeast-2 ap-northeast-1 ap-northeast-2 sa-east-1 ap-south-1"
for type in $types; do for type in $types; do
link=$stateDir/$type link=$stateDir/$type
@ -61,7 +61,7 @@ for type in $types; do
ami=$(aws ec2 copy-image \ ami=$(aws ec2 copy-image \
--region "$region" \ --region "$region" \
--source-region "$prevRegion" --source-image-id "$prevAmi" \ --source-region "$prevRegion" --source-image-id "$prevAmi" \
--name "$name" --description "$description" | json -q .ImageId) --name "$name" --description "$description" | jq -r '.ImageId')
if [ "$ami" = null ]; then break; fi if [ "$ami" = null ]; then break; fi
else else

View File

@ -301,9 +301,7 @@ in
}; };
style = mkOption { style = mkOption {
type = types.str // { type = types.enum ["none" "slight" "medium" "full"];
check = flip elem ["none" "slight" "medium" "full"];
};
default = "full"; default = "full";
description = '' description = ''
TrueType hinting style, one of <literal>none</literal>, TrueType hinting style, one of <literal>none</literal>,
@ -329,9 +327,7 @@ in
default = "rgb"; default = "rgb";
type = types.enum ["rgb" "bgr" "vrgb" "vbgr" "none"]; type = types.enum ["rgb" "bgr" "vrgb" "vbgr" "none"];
description = '' description = ''
Subpixel order, one of <literal>none</literal>, Subpixel order.
<literal>rgb</literal>, <literal>bgr</literal>,
<literal>vrgb</literal>, or <literal>vbgr</literal>.
''; '';
}; };
@ -339,9 +335,7 @@ in
default = "default"; default = "default";
type = types.enum ["none" "default" "light" "legacy"]; type = types.enum ["none" "default" "light" "legacy"];
description = '' description = ''
FreeType LCD filter, one of <literal>none</literal>, FreeType LCD filter.
<literal>default</literal>, <literal>light</literal>, or
<literal>legacy</literal>.
''; '';
}; };

View File

@ -44,6 +44,7 @@ in
consolePackages = mkOption { consolePackages = mkOption {
type = types.listOf types.package; type = types.listOf types.package;
default = with pkgs.kbdKeymaps; [ dvp neo ]; default = with pkgs.kbdKeymaps; [ dvp neo ];
defaultText = ''with pkgs.kbdKeymaps; [ dvp neo ]'';
description = '' description = ''
List of additional packages that provide console fonts, keymaps and List of additional packages that provide console fonts, keymaps and
other resources. other resources.

View File

@ -13,6 +13,8 @@ let
useDisplayDevice = cfg.connectDisplay; useDisplayDevice = cfg.connectDisplay;
}; };
useBbswitch = cfg.pmMethod == "bbswitch";
primus = pkgs.primus.override { primus = pkgs.primus.override {
inherit useNvidia; inherit useNvidia;
}; };
@ -22,58 +24,69 @@ in
{ {
options = { options = {
hardware.bumblebee.enable = mkOption { hardware.bumblebee = {
default = false;
type = types.bool;
description = ''
Enable the bumblebee daemon to manage Optimus hybrid video cards.
This should power off secondary GPU until its use is requested
by running an application with optirun.
Only nvidia driver is supported so far. enable = mkOption {
''; default = false;
}; type = types.bool;
hardware.bumblebee.group = mkOption { description = ''
default = "wheel"; Enable the bumblebee daemon to manage Optimus hybrid video cards.
example = "video"; This should power off secondary GPU until its use is requested
type = types.str; by running an application with optirun.
description = ''Group for bumblebee socket''; '';
}; };
hardware.bumblebee.connectDisplay = mkOption { group = mkOption {
default = false; default = "wheel";
type = types.bool; example = "video";
description = '' type = types.str;
Set to true if you intend to connect your discrete card to a description = ''Group for bumblebee socket'';
monitor. This option will set up your Nvidia card for EDID };
discovery and to turn on the monitor signal.
Only nvidia driver is supported so far. connectDisplay = mkOption {
''; default = false;
}; type = types.bool;
description = ''
Set to true if you intend to connect your discrete card to a
monitor. This option will set up your Nvidia card for EDID
discovery and to turn on the monitor signal.
Only nvidia driver is supported so far.
'';
};
driver = mkOption {
default = "nvidia";
type = types.enum [ "nvidia" "nouveau" ];
description = ''
Set driver used by bumblebeed. Supported are nouveau and nvidia.
'';
};
pmMethod = mkOption {
default = "auto";
type = types.enum [ "auto" "bbswitch" "nouveau" "switcheroo" "none" ];
description = ''
Set preferred power management method for unused card.
'';
};
hardware.bumblebee.driver = mkOption {
default = "nvidia";
type = types.enum [ "nvidia" "nouveau" ];
description = ''
Set driver used by bumblebeed. Supported are nouveau and nvidia.
'';
}; };
}; };
config = mkIf config.hardware.bumblebee.enable { config = mkIf cfg.enable {
boot.blacklistedKernelModules = [ "nouveau" "nvidia" ]; boot.blacklistedKernelModules = [ "nvidia-drm" "nvidia" "nouveau" ];
boot.kernelModules = [ "bbswitch" ]; boot.kernelModules = optional useBbswitch [ "bbswitch" ];
boot.extraModulePackages = [ kernel.bbswitch ] ++ optional useNvidia kernel.nvidia_x11; boot.extraModulePackages = optional useBbswitch kernel.bbswitch ++ optional useNvidia kernel.nvidia_x11;
environment.systemPackages = [ bumblebee primus ]; environment.systemPackages = [ bumblebee primus ];
systemd.services.bumblebeed = { systemd.services.bumblebeed = {
description = "Bumblebee Hybrid Graphics Switcher"; description = "Bumblebee Hybrid Graphics Switcher";
wantedBy = [ "display-manager.service" ]; wantedBy = [ "multi-user.target" ];
path = [ kernel.bbswitch bumblebee ]; before = [ "display-manager.service" ];
serviceConfig = { serviceConfig = {
ExecStart = "${bumblebee}/bin/bumblebeed --use-syslog -g ${cfg.group} --driver ${cfg.driver}"; ExecStart = "${bumblebee}/bin/bumblebeed --use-syslog -g ${cfg.group} --driver ${cfg.driver} --pm-method ${cfg.pmMethod}";
}; };
}; };
}; };

View File

@ -1,20 +1,41 @@
# This module defines a NixOS installation CD that contains X11 and # This module defines a NixOS installation CD that contains X11 and
# KDE 4. # KDE 5.
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib; with lib;
{ {
imports = [ ./installation-cd-base.nix ../../profiles/graphical.nix ]; imports = [ ./installation-cd-base.nix ];
# Provide wicd for easy wireless configuration. services.xserver = {
#networking.wicd.enable = true; enable = true;
# Automatically login as root.
displayManager.slim = {
enable = true;
defaultUser = "root";
autoLogin = true;
};
desktopManager.kde5 = {
enable = true;
enableQt4Support = false;
};
# Enable touchpad support for many laptops.
synaptics.enable = true;
};
environment.systemPackages = environment.systemPackages =
[ # Include gparted for partitioning disks. [ pkgs.glxinfo
# Include gparted for partitioning disks.
pkgs.gparted pkgs.gparted
# Firefox for reading the manual.
pkgs.firefox
# Include some editors. # Include some editors.
pkgs.vim pkgs.vim
pkgs.bvi # binary editor pkgs.bvi # binary editor
@ -32,80 +53,21 @@ with lib;
# Don't start the X server by default. # Don't start the X server by default.
services.xserver.autorun = mkForce false; services.xserver.autorun = mkForce false;
# Auto-login as root.
services.xserver.displayManager.kdm.extraConfig =
''
[X-*-Core]
AllowRootLogin=true
AutoLoginEnable=true
AutoLoginUser=root
AutoLoginPass=""
'';
# Custom kde-workspace adding some icons on the desktop
system.activationScripts.installerDesktop = let system.activationScripts.installerDesktop = let
openManual = pkgs.writeScript "nixos-manual.sh" ''
#!${pkgs.stdenv.shell}
cd ${config.system.build.manual.manual}/share/doc/nixos/
konqueror ./index.html
'';
desktopFile = pkgs.writeText "nixos-manual.desktop" '' desktopFile = pkgs.writeText "nixos-manual.desktop" ''
[Desktop Entry] [Desktop Entry]
Version=1.0 Version=1.0
Type=Application Type=Application
Name=NixOS Manual Name=NixOS Manual
Exec=${openManual} Exec=firefox ${config.system.build.manual.manual}/share/doc/nixos/index.html
Icon=konqueror Icon=text-html
''; '';
in '' in ''
mkdir -p /root/Desktop mkdir -p /root/Desktop
ln -sfT ${desktopFile} /root/Desktop/nixos-manual.desktop ln -sfT ${desktopFile} /root/Desktop/nixos-manual.desktop
ln -sfT ${pkgs.kde4.konsole}/share/applications/kde4/konsole.desktop /root/Desktop/konsole.desktop ln -sfT ${pkgs.kde5.konsole}/share/applications/org.kde.konsole.desktop /root/Desktop/org.kde.konsole.desktop
ln -sfT ${pkgs.gparted}/share/applications/gparted.desktop /root/Desktop/gparted.desktop ln -sfT ${pkgs.gparted}/share/applications/gparted.desktop /root/Desktop/gparted.desktop
''; '';
services.xserver.desktopManager.kde4.kdeWorkspacePackage = let
pkg = pkgs.kde4.kde_workspace;
plasmaInit = pkgs.writeText "00-defaultLayout.js" ''
loadTemplate("org.kde.plasma-desktop.defaultPanel")
for (var i = 0; i < screenCount; ++i) {
var desktop = new Activity
desktop.name = i18n("Desktop")
desktop.screen = i
desktop.wallpaperPlugin = 'image'
desktop.wallpaperMode = 'SingleImage'
var folderview = desktop.addWidget("folderview");
folderview.writeConfig("url", "desktop:/");
//Create more panels for other screens
if (i > 0){
var panel = new Panel
panel.screen = i
panel.location = 'bottom'
panel.height = screenGeometry(i).height > 1024 ? 35 : 27
var tasks = panel.addWidget("tasks")
tasks.writeConfig("showOnlyCurrentScreen", true);
}
}
'';
in
pkgs.runCommand pkg.name
{ inherit (pkg) meta; }
''
mkdir -p $out
cp -prf ${pkg}/* $out/
chmod a+w $out/share/apps/plasma-desktop/init
cp -f ${plasmaInit} $out/share/apps/plasma-desktop/init/00-defaultLayout.js
'';
# Disable large stuff that's not very useful on the installation CD.
services.xserver.desktopManager.kde4.enablePIM = false;
} }

View File

@ -84,7 +84,7 @@
spamd = 56; spamd = 56;
#networkmanager = 57; # unused #networkmanager = 57; # unused
nslcd = 58; nslcd = 58;
#scanner = 59; # unused scanner = 59;
nginx = 60; nginx = 60;
chrony = 61; chrony = 61;
#systemd-journal = 62; # unused #systemd-journal = 62; # unused
@ -279,6 +279,8 @@
hound = 259; hound = 259;
leaps = 260; leaps = 260;
ipfs = 261; ipfs = 261;
stanchion = 262;
riak-cs = 263;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399! # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
@ -528,6 +530,8 @@
hound = 259; hound = 259;
leaps = 260; leaps = 260;
ipfs = 261; ipfs = 261;
stanchion = 262;
riak-cs = 263;
# When adding a gid, make sure it doesn't match an existing # When adding a gid, make sure it doesn't match an existing
# uid. Users and groups with the same name should have equal # uid. Users and groups with the same name should have equal

View File

@ -159,6 +159,8 @@
./services/databases/postgresql.nix ./services/databases/postgresql.nix
./services/databases/redis.nix ./services/databases/redis.nix
./services/databases/riak.nix ./services/databases/riak.nix
./services/databases/riak-cs.nix
./services/databases/stanchion.nix
./services/databases/virtuoso.nix ./services/databases/virtuoso.nix
./services/desktops/accountsservice.nix ./services/desktops/accountsservice.nix
./services/desktops/geoclue2.nix ./services/desktops/geoclue2.nix
@ -346,6 +348,7 @@
./services/networking/connman.nix ./services/networking/connman.nix
./services/networking/consul.nix ./services/networking/consul.nix
./services/networking/coturn.nix ./services/networking/coturn.nix
./services/networking/dante.nix
./services/networking/ddclient.nix ./services/networking/ddclient.nix
./services/networking/dhcpcd.nix ./services/networking/dhcpcd.nix
./services/networking/dhcpd.nix ./services/networking/dhcpd.nix
@ -539,7 +542,6 @@
./services/x11/window-managers/fluxbox.nix ./services/x11/window-managers/fluxbox.nix
./services/x11/window-managers/icewm.nix ./services/x11/window-managers/icewm.nix
./services/x11/window-managers/bspwm.nix ./services/x11/window-managers/bspwm.nix
./services/x11/window-managers/bspwm-unstable.nix
./services/x11/window-managers/metacity.nix ./services/x11/window-managers/metacity.nix
./services/x11/window-managers/none.nix ./services/x11/window-managers/none.nix
./services/x11/window-managers/twm.nix ./services/x11/window-managers/twm.nix

View File

@ -34,6 +34,7 @@ in
package = mkOption { package = mkOption {
default = pkgs.jdk; default = pkgs.jdk;
defaultText = "pkgs.jdk";
description = '' description = ''
Java package to install. Typical values are pkgs.jdk or pkgs.jre. Java package to install. Typical values are pkgs.jdk or pkgs.jre.
''; '';

View File

@ -165,7 +165,7 @@ in
config = { config = {
programs.ssh.setXAuthLocation = programs.ssh.setXAuthLocation =
mkDefault (config.services.xserver.enable || config.programs.ssh.forwardX11); mkDefault (config.services.xserver.enable || config.programs.ssh.forwardX11 || config.services.openssh.forwardX11);
assertions = assertions =
[ { assertion = cfg.forwardX11 -> cfg.setXAuthLocation; [ { assertion = cfg.forwardX11 -> cfg.setXAuthLocation;

View File

@ -30,6 +30,8 @@ with lib;
(mkRenamedOptionModule [ "services" "gitlab" "stateDir" ] [ "services" "gitlab" "statePath" ]) (mkRenamedOptionModule [ "services" "gitlab" "stateDir" ] [ "services" "gitlab" "statePath" ])
(mkRemovedOptionModule [ "services" "gitlab" "satelliteDir" ] "") (mkRemovedOptionModule [ "services" "gitlab" "satelliteDir" ] "")
(mkRenamedOptionModule [ "services" "clamav" "updater" "config" ] [ "services" "clamav" "updater" "extraConfig" ])
# Old Grub-related options. # Old Grub-related options.
(mkRenamedOptionModule [ "boot" "initrd" "extraKernelModules" ] [ "boot" "initrd" "kernelModules" ]) (mkRenamedOptionModule [ "boot" "initrd" "extraKernelModules" ] [ "boot" "initrd" "kernelModules" ])
(mkRenamedOptionModule [ "boot" "extraKernelParams" ] [ "boot" "kernelParams" ]) (mkRenamedOptionModule [ "boot" "extraKernelParams" ] [ "boot" "kernelParams" ])
@ -142,6 +144,12 @@ with lib;
# murmur # murmur
(mkRenamedOptionModule [ "services" "murmur" "welcome" ] [ "services" "murmur" "welcometext" ]) (mkRenamedOptionModule [ "services" "murmur" "welcome" ] [ "services" "murmur" "welcometext" ])
# parsoid
(mkRemovedOptionModule [ "services" "parsoid" "interwikis" ] [ "services" "parsoid" "wikis" ])
# tarsnap
(mkRemovedOptionModule [ "services" "tarsnap" "cachedir" ] "Use services.tarsnap.archives.<name>.cachedir")
# Options that are obsolete and have no replacement. # Options that are obsolete and have no replacement.
(mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ] "") (mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ] "")
(mkRemovedOptionModule [ "programs" "bash" "enable" ] "") (mkRemovedOptionModule [ "programs" "bash" "enable" ] "")

View File

@ -73,7 +73,7 @@ in
}; };
failmode = mkOption { failmode = mkOption {
type = types.str; type = types.enum [ "safe" "enum" ];
default = "safe"; default = "safe";
description = '' description = ''
On service or configuration errors that prevent Duo On service or configuration errors that prevent Duo
@ -115,7 +115,7 @@ in
}; };
prompts = mkOption { prompts = mkOption {
type = types.int; type = types.enum [ 1 2 3 ];
default = 3; default = 3;
description = '' description = ''
If a user fails to authenticate with a second factor, Duo If a user fails to authenticate with a second factor, Duo
@ -181,13 +181,7 @@ in
config = mkIf (cfg.ssh.enable || cfg.pam.enable) { config = mkIf (cfg.ssh.enable || cfg.pam.enable) {
assertions = assertions =
[ { assertion = cfg.failmode == "safe" || cfg.failmode == "secure"; [ { assertion = !cfg.pam.enable;
message = "Invalid value for failmode (must be safe or secure).";
}
{ assertion = cfg.prompts == 1 || cfg.prompts == 2 || cfg.prompts == 3;
message = "Invalid value for prompts (must be 1, 2, or 3).";
}
{ assertion = !cfg.pam.enable;
message = "PAM support is currently not implemented."; message = "PAM support is currently not implemented.";
} }
]; ];

View File

@ -6,14 +6,6 @@ let
cfg = config.security.grsecurity; cfg = config.security.grsecurity;
grsecLockPath = "/proc/sys/kernel/grsecurity/grsec_lock"; grsecLockPath = "/proc/sys/kernel/grsecurity/grsec_lock";
# Ascertain whether ZFS is required for booting the system; grsecurity is
# currently incompatible with ZFS, rendering the system unbootable.
zfsNeededForBoot = filter
(fs: (fs.neededForBoot
|| elem fs.mountPoint [ "/" "/nix" "/nix/store" "/var" "/var/log" "/var/lib" "/etc" ])
&& fs.fsType == "zfs")
config.system.build.fileSystems != [];
# Ascertain whether NixOS container support is required # Ascertain whether NixOS container support is required
containerSupportRequired = containerSupportRequired =
config.boot.enableContainers && config.containers != {}; config.boot.enableContainers && config.containers != {};
@ -27,7 +19,14 @@ in
options.security.grsecurity = { options.security.grsecurity = {
enable = mkEnableOption "grsecurity/PaX"; enable = mkOption {
type = types.bool;
example = true;
default = false;
description = ''
Enable grsecurity/PaX.
'';
};
lockTunables = mkOption { lockTunables = mkOption {
type = types.bool; type = types.bool;
@ -58,20 +57,10 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
# Allow the user to select a different package set, subject to the stated
# required kernel config
boot.kernelPackages = mkDefault pkgs.linuxPackages_grsec_nixos; boot.kernelPackages = mkDefault pkgs.linuxPackages_grsec_nixos;
boot.kernelParams = optional cfg.disableEfiRuntimeServices "noefi"; boot.kernelParams = optional cfg.disableEfiRuntimeServices "noefi";
system.requiredKernelConfig = with config.lib.kernelConfig;
[ (isEnabled "GRKERNSEC")
(isEnabled "PAX")
(isYes "GRKERNSEC_SYSCTL")
(isYes "GRKERNSEC_SYSCTL_DISTRO")
(isNo "GRKERNSEC_NO_RBAC")
];
nixpkgs.config.grsecurity = true; nixpkgs.config.grsecurity = true;
# Install PaX related utillities into the system profile. # Install PaX related utillities into the system profile.
@ -135,11 +124,5 @@ in
"kernel.grsecurity.chroot_caps" = mkForce 0; "kernel.grsecurity.chroot_caps" = mkForce 0;
}; };
assertions = [
{ assertion = !zfsNeededForBoot;
message = "grsecurity is currently incompatible with ZFS";
}
];
}; };
} }

View File

@ -225,11 +225,9 @@
</para> </para>
<para> <para>
The NixOS module makes several assumptions about the kernel and so may be The NixOS module makes several assumptions about the kernel and so
incompatible with your customised kernel. Most of these assumptions are may be incompatible with your customised kernel. Currently, the only way
encoded as assertions &#x2014; mismatches should ideally result in a build to work around incompatibilities is to eschew the NixOS module.
failure. Currently, the only way to work around incompatibilities is to
eschew the NixOS module and do all configuration yourself.
</para> </para>
</sect1> </sect1>

View File

@ -1,25 +1,25 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, utils, ... }:
with lib; with lib;
let let
cfg = config.services.tarsnap; gcfg = config.services.tarsnap;
configFile = name: cfg: '' configFile = name: cfg: ''
cachedir ${config.services.tarsnap.cachedir}/${name} keyfile ${cfg.keyfile}
keyfile ${cfg.keyfile} ${optionalString (cfg.cachedir != null) "cachedir ${cfg.cachedir}"}
${optionalString cfg.nodump "nodump"} ${optionalString cfg.nodump "nodump"}
${optionalString cfg.printStats "print-stats"} ${optionalString cfg.printStats "print-stats"}
${optionalString cfg.printStats "humanize-numbers"} ${optionalString cfg.printStats "humanize-numbers"}
${optionalString (cfg.checkpointBytes != null) ("checkpoint-bytes "+cfg.checkpointBytes)} ${optionalString (cfg.checkpointBytes != null) ("checkpoint-bytes "+cfg.checkpointBytes)}
${optionalString cfg.aggressiveNetworking "aggressive-networking"} ${optionalString cfg.aggressiveNetworking "aggressive-networking"}
${concatStringsSep "\n" (map (v: "exclude "+v) cfg.excludes)} ${concatStringsSep "\n" (map (v: "exclude ${v}") cfg.excludes)}
${concatStringsSep "\n" (map (v: "include "+v) cfg.includes)} ${concatStringsSep "\n" (map (v: "include ${v}") cfg.includes)}
${optionalString cfg.lowmem "lowmem"} ${optionalString cfg.lowmem "lowmem"}
${optionalString cfg.verylowmem "verylowmem"} ${optionalString cfg.verylowmem "verylowmem"}
${optionalString (cfg.maxbw != null) ("maxbw "+toString cfg.maxbw)} ${optionalString (cfg.maxbw != null) "maxbw ${toString cfg.maxbw}"}
${optionalString (cfg.maxbwRateUp != null) ("maxbw-rate-up "+toString cfg.maxbwRateUp)} ${optionalString (cfg.maxbwRateUp != null) "maxbw-rate-up ${toString cfg.maxbwRateUp}"}
${optionalString (cfg.maxbwRateDown != null) ("maxbw-rate-down "+toString cfg.maxbwRateDown)} ${optionalString (cfg.maxbwRateDown != null) "maxbw-rate-down ${toString cfg.maxbwRateDown}"}
''; '';
in in
{ {
@ -60,34 +60,13 @@ in
''; '';
}; };
cachedir = mkOption {
type = types.nullOr types.path;
default = "/var/cache/tarsnap";
description = ''
The cache allows tarsnap to identify previously stored data
blocks, reducing archival time and bandwidth usage.
Should the cache become desynchronized or corrupted, tarsnap
will refuse to run until you manually rebuild the cache with
<command>tarsnap --fsck</command>.
Note that each individual archive (specified below) has its own cache
directory specified under <literal>cachedir</literal>; this is because
tarsnap locks the cache during backups, meaning multiple services
archives cannot be backed up concurrently or overlap with a shared
cache.
Set to <literal>null</literal> to disable caching.
'';
};
archives = mkOption { archives = mkOption {
type = types.attrsOf (types.submodule ( type = types.attrsOf (types.submodule ({ config, ... }:
{ {
options = { options = {
keyfile = mkOption { keyfile = mkOption {
type = types.str; type = types.str;
default = config.services.tarsnap.keyfile; default = gcfg.keyfile;
description = '' description = ''
Set a specific keyfile for this archive. This defaults to Set a specific keyfile for this archive. This defaults to
<literal>"/root/tarsnap.key"</literal> if left unspecified. <literal>"/root/tarsnap.key"</literal> if left unspecified.
@ -107,6 +86,21 @@ in
''; '';
}; };
cachedir = mkOption {
type = types.nullOr types.path;
default = "/var/cache/tarsnap/${utils.escapeSystemdPath config.keyfile}";
description = ''
The cache allows tarsnap to identify previously stored data
blocks, reducing archival time and bandwidth usage.
Should the cache become desynchronized or corrupted, tarsnap
will refuse to run until you manually rebuild the cache with
<command>tarsnap --fsck</command>.
Set to <literal>null</literal> to disable caching.
'';
};
nodump = mkOption { nodump = mkOption {
type = types.bool; type = types.bool;
default = true; default = true;
@ -249,7 +243,7 @@ in
}; };
gamedata = gamedata =
{ directories = [ "/var/lib/minecraft "]; { directories = [ "/var/lib/minecraft" ];
period = "*:30"; period = "*:30";
}; };
} }
@ -262,8 +256,8 @@ in
archive names are suffixed by a 1 second resolution timestamp. archive names are suffixed by a 1 second resolution timestamp.
For each member of the set is created a timer which triggers the For each member of the set is created a timer which triggers the
instanced <literal>tarsnap@</literal> service unit. You may use instanced <literal>tarsnap-archive-name</literal> service unit. You may use
<command>systemctl start tarsnap@archive-name</command> to <command>systemctl start tarsnap-archive-name</command> to
manually trigger creation of <literal>archive-name</literal> at manually trigger creation of <literal>archive-name</literal> at
any time. any time.
''; '';
@ -271,63 +265,73 @@ in
}; };
}; };
config = mkIf cfg.enable { config = mkIf gcfg.enable {
assertions = assertions =
(mapAttrsToList (name: cfg: (mapAttrsToList (name: cfg:
{ assertion = cfg.directories != []; { assertion = cfg.directories != [];
message = "Must specify paths for tarsnap to back up"; message = "Must specify paths for tarsnap to back up";
}) cfg.archives) ++ }) gcfg.archives) ++
(mapAttrsToList (name: cfg: (mapAttrsToList (name: cfg:
{ assertion = !(cfg.lowmem && cfg.verylowmem); { assertion = !(cfg.lowmem && cfg.verylowmem);
message = "You cannot set both lowmem and verylowmem"; message = "You cannot set both lowmem and verylowmem";
}) cfg.archives); }) gcfg.archives);
systemd.services."tarsnap@" = { systemd.services =
description = "Tarsnap archive '%i'"; mapAttrs' (name: cfg: nameValuePair "tarsnap-${name}" {
requires = [ "network-online.target" ]; description = "Tarsnap archive '${name}'";
after = [ "network-online.target" ]; requires = [ "network-online.target" ];
after = [ "network-online.target" ];
path = [ pkgs.iputils pkgs.tarsnap pkgs.coreutils ]; path = [ pkgs.iputils pkgs.tarsnap pkgs.utillinux ];
# In order for the persistent tarsnap timer to work reliably, we have to # In order for the persistent tarsnap timer to work reliably, we have to
# make sure that the tarsnap server is reachable after systemd starts up # make sure that the tarsnap server is reachable after systemd starts up
# the service - therefore we sleep in a loop until we can ping the # the service - therefore we sleep in a loop until we can ping the
# endpoint. # endpoint.
preStart = "while ! ping -q -c 1 v1-0-0-server.tarsnap.com &> /dev/null; do sleep 3; done"; preStart = ''
scriptArgs = "%i"; while ! ping -q -c 1 v1-0-0-server.tarsnap.com &> /dev/null; do sleep 3; done
script = '' '';
mkdir -p -m 0755 ${dirOf cfg.cachedir}
mkdir -p -m 0700 ${cfg.cachedir}
chown root:root ${cfg.cachedir}
chmod 0700 ${cfg.cachedir}
mkdir -p -m 0700 ${cfg.cachedir}/$1
DIRS=`cat /etc/tarsnap/$1.dirs`
exec tarsnap --configfile /etc/tarsnap/$1.conf -c -f $1-$(date +"%Y%m%d%H%M%S") $DIRS
'';
serviceConfig = { script =
IOSchedulingClass = "idle"; let run = ''tarsnap --configfile "/etc/tarsnap/${name}.conf" -c -f "${name}-$(date +"%Y%m%d%H%M%S")" ${concatStringsSep " " cfg.directories}'';
NoNewPrivileges = "true"; in if (cfg.cachedir != null) then ''
CapabilityBoundingSet = "CAP_DAC_READ_SEARCH"; mkdir -p ${cfg.cachedir}
PermissionsStartOnly = "true"; chmod 0700 ${cfg.cachedir}
};
}; ( flock 9
if [ ! -e ${cfg.cachedir}/firstrun ]; then
( flock 10
flock -u 9
tarsnap --configfile "/etc/tarsnap/${name}.conf" --fsck
flock 9
) 10>${cfg.cachedir}/firstrun
fi
) 9>${cfg.cachedir}/lockf
exec flock ${cfg.cachedir}/firstrun ${run}
'' else "exec ${run}";
serviceConfig = {
Type = "oneshot";
IOSchedulingClass = "idle";
NoNewPrivileges = "true";
CapabilityBoundingSet = [ "CAP_DAC_READ_SEARCH" ];
PermissionsStartOnly = "true";
};
}) gcfg.archives;
# Note: the timer must be Persistent=true, so that systemd will start it even # Note: the timer must be Persistent=true, so that systemd will start it even
# if e.g. your laptop was asleep while the latest interval occurred. # if e.g. your laptop was asleep while the latest interval occurred.
systemd.timers = mapAttrs' (name: cfg: nameValuePair "tarsnap@${name}" systemd.timers = mapAttrs' (name: cfg: nameValuePair "tarsnap-${name}"
{ timerConfig.OnCalendar = cfg.period; { timerConfig.OnCalendar = cfg.period;
timerConfig.Persistent = "true"; timerConfig.Persistent = "true";
wantedBy = [ "timers.target" ]; wantedBy = [ "timers.target" ];
}) cfg.archives; }) gcfg.archives;
environment.etc = environment.etc =
(mapAttrs' (name: cfg: nameValuePair "tarsnap/${name}.conf" mapAttrs' (name: cfg: nameValuePair "tarsnap/${name}.conf"
{ text = configFile name cfg; { text = configFile name cfg;
}) cfg.archives) // }) gcfg.archives;
(mapAttrs' (name: cfg: nameValuePair "tarsnap/${name}.dirs"
{ text = concatStringsSep " " cfg.directories;
}) cfg.archives);
environment.systemPackages = [ pkgs.tarsnap ]; environment.systemPackages = [ pkgs.tarsnap ];
}; };

View File

@ -0,0 +1,88 @@
{config, lib, pkgs, ...}:
with lib;
let
cfg = config.services.boinc;
allowRemoteGuiRpcFlag = optionalString cfg.allowRemoteGuiRpc "--allow_remote_gui_rpc";
in
{
options.services.boinc = {
enable = mkOption {
type = types.bool;
default = false;
example = true;
description = ''
Whether to enable the BOINC distributed computing client. If this
option is set to true, the boinc_client daemon will be run as a
background service. The boinccmd command can be used to control the
daemon.
'';
};
package = mkOption {
type = types.package;
default = pkgs.boinc;
defaultText = "pkgs.boinc";
description = ''
Which BOINC package to use.
'';
};
dataDir = mkOption {
type = types.path;
default = "/var/lib/boinc";
description = ''
The directory in which to store BOINC's configuration and data files.
'';
};
allowRemoteGuiRpc = mkOption {
type = types.bool;
default = false;
example = true;
description = ''
If set to true, any remote host can connect to and control this BOINC
client (subject to password authentication). If instead set to false,
only the hosts listed in <varname>dataDir</varname>/remote_hosts.cfg will be allowed to
connect.
See also: <ulink url="http://boinc.berkeley.edu/wiki/Controlling_BOINC_remotely#Remote_access"/>
'';
};
};
config = mkIf cfg.enable {
environment.systemPackages = [cfg.package];
users.users.boinc = {
createHome = false;
description = "BOINC Client";
home = cfg.dataDir;
isSystemUser = true;
};
systemd.services.boinc = {
description = "BOINC Client";
after = ["network.target" "local-fs.target"];
wantedBy = ["multi-user.target"];
preStart = ''
mkdir -p ${cfg.dataDir}
chown boinc ${cfg.dataDir}
'';
script = ''
${cfg.package}/bin/boinc_client --dir ${cfg.dataDir} --redirectio ${allowRemoteGuiRpcFlag}
'';
serviceConfig = {
PermissionsStartOnly = true; # preStart must be run as root
User = "boinc";
Nice = 10;
};
};
};
meta = {
maintainers = with lib.maintainers; [kierdavis];
};
}

View File

@ -37,6 +37,7 @@ in {
packages = mkOption { packages = mkOption {
default = [ pkgs.stdenv pkgs.jre pkgs.git config.programs.ssh.package pkgs.nix ]; default = [ pkgs.stdenv pkgs.jre pkgs.git config.programs.ssh.package pkgs.nix ];
defaultText = "[ pkgs.stdenv pkgs.jre pkgs.git config.programs.ssh.package pkgs.nix ]";
type = types.listOf types.package; type = types.listOf types.package;
description = '' description = ''
Packages to add to PATH for the Go.CD agent process. Packages to add to PATH for the Go.CD agent process.

View File

@ -68,6 +68,7 @@ in {
packages = mkOption { packages = mkOption {
default = [ pkgs.stdenv pkgs.jre pkgs.git config.programs.ssh.package pkgs.nix ]; default = [ pkgs.stdenv pkgs.jre pkgs.git config.programs.ssh.package pkgs.nix ];
defaultText = "[ pkgs.stdenv pkgs.jre pkgs.git config.programs.ssh.package pkgs.nix ]";
type = types.listOf types.package; type = types.listOf types.package;
description = '' description = ''
Packages to add to PATH for the Go.CD server's process. Packages to add to PATH for the Go.CD server's process.

View File

@ -0,0 +1,202 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.riak-cs;
in
{
###### interface
options = {
services.riak-cs = {
enable = mkEnableOption "riak-cs";
package = mkOption {
type = types.package;
default = pkgs.riak-cs;
defaultText = "pkgs.riak-cs";
example = literalExample "pkgs.riak-cs";
description = ''
Riak package to use.
'';
};
nodeName = mkOption {
type = types.str;
default = "riak-cs@127.0.0.1";
description = ''
Name of the Erlang node.
'';
};
anonymousUserCreation = mkOption {
type = types.bool;
default = false;
description = ''
Anonymous user creation.
'';
};
riakHost = mkOption {
type = types.str;
default = "127.0.0.1:8087";
description = ''
Name of riak hosting service.
'';
};
listener = mkOption {
type = types.str;
default = "127.0.0.1:8080";
description = ''
Name of Riak CS listening service.
'';
};
stanchionHost = mkOption {
type = types.str;
default = "127.0.0.1:8085";
description = ''
Name of stanchion hosting service.
'';
};
stanchionSsl = mkOption {
type = types.bool;
default = true;
description = ''
Tell stanchion to use SSL.
'';
};
distributedCookie = mkOption {
type = types.str;
default = "riak";
description = ''
Cookie for distributed node communication. All nodes in the
same cluster should use the same cookie or they will not be able to
communicate.
'';
};
dataDir = mkOption {
type = types.path;
default = "/var/db/riak-cs";
description = ''
Data directory for Riak CS.
'';
};
logDir = mkOption {
type = types.path;
default = "/var/log/riak-cs";
description = ''
Log directory for Riak CS.
'';
};
extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
Additional text to be appended to <filename>riak-cs.conf</filename>.
'';
};
extraAdvancedConfig = mkOption {
type = types.lines;
default = "";
description = ''
Additional text to be appended to <filename>advanced.config</filename>.
'';
};
};
};
###### implementation
config = mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
environment.etc."riak-cs/riak-cs.conf".text = ''
nodename = ${cfg.nodeName}
distributed_cookie = ${cfg.distributedCookie}
platform_log_dir = ${cfg.logDir}
riak_host = ${cfg.riakHost}
listener = ${cfg.listener}
stanchion_host = ${cfg.stanchionHost}
anonymous_user_creation = ${if cfg.anonymousUserCreation then "on" else "off"}
${cfg.extraConfig}
'';
environment.etc."riak-cs/advanced.config".text = ''
${cfg.extraAdvancedConfig}
'';
users.extraUsers.riak-cs = {
name = "riak-cs";
uid = config.ids.uids.riak-cs;
group = "riak";
description = "Riak CS server user";
};
systemd.services.riak-cs = {
description = "Riak CS Server";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
path = [
pkgs.utillinux # for `logger`
pkgs.bash
];
environment.HOME = "${cfg.dataDir}";
environment.RIAK_CS_DATA_DIR = "${cfg.dataDir}";
environment.RIAK_CS_LOG_DIR = "${cfg.logDir}";
environment.RIAK_CS_ETC_DIR = "/etc/riak";
preStart = ''
if ! test -e ${cfg.logDir}; then
mkdir -m 0755 -p ${cfg.logDir}
chown -R riak-cs ${cfg.logDir}
fi
if ! test -e ${cfg.dataDir}; then
mkdir -m 0700 -p ${cfg.dataDir}
chown -R riak-cs ${cfg.dataDir}
fi
'';
serviceConfig = {
ExecStart = "${cfg.package}/bin/riak-cs console";
ExecStop = "${cfg.package}/bin/riak-cs stop";
StandardInput = "tty";
User = "riak-cs";
Group = "riak-cs";
PermissionsStartOnly = true;
# Give Riak a decent amount of time to clean up.
TimeoutStopSec = 120;
LimitNOFILE = 65536;
};
unitConfig.RequiresMountsFor = [
"${cfg.dataDir}"
"${cfg.logDir}"
"/etc/riak"
];
};
};
}

View File

@ -20,6 +20,8 @@ in
package = mkOption { package = mkOption {
type = types.package; type = types.package;
default = pkgs.riak;
defaultText = "pkgs.riak";
example = literalExample "pkgs.riak"; example = literalExample "pkgs.riak";
description = '' description = ''
Riak package to use. Riak package to use.
@ -68,6 +70,14 @@ in
''; '';
}; };
extraAdvancedConfig = mkOption {
type = types.lines;
default = "";
description = ''
Additional text to be appended to <filename>advanced.config</filename>.
'';
};
}; };
}; };
@ -88,6 +98,10 @@ in
${cfg.extraConfig} ${cfg.extraConfig}
''; '';
environment.etc."riak/advanced.config".text = ''
${cfg.extraAdvancedConfig}
'';
users.extraUsers.riak = { users.extraUsers.riak = {
name = "riak"; name = "riak";
uid = config.ids.uids.riak; uid = config.ids.uids.riak;

View File

@ -0,0 +1,212 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.stanchion;
in
{
###### interface
options = {
services.stanchion = {
enable = mkEnableOption "stanchion";
package = mkOption {
type = types.package;
default = pkgs.stanchion;
defaultText = "pkgs.stanchion";
example = literalExample "pkgs.stanchion";
description = ''
Stanchion package to use.
'';
};
nodeName = mkOption {
type = types.str;
default = "stanchion@127.0.0.1";
description = ''
Name of the Erlang node.
'';
};
adminKey = mkOption {
type = types.str;
default = "";
description = ''
Name of admin user.
'';
};
adminSecret = mkOption {
type = types.str;
default = "";
description = ''
Name of admin secret
'';
};
riakHost = mkOption {
type = types.str;
default = "127.0.0.1:8087";
description = ''
Name of riak hosting service.
'';
};
listener = mkOption {
type = types.str;
default = "127.0.0.1:8085";
description = ''
Name of Riak CS listening service.
'';
};
stanchionHost = mkOption {
type = types.str;
default = "127.0.0.1:8085";
description = ''
Name of stanchion hosting service.
'';
};
stanchionSsl = mkOption {
type = types.bool;
default = true;
description = ''
Tell stanchion to use SSL.
'';
};
distributedCookie = mkOption {
type = types.str;
default = "riak";
description = ''
Cookie for distributed node communication. All nodes in the
same cluster should use the same cookie or they will not be able to
communicate.
'';
};
dataDir = mkOption {
type = types.path;
default = "/var/db/stanchion";
description = ''
Data directory for Stanchion.
'';
};
logDir = mkOption {
type = types.path;
default = "/var/log/stanchion";
description = ''
Log directory for Stanchino.
'';
};
extraConfig = mkOption {
type = types.lines;
default = "";
description = ''
Additional text to be appended to <filename>stanchion.conf</filename>.
'';
};
};
};
###### implementation
config = mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
environment.etc."stanchion/advanced.config".text = ''
[{stanchion, []}].
'';
environment.etc."stanchion/stanchion.conf".text = ''
listener = ${cfg.listener}
riak_host = ${cfg.riakHost}
${optionalString (cfg.adminKey == "") "#"} admin.key=${optionalString (cfg.adminKey != "") cfg.adminKey}
${optionalString (cfg.adminSecret == "") "#"} admin.secret=${optionalString (cfg.adminSecret != "") cfg.adminSecret}
platform_bin_dir = ${pkgs.stanchion}/bin
platform_data_dir = ${cfg.dataDir}
platform_etc_dir = /etc/stanchion
platform_lib_dir = ${pkgs.stanchion}/lib
platform_log_dir = ${cfg.logDir}
nodename = ${cfg.nodeName}
distributed_cookie = ${cfg.distributedCookie}
stanchion_ssl=${if cfg.stanchionSsl then "on" else "off"}
${cfg.extraConfig}
'';
users.extraUsers.stanchion = {
name = "stanchion";
uid = config.ids.uids.stanchion;
group = "stanchion";
description = "Stanchion server user";
};
users.extraGroups.stanchion.gid = config.ids.gids.stanchion;
systemd.services.stanchion = {
description = "Stanchion Server";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
path = [
pkgs.utillinux # for `logger`
pkgs.bash
];
environment.HOME = "${cfg.dataDir}";
environment.STANCHION_DATA_DIR = "${cfg.dataDir}";
environment.STANCHION_LOG_DIR = "${cfg.logDir}";
environment.STANCHION_ETC_DIR = "/etc/stanchion";
preStart = ''
if ! test -e ${cfg.logDir}; then
mkdir -m 0755 -p ${cfg.logDir}
chown -R stanchion:stanchion ${cfg.logDir}
fi
if ! test -e ${cfg.dataDir}; then
mkdir -m 0700 -p ${cfg.dataDir}
chown -R stanchion:stanchion ${cfg.dataDir}
fi
'';
serviceConfig = {
ExecStart = "${cfg.package}/bin/stanchion console";
ExecStop = "${cfg.package}/bin/stanchion stop";
StandardInput = "tty";
User = "stanchion";
Group = "stanchion";
PermissionsStartOnly = true;
# Give Stanchion a decent amount of time to clean up.
TimeoutStopSec = 120;
LimitNOFILE = 65536;
};
unitConfig.RequiresMountsFor = [
"${cfg.dataDir}"
"${cfg.logDir}"
"/etc/stanchion"
];
};
};
}

View File

@ -7,9 +7,35 @@ let
pkg = if config.hardware.sane.snapshot pkg = if config.hardware.sane.snapshot
then pkgs.sane-backends-git then pkgs.sane-backends-git
else pkgs.sane-backends; else pkgs.sane-backends;
backends = [ pkg ] ++ config.hardware.sane.extraBackends;
sanedConf = pkgs.writeTextFile {
name = "saned.conf";
destination = "/etc/sane.d/saned.conf";
text = ''
localhost
${config.services.saned.extraConfig}
'';
};
netConf = pkgs.writeTextFile {
name = "net.conf";
destination = "/etc/sane.d/net.conf";
text = ''
${lib.optionalString config.services.saned.enable "localhost"}
${config.hardware.sane.netConf}
'';
};
env = {
SANE_CONFIG_DIR = config.hardware.sane.configDir;
LD_LIBRARY_PATH = [ "${saneConfig}/lib/sane" ];
};
backends = [ pkg netConf ] ++ optional config.services.saned.enable sanedConf ++ config.hardware.sane.extraBackends;
saneConfig = pkgs.mkSaneConfig { paths = backends; }; saneConfig = pkgs.mkSaneConfig { paths = backends; };
enabled = config.hardware.sane.enable || config.services.saned.enable;
in in
{ {
@ -51,27 +77,86 @@ in
hardware.sane.configDir = mkOption { hardware.sane.configDir = mkOption {
type = types.string; type = types.string;
internal = true;
description = "The value of SANE_CONFIG_DIR."; description = "The value of SANE_CONFIG_DIR.";
}; };
hardware.sane.netConf = mkOption {
type = types.lines;
default = "";
example = "192.168.0.16";
description = ''
Network hosts that should be probed for remote scanners.
'';
};
services.saned.enable = mkOption {
type = types.bool;
default = false;
description = ''
Enable saned network daemon for remote connection to scanners.
saned would be runned from <literal>scanner</literal> user; to allow
access to hardware that doesn't have <literal>scanner</literal> group
you should add needed groups to this user.
'';
};
services.saned.extraConfig = mkOption {
type = types.lines;
default = "";
example = "192.168.0.0/24";
description = ''
Extra saned configuration lines.
'';
};
}; };
###### implementation ###### implementation
config = mkIf config.hardware.sane.enable { config = mkMerge [
(mkIf enabled {
hardware.sane.configDir = mkDefault "${saneConfig}/etc/sane.d";
hardware.sane.configDir = mkDefault "${saneConfig}/etc/sane.d"; environment.systemPackages = backends;
environment.sessionVariables = env;
services.udev.packages = backends;
environment.systemPackages = backends; users.extraGroups."scanner".gid = config.ids.gids.scanner;
environment.sessionVariables = { })
SANE_CONFIG_DIR = config.hardware.sane.configDir;
LD_LIBRARY_PATH = [ "${saneConfig}/lib/sane" ];
};
services.udev.packages = backends;
users.extraGroups."scanner".gid = config.ids.gids.scanner; (mkIf config.services.saned.enable {
networking.firewall.connectionTrackingModules = [ "sane" ];
}; systemd.services."saned@" = {
description = "Scanner Service";
environment = mapAttrs (name: val: toString val) env;
serviceConfig = {
User = "scanner";
Group = "scanner";
ExecStart = "${pkg}/bin/saned";
};
};
systemd.sockets.saned = {
description = "saned incoming socket";
wantedBy = [ "sockets.target" ];
listenStreams = [ "0.0.0.0:6566" "[::]:6566" ];
socketConfig = {
# saned needs to distinguish between IPv4 and IPv6 to open matching data sockets.
BindIPv6Only = "ipv6-only";
Accept = true;
MaxConnections = 1;
};
};
users.extraUsers."scanner" = {
uid = config.ids.uids.scanner;
group = "scanner";
};
})
];
} }

View File

@ -25,7 +25,8 @@ in
DBs = mkOption { DBs = mkOption {
type = types.listOf types.package; type = types.listOf types.package;
default = with pkgs.dictdDBs; [ wiktionary wordnet ]; default = with pkgs.dictdDBs; [ wiktionary wordnet ];
example = [ pkgs.dictdDBs.nld2eng ]; defaultText = "with pkgs.dictdDBs; [ wiktionary wordnet ]";
example = literalExample "[ pkgs.dictdDBs.nld2eng ]";
description = ''List of databases to make available.''; description = ''List of databases to make available.'';
}; };

View File

@ -41,6 +41,7 @@ in
type = types.path; type = types.path;
description = "The Disnix package"; description = "The Disnix package";
default = pkgs.disnix; default = pkgs.disnix;
defaultText = "pkgs.disnix";
}; };
}; };

View File

@ -164,18 +164,21 @@ in {
packages.gitlab = mkOption { packages.gitlab = mkOption {
type = types.package; type = types.package;
default = pkgs.gitlab; default = pkgs.gitlab;
defaultText = "pkgs.gitlab";
description = "Reference to the gitlab package"; description = "Reference to the gitlab package";
}; };
packages.gitlab-shell = mkOption { packages.gitlab-shell = mkOption {
type = types.package; type = types.package;
default = pkgs.gitlab-shell; default = pkgs.gitlab-shell;
defaultText = "pkgs.gitlab-shell";
description = "Reference to the gitlab-shell package"; description = "Reference to the gitlab-shell package";
}; };
packages.gitlab-workhorse = mkOption { packages.gitlab-workhorse = mkOption {
type = types.package; type = types.package;
default = pkgs.gitlab-workhorse; default = pkgs.gitlab-workhorse;
defaultText = "pkgs.gitlab-workhorse";
description = "Reference to the gitlab-workhorse package"; description = "Reference to the gitlab-workhorse package";
}; };

View File

@ -6,20 +6,21 @@ let
cfg = config.services.parsoid; cfg = config.services.parsoid;
conf = '' confTree = {
exports.setup = function( parsoidConfig ) { worker_heartbeat_timeout = 300000;
${toString (mapAttrsToList (name: str: "parsoidConfig.setInterwiki('${name}', '${str}');") cfg.interwikis)} logging = { level = "info"; };
services = [{
module = "lib/index.js";
entrypoint = "apiServiceWorker";
conf = {
mwApis = map (x: if isAttrs x then x else { uri = x; }) cfg.wikis;
serverInterface = cfg.interface;
serverPort = cfg.port;
};
}];
};
parsoidConfig.serverInterface = "${cfg.interface}"; confFile = pkgs.writeText "config.yml" (builtins.toJSON (recursiveUpdate confTree cfg.extraConfig));
parsoidConfig.serverPort = ${toString cfg.port};
parsoidConfig.useSelser = true;
${cfg.extraConfig}
};
'';
confFile = builtins.toFile "localsettings.js" conf;
in in
{ {
@ -38,9 +39,9 @@ in
''; '';
}; };
interwikis = mkOption { wikis = mkOption {
type = types.attrsOf types.str; type = types.listOf (types.either types.str types.attrs);
example = { localhost = "http://localhost/api.php"; }; example = [ "http://localhost/api.php" ];
description = '' description = ''
Used MediaWiki API endpoints. Used MediaWiki API endpoints.
''; '';
@ -71,8 +72,8 @@ in
}; };
extraConfig = mkOption { extraConfig = mkOption {
type = types.lines; type = types.attrs;
default = ""; default = {};
description = '' description = ''
Extra configuration to add to parsoid configuration. Extra configuration to add to parsoid configuration.
''; '';

View File

@ -19,30 +19,21 @@ let
type = types.str; type = types.str;
description = "Public key at the opposite end of the tunnel."; description = "Public key at the opposite end of the tunnel.";
}; };
hostname = mkOption {
default = "";
example = "foobar.hype";
type = types.str;
description = "Optional hostname to add to /etc/hosts; prevents reverse lookup failures.";
};
}; };
}; };
# Additional /etc/hosts entries for peers with an associated hostname # check for the required attributes, otherwise
cjdnsExtraHosts = import (pkgs.runCommand "cjdns-hosts" {} # permit attributes not undefined here
# Generate a builder that produces an output usable as a Nix string value checkPeers = x:
'' x // {
exec >$out connectTo = mapAttrs
echo \'\' (name: value:
${concatStringsSep "\n" (mapAttrsToList (k: v: if !hasAttr "publicKey" value then abort "cjdns peer ${name} missing a publicKey" else
optionalString (v.hostname != "") if !hasAttr "password" value then abort "cjdns peer ${name} missing a password" else
"echo $(${pkgs.cjdns}/bin/publictoip6 ${v.publicKey}) ${v.hostname}") value
(cfg.ETHInterface.connectTo // cfg.UDPInterface.connectTo))} )
echo \'\' x.connectTo;
''); };
parseModules = x:
x // { connectTo = mapAttrs (name: value: { inherit (value) password publicKey; }) x.connectTo; };
# would be nice to merge 'cfg' with a //, # would be nice to merge 'cfg' with a //,
# but the json nesting is wacky. # but the json nesting is wacky.
@ -53,8 +44,8 @@ let
}; };
authorizedPasswords = map (p: { password = p; }) cfg.authorizedPasswords; authorizedPasswords = map (p: { password = p; }) cfg.authorizedPasswords;
interfaces = { interfaces = {
ETHInterface = if (cfg.ETHInterface.bind != "") then [ (parseModules cfg.ETHInterface) ] else [ ]; ETHInterface = if (cfg.ETHInterface.bind != "") then [ (checkPeers cfg.ETHInterface) ] else [ ];
UDPInterface = if (cfg.UDPInterface.bind != "") then [ (parseModules cfg.UDPInterface) ] else [ ]; UDPInterface = if (cfg.UDPInterface.bind != "") then [ (checkPeers cfg.UDPInterface) ] else [ ];
}; };
privateKey = "@CJDNS_PRIVATE_KEY@"; privateKey = "@CJDNS_PRIVATE_KEY@";
@ -134,12 +125,12 @@ in
''; '';
}; };
connectTo = mkOption { connectTo = mkOption {
type = types.attrsOf ( types.submodule ( connectToSubmodule ) ); type = types.attrsOf (types.attrsOf types.str);
default = { }; default = { };
example = { example = {
"192.168.1.1:27313" = { "192.168.1.1:27313" = {
hostname = "homer.hype"; user = "foobar";
password = "5kG15EfpdcKNX3f2GSQ0H1HC7yIfxoCoImnO5FHM"; password = "5kG15EfpdcKNX3f2GSQ0H1HC7yIfxoCoImnO5FHM";
publicKey = "371zpkgs8ss387tmr81q04mp0hg1skb51hw34vk1cq644mjqhup0.k"; publicKey = "371zpkgs8ss387tmr81q04mp0hg1skb51hw34vk1cq644mjqhup0.k";
}; };
}; };
@ -179,12 +170,12 @@ in
}; };
connectTo = mkOption { connectTo = mkOption {
type = types.attrsOf ( types.submodule ( connectToSubmodule ) ); type = types.attrsOf (types.attrsOf types.str);
default = { }; default = { };
example = { example = {
"01:02:03:04:05:06" = { "01:02:03:04:05:06" = {
hostname = "homer.hype"; user = "foobar";
password = "5kG15EfpdcKNX3f2GSQ0H1HC7yIfxoCoImnO5FHM"; password = "5kG15EfpdcKNX3f2GSQ0H1HC7yIfxoCoImnO5FHM";
publicKey = "371zpkgs8ss387tmr81q04mp0hg1skb51hw34vk1cq644mjqhup0.k"; publicKey = "371zpkgs8ss387tmr81q04mp0hg1skb51hw34vk1cq644mjqhup0.k";
}; };
}; };
@ -254,8 +245,6 @@ in
}; };
}; };
networking.extraHosts = cjdnsExtraHosts;
assertions = [ assertions = [
{ assertion = ( cfg.ETHInterface.bind != "" || cfg.UDPInterface.bind != "" || cfg.confFile != null ); { assertion = ( cfg.ETHInterface.bind != "" || cfg.UDPInterface.bind != "" || cfg.confFile != null );
message = "Neither cjdns.ETHInterface.bind nor cjdns.UDPInterface.bind defined."; message = "Neither cjdns.ETHInterface.bind nor cjdns.UDPInterface.bind defined.";

View File

@ -0,0 +1,61 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.dante;
confFile = pkgs.writeText "dante-sockd.conf" ''
user.privileged: root
user.unprivileged: dante
${cfg.config}
'';
in
{
meta = {
maintainers = with maintainers; [ arobyn ];
};
options = {
services.dante = {
enable = mkEnableOption "Dante SOCKS proxy";
config = mkOption {
default = null;
type = types.str;
description = ''
Contents of Dante's configuration file
NOTE: user.privileged/user.unprivileged are set by the service
'';
};
};
};
config = mkIf cfg.enable {
assertions = [
{ assertion = cfg.config != null;
message = "please provide Dante configuration file contents";
}
];
users.users.dante = {
description = "Dante SOCKS proxy daemon user";
isSystemUser = true;
group = "dante";
};
users.groups.dante = {};
systemd.services.dante = {
description = "Dante SOCKS v4 and v5 compatible proxy server";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.dante}/bin/sockd -f ${confFile}";
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
Restart = "always";
};
};
};
}

View File

@ -20,6 +20,7 @@ in {
description = "Package to use for flannel"; description = "Package to use for flannel";
type = types.package; type = types.package;
default = pkgs.flannel.bin; default = pkgs.flannel.bin;
defaultText = "pkgs.flannel.bin";
}; };
publicIp = mkOption { publicIp = mkOption {

View File

@ -86,7 +86,7 @@ in
hwMode = mkOption { hwMode = mkOption {
default = "g"; default = "g";
type = types.string; type = types.enum [ "a" "b" "g" ];
description = '' description = ''
Operation mode. Operation mode.
(a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g). (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g).
@ -152,9 +152,6 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
assertions = [ assertions = [
{ assertion = (cfg.hwMode == "a" || cfg.hwMode == "b" || cfg.hwMode == "g");
message = "hwMode must be a/b/g";
}
{ assertion = (cfg.channel >= 1 && cfg.channel <= 13); { assertion = (cfg.channel >= 1 && cfg.channel <= 13);
message = "channel must be between 1 and 13"; message = "channel must be between 1 and 13";
}]; }];

View File

@ -148,11 +148,11 @@ in
}; };
verbosity = mkOption { verbosity = mkOption {
type = types.str; type = types.enum [ "error" "warning" "notice" "info" "debug" ];
default = "info"; default = "info";
example = "error"; example = "error";
description = '' description = ''
Verbosity level (error, warning, notice, info, debug) Verbosity level
''; '';
}; };

View File

@ -345,12 +345,10 @@ let
}; };
rrlWhitelist = mkOption { rrlWhitelist = mkOption {
type = types.listOf types.str; type = with types; listOf (enum [ "nxdomain" "error" "referral" "any" "rrsig" "wildcard" "nodata" "dnskey" "positive" "all" ]);
default = []; default = [];
description = '' description = ''
Whitelists the given rrl-types. Whitelists the given rrl-types.
The RRL classification types are: nxdomain, error, referral, any,
rrsig, wildcard, nodata, dnskey, positive, all
''; '';
}; };

View File

@ -26,10 +26,11 @@ in
package = mkOption { package = mkOption {
type = types.package; type = types.package;
default = pkgs.kde4.quasselDaemon; default = pkgs.kde4.quasselDaemon;
defaultText = "pkgs.kde4.quasselDaemon";
description = '' description = ''
The package of the quassel daemon. The package of the quassel daemon.
''; '';
example = pkgs.quasselDaemon; example = literalExample "pkgs.quasselDaemon";
}; };
interfaces = mkOption { interfaces = mkOption {

View File

@ -228,8 +228,6 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
programs.ssh.setXAuthLocation = mkForce cfg.forwardX11;
users.extraUsers.sshd = users.extraUsers.sshd =
{ isSystemUser = true; { isSystemUser = true;
description = "SSH privilege separation user"; description = "SSH privilege separation user";

View File

@ -50,6 +50,8 @@ in {
package = mkOption { package = mkOption {
default = pkgs.hound; default = pkgs.hound;
defaultText = "pkgs.hound";
type = types.package;
description = '' description = ''
Package for running hound. Package for running hound.
''; '';

View File

@ -3,26 +3,37 @@ with lib;
let let
clamavUser = "clamav"; clamavUser = "clamav";
stateDir = "/var/lib/clamav"; stateDir = "/var/lib/clamav";
runDir = "/var/run/clamav"; runDir = "/run/clamav";
logDir = "/var/log/clamav";
clamavGroup = clamavUser; clamavGroup = clamavUser;
cfg = config.services.clamav; cfg = config.services.clamav;
pkg = pkgs.clamav;
clamdConfigFile = pkgs.writeText "clamd.conf" '' clamdConfigFile = pkgs.writeText "clamd.conf" ''
DatabaseDirectory ${stateDir} DatabaseDirectory ${stateDir}
LocalSocket ${runDir}/clamd.ctl LocalSocket ${runDir}/clamd.ctl
LogFile ${logDir}/clamav.log
PidFile ${runDir}/clamd.pid PidFile ${runDir}/clamd.pid
TemporaryDirectory /tmp
User clamav User clamav
Foreground yes
${cfg.daemon.extraConfig} ${cfg.daemon.extraConfig}
''; '';
pkg = pkgs.clamav;
freshclamConfigFile = pkgs.writeText "freshclam.conf" ''
DatabaseDirectory ${stateDir}
Foreground yes
Checks ${toString cfg.updater.frequency}
${cfg.updater.extraConfig}
DatabaseMirror database.clamav.net
'';
in in
{ {
options = { options = {
services.clamav = { services.clamav = {
daemon = { daemon = {
enable = mkEnableOption "clamd daemon"; enable = mkEnableOption "ClamAV clamd daemon";
extraConfig = mkOption { extraConfig = mkOption {
type = types.lines; type = types.lines;
@ -34,16 +45,27 @@ in
}; };
}; };
updater = { updater = {
enable = mkEnableOption "freshclam updater"; enable = mkEnableOption "ClamAV freshclam updater";
frequency = mkOption { frequency = mkOption {
type = types.int;
default = 12; default = 12;
description = '' description = ''
Number of database checks per day. Number of database checks per day.
''; '';
}; };
config = mkOption { interval = mkOption {
type = types.str;
default = "hourly";
description = ''
How often freshclam is invoked. See systemd.time(7) for more
information about the format.
'';
};
extraConfig = mkOption {
type = types.lines;
default = ""; default = "";
description = '' description = ''
Extra configuration for freshclam. Contents will be added verbatim to the Extra configuration for freshclam. Contents will be added verbatim to the
@ -68,50 +90,53 @@ in
gid = config.ids.gids.clamav; gid = config.ids.gids.clamav;
}; };
services.clamav.updater.config = mkIf cfg.updater.enable '' environment.etc."clamav/freshclam.conf".source = freshclamConfigFile;
DatabaseDirectory ${stateDir} environment.etc."clamav/clamd.conf".source = clamdConfigFile;
Foreground yes
Checks ${toString cfg.updater.frequency}
DatabaseMirror database.clamav.net
'';
systemd.services.clamd = mkIf cfg.daemon.enable { systemd.services.clamav-daemon = mkIf cfg.daemon.enable {
description = "ClamAV daemon (clamd)"; description = "ClamAV daemon (clamd)";
path = [ pkg ]; after = mkIf cfg.updater.enable [ "clamav-freshclam.service" ];
after = [ "network.target" "freshclam.service" ]; requires = mkIf cfg.updater.enable [ "clamav-freshclam.service" ];
requires = [ "freshclam.service" ];
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
restartTriggers = [ clamdConfigFile ];
preStart = '' preStart = ''
mkdir -m 0755 -p ${logDir}
mkdir -m 0755 -p ${runDir} mkdir -m 0755 -p ${runDir}
chown ${clamavUser}:${clamavGroup} ${logDir}
chown ${clamavUser}:${clamavGroup} ${runDir} chown ${clamavUser}:${clamavGroup} ${runDir}
''; '';
serviceConfig = { serviceConfig = {
ExecStart = "${pkg}/bin/clamd --config-file=${clamdConfigFile}"; ExecStart = "${pkg}/bin/clamd";
Type = "forking"; ExecReload = "${pkgs.coreutils}/bin/kill -USR2 $MAINPID";
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; PrivateTmp = "yes";
Restart = "on-failure"; PrivateDevices = "yes";
RestartSec = "10s"; PrivateNetwork = "yes";
StartLimitInterval = "1min";
}; };
}; };
systemd.services.freshclam = mkIf cfg.updater.enable { systemd.timers.clamav-freshclam = mkIf cfg.updater.enable {
description = "ClamAV updater (freshclam)"; description = "Timer for ClamAV virus database updater (freshclam)";
after = [ "network.target" ]; wantedBy = [ "timers.target" ];
wantedBy = [ "multi-user.target" ]; timerConfig = {
path = [ pkg ]; OnCalendar = cfg.updater.interval;
Unit = "clamav-freshclam.service";
};
};
systemd.services.clamav-freshclam = mkIf cfg.updater.enable {
description = "ClamAV virus database updater (freshclam)";
restartTriggers = [ freshclamConfigFile ];
preStart = '' preStart = ''
mkdir -m 0755 -p ${stateDir} mkdir -m 0755 -p ${stateDir}
chown ${clamavUser}:${clamavGroup} ${stateDir} chown ${clamavUser}:${clamavGroup} ${stateDir}
''; '';
serviceConfig = { serviceConfig = {
ExecStart = "${pkg}/bin/freshclam --daemon --config-file=${pkgs.writeText "freshclam.conf" cfg.updater.config}"; Type = "oneshot";
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; ExecStart = "${pkg}/bin/freshclam";
Restart = "on-failure"; PrivateTmp = "yes";
RestartSec = "10s"; PrivateDevices = "yes";
StartLimitInterval = "1min";
}; };
}; };
}; };

View File

@ -13,6 +13,7 @@ in {
opentracker package to use opentracker package to use
''; '';
default = pkgs.opentracker; default = pkgs.opentracker;
defaultText = "pkgs.opentracker";
}; };
extraOptions = mkOption { extraOptions = mkOption {

View File

@ -31,6 +31,8 @@ in {
}; };
pkg = mkOption { pkg = mkOption {
default = pkgs.quassel-webserver; default = pkgs.quassel-webserver;
defaultText = "pkgs.quassel-webserver";
type = types.package;
description = "The quassel-webserver package"; description = "The quassel-webserver package";
}; };
quasselCoreHost = mkOption { quasselCoreHost = mkOption {

View File

@ -188,6 +188,7 @@ in {
package = mkOption { package = mkOption {
type = types.package; type = types.package;
default = pkgs.compton; default = pkgs.compton;
defaultText = "pkgs.compton";
example = literalExample "pkgs.compton"; example = literalExample "pkgs.compton";
description = '' description = ''
Compton derivation to use. Compton derivation to use.

View File

@ -22,6 +22,15 @@ in
description = "Enable the Plasma 5 (KDE 5) desktop environment."; description = "Enable the Plasma 5 (KDE 5) desktop environment.";
}; };
enableQt4Support = mkOption {
type = types.bool;
default = true;
description = ''
Enable support for Qt 4-based applications. Particularly, install the
Qt 4 version of the Breeze theme and a default backend for Phonon.
'';
};
}; };
}; };
@ -105,7 +114,7 @@ in
kde5.sonnet kde5.sonnet
kde5.threadweaver kde5.threadweaver
kde5.breeze kde5.breeze-qt5
kde5.kactivitymanagerd kde5.kactivitymanagerd
kde5.kde-cli-tools kde5.kde-cli-tools
kde5.kdecoration kde5.kdecoration
@ -141,13 +150,12 @@ in
kde5.konsole kde5.konsole
kde5.print-manager kde5.print-manager
# Oxygen icons moved to KDE Frameworks 5.16 and later. # Install Breeze icons if available
(kde5.oxygen-icons or kde5.oxygen-icons5) (kde5.breeze-icons or kde5.oxygen-icons5 or kde5.oxygen-icons)
pkgs.hicolor_icon_theme pkgs.hicolor_icon_theme
kde5.kde-gtk-config kde5.kde-gtk-config kde5.breeze-gtk
pkgs.phonon-backend-gstreamer
pkgs.qt5.phonon-backend-gstreamer pkgs.qt5.phonon-backend-gstreamer
] ]
@ -155,15 +163,14 @@ in
# If it is not available, Orion is very similar to Breeze. # If it is not available, Orion is very similar to Breeze.
++ lib.optional (!(lib.hasAttr "breeze-gtk" kde5)) pkgs.orion ++ lib.optional (!(lib.hasAttr "breeze-gtk" kde5)) pkgs.orion
# Install Breeze icons if available
++ lib.optional (lib.hasAttr "breeze-icons" kde5) kde5.breeze-icons
# Install activity manager if available # Install activity manager if available
++ lib.optional (lib.hasAttr "kactivitymanagerd" kde5) kde5.kactivitymanagerd ++ lib.optional (lib.hasAttr "kactivitymanagerd" kde5) kde5.kactivitymanagerd
# frameworkintegration was split with plasma-integration in Plasma 5.6 # frameworkintegration was split with plasma-integration in Plasma 5.6
++ lib.optional (lib.hasAttr "plasma-integration" kde5) kde5.plasma-integration ++ lib.optional (lib.hasAttr "plasma-integration" kde5) kde5.plasma-integration
++ lib.optionals cfg.enableQt4Support [ kde5.breeze-qt4 pkgs.phonon-backend-gstreamer ]
# Optional hardware support features # Optional hardware support features
++ lib.optional config.hardware.bluetooth.enable kde5.bluedevil ++ lib.optional config.hardware.bluetooth.enable kde5.bluedevil
++ lib.optional config.networking.networkmanager.enable kde5.plasma-nm ++ lib.optional config.networking.networkmanager.enable kde5.plasma-nm
@ -217,7 +224,6 @@ in
kde5.ecm # for the setup-hook kde5.ecm # for the setup-hook
kde5.plasma-workspace kde5.plasma-workspace
kde5.breeze-icons kde5.breeze-icons
(kde5.oxygen-icons or kde5.oxygen-icons5)
]; ];
}; };

View File

@ -1,48 +0,0 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.xserver.windowManager.bspwm-unstable;
in
{
options = {
services.xserver.windowManager.bspwm-unstable = {
enable = mkEnableOption "bspwm-unstable";
startThroughSession = mkOption {
type = with types; bool;
default = false;
description = "
Start the window manager through the script defined in
sessionScript. Defaults to the the bspwm-session script
provided by bspwm
";
};
sessionScript = mkOption {
default = "${pkgs.bspwm-unstable}/bin/bspwm-session";
defaultText = "(pkgs.bspwm-unstable)/bin/bspwm-session";
description = "
The start-session script to use. Defaults to the
provided bspwm-session script from the bspwm package.
Does nothing unless `bspwm.startThroughSession` is enabled
";
};
};
};
config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton {
name = "bspwm-unstable";
start = if cfg.startThroughSession
then cfg.sessionScript
else ''
export _JAVA_AWT_WM_NONREPARENTING=1
SXHKD_SHELL=/bin/sh ${pkgs.sxhkd-unstable}/bin/sxhkd -f 100 &
${pkgs.bspwm-unstable}/bin/bspwm
'';
};
environment.systemPackages = [ pkgs.bspwm-unstable ];
};
}

View File

@ -9,40 +9,69 @@ in
{ {
options = { options = {
services.xserver.windowManager.bspwm = { services.xserver.windowManager.bspwm = {
enable = mkEnableOption "bspwm"; enable = mkEnableOption "bspwm";
startThroughSession = mkOption {
type = with types; bool;
default = false;
description = "
Start the window manager through the script defined in
sessionScript. Defaults to the the bspwm-session script
provided by bspwm
";
};
sessionScript = mkOption {
default = "${pkgs.bspwm}/bin/bspwm-session";
defaultText = "(pkgs.bspwm)/bin/bspwm-session";
description = "
The start-session script to use. Defaults to the
provided bspwm-session script from the bspwm package.
Does nothing unless `bspwm.startThroughSession` is enabled package = mkOption {
"; type = types.package;
default = pkgs.bspwm;
defaultText = "pkgs.bspwm";
example = "pkgs.bspwm-unstable";
description = ''
bspwm package to use.
'';
};
configFile = mkOption {
type = with types; nullOr path;
example = "${pkgs.bspwm}/share/doc/bspwm/examples/bspwmrc";
default = null;
description = ''
Path to the bspwm configuration file.
If null, $HOME/.config/bspwm/bspwmrc will be used.
'';
};
sxhkd = {
package = mkOption {
type = types.package;
default = pkgs.sxhkd;
defaultText = "pkgs.sxhkd";
example = "pkgs.sxhkd-unstable";
description = ''
sxhkd package to use.
'';
}; };
configFile = mkOption {
type = with types; nullOr path;
example = "${pkgs.bspwm}/share/doc/bspwm/examples/sxhkdrc";
default = null;
description = ''
Path to the sxhkd configuration file.
If null, $HOME/.config/sxhkd/sxhkdrc will be used.
'';
};
};
}; };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
services.xserver.windowManager.session = singleton { services.xserver.windowManager.session = singleton {
name = "bspwm"; name = "bspwm";
start = if cfg.startThroughSession start = ''
then cfg.sessionScript export _JAVA_AWT_WM_NONREPARENTING=1
else '' SXHKD_SHELL=/bin/sh ${cfg.sxhkd.package}/bin/sxhkd ${optionalString (cfg.sxhkd.configFile != null) "-c \"${cfg.sxhkd.configFile}\""} &
export _JAVA_AWT_WM_NONREPARENTING=1 ${cfg.package}/bin/bspwm ${optionalString (cfg.configFile != null) "-c \"${cfg.configFile}\""}
SXHKD_SHELL=/bin/sh ${pkgs.sxhkd}/bin/sxhkd -f 100 & waitPID=$!
${pkgs.bspwm}/bin/bspwm '';
'';
}; };
environment.systemPackages = [ pkgs.bspwm ]; environment.systemPackages = [ cfg.package ];
}; };
imports = [
(mkRemovedOptionModule [ "services" "xserver" "windowManager" "bspwm-unstable" "enable" ]
"Use services.xserver.windowManager.bspwm.enable and set services.xserver.windowManager.bspwm.package to pkgs.bspwm-unstable to use the unstable version of bspwm.")
(mkRemovedOptionModule [ "services" "xserver" "windowManager" "bspwm" "startThroughSession" ]
"bspwm package does not provide bspwm-session anymore.")
(mkRemovedOptionModule [ "services" "xserver" "windowManager" "bspwm" "sessionScript" ]
"bspwm package does not provide bspwm-session anymore.")
];
} }

View File

@ -10,7 +10,6 @@ in
imports = [ imports = [
./afterstep.nix ./afterstep.nix
./bspwm.nix ./bspwm.nix
./bspwm-unstable.nix
./compiz.nix ./compiz.nix
./dwm.nix ./dwm.nix
./exwm.nix ./exwm.nix

View File

@ -122,7 +122,7 @@ in
mkdir -p /root/.ssh mkdir -p /root/.ssh
${concatStrings (map (key: '' ${concatStrings (map (key: ''
echo -n ${escapeShellArg key} >> /root/.ssh/authorized_keys echo ${escapeShellArg key} >> /root/.ssh/authorized_keys
'') cfg.authorizedKeys)} '') cfg.authorizedKeys)}
dropbear -s -j -k -E -m -p ${toString cfg.port} dropbear -s -j -k -E -m -p ${toString cfg.port}

View File

@ -53,7 +53,7 @@ let
inherit (args) devices; inherit (args) devices;
inherit (efi) canTouchEfiVariables; inherit (efi) canTouchEfiVariables;
inherit (cfg) inherit (cfg)
version extraConfig extraPerEntryConfig extraEntries version extraConfig extraPerEntryConfig extraEntries forceInstall
extraEntriesBeforeNixOS extraPrepareConfig configurationLimit copyKernels extraEntriesBeforeNixOS extraPrepareConfig configurationLimit copyKernels
default fsIdentifier efiSupport efiInstallAsRemovable gfxmodeEfi gfxmodeBios; default fsIdentifier efiSupport efiInstallAsRemovable gfxmodeEfi gfxmodeBios;
path = (makeBinPath ([ path = (makeBinPath ([
@ -403,6 +403,16 @@ in
''; '';
}; };
forceInstall = mkOption {
default = false;
type = types.bool;
description = ''
Whether to try and forcibly install GRUB even if problems are
detected. It is not recommended to enable this unless you know what
you are doing.
'';
};
trustedBoot = { trustedBoot = {
enable = mkOption { enable = mkOption {

View File

@ -65,6 +65,7 @@ my $efiSysMountPoint = get("efiSysMountPoint");
my $gfxmodeEfi = get("gfxmodeEfi"); my $gfxmodeEfi = get("gfxmodeEfi");
my $gfxmodeBios = get("gfxmodeBios"); my $gfxmodeBios = get("gfxmodeBios");
my $bootloaderId = get("bootloaderId"); my $bootloaderId = get("bootloaderId");
my $forceInstall = get("forceInstall");
$ENV{'PATH'} = get("path"); $ENV{'PATH'} = get("path");
die "unsupported GRUB version\n" if $grubVersion != 1 && $grubVersion != 2; die "unsupported GRUB version\n" if $grubVersion != 1 && $grubVersion != 2;
@ -531,13 +532,14 @@ if (($requireNewInstall != 0) && ($efiTarget eq "no" || $efiTarget eq "both")) {
foreach my $dev (@deviceTargets) { foreach my $dev (@deviceTargets) {
next if $dev eq "nodev"; next if $dev eq "nodev";
print STDERR "installing the GRUB $grubVersion boot loader on $dev...\n"; print STDERR "installing the GRUB $grubVersion boot loader on $dev...\n";
if ($grubTarget eq "") { my @command = ("$grub/sbin/grub-install", "--recheck", "--root-directory=$tmpDir", Cwd::abs_path($dev));
system("$grub/sbin/grub-install", "--recheck", "--root-directory=$tmpDir", Cwd::abs_path($dev)) == 0 if ($forceInstall eq "true") {
or die "$0: installation of GRUB on $dev failed\n"; push @command, "--force";
} else {
system("$grub/sbin/grub-install", "--recheck", "--root-directory=$tmpDir", "--target=$grubTarget", Cwd::abs_path($dev)) == 0
or die "$0: installation of GRUB on $dev failed\n";
} }
if ($grubTarget ne "") {
push @command, "--target=$grubTarget";
}
(system @command) == 0 or die "$0: installation of GRUB on $dev failed\n";
} }
} }
@ -546,6 +548,9 @@ if (($requireNewInstall != 0) && ($efiTarget eq "no" || $efiTarget eq "both")) {
if (($requireNewInstall != 0) && ($efiTarget eq "only" || $efiTarget eq "both")) { if (($requireNewInstall != 0) && ($efiTarget eq "only" || $efiTarget eq "both")) {
print STDERR "installing the GRUB $grubVersion EFI boot loader into $efiSysMountPoint...\n"; print STDERR "installing the GRUB $grubVersion EFI boot loader into $efiSysMountPoint...\n";
my @command = ("$grubEfi/sbin/grub-install", "--recheck", "--target=$grubTargetEfi", "--boot-directory=$bootPath", "--efi-directory=$efiSysMountPoint"); my @command = ("$grubEfi/sbin/grub-install", "--recheck", "--target=$grubTargetEfi", "--boot-directory=$bootPath", "--efi-directory=$efiSysMountPoint");
if ($forceInstall eq "true") {
push @command, "--force";
}
if ($canTouchEfiVariables eq "true") { if ($canTouchEfiVariables eq "true") {
push @command, "--bootloader-id=$bootloaderId"; push @command, "--bootloader-id=$bootloaderId";
} else { } else {

View File

@ -33,7 +33,7 @@ in
boot.loader.raspberryPi.version = mkOption { boot.loader.raspberryPi.version = mkOption {
default = 2; default = 2;
type = types.int; type = types.enum [ 1 2 ];
description = '' description = ''
''; '';
}; };
@ -44,10 +44,5 @@ in
system.build.installBootLoader = builder; system.build.installBootLoader = builder;
system.boot.loader.id = "raspberrypi"; system.boot.loader.id = "raspberrypi";
system.boot.loader.kernelFile = platform.kernelTarget; system.boot.loader.kernelFile = platform.kernelTarget;
assertions = [
{ assertion = (cfg.version == 1 || cfg.version == 2);
message = "loader.raspberryPi.version should be 1 or 2";
}
];
}; };
} }

View File

@ -51,6 +51,10 @@ in
url = "https://nixos.org/logo/nixos-hires.png"; url = "https://nixos.org/logo/nixos-hires.png";
sha256 = "1ivzgd7iz0i06y36p8m5w48fd8pjqwxhdaavc0pxs7w1g7mcy5si"; sha256 = "1ivzgd7iz0i06y36p8m5w48fd8pjqwxhdaavc0pxs7w1g7mcy5si";
}; };
defaultText = ''pkgs.fetchurl {
url = "https://nixos.org/logo/nixos-hires.png";
sha256 = "1ivzgd7iz0i06y36p8m5w48fd8pjqwxhdaavc0pxs7w1g7mcy5si";
}'';
description = '' description = ''
Logo which is displayed on the splash screen. Logo which is displayed on the splash screen.
''; '';

View File

@ -782,13 +782,12 @@ in
}; };
type = mkOption { type = mkOption {
type = types.string; type = types.enum [ "managed" "ibss" "monitor" "mesh" "wds" ];
default = "managed"; default = "managed";
example = "ibss"; example = "ibss";
description = '' description = ''
The type of the WLAN interface. The type has to be either <literal>managed</literal>, The type of the WLAN interface.
<literal>ibss</literal>, <literal>monitor</literal>, <literal>mesh</literal> or <literal>wds</literal>. The type has to be supported by the underlying hardware of the device.
Also, the type has to be supported by the underlying hardware of the device.
''; '';
}; };
@ -799,17 +798,11 @@ in
}; };
flags = mkOption { flags = mkOption {
type = types.nullOr types.string; type = with types; nullOr (enum [ "none" "fcsfail" "control" "otherbss" "cook" "active" ]);
default = null; default = null;
example = "control"; example = "control";
description = '' description = ''
Flags for interface of type <literal>monitor</literal>. The valid flags are: Flags for interface of type <literal>monitor</literal>.
none: no special flags
fcsfail: show frames with FCS errors
control: show control frames
otherbss: show frames from other BSSes
cook: use cooked mode
active: use active mode (ACK incoming unicast packets)
''; '';
}; };

View File

@ -129,9 +129,12 @@ let
--setenv HOST_ADDRESS6="$HOST_ADDRESS6" \ --setenv HOST_ADDRESS6="$HOST_ADDRESS6" \
--setenv LOCAL_ADDRESS6="$LOCAL_ADDRESS6" \ --setenv LOCAL_ADDRESS6="$LOCAL_ADDRESS6" \
--setenv PATH="$PATH" \ --setenv PATH="$PATH" \
${if cfg.additionalCapabilities != null then ${if cfg.additionalCapabilities != null && cfg.additionalCapabilities != [] then
''--capability="${concatStringsSep " " cfg.additionalCapabilities}"'' else "" ''--capability="${concatStringsSep " " cfg.additionalCapabilities}"'' else ""
} \ } \
${if cfg.tmpfs != null && cfg.tmpfs != [] then
''--tmpfs=${concatStringsSep " --tmpfs=" cfg.tmpfs}'' else ""
} \
${containerInit cfg} "''${SYSTEM_PATH:-/nix/var/nix/profiles/system}/init" ${containerInit cfg} "''${SYSTEM_PATH:-/nix/var/nix/profiles/system}/init"
''; '';
@ -367,6 +370,7 @@ let
hostAddress6 = null; hostAddress6 = null;
localAddress = null; localAddress = null;
localAddress6 = null; localAddress6 = null;
tmpfs = null;
}; };
in in
@ -510,6 +514,18 @@ in
''; '';
}; };
tmpfs = mkOption {
type = types.listOf types.str;
default = [];
example = [ "/var" ];
description = ''
Mounts a set of tmpfs file systems into the container.
Multiple paths can be specified.
Valid items must conform to the --tmpfs argument
of systemd-nspawn. See systemd-nspawn(1) for details.
'';
};
} // networkOptions; } // networkOptions;
config = mkMerge config = mkMerge

View File

@ -24,7 +24,7 @@ with lib;
copy_bin_and_libs ${pkgs.gnused}/bin/sed copy_bin_and_libs ${pkgs.gnused}/bin/sed
copy_bin_and_libs ${pkgs.utillinux}/sbin/sfdisk copy_bin_and_libs ${pkgs.utillinux}/sbin/sfdisk
copy_bin_and_libs ${pkgs.utillinux}/sbin/lsblk copy_bin_and_libs ${pkgs.utillinux}/sbin/lsblk
cp -v ${pkgs.cloud-utils}/bin/growpart $out/bin/growpart cp -v ${pkgs.cloud-utils}/bin/.growpart-wrapped $out/bin/growpart
ln -s sed $out/bin/gnused ln -s sed $out/bin/gnused
''; '';

View File

@ -5,6 +5,7 @@ with lib;
let let
cfg = config.services.vmwareGuest; cfg = config.services.vmwareGuest;
open-vm-tools = pkgs.open-vm-tools; open-vm-tools = pkgs.open-vm-tools;
xf86inputvmmouse = pkgs.xorg.xf86inputvmmouse;
in in
{ {
options = { options = {
@ -29,18 +30,17 @@ in
services.xserver = { services.xserver = {
videoDrivers = mkOverride 50 [ "vmware" ]; videoDrivers = mkOverride 50 [ "vmware" ];
modules = [ xf86inputvmmouse ];
config = '' config = ''
Section "InputDevice" Section "InputClass"
Identifier "VMMouse" Identifier "VMMouse"
MatchDevicePath "/dev/input/event*"
MatchProduct "ImPS/2 Generic Wheel Mouse"
Driver "vmmouse" Driver "vmmouse"
EndSection EndSection
''; '';
serverLayoutSection = ''
InputDevice "VMMouse"
'';
displayManager.sessionCommands = '' displayManager.sessionCommands = ''
${open-vm-tools}/bin/vmware-user-suid-wrapper ${open-vm-tools}/bin/vmware-user-suid-wrapper
''; '';

View File

@ -228,6 +228,7 @@ in rec {
tests.containers-imperative = callTest tests/containers-imperative.nix {}; tests.containers-imperative = callTest tests/containers-imperative.nix {};
tests.containers-extra_veth = callTest tests/containers-extra_veth.nix {}; tests.containers-extra_veth = callTest tests/containers-extra_veth.nix {};
tests.containers-physical_interfaces = callTest tests/containers-physical_interfaces.nix {}; tests.containers-physical_interfaces = callTest tests/containers-physical_interfaces.nix {};
tests.containers-tmpfs = callTest tests/containers-tmpfs.nix {};
tests.docker = hydraJob (import tests/docker.nix { system = "x86_64-linux"; }); tests.docker = hydraJob (import tests/docker.nix { system = "x86_64-linux"; });
tests.dnscrypt-proxy = callTest tests/dnscrypt-proxy.nix { system = "x86_64-linux"; }; tests.dnscrypt-proxy = callTest tests/dnscrypt-proxy.nix { system = "x86_64-linux"; };
tests.ecryptfs = callTest tests/ecryptfs.nix {}; tests.ecryptfs = callTest tests/ecryptfs.nix {};

View File

@ -0,0 +1,79 @@
# Test for NixOS' container support.
import ./make-test.nix ({ pkgs, ...} : {
name = "containers-bridge";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ ckampka ];
};
machine =
{ config, pkgs, ... }:
{ imports = [ ../modules/installer/cd-dvd/channel.nix ];
virtualisation.writableStore = true;
virtualisation.memorySize = 768;
containers.tmpfs =
{
autoStart = true;
tmpfs = [
# Mount var as a tmpfs
"/var"
# Add a nested mount inside a tmpfs
"/var/log"
# Add a tmpfs on a path that does not exist
"/some/random/path"
];
config = { };
};
virtualisation.pathsInNixDB = [ pkgs.stdenv ];
};
testScript =
''
$machine->waitForUnit("default.target");
$machine->succeed("nixos-container list") =~ /tmpfs/ or die;
# Start the tmpfs container.
#$machine->succeed("nixos-container status tmpfs") =~ /up/ or die;
# Verify that /var is mounted as a tmpfs
#$machine->succeed("nixos-container run tmpfs -- systemctl status var.mount --no-pager 2>/dev/null") =~ /What: tmpfs/ or die;
$machine->succeed("nixos-container run tmpfs -- mountpoint -q /var 2>/dev/null");
# Verify that /var/log is mounted as a tmpfs
$machine->succeed("nixos-container run tmpfs -- systemctl status var-log.mount --no-pager 2>/dev/null") =~ /What: tmpfs/ or die;
$machine->succeed("nixos-container run tmpfs -- mountpoint -q /var/log 2>/dev/null");
# Verify that /some/random/path is mounted as a tmpfs
$machine->succeed("nixos-container run tmpfs -- systemctl status some-random-path.mount --no-pager 2>/dev/null") =~ /What: tmpfs/ or die;
$machine->succeed("nixos-container run tmpfs -- mountpoint -q /some/random/path 2>/dev/null");
# Verify that files created in the container in a non-tmpfs directory are visible on the host.
# This establishes legitimacy for the following tests
$machine->succeed("nixos-container run tmpfs -- touch /root/test.file 2>/dev/null");
$machine->succeed("nixos-container run tmpfs -- ls -l /root | grep -q test.file 2>/dev/null");
$machine->succeed("test -e /var/lib/containers/tmpfs/root/test.file");
# Verify that /some/random/path is writable and that files created there
# are not in the hosts container dir but in the tmpfs
$machine->succeed("nixos-container run tmpfs -- touch /some/random/path/test.file 2>/dev/null");
$machine->succeed("nixos-container run tmpfs -- test -e /some/random/path/test.file 2>/dev/null");
$machine->fail("test -e /var/lib/containers/tmpfs/some/random/path/test.file");
# Verify that files created in the hosts container dir in a path where a tmpfs file system has been mounted
# are not visible to the container as the do not exist in the tmpfs
$machine->succeed("touch /var/lib/containers/tmpfs/var/test.file");
$machine->succeed("test -e /var/lib/containers/tmpfs/var/test.file");
$machine->succeed("ls -l /var/lib/containers/tmpfs/var/ | grep -q test.file 2>/dev/null");
$machine->fail("nixos-container run tmpfs -- ls -l /var | grep -q test.file 2>/dev/null");
'';
})

View File

@ -0,0 +1,12 @@
{ boost
, faust
, ladspaH
}:
faust.wrapWithBuildEnv {
baseName = "faust2ladspa";
propagatedBuildInputs = [ boost ladspaH ];
}

View File

@ -5,16 +5,18 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "moc-${version}"; name = "moc-${version}";
version = "2.5.0"; version = "2.5.1";
src = fetchurl { src = fetchurl {
url = "http://ftp.daper.net/pub/soft/moc/stable/moc-${version}.tar.bz2"; url = "http://ftp.daper.net/pub/soft/moc/stable/moc-${version}.tar.bz2";
sha256 = "14b0g9jn12jzxsf292g64dc6frlxv99kaagsasmc8xmg80iab7nj"; sha256 = "1wn4za08z64bhsgfhr9c0crfyvy8c3b6a337wx7gz19am5srqh8v";
}; };
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ buildInputs = [
ncurses pkgconfig alsaLib flac libmad speex ffmpeg libvorbis ncurses alsaLib flac libmad speex ffmpeg libvorbis libmpc libsndfile libjack2
libmpc libsndfile libjack2 db libmodplug timidity libid3tag libtool db libmodplug timidity libid3tag libtool
]; ];
meta = with stdenv.lib; { meta = with stdenv.lib; {

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "atom-${version}"; name = "atom-${version}";
version = "1.12.2"; version = "1.12.5";
src = fetchurl { src = fetchurl {
url = "https://github.com/atom/atom/releases/download/v${version}/atom-amd64.deb"; url = "https://github.com/atom/atom/releases/download/v${version}/atom-amd64.deb";
sha256 = "03kznbxfxyjq9fqq1jvq3gvvy50dz3wqvn098n9k9gv8x3595mw4"; sha256 = "0bxv9j6v77g9sjlg6vjcxjdsgbh10v3c8f0qp5fpzr7dzk7k9w41";
name = "${name}.deb"; name = "${name}.deb";
}; };

View File

@ -171,12 +171,12 @@ rec {
checkstyle = buildEclipseUpdateSite rec { checkstyle = buildEclipseUpdateSite rec {
name = "checkstyle-${version}"; name = "checkstyle-${version}";
version = "6.19.1.201607051943"; version = "7.2.0.201611082205";
src = fetchzip { src = fetchzip {
stripRoot = false; stripRoot = false;
url = "mirror://sourceforge/project/eclipse-cs/Eclipse%20Checkstyle%20Plug-in/6.19.1/net.sf.eclipsecs-updatesite_${version}.zip"; url = "mirror://sourceforge/project/eclipse-cs/Eclipse%20Checkstyle%20Plug-in/7.2.0/net.sf.eclipsecs-updatesite_${version}.zip";
sha256 = "03aah57g0cgxym95p1wcj2h69xy3r9c0vv7js3gpmw1hx8w9sjsf"; sha256 = "1zngyrh5ckgli0xxm52vm6mzbbvrjslwqcymggfqjhzplpcgwqk1";
}; };
meta = with stdenv.lib; { meta = with stdenv.lib; {

View File

@ -24,12 +24,11 @@ stdenv.mkDerivation rec {
install *.el* $out/share/emacs/site-lisp install *.el* $out/share/emacs/site-lisp
''; '';
meta = { meta = with stdenv.lib; {
description = "Precision colors for machines and people"; description = "Precision colors for machines and people";
homepage = http://ethanschoonover.com/solarized; homepage = http://ethanschoonover.com/solarized;
maintainers = "Samuel Rivas <samuelrivas@gmail.com>"; maintainers = [ maintainers.samuelrivas ];
license = stdenv.lib.licenses.mit; license = licenses.mit;
platforms = platforms.all;
platforms = stdenv.lib.platforms.all;
}; };
} }

View File

@ -156,12 +156,12 @@ in
idea-community = buildIdea rec { idea-community = buildIdea rec {
name = "idea-community-${version}"; name = "idea-community-${version}";
version = "2016.2.5"; version = "2016.3";
description = "Integrated Development Environment (IDE) by Jetbrains, community edition"; description = "Integrated Development Environment (IDE) by Jetbrains, community edition";
license = stdenv.lib.licenses.asl20; license = stdenv.lib.licenses.asl20;
src = fetchurl { src = fetchurl {
url = "https://download.jetbrains.com/idea/ideaIC-${version}.tar.gz"; url = "https://download.jetbrains.com/idea/ideaIC-${version}.tar.gz";
sha256 = "0d1pssnrn36fibwsyjh30fsd5hn7qw3nljdnwg40q52skilcdk0v"; sha256 = "1bp2a1x8nl5flklf160n7ka5clnb0xx9gwv5zd9li2bsf04zlzf3";
}; };
wmClass = "jetbrains-idea-ce"; wmClass = "jetbrains-idea-ce";
}; };
@ -192,12 +192,12 @@ in
idea-ultimate = buildIdea rec { idea-ultimate = buildIdea rec {
name = "idea-ultimate-${version}"; name = "idea-ultimate-${version}";
version = "2016.2.5"; version = "2016.3";
description = "Integrated Development Environment (IDE) by Jetbrains, requires paid license"; description = "Integrated Development Environment (IDE) by Jetbrains, requires paid license";
license = stdenv.lib.licenses.unfree; license = stdenv.lib.licenses.unfree;
src = fetchurl { src = fetchurl {
url = "https://download.jetbrains.com/idea/ideaIU-${version}.tar.gz"; url = "https://download.jetbrains.com/idea/ideaIU-${version}.tar.gz";
sha256 = "0g8v3fw3610gyi25x489vlb72200rgb3b4rwh0igr4w35gwdv91h"; sha256 = "1sax3sjhsyvb9qfnn0gc74p3ym6j5f30mmapd4irq9fk4bsl8c31";
}; };
wmClass = "jetbrains-idea"; wmClass = "jetbrains-idea";
}; };
@ -288,12 +288,12 @@ in
webstorm = buildWebStorm rec { webstorm = buildWebStorm rec {
name = "webstorm-${version}"; name = "webstorm-${version}";
version = "2016.2.4"; version = "2016.3";
description = "Professional IDE for Web and JavaScript development"; description = "Professional IDE for Web and JavaScript development";
license = stdenv.lib.licenses.unfree; license = stdenv.lib.licenses.unfree;
src = fetchurl { src = fetchurl {
url = "https://download.jetbrains.com/webstorm/WebStorm-${version}.tar.gz"; url = "https://download.jetbrains.com/webstorm/WebStorm-${version}.tar.gz";
sha256 = "1h61l44xnbcdb26q8ylb25sj3rs43nxki203i2jra2i6j5jzxrvg"; sha256 = "12jv8x7rq0cpvrbrb2l2x1p7is8511fx6ia79z5v3fnwxf17i3w5";
}; };
wmClass = "jetbrains-webstorm"; wmClass = "jetbrains-webstorm";
}; };

View File

@ -233,21 +233,20 @@ rec {
}; };
gimplensfun = pluginDerivation rec { gimplensfun = pluginDerivation rec {
name = "gimplensfun-0.1.1"; version = "0.2.4";
name = "gimplensfun-${version}";
src = fetchurl { src = fetchFromGitHub {
url = "http://lensfun.sebastiankraft.net/${name}.tar.gz"; owner = "seebk";
sha256 = "0kr296n4k7gsjqg1abmvpysxi88iq5wrzdpcg7vm7l1ifvbs972q"; repo = "GIMP-Lensfun";
rev = version;
sha256 = "0zlmp9v732qmzj083mnk5z421s57mnckmpjhiw890wmmwzj2lhxz";
}; };
patchPhase = '' sed -i Makefile -e's|/usr/bin/g++|g++|' '';
buildInputs = [ gimp pkgconfig glib gimp.gtk pkgs.lensfun pkgs.exiv2 ]; buildInputs = [ gimp pkgconfig glib gimp.gtk pkgs.lensfun pkgs.exiv2 ];
installPhase = " installPhase = "
installPlugins gimplensfun installPlugins gimp-lensfun
mkdir -p $out/bin
cp gimplensfun $out/bin
"; ";
meta = { meta = {

View File

@ -4,25 +4,26 @@
with stdenv.lib; with stdenv.lib;
let installSanePath = path: '' let installSanePath = path: ''
if test -e "${path}/lib/sane"; then if [ -e "${path}/lib/sane" ]; then
find "${path}/lib/sane" -maxdepth 1 -not -type d | while read backend; do find "${path}/lib/sane" -maxdepth 1 -not -type d | while read backend; do
ln -s $backend $out/lib/sane/$(basename $backend) ln -s "$backend" "$out/lib/sane/$(basename "$backend")"
done done
fi fi
if test -e "${path}/etc/sane.d"; then if [ -e "${path}/etc/sane.d" ]; then
find "${path}/etc/sane.d" -maxdepth 1 -not -type d | while read conf; do find "${path}/etc/sane.d" -maxdepth 1 -not -type d | while read conf; do
if test $(basename $conf) = "dll.conf"; then name="$(basename $conf)"
cat $conf >> $out/etc/sane.d/dll.conf if [ "$name" = "dll.conf" ] || [ "$name" = "saned.conf" ] || [ "$name" = "net.conf" ]; then
cat "$conf" >> "$out/etc/sane.d/$name"
else else
ln -s $conf $out/etc/sane.d/$(basename $conf) ln -s "$conf" "$out/etc/sane.d/$name"
fi fi
done done
fi fi
if test -e "${path}/etc/sane.d/dll.d"; then if [ -e "${path}/etc/sane.d/dll.d" ]; then
find "${path}/etc/sane.d/dll.d" -maxdepth 1 -not -type d | while read conf; do find "${path}/etc/sane.d/dll.d" -maxdepth 1 -not -type d | while read conf; do
ln -s $conf $out/etc/sane.d/dll.d/$(basename $conf) ln -s "$conf" "$out/etc/sane.d/dll.d/$(basename $conf)"
done done
fi fi
''; '';

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl { stdenv, fetchurl, makeDesktopItem
, ghostscript, atk, gtk2, glib, fontconfig, freetype , ghostscript, atk, gtk2, glib, fontconfig, freetype
, libgnomecanvas, libgnomeprint, libgnomeprintui , libgnomecanvas, libgnomeprint, libgnomeprintui
, pango, libX11, xproto, zlib, poppler , pango, libX11, xproto, zlib, poppler
@ -21,6 +21,32 @@ stdenv.mkDerivation rec {
NIX_LDFLAGS = [ "-lX11" "-lz" ]; NIX_LDFLAGS = [ "-lX11" "-lz" ];
desktopItem = makeDesktopItem {
name = name;
exec = "xournal";
icon = "xournal";
desktopName = "Xournal";
comment = meta.description;
categories = "Office;Graphics;";
mimeType = "application/pdf;application/x-xoj";
genericName = "PDF Editor";
};
postInstall=''
mkdir --parents $out/share/mime/packages
cat << EOF > $out/share/mime/packages/xournal.xml
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="application/x-xoj">
<comment>Xournal Document</comment>
<glob pattern="*.xoj"/>
</mime-type>
</mime-info>
EOF
cp --recursive ${desktopItem}/share/applications $out/share
mkdir --parents $out/share/icons
cp $out/share/xournal/pixmaps/xournal.png $out/share/icons
'';
meta = { meta = {
homepage = http://xournal.sourceforge.net/; homepage = http://xournal.sourceforge.net/;
description = "Note-taking application (supposes stylus)"; description = "Note-taking application (supposes stylus)";

View File

@ -1,21 +1,21 @@
{ stdenv, fetchFromGitHub, cmake, makeWrapper, pkgconfig, vala_0_26, gtk3, libgee { stdenv, fetchFromGitHub, cmake, makeWrapper, pkgconfig, vala, gtk3, libgee
, poppler, libpthreadstubs, gstreamer, gst-plugins-base, librsvg }: , poppler, libpthreadstubs, gstreamer, gst-plugins-base, librsvg }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "${product}-${version}"; name = "${product}-${version}";
product = "pdfpc"; product = "pdfpc";
version = "4.0.2"; version = "4.0.3";
src = fetchFromGitHub { src = fetchFromGitHub {
repo = "pdfpc"; repo = "pdfpc";
owner = "pdfpc"; owner = "pdfpc";
rev = "v${version}"; rev = "v${version}";
sha256 = "0151i9msagcqcfaddgd1vkmman0qgqy6s3714sqas568r4r9ngdk"; sha256 = "1fcwxvik3nnn0g37xvb30vxaxwrd881fw07fyfb9c6ami9bnva3p";
}; };
nativeBuildInputs = [ cmake pkgconfig ]; nativeBuildInputs = [ cmake pkgconfig ];
buildInputs = [ gstreamer gst-plugins-base vala_0_26 gtk3 libgee poppler buildInputs = [ gstreamer gst-plugins-base vala gtk3 libgee poppler
libpthreadstubs makeWrapper librsvg ]; libpthreadstubs makeWrapper librsvg ];
postInstall = '' postInstall = ''
wrapProgram $out/bin/pdfpc \ wrapProgram $out/bin/pdfpc \

View File

@ -1,28 +1,30 @@
{ stdenv, fetchurl, docbook_xsl, dbus_libs, dbus_glib, expat, gettext { stdenv, fetchurl, docbook_xsl, dbus_libs, dbus_glib, expat, gettext
, gsettings_desktop_schemas, gdk_pixbuf, gtk2, gtk3, hicolor_icon_theme , gsettings_desktop_schemas, gdk_pixbuf, gtk2, gtk3, hicolor_icon_theme
, imagemagick, itstool, librsvg, libtool, libxslt, lockfile, makeWrapper , imagemagick, itstool, librsvg, libtool, libxslt, lockfile, makeWrapper
, pkgconfig, python, pythonPackages, vte }: , pkgconfig, python, pythonPackages, vte
, wrapGAppsHook}:
# TODO: Still getting following warning. # TODO: Still getting following warning.
# WARNING **: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files # WARNING **: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files
# Seems related to this: # Seems related to this:
# https://forums.gentoo.org/viewtopic-t-947210-start-0.html # https://forums.gentoo.org/viewtopic-t-947210-start-0.html
let version = "2.9.4"; let version = "3.3.2";
in stdenv.mkDerivation rec { in stdenv.mkDerivation rec {
name = "roxterm-${version}"; name = "roxterm-${version}";
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/roxterm/${name}.tar.bz2"; url = "mirror://sourceforge/roxterm/${name}.tar.xz";
sha256 = "0djfiwfmnqqp6930kswzr2rss0mh40vglcdybwpxrijcw4n8j21x"; sha256 = "0vjh7k4jm4bd01j88w9bmvq27zqsajjzy131fpi81zkii5lisl1k";
}; };
nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
buildInputs = buildInputs =
[ docbook_xsl expat imagemagick itstool librsvg libtool libxslt [ docbook_xsl expat imagemagick itstool librsvg libtool libxslt
makeWrapper pkgconfig python pythonPackages.lockfile ]; makeWrapper python pythonPackages.lockfile dbus_libs dbus_glib
gdk_pixbuf gsettings_desktop_schemas gtk3
propagatedBuildInputs = hicolor_icon_theme vte ];
[ dbus_libs dbus_glib gdk_pixbuf gettext gsettings_desktop_schemas gtk2 gtk3 hicolor_icon_theme vte ];
NIX_CFLAGS_COMPILE = [ "-I${dbus_glib.dev}/include/dbus-1.0" NIX_CFLAGS_COMPILE = [ "-I${dbus_glib.dev}/include/dbus-1.0"
"-I${dbus_libs.dev}/include/dbus-1.0" "-I${dbus_libs.dev}/include/dbus-1.0"
@ -37,16 +39,12 @@ in stdenv.mkDerivation rec {
# Fix up the LD_LIBRARY_PATH so that expat is on it # Fix up the LD_LIBRARY_PATH so that expat is on it
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${expat.out}/lib" export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${expat.out}/lib"
python mscript.py configure --prefix="$out" python mscript.py configure --prefix="$out" --disable-nls --disable-translations
python mscript.py build python mscript.py build
''; '';
installPhase = '' installPhase = ''
python mscript.py install python mscript.py install
wrapProgram "$out/bin/roxterm" \
--prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \
--set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE"
''; '';
meta = with stdenv.lib; { meta = with stdenv.lib; {
@ -54,10 +52,10 @@ in stdenv.mkDerivation rec {
license = licenses.gpl3; license = licenses.gpl3;
description = "Tabbed, VTE-based terminal emulator"; description = "Tabbed, VTE-based terminal emulator";
longDescription = '' longDescription = ''
Tabbed, VTE-based terminal emulator. Similar to gnome-terminal without the dependencies on Gnome. Tabbed, VTE-based terminal emulator. Similar to gnome-terminal without
the dependencies on Gnome.
''; '';
maintainers = with maintainers; [ cdepillabout ]; maintainers = with maintainers; [ cdepillabout ];
platforms = platforms.linux; platforms = platforms.linux;
broken = true; # https://github.com/NixOS/nixpkgs/issues/19579
}; };
} }

View File

@ -0,0 +1,63 @@
{ fetchurl, stdenv, lib, zlib, glib, alsaLib, dbus, gtk2, atk, pango, freetype, fontconfig
, libgnome_keyring3, gdk_pixbuf, gvfs, cairo, cups, expat, libgpgerror, nspr
, nss, xorg, libcap, systemd, libnotify ,libXScrnSaver, gnome3 }:
stdenv.mkDerivation rec {
name = "simplenote-${pkgver}";
pkgver = "1.0.6";
src = fetchurl {
url = "https://github.com/Automattic/simplenote-electron/releases/download/v${pkgver}/Simplenote-linux-x64.${pkgver}.tar.gz";
sha256 = "18wj880iw92yd57w781dqaj7iv9j3bqhyh2cbikqrl4m5w9xkla8";
};
buildCommand = let
packages = [
stdenv.cc.cc zlib glib dbus gtk2 atk pango freetype libgnome_keyring3
fontconfig gdk_pixbuf cairo cups expat libgpgerror alsaLib nspr nss
xorg.libXrender xorg.libX11 xorg.libXext xorg.libXdamage xorg.libXtst
xorg.libXcomposite xorg.libXi xorg.libXfixes xorg.libXrandr
xorg.libXcursor libcap systemd libnotify libXScrnSaver gnome3.gconf
];
libPathNative = lib.makeLibraryPath packages;
libPath64 = lib.makeSearchPathOutput "lib" "lib64" packages;
libPath = "${libPathNative}:${libPath64}";
in ''
mkdir -p $out/share/
mkdir -p $out/bin
tar xvzf $src -C $out/share/
mv $out/share/Simplenote-linux-x64 $out/share/simplenote
mv $out/share/simplenote/Simplenote $out/share/simplenote/simplenote
mkdir -p $out/share/applications
cat > $out/share/applications/simplenote.desktop << EOF
[Desktop Entry]
Name=Simplenote
Comment=Simplenote for Linux
Exec=$out/bin/simplenote
Icon=$out/share/simplenote/Simplenote.png
Type=Application
StartupNotify=true
Categories=Development;
EOF
fixupPhase
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
--set-rpath "${libPath}:$out/share/simplenote" \
$out/share/simplenote/simplenote
ln -s $out/share/simplenote/simplenote $out/bin/simplenote
'';
meta = with stdenv.lib; {
description = "The simplest way to keep notes";
homepage = https://github.com/Automattic/simplenote-electron;
license = licenses.lgpl2;
platforms = [ "x86_64-linux" ];
};
}

View File

@ -6,11 +6,11 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "tilda-${version}"; name = "tilda-${version}";
version = "1.2.4"; version = "1.3.3";
src = fetchurl { src = fetchurl {
url = "https://github.com/lanoxx/tilda/archive/${name}.tar.gz"; url = "https://github.com/lanoxx/tilda/archive/${name}.tar.gz";
sha256 = "1f7b52c5d8cfd9038ad2e41fc633fce935f420fa657ed15e3942722c8570751e"; sha256 = "1cc4qbg1m3i04lj5p6i6xbd0zvy1320pxdgmjhz5p3j95ibsbfki";
}; };
buildInputs = [ pkgconfig autoreconfHook gettext confuse vte gtk makeWrapper ]; buildInputs = [ pkgconfig autoreconfHook gettext confuse vte gtk makeWrapper ];

View File

@ -3,11 +3,11 @@
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "xterm-325"; name = "xterm-327";
src = fetchurl { src = fetchurl {
url = "ftp://invisible-island.net/xterm/${name}.tgz"; url = "ftp://invisible-island.net/xterm/${name}.tgz";
sha256 = "06sz66z4hvjjkvm3r5a5z442iis8lz8yjfzc629pwhj01ixb0c9v"; sha256 = "02qmfr1y24y5vq6kddksw84b8gxalc96n9wwaj7i8hmk6mn2zyv6";
}; };
buildInputs = buildInputs =

View File

@ -94,12 +94,12 @@ let
flash = stdenv.mkDerivation rec { flash = stdenv.mkDerivation rec {
name = "flashplayer-ppapi-${version}"; name = "flashplayer-ppapi-${version}";
version = "23.0.0.205"; version = "23.0.0.207";
src = fetchzip { src = fetchzip {
url = "https://fpdownload.adobe.com/pub/flashplayer/pdc/" url = "https://fpdownload.adobe.com/pub/flashplayer/pdc/"
+ "${version}/flash_player_ppapi_linux.x86_64.tar.gz"; + "${version}/flash_player_ppapi_linux.x86_64.tar.gz";
sha256 = "0gj5d8475qcplm3iqs3hkq0i6qkmbhci1zp3ljnhafc6xz0avyhj"; sha256 = "1spwv06rynaw45pdll6hzsq6zbz1q10bf7dx4zz25gh8x3sl9l6a";
stripRoot = false; stripRoot = false;
}; };

View File

@ -1,5 +1,5 @@
{ stdenv, fetchurl, perl, ncurses, xlibsWrapper, bzip2, zlib, openssl { stdenv, fetchurl, perl, ncurses, xlibsWrapper, bzip2, zlib, openssl
, spidermonkey, gpm , spidermonkey_1_8_5, gpm
, enableGuile ? false, guile ? null # Incompatible licenses, LGPLv3 - GPLv2 , enableGuile ? false, guile ? null # Incompatible licenses, LGPLv3 - GPLv2
, enablePython ? false, python ? null , enablePython ? false, python ? null
}: }:
@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
patches = [ ./gc-init.patch ]; patches = [ ./gc-init.patch ];
buildInputs = [ perl ncurses xlibsWrapper bzip2 zlib openssl spidermonkey gpm ] buildInputs = [ perl ncurses xlibsWrapper bzip2 zlib openssl spidermonkey_1_8_5 gpm ]
++ stdenv.lib.optional enableGuile guile ++ stdenv.lib.optional enableGuile guile
++ stdenv.lib.optional enablePython python; ++ stdenv.lib.optional enablePython python;
@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
'' ''
--enable-finger --enable-html-highlight --enable-finger --enable-html-highlight
--with-perl --enable-gopher --enable-cgi --enable-bittorrent --with-perl --enable-gopher --enable-cgi --enable-bittorrent
--with-spidermonkey=${spidermonkey} --with-spidermonkey=${spidermonkey_1_8_5}
--enable-nntp --with-openssl=${openssl.dev} --enable-nntp --with-openssl=${openssl.dev}
'' + stdenv.lib.optionalString enableGuile " --with-guile" '' + stdenv.lib.optionalString enableGuile " --with-guile"
+ stdenv.lib.optionalString enablePython " --with-python"; + stdenv.lib.optionalString enablePython " --with-python";

View File

@ -70,6 +70,7 @@ common = { pname, version, sha512 }: stdenv.mkDerivation rec {
"--enable-jemalloc" "--enable-jemalloc"
"--disable-gconf" "--disable-gconf"
"--enable-default-toolkit=cairo-gtk2" "--enable-default-toolkit=cairo-gtk2"
"--with-google-api-keyfile=ga"
] ]
++ lib.optional enableGTK3 "--enable-default-toolkit=cairo-gtk3" ++ lib.optional enableGTK3 "--enable-default-toolkit=cairo-gtk3"
++ (if debugBuild then [ "--enable-debug" "--enable-profiling" ] ++ (if debugBuild then [ "--enable-debug" "--enable-profiling" ]
@ -85,6 +86,11 @@ common = { pname, version, sha512 }: stdenv.mkDerivation rec {
configureScript="$(realpath ./configure)" configureScript="$(realpath ./configure)"
mkdir ../objdir mkdir ../objdir
cd ../objdir cd ../objdir
# Google API key used by Chromium and Firefox.
# Note: These are for NixOS/nixpkgs use ONLY. For your own distribution,
# please get your own set of keys.
echo "AIzaSyDGi15Zwl11UNe6Y-5XW_upsfyw31qwZPI" >ga
''; '';
preInstall = preInstall =

View File

@ -23,11 +23,11 @@
let let
# NOTE: When updating, please also update in current stable, # NOTE: When updating, please also update in current stable,
# as older versions stop working # as older versions stop working
version = "13.4.21"; version = "14.4.19";
sha256 = sha256 =
{ {
"x86_64-linux" = "0ckinjrnnijs2wx80c0bqdlcsw5zhx64rsh3bylcjfbpvyli96q4"; "x86_64-linux" = "06ln88dx6k1d2b2wwj66gj1gyy0s3xvs7m50v8i2ycdw3d9kimkw";
"i686-linux" = "08lhj4hlhvxm4zp9jai01f8cydfgfkl91l4ydd85yccl9ii4flh5"; "i686-linux" = "0mil1h86r8fmzxb6d7ycwz9yqkmj66k37zxxb2x8mw15l9qndrwf";
}."${stdenv.system}" or (throw "system ${stdenv.system} not supported"); }."${stdenv.system}" or (throw "system ${stdenv.system} not supported");
arch = arch =

View File

@ -1,21 +1,22 @@
{ stdenv, fetchurl, dbus, gnutls, wxGTK30, libidn, tinyxml, gettext { stdenv, fetchurl, dbus, gnutls, wxGTK30, libidn, tinyxml, gettext
, pkgconfig, xdg_utils, gtk2, sqlite, pugixml, libfilezilla, nettle }: , pkgconfig, xdg_utils, gtk2, sqlite, pugixml, libfilezilla, nettle }:
let version = "3.22.1"; in let version = "3.22.2.2"; in
stdenv.mkDerivation { stdenv.mkDerivation {
name = "filezilla-${version}"; name = "filezilla-${version}";
src = fetchurl { src = fetchurl {
url = "mirror://sourceforge/project/filezilla/FileZilla_Client/${version}/FileZilla_${version}_src.tar.bz2"; url = "mirror://sourceforge/project/filezilla/FileZilla_Client/${version}/FileZilla_${version}_src.tar.bz2";
sha256 = "0pr8wj2dk5s5xxrsl0pb8y1bna0k1s3c18dh056c6qp02gba1a1f"; sha256 = "1h02k13x88f04gkf433cxx1xvbr7kkl2aygb4i6581gzhzjifwdv";
}; };
configureFlags = [ configureFlags = [
"--disable-manualupdatecheck" "--disable-manualupdatecheck"
]; ];
nativeBuildInputs = [ pkgconfig ];
buildInputs = [ buildInputs = [
dbus gnutls wxGTK30 libidn tinyxml gettext pkgconfig xdg_utils gtk2 sqlite dbus gnutls wxGTK30 libidn tinyxml gettext xdg_utils gtk2 sqlite
pugixml libfilezilla nettle ]; pugixml libfilezilla nettle ];
meta = with stdenv.lib; { meta = with stdenv.lib; {

View File

@ -1,15 +1,15 @@
{stdenv, fetchurl, cmake, flex, bison, openssl, libpcap, perl, zlib, file, curl {stdenv, fetchurl, cmake, flex, bison, openssl, libpcap, perl, zlib, file, curl
, geoip, gperftools }: , geoip, gperftools, python }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "bro-2.4.1"; name = "bro-2.5";
src = fetchurl { src = fetchurl {
url = "http://www.bro.org/downloads/release/${name}.tar.gz"; url = "http://www.bro.org/downloads/${name}.tar.gz";
sha256 = "1xn8qwgnxihlr4lmg7kz2vqjk46aqgwc8878pbv30ih2lmrrdffq"; sha256 = "10603lwhwsmh08m5rgknbspbhd4lis71qv7z8ixacgv6sf8a40hm";
}; };
buildInputs = [ cmake flex bison openssl libpcap perl zlib file curl geoip gperftools ]; buildInputs = [ cmake flex bison openssl libpcap perl zlib file curl geoip gperftools python ];
enableParallelBuilding = true; enableParallelBuilding = true;

View File

@ -25,7 +25,7 @@ in stdenv.mkDerivation rec {
"16l9jma2hiwzl9l41yhrwribcgmxca271rq0cfbbm9701mmmciyy"; "16l9jma2hiwzl9l41yhrwribcgmxca271rq0cfbbm9701mmmciyy";
}; };
phases = [ "unpackPhase" "installPhase" ]; phases = [ "unpackPhase" "installPhase" "postFixup" ];
deps = with xorg; [ deps = with xorg; [
gtk2 atk glib pango gdk_pixbuf cairo freetype fontconfig dbus gtk2 atk glib pango gdk_pixbuf cairo freetype fontconfig dbus
@ -53,6 +53,10 @@ in stdenv.mkDerivation rec {
ln -s $out/share/franz/resources/app.asar.unpacked/assets/franz.png $out/share/pixmaps ln -s $out/share/franz/resources/app.asar.unpacked/assets/franz.png $out/share/pixmaps
''; '';
postFixup = ''
paxmark m $out/share/franz/Franz
'';
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "A free messaging app that combines chat & messaging services into one application"; description = "A free messaging app that combines chat & messaging services into one application";
homepage = http://meetfranz.com; homepage = http://meetfranz.com;

View File

@ -0,0 +1,33 @@
{stdenv, fetchFromGitHub, ocamlPackages, opam}:
assert stdenv.lib.versionAtLeast ocamlPackages.ocaml.version "4.02.2";
stdenv.mkDerivation rec {
version = "2016-11-18";
name = "jackline-${version}";
src = fetchFromGitHub {
owner = "hannesm";
repo = "jackline";
rev = "cab34acab004023911997ec9aee8b00a976af7e4";
sha256 = "0h7wdsic4v6ys130w61zvxm5s2vc7y574hn7zby12rq88lhhrjh7";
};
buildInputs = with ocamlPackages; [
ocaml ocamlbuild findlib topkg ppx_sexp_conv
erm_xmpp_0_3 tls nocrypto x509 ocaml_lwt otr astring
ptime notty sexplib_p4 hex uutf opam
];
buildPhase = with ocamlPackages;
"ocaml -I ${findlib}/lib/ocaml/${ocaml.version}/site-lib pkg/pkg.ml build --pinned true";
installPhase = "opam-installer --prefix=$out --script | sh";
meta = with stdenv.lib; {
homepage = https://github.com/hannesm/jackline;
description = "Terminal-based XMPP client in OCaml";
license = licenses.bsd2;
maintainers = with maintainers; [ sternenseemann ];
};
}

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "pidgin-skypeweb-${version}"; name = "pidgin-skypeweb-${version}";
version = "1.2.1"; version = "1.2.2";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "EionRobb"; owner = "EionRobb";
repo = "skype4pidgin"; repo = "skype4pidgin";
rev = "${version}"; rev = "${version}";
sha256 = "0qmqf1r9kc7r6rgzz0byyq7yf5spsl2iima0cvxafs43gn4hnc2z"; sha256 = "1lxpz316jmns6i143v4j6sd6k0a4a54alw08rvwjckf2rig57lj2";
}; };
sourceRoot = "skype4pidgin-${version}-src/skypeweb"; sourceRoot = "skype4pidgin-${version}-src/skypeweb";

View File

@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
installPhase = '' installPhase = ''
mkdir -p $out/lib/pidgin/ mkdir -p $out/lib/pidgin/
cp bin/*.so $out/lib/pidgin/ cp bin/*.so $out/lib/pidgin/ #*/
cp tg-server.tglpub $out/lib/pidgin/server.tglpub cp tg-server.tglpub $out/lib/pidgin/server.tglpub
mkdir -p $out/pixmaps/pidgin/protocols/{16,22,48} mkdir -p $out/pixmaps/pidgin/protocols/{16,22,48}
cp imgs/telegram16.png $out/pixmaps/pidgin/protocols/16 cp imgs/telegram16.png $out/pixmaps/pidgin/protocols/16
@ -29,11 +29,11 @@ stdenv.mkDerivation rec {
cp imgs/telegram48.png $out/pixmaps/pidgin/protocols/48 cp imgs/telegram48.png $out/pixmaps/pidgin/protocols/48
''; '';
meta = { meta = with stdenv.lib; {
homepage = https://github.com/majn/telegram-purple; homepage = https://github.com/majn/telegram-purple;
description = "Telegram for Pidgin / libpurple"; description = "Telegram for Pidgin / libpurple";
license = stdenv.lib.licenses.gpl2; license = licenses.gpl2;
maintainers = stdenv.lib.maintainers.jagajaga; maintainers = [ maintainers.jagajaga ];
platforms = stdenv.lib.platforms.linux; platforms = platforms.linux;
}; };
} }

View File

@ -6,7 +6,7 @@ let
bits = if stdenv.system == "x86_64-linux" then "x64" bits = if stdenv.system == "x86_64-linux" then "x64"
else "ia32"; else "ia32";
version = "0.4.4"; version = "0.4.5";
myIcon = fetchurl { myIcon = fetchurl {
url = "https://raw.githubusercontent.com/saenzramiro/rambox/9e4444e6297dd35743b79fe23f8d451a104028d5/resources/Icon.png"; url = "https://raw.githubusercontent.com/saenzramiro/rambox/9e4444e6297dd35743b79fe23f8d451a104028d5/resources/Icon.png";
@ -26,11 +26,11 @@ in stdenv.mkDerivation rec {
src = fetchurl { src = fetchurl {
url = "https://github.com/saenzramiro/rambox/releases/download/${version}/Rambox-${version}-${bits}.tar.gz"; url = "https://github.com/saenzramiro/rambox/releases/download/${version}/Rambox-${version}-${bits}.tar.gz";
sha256 = if bits == "x64" then sha256 = if bits == "x64" then
"05xwabwij7fyifrypahcplymz46k01rzrwgp5gn79hh023w259i0" else "0z2rmfiwhb6v2hkzgrbkd4nhdvm1rssh0mbfbdmdwxq91qzp6558" else
"16j17rc8mld96mq1rxnwmxwfa2q5b44s40c56mwh34plqyn546l2"; "0gq0ywk1jr0apl39dnm0vwdwg1inr7fari3cmfz3fvaym7gc8fki";
}; };
phases = [ "unpackPhase" "installPhase" ]; phases = [ "unpackPhase" "installPhase" "postFixup" ];
deps = with xorg; [ deps = with xorg; [
gtk2 atk glib pango gdk_pixbuf cairo freetype fontconfig dbus gtk2 atk glib pango gdk_pixbuf cairo freetype fontconfig dbus
@ -53,6 +53,10 @@ in stdenv.mkDerivation rec {
ln -s ${desktopItem}/share/applications/* $out/share/applications ln -s ${desktopItem}/share/applications/* $out/share/applications
''; '';
postFixup = ''
paxmark m $out/share/rambox/Rambox
'';
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Free and Open Source messaging and emailing app that combines common web applications into one"; description = "Free and Open Source messaging and emailing app that combines common web applications into one";
homepage = http://rambox.pro; homepage = http://rambox.pro;

View File

@ -1,7 +1,7 @@
{ stdenv, fetchurl, makeWrapper }: { stdenv, fetchurl, makeWrapper }:
let let
version = "3.0.12.4"; version = "3.0.13.5";
arch = if stdenv.is64bit then "amd64" else "x86"; arch = if stdenv.is64bit then "amd64" else "x86";
libDir = if stdenv.is64bit then "lib64" else "lib"; libDir = if stdenv.is64bit then "lib64" else "lib";
in in
@ -15,8 +15,8 @@ stdenv.mkDerivation {
"http://teamspeak.gameserver.gamed.de/ts3/releases/${version}/teamspeak3-server_linux_${arch}-${version}.tar.bz2" "http://teamspeak.gameserver.gamed.de/ts3/releases/${version}/teamspeak3-server_linux_${arch}-${version}.tar.bz2"
]; ];
sha256 = if stdenv.is64bit sha256 = if stdenv.is64bit
then "1n8vgbgnfbllfvsl82ai6smv6hl32a3nd071j2dp79agjz4fic3b" then "bd5933dd17d17f93d56f69332927cd1ce6f34439ec464a0ce2ca73102d85080c"
else "19vkcgb0h71amixry8r72qqwaxwplzyz9nrxg5bdjjg8r2mkh4bc"; else "848e1a44af3c2b00840a280ba558a13407f4844432ddfd262ee8a7800365386b";
}; };
buildInputs = [ makeWrapper ]; buildInputs = [ makeWrapper ];
@ -60,7 +60,7 @@ stdenv.mkDerivation {
meta = { meta = {
description = "TeamSpeak voice communication server"; description = "TeamSpeak voice communication server";
homepage = http://teamspeak.com/; homepage = https://teamspeak.com/;
license = stdenv.lib.licenses.unfreeRedistributable; license = stdenv.lib.licenses.unfreeRedistributable;
platforms = stdenv.lib.platforms.linux; platforms = stdenv.lib.platforms.linux;
maintainers = [ stdenv.lib.maintainers.arobyn ]; maintainers = [ stdenv.lib.maintainers.arobyn ];

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl, pidgin, telepathy_glib, glib, dbus_glib, pkgconfig, libxslt }: { stdenv, fetchurl, fetchpatch, pidgin, telepathy_glib, glib, dbus_glib, pkgconfig, libxslt }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "telepathy-haze"; pname = "telepathy-haze";
@ -13,6 +13,15 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ pkgconfig libxslt ]; nativeBuildInputs = [ pkgconfig libxslt ];
patches = [
# Patch from Gentoo that helps telepathy-haze build with more
# recent versions of pidgin.
(fetchpatch {
url = https://raw.githubusercontent.com/gentoo/gentoo/master/net-voip/telepathy-haze/files/telepathy-haze-0.8.0-pidgin-2.10.12-compat.patch;
sha256 = "0fa1p4n1559qd096w7ya4kvfnc1c98ykarkxzlpkwvzbczwzng3c";
})
];
meta = { meta = {
description = "A Telepathy connection manager based on libpurple"; description = "A Telepathy connection manager based on libpurple";
platforms = stdenv.lib.platforms.gnu; # Random choice platforms = stdenv.lib.platforms.gnu; # Random choice

View File

@ -4,123 +4,123 @@
# ruby generate_sources.rb 45.1.1 > sources.nix # ruby generate_sources.rb 45.1.1 > sources.nix
{ {
version = "45.4.0"; version = "45.5.0";
sources = [ sources = [
{ locale = "ar"; arch = "linux-i686"; sha512 = "8db134f67ea813c12d97b0a44fb6169f42b45b8f9e7e151cb6389ee6628e301c95b5ca7492ec5c803cd44225b1929539e81c4df840bb533ef12740c4b9b82f28"; } { locale = "ar"; arch = "linux-i686"; sha512 = "bd6c633bd3ac5fc26f98ba1183f51b4380826d40762b1a28aa2fb6cda2ae776e3dc7909024d7f66b771323d489510c5237977e1380f33e5ac6ece933336e75c5"; }
{ locale = "ar"; arch = "linux-x86_64"; sha512 = "b3da97b15b71aa536d0acdf08e9e980ddd1917113579db8c9058068bd104b3029c721bf1bac1c9ed56c39540bdb7fd667605259b1c2a8d910401259d2cb0e3e5"; } { locale = "ar"; arch = "linux-x86_64"; sha512 = "bfe82d658ce9950bde473836f2cfcc1319d22939a5fad3804808258faee4e96b0cb208ba386c102e41633137c19d071da3868868ccda8155d2ee02d71c05b132"; }
{ locale = "ast"; arch = "linux-i686"; sha512 = "2e83efd53b191d7bee999fa45f09583c818377443b9bbf3203b7f11a31b67d371e34980267cc509c47a57b4a6540b1f7f4293252f02138b24869c29bfc64423d"; } { locale = "ast"; arch = "linux-i686"; sha512 = "99870cc67812e321dd2338f68612b63a31803065021fcec02b205f45f9cf263ef535421c249ba4a6a7205979679436a746300902b5c716ec333de0b9769d4f47"; }
{ locale = "ast"; arch = "linux-x86_64"; sha512 = "9d9ef1a1bcbb32cf04e26ad499bf1f8122b3b1a964e6c4eb6726d2271fba28c78f0d7bc60641d8cc6c2a0e1153a25483a6f8eb12568128045f7d6cf5ed6746d3"; } { locale = "ast"; arch = "linux-x86_64"; sha512 = "911ea7a1852bd61695058f68ae2ad991fd10107d876cf95b95f7df4b42ffe45a787aeee9241e1824281dbd3b1e32d8d815369f674bcaa21ad9268fc2f104a646"; }
{ locale = "be"; arch = "linux-i686"; sha512 = "21cf44b0eb90d3662ef690c56a393bd4453809631209c8953156a1b59b6011fce407c4b3d54d956e5c376f36dac663cd874b4c917f41b9132e445968fd7bc439"; } { locale = "be"; arch = "linux-i686"; sha512 = "3faa1393235b24a73e04be481601552acd28620807a64129061a4fee18d42022e7765a510b61d17193066feeb99a8f3ca2fac405056f66a401c35f23791c8f83"; }
{ locale = "be"; arch = "linux-x86_64"; sha512 = "ce33a0750430a462aa07ad8995656dbf2689077746de8ee42ec361c544ccd53e182192f95f6ac755ee739035b5f2a2c8233ac1c37c0d156c4a2aabb39806039d"; } { locale = "be"; arch = "linux-x86_64"; sha512 = "d2118deecf5ff12d6e9b2807ff3129bd33e3d8d24ef0db067b031894c266636c103efe8e1d0103f41eaf2e1ae6edfa51bbac11973c082a1ad2339c992e7fd856"; }
{ locale = "bg"; arch = "linux-i686"; sha512 = "fe763ecd1a572ed6e3864aa9d934b821fae2f91f02d959e22e96314e26271a9f5695930a0388fadd6bd34e0f7ab6938a48bfd346901e139128e0e24483c36d90"; } { locale = "bg"; arch = "linux-i686"; sha512 = "2123fc69d26ed28c6f4a2a8e6ffa3294e594e87608f9c7da3f4a811e39e58e59e1a50af616a6df810f3c8e0872eabcfc4708c4590530d780a52a2200e4a321c3"; }
{ locale = "bg"; arch = "linux-x86_64"; sha512 = "935bc0f19a45314341f76cb53dc4c617a5104a0a17c56f60679974eaec9fc8d9ee609d543a5a310bf4d1e8db6cdc54b660db5b2b85af7838dc5711e10ecff77c"; } { locale = "bg"; arch = "linux-x86_64"; sha512 = "bf11f9106525f5e02ee26b89560136a07e142aced7abb3b7d9d7578e413ce24abc20995afe054ce32d3d9b6e4fb68a254bbf6a268658c908b33e2da26efdec03"; }
{ locale = "bn-BD"; arch = "linux-i686"; sha512 = "d9bdc81c10d1ef370275d3f152669ca50a7fb2b126cdd396d63aa8b7c97a46d815b1fa77b8135887b0f6c825ba87617c81e1f3698e455d75b2bc9862e47fe761"; } { locale = "bn-BD"; arch = "linux-i686"; sha512 = "1823ada3babc79e5d38f1012723c3c7eab2f885a7159d3b6b9d54573fb8c8d849799aebf60a66914cb545095894402cae6acf4b49e99d77e3b1a49b5418c04c7"; }
{ locale = "bn-BD"; arch = "linux-x86_64"; sha512 = "0b420e4168df1a0b7ff8e4983892de9b08cf644a6e7b28c090477b3efe557a7a34a17ac90a722b497298759d98c1a3346ff84789598359e4052a35b44b3bbba2"; } { locale = "bn-BD"; arch = "linux-x86_64"; sha512 = "737d2557dade96501f4442001a803eafb5c872967850cc875b902acb17b1133fdf0d0248271ff225babb29b937d744ed3294e4e73e82fef96d07a63fab80ba92"; }
{ locale = "br"; arch = "linux-i686"; sha512 = "5e0726512ff28ee00498a4a8493d4f00e8375950fe8489c3e5906b37bf057c76eca66ccea8aaf7e165ca56b02ed14041efcab8b75170ae4daa2b2df2bf2ddc8f"; } { locale = "br"; arch = "linux-i686"; sha512 = "8e4377c42db9535a708a18d0b4d251d0bc14da24bf8cbf5fcb318d77f4a90e26f535f46642c9b940b3ee8887fdfeb218aaa9f846dd3b9cf89ce9d4e6035518af"; }
{ locale = "br"; arch = "linux-x86_64"; sha512 = "1240f62d8a0530ead4b19983a36bdd894b5f812c82b68c49a4f7d9a961e0ff2542244ef405e03bb281ec65f070e815246487347a99bec76dd3509ec4512c1d47"; } { locale = "br"; arch = "linux-x86_64"; sha512 = "4720d43ca4bdb2d809b4ed36352c03f05c823485951aee8943c24952aa493ed570c4eaecd83920c6ebc112d71e6afddb7b2851ee5a72faf3b4536fd23b35678e"; }
{ locale = "ca"; arch = "linux-i686"; sha512 = "ce79eebfe0a93a9e15237317fa3dcca6fd6f20c90adf431366e5d30ce026da0f4af4e1be0745cfa6620b2a75838fbed93a85ed0695c486eb46b58cfb3cea3571"; } { locale = "ca"; arch = "linux-i686"; sha512 = "94132e06f04bdd7928090944d3ae65440e15d15ec1f690d157809d5c524b071ea3c0f3f12b6b6987becdbcb33324d7471fd23feffd3f4f136e9f485b5dfc964d"; }
{ locale = "ca"; arch = "linux-x86_64"; sha512 = "f290ac184b7086349a173b1597341731b6c696c8806b3b5adb8e7f0121f298ae9971f8f96981662bac72079f03d7d2ce17f0c385662d06657a1519d7bf32ef64"; } { locale = "ca"; arch = "linux-x86_64"; sha512 = "84e4e65bdab737a8f5663dbcc1116b55a8ef88d9401f30a6a8acbff156913aade12d7b0aa61d9678811032b2e3a905d50ecaf0c9a9653500034e2f90f8ccc510"; }
{ locale = "cs"; arch = "linux-i686"; sha512 = "a06b8a0db00b35ba16541a72623fc764c87c45e15e69079b757449e9c67988764f65bf6ae214ac4a0c0c541549fb6fb48bd1dbb2efe02541e3bda12938e2d787"; } { locale = "cs"; arch = "linux-i686"; sha512 = "a51b94013fe020edc5b3f75f950fd6bb626c8ad18c73e8884ced1d74feaa97d899482e213639bb26496cada97cfbf4024380c49a45547b9e65c033f8ec09c2f2"; }
{ locale = "cs"; arch = "linux-x86_64"; sha512 = "b96dca42026adb793ab5d37544d42ff8d5668adbff6a94f6c37a33ea63eb87622a7eeee8c02976b16c1d8c38b3348387aa46daa2bf5ccfd66f2a176ba4c113ff"; } { locale = "cs"; arch = "linux-x86_64"; sha512 = "50214c46072d17c30f19f0ce8a15a68a20839b5f985ce3a4c995c9739fc1290ca2d40601b7349c2af2214aef3207fcfda2a9115dfcef9ee1b005523b23a22317"; }
{ locale = "cy"; arch = "linux-i686"; sha512 = "dee0395f80b3e0db7b6cedf3d7e22b574f3f2734da518db684ab8ddfb502a127d2e0c75849819638ea61fd8604b84f8b1118c036d8ffd5f444ebd8adce19fa2e"; } { locale = "cy"; arch = "linux-i686"; sha512 = "a528980e1ca863c47d8b8a8e5b5891916d3de78bd20c1236b9d1954d0f057fb2c247b303eeb8643b6be0fac46a1c665da487c9a5b57f974066a5e3007df92123"; }
{ locale = "cy"; arch = "linux-x86_64"; sha512 = "8162ba8abda1906ce0fa78455faf823ce4bf6eaab9ecafa50b5669f2485861f59fe2be3820d75d7f168432ede5e9ced170928e883ebd06f8ab3145065f31e610"; } { locale = "cy"; arch = "linux-x86_64"; sha512 = "fb3b1f14d55d32afcd22f3fa57736fcd820dbf06e6a92b72b8b1ca2f33df9156a0ffd8d0ada11bc86e11359add9d5c225aa07f4b1321464486cd75ca276594dd"; }
{ locale = "da"; arch = "linux-i686"; sha512 = "f5bee461d1e0ba0ffc1de1fee05d41d0aa9db904061a7e4947d2a22ce8e3eb9ab40e15ace81a9cb248f72b5c08b699b39b46031f5673045eefe2e3346e7ae18a"; } { locale = "da"; arch = "linux-i686"; sha512 = "1519def46f7b154a517344fff1ec076b5288cde722aeffa683dc3f990434fab4558b63d8062306c5a68d1efd3e30c983f3deced50043fac24c256f7b58542498"; }
{ locale = "da"; arch = "linux-x86_64"; sha512 = "dab187762c44a7092136d5b12be43bb3675c37dbaa1ffb36171e9cc76ffd94fd0f80872008bd686515f0a84c3adc9c36d5eff9240e871dff457145bc21981777"; } { locale = "da"; arch = "linux-x86_64"; sha512 = "c5c0e24a0359a0ab178c369d3fcc7bfdf15411088033646d4e699f6e2e3ca8bc8a4719f8c214442661dcdc34e5e1f577dddbda40363cb9824fc9e378ff2444e6"; }
{ locale = "de"; arch = "linux-i686"; sha512 = "35994979446f4bcf5a6b79875e84999188d8ee58143b741e583302b29c0619566b5d4d65e640156168974e4c59c7d454ffeac47a8aaf35c344bcf2ec44520334"; } { locale = "de"; arch = "linux-i686"; sha512 = "83f7bc92338a30ed183dc9ee67d94e02dd8c659b8a711adad023f79a6253530cb6f530a4f31ad90796cb78566f2e280cf4ee19060b59323c22ed9bc678bee85f"; }
{ locale = "de"; arch = "linux-x86_64"; sha512 = "ae7169f84c945cd7886ef0ee84a1e57cb3017ad89b991c0f8dfb36d5537c2d9253345e111916a234c228a99e153c9d8c2f5bbb61e3d4d5fcbe95f507d863b735"; } { locale = "de"; arch = "linux-x86_64"; sha512 = "6163afd45c2730e8970eddd8f5c159d4a0b4c48684fd6900a0b61eff1ba683a320a6ead6cd0052f0b9cb04f7a54f8e6b633c2bf6a594ed9c94afd7fa742e9061"; }
{ locale = "dsb"; arch = "linux-i686"; sha512 = "1b10d6c4da26452c89089c2938db3559cc46c098baf917ebbcfc1d107bd9591630749aeae87a5b9e8819ebb5e4ad2b7d5321531bbdc3045df604e3929d2d6d93"; } { locale = "dsb"; arch = "linux-i686"; sha512 = "9772c7bbcb2ffd475aba6c00dd527defcc7d2618e6537029abb49a47038c0c16b32f1c35ca4acad2ec53a7e5265598b0a32bad615281cc96afec819eaac32d9c"; }
{ locale = "dsb"; arch = "linux-x86_64"; sha512 = "c6195bdf00e05921a19eb37a74c34794cb08d8b8cd43609eed9f64bbe89788d9c87a45df449cc400e6cee31b7ac6f02ce57083581c85885acd620931c657a833"; } { locale = "dsb"; arch = "linux-x86_64"; sha512 = "99a29d265454eeeac1f80e91913fdf4c6ec850532dea4a3891d0c0ab0a68e5391b9fb42640269c95214131c63e37e4ff7a2b6ea93c609e7b1ea02a04cabb0749"; }
{ locale = "el"; arch = "linux-i686"; sha512 = "e7d7f38fecea77d93bb99656a6dd566c6f396e108910152917cd1c908f09d1f276385ed771d5500feac572356e688e43ab3a91651d64bd7d522db9daaa4f32ef"; } { locale = "el"; arch = "linux-i686"; sha512 = "b6878a4ef1b32ac0390feffe6da0dc2c5c88e0bb6c88505e653a630eaa47432be1bd2903d97bed855c41dbbd5f5babf7b0b747b8afdc0675ed670c6bf5a69649"; }
{ locale = "el"; arch = "linux-x86_64"; sha512 = "bec617a64ce06f7aacfd936cb85f29684d1afc4246c05f1de6bf1e11819a44eec0e395a446e64676fe6453ce41f173f938a845fb50a625e3f5bb325098e09d11"; } { locale = "el"; arch = "linux-x86_64"; sha512 = "a11f653ef20c76187c9a794b70d876f9b2244c5bf9a10a9f7b41969bf35d36b1d75b319bab6cb9b29616546d68be4b587c47e9f54e8cb93f861f1bbfb9c2c1bd"; }
{ locale = "en-GB"; arch = "linux-i686"; sha512 = "c06fcb56eafbe894e15a0380f49ce5455c95b2b6c9520ef3b15f699778a575e5c643db5797e72441a68e063bce0bd4c0003cd0b58c78c7d1a744223598ab3549"; } { locale = "en-GB"; arch = "linux-i686"; sha512 = "88f1754d40cabbd473dcd5a24a7a91f7bd625b83b91223eafe78271409720ac9d4cfcf32711f36f72cb8b3269275d950ec55d2f11377880b8fddedd2cb04348b"; }
{ locale = "en-GB"; arch = "linux-x86_64"; sha512 = "1b095d5e254c2eef894b9954f42031b6e7eedbf0c753ac3e9f7b51b152dfb9c21d90ace238fe5bd58c63292587e477d23121dd0f96f7489b7564ae1bca27eef7"; } { locale = "en-GB"; arch = "linux-x86_64"; sha512 = "b754899626a8bc0fa7e491e6d18b84e8900266cbd39ab619e8a9821825614a46c6bf42ea490e56a8d25b5467e5e9280936f5a5034e055bfe736140f4bb9c1ce3"; }
{ locale = "en-US"; arch = "linux-i686"; sha512 = "7561111abeda21de3c4c9f585528ea9fc76409b15c0679b22743180f3b987aefac19ff45a682519511e347b0881e0f924f4efe35a782ceb4da9c6af05132fb78"; } { locale = "en-US"; arch = "linux-i686"; sha512 = "a66a92dbc8c2093d7498934c5f8d5a0e68ec3649b74d60d98775e33832902796667f2c06b2001faf07a535de18b6a2cca6f61dac4f8e8173040cdc9eeebbac88"; }
{ locale = "en-US"; arch = "linux-x86_64"; sha512 = "2beacec69acea8bdc98b5a7df5111318c6b47bbe1bb4356d3f9a2ce3b783ce6fad01a3ef11658c9d24d89e5c3f3e5c71de6b6623e93187d1221c25d415dac3c4"; } { locale = "en-US"; arch = "linux-x86_64"; sha512 = "4d5c6ce9f3e2a6fa9c44d6b8bc2cc50a2c129037f9a16833cc767efa379c2c2db27b2576c7a8cf93e87646244839614577230161f1bc813755f8fc43ffbafc7b"; }
{ locale = "es-AR"; arch = "linux-i686"; sha512 = "c6d1fc35bb89ed23b5f4e3be2fa6c28c3e29a7e821be1ae79345bb26a6db1ecae67b27f7ac9d3bd5bd803b6c7613aba3f0ad35cb07b607c1030f84a365da2b2c"; } { locale = "es-AR"; arch = "linux-i686"; sha512 = "317865e753dcf03cbb0acaf67e0a34843e6f3264322e2fe63a1eec916bec07678026e6be4f7ce49626bef945a6f34125f28077ab367f954d11ba6f082014b4e5"; }
{ locale = "es-AR"; arch = "linux-x86_64"; sha512 = "e3c95879782c17963e9f17dfde11a416502bb89d5c712ae445bd476e1bc1fb76bb0716764150b2b1f92ab8487d736c39f29ceb023f226b92f8c07bfb7da8e76e"; } { locale = "es-AR"; arch = "linux-x86_64"; sha512 = "cfd16a5ec21a1ca13fb5e882a75a767da1387c5f4adbeb3a9f608f0035ba60003650e6d3be57b2af8efba2d0bb8ed94ac879ad5f5e2039fddc6d9228f8ae0336"; }
{ locale = "es-ES"; arch = "linux-i686"; sha512 = "3f8f3263650fd4722da121566cd9afe8e671005eafee26f550a940dd76b1ed02c3f34f32f886c2cb2e2b1ed029f9997f2686a2494f4b24b6f32a7bcb8226f6aa"; } { locale = "es-ES"; arch = "linux-i686"; sha512 = "7017c9da2dbeb468c2ff3ebba91c2e83a6a233940296fd5bb03b4d1e5531fae189240f630055ab2d6324a0dcece5d2e80d32d7d9ab17a81709985325d5fe505a"; }
{ locale = "es-ES"; arch = "linux-x86_64"; sha512 = "587ca874ed5e035291099db107cf29f19562c0adb785c33ad92bab9d5eac2f2615143b5587bf7da7df61c071995eaf7894e5733d2fb311ffa14671c14aed54d3"; } { locale = "es-ES"; arch = "linux-x86_64"; sha512 = "920dd641893de2e7b7692af104402e9898c3b8e3311960b5f3072cba07e0f8f918932be591cec92ca3a3aa9be6f17d605c55be5d2445864cc8ae025cef83dac2"; }
{ locale = "et"; arch = "linux-i686"; sha512 = "a08b99a3e444135d538f3b53669a2f4e900f86406e74076a2ca986c7d9bf55661aac248fa564eda3b6bd491cd284690da9c61a56a43f2884167998a10b666785"; } { locale = "et"; arch = "linux-i686"; sha512 = "0a24d1680b27a1e79985b9f124bc3742f2d4ecaaf2d4742db9ee1f9841d1d4b7d08ba60e71baf50ec6c593bd1a8f51d768a22b364e681b8c8a3651e37735f5f5"; }
{ locale = "et"; arch = "linux-x86_64"; sha512 = "97043053f1512e6ac7298208e219bd2cd8dd1abd403ecbae90e365aa69b098becdef3f6cec9998fc71b237d78e3b7693fa93cf9452317bf1f4793425f23c0b5d"; } { locale = "et"; arch = "linux-x86_64"; sha512 = "5c56cff2cd868985800c95eecffce5fc8d18def49b2c553b5c26decb364ce087d74220b2db78bb4c88c18a06eee4c5d0f3e49f17e54b67bce81083da465b53f7"; }
{ locale = "eu"; arch = "linux-i686"; sha512 = "2de3d5915801e62196339e6acaa7f601740212a59f4ec6c684cb40c830bc6fdab843b3497a168bc6b2889f80449900406c05cabb3ba656d7d6b0be5750a31aab"; } { locale = "eu"; arch = "linux-i686"; sha512 = "c903ccbcadb68d951442051e558ab657c337713207887c32383902cf82a32cfb04a60ce03a5cc02fc2cd9542ded108beb433eb32270fceb25e8dc29135d2f4ba"; }
{ locale = "eu"; arch = "linux-x86_64"; sha512 = "834f9e712183f14af927ccb719325dad1a7f778d7d3beeec87cbb559d039b8764efb9447b8a0e40eb0ad55c88b525e5bbc2e2f5729c11b173ef86f63e4f92974"; } { locale = "eu"; arch = "linux-x86_64"; sha512 = "9b782390d45dea01944c1ae29350cf01ee4bbab6ee94d00549aea195e4731b0c410b96f5101c44013352e8323f0baf27bd076a017456f6cc7a221c505fc7883f"; }
{ locale = "fi"; arch = "linux-i686"; sha512 = "b8b1c42b3ab0a365c9a478fea0e83ac49b709dd2d117c1d8ed6fd7946b5dd32a1d3907b653c5aa0fada4ba8cc365ee9fc723fbbed76219a7c5d4b70eb68dbf65"; } { locale = "fi"; arch = "linux-i686"; sha512 = "5b33f4d58604138ffc098e9f3e4284f11ec97e58d0586cfcfb89c0114c61b07c2e1ba0051c5751101838d3a1125fd0dd81ca818d59e967dcc7a6cb166c01b27e"; }
{ locale = "fi"; arch = "linux-x86_64"; sha512 = "64b5bc313fa64abc56961b0c6abdcc6fa72cd321f422857fece9bfb3673747d5992d96dc9d98a76c71148b6261ea9a750147c94f171c548170c0681d597d8402"; } { locale = "fi"; arch = "linux-x86_64"; sha512 = "41ffde0d385bb3f7d271b11e470614e63f3e25e718f5f0eaca383794543c45a067989f7e153c4d48ec59199d2209e1394f89a14f4b776a0a8d1dc58466f91a80"; }
{ locale = "fr"; arch = "linux-i686"; sha512 = "45e7a37ac6c18d31e834b88789d6039bed489bc1cb4601399b3cf76feef52c3c36249e297750d39e3e3071c2d90a1ff6f0bcfef8bec89997ac552cceff88e78f"; } { locale = "fr"; arch = "linux-i686"; sha512 = "2c1e6151f256b4e7b934830c84edd0faa942ad49ee7ee29b767bb75182f296a6a24bc5cd00e9649c78ec649c879fc4c0030d1a73a68b215e72132d0149361b89"; }
{ locale = "fr"; arch = "linux-x86_64"; sha512 = "02a31ae95b6a6dac76eabd8e1de27ff50f29725be221841a738f60e41306d39ea050b73f78105561344d042ed988955e1801b5379bcecadccc89481c3bfcc13e"; } { locale = "fr"; arch = "linux-x86_64"; sha512 = "ba12fc325112ac1076a9dbb56db5c9b7c03ba67e196d90529cabc3499ea5f479c5ad4cf3360bc891dad8c76a9cf846e1bc99f775d7ad83c45215261731530e13"; }
{ locale = "fy-NL"; arch = "linux-i686"; sha512 = "bc14d4d16f0b196eaf92d551df6b565bfdf56806dc97714e97db7fd201c6e4e80df0485f77ff4bc5218b8c2f96a01a39f87c6c3e156c5c0cd72a8b932248370e"; } { locale = "fy-NL"; arch = "linux-i686"; sha512 = "0588462a5b0777f77dfde87be365beb5864e4a89b11cb869b18b47d2a600fb25287ac01a9e0b74156c0d35cf9e05e14815b3395a9fcb19030300ec74c3697931"; }
{ locale = "fy-NL"; arch = "linux-x86_64"; sha512 = "025411d23fae36123a86b72818b486412aad0f532631e4c48da5dea9b41d7b2875aba463a4a721e422cc4b141c8cce155dab01fd7056dfbadd435cd3e3061f08"; } { locale = "fy-NL"; arch = "linux-x86_64"; sha512 = "2333728d503d8d171009258f6b59f41c20175e3ffde9ab65da3199825901e1c10adbab7d83eed5485608203d8e985ba9fae392971a11070b9fa3ab8a257cc28c"; }
{ locale = "ga-IE"; arch = "linux-i686"; sha512 = "56d20e9bd013dea41f8686f7ab4da48b1c96e0d93c7639e990daf174cf7c9313ab659eb9256f8ee52adc9659d6ce766921eab1a24a0f963a8a8dc1d614ed34e9"; } { locale = "ga-IE"; arch = "linux-i686"; sha512 = "f43b95950532e23d1ed3a45c309d1e6dd5d79b56ef4b06a44a02485a58aa306a810360349ff2dbb617709785c4633ec3c79ab930752d112e9f971ba2244882b6"; }
{ locale = "ga-IE"; arch = "linux-x86_64"; sha512 = "1bd36aababa4fa8e47bb62d9a49b2a5303b5b0404f5ea370fd4b6b152327766a42bc6c15a85c693aaf532b9c3aa8598911e313a861d3eb946bb4ac8d0642de6f"; } { locale = "ga-IE"; arch = "linux-x86_64"; sha512 = "4fc095fe246ca02ddba8f005ab95dc77b41ed766fff1b0d947f78db1e3fb09a1454d1f3f83b3160127e985a3256d630176f7e6076b4eb936d2529b5f86d1018b"; }
{ locale = "gd"; arch = "linux-i686"; sha512 = "bc0f98937cb2c2ef98ebf6625179f77d36d12f6c95eb413cd570f4b3a9fbe733888b57ef946fcde2daf59183291a8bd1258e8c7f80b260e6af3138c8b83117f9"; } { locale = "gd"; arch = "linux-i686"; sha512 = "72e6c4b9e7afd114690f5416d4018eb72ccdd4f2e71e60328e4df92a4043c19bb1ef917661abb8476fe68068754b17b18f7b8178494ad7f7278568919123f495"; }
{ locale = "gd"; arch = "linux-x86_64"; sha512 = "d2729fddbd4db455b1f2b738d9bbd6d155db664c01ba6617128728caffe8f96aada8b02d49fb1b90695c4bf37db6960f51d6c074b5df94ab4e74996370679d2a"; } { locale = "gd"; arch = "linux-x86_64"; sha512 = "dcd069d8c4b2d096a01b2f24dd4acd60dbedc1b8511d1fa4346be9342b99b81b6252032470733385e70dfadf9cc755c1f4878542d275a17740290a35dabf6285"; }
{ locale = "gl"; arch = "linux-i686"; sha512 = "6306be1026b9127e455a3b0c720f7de495811c3bfb578090ee33d8b4200bec3390c006767d45ce165b57325f1c41e98ce078cf78bdf0a2e9d0bf5fd704cf8374"; } { locale = "gl"; arch = "linux-i686"; sha512 = "f1e9d759fe8fe2d613bc640d519a73ce843776ab6f7511734522a8728bae07762705b1698a0526accdf9c0c3a9bd233649a01931af2a653d17ae368399df0a1a"; }
{ locale = "gl"; arch = "linux-x86_64"; sha512 = "cb977c4f60041ccba81ae9708b381d8e073c2041104549973f33695d6f08663d23fc9dccc112d6fd9e4c61847211ecd2b762b81d842853ff80a7b813955295c9"; } { locale = "gl"; arch = "linux-x86_64"; sha512 = "16953e45d9c3618c394e4150c58ca7fca45d90beab9a2253ee6cfe58a85e66aa2c5788fc4988c38b1c70470dc3fb9bb96a09daa354c88160d53739ce95ea25c7"; }
{ locale = "he"; arch = "linux-i686"; sha512 = "e39c70ed7711a4c7c5baf0594917e2727bf0d081f9d38d2f0d539e557fa9c20e639c3e98ef8926cdc9f57ffee2c4b8896b044bd1fe9aeca39e64af2b56e35dfd"; } { locale = "he"; arch = "linux-i686"; sha512 = "89a6e7a06694e55128fa584cb6fac0c459d21c6f795caf581532b7ce69e0ba1954029667d5d3afb5835ffad1bc0d7444ab0c59cff2873870aad6bb232ede542a"; }
{ locale = "he"; arch = "linux-x86_64"; sha512 = "86ad9d155916dbf7318fe054286b8808bd6072735b6264db61d51745abaa975311776d9a15da13b9f6c536e78714501f1855291bcf59b49cebc047da112fcc91"; } { locale = "he"; arch = "linux-x86_64"; sha512 = "183ce0c71d7852490f1f78d8a6380c7909f4462d238ecb342e35a8fe5b369161b9399c704011a0741bf0694b67713f93ec187331c414a72e0d77202382a99c7f"; }
{ locale = "hr"; arch = "linux-i686"; sha512 = "e82a125725373a5fcadb4ad010809fd307f5caea4bbdb428cce3c267da197bc73355f655397283fc6bf93838ce41896b7d6dd1174fc56526a04b61559babf42d"; } { locale = "hr"; arch = "linux-i686"; sha512 = "03c6d917c230cb9075958a6317599efcdecba5d8623a2664342bdc3c450662be64d69c7136c4f7ee6c10b4c7cdad8ea5a19cff2862f1e8aed9e3df3687abe182"; }
{ locale = "hr"; arch = "linux-x86_64"; sha512 = "ba8928e57b1eeeaa2b1e1b95ef87908247695b09d3f7220113820cc13a07223088a1c0468e362488b303a60456e2d63c631150025715d3a4b66b6a6204e31c9b"; } { locale = "hr"; arch = "linux-x86_64"; sha512 = "b26d084369b30bd33011b9761b16769795e529575174f5533174bf7fd71ac387708942cb3e709398bd401341c7ca59486e203865adea58e89743520f0557d94a"; }
{ locale = "hsb"; arch = "linux-i686"; sha512 = "276a97640f24aade9d0658529e13d4e50b70bd5e98d30c43d7af6e0cdb368d3a54ed9365aea9cc03bef6938bb3c7dc0649ca09543278538fea5dc24a15ab5072"; } { locale = "hsb"; arch = "linux-i686"; sha512 = "06dfe62b99b8a52d0d2835c83e9becdd3af3b278e1fc8f7985f2d3883c25ff2e65d55a841c1040816d64faf4115f867c1c18a771e6139ea40fe770cc4dc137f5"; }
{ locale = "hsb"; arch = "linux-x86_64"; sha512 = "ab527b02bc792b2fe2a939a82b5ef4797f7ae94144a5161e11722d46d38da75203139faa85655248e4aba12090d79a46a0db0310b32ec0db02c4e68e932f0d2f"; } { locale = "hsb"; arch = "linux-x86_64"; sha512 = "e303bfc9ce30479d1d79611d29dc95cbdd3ea4a6abdd1df6961cc7e4d832c6b44f6010f5a7e74485b4648e781aae2cfd2da78bbae6ef09e0cac6e5b980abfdc4"; }
{ locale = "hu"; arch = "linux-i686"; sha512 = "34e1f7e790deb7d4594f2edcf6ba1641730bdb6ceb72fb08071daed02713de8ff6931e3986fb3125646ecb3d2f299e5bf5028fc0425ac9790d57d4aace9e81f0"; } { locale = "hu"; arch = "linux-i686"; sha512 = "f454805664f2aa7262449acb74d78fba411e5de175076a50758f149fc4c1b4f5c76f2a36b253acc18bcc809172db3fea17c6cba524918dd80f2b17bad97e237a"; }
{ locale = "hu"; arch = "linux-x86_64"; sha512 = "e7df1f64c41110d56959237555ff3a066b8d503f28c6d504c7080f3af2548d5ee66a60771872065222db57624b40d1a647aa278f89c04fa3c520730147227c83"; } { locale = "hu"; arch = "linux-x86_64"; sha512 = "0e8a0a2eefacd575fc52e6a761be481b1a4fe29eab0aaf8d51e2aa624f4cf1f5fae2cc9dfa1f68af83b82813cb8cdb8da3e454711f611a621cc22b33acc44e98"; }
{ locale = "hy-AM"; arch = "linux-i686"; sha512 = "356ac76891199061fd4698c51903ddc7e92858252a6ca502543b0403790b9b80ba8799e847a00331f19b6ab56d2e3d02fac79ec7b5502ed8227c5abd82ad3fc3"; } { locale = "hy-AM"; arch = "linux-i686"; sha512 = "3ed1482d68759f143f403c935af3412ab819b6801e13bcaf123ef910db0bbe2c7523b52f1dc5c4a93b1a087f3d78162f2b8c04930abe89abf9536abcea374dc8"; }
{ locale = "hy-AM"; arch = "linux-x86_64"; sha512 = "410ca6dbd22d870ec4d74e0dc19b65009d860e93b905dc43ae0d5086f83ad1dbae81d2213b0f39afbd5e428287d0f35e5c7b923df594494e66fcf08d4663cf82"; } { locale = "hy-AM"; arch = "linux-x86_64"; sha512 = "bb43898b0953dbde2837906da9edeb0924a65488715d8e3cf22698ddf665a8037ec758ed6df4ca04ff2f04df437eb8c71d98496147bd5f92b22246bf967be769"; }
{ locale = "id"; arch = "linux-i686"; sha512 = "ddab3b64afba2862a18879845cea3945fd3a34295ab07e5c7f53435ef8af005fdaa3beb5fedbee27818917a320fa5e1d1cdc618ac1767db9ceb1bf3c912720b0"; } { locale = "id"; arch = "linux-i686"; sha512 = "c2800b997e412cfabd39d7c8412c02817121383ae477cade3db1d75f7be47091b84179e54e3bd968ca79c41199fbc1f5ece63cb2b9eef038e9af6e4034326db0"; }
{ locale = "id"; arch = "linux-x86_64"; sha512 = "4b26928f579b56c965992b4425a9af6d85fd7a288d699942448ff8f331833e53625f0d48e62794356ed7056ce75d0efa3fcce3f3be9acee099060b4c5a20e281"; } { locale = "id"; arch = "linux-x86_64"; sha512 = "b5cddfb6c6e8a6fccf6ef4ccd78734e766c081ae5fe3d2a3ad73852d453fdd71eda917eb29ec3bbd2398c7c810c0e61195680de1cded8f4394322a12ce84e0f7"; }
{ locale = "is"; arch = "linux-i686"; sha512 = "8ad9065d628cddc34fad8afb5477edc2ecbac7add4162c87e6790bbee58e8d40e40b087f879fd09a44f180b30e3929bcfe2ed268fe5bd549c0d5c011be7d974a"; } { locale = "is"; arch = "linux-i686"; sha512 = "9ab50f7d7ea5450bfd984ef180eeef8672e21e5d1610def3f3725589740ce57486985706713bb292a1a577dae1f9b6106c568fb2acc11f4bb92c1801af444c8f"; }
{ locale = "is"; arch = "linux-x86_64"; sha512 = "f2a14977d98e0e7575dbe1f3f068472bb90d25a9c333ed191ee17fbf647b1c47143136ef7fc1871bcdbf3b55c2d414a05a119a7a2337b9cd05f039d74915c727"; } { locale = "is"; arch = "linux-x86_64"; sha512 = "39b6c5ae33b191334d0867d031b59b06a86311527f19b1fa8f0bbe0dfbf90f4f2cf952b8d6ed22851828b16aa3019a8208e6f7b603a6d94741ba66111af00955"; }
{ locale = "it"; arch = "linux-i686"; sha512 = "18a3951092f38dded053b25658da79188aff3a3dd6e008f269b0b4c32151f7d2d2483932145ccc50c6c9d199af94b43abde65b61e8b1093d9b4c52692382d8ca"; } { locale = "it"; arch = "linux-i686"; sha512 = "13899d6940dd4840566def16ad5d36b6c992349d68bc4d9dbb9c9b73bf53310401e687bf9a4b9837205f5a527f3b7ba1270bb4e4ebb46c129496d49b0b19f2e5"; }
{ locale = "it"; arch = "linux-x86_64"; sha512 = "f834a9ba6f6cc2745d4e54eb73ef174e913009e82e989d1386e8598f9f83c32fa65de6902de641b62ebbf183a25f0037d119bb61884f3548d8f425fa63c9f5d0"; } { locale = "it"; arch = "linux-x86_64"; sha512 = "c1434939ff690a4036271c013f926230c7e612a64e41aad6e0885109eb5767fa0639286fd44e370f24cae1d4e70a72be8bb04f5533c66c7fb52ac0d1986a767e"; }
{ locale = "ja"; arch = "linux-i686"; sha512 = "f91904e585e30ac18e4065046ec184607705bce423ea79aadbecf32fa0f9f598a439ae8f955e79389c411f0836dd6bcf9a74e1e78cb70471a3c523a807e43c41"; } { locale = "ja"; arch = "linux-i686"; sha512 = "7b6464fd5fc2b0c0a54f760df62c9f08c94662d00e98d9d7a58844d189c765d780798a64079507aa84532e91b28a92e4d6f21c51bd9abf8263e8c4267ba2f9b2"; }
{ locale = "ja"; arch = "linux-x86_64"; sha512 = "3052946955110d0f1df66df9933079bbe0b0247f9eef0a07c02c43f6463055bcde33e27b7ec1beb511e70f3b524d55ab404a0be755599f9e15f1902b4eb457c4"; } { locale = "ja"; arch = "linux-x86_64"; sha512 = "3545594699f209bc78353b3f4b17df5b31f1283e826937cbbd83f34a32aee658c67dffe4cc77a7ea055f09e6d966768715deb7037372d29796a1fddab89383ca"; }
{ locale = "ko"; arch = "linux-i686"; sha512 = "e0f79d30960bff54ee064ae381dd89b877c2f5055424eaf017382f6b2d1d0b34544cf3d88fefce8f2e294e84477e5109a17fca83083b0c5602ea5d0eec7b9c0c"; } { locale = "ko"; arch = "linux-i686"; sha512 = "df238479c6d58be8986a1ea581e63dd7e42a0c6d4a8fe2b3ef66ceeee34c68a4b02f689844e0a19d59d65abb175cbd95387a4e2d0041e7b126cf7728badaa0df"; }
{ locale = "ko"; arch = "linux-x86_64"; sha512 = "ce515c74e7d69394f79ff7adf6ffe2118b0dc76f49672f19cbc299b21705ba18a88c6780f88bf28bcbf208ad33914da13031617a20494160d771ec09c10a798d"; } { locale = "ko"; arch = "linux-x86_64"; sha512 = "e05d44fc6a66c79ca50cc2bfd88d39112783ed636370ea2927cc2202c8b5829f05aa1e6fd9083c4c5a37c8bb873aadc5aa81d0522abed5742fe78ea3258f8e15"; }
{ locale = "lt"; arch = "linux-i686"; sha512 = "f9d00ec17abd13d575d651caad02e1a46adef760ca6b706df31708375b7c721f3cfd1d99964cc2e16615f5fc422855dba8fa722d57b355782dba1541cf32e1e1"; } { locale = "lt"; arch = "linux-i686"; sha512 = "219d2030e11fdfe5f68f703e6141038177257025b5f1039776cc9093c35b9ac03d197488ceb960d1b2b5c9abc12ac2b4895990afbd430170499d3639476eff5d"; }
{ locale = "lt"; arch = "linux-x86_64"; sha512 = "2572ee32695dd0abf10a486453a3ca9d7fc26e88993a374677fb5f96edb319a5ba2892d8f9a236195ecd8199a7936d3969830571411ea35a8dc1f229089595e2"; } { locale = "lt"; arch = "linux-x86_64"; sha512 = "6221204aad7b62fd540a5776ac67ca968c5f7f436d260664184c871f8ecdccac6542f306c2d34ba8b74c17b15caf549ad30852fd003b711572ea3eba0c2a32bc"; }
{ locale = "nb-NO"; arch = "linux-i686"; sha512 = "26db6cf82400b4a1bff5747d4e301c46f3391b97e28b64716e2b2dcfb2ab2da583142b487f90fe0798bee3cdf49d5965b9d9b124e95f1d65b32c9f84c42a7ebc"; } { locale = "nb-NO"; arch = "linux-i686"; sha512 = "54b3db811b3573cf0084cd5a5df45e33c6540b1d6df301023853b1fb023f786e70b9f6d2b827273504e70809096d392b0fb91ff89ad363c051ddbfbb6dcf8099"; }
{ locale = "nb-NO"; arch = "linux-x86_64"; sha512 = "9b83eed9b3e93a5ddf463aa631bb4905abb8e02574e1be8a4cc9fe5cea7f3aee743b0f570a748fba67adbf6096a8443378ddfeedaa9cb0aa8f072dadf906929d"; } { locale = "nb-NO"; arch = "linux-x86_64"; sha512 = "8ccafab65ece0dbc9d7ea7067846d3a45df6b4a78d543d54f87a52f359a759dd4d3f0272ca3ce8c792feb643c5d3871ed411d0b8719527969acc1cde39577768"; }
{ locale = "nl"; arch = "linux-i686"; sha512 = "ff00b25886df3a9ff0eb9c4c9a1b34be21edc69ac20f0d994b9dd9b0618037c92c15ead664b071d09766a0e764acb5e118185dc3f08c42f2cca62c4c70fc8ffe"; } { locale = "nl"; arch = "linux-i686"; sha512 = "4ac1dddb4f65c05306738fdfff6b939e4678a59282519a053ae3b919e2c9d0cd4f72f93f6c5925efad101c64a32ec10187fce6734dbdb8002ed05bb1690d8cc0"; }
{ locale = "nl"; arch = "linux-x86_64"; sha512 = "6796f4f3d1525a3b617c99eacec76c1cdc5c8fcadc39120d1da052518cb663093c695060b37120ea6337e21b9fcc20c5a5119878ba1068553772f2d8ed89db32"; } { locale = "nl"; arch = "linux-x86_64"; sha512 = "58555fc9e43b9599486b25fdf8b0e4e27a0592f52db730123ea0513be255f026a35a2d9ac9be84be158e94c3f95fa5ce9dc531dc94bc839e36092ce6ad560b6e"; }
{ locale = "nn-NO"; arch = "linux-i686"; sha512 = "ab236204028e79bb98e78b2900b434f1237e407e864d346fae975d123fa87e727710e41e19625b6c69548497cd9d7716467dc01002e4ff6025301a141125c723"; } { locale = "nn-NO"; arch = "linux-i686"; sha512 = "102ff8f498c9acd7fec58973bde3807f2821723a223ac7646985faf1342eeba15b438b57a6c1e64005ebd86b97cd37555ab568ed96c228ca825651e9133c2696"; }
{ locale = "nn-NO"; arch = "linux-x86_64"; sha512 = "0544c952ae8fddf43b784bab00aa9d4fd05566e06b9df15990ea91cc65aace6066855a8bdc3f6e6eb01e2a7030a49df67962de4af8d9d84d003cb2553af71006"; } { locale = "nn-NO"; arch = "linux-x86_64"; sha512 = "eeda11d9e76e713a287130e1c0cfbc8507c0a148061dab878891af0c7751fb517a0f9d3d49c31ae69514e5caafb212c5e23b6254dc310b63c2f241741c8edf29"; }
{ locale = "pa-IN"; arch = "linux-i686"; sha512 = "618d3e621bed807521f4b933a44e8e87b38b2843a5f85f59a83a60a3df6e13a96d1b3c250a9d77200b03be69116cbdeb33c7e2e2b4d02b8672ab90f0e303dfe3"; } { locale = "pa-IN"; arch = "linux-i686"; sha512 = "94dcd33d5a992ffd7a47114555d1a12d31e235eec60fa6792fe041154c27dd0d97bf55d0c8bff763502d07a9b458402322a54b0b1943ef7a55457d32360135f7"; }
{ locale = "pa-IN"; arch = "linux-x86_64"; sha512 = "226844283b3aa5dd4f224a85101529099c8fde81aed5d354b685953019b27d445ac3347f642ea93145be4dce328c4f1711e0bd21bd9f5a2b97e6b822130546cd"; } { locale = "pa-IN"; arch = "linux-x86_64"; sha512 = "e7a5fd70e80c34c12650fc85af282dffce6fdcaa95c177e18930212605510858d4f71fe0600bccde80aa59bd81f22b4425830fc4c0c689c636105512fb55b0fe"; }
{ locale = "pl"; arch = "linux-i686"; sha512 = "4ba51ed645292165343bd104dc36ba0126435fdc06764e587379ed4de6a89a9f7711890f5f12f6176851ffcfbcd267cc1927b6e8c2a710d505cb3bbc7120209c"; } { locale = "pl"; arch = "linux-i686"; sha512 = "a056b9ddf6a2a04adf786bad7cecf4d4c02c0ddf8584ef602e390a2157073a654473f2262a4e418fb31ac0a198fd212ac67a2c9e9e52490b3d4236fc6c73edb6"; }
{ locale = "pl"; arch = "linux-x86_64"; sha512 = "2702db95f2e166dd5097ae7c2c83fea39f666a0a9e811e7876042e6b5ee0dcad6061fb6b6950a2f8fd8f97c434476155b8e2a306e1fee5cc54100e2d2ec7d619"; } { locale = "pl"; arch = "linux-x86_64"; sha512 = "081cbbc49b12223e9a9f860fc6072ceb855634419bbb4d1e2923342c7f4f0b634443a0c1f9f60bf8622b9176412c4216d555d7d075bdc120d0c4bd2d809201db"; }
{ locale = "pt-BR"; arch = "linux-i686"; sha512 = "ec7bb46f323030f180bb7e83b40e421a245ca4a1aec5f548a2bde1796db00fec415889cca836394b172b1923638e61eba4b71f56bf8aaa55b902deaa7f57842e"; } { locale = "pt-BR"; arch = "linux-i686"; sha512 = "22b4194129af89e81e1fa7ab38c2905169ca73c8656c6a7b718cf4013dbc0bcc4336ef68303506894e871487092f8ae7b2a05f914242dd2ea61109e3f969476a"; }
{ locale = "pt-BR"; arch = "linux-x86_64"; sha512 = "48406e53ba5276f3721cc5a9af825aa48215862134addefdb136ccc013dc63ca664baa820c2f34f4dd02e79e747bcd4ab73b59ab71773f05c5fede7bfc005745"; } { locale = "pt-BR"; arch = "linux-x86_64"; sha512 = "c6a5556ceb64c4559e1ce92019312a9b862efe6e5c93380859f8e2787b54cc5e12796446d7effd3bf8c47704e6fadfd80da9261d30c1ab666ebb7a34ac15c525"; }
{ locale = "pt-PT"; arch = "linux-i686"; sha512 = "27f8bfc56044d000c8c43c759c16c3eb891a0d3b6aa4d62a18477a3dd816f0b67e899a1ec375376ee83fa97d0d2d836fcb5b1eb3407b09b194600206072d6c49"; } { locale = "pt-PT"; arch = "linux-i686"; sha512 = "46c292e1daa7755332f29e2e6e785013badb3bd869d497cd8fd85c107e9412bfac9ffe1e14f99addaac3d413e9ac7dcb2ee4ba4dc5dddaeee0fefddf0256e281"; }
{ locale = "pt-PT"; arch = "linux-x86_64"; sha512 = "7fa5298de1e5128b4895491d99ab5222f23c1e36e2f07582b6e970de95f45b6ae89a8e4a03b394d0910129ca16be593a47217124b1619ec567ec9d470fe78100"; } { locale = "pt-PT"; arch = "linux-x86_64"; sha512 = "8c1e72eea7b4d30ffc6e5915d51289abce564674231f80ac0e5e03a45cc971683232ba08893672e424fa1bca75ebcc2847d18f044e2762c16f0d955f56895140"; }
{ locale = "rm"; arch = "linux-i686"; sha512 = "2e25f6ed8e9c92a888c9b2fc0105d5912a9b85fe438c8889728d5522aebf23e86655af2066046e9ed0ea232a59d19b4affe73fa14d4e15af7cb337fef4438b49"; } { locale = "rm"; arch = "linux-i686"; sha512 = "0b3305f2c7d2626d2fe57484c694e5400f6d60dcfb62e65ca925501dc1c1ba3a9ab3f71f2d5584a5d6b49567aedd7188582967f0ad6e7a461034e50cfb577d32"; }
{ locale = "rm"; arch = "linux-x86_64"; sha512 = "c2adc7519b2a6670e7c0e7190c6788a5c5c8882b86bbd58c3472de51e958a22126c575413b6a604eca737d120b1da1863f35702f65220bb0e7f81e4deaa21587"; } { locale = "rm"; arch = "linux-x86_64"; sha512 = "6c875b6806dda0ef2b140ae3a3bb47ae6f5b93a0b6d7b9b2d0e2182b6f3f356c85cbe60c9c79bac51f46a2c1adb59f240f7d1c45be203b38a25832be178cc0a9"; }
{ locale = "ro"; arch = "linux-i686"; sha512 = "ac7c8df9f06cf03c4b91e22668697bc74fff7dfa2edbf6873786e98acd5bf79535d8ad9a913811ed3567cb7e4427a8b3751a7adb011bd0567e433064e712be43"; } { locale = "ro"; arch = "linux-i686"; sha512 = "6043a890614495cf28a1271716e6add0229f8d5ed911fe04152503a20a26e7b4da03475e4a1c08b93cf512bde19916ca1a53d41094ffa8a2d48e4cbc71fcbc33"; }
{ locale = "ro"; arch = "linux-x86_64"; sha512 = "f4f80a8b25410b2a48c95dad316fc98b9f5391f08d3df699628b4bf9e343d00ded9cd1ff71b0d5e441ffe6c6a2edae29790a93b5e2117d7343a537d6cbd0738b"; } { locale = "ro"; arch = "linux-x86_64"; sha512 = "9a5a81fd713ffde8e38aa9ed7557a9a8b6b902e8ba316e5bcd5c4af2f73a1fe67a226a9401ddabdf76086af6c8432d00d02cbafc250f03190878deca1bd69588"; }
{ locale = "ru"; arch = "linux-i686"; sha512 = "73009743b635761c1ac5d588837084cfb7041f639fc81646d2b6ad7bd92be5d7f742562c8c5522248f20dbca7fd430826617ae706821f107911303d416cb5f4c"; } { locale = "ru"; arch = "linux-i686"; sha512 = "aa205e2f3bc4a4e22520a41c9ba516f6360e062da74a180221b5236cf10d0a30e1ce3b5eec1081a8a9b4de3331fa3f289dfccc0b6785363b3411f77d8832f7c0"; }
{ locale = "ru"; arch = "linux-x86_64"; sha512 = "cd2dbc81d761077f4fcff759dcb2ff02ae0e61b0b91007e7514081926e9f3cb2bcd2e65fc3ca44ad5d07caa4e4bd9e450feb25bc184f8c136ea3aa6cc4d05968"; } { locale = "ru"; arch = "linux-x86_64"; sha512 = "7c8d7402949f34cbf9ba3eb32fe1fa1c225296bd179854a199968f012c64fa3a016dcaa922d0dc0abbe1fb0bae438030f7096aaf79be2c7822df2f529e1fa46a"; }
{ locale = "si"; arch = "linux-i686"; sha512 = "d5a416aff2e5fd3b294d8028ee6008c9086b9c5fdb15b52b8810e9e623865b946d46e1b812849ecd7331923f7e7ba01711a909396c8676db917b2a36f7370504"; } { locale = "si"; arch = "linux-i686"; sha512 = "841897e3a07a0a6dbb4e912e424ea52b17631549176995e3c8ab1581bbc4e565be084ffd686ae6a4596224a642213477d40a5b2aa702ac6679e1ae71bdd88516"; }
{ locale = "si"; arch = "linux-x86_64"; sha512 = "8284411d705c804fb0e90f7358e79e0687ef892342ed06c2030803d07b1a901e7f1a6ac2acb375eac10566b1885826c4fa187d3517a2bea35222bd2604d3992a"; } { locale = "si"; arch = "linux-x86_64"; sha512 = "618b49c54e2057c10e3ea5441e2e960e4581589fc2685ca2f42cb1cfb5defd9f26e60d3f7af603757aaf73021133a0bab94ddf3c0cded1442523a55661395720"; }
{ locale = "sk"; arch = "linux-i686"; sha512 = "c905adaeca4c3daa57cd54d9a7ce49762e4ab4d32594dffcbf5b9d581409a9f7a0eea1abb51ffa94c35433d20cfd0be3baa914d9821e8f754cdcdb80de7a82fc"; } { locale = "sk"; arch = "linux-i686"; sha512 = "e00c42e2adf10e9d19d434bf67be2ff75f47ba11fb2a5d00d62f9946c3c274795fe2fa83b718cf21cc4ac396f10212ab459c81fa7d866ff6a9af8754b0663db0"; }
{ locale = "sk"; arch = "linux-x86_64"; sha512 = "2741ea21d5714836116595529f4e240accf95ae1e549ac4cb083669beb20d40e7fdeb7805a836ada5d4310e31d74c8bebb1cb5c8f48b3fa585edfd880109b2a1"; } { locale = "sk"; arch = "linux-x86_64"; sha512 = "48a0277c6082e84dc51df64c9e726843d1361edee39e27e625f09cecd56c7b82e31d31e121799f34da4e85177506af680dc893b8f305d24ae7f6276146842120"; }
{ locale = "sl"; arch = "linux-i686"; sha512 = "b61cb4971cfd9701dc8aad80848e41bdd399a53fc3282d72e7a866b782cebce928bbc163d2557c24dd0fa3f51f2d2cc40e27fc578d39392d00c15ad08d0df3ad"; } { locale = "sl"; arch = "linux-i686"; sha512 = "585fbe3e399d857ff21307a0ed53c5ea9aabb68232da44febd3c52297e7f9636f6aab6c8f698e2714a83632c48b4b60933568d6dcead5a614fbdc4b90be416c6"; }
{ locale = "sl"; arch = "linux-x86_64"; sha512 = "47491dfb70268c3ef00d4599e487fc2af35277de2746a106f59eb1b0813a4201c1e3ff735b0d7b48ea23bf3aac18fa1bb8e0c7948651e421f2677b988633e3ca"; } { locale = "sl"; arch = "linux-x86_64"; sha512 = "e84ff51b3feb54408e6abaddaf23bddab85d6a3cf78286dcc13da43e743306addcd2dd6fd58419d2e5dfe2e5d63c0ba51810fdd9ec080427d26ab8ec7535eba6"; }
{ locale = "sq"; arch = "linux-i686"; sha512 = "7773088708cc1ca1c115acaafc2d1456b854a413daf9622c2d267dc33e8a4727b6836743c9cfaf8c5694c729241e317a53b8411e37b8d4f94b67bc02c2878e41"; } { locale = "sq"; arch = "linux-i686"; sha512 = "9ca817ada82c6f2199b0c357164fc28b98351c69a8cbfd98048eee407ddc05dc90714e7dfca4059a55ce2bcbc133ae22c8f26a8bd632d60b7bb561221d4fcc81"; }
{ locale = "sq"; arch = "linux-x86_64"; sha512 = "db776cedad7842e02a87347e2f97aa5e583e2d1e2859659032e338b5c855f24241a4a1950fdb3a13b6dec643a73a7cb5f7e527ecdf50deafa5138c9f273d3408"; } { locale = "sq"; arch = "linux-x86_64"; sha512 = "707088e8fd72c8bf598108f57d684369ff5b1c996e39c88a002f724324b111b2d7c00cfb649eddedbd70dd0df22d10f2f83f9114a71031f33e9adc250a193402"; }
{ locale = "sr"; arch = "linux-i686"; sha512 = "e9eb4827e12db0173643bab8ffca55d50238a1184a2e2ae3543248400f39685b999a068ddab523e429c2667f2966e4a0a09c432837f5e852065459cda67e96b4"; } { locale = "sr"; arch = "linux-i686"; sha512 = "243baec5e5daca6cc7410bc3079db3e5201b49f7ea1b76bfdc84fcdfc50c3327e886ce7e008c9350c7bf5128f61c34ae543200bc11ae0d3cfa9166a3000b243d"; }
{ locale = "sr"; arch = "linux-x86_64"; sha512 = "a38c5f80c0e6a442d035f7b4c18a350421948e9246ac65389959978cfe51f317644c06ecc567bb09739bee0303e4e2b8920bc7903900eabe92ad244e20370345"; } { locale = "sr"; arch = "linux-x86_64"; sha512 = "212ce66af4689db19b234b463b0f29b01c7ceebf1d4c67a10351f06f2e71b32d050e5232fe0e61e15fa30a852107ca7a1fd80475fac7d2b877074de3b40e6bdc"; }
{ locale = "sv-SE"; arch = "linux-i686"; sha512 = "d7692def00b3a47e86fc01ad192a610352a6c958e53d1b2e4ac6d27a017643e2c0e9887a173268278b9ee7d2e3116368a8dde4d2fce6ea9b56a2bb3963a31ba7"; } { locale = "sv-SE"; arch = "linux-i686"; sha512 = "31637fef31f0e1d08ea528bd7b917c6d67ab047c3d1856fd60b8a1de20afec567aed093e27c938aee4c8b1b4269cda5f43a127cc3284deb3db4f0d98a8d23a8a"; }
{ locale = "sv-SE"; arch = "linux-x86_64"; sha512 = "4656a0d46d358476fcba3be275740a289d79159fa346f4903cac0830341f9a630f1eb0c007d8429cde47821c441d01e792634d32d6e7b94f1bb2c94f18a56563"; } { locale = "sv-SE"; arch = "linux-x86_64"; sha512 = "81b745a763fcf3b60b84ddae56cf59e363269986734f26275ad3e32320b8d5ac1a4a714a03861ccd0fdae499767a93b53f5717ca78074c79ca2c9b303406a5ec"; }
{ locale = "ta-LK"; arch = "linux-i686"; sha512 = "d6ed8ef83f1d4af62a5c2f92c791822d1b711ed4a51d9656c0e73dbe20510efe017f615537c892b43e43a5503ace92652faa5fa5f2d9956349386fe784fe0dc5"; } { locale = "ta-LK"; arch = "linux-i686"; sha512 = "c35956a5aacdbb2eec20feb41fac23349c621624ccc792c9f6e711935c45afaced43e8c75d00c4c59d0279d62d5092798c3200d25730a1fa15ad03682b5f0d86"; }
{ locale = "ta-LK"; arch = "linux-x86_64"; sha512 = "7a994549f4f8c33b185d094e5d207942b62bdf983546aec357404b46e74ec0b790c9b83ffd3cf3687b5bf09457cdbc14593af30ea425718baeb5ecc5703ec15b"; } { locale = "ta-LK"; arch = "linux-x86_64"; sha512 = "5bfeaf3ec0ad5ae56b540337b72795e11fe66846df72ec849b51db32091df8ea8a9ba4b2e6c46f2cca2f672419c6ca6fe23de8c7668edce53c38c5587b83c075"; }
{ locale = "tr"; arch = "linux-i686"; sha512 = "c5833f7c43919a842f7b840a35ec8752401c24c559d620cdbdc83e70d77e5fbb5a364e44ac3c5f1f1339d9752b9a9825ac0e00d314aa9025760800fc4fc3ce18"; } { locale = "tr"; arch = "linux-i686"; sha512 = "b617860d43de6c1f191ec0a021b86e49217310fb8aaf1ce5d8be11eb27e77f6cf7338f8e675dd25a53c298b4fc7e5228c289aff86b23b81c8176ac55953ddc03"; }
{ locale = "tr"; arch = "linux-x86_64"; sha512 = "f1338235583f5888fb7bd30c4c66341bf7ebc4a771e76571e22a5ef445398c9d2ced0f2f93d99bb2f180fa73a4a1f3560616570c8711e54d40a9b931e5eeb4d1"; } { locale = "tr"; arch = "linux-x86_64"; sha512 = "f421c0889af9229e7081bb9f4f5a6cced6647bb230b7dd5d14f46bc5a0ba4c36f7a711e9b9df446ee69e165953d1405c1b11c9912447194518bf9c9b58a5da53"; }
{ locale = "uk"; arch = "linux-i686"; sha512 = "a40710948603a427c098619be1f203f2e7182eeb697de2b1dfdf824e556353b133839f0e5ce929fa9e31e70b1f248053bddeeba394dfb74e6c747aaa537d1df0"; } { locale = "uk"; arch = "linux-i686"; sha512 = "f33c519ea5fb12e5f98cab4d3de4bc23e8277db9534b765820f8cbe1c24d6d33a033b0ec357f8b13d9d16915f6d677b5b206cdceac86b9f8a09aa1d9e016a510"; }
{ locale = "uk"; arch = "linux-x86_64"; sha512 = "5dc6979da2242e45c5ca8a4ca50dd2858c1781256e5b2a9b8bed84e1b2af9f98e5ddea285e49549b3afc1a98df2ab89d74c99a6082309f0150ff426c1d9449c0"; } { locale = "uk"; arch = "linux-x86_64"; sha512 = "1964f6597ba11f10010275f7ff256f8fb86bcafc426c81c4f2d55f5202b0d19bc978a1be24e2b204612bf19097afb0709f00de263fc34dbd43eb6b331f85b9ef"; }
{ locale = "vi"; arch = "linux-i686"; sha512 = "fa795ede70edb6c6237502cde8acdb7d5573db1d995d5e96f274b83f8ea0b827c37a5bcfc74b4aa99f1e15bf8dd68e30d756a0bcecc9e5946c2c5e275dad29bd"; } { locale = "vi"; arch = "linux-i686"; sha512 = "4ca3d166fdfa02bdf8581bbe29b1d067011d4922b5308af369407da7e7a00239b75da739f4be88a158e29b939516095101cc03602545900f87d91455ad716c0e"; }
{ locale = "vi"; arch = "linux-x86_64"; sha512 = "de8a0e22cfc727ccbc460a26a0cb80985c1957da99b050f6f00e4b20b050ba605d815577d392504d0a5e53ba4e12045f3a9a36626ed21682c493259fe0400ecf"; } { locale = "vi"; arch = "linux-x86_64"; sha512 = "5e335a87ee0d5ec63e45c2570f628d0ca1cd5577b39f7469aef2367632c10df16525bfffe2a4f80f473d7faacf9e96986130e6548978d9b4f606de3a25a12cc0"; }
{ locale = "zh-CN"; arch = "linux-i686"; sha512 = "381d66fc71d3f03f979ccd76aef75fdcf8eb2e182b4a0fa81c08976d195bd696d0213482d40ab365f2dad594587ba8359df4db2cf8febd8d724d5c50f3ba72ed"; } { locale = "zh-CN"; arch = "linux-i686"; sha512 = "de86ee26774483a31e74a9f89e144d5bb4eb5493f27cb1b5a21902b8e8cdc0322f15d38498b8d6005b59296715b9d9125676b26661433e280a2f1807fedc3df3"; }
{ locale = "zh-CN"; arch = "linux-x86_64"; sha512 = "d988114967c4656a13fa3fd562166e7444811ce16c5fc2af06619a47b941b8e07de0993a5593f2e5bad22ff6e856e969dc4cedb9c8df0f532a807e4a30b0c2ef"; } { locale = "zh-CN"; arch = "linux-x86_64"; sha512 = "291074caef4a1a1162d0c3f90e630985978ddd731fde7d9d1d576c065ee8b89af5cd10196c4b05c537996ab99d00d78119af00bd1cd77e85b567303c38d1e792"; }
{ locale = "zh-TW"; arch = "linux-i686"; sha512 = "097a53d990af79e54e445e05c35fc08c86c0d003a04c48daadebb8dc0bd13f57072a82da01c3ae293f4a6766b3e2082bebe12bbb2a8c2f1c7d8eab23eecc2262"; } { locale = "zh-TW"; arch = "linux-i686"; sha512 = "6873ff342439247d5bda3e3065998b33bdf03f1d80d15a2f733a79eb7ede188a71e628ec3af6a67354f9adab9f67d79a86310060b20de09c623c342e3b894f2b"; }
{ locale = "zh-TW"; arch = "linux-x86_64"; sha512 = "9d4dd9e429623009e21b41383776864804803affc9837068bbafd7507bbc5ed70362582da0adb5c811d21c068a96bb4725c4581bf81ac0acb3d57b19fdb4fff6"; } { locale = "zh-TW"; arch = "linux-x86_64"; sha512 = "c60f4ef8b1dd22db617e8d6381f2e0ebd37fd8503c363548b5affda704d483432369138943f84ca07c89a15dcf72b9a081f8db6f1c202558050ec997b9389ecd"; }
]; ];
} }

View File

@ -13,7 +13,7 @@
enableOfficialBranding ? false enableOfficialBranding ? false
}: }:
let version = "45.4.0"; in let version = "45.5.0"; in
let verName = "${version}"; in let verName = "${version}"; in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
src = fetchurl { src = fetchurl {
url = "mirror://mozilla/thunderbird/releases/${verName}/source/thunderbird-${verName}.source.tar.xz"; url = "mirror://mozilla/thunderbird/releases/${verName}/source/thunderbird-${verName}.source.tar.xz";
sha512 = "9c601d9625b43103b64e111da3a88fccdc30d4a52aa8a66ee02120bc13f3c5600d24fa1cfd3817975a0e58be9078d192334dd3099aa462468d8ab0cd05a3bcd5"; sha512 = "719469c4f66a9e4b09c360056c63ef2e1803334901dd4a23f12e455fe8ae4d0aba0a6273b3cf2796c925dc93f0add3df011ffe40148ef0b3f226d0b1a1c37b6a";
}; };
buildInputs = # from firefox30Pkgs.xulrunner, without gstreamer and libvpx buildInputs = # from firefox30Pkgs.xulrunner, without gstreamer and libvpx

View File

@ -0,0 +1,41 @@
{ stdenv, fetchurl, cmake
, ecm, qtbase, qtscript
, ki18n, kio, knotifications, knotifyconfig, kdoctools, kross, kcmutils, kdelibs4support
, libktorrent, boost, taglib
}:
stdenv.mkDerivation rec {
name = pname + "-" + version;
pname = "ktorrent";
version = "5.0.1";
src = fetchurl {
url = http://download.kde.org/stable/ktorrent/5.0/ktorrent-5.0.1.tar.xz;
sha256 = "1rbr932djmn1la6vs2sy1zdf39fmla8vwzfn76h7csncbp5fw3yh";
};
patches =
[ (fetchurl {
url = https://cgit.kde.org/ktorrent.git/patch/?id=f48acc22f0105ce6bac63294d248873ae231c6cc;
sha256 = "0jm4y35w2ypbjzf165rnjr224nq4w651ydnpd9zdn3inxh8r4s0v";
})
];
nativeBuildInputs = [ kdoctools ecm ];
buildInputs =
[ cmake qtbase qtscript
ki18n kio knotifications knotifyconfig kross kcmutils kdelibs4support
libktorrent taglib
];
enableParallelBuilding = true;
meta = {
description = "KDE integrated BtTorrent client";
homepage = https://www.kde.org/applications/internet/ktorrent/;
maintainers = [ stdenv.lib.maintainers.eelco ];
platforms = stdenv.lib.platforms.linux;
};
}

View File

@ -3,6 +3,7 @@
, zlib , zlib
, withGtk ? false, gtk2 ? null, pango ? null, cairo ? null, gdk_pixbuf ? null , withGtk ? false, gtk2 ? null, pango ? null, cairo ? null, gdk_pixbuf ? null
, withQt ? false, qt4 ? null , withQt ? false, qt4 ? null
, ApplicationServices, SystemConfiguration, gmp
}: }:
assert withGtk -> !withQt && gtk2 != null; assert withGtk -> !withQt && gtk2 != null;
@ -11,7 +12,7 @@ assert withQt -> !withGtk && qt4 != null;
with stdenv.lib; with stdenv.lib;
let let
version = "2.2.0"; version = "2.2.2";
variant = if withGtk then "gtk" else if withQt then "qt" else "cli"; variant = if withGtk then "gtk" else if withQt then "qt" else "cli";
in in
@ -20,14 +21,16 @@ stdenv.mkDerivation {
src = fetchurl { src = fetchurl {
url = "http://www.wireshark.org/download/src/all-versions/wireshark-${version}.tar.bz2"; url = "http://www.wireshark.org/download/src/all-versions/wireshark-${version}.tar.bz2";
sha256 = "010i7wpsv2231pwb1xdqs0xfwywi3514siidv6wnrfpw3rs7x156"; sha256 = "1csm035ayfzn1xzzsmzcjk2ixx39d70aykr4nh0a88chk9gfzb7r";
}; };
buildInputs = [ buildInputs = [
bison flex perl pkgconfig libpcap lua5 openssl libgcrypt gnutls bison flex perl pkgconfig libpcap lua5 openssl libgcrypt gnutls
geoip libnl c-ares python libcap glib zlib geoip c-ares python glib zlib
] ++ optional withQt qt4 ] ++ optional withQt qt4
++ (optionals withGtk [gtk2 pango cairo gdk_pixbuf]); ++ (optionals withGtk [gtk2 pango cairo gdk_pixbuf])
++ optionals stdenv.isLinux [ libcap libnl ]
++ optionals stdenv.isDarwin [ SystemConfiguration ApplicationServices gmp ];
patches = [ ./wireshark-lookup-dumpcap-in-path.patch ]; patches = [ ./wireshark-lookup-dumpcap-in-path.patch ];
@ -68,7 +71,7 @@ stdenv.mkDerivation {
experts. It runs on UNIX, OS X and Windows. experts. It runs on UNIX, OS X and Windows.
''; '';
platforms = stdenv.lib.platforms.linux; platforms = stdenv.lib.platforms.unix;
maintainers = with stdenv.lib.maintainers; [ bjornfor fpletz ]; maintainers = with stdenv.lib.maintainers; [ bjornfor fpletz ];
}; };
} }

View File

@ -0,0 +1,41 @@
{ stdenv, fetchFromGitHub, buildPythonApplication, fuse
, appdirs, colorama, dateutil, requests2, requests_toolbelt
, fusepy, sqlalchemy }:
buildPythonApplication rec {
name = pname + "-" + version;
pname = "acd_cli";
version = "0.3.2";
doCheck = false;
src = fetchFromGitHub {
owner = "yadayada";
repo = pname;
rev = version;
sha256 = "0a0fr632l24a3jmgla3b1vcm50ayfa9hdbp677ch1chwj5dq4zfp";
};
propagatedBuildInputs = [ appdirs colorama dateutil fusepy requests2
requests_toolbelt sqlalchemy ];
makeWrapperArgs = [ "--prefix LIBFUSE_PATH : ${fuse}/lib/libfuse.so" ];
postFixup = ''
function lnOverBin() {
rm -f $out/bin/{$2,.$2-wrapped}
ln -s $out/bin/$1 $out/bin/$2
}
lnOverBin acd_cli.py acd-cli
lnOverBin acd_cli.py acd_cli
lnOverBin acd_cli.py acdcli
'';
meta = with stdenv.lib; {
description = "A command line interface and FUSE filesystem for Amazon Cloud Drive";
homepage = https://github.com/yadayada/acd_cli;
license = licenses.gpl2;
platforms = platforms.linux;
maintainers = with maintainers; [ edwtjo ];
};
}

View File

@ -1,14 +1,14 @@
{ stdenv, lib, fetchFromGitHub, go, pkgs }: { stdenv, lib, fetchFromGitHub, go, pkgs }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "0.14.8"; version = "0.14.11";
name = "syncthing-${version}"; name = "syncthing-${version}";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "syncthing"; owner = "syncthing";
repo = "syncthing"; repo = "syncthing";
rev = "v${version}"; rev = "v${version}";
sha256 = "0zhxgl6pgf60x99cappdfzk7h23g37hlanh72bwypx7pwbvhc91l"; sha256 = "12b8284mya5z1q7ighbzk8rqxj0kcv5n0l39dygikfcbl1krr6sg";
}; };
buildInputs = [ go ]; buildInputs = [ go ];

View File

@ -3,8 +3,8 @@
rec { rec {
major = "5"; major = "5";
minor = "2"; minor = "2";
patch = "2"; patch = "3";
tweak = "2"; tweak = "3";
subdir = "${major}.${minor}.${patch}"; subdir = "${major}.${minor}.${patch}";
@ -12,6 +12,6 @@ rec {
src = fetchurl { src = fetchurl {
url = "http://download.documentfoundation.org/libreoffice/src/${subdir}/libreoffice-${version}.tar.xz"; url = "http://download.documentfoundation.org/libreoffice/src/${subdir}/libreoffice-${version}.tar.xz";
sha256 = "1q6rv935g633ngg10hzi23sg0wqfq2apyffagk7mj1kan2hflljr"; sha256 = "1h9j3j7drhr49nw2p6by5vvrr8nc8rpldn3yp724mwkb2rfkdwd8";
}; };
} }

View File

@ -42,14 +42,14 @@ let
translations = fetchSrc { translations = fetchSrc {
name = "translations"; name = "translations";
sha256 = "0nxwf3b63gzb04svb6z1hi3qf95i90pwda5gpmlrfrq6250n3bpi"; sha256 = "0j0ajli1cbfwbgzrcqkx3db174jv1fgm22ds0gqlgkci9cffa0c4";
}; };
# TODO: dictionaries # TODO: dictionaries
help = fetchSrc { help = fetchSrc {
name = "help"; name = "help";
sha256 = "1gm23i0snhcm4svciypm0qiviiqv9zpiyplkh22baccs7li3kih1"; sha256 = "0fndi6cv8rw426c3l071z130ks9sqf6ca5yas7am9d666mmy4fs4";
}; };
}; };

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