Merge remote-tracking branch 'origin/master' into gcc-6

This commit is contained in:
Eelco Dolstra 2016-11-08 10:03:36 +01:00
commit 0abd1241d0
339 changed files with 15904 additions and 10767 deletions

View File

@ -9,7 +9,7 @@
on non-NixOS)
- Built on platform(s)
- [ ] NixOS
- [ ] OS X
- [ ] macOS
- [ ] Linux
- [ ] Tested compilation of all pkgs that depend on this change using `nix-shell -p nox --run "nox-review wip"`
- [ ] Tested execution of all binary files (usually in `./result/bin/`)

View File

@ -187,7 +187,6 @@
hbunke = "Hendrik Bunke <bunke.hendrik@gmail.com>";
hce = "Hans-Christian Esperer <hc@hcesperer.org>";
henrytill = "Henry Till <henrytill@gmail.com>";
hiberno = "Christian Lask <hiberno@hiberno.net>";
hinton = "Tom Hinton <t@larkery.com>";
hrdinka = "Christoph Hrdinka <c.nix@hrdinka.at>";
iand675 = "Ian Duncan <ian@iankduncan.com>";
@ -270,12 +269,14 @@
mbe = "Brandon Edens <brandonedens@gmail.com>";
mboes = "Mathieu Boespflug <mboes@tweag.net>";
mcmtroffaes = "Matthias C. M. Troffaes <matthias.troffaes@gmail.com>";
mdaiter = "Matthew S. Daiter <mdaiter8121@gmail.com>";
meditans = "Carlo Nucera <meditans@gmail.com>";
meisternu = "Matt Miemiec <meister@krutt.org>";
mic92 = "Jörg Thalheim <joerg@higgsboson.tk>";
michaelpj = "Michael Peyton Jones <michaelpj@gmail.com>";
michalrus = "Michal Rus <m@michalrus.com>";
michelk = "Michel Kuhlmann <michel@kuhlmanns.info>";
mikefaille = "Michaël Faille <michael@faille.io>";
mimadrid = "Miguel Madrid <mimadrid@ucm.es>";
mingchuan = "Ming Chuan <ming@culpring.com>";
mirdhyn = "Merlin Gaillard <mirdhyn@gmail.com>";
@ -317,6 +318,7 @@
offline = "Jaka Hudoklin <jakahudoklin@gmail.com>";
olcai = "Erik Timan <dev@timan.info>";
olejorgenb = "Ole Jørgen Brønner <olejorgenb@yahoo.no>";
orbekk = "KJ Ørbekk <kjetil.orbekk@gmail.com>";
orbitz = "Malcolm Matalka <mmatalka@gmail.com>";
osener = "Ozan Sener <ozan@ozansener.com>";
otwieracz = "Slawomir Gonet <slawek@otwiera.cz>";
@ -360,6 +362,7 @@
rardiol = "Ricardo Ardissone <ricardo.ardissone@gmail.com>";
rasendubi = "Alexey Shmalko <rasen.dubi@gmail.com>";
raskin = "Michael Raskin <7c6f434c@mail.ru>";
rbasso = "Rafael Basso <rbasso@sharpgeeks.net>";
redbaron = "Maxim Ivanov <ivanov.maxim@gmail.com>";
redvers = "Redvers Davies <red@infect.me>";
refnil = "Martin Lavoie <broemartino@gmail.com>";

View File

