Merge remote-tracking branch 'origin/master' into gcc-6
This commit is contained in:
commit
0abd1241d0
|
@ -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/`)
|
||||
|
|
|
@ -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>";
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {})
|
||||
|
|
142
lib/types.nix
142
lib/types.nix
|
@ -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.
|
||||
|
|
|
@ -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 original’s <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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -32,7 +32,7 @@ running NixOS system through several other means:
|
|||
<listitem>
|
||||
<para>Using AMIs for Amazon’s 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>
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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 ++ [<nixpkgs/pkgs/build-support/setup-hooks/separate-debug-info.sh>];
|
||||
hello = pkgs.hello.overrideAttrs (oldAttrs: {
|
||||
separateDebugInfo = true;
|
||||
});
|
||||
};
|
||||
</programlisting>
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 = {};
|
||||
};
|
||||
}
|
|
@ -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
|
||||
'';
|
||||
});
|
||||
|
|
|
@ -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.";
|
||||
};
|
||||
|
||||
|
|
|
@ -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.
|
||||
'';
|
||||
};
|
||||
|
||||
|
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -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 = ''
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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 = ''
|
||||
|
|
|
@ -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'';
|
||||
};
|
||||
|
|
|
@ -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
|
||||
'';
|
||||
|
|
|
@ -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));
|
||||
|
||||
};
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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'.";
|
||||
};
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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"
|
||||
];
|
||||
|
||||
};
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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,')
|
||||
|
|
|
@ -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"; });
|
||||
|
|
|
@ -57,6 +57,7 @@ import ./make-test.nix ({ pkgs, ...} : {
|
|||
connectTo."192.168.0.1:1024}" =
|
||||
{ password = carolPassword;
|
||||
publicKey = carolPubKey;
|
||||
hostname = "carol";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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");
|
||||
'';
|
||||
|
||||
})
|
||||
|
|
|
@ -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'");
|
||||
'';
|
||||
})
|
|
@ -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");
|
||||
'';
|
||||
})
|
|
@ -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
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 ];
|
||||
};
|
||||
}
|
||||
|
|
@ -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 = ''
|
||||
|
|
|
@ -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";
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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" \
|
||||
|
|
|
@ -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
|
|
@ -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" \
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
{ faust
|
||||
{ boost
|
||||
, faust
|
||||
, lv2
|
||||
, qt4
|
||||
|
||||
}:
|
||||
|
||||
faust.wrapWithBuildEnv {
|
||||
|
||||
baseName = "faust2lv2";
|
||||
|
||||
propagatedBuildInputs = [ lv2 ];
|
||||
propagatedBuildInputs = [ boost lv2 qt4 ];
|
||||
|
||||
}
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
{ boost
|
||||
, faust1git
|
||||
, lv2
|
||||
, qt4
|
||||
|
||||
}:
|
||||
|
||||
faust1git.wrapWithBuildEnv {
|
||||
|
||||
baseName = "faust2lv2";
|
||||
|
||||
propagatedBuildInputs = [ boost lv2 qt4 ];
|
||||
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
}
|
|
@ -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";
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -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; {
|
||||
|
|
|
@ -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 = ''
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
}
|
|
@ -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
|
||||
'';
|
||||
|
|
@ -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
|
||||
'';
|
||||
|
|
@ -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 = ''
|
|
@ -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 = ''
|
|
@ -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 = ''
|
|
@ -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 = ''
|
|
@ -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 ];
|
||||
};
|
||||
}
|
|
@ -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
|
||||
'';
|
||||
|
|
@ -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 ];
|
||||
};
|
||||
}
|
|
@ -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 ];
|
||||
};
|
||||
}
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,6 @@ stdenv.mkDerivation rec {
|
|||
'';
|
||||
homepage = https://github.com/cdemoulins/pamixer;
|
||||
license = licenses.gpl3;
|
||||
maintainers = with maintainers; [ hiberno ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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
File diff suppressed because it is too large
Load Diff
|
@ -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 = {
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
source $stdenv/setup
|
||||
|
||||
mkdir -p $out/share/emacs/site-lisp
|
||||
cp $src $out/share/emacs/site-lisp/stratego.el
|
|
@ -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";
|
||||
};
|
||||
}
|
|
@ -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";
|
||||
};
|
||||
|
|
|
@ -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; {
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -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";
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 ];
|
||||
};
|
||||
}
|
|
@ -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
Loading…
Reference in New Issue