@ -231,12 +231,20 @@ rec {
correspond to the definition of 'loc' in 'opt.file'. */
mergeOptionDecls = loc: opts:
foldl' (res: opt:
if opt.options ? default && res ? default ||
opt.options ? example && res ? example ||
opt.options ? description && res ? description ||
opt.options ? apply && res ? apply ||
# Accept to merge options which have identical types.
opt.options ? type && res ? type && opt.options.type.name != res.type.name
let t = res.type;
t' = opt.options.type;
mergedType = t.typeMerge t'.functor;
typesMergeable = mergedType != null;
typeSet = if (bothHave "type") && typesMergeable
then { type = mergedType; }
else {};
bothHave = k: opt.options ? ${k} && res ? ${k};
in
if bothHave "default" ||
bothHave "example" ||
bothHave "description" ||
bothHave "apply" ||
(bothHave "type" && (! typesMergeable))
then
throw "The option `${showOption loc}' in `${opt.file}' is already declared in ${showFiles res.declarations}."
else
@ -258,7 +266,7 @@ rec {
in opt.options // res //
{ declarations = res.declarations ++ [opt.file];
options = submodules;
}
} // typeSet
) { inherit loc; declarations = []; options = []; } opts;
/* Merge all the definitions of an option to produce the final
@ -422,12 +430,14 @@ rec {
options = opt.options or
(throw "Option `${showOption loc'}' has type optionSet but has no option attribute, in ${showFiles opt.declarations}.");
f = tp:
let optionSetIn = type: (tp.name == type) && (tp.functor.wrapped.name == "optionSet");
in
if tp.name == "option set" || tp.name == "submodule" then
throw "The option ${showOption loc} uses submodules without a wrapping type, in ${showFiles opt.declarations}."
else if tp.name == "attribute set of option sets" then types.attrsOf (types.submodule options)
else if tp.name == "list or attribute set of option sets" then types.loaOf (types.submodule options)
else if tp.name == "list of option sets" then types.listOf (types.submodule options)
else if tp.name == "null or option set" then types.nullOr (types.submodule options)
else if optionSetIn "attrsOf" then types.attrsOf (types.submodule options)
else if optionSetIn "loaOf" then types.loaOf (types.submodule options)
else if optionSetIn "listOf" then types.listOf (types.submodule options)
else if optionSetIn "nullOr" then types.nullOr (types.submodule options)
else tp;
in
if opt.type.getSubModules or null == null

View File

@ -92,7 +92,7 @@ rec {
internal = opt.internal or false;
visible = opt.visible or true;
readOnly = opt.readOnly or false;
type = opt.type.name or null;
type = opt.type.description or null;
}
// (if opt ? example then { example = scrubOptionValue opt.example; } else {})
// (if opt ? default then { default = scrubOptionValue opt.default; } else {})

View File

@ -17,10 +17,43 @@ rec {
};
# Default type merging function
# takes two type functors and return the merged type
defaultTypeMerge = f: f':
let wrapped = f.wrapped.typeMerge f'.wrapped.functor;
payload = f.binOp f.payload f'.payload;
in
# cannot merge different types
if f.name != f'.name
then null
# simple types
else if (f.wrapped == null && f'.wrapped == null)
&& (f.payload == null && f'.payload == null)
then f.type
# composed types
else if (f.wrapped != null && f'.wrapped != null) && (wrapped != null)
then f.type wrapped
# value types
else if (f.payload != null && f'.payload != null) && (payload != null)
then f.type payload
else null;
# Default type functor
defaultFunctor = name: {
inherit name;
type = types."${name}" or null;
wrapped = null;
payload = null;
binOp = a: b: null;
};
isOptionType = isType "option-type";
mkOptionType =
{ # Human-readable representation of the type.
{ # Human-readable representation of the type, should be equivalent to
# the type function name.
name
, # Description of the type, defined recursively by embedding the the wrapped type if any.
description ? null
, # Function applied to each definition that should return true if
# its type-correct, false otherwise.
check ? (x: true)
@ -36,12 +69,26 @@ rec {
getSubOptions ? prefix: {}
, # List of modules if any, or null if none.
getSubModules ? null
, # Function for building the same option type with a different list of
, # Function for building the same option type with a different list of
# modules.
substSubModules ? m: null
, # Function that merge type declarations.
# internal, takes a functor as argument and returns the merged type.
# returning null means the type is not mergeable
typeMerge ? defaultTypeMerge functor
, # The type functor.
# internal, representation of the type as an attribute set.
# name: name of the type
# type: type function.
# wrapped: the type wrapped in case of compound types.
# payload: values of the type, two payloads of the same type must be
# combinable with the binOp binary operation.
# binOp: binary operation that merge two payloads of the same type.
functor ? defaultFunctor name
}:
{ _type = "option-type";
inherit name check merge getSubOptions getSubModules substSubModules;
inherit name check merge getSubOptions getSubModules substSubModules typeMerge functor;
description = if description == null then name else description;
};
@ -52,29 +99,39 @@ rec {
};
bool = mkOptionType {
name = "boolean";
name = "bool";
description = "boolean";
check = isBool;
merge = mergeEqualOption;
};
int = mkOptionType {
name = "integer";
int = mkOptionType rec {
name = "int";
description = "integer";
check = isInt;
merge = mergeOneOption;
};
str = mkOptionType {
name = "string";
name = "str";
description = "string";
check = isString;
merge = mergeOneOption;
};
# Merge multiple definitions by concatenating them (with the given
# separator between the values).
separatedString = sep: mkOptionType {
name = "string";
separatedString = sep: mkOptionType rec {
name = "separatedString";
description = "string";
check = isString;
merge = loc: defs: concatStringsSep sep (getValues defs);
functor = (defaultFunctor name) // {
payload = sep;
binOp = sepLhs: sepRhs:
if sepLhs == sepRhs then sepLhs
else null;
};
};
lines = separatedString "\n";
@ -86,7 +143,8 @@ rec {
string = separatedString "";
attrs = mkOptionType {
name = "attribute set";
name = "attrs";
description = "attribute set";
check = isAttrs;
merge = loc: foldl' (res: def: mergeAttrs res def.value) {};
};
@ -114,8 +172,9 @@ rec {
# drop this in the future:
list = builtins.trace "`types.list' is deprecated; use `types.listOf' instead" types.listOf;
listOf = elemType: mkOptionType {
name = "list of ${elemType.name}s";
listOf = elemType: mkOptionType rec {
name = "listOf";
description = "list of ${elemType.description}s";
check = isList;
merge = loc: defs:
map (x: x.value) (filter (x: x ? value) (concatLists (imap (n: def:
@ -132,10 +191,12 @@ rec {
getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["*"]);
getSubModules = elemType.getSubModules;
substSubModules = m: listOf (elemType.substSubModules m);
functor = (defaultFunctor name) // { wrapped = elemType; };
};
attrsOf = elemType: mkOptionType {
name = "attribute set of ${elemType.name}s";
attrsOf = elemType: mkOptionType rec {
name = "attrsOf";
description = "attribute set of ${elemType.description}s";
check = isAttrs;
merge = loc: defs:
mapAttrs (n: v: v.value) (filterAttrs (n: v: v ? value) (zipAttrsWith (name: defs:
@ -147,6 +208,7 @@ rec {
getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name>"]);
getSubModules = elemType.getSubModules;
substSubModules = m: attrsOf (elemType.substSubModules m);
functor = (defaultFunctor name) // { wrapped = elemType; };
};
# List or attribute set of ...
@ -165,18 +227,21 @@ rec {
def;
listOnly = listOf elemType;
attrOnly = attrsOf elemType;
in mkOptionType {
name = "list or attribute set of ${elemType.name}s";
in mkOptionType rec {
name = "loaOf";
description = "list or attribute set of ${elemType.description}s";
check = x: isList x || isAttrs x;
merge = loc: defs: attrOnly.merge loc (imap convertIfList defs);
getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name?>"]);
getSubModules = elemType.getSubModules;
substSubModules = m: loaOf (elemType.substSubModules m);
functor = (defaultFunctor name) // { wrapped = elemType; };
};
# List or element of ...
loeOf = elemType: mkOptionType {
name = "element or list of ${elemType.name}s";
loeOf = elemType: mkOptionType rec {
name = "loeOf";
description = "element or list of ${elemType.description}s";
check = x: isList x || elemType.check x;
merge = loc: defs:
let
@ -189,18 +254,22 @@ rec {
else if !isString res then
throw "The option `${showOption loc}' does not have a string value, in ${showFiles (getFiles defs)}."
else res;
functor = (defaultFunctor name) // { wrapped = elemType; };
};
uniq = elemType: mkOptionType {
inherit (elemType) name check;
uniq = elemType: mkOptionType rec {
name = "uniq";
inherit (elemType) description check;
merge = mergeOneOption;
getSubOptions = elemType.getSubOptions;
getSubModules = elemType.getSubModules;
substSubModules = m: uniq (elemType.substSubModules m);
functor = (defaultFunctor name) // { wrapped = elemType; };
};
nullOr = elemType: mkOptionType {
name = "null or ${elemType.name}";
nullOr = elemType: mkOptionType rec {
name = "nullOr";
description = "null or ${elemType.description}";
check = x: x == null || elemType.check x;
merge = loc: defs:
let nrNulls = count (def: def.value == null) defs; in
@ -211,6 +280,7 @@ rec {
getSubOptions = elemType.getSubOptions;
getSubModules = elemType.getSubModules;
substSubModules = m: nullOr (elemType.substSubModules m);
functor = (defaultFunctor name) // { wrapped = elemType; };
};
submodule = opts:
@ -236,6 +306,12 @@ rec {
args = { name = ""; }; }).options;
getSubModules = opts';
substSubModules = m: submodule m;
functor = (defaultFunctor name) // {
# Merging of submodules is done as part of mergeOptionDecls, as we have to annotate
# each submodule with its location.
payload = [];
binOp = lhs: rhs: [];
};
};
enum = values:
@ -245,23 +321,35 @@ rec {
else if builtins.isInt v then builtins.toString v
else ''<${builtins.typeOf v}>'';
in
mkOptionType {
name = "one of ${concatMapStringsSep ", " show values}";
mkOptionType rec {
name = "enum";
description = "one of ${concatMapStringsSep ", " show values}";
check = flip elem values;
merge = mergeOneOption;
functor = (defaultFunctor name) // { payload = values; binOp = a: b: unique (a ++ b); };
};
either = t1: t2: mkOptionType {
name = "${t1.name} or ${t2.name}";
either = t1: t2: mkOptionType rec {
name = "either";
description = "${t1.description} or ${t2.description}";
check = x: t1.check x || t2.check x;
merge = mergeOneOption;
typeMerge = f':
let mt1 = t1.typeMerge (elemAt f'.wrapped 0).functor;
mt2 = t2.typeMerge (elemAt f'.wrapped 1).functor;
in
if (name == f'.name) && (mt1 != null) && (mt2 != null)
then functor.type mt1 mt2
else null;
functor = (defaultFunctor name) // { wrapped = [ t1 t2 ]; };
};
# Obsolete alternative to configOf. It takes its option
# declarations from the options attribute of containing option
# declaration.
optionSet = mkOptionType {
name = builtins.trace "types.optionSet is deprecated; use types.submodule instead" "option set";
name = builtins.trace "types.optionSet is deprecated; use types.submodule instead" "optionSet";
description = "option set";
};
# Augment the given type with an additional type check function.

View File

@ -42,29 +42,30 @@ construction, so without them,
elements.)</para>
<para>Even greater customisation is possible using the function
<varname>overrideDerivation</varname>. While the
<varname>overrideAttrs</varname>. While the
<varname>override</varname> mechanism above overrides the arguments of
a package function, <varname>overrideDerivation</varname> allows
changing the <emphasis>result</emphasis> of the function. This
permits changing any aspect of the package, such as the source code.
a package function, <varname>overrideAttrs</varname> allows
changing the <emphasis>attributes</emphasis> passed to <literal>mkDerivation</literal>.
This permits changing any aspect of the package, such as the source code.
For instance, if you want to override the source code of Emacs, you
can say:
<programlisting>
environment.systemPackages =
[ (pkgs.lib.overrideDerivation pkgs.emacs (attrs: {
name = "emacs-25.0-pre";
src = /path/to/my/emacs/tree;
}))
];
environment.systemPackages = [
(pkgs.emacs.overrideAttrs (oldAttrs: {
name = "emacs-25.0-pre";
src = /path/to/my/emacs/tree;
}))
];
</programlisting>
Here, <varname>overrideDerivation</varname> takes the Nix derivation
Here, <varname>overrideAttrs</varname> takes the Nix derivation
specified by <varname>pkgs.emacs</varname> and produces a new
derivation in which the originals <literal>name</literal> and
<literal>src</literal> attribute have been replaced by the given
values. The original attributes are accessible via
<varname>attrs</varname>.</para>
values by re-calling <literal>stdenv.mkDerivation</literal>.
The original attributes are accessible via the function argument,
which is conventionally named <varname>oldAttrs</varname>.</para>
<para>The overrides shown above are not global. They do not affect
the original package; other packages in Nixpkgs continue to depend on

View File

@ -65,4 +65,92 @@ options = {
</para>
<section xml:id="sec-option-declarations-eot"><title>Extensible Option
Types</title>
<para>Extensible option types is a feature that allow to extend certain types
declaration through multiple module files.
This feature only work with a restricted set of types, namely
<literal>enum</literal> and <literal>submodules</literal> and any composed
forms of them.</para>
<para>Extensible option types can be used for <literal>enum</literal> options
that affects multiple modules, or as an alternative to related
<literal>enable</literal> options.</para>
<para>As an example, we will take the case of display managers. There is a
central display manager module for generic display manager options and a
module file per display manager backend (slim, kdm, gdm ...).
</para>
<para>There are two approach to this module structure:
<itemizedlist>
<listitem><para>Managing the display managers independently by adding an
enable option to every display manager module backend. (NixOS)</para>
</listitem>
<listitem><para>Managing the display managers in the central module by
adding an option to select which display manager backend to use.</para>
</listitem>
</itemizedlist>
</para>
<para>Both approachs have problems.</para>
<para>Making backends independent can quickly become hard to manage. For
display managers, there can be only one enabled at a time, but the type
system can not enforce this restriction as there is no relation between
each backend <literal>enable</literal> option. As a result, this restriction
has to be done explicitely by adding assertions in each display manager
backend module.</para>
<para>On the other hand, managing the display managers backends in the
central module will require to change the central module option every time
a new backend is added or removed.</para>
<para>By using extensible option types, it is possible to create a placeholder
option in the central module (<xref linkend='ex-option-declaration-eot-service'
/>), and to extend it in each backend module (<xref
linkend='ex-option-declaration-eot-backend-slim' />, <xref
linkend='ex-option-declaration-eot-backend-kdm' />).</para>
<para>As a result, <literal>displayManager.enable</literal> option values can
be added without changing the main service module file and the type system
automatically enforce that there can only be a single display manager
enabled.</para>
<example xml:id='ex-option-declaration-eot-service'><title>Extensible type
placeholder in the service module</title>
<screen>
services.xserver.displayManager.enable = mkOption {
description = "Display manager to use";
type = with types; nullOr (enum [ ]);
};</screen></example>
<example xml:id='ex-option-declaration-eot-backend-slim'><title>Extending
<literal>services.xserver.displayManager.enable</literal> in the
<literal>slim</literal> module</title>
<screen>
services.xserver.displayManager.enable = mkOption {
type = with types; nullOr (enum [ "slim" ]);
};</screen></example>
<example xml:id='ex-option-declaration-eot-backend-kdm'><title>Extending
<literal>services.foo.backend</literal> in the <literal>kdm</literal>
module</title>
<screen>
services.xserver.displayManager.enable = mkOption {
type = with types; nullOr (enum [ "kdm" ]);
};</screen></example>
<para>The placeholder declaration is a standard <literal>mkOption</literal>
declaration, but it is important that extensible option declarations only use
the <literal>type</literal> argument.</para>
<para>Extensible option types work with any of the composed variants of
<literal>enum</literal> such as
<literal>with types; nullOr (enum [ "foo" "bar" ])</literal>
or <literal>with types; listOf (enum [ "foo" "bar" ])</literal>.</para>
</section>
</section>

View File

@ -62,23 +62,45 @@
<listitem><para>A string. Multiple definitions are concatenated with a
collon <literal>":"</literal>.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>types.separatedString</varname>
<replaceable>sep</replaceable></term>
<listitem><para>A string with a custom separator
<replaceable>sep</replaceable>, e.g. <literal>types.separatedString
"|"</literal>.</para></listitem>
</varlistentry>
</variablelist>
</section>
<section><title>Value Types</title>
<para>Value types are type that take a value parameter. The only value type
in the library is <literal>enum</literal>.</para>
<variablelist>
<varlistentry>
<term><varname>types.enum</varname> <replaceable>l</replaceable></term>
<listitem><para>One element of the list <replaceable>l</replaceable>, e.g.
<literal>types.enum [ "left" "right" ]</literal>. Multiple definitions
cannot be merged.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>types.separatedString</varname>
<replaceable>sep</replaceable></term>
<listitem><para>A string with a custom separator
<replaceable>sep</replaceable>, e.g. <literal>types.separatedString
"|"</literal>.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>types.submodule</varname> <replaceable>o</replaceable></term>
<listitem><para>A set of sub options <replaceable>o</replaceable>.
<replaceable>o</replaceable> can be an attribute set or a function
returning an attribute set. Submodules are used in composed types to
create modular options. Submodule are detailed in <xref
linkend='section-option-types-submodule' />.</para></listitem>
</varlistentry>
</variablelist>
</section>
<section><title>Composed Types</title>
<para>Composed types allow to create complex types by taking another type(s)
or value(s) as parameter(s).
It is possible to compose types multiple times, e.g. <literal>with types;
nullOr (enum [ "left" "right" ])</literal>.</para>
<para>Composed types are types that take a type as parameter. <literal>listOf
int</literal> and <literal>either int str</literal> are examples of
composed types.</para>
<variablelist>
<varlistentry>
@ -99,12 +121,6 @@
type. Multiple definitions are merged according to the
value.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>types.loeOf</varname> <replaceable>t</replaceable></term>
<listitem><para>A list or an element of <replaceable>t</replaceable> type.
Multiple definitions are merged according to the
values.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>types.nullOr</varname> <replaceable>t</replaceable></term>
<listitem><para><literal>null</literal> or type
@ -117,12 +133,6 @@
merged. It is used to ensure option definitions are declared only
once.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>types.enum</varname> <replaceable>l</replaceable></term>
<listitem><para>One element of the list <replaceable>l</replaceable>, e.g.
<literal>types.enum [ "left" "right" ]</literal>. Multiple definitions
cannot be merged</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>types.either</varname> <replaceable>t1</replaceable>
<replaceable>t2</replaceable></term>
@ -131,14 +141,6 @@
str</literal>. Multiple definitions cannot be
merged.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>types.submodule</varname> <replaceable>o</replaceable></term>
<listitem><para>A set of sub options <replaceable>o</replaceable>.
<replaceable>o</replaceable> can be an attribute set or a function
returning an attribute set. Submodules are used in composed types to
create modular options. Submodule are detailed in <xref
linkend='section-option-types-submodule' />.</para></listitem>
</varlistentry>
</variablelist>
</section>
@ -197,7 +199,6 @@ options.mod = mkOption {
type = with types; listOf (submodule modOptions);
};</screen></example>
<section><title>Composed with <literal>listOf</literal></title>
<para>When composed with <literal>listOf</literal>, submodule allows multiple
@ -323,9 +324,13 @@ code before creating a new type.</para>
<variablelist>
<varlistentry>
<term><varname>name</varname></term>
<listitem><para>A string representation of the type function name, name
usually changes accordingly parameters passed to
types.</para></listitem>
<listitem><para>A string representation of the type function
name.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>definition</varname></term>
<listitem><para>Description of the type used in documentation. Give
information of the type and any of its arguments.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>check</varname></term>
@ -388,6 +393,53 @@ code before creating a new type.</para>
type parameter, this function should be defined as <literal>m:
composedType (elemType.substSubModules m)</literal>.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>typeMerge</varname></term>
<listitem><para>A function to merge multiple type declarations. Takes the
type to merge <literal>functor</literal> as parameter. A
<literal>null</literal> return value means that type cannot be
merged.</para>
<variablelist>
<varlistentry>
<term><replaceable>f</replaceable></term>
<listitem><para>The type to merge
<literal>functor</literal>.</para></listitem>
</varlistentry>
</variablelist>
<para>Note: There is a generic <literal>defaultTypeMerge</literal> that
work with most of value and composed types.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>functor</varname></term>
<listitem><para>An attribute set representing the type. It is used for type
operations and has the following keys:</para>
<variablelist>
<varlistentry>
<term><varname>type</varname></term>
<listitem><para>The type function.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>wrapped</varname></term>
<listitem><para>Holds the type parameter for composed types.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>payload</varname></term>
<listitem><para>Holds the value parameter for value types.
The types that have a <literal>payload</literal> are the
<literal>enum</literal>, <literal>separatedString</literal> and
<literal>submodule</literal> types.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>binOp</varname></term>
<listitem><para>A binary operation that can merge the payloads of two
same types. Defined as a function that take two payloads as
parameters and return the payloads merged.</para></listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
</variablelist>
</section>

View File

@ -32,7 +32,7 @@ running NixOS system through several other means:
<listitem>
<para>Using AMIs for Amazons EC2. To find one for your region
and instance type, please refer to the <link
xlink:href="https://github.com/NixOS/nixops/blob/master/nix/ec2-amis.nix">list
xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/virtualisation/ec2-amis.nix">list
of most recent AMIs</link>.</para>
</listitem>
<listitem>

View File

@ -75,7 +75,10 @@ following incompatible changes:</para>
<itemizedlist>
<listitem>
<para></para>
<para>Module type system have a new extensible option types feature that
allow to extend certain types, such as enum, through multiple option
declarations of the same option across multiple modules.
</para>
</listitem>
</itemizedlist>

View File

@ -17,12 +17,10 @@ with lib;
where tools such as <command>gdb</command> can find them.
If you need debug symbols for a package that doesn't
provide them by default, you can enable them as follows:
<!-- FIXME: ugly, see #10721 -->
<programlisting>
nixpkgs.config.packageOverrides = pkgs: {
hello = pkgs.lib.overrideDerivation pkgs.hello (attrs: {
outputs = attrs.outputs or ["out"] ++ ["debug"];
buildInputs = attrs.buildInputs ++ [&lt;nixpkgs/pkgs/build-support/setup-hooks/separate-debug-info.sh>];
hello = pkgs.hello.overrideAttrs (oldAttrs: {
separateDebugInfo = true;
});
};
</programlisting>

View File

@ -41,7 +41,7 @@ in
strings. The latter is concatenated, interspersed with colon
characters.
'';
type = types.attrsOf (types.loeOf types.str);
type = with types; attrsOf (either str (listOf str));
apply = mapAttrs (n: v: if isList v then concatStringsSep ":" v else v);
};

View File

@ -23,7 +23,7 @@ in
strings. The latter is concatenated, interspersed with colon
characters.
'';
type = types.attrsOf (types.loeOf types.str);
type = with types; attrsOf (either str (listOf str));
apply = mapAttrs (n: v: if isList v then concatStringsSep ":" v else v);
};

View File

@ -256,7 +256,7 @@ if isOption opt then
// optionalAttrs (opt ? default) { inherit (opt) default; }
// optionalAttrs (opt ? example) { inherit (opt) example; }
// optionalAttrs (opt ? description) { inherit (opt) description; }
// optionalAttrs (opt ? type) { typename = opt.type.name; }
// optionalAttrs (opt ? type) { typename = opt.type.description; }
// optionalAttrs (opt ? options) { inherit (opt) options; }
// {
# to disambiguate the xml output.

View File

@ -277,6 +277,8 @@
gitlab-runner = 257;
postgrey = 258;
hound = 259;
leaps = 260;
ipfs = 261;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
@ -524,6 +526,8 @@
gitlab-runner = 257;
postgrey = 258;
hound = 259;
leaps = 260;
ipfs = 261;
# When adding a gid, make sure it doesn't match an existing
# uid. Users and groups with the same name should have equal

View File

@ -61,6 +61,7 @@
./misc/nixpkgs.nix
./misc/passthru.nix
./misc/version.nix
./programs/adb.nix
./programs/atop.nix
./programs/bash/bash.nix
./programs/blcr.nix
@ -250,6 +251,7 @@
./services/misc/gitolite.nix
./services/misc/gpsd.nix
./services/misc/ihaskell.nix
./services/misc/leaps.nix
./services/misc/mantisbt.nix
./services/misc/mathics.nix
./services/misc/matrix-synapse.nix
@ -316,6 +318,7 @@
./services/monitoring/zabbix-server.nix
./services/network-filesystems/cachefilesd.nix
./services/network-filesystems/drbd.nix
./services/network-filesystems/ipfs.nix
./services/network-filesystems/netatalk.nix
./services/network-filesystems/nfsd.nix
./services/network-filesystems/openafs-client/default.nix

View File

@ -0,0 +1,30 @@
{ config, lib, pkgs, ... }:
with lib;
{
meta.maintainers = [ maintainers.mic92 ];
###### interface
options = {
programs.adb = {
enable = mkOption {
default = false;
example = true;
type = types.bool;
description = ''
Whether to configure system to use Android Debug Bridge (adb).
To grant access to a user, it must be part of adbusers group:
<code>users.extraUsers.alice.extraGroups = ["adbusers"];</code>
'';
};
};
};
###### implementation
config = mkIf config.programs.adb.enable {
services.udev.packages = [ pkgs.android-udev-rules ];
environment.systemPackages = [ pkgs.androidenv.platformTools ];
users.extraGroups.adbusers = {};
};
}

View File

@ -356,14 +356,14 @@ https://nixos.org/nixpkgs/manual/#sec-modify-via-packageOverrides
<programlisting><![CDATA[
{ pkgs ? import <nixpkgs> {} }:
let
myEmacs = pkgs.lib.overrideDerivation (pkgs.emacs.override {
myEmacs = (pkgs.emacs.override {
# Use gtk3 instead of the default gtk2
withGTK3 = true;
withGTK2 = false;
}) (attrs: {
}).overrideAttrs (attrs: {
# I don't want emacs.desktop file because I only use
# emacsclient.
postInstall = attrs.postInstall + ''
postInstall = (attrs.postInstall or "") + ''
rm $out/share/applications/emacs.desktop
'';
});

View File

@ -21,8 +21,7 @@ in
language = mkOption {
default = "English";
type = types.addCheck types.str
(lang: elem lang [ "English" "Spanish" "Russian" "Serbian" "Turkish" ]);
type = types.enum [ "English" "Spanish" "Russian" "Serbian" "Turkish" ];
description = "The language of bot messages: English, Spanish, Russian, Serbian or Turkish.";
};

View File

@ -55,9 +55,9 @@ let
levelOption = mkOption {
default = "server";
type = types.str;
type = types.enum [ "workstation" "server" "paranoid" ];
description = ''
Set the logcheck level. Either "workstation", "server", or "paranoid".
Set the logcheck level.
'';
};

View File

@ -0,0 +1,62 @@
{ config, pkgs, lib, ... } @ args:
with lib;
let
cfg = config.services.leaps;
stateDir = "/var/lib/leaps/";
in
{
options = {
services.leaps = {
enable = mkEnableOption "leaps";
port = mkOption {
type = types.int;
default = 8080;
description = "A port where leaps listens for incoming http requests";
};
address = mkOption {
default = "";
type = types.str;
example = "127.0.0.1";
description = "Hostname or IP-address to listen to. By default it will listen on all interfaces.";
};
path = mkOption {
default = "/";
type = types.path;
description = "Subdirectory used for reverse proxy setups";
};
};
};
config = mkIf cfg.enable {
users = {
users.leaps = {
uid = config.ids.uids.leaps;
description = "Leaps server user";
group = "leaps";
home = stateDir;
createHome = true;
};
groups.leaps = {
gid = config.ids.gids.leaps;
};
};
systemd.services.leaps = {
description = "leaps service";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
User = "leaps";
Group = "leaps";
Restart = "on-failure";
WorkingDirectory = stateDir;
PrivateTmp = true;
ExecStart = "${pkgs.leaps.bin}/bin/leaps -path ${toString cfg.path} -address ${cfg.address}:${toString cfg.port}";
};
};
};
}

View File

@ -9,11 +9,15 @@ let
mkListener = l: ''{port: ${toString l.port}, bind_address: "${l.bind_address}", type: ${l.type}, tls: ${fromBool l.tls}, x_forwarded: ${fromBool l.x_forwarded}, resources: [${concatStringsSep "," (map mkResource l.resources)}]}'';
fromBool = x: if x then "true" else "false";
configFile = pkgs.writeText "homeserver.yaml" ''
${optionalString (cfg.tls_certificate_path != null) ''
tls_certificate_path: "${cfg.tls_certificate_path}"
''}
${optionalString (cfg.tls_private_key_path != null) ''
tls_private_key_path: "${cfg.tls_private_key_path}"
''}
${optionalString (cfg.tls_dh_params_path != null) ''
tls_dh_params_path: "${cfg.tls_dh_params_path}"
''}
no_tls: ${fromBool cfg.no_tls}
${optionalString (cfg.bind_port != null) ''
bind_port: ${toString cfg.bind_port}
@ -146,8 +150,9 @@ in {
'';
};
tls_certificate_path = mkOption {
type = types.str;
default = "/var/lib/matrix-synapse/homeserver.tls.crt";
type = types.nullOr types.str;
default = null;
example = "/var/lib/matrix-synapse/homeserver.tls.crt";
description = ''
PEM encoded X509 certificate for TLS.
You can replace the self-signed certificate that synapse
@ -158,16 +163,17 @@ in {
};
tls_private_key_path = mkOption {
type = types.nullOr types.str;
default = "/var/lib/matrix-synapse/homeserver.tls.key";
example = null;
default = null;
example = "/var/lib/matrix-synapse/homeserver.tls.key";
description = ''
PEM encoded private key for TLS. Specify null if synapse is not
speaking TLS directly.
'';
};
tls_dh_params_path = mkOption {
type = types.str;
default = "/var/lib/matrix-synapse/homeserver.tls.dh";
type = types.nullOr types.str;
default = null;
example = "/var/lib/matrix-synapse/homeserver.tls.dh";
description = ''
PEM dh parameters for ephemeral keys
'';
@ -557,12 +563,10 @@ in {
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
preStart = ''
if ! test -e /var/lib/matrix-synapse; then
mkdir -p /var/lib/matrix-synapse
chmod 700 /var/lib/matrix-synapse
chown -R matrix-synapse:matrix-synapse /var/lib/matrix-synapse
${cfg.package}/bin/homeserver --config-path ${configFile} --keys-directory /var/lib/matrix-synapse/ --generate-keys
fi
${cfg.package}/bin/homeserver \
--config-path ${configFile} \
--keys-directory /var/lib/matrix-synapse \
--generate-keys
'';
serviceConfig = {
Type = "simple";
@ -570,7 +574,7 @@ in {
Group = "matrix-synapse";
WorkingDirectory = "/var/lib/matrix-synapse";
PermissionsStartOnly = true;
ExecStart = "${cfg.package}/bin/homeserver --config-path ${configFile}";
ExecStart = "${cfg.package}/bin/homeserver --config-path ${configFile} --keys-directory /var/lib/matrix-synapse";
};
};
};

View File

@ -91,7 +91,8 @@ in
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
ExecStart = "${pkgs.nodePackages.parsoid}/lib/node_modules/parsoid/api/server.js -c ${confFile} -n ${toString cfg.workers}";
User = "nobody";
ExecStart = "${pkgs.nodePackages.parsoid}/lib/node_modules/parsoid/bin/server.js -c ${confFile} -n ${toString cfg.workers}";
};
};

View File

@ -292,7 +292,7 @@ in {
};
allowedClientIDs = mkOption {
type = with types; loeOf (either (enum ["all" "none"]) str);
type = with types; either str (listOf str);
default = [];
example = [ "[Tt]ask [2-9]+" ];
description = ''
@ -306,7 +306,7 @@ in {
};
disallowedClientIDs = mkOption {
type = with types; loeOf (either (enum ["all" "none"]) str);
type = with types; either str (listOf str);
default = [];
example = [ "[Tt]ask [2-9]+" ];
description = ''

View File

@ -0,0 +1,111 @@
{ config, lib, pkgs, ... }:
with lib;
let
inherit (pkgs) ipfs;
cfg = config.services.ipfs;
ipfsFlags = ''${if cfg.autoMigrate then "--migrate" else ""} ${if cfg.enableGC then "--enable-gc" else ""} ${toString cfg.extraFlags}'';
in
{
###### interface
options = {
services.ipfs = {
enable = mkEnableOption "Interplanetary File System";
user = mkOption {
type = types.str;
default = "ipfs";
description = "User under which the IPFS daemon runs";
};
group = mkOption {
type = types.str;
default = "ipfs";
description = "Group under which the IPFS daemon runs";
};
dataDir = mkOption {
type = types.str;
default = "/var/lib/ipfs";
description = "The data dir for IPFS";
};
autoMigrate = mkOption {
type = types.bool;
default = false;
description = ''
Whether IPFS should try to migrate the file system automatically.
'';
};
enableGC = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable automatic garbage collection.
'';
};
extraFlags = mkOption {
type = types.listOf types.str;
description = "Extra flags passed to the IPFS daemon";
default = [];
};
};
};
###### implementation
config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.ipfs ];
users.extraUsers = mkIf (cfg.user == "ipfs") {
ipfs = {
group = cfg.group;
home = cfg.dataDir;
createHome = false;
uid = config.ids.uids.ipfs;
description = "IPFS daemon user";
};
};
users.extraGroups = mkIf (cfg.group == "ipfs") {
ipfs = {
gid = config.ids.gids.ipfs;
};
};
systemd.services.ipfs = {
description = "IPFS Daemon";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" "local-fs.target" ];
path = [ pkgs.ipfs pkgs.su pkgs.bash ];
preStart =
''
install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.dataDir}
if [[ ! -d ${cfg.dataDir}/.ipfs ]]; then
cd ${cfg.dataDir}
${pkgs.su}/bin/su -s ${pkgs.bash}/bin/sh ${cfg.user} -c "${ipfs}/bin/ipfs init"
fi
'';
serviceConfig = {
ExecStart = "${ipfs}/bin/ipfs daemon ${ipfsFlags}";
User = cfg.user;
Group = cfg.group;
PermissionsStartOnly = true;
};
};
};
}

View File

@ -7,11 +7,6 @@ let
cfg = config.services.bitlbee;
bitlbeeUid = config.ids.uids.bitlbee;
authModeCheck = v:
v == "Open" ||
v == "Closed" ||
v == "Registered";
bitlbeeConfig = pkgs.writeText "bitlbee.conf"
''
[settings]
@ -67,7 +62,7 @@ in
authMode = mkOption {
default = "Open";
type = types.addCheck types.str authModeCheck;
type = types.enum [ "Open" "Closed" "Registered" ];
description = ''
The following authentication modes are available:
Open -- Accept connections from anyone, use NickServ for user authentication.

View File

@ -36,7 +36,7 @@ let
echo \'\'
${concatStringsSep "\n" (mapAttrsToList (k: v:
optionalString (v.hostname != "")
"echo $(${pkgs.cjdns}/bin/publictoip6 ${x.key}) ${x.host}")
"echo $(${pkgs.cjdns}/bin/publictoip6 ${v.publicKey}) ${v.hostname}")
(cfg.ETHInterface.connectTo // cfg.UDPInterface.connectTo))}
echo \'\'
'');
@ -245,7 +245,10 @@ in
serviceConfig = {
Type = "forking";
Restart = "on-failure";
CapabilityBoundingSet = "CAP_NET_ADMIN CAP_NET_RAW";
AmbientCapabilities = "CAP_NET_ADMIN CAP_NET_RAW";
ProtectSystem = "full";
MemoryDenyWriteExecute = true;
ProtectHome = true;
PrivateTmp = true;
};

View File

@ -5,15 +5,25 @@ let
apparmorEnabled = config.security.apparmor.enable;
dnscrypt-proxy = pkgs.dnscrypt-proxy;
cfg = config.services.dnscrypt-proxy;
stateDirectory = "/var/lib/dnscrypt-proxy";
localAddress = "${cfg.localAddress}:${toString cfg.localPort}";
daemonArgs =
[ "--local-address=${localAddress}"
(optionalString cfg.tcpOnly "--tcp-only")
(optionalString cfg.ephemeralKeys "-E")
]
++ resolverArgs;
# The minisign public key used to sign the upstream resolver list.
# This is somewhat more flexible than preloading the key as an
# embedded string.
upstreamResolverListPubKey = pkgs.fetchurl {
url = https://raw.githubusercontent.com/jedisct1/dnscrypt-proxy/master/minisign.pub;
sha256 = "18lnp8qr6ghfc2sd46nn1rhcpr324fqlvgsp4zaigw396cd7vnnh";
};
# Internal flag indicating whether the upstream resolver list is used
useUpstreamResolverList = cfg.resolverList == null && cfg.customResolver == null;
resolverList =
if (cfg.resolverList != null)
then cfg.resolverList
else "${stateDirectory}/dnscrypt-resolvers.csv";
resolverArgs = if (cfg.customResolver != null)
then
@ -22,9 +32,16 @@ let
"--provider-key=${cfg.customResolver.key}"
]
else
[ "--resolvers-list=${cfg.resolverList}"
"--resolver-name=${toString cfg.resolverName}"
[ "--resolvers-list=${resolverList}"
"--resolver-name=${cfg.resolverName}"
];
# The final command line arguments passed to the daemon
daemonArgs =
[ "--local-address=${localAddress}" ]
++ optional cfg.tcpOnly "--tcp-only"
++ optional cfg.ephemeralKeys "-E"
++ resolverArgs;
in
{
@ -66,24 +83,20 @@ in
default = "dnscrypt.eu-nl";
type = types.nullOr types.str;
description = ''
The name of the upstream DNSCrypt resolver to use, taken from the
list named in the <literal>resolverList</literal> option.
The default resolver is located in Holland, supports DNS security
extensions, and claims to not keep logs.
The name of the upstream DNSCrypt resolver to use, taken from
<filename>${resolverList}</filename>. The default resolver is
located in Holland, supports DNS security extensions, and
<emphasis>claims</emphasis> to not keep logs.
'';
};
resolverList = mkOption {
default = null;
type = types.nullOr types.path;
description = ''
The list of upstream DNSCrypt resolvers. By default, we use the most
recent list published by upstream.
List of DNSCrypt resolvers. The default is to use the list of
public resolvers provided by upstream.
'';
example = literalExample "${pkgs.dnscrypt-proxy}/share/dnscrypt-proxy/dnscrypt-resolvers.csv";
default = pkgs.fetchurl {
url = https://raw.githubusercontent.com/jedisct1/dnscrypt-proxy/master/dnscrypt-resolvers.csv;
sha256 = "1i9wzw4zl052h5nyp28bwl8d66cgj0awvjhw5wgwz0warkjl1g8g";
};
defaultText = "pkgs.fetchurl { url = ...; sha256 = ...; }";
};
customResolver = mkOption {
@ -150,7 +163,7 @@ in
}
];
security.apparmor.profiles = mkIf apparmorEnabled (singleton (pkgs.writeText "apparmor-dnscrypt-proxy" ''
security.apparmor.profiles = optional apparmorEnabled (pkgs.writeText "apparmor-dnscrypt-proxy" ''
${dnscrypt-proxy}/bin/dnscrypt-proxy {
/dev/null rw,
/dev/urandom r,
@ -177,9 +190,9 @@ in
${getLib pkgs.lz4}/lib/liblz4.so.* mr,
${getLib pkgs.attr}/lib/libattr.so.* mr,
${cfg.resolverList} r,
${resolverList} r,
}
''));
'');
users.users.dnscrypt-proxy = {
description = "dnscrypt-proxy daemon user";
@ -188,11 +201,61 @@ in
};
users.groups.dnscrypt-proxy = {};
systemd.services.init-dnscrypt-proxy-statedir = optionalAttrs useUpstreamResolverList {
description = "Initialize dnscrypt-proxy state directory";
script = ''
mkdir -pv ${stateDirectory}
chown -c dnscrypt-proxy:dnscrypt-proxy ${stateDirectory}
cp --preserve=timestamps -uv \
${pkgs.dnscrypt-proxy}/share/dnscrypt-proxy/dnscrypt-resolvers.csv \
${stateDirectory}
'';
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
};
};
systemd.services.update-dnscrypt-resolvers = optionalAttrs useUpstreamResolverList {
description = "Update list of DNSCrypt resolvers";
requires = [ "init-dnscrypt-proxy-statedir.service" ];
after = [ "init-dnscrypt-proxy-statedir.service" ];
path = with pkgs; [ curl minisign ];
script = ''
cd ${stateDirectory}
curl -fSsL -o dnscrypt-resolvers.csv.tmp \
https://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-resolvers.csv
curl -fSsL -o dnscrypt-resolvers.csv.minisig.tmp \
https://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-resolvers.csv.minisig
mv dnscrypt-resolvers.csv.minisig{.tmp,}
minisign -q -V -p ${upstreamResolverListPubKey} \
-m dnscrypt-resolvers.csv.tmp -x dnscrypt-resolvers.csv.minisig
mv dnscrypt-resolvers.csv{.tmp,}
'';
serviceConfig = {
PrivateTmp = true;
PrivateDevices = true;
ProtectHome = true;
ProtectSystem = true;
};
};
systemd.timers.update-dnscrypt-resolvers = optionalAttrs useUpstreamResolverList {
timerConfig = {
OnBootSec = "5min";
OnUnitActiveSec = "6h";
};
wantedBy = [ "timers.target" ];
};
systemd.sockets.dnscrypt-proxy = {
description = "dnscrypt-proxy listening socket";
socketConfig = {
ListenStream = "${localAddress}";
ListenDatagram = "${localAddress}";
ListenStream = localAddress;
ListenDatagram = localAddress;
};
wantedBy = [ "sockets.target" ];
};
@ -200,8 +263,13 @@ in
systemd.services.dnscrypt-proxy = {
description = "dnscrypt-proxy daemon";
after = [ "network.target" ] ++ optional apparmorEnabled "apparmor.service";
requires = [ "dnscrypt-proxy.socket "] ++ optional apparmorEnabled "apparmor.service";
after = [ "network.target" ]
++ optional apparmorEnabled "apparmor.service"
++ optional useUpstreamResolverList "init-dnscrypt-proxy-statedir.service";
requires = [ "dnscrypt-proxy.socket "]
++ optional apparmorEnabled "apparmor.service"
++ optional useUpstreamResolverList "init-dnscrypt-proxy-statedir.service";
serviceConfig = {
Type = "simple";

View File

@ -10,7 +10,7 @@ let
extip = "EXTIP=\$(${pkgs.curl.bin}/bin/curl -sf \"http://jsonip.com\" | ${pkgs.gawk}/bin/awk -F'\"' '{print $4}')";
toYesNo = b: if b then "yes" else "no";
toYesNo = b: if b then "true" else "false";
mkEndpointOpt = name: addr: port: {
enable = mkEnableOption name;
@ -31,6 +31,17 @@ let
};
};
mkKeyedEndpointOpt = name: addr: port: keyFile:
(mkEndpointOpt name addr port) // {
keys = mkOption {
type = types.str;
default = "";
description = ''
File to persist ${lib.toUpper name} keys.
'';
};
};
commonTunOpts = let
i2cpOpts = {
length = mkOption {
@ -63,19 +74,49 @@ let
};
} // mkEndpointOpt name "127.0.0.1" 0;
i2pdConf = pkgs.writeText "i2pd.conf" ''
ipv6 = ${toYesNo cfg.enableIPv6}
notransit = ${toYesNo cfg.notransit}
floodfill = ${toYesNo cfg.floodfill}
${if isNull cfg.port then "" else "port = ${toString cfg.port}"}
${flip concatMapStrings
(collect (proto: proto ? port && proto ? address && proto ? name) cfg.proto)
(proto: let portStr = toString proto.port; in ''
[${proto.name}]
address = ${proto.address}
port = ${toString proto.port}
enabled = ${toYesNo proto.enable}
'')
i2pdConf = pkgs.writeText "i2pd.conf"
''
ipv4 = ${toYesNo cfg.enableIPv4}
ipv6 = ${toYesNo cfg.enableIPv6}
notransit = ${toYesNo cfg.notransit}
floodfill = ${toYesNo cfg.floodfill}
netid = ${toString cfg.netid}
${if isNull cfg.bandwidth then "" else "bandwidth = ${toString cfg.bandwidth}" }
${if isNull cfg.port then "" else "port = ${toString cfg.port}"}
[limits]
transittunnels = ${toString cfg.limits.transittunnels}
[upnp]
enabled = ${toYesNo cfg.upnp.enable}
name = ${cfg.upnp.name}
[precomputation]
elgamal = ${toYesNo cfg.precomputation.elgamal}
[reseed]
verify = ${toYesNo cfg.reseed.verify}
file = ${cfg.reseed.file}
urls = ${builtins.concatStringsSep "," cfg.reseed.urls}
[addressbook]
defaulturl = ${cfg.addressbook.defaulturl}
subscriptions = ${builtins.concatStringsSep "," cfg.addressbook.subscriptions}
${flip concatMapStrings
(collect (proto: proto ? port && proto ? address && proto ? name) cfg.proto)
(proto: let portStr = toString proto.port; in
''
[${proto.name}]
enabled = ${toYesNo proto.enable}
address = ${proto.address}
port = ${toString proto.port}
${if proto ? keys then "keys = ${proto.keys}" else ""}
${if proto ? auth then "auth = ${toYesNo proto.auth}" else ""}
${if proto ? user then "user = ${proto.user}" else ""}
${if proto ? pass then "pass = ${proto.pass}" else ""}
${if proto ? outproxy then "outproxy = ${proto.outproxy}" else ""}
${if proto ? outproxyPort then "outproxyport = ${toString proto.outproxyPort}" else ""}
'')
}
'';
@ -114,7 +155,7 @@ let
i2pdSh = pkgs.writeScriptBin "i2pd" ''
#!/bin/sh
${if isNull cfg.extIp then extip else ""}
${pkgs.i2pd}/bin/i2pd --log=1 \
${pkgs.i2pd}/bin/i2pd \
--host=${if isNull cfg.extIp then "$EXTIP" else cfg.extIp} \
--conf=${i2pdConf} \
--tunconf=${i2pdTunnelConf}
@ -135,6 +176,8 @@ in
default = false;
description = ''
Enables I2Pd as a running service upon activation.
Please read http://i2pd.readthedocs.io/en/latest/ for further
configuration help.
'';
};
@ -162,6 +205,22 @@ in
'';
};
netid = mkOption {
type = types.int;
default = 2;
description = ''
I2P overlay netid.
'';
};
bandwidth = mkOption {
type = with types; nullOr int;
default = null;
description = ''
Set a router bandwidth limit integer in kbps or letters: L (32), O (256), P (2048), X (>9000)
'';
};
port = mkOption {
type = with types; nullOr int;
default = null;
@ -170,6 +229,14 @@ in
'';
};
enableIPv4 = mkOption {
type = types.bool;
default = true;
description = ''
Enables IPv4 connectivity. Enabled by default.
'';
};
enableIPv6 = mkOption {
type = types.bool;
default = false;
@ -178,16 +245,141 @@ in
'';
};
proto.http = mkEndpointOpt "http" "127.0.0.1" 7070;
upnp = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Enables UPnP.
'';
};
name = mkOption {
type = types.str;
default = "I2Pd";
description = ''
Name i2pd appears in UPnP forwardings list.
'';
};
};
precomputation.elgamal = mkOption {
type = types.bool;
default = false;
description = ''
Use ElGamal precomputated tables.
'';
};
reseed = {
verify = mkOption {
type = types.bool;
default = false;
description = ''
Request SU3 signature verification
'';
};
file = mkOption {
type = types.str;
default = "";
description = ''
Full path to SU3 file to reseed from
'';
};
urls = mkOption {
type = with types; listOf str;
default = [
"https://reseed.i2p-project.de/"
"https://i2p.mooo.com/netDb/"
"https://netdb.i2p2.no/"
"https://us.reseed.i2p2.no:444/"
"https://uk.reseed.i2p2.no:444/"
"https://i2p.manas.ca:8443/"
];
description = ''
Reseed URLs
'';
};
};
addressbook = {
defaulturl = mkOption {
type = types.str;
default = "http://joajgazyztfssty4w2on5oaqksz6tqoxbduy553y34mf4byv6gpq.b32.i2p/export/alive-hosts.txt";
description = ''
AddressBook subscription URL for initial setup
'';
};
subscriptions = mkOption {
type = with types; listOf str;
default = [
"http://inr.i2p/export/alive-hosts.txt"
"http://i2p-projekt.i2p/hosts.txt"
"http://stats.i2p/cgi-bin/newhosts.txt"
];
description = ''
AddressBook subscription URLs
'';
};
};
limits.transittunnels = mkOption {
type = types.int;
default = 2500;
description = ''
Maximum number of active transit sessions
'';
};
proto.http = (mkEndpointOpt "http" "127.0.0.1" 7070) // {
auth = mkOption {
type = types.bool;
default = false;
description = ''
Enable authentication for webconsole.
'';
};
user = mkOption {
type = types.str;
default = "i2pd";
description = ''
Username for webconsole access
'';
};
pass = mkOption {
type = types.str;
default = "i2pd";
description = ''
Password for webconsole access.
'';
};
};
proto.httpProxy = mkKeyedEndpointOpt "httpproxy" "127.0.0.1" 4446 "";
proto.socksProxy = (mkKeyedEndpointOpt "socksproxy" "127.0.0.1" 4447 "")
// {
outproxy = mkOption {
type = types.str;
default = "127.0.0.1";
description = "Upstream outproxy bind address.";
};
outproxyPort = mkOption {
type = types.int;
default = 4444;
description = "Upstream outproxy bind port.";
};
};
proto.sam = mkEndpointOpt "sam" "127.0.0.1" 7656;
proto.bob = mkEndpointOpt "bob" "127.0.0.1" 2827;
proto.i2cp = mkEndpointOpt "i2cp" "127.0.0.1" 7654;
proto.i2pControl = mkEndpointOpt "i2pcontrol" "127.0.0.1" 7650;
proto.httpProxy = mkEndpointOpt "httpproxy" "127.0.0.1" 4446;
proto.socksProxy = mkEndpointOpt "socksproxy" "127.0.0.1" 4447;
outTunnels = mkOption {
default = {};
type = with types; loaOf (submodule (
type = with types; loaOf (submodule (
{ name, config, ... }: {
options = commonTunOpts name;
config = {

View File

@ -3,8 +3,8 @@
with lib;
let
quassel = pkgs.kde4.quasselDaemon;
cfg = config.services.quassel;
quassel = cfg.package;
user = if cfg.user != null then cfg.user else "quassel";
in
@ -23,6 +23,15 @@ in
'';
};
package = mkOption {
type = types.package;
default = pkgs.kde4.quasselDaemon;
description = ''
The package of the quassel daemon.
'';
example = pkgs.quasselDaemon;
};
interfaces = mkOption {
default = [ "127.0.0.1" ];
description = ''

View File

@ -221,7 +221,7 @@ in
type = types.string;
default = ''
+ FPing
binary = ${pkgs.fping}/bin/fping
binary = ${config.security.wrapperDir}/fping
'';
description = "Probe configuration";
};
@ -284,10 +284,10 @@ in
mkdir -m 0755 -p ${smokepingHome}/cache ${smokepingHome}/data
rm -f ${smokepingHome}/cropper
ln -s ${cfg.package}/htdocs/cropper ${smokepingHome}/cropper
chown -R ${cfg.user} ${smokepingHome}
cp ${cgiHome} ${smokepingHome}/smokeping.fcgi
${cfg.package}/bin/smokeping --check --config=${configPath}
${cfg.package}/bin/smokeping --static --config=${configPath}
chown -R ${cfg.user} ${smokepingHome}
'';
script = ''${cfg.package}/bin/smokeping --config=${configPath} --nodaemon'';
};

View File

@ -68,7 +68,7 @@ in
interfaceType = mkOption {
default = "tun";
type = types.addCheck types.str (n: n == "tun" || n == "tap");
type = types.enum [ "tun" "tap" ];
description = ''
The type of virtual interface used for the network connection
'';

View File

@ -100,6 +100,10 @@ let
seccomp_sandbox=NO
''}
anon_umask=${cfg.anonymousUmask}
${optionalString cfg.anonymousUser ''
anon_root=${cfg.anonymousUserHome}
''}
${cfg.extraConfig}
'';
in
@ -163,6 +167,13 @@ in
description = "Anonymous write umask.";
};
extraConfig = mkOption {
type = types.lines;
default = "";
example = "ftpd_banner=Hello";
description = "Extra configuration to add at the bottom of the generated configuration file.";
};
} // (listToAttrs (catAttrs "nixosOption" optionDescription));
};

View File

@ -208,11 +208,10 @@ in
networks = mkOption {
default = { };
type = types.loaOf types.optionSet;
type = with types; loaOf (submodule networkOpts);
description = ''
IRC networks to connect the user to.
'';
options = [ networkOpts ];
example = {
"freenode" = {
server = "chat.freenode.net";

View File

@ -21,7 +21,7 @@ in {
};
socketType = mkOption {
type = types.addCheck types.str (t: t == "unix" || t == "tcp" || t == "tcp6");
type = types.enum [ "unix" "tcp" "tcp6" ];
default = "unix";
description = "Socket type: 'unix', 'tcp' or 'tcp6'.";
};

View File

@ -19,7 +19,8 @@ in
# E.g., if KDE is enabled, it supersedes xterm.
imports = [
./none.nix ./xterm.nix ./xfce.nix ./kde4.nix ./kde5.nix
./lxqt.nix ./enlightenment.nix ./gnome3.nix ./kodi.nix
./lumina.nix ./lxqt.nix ./enlightenment.nix ./gnome3.nix
./kodi.nix
];
options = {

View File

@ -0,0 +1,52 @@
{ config, lib, pkgs, ... }:
with lib;
let
xcfg = config.services.xserver;
cfg = xcfg.desktopManager.lumina;
in
{
options = {
services.xserver.desktopManager.lumina.enable = mkOption {
type = types.bool;
default = false;
description = "Enable the Lumina desktop manager";
};
};
config = mkIf (xcfg.enable && cfg.enable) {
services.xserver.desktopManager.session = singleton {
name = "lumina";
start = ''
exec ${pkgs.lumina}/bin/start-lumina-desktop
'';
};
environment.systemPackages = [
pkgs.fluxbox
pkgs.kde5.kwindowsystem
pkgs.kde5.oxygen-icons5
pkgs.lumina
pkgs.numlockx
pkgs.qt5.qtsvg
pkgs.xscreensaver
];
# Link some extra directories in /run/current-system/software/share
environment.pathsToLink = [
"/share/desktop-directories"
"/share/icons"
"/share/lumina"
"/share"
];
};
}

View File

@ -324,8 +324,7 @@ in
fsIdentifier = mkOption {
default = "uuid";
type = types.addCheck types.str
(type: type == "uuid" || type == "label" || type == "provided");
type = types.enum [ "uuid" "label" "provided" ];
description = ''
Determines how GRUB will identify devices when generating the
configuration file. A value of uuid / label signifies that grub

View File

@ -245,7 +245,7 @@ let
virtualType = mkOption {
default = null;
type = types.nullOr (types.addCheck types.str (v: v == "tun" || v == "tap"));
type = with types; nullOr (enum [ "tun" "tap" ]);
description = ''
The explicit type of interface to create. Accepts tun or tap strings.
Also accepts null to implicitly detect the type of device.

View File

@ -123,7 +123,7 @@ in {
# config file. But this path can unfortunately be garbage collected
# while still being used by the virtual machine. So update the
# emulator path on each startup to something valid (re-scan $PATH).
for file in /etc/libvirt/qemu/*.xml /etc/libvirt/lxc/*.xml; do
for file in /var/lib/libvirt/qemu/*.xml /var/lib/libvirt/lxc/*.xml; do
test -f "$file" || continue
# get (old) emulator path from config file
emulator=$(grep "^[[:space:]]*<emulator>" "$file" | sed 's,^[[:space:]]*<emulator>\(.*\)</emulator>.*,\1,')

View File

@ -275,6 +275,7 @@ in rec {
tests.networkingProxy = callTest tests/networking-proxy.nix {};
tests.nfs3 = callTest tests/nfs.nix { version = 3; };
tests.nfs4 = callTest tests/nfs.nix { version = 4; };
tests.leaps = callTest tests/leaps.nix { };
tests.nsd = callTest tests/nsd.nix {};
tests.openssh = callTest tests/openssh.nix {};
#tests.panamax = hydraJob (import tests/panamax.nix { system = "x86_64-linux"; });

View File

@ -57,6 +57,7 @@ import ./make-test.nix ({ pkgs, ...} : {
connectTo."192.168.0.1:1024}" =
{ password = carolPassword;
publicKey = carolPubKey;
hostname = "carol";
};
};
};

View File

@ -22,8 +22,6 @@ import ./make-test.nix ({ pkgs, ... }: {
};
testScript = ''
$client->start;
$client->waitForUnit("sockets.target");
$client->waitForUnit("dnsmasq");
# The daemon is socket activated; sending a single ping should activate it.

View File

@ -13,7 +13,7 @@ import ./make-test.nix (pkgs: {
networking.firewall.allowedTCPPorts = [ 4444 ];
systemd.services.listener.serviceConfig.ExecStart = "${pkgs.netcat}/bin/nc -l -p 4444";
systemd.services.listener.serviceConfig.ExecStart = "${pkgs.netcat}/bin/nc -l 4444";
};
probe = { config, lib, pkgs, ...}: {
@ -36,7 +36,7 @@ import ./make-test.nix (pkgs: {
$machine->waitForShutdown;
$machine->start;
$probe->waitForUnit("network.target");
$probe->waitUntilSucceeds("echo test | nc -c machine 4444");
$probe->waitUntilSucceeds("echo test | nc machine 4444");
'';
})

29
nixos/tests/leaps.nix Normal file
View File

@ -0,0 +1,29 @@
import ./make-test.nix ({ pkgs, ... }:
{
name = "leaps";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ qknight ];
};
nodes =
{
client = { };
server =
{ services.leaps = {
enable = true;
port = 6666;
path = "/leaps/";
};
networking.firewall.enable = false;
};
};
testScript =
''
startAll;
$server->waitForOpenPort(6666);
$client->succeed("curl http://server:6666/leaps/ | grep -i 'leaps'");
'';
})

View File

@ -1,41 +0,0 @@
# Simple example to showcase distributed tests using NixOS VMs.
import ./make-test.nix ({ pkgs, ...} : {
name = "mpich";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ eelco chaoflow ];
};
nodes = {
master =
{ config, pkgs, ... }: {
environment.systemPackages = [ gcc mpich2 ];
#boot.kernelPackages = pkgs.kernelPackages_2_6_29;
};
slave =
{ config, pkgs, ... }: {
environment.systemPackages = [ gcc mpich2 ];
};
};
# Start master/slave MPI daemons and compile/run a program that uses both
# nodes.
testScript =
''
startAll;
$master->succeed("echo 'MPD_SECRETWORD=secret' > /etc/mpd.conf");
$master->succeed("chmod 600 /etc/mpd.conf");
$master->succeed("mpd --daemon --ifhn=master --listenport=4444");
$slave->succeed("echo 'MPD_SECRETWORD=secret' > /etc/mpd.conf");
$slave->succeed("chmod 600 /etc/mpd.conf");
$slave->succeed("mpd --daemon --host=master --port=4444");
$master->succeed("mpicc -o example -Wall ${./mpich-example.c}");
$slave->succeed("mpicc -o example -Wall ${./mpich-example.c}");
$master->succeed("mpiexec -n 2 ./example >&2");
'';
})

View File

@ -1,14 +0,0 @@
#!/bin/sh
# This script try to evaluate all configurations which are stored in
# doc/config-examples. This script is useful to ensure that examples are
# working with the current system.
pwd=$(pwd)
set -xe
for i in ../doc/config-examples/*.nix; do
NIXOS_CONFIG="$pwd/$i" nix-instantiate \
--eval-only --xml --strict > /dev/null 2>&1 \
../default.nix -A system
done
set +xe

View File

@ -299,9 +299,9 @@ let
-pf /run/dhclient.pid \
-v eth0 eth1
otherIP="$(${pkgs.netcat}/bin/netcat -clp 1234 || :)"
otherIP="$(${pkgs.netcat}/bin/nc -l 1234 || :)"
${pkgs.iputils}/bin/ping -I eth1 -c1 "$otherIP"
echo "$otherIP reachable" | ${pkgs.netcat}/bin/netcat -clp 5678 || :
echo "$otherIP reachable" | ${pkgs.netcat}/bin/nc -l 5678 || :
'';
sysdDetectVirt = pkgs: ''
@ -461,11 +461,11 @@ in mapAttrs mkVBoxTest {
my $test1IP = waitForIP_test1 1;
my $test2IP = waitForIP_test2 1;
$machine->succeed("echo '$test2IP' | netcat -c '$test1IP' 1234");
$machine->succeed("echo '$test1IP' | netcat -c '$test2IP' 1234");
$machine->succeed("echo '$test2IP' | nc '$test1IP' 1234");
$machine->succeed("echo '$test1IP' | nc '$test2IP' 1234");
$machine->waitUntilSucceeds("netcat -c '$test1IP' 5678 >&2");
$machine->waitUntilSucceeds("netcat -c '$test2IP' 5678 >&2");
$machine->waitUntilSucceeds("nc '$test1IP' 5678 >&2");
$machine->waitUntilSucceeds("nc '$test2IP' 5678 >&2");
shutdownVM_test1;
shutdownVM_test2;

View File

@ -6,14 +6,14 @@ with stdenv.lib;
stdenv.mkDerivation rec{
name = "bitcoin" + (toString (optional (!withGui) "d")) + "-" + version;
core_version = "0.13.0";
core_version = "0.13.1";
version = core_version;
src = fetchurl {
urls = [ "https://bitcoin.org/bin/bitcoin-core-${core_version}/bitcoin-${version}.tar.gz"
"mirror://sourceforge/bitcoin/Bitcoin/bitcoin-${core_version}/bitcoin-${version}.tar.gz"
];
sha256 = "0c7d7049689bb17f4256f1e5ec20777f42acef61814d434b38e6c17091161cda";
sha256 = "d8edbd797ff1c8266113e54d851a85def46ab82389abe7d7bd0d2827e74cecd7";
};
buildInputs = [ pkgconfig autoreconfHook openssl db48 boost zlib

View File

@ -1,65 +0,0 @@
{ stdenv, pkgs, callPackage, fetchFromGitHub, faust2jack, helmholtz, mrpeach, puredata-with-plugins }:
stdenv.mkDerivation rec {
name = "VoiceOfFaust-${version}";
version = "0.7";
src = fetchFromGitHub {
owner = "magnetophon";
repo = "VoiceOfFaust";
rev = "v${version}";
sha256 = "14jjs7cnhg20pzijgblr7caspcpx8p8lpkbvjzc656s9lqn6m9sn";
};
plugins = [ helmholtz mrpeach ];
pitchTracker = puredata-with-plugins plugins;
buildInputs = [ faust2jack ];
runtimeInputs = [ pitchTracker ];
patchPhase = ''
sed -i "s@pd -nodac@${pitchTracker}/bin/pd -nodac@g" launchers/synthWrapper
sed -i "s@../PureData/OscSendVoc.pd@$out/PureData/OscSendVoc.pd@g" launchers/synthWrapper
'';
buildPhase = ''
faust2jack -osc classicVocoder.dsp
faust2jack -osc CZringmod.dsp
faust2jack -osc FMsinger.dsp
faust2jack -osc FOFvocoder.dsp
faust2jack -osc Karplus-StrongSinger.dsp
faust2jack -osc -sch -t 99999 Karplus-StrongSingerMaxi.dsp
faust2jack -osc PAFvocoder.dsp
faust2jack -osc -sch -t 99999 stringSinger.dsp
faust2jack -osc subSinger.dsp
# doesn't compile on most systems, too big:
#faust2jack -osc -sch -t 99999 VocSynthFull.dsp
'';
installPhase = ''
mkdir -p $out/bin
cp launchers/* $out/bin/
cp classicVocoder $out/bin/
cp CZringmod $out/bin/
cp FMsinger $out/bin/
cp FOFvocoder $out/bin/
cp Karplus-StrongSinger $out/bin/
cp Karplus-StrongSingerMaxi $out/bin/
cp PAFvocoder $out/bin/
cp stringSinger $out/bin/
cp subSinger $out/bin/
#cp VocSynthFull $out/bin/
mkdir $out/PureData/
cp PureData/OscSendVoc.pd $out/PureData/OscSendVoc.pd
'';
meta = {
description = "Turn your voice into a synthesizer";
homepage = https://github.com/magnetophon/VoiceOfFaust;
license = stdenv.lib.licenses.gpl3;
maintainers = [ stdenv.lib.maintainers.magnetophon ];
};
}

View File

@ -4,13 +4,13 @@
let
version = "1.3.2";
version = "1.3.3";
airwave-src = fetchFromGitHub {
owner = "phantom-code";
repo = "airwave";
rev = version;
sha256 = "053kkx5yq1vas0qisidkgq0h6hzfwy3677jprjkcrwc4hp2i2v12";
sha256 = "1ban59skw422mak3cp57lj27hgq5d3a4f6y79ysjnamf8rpz9x4s";
};
stdenv_multi = overrideCC stdenv gcc_multi;
@ -60,6 +60,9 @@ stdenv_multi.mkDerivation {
# shrinking.
dontPatchELF = true;
# Cf. https://github.com/phantom-code/airwave/issues/57
hardeningDisable = [ "format" ];
cmakeFlags = "-DVSTSDK_PATH=${vst-sdk}";
postInstall = ''

View File

@ -47,7 +47,7 @@ stdenv.mkDerivation rec {
patchShebangs ./tools/
'';
configurePhase = "${python2.interpreter} waf configure --optimize --docs --with-backends=jack,alsa --prefix=$out";
configurePhase = "${python2.interpreter} waf configure --optimize --docs --with-backends=jack,alsa,dummy --prefix=$out";
buildPhase = "${python2.interpreter} waf";

View File

@ -1,5 +1,5 @@
{ stdenv, fetchurl, wxGTK30, pkgconfig, gettext, gtk2, glib, zlib, perl, intltool,
libogg, libvorbis, libmad, alsaLib, libsndfile, soxr, flac, lame, fetchpatch,
libogg, libvorbis, libmad, libjack2, lv2, lilv, serd, sord, sratom, suil, alsaLib, libsndfile, soxr, flac, lame, fetchpatch,
expat, libid3tag, ffmpeg, soundtouch /*, portaudio - given up fighting their portaudio.patch */
}:
@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
buildInputs = [
pkgconfig gettext wxGTK30 expat alsaLib
libsndfile soxr libid3tag gtk2
libsndfile soxr libid3tag libjack2 lv2 lilv serd sord sratom suil gtk2
ffmpeg libmad lame libvorbis flac soundtouch
]; #ToDo: detach sbsms

View File

@ -34,6 +34,5 @@ stdenv.mkDerivation rec {
description = "A multiprocess audio converter that supports many formats (FLAC, MP3, Ogg Vorbis, Windows codecs and many more)";
license = licenses.gpl3;
platforms = platforms.linux ++ platforms.darwin;
maintainers = with maintainers; [ hiberno ];
};
}

View File

@ -9,11 +9,11 @@ with stdenv.lib.strings;
let
version = "0.9.73";
version = "0.9.90";
src = fetchurl {
url = "mirror://sourceforge/project/faudiostream/faust-${version}.tgz";
sha256 = "0x2scxkwvvjx7b7smj5xb8kr269qakf49z3fxpasd9g7025q44k5";
sha256 = "0d1fqwymyfb73zkmpwv4zk4gsg4ji7qs20mfsr20skmnqx30xvna";
};
meta = with stdenv.lib; {
@ -167,7 +167,8 @@ let
# export parts of the build environment
for script in "$out"/bin/*; do
wrapProgram "$script" \
--set FAUST_LIB_PATH "${faust}/lib/faust" \
--set FAUSTLIB "${faust}/lib/faust" \
--set FAUSTINC "${faust}/include/faust" \
--prefix PATH : "$PATH" \
--prefix PKG_CONFIG_PATH : "$PKG_CONFIG_PATH" \
--set NIX_CFLAGS_COMPILE "$NIX_CFLAGS_COMPILE" \

View File

@ -1,210 +0,0 @@
{ stdenv
, coreutils
, fetchgit
, makeWrapper
, pkgconfig
}:
with stdenv.lib.strings;
let
version = "2016-07-19";
src = fetchgit {
url = "git://git.code.sf.net/p/faudiostream/code";
rev = "16c22dc0193c10521b1dc16f98443d9c206bb5dd";
sha256 = "01rbcjfhpd5casi72ffi1j95f65ji60l629sgav93pvs0kpdacz5";
};
meta = with stdenv.lib; {
homepage = http://faust.grame.fr/;
downloadPage = http://sourceforge.net/projects/faudiostream/files/;
license = licenses.gpl2;
platforms = platforms.linux;
maintainers = with maintainers; [ magnetophon pmahoney ];
};
faust = stdenv.mkDerivation {
name = "faust-${version}";
inherit src;
buildInputs = [ makeWrapper ];
passthru = {
inherit wrap wrapWithBuildEnv;
};
preConfigure = ''
makeFlags="$makeFlags prefix=$out"
# The faust makefiles use 'system ?= $(shell uname -s)' but nix
# defines 'system' env var, so undefine that so faust detects the
# correct system.
unset system
'';
# Remove most faust2appl scripts since they won't run properly
# without additional paths setup. See faust.wrap,
# faust.wrapWithBuildEnv.
postInstall = ''
# syntax error when eval'd directly
pattern="faust2!(svg)"
(shopt -s extglob; rm "$out"/bin/$pattern)
'';
postFixup = ''
# Set faustpath explicitly.
substituteInPlace "$out"/bin/faustpath \
--replace "/usr/local /usr /opt /opt/local" "$out"
# The 'faustoptflags' is 'source'd into other faust scripts and
# not used as an executable, so patch 'uname' usage directly
# rather than use makeWrapper.
substituteInPlace "$out"/bin/faustoptflags \
--replace uname "${coreutils}/bin/uname"
# wrapper for scripts that don't need faust.wrap*
for script in "$out"/bin/faust2*; do
wrapProgram "$script" \
--prefix PATH : "$out"/bin
done
'';
meta = meta // {
description = "A functional programming language for realtime audio signal processing";
longDescription = ''
FAUST (Functional Audio Stream) is a functional programming
language specifically designed for real-time signal processing
and synthesis. FAUST targets high-performance signal processing
applications and audio plug-ins for a variety of platforms and
standards.
The Faust compiler translates DSP specifications into very
efficient C++ code. Thanks to the notion of architecture,
FAUST programs can be easily deployed on a large variety of
audio platforms and plugin formats (jack, alsa, ladspa, maxmsp,
puredata, csound, supercollider, pure, vst, coreaudio) without
any change to the FAUST code.
This package has just the compiler, libraries, and headers.
Install faust2* for specific faust2appl scripts.
'';
};
};
# Default values for faust2appl.
faust2ApplBase =
{ baseName
, dir ? "tools/faust2appls"
, scripts ? [ baseName ]
, ...
}@args:
args // {
name = "${baseName}-${version}";
inherit src;
configurePhase = ":";
buildPhase = ":";
installPhase = ''
runHook preInstall
mkdir -p "$out/bin"
for script in ${concatStringsSep " " scripts}; do
cp "${dir}/$script" "$out/bin/"
done
runHook postInstall
'';
postInstall = ''
# For the faust2appl script, change 'faustpath' and
# 'faustoptflags' to absolute paths.
for script in "$out"/bin/*; do
substituteInPlace "$script" \
--replace ". faustpath" ". '${faust}/bin/faustpath'" \
--replace ". faustoptflags" ". '${faust}/bin/faustoptflags'"
done
'';
meta = meta // {
description = "The ${baseName} script, part of faust functional programming language for realtime audio signal processing";
};
};
# Some 'faust2appl' scripts, such as faust2alsa, run faust to
# generate cpp code, then invoke the c++ compiler to build the code.
# This builder wraps these scripts in parts of the stdenv such that
# when the scripts are called outside any nix build, they behave as
# if they were running inside a nix build in terms of compilers and
# paths being configured (e.g. rpath is set so that compiled
# binaries link to the libs inside the nix store)
#
# The function takes two main args: the appl name (e.g.
# 'faust2alsa') and an optional list of propagatedBuildInputs. It
# returns a derivation that contains only the bin/${appl} script,
# wrapped up so that it will run as if it was inside a nix build
# with those build inputs.
#
# The build input 'faust' is automatically added to the
# propagatedBuildInputs.
wrapWithBuildEnv =
{ baseName
, propagatedBuildInputs ? [ ]
, ...
}@args:
stdenv.mkDerivation ((faust2ApplBase args) // {
buildInputs = [ makeWrapper pkgconfig ];
propagatedBuildInputs = [ faust ] ++ propagatedBuildInputs;
postFixup = ''
# export parts of the build environment
for script in "$out"/bin/*; do
wrapProgram "$script" \
--set FAUSTLIB "${faust}/lib/faust" \
--set FAUSTINC "${faust}/include/faust" \
--prefix PATH : "$PATH" \
--prefix PKG_CONFIG_PATH : "$PKG_CONFIG_PATH" \
--set NIX_CFLAGS_COMPILE "$NIX_CFLAGS_COMPILE" \
--set NIX_LDFLAGS "$NIX_LDFLAGS"
done
'';
});
# Builder for 'faust2appl' scripts, such as faust2firefox that
# simply need to be wrapped with some dependencies on PATH.
#
# The build input 'faust' is automatically added to the PATH.
wrap =
{ baseName
, runtimeInputs ? [ ]
, ...
}@args:
let
runtimePath = concatStringsSep ":" (map (p: "${p}/bin") ([ faust ] ++ runtimeInputs));
in stdenv.mkDerivation ((faust2ApplBase args) // {
buildInputs = [ makeWrapper ];
postFixup = ''
for script in "$out"/bin/*; do
wrapProgram "$script" --prefix PATH : "${runtimePath}"
done
'';
});
in faust

View File

@ -16,11 +16,11 @@ with stdenv.lib.strings;
let
version = "2.0-a41";
version = "2.0.a51";
src = fetchurl {
url = "mirror://sourceforge/project/faudiostream/faust-2.0.a41.tgz";
sha256 = "1cq4x1cax0lswrcqv0limx5mjdi3187zlmh7cj2pndr0xq6b96cm";
url = "mirror://sourceforge/project/faudiostream/faust-${version}.tgz";
sha256 = "1yryjqfqmxs7lxy95hjgmrncvl9kig3rcsmg0v49ghzz7vs7haxf";
};
meta = with stdenv.lib; {
@ -53,7 +53,7 @@ let
# defines 'system' env var, so undefine that so faust detects the
# correct system.
unset system
sed -e "232s/LLVM_STATIC_LIBS/LLVMLIBS/" -i compiler/Makefile.unix
# sed -e "232s/LLVM_STATIC_LIBS/LLVMLIBS/" -i compiler/Makefile.unix
# The makefile sets LLVM_<version> depending on the current llvm
# version, but the detection code is quite brittle.
@ -67,7 +67,7 @@ let
#
# For now, fix this by 1) pinning the llvm version; 2) manually setting LLVM_VERSION
# to something the makefile will recognize.
sed '52iLLVM_VERSION=3.7.0' -i compiler/Makefile.unix
sed '52iLLVM_VERSION=3.8.0' -i compiler/Makefile.unix
'';
# Remove most faust2appl scripts since they won't run properly
@ -151,7 +151,8 @@ let
for script in "$out"/bin/*; do
substituteInPlace "$script" \
--replace ". faustpath" ". '${faust}/bin/faustpath'" \
--replace ". faustoptflags" ". '${faust}/bin/faustoptflags'"
--replace ". faustoptflags" ". '${faust}/bin/faustoptflags'" \
--replace " error " "echo"
done
'';
@ -193,7 +194,9 @@ let
# export parts of the build environment
for script in "$out"/bin/*; do
wrapProgram "$script" \
--set FAUSTLIB "${faust}/lib/faust" \
--set FAUST_LIB_PATH "${faust}/lib/faust" \
--set FAUSTINC "${faust}/include/faust" \
--prefix PATH : "$PATH" \
--prefix PKG_CONFIG_PATH : "$PKG_CONFIG_PATH" \
--set NIX_CFLAGS_COMPILE "$NIX_CFLAGS_COMPILE" \

View File

@ -1,11 +1,14 @@
{ faust
{ boost
, faust
, lv2
, qt4
}:
faust.wrapWithBuildEnv {
baseName = "faust2lv2";
propagatedBuildInputs = [ lv2 ];
propagatedBuildInputs = [ boost lv2 qt4 ];
}

View File

@ -1,14 +0,0 @@
{ boost
, faust1git
, lv2
, qt4
}:
faust1git.wrapWithBuildEnv {
baseName = "faust2lv2";
propagatedBuildInputs = [ boost lv2 qt4 ];
}

View File

@ -2,13 +2,13 @@
libsamplerate, libpulseaudio, libXinerama, gettext, pkgconfig, alsaLib }:
stdenv.mkDerivation rec {
version = "3.23.07";
version = "3.23.15";
pname = "fldigi";
name = "${pname}-${version}";
src = fetchurl {
url = "mirror://sourceforge/${pname}/${name}.tar.gz";
sha256 = "0v78sk9bllxw640wxd4q2qy0h8z2j1d077nxhmpkjpf6mn6vwcda";
sha256 = "1nxafk99fr6yb09cq3vdpzjcd85mnjwwl8rzccx21kla1ysihl5m";
};
buildInputs = [ libXinerama gettext hamlib fltk13 libjpeg libpng portaudio

View File

@ -0,0 +1,48 @@
{ stdenv, fetchFromGitHub, gtkmm2, lv2, lvtk, pkgconfig }:
stdenv.mkDerivation rec {
name = "fmsynth-unstable-${version}";
version = "2015-02-07";
src = fetchFromGitHub {
owner = "Themaister";
repo = "libfmsynth";
rev = "9ffa1d2fea287f1209b210d2dbde2f0f60f37176";
sha256 = "1bk0bpr069hzx2508rgfbwpxiqgr7dmdkhqdywmd2i4rmibgrm1q";
};
buildInputs = [ gtkmm2 lv2 lvtk pkgconfig ];
buildPhase = ''
cd lv2
substituteInPlace GNUmakefile --replace "/usr/lib/lv2" "$out/lib/lv2"
make
'';
preInstall = "mkdir -p $out/lib/lv2";
meta = {
description = "a flexible 8 operator FM synthesizer for LV2";
longDescription = ''
The synth core supports:
- Arbitrary amounts of polyphony
- 8 operators
- No fixed "algorithms"
- Arbitrary modulation, every operator can modulate any other operator, even itself
- Arbitrary carrier selection, every operator can be a carrier
- Sine LFO, separate LFO per voice, modulates amplitude and frequency of operators
- Envelope per operator
- Carrier stereo panning
- Velocity sensitivity per operator
- Mod wheel sensitivity per operator
- Pitch bend
- Keyboard scaling
- Sustain, sustained keys can overlap each other for a very rich sound
- Full floating point implementation optimized for SIMD
- Hard real-time constraints
'';
homepage = https://github.com/Themaister/libfmsynth;
license = stdenv.lib.licenses.mit;
maintainers = [ stdenv.lib.maintainers.magnetophon ];
platforms = stdenv.lib.platforms.linux;
};
}

View File

@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
postInstallFixup = "rm -rf $out/lib/lv2";
meta = {
broken = true; # see: https://github.com/sampov2/foo-yc20/issues/7
description = "A Faust implementation of a 1969 designed Yamaha combo organ, the YC-20";
homepage = https://github.com/sampov2/foo-yc20;
license = "BSD";

View File

@ -12,11 +12,11 @@ in
stdenv.mkDerivation rec {
name = "guitarix-${version}";
version = "0.35.1";
version = "0.35.2";
src = fetchurl {
url = "mirror://sourceforge/guitarix/guitarix2-${version}.tar.xz";
sha256 = "066qva1zk63qw60s0vbi9g9jh22ljw67p91pk82kv11gw24h3vg6";
sha256 = "1qj3adjhg511jygbjkl9k5v0gcjmg6ifc479rspfyf45m383pp3p";
};
nativeBuildInputs = [ gettext intltool wrapGAppsHook pkgconfig python ];

View File

@ -1,15 +1,16 @@
{ stdenv, fetchurl, xorg, freetype, alsaLib, libjack2
{ stdenv, fetchFromGitHub , xorg, freetype, alsaLib, libjack2
, lv2, pkgconfig, mesa }:
stdenv.mkDerivation rec {
version = "0.6.1";
version = "0.8.6";
name = "helm-${version}";
src = fetchurl {
url = "https://github.com/mtytel/helm/archive/v${version}.tar.gz";
sha256 = "18d7zx6r7har47zj6x1f2z91x796mxnix7w3x1yilmqnyqc56r3w";
};
src = fetchFromGitHub {
owner = "mtytel";
repo = "helm";
rev = "19f86e6b4db83c1c6b143fc27883592ac4e43489";
sha256 = "0a46wnbfqkns8l136v79rr9gv4hhba065igjwkjddf045c9l94l8";
};
buildInputs = [
xorg.libX11 xorg.libXcomposite xorg.libXcursor xorg.libXext
@ -17,11 +18,18 @@
freetype alsaLib libjack2 pkgconfig mesa lv2
];
CXXFLAGS = "-DHAVE_LROUND";
patchPhase = ''
sed -i 's|usr/||g' Makefile
'';
buildPhase = ''
make lv2
'';
installPhase = ''
mkdir -p $out/bin
mkdir -p $out/lib/lv2
cp -a standalone/builds/linux/build/* $out/bin
cp -a builds/linux/LV2/* $out/lib/lv2/
make DESTDIR="$out" install
'';
meta = with stdenv.lib; {

View File

@ -1,21 +1,21 @@
{ stdenv, fetchsvn, boost, ganv, glibmm, gtkmm2, libjack2, lilv-svn
, lv2, makeWrapper, pkgconfig, python, raul, rdflib, serd, sord-svn, sratom
{ stdenv, fetchgit, boost, ganv, glibmm, gtk2, gtkmm2, libjack2, lilv
, lv2Unstable, makeWrapper, pkgconfig, python, raul, rdflib, serd, sord, sratom
, suil
}:
stdenv.mkDerivation rec {
name = "ingen-svn-${rev}";
rev = "5675";
name = "ingen-unstable-${rev}";
rev = "2016-10-29";
src = fetchsvn {
url = "http://svn.drobilla.net/lad/trunk/ingen";
rev = rev;
sha256 = "1dk56rzbc0rwlbzr90rv8bh5163xwld32nmkvcz7ajfchi4fnv86";
src = fetchgit {
url = "http://git.drobilla.net/cgit.cgi/ingen.git";
rev = "fd147d0b888090bfb897505852c1f25dbdf77e18";
sha256 = "1qmg79962my82c43vyrv5sxbqci9c7gc2s9bwaaqd0fcf08xcz1z";
};
buildInputs = [
boost ganv glibmm gtkmm2 libjack2 lilv-svn lv2 makeWrapper pkgconfig
python raul serd sord-svn sratom suil
boost ganv glibmm gtk2 gtkmm2 libjack2 lilv lv2Unstable makeWrapper pkgconfig
python raul serd sord sratom suil
];
configurePhase = ''

View File

@ -1,22 +1,29 @@
{ stdenv, fetchurl, fftw, ladspaH, pkgconfig }:
{ stdenv, fetchurl, autoreconfHook, automake, fftw, ladspaH, libxml2, pkgconfig
, perlPackages }:
stdenv.mkDerivation rec {
name = "swh-plugins-${version}";
version = "0.4.17";
stdenv.mkDerivation {
name = "swh-plugins-0.4.15";
src = fetchurl {
url = http://plugin.org.uk/releases/0.4.15/swh-plugins-0.4.15.tar.gz;
sha256 = "0h462s4mmqg4iw7zdsihnrmz2vjg0fd49qxw2a284bnryjjfhpnh";
url = "https://github.com/swh/ladspa/archive/v${version}.tar.gz";
sha256 = "1rqwh8xrw6hnp69dg4gy336bfbfpmbx4fjrk0nb8ypjcxkz91c6i";
};
buildInputs = [fftw ladspaH pkgconfig];
postInstall =
''
mkdir -p $out/share/ladspa/
ln -sv $out/lib/ladspa $out/share/ladspa/lib
'';
buildInputs = [ autoreconfHook fftw ladspaH libxml2 pkgconfig perlPackages.perl perlPackages.XMLParser ];
meta = {
patchPhase = ''
patchShebangs .
patchShebangs ./metadata/
cp ${automake}/share/automake-*/mkinstalldirs .
'';
meta = with stdenv.lib; {
homepage = http://plugin.org.uk/;
description = "LADSPA format audio plugins";
license = licenses.gpl2;
maintainers = [ maintainers.magnetophon ];
platforms = platforms.linux;
};
}

View File

@ -1,28 +0,0 @@
{ stdenv, fetchgit, autoreconfHook, automake, fftw, ladspaH, libxml2, pkgconfig
, perl, perlPackages }:
stdenv.mkDerivation {
name = "swh-plugins-git-2015-03-04";
src = fetchgit {
url = https://github.com/swh/ladspa.git;
rev = "4b8437e8037cace3d5bf8ce6d1d1da0182aba686";
sha256 = "1rmqm4780dhp0pj2scl3k7m8hpp1x6w6ln4wwg954zb9570rqaxx";
};
buildInputs = [ autoreconfHook fftw ladspaH libxml2 pkgconfig perl perlPackages.XMLParser ];
patchPhase = ''
patchShebangs .
patchShebangs ./metadata/
cp ${automake}/share/automake-*/mkinstalldirs .
'';
meta = with stdenv.lib; {
homepage = http://plugin.org.uk/;
description = "LADSPA format audio plugins";
license = licenses.gpl2;
maintainers = [ maintainers.magnetophon ];
platforms = platforms.linux;
};
}

View File

@ -1,21 +1,22 @@
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2gui }:
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2 }:
stdenv.mkDerivation rec {
name = "CharacterCompressor-${version}";
version = "0.3.1";
version = "0.3.3";
src = fetchFromGitHub {
owner = "magnetophon";
repo = "CharacterCompressor";
rev = "V${version}";
sha256 = "0ci27v5k10prsmcd0g6q5vhr31mz8hsmrsdk436vfbcv3s108rcc";
sha256 = "1h0bhjhx023476gbijq842b6f8z71zcyn4c9mddwyb18w9cdamp5";
};
buildInputs = [ faust2jaqt faust2lv2gui ];
buildInputs = [ faust2jaqt faust2lv2 ];
buildPhase = ''
faust2jaqt -vec -time -t 99999 CharacterCompressor.dsp
faust2lv2 -vec -time -gui -t 99999 CharacterCompressor.dsp
faust2jaqt -vec -time -t 99999 CharacterCompressorMono.dsp
sed -i "s|\[ *scale *: *log *\]||g ; s|\btgroup\b|hgroup|g" "lib/CharacterCompressor.lib"
faust2lv2 -vec -time -gui -t 99999 CharacterCompressor.dsp
faust2lv2 -vec -time -gui -t 99999 CharacterCompressorMono.dsp
'';

View File

@ -1,22 +1,28 @@
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2gui }:
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2 }:
stdenv.mkDerivation rec {
name = "CompBus-${version}";
version = "1.1.02";
version = "1.1.1";
src = fetchFromGitHub {
owner = "magnetophon";
repo = "CompBus";
rev = "v${version}";
sha256 = "025vi60caxk3j2vxxrgbc59xlyr88vgn7k3127s271zvpyy7apwh";
rev = "V${version}";
sha256 = "0yhj680zgk4dn4fi8j3apm72f3z2mjk12amf2a7p0lwn9iyh4a2z";
};
buildInputs = [ faust2jaqt faust2lv2gui ];
buildInputs = [ faust2jaqt faust2lv2 ];
buildPhase = ''
for f in *.dsp;
do
faust2jaqt -t 99999 $f
faust2lv2 -gui -t 99999 $f
faust2jaqt -time -vec -double -t 99999 $f
done
sed -i "s|\[ *scale *: *log *\]||g ; s|\btgroup\b|hgroup|g" "CompBus.lib"
for f in *.dsp;
do
faust2lv2 -time -vec -double -gui -t 99999 $f
done
'';

View File

@ -1,20 +1,21 @@
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2gui }:
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2 }:
stdenv.mkDerivation rec {
name = "constant-detune-chorus-${version}";
version = "0.1.2";
version = "0.1.3";
src = fetchFromGitHub {
owner = "magnetophon";
repo = "constant-detune-chorus";
rev = "v${version}";
sha256 = "1ks2k6pflqyi2cs26bnbypphyrrgn0xf31l31kgx1qlilyc57vln";
rev = "V${version}";
sha256 = "1sipmc25fr7w7xqx1r0y6i2zwfkgszzwvhk1v15mnsb3cqvk8ybn";
};
buildInputs = [ faust2jaqt faust2lv2gui ];
buildInputs = [ faust2jaqt faust2lv2 ];
buildPhase = ''
faust2jaqt -t 99999 ConstantDetuneChorus.dsp
faust2lv2 -gui -t 99999 ConstantDetuneChorus.dsp
faust2jaqt -time -vec -t 99999 ConstantDetuneChorus.dsp
sed -i "s|\[ *scale *: *log *\]||g ; s|\btgroup\b|hgroup|g" "ConstantDetuneChorus.dsp"
faust2lv2 -time -vec -t 99999 -gui ConstantDetuneChorus.dsp
'';
installPhase = ''

View File

@ -1,20 +1,21 @@
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2gui }:
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2 }:
stdenv.mkDerivation rec {
name = "LazyLimiter-${version}";
version = "0.3.01";
version = "0.3.2";
src = fetchFromGitHub {
owner = "magnetophon";
repo = "LazyLimiter";
rev = "v${version}";
sha256 = "1yx9d5cakmqbiwb1j9v2af9h5lqzahl3kaamnyk71cf4i8g7zp3l";
rev = "V${version}";
sha256 = "10xdydwmsnkx8hzsm74pa546yahp29wifydbc48yywv3sfj5anm7";
};
buildInputs = [ faust2jaqt faust2lv2gui ];
buildInputs = [ faust2jaqt faust2lv2 ];
buildPhase = ''
faust2jaqt -t 99999 LazyLimiter.dsp
faust2lv2 -gui -t 99999 LazyLimiter.dsp
faust2jaqt -vec -time -t 99999 LazyLimiter.dsp
sed -i "s|\[ *scale *: *log *\]||g ; s|\btgroup\b|hgroup|g" "GUI.lib"
faust2lv2 -vec -time -t 99999 -gui LazyLimiter.dsp
'';
installPhase = ''

View File

@ -1,20 +1,21 @@
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2gui }:
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2 }:
stdenv.mkDerivation rec {
name = "MBdistortion-${version}";
version = "1.1";
version = "1.1.1";
src = fetchFromGitHub {
owner = "magnetophon";
repo = "MBdistortion";
rev = "v${version}";
sha256 = "1rmvfi48hg8ybfw517zgj3fjj2xzckrmv8x131i26vj0fv7svjsp";
rev = "V${version}";
sha256 = "0mdzaqmxzgspfgx9w1hdip18y17hwpdcgjyq1rrfm843vkascwip";
};
buildInputs = [ faust2jaqt faust2lv2gui ];
buildInputs = [ faust2jaqt faust2lv2 ];
buildPhase = ''
faust2jaqt -t 99999 MBdistortion.dsp
faust2lv2 -gui -t 99999 MBdistortion.dsp
faust2jaqt -time -vec -t 99999 MBdistortion.dsp
sed -i "s|\[ *scale *: *log *\]||g ; s|\btgroup\b|hgroup|g" "MBdistortion.dsp"
faust2lv2 -time -vec -gui -t 99999 MBdistortion.dsp
'';
installPhase = ''

View File

@ -1,20 +1,21 @@
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2gui }:
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2 }:
stdenv.mkDerivation rec {
name = "RhythmDelay-${version}";
version = "2.0";
version = "2.1";
src = fetchFromGitHub {
owner = "magnetophon";
repo = "RhythmDelay";
rev = "v${version}";
sha256 = "0n938nm08mf3lz92k6v07k1469xxzmfkgclw40jgdssfcfa16bn7";
rev = "V${version}";
sha256 = "1j0bjl9agz43dcrcrbiqd7fv7xsxgd65s4ahhv5pvcr729y0fxg4";
};
buildInputs = [ faust2jaqt faust2lv2gui ];
buildInputs = [ faust2jaqt faust2lv2 ];
buildPhase = ''
faust2jaqt -t 99999 RhythmDelay.dsp
faust2lv2 -gui -t 99999 RhythmDelay.dsp
faust2jaqt -time -vec -t 99999 RhythmDelay.dsp
sed -i "s|\[ *scale *: *log *\]||g ; s|\btgroup\b|hgroup|g" "RhythmDelay.dsp"
faust2lv2 -time -vec -t 99999 -gui RhythmDelay.dsp
'';
installPhase = ''

View File

@ -0,0 +1,56 @@
{ stdenv, pkgs, callPackage, fetchFromGitHub, faust2jack, faust2lv2, helmholtz, mrpeach, puredata-with-plugins }:
stdenv.mkDerivation rec {
name = "VoiceOfFaust-${version}";
version = "1.1.4";
src = fetchFromGitHub {
owner = "magnetophon";
repo = "VoiceOfFaust";
rev = "V${version}";
sha256 = "0la9b806qwrlsxgbir7n1db8v3w24wmd6k43p6qpr1fjjpkhrrgw";
};
plugins = [ helmholtz mrpeach ];
pitchTracker = puredata-with-plugins plugins;
buildInputs = [ faust2jack faust2lv2 ];
runtimeInputs = [ pitchTracker ];
patchPhase = ''
sed -i "s@pd -nodac@${pitchTracker}/bin/pd -nodac@g" launchers/synthWrapper
sed -i "s@../PureData/OscSendVoc.pd@$out/PureData/OscSendVoc.pd@g" launchers/synthWrapper
'';
buildPhase = ''
sh install.sh
# so it doesn;t end up in /bin/ :
rm -f install.sh
'';
installPhase = ''
mkdir -p $out/bin
for file in ./*; do
if test -x "$file" && test -f "$file"; then
cp "$file" "$out/bin"
fi
done
cp launchers/* $out/bin/
mkdir $out/PureData/
# cp PureData/OscSendVoc.pd $out/PureData/OscSendVoc.pd
cp PureData/* $out/PureData/
mkdir -p $out/lib/lv2
cp -r *.lv2/ $out/lib/lv2
'';
meta = {
description = "Turn your voice into a synthesizer";
homepage = https://github.com/magnetophon/VoiceOfFaust;
license = stdenv.lib.licenses.gpl3;
maintainers = [ stdenv.lib.maintainers.magnetophon ];
};
}

View File

@ -1,22 +1,28 @@
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2gui }:
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2 }:
stdenv.mkDerivation rec {
name = "faustCompressors-${version}";
version = "0.1.1";
name = "faustCompressors-v${version}";
version = "1.1.1";
src = fetchFromGitHub {
owner = "magnetophon";
repo = "faustCompressors";
rev = "v${version}";
sha256 = "0x5nd2cjhknb4aclhkkjaywx75bi2wj22prgv8n47czi09jcj0jb";
sha256 = "0mkram2hm7i5za7pfn5crh2arbajk8praksxzgjx90rrxwl1y3d1";
};
buildInputs = [ faust2jaqt faust2lv2gui ];
buildInputs = [ faust2jaqt faust2lv2 ];
buildPhase = ''
for f in *.dsp;
do
faust2jaqt -double -t 99999 $f
faust2lv2 -double -gui -t 99999 $f
faust2jaqt -time -double -t 99999 $f
done
sed -i "s|\[ *scale *: *log *\]||g ; s|\btgroup\b|hgroup|g" "compressors.lib"
for f in *.dsp;
do
faust2lv2 -time -double -gui -t 99999 $f
done
'';

View File

@ -0,0 +1,41 @@
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2 }:
stdenv.mkDerivation rec {
name = "pluginUtils-${version}";
version = "1.1";
src = fetchFromGitHub {
owner = "magnetophon";
repo = "pluginUtils";
rev = "V${version}";
sha256 = "1hnr5sp7k6ypf4ks61lnyqx44dkv35yllf3a3xcbrw7yqzagwr1c";
};
buildInputs = [ faust2jaqt faust2lv2 ];
buildPhase = ''
for f in *.dsp
do
echo "Building jack standalone for $f"
faust2jaqt -vec -time -t 99999 "$f"
sed -i "s|\[ *scale *: *log *\]||g ; s|\btgroup\b|hgroup|g" "$f"
echo "Building lv2 for $f"
faust2lv2 -vec -time -gui -t 99999 "$f"
done
'';
installPhase = ''
rm -f *.dsp
rm -f *.lib
mkdir -p $out/lib/lv2
mv *.lv2/ $out/lib/lv2
mkdir -p $out/bin
cp * $out/bin/
'';
meta = {
description = "Some simple utility lv2 plugins";
homepage = https://github.com/magnetophon/pluginUtils;
license = stdenv.lib.licenses.gpl3;
maintainers = [ stdenv.lib.maintainers.magnetophon ];
};
}

View File

@ -0,0 +1,38 @@
{ stdenv, fetchFromGitHub, faust2jaqt, faust2lv2 }:
stdenv.mkDerivation rec {
name = "shelfMultiBand-${version}";
version = "0.6.1";
src = fetchFromGitHub {
owner = "magnetophon";
repo = "shelfMultiBand";
rev = "V${version}";
sha256 = "1b1h4z5fs2xm7wvw11p9wnd0bxs3m88124f5phh0gwvpsdrd0im5";
};
buildInputs = [ faust2jaqt faust2lv2 ];
buildPhase = ''
faust2jaqt -vec -double -time -t 99999 shelfMultiBand.dsp
faust2jaqt -vec -double -time -t 99999 shelfMultiBandMono.dsp
sed -i "s|\[ *scale *: *log *\]||g ; s|\btgroup\b|hgroup|g" "shelfMultiBand.lib"
faust2lv2 -vec -double -time -gui -t 99999 shelfMultiBandMono.dsp
faust2lv2 -vec -double -time -gui -t 99999 shelfMultiBand.dsp
'';
installPhase = ''
mkdir -p $out/bin
cp shelfMultiBand $out/bin/
cp shelfMultiBandMono $out/bin/
mkdir -p $out/lib/lv2
cp -r shelfMultiBand.lv2/ $out/lib/lv2
cp -r shelfMultiBandMono.lv2/ $out/lib/lv2
'';
meta = {
description = "A multiband compressor made from shelving filters.";
homepage = https://github.com/magnetophon/shelfMultiBand;
license = stdenv.lib.licenses.gpl3;
maintainers = [ stdenv.lib.maintainers.magnetophon ];
};
}

View File

@ -23,8 +23,6 @@ stdenv.mkDerivation rec {
description = "Curses-based interface for MPD (music player daemon)";
homepage = http://www.musicpd.org/clients/ncmpc/;
license = licenses.gpl2Plus;
maintainers = with maintainers; [ hiberno ];
platforms = platforms.all;
};
}

View File

@ -30,7 +30,6 @@ stdenv.mkDerivation rec {
'';
homepage = https://github.com/cdemoulins/pamixer;
license = licenses.gpl3;
maintainers = with maintainers; [ hiberno ];
platforms = platforms.linux;
};
}

View File

@ -1,22 +1,22 @@
{ stdenv, fetchurl, alsaLib, libjack2, dbus, qt5 }:
stdenv.mkDerivation rec {
version = "0.4.2";
version = "0.4.3";
name = "qjackctl-${version}";
# some dependencies such as killall have to be installed additionally
src = fetchurl {
url = "mirror://sourceforge/qjackctl/${name}.tar.gz";
sha256 = "0pmgkqgkapbma42zqb5if4ngmj183rxl8bhjm7mhyhgq4bzll76g";
sha256 = "01wyyynxy21kim0gplzvfij7275a1jz68hdx837d2j1w5x2w7zbb";
};
buildInputs = [
buildInputs = [
qt5.full
qt5.qtx11extras
alsaLib
alsaLib
libjack2
dbus
dbus
];
configureFlags = "--enable-jack-version";

View File

@ -4,11 +4,11 @@
}:
stdenv.mkDerivation rec {
name = "snd-15.9";
name = "snd-16.9";
src = fetchurl {
url = "mirror://sourceforge/snd/${name}.tar.gz";
sha256 = "0hs9ailgaphgyi3smnrpwksvdww85aa7szqgi6l6d2jwfx9g4bhd";
sha256 = "1rw9wrj1f0g413ya32s9mwhvv3c6iasjza22irzf6xlv49b9s5dp";
};
nativeBuildInputs = [ pkgconfig ];

View File

@ -1,32 +1,30 @@
{ stdenv, fetchurl, pkgconfig, fetchgit
{ stdenv, fetchurl, pkgconfig
, libltc, libsndfile, libsamplerate, ftgl, freefont_ttf, libjack2
, mesa_glu, lv2, mesa, gtk2, cairo, pango, fftwFloat, zita-convolver }:
stdenv.mkDerivation rec {
version = "20160619";
version = "20160825";
name = "x42-plugins-${version}";
src = fetchurl {
url = "http://gareus.org/misc/x42-plugins/${name}.tar.xz";
sha256 = "1ald0c5xbfkdq6g5xwyy8wmbi636m3k3gqrq16kbh46g0kld1as9";
sha256 = "13ln5ccmrrc07ykfp040389av60dlgqz1kh6vfjkga6sq7z51msr";
};
buildInputs = [
mesa_glu ftgl freefont_ttf libjack2 libltc libsndfile libsamplerate
lv2 mesa gtk2 cairo pango fftwFloat pkgconfig zita-convolver
];
buildInputs = [ mesa_glu ftgl freefont_ttf libjack2 libltc libsndfile libsamplerate lv2 mesa gtk2 cairo pango fftwFloat pkgconfig zita-convolver];
makeFlags = [
"PREFIX=$(out)"
"FONTFILE=${freefont_ttf}/share/fonts/truetype/FreeSansBold.ttf"
"LIBZITACONVOLVER=${zita-convolver}/include/zita-convolver.h"
];
makeFlags = [ "PREFIX=$(out)" "FONTFILE=${freefont_ttf}/share/fonts/truetype/FreeSansBold.ttf" ];
meta = with stdenv.lib; {
description = "Collection of LV2 plugins by Robin Gareus";
homepage = https://github.com/x42/x42-plugins;
maintainers = with maintainers; [ magnetophon ];
license = licenses.gpl2;
platforms = platforms.linux;
};
patchPhase = ''
patchShebangs ./stepseq.lv2/gridgen.sh
sed -i 's|/usr/include/zita-convolver.h|${zita-convolver}/include/zita-convolver.h|g' ./convoLV2/Makefile
'';
meta = with stdenv.lib;
{ description = "Collection of LV2 plugins by Robin Gareus";
homepage = https://github.com/x42/x42-plugins;
maintainers = with maintainers; [ magnetophon ];
license = licenses.gpl2;
platforms = platforms.linux;
};
}

View File

@ -28,10 +28,10 @@
ada-mode = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib, wisi }:
elpaBuild {
pname = "ada-mode";
version = "5.2.0";
version = "5.2.1";
src = fetchurl {
url = "https://elpa.gnu.org/packages/ada-mode-5.2.0.tar";
sha256 = "1j4f94bmykz5j6kyyg5x81k0yjai609c1qzs8sig8v267hydkpqr";
url = "https://elpa.gnu.org/packages/ada-mode-5.2.1.tar";
sha256 = "099c8vm6jvwypff981vbs77y6hqq31fn6s8gwqkmncq04mk3vw34";
};
packageRequires = [ cl-lib emacs wisi ];
meta = {
@ -471,10 +471,10 @@
debbugs = callPackage ({ cl-lib ? null, elpaBuild, fetchurl, lib, soap-client }:
elpaBuild {
pname = "debbugs";
version = "0.11";
version = "0.12";
src = fetchurl {
url = "https://elpa.gnu.org/packages/debbugs-0.11.tar";
sha256 = "10v9s7ayvfzd6j6hqfc9zihxgmsc2j0xhxrgy3ah30qkqn6z8w6n";
url = "https://elpa.gnu.org/packages/debbugs-0.12.tar";
sha256 = "1swi4d7fhahimid9j12cypmkz7dlqgffrnhfxy5ra44y3j2b35ph";
};
packageRequires = [ cl-lib soap-client ];
meta = {
@ -833,6 +833,20 @@
license = lib.licenses.free;
};
}) {};
highlight-escape-sequences = callPackage ({ elpaBuild, fetchurl, lib }:
elpaBuild {
pname = "highlight-escape-sequences";
version = "0.3";
src = fetchurl {
url = "https://elpa.gnu.org/packages/highlight-escape-sequences-0.3.el";
sha256 = "0q54h0zdaflr2sk4mwgm2ix8cdq4rm4pz03ln430qxc1zm8pz6gy";
};
packageRequires = [];
meta = {
homepage = "https://elpa.gnu.org/packages/highlight-escape-sequences.html";
license = lib.licenses.free;
};
}) {};
html5-schema = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "html5-schema";
version = "0.1";
@ -1337,10 +1351,10 @@
}) {};
org = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "org";
version = "20161024";
version = "20161102";
src = fetchurl {
url = "https://elpa.gnu.org/packages/org-20161024.tar";
sha256 = "1rg9hl8vghx72prc6m1c29p5crns0i70hh7lffbhqzjixq6jqvlj";
url = "https://elpa.gnu.org/packages/org-20161102.tar";
sha256 = "12v9jhakdxcmlw9zrcrh1fwi3kh6z0qva90hpnr0zjqyj72i0wir";
};
packageRequires = [];
meta = {
@ -1388,6 +1402,20 @@
license = lib.licenses.free;
};
}) {};
parsec = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib }:
elpaBuild {
pname = "parsec";
version = "0.1.3";
src = fetchurl {
url = "https://elpa.gnu.org/packages/parsec-0.1.3.tar";
sha256 = "032m9iks5a05vbc4159dfs9b7shmqm6mk05jgbs9ndvy400drwd6";
};
packageRequires = [ cl-lib emacs ];
meta = {
homepage = "https://elpa.gnu.org/packages/parsec.html";
license = lib.licenses.free;
};
}) {};
pinentry = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "pinentry";
version = "0.1";
@ -1569,10 +1597,10 @@
}) {};
seq = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "seq";
version = "2.16";
version = "2.19";
src = fetchurl {
url = "https://elpa.gnu.org/packages/seq-2.16.tar";
sha256 = "1fc1cjbb3lrxgkhzvg4bkpxr408hhg8kqa07n0jfalrdzaa3bika";
url = "https://elpa.gnu.org/packages/seq-2.19.tar";
sha256 = "11hb7is6a4h1lscjcfrzh576j0g3m5yjydn16s6x5bxp5gsr6zha";
};
packageRequires = [];
meta = {
@ -1981,10 +2009,10 @@
wisi = callPackage ({ cl-lib ? null, elpaBuild, emacs, fetchurl, lib }:
elpaBuild {
pname = "wisi";
version = "1.1.3";
version = "1.1.4";
src = fetchurl {
url = "https://elpa.gnu.org/packages/wisi-1.1.3.tar";
sha256 = "1vhligxyg73gvr68767pjgiqxah00a920h6i37kip8xmhlkgp9ak";
url = "https://elpa.gnu.org/packages/wisi-1.1.4.tar";
sha256 = "1n0bq77vspbxpzs54r0rigb2fhj5a5vm8qxwgdnqdawanmq72l4r";
};
packageRequires = [ cl-lib emacs ];
meta = {
@ -2048,10 +2076,10 @@
yasnippet = callPackage ({ cl-lib ? null, elpaBuild, fetchurl, lib }:
elpaBuild {
pname = "yasnippet";
version = "0.10.0";
version = "0.11.0";
src = fetchurl {
url = "https://elpa.gnu.org/packages/yasnippet-0.10.0.tar";
sha256 = "0vh70i73rknaxzglr4nragassgpjy2lj5mca2x6wqiqmv7mc8xdv";
url = "https://elpa.gnu.org/packages/yasnippet-0.11.0.tar";
sha256 = "1m0hchhianl69sb1iqa8av513qvz6krjg4b5ppwfx1sjlai9xj2y";
};
packageRequires = [ cl-lib ];
meta = {

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,10 @@
{ callPackage }: {
org = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "org";
version = "20161024";
version = "20161102";
src = fetchurl {
url = "http://orgmode.org/elpa/org-20161024.tar";
sha256 = "0yph2wiwl426wn1vgbwxgnh8lr6x40swbpzzl87vfzfh5wjx4l1h";
url = "http://orgmode.org/elpa/org-20161102.tar";
sha256 = "1mj100pnxskgrfmabj0vdmsijmr7v5ir7c18aypv92nh3fnmiz0f";
};
packageRequires = [];
meta = {
@ -14,10 +14,10 @@
}) {};
org-plus-contrib = callPackage ({ elpaBuild, fetchurl, lib }: elpaBuild {
pname = "org-plus-contrib";
version = "20161024";
version = "20161102";
src = fetchurl {
url = "http://orgmode.org/elpa/org-plus-contrib-20161024.tar";
sha256 = "1pr4mnf8mrxnlnn61y3w1jkwf1d7wlf9v8j65vvs1c26rbnzms85";
url = "http://orgmode.org/elpa/org-plus-contrib-20161102.tar";
sha256 = "124rizp50jaqshcmrr7x2132x5sy7q81nfb37482j9wzrc9l7b95";
};
packageRequires = [];
meta = {

View File

@ -1,4 +0,0 @@
source $stdenv/setup
mkdir -p $out/share/emacs/site-lisp
cp $src $out/share/emacs/site-lisp/stratego.el

View File

@ -1,10 +0,0 @@
{stdenv, fetchsvn}:
stdenv.mkDerivation {
name = "stratego-mode";
builder = ./builder.sh;
src = fetchsvn {
url = https://svn.strategoxt.org/repos/StrategoXT/stratego-editors/trunk/emacs/stratego.el;
rev = 12678;
sha256 = "4ab4ec587550233f29ca08b82fa0a9f7e5b33fc178348037e3ab1816bd60f538";
};
}

View File

@ -204,12 +204,12 @@ in
ruby-mine = buildRubyMine rec {
name = "ruby-mine-${version}";
version = "2016.2.4";
version = "2016.2.5";
description = "The Most Intelligent Ruby and Rails IDE";
license = stdenv.lib.licenses.unfree;
src = fetchurl {
url = "https://download.jetbrains.com/ruby/RubyMine-${version}.tar.gz";
sha256 = "14c1afkmny78vj434y46nja3v9smzcqsfdkhr83bqic1a0h4g84w";
sha256 = "1rncnm5dvhpfb7l5p2k0hs4yqzp8n1c4rvz9vldlf5k7mvwggp7p";
};
wmClass = "jetbrains-rubymine";
};
@ -264,12 +264,12 @@ in
phpstorm = buildPhpStorm rec {
name = "phpstorm-${version}";
version = "2016.2.1";
version = "2016.2.2";
description = "Professional IDE for Web and PHP developers";
license = stdenv.lib.licenses.unfree;
src = fetchurl {
url = "https://download.jetbrains.com/webide/PhpStorm-${version}.tar.gz";
sha256 = "0vgr0ds6z0y8qw2v55nr3pi5zb5x0n6pxm13hcp44iradns5kmbp";
sha256 = "0np0ypqga1xx9zq0qwpxiw9xdkr7k0jcdv1w790aafjar7a5qbyz";
};
wmClass = "jetbrains-phpstorm";
};

View File

@ -1,16 +1,16 @@
{ stdenv, fetchurl, cmake, gettext, pkgconfig, extra-cmake-modules, makeQtWrapper
, qtquickcontrols, qtwebkit
, qtquickcontrols, qtwebkit, qttools
, kconfig, kdeclarative, kdoctools, kiconthemes, ki18n, kitemmodels, kitemviews
, kjobwidgets, kcmutils, kio, knewstuff, knotifyconfig, kparts, ktexteditor
, threadweaver, kxmlgui, kwindowsystem
, threadweaver, kxmlgui, kwindowsystem, grantlee
, plasma-framework, krunner, kdevplatform, kdevelop-pg-qt, shared_mime_info
, libksysguard, llvmPackages
, libksysguard, llvmPackages, makeWrapper
}:
let
pname = "kdevelop";
version = "5.0";
dirVersion = "5.0.0";
version = "5.0.2";
dirVersion = "5.0.2";
in
stdenv.mkDerivation rec {
@ -18,22 +18,25 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "mirror://kde/stable/${pname}/${dirVersion}/src/${name}.tar.xz";
sha256 = "5e034b8670f4ba13ccb2948c28efa0b54df346e85b648078698cca8974ea811c";
sha256 = "9b017901167723230dee8b565cdc7b0e61762415ffcc0a32708f04f7ab668666";
};
nativeBuildInputs = [ cmake gettext pkgconfig extra-cmake-modules makeQtWrapper ];
nativeBuildInputs = [
cmake gettext pkgconfig extra-cmake-modules makeWrapper makeQtWrapper
];
buildInputs = [
qtquickcontrols qtwebkit
kconfig kdeclarative kdoctools kiconthemes ki18n kitemmodels kitemviews
kjobwidgets kcmutils kio knewstuff knotifyconfig kparts ktexteditor
threadweaver kxmlgui kwindowsystem plasma-framework krunner
threadweaver kxmlgui kwindowsystem grantlee plasma-framework krunner
kdevplatform kdevelop-pg-qt shared_mime_info libksysguard
llvmPackages.llvm llvmPackages.clang-unwrapped
];
postInstall = ''
wrapQtProgram "$out/bin/kdevelop"
wrapProgram "$out/bin/kdevelop!" --prefix PATH ":" "${qttools}/bin"
'';
meta = with stdenv.lib; {

View File

@ -6,8 +6,8 @@
let
pname = "kdevplatform";
version = "5.0";
dirVersion = "5.0.0";
version = "5.0.2";
dirVersion = "5.0.2";
in
stdenv.mkDerivation rec {
@ -15,7 +15,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "mirror://kde/stable/kdevelop/${dirVersion}/src/${name}.tar.xz";
sha256 = "4085b355ab8d599d902afbc11027e1aefb22afe30d63ed54ea5fe02f24edfd10";
sha256 = "a7f311198bb72f5fee064d99055e8df39ecf4e9066fe5c0ff901ee8c24d960ec";
};
nativeBuildInputs = [ cmake gettext pkgconfig extra-cmake-modules makeQtWrapper ];

View File

@ -24,12 +24,12 @@ let
unwrapped =
kdeDerivation rec {
name = "kile-${version}";
version = "2016-07-25";
version = "2016-10-24";
src = fetchgit {
url = git://anongit.kde.org/kile.git;
rev = "9cad4757df2493a6099b89114340493c6b436d0b";
sha256 = "0kikrkssfd7bj580iwsipirbz2klxvk0f7nfg5y9mkv0pnchx2mj";
rev = "e005e2ac140881aa7610bd363d181cf306f91f80";
sha256 = "1labv8jagsfk0k7nvxh90in9464avzdabgs215y1h658zjh1wpy4";
};

View File

@ -26,6 +26,18 @@ stdenv.mkDerivation {
url = "https://sources.debian.net/data/main/g/graphicsmagick/1.3.25-4/debian/patches/CVE-2016-7800_part2.patch";
sha256 = "1h4xv3i1aq5avsd584rwa5sa7ca8f7w9ggmh7j2llqq5kymwsv5f";
})
(fetchpatch {
url = "https://sources.debian.net/data/main/g/graphicsmagick/1.3.25-5/debian/patches/CVE-2016-8682.patch";
sha256 = "1wfirw2yi5y72657kvnbgjs0f9b3rs9nvk8gjbwhb9a03z9ws0y5";
})
(fetchpatch {
url = "https://sources.debian.net/data/main/g/graphicsmagick/1.3.25-5/debian/patches/CVE-2016-8683.patch";
sha256 = "102252zb34nj6alk1nhh1wbn3apd2v9rzk7clmm237332yj72vif";
})
(fetchpatch {
url = "https://sources.debian.net/data/main/g/graphicsmagick/1.3.25-5/debian/patches/CVE-2016-8684.patch";
sha256 = "1p36gpz904wnmbz1n64x4pdpg8lp9zs3gx0awklxqdvgl8m82vvy";
})
];
configureFlags = [

View File

@ -11,11 +11,11 @@
with lib;
stdenv.mkDerivation rec {
name = "blender-2.78";
name = "blender-2.78a";
src = fetchurl {
url = "http://download.blender.org/source/${name}.tar.gz";
sha256 = "0hfl7q6phydlk8mbkksnqxj004qqad99xkrp5n9wrz9vrcf3x1hp";
sha256 = "1byf1klrvm8fdw2libx7wldz2i6lblp9nih6y58ydh00paqi8jh1";
};
buildInputs =

View File

@ -4,11 +4,11 @@ with stdenv.lib;
stdenv.mkDerivation rec {
name = "cherrytree-${version}";
version = "0.37.1";
version = "0.37.6";
src = fetchurl {
url = "http://www.giuspen.com/software/${name}.tar.xz";
sha256 = "45f1cee4067598cf2ca8ae6f89d03789b86f9e3bf196236119868653420d7cdd";
sha256 = "0x4cgsimpwh7wfbzbzw2f5ipxxjizpi4wa99s1cwizynfjr38y5s";
};
buildInputs = with pythonPackages;

View File

@ -0,0 +1,23 @@
{ stdenv, buildGoPackage, fetchFromGitHub }:
buildGoPackage rec {
name = "exercism-${version}";
version = "2.3.0";
goPackagePath = "github.com/exercism/cli";
src = fetchFromGitHub {
owner = "exercism";
repo = "cli";
rev = "v${version}";
sha256 = "1zhvvmsh5kw739kylk0bqj1wa6vjyahz43dlxdpv42h8gfiiksf5";
};
meta = with stdenv.lib; {
description = "A Go based command line tool for exercism.io";
homepage = http://exercism.io/cli;
license = licenses.mit;
maintainers = [ maintainers.rbasso ];
platforms = platforms.linux;
};
}

View File

@ -7,7 +7,7 @@
, gnupg1compat
, icoutils
, imagemagick
, netcat
, netcat-gnu
, p7zip
, python2Packages
, unzip
@ -34,7 +34,7 @@ let
gnupg1compat
icoutils
imagemagick
netcat
netcat-gnu
p7zip
unzip
wget

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
name = "styx-${version}";
version = "0.2.0";
version = "0.3.1";
src = fetchFromGitHub {
owner = "styx-static";
repo = "styx";
rev = "v${version}";
sha256 = "1bcd0ss628mhchrl85fy6acxcxqvm1d3qywfaxhikahl1r7inpwg";
sha256 = "0wyibdyi4ld0kfhng5ldb2rlgjrci014fahxn7nnchlg7dvcc5ni";
};
server = caddy.bin;
@ -19,13 +19,14 @@ stdenv.mkDerivation rec {
installPhase = ''
mkdir $out
install -D -m 777 $sourceRoot/styx.sh $out/bin/styx
install -D -m 777 styx.sh $out/bin/styx
mkdir -p $out/share/styx
cp -r $sourceRoot/sample $out/share/styx
cp -r lib $out/share/styx
cp -r scaffold $out/share/styx
mkdir -p $out/share/doc/styx
asciidoctor $sourceRoot/doc/manual.doc -o $out/share/doc/styx/index.html
asciidoctor doc/manual.adoc -o $out/share/doc/styx/index.html
substituteAllInPlace $out/bin/styx
substituteAllInPlace $out/share/doc/styx/index.html

View File

@ -0,0 +1,38 @@
{ stdenv, fetchFromGitHub, fetchpatch
, pkgconfig, dbus, gdk_pixbuf, glib, libX11, gtk2, librsvg
, dbus_glib, autoreconfHook, wrapGAppsHook }:
stdenv.mkDerivation rec {
name = "volnoti-unstable-${version}";
version = "2013-09-23";
src = fetchFromGitHub {
owner = "davidbrazdil";
repo = "volnoti";
rev = "4af7c8e54ecc499097121909f02ecb42a8a60d24";
sha256 = "155lb7w563dkdkdn4752hl0zjhgnq3j4cvs9z98nb25k1xpmpki7";
};
patches = [
# Fix dbus interface headers. See
# https://github.com/davidbrazdil/volnoti/pull/10
(fetchpatch {
url = "https://github.com/davidbrazdil/volnoti/pull/10.patch";
sha256 = "046zfdjmvhb7jrsgh04vfgi35sgy1zkrhd3bzdby3nvds1wslfam";
})
];
nativeBuildInputs = [ pkgconfig autoreconfHook wrapGAppsHook ];
buildInputs = [
dbus gdk_pixbuf glib libX11 gtk2 dbus_glib librsvg
];
meta = with stdenv.lib; {
description = "Lightweight volume notification for Linux";
homepage = "https://github.com/davidbrazdil/volnoti";
license = licenses.gpl3;
platforms = platforms.linux;
maintainers = [ maintainers.gilligan ];
};
}

View File

@ -72,7 +72,6 @@ in buildPythonApplication rec {
'';
postFixup = ''
wrapPythonPrograms
mv $out/bin/qutebrowser $out/bin/.qutebrowser-noqtpath
makeQtWrapper $out/bin/.qutebrowser-noqtpath $out/bin/qutebrowser

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